@ooneex/storage 1.1.5 → 1.1.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/dist/index.js.map CHANGED
@@ -2,14 +2,14 @@
2
2
  "version": 3,
3
3
  "sources": ["src/BunnyStorage.ts", "src/decorators.ts", "src/StorageException.ts", "src/CloudflareStorage.ts", "src/Storage.ts", "src/FilesystemStorage.ts"],
4
4
  "sourcesContent": [
5
- "import { readdir } from \"node:fs/promises\";\nimport { basename, join } from \"node:path\";\nimport type { ReadableStream as NodeReadableStream } from \"node:stream/web\";\nimport * as BunnyStorageSDK from \"@bunny.net/storage-sdk\";\nimport { AppEnv } from \"@ooneex/app-env\";\nimport { inject } from \"@ooneex/container\";\nimport type { BunFile, S3File } from \"bun\";\nimport { decorator } from \"./decorators\";\nimport { StorageException } from \"./StorageException\";\nimport type { GetFileOptionsType, IStorage, PutDirOptionsType } from \"./types\";\n\ntype BunnyRegionType = \"de\" | \"uk\" | \"ny\" | \"la\" | \"sg\" | \"se\" | \"br\" | \"jh\" | \"syd\";\n\nconst REGION_MAP: Record<BunnyRegionType, BunnyStorageSDK.regions.StorageRegion> = {\n de: BunnyStorageSDK.regions.StorageRegion.Falkenstein,\n uk: BunnyStorageSDK.regions.StorageRegion.London,\n ny: BunnyStorageSDK.regions.StorageRegion.NewYork,\n la: BunnyStorageSDK.regions.StorageRegion.LosAngeles,\n sg: BunnyStorageSDK.regions.StorageRegion.Singapore,\n se: BunnyStorageSDK.regions.StorageRegion.Stockholm,\n br: BunnyStorageSDK.regions.StorageRegion.SaoPaulo,\n jh: BunnyStorageSDK.regions.StorageRegion.Johannesburg,\n syd: BunnyStorageSDK.regions.StorageRegion.Sydney,\n};\n\n@decorator.storage()\nexport class BunnyStorage implements IStorage {\n private bucket = \"\";\n private readonly storageZone: BunnyStorageSDK.zone.StorageZone;\n\n constructor(@inject(AppEnv) private readonly env: AppEnv) {\n const accessKey = this.env.STORAGE_BUNNY_ACCESS_KEY;\n const storageZone = this.env.STORAGE_BUNNY_STORAGE_ZONE;\n const region = this.env.STORAGE_BUNNY_REGION as BunnyRegionType | undefined;\n\n if (!accessKey) {\n throw new StorageException(\n \"Bunny access key is required. Please provide an access key either through the constructor options or set the STORAGE_BUNNY_ACCESS_KEY environment variable.\",\n \"API_KEY_REQUIRED\",\n );\n }\n if (!storageZone) {\n throw new StorageException(\n \"Bunny storage zone is required. Please provide a storage zone either through the constructor options or set the STORAGE_BUNNY_STORAGE_ZONE environment variable.\",\n \"STORAGE_ZONE_REQUIRED\",\n );\n }\n\n const sdkRegion = REGION_MAP[region ?? \"de\"];\n this.storageZone = BunnyStorageSDK.zone.connect_with_accesskey(sdkRegion, storageZone, accessKey);\n }\n\n public getBucket(): string {\n return this.bucket;\n }\n\n public setBucket(name: string): this {\n this.bucket = name;\n\n return this;\n }\n\n public async list(): Promise<string[]> {\n const path = this.bucket ? `/${this.bucket}/` : \"/\";\n\n try {\n const files = await BunnyStorageSDK.file.list(this.storageZone, path);\n\n return files.filter((file) => !file.isDirectory).map((file) => file.objectName);\n } catch (error) {\n throw new StorageException(`Failed to list files: ${error instanceof Error ? error.message : String(error)}`, \"STORAGE_LIST_FAILED\", {\n path,\n });\n }\n }\n\n public async clearBucket(): Promise<this> {\n const keys = await this.list();\n\n await Promise.all(keys.map((key) => this.delete(key)));\n\n return this;\n }\n\n public async exists(key: string): Promise<boolean> {\n try {\n await BunnyStorageSDK.file.get(this.storageZone, this.buildFilePath(key));\n\n return true;\n } catch {\n return false;\n }\n }\n\n public async delete(key: string): Promise<void> {\n try {\n await BunnyStorageSDK.file.remove(this.storageZone, this.buildFilePath(key));\n } catch {\n // Ignore errors (file may not exist)\n }\n }\n\n public async putFile(key: string, localPath: string): Promise<number> {\n const file = Bun.file(localPath);\n\n return await this.put(key, file);\n }\n\n public async putDir(bucket: string, options: PutDirOptionsType): Promise<number> {\n const { path, filter } = options;\n const entries = await readdir(path, { withFileTypes: true });\n\n const tasks: Promise<number>[] = [];\n\n for (const entry of entries) {\n const entryLocalPath = join(path, entry.name);\n const entryKey = bucket ? `${bucket}/${entry.name}` : entry.name;\n\n if (filter && !filter.test(entryLocalPath)) {\n continue;\n }\n\n if (entry.isDirectory()) {\n const subOptions: PutDirOptionsType = { path: entryLocalPath };\n if (filter) {\n subOptions.filter = filter;\n }\n tasks.push(this.putDir(entryKey, subOptions));\n } else {\n tasks.push(this.putFile(entryKey, entryLocalPath));\n }\n }\n\n const results = await Promise.all(tasks);\n\n return results.reduce((sum, bytes) => sum + bytes, 0);\n }\n\n public async put(\n key: string,\n content: string | ArrayBufferView | ArrayBuffer | SharedArrayBuffer | Request | Response | BunFile | S3File | Blob,\n ): Promise<number> {\n const { stream, length } = await this.toReadableStream(content);\n const filePath = this.buildFilePath(key);\n\n try {\n await BunnyStorageSDK.file.upload(\n this.storageZone,\n filePath,\n stream as unknown as NodeReadableStream<Uint8Array>,\n );\n } catch (error) {\n throw new StorageException(`Failed to upload file: ${error instanceof Error ? error.message : String(error)}`, \"STORAGE_UPLOAD_FAILED\", {\n key,\n });\n }\n\n return length;\n }\n\n public async getFile(key: string, options: GetFileOptionsType): Promise<number> {\n const arrayBuffer = await this.getAsArrayBuffer(key);\n const filename = options.filename ?? basename(key);\n const localPath = join(options.outputDir, filename);\n\n return await Bun.write(localPath, arrayBuffer);\n }\n\n public async getAsJson<T = unknown>(key: string): Promise<T> {\n try {\n const { stream } = await BunnyStorageSDK.file.download(this.storageZone, this.buildFilePath(key));\n\n return await new Response(stream as unknown as BodyInit).json();\n } catch (error) {\n throw new StorageException(\n `Failed to get file as JSON: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n { key },\n );\n }\n }\n\n public async getAsArrayBuffer(key: string): Promise<ArrayBuffer> {\n try {\n const { stream } = await BunnyStorageSDK.file.download(this.storageZone, this.buildFilePath(key));\n\n return await new Response(stream as unknown as BodyInit).arrayBuffer();\n } catch (error) {\n throw new StorageException(\n `Failed to get file as ArrayBuffer: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n { key },\n );\n }\n }\n\n public getAsStream(key: string): ReadableStream {\n const filePath = this.buildFilePath(key);\n\n const { readable, writable } = new TransformStream();\n\n BunnyStorageSDK.file\n .download(this.storageZone, filePath)\n .then(({ stream }) => {\n (stream as unknown as ReadableStream).pipeTo(writable);\n })\n .catch((error) => {\n writable.abort(\n new StorageException(\n `Failed to get file as stream: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n { key },\n ),\n );\n });\n\n return readable;\n }\n\n private buildFilePath(key: string): string {\n return this.bucket ? `/${this.bucket}/${key}` : `/${key}`;\n }\n\n private async toReadableStream(\n content: string | ArrayBufferView | ArrayBuffer | SharedArrayBuffer | Request | Response | BunFile | S3File | Blob,\n ): Promise<{ stream: ReadableStream<Uint8Array>; length: number }> {\n if (typeof content === \"string\") {\n const encoded = new TextEncoder().encode(content);\n return { stream: new Blob([encoded]).stream(), length: encoded.length };\n }\n\n if (content instanceof ArrayBuffer) {\n return { stream: new Blob([content]).stream(), length: content.byteLength };\n }\n\n if (content instanceof SharedArrayBuffer) {\n const uint8Array = new Uint8Array(content);\n const copied = new Uint8Array(uint8Array.length);\n copied.set(uint8Array);\n return { stream: new Blob([copied]).stream(), length: content.byteLength };\n }\n\n if (ArrayBuffer.isView(content)) {\n const view = new Uint8Array(content.buffer as ArrayBuffer, content.byteOffset, content.byteLength);\n return { stream: new Blob([view]).stream(), length: content.byteLength };\n }\n\n if (content instanceof Blob) {\n return { stream: content.stream(), length: content.size };\n }\n\n if (content instanceof Request || content instanceof Response) {\n const arrayBuffer = await content.arrayBuffer();\n return { stream: new Blob([arrayBuffer]).stream(), length: arrayBuffer.byteLength };\n }\n\n if (typeof content === \"object\" && content !== null && \"arrayBuffer\" in content) {\n const fileContent = content as BunFile | S3File;\n const arrayBuffer = await fileContent.arrayBuffer();\n return { stream: new Blob([arrayBuffer]).stream(), length: arrayBuffer.byteLength };\n }\n\n throw new StorageException(\"Unsupported content type for upload\", \"UNSUPPORTED_CONTENT_TYPE\");\n }\n}\n",
5
+ "import { readdir } from \"node:fs/promises\";\nimport { basename, join } from \"node:path\";\nimport type { ReadableStream as NodeReadableStream } from \"node:stream/web\";\nimport * as BunnyStorageSDK from \"@bunny.net/storage-sdk\";\nimport { AppEnv } from \"@ooneex/app-env\";\nimport { inject } from \"@ooneex/container\";\nimport type { BunFile, S3File } from \"bun\";\nimport { decorator } from \"./decorators\";\nimport { StorageException } from \"./StorageException\";\nimport type { GetFileOptionsType, IStorage, PutDirOptionsType } from \"./types\";\n\ntype BunnyRegionType = \"de\" | \"uk\" | \"ny\" | \"la\" | \"sg\" | \"se\" | \"br\" | \"jh\" | \"syd\";\n\nconst REGION_MAP: Record<BunnyRegionType, BunnyStorageSDK.regions.StorageRegion> = {\n de: BunnyStorageSDK.regions.StorageRegion.Falkenstein,\n uk: BunnyStorageSDK.regions.StorageRegion.London,\n ny: BunnyStorageSDK.regions.StorageRegion.NewYork,\n la: BunnyStorageSDK.regions.StorageRegion.LosAngeles,\n sg: BunnyStorageSDK.regions.StorageRegion.Singapore,\n se: BunnyStorageSDK.regions.StorageRegion.Stockholm,\n br: BunnyStorageSDK.regions.StorageRegion.SaoPaulo,\n jh: BunnyStorageSDK.regions.StorageRegion.Johannesburg,\n syd: BunnyStorageSDK.regions.StorageRegion.Sydney,\n};\n\n@decorator.storage()\nexport class BunnyStorage implements IStorage {\n private bucket = \"\";\n private readonly storageZone: BunnyStorageSDK.zone.StorageZone;\n\n constructor(@inject(AppEnv) private readonly env: AppEnv) {\n const accessKey = this.env.STORAGE_BUNNY_ACCESS_KEY;\n const storageZone = this.env.STORAGE_BUNNY_STORAGE_ZONE;\n const region = this.env.STORAGE_BUNNY_REGION as BunnyRegionType | undefined;\n\n if (!accessKey) {\n throw new StorageException(\n \"Bunny access key is required. Please provide an access key either through the constructor options or set the STORAGE_BUNNY_ACCESS_KEY environment variable.\",\n \"API_KEY_REQUIRED\",\n );\n }\n if (!storageZone) {\n throw new StorageException(\n \"Bunny storage zone is required. Please provide a storage zone either through the constructor options or set the STORAGE_BUNNY_STORAGE_ZONE environment variable.\",\n \"STORAGE_ZONE_REQUIRED\",\n );\n }\n\n const sdkRegion = REGION_MAP[region ?? \"de\"];\n this.storageZone = BunnyStorageSDK.zone.connect_with_accesskey(sdkRegion, storageZone, accessKey);\n }\n\n public getBucket(): string {\n return this.bucket;\n }\n\n public setBucket(name: string): this {\n this.bucket = name;\n\n return this;\n }\n\n public async list(): Promise<string[]> {\n const path = this.bucket ? `/${this.bucket}/` : \"/\";\n\n try {\n const files = await BunnyStorageSDK.file.list(this.storageZone, path);\n\n return files.filter((file) => !file.isDirectory).map((file) => file.objectName);\n } catch (error) {\n throw new StorageException(\n `Failed to list files: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_LIST_FAILED\",\n {\n path,\n },\n );\n }\n }\n\n public async clearBucket(): Promise<this> {\n const keys = await this.list();\n\n await Promise.all(keys.map((key) => this.delete(key)));\n\n return this;\n }\n\n public async exists(key: string): Promise<boolean> {\n try {\n await BunnyStorageSDK.file.get(this.storageZone, this.buildFilePath(key));\n\n return true;\n } catch {\n return false;\n }\n }\n\n public async delete(key: string): Promise<void> {\n try {\n await BunnyStorageSDK.file.remove(this.storageZone, this.buildFilePath(key));\n } catch {\n // Ignore errors (file may not exist)\n }\n }\n\n public async putFile(key: string, localPath: string): Promise<number> {\n const file = Bun.file(localPath);\n\n return await this.put(key, file);\n }\n\n public async putDir(bucket: string, options: PutDirOptionsType): Promise<number> {\n const { path, filter } = options;\n const entries = await readdir(path, { withFileTypes: true });\n\n const tasks: Promise<number>[] = [];\n\n for (const entry of entries) {\n const entryLocalPath = join(path, entry.name);\n const entryKey = bucket ? `${bucket}/${entry.name}` : entry.name;\n\n if (filter && !filter.test(entryLocalPath)) {\n continue;\n }\n\n if (entry.isDirectory()) {\n const subOptions: PutDirOptionsType = { path: entryLocalPath };\n if (filter) {\n subOptions.filter = filter;\n }\n tasks.push(this.putDir(entryKey, subOptions));\n } else {\n tasks.push(this.putFile(entryKey, entryLocalPath));\n }\n }\n\n const results = await Promise.all(tasks);\n\n return results.reduce((sum, bytes) => sum + bytes, 0);\n }\n\n public async put(\n key: string,\n content: string | ArrayBufferView | ArrayBuffer | SharedArrayBuffer | Request | Response | BunFile | S3File | Blob,\n ): Promise<number> {\n const { stream, length } = await this.toReadableStream(content);\n const filePath = this.buildFilePath(key);\n\n try {\n await BunnyStorageSDK.file.upload(\n this.storageZone,\n filePath,\n stream as unknown as NodeReadableStream<Uint8Array>,\n );\n } catch (error) {\n throw new StorageException(\n `Failed to upload file: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_UPLOAD_FAILED\",\n {\n key,\n },\n );\n }\n\n return length;\n }\n\n public async getFile(key: string, options: GetFileOptionsType): Promise<number> {\n const arrayBuffer = await this.getAsArrayBuffer(key);\n const filename = options.filename ?? basename(key);\n const localPath = join(options.outputDir, filename);\n\n return await Bun.write(localPath, arrayBuffer);\n }\n\n public async getAsJson<T = unknown>(key: string): Promise<T> {\n try {\n const { stream } = await BunnyStorageSDK.file.download(this.storageZone, this.buildFilePath(key));\n\n return await new Response(stream as unknown as BodyInit).json();\n } catch (error) {\n throw new StorageException(\n `Failed to get file as JSON: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n { key },\n );\n }\n }\n\n public async getAsArrayBuffer(key: string): Promise<ArrayBuffer> {\n try {\n const { stream } = await BunnyStorageSDK.file.download(this.storageZone, this.buildFilePath(key));\n\n return await new Response(stream as unknown as BodyInit).arrayBuffer();\n } catch (error) {\n throw new StorageException(\n `Failed to get file as ArrayBuffer: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n { key },\n );\n }\n }\n\n public getAsStream(key: string): ReadableStream {\n const filePath = this.buildFilePath(key);\n\n const { readable, writable } = new TransformStream();\n\n BunnyStorageSDK.file\n .download(this.storageZone, filePath)\n .then(({ stream }) => {\n (stream as unknown as ReadableStream).pipeTo(writable);\n })\n .catch((error) => {\n writable.abort(\n new StorageException(\n `Failed to get file as stream: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n { key },\n ),\n );\n });\n\n return readable;\n }\n\n private buildFilePath(key: string): string {\n return this.bucket ? `/${this.bucket}/${key}` : `/${key}`;\n }\n\n private async toReadableStream(\n content: string | ArrayBufferView | ArrayBuffer | SharedArrayBuffer | Request | Response | BunFile | S3File | Blob,\n ): Promise<{ stream: ReadableStream<Uint8Array>; length: number }> {\n if (typeof content === \"string\") {\n const encoded = new TextEncoder().encode(content);\n return { stream: new Blob([encoded]).stream(), length: encoded.length };\n }\n\n if (content instanceof ArrayBuffer) {\n return { stream: new Blob([content]).stream(), length: content.byteLength };\n }\n\n if (content instanceof SharedArrayBuffer) {\n const uint8Array = new Uint8Array(content);\n const copied = new Uint8Array(uint8Array.length);\n copied.set(uint8Array);\n return { stream: new Blob([copied]).stream(), length: content.byteLength };\n }\n\n if (ArrayBuffer.isView(content)) {\n const view = new Uint8Array(content.buffer as ArrayBuffer, content.byteOffset, content.byteLength);\n return { stream: new Blob([view]).stream(), length: content.byteLength };\n }\n\n if (content instanceof Blob) {\n return { stream: content.stream(), length: content.size };\n }\n\n if (content instanceof Request || content instanceof Response) {\n const arrayBuffer = await content.arrayBuffer();\n return { stream: new Blob([arrayBuffer]).stream(), length: arrayBuffer.byteLength };\n }\n\n if (typeof content === \"object\" && content !== null && \"arrayBuffer\" in content) {\n const fileContent = content as BunFile | S3File;\n const arrayBuffer = await fileContent.arrayBuffer();\n return { stream: new Blob([arrayBuffer]).stream(), length: arrayBuffer.byteLength };\n }\n\n throw new StorageException(\"Unsupported content type for upload\", \"UNSUPPORTED_CONTENT_TYPE\");\n }\n}\n",
6
6
  "import { container, EContainerScope } from \"@ooneex/container\";\nimport type { StorageClassType } from \"./types\";\n\nexport const decorator = {\n storage: (scope: EContainerScope = EContainerScope.Singleton) => {\n return (target: StorageClassType): void => {\n container.add(target, scope);\n };\n },\n};\n",
7
7
  "import { Exception } from \"@ooneex/exception\";\nimport { HttpStatus } from \"@ooneex/http-status\";\n\nexport class StorageException extends Exception {\n constructor(message: string, key: string, data: Record<string, unknown> = {}) {\n super(message, {\n key,\n status: HttpStatus.Code.InternalServerError,\n data,\n });\n this.name = \"StorageException\";\n }\n}\n",
8
8
  "import { AppEnv } from \"@ooneex/app-env\";\nimport { inject } from \"@ooneex/container\";\nimport type { S3Options } from \"bun\";\nimport { decorator } from \"./decorators\";\nimport { Storage } from \"./Storage\";\nimport { StorageException } from \"./StorageException\";\n\n@decorator.storage()\nexport class CloudflareStorage extends Storage {\n protected bucket: string;\n private readonly accessKey: string;\n private readonly secretKey: string;\n private readonly endpoint: string;\n private readonly region: string;\n\n constructor(@inject(AppEnv) private readonly env: AppEnv) {\n super();\n\n const accessKey = this.env.STORAGE_CLOUDFLARE_ACCESS_KEY;\n const secretKey = this.env.STORAGE_CLOUDFLARE_SECRET_KEY;\n const endpoint = this.env.STORAGE_CLOUDFLARE_ENDPOINT;\n\n if (!accessKey) {\n throw new StorageException(\n \"Cloudflare access key is required. Please provide an access key either through the constructor options or set the STORAGE_CLOUDFLARE_ACCESS_KEY environment variable.\",\n \"CONFIG_REQUIRED\",\n );\n }\n if (!secretKey) {\n throw new StorageException(\n \"Cloudflare secret key is required. Please provide a secret key either through the constructor options or set the STORAGE_CLOUDFLARE_SECRET_KEY environment variable.\",\n \"CONFIG_REQUIRED\",\n );\n }\n if (!endpoint) {\n throw new StorageException(\n \"Cloudflare endpoint is required. Please provide an endpoint either through the constructor options or set the STORAGE_CLOUDFLARE_ENDPOINT environment variable.\",\n \"CONFIG_REQUIRED\",\n );\n }\n\n this.accessKey = accessKey;\n this.secretKey = secretKey;\n this.endpoint = endpoint;\n this.region = this.env.STORAGE_CLOUDFLARE_REGION || \"EEUR\";\n }\n\n public getOptions(): S3Options {\n return {\n accessKeyId: this.accessKey,\n secretAccessKey: this.secretKey,\n endpoint: this.endpoint,\n bucket: this.bucket,\n region: this.region,\n };\n }\n}\n",
9
9
  "import { readdir } from \"node:fs/promises\";\nimport { basename, join } from \"node:path\";\nimport type { BunFile, S3File, S3Options } from \"bun\";\nimport type { GetFileOptionsType, IStorage, PutDirOptionsType } from \"./types\";\n\nexport abstract class Storage implements IStorage {\n protected client: Bun.S3Client | null = null;\n public abstract getOptions(): S3Options;\n protected abstract bucket: string;\n\n public getBucket(): string {\n return this.bucket;\n }\n\n public setBucket(name: string): this {\n this.bucket = name;\n this.client = new Bun.S3Client(this.getOptions());\n\n return this;\n }\n\n public async list(): Promise<string[]> {\n const client = this.getClient();\n\n return (await client.list()).contents?.map((content) => content.key) || [];\n }\n\n public async clearBucket(): Promise<this> {\n const client = this.getClient();\n const keys = await this.list();\n\n await Promise.all(keys.map((key) => client.delete(key)));\n\n return this;\n }\n\n public async exists(key: string): Promise<boolean> {\n const client = this.getClient();\n\n return await client.exists(key);\n }\n\n public async delete(key: string): Promise<void> {\n const client = this.getClient();\n\n await client.delete(key);\n }\n\n public async putFile(key: string, localPath: string): Promise<number> {\n const file = Bun.file(localPath);\n\n return await this.put(key, file);\n }\n\n public async putDir(bucket: string, options: PutDirOptionsType): Promise<number> {\n const { path, filter } = options;\n const entries = await readdir(path, { withFileTypes: true });\n\n const tasks: Promise<number>[] = [];\n\n for (const entry of entries) {\n const entryLocalPath = join(path, entry.name);\n const entryKey = bucket ? `${bucket}/${entry.name}` : entry.name;\n\n if (filter && !filter.test(entryLocalPath)) {\n continue;\n }\n\n if (entry.isDirectory()) {\n const subOptions: PutDirOptionsType = { path: entryLocalPath };\n if (filter) {\n subOptions.filter = filter;\n }\n tasks.push(this.putDir(entryKey, subOptions));\n } else {\n tasks.push(this.putFile(entryKey, entryLocalPath));\n }\n }\n\n const results = await Promise.all(tasks);\n\n return results.reduce((sum, bytes) => sum + bytes, 0);\n }\n\n public async put(\n key: string,\n content: string | ArrayBuffer | SharedArrayBuffer | Request | Response | BunFile | S3File | Blob,\n ): Promise<number> {\n const s3file: S3File = this.getS3File(key);\n\n return await s3file.write(content);\n }\n\n public async getFile(key: string, options: GetFileOptionsType): Promise<number> {\n const arrayBuffer = await this.getAsArrayBuffer(key);\n const filename = options.filename ?? basename(key);\n const localPath = join(options.outputDir, filename);\n\n return await Bun.write(localPath, arrayBuffer);\n }\n\n public async getAsJson<T>(key: string): Promise<T> {\n const s3file: S3File = this.getS3File(key);\n\n return await s3file.json();\n }\n\n public async getAsArrayBuffer(key: string): Promise<ArrayBuffer> {\n const s3file: S3File = this.getS3File(key);\n\n return await s3file.arrayBuffer();\n }\n\n public getAsStream(key: string): ReadableStream {\n const s3file: S3File = this.getS3File(key);\n\n return s3file.stream();\n }\n\n protected getClient(): Bun.S3Client {\n if (!this.client) {\n this.client = new Bun.S3Client(this.getOptions());\n }\n\n return this.client;\n }\n\n protected getS3File(path: string): S3File {\n const client = this.getClient();\n\n return client.file(path);\n }\n}\n",
10
- "import { existsSync, mkdirSync } from \"node:fs\";\nimport { mkdir, readdir, rm, rmdir } from \"node:fs/promises\";\nimport { basename, dirname, join } from \"node:path\";\nimport { AppEnv } from \"@ooneex/app-env\";\nimport { inject } from \"@ooneex/container\";\nimport type { BunFile, S3File, S3Options } from \"bun\";\nimport { decorator } from \"./decorators\";\nimport { Storage } from \"./Storage\";\nimport { StorageException } from \"./StorageException\";\nimport type { GetFileOptionsType } from \"./types\";\n\n@decorator.storage()\nexport class FilesystemStorage extends Storage {\n protected bucket: string;\n private readonly storagePath: string;\n\n constructor(@inject(AppEnv) private readonly env: AppEnv) {\n super();\n\n const basePath = this.env.FILESYSTEM_STORAGE_PATH;\n\n if (!basePath) {\n throw new StorageException(\n \"Base path is required. Please provide a base path either through the constructor options or set the FILESYSTEM_STORAGE_PATH environment variable.\",\n \"STORAGE_ROOT_DIR_REQUIRED\",\n );\n }\n\n this.storagePath = basePath;\n\n try {\n if (!existsSync(basePath)) {\n mkdirSync(basePath, { recursive: true });\n }\n } catch (error) {\n throw new StorageException(\n `Failed to create base storage directory at ${basePath}: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_CONFIG_REQUIRED\",\n );\n }\n }\n\n public getOptions(): S3Options {\n return {\n accessKeyId: \"filesystem\",\n secretAccessKey: \"filesystem\",\n endpoint: this.storagePath,\n bucket: this.bucket,\n region: \"local\",\n };\n }\n\n private getBucketPath(): string {\n if (!this.bucket) {\n throw new StorageException(\"Bucket name is required. Please call setBucket() first.\", \"STORAGE_BUCKET_REQUIRED\");\n }\n return join(this.storagePath, this.bucket);\n }\n\n private getFilePath(key: string): string {\n return join(this.getBucketPath(), key);\n }\n\n public override setBucket(name: string): this {\n this.bucket = name;\n\n const bucketPath = this.getBucketPath();\n try {\n if (!existsSync(bucketPath)) {\n mkdirSync(bucketPath, { recursive: true });\n }\n } catch (error) {\n throw new StorageException(\n `Failed to create bucket directory at ${bucketPath}: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_UPLOAD_FAILED\",\n );\n }\n\n return this;\n }\n\n public override async list(): Promise<string[]> {\n const bucketPath = this.getBucketPath();\n\n if (!existsSync(bucketPath)) {\n return [];\n }\n\n try {\n const files = await this.listFilesRecursive(bucketPath, bucketPath);\n return files;\n } catch (error) {\n throw new StorageException(\n `Failed to list files in bucket: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_LIST_FAILED\",\n );\n }\n }\n\n private async listFilesRecursive(dir: string, baseDir: string): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true });\n\n const results = await Promise.all(\n entries.map(async (entry) => {\n const fullPath = join(dir, entry.name);\n\n if (entry.isDirectory()) {\n return this.listFilesRecursive(fullPath, baseDir);\n }\n\n return [fullPath.substring(baseDir.length + 1)];\n }),\n );\n\n return results.flat();\n }\n\n public override async clearBucket(): Promise<this> {\n const bucketPath = this.getBucketPath();\n\n if (!existsSync(bucketPath)) {\n return this;\n }\n\n try {\n await rm(bucketPath, { recursive: true });\n await mkdir(bucketPath, { recursive: true });\n } catch (error) {\n throw new StorageException(`Failed to clear bucket: ${error instanceof Error ? error.message : String(error)}`, \"STORAGE_CLEAR_FAILED\");\n }\n\n return this;\n }\n\n public override async exists(key: string): Promise<boolean> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n return await file.exists();\n }\n\n public override async delete(key: string): Promise<void> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n\n if (!(await file.exists())) {\n return;\n }\n\n try {\n await file.delete();\n\n let parentDir = dirname(filePath);\n const bucketPath = this.getBucketPath();\n\n while (parentDir !== bucketPath && parentDir !== this.storagePath) {\n try {\n const entries = await readdir(parentDir);\n if (entries.length === 0) {\n await rmdir(parentDir);\n parentDir = dirname(parentDir);\n } else {\n break;\n }\n } catch {\n break;\n }\n }\n } catch (error) {\n throw new StorageException(\n `Failed to delete file ${key}: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DELETE_FAILED\",\n );\n }\n }\n\n public override async putFile(key: string, localPath: string): Promise<number> {\n const file = Bun.file(localPath);\n return await this.put(key, file);\n }\n\n public override async put(\n key: string,\n content: string | ArrayBuffer | SharedArrayBuffer | Request | Response | BunFile | S3File | Blob,\n ): Promise<number> {\n const filePath = this.getFilePath(key);\n const dir = dirname(filePath);\n\n try {\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n } catch (error) {\n throw new StorageException(\n `Failed to create directory ${dir}: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_UPLOAD_FAILED\",\n );\n }\n\n try {\n let bytesWritten: number;\n\n if (typeof content === \"string\") {\n bytesWritten = await Bun.write(filePath, content);\n } else if (content instanceof ArrayBuffer) {\n bytesWritten = await Bun.write(filePath, content);\n } else if (content instanceof SharedArrayBuffer) {\n const arrayBuffer = new ArrayBuffer(content.byteLength);\n new Uint8Array(arrayBuffer).set(new Uint8Array(content));\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n } else if (content instanceof Request) {\n const arrayBuffer = await content.arrayBuffer();\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n } else if (content instanceof Response) {\n const arrayBuffer = await content.arrayBuffer();\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n } else if (content instanceof Blob) {\n bytesWritten = await Bun.write(filePath, content);\n } else {\n const arrayBuffer = await (content as BunFile | S3File).arrayBuffer();\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n }\n\n return bytesWritten;\n } catch (error) {\n throw new StorageException(\n `Failed to write file ${key}: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_UPLOAD_FAILED\",\n );\n }\n }\n\n public override async getFile(key: string, options: GetFileOptionsType): Promise<number> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n\n if (!(await file.exists())) {\n throw new StorageException(`File ${key} does not exist`, \"FILE_NOT_FOUND\");\n }\n\n const filename = options.filename ?? basename(key);\n const localPath = join(options.outputDir, filename);\n const dir = dirname(localPath);\n\n try {\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n } catch (error) {\n throw new StorageException(\n `Failed to create directory ${dir}: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n );\n }\n\n try {\n return await Bun.write(localPath, file);\n } catch (error) {\n throw new StorageException(\n `Failed to save file ${key} to ${localPath}: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n );\n }\n }\n\n public override async getAsJson<T>(key: string): Promise<T> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n\n if (!(await file.exists())) {\n throw new StorageException(`File ${key} does not exist`, \"FILE_NOT_FOUND\");\n }\n\n try {\n return await file.json();\n } catch (error) {\n throw new StorageException(\n `Failed to read file ${key} as JSON: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n );\n }\n }\n\n public override async getAsArrayBuffer(key: string): Promise<ArrayBuffer> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n\n if (!(await file.exists())) {\n throw new StorageException(`File ${key} does not exist`, \"FILE_NOT_FOUND\");\n }\n\n try {\n return await file.arrayBuffer();\n } catch (error) {\n throw new StorageException(\n `Failed to read file ${key} as ArrayBuffer: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n );\n }\n }\n\n public override getAsStream(key: string): ReadableStream {\n const filePath = this.getFilePath(key);\n\n if (!existsSync(filePath)) {\n throw new StorageException(`File ${key} does not exist`, \"FILE_NOT_FOUND\");\n }\n\n const file = Bun.file(filePath);\n\n try {\n return file.stream();\n } catch (error) {\n throw new StorageException(\n `Failed to read file ${key} as stream: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n );\n }\n }\n}\n"
10
+ "import { existsSync, mkdirSync } from \"node:fs\";\nimport { mkdir, readdir, rm, rmdir } from \"node:fs/promises\";\nimport { basename, dirname, join } from \"node:path\";\nimport { AppEnv } from \"@ooneex/app-env\";\nimport { inject } from \"@ooneex/container\";\nimport type { BunFile, S3File, S3Options } from \"bun\";\nimport { decorator } from \"./decorators\";\nimport { Storage } from \"./Storage\";\nimport { StorageException } from \"./StorageException\";\nimport type { GetFileOptionsType } from \"./types\";\n\n@decorator.storage()\nexport class FilesystemStorage extends Storage {\n protected bucket: string;\n private readonly storagePath: string;\n\n constructor(@inject(AppEnv) private readonly env: AppEnv) {\n super();\n\n const basePath = this.env.FILESYSTEM_STORAGE_PATH;\n\n if (!basePath) {\n throw new StorageException(\n \"Base path is required. Please provide a base path either through the constructor options or set the FILESYSTEM_STORAGE_PATH environment variable.\",\n \"STORAGE_ROOT_DIR_REQUIRED\",\n );\n }\n\n this.storagePath = basePath;\n\n try {\n if (!existsSync(basePath)) {\n mkdirSync(basePath, { recursive: true });\n }\n } catch (error) {\n throw new StorageException(\n `Failed to create base storage directory at ${basePath}: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_CONFIG_REQUIRED\",\n );\n }\n }\n\n public getOptions(): S3Options {\n return {\n accessKeyId: \"filesystem\",\n secretAccessKey: \"filesystem\",\n endpoint: this.storagePath,\n bucket: this.bucket,\n region: \"local\",\n };\n }\n\n private getBucketPath(): string {\n if (!this.bucket) {\n throw new StorageException(\"Bucket name is required. Please call setBucket() first.\", \"STORAGE_BUCKET_REQUIRED\");\n }\n return join(this.storagePath, this.bucket);\n }\n\n private getFilePath(key: string): string {\n return join(this.getBucketPath(), key);\n }\n\n public override setBucket(name: string): this {\n this.bucket = name;\n\n const bucketPath = this.getBucketPath();\n try {\n if (!existsSync(bucketPath)) {\n mkdirSync(bucketPath, { recursive: true });\n }\n } catch (error) {\n throw new StorageException(\n `Failed to create bucket directory at ${bucketPath}: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_UPLOAD_FAILED\",\n );\n }\n\n return this;\n }\n\n public override async list(): Promise<string[]> {\n const bucketPath = this.getBucketPath();\n\n if (!existsSync(bucketPath)) {\n return [];\n }\n\n try {\n const files = await this.listFilesRecursive(bucketPath, bucketPath);\n return files;\n } catch (error) {\n throw new StorageException(\n `Failed to list files in bucket: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_LIST_FAILED\",\n );\n }\n }\n\n private async listFilesRecursive(dir: string, baseDir: string): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true });\n\n const results = await Promise.all(\n entries.map(async (entry) => {\n const fullPath = join(dir, entry.name);\n\n if (entry.isDirectory()) {\n return this.listFilesRecursive(fullPath, baseDir);\n }\n\n return [fullPath.substring(baseDir.length + 1)];\n }),\n );\n\n return results.flat();\n }\n\n public override async clearBucket(): Promise<this> {\n const bucketPath = this.getBucketPath();\n\n if (!existsSync(bucketPath)) {\n return this;\n }\n\n try {\n await rm(bucketPath, { recursive: true });\n await mkdir(bucketPath, { recursive: true });\n } catch (error) {\n throw new StorageException(\n `Failed to clear bucket: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_CLEAR_FAILED\",\n );\n }\n\n return this;\n }\n\n public override async exists(key: string): Promise<boolean> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n return await file.exists();\n }\n\n public override async delete(key: string): Promise<void> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n\n if (!(await file.exists())) {\n return;\n }\n\n try {\n await file.delete();\n\n let parentDir = dirname(filePath);\n const bucketPath = this.getBucketPath();\n\n while (parentDir !== bucketPath && parentDir !== this.storagePath) {\n try {\n const entries = await readdir(parentDir);\n if (entries.length === 0) {\n await rmdir(parentDir);\n parentDir = dirname(parentDir);\n } else {\n break;\n }\n } catch {\n break;\n }\n }\n } catch (error) {\n throw new StorageException(\n `Failed to delete file ${key}: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DELETE_FAILED\",\n );\n }\n }\n\n public override async putFile(key: string, localPath: string): Promise<number> {\n const file = Bun.file(localPath);\n return await this.put(key, file);\n }\n\n public override async put(\n key: string,\n content: string | ArrayBuffer | SharedArrayBuffer | Request | Response | BunFile | S3File | Blob,\n ): Promise<number> {\n const filePath = this.getFilePath(key);\n const dir = dirname(filePath);\n\n try {\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n } catch (error) {\n throw new StorageException(\n `Failed to create directory ${dir}: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_UPLOAD_FAILED\",\n );\n }\n\n try {\n let bytesWritten: number;\n\n if (typeof content === \"string\") {\n bytesWritten = await Bun.write(filePath, content);\n } else if (content instanceof ArrayBuffer) {\n bytesWritten = await Bun.write(filePath, content);\n } else if (content instanceof SharedArrayBuffer) {\n const arrayBuffer = new ArrayBuffer(content.byteLength);\n new Uint8Array(arrayBuffer).set(new Uint8Array(content));\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n } else if (content instanceof Request) {\n const arrayBuffer = await content.arrayBuffer();\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n } else if (content instanceof Response) {\n const arrayBuffer = await content.arrayBuffer();\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n } else if (content instanceof Blob) {\n bytesWritten = await Bun.write(filePath, content);\n } else {\n const arrayBuffer = await (content as BunFile | S3File).arrayBuffer();\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n }\n\n return bytesWritten;\n } catch (error) {\n throw new StorageException(\n `Failed to write file ${key}: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_UPLOAD_FAILED\",\n );\n }\n }\n\n public override async getFile(key: string, options: GetFileOptionsType): Promise<number> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n\n if (!(await file.exists())) {\n throw new StorageException(`File ${key} does not exist`, \"FILE_NOT_FOUND\");\n }\n\n const filename = options.filename ?? basename(key);\n const localPath = join(options.outputDir, filename);\n const dir = dirname(localPath);\n\n try {\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n } catch (error) {\n throw new StorageException(\n `Failed to create directory ${dir}: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n );\n }\n\n try {\n return await Bun.write(localPath, file);\n } catch (error) {\n throw new StorageException(\n `Failed to save file ${key} to ${localPath}: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n );\n }\n }\n\n public override async getAsJson<T>(key: string): Promise<T> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n\n if (!(await file.exists())) {\n throw new StorageException(`File ${key} does not exist`, \"FILE_NOT_FOUND\");\n }\n\n try {\n return await file.json();\n } catch (error) {\n throw new StorageException(\n `Failed to read file ${key} as JSON: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n );\n }\n }\n\n public override async getAsArrayBuffer(key: string): Promise<ArrayBuffer> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n\n if (!(await file.exists())) {\n throw new StorageException(`File ${key} does not exist`, \"FILE_NOT_FOUND\");\n }\n\n try {\n return await file.arrayBuffer();\n } catch (error) {\n throw new StorageException(\n `Failed to read file ${key} as ArrayBuffer: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n );\n }\n }\n\n public override getAsStream(key: string): ReadableStream {\n const filePath = this.getFilePath(key);\n\n if (!existsSync(filePath)) {\n throw new StorageException(`File ${key} does not exist`, \"FILE_NOT_FOUND\");\n }\n\n const file = Bun.file(filePath);\n\n try {\n return file.stream();\n } catch (error) {\n throw new StorageException(\n `Failed to read file ${key} as stream: ${error instanceof Error ? error.message : String(error)}`,\n \"STORAGE_DOWNLOAD_FAILED\",\n );\n }\n }\n}\n"
11
11
  ],
12
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AACA;AAEA;AACA;AACA;;;ACLA;AAGO,IAAM,YAAY;AAAA,EACvB,SAAS,CAAC,QAAyB,gBAAgB,cAAc;AAAA,IAC/D,OAAO,CAAC,WAAmC;AAAA,MACzC,UAAU,IAAI,QAAQ,KAAK;AAAA;AAAA;AAGjC;;;ACTA;AACA;AAAA;AAEO,MAAM,yBAAyB,UAAU;AAAA,EAC9C,WAAW,CAAC,SAAiB,KAAa,OAAgC,CAAC,GAAG;AAAA,IAC5E,MAAM,SAAS;AAAA,MACb;AAAA,MACA,QAAQ,WAAW,KAAK;AAAA,MACxB;AAAA,IACF,CAAC;AAAA,IACD,KAAK,OAAO;AAAA;AAEhB;;;AFCA,IAAM,aAA6E;AAAA,EACjF,IAAoB,wBAAQ,cAAc;AAAA,EAC1C,IAAoB,wBAAQ,cAAc;AAAA,EAC1C,IAAoB,wBAAQ,cAAc;AAAA,EAC1C,IAAoB,wBAAQ,cAAc;AAAA,EAC1C,IAAoB,wBAAQ,cAAc;AAAA,EAC1C,IAAoB,wBAAQ,cAAc;AAAA,EAC1C,IAAoB,wBAAQ,cAAc;AAAA,EAC1C,IAAoB,wBAAQ,cAAc;AAAA,EAC1C,KAAqB,wBAAQ,cAAc;AAC7C;AAAA;AAGO,MAAM,aAAiC;AAAA,EAIC;AAAA,EAHrC,SAAS;AAAA,EACA;AAAA,EAEjB,WAAW,CAAkC,KAAa;AAAA,IAAb;AAAA,IAC3C,MAAM,YAAY,KAAK,IAAI;AAAA,IAC3B,MAAM,cAAc,KAAK,IAAI;AAAA,IAC7B,MAAM,SAAS,KAAK,IAAI;AAAA,IAExB,IAAI,CAAC,WAAW;AAAA,MACd,MAAM,IAAI,iBACR,+JACA,kBACF;AAAA,IACF;AAAA,IACA,IAAI,CAAC,aAAa;AAAA,MAChB,MAAM,IAAI,iBACR,oKACA,uBACF;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,WAAW,UAAU;AAAA,IACvC,KAAK,cAA8B,qBAAK,uBAAuB,WAAW,aAAa,SAAS;AAAA;AAAA,EAG3F,SAAS,GAAW;AAAA,IACzB,OAAO,KAAK;AAAA;AAAA,EAGP,SAAS,CAAC,MAAoB;AAAA,IACnC,KAAK,SAAS;AAAA,IAEd,OAAO;AAAA;AAAA,OAGI,KAAI,GAAsB;AAAA,IACrC,MAAM,OAAO,KAAK,SAAS,IAAI,KAAK,YAAY;AAAA,IAEhD,IAAI;AAAA,MACF,MAAM,QAAQ,MAAsB,qBAAK,KAAK,KAAK,aAAa,IAAI;AAAA,MAEpE,OAAO,MAAM,OAAO,CAAC,UAAS,CAAC,MAAK,WAAW,EAAE,IAAI,CAAC,UAAS,MAAK,UAAU;AAAA,MAC9E,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBAAiB,yBAAyB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KAAK,uBAAuB;AAAA,QACnI;AAAA,MACF,CAAC;AAAA;AAAA;AAAA,OAIQ,YAAW,GAAkB;AAAA,IACxC,MAAM,OAAO,MAAM,KAAK,KAAK;AAAA,IAE7B,MAAM,QAAQ,IAAI,KAAK,IAAI,CAAC,QAAQ,KAAK,OAAO,GAAG,CAAC,CAAC;AAAA,IAErD,OAAO;AAAA;AAAA,OAGI,OAAM,CAAC,KAA+B;AAAA,IACjD,IAAI;AAAA,MACF,MAAsB,qBAAK,IAAI,KAAK,aAAa,KAAK,cAAc,GAAG,CAAC;AAAA,MAExE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA;AAAA;AAAA,OAIE,OAAM,CAAC,KAA4B;AAAA,IAC9C,IAAI;AAAA,MACF,MAAsB,qBAAK,OAAO,KAAK,aAAa,KAAK,cAAc,GAAG,CAAC;AAAA,MAC3E,MAAM;AAAA;AAAA,OAKG,QAAO,CAAC,KAAa,WAAoC;AAAA,IACpE,MAAM,QAAO,IAAI,KAAK,SAAS;AAAA,IAE/B,OAAO,MAAM,KAAK,IAAI,KAAK,KAAI;AAAA;AAAA,OAGpB,OAAM,CAAC,QAAgB,SAA6C;AAAA,IAC/E,QAAQ,MAAM,WAAW;AAAA,IACzB,MAAM,UAAU,MAAM,QAAQ,MAAM,EAAE,eAAe,KAAK,CAAC;AAAA,IAE3D,MAAM,QAA2B,CAAC;AAAA,IAElC,WAAW,SAAS,SAAS;AAAA,MAC3B,MAAM,iBAAiB,KAAK,MAAM,MAAM,IAAI;AAAA,MAC5C,MAAM,WAAW,SAAS,GAAG,UAAU,MAAM,SAAS,MAAM;AAAA,MAE5D,IAAI,UAAU,CAAC,OAAO,KAAK,cAAc,GAAG;AAAA,QAC1C;AAAA,MACF;AAAA,MAEA,IAAI,MAAM,YAAY,GAAG;AAAA,QACvB,MAAM,aAAgC,EAAE,MAAM,eAAe;AAAA,QAC7D,IAAI,QAAQ;AAAA,UACV,WAAW,SAAS;AAAA,QACtB;AAAA,QACA,MAAM,KAAK,KAAK,OAAO,UAAU,UAAU,CAAC;AAAA,MAC9C,EAAO;AAAA,QACL,MAAM,KAAK,KAAK,QAAQ,UAAU,cAAc,CAAC;AAAA;AAAA,IAErD;AAAA,IAEA,MAAM,UAAU,MAAM,QAAQ,IAAI,KAAK;AAAA,IAEvC,OAAO,QAAQ,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC;AAAA;AAAA,OAGzC,IAAG,CACd,KACA,SACiB;AAAA,IACjB,QAAQ,QAAQ,WAAW,MAAM,KAAK,iBAAiB,OAAO;AAAA,IAC9D,MAAM,WAAW,KAAK,cAAc,GAAG;AAAA,IAEvC,IAAI;AAAA,MACF,MAAsB,qBAAK,OACzB,KAAK,aACL,UACA,MACF;AAAA,MACA,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBAAiB,0BAA0B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KAAK,yBAAyB;AAAA,QACtI;AAAA,MACF,CAAC;AAAA;AAAA,IAGH,OAAO;AAAA;AAAA,OAGI,QAAO,CAAC,KAAa,SAA8C;AAAA,IAC9E,MAAM,cAAc,MAAM,KAAK,iBAAiB,GAAG;AAAA,IACnD,MAAM,WAAW,QAAQ,YAAY,SAAS,GAAG;AAAA,IACjD,MAAM,YAAY,KAAK,QAAQ,WAAW,QAAQ;AAAA,IAElD,OAAO,MAAM,IAAI,MAAM,WAAW,WAAW;AAAA;AAAA,OAGlC,UAAsB,CAAC,KAAyB;AAAA,IAC3D,IAAI;AAAA,MACF,QAAQ,WAAW,MAAsB,qBAAK,SAAS,KAAK,aAAa,KAAK,cAAc,GAAG,CAAC;AAAA,MAEhG,OAAO,MAAM,IAAI,SAAS,MAA6B,EAAE,KAAK;AAAA,MAC9D,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,+BAA+B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KACpF,2BACA,EAAE,IAAI,CACR;AAAA;AAAA;AAAA,OAIS,iBAAgB,CAAC,KAAmC;AAAA,IAC/D,IAAI;AAAA,MACF,QAAQ,WAAW,MAAsB,qBAAK,SAAS,KAAK,aAAa,KAAK,cAAc,GAAG,CAAC;AAAA,MAEhG,OAAO,MAAM,IAAI,SAAS,MAA6B,EAAE,YAAY;AAAA,MACrE,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,sCAAsC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KAC3F,2BACA,EAAE,IAAI,CACR;AAAA;AAAA;AAAA,EAIG,WAAW,CAAC,KAA6B;AAAA,IAC9C,MAAM,WAAW,KAAK,cAAc,GAAG;AAAA,IAEvC,QAAQ,UAAU,aAAa,IAAI;AAAA,IAEnB,qBACb,SAAS,KAAK,aAAa,QAAQ,EACnC,KAAK,GAAG,aAAa;AAAA,MACnB,OAAqC,OAAO,QAAQ;AAAA,KACtD,EACA,MAAM,CAAC,UAAU;AAAA,MAChB,SAAS,MACP,IAAI,iBACF,iCAAiC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KACtF,2BACA,EAAE,IAAI,CACR,CACF;AAAA,KACD;AAAA,IAEH,OAAO;AAAA;AAAA,EAGD,aAAa,CAAC,KAAqB;AAAA,IACzC,OAAO,KAAK,SAAS,IAAI,KAAK,UAAU,QAAQ,IAAI;AAAA;AAAA,OAGxC,iBAAgB,CAC5B,SACiE;AAAA,IACjE,IAAI,OAAO,YAAY,UAAU;AAAA,MAC/B,MAAM,UAAU,IAAI,YAAY,EAAE,OAAO,OAAO;AAAA,MAChD,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,QAAQ,OAAO;AAAA,IACxE;AAAA,IAEA,IAAI,mBAAmB,aAAa;AAAA,MAClC,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,QAAQ,WAAW;AAAA,IAC5E;AAAA,IAEA,IAAI,mBAAmB,mBAAmB;AAAA,MACxC,MAAM,aAAa,IAAI,WAAW,OAAO;AAAA,MACzC,MAAM,SAAS,IAAI,WAAW,WAAW,MAAM;AAAA,MAC/C,OAAO,IAAI,UAAU;AAAA,MACrB,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,QAAQ,WAAW;AAAA,IAC3E;AAAA,IAEA,IAAI,YAAY,OAAO,OAAO,GAAG;AAAA,MAC/B,MAAM,OAAO,IAAI,WAAW,QAAQ,QAAuB,QAAQ,YAAY,QAAQ,UAAU;AAAA,MACjG,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,QAAQ,WAAW;AAAA,IACzE;AAAA,IAEA,IAAI,mBAAmB,MAAM;AAAA,MAC3B,OAAO,EAAE,QAAQ,QAAQ,OAAO,GAAG,QAAQ,QAAQ,KAAK;AAAA,IAC1D;AAAA,IAEA,IAAI,mBAAmB,WAAW,mBAAmB,UAAU;AAAA,MAC7D,MAAM,cAAc,MAAM,QAAQ,YAAY;AAAA,MAC9C,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,QAAQ,YAAY,WAAW;AAAA,IACpF;AAAA,IAEA,IAAI,OAAO,YAAY,YAAY,YAAY,QAAQ,iBAAiB,SAAS;AAAA,MAC/E,MAAM,cAAc;AAAA,MACpB,MAAM,cAAc,MAAM,YAAY,YAAY;AAAA,MAClD,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,QAAQ,YAAY,WAAW;AAAA,IACpF;AAAA,IAEA,MAAM,IAAI,iBAAiB,uCAAuC,0BAA0B;AAAA;AAEhG;AA9Oa,eAAN;AAAA,EADN,UAAU,QAAQ;AAAA,EAKJ,kCAAO,MAAM;AAAA,EAJrB;AAAA;AAAA;AAAA,GAAM;;AG1Bb,mBAAS;AACT,mBAAS;;;ACDT,oBAAS;AACT,qBAAS,mBAAU;AAAA;AAIZ,MAAe,QAA4B;AAAA,EACtC,SAA8B;AAAA,EAIjC,SAAS,GAAW;AAAA,IACzB,OAAO,KAAK;AAAA;AAAA,EAGP,SAAS,CAAC,MAAoB;AAAA,IACnC,KAAK,SAAS;AAAA,IACd,KAAK,SAAS,IAAI,IAAI,SAAS,KAAK,WAAW,CAAC;AAAA,IAEhD,OAAO;AAAA;AAAA,OAGI,KAAI,GAAsB;AAAA,IACrC,MAAM,SAAS,KAAK,UAAU;AAAA,IAE9B,QAAQ,MAAM,OAAO,KAAK,GAAG,UAAU,IAAI,CAAC,YAAY,QAAQ,GAAG,KAAK,CAAC;AAAA;AAAA,OAG9D,YAAW,GAAkB;AAAA,IACxC,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,MAAM,OAAO,MAAM,KAAK,KAAK;AAAA,IAE7B,MAAM,QAAQ,IAAI,KAAK,IAAI,CAAC,QAAQ,OAAO,OAAO,GAAG,CAAC,CAAC;AAAA,IAEvD,OAAO;AAAA;AAAA,OAGI,OAAM,CAAC,KAA+B;AAAA,IACjD,MAAM,SAAS,KAAK,UAAU;AAAA,IAE9B,OAAO,MAAM,OAAO,OAAO,GAAG;AAAA;AAAA,OAGnB,OAAM,CAAC,KAA4B;AAAA,IAC9C,MAAM,SAAS,KAAK,UAAU;AAAA,IAE9B,MAAM,OAAO,OAAO,GAAG;AAAA;AAAA,OAGZ,QAAO,CAAC,KAAa,WAAoC;AAAA,IACpE,MAAM,QAAO,IAAI,KAAK,SAAS;AAAA,IAE/B,OAAO,MAAM,KAAK,IAAI,KAAK,KAAI;AAAA;AAAA,OAGpB,OAAM,CAAC,QAAgB,SAA6C;AAAA,IAC/E,QAAQ,MAAM,WAAW;AAAA,IACzB,MAAM,UAAU,MAAM,SAAQ,MAAM,EAAE,eAAe,KAAK,CAAC;AAAA,IAE3D,MAAM,QAA2B,CAAC;AAAA,IAElC,WAAW,SAAS,SAAS;AAAA,MAC3B,MAAM,iBAAiB,MAAK,MAAM,MAAM,IAAI;AAAA,MAC5C,MAAM,WAAW,SAAS,GAAG,UAAU,MAAM,SAAS,MAAM;AAAA,MAE5D,IAAI,UAAU,CAAC,OAAO,KAAK,cAAc,GAAG;AAAA,QAC1C;AAAA,MACF;AAAA,MAEA,IAAI,MAAM,YAAY,GAAG;AAAA,QACvB,MAAM,aAAgC,EAAE,MAAM,eAAe;AAAA,QAC7D,IAAI,QAAQ;AAAA,UACV,WAAW,SAAS;AAAA,QACtB;AAAA,QACA,MAAM,KAAK,KAAK,OAAO,UAAU,UAAU,CAAC;AAAA,MAC9C,EAAO;AAAA,QACL,MAAM,KAAK,KAAK,QAAQ,UAAU,cAAc,CAAC;AAAA;AAAA,IAErD;AAAA,IAEA,MAAM,UAAU,MAAM,QAAQ,IAAI,KAAK;AAAA,IAEvC,OAAO,QAAQ,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC;AAAA;AAAA,OAGzC,IAAG,CACd,KACA,SACiB;AAAA,IACjB,MAAM,SAAiB,KAAK,UAAU,GAAG;AAAA,IAEzC,OAAO,MAAM,OAAO,MAAM,OAAO;AAAA;AAAA,OAGtB,QAAO,CAAC,KAAa,SAA8C;AAAA,IAC9E,MAAM,cAAc,MAAM,KAAK,iBAAiB,GAAG;AAAA,IACnD,MAAM,WAAW,QAAQ,YAAY,UAAS,GAAG;AAAA,IACjD,MAAM,YAAY,MAAK,QAAQ,WAAW,QAAQ;AAAA,IAElD,OAAO,MAAM,IAAI,MAAM,WAAW,WAAW;AAAA;AAAA,OAGlC,UAAY,CAAC,KAAyB;AAAA,IACjD,MAAM,SAAiB,KAAK,UAAU,GAAG;AAAA,IAEzC,OAAO,MAAM,OAAO,KAAK;AAAA;AAAA,OAGd,iBAAgB,CAAC,KAAmC;AAAA,IAC/D,MAAM,SAAiB,KAAK,UAAU,GAAG;AAAA,IAEzC,OAAO,MAAM,OAAO,YAAY;AAAA;AAAA,EAG3B,WAAW,CAAC,KAA6B;AAAA,IAC9C,MAAM,SAAiB,KAAK,UAAU,GAAG;AAAA,IAEzC,OAAO,OAAO,OAAO;AAAA;AAAA,EAGb,SAAS,GAAiB;AAAA,IAClC,IAAI,CAAC,KAAK,QAAQ;AAAA,MAChB,KAAK,SAAS,IAAI,IAAI,SAAS,KAAK,WAAW,CAAC;AAAA,IAClD;AAAA,IAEA,OAAO,KAAK;AAAA;AAAA,EAGJ,SAAS,CAAC,MAAsB;AAAA,IACxC,MAAM,SAAS,KAAK,UAAU;AAAA,IAE9B,OAAO,OAAO,KAAK,IAAI;AAAA;AAE3B;;;AD5HO,MAAM,0BAA0B,QAAQ;AAAA,EAOA;AAAA,EANnC;AAAA,EACO;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAkC,KAAa;AAAA,IACxD,MAAM;AAAA,IADqC;AAAA,IAG3C,MAAM,YAAY,KAAK,IAAI;AAAA,IAC3B,MAAM,YAAY,KAAK,IAAI;AAAA,IAC3B,MAAM,WAAW,KAAK,IAAI;AAAA,IAE1B,IAAI,CAAC,WAAW;AAAA,MACd,MAAM,IAAI,iBACR,yKACA,iBACF;AAAA,IACF;AAAA,IACA,IAAI,CAAC,WAAW;AAAA,MACd,MAAM,IAAI,iBACR,wKACA,iBACF;AAAA,IACF;AAAA,IACA,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,iBACR,mKACA,iBACF;AAAA,IACF;AAAA,IAEA,KAAK,YAAY;AAAA,IACjB,KAAK,YAAY;AAAA,IACjB,KAAK,WAAW;AAAA,IAChB,KAAK,SAAS,KAAK,IAAI,6BAA6B;AAAA;AAAA,EAG/C,UAAU,GAAc;AAAA,IAC7B,OAAO;AAAA,MACL,aAAa,KAAK;AAAA,MAClB,iBAAiB,KAAK;AAAA,MACtB,UAAU,KAAK;AAAA,MACf,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,IACf;AAAA;AAEJ;AAhDa,oBAAN;AAAA,EADN,UAAU,QAAQ;AAAA,EAQJ,mCAAO,OAAM;AAAA,EAPrB;AAAA;AAAA;AAAA,GAAM;;AERb;AACA,2BAAgB;AAChB,qBAAS,4BAAmB;AAC5B,mBAAS;AACT,mBAAS;AAQF,MAAM,0BAA0B,QAAQ;AAAA,EAIA;AAAA,EAHnC;AAAA,EACO;AAAA,EAEjB,WAAW,CAAkC,KAAa;AAAA,IACxD,MAAM;AAAA,IADqC;AAAA,IAG3C,MAAM,WAAW,KAAK,IAAI;AAAA,IAE1B,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,iBACR,qJACA,2BACF;AAAA,IACF;AAAA,IAEA,KAAK,cAAc;AAAA,IAEnB,IAAI;AAAA,MACF,IAAI,CAAC,WAAW,QAAQ,GAAG;AAAA,QACzB,UAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AAAA,MACzC;AAAA,MACA,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,8CAA8C,aAAa,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KAChH,yBACF;AAAA;AAAA;AAAA,EAIG,UAAU,GAAc;AAAA,IAC7B,OAAO;AAAA,MACL,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,UAAU,KAAK;AAAA,MACf,QAAQ,KAAK;AAAA,MACb,QAAQ;AAAA,IACV;AAAA;AAAA,EAGM,aAAa,GAAW;AAAA,IAC9B,IAAI,CAAC,KAAK,QAAQ;AAAA,MAChB,MAAM,IAAI,iBAAiB,2DAA2D,yBAAyB;AAAA,IACjH;AAAA,IACA,OAAO,MAAK,KAAK,aAAa,KAAK,MAAM;AAAA;AAAA,EAGnC,WAAW,CAAC,KAAqB;AAAA,IACvC,OAAO,MAAK,KAAK,cAAc,GAAG,GAAG;AAAA;AAAA,EAGvB,SAAS,CAAC,MAAoB;AAAA,IAC5C,KAAK,SAAS;AAAA,IAEd,MAAM,aAAa,KAAK,cAAc;AAAA,IACtC,IAAI;AAAA,MACF,IAAI,CAAC,WAAW,UAAU,GAAG;AAAA,QAC3B,UAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AAAA,MAC3C;AAAA,MACA,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,wCAAwC,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KAC5G,uBACF;AAAA;AAAA,IAGF,OAAO;AAAA;AAAA,OAGa,KAAI,GAAsB;AAAA,IAC9C,MAAM,aAAa,KAAK,cAAc;AAAA,IAEtC,IAAI,CAAC,WAAW,UAAU,GAAG;AAAA,MAC3B,OAAO,CAAC;AAAA,IACV;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,QAAQ,MAAM,KAAK,mBAAmB,YAAY,UAAU;AAAA,MAClE,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,mCAAmC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KACxF,qBACF;AAAA;AAAA;AAAA,OAIU,mBAAkB,CAAC,KAAa,SAAoC;AAAA,IAChF,MAAM,UAAU,MAAM,SAAQ,KAAK,EAAE,eAAe,KAAK,CAAC;AAAA,IAE1D,MAAM,UAAU,MAAM,QAAQ,IAC5B,QAAQ,IAAI,OAAO,UAAU;AAAA,MAC3B,MAAM,WAAW,MAAK,KAAK,MAAM,IAAI;AAAA,MAErC,IAAI,MAAM,YAAY,GAAG;AAAA,QACvB,OAAO,KAAK,mBAAmB,UAAU,OAAO;AAAA,MAClD;AAAA,MAEA,OAAO,CAAC,SAAS,UAAU,QAAQ,SAAS,CAAC,CAAC;AAAA,KAC/C,CACH;AAAA,IAEA,OAAO,QAAQ,KAAK;AAAA;AAAA,OAGA,YAAW,GAAkB;AAAA,IACjD,MAAM,aAAa,KAAK,cAAc;AAAA,IAEtC,IAAI,CAAC,WAAW,UAAU,GAAG;AAAA,MAC3B,OAAO;AAAA,IACT;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,GAAG,YAAY,EAAE,WAAW,KAAK,CAAC;AAAA,MACxC,MAAM,MAAM,YAAY,EAAE,WAAW,KAAK,CAAC;AAAA,MAC3C,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBAAiB,2BAA2B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KAAK,sBAAsB;AAAA;AAAA,IAGxI,OAAO;AAAA;AAAA,OAGa,OAAM,CAAC,KAA+B;AAAA,IAC1D,MAAM,WAAW,KAAK,YAAY,GAAG;AAAA,IACrC,MAAM,QAAO,IAAI,KAAK,QAAQ;AAAA,IAC9B,OAAO,MAAM,MAAK,OAAO;AAAA;AAAA,OAGL,OAAM,CAAC,KAA4B;AAAA,IACvD,MAAM,WAAW,KAAK,YAAY,GAAG;AAAA,IACrC,MAAM,QAAO,IAAI,KAAK,QAAQ;AAAA,IAE9B,IAAI,CAAE,MAAM,MAAK,OAAO,GAAI;AAAA,MAC1B;AAAA,IACF;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,MAAK,OAAO;AAAA,MAElB,IAAI,YAAY,QAAQ,QAAQ;AAAA,MAChC,MAAM,aAAa,KAAK,cAAc;AAAA,MAEtC,OAAO,cAAc,cAAc,cAAc,KAAK,aAAa;AAAA,QACjE,IAAI;AAAA,UACF,MAAM,UAAU,MAAM,SAAQ,SAAS;AAAA,UACvC,IAAI,QAAQ,WAAW,GAAG;AAAA,YACxB,MAAM,MAAM,SAAS;AAAA,YACrB,YAAY,QAAQ,SAAS;AAAA,UAC/B,EAAO;AAAA,YACL;AAAA;AAAA,UAEF,MAAM;AAAA,UACN;AAAA;AAAA,MAEJ;AAAA,MACA,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,yBAAyB,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KACtF,uBACF;AAAA;AAAA;AAAA,OAIkB,QAAO,CAAC,KAAa,WAAoC;AAAA,IAC7E,MAAM,QAAO,IAAI,KAAK,SAAS;AAAA,IAC/B,OAAO,MAAM,KAAK,IAAI,KAAK,KAAI;AAAA;AAAA,OAGX,IAAG,CACvB,KACA,SACiB;AAAA,IACjB,MAAM,WAAW,KAAK,YAAY,GAAG;AAAA,IACrC,MAAM,MAAM,QAAQ,QAAQ;AAAA,IAE5B,IAAI;AAAA,MACF,IAAI,CAAC,WAAW,GAAG,GAAG;AAAA,QACpB,MAAM,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,MACtC;AAAA,MACA,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,8BAA8B,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KAC3F,uBACF;AAAA;AAAA,IAGF,IAAI;AAAA,MACF,IAAI;AAAA,MAEJ,IAAI,OAAO,YAAY,UAAU;AAAA,QAC/B,eAAe,MAAM,IAAI,MAAM,UAAU,OAAO;AAAA,MAClD,EAAO,SAAI,mBAAmB,aAAa;AAAA,QACzC,eAAe,MAAM,IAAI,MAAM,UAAU,OAAO;AAAA,MAClD,EAAO,SAAI,mBAAmB,mBAAmB;AAAA,QAC/C,MAAM,cAAc,IAAI,YAAY,QAAQ,UAAU;AAAA,QACtD,IAAI,WAAW,WAAW,EAAE,IAAI,IAAI,WAAW,OAAO,CAAC;AAAA,QACvD,eAAe,MAAM,IAAI,MAAM,UAAU,WAAW;AAAA,MACtD,EAAO,SAAI,mBAAmB,SAAS;AAAA,QACrC,MAAM,cAAc,MAAM,QAAQ,YAAY;AAAA,QAC9C,eAAe,MAAM,IAAI,MAAM,UAAU,WAAW;AAAA,MACtD,EAAO,SAAI,mBAAmB,UAAU;AAAA,QACtC,MAAM,cAAc,MAAM,QAAQ,YAAY;AAAA,QAC9C,eAAe,MAAM,IAAI,MAAM,UAAU,WAAW;AAAA,MACtD,EAAO,SAAI,mBAAmB,MAAM;AAAA,QAClC,eAAe,MAAM,IAAI,MAAM,UAAU,OAAO;AAAA,MAClD,EAAO;AAAA,QACL,MAAM,cAAc,MAAO,QAA6B,YAAY;AAAA,QACpE,eAAe,MAAM,IAAI,MAAM,UAAU,WAAW;AAAA;AAAA,MAGtD,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,wBAAwB,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KACrF,uBACF;AAAA;AAAA;AAAA,OAIkB,QAAO,CAAC,KAAa,SAA8C;AAAA,IACvF,MAAM,WAAW,KAAK,YAAY,GAAG;AAAA,IACrC,MAAM,QAAO,IAAI,KAAK,QAAQ;AAAA,IAE9B,IAAI,CAAE,MAAM,MAAK,OAAO,GAAI;AAAA,MAC1B,MAAM,IAAI,iBAAiB,QAAQ,sBAAsB,gBAAgB;AAAA,IAC3E;AAAA,IAEA,MAAM,WAAW,QAAQ,YAAY,UAAS,GAAG;AAAA,IACjD,MAAM,YAAY,MAAK,QAAQ,WAAW,QAAQ;AAAA,IAClD,MAAM,MAAM,QAAQ,SAAS;AAAA,IAE7B,IAAI;AAAA,MACF,IAAI,CAAC,WAAW,GAAG,GAAG;AAAA,QACpB,MAAM,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,MACtC;AAAA,MACA,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,8BAA8B,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KAC3F,yBACF;AAAA;AAAA,IAGF,IAAI;AAAA,MACF,OAAO,MAAM,IAAI,MAAM,WAAW,KAAI;AAAA,MACtC,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,uBAAuB,UAAU,cAAc,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KACpG,yBACF;AAAA;AAAA;AAAA,OAIkB,UAAY,CAAC,KAAyB;AAAA,IAC1D,MAAM,WAAW,KAAK,YAAY,GAAG;AAAA,IACrC,MAAM,QAAO,IAAI,KAAK,QAAQ;AAAA,IAE9B,IAAI,CAAE,MAAM,MAAK,OAAO,GAAI;AAAA,MAC1B,MAAM,IAAI,iBAAiB,QAAQ,sBAAsB,gBAAgB;AAAA,IAC3E;AAAA,IAEA,IAAI;AAAA,MACF,OAAO,MAAM,MAAK,KAAK;AAAA,MACvB,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,uBAAuB,gBAAgB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KAC5F,yBACF;AAAA;AAAA;AAAA,OAIkB,iBAAgB,CAAC,KAAmC;AAAA,IACxE,MAAM,WAAW,KAAK,YAAY,GAAG;AAAA,IACrC,MAAM,QAAO,IAAI,KAAK,QAAQ;AAAA,IAE9B,IAAI,CAAE,MAAM,MAAK,OAAO,GAAI;AAAA,MAC1B,MAAM,IAAI,iBAAiB,QAAQ,sBAAsB,gBAAgB;AAAA,IAC3E;AAAA,IAEA,IAAI;AAAA,MACF,OAAO,MAAM,MAAK,YAAY;AAAA,MAC9B,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,uBAAuB,uBAAuB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KACnG,yBACF;AAAA;AAAA;AAAA,EAIY,WAAW,CAAC,KAA6B;AAAA,IACvD,MAAM,WAAW,KAAK,YAAY,GAAG;AAAA,IAErC,IAAI,CAAC,WAAW,QAAQ,GAAG;AAAA,MACzB,MAAM,IAAI,iBAAiB,QAAQ,sBAAsB,gBAAgB;AAAA,IAC3E;AAAA,IAEA,MAAM,QAAO,IAAI,KAAK,QAAQ;AAAA,IAE9B,IAAI;AAAA,MACF,OAAO,MAAK,OAAO;AAAA,MACnB,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,uBAAuB,kBAAkB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KAC9F,yBACF;AAAA;AAAA;AAGN;AAlTa,oBAAN;AAAA,EADN,UAAU,QAAQ;AAAA,EAKJ,mCAAO,OAAM;AAAA,EAJrB;AAAA;AAAA;AAAA,GAAM;",
12
+ "mappings": "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",
13
13
  "debugId": "B7060C45594F90B964756E2164756E21",
14
14
  "names": []
15
15
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ooneex/storage",
3
3
  "description": "File storage abstraction supporting local filesystem and cloud providers — upload, download, list, and manage files with a unified bucket-based API",
4
- "version": "1.1.5",
4
+ "version": "1.1.7",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist",
@@ -29,10 +29,10 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "@bunny.net/storage-sdk": "^0.3.1",
32
- "@ooneex/app-env": "1.2.1",
33
- "@ooneex/container": "1.2.1",
34
- "@ooneex/exception": "1.1.3",
35
- "@ooneex/http-status": "1.1.3"
32
+ "@ooneex/app-env": "1.3.0",
33
+ "@ooneex/container": "1.2.3",
34
+ "@ooneex/exception": "1.2.1",
35
+ "@ooneex/http-status": "1.1.4"
36
36
  },
37
37
  "keywords": [
38
38
  "blob",