Files
copenlight/rollup.config.mjs
Ivan Carlos de Almeida 6fa41a771d
Some checks failed
Build, Push, Publish / Build & Release (push) Failing after 2s
Sync Repo / sync (push) Failing after 2s
first load
2025-12-16 04:40:00 -03:00

106 lines
2.9 KiB
JavaScript

/* eslint-env node */
import zass from "./zass.mjs";
import { nodeResolve } from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
import json from "@rollup/plugin-json";
import dynamicImportVars from "@rollup/plugin-dynamic-import-vars";
import typescript from "@rollup/plugin-typescript";
import replace from "@rollup/plugin-replace";
import terser from "@rollup/plugin-terser";
import svgr from "@svgr/rollup";
import { generateImportMap } from "./generate-import-map.mjs";
import { defineConfig } from "rollup";
const fileNames = "[name]-bundle.js";
const isProduction = process.env.NODE_ENV === "production";
const TRANSLATION_FILE_REGEX =
/src\/modules\/(.+?)\/translations\/locales\/.+?\.json$/;
export default defineConfig([
// Configuration for bundling the script.js file
{
input: "src/index.js",
output: {
file: "script.js",
format: "iife",
},
plugins: [zass()],
watch: {
clearScreen: false,
},
},
// Configuration for bundling modules in the src/modules directory
{
context: "this",
input: {
"new-request-form": "src/modules/new-request-form/index.tsx",
"flash-notifications": "src/modules/flash-notifications/index.ts",
"service-catalog": "src/modules/service-catalog/index.tsx",
"approval-requests": "src/modules/approval-requests/index.tsx",
},
output: {
dir: "assets",
format: "es",
manualChunks: (id) => {
if (
id.includes("node_modules/@zendesk/help-center-wysiwyg") ||
id.includes("node_modules/@ckeditor5")
) {
return "wysiwyg";
}
if (id.includes("node_modules") || id.includes("src/modules/shared")) {
return "shared";
}
if (id.includes("src/modules/ticket-fields")) {
return "ticket-fields";
}
// Bundle all files from `src/modules/MODULE_NAME/translations/locales/*.json to `${MODULE_NAME}-translations.js`
const translationFileMatch = id.match(TRANSLATION_FILE_REGEX);
if (translationFileMatch) {
return `${translationFileMatch[1]}-translations`;
}
},
entryFileNames: fileNames,
chunkFileNames: fileNames,
},
plugins: [
nodeResolve({
extensions: [".js"],
}),
commonjs(),
typescript(),
replace({
preventAssignment: true,
"process.env.NODE_ENV": '"production"',
}),
svgr({
svgo: true,
svgoConfig: {
plugins: [
{
name: "preset-default",
params: {
overrides: {
removeTitle: false,
convertPathData: false,
removeViewBox: false,
},
},
},
],
},
}),
json(),
dynamicImportVars(),
isProduction && terser(),
generateImportMap(),
],
watch: {
clearScreen: false,
},
},
]);