Commit a8b584f3dda for woocommerce
commit a8b584f3dda0da8843564e71c37349a0b1b511e0
Author: Manzoor Wani <manzoorwani.jk@gmail.com>
Date: Wed Jul 22 10:42:43 2026 +0530
Consolidate the shared ESLint import/core-modules list (#66784)
* Add shared coreModules list to @woocommerce/eslint-config
Hoist the monorepo's shared import/core-modules specifiers (webpack /
WordPress-provided externals) into a new core-modules.js so package
configs have one source of truth instead of drifting per-package copies.
* Consume shared coreModules across package ESLint configs
Replace the hand-maintained import/core-modules arrays in client/admin and
the packages/js/* configs with the shared list, keeping only each package's
specific extras. Tooling only; no runtime change.
* Drop stale @woocommerce/product-editor from shared coreModules
The package was removed in #65500; the entry was inherited from
client/admin's list. Nothing imports it, so the whitelist entry was inert.
diff --git a/packages/js/admin-layout/changelog/consolidate-eslint-core-modules b/packages/js/admin-layout/changelog/consolidate-eslint-core-modules
new file mode 100644
index 00000000000..4ce5e15a51f
--- /dev/null
+++ b/packages/js/admin-layout/changelog/consolidate-eslint-core-modules
@@ -0,0 +1,3 @@
+Significance: patch
+Type: dev
+Comment: Consolidate the shared `import/core-modules` list into `@woocommerce/eslint-config`. Tooling only; no runtime change.
diff --git a/packages/js/admin-layout/eslint.config.mjs b/packages/js/admin-layout/eslint.config.mjs
index b216b2721b8..3110d5fb30e 100644
--- a/packages/js/admin-layout/eslint.config.mjs
+++ b/packages/js/admin-layout/eslint.config.mjs
@@ -2,12 +2,13 @@
* Internal dependencies
*/
import woocommerce from '@woocommerce/eslint-config';
+import { coreModules } from '@woocommerce/eslint-config/core-modules.js';
export default [
...woocommerce,
{
settings: {
- 'import/core-modules': [ '@woocommerce/components' ],
+ 'import/core-modules': [ ...coreModules ],
'import/resolver': {
node: {},
webpack: {},
diff --git a/packages/js/components/changelog/consolidate-eslint-core-modules b/packages/js/components/changelog/consolidate-eslint-core-modules
new file mode 100644
index 00000000000..4ce5e15a51f
--- /dev/null
+++ b/packages/js/components/changelog/consolidate-eslint-core-modules
@@ -0,0 +1,3 @@
+Significance: patch
+Type: dev
+Comment: Consolidate the shared `import/core-modules` list into `@woocommerce/eslint-config`. Tooling only; no runtime change.
diff --git a/packages/js/components/eslint.config.mjs b/packages/js/components/eslint.config.mjs
index 1c365e84e13..c7f9a9d5abf 100644
--- a/packages/js/components/eslint.config.mjs
+++ b/packages/js/components/eslint.config.mjs
@@ -7,6 +7,7 @@ import { globalIgnores } from 'eslint/config';
* Internal dependencies
*/
import woocommerce from '@woocommerce/eslint-config';
+import { coreModules } from '@woocommerce/eslint-config/core-modules.js';
export default [
...woocommerce,
@@ -14,17 +15,9 @@ export default [
{
settings: {
'import/core-modules': [
- '@woocommerce/components',
- '@woocommerce/currency',
- '@woocommerce/data',
- '@woocommerce/date',
- '@woocommerce/navigation',
+ ...coreModules,
'@storybook/react',
'@automattic/tour-kit',
- '@wordpress/blocks',
- '@wordpress/components',
- '@wordpress/element',
- '@wordpress/media-utils',
'dompurify',
'downshift',
'moment',
diff --git a/packages/js/currency/changelog/consolidate-eslint-core-modules b/packages/js/currency/changelog/consolidate-eslint-core-modules
new file mode 100644
index 00000000000..4ce5e15a51f
--- /dev/null
+++ b/packages/js/currency/changelog/consolidate-eslint-core-modules
@@ -0,0 +1,3 @@
+Significance: patch
+Type: dev
+Comment: Consolidate the shared `import/core-modules` list into `@woocommerce/eslint-config`. Tooling only; no runtime change.
diff --git a/packages/js/currency/eslint.config.mjs b/packages/js/currency/eslint.config.mjs
index e24aa9de950..6c3fb170819 100644
--- a/packages/js/currency/eslint.config.mjs
+++ b/packages/js/currency/eslint.config.mjs
@@ -2,15 +2,13 @@
* Internal dependencies
*/
import woocommerce from '@woocommerce/eslint-config';
+import { coreModules } from '@woocommerce/eslint-config/core-modules.js';
export default [
...woocommerce,
{
settings: {
- 'import/core-modules': [
- '@woocommerce/number',
- '@woocommerce/settings',
- ],
+ 'import/core-modules': [ ...coreModules ],
'import/resolver': {
node: {},
typescript: {},
diff --git a/packages/js/customer-effort-score/changelog/consolidate-eslint-core-modules b/packages/js/customer-effort-score/changelog/consolidate-eslint-core-modules
new file mode 100644
index 00000000000..4ce5e15a51f
--- /dev/null
+++ b/packages/js/customer-effort-score/changelog/consolidate-eslint-core-modules
@@ -0,0 +1,3 @@
+Significance: patch
+Type: dev
+Comment: Consolidate the shared `import/core-modules` list into `@woocommerce/eslint-config`. Tooling only; no runtime change.
diff --git a/packages/js/customer-effort-score/eslint.config.mjs b/packages/js/customer-effort-score/eslint.config.mjs
index 735f86d894d..035c6b0ce12 100644
--- a/packages/js/customer-effort-score/eslint.config.mjs
+++ b/packages/js/customer-effort-score/eslint.config.mjs
@@ -2,16 +2,14 @@
* Internal dependencies
*/
import woocommerce from '@woocommerce/eslint-config';
+import { coreModules } from '@woocommerce/eslint-config/core-modules.js';
export default [
...woocommerce,
{
settings: {
'import/core-modules': [
- '@woocommerce/data',
- '@woocommerce/experimental',
- '@woocommerce/navigation',
- '@woocommerce/tracks',
+ ...coreModules,
'@testing-library/react',
],
'import/resolver': {
diff --git a/packages/js/data/changelog/consolidate-eslint-core-modules b/packages/js/data/changelog/consolidate-eslint-core-modules
new file mode 100644
index 00000000000..4ce5e15a51f
--- /dev/null
+++ b/packages/js/data/changelog/consolidate-eslint-core-modules
@@ -0,0 +1,3 @@
+Significance: patch
+Type: dev
+Comment: Consolidate the shared `import/core-modules` list into `@woocommerce/eslint-config`. Tooling only; no runtime change.
diff --git a/packages/js/data/eslint.config.mjs b/packages/js/data/eslint.config.mjs
index 7b045d6966c..6c11e69e419 100644
--- a/packages/js/data/eslint.config.mjs
+++ b/packages/js/data/eslint.config.mjs
@@ -2,18 +2,15 @@
* Internal dependencies
*/
import woocommerce from '@woocommerce/eslint-config';
+import { coreModules } from '@woocommerce/eslint-config/core-modules.js';
export default [
...woocommerce,
{
settings: {
'import/core-modules': [
- '@woocommerce/date',
- '@woocommerce/navigation',
- '@woocommerce/tracks',
+ ...coreModules,
'@wordpress/api-fetch',
- '@wordpress/core-data',
- '@wordpress/data',
'redux',
],
'import/resolver': {
diff --git a/packages/js/email-editor/changelog/consolidate-eslint-core-modules b/packages/js/email-editor/changelog/consolidate-eslint-core-modules
new file mode 100644
index 00000000000..4ce5e15a51f
--- /dev/null
+++ b/packages/js/email-editor/changelog/consolidate-eslint-core-modules
@@ -0,0 +1,3 @@
+Significance: patch
+Type: dev
+Comment: Consolidate the shared `import/core-modules` list into `@woocommerce/eslint-config`. Tooling only; no runtime change.
diff --git a/packages/js/email-editor/eslint.config.mjs b/packages/js/email-editor/eslint.config.mjs
index 5d0d1257c0a..de1a7a5b69d 100644
--- a/packages/js/email-editor/eslint.config.mjs
+++ b/packages/js/email-editor/eslint.config.mjs
@@ -2,24 +2,17 @@
* Internal dependencies
*/
import woocommerce from '@woocommerce/eslint-config';
+import { coreModules } from '@woocommerce/eslint-config/core-modules.js';
export default [
...woocommerce,
{
settings: {
'import/core-modules': [
- '@wordpress/blocks',
- '@wordpress/block-editor',
- '@wordpress/components',
- '@wordpress/core-data',
+ ...coreModules,
'@wordpress/date',
- '@wordpress/data',
'@wordpress/data-controls',
- '@wordpress/editor',
- '@wordpress/element',
'@wordpress/keycodes',
- '@wordpress/media-utils',
- '@wordpress/notices',
'@wordpress/hooks',
'@wordpress/preferences',
],
diff --git a/packages/js/experimental-products-app/changelog/consolidate-eslint-core-modules b/packages/js/experimental-products-app/changelog/consolidate-eslint-core-modules
new file mode 100644
index 00000000000..4ce5e15a51f
--- /dev/null
+++ b/packages/js/experimental-products-app/changelog/consolidate-eslint-core-modules
@@ -0,0 +1,3 @@
+Significance: patch
+Type: dev
+Comment: Consolidate the shared `import/core-modules` list into `@woocommerce/eslint-config`. Tooling only; no runtime change.
diff --git a/packages/js/experimental-products-app/eslint.config.mjs b/packages/js/experimental-products-app/eslint.config.mjs
index 8a8f02558f9..9128218ebc3 100644
--- a/packages/js/experimental-products-app/eslint.config.mjs
+++ b/packages/js/experimental-products-app/eslint.config.mjs
@@ -2,21 +2,16 @@
* Internal dependencies
*/
import woocommerce from '@woocommerce/eslint-config';
+import { coreModules } from '@woocommerce/eslint-config/core-modules.js';
export default [
...woocommerce,
{
settings: {
'import/core-modules': [
- '@woocommerce/data',
- '@woocommerce/settings',
- '@wordpress/components',
+ ...coreModules,
'@wordpress/compose',
- '@wordpress/core-data',
- '@wordpress/data',
'@wordpress/dataviews',
- '@wordpress/editor',
- '@wordpress/element',
'@wordpress/html-entities',
'@wordpress/i18n',
'@wordpress/icons',
diff --git a/packages/js/experimental/changelog/consolidate-eslint-core-modules b/packages/js/experimental/changelog/consolidate-eslint-core-modules
new file mode 100644
index 00000000000..4ce5e15a51f
--- /dev/null
+++ b/packages/js/experimental/changelog/consolidate-eslint-core-modules
@@ -0,0 +1,3 @@
+Significance: patch
+Type: dev
+Comment: Consolidate the shared `import/core-modules` list into `@woocommerce/eslint-config`. Tooling only; no runtime change.
diff --git a/packages/js/experimental/eslint.config.mjs b/packages/js/experimental/eslint.config.mjs
index 2b0baa42691..fc88b62d8db 100644
--- a/packages/js/experimental/eslint.config.mjs
+++ b/packages/js/experimental/eslint.config.mjs
@@ -2,14 +2,14 @@
* Internal dependencies
*/
import woocommerce from '@woocommerce/eslint-config';
+import { coreModules } from '@woocommerce/eslint-config/core-modules.js';
export default [
...woocommerce,
{
settings: {
'import/core-modules': [
- '@woocommerce/components',
- '@wordpress/components',
+ ...coreModules,
'@storybook/react',
'react-transition-group/CSSTransition',
'dompurify',
diff --git a/packages/js/onboarding/changelog/consolidate-eslint-core-modules b/packages/js/onboarding/changelog/consolidate-eslint-core-modules
new file mode 100644
index 00000000000..4ce5e15a51f
--- /dev/null
+++ b/packages/js/onboarding/changelog/consolidate-eslint-core-modules
@@ -0,0 +1,3 @@
+Significance: patch
+Type: dev
+Comment: Consolidate the shared `import/core-modules` list into `@woocommerce/eslint-config`. Tooling only; no runtime change.
diff --git a/packages/js/onboarding/eslint.config.mjs b/packages/js/onboarding/eslint.config.mjs
index 0658b3a6d13..3110d5fb30e 100644
--- a/packages/js/onboarding/eslint.config.mjs
+++ b/packages/js/onboarding/eslint.config.mjs
@@ -2,16 +2,13 @@
* Internal dependencies
*/
import woocommerce from '@woocommerce/eslint-config';
+import { coreModules } from '@woocommerce/eslint-config/core-modules.js';
export default [
...woocommerce,
{
settings: {
- 'import/core-modules': [
- '@woocommerce/experimental',
- '@woocommerce/components',
- '@woocommerce/tracks',
- ],
+ 'import/core-modules': [ ...coreModules ],
'import/resolver': {
node: {},
webpack: {},
diff --git a/packages/js/remote-logging/changelog/consolidate-eslint-core-modules b/packages/js/remote-logging/changelog/consolidate-eslint-core-modules
new file mode 100644
index 00000000000..4ce5e15a51f
--- /dev/null
+++ b/packages/js/remote-logging/changelog/consolidate-eslint-core-modules
@@ -0,0 +1,3 @@
+Significance: patch
+Type: dev
+Comment: Consolidate the shared `import/core-modules` list into `@woocommerce/eslint-config`. Tooling only; no runtime change.
diff --git a/packages/js/remote-logging/eslint.config.mjs b/packages/js/remote-logging/eslint.config.mjs
index d3346d726d8..e91bcde08c3 100644
--- a/packages/js/remote-logging/eslint.config.mjs
+++ b/packages/js/remote-logging/eslint.config.mjs
@@ -7,13 +7,14 @@ import { globalIgnores } from 'eslint/config';
* Internal dependencies
*/
import woocommerce from '@woocommerce/eslint-config';
+import { coreModules } from '@woocommerce/eslint-config/core-modules.js';
export default [
...woocommerce,
globalIgnores( [ '**/test/*.ts', '**/test/*.tsx' ] ),
{
settings: {
- 'import/core-modules': [ '@woocommerce/settings' ],
+ 'import/core-modules': [ ...coreModules ],
'import/resolver': {
node: {},
typescript: {},
diff --git a/plugins/woocommerce/changelog/consolidate-eslint-core-modules b/plugins/woocommerce/changelog/consolidate-eslint-core-modules
new file mode 100644
index 00000000000..4ce5e15a51f
--- /dev/null
+++ b/plugins/woocommerce/changelog/consolidate-eslint-core-modules
@@ -0,0 +1,3 @@
+Significance: patch
+Type: dev
+Comment: Consolidate the shared `import/core-modules` list into `@woocommerce/eslint-config`. Tooling only; no runtime change.
diff --git a/plugins/woocommerce/client/admin/eslint.config.mjs b/plugins/woocommerce/client/admin/eslint.config.mjs
index 2536e03546a..19205bb1c6b 100644
--- a/plugins/woocommerce/client/admin/eslint.config.mjs
+++ b/plugins/woocommerce/client/admin/eslint.config.mjs
@@ -7,6 +7,7 @@ import { globalIgnores } from 'eslint/config';
* Internal dependencies
*/
import woocommerce from '@woocommerce/eslint-config';
+import { coreModules } from '@woocommerce/eslint-config/core-modules.js';
export default [
// node_modules is ignored by default. `api` has its own config and command.
@@ -34,29 +35,8 @@ export default [
{
settings: {
'import/core-modules': [
- '@woocommerce/admin-layout',
- '@woocommerce/components',
- '@woocommerce/customer-effort-score',
- '@woocommerce/currency',
- '@woocommerce/csv-export',
- '@woocommerce/data',
- '@woocommerce/date',
- '@woocommerce/explat',
- '@woocommerce/internal-js-tests',
- '@woocommerce/navigation',
- '@woocommerce/number',
- '@woocommerce/onboarding',
- '@woocommerce/product-editor',
- '@woocommerce/settings',
- '@woocommerce/tracks',
- '@woocommerce/experimental',
- '@wordpress/components',
- '@wordpress/core-data',
- '@wordpress/element',
- '@wordpress/blocks',
- '@wordpress/block-editor',
+ ...coreModules,
'@wordpress/block-library',
- '@wordpress/notices',
'dompurify',
'@react-spring/web',
'react-router-dom',
diff --git a/tools/eslint-config/core-modules.js b/tools/eslint-config/core-modules.js
new file mode 100644
index 00000000000..707783a2ec6
--- /dev/null
+++ b/tools/eslint-config/core-modules.js
@@ -0,0 +1,45 @@
+/*
+ * Shared `import/core-modules` list for the monorepo's package ESLint configs.
+ *
+ * These specifiers are webpack externals or WordPress-provided globals resolved
+ * at runtime (`window.wc.*` / `window.wp.*`), so they never resolve on disk.
+ * Listing them here stops `import/no-unresolved` and
+ * `import/no-extraneous-dependencies` firing on every such import, and gives the
+ * package configs one source of truth instead of drifting per-package copies.
+ *
+ * It holds the monorepo `@woocommerce/*` siblings plus the `@wordpress/*`
+ * packages that recur across multiple configs. Package-specific specifiers
+ * (one-off `@wordpress/*` and third-party externals) stay in the consuming
+ * config, spread after this list.
+ */
+const coreModules = [
+ // Monorepo @woocommerce/* siblings (webpack externals / aliases).
+ '@woocommerce/admin-layout',
+ '@woocommerce/components',
+ '@woocommerce/csv-export',
+ '@woocommerce/currency',
+ '@woocommerce/customer-effort-score',
+ '@woocommerce/data',
+ '@woocommerce/date',
+ '@woocommerce/experimental',
+ '@woocommerce/explat',
+ '@woocommerce/internal-js-tests',
+ '@woocommerce/navigation',
+ '@woocommerce/number',
+ '@woocommerce/onboarding',
+ '@woocommerce/settings',
+ '@woocommerce/tracks',
+
+ // @wordpress/* packages used across multiple package configs.
+ '@wordpress/block-editor',
+ '@wordpress/blocks',
+ '@wordpress/components',
+ '@wordpress/core-data',
+ '@wordpress/data',
+ '@wordpress/editor',
+ '@wordpress/element',
+ '@wordpress/media-utils',
+ '@wordpress/notices',
+];
+
+module.exports = { coreModules };
diff --git a/tools/eslint-config/package.json b/tools/eslint-config/package.json
index 3607f1162ca..b1b3a801e75 100644
--- a/tools/eslint-config/package.json
+++ b/tools/eslint-config/package.json
@@ -10,13 +10,14 @@
},
"main": "index.js",
"files": [
- "index.js"
+ "index.js",
+ "core-modules.js"
],
"scripts": {
"lint": "pnpm --if-present '/^lint:lang:.*$/'",
"lint:fix": "pnpm --if-present '/^lint:fix:lang:.*$/'",
- "lint:lang:js": "eslint ./index.js",
- "lint:fix:lang:js": "eslint ./index.js --fix"
+ "lint:lang:js": "eslint ./index.js ./core-modules.js",
+ "lint:fix:lang:js": "eslint ./index.js ./core-modules.js --fix"
},
"dependencies": {
"@woocommerce/eslint-plugin": "workspace:*"
@@ -29,7 +30,8 @@
"lint": {
"command": "lint",
"changes": [
- "index.js"
+ "index.js",
+ "core-modules.js"
]
}
}