Merge pull request #262 from vector-im/bwindels/useaslib

Make hydrogen usable as a npm/yarn dependency
This commit is contained in:
Bruno Windels 2021-03-08 13:44:26 +00:00 committed by GitHub
commit ed7d12b90f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 21 deletions

View file

@ -10,7 +10,7 @@
"test": "node_modules/.bin/impunity --entry-point src/main.js --force-esm-dirs lib/ src/", "test": "node_modules/.bin/impunity --entry-point src/main.js --force-esm-dirs lib/ src/",
"start": "node scripts/serve-local.js", "start": "node scripts/serve-local.js",
"build": "node --experimental-modules scripts/build.mjs", "build": "node --experimental-modules scripts/build.mjs",
"postinstall": "node ./scripts/post-install.mjs" "postinstall": "node ./scripts/post-install.js"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -26,9 +26,7 @@
"@babel/core": "^7.11.1", "@babel/core": "^7.11.1",
"@babel/preset-env": "^7.11.0", "@babel/preset-env": "^7.11.0",
"@rollup/plugin-babel": "^5.1.0", "@rollup/plugin-babel": "^5.1.0",
"@rollup/plugin-commonjs": "^15.0.0",
"@rollup/plugin-multi-entry": "^4.0.0", "@rollup/plugin-multi-entry": "^4.0.0",
"@rollup/plugin-node-resolve": "^9.0.0",
"autoprefixer": "^10.0.1", "autoprefixer": "^10.0.1",
"cheerio": "^1.0.0-rc.3", "cheerio": "^1.0.0-rc.3",
"commander": "^6.0.0", "commander": "^6.0.0",
@ -42,12 +40,14 @@
"postcss-import": "^12.0.1", "postcss-import": "^12.0.1",
"postcss-url": "^8.0.0", "postcss-url": "^8.0.0",
"regenerator-runtime": "^0.13.7", "regenerator-runtime": "^0.13.7",
"rollup": "^2.26.4",
"rollup-plugin-cleanup": "^3.1.1", "rollup-plugin-cleanup": "^3.1.1",
"serve-static": "^1.13.2", "serve-static": "^1.13.2",
"xxhashjs": "^0.2.2" "xxhashjs": "^0.2.2"
}, },
"dependencies": { "dependencies": {
"rollup": "^2.26.4",
"@rollup/plugin-commonjs": "^15.0.0",
"@rollup/plugin-node-resolve": "^9.0.0",
"aes-js": "^3.1.2", "aes-js": "^3.1.2",
"another-json": "^0.2.0", "another-json": "^0.2.0",
"base64-arraybuffer": "^0.2.0", "base64-arraybuffer": "^0.2.0",

View file

@ -14,21 +14,28 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
import fsRoot from "fs"; const fsRoot = require("fs");
const fs = fsRoot.promises; const fs = fsRoot.promises;
import path from "path"; const path = require("path");
import { rollup } from 'rollup'; const { rollup } = require('rollup');
import { fileURLToPath } from 'url'; const { fileURLToPath } = require('url');
import { dirname } from 'path'; const { dirname } = require('path');
// needed to translate commonjs modules to esm // needed to translate commonjs modules to esm
import commonjs from '@rollup/plugin-commonjs'; const commonjs = require('@rollup/plugin-commonjs');
import { nodeResolve } from '@rollup/plugin-node-resolve'; const { nodeResolve } = require('@rollup/plugin-node-resolve');
import {removeDirIfExists} from "./common.mjs";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const projectDir = path.join(__dirname, "../"); 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 used to resolve common-js require calls below. */
function packageIterator(request, start, defaultIterator) { function packageIterator(request, start, defaultIterator) {
// this is just working for bs58, would need to tune it further for other dependencies // this is just working for bs58, would need to tune it further for other dependencies
@ -60,10 +67,9 @@ async function commonjsToESM(src, dst) {
async function populateLib() { async function populateLib() {
const libDir = path.join(projectDir, "lib/"); const libDir = path.join(projectDir, "lib/");
const modulesDir = path.join(projectDir, "node_modules/");
await removeDirIfExists(libDir); await removeDirIfExists(libDir);
await fs.mkdir(libDir); await fs.mkdir(libDir);
const olmSrcDir = path.join(modulesDir, "olm/"); const olmSrcDir = path.dirname(require.resolve("olm"));
const olmDstDir = path.join(libDir, "olm/"); const olmDstDir = path.join(libDir, "olm/");
await fs.mkdir(olmDstDir); await fs.mkdir(olmDstDir);
for (const file of ["olm.js", "olm.wasm", "olm_legacy.js"]) { for (const file of ["olm.js", "olm.wasm", "olm_legacy.js"]) {
@ -72,19 +78,19 @@ async function populateLib() {
// transpile another-json to esm // transpile another-json to esm
await fs.mkdir(path.join(libDir, "another-json/")); await fs.mkdir(path.join(libDir, "another-json/"));
await commonjsToESM( await commonjsToESM(
path.join(modulesDir, 'another-json/another-json.js'), require.resolve('another-json/another-json.js'),
path.join(libDir, "another-json/index.js") path.join(libDir, "another-json/index.js")
); );
// transpile bs58 to esm // transpile bs58 to esm
await fs.mkdir(path.join(libDir, "bs58/")); await fs.mkdir(path.join(libDir, "bs58/"));
await commonjsToESM( await commonjsToESM(
path.join(modulesDir, 'bs58/index.js'), require.resolve('bs58/index.js'),
path.join(libDir, "bs58/index.js") path.join(libDir, "bs58/index.js")
); );
// transpile base64-arraybuffer to esm // transpile base64-arraybuffer to esm
await fs.mkdir(path.join(libDir, "base64-arraybuffer/")); await fs.mkdir(path.join(libDir, "base64-arraybuffer/"));
await commonjsToESM( await commonjsToESM(
path.join(modulesDir, 'base64-arraybuffer/lib/base64-arraybuffer.js'), require.resolve('base64-arraybuffer/lib/base64-arraybuffer.js'),
path.join(libDir, "base64-arraybuffer/index.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 // this probably should no go in here, we can just import "aes-js" from legacy-extras.js
@ -93,7 +99,7 @@ async function populateLib() {
// transpile aesjs to esm // transpile aesjs to esm
await fs.mkdir(path.join(libDir, "aes-js/")); await fs.mkdir(path.join(libDir, "aes-js/"));
await commonjsToESM( await commonjsToESM(
path.join(modulesDir, 'aes-js/index.js'), require.resolve('aes-js/index.js'),
path.join(libDir, "aes-js/index.js") path.join(libDir, "aes-js/index.js")
); );
// es6-promise is already written as an es module, // es6-promise is already written as an es module,
@ -102,7 +108,7 @@ async function populateLib() {
// is conveniently not placed in node_modules rather than symlinking. // is conveniently not placed in node_modules rather than symlinking.
await fs.mkdir(path.join(libDir, "es6-promise/")); await fs.mkdir(path.join(libDir, "es6-promise/"));
await commonjsToESM( await commonjsToESM(
path.join(modulesDir, 'es6-promise/lib/es6-promise/promise.js'), require.resolve('es6-promise/lib/es6-promise/promise.js'),
path.join(libDir, "es6-promise/index.js") path.join(libDir, "es6-promise/index.js")
); );
} }