@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
JavaScript
;
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