aboutsummaryrefslogtreecommitdiff
path: root/packages/merchant-backend-ui/rollup.config.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/merchant-backend-ui/rollup.config.js')
-rw-r--r--packages/merchant-backend-ui/rollup.config.js116
1 files changed, 116 insertions, 0 deletions
diff --git a/packages/merchant-backend-ui/rollup.config.js b/packages/merchant-backend-ui/rollup.config.js
new file mode 100644
index 000000000..18d72e56b
--- /dev/null
+++ b/packages/merchant-backend-ui/rollup.config.js
@@ -0,0 +1,116 @@
+/*
+ This file is part of GNU Taler
+ (C) 2021 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+// rollup.config.js
+import linaria from '@linaria/rollup';
+import nodeResolve from "@rollup/plugin-node-resolve";
+import alias from "@rollup/plugin-alias";
+import image from '@rollup/plugin-image';
+import json from "@rollup/plugin-json";
+import ts from "@rollup/plugin-typescript";
+import replace from "@rollup/plugin-replace";
+import css from 'rollup-plugin-css-only';
+import html from '@rollup/plugin-html';
+import commonjs from "@rollup/plugin-commonjs";
+
+const template = async ({
+ files,
+}) => {
+ const scripts = (files.js || []).map(({ code }) => `<script>${code}</script>`).join('\n');
+ const css = (files.css || []).map(({ source }) => `<style>${source}</style>`).join('\n');
+ const ssr = (files.js || []).map(({ code }) => code).join('\n');
+ const page = new Function(`${ssr}; return page.buildTimeRendering();`)()
+ return `
+<!doctype html>
+<html>
+ <head>
+ ${page.head}
+ ${css}
+ </head>
+ <script id="built_time_data">
+ </script>
+ <body>
+ ${page.body}
+ ${scripts}
+ <script>page.mount()</script>
+ </body>
+</html>`;
+};
+
+const makePlugins = (name) => [
+ alias({
+ entries: [
+ { find: 'react', replacement: 'preact/compat' },
+ { find: 'react-dom', replacement: 'preact/compat' }
+ ]
+ }),
+
+ replace({
+ "process.env.NODE_ENV": JSON.stringify("production"),
+ preventAssignment: true,
+ }),
+
+ commonjs({
+ include: [/node_modules/, /dist/],
+ extensions: [".js"],
+ ignoreGlobal: true,
+ sourceMap: true,
+ }),
+
+ nodeResolve({
+ browser: true,
+ preferBuiltins: true,
+ }),
+
+ json(),
+ image(),
+
+ linaria({
+ sourceMap: process.env.NODE_ENV !== 'production',
+ }),
+ css(),
+ ts({
+ sourceMap: false,
+ outputToFilesystem: false,
+ }),
+ html({ template, fileName: name }),
+];
+
+function formatHtmlName(name) {
+ return name
+ .replace(/^[A-Z]/, letter => `${letter.toLowerCase()}`) //first letter lowercase
+ .replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`) //snake case
+ .concat(".en.html"); //extension
+}
+
+const pageDefinition = (name) => ({
+ input: `src/pages/${name}.tsx`,
+ output: {
+ file: `dist/pages/${name}.js`,
+ format: "iife",
+ exports: 'named',
+ name: 'page',
+ },
+ plugins: makePlugins(formatHtmlName(name)),
+});
+
+export default [
+ pageDefinition("OfferTip"),
+ pageDefinition("OfferRefund"),
+ pageDefinition("DepletedTip"),
+ pageDefinition("RequestPayment"),
+ pageDefinition("ShowOrderDetails"),
+]