From 4ad95a717c344d90ba31aa7f2ab3a92a43400f76 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Wed, 23 Jul 2025 08:20:31 -0700 Subject: [PATCH] Consolidate browser and node build scripts. --- esbuild-common.mjs | 21 --------------------- esbuild-dev.mjs | 9 --------- esbuild-node.mjs | 9 --------- esbuild-prod.mjs | 32 +++++++------------------------- esbuild.mjs | 42 ++++++++++++++++++++++++++++++++++++++++++ package.json | 11 +++++------ 6 files changed, 54 insertions(+), 70 deletions(-) delete mode 100644 esbuild-common.mjs delete mode 100644 esbuild-dev.mjs delete mode 100644 esbuild-node.mjs create mode 100644 esbuild.mjs diff --git a/esbuild-common.mjs b/esbuild-common.mjs deleted file mode 100644 index 8e786eb..0000000 --- a/esbuild-common.mjs +++ /dev/null @@ -1,21 +0,0 @@ -//! SPDX-FileCopyrightText: 2025 Chris Duncan -//! SPDX-License-Identifier: GPL-3.0-or-later - -/** -* @type {import('esbuild').BuildOptions} -*/ -export const options = { - bundle: true, - platform: 'browser', - entryPoints: [ - { in: './src/main.ts', out: 'main.dev' }, - { in: './src/types.d.ts', out: 'types.d' } - ], - loader: { - '.d.ts': 'copy' - }, - format: 'esm', - legalComments: 'inline', - outdir: 'dist', - target: 'esnext' -} diff --git a/esbuild-dev.mjs b/esbuild-dev.mjs deleted file mode 100644 index 2a4f1d1..0000000 --- a/esbuild-dev.mjs +++ /dev/null @@ -1,9 +0,0 @@ -//! SPDX-FileCopyrightText: 2025 Chris Duncan -//! SPDX-License-Identifier: GPL-3.0-or-later - -import { build } from 'esbuild' -import { options } from './esbuild-common.mjs' - -options.dropLabels = ['NODE'] -options.inject = ['./buffer.mjs'] -await build(options) diff --git a/esbuild-node.mjs b/esbuild-node.mjs deleted file mode 100644 index 21e8d81..0000000 --- a/esbuild-node.mjs +++ /dev/null @@ -1,9 +0,0 @@ -//! SPDX-FileCopyrightText: 2025 Chris Duncan -//! SPDX-License-Identifier: GPL-3.0-or-later - -import { build } from 'esbuild' -import { options } from './esbuild-common.mjs' - -options.dropLabels = ['BROWSER'] -options.external = ['node:worker_threads'] -await build(options) diff --git a/esbuild-prod.mjs b/esbuild-prod.mjs index 48c5654..50ff359 100644 --- a/esbuild-prod.mjs +++ b/esbuild-prod.mjs @@ -2,32 +2,14 @@ //! SPDX-License-Identifier: GPL-3.0-or-later import { build } from 'esbuild' -import { options } from './esbuild-common.mjs' +import { browserOptions, nodeOptions } from './esbuild.mjs' -// Shared properties -options.drop = ['console', 'debugger'] -options.minifySyntax = true -options.minifyWhitespace = true - -// Node build -const nodeOptions = { - ...options, - entryPoints: [ - { in: './src/main.ts', out: 'nodejs.min' } - ], - dropLabels: ['BROWSER'], - external: ['node:worker_threads'] -} -await build(nodeOptions) +browserOptions.drop = nodeOptions.drop = ['console', 'debugger'] +browserOptions.minifySyntax = nodeOptions.minifySyntax = true +browserOptions.minifyWhitespace = nodeOptions.minifyWhitespace = true // Browser build -const browserOptions = { - ...options, - entryPoints: [ - { in: './src/main.ts', out: 'browser.min' }, - { in: './src/types.d.ts', out: 'types.d' } - ], - dropLabels: ['NODE'], - inject: ['./buffer.mjs'] -} await build(browserOptions) + +// Node build +await build(nodeOptions) diff --git a/esbuild.mjs b/esbuild.mjs new file mode 100644 index 0000000..42c4a76 --- /dev/null +++ b/esbuild.mjs @@ -0,0 +1,42 @@ +//! SPDX-FileCopyrightText: 2025 Chris Duncan +//! SPDX-License-Identifier: GPL-3.0-or-later + +import { build } from 'esbuild' + +/** +* @type {import('esbuild').BuildOptions} +*/ +const sharedOptions = { + bundle: true, + platform: 'browser', + loader: { + '.d.ts': 'copy' + }, + format: 'esm', + legalComments: 'inline', + outdir: 'dist', + target: 'esnext' +} + +// Browser build +export const browserOptions = { + ...sharedOptions, + entryPoints: [ + { in: './src/main.ts', out: 'browser.min' }, + { in: './src/types.d.ts', out: 'types.d' } + ], + dropLabels: ['NODE'], + inject: ['./buffer.mjs'] +} +await build(browserOptions) + +// Node build +export const nodeOptions = { + ...sharedOptions, + entryPoints: [ + { in: './src/main.ts', out: 'nodejs.min' } + ], + dropLabels: ['BROWSER'], + external: ['node:worker_threads'] +} +await build(nodeOptions) diff --git a/package.json b/package.json index 1284909..11f8bd2 100644 --- a/package.json +++ b/package.json @@ -43,15 +43,14 @@ }, "scripts": { "clean": "rm -rf {dist,types} && tsc", - "build": "npm run clean && node esbuild-dev.mjs", - "build:node": "npm run clean && node esbuild-node.mjs", + "build": "npm run clean && node esbuild.mjs", "build:prod": "npm run clean && node esbuild-prod.mjs", "prepublishOnly": "npm run test:prod", - "test": "npm run build", - "test:node": "npm run build:node && node --test --test-force-exit --no-experimental-strip-types --env-file .env", - "test:prod": "npm run build:prod && node --test --test-force-exit --no-experimental-strip-types --env-file .env", + "test": "npm run build && npm run test:node", "test:coverage": "npm run test:node -- --experimental-test-coverage", - "test:coverage:report": "npm run test:coverage -- --test-reporter=lcov --test-reporter-destination=coverage.info && genhtml coverage.info --flat --dark-mode --keep-going --output-directory test/coverage && rm coverage.info && xdg-open ./test/coverage/libnemo/index.html" + "test:coverage:report": "npm run test:coverage -- --test-reporter=lcov --test-reporter-destination=coverage.info && genhtml ./coverage.info --flat --dark-mode --keep-going --output-directory ./coverage/ && rm ./coverage.info && xdg-open ./coverage/libnemo/index.html", + "test:node": "node --test --test-force-exit --no-experimental-strip-types --env-file .env", + "test:prod": "npm run build:prod && npm run test:node" }, "imports": { "#src/*": "./src/*", -- 2.47.3