Skip to content

Commit ad4357f

Browse files
committed
refactor(build): use shared esbuild plugin for Unicode transforms
- Create shared esbuild-plugin-unicode-transform in build-infra package - Use plugin in bootstrap (npm and smol) and CLI builds - Remove unused babel.config.js from CLI package - Remove inline Unicode transform from smol-transform plugin Reduces code duplication and centralizes Unicode property escape transformations for --with-intl=none compatibility.
1 parent 490c67d commit ad4357f

File tree

7 files changed

+58
-45
lines changed

7 files changed

+58
-45
lines changed

packages/bootstrap/.config/esbuild-plugin-smol-transform.mjs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
* for smol builds.
66
*/
77

8-
import { transformUnicodePropertyEscapes } from '@socketsecurity/build-infra/lib/unicode-property-escape-transform'
9-
108
/**
119
* Create smol transformation plugin.
1210
* @returns {import('esbuild').Plugin}
@@ -119,10 +117,6 @@ export function smolTransformPlugin() {
119117
}
120118
}
121119

122-
// Transform Unicode property escapes for --with-intl=none compatibility.
123-
// This is CRITICAL for smol builds which disable ICU to save 6-8MB.
124-
content = transformUnicodePropertyEscapes(content)
125-
126120
// Update the output content.
127121
output.contents = Buffer.from(content, 'utf8')
128122
}

packages/bootstrap/.config/esbuild.npm.config.mjs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import { fileURLToPath } from 'node:url'
88

99
import { build } from 'esbuild'
1010

11+
import { unicodeTransformPlugin } from '@socketsecurity/build-infra/lib/esbuild-plugin-unicode-transform'
12+
1113
import nodeVersionConfig from '../node-version.json' with { type: 'json' }
1214

1315
const __dirname = path.dirname(fileURLToPath(import.meta.url))
@@ -28,8 +30,10 @@ const config = {
2830
minify: true,
2931
outfile: path.join(rootPath, 'dist', 'bootstrap-npm.js'),
3032
platform: 'node',
33+
plugins: [unicodeTransformPlugin()],
3134
target: 'node18',
3235
treeShaking: true,
36+
write: false, // Plugin needs to transform output.
3337
}
3438

3539
// Run build if invoked directly.

packages/bootstrap/.config/esbuild.smol.config.mjs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import { fileURLToPath } from 'node:url'
88

99
import { build } from 'esbuild'
1010

11+
import { unicodeTransformPlugin } from '@socketsecurity/build-infra/lib/esbuild-plugin-unicode-transform'
12+
1113
import nodeVersionConfig from '../node-version.json' with { type: 'json' }
1214

1315
import { smolTransformPlugin } from './esbuild-plugin-smol-transform.mjs'
@@ -30,7 +32,7 @@ const config = {
3032
minify: true,
3133
outfile: path.join(rootPath, 'dist', 'bootstrap-smol.js'),
3234
platform: 'node',
33-
plugins: [smolTransformPlugin()],
35+
plugins: [unicodeTransformPlugin(), smolTransformPlugin()],
3436
target: 'node24',
3537
treeShaking: true,
3638
write: false, // Plugin needs to transform output.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* @fileoverview Shared esbuild plugin for Unicode property escape transformations.
3+
*
4+
* This plugin applies Unicode property escape transformations to esbuild output
5+
* for --with-intl=none compatibility. Used by both CLI and bootstrap builds.
6+
*
7+
* @example
8+
* import { unicodeTransformPlugin } from '@socketsecurity/build-infra/lib/esbuild-plugin-unicode-transform'
9+
*
10+
* export default {
11+
* plugins: [unicodeTransformPlugin()],
12+
* }
13+
*/
14+
15+
import { transformUnicodePropertyEscapes } from './unicode-property-escape-transform.mjs'
16+
17+
/**
18+
* Create esbuild plugin for Unicode property escape transformations.
19+
*
20+
* @returns {import('esbuild').Plugin} esbuild plugin
21+
*/
22+
export function unicodeTransformPlugin() {
23+
return {
24+
name: 'unicode-transform',
25+
setup(build) {
26+
build.onEnd((result) => {
27+
const outputs = result.outputFiles
28+
if (!outputs || outputs.length === 0) {
29+
return
30+
}
31+
32+
for (const output of outputs) {
33+
let content = output.text
34+
35+
// Transform Unicode property escapes for --with-intl=none compatibility.
36+
content = transformUnicodePropertyEscapes(content)
37+
38+
// Update the output content.
39+
output.contents = Buffer.from(content, 'utf8')
40+
}
41+
})
42+
},
43+
}
44+
}

packages/build-infra/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"./lib/checkpoint-manager": "./lib/checkpoint-manager.mjs",
1212
"./lib/cmake-builder": "./lib/cmake-builder.mjs",
1313
"./lib/emscripten-builder": "./lib/emscripten-builder.mjs",
14+
"./lib/esbuild-plugin-unicode-transform": "./lib/esbuild-plugin-unicode-transform.mjs",
1415
"./lib/extraction-cache": "./lib/extraction-cache.mjs",
1516
"./lib/fetch-with-retry": "./lib/fetch-with-retry.mjs",
1617
"./lib/patch-validator": "./lib/patch-validator.mjs",

packages/cli/.config/babel.config.js

Lines changed: 0 additions & 38 deletions
This file was deleted.

packages/cli/.config/esbuild.cli.build.mjs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import { existsSync, readFileSync } from 'node:fs'
1111
import path from 'node:path'
1212
import { fileURLToPath } from 'node:url'
1313

14+
import { unicodeTransformPlugin } from '@socketsecurity/build-infra/lib/esbuild-plugin-unicode-transform'
15+
1416
import { getLocalPackageAliases } from '../scripts/utils/get-local-package-aliases.mjs'
1517

1618
const __dirname = path.dirname(fileURLToPath(import.meta.url))
@@ -133,6 +135,9 @@ const config = {
133135
// Keep names for better stack traces.
134136
keepNames: true,
135137

138+
// Plugin needs to transform output.
139+
write: false,
140+
136141
// Define environment variables and import.meta.
137142
define: {
138143
'process.env.NODE_ENV': '"production"',
@@ -173,6 +178,7 @@ const config = {
173178

174179
// Handle special cases with plugins.
175180
plugins: [
181+
unicodeTransformPlugin(),
176182
{
177183
name: 'resolve-socket-packages',
178184
setup(build) {

0 commit comments

Comments
 (0)