@plone/registry
Version:
Add-on and configuration registry for Plone and for JavaScript and TypeScript-based apps.
60 lines (58 loc) • 1.66 kB
JavaScript
// src/addon-registry/create-addons-styles-loader.ts
import fs from "fs";
import path from "path";
function getAddonInfo(addon, registry) {
return registry.getAddons().find((a) => a.name === addon);
}
function hasTailwind(addon, registry) {
const addonInfo = getAddonInfo(addon, registry);
if (addonInfo && addonInfo.packageJson) {
const packageJson = JSON.parse(
fs.readFileSync(addonInfo.packageJson, "utf-8")
);
return packageJson.dependencies && packageJson.dependencies["tailwindcss"];
}
return false;
}
function buildLoaderCode(registry, styleSheetPath) {
const addonsStylesInfo = registry.getAddonStyles(styleSheetPath);
let buf = `/*
Don't change this file manually.
It is autogenerated by @plone/registry.
Add a ./${styleSheetPath} in your add-on to load your add-on styles in the app.
*/
`;
addonsStylesInfo.forEach((addon) => {
const customization = `${addon}/${styleSheetPath}`;
const line = `@import '${customization}';
`;
buf += line;
const addonInfo = getAddonInfo(addon, registry);
if (hasTailwind(addon, registry)) {
buf += `@source '${addonInfo.basePath}';
`;
}
});
return buf;
}
function createAddonsStyleLoader(registry) {
const publicUIStyles = path.join(
registry.projectRootPath,
".plone",
"publicui.css"
);
const cmsUIStyles = path.join(
registry.projectRootPath,
".plone",
"cmsui.css"
);
fs.writeFileSync(
publicUIStyles,
buildLoaderCode(registry, "styles/publicui.css")
);
fs.writeFileSync(cmsUIStyles, buildLoaderCode(registry, "styles/cmsui.css"));
}
export {
buildLoaderCode,
createAddonsStyleLoader
};