mirror of
https://github.com/vector-im/hydrogen-web.git
synced 2024-12-23 03:25:12 +01:00
make all dependencies use vite and remove post-install script / lib dir
This commit is contained in:
parent
db3e8a9c6b
commit
b6fda8865f
@ -10,10 +10,9 @@
|
|||||||
"lint": "eslint --cache src/",
|
"lint": "eslint --cache src/",
|
||||||
"lint-ts": "eslint src/ -c .ts-eslintrc.js --ext .ts",
|
"lint-ts": "eslint src/ -c .ts-eslintrc.js --ext .ts",
|
||||||
"lint-ci": "eslint src/",
|
"lint-ci": "eslint src/",
|
||||||
"test": "impunity --entry-point src/platform/web/main.js --force-esm-dirs lib/ src/",
|
"test": "impunity --entry-point src/platform/web/main.js --force-esm-dirs src/",
|
||||||
"start": "snowpack dev --port 3000",
|
"start": "snowpack dev --port 3000",
|
||||||
"build": "node --experimental-modules scripts/build.mjs",
|
"build": "node --experimental-modules scripts/build.mjs"
|
||||||
"postinstall": "node ./scripts/post-install.js"
|
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -1,132 +0,0 @@
|
|||||||
/*
|
|
||||||
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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
const fsRoot = require("fs");
|
|
||||||
const fs = fsRoot.promises;
|
|
||||||
const path = require("path");
|
|
||||||
const { rollup } = require('rollup');
|
|
||||||
const { fileURLToPath } = require('url');
|
|
||||||
const { dirname } = require('path');
|
|
||||||
// needed to translate commonjs modules to esm
|
|
||||||
const commonjs = require('@rollup/plugin-commonjs');
|
|
||||||
const json = require('@rollup/plugin-json');
|
|
||||||
const { nodeResolve } = require('@rollup/plugin-node-resolve');
|
|
||||||
|
|
||||||
const projectDir = path.join(__dirname, "../");
|
|
||||||
|
|
||||||
async function removeDirIfExists(targetDir) {
|
|
||||||
try {
|
|
||||||
await fs.rmdir(targetDir, {recursive: true});
|
|
||||||
} catch (err) {
|
|
||||||
if (err.code !== "ENOENT") {
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** function used to resolve common-js require calls below. */
|
|
||||||
function packageIterator(request, start, defaultIterator) {
|
|
||||||
// this is just working for bs58, would need to tune it further for other dependencies
|
|
||||||
if (request === "safe-buffer") {
|
|
||||||
return [path.join(projectDir, "/scripts/package-overrides/safe-buffer")];
|
|
||||||
} else if (request === "buffer/") {
|
|
||||||
return [path.join(projectDir, "/scripts/package-overrides/buffer")];
|
|
||||||
} else {
|
|
||||||
return defaultIterator();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function commonjsToESM(src, dst) {
|
|
||||||
// create js bundle
|
|
||||||
const bundle = await rollup({
|
|
||||||
treeshake: {moduleSideEffects: false},
|
|
||||||
input: src,
|
|
||||||
plugins: [commonjs(), json(), nodeResolve({
|
|
||||||
browser: true,
|
|
||||||
preferBuiltins: false,
|
|
||||||
customResolveOptions: {packageIterator}
|
|
||||||
})]
|
|
||||||
});
|
|
||||||
const {output} = await bundle.generate({
|
|
||||||
format: 'es'
|
|
||||||
});
|
|
||||||
const code = output[0].code;
|
|
||||||
await fs.writeFile(dst, code, "utf8");
|
|
||||||
}
|
|
||||||
|
|
||||||
async function populateLib() {
|
|
||||||
const libDir = path.join(projectDir, "lib/");
|
|
||||||
await removeDirIfExists(libDir);
|
|
||||||
await fs.mkdir(libDir);
|
|
||||||
const olmSrcDir = path.dirname(require.resolve("@matrix-org/olm"));
|
|
||||||
const olmDstDir = path.join(libDir, "olm/");
|
|
||||||
await fs.mkdir(olmDstDir);
|
|
||||||
for (const file of ["olm.js", "olm.wasm", "olm_legacy.js"]) {
|
|
||||||
await fs.copyFile(path.join(olmSrcDir, file), path.join(olmDstDir, file));
|
|
||||||
}
|
|
||||||
// transpile node-html-parser to esm
|
|
||||||
await fs.mkdir(path.join(libDir, "node-html-parser/"));
|
|
||||||
await commonjsToESM(
|
|
||||||
require.resolve('node-html-parser/dist/index.js'),
|
|
||||||
path.join(libDir, "node-html-parser/index.js")
|
|
||||||
);
|
|
||||||
// transpile another-json to esm
|
|
||||||
await fs.mkdir(path.join(libDir, "another-json/"));
|
|
||||||
await commonjsToESM(
|
|
||||||
require.resolve('another-json/another-json.js'),
|
|
||||||
path.join(libDir, "another-json/index.js")
|
|
||||||
);
|
|
||||||
// transpile bs58 to esm
|
|
||||||
await fs.mkdir(path.join(libDir, "bs58/"));
|
|
||||||
await commonjsToESM(
|
|
||||||
require.resolve('bs58/index.js'),
|
|
||||||
path.join(libDir, "bs58/index.js")
|
|
||||||
);
|
|
||||||
// transpile base64-arraybuffer to esm
|
|
||||||
await fs.mkdir(path.join(libDir, "base64-arraybuffer/"));
|
|
||||||
await commonjsToESM(
|
|
||||||
require.resolve('base64-arraybuffer/lib/base64-arraybuffer.js'),
|
|
||||||
path.join(libDir, "base64-arraybuffer/index.js")
|
|
||||||
);
|
|
||||||
// this probably should no go in here, we can just import "aes-js" from legacy-extras.js
|
|
||||||
// as that file is never loaded from a browser
|
|
||||||
|
|
||||||
// transpile aesjs to esm
|
|
||||||
await fs.mkdir(path.join(libDir, "aes-js/"));
|
|
||||||
await commonjsToESM(
|
|
||||||
require.resolve('aes-js/index.js'),
|
|
||||||
path.join(libDir, "aes-js/index.js")
|
|
||||||
);
|
|
||||||
// es6-promise is already written as an es module,
|
|
||||||
// but it does need to be babelified, and current we don't babelify
|
|
||||||
// anything in node_modules in the build script, so make a bundle that
|
|
||||||
// is conveniently not placed in node_modules rather than symlinking.
|
|
||||||
await fs.mkdir(path.join(libDir, "es6-promise/"));
|
|
||||||
await commonjsToESM(
|
|
||||||
require.resolve('es6-promise/lib/es6-promise/promise.js'),
|
|
||||||
path.join(libDir, "es6-promise/index.js")
|
|
||||||
);
|
|
||||||
// fake-indexeddb, used for tests (but unresolvable bare imports also makes the build complain)
|
|
||||||
// and might want to use it for in-memory storage too, although we probably do ts->es6 with esm
|
|
||||||
// directly rather than ts->es5->es6 as we do now. The bundle is 240K currently.
|
|
||||||
await fs.mkdir(path.join(libDir, "fake-indexeddb/"));
|
|
||||||
await commonjsToESM(
|
|
||||||
path.join(projectDir, "/scripts/package-overrides/fake-indexeddb.js"),
|
|
||||||
path.join(libDir, "fake-indexeddb/index.js")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
populateLib();
|
|
@ -352,7 +352,7 @@ export function parseHTMLBody(platform, mediaRepository, allowReplies, html) {
|
|||||||
return new MessageBody(html, parts);
|
return new MessageBody(html, parts);
|
||||||
}
|
}
|
||||||
|
|
||||||
import parse from '../../../../../lib/node-html-parser/index.js';
|
import parse from "node-html-parser";
|
||||||
|
|
||||||
export function tests() {
|
export function tests() {
|
||||||
class HTMLParseResult {
|
class HTMLParseResult {
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import anotherjson from "../../../lib/another-json/index.js";
|
import anotherjson from "another-json";
|
||||||
import {SESSION_E2EE_KEY_PREFIX, OLM_ALGORITHM, MEGOLM_ALGORITHM} from "./common.js";
|
import {SESSION_E2EE_KEY_PREFIX, OLM_ALGORITHM, MEGOLM_ALGORITHM} from "./common.js";
|
||||||
|
|
||||||
// use common prefix so it's easy to clear properties that are not e2ee related during session clear
|
// use common prefix so it's easy to clear properties that are not e2ee related during session clear
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import anotherjson from "../../../lib/another-json/index.js";
|
import anotherjson from "another-json";
|
||||||
import {createEnum} from "../../utils/enum.js";
|
import {createEnum} from "../../utils/enum.js";
|
||||||
|
|
||||||
export const DecryptionSource = createEnum("Sync", "Timeline", "Retry");
|
export const DecryptionSource = createEnum("Sync", "Timeline", "Retry");
|
||||||
|
@ -14,7 +14,8 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {FDBFactory, FDBKeyRange} from "../../lib/fake-indexeddb/index.js";
|
import {FDBFactory} from "fake-indexeddb/lib/FDBFactory.js";
|
||||||
|
import {FDBKeyRange} from "fake-indexeddb/lib/FDBKeyRange.js";
|
||||||
import {StorageFactory} from "../matrix/storage/idb/StorageFactory";
|
import {StorageFactory} from "../matrix/storage/idb/StorageFactory";
|
||||||
import {IDOMStorage} from "../matrix/storage/idb/types";
|
import {IDOMStorage} from "../matrix/storage/idb/types";
|
||||||
import {Storage} from "../matrix/storage/idb/Storage";
|
import {Storage} from "../matrix/storage/idb/Storage";
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import aesjs from "../../../lib/aes-js/index.js";
|
import aesjs from "aes-js";
|
||||||
import {hkdf} from "../../utils/crypto/hkdf.js";
|
import {hkdf} from "../../utils/crypto/hkdf.js";
|
||||||
import {Platform as ModernPlatform} from "./Platform.js";
|
import {Platform as ModernPlatform} from "./Platform.js";
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import base64 from "../../../../lib/base64-arraybuffer/index.js";
|
import base64 from "base64-arraybuffer";
|
||||||
|
|
||||||
// turn IE11 result into promise
|
// turn IE11 result into promise
|
||||||
function subtleCryptoResult(promiseOrOp, method) {
|
function subtleCryptoResult(promiseOrOp, method) {
|
||||||
|
@ -15,7 +15,7 @@ limitations under the License.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// polyfills needed for IE11
|
// polyfills needed for IE11
|
||||||
import Promise from "../../../lib/es6-promise/index.js";
|
import Promise from "es6-promise/lib/es6-promise/promise.js";
|
||||||
import {checkNeedsSyncPromise} from "../../matrix/storage/idb/utils";
|
import {checkNeedsSyncPromise} from "../../matrix/storage/idb/utils";
|
||||||
|
|
||||||
if (typeof window.Promise === "undefined") {
|
if (typeof window.Promise === "undefined") {
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import bs58 from "../../../../lib/bs58/index.js";
|
import bs58 from "bs58";
|
||||||
|
|
||||||
export class Base58 {
|
export class Base58 {
|
||||||
encode(buffer) {
|
encode(buffer) {
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import base64 from "../../../../lib/base64-arraybuffer/index.js";
|
import base64 from "base64-arraybuffer";
|
||||||
|
|
||||||
export class Base64 {
|
export class Base64 {
|
||||||
encodeUnpadded(buffer) {
|
encodeUnpadded(buffer) {
|
||||||
|
@ -19,7 +19,7 @@ limitations under the License.
|
|||||||
// just enough to run olm, have promises and async/await
|
// just enough to run olm, have promises and async/await
|
||||||
|
|
||||||
// load this first just in case anything else depends on it
|
// load this first just in case anything else depends on it
|
||||||
import Promise from "../../../../lib/es6-promise/index.js";
|
import Promise from "es6-promise/lib/es6-promise/promise.js";
|
||||||
// not calling checkNeedsSyncPromise from here as we don't do any idb in the worker,
|
// not calling checkNeedsSyncPromise from here as we don't do any idb in the worker,
|
||||||
// mainly because IE doesn't handle multiple concurrent connections well
|
// mainly because IE doesn't handle multiple concurrent connections well
|
||||||
self.Promise = Promise;
|
self.Promise = Promise;
|
||||||
|
@ -3,5 +3,11 @@ export default {
|
|||||||
root: "src/platform/web",
|
root: "src/platform/web",
|
||||||
server: {
|
server: {
|
||||||
hmr: false
|
hmr: false
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
"safe-buffer": "./scripts/package-overrides/safe-buffer/index.js",
|
||||||
|
"buffer": "./scripts/package-overrides/buffer/index.js"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user