From 3ee4ef358548f1591a093362c1e51249c69935e3 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 21 Feb 2023 21:38:57 +0100 Subject: taler-wallet-cli: bundle with esbuild --- packages/taler-wallet-cli/Makefile | 5 +- packages/taler-wallet-cli/bin/taler-wallet-cli.mjs | 2 +- packages/taler-wallet-cli/build-node.mjs | 70 ++++++++++++++++++ packages/taler-wallet-cli/build-qtart.mjs | 72 ++++++++++++++++++ packages/taler-wallet-cli/build.mjs | 80 -------------------- packages/taler-wallet-cli/package.json | 13 +--- packages/taler-wallet-cli/src/import-meta-url.js | 2 + pnpm-lock.yaml | 86 ---------------------- 8 files changed, 151 insertions(+), 179 deletions(-) create mode 100755 packages/taler-wallet-cli/build-node.mjs create mode 100755 packages/taler-wallet-cli/build-qtart.mjs delete mode 100755 packages/taler-wallet-cli/build.mjs create mode 100644 packages/taler-wallet-cli/src/import-meta-url.js diff --git a/packages/taler-wallet-cli/Makefile b/packages/taler-wallet-cli/Makefile index 98116bbbd..8584b190f 100644 --- a/packages/taler-wallet-cli/Makefile +++ b/packages/taler-wallet-cli/Makefile @@ -17,13 +17,14 @@ else install_target = $(prefix)/lib/taler-wallet-cli .PHONY: install install-nodeps deps install-nodeps: + ./build-node.mjs install -d $(prefix)/bin install -d $(install_target)/bin install -d $(install_target)/node_modules/taler-wallet-cli install -d $(install_target)/node_modules/taler-wallet-cli/bin install -d $(install_target)/node_modules/taler-wallet-cli/dist - install ./dist/taler-wallet-cli.mjs $(install_target)/node_modules/taler-wallet-cli/dist/ - install ./dist/taler-wallet-cli.mjs.map $(install_target)/node_modules/taler-wallet-cli/dist/ + install ./dist/taler-wallet-cli-bundled.cjs $(install_target)/node_modules/taler-wallet-cli/dist/ + install ./dist/taler-wallet-cli-bundled.cjs.map $(install_target)/node_modules/taler-wallet-cli/dist/ install ./bin/taler-wallet-cli.mjs $(install_target)/node_modules/taler-wallet-cli/bin/ ln -sf $(install_target)/node_modules/taler-wallet-cli/bin/taler-wallet-cli.mjs $(prefix)/bin/taler-wallet-cli deps: diff --git a/packages/taler-wallet-cli/bin/taler-wallet-cli.mjs b/packages/taler-wallet-cli/bin/taler-wallet-cli.mjs index e3378471c..082007632 100755 --- a/packages/taler-wallet-cli/bin/taler-wallet-cli.mjs +++ b/packages/taler-wallet-cli/bin/taler-wallet-cli.mjs @@ -15,5 +15,5 @@ TALER; see the file COPYING. If not, see */ -import { main } from '../dist/taler-wallet-cli.mjs'; +import { main } from '../dist/taler-wallet-cli-bundled.cjs'; main(); diff --git a/packages/taler-wallet-cli/build-node.mjs b/packages/taler-wallet-cli/build-node.mjs new file mode 100755 index 000000000..76426bc41 --- /dev/null +++ b/packages/taler-wallet-cli/build-node.mjs @@ -0,0 +1,70 @@ +#!/usr/bin/env node +/* + This file is part of GNU Taler + (C) 2022 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +import esbuild from "esbuild"; +import path from "path"; +import fs from "fs"; + +const BASE = process.cwd(); + +let GIT_ROOT = BASE; +while (!fs.existsSync(path.join(GIT_ROOT, ".git")) && GIT_ROOT !== "/") { + GIT_ROOT = path.join(GIT_ROOT, "../"); +} +if (GIT_ROOT === "/") { + console.log("not found"); + process.exit(1); +} +const GIT_HASH = GIT_ROOT === "/" ? undefined : git_hash(); + +let _package = JSON.parse(fs.readFileSync(path.join(BASE, "package.json"))); + +function git_hash() { + const rev = fs + .readFileSync(path.join(GIT_ROOT, ".git", "HEAD")) + .toString() + .trim() + .split(/.*[: ]/) + .slice(-1)[0]; + if (rev.indexOf("/") === -1) { + return rev; + } else { + return fs.readFileSync(path.join(GIT_ROOT, ".git", rev)).toString().trim(); + } +} + +export const buildConfig = { + entryPoints: ["src/index.ts"], + outfile: "dist/taler-wallet-cli-bundled.cjs", + bundle: true, + minify: false, + target: ["es2020"], + format: "cjs", + platform: "node", + sourcemap: true, + inject: ["src/import-meta-url.js"], + define: { + __VERSION__: `"${_package.version}"`, + __GIT_HASH__: `"${GIT_HASH}"`, + ["import.meta.url"]: "import_meta_url", + }, +}; + +esbuild.build(buildConfig).catch((e) => { + console.log(e); + process.exit(1); +}); diff --git a/packages/taler-wallet-cli/build-qtart.mjs b/packages/taler-wallet-cli/build-qtart.mjs new file mode 100755 index 000000000..0cecf3ae9 --- /dev/null +++ b/packages/taler-wallet-cli/build-qtart.mjs @@ -0,0 +1,72 @@ +#!/usr/bin/env node +/* + This file is part of GNU Taler + (C) 2022 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +import esbuild from "esbuild"; +import path from "path"; +import fs from "fs"; + +const BASE = process.cwd(); + +let GIT_ROOT = BASE; +while (!fs.existsSync(path.join(GIT_ROOT, ".git")) && GIT_ROOT !== "/") { + GIT_ROOT = path.join(GIT_ROOT, "../"); +} +if (GIT_ROOT === "/") { + console.log("not found"); + process.exit(1); +} +const GIT_HASH = GIT_ROOT === "/" ? undefined : git_hash(); + +let _package = JSON.parse(fs.readFileSync(path.join(BASE, "package.json"))); + +function git_hash() { + const rev = fs + .readFileSync(path.join(GIT_ROOT, ".git", "HEAD")) + .toString() + .trim() + .split(/.*[: ]/) + .slice(-1)[0]; + if (rev.indexOf("/") === -1) { + return rev; + } else { + return fs.readFileSync(path.join(GIT_ROOT, ".git", rev)).toString().trim(); + } +} + +export const buildConfig = { + entryPoints: ["src/index.ts"], + outfile: "dist/taler-wallet-cli.qtart.mjs", + bundle: true, + minify: false, + target: ["es2020"], + format: "esm", + platform: "neutral", + mainFields: ["module", "main"], + conditions: ["qtart"], + sourcemap: true, + // quickjs standard library + external: ["std", "os"], + define: { + __VERSION__: `"${_package.version}"`, + __GIT_HASH__: `"${GIT_HASH}"`, + }, +}; + +esbuild.build(buildConfig).catch((e) => { + console.log(e); + process.exit(1); +}); diff --git a/packages/taler-wallet-cli/build.mjs b/packages/taler-wallet-cli/build.mjs deleted file mode 100755 index b2ed2c937..000000000 --- a/packages/taler-wallet-cli/build.mjs +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env node -/* - This file is part of GNU Taler - (C) 2022 Taler Systems S.A. - - GNU Taler is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - GNU Taler; see the file COPYING. If not, see - */ - -import esbuild from 'esbuild' -import path from "path" -import fs from "fs" - -const BASE = process.cwd() - -const preact = path.join(BASE, "node_modules", "preact", "compat", "dist", "compat.module.js"); -const preactCompatPlugin = { - name: "preact-compat", - setup(build) { - build.onResolve({ filter: /^(react-dom|react)$/ }, args => ({ path: preact })); - } -} - -let GIT_ROOT = BASE -while (!fs.existsSync(path.join(GIT_ROOT, '.git')) && GIT_ROOT !== '/') { - GIT_ROOT = path.join(GIT_ROOT, '../') -} -if (GIT_ROOT === '/') { - console.log("not found") - process.exit(1); -} -const GIT_HASH = GIT_ROOT === '/' ? undefined : git_hash() - - -let _package = JSON.parse(fs.readFileSync(path.join(BASE, 'package.json'))); - -function git_hash() { - const rev = fs.readFileSync(path.join(GIT_ROOT, '.git', 'HEAD')).toString().trim().split(/.*[: ]/).slice(-1)[0]; - if (rev.indexOf('/') === -1) { - return rev; - } else { - return fs.readFileSync(path.join(GIT_ROOT, '.git', rev)).toString().trim(); - } -} - -export const buildConfig = { - entryPoints: ["src/index.ts"], - outfile: "dist/taler-wallet-cli.qtart.mjs", - bundle: true, - minify: false, - target: [ - 'es2020' - ], - format: 'esm', - platform: 'neutral', - mainFields: ["module", "main"], - conditions: ["qtart"], - sourcemap: true, - // quickjs standard library - external: ["std", "os"], - define: { - '__VERSION__': `"${_package.version}"`, - '__GIT_HASH__': `"${GIT_HASH}"`, - }, -} - -esbuild - .build(buildConfig) - .catch((e) => { - console.log(e) - process.exit(1) - }); diff --git a/packages/taler-wallet-cli/package.json b/packages/taler-wallet-cli/package.json index 351fe5bda..cfeba2f81 100644 --- a/packages/taler-wallet-cli/package.json +++ b/packages/taler-wallet-cli/package.json @@ -11,14 +11,14 @@ }, "author": "Florian Dold", "license": "GPL-3.0", - "main": "dist/taler-wallet-cli.mjs", "bin": { "taler-wallet-cli": "./bin/taler-wallet-cli.mjs" }, "type": "module", "scripts": { - "prepare": "tsc && rollup -c", - "compile": "tsc && rollup -c", + "prepare": "true", + "compile": "./build-node.mjs", + "test": "tsc", "clean": "rimraf lib dist tsconfig.tsbuildinfo", "pretty": "prettier --write src" }, @@ -31,16 +31,9 @@ "src/" ], "devDependencies": { - "@rollup/plugin-commonjs": "^22.0.2", - "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-node-resolve": "^13.3.0", - "@rollup/plugin-replace": "^4.0.0", "@types/node": "^18.11.17", "prettier": "^2.5.1", "rimraf": "^3.0.2", - "rollup": "^2.79.0", - "rollup-plugin-sourcemaps": "^0.6.3", - "rollup-plugin-terser": "^7.0.2", "typedoc": "^0.23.16", "typescript": "^4.9.4" }, diff --git a/packages/taler-wallet-cli/src/import-meta-url.js b/packages/taler-wallet-cli/src/import-meta-url.js new file mode 100644 index 000000000..c0e657160 --- /dev/null +++ b/packages/taler-wallet-cli/src/import-meta-url.js @@ -0,0 +1,2 @@ +// Helper to make 'import.meta.url' available in esbuild-bundled code as well. +export const import_meta_url = require("url").pathToFileURL(__filename); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 442388b22..c6487186d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -427,16 +427,9 @@ importers: specifiers: '@gnu-taler/taler-util': workspace:* '@gnu-taler/taler-wallet-core': workspace:* - '@rollup/plugin-commonjs': ^22.0.2 - '@rollup/plugin-json': ^4.1.0 - '@rollup/plugin-node-resolve': ^13.3.0 - '@rollup/plugin-replace': ^4.0.0 '@types/node': ^18.11.17 prettier: ^2.5.1 rimraf: ^3.0.2 - rollup: ^2.79.0 - rollup-plugin-sourcemaps: ^0.6.3 - rollup-plugin-terser: ^7.0.2 tslib: ^2.4.0 typedoc: ^0.23.16 typescript: ^4.9.4 @@ -445,16 +438,9 @@ importers: '@gnu-taler/taler-wallet-core': link:../taler-wallet-core tslib: 2.4.0 devDependencies: - '@rollup/plugin-commonjs': 22.0.2_rollup@2.79.1 - '@rollup/plugin-json': 4.1.0_rollup@2.79.1 - '@rollup/plugin-node-resolve': 13.3.0_rollup@2.79.1 - '@rollup/plugin-replace': 4.0.0_rollup@2.79.1 '@types/node': 18.11.17 prettier: 2.7.1 rimraf: 3.0.2 - rollup: 2.79.1 - rollup-plugin-sourcemaps: 0.6.3_bipou45jdaxtftg6fcql4vnhdm - rollup-plugin-terser: 7.0.2_rollup@2.79.1 typedoc: 0.23.18_typescript@4.9.4 typescript: 4.9.4 @@ -3770,22 +3756,6 @@ packages: rollup: 2.79.1 dev: true - /@rollup/plugin-commonjs/22.0.2_rollup@2.79.1: - resolution: {integrity: sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==} - engines: {node: '>= 12.0.0'} - peerDependencies: - rollup: ^2.68.0 - dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.79.1 - commondir: 1.0.1 - estree-walker: 2.0.2 - glob: 7.2.3 - is-reference: 1.2.1 - magic-string: 0.25.9 - resolve: 1.22.1 - rollup: 2.79.1 - dev: true - /@rollup/plugin-html/0.2.4_rollup@2.79.1: resolution: {integrity: sha512-x0qpNXxbmGa9Jnl4OX89AORPe2T/a4DqNK69BGRnEdaPKq6MdiUXSTam/eCkF5DxkQGcRcPq0L4vzr/E3q4mVA==} engines: {node: '>= 8.0.0'} @@ -3830,21 +3800,6 @@ packages: rollup: 2.79.1 dev: true - /@rollup/plugin-node-resolve/13.3.0_rollup@2.79.1: - resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^2.42.0 - dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.79.1 - '@types/resolve': 1.17.1 - deepmerge: 4.2.2 - is-builtin-module: 3.2.0 - is-module: 1.0.0 - resolve: 1.22.1 - rollup: 2.79.1 - dev: true - /@rollup/plugin-replace/2.4.2_rollup@2.79.1: resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} peerDependencies: @@ -3865,16 +3820,6 @@ packages: rollup: 2.79.1 dev: true - /@rollup/plugin-replace/4.0.0_rollup@2.79.1: - resolution: {integrity: sha512-+rumQFiaNac9y64OHtkHGmdjm7us9bo1PlbgQfdihQtuNxzjpaB064HbRnewUOggLQxVCCyINfStkgmBeQpv1g==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.79.1 - magic-string: 0.25.9 - rollup: 2.79.1 - dev: true - /@rollup/plugin-typescript/11.0.0_ds5km5eydjug3un6mvhihxeysu: resolution: {integrity: sha512-goPyCWBiimk1iJgSTgsehFD5OOFHiAknrRJjqFCudcW8JtWiBlK284Xnn4flqMqg6YAjVG/EE+3aVzrL5qNSzQ==} engines: {node: '>=14.0.0'} @@ -9718,13 +9663,6 @@ packages: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true - /is-builtin-module/3.2.0: - resolution: {integrity: sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==} - engines: {node: '>=6'} - dependencies: - builtin-modules: 3.3.0 - dev: true - /is-callable/1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -13294,22 +13232,6 @@ packages: rollup: 2.79.1 dev: true - /rollup-plugin-sourcemaps/0.6.3_bipou45jdaxtftg6fcql4vnhdm: - resolution: {integrity: sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==} - engines: {node: '>=10.0.0'} - peerDependencies: - '@types/node': '>=10.0.0' - rollup: '>=0.31.2' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.79.1 - '@types/node': 18.11.17 - rollup: 2.79.1 - source-map-resolve: 0.6.0 - dev: true - /rollup-plugin-terser/7.0.2_rollup@2.79.1: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser @@ -13831,14 +13753,6 @@ packages: urix: 0.1.0 dev: true - /source-map-resolve/0.6.0: - resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} - deprecated: See https://github.com/lydell/source-map-resolve#deprecated - dependencies: - atob: 2.1.2 - decode-uri-component: 0.2.0 - dev: true - /source-map-support/0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: -- cgit v1.2.3