@ooneex/storage 0.0.13 → 0.0.15
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.d.ts +3 -15
- package/dist/index.js +49 -21
- package/dist/index.js.map +7 -7
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -31,17 +31,12 @@ declare abstract class AbstractStorage implements IStorage {
|
|
|
31
31
|
protected getS3File(path: string): S3File2;
|
|
32
32
|
}
|
|
33
33
|
import { BunFile as BunFile3, S3File as S3File3 } from "bun";
|
|
34
|
-
type BunnyRegion = "de" | "uk" | "ny" | "la" | "sg" | "se" | "br" | "jh" | "syd";
|
|
35
34
|
declare class BunnyStorage implements IStorage {
|
|
36
35
|
private bucket;
|
|
37
36
|
private readonly accessKey;
|
|
38
37
|
private readonly storageZone;
|
|
39
38
|
private readonly region;
|
|
40
|
-
constructor(
|
|
41
|
-
accessKey?: string;
|
|
42
|
-
storageZone?: string;
|
|
43
|
-
region?: BunnyRegion;
|
|
44
|
-
});
|
|
39
|
+
constructor();
|
|
45
40
|
setBucket(name: string): this;
|
|
46
41
|
list(): Promise<string[]>;
|
|
47
42
|
clearBucket(): Promise<this>;
|
|
@@ -62,12 +57,7 @@ declare class CloudflareStorage extends AbstractStorage {
|
|
|
62
57
|
private readonly secretKey;
|
|
63
58
|
private readonly endpoint;
|
|
64
59
|
private readonly region;
|
|
65
|
-
constructor(
|
|
66
|
-
accessKey?: string;
|
|
67
|
-
secretKey?: string;
|
|
68
|
-
endpoint?: string;
|
|
69
|
-
region?: "EEUR" | "WEUR" | "APAC" | "NAM";
|
|
70
|
-
});
|
|
60
|
+
constructor();
|
|
71
61
|
getOptions(): S3Options2;
|
|
72
62
|
}
|
|
73
63
|
import { EContainerScope } from "@ooneex/container";
|
|
@@ -78,9 +68,7 @@ import { BunFile as BunFile4, S3File as S3File4, S3Options as S3Options3 } from
|
|
|
78
68
|
declare class FilesystemStorage extends AbstractStorage {
|
|
79
69
|
protected bucket: string;
|
|
80
70
|
private readonly storagePath;
|
|
81
|
-
constructor(
|
|
82
|
-
storagePath?: string;
|
|
83
|
-
});
|
|
71
|
+
constructor();
|
|
84
72
|
getOptions(): S3Options3;
|
|
85
73
|
private getBucketPath;
|
|
86
74
|
private getFilePath;
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
// @bun
|
|
2
|
+
var __legacyDecorateClassTS = function(decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
5
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
6
|
+
else
|
|
7
|
+
for (var i = decorators.length - 1;i >= 0; i--)
|
|
8
|
+
if (d = decorators[i])
|
|
9
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
10
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
11
|
+
};
|
|
12
|
+
var __legacyMetadataTS = (k, v) => {
|
|
13
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
|
14
|
+
return Reflect.metadata(k, v);
|
|
15
|
+
};
|
|
16
|
+
|
|
2
17
|
// src/AbstractStorage.ts
|
|
3
18
|
class AbstractStorage {
|
|
4
19
|
client = null;
|
|
@@ -58,6 +73,16 @@ class AbstractStorage {
|
|
|
58
73
|
return client.file(path);
|
|
59
74
|
}
|
|
60
75
|
}
|
|
76
|
+
// src/decorators.ts
|
|
77
|
+
import { container, EContainerScope } from "@ooneex/container";
|
|
78
|
+
var decorator = {
|
|
79
|
+
storage: (scope = EContainerScope.Singleton) => {
|
|
80
|
+
return (target) => {
|
|
81
|
+
container.add(target, scope);
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
|
|
61
86
|
// src/StorageException.ts
|
|
62
87
|
import { Exception } from "@ooneex/exception";
|
|
63
88
|
import { HttpStatus } from "@ooneex/http-status";
|
|
@@ -78,10 +103,10 @@ class BunnyStorage {
|
|
|
78
103
|
accessKey;
|
|
79
104
|
storageZone;
|
|
80
105
|
region;
|
|
81
|
-
constructor(
|
|
82
|
-
const accessKey =
|
|
83
|
-
const storageZone =
|
|
84
|
-
const region =
|
|
106
|
+
constructor() {
|
|
107
|
+
const accessKey = Bun.env.STORAGE_BUNNY_ACCESS_KEY;
|
|
108
|
+
const storageZone = Bun.env.STORAGE_BUNNY_STORAGE_ZONE;
|
|
109
|
+
const region = Bun.env.STORAGE_BUNNY_REGION;
|
|
85
110
|
if (!accessKey) {
|
|
86
111
|
throw new StorageException("Bunny access key is required. Please provide an access key either through the constructor options or set the STORAGE_BUNNY_ACCESS_KEY environment variable.");
|
|
87
112
|
}
|
|
@@ -289,6 +314,10 @@ class BunnyStorage {
|
|
|
289
314
|
return `${this.getBaseUrl()}/${this.storageZone}/${path}`;
|
|
290
315
|
}
|
|
291
316
|
}
|
|
317
|
+
BunnyStorage = __legacyDecorateClassTS([
|
|
318
|
+
decorator.storage(),
|
|
319
|
+
__legacyMetadataTS("design:paramtypes", [])
|
|
320
|
+
], BunnyStorage);
|
|
292
321
|
// src/CloudflareStorage.ts
|
|
293
322
|
class CloudflareStorage extends AbstractStorage {
|
|
294
323
|
bucket;
|
|
@@ -296,11 +325,11 @@ class CloudflareStorage extends AbstractStorage {
|
|
|
296
325
|
secretKey;
|
|
297
326
|
endpoint;
|
|
298
327
|
region;
|
|
299
|
-
constructor(
|
|
328
|
+
constructor() {
|
|
300
329
|
super();
|
|
301
|
-
const accessKey =
|
|
302
|
-
const secretKey =
|
|
303
|
-
const endpoint =
|
|
330
|
+
const accessKey = Bun.env.STORAGE_CLOUDFLARE_ACCESS_KEY;
|
|
331
|
+
const secretKey = Bun.env.STORAGE_CLOUDFLARE_SECRET_KEY;
|
|
332
|
+
const endpoint = Bun.env.STORAGE_CLOUDFLARE_ENDPOINT;
|
|
304
333
|
if (!accessKey) {
|
|
305
334
|
throw new StorageException("Cloudflare access key is required. Please provide an access key either through the constructor options or set the STORAGE_CLOUDFLARE_ACCESS_KEY environment variable.");
|
|
306
335
|
}
|
|
@@ -313,7 +342,7 @@ class CloudflareStorage extends AbstractStorage {
|
|
|
313
342
|
this.accessKey = accessKey;
|
|
314
343
|
this.secretKey = secretKey;
|
|
315
344
|
this.endpoint = endpoint;
|
|
316
|
-
this.region =
|
|
345
|
+
this.region = Bun.env.STORAGE_CLOUDFLARE_REGION || "EEUR";
|
|
317
346
|
}
|
|
318
347
|
getOptions() {
|
|
319
348
|
return {
|
|
@@ -325,15 +354,10 @@ class CloudflareStorage extends AbstractStorage {
|
|
|
325
354
|
};
|
|
326
355
|
}
|
|
327
356
|
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
return (target) => {
|
|
333
|
-
container.add(target, scope);
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
};
|
|
357
|
+
CloudflareStorage = __legacyDecorateClassTS([
|
|
358
|
+
decorator.storage(),
|
|
359
|
+
__legacyMetadataTS("design:paramtypes", [])
|
|
360
|
+
], CloudflareStorage);
|
|
337
361
|
// src/FilesystemStorage.ts
|
|
338
362
|
import { existsSync, mkdirSync } from "fs";
|
|
339
363
|
import { mkdir, readdir, rmdir, stat } from "fs/promises";
|
|
@@ -341,9 +365,9 @@ import { dirname, join } from "path";
|
|
|
341
365
|
class FilesystemStorage extends AbstractStorage {
|
|
342
366
|
bucket;
|
|
343
367
|
storagePath;
|
|
344
|
-
constructor(
|
|
368
|
+
constructor() {
|
|
345
369
|
super();
|
|
346
|
-
const basePath =
|
|
370
|
+
const basePath = Bun.env.FILESYSTEM_STORAGE_PATH;
|
|
347
371
|
if (!basePath) {
|
|
348
372
|
throw new StorageException("Base path is required. Please provide a base path either through the constructor options or set the FILESYSTEM_STORAGE_PATH environment variable.");
|
|
349
373
|
}
|
|
@@ -551,6 +575,10 @@ class FilesystemStorage extends AbstractStorage {
|
|
|
551
575
|
}
|
|
552
576
|
}
|
|
553
577
|
}
|
|
578
|
+
FilesystemStorage = __legacyDecorateClassTS([
|
|
579
|
+
decorator.storage(),
|
|
580
|
+
__legacyMetadataTS("design:paramtypes", [])
|
|
581
|
+
], FilesystemStorage);
|
|
554
582
|
export {
|
|
555
583
|
decorator,
|
|
556
584
|
StorageException,
|
|
@@ -560,4 +588,4 @@ export {
|
|
|
560
588
|
AbstractStorage
|
|
561
589
|
};
|
|
562
590
|
|
|
563
|
-
//# debugId=
|
|
591
|
+
//# debugId=BCF914F353469B4C64756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["src/AbstractStorage.ts", "src/
|
|
3
|
+
"sources": ["src/AbstractStorage.ts", "src/decorators.ts", "src/StorageException.ts", "src/BunnyStorage.ts", "src/CloudflareStorage.ts", "src/FilesystemStorage.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { BunFile, S3File, S3Options } from \"bun\";\nimport type { IStorage } from \"./types\";\n\nexport abstract class AbstractStorage implements IStorage {\n protected client: Bun.S3Client | null = null;\n public abstract getOptions(): S3Options;\n protected abstract bucket: string;\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 for (const key of keys) {\n await client.delete(key);\n }\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 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 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",
|
|
6
|
-
"import { Exception } from \"@ooneex/exception\";\nimport { HttpStatus } from \"@ooneex/http-status\";\n\nexport class StorageException extends Exception {\n constructor(message: string, data: Record<string, unknown> = {}) {\n super(message, {\n status: HttpStatus.Code.InternalServerError,\n data,\n });\n this.name = \"StorageException\";\n }\n}\n",
|
|
7
|
-
"import type { BunFile, S3File } from \"bun\";\nimport { StorageException } from \"./StorageException\";\nimport type { IStorage } from \"./types\";\n\ntype BunnyRegion = \"de\" | \"uk\" | \"ny\" | \"la\" | \"sg\" | \"se\" | \"br\" | \"jh\" | \"syd\";\n\ninterface BunnyFileInfo {\n Guid: string;\n StorageZoneName: string;\n Path: string;\n ObjectName: string;\n Length: number;\n LastChanged: string;\n ServerId: number;\n ArrayNumber: number;\n IsDirectory: boolean;\n UserId: string;\n ContentType: string;\n DateCreated: string;\n StorageZoneId: number;\n Checksum: string | null;\n ReplicatedZones: string | null;\n}\n\nexport class BunnyStorage implements IStorage {\n private bucket = \"\";\n private readonly accessKey: string;\n private readonly storageZone: string;\n private readonly region: BunnyRegion;\n\n constructor(options?: {\n accessKey?: string;\n storageZone?: string;\n region?: BunnyRegion;\n }) {\n const accessKey = options?.accessKey ?? Bun.env.STORAGE_BUNNY_ACCESS_KEY;\n const storageZone = options?.storageZone ?? Bun.env.STORAGE_BUNNY_STORAGE_ZONE;\n const region = options?.region ?? (Bun.env.STORAGE_BUNNY_REGION as BunnyRegion | 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 );\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 );\n }\n\n this.accessKey = accessKey;\n this.storageZone = storageZone;\n this.region = region ?? \"de\";\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 const url = `${this.getBaseUrl()}/${this.storageZone}/${path}`;\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n accept: \"application/json\",\n },\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to list files: ${response.status} ${response.statusText}`, {\n status: response.status,\n path,\n });\n }\n\n const files: BunnyFileInfo[] = await response.json();\n\n return files.filter((file) => !file.IsDirectory).map((file) => file.ObjectName);\n }\n\n public async clearBucket(): Promise<this> {\n const keys = await this.list();\n\n for (const key of keys) {\n await this.delete(key);\n }\n\n return this;\n }\n\n public async exists(key: string): Promise<boolean> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n return response.ok;\n }\n\n public async delete(key: string): Promise<void> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"DELETE\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok && response.status !== 404) {\n throw new StorageException(`Failed to delete file: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\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 put(\n key: string,\n content: string | ArrayBufferView | ArrayBuffer | SharedArrayBuffer | Request | Response | BunFile | S3File | Blob,\n ): Promise<number> {\n const url = this.buildFileUrl(key);\n\n let body: BodyInit;\n let contentLength: number;\n\n if (typeof content === \"string\") {\n body = content;\n contentLength = new TextEncoder().encode(content).length;\n } else if (content instanceof ArrayBuffer) {\n body = new Blob([content]);\n contentLength = content.byteLength;\n } else if (content instanceof SharedArrayBuffer) {\n const uint8Array = new Uint8Array(content);\n const copiedArray = new Uint8Array(uint8Array.length);\n copiedArray.set(uint8Array);\n body = new Blob([copiedArray]);\n contentLength = content.byteLength;\n } else if (ArrayBuffer.isView(content)) {\n const arrayBuffer = content.buffer.slice(\n content.byteOffset,\n content.byteOffset + content.byteLength,\n ) as ArrayBuffer;\n body = new Blob([arrayBuffer]);\n contentLength = content.byteLength;\n } else if (content instanceof Blob) {\n body = content;\n contentLength = content.size;\n } else if (content instanceof Request || content instanceof Response) {\n const arrayBuffer = await content.arrayBuffer();\n body = new Blob([arrayBuffer]);\n contentLength = arrayBuffer.byteLength;\n } else if (typeof content === \"object\" && content !== null && \"arrayBuffer\" in content) {\n const fileContent = content as BunFile | S3File;\n const arrayBuffer = await fileContent.arrayBuffer();\n body = new Blob([arrayBuffer]);\n contentLength = arrayBuffer.byteLength;\n } else {\n throw new StorageException(\"Unsupported content type for upload\", { key });\n }\n\n const response = await fetch(url, {\n method: \"PUT\",\n headers: {\n AccessKey: this.accessKey,\n \"Content-Type\": \"application/octet-stream\",\n },\n body,\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to upload file: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\n }\n\n return contentLength;\n }\n\n public async getAsJson<T = unknown>(key: string): Promise<T> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to get file as JSON: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\n }\n\n return await response.json();\n }\n\n public async getAsArrayBuffer(key: string): Promise<ArrayBuffer> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to get file as ArrayBuffer: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\n }\n\n return await response.arrayBuffer();\n }\n\n public getAsStream(key: string): ReadableStream {\n const url = this.buildFileUrl(key);\n\n const stream = new ReadableStream({\n start: async (controller) => {\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok) {\n controller.error(\n new StorageException(`Failed to get file as stream: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n }),\n );\n return;\n }\n\n if (!response.body) {\n controller.error(new StorageException(\"Response body is null\", { key }));\n return;\n }\n\n const reader = response.body.getReader();\n\n const pump = async (): Promise<void> => {\n const { done, value } = await reader.read();\n\n if (done) {\n controller.close();\n return;\n }\n\n controller.enqueue(value);\n await pump();\n };\n\n await pump();\n },\n });\n\n return stream;\n }\n\n private getBaseUrl(): string {\n const regionEndpoints: Record<BunnyRegion, string> = {\n de: \"storage.bunnycdn.com\",\n uk: \"uk.storage.bunnycdn.com\",\n ny: \"ny.storage.bunnycdn.com\",\n la: \"la.storage.bunnycdn.com\",\n sg: \"sg.storage.bunnycdn.com\",\n se: \"se.storage.bunnycdn.com\",\n br: \"br.storage.bunnycdn.com\",\n jh: \"jh.storage.bunnycdn.com\",\n syd: \"syd.storage.bunnycdn.com\",\n };\n\n return `https://${regionEndpoints[this.region]}`;\n }\n\n private buildFileUrl(key: string): string {\n const path = this.bucket ? `${this.bucket}/${key}` : key;\n\n return `${this.getBaseUrl()}/${this.storageZone}/${path}`;\n }\n}\n",
|
|
8
|
-
"import type { S3Options } from \"bun\";\nimport { AbstractStorage } from \"./AbstractStorage\";\nimport { StorageException } from \"./StorageException\";\n\nexport class CloudflareStorage extends AbstractStorage {\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(options?: {\n accessKey?: string;\n secretKey?: string;\n endpoint?: string;\n region?: \"EEUR\" | \"WEUR\" | \"APAC\" | \"NAM\";\n }) {\n super();\n\n const accessKey = options?.accessKey || Bun.env.STORAGE_CLOUDFLARE_ACCESS_KEY;\n const secretKey = options?.secretKey || Bun.env.STORAGE_CLOUDFLARE_SECRET_KEY;\n const endpoint = options?.endpoint || Bun.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 );\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 );\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 );\n }\n\n this.accessKey = accessKey;\n this.secretKey = secretKey;\n this.endpoint = endpoint;\n this.region = options?.region || Bun.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
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",
|
|
10
|
-
"import {
|
|
7
|
+
"import { Exception } from \"@ooneex/exception\";\nimport { HttpStatus } from \"@ooneex/http-status\";\n\nexport class StorageException extends Exception {\n constructor(message: string, data: Record<string, unknown> = {}) {\n super(message, {\n status: HttpStatus.Code.InternalServerError,\n data,\n });\n this.name = \"StorageException\";\n }\n}\n",
|
|
8
|
+
"import type { BunFile, S3File } from \"bun\";\nimport { decorator } from \"./decorators\";\nimport { StorageException } from \"./StorageException\";\nimport type { IStorage } from \"./types\";\n\ntype BunnyRegion = \"de\" | \"uk\" | \"ny\" | \"la\" | \"sg\" | \"se\" | \"br\" | \"jh\" | \"syd\";\n\ninterface BunnyFileInfo {\n Guid: string;\n StorageZoneName: string;\n Path: string;\n ObjectName: string;\n Length: number;\n LastChanged: string;\n ServerId: number;\n ArrayNumber: number;\n IsDirectory: boolean;\n UserId: string;\n ContentType: string;\n DateCreated: string;\n StorageZoneId: number;\n Checksum: string | null;\n ReplicatedZones: string | null;\n}\n\n@decorator.storage()\nexport class BunnyStorage implements IStorage {\n private bucket = \"\";\n private readonly accessKey: string;\n private readonly storageZone: string;\n private readonly region: BunnyRegion;\n\n constructor() {\n const accessKey = Bun.env.STORAGE_BUNNY_ACCESS_KEY;\n const storageZone = Bun.env.STORAGE_BUNNY_STORAGE_ZONE;\n const region = Bun.env.STORAGE_BUNNY_REGION as BunnyRegion | 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 );\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 );\n }\n\n this.accessKey = accessKey;\n this.storageZone = storageZone;\n this.region = region ?? \"de\";\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 const url = `${this.getBaseUrl()}/${this.storageZone}/${path}`;\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n accept: \"application/json\",\n },\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to list files: ${response.status} ${response.statusText}`, {\n status: response.status,\n path,\n });\n }\n\n const files: BunnyFileInfo[] = await response.json();\n\n return files.filter((file) => !file.IsDirectory).map((file) => file.ObjectName);\n }\n\n public async clearBucket(): Promise<this> {\n const keys = await this.list();\n\n for (const key of keys) {\n await this.delete(key);\n }\n\n return this;\n }\n\n public async exists(key: string): Promise<boolean> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n return response.ok;\n }\n\n public async delete(key: string): Promise<void> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"DELETE\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok && response.status !== 404) {\n throw new StorageException(`Failed to delete file: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\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 put(\n key: string,\n content: string | ArrayBufferView | ArrayBuffer | SharedArrayBuffer | Request | Response | BunFile | S3File | Blob,\n ): Promise<number> {\n const url = this.buildFileUrl(key);\n\n let body: BodyInit;\n let contentLength: number;\n\n if (typeof content === \"string\") {\n body = content;\n contentLength = new TextEncoder().encode(content).length;\n } else if (content instanceof ArrayBuffer) {\n body = new Blob([content]);\n contentLength = content.byteLength;\n } else if (content instanceof SharedArrayBuffer) {\n const uint8Array = new Uint8Array(content);\n const copiedArray = new Uint8Array(uint8Array.length);\n copiedArray.set(uint8Array);\n body = new Blob([copiedArray]);\n contentLength = content.byteLength;\n } else if (ArrayBuffer.isView(content)) {\n const arrayBuffer = content.buffer.slice(\n content.byteOffset,\n content.byteOffset + content.byteLength,\n ) as ArrayBuffer;\n body = new Blob([arrayBuffer]);\n contentLength = content.byteLength;\n } else if (content instanceof Blob) {\n body = content;\n contentLength = content.size;\n } else if (content instanceof Request || content instanceof Response) {\n const arrayBuffer = await content.arrayBuffer();\n body = new Blob([arrayBuffer]);\n contentLength = arrayBuffer.byteLength;\n } else if (typeof content === \"object\" && content !== null && \"arrayBuffer\" in content) {\n const fileContent = content as BunFile | S3File;\n const arrayBuffer = await fileContent.arrayBuffer();\n body = new Blob([arrayBuffer]);\n contentLength = arrayBuffer.byteLength;\n } else {\n throw new StorageException(\"Unsupported content type for upload\", { key });\n }\n\n const response = await fetch(url, {\n method: \"PUT\",\n headers: {\n AccessKey: this.accessKey,\n \"Content-Type\": \"application/octet-stream\",\n },\n body,\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to upload file: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\n }\n\n return contentLength;\n }\n\n public async getAsJson<T = unknown>(key: string): Promise<T> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to get file as JSON: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\n }\n\n return await response.json();\n }\n\n public async getAsArrayBuffer(key: string): Promise<ArrayBuffer> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to get file as ArrayBuffer: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\n }\n\n return await response.arrayBuffer();\n }\n\n public getAsStream(key: string): ReadableStream {\n const url = this.buildFileUrl(key);\n\n const stream = new ReadableStream({\n start: async (controller) => {\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok) {\n controller.error(\n new StorageException(`Failed to get file as stream: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n }),\n );\n return;\n }\n\n if (!response.body) {\n controller.error(new StorageException(\"Response body is null\", { key }));\n return;\n }\n\n const reader = response.body.getReader();\n\n const pump = async (): Promise<void> => {\n const { done, value } = await reader.read();\n\n if (done) {\n controller.close();\n return;\n }\n\n controller.enqueue(value);\n await pump();\n };\n\n await pump();\n },\n });\n\n return stream;\n }\n\n private getBaseUrl(): string {\n const regionEndpoints: Record<BunnyRegion, string> = {\n de: \"storage.bunnycdn.com\",\n uk: \"uk.storage.bunnycdn.com\",\n ny: \"ny.storage.bunnycdn.com\",\n la: \"la.storage.bunnycdn.com\",\n sg: \"sg.storage.bunnycdn.com\",\n se: \"se.storage.bunnycdn.com\",\n br: \"br.storage.bunnycdn.com\",\n jh: \"jh.storage.bunnycdn.com\",\n syd: \"syd.storage.bunnycdn.com\",\n };\n\n return `https://${regionEndpoints[this.region]}`;\n }\n\n private buildFileUrl(key: string): string {\n const path = this.bucket ? `${this.bucket}/${key}` : key;\n\n return `${this.getBaseUrl()}/${this.storageZone}/${path}`;\n }\n}\n",
|
|
9
|
+
"import type { S3Options } from \"bun\";\nimport { AbstractStorage } from \"./AbstractStorage\";\nimport { decorator } from \"./decorators\";\nimport { StorageException } from \"./StorageException\";\n\n@decorator.storage()\nexport class CloudflareStorage extends AbstractStorage {\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() {\n super();\n\n const accessKey = Bun.env.STORAGE_CLOUDFLARE_ACCESS_KEY;\n const secretKey = Bun.env.STORAGE_CLOUDFLARE_SECRET_KEY;\n const endpoint = Bun.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 );\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 );\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 );\n }\n\n this.accessKey = accessKey;\n this.secretKey = secretKey;\n this.endpoint = endpoint;\n this.region = Bun.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",
|
|
10
|
+
"import { existsSync, mkdirSync } from \"node:fs\";\nimport { mkdir, readdir, rmdir, stat } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport type { BunFile, S3File, S3Options } from \"bun\";\nimport { AbstractStorage } from \"./AbstractStorage\";\nimport { decorator } from \"./decorators\";\nimport { StorageException } from \"./StorageException\";\n\n@decorator.storage()\nexport class FilesystemStorage extends AbstractStorage {\n protected bucket: string;\n private readonly storagePath: string;\n\n constructor() {\n super();\n\n const basePath = Bun.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 );\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 );\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.\");\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 );\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 );\n }\n }\n\n private async listFilesRecursive(dir: string, baseDir: string): Promise<string[]> {\n const files: string[] = [];\n const entries = await readdir(dir);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stats = await stat(fullPath);\n\n if (stats.isDirectory()) {\n const subFiles = await this.listFilesRecursive(fullPath, baseDir);\n files.push(...subFiles);\n } else {\n const relativePath = fullPath.substring(baseDir.length + 1);\n files.push(relativePath);\n }\n }\n\n return files;\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 this.removeDirectoryRecursive(bucketPath);\n await mkdir(bucketPath, { recursive: true });\n } catch (error) {\n throw new StorageException(`Failed to clear bucket: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n return this;\n }\n\n private async removeDirectoryRecursive(dir: string): Promise<void> {\n const entries = await readdir(dir);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stats = await stat(fullPath);\n\n if (stats.isDirectory()) {\n await this.removeDirectoryRecursive(fullPath);\n await rmdir(fullPath);\n } else {\n const file = Bun.file(fullPath);\n await file.delete();\n }\n }\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 );\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 );\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 );\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`);\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 );\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`);\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 );\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`);\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 );\n }\n }\n}\n"
|
|
11
11
|
],
|
|
12
|
-
"mappings": ";;AAGO,MAAe,gBAAoC;AAAA,EAC9C,SAA8B;AAAA,EAIjC,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,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,OAAO,OAAO,GAAG;AAAA,IACzB;AAAA,IAEA,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,OAAO,IAAI,KAAK,SAAS;AAAA,IAE/B,OAAO,MAAM,KAAK,IAAI,KAAK,IAAI;AAAA;AAAA,OAGpB,IAAG,CACd,KACA,SACiB;AAAA,IACjB,MAAM,SAAiB,KAAK,UAAU,GAAG;AAAA,IAEzC,OAAO,MAAM,OAAO,MAAM,OAAO;AAAA;AAAA,OAGtB,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;;AC1FA;AACA;AAAA;AAEO,MAAM,yBAAyB,UAAU;AAAA,EAC9C,WAAW,CAAC,SAAiB,OAAgC,CAAC,GAAG;AAAA,IAC/D,MAAM,SAAS;AAAA,MACb,QAAQ,WAAW,KAAK;AAAA,MACxB;AAAA,IACF,CAAC;AAAA,IACD,KAAK,OAAO;AAAA;AAEhB;;;ACaO,MAAM,aAAiC;AAAA,EACpC,SAAS;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,SAIT;AAAA,IACD,MAAM,YAAY,SAAS,aAAa,IAAI,IAAI;AAAA,IAChD,MAAM,cAAc,SAAS,eAAe,IAAI,IAAI;AAAA,IACpD,MAAM,SAAS,SAAS,UAAW,IAAI,IAAI;AAAA,IAE3C,IAAI,CAAC,WAAW;AAAA,MACd,MAAM,IAAI,iBACR,6JACF;AAAA,IACF;AAAA,IACA,IAAI,CAAC,aAAa;AAAA,MAChB,MAAM,IAAI,iBACR,kKACF;AAAA,IACF;AAAA,IAEA,KAAK,YAAY;AAAA,IACjB,KAAK,cAAc;AAAA,IACnB,KAAK,SAAS,UAAU;AAAA;AAAA,EAGnB,SAAS,CAAC,MAAoB;AAAA,IACnC,KAAK,SAAS;AAAA,IAEd,OAAO;AAAA;AAAA,OAGI,KAAI,GAAsB;AAAA,IACrC,MAAM,OAAO,KAAK,SAAS,GAAG,KAAK,YAAY;AAAA,IAC/C,MAAM,MAAM,GAAG,KAAK,WAAW,KAAK,KAAK,eAAe;AAAA,IAExD,MAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,WAAW,KAAK;AAAA,QAChB,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,IAED,IAAI,CAAC,SAAS,IAAI;AAAA,MAChB,MAAM,IAAI,iBAAiB,yBAAyB,SAAS,UAAU,SAAS,cAAc;AAAA,QAC5F,QAAQ,SAAS;AAAA,QACjB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,QAAyB,MAAM,SAAS,KAAK;AAAA,IAEnD,OAAO,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,UAAU;AAAA;AAAA,OAGnE,YAAW,GAAkB;AAAA,IACxC,MAAM,OAAO,MAAM,KAAK,KAAK;AAAA,IAE7B,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,KAAK,OAAO,GAAG;AAAA,IACvB;AAAA,IAEA,OAAO;AAAA;AAAA,OAGI,OAAM,CAAC,KAA+B;AAAA,IACjD,MAAM,MAAM,KAAK,aAAa,GAAG;AAAA,IAEjC,MAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,WAAW,KAAK;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,IAED,OAAO,SAAS;AAAA;AAAA,OAGL,OAAM,CAAC,KAA4B;AAAA,IAC9C,MAAM,MAAM,KAAK,aAAa,GAAG;AAAA,IAEjC,MAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,WAAW,KAAK;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,IAED,IAAI,CAAC,SAAS,MAAM,SAAS,WAAW,KAAK;AAAA,MAC3C,MAAM,IAAI,iBAAiB,0BAA0B,SAAS,UAAU,SAAS,cAAc;AAAA,QAC7F,QAAQ,SAAS;AAAA,QACjB;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA,OAGW,QAAO,CAAC,KAAa,WAAoC;AAAA,IACpE,MAAM,OAAO,IAAI,KAAK,SAAS;AAAA,IAE/B,OAAO,MAAM,KAAK,IAAI,KAAK,IAAI;AAAA;AAAA,OAGpB,IAAG,CACd,KACA,SACiB;AAAA,IACjB,MAAM,MAAM,KAAK,aAAa,GAAG;AAAA,IAEjC,IAAI;AAAA,IACJ,IAAI;AAAA,IAEJ,IAAI,OAAO,YAAY,UAAU;AAAA,MAC/B,OAAO;AAAA,MACP,gBAAgB,IAAI,YAAY,EAAE,OAAO,OAAO,EAAE;AAAA,IACpD,EAAO,SAAI,mBAAmB,aAAa;AAAA,MACzC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;AAAA,MACzB,gBAAgB,QAAQ;AAAA,IAC1B,EAAO,SAAI,mBAAmB,mBAAmB;AAAA,MAC/C,MAAM,aAAa,IAAI,WAAW,OAAO;AAAA,MACzC,MAAM,cAAc,IAAI,WAAW,WAAW,MAAM;AAAA,MACpD,YAAY,IAAI,UAAU;AAAA,MAC1B,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC;AAAA,MAC7B,gBAAgB,QAAQ;AAAA,IAC1B,EAAO,SAAI,YAAY,OAAO,OAAO,GAAG;AAAA,MACtC,MAAM,cAAc,QAAQ,OAAO,MACjC,QAAQ,YACR,QAAQ,aAAa,QAAQ,UAC/B;AAAA,MACA,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC;AAAA,MAC7B,gBAAgB,QAAQ;AAAA,IAC1B,EAAO,SAAI,mBAAmB,MAAM;AAAA,MAClC,OAAO;AAAA,MACP,gBAAgB,QAAQ;AAAA,IAC1B,EAAO,SAAI,mBAAmB,WAAW,mBAAmB,UAAU;AAAA,MACpE,MAAM,cAAc,MAAM,QAAQ,YAAY;AAAA,MAC9C,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC;AAAA,MAC7B,gBAAgB,YAAY;AAAA,IAC9B,EAAO,SAAI,OAAO,YAAY,YAAY,YAAY,QAAQ,iBAAiB,SAAS;AAAA,MACtF,MAAM,cAAc;AAAA,MACpB,MAAM,cAAc,MAAM,YAAY,YAAY;AAAA,MAClD,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC;AAAA,MAC7B,gBAAgB,YAAY;AAAA,IAC9B,EAAO;AAAA,MACL,MAAM,IAAI,iBAAiB,uCAAuC,EAAE,IAAI,CAAC;AAAA;AAAA,IAG3E,MAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,WAAW,KAAK;AAAA,QAChB,gBAAgB;AAAA,MAClB;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IAED,IAAI,CAAC,SAAS,IAAI;AAAA,MAChB,MAAM,IAAI,iBAAiB,0BAA0B,SAAS,UAAU,SAAS,cAAc;AAAA,QAC7F,QAAQ,SAAS;AAAA,QACjB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,OAAO;AAAA;AAAA,OAGI,UAAsB,CAAC,KAAyB;AAAA,IAC3D,MAAM,MAAM,KAAK,aAAa,GAAG;AAAA,IAEjC,MAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,WAAW,KAAK;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,IAED,IAAI,CAAC,SAAS,IAAI;AAAA,MAChB,MAAM,IAAI,iBAAiB,+BAA+B,SAAS,UAAU,SAAS,cAAc;AAAA,QAClG,QAAQ,SAAS;AAAA,QACjB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,OAAO,MAAM,SAAS,KAAK;AAAA;AAAA,OAGhB,iBAAgB,CAAC,KAAmC;AAAA,IAC/D,MAAM,MAAM,KAAK,aAAa,GAAG;AAAA,IAEjC,MAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,WAAW,KAAK;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,IAED,IAAI,CAAC,SAAS,IAAI;AAAA,MAChB,MAAM,IAAI,iBAAiB,sCAAsC,SAAS,UAAU,SAAS,cAAc;AAAA,QACzG,QAAQ,SAAS;AAAA,QACjB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,OAAO,MAAM,SAAS,YAAY;AAAA;AAAA,EAG7B,WAAW,CAAC,KAA6B;AAAA,IAC9C,MAAM,MAAM,KAAK,aAAa,GAAG;AAAA,IAEjC,MAAM,SAAS,IAAI,eAAe;AAAA,MAChC,OAAO,OAAO,eAAe;AAAA,QAC3B,MAAM,WAAW,MAAM,MAAM,KAAK;AAAA,UAChC,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,WAAW,KAAK;AAAA,UAClB;AAAA,QACF,CAAC;AAAA,QAED,IAAI,CAAC,SAAS,IAAI;AAAA,UAChB,WAAW,MACT,IAAI,iBAAiB,iCAAiC,SAAS,UAAU,SAAS,cAAc;AAAA,YAC9F,QAAQ,SAAS;AAAA,YACjB;AAAA,UACF,CAAC,CACH;AAAA,UACA;AAAA,QACF;AAAA,QAEA,IAAI,CAAC,SAAS,MAAM;AAAA,UAClB,WAAW,MAAM,IAAI,iBAAiB,yBAAyB,EAAE,IAAI,CAAC,CAAC;AAAA,UACvE;AAAA,QACF;AAAA,QAEA,MAAM,SAAS,SAAS,KAAK,UAAU;AAAA,QAEvC,MAAM,OAAO,YAA2B;AAAA,UACtC,QAAQ,MAAM,UAAU,MAAM,OAAO,KAAK;AAAA,UAE1C,IAAI,MAAM;AAAA,YACR,WAAW,MAAM;AAAA,YACjB;AAAA,UACF;AAAA,UAEA,WAAW,QAAQ,KAAK;AAAA,UACxB,MAAM,KAAK;AAAA;AAAA,QAGb,MAAM,KAAK;AAAA;AAAA,IAEf,CAAC;AAAA,IAED,OAAO;AAAA;AAAA,EAGD,UAAU,GAAW;AAAA,IAC3B,MAAM,kBAA+C;AAAA,MACnD,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,KAAK;AAAA,IACP;AAAA,IAEA,OAAO,WAAW,gBAAgB,KAAK;AAAA;AAAA,EAGjC,YAAY,CAAC,KAAqB;AAAA,IACxC,MAAM,OAAO,KAAK,SAAS,GAAG,KAAK,UAAU,QAAQ;AAAA,IAErD,OAAO,GAAG,KAAK,WAAW,KAAK,KAAK,eAAe;AAAA;AAEvD;;AC5SO,MAAM,0BAA0B,gBAAgB;AAAA,EAC3C;AAAA,EACO;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,SAKT;AAAA,IACD,MAAM;AAAA,IAEN,MAAM,YAAY,SAAS,aAAa,IAAI,IAAI;AAAA,IAChD,MAAM,YAAY,SAAS,aAAa,IAAI,IAAI;AAAA,IAChD,MAAM,WAAW,SAAS,YAAY,IAAI,IAAI;AAAA,IAE9C,IAAI,CAAC,WAAW;AAAA,MACd,MAAM,IAAI,iBACR,uKACF;AAAA,IACF;AAAA,IACA,IAAI,CAAC,WAAW;AAAA,MACd,MAAM,IAAI,iBACR,sKACF;AAAA,IACF;AAAA,IACA,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,iBACR,iKACF;AAAA,IACF;AAAA,IAEA,KAAK,YAAY;AAAA,IACjB,KAAK,YAAY;AAAA,IACjB,KAAK,WAAW;AAAA,IAChB,KAAK,SAAS,SAAS,UAAU,IAAI,IAAI,6BAA6B;AAAA;AAAA,EAGjE,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;;ACtDA;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;AACA;AAKO,MAAM,0BAA0B,gBAAgB;AAAA,EAC3C;AAAA,EACO;AAAA,EAEjB,WAAW,CAAC,SAET;AAAA,IACD,MAAM;AAAA,IAEN,MAAM,WAAW,SAAS,eAAe,IAAI,IAAI;AAAA,IAEjD,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,iBACR,mJACF;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,GAClH;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,yDAAyD;AAAA,IACtF;AAAA,IACA,OAAO,KAAK,KAAK,aAAa,KAAK,MAAM;AAAA;AAAA,EAGnC,WAAW,CAAC,KAAqB;AAAA,IACvC,OAAO,KAAK,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,GAC9G;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,GAC1F;AAAA;AAAA;AAAA,OAIU,mBAAkB,CAAC,KAAa,SAAoC;AAAA,IAChF,MAAM,QAAkB,CAAC;AAAA,IACzB,MAAM,UAAU,MAAM,QAAQ,GAAG;AAAA,IAEjC,WAAW,SAAS,SAAS;AAAA,MAC3B,MAAM,WAAW,KAAK,KAAK,KAAK;AAAA,MAChC,MAAM,QAAQ,MAAM,KAAK,QAAQ;AAAA,MAEjC,IAAI,MAAM,YAAY,GAAG;AAAA,QACvB,MAAM,WAAW,MAAM,KAAK,mBAAmB,UAAU,OAAO;AAAA,QAChE,MAAM,KAAK,GAAG,QAAQ;AAAA,MACxB,EAAO;AAAA,QACL,MAAM,eAAe,SAAS,UAAU,QAAQ,SAAS,CAAC;AAAA,QAC1D,MAAM,KAAK,YAAY;AAAA;AAAA,IAE3B;AAAA,IAEA,OAAO;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,KAAK,yBAAyB,UAAU;AAAA,MAC9C,MAAM,MAAM,YAAY,EAAE,WAAW,KAAK,CAAC;AAAA,MAC3C,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBAAiB,2BAA2B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG;AAAA;AAAA,IAGhH,OAAO;AAAA;AAAA,OAGK,yBAAwB,CAAC,KAA4B;AAAA,IACjE,MAAM,UAAU,MAAM,QAAQ,GAAG;AAAA,IAEjC,WAAW,SAAS,SAAS;AAAA,MAC3B,MAAM,WAAW,KAAK,KAAK,KAAK;AAAA,MAChC,MAAM,QAAQ,MAAM,KAAK,QAAQ;AAAA,MAEjC,IAAI,MAAM,YAAY,GAAG;AAAA,QACvB,MAAM,KAAK,yBAAyB,QAAQ;AAAA,QAC5C,MAAM,MAAM,QAAQ;AAAA,MACtB,EAAO;AAAA,QACL,MAAM,OAAO,IAAI,KAAK,QAAQ;AAAA,QAC9B,MAAM,KAAK,OAAO;AAAA;AAAA,IAEtB;AAAA;AAAA,OAGoB,OAAM,CAAC,KAA+B;AAAA,IAC1D,MAAM,WAAW,KAAK,YAAY,GAAG;AAAA,IACrC,MAAM,OAAO,IAAI,KAAK,QAAQ;AAAA,IAC9B,OAAO,MAAM,KAAK,OAAO;AAAA;AAAA,OAGL,OAAM,CAAC,KAA4B;AAAA,IACvD,MAAM,WAAW,KAAK,YAAY,GAAG;AAAA,IACrC,MAAM,OAAO,IAAI,KAAK,QAAQ;AAAA,IAE9B,IAAI,CAAE,MAAM,KAAK,OAAO,GAAI;AAAA,MAC1B;AAAA,IACF;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,KAAK,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,QAAQ,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,GACxF;AAAA;AAAA;AAAA,OAIkB,QAAO,CAAC,KAAa,WAAoC;AAAA,IAC7E,MAAM,OAAO,IAAI,KAAK,SAAS;AAAA,IAC/B,OAAO,MAAM,KAAK,IAAI,KAAK,IAAI;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,GAC7F;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,GACvF;AAAA;AAAA;AAAA,OAIkB,UAAY,CAAC,KAAyB;AAAA,IAC1D,MAAM,WAAW,KAAK,YAAY,GAAG;AAAA,IACrC,MAAM,OAAO,IAAI,KAAK,QAAQ;AAAA,IAE9B,IAAI,CAAE,MAAM,KAAK,OAAO,GAAI;AAAA,MAC1B,MAAM,IAAI,iBAAiB,QAAQ,oBAAoB;AAAA,IACzD;AAAA,IAEA,IAAI;AAAA,MACF,OAAO,MAAM,KAAK,KAAK;AAAA,MACvB,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,uBAAuB,gBAAgB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAC9F;AAAA;AAAA;AAAA,OAIkB,iBAAgB,CAAC,KAAmC;AAAA,IACxE,MAAM,WAAW,KAAK,YAAY,GAAG;AAAA,IACrC,MAAM,OAAO,IAAI,KAAK,QAAQ;AAAA,IAE9B,IAAI,CAAE,MAAM,KAAK,OAAO,GAAI;AAAA,MAC1B,MAAM,IAAI,iBAAiB,QAAQ,oBAAoB;AAAA,IACzD;AAAA,IAEA,IAAI;AAAA,MACF,OAAO,MAAM,KAAK,YAAY;AAAA,MAC9B,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,uBAAuB,uBAAuB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GACrG;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,oBAAoB;AAAA,IACzD;AAAA,IAEA,MAAM,OAAO,IAAI,KAAK,QAAQ;AAAA,IAE9B,IAAI;AAAA,MACF,OAAO,KAAK,OAAO;AAAA,MACnB,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,iBACR,uBAAuB,kBAAkB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAChG;AAAA;AAAA;AAGN;",
|
|
13
|
-
"debugId": "
|
|
12
|
+
"mappings": "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",
|
|
13
|
+
"debugId": "BCF914F353469B4C64756E2164756E21",
|
|
14
14
|
"names": []
|
|
15
15
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ooneex/storage",
|
|
3
3
|
"description": "File and object storage abstraction layer with support for local filesystem and cloud storage providers",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.15",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist",
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
"npm:publish": "bun publish --tolerate-republish --access public"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@ooneex/container": "0.0.
|
|
32
|
-
"@ooneex/exception": "0.0.
|
|
33
|
-
"@ooneex/http-status": "0.0.
|
|
31
|
+
"@ooneex/container": "0.0.14",
|
|
32
|
+
"@ooneex/exception": "0.0.13",
|
|
33
|
+
"@ooneex/http-status": "0.0.13"
|
|
34
34
|
},
|
|
35
35
|
"keywords": [
|
|
36
36
|
"blob",
|