@file-storage/core
Advanced tools
Comparing version 1.0.3 to 1.0.4
@@ -1,2 +0,4 @@ | ||
import { DiskConfig, Disk } from '@file-storage/common'; | ||
/// <reference types="node" /> | ||
import { Stream } from 'stream'; | ||
import { DiskConfig, Driver, Disk } from '@file-storage/common'; | ||
import { BuitInDiskConfig, StorageConfiguration } from './types'; | ||
@@ -6,18 +8,29 @@ /** | ||
*/ | ||
export declare class Storage { | ||
private readonly disk; | ||
private static initAble; | ||
constructor(diskName?: string); | ||
declare class StorageClass implements Disk { | ||
/** | ||
* Get default disk instance. | ||
*/ | ||
defaultDisk: Disk; | ||
get name(): string; | ||
get driver(): Driver; | ||
/** | ||
* Config for storage methods supported in the application. | ||
*/ | ||
static config<U extends DiskConfig = BuitInDiskConfig>(options?: StorageConfiguration<U>): void; | ||
config<U extends DiskConfig = BuitInDiskConfig>(options?: StorageConfiguration<U>): void; | ||
/** | ||
* Get disk instance by diskName. | ||
*/ | ||
static disk<U extends Disk>(diskName: string): U; | ||
/** | ||
* Get default disk instance. | ||
*/ | ||
static get defaultDisk(): Disk; | ||
disk<U extends Disk>(diskName?: string): U; | ||
url(path: string): string; | ||
exists(path: string): Promise<boolean>; | ||
size(path: string): Promise<number>; | ||
lastModified(path: string): Promise<number>; | ||
put(stream: Stream, path: string): Promise<any>; | ||
get(path: string): Stream | Promise<Stream>; | ||
delete(path: string): Promise<any>; | ||
uploadImageFromExternalUri(uri: string, path: string, ignoreHeaderContentType?: boolean): Promise<any>; | ||
makeDir(dir: string): Promise<string>; | ||
removeDir(dir: string): Promise<string>; | ||
} | ||
export declare const Storage: StorageClass; | ||
export {}; |
@@ -9,4 +9,9 @@ "use strict"; | ||
let configableDefaultDiskName = 'local'; | ||
let defaultStorage; | ||
let availableDisks = []; | ||
const defaultDiskConfig = { | ||
driver: common_1.Driver.LOCAL, | ||
name: 'local', | ||
root: 'storage', | ||
isDefault: true, | ||
}; | ||
let availableDisks = [defaultDiskConfig]; | ||
const driverDiskMaps = [ | ||
@@ -39,8 +44,3 @@ { | ||
if (diskConfigs.length === 0) { | ||
availableDisks.push({ | ||
driver: common_1.Driver.LOCAL, | ||
name: 'local', | ||
root: 'storage', | ||
isDefault: true, | ||
}); | ||
availableDisks.push(defaultDiskConfig); | ||
} | ||
@@ -58,3 +58,2 @@ availableDisks.push(...diskConfigs); | ||
} | ||
defaultStorage = new Storage(); | ||
} | ||
@@ -66,34 +65,42 @@ function addCustomDriver(map = []) { | ||
} | ||
function getDisk(diskName = configableDefaultDiskName) { | ||
const diskConfig = availableDisks.find((item) => item.name === diskName); | ||
if (!diskConfig) { | ||
throw new Error(`Given disk is not defined: ${diskName}`); | ||
} | ||
const driverDiskMap = driverDiskMaps.find((item) => item.name === diskConfig.driver); | ||
if (!driverDiskMap) { | ||
throw new Error(`Driver '${diskConfig.driver}' is not declared.`); | ||
} | ||
try { | ||
return new driverDiskMap.disk(diskConfig); | ||
} | ||
catch (error) { | ||
throw new Error(`Please install \`@file-storage/${diskConfig.driver}\` for ${diskConfig.driver} driver`); | ||
} | ||
} | ||
/** | ||
* `Storage` provides a filesystem abstraction, simple way to uses drivers for working with local filesystems, Amazon S3,... | ||
*/ | ||
class Storage { | ||
constructor(diskName = configableDefaultDiskName) { | ||
if (!Storage.initAble) { | ||
throw new Error('Cannot instantialize this class, it serves as an entry point of this library.'); | ||
} | ||
Storage.initAble = false; | ||
const diskConfig = availableDisks.find((item) => item.name === diskName); | ||
if (!diskConfig) { | ||
throw new Error(`Given disk is not defined: ${diskName}`); | ||
} | ||
const driverDiskMap = driverDiskMaps.find((item) => item.name === diskConfig.driver); | ||
if (!driverDiskMap) { | ||
throw new Error(`Driver '${diskConfig.driver}' is not declared.`); | ||
} | ||
try { | ||
this.disk = new driverDiskMap.disk(diskConfig); | ||
} | ||
catch (error) { | ||
throw new Error(`Please install \`@file-storage/${diskConfig.driver}\` for ${diskConfig.driver} driver`); | ||
} | ||
class StorageClass { | ||
constructor() { | ||
/** | ||
* Get default disk instance. | ||
*/ | ||
this.defaultDisk = getDisk(configableDefaultDiskName); | ||
} | ||
get name() { | ||
return this.defaultDisk.name; | ||
} | ||
get driver() { | ||
return this.defaultDisk.driver; | ||
} | ||
/** | ||
* Config for storage methods supported in the application. | ||
*/ | ||
static config(options = {}) { | ||
config(options = {}) { | ||
const { diskConfigs = [], customDrivers = [] } = options; | ||
Storage.initAble = true; | ||
addCustomDriver(customDrivers); | ||
handleDiskConfigs(diskConfigs); | ||
this.defaultDisk = getDisk(configableDefaultDiskName); | ||
} | ||
@@ -103,15 +110,39 @@ /** | ||
*/ | ||
static disk(diskName) { | ||
Storage.initAble = true; | ||
const storage = new Storage(diskName); | ||
return storage.disk; | ||
disk(diskName) { | ||
if (!diskName) { | ||
return this.defaultDisk; | ||
} | ||
return getDisk(diskName); | ||
} | ||
/** | ||
* Get default disk instance. | ||
*/ | ||
static get defaultDisk() { | ||
return defaultStorage.disk; | ||
url(path) { | ||
return this.defaultDisk.url(path); | ||
} | ||
exists(path) { | ||
return this.defaultDisk.exists(path); | ||
} | ||
size(path) { | ||
return this.defaultDisk.size(path); | ||
} | ||
lastModified(path) { | ||
return this.defaultDisk.lastModified(path); | ||
} | ||
put(stream, path) { | ||
return this.defaultDisk.put(stream, path); | ||
} | ||
get(path) { | ||
return this.defaultDisk.get(path); | ||
} | ||
delete(path) { | ||
return this.defaultDisk.delete(path); | ||
} | ||
uploadImageFromExternalUri(uri, path, ignoreHeaderContentType = false) { | ||
return this.defaultDisk.uploadImageFromExternalUri(uri, path, ignoreHeaderContentType); | ||
} | ||
makeDir(dir) { | ||
return this.defaultDisk.makeDir(dir); | ||
} | ||
removeDir(dir) { | ||
return this.defaultDisk.removeDir(dir); | ||
} | ||
} | ||
exports.Storage = Storage; | ||
Storage.initAble = false; | ||
exports.Storage = new StorageClass(); |
{ | ||
"name": "@file-storage/core", | ||
"version": "1.0.3", | ||
"version": "1.0.4", | ||
"description": "> TODO: description", | ||
@@ -21,7 +21,8 @@ "author": "Dang Nguyen <haidang009@gmail.com>", | ||
"compile": "tsc -p tsconfig.build.json", | ||
"test": "jest" | ||
"test": "jest", | ||
"test:detectOpenHandles": "jest --detectOpenHandles" | ||
}, | ||
"dependencies": { | ||
"@file-storage/common": "^1.0.3", | ||
"@file-storage/local": "^1.0.3" | ||
"@file-storage/local": "^1.0.4" | ||
}, | ||
@@ -32,3 +33,3 @@ "devDependencies": { | ||
}, | ||
"gitHead": "438332adebed0d4ae877a46ead840464e71acccf" | ||
"gitHead": "e5725a5b7bf2125b20388b1ff2451ce3f99e74a3" | ||
} |
9217
210
Updated@file-storage/local@^1.0.4