templates/vitekit/__/vite-frontend-starter-main/vite/twig.js
2026-04-12 21:03:18 +03:00

46 lines
1.3 KiB
JavaScript

import twigInstance from '@vituum/vite-plugin-twig';
import fs from 'node:fs';
import nodePath from 'node:path';
import { appData, envData } from './app.js';
import { absPath, pathSrc } from './path.js';
const tablerIconsAbsPath = nodePath.join(absPath.node, '@tabler', 'icons', 'icons');
const twigConfig = {
root: pathSrc,
globals: getTwigGlobals(),
namespaces: {
node: absPath.node,
component: absPath.component,
layout: absPath.layout,
view: absPath.view,
ti: nodePath.join(tablerIconsAbsPath, 'outline'),
'ti-filled': nodePath.join(tablerIconsAbsPath, 'filled'),
},
};
const twig = () => twigInstance(twigConfig);
function getTwigGlobals() {
const data = {
...appData,
...envData,
};
const dataFolder = absPath.data;
const dataFiles = fs.readdirSync(dataFolder).filter((file) => file.endsWith('.json')) || [];
dataFiles.forEach((file) => {
const filePath = nodePath.join(dataFolder, file);
const fileContent = fs.readFileSync(filePath, 'utf8') || '{}';
const fileData = JSON.parse(fileContent);
const fileName = file.replace('.json', '').replace(/[\s-]+/g, '_').replace(/[^a-z_]+/g, '').replace(/(_)./g, (s) => s.slice(-1).toUpperCase());
data[fileName] = fileData;
});
return data;
}
export default twig;