UNPKG

@ezdevlol/memfs

Version:

In-memory file-system with Node's fs API.

93 lines (92 loc) 3.38 kB
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);