Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.TurboReactPackage;
import com.facebook.react.module.model.ReactModuleInfo;
import com.facebook.react.module.model.ReactModuleInfoProvider;

import java.io.Serializable;
import java.util.HashMap;
Expand All @@ -20,6 +23,8 @@

public class LaunchArgumentsModule extends ReactContextBaseJavaModule {

public static final String NAME = "LaunchArguments";

private static final long ACTIVITY_WAIT_INTERVAL = 100L;
private static final int ACTIVITY_WAIT_TRIES = 200;

Expand All @@ -32,7 +37,7 @@ public class LaunchArgumentsModule extends ReactContextBaseJavaModule {
@NonNull
@Override
public String getName() {
return "LaunchArguments";
return NAME;
}

@Nullable
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,47 @@
package com.reactnativelauncharguments;

import com.facebook.react.ReactPackage;
import com.facebook.react.BaseReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import com.facebook.react.module.model.ReactModuleInfo;
import com.facebook.react.module.model.ReactModuleInfoProvider;
import com.facebook.react.TurboReactPackage;

import java.util.Collections;
import java.util.List;
import java.util.HashMap;
import java.util.Map;

public class LaunchArgumentsPackage implements ReactPackage {

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

public class LaunchArgumentsPackage extends TurboReactPackage {

@Nullable
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
public NativeModule getModule(String name, @Nonnull ReactApplicationContext reactContext) {
if (name.equals(LaunchArgumentsModule.NAME)) {
return new LaunchArgumentsModule(reactContext);
} else {
return null;
}
}

@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
final NativeModule nativeModule = new LaunchArgumentsModule(reactContext);
return Collections.singletonList(nativeModule);
public ReactModuleInfoProvider getReactModuleInfoProvider() {
return () -> {
final Map<String, ReactModuleInfo> moduleInfos = new HashMap<>();
boolean isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
moduleInfos.put(
LaunchArgumentsModule.NAME,
new ReactModuleInfo(
LaunchArgumentsModule.NAME,
LaunchArgumentsModule.NAME,
false, // canOverrideExistingModule
false, // needsEagerInit
true, // hasConstants
false, // isCxxModule
isTurboModule // isTurboModule
));
return moduleInfos;
};
}
}
}
8 changes: 8 additions & 0 deletions ios/LaunchArguments.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
#import <React/RCTBridgeModule.h>

#ifdef RCT_NEW_ARCH_ENABLED
#import <React/RCTTurboModule.h>
#import "RCTNativeLaunchArgumentsSpec.h"

@interface LaunchArguments : NSObject <NativeLaunchArgumentsSpec>
#else
@interface LaunchArguments : NSObject <RCTBridgeModule>
#endif

@end
8 changes: 8 additions & 0 deletions ios/LaunchArguments.m
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ @implementation LaunchArguments

RCT_EXPORT_MODULE()

#ifdef RCT_NEW_ARCH_ENABLED
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
(const facebook::react::ObjCTurboModule::InitParams &)params
{
return std::make_shared<facebook::react::NativeLaunchArgumentsSpecJSI>(params);
}
#endif

- (dispatch_queue_t)methodQueue
{
return dispatch_get_main_queue();
Expand Down
5 changes: 5 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,10 @@
"react": "^16.9.0",
"react-native": "^0.62.2",
"typescript": "^3.8.3"
},
"codegenConfig": {
"name": "RNLaunchArgumentsSpec",
"type": "modules",
"jsSrcsDir": "src"
}
}
18 changes: 18 additions & 0 deletions react-native.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module.exports = {
dependency: {
platforms: {
android: {
sourceDir: '../android/src/main/java/com/reactnativelauncharguments',
packageImportPath: 'import com.reactnativelauncharguments.LaunchArgumentsPackage;',
componentDescriptors: null,
cmakeListsPath: null,
},
ios: {
libraryFolder: '../ios',
sharedLibraries: [],
project: 'LaunchArguments.xcodeproj',
podspecPath: '../react-native-launch-arguments.podspec',
},
},
},
};
60 changes: 60 additions & 0 deletions src/NativeLaunchArguments.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import { NativeModules, Platform } from "react-native";

const LINKING_ERROR =
`The package 'react-native-launch-arguments' doesn't seem to be linked. Make sure: \n\n` +
Platform.select({ ios: "- You have run 'pod install'\n", default: "" }) +
"- You rebuilt the app after installing the package\n" +
"- You are not using Expo managed workflow\n";

// @ts-expect-error
const isTurboModuleEnabled = global.__turboModuleProxy != null;

const LaunchArgumentsModule = isTurboModuleEnabled
? require('./NativeLaunchArguments').default
: NativeModules.LaunchArguments
? NativeModules.LaunchArguments
: new Proxy(
{},
{
get() {
throw new Error(LINKING_ERROR);
},
}
);

type RawMap = Record<string, string>;

type ParsedMap = Record<string, string | boolean>;

type LaunchArgumentsType = {
value<T extends object = ParsedMap>(): T;
};

let parsed: ParsedMap | null = null;

export const LaunchArguments: LaunchArgumentsType = {
value<T>(): T {
if (parsed) {
return parsed as any as T;
}

parsed = {};

const constants = isTurboModuleEnabled
? LaunchArgumentsModule.getConstants()
: LaunchArgumentsModule;

const raw = constants.value as RawMap;

for (const k in raw) {
const rawValue = raw[k];
try {
parsed[k] = JSON.parse(rawValue);
} catch {
parsed[k] = rawValue;
}
}

return parsed as any as T;
},
};
Loading