UNPKG

@plone/registry

Version:

Add-on and configuration registry for Plone and for JavaScript and TypeScript-based apps.

60 lines (58 loc) 1.66 kB
// 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 };