@resourcexjs/node-provider 2.5.7 → 2.6.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 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, readFile, writeFile, unlink, readdir, stat } from "node:fs/promises";
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
- try {
23
- return await readFile(path);
24
- } catch (error) {
25
- throw new RegistryError(`Blob not found: ${digest}`);
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 as readFile2, writeFile as writeFile2, unlink as unlink2, readdir as readdir2, stat as stat2, rm } from "node:fs/promises";
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 readFile2(path, "utf-8");
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 readFile2(filePath, "utf-8");
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=4D70AA91122D166964756E2164756E21
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, readFile, writeFile, unlink, readdir, stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { RXAStore } from \"@resourcexjs/core\";\nimport { computeDigest, 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 const path = this.getPath(digest);\n try {\n return await readFile(path);\n } catch (error) {\n throw new RegistryError(`Blob not found: ${digest}`);\n }\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",
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": "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",
10
- "debugId": "4D70AA91122D166964756E2164756E21",
9
+ "mappings": "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",
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.5.7",
3
+ "version": "2.6.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.5.7"
24
+ "@resourcexjs/core": "^2.6.0"
25
25
  },
26
26
  "devDependencies": {},
27
27
  "publishConfig": {