@resourcexjs/core 0.1.0 → 0.3.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/README.md +75 -14
- package/dist/index.d.ts +55 -1
- package/dist/index.js +92 -4
- package/dist/index.js.map +7 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -30,19 +30,56 @@ import { resolve } from "@resourcexjs/core";
|
|
|
30
30
|
|
|
31
31
|
const resource = await resolve("arp:text:https://example.com/file.txt");
|
|
32
32
|
// { type: "text", content: "...", meta: { ... } }
|
|
33
|
+
|
|
34
|
+
const binary = await resolve("arp:binary:file://./image.png");
|
|
35
|
+
// { type: "binary", content: Buffer, meta: { ... } }
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Deposit Resources
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
import { deposit } from "@resourcexjs/core";
|
|
42
|
+
|
|
43
|
+
await deposit("arp:text:file://./data/config.txt", "hello world");
|
|
44
|
+
await deposit("arp:binary:file://./data/image.png", buffer);
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Check Existence & Delete
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
import { resourceExists, resourceDelete } from "@resourcexjs/core";
|
|
51
|
+
|
|
52
|
+
const exists = await resourceExists("arp:text:file://./data/config.txt");
|
|
53
|
+
await resourceDelete("arp:text:file://./data/config.txt");
|
|
33
54
|
```
|
|
34
55
|
|
|
35
56
|
### Custom Transport Handler
|
|
36
57
|
|
|
58
|
+
Transport provides I/O primitives (read/write/list/exists/delete):
|
|
59
|
+
|
|
37
60
|
```typescript
|
|
38
61
|
import { registerTransportHandler, type TransportHandler } from "@resourcexjs/core";
|
|
39
62
|
|
|
40
63
|
const s3Handler: TransportHandler = {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
64
|
+
name: "s3",
|
|
65
|
+
capabilities: {
|
|
66
|
+
canRead: true,
|
|
67
|
+
canWrite: true,
|
|
68
|
+
canList: true,
|
|
69
|
+
canDelete: true,
|
|
70
|
+
canStat: false,
|
|
71
|
+
},
|
|
72
|
+
async read(location: string): Promise<Buffer> {
|
|
73
|
+
// read from S3...
|
|
44
74
|
return buffer;
|
|
45
75
|
},
|
|
76
|
+
async write(location: string, content: Buffer): Promise<void> {
|
|
77
|
+
// write to S3...
|
|
78
|
+
},
|
|
79
|
+
async list(location: string): Promise<string[]> {
|
|
80
|
+
// list S3 objects...
|
|
81
|
+
return keys;
|
|
82
|
+
},
|
|
46
83
|
};
|
|
47
84
|
|
|
48
85
|
registerTransportHandler(s3Handler);
|
|
@@ -50,20 +87,33 @@ registerTransportHandler(s3Handler);
|
|
|
50
87
|
|
|
51
88
|
### Custom Semantic Handler
|
|
52
89
|
|
|
90
|
+
Semantic orchestrates Transport primitives to handle resource logic:
|
|
91
|
+
|
|
53
92
|
```typescript
|
|
54
93
|
import { registerSemanticHandler, type SemanticHandler, type Resource } from "@resourcexjs/core";
|
|
55
94
|
|
|
56
95
|
const jsonHandler: SemanticHandler = {
|
|
57
|
-
|
|
58
|
-
|
|
96
|
+
name: "json",
|
|
97
|
+
async resolve(transport, location, context): Promise<Resource> {
|
|
98
|
+
const buffer = await transport.read(location);
|
|
59
99
|
return {
|
|
60
100
|
type: "json",
|
|
61
|
-
content: JSON.parse(
|
|
101
|
+
content: JSON.parse(buffer.toString("utf-8")),
|
|
62
102
|
meta: {
|
|
63
|
-
|
|
103
|
+
url: context.url,
|
|
104
|
+
semantic: context.semantic,
|
|
105
|
+
transport: context.transport,
|
|
106
|
+
location: context.location,
|
|
107
|
+
size: buffer.length,
|
|
108
|
+
resolvedAt: context.timestamp.toISOString(),
|
|
64
109
|
},
|
|
65
110
|
};
|
|
66
111
|
},
|
|
112
|
+
async deposit(transport, location, data, context): Promise<void> {
|
|
113
|
+
if (!transport.write) throw new Error("Transport does not support write");
|
|
114
|
+
const buffer = Buffer.from(JSON.stringify(data), "utf-8");
|
|
115
|
+
await transport.write(location, buffer);
|
|
116
|
+
},
|
|
67
117
|
};
|
|
68
118
|
|
|
69
119
|
registerSemanticHandler(jsonHandler);
|
|
@@ -75,22 +125,27 @@ registerSemanticHandler(jsonHandler);
|
|
|
75
125
|
|
|
76
126
|
- `parseARP(url)` - Parse ARP URL string
|
|
77
127
|
- `resolve(url)` - Resolve ARP URL to resource
|
|
78
|
-
- `
|
|
128
|
+
- `deposit(url, data)` - Deposit data to ARP URL
|
|
129
|
+
- `resourceExists(url)` - Check if resource exists
|
|
130
|
+
- `resourceDelete(url)` - Delete resource
|
|
131
|
+
- `getTransportHandler(name)` - Get registered transport handler
|
|
79
132
|
- `registerTransportHandler(handler)` - Register custom transport
|
|
80
|
-
- `getSemanticHandler(
|
|
133
|
+
- `getSemanticHandler(name)` - Get registered semantic handler
|
|
81
134
|
- `registerSemanticHandler(handler)` - Register custom semantic
|
|
135
|
+
- `createResourceRegistry()` - Create a resource definition registry
|
|
82
136
|
|
|
83
137
|
### Built-in Handlers
|
|
84
138
|
|
|
85
139
|
**Transport:**
|
|
86
140
|
|
|
87
|
-
- `httpsHandler` - HTTPS protocol
|
|
88
|
-
- `httpHandler` - HTTP protocol
|
|
89
|
-
- `fileHandler` - Local file system
|
|
141
|
+
- `httpsHandler` - HTTPS protocol (read-only)
|
|
142
|
+
- `httpHandler` - HTTP protocol (read-only)
|
|
143
|
+
- `fileHandler` - Local file system (read/write/list/delete)
|
|
90
144
|
|
|
91
145
|
**Semantic:**
|
|
92
146
|
|
|
93
|
-
- `textHandler` - Plain text
|
|
147
|
+
- `textHandler` - Plain text (UTF-8 encoding)
|
|
148
|
+
- `binaryHandler` - Raw binary (Buffer passthrough)
|
|
94
149
|
|
|
95
150
|
### Error Classes
|
|
96
151
|
|
|
@@ -110,10 +165,16 @@ import type {
|
|
|
110
165
|
ParsedARP,
|
|
111
166
|
Resource,
|
|
112
167
|
ResourceMeta,
|
|
113
|
-
|
|
168
|
+
SemanticContext,
|
|
114
169
|
TransportHandler,
|
|
170
|
+
TransportCapabilities,
|
|
171
|
+
ResourceStat,
|
|
115
172
|
SemanticHandler,
|
|
116
173
|
TextResource,
|
|
174
|
+
BinaryResource,
|
|
175
|
+
BinaryInput,
|
|
176
|
+
ResourceDefinition,
|
|
177
|
+
ResourceRegistry,
|
|
117
178
|
} from "@resourcexjs/core";
|
|
118
179
|
```
|
|
119
180
|
|
package/dist/index.d.ts
CHANGED
|
@@ -233,6 +233,22 @@ declare class TextSemanticHandler implements SemanticHandler<string> {
|
|
|
233
233
|
delete(transport: TransportHandler, location: string, _context: SemanticContext): Promise<void>;
|
|
234
234
|
}
|
|
235
235
|
declare const textHandler: TextSemanticHandler;
|
|
236
|
+
interface BinaryResource extends Resource<Buffer> {
|
|
237
|
+
type: "binary";
|
|
238
|
+
content: Buffer;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Supported binary input types for deposit
|
|
242
|
+
*/
|
|
243
|
+
type BinaryInput = Buffer | Uint8Array | ArrayBuffer | number[];
|
|
244
|
+
declare class BinarySemanticHandler implements SemanticHandler<Buffer> {
|
|
245
|
+
readonly name = "binary";
|
|
246
|
+
resolve(transport: TransportHandler, location: string, context: SemanticContext): Promise<BinaryResource>;
|
|
247
|
+
deposit(transport: TransportHandler, location: string, data: BinaryInput, _context: SemanticContext): Promise<void>;
|
|
248
|
+
exists(transport: TransportHandler, location: string, _context: SemanticContext): Promise<boolean>;
|
|
249
|
+
delete(transport: TransportHandler, location: string, _context: SemanticContext): Promise<void>;
|
|
250
|
+
}
|
|
251
|
+
declare const binaryHandler: BinarySemanticHandler;
|
|
236
252
|
/**
|
|
237
253
|
* Get semantic handler by name
|
|
238
254
|
*/
|
|
@@ -270,5 +286,43 @@ declare function resourceExists(url: string): Promise<boolean>;
|
|
|
270
286
|
* await resourceDelete("arp:text:file://./data/config.txt");
|
|
271
287
|
*/
|
|
272
288
|
declare function resourceDelete(url: string): Promise<void>;
|
|
289
|
+
/**
|
|
290
|
+
* Resource Definition Types
|
|
291
|
+
*/
|
|
292
|
+
/**
|
|
293
|
+
* Definition of a custom resource (shortcut for ARP URL)
|
|
294
|
+
*/
|
|
295
|
+
interface ResourceDefinition {
|
|
296
|
+
/** Unique name for the resource (used in URL: name://location) */
|
|
297
|
+
readonly name: string;
|
|
298
|
+
/** Semantic type (e.g., "text", "json", "binary") */
|
|
299
|
+
readonly semantic: string;
|
|
300
|
+
/** Transport type (e.g., "file", "https") */
|
|
301
|
+
readonly transport: string;
|
|
302
|
+
/** Base path prepended to location (optional) */
|
|
303
|
+
readonly basePath?: string;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Create a new resource registry (isolated instance)
|
|
307
|
+
*/
|
|
308
|
+
declare function createResourceRegistry(): {
|
|
309
|
+
/**
|
|
310
|
+
* Register a resource definition
|
|
311
|
+
*/
|
|
312
|
+
register(definition: ResourceDefinition): void
|
|
313
|
+
/**
|
|
314
|
+
* Get a resource definition by name
|
|
315
|
+
*/
|
|
316
|
+
get(name: string): ResourceDefinition | undefined
|
|
317
|
+
/**
|
|
318
|
+
* Check if a resource is registered
|
|
319
|
+
*/
|
|
320
|
+
has(name: string): boolean
|
|
321
|
+
/**
|
|
322
|
+
* Clear all registered resources
|
|
323
|
+
*/
|
|
324
|
+
clear(): void
|
|
325
|
+
};
|
|
326
|
+
type ResourceRegistry = ReturnType<typeof createResourceRegistry>;
|
|
273
327
|
declare const VERSION: string;
|
|
274
|
-
export { textHandler, resourceExists, resourceDelete, resolve, registerTransportHandler, registerSemanticHandler, parseARP, httpsHandler, httpHandler, getTransportHandler, getSemanticHandler, fileHandler, deposit, VERSION, TransportHandler, TransportError, TransportCapabilities, TextResource, SemanticHandler, SemanticError, SemanticContext, ResourceXError, ResourceStat, ResourceMeta, Resource, ParsedARP, ParseError };
|
|
328
|
+
export { textHandler, resourceExists, resourceDelete, resolve, registerTransportHandler, registerSemanticHandler, parseARP, httpsHandler, httpHandler, getTransportHandler, getSemanticHandler, fileHandler, deposit, createResourceRegistry, binaryHandler, VERSION, TransportHandler, TransportError, TransportCapabilities, TextResource, SemanticHandler, SemanticError, SemanticContext, ResourceXError, ResourceStat, ResourceRegistry, ResourceMeta, ResourceDefinition, Resource, ParsedARP, ParseError, BinaryResource, BinaryInput };
|
package/dist/index.js
CHANGED
|
@@ -259,8 +259,72 @@ class TextSemanticHandler {
|
|
|
259
259
|
}
|
|
260
260
|
}
|
|
261
261
|
var textHandler = new TextSemanticHandler;
|
|
262
|
+
// src/semantic/binary.ts
|
|
263
|
+
function toBuffer(data) {
|
|
264
|
+
if (Buffer.isBuffer(data)) {
|
|
265
|
+
return data;
|
|
266
|
+
}
|
|
267
|
+
if (data instanceof Uint8Array) {
|
|
268
|
+
return Buffer.from(data);
|
|
269
|
+
}
|
|
270
|
+
if (data instanceof ArrayBuffer) {
|
|
271
|
+
return Buffer.from(data);
|
|
272
|
+
}
|
|
273
|
+
if (Array.isArray(data)) {
|
|
274
|
+
return Buffer.from(data);
|
|
275
|
+
}
|
|
276
|
+
throw new SemanticError(`Unsupported binary input type`, "binary");
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
class BinarySemanticHandler {
|
|
280
|
+
name = "binary";
|
|
281
|
+
async resolve(transport, location, context) {
|
|
282
|
+
const buffer = await transport.read(location);
|
|
283
|
+
const meta = {
|
|
284
|
+
url: context.url,
|
|
285
|
+
semantic: context.semantic,
|
|
286
|
+
transport: context.transport,
|
|
287
|
+
location: context.location,
|
|
288
|
+
size: buffer.length,
|
|
289
|
+
resolvedAt: context.timestamp.toISOString()
|
|
290
|
+
};
|
|
291
|
+
return {
|
|
292
|
+
type: "binary",
|
|
293
|
+
content: buffer,
|
|
294
|
+
meta
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
async deposit(transport, location, data, _context) {
|
|
298
|
+
if (!transport.write) {
|
|
299
|
+
throw new SemanticError(`Transport "${transport.name}" does not support write operation`, this.name);
|
|
300
|
+
}
|
|
301
|
+
const buffer = toBuffer(data);
|
|
302
|
+
await transport.write(location, buffer);
|
|
303
|
+
}
|
|
304
|
+
async exists(transport, location, _context) {
|
|
305
|
+
if (transport.exists) {
|
|
306
|
+
return transport.exists(location);
|
|
307
|
+
}
|
|
308
|
+
try {
|
|
309
|
+
await transport.read(location);
|
|
310
|
+
return true;
|
|
311
|
+
} catch {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
async delete(transport, location, _context) {
|
|
316
|
+
if (!transport.delete) {
|
|
317
|
+
throw new SemanticError(`Transport "${transport.name}" does not support delete operation`, this.name);
|
|
318
|
+
}
|
|
319
|
+
await transport.delete(location);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
var binaryHandler = new BinarySemanticHandler;
|
|
262
323
|
// src/semantic/index.ts
|
|
263
|
-
var handlers2 = new Map([
|
|
324
|
+
var handlers2 = new Map([
|
|
325
|
+
["text", textHandler],
|
|
326
|
+
["binary", binaryHandler]
|
|
327
|
+
]);
|
|
264
328
|
function getSemanticHandler(name) {
|
|
265
329
|
const handler = handlers2.get(name);
|
|
266
330
|
if (!handler) {
|
|
@@ -329,9 +393,31 @@ async function resourceDelete(url) {
|
|
|
329
393
|
}
|
|
330
394
|
await transport.delete(parsed.location);
|
|
331
395
|
}
|
|
332
|
-
|
|
396
|
+
// src/resource/registry.ts
|
|
397
|
+
function createResourceRegistry() {
|
|
398
|
+
const registry = new Map;
|
|
399
|
+
return {
|
|
400
|
+
register(definition) {
|
|
401
|
+
if (!/^[a-z][a-z0-9-]*$/.test(definition.name)) {
|
|
402
|
+
throw new ParseError(`Invalid resource name: "${definition.name}". Must start with lowercase letter and contain only lowercase letters, numbers, and hyphens.`, definition.name);
|
|
403
|
+
}
|
|
404
|
+
getSemanticHandler(definition.semantic);
|
|
405
|
+
getTransportHandler(definition.transport);
|
|
406
|
+
registry.set(definition.name, definition);
|
|
407
|
+
},
|
|
408
|
+
get(name) {
|
|
409
|
+
return registry.get(name);
|
|
410
|
+
},
|
|
411
|
+
has(name) {
|
|
412
|
+
return registry.has(name);
|
|
413
|
+
},
|
|
414
|
+
clear() {
|
|
415
|
+
registry.clear();
|
|
416
|
+
}
|
|
417
|
+
};
|
|
418
|
+
}
|
|
333
419
|
// src/index.ts
|
|
334
|
-
var VERSION = "0.
|
|
420
|
+
var VERSION = "0.3.0";
|
|
335
421
|
export {
|
|
336
422
|
textHandler,
|
|
337
423
|
resourceExists,
|
|
@@ -346,6 +432,8 @@ export {
|
|
|
346
432
|
getSemanticHandler,
|
|
347
433
|
fileHandler,
|
|
348
434
|
deposit,
|
|
435
|
+
createResourceRegistry,
|
|
436
|
+
binaryHandler,
|
|
349
437
|
VERSION,
|
|
350
438
|
TransportError,
|
|
351
439
|
SemanticError,
|
|
@@ -353,4 +441,4 @@ export {
|
|
|
353
441
|
ParseError
|
|
354
442
|
};
|
|
355
443
|
|
|
356
|
-
//# debugId=
|
|
444
|
+
//# debugId=3CCC29CAAC2626B164756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/errors.ts", "../src/parser.ts", "../src/transport/http.ts", "../src/transport/file.ts", "../src/transport/index.ts", "../src/semantic/text.ts", "../src/semantic/index.ts", "../src/resolve.ts", "../src/index.ts"],
|
|
3
|
+
"sources": ["../src/errors.ts", "../src/parser.ts", "../src/transport/http.ts", "../src/transport/file.ts", "../src/transport/index.ts", "../src/semantic/text.ts", "../src/semantic/binary.ts", "../src/semantic/index.ts", "../src/resolve.ts", "../src/resource/registry.ts", "../src/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * ResourceX Error Types\n */\n\n/**\n * Base error class for all ResourceX errors\n */\nexport class ResourceXError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"ResourceXError\";\n }\n}\n\n/**\n * Error thrown when ARP URL parsing fails\n */\nexport class ParseError extends ResourceXError {\n constructor(\n message: string,\n public readonly url?: string\n ) {\n super(message);\n this.name = \"ParseError\";\n }\n}\n\n/**\n * Error thrown when transport layer fails\n */\nexport class TransportError extends ResourceXError {\n constructor(\n message: string,\n public readonly transport?: string,\n options?: ErrorOptions\n ) {\n super(message, options);\n this.name = \"TransportError\";\n }\n}\n\n/**\n * Error thrown when semantic layer fails\n */\nexport class SemanticError extends ResourceXError {\n constructor(\n message: string,\n public readonly semantic?: string,\n options?: ErrorOptions\n ) {\n super(message, options);\n this.name = \"SemanticError\";\n }\n}\n",
|
|
6
6
|
"/**\n * ARP URL Parser\n * Format: arp:{semantic}:{transport}://{location}\n */\n\nimport { ParseError } from \"./errors.js\";\n\nexport interface ParsedARP {\n semantic: string;\n transport: string;\n location: string;\n}\n\n/**\n * Parse an ARP URL into its components\n *\n * @example\n * parseARP(\"arp:text:https://example.com/file.txt\")\n * // { semantic: \"text\", transport: \"https\", location: \"example.com/file.txt\" }\n */\nexport function parseARP(url: string): ParsedARP {\n // 1. Check protocol prefix\n if (!url.startsWith(\"arp:\")) {\n throw new ParseError(`Invalid ARP URL: must start with \"arp:\"`, url);\n }\n\n const content = url.substring(4); // Remove \"arp:\"\n\n // 2. Find :// separator\n const separatorIndex = content.indexOf(\"://\");\n if (separatorIndex === -1) {\n throw new ParseError(`Invalid ARP URL: missing \"://\"`, url);\n }\n\n const typePart = content.substring(0, separatorIndex);\n const location = content.substring(separatorIndex + 3);\n\n // 3. Split type part by :\n const colonIndex = typePart.indexOf(\":\");\n if (colonIndex === -1) {\n throw new ParseError(`Invalid ARP URL: must have exactly 2 types (semantic:transport)`, url);\n }\n\n const semantic = typePart.substring(0, colonIndex);\n const transport = typePart.substring(colonIndex + 1);\n\n // 4. Validate non-empty\n if (!semantic) {\n throw new ParseError(`Invalid ARP URL: semantic type cannot be empty`, url);\n }\n if (!transport) {\n throw new ParseError(`Invalid ARP URL: transport type cannot be empty`, url);\n }\n if (!location) {\n throw new ParseError(`Invalid ARP URL: location cannot be empty`, url);\n }\n\n return { semantic, transport, location };\n}\n",
|
|
@@ -8,11 +8,13 @@
|
|
|
8
8
|
"/**\n * File Transport Handler\n * Provides I/O primitives for local filesystem\n */\n\nimport { readFile, writeFile, readdir, mkdir, rm, access, stat as fsStat } from \"node:fs/promises\";\nimport { resolve, dirname } from \"node:path\";\nimport { TransportError } from \"../errors.js\";\nimport type { TransportHandler, TransportCapabilities, ResourceStat } from \"./types.js\";\n\nexport class FileTransportHandler implements TransportHandler {\n readonly name = \"file\";\n\n readonly capabilities: TransportCapabilities = {\n canRead: true,\n canWrite: true,\n canList: true,\n canDelete: true,\n canStat: true,\n };\n\n private resolvePath(location: string): string {\n return resolve(process.cwd(), location);\n }\n\n async read(location: string): Promise<Buffer> {\n const filePath = this.resolvePath(location);\n\n try {\n return await readFile(filePath);\n } catch (error) {\n const err = error as Error & { code?: string };\n throw new TransportError(`File read error: ${err.code} - ${filePath}`, this.name, {\n cause: err,\n });\n }\n }\n\n async write(location: string, content: Buffer): Promise<void> {\n const filePath = this.resolvePath(location);\n\n try {\n // Ensure directory exists\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, content);\n } catch (error) {\n const err = error as Error & { code?: string };\n throw new TransportError(`File write error: ${err.code} - ${filePath}`, this.name, {\n cause: err,\n });\n }\n }\n\n async list(location: string): Promise<string[]> {\n const dirPath = this.resolvePath(location);\n\n try {\n return await readdir(dirPath);\n } catch (error) {\n const err = error as Error & { code?: string };\n throw new TransportError(`Directory list error: ${err.code} - ${dirPath}`, this.name, {\n cause: err,\n });\n }\n }\n\n async mkdir(location: string): Promise<void> {\n const dirPath = this.resolvePath(location);\n\n try {\n await mkdir(dirPath, { recursive: true });\n } catch (error) {\n const err = error as Error & { code?: string };\n throw new TransportError(`Directory create error: ${err.code} - ${dirPath}`, this.name, {\n cause: err,\n });\n }\n }\n\n async exists(location: string): Promise<boolean> {\n const filePath = this.resolvePath(location);\n\n try {\n await access(filePath);\n return true;\n } catch {\n return false;\n }\n }\n\n async stat(location: string): Promise<ResourceStat> {\n const filePath = this.resolvePath(location);\n\n try {\n const stats = await fsStat(filePath);\n return {\n size: stats.size,\n modifiedAt: stats.mtime,\n isDirectory: stats.isDirectory(),\n };\n } catch (error) {\n const err = error as Error & { code?: string };\n throw new TransportError(`File stat error: ${err.code} - ${filePath}`, this.name, {\n cause: err,\n });\n }\n }\n\n async delete(location: string): Promise<void> {\n const filePath = this.resolvePath(location);\n\n try {\n await rm(filePath, { recursive: true });\n } catch (error) {\n const err = error as Error & { code?: string };\n throw new TransportError(`File delete error: ${err.code} - ${filePath}`, this.name, {\n cause: err,\n });\n }\n }\n}\n\nexport const fileHandler: FileTransportHandler = new FileTransportHandler();\n",
|
|
9
9
|
"/**\n * Transport Handlers Registry\n */\n\nimport { TransportError } from \"../errors.js\";\n\nexport type { TransportHandler, TransportCapabilities, ResourceStat } from \"./types.js\";\nexport { HttpTransportHandler, httpsHandler, httpHandler } from \"./http.js\";\nexport { FileTransportHandler, fileHandler } from \"./file.js\";\n\nimport type { TransportHandler } from \"./types.js\";\nimport { httpsHandler, httpHandler } from \"./http.js\";\nimport { fileHandler } from \"./file.js\";\n\nconst handlers = new Map<string, TransportHandler>([\n [\"https\", httpsHandler],\n [\"http\", httpHandler],\n [\"file\", fileHandler],\n]);\n\n/**\n * Get transport handler by name\n */\nexport function getTransportHandler(name: string): TransportHandler {\n const handler = handlers.get(name);\n if (!handler) {\n throw new TransportError(`Unsupported transport type: ${name}`, name);\n }\n return handler;\n}\n\n/**\n * Register a custom transport handler\n */\nexport function registerTransportHandler(handler: TransportHandler): void {\n handlers.set(handler.name, handler);\n}\n",
|
|
10
10
|
"/**\n * Text Semantic Handler\n * Handles plain text resources\n */\n\nimport { SemanticError } from \"../errors.js\";\nimport type { TransportHandler } from \"../transport/types.js\";\nimport type { Resource, SemanticHandler, SemanticContext, ResourceMeta } from \"./types.js\";\n\nexport interface TextResource extends Resource<string> {\n type: \"text\";\n content: string;\n}\n\nexport class TextSemanticHandler implements SemanticHandler<string> {\n readonly name = \"text\";\n\n async resolve(\n transport: TransportHandler,\n location: string,\n context: SemanticContext\n ): Promise<TextResource> {\n const buffer = await transport.read(location);\n const text = buffer.toString(\"utf-8\");\n\n const meta: ResourceMeta = {\n url: context.url,\n semantic: context.semantic,\n transport: context.transport,\n location: context.location,\n size: buffer.length,\n encoding: \"utf-8\",\n mimeType: \"text/plain\",\n resolvedAt: context.timestamp.toISOString(),\n };\n\n return {\n type: \"text\",\n content: text,\n meta,\n };\n }\n\n async deposit(\n transport: TransportHandler,\n location: string,\n data: string,\n _context: SemanticContext\n ): Promise<void> {\n if (!transport.write) {\n throw new SemanticError(\n `Transport \"${transport.name}\" does not support write operation`,\n this.name\n );\n }\n\n const buffer = Buffer.from(data, \"utf-8\");\n await transport.write(location, buffer);\n }\n\n async exists(\n transport: TransportHandler,\n location: string,\n _context: SemanticContext\n ): Promise<boolean> {\n if (transport.exists) {\n return transport.exists(location);\n }\n\n // Fallback: try to read\n try {\n await transport.read(location);\n return true;\n } catch {\n return false;\n }\n }\n\n async delete(\n transport: TransportHandler,\n location: string,\n _context: SemanticContext\n ): Promise<void> {\n if (!transport.delete) {\n throw new SemanticError(\n `Transport \"${transport.name}\" does not support delete operation`,\n this.name\n );\n }\n\n await transport.delete(location);\n }\n}\n\nexport const textHandler: TextSemanticHandler = new TextSemanticHandler();\n",
|
|
11
|
-
"/**\n * Semantic
|
|
11
|
+
"/**\n * Binary Semantic Handler\n * Handles raw binary resources without any transformation\n */\n\nimport { SemanticError } from \"../errors.js\";\nimport type { TransportHandler } from \"../transport/types.js\";\nimport type { Resource, SemanticHandler, SemanticContext, ResourceMeta } from \"./types.js\";\n\nexport interface BinaryResource extends Resource<Buffer> {\n type: \"binary\";\n content: Buffer;\n}\n\n/**\n * Supported binary input types for deposit\n */\nexport type BinaryInput = Buffer | Uint8Array | ArrayBuffer | number[];\n\n/**\n * Convert various binary input types to Buffer\n */\nfunction toBuffer(data: BinaryInput): Buffer {\n if (Buffer.isBuffer(data)) {\n return data;\n }\n if (data instanceof Uint8Array) {\n return Buffer.from(data);\n }\n if (data instanceof ArrayBuffer) {\n return Buffer.from(data);\n }\n if (Array.isArray(data)) {\n return Buffer.from(data);\n }\n throw new SemanticError(`Unsupported binary input type`, \"binary\");\n}\n\nexport class BinarySemanticHandler implements SemanticHandler<Buffer> {\n readonly name = \"binary\";\n\n async resolve(\n transport: TransportHandler,\n location: string,\n context: SemanticContext\n ): Promise<BinaryResource> {\n const buffer = await transport.read(location);\n\n const meta: ResourceMeta = {\n url: context.url,\n semantic: context.semantic,\n transport: context.transport,\n location: context.location,\n size: buffer.length,\n resolvedAt: context.timestamp.toISOString(),\n };\n\n return {\n type: \"binary\",\n content: buffer,\n meta,\n };\n }\n\n async deposit(\n transport: TransportHandler,\n location: string,\n data: BinaryInput,\n _context: SemanticContext\n ): Promise<void> {\n if (!transport.write) {\n throw new SemanticError(\n `Transport \"${transport.name}\" does not support write operation`,\n this.name\n );\n }\n\n const buffer = toBuffer(data);\n await transport.write(location, buffer);\n }\n\n async exists(\n transport: TransportHandler,\n location: string,\n _context: SemanticContext\n ): Promise<boolean> {\n if (transport.exists) {\n return transport.exists(location);\n }\n\n // Fallback: try to read\n try {\n await transport.read(location);\n return true;\n } catch {\n return false;\n }\n }\n\n async delete(\n transport: TransportHandler,\n location: string,\n _context: SemanticContext\n ): Promise<void> {\n if (!transport.delete) {\n throw new SemanticError(\n `Transport \"${transport.name}\" does not support delete operation`,\n this.name\n );\n }\n\n await transport.delete(location);\n }\n}\n\nexport const binaryHandler: BinarySemanticHandler = new BinarySemanticHandler();\n",
|
|
12
|
+
"/**\n * Semantic Handlers Registry\n */\n\nimport { SemanticError } from \"../errors.js\";\n\nexport type { Resource, SemanticHandler, ResourceMeta, SemanticContext } from \"./types.js\";\nexport type { TextResource } from \"./text.js\";\nexport type { BinaryResource, BinaryInput } from \"./binary.js\";\nexport { TextSemanticHandler, textHandler } from \"./text.js\";\nexport { BinarySemanticHandler, binaryHandler } from \"./binary.js\";\n\nimport type { SemanticHandler } from \"./types.js\";\nimport { textHandler } from \"./text.js\";\nimport { binaryHandler } from \"./binary.js\";\n\nconst handlers = new Map<string, SemanticHandler>([\n [\"text\", textHandler],\n [\"binary\", binaryHandler],\n]);\n\n/**\n * Get semantic handler by name\n */\nexport function getSemanticHandler(name: string): SemanticHandler {\n const handler = handlers.get(name);\n if (!handler) {\n throw new SemanticError(`Unsupported semantic type: ${name}`, name);\n }\n return handler;\n}\n\n/**\n * Register a custom semantic handler\n */\nexport function registerSemanticHandler(handler: SemanticHandler): void {\n handlers.set(handler.name, handler);\n}\n",
|
|
12
13
|
"/**\n * Resource Operations\n * End-to-end flows for resolve/deposit/exists/delete\n *\n * New Architecture:\n * - Transport provides I/O primitives (read/write/list/exists/delete)\n * - Semantic orchestrates Transport primitives to handle resource semantics\n * - This module coordinates Transport + Semantic based on parsed URL\n */\n\nimport { parseARP } from \"./parser.js\";\nimport { getTransportHandler } from \"./transport/index.js\";\nimport { getSemanticHandler, type Resource, type SemanticContext } from \"./semantic/index.js\";\nimport { SemanticError } from \"./errors.js\";\n\n/**\n * Create semantic context from parsed URL\n */\nfunction createContext(\n url: string,\n semantic: string,\n transport: string,\n location: string\n): SemanticContext {\n return {\n url,\n semantic,\n transport,\n location,\n timestamp: new Date(),\n };\n}\n\n/**\n * Resolve an ARP URL to a resource\n *\n * @example\n * const resource = await resolve(\"arp:text:https://example.com/file.txt\");\n * // { type: \"text\", content: \"...\", meta: { ... } }\n */\nexport async function resolve(url: string): Promise<Resource> {\n const parsed = parseARP(url);\n\n const transport = getTransportHandler(parsed.transport);\n const semantic = getSemanticHandler(parsed.semantic);\n\n const context = createContext(url, parsed.semantic, parsed.transport, parsed.location);\n\n // Semantic controls the resolve flow\n return semantic.resolve(transport, parsed.location, context);\n}\n\n/**\n * Deposit data to an ARP URL\n *\n * @example\n * await deposit(\"arp:text:file://./data/config.txt\", \"hello world\");\n */\nexport async function deposit(url: string, data: unknown): Promise<void> {\n const parsed = parseARP(url);\n\n const transport = getTransportHandler(parsed.transport);\n const semantic = getSemanticHandler(parsed.semantic);\n\n if (!semantic.deposit) {\n throw new SemanticError(\n `Semantic \"${semantic.name}\" does not support deposit operation`,\n parsed.semantic\n );\n }\n\n const context = createContext(url, parsed.semantic, parsed.transport, parsed.location);\n\n // Semantic controls the deposit flow\n await semantic.deposit(transport, parsed.location, data, context);\n}\n\n/**\n * Check if resource exists at ARP URL\n *\n * @example\n * const exists = await resourceExists(\"arp:text:file://./data/config.txt\");\n */\nexport async function resourceExists(url: string): Promise<boolean> {\n const parsed = parseARP(url);\n\n const transport = getTransportHandler(parsed.transport);\n const semantic = getSemanticHandler(parsed.semantic);\n\n const context = createContext(url, parsed.semantic, parsed.transport, parsed.location);\n\n if (semantic.exists) {\n return semantic.exists(transport, parsed.location, context);\n }\n\n // Fallback to transport exists if semantic doesn't implement it\n if (transport.exists) {\n return transport.exists(parsed.location);\n }\n\n // Fallback: try to read\n try {\n await transport.read(parsed.location);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Delete resource at ARP URL\n *\n * @example\n * await resourceDelete(\"arp:text:file://./data/config.txt\");\n */\nexport async function resourceDelete(url: string): Promise<void> {\n const parsed = parseARP(url);\n\n const transport = getTransportHandler(parsed.transport);\n const semantic = getSemanticHandler(parsed.semantic);\n\n const context = createContext(url, parsed.semantic, parsed.transport, parsed.location);\n\n if (semantic.delete) {\n return semantic.delete(transport, parsed.location, context);\n }\n\n // Fallback to transport delete\n if (!transport.delete) {\n throw new SemanticError(\n `Neither semantic \"${semantic.name}\" nor transport \"${transport.name}\" supports delete operation`,\n parsed.semantic\n );\n }\n\n await transport.delete(parsed.location);\n}\n",
|
|
13
|
-
"/**\n *
|
|
14
|
+
"/**\n * Resource Registry\n */\n\nimport { ParseError } from \"../errors.js\";\nimport { getSemanticHandler } from \"../semantic/index.js\";\nimport { getTransportHandler } from \"../transport/index.js\";\nimport type { ResourceDefinition } from \"./types.js\";\n\n/**\n * Create a new resource registry (isolated instance)\n */\nexport function createResourceRegistry() {\n const registry = new Map<string, ResourceDefinition>();\n\n return {\n /**\n * Register a resource definition\n */\n register(definition: ResourceDefinition): void {\n // Validate name format\n if (!/^[a-z][a-z0-9-]*$/.test(definition.name)) {\n throw new ParseError(\n `Invalid resource name: \"${definition.name}\". Must start with lowercase letter and contain only lowercase letters, numbers, and hyphens.`,\n definition.name\n );\n }\n\n // Validate semantic exists\n getSemanticHandler(definition.semantic);\n\n // Validate transport exists\n getTransportHandler(definition.transport);\n\n registry.set(definition.name, definition);\n },\n\n /**\n * Get a resource definition by name\n */\n get(name: string): ResourceDefinition | undefined {\n return registry.get(name);\n },\n\n /**\n * Check if a resource is registered\n */\n has(name: string): boolean {\n return registry.has(name);\n },\n\n /**\n * Clear all registered resources\n */\n clear(): void {\n registry.clear();\n },\n };\n}\n\nexport type ResourceRegistry = ReturnType<typeof createResourceRegistry>;\n",
|
|
15
|
+
"/**\n * @resourcexjs/core\n * ARP (Agent Resource Protocol) implementation\n */\n\ndeclare const __VERSION__: string;\nexport const VERSION: string = __VERSION__;\n\n// Errors\nexport { ResourceXError, ParseError, TransportError, SemanticError } from \"./errors.js\";\n\n// Parser\nexport { parseARP, type ParsedARP } from \"./parser.js\";\n\n// Transport\nexport {\n type TransportHandler,\n type TransportCapabilities,\n type ResourceStat,\n getTransportHandler,\n registerTransportHandler,\n httpsHandler,\n httpHandler,\n fileHandler,\n} from \"./transport/index.js\";\n\n// Semantic\nexport {\n type Resource,\n type SemanticHandler,\n type ResourceMeta,\n type SemanticContext,\n type TextResource,\n type BinaryResource,\n type BinaryInput,\n getSemanticHandler,\n registerSemanticHandler,\n textHandler,\n binaryHandler,\n} from \"./semantic/index.js\";\n\n// Resource Operations\nexport { resolve, deposit, resourceExists, resourceDelete } from \"./resolve.js\";\n\n// Resource Definition\nexport {\n type ResourceDefinition,\n type ResourceRegistry,\n createResourceRegistry,\n} from \"./resource/index.js\";\n"
|
|
14
16
|
],
|
|
15
|
-
"mappings": "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
|
|
16
|
-
"debugId": "
|
|
17
|
+
"mappings": "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",
|
|
18
|
+
"debugId": "3CCC29CAAC2626B164756E2164756E21",
|
|
17
19
|
"names": []
|
|
18
20
|
}
|