Socket
Socket
Sign inDemoInstall

@file-storage/core

Package Overview
Dependencies
70
Maintainers
1
Versions
27
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.3 to 1.0.4

35

dist/file-storage.d.ts

@@ -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"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc