UNPKG

static-fs

Version:

A static filesystem to bundle files and read them using Node.js

146 lines (118 loc) 4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.close = close; exports.lstat = lstat; exports.open = open; exports.read = read; exports.readdir = readdir; exports.readFile = readFile; exports.stat = stat; exports.write = write; exports.writeFile = writeFile; exports.copyFile = copyFile; exports.exists = exists; exports.isDirectory = isDirectory; exports.isFile = isFile; exports.mkdir = mkdir; var realFs = _interopRequireWildcard(require("fs")); var _path = require("path"); var _util = require("util"); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } // promisified functions from the real fs async function close(fd) { return (0, _util.promisify)(realFs.close)(fd); } async function lstat(path) { return (0, _util.promisify)(realFs.lstat)(path); } async function open(path, flags, mode) { return (0, _util.promisify)(realFs.open)(path, flags, mode); } async function read(fd, buffer, offset, length, position) { return (0, _util.promisify)(realFs.read)(fd, buffer, offset, length, position || null); } async function readdir(path) { return (0, _util.promisify)(realFs.readdir)(path); } async function readFile(path, options) { return (0, _util.promisify)(realFs.readFile)(path, options); } async function stat(path) { return (0, _util.promisify)(realFs.stat)(path); } async function write(fd, buffer, offset, length, position) { return (0, _util.promisify)(realFs.write)(fd, buffer, offset || 0, length || buffer.length, position || undefined); } async function writeFile(filename, content) { return (0, _util.promisify)(realFs.writeFile)(filename, content); } // custom functions async function copyFile(source, target) { await mkdir((0, _path.dirname)(target)); return await new Promise((resolve, reject) => { const rd = realFs.createReadStream(source); rd.on('error', rejectCleanup); const wr = realFs.createWriteStream(target); wr.on('error', rejectCleanup); function rejectCleanup(err) { rd.destroy(); wr.end(); reject(err); } wr.on('finish', () => { rd.close(); wr.close(); resolve(); }); rd.pipe(wr); }); } async function exists(path) { try { await stat(path); return true; } catch { /* no-op */ } return false; } async function isDirectory(dirPath) { try { if (await exists(dirPath)) { return (await lstat(dirPath)).isDirectory(); } } catch { /* no-op */ } return false; } async function isFile(filePath) { try { if (await exists(filePath)) { return !(await lstat(filePath)).isDirectory(); } } catch { /* no-op */ } return false; } async function mkdir(dirPath) { if (!(await isDirectory(dirPath))) { const p = (0, _path.normalize)(dirPath + '/'); const parent = (0, _path.dirname)(dirPath); if (!(await isDirectory(parent))) { if (p !== parent) { await mkdir(parent); } } try { await (0, _util.promisify)(realFs.mkdir)(p); } catch (e) { if (!(await isDirectory(p))) { throw new Error(e); } } } }