From f2dd39fe20fb0056acef97837a5216ea88d6ffa6 Mon Sep 17 00:00:00 2001
From: Christoph Reiter <reiter.christoph@gmail.com>
Date: Tue, 17 Nov 2020 15:50:38 +0100
Subject: [PATCH] Add a helper function for computing the target dist path

Takes a package name and a dest path. This way we can more eassily change the
layout and it will error out on package name typos or missing packages.
---
 packages/app-shell/rollup.config.js           |  4 +-
 packages/auth/rollup.config.js                |  6 +-
 .../check-in-place-select/rollup.config.js    |  4 +-
 packages/common/rollup.config.js              | 73 ++++++++++---------
 packages/data-table-view/rollup.config.js     | 19 +++--
 packages/file-handling/rollup.config.js       |  6 +-
 .../rollup.config.js                          |  4 +-
 packages/matomo/rollup.config.js              |  4 +-
 packages/person-profile/rollup.config.js      |  4 +-
 packages/person-select/rollup.config.js       |  4 +-
 packages/qr-code-scanner/rollup.config.js     |  7 +-
 .../qr-code-scanner/src/qr-code-scanner.js    |  3 +-
 rollup.utils.js                               |  8 ++
 13 files changed, 79 insertions(+), 67 deletions(-)

diff --git a/packages/app-shell/rollup.config.js b/packages/app-shell/rollup.config.js
index c80d5f3e..dbc283c0 100644
--- a/packages/app-shell/rollup.config.js
+++ b/packages/app-shell/rollup.config.js
@@ -6,7 +6,7 @@ import serve from 'rollup-plugin-serve';
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
 import json from '@rollup/plugin-json';
-import {getBuildInfo, getPackagePath} from '../../rollup.utils.js';
+import {getBuildInfo, getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
 console.log("build: " + build);
@@ -44,7 +44,7 @@ export default (async () => {
                     {src: 'assets/silent-check-sso.html', dest:'dist'},
                     {src: 'assets/index.html', dest: 'dist'},
                     {src: 'assets/*.json', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
                 ],
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({
diff --git a/packages/auth/rollup.config.js b/packages/auth/rollup.config.js
index 2df4ef5f..e058d575 100644
--- a/packages/auth/rollup.config.js
+++ b/packages/auth/rollup.config.js
@@ -7,7 +7,7 @@ import json from '@rollup/plugin-json';
 import serve from 'rollup-plugin-serve';
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const pkg = require('./package.json');
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
@@ -44,9 +44,9 @@ export default (async () => {
             copy({
                 targets: [
                     {src: 'assets/index.html', dest:'dist'},
-                    {src: 'assets/silent-check-sso.html', dest: 'dist/local/' + pkg.name},
+                    {src: 'assets/silent-check-sso.html', dest: 'dist/' + await getDistPath(pkg.name)},
                     {src: 'assets/favicon.ico', dest:'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
                 ]
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
diff --git a/packages/check-in-place-select/rollup.config.js b/packages/check-in-place-select/rollup.config.js
index 55901af8..5cc25019 100644
--- a/packages/check-in-place-select/rollup.config.js
+++ b/packages/check-in-place-select/rollup.config.js
@@ -8,7 +8,7 @@ import serve from 'rollup-plugin-serve';
 import url from "@rollup/plugin-url"
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
 console.log("build: " + build);
@@ -52,7 +52,7 @@ export default (async () => {
             copy({
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
                 ],
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
diff --git a/packages/common/rollup.config.js b/packages/common/rollup.config.js
index ae08e748..ac6c69f1 100644
--- a/packages/common/rollup.config.js
+++ b/packages/common/rollup.config.js
@@ -6,43 +6,46 @@ import serve from 'rollup-plugin-serve';
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
 import json from '@rollup/plugin-json';
+import {getDistPath} from '../../rollup.utils.js';
 
 const pkg = require('./package.json');
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
 console.log("build: " + build);
 
-export default {
-    input: (build !='test') ? ['demo.js'] : glob.sync('test/**/*.js'),
-    output: {
-        dir: 'dist',
-        entryFileNames: '[name].js',
-        chunkFileNames: 'shared/[name].[hash].[format].js',
-        format: 'esm',
-        sourcemap: true
-      },
-    onwarn: function (warning, warn) {
-        // ignore chai warnings
-        if (warning.code === 'CIRCULAR_DEPENDENCY') {
-          return;
-        }
-        warn(warning);
-    },
-    plugins: [
-        del({
-            targets: 'dist/*'
-          }),
-        consts({
-            environment: build,
-        }),
-        resolve(),
-        commonjs(),
-        json(),
-        copy({
-            targets: [
-                {src: 'assets/index.html', dest: 'dist'},
-                {src: 'assets/icons/*.svg', dest: 'dist/local/' + pkg.name + '/icons'},
-            ],
-        }),
-        (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
-    ]
-};
+export default (async () => {
+    return {
+        input: (build !='test') ? ['demo.js'] : glob.sync('test/**/*.js'),
+        output: {
+            dir: 'dist',
+            entryFileNames: '[name].js',
+            chunkFileNames: 'shared/[name].[hash].[format].js',
+            format: 'esm',
+            sourcemap: true
+        },
+        onwarn: function (warning, warn) {
+            // ignore chai warnings
+            if (warning.code === 'CIRCULAR_DEPENDENCY') {
+            return;
+            }
+            warn(warning);
+        },
+        plugins: [
+            del({
+                targets: 'dist/*'
+            }),
+            consts({
+                environment: build,
+            }),
+            resolve(),
+            commonjs(),
+            json(),
+            copy({
+                targets: [
+                    {src: 'assets/index.html', dest: 'dist'},
+                    {src: 'assets/icons/*.svg', dest: 'dist/' + await getDistPath(pkg.name, 'icons')},
+                ],
+            }),
+            (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
+        ]
+    };
+})();
\ No newline at end of file
diff --git a/packages/data-table-view/rollup.config.js b/packages/data-table-view/rollup.config.js
index 5c982c2f..19c0254c 100644
--- a/packages/data-table-view/rollup.config.js
+++ b/packages/data-table-view/rollup.config.js
@@ -8,7 +8,7 @@ import serve from 'rollup-plugin-serve';
 import urlPlugin from "@rollup/plugin-url";
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const pkg = require('./package.json');
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
@@ -57,15 +57,14 @@ export default (async () => {
             copy({
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
-                    {src: 'assets/*.css', dest: 'dist/local/' + pkg.name},
-                    {src: 'assets/*.ico', dest: 'dist/local/' + pkg.name},
-                    {src: 'assets/nomodule.js', dest: 'dist/local/' + pkg.name},
-
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
-                    {src: await getPackagePath('datatables.net-dt', 'css'), dest: 'dist/local/dbp-data-table-view'},
-                    {src: await getPackagePath('datatables.net-dt', 'images'), dest: 'dist/local/dbp-data-table-view'},
-                    {src: await getPackagePath('datatables.net-responsive-dt', 'css'), dest: 'dist/local/dbp-data-table-view'},
-                    {src: await getPackagePath('datatables.net-buttons-dt', 'css'), dest: 'dist/local/dbp-data-table-view'},
+                    {src: 'assets/*.css', dest: 'dist/' + await getDistPath(pkg.name)},
+                    {src: 'assets/*.ico', dest: 'dist/' + await getDistPath(pkg.name)},
+                    {src: 'assets/nomodule.js', dest: 'dist/' + await getDistPath(pkg.name)},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
+                    {src: await getPackagePath('datatables.net-dt', 'css'), dest: 'dist/' + await getDistPath(pkg.name)},
+                    {src: await getPackagePath('datatables.net-dt', 'images'), dest: 'dist/' + await getDistPath(pkg.name)},
+                    {src: await getPackagePath('datatables.net-responsive-dt', 'css'), dest: 'dist/' + await getDistPath(pkg.name)},
+                    {src: await getPackagePath('datatables.net-buttons-dt', 'css'), dest: 'dist/' + await getDistPath(pkg.name)},
                 ],
             }),
 
diff --git a/packages/file-handling/rollup.config.js b/packages/file-handling/rollup.config.js
index 1c1ee906..9c723876 100644
--- a/packages/file-handling/rollup.config.js
+++ b/packages/file-handling/rollup.config.js
@@ -7,7 +7,7 @@ import json from '@rollup/plugin-json';
 import serve from 'rollup-plugin-serve';
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const pkg = require('./package.json');
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
@@ -50,8 +50,8 @@ export default (async () => {
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
                     {src: 'assets/favicon.ico', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
-                    {src: await getPackagePath('tabulator-tables', 'dist/css'), dest: 'dist/local/' + pkg.name + '/tabulator-tables'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
+                    {src: await getPackagePath('tabulator-tables', 'dist/css'), dest: 'dist/' + await getDistPath(pkg.name, 'tabulator-tables')},
                 ],
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
diff --git a/packages/knowledge-base-web-page-element-view/rollup.config.js b/packages/knowledge-base-web-page-element-view/rollup.config.js
index 7ac611c5..bbcc3ac2 100644
--- a/packages/knowledge-base-web-page-element-view/rollup.config.js
+++ b/packages/knowledge-base-web-page-element-view/rollup.config.js
@@ -8,7 +8,7 @@ import serve from 'rollup-plugin-serve';
 import url from "@rollup/plugin-url";
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
 console.log("build: " + build);
@@ -50,7 +50,7 @@ export default (async () => {
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
                     {src: 'assets/favicon.ico', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
                 ],
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
diff --git a/packages/matomo/rollup.config.js b/packages/matomo/rollup.config.js
index bd6189f9..6b588d3e 100644
--- a/packages/matomo/rollup.config.js
+++ b/packages/matomo/rollup.config.js
@@ -9,7 +9,7 @@ import url from "@rollup/plugin-url";
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
 import emitEJS from 'rollup-plugin-emit-ejs'
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const pkg = require('./package.json');
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
@@ -98,7 +98,7 @@ export default (async () => {
             copy({
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
                     {src: 'assets/favicon.ico', dest:'dist'},
                 ],
             }),
diff --git a/packages/person-profile/rollup.config.js b/packages/person-profile/rollup.config.js
index daf2783e..9f515916 100644
--- a/packages/person-profile/rollup.config.js
+++ b/packages/person-profile/rollup.config.js
@@ -9,7 +9,7 @@ import serve from 'rollup-plugin-serve';
 import url from "@rollup/plugin-url"
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
 console.log("build: " + build);
@@ -53,7 +53,7 @@ export default (async () => {
             copy({
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
                 ],
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
diff --git a/packages/person-select/rollup.config.js b/packages/person-select/rollup.config.js
index 44e546e8..bc047601 100644
--- a/packages/person-select/rollup.config.js
+++ b/packages/person-select/rollup.config.js
@@ -8,7 +8,7 @@ import serve from 'rollup-plugin-serve';
 import url from "@rollup/plugin-url"
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
 console.log("build: " + build);
@@ -52,7 +52,7 @@ export default (async () => {
             copy({
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
                 ],
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
diff --git a/packages/qr-code-scanner/rollup.config.js b/packages/qr-code-scanner/rollup.config.js
index fd798ea7..ee91e9fa 100644
--- a/packages/qr-code-scanner/rollup.config.js
+++ b/packages/qr-code-scanner/rollup.config.js
@@ -10,8 +10,9 @@ import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
 import fs from "fs";
 import selfsigned from "selfsigned";
-import {getPackagePath} from "../../rollup.utils";
+import {getPackagePath, getDistPath} from "../../rollup.utils";
 
+const pkg = require('./package.json');
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
 console.log("build: " + build);
 
@@ -71,8 +72,8 @@ export default (async () => {
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
                     {src: 'assets/favicon.ico', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
-                    {src: await getPackagePath('qr-scanner', 'qr-scanner-worker.*'), dest: 'dist/local/qr-code-scanner'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
+                    {src: await getPackagePath('qr-scanner', 'qr-scanner-worker.*'), dest: 'dist/' + await getDistPath(pkg.name)},
                 ]
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({
diff --git a/packages/qr-code-scanner/src/qr-code-scanner.js b/packages/qr-code-scanner/src/qr-code-scanner.js
index 9a575119..b8b64d87 100644
--- a/packages/qr-code-scanner/src/qr-code-scanner.js
+++ b/packages/qr-code-scanner/src/qr-code-scanner.js
@@ -9,6 +9,7 @@ import * as commonUtils from '@dbp-toolkit/common/utils';
 import {getIconSVGURL} from '@dbp-toolkit/common';
 import {Mutex} from 'async-mutex';
 import QrScanner from 'qr-scanner';
+import {name as pkgName} from './../package.json';
 
 
 /**
@@ -110,7 +111,7 @@ async function createVideoElement(deviceId) {
 
 class QRScanner {
     constructor() {
-        QrScanner.WORKER_PATH = commonUtils.getAssetURL('qr-code-scanner', 'qr-scanner-worker.min.js');
+        QrScanner.WORKER_PATH = commonUtils.getAssetURL(pkgName, 'qr-scanner-worker.min.js');
         this._engine = null;
         this._canvas = document.createElement("canvas");
     }
diff --git a/rollup.utils.js b/rollup.utils.js
index b3b2aa19..5784bad1 100644
--- a/rollup.utils.js
+++ b/rollup.utils.js
@@ -19,6 +19,14 @@ export function getBuildInfo(build) {
     }
 }
 
+export async function getDistPath(packageName, assetPath) {
+    if (assetPath === undefined)
+        assetPath = '';
+    // make sure the package exists to avoid typos
+    await getPackagePath(packageName, '');
+    return path.join('local', packageName, assetPath);
+}
+
 export async function getPackagePath(packageName, assetPath) {
     const r = resolve();
     const resolved = await r.resolveId(packageName);
-- 
GitLab