@devbro/neko-storage 0.1.2 → 0.1.3

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.
@@ -10,7 +10,7 @@ declare class LocalStorage extends Storage {
10
10
  static canHandle(config: StorageConfig): boolean;
11
11
  getFullPath(filePath: string): string;
12
12
  exists(path: string): Promise<boolean>;
13
- put(path: string, content: string | object | Stream | Buffer): Promise<boolean>;
13
+ put(filepath: string, content: string | object | Stream | Buffer): Promise<boolean>;
14
14
  getJson(path: string): Promise<object>;
15
15
  getString(path: string, encoding?: BufferEncoding): Promise<string>;
16
16
  getBuffer(path: string): Promise<Buffer>;
@@ -66,9 +66,11 @@ const _LocalStorage = class _LocalStorage extends Storage {
66
66
  }
67
67
  });
68
68
  }
69
- put(path2, content) {
69
+ put(filepath, content) {
70
70
  return __async(this, null, function* () {
71
- const fullPath = this.getFullPath(path2);
71
+ const fullPath = this.getFullPath(filepath);
72
+ const dir = path.dirname(fullPath);
73
+ yield fs.mkdir(dir, { recursive: true });
72
74
  if (typeof content === "string" || content instanceof Buffer) {
73
75
  yield fs.writeFile(fullPath, content);
74
76
  } else if (typeof content === "object" && !(content instanceof Stream)) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/LocalStorage.mts"],"sourcesContent":["import Stream from 'stream';\nimport * as fs from 'fs/promises';\nimport { createWriteStream, createReadStream, ReadStream } from 'fs';\nimport * as path from 'path';\nimport * as mime from 'mime-types';\nimport { Metadata, StorageConfig } from './types.mjs';\nimport { Storage } from './Storage.mjs';\n\nexport class LocalStorage extends Storage {\n constructor(config: StorageConfig) {\n super(config);\n\n if (!LocalStorage.canHandle(config)) {\n throw new Error(`storage engine cannot handle this config.`);\n }\n // Ensure the base folder exists\n fs.mkdir(this.config.basePath, { recursive: true }).catch((error) => {\n throw error;\n });\n }\n\n async metadata(path: string): Promise<Metadata> {\n const fullPath = this.getFullPath(path);\n const stats = await fs.stat(fullPath);\n return {\n size: stats.size,\n mimeType: mime.lookup(fullPath) || 'unknown',\n lastModifiedDate: stats.mtime.toISOString(),\n };\n }\n\n static canHandle(config: StorageConfig) {\n if (config.engine === 'local') {\n return true;\n }\n return false;\n }\n\n getFullPath(filePath: string) {\n return path.join(this.config.basePath, filePath);\n }\n\n async exists(path: string): Promise<boolean> {\n try {\n await fs.access(this.getFullPath(path));\n return true;\n } catch {\n return false;\n }\n }\n\n async put(path: string, content: string | object | Stream | Buffer): Promise<boolean> {\n const fullPath = this.getFullPath(path);\n\n if (typeof content === 'string' || content instanceof Buffer) {\n await fs.writeFile(fullPath, content);\n } else if (typeof content === 'object' && !(content instanceof Stream)) {\n await fs.writeFile(fullPath, JSON.stringify(content, null, 2));\n } else if (typeof content === 'object' && content instanceof Stream) {\n const writeStream = createWriteStream(fullPath);\n await new Promise((resolve, reject) => {\n (content as Stream).pipe(writeStream);\n (content as Stream).on('end', resolve);\n (content as Stream).on('error', reject);\n });\n } else {\n throw new Error('Unsupported content type');\n }\n\n return true;\n }\n\n async getJson(path: string): Promise<object> {\n const fullPath = this.getFullPath(path);\n const content = await fs.readFile(fullPath, 'utf-8');\n return JSON.parse(content);\n }\n\n async getString(path: string, encoding: BufferEncoding = 'utf-8'): Promise<string> {\n const fullPath = this.getFullPath(path);\n return await fs.readFile(fullPath, encoding);\n }\n\n async getBuffer(path: string): Promise<Buffer> {\n const fullPath = this.getFullPath(path);\n return await fs.readFile(fullPath);\n }\n\n async getStream(path: string): Promise<ReadStream> {\n const fullPath = this.getFullPath(path);\n return createReadStream(fullPath);\n }\n\n async delete(path: string): Promise<boolean> {\n const fullPath = this.getFullPath(path);\n await fs.unlink(fullPath);\n return true;\n }\n}\n"],"mappings":"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","names":["path"]}
1
+ {"version":3,"sources":["../src/LocalStorage.mts"],"sourcesContent":["import Stream from 'stream';\nimport * as fs from 'fs/promises';\nimport { createWriteStream, createReadStream, ReadStream } from 'fs';\nimport * as path from 'path';\nimport * as mime from 'mime-types';\nimport { Metadata, StorageConfig } from './types.mjs';\nimport { Storage } from './Storage.mjs';\n\nexport class LocalStorage extends Storage {\n constructor(config: StorageConfig) {\n super(config);\n\n if (!LocalStorage.canHandle(config)) {\n throw new Error(`storage engine cannot handle this config.`);\n }\n // Ensure the base folder exists\n fs.mkdir(this.config.basePath, { recursive: true }).catch((error) => {\n throw error;\n });\n }\n\n async metadata(path: string): Promise<Metadata> {\n const fullPath = this.getFullPath(path);\n const stats = await fs.stat(fullPath);\n return {\n size: stats.size,\n mimeType: mime.lookup(fullPath) || 'unknown',\n lastModifiedDate: stats.mtime.toISOString(),\n };\n }\n\n static canHandle(config: StorageConfig) {\n if (config.engine === 'local') {\n return true;\n }\n return false;\n }\n\n getFullPath(filePath: string) {\n return path.join(this.config.basePath, filePath);\n }\n\n async exists(path: string): Promise<boolean> {\n try {\n await fs.access(this.getFullPath(path));\n return true;\n } catch {\n return false;\n }\n }\n\n async put(filepath: string, content: string | object | Stream | Buffer): Promise<boolean> {\n const fullPath = this.getFullPath(filepath);\n\n const dir = path.dirname(fullPath);\n await fs.mkdir(dir, { recursive: true });\n\n if (typeof content === 'string' || content instanceof Buffer) {\n await fs.writeFile(fullPath, content);\n } else if (typeof content === 'object' && !(content instanceof Stream)) {\n await fs.writeFile(fullPath, JSON.stringify(content, null, 2));\n } else if (typeof content === 'object' && content instanceof Stream) {\n const writeStream = createWriteStream(fullPath);\n await new Promise((resolve, reject) => {\n (content as Stream).pipe(writeStream);\n (content as Stream).on('end', resolve);\n (content as Stream).on('error', reject);\n });\n } else {\n throw new Error('Unsupported content type');\n }\n\n return true;\n }\n\n async getJson(path: string): Promise<object> {\n const fullPath = this.getFullPath(path);\n const content = await fs.readFile(fullPath, 'utf-8');\n return JSON.parse(content);\n }\n\n async getString(path: string, encoding: BufferEncoding = 'utf-8'): Promise<string> {\n const fullPath = this.getFullPath(path);\n return await fs.readFile(fullPath, encoding);\n }\n\n async getBuffer(path: string): Promise<Buffer> {\n const fullPath = this.getFullPath(path);\n return await fs.readFile(fullPath);\n }\n\n async getStream(path: string): Promise<ReadStream> {\n const fullPath = this.getFullPath(path);\n return createReadStream(fullPath);\n }\n\n async delete(path: string): Promise<boolean> {\n const fullPath = this.getFullPath(path);\n await fs.unlink(fullPath);\n return true;\n }\n}\n"],"mappings":"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","names":["path"]}
package/dist/index.js CHANGED
@@ -239,9 +239,11 @@ var _LocalStorage = class _LocalStorage extends Storage {
239
239
  }
240
240
  });
241
241
  }
242
- put(path2, content) {
242
+ put(filepath, content) {
243
243
  return __async(this, null, function* () {
244
- const fullPath = this.getFullPath(path2);
244
+ const fullPath = this.getFullPath(filepath);
245
+ const dir = path.dirname(fullPath);
246
+ yield fs.mkdir(dir, { recursive: true });
245
247
  if (typeof content === "string" || content instanceof Buffer) {
246
248
  yield fs.writeFile(fullPath, content);
247
249
  } else if (typeof content === "object" && !(content instanceof import_stream2.default)) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/Storage.mts","../src/AWSS3Storage.mts","../src/LocalStorage.mts","../src/StorageFactory.mts"],"sourcesContent":["export * from './types.mjs';\nexport * from './Storage.mjs';\nexport * from './AWSS3Storage.mjs';\nexport * from './LocalStorage.mjs';\nexport * from './StorageFactory.mjs';\n","import { ReadStream } from 'fs';\nimport { Stream } from 'stream';\nimport { Metadata } from './types.mjs';\nimport { StorageConfig } from './types.mjs';\n\nexport abstract class Storage {\n constructor(protected config: StorageConfig) {}\n\n static canHandle(config: StorageConfig): boolean {\n throw new Error('Method not implemented.');\n }\n\n abstract exists(path: string): Promise<boolean>;\n abstract put(path: string, content: string | object | Stream | Buffer): Promise<boolean>;\n abstract getJson(path: string): Promise<object>;\n abstract getString(path: string): Promise<string>;\n abstract getBuffer(path: string): Promise<Buffer>;\n abstract getStream(path: string): Promise<ReadStream>;\n abstract delete(path: string): Promise<boolean>;\n abstract metadata(path: string): Promise<Metadata>;\n}\n","import { Metadata, StorageConfig } from './types.mjs';\nimport { Storage } from './Storage.mjs';\nimport {\n S3Client,\n HeadObjectCommand,\n PutObjectCommand,\n GetObjectCommand,\n DeleteObjectCommand,\n HeadObjectOutput,\n} from '@aws-sdk/client-s3';\nimport { ReadStream } from 'fs';\nimport Stream, { Readable } from 'stream';\n\nexport class AWSS3Storage extends Storage {\n private s3: S3Client;\n\n constructor(protected config: StorageConfig) {\n super(config);\n\n if (!AWSS3Storage.canHandle(config)) {\n throw new Error(`storage engine cannot handle this config.`);\n }\n\n this.s3 = new S3Client(this.config?.s3Config || {});\n }\n\n static canHandle(config: StorageConfig): boolean {\n return config.engine === 's3';\n }\n\n async exists(path: string): Promise<boolean> {\n try {\n await this.s3.send(new HeadObjectCommand({ Bucket: this.config?.bucket, Key: path }));\n return true;\n } catch (error: any) {\n if (error.name === 'NotFound') {\n return false;\n }\n throw error;\n }\n }\n\n async put(path: string, content: string | object | Stream | Buffer): Promise<boolean> {\n let body: any;\n if (typeof content === 'string' || content instanceof Buffer) {\n body = content;\n } else if (typeof content === 'object' && !(content instanceof Stream)) {\n body = JSON.stringify(content);\n } else if (content instanceof Stream) {\n body = content;\n } else {\n throw new Error('Unsupported content type');\n }\n\n await this.s3.send(\n new PutObjectCommand({\n Bucket: this.config.bucket,\n Key: path,\n Body: body,\n })\n );\n\n return true;\n }\n\n async getJson(path: string): Promise<object> {\n const data = await this.s3.send(\n new GetObjectCommand({ Bucket: this.config.bucket, Key: path })\n );\n const body = await this.streamToString(data.Body as Stream);\n return JSON.parse(body);\n }\n\n async getString(path: string): Promise<string> {\n const data = await this.s3.send(\n new GetObjectCommand({ Bucket: this.config.bucket, Key: path })\n );\n return await this.streamToString(data.Body as Stream);\n }\n\n async delete(path: string): Promise<boolean> {\n await this.s3.send(new DeleteObjectCommand({ Bucket: this.config.bucket, Key: path }));\n return true;\n }\n\n private async streamToString(stream: Stream): Promise<string> {\n return new Promise((resolve, reject) => {\n const chunks: Uint8Array[] = [];\n stream.on('data', (chunk) => chunks.push(chunk));\n stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));\n stream.on('error', reject);\n });\n }\n\n async getBuffer(path: string): Promise<Buffer> {\n const data = await this.s3.send(\n new GetObjectCommand({ Bucket: this.config.bucket, Key: path })\n );\n const chunks: Uint8Array[] = [];\n const stream = data.Body as Readable;\n\n return new Promise((resolve, reject) => {\n stream.on('data', (chunk) => chunks.push(chunk));\n stream.on('end', () => resolve(Buffer.concat(chunks)));\n stream.on('error', reject);\n });\n }\n\n async getStream(path: string): Promise<ReadStream> {\n const data = await this.s3.send(\n new GetObjectCommand({ Bucket: this.config.bucket, Key: path })\n );\n return data.Body as unknown as ReadStream;\n }\n\n async metadata(path: string): Promise<Metadata> {\n const metadata = await this.s3.send(\n new HeadObjectCommand({ Bucket: this.config.bucket, Key: path })\n );\n return {\n size: metadata.ContentLength || 0,\n mimeType: metadata.ContentType || 'unknown',\n lastModifiedDate: (metadata.LastModified || new Date(0)).toISOString(),\n };\n }\n}\n","import Stream from 'stream';\nimport * as fs from 'fs/promises';\nimport { createWriteStream, createReadStream, ReadStream } from 'fs';\nimport * as path from 'path';\nimport * as mime from 'mime-types';\nimport { Metadata, StorageConfig } from './types.mjs';\nimport { Storage } from './Storage.mjs';\n\nexport class LocalStorage extends Storage {\n constructor(config: StorageConfig) {\n super(config);\n\n if (!LocalStorage.canHandle(config)) {\n throw new Error(`storage engine cannot handle this config.`);\n }\n // Ensure the base folder exists\n fs.mkdir(this.config.basePath, { recursive: true }).catch((error) => {\n throw error;\n });\n }\n\n async metadata(path: string): Promise<Metadata> {\n const fullPath = this.getFullPath(path);\n const stats = await fs.stat(fullPath);\n return {\n size: stats.size,\n mimeType: mime.lookup(fullPath) || 'unknown',\n lastModifiedDate: stats.mtime.toISOString(),\n };\n }\n\n static canHandle(config: StorageConfig) {\n if (config.engine === 'local') {\n return true;\n }\n return false;\n }\n\n getFullPath(filePath: string) {\n return path.join(this.config.basePath, filePath);\n }\n\n async exists(path: string): Promise<boolean> {\n try {\n await fs.access(this.getFullPath(path));\n return true;\n } catch {\n return false;\n }\n }\n\n async put(path: string, content: string | object | Stream | Buffer): Promise<boolean> {\n const fullPath = this.getFullPath(path);\n\n if (typeof content === 'string' || content instanceof Buffer) {\n await fs.writeFile(fullPath, content);\n } else if (typeof content === 'object' && !(content instanceof Stream)) {\n await fs.writeFile(fullPath, JSON.stringify(content, null, 2));\n } else if (typeof content === 'object' && content instanceof Stream) {\n const writeStream = createWriteStream(fullPath);\n await new Promise((resolve, reject) => {\n (content as Stream).pipe(writeStream);\n (content as Stream).on('end', resolve);\n (content as Stream).on('error', reject);\n });\n } else {\n throw new Error('Unsupported content type');\n }\n\n return true;\n }\n\n async getJson(path: string): Promise<object> {\n const fullPath = this.getFullPath(path);\n const content = await fs.readFile(fullPath, 'utf-8');\n return JSON.parse(content);\n }\n\n async getString(path: string, encoding: BufferEncoding = 'utf-8'): Promise<string> {\n const fullPath = this.getFullPath(path);\n return await fs.readFile(fullPath, encoding);\n }\n\n async getBuffer(path: string): Promise<Buffer> {\n const fullPath = this.getFullPath(path);\n return await fs.readFile(fullPath);\n }\n\n async getStream(path: string): Promise<ReadStream> {\n const fullPath = this.getFullPath(path);\n return createReadStream(fullPath);\n }\n\n async delete(path: string): Promise<boolean> {\n const fullPath = this.getFullPath(path);\n await fs.unlink(fullPath);\n return true;\n }\n}\n","import { AWSS3Storage } from './AWSS3Storage.mjs';\nimport { LocalStorage } from './LocalStorage.mjs';\nimport { Storage } from './Storage.mjs';\nimport { StorageConfig } from './types.mjs';\n\nexport class StorageFactory {\n public static storageEngines: (typeof Storage)[] = [LocalStorage, AWSS3Storage];\n\n registerStorageEngine(engine: typeof Storage) {\n StorageFactory.storageEngines.push(engine);\n }\n\n public static create(config: StorageConfig): Storage {\n for (const engine of StorageFactory.storageEngines) {\n if (engine.canHandle(config)) {\n // @ts-ignore\n return new engine(config);\n }\n }\n throw new Error('No matchin storage engine found');\n }\n}\n"],"mappings":"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","names":["path","Stream","import_stream","path","Stream"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/Storage.mts","../src/AWSS3Storage.mts","../src/LocalStorage.mts","../src/StorageFactory.mts"],"sourcesContent":["export * from './types.mjs';\nexport * from './Storage.mjs';\nexport * from './AWSS3Storage.mjs';\nexport * from './LocalStorage.mjs';\nexport * from './StorageFactory.mjs';\n","import { ReadStream } from 'fs';\nimport { Stream } from 'stream';\nimport { Metadata } from './types.mjs';\nimport { StorageConfig } from './types.mjs';\n\nexport abstract class Storage {\n constructor(protected config: StorageConfig) {}\n\n static canHandle(config: StorageConfig): boolean {\n throw new Error('Method not implemented.');\n }\n\n abstract exists(path: string): Promise<boolean>;\n abstract put(path: string, content: string | object | Stream | Buffer): Promise<boolean>;\n abstract getJson(path: string): Promise<object>;\n abstract getString(path: string): Promise<string>;\n abstract getBuffer(path: string): Promise<Buffer>;\n abstract getStream(path: string): Promise<ReadStream>;\n abstract delete(path: string): Promise<boolean>;\n abstract metadata(path: string): Promise<Metadata>;\n}\n","import { Metadata, StorageConfig } from './types.mjs';\nimport { Storage } from './Storage.mjs';\nimport {\n S3Client,\n HeadObjectCommand,\n PutObjectCommand,\n GetObjectCommand,\n DeleteObjectCommand,\n HeadObjectOutput,\n} from '@aws-sdk/client-s3';\nimport { ReadStream } from 'fs';\nimport Stream, { Readable } from 'stream';\n\nexport class AWSS3Storage extends Storage {\n private s3: S3Client;\n\n constructor(protected config: StorageConfig) {\n super(config);\n\n if (!AWSS3Storage.canHandle(config)) {\n throw new Error(`storage engine cannot handle this config.`);\n }\n\n this.s3 = new S3Client(this.config?.s3Config || {});\n }\n\n static canHandle(config: StorageConfig): boolean {\n return config.engine === 's3';\n }\n\n async exists(path: string): Promise<boolean> {\n try {\n await this.s3.send(new HeadObjectCommand({ Bucket: this.config?.bucket, Key: path }));\n return true;\n } catch (error: any) {\n if (error.name === 'NotFound') {\n return false;\n }\n throw error;\n }\n }\n\n async put(path: string, content: string | object | Stream | Buffer): Promise<boolean> {\n let body: any;\n if (typeof content === 'string' || content instanceof Buffer) {\n body = content;\n } else if (typeof content === 'object' && !(content instanceof Stream)) {\n body = JSON.stringify(content);\n } else if (content instanceof Stream) {\n body = content;\n } else {\n throw new Error('Unsupported content type');\n }\n\n await this.s3.send(\n new PutObjectCommand({\n Bucket: this.config.bucket,\n Key: path,\n Body: body,\n })\n );\n\n return true;\n }\n\n async getJson(path: string): Promise<object> {\n const data = await this.s3.send(\n new GetObjectCommand({ Bucket: this.config.bucket, Key: path })\n );\n const body = await this.streamToString(data.Body as Stream);\n return JSON.parse(body);\n }\n\n async getString(path: string): Promise<string> {\n const data = await this.s3.send(\n new GetObjectCommand({ Bucket: this.config.bucket, Key: path })\n );\n return await this.streamToString(data.Body as Stream);\n }\n\n async delete(path: string): Promise<boolean> {\n await this.s3.send(new DeleteObjectCommand({ Bucket: this.config.bucket, Key: path }));\n return true;\n }\n\n private async streamToString(stream: Stream): Promise<string> {\n return new Promise((resolve, reject) => {\n const chunks: Uint8Array[] = [];\n stream.on('data', (chunk) => chunks.push(chunk));\n stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));\n stream.on('error', reject);\n });\n }\n\n async getBuffer(path: string): Promise<Buffer> {\n const data = await this.s3.send(\n new GetObjectCommand({ Bucket: this.config.bucket, Key: path })\n );\n const chunks: Uint8Array[] = [];\n const stream = data.Body as Readable;\n\n return new Promise((resolve, reject) => {\n stream.on('data', (chunk) => chunks.push(chunk));\n stream.on('end', () => resolve(Buffer.concat(chunks)));\n stream.on('error', reject);\n });\n }\n\n async getStream(path: string): Promise<ReadStream> {\n const data = await this.s3.send(\n new GetObjectCommand({ Bucket: this.config.bucket, Key: path })\n );\n return data.Body as unknown as ReadStream;\n }\n\n async metadata(path: string): Promise<Metadata> {\n const metadata = await this.s3.send(\n new HeadObjectCommand({ Bucket: this.config.bucket, Key: path })\n );\n return {\n size: metadata.ContentLength || 0,\n mimeType: metadata.ContentType || 'unknown',\n lastModifiedDate: (metadata.LastModified || new Date(0)).toISOString(),\n };\n }\n}\n","import Stream from 'stream';\nimport * as fs from 'fs/promises';\nimport { createWriteStream, createReadStream, ReadStream } from 'fs';\nimport * as path from 'path';\nimport * as mime from 'mime-types';\nimport { Metadata, StorageConfig } from './types.mjs';\nimport { Storage } from './Storage.mjs';\n\nexport class LocalStorage extends Storage {\n constructor(config: StorageConfig) {\n super(config);\n\n if (!LocalStorage.canHandle(config)) {\n throw new Error(`storage engine cannot handle this config.`);\n }\n // Ensure the base folder exists\n fs.mkdir(this.config.basePath, { recursive: true }).catch((error) => {\n throw error;\n });\n }\n\n async metadata(path: string): Promise<Metadata> {\n const fullPath = this.getFullPath(path);\n const stats = await fs.stat(fullPath);\n return {\n size: stats.size,\n mimeType: mime.lookup(fullPath) || 'unknown',\n lastModifiedDate: stats.mtime.toISOString(),\n };\n }\n\n static canHandle(config: StorageConfig) {\n if (config.engine === 'local') {\n return true;\n }\n return false;\n }\n\n getFullPath(filePath: string) {\n return path.join(this.config.basePath, filePath);\n }\n\n async exists(path: string): Promise<boolean> {\n try {\n await fs.access(this.getFullPath(path));\n return true;\n } catch {\n return false;\n }\n }\n\n async put(filepath: string, content: string | object | Stream | Buffer): Promise<boolean> {\n const fullPath = this.getFullPath(filepath);\n\n const dir = path.dirname(fullPath);\n await fs.mkdir(dir, { recursive: true });\n\n if (typeof content === 'string' || content instanceof Buffer) {\n await fs.writeFile(fullPath, content);\n } else if (typeof content === 'object' && !(content instanceof Stream)) {\n await fs.writeFile(fullPath, JSON.stringify(content, null, 2));\n } else if (typeof content === 'object' && content instanceof Stream) {\n const writeStream = createWriteStream(fullPath);\n await new Promise((resolve, reject) => {\n (content as Stream).pipe(writeStream);\n (content as Stream).on('end', resolve);\n (content as Stream).on('error', reject);\n });\n } else {\n throw new Error('Unsupported content type');\n }\n\n return true;\n }\n\n async getJson(path: string): Promise<object> {\n const fullPath = this.getFullPath(path);\n const content = await fs.readFile(fullPath, 'utf-8');\n return JSON.parse(content);\n }\n\n async getString(path: string, encoding: BufferEncoding = 'utf-8'): Promise<string> {\n const fullPath = this.getFullPath(path);\n return await fs.readFile(fullPath, encoding);\n }\n\n async getBuffer(path: string): Promise<Buffer> {\n const fullPath = this.getFullPath(path);\n return await fs.readFile(fullPath);\n }\n\n async getStream(path: string): Promise<ReadStream> {\n const fullPath = this.getFullPath(path);\n return createReadStream(fullPath);\n }\n\n async delete(path: string): Promise<boolean> {\n const fullPath = this.getFullPath(path);\n await fs.unlink(fullPath);\n return true;\n }\n}\n","import { AWSS3Storage } from './AWSS3Storage.mjs';\nimport { LocalStorage } from './LocalStorage.mjs';\nimport { Storage } from './Storage.mjs';\nimport { StorageConfig } from './types.mjs';\n\nexport class StorageFactory {\n public static storageEngines: (typeof Storage)[] = [LocalStorage, AWSS3Storage];\n\n registerStorageEngine(engine: typeof Storage) {\n StorageFactory.storageEngines.push(engine);\n }\n\n public static create(config: StorageConfig): Storage {\n for (const engine of StorageFactory.storageEngines) {\n if (engine.canHandle(config)) {\n // @ts-ignore\n return new engine(config);\n }\n }\n throw new Error('No matchin storage engine found');\n }\n}\n"],"mappings":"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","names":["path","Stream","import_stream","path","Stream"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devbro/neko-storage",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "abstracted file storage implementation",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",