UNPKG

@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
"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