{"version":3,"sources":["../src/index.ts","../src/MemoryFileSystem.ts"],"sourcesContent":["export { MemoryFileSystem } from \"./MemoryFileSystem\";\nexport type { MemoryFileSystemOptions } from \"./types\";\n","import type {\n  IFileSystem,\n  IReactiveFileSystem,\n  FileEntry,\n  FileStat,\n  FileMetadata,\n  FSEvent,\n  Disposable,\n  FileSystemEventPayloads,\n  IFileSystemCapabilities,\n} from \"@firesystem/core\";\nimport {\n  normalizePath,\n  dirname,\n  basename,\n  join,\n  TypedEventEmitter,\n  FileSystemEvents,\n  BaseFileSystem,\n} from \"@firesystem/core\";\nimport type { MemoryFileSystemOptions } from \"./types\";\n\ninterface MemoryFile {\n  path: string;\n  type: \"file\" | \"directory\";\n  content?: any;\n  size: number;\n  created: Date;\n  modified: Date;\n  metadata?: FileMetadata;\n  parent: string;\n}\n\ninterface WatchListener {\n  id: string;\n  pattern: string;\n  callback: (event: FSEvent) => void;\n}\n\nexport class MemoryFileSystem extends BaseFileSystem {\n  private files: Map<string, MemoryFile> = new Map();\n  private watchers: WatchListener[] = [];\n  public readonly events = new TypedEventEmitter<FileSystemEventPayloads>();\n\n  // Capabilities do sistema em memória\n  readonly capabilities: IFileSystemCapabilities = {\n    readonly: false,\n    caseSensitive: true,\n    atomicRename: true,\n    supportsWatch: true,\n    supportsMetadata: true,\n    maxFileSize: 50 * 1024 * 1024, // 50MB limite prático\n    maxPathLength: 1024\n  };\n\n  constructor(options?: MemoryFileSystemOptions) {\n    super();\n    // Create root directory\n    this.files.set(\"/\", {\n      path: \"/\",\n      type: \"directory\",\n      size: 0,\n      created: new Date(),\n      modified: new Date(),\n      parent: \"\",\n    });\n\n    // Add initial files if provided\n    if (options?.initialFiles) {\n      for (const file of options.initialFiles) {\n        const normalized = normalizePath(file.path);\n        this.files.set(normalized, {\n          path: normalized,\n          type: file.type,\n          content: file.content,\n          size: file.size || this.calculateSize(file.content),\n          created: file.created || new Date(),\n          modified: file.modified || new Date(),\n          metadata: file.metadata,\n          parent: dirname(normalized),\n        });\n      }\n    }\n  }\n\n  async initialize(): Promise<void> {\n    const startTime = Date.now();\n    this.events.emit(FileSystemEvents.INITIALIZING, undefined as any);\n\n    try {\n      // Get all files except root\n      const allFiles = Array.from(this.files.values()).filter(\n        (f) => f.path !== \"/\",\n      );\n      const totalFiles = allFiles.length;\n\n      // Emit events for each file\n      for (let i = 0; i < allFiles.length; i++) {\n        const file = allFiles[i];\n\n        // Emit individual file events\n        if (file.type === \"file\") {\n          this.events.emit(FileSystemEvents.FILE_READ, {\n            path: file.path,\n            size: file.size,\n          });\n        } else {\n          // For directories, count children\n          const childCount = Array.from(this.files.values()).filter(\n            (f) => f.parent === file.path,\n          ).length;\n\n          this.events.emit(FileSystemEvents.DIR_READ, {\n            path: file.path,\n            count: childCount,\n          });\n        }\n\n        // Emit progress\n        this.events.emit(FileSystemEvents.INIT_PROGRESS, {\n          loaded: i + 1,\n          total: totalFiles,\n          phase: \"loading-files\",\n        });\n      }\n\n      this.events.emit(FileSystemEvents.INITIALIZED, {\n        duration: Date.now() - startTime,\n      });\n    } catch (error) {\n      this.events.emit(FileSystemEvents.INIT_ERROR, {\n        error: error as Error,\n      });\n      throw error;\n    }\n  }\n\n  async readFile(path: string): Promise<FileEntry> {\n    const normalized = normalizePath(path);\n    const startTime = Date.now();\n    const operationId = `read-${normalized}-${startTime}`;\n\n    this.events.emit(FileSystemEvents.OPERATION_START, {\n      operation: \"readFile\",\n      path: normalized,\n      id: operationId,\n    });\n    this.events.emit(FileSystemEvents.FILE_READING, { path: normalized });\n\n    try {\n      const file = this.files.get(normalized);\n\n      if (!file) {\n        throw new Error(`ENOENT: no such file or directory, open '${path}'`);\n      }\n\n      if (file.type === \"directory\") {\n        throw new Error(\n          `EISDIR: illegal operation on a directory, read '${path}'`,\n        );\n      }\n\n      const result = {\n        path: file.path,\n        name: basename(file.path),\n        type: file.type,\n        size: file.size,\n        created: file.created,\n        modified: file.modified,\n        metadata: file.metadata,\n        content: file.content,\n      };\n\n      this.events.emit(FileSystemEvents.FILE_READ, {\n        path: normalized,\n        size: file.size,\n      });\n      this.events.emit(FileSystemEvents.OPERATION_END, {\n        operation: \"readFile\",\n        path: normalized,\n        id: operationId,\n        duration: Date.now() - startTime,\n      });\n\n      return result;\n    } catch (error) {\n      this.events.emit(FileSystemEvents.OPERATION_ERROR, {\n        operation: \"readFile\",\n        path: normalized,\n        error: error as Error,\n      });\n      throw error;\n    }\n  }\n\n  async writeFile(\n    path: string,\n    content: any,\n    metadata?: FileMetadata,\n  ): Promise<FileEntry> {\n    const normalized = normalizePath(path);\n    const startTime = Date.now();\n    const operationId = `write-${normalized}-${startTime}`;\n    const size = this.calculateSize(content);\n\n    this.events.emit(FileSystemEvents.OPERATION_START, {\n      operation: \"writeFile\",\n      path: normalized,\n      id: operationId,\n    });\n    this.events.emit(FileSystemEvents.FILE_WRITING, { path: normalized, size });\n\n    try {\n      // Ensure parent directory exists\n      await this.ensureParentExists(normalized);\n\n      const existing = this.files.get(normalized);\n      const now = new Date();\n\n      const file: MemoryFile = {\n        path: normalized,\n        type: \"file\",\n        content,\n        size,\n        created: existing?.created || now,\n        modified: now,\n        metadata,\n        parent: dirname(normalized),\n      };\n\n      const isUpdate = !!existing;\n      this.files.set(normalized, file);\n\n      const result = {\n        path: file.path,\n        name: basename(file.path),\n        type: file.type,\n        size: file.size,\n        created: file.created,\n        modified: file.modified,\n        metadata: file.metadata,\n        content: file.content,\n      };\n\n      // Notify watchers\n      this.notifyWatchers({\n        type: isUpdate ? \"updated\" : \"created\",\n        path: normalized,\n        timestamp: now,\n      });\n\n      this.events.emit(FileSystemEvents.FILE_WRITTEN, {\n        path: normalized,\n        size,\n      });\n      this.events.emit(FileSystemEvents.OPERATION_END, {\n        operation: \"writeFile\",\n        path: normalized,\n        id: operationId,\n        duration: Date.now() - startTime,\n      });\n\n      return result;\n    } catch (error) {\n      this.events.emit(FileSystemEvents.OPERATION_ERROR, {\n        operation: \"writeFile\",\n        path: normalized,\n        error: error as Error,\n      });\n      throw error;\n    }\n  }\n\n  async deleteFile(path: string): Promise<void> {\n    const normalized = normalizePath(path);\n    const file = this.files.get(normalized);\n\n    if (!file) {\n      throw new Error(`ENOENT: no such file or directory, unlink '${path}'`);\n    }\n\n    if (file.type === \"directory\") {\n      // Check if directory is empty\n      const hasChildren = Array.from(this.files.values()).some(\n        (f) => f.parent === normalized,\n      );\n      if (hasChildren) {\n        throw new Error(`ENOTEMPTY: directory not empty, rmdir '${path}'`);\n      }\n    }\n\n    this.files.delete(normalized);\n\n    // Notify watchers\n    this.notifyWatchers({\n      type: \"deleted\",\n      path: normalized,\n      timestamp: new Date(),\n    });\n  }\n\n  async exists(path: string): Promise<boolean> {\n    const normalized = normalizePath(path);\n    return this.files.has(normalized);\n  }\n\n  async readDir(path: string): Promise<FileEntry[]> {\n    const normalized = normalizePath(path);\n\n    // Check if directory exists\n    if (normalized !== \"/\" && !this.files.has(normalized)) {\n      throw new Error(`ENOENT: no such file or directory, scandir '${path}'`);\n    }\n\n    const entries: FileEntry[] = [];\n\n    for (const file of this.files.values()) {\n      if (file.parent === normalized) {\n        entries.push({\n          path: file.path,\n          name: basename(file.path),\n          type: file.type,\n          size: file.size,\n          created: file.created,\n          modified: file.modified,\n          metadata: file.metadata,\n        });\n      }\n    }\n\n    return entries;\n  }\n\n  async mkdir(path: string, recursive: boolean = false): Promise<FileEntry> {\n    const normalized = normalizePath(path);\n\n    if (normalized === \"/\") {\n      throw new Error(`EEXIST: file already exists, mkdir '${path}'`);\n    }\n\n    if (this.files.has(normalized)) {\n      throw new Error(`EEXIST: file already exists, mkdir '${path}'`);\n    }\n\n    const parent = dirname(normalized);\n    if (!recursive && parent !== \"/\" && !this.files.has(parent)) {\n      throw new Error(`ENOENT: no such file or directory, mkdir '${path}'`);\n    }\n\n    // Create parent directories if recursive\n    if (recursive && parent !== \"/\" && !this.files.has(parent)) {\n      await this.mkdir(parent, true);\n    }\n\n    const now = new Date();\n    const dir: MemoryFile = {\n      path: normalized,\n      type: \"directory\",\n      size: 0,\n      created: now,\n      modified: now,\n      parent: dirname(normalized),\n    };\n\n    this.files.set(normalized, dir);\n\n    // Notify watchers\n    this.notifyWatchers({\n      type: \"created\",\n      path: normalized,\n      timestamp: now,\n    });\n\n    return {\n      path: dir.path,\n      name: basename(dir.path),\n      type: dir.type,\n      size: 0,\n      created: now,\n      modified: now,\n    };\n  }\n\n  async rmdir(path: string, recursive: boolean = false): Promise<void> {\n    const normalized = normalizePath(path);\n\n    if (normalized === \"/\") {\n      throw new Error(`EBUSY: resource busy or locked, rmdir '${path}'`);\n    }\n\n    const file = this.files.get(normalized);\n    if (!file) {\n      throw new Error(`ENOENT: no such file or directory, rmdir '${path}'`);\n    }\n\n    if (file.type !== \"directory\") {\n      throw new Error(`ENOTDIR: not a directory, rmdir '${path}'`);\n    }\n\n    const contents = await this.readDir(normalized);\n    if (contents.length > 0 && !recursive) {\n      throw new Error(`ENOTEMPTY: directory not empty, rmdir '${path}'`);\n    }\n\n    if (recursive) {\n      // Delete all contents recursively\n      await this.deleteRecursive(normalized);\n    }\n\n    // Delete the directory itself\n    this.files.delete(normalized);\n\n    // Notify watchers\n    this.notifyWatchers({\n      type: \"deleted\",\n      path: normalized,\n      timestamp: new Date(),\n    });\n  }\n\n  async rename(oldPath: string, newPath: string): Promise<FileEntry> {\n    const oldNormalized = normalizePath(oldPath);\n    const newNormalized = normalizePath(newPath);\n\n    const file = this.files.get(oldNormalized);\n    if (!file) {\n      throw new Error(`ENOENT: no such file or directory, rename '${oldPath}'`);\n    }\n\n    // Ensure new parent exists\n    await this.ensureParentExists(newNormalized);\n\n    // Check if new path already exists\n    if (this.files.has(newNormalized)) {\n      throw new Error(\n        `EEXIST: file already exists, rename '${oldPath}' -> '${newPath}'`,\n      );\n    }\n\n    const now = new Date();\n\n    // If it's a directory, update all children\n    if (file.type === \"directory\") {\n      const toUpdate: Array<[string, MemoryFile]> = [];\n\n      // Collect all files to update\n      for (const [path, f] of this.files) {\n        if (path === oldNormalized || path.startsWith(oldNormalized + \"/\")) {\n          const newFilePath = path.replace(oldNormalized, newNormalized);\n          toUpdate.push([\n            path,\n            {\n              ...f,\n              path: newFilePath,\n              parent: dirname(newFilePath),\n              modified: path === oldNormalized ? now : f.modified,\n            },\n          ]);\n        }\n      }\n\n      // Delete old entries and add new ones\n      for (const [oldPath] of toUpdate) {\n        this.files.delete(oldPath);\n      }\n      for (const [, newFile] of toUpdate) {\n        this.files.set(newFile.path, newFile);\n      }\n\n      // Get the renamed directory entry\n      const renamedDir = this.files.get(newNormalized)!;\n\n      // Notify watchers\n      this.notifyWatchers({\n        type: \"renamed\",\n        path: newNormalized,\n        oldPath: oldNormalized,\n        timestamp: now,\n      });\n\n      return {\n        path: renamedDir.path,\n        name: basename(renamedDir.path),\n        type: renamedDir.type,\n        size: renamedDir.size,\n        created: renamedDir.created,\n        modified: renamedDir.modified,\n        metadata: renamedDir.metadata,\n      };\n    } else {\n      // It's a file, simpler case\n      const newFile: MemoryFile = {\n        ...file,\n        path: newNormalized,\n        parent: dirname(newNormalized),\n        modified: now,\n      };\n\n      this.files.delete(oldNormalized);\n      this.files.set(newNormalized, newFile);\n\n      // Notify watchers\n      this.notifyWatchers({\n        type: \"renamed\",\n        path: newNormalized,\n        oldPath: oldNormalized,\n        timestamp: now,\n      });\n\n      return {\n        path: newFile.path,\n        name: basename(newFile.path),\n        type: newFile.type,\n        size: newFile.size,\n        created: newFile.created,\n        modified: newFile.modified,\n        metadata: newFile.metadata,\n        content: newFile.content,\n      };\n    }\n  }\n\n  async move(sourcePaths: string[], targetPath: string): Promise<void> {\n    const targetNormalized = normalizePath(targetPath);\n\n    // Ensure target is a directory\n    const target = this.files.get(targetNormalized);\n    if (!target || target.type !== \"directory\") {\n      throw new Error(`ENOTDIR: not a directory, move to '${targetPath}'`);\n    }\n\n    for (const sourcePath of sourcePaths) {\n      const name = basename(sourcePath);\n      const newPath = join(targetNormalized, name);\n      await this.rename(sourcePath, newPath);\n    }\n  }\n\n  async copy(sourcePath: string, targetPath: string): Promise<FileEntry> {\n    const sourceNormalized = normalizePath(sourcePath);\n    const source = this.files.get(sourceNormalized);\n\n    if (!source) {\n      throw new Error(\n        `ENOENT: no such file or directory, open '${sourcePath}'`,\n      );\n    }\n\n    if (source.type === \"directory\") {\n      throw new Error(\n        `EISDIR: illegal operation on a directory, read '${sourcePath}'`,\n      );\n    }\n\n    return this.writeFile(targetPath, source.content, source.metadata);\n  }\n\n  watch(pattern: string, callback: (event: FSEvent) => void): Disposable {\n    const id = this.generateWatcherId();\n    const listener: WatchListener = { id, pattern, callback };\n\n    this.watchers.push(listener);\n\n    return {\n      dispose: () => {\n        const index = this.watchers.findIndex((w) => w.id === id);\n        if (index !== -1) {\n          this.watchers.splice(index, 1);\n        }\n      },\n    };\n  }\n\n  async stat(path: string): Promise<FileStat> {\n    const normalized = normalizePath(path);\n    const file = this.files.get(normalized);\n\n    if (!file) {\n      throw new Error(`ENOENT: no such file or directory, stat '${path}'`);\n    }\n\n    return {\n      path: file.path,\n      size: file.size,\n      type: file.type,\n      created: file.created,\n      modified: file.modified,\n      readonly: false, // Sempre false em memória\n    };\n  }\n\n  async glob(pattern: string): Promise<string[]> {\n    const paths: string[] = [];\n\n    for (const file of this.files.values()) {\n      if (this.matchesPattern(file.path, pattern)) {\n        paths.push(file.path);\n      }\n    }\n\n    return paths.sort();\n  }\n\n  async clear(): Promise<void> {\n    const startTime = Date.now();\n    const operationId = `clear-${startTime}`;\n\n    this.events.emit(FileSystemEvents.OPERATION_START, {\n      operation: \"clear\",\n      id: operationId,\n    });\n    this.events.emit(FileSystemEvents.STORAGE_CLEARING, undefined as any);\n\n    try {\n      this.files.clear();\n\n      // Recreate root directory\n      this.files.set(\"/\", {\n        path: \"/\",\n        type: \"directory\",\n        size: 0,\n        created: new Date(),\n        modified: new Date(),\n        parent: \"\",\n      });\n\n      const duration = Date.now() - startTime;\n      this.events.emit(FileSystemEvents.STORAGE_CLEARED, { duration });\n      this.events.emit(FileSystemEvents.OPERATION_END, {\n        operation: \"clear\",\n        id: operationId,\n        duration,\n      });\n    } catch (error) {\n      this.events.emit(FileSystemEvents.OPERATION_ERROR, {\n        operation: \"clear\",\n        error: error as Error,\n      });\n      throw error;\n    }\n  }\n\n  async size(): Promise<number> {\n    const startTime = Date.now();\n    const operationId = `size-${startTime}`;\n\n    this.events.emit(FileSystemEvents.OPERATION_START, {\n      operation: \"size\",\n      id: operationId,\n    });\n\n    try {\n      let totalSize = 0;\n\n      for (const file of this.files.values()) {\n        totalSize += file.size;\n      }\n\n      this.events.emit(FileSystemEvents.STORAGE_SIZE_CALCULATED, {\n        size: totalSize,\n      });\n      this.events.emit(FileSystemEvents.OPERATION_END, {\n        operation: \"size\",\n        id: operationId,\n        duration: Date.now() - startTime,\n      });\n\n      return totalSize;\n    } catch (error) {\n      this.events.emit(FileSystemEvents.OPERATION_ERROR, {\n        operation: \"size\",\n        error: error as Error,\n      });\n      throw error;\n    }\n  }\n\n  // Helper methods\n\n  private calculateSize(content: any): number {\n    if (content === null || content === undefined) {\n      return 0;\n    }\n    if (typeof content === \"string\") {\n      // UTF-16 encoding (JavaScript strings)\n      return content.length * 2;\n    }\n    if (content instanceof ArrayBuffer) {\n      return content.byteLength;\n    }\n    if (typeof content === \"object\") {\n      return JSON.stringify(content).length * 2;\n    }\n    return 0;\n  }\n\n  private async ensureParentExists(path: string): Promise<void> {\n    const parent = dirname(path);\n    if (parent === \"/\" || parent === path) return;\n\n    if (!this.files.has(parent)) {\n      throw new Error(`ENOENT: no such file or directory, open '${path}'`);\n    }\n  }\n\n  private async deleteRecursive(path: string): Promise<void> {\n    const toDelete: string[] = [];\n\n    // Collect all descendants\n    for (const file of this.files.values()) {\n      if (file.path.startsWith(path + \"/\")) {\n        toDelete.push(file.path);\n      }\n    }\n\n    // Sort by path length descending (delete children first)\n    toDelete.sort((a, b) => b.length - a.length);\n\n    // Delete all children\n    for (const filePath of toDelete) {\n      this.files.delete(filePath);\n    }\n  }\n\n  private matchesPattern(path: string, pattern: string): boolean {\n    // Handle simple cases\n    if (pattern === \"**\" || pattern === \"**/*\") {\n      return true;\n    }\n\n    if (pattern === \"*\") {\n      // * should only match files in root directory\n      return path.split(\"/\").length === 2 && path !== \"/\";\n    }\n\n    // Convert glob pattern to regex\n    let regex = pattern\n      // Escape special regex characters except glob ones\n      .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n      // Handle ** (matches any number of directories)\n      .replace(/\\*\\*/g, \"___GLOBSTAR___\")\n      // Handle * (matches any characters except /)\n      .replace(/\\*/g, \"[^/]*\")\n      // Handle ? (matches single character except /)\n      .replace(/\\?/g, \"[^/]\")\n      // Restore ** handling\n      .replace(/___GLOBSTAR___\\//g, \"(.*/)?\")\n      .replace(/\\/___GLOBSTAR___/g, \"(/.*)?\")\n      .replace(/___GLOBSTAR___/g, \".*\");\n\n    // Anchor the pattern\n    regex = \"^\" + regex + \"$\";\n\n    return new RegExp(regex).test(path);\n  }\n\n  private notifyWatchers(event: FSEvent): void {\n    for (const watcher of this.watchers) {\n      if (this.matchesPattern(event.path, watcher.pattern)) {\n        try {\n          watcher.callback(event);\n        } catch (error) {\n          console.error(\n            `Error in watch callback for pattern \"${watcher.pattern}\":`,\n            error,\n          );\n        }\n      }\n    }\n  }\n\n  private generateWatcherId(): string {\n    return `watch_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n  }\n\n  // Sobrescrever métodos de permissão (sempre permitido em memória)\n  async canModify(path: string): Promise<boolean> {\n    return true; // Sempre permitido em memória\n  }\n\n  async canCreateIn(parentPath: string): Promise<boolean> {\n    try {\n      const stat = await this.stat(parentPath);\n      return stat.type === \"directory\";\n    } catch {\n      // Se não existe, verifica se é o root\n      return normalizePath(parentPath) === \"/\";\n    }\n  }\n\n  // writeFileAtomic já está implementado na classe base\n  // Mas podemos otimizar para memória\n  async writeFileAtomic(\n    path: string,\n    content: any,\n    metadata?: FileMetadata\n  ): Promise<FileEntry> {\n    // Em memória, podemos fazer atomicamente sem arquivo temp\n    return this.writeFile(path, content, metadata);\n  }\n}\n"],"mappings":"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","names":["oldPath"]}