UNPKG

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