From 5ca187cf78e5d0dfaef575b742a1f6c529a9e5d7 Mon Sep 17 00:00:00 2001 From: grbd Date: Wed, 14 Jan 2026 18:41:32 +0000 Subject: [PATCH 1/2] Added esbuild task for building minified version --- .gitignore | 1 + npm-scripts.js | 121 ++++++++++++++++++++++++++++++++++--------------- package.json | 2 + 3 files changed, 88 insertions(+), 36 deletions(-) diff --git a/.gitignore b/.gitignore index 2ccbe4656..b0a5c349c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /node_modules/ +/dist/ diff --git a/npm-scripts.js b/npm-scripts.js index 7414f8892..7fb1eb856 100644 --- a/npm-scripts.js +++ b/npm-scripts.js @@ -3,50 +3,59 @@ const path = require('path'); const process = require('process'); const { execSync } = require('child_process'); const { version } = require('./package.json'); +const pkg = require('./package.json'); +const { resolve } = require("path"); +const { build } = require("esbuild"); +const { readFile, writeFile } = require("fs/promises"); const task = process.argv.slice(2).join(' '); const ESLINT_PATHS = [ 'src', 'test' ].join(' '); +const rootDir = "./"; +const outDir = "./dist"; // 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; - } - - default: { - throw new TypeError(`unknown task "${task}"`); +async function main() { + switch (task) + { + case 'grammar': { + grammar(); + break; + } + + case 'lint': { + lint(); + break; + } + + case 'test': { + test(); + break; + } + + case 'build': { + await buildMin(rootDir, outDir); + 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; + } + + default: { + throw new TypeError(`unknown task "${task}"`); + } } } @@ -93,6 +102,41 @@ function grammar() logInfo('grammar done'); } + +// Build a Minified version of JsSIP into /dist/ for publishing +async function buildMin(rootDir, outDir) { + const entry = resolve(rootDir, "src/JsSIP.js"); + const outfile = resolve(outDir, "jssip.min.js"); + const banner = `/*! + * JsSIP ${pkg.version} + * ${pkg.description} + * Copyright: 2012-${new Date().getFullYear()} ${pkg.contributors.join(' ')} + * Homepage: ${pkg.homepage} + * License: ${pkg.license} + */`; + + await build({ + entryPoints: [entry], + outfile, + bundle: true, + minify: true, + 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 a banner + banner: { + js: banner, + }, + }); +} + function executeCmd(command) { // eslint-disable-next-line no-console @@ -114,3 +158,8 @@ function logInfo(...args) // eslint-disable-next-line no-console console.log(`npm-scripts.mjs \x1b[36m[INFO] [${task}]\x1b[0m`, ...args); } + +main().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/package.json b/package.json index e7c6c1472..798e9ca71 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" } } From e4e0bef4cc7f1a068766a137b6415868c91385d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Luis=20Mill=C3=A1n?= Date: Fri, 16 Jan 2026 17:55:20 +0100 Subject: [PATCH 2/2] Consolidate code. Replaces #950 --- npm-scripts.js | 60 +++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/npm-scripts.js b/npm-scripts.js index 7fb1eb856..0ff5de2f6 100644 --- a/npm-scripts.js +++ b/npm-scripts.js @@ -1,23 +1,20 @@ +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 { resolve } = require("path"); -const { build } = require("esbuild"); -const { readFile, writeFile } = require("fs/promises"); const task = process.argv.slice(2).join(' '); const ESLINT_PATHS = [ 'src', 'test' ].join(' '); -const rootDir = "./"; -const outDir = "./dist"; // eslint-disable-next-line no-console console.log(`npm-scripts.js [INFO] running task "${task}"`); -async function main() { +void run(); + +async function run() { switch (task) { case 'grammar': { @@ -36,15 +33,17 @@ async function main() { } case 'build': { - await buildMin(rootDir, outDir); + await build(true /* minify */); + await build(false /* minify */); + break; } case 'release': { lint(); test(); - executeCmd(`git commit -am '${version}'`); - executeCmd(`git tag -a ${version} -m '${version}'`); + 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'); @@ -102,35 +101,35 @@ function grammar() logInfo('grammar done'); } - -// Build a Minified version of JsSIP into /dist/ for publishing -async function buildMin(rootDir, outDir) { - const entry = resolve(rootDir, "src/JsSIP.js"); - const outfile = resolve(outDir, "jssip.min.js"); - const banner = `/*! - * JsSIP ${pkg.version} - * ${pkg.description} - * Copyright: 2012-${new Date().getFullYear()} ${pkg.contributors.join(' ')} - * Homepage: ${pkg.homepage} - * License: ${pkg.license} - */`; - - await build({ +// 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: true, + minify, sourcemap: false, - // https://esbuild.github.io/api/#global-name + // https://esbuild.github.io/api/#global-name. format: "iife", globalName: "JsSIP", platform: "browser", target: ["es2015"], - // Make the generated output a single line + // Make the generated output a single line. supported: { "template-literal": false, }, - // Add a banner + // Add banner. banner: { js: banner, }, @@ -158,8 +157,3 @@ function logInfo(...args) // eslint-disable-next-line no-console console.log(`npm-scripts.mjs \x1b[36m[INFO] [${task}]\x1b[0m`, ...args); } - -main().catch((err) => { - console.error(err); - process.exit(1); -});