react-native-debug-toolkit 3.3.3 → 3.3.8

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 (98) hide show
  1. package/README.md +48 -13
  2. package/README.zh-CN.md +48 -13
  3. package/android/src/main/java/com/reactnativedebugtoolkit/DebugToolkitDevConnectModule.java +0 -187
  4. package/bin/debug-toolkit.js +1 -16
  5. package/ios/DebugToolkitDevConnect.h +0 -12
  6. package/ios/DebugToolkitDevConnect.mm +0 -354
  7. package/lib/commonjs/core/initialize.js +8 -1
  8. package/lib/commonjs/core/initialize.js.map +1 -1
  9. package/lib/commonjs/features/devConnect/DevConnectTab.js +18 -470
  10. package/lib/commonjs/features/devConnect/DevConnectTab.js.map +1 -1
  11. package/lib/commonjs/features/devConnect/devConnectPreferences.js +0 -12
  12. package/lib/commonjs/features/devConnect/devConnectPreferences.js.map +1 -1
  13. package/lib/commonjs/features/devConnect/devConnectUtils.js +2 -57
  14. package/lib/commonjs/features/devConnect/devConnectUtils.js.map +1 -1
  15. package/lib/commonjs/features/devConnect/index.js +1 -23
  16. package/lib/commonjs/features/devConnect/index.js.map +1 -1
  17. package/lib/commonjs/features/devConnect/nativeDevConnect.js +1 -103
  18. package/lib/commonjs/features/devConnect/nativeDevConnect.js.map +1 -1
  19. package/lib/commonjs/index.js +7 -0
  20. package/lib/commonjs/index.js.map +1 -1
  21. package/lib/commonjs/ui/DebugView.js +2 -0
  22. package/lib/commonjs/ui/DebugView.js.map +1 -1
  23. package/lib/commonjs/ui/panel/FloatPanelView.js +22 -10
  24. package/lib/commonjs/ui/panel/FloatPanelView.js.map +1 -1
  25. package/lib/commonjs/ui/panel/tabPersistence.js +17 -0
  26. package/lib/commonjs/ui/panel/tabPersistence.js.map +1 -0
  27. package/lib/commonjs/utils/createDebugTab.js +21 -0
  28. package/lib/commonjs/utils/createDebugTab.js.map +1 -0
  29. package/lib/commonjs/utils/debugPreferences.js +0 -1
  30. package/lib/commonjs/utils/debugPreferences.js.map +1 -1
  31. package/lib/module/core/initialize.js +8 -1
  32. package/lib/module/core/initialize.js.map +1 -1
  33. package/lib/module/features/devConnect/DevConnectTab.js +21 -473
  34. package/lib/module/features/devConnect/DevConnectTab.js.map +1 -1
  35. package/lib/module/features/devConnect/devConnectPreferences.js +1 -12
  36. package/lib/module/features/devConnect/devConnectPreferences.js.map +1 -1
  37. package/lib/module/features/devConnect/devConnectUtils.js +1 -53
  38. package/lib/module/features/devConnect/devConnectUtils.js.map +1 -1
  39. package/lib/module/features/devConnect/index.js +5 -9
  40. package/lib/module/features/devConnect/index.js.map +1 -1
  41. package/lib/module/features/devConnect/nativeDevConnect.js +1 -100
  42. package/lib/module/features/devConnect/nativeDevConnect.js.map +1 -1
  43. package/lib/module/index.js +1 -0
  44. package/lib/module/index.js.map +1 -1
  45. package/lib/module/ui/DebugView.js +2 -0
  46. package/lib/module/ui/DebugView.js.map +1 -1
  47. package/lib/module/ui/panel/FloatPanelView.js +22 -10
  48. package/lib/module/ui/panel/FloatPanelView.js.map +1 -1
  49. package/lib/module/ui/panel/tabPersistence.js +13 -0
  50. package/lib/module/ui/panel/tabPersistence.js.map +1 -0
  51. package/lib/module/utils/createDebugTab.js +17 -0
  52. package/lib/module/utils/createDebugTab.js.map +1 -0
  53. package/lib/module/utils/debugPreferences.js +0 -1
  54. package/lib/module/utils/debugPreferences.js.map +1 -1
  55. package/lib/typescript/src/core/initialize.d.ts +2 -0
  56. package/lib/typescript/src/core/initialize.d.ts.map +1 -1
  57. package/lib/typescript/src/features/devConnect/DevConnectTab.d.ts.map +1 -1
  58. package/lib/typescript/src/features/devConnect/devConnectPreferences.d.ts +0 -2
  59. package/lib/typescript/src/features/devConnect/devConnectPreferences.d.ts.map +1 -1
  60. package/lib/typescript/src/features/devConnect/devConnectUtils.d.ts +0 -20
  61. package/lib/typescript/src/features/devConnect/devConnectUtils.d.ts.map +1 -1
  62. package/lib/typescript/src/features/devConnect/index.d.ts +2 -2
  63. package/lib/typescript/src/features/devConnect/index.d.ts.map +1 -1
  64. package/lib/typescript/src/features/devConnect/nativeDevConnect.d.ts +0 -25
  65. package/lib/typescript/src/features/devConnect/nativeDevConnect.d.ts.map +1 -1
  66. package/lib/typescript/src/features/devConnect/types.d.ts +1 -3
  67. package/lib/typescript/src/features/devConnect/types.d.ts.map +1 -1
  68. package/lib/typescript/src/index.d.ts +2 -0
  69. package/lib/typescript/src/index.d.ts.map +1 -1
  70. package/lib/typescript/src/ui/DebugView.d.ts +4 -2
  71. package/lib/typescript/src/ui/DebugView.d.ts.map +1 -1
  72. package/lib/typescript/src/ui/panel/FloatPanelView.d.ts.map +1 -1
  73. package/lib/typescript/src/ui/panel/tabPersistence.d.ts +3 -0
  74. package/lib/typescript/src/ui/panel/tabPersistence.d.ts.map +1 -0
  75. package/lib/typescript/src/utils/createDebugTab.d.ts +18 -0
  76. package/lib/typescript/src/utils/createDebugTab.d.ts.map +1 -0
  77. package/lib/typescript/src/utils/debugPreferences.d.ts +0 -1
  78. package/lib/typescript/src/utils/debugPreferences.d.ts.map +1 -1
  79. package/package.json +2 -4
  80. package/src/core/initialize.ts +17 -1
  81. package/src/features/devConnect/DevConnectTab.tsx +17 -381
  82. package/src/features/devConnect/devConnectPreferences.ts +0 -15
  83. package/src/features/devConnect/devConnectUtils.ts +1 -81
  84. package/src/features/devConnect/index.ts +2 -9
  85. package/src/features/devConnect/nativeDevConnect.ts +1 -136
  86. package/src/features/devConnect/types.ts +1 -3
  87. package/src/index.ts +2 -0
  88. package/src/ui/DebugView.tsx +5 -1
  89. package/src/ui/panel/FloatPanelView.tsx +22 -10
  90. package/src/ui/panel/tabPersistence.ts +22 -0
  91. package/src/utils/createDebugTab.ts +32 -0
  92. package/src/utils/debugPreferences.ts +0 -1
  93. package/scripts/android-debug-bundle.gradle +0 -23
  94. package/scripts/eas-postinstall.sh +0 -6
  95. package/scripts/embed-android.js +0 -116
  96. package/scripts/embed-expo.js +0 -109
  97. package/scripts/embed-ios.js +0 -119
  98. package/scripts/embed.js +0 -224
@@ -1,222 +1,11 @@
1
1
  #import "DebugToolkitDevConnect.h"
2
2
 
3
3
  #import <Foundation/Foundation.h>
4
- #import <UIKit/UIKit.h>
5
- #import <React/RCTBridge.h>
6
- #import <React/RCTBundleManager.h>
7
4
  #import <React/RCTBridgeModule.h>
8
- #import <React/RCTBundleURLProvider.h>
9
- #import <React/RCTReloadCommand.h>
10
- #import <objc/runtime.h>
11
5
  #include <ifaddrs.h>
12
6
  #include <arpa/inet.h>
13
7
  #include <net/if.h>
14
8
 
15
- // Debug-only Metro host switching — zero host-app native changes required.
16
- //
17
- // RN/Expo Debug templates call jsBundleURLForBundleRoot:fallbackURLProvider:, which consults
18
- // -packagerServerHostPort (guessPackagerHost on simulator when Metro is running). We hook:
19
- // 1. jsBundleURLForBundleRoot:fallbackURLProvider: — no DevConnect host → main.jsbundle first.
20
- // 2. packagerServerHostPort — no DevConnect host → nil (block auto-discovered localhost:8081).
21
- //
22
- // Optional: host apps may call DebugToolkitMetroBundleURL() from bundleURL() for explicit control.
23
-
24
- static NSString *const kBundleRoot = @"index";
25
- // Expo prebuild templates pass this to jsBundleURLForBundleRoot: in Debug (see expo/expo#21643).
26
- static NSString *const kExpoVirtualMetroEntry = @".expo/.virtual-metro-entry";
27
- static NSString *const kMetroHostKey = @"_devconnect_metro_host";
28
-
29
- static BOOL gPackagerHookInstalled = NO;
30
- static BOOL gBundleRootHookInstalled = NO;
31
-
32
- static NSURL *(*gOrigJsBundleURLForBundleRootWithFallback)(id, SEL, NSString *, NSURL * _Nonnull (^)(void));
33
-
34
- static BOOL DevConnectEmbeddedFirstHooksActive(void)
35
- {
36
- return gBundleRootHookInstalled;
37
- }
38
-
39
- static NSURL *DebugToolkitEmbeddedBundleURL(void)
40
- {
41
- return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
42
- }
43
-
44
- static NSString *DevConnectPersistedMetroHost(void)
45
- {
46
- return [[NSUserDefaults standardUserDefaults] stringForKey:kMetroHostKey];
47
- }
48
-
49
- static void DevConnectSetPersistedMetroHost(NSString *_Nullable hostPort)
50
- {
51
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
52
- if (hostPort.length > 0) {
53
- [defaults setObject:hostPort forKey:kMetroHostKey];
54
- } else {
55
- [defaults removeObjectForKey:kMetroHostKey];
56
- }
57
- [defaults synchronize];
58
- }
59
-
60
- static void DebugToolkitPrepareBundleSourceIfNeeded(void)
61
- {
62
- // Touch sharedSettings so RCTBundleURLProvider is linked before hook install retries.
63
- RCTBundleURLProvider *settings = [RCTBundleURLProvider sharedSettings];
64
- if (DevConnectPersistedMetroHost().length > 0) {
65
- return;
66
- }
67
- [settings resetToDefaults];
68
- }
69
-
70
- static BOOL DevConnectIsExpoProject(void)
71
- {
72
- static dispatch_once_t onceToken;
73
- static BOOL isExpo = NO;
74
- dispatch_once(&onceToken, ^{
75
- // Heuristic: matches common Expo prebuild / dev-client binaries.
76
- isExpo = NSClassFromString(@"EXAppDelegateWrapper") != nil
77
- || [[NSBundle mainBundle] objectForInfoDictionaryKey:@"EXUpdatesURL"] != nil
78
- || [[NSBundle mainBundle] objectForInfoDictionaryKey:@"EXPO_RUNTIME_VERSION"] != nil;
79
- });
80
- return isExpo;
81
- }
82
-
83
- /// Bundle root Metro expects when DevConnect steers the packager (index for plain RN, virtual entry for Expo).
84
- static NSString *DevConnectMetroBundleRoot(void)
85
- {
86
- return DevConnectIsExpoProject() ? kExpoVirtualMetroEntry : kBundleRoot;
87
- }
88
-
89
- static NSURL *DevConnectMetroURLForPersistedHost(void)
90
- {
91
- NSString *host = DevConnectPersistedMetroHost();
92
- if (host.length == 0) {
93
- return nil;
94
- }
95
- RCTBundleURLProvider *settings = [RCTBundleURLProvider sharedSettings];
96
- settings.jsLocation = host;
97
- return [settings jsBundleURLForBundleRoot:DevConnectMetroBundleRoot()];
98
- }
99
-
100
- /// When no DevConnect host: block guessPackagerHost (simulator often has Metro on :8081).
101
- static NSString *replacement_packagerServerHostPort(id self, SEL _cmd)
102
- {
103
- NSString *host = DevConnectPersistedMetroHost();
104
- if (host.length == 0) {
105
- return nil;
106
- }
107
- [(RCTBundleURLProvider *)self setJsLocation:host];
108
- return host;
109
- }
110
-
111
- /// Primary hook: return embedded main.jsbundle before RN/Expo tries Metro / virtual-metro-entry.
112
- static NSURL *replacement_jsBundleURLForBundleRoot_fallback(
113
- id self, SEL _cmd, NSString *bundleRoot, NSURL * _Nonnull (^fallbackURLProvider)(void))
114
- {
115
- if (DevConnectPersistedMetroHost().length == 0) {
116
- NSURL *embedded = DebugToolkitEmbeddedBundleURL();
117
- if (embedded) {
118
- NSLog(@"[DevConnect] cold start → embedded bundle (root=%@)", bundleRoot);
119
- return embedded;
120
- }
121
- NSLog(@"[DevConnect] no embedded main.jsbundle — falling back to Metro (root=%@)", bundleRoot);
122
- }
123
-
124
- if (gOrigJsBundleURLForBundleRootWithFallback) {
125
- return gOrigJsBundleURLForBundleRootWithFallback(self, _cmd, bundleRoot, fallbackURLProvider);
126
- }
127
- return fallbackURLProvider ? fallbackURLProvider() : nil;
128
- }
129
-
130
- static void DebugToolkitInstallPackagerHook(Class cls)
131
- {
132
- if (gPackagerHookInstalled) {
133
- return;
134
- }
135
- Method method = class_getInstanceMethod(cls, @selector(packagerServerHostPort));
136
- if (!method) {
137
- NSLog(@"[DevConnect] packagerServerHostPort not found");
138
- return;
139
- }
140
- IMP replacement = (IMP)replacement_packagerServerHostPort;
141
- if (method_getImplementation(method) == replacement) {
142
- gPackagerHookInstalled = YES;
143
- return;
144
- }
145
- method_setImplementation(method, replacement);
146
- gPackagerHookInstalled = YES;
147
- }
148
-
149
- static void DebugToolkitInstallBundleRootHook(Class cls)
150
- {
151
- if (gBundleRootHookInstalled) {
152
- return;
153
- }
154
- SEL selector = @selector(jsBundleURLForBundleRoot:fallbackURLProvider:);
155
- Method method = class_getInstanceMethod(cls, selector);
156
- if (!method) {
157
- NSLog(@"[DevConnect] jsBundleURLForBundleRoot:fallbackURLProvider: not found");
158
- return;
159
- }
160
- IMP replacement = (IMP)replacement_jsBundleURLForBundleRoot_fallback;
161
- gOrigJsBundleURLForBundleRootWithFallback =
162
- (NSURL * (*)(id, SEL, NSString *, NSURL * _Nonnull (^)(void)))method_getImplementation(method);
163
- if ((IMP)gOrigJsBundleURLForBundleRootWithFallback == replacement) {
164
- gBundleRootHookInstalled = YES;
165
- return;
166
- }
167
- method_setImplementation(method, replacement);
168
- gBundleRootHookInstalled = YES;
169
- }
170
-
171
- static void DebugToolkitInstallAllHooks(void)
172
- {
173
- if (gBundleRootHookInstalled && gPackagerHookInstalled) {
174
- return;
175
- }
176
-
177
- Class cls = NSClassFromString(@"RCTBundleURLProvider");
178
- if (!cls) {
179
- NSLog(@"[DevConnect] RCTBundleURLProvider not loaded — hooks will retry");
180
- return;
181
- }
182
-
183
- DebugToolkitInstallBundleRootHook(cls);
184
- DebugToolkitInstallPackagerHook(cls);
185
-
186
- static BOOL didLogOutcome = NO;
187
- if (!didLogOutcome && (gBundleRootHookInstalled || gPackagerHookInstalled)) {
188
- didLogOutcome = YES;
189
- if (DevConnectEmbeddedFirstHooksActive()) {
190
- NSLog(@"[DevConnect] embedded-first hooks active (bundleRoot=%@ packager=%@)",
191
- gBundleRootHookInstalled ? @"Y" : @"N",
192
- gPackagerHookInstalled ? @"Y" : @"N");
193
- } else {
194
- NSLog(@"[DevConnect] embedded-first hooks FAILED — rebuild / check React linkage");
195
- }
196
- }
197
- }
198
-
199
- NSURL *DebugToolkitMetroBundleURL(void)
200
- {
201
- return DevConnectMetroURLForPersistedHost();
202
- }
203
-
204
- // RCT_EXPORT_MODULE defines +load for module registration — use a separate class for hooks.
205
- @interface DebugToolkitDevConnectBootstrap : NSObject
206
- @end
207
-
208
- @implementation DebugToolkitDevConnectBootstrap
209
-
210
- + (void)load
211
- {
212
- DebugToolkitPrepareBundleSourceIfNeeded();
213
- DebugToolkitInstallAllHooks();
214
- }
215
-
216
- @end
217
-
218
- #pragma mark - Module
219
-
220
9
  @interface DebugToolkitDevConnect : NSObject <RCTBridgeModule>
221
10
  @end
222
11
 
@@ -224,152 +13,9 @@ NSURL *DebugToolkitMetroBundleURL(void)
224
13
 
225
14
  RCT_EXPORT_MODULE(DebugToolkitDevConnect)
226
15
 
227
- @synthesize bridge = _bridge;
228
- @synthesize bundleManager = _bundleManager;
229
-
230
- - (instancetype)init
231
- {
232
- if ((self = [super init])) {
233
- DebugToolkitInstallAllHooks();
234
- }
235
- return self;
236
- }
237
-
238
16
  + (BOOL)requiresMainQueueSetup { return NO; }
239
17
  - (dispatch_queue_t)methodQueue { return dispatch_get_main_queue(); }
240
18
 
241
- #pragma mark - Bundle Manager Resolution
242
-
243
- - (RCTBundleManager *)resolveBundleManager
244
- {
245
- if (_bundleManager) return _bundleManager;
246
- if (_bridge) return [_bridge moduleForClass:[RCTBundleManager class]];
247
- return nil;
248
- }
249
-
250
- #pragma mark - Host Parsing
251
-
252
- - (NSString *)normalizeHostPort:(NSString *)hostPort
253
- {
254
- NSRange sep = [hostPort rangeOfString:@":" options:NSBackwardsSearch];
255
- NSString *host = sep.location == NSNotFound ? hostPort : [hostPort substringToIndex:sep.location];
256
- NSString *portStr = sep.location == NSNotFound ? @"" : [hostPort substringFromIndex:sep.location + 1];
257
-
258
- NSNumberFormatter *formatter = [NSNumberFormatter new];
259
- formatter.numberStyle = NSNumberFormatterDecimalStyle;
260
- NSNumber *parsed = [formatter numberFromString:portStr];
261
- int port;
262
- if (parsed && parsed.intValue > 0 && parsed.intValue <= 65535) {
263
- port = parsed.intValue;
264
- } else {
265
- #ifdef RCT_METRO_PORT
266
- port = RCT_METRO_PORT;
267
- #else
268
- port = 8081;
269
- #endif
270
- }
271
- return [NSString stringWithFormat:@"%@:%d", host, port];
272
- }
273
-
274
- #pragma mark - Reload helper
275
-
276
- - (void)reloadWithBundleURL:(NSURL *)bundleURL reason:(NSString *)reason
277
- {
278
- if (bundleURL) {
279
- RCTBundleManager *bm = [self resolveBundleManager];
280
- if (bm) bm.bundleURL = bundleURL;
281
- RCTReloadCommandSetBundleURL(bundleURL);
282
- }
283
- RCTTriggerReloadCommandListeners(reason);
284
- }
285
-
286
- #pragma mark - Exported Methods
287
-
288
- RCT_EXPORT_METHOD(applyMetroHost:(NSString *)hostPort
289
- resolver:(RCTPromiseResolveBlock)resolve
290
- rejecter:(RCTPromiseRejectBlock)reject)
291
- {
292
- @try {
293
- if (hostPort.length == 0) {
294
- reject(@"invalid_host", @"Metro host cannot be empty.", nil);
295
- return;
296
- }
297
- NSString *normalized = [self normalizeHostPort:hostPort];
298
-
299
- DevConnectSetPersistedMetroHost(normalized);
300
-
301
- RCTBundleURLProvider *settings = [RCTBundleURLProvider sharedSettings];
302
- settings.jsLocation = normalized;
303
- NSURL *bundleURL = [settings jsBundleURLForBundleRoot:DevConnectMetroBundleRoot()];
304
-
305
- [self reloadWithBundleURL:bundleURL reason:@"Dev menu - apply changes"];
306
-
307
- NSLog(@"[DevConnect] applyMetroHost host=%@ url=%@", normalized, bundleURL);
308
- resolve(@{
309
- @"hostPort": normalized,
310
- @"bundleURL": bundleURL.absoluteString ?: [NSNull null],
311
- });
312
- } @catch (NSException *e) {
313
- NSLog(@"[DevConnect] applyMetroHost EXCEPTION: %@", e.reason);
314
- reject(@"native_error", e.reason ?: @"unknown", nil);
315
- }
316
- }
317
-
318
- RCT_EXPORT_METHOD(resetMetroHost:(RCTPromiseResolveBlock)resolve
319
- rejecter:(__unused RCTPromiseRejectBlock)reject)
320
- {
321
- @try {
322
- DevConnectSetPersistedMetroHost(nil);
323
-
324
- RCTBundleURLProvider *settings = [RCTBundleURLProvider sharedSettings];
325
- [settings resetToDefaults];
326
-
327
- NSURL *embedded = DebugToolkitEmbeddedBundleURL();
328
- if (!embedded) {
329
- embedded = [settings jsBundleURLForFallbackExtension:nil];
330
- }
331
-
332
- [self reloadWithBundleURL:embedded reason:@"Dev menu - reset to default"];
333
-
334
- NSLog(@"[DevConnect] resetMetroHost url=%@", embedded);
335
- resolve([NSNull null]);
336
- } @catch (NSException *e) {
337
- NSLog(@"[DevConnect] resetMetroHost EXCEPTION: %@", e.reason);
338
- reject(@"native_error", e.reason ?: @"unknown", nil);
339
- }
340
- }
341
-
342
- RCT_EXPORT_METHOD(getMetroHost:(RCTPromiseResolveBlock)resolve
343
- rejecter:(__unused RCTPromiseRejectBlock)reject)
344
- {
345
- NSString *host = DevConnectPersistedMetroHost();
346
- resolve(host.length > 0 ? host : [NSNull null]);
347
- }
348
-
349
- RCT_EXPORT_METHOD(getDiagnostics:(RCTPromiseResolveBlock)resolve
350
- rejecter:(__unused RCTPromiseRejectBlock)reject)
351
- {
352
- Class realDelegate = object_getClass([UIApplication sharedApplication].delegate);
353
- NSString *delegateName = realDelegate ? NSStringFromClass(realDelegate) : @"unknown";
354
- NSString *persisted = DevConnectPersistedMetroHost();
355
-
356
- #if DEBUG
357
- BOOL isDebug = YES;
358
- #else
359
- BOOL isDebug = NO;
360
- #endif
361
-
362
- resolve(@{
363
- @"persistedMetroHost": persisted.length > 0 ? persisted : [NSNull null],
364
- @"appDelegateClass": delegateName,
365
- @"isDebugBuild": @(isDebug),
366
- @"hasEmbeddedBundle": @(DebugToolkitEmbeddedBundleURL() != nil),
367
- @"embeddedFirstHookInstalled": @(DevConnectEmbeddedFirstHooksActive()),
368
- @"packagerHookInstalled": @(gPackagerHookInstalled),
369
- @"bundleRootHookInstalled": @(gBundleRootHookInstalled),
370
- });
371
- }
372
-
373
19
  RCT_EXPORT_METHOD(getPreference:(NSString *)key
374
20
  resolver:(RCTPromiseResolveBlock)resolve
375
21
  rejecter:(__unused RCTPromiseRejectBlock)reject)
@@ -53,6 +53,12 @@ function resolveFeatureConfigs(configs) {
53
53
  function resolveDefaultFeatures() {
54
54
  return DEFAULT_FEATURES.map(name => featureRegistry[name]());
55
55
  }
56
+ function appendCustomFeatures(builtInFeatures, customFeatures) {
57
+ if (!customFeatures || customFeatures.length === 0) {
58
+ return builtInFeatures;
59
+ }
60
+ return [...builtInFeatures, ...customFeatures];
61
+ }
56
62
 
57
63
  /**
58
64
  * Initialize the debug toolkit.
@@ -77,7 +83,8 @@ async function initializeDebugToolkit(options) {
77
83
  enabled = isDebugMode;
78
84
  }
79
85
  }
80
- const resolvedFeatures = options?.features ? resolveFeatureConfigs(options.features) : resolveDefaultFeatures();
86
+ const resolvedBuiltInFeatures = options?.features ? resolveFeatureConfigs(options.features) : resolveDefaultFeatures();
87
+ const resolvedFeatures = appendCustomFeatures(resolvedBuiltInFeatures, options?.customFeatures);
81
88
  try {
82
89
  _DebugToolkit.DebugToolkit.setEnabled(enabled);
83
90
  if (!enabled) {
@@ -1 +1 @@
1
- {"version":3,"names":["_DebugToolkit","require","_network","_console","_zustand","_navigation","_track","_environment","_clipboard","_devConnect","_DaemonClient","isDebugMode","__DEV__","featureRegistry","network","createNetworkFeature","console","createConsoleLogFeature","zustand","createZustandLogFeature","navigation","createNavigationLogFeature","track","createTrackFeature","environment","createEnvironmentFeature","clipboard","createClipboardFeature","devConnect","createDevConnectFeature","DEFAULT_FEATURES","resolveFeatureConfigs","configs","features","entries","Object","name","config","creator","warn","undefined","push","resolveDefaultFeatures","map","initializeDebugToolkit","options","enabled","nativeResult","nativeIsDebugBuild","resolvedFeatures","DebugToolkit","setEnabled","reset","replaceFeatures","daemonClient","setEndpointDetector","url","addToBlacklist","hasFeatures","showLauncher","hideLauncher","restoreDevConnectSettingsToDaemon","then","restore","catch","error"],"sourceRoot":"../../../src","sources":["core/initialize.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_DebugToolkit","require","_network","_console","_zustand","_navigation","_track","_environment","_clipboard","_devConnect","_DaemonClient","isDebugMode","__DEV__","featureRegistry","network","createNetworkFeature","console","createConsoleLogFeature","zustand","createZustandLogFeature","navigation","createNavigationLogFeature","track","createTrackFeature","environment","createEnvironmentFeature","clipboard","createClipboardFeature","devConnect","createDevConnectFeature","DEFAULT_FEATURES","resolveFeatureConfigs","configs","features","entries","Object","name","config","creator","warn","undefined","push","resolveDefaultFeatures","map","appendCustomFeatures","builtInFeatures","customFeatures","length","initializeDebugToolkit","options","enabled","nativeResult","nativeIsDebugBuild","resolvedBuiltInFeatures","resolvedFeatures","DebugToolkit","setEnabled","reset","replaceFeatures","daemonClient","setEndpointDetector","url","addToBlacklist","hasFeatures","showLauncher","hideLauncher","restoreDevConnectSettingsToDaemon","then","restore","catch","error"],"sourceRoot":"../../../src","sources":["core/initialize.ts"],"mappings":"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","ignoreList":[]}