@resourcexjs/core 0.8.1 → 0.9.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.d.ts CHANGED
@@ -139,6 +139,26 @@ interface ResourceType<T = unknown> {
139
139
  resolver: ResourceResolver<T>;
140
140
  }
141
141
  /**
142
+ * ResourceLoader - Strategy interface for loading resources from different sources.
143
+ */
144
+ interface ResourceLoader {
145
+ /**
146
+ * Check if this loader can handle the given source.
147
+ *
148
+ * @param source - Source path or identifier
149
+ * @returns true if this loader can handle the source
150
+ */
151
+ canLoad(source: string): boolean | Promise<boolean>;
152
+ /**
153
+ * Load a resource from the given source.
154
+ *
155
+ * @param source - Source path or identifier
156
+ * @returns Complete RXR object
157
+ * @throws ResourceXError if loading fails
158
+ */
159
+ load(source: string): Promise<RXR>;
160
+ }
161
+ /**
142
162
  * Define and register a resource type.
143
163
  *
144
164
  * @throws ResourceTypeError if type is already registered
@@ -210,4 +230,69 @@ declare class TypeHandlerChain {
210
230
  * Create a new TypeHandlerChain with optional initial types.
211
231
  */
212
232
  declare function createTypeHandlerChain(types?: ResourceType[]): TypeHandlerChain;
213
- export { textType, parseRXL, loadRXC, jsonType, getResourceType, defineResourceType, createTypeHandlerChain, createRXM, createRXC, clearResourceTypes, builtinTypes, binaryType, TypeHandlerChain, ResourceXError, ResourceTypeError, ResourceType, ResourceSerializer, ResourceResolver, RXR, RXM, RXL, RXC, ManifestError, ManifestData, LocatorError, ContentError };
233
+ /**
234
+ * Default ResourceLoader implementation for loading resources from folders.
235
+ *
236
+ * Expected folder structure:
237
+ * ```
238
+ * folder/
239
+ * ├── resource.json # Resource metadata (required)
240
+ * └── content # Resource content (required)
241
+ * ```
242
+ *
243
+ * resource.json format:
244
+ * ```json
245
+ * {
246
+ * "name": "resource-name", // required
247
+ * "type": "text", // required
248
+ * "version": "1.0.0", // required
249
+ * "domain": "localhost", // optional, defaults to "localhost"
250
+ * "path": "optional/path" // optional
251
+ * }
252
+ * ```
253
+ */
254
+ declare class FolderLoader implements ResourceLoader {
255
+ canLoad(source: string): Promise<boolean>;
256
+ load(folderPath: string): Promise<RXR>;
257
+ }
258
+ /**
259
+ * Configuration options for loadResource.
260
+ */
261
+ interface LoadResourceConfig {
262
+ /**
263
+ * Custom loader to use. If not provided, defaults to FolderLoader.
264
+ */
265
+ loader?: ResourceLoader;
266
+ }
267
+ /**
268
+ * Load a resource from a given source using a ResourceLoader.
269
+ *
270
+ * By default, uses FolderLoader which expects:
271
+ * ```
272
+ * folder/
273
+ * ├── resource.json # Resource metadata
274
+ * └── content # Resource content
275
+ * ```
276
+ *
277
+ * You can provide a custom loader via config.loader to support other formats
278
+ * (e.g., zip, tar.gz, URLs).
279
+ *
280
+ * @param source - Source path or identifier
281
+ * @param config - Optional configuration
282
+ * @returns Complete RXR object ready for registry.link()
283
+ * @throws ResourceXError if the source cannot be loaded
284
+ *
285
+ * @example
286
+ * ```typescript
287
+ * // Load from folder (default)
288
+ * const rxr = await loadResource("./my-resource");
289
+ * await registry.link(rxr);
290
+ *
291
+ * // Load with custom loader
292
+ * const rxr = await loadResource("resource.zip", {
293
+ * loader: new ZipLoader()
294
+ * });
295
+ * ```
296
+ */
297
+ declare function loadResource(source: string, config?: LoadResourceConfig): Promise<RXR>;
298
+ export { textType, parseRXL, loadResource, loadRXC, jsonType, getResourceType, defineResourceType, createTypeHandlerChain, createRXM, createRXC, clearResourceTypes, builtinTypes, binaryType, TypeHandlerChain, ResourceXError, ResourceTypeError, ResourceType, ResourceSerializer, ResourceResolver, ResourceLoader, RXR, RXM, RXL, RXC, ManifestError, ManifestData, LocatorError, LoadResourceConfig, FolderLoader, ContentError };
package/dist/index.js CHANGED
@@ -387,9 +387,84 @@ function createTypeHandlerChain(types) {
387
387
  }
388
388
  return chain;
389
389
  }
390
+ // src/resource/FolderLoader.ts
391
+ import { join } from "node:path";
392
+ import { stat, readFile } from "node:fs/promises";
393
+ class FolderLoader {
394
+ async canLoad(source) {
395
+ try {
396
+ const stats = await stat(source);
397
+ if (!stats.isDirectory()) {
398
+ return false;
399
+ }
400
+ const manifestPath = join(source, "resource.json");
401
+ const contentPath = join(source, "content");
402
+ const manifestStats = await stat(manifestPath);
403
+ const contentStats = await stat(contentPath);
404
+ return manifestStats.isFile() && contentStats.isFile();
405
+ } catch {
406
+ return false;
407
+ }
408
+ }
409
+ async load(folderPath) {
410
+ const manifestPath = join(folderPath, "resource.json");
411
+ let manifestJson;
412
+ try {
413
+ manifestJson = await readFile(manifestPath, "utf-8");
414
+ } catch (error) {
415
+ throw new ResourceXError(`Failed to read resource.json: ${error instanceof Error ? error.message : String(error)}`);
416
+ }
417
+ let manifestData;
418
+ try {
419
+ manifestData = JSON.parse(manifestJson);
420
+ } catch (error) {
421
+ throw new ResourceXError(`Invalid JSON in resource.json: ${error instanceof Error ? error.message : String(error)}`);
422
+ }
423
+ if (!manifestData.name) {
424
+ throw new ResourceXError("Invalid resource.json: missing required field 'name'");
425
+ }
426
+ if (!manifestData.type) {
427
+ throw new ResourceXError("Invalid resource.json: missing required field 'type'");
428
+ }
429
+ if (!manifestData.version) {
430
+ throw new ResourceXError("Invalid resource.json: missing required field 'version'");
431
+ }
432
+ const manifest = createRXM({
433
+ domain: manifestData.domain ?? "localhost",
434
+ path: manifestData.path,
435
+ name: manifestData.name,
436
+ type: manifestData.type,
437
+ version: manifestData.version
438
+ });
439
+ const contentPath = join(folderPath, "content");
440
+ let contentBuffer;
441
+ try {
442
+ contentBuffer = await readFile(contentPath);
443
+ } catch (error) {
444
+ throw new ResourceXError(`Failed to read content file: ${error instanceof Error ? error.message : String(error)}`);
445
+ }
446
+ const content = createRXC(contentBuffer);
447
+ const locator = parseRXL(manifest.toLocator());
448
+ return {
449
+ locator,
450
+ manifest,
451
+ content
452
+ };
453
+ }
454
+ }
455
+ // src/resource/loadResource.ts
456
+ async function loadResource(source, config) {
457
+ const loader = config?.loader ?? new FolderLoader;
458
+ const canLoad = await loader.canLoad(source);
459
+ if (!canLoad) {
460
+ throw new ResourceXError(`Cannot load resource from: ${source}`);
461
+ }
462
+ return loader.load(source);
463
+ }
390
464
  export {
391
465
  textType,
392
466
  parseRXL,
467
+ loadResource,
393
468
  loadRXC,
394
469
  jsonType,
395
470
  getResourceType,
@@ -405,7 +480,8 @@ export {
405
480
  ResourceTypeError,
406
481
  ManifestError,
407
482
  LocatorError,
483
+ FolderLoader,
408
484
  ContentError
409
485
  };
410
486
 
411
- //# debugId=B9B3CCB31ADA300B64756E2164756E21
487
+ //# debugId=9516A09E80942F2964756E2164756E21
package/dist/index.js.map CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/errors.ts", "../src/locator/parseRXL.ts", "../src/manifest/createRXM.ts", "../src/content/createRXC.ts", "../src/content/loadRXC.ts", "../src/resource/defineResourceType.ts", "../src/resource/builtinTypes.ts", "../src/resource/TypeHandlerChain.ts"],
3
+ "sources": ["../src/errors.ts", "../src/locator/parseRXL.ts", "../src/manifest/createRXM.ts", "../src/content/createRXC.ts", "../src/content/loadRXC.ts", "../src/resource/defineResourceType.ts", "../src/resource/builtinTypes.ts", "../src/resource/TypeHandlerChain.ts", "../src/resource/FolderLoader.ts", "../src/resource/loadResource.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * ResourceX Error hierarchy\n */\n\nexport class ResourceXError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"ResourceXError\";\n }\n}\n\nexport class LocatorError extends ResourceXError {\n constructor(\n message: string,\n public readonly locator?: string\n ) {\n super(message);\n this.name = \"LocatorError\";\n }\n}\n\nexport class ManifestError extends ResourceXError {\n constructor(message: string) {\n super(message);\n this.name = \"ManifestError\";\n }\n}\n\nexport class ContentError extends ResourceXError {\n constructor(message: string) {\n super(message);\n this.name = \"ContentError\";\n }\n}\n\nexport class ResourceTypeError extends ResourceXError {\n constructor(message: string) {\n super(message);\n this.name = \"ResourceTypeError\";\n }\n}\n",
6
6
  "import type { RXL } from \"./types.js\";\n\nclass RXLImpl implements RXL {\n readonly domain?: string;\n readonly path?: string;\n readonly name: string;\n readonly type?: string;\n readonly version?: string;\n\n constructor(parts: {\n domain?: string;\n path?: string;\n name: string;\n type?: string;\n version?: string;\n }) {\n this.domain = parts.domain;\n this.path = parts.path;\n this.name = parts.name;\n this.type = parts.type;\n this.version = parts.version;\n }\n\n toString(): string {\n let result = \"\";\n if (this.domain) {\n result += this.domain + \"/\";\n if (this.path) {\n result += this.path + \"/\";\n }\n }\n result += this.name;\n if (this.type) {\n result += \".\" + this.type;\n }\n if (this.version) {\n result += \"@\" + this.version;\n }\n return result;\n }\n}\n\nfunction isDomain(str: string): boolean {\n if (str === \"localhost\") return true;\n return str.includes(\".\");\n}\n\n/**\n * Parse a resource locator string into RXL object.\n *\n * Format: [domain/path/]name[.type][@version]\n */\nexport function parseRXL(locator: string): RXL {\n let remaining = locator;\n let version: string | undefined;\n let type: string | undefined;\n let domain: string | undefined;\n let path: string | undefined;\n let name: string;\n\n // 1. Extract version (after @)\n const atIndex = remaining.indexOf(\"@\");\n if (atIndex !== -1) {\n version = remaining.slice(atIndex + 1);\n remaining = remaining.slice(0, atIndex);\n }\n\n // 2. Split by / to get segments\n const segments = remaining.split(\"/\");\n\n // 3. Handle domain and path\n if (segments.length > 1 && isDomain(segments[0])) {\n domain = segments[0];\n const lastSegment = segments[segments.length - 1];\n if (segments.length > 2) {\n path = segments.slice(1, -1).join(\"/\");\n }\n remaining = lastSegment;\n } else {\n remaining = segments.join(\"/\");\n }\n\n // 4. Extract type (after last .)\n const dotIndex = remaining.lastIndexOf(\".\");\n if (dotIndex !== -1) {\n type = remaining.slice(dotIndex + 1);\n name = remaining.slice(0, dotIndex);\n } else {\n name = remaining;\n }\n\n return new RXLImpl({ domain, path, name, type, version });\n}\n",
@@ -9,9 +9,11 @@
9
9
  "import { createReadStream } from \"node:fs\";\nimport { Readable } from \"node:stream\";\nimport type { RXC } from \"./types.js\";\nimport { createRXC } from \"./createRXC.js\";\n\n/**\n * Load RXC from file path or URL.\n */\nexport async function loadRXC(source: string): Promise<RXC> {\n // Check if it's a URL\n if (source.startsWith(\"http://\") || source.startsWith(\"https://\")) {\n const response = await fetch(source);\n if (!response.ok) {\n throw new Error(`Failed to fetch ${source}: ${response.statusText}`);\n }\n if (!response.body) {\n throw new Error(`No body in response from ${source}`);\n }\n return createRXC(response.body);\n }\n\n // Otherwise, treat as file path\n const nodeStream = createReadStream(source);\n const webStream = Readable.toWeb(nodeStream) as ReadableStream<Uint8Array>;\n return createRXC(webStream);\n}\n",
10
10
  "import type { ResourceType } from \"./types.js\";\nimport { ResourceTypeError } from \"~/errors.js\";\n\n// Registry of resource types\nconst resourceTypes = new Map<string, ResourceType>();\n\n/**\n * Define and register a resource type.\n *\n * @throws ResourceTypeError if type is already registered\n */\nexport function defineResourceType<T>(config: ResourceType<T>): ResourceType<T> {\n if (resourceTypes.has(config.name)) {\n throw new ResourceTypeError(`Resource type \"${config.name}\" is already registered`);\n }\n resourceTypes.set(config.name, config as ResourceType);\n return config;\n}\n\n/**\n * Get a registered resource type by name.\n *\n * @returns ResourceType or undefined if not found\n */\nexport function getResourceType<T = unknown>(name: string): ResourceType<T> | undefined {\n return resourceTypes.get(name) as ResourceType<T> | undefined;\n}\n\n/**\n * Clear all registered resource types (for testing).\n */\nexport function clearResourceTypes(): void {\n resourceTypes.clear();\n}\n",
11
11
  "import type { ResourceType, ResourceSerializer, ResourceResolver, RXR } from \"./types.js\";\nimport type { RXM } from \"~/manifest/types.js\";\nimport { createRXC } from \"~/content/createRXC.js\";\nimport { parseRXL } from \"~/locator/parseRXL.js\";\n\n/**\n * Text serializer - stores content as UTF-8 text\n */\nconst textSerializer: ResourceSerializer = {\n async serialize(rxr: RXR): Promise<Buffer> {\n const text = await rxr.content.text();\n return Buffer.from(text, \"utf-8\");\n },\n\n async deserialize(data: Buffer, manifest: RXM): Promise<RXR> {\n const text = data.toString(\"utf-8\");\n return {\n locator: parseRXL(manifest.toLocator()),\n manifest,\n content: createRXC(text),\n };\n },\n};\n\n/**\n * Text resolver - returns content as string\n */\nconst textResolver: ResourceResolver<string> = {\n async resolve(rxr: RXR): Promise<string> {\n return rxr.content.text();\n },\n};\n\n/**\n * Text resource type\n */\nexport const textType: ResourceType<string> = {\n name: \"text\",\n aliases: [\"txt\", \"plaintext\"],\n description: \"Plain text content\",\n serializer: textSerializer,\n resolver: textResolver,\n};\n\n/**\n * JSON serializer - stores content as JSON string\n */\nconst jsonSerializer: ResourceSerializer = {\n async serialize(rxr: RXR): Promise<Buffer> {\n const json = await rxr.content.json();\n return Buffer.from(JSON.stringify(json, null, 2), \"utf-8\");\n },\n\n async deserialize(data: Buffer, manifest: RXM): Promise<RXR> {\n const text = data.toString(\"utf-8\");\n return {\n locator: parseRXL(manifest.toLocator()),\n manifest,\n content: createRXC(text),\n };\n },\n};\n\n/**\n * JSON resolver - returns content as parsed object\n */\nconst jsonResolver: ResourceResolver<unknown> = {\n async resolve(rxr: RXR): Promise<unknown> {\n return rxr.content.json();\n },\n};\n\n/**\n * JSON resource type\n */\nexport const jsonType: ResourceType<unknown> = {\n name: \"json\",\n aliases: [\"config\", \"manifest\"],\n description: \"JSON content\",\n serializer: jsonSerializer,\n resolver: jsonResolver,\n};\n\n/**\n * Binary serializer - stores content as raw bytes\n */\nconst binarySerializer: ResourceSerializer = {\n async serialize(rxr: RXR): Promise<Buffer> {\n return rxr.content.buffer();\n },\n\n async deserialize(data: Buffer, manifest: RXM): Promise<RXR> {\n return {\n locator: parseRXL(manifest.toLocator()),\n manifest,\n content: createRXC(data),\n };\n },\n};\n\n/**\n * Binary resolver - returns content as Buffer\n */\nconst binaryResolver: ResourceResolver<Buffer> = {\n async resolve(rxr: RXR): Promise<Buffer> {\n return rxr.content.buffer();\n },\n};\n\n/**\n * Binary resource type\n */\nexport const binaryType: ResourceType<Buffer> = {\n name: \"binary\",\n aliases: [\"bin\", \"blob\", \"raw\"],\n description: \"Binary content\",\n serializer: binarySerializer,\n resolver: binaryResolver,\n};\n\n/**\n * All built-in types\n */\nexport const builtinTypes: ResourceType[] = [textType, jsonType, binaryType];\n",
12
- "import type { ResourceType, RXR } from \"./types.js\";\nimport type { RXM } from \"~/manifest/types.js\";\nimport { ResourceTypeError } from \"~/errors.js\";\n\n/**\n * TypeHandlerChain - Responsibility chain for resource type handling.\n * Manages type registration and delegates serialization/deserialization.\n */\nexport class TypeHandlerChain {\n private handlers: Map<string, ResourceType> = new Map();\n\n /**\n * Register a resource type handler.\n * Registers both the type name and its aliases.\n */\n register(type: ResourceType): void {\n this.handlers.set(type.name, type);\n if (type.aliases) {\n for (const alias of type.aliases) {\n this.handlers.set(alias, type);\n }\n }\n }\n\n /**\n * Register multiple type handlers.\n */\n registerAll(types: ResourceType[]): void {\n for (const type of types) {\n this.register(type);\n }\n }\n\n /**\n * Check if a type is supported.\n */\n canHandle(typeName: string): boolean {\n return this.handlers.has(typeName);\n }\n\n /**\n * Get handler for a type.\n */\n getHandler(typeName: string): ResourceType | undefined {\n return this.handlers.get(typeName);\n }\n\n /**\n * Serialize RXR content using the appropriate type handler.\n */\n async serialize(rxr: RXR): Promise<Buffer> {\n const typeName = rxr.manifest.type;\n const handler = this.handlers.get(typeName);\n\n if (!handler) {\n throw new ResourceTypeError(`Unsupported resource type: ${typeName}`);\n }\n\n return handler.serializer.serialize(rxr);\n }\n\n /**\n * Deserialize content into RXR using the appropriate type handler.\n */\n async deserialize(data: Buffer, manifest: RXM): Promise<RXR> {\n const typeName = manifest.type;\n const handler = this.handlers.get(typeName);\n\n if (!handler) {\n throw new ResourceTypeError(`Unsupported resource type: ${typeName}`);\n }\n\n return handler.serializer.deserialize(data, manifest);\n }\n\n /**\n * Resolve RXR content into usable object using the appropriate type handler.\n */\n async resolve<T = unknown>(rxr: RXR): Promise<T> {\n const typeName = rxr.manifest.type;\n const handler = this.handlers.get(typeName);\n\n if (!handler) {\n throw new ResourceTypeError(`Unsupported resource type: ${typeName}`);\n }\n\n return handler.resolver.resolve(rxr) as Promise<T>;\n }\n}\n\n/**\n * Create a new TypeHandlerChain with optional initial types.\n */\nexport function createTypeHandlerChain(types?: ResourceType[]): TypeHandlerChain {\n const chain = new TypeHandlerChain();\n if (types) {\n chain.registerAll(types);\n }\n return chain;\n}\n"
12
+ "import type { ResourceType, RXR } from \"./types.js\";\nimport type { RXM } from \"~/manifest/types.js\";\nimport { ResourceTypeError } from \"~/errors.js\";\n\n/**\n * TypeHandlerChain - Responsibility chain for resource type handling.\n * Manages type registration and delegates serialization/deserialization.\n */\nexport class TypeHandlerChain {\n private handlers: Map<string, ResourceType> = new Map();\n\n /**\n * Register a resource type handler.\n * Registers both the type name and its aliases.\n */\n register(type: ResourceType): void {\n this.handlers.set(type.name, type);\n if (type.aliases) {\n for (const alias of type.aliases) {\n this.handlers.set(alias, type);\n }\n }\n }\n\n /**\n * Register multiple type handlers.\n */\n registerAll(types: ResourceType[]): void {\n for (const type of types) {\n this.register(type);\n }\n }\n\n /**\n * Check if a type is supported.\n */\n canHandle(typeName: string): boolean {\n return this.handlers.has(typeName);\n }\n\n /**\n * Get handler for a type.\n */\n getHandler(typeName: string): ResourceType | undefined {\n return this.handlers.get(typeName);\n }\n\n /**\n * Serialize RXR content using the appropriate type handler.\n */\n async serialize(rxr: RXR): Promise<Buffer> {\n const typeName = rxr.manifest.type;\n const handler = this.handlers.get(typeName);\n\n if (!handler) {\n throw new ResourceTypeError(`Unsupported resource type: ${typeName}`);\n }\n\n return handler.serializer.serialize(rxr);\n }\n\n /**\n * Deserialize content into RXR using the appropriate type handler.\n */\n async deserialize(data: Buffer, manifest: RXM): Promise<RXR> {\n const typeName = manifest.type;\n const handler = this.handlers.get(typeName);\n\n if (!handler) {\n throw new ResourceTypeError(`Unsupported resource type: ${typeName}`);\n }\n\n return handler.serializer.deserialize(data, manifest);\n }\n\n /**\n * Resolve RXR content into usable object using the appropriate type handler.\n */\n async resolve<T = unknown>(rxr: RXR): Promise<T> {\n const typeName = rxr.manifest.type;\n const handler = this.handlers.get(typeName);\n\n if (!handler) {\n throw new ResourceTypeError(`Unsupported resource type: ${typeName}`);\n }\n\n return handler.resolver.resolve(rxr) as Promise<T>;\n }\n}\n\n/**\n * Create a new TypeHandlerChain with optional initial types.\n */\nexport function createTypeHandlerChain(types?: ResourceType[]): TypeHandlerChain {\n const chain = new TypeHandlerChain();\n if (types) {\n chain.registerAll(types);\n }\n return chain;\n}\n",
13
+ "import { join } from \"node:path\";\nimport { stat, readFile } from \"node:fs/promises\";\nimport type { ResourceLoader, RXR } from \"./types.js\";\nimport { createRXM } from \"~/manifest/index.js\";\nimport { createRXC } from \"~/content/index.js\";\nimport { parseRXL } from \"~/locator/index.js\";\nimport { ResourceXError } from \"~/errors.js\";\n\n/**\n * Default ResourceLoader implementation for loading resources from folders.\n *\n * Expected folder structure:\n * ```\n * folder/\n * ├── resource.json # Resource metadata (required)\n * └── content # Resource content (required)\n * ```\n *\n * resource.json format:\n * ```json\n * {\n * \"name\": \"resource-name\", // required\n * \"type\": \"text\", // required\n * \"version\": \"1.0.0\", // required\n * \"domain\": \"localhost\", // optional, defaults to \"localhost\"\n * \"path\": \"optional/path\" // optional\n * }\n * ```\n */\nexport class FolderLoader implements ResourceLoader {\n async canLoad(source: string): Promise<boolean> {\n try {\n const stats = await stat(source);\n if (!stats.isDirectory()) {\n return false;\n }\n\n // Check if required files exist\n const manifestPath = join(source, \"resource.json\");\n const contentPath = join(source, \"content\");\n\n const manifestStats = await stat(manifestPath);\n const contentStats = await stat(contentPath);\n\n return manifestStats.isFile() && contentStats.isFile();\n } catch {\n return false;\n }\n }\n\n async load(folderPath: string): Promise<RXR> {\n // 1. Read resource.json\n const manifestPath = join(folderPath, \"resource.json\");\n let manifestJson: string;\n try {\n manifestJson = await readFile(manifestPath, \"utf-8\");\n } catch (error) {\n throw new ResourceXError(\n `Failed to read resource.json: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n // 2. Parse JSON\n let manifestData: any;\n try {\n manifestData = JSON.parse(manifestJson);\n } catch (error) {\n throw new ResourceXError(\n `Invalid JSON in resource.json: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n // 3. Validate required fields\n if (!manifestData.name) {\n throw new ResourceXError(\"Invalid resource.json: missing required field 'name'\");\n }\n if (!manifestData.type) {\n throw new ResourceXError(\"Invalid resource.json: missing required field 'type'\");\n }\n if (!manifestData.version) {\n throw new ResourceXError(\"Invalid resource.json: missing required field 'version'\");\n }\n\n // 4. Create RXM with defaults\n const manifest = createRXM({\n domain: manifestData.domain ?? \"localhost\",\n path: manifestData.path,\n name: manifestData.name,\n type: manifestData.type,\n version: manifestData.version,\n });\n\n // 5. Read content file\n const contentPath = join(folderPath, \"content\");\n let contentBuffer: Buffer;\n try {\n contentBuffer = await readFile(contentPath);\n } catch (error) {\n throw new ResourceXError(\n `Failed to read content file: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n // 6. Create RXC\n const content = createRXC(contentBuffer);\n\n // 7. Assemble RXR\n const locator = parseRXL(manifest.toLocator());\n\n return {\n locator,\n manifest,\n content,\n };\n }\n}\n",
14
+ "import type { ResourceLoader, RXR } from \"./types.js\";\nimport { FolderLoader } from \"./FolderLoader.js\";\nimport { ResourceXError } from \"~/errors.js\";\n\n/**\n * Configuration options for loadResource.\n */\nexport interface LoadResourceConfig {\n /**\n * Custom loader to use. If not provided, defaults to FolderLoader.\n */\n loader?: ResourceLoader;\n}\n\n/**\n * Load a resource from a given source using a ResourceLoader.\n *\n * By default, uses FolderLoader which expects:\n * ```\n * folder/\n * ├── resource.json # Resource metadata\n * └── content # Resource content\n * ```\n *\n * You can provide a custom loader via config.loader to support other formats\n * (e.g., zip, tar.gz, URLs).\n *\n * @param source - Source path or identifier\n * @param config - Optional configuration\n * @returns Complete RXR object ready for registry.link()\n * @throws ResourceXError if the source cannot be loaded\n *\n * @example\n * ```typescript\n * // Load from folder (default)\n * const rxr = await loadResource(\"./my-resource\");\n * await registry.link(rxr);\n *\n * // Load with custom loader\n * const rxr = await loadResource(\"resource.zip\", {\n * loader: new ZipLoader()\n * });\n * ```\n */\nexport async function loadResource(source: string, config?: LoadResourceConfig): Promise<RXR> {\n const loader = config?.loader ?? new FolderLoader();\n\n // Check if loader can handle this source\n const canLoad = await loader.canLoad(source);\n if (!canLoad) {\n throw new ResourceXError(`Cannot load resource from: ${source}`);\n }\n\n // Load the resource\n return loader.load(source);\n}\n"
13
15
  ],
14
- "mappings": ";AAIO,MAAM,uBAAuB,MAAM;AAAA,EACxC,WAAW,CAAC,SAAiB,SAAwB;AAAA,IACnD,MAAM,SAAS,OAAO;AAAA,IACtB,KAAK,OAAO;AAAA;AAEhB;AAAA;AAEO,MAAM,qBAAqB,eAAe;AAAA,EAG7B;AAAA,EAFlB,WAAW,CACT,SACgB,SAChB;AAAA,IACA,MAAM,OAAO;AAAA,IAFG;AAAA,IAGhB,KAAK,OAAO;AAAA;AAEhB;AAAA;AAEO,MAAM,sBAAsB,eAAe;AAAA,EAChD,WAAW,CAAC,SAAiB;AAAA,IAC3B,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA;AAEhB;AAAA;AAEO,MAAM,qBAAqB,eAAe;AAAA,EAC/C,WAAW,CAAC,SAAiB;AAAA,IAC3B,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA;AAEhB;AAAA;AAEO,MAAM,0BAA0B,eAAe;AAAA,EACpD,WAAW,CAAC,SAAiB;AAAA,IAC3B,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA;AAEhB;;ACtCA,MAAM,QAAuB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,WAAW,CAAC,OAMT;AAAA,IACD,KAAK,SAAS,MAAM;AAAA,IACpB,KAAK,OAAO,MAAM;AAAA,IAClB,KAAK,OAAO,MAAM;AAAA,IAClB,KAAK,OAAO,MAAM;AAAA,IAClB,KAAK,UAAU,MAAM;AAAA;AAAA,EAGvB,QAAQ,GAAW;AAAA,IACjB,IAAI,SAAS;AAAA,IACb,IAAI,KAAK,QAAQ;AAAA,MACf,UAAU,KAAK,SAAS;AAAA,MACxB,IAAI,KAAK,MAAM;AAAA,QACb,UAAU,KAAK,OAAO;AAAA,MACxB;AAAA,IACF;AAAA,IACA,UAAU,KAAK;AAAA,IACf,IAAI,KAAK,MAAM;AAAA,MACb,UAAU,MAAM,KAAK;AAAA,IACvB;AAAA,IACA,IAAI,KAAK,SAAS;AAAA,MAChB,UAAU,MAAM,KAAK;AAAA,IACvB;AAAA,IACA,OAAO;AAAA;AAEX;AAEA,SAAS,QAAQ,CAAC,KAAsB;AAAA,EACtC,IAAI,QAAQ;AAAA,IAAa,OAAO;AAAA,EAChC,OAAO,IAAI,SAAS,GAAG;AAAA;AAQlB,SAAS,QAAQ,CAAC,SAAsB;AAAA,EAC7C,IAAI,YAAY;AAAA,EAChB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EAGJ,MAAM,UAAU,UAAU,QAAQ,GAAG;AAAA,EACrC,IAAI,YAAY,IAAI;AAAA,IAClB,UAAU,UAAU,MAAM,UAAU,CAAC;AAAA,IACrC,YAAY,UAAU,MAAM,GAAG,OAAO;AAAA,EACxC;AAAA,EAGA,MAAM,WAAW,UAAU,MAAM,GAAG;AAAA,EAGpC,IAAI,SAAS,SAAS,KAAK,SAAS,SAAS,EAAE,GAAG;AAAA,IAChD,SAAS,SAAS;AAAA,IAClB,MAAM,cAAc,SAAS,SAAS,SAAS;AAAA,IAC/C,IAAI,SAAS,SAAS,GAAG;AAAA,MACvB,OAAO,SAAS,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG;AAAA,IACvC;AAAA,IACA,YAAY;AAAA,EACd,EAAO;AAAA,IACL,YAAY,SAAS,KAAK,GAAG;AAAA;AAAA,EAI/B,MAAM,WAAW,UAAU,YAAY,GAAG;AAAA,EAC1C,IAAI,aAAa,IAAI;AAAA,IACnB,OAAO,UAAU,MAAM,WAAW,CAAC;AAAA,IACnC,OAAO,UAAU,MAAM,GAAG,QAAQ;AAAA,EACpC,EAAO;AAAA,IACL,OAAO;AAAA;AAAA,EAGT,OAAO,IAAI,QAAQ,EAAE,QAAQ,MAAM,MAAM,MAAM,QAAQ,CAAC;AAAA;;ACxF1D,MAAM,QAAuB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,WAAW,CAAC,MAMT;AAAA,IACD,KAAK,SAAS,KAAK;AAAA,IACnB,KAAK,OAAO,KAAK;AAAA,IACjB,KAAK,OAAO,KAAK;AAAA,IACjB,KAAK,OAAO,KAAK;AAAA,IACjB,KAAK,UAAU,KAAK;AAAA;AAAA,EAGtB,SAAS,GAAW;AAAA,IAClB,IAAI,SAAS,KAAK,SAAS;AAAA,IAC3B,IAAI,KAAK,MAAM;AAAA,MACb,UAAU,KAAK,OAAO;AAAA,IACxB;AAAA,IACA,UAAU,KAAK;AAAA,IACf,UAAU,MAAM,KAAK;AAAA,IACrB,UAAU,MAAM,KAAK;AAAA,IACrB,OAAO;AAAA;AAAA,EAGT,MAAM,GAAiB;AAAA,IACrB,MAAM,OAAqB;AAAA,MACzB,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,IAChB;AAAA,IACA,IAAI,KAAK,SAAS,WAAW;AAAA,MAC3B,KAAK,OAAO,KAAK;AAAA,IACnB;AAAA,IACA,OAAO;AAAA;AAEX;AAKO,SAAS,SAAS,CAAC,MAAyB;AAAA,EACjD,IAAI,CAAC,KAAK,QAAQ;AAAA,IAChB,MAAM,IAAI,cAAc,oBAAoB;AAAA,EAC9C;AAAA,EACA,IAAI,CAAC,KAAK,MAAM;AAAA,IACd,MAAM,IAAI,cAAc,kBAAkB;AAAA,EAC5C;AAAA,EACA,IAAI,CAAC,KAAK,MAAM;AAAA,IACd,MAAM,IAAI,cAAc,kBAAkB;AAAA,EAC5C;AAAA,EACA,IAAI,CAAC,KAAK,SAAS;AAAA,IACjB,MAAM,IAAI,cAAc,qBAAqB;AAAA,EAC/C;AAAA,EAEA,OAAO,IAAI,QAAQ;AAAA,IACjB,QAAQ,KAAK;AAAA,IACb,MAAM,KAAK;AAAA,IACX,MAAM,KAAK;AAAA,IACX,MAAM,KAAK;AAAA,IACX,SAAS,KAAK;AAAA,EAChB,CAAC;AAAA;;ACrEH,MAAM,QAAuB;AAAA,EACnB;AAAA,EACA,YAAY;AAAA,EAEpB,WAAW,CAAC,QAAoC;AAAA,IAC9C,KAAK,UAAU;AAAA;AAAA,MAGb,MAAM,GAA+B;AAAA,IACvC,IAAI,KAAK,WAAW;AAAA,MAClB,MAAM,IAAI,aAAa,mCAAmC;AAAA,IAC5D;AAAA,IACA,KAAK,YAAY;AAAA,IACjB,OAAO,KAAK;AAAA;AAAA,OAGR,KAAI,GAAoB;AAAA,IAC5B,MAAM,SAAS,MAAM,KAAK,OAAO;AAAA,IACjC,OAAO,OAAO,SAAS,OAAO;AAAA;AAAA,OAG1B,OAAM,GAAoB;AAAA,IAC9B,IAAI,KAAK,WAAW;AAAA,MAClB,MAAM,IAAI,aAAa,mCAAmC;AAAA,IAC5D;AAAA,IACA,KAAK,YAAY;AAAA,IAEjB,MAAM,SAAS,KAAK,QAAQ,UAAU;AAAA,IACtC,MAAM,SAAuB,CAAC;AAAA,IAE9B,OAAO,MAAM;AAAA,MACX,QAAQ,MAAM,UAAU,MAAM,OAAO,KAAK;AAAA,MAC1C,IAAI;AAAA,QAAM;AAAA,MACV,OAAO,KAAK,KAAK;AAAA,IACnB;AAAA,IAEA,OAAO,OAAO,OAAO,MAAM;AAAA;AAAA,OAGvB,KAAO,GAAe;AAAA,IAC1B,MAAM,OAAO,MAAM,KAAK,KAAK;AAAA,IAC7B,OAAO,KAAK,MAAM,IAAI;AAAA;AAE1B;AAKO,SAAS,SAAS,CAAC,MAAyD;AAAA,EACjF,IAAI;AAAA,EAEJ,IAAI,OAAO,SAAS,UAAU;AAAA,IAC5B,MAAM,UAAU,IAAI,YAAY,EAAE,OAAO,IAAI;AAAA,IAC7C,SAAS,IAAI,eAAe;AAAA,MAC1B,KAAK,CAAC,YAAY;AAAA,QAChB,WAAW,QAAQ,OAAO;AAAA,QAC1B,WAAW,MAAM;AAAA;AAAA,IAErB,CAAC;AAAA,EACH,EAAO,SAAI,OAAO,SAAS,IAAI,GAAG;AAAA,IAChC,SAAS,IAAI,eAAe;AAAA,MAC1B,KAAK,CAAC,YAAY;AAAA,QAChB,WAAW,QAAQ,IAAI,WAAW,IAAI,CAAC;AAAA,QACvC,WAAW,MAAM;AAAA;AAAA,IAErB,CAAC;AAAA,EACH,EAAO;AAAA,IAEL,SAAS;AAAA;AAAA,EAGX,OAAO,IAAI,QAAQ,MAAM;AAAA;;AC1E3B;AACA;AAOA,eAAsB,OAAO,CAAC,QAA8B;AAAA,EAE1D,IAAI,OAAO,WAAW,SAAS,KAAK,OAAO,WAAW,UAAU,GAAG;AAAA,IACjE,MAAM,WAAW,MAAM,MAAM,MAAM;AAAA,IACnC,IAAI,CAAC,SAAS,IAAI;AAAA,MAChB,MAAM,IAAI,MAAM,mBAAmB,WAAW,SAAS,YAAY;AAAA,IACrE;AAAA,IACA,IAAI,CAAC,SAAS,MAAM;AAAA,MAClB,MAAM,IAAI,MAAM,4BAA4B,QAAQ;AAAA,IACtD;AAAA,IACA,OAAO,UAAU,SAAS,IAAI;AAAA,EAChC;AAAA,EAGA,MAAM,aAAa,iBAAiB,MAAM;AAAA,EAC1C,MAAM,YAAY,SAAS,MAAM,UAAU;AAAA,EAC3C,OAAO,UAAU,SAAS;AAAA;;ACpB5B,IAAM,gBAAgB,IAAI;AAOnB,SAAS,kBAAqB,CAAC,QAA0C;AAAA,EAC9E,IAAI,cAAc,IAAI,OAAO,IAAI,GAAG;AAAA,IAClC,MAAM,IAAI,kBAAkB,kBAAkB,OAAO,6BAA6B;AAAA,EACpF;AAAA,EACA,cAAc,IAAI,OAAO,MAAM,MAAsB;AAAA,EACrD,OAAO;AAAA;AAQF,SAAS,eAA4B,CAAC,MAA2C;AAAA,EACtF,OAAO,cAAc,IAAI,IAAI;AAAA;AAMxB,SAAS,kBAAkB,GAAS;AAAA,EACzC,cAAc,MAAM;AAAA;;ACxBtB,IAAM,iBAAqC;AAAA,OACnC,UAAS,CAAC,KAA2B;AAAA,IACzC,MAAM,OAAO,MAAM,IAAI,QAAQ,KAAK;AAAA,IACpC,OAAO,OAAO,KAAK,MAAM,OAAO;AAAA;AAAA,OAG5B,YAAW,CAAC,MAAc,UAA6B;AAAA,IAC3D,MAAM,OAAO,KAAK,SAAS,OAAO;AAAA,IAClC,OAAO;AAAA,MACL,SAAS,SAAS,SAAS,UAAU,CAAC;AAAA,MACtC;AAAA,MACA,SAAS,UAAU,IAAI;AAAA,IACzB;AAAA;AAEJ;AAKA,IAAM,eAAyC;AAAA,OACvC,QAAO,CAAC,KAA2B;AAAA,IACvC,OAAO,IAAI,QAAQ,KAAK;AAAA;AAE5B;AAKO,IAAM,WAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,SAAS,CAAC,OAAO,WAAW;AAAA,EAC5B,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AACZ;AAKA,IAAM,iBAAqC;AAAA,OACnC,UAAS,CAAC,KAA2B;AAAA,IACzC,MAAM,OAAO,MAAM,IAAI,QAAQ,KAAK;AAAA,IACpC,OAAO,OAAO,KAAK,KAAK,UAAU,MAAM,MAAM,CAAC,GAAG,OAAO;AAAA;AAAA,OAGrD,YAAW,CAAC,MAAc,UAA6B;AAAA,IAC3D,MAAM,OAAO,KAAK,SAAS,OAAO;AAAA,IAClC,OAAO;AAAA,MACL,SAAS,SAAS,SAAS,UAAU,CAAC;AAAA,MACtC;AAAA,MACA,SAAS,UAAU,IAAI;AAAA,IACzB;AAAA;AAEJ;AAKA,IAAM,eAA0C;AAAA,OACxC,QAAO,CAAC,KAA4B;AAAA,IACxC,OAAO,IAAI,QAAQ,KAAK;AAAA;AAE5B;AAKO,IAAM,WAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,SAAS,CAAC,UAAU,UAAU;AAAA,EAC9B,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AACZ;AAKA,IAAM,mBAAuC;AAAA,OACrC,UAAS,CAAC,KAA2B;AAAA,IACzC,OAAO,IAAI,QAAQ,OAAO;AAAA;AAAA,OAGtB,YAAW,CAAC,MAAc,UAA6B;AAAA,IAC3D,OAAO;AAAA,MACL,SAAS,SAAS,SAAS,UAAU,CAAC;AAAA,MACtC;AAAA,MACA,SAAS,UAAU,IAAI;AAAA,IACzB;AAAA;AAEJ;AAKA,IAAM,iBAA2C;AAAA,OACzC,QAAO,CAAC,KAA2B;AAAA,IACvC,OAAO,IAAI,QAAQ,OAAO;AAAA;AAE9B;AAKO,IAAM,aAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,SAAS,CAAC,OAAO,QAAQ,KAAK;AAAA,EAC9B,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AACZ;AAKO,IAAM,eAA+B,CAAC,UAAU,UAAU,UAAU;;ACnHpE,MAAM,iBAAiB;AAAA,EACpB,WAAsC,IAAI;AAAA,EAMlD,QAAQ,CAAC,MAA0B;AAAA,IACjC,KAAK,SAAS,IAAI,KAAK,MAAM,IAAI;AAAA,IACjC,IAAI,KAAK,SAAS;AAAA,MAChB,WAAW,SAAS,KAAK,SAAS;AAAA,QAChC,KAAK,SAAS,IAAI,OAAO,IAAI;AAAA,MAC/B;AAAA,IACF;AAAA;AAAA,EAMF,WAAW,CAAC,OAA6B;AAAA,IACvC,WAAW,QAAQ,OAAO;AAAA,MACxB,KAAK,SAAS,IAAI;AAAA,IACpB;AAAA;AAAA,EAMF,SAAS,CAAC,UAA2B;AAAA,IACnC,OAAO,KAAK,SAAS,IAAI,QAAQ;AAAA;AAAA,EAMnC,UAAU,CAAC,UAA4C;AAAA,IACrD,OAAO,KAAK,SAAS,IAAI,QAAQ;AAAA;AAAA,OAM7B,UAAS,CAAC,KAA2B;AAAA,IACzC,MAAM,WAAW,IAAI,SAAS;AAAA,IAC9B,MAAM,UAAU,KAAK,SAAS,IAAI,QAAQ;AAAA,IAE1C,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,kBAAkB,8BAA8B,UAAU;AAAA,IACtE;AAAA,IAEA,OAAO,QAAQ,WAAW,UAAU,GAAG;AAAA;AAAA,OAMnC,YAAW,CAAC,MAAc,UAA6B;AAAA,IAC3D,MAAM,WAAW,SAAS;AAAA,IAC1B,MAAM,UAAU,KAAK,SAAS,IAAI,QAAQ;AAAA,IAE1C,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,kBAAkB,8BAA8B,UAAU;AAAA,IACtE;AAAA,IAEA,OAAO,QAAQ,WAAW,YAAY,MAAM,QAAQ;AAAA;AAAA,OAMhD,QAAoB,CAAC,KAAsB;AAAA,IAC/C,MAAM,WAAW,IAAI,SAAS;AAAA,IAC9B,MAAM,UAAU,KAAK,SAAS,IAAI,QAAQ;AAAA,IAE1C,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,kBAAkB,8BAA8B,UAAU;AAAA,IACtE;AAAA,IAEA,OAAO,QAAQ,SAAS,QAAQ,GAAG;AAAA;AAEvC;AAKO,SAAS,sBAAsB,CAAC,OAA0C;AAAA,EAC/E,MAAM,QAAQ,IAAI;AAAA,EAClB,IAAI,OAAO;AAAA,IACT,MAAM,YAAY,KAAK;AAAA,EACzB;AAAA,EACA,OAAO;AAAA;",
15
- "debugId": "B9B3CCB31ADA300B64756E2164756E21",
16
+ "mappings": "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",
17
+ "debugId": "9516A09E80942F2964756E2164756E21",
16
18
  "names": []
17
19
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resourcexjs/core",
3
- "version": "0.8.1",
3
+ "version": "0.9.0",
4
4
  "description": "ResourceX Core - Resource management layer",
5
5
  "keywords": [
6
6
  "resourcex",
@@ -37,7 +37,7 @@
37
37
  "clean": "rm -rf dist"
38
38
  },
39
39
  "dependencies": {
40
- "@resourcexjs/arp": "^0.8.1"
40
+ "@resourcexjs/arp": "^0.9.0"
41
41
  },
42
42
  "devDependencies": {},
43
43
  "publishConfig": {