UNPKG

@mdfriday/foundry

Version:

The core engine of MDFriday. Convert Markdown and shortcodes into fully themed static sites – Hugo-style, powered by TypeScript.

99 lines 2.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DirFile = void 0; exports.newDirFileWithVirtualOpener = newDirFileWithVirtualOpener; exports.newDirFile = newDirFile; exports.newDirFileWithFilter = newDirFileWithFilter; exports.newDirFileWithOpenerAndFilter = newDirFileWithOpenerAndFilter; const file_1 = require("./file"); /** * DirFile represents a directory file with virtual directory support * TypeScript version of Go's DirFile struct */ class DirFile extends file_1.File { constructor(file, virtualOpener = null, filter = null) { // Call parent constructor with file's internals super(file.isNop() ? null : file, // Cast to IFile for parent constructor file.meta(), file.fs, // Access fs through any cast true // Always a directory ); this.virtualOpener = virtualOpener; this.filter = filter; } /** * ReadDir reads directory entries, supporting both real and virtual directories */ async readDir(count) { if (!this.isNop()) { // Read from real directory let fis = await super.readDir(count); // Apply filter if present if (this.filter !== null) { fis = await this.filter(fis); } return fis; } // Read from virtual directory return await this.readVirtualDir(); } /** * Read virtual directory entries */ async readVirtualDir() { if (this.virtualOpener !== null) { return await this.virtualOpener(); } throw new Error('virtual dir opener not found'); } /** * Set the filter function */ setFilter(filter) { this.filter = filter; } /** * Set the virtual opener function */ setVirtualOpener(opener) { this.virtualOpener = opener; } /** * Get the filter function */ getFilter() { return this.filter; } /** * Get the virtual opener function */ getVirtualOpener() { return this.virtualOpener; } } exports.DirFile = DirFile; /** * Creates a new DirFile with virtual opener */ function newDirFileWithVirtualOpener(file, opener) { return new DirFile(file, opener); } /** * Creates a new DirFile from file components */ function newDirFile(file, meta, fs) { const baseFile = new file_1.File(file, meta, fs, true); return new DirFile(baseFile); } /** * Creates a new DirFile with filter */ function newDirFileWithFilter(file, filter) { return new DirFile(file, null, filter); } /** * Creates a new DirFile with both virtual opener and filter */ function newDirFileWithOpenerAndFilter(file, opener, filter) { return new DirFile(file, opener, filter); } //# sourceMappingURL=dir.js.map