@undefineds.co/xpod 0.3.22 → 0.3.23

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.
@@ -1 +1 @@
1
- {"version":3,"file":"LocalSolidFS.js","sourceRoot":"","sources":["../../src/solidfs/LocalSolidFS.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { createReadStream } from 'node:fs';\nimport {\n cp,\n mkdir,\n mkdtemp,\n readdir,\n rm,\n stat,\n} from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nimport {\n MaterializedWorkspace,\n SolidFS,\n SolidFsChange,\n SolidFsConflict,\n SolidFsConflictError,\n SolidFsEntrySource,\n SolidFsHydrator,\n SolidFsManifest,\n SolidFsManifestEntry,\n SolidFsPrepareInput,\n SolidFsPruneOptions,\n SolidFsProjection,\n SolidFsSyncer,\n} from './types';\nimport {\n isLineAddressableRdfPath as isRdfPath,\n rdfContentTypeForPath,\n} from '../storage/rdf/RdfContentTypes';\n\ninterface FileSnapshot {\n relativePath: string;\n absolutePath: string;\n version: string;\n}\n\nexport interface LocalSolidFSOptions {\n workRoot?: string;\n syncer?: SolidFsSyncer;\n hydrator?: SolidFsHydrator;\n}\n\nexport class LocalSolidFS implements SolidFS {\n private readonly workRoot: string;\n private readonly syncer?: SolidFsSyncer;\n private readonly hydrator?: SolidFsHydrator;\n\n public constructor(options: LocalSolidFSOptions = {}) {\n this.workRoot = options.workRoot ?? path.join(os.tmpdir(), 'xpod-solidfs');\n this.syncer = options.syncer;\n this.hydrator = options.hydrator;\n }\n\n public async prepare(input: SolidFsPrepareInput): Promise<MaterializedWorkspace> {\n const sourceRoot = input.sourcePath\n ? path.resolve(input.sourcePath)\n : this.resolveWorkspacePath(input.workspace);\n const projection = input.projection ?? 'direct';\n\n await this.assertSourceDirectory(sourceRoot);\n\n if (projection === 'direct') {\n const trackChanges = this.syncer?.shouldTrack?.(input) ?? Boolean(this.syncer);\n const syncer = this.syncer;\n const changeFilter = trackChanges\n ? syncer?.shouldTrackPath\n ? (relativePath: string): boolean => syncer.shouldTrackPath!(relativePath)\n : isLineAddressableRdfPath\n : undefined;\n const entries = changeFilter ? await snapshotDirectory(sourceRoot, changeFilter) : [];\n return new LocalMaterializedWorkspace({\n sourceRoot,\n cwd: sourceRoot,\n projection,\n cleanupOnRollback: false,\n manifest: this.createManifest(input.workspace, sourceRoot, projection, entries),\n changeFilter,\n context: input.context,\n syncer: this.syncer,\n hydrator: this.hydrator,\n });\n }\n\n if (projection === 'hydrated-object') {\n const cwd = await this.createHydratedWorkdir(sourceRoot, input.run?.id);\n return new LocalMaterializedWorkspace({\n sourceRoot,\n cwd,\n projection,\n cleanupOnRollback: true,\n manifest: this.createManifest(input.workspace, cwd, projection, []),\n context: input.context,\n hydrator: this.hydrator,\n });\n }\n\n if (projection !== 'copy') {\n throw new Error(`LocalSolidFS does not support projection '${projection}' yet.`);\n }\n\n const cwd = await this.createCopyWorkdir(sourceRoot, input.run?.id);\n const entries = await snapshotDirectory(sourceRoot);\n await cp(sourceRoot, cwd, {\n recursive: true,\n force: true,\n errorOnExist: false,\n dereference: false,\n });\n\n return new LocalMaterializedWorkspace({\n sourceRoot,\n cwd,\n projection,\n cleanupOnRollback: true,\n manifest: this.createManifest(input.workspace, cwd, projection, entries),\n context: input.context,\n syncer: this.syncer,\n hydrator: this.hydrator,\n });\n }\n\n private resolveWorkspacePath(workspace: string): string {\n if (workspace.startsWith('file://')) {\n const url = new URL(workspace);\n const pathname = decodeURIComponent(url.pathname);\n if (process.platform === 'win32' && /^\\/[A-Za-z]:/.test(pathname)) {\n return pathname.slice(1);\n }\n return pathname;\n }\n\n if (path.isAbsolute(workspace)) {\n return workspace;\n }\n\n throw new Error(`Unsupported workspace '${workspace}'. LocalSolidFS expects file:// or absolute paths.`);\n }\n\n private async createCopyWorkdir(sourceRoot: string, runId?: string): Promise<string> {\n const safeRun = (runId ?? 'run').replace(/[^a-zA-Z0-9._-]+/gu, '_');\n const prefix = path.join(this.workRoot, `${safeRun}-`);\n await mkdir(this.workRoot, { recursive: true });\n const cwd = await mkdtemp(prefix);\n\n const sourceName = path.basename(sourceRoot.replace(/[\\\\/]+$/u, '')) || 'workspace';\n return path.join(cwd, sourceName);\n }\n\n private async createHydratedWorkdir(sourceRoot: string, runId?: string): Promise<string> {\n const safeRun = (runId ?? 'run').replace(/[^a-zA-Z0-9._-]+/gu, '_');\n await mkdir(this.workRoot, { recursive: true });\n const cwd = await mkdtemp(path.join(this.workRoot, `${safeRun}-hydrated-`));\n const workspaceDir = path.join(cwd, path.basename(sourceRoot.replace(/[\\\\/]+$/u, '')) || 'workspace');\n await mkdir(workspaceDir, { recursive: true });\n return workspaceDir;\n }\n\n private createManifest(\n workspace: string,\n cwd: string,\n projection: SolidFsProjection,\n snapshots: FileSnapshot[],\n ): SolidFsManifest {\n const source = sourceForProjection(projection, workspace);\n return {\n workspace,\n cwd,\n projection,\n entries: snapshots.map((snapshot): SolidFsManifestEntry => ({\n path: snapshot.relativePath,\n resource: resolveWorkspaceResource(workspace, snapshot.relativePath),\n source,\n sourcePath: snapshot.absolutePath,\n projection,\n sourceVersion: snapshot.version,\n workingVersion: snapshot.version,\n state: 'clean',\n })),\n };\n }\n\n private async assertSourceDirectory(sourceRoot: string): Promise<void> {\n let sourceStat;\n try {\n sourceStat = await stat(sourceRoot);\n } catch (error: any) {\n if (error?.code === 'ENOENT' || error?.code === 'ENOTDIR') {\n throw new Error(`SolidFS workspace does not exist: ${sourceRoot}`);\n }\n throw error;\n }\n\n if (!sourceStat.isDirectory()) {\n throw new Error(`SolidFS workspace is not a directory: ${sourceRoot}`);\n }\n }\n\n}\n\ninterface LocalMaterializedWorkspaceOptions {\n sourceRoot: string;\n cwd: string;\n projection: SolidFsProjection;\n cleanupOnRollback: boolean;\n manifest: SolidFsManifest;\n changeFilter?: (relativePath: string) => boolean;\n context?: unknown;\n syncer?: SolidFsSyncer;\n hydrator?: SolidFsHydrator;\n}\n\nclass LocalMaterializedWorkspace implements MaterializedWorkspace {\n public readonly cwd: string;\n public readonly manifest: SolidFsManifest;\n\n private readonly sourceRoot: string;\n private readonly projection: SolidFsProjection;\n private readonly cleanupOnRollback: boolean;\n private readonly changeFilter?: (relativePath: string) => boolean;\n private readonly context?: unknown;\n private readonly syncer?: SolidFsSyncer;\n private readonly hydrator?: SolidFsHydrator;\n private readonly entrySource: SolidFsEntrySource;\n\n public constructor(options: LocalMaterializedWorkspaceOptions) {\n this.sourceRoot = options.sourceRoot;\n this.cwd = options.cwd;\n this.projection = options.projection;\n this.cleanupOnRollback = options.cleanupOnRollback;\n this.manifest = options.manifest;\n this.changeFilter = options.changeFilter;\n this.context = options.context;\n this.syncer = options.syncer;\n this.hydrator = options.hydrator;\n this.entrySource = sourceForProjection(this.projection, this.manifest.workspace);\n }\n\n public async commit(): Promise<SolidFsManifest> {\n if (this.projection === 'hydrated-object') {\n return this.commitHydratedObjects();\n }\n\n const changes = await this.detectChanges();\n this.manifest.changes = changes;\n\n if (this.projection === 'direct') {\n await this.syncChanges(changes);\n this.markCommitted();\n return this.manifest;\n }\n\n if (this.projection !== 'copy') {\n throw new Error(`Commit is not implemented for projection '${this.projection}'.`);\n }\n\n const conflicts = await this.findConflicts();\n if (conflicts.length > 0) {\n for (const entry of this.manifest.entries) {\n if (conflicts.some((conflict) => conflict.path === entry.path)) {\n entry.state = 'conflict';\n }\n }\n throw new SolidFsConflictError(conflicts);\n }\n\n await rm(this.sourceRoot, { recursive: true, force: true });\n await cp(this.cwd, this.sourceRoot, {\n recursive: true,\n force: true,\n errorOnExist: false,\n dereference: false,\n });\n await this.syncChanges(changes);\n this.markCommitted();\n return this.manifest;\n }\n\n public async rollback(): Promise<void> {\n if (this.cleanupOnRollback) {\n await rm(path.dirname(this.cwd), { recursive: true, force: true });\n }\n }\n\n public async hydrate(relativePath: string): Promise<SolidFsManifestEntry> {\n if (this.projection !== 'hydrated-object') {\n throw new Error(`hydrate() is only supported for hydrated-object projection, not '${this.projection}'`);\n }\n if (!this.hydrator) {\n throw new Error('SolidFS hydrated-object projection requires a hydrator');\n }\n\n const normalized = safeRelativePath(relativePath);\n const targetPath = path.join(this.cwd, normalized);\n await mkdir(path.dirname(targetPath), { recursive: true });\n\n const result = await this.hydrator.hydrate({\n path: normalized,\n targetPath,\n workspace: this.manifest,\n context: this.context,\n });\n\n const workingVersion = await fileVersion(targetPath);\n let entry = this.manifest.entries.find((candidate) => candidate.path === normalized);\n if (!entry) {\n entry = {\n path: normalized,\n resource: resolveWorkspaceResource(this.manifest.workspace, normalized),\n source: this.entrySource,\n sourcePath: targetPath,\n contentType: result?.contentType ?? contentTypeForPath(normalized),\n projection: this.projection,\n sourceVersion: result?.sourceVersion,\n workingVersion,\n lastAccessedAt: Date.now(),\n state: 'clean',\n };\n this.manifest.entries.push(entry);\n this.manifest.entries.sort((left, right) => left.path.localeCompare(right.path));\n return entry;\n }\n\n entry.sourcePath = targetPath;\n entry.contentType = result?.contentType ?? entry.contentType ?? contentTypeForPath(normalized);\n entry.sourceVersion = result?.sourceVersion ?? entry.sourceVersion;\n entry.workingVersion = workingVersion;\n entry.lastAccessedAt = Date.now();\n entry.state = 'clean';\n return entry;\n }\n\n public async prune(options: SolidFsPruneOptions = {}): Promise<SolidFsManifest> {\n if (this.projection !== 'hydrated-object') {\n return this.manifest;\n }\n\n const now = options.now ?? Date.now();\n const olderThanMs = options.olderThanMs ?? 0;\n const retained: SolidFsManifestEntry[] = [];\n\n for (const entry of this.manifest.entries) {\n const currentVersion = await maybeFileVersion(entry.sourcePath);\n const dirty = currentVersion !== undefined && currentVersion !== entry.workingVersion;\n if (dirty) {\n entry.state = 'dirty';\n retained.push(entry);\n continue;\n }\n\n const age = now - (entry.lastAccessedAt ?? now);\n if (age >= olderThanMs) {\n await rm(entry.sourcePath, { force: true });\n continue;\n }\n retained.push(entry);\n }\n\n this.manifest.entries = retained;\n return this.manifest;\n }\n\n private async commitHydratedObjects(): Promise<SolidFsManifest> {\n if (!this.hydrator) {\n throw new Error('SolidFS hydrated-object projection requires a hydrator');\n }\n\n const changes = await this.detectHydratedChanges();\n this.manifest.changes = changes;\n\n for (const change of changes) {\n if (change.type === 'deleted' && this.hydrator.delete) {\n await this.hydrator.delete({\n change,\n workspace: this.manifest,\n context: this.context,\n });\n this.manifest.entries = this.manifest.entries.filter((entry) => entry.path !== change.path);\n continue;\n }\n if (change.type !== 'deleted') {\n const result = await this.hydrator.commit({\n change,\n workspace: this.manifest,\n context: this.context,\n });\n const entry = this.manifest.entries.find((candidate) => candidate.path === change.path);\n if (entry) {\n entry.sourceVersion = result?.sourceVersion ?? entry.sourceVersion;\n entry.workingVersion = await fileVersion(entry.sourcePath);\n entry.lastAccessedAt = Date.now();\n }\n }\n }\n\n this.markCommitted();\n return this.manifest;\n }\n\n private async detectHydratedChanges(): Promise<SolidFsChange[]> {\n const changes: SolidFsChange[] = [];\n const tracked = new Set(this.manifest.entries.map((entry) => entry.path));\n for (const entry of this.manifest.entries) {\n const currentVersion = await maybeFileVersion(entry.sourcePath);\n if (currentVersion === undefined) {\n changes.push({\n path: entry.path,\n resource: entry.resource ?? resolveWorkspaceResource(this.manifest.workspace, entry.path),\n source: entry.source,\n sourcePath: entry.sourcePath,\n contentType: entry.contentType,\n projection: this.projection,\n type: 'deleted',\n sourceVersion: entry.sourceVersion,\n });\n entry.state = 'dirty';\n continue;\n }\n if (currentVersion !== entry.workingVersion) {\n changes.push({\n path: entry.path,\n resource: entry.resource ?? resolveWorkspaceResource(this.manifest.workspace, entry.path),\n source: entry.source,\n sourcePath: entry.sourcePath,\n contentType: entry.contentType,\n projection: this.projection,\n type: 'updated',\n sourceVersion: entry.sourceVersion,\n });\n entry.state = 'dirty';\n }\n }\n\n for (const snapshot of await snapshotDirectory(this.cwd)) {\n if (tracked.has(snapshot.relativePath)) {\n continue;\n }\n this.manifest.entries.push({\n path: snapshot.relativePath,\n resource: resolveWorkspaceResource(this.manifest.workspace, snapshot.relativePath),\n source: this.entrySource,\n sourcePath: snapshot.absolutePath,\n contentType: contentTypeForPath(snapshot.relativePath),\n projection: this.projection,\n workingVersion: snapshot.version,\n lastAccessedAt: Date.now(),\n state: 'dirty',\n });\n changes.push({\n path: snapshot.relativePath,\n resource: resolveWorkspaceResource(this.manifest.workspace, snapshot.relativePath),\n source: this.entrySource,\n sourcePath: snapshot.absolutePath,\n contentType: contentTypeForPath(snapshot.relativePath),\n projection: this.projection,\n type: 'created',\n });\n }\n this.manifest.entries.sort((left, right) => left.path.localeCompare(right.path));\n return changes.sort((left, right) => left.path.localeCompare(right.path));\n }\n\n private async findConflicts(): Promise<SolidFsConflict[]> {\n const conflicts: SolidFsConflict[] = [];\n const initialPaths = new Set(this.manifest.entries.map((entry) => entry.path));\n\n for (const entry of this.manifest.entries) {\n if (!entry.sourceVersion) {\n continue;\n }\n const currentVersion = await maybeFileVersion(entry.sourcePath);\n if (currentVersion !== entry.sourceVersion) {\n conflicts.push({\n path: entry.path,\n sourcePath: entry.sourcePath,\n expectedVersion: entry.sourceVersion,\n actualVersion: currentVersion,\n message: 'Source file changed after workspace prepare.',\n });\n }\n }\n\n const currentSourceFiles = await snapshotDirectory(this.sourceRoot);\n for (const current of currentSourceFiles) {\n if (!initialPaths.has(current.relativePath)) {\n conflicts.push({\n path: current.relativePath,\n sourcePath: current.absolutePath,\n actualVersion: current.version,\n message: 'Source file was created after workspace prepare.',\n });\n }\n }\n return conflicts;\n }\n\n private async detectChanges(): Promise<SolidFsChange[]> {\n const before = new Map(this.manifest.entries.map((entry) => [entry.path, entry]));\n if (before.size === 0 && this.projection === 'direct' && !this.changeFilter) {\n return [];\n }\n const after = new Map((await snapshotDirectory(this.cwd, this.changeFilter)).map((snapshot) => [snapshot.relativePath, snapshot]));\n const changes: SolidFsChange[] = [];\n\n for (const [relativePath, snapshot] of after) {\n const entry = before.get(relativePath);\n if (!entry) {\n changes.push(this.createChange(relativePath, snapshot.absolutePath, 'created'));\n continue;\n }\n if (entry.sourceVersion !== snapshot.version) {\n changes.push(this.createChange(relativePath, snapshot.absolutePath, 'updated'));\n }\n }\n\n for (const [relativePath, entry] of before) {\n if (!after.has(relativePath)) {\n changes.push(this.createChange(relativePath, entry.sourcePath, 'deleted'));\n }\n }\n\n return changes.sort((left, right) => left.path.localeCompare(right.path));\n }\n\n private createChange(\n relativePath: string,\n sourcePath: string,\n type: SolidFsChange['type'],\n ): SolidFsChange {\n return {\n path: relativePath,\n resource: resolveWorkspaceResource(this.manifest.workspace, relativePath),\n source: this.entrySource,\n sourcePath,\n contentType: contentTypeForPath(relativePath),\n projection: this.projection,\n type,\n };\n }\n\n private async syncChanges(changes: SolidFsChange[]): Promise<void> {\n if (!this.syncer) {\n return;\n }\n for (const change of changes) {\n await this.syncer.sync(change, this.manifest, this.context);\n }\n }\n\n private markCommitted(): void {\n for (const entry of this.manifest.entries) {\n entry.state = 'committed';\n }\n }\n}\n\nfunction contentTypeForPath(filePath: string): string | undefined {\n const lower = filePath.toLowerCase();\n const rdfContentType = rdfContentTypeForPath(lower);\n if (rdfContentType) {\n return rdfContentType;\n }\n if (lower.endsWith('.md') || lower.endsWith('.markdown') || lower.endsWith('.mdown')) {\n return 'text/markdown';\n }\n if (lower.endsWith('.txt') || lower.endsWith('.log')) {\n return 'text/plain';\n }\n return undefined;\n}\n\nfunction sourceForProjection(projection: SolidFsProjection, workspace: string): SolidFsEntrySource {\n if (projection === 'hydrated-object') {\n return 'object';\n }\n if (/^https?:/u.test(workspace)) {\n return 'pod-http';\n }\n return 'filesystem';\n}\n\nfunction resolveWorkspaceResource(workspace: string, relativePath: string): string | undefined {\n if (path.isAbsolute(workspace)) {\n return pathToFileURL(path.join(workspace, relativePath)).href;\n }\n\n try {\n const base = new URL(workspace.endsWith('/') ? workspace : `${workspace}/`);\n const normalized = relativePath.split(path.sep).join('/');\n return new URL(normalized, base).href;\n } catch {\n return undefined;\n }\n}\n\nfunction isLineAddressableRdfPath(filePath: string): boolean {\n return isRdfPath(filePath);\n}\n\nfunction safeRelativePath(input: string): string {\n const normalized = input.split(/[\\\\/]+/u).filter((part) => part.length > 0).join(path.sep);\n if (!normalized || path.isAbsolute(input) || normalized.split(path.sep).includes('..')) {\n throw new Error(`Invalid SolidFS relative path: ${input}`);\n }\n return normalized;\n}\n\nasync function maybeFileVersion(filePath: string): Promise<string | undefined> {\n try {\n return await fileVersion(filePath);\n } catch {\n return undefined;\n }\n}\n\nasync function fileVersion(filePath: string): Promise<string> {\n const fileStat = await stat(filePath);\n const hash = createHash('sha256');\n await new Promise<void>((resolve, reject) => {\n const stream = createReadStream(filePath);\n stream.on('data', (chunk) => hash.update(chunk));\n stream.on('error', reject);\n stream.on('end', resolve);\n });\n return `${fileStat.size}:${fileStat.mtimeMs}:${hash.digest('hex')}`;\n}\n\nasync function snapshotDirectory(\n root: string,\n filter?: (relativePath: string) => boolean,\n): Promise<FileSnapshot[]> {\n const snapshots: FileSnapshot[] = [];\n\n async function walk(current: string): Promise<void> {\n let entries;\n try {\n entries = await readdir(current, { withFileTypes: true });\n } catch {\n return;\n }\n\n for (const entry of entries) {\n const absolute = path.join(current, entry.name);\n const relative = path.relative(root, absolute);\n if (entry.isDirectory()) {\n await walk(absolute);\n continue;\n }\n if (!entry.isFile()) {\n continue;\n }\n if (filter && !filter(relative)) {\n continue;\n }\n snapshots.push({\n relativePath: relative,\n absolutePath: absolute,\n version: await fileVersion(absolute),\n });\n }\n }\n\n await walk(root);\n return snapshots.sort((left, right) => left.relativePath.localeCompare(right.relativePath));\n}\n"]}
1
+ {"version":3,"file":"LocalSolidFS.js","sourceRoot":"","sources":["../../src/solidfs/LocalSolidFS.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n cp,\n mkdir,\n mkdtemp,\n rm,\n stat,\n} from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport {\n MaterializedWorkspace,\n SolidFS,\n SolidFsChange,\n SolidFsConflict,\n SolidFsConflictError,\n SolidFsEntrySource,\n SolidFsHydrator,\n SolidFsManifest,\n SolidFsManifestEntry,\n SolidFsPrepareInput,\n SolidFsPruneOptions,\n SolidFsProjection,\n SolidFsSyncer,\n} from './types';\nimport {\n isLineAddressableRdfPath as isRdfPath,\n} from '../storage/rdf/RdfContentTypes';\nimport {\n contentTypeForPath,\n fileVersion,\n maybeFileVersion,\n resolveWorkspaceResource,\n safeRelativePath,\n snapshotDirectory,\n SolidFsFileSnapshot,\n sourceForProjection,\n} from './SolidFsPathUtils';\n\nexport interface LocalSolidFSOptions {\n workRoot?: string;\n syncer?: SolidFsSyncer;\n hydrator?: SolidFsHydrator;\n}\n\nexport class LocalSolidFS implements SolidFS {\n private readonly workRoot: string;\n private readonly syncer?: SolidFsSyncer;\n private readonly hydrator?: SolidFsHydrator;\n\n public constructor(options: LocalSolidFSOptions = {}) {\n this.workRoot = options.workRoot ?? path.join(os.tmpdir(), 'xpod-solidfs');\n this.syncer = options.syncer;\n this.hydrator = options.hydrator;\n }\n\n public async prepare(input: SolidFsPrepareInput): Promise<MaterializedWorkspace> {\n const sourceRoot = input.sourcePath\n ? path.resolve(input.sourcePath)\n : this.resolveWorkspacePath(input.workspace);\n const projection = input.projection ?? 'direct';\n\n await this.assertSourceDirectory(sourceRoot);\n\n if (projection === 'direct') {\n const trackChanges = this.syncer?.shouldTrack?.(input) ?? Boolean(this.syncer);\n const syncer = this.syncer;\n const changeFilter = trackChanges\n ? syncer?.shouldTrackPath\n ? (relativePath: string): boolean => syncer.shouldTrackPath!(relativePath)\n : isLineAddressableRdfPath\n : undefined;\n const entries = changeFilter ? await snapshotDirectory(sourceRoot, changeFilter) : [];\n const manifest = this.createManifest(input.workspace, sourceRoot, projection, entries);\n if (trackChanges && syncer?.initializeWorkspace) {\n await syncer.initializeWorkspace(manifest, input.context);\n }\n return new LocalMaterializedWorkspace({\n sourceRoot,\n cwd: sourceRoot,\n projection,\n cleanupOnRollback: false,\n manifest,\n changeFilter,\n context: input.context,\n syncer: this.syncer,\n hydrator: this.hydrator,\n });\n }\n\n if (projection === 'hydrated-object') {\n const cwd = await this.createHydratedWorkdir(sourceRoot, input.run?.id);\n return new LocalMaterializedWorkspace({\n sourceRoot,\n cwd,\n projection,\n cleanupOnRollback: true,\n manifest: this.createManifest(input.workspace, cwd, projection, []),\n context: input.context,\n hydrator: this.hydrator,\n });\n }\n\n if (projection !== 'copy') {\n throw new Error(`LocalSolidFS does not support projection '${projection}' yet.`);\n }\n\n const cwd = await this.createCopyWorkdir(sourceRoot, input.run?.id);\n const entries = await snapshotDirectory(sourceRoot);\n await cp(sourceRoot, cwd, {\n recursive: true,\n force: true,\n errorOnExist: false,\n dereference: false,\n });\n\n return new LocalMaterializedWorkspace({\n sourceRoot,\n cwd,\n projection,\n cleanupOnRollback: true,\n manifest: this.createManifest(input.workspace, cwd, projection, entries),\n context: input.context,\n syncer: this.syncer,\n hydrator: this.hydrator,\n });\n }\n\n private resolveWorkspacePath(workspace: string): string {\n if (workspace.startsWith('file://')) {\n const url = new URL(workspace);\n const pathname = decodeURIComponent(url.pathname);\n if (process.platform === 'win32' && /^\\/[A-Za-z]:/.test(pathname)) {\n return pathname.slice(1);\n }\n return pathname;\n }\n\n if (path.isAbsolute(workspace)) {\n return workspace;\n }\n\n throw new Error(`Unsupported workspace '${workspace}'. LocalSolidFS expects file:// or absolute paths.`);\n }\n\n private async createCopyWorkdir(sourceRoot: string, runId?: string): Promise<string> {\n const safeRun = (runId ?? 'run').replace(/[^a-zA-Z0-9._-]+/gu, '_');\n const prefix = path.join(this.workRoot, `${safeRun}-`);\n await mkdir(this.workRoot, { recursive: true });\n const cwd = await mkdtemp(prefix);\n\n const sourceName = path.basename(sourceRoot.replace(/[\\\\/]+$/u, '')) || 'workspace';\n return path.join(cwd, sourceName);\n }\n\n private async createHydratedWorkdir(sourceRoot: string, runId?: string): Promise<string> {\n const safeRun = (runId ?? 'run').replace(/[^a-zA-Z0-9._-]+/gu, '_');\n await mkdir(this.workRoot, { recursive: true });\n const cwd = await mkdtemp(path.join(this.workRoot, `${safeRun}-hydrated-`));\n const workspaceDir = path.join(cwd, path.basename(sourceRoot.replace(/[\\\\/]+$/u, '')) || 'workspace');\n await mkdir(workspaceDir, { recursive: true });\n return workspaceDir;\n }\n\n private createManifest(\n workspace: string,\n cwd: string,\n projection: SolidFsProjection,\n snapshots: SolidFsFileSnapshot[],\n ): SolidFsManifest {\n const source = sourceForProjection(projection, workspace);\n return {\n workspace,\n cwd,\n projection,\n entries: snapshots.map((snapshot): SolidFsManifestEntry => ({\n path: snapshot.relativePath,\n resource: resolveWorkspaceResource(workspace, snapshot.relativePath),\n source,\n sourcePath: snapshot.absolutePath,\n projection,\n sourceVersion: snapshot.version,\n workingVersion: snapshot.version,\n state: 'clean',\n })),\n };\n }\n\n private async assertSourceDirectory(sourceRoot: string): Promise<void> {\n let sourceStat;\n try {\n sourceStat = await stat(sourceRoot);\n } catch (error: any) {\n if (error?.code === 'ENOENT' || error?.code === 'ENOTDIR') {\n throw new Error(`SolidFS workspace does not exist: ${sourceRoot}`);\n }\n throw error;\n }\n\n if (!sourceStat.isDirectory()) {\n throw new Error(`SolidFS workspace is not a directory: ${sourceRoot}`);\n }\n }\n\n}\n\ninterface LocalMaterializedWorkspaceOptions {\n sourceRoot: string;\n cwd: string;\n projection: SolidFsProjection;\n cleanupOnRollback: boolean;\n manifest: SolidFsManifest;\n changeFilter?: (relativePath: string) => boolean;\n context?: unknown;\n syncer?: SolidFsSyncer;\n hydrator?: SolidFsHydrator;\n}\n\nclass LocalMaterializedWorkspace implements MaterializedWorkspace {\n public readonly cwd: string;\n public readonly manifest: SolidFsManifest;\n\n private readonly sourceRoot: string;\n private readonly projection: SolidFsProjection;\n private readonly cleanupOnRollback: boolean;\n private readonly changeFilter?: (relativePath: string) => boolean;\n private readonly context?: unknown;\n private readonly syncer?: SolidFsSyncer;\n private readonly hydrator?: SolidFsHydrator;\n private readonly entrySource: SolidFsEntrySource;\n\n public constructor(options: LocalMaterializedWorkspaceOptions) {\n this.sourceRoot = options.sourceRoot;\n this.cwd = options.cwd;\n this.projection = options.projection;\n this.cleanupOnRollback = options.cleanupOnRollback;\n this.manifest = options.manifest;\n this.changeFilter = options.changeFilter;\n this.context = options.context;\n this.syncer = options.syncer;\n this.hydrator = options.hydrator;\n this.entrySource = sourceForProjection(this.projection, this.manifest.workspace);\n }\n\n public async commit(): Promise<SolidFsManifest> {\n if (this.projection === 'hydrated-object') {\n return this.commitHydratedObjects();\n }\n\n const changes = await this.detectChanges();\n this.manifest.changes = changes;\n\n if (this.projection === 'direct') {\n await this.syncChanges(changes);\n this.markCommitted();\n return this.manifest;\n }\n\n if (this.projection !== 'copy') {\n throw new Error(`Commit is not implemented for projection '${this.projection}'.`);\n }\n\n const conflicts = await this.findConflicts();\n if (conflicts.length > 0) {\n for (const entry of this.manifest.entries) {\n if (conflicts.some((conflict) => conflict.path === entry.path)) {\n entry.state = 'conflict';\n }\n }\n throw new SolidFsConflictError(conflicts);\n }\n\n await rm(this.sourceRoot, { recursive: true, force: true });\n await cp(this.cwd, this.sourceRoot, {\n recursive: true,\n force: true,\n errorOnExist: false,\n dereference: false,\n });\n await this.syncChanges(changes);\n this.markCommitted();\n return this.manifest;\n }\n\n public async rollback(): Promise<void> {\n if (this.cleanupOnRollback) {\n await rm(path.dirname(this.cwd), { recursive: true, force: true });\n }\n }\n\n public async hydrate(relativePath: string): Promise<SolidFsManifestEntry> {\n if (this.projection !== 'hydrated-object') {\n throw new Error(`hydrate() is only supported for hydrated-object projection, not '${this.projection}'`);\n }\n if (!this.hydrator) {\n throw new Error('SolidFS hydrated-object projection requires a hydrator');\n }\n\n const normalized = safeRelativePath(relativePath);\n const targetPath = path.join(this.cwd, normalized);\n await mkdir(path.dirname(targetPath), { recursive: true });\n\n const result = await this.hydrator.hydrate({\n path: normalized,\n targetPath,\n workspace: this.manifest,\n context: this.context,\n });\n\n const workingVersion = await fileVersion(targetPath);\n let entry = this.manifest.entries.find((candidate) => candidate.path === normalized);\n if (!entry) {\n entry = {\n path: normalized,\n resource: resolveWorkspaceResource(this.manifest.workspace, normalized),\n source: this.entrySource,\n sourcePath: targetPath,\n contentType: result?.contentType ?? contentTypeForPath(normalized),\n projection: this.projection,\n sourceVersion: result?.sourceVersion,\n workingVersion,\n lastAccessedAt: Date.now(),\n state: 'clean',\n };\n this.manifest.entries.push(entry);\n this.manifest.entries.sort((left, right) => left.path.localeCompare(right.path));\n return entry;\n }\n\n entry.sourcePath = targetPath;\n entry.contentType = result?.contentType ?? entry.contentType ?? contentTypeForPath(normalized);\n entry.sourceVersion = result?.sourceVersion ?? entry.sourceVersion;\n entry.workingVersion = workingVersion;\n entry.lastAccessedAt = Date.now();\n entry.state = 'clean';\n return entry;\n }\n\n public async prune(options: SolidFsPruneOptions = {}): Promise<SolidFsManifest> {\n if (this.projection !== 'hydrated-object') {\n return this.manifest;\n }\n\n const now = options.now ?? Date.now();\n const olderThanMs = options.olderThanMs ?? 0;\n const retained: SolidFsManifestEntry[] = [];\n\n for (const entry of this.manifest.entries) {\n const currentVersion = await maybeFileVersion(entry.sourcePath);\n const dirty = currentVersion !== undefined && currentVersion !== entry.workingVersion;\n if (dirty) {\n entry.state = 'dirty';\n retained.push(entry);\n continue;\n }\n\n const age = now - (entry.lastAccessedAt ?? now);\n if (age >= olderThanMs) {\n await rm(entry.sourcePath, { force: true });\n continue;\n }\n retained.push(entry);\n }\n\n this.manifest.entries = retained;\n return this.manifest;\n }\n\n private async commitHydratedObjects(): Promise<SolidFsManifest> {\n if (!this.hydrator) {\n throw new Error('SolidFS hydrated-object projection requires a hydrator');\n }\n\n const changes = await this.detectHydratedChanges();\n this.manifest.changes = changes;\n\n for (const change of changes) {\n if (change.type === 'deleted' && this.hydrator.delete) {\n await this.hydrator.delete({\n change,\n workspace: this.manifest,\n context: this.context,\n });\n this.manifest.entries = this.manifest.entries.filter((entry) => entry.path !== change.path);\n continue;\n }\n if (change.type !== 'deleted') {\n const result = await this.hydrator.commit({\n change,\n workspace: this.manifest,\n context: this.context,\n });\n const entry = this.manifest.entries.find((candidate) => candidate.path === change.path);\n if (entry) {\n entry.sourceVersion = result?.sourceVersion ?? entry.sourceVersion;\n entry.workingVersion = await fileVersion(entry.sourcePath);\n entry.lastAccessedAt = Date.now();\n }\n }\n }\n\n this.markCommitted();\n return this.manifest;\n }\n\n private async detectHydratedChanges(): Promise<SolidFsChange[]> {\n const changes: SolidFsChange[] = [];\n const tracked = new Set(this.manifest.entries.map((entry) => entry.path));\n for (const entry of this.manifest.entries) {\n const currentVersion = await maybeFileVersion(entry.sourcePath);\n if (currentVersion === undefined) {\n changes.push({\n path: entry.path,\n resource: entry.resource ?? resolveWorkspaceResource(this.manifest.workspace, entry.path),\n source: entry.source,\n sourcePath: entry.sourcePath,\n contentType: entry.contentType,\n projection: this.projection,\n type: 'deleted',\n sourceVersion: entry.sourceVersion,\n });\n entry.state = 'dirty';\n continue;\n }\n if (currentVersion !== entry.workingVersion) {\n changes.push({\n path: entry.path,\n resource: entry.resource ?? resolveWorkspaceResource(this.manifest.workspace, entry.path),\n source: entry.source,\n sourcePath: entry.sourcePath,\n contentType: entry.contentType,\n projection: this.projection,\n type: 'updated',\n sourceVersion: entry.sourceVersion,\n });\n entry.state = 'dirty';\n }\n }\n\n for (const snapshot of await snapshotDirectory(this.cwd)) {\n if (tracked.has(snapshot.relativePath)) {\n continue;\n }\n this.manifest.entries.push({\n path: snapshot.relativePath,\n resource: resolveWorkspaceResource(this.manifest.workspace, snapshot.relativePath),\n source: this.entrySource,\n sourcePath: snapshot.absolutePath,\n contentType: contentTypeForPath(snapshot.relativePath),\n projection: this.projection,\n workingVersion: snapshot.version,\n lastAccessedAt: Date.now(),\n state: 'dirty',\n });\n changes.push({\n path: snapshot.relativePath,\n resource: resolveWorkspaceResource(this.manifest.workspace, snapshot.relativePath),\n source: this.entrySource,\n sourcePath: snapshot.absolutePath,\n contentType: contentTypeForPath(snapshot.relativePath),\n projection: this.projection,\n type: 'created',\n });\n }\n this.manifest.entries.sort((left, right) => left.path.localeCompare(right.path));\n return changes.sort((left, right) => left.path.localeCompare(right.path));\n }\n\n private async findConflicts(): Promise<SolidFsConflict[]> {\n const conflicts: SolidFsConflict[] = [];\n const initialPaths = new Set(this.manifest.entries.map((entry) => entry.path));\n\n for (const entry of this.manifest.entries) {\n if (!entry.sourceVersion) {\n continue;\n }\n const currentVersion = await maybeFileVersion(entry.sourcePath);\n if (currentVersion !== entry.sourceVersion) {\n conflicts.push({\n path: entry.path,\n sourcePath: entry.sourcePath,\n expectedVersion: entry.sourceVersion,\n actualVersion: currentVersion,\n message: 'Source file changed after workspace prepare.',\n });\n }\n }\n\n const currentSourceFiles = await snapshotDirectory(this.sourceRoot);\n for (const current of currentSourceFiles) {\n if (!initialPaths.has(current.relativePath)) {\n conflicts.push({\n path: current.relativePath,\n sourcePath: current.absolutePath,\n actualVersion: current.version,\n message: 'Source file was created after workspace prepare.',\n });\n }\n }\n return conflicts;\n }\n\n private async detectChanges(): Promise<SolidFsChange[]> {\n const before = new Map(this.manifest.entries.map((entry) => [entry.path, entry]));\n if (before.size === 0 && this.projection === 'direct' && !this.changeFilter) {\n return [];\n }\n const after = new Map((await snapshotDirectory(this.cwd, this.changeFilter)).map((snapshot) => [snapshot.relativePath, snapshot]));\n const changes: SolidFsChange[] = [];\n\n for (const [relativePath, snapshot] of after) {\n const entry = before.get(relativePath);\n if (!entry) {\n changes.push(this.createChange(relativePath, snapshot.absolutePath, 'created'));\n continue;\n }\n if (entry.sourceVersion !== snapshot.version) {\n changes.push(this.createChange(relativePath, snapshot.absolutePath, 'updated'));\n }\n }\n\n for (const [relativePath, entry] of before) {\n if (!after.has(relativePath)) {\n changes.push(this.createChange(relativePath, entry.sourcePath, 'deleted'));\n }\n }\n\n return changes.sort((left, right) => left.path.localeCompare(right.path));\n }\n\n private createChange(\n relativePath: string,\n sourcePath: string,\n type: SolidFsChange['type'],\n ): SolidFsChange {\n return {\n path: relativePath,\n resource: resolveWorkspaceResource(this.manifest.workspace, relativePath),\n source: this.entrySource,\n sourcePath,\n contentType: contentTypeForPath(relativePath),\n projection: this.projection,\n type,\n };\n }\n\n private async syncChanges(changes: SolidFsChange[]): Promise<void> {\n if (!this.syncer) {\n return;\n }\n for (const change of changes) {\n await this.syncer.sync(change, this.manifest, this.context);\n }\n }\n\n private markCommitted(): void {\n for (const entry of this.manifest.entries) {\n entry.state = 'committed';\n }\n }\n}\n\nfunction isLineAddressableRdfPath(filePath: string): boolean {\n return isRdfPath(filePath);\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import type { SolidFsEntrySource, SolidFsProjection } from './types';
2
+ export interface SolidFsFileSnapshot {
3
+ relativePath: string;
4
+ absolutePath: string;
5
+ version: string;
6
+ }
7
+ export declare function contentTypeForPath(filePath: string): string | undefined;
8
+ export declare function sourceForProjection(projection: SolidFsProjection, workspace: string): SolidFsEntrySource;
9
+ export declare function resolveWorkspaceResource(workspace: string, relativePath: string): string | undefined;
10
+ export declare function safeRelativePath(input: string): string;
11
+ export declare function maybeFileVersion(filePath: string): Promise<string | undefined>;
12
+ export declare function fileVersion(filePath: string): Promise<string>;
13
+ export declare function snapshotDirectory(root: string, filter?: (relativePath: string) => boolean): Promise<SolidFsFileSnapshot[]>;
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.contentTypeForPath = contentTypeForPath;
7
+ exports.sourceForProjection = sourceForProjection;
8
+ exports.resolveWorkspaceResource = resolveWorkspaceResource;
9
+ exports.safeRelativePath = safeRelativePath;
10
+ exports.maybeFileVersion = maybeFileVersion;
11
+ exports.fileVersion = fileVersion;
12
+ exports.snapshotDirectory = snapshotDirectory;
13
+ const node_crypto_1 = require("node:crypto");
14
+ const node_fs_1 = require("node:fs");
15
+ const promises_1 = require("node:fs/promises");
16
+ const node_path_1 = __importDefault(require("node:path"));
17
+ const node_url_1 = require("node:url");
18
+ const RdfContentTypes_1 = require("../storage/rdf/RdfContentTypes");
19
+ function contentTypeForPath(filePath) {
20
+ const lower = filePath.toLowerCase();
21
+ const rdfContentType = (0, RdfContentTypes_1.rdfContentTypeForPath)(lower);
22
+ if (rdfContentType) {
23
+ return rdfContentType;
24
+ }
25
+ if (lower.endsWith('.md') || lower.endsWith('.markdown') || lower.endsWith('.mdown')) {
26
+ return 'text/markdown';
27
+ }
28
+ if (lower.endsWith('.txt') || lower.endsWith('.log')) {
29
+ return 'text/plain';
30
+ }
31
+ return undefined;
32
+ }
33
+ function sourceForProjection(projection, workspace) {
34
+ if (projection === 'hydrated-object') {
35
+ return 'object';
36
+ }
37
+ if (/^https?:/u.test(workspace)) {
38
+ return 'pod-http';
39
+ }
40
+ return 'filesystem';
41
+ }
42
+ function resolveWorkspaceResource(workspace, relativePath) {
43
+ if (node_path_1.default.isAbsolute(workspace)) {
44
+ return (0, node_url_1.pathToFileURL)(node_path_1.default.join(workspace, relativePath)).href;
45
+ }
46
+ try {
47
+ const base = new URL(workspace.endsWith('/') ? workspace : `${workspace}/`);
48
+ const normalized = relativePath.split(node_path_1.default.sep).join('/');
49
+ return new URL(normalized, base).href;
50
+ }
51
+ catch {
52
+ return undefined;
53
+ }
54
+ }
55
+ function safeRelativePath(input) {
56
+ const normalized = input.split(/[\\/]+/u).filter((part) => part.length > 0).join(node_path_1.default.sep);
57
+ if (!normalized || node_path_1.default.isAbsolute(input) || normalized.split(node_path_1.default.sep).includes('..')) {
58
+ throw new Error(`Invalid SolidFS relative path: ${input}`);
59
+ }
60
+ return normalized;
61
+ }
62
+ async function maybeFileVersion(filePath) {
63
+ try {
64
+ return await fileVersion(filePath);
65
+ }
66
+ catch {
67
+ return undefined;
68
+ }
69
+ }
70
+ async function fileVersion(filePath) {
71
+ const fileStat = await (0, promises_1.stat)(filePath);
72
+ const hash = (0, node_crypto_1.createHash)('sha256');
73
+ await new Promise((resolve, reject) => {
74
+ const stream = (0, node_fs_1.createReadStream)(filePath);
75
+ stream.on('data', (chunk) => hash.update(chunk));
76
+ stream.on('error', reject);
77
+ stream.on('end', resolve);
78
+ });
79
+ return `${fileStat.size}:${fileStat.mtimeMs}:${hash.digest('hex')}`;
80
+ }
81
+ async function snapshotDirectory(root, filter) {
82
+ const snapshots = [];
83
+ async function walk(current) {
84
+ let entries;
85
+ try {
86
+ entries = await (0, promises_1.readdir)(current, { withFileTypes: true });
87
+ }
88
+ catch {
89
+ return;
90
+ }
91
+ for (const entry of entries) {
92
+ const absolute = node_path_1.default.join(current, entry.name);
93
+ const relative = node_path_1.default.relative(root, absolute);
94
+ if (entry.isDirectory()) {
95
+ await walk(absolute);
96
+ continue;
97
+ }
98
+ if (!entry.isFile()) {
99
+ continue;
100
+ }
101
+ if (filter && !filter(relative)) {
102
+ continue;
103
+ }
104
+ snapshots.push({
105
+ relativePath: relative,
106
+ absolutePath: absolute,
107
+ version: await fileVersion(absolute),
108
+ });
109
+ }
110
+ }
111
+ await walk(root);
112
+ return snapshots.sort((left, right) => left.relativePath.localeCompare(right.relativePath));
113
+ }
114
+ //# sourceMappingURL=SolidFsPathUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolidFsPathUtils.js","sourceRoot":"","sources":["../../src/solidfs/SolidFsPathUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { createReadStream } from 'node:fs';\nimport {\n readdir,\n stat,\n} from 'node:fs/promises';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nimport type {\n SolidFsEntrySource,\n SolidFsProjection,\n} from './types';\nimport { rdfContentTypeForPath } from '../storage/rdf/RdfContentTypes';\n\nexport interface SolidFsFileSnapshot {\n relativePath: string;\n absolutePath: string;\n version: string;\n}\n\nexport function contentTypeForPath(filePath: string): string | undefined {\n const lower = filePath.toLowerCase();\n const rdfContentType = rdfContentTypeForPath(lower);\n if (rdfContentType) {\n return rdfContentType;\n }\n if (lower.endsWith('.md') || lower.endsWith('.markdown') || lower.endsWith('.mdown')) {\n return 'text/markdown';\n }\n if (lower.endsWith('.txt') || lower.endsWith('.log')) {\n return 'text/plain';\n }\n return undefined;\n}\n\nexport function sourceForProjection(projection: SolidFsProjection, workspace: string): SolidFsEntrySource {\n if (projection === 'hydrated-object') {\n return 'object';\n }\n if (/^https?:/u.test(workspace)) {\n return 'pod-http';\n }\n return 'filesystem';\n}\n\nexport function resolveWorkspaceResource(workspace: string, relativePath: string): string | undefined {\n if (path.isAbsolute(workspace)) {\n return pathToFileURL(path.join(workspace, relativePath)).href;\n }\n\n try {\n const base = new URL(workspace.endsWith('/') ? workspace : `${workspace}/`);\n const normalized = relativePath.split(path.sep).join('/');\n return new URL(normalized, base).href;\n } catch {\n return undefined;\n }\n}\n\nexport function safeRelativePath(input: string): string {\n const normalized = input.split(/[\\\\/]+/u).filter((part) => part.length > 0).join(path.sep);\n if (!normalized || path.isAbsolute(input) || normalized.split(path.sep).includes('..')) {\n throw new Error(`Invalid SolidFS relative path: ${input}`);\n }\n return normalized;\n}\n\nexport async function maybeFileVersion(filePath: string): Promise<string | undefined> {\n try {\n return await fileVersion(filePath);\n } catch {\n return undefined;\n }\n}\n\nexport async function fileVersion(filePath: string): Promise<string> {\n const fileStat = await stat(filePath);\n const hash = createHash('sha256');\n await new Promise<void>((resolve, reject) => {\n const stream = createReadStream(filePath);\n stream.on('data', (chunk) => hash.update(chunk));\n stream.on('error', reject);\n stream.on('end', resolve);\n });\n return `${fileStat.size}:${fileStat.mtimeMs}:${hash.digest('hex')}`;\n}\n\nexport async function snapshotDirectory(\n root: string,\n filter?: (relativePath: string) => boolean,\n): Promise<SolidFsFileSnapshot[]> {\n const snapshots: SolidFsFileSnapshot[] = [];\n\n async function walk(current: string): Promise<void> {\n let entries;\n try {\n entries = await readdir(current, { withFileTypes: true });\n } catch {\n return;\n }\n\n for (const entry of entries) {\n const absolute = path.join(current, entry.name);\n const relative = path.relative(root, absolute);\n if (entry.isDirectory()) {\n await walk(absolute);\n continue;\n }\n if (!entry.isFile()) {\n continue;\n }\n if (filter && !filter(relative)) {\n continue;\n }\n snapshots.push({\n relativePath: relative,\n absolutePath: absolute,\n version: await fileVersion(absolute),\n });\n }\n }\n\n await walk(root);\n return snapshots.sort((left, right) => left.relativePath.localeCompare(right.relativePath));\n}\n"]}
@@ -0,0 +1,117 @@
1
+ import type { SolidFsChange, SolidFsEntrySource, SolidFsManifest, SolidFsPrepareInput, SolidFsProjection, SolidFsSyncer } from './types';
2
+ export type SolidFsSyncJournalStage = 'local_committed' | 'failed_retryable' | 'failed_permanent' | 'reconcile_required' | 'done';
3
+ export interface SolidFsSyncJournalOptions {
4
+ path: string;
5
+ now?: () => number;
6
+ doneRetentionMs?: number;
7
+ tombstoneRetentionMs?: number;
8
+ failedPermanentRetentionMs?: number;
9
+ }
10
+ export interface SolidFsSyncJournalOperation {
11
+ id: string;
12
+ txId?: string;
13
+ workspace: SolidFsManifest;
14
+ change: SolidFsChange;
15
+ stage: SolidFsSyncJournalStage;
16
+ afterHash?: string;
17
+ retryCount: number;
18
+ lastError?: string;
19
+ createdAt: number;
20
+ updatedAt: number;
21
+ doneAt?: number;
22
+ }
23
+ export interface SolidFsJournalBootstrapInput {
24
+ workspace: string;
25
+ cwd: string;
26
+ projection?: SolidFsProjection;
27
+ source?: SolidFsEntrySource;
28
+ shouldTrackPath?: (relativePath: string) => boolean;
29
+ }
30
+ export interface SolidFsJournalBootstrapResult {
31
+ scanned: number;
32
+ enqueued: number;
33
+ skipped: number;
34
+ }
35
+ export interface SolidFsJournalReplayResult {
36
+ attempted: number;
37
+ completed: number;
38
+ failed: number;
39
+ reconcileRequired: number;
40
+ }
41
+ export interface SolidFsJournalCompactResult {
42
+ deletedOps: number;
43
+ }
44
+ /**
45
+ * Per-Pod SolidFS recovery journal.
46
+ *
47
+ * This is an outbox for derived work after the authority file is already
48
+ * committed. It stores enough metadata to replay index/remote refreshes, but
49
+ * never stores file bodies.
50
+ */
51
+ export declare class SqliteSolidFsSyncJournal {
52
+ private readonly db;
53
+ private readonly now;
54
+ private readonly doneRetentionMs;
55
+ private readonly tombstoneRetentionMs;
56
+ private readonly failedPermanentRetentionMs;
57
+ constructor(options: SolidFsSyncJournalOptions);
58
+ close(): void;
59
+ recordLocalCommitted(change: SolidFsChange, workspace: SolidFsManifest, txId?: string): Promise<SolidFsSyncJournalOperation>;
60
+ getOperation(id: string): SolidFsSyncJournalOperation | undefined;
61
+ listOperations(stages?: SolidFsSyncJournalStage[]): SolidFsSyncJournalOperation[];
62
+ listPending(): SolidFsSyncJournalOperation[];
63
+ markDone(id: string): Promise<void>;
64
+ markRetryableFailure(id: string, error: unknown): Promise<void>;
65
+ markReconcileRequired(id: string, reason: string): Promise<void>;
66
+ markFailedPermanent(id: string, error: unknown): Promise<void>;
67
+ replayPending(syncer: SolidFsSyncer, context?: unknown): Promise<SolidFsJournalReplayResult>;
68
+ bootstrapWorkspace(input: SolidFsJournalBootstrapInput): Promise<SolidFsJournalBootstrapResult>;
69
+ compact(): Promise<SolidFsJournalCompactResult>;
70
+ private validateOperationForReplay;
71
+ private getCheckpoint;
72
+ private listCheckpoints;
73
+ private upsertCheckpoint;
74
+ private initializeSchema;
75
+ }
76
+ export interface JournaledSolidFsSyncerOptions {
77
+ syncer: SolidFsSyncer;
78
+ journal: SqliteSolidFsSyncJournal;
79
+ }
80
+ export interface WorkspaceJournaledSolidFsSyncerOptions {
81
+ syncer: SolidFsSyncer;
82
+ journalRoot?: string;
83
+ resolveJournalPath?: (workspace: SolidFsManifest) => string;
84
+ now?: () => number;
85
+ doneRetentionMs?: number;
86
+ tombstoneRetentionMs?: number;
87
+ failedPermanentRetentionMs?: number;
88
+ }
89
+ export declare class JournaledSolidFsSyncer implements SolidFsSyncer {
90
+ private readonly syncer;
91
+ private readonly journal;
92
+ constructor(options: JournaledSolidFsSyncerOptions);
93
+ shouldTrack(input: SolidFsPrepareInput): boolean;
94
+ shouldTrackPath(relativePath: string): boolean;
95
+ sync(change: SolidFsChange, workspace: SolidFsManifest, context?: unknown): Promise<void>;
96
+ replayPending(context?: unknown): Promise<SolidFsJournalReplayResult>;
97
+ compact(): Promise<SolidFsJournalCompactResult>;
98
+ bootstrapWorkspace(input: Omit<SolidFsJournalBootstrapInput, 'shouldTrackPath'> & {
99
+ shouldTrackPath?: (relativePath: string) => boolean;
100
+ }): Promise<SolidFsJournalBootstrapResult>;
101
+ }
102
+ export declare class WorkspaceJournaledSolidFsSyncer implements SolidFsSyncer {
103
+ private readonly options;
104
+ private readonly syncer;
105
+ private readonly journals;
106
+ constructor(options: WorkspaceJournaledSolidFsSyncerOptions);
107
+ shouldTrack(input: SolidFsPrepareInput): boolean;
108
+ shouldTrackPath(relativePath: string): boolean;
109
+ initializeWorkspace(workspace: SolidFsManifest, context?: unknown): Promise<void>;
110
+ sync(change: SolidFsChange, workspace: SolidFsManifest, context?: unknown): Promise<void>;
111
+ replayPending(workspace: SolidFsManifest, context?: unknown): Promise<SolidFsJournalReplayResult>;
112
+ compact(workspace: SolidFsManifest): Promise<SolidFsJournalCompactResult>;
113
+ journalPathFor(workspace: SolidFsManifest): string;
114
+ close(): void;
115
+ private journalFor;
116
+ }
117
+ export declare function resolveSolidFsJournalPath(workspace: SolidFsManifest, journalRoot?: string): string;