Skip to content

An in-memory Sink implementation for use in automated tests

License

Notifications You must be signed in to change notification settings

eik-lib/sink-memory

Repository files navigation

@eik/sink-memory

A Sink implementation that runs completely in memory, designed for automated tests.

Usage

npm install @eik/sink-memory
import { pipeline } from 'node:stream';
import express from 'express';
import Sink from '@eik/sink-memory';

const app = express();
const sink = new Sink();

app.get('/file.js', async (req, res, next) => {
    try {
        const file = await sink.read('/path/to/file/file.js');
        pipeline(file.stream, res, (error) => {
            if (error) return next(error);
        });
    } catch (error) {
        next(error);
    }
});

app.listen(8000);

API

The sink instance has the following API:

.write(filePath, contentType)

Method for writing a file to in-memory storage.

This method takes the following arguments:

  • filePath - String - Path to the file to be stored - Required.
  • contentType - String - The content type of the file - Required.

Resolves with a writable stream.

import { pipeline } from 'node:stream';

const fromStream = new SomeReadableStream();
const sink = new Sink({ ... });

try {
    const file = await sink.write('/path/to/file/file.js', 'application/javascript');
    pipeline(fromStream, file.stream, (error) => {
        if (error) console.log(error);
    });
} catch (error) {
    console.log(error);
}

.read(filePath)

Method for reading a file from storage.

This method takes the following arguments:

  • filePath - String - Path to the file to be read - Required.

Resolves with a ReadFile object which holds metadata about the file and a readable stream with the byte stream of the file on the .stream property.

import { pipeline } from 'node:stream';

const toStream = new SomeWritableStream();
const sink = new Sink({ ... });

try {
    const file = await sink.read('/path/to/file/file.js');
    pipeline(file.stream, toStream, (error) => {
        if (error) console.log(error);
    });
} catch (error) {
    console.log(error);
}

.delete(filePath)

Method for deleting a file in storage.

This method takes the following arguments:

  • filePath - String - Path to the file to be deleted - Required.

Resolves if file is deleted and rejects if file could not be deleted.

const sink = new Sink({ ... });

try {
    await sink.delete('/path/to/file/file.js');
} catch (error) {
    console.log(error);
}

.exist(filePath)

Method for checking if a file exist in the storage.

This method takes the following arguments:

  • filePath - String - Path to the file to be checked for existence - Required.

Resolves if file exists and rejects if file does not exist.

const sink = new Sink({ ... });

try {
    await sink.exist('/path/to/file/file.js');
} catch (error) {
    console.log(error);
}