{
  "version": 3,
  "sources": ["../src/memory.ts", "../src/lib/memory-file-storage.ts"],
  "sourcesContent": ["export { MemoryFileStorage } from './lib/memory-file-storage.ts';\n", "import type { FileStorage, ListOptions, ListResult } from './file-storage.ts';\n\n/**\n * A simple, in-memory implementation of the `FileStorage` interface.\n *\n * Note: Any files you put in storage will have their entire contents buffered in memory, so this is not suitable for large files\n * in production scenarios.\n */\nexport class MemoryFileStorage implements FileStorage {\n  #map = new Map<string, File>();\n\n  get(key: string): File | null {\n    return this.#map.get(key) ?? null;\n  }\n\n  has(key: string): boolean {\n    return this.#map.has(key);\n  }\n\n  list<T extends ListOptions>(options?: T): ListResult<T> {\n    let { cursor, includeMetadata = false, limit = Infinity, prefix } = options ?? {};\n\n    let files: any[] = [];\n    let foundCursor = cursor === undefined;\n    let nextCursor: string | undefined;\n\n    for (let [key, file] of this.#map.entries()) {\n      if (foundCursor) {\n        if (prefix != null && !key.startsWith(prefix)) {\n          continue;\n        }\n\n        if (files.length >= limit) {\n          nextCursor = files[files.length - 1]?.key;\n          break;\n        }\n\n        if (includeMetadata) {\n          files.push({\n            key,\n            lastModified: file.lastModified,\n            name: file.name,\n            size: file.size,\n            type: file.type,\n          });\n        } else {\n          files.push({ key });\n        }\n      } else if (key === cursor) {\n        foundCursor = true;\n      }\n    }\n\n    return {\n      cursor: nextCursor,\n      files,\n    };\n  }\n\n  async put(key: string, file: File): Promise<File> {\n    await this.set(key, file);\n    return this.get(key)!;\n  }\n\n  remove(key: string): void {\n    this.#map.delete(key);\n  }\n\n  async set(key: string, file: File): Promise<void> {\n    let buffer = await file.arrayBuffer();\n    let newFile = new File([buffer], file.name, {\n      lastModified: file.lastModified,\n      type: file.type,\n    });\n\n    this.#map.set(key, newFile);\n  }\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACQO,IAAM,oBAAN,MAA+C;AAAA,EACpD,OAAO,oBAAI,IAAkB;AAAA,EAE7B,IAAI,KAA0B;AAC5B,WAAO,KAAK,KAAK,IAAI,GAAG,KAAK;AAAA,EAC/B;AAAA,EAEA,IAAI,KAAsB;AACxB,WAAO,KAAK,KAAK,IAAI,GAAG;AAAA,EAC1B;AAAA,EAEA,KAA4B,SAA4B;AACtD,QAAI,EAAE,QAAQ,kBAAkB,OAAO,QAAQ,UAAU,OAAO,IAAI,WAAW,CAAC;AAEhF,QAAI,QAAe,CAAC;AACpB,QAAI,cAAc,WAAW;AAC7B,QAAI;AAEJ,aAAS,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK,QAAQ,GAAG;AAC3C,UAAI,aAAa;AACf,YAAI,UAAU,QAAQ,CAAC,IAAI,WAAW,MAAM,GAAG;AAC7C;AAAA,QACF;AAEA,YAAI,MAAM,UAAU,OAAO;AACzB,uBAAa,MAAM,MAAM,SAAS,CAAC,GAAG;AACtC;AAAA,QACF;AAEA,YAAI,iBAAiB;AACnB,gBAAM,KAAK;AAAA,YACT;AAAA,YACA,cAAc,KAAK;AAAA,YACnB,MAAM,KAAK;AAAA,YACX,MAAM,KAAK;AAAA,YACX,MAAM,KAAK;AAAA,UACb,CAAC;AAAA,QACH,OAAO;AACL,gBAAM,KAAK,EAAE,IAAI,CAAC;AAAA,QACpB;AAAA,MACF,WAAW,QAAQ,QAAQ;AACzB,sBAAc;AAAA,MAChB;AAAA,IACF;AAEA,WAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,KAAa,MAA2B;AAChD,UAAM,KAAK,IAAI,KAAK,IAAI;AACxB,WAAO,KAAK,IAAI,GAAG;AAAA,EACrB;AAAA,EAEA,OAAO,KAAmB;AACxB,SAAK,KAAK,OAAO,GAAG;AAAA,EACtB;AAAA,EAEA,MAAM,IAAI,KAAa,MAA2B;AAChD,QAAI,SAAS,MAAM,KAAK,YAAY;AACpC,QAAI,UAAU,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,MAAM;AAAA,MAC1C,cAAc,KAAK;AAAA,MACnB,MAAM,KAAK;AAAA,IACb,CAAC;AAED,SAAK,KAAK,IAAI,KAAK,OAAO;AAAA,EAC5B;AACF;",
  "names": []
}
