From 222fc93c6bb22c1db11e5723409205d8bb216606 Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Thu, 16 Apr 2026 13:20:46 +0100 Subject: [PATCH] fix(expo): VS code extension not picking up expo support via metadata in package.json --- packages/analytics/package.json | 5 +- packages/app-check/package.json | 5 +- packages/app-distribution/package.json | 5 +- packages/app/package.json | 5 +- .../plugin/__tests__/packageManifest.test.ts | 55 +++++++++++++++++++ packages/auth/package.json | 3 + packages/crashlytics/package.json | 3 + packages/messaging/package.json | 5 +- packages/perf/package.json | 3 + 9 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 packages/app/plugin/__tests__/packageManifest.test.ts diff --git a/packages/analytics/package.json b/packages/analytics/package.json index fdba35b432..757d7be58f 100644 --- a/packages/analytics/package.json +++ b/packages/analytics/package.json @@ -75,5 +75,8 @@ "eslintIgnore": [ "node_modules/", "dist/" - ] + ], + "expo": { + "plugin": "./app.plugin.js" + } } diff --git a/packages/app-check/package.json b/packages/app-check/package.json index ad2e8c20dc..8e107996e6 100644 --- a/packages/app-check/package.json +++ b/packages/app-check/package.json @@ -73,5 +73,8 @@ "eslintIgnore": [ "node_modules/", "dist/" - ] + ], + "expo": { + "plugin": "./app.plugin.js" + } } diff --git a/packages/app-distribution/package.json b/packages/app-distribution/package.json index 0d9550dd0e..7b4441b362 100644 --- a/packages/app-distribution/package.json +++ b/packages/app-distribution/package.json @@ -71,5 +71,8 @@ "eslintIgnore": [ "node_modules/", "dist/" - ] + ], + "expo": { + "plugin": "./app.plugin.js" + } } diff --git a/packages/app/package.json b/packages/app/package.json index c2f3283673..fbb5c008ea 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -144,5 +144,8 @@ "eslintIgnore": [ "node_modules/", "dist/" - ] + ], + "expo": { + "plugin": "./app.plugin.js" + } } diff --git a/packages/app/plugin/__tests__/packageManifest.test.ts b/packages/app/plugin/__tests__/packageManifest.test.ts new file mode 100644 index 0000000000..b8ca2637b0 --- /dev/null +++ b/packages/app/plugin/__tests__/packageManifest.test.ts @@ -0,0 +1,55 @@ +import fs from 'fs'; +import path from 'path'; +import { describe, expect, it } from '@jest/globals'; + +const pluginPackages = [ + 'analytics', + 'app', + 'app-check', + 'app-distribution', + 'auth', + 'crashlytics', + 'messaging', + 'perf', +] as const; + +const repoRoot = path.resolve(__dirname, '../../../../'); + +interface ExpoPluginPackageJson { + expo?: { + plugin?: string; + }; + exports?: Record; +} + +function readPackageJson(pkg: (typeof pluginPackages)[number]): ExpoPluginPackageJson { + const packageJsonPath = path.resolve(repoRoot, 'packages', pkg, 'package.json'); + + try { + return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) as ExpoPluginPackageJson; + } catch (error) { + throw new Error(`Failed to read ${pkg}/package.json: ${String(error)}`); + } +} + +describe('Expo config plugin package manifests', function () { + it.each(pluginPackages)('%s declares app.plugin.js for Expo tooling', function (pkg) { + const packageJsonPath = path.resolve(repoRoot, 'packages', pkg, 'package.json'); + const pluginEntryPath = path.resolve(repoRoot, 'packages', pkg, 'app.plugin.js'); + + expect(fs.existsSync(packageJsonPath)).toBe(true); + expect(fs.existsSync(pluginEntryPath)).toBe(true); + + const manifest = readPackageJson(pkg); + + expect(manifest.expo).toMatchObject({ + plugin: './app.plugin.js', + }); + + // Older JS packages do not declare an exports map yet, but any package that does + // must keep the config plugin subpath available for Expo's resolver. + if (manifest.exports) { + expect(manifest.exports['./app.plugin.js']).toBe('./app.plugin.js'); + } + }); +}); diff --git a/packages/auth/package.json b/packages/auth/package.json index bbbdd7883d..1d3642529d 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -42,5 +42,8 @@ "publishConfig": { "access": "public", "provenance": true + }, + "expo": { + "plugin": "./app.plugin.js" } } diff --git a/packages/crashlytics/package.json b/packages/crashlytics/package.json index 2c817b9036..80bab746f5 100644 --- a/packages/crashlytics/package.json +++ b/packages/crashlytics/package.json @@ -76,5 +76,8 @@ } ] ] + }, + "expo": { + "plugin": "./app.plugin.js" } } diff --git a/packages/messaging/package.json b/packages/messaging/package.json index e77b372b4f..56dc54e267 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -72,5 +72,8 @@ "eslintIgnore": [ "node_modules/", "dist/" - ] + ], + "expo": { + "plugin": "./app.plugin.js" + } } diff --git a/packages/perf/package.json b/packages/perf/package.json index 9cefb4fd83..b4753f1ede 100644 --- a/packages/perf/package.json +++ b/packages/perf/package.json @@ -43,5 +43,8 @@ "publishConfig": { "access": "public", "provenance": true + }, + "expo": { + "plugin": "./app.plugin.js" } }