diff --git a/package-lock.json b/package-lock.json
index 86ac9efc..d4ef09d8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,5 +1,5 @@
{
- "name": "brawl-chat",
+ "name": "hydrogen-web",
"version": "0.0.27",
"lockfileVersion": 1,
"requires": true,
@@ -1088,6 +1088,15 @@
"resolve": "^1.11.0"
}
},
+ "@rollup/plugin-multi-entry": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-multi-entry/-/plugin-multi-entry-3.0.1.tgz",
+ "integrity": "sha512-Gcp9E8y68Kx+Jo8zy/ZpiiAkb0W01cSqnxOz6h9bPR7MU3gaoTEdRf7xXYplwli1SBFEswXX588ESj+50Brfxw==",
+ "dev": true,
+ "requires": {
+ "matched": "^1.0.2"
+ }
+ },
"@rollup/plugin-node-resolve": {
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.4.0.tgz",
@@ -1158,6 +1167,18 @@
"color-convert": "^1.9.0"
}
},
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "async-array-reduce": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/async-array-reduce/-/async-array-reduce-0.2.1.tgz",
+ "integrity": "sha1-yL4BCitc0A3qlsgRFgNGk9/dgtE=",
+ "dev": true
+ },
"babel-plugin-dynamic-import-node": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
@@ -1484,6 +1505,15 @@
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
"dev": true
},
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
"finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
@@ -1537,6 +1567,30 @@
"path-is-absolute": "^1.0.0"
}
},
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ }
+ },
"globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -1549,12 +1603,30 @@
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
+ "has-glob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz",
+ "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.0.0"
+ }
+ },
"has-symbols": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
"integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
"dev": true
},
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
"htmlparser2": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
@@ -1608,6 +1680,12 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
"invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -1617,6 +1695,21 @@
"loose-envify": "^1.0.0"
}
},
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ },
"is-module": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
@@ -1632,6 +1725,24 @@
"@types/estree": "*"
}
},
+ "is-valid-glob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
+ "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -1692,6 +1803,20 @@
"sourcemap-codec": "^1.4.4"
}
},
+ "matched": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/matched/-/matched-1.0.2.tgz",
+ "integrity": "sha512-7ivM1jFZVTOOS77QsR+TtYHH0ecdLclMkqbf5qiJdX2RorqfhsL65QHySPZgDE0ZjHoh+mQUNHTanNXIlzXd0Q==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "async-array-reduce": "^0.2.1",
+ "glob": "^7.1.2",
+ "has-glob": "^1.0.0",
+ "is-valid-glob": "^1.0.0",
+ "resolve-dir": "^1.0.0"
+ }
+ },
"mdn-polyfills": {
"version": "5.20.0",
"resolved": "https://registry.npmjs.org/mdn-polyfills/-/mdn-polyfills-5.20.0.tgz",
@@ -1776,6 +1901,12 @@
"wrappy": "1"
}
},
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
"parse5": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
@@ -1946,6 +2077,16 @@
"path-parse": "^1.0.6"
}
},
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ }
+ },
"rollup": {
"version": "1.32.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz",
@@ -2104,6 +2245,15 @@
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
},
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
diff --git a/package.json b/package.json
index 4750dd07..9cef3338 100644
--- a/package.json
+++ b/package.json
@@ -26,6 +26,7 @@
"@babel/preset-env": "^7.11.0",
"@rollup/plugin-babel": "^5.1.0",
"@rollup/plugin-commonjs": "^14.0.0",
+ "@rollup/plugin-multi-entry": "^3.0.1",
"@rollup/plugin-node-resolve": "^8.4.0",
"cheerio": "^1.0.0-rc.3",
"core-js": "^3.6.5",
diff --git a/scripts/build.mjs b/scripts/build.mjs
index 8a7af56a..d5858082 100644
--- a/scripts/build.mjs
+++ b/scripts/build.mjs
@@ -30,6 +30,8 @@ import babel from '@rollup/plugin-babel';
import { nodeResolve } from '@rollup/plugin-node-resolve';
// needed because some of the polyfills are written as commonjs modules
import commonjs from '@rollup/plugin-commonjs';
+// multi-entry plugin so we can add polyfill file to main
+import multi from '@rollup/plugin-multi-entry';
const PROJECT_ID = "hydrogen";
const PROJECT_SHORT_NAME = "Hydrogen";
@@ -83,7 +85,7 @@ async function buildHtml(version, bundleName) {
doc("link[rel=stylesheet]").attr("href", `${PROJECT_ID}.css`);
doc("script#main").replaceWith(
`` +
- ``);
+ ``);
removeOrEnableScript(doc("script#phone-debug-pre"), debug);
removeOrEnableScript(doc("script#phone-debug-post"), debug);
removeOrEnableScript(doc("script#service-worker"), offline);
@@ -107,7 +109,7 @@ async function buildJs(bundleName) {
await bundle.write({
file: path.join(targetDir, bundleName),
format: 'iife',
- name: 'main'
+ name: `${PROJECT_ID}Bundle`
});
}
@@ -129,14 +131,14 @@ async function buildJsLegacy(bundleName) {
});
// create js bundle
const rollupConfig = {
- input: 'src/main-legacy.js',
- plugins: [commonjs(), nodeResolve(), babelPlugin]
+ input: ['src/legacy-polyfill.js', 'src/main.js'],
+ plugins: [multi(), commonjs(), nodeResolve(), babelPlugin]
};
const bundle = await rollup.rollup(rollupConfig);
await bundle.write({
file: path.join(targetDir, bundleName),
format: 'iife',
- name: 'main'
+ name: `${PROJECT_ID}Bundle`
});
}
diff --git a/src/legacy-polyfill.js b/src/legacy-polyfill.js
new file mode 100644
index 00000000..5665158c
--- /dev/null
+++ b/src/legacy-polyfill.js
@@ -0,0 +1,26 @@
+/*
+Copyright 2020 The Matrix.org Foundation C.I.C.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// polyfills needed for IE11
+import "core-js/stable";
+import "regenerator-runtime/runtime";
+import "mdn-polyfills/Element.prototype.closest";
+// TODO: contribute this to mdn-polyfills
+if (!Element.prototype.remove) {
+ Element.prototype.remove = function remove() {
+ this.parentNode.removeChild(this);
+ };
+}
\ No newline at end of file
diff --git a/src/main-legacy.js b/src/main-legacy.js
deleted file mode 100644
index e21d4ca5..00000000
--- a/src/main-legacy.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-Copyright 2020 Bruno Windels
-Copyright 2020 The Matrix.org Foundation C.I.C.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// polyfills needed for IE11
-import "core-js/stable";
-import "regenerator-runtime/runtime";
-import "mdn-polyfills/Element.prototype.closest";
-// TODO: contribute this to mdn-polyfills
-if (!Element.prototype.remove) {
- Element.prototype.remove = function remove() {
- this.parentNode.removeChild(this);
- };
-}
-
-import {xhrRequest} from "./matrix/net/request/xhr.js";
-import {SessionContainer} from "./matrix/SessionContainer.js";
-import {StorageFactory} from "./matrix/storage/idb/StorageFactory.js";
-import {SessionInfoStorage} from "./matrix/sessioninfo/localstorage/SessionInfoStorage.js";
-import {BrawlViewModel} from "./domain/BrawlViewModel.js";
-import {BrawlView} from "./ui/web/BrawlView.js";
-import {Clock} from "./ui/web/dom/Clock.js";
-import {OnlineStatus} from "./ui/web/dom/OnlineStatus.js";
-
-export default async function main(container) {
- try {
- const request = xhrRequest;
- const sessionInfoStorage = new SessionInfoStorage("brawl_sessions_v1");
- const clock = new Clock();
- const storageFactory = new StorageFactory();
-
- const vm = new BrawlViewModel({
- createSessionContainer: () => {
- return new SessionContainer({
- random: Math.random,
- onlineStatus: new OnlineStatus(),
- storageFactory,
- sessionInfoStorage,
- request,
- clock,
- });
- },
- sessionInfoStorage,
- storageFactory,
- clock,
- });
- window.__brawlViewModel = vm;
- await vm.load();
- const view = new BrawlView(vm);
- container.appendChild(view.mount());
- } catch(err) {
- console.error(`${err.message}:\n${err.stack}`);
- }
-}
diff --git a/src/main.js b/src/main.js
index f5c13fc4..2c86b9d9 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,5 +1,6 @@
/*
Copyright 2020 Bruno Windels
+Copyright 2020 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +17,7 @@ limitations under the License.
// import {RecordRequester, ReplayRequester} from "./matrix/net/request/replay.js";
import {createFetchRequest} from "./matrix/net/request/fetch.js";
+import {xhrRequest} from "./matrix/net/request/xhr.js";
import {SessionContainer} from "./matrix/SessionContainer.js";
import {StorageFactory} from "./matrix/storage/idb/StorageFactory.js";
import {SessionInfoStorage} from "./matrix/sessioninfo/localstorage/SessionInfoStorage.js";
@@ -24,7 +26,10 @@ import {BrawlView} from "./ui/web/BrawlView.js";
import {Clock} from "./ui/web/dom/Clock.js";
import {OnlineStatus} from "./ui/web/dom/OnlineStatus.js";
-export default async function main(container) {
+// Don't use a default export here, as we use multiple entries during legacy build,
+// which does not support default exports,
+// see https://github.com/rollup/plugins/tree/master/packages/multi-entry
+export async function main(container) {
try {
// to replay:
// const fetchLog = await (await fetch("/fetchlogs/constrainterror.json")).json();
@@ -35,9 +40,13 @@ export default async function main(container) {
// const recorder = new RecordRequester(createFetchRequest(clock.createTimeout));
// const request = recorder.request;
// window.getBrawlFetchLog = () => recorder.log();
- // normal network:
const clock = new Clock();
- const request = createFetchRequest(clock.createTimeout);
+ let request;
+ if (typeof fetch === "function") {
+ request = createFetchRequest(clock.createTimeout);
+ } else {
+ request = xhrRequest;
+ }
const sessionInfoStorage = new SessionInfoStorage("brawl_sessions_v1");
const storageFactory = new StorageFactory();