@nx/expo 22.2.0-beta.2 → 22.2.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/migrations.json +109 -0
  2. package/package.json +8 -7
  3. package/plugins/with-nx-metro.d.ts +1 -1
  4. package/plugins/with-nx-metro.d.ts.map +1 -1
  5. package/plugins/with-nx-metro.js +1 -1
  6. package/src/generators/application/application.js +1 -1
  7. package/src/generators/application/files/nx-welcome/claimed/src/app/App.tsx.template +7 -10
  8. package/src/generators/application/files/nx-welcome/not-configured/src/app/App.tsx.template +7 -10
  9. package/src/generators/application/files/nx-welcome/unclaimed/src/app/App.tsx.template +7 -10
  10. package/src/generators/init/init.d.ts +1 -1
  11. package/src/generators/init/init.d.ts.map +1 -1
  12. package/src/generators/init/init.js +11 -9
  13. package/src/generators/library/library.d.ts.map +1 -1
  14. package/src/generators/library/library.js +7 -6
  15. package/src/migrations/update-22-2-0/add-expo-system-ui.d.ts +8 -0
  16. package/src/migrations/update-22-2-0/add-expo-system-ui.d.ts.map +1 -0
  17. package/src/migrations/update-22-2-0/add-expo-system-ui.js +48 -0
  18. package/src/migrations/update-22-2-0/create-ai-instructions-for-expo-54.d.ts +3 -0
  19. package/src/migrations/update-22-2-0/create-ai-instructions-for-expo-54.d.ts.map +1 -0
  20. package/src/migrations/update-22-2-0/create-ai-instructions-for-expo-54.js +16 -0
  21. package/src/migrations/update-22-2-0/files/ai-instructions-for-expo-54.md +519 -0
  22. package/src/migrations/update-22-2-0/update-jest-for-expo-54.d.ts +12 -0
  23. package/src/migrations/update-22-2-0/update-jest-for-expo-54.d.ts.map +1 -0
  24. package/src/migrations/update-22-2-0/update-jest-for-expo-54.js +150 -0
  25. package/src/utils/ensure-dependencies.d.ts +1 -1
  26. package/src/utils/ensure-dependencies.d.ts.map +1 -1
  27. package/src/utils/ensure-dependencies.js +16 -15
  28. package/src/utils/jest/add-jest.d.ts.map +1 -1
  29. package/src/utils/jest/add-jest.js +35 -10
  30. package/src/utils/version-utils.d.ts +48 -0
  31. package/src/utils/version-utils.d.ts.map +1 -0
  32. package/src/utils/version-utils.js +130 -0
  33. package/src/utils/versions.d.ts +46 -16
  34. package/src/utils/versions.d.ts.map +1 -1
  35. package/src/utils/versions.js +51 -17
package/migrations.json CHANGED
@@ -17,6 +17,27 @@
17
17
  "cli": "nx",
18
18
  "description": "Add custom Jest resolver to handle Expo winter runtime issues",
19
19
  "factory": "./src/migrations/update-21-4-0/add-jest-resolver"
20
+ },
21
+ "update-22-2-0-create-ai-instructions-for-expo-54": {
22
+ "version": "22.2.0-beta.3",
23
+ "cli": "nx",
24
+ "description": "Create AI migration instructions for Expo SDK 54 upgrade",
25
+ "factory": "./src/migrations/update-22-2-0/create-ai-instructions-for-expo-54"
26
+ },
27
+ "update-22-2-0-add-expo-system-ui": {
28
+ "version": "22.2.0-beta.3",
29
+ "cli": "nx",
30
+ "description": "Add expo-system-ui dependency for Expo SDK 54",
31
+ "factory": "./src/migrations/update-22-2-0/add-expo-system-ui"
32
+ },
33
+ "update-22-2-0-update-jest-for-expo-54": {
34
+ "requires": {
35
+ "expo": ">= 54.0.0"
36
+ },
37
+ "version": "22.2.0-beta.3",
38
+ "cli": "nx",
39
+ "description": "Update Jest configuration for Expo SDK 54",
40
+ "factory": "./src/migrations/update-22-2-0/update-jest-for-expo-54"
20
41
  }
21
42
  },
22
43
  "packageJsonUpdates": {
@@ -169,6 +190,94 @@
169
190
  "alwaysAddToPackageJson": false
170
191
  }
171
192
  }
193
+ },
194
+ "22.2.0": {
195
+ "version": "22.2.0-beta.3",
196
+ "requires": {
197
+ "expo": ">= 53.0.0"
198
+ },
199
+ "packages": {
200
+ "expo": {
201
+ "version": "~54.0.0",
202
+ "alwaysAddToPackageJson": false
203
+ },
204
+ "expo-splash-screen": {
205
+ "version": "~31.0.11",
206
+ "alwaysAddToPackageJson": false
207
+ },
208
+ "expo-status-bar": {
209
+ "version": "~3.0.8",
210
+ "alwaysAddToPackageJson": false
211
+ },
212
+ "expo-system-ui": {
213
+ "version": "~6.0.8",
214
+ "alwaysAddToPackageJson": false
215
+ },
216
+ "@expo/cli": {
217
+ "version": "~54.0.16",
218
+ "alwaysAddToPackageJson": false
219
+ },
220
+ "babel-preset-expo": {
221
+ "version": "~54.0.7",
222
+ "alwaysAddToPackageJson": false
223
+ },
224
+ "react": {
225
+ "version": "^19.1.0",
226
+ "alwaysAddToPackageJson": false
227
+ },
228
+ "react-dom": {
229
+ "version": "^19.1.0",
230
+ "alwaysAddToPackageJson": false
231
+ },
232
+ "@types/react": {
233
+ "version": "^19.1.0",
234
+ "alwaysAddToPackageJson": false
235
+ },
236
+ "react-native": {
237
+ "version": "~0.81.5",
238
+ "alwaysAddToPackageJson": false
239
+ },
240
+ "react-native-web": {
241
+ "version": "~0.21.0",
242
+ "alwaysAddToPackageJson": false
243
+ },
244
+ "@expo/metro-config": {
245
+ "version": "~54.0.9",
246
+ "alwaysAddToPackageJson": false
247
+ },
248
+ "@expo/metro-runtime": {
249
+ "version": "~6.1.2",
250
+ "alwaysAddToPackageJson": false
251
+ },
252
+ "react-native-svg-transformer": {
253
+ "version": "~1.5.1",
254
+ "alwaysAddToPackageJson": false
255
+ },
256
+ "react-native-svg": {
257
+ "version": "15.12.1",
258
+ "alwaysAddToPackageJson": false
259
+ },
260
+ "@testing-library/react-native": {
261
+ "version": "~13.2.0",
262
+ "alwaysAddToPackageJson": false
263
+ },
264
+ "jest-expo": {
265
+ "version": "~54.0.13",
266
+ "alwaysAddToPackageJson": false
267
+ },
268
+ "@babel/runtime": {
269
+ "version": "~7.27.6",
270
+ "alwaysAddToPackageJson": false
271
+ },
272
+ "metro-config": {
273
+ "version": "~0.83.0",
274
+ "alwaysAddToPackageJson": false
275
+ },
276
+ "metro-resolver": {
277
+ "version": "~0.83.0",
278
+ "alwaysAddToPackageJson": false
279
+ }
280
+ }
172
281
  }
173
282
  }
174
283
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/expo",
3
- "version": "22.2.0-beta.2",
3
+ "version": "22.2.0-beta.3",
4
4
  "private": false,
5
5
  "description": "The Expo Plugin for Nx contains executors and generators for managing and developing an expo application within your workspace. For example, you can directly build for different target platforms as well as generate projects and publish your code.",
6
6
  "keywords": [
@@ -28,12 +28,13 @@
28
28
  "main": "./index.js",
29
29
  "types": "index.d.ts",
30
30
  "dependencies": {
31
- "@nx/devkit": "22.2.0-beta.2",
32
- "@nx/eslint": "22.2.0-beta.2",
33
- "@nx/js": "22.2.0-beta.2",
34
- "@nx/react": "22.2.0-beta.2",
31
+ "@nx/devkit": "22.2.0-beta.3",
32
+ "@nx/eslint": "22.2.0-beta.3",
33
+ "@nx/js": "22.2.0-beta.3",
34
+ "@nx/react": "22.2.0-beta.3",
35
35
  "enhanced-resolve": "^5.8.3",
36
36
  "picocolors": "^1.1.0",
37
+ "semver": "^7.6.3",
37
38
  "tsconfig-paths": "^4.1.2",
38
39
  "tslib": "^2.3.0"
39
40
  },
@@ -42,8 +43,8 @@
42
43
  "metro-resolver": ">= 0.82.0"
43
44
  },
44
45
  "optionalDependencies": {
45
- "@nx/detox": "22.2.0-beta.2",
46
- "@nx/rollup": "22.2.0-beta.2"
46
+ "@nx/detox": "22.2.0-beta.3",
47
+ "@nx/rollup": "22.2.0-beta.3"
47
48
  },
48
49
  "executors": "./executors.json",
49
50
  "ng-update": {
@@ -21,6 +21,6 @@ interface WithNxOptions {
21
21
  */
22
22
  mainFields?: string[];
23
23
  }
24
- export declare function withNxMetro(userConfig: MetroConfig, opts?: WithNxOptions): Promise<any>;
24
+ export declare function withNxMetro(userConfig: MetroConfig, opts?: WithNxOptions): any;
25
25
  export {};
26
26
  //# sourceMappingURL=with-nx-metro.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"with-nx-metro.d.ts","sourceRoot":"","sources":["../../../../packages/expo/plugins/with-nx-metro.ts"],"names":[],"mappings":"AAuBA,KAAK,WAAW,GAAG,GAAG,CAAC;AAIvB,UAAU,aAAa;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAKxB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAsB,WAAW,CAC/B,UAAU,EAAE,WAAW,EACvB,IAAI,GAAE,aAAkB,gBAoCzB"}
1
+ {"version":3,"file":"with-nx-metro.d.ts","sourceRoot":"","sources":["../../../../packages/expo/plugins/with-nx-metro.ts"],"names":[],"mappings":"AAuBA,KAAK,WAAW,GAAG,GAAG,CAAC;AAIvB,UAAU,aAAa;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAKxB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,GAAE,aAAkB,OAmC5E"}
@@ -21,7 +21,7 @@ function getMetroConfig() {
21
21
  return metroConfig;
22
22
  }
23
23
  const metro_resolver_1 = require("./metro-resolver");
24
- async function withNxMetro(userConfig, opts = {}) {
24
+ function withNxMetro(userConfig, opts = {}) {
25
25
  const extensions = ['', 'ts', 'tsx', 'js', 'jsx', 'json'];
26
26
  if (opts.debug)
27
27
  process.env.NX_REACT_NATIVE_DEBUG = 'true';
@@ -39,7 +39,7 @@ async function expoApplicationGeneratorInternal(host, schema) {
39
39
  const initTask = await (0, init_1.default)(host, { ...options, skipFormat: true });
40
40
  tasks.push(initTask);
41
41
  if (!options.skipPackageJson) {
42
- tasks.push((0, ensure_dependencies_1.ensureDependencies)(host, options.unitTestRunner));
42
+ tasks.push(await (0, ensure_dependencies_1.ensureDependencies)(host, options.unitTestRunner));
43
43
  }
44
44
  (0, init_root_babel_config_1.initRootBabelConfig)(host);
45
45
  await (0, create_application_files_1.createApplicationFiles)(host, options);
@@ -1,7 +1,6 @@
1
1
  /* eslint-disable jsx-a11y/accessible-emoji */
2
2
  import React, { useRef, useState } from 'react';
3
3
  import {
4
- SafeAreaView,
5
4
  StyleSheet,
6
5
  ScrollView,
7
6
  View,
@@ -17,14 +16,9 @@ export const App = () => {
17
16
  const scrollViewRef = useRef<null | ScrollView>(null);
18
17
 
19
18
  return (
20
- <>
19
+ <View style={styles.container}>
21
20
  <StatusBar barStyle="dark-content" />
22
- <SafeAreaView
23
- style={{
24
- flex: 1,
25
- }}
26
- >
27
- <ScrollView
21
+ <ScrollView
28
22
  ref={(ref) => {
29
23
  scrollViewRef.current = ref;
30
24
  }}
@@ -594,11 +588,14 @@ export const App = () => {
594
588
  </View>
595
589
  </View>
596
590
  </ScrollView>
597
- </SafeAreaView>
598
- </>
591
+ </View>
599
592
  );
600
593
  };
601
594
  const styles = StyleSheet.create({
595
+ container: {
596
+ flex: 1,
597
+ backgroundColor: '#ffffff',
598
+ },
602
599
  scrollView: {
603
600
  backgroundColor: '#ffffff',
604
601
  },
@@ -1,7 +1,6 @@
1
1
  /* eslint-disable jsx-a11y/accessible-emoji */
2
2
  import React, { useRef, useState } from 'react';
3
3
  import {
4
- SafeAreaView,
5
4
  StyleSheet,
6
5
  ScrollView,
7
6
  View,
@@ -17,14 +16,9 @@ export const App = () => {
17
16
  const scrollViewRef = useRef<null | ScrollView>(null);
18
17
 
19
18
  return (
20
- <>
19
+ <View style={styles.container}>
21
20
  <StatusBar barStyle="dark-content" />
22
- <SafeAreaView
23
- style={{
24
- flex: 1,
25
- }}
26
- >
27
- <ScrollView
21
+ <ScrollView
28
22
  ref={(ref) => {
29
23
  scrollViewRef.current = ref;
30
24
  }}
@@ -592,11 +586,14 @@ export const App = () => {
592
586
  </View>
593
587
  </View>
594
588
  </ScrollView>
595
- </SafeAreaView>
596
- </>
589
+ </View>
597
590
  );
598
591
  };
599
592
  const styles = StyleSheet.create({
593
+ container: {
594
+ flex: 1,
595
+ backgroundColor: '#ffffff',
596
+ },
600
597
  scrollView: {
601
598
  backgroundColor: '#ffffff',
602
599
  },
@@ -1,7 +1,6 @@
1
1
  /* eslint-disable jsx-a11y/accessible-emoji */
2
2
  import React, { useRef, useState } from 'react';
3
3
  import {
4
- SafeAreaView,
5
4
  StyleSheet,
6
5
  ScrollView,
7
6
  View,
@@ -17,14 +16,9 @@ export const App = () => {
17
16
  const scrollViewRef = useRef<null | ScrollView>(null);
18
17
 
19
18
  return (
20
- <>
19
+ <View style={styles.container}>
21
20
  <StatusBar barStyle="dark-content" />
22
- <SafeAreaView
23
- style={{
24
- flex: 1,
25
- }}
26
- >
27
- <ScrollView
21
+ <ScrollView
28
22
  ref={(ref) => {
29
23
  scrollViewRef.current = ref;
30
24
  }}
@@ -594,11 +588,14 @@ export const App = () => {
594
588
  </View>
595
589
  </View>
596
590
  </ScrollView>
597
- </SafeAreaView>
598
- </>
591
+ </View>
599
592
  );
600
593
  };
601
594
  const styles = StyleSheet.create({
595
+ container: {
596
+ flex: 1,
597
+ backgroundColor: '#ffffff',
598
+ },
602
599
  scrollView: {
603
600
  backgroundColor: '#ffffff',
604
601
  },
@@ -2,6 +2,6 @@ import { GeneratorCallback, Tree } from '@nx/devkit';
2
2
  import { Schema } from './schema';
3
3
  export declare function expoInitGenerator(tree: Tree, schema: Schema): Promise<GeneratorCallback>;
4
4
  export declare function expoInitGeneratorInternal(host: Tree, schema: Schema): Promise<GeneratorCallback>;
5
- export declare function updateDependencies(host: Tree, schema: Schema): GeneratorCallback;
5
+ export declare function updateDependencies(host: Tree, schema: Schema): Promise<GeneratorCallback>;
6
6
  export default expoInitGenerator;
7
7
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../../../packages/expo/src/generators/init/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,iBAAiB,EAIjB,IAAI,EACL,MAAM,YAAY,CAAC;AAcpB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,8BAE3D;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,8BAwDzE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,qBAkB5D;AAMD,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../../../packages/expo/src/generators/init/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,iBAAiB,EAIjB,IAAI,EACL,MAAM,YAAY,CAAC;AAOpB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,8BAE3D;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,8BAwDzE;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,8BAoBlE;AAMD,eAAe,iBAAiB,CAAC"}
@@ -7,6 +7,7 @@ const devkit_1 = require("@nx/devkit");
7
7
  const add_plugin_1 = require("@nx/devkit/src/utils/add-plugin");
8
8
  const plugin_1 = require("../../../plugins/plugin");
9
9
  const versions_1 = require("../../utils/versions");
10
+ const version_utils_1 = require("../../utils/version-utils");
10
11
  const add_git_ignore_entry_1 = require("./lib/add-git-ignore-entry");
11
12
  function expoInitGenerator(tree, schema) {
12
13
  return expoInitGeneratorInternal(tree, { addPlugin: false, ...schema });
@@ -47,24 +48,25 @@ async function expoInitGeneratorInternal(host, schema) {
47
48
  const tasks = [];
48
49
  if (!schema.skipPackageJson) {
49
50
  tasks.push(moveDependency(host));
50
- tasks.push(updateDependencies(host, schema));
51
+ tasks.push(await updateDependencies(host, schema));
51
52
  }
52
53
  if (!schema.skipFormat) {
53
54
  await (0, devkit_1.formatFiles)(host);
54
55
  }
55
56
  return (0, devkit_1.runTasksInSerial)(...tasks);
56
57
  }
57
- function updateDependencies(host, schema) {
58
+ async function updateDependencies(host, schema) {
59
+ const versions = await (0, version_utils_1.getExpoDependenciesVersionsToInstall)(host);
58
60
  return (0, devkit_1.addDependenciesToPackageJson)(host, {
59
- react: versions_1.reactVersion,
60
- 'react-dom': versions_1.reactDomVersion,
61
- 'react-native': versions_1.reactNativeVersion,
62
- expo: versions_1.expoVersion,
61
+ react: versions.react,
62
+ 'react-dom': versions.reactDom,
63
+ 'react-native': versions.reactNative,
64
+ expo: versions.expo,
63
65
  }, {
64
66
  '@nx/expo': versions_1.nxVersion,
65
- '@expo/cli': versions_1.expoCliVersion,
66
- 'metro-config': versions_1.metroVersion,
67
- 'metro-resolver': versions_1.metroVersion,
67
+ '@expo/cli': versions.expoCli,
68
+ 'metro-config': versions.metro,
69
+ 'metro-resolver': versions.metro,
68
70
  }, undefined, schema.keepExistingVersions);
69
71
  }
70
72
  function moveDependency(host) {
@@ -1 +1 @@
1
- {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../../../../../packages/expo/src/generators/library/library.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,iBAAiB,EAOjB,IAAI,EAGL,MAAM,YAAY,CAAC;AAWpB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAiBlC,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CAM5B;AAED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CAiH5B;AAsJD,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../../../../../packages/expo/src/generators/library/library.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,iBAAiB,EAOjB,IAAI,EAGL,MAAM,YAAY,CAAC;AAWpB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAiBlC,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CAM5B;AAED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CAiH5B;AAwJD,eAAe,oBAAoB,CAAC"}
@@ -17,7 +17,7 @@ const add_rollup_build_target_1 = require("@nx/react/src/generators/library/lib/
17
17
  const artifact_name_and_directory_utils_1 = require("@nx/devkit/src/generators/artifact-name-and-directory-utils");
18
18
  const component_1 = require("../component/component");
19
19
  const path_1 = require("path");
20
- const versions_1 = require("../../utils/versions");
20
+ const version_utils_1 = require("../../utils/version-utils");
21
21
  async function expoLibraryGenerator(host, schema) {
22
22
  return await expoLibraryGeneratorInternal(host, {
23
23
  addPlugin: false,
@@ -44,7 +44,7 @@ async function expoLibraryGeneratorInternal(host, schema) {
44
44
  const initTask = await (0, init_1.default)(host, { ...options, skipFormat: true });
45
45
  tasks.push(initTask);
46
46
  if (!options.skipPackageJson) {
47
- tasks.push((0, ensure_dependencies_1.ensureDependencies)(host, options.unitTestRunner));
47
+ tasks.push(await (0, ensure_dependencies_1.ensureDependencies)(host, options.unitTestRunner));
48
48
  }
49
49
  (0, init_root_babel_config_1.initRootBabelConfig)(host);
50
50
  createFiles(host, options);
@@ -101,6 +101,7 @@ async function expoLibraryGeneratorInternal(host, schema) {
101
101
  return (0, devkit_1.runTasksInSerial)(...tasks);
102
102
  }
103
103
  async function addProject(host, options) {
104
+ const versions = await (0, version_utils_1.getExpoDependenciesVersionsToInstall)(host);
104
105
  const project = {
105
106
  root: options.projectRoot,
106
107
  sourceRoot: (0, devkit_1.joinPathFragments)(options.projectRoot, 'src'),
@@ -112,8 +113,8 @@ async function addProject(host, options) {
112
113
  name: options.importPath,
113
114
  version: '0.0.1',
114
115
  peerDependencies: {
115
- react: versions_1.reactVersion,
116
- 'react-native': versions_1.reactNativeVersion,
116
+ react: versions.react,
117
+ 'react-native': versions.reactNative,
117
118
  },
118
119
  };
119
120
  if (options.isUsingTsSolutionConfig) {
@@ -158,8 +159,8 @@ async function addProject(host, options) {
158
159
  (0, devkit_1.updateJson)(host, `${options.projectRoot}/package.json`, (json) => {
159
160
  json.peerDependencies = {
160
161
  ...json.peerDependencies,
161
- react: versions_1.reactVersion,
162
- 'react-native': versions_1.reactNativeVersion,
162
+ react: versions.react,
163
+ 'react-native': versions.reactNative,
163
164
  };
164
165
  return json;
165
166
  });
@@ -0,0 +1,8 @@
1
+ import { Tree } from '@nx/devkit';
2
+ /**
3
+ * Add expo-system-ui to Expo projects for SDK 54.
4
+ * expo-system-ui is now a built-in module that handles system UI colors
5
+ * and user interface style configuration.
6
+ */
7
+ export default function update(tree: Tree): void;
8
+ //# sourceMappingURL=add-expo-system-ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-expo-system-ui.d.ts","sourceRoot":"","sources":["../../../../../../packages/expo/src/migrations/update-22-2-0/add-expo-system-ui.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EAML,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,IAAI,EAAE,IAAI,QAsCxC"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = update;
4
+ const devkit_1 = require("@nx/devkit");
5
+ /**
6
+ * Add expo-system-ui to Expo projects for SDK 54.
7
+ * expo-system-ui is now a built-in module that handles system UI colors
8
+ * and user interface style configuration.
9
+ */
10
+ function update(tree) {
11
+ const projects = (0, devkit_1.getProjects)(tree);
12
+ for (const [projectName, config] of projects.entries()) {
13
+ if (config.projectType !== 'application' ||
14
+ !isExpoProject(tree, config.root)) {
15
+ continue;
16
+ }
17
+ const appPackageJsonPath = (0, devkit_1.joinPathFragments)(config.root, 'package.json');
18
+ if (!tree.exists(appPackageJsonPath)) {
19
+ continue;
20
+ }
21
+ const packageJson = (0, devkit_1.readJson)(tree, appPackageJsonPath);
22
+ // Check if expo-system-ui is already installed
23
+ if (packageJson.dependencies?.['expo-system-ui'] ||
24
+ packageJson.devDependencies?.['expo-system-ui']) {
25
+ continue;
26
+ }
27
+ // Add expo-system-ui dependency
28
+ (0, devkit_1.updateJson)(tree, appPackageJsonPath, (json) => {
29
+ json.dependencies = json.dependencies || {};
30
+ json.dependencies['expo-system-ui'] = '~6.0.0';
31
+ return json;
32
+ });
33
+ devkit_1.logger.info(`Added expo-system-ui dependency to ${projectName} for SDK 54 support`);
34
+ }
35
+ }
36
+ function isExpoProject(tree, projectRoot) {
37
+ const packageJsonPath = (0, devkit_1.joinPathFragments)(projectRoot, 'package.json');
38
+ if (!tree.exists(packageJsonPath)) {
39
+ return false;
40
+ }
41
+ try {
42
+ const packageJson = (0, devkit_1.readJson)(tree, packageJsonPath);
43
+ return Boolean(packageJson.dependencies?.expo || packageJson.devDependencies?.expo);
44
+ }
45
+ catch {
46
+ return false;
47
+ }
48
+ }
@@ -0,0 +1,3 @@
1
+ import { Tree } from '@nx/devkit';
2
+ export default function createAiInstructionsForExpo54(tree: Tree): Promise<string[]>;
3
+ //# sourceMappingURL=create-ai-instructions-for-expo-54.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-ai-instructions-for-expo-54.d.ts","sourceRoot":"","sources":["../../../../../../packages/expo/src/migrations/update-22-2-0/create-ai-instructions-for-expo-54.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,wBAA8B,6BAA6B,CAAC,IAAI,EAAE,IAAI,qBAerE"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = createAiInstructionsForExpo54;
4
+ const path_1 = require("path");
5
+ const fs_1 = require("fs");
6
+ async function createAiInstructionsForExpo54(tree) {
7
+ const pathToAiInstructions = (0, path_1.join)(__dirname, 'files', 'ai-instructions-for-expo-54.md');
8
+ if (!(0, fs_1.existsSync)(pathToAiInstructions)) {
9
+ return;
10
+ }
11
+ const contents = (0, fs_1.readFileSync)(pathToAiInstructions, 'utf-8');
12
+ tree.write('ai-migrations/MIGRATE_EXPO_54.md', contents);
13
+ return [
14
+ `We created 'ai-migrations/MIGRATE_EXPO_54.md' with instructions for an AI Agent to help migrate your Expo projects to Expo SDK 54.`,
15
+ ];
16
+ }