Treehouse storage
NodeJS storage utility module written in Typescript
Installation
Install via npm
npm install @icapps/tree-house-storage
or via yarn
yarn add @icapps/tree-house-storage
Usage
Middleware functions
multipartUpload(options)
Express middleware function to upload a local file using multer.
import { middleware } from '@icapps/tree-house-storage'
const options = {
destination: 'uploads',
fileSize: 12000,
allowedFileTypes: ['image/png', 'image/jpg'],
validator: {
schema: joiSchema,
options: joiOptions,
};
};
app.post('/upload', middleware.multipartUpload(options), ...);
More information on Multer
Local filesystem
Local file functions enabling the use of Promises for fs
methods.
More information on fs
createIfNotExists(path)
Creates a folder if it doesn't exist already. (Asynchronous)
import { local } from '@icapps/tree-house-storage'
await local.createIfNotExists('/localFolder');
createFile(path, name, content)
Creates a new local file. This will also create a folder when it does not exist already. (Asynchronous)
import { local } from '@icapps/tree-house-storage'
await local.createFile('/localFolder', 'myFile.txt', 'My personal content');
readFile(path)
Read an existing local file via filepath. (Asynchronous)
import { local } from '@icapps/tree-house-storage'
await local.readFile('/localFolder', 'myFile.txt', 'My personal content');
deleteFile(path)
Delete an existing local file via filepath (Asynchronous)
import { local } from '@icapps/tree-house-storage'
await local.deleteFile('/localFolder/myFile.txt');
Amazon
Amazon S3 libs
More information on AWS S3
createClient(clientOptions)
Create an S3 client
import { amazon } from '@icapps/tree-house-storage'
const options = {
region: 'eu-west-1',
accessKeyId: 'myAccesKey',
secretAccessKey: 'mySecret',
};
const client = amazon.createClient(options);
uploadFile(client, options)
Upload a file to S3
import { amazon } from '@icapps/tree-house-storage'
const options = {
path: 'localPath/localFile.png',
content: 'fileContent ...',
name: uuid.v4(),
contentType: 'image/png',
bucket: 's3bucketName',
key: 's3KeyName',
encryption: 'AE-256',
};
const { location, bucket, key } = await amazon.uploadFile(client, options);
getFile(client, bucket, key)
Retrieve a file from S3
import { amazon } from '@icapps/tree-house-storage'
const { body } = await amazon.getFile(client, bucket, key);
removeFile(client, bucket, key)
Remove a file from S3
import { amazon } from '@icapps/tree-house-storage'
await amazon.removeFile(client, bucket, key);
getPresignedUrl(client, options)
Gets a pre-signed url for an S3 resource
import { amazon } from '@icapps/tree-house-storage'
const options = {
bucket: 's3bucketName',
key: 's3KeyName',
expires: 1600,
};
const { location, bucket, key } = await amazon.getPresignedUrl(client, options);
getUploadPresignedUrl(client, options)
Gets a pre-signed upload url for an S3 resource
import { amazon } from '@icapps/tree-house-storage'
const options = {
bucket: 's3bucketName',
key: 's3KeyName',
expires: 1600,
contentType: 'image/png'
};
const url = await amazon.getUploadPresignedUrl(client, options);
Tests
All tests are written using Jest. Check out the documentation here for more information.
You can run npm run test
to run all tests
You can run npm run test:coverage
to run all tests with coverage report
Bugs
When you find issues, please report them:
Be sure to include all of the output from the npm command that didn't work as expected. The npm-debug.log file is also helpful to provide.
Authors
See the list of contributors who participated in this project.
License
This project is licensed under the ISC License - see the LICENSE.md file for details