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"
 				]
 			}
 		}