Commit 1d6fd13 for jssip.net
commit 1d6fd135dbd48152c8269a4d1e069c045a7d43c0
Author: José Luis Millán <jmillan@aliax.net>
Date: Mon Jan 19 12:29:14 2026 +0100
Esbuild (#951)
Added esbuild task for building into a single file
---------
Co-authored-by: grbd <hecatrons.workshop@gmail.com>
diff --git a/.gitignore b/.gitignore
index 2ccbe46..b0a5c34 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
/node_modules/
+/dist/
diff --git a/npm-scripts.js b/npm-scripts.js
index 7414f88..0ff5de2 100644
--- a/npm-scripts.js
+++ b/npm-scripts.js
@@ -1,8 +1,9 @@
+const esbuild = require("esbuild");
const fs = require('fs');
const path = require('path');
const process = require('process');
const { execSync } = require('child_process');
-const { version } = require('./package.json');
+const pkg = require('./package.json');
const task = process.argv.slice(2).join(' ');
@@ -11,42 +12,49 @@ const ESLINT_PATHS = [ 'src', 'test' ].join(' ');
// eslint-disable-next-line no-console
console.log(`npm-scripts.js [INFO] running task "${task}"`);
-switch (task)
-{
- case 'grammar': {
- grammar();
-
- break;
- }
-
- case 'lint': {
- lint();
-
- break;
- }
-
- case 'test': {
- test();
-
- break;
- }
-
- case 'release': {
- lint();
- test();
- executeCmd(`git commit -am '${version}'`);
- executeCmd(`git tag -a ${version} -m '${version}'`);
- executeCmd('git push origin master && git push origin --tags');
- executeCmd('npm publish');
-
- // eslint-disable-next-line no-console
- console.log('update tryit-jssip and JsSIP website');
-
- break;
- }
+void run();
- default: {
- throw new TypeError(`unknown task "${task}"`);
+async function run() {
+ switch (task)
+ {
+ case 'grammar': {
+ grammar();
+ break;
+ }
+
+ case 'lint': {
+ lint();
+ break;
+ }
+
+ case 'test': {
+ test();
+ break;
+ }
+
+ case 'build': {
+ await build(true /* minify */);
+ await build(false /* minify */);
+
+ break;
+ }
+
+ case 'release': {
+ lint();
+ test();
+ executeCmd(`git commit -am '${pkg.version}'`);
+ executeCmd(`git tag -a ${pkg.version} -m '${pkg.version}'`);
+ executeCmd('git push origin master && git push origin --tags');
+ executeCmd('npm publish');
+
+ // eslint-disable-next-line no-console
+ console.log('update tryit-jssip and JsSIP website');
+ break;
+ }
+
+ default: {
+ throw new TypeError(`unknown task "${task}"`);
+ }
}
}
@@ -93,6 +101,41 @@ function grammar()
logInfo('grammar done');
}
+// Build sources into a file for publishing.
+async function build(minify = true) {
+ const entry = path.resolve("src/JsSIP.js");
+ const outfile = path.resolve("./dist", `jssip${minify ? '.min' : ''}.js`);
+ const banner = `
+ /*
+ * JsSIP ${pkg.version}
+ * ${pkg.description}
+ * Copyright: 2012-${new Date().getFullYear()} ${pkg.contributors.join(' ')}
+ * Homepage: ${pkg.homepage}
+ * License: ${pkg.license}
+ */`;
+
+ await esbuild.build({
+ entryPoints: [entry],
+ outfile,
+ bundle: true,
+ minify,
+ sourcemap: false,
+ // https://esbuild.github.io/api/#global-name.
+ format: "iife",
+ globalName: "JsSIP",
+ platform: "browser",
+ target: ["es2015"],
+ // Make the generated output a single line.
+ supported: {
+ "template-literal": false,
+ },
+ // Add banner.
+ banner: {
+ js: banner,
+ },
+ });
+}
+
function executeCmd(command)
{
// eslint-disable-next-line no-console
diff --git a/package.json b/package.json
index e7c6c14..798e9ca 100644
--- a/package.json
+++ b/package.json
@@ -36,6 +36,7 @@
"@eslint/js": "^9.39.2",
"@types/debug": "^4.1.12",
"@types/events": "^3.0.3",
+ "esbuild": "^0.27.2",
"eslint": "^9.39.1",
"eslint-plugin-jest": "^29.12.1",
"globals": "^17.0.0",
@@ -45,6 +46,7 @@
"scripts": {
"lint": "node npm-scripts.js lint",
"test": "node npm-scripts.js test",
+ "build": "node npm-scripts.js build",
"release": "node npm-scripts.js release"
}
}