@mdfriday/foundry
Version:
The core engine of MDFriday. Convert Markdown and shortcodes into fully themed static sites – Hugo-style, powered by TypeScript.
138 lines • 3.73 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.OverlayOptions = exports.defaultDirMerger = void 0;
exports.newOverlayOptions = newOverlayOptions;
exports.createDefaultOverlayOptions = createDefaultOverlayOptions;
exports.createWritableOverlayOptions = createWritableOverlayOptions;
/**
* Default directory merger implementation
* TypeScript version of Go's defaultDirMerger
*/
const defaultDirMerger = (lofi, bofi) => {
const result = [...lofi];
for (const boFile of bofi) {
let found = false;
for (const loFile of lofi) {
if (boFile.name() === loFile.name()) {
found = true;
break;
}
}
if (!found) {
result.push(boFile);
}
}
return result;
};
exports.defaultDirMerger = defaultDirMerger;
/**
* OverlayFs options value object
* TypeScript version of Go's Options struct
*/
class OverlayOptions {
constructor(options) {
// Allow empty filesystem arrays for initial creation (matching Go behavior)
this.fss = [...options.fss]; // Create a copy
this.firstWritable = options.firstWritable ?? false;
this.dirsMerger = options.dirsMerger ?? exports.defaultDirMerger;
}
/**
* Create new options with additional filesystems
*/
withFilesystems(...additionalFss) {
return new OverlayOptions({
fss: [...this.fss, ...additionalFss],
firstWritable: this.firstWritable,
dirsMerger: this.dirsMerger,
});
}
/**
* Create new options with different writability
*/
withFirstWritable(writable) {
return new OverlayOptions({
fss: this.fss,
firstWritable: writable,
dirsMerger: this.dirsMerger,
});
}
/**
* Create new options with different directory merger
*/
withDirsMerger(merger) {
return new OverlayOptions({
fss: this.fss,
firstWritable: this.firstWritable,
dirsMerger: merger,
});
}
/**
* Get writable filesystem (first if firstWritable is true)
*/
getWritableFs() {
if (!this.firstWritable || this.fss.length === 0) {
return null;
}
return this.fss[0];
}
/**
* Validate options
*/
isValid() {
return this.dirsMerger !== undefined;
}
/**
* Get filesystem count
*/
getFilesystemCount() {
return this.fss.length;
}
/**
* Get filesystem by index
*/
getFilesystem(index) {
if (index < 0 || index >= this.fss.length) {
return null;
}
return this.fss[index];
}
/**
* Check if filesystem exists in overlay
*/
hasFilesystem(fs) {
return this.fss.includes(fs);
}
/**
* Get all filesystems as readonly array
*/
getFilesystems() {
return this.fss;
}
}
exports.OverlayOptions = OverlayOptions;
/**
* Factory function to create OverlayOptions
*/
function newOverlayOptions(fss, firstWritable = false, dirsMerger) {
const options = {
fss,
firstWritable,
};
if (dirsMerger !== undefined) {
options.dirsMerger = dirsMerger;
}
return new OverlayOptions(options);
}
/**
* Create overlay options with default settings
*/
function createDefaultOverlayOptions(fss) {
return newOverlayOptions(fss, false, exports.defaultDirMerger);
}
/**
* Create overlay options for read-write scenario
*/
function createWritableOverlayOptions(fss, dirsMerger) {
return newOverlayOptions(fss, true, dirsMerger);
}
//# sourceMappingURL=overlayoptions.js.map