expo-linking
Advanced tools
Comparing version 6.3.2-canary-20240628-1ba8152 to 6.4.0-canary-20240719-83ee47b
@@ -1,3 +0,10 @@ | ||
import { Linking } from 'react-native'; | ||
export default Linking; | ||
import { NativeModule } from 'expo-modules-core'; | ||
type ExppLinkingModuleEvents = { | ||
onURLReceived(url: string): void; | ||
}; | ||
declare class ExpoLinkingNativeModule extends NativeModule<ExppLinkingModuleEvents> { | ||
getLinkingURL(): string | null; | ||
} | ||
declare const ExpoLinking: ExpoLinkingNativeModule; | ||
export default ExpoLinking; | ||
//# sourceMappingURL=ExpoLinking.d.ts.map |
@@ -1,3 +0,4 @@ | ||
import { Linking } from 'react-native'; | ||
export default Linking; | ||
import { requireNativeModule, NativeModule } from 'expo-modules-core'; | ||
const ExpoLinking = requireNativeModule('ExpoLinking'); | ||
export default ExpoLinking; | ||
//# sourceMappingURL=ExpoLinking.js.map |
import { URLListener } from './Linking.types'; | ||
declare const _default: { | ||
addEventListener(type: 'url', listener: URLListener): { | ||
addListener(eventName: any, listener: URLListener): { | ||
remove(): void; | ||
}; | ||
removeEventListener(type: 'url', listener: URLListener): void; | ||
canOpenURL(): Promise<boolean>; | ||
getInitialURL(): Promise<string>; | ||
openURL(url: string): Promise<void>; | ||
getLinkingURL(): string; | ||
}; | ||
export default _default; | ||
//# sourceMappingURL=ExpoLinking.web.d.ts.map |
import invariant from 'invariant'; | ||
const listeners = []; | ||
export default { | ||
addEventListener(type, listener) { | ||
addListener(eventName, listener) { | ||
invariant(eventName === 'onURLReceived', `Linking.addListener(): ${eventName} is not a valid event`); | ||
// Do nothing in Node.js environments | ||
@@ -9,29 +9,11 @@ if (typeof window === 'undefined') { | ||
} | ||
invariant(type === 'url', `Linking.addEventListener(): ${type} is not a valid event`); | ||
const nativeListener = (nativeEvent) => listener({ url: window.location.href, nativeEvent }); | ||
listeners.push({ listener, nativeListener }); | ||
window.addEventListener('message', nativeListener, false); | ||
return { | ||
remove: () => { | ||
this.removeEventListener(type, listener); | ||
window.removeEventListener('message', nativeListener); | ||
}, | ||
}; | ||
}, | ||
removeEventListener(type, listener) { | ||
// Do nothing in Node.js environments | ||
if (typeof window === 'undefined') { | ||
return; | ||
} | ||
invariant(type === 'url', `Linking.addEventListener(): ${type} is not a valid event`); | ||
const listenerIndex = listeners.findIndex((pair) => pair.listener === listener); | ||
invariant(listenerIndex !== -1, 'Linking.removeEventListener(): cannot remove an unregistered event listener.'); | ||
const nativeListener = listeners[listenerIndex].nativeListener; | ||
window.removeEventListener('message', nativeListener, false); | ||
listeners.splice(listenerIndex, 1); | ||
}, | ||
async canOpenURL() { | ||
// In reality this should be able to return false for links like `chrome://` on chrome. | ||
return true; | ||
}, | ||
async getInitialURL() { | ||
getLinkingURL() { | ||
if (typeof window === 'undefined') | ||
@@ -41,9 +23,3 @@ return ''; | ||
}, | ||
async openURL(url) { | ||
if (typeof window !== 'undefined') { | ||
// @ts-ignore | ||
window.location = new URL(url, window.location).toString(); | ||
} | ||
}, | ||
}; | ||
//# sourceMappingURL=ExpoLinking.web.js.map |
@@ -38,2 +38,7 @@ import { EmitterSubscription } from 'react-native'; | ||
/** | ||
* Get the URL that was used to launch the app if it was launched by a link. | ||
* @return The URL string that launched your app, or `null`. | ||
*/ | ||
export declare function getLinkingURL(): string | null; | ||
/** | ||
* Attempt to open the given URL with an installed app. See the [Linking guide](/guides/linking) | ||
@@ -63,2 +68,8 @@ * for more information. | ||
export declare function useURL(): string | null; | ||
/** | ||
* Returns the linking URL followed by any subsequent changes to the URL. | ||
* Always returns the initial URL immediately on reload. | ||
* @return Returns the initial URL or `null`. | ||
*/ | ||
export declare function useLinkingURL(): string | null; | ||
export * from './Linking.types'; | ||
@@ -65,0 +76,0 @@ export * from './Schemes'; |
import { UnavailabilityError } from 'expo-modules-core'; | ||
import { useEffect, useState } from 'react'; | ||
import { Platform } from 'react-native'; | ||
import NativeLinking from './ExpoLinking'; | ||
import ExpoLinking from './ExpoLinking'; | ||
import RNLinking from './RNLinking'; | ||
import { parse } from './createURL'; | ||
@@ -18,3 +19,3 @@ import { validateURL } from './validateURL'; | ||
export function addEventListener(type, handler) { | ||
return NativeLinking.addEventListener(type, handler); | ||
return RNLinking.addEventListener(type, handler); | ||
} | ||
@@ -30,3 +31,3 @@ // @needsAudit | ||
export async function parseInitialURLAsync() { | ||
const initialUrl = await NativeLinking.getInitialURL(); | ||
const initialUrl = await RNLinking.getInitialURL(); | ||
if (!initialUrl) { | ||
@@ -51,3 +52,3 @@ return { | ||
if (Platform.OS === 'android') { | ||
return await NativeLinking.sendIntent(action, extras); | ||
return await RNLinking.sendIntent(action, extras); | ||
} | ||
@@ -64,4 +65,4 @@ throw new UnavailabilityError('Linking', 'sendIntent'); | ||
} | ||
if (NativeLinking.openSettings) { | ||
return await NativeLinking.openSettings(); | ||
if (RNLinking.openSettings) { | ||
return await RNLinking.openSettings(); | ||
} | ||
@@ -76,4 +77,11 @@ await openURL('app-settings:'); | ||
export async function getInitialURL() { | ||
return (await NativeLinking.getInitialURL()) ?? null; | ||
return (await RNLinking.getInitialURL()) ?? null; | ||
} | ||
/** | ||
* Get the URL that was used to launch the app if it was launched by a link. | ||
* @return The URL string that launched your app, or `null`. | ||
*/ | ||
export function getLinkingURL() { | ||
return ExpoLinking.getLinkingURL(); | ||
} | ||
// @needsAudit | ||
@@ -90,3 +98,3 @@ /** | ||
validateURL(url); | ||
return await NativeLinking.openURL(url); | ||
return await RNLinking.openURL(url); | ||
} | ||
@@ -106,3 +114,3 @@ // @needsAudit | ||
validateURL(url); | ||
return await NativeLinking.canOpenURL(url); | ||
return await RNLinking.canOpenURL(url); | ||
} | ||
@@ -126,2 +134,18 @@ // @needsAudit | ||
} | ||
/** | ||
* Returns the linking URL followed by any subsequent changes to the URL. | ||
* Always returns the initial URL immediately on reload. | ||
* @return Returns the initial URL or `null`. | ||
*/ | ||
export function useLinkingURL() { | ||
const [url, setLink] = useState(ExpoLinking.getLinkingURL); | ||
function onChange(event) { | ||
setLink(event.url); | ||
} | ||
useEffect(() => { | ||
const subscription = ExpoLinking.addListener('onURLReceived', onChange); | ||
return () => subscription.remove(); | ||
}, []); | ||
return url ?? null; | ||
} | ||
export * from './Linking.types'; | ||
@@ -128,0 +152,0 @@ export * from './Schemes'; |
@@ -9,4 +9,8 @@ # Changelog | ||
- Add native `getLinkingURL` function. ([#29405](https://github.com/expo/expo/pull/29405) by [@aleqsio](https://github.com/aleqsio)) | ||
### 🐛 Bug fixes | ||
- Add missing `react` and `react-native` peer dependencies for isolated modules. ([#30473](https://github.com/expo/expo/pull/30473) by [@byCedric](https://github.com/byCedric)) | ||
### 💡 Others | ||
@@ -13,0 +17,0 @@ |
{ | ||
"name": "expo-linking", | ||
"version": "6.3.2-canary-20240628-1ba8152", | ||
"version": "6.4.0-canary-20240719-83ee47b", | ||
"description": "Create and open deep links universally", | ||
@@ -33,12 +33,16 @@ "main": "build/Linking.js", | ||
"dependencies": { | ||
"expo-constants": "16.0.3-canary-20240628-1ba8152", | ||
"expo-constants": "16.0.3-canary-20240719-83ee47b", | ||
"invariant": "^2.2.4" | ||
}, | ||
"devDependencies": { | ||
"expo-module-scripts": "3.6.0-canary-20240628-1ba8152" | ||
"expo-module-scripts": "3.6.0-canary-20240719-83ee47b" | ||
}, | ||
"peerDependencies": { | ||
"react": "*", | ||
"react-native": "*" | ||
}, | ||
"jest": { | ||
"preset": "expo-module-scripts" | ||
}, | ||
"gitHead": "1ba815237ed606c5ee8488f68e49773fc9735cc3" | ||
"gitHead": "83ee47b5c89c7f1b1a5101189580eaf3555f5962" | ||
} |
@@ -1,2 +0,12 @@ | ||
import { Linking } from 'react-native'; | ||
export default Linking; | ||
import { requireNativeModule, NativeModule } from 'expo-modules-core'; | ||
type ExppLinkingModuleEvents = { | ||
onURLReceived(url: string): void; | ||
}; | ||
declare class ExpoLinkingNativeModule extends NativeModule<ExppLinkingModuleEvents> { | ||
getLinkingURL(): string | null; | ||
} | ||
const ExpoLinking = requireNativeModule<ExpoLinkingNativeModule>('ExpoLinking'); | ||
export default ExpoLinking; |
import invariant from 'invariant'; | ||
import { NativeURLListener, URLListener } from './Linking.types'; | ||
import { URLListener } from './Linking.types'; | ||
const listeners: { listener: URLListener; nativeListener: NativeURLListener }[] = []; | ||
export default { | ||
addEventListener(type: 'url', listener: URLListener): { remove(): void } { | ||
addListener(eventName, listener: URLListener): { remove(): void } { | ||
invariant( | ||
eventName === 'onURLReceived', | ||
`Linking.addListener(): ${eventName} is not a valid event` | ||
); | ||
// Do nothing in Node.js environments | ||
@@ -14,10 +16,7 @@ if (typeof window === 'undefined') { | ||
invariant(type === 'url', `Linking.addEventListener(): ${type} is not a valid event`); | ||
const nativeListener: NativeURLListener = (nativeEvent) => | ||
listener({ url: window.location.href, nativeEvent }); | ||
listeners.push({ listener, nativeListener }); | ||
const nativeListener = (nativeEvent) => listener({ url: window.location.href, nativeEvent }); | ||
window.addEventListener('message', nativeListener, false); | ||
return { | ||
remove: () => { | ||
this.removeEventListener(type, listener); | ||
window.removeEventListener('message', nativeListener); | ||
}, | ||
@@ -27,34 +26,6 @@ }; | ||
removeEventListener(type: 'url', listener: URLListener): void { | ||
// Do nothing in Node.js environments | ||
if (typeof window === 'undefined') { | ||
return; | ||
} | ||
invariant(type === 'url', `Linking.addEventListener(): ${type} is not a valid event`); | ||
const listenerIndex = listeners.findIndex((pair) => pair.listener === listener); | ||
invariant( | ||
listenerIndex !== -1, | ||
'Linking.removeEventListener(): cannot remove an unregistered event listener.' | ||
); | ||
const nativeListener = listeners[listenerIndex].nativeListener; | ||
window.removeEventListener('message', nativeListener, false); | ||
listeners.splice(listenerIndex, 1); | ||
}, | ||
async canOpenURL(): Promise<boolean> { | ||
// In reality this should be able to return false for links like `chrome://` on chrome. | ||
return true; | ||
}, | ||
async getInitialURL(): Promise<string> { | ||
getLinkingURL(): string { | ||
if (typeof window === 'undefined') return ''; | ||
return window.location.href; | ||
}, | ||
async openURL(url: string): Promise<void> { | ||
if (typeof window !== 'undefined') { | ||
// @ts-ignore | ||
window.location = new URL(url, window.location).toString(); | ||
} | ||
}, | ||
}; |
@@ -5,4 +5,5 @@ import { UnavailabilityError } from 'expo-modules-core'; | ||
import NativeLinking from './ExpoLinking'; | ||
import ExpoLinking from './ExpoLinking'; | ||
import { ParsedURL, SendIntentExtras, URLListener } from './Linking.types'; | ||
import RNLinking from './RNLinking'; | ||
import { parse } from './createURL'; | ||
@@ -22,3 +23,3 @@ import { validateURL } from './validateURL'; | ||
export function addEventListener(type: 'url', handler: URLListener): EmitterSubscription { | ||
return NativeLinking.addEventListener(type, handler); | ||
return RNLinking.addEventListener(type, handler); | ||
} | ||
@@ -35,3 +36,3 @@ | ||
export async function parseInitialURLAsync(): Promise<ParsedURL> { | ||
const initialUrl = await NativeLinking.getInitialURL(); | ||
const initialUrl = await RNLinking.getInitialURL(); | ||
if (!initialUrl) { | ||
@@ -58,3 +59,3 @@ return { | ||
if (Platform.OS === 'android') { | ||
return await NativeLinking.sendIntent(action, extras); | ||
return await RNLinking.sendIntent(action, extras); | ||
} | ||
@@ -72,4 +73,4 @@ throw new UnavailabilityError('Linking', 'sendIntent'); | ||
} | ||
if (NativeLinking.openSettings) { | ||
return await NativeLinking.openSettings(); | ||
if (RNLinking.openSettings) { | ||
return await RNLinking.openSettings(); | ||
} | ||
@@ -85,5 +86,13 @@ await openURL('app-settings:'); | ||
export async function getInitialURL(): Promise<string | null> { | ||
return (await NativeLinking.getInitialURL()) ?? null; | ||
return (await RNLinking.getInitialURL()) ?? null; | ||
} | ||
/** | ||
* Get the URL that was used to launch the app if it was launched by a link. | ||
* @return The URL string that launched your app, or `null`. | ||
*/ | ||
export function getLinkingURL(): string | null { | ||
return ExpoLinking.getLinkingURL(); | ||
} | ||
// @needsAudit | ||
@@ -100,3 +109,3 @@ /** | ||
validateURL(url); | ||
return await NativeLinking.openURL(url); | ||
return await RNLinking.openURL(url); | ||
} | ||
@@ -117,3 +126,3 @@ | ||
validateURL(url); | ||
return await NativeLinking.canOpenURL(url); | ||
return await RNLinking.canOpenURL(url); | ||
} | ||
@@ -142,4 +151,24 @@ | ||
/** | ||
* Returns the linking URL followed by any subsequent changes to the URL. | ||
* Always returns the initial URL immediately on reload. | ||
* @return Returns the initial URL or `null`. | ||
*/ | ||
export function useLinkingURL(): string | null { | ||
const [url, setLink] = useState<string | null>(ExpoLinking.getLinkingURL); | ||
function onChange(event: { url: string }) { | ||
setLink(event.url); | ||
} | ||
useEffect(() => { | ||
const subscription = ExpoLinking.addListener('onURLReceived', onChange as any); | ||
return () => subscription.remove(); | ||
}, []); | ||
return url ?? null; | ||
} | ||
export * from './Linking.types'; | ||
export * from './Schemes'; | ||
export { parse, createURL } from './createURL'; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
126045
71
1545
4
+ Added@expo/config@9.1.0-canary-20240719-83ee47b(transitive)
+ Added@expo/config-plugins@8.0.9-canary-20240719-83ee47b(transitive)
+ Added@expo/config-types@52.0.0-canary-20240719-83ee47b(transitive)
+ Added@expo/env@0.3.1-canary-20240719-83ee47b(transitive)
+ Added@expo/json-file@8.3.4-canary-20240719-83ee47b(transitive)
+ Added@expo/plist@0.1.4-canary-20240719-83ee47b(transitive)
+ Added@hapi/hoek@9.3.0(transitive)
+ Added@hapi/topo@5.1.0(transitive)
+ Added@jest/create-cache-key-function@29.7.0(transitive)
+ Added@jest/environment@29.7.0(transitive)
+ Added@jest/fake-timers@29.7.0(transitive)
+ Added@jest/schemas@29.6.3(transitive)
+ Added@jest/types@26.6.229.6.3(transitive)
+ Added@react-native-community/cli@13.5.1(transitive)
+ Added@react-native-community/cli-clean@13.5.1(transitive)
+ Added@react-native-community/cli-config@13.5.1(transitive)
+ Added@react-native-community/cli-debugger-ui@13.5.1(transitive)
+ Added@react-native-community/cli-doctor@13.5.1(transitive)
+ Added@react-native-community/cli-hermes@13.5.1(transitive)
+ Added@react-native-community/cli-platform-android@13.5.1(transitive)
+ Added@react-native-community/cli-platform-apple@13.5.1(transitive)
+ Added@react-native-community/cli-platform-ios@13.5.1(transitive)
+ Added@react-native-community/cli-server-api@13.5.1(transitive)
+ Added@react-native-community/cli-tools@13.5.1(transitive)
+ Added@react-native-community/cli-types@13.5.1(transitive)
+ Added@react-native/assets-registry@0.74.0(transitive)
+ Added@react-native/codegen@0.74.0(transitive)
+ Added@react-native/gradle-plugin@0.74.0(transitive)
+ Added@react-native/js-polyfills@0.74.0(transitive)
+ Added@react-native/normalize-colors@0.74.1(transitive)
+ Added@react-native/virtualized-lists@0.74.0(transitive)
+ Added@sideway/address@4.1.5(transitive)
+ Added@sideway/formula@3.0.1(transitive)
+ Added@sideway/pinpoint@2.0.0(transitive)
+ Added@sinclair/typebox@0.27.8(transitive)
+ Added@sinonjs/commons@3.0.1(transitive)
+ Added@sinonjs/fake-timers@10.3.0(transitive)
+ Added@types/istanbul-reports@3.0.4(transitive)
+ Added@types/stack-utils@2.0.3(transitive)
+ Added@types/yargs@15.0.1917.0.33(transitive)
+ Addedabort-controller@3.0.0(transitive)
+ Addedanser@1.4.10(transitive)
+ Addedansi-fragments@0.2.1(transitive)
+ Addedansi-styles@5.2.0(transitive)
+ Addedappdirsjs@1.2.7(transitive)
+ Addedastral-regex@1.0.0(transitive)
+ Addedbl@4.1.0(transitive)
+ Addedbytes@3.1.2(transitive)
+ Addedcaller-callsite@2.0.0(transitive)
+ Addedcaller-path@2.0.0(transitive)
+ Addedcallsites@2.0.0(transitive)
+ Addedcamelcase@5.3.1(transitive)
+ Addedcli-cursor@3.1.0(transitive)
+ Addedcliui@6.0.08.0.1(transitive)
+ Addedcolorette@1.4.0(transitive)
+ Addedcommander@9.5.0(transitive)
+ Addedcompressible@2.0.18(transitive)
+ Addedcompression@1.7.5(transitive)
+ Addedcore-util-is@1.0.3(transitive)
+ Addedcosmiconfig@5.2.1(transitive)
+ Addeddayjs@1.11.13(transitive)
+ Addeddecamelize@1.2.0(transitive)
+ Addeddeepmerge@4.3.1(transitive)
+ Addedenvinfo@7.14.0(transitive)
+ Addederror-ex@1.3.2(transitive)
+ Addederrorhandler@1.5.1(transitive)
+ Addedescape-string-regexp@2.0.0(transitive)
+ Addedevent-target-shim@5.0.1(transitive)
+ Addedexeca@5.1.1(transitive)
+ Addedexpo-constants@16.0.3-canary-20240719-83ee47b(transitive)
+ Addedfast-xml-parser@4.5.0(transitive)
+ Addedfind-up@4.1.0(transitive)
+ Addedflow-enums-runtime@0.0.6(transitive)
+ Addedflow-parser@0.206.0(transitive)
+ Addedget-caller-file@2.0.5(transitive)
+ Addedget-stream@6.0.1(transitive)
+ Addedhermes-profile-transformer@0.0.6(transitive)
+ Addedhuman-signals@2.1.0(transitive)
+ Addedimport-fresh@2.0.0(transitive)
+ Addedip@1.1.9(transitive)
+ Addedis-arrayish@0.2.1(transitive)
+ Addedis-directory@0.3.1(transitive)
+ Addedis-fullwidth-code-point@2.0.0(transitive)
+ Addedis-interactive@1.0.0(transitive)
+ Addedis-unicode-supported@0.1.0(transitive)
+ Addedis-wsl@1.1.0(transitive)
+ Addedisarray@1.0.0(transitive)
+ Addedjest-environment-node@29.7.0(transitive)
+ Addedjest-message-util@29.7.0(transitive)
+ Addedjest-mock@29.7.0(transitive)
+ Addedjest-util@29.7.0(transitive)
+ Addedjoi@17.13.3(transitive)
+ Addedjsc-android@250231.0.0(transitive)
+ Addedjson-parse-better-errors@1.0.2(transitive)
+ Addedlocate-path@5.0.0(transitive)
+ Addedlog-symbols@4.1.0(transitive)
+ Addedlogkitty@0.7.1(transitive)
+ Addedmemoize-one@5.2.1(transitive)
+ Addedmerge-stream@2.0.0(transitive)
+ Addedmetro-runtime@0.80.12(transitive)
+ Addedmetro-source-map@0.80.12(transitive)
+ Addedmetro-symbolicate@0.80.12(transitive)
+ Addedmime@2.6.0(transitive)
+ Addedmimic-fn@2.1.0(transitive)
+ Addednegotiator@0.6.4(transitive)
+ Addednocache@3.0.4(transitive)
+ Addednode-stream-zip@1.15.0(transitive)
+ Addednpm-run-path@4.0.1(transitive)
+ Addedob1@0.80.12(transitive)
+ Addedon-headers@1.0.2(transitive)
+ Addedonetime@5.1.2(transitive)
+ Addedopen@6.4.0(transitive)
+ Addedora@5.4.1(transitive)
+ Addedp-locate@4.1.0(transitive)
+ Addedparse-json@4.0.0(transitive)
+ Addedpretty-format@26.6.229.7.0(transitive)
+ Addedprocess-nextick-args@2.0.1(transitive)
+ Addedpromise@8.3.0(transitive)
+ Addedreact@18.2.018.3.1(transitive)
+ Addedreact-devtools-core@5.3.2(transitive)
+ Addedreact-is@17.0.218.3.1(transitive)
+ Addedreact-native@1000.0.0(transitive)
+ Addedreact-shallow-renderer@16.15.0(transitive)
+ Addedreadable-stream@2.3.83.6.2(transitive)
+ Addedregenerator-runtime@0.13.11(transitive)
+ Addedrequire-directory@2.1.1(transitive)
+ Addedrequire-main-filename@2.0.0(transitive)
+ Addedresolve-from@3.0.0(transitive)
+ Addedrestore-cursor@3.1.0(transitive)
+ Addedsafe-buffer@5.1.25.2.1(transitive)
+ Addedscheduler@0.24.0-canary-efb381bbf-20230505(transitive)
+ Addedset-blocking@2.0.0(transitive)
+ Addedshell-quote@1.8.1(transitive)
+ Addedslice-ansi@2.1.0(transitive)
+ Addedsource-map@0.7.4(transitive)
+ Addedstack-utils@2.0.6(transitive)
+ Addedstring_decoder@1.1.11.3.0(transitive)
+ Addedstrip-final-newline@2.0.0(transitive)
+ Addedstrnum@1.0.5(transitive)
+ Addedsudo-prompt@9.2.1(transitive)
+ Addedthrough2@2.0.5(transitive)
+ Addedtype-detect@4.0.8(transitive)
+ Addedutil-deprecate@1.0.2(transitive)
+ Addedvary@1.1.2(transitive)
+ Addedvlq@1.0.1(transitive)
+ Addedwhatwg-fetch@3.6.20(transitive)
+ Addedwhich-module@2.0.1(transitive)
+ Addedwrap-ansi@6.2.0(transitive)
+ Addedws@7.5.10(transitive)
+ Addedxtend@4.0.2(transitive)
+ Addedy18n@4.0.35.0.8(transitive)
+ Addedyaml@2.6.0(transitive)
+ Addedyargs@15.4.117.7.2(transitive)
+ Addedyargs-parser@18.1.321.1.1(transitive)
- Removed@expo/config@9.1.0-canary-20240628-1ba8152(transitive)
- Removed@expo/config-plugins@8.0.7-canary-20240628-1ba8152(transitive)
- Removed@expo/config-types@52.0.0-canary-20240628-1ba8152(transitive)
- Removed@expo/env@0.3.1-canary-20240628-1ba8152(transitive)
- Removed@expo/json-file@8.3.4-canary-20240628-1ba8152(transitive)
- Removed@expo/plist@0.1.4-canary-20240628-1ba8152(transitive)
- Removedexpo-constants@16.0.3-canary-20240628-1ba8152(transitive)