From 49731599cf7533a0b08e16c84b55abfcb53497b0 Mon Sep 17 00:00:00 2001
From: Christoph Reiter <reiter.christoph@gmail.com>
Date: Wed, 7 Aug 2019 13:00:03 +0200
Subject: [PATCH] Only allow commonjs modules in external dependencies

---
 packages/person-select/rollup.config.js       |  4 +-
 packages/person-select/src/i18n/de/select2.js |  4 +-
 packages/person-select/src/i18n/en/select2.js |  4 +-
 .../person-select/src/person-select-demo.js   |  6 +-
 packages/person-select/src/person-select.js   |  8 +-
 packages/person-select/src/utils.js           | 76 +++++++++----------
 packages/person-select/src/vars.js            | 11 ++-
 packages/person-select/test/unit.js           | 19 +++++
 packages/person-select/vendor/auth            |  2 +-
 packages/person-select/vendor/common          |  2 +-
 10 files changed, 79 insertions(+), 57 deletions(-)

diff --git a/packages/person-select/rollup.config.js b/packages/person-select/rollup.config.js
index 7ad95cdb..0e67955d 100644
--- a/packages/person-select/rollup.config.js
+++ b/packages/person-select/rollup.config.js
@@ -20,7 +20,9 @@ export default {
     plugins: [
         multiEntry(),
         resolve(),
-        commonjs(),
+        commonjs({
+            include: 'node_modules/**'
+        }),
         json(),
         replace({
             "process.env.BUILD": '"' + build + '"',
diff --git a/packages/person-select/src/i18n/de/select2.js b/packages/person-select/src/i18n/de/select2.js
index b4711db2..45d2c8b3 100644
--- a/packages/person-select/src/i18n/de/select2.js
+++ b/packages/person-select/src/i18n/de/select2.js
@@ -1,7 +1,7 @@
 /**
  * Content from https://github.com/select2/select2/blob/master/src/js/select2/i18n/de.js
  */
-module.exports = function () {
+export default function () {
     // German
     return {
         errorLoading: function () {
@@ -43,4 +43,4 @@ module.exports = function () {
             return 'Entferne alle Gegenstände';
         }
     };
-};
\ No newline at end of file
+};
diff --git a/packages/person-select/src/i18n/en/select2.js b/packages/person-select/src/i18n/en/select2.js
index f644ab73..31578425 100644
--- a/packages/person-select/src/i18n/en/select2.js
+++ b/packages/person-select/src/i18n/en/select2.js
@@ -1,7 +1,7 @@
 /**
  * Content from https://github.com/select2/select2/blob/master/src/js/select2/i18n/en.js
  */
-module.exports = function () {
+export default function () {
     // English
     return {
         errorLoading: function () {
@@ -47,4 +47,4 @@ module.exports = function () {
             return 'Remove all items';
         }
     };
-};
\ No newline at end of file
+};
diff --git a/packages/person-select/src/person-select-demo.js b/packages/person-select/src/person-select-demo.js
index 01b4183b..c08f53ae 100644
--- a/packages/person-select/src/person-select-demo.js
+++ b/packages/person-select/src/person-select-demo.js
@@ -1,4 +1,4 @@
-import utils from './utils.js';
+import {setting, getAPiUrl} from './utils.js';
 import {i18n} from './i18n.js';
 import {html, LitElement} from 'lit-element';
 import './person-select.js';
@@ -35,14 +35,14 @@ class PersonSelectDemo extends LitElement {
                     <h1 class="title">Person-Select-Demo</h1>
                 </div>
                 <div class="container">
-                    <vpu-auth lang="${this.lang}" client-id="${utils.setting('keyCloakClientId')}" load-person force-login></vpu-auth>
+                    <vpu-auth lang="${this.lang}" client-id="${setting('keyCloakClientId')}" load-person force-login></vpu-auth>
                 </div>
                 <div class="container">
                     <form>
                         <div class="field">
                             <label class="label">Person</label>
                             <div class="control">
-                                <vpu-person-select lang="${this.lang}" entry-point-url="${utils.getAPiUrl()}"></vpu-person-select>
+                                <vpu-person-select lang="${this.lang}" entry-point-url="${getAPiUrl()}"></vpu-person-select>
                             </div>
                         </div>
                     </form>
diff --git a/packages/person-select/src/person-select.js b/packages/person-select/src/person-select.js
index 434df898..a1af5953 100644
--- a/packages/person-select/src/person-select.js
+++ b/packages/person-select/src/person-select.js
@@ -1,5 +1,5 @@
 import $ from 'jquery';
-import utils from './utils.js';
+import {getAPiUrl, getAssetURL, findObjectInApiResults} from './utils.js';
 import select2 from 'select2';
 import select2LangDe from './i18n/de/select2'
 import select2LangEn from './i18n/en/select2'
@@ -16,7 +16,7 @@ class PersonSelect extends VPULitElementJQuery {
     constructor() {
         super();
         this.lang = 'de';
-        this.entryPointUrl = utils.getAPiUrl();
+        this.entryPointUrl = getAPiUrl();
         this.jsonld = null;
         this.$select = null;
     }
@@ -105,7 +105,7 @@ class PersonSelect extends VPULitElementJQuery {
             $this.attr("value", identifier);
             $this.val(identifier);
 
-            const object = utils.findObjectInApiResults(identifier, lastResult);
+            const object = findObjectInApiResults(identifier, lastResult);
             $this.attr("data-object", JSON.stringify(object));
 
             // fire a change event
@@ -146,7 +146,7 @@ class PersonSelect extends VPULitElementJQuery {
     }
 
     render() {
-        const select2CSS = utils.getAssetURL('select2/css/select2.min.css');
+        const select2CSS = getAssetURL('select2/css/select2.min.css');
 
         return html`
             <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.5/css/bulma.min.css">
diff --git a/packages/person-select/src/utils.js b/packages/person-select/src/utils.js
index 82095b3f..a1365827 100644
--- a/packages/person-select/src/utils.js
+++ b/packages/person-select/src/utils.js
@@ -1,46 +1,44 @@
-const vars = require("./vars");
+import vars from './vars.js';
 
-module.exports = {
-    getAssetURL: (path) => {
-        const elm = document.getElementById('vpu-library-shelving-wc-src');
-        if (!elm)
-            return path;
-        const url = elm.src;
-        // newer browsers only
-        //var url = import.meta.url;
-        return new URL(path, url).href;
-    },
+export const getAssetURL = (path) => {
+    const elm = document.getElementById('vpu-library-shelving-wc-src');
+    if (!elm)
+        return path;
+    const url = elm.src;
+    // newer browsers only
+    //var url = import.meta.url;
+    return new URL(path, url).href;
+}
 
-    getAPiUrl: function(path = "", withPrefix = true) {
-        return vars.apiBaseUrl + (withPrefix ? vars.apiUrlPrefix : "") + path;
-    },
+export const getAPiUrl = function(path = "", withPrefix = true) {
+    return vars.apiBaseUrl + (withPrefix ? vars.apiUrlPrefix : "") + path;
+}
 
-    /**
-     * Finds an object in a JSON result by identifier
-     *
-     * @param identifier
-     * @param results
-     * @param identifierAttribute
-     */
-    findObjectInApiResults: (identifier, results, identifierAttribute = "@id") => {
-        const members = results["hydra:member"];
+/**
+ * Finds an object in a JSON result by identifier
+ *
+ * @param identifier
+ * @param results
+ * @param identifierAttribute
+ */
+export const findObjectInApiResults = (identifier, results, identifierAttribute = "@id") => {
+    const members = results["hydra:member"];
 
-        if (members === undefined) {
-            return;
-        }
+    if (members === undefined) {
+        return;
+    }
 
-        for (const object of members){
-            if (object[identifierAttribute] === identifier) {
-                return object;
-            }
+    for (const object of members){
+        if (object[identifierAttribute] === identifier) {
+            return object;
         }
-    },
+    }
+}
 
-    /**
-     * Reads a setting
-     *
-     * @param key
-     * @returns {*}
-     */
-    setting: (key) => vars[key]
-};
+/**
+ * Reads a setting
+ *
+ * @param key
+ * @returns {*}
+ */
+export const setting = (key) => vars[key]
diff --git a/packages/person-select/src/vars.js b/packages/person-select/src/vars.js
index d34d7b63..0e25edd8 100644
--- a/packages/person-select/src/vars.js
+++ b/packages/person-select/src/vars.js
@@ -1,7 +1,8 @@
+var config;
 
 switch(process.env.BUILD) {
     case "development":
-        module.exports = {
+        config = {
             apiBaseUrl: 'https://mw-dev.tugraz.at',
             apiUrlPrefix: '',
             keyCloakClientId: 'auth-dev-mw-frontend',
@@ -9,14 +10,14 @@ switch(process.env.BUILD) {
 
         break;
     case "production":
-        module.exports = {
+        config = {
             apiBaseUrl: 'https://mw.tugraz.at',
             apiUrlPrefix: '',
             keyCloakClientId: 'auth-prod-mw-frontend',
         };
         break;
     case "demo":
-        module.exports = {
+        config = {
             apiBaseUrl: 'https://api-demo.tugraz.at',
             apiUrlPrefix: '',
             keyCloakClientId: 'auth-dev-mw-frontend',
@@ -24,9 +25,11 @@ switch(process.env.BUILD) {
         break;
     case "local":
     default:
-        module.exports = {
+        config = {
             apiBaseUrl: 'http://127.0.0.1:8000',
             apiUrlPrefix: '',
             keyCloakClientId: 'auth-dev-mw-frontend-local',
         };
 }
+
+export default config;
diff --git a/packages/person-select/test/unit.js b/packages/person-select/test/unit.js
index 6f013090..e396c5ea 100644
--- a/packages/person-select/test/unit.js
+++ b/packages/person-select/test/unit.js
@@ -1,4 +1,5 @@
 import '../src/person-select';
+import '../src/demo';
 
 describe('vpu-person-select basics', () => {
   let node;
@@ -17,3 +18,21 @@ describe('vpu-person-select basics', () => {
       expect(node).to.have.property('shadowRoot');
   });
 });
+
+describe('vpu-person-select-demo basics', () => {
+  let node;
+
+  beforeEach(async () => {
+    node = document.createElement('vpu-person-select-demo');
+    document.body.appendChild(node);
+    await node.updateComplete;
+  });
+
+  afterEach(() => {
+    node.remove();
+  });
+
+  it('should render', () => {
+      expect(node).to.have.property('shadowRoot');
+  });
+});
diff --git a/packages/person-select/vendor/auth b/packages/person-select/vendor/auth
index 0daf533b..2752cf0c 160000
--- a/packages/person-select/vendor/auth
+++ b/packages/person-select/vendor/auth
@@ -1 +1 @@
-Subproject commit 0daf533bbdca1bcb5b8f5d16bb258b86bdb59242
+Subproject commit 2752cf0ce9d1710792cc939f8b26f48641693516
diff --git a/packages/person-select/vendor/common b/packages/person-select/vendor/common
index 68e0a4f1..b30eaa64 160000
--- a/packages/person-select/vendor/common
+++ b/packages/person-select/vendor/common
@@ -1 +1 @@
-Subproject commit 68e0a4f1f1a3ef6e05aca5216bf8684578ec2229
+Subproject commit b30eaa6475ccc65b5f99d2ead86ddbe2b8e015a7
-- 
GitLab