@aigne/afs-workspace 1.11.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +26 -0
- package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.cjs +11 -0
- package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs +10 -0
- package/dist/config.cjs +70 -0
- package/dist/config.d.cts +9 -0
- package/dist/config.d.cts.map +1 -0
- package/dist/config.d.mts +9 -0
- package/dist/config.d.mts.map +1 -0
- package/dist/config.mjs +68 -0
- package/dist/config.mjs.map +1 -0
- package/dist/index.cjs +579 -0
- package/dist/index.d.cts +104 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +104 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +578 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport {\n AFS,\n type AFSAccessMode,\n type AFSDeleteOptions,\n type AFSDeleteResult,\n type AFSEntry,\n AFSError,\n type AFSExplainOptions,\n type AFSExplainResult,\n type AFSListOptions,\n type AFSListResult,\n AFSNotFoundError,\n type AFSReadOptions,\n type AFSSearchOptions,\n type AFSSearchResult,\n type AFSStatResult,\n type AFSWriteEntryPayload,\n type AFSWriteOptions,\n type AFSWriteResult,\n type CapabilitiesManifest,\n} from \"@aigne/afs\";\nimport {\n Actions,\n AFSBaseProvider,\n Delete,\n Exec,\n Explain,\n List,\n Meta,\n Read,\n type RouteContext,\n Search,\n Stat,\n Write,\n} from \"@aigne/afs/provider\";\nimport { type MountConfig, type ProviderRegistry, parseURI } from \"@aigne/afs-provider-registry\";\nimport { joinURL } from \"ufo\";\nimport { getConfigPath, loadConfig, type WorkspaceConfig } from \"./config.js\";\n\nexport interface AFSWorkspaceOptions {\n /** Absolute or relative path to the workspace directory */\n workspacePath: string;\n /** Provider name (used as mount name) */\n name?: string;\n /** Human-readable description */\n description?: string;\n /** Access mode for the workspace. When readonly, all sub-providers are forced readonly. */\n accessMode?: AFSAccessMode;\n /** Provider registry for creating sub-providers (injected to break circular dependency) */\n registry: ProviderRegistry;\n}\n\nexport type { WorkspaceConfig } from \"./config.js\";\n\ninterface MountStatus {\n path: string;\n uri: string;\n status: \"ok\" | \"failed\";\n error?: string;\n}\n\nexport class AFSWorkspace extends AFSBaseProvider {\n override readonly name: string;\n override readonly description?: string;\n override readonly accessMode: AFSAccessMode;\n\n private readonly workspacePath: string;\n private readonly registry: ProviderRegistry;\n private innerAFS: AFS;\n private mountStatuses: MountStatus[] = [];\n private initialized = false;\n private initPromise: Promise<void> | undefined;\n\n constructor(options: AFSWorkspaceOptions) {\n super();\n this.workspacePath = resolve(options.workspacePath);\n this.registry = options.registry;\n this.name = options.name ?? \"workspace\";\n this.description = options.description ?? `Workspace: ${this.workspacePath}`;\n this.accessMode = options.accessMode ?? \"readwrite\";\n this.innerAFS = new AFS();\n this.innerAFS.name = `${this.name}-inner`;\n }\n\n /** Get resolved workspace path */\n getWorkspacePath(): string {\n return this.workspacePath;\n }\n\n /**\n * Resolve relative paths in local-scheme URIs against the workspace directory.\n * For example, `sqlite://./sqlite/test.db` becomes `sqlite:///absolute/workspace/path/sqlite/test.db`.\n * Non-local schemes and absolute paths are returned unchanged.\n */\n private resolveURI(uri: string): string {\n const LOCAL_SCHEMES = [\"fs\", \"sqlite\", \"json\", \"toml\", \"git\"];\n let parsed: ReturnType<typeof parseURI>;\n try {\n parsed = parseURI(uri);\n } catch {\n return uri;\n }\n if (!LOCAL_SCHEMES.includes(parsed.scheme)) return uri;\n if (parsed.path.startsWith(\"/\")) return uri;\n const absolutePath = resolve(this.workspacePath, parsed.path);\n const queryIndex = uri.indexOf(\"?\");\n const query = queryIndex >= 0 ? uri.slice(queryIndex) : \"\";\n return `${parsed.scheme}://${absolutePath}${query}`;\n }\n\n /** Initialize workspace: load config, mount sub-providers */\n private async initialize(): Promise<void> {\n if (this.initialized) return;\n if (this.initPromise) return this.initPromise;\n\n this.initPromise = this._doInitialize();\n await this.initPromise;\n }\n\n private async _doInitialize(): Promise<void> {\n const config = await loadConfig(this.workspacePath);\n await this.mountSubProviders(config);\n this.initialized = true;\n }\n\n private async ensureInitialized(): Promise<void> {\n if (!this.initialized) {\n await this.initialize();\n }\n }\n\n /** Mount sub-providers from workspace config using tolerant-parallel-mount */\n private async mountSubProviders(config: WorkspaceConfig): Promise<void> {\n if (config.mounts.length === 0) {\n return;\n }\n\n // Check for nested workspace URIs (not supported in MVP)\n const validMounts: MountConfig[] = [];\n for (const mount of config.mounts) {\n const parsed = parseURI(mount.uri);\n if (parsed.scheme === \"workspace\") {\n this.mountStatuses.push({\n path: mount.path,\n uri: mount.uri,\n status: \"failed\",\n error: \"Nested workspace is not supported\",\n });\n continue;\n }\n validMounts.push(mount);\n }\n\n // Create providers in parallel (tolerant-parallel-mount)\n const results = await Promise.allSettled(\n validMounts.map(async (mount) => {\n // Resolve relative paths in local URIs against workspace directory\n // Propagate readonly: if workspace is readonly, force sub-providers readonly\n const effectiveMount = { ...mount, uri: this.resolveURI(mount.uri) };\n if (this.accessMode === \"readonly\") {\n effectiveMount.access_mode = \"readonly\";\n }\n\n const provider = await this.registry.createProvider(effectiveMount);\n return { mount, provider };\n }),\n );\n\n let successCount = 0;\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i]!;\n const mount = validMounts[i]!;\n if (result.status === \"fulfilled\") {\n const { provider } = result.value;\n try {\n await this.innerAFS.mount(provider, mount.path);\n this.mountStatuses.push({\n path: mount.path,\n uri: mount.uri,\n status: \"ok\",\n });\n successCount++;\n } catch (err) {\n this.mountStatuses.push({\n path: mount.path,\n uri: mount.uri,\n status: \"failed\",\n error: err instanceof Error ? err.message : String(err),\n });\n }\n } else {\n // Provider creation failed\n const reason = result.reason;\n this.mountStatuses.push({\n path: mount.path,\n uri: mount.uri,\n status: \"failed\",\n error: reason instanceof Error ? reason.message : String(reason),\n });\n }\n }\n\n // If all mounts failed and there were mounts to process, throw error\n if (successCount === 0 && validMounts.length > 0) {\n throw new Error(\n `Workspace '${this.name}': all ${validMounts.length} sub-mounts failed to load`,\n );\n }\n }\n\n // ========== Workspace-specific Handlers (high specificity) ==========\n\n @Stat(\"/\")\n async statRoot(_ctx: RouteContext): Promise<AFSStatResult> {\n await this.ensureInitialized();\n const mountCount = this.mountStatuses.filter((s) => s.status === \"ok\").length;\n return {\n data: {\n id: \"/\",\n path: \"/\",\n meta: {\n kind: \"workspace\",\n kinds: [\"workspace\", \"afs:node\"],\n childrenCount: mountCount,\n },\n },\n };\n }\n\n @Read(\"/\")\n async readRoot(_ctx: RouteContext): Promise<AFSEntry> {\n await this.ensureInitialized();\n const okMounts = this.mountStatuses.filter((s) => s.status === \"ok\").length;\n return {\n id: \"/\",\n path: \"/\",\n content: {\n type: \"workspace\",\n name: this.name,\n description: this.description,\n mountCount: okMounts,\n },\n meta: {\n kind: \"workspace\",\n kinds: [\"workspace\", \"afs:node\"],\n childrenCount: okMounts,\n },\n };\n }\n\n @List(\"/\")\n async listRoot(_ctx: RouteContext): Promise<AFSListResult> {\n await this.ensureInitialized();\n const result = await this.innerAFS.list(\"/\");\n // Ensure all entries have meta.kind for conformance\n for (const entry of result.data) {\n if (entry.meta && !entry.meta.kind) {\n entry.meta.kind = \"afs:directory\";\n }\n }\n return result;\n }\n\n @Meta(\"/\")\n async readRootMeta(_ctx: RouteContext): Promise<AFSEntry> {\n await this.ensureInitialized();\n const okMounts = this.mountStatuses.filter((s) => s.status === \"ok\").length;\n return {\n id: \"/.meta\",\n path: \"/.meta\",\n content: {\n type: \"workspace\",\n storagePath: this.workspacePath,\n mountCount: this.mountStatuses.length,\n mounts: this.mountStatuses.map((s) => ({\n path: s.path,\n uri: s.uri,\n status: s.status,\n })),\n },\n meta: {\n kind: \"workspace\",\n childrenCount: okMounts,\n },\n };\n }\n\n @Read(\"/.meta/.capabilities\")\n async readCapabilities(_ctx: RouteContext): Promise<AFSEntry> {\n await this.ensureInitialized();\n const manifest: CapabilitiesManifest = {\n schemaVersion: 1,\n provider: this.name,\n description: this.description ?? `Workspace: ${this.workspacePath}`,\n tools: [],\n actions: [],\n operations: this.getOperationsDeclaration(),\n };\n return {\n id: \"/.meta/.capabilities\",\n path: \"/.meta/.capabilities\",\n content: manifest,\n meta: { kind: \"afs:capabilities\" },\n };\n }\n\n @Explain(\"/\")\n async explainRoot(_ctx: RouteContext): Promise<AFSExplainResult> {\n await this.ensureInitialized();\n const lines: string[] = [];\n lines.push(`# Workspace: ${this.name}`);\n lines.push(\"\");\n if (this.description) {\n lines.push(this.description);\n lines.push(\"\");\n }\n lines.push(\"## Mounts\");\n lines.push(\"\");\n if (this.mountStatuses.length === 0) {\n lines.push(\"No mounts configured.\");\n } else {\n for (const s of this.mountStatuses) {\n const statusIcon = s.status === \"ok\" ? \"[ok]\" : \"[FAILED]\";\n lines.push(`- ${statusIcon} \\`${s.path}\\` -> \\`${s.uri}\\``);\n if (s.error) {\n lines.push(` Error: ${s.error}`);\n }\n }\n }\n lines.push(\"\");\n lines.push(\"## Configuration\");\n lines.push(\"\");\n lines.push(`- **Storage Path**: ${this.workspacePath}`);\n lines.push(`- **Config File**: ${getConfigPath(this.workspacePath)}`);\n lines.push(`- **Access Mode**: ${this.accessMode}`);\n lines.push(`- **Total Mounts**: ${this.mountStatuses.length}`);\n lines.push(\n `- **Active Mounts**: ${this.mountStatuses.filter((s) => s.status === \"ok\").length}`,\n );\n\n return { format: \"markdown\", content: lines.join(\"\\n\") };\n }\n\n @Search(\"/\")\n async searchRoot(ctx: RouteContext, query: string): Promise<AFSSearchResult> {\n await this.ensureInitialized();\n const options = ctx.options as AFSSearchOptions;\n const result = await this.innerAFS.search(\"/\", query, options);\n // Enforce limit at workspace level (innerAFS aggregates across sub-providers)\n if (options?.limit && result.data.length > options.limit) {\n result.data = result.data.slice(0, options.limit);\n }\n return result;\n }\n\n // ========== Actions ==========\n\n @Actions(\"/\")\n async listRootActions(_ctx: RouteContext): Promise<AFSListResult> {\n return {\n data: [\n {\n id: \"/.actions/add\",\n path: \"/.actions/add\",\n summary: \"Add a new mount to the workspace\",\n meta: {\n kind: \"afs:executable\",\n kinds: [\"afs:executable\", \"afs:node\"],\n name: \"add\",\n description: \"Add a new sub-provider mount to this workspace\",\n inputSchema: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Mount path (must start with /)\" },\n uri: {\n type: \"string\",\n description: \"Provider URI (e.g. fs:///path, sqlite:///db)\",\n },\n description: { type: \"string\", description: \"Optional mount description\" },\n access_mode: { type: \"string\", description: \"readonly or readwrite\" },\n options: { type: \"object\", description: \"Provider-specific options\" },\n },\n required: [\"path\", \"uri\"],\n },\n },\n },\n {\n id: \"/.actions/remove\",\n path: \"/.actions/remove\",\n summary: \"Remove a mount from the workspace\",\n meta: {\n kind: \"afs:executable\",\n kinds: [\"afs:executable\", \"afs:node\"],\n name: \"remove\",\n description: \"Remove a sub-provider mount from this workspace\",\n inputSchema: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Mount path to remove\" },\n keepData: { type: \"boolean\", description: \"Keep local data (default: false)\" },\n },\n required: [\"path\"],\n },\n },\n },\n ],\n };\n }\n\n @Actions.Exec(\"/\", \"add\")\n async handleAdd(\n _ctx: RouteContext,\n args: Record<string, unknown>,\n ): Promise<{\n success: boolean;\n data?: Record<string, unknown>;\n error?: { code: string; message: string };\n }> {\n await this.ensureInitialized();\n\n const path = args.path as string | undefined;\n const uri = args.uri as string | undefined;\n\n if (!path) {\n return {\n success: false,\n error: { code: \"VALIDATION_ERROR\", message: \"Missing required parameter: path\" },\n };\n }\n if (!uri) {\n return {\n success: false,\n error: { code: \"VALIDATION_ERROR\", message: \"Missing required parameter: uri\" },\n };\n }\n\n // Validate path format\n if (!path.startsWith(\"/\")) {\n return {\n success: false,\n error: { code: \"VALIDATION_ERROR\", message: \"Path must start with /\" },\n };\n }\n\n // Check for nested workspace (MVP doesn't support it)\n try {\n const parsed = parseURI(uri);\n if (parsed.scheme === \"workspace\") {\n return {\n success: false,\n error: { code: \"UNSUPPORTED\", message: \"Nested workspace is not supported\" },\n };\n }\n } catch (err) {\n return {\n success: false,\n error: { code: \"INVALID_URI\", message: err instanceof Error ? err.message : String(err) },\n };\n }\n\n // Resolve relative URI paths against workspace directory for provider creation\n const resolvedUri = this.resolveURI(uri);\n\n // Build mount config with resolved URI for provider creation\n const mountConfig: MountConfig = {\n path,\n uri: resolvedUri,\n description: args.description as string | undefined,\n access_mode:\n this.accessMode === \"readonly\"\n ? \"readonly\"\n : (args.access_mode as AFSAccessMode | undefined),\n options: args.options as Record<string, unknown> | undefined,\n autoInit: true, // Always autoInit for add action\n };\n\n try {\n // Create provider\n const provider = await this.registry.createProvider(mountConfig);\n\n // Mount into innerAFS (handles conflict detection)\n await this.innerAFS.mount(provider, path);\n\n // Update mount statuses\n this.mountStatuses.push({ path, uri, status: \"ok\" });\n\n // Save to config file with original (possibly relative) URI to keep config portable\n const { addMountToConfig } = await import(\"./config.js\");\n // Save without autoInit in the config (it's a runtime option)\n await addMountToConfig(this.workspacePath, {\n path,\n uri,\n description: mountConfig.description,\n access_mode: mountConfig.access_mode,\n options: mountConfig.options,\n });\n\n return { success: true, data: { path, uri, message: `Mount '${path}' added successfully` } };\n } catch (err) {\n return {\n success: false,\n error: {\n code: \"ADD_FAILED\",\n message: err instanceof Error ? err.message : String(err),\n },\n };\n }\n }\n\n @Actions.Exec(\"/\", \"remove\")\n async handleRemove(\n _ctx: RouteContext,\n args: Record<string, unknown>,\n ): Promise<{\n success: boolean;\n data?: Record<string, unknown>;\n error?: { code: string; message: string };\n }> {\n await this.ensureInitialized();\n\n const path = args.path as string | undefined;\n const keepData = args.keepData === true;\n\n if (!path) {\n return {\n success: false,\n error: { code: \"VALIDATION_ERROR\", message: \"Missing required parameter: path\" },\n };\n }\n\n // Find the mount status\n const mountIndex = this.mountStatuses.findIndex((s) => s.path === path);\n if (mountIndex === -1) {\n return {\n success: false,\n error: { code: \"NOT_FOUND\", message: `Mount '${path}' not found in workspace` },\n };\n }\n\n try {\n // Unmount from innerAFS\n this.innerAFS.unmount(path);\n\n // Remove from config file\n const { removeMountFromConfig } = await import(\"./config.js\");\n const { removed } = await removeMountFromConfig(this.workspacePath, path);\n\n // Remove from mount statuses\n this.mountStatuses.splice(mountIndex, 1);\n\n // Delete data if keepData is false and URI is local\n if (!keepData && removed) {\n await this.deleteLocalData(removed.uri);\n }\n\n return { success: true, data: { path, message: `Mount '${path}' removed successfully` } };\n } catch (err) {\n return {\n success: false,\n error: {\n code: \"REMOVE_FAILED\",\n message: err instanceof Error ? err.message : String(err),\n },\n };\n }\n }\n\n /** Delete local data for a URI. Only deletes for local providers. */\n private async deleteLocalData(uri: string): Promise<void> {\n try {\n const parsed = parseURI(uri);\n // Only delete local data\n const localSchemes = [\"fs\", \"json\", \"toml\", \"sqlite\", \"git\"];\n if (!localSchemes.includes(parsed.scheme)) {\n return; // Remote URI, skip data deletion\n }\n\n const localPath = resolve(this.workspacePath, parsed.path);\n\n // Security: ensure path is within workspace directory\n if (!localPath.startsWith(this.workspacePath)) {\n return; // Path traversal attempt, skip\n }\n\n const { rm } = await import(\"node:fs/promises\");\n const { existsSync } = await import(\"node:fs\");\n if (existsSync(localPath)) {\n await rm(localPath, { recursive: true, force: true });\n }\n } catch {\n // Data deletion is best-effort; failure is logged but not fatal\n }\n }\n\n // ========== Delegation Helpers ==========\n\n /** Check if a path falls under any active mount */\n private isPathUnderMount(path: string): boolean {\n return this.mountStatuses.some(\n (s) => s.status === \"ok\" && (path === s.path || path.startsWith(joinURL(s.path, \"/\"))),\n );\n }\n\n /** Ensure a path is under an active mount, or throw AFSNotFoundError */\n private ensurePathUnderMount(path: string): void {\n if (!this.isPathUnderMount(path)) {\n throw new AFSNotFoundError(path);\n }\n }\n\n /** Re-throw errors from innerAFS delegation. AFS errors pass through; others are wrapped preserving the message */\n private rethrowAsNotFound(path: string, err: unknown): never {\n if (err instanceof AFSError) throw err;\n const message = err instanceof Error ? err.message : String(err);\n throw new AFSError(`Error at ${path}: ${message}`, \"AFS_INTERNAL_ERROR\");\n }\n\n // ========== Catch-all Delegation Handlers (low specificity via /:path*) ==========\n // The router's specificity ordering ensures workspace-specific routes above\n // always match first. These wildcards delegate everything else to innerAFS.\n\n @Stat(\"/:path+\")\n async statDelegate(ctx: RouteContext<{ path: string }>): Promise<AFSStatResult> {\n await this.ensureInitialized();\n const fullPath = joinURL(\"/\", ctx.params.path);\n this.ensurePathUnderMount(fullPath);\n try {\n const result = await this.innerAFS.stat(fullPath);\n // Rewrite path to include mount prefix (innerAFS returns provider-relative paths)\n if (result.data) {\n result.data.path = fullPath;\n }\n return result;\n } catch (err) {\n this.rethrowAsNotFound(fullPath, err);\n }\n }\n\n @List(\"/:path+\", { handleDepth: true })\n async listDelegate(ctx: RouteContext<{ path: string }>): Promise<AFSListResult> {\n await this.ensureInitialized();\n const fullPath = joinURL(\"/\", ctx.params.path);\n this.ensurePathUnderMount(fullPath);\n try {\n return await this.innerAFS.list(fullPath, ctx.options as AFSListOptions);\n } catch (err) {\n this.rethrowAsNotFound(fullPath, err);\n }\n }\n\n @Read(\"/:path+\")\n async readDelegate(ctx: RouteContext<{ path: string }>): Promise<AFSEntry | undefined> {\n await this.ensureInitialized();\n const fullPath = joinURL(\"/\", ctx.params.path);\n this.ensurePathUnderMount(fullPath);\n try {\n const result = await this.innerAFS.read(fullPath, ctx.options as AFSReadOptions);\n if (!result.data) {\n throw new AFSNotFoundError(fullPath);\n }\n return result.data;\n } catch (err) {\n this.rethrowAsNotFound(fullPath, err);\n }\n }\n\n @Write(\"/:path+\")\n async writeDelegate(\n ctx: RouteContext<{ path: string }>,\n content: AFSWriteEntryPayload,\n ): Promise<AFSWriteResult> {\n await this.ensureInitialized();\n const fullPath = joinURL(\"/\", ctx.params.path);\n this.ensurePathUnderMount(fullPath);\n try {\n return await this.innerAFS.write(fullPath, content, ctx.options as AFSWriteOptions);\n } catch (err) {\n this.rethrowAsNotFound(fullPath, err);\n }\n }\n\n @Delete(\"/:path+\")\n async deleteDelegate(ctx: RouteContext<{ path: string }>): Promise<AFSDeleteResult> {\n await this.ensureInitialized();\n const fullPath = joinURL(\"/\", ctx.params.path);\n this.ensurePathUnderMount(fullPath);\n try {\n return await this.innerAFS.delete(fullPath, ctx.options as AFSDeleteOptions);\n } catch (err) {\n this.rethrowAsNotFound(fullPath, err);\n }\n }\n\n @Exec(\"/:path+\")\n async execDelegate(ctx: RouteContext<{ path: string }>, args: Record<string, unknown>) {\n await this.ensureInitialized();\n const fullPath = joinURL(\"/\", ctx.params.path);\n this.ensurePathUnderMount(fullPath);\n try {\n return await this.innerAFS.exec(fullPath, args, ctx.options ?? {});\n } catch (err) {\n this.rethrowAsNotFound(fullPath, err);\n }\n }\n\n @Search(\"/:path+\")\n async searchDelegate(\n ctx: RouteContext<{ path: string }>,\n query: string,\n options?: AFSSearchOptions,\n ): Promise<AFSSearchResult> {\n await this.ensureInitialized();\n const fullPath = joinURL(\"/\", ctx.params.path);\n this.ensurePathUnderMount(fullPath);\n try {\n return await this.innerAFS.search(fullPath, query, options);\n } catch (err) {\n this.rethrowAsNotFound(fullPath, err);\n }\n }\n\n @Explain(\"/:path+\")\n async explainDelegate(ctx: RouteContext<{ path: string }>): Promise<AFSExplainResult> {\n await this.ensureInitialized();\n const fullPath = joinURL(\"/\", ctx.params.path);\n this.ensurePathUnderMount(fullPath);\n try {\n return await this.innerAFS.explain(fullPath, ctx.options as AFSExplainOptions);\n } catch (err) {\n this.rethrowAsNotFound(fullPath, err);\n }\n }\n}\n\nexport default AFSWorkspace;\n"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aigne/afs-workspace",
|
|
3
|
+
"version": "1.11.0-beta.7",
|
|
4
|
+
"description": "AIGNE AFS workspace provider - container provider managing multiple sub-providers",
|
|
5
|
+
"license": "UNLICENSED",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"author": "Arcblock <blocklet@arcblock.io> https://github.com/arcblock",
|
|
10
|
+
"homepage": "https://github.com/arcblock/afs",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "git+https://github.com/arcblock/afs"
|
|
14
|
+
},
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/arcblock/afs/issues"
|
|
17
|
+
},
|
|
18
|
+
"type": "module",
|
|
19
|
+
"main": "./dist/index.cjs",
|
|
20
|
+
"module": "./dist/index.mjs",
|
|
21
|
+
"types": "./dist/index.d.cts",
|
|
22
|
+
"exports": {
|
|
23
|
+
".": {
|
|
24
|
+
"require": "./dist/index.cjs",
|
|
25
|
+
"import": "./dist/index.mjs"
|
|
26
|
+
},
|
|
27
|
+
"./*": "./*"
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"dist",
|
|
31
|
+
"LICENSE",
|
|
32
|
+
"README.md",
|
|
33
|
+
"CHANGELOG.md"
|
|
34
|
+
],
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"smol-toml": "^1.4.1",
|
|
37
|
+
"ufo": "^1.6.3",
|
|
38
|
+
"@aigne/afs": "^1.11.0-beta.7",
|
|
39
|
+
"@aigne/afs-provider-registry": "^1.11.0-beta.7"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/bun": "^1.3.6",
|
|
43
|
+
"npm-run-all": "^4.1.5",
|
|
44
|
+
"rimraf": "^6.1.2",
|
|
45
|
+
"tsdown": "0.20.0-beta.3",
|
|
46
|
+
"typescript": "5.9.2",
|
|
47
|
+
"@aigne/afs-testing": "^1.11.0-beta.7",
|
|
48
|
+
"@aigne/typescript-config": "0.0.0"
|
|
49
|
+
},
|
|
50
|
+
"scripts": {
|
|
51
|
+
"build": "tsdown",
|
|
52
|
+
"check-types": "tsc --noEmit",
|
|
53
|
+
"clean": "rimraf dist coverage",
|
|
54
|
+
"test": "bun test",
|
|
55
|
+
"test:coverage": "bun test --coverage --coverage-reporter=lcov --coverage-reporter=text"
|
|
56
|
+
}
|
|
57
|
+
}
|