@mdfriday/foundry
Version:
The core engine of MDFriday. Convert Markdown and shortcodes into fully themed static sites – Hugo-style, powered by TypeScript.
137 lines • 4.73 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.newFileInfoWithName = newFileInfoWithName;
exports.newFileInfoWithContent = newFileInfoWithContent;
const fs_1 = require("../../../domain/fs");
const fileinfo_1 = require("../../../domain/fs/vo/fileinfo");
/**
* VirtualFileInfo implements IFileInfo for virtual files
* TypeScript equivalent of Go's virtual file implementation
*/
class VirtualFileInfo {
constructor(name, content = 'This is a virtual file.') {
this._name = name;
this._content = content;
this._modTime = new Date();
}
name() {
return this._name;
}
size() {
return Buffer.byteLength(this._content, 'utf8');
}
mode() {
return 0o644; // Regular file with read/write permissions
}
modTime() {
return this._modTime;
}
isDir() {
return false;
}
sys() {
return null;
}
getContent() {
return this._content;
}
}
/**
* VirtualFile class for virtual file operations
* TypeScript equivalent of Go's fileVirtual struct
*/
class VirtualFile {
constructor(fileName, fileContent) {
this._fileInfo = null;
this._fileName = fileName;
this._fileContent = fileContent;
}
fullName() {
return this._fileName;
}
async open() {
// Return a simple file-like object
return {
name: () => this._fileName,
close: async () => { },
read: async (buffer) => {
const data = Buffer.from(this._fileContent, 'utf8');
const bytesToCopy = Math.min(buffer.length, data.length);
data.copy(buffer, 0, 0, bytesToCopy);
return { bytesRead: bytesToCopy, buffer };
},
// Add other required File interface methods with minimal implementation
readAt: async (buffer, offset) => {
const data = Buffer.from(this._fileContent, 'utf8');
const start = Math.min(offset, data.length);
const bytesToCopy = Math.min(buffer.length, data.length - start);
if (bytesToCopy > 0) {
data.copy(buffer, 0, start, start + bytesToCopy);
}
return { bytesRead: bytesToCopy, buffer };
},
seek: async (offset, whence) => offset,
write: async (buffer) => ({ bytesWritten: buffer.length, buffer }),
writeAt: async (buffer, offset) => ({ bytesWritten: buffer.length, buffer }),
readdir: async (count) => [],
readdirnames: async (n) => [],
stat: async () => this.getFileInfo(),
sync: async () => { },
truncate: async (size) => { },
writeString: async (s) => ({ bytesWritten: Buffer.byteLength(s, 'utf8') }),
};
}
getFileInfo() {
if (!this._fileInfo) {
this._fileInfo = new VirtualFileInfo(this._fileName, this._fileContent);
}
return this._fileInfo;
}
}
/**
* Global virtual file instance (singleton pattern like Go version)
*/
let globalVirtualFile = null;
/**
* Get virtual file info
* TypeScript equivalent of Go's GetVirtualFileInfo
*/
function getVirtualFileInfo() {
if (!globalVirtualFile) {
globalVirtualFile = new VirtualFile('/content/file.txt', 'This is a virtual file.');
}
return globalVirtualFile.getFileInfo();
}
/**
* Get virtual file info with content
* TypeScript equivalent of Go's GetVirtualFileInfoWithContent
*/
function getVirtualFileInfoWithContent(content) {
// Generate a unique filename with random suffix like Go version
const randomSuffix = Math.floor(Math.random() * 1000000).toString().padStart(6, '0');
const fileName = `/content/file_${randomSuffix}.md`;
return new VirtualFile(fileName, content);
}
/**
* Creates a new FileInfo instance with virtual file using filename
* TypeScript equivalent of Go's NewFileInfoWithName
*/
function newFileInfoWithName(filename) {
const vf = getVirtualFileInfo();
const meta = (0, fs_1.newFileMeta)(filename);
return new fileinfo_1.FileInfo(vf, meta);
}
/**
* Creates a new FileInfo instance with virtual file using content
* TypeScript equivalent of Go's NewFileInfoWithContent
*/
function newFileInfoWithContent(content) {
const vf = getVirtualFileInfoWithContent(content);
const info = vf.getFileInfo();
const opener = () => vf.open();
const meta = (0, fs_1.newFileMeta)(vf.fullName(), opener);
meta.setComponentRoot('content');
meta.setComponentDir('content');
return new fileinfo_1.FileInfo(info, meta);
}
//# sourceMappingURL=filevitural.js.map