Commit 7d6e8c41e5a for woocommerce
commit 7d6e8c41e5aa9b4663c29580b59e089ab9f8010a
Author: Christopher Allford <6451942+ObliviousHarmony@users.noreply.github.com>
Date: Fri May 29 00:31:09 2026 -0700
Replace `tsc` With `esbuild` (#65210)
* Remove Wireit From `packages/js/*`
Strips Wireit orchestration from every package under `packages/js/*`,
inlining the underlying `tsc` and `webpack` commands directly into each
`build:project:*` and `watch:build:project:*` script. With type generation
already moved to a separate workflow, the JS emit is fast enough that
Wireit's cache management no longer pays for itself (especially in CI).
This is a no-op in behavior — same outputs, same emit shape. The Wireit
devDependency is removed; the `tools/*` and `plugins/*` Wireit usages
(out of scope) remain untouched, so `.pnpmfile.cjs` is left alone.
* Build @woocommerce/number With esbuild
Pilot for the package-wide tsc → esbuild swap. Replaces `tsc` with a
per-package `build.mjs` that transpiles `src/` file-by-file using esbuild,
mirroring the previous output shape: ESM to `build-module/`, CJS to `build/`.
Watch mode uses esbuild's `context().watch()`.
Downstream `@woocommerce/data` tests pass against the esbuild output,
confirming runtime equivalence. The output is semantically identical to
the previous tsc emit but cosmetically different (double quotes, `void 0`,
trailing `export { ... }` block, esbuild's `__toCommonJS` CJS interop
helper). JSDoc comments in `.js` files are stripped by esbuild's TS
transformer — this matches the broader esbuild ecosystem
(@wordpress/dom@4.46.0, @radix-ui/*, @mantine/core, @tanstack/react-query)
and JSDoc remains available to TS consumers via the `.d.ts` files
generated by `lint:lang:types`.
* Fix esbuild Loader Mapping in @woocommerce/number
The previous mapping (`.ts: 'tsx'`) sent every TypeScript file through
esbuild's TSX parser, which interprets generic-arrow syntax like `<T>(x)
=> ...` as an opening JSX element. Plain `.ts` files now use the `ts`
loader; `.tsx` keeps the `tsx` loader. Matches what tsc and the project's
tsconfig do (JSX is only legal in `.tsx`). Surfaced when rolling esbuild
out to @woocommerce/data, which uses generic-arrow selectors.
* Build @woocommerce/admin-layout With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/block-templates With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/components With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/csv-export With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/currency With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/customer-effort-score With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/data With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/date With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/e2e-utils-playwright With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/email-editor With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/experimental With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/experimental-products-app With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/explat With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/expression-evaluation With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/integrate-plugin With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/internal-js-tests With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/navigation With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/notices With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/onboarding With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/product-editor With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/remote-logging With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/sanitize With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Build @woocommerce/tracks With esbuild
Swaps tsc for a per-package build.mjs that transpiles src/ file-by-file using esbuild. Output shape, entry points, and the existing webpack-managed CSS step (where applicable) are all unchanged.
* Changelogs for #64838
One entry per affected packages/js/* package covering the Phase 1 wireit
removal and Phase 2 tsc → esbuild swap. Buildable packages note the
pipeline change; non-buildable packages note only the stray devDep
removal.
* Make `packages/js/*` Source esbuild-Safe
Two issues surfaced when bundling the esbuild-built `packages/js/*` outputs
into the admin webpack bundle:
1. `product-editor`'s `import './block.json'` statements lost their target
files in the esbuild emit. tsc's `resolveJsonModule` copied the .json
files into the output tree alongside the emitted .js; esbuild in
transpile mode (`bundle: false`) leaves the import statements verbatim
and does no side-channel copy. Added a small block.json copy step to
`product-editor/build.mjs`. No other package uses this pattern.
2. Mixed `export { Value, Type }` re-exports from sibling modules went
uncorrected because tsc's whole-program analysis silently erased the
type halves during emit. esbuild has no project-wide view and preserves
re-exports verbatim, leaving downstream bundlers chasing bindings that
don't exist at runtime. Enabled `isolatedModules: true` in the base
tsconfig (matching Gutenberg's approach in `wp-build`) to force tsc to
reject the same patterns esbuild can't handle, then ran
`@typescript-eslint/consistent-type-exports --fix` across the affected
packages to add the `type` keyword. The rule is temporary tooling; it
isn't enabled in the project's shared eslint config — `isolatedModules`
is the durable guard.
Also cleans up `@woocommerce/internal-ts-config`: removes the perma-broken
lint scripts (the package's only source is one generator script; eslint
was being pointed at the vendored `types/**/*.d.ts` tree, which eslint
defaults to ignoring) along with the now-orphaned `.eslintrc.js` and the
`@woocommerce/eslint-plugin` / `eslint` devDependencies.
* Remove Wireit Cache
The theory goes that `esbuild` is fast
enough that Wireit won't help
in CI. Let's test that!
* Re-Add Cache Action
Technically, we still have some Wireit caching in place.
We need this in place until we remove it from the
rest of the monorepo.
* Mark `State` Imports In `@woocommerce/data` As Type-Only
Each per-store `index.ts` imports `State` alongside its default reducer:
`import reducer, { State } from './reducer'`. Under the `isolatedModules`
TS config enabled in 397640a4, babel-loader transpiling these sources
directly (rather than consuming pre-built esbuild output) hits
`@babel/plugin-transform-typescript`'s scope-tracker warning because the
single-file transform cannot tell that `State` is a type re-export, and
emits it as a JS value binding. esbuild's transpile mode happened to
strip it correctly, so the cascade-built artifacts were fine.
Switch the 14 affected imports to `import reducer, { type State }` so
the transform is unambiguous in both build paths.
* Lockfile Update
* Custom Watch Handler
By default, esbuild actually doesn't
provide a great watcher. It doesn't
pick up new, renamed, or
deleted files. This
custom script does
so.
* Emit Types on Pack
* Address #65210 Review Feedback
Bundles the actionable items from kalessil's and CodeRabbit's reviews:
- **Type emission on publish**: add `build:publish:project:types` (running
`tsc --build --emitDeclarationOnly`) to every esbuild-built package so
`prepack` produces `.d.ts` files. Trunk's old `tsc` emit produced these
as a side effect; esbuild does not. Without this, published tarballs
shipped an empty `build-types/`.
- **Pin esbuild and chokidar in `.syncpackrc`**: `esbuild` at `0.24.x` (stable
emitted output per minor) and `chokidar` at `3.6.x`, matching the existing
dev-tooling pin convention. syncpack rewrites the consuming `package.json`
files.
- **Guard watch-mode rebuild paths**: wrap `ctx.rebuild()`, `ctx.dispose()`,
`rm()`, and `context()` calls in a `safe()` helper so a transient disk or
build error logs and continues instead of crashing the watcher.
- **Silence `internal-js-tests` `require()` warnings**: add `src/setup-*.js`
and `src/mocks/**` to the package's `ENTRY_IGNORE`. These files are
CommonJS shims consumed directly by Jest via `jest-preset.js` → `src/*`
and were never meant for ESM emission (tsc didn't emit them either).
- **Restore Storybook compatibility for `@woocommerce/sanitize`**: split
the inline `export { type Foo, value } from '...'` pattern into separate
`export type {...}` and `export {...}` statements. Storybook's
`react-docgen-loader` (Storybook 7.x) doesn't understand the inline
`type` keyword in re-exports and was producing `Module parse failed`
errors when traversing through this entry point.
* Harden `safe()` Watcher Wrapper Against Non-Error Throws
`catch ( error )` can receive `null`, `undefined`, or primitive throws.
Accessing `.message` on `null`/`undefined` raised a `TypeError` that
short-circuited the very safety wrapper meant to keep the watcher alive.
Switching to optional chaining handles all cases — Errors print their
message, non-Errors print their string form.
* Prune Type-Only Empty Stubs and Ignore Inline Test Files
Replaces the regex-based empty-stub detector with byte-for-byte template
matching: reconstruct the canonical empty CJS stub from the filename and
delete only files matching exactly. The previous regex misclassified
__reExport() barrel files (e.g. utils/date/index.js in product-editor)
as stubs and would have silently deleted them.
Also adds `**/*.test.{ts,tsx,js,jsx}` to ENTRY_IGNORE so packages that
keep tests in `src/` rather than `src/**/test/` (e.g.
experimental-products-app) stop shipping compiled test files in their
published tarballs.
* Restore Production Mode for Webpack Bundle Steps
Wireit's `build:project:bundle` block defaulted NODE_ENV to "production"
via its env config; that default was dropped in Phase 1 when wireit was
removed in favor of invoking `webpack` directly. Without it, webpack ran
in development mode and emitted unminified CSS with loader header
comments — block-templates' style.css ballooned from 503 bytes to
~4 KB, and similar regressions hit the other 8 webpack packages.
Restores `NODE_ENV=production` on `build:project:bundle` and pins
`NODE_ENV=development` on the watch variant.
* Stop Pruning Type-Only Empty Stubs
Empty CJS/ESM stubs from type-only sources (e.g. `types.ts` with only
`export type` declarations) aren't dead weight — they satisfy runtime
`export * from './types'` re-export chains that esbuild emits in
`isolatedModules` mode, because it can't tell across files that the
named re-export is type-only.
Pruning them broke webpack's module resolution for consumers of the
workspace-linked `build-module/` and `build/` directories (e.g.
`plugins/woocommerce/client/admin` failed to resolve `./types` from
product-editor at bundle time). Removes the prune step entirely; the
~77 KB of empty stubs survive in the published tarball but
tree-shake out of the consumer bundles where it matters.
diff --git a/.syncpackrc b/.syncpackrc
index f8b8d6f778f..103bfe3cae9 100644
--- a/.syncpackrc
+++ b/.syncpackrc
@@ -645,6 +645,24 @@
],
"pinVersion": "0.14.12"
},
+ {
+ "dependencies": [
+ "esbuild"
+ ],
+ "packages": [
+ "**"
+ ],
+ "pinVersion": "0.24.x"
+ },
+ {
+ "dependencies": [
+ "chokidar"
+ ],
+ "packages": [
+ "**"
+ ],
+ "pinVersion": "3.6.x"
+ },
{
"dependencies": [
"dompurify"
diff --git a/packages/js/admin-layout/build.mjs b/packages/js/admin-layout/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/admin-layout/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/admin-layout/changelog/64838-dev-esbuild-package-builds b/packages/js/admin-layout/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/admin-layout/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/admin-layout/package.json b/packages/js/admin-layout/package.json
index c0118d3accc..6be9fd88a0a 100644
--- a/packages/js/admin-layout/package.json
+++ b/packages/js/admin-layout/package.json
@@ -36,10 +36,11 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:bundle": "wireit",
- "build:project:esm": "wireit",
+ "build:project:bundle": "NODE_ENV=production webpack",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -51,8 +52,8 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:bundle": "wireit",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:bundle": "NODE_ENV=development webpack --watch",
+ "watch:build:project:esm": "node build.mjs --watch"
},
"dependencies": {
"@woocommerce/components": "workspace:*",
@@ -65,8 +66,11 @@
"@woocommerce/internal-style-build": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
"@wordpress/browserslist-config": "next",
+ "chokidar": "3.6.x",
"css-loader": "6.11.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"postcss-loader": "4.3.x",
@@ -77,8 +81,7 @@
"ts-jest": "29.1.x",
"typescript": "5.7.x",
"webpack": "5.97.x",
- "webpack-cli": "5.1.x",
- "wireit": "0.14.12"
+ "webpack-cli": "5.1.x"
},
"peerDependencies": {
"@types/react": "18.3.x",
@@ -92,73 +95,5 @@
"changes": "src/**/*.{js,jsx,ts,tsx}"
}
}
- },
- "wireit": {
- "build:project:bundle": {
- "command": "webpack",
- "clean": "if-file-deleted",
- "env": {
- "NODE_ENV": {
- "external": true,
- "default": "production"
- }
- },
- "files": [
- "webpack.config.js",
- "src/**/*.scss"
- ],
- "output": [
- "build-style"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:bundle": {
- "command": "webpack --watch",
- "service": true
- },
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/components/build",
- "node_modules/@woocommerce/components/build-style",
- "node_modules/@woocommerce/components/build-types",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-style-build/index.js",
- "node_modules/@woocommerce/internal-style-build/webpack-rtl-plugin.js",
- "node_modules/@woocommerce/internal-style-build/style-asset-plugin.js",
- "node_modules/@woocommerce/internal-style-build/abstracts",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/block-templates/build.mjs b/packages/js/block-templates/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/block-templates/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/block-templates/changelog/64838-dev-esbuild-package-builds b/packages/js/block-templates/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/block-templates/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/block-templates/package.json b/packages/js/block-templates/package.json
index 939b32cbb7d..6243b93479c 100644
--- a/packages/js/block-templates/package.json
+++ b/packages/js/block-templates/package.json
@@ -33,10 +33,11 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:bundle": "wireit",
- "build:project:esm": "wireit",
+ "build:project:bundle": "NODE_ENV=production webpack",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -49,8 +50,8 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:bundle": "wireit",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:bundle": "NODE_ENV=development webpack --watch",
+ "watch:build:project:esm": "node build.mjs --watch"
},
"dependencies": {
"@woocommerce/expression-evaluation": "workspace:*",
@@ -75,9 +76,12 @@
"@woocommerce/internal-style-build": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
"@wordpress/browserslist-config": "next",
+ "chokidar": "3.6.x",
"copy-webpack-plugin": "13.0.x",
"css-loader": "6.11.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
@@ -90,8 +94,7 @@
"ts-jest": "29.1.x",
"typescript": "5.7.x",
"webpack": "5.97.x",
- "webpack-cli": "5.1.x",
- "wireit": "0.14.12"
+ "webpack-cli": "5.1.x"
},
"peerDependencies": {
"@types/react": "18.3.x",
@@ -125,75 +128,5 @@
}
]
}
- },
- "wireit": {
- "build:project:bundle": {
- "command": "webpack",
- "clean": "if-file-deleted",
- "env": {
- "NODE_ENV": {
- "external": true,
- "default": "production"
- }
- },
- "files": [
- "webpack.config.js",
- "src/**/*.scss"
- ],
- "output": [
- "build-style"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:bundle": {
- "command": "webpack --watch",
- "service": true
- },
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/expression-evaluation/build",
- "node_modules/@woocommerce/expression-evaluation/build-types",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-style-build/index.js",
- "node_modules/@woocommerce/internal-style-build/webpack-rtl-plugin.js",
- "node_modules/@woocommerce/internal-style-build/style-asset-plugin.js",
- "node_modules/@woocommerce/internal-style-build/abstracts",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/components/build.mjs b/packages/js/components/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/components/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/components/changelog/64838-dev-esbuild-package-builds b/packages/js/components/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/components/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/components/package.json b/packages/js/components/package.json
index 5de7a79aca8..c916779a338 100644
--- a/packages/js/components/package.json
+++ b/packages/js/components/package.json
@@ -37,10 +37,11 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:bundle": "wireit",
- "build:project:esm": "wireit",
+ "build:project:bundle": "NODE_ENV=production webpack",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -53,8 +54,8 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:bundle": "wireit",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:bundle": "NODE_ENV=development webpack --watch",
+ "watch:build:project:esm": "node build.mjs --watch"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -155,8 +156,11 @@
"@woocommerce/internal-ts-config": "workspace:*",
"@wordpress/babel-preset-default": "next",
"@wordpress/browserslist-config": "next",
+ "chokidar": "3.6.x",
"css-loader": "6.11.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
@@ -171,8 +175,7 @@
"typescript": "5.7.x",
"uuid": "^9.0.1",
"webpack": "5.97.x",
- "webpack-cli": "5.1.x",
- "wireit": "0.14.12"
+ "webpack-cli": "5.1.x"
},
"config": {
"ci": {
@@ -199,87 +202,5 @@
}
]
}
- },
- "wireit": {
- "build:project:bundle": {
- "command": "webpack",
- "clean": "if-file-deleted",
- "env": {
- "NODE_ENV": {
- "external": true,
- "default": "production"
- }
- },
- "files": [
- "webpack.config.js",
- "babel.config.js",
- "src/**/*.scss"
- ],
- "output": [
- "build-style"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:bundle": {
- "command": "webpack --watch",
- "service": true
- },
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/csv-export/build",
- "node_modules/@woocommerce/csv-export/build-types",
- "node_modules/@woocommerce/currency/build",
- "node_modules/@woocommerce/currency/build-types",
- "node_modules/@woocommerce/data/build",
- "node_modules/@woocommerce/data/build-types",
- "node_modules/@woocommerce/date/build",
- "node_modules/@woocommerce/date/build-types",
- "node_modules/@woocommerce/navigation/build",
- "node_modules/@woocommerce/navigation/build-types",
- "node_modules/@woocommerce/sanitize/build",
- "node_modules/@woocommerce/sanitize/build-style",
- "node_modules/@woocommerce/sanitize/build-types",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-style-build/index.js",
- "node_modules/@woocommerce/internal-style-build/webpack-rtl-plugin.js",
- "node_modules/@woocommerce/internal-style-build/style-asset-plugin.js",
- "node_modules/@woocommerce/internal-style-build/abstracts",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/components/src/form/index.ts b/packages/js/components/src/form/index.ts
index b17d1cf8f79..35a5e0b26d4 100644
--- a/packages/js/components/src/form/index.ts
+++ b/packages/js/components/src/form/index.ts
@@ -1,6 +1,6 @@
export * from './form';
export * from './form-context';
-export {
+export type {
FormContextType,
FormErrors,
FormRef,
diff --git a/packages/js/components/src/index.ts b/packages/js/components/src/index.ts
index 2b26451d687..ff8f208e25d 100644
--- a/packages/js/components/src/index.ts
+++ b/packages/js/components/src/index.ts
@@ -24,7 +24,10 @@ export { ImageGallery, ImageGalleryItem } from './image-gallery';
export { default as ImageUpload } from './image-upload';
export { Link } from './link';
export { default as List } from './list';
-export { MediaUploader, MediaUploaderErrorCallback } from './media-uploader';
+export {
+ MediaUploader,
+ type MediaUploaderErrorCallback,
+} from './media-uploader';
export { default as MenuItem } from './ellipsis-menu/menu-item';
export { default as MenuTitle } from './ellipsis-menu/menu-title';
export { default as OrderStatus } from './order-status';
@@ -49,7 +52,7 @@ export {
} from './experimental-select-control';
export {
MenuItem as __experimentalSelectControlMenuItem,
- MenuItemProps as __experimentalSelectControlMenuItemProps,
+ type MenuItemProps as __experimentalSelectControlMenuItemProps,
} from './experimental-select-control/menu-item';
export {
Menu as __experimentalSelectControlMenu,
@@ -59,7 +62,7 @@ export { default as ScrollTo } from './scroll-to';
export { Sortable } from './sortable';
export { ListItem } from './list-item';
export { default as Spinner } from './spinner';
-export { default as Stepper, StepperProps } from './stepper';
+export { default as Stepper, type StepperProps } from './stepper';
export { default as SummaryList } from './summary';
export { default as SummaryListPlaceholder } from './summary/placeholder';
export { SummaryNumberPlaceholder } from './summary/placeholder';
@@ -89,12 +92,12 @@ export * from './product-fields';
export {
SlotContextProvider,
useSlotContext,
- SlotContextType,
- SlotContextHelpersType,
+ type SlotContextType,
+ type SlotContextHelpersType,
} from './slot-context';
export {
TreeControl as __experimentalTreeControl,
- Item as TreeItemType,
+ type Item as TreeItemType,
} from './experimental-tree-control';
export { SelectTree as __experimentalSelectTreeControl } from './experimental-select-tree-control';
export { default as TreeSelectControl } from './tree-select-control';
diff --git a/packages/js/components/src/tour-kit/types.ts b/packages/js/components/src/tour-kit/types.ts
index 96faa2761d5..a41cdbd5565 100644
--- a/packages/js/components/src/tour-kit/types.ts
+++ b/packages/js/components/src/tour-kit/types.ts
@@ -53,4 +53,4 @@ export interface WooTourStepRendererProps extends TourStepRendererProps {
steps: WooStep[];
}
-export { CloseHandler } from '@automattic/tour-kit';
+export type { CloseHandler } from '@automattic/tour-kit';
diff --git a/packages/js/create-product-editor-block/changelog/64838-dev-esbuild-package-builds b/packages/js/create-product-editor-block/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..8c5062a7c61
--- /dev/null
+++ b/packages/js/create-product-editor-block/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Removed stray wireit devDependency.
diff --git a/packages/js/create-product-editor-block/package.json b/packages/js/create-product-editor-block/package.json
index 5afe877da93..408e4494bd6 100644
--- a/packages/js/create-product-editor-block/package.json
+++ b/packages/js/create-product-editor-block/package.json
@@ -25,8 +25,5 @@
"homepage": "https://github.com/woocommerce/woocommerce/tree/trunk/packages/js/create-product-editor-block-extensionv#readme",
"publishConfig": {
"access": "public"
- },
- "devDependencies": {
- "wireit": "0.14.12"
}
}
diff --git a/packages/js/create-woo-extension/changelog/64838-dev-esbuild-package-builds b/packages/js/create-woo-extension/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..8c5062a7c61
--- /dev/null
+++ b/packages/js/create-woo-extension/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Removed stray wireit devDependency.
diff --git a/packages/js/create-woo-extension/package.json b/packages/js/create-woo-extension/package.json
index 41f0a62243b..d1f82341027 100644
--- a/packages/js/create-woo-extension/package.json
+++ b/packages/js/create-woo-extension/package.json
@@ -19,8 +19,5 @@
"scripts": {
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger"
},
- "homepage": "https://github.com/woocommerce/woocommerce/tree/trunk/packages/js/create-woo-extension#readme",
- "devDependencies": {
- "wireit": "0.14.12"
- }
+ "homepage": "https://github.com/woocommerce/woocommerce/tree/trunk/packages/js/create-woo-extension#readme"
}
diff --git a/packages/js/csv-export/build.mjs b/packages/js/csv-export/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/csv-export/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/csv-export/changelog/64838-dev-esbuild-package-builds b/packages/js/csv-export/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/csv-export/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/csv-export/package.json b/packages/js/csv-export/package.json
index 32ad20a878d..f7ea174766c 100644
--- a/packages/js/csv-export/package.json
+++ b/packages/js/csv-export/package.json
@@ -32,9 +32,10 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:esm": "wireit",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -47,7 +48,7 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:esm": "node build.mjs --watch"
},
"dependencies": {
"@types/node": "^24.1.0",
@@ -59,14 +60,16 @@
"@woocommerce/eslint-plugin": "workspace:*",
"@woocommerce/internal-js-tests": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
+ "chokidar": "3.6.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
"rimraf": "5.0.5",
"ts-jest": "29.1.x",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
+ "typescript": "5.7.x"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -101,45 +104,5 @@
}
]
}
- },
- "wireit": {
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/currency/build.mjs b/packages/js/currency/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/currency/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/currency/changelog/64838-dev-esbuild-package-builds b/packages/js/currency/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/currency/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/currency/package.json b/packages/js/currency/package.json
index e8458e32e62..03bade432c9 100644
--- a/packages/js/currency/package.json
+++ b/packages/js/currency/package.json
@@ -32,9 +32,10 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:esm": "wireit",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -47,7 +48,7 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:esm": "node build.mjs --watch"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -73,14 +74,16 @@
"@woocommerce/eslint-plugin": "workspace:*",
"@woocommerce/internal-js-tests": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
+ "chokidar": "3.6.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
"rimraf": "5.0.5",
"ts-jest": "29.1.x",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
+ "typescript": "5.7.x"
},
"config": {
"ci": {
@@ -106,47 +109,5 @@
}
]
}
- },
- "wireit": {
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/number/build",
- "node_modules/@woocommerce/number/build-types",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/customer-effort-score/build.mjs b/packages/js/customer-effort-score/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/customer-effort-score/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/customer-effort-score/changelog/64838-dev-esbuild-package-builds b/packages/js/customer-effort-score/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/customer-effort-score/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/customer-effort-score/package.json b/packages/js/customer-effort-score/package.json
index e5eead9414d..f9971f8ba45 100644
--- a/packages/js/customer-effort-score/package.json
+++ b/packages/js/customer-effort-score/package.json
@@ -32,10 +32,11 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:bundle": "wireit",
- "build:project:esm": "wireit",
+ "build:project:bundle": "NODE_ENV=production webpack",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -48,8 +49,8 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:bundle": "wireit",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:bundle": "NODE_ENV=development webpack --watch",
+ "watch:build:project:esm": "node build.mjs --watch"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -73,8 +74,8 @@
},
"devDependencies": {
"@babel/core": "7.25.7",
- "@testing-library/react": "^16.x.x",
"@testing-library/dom": "^10.4.x",
+ "@testing-library/react": "^16.x.x",
"@types/jest": "29.5.x",
"@types/prop-types": "^15.7.11",
"@types/testing-library__jest-dom": "^5.14.9",
@@ -86,8 +87,11 @@
"@woocommerce/navigation": "workspace:*",
"@woocommerce/tracks": "workspace:*",
"@wordpress/browserslist-config": "next",
+ "chokidar": "3.6.x",
"css-loader": "6.11.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
@@ -98,8 +102,7 @@
"ts-jest": "29.1.x",
"typescript": "5.7.x",
"webpack": "5.97.x",
- "webpack-cli": "5.1.x",
- "wireit": "0.14.12"
+ "webpack-cli": "5.1.x"
},
"peerDependencies": {
"@wordpress/data": "^10.0.2",
@@ -130,82 +133,5 @@
}
]
}
- },
- "wireit": {
- "build:project:bundle": {
- "command": "webpack",
- "clean": "if-file-deleted",
- "env": {
- "NODE_ENV": {
- "external": true,
- "default": "production"
- }
- },
- "files": [
- "webpack.config.js",
- "src/**/*.scss"
- ],
- "output": [
- "build-style"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:bundle": {
- "command": "webpack --watch",
- "service": true
- },
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/experimental/build",
- "node_modules/@woocommerce/experimental/build-style",
- "node_modules/@woocommerce/experimental/build-types",
- "node_modules/@woocommerce/data/build",
- "node_modules/@woocommerce/data/build-types",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-style-build/index.js",
- "node_modules/@woocommerce/internal-style-build/webpack-rtl-plugin.js",
- "node_modules/@woocommerce/internal-style-build/style-asset-plugin.js",
- "node_modules/@woocommerce/internal-style-build/abstracts",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types",
- "node_modules/@woocommerce/navigation/build",
- "node_modules/@woocommerce/navigation/build-types",
- "node_modules/@woocommerce/tracks/build",
- "node_modules/@woocommerce/tracks/build-types"
- ]
- }
}
}
diff --git a/packages/js/data/build.mjs b/packages/js/data/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/data/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/data/changelog/64838-dev-esbuild-package-builds b/packages/js/data/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/data/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/data/package.json b/packages/js/data/package.json
index 916040310ad..497845646e1 100644
--- a/packages/js/data/package.json
+++ b/packages/js/data/package.json
@@ -31,9 +31,10 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:esm": "wireit",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"update:php": "XDEBUG_MODE=off composer update --quiet",
@@ -46,7 +47,7 @@
"test:js": "jest --config ./jest.config.json --passWithNoTests",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:esm": "node build.mjs --watch"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -77,8 +78,8 @@
"devDependencies": {
"@babel/core": "7.25.7",
"@babel/runtime": "7.25.7",
- "@testing-library/react": "^16.x.x",
"@testing-library/dom": "^10.4.x",
+ "@testing-library/react": "^16.x.x",
"@types/jest": "29.5.x",
"@types/lodash": "^4.14.202",
"@types/md5": "^2.3.5",
@@ -88,15 +89,17 @@
"@woocommerce/eslint-plugin": "workspace:*",
"@woocommerce/internal-js-tests": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
+ "chokidar": "3.6.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
"redux": "^4.2.1",
"rimraf": "5.0.5",
"ts-jest": "29.1.x",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
+ "typescript": "5.7.x"
},
"peerDependencies": {
"@wordpress/data": "^10.0.2",
@@ -129,51 +132,5 @@
}
]
}
- },
- "wireit": {
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/date/build",
- "node_modules/@woocommerce/date/build-types",
- "node_modules/@woocommerce/navigation/build",
- "node_modules/@woocommerce/navigation/build-types",
- "node_modules/@woocommerce/tracks/build",
- "node_modules/@woocommerce/tracks/build-types",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/data/src/countries/index.ts b/packages/js/data/src/countries/index.ts
index e8c5f32a903..716e178769d 100644
--- a/packages/js/data/src/countries/index.ts
+++ b/packages/js/data/src/countries/index.ts
@@ -10,7 +10,7 @@ import { STORE_NAME } from './constants';
import * as selectors from './selectors';
import * as actions from './actions';
import * as resolvers from './resolvers';
-import reducer, { State } from './reducer';
+import reducer, { type State } from './reducer';
export * from './types';
export type { State };
diff --git a/packages/js/data/src/export/index.ts b/packages/js/data/src/export/index.ts
index e1bf8329e50..c2780d3605a 100644
--- a/packages/js/data/src/export/index.ts
+++ b/packages/js/data/src/export/index.ts
@@ -9,7 +9,7 @@ import { Reducer, AnyAction } from 'redux';
import { STORE_NAME } from './constants';
import * as selectors from './selectors';
import * as actions from './actions';
-import reducer, { State } from './reducer';
+import reducer, { type State } from './reducer';
import { DispatchFromMap, SelectFromMap, WPDataSelectors } from '../types';
import controls from '../controls';
import { PromiseifySelectors } from '../types/promiseify-selectors';
diff --git a/packages/js/data/src/import/index.ts b/packages/js/data/src/import/index.ts
index f93ef728a9c..e45bd5b3262 100644
--- a/packages/js/data/src/import/index.ts
+++ b/packages/js/data/src/import/index.ts
@@ -11,7 +11,7 @@ import { STORE_NAME } from './constants';
import * as selectors from './selectors';
import * as actions from './actions';
import * as resolvers from './resolvers';
-import reducer, { State } from './reducer';
+import reducer, { type State } from './reducer';
export * from './types';
export type { State };
diff --git a/packages/js/data/src/index.ts b/packages/js/data/src/index.ts
index c084b04bd45..c0cc818a869 100644
--- a/packages/js/data/src/index.ts
+++ b/packages/js/data/src/index.ts
@@ -28,11 +28,10 @@ export { EXPERIMENTAL_PRODUCT_CATEGORIES_STORE_NAME } from './product-categories
export { EXPERIMENTAL_PRODUCT_ATTRIBUTE_TERMS_STORE_NAME } from './product-attribute-terms';
export { EXPERIMENTAL_PRODUCT_VARIATIONS_STORE_NAME } from './product-variations';
export { EXPERIMENTAL_TAX_CLASSES_STORE_NAME } from './tax-classes';
-export { PaymentGateway } from './payment-gateways/types';
-export {
+export type { PaymentGateway } from './payment-gateways/types';
+export type {
PaymentsEntity,
PaymentsProvider,
- PaymentsProviderType,
PaymentsProviderState,
PaymentsProviderOnboardingState,
PaymentGatewayProvider,
@@ -47,7 +46,8 @@ export {
RecommendedPaymentMethod,
PluginData,
} from './payment-settings/types';
-export { ShippingMethod } from './shipping-methods/types';
+export { PaymentsProviderType } from './payment-settings/types';
+export type { ShippingMethod } from './shipping-methods/types';
export { EXPERIMENTAL_PRODUCT_FORM_STORE_NAME } from './product-form';
export { WOOPAYMENTS_ONBOARDING_STORE_NAME } from './woopayments-onboarding';
@@ -128,19 +128,19 @@ export {
// Export types
export * from './types';
export * from './countries/types';
-export {
+export type {
ProductForm,
ProductFormField,
ProductFormSection,
} from './product-form/types';
export * from './onboarding/types';
export * from './plugins/types';
-export { PluginSelectors } from './plugins/selectors';
-export { PaymentSelectors } from './payment-gateways/selectors';
-export { OnboardingSelectors } from './onboarding/selectors';
-export { PaymentSettingsSelectors } from './payment-settings/selectors';
-export { WooPaymentsOnboardingSelectors } from './woopayments-onboarding/selectors';
-export { ActionDispatchers as PluginActions } from './plugins/actions';
+export type { PluginSelectors } from './plugins/selectors';
+export type { PaymentSelectors } from './payment-gateways/selectors';
+export type { OnboardingSelectors } from './onboarding/selectors';
+export type { PaymentSettingsSelectors } from './payment-settings/selectors';
+export type { WooPaymentsOnboardingSelectors } from './woopayments-onboarding/selectors';
+export type { ActionDispatchers as PluginActions } from './plugins/actions';
export * from './products/types';
export type {
PartialProductVariation,
@@ -148,28 +148,28 @@ export type {
ProductVariationAttribute,
ProductVariationImage,
} from './product-variations/types';
-export {
+export type {
QueryProductAttribute,
ProductAttribute,
ProductAttributeSelectors,
} from './product-attributes/types';
export * from './product-shipping-classes/types';
-export {
+export type {
ProductAttributeTerm,
ProductAttributeTermsSelectors,
} from './product-attribute-terms/types';
export * from './orders/types';
-export {
+export type {
ProductCategory,
ProductCategoryImage,
ProductCategorySelectors,
} from './product-categories/types';
-export { TaxClass } from './tax-classes/types';
-export { ProductTag, Query } from './product-tags/types';
-export { WCUser } from './user/types';
-export { UserPreferences } from './user/types';
+export type { TaxClass } from './tax-classes/types';
+export type { ProductTag, Query } from './product-tags/types';
+export type { WCUser } from './user/types';
+export type { UserPreferences } from './user/types';
export type { StepContent as WooPaymentsOnboardingStepContent } from './woopayments-onboarding/types';
-export {
+export type {
Setting,
SettingsGroup,
SettingValue,
@@ -318,13 +318,13 @@ export interface WCDataSelector {
}
// Other exports
-export { ActionDispatchers as PluginsStoreActions } from './plugins/actions';
-export { ActionDispatchers as ProductTagsActions } from './product-tags/types';
-export { ActionDispatchers as ProductCategoryActions } from './product-categories/types';
-export { ActionDispatchers as ProductAttributeTermsActions } from './product-attribute-terms/types';
-export { ActionDispatchers as ProductAttributesActions } from './product-attributes/types';
-export { ActionDispatchers as ProductVariationsActions } from './product-variations/types';
-export { ActionDispatchers as ProductsStoreActions } from './products/actions';
-export { ActionDispatchers as ProductShippingClassesActions } from './product-shipping-classes/types';
-export { ActionDispatchers as ShippingZonesActions } from './shipping-zones/types';
-export { ActionDispatchers as TaxClassActions } from './tax-classes/types';
+export type { ActionDispatchers as PluginsStoreActions } from './plugins/actions';
+export type { ActionDispatchers as ProductTagsActions } from './product-tags/types';
+export type { ActionDispatchers as ProductCategoryActions } from './product-categories/types';
+export type { ActionDispatchers as ProductAttributeTermsActions } from './product-attribute-terms/types';
+export type { ActionDispatchers as ProductAttributesActions } from './product-attributes/types';
+export type { ActionDispatchers as ProductVariationsActions } from './product-variations/types';
+export type { ActionDispatchers as ProductsStoreActions } from './products/actions';
+export type { ActionDispatchers as ProductShippingClassesActions } from './product-shipping-classes/types';
+export type { ActionDispatchers as ShippingZonesActions } from './shipping-zones/types';
+export type { ActionDispatchers as TaxClassActions } from './tax-classes/types';
diff --git a/packages/js/data/src/items/index.ts b/packages/js/data/src/items/index.ts
index 49d9d531260..403dcb00d20 100644
--- a/packages/js/data/src/items/index.ts
+++ b/packages/js/data/src/items/index.ts
@@ -9,7 +9,7 @@ import { STORE_NAME } from './constants';
import * as selectors from './selectors';
import * as actions from './actions';
import * as resolvers from './resolvers';
-import reducer, { State } from './reducer';
+import reducer, { type State } from './reducer';
import controls from '../controls';
import { SelectFromMap, WPDataSelectors } from '../types';
import { getItemsType } from './selectors';
diff --git a/packages/js/data/src/navigation/index.ts b/packages/js/data/src/navigation/index.ts
index 2b15043c991..24b05831f48 100644
--- a/packages/js/data/src/navigation/index.ts
+++ b/packages/js/data/src/navigation/index.ts
@@ -11,7 +11,7 @@ import deprecated from '@wordpress/deprecated';
import { STORE_NAME } from './constants';
import * as selectors from './selectors';
import * as actions from './actions';
-import reducer, { State } from './reducer';
+import reducer, { type State } from './reducer';
import * as resolvers from './resolvers';
import initDispatchers, { INTERNAL_CALL } from './dispatchers';
import {
diff --git a/packages/js/data/src/notes/index.ts b/packages/js/data/src/notes/index.ts
index 6312064489f..01eb0307d88 100644
--- a/packages/js/data/src/notes/index.ts
+++ b/packages/js/data/src/notes/index.ts
@@ -12,7 +12,7 @@ import { STORE_NAME } from './constants';
import * as selectors from './selectors';
import * as actions from './actions';
import * as resolvers from './resolvers';
-import reducer, { State } from './reducer';
+import reducer, { type State } from './reducer';
export * from './types';
export type { State };
diff --git a/packages/js/data/src/onboarding/index.ts b/packages/js/data/src/onboarding/index.ts
index 2f4cc7cea5e..1c5dbcd0ca7 100644
--- a/packages/js/data/src/onboarding/index.ts
+++ b/packages/js/data/src/onboarding/index.ts
@@ -11,7 +11,7 @@ import { STORE_NAME } from './constants';
import * as selectors from './selectors';
import * as actions from './actions';
import * as resolvers from './resolvers';
-import reducer, { State } from './reducer';
+import reducer, { type State } from './reducer';
import { SelectFromMap, WPDataSelectors } from '../types';
export * from './types';
export type { State };
diff --git a/packages/js/data/src/options/index.ts b/packages/js/data/src/options/index.ts
index f0a2679b559..7fffcc58924 100644
--- a/packages/js/data/src/options/index.ts
+++ b/packages/js/data/src/options/index.ts
@@ -10,7 +10,7 @@ import { STORE_NAME } from './constants';
import * as selectors from './selectors';
import * as actions from './actions';
import * as resolvers from './resolvers';
-import reducer, { State } from './reducer';
+import reducer, { type State } from './reducer';
import { controls } from './controls';
export * from './types';
export type { State };
diff --git a/packages/js/data/src/orders/index.ts b/packages/js/data/src/orders/index.ts
index 490822bd236..df46e4fe55f 100644
--- a/packages/js/data/src/orders/index.ts
+++ b/packages/js/data/src/orders/index.ts
@@ -11,7 +11,7 @@ import * as selectors from './selectors';
import * as actions from './actions';
import * as resolvers from './resolvers';
import controls from '../controls';
-import reducer, { State } from './reducer';
+import reducer, { type State } from './reducer';
export * from './types';
export type { State };
diff --git a/packages/js/data/src/plugins/index.ts b/packages/js/data/src/plugins/index.ts
index 28f0d762827..cfc4860c51f 100644
--- a/packages/js/data/src/plugins/index.ts
+++ b/packages/js/data/src/plugins/index.ts
@@ -11,7 +11,7 @@ import { STORE_NAME } from './constants';
import * as selectors from './selectors';
import * as actions from './actions';
import * as resolvers from './resolvers';
-import reducer, { State } from './reducer';
+import reducer, { type State } from './reducer';
export * from './types';
export type { State };
diff --git a/packages/js/data/src/product-form/index.ts b/packages/js/data/src/product-form/index.ts
index 168063b96a4..b6edf716cef 100644
--- a/packages/js/data/src/product-form/index.ts
+++ b/packages/js/data/src/product-form/index.ts
@@ -10,7 +10,7 @@ import { STORE_NAME } from './constants';
import * as selectors from './selectors';
import * as actions from './actions';
import * as resolvers from './resolvers';
-import reducer, { State } from './reducer';
+import reducer, { type State } from './reducer';
export * from './types';
export type { State };
diff --git a/packages/js/data/src/reports/index.ts b/packages/js/data/src/reports/index.ts
index 8473b0ca97d..b2fd4db649c 100644
--- a/packages/js/data/src/reports/index.ts
+++ b/packages/js/data/src/reports/index.ts
@@ -12,7 +12,7 @@ import * as selectors from './selectors';
import * as actions from './actions';
import * as resolvers from './resolvers';
import controls from '../controls';
-import reducer, { State } from './reducer';
+import reducer, { type State } from './reducer';
import { SelectFromMap, WPDataSelectors } from '../types';
import { PromiseifySelectors } from '../types/promiseify-selectors';
export * from './types';
diff --git a/packages/js/data/src/reviews/index.ts b/packages/js/data/src/reviews/index.ts
index 22d78f45ddf..3a20054f402 100644
--- a/packages/js/data/src/reviews/index.ts
+++ b/packages/js/data/src/reviews/index.ts
@@ -11,7 +11,7 @@ import * as selectors from './selectors';
import * as actions from './actions';
import * as resolvers from './resolvers';
import controls from '../controls';
-import reducer, { State } from './reducer';
+import reducer, { type State } from './reducer';
export * from './types';
export type { State };
diff --git a/packages/js/data/src/settings/index.ts b/packages/js/data/src/settings/index.ts
index 98394ecc0b4..8e30d7c7637 100644
--- a/packages/js/data/src/settings/index.ts
+++ b/packages/js/data/src/settings/index.ts
@@ -12,7 +12,7 @@ import { STORE_NAME } from './constants';
import * as selectors from './selectors';
import * as actions from './actions';
import * as resolvers from './resolvers';
-import reducer, { State } from './reducer';
+import reducer, { type State } from './reducer';
import { SettingsState } from './types';
export * from './types';
diff --git a/packages/js/date/build.mjs b/packages/js/date/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/date/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/date/changelog/64838-dev-esbuild-package-builds b/packages/js/date/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/date/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/date/package.json b/packages/js/date/package.json
index 7e652973709..095a90761c6 100644
--- a/packages/js/date/package.json
+++ b/packages/js/date/package.json
@@ -46,15 +46,17 @@
"@woocommerce/eslint-plugin": "workspace:*",
"@woocommerce/internal-js-tests": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
+ "chokidar": "3.6.x",
"d3-time-format": "^2.3.0",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
"rimraf": "5.0.5",
"ts-jest": "29.1.x",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
+ "typescript": "5.7.x"
},
"peerDependencies": {
"lodash": "^4.17.0"
@@ -65,9 +67,10 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:esm": "wireit",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -80,7 +83,7 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:esm": "node build.mjs --watch"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -112,45 +115,5 @@
}
]
}
- },
- "wireit": {
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/dependency-extraction-webpack-plugin/changelog/64838-dev-esbuild-package-builds b/packages/js/dependency-extraction-webpack-plugin/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..8c5062a7c61
--- /dev/null
+++ b/packages/js/dependency-extraction-webpack-plugin/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Removed stray wireit devDependency.
diff --git a/packages/js/dependency-extraction-webpack-plugin/package.json b/packages/js/dependency-extraction-webpack-plugin/package.json
index e78a06681ef..4d6ee1017c0 100644
--- a/packages/js/dependency-extraction-webpack-plugin/package.json
+++ b/packages/js/dependency-extraction-webpack-plugin/package.json
@@ -40,8 +40,7 @@
"ts-jest": "29.1.x",
"typescript": "5.7.x",
"webpack": "5.97.x",
- "webpack-cli": "5.1.x",
- "wireit": "0.14.12"
+ "webpack-cli": "5.1.x"
},
"scripts": {
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
diff --git a/packages/js/e2e-utils-playwright/build.mjs b/packages/js/e2e-utils-playwright/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/e2e-utils-playwright/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/e2e-utils-playwright/changelog/64838-dev-esbuild-package-builds b/packages/js/e2e-utils-playwright/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/e2e-utils-playwright/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/e2e-utils-playwright/package.json b/packages/js/e2e-utils-playwright/package.json
index 4ea72802191..3dd6eec4578 100644
--- a/packages/js/e2e-utils-playwright/package.json
+++ b/packages/js/e2e-utils-playwright/package.json
@@ -29,19 +29,20 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:cjs": "wireit",
- "build:project:esm": "wireit",
+ "build:project:cjs": "node build.mjs --cjs",
+ "build:project:esm": "node build.mjs",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "eslint --ext=js,ts,tsx src",
"lint:fix": "eslint --ext=js,ts,tsx src --fix",
"lint:lang:types": "tsc --build --emitDeclarationOnly",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"prepack": "pnpm build",
"test": "jest --passWithNoTests",
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:cjs": "wireit",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:cjs": "node build.mjs --cjs --watch",
+ "watch:build:project:esm": "node build.mjs --watch"
},
"config": {
"ci": {
@@ -73,12 +74,14 @@
"@woocommerce/eslint-plugin": "workspace:*",
"@woocommerce/internal-js-tests": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
+ "chokidar": "3.6.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"ts-jest": "29.1.x",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
+ "typescript": "5.7.x"
},
"dependencies": {
"axios": "^1.6.0",
@@ -86,62 +89,5 @@
},
"publishConfig": {
"access": "public"
- },
- "wireit": {
- "build:project:cjs": {
- "command": "tsc --project tsconfig-cjs.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig-cjs.json",
- "src/**/*.{js,jsx,ts,tsx}"
- ],
- "output": [
- "build"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:cjs": {
- "command": "tsc --project tsconfig-cjs.json --watch --noCheck",
- "service": true
- },
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/email-editor/build.mjs b/packages/js/email-editor/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/email-editor/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/email-editor/changelog/64838-dev-esbuild-package-builds b/packages/js/email-editor/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/email-editor/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/email-editor/package.json b/packages/js/email-editor/package.json
index 092c960d825..47ae6ee58fb 100644
--- a/packages/js/email-editor/package.json
+++ b/packages/js/email-editor/package.json
@@ -37,10 +37,11 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:bundle": "wireit",
- "build:project:esm": "wireit",
+ "build:project:bundle": "NODE_ENV=production webpack",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"format": "prettier --write 'src/**/*.{js,jsx,json,ts,tsx,yml,yaml,scss}'",
@@ -57,8 +58,8 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:bundle": "wireit",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:bundle": "NODE_ENV=development webpack --watch",
+ "watch:build:project:esm": "node build.mjs --watch"
},
"lint-staged": {
"*.{js,jsx,json,ts,tsx,yml,yaml,scss}": "pnpm run format",
@@ -126,7 +127,10 @@
"@wordpress/browserslist-config": "next",
"@wordpress/prettier-config": "2.17.0",
"@wordpress/stylelint-config": "^21.0.0",
+ "chokidar": "3.6.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
@@ -137,8 +141,7 @@
"ts-loader": "9.5.x",
"typescript": "5.7.x",
"webpack": "5.97.x",
- "webpack-cli": "5.1.x",
- "wireit": "0.14.12"
+ "webpack-cli": "5.1.x"
},
"config": {
"ci": {
@@ -165,73 +168,5 @@
}
]
}
- },
- "wireit": {
- "build:project:bundle": {
- "command": "webpack",
- "clean": "if-file-deleted",
- "env": {
- "NODE_ENV": {
- "external": true,
- "default": "production"
- }
- },
- "files": [
- "webpack.config.js",
- "src/**/*.scss"
- ],
- "output": [
- "build-style"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:bundle": {
- "command": "webpack --watch",
- "service": true
- },
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-style-build/index.js",
- "node_modules/@woocommerce/internal-style-build/webpack-rtl-plugin.js",
- "node_modules/@woocommerce/internal-style-build/style-asset-plugin.js",
- "node_modules/@woocommerce/internal-style-build/abstracts",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/email-editor/src/index.ts b/packages/js/email-editor/src/index.ts
index 5120cbe73ab..fb4797e4738 100644
--- a/packages/js/email-editor/src/index.ts
+++ b/packages/js/email-editor/src/index.ts
@@ -29,8 +29,8 @@ import { initialize } from './editor';
export {
storeName,
createStore,
- TemplatePreview,
- EmailBuiltStyles,
+ type TemplatePreview,
+ type EmailBuiltStyles,
} from './store';
/**
diff --git a/packages/js/eslint-plugin/changelog/64838-dev-esbuild-package-builds b/packages/js/eslint-plugin/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..8c5062a7c61
--- /dev/null
+++ b/packages/js/eslint-plugin/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Removed stray wireit devDependency.
diff --git a/packages/js/eslint-plugin/package.json b/packages/js/eslint-plugin/package.json
index 73779f23f25..c146b774564 100644
--- a/packages/js/eslint-plugin/package.json
+++ b/packages/js/eslint-plugin/package.json
@@ -54,8 +54,7 @@
"jest-cli": "29.5.x",
"rimraf": "5.0.5",
"ts-jest": "29.1.x",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
+ "typescript": "5.7.x"
},
"lint-staged": {
"*.(t|j)s?(x)": [
diff --git a/packages/js/experimental-products-app/build.mjs b/packages/js/experimental-products-app/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/experimental-products-app/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/experimental-products-app/changelog/64838-dev-esbuild-package-builds b/packages/js/experimental-products-app/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/experimental-products-app/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/experimental-products-app/package.json b/packages/js/experimental-products-app/package.json
index 9bd47131c3b..f4567c3a3c8 100644
--- a/packages/js/experimental-products-app/package.json
+++ b/packages/js/experimental-products-app/package.json
@@ -78,8 +78,11 @@
"@woocommerce/internal-js-tests": "workspace:*",
"@woocommerce/internal-style-build": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
+ "chokidar": "^3.6.0",
"css-loader": "6.11.x",
+ "esbuild": "^0.24.0",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
@@ -91,16 +94,16 @@
"typescript": "5.7.x",
"webpack": "5.97.x",
"webpack-cli": "5.1.x",
- "webpack-remove-empty-scripts": "1.0.x",
- "wireit": "0.14.12"
+ "webpack-remove-empty-scripts": "1.0.x"
},
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:bundle": "wireit",
- "build:project:esm": "wireit",
+ "build:project:bundle": "NODE_ENV=production webpack",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -113,8 +116,8 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:bundle": "wireit",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:bundle": "NODE_ENV=development webpack --watch",
+ "watch:build:project:esm": "node build.mjs --watch"
},
"peerDependencies": {
"@types/react": "18.3.x",
@@ -146,75 +149,5 @@
}
]
}
- },
- "wireit": {
- "build:project:bundle": {
- "command": "webpack",
- "clean": "if-file-deleted",
- "env": {
- "NODE_ENV": {
- "external": true,
- "default": "production"
- }
- },
- "files": [
- "webpack.config.js",
- "src/**/*.scss"
- ],
- "output": [
- "build-style"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:bundle": {
- "command": "webpack --watch",
- "service": true
- },
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/data/build",
- "node_modules/@woocommerce/data/build-types",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-style-build/index.js",
- "node_modules/@woocommerce/internal-style-build/webpack-rtl-plugin.js",
- "node_modules/@woocommerce/internal-style-build/style-asset-plugin.js",
- "node_modules/@woocommerce/internal-style-build/abstracts",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/experimental/build.mjs b/packages/js/experimental/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/experimental/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/experimental/changelog/64838-dev-esbuild-package-builds b/packages/js/experimental/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/experimental/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/experimental/package.json b/packages/js/experimental/package.json
index c5a35019a49..1ba6b302693 100644
--- a/packages/js/experimental/package.json
+++ b/packages/js/experimental/package.json
@@ -68,8 +68,11 @@
"@woocommerce/internal-style-build": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
"@wordpress/browserslist-config": "next",
+ "chokidar": "3.6.x",
"css-loader": "6.11.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
@@ -80,8 +83,7 @@
"ts-jest": "29.1.x",
"typescript": "5.7.x",
"webpack": "5.97.x",
- "webpack-cli": "5.1.x",
- "wireit": "0.14.12"
+ "webpack-cli": "5.1.x"
},
"peerDependencies": {
"react": "18.3.x",
@@ -90,10 +92,11 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:bundle": "wireit",
- "build:project:esm": "wireit",
+ "build:project:bundle": "NODE_ENV=production webpack",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -106,8 +109,8 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:bundle": "wireit",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:bundle": "NODE_ENV=development webpack --watch",
+ "watch:build:project:esm": "node build.mjs --watch"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -139,79 +142,5 @@
}
]
}
- },
- "wireit": {
- "build:project:bundle": {
- "command": "webpack",
- "clean": "if-file-deleted",
- "env": {
- "NODE_ENV": {
- "external": true,
- "default": "production"
- }
- },
- "files": [
- "webpack.config.js",
- "src/**/*.scss"
- ],
- "output": [
- "build-style"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:bundle": {
- "command": "webpack --watch",
- "service": true
- },
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/components/build",
- "node_modules/@woocommerce/components/build-style",
- "node_modules/@woocommerce/components/build-types",
- "node_modules/@woocommerce/sanitize/build",
- "node_modules/@woocommerce/sanitize/build-style",
- "node_modules/@woocommerce/sanitize/build-types",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-style-build/index.js",
- "node_modules/@woocommerce/internal-style-build/webpack-rtl-plugin.js",
- "node_modules/@woocommerce/internal-style-build/style-asset-plugin.js",
- "node_modules/@woocommerce/internal-style-build/abstracts",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/experimental/src/inbox-note/inbox-note.tsx b/packages/js/experimental/src/inbox-note/inbox-note.tsx
index 49f58aaf738..3fa8d130012 100644
--- a/packages/js/experimental/src/inbox-note/inbox-note.tsx
+++ b/packages/js/experimental/src/inbox-note/inbox-note.tsx
@@ -206,4 +206,4 @@ const InboxNoteCard = ( {
);
};
-export { InboxNoteCard, InboxNote, InboxNoteAction };
+export { InboxNoteCard, type InboxNote, type InboxNoteAction };
diff --git a/packages/js/explat/build.mjs b/packages/js/explat/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/explat/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/explat/changelog/64838-dev-esbuild-package-builds b/packages/js/explat/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/explat/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/explat/package.json b/packages/js/explat/package.json
index 53d0b00a7b7..cf7d73412b2 100644
--- a/packages/js/explat/package.json
+++ b/packages/js/explat/package.json
@@ -32,9 +32,10 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:esm": "wireit",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -47,7 +48,7 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:esm": "node build.mjs --watch"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -73,14 +74,16 @@
"@woocommerce/eslint-plugin": "workspace:*",
"@woocommerce/internal-js-tests": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
+ "chokidar": "3.6.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
"rimraf": "5.0.5",
"ts-jest": "29.1.x",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
+ "typescript": "5.7.x"
},
"publishConfig": {
"access": "public"
@@ -109,45 +112,5 @@
}
]
}
- },
- "wireit": {
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/expression-evaluation/build.mjs b/packages/js/expression-evaluation/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/expression-evaluation/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/expression-evaluation/changelog/64838-dev-esbuild-package-builds b/packages/js/expression-evaluation/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/expression-evaluation/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/expression-evaluation/package.json b/packages/js/expression-evaluation/package.json
index 658f5d428e6..bf9f54c815d 100644
--- a/packages/js/expression-evaluation/package.json
+++ b/packages/js/expression-evaluation/package.json
@@ -40,9 +40,10 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:esm": "wireit",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -54,7 +55,7 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:esm": "node build.mjs --watch"
},
"devDependencies": {
"@babel/core": "7.25.7",
@@ -62,14 +63,16 @@
"@woocommerce/eslint-plugin": "workspace:*",
"@woocommerce/internal-js-tests": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
+ "chokidar": "3.6.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
"rimraf": "5.0.5",
"ts-jest": "29.1.x",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
+ "typescript": "5.7.x"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -84,45 +87,5 @@
"changes": "src/**/*.{js,jsx,ts,tsx}"
}
}
- },
- "wireit": {
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/extend-cart-checkout-block/changelog/64838-dev-esbuild-package-builds b/packages/js/extend-cart-checkout-block/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..8c5062a7c61
--- /dev/null
+++ b/packages/js/extend-cart-checkout-block/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Removed stray wireit devDependency.
diff --git a/packages/js/extend-cart-checkout-block/package.json b/packages/js/extend-cart-checkout-block/package.json
index fb1b2eb94ff..d82cdc93a45 100644
--- a/packages/js/extend-cart-checkout-block/package.json
+++ b/packages/js/extend-cart-checkout-block/package.json
@@ -19,8 +19,5 @@
"scripts": {
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger"
},
- "homepage": "https://github.com/woocommerce/woocommerce/tree/trunk/packages/js/extend-cart-checkout-block#readme",
- "devDependencies": {
- "wireit": "0.14.12"
- }
+ "homepage": "https://github.com/woocommerce/woocommerce/tree/trunk/packages/js/extend-cart-checkout-block#readme"
}
diff --git a/packages/js/integrate-plugin/build.mjs b/packages/js/integrate-plugin/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/integrate-plugin/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/integrate-plugin/changelog/64838-dev-esbuild-package-builds b/packages/js/integrate-plugin/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/integrate-plugin/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/integrate-plugin/package.json b/packages/js/integrate-plugin/package.json
index 6d7c5e90e14..05897d48b3f 100644
--- a/packages/js/integrate-plugin/package.json
+++ b/packages/js/integrate-plugin/package.json
@@ -30,21 +30,22 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:cjs": "wireit",
- "build:project:esm": "wireit",
+ "build:project:cjs": "node build.mjs --cjs",
+ "build:project:esm": "node build.mjs",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
"lint:fix": "pnpm --if-present '/^lint:fix:lang:.*$/'",
"lint:fix:lang:js": "eslint src --fix",
"lint:lang:js": "eslint src",
"lint:lang:types": "tsc --build --emitDeclarationOnly",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"prepack": "pnpm build",
"test:js": "jest --config ./jest.config.json --passWithNoTests",
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:cjs": "wireit",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:cjs": "node build.mjs --cjs --watch",
+ "watch:build:project:esm": "node build.mjs --watch"
},
"dependencies": {
"@wordpress/create-block": "catalog:wp-min",
@@ -69,9 +70,12 @@
"@woocommerce/internal-js-tests": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
"@wordpress/browserslist-config": "next",
+ "chokidar": "3.6.x",
"copy-webpack-plugin": "13.0.x",
"css-loader": "6.11.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
@@ -79,8 +83,7 @@
"ts-jest": "29.1.x",
"typescript": "5.7.x",
"webpack": "5.97.x",
- "webpack-cli": "5.1.x",
- "wireit": "0.14.12"
+ "webpack-cli": "5.1.x"
},
"config": {
"ci": {
@@ -106,64 +109,5 @@
}
]
}
- },
- "wireit": {
- "build:project:cjs": {
- "command": "tsc --project tsconfig-cjs.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig-cjs.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:cjs": {
- "command": "tsc --project tsconfig-cjs.json --watch --noCheck",
- "service": true
- },
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/internal-js-tests/build.mjs b/packages/js/internal-js-tests/build.mjs
new file mode 100644
index 00000000000..302b9874aaf
--- /dev/null
+++ b/packages/js/internal-js-tests/build.mjs
@@ -0,0 +1,114 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+ 'src/setup-*.js',
+ 'src/mocks/**',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/internal-js-tests/changelog/64838-dev-esbuild-package-builds b/packages/js/internal-js-tests/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/internal-js-tests/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/internal-js-tests/package.json b/packages/js/internal-js-tests/package.json
index 4639e861f11..e7d75f9c127 100644
--- a/packages/js/internal-js-tests/package.json
+++ b/packages/js/internal-js-tests/package.json
@@ -27,9 +27,10 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:esm": "wireit",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -41,7 +42,7 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:esm": "node build.mjs --watch"
},
"dependencies": {
"@testing-library/jest-dom": "^6.x.x",
@@ -55,16 +56,18 @@
"@woocommerce/eslint-plugin": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
"babel-jest": "29.5.x",
+ "chokidar": "3.6.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
+ "lib0": "0.2.x",
"resize-observer-polyfill": "1.5.1",
"rimraf": "5.0.5",
"ts-jest": "29.1.x",
- "lib0": "0.2.x",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
+ "typescript": "5.7.x"
},
"peerDependencies": {
"@wordpress/data": "^10.0.2",
@@ -83,41 +86,5 @@
"changes": "src/**/*.{js,jsx,ts,tsx}"
}
}
- },
- "wireit": {
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/internal-style-build/changelog/64838-dev-esbuild-package-builds b/packages/js/internal-style-build/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..8c5062a7c61
--- /dev/null
+++ b/packages/js/internal-style-build/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Removed stray wireit devDependency.
diff --git a/packages/js/internal-style-build/package.json b/packages/js/internal-style-build/package.json
index dd52070d159..998fa29bbd0 100644
--- a/packages/js/internal-style-build/package.json
+++ b/packages/js/internal-style-build/package.json
@@ -60,8 +60,7 @@
"rimraf": "5.0.5",
"ts-jest": "29.1.x",
"typescript": "5.7.x",
- "webpack": "5.97.x",
- "wireit": "0.14.12"
+ "webpack": "5.97.x"
},
"config": {
"ci": {
diff --git a/packages/js/internal-ts-config/.eslintrc.js b/packages/js/internal-ts-config/.eslintrc.js
deleted file mode 100644
index d38babfc189..00000000000
--- a/packages/js/internal-ts-config/.eslintrc.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
- extends: [ 'plugin:@woocommerce/eslint-plugin/recommended' ],
- root: true,
- ignorePatterns: [ 'scripts/' ],
-};
diff --git a/packages/js/internal-ts-config/changelog/64838-dev-esbuild-package-builds b/packages/js/internal-ts-config/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..ce3980e55d8
--- /dev/null
+++ b/packages/js/internal-ts-config/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Inlined the wireit-wrapped types generator command into the build script.
diff --git a/packages/js/internal-ts-config/package.json b/packages/js/internal-ts-config/package.json
index e2568a0ff33..1f1d7bbe673 100644
--- a/packages/js/internal-ts-config/package.json
+++ b/packages/js/internal-ts-config/package.json
@@ -17,54 +17,16 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:types": "wireit",
- "lint": "pnpm --if-present '/^lint:lang:.*$/'",
- "lint:fix": "pnpm --if-present '/^lint:fix:lang:.*$/'",
- "lint:fix:lang:js": "eslint 'types/**/*.d.ts' --fix",
- "lint:lang:js": "eslint 'types/**/*.d.ts'",
+ "build:project:types": "node scripts/generate-types.mjs generate",
"postinstall": "pnpm build:project:types",
"types:update-patch": "node scripts/generate-types.mjs update-patch"
},
"devDependencies": {
"@types/wordpress__block-editor": "14.21.8",
- "@woocommerce/eslint-plugin": "workspace:*",
"@wordpress/core-data": "7.19.6",
"@wordpress/data": "10.19.2",
"@wordpress/editor": "14.19.7",
"@wordpress/notices": "5.19.2",
- "eslint": "^8.55.0",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
- },
- "wireit": {
- "build:project:types": {
- "command": "node scripts/generate-types.mjs generate",
- "files": [
- "scripts/generate-types.mjs",
- "types/@wordpress/block-editor.patch",
- "types/@wordpress/core-data.patch",
- "types/@wordpress/data.patch",
- "types/@wordpress/editor.patch",
- "types/@wordpress/notices.patch"
- ],
- "output": [
- "types/@wordpress/block-editor/",
- "types/@wordpress/core-data/",
- "types/@wordpress/data/",
- "types/@wordpress/editor/",
- "types/@wordpress/notices/"
- ],
- "clean": "if-file-deleted"
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js"
- ]
- }
+ "typescript": "5.7.x"
}
}
diff --git a/packages/js/internal-ts-config/tsconfig.json b/packages/js/internal-ts-config/tsconfig.json
index 25892314c87..93f8b284f2e 100644
--- a/packages/js/internal-ts-config/tsconfig.json
+++ b/packages/js/internal-ts-config/tsconfig.json
@@ -7,6 +7,7 @@
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
+ "isolatedModules": true,
"jsx": "react",
"jsxFactory": "createElement",
"jsxFragmentFactory": "Fragment"
diff --git a/packages/js/navigation/build.mjs b/packages/js/navigation/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/navigation/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/navigation/changelog/64838-dev-esbuild-package-builds b/packages/js/navigation/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/navigation/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/navigation/package.json b/packages/js/navigation/package.json
index 9d10340d5fa..44d6ff8312b 100644
--- a/packages/js/navigation/package.json
+++ b/packages/js/navigation/package.json
@@ -32,9 +32,10 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:esm": "wireit",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -47,7 +48,7 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:esm": "node build.mjs --watch"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -82,14 +83,16 @@
"@woocommerce/eslint-plugin": "workspace:*",
"@woocommerce/internal-js-tests": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
+ "chokidar": "3.6.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
"rimraf": "5.0.5",
"ts-jest": "29.1.x",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
+ "typescript": "5.7.x"
},
"config": {
"ci": {
@@ -115,45 +118,5 @@
}
]
}
- },
- "wireit": {
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/notices/build.mjs b/packages/js/notices/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/notices/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/notices/changelog/64838-dev-esbuild-package-builds b/packages/js/notices/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/notices/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/notices/package.json b/packages/js/notices/package.json
index 1ee36abcf11..1bcd7764e9d 100644
--- a/packages/js/notices/package.json
+++ b/packages/js/notices/package.json
@@ -33,9 +33,10 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:esm": "wireit",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -47,7 +48,7 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:esm": "node build.mjs --watch"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -74,14 +75,16 @@
"@types/lodash": "^4.14.202",
"@woocommerce/eslint-plugin": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
+ "chokidar": "3.6.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"redux": "^4.2.1",
"rimraf": "5.0.5",
"ts-jest": "29.1.x",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
+ "typescript": "5.7.x"
},
"config": {
"ci": {
@@ -90,44 +93,5 @@
"changes": "src/**/*.{js,jsx,ts,tsx}"
}
}
- },
- "wireit": {
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/data/build",
- "node_modules/@woocommerce/data/build-types",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/number/build.mjs b/packages/js/number/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/number/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/number/changelog/64838-dev-esbuild-package-builds b/packages/js/number/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/number/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/number/package.json b/packages/js/number/package.json
index 63587ddb39a..a4a1cb30a47 100644
--- a/packages/js/number/package.json
+++ b/packages/js/number/package.json
@@ -37,9 +37,10 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:esm": "wireit",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -52,7 +53,7 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:esm": "node build.mjs --watch"
},
"devDependencies": {
"@babel/core": "7.25.7",
@@ -62,14 +63,16 @@
"@woocommerce/eslint-plugin": "workspace:*",
"@woocommerce/internal-js-tests": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
+ "chokidar": "3.6.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
"rimraf": "5.0.5",
"ts-jest": "29.1.x",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
+ "typescript": "5.7.x"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -101,45 +104,5 @@
}
]
}
- },
- "wireit": {
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/onboarding/build.mjs b/packages/js/onboarding/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/onboarding/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/onboarding/changelog/64838-dev-esbuild-package-builds b/packages/js/onboarding/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/onboarding/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/onboarding/package.json b/packages/js/onboarding/package.json
index 6c02a7b72b8..b3570ee08f4 100644
--- a/packages/js/onboarding/package.json
+++ b/packages/js/onboarding/package.json
@@ -33,10 +33,11 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:bundle": "wireit",
- "build:project:esm": "wireit",
+ "build:project:bundle": "NODE_ENV=production webpack",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -49,8 +50,8 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:bundle": "wireit",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:bundle": "NODE_ENV=development webpack --watch",
+ "watch:build:project:esm": "node build.mjs --watch"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -83,8 +84,11 @@
"@woocommerce/internal-style-build": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
"@wordpress/browserslist-config": "next",
+ "chokidar": "3.6.x",
"css-loader": "6.11.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
@@ -95,8 +99,7 @@
"ts-jest": "29.1.x",
"typescript": "5.7.x",
"webpack": "5.97.x",
- "webpack-cli": "5.1.x",
- "wireit": "0.14.12"
+ "webpack-cli": "5.1.x"
},
"publishConfig": {
"access": "public"
@@ -125,83 +128,5 @@
}
]
}
- },
- "wireit": {
- "build:project:bundle": {
- "command": "webpack",
- "clean": "if-file-deleted",
- "env": {
- "NODE_ENV": {
- "external": true,
- "default": "production"
- }
- },
- "files": [
- "webpack.config.js",
- "src/**/*.scss"
- ],
- "output": [
- "build-style"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:bundle": {
- "command": "webpack --watch",
- "service": true
- },
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/components/build",
- "node_modules/@woocommerce/components/build-style",
- "node_modules/@woocommerce/components/build-types",
- "node_modules/@woocommerce/experimental/build",
- "node_modules/@woocommerce/experimental/build-style",
- "node_modules/@woocommerce/experimental/build-types",
- "node_modules/@woocommerce/explat/build",
- "node_modules/@woocommerce/explat/build-types",
- "node_modules/@woocommerce/tracks/build",
- "node_modules/@woocommerce/tracks/build-types",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-style-build/index.js",
- "node_modules/@woocommerce/internal-style-build/webpack-rtl-plugin.js",
- "node_modules/@woocommerce/internal-style-build/style-asset-plugin.js",
- "node_modules/@woocommerce/internal-style-build/abstracts",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/onboarding/src/index.ts b/packages/js/onboarding/src/index.ts
index 5663523e469..a9374144134 100644
--- a/packages/js/onboarding/src/index.ts
+++ b/packages/js/onboarding/src/index.ts
@@ -21,7 +21,7 @@ export { default as WCPayLogo } from './images/wcpay-logo';
export { WooPaymentGatewaySetup } from './components/WooPaymentGatewaySetup';
export { WooPaymentGatewayConfigure } from './components/WooPaymentGatewayConfigure';
export {
- TaskReferralRecord,
+ type TaskReferralRecord,
accessTaskReferralStorage,
createStorageUtils,
} from './components/WooOnboardingTaskReferral';
diff --git a/packages/js/product-editor/build.mjs b/packages/js/product-editor/build.mjs
new file mode 100644
index 00000000000..09753307811
--- /dev/null
+++ b/packages/js/product-editor/build.mjs
@@ -0,0 +1,125 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { copyFile, mkdir, rm } from 'node:fs/promises';
+import { dirname, join, relative } from 'node:path';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+const BLOCK_JSON_GLOB = 'src/**/block.json';
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+// block.json files are runtime-imported by src/blocks/**/index.ts. esbuild in
+// transpile mode preserves the `import './block.json'` statements as-is, so
+// the .json files must sit next to the emitted .js for those imports to
+// resolve.
+async function copyBlockJson() {
+ for ( const src of await glob( BLOCK_JSON_GLOB ) ) {
+ const dest = join( outdir, relative( 'src', src ) );
+ await mkdir( dirname( dest ), { recursive: true } );
+ await copyFile( src, dest );
+ }
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ await safe( 'startup block.json copy', copyBlockJson );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ await copyBlockJson();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( [ ENTRY_GLOB, BLOCK_JSON_GLOB ], { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( path.endsWith( '.json' ) ) await safe( 'block.json copy', copyBlockJson );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ await copyBlockJson();
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/product-editor/changelog/64838-dev-esbuild-package-builds b/packages/js/product-editor/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/product-editor/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/product-editor/package.json b/packages/js/product-editor/package.json
index 289791795d4..148d26271cb 100644
--- a/packages/js/product-editor/package.json
+++ b/packages/js/product-editor/package.json
@@ -83,8 +83,8 @@
"devDependencies": {
"@babel/core": "7.25.7",
"@babel/runtime": "7.25.7",
- "@testing-library/jest-dom": "^6.x.x",
"@testing-library/dom": "^10.4.x",
+ "@testing-library/jest-dom": "^6.x.x",
"@testing-library/react": "^16.x.x",
"@testing-library/react-hooks": "8.0.1",
"@testing-library/user-event": "13.5.0",
@@ -101,9 +101,12 @@
"@woocommerce/internal-ts-config": "workspace:*",
"@wordpress/block-editor": "catalog:wp-min",
"@wordpress/browserslist-config": "next",
+ "chokidar": "3.6.x",
"copy-webpack-plugin": "13.0.x",
"css-loader": "6.11.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
@@ -119,29 +122,29 @@
"typescript": "5.7.x",
"webpack": "5.97.x",
"webpack-cli": "5.1.x",
- "webpack-remove-empty-scripts": "1.0.x",
- "wireit": "0.14.12"
+ "webpack-remove-empty-scripts": "1.0.x"
},
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:bundle": "wireit",
- "build:project:cjs": "wireit",
- "build:project:esm": "wireit",
+ "build:project:bundle": "NODE_ENV=production webpack",
+ "build:project:cjs": "node build.mjs --cjs",
+ "build:project:esm": "node build.mjs",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
"lint:fix": "pnpm --if-present '/^lint:fix:lang:.*$/'",
"lint:fix:lang:js": "eslint src --fix",
"lint:lang:js": "eslint src",
"lint:lang:types": "tsc --build --emitDeclarationOnly",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"prepack": "pnpm build",
"test:js": "jest --config ./jest.config.json --passWithNoTests",
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:bundle": "wireit",
- "watch:build:project:cjs": "wireit",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:bundle": "NODE_ENV=development webpack --watch",
+ "watch:build:project:cjs": "node build.mjs --cjs --watch",
+ "watch:build:project:esm": "node build.mjs --watch"
},
"peerDependencies": {
"@types/react": "18.3.x",
@@ -174,124 +177,5 @@
}
]
}
- },
- "wireit": {
- "build:project:bundle": {
- "command": "webpack",
- "clean": "if-file-deleted",
- "env": {
- "NODE_ENV": {
- "external": true,
- "default": "production"
- }
- },
- "files": [
- "webpack.config.js",
- "config/**/*.js",
- "src/**/*.scss",
- "src/**/block.json"
- ],
- "output": [
- "build-style"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:bundle": {
- "command": "webpack --watch",
- "service": true
- },
- "build:project:cjs": {
- "command": "tsc --project tsconfig-cjs.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig-cjs.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:cjs": {
- "command": "tsc --project tsconfig-cjs.json --watch --noCheck",
- "service": true
- },
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/admin-layout/build",
- "node_modules/@woocommerce/admin-layout/build-style",
- "node_modules/@woocommerce/admin-layout/build-types",
- "node_modules/@woocommerce/block-templates/build",
- "node_modules/@woocommerce/block-templates/build-style",
- "node_modules/@woocommerce/block-templates/build-types",
- "node_modules/@woocommerce/components/build",
- "node_modules/@woocommerce/components/build-style",
- "node_modules/@woocommerce/components/build-types",
- "node_modules/@woocommerce/currency/build",
- "node_modules/@woocommerce/currency/build-types",
- "node_modules/@woocommerce/customer-effort-score/build",
- "node_modules/@woocommerce/customer-effort-score/build-style",
- "node_modules/@woocommerce/customer-effort-score/build-types",
- "node_modules/@woocommerce/data/build",
- "node_modules/@woocommerce/data/build-types",
- "node_modules/@woocommerce/experimental/build",
- "node_modules/@woocommerce/experimental/build-style",
- "node_modules/@woocommerce/experimental/build-types",
- "node_modules/@woocommerce/expression-evaluation/build",
- "node_modules/@woocommerce/expression-evaluation/build-types",
- "node_modules/@woocommerce/navigation/build",
- "node_modules/@woocommerce/navigation/build-types",
- "node_modules/@woocommerce/number/build",
- "node_modules/@woocommerce/number/build-types",
- "node_modules/@woocommerce/tracks/build",
- "node_modules/@woocommerce/tracks/build-types",
- "node_modules/@woocommerce/sanitize/build",
- "node_modules/@woocommerce/sanitize/build-style",
- "node_modules/@woocommerce/sanitize/build-types",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-style-build/index.js",
- "node_modules/@woocommerce/internal-style-build/webpack-rtl-plugin.js",
- "node_modules/@woocommerce/internal-style-build/style-asset-plugin.js",
- "node_modules/@woocommerce/internal-style-build/abstracts",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/product-editor/src/components/index.ts b/packages/js/product-editor/src/components/index.ts
index 80b37d9c793..20fcbefa264 100644
--- a/packages/js/product-editor/src/components/index.ts
+++ b/packages/js/product-editor/src/components/index.ts
@@ -13,11 +13,11 @@ export {
export {
Editor as __experimentalEditor,
initBlocks as __experimentalInitBlocks,
- ProductEditorSettings,
+ type ProductEditorSettings,
} from './editor';
export {
BlockIcon as __experimentalBlockIcon,
- BlockIconProps,
+ type BlockIconProps,
} from './block-icon';
export { FeedbackBar as __experimentalProductMVPCESFooter } from './feedback-bar';
export { ProductMVPFeedbackModal as __experimentalProductMVPFeedbackModal } from './product-mvp-feedback-modal';
@@ -38,7 +38,7 @@ export * from './remove-confirmation-modal';
export {
ManageDownloadLimitsModal as __experimentalManageDownloadLimitsModal,
- ManageDownloadLimitsModalProps,
+ type ManageDownloadLimitsModalProps,
} from './manage-download-limits-modal';
export { Checkbox as __experimentalCheckboxControl } from './checkbox-control';
@@ -48,54 +48,54 @@ export * from './modal-editor-welcome-guide';
export {
TextControl as __experimentalTextControl,
- TextControlProps,
+ type TextControlProps,
} from './text-control';
export {
AddProductsModal as __experimentalAddProductsModal,
- AddProductsModalProps,
+ type AddProductsModalProps,
} from './add-products-modal';
export {
BlockFill as __experimentalBlockFill,
BlockSlot as __experimentalBlockSlot,
SectionActions as __experimentalSectionActions,
- BlockFillProps,
- BlockSlotProps,
+ type BlockFillProps,
+ type BlockSlotProps,
} from './block-slot-fill';
export { Label as __experimentalLabel } from './label/label';
export { ButtonWithDropdownMenu as __experimentalButtonWithDropdownMenu } from './button-with-dropdown-menu';
export {
FormattedPrice as __experimentalFormattedPrice,
- FormattedPriceProps,
+ type FormattedPriceProps,
} from './formatted-price';
export {
ProductList as __experimentalProductList,
- ProductListProps,
+ type ProductListProps,
} from './product-list';
export {
ProductSelect as __experimentalProductSelect,
- ProductSelectProps,
+ type ProductSelectProps,
} from './product-select';
export {
ProductImage as __experimentalProductImage,
- ProductImageProps,
+ type ProductImageProps,
} from './product-image';
export { Notice as __experimentalNotice } from './notice';
export {
SchedulePublishModal as __experimentalSchedulePublishModal,
- SchedulePublishModalProps,
+ type SchedulePublishModalProps,
} from './schedule-publish-modal';
export {
CustomFields as __experimentalCustomFields,
- CustomFieldsProps,
+ type CustomFieldsProps,
} from './custom-fields';
export { PluginSidebar as __experimentalModalBlockEditorPluginSidebar } from './iframe-editor';
diff --git a/packages/js/product-editor/src/components/product-select/product-select.tsx b/packages/js/product-editor/src/components/product-select/product-select.tsx
index a7d2618cb1e..8d76f4b9039 100644
--- a/packages/js/product-editor/src/components/product-select/product-select.tsx
+++ b/packages/js/product-editor/src/components/product-select/product-select.tsx
@@ -13,7 +13,10 @@ import clsx from 'clsx';
import { FormattedPrice } from '../formatted-price';
import { ProductImage } from '../product-image';
import { ProductSelectProps } from './types';
-import { ComboboxControl, ComboboxControlOption } from '../combobox-control';
+import {
+ ComboboxControl,
+ type ComboboxControlOption,
+} from '../combobox-control';
/**
* Map the product item to the Combobox core option.
diff --git a/packages/js/remote-logging/build.mjs b/packages/js/remote-logging/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/remote-logging/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/remote-logging/changelog/64838-dev-esbuild-package-builds b/packages/js/remote-logging/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/remote-logging/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/remote-logging/package.json b/packages/js/remote-logging/package.json
index 549a2156a28..453032afc84 100644
--- a/packages/js/remote-logging/package.json
+++ b/packages/js/remote-logging/package.json
@@ -31,9 +31,10 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:esm": "wireit",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -46,7 +47,7 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:esm": "node build.mjs --watch"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -69,14 +70,16 @@
"@woocommerce/internal-js-tests": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
"@wordpress/jest-console": "^5.4.0",
+ "chokidar": "3.6.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
"rimraf": "5.0.5",
"ts-jest": "29.1.x",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
+ "typescript": "5.7.x"
},
"publishConfig": {
"access": "public"
@@ -105,47 +108,5 @@
}
]
}
- },
- "wireit": {
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/tracks/build",
- "node_modules/@woocommerce/tracks/build-types",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/sanitize/build.mjs b/packages/js/sanitize/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/sanitize/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/sanitize/changelog/64838-dev-esbuild-package-builds b/packages/js/sanitize/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/sanitize/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/sanitize/package.json b/packages/js/sanitize/package.json
index dfd61ee8923..a93d13c35e6 100644
--- a/packages/js/sanitize/package.json
+++ b/packages/js/sanitize/package.json
@@ -41,14 +41,16 @@
"@woocommerce/internal-js-tests": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
"@wordpress/scripts": "^27.0.0",
+ "chokidar": "3.6.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
"rimraf": "5.0.5",
"ts-jest": "29.1.x",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
+ "typescript": "5.7.x"
},
"peerDependencies": {
"@types/react": "18.3.x",
@@ -62,9 +64,10 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:esm": "wireit",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -77,7 +80,7 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:esm": "node build.mjs --watch"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -107,45 +110,5 @@
}
]
}
- },
- "wireit": {
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/packages/js/sanitize/src/index.ts b/packages/js/sanitize/src/index.ts
index b62b4690c8c..4510a27d200 100644
--- a/packages/js/sanitize/src/index.ts
+++ b/packages/js/sanitize/src/index.ts
@@ -1,12 +1,12 @@
-export {
- WooCommerceSanitizePolicyType,
- getTrustedTypesPolicy,
-} from './trusted-types-policy';
+export { getTrustedTypesPolicy } from './trusted-types-policy';
+export type { WooCommerceSanitizePolicyType } from './trusted-types-policy';
export {
DEFAULT_ALLOWED_TAGS,
DEFAULT_ALLOWED_ATTR,
+ sanitizeHTML,
+} from './sanitize';
+export type {
SanitizeReturnKind,
SanitizeReturnType,
SanitizeConfig,
- sanitizeHTML,
} from './sanitize';
diff --git a/packages/js/settings-editor/changelog/64838-dev-esbuild-package-builds b/packages/js/settings-editor/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/settings-editor/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/settings-editor/changelog/dev-64837-type-check-only-on-lint b/packages/js/settings-editor/changelog/dev-64837-type-check-only-on-lint
deleted file mode 100644
index efdb3bd771a..00000000000
--- a/packages/js/settings-editor/changelog/dev-64837-type-check-only-on-lint
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: dev
-
-Move TypeScript type-checking from the build to a new `lint:lang:types` script. Builds now emit types and JS without type-checking.
diff --git a/packages/js/tracks/build.mjs b/packages/js/tracks/build.mjs
new file mode 100644
index 00000000000..746bc61fc4b
--- /dev/null
+++ b/packages/js/tracks/build.mjs
@@ -0,0 +1,112 @@
+import { build, context } from 'esbuild';
+import { glob } from 'glob';
+import { rm } from 'node:fs/promises';
+import chokidar from 'chokidar';
+
+const watch = process.argv.includes( '--watch' );
+const format = process.argv.includes( '--cjs' ) ? 'cjs' : 'esm';
+const outdir = format === 'cjs' ? 'build' : 'build-module';
+
+const ENTRY_GLOB = 'src/**/*.{ts,tsx,js,jsx}';
+const ENTRY_IGNORE = [
+ '**/test/**',
+ '**/stories/**',
+ '**/*.test.{ts,tsx,js,jsx}',
+ '**/*.d.ts',
+];
+
+async function resolveEntryPoints() {
+ return glob( ENTRY_GLOB, { ignore: ENTRY_IGNORE } );
+}
+
+function makeOptions( entryPoints ) {
+ return {
+ entryPoints,
+ outdir,
+ outbase: 'src',
+ bundle: false,
+ format,
+ platform: 'neutral',
+ target: 'esnext',
+ loader: { '.js': 'jsx', '.jsx': 'jsx', '.ts': 'ts', '.tsx': 'tsx' },
+ jsx: 'transform',
+ jsxFactory: 'createElement',
+ jsxFragment: 'Fragment',
+ logLevel: 'warning',
+ sourcemap: false,
+ };
+}
+
+function summarize( result ) {
+ const errors = result.errors.length;
+ const warnings = result.warnings.length;
+ const parts = [];
+ if ( errors ) parts.push( `${ errors } error(s)` );
+ if ( warnings ) parts.push( `${ warnings } warning(s)` );
+ return parts.length ? ` — ${ parts.join( ', ' ) }` : '';
+}
+
+// Wrap a watch-mode step so a single failure (disk error, build crash, etc.)
+// doesn't take the watcher process down. Errors are surfaced; the loop survives.
+async function safe( label, fn ) {
+ try {
+ return await fn();
+ } catch ( error ) {
+ console.error( `[watch] ${ label } failed:`, error?.message ?? error );
+ return null;
+ }
+}
+
+await rm( outdir, { recursive: true, force: true } );
+
+if ( watch ) {
+ const startupT0 = Date.now();
+ let entryPoints = await resolveEntryPoints();
+ let ctx = await context( makeOptions( entryPoints ) );
+ const initial = await safe( 'startup build', () => ctx.rebuild() );
+ console.log( `[watch] ready in ${ Date.now() - startupT0 }ms — ${ entryPoints.length } entry point(s)${ initial ? summarize( initial ) : '' }` );
+
+ // esbuild's own watcher polls the filesystem, which can miss or delay
+ // changes (especially edits to files added after context creation).
+ // chokidar uses OS-level events (fsevents/inotify) and drives rebuilds
+ // directly: changes call ctx.rebuild() (preserves the AST cache),
+ // add/unlink trigger a debounced context restart (entry list changed).
+ let pending;
+ const pendingChanges = new Set();
+ const restart = ( path, kind ) => {
+ pendingChanges.add( `${ path } (${ kind })` );
+ clearTimeout( pending );
+ pending = setTimeout( () => safe( 'restart', async () => {
+ const changes = [ ...pendingChanges ];
+ pendingChanges.clear();
+ const preview = changes.slice( 0, 3 ).join( ', ' );
+ const suffix = changes.length > 3 ? `, +${ changes.length - 3 } more` : '';
+ console.log( `[watch] restarting (${ preview }${ suffix })` );
+ const t0 = Date.now();
+ await ctx.dispose();
+ await rm( outdir, { recursive: true, force: true } );
+ entryPoints = await resolveEntryPoints();
+ ctx = await context( makeOptions( entryPoints ) );
+ const result = await ctx.rebuild();
+ console.log( `[watch] rebuilt in ${ Date.now() - t0 }ms — ${ entryPoints.length } entry point(s)${ summarize( result ) }` );
+ } ), 200 );
+ };
+
+ chokidar
+ .watch( ENTRY_GLOB, { ignored: ENTRY_IGNORE, ignoreInitial: true } )
+ .on( 'add', ( path ) => restart( path, 'added' ) )
+ .on( 'unlink', ( path ) => restart( path, 'deleted' ) )
+ .on( 'change', async ( path ) => {
+ const t0 = Date.now();
+ const result = await safe( `rebuild ${ path }`, () => ctx.rebuild() );
+ if ( result ) {
+ console.log( `[watch] rebuilt ${ path } in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+ }
+ } );
+} else {
+ const entryPoints = await resolveEntryPoints();
+ const t0 = Date.now();
+ console.log( `[build] ${ entryPoints.length } entry point(s)...` );
+ const result = await build( makeOptions( entryPoints ) );
+ console.log( `[build] done in ${ Date.now() - t0 }ms${ summarize( result ) }` );
+}
diff --git a/packages/js/tracks/changelog/64838-dev-esbuild-package-builds b/packages/js/tracks/changelog/64838-dev-esbuild-package-builds
new file mode 100644
index 00000000000..53b9c7cd29c
--- /dev/null
+++ b/packages/js/tracks/changelog/64838-dev-esbuild-package-builds
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/tracks/package.json b/packages/js/tracks/package.json
index df513ed5ab0..c4910f1bb6a 100644
--- a/packages/js/tracks/package.json
+++ b/packages/js/tracks/package.json
@@ -38,9 +38,10 @@
"scripts": {
"build": "pnpm --if-present --workspace-concurrency=Infinity --stream --filter=\"$npm_package_name...\" '/^build:project:.*$/'",
"build:project": "pnpm --if-present '/^build:project:.*$/'",
- "build:project:esm": "wireit",
+ "build:project:esm": "node build.mjs",
"build:publish:project": "pnpm --if-present '/^build:publish:project:.*$/'",
- "build:publish:project:cjs": "tsc --project tsconfig-cjs.json --noCheck",
+ "build:publish:project:cjs": "node build.mjs --cjs",
+ "build:publish:project:types": "tsc --build --emitDeclarationOnly",
"build:publish:project:deps": "pnpm build",
"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
@@ -53,24 +54,26 @@
"update:php": "XDEBUG_MODE=off composer update --quiet",
"watch:build": "pnpm --if-present --workspace-concurrency=Infinity --filter=\"$npm_package_name...\" --parallel '/^watch:build:project:.*$/'",
"watch:build:project": "pnpm --if-present run '/^watch:build:project:.*$/'",
- "watch:build:project:esm": "wireit"
+ "watch:build:project:esm": "node build.mjs --watch"
},
"devDependencies": {
"@babel/core": "7.25.7",
"@types/debug": "^4.1.12",
- "@types/node": "^24.1.0",
"@types/jest": "29.5.x",
+ "@types/node": "^24.1.0",
"@woocommerce/eslint-plugin": "workspace:*",
"@woocommerce/internal-js-tests": "workspace:*",
"@woocommerce/internal-ts-config": "workspace:*",
+ "chokidar": "3.6.x",
+ "esbuild": "0.24.x",
"eslint": "^8.55.0",
+ "glob": "^10.3.10",
"jest": "29.5.x",
"jest-cli": "29.5.x",
"jest-environment-jsdom": "29.5.x",
"rimraf": "5.0.5",
"ts-jest": "29.1.x",
- "typescript": "5.7.x",
- "wireit": "0.14.12"
+ "typescript": "5.7.x"
},
"lint-staged": {
"*.(t|j)s?(x)": [
@@ -84,45 +87,5 @@
"changes": "src/**/*.{js,jsx,ts,tsx}"
}
}
- },
- "wireit": {
- "build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck",
- "clean": "if-file-deleted",
- "files": [
- "tsconfig.json",
- "src/**/*.{js,jsx,ts,tsx}",
- "typings/**/*.ts"
- ],
- "output": [
- "build-module",
- "build-types",
- "tsconfig.tsbuildinfo"
- ],
- "dependencies": [
- "dependencyOutputs"
- ]
- },
- "watch:build:project:esm": {
- "command": "tsc --project tsconfig.json --noCheck --watch",
- "service": true
- },
- "dependencyOutputs": {
- "allowUsuallyExcludedPaths": true,
- "files": [
- "package.json",
- "../../../pnpm-lock.yaml",
- "node_modules/@woocommerce/eslint-plugin/configs",
- "node_modules/@woocommerce/eslint-plugin/rules",
- "node_modules/@woocommerce/eslint-plugin/index.js",
- "node_modules/@woocommerce/internal-js-tests/build",
- "node_modules/@woocommerce/internal-js-tests/build-module",
- "node_modules/@woocommerce/internal-js-tests/jest-preset.js",
- "node_modules/@woocommerce/internal-ts-config/tsconfig.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-cjs.json",
- "node_modules/@woocommerce/internal-ts-config/tsconfig-jest.json",
- "node_modules/@woocommerce/internal-ts-config/types"
- ]
- }
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f5574520aed..5cc028611f7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -208,7 +208,7 @@ importers:
version: 2.17.0(wp-prettier@2.8.5)
babel-loader:
specifier: 9.2.x
- version: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1(@swc/core@1.15.24))
+ version: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1)
chalk:
specifier: ^4.1.2
version: 4.1.2
@@ -220,7 +220,7 @@ importers:
version: 3.49.0
css-loader:
specifier: 6.11.x
- version: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ version: 6.11.0(webpack@5.97.1)
glob:
specifier: ^10.3.10
version: 10.5.0
@@ -244,7 +244,7 @@ importers:
version: 1.15.0
postcss-loader:
specifier: 4.3.x
- version: 4.3.0(postcss@8.5.9)(webpack@5.97.1)
+ version: 4.3.0(postcss@8.5.9)(webpack@5.97.1(@swc/core@1.15.24))
prettier:
specifier: npm:wp-prettier@^2.8.5
version: wp-prettier@2.8.5
@@ -271,7 +271,7 @@ importers:
version: 5.7.3
webpack:
specifier: 5.97.x
- version: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ version: 5.97.1(@swc/core@1.15.24)
packages/js/admin-layout:
dependencies:
@@ -300,12 +300,21 @@ importers:
'@wordpress/browserslist-config':
specifier: next
version: 6.43.1-next.v.202604091042.0
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
css-loader:
specifier: 6.11.x
- version: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ version: 6.11.0(webpack@5.97.1)
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -329,19 +338,16 @@ importers:
version: 10.5.2(sass@1.69.5)(webpack@5.97.1)
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
webpack:
specifier: 5.97.x
- version: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ version: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
webpack-cli:
specifier: 5.1.x
version: 5.1.4(webpack@5.97.1)
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/block-templates:
dependencies:
@@ -409,15 +415,24 @@ importers:
'@wordpress/browserslist-config':
specifier: next
version: 6.43.1-next.v.202604091042.0
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
copy-webpack-plugin:
specifier: 13.0.x
version: 13.0.1(webpack@5.97.1)
css-loader:
specifier: 6.11.x
- version: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ version: 6.11.0(webpack@5.97.1)
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -447,19 +462,16 @@ importers:
version: 10.5.2(sass@1.69.5)(webpack@5.97.1)
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
webpack:
specifier: 5.97.x
- version: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ version: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
webpack-cli:
specifier: 5.1.x
version: 5.1.4(webpack@5.97.1)
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/components:
dependencies:
@@ -522,7 +534,7 @@ importers:
version: 14.14.6(@babel/core@7.25.7)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack-virtual-modules@0.6.2)(webpack@5.97.1)
'@wordpress/block-library':
specifier: catalog:wp-min
- version: 9.19.6(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+ version: 9.19.6(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
'@wordpress/blocks':
specifier: catalog:wp-min
version: 14.8.2(react@18.3.1)
@@ -664,7 +676,7 @@ importers:
version: 7.6.19(react@18.3.1)
'@storybook/react':
specifier: 6.5.17-alpha.0
- version: 6.5.17-alpha.0(@babel/core@7.25.7)(@swc/core@1.15.24)(@types/webpack@4.41.40)(encoding@0.1.13)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.7.3)(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)
+ version: 6.5.17-alpha.0(@babel/core@7.25.7)(@swc/core@1.15.24)(@types/webpack@4.41.40)(encoding@0.1.13)(esbuild@0.24.2)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.7.3)(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)
'@testing-library/dom':
specifier: 8.11.3
version: 8.11.3
@@ -716,12 +728,21 @@ importers:
'@wordpress/browserslist-config':
specifier: next
version: 6.43.1-next.v.202604091042.0
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
css-loader:
specifier: 6.11.x
- version: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ version: 6.11.0(webpack@5.97.1)
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -754,7 +775,7 @@ importers:
version: 10.5.2(sass@1.69.5)(webpack@5.97.1)
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
@@ -763,25 +784,14 @@ importers:
version: 9.0.1
webpack:
specifier: 5.97.x
- version: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ version: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
webpack-cli:
specifier: 5.1.x
version: 5.1.4(webpack-dev-server@4.15.2)(webpack@5.97.1)
- wireit:
- specifier: 0.14.12
- version: 0.14.12
- packages/js/create-product-editor-block:
- devDependencies:
- wireit:
- specifier: 0.14.12
- version: 0.14.12
+ packages/js/create-product-editor-block: {}
- packages/js/create-woo-extension:
- devDependencies:
- wireit:
- specifier: 0.14.12
- version: 0.14.12
+ packages/js/create-woo-extension: {}
packages/js/csv-export:
dependencies:
@@ -807,9 +817,18 @@ importers:
'@woocommerce/internal-ts-config':
specifier: workspace:*
version: link:../internal-ts-config
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -824,13 +843,10 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/currency:
dependencies:
@@ -871,9 +887,18 @@ importers:
'@woocommerce/internal-ts-config':
specifier: workspace:*
version: link:../internal-ts-config
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -888,13 +913,10 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/customer-effort-score:
dependencies:
@@ -977,12 +999,21 @@ importers:
'@wordpress/browserslist-config':
specifier: next
version: 6.43.1-next.v.202604091042.0
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
css-loader:
specifier: 6.11.x
- version: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ version: 6.11.0(webpack@5.97.1)
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -1006,19 +1037,16 @@ importers:
version: 10.5.2(sass@1.69.5)(webpack@5.97.1)
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
webpack:
specifier: 5.97.x
- version: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ version: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
webpack-cli:
specifier: 5.1.x
version: 5.1.4(webpack@5.97.1)
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/data:
dependencies:
@@ -1119,9 +1147,18 @@ importers:
'@woocommerce/internal-ts-config':
specifier: workspace:*
version: link:../internal-ts-config
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -1139,13 +1176,10 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/date:
dependencies:
@@ -1195,12 +1229,21 @@ importers:
'@woocommerce/internal-ts-config':
specifier: workspace:*
version: link:../internal-ts-config
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
d3-time-format:
specifier: ^2.3.0
version: 2.3.0
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -1215,13 +1258,10 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/dependency-extraction-webpack-plugin:
dependencies:
@@ -1249,7 +1289,7 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
@@ -1259,9 +1299,6 @@ importers:
webpack-cli:
specifier: 5.1.x
version: 5.1.4(webpack@5.97.1)
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/e2e-utils-playwright:
dependencies:
@@ -1290,9 +1327,18 @@ importers:
'@woocommerce/internal-ts-config':
specifier: workspace:*
version: link:../internal-ts-config
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -1301,13 +1347,10 @@ importers:
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/email-editor:
dependencies:
@@ -1486,9 +1529,18 @@ importers:
'@wordpress/stylelint-config':
specifier: ^21.0.0
version: 21.41.0(postcss@8.5.9)(stylelint@14.16.1)
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -1509,7 +1561,7 @@ importers:
version: 14.16.1
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
ts-loader:
specifier: 9.5.x
version: 9.5.7(typescript@5.7.3)(webpack@5.97.1)
@@ -1518,13 +1570,10 @@ importers:
version: 5.7.3
webpack:
specifier: 5.97.x
- version: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ version: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
webpack-cli:
specifier: 5.1.x
version: 5.1.4(webpack@5.97.1)
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/eslint-plugin:
dependencies:
@@ -1564,13 +1613,10 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/experimental:
dependencies:
@@ -1631,7 +1677,7 @@ importers:
version: 1.2.3(@storybook/addon-actions@6.5.17-alpha.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
'@storybook/react':
specifier: 6.5.17-alpha.0
- version: 6.5.17-alpha.0(@babel/core@7.25.7)(@swc/core@1.15.24)(@types/webpack@4.41.40)(encoding@0.1.13)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.7.3)(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)
+ version: 6.5.17-alpha.0(@babel/core@7.25.7)(@swc/core@1.15.24)(@types/webpack@4.41.40)(encoding@0.1.13)(esbuild@0.24.2)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.7.3)(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)
'@testing-library/dom':
specifier: 8.11.3
version: 8.11.3
@@ -1665,12 +1711,21 @@ importers:
'@wordpress/browserslist-config':
specifier: next
version: 6.43.1-next.v.202604091042.0
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
css-loader:
specifier: 6.11.x
- version: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ version: 6.11.0(webpack@5.97.1)
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -1694,19 +1749,16 @@ importers:
version: 10.5.2(sass@1.69.5)(webpack@5.97.1)
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
webpack:
specifier: 5.97.x
- version: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ version: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
webpack-cli:
specifier: 5.1.x
version: 5.1.4(webpack-dev-server@4.15.2)(webpack@5.97.1)
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/experimental-products-app:
dependencies:
@@ -1834,12 +1886,21 @@ importers:
'@woocommerce/internal-ts-config':
specifier: workspace:*
version: link:../internal-ts-config
+ chokidar:
+ specifier: ^3.6.0
+ version: 3.6.0
css-loader:
specifier: 6.11.x
- version: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ version: 6.11.0(webpack@5.97.1)
+ esbuild:
+ specifier: ^0.24.0
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -1863,22 +1924,19 @@ importers:
version: 10.5.2(sass@1.69.5)(webpack@5.97.1)
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
webpack:
specifier: 5.97.x
- version: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ version: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
webpack-cli:
specifier: 5.1.x
version: 5.1.4(webpack@5.97.1)
webpack-remove-empty-scripts:
specifier: 1.0.x
- version: 1.0.4(webpack@5.97.1(@swc/core@1.15.24))
- wireit:
- specifier: 0.14.12
- version: 0.14.12
+ version: 1.0.4(webpack@5.97.1)
packages/js/explat:
dependencies:
@@ -1928,9 +1986,18 @@ importers:
'@woocommerce/internal-ts-config':
specifier: workspace:*
version: link:../internal-ts-config
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -1945,13 +2012,10 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/expression-evaluation:
dependencies:
@@ -1977,9 +2041,18 @@ importers:
'@woocommerce/internal-ts-config':
specifier: workspace:*
version: link:../internal-ts-config
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -1994,19 +2067,12 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
- packages/js/extend-cart-checkout-block:
- devDependencies:
- wireit:
- specifier: 0.14.12
- version: 0.14.12
+ packages/js/extend-cart-checkout-block: {}
packages/js/integrate-plugin:
dependencies:
@@ -2071,15 +2137,24 @@ importers:
'@wordpress/browserslist-config':
specifier: next
version: 6.43.1-next.v.202604091042.0
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
copy-webpack-plugin:
specifier: 13.0.x
version: 13.0.1(webpack@5.97.1)
css-loader:
specifier: 6.11.x
- version: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ version: 6.11.0(webpack@5.97.1)
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -2091,19 +2166,16 @@ importers:
version: 29.5.0
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
webpack:
specifier: 5.97.x
- version: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ version: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
webpack-cli:
specifier: 5.1.x
version: 5.1.4(webpack@5.97.1)
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/internal-js-tests:
dependencies:
@@ -2144,9 +2216,18 @@ importers:
babel-jest:
specifier: 29.5.x
version: 29.5.0(@babel/core@7.25.7)
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -2167,13 +2248,10 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.5.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.5.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/internal-style-build:
dependencies:
@@ -2200,7 +2278,7 @@ importers:
version: 2.9.4(webpack@5.97.1(@swc/core@1.15.24))
postcss-loader:
specifier: 4.3.x
- version: 4.3.0(postcss@8.5.9)(webpack@5.97.1)
+ version: 4.3.0(postcss@8.5.9)(webpack@5.97.1(@swc/core@1.15.24))
rtlcss:
specifier: 4.3.x
version: 4.3.0
@@ -2231,25 +2309,19 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
webpack:
specifier: 5.97.x
- version: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
- wireit:
- specifier: 0.14.12
- version: 0.14.12
+ version: 5.97.1(@swc/core@1.15.24)
packages/js/internal-ts-config:
devDependencies:
'@types/wordpress__block-editor':
specifier: 14.21.8
version: 14.21.8(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@woocommerce/eslint-plugin':
- specifier: workspace:*
- version: link:../eslint-plugin
'@wordpress/core-data':
specifier: 7.19.6
version: 7.19.6(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -2262,15 +2334,9 @@ importers:
'@wordpress/notices':
specifier: 5.19.2
version: 5.19.2(react@18.3.1)
- eslint:
- specifier: ^8.55.0
- version: 8.57.1
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/navigation:
dependencies:
@@ -2332,9 +2398,18 @@ importers:
'@woocommerce/internal-ts-config':
specifier: workspace:*
version: link:../internal-ts-config
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -2349,13 +2424,10 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/notices:
dependencies:
@@ -2393,9 +2465,18 @@ importers:
'@woocommerce/internal-ts-config':
specifier: workspace:*
version: link:../internal-ts-config
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -2410,13 +2491,10 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/number:
dependencies:
@@ -2445,9 +2523,18 @@ importers:
'@woocommerce/internal-ts-config':
specifier: workspace:*
version: link:../internal-ts-config
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -2462,13 +2549,10 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/onboarding:
dependencies:
@@ -2539,12 +2623,21 @@ importers:
'@wordpress/browserslist-config':
specifier: next
version: 6.43.1-next.v.202604091042.0
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
css-loader:
specifier: 6.11.x
- version: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ version: 6.11.0(webpack@5.97.1)
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -2568,19 +2661,16 @@ importers:
version: 10.5.2(sass@1.69.5)(webpack@5.97.1)
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
webpack:
specifier: 5.97.x
- version: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ version: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
webpack-cli:
specifier: 5.1.x
version: 5.1.4(webpack@5.97.1)
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/product-editor:
dependencies:
@@ -2667,7 +2757,7 @@ importers:
version: 8.19.7(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@wordpress/editor':
specifier: catalog:wp-min
- version: 14.19.7(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+ version: 14.19.7(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
'@wordpress/element':
specifier: catalog:wp-min
version: 6.19.1
@@ -2777,15 +2867,24 @@ importers:
'@wordpress/browserslist-config':
specifier: next
version: 6.43.1-next.v.202604091042.0
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
copy-webpack-plugin:
specifier: 13.0.x
version: 13.0.1(webpack@5.97.1)
css-loader:
specifier: 6.11.x
- version: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ version: 6.11.0(webpack@5.97.1)
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -2797,7 +2896,7 @@ importers:
version: 29.5.0
mini-css-extract-plugin:
specifier: 2.9.x
- version: 2.9.4(webpack@5.97.1(@swc/core@1.15.24))
+ version: 2.9.4(webpack@5.97.1)
postcss:
specifier: 8.4.x
version: 8.4.49
@@ -2821,22 +2920,19 @@ importers:
version: 10.5.2(sass@1.69.5)(webpack@5.97.1)
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
webpack:
specifier: 5.97.x
- version: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ version: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
webpack-cli:
specifier: 5.1.x
version: 5.1.4(webpack@5.97.1)
webpack-remove-empty-scripts:
specifier: 1.0.x
- version: 1.0.4(webpack@5.97.1(@swc/core@1.15.24))
- wireit:
- specifier: 0.14.12
- version: 0.14.12
+ version: 1.0.4(webpack@5.97.1)
packages/js/remote-logging:
dependencies:
@@ -2877,9 +2973,18 @@ importers:
'@wordpress/jest-console':
specifier: ^5.4.0
version: 5.4.0(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -2894,13 +2999,10 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/sanitize:
dependencies:
@@ -2943,10 +3045,19 @@ importers:
version: link:../internal-ts-config
'@wordpress/scripts':
specifier: ^27.0.0
- version: 27.9.0(@playwright/test@1.59.1)(@swc/core@1.15.24)(@types/eslint@9.6.1)(@types/node@24.12.2)(@types/webpack@4.41.40)(babel-plugin-macros@3.1.0)(encoding@0.1.13)(file-loader@6.2.0(webpack@5.97.1))(node-notifier@8.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))(type-fest@4.41.0)(typescript@5.7.3)(webpack-hot-middleware@2.26.1)
+ version: 27.9.0(@playwright/test@1.59.1)(@swc/core@1.15.24)(@types/eslint@9.6.1)(@types/node@24.12.2)(@types/webpack@4.41.40)(babel-plugin-macros@3.1.0)(encoding@0.1.13)(esbuild@0.24.2)(file-loader@6.2.0(webpack@5.97.1))(node-notifier@8.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))(type-fest@4.41.0)(typescript@5.7.3)(webpack-hot-middleware@2.26.1)
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -2961,13 +3072,10 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/js/tracks:
dependencies:
@@ -2996,9 +3104,18 @@ importers:
'@woocommerce/internal-ts-config':
specifier: workspace:*
version: link:../internal-ts-config
+ chokidar:
+ specifier: 3.6.x
+ version: 3.6.0
+ esbuild:
+ specifier: 0.24.x
+ version: 0.24.2
eslint:
specifier: ^8.55.0
version: 8.57.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -3013,13 +3130,10 @@ importers:
version: 5.0.5
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
- wireit:
- specifier: 0.14.12
- version: 0.14.12
packages/php/blueprint:
devDependencies:
@@ -3080,7 +3194,7 @@ importers:
version: 6.43.1-next.v.202604091042.0(webpack@5.97.1)
babel-loader:
specifier: 9.2.x
- version: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1(@swc/core@1.15.24))
+ version: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1)
jest:
specifier: 29.5.x
version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
@@ -3719,7 +3833,7 @@ importers:
version: 29.5.0(@babel/core@7.25.7)
babel-loader:
specifier: 9.2.x
- version: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1(@swc/core@1.15.24))
+ version: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1)
babel-plugin-transform-react-remove-prop-types:
specifier: 0.4.24
version: 0.4.24
@@ -3737,7 +3851,7 @@ importers:
version: 13.0.1(webpack@5.97.1)
css-loader:
specifier: 6.11.x
- version: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ version: 6.11.0(webpack@5.97.1)
eslint:
specifier: ^8.55.0
version: 8.57.1
@@ -3773,7 +3887,7 @@ importers:
version: 2.0.0
mini-css-extract-plugin:
specifier: 2.9.x
- version: 2.9.4(webpack@5.97.1(@swc/core@1.15.24))
+ version: 2.9.4(webpack@5.97.1)
moment:
specifier: ^2.29.4
version: 2.30.1
@@ -3833,7 +3947,7 @@ importers:
version: 14.16.1
ts-jest:
specifier: 29.1.x
- version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.5.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
+ version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.5.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: 5.7.x
version: 5.7.3
@@ -4284,7 +4398,7 @@ importers:
version: 3.25.0
css-loader:
specifier: 6.11.x
- version: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ version: 6.11.0(webpack@5.97.1)
cssnano:
specifier: 5.1.12
version: 5.1.12(postcss@8.4.49)
@@ -4362,7 +4476,7 @@ importers:
version: 13.0.1
mini-css-extract-plugin:
specifier: 2.9.x
- version: 2.9.4(webpack@5.97.1(@swc/core@1.15.24))
+ version: 2.9.4(webpack@5.97.1)
msw:
specifier: 2.10.4
version: 2.10.4(@types/node@24.12.2)(typescript@5.7.3)
@@ -4987,7 +5101,7 @@ importers:
version: 5.7.3
webpack:
specifier: 5.97.x
- version: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ version: 5.97.1(@swc/core@1.15.24)
wireit:
specifier: 0.14.12
version: 0.14.12
@@ -6220,138 +6334,288 @@ packages:
resolution: {integrity: sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg==}
engines: {node: ^14 || ^16 || ^17 || ^18 || ^19}
+ '@esbuild/aix-ppc64@0.24.2':
+ resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
'@esbuild/android-arm64@0.18.20':
resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
+ '@esbuild/android-arm64@0.24.2':
+ resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
'@esbuild/android-arm@0.18.20':
resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
+ '@esbuild/android-arm@0.24.2':
+ resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
'@esbuild/android-x64@0.18.20':
resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
+ '@esbuild/android-x64@0.24.2':
+ resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
'@esbuild/darwin-arm64@0.18.20':
resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
+ '@esbuild/darwin-arm64@0.24.2':
+ resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
'@esbuild/darwin-x64@0.18.20':
resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
+ '@esbuild/darwin-x64@0.24.2':
+ resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
'@esbuild/freebsd-arm64@0.18.20':
resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
+ '@esbuild/freebsd-arm64@0.24.2':
+ resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
'@esbuild/freebsd-x64@0.18.20':
resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
+ '@esbuild/freebsd-x64@0.24.2':
+ resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
'@esbuild/linux-arm64@0.18.20':
resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
+ '@esbuild/linux-arm64@0.24.2':
+ resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
'@esbuild/linux-arm@0.18.20':
resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
+ '@esbuild/linux-arm@0.24.2':
+ resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
'@esbuild/linux-ia32@0.18.20':
resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
+ '@esbuild/linux-ia32@0.24.2':
+ resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
'@esbuild/linux-loong64@0.18.20':
resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
+ '@esbuild/linux-loong64@0.24.2':
+ resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
'@esbuild/linux-mips64el@0.18.20':
resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
+ '@esbuild/linux-mips64el@0.24.2':
+ resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
'@esbuild/linux-ppc64@0.18.20':
resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
+ '@esbuild/linux-ppc64@0.24.2':
+ resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
'@esbuild/linux-riscv64@0.18.20':
resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
+ '@esbuild/linux-riscv64@0.24.2':
+ resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
'@esbuild/linux-s390x@0.18.20':
resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
+ '@esbuild/linux-s390x@0.24.2':
+ resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
'@esbuild/linux-x64@0.18.20':
resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
+ '@esbuild/linux-x64@0.24.2':
+ resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.24.2':
+ resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
'@esbuild/netbsd-x64@0.18.20':
resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
+ '@esbuild/netbsd-x64@0.24.2':
+ resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.24.2':
+ resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
'@esbuild/openbsd-x64@0.18.20':
resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
+ '@esbuild/openbsd-x64@0.24.2':
+ resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
'@esbuild/sunos-x64@0.18.20':
resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
+ '@esbuild/sunos-x64@0.24.2':
+ resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
'@esbuild/win32-arm64@0.18.20':
resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
+ '@esbuild/win32-arm64@0.24.2':
+ resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
'@esbuild/win32-ia32@0.18.20':
resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
+ '@esbuild/win32-ia32@0.24.2':
+ resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
'@esbuild/win32-x64@0.18.20':
resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
+ '@esbuild/win32-x64@0.24.2':
+ resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@eslint-community/eslint-utils@4.9.1':
resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -14978,6 +15242,11 @@ packages:
engines: {node: '>=12'}
hasBin: true
+ esbuild@0.24.2:
+ resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
@@ -26124,72 +26393,147 @@ snapshots:
esquery: 1.7.0
jsdoc-type-pratt-parser: 3.1.0
+ '@esbuild/aix-ppc64@0.24.2':
+ optional: true
+
'@esbuild/android-arm64@0.18.20':
optional: true
+ '@esbuild/android-arm64@0.24.2':
+ optional: true
+
'@esbuild/android-arm@0.18.20':
optional: true
+ '@esbuild/android-arm@0.24.2':
+ optional: true
+
'@esbuild/android-x64@0.18.20':
optional: true
+ '@esbuild/android-x64@0.24.2':
+ optional: true
+
'@esbuild/darwin-arm64@0.18.20':
optional: true
+ '@esbuild/darwin-arm64@0.24.2':
+ optional: true
+
'@esbuild/darwin-x64@0.18.20':
optional: true
+ '@esbuild/darwin-x64@0.24.2':
+ optional: true
+
'@esbuild/freebsd-arm64@0.18.20':
optional: true
+ '@esbuild/freebsd-arm64@0.24.2':
+ optional: true
+
'@esbuild/freebsd-x64@0.18.20':
optional: true
+ '@esbuild/freebsd-x64@0.24.2':
+ optional: true
+
'@esbuild/linux-arm64@0.18.20':
optional: true
+ '@esbuild/linux-arm64@0.24.2':
+ optional: true
+
'@esbuild/linux-arm@0.18.20':
optional: true
+ '@esbuild/linux-arm@0.24.2':
+ optional: true
+
'@esbuild/linux-ia32@0.18.20':
optional: true
+ '@esbuild/linux-ia32@0.24.2':
+ optional: true
+
'@esbuild/linux-loong64@0.18.20':
optional: true
+ '@esbuild/linux-loong64@0.24.2':
+ optional: true
+
'@esbuild/linux-mips64el@0.18.20':
optional: true
+ '@esbuild/linux-mips64el@0.24.2':
+ optional: true
+
'@esbuild/linux-ppc64@0.18.20':
optional: true
+ '@esbuild/linux-ppc64@0.24.2':
+ optional: true
+
'@esbuild/linux-riscv64@0.18.20':
optional: true
+ '@esbuild/linux-riscv64@0.24.2':
+ optional: true
+
'@esbuild/linux-s390x@0.18.20':
optional: true
+ '@esbuild/linux-s390x@0.24.2':
+ optional: true
+
'@esbuild/linux-x64@0.18.20':
optional: true
+ '@esbuild/linux-x64@0.24.2':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.24.2':
+ optional: true
+
'@esbuild/netbsd-x64@0.18.20':
optional: true
+ '@esbuild/netbsd-x64@0.24.2':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.24.2':
+ optional: true
+
'@esbuild/openbsd-x64@0.18.20':
optional: true
+ '@esbuild/openbsd-x64@0.24.2':
+ optional: true
+
'@esbuild/sunos-x64@0.18.20':
optional: true
+ '@esbuild/sunos-x64@0.24.2':
+ optional: true
+
'@esbuild/win32-arm64@0.18.20':
optional: true
+ '@esbuild/win32-arm64@0.24.2':
+ optional: true
+
'@esbuild/win32-ia32@0.18.20':
optional: true
+ '@esbuild/win32-ia32@0.24.2':
+ optional: true
+
'@esbuild/win32-x64@0.18.20':
optional: true
+ '@esbuild/win32-x64@0.24.2':
+ optional: true
+
'@eslint-community/eslint-utils@4.9.1(eslint@7.32.0)':
dependencies:
eslint: 7.32.0
@@ -28082,13 +28426,30 @@ snapshots:
react-refresh: 0.11.0
schema-utils: 4.3.3
source-map: 0.7.6
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
optionalDependencies:
'@types/webpack': 4.41.40
type-fest: 4.41.0
webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.97.1)
webpack-hot-middleware: 2.26.1
+ '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.97.1(@swc/core@1.15.24)))(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.15.24))':
+ dependencies:
+ ansi-html: 0.0.9
+ core-js-pure: 3.49.0
+ error-stack-parser: 2.1.4
+ html-entities: 2.6.0
+ loader-utils: 2.0.4
+ react-refresh: 0.14.2
+ schema-utils: 4.3.3
+ source-map: 0.7.6
+ webpack: 5.97.1(@swc/core@1.15.24)
+ optionalDependencies:
+ '@types/webpack': 4.41.40
+ type-fest: 4.41.0
+ webpack-dev-server: 4.15.2(webpack@5.97.1(@swc/core@1.15.24))
+ webpack-hot-middleware: 2.26.1
+
'@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1)':
dependencies:
ansi-html: 0.0.9
@@ -29605,12 +29966,12 @@ snapshots:
'@swc/core': 1.15.24
'@types/node': 18.19.130
'@types/semver': 7.7.1
- babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1(@swc/core@1.15.24))
+ babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1)
browser-assert: 1.2.1
case-sensitive-paths-webpack-plugin: 2.4.0
cjs-module-lexer: 1.4.3
constants-browserify: 1.0.0
- css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ css-loader: 6.11.0(webpack@5.97.1)
es-module-lexer: 1.7.0
express: 4.22.1
fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.7.3)(webpack@5.97.1)
@@ -29678,7 +30039,7 @@ snapshots:
url: 0.11.4
util: 0.12.5
util-deprecate: 1.0.2
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)
webpack-dev-middleware: 6.1.3(webpack@5.97.1(@swc/core@1.15.24))
webpack-hot-middleware: 2.26.1
webpack-virtual-modules: 0.5.0
@@ -29959,7 +30320,7 @@ snapshots:
ts-dedent: 2.2.0
unfetch: 4.2.0
util-deprecate: 1.0.2
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
optionalDependencies:
typescript: 5.7.3
@@ -30239,7 +30600,7 @@ snapshots:
'@storybook/core-server': 6.5.17-alpha.0(encoding@0.1.13)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)(webpack-cli@5.1.4)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
optionalDependencies:
typescript: 5.7.3
transitivePeerDependencies:
@@ -30541,7 +30902,7 @@ snapshots:
dependencies:
'@babel/preset-flow': 7.27.1(@babel/core@7.25.7)
'@babel/preset-react': 7.25.7(@babel/core@7.25.7)
- '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1)
+ '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.97.1(@swc/core@1.15.24)))(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.15.24))
'@storybook/core-webpack': 7.6.19(encoding@0.1.13)
'@storybook/docs-tools': 7.6.19(encoding@0.1.13)
'@storybook/node-logger': 7.6.19
@@ -30557,7 +30918,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
react-refresh: 0.14.2
semver: 7.7.4
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)
optionalDependencies:
'@babel/core': 7.25.7
typescript: 5.7.3
@@ -30659,7 +31020,7 @@ snapshots:
react-docgen-typescript: 2.4.0(typescript@5.7.3)
tslib: 2.8.1
typescript: 5.7.3
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)
transitivePeerDependencies:
- supports-color
@@ -30687,7 +31048,7 @@ snapshots:
react-docgen-typescript: 2.4.0(typescript@5.7.3)
tslib: 2.8.1
typescript: 5.7.3
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
transitivePeerDependencies:
- supports-color
@@ -30755,7 +31116,7 @@ snapshots:
- webpack-hot-middleware
- webpack-plugin-serve
- '@storybook/react@6.5.17-alpha.0(@babel/core@7.25.7)(@swc/core@1.15.24)(@types/webpack@4.41.40)(encoding@0.1.13)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.7.3)(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)':
+ '@storybook/react@6.5.17-alpha.0(@babel/core@7.25.7)(@swc/core@1.15.24)(@types/webpack@4.41.40)(encoding@0.1.13)(esbuild@0.24.2)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.7.3)(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)':
dependencies:
'@babel/preset-flow': 7.27.1(@babel/core@7.25.7)
'@babel/preset-react': 7.25.7(@babel/core@7.25.7)
@@ -30794,7 +31155,7 @@ snapshots:
require-from-string: 2.0.2
ts-dedent: 2.2.0
util-deprecate: 1.0.2
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
optionalDependencies:
'@babel/core': 7.25.7
typescript: 5.7.3
@@ -32018,7 +32379,7 @@ snapshots:
'@types/react': 18.3.28
'@wordpress/components': 28.13.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@wordpress/data': 10.19.2(react@18.3.1)
- '@wordpress/editor': 14.19.7(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@wordpress/editor': 14.19.7(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
'@wordpress/element': 6.44.0
transitivePeerDependencies:
- '@date-fns/tz'
@@ -32597,10 +32958,10 @@ snapshots:
'@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack@5.97.1)':
dependencies:
- webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.18.20)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.1)(webpack-dev-server@4.15.2)(webpack@5.97.1)
optionalDependencies:
- webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.97.1)
+ webpack-dev-server: 4.15.2(debug@4.4.3)(webpack-cli@5.1.4)(webpack@5.97.1)
'@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.97.1)':
dependencies:
@@ -33464,11 +33825,11 @@ snapshots:
'@wordpress/autop': 4.44.0
'@wordpress/base-styles': 6.20.0
'@wordpress/blob': 4.44.0
- '@wordpress/block-editor': 15.17.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+ '@wordpress/block-editor': 15.17.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
'@wordpress/blocks': 15.17.0(react@18.3.1)
'@wordpress/components': 32.6.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@wordpress/compose': 7.44.0(react@18.3.1)
- '@wordpress/core-data': 7.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+ '@wordpress/core-data': 7.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
'@wordpress/data': 10.44.0(react@18.3.1)
'@wordpress/date': 5.45.0
'@wordpress/deprecated': 4.45.0
@@ -33485,10 +33846,10 @@ snapshots:
'@wordpress/keycodes': 4.45.0
'@wordpress/latex-to-mathml': 1.12.0
'@wordpress/notices': 5.44.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/patterns': 2.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+ '@wordpress/patterns': 2.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
'@wordpress/primitives': 4.45.0(react@18.3.1)
'@wordpress/private-apis': 1.44.0
- '@wordpress/reusable-blocks': 5.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+ '@wordpress/reusable-blocks': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
'@wordpress/rich-text': 7.45.0(react@18.3.1)
'@wordpress/server-side-render': 6.20.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@wordpress/upload-media': 0.29.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -34515,10 +34876,10 @@ snapshots:
'@wordpress/core-commands@1.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@wordpress/block-editor': 15.17.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+ '@wordpress/block-editor': 15.17.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
'@wordpress/commands': 1.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@wordpress/compose': 7.44.0(react@18.3.1)
- '@wordpress/core-data': 7.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+ '@wordpress/core-data': 7.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
'@wordpress/data': 10.44.0(react@18.3.1)
'@wordpress/element': 6.44.0
'@wordpress/html-entities': 4.45.0
@@ -35065,7 +35426,7 @@ snapshots:
'@wordpress/dependency-extraction-webpack-plugin@5.9.0(webpack@5.97.1)':
dependencies:
json2php: 0.0.7
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
'@wordpress/dependency-extraction-webpack-plugin@6.43.1-next.v.202604091042.0(webpack@5.97.1)':
dependencies:
@@ -35075,7 +35436,7 @@ snapshots:
'@wordpress/dependency-extraction-webpack-plugin@6.44.0(webpack@5.97.1)':
dependencies:
json2php: 0.0.7
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)
'@wordpress/deprecated@3.58.0':
dependencies:
@@ -35203,11 +35564,11 @@ snapshots:
'@wordpress/components': 29.12.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@wordpress/compose': 7.44.0(react@18.3.1)
'@wordpress/core-commands': 1.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/core-data': 7.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+ '@wordpress/core-data': 7.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
'@wordpress/data': 10.44.0(react@18.3.1)
'@wordpress/deprecated': 4.44.0
'@wordpress/dom': 4.44.0
- '@wordpress/editor': 14.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@wordpress/editor': 14.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
'@wordpress/element': 6.44.0
'@wordpress/hooks': 4.44.0
'@wordpress/html-entities': 4.44.0
@@ -35354,65 +35715,6 @@ snapshots:
- supports-color
- utf-8-validate
- '@wordpress/editor@14.19.7(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@babel/runtime': 7.25.7
- '@wordpress/a11y': 4.19.1
- '@wordpress/api-fetch': 7.44.0
- '@wordpress/blob': 4.44.0
- '@wordpress/block-editor': 14.21.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/blocks': 14.15.0(react@18.3.1)
- '@wordpress/commands': 1.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/components': 29.12.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/compose': 7.44.0(react@18.3.1)
- '@wordpress/core-data': 7.19.6(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/data': 10.19.2(react@18.3.1)
- '@wordpress/dataviews': 4.22.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/date': 5.44.0
- '@wordpress/deprecated': 4.44.0
- '@wordpress/dom': 4.44.0
- '@wordpress/element': 6.44.0
- '@wordpress/fields': 0.11.6(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/hooks': 4.44.0
- '@wordpress/html-entities': 4.44.0
- '@wordpress/i18n': 5.26.0
- '@wordpress/icons': 10.32.0(react@18.3.1)
- '@wordpress/interface': 9.29.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/keyboard-shortcuts': 5.44.0(react@18.3.1)
- '@wordpress/keycodes': 4.44.0
- '@wordpress/media-utils': 5.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/notices': 5.19.2(react@18.3.1)
- '@wordpress/patterns': 2.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/plugins': 7.44.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/preferences': 4.44.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/private-apis': 1.44.0
- '@wordpress/reusable-blocks': 5.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/rich-text': 7.44.0(react@18.3.1)
- '@wordpress/server-side-render': 5.23.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/url': 4.44.0
- '@wordpress/warning': 3.44.0
- '@wordpress/wordcount': 4.44.0
- change-case: 4.1.2
- client-zip: 2.5.0
- clsx: 2.1.1
- date-fns: 3.6.0
- deepmerge: 4.3.1
- fast-deep-equal: 3.1.3
- is-plain-object: 5.0.0
- memize: 2.1.1
- react: 18.3.1
- react-autosize-textarea: 7.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- react-dom: 18.3.1(react@18.3.1)
- remove-accents: 0.5.0
- uuid: 9.0.1
- transitivePeerDependencies:
- - '@date-fns/tz'
- - '@emotion/is-prop-valid'
- - '@types/react'
- - '@types/react-dom'
- - stylelint
- - supports-color
-
'@wordpress/editor@14.19.7(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
dependencies:
'@babel/runtime': 7.25.7
@@ -35657,73 +35959,6 @@ snapshots:
- stylelint
- supports-color
- '@wordpress/editor@14.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@floating-ui/react-dom': 2.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/a11y': 4.44.0
- '@wordpress/api-fetch': 7.44.0
- '@wordpress/base-styles': 6.20.0
- '@wordpress/blob': 4.44.0
- '@wordpress/block-editor': 15.17.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/block-serialization-default-parser': 5.44.0
- '@wordpress/blocks': 15.17.0(react@18.3.1)
- '@wordpress/commands': 1.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/components': 32.6.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/compose': 7.44.0(react@18.3.1)
- '@wordpress/core-data': 7.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/data': 10.44.0(react@18.3.1)
- '@wordpress/dataviews': 14.2.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/date': 5.44.0
- '@wordpress/deprecated': 4.44.0
- '@wordpress/dom': 4.44.0
- '@wordpress/element': 6.44.0
- '@wordpress/fields': 0.36.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/global-styles-engine': 1.11.0(react@18.3.1)
- '@wordpress/global-styles-ui': 1.11.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/hooks': 4.44.0
- '@wordpress/html-entities': 4.44.0
- '@wordpress/i18n': 6.17.0
- '@wordpress/icons': 12.2.0(react@18.3.1)
- '@wordpress/interface': 9.29.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/keyboard-shortcuts': 5.44.0(react@18.3.1)
- '@wordpress/keycodes': 4.44.0
- '@wordpress/media-editor': 0.7.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/media-fields': 0.9.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/media-utils': 5.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/notices': 5.44.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/patterns': 2.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/plugins': 7.44.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/preferences': 4.44.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/private-apis': 1.44.0
- '@wordpress/reusable-blocks': 5.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/rich-text': 7.44.0(react@18.3.1)
- '@wordpress/server-side-render': 6.20.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/upload-media': 0.29.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/url': 4.44.0
- '@wordpress/views': 1.11.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/warning': 3.44.0
- '@wordpress/wordcount': 4.44.0
- change-case: 4.1.2
- client-zip: 2.5.0
- clsx: 2.1.1
- colord: 2.9.3
- date-fns: 3.6.0
- diff: 4.0.4
- fast-deep-equal: 3.1.3
- memize: 2.1.1
- react: 18.3.1
- react-autosize-textarea: 7.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- react-dom: 18.3.1(react@18.3.1)
- remove-accents: 0.5.0
- uuid: 9.0.1
- transitivePeerDependencies:
- - '@date-fns/tz'
- - '@emotion/is-prop-valid'
- - '@types/react'
- - '@types/react-dom'
- - stylelint
- - supports-color
-
'@wordpress/element@3.2.0':
dependencies:
'@babel/runtime': 7.25.7
@@ -35840,7 +36075,7 @@ snapshots:
cosmiconfig: 7.1.0
eslint: 8.57.1
eslint-config-prettier: 8.10.2(eslint@8.57.1)
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.11)(eslint@8.57.1)
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@4.4.4)(eslint-import-resolver-webpack@0.13.2)(eslint@8.57.1)
eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
eslint-plugin-jsdoc: 39.9.1(eslint@8.57.1)
eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1)
@@ -35869,7 +36104,7 @@ snapshots:
cosmiconfig: 7.1.0
eslint: 8.57.1
eslint-config-prettier: 8.10.2(eslint@8.57.1)
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.11)(eslint@8.57.1)
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@4.4.4)(eslint-import-resolver-webpack@0.13.2)(eslint@8.57.1)
eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(jest@29.7.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
eslint-plugin-jsdoc: 39.9.1(eslint@8.57.1)
eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1)
@@ -35898,7 +36133,7 @@ snapshots:
cosmiconfig: 7.1.0
eslint: 8.57.1
eslint-config-prettier: 8.10.2(eslint@8.57.1)
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.11)(eslint@8.57.1)
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@4.4.4)(eslint-import-resolver-webpack@0.13.2)(eslint@8.57.1)
eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
eslint-plugin-jsdoc: 39.9.1(eslint@8.57.1)
eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1)
@@ -36174,48 +36409,6 @@ snapshots:
- stylelint
- supports-color
- '@wordpress/fields@0.36.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@react-spring/web': 9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/api-fetch': 7.44.0
- '@wordpress/base-styles': 6.20.0
- '@wordpress/blob': 4.44.0
- '@wordpress/blocks': 15.17.0(react@18.3.1)
- '@wordpress/components': 32.6.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/compose': 7.44.0(react@18.3.1)
- '@wordpress/core-data': 7.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/data': 10.44.0(react@18.3.1)
- '@wordpress/dataviews': 14.2.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/date': 5.45.0
- '@wordpress/element': 6.44.0
- '@wordpress/hooks': 4.45.0
- '@wordpress/html-entities': 4.45.0
- '@wordpress/i18n': 6.18.0
- '@wordpress/icons': 12.2.0(react@18.3.1)
- '@wordpress/media-utils': 5.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/notices': 5.44.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/patterns': 2.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/primitives': 4.45.0(react@18.3.1)
- '@wordpress/private-apis': 1.44.0
- '@wordpress/router': 1.44.0(react@18.3.1)
- '@wordpress/url': 4.44.0
- '@wordpress/warning': 3.45.0
- '@wordpress/wordcount': 4.44.0
- change-case: 4.1.2
- client-zip: 2.5.0
- clsx: 2.1.1
- react: 18.3.1
- remove-accents: 0.5.0
- transitivePeerDependencies:
- - '@date-fns/tz'
- - '@emotion/is-prop-valid'
- - '@types/react'
- - '@types/react-dom'
- - date-fns
- - react-dom
- - stylelint
- - supports-color
-
'@wordpress/format-library@5.19.6(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@babel/runtime': 7.25.7
@@ -36284,37 +36477,6 @@ snapshots:
- stylelint
- supports-color
- '@wordpress/global-styles-ui@1.11.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@wordpress/a11y': 4.45.0
- '@wordpress/api-fetch': 7.44.0
- '@wordpress/base-styles': 6.20.0
- '@wordpress/block-editor': 15.17.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/blocks': 15.17.0(react@18.3.1)
- '@wordpress/components': 32.6.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/compose': 7.44.0(react@18.3.1)
- '@wordpress/core-data': 7.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/data': 10.44.0(react@18.3.1)
- '@wordpress/date': 5.45.0
- '@wordpress/element': 6.44.0
- '@wordpress/global-styles-engine': 1.11.0(react@18.3.1)
- '@wordpress/i18n': 6.18.0
- '@wordpress/icons': 12.2.0(react@18.3.1)
- '@wordpress/keycodes': 4.45.0
- '@wordpress/private-apis': 1.44.0
- change-case: 4.1.2
- clsx: 2.1.1
- colord: 2.9.3
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- transitivePeerDependencies:
- - '@date-fns/tz'
- - '@emotion/is-prop-valid'
- - '@types/react'
- - '@types/react-dom'
- - stylelint
- - supports-color
-
'@wordpress/hooks@3.58.0':
dependencies:
'@babel/runtime': 7.25.7
@@ -36668,7 +36830,7 @@ snapshots:
jest-matcher-utils: 29.7.0
jest-mock: 29.7.0
- '@wordpress/jest-console@8.44.0(jest@29.7.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))':
+ '@wordpress/jest-console@8.44.0(jest@29.7.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))':
dependencies:
jest: 29.7.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
jest-matcher-utils: 29.7.0
@@ -36686,7 +36848,7 @@ snapshots:
'@wordpress/jest-preset-default@12.22.0(@babel/core@7.25.7)(jest@29.7.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))':
dependencies:
'@babel/core': 7.25.7
- '@wordpress/jest-console': 8.44.0(jest@29.7.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))
+ '@wordpress/jest-console': 8.44.0(jest@29.7.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))
babel-jest: 29.7.0(@babel/core@7.25.7)
jest: 29.7.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
transitivePeerDependencies:
@@ -36704,7 +36866,7 @@ snapshots:
'@wordpress/jest-preset-default@12.44.0(@babel/core@7.25.7)(jest@29.7.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))':
dependencies:
'@babel/core': 7.25.7
- '@wordpress/jest-console': 8.44.0(jest@29.7.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))
+ '@wordpress/jest-console': 8.44.0(jest@29.7.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))
babel-jest: 29.7.0(@babel/core@7.25.7)
jest: 29.7.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
transitivePeerDependencies:
@@ -36795,22 +36957,6 @@ snapshots:
- stylelint
- supports-color
- '@wordpress/media-editor@0.7.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@babel/runtime': 7.25.7
- '@wordpress/components': 32.6.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/dataviews': 14.2.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
- '@wordpress/element': 6.44.0
- '@wordpress/i18n': 6.18.0
- react: 18.3.1
- transitivePeerDependencies:
- - '@date-fns/tz'
- - '@emotion/is-prop-valid'
- - '@types/react'
- - react-dom
- - stylelint
- - supports-color
-
'@wordpress/media-fields@0.9.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
dependencies:
'@wordpress/base-styles': 6.20.0
@@ -37669,7 +37815,7 @@ snapshots:
check-node-version: 4.2.1
clean-webpack-plugin: 3.0.0(webpack@5.97.1)
cross-spawn: 5.1.0
- css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ css-loader: 6.11.0(webpack@5.97.1)
cssnano: 5.1.12(postcss@8.4.49)
cwd: 0.10.0
dir-glob: 3.0.1
@@ -37684,7 +37830,7 @@ snapshots:
markdownlint: 0.23.1
markdownlint-cli: 0.27.1
merge-deep: 3.0.3
- mini-css-extract-plugin: 2.9.4(webpack@5.97.1(@swc/core@1.15.24))
+ mini-css-extract-plugin: 2.9.4(webpack@5.97.1)
minimist: 1.2.8
npm-package-json-lint: 5.4.2
postcss: 8.4.49
@@ -37730,7 +37876,7 @@ snapshots:
- utf-8-validate
- webpack-dev-server
- '@wordpress/scripts@27.9.0(@playwright/test@1.59.1)(@swc/core@1.15.24)(@types/eslint@9.6.1)(@types/node@24.12.2)(@types/webpack@4.41.40)(babel-plugin-macros@3.1.0)(encoding@0.1.13)(file-loader@6.2.0(webpack@5.97.1))(node-notifier@8.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))(type-fest@4.41.0)(typescript@5.7.3)(webpack-hot-middleware@2.26.1)':
+ '@wordpress/scripts@27.9.0(@playwright/test@1.59.1)(@swc/core@1.15.24)(@types/eslint@9.6.1)(@types/node@24.12.2)(@types/webpack@4.41.40)(babel-plugin-macros@3.1.0)(encoding@0.1.13)(esbuild@0.24.2)(file-loader@6.2.0(webpack@5.97.1))(node-notifier@8.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))(type-fest@4.41.0)(typescript@5.7.3)(webpack-hot-middleware@2.26.1)':
dependencies:
'@babel/core': 7.25.7
'@playwright/test': 1.59.1
@@ -37755,7 +37901,7 @@ snapshots:
clean-webpack-plugin: 3.0.0(webpack@5.97.1)
copy-webpack-plugin: 10.2.4(webpack@5.97.1)
cross-spawn: 5.1.0
- css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ css-loader: 6.11.0(webpack@5.97.1)
cssnano: 6.1.2(postcss@8.4.49)
cwd: 0.10.0
dir-glob: 3.0.1
@@ -37769,7 +37915,7 @@ snapshots:
jest-environment-node: 29.7.0
markdownlint-cli: 0.31.1
merge-deep: 3.0.3
- mini-css-extract-plugin: 2.9.4(webpack@5.97.1(@swc/core@1.15.24))
+ mini-css-extract-plugin: 2.9.4(webpack@5.97.1)
minimist: 1.2.8
npm-package-json-lint: 6.4.0(typescript@5.7.3)
npm-packlist: 3.0.0
@@ -37787,9 +37933,9 @@ snapshots:
sass-loader: 12.6.0(sass@1.69.5)(webpack@5.97.1)
source-map-loader: 3.0.2(webpack@5.97.1)
stylelint: 14.16.1
- terser-webpack-plugin: 5.4.0(@swc/core@1.15.24)(webpack@5.97.1(@swc/core@1.15.24))
+ terser-webpack-plugin: 5.4.0(@swc/core@1.15.24)(esbuild@0.24.2)(webpack@5.97.1)
url-loader: 4.1.1(file-loader@6.2.0(webpack@5.97.1))(webpack@5.97.1)
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
webpack-bundle-analyzer: 4.9.1
webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.1)(webpack-dev-server@4.15.2)(webpack@5.97.1)
webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.97.1)
@@ -37844,14 +37990,14 @@ snapshots:
'@wordpress/stylelint-config': 23.36.0(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint-scss@6.14.0(stylelint@16.26.1(typescript@5.7.3)))(stylelint@16.26.1(typescript@5.7.3))
adm-zip: 0.5.17
babel-jest: 29.7.0(@babel/core@7.25.7)
- babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1(@swc/core@1.15.24))
+ babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1)
browserslist: 4.28.2
chalk: 4.1.2
check-node-version: 4.2.1
clean-webpack-plugin: 3.0.0(webpack@5.97.1)
copy-webpack-plugin: 10.2.4(webpack@5.97.1)
cross-spawn: 7.0.6
- css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ css-loader: 6.11.0(webpack@5.97.1)
cssnano: 6.1.2(postcss@8.4.49)
cwd: 0.10.0
dir-glob: 3.0.1
@@ -37866,7 +38012,7 @@ snapshots:
json2php: 0.0.9
markdownlint-cli: 0.31.1
merge-deep: 3.0.3
- mini-css-extract-plugin: 2.9.4(webpack@5.97.1(@swc/core@1.15.24))
+ mini-css-extract-plugin: 2.9.4(webpack@5.97.1)
minimist: 1.2.8
npm-package-json-lint: 6.4.0(typescript@5.7.3)
npm-packlist: 3.0.0
@@ -37941,13 +38087,13 @@ snapshots:
'@wordpress/stylelint-config': 23.36.0(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint-scss@6.14.0(stylelint@14.16.1))(stylelint@16.26.1(typescript@5.7.3))
adm-zip: 0.5.17
babel-jest: 29.7.0(@babel/core@7.25.7)
- babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1(@swc/core@1.15.24))
+ babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1)
browserslist: 4.28.2
chalk: 4.1.2
check-node-version: 4.2.1
copy-webpack-plugin: 10.2.4(webpack@5.97.1)
cross-spawn: 7.0.6
- css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ css-loader: 6.11.0(webpack@5.97.1)
cssnano: 6.1.2(postcss@8.4.49)
cwd: 0.10.0
dir-glob: 3.0.1
@@ -37962,7 +38108,7 @@ snapshots:
json2php: 0.0.9
markdownlint-cli: 0.31.1
merge-deep: 3.0.3
- mini-css-extract-plugin: 2.9.4(webpack@5.97.1(@swc/core@1.15.24))
+ mini-css-extract-plugin: 2.9.4(webpack@5.97.1)
minimist: 1.2.8
npm-package-json-lint: 6.4.0(typescript@5.7.3)
npm-packlist: 3.0.0
@@ -37981,9 +38127,9 @@ snapshots:
schema-utils: 4.3.3
source-map-loader: 3.0.2(webpack@5.97.1)
stylelint: 16.26.1(typescript@5.7.3)
- terser-webpack-plugin: 5.4.0(@swc/core@1.15.24)(webpack@5.97.1(@swc/core@1.15.24))
+ terser-webpack-plugin: 5.4.0(@swc/core@1.15.24)(webpack@5.97.1)
url-loader: 4.1.1(file-loader@6.2.0(webpack@5.97.1))(webpack@5.97.1)
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)
webpack-bundle-analyzer: 4.9.1
webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.1)(webpack-dev-server@4.15.2)(webpack@5.97.1)
webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.97.1)
@@ -38037,14 +38183,14 @@ snapshots:
'@wordpress/stylelint-config': 21.41.0(postcss@8.4.49)(stylelint@16.26.1(typescript@5.7.3))
adm-zip: 0.5.17
babel-jest: 29.7.0(@babel/core@7.25.7)
- babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1(@swc/core@1.15.24))
+ babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1)
browserslist: 4.28.2
chalk: 4.1.2
check-node-version: 4.2.1
clean-webpack-plugin: 3.0.0(webpack@5.97.1)
copy-webpack-plugin: 10.2.4(webpack@5.97.1)
cross-spawn: 5.1.0
- css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
+ css-loader: 6.11.0(webpack@5.97.1)
cssnano: 6.1.2(postcss@8.4.49)
cwd: 0.10.0
dir-glob: 3.0.1
@@ -38059,7 +38205,7 @@ snapshots:
json2php: 0.0.9
markdownlint-cli: 0.31.1
merge-deep: 3.0.3
- mini-css-extract-plugin: 2.9.4(webpack@5.97.1(@swc/core@1.15.24))
+ mini-css-extract-plugin: 2.9.4(webpack@5.97.1)
minimist: 1.2.8
npm-package-json-lint: 6.4.0(typescript@5.7.3)
npm-packlist: 3.0.0
@@ -38078,9 +38224,9 @@ snapshots:
schema-utils: 4.3.3
source-map-loader: 3.0.2(webpack@5.97.1)
stylelint: 16.26.1(typescript@5.7.3)
- terser-webpack-plugin: 5.4.0(@swc/core@1.15.24)(webpack@5.97.1(@swc/core@1.15.24))
+ terser-webpack-plugin: 5.4.0(@swc/core@1.15.24)(webpack@5.97.1)
url-loader: 4.1.1(file-loader@6.2.0(webpack@5.97.1))(webpack@5.97.1)
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)
webpack-bundle-analyzer: 4.9.1
webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.1)(webpack-dev-server@4.15.2)(webpack@5.97.1)
webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.97.1)
@@ -38457,7 +38603,7 @@ snapshots:
'@wordpress/keycodes': 4.45.0
'@wordpress/primitives': 4.45.0(react@18.3.1)
'@wordpress/private-apis': 1.44.0
- '@wordpress/theme': 0.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+ '@wordpress/theme': 0.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
clsx: 2.1.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -38523,7 +38669,7 @@ snapshots:
'@wordpress/keycodes': 4.45.0
'@wordpress/primitives': 4.45.0(react@18.3.1)
'@wordpress/private-apis': 1.44.0
- '@wordpress/theme': 0.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+ '@wordpress/theme': 0.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
clsx: 2.1.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -38769,11 +38915,11 @@ snapshots:
dependencies:
'@wordpress/api-fetch': 7.44.0
'@wordpress/base-styles': 6.20.0
- '@wordpress/block-editor': 15.17.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+ '@wordpress/block-editor': 15.17.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
'@wordpress/blocks': 15.17.0(react@18.3.1)
'@wordpress/components': 32.6.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@wordpress/compose': 7.44.0(react@18.3.1)
- '@wordpress/core-data': 7.44.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+ '@wordpress/core-data': 7.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
'@wordpress/data': 10.44.0(react@18.3.1)
'@wordpress/element': 6.44.0
'@wordpress/i18n': 6.18.0
@@ -39704,9 +39850,16 @@ snapshots:
loader-utils: 2.0.4
make-dir: 3.1.0
schema-utils: 2.7.1
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.97.1(@swc/core@1.15.24)):
+ dependencies:
+ '@babel/core': 7.25.7
+ find-cache-dir: 4.0.0
+ schema-utils: 4.3.3
+ webpack: 5.97.1(@swc/core@1.15.24)
+
+ babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.97.1):
dependencies:
'@babel/core': 7.25.7
find-cache-dir: 4.0.0
@@ -40660,7 +40813,7 @@ snapshots:
dependencies:
'@types/webpack': 4.41.40
del: 4.1.1
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
cli-boxes@1.0.0: {}
@@ -41070,7 +41223,7 @@ snapshots:
normalize-path: 3.0.0
schema-utils: 4.3.3
serialize-javascript: 6.0.2
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
copy-webpack-plugin@13.0.1(webpack@5.97.1(@swc/core@1.15.24)):
dependencies:
@@ -41079,7 +41232,7 @@ snapshots:
schema-utils: 4.3.3
serialize-javascript: 6.0.2
tinyglobby: 0.2.16
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)
copy-webpack-plugin@13.0.1(webpack@5.97.1):
dependencies:
@@ -41088,7 +41241,7 @@ snapshots:
schema-utils: 4.3.3
serialize-javascript: 6.0.2
tinyglobby: 0.2.16
- webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.18.20)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
core-js-compat@3.49.0:
dependencies:
@@ -41311,6 +41464,19 @@ snapshots:
webpack: 4.47.0(webpack-cli@5.1.4)
css-loader@6.11.0(webpack@5.97.1(@swc/core@1.15.24)):
+ dependencies:
+ icss-utils: 5.1.0(postcss@8.4.49)
+ postcss: 8.4.49
+ postcss-modules-extract-imports: 3.1.0(postcss@8.4.49)
+ postcss-modules-local-by-default: 4.2.0(postcss@8.4.49)
+ postcss-modules-scope: 3.2.1(postcss@8.4.49)
+ postcss-modules-values: 4.0.0(postcss@8.4.49)
+ postcss-value-parser: 4.2.0
+ semver: 7.7.4
+ optionalDependencies:
+ webpack: 5.97.1(@swc/core@1.15.24)
+
+ css-loader@6.11.0(webpack@5.97.1):
dependencies:
icss-utils: 5.1.0(postcss@8.4.49)
postcss: 8.4.49
@@ -42403,6 +42569,34 @@ snapshots:
'@esbuild/win32-ia32': 0.18.20
'@esbuild/win32-x64': 0.18.20
+ esbuild@0.24.2:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.24.2
+ '@esbuild/android-arm': 0.24.2
+ '@esbuild/android-arm64': 0.24.2
+ '@esbuild/android-x64': 0.24.2
+ '@esbuild/darwin-arm64': 0.24.2
+ '@esbuild/darwin-x64': 0.24.2
+ '@esbuild/freebsd-arm64': 0.24.2
+ '@esbuild/freebsd-x64': 0.24.2
+ '@esbuild/linux-arm': 0.24.2
+ '@esbuild/linux-arm64': 0.24.2
+ '@esbuild/linux-ia32': 0.24.2
+ '@esbuild/linux-loong64': 0.24.2
+ '@esbuild/linux-mips64el': 0.24.2
+ '@esbuild/linux-ppc64': 0.24.2
+ '@esbuild/linux-riscv64': 0.24.2
+ '@esbuild/linux-s390x': 0.24.2
+ '@esbuild/linux-x64': 0.24.2
+ '@esbuild/netbsd-arm64': 0.24.2
+ '@esbuild/netbsd-x64': 0.24.2
+ '@esbuild/openbsd-arm64': 0.24.2
+ '@esbuild/openbsd-x64': 0.24.2
+ '@esbuild/sunos-x64': 0.24.2
+ '@esbuild/win32-arm64': 0.24.2
+ '@esbuild/win32-ia32': 0.24.2
+ '@esbuild/win32-x64': 0.24.2
+
escalade@3.2.0: {}
escape-html@1.0.3: {}
@@ -43581,7 +43775,7 @@ snapshots:
dependencies:
loader-utils: 2.0.4
schema-utils: 3.3.0
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
optional: true
file-sync-cmp@0.1.1: {}
@@ -43844,7 +44038,7 @@ snapshots:
semver: 7.7.4
tapable: 2.3.2
typescript: 5.7.3
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)
fork-ts-checker-webpack-plugin@8.0.0(typescript@5.7.3)(webpack@5.97.1):
dependencies:
@@ -43878,7 +44072,7 @@ snapshots:
semver: 7.7.4
tapable: 2.3.2
typescript: 5.7.3
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)
form-data@2.3.3:
dependencies:
@@ -44223,7 +44417,7 @@ snapshots:
dependencies:
inflight: 1.0.6
inherits: 2.0.4
- minimatch: 3.0.8
+ minimatch: 3.1.5
once: 1.4.0
path-is-absolute: 1.0.1
@@ -44232,7 +44426,7 @@ snapshots:
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
- minimatch: 3.0.8
+ minimatch: 3.1.5
once: 1.4.0
path-is-absolute: 1.0.1
@@ -44911,7 +45105,7 @@ snapshots:
pretty-error: 4.0.0
tapable: 2.3.2
optionalDependencies:
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)
html-webpack-plugin@5.6.6(webpack@5.97.1):
dependencies:
@@ -47933,6 +48127,12 @@ snapshots:
min-indent@1.0.1: {}
mini-css-extract-plugin@2.9.4(webpack@5.97.1(@swc/core@1.15.24)):
+ dependencies:
+ schema-utils: 4.3.3
+ tapable: 2.3.2
+ webpack: 5.97.1(@swc/core@1.15.24)
+
+ mini-css-extract-plugin@2.9.4(webpack@5.97.1):
dependencies:
schema-utils: 4.3.3
tapable: 2.3.2
@@ -49503,7 +49703,17 @@ snapshots:
postcss: 8.4.49
schema-utils: 3.3.0
semver: 7.7.4
- webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.18.20)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+
+ postcss-loader@4.3.0(postcss@8.5.9)(webpack@5.97.1(@swc/core@1.15.24)):
+ dependencies:
+ cosmiconfig: 7.1.0
+ klona: 2.0.6
+ loader-utils: 2.0.4
+ postcss: 8.5.9
+ schema-utils: 3.3.0
+ semver: 7.7.4
+ webpack: 5.97.1(@swc/core@1.15.24)
postcss-loader@4.3.0(postcss@8.5.9)(webpack@5.97.1):
dependencies:
@@ -49513,7 +49723,7 @@ snapshots:
postcss: 8.5.9
schema-utils: 3.3.0
semver: 7.7.4
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
postcss-loader@6.2.1(postcss@8.4.49)(webpack@5.97.1):
dependencies:
@@ -49521,7 +49731,7 @@ snapshots:
klona: 2.0.6
postcss: 8.4.49
semver: 7.7.4
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
postcss-media-query-parser@0.2.3: {}
@@ -51466,7 +51676,7 @@ snapshots:
neo-async: 2.6.2
schema-utils: 3.3.0
semver: 7.7.4
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)
optionalDependencies:
sass: 1.69.5
@@ -51477,7 +51687,7 @@ snapshots:
neo-async: 2.6.2
schema-utils: 3.3.0
semver: 7.7.4
- webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.18.20)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
optionalDependencies:
sass: 1.69.5
@@ -51485,7 +51695,7 @@ snapshots:
dependencies:
klona: 2.0.6
neo-async: 2.6.2
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
optionalDependencies:
sass: 1.69.5
@@ -51955,7 +52165,7 @@ snapshots:
abab: 2.0.6
iconv-lite: 0.6.3
source-map-js: 1.2.1
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
source-map-resolve@0.5.3:
dependencies:
@@ -52372,7 +52582,7 @@ snapshots:
style-loader@3.3.4(webpack@5.97.1(@swc/core@1.15.24)):
dependencies:
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)
style-loader@3.3.4(webpack@5.97.1):
dependencies:
@@ -52765,7 +52975,7 @@ snapshots:
dependencies:
'@swc/core': 1.15.24
'@swc/counter': 0.1.3
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)
swc-loader@0.2.7(@swc/core@1.15.24)(webpack@5.97.1):
dependencies:
@@ -53002,6 +53212,17 @@ snapshots:
'@swc/core': 1.15.24
esbuild: 0.18.20
+ terser-webpack-plugin@5.4.0(@swc/core@1.15.24)(esbuild@0.24.2)(webpack@5.97.1):
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ jest-worker: 27.5.1
+ schema-utils: 4.3.3
+ terser: 5.46.1
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
+ optionalDependencies:
+ '@swc/core': 1.15.24
+ esbuild: 0.24.2
+
terser-webpack-plugin@5.4.0(@swc/core@1.15.24)(uglify-js@3.19.3)(webpack@5.97.1):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
@@ -53014,6 +53235,16 @@ snapshots:
uglify-js: 3.19.3
terser-webpack-plugin@5.4.0(@swc/core@1.15.24)(webpack@5.97.1(@swc/core@1.15.24)):
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ jest-worker: 27.5.1
+ schema-utils: 4.3.3
+ terser: 5.46.1
+ webpack: 5.97.1(@swc/core@1.15.24)
+ optionalDependencies:
+ '@swc/core': 1.15.24
+
+ terser-webpack-plugin@5.4.0(@swc/core@1.15.24)(webpack@5.97.1):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
jest-worker: 27.5.1
@@ -53218,7 +53449,7 @@ snapshots:
ts-dedent@2.2.0: {}
- ts-jest@29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.5.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3):
+ ts-jest@29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.5.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3):
dependencies:
bs-logger: 0.2.6
fast-json-stable-stringify: 2.1.0
@@ -53235,6 +53466,26 @@ snapshots:
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
babel-jest: 29.5.0(@babel/core@7.25.7)
+ esbuild: 0.24.2
+
+ ts-jest@29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(esbuild@0.24.2)(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3):
+ dependencies:
+ bs-logger: 0.2.6
+ fast-json-stable-stringify: 2.1.0
+ jest: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
+ jest-util: 29.7.0
+ json5: 2.2.3
+ lodash.memoize: 4.1.2
+ make-error: 1.3.6
+ semver: 7.7.4
+ typescript: 5.7.3
+ yargs-parser: 21.1.1
+ optionalDependencies:
+ '@babel/core': 7.25.7
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ babel-jest: 29.7.0(@babel/core@7.25.7)
+ esbuild: 0.24.2
ts-jest@29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3):
dependencies:
@@ -53692,7 +53943,7 @@ snapshots:
loader-utils: 2.0.4
mime-types: 2.1.35
schema-utils: 3.3.0
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
optionalDependencies:
file-loader: 6.2.0(webpack@5.97.1)
@@ -54071,11 +54322,11 @@ snapshots:
import-local: 3.2.0
interpret: 3.1.1
rechoir: 0.8.0
- webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.18.20)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
webpack-merge: 5.10.0
optionalDependencies:
webpack-bundle-analyzer: 4.9.1
- webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.97.1)
+ webpack-dev-server: 4.15.2(debug@4.4.3)(webpack-cli@5.1.4)(webpack@5.97.1)
webpack-cli@5.1.4(webpack-dev-server@4.15.2)(webpack@5.97.1):
dependencies:
@@ -54091,7 +54342,7 @@ snapshots:
import-local: 3.2.0
interpret: 3.1.1
rechoir: 0.8.0
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
webpack-merge: 5.10.0
optionalDependencies:
webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.97.1)
@@ -54123,6 +54374,16 @@ snapshots:
webpack-log: 2.0.0
webpack-dev-middleware@5.3.4(webpack@5.97.1(@swc/core@1.15.24)):
+ dependencies:
+ colorette: 2.0.20
+ memfs: 3.5.3
+ mime-types: 2.1.35
+ range-parser: 1.2.1
+ schema-utils: 4.3.3
+ webpack: 5.97.1(@swc/core@1.15.24)
+ optional: true
+
+ webpack-dev-middleware@5.3.4(webpack@5.97.1):
dependencies:
colorette: 2.0.20
memfs: 3.5.3
@@ -54139,7 +54400,7 @@ snapshots:
range-parser: 1.2.1
schema-utils: 4.3.3
optionalDependencies:
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)
webpack-dev-middleware@6.1.3(webpack@5.97.1):
dependencies:
@@ -54181,7 +54442,7 @@ snapshots:
serve-index: 1.9.2
sockjs: 0.3.24
spdy: 4.0.2
- webpack-dev-middleware: 5.3.4(webpack@5.97.1(@swc/core@1.15.24))
+ webpack-dev-middleware: 5.3.4(webpack@5.97.1)
ws: 8.20.0
optionalDependencies:
webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
@@ -54222,10 +54483,10 @@ snapshots:
serve-index: 1.9.2
sockjs: 0.3.24
spdy: 4.0.2
- webpack-dev-middleware: 5.3.4(webpack@5.97.1(@swc/core@1.15.24))
+ webpack-dev-middleware: 5.3.4(webpack@5.97.1)
ws: 8.20.0
optionalDependencies:
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
webpack-cli: 5.1.4(webpack-dev-server@4.15.2)(webpack@5.97.1)
transitivePeerDependencies:
- bufferutil
@@ -54233,6 +54494,47 @@ snapshots:
- supports-color
- utf-8-validate
+ webpack-dev-server@4.15.2(webpack@5.97.1(@swc/core@1.15.24)):
+ dependencies:
+ '@types/bonjour': 3.5.13
+ '@types/connect-history-api-fallback': 1.5.4
+ '@types/express': 4.17.25
+ '@types/serve-index': 1.9.4
+ '@types/serve-static': 1.15.10
+ '@types/sockjs': 0.3.36
+ '@types/ws': 8.18.1
+ ansi-html-community: 0.0.8
+ bonjour-service: 1.3.0
+ chokidar: 3.6.0
+ colorette: 2.0.20
+ compression: 1.8.1
+ connect-history-api-fallback: 2.0.0
+ default-gateway: 6.0.3
+ express: 4.22.1
+ graceful-fs: 4.2.11
+ html-entities: 2.6.0
+ http-proxy-middleware: 2.0.9(@types/express@4.17.25)(debug@4.4.3)
+ ipaddr.js: 2.3.0
+ launch-editor: 2.13.2
+ open: 8.4.2
+ p-retry: 4.6.2
+ rimraf: 3.0.2
+ schema-utils: 4.3.3
+ selfsigned: 2.4.1
+ serve-index: 1.9.2
+ sockjs: 0.3.24
+ spdy: 4.0.2
+ webpack-dev-middleware: 5.3.4(webpack@5.97.1(@swc/core@1.15.24))
+ ws: 8.20.0
+ optionalDependencies:
+ webpack: 5.97.1(@swc/core@1.15.24)
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ optional: true
+
webpack-filter-warnings-plugin@1.2.1(webpack@4.47.0(webpack-cli@5.1.4)):
dependencies:
webpack: 4.47.0(webpack-cli@5.1.4)
@@ -54269,7 +54571,12 @@ snapshots:
webpack-remove-empty-scripts@1.0.4(webpack@5.97.1(@swc/core@1.15.24)):
dependencies:
ansis: 1.5.2
- webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.15.24)
+
+ webpack-remove-empty-scripts@1.0.4(webpack@5.97.1):
+ dependencies:
+ ansis: 1.5.2
+ webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4)
webpack-sources@1.4.3:
dependencies:
@@ -54318,6 +54625,36 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ webpack@5.97.1(@swc/core@1.15.24):
+ dependencies:
+ '@types/eslint-scope': 3.7.7
+ '@types/estree': 1.0.8
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/wasm-edit': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+ acorn: 8.16.0
+ browserslist: 4.28.2
+ chrome-trace-event: 1.0.4
+ enhanced-resolve: 5.20.1
+ es-module-lexer: 1.7.0
+ eslint-scope: 5.1.1
+ events: 3.3.0
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+ json-parse-even-better-errors: 2.3.1
+ loader-runner: 4.3.1
+ mime-types: 2.1.35
+ neo-async: 2.6.2
+ schema-utils: 3.3.0
+ tapable: 2.3.2
+ terser-webpack-plugin: 5.4.0(@swc/core@1.15.24)(webpack@5.97.1(@swc/core@1.15.24))
+ watchpack: 2.5.1
+ webpack-sources: 3.3.4
+ transitivePeerDependencies:
+ - '@swc/core'
+ - esbuild
+ - uglify-js
+
webpack@5.97.1(@swc/core@1.15.24)(esbuild@0.18.20)(webpack-cli@5.1.4):
dependencies:
'@types/eslint-scope': 3.7.7
@@ -54350,6 +54687,38 @@ snapshots:
- esbuild
- uglify-js
+ webpack@5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)(webpack-cli@5.1.4):
+ dependencies:
+ '@types/eslint-scope': 3.7.7
+ '@types/estree': 1.0.8
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/wasm-edit': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+ acorn: 8.16.0
+ browserslist: 4.28.2
+ chrome-trace-event: 1.0.4
+ enhanced-resolve: 5.20.1
+ es-module-lexer: 1.7.0
+ eslint-scope: 5.1.1
+ events: 3.3.0
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+ json-parse-even-better-errors: 2.3.1
+ loader-runner: 4.3.1
+ mime-types: 2.1.35
+ neo-async: 2.6.2
+ schema-utils: 3.3.0
+ tapable: 2.3.2
+ terser-webpack-plugin: 5.4.0(@swc/core@1.15.24)(esbuild@0.24.2)(webpack@5.97.1)
+ watchpack: 2.5.1
+ webpack-sources: 3.3.4
+ optionalDependencies:
+ webpack-cli: 5.1.4(webpack@5.97.1)
+ transitivePeerDependencies:
+ - '@swc/core'
+ - esbuild
+ - uglify-js
+
webpack@5.97.1(@swc/core@1.15.24)(uglify-js@3.19.3)(webpack-cli@4.10.0):
dependencies:
'@types/eslint-scope': 3.7.7
@@ -54404,7 +54773,7 @@ snapshots:
neo-async: 2.6.2
schema-utils: 3.3.0
tapable: 2.3.2
- terser-webpack-plugin: 5.4.0(@swc/core@1.15.24)(webpack@5.97.1(@swc/core@1.15.24))
+ terser-webpack-plugin: 5.4.0(@swc/core@1.15.24)(webpack@5.97.1)
watchpack: 2.5.1
webpack-sources: 3.3.4
optionalDependencies: