rehydra 0.1.0
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/LICENSE +22 -0
- package/README.md +615 -0
- package/dist/crypto/index.d.ts +6 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +6 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/pii-map-crypto.d.ts +114 -0
- package/dist/crypto/pii-map-crypto.d.ts.map +1 -0
- package/dist/crypto/pii-map-crypto.js +228 -0
- package/dist/crypto/pii-map-crypto.js.map +1 -0
- package/dist/index.d.ts +180 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +384 -0
- package/dist/index.js.map +1 -0
- package/dist/ner/bio-decoder.d.ts +64 -0
- package/dist/ner/bio-decoder.d.ts.map +1 -0
- package/dist/ner/bio-decoder.js +216 -0
- package/dist/ner/bio-decoder.js.map +1 -0
- package/dist/ner/index.d.ts +10 -0
- package/dist/ner/index.d.ts.map +1 -0
- package/dist/ner/index.js +10 -0
- package/dist/ner/index.js.map +1 -0
- package/dist/ner/model-manager.d.ts +111 -0
- package/dist/ner/model-manager.d.ts.map +1 -0
- package/dist/ner/model-manager.js +325 -0
- package/dist/ner/model-manager.js.map +1 -0
- package/dist/ner/ner-model.d.ts +114 -0
- package/dist/ner/ner-model.d.ts.map +1 -0
- package/dist/ner/ner-model.js +253 -0
- package/dist/ner/ner-model.js.map +1 -0
- package/dist/ner/onnx-runtime.d.ts +46 -0
- package/dist/ner/onnx-runtime.d.ts.map +1 -0
- package/dist/ner/onnx-runtime.js +130 -0
- package/dist/ner/onnx-runtime.js.map +1 -0
- package/dist/ner/tokenizer.d.ts +118 -0
- package/dist/ner/tokenizer.d.ts.map +1 -0
- package/dist/ner/tokenizer.js +332 -0
- package/dist/ner/tokenizer.js.map +1 -0
- package/dist/pipeline/index.d.ts +12 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +12 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/prenormalize.d.ts +48 -0
- package/dist/pipeline/prenormalize.d.ts.map +1 -0
- package/dist/pipeline/prenormalize.js +94 -0
- package/dist/pipeline/prenormalize.js.map +1 -0
- package/dist/pipeline/resolver.d.ts +56 -0
- package/dist/pipeline/resolver.d.ts.map +1 -0
- package/dist/pipeline/resolver.js +239 -0
- package/dist/pipeline/resolver.js.map +1 -0
- package/dist/pipeline/semantic-data-loader.d.ts +165 -0
- package/dist/pipeline/semantic-data-loader.d.ts.map +1 -0
- package/dist/pipeline/semantic-data-loader.js +655 -0
- package/dist/pipeline/semantic-data-loader.js.map +1 -0
- package/dist/pipeline/semantic-enricher.d.ts +112 -0
- package/dist/pipeline/semantic-enricher.d.ts.map +1 -0
- package/dist/pipeline/semantic-enricher.js +318 -0
- package/dist/pipeline/semantic-enricher.js.map +1 -0
- package/dist/pipeline/tagger.d.ts +114 -0
- package/dist/pipeline/tagger.d.ts.map +1 -0
- package/dist/pipeline/tagger.js +374 -0
- package/dist/pipeline/tagger.js.map +1 -0
- package/dist/pipeline/title-extractor.d.ts +79 -0
- package/dist/pipeline/title-extractor.d.ts.map +1 -0
- package/dist/pipeline/title-extractor.js +801 -0
- package/dist/pipeline/title-extractor.js.map +1 -0
- package/dist/pipeline/validator.d.ts +65 -0
- package/dist/pipeline/validator.d.ts.map +1 -0
- package/dist/pipeline/validator.js +264 -0
- package/dist/pipeline/validator.js.map +1 -0
- package/dist/recognizers/base.d.ts +78 -0
- package/dist/recognizers/base.d.ts.map +1 -0
- package/dist/recognizers/base.js +100 -0
- package/dist/recognizers/base.js.map +1 -0
- package/dist/recognizers/bic-swift.d.ts +10 -0
- package/dist/recognizers/bic-swift.d.ts.map +1 -0
- package/dist/recognizers/bic-swift.js +107 -0
- package/dist/recognizers/bic-swift.js.map +1 -0
- package/dist/recognizers/credit-card.d.ts +32 -0
- package/dist/recognizers/credit-card.d.ts.map +1 -0
- package/dist/recognizers/credit-card.js +160 -0
- package/dist/recognizers/credit-card.js.map +1 -0
- package/dist/recognizers/custom-id.d.ts +28 -0
- package/dist/recognizers/custom-id.d.ts.map +1 -0
- package/dist/recognizers/custom-id.js +116 -0
- package/dist/recognizers/custom-id.js.map +1 -0
- package/dist/recognizers/email.d.ts +10 -0
- package/dist/recognizers/email.d.ts.map +1 -0
- package/dist/recognizers/email.js +75 -0
- package/dist/recognizers/email.js.map +1 -0
- package/dist/recognizers/iban.d.ts +14 -0
- package/dist/recognizers/iban.d.ts.map +1 -0
- package/dist/recognizers/iban.js +67 -0
- package/dist/recognizers/iban.js.map +1 -0
- package/dist/recognizers/index.d.ts +20 -0
- package/dist/recognizers/index.d.ts.map +1 -0
- package/dist/recognizers/index.js +42 -0
- package/dist/recognizers/index.js.map +1 -0
- package/dist/recognizers/ip-address.d.ts +14 -0
- package/dist/recognizers/ip-address.d.ts.map +1 -0
- package/dist/recognizers/ip-address.js +183 -0
- package/dist/recognizers/ip-address.js.map +1 -0
- package/dist/recognizers/phone.d.ts +10 -0
- package/dist/recognizers/phone.d.ts.map +1 -0
- package/dist/recognizers/phone.js +145 -0
- package/dist/recognizers/phone.js.map +1 -0
- package/dist/recognizers/registry.d.ts +59 -0
- package/dist/recognizers/registry.d.ts.map +1 -0
- package/dist/recognizers/registry.js +113 -0
- package/dist/recognizers/registry.js.map +1 -0
- package/dist/recognizers/url.d.ts +14 -0
- package/dist/recognizers/url.d.ts.map +1 -0
- package/dist/recognizers/url.js +121 -0
- package/dist/recognizers/url.js.map +1 -0
- package/dist/types/index.d.ts +197 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +80 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/pii-types.d.ts +50 -0
- package/dist/types/pii-types.d.ts.map +1 -0
- package/dist/types/pii-types.js +114 -0
- package/dist/types/pii-types.js.map +1 -0
- package/dist/utils/iban-checksum.d.ts +23 -0
- package/dist/utils/iban-checksum.d.ts.map +1 -0
- package/dist/utils/iban-checksum.js +106 -0
- package/dist/utils/iban-checksum.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/luhn.d.ts +17 -0
- package/dist/utils/luhn.d.ts.map +1 -0
- package/dist/utils/luhn.js +55 -0
- package/dist/utils/luhn.js.map +1 -0
- package/dist/utils/offsets.d.ts +86 -0
- package/dist/utils/offsets.d.ts.map +1 -0
- package/dist/utils/offsets.js +124 -0
- package/dist/utils/offsets.js.map +1 -0
- package/dist/utils/path.d.ts +34 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +96 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/storage-browser.d.ts +51 -0
- package/dist/utils/storage-browser.d.ts.map +1 -0
- package/dist/utils/storage-browser.js +381 -0
- package/dist/utils/storage-browser.js.map +1 -0
- package/dist/utils/storage-node.d.ts +43 -0
- package/dist/utils/storage-node.d.ts.map +1 -0
- package/dist/utils/storage-node.js +93 -0
- package/dist/utils/storage-node.js.map +1 -0
- package/dist/utils/storage.d.ts +70 -0
- package/dist/utils/storage.d.ts.map +1 -0
- package/dist/utils/storage.js +69 -0
- package/dist/utils/storage.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-safe path utilities
|
|
3
|
+
* Replaces Node.js path module for cross-platform compatibility
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Joins path segments with forward slashes
|
|
7
|
+
* Normalizes the result to remove redundant separators
|
|
8
|
+
*/
|
|
9
|
+
export function join(...parts) {
|
|
10
|
+
const joined = parts
|
|
11
|
+
.filter((part) => part !== "")
|
|
12
|
+
.join("/")
|
|
13
|
+
.replace(/\/+/g, "/");
|
|
14
|
+
return normalize(joined);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Returns the directory name of a path
|
|
18
|
+
* @example dirname('/foo/bar/baz.txt') => '/foo/bar'
|
|
19
|
+
*/
|
|
20
|
+
export function dirname(path) {
|
|
21
|
+
const normalized = normalize(path);
|
|
22
|
+
const lastSlash = normalized.lastIndexOf("/");
|
|
23
|
+
if (lastSlash === -1) {
|
|
24
|
+
return ".";
|
|
25
|
+
}
|
|
26
|
+
if (lastSlash === 0) {
|
|
27
|
+
return "/";
|
|
28
|
+
}
|
|
29
|
+
return normalized.slice(0, lastSlash);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Returns the last portion of a path (the filename)
|
|
33
|
+
* @example basename('/foo/bar/baz.txt') => 'baz.txt'
|
|
34
|
+
*/
|
|
35
|
+
export function basename(path) {
|
|
36
|
+
const normalized = normalize(path);
|
|
37
|
+
const lastSlash = normalized.lastIndexOf("/");
|
|
38
|
+
if (lastSlash === -1) {
|
|
39
|
+
return normalized;
|
|
40
|
+
}
|
|
41
|
+
return normalized.slice(lastSlash + 1);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Normalizes a path by resolving . and .. segments
|
|
45
|
+
* and removing redundant slashes
|
|
46
|
+
*/
|
|
47
|
+
export function normalize(path) {
|
|
48
|
+
// Replace backslashes with forward slashes (Windows compatibility)
|
|
49
|
+
let normalized = path.replace(/\\/g, "/");
|
|
50
|
+
// Remove redundant slashes (but keep leading // for UNC paths if needed)
|
|
51
|
+
normalized = normalized.replace(/\/+/g, "/");
|
|
52
|
+
// Handle . and .. segments
|
|
53
|
+
const parts = normalized.split("/");
|
|
54
|
+
const result = [];
|
|
55
|
+
for (const part of parts) {
|
|
56
|
+
if (part === "..") {
|
|
57
|
+
// Don't pop past root
|
|
58
|
+
if (result.length > 0 && result[result.length - 1] !== "..") {
|
|
59
|
+
result.pop();
|
|
60
|
+
}
|
|
61
|
+
else if (!normalized.startsWith("/")) {
|
|
62
|
+
result.push("..");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (part !== "." && part !== "") {
|
|
66
|
+
result.push(part);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Preserve leading slash
|
|
70
|
+
const prefix = normalized.startsWith("/") ? "/" : "";
|
|
71
|
+
const joined = result.join("/");
|
|
72
|
+
return prefix + joined || ".";
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Returns the extension of a path
|
|
76
|
+
* @example extname('/foo/bar/baz.txt') => '.txt'
|
|
77
|
+
*/
|
|
78
|
+
export function extname(path) {
|
|
79
|
+
const base = basename(path);
|
|
80
|
+
const dotIndex = base.lastIndexOf(".");
|
|
81
|
+
if (dotIndex <= 0) {
|
|
82
|
+
return "";
|
|
83
|
+
}
|
|
84
|
+
return base.slice(dotIndex);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Checks if a path is absolute
|
|
88
|
+
*/
|
|
89
|
+
export function isAbsolute(path) {
|
|
90
|
+
// Unix absolute paths start with /
|
|
91
|
+
// Windows absolute paths start with drive letter (C:) or UNC (\\)
|
|
92
|
+
return (path.startsWith("/") ||
|
|
93
|
+
/^[a-zA-Z]:/.test(path) ||
|
|
94
|
+
path.startsWith("\\\\"));
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/utils/path.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Storage Provider
|
|
3
|
+
* Implements StorageProvider using IndexedDB for text data and OPFS for binary files
|
|
4
|
+
*/
|
|
5
|
+
import type { StorageProvider } from "./storage.js";
|
|
6
|
+
/**
|
|
7
|
+
* Browser implementation of StorageProvider
|
|
8
|
+
* Uses IndexedDB for text data and OPFS for binary files (like models)
|
|
9
|
+
*/
|
|
10
|
+
export declare class BrowserStorageProvider implements StorageProvider {
|
|
11
|
+
/**
|
|
12
|
+
* Determines if a path should use OPFS (for large binary files)
|
|
13
|
+
*/
|
|
14
|
+
private shouldUseOPFS;
|
|
15
|
+
/**
|
|
16
|
+
* Normalizes a path to a storage key
|
|
17
|
+
*/
|
|
18
|
+
private toStorageKey;
|
|
19
|
+
/**
|
|
20
|
+
* Reads a file as binary data
|
|
21
|
+
*/
|
|
22
|
+
readFile(path: string): Promise<Uint8Array>;
|
|
23
|
+
/**
|
|
24
|
+
* Reads a file as text
|
|
25
|
+
*/
|
|
26
|
+
readTextFile(path: string, encoding?: string): Promise<string>;
|
|
27
|
+
/**
|
|
28
|
+
* Writes data to a file
|
|
29
|
+
*/
|
|
30
|
+
writeFile(path: string, data: Uint8Array | string): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Checks if a file exists
|
|
33
|
+
*/
|
|
34
|
+
exists(path: string): Promise<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* Creates a directory (no-op in browser storage, directories are implicit)
|
|
37
|
+
*/
|
|
38
|
+
mkdir(_path: string): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Removes a file or directory
|
|
41
|
+
*/
|
|
42
|
+
rm(path: string, options?: {
|
|
43
|
+
recursive?: boolean;
|
|
44
|
+
force?: boolean;
|
|
45
|
+
}): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Gets the cache directory path (virtual path in browser)
|
|
48
|
+
*/
|
|
49
|
+
getCacheDir(subdir: string): string;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=storage-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-browser.d.ts","sourceRoot":"","sources":["../../src/utils/storage-browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAuMpD;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,eAAe;IAC5D;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAgCjD;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0CpE;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBvE;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB5C;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC;;OAEG;IACG,EAAE,CACN,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GACjD,OAAO,CAAC,IAAI,CAAC;IAkEhB;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAGpC"}
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Storage Provider
|
|
3
|
+
* Implements StorageProvider using IndexedDB for text data and OPFS for binary files
|
|
4
|
+
*/
|
|
5
|
+
import { join } from "./path.js";
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Constants
|
|
8
|
+
// ============================================================================
|
|
9
|
+
const DB_NAME = "rehydra";
|
|
10
|
+
const DB_VERSION = 1;
|
|
11
|
+
const STORE_NAME = "files";
|
|
12
|
+
const CACHE_PREFIX = "rehydra";
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// IndexedDB Helpers
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Opens the IndexedDB database
|
|
18
|
+
*/
|
|
19
|
+
function openDatabase() {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
const request = indexedDB.open(DB_NAME, DB_VERSION);
|
|
22
|
+
request.onerror = () => {
|
|
23
|
+
reject(new Error(`Failed to open IndexedDB: ${request.error?.message}`));
|
|
24
|
+
};
|
|
25
|
+
request.onsuccess = () => {
|
|
26
|
+
resolve(request.result);
|
|
27
|
+
};
|
|
28
|
+
request.onupgradeneeded = (event) => {
|
|
29
|
+
const db = event.target.result;
|
|
30
|
+
if (!db.objectStoreNames.contains(STORE_NAME)) {
|
|
31
|
+
db.createObjectStore(STORE_NAME);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Gets a value from IndexedDB
|
|
38
|
+
*/
|
|
39
|
+
async function idbGet(key) {
|
|
40
|
+
const db = await openDatabase();
|
|
41
|
+
return new Promise((resolve, reject) => {
|
|
42
|
+
const transaction = db.transaction(STORE_NAME, "readonly");
|
|
43
|
+
const store = transaction.objectStore(STORE_NAME);
|
|
44
|
+
const request = store.get(key);
|
|
45
|
+
request.onerror = () => {
|
|
46
|
+
reject(new Error(`Failed to read from IndexedDB: ${request.error?.message}`));
|
|
47
|
+
};
|
|
48
|
+
request.onsuccess = () => {
|
|
49
|
+
resolve(request.result);
|
|
50
|
+
};
|
|
51
|
+
transaction.oncomplete = () => {
|
|
52
|
+
db.close();
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Sets a value in IndexedDB
|
|
58
|
+
*/
|
|
59
|
+
async function idbSet(key, value) {
|
|
60
|
+
const db = await openDatabase();
|
|
61
|
+
return new Promise((resolve, reject) => {
|
|
62
|
+
const transaction = db.transaction(STORE_NAME, "readwrite");
|
|
63
|
+
const store = transaction.objectStore(STORE_NAME);
|
|
64
|
+
const request = store.put(value, key);
|
|
65
|
+
request.onerror = () => {
|
|
66
|
+
reject(new Error(`Failed to write to IndexedDB: ${request.error?.message}`));
|
|
67
|
+
};
|
|
68
|
+
transaction.oncomplete = () => {
|
|
69
|
+
db.close();
|
|
70
|
+
resolve();
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Deletes a value from IndexedDB
|
|
76
|
+
*/
|
|
77
|
+
async function idbDelete(key) {
|
|
78
|
+
const db = await openDatabase();
|
|
79
|
+
return new Promise((resolve, reject) => {
|
|
80
|
+
const transaction = db.transaction(STORE_NAME, "readwrite");
|
|
81
|
+
const store = transaction.objectStore(STORE_NAME);
|
|
82
|
+
const request = store.delete(key);
|
|
83
|
+
request.onerror = () => {
|
|
84
|
+
reject(new Error(`Failed to delete from IndexedDB: ${request.error?.message}`));
|
|
85
|
+
};
|
|
86
|
+
transaction.oncomplete = () => {
|
|
87
|
+
db.close();
|
|
88
|
+
resolve();
|
|
89
|
+
};
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Gets all keys from IndexedDB that start with a prefix
|
|
94
|
+
*/
|
|
95
|
+
async function idbGetKeysWithPrefix(prefix) {
|
|
96
|
+
const db = await openDatabase();
|
|
97
|
+
return new Promise((resolve, reject) => {
|
|
98
|
+
const transaction = db.transaction(STORE_NAME, "readonly");
|
|
99
|
+
const store = transaction.objectStore(STORE_NAME);
|
|
100
|
+
const request = store.getAllKeys();
|
|
101
|
+
request.onerror = () => {
|
|
102
|
+
reject(new Error(`Failed to get keys from IndexedDB: ${request.error?.message}`));
|
|
103
|
+
};
|
|
104
|
+
request.onsuccess = () => {
|
|
105
|
+
const allKeys = request.result;
|
|
106
|
+
const matchingKeys = allKeys.filter((key) => typeof key === "string" && key.startsWith(prefix));
|
|
107
|
+
resolve(matchingKeys);
|
|
108
|
+
};
|
|
109
|
+
transaction.oncomplete = () => {
|
|
110
|
+
db.close();
|
|
111
|
+
};
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// ============================================================================
|
|
115
|
+
// OPFS Helpers
|
|
116
|
+
// ============================================================================
|
|
117
|
+
/**
|
|
118
|
+
* Checks if OPFS is available
|
|
119
|
+
*/
|
|
120
|
+
function isOPFSAvailable() {
|
|
121
|
+
return (typeof navigator !== "undefined" &&
|
|
122
|
+
"storage" in navigator &&
|
|
123
|
+
"getDirectory" in navigator.storage);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Gets the OPFS root directory handle
|
|
127
|
+
*/
|
|
128
|
+
async function getOPFSRoot() {
|
|
129
|
+
if (!isOPFSAvailable()) {
|
|
130
|
+
throw new Error("Origin Private File System is not available in this browser");
|
|
131
|
+
}
|
|
132
|
+
return navigator.storage.getDirectory();
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Gets a file handle from OPFS, creating parent directories if needed
|
|
136
|
+
*/
|
|
137
|
+
async function getOPFSFileHandle(path, create) {
|
|
138
|
+
const root = await getOPFSRoot();
|
|
139
|
+
const parts = path.split("/").filter((p) => p !== "");
|
|
140
|
+
if (parts.length === 0) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
const filename = parts.pop();
|
|
144
|
+
let dir = root;
|
|
145
|
+
// Navigate/create directories
|
|
146
|
+
for (const part of parts) {
|
|
147
|
+
try {
|
|
148
|
+
dir = await dir.getDirectoryHandle(part, { create });
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
if (!create)
|
|
152
|
+
return null;
|
|
153
|
+
throw new Error(`Failed to access directory: ${part}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Get file handle
|
|
157
|
+
try {
|
|
158
|
+
return await dir.getFileHandle(filename, { create });
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
if (!create)
|
|
162
|
+
return null;
|
|
163
|
+
throw new Error(`Failed to access file: ${filename}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// ============================================================================
|
|
167
|
+
// Browser Storage Provider Implementation
|
|
168
|
+
// ============================================================================
|
|
169
|
+
/**
|
|
170
|
+
* Browser implementation of StorageProvider
|
|
171
|
+
* Uses IndexedDB for text data and OPFS for binary files (like models)
|
|
172
|
+
*/
|
|
173
|
+
export class BrowserStorageProvider {
|
|
174
|
+
/**
|
|
175
|
+
* Determines if a path should use OPFS (for large binary files)
|
|
176
|
+
*/
|
|
177
|
+
shouldUseOPFS(path) {
|
|
178
|
+
// Use OPFS for model files (large binaries)
|
|
179
|
+
return path.includes("/models/") && (path.endsWith(".onnx") ||
|
|
180
|
+
path.endsWith(".bin") ||
|
|
181
|
+
path.endsWith(".safetensors"));
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Normalizes a path to a storage key
|
|
185
|
+
*/
|
|
186
|
+
toStorageKey(path) {
|
|
187
|
+
// Remove leading slashes and normalize
|
|
188
|
+
return path.replace(/^\/+/, "").replace(/\/+/g, "/");
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Reads a file as binary data
|
|
192
|
+
*/
|
|
193
|
+
async readFile(path) {
|
|
194
|
+
const key = this.toStorageKey(path);
|
|
195
|
+
if (this.shouldUseOPFS(path) && isOPFSAvailable()) {
|
|
196
|
+
// Read from OPFS
|
|
197
|
+
const handle = await getOPFSFileHandle(key, false);
|
|
198
|
+
if (!handle) {
|
|
199
|
+
throw new Error(`File not found: ${path}`);
|
|
200
|
+
}
|
|
201
|
+
const file = await handle.getFile();
|
|
202
|
+
const buffer = await file.arrayBuffer();
|
|
203
|
+
return new Uint8Array(buffer);
|
|
204
|
+
}
|
|
205
|
+
// Read from IndexedDB
|
|
206
|
+
const data = await idbGet(key);
|
|
207
|
+
if (data === undefined) {
|
|
208
|
+
throw new Error(`File not found: ${path}`);
|
|
209
|
+
}
|
|
210
|
+
if (data instanceof Uint8Array) {
|
|
211
|
+
return data;
|
|
212
|
+
}
|
|
213
|
+
if (typeof data === "string") {
|
|
214
|
+
const encoder = new TextEncoder();
|
|
215
|
+
return encoder.encode(data);
|
|
216
|
+
}
|
|
217
|
+
throw new Error(`Invalid data type for file: ${path}`);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Reads a file as text
|
|
221
|
+
*/
|
|
222
|
+
async readTextFile(path, encoding) {
|
|
223
|
+
const key = this.toStorageKey(path);
|
|
224
|
+
// First try IndexedDB (where we store text files)
|
|
225
|
+
const data = await idbGet(key);
|
|
226
|
+
if (data !== undefined) {
|
|
227
|
+
if (typeof data === "string") {
|
|
228
|
+
return data;
|
|
229
|
+
}
|
|
230
|
+
if (data instanceof Uint8Array) {
|
|
231
|
+
// Handle latin1 encoding
|
|
232
|
+
if (encoding === "latin1") {
|
|
233
|
+
// Latin1 is a 1:1 mapping of byte values to characters
|
|
234
|
+
return Array.from(data)
|
|
235
|
+
.map((b) => String.fromCharCode(b))
|
|
236
|
+
.join("");
|
|
237
|
+
}
|
|
238
|
+
const decoder = new TextDecoder(encoding ?? "utf-8");
|
|
239
|
+
return decoder.decode(data);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// Try OPFS as fallback
|
|
243
|
+
if (isOPFSAvailable()) {
|
|
244
|
+
const handle = await getOPFSFileHandle(key, false);
|
|
245
|
+
if (handle) {
|
|
246
|
+
const file = await handle.getFile();
|
|
247
|
+
if (encoding === "latin1") {
|
|
248
|
+
const buffer = await file.arrayBuffer();
|
|
249
|
+
const bytes = new Uint8Array(buffer);
|
|
250
|
+
return Array.from(bytes)
|
|
251
|
+
.map((b) => String.fromCharCode(b))
|
|
252
|
+
.join("");
|
|
253
|
+
}
|
|
254
|
+
return file.text();
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
throw new Error(`File not found: ${path}`);
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Writes data to a file
|
|
261
|
+
*/
|
|
262
|
+
async writeFile(path, data) {
|
|
263
|
+
const key = this.toStorageKey(path);
|
|
264
|
+
if (this.shouldUseOPFS(path) && isOPFSAvailable()) {
|
|
265
|
+
// Write to OPFS for large binary files
|
|
266
|
+
const handle = await getOPFSFileHandle(key, true);
|
|
267
|
+
if (!handle) {
|
|
268
|
+
throw new Error(`Failed to create file: ${path}`);
|
|
269
|
+
}
|
|
270
|
+
const writable = await handle.createWritable();
|
|
271
|
+
// Cast data to the expected type for FileSystemWritableFileStream
|
|
272
|
+
await writable.write(typeof data === "string" ? data : data);
|
|
273
|
+
await writable.close();
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
// Write to IndexedDB for smaller/text files
|
|
277
|
+
await idbSet(key, data);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Checks if a file exists
|
|
282
|
+
*/
|
|
283
|
+
async exists(path) {
|
|
284
|
+
const key = this.toStorageKey(path);
|
|
285
|
+
// Check IndexedDB first
|
|
286
|
+
const idbData = await idbGet(key);
|
|
287
|
+
if (idbData !== undefined) {
|
|
288
|
+
return true;
|
|
289
|
+
}
|
|
290
|
+
// Check OPFS
|
|
291
|
+
if (isOPFSAvailable()) {
|
|
292
|
+
const handle = await getOPFSFileHandle(key, false);
|
|
293
|
+
if (handle) {
|
|
294
|
+
return true;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Creates a directory (no-op in browser storage, directories are implicit)
|
|
301
|
+
*/
|
|
302
|
+
async mkdir(_path) {
|
|
303
|
+
// Directories are created implicitly when writing files
|
|
304
|
+
// For OPFS, we create them when needed
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Removes a file or directory
|
|
308
|
+
*/
|
|
309
|
+
async rm(path, options) {
|
|
310
|
+
const key = this.toStorageKey(path);
|
|
311
|
+
if (options?.recursive === true) {
|
|
312
|
+
// Delete all keys with this prefix from IndexedDB
|
|
313
|
+
const keys = await idbGetKeysWithPrefix(key);
|
|
314
|
+
for (const k of keys) {
|
|
315
|
+
await idbDelete(k);
|
|
316
|
+
}
|
|
317
|
+
// Delete from OPFS if available
|
|
318
|
+
if (isOPFSAvailable()) {
|
|
319
|
+
try {
|
|
320
|
+
const root = await getOPFSRoot();
|
|
321
|
+
const parts = key.split("/").filter((p) => p !== "");
|
|
322
|
+
let dir = root;
|
|
323
|
+
// Navigate to parent directory
|
|
324
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
325
|
+
try {
|
|
326
|
+
dir = await dir.getDirectoryHandle(parts[i]);
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
return; // Directory doesn't exist
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
// Remove the entry
|
|
333
|
+
const name = parts[parts.length - 1];
|
|
334
|
+
if (name !== undefined && name !== "") {
|
|
335
|
+
await dir.removeEntry(name, { recursive: true });
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
if (options?.force !== true) {
|
|
340
|
+
throw new Error(`Failed to remove: ${path}`);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
// Delete single file
|
|
347
|
+
try {
|
|
348
|
+
await idbDelete(key);
|
|
349
|
+
}
|
|
350
|
+
catch (e) {
|
|
351
|
+
if (options?.force !== true)
|
|
352
|
+
throw e;
|
|
353
|
+
}
|
|
354
|
+
if (isOPFSAvailable()) {
|
|
355
|
+
try {
|
|
356
|
+
const handle = await getOPFSFileHandle(key, false);
|
|
357
|
+
if (handle !== null) {
|
|
358
|
+
const root = await getOPFSRoot();
|
|
359
|
+
const parts = key.split("/").filter((p) => p !== "");
|
|
360
|
+
let dir = root;
|
|
361
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
362
|
+
dir = await dir.getDirectoryHandle(parts[i]);
|
|
363
|
+
}
|
|
364
|
+
await dir.removeEntry(parts[parts.length - 1]);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
catch (e) {
|
|
368
|
+
if (options?.force !== true)
|
|
369
|
+
throw e;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Gets the cache directory path (virtual path in browser)
|
|
376
|
+
*/
|
|
377
|
+
getCacheDir(subdir) {
|
|
378
|
+
return join(CACHE_PREFIX, subdir);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
//# sourceMappingURL=storage-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-browser.js","sourceRoot":"","sources":["../../src/utils/storage-browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js Storage Provider
|
|
3
|
+
* Implements StorageProvider using Node.js fs/promises
|
|
4
|
+
*/
|
|
5
|
+
import type { StorageProvider } from "./storage.js";
|
|
6
|
+
/**
|
|
7
|
+
* Node.js implementation of StorageProvider
|
|
8
|
+
* Uses fs/promises for file operations
|
|
9
|
+
*/
|
|
10
|
+
export declare class NodeStorageProvider implements StorageProvider {
|
|
11
|
+
/**
|
|
12
|
+
* Reads a file as binary data
|
|
13
|
+
*/
|
|
14
|
+
readFile(path: string): Promise<Uint8Array>;
|
|
15
|
+
/**
|
|
16
|
+
* Reads a file as text
|
|
17
|
+
*/
|
|
18
|
+
readTextFile(path: string, encoding?: string): Promise<string>;
|
|
19
|
+
/**
|
|
20
|
+
* Writes data to a file
|
|
21
|
+
*/
|
|
22
|
+
writeFile(path: string, data: Uint8Array | string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Checks if a file or directory exists
|
|
25
|
+
*/
|
|
26
|
+
exists(path: string): Promise<boolean>;
|
|
27
|
+
/**
|
|
28
|
+
* Creates a directory
|
|
29
|
+
*/
|
|
30
|
+
mkdir(path: string): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Removes a file or directory
|
|
33
|
+
*/
|
|
34
|
+
rm(path: string, options?: {
|
|
35
|
+
recursive?: boolean;
|
|
36
|
+
force?: boolean;
|
|
37
|
+
}): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Gets the platform-specific cache directory
|
|
40
|
+
*/
|
|
41
|
+
getCacheDir(subdir: string): string;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=storage-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-node.d.ts","sourceRoot":"","sources":["../../src/utils/storage-node.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IACzD;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKjD;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMpE;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvE;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS5C;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC;;OAEG;IACG,EAAE,CACN,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GACjD,OAAO,CAAC,IAAI,CAAC;IAOhB;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAsBpC"}
|