@ezdevlol/memfs
Version:
In-memory file-system with Node's fs API.
93 lines (92 loc) • 3.38 kB
JavaScript
import { FLAGS } from './constants';
import { assertEncoding } from '../encoding';
import { validateCallback } from './util';
const mkdirDefaults = {
mode: 511 /* MODE.DIR */,
recursive: false,
};
export const getMkdirOptions = (options) => {
if (typeof options === 'number')
return Object.assign({}, mkdirDefaults, { mode: options });
return Object.assign({}, mkdirDefaults, options);
};
const ERRSTR_OPTS = tipeof => `Expected options to be either an object or a string, but got ${tipeof} instead`;
export function getOptions(defaults, options) {
let opts;
if (!options)
return defaults;
else {
const tipeof = typeof options;
switch (tipeof) {
case 'string':
opts = Object.assign({}, defaults, { encoding: options });
break;
case 'object':
opts = Object.assign({}, defaults, options);
break;
default:
throw TypeError(ERRSTR_OPTS(tipeof));
}
}
if (opts.encoding !== 'buffer')
assertEncoding(opts.encoding);
return opts;
}
export function optsGenerator(defaults) {
return options => getOptions(defaults, options);
}
export function optsAndCbGenerator(getOpts) {
return (options, callback) => typeof options === 'function' ? [getOpts(), options] : [getOpts(options), validateCallback(callback)];
}
export const optsDefaults = {
encoding: 'utf8',
};
export const getDefaultOpts = optsGenerator(optsDefaults);
export const getDefaultOptsAndCb = optsAndCbGenerator(getDefaultOpts);
const rmdirDefaults = {
recursive: false,
};
export const getRmdirOptions = (options) => {
return Object.assign({}, rmdirDefaults, options);
};
const getRmOpts = optsGenerator(optsDefaults);
export const getRmOptsAndCb = optsAndCbGenerator(getRmOpts);
const readFileOptsDefaults = {
flag: 'r',
};
export const getReadFileOptions = optsGenerator(readFileOptsDefaults);
const readdirDefaults = {
encoding: 'utf8',
recursive: false,
withFileTypes: false,
};
export const getReaddirOptions = optsGenerator(readdirDefaults);
export const getReaddirOptsAndCb = optsAndCbGenerator(getReaddirOptions);
const opendirDefaults = {
encoding: 'utf8',
bufferSize: 32,
recursive: false,
};
export const getOpendirOptions = optsGenerator(opendirDefaults);
export const getOpendirOptsAndCb = optsAndCbGenerator(getOpendirOptions);
const appendFileDefaults = {
encoding: 'utf8',
mode: 438 /* MODE.DEFAULT */,
flag: FLAGS[FLAGS.a],
};
export const getAppendFileOpts = optsGenerator(appendFileDefaults);
export const getAppendFileOptsAndCb = optsAndCbGenerator(getAppendFileOpts);
const statDefaults = {
bigint: false,
};
export const getStatOptions = (options = {}) => Object.assign({}, statDefaults, options);
export const getStatOptsAndCb = (options, callback) => typeof options === 'function' ? [getStatOptions(), options] : [getStatOptions(options), validateCallback(callback)];
const realpathDefaults = optsDefaults;
export const getRealpathOptions = optsGenerator(realpathDefaults);
export const getRealpathOptsAndCb = optsAndCbGenerator(getRealpathOptions);
export const writeFileDefaults = {
encoding: 'utf8',
mode: 438 /* MODE.DEFAULT */,
flag: FLAGS[FLAGS.w],
};
export const getWriteFileOptions = optsGenerator(writeFileDefaults);