From f89caa213f33345877e4f1fdbdbf671921a92bd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eren=20Bat=C4=B1?= <243848222+erenbati@users.noreply.github.com> Date: Tue, 6 Oct 2026 17:26:09 +0000 Subject: [PATCH 1/2] [eas-cli] Update bundled Expo config stack for TypeScript app configs --- packages/eas-cli/package.json | 6 +- packages/eas-cli/src/build/validate.ts | 2 +- packages/eas-cli/src/commands/update/index.ts | 6 +- .../ios/__tests__/exemptEncryption-test.ts | 25 ++ packages/eas-cli/src/project/publish.ts | 2 +- yarn.lock | 216 ++++++++++-------- 6 files changed, 153 insertions(+), 104 deletions(-) diff --git a/packages/eas-cli/package.json b/packages/eas-cli/package.json index ef518aa245..32820e6ef3 100644 --- a/packages/eas-cli/package.json +++ b/packages/eas-cli/package.json @@ -46,8 +46,8 @@ "dependencies": { "@expo/apple-utils": "2.2.1", "@expo/code-signing-certificates": "0.0.5", - "@expo/config": "55.0.10", - "@expo/config-plugins": "55.0.7", + "@expo/config": "56.0.14", + "@expo/config-plugins": "56.0.16", "@expo/eas-build-job": "24.9.0", "@expo/eas-json": "24.9.0", "@expo/env": "^1.0.0", @@ -60,7 +60,7 @@ "@expo/plist": "0.3.5", "@expo/plugin-help": "5.1.23", "@expo/plugin-warn-if-update-available": "2.5.1", - "@expo/prebuild-config": "9.0.12", + "@expo/prebuild-config": "56.0.23", "@expo/results": "1.0.0", "@expo/rudder-sdk-node": "1.1.1", "@expo/spawn-async": "1.7.2", diff --git a/packages/eas-cli/src/build/validate.ts b/packages/eas-cli/src/build/validate.ts index 1b7efdd3eb..328a441e5c 100644 --- a/packages/eas-cli/src/build/validate.ts +++ b/packages/eas-cli/src/build/validate.ts @@ -103,7 +103,7 @@ async function validateAndroidPNGsAsync(ctx: CommonContext): P }, { configPath: 'exp.splash.image', - pngPath: ctx.exp.splash?.image, + pngPath: (ctx.exp as Record).splash?.image, }, { configPath: 'exp.notification.icon', diff --git a/packages/eas-cli/src/commands/update/index.ts b/packages/eas-cli/src/commands/update/index.ts index 7ca5a5d910..246b6b88f2 100644 --- a/packages/eas-cli/src/commands/update/index.ts +++ b/packages/eas-cli/src/commands/update/index.ts @@ -1,4 +1,3 @@ -import { Workflow } from '@expo/eas-build-job'; import { EasJson, EasJsonAccessor, EasJsonUtils } from '@expo/eas-json'; import { Errors, Flags } from '@oclif/core'; import chalk from 'chalk'; @@ -500,10 +499,7 @@ export default class UpdatePublish extends EasCommand { exp, platforms: realizedPlatforms, projectDir, - workflows: { - ...workflows, - web: Workflow.UNKNOWN, - }, + workflows, env: maybeServerEnv, }); const runtimeToPlatformsAndFingerprintInfoMapping = diff --git a/packages/eas-cli/src/project/ios/__tests__/exemptEncryption-test.ts b/packages/eas-cli/src/project/ios/__tests__/exemptEncryption-test.ts index 1d47ce5318..88774ddf0f 100644 --- a/packages/eas-cli/src/project/ios/__tests__/exemptEncryption-test.ts +++ b/packages/eas-cli/src/project/ios/__tests__/exemptEncryption-test.ts @@ -13,6 +13,31 @@ jest.mock('@expo/require-utils', () => { const actual = jest.requireActual('@expo/require-utils'); return { ...actual, + resolveFrom: ( + fromDirectory: string, + moduleId: string, + options?: { extensions?: string[] } + ): string | null => { + if (!moduleId.startsWith('./')) { + return actual.resolveFrom(fromDirectory, moduleId, options); + } + + const fs = require('fs'); + const path = require('path'); + const basePath = path.resolve(fromDirectory, moduleId); + const candidates = options?.extensions?.length + ? options.extensions.map((extension: string) => `${basePath}${extension}`) + : [basePath]; + + for (const candidate of candidates) { + try { + if (fs.statSync(candidate).isFile()) { + return candidate; + } + } catch {} + } + return null; + }, loadModuleSync: (filename: string) => { const fs = require('fs'); const content = fs.readFileSync(filename, 'utf-8'); diff --git a/packages/eas-cli/src/project/publish.ts b/packages/eas-cli/src/project/publish.ts index 7654ab03f1..e8a5ea726e 100644 --- a/packages/eas-cli/src/project/publish.ts +++ b/packages/eas-cli/src/project/publish.ts @@ -811,7 +811,7 @@ export async function getRuntimeVersionInfoObjectsAsync({ }: { exp: ExpoConfig; platforms: UpdatePublishPlatform[]; - workflows: Record; + workflows: Record; projectDir: string; env: Env | undefined; }): Promise< diff --git a/yarn.lock b/yarn.lock index 1e382e3219..f6f7c5527b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2430,39 +2430,38 @@ __metadata: languageName: node linkType: hard -"@expo/config-plugins@npm:~10.0.2": - version: 10.0.2 - resolution: "@expo/config-plugins@npm:10.0.2" - dependencies: - "@expo/config-types": "npm:^53.0.3" - "@expo/json-file": "npm:~9.1.4" - "@expo/plist": "npm:^0.3.4" +"@expo/config-plugins@npm:56.0.16, @expo/config-plugins@npm:~56.0.16": + version: 56.0.16 + resolution: "@expo/config-plugins@npm:56.0.16" + dependencies: + "@expo/config-types": "npm:^56.0.7" + "@expo/json-file": "npm:~10.2.0" + "@expo/plist": "npm:^0.7.0" + "@expo/require-utils": "npm:^56.1.7" "@expo/sdk-runtime-versions": "npm:^1.0.0" chalk: "npm:^4.1.2" debug: "npm:^4.3.5" - getenv: "npm:^1.0.0" - glob: "npm:^10.4.2" - resolve-from: "npm:^5.0.0" + getenv: "npm:^2.0.0" + glob: "npm:^13.0.0" semver: "npm:^7.5.4" - slash: "npm:^3.0.0" slugify: "npm:^1.6.6" xcode: "npm:^3.0.1" xml2js: "npm:0.6.0" - checksum: 10c0/4049c2c6dc2589ce0dc840ef971bcdd4215ca74e5057fc92c07004a877c9198dc78bd07b91d3ba908242e70e683faa6fb516f07ec42c2328cbe8e661a65591d0 + checksum: 10c0/d3aedfe1c1ff42412c37689377bfb9947c857bc403ef09dfbfd4c5c63d019587b13dafcb295aca626496b4289580d041bdc19c2f32471426db38e69ecc2a0ddf languageName: node linkType: hard -"@expo/config-plugins@npm:~10.1.2": - version: 10.1.2 - resolution: "@expo/config-plugins@npm:10.1.2" +"@expo/config-plugins@npm:~10.0.2": + version: 10.0.2 + resolution: "@expo/config-plugins@npm:10.0.2" dependencies: - "@expo/config-types": "npm:^53.0.5" - "@expo/json-file": "npm:~9.1.5" - "@expo/plist": "npm:^0.3.5" + "@expo/config-types": "npm:^53.0.3" + "@expo/json-file": "npm:~9.1.4" + "@expo/plist": "npm:^0.3.4" "@expo/sdk-runtime-versions": "npm:^1.0.0" chalk: "npm:^4.1.2" debug: "npm:^4.3.5" - getenv: "npm:^2.0.0" + getenv: "npm:^1.0.0" glob: "npm:^10.4.2" resolve-from: "npm:^5.0.0" semver: "npm:^7.5.4" @@ -2470,7 +2469,7 @@ __metadata: slugify: "npm:^1.6.6" xcode: "npm:^3.0.1" xml2js: "npm:0.6.0" - checksum: 10c0/d5ef0f002db40cb182058b2fe9df6f5f77ff09e18aa0bc8109047d75cd912487bace59bcff7104c6f68f6b49f89d0b387ab6f90f8069c63c9f3fccb9fb9b99de + checksum: 10c0/4049c2c6dc2589ce0dc840ef971bcdd4215ca74e5057fc92c07004a877c9198dc78bd07b91d3ba908242e70e683faa6fb516f07ec42c2328cbe8e661a65591d0 languageName: node linkType: hard @@ -2488,10 +2487,10 @@ __metadata: languageName: node linkType: hard -"@expo/config-types@npm:^53.0.5": - version: 53.0.5 - resolution: "@expo/config-types@npm:53.0.5" - checksum: 10c0/a7c96f65327de5608aedaf0669bc95b721323113064bdad3473d6faa07b619100ef1df5811f3fdb5dc50d05610842aec8d6bc1902dd0345d51ba2d520884487d +"@expo/config-types@npm:^56.0.7": + version: 56.0.7 + resolution: "@expo/config-types@npm:56.0.7" + checksum: 10c0/97c2fbe59c0ee3d830d369a8789aa27cb7553879661e3f5e014215ad25fb19e44f66bb9956233520f3c1aa76b10278a2aa418ba1edfda02709de572d29209054 languageName: node linkType: hard @@ -2535,24 +2534,21 @@ __metadata: languageName: node linkType: hard -"@expo/config@npm:~11.0.13": - version: 11.0.13 - resolution: "@expo/config@npm:11.0.13" +"@expo/config@npm:56.0.14, @expo/config@npm:~56.0.14": + version: 56.0.14 + resolution: "@expo/config@npm:56.0.14" dependencies: - "@babel/code-frame": "npm:~7.10.4" - "@expo/config-plugins": "npm:~10.1.2" - "@expo/config-types": "npm:^53.0.5" - "@expo/json-file": "npm:^9.1.5" + "@expo/config-plugins": "npm:~56.0.16" + "@expo/config-types": "npm:^56.0.7" + "@expo/json-file": "npm:^10.2.0" + "@expo/require-utils": "npm:^56.1.7" deepmerge: "npm:^4.3.1" getenv: "npm:^2.0.0" - glob: "npm:^10.4.2" - require-from-string: "npm:^2.0.2" - resolve-from: "npm:^5.0.0" + glob: "npm:^13.0.0" resolve-workspace-root: "npm:^2.0.0" semver: "npm:^7.6.0" slugify: "npm:^1.3.4" - sucrase: "npm:3.35.0" - checksum: 10c0/19cdbc4baa498ca9e55416fd1b2a202cca061e34984236b1f032f3d28cf72a4ddc824bc0cbe3d39c5b5f1117ef65be84c4b05bf62b6fa41d5d049b75af59a17c + checksum: 10c0/089d73a050dbbe2f7853c5c4717e7e128eb19b07053c03c1a404eefc079b82d9fee4d019c2a22707de8121e2fc028fee76a4836bc7974e0724a7e64ec960a1e2 languageName: node linkType: hard @@ -2642,20 +2638,18 @@ __metadata: languageName: node linkType: hard -"@expo/image-utils@npm:^0.7.6": - version: 0.7.6 - resolution: "@expo/image-utils@npm:0.7.6" +"@expo/image-utils@npm:^0.10.5": + version: 0.10.5 + resolution: "@expo/image-utils@npm:0.10.5" dependencies: - "@expo/spawn-async": "npm:^1.7.2" + "@expo/require-utils": "npm:^56.1.7" + "@expo/spawn-async": "npm:^1.8.0" chalk: "npm:^4.0.0" getenv: "npm:^2.0.0" jimp-compact: "npm:0.16.1" parse-png: "npm:^2.1.0" - resolve-from: "npm:^5.0.0" semver: "npm:^7.6.0" - temp-dir: "npm:~2.0.0" - unique-string: "npm:~2.0.0" - checksum: 10c0/45a8ce5237fecd63a4020295b584d237a024d917ca1bf1e31568bb96703b5fd9351a6912a7ecc0fc5c38d97029f31f86e312c4646beb0207ce578289a3e2bc2d + checksum: 10c0/99b95e63eeef8033334cab8f44598e6a905ed47041a089a233c1f5efa2be1a4e17328b12112667939ff1b1b94aae5fab5e364f3033e9b03202b8ef9f337357ce languageName: node linkType: hard @@ -2690,23 +2684,23 @@ __metadata: languageName: node linkType: hard -"@expo/json-file@npm:^9.1.4, @expo/json-file@npm:~9.1.4": - version: 9.1.4 - resolution: "@expo/json-file@npm:9.1.4" +"@expo/json-file@npm:^10.2.0, @expo/json-file@npm:~10.2.0": + version: 10.2.0 + resolution: "@expo/json-file@npm:10.2.0" dependencies: - "@babel/code-frame": "npm:~7.10.4" + "@babel/code-frame": "npm:^7.20.0" json5: "npm:^2.2.3" - checksum: 10c0/43c68ba5316dc9b2e79a0a15fbfca60430f64181ae1d47f9627fd1f5b2f27b090a829125168290cbab8af72f0421bab941dbd855217fec4787bde921e6962a05 + checksum: 10c0/198058e18dea2f31083c2ae8a6831dddfc8fc01c4cb30020728da04f155a6b600b4219830b6df48195548fa29a450b5b775007ed8430fb8098fd9a1656188ea0 languageName: node linkType: hard -"@expo/json-file@npm:^9.1.5, @expo/json-file@npm:~9.1.5": - version: 9.1.5 - resolution: "@expo/json-file@npm:9.1.5" +"@expo/json-file@npm:^9.1.4, @expo/json-file@npm:~9.1.4": + version: 9.1.4 + resolution: "@expo/json-file@npm:9.1.4" dependencies: "@babel/code-frame": "npm:~7.10.4" json5: "npm:^2.2.3" - checksum: 10c0/989e3aa6d3e31a7f499d7979c6062694f2bc1fe1a4bc81b64aff74c39f27ed5f52098861897236cdc26b86186062560f3191814a2e8ff5b821a74a71d617f135 + checksum: 10c0/43c68ba5316dc9b2e79a0a15fbfca60430f64181ae1d47f9627fd1f5b2f27b090a829125168290cbab8af72f0421bab941dbd855217fec4787bde921e6962a05 languageName: node linkType: hard @@ -2800,6 +2794,17 @@ __metadata: languageName: node linkType: hard +"@expo/plist@npm:^0.7.0": + version: 0.7.0 + resolution: "@expo/plist@npm:0.7.0" + dependencies: + "@xmldom/xmldom": "npm:^0.8.8" + base64-js: "npm:^1.5.1" + xmlbuilder: "npm:^15.1.1" + checksum: 10c0/b0d3df057f9a388a761a9261381d55e86ad0935ca15d32bd78da536c803bfc9334c2381fdced99f086e76f5d675535101bfb652d9a79a39c10b0c764c140dcc9 + languageName: node + linkType: hard + "@expo/plugin-help@npm:5.1.23": version: 5.1.23 resolution: "@expo/plugin-help@npm:5.1.23" @@ -2825,21 +2830,21 @@ __metadata: languageName: node linkType: hard -"@expo/prebuild-config@npm:9.0.12": - version: 9.0.12 - resolution: "@expo/prebuild-config@npm:9.0.12" +"@expo/prebuild-config@npm:56.0.23": + version: 56.0.23 + resolution: "@expo/prebuild-config@npm:56.0.23" dependencies: - "@expo/config": "npm:~11.0.13" - "@expo/config-plugins": "npm:~10.1.2" - "@expo/config-types": "npm:^53.0.5" - "@expo/image-utils": "npm:^0.7.6" - "@expo/json-file": "npm:^9.1.5" - "@react-native/normalize-colors": "npm:0.79.6" + "@expo/config": "npm:~56.0.14" + "@expo/config-plugins": "npm:~56.0.16" + "@expo/config-types": "npm:^56.0.7" + "@expo/image-utils": "npm:^0.10.5" + "@expo/json-file": "npm:^10.2.0" + "@react-native/normalize-colors": "npm:0.85.3" debug: "npm:^4.3.1" + expo-modules-autolinking: "npm:~56.0.23" resolve-from: "npm:^5.0.0" semver: "npm:^7.6.0" - xml2js: "npm:0.6.0" - checksum: 10c0/7b0f8a9898e8a6d7cc1d15c6a4397ee8e6f3d7c1529eaed4e2c2fb764428820a35fc93aa93a521d286528e9eb52f9ea7c41f12be38a0bc53faa26fac3b063921 + checksum: 10c0/60e61b5915e070d960fe8797907ccc20c425e98f52bb8edb169a6aa425928840e20cc18b1739048a8c1fd48fd21e3bab61f6d86d4aa7da802bbcfebfd8d36bbc languageName: node linkType: hard @@ -2872,6 +2877,22 @@ __metadata: languageName: node linkType: hard +"@expo/require-utils@npm:^56.1.7": + version: 56.1.7 + resolution: "@expo/require-utils@npm:56.1.7" + dependencies: + "@babel/code-frame": "npm:^7.20.0" + "@babel/core": "npm:^7.25.2" + "@babel/plugin-transform-modules-commonjs": "npm:^7.24.8" + peerDependencies: + typescript: ^5.0.0 || ^5.0.0-0 || ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/cd3efd5f78692cdf938b450448267508308e4d0a1d78a3c2d8212c892df62ae89bdd4130347d0c958a65e0b2bcfa0c462a7fcf3b6326e869d662208ccd3f754c + languageName: node + linkType: hard + "@expo/results@npm:1.0.0, @expo/results@npm:^1.0.0": version: 1.0.0 resolution: "@expo/results@npm:1.0.0" @@ -2910,6 +2931,15 @@ __metadata: languageName: node linkType: hard +"@expo/spawn-async@npm:^1.8.0": + version: 1.8.0 + resolution: "@expo/spawn-async@npm:1.8.0" + dependencies: + cross-spawn: "npm:^7.0.6" + checksum: 10c0/08d3c63f9cc097ce9c8cf6850ca482fd7999a6fddc4cb38a3a9915a1662cb674fe7353de2eb3c693728542bf57db732ae433e82b2d698be141d07cea3092ebf3 + languageName: node + linkType: hard + "@expo/steps@npm:24.9.0, @expo/steps@workspace:packages/steps": version: 0.0.0-use.local resolution: "@expo/steps@workspace:packages/steps" @@ -6111,10 +6141,10 @@ __metadata: languageName: node linkType: hard -"@react-native/normalize-colors@npm:0.79.6": - version: 0.79.6 - resolution: "@react-native/normalize-colors@npm:0.79.6" - checksum: 10c0/2bc662b6846a92fe62bc54be34204ad90eeceb9747fdd6f439f3262a8b93a47c1a9f574368749c07636a9a746e2d5b842e9492f55bbfcbe164a1b7385f467ac1 +"@react-native/normalize-colors@npm:0.85.3": + version: 0.85.3 + resolution: "@react-native/normalize-colors@npm:0.85.3" + checksum: 10c0/343cdbe79e51b0f62e13fcf8620d9c72d7d956d18e9b1b04380a231cff1ec43ff2c54f1ed7a9b975bc23ed4879b96520a7c88aa1c8c7f17a99c32ef8073cf341 languageName: node linkType: hard @@ -9517,6 +9547,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^7.2.0": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 10c0/8d690ff13b0356df7e0ebbe6c59b4712f754f4b724d4f473d3cc5b3fdcf978e3a5dc3078717858a2ceb50b0f84d0660a7f22a96cdc50fb877d0c9bb31593d23a + languageName: node + linkType: hard + "common-ancestor-path@npm:^1.0.1": version: 1.0.1 resolution: "common-ancestor-path@npm:1.0.1" @@ -9948,13 +9985,6 @@ __metadata: languageName: node linkType: hard -"crypto-random-string@npm:^2.0.0": - version: 2.0.0 - resolution: "crypto-random-string@npm:2.0.0" - checksum: 10c0/288589b2484fe787f9e146f56c4be90b940018f17af1b152e4dde12309042ff5a2bf69e949aab8b8ac253948381529cc6f3e5a2427b73643a71ff177fa122b37 - languageName: node - linkType: hard - "cssesc@npm:^3.0.0": version: 3.0.0 resolution: "cssesc@npm:3.0.0" @@ -10473,8 +10503,8 @@ __metadata: dependencies: "@expo/apple-utils": "npm:2.2.1" "@expo/code-signing-certificates": "npm:0.0.5" - "@expo/config": "npm:55.0.10" - "@expo/config-plugins": "npm:55.0.7" + "@expo/config": "npm:56.0.14" + "@expo/config-plugins": "npm:56.0.16" "@expo/eas-build-job": "npm:24.9.0" "@expo/eas-json": "npm:24.9.0" "@expo/env": "npm:^1.0.0" @@ -10487,7 +10517,7 @@ __metadata: "@expo/plist": "npm:0.3.5" "@expo/plugin-help": "npm:5.1.23" "@expo/plugin-warn-if-update-available": "npm:2.5.1" - "@expo/prebuild-config": "npm:9.0.12" + "@expo/prebuild-config": "npm:56.0.23" "@expo/results": "npm:1.0.0" "@expo/rudder-sdk-node": "npm:1.1.1" "@expo/spawn-async": "npm:1.7.2" @@ -11050,6 +11080,20 @@ __metadata: languageName: node linkType: hard +"expo-modules-autolinking@npm:~56.0.23": + version: 56.0.23 + resolution: "expo-modules-autolinking@npm:56.0.23" + dependencies: + "@expo/require-utils": "npm:^56.1.7" + "@expo/spawn-async": "npm:^1.8.0" + chalk: "npm:^4.1.0" + commander: "npm:^7.2.0" + bin: + expo-modules-autolinking: bin/expo-modules-autolinking.js + checksum: 10c0/4817715ab0790a44af2cfc1390f5c979921c00395b4151e725822d18058397ed27698386fa4d2db802dcbcf20d1cd45bcb0a60456c42f4d1e6e774a2df594b53 + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.2 resolution: "exponential-backoff@npm:3.1.2" @@ -18618,13 +18662,6 @@ __metadata: languageName: node linkType: hard -"temp-dir@npm:~2.0.0": - version: 2.0.0 - resolution: "temp-dir@npm:2.0.0" - checksum: 10c0/b1df969e3f3f7903f3426861887ed76ba3b495f63f6d0c8e1ce22588679d9384d336df6064210fda14e640ed422e2a17d5c40d901f60e161c99482d723f4d309 - languageName: node - linkType: hard - "terminal-link@npm:2.1.1": version: 2.1.1 resolution: "terminal-link@npm:2.1.1" @@ -19337,15 +19374,6 @@ __metadata: languageName: node linkType: hard -"unique-string@npm:~2.0.0": - version: 2.0.0 - resolution: "unique-string@npm:2.0.0" - dependencies: - crypto-random-string: "npm:^2.0.0" - checksum: 10c0/11820db0a4ba069d174bedfa96c588fc2c96b083066fafa186851e563951d0de78181ac79c744c1ed28b51f9d82ac5b8196ff3e4560d0178046ef455d8c2244b - languageName: node - linkType: hard - "universal-user-agent@npm:^6.0.0": version: 6.0.0 resolution: "universal-user-agent@npm:6.0.0" From cfe260fe46f158ee9bd43284ade45f0bf8cc2dcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eren=20Bat=C4=B1?= <243848222+erenbati@users.noreply.github.com> Date: Sat, 24 Oct 2026 21:30:44 +0300 Subject: [PATCH 2/2] test(config): cover bundled TypeScript config readers --- .../__tests__/bundledExpoConfig-test.ts | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 packages/eas-cli/src/project/__tests__/bundledExpoConfig-test.ts diff --git a/packages/eas-cli/src/project/__tests__/bundledExpoConfig-test.ts b/packages/eas-cli/src/project/__tests__/bundledExpoConfig-test.ts new file mode 100644 index 0000000000..d7e1d9a64b --- /dev/null +++ b/packages/eas-cli/src/project/__tests__/bundledExpoConfig-test.ts @@ -0,0 +1,55 @@ +import fs from 'fs'; +import os from 'os'; +import path from 'path'; +import { createRequire } from 'module'; + +import { getConfig } from '@expo/config'; + +// Regression for #4205: EAS CLI's direct and prebuild config readers must +// both handle TypeScript app.config.ts with the currently bundled dependencies. +describe('bundled Expo config can load TypeScript app.config.ts', () => { + function withConfigFile(content: string, check: (directory: string) => void): void { + const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'eas-config-ts-')); + try { + fs.writeFileSync( + path.join(dir, 'package.json'), + JSON.stringify({ name: 'minimal', version: '1.2.3' }) + ); + fs.writeFileSync(path.join(dir, 'app.config.ts'), content); + check(dir); + } finally { + fs.rmSync(dir, { recursive: true, force: true }); + } + } + + it('loads an ordinary TypeScript config through the EAS CLI config dependency', () => { + withConfigFile( + "export default ({ config }: { config: Record }) => ({ ...config, name: 'Minimal', slug: 'minimal' });", + dir => { + const { exp } = getConfig(dir, { skipSDKVersionRequirement: true }); + expect(exp.name).toBe('Minimal'); + } + ); + }); + + it('loads import.meta through the config dependency resolved by prebuild-config', () => { + const fromPrebuild = createRequire(require.resolve('@expo/prebuild-config/package.json')); + const { getConfig: getPrebuildConfig } = fromPrebuild( + '@expo/config' + ) as typeof import('@expo/config'); + + withConfigFile( + `import { createRequire } from 'node:module'; +const load = createRequire(import.meta.url ?? __filename); +const { version } = load('./package.json'); +export default ({ config }: { config: Record }) => ({ + ...config, name: 'Minimal', slug: 'minimal', version, +});`, + dir => { + const { exp } = getPrebuildConfig(dir, { skipSDKVersionRequirement: true }); + expect(exp.name).toBe('Minimal'); + expect(exp.version).toBe('1.2.3'); + } + ); + }); +});