@resourcexjs/node-provider 2.5.7 → 2.7.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/dist/index.js +26 -10
- package/dist/index.js.map +3 -3
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -4,9 +4,11 @@ import { join as join3 } from "node:path";
|
|
|
4
4
|
import { FolderLoader } from "@resourcexjs/core";
|
|
5
5
|
|
|
6
6
|
// src/FileSystemRXAStore.ts
|
|
7
|
-
import { mkdir,
|
|
7
|
+
import { mkdir, writeFile, unlink, readdir, stat } from "node:fs/promises";
|
|
8
|
+
import { createReadStream } from "node:fs";
|
|
9
|
+
import { createHash } from "node:crypto";
|
|
8
10
|
import { join } from "node:path";
|
|
9
|
-
import { computeDigest, RegistryError } from "@resourcexjs/core";
|
|
11
|
+
import { computeDigest, isValidDigest, RegistryError } from "@resourcexjs/core";
|
|
10
12
|
|
|
11
13
|
class FileSystemRXAStore {
|
|
12
14
|
basePath;
|
|
@@ -18,12 +20,26 @@ class FileSystemRXAStore {
|
|
|
18
20
|
return join(this.basePath, prefix, digest);
|
|
19
21
|
}
|
|
20
22
|
async get(digest) {
|
|
23
|
+
if (!isValidDigest(digest)) {
|
|
24
|
+
throw new RegistryError(`Invalid digest format: ${digest}`);
|
|
25
|
+
}
|
|
21
26
|
const path = this.getPath(digest);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
const chunks = [];
|
|
28
|
+
const hash = createHash("sha256");
|
|
29
|
+
const readStream = createReadStream(path);
|
|
30
|
+
await new Promise((resolve, reject) => {
|
|
31
|
+
readStream.on("data", (chunk) => {
|
|
32
|
+
chunks.push(chunk);
|
|
33
|
+
hash.update(chunk);
|
|
34
|
+
});
|
|
35
|
+
readStream.on("end", resolve);
|
|
36
|
+
readStream.on("error", () => reject(new RegistryError(`Blob not found: ${digest}`)));
|
|
37
|
+
});
|
|
38
|
+
const actualDigest = `sha256:${hash.digest("hex")}`;
|
|
39
|
+
if (actualDigest !== digest) {
|
|
40
|
+
throw new RegistryError(`Content integrity check failed: expected ${digest}, got ${actualDigest}`);
|
|
26
41
|
}
|
|
42
|
+
return Buffer.concat(chunks);
|
|
27
43
|
}
|
|
28
44
|
async put(data) {
|
|
29
45
|
const digest = computeDigest(data);
|
|
@@ -72,7 +88,7 @@ class FileSystemRXAStore {
|
|
|
72
88
|
}
|
|
73
89
|
|
|
74
90
|
// src/FileSystemRXMStore.ts
|
|
75
|
-
import { mkdir as mkdir2, readFile
|
|
91
|
+
import { mkdir as mkdir2, readFile, writeFile as writeFile2, unlink as unlink2, readdir as readdir2, stat as stat2, rm } from "node:fs/promises";
|
|
76
92
|
import { join as join2 } from "node:path";
|
|
77
93
|
var LOCAL_DIR = "_local";
|
|
78
94
|
|
|
@@ -91,7 +107,7 @@ class FileSystemRXMStore {
|
|
|
91
107
|
async get(name, tag, registry) {
|
|
92
108
|
const path = this.getPath(name, tag, registry);
|
|
93
109
|
try {
|
|
94
|
-
const data = await
|
|
110
|
+
const data = await readFile(path, "utf-8");
|
|
95
111
|
return JSON.parse(data);
|
|
96
112
|
} catch {
|
|
97
113
|
return null;
|
|
@@ -180,7 +196,7 @@ class FileSystemRXMStore {
|
|
|
180
196
|
for (const file of files) {
|
|
181
197
|
if (file.endsWith(".json")) {
|
|
182
198
|
const filePath = join2(namePath, file);
|
|
183
|
-
const data = await
|
|
199
|
+
const data = await readFile(filePath, "utf-8");
|
|
184
200
|
const manifest = JSON.parse(data);
|
|
185
201
|
results.push(manifest);
|
|
186
202
|
}
|
|
@@ -225,4 +241,4 @@ export {
|
|
|
225
241
|
FileSystemRXAStore
|
|
226
242
|
};
|
|
227
243
|
|
|
228
|
-
//# debugId=
|
|
244
|
+
//# debugId=E49394B309EA286264756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
"sources": ["../src/NodeProvider.ts", "../src/FileSystemRXAStore.ts", "../src/FileSystemRXMStore.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * NodeProvider - Node.js/Bun implementation of ResourceXProvider.\n *\n * Uses filesystem for blob storage and JSON files for manifest storage.\n */\n\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { ResourceXProvider, ProviderConfig, ProviderStores } from \"@resourcexjs/core\";\nimport { FolderLoader } from \"@resourcexjs/core\";\nimport { FileSystemRXAStore } from \"./FileSystemRXAStore.js\";\nimport { FileSystemRXMStore } from \"./FileSystemRXMStore.js\";\n\nconst DEFAULT_BASE_PATH = `${homedir()}/.resourcex`;\n\n/**\n * Node.js/Bun provider for ResourceX.\n *\n * Storage structure:\n * - ~/.resourcex/blobs/ - Content-addressable blob storage\n * - ~/.resourcex/manifests/ - Manifest JSON files\n */\nexport class NodeProvider implements ResourceXProvider {\n readonly platform = \"node\";\n\n createStores(config: ProviderConfig): ProviderStores {\n const basePath = (config.path as string) ?? DEFAULT_BASE_PATH;\n\n return {\n rxaStore: new FileSystemRXAStore(join(basePath, \"blobs\")),\n rxmStore: new FileSystemRXMStore(join(basePath, \"manifests\")),\n };\n }\n\n createLoader(_config: ProviderConfig): FolderLoader {\n return new FolderLoader();\n }\n}\n",
|
|
6
|
-
"/**\n * FileSystemRXAStore - File system implementation of RXAStore.\n *\n * Stores blobs as files named by their digest.\n * Directory structure: {basePath}/{digest-prefix}/{digest}\n */\n\nimport { mkdir,
|
|
6
|
+
"/**\n * FileSystemRXAStore - File system implementation of RXAStore.\n *\n * Stores blobs as files named by their digest.\n * Directory structure: {basePath}/{digest-prefix}/{digest}\n */\n\nimport { mkdir, writeFile, unlink, readdir, stat } from \"node:fs/promises\";\nimport { createReadStream } from \"node:fs\";\nimport { createHash } from \"node:crypto\";\nimport { join } from \"node:path\";\nimport type { RXAStore } from \"@resourcexjs/core\";\nimport { computeDigest, isValidDigest, RegistryError } from \"@resourcexjs/core\";\n\nexport class FileSystemRXAStore implements RXAStore {\n constructor(private readonly basePath: string) {}\n\n /**\n * Get path for a digest.\n * Uses first 2 chars as subdirectory for better filesystem performance.\n */\n private getPath(digest: string): string {\n const prefix = digest.substring(7, 9); // Skip \"sha256:\" prefix\n return join(this.basePath, prefix, digest);\n }\n\n async get(digest: string): Promise<Buffer> {\n // Validate digest format\n if (!isValidDigest(digest)) {\n throw new RegistryError(`Invalid digest format: ${digest}`);\n }\n\n const path = this.getPath(digest);\n\n // Stream-based reading and verification\n const chunks: Buffer[] = [];\n const hash = createHash(\"sha256\");\n const readStream = createReadStream(path);\n\n await new Promise<void>((resolve, reject) => {\n readStream.on(\"data\", (chunk: Buffer) => {\n chunks.push(chunk);\n hash.update(chunk);\n });\n readStream.on(\"end\", resolve);\n readStream.on(\"error\", () => reject(new RegistryError(`Blob not found: ${digest}`)));\n });\n\n // Verify Hash\n const actualDigest = `sha256:${hash.digest(\"hex\")}`;\n if (actualDigest !== digest) {\n throw new RegistryError(\n `Content integrity check failed: expected ${digest}, got ${actualDigest}`\n );\n }\n\n return Buffer.concat(chunks);\n }\n\n async put(data: Buffer): Promise<string> {\n const digest = computeDigest(data);\n const path = this.getPath(digest);\n\n // Skip if already exists (deduplication)\n if (await this.has(digest)) {\n return digest;\n }\n\n // Ensure directory exists\n const dir = join(path, \"..\");\n await mkdir(dir, { recursive: true });\n\n // Write file\n await writeFile(path, data);\n\n return digest;\n }\n\n async has(digest: string): Promise<boolean> {\n const path = this.getPath(digest);\n try {\n await stat(path);\n return true;\n } catch {\n return false;\n }\n }\n\n async delete(digest: string): Promise<void> {\n const path = this.getPath(digest);\n try {\n await unlink(path);\n } catch {\n // Ignore if not exists\n }\n }\n\n async list(): Promise<string[]> {\n const digests: string[] = [];\n\n try {\n const prefixes = await readdir(this.basePath);\n\n for (const prefix of prefixes) {\n const prefixPath = join(this.basePath, prefix);\n try {\n const files = await readdir(prefixPath);\n for (const file of files) {\n if (file.startsWith(\"sha256:\")) {\n digests.push(file);\n }\n }\n } catch {\n // Skip if not a directory\n }\n }\n } catch {\n // Base path doesn't exist\n }\n\n return digests;\n }\n}\n",
|
|
7
7
|
"/**\n * FileSystemRXMStore - File system implementation of RXMStore.\n *\n * Stores manifests as JSON files.\n * Directory structure: {basePath}/{registry|_local}/{name}/{tag}.json\n */\n\nimport { mkdir, readFile, writeFile, unlink, readdir, stat, rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { RXMStore, StoredRXM, RXMSearchOptions } from \"@resourcexjs/core\";\n\nconst LOCAL_DIR = \"_local\";\n\nexport class FileSystemRXMStore implements RXMStore {\n constructor(private readonly basePath: string) {}\n\n /**\n * Get directory path for a manifest.\n */\n private getDir(name: string, registry?: string): string {\n const registryDir = registry ?? LOCAL_DIR;\n return join(this.basePath, registryDir, name);\n }\n\n /**\n * Get file path for a manifest.\n */\n private getPath(name: string, tag: string, registry?: string): string {\n return join(this.getDir(name, registry), `${tag}.json`);\n }\n\n async get(name: string, tag: string, registry?: string): Promise<StoredRXM | null> {\n const path = this.getPath(name, tag, registry);\n try {\n const data = await readFile(path, \"utf-8\");\n return JSON.parse(data) as StoredRXM;\n } catch {\n return null;\n }\n }\n\n async put(manifest: StoredRXM): Promise<void> {\n const path = this.getPath(manifest.name, manifest.tag, manifest.registry);\n const dir = join(path, \"..\");\n\n await mkdir(dir, { recursive: true });\n await writeFile(path, JSON.stringify(manifest, null, 2), \"utf-8\");\n }\n\n async has(name: string, tag: string, registry?: string): Promise<boolean> {\n const path = this.getPath(name, tag, registry);\n try {\n await stat(path);\n return true;\n } catch {\n return false;\n }\n }\n\n async delete(name: string, tag: string, registry?: string): Promise<void> {\n const path = this.getPath(name, tag, registry);\n try {\n await unlink(path);\n } catch {\n // Ignore if not exists\n }\n }\n\n async listTags(name: string, registry?: string): Promise<string[]> {\n const dir = this.getDir(name, registry);\n const tags: string[] = [];\n\n try {\n const files = await readdir(dir);\n for (const file of files) {\n if (file.endsWith(\".json\")) {\n tags.push(file.replace(\".json\", \"\"));\n }\n }\n } catch {\n // Directory doesn't exist\n }\n\n return tags;\n }\n\n async listNames(registry?: string, query?: string): Promise<string[]> {\n const registryDir = registry ?? LOCAL_DIR;\n const basePath = join(this.basePath, registryDir);\n const names: string[] = [];\n\n try {\n const entries = await readdir(basePath);\n for (const entry of entries) {\n const entryPath = join(basePath, entry);\n try {\n const entryStat = await stat(entryPath);\n if (entryStat.isDirectory()) {\n if (!query || entry.toLowerCase().includes(query.toLowerCase())) {\n names.push(entry);\n }\n }\n } catch {\n // Skip\n }\n }\n } catch {\n // Base path doesn't exist\n }\n\n return names;\n }\n\n async search(options?: RXMSearchOptions): Promise<StoredRXM[]> {\n const { registry, query, limit, offset = 0 } = options ?? {};\n const results: StoredRXM[] = [];\n\n // Determine which registry directories to scan\n let registryDirs: string[] = [];\n\n if (registry === null) {\n // Local only\n registryDirs = [LOCAL_DIR];\n } else if (registry !== undefined) {\n // Specific registry\n registryDirs = [registry];\n } else {\n // All registries\n try {\n registryDirs = await readdir(this.basePath);\n } catch {\n return [];\n }\n }\n\n // Scan each registry directory\n for (const regDir of registryDirs) {\n const regPath = join(this.basePath, regDir);\n\n try {\n const names = await readdir(regPath);\n\n for (const name of names) {\n // Filter by query\n if (query && !name.toLowerCase().includes(query.toLowerCase())) {\n continue;\n }\n\n const namePath = join(regPath, name);\n try {\n const files = await readdir(namePath);\n\n for (const file of files) {\n if (file.endsWith(\".json\")) {\n const filePath = join(namePath, file);\n const data = await readFile(filePath, \"utf-8\");\n const manifest = JSON.parse(data) as StoredRXM;\n results.push(manifest);\n }\n }\n } catch {\n // Skip if not a directory\n }\n }\n } catch {\n // Skip if registry dir doesn't exist\n }\n }\n\n // Apply pagination\n let paginated = results.slice(offset);\n if (limit !== undefined) {\n paginated = paginated.slice(0, limit);\n }\n\n return paginated;\n }\n\n async deleteByRegistry(registry: string): Promise<void> {\n const regPath = join(this.basePath, registry);\n try {\n await rm(regPath, { recursive: true });\n } catch {\n // Ignore if not exists\n }\n }\n}\n"
|
|
8
8
|
],
|
|
9
|
-
"mappings": ";AAMA;AACA,iBAAS;AAET;;;ACFA;AACA;AAEA;AAAA;AAEO,MAAM,mBAAuC;AAAA,EACrB;AAAA,EAA7B,WAAW,CAAkB,UAAkB;AAAA,IAAlB;AAAA;AAAA,EAMrB,OAAO,CAAC,QAAwB;AAAA,IACtC,MAAM,SAAS,OAAO,UAAU,GAAG,CAAC;AAAA,IACpC,OAAO,KAAK,KAAK,UAAU,QAAQ,MAAM;AAAA;AAAA,OAGrC,IAAG,CAAC,QAAiC;AAAA,
|
|
10
|
-
"debugId": "
|
|
9
|
+
"mappings": ";AAMA;AACA,iBAAS;AAET;;;ACFA;AACA;AACA;AACA;AAEA;AAAA;AAEO,MAAM,mBAAuC;AAAA,EACrB;AAAA,EAA7B,WAAW,CAAkB,UAAkB;AAAA,IAAlB;AAAA;AAAA,EAMrB,OAAO,CAAC,QAAwB;AAAA,IACtC,MAAM,SAAS,OAAO,UAAU,GAAG,CAAC;AAAA,IACpC,OAAO,KAAK,KAAK,UAAU,QAAQ,MAAM;AAAA;AAAA,OAGrC,IAAG,CAAC,QAAiC;AAAA,IAEzC,IAAI,CAAC,cAAc,MAAM,GAAG;AAAA,MAC1B,MAAM,IAAI,cAAc,0BAA0B,QAAQ;AAAA,IAC5D;AAAA,IAEA,MAAM,OAAO,KAAK,QAAQ,MAAM;AAAA,IAGhC,MAAM,SAAmB,CAAC;AAAA,IAC1B,MAAM,OAAO,WAAW,QAAQ;AAAA,IAChC,MAAM,aAAa,iBAAiB,IAAI;AAAA,IAExC,MAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAAA,MAC3C,WAAW,GAAG,QAAQ,CAAC,UAAkB;AAAA,QACvC,OAAO,KAAK,KAAK;AAAA,QACjB,KAAK,OAAO,KAAK;AAAA,OAClB;AAAA,MACD,WAAW,GAAG,OAAO,OAAO;AAAA,MAC5B,WAAW,GAAG,SAAS,MAAM,OAAO,IAAI,cAAc,mBAAmB,QAAQ,CAAC,CAAC;AAAA,KACpF;AAAA,IAGD,MAAM,eAAe,UAAU,KAAK,OAAO,KAAK;AAAA,IAChD,IAAI,iBAAiB,QAAQ;AAAA,MAC3B,MAAM,IAAI,cACR,4CAA4C,eAAe,cAC7D;AAAA,IACF;AAAA,IAEA,OAAO,OAAO,OAAO,MAAM;AAAA;AAAA,OAGvB,IAAG,CAAC,MAA+B;AAAA,IACvC,MAAM,SAAS,cAAc,IAAI;AAAA,IACjC,MAAM,OAAO,KAAK,QAAQ,MAAM;AAAA,IAGhC,IAAI,MAAM,KAAK,IAAI,MAAM,GAAG;AAAA,MAC1B,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,MAAM,KAAK,MAAM,IAAI;AAAA,IAC3B,MAAM,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,IAGpC,MAAM,UAAU,MAAM,IAAI;AAAA,IAE1B,OAAO;AAAA;AAAA,OAGH,IAAG,CAAC,QAAkC;AAAA,IAC1C,MAAM,OAAO,KAAK,QAAQ,MAAM;AAAA,IAChC,IAAI;AAAA,MACF,MAAM,KAAK,IAAI;AAAA,MACf,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA;AAAA;AAAA,OAIL,OAAM,CAAC,QAA+B;AAAA,IAC1C,MAAM,OAAO,KAAK,QAAQ,MAAM;AAAA,IAChC,IAAI;AAAA,MACF,MAAM,OAAO,IAAI;AAAA,MACjB,MAAM;AAAA;AAAA,OAKJ,KAAI,GAAsB;AAAA,IAC9B,MAAM,UAAoB,CAAC;AAAA,IAE3B,IAAI;AAAA,MACF,MAAM,WAAW,MAAM,QAAQ,KAAK,QAAQ;AAAA,MAE5C,WAAW,UAAU,UAAU;AAAA,QAC7B,MAAM,aAAa,KAAK,KAAK,UAAU,MAAM;AAAA,QAC7C,IAAI;AAAA,UACF,MAAM,QAAQ,MAAM,QAAQ,UAAU;AAAA,UACtC,WAAW,QAAQ,OAAO;AAAA,YACxB,IAAI,KAAK,WAAW,SAAS,GAAG;AAAA,cAC9B,QAAQ,KAAK,IAAI;AAAA,YACnB;AAAA,UACF;AAAA,UACA,MAAM;AAAA,MAGV;AAAA,MACA,MAAM;AAAA,IAIR,OAAO;AAAA;AAEX;;;ACnHA,kBAAS,+BAAiB,sBAAW,oBAAQ,kBAAS;AACtD,iBAAS;AAGT,IAAM,YAAY;AAAA;AAEX,MAAM,mBAAuC;AAAA,EACrB;AAAA,EAA7B,WAAW,CAAkB,UAAkB;AAAA,IAAlB;AAAA;AAAA,EAKrB,MAAM,CAAC,MAAc,UAA2B;AAAA,IACtD,MAAM,cAAc,YAAY;AAAA,IAChC,OAAO,MAAK,KAAK,UAAU,aAAa,IAAI;AAAA;AAAA,EAMtC,OAAO,CAAC,MAAc,KAAa,UAA2B;AAAA,IACpE,OAAO,MAAK,KAAK,OAAO,MAAM,QAAQ,GAAG,GAAG,UAAU;AAAA;AAAA,OAGlD,IAAG,CAAC,MAAc,KAAa,UAA8C;AAAA,IACjF,MAAM,OAAO,KAAK,QAAQ,MAAM,KAAK,QAAQ;AAAA,IAC7C,IAAI;AAAA,MACF,MAAM,OAAO,MAAM,SAAS,MAAM,OAAO;AAAA,MACzC,OAAO,KAAK,MAAM,IAAI;AAAA,MACtB,MAAM;AAAA,MACN,OAAO;AAAA;AAAA;AAAA,OAIL,IAAG,CAAC,UAAoC;AAAA,IAC5C,MAAM,OAAO,KAAK,QAAQ,SAAS,MAAM,SAAS,KAAK,SAAS,QAAQ;AAAA,IACxE,MAAM,MAAM,MAAK,MAAM,IAAI;AAAA,IAE3B,MAAM,OAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,IACpC,MAAM,WAAU,MAAM,KAAK,UAAU,UAAU,MAAM,CAAC,GAAG,OAAO;AAAA;AAAA,OAG5D,IAAG,CAAC,MAAc,KAAa,UAAqC;AAAA,IACxE,MAAM,OAAO,KAAK,QAAQ,MAAM,KAAK,QAAQ;AAAA,IAC7C,IAAI;AAAA,MACF,MAAM,MAAK,IAAI;AAAA,MACf,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA;AAAA;AAAA,OAIL,OAAM,CAAC,MAAc,KAAa,UAAkC;AAAA,IACxE,MAAM,OAAO,KAAK,QAAQ,MAAM,KAAK,QAAQ;AAAA,IAC7C,IAAI;AAAA,MACF,MAAM,QAAO,IAAI;AAAA,MACjB,MAAM;AAAA;AAAA,OAKJ,SAAQ,CAAC,MAAc,UAAsC;AAAA,IACjE,MAAM,MAAM,KAAK,OAAO,MAAM,QAAQ;AAAA,IACtC,MAAM,OAAiB,CAAC;AAAA,IAExB,IAAI;AAAA,MACF,MAAM,QAAQ,MAAM,SAAQ,GAAG;AAAA,MAC/B,WAAW,QAAQ,OAAO;AAAA,QACxB,IAAI,KAAK,SAAS,OAAO,GAAG;AAAA,UAC1B,KAAK,KAAK,KAAK,QAAQ,SAAS,EAAE,CAAC;AAAA,QACrC;AAAA,MACF;AAAA,MACA,MAAM;AAAA,IAIR,OAAO;AAAA;AAAA,OAGH,UAAS,CAAC,UAAmB,OAAmC;AAAA,IACpE,MAAM,cAAc,YAAY;AAAA,IAChC,MAAM,WAAW,MAAK,KAAK,UAAU,WAAW;AAAA,IAChD,MAAM,QAAkB,CAAC;AAAA,IAEzB,IAAI;AAAA,MACF,MAAM,UAAU,MAAM,SAAQ,QAAQ;AAAA,MACtC,WAAW,SAAS,SAAS;AAAA,QAC3B,MAAM,YAAY,MAAK,UAAU,KAAK;AAAA,QACtC,IAAI;AAAA,UACF,MAAM,YAAY,MAAM,MAAK,SAAS;AAAA,UACtC,IAAI,UAAU,YAAY,GAAG;AAAA,YAC3B,IAAI,CAAC,SAAS,MAAM,YAAY,EAAE,SAAS,MAAM,YAAY,CAAC,GAAG;AAAA,cAC/D,MAAM,KAAK,KAAK;AAAA,YAClB;AAAA,UACF;AAAA,UACA,MAAM;AAAA,MAGV;AAAA,MACA,MAAM;AAAA,IAIR,OAAO;AAAA;AAAA,OAGH,OAAM,CAAC,SAAkD;AAAA,IAC7D,QAAQ,UAAU,OAAO,OAAO,SAAS,MAAM,WAAW,CAAC;AAAA,IAC3D,MAAM,UAAuB,CAAC;AAAA,IAG9B,IAAI,eAAyB,CAAC;AAAA,IAE9B,IAAI,aAAa,MAAM;AAAA,MAErB,eAAe,CAAC,SAAS;AAAA,IAC3B,EAAO,SAAI,aAAa,WAAW;AAAA,MAEjC,eAAe,CAAC,QAAQ;AAAA,IAC1B,EAAO;AAAA,MAEL,IAAI;AAAA,QACF,eAAe,MAAM,SAAQ,KAAK,QAAQ;AAAA,QAC1C,MAAM;AAAA,QACN,OAAO,CAAC;AAAA;AAAA;AAAA,IAKZ,WAAW,UAAU,cAAc;AAAA,MACjC,MAAM,UAAU,MAAK,KAAK,UAAU,MAAM;AAAA,MAE1C,IAAI;AAAA,QACF,MAAM,QAAQ,MAAM,SAAQ,OAAO;AAAA,QAEnC,WAAW,QAAQ,OAAO;AAAA,UAExB,IAAI,SAAS,CAAC,KAAK,YAAY,EAAE,SAAS,MAAM,YAAY,CAAC,GAAG;AAAA,YAC9D;AAAA,UACF;AAAA,UAEA,MAAM,WAAW,MAAK,SAAS,IAAI;AAAA,UACnC,IAAI;AAAA,YACF,MAAM,QAAQ,MAAM,SAAQ,QAAQ;AAAA,YAEpC,WAAW,QAAQ,OAAO;AAAA,cACxB,IAAI,KAAK,SAAS,OAAO,GAAG;AAAA,gBAC1B,MAAM,WAAW,MAAK,UAAU,IAAI;AAAA,gBACpC,MAAM,OAAO,MAAM,SAAS,UAAU,OAAO;AAAA,gBAC7C,MAAM,WAAW,KAAK,MAAM,IAAI;AAAA,gBAChC,QAAQ,KAAK,QAAQ;AAAA,cACvB;AAAA,YACF;AAAA,YACA,MAAM;AAAA,QAGV;AAAA,QACA,MAAM;AAAA,IAGV;AAAA,IAGA,IAAI,YAAY,QAAQ,MAAM,MAAM;AAAA,IACpC,IAAI,UAAU,WAAW;AAAA,MACvB,YAAY,UAAU,MAAM,GAAG,KAAK;AAAA,IACtC;AAAA,IAEA,OAAO;AAAA;AAAA,OAGH,iBAAgB,CAAC,UAAiC;AAAA,IACtD,MAAM,UAAU,MAAK,KAAK,UAAU,QAAQ;AAAA,IAC5C,IAAI;AAAA,MACF,MAAM,GAAG,SAAS,EAAE,WAAW,KAAK,CAAC;AAAA,MACrC,MAAM;AAAA;AAIZ;;;AF7KA,IAAM,oBAAoB,GAAG,QAAQ;AAAA;AAS9B,MAAM,aAA0C;AAAA,EAC5C,WAAW;AAAA,EAEpB,YAAY,CAAC,QAAwC;AAAA,IACnD,MAAM,WAAY,OAAO,QAAmB;AAAA,IAE5C,OAAO;AAAA,MACL,UAAU,IAAI,mBAAmB,MAAK,UAAU,OAAO,CAAC;AAAA,MACxD,UAAU,IAAI,mBAAmB,MAAK,UAAU,WAAW,CAAC;AAAA,IAC9D;AAAA;AAAA,EAGF,YAAY,CAAC,SAAuC;AAAA,IAClD,OAAO,IAAI;AAAA;AAEf;",
|
|
10
|
+
"debugId": "E49394B309EA286264756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@resourcexjs/node-provider",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.0",
|
|
4
4
|
"description": "ResourceX Node.js/Bun Provider - FileSystem stores implementation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"clean": "rm -rf dist"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@resourcexjs/core": "^2.
|
|
24
|
+
"@resourcexjs/core": "^2.7.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {},
|
|
27
27
|
"publishConfig": {
|