@nx/react-native 17.0.3 → 17.0.4
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.
- package/.eslintrc.json +7 -1
- package/LICENSE +1 -1
- package/README.md +9 -4
- package/executors.json +5 -0
- package/generators.json +12 -11
- package/migrations.json +126 -0
- package/package.json +11 -15
- package/plugin.d.ts +1 -0
- package/plugin.js +6 -0
- package/plugins/metro-resolver.js +4 -1
- package/plugins/plugin.d.ts +14 -0
- package/plugins/plugin.js +162 -0
- package/plugins/with-nx-metro.js +6 -2
- package/src/executors/build-android/build-android.impl.js +2 -6
- package/src/executors/build-android/build-android.impl.ts +2 -6
- package/src/executors/build-android/schema.json +1 -1
- package/src/executors/build-ios/schema.json +1 -1
- package/src/executors/bundle/schema.d.ts +1 -1
- package/src/executors/bundle/schema.json +1 -1
- package/src/executors/ensure-symlink/ensure-symlink.impl.d.ts +4 -0
- package/src/executors/ensure-symlink/ensure-symlink.impl.js +4 -0
- package/src/executors/ensure-symlink/ensure-symlink.impl.ts +4 -0
- package/src/executors/ensure-symlink/schema.json +1 -1
- package/src/executors/pod-install/schema.json +1 -1
- package/src/executors/run-android/run-android.impl.js +5 -17
- package/src/executors/run-android/run-android.impl.ts +9 -18
- package/src/executors/run-android/schema.json +1 -1
- package/src/executors/run-ios/run-ios.impl.js +4 -16
- package/src/executors/run-ios/run-ios.impl.ts +9 -18
- package/src/executors/run-ios/schema.json +1 -1
- package/src/executors/start/schema.d.ts +1 -1
- package/src/executors/start/schema.json +1 -1
- package/src/executors/start/start.impl.js +11 -26
- package/src/executors/start/start.impl.ts +14 -28
- package/src/executors/storybook/storybook.impl.d.ts +4 -0
- package/src/executors/storybook/storybook.impl.js +15 -2
- package/src/executors/storybook/storybook.impl.ts +26 -7
- package/src/executors/sync-deps/schema.d.ts +1 -0
- package/src/executors/sync-deps/schema.json +6 -1
- package/src/executors/sync-deps/sync-deps.impl.d.ts +2 -1
- package/src/executors/sync-deps/sync-deps.impl.js +33 -11
- package/src/executors/sync-deps/sync-deps.impl.ts +57 -18
- package/src/executors/upgrade/schema.d.ts +1 -0
- package/src/executors/upgrade/schema.json +11 -0
- package/src/executors/upgrade/upgrade.impl.d.ts +13 -0
- package/src/executors/upgrade/upgrade.impl.js +47 -0
- package/src/executors/upgrade/upgrade.impl.ts +64 -0
- package/src/generators/application/application.js +52 -8
- package/src/generators/application/application.spec.ts +29 -2
- package/src/generators/application/files/app/.babelrc.js.template +23 -0
- package/src/generators/application/files/app/Gemfile.template +2 -1
- package/src/generators/application/files/app/android/app/build.gradle.template +12 -28
- package/src/generators/application/files/app/android/app/src/debug/AndroidManifest.xml.template +2 -6
- package/src/generators/application/files/app/android/app/src/main/java/com/__lowerCaseName__/MainActivity.kt.template +22 -0
- package/src/generators/application/files/app/android/app/src/main/java/com/__lowerCaseName__/MainApplication.kt.template +45 -0
- package/src/generators/application/files/app/android/build.gradle.template +7 -20
- package/src/generators/application/files/app/android/gradle/wrapper/gradle-wrapper.properties +2 -1
- package/src/generators/application/files/app/android/gradle.properties +0 -3
- package/src/generators/application/files/app/android/gradlew.template +12 -7
- package/src/generators/application/files/app/android/settings.gradle.template +2 -2
- package/src/generators/application/files/app/ios/Podfile.template +0 -7
- package/src/generators/application/files/app/ios/__className__/AppDelegate.mm.template +5 -0
- package/src/generators/application/files/app/ios/__className__/Info.plist.template +5 -8
- package/src/generators/application/files/app/ios/__className__.xcodeproj/project.pbxproj.template +11 -33
- package/src/generators/application/files/app/metro.config.js.template +1 -5
- package/src/generators/application/files/app/src/app/App.tsx.template +50 -13
- package/src/generators/application/lib/add-e2e.d.ts +3 -0
- package/src/generators/application/lib/add-e2e.js +46 -0
- package/src/generators/application/lib/add-project.js +18 -18
- package/src/generators/application/lib/normalize-options.d.ts +7 -0
- package/src/generators/application/lib/normalize-options.js +35 -3
- package/src/generators/application/lib/normalize-options.spec.ts +70 -7
- package/src/generators/application/schema.d.ts +5 -3
- package/src/generators/application/schema.json +14 -6
- package/src/generators/component/files/__fileName__.tsx__tmpl__ +1 -1
- package/src/generators/component/schema.d.ts +3 -3
- package/src/generators/component/schema.json +4 -4
- package/src/generators/component-story/component-story.d.ts +5 -8
- package/src/generators/component-story/component-story.js +8 -69
- package/src/generators/component-story/schema.d.ts +1 -0
- package/src/generators/component-story/schema.json +11 -3
- package/src/generators/init/init.d.ts +2 -1
- package/src/generators/init/init.js +55 -56
- package/src/generators/init/init.spec.ts +7 -6
- package/src/generators/init/schema.d.ts +3 -3
- package/src/generators/init/schema.json +13 -18
- package/src/generators/library/files/lib/.babelrc.js.template +21 -0
- package/src/generators/library/lib/normalize-options.js +5 -0
- package/src/generators/library/library.js +48 -38
- package/src/generators/library/library.spec.ts +12 -60
- package/src/generators/library/schema.d.ts +1 -0
- package/src/generators/library/schema.json +2 -2
- package/src/generators/stories/schema.d.ts +2 -0
- package/src/generators/stories/schema.json +15 -2
- package/src/generators/stories/stories.d.ts +5 -2
- package/src/generators/stories/stories.js +7 -50
- package/src/generators/storybook-configuration/configuration.d.ts +7 -2
- package/src/generators/storybook-configuration/configuration.js +18 -48
- package/src/generators/storybook-configuration/schema.d.ts +4 -2
- package/src/generators/storybook-configuration/schema.json +22 -12
- package/src/generators/upgrade-native/lib/normalize-options.d.ts +1 -1
- package/src/generators/upgrade-native/schema.d.ts +1 -1
- package/src/generators/upgrade-native/schema.json +3 -3
- package/src/generators/upgrade-native/upgrade-native.d.ts +2 -0
- package/src/generators/upgrade-native/upgrade-native.js +3 -0
- package/src/generators/web-configuration/files/base-vite/.babelrc.js.template +23 -0
- package/src/generators/web-configuration/files/base-vite/index.html__tmpl__ +15 -0
- package/src/generators/web-configuration/files/base-vite/public/favicon.ico +0 -0
- package/src/generators/web-configuration/files/base-vite/src/assets/.gitkeep +0 -0
- package/src/generators/web-configuration/files/base-vite/src/main-web.tsx__tmpl__ +9 -0
- package/src/generators/web-configuration/files/base-vite/vite.config.ts__tmpl__ +82 -0
- package/src/generators/web-configuration/files/base-webpack/.babelrc.js.template +23 -0
- package/src/generators/web-configuration/files/base-webpack/src/assets/.gitkeep +0 -0
- package/src/generators/web-configuration/files/base-webpack/src/favicon.ico +0 -0
- package/src/generators/web-configuration/files/base-webpack/src/index.html__tmpl__ +14 -0
- package/src/generators/web-configuration/files/base-webpack/src/main-web.tsx__tmpl__ +9 -0
- package/src/generators/web-configuration/files/base-webpack/webpack.config.js__tmpl__ +77 -0
- package/src/generators/web-configuration/lib/normalize-schema.d.ts +17 -0
- package/src/generators/web-configuration/lib/normalize-schema.js +16 -0
- package/src/generators/web-configuration/lib/webpack-targets.d.ts +7 -0
- package/src/generators/web-configuration/lib/webpack-targets.js +75 -0
- package/src/generators/web-configuration/schema.d.ts +6 -0
- package/src/generators/web-configuration/schema.json +42 -0
- package/src/generators/web-configuration/web-configuration.d.ts +12 -0
- package/src/generators/web-configuration/web-configuration.js +87 -0
- package/src/migrations/update-16-6-0/update-metro-config.js +1 -5
- package/src/migrations/update-16-9-0/remove-types-react-native.js +2 -9
- package/src/migrations/update-18-0-0/add-upgrade-target.d.ts +6 -0
- package/src/migrations/update-18-0-0/add-upgrade-target.js +33 -0
- package/src/migrations/update-18-0-0/add-web-configuration.d.ts +8 -0
- package/src/migrations/update-18-0-0/add-web-configuration.js +33 -0
- package/src/migrations/update-18-0-0/add-web-configuration.spec.ts +39 -0
- package/src/migrations/update-18-0-0/change-storybook-targets.d.ts +5 -0
- package/src/migrations/update-18-0-0/change-storybook-targets.js +57 -0
- package/src/migrations/update-18-0-0/remove-block-list.d.ts +6 -0
- package/src/migrations/update-18-0-0/remove-block-list.js +28 -0
- package/src/migrations/update-18-0-0/remove-block-list.spec.ts +68 -0
- package/src/migrations/update-18-0-0/remove-metro.d.ts +14 -0
- package/src/migrations/update-18-0-0/remove-metro.js +29 -0
- package/src/migrations/update-18-0-0/remove-symlink-target.d.ts +6 -0
- package/src/migrations/update-18-0-0/remove-symlink-target.js +30 -0
- package/src/migrations/update-18-0-0/remove-symlink-target.spec.ts +40 -0
- package/src/utils/add-jest.d.ts +1 -1
- package/src/utils/add-jest.js +13 -1
- package/src/utils/add-linting.d.ts +1 -0
- package/src/utils/add-linting.js +1 -1
- package/src/utils/add-linting.spec.ts +4 -6
- package/src/utils/chmod-android-gradle-files.js +6 -2
- package/src/utils/ensure-dependencies.d.ts +2 -0
- package/src/utils/ensure-dependencies.js +30 -0
- package/src/utils/find-all-npm-dependencies.js +5 -3
- package/src/utils/find-all-npm-dependencies.spec.ts +17 -9
- package/src/utils/testing-generators.js +1 -0
- package/src/utils/versions.d.ts +10 -13
- package/src/utils/versions.js +11 -14
- package/src/generators/application/files/app/android/app/src/debug/java/com/__lowerCaseName__/ReactNativeFlipper.java.template +0 -75
- package/src/generators/application/files/app/android/app/src/main/java/com/__lowerCaseName__/MainActivity.java.template +0 -32
- package/src/generators/application/files/app/android/app/src/main/java/com/__lowerCaseName__/MainApplication.java.template +0 -62
- package/src/generators/application/files/app/android/app/src/release/java/com/__lowerCaseName__/ReactNativeFlipper.java.template +0 -20
- package/src/generators/application/files/app/babel.config.json.template +0 -3
- package/src/generators/application/lib/add-detox.d.ts +0 -3
- package/src/generators/application/lib/add-detox.js +0 -23
- package/src/generators/component-story/component-story.spec.ts +0 -428
- package/src/generators/component-story/files/__componentFileName__.stories.__fileExt__ +0 -32
- package/src/generators/library/files/lib/babel.config.json.template +0 -17
- package/src/generators/stories/stories-app.spec.ts +0 -128
- package/src/generators/stories/stories-lib.spec.ts +0 -105
- package/src/generators/storybook-configuration/configuration.spec.ts +0 -135
- package/src/generators/storybook-configuration/files/app/storybook.ts.template +0 -9
- package/src/generators/storybook-configuration/files/app/toggle-storybook.tsx.template +0 -74
- package/src/generators/storybook-configuration/files/root/story-loader.ts.template +0 -5
- package/src/generators/storybook-configuration/lib/add-resolver-main-fields-to-metro-config.d.ts +0 -6
- package/src/generators/storybook-configuration/lib/add-resolver-main-fields-to-metro-config.js +0 -25
- package/src/generators/storybook-configuration/lib/add-resolver-main-fields-to-metro-config.spec.ts +0 -161
- package/src/generators/storybook-configuration/lib/create-storybook-files.d.ts +0 -6
- package/src/generators/storybook-configuration/lib/create-storybook-files.js +0 -42
- package/src/generators/storybook-configuration/lib/replace-app-import-with-storybook-toggle.d.ts +0 -7
- package/src/generators/storybook-configuration/lib/replace-app-import-with-storybook-toggle.js +0 -29
- package/src/generators/storybook-configuration/lib/replace-app-import-with-storybook-toggle.spec.ts +0 -65
- package/src/utils/symlink-task.d.ts +0 -2
- package/src/utils/symlink-task.js +0 -18
package/.eslintrc.json
CHANGED
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
<p style="text-align: center;"
|
|
1
|
+
<p style="text-align: center;">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-dark.svg">
|
|
4
|
+
<img alt="Nx - Smart Monorepos · Fast CI" src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-light.svg" width="100%">
|
|
5
|
+
</picture>
|
|
6
|
+
</p>
|
|
2
7
|
|
|
3
8
|
<div style="text-align: center;">
|
|
4
9
|
|
|
@@ -15,9 +20,9 @@
|
|
|
15
20
|
|
|
16
21
|
<hr>
|
|
17
22
|
|
|
18
|
-
# Nx: Smart
|
|
23
|
+
# Nx: Smart Monorepos · Fast CI
|
|
19
24
|
|
|
20
|
-
Nx is a
|
|
25
|
+
Nx is a build system with built-in tooling and advanced CI capabilities. It helps you maintain and scale monorepos, both locally and on CI.
|
|
21
26
|
|
|
22
27
|
This package is a [React Native plugin for Nx](https://nx.dev/packages/react-native).
|
|
23
28
|
|
|
@@ -59,5 +64,5 @@ npx nx@latest init
|
|
|
59
64
|
- [Blog Posts About Nx](https://blog.nrwl.io/nx/home)
|
|
60
65
|
|
|
61
66
|
<p style="text-align: center;"><a href="https://nx.dev/#learning-materials" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-courses-and-videos.svg"
|
|
62
|
-
width="100%" alt="Nx - Smart
|
|
67
|
+
width="100%" alt="Nx - Smart Monorepos · Fast CI"></a></p>
|
|
63
68
|
|
package/executors.json
CHANGED
|
@@ -49,6 +49,11 @@
|
|
|
49
49
|
"implementation": "./src/executors/pod-install/pod-install.impl",
|
|
50
50
|
"schema": "./src/executors/pod-install/schema.json",
|
|
51
51
|
"description": "Run `pod install` in the `ios` directory."
|
|
52
|
+
},
|
|
53
|
+
"upgrade": {
|
|
54
|
+
"implementation": "./src/executors/upgrade/upgrade.impl",
|
|
55
|
+
"schema": "./src/executors/upgrade/schema.json",
|
|
56
|
+
"description": "upgrade executor"
|
|
52
57
|
}
|
|
53
58
|
}
|
|
54
59
|
}
|
package/generators.json
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
"extends": ["@nx/workspace"],
|
|
5
5
|
"generators": {
|
|
6
6
|
"init": {
|
|
7
|
-
"factory": "./src/generators/init/init#
|
|
7
|
+
"factory": "./src/generators/init/init#reactNativeInitGeneratorInternal",
|
|
8
8
|
"schema": "./src/generators/init/schema.json",
|
|
9
|
-
"description": "Initialize the `@
|
|
9
|
+
"description": "Initialize the `@nx/react-native` plugin.",
|
|
10
10
|
"hidden": true
|
|
11
11
|
},
|
|
12
12
|
"application": {
|
|
@@ -30,28 +30,29 @@
|
|
|
30
30
|
"aliases": ["c"]
|
|
31
31
|
},
|
|
32
32
|
"storybook-configuration": {
|
|
33
|
-
"factory": "./src/generators/storybook-configuration/configuration#
|
|
33
|
+
"factory": "./src/generators/storybook-configuration/configuration#storybookConfigurationGeneratorInternal",
|
|
34
34
|
"schema": "./src/generators/storybook-configuration/schema.json",
|
|
35
|
-
"description": "Set up Storybook for a React
|
|
36
|
-
"hidden": false
|
|
35
|
+
"description": "Set up Storybook for a React Native application or library."
|
|
37
36
|
},
|
|
38
37
|
"component-story": {
|
|
39
38
|
"factory": "./src/generators/component-story/component-story#componentStoryGenerator",
|
|
40
39
|
"schema": "./src/generators/component-story/schema.json",
|
|
41
|
-
"description": "Generate Storybook story for a React
|
|
42
|
-
"hidden": false
|
|
40
|
+
"description": "Generate Storybook story for a React Native component."
|
|
43
41
|
},
|
|
44
42
|
"stories": {
|
|
45
43
|
"factory": "./src/generators/stories/stories#storiesGenerator",
|
|
46
44
|
"schema": "./src/generators/stories/schema.json",
|
|
47
|
-
"description": "Create stories
|
|
48
|
-
"hidden": false
|
|
45
|
+
"description": "Create stories for all components declared in an application or library."
|
|
49
46
|
},
|
|
50
47
|
"upgrade-native": {
|
|
51
48
|
"factory": "./src/generators/upgrade-native/upgrade-native#reactNativeUpgradeNativeGenerator",
|
|
52
49
|
"schema": "./src/generators/upgrade-native/schema.json",
|
|
53
|
-
"description": "Destructive command to upgrade native iOS and Android code to latest."
|
|
54
|
-
|
|
50
|
+
"description": "Destructive command to upgrade native iOS and Android code to latest."
|
|
51
|
+
},
|
|
52
|
+
"web-configuration": {
|
|
53
|
+
"factory": "./src/generators/web-configuration/web-configuration#webConfigurationGenerator",
|
|
54
|
+
"schema": "./src/generators/web-configuration/schema.json",
|
|
55
|
+
"description": "Set up web configuration for a React Native app"
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
}
|
package/migrations.json
CHANGED
|
@@ -41,6 +41,42 @@
|
|
|
41
41
|
"version": "16.9.0-beta.1",
|
|
42
42
|
"description": "Remove @types/react-native from package.json",
|
|
43
43
|
"implementation": "./src/migrations/update-16-9-0/remove-types-react-native"
|
|
44
|
+
},
|
|
45
|
+
"update-18-0-0-add-web-configuration": {
|
|
46
|
+
"cli": "nx",
|
|
47
|
+
"version": "18.0.0-beta.0",
|
|
48
|
+
"description": "Add web configuration to react native projects",
|
|
49
|
+
"implementation": "./src/migrations/update-18-0-0/add-web-configuration"
|
|
50
|
+
},
|
|
51
|
+
"update-18-0-0-change-storybook-targets": {
|
|
52
|
+
"cli": "nx",
|
|
53
|
+
"version": "18.0.0-beta.0",
|
|
54
|
+
"description": "Upgrade react native storybook target to use web",
|
|
55
|
+
"implementation": "./src/migrations/update-18-0-0/change-storybook-targets"
|
|
56
|
+
},
|
|
57
|
+
"update-18-0-0-remove-block-list": {
|
|
58
|
+
"cli": "nx",
|
|
59
|
+
"version": "18.0.0-beta.0",
|
|
60
|
+
"description": "Remove blockList in metro.config.js.",
|
|
61
|
+
"implementation": "./src/migrations/update-18-0-0/remove-block-list"
|
|
62
|
+
},
|
|
63
|
+
"update-18-0-0-remove-metro": {
|
|
64
|
+
"cli": "nx",
|
|
65
|
+
"version": "18.0.0-beta.0",
|
|
66
|
+
"description": "Remove metro-* and @react-native-community/cli-* from package.json devDependencies",
|
|
67
|
+
"implementation": "./src/migrations/update-18-0-0/remove-metro"
|
|
68
|
+
},
|
|
69
|
+
"update-18-0-0-remove-symlink-target": {
|
|
70
|
+
"cli": "nx",
|
|
71
|
+
"version": "18.0.0-beta.0",
|
|
72
|
+
"description": "Remove ensure-symlink target",
|
|
73
|
+
"implementation": "./src/migrations/update-18-0-0/remove-symlink-target"
|
|
74
|
+
},
|
|
75
|
+
"update-18-0-0-add-upgrade-target": {
|
|
76
|
+
"cli": "nx",
|
|
77
|
+
"version": "18.0.0-beta.0",
|
|
78
|
+
"description": "Add upgrade target to react native projects",
|
|
79
|
+
"implementation": "./src/migrations/update-18-0-0/add-upgrade-target"
|
|
44
80
|
}
|
|
45
81
|
},
|
|
46
82
|
"packageJsonUpdates": {
|
|
@@ -501,6 +537,96 @@
|
|
|
501
537
|
"alwaysAddToPackageJson": false
|
|
502
538
|
}
|
|
503
539
|
}
|
|
540
|
+
},
|
|
541
|
+
"17.1.0": {
|
|
542
|
+
"version": "17.1.0-beta.1",
|
|
543
|
+
"packages": {
|
|
544
|
+
"react-native": {
|
|
545
|
+
"version": "0.72.6",
|
|
546
|
+
"alwaysAddToPackageJson": false
|
|
547
|
+
},
|
|
548
|
+
"metro": {
|
|
549
|
+
"version": "0.76.8",
|
|
550
|
+
"alwaysAddToPackageJson": false
|
|
551
|
+
},
|
|
552
|
+
"metro-resolver": {
|
|
553
|
+
"version": "0.76.8",
|
|
554
|
+
"alwaysAddToPackageJson": false
|
|
555
|
+
},
|
|
556
|
+
"metro-config": {
|
|
557
|
+
"version": "0.76.8",
|
|
558
|
+
"alwaysAddToPackageJson": false
|
|
559
|
+
},
|
|
560
|
+
"metro-react-native-babel-preset": {
|
|
561
|
+
"version": "0.76.8",
|
|
562
|
+
"alwaysAddToPackageJson": false
|
|
563
|
+
},
|
|
564
|
+
"metro-babel-register": {
|
|
565
|
+
"version": "0.76.8",
|
|
566
|
+
"alwaysAddToPackageJson": false
|
|
567
|
+
},
|
|
568
|
+
"metro-react-native-babel-transformer": {
|
|
569
|
+
"version": "0.76.7",
|
|
570
|
+
"alwaysAddToPackageJson": false
|
|
571
|
+
},
|
|
572
|
+
"@react-native-community/cli": {
|
|
573
|
+
"version": "11.3.7",
|
|
574
|
+
"alwaysAddToPackageJson": false
|
|
575
|
+
},
|
|
576
|
+
"@react-native-community/cli-platform-android": {
|
|
577
|
+
"version": "11.3.7",
|
|
578
|
+
"alwaysAddToPackageJson": false
|
|
579
|
+
},
|
|
580
|
+
"@react-native-community/cli-platform-ios": {
|
|
581
|
+
"version": "11.3.7",
|
|
582
|
+
"alwaysAddToPackageJson": false
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
},
|
|
586
|
+
"17.3.0": {
|
|
587
|
+
"version": "17.3.0-beta.3",
|
|
588
|
+
"packages": {
|
|
589
|
+
"@types/node": {
|
|
590
|
+
"version": "18.16.9"
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
},
|
|
594
|
+
"18.0.0": {
|
|
595
|
+
"version": "18.0.0-beta.0",
|
|
596
|
+
"packages": {
|
|
597
|
+
"react-native": {
|
|
598
|
+
"version": "0.73.2",
|
|
599
|
+
"alwaysAddToPackageJson": false
|
|
600
|
+
},
|
|
601
|
+
"@react-native/babel-preset": {
|
|
602
|
+
"version": "^0.73.18",
|
|
603
|
+
"addToPackageJson": "devDependencies"
|
|
604
|
+
},
|
|
605
|
+
"@react-native/metro-config": {
|
|
606
|
+
"version": "^0.73.2",
|
|
607
|
+
"addToPackageJson": "devDependencies"
|
|
608
|
+
},
|
|
609
|
+
"@types/react": {
|
|
610
|
+
"version": "~18.2.45",
|
|
611
|
+
"alwaysAddToPackageJson": false
|
|
612
|
+
},
|
|
613
|
+
"@testing-library/react-native": {
|
|
614
|
+
"version": "~12.4.2",
|
|
615
|
+
"alwaysAddToPackageJson": false
|
|
616
|
+
},
|
|
617
|
+
"react-native-svg-transformer": {
|
|
618
|
+
"version": "1.2.0",
|
|
619
|
+
"alwaysAddToPackageJson": false
|
|
620
|
+
},
|
|
621
|
+
"react-native-svg": {
|
|
622
|
+
"version": "14.1.0",
|
|
623
|
+
"alwaysAddToPackageJson": false
|
|
624
|
+
},
|
|
625
|
+
"@react-native-community/cli-platform-android": {
|
|
626
|
+
"version": "12.3.0",
|
|
627
|
+
"alwaysAddToPackageJson": false
|
|
628
|
+
}
|
|
629
|
+
}
|
|
504
630
|
}
|
|
505
631
|
}
|
|
506
632
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nx/react-native",
|
|
3
|
-
"version": "17.0.
|
|
3
|
+
"version": "17.0.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "The Nx Plugin for React Native contains generators for managing React Native applications and libraries within an Nx workspace. It provides: \n\n-Integration with libraries such as Jest, Detox, and Storybook.\n-Scaffolding for creating buildable libraries that can be published to npm.\n-Utilities for automatic workspace refactoring.",
|
|
6
6
|
"keywords": [
|
|
@@ -25,28 +25,24 @@
|
|
|
25
25
|
"main": "./index.js",
|
|
26
26
|
"types": "index.d.ts",
|
|
27
27
|
"dependencies": {
|
|
28
|
+
"ajv": "^8.12.0",
|
|
28
29
|
"chalk": "^4.1.0",
|
|
29
30
|
"enhanced-resolve": "^5.8.3",
|
|
30
31
|
"fs-extra": "^11.1.0",
|
|
31
32
|
"glob": "7.1.4",
|
|
32
33
|
"ignore": "^5.0.4",
|
|
33
|
-
"metro-config": "0.
|
|
34
|
-
"metro-resolver": "0.
|
|
35
|
-
"minimatch": "3.0.5",
|
|
34
|
+
"metro-config": "~0.80.4",
|
|
35
|
+
"metro-resolver": "~0.80.4",
|
|
36
36
|
"node-fetch": "^2.6.7",
|
|
37
37
|
"tsconfig-paths": "^4.1.2",
|
|
38
38
|
"tslib": "^2.3.0",
|
|
39
|
-
"@nx/
|
|
40
|
-
"@nx/
|
|
41
|
-
"@nx/
|
|
42
|
-
"@nx/
|
|
43
|
-
"@nx/
|
|
44
|
-
"@nx/
|
|
45
|
-
"@
|
|
46
|
-
"@nrwl/react-native": "17.0.3"
|
|
47
|
-
},
|
|
48
|
-
"peerDependencies": {
|
|
49
|
-
"react-native": ">= 0.72.0 < 0.73.0"
|
|
39
|
+
"@nx/devkit": "17.0.4",
|
|
40
|
+
"@nx/jest": "17.0.4",
|
|
41
|
+
"@nx/js": "17.0.4",
|
|
42
|
+
"@nx/eslint": "17.0.4",
|
|
43
|
+
"@nx/react": "17.0.4",
|
|
44
|
+
"@nx/workspace": "17.0.4",
|
|
45
|
+
"@nrwl/react-native": "17.0.4"
|
|
50
46
|
},
|
|
51
47
|
"executors": "./executors.json",
|
|
52
48
|
"ng-update": {
|
package/plugin.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { createNodes, createDependencies, ReactNativePluginOptions, } from './plugins/plugin';
|
package/plugin.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDependencies = exports.createNodes = void 0;
|
|
4
|
+
var plugin_1 = require("./plugins/plugin");
|
|
5
|
+
Object.defineProperty(exports, "createNodes", { enumerable: true, get: function () { return plugin_1.createNodes; } });
|
|
6
|
+
Object.defineProperty(exports, "createDependencies", { enumerable: true, get: function () { return plugin_1.createDependencies; } });
|
|
@@ -27,6 +27,9 @@ function getResolveRequest(extensions) {
|
|
|
27
27
|
if (resolvedPath) {
|
|
28
28
|
return resolvedPath;
|
|
29
29
|
}
|
|
30
|
+
if (debug) {
|
|
31
|
+
console.log(chalk.red(`[Nx] Unable to resolve with any resolver: ${realModuleName}`));
|
|
32
|
+
}
|
|
30
33
|
throw new Error(`Cannot resolve ${chalk.bold(realModuleName)}`);
|
|
31
34
|
};
|
|
32
35
|
}
|
|
@@ -84,7 +87,7 @@ function tsconfigPathsResolver(context, extensions, realModuleName, platform, de
|
|
|
84
87
|
}
|
|
85
88
|
catch {
|
|
86
89
|
if (debug) {
|
|
87
|
-
console.log(chalk.
|
|
90
|
+
console.log(chalk.cyan(`[Nx] Failed to resolve ${chalk.bold(realModuleName)}`));
|
|
88
91
|
console.log(chalk.cyan(`[Nx] The following tsconfig paths was used:\n:${chalk.bold(JSON.stringify(paths, null, 2))}`));
|
|
89
92
|
}
|
|
90
93
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CreateDependencies, CreateNodes } from '@nx/devkit';
|
|
2
|
+
export interface ReactNativePluginOptions {
|
|
3
|
+
startTargetName?: string;
|
|
4
|
+
podInstallTargetName?: string;
|
|
5
|
+
runIosTargetName?: string;
|
|
6
|
+
runAndroidTargetName?: string;
|
|
7
|
+
buildIosTargetName?: string;
|
|
8
|
+
buildAndroidTargetName?: string;
|
|
9
|
+
bundleTargetName?: string;
|
|
10
|
+
syncDepsTargetName?: string;
|
|
11
|
+
upgradeTargetname?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const createDependencies: CreateDependencies;
|
|
14
|
+
export declare const createNodes: CreateNodes<ReactNativePluginOptions>;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createNodes = exports.createDependencies = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const js_1 = require("@nx/js");
|
|
7
|
+
const get_named_inputs_1 = require("@nx/devkit/src/utils/get-named-inputs");
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const calculate_hash_for_create_nodes_1 = require("@nx/devkit/src/utils/calculate-hash-for-create-nodes");
|
|
10
|
+
const cache_directory_1 = require("nx/src/utils/cache-directory");
|
|
11
|
+
const cachePath = (0, path_1.join)(cache_directory_1.projectGraphCacheDirectory, 'react-native.hash');
|
|
12
|
+
const targetsCache = (0, fs_1.existsSync)(cachePath) ? readTargetsCache() : {};
|
|
13
|
+
const calculatedTargets = {};
|
|
14
|
+
function readTargetsCache() {
|
|
15
|
+
return (0, devkit_1.readJsonFile)(cachePath);
|
|
16
|
+
}
|
|
17
|
+
function writeTargetsToCache(targets) {
|
|
18
|
+
(0, devkit_1.writeJsonFile)(cachePath, targets);
|
|
19
|
+
}
|
|
20
|
+
const createDependencies = () => {
|
|
21
|
+
writeTargetsToCache(calculatedTargets);
|
|
22
|
+
return [];
|
|
23
|
+
};
|
|
24
|
+
exports.createDependencies = createDependencies;
|
|
25
|
+
exports.createNodes = [
|
|
26
|
+
'**/app.{json,config.js}',
|
|
27
|
+
(configFilePath, options, context) => {
|
|
28
|
+
options = normalizeOptions(options);
|
|
29
|
+
const projectRoot = (0, path_1.dirname)(configFilePath);
|
|
30
|
+
// Do not create a project if package.json or project.json or metro.config.js isn't there.
|
|
31
|
+
const siblingFiles = (0, fs_1.readdirSync)((0, path_1.join)(context.workspaceRoot, projectRoot));
|
|
32
|
+
if (!siblingFiles.includes('package.json') ||
|
|
33
|
+
!siblingFiles.includes('metro.config.js')) {
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
const appConfig = getAppConfig(configFilePath, context);
|
|
37
|
+
if (appConfig.expo) {
|
|
38
|
+
return {};
|
|
39
|
+
}
|
|
40
|
+
const hash = (0, calculate_hash_for_create_nodes_1.calculateHashForCreateNodes)(projectRoot, options, context, [
|
|
41
|
+
(0, js_1.getLockFileName)((0, devkit_1.detectPackageManager)(context.workspaceRoot)),
|
|
42
|
+
]);
|
|
43
|
+
const targets = targetsCache[hash]
|
|
44
|
+
? targetsCache[hash]
|
|
45
|
+
: buildReactNativeTargets(projectRoot, options, context);
|
|
46
|
+
calculatedTargets[hash] = targets;
|
|
47
|
+
return {
|
|
48
|
+
projects: {
|
|
49
|
+
[projectRoot]: {
|
|
50
|
+
targets,
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
function buildReactNativeTargets(projectRoot, options, context) {
|
|
57
|
+
const namedInputs = (0, get_named_inputs_1.getNamedInputs)(projectRoot, context);
|
|
58
|
+
const targets = {
|
|
59
|
+
[options.startTargetName]: {
|
|
60
|
+
command: `react-native start`,
|
|
61
|
+
options: { cwd: projectRoot },
|
|
62
|
+
},
|
|
63
|
+
[options.podInstallTargetName]: {
|
|
64
|
+
command: `pod install`,
|
|
65
|
+
options: { cwd: (0, devkit_1.joinPathFragments)(projectRoot, 'ios') },
|
|
66
|
+
dependsOn: [`${options.syncDepsTargetName}`],
|
|
67
|
+
cache: true,
|
|
68
|
+
inputs: getInputs(namedInputs),
|
|
69
|
+
outputs: [
|
|
70
|
+
getOutputs(projectRoot, 'ios/Pods'),
|
|
71
|
+
getOutputs(projectRoot, 'ios/Podfile.lock'),
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
[options.runIosTargetName]: {
|
|
75
|
+
command: `react-native run-ios`,
|
|
76
|
+
options: { cwd: projectRoot },
|
|
77
|
+
},
|
|
78
|
+
[options.runAndroidTargetName]: {
|
|
79
|
+
command: `react-native run-android`,
|
|
80
|
+
options: { cwd: projectRoot },
|
|
81
|
+
},
|
|
82
|
+
[options.buildIosTargetName]: {
|
|
83
|
+
command: `react-native build-ios`,
|
|
84
|
+
options: { cwd: projectRoot },
|
|
85
|
+
cache: true,
|
|
86
|
+
dependsOn: [`^${options.buildIosTargetName}`],
|
|
87
|
+
inputs: getInputs(namedInputs),
|
|
88
|
+
outputs: [getOutputs(projectRoot, 'ios/build/Build/Products')],
|
|
89
|
+
},
|
|
90
|
+
[options.buildAndroidTargetName]: {
|
|
91
|
+
command: `react-native build-android`,
|
|
92
|
+
options: { cwd: projectRoot },
|
|
93
|
+
cache: true,
|
|
94
|
+
dependsOn: [`^${options.buildAndroidTargetName}`],
|
|
95
|
+
inputs: getInputs(namedInputs),
|
|
96
|
+
outputs: [getOutputs(projectRoot, 'android/app/build/outputs')],
|
|
97
|
+
},
|
|
98
|
+
[options.bundleTargetName]: {
|
|
99
|
+
command: `react-native bundle`,
|
|
100
|
+
options: { cwd: projectRoot },
|
|
101
|
+
dependsOn: [`^${options.bundleTargetName}`],
|
|
102
|
+
inputs: getInputs(namedInputs),
|
|
103
|
+
},
|
|
104
|
+
[options.syncDepsTargetName]: {
|
|
105
|
+
executor: '@nx/react-native:sync-deps',
|
|
106
|
+
},
|
|
107
|
+
[options.upgradeTargetname]: {
|
|
108
|
+
command: `react-native upgrade`,
|
|
109
|
+
options: { cwd: projectRoot },
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
return targets;
|
|
113
|
+
}
|
|
114
|
+
function getAppConfig(configFilePath, context) {
|
|
115
|
+
const resolvedPath = (0, path_1.join)(context.workspaceRoot, configFilePath);
|
|
116
|
+
let module = load(resolvedPath);
|
|
117
|
+
return module.default ?? module;
|
|
118
|
+
}
|
|
119
|
+
function getInputs(namedInputs) {
|
|
120
|
+
return [
|
|
121
|
+
...('production' in namedInputs
|
|
122
|
+
? ['default', '^production']
|
|
123
|
+
: ['default', '^default']),
|
|
124
|
+
{
|
|
125
|
+
externalDependencies: ['react-native'],
|
|
126
|
+
},
|
|
127
|
+
];
|
|
128
|
+
}
|
|
129
|
+
function getOutputs(projectRoot, dir) {
|
|
130
|
+
if (projectRoot === '.') {
|
|
131
|
+
return `{projectRoot}/${dir}`;
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
return `{workspaceRoot}/${projectRoot}/${dir}`;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Load the module after ensuring that the require cache is cleared.
|
|
139
|
+
*/
|
|
140
|
+
function load(path) {
|
|
141
|
+
// Clear cache if the path is in the cache
|
|
142
|
+
if (require.cache[path]) {
|
|
143
|
+
for (const k of Object.keys(require.cache)) {
|
|
144
|
+
delete require.cache[k];
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Then require
|
|
148
|
+
return require(path);
|
|
149
|
+
}
|
|
150
|
+
function normalizeOptions(options) {
|
|
151
|
+
options ??= {};
|
|
152
|
+
options.startTargetName ??= 'start';
|
|
153
|
+
options.podInstallTargetName ??= 'pod-install';
|
|
154
|
+
options.runIosTargetName ??= 'run-ios';
|
|
155
|
+
options.runAndroidTargetName ??= 'run-android';
|
|
156
|
+
options.buildIosTargetName ??= 'build-ios';
|
|
157
|
+
options.buildAndroidTargetName ??= 'build-android';
|
|
158
|
+
options.bundleTargetName ??= 'bundle';
|
|
159
|
+
options.syncDepsTargetName ??= 'sync-deps';
|
|
160
|
+
options.upgradeTargetname ??= 'upgrade';
|
|
161
|
+
return options;
|
|
162
|
+
}
|
package/plugins/with-nx-metro.js
CHANGED
|
@@ -11,14 +11,18 @@ async function withNxMetro(userConfig, opts = {}) {
|
|
|
11
11
|
process.env.NX_REACT_NATIVE_DEBUG = 'true';
|
|
12
12
|
if (opts.extensions)
|
|
13
13
|
extensions.push(...opts.extensions);
|
|
14
|
-
let watchFolders =
|
|
14
|
+
let watchFolders = (0, fs_extra_1.readdirSync)(devkit_1.workspaceRoot)
|
|
15
|
+
.filter((fileName) => !['dist', 'e2e'].includes(fileName) && !fileName.startsWith('.'))
|
|
16
|
+
.map((fileName) => (0, devkit_1.joinPathFragments)(devkit_1.workspaceRoot, fileName))
|
|
17
|
+
.filter((filePath) => (0, fs_extra_1.statSync)(filePath).isDirectory());
|
|
15
18
|
if (opts.watchFolders?.length) {
|
|
16
19
|
watchFolders = watchFolders.concat(opts.watchFolders);
|
|
17
20
|
}
|
|
18
|
-
watchFolders = watchFolders.filter((folder) => (0, fs_extra_1.existsSync)(folder));
|
|
21
|
+
watchFolders = [...new Set(watchFolders)].filter((folder) => (0, fs_extra_1.existsSync)(folder));
|
|
19
22
|
const nxConfig = {
|
|
20
23
|
resolver: {
|
|
21
24
|
resolveRequest: (0, metro_resolver_1.getResolveRequest)(extensions),
|
|
25
|
+
nodeModulesPaths: [(0, devkit_1.joinPathFragments)(devkit_1.workspaceRoot, 'node_modules')],
|
|
22
26
|
},
|
|
23
27
|
watchFolders,
|
|
24
28
|
};
|
|
@@ -6,18 +6,14 @@ const chmod_android_gradle_files_1 = require("../../utils/chmod-android-gradle-f
|
|
|
6
6
|
const get_cli_options_1 = require("../../utils/get-cli-options");
|
|
7
7
|
async function* buildAndroidExecutor(options, context) {
|
|
8
8
|
const projectRoot = context.projectsConfigurations.projects[context.projectName].root;
|
|
9
|
-
(0, chmod_android_gradle_files_1.chmodAndroidGradlewFiles)((0, path_1.join)(projectRoot, 'android'));
|
|
9
|
+
(0, chmod_android_gradle_files_1.chmodAndroidGradlewFiles)((0, path_1.join)(context.root, projectRoot, 'android'));
|
|
10
10
|
await runCliBuild(context.root, projectRoot, options);
|
|
11
11
|
yield { success: true };
|
|
12
12
|
}
|
|
13
13
|
exports.default = buildAndroidExecutor;
|
|
14
14
|
function runCliBuild(workspaceRoot, projectRoot, options) {
|
|
15
15
|
return new Promise((res, reject) => {
|
|
16
|
-
|
|
17
|
-
* Call the react native cli with option `--no-packager`
|
|
18
|
-
* Not passing '--packager' due to cli will launch start command from the project root
|
|
19
|
-
*/
|
|
20
|
-
const childProcess = (0, child_process_1.fork)(require.resolve('react-native/cli.js'), ['build-android', ...createBuildAndroidOptions(options), '--no-packager'], {
|
|
16
|
+
const childProcess = (0, child_process_1.fork)(require.resolve('react-native/cli.js'), ['build-android', ...createBuildAndroidOptions(options)], {
|
|
21
17
|
stdio: 'inherit',
|
|
22
18
|
cwd: (0, path_1.resolve)(workspaceRoot, projectRoot),
|
|
23
19
|
env: { ...process.env, RCT_METRO_PORT: options.port.toString() },
|
|
@@ -15,7 +15,7 @@ export default async function* buildAndroidExecutor(
|
|
|
15
15
|
): AsyncGenerator<ReactNativeBuildOutput> {
|
|
16
16
|
const projectRoot =
|
|
17
17
|
context.projectsConfigurations.projects[context.projectName].root;
|
|
18
|
-
chmodAndroidGradlewFiles(join(projectRoot, 'android'));
|
|
18
|
+
chmodAndroidGradlewFiles(join(context.root, projectRoot, 'android'));
|
|
19
19
|
|
|
20
20
|
await runCliBuild(context.root, projectRoot, options);
|
|
21
21
|
yield { success: true };
|
|
@@ -27,13 +27,9 @@ function runCliBuild(
|
|
|
27
27
|
options: ReactNativeBuildAndroidOptions
|
|
28
28
|
) {
|
|
29
29
|
return new Promise<ChildProcess>((res, reject) => {
|
|
30
|
-
/**
|
|
31
|
-
* Call the react native cli with option `--no-packager`
|
|
32
|
-
* Not passing '--packager' due to cli will launch start command from the project root
|
|
33
|
-
*/
|
|
34
30
|
const childProcess = fork(
|
|
35
31
|
require.resolve('react-native/cli.js'),
|
|
36
|
-
['build-android', ...createBuildAndroidOptions(options)
|
|
32
|
+
['build-android', ...createBuildAndroidOptions(options)],
|
|
37
33
|
{
|
|
38
34
|
stdio: 'inherit',
|
|
39
35
|
cwd: pathResolve(workspaceRoot, projectRoot),
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"outputCapture": "direct-nodejs",
|
|
4
4
|
"cli": "nx",
|
|
5
5
|
"$id": "NxReactNativeBuildAndroid",
|
|
6
|
-
"$schema": "
|
|
6
|
+
"$schema": "https://json-schema.org/schema",
|
|
7
7
|
"title": "Release Build for Android",
|
|
8
8
|
"description": "Build target options for Android.",
|
|
9
9
|
"type": "object",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// options form https://github.com/react-native
|
|
1
|
+
// options form https://github.com/facebook/react-native/tree/main/packages/community-cli-plugin#bundle
|
|
2
2
|
export interface ReactNativeBundleOptions {
|
|
3
3
|
entryFile: string;
|
|
4
4
|
platform: string;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"outputCapture": "direct-nodejs",
|
|
4
4
|
"cli": "nx",
|
|
5
5
|
"$id": "NxReactNativeBundle",
|
|
6
|
-
"$schema": "
|
|
6
|
+
"$schema": "https://json-schema.org/schema",
|
|
7
7
|
"title": "Offline JS Bundle for React Native",
|
|
8
8
|
"description": "JS Bundle target options.",
|
|
9
9
|
"type": "object",
|
|
@@ -2,4 +2,8 @@ import { ExecutorContext } from '@nx/devkit';
|
|
|
2
2
|
export interface ReactNativeEnsureSymlinkOutput {
|
|
3
3
|
success: boolean;
|
|
4
4
|
}
|
|
5
|
+
/**
|
|
6
|
+
* TODO (@xiongemi): remove this function in v19.
|
|
7
|
+
* @deprecated It is no longer needed for react native 73.
|
|
8
|
+
*/
|
|
5
9
|
export default function ensureSymlinkExecutor(_: any, context: ExecutorContext): AsyncGenerator<ReactNativeEnsureSymlinkOutput>;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const ensure_node_modules_symlink_1 = require("../../utils/ensure-node-modules-symlink");
|
|
4
|
+
/**
|
|
5
|
+
* TODO (@xiongemi): remove this function in v19.
|
|
6
|
+
* @deprecated It is no longer needed for react native 73.
|
|
7
|
+
*/
|
|
4
8
|
async function* ensureSymlinkExecutor(_, context) {
|
|
5
9
|
const projectRoot = context.projectsConfigurations.projects[context.projectName].root;
|
|
6
10
|
(0, ensure_node_modules_symlink_1.ensureNodeModulesSymlink)(context.root, projectRoot);
|
|
@@ -5,6 +5,10 @@ export interface ReactNativeEnsureSymlinkOutput {
|
|
|
5
5
|
success: boolean;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* TODO (@xiongemi): remove this function in v19.
|
|
10
|
+
* @deprecated It is no longer needed for react native 73.
|
|
11
|
+
*/
|
|
8
12
|
export default async function* ensureSymlinkExecutor(
|
|
9
13
|
_,
|
|
10
14
|
context: ExecutorContext
|