import fs from 'fs'; import { BasePaths } from "./base-paths.js"; import { FileHelper } from './file-helper.js'; import { Fragment } from '../struct/fragment.js'; export const SPECIAL_CONTENT_SYMBOL = `content`; const FragmentSuperManager = { fragments: null, initialized: false, initialize() { const fragmentDir = BasePaths.fragments(); const entries = fs.readdirSync(fragmentDir, { encoding: 'utf-8', withFileTypes: true }); const fragmentEntries = entries.filter( (e) => FileHelper.isFragment(e) ); let fragments = []; for(let i = 0; i < fragmentEntries.length; i++) { const type = FileHelper.getFragmentType(fragmentEntries[i]); const path = fragmentEntries[i].parentPath + '/' + fragmentEntries[i].name; const contents = fs.readFileSync(path, { encoding: 'utf-8' }); const fragment = new Fragment(type, contents); const name = FileHelper.getBaseName(fragmentEntries[i]); fragments.push({ name: name, fragment: fragment }); } this.fragments = fragments; this.initialized = true; }, get(key) { const match = this.fragments?.find( (e) => e.name === key ); return match?.fragment; }, }; export class FragmentManager { contentFragment; _fragmentSuperManager; constructor(contentFragment) { this.contentFragment = contentFragment; this._fragmentSuperManager = FragmentSuperManager; if(!FragmentSuperManager.initialized) { FragmentSuperManager.initialize(); } } get(key) { if(key === SPECIAL_CONTENT_SYMBOL) { return this.contentFragment; } return this._fragmentSuperManager.get(key); } }