From 95fd97f3c103fe4c48e8709a9f0c59e5cad1b3a9 Mon Sep 17 00:00:00 2001 From: Tomasz Kajtoch Date: Wed, 13 May 2026 01:23:25 +0200 Subject: [PATCH 1/5] build: setup the internal `@elastic/eui-config-tsconfig` package with common TS config --- packages/config-tsconfig/README.md | 17 +++++++++++++++++ packages/config-tsconfig/package.json | 14 ++++++++++++++ packages/config-tsconfig/tsconfig.json | 21 +++++++++++++++++++++ yarn.lock | 6 ++++++ 4 files changed, 58 insertions(+) create mode 100644 packages/config-tsconfig/README.md create mode 100644 packages/config-tsconfig/package.json create mode 100644 packages/config-tsconfig/tsconfig.json diff --git a/packages/config-tsconfig/README.md b/packages/config-tsconfig/README.md new file mode 100644 index 000000000000..37812cd58e54 --- /dev/null +++ b/packages/config-tsconfig/README.md @@ -0,0 +1,17 @@ +# `@elastic/eui-config-tsconfig` + +**This is an internal shared configuration package.** + +Base TypeScript configuration for EUI monorepo packages. + +## Usage + +1. Add the following to your package's `tsconfig.json`: + + ```json + { + "extends": "@elastic/eui-config-tsconfig" + } + ``` + +2. Configure `include`, `exclude` and other fields as needed. diff --git a/packages/config-tsconfig/package.json b/packages/config-tsconfig/package.json new file mode 100644 index 000000000000..1f9d772ab8f1 --- /dev/null +++ b/packages/config-tsconfig/package.json @@ -0,0 +1,14 @@ +{ + "name": "@elastic/eui-config-tsconfig", + "version": "0.0.0", + "private": true, + "repository": { + "type": "git", + "url": "https://github.com/elastic/eui.git", + "directory": "packages/config-tsconfig" + }, + "files": [ + "tsconfig.json" + ], + "main": "tsconfig.json" +} diff --git a/packages/config-tsconfig/tsconfig.json b/packages/config-tsconfig/tsconfig.json new file mode 100644 index 000000000000..95346dc28d92 --- /dev/null +++ b/packages/config-tsconfig/tsconfig.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "declaration": true, + "incremental": true, + "noUnusedLocals": true, + "strict": true, + "module": "esnext", + "target": "esnext", + "allowSyntheticDefaultImports": true, + "jsx": "react", + "esModuleInterop": true, + "resolveJsonModule": true, + "moduleResolution": "node", + "forceConsistentCasingInFileNames": true, + "lib": [ + "esnext", + "dom" + ] + } +} diff --git a/yarn.lock b/yarn.lock index a939bf094f24..776a57f7b959 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7027,6 +7027,12 @@ __metadata: languageName: unknown linkType: soft +"@elastic/eui-config-tsconfig@workspace:*, @elastic/eui-config-tsconfig@workspace:packages/config-tsconfig": + version: 0.0.0-use.local + resolution: "@elastic/eui-config-tsconfig@workspace:packages/config-tsconfig" + languageName: unknown + linkType: soft + "@elastic/eui-docgen@workspace:^, @elastic/eui-docgen@workspace:packages/eui-docgen": version: 0.0.0-use.local resolution: "@elastic/eui-docgen@workspace:packages/eui-docgen" From 18c67357bee44d2a84378e874c7641d549885f42 Mon Sep 17 00:00:00 2001 From: Tomasz Kajtoch Date: Wed, 13 May 2026 01:24:55 +0200 Subject: [PATCH 2/5] build: migrate `eui-theme-borealis` to use `eui-config-tsconfig` --- packages/eui-theme-borealis/package.json | 1 + packages/eui-theme-borealis/tsconfig.cjs.json | 13 +------------ packages/eui-theme-borealis/tsconfig.json | 12 +----------- packages/eui-theme-borealis/tsconfig.types.json | 16 ++++++---------- yarn.lock | 1 + 5 files changed, 10 insertions(+), 33 deletions(-) diff --git a/packages/eui-theme-borealis/package.json b/packages/eui-theme-borealis/package.json index a62c26ee484a..54b653c7dc5e 100644 --- a/packages/eui-theme-borealis/package.json +++ b/packages/eui-theme-borealis/package.json @@ -36,6 +36,7 @@ "@babel/preset-env": "^7.21.5", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.21.5", + "@elastic/eui-config-tsconfig": "workspace:*", "@elastic/eui-theme-common": "workspace:*", "@types/chroma-js": "^2.4.0", "@types/jest": "^29.5.12", diff --git a/packages/eui-theme-borealis/tsconfig.cjs.json b/packages/eui-theme-borealis/tsconfig.cjs.json index 8dbb95ee273c..d5d664c9f78c 100644 --- a/packages/eui-theme-borealis/tsconfig.cjs.json +++ b/packages/eui-theme-borealis/tsconfig.cjs.json @@ -1,21 +1,10 @@ { "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./tsconfig.json", "compilerOptions": { - "rootDir": "src", "outDir": "lib/cjs", "target": "es6", "module": "CommonJS", - "lib": [ - "es6", - "DOM" - ], - "moduleResolution": "Node", - "declaration": true, - "noEmitHelpers": true, - "incremental": true, - "esModuleInterop": true, - "strict": true, - "skipLibCheck": true, "tsBuildInfoFile": "lib/cjs/.tsbuildinfo", "importHelpers": false, }, diff --git a/packages/eui-theme-borealis/tsconfig.json b/packages/eui-theme-borealis/tsconfig.json index e91e8e9c2315..5c12a5d07dea 100644 --- a/packages/eui-theme-borealis/tsconfig.json +++ b/packages/eui-theme-borealis/tsconfig.json @@ -1,20 +1,10 @@ { "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@elastic/eui-config-tsconfig", "compilerOptions": { - "rootDir": "src", "outDir": "lib/esm", "target": "ES2020", - "module": "ESNext", - "lib": [ - "ESNext", - "DOM" - ], - "moduleResolution": "Node", - "declaration": true, "noEmitHelpers": true, - "incremental": true, - "esModuleInterop": true, - "strict": true, "skipLibCheck": true, "tsBuildInfoFile": "lib/esm/.tsbuildinfo" }, diff --git a/packages/eui-theme-borealis/tsconfig.types.json b/packages/eui-theme-borealis/tsconfig.types.json index f47144cc9aee..8caf4819b95c 100644 --- a/packages/eui-theme-borealis/tsconfig.types.json +++ b/packages/eui-theme-borealis/tsconfig.types.json @@ -1,12 +1,8 @@ { - "extends": "./tsconfig.cjs.json", - "compilerOptions": { - "outDir": "lib/cjs", - "declaration": true, - "isolatedModules": false, - "noEmit": false, - "allowJs": false, - "emitDeclarationOnly": true - }, - "exclude": ["node_modules", "**/*.test.ts"] + "extends": "./tsconfig.cjs.json", + "compilerOptions": { + "isolatedModules": false, + "emitDeclarationOnly": true + }, + "exclude": ["node_modules", "**/*.test.ts"] } diff --git a/yarn.lock b/yarn.lock index 776a57f7b959..e46df6238977 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7143,6 +7143,7 @@ __metadata: "@babel/preset-env": "npm:^7.21.5" "@babel/preset-react": "npm:^7.18.6" "@babel/preset-typescript": "npm:^7.21.5" + "@elastic/eui-config-tsconfig": "workspace:*" "@elastic/eui-theme-common": "workspace:*" "@types/chroma-js": "npm:^2.4.0" "@types/jest": "npm:^29.5.12" From 9fb01c623058de097aabee7c0f060d533bc041b9 Mon Sep 17 00:00:00 2001 From: Tomasz Kajtoch Date: Wed, 13 May 2026 01:25:44 +0200 Subject: [PATCH 3/5] build: migrate `eui-theme-common` to use `eui-config-tsconfig` --- packages/eui-theme-common/package.json | 1 + packages/eui-theme-common/tsconfig.cjs.json | 18 +++--------------- packages/eui-theme-common/tsconfig.json | 12 +----------- yarn.lock | 1 + 4 files changed, 6 insertions(+), 26 deletions(-) diff --git a/packages/eui-theme-common/package.json b/packages/eui-theme-common/package.json index 5ec4a3c7f7c6..393a4d53fe02 100644 --- a/packages/eui-theme-common/package.json +++ b/packages/eui-theme-common/package.json @@ -34,6 +34,7 @@ "@babel/preset-env": "^7.21.5", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.21.5", + "@elastic/eui-config-tsconfig": "workspace:*", "@emotion/react": "^11.11.0", "@types/chroma-js": "^2.4.0", "@types/jest": "^29.5.12", diff --git a/packages/eui-theme-common/tsconfig.cjs.json b/packages/eui-theme-common/tsconfig.cjs.json index 8dbb95ee273c..2e9489bc9a17 100644 --- a/packages/eui-theme-common/tsconfig.cjs.json +++ b/packages/eui-theme-common/tsconfig.cjs.json @@ -1,28 +1,16 @@ { "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./tsconfig.json", "compilerOptions": { - "rootDir": "src", "outDir": "lib/cjs", "target": "es6", "module": "CommonJS", - "lib": [ - "es6", - "DOM" - ], - "moduleResolution": "Node", - "declaration": true, - "noEmitHelpers": true, - "incremental": true, - "esModuleInterop": true, - "strict": true, - "skipLibCheck": true, - "tsBuildInfoFile": "lib/cjs/.tsbuildinfo", - "importHelpers": false, + "tsBuildInfoFile": "lib/cjs/.tsbuildinfo" }, "include": [ "src" ], "exclude": [ "node_modules" - ], + ] } diff --git a/packages/eui-theme-common/tsconfig.json b/packages/eui-theme-common/tsconfig.json index e91e8e9c2315..c7df531acea0 100644 --- a/packages/eui-theme-common/tsconfig.json +++ b/packages/eui-theme-common/tsconfig.json @@ -1,21 +1,11 @@ { "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@elastic/eui-config-tsconfig", "compilerOptions": { - "rootDir": "src", "outDir": "lib/esm", "target": "ES2020", "module": "ESNext", - "lib": [ - "ESNext", - "DOM" - ], - "moduleResolution": "Node", - "declaration": true, "noEmitHelpers": true, - "incremental": true, - "esModuleInterop": true, - "strict": true, - "skipLibCheck": true, "tsBuildInfoFile": "lib/esm/.tsbuildinfo" }, "include": [ diff --git a/yarn.lock b/yarn.lock index e46df6238977..78b4394ea7db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7177,6 +7177,7 @@ __metadata: "@babel/preset-env": "npm:^7.21.5" "@babel/preset-react": "npm:^7.18.6" "@babel/preset-typescript": "npm:^7.21.5" + "@elastic/eui-config-tsconfig": "workspace:*" "@emotion/react": "npm:^11.11.0" "@types/chroma-js": "npm:^2.4.0" "@types/jest": "npm:^29.5.12" From c402218cac884f4eec28893782b70b31195407d4 Mon Sep 17 00:00:00 2001 From: Tomasz Kajtoch Date: Wed, 13 May 2026 01:26:37 +0200 Subject: [PATCH 4/5] build: migrate `release-cli` to use `eui-config-tsconfig` --- package.json | 1 + packages/release-cli/package.json | 1 + packages/release-cli/tsconfig.json | 7 +++---- yarn.lock | 18 ++++++++++++++++++ 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index b97095f89986..149075289127 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "pre-push" ], "devDependencies": { + "@types/node": "^22", "chalk": "^4.1.0", "chokidar": "^4.0.3", "pre-push": "^0.1.4", diff --git a/packages/release-cli/package.json b/packages/release-cli/package.json index 7b1d0149881d..4cf3396b22c7 100644 --- a/packages/release-cli/package.json +++ b/packages/release-cli/package.json @@ -13,6 +13,7 @@ "directory": "packages/release-cli" }, "devDependencies": { + "@elastic/eui-config-tsconfig": "workspace:*", "@types/prompts": "^2.4.9", "typescript": "^5.7.3" }, diff --git a/packages/release-cli/tsconfig.json b/packages/release-cli/tsconfig.json index 8d91f3eff131..354e4de66002 100644 --- a/packages/release-cli/tsconfig.json +++ b/packages/release-cli/tsconfig.json @@ -1,13 +1,12 @@ { + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@elastic/eui-config-tsconfig", "compilerOptions": { "target": "es2016", "module": "commonjs", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": false, "outDir": "dist", "strictBuiltinIteratorReturn": false, + "noUnusedLocals": false }, "include": [ "src" diff --git a/yarn.lock b/yarn.lock index 78b4394ea7db..c4f84541ee14 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7101,6 +7101,7 @@ __metadata: resolution: "@elastic/eui-monorepo@workspace:." dependencies: "@elastic/eui-release-cli": "link:packages/release-cli" + "@types/node": "npm:^22" chalk: "npm:^4.1.0" chokidar: "npm:^4.0.3" pre-push: "npm:^0.1.4" @@ -7118,6 +7119,7 @@ __metadata: version: 0.0.0-use.local resolution: "@elastic/eui-release-cli@workspace:packages/release-cli" dependencies: + "@elastic/eui-config-tsconfig": "workspace:*" "@types/prompts": "npm:^2.4.9" chalk: "npm:^4" glob: "npm:^11.0.1" @@ -11090,6 +11092,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^22": + version: 22.19.19 + resolution: "@types/node@npm:22.19.19" + dependencies: + undici-types: "npm:~6.21.0" + checksum: 10c0/402e0f088c94cabda3cd721546bd8e4e75e098e0b342f6e03b90ca1e19c28986f9650112c64fcfd09fc8cebc0f8b20291a513153e90489331cf666e1e5503e16 + languageName: node + linkType: hard + "@types/node@npm:^22.0.0": version: 22.9.1 resolution: "@types/node@npm:22.9.1" @@ -39329,6 +39340,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~6.21.0": + version: 6.21.0 + resolution: "undici-types@npm:6.21.0" + checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 + languageName: node + linkType: hard + "undici@npm:^6.21.1": version: 6.21.1 resolution: "undici@npm:6.21.1" From 1bb1cf7f23ab05b794dbc5b10ca4d6b507b5bd46 Mon Sep 17 00:00:00 2001 From: Tomasz Kajtoch Date: Wed, 13 May 2026 01:27:29 +0200 Subject: [PATCH 5/5] build: migrate `eui` to use `eui-config-tsconfig` --- packages/eui/package.json | 1 + packages/eui/tsconfig.json | 70 ++++++-------------------------------- yarn.lock | 1 + 3 files changed, 13 insertions(+), 59 deletions(-) diff --git a/packages/eui/package.json b/packages/eui/package.json index 5ce11454f088..8882a6cc95e0 100644 --- a/packages/eui/package.json +++ b/packages/eui/package.json @@ -109,6 +109,7 @@ "@elastic/charts": "^64.1.0", "@elastic/datemath": "^5.0.3", "@elastic/eslint-plugin-eui": "workspace:*", + "@elastic/eui-config-tsconfig": "workspace:*", "@elastic/eui-theme-borealis": "workspace:*", "@emotion/babel-preset-css-prop": "^11.11.0", "@emotion/cache": "^11.11.0", diff --git a/packages/eui/tsconfig.json b/packages/eui/tsconfig.json index eb17bf7962ac..242b309364cc 100644 --- a/packages/eui/tsconfig.json +++ b/packages/eui/tsconfig.json @@ -1,66 +1,18 @@ { + "extends": "@elastic/eui-config-tsconfig", "compilerOptions": { - "baseUrl": ".", - "rootDir": ".", - - // emit files to the `types` dir, these are ignored by everything but TS needs _somewhere_ to emit - "outDir": "types", - - // generate declaration files - "declaration": true, - - // re-use info from previous runs to improve performance - "incremental": true, - - // don't allow un-used variables - "noUnusedLocals": true, - - // Enables all strict type checking options. - "strict": true, - - // Output as ES Modules & esnext code, webpack will handle further conversion - "module": "esnext", - "target": "esnext", - - // Allows default imports from modules with no default export. This does not affect code emit, just type checking. - // We have to enable this option explicitly since `esModuleInterop` doesn't enable it automatically when ES2015 or - // ESNext module format is used. - "allowSyntheticDefaultImports": true, - - // Support .tsx files and transform JSX into calls to React.createElement - "jsx": "react", - - // Emits __importStar and __importDefault helpers for runtime babel ecosystem compatibility. - "esModuleInterop": true, - - // Allow importing JSON files - "resolveJsonModule": true, - - // Resolve modules in the same way as Node.js. Aka make `require` works the - // same in TypeScript as it does in Node.js. - "moduleResolution": "node", - - // Skip type checking node_modules "skipLibCheck": true, - - // Disallow inconsistently-cased references to the same file. - "forceConsistentCasingInFileNames": true, - - // enables "core language features" - "lib": [ - // ESNext auto includes previous versions all the way back to es5 - "esnext", - // includes support for browser APIs - "dom" - ], - - // Specifies where to find library definitions. When this is explicitly set, - // it has to include the default location i.e. node_modules/@types - "typeRoots": ["../../node_modules/@types", "node_modules/@types", "src/custom_typings"] + "typeRoots": [ + "src/custom_typings" + ] }, "include": [ - "./src/**/*", - "./.storybook/*.d.ts" + "src/**/*", + ".storybook/*.d.ts" ], - "exclude": ["node_modules", "**/*/*.spec.tsx", "**/*/*.a11y.tsx"] + "exclude": [ + "node_modules", + "**/*.spec.tsx", + "**/*.a11y.tsx" + ] } diff --git a/yarn.lock b/yarn.lock index c4f84541ee14..a36f88d6ebeb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7295,6 +7295,7 @@ __metadata: "@elastic/charts": "npm:^64.1.0" "@elastic/datemath": "npm:^5.0.3" "@elastic/eslint-plugin-eui": "workspace:*" + "@elastic/eui-config-tsconfig": "workspace:*" "@elastic/eui-theme-borealis": "workspace:*" "@elastic/eui-theme-common": "workspace:*" "@elastic/prismjs-esql": "npm:^1.1.2"