@mdfriday/foundry
Version:
The core engine of MDFriday. Convert Markdown and shortcodes into fully themed static sites – Hugo-style, powered by TypeScript.
125 lines • 4.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Factory = void 0;
exports.newOverlayFsFactory = newOverlayFsFactory;
exports.createOverlayFileSystem = createOverlayFileSystem;
exports.createReadOnlyOverlayFs = createReadOnlyOverlayFs;
exports.createWritableOverlayFs = createWritableOverlayFs;
exports.appendToOverlayFs = appendToOverlayFs;
exports.createOverlayFromPairs = createOverlayFromPairs;
exports.createMultilayerOverlayFs = createMultilayerOverlayFs;
const overlayoptions_1 = require("./overlayoptions");
const overlayfs_1 = require("../entity/overlayfs");
/**
* OverlayFs factory implementation
*/
class Factory {
/**
* Create overlay filesystem with default settings
*/
create(fss) {
const options = (0, overlayoptions_1.createDefaultOverlayOptions)(fss);
return (0, overlayfs_1.newOverlayFs)(options);
}
/**
* Create overlay filesystem with custom options
*/
createWithOptions(options) {
return (0, overlayfs_1.createOverlayFs)(options);
}
/**
* Create read-only overlay filesystem
*/
createReadOnly(fss) {
const options = (0, overlayoptions_1.createDefaultOverlayOptions)(fss);
return (0, overlayfs_1.newOverlayFs)(options);
}
/**
* Create writable overlay filesystem (first filesystem is writable)
*/
createWritable(fss) {
const options = (0, overlayoptions_1.createWritableOverlayOptions)(fss);
return (0, overlayfs_1.newOverlayFs)(options);
}
/**
* Create overlay filesystem with custom directory merger
*/
createWithMerger(fss, merger) {
const options = (0, overlayoptions_1.createDefaultOverlayOptions)(fss).withDirsMerger(merger);
return (0, overlayfs_1.newOverlayFs)(options);
}
}
exports.Factory = Factory;
/**
* Create new OverlayFs factory
*/
function newOverlayFsFactory() {
return new Factory();
}
/**
* Convenience function to create overlay filesystem
*/
function createOverlayFileSystem(fss, options) {
const factory = newOverlayFsFactory();
if (!options) {
return factory.create(fss);
}
const overlayOptions = { fss };
if (options.firstWritable !== undefined) {
overlayOptions.firstWritable = options.firstWritable;
}
if (options.dirsMerger !== undefined) {
overlayOptions.dirsMerger = options.dirsMerger;
}
return factory.createWithOptions(overlayOptions);
}
/**
* Create read-only overlay filesystem (convenience function)
*/
function createReadOnlyOverlayFs(fss) {
const factory = newOverlayFsFactory();
return factory.createReadOnly(fss);
}
/**
* Create writable overlay filesystem (convenience function)
*/
function createWritableOverlayFs(fss, dirsMerger) {
const factory = newOverlayFsFactory();
const overlayFs = factory.createWritable(fss);
if (dirsMerger) {
return overlayFs.withDirsMerger(dirsMerger);
}
return overlayFs;
}
/**
* Append filesystems to existing overlay (convenience function)
*/
function appendToOverlayFs(overlayFs, ...fss) {
return overlayFs.append(...fss);
}
/**
* Create overlay filesystem from array of filesystem pairs
*/
function createOverlayFromPairs(pairs) {
// Sort by priority (lower number = higher priority)
const sortedPairs = pairs.sort((a, b) => a.priority - b.priority);
const fss = sortedPairs.map(pair => pair.fs);
const factory = newOverlayFsFactory();
return factory.create(fss);
}
/**
* Create multilayer overlay filesystem
*/
function createMultilayerOverlayFs(readOnlyLayers, writableLayer, dirsMerger) {
const fss = writableLayer ? [writableLayer, ...readOnlyLayers] : readOnlyLayers;
const options = {
fss,
firstWritable: !!writableLayer,
};
if (dirsMerger !== undefined) {
options.dirsMerger = dirsMerger;
}
const factory = newOverlayFsFactory();
return factory.createWithOptions(options);
}
//# sourceMappingURL=overlayfs-factory.js.map