react-native 0.78.0-rc.5 → 0.78.1

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 (25) hide show
  1. package/Libraries/AppDelegate/RCTReactNativeFactory.mm +24 -0
  2. package/Libraries/AppDelegate/RCTRootViewFactory.h +18 -0
  3. package/Libraries/AppDelegate/RCTRootViewFactory.mm +16 -0
  4. package/Libraries/Core/ReactNativeVersion.js +2 -2
  5. package/Libraries/Image/Image.android.js +2 -0
  6. package/Libraries/Image/ImageViewNativeComponent.js +3 -4
  7. package/React/Base/RCTVersion.m +2 -2
  8. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +1 -7
  9. package/ReactAndroid/gradle.properties +1 -1
  10. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +2 -2
  11. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/CompositeBackgroundDrawable.kt +12 -11
  12. package/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.kt +1 -1
  13. package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
  14. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.mm +9 -0
  15. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTAttributedTextUtils.h +24 -3
  16. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTAttributedTextUtils.mm +1 -43
  17. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTTextLayoutManager.mm +4 -5
  18. package/package.json +8 -8
  19. package/react-native.config.js +5 -21
  20. package/sdks/hermesc/osx-bin/hermes +0 -0
  21. package/sdks/hermesc/osx-bin/hermesc +0 -0
  22. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  23. package/sdks/hermesc/win64-bin/msvcp140.dll +0 -0
  24. package/sdks/hermesc/win64-bin/vcruntime140.dll +0 -0
  25. package/sdks/hermesc/win64-bin/vcruntime140_1.dll +0 -0
@@ -156,6 +156,15 @@ using namespace facebook::react;
156
156
  return RCTAppSetupDefaultModuleFromClass(moduleClass, self.delegate.dependencyProvider);
157
157
  }
158
158
 
159
+ - (NSArray<id<RCTBridgeModule>> *)extraModulesForBridge:(RCTBridge *)bridge
160
+ {
161
+ if ([_delegate respondsToSelector:@selector(extraModulesForBridge:)]) {
162
+ return [_delegate extraModulesForBridge:bridge];
163
+ }
164
+
165
+ return @[];
166
+ }
167
+
159
168
  #pragma mark - RCTComponentViewFactoryComponentProvider
160
169
 
161
170
  - (NSDictionary<NSString *, Class<RCTComponentViewProtocol>> *)thirdPartyFabricComponents
@@ -228,6 +237,21 @@ using namespace facebook::react;
228
237
  };
229
238
  }
230
239
 
240
+ if ([self.delegate respondsToSelector:@selector(loadSourceForBridge:onProgress:onComplete:)]) {
241
+ configuration.loadSourceForBridgeWithProgress =
242
+ ^(RCTBridge *_Nonnull bridge,
243
+ RCTSourceLoadProgressBlock _Nonnull onProgress,
244
+ RCTSourceLoadBlock _Nonnull loadCallback) {
245
+ [weakSelf.delegate loadSourceForBridge:bridge onProgress:onProgress onComplete:loadCallback];
246
+ };
247
+ }
248
+
249
+ if ([self.delegate respondsToSelector:@selector(loadSourceForBridge:withBlock:)]) {
250
+ configuration.loadSourceForBridge = ^(RCTBridge *_Nonnull bridge, RCTSourceLoadBlock _Nonnull loadCallback) {
251
+ [weakSelf.delegate loadSourceForBridge:bridge withBlock:loadCallback];
252
+ };
253
+ }
254
+
231
255
  return [[RCTRootViewFactory alloc] initWithTurboModuleDelegate:self hostDelegate:self configuration:configuration];
232
256
  }
233
257
 
@@ -31,6 +31,11 @@ typedef NSURL *_Nullable (^RCTBundleURLBlock)(void);
31
31
  typedef NSArray<id<RCTBridgeModule>> *_Nonnull (^RCTExtraModulesForBridgeBlock)(RCTBridge *bridge);
32
32
  typedef NSDictionary<NSString *, Class> *_Nonnull (^RCTExtraLazyModuleClassesForBridge)(RCTBridge *bridge);
33
33
  typedef BOOL (^RCTBridgeDidNotFindModuleBlock)(RCTBridge *bridge, NSString *moduleName);
34
+ typedef void (^RCTLoadSourceForBridgeWithProgressBlock)(
35
+ RCTBridge *bridge,
36
+ RCTSourceLoadProgressBlock onProgress,
37
+ RCTSourceLoadBlock loadCallback);
38
+ typedef void (^RCTLoadSourceForBridgeBlock)(RCTBridge *bridge, RCTSourceLoadBlock loadCallback);
34
39
 
35
40
  #pragma mark - RCTRootViewFactory Configuration
36
41
  @interface RCTRootViewFactoryConfiguration : NSObject
@@ -145,6 +150,19 @@ typedef BOOL (^RCTBridgeDidNotFindModuleBlock)(RCTBridge *bridge, NSString *modu
145
150
  */
146
151
  @property (nonatomic, nullable) RCTBridgeDidNotFindModuleBlock bridgeDidNotFindModule;
147
152
 
153
+ /**
154
+ * The bridge will automatically attempt to load the JS source code from the
155
+ * location specified by the `sourceURLForBridge:` method, however, if you want
156
+ * to handle loading the JS yourself, you can do so by setting this property.
157
+ */
158
+ @property (nonatomic, nullable) RCTLoadSourceForBridgeWithProgressBlock loadSourceForBridgeWithProgress;
159
+
160
+ /**
161
+ * Similar to loadSourceForBridgeWithProgress but without progress
162
+ * reporting.
163
+ */
164
+ @property (nonatomic, nullable) RCTLoadSourceForBridgeBlock loadSourceForBridge;
165
+
148
166
  @end
149
167
 
150
168
  #pragma mark - RCTRootViewFactory
@@ -302,6 +302,22 @@
302
302
  return NO;
303
303
  }
304
304
 
305
+ - (void)loadSourceForBridge:(RCTBridge *)bridge withBlock:(RCTSourceLoadBlock)loadCallback
306
+ {
307
+ if (_configuration.loadSourceForBridge != nil) {
308
+ _configuration.loadSourceForBridge(bridge, loadCallback);
309
+ }
310
+ }
311
+
312
+ - (void)loadSourceForBridge:(RCTBridge *)bridge
313
+ onProgress:(RCTSourceLoadProgressBlock)onProgress
314
+ onComplete:(RCTSourceLoadBlock)loadCallback
315
+ {
316
+ if (_configuration.loadSourceForBridgeWithProgress != nil) {
317
+ _configuration.loadSourceForBridgeWithProgress(bridge, onProgress, loadCallback);
318
+ }
319
+ }
320
+
305
321
  - (NSURL *)bundleURL
306
322
  {
307
323
  return self->_configuration.bundleURLBlock();
@@ -16,8 +16,8 @@ const version: $ReadOnly<{
16
16
  }> = {
17
17
  major: 0,
18
18
  minor: 78,
19
- patch: 0,
20
- prerelease: 'rc.5',
19
+ patch: 1,
20
+ prerelease: null,
21
21
  };
22
22
 
23
23
  module.exports = {version};
@@ -133,6 +133,7 @@ let BaseImage: AbstractImageAndroid = React.forwardRef(
133
133
  width: undefined,
134
134
  height: undefined,
135
135
  };
136
+ const defaultSource = resolveAssetSource(props.defaultSource);
136
137
  const loadingIndicatorSource = resolveAssetSource(
137
138
  props.loadingIndicatorSource,
138
139
  );
@@ -178,6 +179,7 @@ let BaseImage: AbstractImageAndroid = React.forwardRef(
178
179
  /* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
179
180
  * when making Flow check .android.js files. */
180
181
  headers: (source?.[0]?.headers || source?.headers: ?{[string]: string}),
182
+ defaultSource: defaultSource ? defaultSource.uri : null,
181
183
  loadingIndicatorSrc: loadingIndicatorSource
182
184
  ? loadingIndicatorSource.uri
183
185
  : null,
@@ -21,6 +21,7 @@ import type {
21
21
  } from '../StyleSheet/StyleSheet';
22
22
  import type {ResolvedAssetSource} from './AssetSourceResolver';
23
23
  import type {ImageProps} from './ImageProps';
24
+ import type {ImageSource} from './ImageSource';
24
25
 
25
26
  import * as NativeComponentRegistry from '../NativeComponent/NativeComponentRegistry';
26
27
  import {ConditionallyIgnoredEventHandlers} from '../NativeComponent/ViewConfigIgnore';
@@ -42,7 +43,7 @@ type Props = $ReadOnly<{
42
43
  | ?ResolvedAssetSource
43
44
  | ?$ReadOnlyArray<?$ReadOnly<{uri?: ?string, ...}>>,
44
45
  headers?: ?{[string]: string},
45
- defaultSrc?: ?string,
46
+ defaultSource?: ?ImageSource | ?string,
46
47
  loadingIndicatorSrc?: ?string,
47
48
  }>;
48
49
 
@@ -82,9 +83,7 @@ export const __INTERNAL_VIEW_CONFIG: PartialViewConfig =
82
83
  },
83
84
  validAttributes: {
84
85
  blurRadius: true,
85
- defaultSource: {
86
- process: require('./resolveAssetSource'),
87
- },
86
+ defaultSource: true,
88
87
  internal_analyticTag: true,
89
88
  resizeMethod: true,
90
89
  resizeMode: true,
@@ -23,8 +23,8 @@ NSDictionary* RCTGetReactNativeVersion(void)
23
23
  __rnVersion = @{
24
24
  RCTVersionMajor: @(0),
25
25
  RCTVersionMinor: @(78),
26
- RCTVersionPatch: @(0),
27
- RCTVersionPrerelease: @"rc.5",
26
+ RCTVersionPatch: @(1),
27
+ RCTVersionPrerelease: [NSNull null],
28
28
  };
29
29
  });
30
30
  return __rnVersion;
@@ -101,11 +101,7 @@ static NSSet<NSNumber *> *returnKeyTypesSet;
101
101
  NSMutableDictionary<NSAttributedStringKey, id> *defaultAttributes =
102
102
  [_backedTextInputView.defaultTextAttributes mutableCopy];
103
103
 
104
- #if !TARGET_OS_MACCATALYST
105
- RCTWeakEventEmitterWrapper *eventEmitterWrapper = [RCTWeakEventEmitterWrapper new];
106
- eventEmitterWrapper.eventEmitter = _eventEmitter;
107
- defaultAttributes[RCTAttributedStringEventEmitterKey] = eventEmitterWrapper;
108
- #endif
104
+ defaultAttributes[RCTAttributedStringEventEmitterKey] = RCTWrapEventEmitter(_eventEmitter);
109
105
 
110
106
  _backedTextInputView.defaultTextAttributes = defaultAttributes;
111
107
  }
@@ -266,10 +262,8 @@ static NSSet<NSNumber *> *returnKeyTypesSet;
266
262
  if (newTextInputProps.textAttributes != oldTextInputProps.textAttributes) {
267
263
  NSMutableDictionary<NSAttributedStringKey, id> *defaultAttributes =
268
264
  RCTNSTextAttributesFromTextAttributes(newTextInputProps.getEffectiveTextAttributes(RCTFontSizeMultiplier()));
269
- #if !TARGET_OS_MACCATALYST
270
265
  defaultAttributes[RCTAttributedStringEventEmitterKey] =
271
266
  _backedTextInputView.defaultTextAttributes[RCTAttributedStringEventEmitterKey];
272
- #endif
273
267
  _backedTextInputView.defaultTextAttributes = defaultAttributes;
274
268
  }
275
269
 
@@ -1,4 +1,4 @@
1
- VERSION_NAME=0.78.0-rc.5
1
+ VERSION_NAME=0.78.1
2
2
  react.internal.publishingGroup=com.facebook.react
3
3
 
4
4
  android.useAndroidX=true
@@ -17,6 +17,6 @@ public class ReactNativeVersion {
17
17
  public static final Map<String, Object> VERSION = MapBuilder.<String, Object>of(
18
18
  "major", 0,
19
19
  "minor", 78,
20
- "patch", 0,
21
- "prerelease", "rc.5");
20
+ "patch", 1,
21
+ "prerelease", null);
22
22
  }
@@ -16,6 +16,7 @@ import android.graphics.drawable.LayerDrawable
16
16
  import android.os.Build
17
17
  import com.facebook.react.common.annotations.UnstableReactNativeAPI
18
18
  import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags
19
+ import com.facebook.react.uimanager.PixelUtil.dpToPx
19
20
  import com.facebook.react.uimanager.style.BorderInsets
20
21
  import com.facebook.react.uimanager.style.BorderRadiusStyle
21
22
 
@@ -198,17 +199,17 @@ internal class CompositeBackgroundDrawable(
198
199
 
199
200
  computedBorderRadius?.let {
200
201
  pathForOutline.addRoundRect(
201
- RectF(bounds),
202
- floatArrayOf(
203
- it.topLeft.horizontal + (computedBorderInsets?.left ?: 0f),
204
- it.topLeft.vertical + (computedBorderInsets?.top ?: 0f),
205
- it.topRight.horizontal + (computedBorderInsets?.right ?: 0f),
206
- it.topRight.vertical + (computedBorderInsets?.top ?: 0f),
207
- it.bottomRight.horizontal + (computedBorderInsets?.right ?: 0f),
208
- it.bottomRight.vertical + (computedBorderInsets?.bottom ?: 0f),
209
- it.bottomLeft.horizontal + (computedBorderInsets?.left ?: 0f),
210
- it.bottomLeft.vertical) + (computedBorderInsets?.bottom ?: 0f),
211
- Path.Direction.CW)
202
+ RectF(bounds),
203
+ floatArrayOf(
204
+ (it.topLeft.horizontal + (computedBorderInsets?.left ?: 0f)).dpToPx(),
205
+ (it.topLeft.vertical + (computedBorderInsets?.top ?: 0f)).dpToPx(),
206
+ (it.topRight.horizontal + (computedBorderInsets?.right ?: 0f)).dpToPx(),
207
+ (it.topRight.vertical + (computedBorderInsets?.top ?: 0f)).dpToPx(),
208
+ (it.bottomRight.horizontal + (computedBorderInsets?.right ?: 0f)).dpToPx(),
209
+ (it.bottomRight.vertical + (computedBorderInsets?.bottom ?: 0f)).dpToPx(),
210
+ (it.bottomLeft.horizontal + (computedBorderInsets?.left ?: 0f)).dpToPx(),
211
+ (it.bottomLeft.vertical + (computedBorderInsets?.bottom ?: 0f)).dpToPx()),
212
+ Path.Direction.CW)
212
213
  }
213
214
 
214
215
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
@@ -124,7 +124,7 @@ public constructor(
124
124
  }
125
125
  }
126
126
 
127
- @ReactProp(name = "defaultSource", customType = "ImageSource")
127
+ @ReactProp(name = "defaultSource")
128
128
  public fun setDefaultSource(view: ReactImageView, source: String?) {
129
129
  view.setDefaultSource(source)
130
130
  }
@@ -17,8 +17,8 @@ namespace facebook::react {
17
17
  constexpr struct {
18
18
  int32_t Major = 0;
19
19
  int32_t Minor = 78;
20
- int32_t Patch = 0;
21
- std::string_view Prerelease = "rc.5";
20
+ int32_t Patch = 1;
21
+ std::string_view Prerelease = "";
22
22
  } ReactNativeVersion;
23
23
 
24
24
  } // namespace facebook::react
@@ -446,6 +446,15 @@ void ObjCInteropTurboModule::setInvocationArg(
446
446
 
447
447
  if (objCArgType == @encode(id)) {
448
448
  id arg = RCTConvertTo<id>(selector, objCArg);
449
+
450
+ // Handle the special case where there is an argument and it must be nil
451
+ // Without this check, the JS side will receive an object.
452
+ // See: discussion at
453
+ // https://github.com/facebook/react-native/pull/49250#issuecomment-2668465893
454
+ if (arg == [NSNull null]) {
455
+ return;
456
+ }
457
+
449
458
  if (arg) {
450
459
  [retainedObjectsForInvocation addObject:arg];
451
460
  }
@@ -52,8 +52,29 @@ BOOL RCTIsAttributedStringEffectivelySame(
52
52
  NSDictionary<NSAttributedStringKey, id> *insensitiveAttributes,
53
53
  const facebook::react::TextAttributes &baseTextAttributes);
54
54
 
55
- @interface RCTWeakEventEmitterWrapper : NSObject
56
- @property (nonatomic, assign) facebook::react::SharedEventEmitter eventEmitter;
57
- @end
55
+ static inline NSData *RCTWrapEventEmitter(const facebook::react::SharedEventEmitter &eventEmitter)
56
+ {
57
+ auto eventEmitterPtr = new std::weak_ptr<const facebook::react::EventEmitter>(eventEmitter);
58
+ return [[NSData alloc] initWithBytesNoCopy:eventEmitterPtr
59
+ length:sizeof(eventEmitterPtr)
60
+ deallocator:^(void *ptrToDelete, NSUInteger) {
61
+ delete (std::weak_ptr<facebook::react::EventEmitter> *)ptrToDelete;
62
+ }];
63
+ }
64
+
65
+ static inline facebook::react::SharedEventEmitter RCTUnwrapEventEmitter(NSData *data)
66
+ {
67
+ if (data.length == 0) {
68
+ return nullptr;
69
+ }
70
+
71
+ auto weakPtr = dynamic_cast<std::weak_ptr<const facebook::react::EventEmitter> *>(
72
+ (std::weak_ptr<const facebook::react::EventEmitter> *)data.bytes);
73
+ if (weakPtr) {
74
+ return weakPtr->lock();
75
+ }
76
+
77
+ return nullptr;
78
+ }
58
79
 
59
80
  NS_ASSUME_NONNULL_END
@@ -16,45 +16,6 @@
16
16
 
17
17
  using namespace facebook::react;
18
18
 
19
- @implementation RCTWeakEventEmitterWrapper {
20
- std::weak_ptr<const EventEmitter> _weakEventEmitter;
21
- }
22
-
23
- - (void)setEventEmitter:(SharedEventEmitter)eventEmitter
24
- {
25
- _weakEventEmitter = eventEmitter;
26
- }
27
-
28
- - (SharedEventEmitter)eventEmitter
29
- {
30
- return _weakEventEmitter.lock();
31
- }
32
-
33
- - (void)dealloc
34
- {
35
- _weakEventEmitter.reset();
36
- }
37
-
38
- - (BOOL)isEqual:(id)object
39
- {
40
- // We consider the underlying EventEmitter as the identity
41
- if (![object isKindOfClass:[self class]]) {
42
- return NO;
43
- }
44
-
45
- auto thisEventEmitter = [self eventEmitter];
46
- auto otherEventEmitter = [((RCTWeakEventEmitterWrapper *)object) eventEmitter];
47
- return thisEventEmitter == otherEventEmitter;
48
- }
49
-
50
- - (NSUInteger)hash
51
- {
52
- // We consider the underlying EventEmitter as the identity
53
- return (NSUInteger)_weakEventEmitter.lock().get();
54
- }
55
-
56
- @end
57
-
58
19
  inline static UIFontWeight RCTUIFontWeightFromInteger(NSInteger fontWeight)
59
20
  {
60
21
  assert(fontWeight > 50);
@@ -409,10 +370,8 @@ static NSMutableAttributedString *RCTNSAttributedStringFragmentWithAttributesFro
409
370
  {
410
371
  auto nsAttributedStringFragment = RCTNSAttributedStringFragmentFromFragment(fragment, placeholderImage);
411
372
 
412
- #if !TARGET_OS_MACCATALYST
413
373
  if (fragment.parentShadowView.componentHandle) {
414
- RCTWeakEventEmitterWrapper *eventEmitterWrapper = [RCTWeakEventEmitterWrapper new];
415
- eventEmitterWrapper.eventEmitter = fragment.parentShadowView.eventEmitter;
374
+ auto eventEmitterWrapper = RCTWrapEventEmitter(fragment.parentShadowView.eventEmitter);
416
375
 
417
376
  NSDictionary<NSAttributedStringKey, id> *additionalTextAttributes =
418
377
  @{RCTAttributedStringEventEmitterKey : eventEmitterWrapper};
@@ -420,7 +379,6 @@ static NSMutableAttributedString *RCTNSAttributedStringFragmentWithAttributesFro
420
379
  [nsAttributedStringFragment addAttributes:additionalTextAttributes
421
380
  range:NSMakeRange(0, nsAttributedStringFragment.length)];
422
381
  }
423
- #endif
424
382
 
425
383
  return nsAttributedStringFragment;
426
384
  }
@@ -268,11 +268,10 @@ static NSLineBreakMode RCTNSLineBreakModeFromEllipsizeMode(EllipsizeMode ellipsi
268
268
  // after (fraction == 1.0) the last character, then the attribute is valid.
269
269
  if (textStorage.length > 0 && (fraction > 0 || characterIndex > 0) &&
270
270
  (fraction < 1 || characterIndex < textStorage.length - 1)) {
271
- RCTWeakEventEmitterWrapper *eventEmitterWrapper =
272
- (RCTWeakEventEmitterWrapper *)[textStorage attribute:RCTAttributedStringEventEmitterKey
273
- atIndex:characterIndex
274
- effectiveRange:NULL];
275
- return eventEmitterWrapper.eventEmitter;
271
+ NSData *eventEmitterWrapper = (NSData *)[textStorage attribute:RCTAttributedStringEventEmitterKey
272
+ atIndex:characterIndex
273
+ effectiveRange:NULL];
274
+ return RCTUnwrapEventEmitter(eventEmitterWrapper);
276
275
  }
277
276
 
278
277
  return nil;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native",
3
- "version": "0.78.0-rc.5",
3
+ "version": "0.78.1",
4
4
  "description": "A framework for building native apps using React",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -108,13 +108,13 @@
108
108
  },
109
109
  "dependencies": {
110
110
  "@jest/create-cache-key-function": "^29.6.3",
111
- "@react-native/assets-registry": "0.78.0-rc.5",
112
- "@react-native/codegen": "0.78.0-rc.5",
113
- "@react-native/community-cli-plugin": "0.78.0-rc.5",
114
- "@react-native/gradle-plugin": "0.78.0-rc.5",
115
- "@react-native/js-polyfills": "0.78.0-rc.5",
116
- "@react-native/normalize-colors": "0.78.0-rc.5",
117
- "@react-native/virtualized-lists": "0.78.0-rc.5",
111
+ "@react-native/assets-registry": "0.78.1",
112
+ "@react-native/codegen": "0.78.1",
113
+ "@react-native/community-cli-plugin": "0.78.1",
114
+ "@react-native/gradle-plugin": "0.78.1",
115
+ "@react-native/js-polyfills": "0.78.1",
116
+ "@react-native/normalize-colors": "0.78.1",
117
+ "@react-native/virtualized-lists": "0.78.1",
118
118
  "abort-controller": "^3.0.0",
119
119
  "anser": "^1.4.9",
120
120
  "ansi-regex": "^5.0.0",
@@ -44,27 +44,11 @@ try {
44
44
 
45
45
  const commands = [];
46
46
 
47
- try {
48
- const {
49
- bundleCommand,
50
- startCommand,
51
- } = require('@react-native/community-cli-plugin');
52
- commands.push(bundleCommand, startCommand);
53
- } catch (e) {
54
- const known =
55
- e.code === 'MODULE_NOT_FOUND' &&
56
- e.message.includes('@react-native-community/cli-server-api');
57
-
58
- if (!known) {
59
- throw e;
60
- }
61
-
62
- if (verbose) {
63
- console.warn(
64
- '@react-native-community/cli-server-api not found, the react-native.config.js may be unusable.',
65
- );
66
- }
67
- }
47
+ const {
48
+ bundleCommand,
49
+ startCommand,
50
+ } = require('@react-native/community-cli-plugin');
51
+ commands.push(bundleCommand, startCommand);
68
52
 
69
53
  const codegenCommand = {
70
54
  name: 'codegen',
Binary file
Binary file
Binary file
Binary file