Files
kupshop/web/common/webpack/WpjComponentLoader.ts
2025-08-02 16:30:27 +02:00

48 lines
1.6 KiB
TypeScript

import { IComponents } from './WpjConfig';
import Handlebars from 'handlebars';
let components: IComponents = {};
var loaderUtils = require('loader-utils');
const fs = require('fs');
module.exports = {
default: function (content, map, meta) {
var params = loaderUtils.parseQuery(this.resourceQuery);
const template_data = [];
for (const [name, component] of Object.entries(components)) {
if (!component.entrypoints.includes(params.entrypoint)) {
continue;
}
if (!component.version_js && !component.version_css) {
continue;
}
const template_component = {
name: name,
...component,
file_js: component.version_js ? component.template.replace(/\.(\d+)\.html\.twig/, `.${component.version_js}`) : null,
file_css: component.version_css ? component.template.replace(/\.(\d+)\.html\.twig/, `.${component.version_css}.scss`) : null,
lazy: params.entrypoint === 'lazy',
};
template_data.push(template_component);
}
const result = [];
const components_js = Handlebars.compile(fs.readFileSync(__dirname + '/components.hbs', 'utf8'));
result.push(components_js({components: template_data.filter(value => value.lazy === false)}));
const components_lazy = Handlebars.compile(fs.readFileSync(__dirname + '/components_lazy.hbs', 'utf8'));
result.push(components_lazy({components: template_data.filter(value => value.lazy === true)}));
return result.join("\n\n");
},
setComponents: function(config) {
components = config;
}
}