From 2149ba2c8d56a3a8ef4a6de89de1292f6efe3031 Mon Sep 17 00:00:00 2001 From: Shane Date: Wed, 5 Mar 2025 17:14:45 -0800 Subject: [PATCH] fix(capacitor): use proper types for capacitor v7 support (#30228) Issue number: resolves internal --------- ## What is the current behavior? Currently, Capacitor types are outdated in Ionic Framework and we're accessing a type property that no longer exists in Capacitor 7.0.0+ ## What is the new behavior? This PR updates the capacitor version and addresses removal of `.Plugins` from `@capacitor/core`'s `CapacitorGlobal`, which we rely on to dynamically access plugins that the user may or may not have installed. The fix for this was creating a custom type definition to support accessing `Plugins`. While `Plugins` was removed from Capacitor if we were accessing it directly from core, we're pulling it from the window in the browser, where it's still exposed, so we just needed to make our type reflect that. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information Technically, this issue does not prevent Framework from working with Capacitor 7 because it's only a typing issue, but it's still a minor issue that should be addressed in our effort to support Capacitor 7. This PR, along with #30195, should make it ready for that. --- core/package-lock.json | 66 ++++++++++++++++-------------- core/package.json | 8 ++-- core/src/utils/native/capacitor.ts | 10 ++++- 3 files changed, 48 insertions(+), 36 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index 1ef90673eb..d8e0ef6210 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -15,10 +15,10 @@ }, "devDependencies": { "@axe-core/playwright": "^4.10.0", - "@capacitor/core": "^6.0.0", - "@capacitor/haptics": "^6.0.0", - "@capacitor/keyboard": "^6.0.0", - "@capacitor/status-bar": "^6.0.0", + "@capacitor/core": "^7.0.0", + "@capacitor/haptics": "^7.0.0", + "@capacitor/keyboard": "^7.0.0", + "@capacitor/status-bar": "^7.0.0", "@clack/prompts": "^0.10.0", "@ionic/eslint-config": "^0.3.0", "@ionic/prettier-config": "^2.0.0", @@ -663,39 +663,43 @@ "dev": true }, "node_modules/@capacitor/core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-6.2.0.tgz", - "integrity": "sha512-B9IlJtDpUqhhYb+T8+cp2Db/3RETX36STgjeU2kQZBs/SLAcFiMama227o+msRjLeo3DO+7HJjWVA1+XlyyPEg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.0.1.tgz", + "integrity": "sha512-1Ob9bvA/p8g8aNwK6VesxEekGXowLVf6APjkW4LRnr05H+7z/bke+Q5pn9zqh/GgTbIxAQ/rwZrAZvvxkdm1UA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@capacitor/haptics": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@capacitor/haptics/-/haptics-6.0.2.tgz", - "integrity": "sha512-xcFdIH4iIIeW2+1lzmlYMVicqB9ytaiuZ9NE3a9laKFPvMGC7hdj6i6tHFezwPJ/96xkHOwXT2b0F8Mh9xtTWg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@capacitor/haptics/-/haptics-7.0.0.tgz", + "integrity": "sha512-8uI8rWyAbq8EzkjS+sHZSncyzujHzVbuLKgj8J5H0yUL6+r26F16gVA2iuQuIBvzbSMy7Y0/pUuWlwZr/H8AKg==", "dev": true, + "license": "MIT", "peerDependencies": { - "@capacitor/core": "^6.0.0" + "@capacitor/core": ">=7.0.0" } }, "node_modules/@capacitor/keyboard": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@capacitor/keyboard/-/keyboard-6.0.3.tgz", - "integrity": "sha512-V/mURxBI68HvClYjrGBlOriWkwYN7r+cWid/igJz/3scNc/V81DgQ9fpoLr4W0I5NY7YxOesjIJLuLO+LT18mQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@capacitor/keyboard/-/keyboard-7.0.0.tgz", + "integrity": "sha512-Tqwy8wG+sx4UqiFCX4Q+bFw6uKgG7BiHKAPpeefoIgoEB8H8Jf3xZNZoVPnJIMuPsCdSvuyHXZbJXH9IEEirGA==", "dev": true, + "license": "MIT", "peerDependencies": { - "@capacitor/core": "^6.0.0" + "@capacitor/core": ">=7.0.0" } }, "node_modules/@capacitor/status-bar": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-6.0.2.tgz", - "integrity": "sha512-AmRIX6QvFemItlY7/69ARkIAqitRQqJ2qwgZmD1KqgFb78pH+XFXm1guvS/a8CuOOm/IqZ4ddDbl20yxtBqzGA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-7.0.0.tgz", + "integrity": "sha512-wsvPkWkoSOXMIgVHu4c6P1sOuDSZ1ClUo5OpLRwj7u8DYzlV4jlmNzztQn2Lvsiqx1z4kfukSaqe40k1Lo4c9g==", "dev": true, + "license": "MIT", "peerDependencies": { - "@capacitor/core": "^6.0.0" + "@capacitor/core": ">=7.0.0" } }, "node_modules/@clack/core": { @@ -10977,32 +10981,32 @@ "dev": true }, "@capacitor/core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-6.2.0.tgz", - "integrity": "sha512-B9IlJtDpUqhhYb+T8+cp2Db/3RETX36STgjeU2kQZBs/SLAcFiMama227o+msRjLeo3DO+7HJjWVA1+XlyyPEg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.0.1.tgz", + "integrity": "sha512-1Ob9bvA/p8g8aNwK6VesxEekGXowLVf6APjkW4LRnr05H+7z/bke+Q5pn9zqh/GgTbIxAQ/rwZrAZvvxkdm1UA==", "dev": true, "requires": { "tslib": "^2.1.0" } }, "@capacitor/haptics": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@capacitor/haptics/-/haptics-6.0.2.tgz", - "integrity": "sha512-xcFdIH4iIIeW2+1lzmlYMVicqB9ytaiuZ9NE3a9laKFPvMGC7hdj6i6tHFezwPJ/96xkHOwXT2b0F8Mh9xtTWg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@capacitor/haptics/-/haptics-7.0.0.tgz", + "integrity": "sha512-8uI8rWyAbq8EzkjS+sHZSncyzujHzVbuLKgj8J5H0yUL6+r26F16gVA2iuQuIBvzbSMy7Y0/pUuWlwZr/H8AKg==", "dev": true, "requires": {} }, "@capacitor/keyboard": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@capacitor/keyboard/-/keyboard-6.0.3.tgz", - "integrity": "sha512-V/mURxBI68HvClYjrGBlOriWkwYN7r+cWid/igJz/3scNc/V81DgQ9fpoLr4W0I5NY7YxOesjIJLuLO+LT18mQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@capacitor/keyboard/-/keyboard-7.0.0.tgz", + "integrity": "sha512-Tqwy8wG+sx4UqiFCX4Q+bFw6uKgG7BiHKAPpeefoIgoEB8H8Jf3xZNZoVPnJIMuPsCdSvuyHXZbJXH9IEEirGA==", "dev": true, "requires": {} }, "@capacitor/status-bar": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-6.0.2.tgz", - "integrity": "sha512-AmRIX6QvFemItlY7/69ARkIAqitRQqJ2qwgZmD1KqgFb78pH+XFXm1guvS/a8CuOOm/IqZ4ddDbl20yxtBqzGA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-7.0.0.tgz", + "integrity": "sha512-wsvPkWkoSOXMIgVHu4c6P1sOuDSZ1ClUo5OpLRwj7u8DYzlV4jlmNzztQn2Lvsiqx1z4kfukSaqe40k1Lo4c9g==", "dev": true, "requires": {} }, diff --git a/core/package.json b/core/package.json index 092fc9759f..80db8b924e 100644 --- a/core/package.json +++ b/core/package.json @@ -37,10 +37,10 @@ }, "devDependencies": { "@axe-core/playwright": "^4.10.0", - "@capacitor/core": "^6.0.0", - "@capacitor/haptics": "^6.0.0", - "@capacitor/keyboard": "^6.0.0", - "@capacitor/status-bar": "^6.0.0", + "@capacitor/core": "^7.0.0", + "@capacitor/haptics": "^7.0.0", + "@capacitor/keyboard": "^7.0.0", + "@capacitor/status-bar": "^7.0.0", "@clack/prompts": "^0.10.0", "@ionic/eslint-config": "^0.3.0", "@ionic/prettier-config": "^2.0.0", diff --git a/core/src/utils/native/capacitor.ts b/core/src/utils/native/capacitor.ts index 5554f28f6e..0d31b20dfe 100644 --- a/core/src/utils/native/capacitor.ts +++ b/core/src/utils/native/capacitor.ts @@ -1,9 +1,17 @@ import type { CapacitorGlobal } from '@capacitor/core'; import { win } from '@utils/browser'; +type CustomCapacitorGlobal = CapacitorGlobal & { + // Capacitor from @capacitor/core no longer exports Plugins, but we're pulling + // Capacitor from window.Capacitor, which does + Plugins: { + [key: string]: any; + }; +}; + export const getCapacitor = () => { if (win !== undefined) { - return (win as any).Capacitor as CapacitorGlobal; + return (win as any).Capacitor as CustomCapacitorGlobal; } return undefined; };