Skip to content

Repository files navigation

flydrive

DownloadVersionLicense

flydrive is a framework-agnostic package which provides a powerful wrapper to manage file Storage in Node.js.

There are currently 3 drivers available:

  • 'local': Stores files on the local file system.
  • 's3': Amazon S3 and other compatible services
    • You need to install the aws-sdk package to be able to use this driver.
    • This driver is compatible with DigitalOcean Spaces and Scaleway Object Storage.
  • 'gcs': Google Cloud Storage
    • You need to install the @google-cloud/storage package to be able to use this driver.

Getting Started

This package is available in the npm registry. It can easily be installed with npm or yarn.

$ npm i @slynova/flydrive
# or
$ yarn add @slynova/flydrive

When you require the package in your file, it will give you access to the StorageManager class. This class is a facade for the package and should be instantiated with a configuration object.

const{ StorageManager }=require('@slynova/flydrive');conststorage=newStorageManager(config);

Once you instantiated the manager, you can use the StorageManager#disk() method to retrieve a disk an use it.

storage.disk();// Returns the default disk (specified in the config)storage.disk('awsCloud');// Returns the driver for the disk "s3"storage.disk('awsCloud',customConfig);// Overwrite the default configuration of the disk

Driver's API

Each driver extends the abstract class Storage. This class will throw an exception for each methods by default. The driver needs to overwrite the methods it supports.

The following method doesn't exist on the LocalFileSystem driver, therefore, it will throw an exception.

// throws "E_METHOD_NOT_SUPPORTED: Method getSignedUrl is not supported for the driver LocalFileSystem"storage.disk('local').getSignedUrl();

Since we are using TypeScript, you can make use of casting to get the real interface:

import{LocalFileSystem}from'@slynova/flydrive';storage.disk<LocalFileSystem>('local');

Response interface

Asynchronous methods will always return a Promise which resolves with a Response object. The response object may contain relevant data in its properties (for example, the ExistsResponse object for the exists method contains a boolean exists property).

All responses additionally have a raw property which is driver-specific and contains the result from the original call made by the driver.

Exceptions

In case of runtime errors, flydrive will try to throw driver-agnostic exceptions.
Exceptions also have a raw property which contains the original error.

Methods

append(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This method will append the content to the file at the location. If the file doesn't exist yet, it will be created.

// Supported drivers: "local"awaitstorage.disk('local').append('foo.txt','bar');// foo.txt now has the content `${initialContent}bar`
bucket(name: string): Storage

This method can be used to swap the bucket at runtime. It returns a new Storage instance.

// Supported drivers: "s3", "gcs"storage.disk('cloud').bucket('anotherOne');// The following chained action will use the "anotherOne" bucket instead of the original one
copy(src: string, dest: string, options: object): Promise<Response>

This method will copy a file to another location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').copy('foo.txt','bar.txt');// foo.txt was copied to bar.txt
delete(location: string): Promise<Response>

This method will delete the file at the given location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').delete('foo.txt');// foo.txt has been deleted
driver()

This method returns the driver used if you need to do anything specific not supported by default.

storage.disk('local').driver();// Returns "fs-extra"storage.disk('awsCloud').driver();// Returns "aws-sdk"storage.disk('googleCloud').driver();// Returns "@google-cloud/storage"// ....
exists(location: string): Promise<ExistsResponse>

This method will determine if a file exists at the given location.

// Supported drivers: "local", "s3", "gcs"const{ exists }=awaitstorage.disk('local').exists('foo.txt');// exists is true or false
get(location: string, encoding: string = 'utf-8'): Promise<ContentResponse<string>>

This methods will return the file's content as a string for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getBuffer(location: string): Promise<ContentResponse<Buffer>>

This methods will return the file's content as a Buffer for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getSignedUrl(location: string, options: SignedUrlOptions = { expiry: 900 }): Promise<SignedUrlResponse>

This methods will return the signed url for an existing file.

// Supported drivers: "s3", "gcs"const{ signedUrl }=awaitstorage.disk('awsCloud').getSignedUrl('foo.txt');
getStat(location: string): Promise<StatResponse>

This methods will return the file's size (in bytes) and last modification date.

// Supported drivers: "local", "s3", "gcs"const{ size, modified }=awaitstorage.disk('local').getStat('foo.txt');
getStream(location: string, options: object | string): Stream

This methods will return a Node.js readable stream for the given file.

// Supported drivers: "local", "s3", "gcs"conststream=storage.disk('local').getStream('foo.txt');
getUrl(location: string): string

This methods will return a public URL for a given file.

// Supported drivers: "s3", "gcs"consturi=storage.disk('awsCloud').getUrl('foo.txt');
move(src: string, dest: string): Promise<Response>

This methods will move the file to a new location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').move('foo.txt','newFolder/foo.txt');
put(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This methods will create a new file with the provided content.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').put('bar.txt','Foobar');
prepend(location: string, content: Buffer | string, options: object): Promise<Response>

This methods will preprend content to a file.

// Supported drivers: "local"awaitstorage.disk('local').prepend('foo.txt','bar');// foo.txt now has the content `bar${initialContent}`

Contribution Guidelines

Any pull requests or discussions are welcome. Note that every pull request providing new feature or correcting a bug should be created with appropriate unit tests.

About

☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - gamfi/flydrive: ☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js · GitHub
Skip to content

Repository files navigation

flydrive

DownloadVersionLicense

flydrive is a framework-agnostic package which provides a powerful wrapper to manage file Storage in Node.js.

There are currently 3 drivers available:

  • 'local': Stores files on the local file system.
  • 's3': Amazon S3 and other compatible services
    • You need to install the aws-sdk package to be able to use this driver.
    • This driver is compatible with DigitalOcean Spaces and Scaleway Object Storage.
  • 'gcs': Google Cloud Storage
    • You need to install the @google-cloud/storage package to be able to use this driver.

Getting Started

This package is available in the npm registry. It can easily be installed with npm or yarn.

$ npm i @slynova/flydrive
# or
$ yarn add @slynova/flydrive

When you require the package in your file, it will give you access to the StorageManager class. This class is a facade for the package and should be instantiated with a configuration object.

const{ StorageManager }=require('@slynova/flydrive');conststorage=newStorageManager(config);

Once you instantiated the manager, you can use the StorageManager#disk() method to retrieve a disk an use it.

storage.disk();// Returns the default disk (specified in the config)storage.disk('awsCloud');// Returns the driver for the disk "s3"storage.disk('awsCloud',customConfig);// Overwrite the default configuration of the disk

Driver's API

Each driver extends the abstract class Storage. This class will throw an exception for each methods by default. The driver needs to overwrite the methods it supports.

The following method doesn't exist on the LocalFileSystem driver, therefore, it will throw an exception.

// throws "E_METHOD_NOT_SUPPORTED: Method getSignedUrl is not supported for the driver LocalFileSystem"storage.disk('local').getSignedUrl();

Since we are using TypeScript, you can make use of casting to get the real interface:

import{LocalFileSystem}from'@slynova/flydrive';storage.disk<LocalFileSystem>('local');

Response interface

Asynchronous methods will always return a Promise which resolves with a Response object. The response object may contain relevant data in its properties (for example, the ExistsResponse object for the exists method contains a boolean exists property).

All responses additionally have a raw property which is driver-specific and contains the result from the original call made by the driver.

Exceptions

In case of runtime errors, flydrive will try to throw driver-agnostic exceptions.
Exceptions also have a raw property which contains the original error.

Methods

append(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This method will append the content to the file at the location. If the file doesn't exist yet, it will be created.

// Supported drivers: "local"awaitstorage.disk('local').append('foo.txt','bar');// foo.txt now has the content `${initialContent}bar`
bucket(name: string): Storage

This method can be used to swap the bucket at runtime. It returns a new Storage instance.

// Supported drivers: "s3", "gcs"storage.disk('cloud').bucket('anotherOne');// The following chained action will use the "anotherOne" bucket instead of the original one
copy(src: string, dest: string, options: object): Promise<Response>

This method will copy a file to another location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').copy('foo.txt','bar.txt');// foo.txt was copied to bar.txt
delete(location: string): Promise<Response>

This method will delete the file at the given location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').delete('foo.txt');// foo.txt has been deleted
driver()

This method returns the driver used if you need to do anything specific not supported by default.

storage.disk('local').driver();// Returns "fs-extra"storage.disk('awsCloud').driver();// Returns "aws-sdk"storage.disk('googleCloud').driver();// Returns "@google-cloud/storage"// ....
exists(location: string): Promise<ExistsResponse>

This method will determine if a file exists at the given location.

// Supported drivers: "local", "s3", "gcs"const{ exists }=awaitstorage.disk('local').exists('foo.txt');// exists is true or false
get(location: string, encoding: string = 'utf-8'): Promise<ContentResponse<string>>

This methods will return the file's content as a string for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getBuffer(location: string): Promise<ContentResponse<Buffer>>

This methods will return the file's content as a Buffer for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getSignedUrl(location: string, options: SignedUrlOptions = { expiry: 900 }): Promise<SignedUrlResponse>

This methods will return the signed url for an existing file.

// Supported drivers: "s3", "gcs"const{ signedUrl }=awaitstorage.disk('awsCloud').getSignedUrl('foo.txt');
getStat(location: string): Promise<StatResponse>

This methods will return the file's size (in bytes) and last modification date.

// Supported drivers: "local", "s3", "gcs"const{ size, modified }=awaitstorage.disk('local').getStat('foo.txt');
getStream(location: string, options: object | string): Stream

This methods will return a Node.js readable stream for the given file.

// Supported drivers: "local", "s3", "gcs"conststream=storage.disk('local').getStream('foo.txt');
getUrl(location: string): string

This methods will return a public URL for a given file.

// Supported drivers: "s3", "gcs"consturi=storage.disk('awsCloud').getUrl('foo.txt');
move(src: string, dest: string): Promise<Response>

This methods will move the file to a new location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').move('foo.txt','newFolder/foo.txt');
put(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This methods will create a new file with the provided content.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').put('bar.txt','Foobar');
prepend(location: string, content: Buffer | string, options: object): Promise<Response>

This methods will preprend content to a file.

// Supported drivers: "local"awaitstorage.disk('local').prepend('foo.txt','bar');// foo.txt now has the content `bar${initialContent}`

Contribution Guidelines

Any pull requests or discussions are welcome. Note that every pull request providing new feature or correcting a bug should be created with appropriate unit tests.

About

☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - gamfi/flydrive: ☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js · GitHub
Skip to content

Repository files navigation

flydrive

DownloadVersionLicense

flydrive is a framework-agnostic package which provides a powerful wrapper to manage file Storage in Node.js.

There are currently 3 drivers available:

  • 'local': Stores files on the local file system.
  • 's3': Amazon S3 and other compatible services
    • You need to install the aws-sdk package to be able to use this driver.
    • This driver is compatible with DigitalOcean Spaces and Scaleway Object Storage.
  • 'gcs': Google Cloud Storage
    • You need to install the @google-cloud/storage package to be able to use this driver.

Getting Started

This package is available in the npm registry. It can easily be installed with npm or yarn.

$ npm i @slynova/flydrive
# or
$ yarn add @slynova/flydrive

When you require the package in your file, it will give you access to the StorageManager class. This class is a facade for the package and should be instantiated with a configuration object.

const{ StorageManager }=require('@slynova/flydrive');conststorage=newStorageManager(config);

Once you instantiated the manager, you can use the StorageManager#disk() method to retrieve a disk an use it.

storage.disk();// Returns the default disk (specified in the config)storage.disk('awsCloud');// Returns the driver for the disk "s3"storage.disk('awsCloud',customConfig);// Overwrite the default configuration of the disk

Driver's API

Each driver extends the abstract class Storage. This class will throw an exception for each methods by default. The driver needs to overwrite the methods it supports.

The following method doesn't exist on the LocalFileSystem driver, therefore, it will throw an exception.

// throws "E_METHOD_NOT_SUPPORTED: Method getSignedUrl is not supported for the driver LocalFileSystem"storage.disk('local').getSignedUrl();

Since we are using TypeScript, you can make use of casting to get the real interface:

import{LocalFileSystem}from'@slynova/flydrive';storage.disk<LocalFileSystem>('local');

Response interface

Asynchronous methods will always return a Promise which resolves with a Response object. The response object may contain relevant data in its properties (for example, the ExistsResponse object for the exists method contains a boolean exists property).

All responses additionally have a raw property which is driver-specific and contains the result from the original call made by the driver.

Exceptions

In case of runtime errors, flydrive will try to throw driver-agnostic exceptions.
Exceptions also have a raw property which contains the original error.

Methods

append(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This method will append the content to the file at the location. If the file doesn't exist yet, it will be created.

// Supported drivers: "local"awaitstorage.disk('local').append('foo.txt','bar');// foo.txt now has the content `${initialContent}bar`
bucket(name: string): Storage

This method can be used to swap the bucket at runtime. It returns a new Storage instance.

// Supported drivers: "s3", "gcs"storage.disk('cloud').bucket('anotherOne');// The following chained action will use the "anotherOne" bucket instead of the original one
copy(src: string, dest: string, options: object): Promise<Response>

This method will copy a file to another location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').copy('foo.txt','bar.txt');// foo.txt was copied to bar.txt
delete(location: string): Promise<Response>

This method will delete the file at the given location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').delete('foo.txt');// foo.txt has been deleted
driver()

This method returns the driver used if you need to do anything specific not supported by default.

storage.disk('local').driver();// Returns "fs-extra"storage.disk('awsCloud').driver();// Returns "aws-sdk"storage.disk('googleCloud').driver();// Returns "@google-cloud/storage"// ....
exists(location: string): Promise<ExistsResponse>

This method will determine if a file exists at the given location.

// Supported drivers: "local", "s3", "gcs"const{ exists }=awaitstorage.disk('local').exists('foo.txt');// exists is true or false
get(location: string, encoding: string = 'utf-8'): Promise<ContentResponse<string>>

This methods will return the file's content as a string for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getBuffer(location: string): Promise<ContentResponse<Buffer>>

This methods will return the file's content as a Buffer for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getSignedUrl(location: string, options: SignedUrlOptions = { expiry: 900 }): Promise<SignedUrlResponse>

This methods will return the signed url for an existing file.

// Supported drivers: "s3", "gcs"const{ signedUrl }=awaitstorage.disk('awsCloud').getSignedUrl('foo.txt');
getStat(location: string): Promise<StatResponse>

This methods will return the file's size (in bytes) and last modification date.

// Supported drivers: "local", "s3", "gcs"const{ size, modified }=awaitstorage.disk('local').getStat('foo.txt');
getStream(location: string, options: object | string): Stream

This methods will return a Node.js readable stream for the given file.

// Supported drivers: "local", "s3", "gcs"conststream=storage.disk('local').getStream('foo.txt');
getUrl(location: string): string

This methods will return a public URL for a given file.

// Supported drivers: "s3", "gcs"consturi=storage.disk('awsCloud').getUrl('foo.txt');
move(src: string, dest: string): Promise<Response>

This methods will move the file to a new location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').move('foo.txt','newFolder/foo.txt');
put(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This methods will create a new file with the provided content.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').put('bar.txt','Foobar');
prepend(location: string, content: Buffer | string, options: object): Promise<Response>

This methods will preprend content to a file.

// Supported drivers: "local"awaitstorage.disk('local').prepend('foo.txt','bar');// foo.txt now has the content `bar${initialContent}`

Contribution Guidelines

Any pull requests or discussions are welcome. Note that every pull request providing new feature or correcting a bug should be created with appropriate unit tests.

About

☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - gamfi/flydrive: ☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js · GitHub
Skip to content

Repository files navigation

flydrive

DownloadVersionLicense

flydrive is a framework-agnostic package which provides a powerful wrapper to manage file Storage in Node.js.

There are currently 3 drivers available:

  • 'local': Stores files on the local file system.
  • 's3': Amazon S3 and other compatible services
    • You need to install the aws-sdk package to be able to use this driver.
    • This driver is compatible with DigitalOcean Spaces and Scaleway Object Storage.
  • 'gcs': Google Cloud Storage
    • You need to install the @google-cloud/storage package to be able to use this driver.

Getting Started

This package is available in the npm registry. It can easily be installed with npm or yarn.

$ npm i @slynova/flydrive
# or
$ yarn add @slynova/flydrive

When you require the package in your file, it will give you access to the StorageManager class. This class is a facade for the package and should be instantiated with a configuration object.

const{ StorageManager }=require('@slynova/flydrive');conststorage=newStorageManager(config);

Once you instantiated the manager, you can use the StorageManager#disk() method to retrieve a disk an use it.

storage.disk();// Returns the default disk (specified in the config)storage.disk('awsCloud');// Returns the driver for the disk "s3"storage.disk('awsCloud',customConfig);// Overwrite the default configuration of the disk

Driver's API

Each driver extends the abstract class Storage. This class will throw an exception for each methods by default. The driver needs to overwrite the methods it supports.

The following method doesn't exist on the LocalFileSystem driver, therefore, it will throw an exception.

// throws "E_METHOD_NOT_SUPPORTED: Method getSignedUrl is not supported for the driver LocalFileSystem"storage.disk('local').getSignedUrl();

Since we are using TypeScript, you can make use of casting to get the real interface:

import{LocalFileSystem}from'@slynova/flydrive';storage.disk<LocalFileSystem>('local');

Response interface

Asynchronous methods will always return a Promise which resolves with a Response object. The response object may contain relevant data in its properties (for example, the ExistsResponse object for the exists method contains a boolean exists property).

All responses additionally have a raw property which is driver-specific and contains the result from the original call made by the driver.

Exceptions

In case of runtime errors, flydrive will try to throw driver-agnostic exceptions.
Exceptions also have a raw property which contains the original error.

Methods

append(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This method will append the content to the file at the location. If the file doesn't exist yet, it will be created.

// Supported drivers: "local"awaitstorage.disk('local').append('foo.txt','bar');// foo.txt now has the content `${initialContent}bar`
bucket(name: string): Storage

This method can be used to swap the bucket at runtime. It returns a new Storage instance.

// Supported drivers: "s3", "gcs"storage.disk('cloud').bucket('anotherOne');// The following chained action will use the "anotherOne" bucket instead of the original one
copy(src: string, dest: string, options: object): Promise<Response>

This method will copy a file to another location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').copy('foo.txt','bar.txt');// foo.txt was copied to bar.txt
delete(location: string): Promise<Response>

This method will delete the file at the given location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').delete('foo.txt');// foo.txt has been deleted
driver()

This method returns the driver used if you need to do anything specific not supported by default.

storage.disk('local').driver();// Returns "fs-extra"storage.disk('awsCloud').driver();// Returns "aws-sdk"storage.disk('googleCloud').driver();// Returns "@google-cloud/storage"// ....
exists(location: string): Promise<ExistsResponse>

This method will determine if a file exists at the given location.

// Supported drivers: "local", "s3", "gcs"const{ exists }=awaitstorage.disk('local').exists('foo.txt');// exists is true or false
get(location: string, encoding: string = 'utf-8'): Promise<ContentResponse<string>>

This methods will return the file's content as a string for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getBuffer(location: string): Promise<ContentResponse<Buffer>>

This methods will return the file's content as a Buffer for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getSignedUrl(location: string, options: SignedUrlOptions = { expiry: 900 }): Promise<SignedUrlResponse>

This methods will return the signed url for an existing file.

// Supported drivers: "s3", "gcs"const{ signedUrl }=awaitstorage.disk('awsCloud').getSignedUrl('foo.txt');
getStat(location: string): Promise<StatResponse>

This methods will return the file's size (in bytes) and last modification date.

// Supported drivers: "local", "s3", "gcs"const{ size, modified }=awaitstorage.disk('local').getStat('foo.txt');
getStream(location: string, options: object | string): Stream

This methods will return a Node.js readable stream for the given file.

// Supported drivers: "local", "s3", "gcs"conststream=storage.disk('local').getStream('foo.txt');
getUrl(location: string): string

This methods will return a public URL for a given file.

// Supported drivers: "s3", "gcs"consturi=storage.disk('awsCloud').getUrl('foo.txt');
move(src: string, dest: string): Promise<Response>

This methods will move the file to a new location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').move('foo.txt','newFolder/foo.txt');
put(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This methods will create a new file with the provided content.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').put('bar.txt','Foobar');
prepend(location: string, content: Buffer | string, options: object): Promise<Response>

This methods will preprend content to a file.

// Supported drivers: "local"awaitstorage.disk('local').prepend('foo.txt','bar');// foo.txt now has the content `bar${initialContent}`

Contribution Guidelines

Any pull requests or discussions are welcome. Note that every pull request providing new feature or correcting a bug should be created with appropriate unit tests.

About

☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - gamfi/flydrive: ☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js · GitHub
Skip to content

Repository files navigation

flydrive

DownloadVersionLicense

flydrive is a framework-agnostic package which provides a powerful wrapper to manage file Storage in Node.js.

There are currently 3 drivers available:

  • 'local': Stores files on the local file system.
  • 's3': Amazon S3 and other compatible services
    • You need to install the aws-sdk package to be able to use this driver.
    • This driver is compatible with DigitalOcean Spaces and Scaleway Object Storage.
  • 'gcs': Google Cloud Storage
    • You need to install the @google-cloud/storage package to be able to use this driver.

Getting Started

This package is available in the npm registry. It can easily be installed with npm or yarn.

$ npm i @slynova/flydrive
# or
$ yarn add @slynova/flydrive

When you require the package in your file, it will give you access to the StorageManager class. This class is a facade for the package and should be instantiated with a configuration object.

const{ StorageManager }=require('@slynova/flydrive');conststorage=newStorageManager(config);

Once you instantiated the manager, you can use the StorageManager#disk() method to retrieve a disk an use it.

storage.disk();// Returns the default disk (specified in the config)storage.disk('awsCloud');// Returns the driver for the disk "s3"storage.disk('awsCloud',customConfig);// Overwrite the default configuration of the disk

Driver's API

Each driver extends the abstract class Storage. This class will throw an exception for each methods by default. The driver needs to overwrite the methods it supports.

The following method doesn't exist on the LocalFileSystem driver, therefore, it will throw an exception.

// throws "E_METHOD_NOT_SUPPORTED: Method getSignedUrl is not supported for the driver LocalFileSystem"storage.disk('local').getSignedUrl();

Since we are using TypeScript, you can make use of casting to get the real interface:

import{LocalFileSystem}from'@slynova/flydrive';storage.disk<LocalFileSystem>('local');

Response interface

Asynchronous methods will always return a Promise which resolves with a Response object. The response object may contain relevant data in its properties (for example, the ExistsResponse object for the exists method contains a boolean exists property).

All responses additionally have a raw property which is driver-specific and contains the result from the original call made by the driver.

Exceptions

In case of runtime errors, flydrive will try to throw driver-agnostic exceptions.
Exceptions also have a raw property which contains the original error.

Methods

append(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This method will append the content to the file at the location. If the file doesn't exist yet, it will be created.

// Supported drivers: "local"awaitstorage.disk('local').append('foo.txt','bar');// foo.txt now has the content `${initialContent}bar`
bucket(name: string): Storage

This method can be used to swap the bucket at runtime. It returns a new Storage instance.

// Supported drivers: "s3", "gcs"storage.disk('cloud').bucket('anotherOne');// The following chained action will use the "anotherOne" bucket instead of the original one
copy(src: string, dest: string, options: object): Promise<Response>

This method will copy a file to another location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').copy('foo.txt','bar.txt');// foo.txt was copied to bar.txt
delete(location: string): Promise<Response>

This method will delete the file at the given location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').delete('foo.txt');// foo.txt has been deleted
driver()

This method returns the driver used if you need to do anything specific not supported by default.

storage.disk('local').driver();// Returns "fs-extra"storage.disk('awsCloud').driver();// Returns "aws-sdk"storage.disk('googleCloud').driver();// Returns "@google-cloud/storage"// ....
exists(location: string): Promise<ExistsResponse>

This method will determine if a file exists at the given location.

// Supported drivers: "local", "s3", "gcs"const{ exists }=awaitstorage.disk('local').exists('foo.txt');// exists is true or false
get(location: string, encoding: string = 'utf-8'): Promise<ContentResponse<string>>

This methods will return the file's content as a string for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getBuffer(location: string): Promise<ContentResponse<Buffer>>

This methods will return the file's content as a Buffer for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getSignedUrl(location: string, options: SignedUrlOptions = { expiry: 900 }): Promise<SignedUrlResponse>

This methods will return the signed url for an existing file.

// Supported drivers: "s3", "gcs"const{ signedUrl }=awaitstorage.disk('awsCloud').getSignedUrl('foo.txt');
getStat(location: string): Promise<StatResponse>

This methods will return the file's size (in bytes) and last modification date.

// Supported drivers: "local", "s3", "gcs"const{ size, modified }=awaitstorage.disk('local').getStat('foo.txt');
getStream(location: string, options: object | string): Stream

This methods will return a Node.js readable stream for the given file.

// Supported drivers: "local", "s3", "gcs"conststream=storage.disk('local').getStream('foo.txt');
getUrl(location: string): string

This methods will return a public URL for a given file.

// Supported drivers: "s3", "gcs"consturi=storage.disk('awsCloud').getUrl('foo.txt');
move(src: string, dest: string): Promise<Response>

This methods will move the file to a new location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').move('foo.txt','newFolder/foo.txt');
put(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This methods will create a new file with the provided content.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').put('bar.txt','Foobar');
prepend(location: string, content: Buffer | string, options: object): Promise<Response>

This methods will preprend content to a file.

// Supported drivers: "local"awaitstorage.disk('local').prepend('foo.txt','bar');// foo.txt now has the content `bar${initialContent}`

Contribution Guidelines

Any pull requests or discussions are welcome. Note that every pull request providing new feature or correcting a bug should be created with appropriate unit tests.

About

☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - gamfi/flydrive: ☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js · GitHub
Skip to content

Repository files navigation

flydrive

DownloadVersionLicense

flydrive is a framework-agnostic package which provides a powerful wrapper to manage file Storage in Node.js.

There are currently 3 drivers available:

  • 'local': Stores files on the local file system.
  • 's3': Amazon S3 and other compatible services
    • You need to install the aws-sdk package to be able to use this driver.
    • This driver is compatible with DigitalOcean Spaces and Scaleway Object Storage.
  • 'gcs': Google Cloud Storage
    • You need to install the @google-cloud/storage package to be able to use this driver.

Getting Started

This package is available in the npm registry. It can easily be installed with npm or yarn.

$ npm i @slynova/flydrive
# or
$ yarn add @slynova/flydrive

When you require the package in your file, it will give you access to the StorageManager class. This class is a facade for the package and should be instantiated with a configuration object.

const{ StorageManager }=require('@slynova/flydrive');conststorage=newStorageManager(config);

Once you instantiated the manager, you can use the StorageManager#disk() method to retrieve a disk an use it.

storage.disk();// Returns the default disk (specified in the config)storage.disk('awsCloud');// Returns the driver for the disk "s3"storage.disk('awsCloud',customConfig);// Overwrite the default configuration of the disk

Driver's API

Each driver extends the abstract class Storage. This class will throw an exception for each methods by default. The driver needs to overwrite the methods it supports.

The following method doesn't exist on the LocalFileSystem driver, therefore, it will throw an exception.

// throws "E_METHOD_NOT_SUPPORTED: Method getSignedUrl is not supported for the driver LocalFileSystem"storage.disk('local').getSignedUrl();

Since we are using TypeScript, you can make use of casting to get the real interface:

import{LocalFileSystem}from'@slynova/flydrive';storage.disk<LocalFileSystem>('local');

Response interface

Asynchronous methods will always return a Promise which resolves with a Response object. The response object may contain relevant data in its properties (for example, the ExistsResponse object for the exists method contains a boolean exists property).

All responses additionally have a raw property which is driver-specific and contains the result from the original call made by the driver.

Exceptions

In case of runtime errors, flydrive will try to throw driver-agnostic exceptions.
Exceptions also have a raw property which contains the original error.

Methods

append(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This method will append the content to the file at the location. If the file doesn't exist yet, it will be created.

// Supported drivers: "local"awaitstorage.disk('local').append('foo.txt','bar');// foo.txt now has the content `${initialContent}bar`
bucket(name: string): Storage

This method can be used to swap the bucket at runtime. It returns a new Storage instance.

// Supported drivers: "s3", "gcs"storage.disk('cloud').bucket('anotherOne');// The following chained action will use the "anotherOne" bucket instead of the original one
copy(src: string, dest: string, options: object): Promise<Response>

This method will copy a file to another location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').copy('foo.txt','bar.txt');// foo.txt was copied to bar.txt
delete(location: string): Promise<Response>

This method will delete the file at the given location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').delete('foo.txt');// foo.txt has been deleted
driver()

This method returns the driver used if you need to do anything specific not supported by default.

storage.disk('local').driver();// Returns "fs-extra"storage.disk('awsCloud').driver();// Returns "aws-sdk"storage.disk('googleCloud').driver();// Returns "@google-cloud/storage"// ....
exists(location: string): Promise<ExistsResponse>

This method will determine if a file exists at the given location.

// Supported drivers: "local", "s3", "gcs"const{ exists }=awaitstorage.disk('local').exists('foo.txt');// exists is true or false
get(location: string, encoding: string = 'utf-8'): Promise<ContentResponse<string>>

This methods will return the file's content as a string for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getBuffer(location: string): Promise<ContentResponse<Buffer>>

This methods will return the file's content as a Buffer for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getSignedUrl(location: string, options: SignedUrlOptions = { expiry: 900 }): Promise<SignedUrlResponse>

This methods will return the signed url for an existing file.

// Supported drivers: "s3", "gcs"const{ signedUrl }=awaitstorage.disk('awsCloud').getSignedUrl('foo.txt');
getStat(location: string): Promise<StatResponse>

This methods will return the file's size (in bytes) and last modification date.

// Supported drivers: "local", "s3", "gcs"const{ size, modified }=awaitstorage.disk('local').getStat('foo.txt');
getStream(location: string, options: object | string): Stream

This methods will return a Node.js readable stream for the given file.

// Supported drivers: "local", "s3", "gcs"conststream=storage.disk('local').getStream('foo.txt');
getUrl(location: string): string

This methods will return a public URL for a given file.

// Supported drivers: "s3", "gcs"consturi=storage.disk('awsCloud').getUrl('foo.txt');
move(src: string, dest: string): Promise<Response>

This methods will move the file to a new location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').move('foo.txt','newFolder/foo.txt');
put(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This methods will create a new file with the provided content.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').put('bar.txt','Foobar');
prepend(location: string, content: Buffer | string, options: object): Promise<Response>

This methods will preprend content to a file.

// Supported drivers: "local"awaitstorage.disk('local').prepend('foo.txt','bar');// foo.txt now has the content `bar${initialContent}`

Contribution Guidelines

Any pull requests or discussions are welcome. Note that every pull request providing new feature or correcting a bug should be created with appropriate unit tests.

About

☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - gamfi/flydrive: ☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js · GitHub
Skip to content

Repository files navigation

flydrive

DownloadVersionLicense

flydrive is a framework-agnostic package which provides a powerful wrapper to manage file Storage in Node.js.

There are currently 3 drivers available:

  • 'local': Stores files on the local file system.
  • 's3': Amazon S3 and other compatible services
    • You need to install the aws-sdk package to be able to use this driver.
    • This driver is compatible with DigitalOcean Spaces and Scaleway Object Storage.
  • 'gcs': Google Cloud Storage
    • You need to install the @google-cloud/storage package to be able to use this driver.

Getting Started

This package is available in the npm registry. It can easily be installed with npm or yarn.

$ npm i @slynova/flydrive
# or
$ yarn add @slynova/flydrive

When you require the package in your file, it will give you access to the StorageManager class. This class is a facade for the package and should be instantiated with a configuration object.

const{ StorageManager }=require('@slynova/flydrive');conststorage=newStorageManager(config);

Once you instantiated the manager, you can use the StorageManager#disk() method to retrieve a disk an use it.

storage.disk();// Returns the default disk (specified in the config)storage.disk('awsCloud');// Returns the driver for the disk "s3"storage.disk('awsCloud',customConfig);// Overwrite the default configuration of the disk

Driver's API

Each driver extends the abstract class Storage. This class will throw an exception for each methods by default. The driver needs to overwrite the methods it supports.

The following method doesn't exist on the LocalFileSystem driver, therefore, it will throw an exception.

// throws "E_METHOD_NOT_SUPPORTED: Method getSignedUrl is not supported for the driver LocalFileSystem"storage.disk('local').getSignedUrl();

Since we are using TypeScript, you can make use of casting to get the real interface:

import{LocalFileSystem}from'@slynova/flydrive';storage.disk<LocalFileSystem>('local');

Response interface

Asynchronous methods will always return a Promise which resolves with a Response object. The response object may contain relevant data in its properties (for example, the ExistsResponse object for the exists method contains a boolean exists property).

All responses additionally have a raw property which is driver-specific and contains the result from the original call made by the driver.

Exceptions

In case of runtime errors, flydrive will try to throw driver-agnostic exceptions.
Exceptions also have a raw property which contains the original error.

Methods

append(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This method will append the content to the file at the location. If the file doesn't exist yet, it will be created.

// Supported drivers: "local"awaitstorage.disk('local').append('foo.txt','bar');// foo.txt now has the content `${initialContent}bar`
bucket(name: string): Storage

This method can be used to swap the bucket at runtime. It returns a new Storage instance.

// Supported drivers: "s3", "gcs"storage.disk('cloud').bucket('anotherOne');// The following chained action will use the "anotherOne" bucket instead of the original one
copy(src: string, dest: string, options: object): Promise<Response>

This method will copy a file to another location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').copy('foo.txt','bar.txt');// foo.txt was copied to bar.txt
delete(location: string): Promise<Response>

This method will delete the file at the given location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').delete('foo.txt');// foo.txt has been deleted
driver()

This method returns the driver used if you need to do anything specific not supported by default.

storage.disk('local').driver();// Returns "fs-extra"storage.disk('awsCloud').driver();// Returns "aws-sdk"storage.disk('googleCloud').driver();// Returns "@google-cloud/storage"// ....
exists(location: string): Promise<ExistsResponse>

This method will determine if a file exists at the given location.

// Supported drivers: "local", "s3", "gcs"const{ exists }=awaitstorage.disk('local').exists('foo.txt');// exists is true or false
get(location: string, encoding: string = 'utf-8'): Promise<ContentResponse<string>>

This methods will return the file's content as a string for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getBuffer(location: string): Promise<ContentResponse<Buffer>>

This methods will return the file's content as a Buffer for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getSignedUrl(location: string, options: SignedUrlOptions = { expiry: 900 }): Promise<SignedUrlResponse>

This methods will return the signed url for an existing file.

// Supported drivers: "s3", "gcs"const{ signedUrl }=awaitstorage.disk('awsCloud').getSignedUrl('foo.txt');
getStat(location: string): Promise<StatResponse>

This methods will return the file's size (in bytes) and last modification date.

// Supported drivers: "local", "s3", "gcs"const{ size, modified }=awaitstorage.disk('local').getStat('foo.txt');
getStream(location: string, options: object | string): Stream

This methods will return a Node.js readable stream for the given file.

// Supported drivers: "local", "s3", "gcs"conststream=storage.disk('local').getStream('foo.txt');
getUrl(location: string): string

This methods will return a public URL for a given file.

// Supported drivers: "s3", "gcs"consturi=storage.disk('awsCloud').getUrl('foo.txt');
move(src: string, dest: string): Promise<Response>

This methods will move the file to a new location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').move('foo.txt','newFolder/foo.txt');
put(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This methods will create a new file with the provided content.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').put('bar.txt','Foobar');
prepend(location: string, content: Buffer | string, options: object): Promise<Response>

This methods will preprend content to a file.

// Supported drivers: "local"awaitstorage.disk('local').prepend('foo.txt','bar');// foo.txt now has the content `bar${initialContent}`

Contribution Guidelines

Any pull requests or discussions are welcome. Note that every pull request providing new feature or correcting a bug should be created with appropriate unit tests.

About

☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - gamfi/flydrive: ☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js · GitHub
Skip to content

Repository files navigation

flydrive

DownloadVersionLicense

flydrive is a framework-agnostic package which provides a powerful wrapper to manage file Storage in Node.js.

There are currently 3 drivers available:

  • 'local': Stores files on the local file system.
  • 's3': Amazon S3 and other compatible services
    • You need to install the aws-sdk package to be able to use this driver.
    • This driver is compatible with DigitalOcean Spaces and Scaleway Object Storage.
  • 'gcs': Google Cloud Storage
    • You need to install the @google-cloud/storage package to be able to use this driver.

Getting Started

This package is available in the npm registry. It can easily be installed with npm or yarn.

$ npm i @slynova/flydrive
# or
$ yarn add @slynova/flydrive

When you require the package in your file, it will give you access to the StorageManager class. This class is a facade for the package and should be instantiated with a configuration object.

const{ StorageManager }=require('@slynova/flydrive');conststorage=newStorageManager(config);

Once you instantiated the manager, you can use the StorageManager#disk() method to retrieve a disk an use it.

storage.disk();// Returns the default disk (specified in the config)storage.disk('awsCloud');// Returns the driver for the disk "s3"storage.disk('awsCloud',customConfig);// Overwrite the default configuration of the disk

Driver's API

Each driver extends the abstract class Storage. This class will throw an exception for each methods by default. The driver needs to overwrite the methods it supports.

The following method doesn't exist on the LocalFileSystem driver, therefore, it will throw an exception.

// throws "E_METHOD_NOT_SUPPORTED: Method getSignedUrl is not supported for the driver LocalFileSystem"storage.disk('local').getSignedUrl();

Since we are using TypeScript, you can make use of casting to get the real interface:

import{LocalFileSystem}from'@slynova/flydrive';storage.disk<LocalFileSystem>('local');

Response interface

Asynchronous methods will always return a Promise which resolves with a Response object. The response object may contain relevant data in its properties (for example, the ExistsResponse object for the exists method contains a boolean exists property).

All responses additionally have a raw property which is driver-specific and contains the result from the original call made by the driver.

Exceptions

In case of runtime errors, flydrive will try to throw driver-agnostic exceptions.
Exceptions also have a raw property which contains the original error.

Methods

append(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This method will append the content to the file at the location. If the file doesn't exist yet, it will be created.

// Supported drivers: "local"awaitstorage.disk('local').append('foo.txt','bar');// foo.txt now has the content `${initialContent}bar`
bucket(name: string): Storage

This method can be used to swap the bucket at runtime. It returns a new Storage instance.

// Supported drivers: "s3", "gcs"storage.disk('cloud').bucket('anotherOne');// The following chained action will use the "anotherOne" bucket instead of the original one
copy(src: string, dest: string, options: object): Promise<Response>

This method will copy a file to another location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').copy('foo.txt','bar.txt');// foo.txt was copied to bar.txt
delete(location: string): Promise<Response>

This method will delete the file at the given location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').delete('foo.txt');// foo.txt has been deleted
driver()

This method returns the driver used if you need to do anything specific not supported by default.

storage.disk('local').driver();// Returns "fs-extra"storage.disk('awsCloud').driver();// Returns "aws-sdk"storage.disk('googleCloud').driver();// Returns "@google-cloud/storage"// ....
exists(location: string): Promise<ExistsResponse>

This method will determine if a file exists at the given location.

// Supported drivers: "local", "s3", "gcs"const{ exists }=awaitstorage.disk('local').exists('foo.txt');// exists is true or false
get(location: string, encoding: string = 'utf-8'): Promise<ContentResponse<string>>

This methods will return the file's content as a string for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getBuffer(location: string): Promise<ContentResponse<Buffer>>

This methods will return the file's content as a Buffer for the given location.

// Supported drivers: "local", "s3", "gcs"const{ content }=awaitstorage.disk('local').exists('foo.txt');
getSignedUrl(location: string, options: SignedUrlOptions = { expiry: 900 }): Promise<SignedUrlResponse>

This methods will return the signed url for an existing file.

// Supported drivers: "s3", "gcs"const{ signedUrl }=awaitstorage.disk('awsCloud').getSignedUrl('foo.txt');
getStat(location: string): Promise<StatResponse>

This methods will return the file's size (in bytes) and last modification date.

// Supported drivers: "local", "s3", "gcs"const{ size, modified }=awaitstorage.disk('local').getStat('foo.txt');
getStream(location: string, options: object | string): Stream

This methods will return a Node.js readable stream for the given file.

// Supported drivers: "local", "s3", "gcs"conststream=storage.disk('local').getStream('foo.txt');
getUrl(location: string): string

This methods will return a public URL for a given file.

// Supported drivers: "s3", "gcs"consturi=storage.disk('awsCloud').getUrl('foo.txt');
move(src: string, dest: string): Promise<Response>

This methods will move the file to a new location.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').move('foo.txt','newFolder/foo.txt');
put(location: string, content: Buffer | Stream | string, options: object): Promise<Response>

This methods will create a new file with the provided content.

// Supported drivers: "local", "s3", "gcs"awaitstorage.disk('local').put('bar.txt','Foobar');
prepend(location: string, content: Buffer | string, options: object): Promise<Response>

This methods will preprend content to a file.

// Supported drivers: "local"awaitstorage.disk('local').prepend('foo.txt','bar');// foo.txt now has the content `bar${initialContent}`

Contribution Guidelines

Any pull requests or discussions are welcome. Note that every pull request providing new feature or correcting a bug should be created with appropriate unit tests.

About

☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages