react-native-config-ultimate 0.1.0 → 0.2.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.
- package/README.md +476 -121
- package/android/build.gradle +1 -1
- package/android/rncu.gradle +19 -15
- package/android/src/main/java/com/reactnativeultimateconfig/UltimateConfigHelper.java +87 -0
- package/android/src/main/java/com/reactnativeultimateconfig/UltimateConfigPackage.java +1 -1
- package/android/src/newarch/java/com/reactnativeultimateconfig/UltimateConfigModule.java +3 -50
- package/android/src/oldarch/java/com/reactnativeultimateconfig/UltimateConfigModule.java +3 -54
- package/ios/UltimateConfig.mm +2 -1
- package/lib/commonjs/cli.js +11 -2
- package/lib/commonjs/cli.js.map +1 -1
- package/lib/commonjs/flatten.js +6 -1
- package/lib/commonjs/flatten.js.map +1 -1
- package/lib/commonjs/load-env.js +14 -0
- package/lib/commonjs/load-env.js.map +1 -1
- package/lib/commonjs/main.js +5 -1
- package/lib/commonjs/main.js.map +1 -1
- package/lib/commonjs/render-env.js +1 -1
- package/lib/commonjs/render-env.js.map +1 -1
- package/lib/commonjs/resolve-env.js +5 -1
- package/lib/commonjs/resolve-env.js.map +1 -1
- package/lib/commonjs/templates/override.js.handlebars +1 -10
- package/lib/commonjs/validate-env.js +20 -7
- package/lib/commonjs/validate-env.js.map +1 -1
- package/lib/module/cli.js +11 -2
- package/lib/module/cli.js.map +1 -1
- package/lib/module/flatten.js +6 -1
- package/lib/module/flatten.js.map +1 -1
- package/lib/module/load-env.js +14 -0
- package/lib/module/load-env.js.map +1 -1
- package/lib/module/main.js +6 -2
- package/lib/module/main.js.map +1 -1
- package/lib/module/render-env.js +1 -1
- package/lib/module/render-env.js.map +1 -1
- package/lib/module/resolve-env.js +5 -1
- package/lib/module/resolve-env.js.map +1 -1
- package/lib/module/templates/override.js.handlebars +1 -10
- package/lib/module/validate-env.js +19 -7
- package/lib/module/validate-env.js.map +1 -1
- package/lib/typescript/src/cli.d.ts.map +1 -1
- package/lib/typescript/src/flatten.d.ts.map +1 -1
- package/lib/typescript/src/load-env.d.ts.map +1 -1
- package/lib/typescript/src/main.d.ts +1 -1
- package/lib/typescript/src/main.d.ts.map +1 -1
- package/lib/typescript/src/render-env.d.ts.map +1 -1
- package/lib/typescript/src/resolve-env.d.ts +8 -1
- package/lib/typescript/src/resolve-env.d.ts.map +1 -1
- package/lib/typescript/src/validate-env.d.ts +8 -0
- package/lib/typescript/src/validate-env.d.ts.map +1 -1
- package/package.json +4 -2
- package/src/cli.ts +12 -2
- package/src/flatten.ts +6 -1
- package/src/load-env.ts +18 -0
- package/src/main.ts +6 -2
- package/src/render-env.ts +4 -1
- package/src/resolve-env.ts +16 -2
- package/src/templates/override.js.handlebars +1 -10
- package/src/validate-env.ts +23 -7
- package/android/rnuc.yaml +0 -1
- package/lib/commonjs/bin.spec.js +0 -50
- package/lib/commonjs/bin.spec.js.map +0 -1
- package/lib/commonjs/cli.spec.js +0 -190
- package/lib/commonjs/cli.spec.js.map +0 -1
- package/lib/commonjs/flatten.spec.js +0 -32
- package/lib/commonjs/flatten.spec.js.map +0 -1
- package/lib/commonjs/load-env.spec.js +0 -257
- package/lib/commonjs/load-env.spec.js.map +0 -1
- package/lib/commonjs/main.spec.js +0 -228
- package/lib/commonjs/main.spec.js.map +0 -1
- package/lib/commonjs/render-env.spec.js +0 -397
- package/lib/commonjs/render-env.spec.js.map +0 -1
- package/lib/commonjs/resolve-env.spec.js +0 -31
- package/lib/commonjs/resolve-env.spec.js.map +0 -1
- package/lib/commonjs/validate-env.spec.js +0 -325
- package/lib/commonjs/validate-env.spec.js.map +0 -1
- package/lib/commonjs/write-env.spec.js +0 -115
- package/lib/commonjs/write-env.spec.js.map +0 -1
- package/lib/module/bin.spec.js +0 -49
- package/lib/module/bin.spec.js.map +0 -1
- package/lib/module/cli.spec.js +0 -190
- package/lib/module/cli.spec.js.map +0 -1
- package/lib/module/flatten.spec.js +0 -31
- package/lib/module/flatten.spec.js.map +0 -1
- package/lib/module/load-env.spec.js +0 -257
- package/lib/module/load-env.spec.js.map +0 -1
- package/lib/module/main.spec.js +0 -224
- package/lib/module/main.spec.js.map +0 -1
- package/lib/module/render-env.spec.js +0 -396
- package/lib/module/render-env.spec.js.map +0 -1
- package/lib/module/resolve-env.spec.js +0 -30
- package/lib/module/resolve-env.spec.js.map +0 -1
- package/lib/module/validate-env.spec.js +0 -325
- package/lib/module/validate-env.spec.js.map +0 -1
- package/lib/module/write-env.spec.js +0 -115
- package/lib/module/write-env.spec.js.map +0 -1
- package/lib/typescript/src/bin.spec.d.ts +0 -2
- package/lib/typescript/src/bin.spec.d.ts.map +0 -1
- package/lib/typescript/src/cli.spec.d.ts +0 -14
- package/lib/typescript/src/cli.spec.d.ts.map +0 -1
- package/lib/typescript/src/flatten.spec.d.ts +0 -2
- package/lib/typescript/src/flatten.spec.d.ts.map +0 -1
- package/lib/typescript/src/load-env.spec.d.ts +0 -6
- package/lib/typescript/src/load-env.spec.d.ts.map +0 -1
- package/lib/typescript/src/main.spec.d.ts +0 -2
- package/lib/typescript/src/main.spec.d.ts.map +0 -1
- package/lib/typescript/src/render-env.spec.d.ts +0 -2
- package/lib/typescript/src/render-env.spec.d.ts.map +0 -1
- package/lib/typescript/src/resolve-env.spec.d.ts +0 -2
- package/lib/typescript/src/resolve-env.spec.d.ts.map +0 -1
- package/lib/typescript/src/validate-env.spec.d.ts +0 -2
- package/lib/typescript/src/validate-env.spec.d.ts.map +0 -1
- package/lib/typescript/src/write-env.spec.d.ts +0 -9
- package/lib/typescript/src/write-env.spec.d.ts.map +0 -1
package/android/rncu.gradle
CHANGED
|
@@ -36,7 +36,9 @@ def readYaml(yamlPath) {
|
|
|
36
36
|
" after the last rncu run, which resets the file)."
|
|
37
37
|
)
|
|
38
38
|
}
|
|
39
|
-
def cfg = new org.yaml.snakeyaml.Yaml(
|
|
39
|
+
def cfg = new org.yaml.snakeyaml.Yaml(
|
|
40
|
+
new org.yaml.snakeyaml.constructor.SafeConstructor(new org.yaml.snakeyaml.LoaderOptions())
|
|
41
|
+
).load(yamlFile.newInputStream())
|
|
40
42
|
if (
|
|
41
43
|
cfg instanceof String
|
|
42
44
|
|| cfg instanceof Integer
|
|
@@ -55,14 +57,14 @@ def buildRootConfig() {
|
|
|
55
57
|
if (flavorMappingExists) {
|
|
56
58
|
def config = [:]
|
|
57
59
|
def flavorMapping = project.ext.get('flavorEnvMapping')
|
|
58
|
-
|
|
59
|
-
flavorMapping.each { flavor, yamlPath ->
|
|
60
|
+
logger.info "[rncu] Flavor mapping detected: ${flavorMapping.keySet()}"
|
|
61
|
+
flavorMapping.each { flavor, yamlPath ->
|
|
60
62
|
def absolutePath = Paths.get(project.rootDir.getAbsolutePath(), yamlPath)
|
|
61
63
|
config.put(flavor, readYaml(absolutePath))
|
|
62
64
|
}
|
|
63
65
|
return config
|
|
64
66
|
} else {
|
|
65
|
-
|
|
67
|
+
logger.info "[rncu] No flavor mapping detected. Reading injected file"
|
|
66
68
|
def cfg = readYaml(Paths.get(buildscript.sourceFile.getParent(), "rncu.yaml"))
|
|
67
69
|
return cfg
|
|
68
70
|
}
|
|
@@ -90,41 +92,43 @@ def flattenConfig(cfg) {
|
|
|
90
92
|
}
|
|
91
93
|
|
|
92
94
|
def rootConfig = buildRootConfig()
|
|
93
|
-
|
|
95
|
+
logger.info "[rncu] Config loaded with ${rootConfig instanceof Map ? rootConfig.size() : 'N/A'} keys"
|
|
94
96
|
|
|
95
97
|
def configPerFlavor(flavorName, rootConfig) {
|
|
96
98
|
def mapping = project.ext.has('flavorEnvMapping')
|
|
97
99
|
if (mapping && !flavorName.isEmpty()) {
|
|
98
|
-
|
|
100
|
+
logger.info "[rncu] Using flavor mapping for '${flavorName}'"
|
|
99
101
|
def f = rootConfig.get(flavorName)
|
|
100
102
|
return f
|
|
101
103
|
} else {
|
|
102
|
-
|
|
104
|
+
logger.info "[rncu] No flavor mapping — using root config"
|
|
103
105
|
return rootConfig
|
|
104
106
|
}
|
|
105
107
|
}
|
|
106
108
|
|
|
107
109
|
def escape_double(str) {
|
|
108
|
-
return str.replace('"', '\\"')
|
|
110
|
+
return str.replace('\\', '\\\\').replace('"', '\\"')
|
|
109
111
|
}
|
|
110
112
|
def escape_single(str) {
|
|
111
|
-
return str.replace("'", "\\'")
|
|
113
|
+
return str.replace('\\', '\\\\').replace("'", "\\'")
|
|
112
114
|
}
|
|
113
115
|
|
|
114
116
|
android {
|
|
115
117
|
// patch all variants with config values
|
|
116
118
|
applicationVariants.all { variant ->
|
|
117
|
-
|
|
118
|
-
def flavorName = variant.flavorName
|
|
119
|
+
logger.info "[rncu] processing variant ${variant.name}"
|
|
120
|
+
def flavorName = variant.flavorName
|
|
119
121
|
|
|
120
122
|
def cfg = flattenConfig(configPerFlavor(flavorName, rootConfig))
|
|
121
|
-
println "config per flavor ${flavorName} ${cfg}"
|
|
122
123
|
def keySet = cfg.keySet().collect()
|
|
123
|
-
|
|
124
|
+
logger.info "[rncu] variant '${variant.name}': ${keySet.size()} keys [${keySet.join(', ')}]"
|
|
124
125
|
def rncuKeys = java.lang.String.join(",", keySet)
|
|
125
|
-
println "all keys as string ${rncuKeys}"
|
|
126
126
|
variant.buildConfigField "String", "__RNCU_KEYS", "\"${rncuKeys}\""
|
|
127
|
-
|
|
127
|
+
// Only inject manifest placeholders if explicitly opted in via project.ext.rncuManifestPlaceholders = true
|
|
128
|
+
// This prevents accidental secret leakage into AndroidManifest.xml (readable in APK/AAB).
|
|
129
|
+
if (project.ext.has('rncuManifestPlaceholders') && project.ext.get('rncuManifestPlaceholders') == true) {
|
|
130
|
+
variant.mergedFlavor.manifestPlaceholders.putAll(cfg)
|
|
131
|
+
}
|
|
128
132
|
|
|
129
133
|
cfg.each { k,v ->
|
|
130
134
|
if (v instanceof java.lang.String) {
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
package com.reactnativeultimateconfig;
|
|
2
|
+
|
|
3
|
+
import android.util.Log;
|
|
4
|
+
|
|
5
|
+
import androidx.annotation.NonNull;
|
|
6
|
+
import androidx.annotation.Nullable;
|
|
7
|
+
|
|
8
|
+
import java.util.HashMap;
|
|
9
|
+
import java.util.Map;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Shared helper for reading config values from the app's BuildConfig class.
|
|
13
|
+
* Used by both Old Architecture (Bridge) and New Architecture (TurboModules)
|
|
14
|
+
* implementations to avoid code duplication.
|
|
15
|
+
*/
|
|
16
|
+
final class UltimateConfigHelper {
|
|
17
|
+
private static final String TAG = "UltimateConfig";
|
|
18
|
+
|
|
19
|
+
@Nullable
|
|
20
|
+
private static Class<?> _buildConfig;
|
|
21
|
+
|
|
22
|
+
static void setBuildConfig(Class<?> buildConfig) {
|
|
23
|
+
_buildConfig = buildConfig;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@Nullable
|
|
27
|
+
static Class<?> getBuildConfig() {
|
|
28
|
+
return _buildConfig;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Read config values from the app's BuildConfig class.
|
|
33
|
+
* The rncu CLI generates fields in BuildConfig via rncu.yaml → build.gradle.
|
|
34
|
+
*/
|
|
35
|
+
@NonNull
|
|
36
|
+
static Map<String, Object> readConfigValues() {
|
|
37
|
+
final Map<String, Object> constants = new HashMap<>();
|
|
38
|
+
try {
|
|
39
|
+
Class<?> act = _buildConfig;
|
|
40
|
+
if (act == null) {
|
|
41
|
+
// The user forgot to wire MainApplication. Without this call we have
|
|
42
|
+
// no way to find the app's generated BuildConfig fields, so the JS
|
|
43
|
+
// side will see an empty Config object. Surface the cause loudly
|
|
44
|
+
// instead of silently returning {} — the symptom is otherwise hard
|
|
45
|
+
// to diagnose (Config.MY_VAR === undefined with no error).
|
|
46
|
+
Log.w(
|
|
47
|
+
TAG,
|
|
48
|
+
"setBuildConfig was never called. Add " +
|
|
49
|
+
"UltimateConfigModule.setBuildConfig(BuildConfig.class) " +
|
|
50
|
+
"to MainApplication.onCreate() — required on both Old and New Architecture."
|
|
51
|
+
);
|
|
52
|
+
return constants;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Try both key names for backwards compatibility
|
|
56
|
+
String keys = null;
|
|
57
|
+
try {
|
|
58
|
+
keys = (String) act.getField("__RNCU_KEYS").get(act);
|
|
59
|
+
} catch (NoSuchFieldException e1) {
|
|
60
|
+
try {
|
|
61
|
+
keys = (String) act.getField("__RNUC_KEYS").get(act);
|
|
62
|
+
} catch (NoSuchFieldException e2) {
|
|
63
|
+
String msg = "react-native-config-ultimate: Neither __RNCU_KEYS nor __RNUC_KEYS found in BuildConfig. " +
|
|
64
|
+
"Did you run 'npx rncu <env-file>' and rebuild?";
|
|
65
|
+
if (BuildConfig.DEBUG) {
|
|
66
|
+
throw new RuntimeException(msg);
|
|
67
|
+
} else {
|
|
68
|
+
Log.e(TAG, msg);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (keys == null || keys.isEmpty()) return constants;
|
|
74
|
+
for (String k : keys.split(",")) {
|
|
75
|
+
Object value = act.getField(k).get(act);
|
|
76
|
+
if (value != null) {
|
|
77
|
+
constants.put(k, value);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
} catch (Exception e) {
|
|
81
|
+
Log.w(TAG, "Failed to read config constants from BuildConfig: " + e.getMessage());
|
|
82
|
+
}
|
|
83
|
+
return constants;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
private UltimateConfigHelper() {} // prevent instantiation
|
|
87
|
+
}
|
|
@@ -43,7 +43,7 @@ public class UltimateConfigPackage extends TurboReactPackage {
|
|
|
43
43
|
UltimateConfigModule.NAME,
|
|
44
44
|
false, // canOverrideExistingModule
|
|
45
45
|
false, // needsEagerInit
|
|
46
|
-
|
|
46
|
+
false, // isCxxModule — false: this is a Java TurboModule, not C++ JSI
|
|
47
47
|
isTurboModule // isTurboModule
|
|
48
48
|
)
|
|
49
49
|
);
|
|
@@ -3,19 +3,17 @@ package com.reactnativeultimateconfig;
|
|
|
3
3
|
import android.util.Log;
|
|
4
4
|
|
|
5
5
|
import androidx.annotation.NonNull;
|
|
6
|
-
import androidx.annotation.Nullable;
|
|
7
6
|
|
|
8
7
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
9
8
|
import com.facebook.react.module.annotations.ReactModule;
|
|
10
9
|
|
|
11
10
|
import org.json.JSONObject;
|
|
12
11
|
|
|
13
|
-
import java.util.HashMap;
|
|
14
12
|
import java.util.Map;
|
|
15
13
|
|
|
16
14
|
/**
|
|
17
15
|
* New Architecture (TurboModules) implementation of UltimateConfig.
|
|
18
|
-
*
|
|
16
|
+
*
|
|
19
17
|
* Extends the Codegen-generated NativeUltimateConfigSpec which provides
|
|
20
18
|
* the TurboModule binding. Implements getAll() which returns config
|
|
21
19
|
* values as a JSON string (matching the TypeScript spec).
|
|
@@ -24,11 +22,8 @@ import java.util.Map;
|
|
|
24
22
|
public class UltimateConfigModule extends NativeUltimateConfigSpec {
|
|
25
23
|
public static final String NAME = "UltimateConfig";
|
|
26
24
|
|
|
27
|
-
@Nullable
|
|
28
|
-
private static Class<?> _buildConfig;
|
|
29
|
-
|
|
30
25
|
public static void setBuildConfig(Class<?> buildConfig) {
|
|
31
|
-
|
|
26
|
+
UltimateConfigHelper.setBuildConfig(buildConfig);
|
|
32
27
|
}
|
|
33
28
|
|
|
34
29
|
public UltimateConfigModule(ReactApplicationContext reactContext) {
|
|
@@ -41,48 +36,6 @@ public class UltimateConfigModule extends NativeUltimateConfigSpec {
|
|
|
41
36
|
return NAME;
|
|
42
37
|
}
|
|
43
38
|
|
|
44
|
-
/**
|
|
45
|
-
* Read config values from the app's BuildConfig class.
|
|
46
|
-
* The rncu CLI generates fields in BuildConfig via rncu.yaml → build.gradle.
|
|
47
|
-
*/
|
|
48
|
-
@NonNull
|
|
49
|
-
private Map<String, Object> readConfigValues() {
|
|
50
|
-
final Map<String, Object> constants = new HashMap<>();
|
|
51
|
-
try {
|
|
52
|
-
Class<?> act = _buildConfig;
|
|
53
|
-
if (act == null) return constants;
|
|
54
|
-
|
|
55
|
-
// Try both key names for backwards compatibility
|
|
56
|
-
String keys = null;
|
|
57
|
-
try {
|
|
58
|
-
keys = (String) act.getField("__RNCU_KEYS").get(act);
|
|
59
|
-
} catch (NoSuchFieldException e1) {
|
|
60
|
-
try {
|
|
61
|
-
keys = (String) act.getField("__RNUC_KEYS").get(act);
|
|
62
|
-
} catch (NoSuchFieldException e2) {
|
|
63
|
-
String msg = "react-native-config-ultimate: Neither __RNCU_KEYS nor __RNUC_KEYS found in BuildConfig. " +
|
|
64
|
-
"Did you run 'npx rncu <env-file>' and rebuild?";
|
|
65
|
-
if (BuildConfig.DEBUG) {
|
|
66
|
-
throw new RuntimeException(msg);
|
|
67
|
-
} else {
|
|
68
|
-
Log.e(NAME, msg);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (keys == null || keys.isEmpty()) return constants;
|
|
74
|
-
for (String k : keys.split(",")) {
|
|
75
|
-
Object value = act.getField(k).get(act);
|
|
76
|
-
if (value != null) {
|
|
77
|
-
constants.put(k, value);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
} catch (Exception e) {
|
|
81
|
-
Log.w(NAME, "Failed to read config constants from BuildConfig: " + e.getMessage());
|
|
82
|
-
}
|
|
83
|
-
return constants;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
39
|
/**
|
|
87
40
|
* TurboModule method: returns all config values as a JSON string.
|
|
88
41
|
* This matches the TypeScript spec: getAll(): string
|
|
@@ -90,7 +43,7 @@ public class UltimateConfigModule extends NativeUltimateConfigSpec {
|
|
|
90
43
|
@Override
|
|
91
44
|
@NonNull
|
|
92
45
|
public String getAll() {
|
|
93
|
-
Map<String, Object> values = readConfigValues();
|
|
46
|
+
Map<String, Object> values = UltimateConfigHelper.readConfigValues();
|
|
94
47
|
try {
|
|
95
48
|
JSONObject json = new JSONObject(values);
|
|
96
49
|
return json.toString();
|
|
@@ -1,22 +1,16 @@
|
|
|
1
1
|
package com.reactnativeultimateconfig;
|
|
2
2
|
|
|
3
|
-
import android.util.Log;
|
|
4
|
-
|
|
5
3
|
import androidx.annotation.NonNull;
|
|
6
|
-
import androidx.annotation.Nullable;
|
|
7
4
|
|
|
8
5
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
9
6
|
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
10
7
|
import com.facebook.react.module.annotations.ReactModule;
|
|
11
8
|
|
|
12
|
-
import org.json.JSONObject;
|
|
13
|
-
|
|
14
|
-
import java.util.HashMap;
|
|
15
9
|
import java.util.Map;
|
|
16
10
|
|
|
17
11
|
/**
|
|
18
12
|
* Old Architecture (Bridge) implementation of UltimateConfig.
|
|
19
|
-
*
|
|
13
|
+
*
|
|
20
14
|
* This module exposes config values via getConstants() which React Native's
|
|
21
15
|
* bridge reads at module initialization time.
|
|
22
16
|
*/
|
|
@@ -24,11 +18,8 @@ import java.util.Map;
|
|
|
24
18
|
public class UltimateConfigModule extends ReactContextBaseJavaModule {
|
|
25
19
|
public static final String NAME = "UltimateConfig";
|
|
26
20
|
|
|
27
|
-
@Nullable
|
|
28
|
-
private static Class<?> _buildConfig;
|
|
29
|
-
|
|
30
21
|
public static void setBuildConfig(Class<?> buildConfig) {
|
|
31
|
-
|
|
22
|
+
UltimateConfigHelper.setBuildConfig(buildConfig);
|
|
32
23
|
}
|
|
33
24
|
|
|
34
25
|
public UltimateConfigModule(ReactApplicationContext reactContext) {
|
|
@@ -41,51 +32,9 @@ public class UltimateConfigModule extends ReactContextBaseJavaModule {
|
|
|
41
32
|
return NAME;
|
|
42
33
|
}
|
|
43
34
|
|
|
44
|
-
/**
|
|
45
|
-
* Read config values from the app's BuildConfig class.
|
|
46
|
-
* The rncu CLI generates fields in BuildConfig via rncu.yaml → build.gradle.
|
|
47
|
-
*/
|
|
48
|
-
@NonNull
|
|
49
|
-
private Map<String, Object> readConfigValues() {
|
|
50
|
-
final Map<String, Object> constants = new HashMap<>();
|
|
51
|
-
try {
|
|
52
|
-
Class<?> act = _buildConfig;
|
|
53
|
-
if (act == null) return constants;
|
|
54
|
-
|
|
55
|
-
// Try both key names for backwards compatibility
|
|
56
|
-
String keys = null;
|
|
57
|
-
try {
|
|
58
|
-
keys = (String) act.getField("__RNCU_KEYS").get(act);
|
|
59
|
-
} catch (NoSuchFieldException e1) {
|
|
60
|
-
try {
|
|
61
|
-
keys = (String) act.getField("__RNUC_KEYS").get(act);
|
|
62
|
-
} catch (NoSuchFieldException e2) {
|
|
63
|
-
String msg = "react-native-config-ultimate: Neither __RNCU_KEYS nor __RNUC_KEYS found in BuildConfig. " +
|
|
64
|
-
"Did you run 'npx rncu <env-file>' and rebuild?";
|
|
65
|
-
if (BuildConfig.DEBUG) {
|
|
66
|
-
throw new RuntimeException(msg);
|
|
67
|
-
} else {
|
|
68
|
-
Log.e(NAME, msg);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (keys == null || keys.isEmpty()) return constants;
|
|
74
|
-
for (String k : keys.split(",")) {
|
|
75
|
-
Object value = act.getField(k).get(act);
|
|
76
|
-
if (value != null) {
|
|
77
|
-
constants.put(k, value);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
} catch (Exception e) {
|
|
81
|
-
Log.w(NAME, "Failed to read config constants from BuildConfig: " + e.getMessage());
|
|
82
|
-
}
|
|
83
|
-
return constants;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
35
|
@Override
|
|
87
36
|
@NonNull
|
|
88
37
|
public Map<String, Object> getConstants() {
|
|
89
|
-
return readConfigValues();
|
|
38
|
+
return UltimateConfigHelper.readConfigValues();
|
|
90
39
|
}
|
|
91
40
|
}
|
package/ios/UltimateConfig.mm
CHANGED
|
@@ -28,7 +28,8 @@ RCT_EXPORT_MODULE()
|
|
|
28
28
|
if (error || !jsonData) {
|
|
29
29
|
return @"{}";
|
|
30
30
|
}
|
|
31
|
-
|
|
31
|
+
NSString *result = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
|
32
|
+
return result ?: @"{}";
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
package/lib/commonjs/cli.js
CHANGED
|
@@ -42,7 +42,7 @@ async function cli() {
|
|
|
42
42
|
default: false,
|
|
43
43
|
description: 'Watch env file(s) for changes and regenerate automatically. ' + 'Note: changes to native vars (iOS xcconfig, Android BuildConfig) ' + 'still require a full native rebuild.'
|
|
44
44
|
}).usage('Usage: $0 <env-file> [env-file2 ...] [options]').help().parseAsync();
|
|
45
|
-
const project_root = argv.projectRoot;
|
|
45
|
+
const project_root = path.resolve(argv.projectRoot);
|
|
46
46
|
|
|
47
47
|
/**
|
|
48
48
|
* Resolve the library root directory.
|
|
@@ -57,7 +57,7 @@ async function cli() {
|
|
|
57
57
|
* (write-env.ts will create the directories on first run).
|
|
58
58
|
*/
|
|
59
59
|
const lib_root = (() => {
|
|
60
|
-
if (argv.libRoot) return argv.libRoot;
|
|
60
|
+
if (argv.libRoot) return path.resolve(argv.libRoot);
|
|
61
61
|
const conventional = path.join(project_root, 'node_modules', 'react-native-config-ultimate');
|
|
62
62
|
|
|
63
63
|
// If the directory already exists at the conventional location, use it.
|
|
@@ -79,6 +79,10 @@ async function cli() {
|
|
|
79
79
|
// Accept one or more positional env file paths.
|
|
80
80
|
// Multiple files are merged left-to-right (last file wins for conflicting keys).
|
|
81
81
|
const env_files = argv._.map(String);
|
|
82
|
+
if (env_files.length === 0) {
|
|
83
|
+
log_err('No env file specified. Usage: rncu <env-file> [env-file2 ...]');
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
82
86
|
|
|
83
87
|
// Validate env files exist before running anything.
|
|
84
88
|
const missing_files = env_files.filter(f => !fs.existsSync(f));
|
|
@@ -140,4 +144,9 @@ async function cli() {
|
|
|
140
144
|
void watcher.close().then(() => process.exit(0));
|
|
141
145
|
});
|
|
142
146
|
}
|
|
147
|
+
|
|
148
|
+
// Auto-invoke when run as CLI script (not when required by tests)
|
|
149
|
+
if (require.main === module) {
|
|
150
|
+
cli();
|
|
151
|
+
}
|
|
143
152
|
//# sourceMappingURL=cli.js.map
|
package/lib/commonjs/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_yargs","_interopRequireDefault","require","path","_interopRequireWildcard","fs","_chokidar","_main","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","load_rc","rc_file","existsSync","undefined","cache","resolve","log","msg","process","stdout","write","log_err","stderr","cli","argv","yargs","slice","option","type","cwd","description","alias","usage","help","parseAsync","project_root","projectRoot","lib_root","libRoot","conventional","join","pkg_json","paths","dirname","env_files","_","map","String","
|
|
1
|
+
{"version":3,"names":["_yargs","_interopRequireDefault","require","path","_interopRequireWildcard","fs","_chokidar","_main","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","load_rc","rc_file","existsSync","undefined","cache","resolve","log","msg","process","stdout","write","log_err","stderr","cli","argv","yargs","slice","option","type","cwd","description","alias","usage","help","parseAsync","project_root","projectRoot","lib_root","libRoot","conventional","join","pkg_json","paths","dirname","env_files","_","map","String","length","exit","missing_files","filter","run","changed_path","start","Date","now","rc","main","err","Error","message","watch","files_to_watch","watcher","ignoreInitial","persistent","on","p","stdin","resume","close","then","module"],"sourceRoot":"../../src","sources":["cli.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,IAAA,GAAAC,uBAAA,CAAAF,OAAA;AACA,IAAAG,EAAA,GAAAD,uBAAA,CAAAF,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AACA,IAAAK,KAAA,GAAAN,sBAAA,CAAAC,OAAA;AAA0B,SAAAE,wBAAAI,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAN,uBAAA,YAAAA,CAAAI,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAR,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAK,UAAA,GAAAL,CAAA,KAAAU,OAAA,EAAAV,CAAA;AAG1B;AACA;AACA;AACA;AACA,SAASmB,OAAOA,CAACC,OAAe,EAAkB;EAChD,IAAI,CAACvB,EAAE,CAACwB,UAAU,CAACD,OAAO,CAAC,EAAE,OAAOE,SAAS;EAC7C,OAAO5B,OAAO,CAAC6B,KAAK,CAAC7B,OAAO,CAAC8B,OAAO,CAACJ,OAAO,CAAC,CAAC;EAC9C;EACA,OAAO1B,OAAO,CAAC0B,OAAO,CAAC;AACzB;AAEA,SAASK,GAAGA,CAACC,GAAW,EAAQ;EAC9BC,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC,UAAUH,GAAG,IAAI,CAAC;AACzC;AAEA,SAASI,OAAOA,CAACJ,GAAW,EAAQ;EAClCC,OAAO,CAACI,MAAM,CAACF,KAAK,CAAC,YAAYH,GAAG,IAAI,CAAC;AAC3C;AAEe,eAAeM,GAAGA,CAAA,EAAkB;EACjD,MAAMC,IAAI,GAAG,MAAM,IAAAC,cAAK,EAACP,OAAO,CAACM,IAAI,CAACE,KAAK,CAAC,CAAC,CAAC,CAAC,CAC5CC,MAAM,CAAC,aAAa,EAAE;IACrBC,IAAI,EAAE,QAAQ;IACd3B,OAAO,EAAEiB,OAAO,CAACW,GAAG,CAAC,CAAC;IACtBC,WAAW,EAAE;EACf,CAAC,CAAC,CACDH,MAAM,CAAC,SAAS,EAAE;IACjBC,IAAI,EAAE,QAAQ;IACdE,WAAW,EACT,iDAAiD,GACjD;EACJ,CAAC,CAAC,CACDH,MAAM,CAAC,OAAO,EAAE;IACfI,KAAK,EAAE,GAAG;IACVH,IAAI,EAAE,SAAS;IACf3B,OAAO,EAAE,KAAK;IACd6B,WAAW,EACT,8DAA8D,GAC9D,mEAAmE,GACnE;EACJ,CAAC,CAAC,CACDE,KAAK,CAAC,gDAAgD,CAAC,CACvDC,IAAI,CAAC,CAAC,CACNC,UAAU,CAAC,CAAC;EAEf,MAAMC,YAAY,GAAGjD,IAAI,CAAC6B,OAAO,CAACS,IAAI,CAACY,WAAW,CAAC;;EAEnD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMC,QAAgB,GAAG,CAAC,MAAM;IAC9B,IAAIb,IAAI,CAACc,OAAO,EAAE,OAAOpD,IAAI,CAAC6B,OAAO,CAACS,IAAI,CAACc,OAAO,CAAC;IAEnD,MAAMC,YAAY,GAAGrD,IAAI,CAACsD,IAAI,CAACL,YAAY,EAAE,cAAc,EAAE,8BAA8B,CAAC;;IAE5F;IACA;IACA,IAAI/C,EAAE,CAACwB,UAAU,CAAC2B,YAAY,CAAC,EAAE,OAAOA,YAAY;;IAEpD;IACA,IAAI;MACF,MAAME,QAAQ,GAAGxD,OAAO,CAAC8B,OAAO,CAAC,2CAA2C,EAAE;QAC5E2B,KAAK,EAAE,CAACP,YAAY;MACtB,CAAC,CAAC;MACF,OAAOjD,IAAI,CAACyD,OAAO,CAACF,QAAQ,CAAC;IAC/B,CAAC,CAAC,MAAM;MACN;MACA,OAAOF,YAAY;IACrB;EACF,CAAC,EAAE,CAAC;;EAEJ;EACA;EACA,MAAMK,SAAS,GAAGpB,IAAI,CAACqB,CAAC,CAACC,GAAG,CAACC,MAAM,CAAC;EAEpC,IAAIH,SAAS,CAACI,MAAM,KAAK,CAAC,EAAE;IAC1B3B,OAAO,CAAC,+DAA+D,CAAC;IACxEH,OAAO,CAAC+B,IAAI,CAAC,CAAC,CAAC;EACjB;;EAEA;EACA,MAAMC,aAAa,GAAGN,SAAS,CAACO,MAAM,CAAEpD,CAAC,IAAK,CAACX,EAAE,CAACwB,UAAU,CAACb,CAAC,CAAC,CAAC;EAChE,IAAImD,aAAa,CAACF,MAAM,GAAG,CAAC,EAAE;IAC5B,KAAK,MAAMjD,CAAC,IAAImD,aAAa,EAAE;MAC7B7B,OAAO,CAAC,uBAAuBtB,CAAC,EAAE,CAAC;IACrC;IACAmB,OAAO,CAAC+B,IAAI,CAAC,CAAC,CAAC;EACjB;EAEA,MAAMtC,OAAO,GAAGzB,IAAI,CAAC6B,OAAO,CAACoB,YAAY,EAAE,YAAY,CAAC;;EAExD;EACA;EACA,eAAeiB,GAAGA,CAACC,YAAqB,EAAiB;IACvD,IAAIA,YAAY,EAAE;MAChBrC,GAAG,CAAC,GAAGqC,YAAY,4BAA4B,CAAC;IAClD;IACA,MAAMC,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IACxB,IAAI;MACF,MAAMC,EAAE,GAAG/C,OAAO,CAACC,OAAO,CAAC;MAC3B,MAAM,IAAA+C,aAAI,EAACvB,YAAY,EAAEE,QAAQ,EAAEO,SAAS,EAAEa,EAAE,CAAC;MACjD,IAAIJ,YAAY,EAAE;QAChBrC,GAAG,CAAC,aAAauC,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGF,KAAK,IAAI,CAAC;MAC1C;IACF,CAAC,CAAC,OAAOK,GAAG,EAAE;MACZtC,OAAO,CAACsC,GAAG,YAAYC,KAAK,GAAGD,GAAG,CAACE,OAAO,GAAGd,MAAM,CAACY,GAAG,CAAC,CAAC;IAC3D;EACF;;EAEA;EACA,IAAI,CAACnC,IAAI,CAACsC,KAAK,EAAE;IACf,MAAML,EAAE,GAAG/C,OAAO,CAACC,OAAO,CAAC;IAC3B,MAAM,IAAA+C,aAAI,EAACvB,YAAY,EAAEE,QAAQ,EAAEO,SAAS,EAAEa,EAAE,CAAC;IACjD;EACF;;EAEA;EACA;EACA,MAAML,GAAG,CAAC,CAAC;;EAEX;EACA,MAAMW,cAAc,GAAG,CAAC,GAAGnB,SAAS,EAAE,IAAIxD,EAAE,CAACwB,UAAU,CAACD,OAAO,CAAC,GAAG,CAACA,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;EAEnF,MAAMqD,OAAO,GAAG,IAAAF,eAAK,EAACC,cAAc,EAAE;IACpCE,aAAa,EAAE,IAAI;IACnBC,UAAU,EAAE;EACd,CAAC,CAAC;EAEFlD,GAAG,CACD,aAAa+C,cAAc,CAACvB,IAAI,CAAC,IAAI,CAAC,IAAI,GACxC,oFACJ,CAAC;EAEDwB,OAAO,CAACG,EAAE,CAAC,QAAQ,EAAGC,CAAC,IAAK,KAAKhB,GAAG,CAACgB,CAAC,CAAC,CAAC;EACxCJ,OAAO,CAACG,EAAE,CAAC,KAAK,EAAGC,CAAC,IAAK,KAAKhB,GAAG,CAACgB,CAAC,CAAC,CAAC;;EAErC;EACA;EACAlD,OAAO,CAACmD,KAAK,CAACC,MAAM,CAAC,CAAC;;EAEtB;EACApD,OAAO,CAACiD,EAAE,CAAC,QAAQ,EAAE,MAAM;IACzBjD,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC,IAAI,CAAC;IAC1BJ,GAAG,CAAC,aAAa,CAAC;IAClB,KAAKgD,OAAO,CAACO,KAAK,CAAC,CAAC,CAACC,IAAI,CAAC,MAAMtD,OAAO,CAAC+B,IAAI,CAAC,CAAC,CAAC,CAAC;EAClD,CAAC,CAAC;AACJ;;AAEA;AACA,IAAIhE,OAAO,CAACyE,IAAI,KAAKe,MAAM,EAAE;EAC3BlD,GAAG,CAAC,CAAC;AACP","ignoreList":[]}
|
package/lib/commonjs/flatten.js
CHANGED
|
@@ -13,7 +13,12 @@ function flatten(config, platform) {
|
|
|
13
13
|
const result = {};
|
|
14
14
|
for (const [key, value] of Object.entries(config)) {
|
|
15
15
|
if (value && typeof value === 'object') {
|
|
16
|
-
|
|
16
|
+
const resolved = value[platform];
|
|
17
|
+
// Only include the key if this platform has a value defined.
|
|
18
|
+
// Omitting undefined prevents broken output in native templates.
|
|
19
|
+
if (resolved !== undefined) {
|
|
20
|
+
result[key] = resolved;
|
|
21
|
+
}
|
|
17
22
|
} else {
|
|
18
23
|
result[key] = value;
|
|
19
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_assert","_interopRequireDefault","require","e","__esModule","default","VALID_PLATFORMS","flatten","config","platform","assert","includes","join","result","key","value","Object","entries"],"sourceRoot":"../../src","sources":["flatten.ts"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA4B,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAQ5B,MAAMG,eAA2B,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;AAE9C,SAASC,OAAOA,CAACC,MAAiB,EAAEC,QAAkB,EAAc;EACjF,IAAAC,eAAM,EAACF,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE,kCAAkC,CAAC;EAChF,IAAAE,eAAM,EACJJ,eAAe,CAACK,QAAQ,CAACF,QAAQ,CAAC,EAClC,4BAA4B,GAAGH,eAAe,CAACM,IAAI,CAAC,IAAI,CAC1D,CAAC;EACD,MAAMC,MAAkB,GAAG,CAAC,CAAC;EAC7B,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACT,MAAM,CAAC,EAAE;IACjD,IAAIO,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"names":["_assert","_interopRequireDefault","require","e","__esModule","default","VALID_PLATFORMS","flatten","config","platform","assert","includes","join","result","key","value","Object","entries","resolved","undefined"],"sourceRoot":"../../src","sources":["flatten.ts"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA4B,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAQ5B,MAAMG,eAA2B,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;AAE9C,SAASC,OAAOA,CAACC,MAAiB,EAAEC,QAAkB,EAAc;EACjF,IAAAC,eAAM,EAACF,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE,kCAAkC,CAAC;EAChF,IAAAE,eAAM,EACJJ,eAAe,CAACK,QAAQ,CAACF,QAAQ,CAAC,EAClC,4BAA4B,GAAGH,eAAe,CAACM,IAAI,CAAC,IAAI,CAC1D,CAAC;EACD,MAAMC,MAAkB,GAAG,CAAC,CAAC;EAC7B,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACT,MAAM,CAAC,EAAE;IACjD,IAAIO,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MACtC,MAAMG,QAAQ,GAAIH,KAAK,CAAsBN,QAAQ,CAAC;MACtD;MACA;MACA,IAAIS,QAAQ,KAAKC,SAAS,EAAE;QAC1BN,MAAM,CAACC,GAAG,CAAC,GAAGI,QAAQ;MACxB;IACF,CAAC,MAAM;MACLL,MAAM,CAACC,GAAG,CAAC,GAAGC,KAAoB;IACpC;EACF;EACA,OAAOF,MAAM;AACf","ignoreList":[]}
|
package/lib/commonjs/load-env.js
CHANGED
|
@@ -21,6 +21,20 @@ function read_yaml(config_path) {
|
|
|
21
21
|
if (typeof data === 'undefined' || data === null || typeof data !== 'object') {
|
|
22
22
|
throw new Error(`Expected to read object from ${config_path}, but got '${data}'`);
|
|
23
23
|
}
|
|
24
|
+
|
|
25
|
+
// Reject unsupported YAML types that would silently break template rendering.
|
|
26
|
+
// js-yaml parses unquoted dates (e.g. 2024-01-01) as Date objects.
|
|
27
|
+
const errors = [];
|
|
28
|
+
for (const [key, value] of Object.entries(data)) {
|
|
29
|
+
if (value instanceof Date) {
|
|
30
|
+
errors.push(`${key}: YAML parsed as Date. Quote the value to treat it as a string: "${key}: \\"${String(value)}\\""`);
|
|
31
|
+
} else if (Array.isArray(value)) {
|
|
32
|
+
errors.push(`${key}: arrays are not supported. Use per-platform objects or scalar values.`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (errors.length > 0) {
|
|
36
|
+
throw new Error(`[rncu] Unsupported value types in ${config_path}:\n` + errors.map(e => ` • ${e}`).join('\n'));
|
|
37
|
+
}
|
|
24
38
|
return data;
|
|
25
39
|
}
|
|
26
40
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["dotenv","_interopRequireWildcard","require","_dotenvExpand","yaml","path","fs","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","detect_format","config_path","ext","parse","read_yaml","data","load","readFileSync","toString","Error","
|
|
1
|
+
{"version":3,"names":["dotenv","_interopRequireWildcard","require","_dotenvExpand","yaml","path","fs","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","detect_format","config_path","ext","parse","read_yaml","data","load","readFileSync","toString","Error","errors","key","value","entries","Date","push","String","Array","isArray","length","map","join","load_env","config_paths","paths","formats","allDotenv","every","raw","p","content","assign","result","expand","parsed","merged","expanded"],"sourceRoot":"../../src","sources":["load-env.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/commonjs/main.js
CHANGED
|
@@ -13,7 +13,7 @@ var _validateEnv = require("./validate-env");
|
|
|
13
13
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
14
|
/**
|
|
15
15
|
* Main build-time pipeline:
|
|
16
|
-
* load → resolve (on_env hook) → validate
|
|
16
|
+
* load → resolve (on_env hook) → validate keys → validate schema → flatten → render → write
|
|
17
17
|
*
|
|
18
18
|
* @param project_root Root of the React Native project
|
|
19
19
|
* @param lib_root Root of the react-native-config-ultimate install
|
|
@@ -22,6 +22,10 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
22
22
|
*/
|
|
23
23
|
async function main(project_root, lib_root, env_file, rc) {
|
|
24
24
|
const env = await (0, _resolveEnv.default)((0, _loadEnv.default)(env_file), rc);
|
|
25
|
+
|
|
26
|
+
// Always validate key names — prevents template injection in generated
|
|
27
|
+
// native files regardless of whether the user has defined a schema.
|
|
28
|
+
(0, _validateEnv.validate_keys)(env);
|
|
25
29
|
if (rc?.schema) {
|
|
26
30
|
(0, _validateEnv.validate_env)(env, rc.schema);
|
|
27
31
|
}
|
package/lib/commonjs/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_loadEnv","_interopRequireDefault","require","_renderEnv","_writeEnv","_flatten","_resolveEnv","_validateEnv","e","__esModule","default","main","project_root","lib_root","env_file","rc","env","resolve_env","load_env","schema","validate_env","flat","ios","flatten","android","web","files_to_write","render_env","write_env"],"sourceRoot":"../../src","sources":["main.ts"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,SAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,WAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,YAAA,GAAAL,OAAA;
|
|
1
|
+
{"version":3,"names":["_loadEnv","_interopRequireDefault","require","_renderEnv","_writeEnv","_flatten","_resolveEnv","_validateEnv","e","__esModule","default","main","project_root","lib_root","env_file","rc","env","resolve_env","load_env","validate_keys","schema","validate_env","flat","ios","flatten","android","web","files_to_write","render_env","write_env"],"sourceRoot":"../../src","sources":["main.ts"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,SAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,WAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,YAAA,GAAAL,OAAA;AAA6D,SAAAD,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAK7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,eAAeG,IAAIA,CAChCC,YAAoB,EACpBC,QAAgB,EAChBC,QAA2B,EAC3BC,EAAO,EACQ;EACf,MAAMC,GAAY,GAAG,MAAM,IAAAC,mBAAW,EAAC,IAAAC,gBAAQ,EAACJ,QAAQ,CAAC,EAAEC,EAAE,CAAC;;EAE9D;EACA;EACA,IAAAI,0BAAa,EAACH,GAAG,CAAC;EAElB,IAAID,EAAE,EAAEK,MAAM,EAAE;IACd,IAAAC,yBAAY,EAACL,GAAG,EAAED,EAAE,CAACK,MAAM,CAAC;EAC9B;EAEA,MAAME,IAAI,GAAG;IACXC,GAAG,EAAE,IAAAC,gBAAO,EAACR,GAAG,EAAe,KAAK,CAAC;IACrCS,OAAO,EAAE,IAAAD,gBAAO,EAACR,GAAG,EAAe,SAAS,CAAC;IAC7CU,GAAG,EAAE,IAAAF,gBAAO,EAACR,GAAG,EAAe,KAAK;EACtC,CAAC;EACD,MAAMW,cAAc,GAAG,IAAAC,kBAAU,EAAChB,YAAY,EAAEC,QAAQ,EAAES,IAAI,EAAEP,EAAE,CAAC;EACnE,IAAAc,iBAAS,EAACF,cAAc,CAAC;AAC3B","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["path","_interopRequireWildcard","require","fs","_handlebars","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","code_file_name","config_file_name","is_string","value","is_number","is_boolean","escape","replace","xcconfig_format","to_json","JSON","stringify","handlebars","registerHelper","template_cache","Map","get_compiled_template","template_name","cached","template_path","join","__dirname","compiled","compile","readFileSync","render_template","data","render_env","project_root","lib_root","env","rc","ios","android","web","map","existsSync","js_override"],"sourceRoot":"../../src","sources":["render-env.ts"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,EAAA,GAAAF,uBAAA,CAAAC,OAAA;AACA,IAAAE,WAAA,GAAAC,sBAAA,CAAAH,OAAA;AAAoC,SAAAG,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAL,wBAAAK,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAT,uBAAA,YAAAA,CAAAK,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAMpC,MAAMgB,cAAc,GAAG,cAAc;AACrC,MAAMC,gBAAgB,GAAG,MAAM;;AAE/B;;AAEA,SAASC,SAASA,CAACC,KAAc,EAAW;EAC1C,OAAO,OAAOA,KAAK,KAAK,QAAQ;AAClC;AAEA,SAASC,SAASA,CAACD,KAAc,EAAW;EAC1C,OAAO,OAAOA,KAAK,KAAK,QAAQ;AAClC;AAEA,SAASE,UAAUA,CAACF,KAAc,EAAW;EAC3C,OAAO,OAAOA,KAAK,KAAK,SAAS;AACnC;AAEA,SAASG,MAAMA,CAACH,KAAc,EAAW;EACvC,IAAID,SAAS,CAACC,KAAK,CAAC,EAAE;IACpB,OAAQA,KAAK,CACVI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CACvBA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CACrBA,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CACtBA,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;EAC3B;EACA,OAAOJ,KAAK;AACd;AAEA,SAASK,eAAeA,CAACL,KAAc,EAAW;EAChD,IAAID,SAAS,CAACC,KAAK,CAAC,EAAE;IACpB,OAAQA,KAAK,
|
|
1
|
+
{"version":3,"names":["path","_interopRequireWildcard","require","fs","_handlebars","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","code_file_name","config_file_name","is_string","value","is_number","is_boolean","escape","replace","xcconfig_format","to_json","JSON","stringify","handlebars","registerHelper","template_cache","Map","get_compiled_template","template_name","cached","template_path","join","__dirname","compiled","compile","readFileSync","render_template","data","render_env","project_root","lib_root","env","rc","ios","android","web","map","existsSync","js_override"],"sourceRoot":"../../src","sources":["render-env.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -22,7 +22,11 @@ exports.default = resolve_env;
|
|
|
22
22
|
async function resolve_env(env, rc) {
|
|
23
23
|
if (rc && rc.on_env) {
|
|
24
24
|
const patched_env = await rc.on_env(env);
|
|
25
|
-
|
|
25
|
+
if (typeof patched_env === 'undefined') return env;
|
|
26
|
+
if (!patched_env || typeof patched_env !== 'object' || Array.isArray(patched_env)) {
|
|
27
|
+
throw new Error(`[rncu] on_env hook must return an object (or undefined to keep the original), ` + `but got ${typeof patched_env}: ${String(patched_env)}`);
|
|
28
|
+
}
|
|
29
|
+
return patched_env;
|
|
26
30
|
} else {
|
|
27
31
|
return env;
|
|
28
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["resolve_env","env","rc","on_env","patched_env"],"sourceRoot":"../../src","sources":["resolve-env.ts"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;
|
|
1
|
+
{"version":3,"names":["resolve_env","env","rc","on_env","patched_env","Array","isArray","Error","String"],"sourceRoot":"../../src","sources":["resolve-env.ts"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA6Be,eAAeA,WAAWA,CAACC,GAAY,EAAEC,EAAO,EAAoB;EACjF,IAAIA,EAAE,IAAIA,EAAE,CAACC,MAAM,EAAE;IACnB,MAAMC,WAAW,GAAG,MAAMF,EAAE,CAACC,MAAM,CAACF,GAAG,CAAC;IACxC,IAAI,OAAOG,WAAW,KAAK,WAAW,EAAE,OAAOH,GAAG;IAClD,IAAI,CAACG,WAAW,IAAI,OAAOA,WAAW,KAAK,QAAQ,IAAIC,KAAK,CAACC,OAAO,CAACF,WAAW,CAAC,EAAE;MACjF,MAAM,IAAIG,KAAK,CACb,gFAAgF,GAC9E,WAAW,OAAOH,WAAW,KAAKI,MAAM,CAACJ,WAAW,CAAC,EACzD,CAAC;IACH;IACA,OAAOA,WAAW;EACpB,CAAC,MAAM;IACL,OAAOH,GAAG;EACZ;AACF","ignoreList":[]}
|
|
@@ -4,13 +4,4 @@ const IOS_DATA = {{{toJSON @root.ios}}}
|
|
|
4
4
|
|
|
5
5
|
const ANDROID_DATA = {{{toJSON @root.android}}}
|
|
6
6
|
|
|
7
|
-
module.exports = {
|
|
8
|
-
{{#each @root.ios}}
|
|
9
|
-
get {{{@key}}}() {
|
|
10
|
-
return RN.Platform.select({
|
|
11
|
-
ios: IOS_DATA["{{{@key}}}"],
|
|
12
|
-
android: ANDROID_DATA["{{{@key}}}"],
|
|
13
|
-
});
|
|
14
|
-
},
|
|
15
|
-
{{/each}}
|
|
16
|
-
}
|
|
7
|
+
module.exports = RN.Platform.select({ ios: IOS_DATA, android: ANDROID_DATA }) || {};
|