@nuvix/storage 0.1.0 → 1.0.1

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.
Files changed (37) hide show
  1. package/README.md +125 -68
  2. package/dist/index.cjs +7375 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.cts +469 -0
  5. package/dist/index.d.ts +38 -88
  6. package/dist/index.js +7360 -0
  7. package/dist/index.js.map +1 -0
  8. package/package.json +18 -23
  9. package/dist/index.cjs.js +0 -1270
  10. package/dist/index.cjs.js.map +0 -1
  11. package/dist/index.d.ts.map +0 -1
  12. package/dist/index.esm.js +0 -1258
  13. package/dist/index.esm.js.map +0 -1
  14. package/dist/src/device/local.d.ts +0 -31
  15. package/dist/src/device/local.d.ts.map +0 -1
  16. package/dist/src/device/s3.d.ts +0 -89
  17. package/dist/src/device/s3.d.ts.map +0 -1
  18. package/dist/src/device/wasabi.d.ts +0 -24
  19. package/dist/src/device/wasabi.d.ts.map +0 -1
  20. package/dist/src/device.d.ts +0 -146
  21. package/dist/src/device.d.ts.map +0 -1
  22. package/dist/src/storage.d.ts +0 -56
  23. package/dist/src/storage.d.ts.map +0 -1
  24. package/dist/src/validator/file-ext.d.ts +0 -17
  25. package/dist/src/validator/file-ext.d.ts.map +0 -1
  26. package/dist/src/validator/file-name.d.ts +0 -31
  27. package/dist/src/validator/file-name.d.ts.map +0 -1
  28. package/dist/src/validator/file-size.d.ts +0 -29
  29. package/dist/src/validator/file-size.d.ts.map +0 -1
  30. package/dist/src/validator/file-type.d.ts +0 -35
  31. package/dist/src/validator/file-type.d.ts.map +0 -1
  32. package/dist/src/validator/file.d.ts +0 -30
  33. package/dist/src/validator/file.d.ts.map +0 -1
  34. package/dist/src/validator/upload.d.ts +0 -31
  35. package/dist/src/validator/upload.d.ts.map +0 -1
  36. package/dist/src/validator/validator.d.ts +0 -8
  37. package/dist/src/validator/validator.d.ts.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../src/device.ts","../../src/storage.ts","../../src/validator/validator.ts","../../src/validator/file.ts","../../src/validator/file-ext.ts","../../src/validator/file-name.ts","../../src/validator/file-size.ts","../../src/validator/file-type.ts","../../src/validator/upload.ts","../../src/device/local.ts","../../src/device/s3.ts","../../src/device/wasabi.ts"],"sourcesContent":["export interface DeviceMetadata {\n [key: string]: any;\n}\n\nexport abstract class Device {\n /**\n * Max chunk size while transferring file from one device to another\n */\n protected transferChunkSize: number = 20000000; // 20 MB\n\n /**\n * Sets the maximum number of keys returned to the response. By default, the action returns up to 1,000 key names.\n */\n protected static readonly MAX_PAGE_SIZE: number = Number.MAX_SAFE_INTEGER;\n\n /**\n * Set Transfer Chunk Size\n */\n public setTransferChunkSize(chunkSize: number): void {\n this.transferChunkSize = chunkSize;\n }\n\n /**\n * Get Transfer Chunk Size\n */\n public getTransferChunkSize(): number {\n return this.transferChunkSize;\n }\n\n /**\n * Get Name.\n *\n * Get storage device name\n */\n abstract getName(): string;\n\n /**\n * Get Type.\n *\n * Get storage device type\n */\n abstract getType(): string;\n\n /**\n * Get Description.\n *\n * Get storage device description and purpose.\n */\n abstract getDescription(): string;\n\n /**\n * Get Root.\n *\n * Get storage device root path\n */\n abstract getRoot(): string;\n\n /**\n * Get Path.\n *\n * Each device hold a complex directory structure that is being build in this method.\n */\n abstract getPath(filename: string, prefix?: string): string;\n\n /**\n * Upload.\n *\n * Upload a file to desired destination in the selected disk\n * return number of chunks uploaded or 0 if it fails.\n */\n abstract upload(\n source: string,\n path: string,\n chunk?: number,\n chunks?: number,\n metadata?: DeviceMetadata\n ): Promise<number>;\n\n /**\n * Upload Data.\n *\n * Upload file contents to desired destination in the selected disk.\n * return number of chunks uploaded or 0 if it fails.\n */\n abstract uploadData(\n data: string,\n path: string,\n contentType: string,\n chunk?: number,\n chunks?: number,\n metadata?: DeviceMetadata\n ): Promise<number>;\n\n /**\n * Abort Chunked Upload\n */\n abstract abort(path: string, extra?: string): Promise<boolean>;\n\n /**\n * Read file by given path.\n */\n abstract read(path: string, offset?: number, length?: number): Promise<string>;\n\n /**\n * Transfer\n * Transfer a file from current device to destination device.\n */\n abstract transfer(path: string, destination: string, device: Device): Promise<boolean>;\n\n /**\n * Write file by given path.\n */\n abstract write(path: string, data: string, contentType: string): Promise<boolean>;\n\n /**\n * Move file from given source to given path, return true on success and false on failure.\n */\n public async move(source: string, target: string): Promise<boolean> {\n if (source === target) {\n return false;\n }\n\n if (await this.transfer(source, target, this)) {\n return await this.delete(source);\n }\n\n return false;\n }\n\n /**\n * Delete file in given path return true on success and false on failure.\n */\n abstract delete(path: string, recursive?: boolean): Promise<boolean>;\n\n /**\n * Delete files in given path, path must be a directory. return true on success and false on failure.\n */\n abstract deletePath(path: string): Promise<boolean>;\n\n /**\n * Check if file exists\n */\n abstract exists(path: string): Promise<boolean>;\n\n /**\n * Returns given file path its size.\n */\n abstract getFileSize(path: string): Promise<number>;\n\n /**\n * Returns given file path its mime type.\n */\n abstract getFileMimeType(path: string): Promise<string>;\n\n /**\n * Returns given file path its MD5 hash value.\n */\n abstract getFileHash(path: string): Promise<string>;\n\n /**\n * Create a directory at the specified path.\n *\n * Returns true on success or if the directory already exists and false on error\n */\n abstract createDirectory(path: string): Promise<boolean>;\n\n /**\n * Get directory size in bytes.\n *\n * Return -1 on error\n */\n abstract getDirectorySize(path: string): Promise<number>;\n\n /**\n * Get Partition Free Space.\n *\n * Returns available space on filesystem or disk partition\n */\n abstract getPartitionFreeSpace(): Promise<number>;\n\n /**\n * Get Partition Total Space.\n *\n * Returns the total size of a filesystem or disk partition\n */\n abstract getPartitionTotalSpace(): Promise<number>;\n\n /**\n * Get all files and directories inside a directory.\n */\n abstract getFiles(\n dir: string,\n max?: number,\n continuationToken?: string\n ): Promise<any[]>;\n\n /**\n * Get the absolute path by resolving strings like ../, .., //, /\\ and so on.\n *\n * Works like the realpath function but works on files that does not exist\n */\n public getAbsolutePath(path: string): string {\n const normalizedPath = path.replace(/[/\\\\]/g, '/');\n const parts = normalizedPath.split('/').filter(part => part.length > 0);\n\n const absolutes: string[] = [];\n for (const part of parts) {\n if (part === '.') {\n continue;\n }\n if (part === '..') {\n absolutes.pop();\n } else {\n absolutes.push(part);\n }\n }\n\n return '/' + absolutes.join('/');\n }\n\n protected async getMimeType(filePath: string): Promise<string> {\n const path = await import('path');\n \n // Node.js doesn't have a built-in MIME type module, so we'll use a comprehensive mapping\n const ext = path.extname(filePath).toLowerCase().slice(1);\n const mimeTypes: Record<string, string> = {\n // Text\n 'txt': 'text/plain',\n 'html': 'text/html',\n 'htm': 'text/html',\n 'css': 'text/css',\n 'csv': 'text/csv',\n 'xml': 'text/xml',\n \n // JavaScript\n 'js': 'application/javascript',\n 'mjs': 'application/javascript',\n 'json': 'application/json',\n \n // Images\n 'png': 'image/png',\n 'jpg': 'image/jpeg',\n 'jpeg': 'image/jpeg',\n 'gif': 'image/gif',\n 'svg': 'image/svg+xml',\n 'webp': 'image/webp',\n 'ico': 'image/x-icon',\n 'bmp': 'image/bmp',\n 'tiff': 'image/tiff',\n 'tif': 'image/tiff',\n \n // Documents\n 'pdf': 'application/pdf',\n 'doc': 'application/msword',\n 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'xls': 'application/vnd.ms-excel',\n 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'ppt': 'application/vnd.ms-powerpoint',\n 'pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n \n // Audio\n 'mp3': 'audio/mpeg',\n 'wav': 'audio/wav',\n 'ogg': 'audio/ogg',\n 'm4a': 'audio/mp4',\n \n // Video\n 'mp4': 'video/mp4',\n 'avi': 'video/x-msvideo',\n 'mov': 'video/quicktime',\n 'wmv': 'video/x-ms-wmv',\n 'flv': 'video/x-flv',\n 'webm': 'video/webm',\n \n // Archives\n 'zip': 'application/zip',\n 'rar': 'application/x-rar-compressed',\n 'tar': 'application/x-tar',\n 'gz': 'application/gzip',\n '7z': 'application/x-7z-compressed',\n \n // Other\n 'bin': 'application/octet-stream',\n 'exe': 'application/octet-stream',\n 'dmg': 'application/octet-stream'\n };\n \n return mimeTypes[ext] || 'application/octet-stream';\n }\n}","import { Device } from \"./device\";\n\nexport class Storage {\n /**\n * Supported devices\n */\n static readonly DEVICE_LOCAL = 'local';\n static readonly DEVICE_S3 = 's3';\n // static readonly DEVICE_DO_SPACES = 'dospaces';\n static readonly DEVICE_WASABI = 'wasabi';\n // static readonly DEVICE_BACKBLAZE = 'backblaze';\n // static readonly DEVICE_LINODE = 'linode';\n\n /**\n * Devices.\n *\n * List of all available storage devices\n */\n private static devices: Map<string, Device> = new Map();\n\n /**\n * Set Device.\n *\n * Add device by name\n *\n * @param name\n * @param device\n * @throws Error\n */\n static setDevice(name: string, device: Device): void {\n this.devices.set(name, device);\n }\n\n /**\n * Get Device.\n *\n * Get device by name\n *\n * @param name\n * @returns Device\n * @throws Error\n */\n static getDevice(name: string): Device {\n if (!this.devices.has(name)) {\n throw new Error(`The device \"${name}\" is not listed`);\n }\n\n return this.devices.get(name)!;\n }\n\n /**\n * Exists.\n *\n * Checks if given storage name is registered or not\n *\n * @param name\n * @returns boolean\n */\n static exists(name: string): boolean {\n return this.devices.has(name);\n }\n\n /**\n * Human readable data size format from bytes input.\n *\n * Based on: https://stackoverflow.com/a/38659168/2299554\n *\n * @param bytes\n * @param decimals\n * @param system\n * @returns string\n */\n static human(bytes: number, decimals: number = 2, system: 'binary' | 'metric' = 'metric'): string {\n const mod = system === 'binary' ? 1024 : 1000;\n\n const units = {\n binary: ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'],\n metric: ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n };\n\n const factor = Math.floor((bytes.toString().length - 1) / 3);\n\n return `${(bytes / Math.pow(mod, factor)).toFixed(decimals)}${units[system][factor]}`;\n }\n}","\nexport abstract class Validator {\n static TYPE_STRING = 'string';\n static TYPE_ARRAY = 'array';\n static TYPE_INTEGER = 'integer';\n static TYPE_BOOLEAN = 'boolean';\n\n abstract isValid(value: any): boolean | Promise<boolean>;\n}","import { Validator } from \"./validator\";\n\nexport class File extends Validator{\n public getDescription(): string {\n return 'File is not valid';\n }\n\n /**\n * NOT MUCH RIGHT NOW.\n *\n * TODO think what to do here, currently only used for parameter to be present in SDKs\n *\n * @param name\n * @return boolean\n */\n public isValid(name: any): boolean {\n return true;\n }\n\n /**\n * Is array\n *\n * Function will return true if object is array.\n *\n * @return boolean\n */\n public isArray(): boolean {\n return false;\n }\n\n /**\n * Get Type\n *\n * Returns validator type.\n *\n * @return string\n */\n public getType(): string {\n return 'string';\n }\n}","import { Validator } from \"./validator\";\n\nexport class FileExt extends Validator {\n static readonly TYPE_JPEG = 'jpeg';\n static readonly TYPE_JPG = 'jpg';\n static readonly TYPE_GIF = 'gif';\n static readonly TYPE_PNG = 'png';\n static readonly TYPE_GZIP = 'gz';\n static readonly TYPE_ZIP = 'zip';\n\n private allowed: string[];\n\n constructor(allowed: string[]) {\n super();\n this.allowed = allowed;\n }\n\n getDescription(): string {\n return 'File extension is not valid';\n }\n\n isValid(filename: string): boolean {\n const ext = this.getFileExtension(filename).toLowerCase();\n return this.allowed.includes(ext);\n }\n\n isArray(): boolean {\n return false;\n }\n\n getType(): string {\n return 'string';\n }\n\n private getFileExtension(filename: string): string {\n const lastDotIndex = filename.lastIndexOf('.');\n return lastDotIndex !== -1 ? filename.substring(lastDotIndex + 1) : '';\n }\n}","import { Validator } from './validator';\n\nexport class FileName extends Validator {\n /**\n * Get Description\n */\n getDescription(): string {\n return 'Filename is not valid';\n }\n\n /**\n * The file name can only contain \"a-z\", \"A-Z\", \"0-9\" and \".\" and not empty.\n *\n * @param name - The filename to validate\n * @returns boolean indicating if the filename is valid\n */\n isValid(name: any): boolean {\n if (!name) {\n return false;\n }\n\n if (typeof name !== 'string') {\n return false;\n }\n\n if (!/^[a-zA-Z0-9.]+$/.test(name)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Is array\n *\n * Function will return true if object is array.\n *\n * @returns boolean\n */\n isArray(): boolean {\n return false;\n }\n\n /**\n * Get Type\n *\n * Returns validator type.\n *\n * @returns string\n */\n getType(): string {\n return Validator.TYPE_STRING;\n }\n}","import { Validator } from './validator';\n\nexport class FileSize extends Validator {\n private max: number;\n\n /**\n * Max size in bytes\n */\n constructor(max: number) {\n super();\n this.max = max;\n }\n\n /**\n * Get Description\n */\n getDescription(): string {\n return `File size can't be bigger than ${this.max}`;\n }\n\n /**\n * Finds whether a file size is smaller than required limit.\n */\n isValid(fileSize: any): boolean {\n if (typeof fileSize !== 'number' || !Number.isInteger(fileSize)) {\n return false;\n }\n\n if (fileSize > this.max) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Is array\n *\n * Function will return true if object is array.\n */\n isArray(): boolean {\n return false;\n }\n\n /**\n * Get Type\n *\n * Returns validator type.\n */\n getType(): string {\n return Validator.TYPE_INTEGER;\n }\n}","import { readFile } from 'fs/promises';\nimport { Validator } from './validator';\n\nexport class FileType extends Validator {\n /**\n * File Types Constants.\n */\n static readonly FILE_TYPE_JPEG = 'jpeg';\n static readonly FILE_TYPE_GIF = 'gif';\n static readonly FILE_TYPE_PNG = 'png';\n static readonly FILE_TYPE_GZIP = 'gz';\n\n /**\n * File Type Binaries.\n */\n private readonly types: Record<string, string> = {\n [FileType.FILE_TYPE_JPEG]: '\\xFF\\xD8\\xFF',\n [FileType.FILE_TYPE_GIF]: 'GIF',\n [FileType.FILE_TYPE_PNG]: '\\x89\\x50\\x4e\\x47\\x0d\\x0a',\n [FileType.FILE_TYPE_GZIP]: 'application/x-gzip',\n };\n\n private readonly allowed: string[];\n\n constructor(allowed: string[]) {\n super();\n \n for (const key of allowed) {\n if (!(key in this.types)) {\n throw new Error('Unknown file mime type');\n }\n }\n\n this.allowed = allowed;\n }\n\n /**\n * Get Description\n */\n getDescription(): string {\n return 'File mime-type is not allowed ';\n }\n\n /**\n * Is Valid.\n *\n * Binary check to finds whether a file is of valid type\n */\n async isValid(path: string): Promise<boolean> {\n try {\n const buffer = await readFile(path);\n const bytes = buffer.toString('binary', 0, 8);\n\n for (const key of this.allowed) {\n if (bytes.indexOf(this.types[key]) === 0) {\n return true;\n }\n }\n\n return false;\n } catch {\n return false;\n }\n }\n\n /**\n * Is array\n */\n isArray(): boolean {\n return false;\n }\n\n /**\n * Get Type\n */\n getType(): string {\n return 'string';\n }\n}","import { Validator } from \"./validator\";\nimport { promises as fs } from 'fs';\n\nexport class Upload extends Validator {\n /**\n * Get Description\n */\n getDescription(): string {\n return 'Not a valid upload file';\n }\n\n /**\n * Check if a file is a valid upload file\n *\n * @param path - The file path to validate\n * @returns Promise that resolves to true if valid upload file, false otherwise\n */\n async isValid(path: unknown): Promise<boolean> {\n if (typeof path !== 'string') {\n return false;\n }\n\n try {\n const stats = await fs.stat(path);\n return stats.isFile();\n } catch {\n return false;\n }\n }\n\n /**\n * Is array\n *\n * Function will return true if object is array.\n *\n * @returns false - this validator doesn't handle arrays\n */\n isArray(): boolean {\n return false;\n }\n\n /**\n * Get Type\n *\n * Returns validator type.\n *\n * @returns The validator type\n */\n getType(): string {\n return 'string';\n }\n}\n","import { Device } from \"../device\";\nimport { Storage } from \"../storage\";\nimport { promises as fs } from \"fs\";\nimport path from \"path\";\nimport { createHash } from \"crypto\";\n\nexport class Local extends Device {\n protected root: string = 'temp';\n protected readonly MAX_PAGE_SIZE = 1000;\n\n constructor(root: string = '') {\n super();\n this.root = root;\n }\n\n getName(): string {\n return 'Local Storage';\n }\n\n getType(): string {\n return Storage.DEVICE_LOCAL;\n }\n\n getDescription(): string {\n return 'Adapter for Local storage that is in the physical or virtual machine or mounted to it.';\n }\n\n getRoot(): string {\n return this.root;\n }\n\n getPath(filename: string, prefix?: string): string {\n return this.getAbsolutePath(path.join(this.getRoot(), filename));\n }\n\n async upload(source: string, filePath: string, chunk: number = 1, chunks: number = 1, metadata: Record<string, any> = {}): Promise<number> {\n await this.createDirectory(path.dirname(filePath));\n\n if (chunks === 1) {\n try {\n await fs.rename(source, filePath);\n return chunks;\n } catch (error) {\n throw new Error(`Can't upload file ${filePath}`);\n }\n }\n\n const tmp = path.join(path.dirname(filePath), `tmp_${path.basename(filePath)}`, `${path.basename(filePath)}_chunks.log`);\n await this.createDirectory(path.dirname(tmp));\n\n const chunkFilePath = path.join(path.dirname(tmp), `${path.parse(filePath).name}.part.${chunk}`);\n\n // Skip writing chunk if the chunk was re-uploaded\n if (!(await this.exists(chunkFilePath))) {\n try {\n await fs.appendFile(tmp, `${chunk}\\n`);\n } catch (error) {\n throw new Error(`Can't write chunk log ${tmp}`);\n }\n }\n\n try {\n const chunkLogs = await fs.readFile(tmp, 'utf8');\n const chunksReceived = chunkLogs.trim().split('\\n').length;\n\n await fs.rename(source, chunkFilePath);\n\n if (chunks === chunksReceived) {\n await this.joinChunks(filePath, chunks);\n return chunksReceived;\n }\n\n return chunksReceived;\n } catch (error) {\n throw new Error(`Failed to write chunk ${chunk}`);\n }\n }\n\n async uploadData(data: string, filePath: string, contentType: string, chunk: number = 1, chunks: number = 1, metadata: Record<string, any> = {}): Promise<number> {\n await this.createDirectory(path.dirname(filePath));\n\n if (chunks === 1) {\n try {\n await fs.writeFile(filePath, data);\n return chunks;\n } catch (error) {\n throw new Error(`Can't write file ${filePath}`);\n }\n }\n\n const tmp = path.join(path.dirname(filePath), `tmp_${path.basename(filePath)}`, `${path.basename(filePath)}_chunks.log`);\n await this.createDirectory(path.dirname(tmp));\n\n try {\n await fs.appendFile(tmp, `${chunk}\\n`);\n const chunkLogs = await fs.readFile(tmp, 'utf8');\n const chunksReceived = chunkLogs.trim().split('\\n').length;\n\n const chunkFilePath = path.join(path.dirname(tmp), `${path.parse(filePath).name}.part.${chunk}`);\n await fs.writeFile(chunkFilePath, data);\n\n if (chunks === chunksReceived) {\n await this.joinChunks(filePath, chunks);\n return chunksReceived;\n }\n\n return chunksReceived;\n } catch (error) {\n throw new Error(`Failed to write chunk ${chunk}`);\n }\n }\n\n private async joinChunks(filePath: string, chunks: number): Promise<void> {\n const tmp = path.join(path.dirname(filePath), `tmp_${path.basename(filePath)}`, `${path.basename(filePath)}_chunks.log`);\n\n for (let i = 1; i <= chunks; i++) {\n const part = path.join(path.dirname(tmp), `${path.parse(filePath).name}.part.${i}`);\n\n try {\n const data = await fs.readFile(part);\n await fs.appendFile(filePath, data);\n await fs.unlink(part);\n } catch (error) {\n throw new Error(`Failed to read/append chunk ${part}`);\n }\n }\n\n await fs.unlink(tmp);\n await fs.rmdir(path.dirname(tmp));\n }\n\n async transfer(filePath: string, destination: string, device: Device): Promise<boolean> {\n if (!(await this.exists(filePath))) {\n throw new Error('File Not Found');\n }\n\n const size = await this.getFileSize(filePath);\n const contentType = await this.getFileMimeType(filePath);\n\n if (size <= this.transferChunkSize) {\n const source = await this.read(filePath);\n return await device.write(destination, source, contentType);\n }\n\n const totalChunks = Math.ceil(size / this.transferChunkSize);\n const metadata = { content_type: contentType };\n\n for (let counter = 0; counter < totalChunks; counter++) {\n const start = counter * this.transferChunkSize;\n const data = await this.read(filePath, start, this.transferChunkSize);\n await device.uploadData(data, destination, contentType, counter + 1, totalChunks, metadata);\n }\n\n return true;\n }\n\n async abort(filePath: string, extra: string = ''): Promise<boolean> {\n if (await this.exists(filePath)) {\n await fs.unlink(filePath);\n }\n\n const tmp = path.join(path.dirname(filePath), `tmp_${path.basename(filePath)}`);\n\n if (!(await this.exists(path.dirname(tmp)))) {\n throw new Error(`File doesn't exist: ${path.dirname(filePath)}`);\n }\n\n const files = await this.getFiles(tmp);\n for (const file of files) {\n await this.delete(file, true);\n }\n\n return fs.rmdir(tmp).then(() => true).catch(() => false);\n }\n\n async read(filePath: string, offset: number = 0, length?: number): Promise<string> {\n if (!(await this.exists(filePath))) {\n throw new Error('File Not Found');\n }\n\n const fileHandle = await fs.open(filePath, 'r');\n try {\n const buffer = Buffer.alloc(length || (await fileHandle.stat()).size - offset);\n await fileHandle.read(buffer, 0, buffer.length, offset);\n return buffer.toString();\n } finally {\n await fileHandle.close();\n }\n }\n\n async write(filePath: string, data: string, contentType: string = ''): Promise<boolean> {\n try {\n await this.createDirectory(path.dirname(filePath));\n await fs.writeFile(filePath, data);\n return true;\n } catch (error) {\n throw new Error(`Can't create directory ${path.dirname(filePath)}`);\n }\n }\n\n async move(source: string, target: string): Promise<boolean> {\n if (source === target) {\n return false;\n }\n\n try {\n await this.createDirectory(path.dirname(target));\n await fs.rename(source, target);\n return true;\n } catch (error) {\n return false;\n }\n }\n\n async delete(filePath: string, recursive: boolean = false): Promise<boolean> {\n try {\n const stats = await fs.stat(filePath);\n\n if (stats.isDirectory() && recursive) {\n const files = await this.getFiles(filePath);\n for (const file of files) {\n await this.delete(file, true);\n }\n await fs.rmdir(filePath);\n } else if (stats.isFile() || stats.isSymbolicLink()) {\n await fs.unlink(filePath);\n }\n return true;\n } catch (error) {\n return false;\n }\n }\n\n async deletePath(filePath: string): Promise<boolean> {\n const fullPath = path.resolve(path.join(this.getRoot(), filePath));\n\n try {\n if (!(await this.exists(fullPath))) {\n return false;\n }\n\n const stats = await fs.stat(fullPath);\n if (!stats.isDirectory()) {\n return false;\n }\n\n const files = await this.getFiles(fullPath);\n for (const file of files) {\n const stats = await fs.stat(file);\n if (stats.isDirectory()) {\n const relativePath = file.replace(this.getRoot() + path.sep, '');\n await this.deletePath(relativePath);\n } else {\n await this.delete(file, true);\n }\n }\n\n await fs.rmdir(fullPath);\n return true;\n } catch (error) {\n return false;\n }\n }\n\n async exists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n }\n\n async getFileSize(filePath: string): Promise<number> {\n const stats = await fs.stat(filePath);\n return stats.size;\n }\n\n async getFileMimeType(filePath: string): Promise<string> {\n // Note: Node.js doesn't have a built-in mime-type detection\n // You might want to use a library like 'mime-types' or 'file-type'\n const ext = path.extname(filePath);\n const mimeTypes: Record<string, string> = {\n '.txt': 'text/plain',\n '.html': 'text/html',\n '.js': 'application/javascript',\n '.json': 'application/json',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.gif': 'image/gif'\n };\n return mimeTypes[ext] || 'application/octet-stream';\n }\n\n async getFileHash(filePath: string): Promise<string> {\n const data = await fs.readFile(filePath);\n return createHash('md5').update(data).digest('hex');\n }\n\n async createDirectory(dirPath: string): Promise<boolean> {\n try {\n await fs.mkdir(dirPath, { recursive: true, mode: 0o755 });\n return true;\n } catch (error) {\n return false;\n }\n }\n\n async getDirectorySize(dirPath: string): Promise<number> {\n try {\n let size = 0;\n const files = await fs.readdir(dirPath, { withFileTypes: true });\n\n for (const file of files) {\n if (file.name.startsWith('.')) continue;\n\n const fullPath = path.join(dirPath, file.name);\n if (file.isDirectory()) {\n size += await this.getDirectorySize(fullPath);\n } else {\n const stats = await fs.stat(fullPath);\n size += stats.size;\n }\n }\n\n return size;\n } catch (error) {\n return -1;\n }\n }\n\n async getPartitionFreeSpace(): Promise<number> {\n const stats = await fs.statfs(this.getRoot());\n return stats.bavail * stats.bsize;\n }\n\n async getPartitionTotalSpace(): Promise<number> {\n const stats = await fs.statfs(this.getRoot());\n return stats.blocks * stats.bsize;\n }\n\n async getFiles(dir: string, max: number = this.MAX_PAGE_SIZE, continuationToken: string = ''): Promise<string[]> {\n const files: string[] = [];\n\n try {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n files.push(path.join(dir, entry.name));\n }\n\n return files;\n } catch (error) {\n return [];\n }\n }\n}\n","import { Device } from \"../device\";\nimport { Storage } from \"../storage\";\nimport crypto from 'crypto';\n\nexport class S3 extends Device {\n\n // HTTP Methods\n static readonly METHOD_GET = 'GET';\n static readonly METHOD_POST = 'POST';\n static readonly METHOD_PUT = 'PUT';\n static readonly METHOD_PATCH = 'PATCH';\n static readonly METHOD_DELETE = 'DELETE';\n static readonly METHOD_HEAD = 'HEAD';\n static readonly METHOD_OPTIONS = 'OPTIONS';\n static readonly METHOD_CONNECT = 'CONNECT';\n static readonly METHOD_TRACE = 'TRACE';\n\n // AWS Regions\n static readonly US_EAST_1 = 'us-east-1';\n static readonly US_EAST_2 = 'us-east-2';\n static readonly US_WEST_1 = 'us-west-1';\n static readonly US_WEST_2 = 'us-west-2';\n static readonly AF_SOUTH_1 = 'af-south-1';\n static readonly AP_EAST_1 = 'ap-east-1';\n static readonly AP_SOUTH_1 = 'ap-south-1';\n static readonly AP_NORTHEAST_3 = 'ap-northeast-3';\n static readonly AP_NORTHEAST_2 = 'ap-northeast-2';\n static readonly AP_NORTHEAST_1 = 'ap-northeast-1';\n static readonly AP_SOUTHEAST_1 = 'ap-southeast-1';\n static readonly AP_SOUTHEAST_2 = 'ap-southeast-2';\n static readonly CA_CENTRAL_1 = 'ca-central-1';\n static readonly EU_CENTRAL_1 = 'eu-central-1';\n static readonly EU_WEST_1 = 'eu-west-1';\n static readonly EU_SOUTH_1 = 'eu-south-1';\n static readonly EU_WEST_2 = 'eu-west-2';\n static readonly EU_WEST_3 = 'eu-west-3';\n static readonly EU_NORTH_1 = 'eu-north-1';\n static readonly SA_EAST_1 = 'eu-north-1';\n static readonly CN_NORTH_1 = 'cn-north-1';\n static readonly CN_NORTH_4 = 'cn-north-4';\n static readonly CN_NORTHWEST_1 = 'cn-northwest-1';\n static readonly ME_SOUTH_1 = 'me-south-1';\n static readonly US_GOV_EAST_1 = 'us-gov-east-1';\n static readonly US_GOV_WEST_1 = 'us-gov-west-1';\n\n // ACL Flags\n static readonly ACL_PRIVATE = 'private';\n static readonly ACL_PUBLIC_READ = 'public-read';\n static readonly ACL_PUBLIC_READ_WRITE = 'public-read-write';\n static readonly ACL_AUTHENTICATED_READ = 'authenticated-read';\n\n protected static readonly MAX_PAGE_SIZE = 1000;\n protected static retryAttempts = 3;\n protected static retryDelay = 500;\n\n protected accessKey: string;\n protected secretKey: string;\n protected bucket: string;\n protected region: string;\n protected acl: string = S3.ACL_PRIVATE;\n protected root: string = 'temp';\n protected headers: Record<string, string> = {\n 'host': '',\n 'date': '',\n 'content-md5': '',\n 'content-type': '',\n };\n protected amzHeaders: Record<string, string>;\n\n constructor(\n root: string,\n accessKey: string,\n secretKey: string,\n bucket: string,\n region: string = S3.US_EAST_1,\n acl: string = S3.ACL_PRIVATE,\n endpointUrl: string = ''\n ) {\n super();\n this.accessKey = accessKey;\n this.secretKey = secretKey;\n this.bucket = bucket;\n this.region = region;\n this.root = root;\n this.acl = acl;\n this.amzHeaders = {};\n\n let host: string;\n if (endpointUrl) {\n host = `${bucket}.${endpointUrl}`;\n } else {\n switch (region) {\n case S3.CN_NORTH_1:\n case S3.CN_NORTH_4:\n case S3.CN_NORTHWEST_1:\n host = `${bucket}.s3.${region}.amazonaws.cn`;\n break;\n default:\n host = `${bucket}.s3.${region}.amazonaws.com`;\n }\n }\n\n this.headers['host'] = host;\n }\n\n getName(): string {\n return 'S3 Storage';\n }\n\n getType(): string {\n return Storage.DEVICE_S3;\n }\n\n getDescription(): string {\n return 'S3 Bucket Storage drive for AWS or on premise solution';\n }\n\n getRoot(): string {\n return this.root;\n }\n\n getPath(filename: string, prefix?: string): string {\n return `${this.getRoot()}/${filename}`;\n }\n\n getPartitionTotalSpace(): Promise<number> {\n throw new Error(\"Method not implemented.\");\n }\n\n static setRetryAttempts(attempts: number): void {\n S3.retryAttempts = attempts;\n }\n\n static setRetryDelay(delay: number): void {\n S3.retryDelay = delay;\n }\n\n async upload(source: string | Buffer, path: string, chunk: number = 1, chunks: number = 1, metadata: Record<string, any> = {}): Promise<number> {\n let data: string;\n let contentType: string;\n \n if (typeof source === 'string') {\n const fs = await import('fs');\n const fileData = await fs.promises.readFile(source);\n data = fileData.toString();\n contentType = await this.getMimeType(source);\n } else {\n data = source.toString();\n contentType = metadata.contentType || 'application/octet-stream';\n }\n \n return this.uploadData(data, path, contentType, chunk, chunks, metadata);\n }\n\n async uploadData(data: string, path: string, contentType: string, chunk: number = 1, chunks: number = 1, metadata: Record<string, any> = {}): Promise<number> {\n if (chunk === 1 && chunks === 1) {\n await this.write(path, data, contentType);\n return 1;\n }\n\n let uploadId = metadata['uploadId'];\n if (!uploadId) {\n uploadId = await this.createMultipartUpload(path, contentType);\n metadata['uploadId'] = uploadId;\n }\n\n metadata['parts'] = metadata['parts'] || {};\n metadata['chunks'] = metadata['chunks'] || 0;\n\n const etag = await this.uploadPart(data, path, contentType, chunk, uploadId);\n\n if (!(chunk in metadata['parts'])) {\n metadata['chunks']++;\n }\n metadata['parts'][chunk] = etag;\n\n if (metadata['chunks'] === chunks) {\n await this.completeMultipartUpload(path, uploadId, metadata['parts']);\n }\n\n return metadata['chunks'];\n }\n\n async transfer(path: string, destination: string, device: Device): Promise<boolean> {\n try {\n const response = await this.getInfo(path);\n const size = parseInt(response['content-length'] || '0');\n const contentType = response['content-type'] || '';\n\n if (size <= this.transferChunkSize) {\n const source = await this.read(path);\n return device.write(destination, source, contentType);\n }\n\n const totalChunks = Math.ceil(size / this.transferChunkSize);\n const metadata = { content_type: contentType };\n\n for (let counter = 0; counter < totalChunks; counter++) {\n const start = counter * this.transferChunkSize;\n const data = await this.read(path, start, this.transferChunkSize);\n await device.uploadData(data, destination, contentType, counter + 1, totalChunks, metadata);\n }\n\n return true;\n } catch (e) {\n throw new Error('File not found');\n }\n }\n\n protected async createMultipartUpload(path: string, contentType: string): Promise<string> {\n const uri = path !== '' ? `/${encodeURIComponent(path).replace(/%2F/g, '/').replace(/%3F/g, '?')}` : '/';\n\n this.headers['content-md5'] = Buffer.from(this.md5('')).toString('base64');\n delete this.amzHeaders['x-amz-content-sha256'];\n this.headers['content-type'] = contentType;\n this.amzHeaders['x-amz-acl'] = this.acl;\n\n const response = await this.call(S3.METHOD_POST, uri, '', { uploads: '' });\n return response.body['UploadId'];\n }\n\n protected async uploadPart(data: string, path: string, contentType: string, chunk: number, uploadId: string): Promise<string> {\n const uri = path !== '' ? `/${encodeURIComponent(path).replace(/%2F/g, '/').replace(/%3F/g, '?')}` : '/';\n\n this.headers['content-type'] = contentType;\n this.headers['content-md5'] = Buffer.from(this.md5(data)).toString('base64');\n this.amzHeaders['x-amz-content-sha256'] = this.sha256(data);\n delete this.amzHeaders['x-amz-acl'];\n\n const response = await this.call(S3.METHOD_PUT, uri, data, {\n partNumber: chunk.toString(),\n uploadId: uploadId,\n });\n\n return response.headers['etag'];\n }\n\n protected async completeMultipartUpload(path: string, uploadId: string, parts: Record<number, string>): Promise<boolean> {\n const uri = path !== '' ? `/${encodeURIComponent(path).replace(/%2F/g, '/').replace(/%3F/g, '?')}` : '/';\n\n let body = '<CompleteMultipartUpload>';\n for (const [key, etag] of Object.entries(parts)) {\n body += `<Part><ETag>${etag}</ETag><PartNumber>${key}</PartNumber></Part>`;\n }\n body += '</CompleteMultipartUpload>';\n\n this.amzHeaders['x-amz-content-sha256'] = this.sha256(body);\n this.headers['content-md5'] = Buffer.from(this.md5(body)).toString('base64');\n await this.call(S3.METHOD_POST, uri, body, { uploadId });\n\n return true;\n }\n\n async abort(path: string, extra: string = ''): Promise<boolean> {\n const uri = path !== '' ? `/${encodeURIComponent(path).replace(/%2F/g, '/')}` : '/';\n delete this.headers['content-type'];\n this.headers['content-md5'] = Buffer.from(this.md5('')).toString('base64');\n await this.call(S3.METHOD_DELETE, uri, '', { uploadId: extra });\n return true;\n }\n\n async read(path: string, offset: number = 0, length?: number): Promise<string> {\n delete this.amzHeaders['x-amz-acl'];\n delete this.amzHeaders['x-amz-content-sha256'];\n delete this.headers['content-type'];\n this.headers['content-md5'] = Buffer.from(this.md5('')).toString('base64');\n\n const uri = path !== '' ? `/${encodeURIComponent(path).replace(/%2F/g, '/')}` : '/';\n\n if (length !== undefined) {\n const end = offset + length - 1;\n this.headers['range'] = `bytes=${offset}-${end}`;\n }\n\n const response = await this.call(S3.METHOD_GET, uri, '', {}, false);\n return response.body;\n }\n\n async write(path: string, data: string, contentType: string = ''): Promise<boolean> {\n const uri = path !== '' ? `/${encodeURIComponent(path).replace(/%2F/g, '/').replace(/%3F/g, '?')}` : '/';\n\n this.headers['content-type'] = contentType;\n this.headers['content-md5'] = Buffer.from(this.md5(data)).toString('base64');\n this.amzHeaders['x-amz-content-sha256'] = this.sha256(data);\n this.amzHeaders['x-amz-acl'] = this.acl;\n\n await this.call(S3.METHOD_PUT, uri, data);\n return true;\n }\n\n async delete(path: string, recursive: boolean = false): Promise<boolean> {\n const uri = path !== '' ? `/${encodeURIComponent(path).replace(/%2F/g, '/')}` : '/';\n\n delete this.headers['content-type'];\n delete this.amzHeaders['x-amz-acl'];\n delete this.amzHeaders['x-amz-content-sha256'];\n this.headers['content-md5'] = Buffer.from(this.md5('')).toString('base64');\n\n await this.call(S3.METHOD_DELETE, uri);\n return true;\n }\n\n protected async listObjects(prefix: string = '', maxKeys: number = S3.MAX_PAGE_SIZE, continuationToken: string = ''): Promise<any> {\n if (maxKeys > S3.MAX_PAGE_SIZE) {\n throw new Error(`Cannot list more than ${S3.MAX_PAGE_SIZE} objects`);\n }\n\n const uri = '/';\n prefix = prefix.replace(/^\\//, '');\n this.headers['content-type'] = 'text/plain';\n this.headers['content-md5'] = Buffer.from(this.md5('')).toString('base64');\n\n delete this.amzHeaders['x-amz-content-sha256'];\n delete this.amzHeaders['x-amz-acl'];\n\n const parameters: Record<string, string> = {\n 'list-type': '2',\n 'prefix': prefix,\n 'max-keys': maxKeys.toString(),\n };\n\n if (continuationToken) {\n parameters['continuation-token'] = continuationToken;\n }\n\n const response = await this.call(S3.METHOD_GET, uri, '', parameters);\n return response.body;\n }\n\n async deletePath(path: string): Promise<boolean> {\n path = `${this.getRoot()}/${path}`;\n\n const uri = '/';\n let continuationToken = '';\n\n do {\n const objects = await this.listObjects(path, S3.MAX_PAGE_SIZE, continuationToken);\n const count = parseInt(objects['KeyCount'] || '1');\n\n if (count < 1) break;\n\n continuationToken = objects['NextContinuationToken'] || '';\n let body = '<Delete xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">';\n\n if (count > 1) {\n for (const object of objects['Contents']) {\n body += `<Object><Key>${object['Key']}</Key></Object>`;\n }\n } else {\n body += `<Object><Key>${objects['Contents']['Key']}</Key></Object>`;\n }\n\n body += '<Quiet>true</Quiet></Delete>';\n\n this.amzHeaders['x-amz-content-sha256'] = this.sha256(body);\n this.headers['content-md5'] = Buffer.from(this.md5(body)).toString('base64');\n await this.call(S3.METHOD_POST, uri, body, { delete: '' });\n } while (continuationToken);\n\n return true;\n }\n\n async exists(path: string): Promise<boolean> {\n try {\n await this.getInfo(path);\n return true;\n } catch {\n return false;\n }\n }\n\n async getFileSize(path: string): Promise<number> {\n const response = await this.getInfo(path);\n return parseInt(response['content-length'] || '0');\n }\n\n async getFileMimeType(path: string): Promise<string> {\n const response = await this.getInfo(path);\n return response['content-type'] || '';\n }\n\n async getFileHash(path: string): Promise<string> {\n const etag = (await this.getInfo(path))['etag'] || '';\n return etag ? etag.slice(1, -1) : etag;\n }\n\n async createDirectory(path: string): Promise<boolean> {\n return true; // S3 doesn't have directories\n }\n\n async getDirectorySize(path: string): Promise<number> {\n return -1;\n }\n\n async getPartitionFreeSpace() {\n return -1;\n }\n\n async getFiles(dir: string, max: number = S3.MAX_PAGE_SIZE, continuationToken: string = ''): Promise<any> {\n const data = await this.listObjects(dir, max, continuationToken);\n data['IsTruncated'] = data['IsTruncated'] === 'true';\n data['KeyCount'] = parseInt(data['KeyCount']);\n data['MaxKeys'] = parseInt(data['MaxKeys']);\n return data;\n }\n\n private async getInfo(path: string): Promise<Record<string, string>> {\n delete this.headers['content-type'];\n delete this.amzHeaders['x-amz-acl'];\n delete this.amzHeaders['x-amz-content-sha256'];\n this.headers['content-md5'] = Buffer.from(this.md5('')).toString('base64');\n\n const uri = path !== '' ? `/${encodeURIComponent(path).replace(/%2F/g, '/')}` : '/';\n const response = await this.call(S3.METHOD_HEAD, uri);\n return response.headers;\n }\n\n private getSignatureV4(method: string, uri: string, parameters: Record<string, string> = {}): string {\n const service = 's3';\n const region = this.region;\n const algorithm = 'AWS4-HMAC-SHA256';\n const combinedHeaders: Record<string, string> = {};\n\n const amzDateStamp = this.amzHeaders['x-amz-date'].substring(0, 8);\n\n // Combine headers\n for (const [k, v] of Object.entries(this.headers)) {\n combinedHeaders[k.toLowerCase()] = v.trim();\n }\n\n for (const [k, v] of Object.entries(this.amzHeaders)) {\n combinedHeaders[k.toLowerCase()] = v.trim();\n }\n\n // Sort headers\n const sortedHeaders = Object.keys(combinedHeaders).sort();\n const sortedCombinedHeaders: Record<string, string> = {};\n for (const key of sortedHeaders) {\n sortedCombinedHeaders[key] = combinedHeaders[key];\n }\n\n // Sort parameters\n const sortedParams = Object.keys(parameters).sort();\n const queryString = sortedParams.map(key => `${encodeURIComponent(key)}=${encodeURIComponent(parameters[key])}`).join('&');\n\n // Create canonical request\n const canonicalRequest = [\n method,\n uri.split('?')[0],\n queryString,\n ...Object.entries(sortedCombinedHeaders).map(([k, v]) => `${k}:${v}`),\n '',\n Object.keys(sortedCombinedHeaders).join(';'),\n this.amzHeaders['x-amz-content-sha256']\n ].join('\\n');\n\n // Create string to sign\n const credentialScope = [amzDateStamp, region, service, 'aws4_request'].join('/');\n const stringToSign = [\n algorithm,\n this.amzHeaders['x-amz-date'],\n credentialScope,\n this.sha256(canonicalRequest)\n ].join('\\n');\n\n // Calculate signature\n const kSecret = `AWS4${this.secretKey}`;\n const kDate = this.hmacSha256(amzDateStamp, kSecret);\n const kRegion = this.hmacSha256(region, kDate);\n const kService = this.hmacSha256(service, kRegion);\n const kSigning = this.hmacSha256('aws4_request', kService);\n const signature = this.hmacSha256(stringToSign, kSigning, 'hex');\n\n return `${algorithm} Credential=${this.accessKey}/${credentialScope},SignedHeaders=${Object.keys(sortedCombinedHeaders).join(';')},Signature=${signature}`;\n }\n\n protected async call(method: string, uri: string, data: string = '', parameters: Record<string, string> = {}, decode: boolean = true): Promise<any> {\n const crypto = await import('crypto');\n\n uri = this.getAbsolutePath(uri);\n const queryString = Object.keys(parameters).length ? '?' + Object.entries(parameters).map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join('&') : '';\n const url = `https://${this.headers['host']}${uri}${queryString}`;\n\n this.amzHeaders['x-amz-date'] = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n\n if (!this.amzHeaders['x-amz-content-sha256']) {\n this.amzHeaders['x-amz-content-sha256'] = this.sha256(data);\n }\n\n const headers: Record<string, string> = {};\n\n for (const [header, value] of Object.entries(this.amzHeaders)) {\n if (value.length > 0) {\n headers[header] = value;\n }\n }\n\n this.headers['date'] = new Date().toUTCString();\n\n for (const [header, value] of Object.entries(this.headers)) {\n if (value.length > 0) {\n headers[header] = value;\n }\n }\n\n headers['Authorization'] = this.getSignatureV4(method, uri, parameters);\n\n const fetchOptions: RequestInit = {\n method,\n headers,\n };\n\n if (method === S3.METHOD_PUT || method === S3.METHOD_POST) {\n fetchOptions.body = data;\n }\n\n const response = await fetch(url, fetchOptions);\n\n if (!response.ok) {\n const errorBody = await response.text();\n throw new Error(`HTTP ${response.status}: ${errorBody}`);\n }\n\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key.toLowerCase()] = value;\n });\n\n let body = await response.text();\n\n if (decode && (responseHeaders['content-type'] === 'application/xml' || (body.startsWith('<?xml') && responseHeaders['content-type'] !== 'image/svg+xml'))) {\n const xml2js = await import('xml2js');\n const parser = new xml2js.Parser();\n body = await parser.parseStringPromise(body);\n }\n\n return {\n body,\n headers: responseHeaders,\n code: response.status\n };\n }\n\n private md5(data: string): Buffer {\n return crypto.createHash('md5').update(data).digest();\n }\n\n private sha256(data: string): string {\n return crypto.createHash('sha256').update(data).digest('hex');\n }\n\n private hmacSha256(data: string, key: string | Buffer, encoding: 'hex' | 'binary' = 'binary'): string | Buffer {\n const hmac = crypto.createHmac('sha256', key);\n hmac.update(data);\n return encoding === 'hex' ? hmac.digest('hex') : hmac.digest();\n }\n}","import { Storage } from \"../storage\";\nimport { S3 } from \"./s3\";\n\n\nexport class Wasabi extends S3 {\n /**\n * Regions constants\n */\n static readonly US_WEST_1 = 'us-west-1';\n static readonly AP_NORTHEAST_1 = 'ap-northeast-1';\n static readonly AP_NORTHEAST_2 = 'ap-northeast-2';\n static readonly EU_CENTRAL_1 = 'eu-central-1';\n static readonly EU_CENTRAL_2 = 'eu-central-2';\n static readonly EU_WEST_1 = 'eu-west-1';\n static readonly EU_WEST_2 = 'eu-west-2';\n static readonly US_CENTRAL_1 = 'us-central-1';\n static readonly US_EAST_1 = 'us-east-1';\n static readonly US_EAST_2 = 'us-east-2';\n\n /**\n * Wasabi Constructor\n */\n constructor(\n root: string,\n accessKey: string,\n secretKey: string,\n bucket: string,\n region: string = Wasabi.EU_CENTRAL_1,\n acl: string = S3.ACL_PRIVATE\n ) {\n super(root, accessKey, secretKey, bucket, region, acl);\n this.headers['host'] = `${bucket}.s3.${region}.wasabisys.com`;\n }\n\n getName(): string {\n return 'Wasabi Storage';\n }\n\n getDescription(): string {\n return 'Wasabi Storage';\n }\n\n getType(): string {\n return Storage.DEVICE_WASABI;\n }\n}"],"names":["fs"],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- import { Device } from "../device";
2
- export declare class Local extends Device {
3
- protected root: string;
4
- protected readonly MAX_PAGE_SIZE = 1000;
5
- constructor(root?: string);
6
- getName(): string;
7
- getType(): string;
8
- getDescription(): string;
9
- getRoot(): string;
10
- getPath(filename: string, prefix?: string): string;
11
- upload(source: string, filePath: string, chunk?: number, chunks?: number, metadata?: Record<string, any>): Promise<number>;
12
- uploadData(data: string, filePath: string, contentType: string, chunk?: number, chunks?: number, metadata?: Record<string, any>): Promise<number>;
13
- private joinChunks;
14
- transfer(filePath: string, destination: string, device: Device): Promise<boolean>;
15
- abort(filePath: string, extra?: string): Promise<boolean>;
16
- read(filePath: string, offset?: number, length?: number): Promise<string>;
17
- write(filePath: string, data: string, contentType?: string): Promise<boolean>;
18
- move(source: string, target: string): Promise<boolean>;
19
- delete(filePath: string, recursive?: boolean): Promise<boolean>;
20
- deletePath(filePath: string): Promise<boolean>;
21
- exists(filePath: string): Promise<boolean>;
22
- getFileSize(filePath: string): Promise<number>;
23
- getFileMimeType(filePath: string): Promise<string>;
24
- getFileHash(filePath: string): Promise<string>;
25
- createDirectory(dirPath: string): Promise<boolean>;
26
- getDirectorySize(dirPath: string): Promise<number>;
27
- getPartitionFreeSpace(): Promise<number>;
28
- getPartitionTotalSpace(): Promise<number>;
29
- getFiles(dir: string, max?: number, continuationToken?: string): Promise<string[]>;
30
- }
31
- //# sourceMappingURL=local.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/device/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAMnC,qBAAa,KAAM,SAAQ,MAAM;IAC7B,SAAS,CAAC,IAAI,EAAE,MAAM,CAAU;IAChC,SAAS,CAAC,QAAQ,CAAC,aAAa,QAAQ;gBAE5B,IAAI,GAAE,MAAW;IAK7B,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAI5C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2CpI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAkCnJ,UAAU;IAmBlB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBjF,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB7D,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAe5E,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,GAAE,MAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAUjF,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IActD,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBtE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA+B9C,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK9C,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBlD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK9C,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASlD,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBlD,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKxC,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKzC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAA2B,EAAE,iBAAiB,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAenH"}
@@ -1,89 +0,0 @@
1
- import { Device } from "../device";
2
- export declare class S3 extends Device {
3
- static readonly METHOD_GET = "GET";
4
- static readonly METHOD_POST = "POST";
5
- static readonly METHOD_PUT = "PUT";
6
- static readonly METHOD_PATCH = "PATCH";
7
- static readonly METHOD_DELETE = "DELETE";
8
- static readonly METHOD_HEAD = "HEAD";
9
- static readonly METHOD_OPTIONS = "OPTIONS";
10
- static readonly METHOD_CONNECT = "CONNECT";
11
- static readonly METHOD_TRACE = "TRACE";
12
- static readonly US_EAST_1 = "us-east-1";
13
- static readonly US_EAST_2 = "us-east-2";
14
- static readonly US_WEST_1 = "us-west-1";
15
- static readonly US_WEST_2 = "us-west-2";
16
- static readonly AF_SOUTH_1 = "af-south-1";
17
- static readonly AP_EAST_1 = "ap-east-1";
18
- static readonly AP_SOUTH_1 = "ap-south-1";
19
- static readonly AP_NORTHEAST_3 = "ap-northeast-3";
20
- static readonly AP_NORTHEAST_2 = "ap-northeast-2";
21
- static readonly AP_NORTHEAST_1 = "ap-northeast-1";
22
- static readonly AP_SOUTHEAST_1 = "ap-southeast-1";
23
- static readonly AP_SOUTHEAST_2 = "ap-southeast-2";
24
- static readonly CA_CENTRAL_1 = "ca-central-1";
25
- static readonly EU_CENTRAL_1 = "eu-central-1";
26
- static readonly EU_WEST_1 = "eu-west-1";
27
- static readonly EU_SOUTH_1 = "eu-south-1";
28
- static readonly EU_WEST_2 = "eu-west-2";
29
- static readonly EU_WEST_3 = "eu-west-3";
30
- static readonly EU_NORTH_1 = "eu-north-1";
31
- static readonly SA_EAST_1 = "eu-north-1";
32
- static readonly CN_NORTH_1 = "cn-north-1";
33
- static readonly CN_NORTH_4 = "cn-north-4";
34
- static readonly CN_NORTHWEST_1 = "cn-northwest-1";
35
- static readonly ME_SOUTH_1 = "me-south-1";
36
- static readonly US_GOV_EAST_1 = "us-gov-east-1";
37
- static readonly US_GOV_WEST_1 = "us-gov-west-1";
38
- static readonly ACL_PRIVATE = "private";
39
- static readonly ACL_PUBLIC_READ = "public-read";
40
- static readonly ACL_PUBLIC_READ_WRITE = "public-read-write";
41
- static readonly ACL_AUTHENTICATED_READ = "authenticated-read";
42
- protected static readonly MAX_PAGE_SIZE = 1000;
43
- protected static retryAttempts: number;
44
- protected static retryDelay: number;
45
- protected accessKey: string;
46
- protected secretKey: string;
47
- protected bucket: string;
48
- protected region: string;
49
- protected acl: string;
50
- protected root: string;
51
- protected headers: Record<string, string>;
52
- protected amzHeaders: Record<string, string>;
53
- constructor(root: string, accessKey: string, secretKey: string, bucket: string, region?: string, acl?: string, endpointUrl?: string);
54
- getName(): string;
55
- getType(): string;
56
- getDescription(): string;
57
- getRoot(): string;
58
- getPath(filename: string, prefix?: string): string;
59
- getPartitionTotalSpace(): Promise<number>;
60
- static setRetryAttempts(attempts: number): void;
61
- static setRetryDelay(delay: number): void;
62
- upload(source: string | Buffer, path: string, chunk?: number, chunks?: number, metadata?: Record<string, any>): Promise<number>;
63
- uploadData(data: string, path: string, contentType: string, chunk?: number, chunks?: number, metadata?: Record<string, any>): Promise<number>;
64
- transfer(path: string, destination: string, device: Device): Promise<boolean>;
65
- protected createMultipartUpload(path: string, contentType: string): Promise<string>;
66
- protected uploadPart(data: string, path: string, contentType: string, chunk: number, uploadId: string): Promise<string>;
67
- protected completeMultipartUpload(path: string, uploadId: string, parts: Record<number, string>): Promise<boolean>;
68
- abort(path: string, extra?: string): Promise<boolean>;
69
- read(path: string, offset?: number, length?: number): Promise<string>;
70
- write(path: string, data: string, contentType?: string): Promise<boolean>;
71
- delete(path: string, recursive?: boolean): Promise<boolean>;
72
- protected listObjects(prefix?: string, maxKeys?: number, continuationToken?: string): Promise<any>;
73
- deletePath(path: string): Promise<boolean>;
74
- exists(path: string): Promise<boolean>;
75
- getFileSize(path: string): Promise<number>;
76
- getFileMimeType(path: string): Promise<string>;
77
- getFileHash(path: string): Promise<string>;
78
- createDirectory(path: string): Promise<boolean>;
79
- getDirectorySize(path: string): Promise<number>;
80
- getPartitionFreeSpace(): Promise<number>;
81
- getFiles(dir: string, max?: number, continuationToken?: string): Promise<any>;
82
- private getInfo;
83
- private getSignatureV4;
84
- protected call(method: string, uri: string, data?: string, parameters?: Record<string, string>, decode?: boolean): Promise<any>;
85
- private md5;
86
- private sha256;
87
- private hmacSha256;
88
- }
89
- //# sourceMappingURL=s3.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"s3.d.ts","sourceRoot":"","sources":["../../../src/device/s3.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- import { S3 } from "./s3";
2
- export declare class Wasabi extends S3 {
3
- /**
4
- * Regions constants
5
- */
6
- static readonly US_WEST_1 = "us-west-1";
7
- static readonly AP_NORTHEAST_1 = "ap-northeast-1";
8
- static readonly AP_NORTHEAST_2 = "ap-northeast-2";
9
- static readonly EU_CENTRAL_1 = "eu-central-1";
10
- static readonly EU_CENTRAL_2 = "eu-central-2";
11
- static readonly EU_WEST_1 = "eu-west-1";
12
- static readonly EU_WEST_2 = "eu-west-2";
13
- static readonly US_CENTRAL_1 = "us-central-1";
14
- static readonly US_EAST_1 = "us-east-1";
15
- static readonly US_EAST_2 = "us-east-2";
16
- /**
17
- * Wasabi Constructor
18
- */
19
- constructor(root: string, accessKey: string, secretKey: string, bucket: string, region?: string, acl?: string);
20
- getName(): string;
21
- getDescription(): string;
22
- getType(): string;
23
- }
24
- //# sourceMappingURL=wasabi.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wasabi.d.ts","sourceRoot":"","sources":["../../../src/device/wasabi.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAG1B,qBAAa,MAAO,SAAQ,EAAE;IAC1B;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,SAAS,eAAe;IACxC,MAAM,CAAC,QAAQ,CAAC,cAAc,oBAAoB;IAClD,MAAM,CAAC,QAAQ,CAAC,cAAc,oBAAoB;IAClD,MAAM,CAAC,QAAQ,CAAC,YAAY,kBAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,YAAY,kBAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,SAAS,eAAe;IACxC,MAAM,CAAC,QAAQ,CAAC,SAAS,eAAe;IACxC,MAAM,CAAC,QAAQ,CAAC,YAAY,kBAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,SAAS,eAAe;IACxC,MAAM,CAAC,QAAQ,CAAC,SAAS,eAAe;IAExC;;OAEG;gBAEC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAA4B,EACpC,GAAG,GAAE,MAAuB;IAMhC,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,OAAO,IAAI,MAAM;CAGpB"}
@@ -1,146 +0,0 @@
1
- export interface DeviceMetadata {
2
- [key: string]: any;
3
- }
4
- export declare abstract class Device {
5
- /**
6
- * Max chunk size while transferring file from one device to another
7
- */
8
- protected transferChunkSize: number;
9
- /**
10
- * Sets the maximum number of keys returned to the response. By default, the action returns up to 1,000 key names.
11
- */
12
- protected static readonly MAX_PAGE_SIZE: number;
13
- /**
14
- * Set Transfer Chunk Size
15
- */
16
- setTransferChunkSize(chunkSize: number): void;
17
- /**
18
- * Get Transfer Chunk Size
19
- */
20
- getTransferChunkSize(): number;
21
- /**
22
- * Get Name.
23
- *
24
- * Get storage device name
25
- */
26
- abstract getName(): string;
27
- /**
28
- * Get Type.
29
- *
30
- * Get storage device type
31
- */
32
- abstract getType(): string;
33
- /**
34
- * Get Description.
35
- *
36
- * Get storage device description and purpose.
37
- */
38
- abstract getDescription(): string;
39
- /**
40
- * Get Root.
41
- *
42
- * Get storage device root path
43
- */
44
- abstract getRoot(): string;
45
- /**
46
- * Get Path.
47
- *
48
- * Each device hold a complex directory structure that is being build in this method.
49
- */
50
- abstract getPath(filename: string, prefix?: string): string;
51
- /**
52
- * Upload.
53
- *
54
- * Upload a file to desired destination in the selected disk
55
- * return number of chunks uploaded or 0 if it fails.
56
- */
57
- abstract upload(source: string, path: string, chunk?: number, chunks?: number, metadata?: DeviceMetadata): Promise<number>;
58
- /**
59
- * Upload Data.
60
- *
61
- * Upload file contents to desired destination in the selected disk.
62
- * return number of chunks uploaded or 0 if it fails.
63
- */
64
- abstract uploadData(data: string, path: string, contentType: string, chunk?: number, chunks?: number, metadata?: DeviceMetadata): Promise<number>;
65
- /**
66
- * Abort Chunked Upload
67
- */
68
- abstract abort(path: string, extra?: string): Promise<boolean>;
69
- /**
70
- * Read file by given path.
71
- */
72
- abstract read(path: string, offset?: number, length?: number): Promise<string>;
73
- /**
74
- * Transfer
75
- * Transfer a file from current device to destination device.
76
- */
77
- abstract transfer(path: string, destination: string, device: Device): Promise<boolean>;
78
- /**
79
- * Write file by given path.
80
- */
81
- abstract write(path: string, data: string, contentType: string): Promise<boolean>;
82
- /**
83
- * Move file from given source to given path, return true on success and false on failure.
84
- */
85
- move(source: string, target: string): Promise<boolean>;
86
- /**
87
- * Delete file in given path return true on success and false on failure.
88
- */
89
- abstract delete(path: string, recursive?: boolean): Promise<boolean>;
90
- /**
91
- * Delete files in given path, path must be a directory. return true on success and false on failure.
92
- */
93
- abstract deletePath(path: string): Promise<boolean>;
94
- /**
95
- * Check if file exists
96
- */
97
- abstract exists(path: string): Promise<boolean>;
98
- /**
99
- * Returns given file path its size.
100
- */
101
- abstract getFileSize(path: string): Promise<number>;
102
- /**
103
- * Returns given file path its mime type.
104
- */
105
- abstract getFileMimeType(path: string): Promise<string>;
106
- /**
107
- * Returns given file path its MD5 hash value.
108
- */
109
- abstract getFileHash(path: string): Promise<string>;
110
- /**
111
- * Create a directory at the specified path.
112
- *
113
- * Returns true on success or if the directory already exists and false on error
114
- */
115
- abstract createDirectory(path: string): Promise<boolean>;
116
- /**
117
- * Get directory size in bytes.
118
- *
119
- * Return -1 on error
120
- */
121
- abstract getDirectorySize(path: string): Promise<number>;
122
- /**
123
- * Get Partition Free Space.
124
- *
125
- * Returns available space on filesystem or disk partition
126
- */
127
- abstract getPartitionFreeSpace(): Promise<number>;
128
- /**
129
- * Get Partition Total Space.
130
- *
131
- * Returns the total size of a filesystem or disk partition
132
- */
133
- abstract getPartitionTotalSpace(): Promise<number>;
134
- /**
135
- * Get all files and directories inside a directory.
136
- */
137
- abstract getFiles(dir: string, max?: number, continuationToken?: string): Promise<any[]>;
138
- /**
139
- * Get the absolute path by resolving strings like ../, .., //, /\ and so on.
140
- *
141
- * Works like the realpath function but works on files that does not exist
142
- */
143
- getAbsolutePath(path: string): string;
144
- protected getMimeType(filePath: string): Promise<string>;
145
- }
146
- //# sourceMappingURL=device.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/device.ts"],"names":[],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- import { Device } from "./device";
2
- export declare class Storage {
3
- /**
4
- * Supported devices
5
- */
6
- static readonly DEVICE_LOCAL = "local";
7
- static readonly DEVICE_S3 = "s3";
8
- static readonly DEVICE_WASABI = "wasabi";
9
- /**
10
- * Devices.
11
- *
12
- * List of all available storage devices
13
- */
14
- private static devices;
15
- /**
16
- * Set Device.
17
- *
18
- * Add device by name
19
- *
20
- * @param name
21
- * @param device
22
- * @throws Error
23
- */
24
- static setDevice(name: string, device: Device): void;
25
- /**
26
- * Get Device.
27
- *
28
- * Get device by name
29
- *
30
- * @param name
31
- * @returns Device
32
- * @throws Error
33
- */
34
- static getDevice(name: string): Device;
35
- /**
36
- * Exists.
37
- *
38
- * Checks if given storage name is registered or not
39
- *
40
- * @param name
41
- * @returns boolean
42
- */
43
- static exists(name: string): boolean;
44
- /**
45
- * Human readable data size format from bytes input.
46
- *
47
- * Based on: https://stackoverflow.com/a/38659168/2299554
48
- *
49
- * @param bytes
50
- * @param decimals
51
- * @param system
52
- * @returns string
53
- */
54
- static human(bytes: number, decimals?: number, system?: 'binary' | 'metric'): string;
55
- }
56
- //# sourceMappingURL=storage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBAAa,OAAO;IAChB;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,YAAY,WAAW;IACvC,MAAM,CAAC,QAAQ,CAAC,SAAS,QAAQ;IAEjC,MAAM,CAAC,QAAQ,CAAC,aAAa,YAAY;IAIzC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,OAAO,CAAkC;IAExD;;;;;;;;OAQG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpD;;;;;;;;OAQG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQtC;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpC;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,EAAE,MAAM,GAAE,QAAQ,GAAG,QAAmB,GAAG,MAAM;CAYpG"}
@@ -1,17 +0,0 @@
1
- import { Validator } from "./validator";
2
- export declare class FileExt extends Validator {
3
- static readonly TYPE_JPEG = "jpeg";
4
- static readonly TYPE_JPG = "jpg";
5
- static readonly TYPE_GIF = "gif";
6
- static readonly TYPE_PNG = "png";
7
- static readonly TYPE_GZIP = "gz";
8
- static readonly TYPE_ZIP = "zip";
9
- private allowed;
10
- constructor(allowed: string[]);
11
- getDescription(): string;
12
- isValid(filename: string): boolean;
13
- isArray(): boolean;
14
- getType(): string;
15
- private getFileExtension;
16
- }
17
- //# sourceMappingURL=file-ext.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-ext.d.ts","sourceRoot":"","sources":["../../../src/validator/file-ext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAa,OAAQ,SAAQ,SAAS;IAClC,MAAM,CAAC,QAAQ,CAAC,SAAS,UAAU;IACnC,MAAM,CAAC,QAAQ,CAAC,QAAQ,SAAS;IACjC,MAAM,CAAC,QAAQ,CAAC,QAAQ,SAAS;IACjC,MAAM,CAAC,QAAQ,CAAC,QAAQ,SAAS;IACjC,MAAM,CAAC,QAAQ,CAAC,SAAS,QAAQ;IACjC,MAAM,CAAC,QAAQ,CAAC,QAAQ,SAAS;IAEjC,OAAO,CAAC,OAAO,CAAW;gBAEd,OAAO,EAAE,MAAM,EAAE;IAK7B,cAAc,IAAI,MAAM;IAIxB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKlC,OAAO,IAAI,OAAO;IAIlB,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,gBAAgB;CAI3B"}