static-fs
Version:
A static filesystem to bundle files and read them using Node.js
146 lines (118 loc) • 4 kB
JavaScript
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);
}
}
}
}
;