react-native-config-ultimate 0.2.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.
Files changed (110) hide show
  1. package/README.md +476 -121
  2. package/android/rncu.gradle +19 -15
  3. package/android/src/main/java/com/reactnativeultimateconfig/UltimateConfigHelper.java +87 -0
  4. package/android/src/main/java/com/reactnativeultimateconfig/UltimateConfigPackage.java +1 -1
  5. package/android/src/newarch/java/com/reactnativeultimateconfig/UltimateConfigModule.java +3 -50
  6. package/android/src/oldarch/java/com/reactnativeultimateconfig/UltimateConfigModule.java +3 -54
  7. package/ios/UltimateConfig.mm +2 -1
  8. package/lib/commonjs/cli.js +10 -4
  9. package/lib/commonjs/cli.js.map +1 -1
  10. package/lib/commonjs/flatten.js +6 -1
  11. package/lib/commonjs/flatten.js.map +1 -1
  12. package/lib/commonjs/load-env.js +14 -0
  13. package/lib/commonjs/load-env.js.map +1 -1
  14. package/lib/commonjs/main.js +5 -1
  15. package/lib/commonjs/main.js.map +1 -1
  16. package/lib/commonjs/render-env.js +1 -1
  17. package/lib/commonjs/render-env.js.map +1 -1
  18. package/lib/commonjs/resolve-env.js +5 -1
  19. package/lib/commonjs/resolve-env.js.map +1 -1
  20. package/lib/commonjs/templates/override.js.handlebars +1 -10
  21. package/lib/commonjs/validate-env.js +20 -7
  22. package/lib/commonjs/validate-env.js.map +1 -1
  23. package/lib/module/cli.js +10 -4
  24. package/lib/module/cli.js.map +1 -1
  25. package/lib/module/flatten.js +6 -1
  26. package/lib/module/flatten.js.map +1 -1
  27. package/lib/module/load-env.js +14 -0
  28. package/lib/module/load-env.js.map +1 -1
  29. package/lib/module/main.js +6 -2
  30. package/lib/module/main.js.map +1 -1
  31. package/lib/module/render-env.js +1 -1
  32. package/lib/module/render-env.js.map +1 -1
  33. package/lib/module/resolve-env.js +5 -1
  34. package/lib/module/resolve-env.js.map +1 -1
  35. package/lib/module/templates/override.js.handlebars +1 -10
  36. package/lib/module/validate-env.js +19 -7
  37. package/lib/module/validate-env.js.map +1 -1
  38. package/lib/typescript/src/cli.d.ts.map +1 -1
  39. package/lib/typescript/src/flatten.d.ts.map +1 -1
  40. package/lib/typescript/src/load-env.d.ts.map +1 -1
  41. package/lib/typescript/src/main.d.ts +1 -1
  42. package/lib/typescript/src/main.d.ts.map +1 -1
  43. package/lib/typescript/src/render-env.d.ts.map +1 -1
  44. package/lib/typescript/src/resolve-env.d.ts +8 -1
  45. package/lib/typescript/src/resolve-env.d.ts.map +1 -1
  46. package/lib/typescript/src/validate-env.d.ts +8 -0
  47. package/lib/typescript/src/validate-env.d.ts.map +1 -1
  48. package/package.json +2 -2
  49. package/src/cli.ts +11 -4
  50. package/src/flatten.ts +6 -1
  51. package/src/load-env.ts +18 -0
  52. package/src/main.ts +6 -2
  53. package/src/render-env.ts +4 -1
  54. package/src/resolve-env.ts +16 -2
  55. package/src/templates/override.js.handlebars +1 -10
  56. package/src/validate-env.ts +23 -7
  57. package/lib/commonjs/bin.spec.js +0 -48
  58. package/lib/commonjs/bin.spec.js.map +0 -1
  59. package/lib/commonjs/cli.spec.js +0 -190
  60. package/lib/commonjs/cli.spec.js.map +0 -1
  61. package/lib/commonjs/flatten.spec.js +0 -32
  62. package/lib/commonjs/flatten.spec.js.map +0 -1
  63. package/lib/commonjs/load-env.spec.js +0 -257
  64. package/lib/commonjs/load-env.spec.js.map +0 -1
  65. package/lib/commonjs/main.spec.js +0 -228
  66. package/lib/commonjs/main.spec.js.map +0 -1
  67. package/lib/commonjs/render-env.spec.js +0 -397
  68. package/lib/commonjs/render-env.spec.js.map +0 -1
  69. package/lib/commonjs/resolve-env.spec.js +0 -31
  70. package/lib/commonjs/resolve-env.spec.js.map +0 -1
  71. package/lib/commonjs/validate-env.spec.js +0 -325
  72. package/lib/commonjs/validate-env.spec.js.map +0 -1
  73. package/lib/commonjs/write-env.spec.js +0 -115
  74. package/lib/commonjs/write-env.spec.js.map +0 -1
  75. package/lib/module/bin.spec.js +0 -47
  76. package/lib/module/bin.spec.js.map +0 -1
  77. package/lib/module/cli.spec.js +0 -190
  78. package/lib/module/cli.spec.js.map +0 -1
  79. package/lib/module/flatten.spec.js +0 -31
  80. package/lib/module/flatten.spec.js.map +0 -1
  81. package/lib/module/load-env.spec.js +0 -257
  82. package/lib/module/load-env.spec.js.map +0 -1
  83. package/lib/module/main.spec.js +0 -224
  84. package/lib/module/main.spec.js.map +0 -1
  85. package/lib/module/render-env.spec.js +0 -396
  86. package/lib/module/render-env.spec.js.map +0 -1
  87. package/lib/module/resolve-env.spec.js +0 -30
  88. package/lib/module/resolve-env.spec.js.map +0 -1
  89. package/lib/module/validate-env.spec.js +0 -325
  90. package/lib/module/validate-env.spec.js.map +0 -1
  91. package/lib/module/write-env.spec.js +0 -115
  92. package/lib/module/write-env.spec.js.map +0 -1
  93. package/lib/typescript/src/bin.spec.d.ts +0 -2
  94. package/lib/typescript/src/bin.spec.d.ts.map +0 -1
  95. package/lib/typescript/src/cli.spec.d.ts +0 -14
  96. package/lib/typescript/src/cli.spec.d.ts.map +0 -1
  97. package/lib/typescript/src/flatten.spec.d.ts +0 -2
  98. package/lib/typescript/src/flatten.spec.d.ts.map +0 -1
  99. package/lib/typescript/src/load-env.spec.d.ts +0 -6
  100. package/lib/typescript/src/load-env.spec.d.ts.map +0 -1
  101. package/lib/typescript/src/main.spec.d.ts +0 -2
  102. package/lib/typescript/src/main.spec.d.ts.map +0 -1
  103. package/lib/typescript/src/render-env.spec.d.ts +0 -2
  104. package/lib/typescript/src/render-env.spec.d.ts.map +0 -1
  105. package/lib/typescript/src/resolve-env.spec.d.ts +0 -2
  106. package/lib/typescript/src/resolve-env.spec.d.ts.map +0 -1
  107. package/lib/typescript/src/validate-env.spec.d.ts +0 -2
  108. package/lib/typescript/src/validate-env.spec.d.ts.map +0 -1
  109. package/lib/typescript/src/write-env.spec.d.ts +0 -9
  110. package/lib/typescript/src/write-env.spec.d.ts.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"names":["mockReadFileSync","jest","fn","doMock","readFileSync","mockParse","parse","mockExpand","expand","mockYaml","load","load_env","require","default","describe","beforeEach","mockReset","mockImplementation","input","it","mockReturnValueOnce","hello","result","expect","toHaveBeenCalledWith","toEqual","A","B","C","toHaveBeenCalledTimes","parsed","BASE","URL","BASE_URL","API_URL","each","extension","Buffer","from","undefined","content","toThrow","YAML_VAR","DOTENV_VAR","toHaveBeenCalled","SHARED","toBe"],"sourceRoot":"../../src","sources":["load-env.spec.ts"],"mappings":"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","ignoreList":[]}
@@ -1,228 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.files_to_assert = void 0;
7
- const mock_load_env = jest.fn();
8
- jest.doMock('./load-env', () => ({
9
- __esModule: true,
10
- default: mock_load_env
11
- }));
12
- const mock_render_env = jest.fn();
13
- jest.doMock('./render-env', () => ({
14
- __esModule: true,
15
- default: mock_render_env
16
- }));
17
- const mock_write_env = jest.fn();
18
- jest.doMock('./write-env', () => ({
19
- __esModule: true,
20
- default: mock_write_env
21
- }));
22
- const mock_flatten = jest.fn();
23
- jest.doMock('./flatten', () => ({
24
- __esModule: true,
25
- default: mock_flatten
26
- }));
27
- const mock_validate_env = jest.fn();
28
- jest.doMock('./validate-env', () => ({
29
- validate_env: mock_validate_env
30
- }));
31
-
32
- // eslint-disable-next-line @typescript-eslint/no-require-imports
33
- const main = require('./main').default;
34
- const files_to_assert = exports.files_to_assert = ['ios/rncu.xcconfig', 'node_modules/react-native-config-ultimate/ios/ConfigValues.h', 'node_modules/react-native-config-ultimate/android/rncu.yaml', 'node_modules/react-native-config-ultimate/index.d.ts', 'node_modules/react-native-config-ultimate/index.web.js', 'node_modules/react-native-config-ultimate/override.js'];
35
- describe('main', () => {
36
- beforeEach(() => {
37
- mock_load_env.mockReset();
38
- mock_render_env.mockReset();
39
- mock_write_env.mockReset();
40
- mock_flatten.mockReset();
41
- mock_validate_env.mockReset();
42
- });
43
- it('execute render with paths (string arg — backward-compatible)', async () => {
44
- mock_load_env.mockReturnValueOnce({
45
- data: true
46
- });
47
- mock_flatten.mockReturnValueOnce({
48
- data: true,
49
- ios: true
50
- });
51
- mock_flatten.mockReturnValueOnce({
52
- data: true,
53
- android: true
54
- });
55
- mock_flatten.mockReturnValueOnce({
56
- data: true,
57
- web: true
58
- });
59
- mock_render_env.mockReturnValueOnce({
60
- hello: 'world'
61
- });
62
- await main('project', 'project/node_modules/react-native-config-ultimate', 'file');
63
- expect(mock_load_env).toHaveBeenCalledWith('file');
64
- expect(mock_flatten).toHaveBeenCalledWith({
65
- data: true
66
- }, 'ios');
67
- expect(mock_flatten).toHaveBeenCalledWith({
68
- data: true
69
- }, 'android');
70
- expect(mock_flatten).toHaveBeenCalledWith({
71
- data: true
72
- }, 'web');
73
- expect(mock_render_env).toHaveBeenCalledWith('project', 'project/node_modules/react-native-config-ultimate', {
74
- ios: {
75
- data: true,
76
- ios: true
77
- },
78
- android: {
79
- data: true,
80
- android: true
81
- },
82
- web: {
83
- data: true,
84
- web: true
85
- }
86
- }, undefined);
87
- expect(mock_write_env).toHaveBeenCalledWith({
88
- hello: 'world'
89
- });
90
- });
91
- it('passes array of env files to load_env (multi-file merge)', async () => {
92
- mock_load_env.mockReturnValueOnce({
93
- data: true
94
- });
95
- mock_flatten.mockReturnValue({});
96
- mock_render_env.mockReturnValueOnce({});
97
- await main('project', 'project/node_modules/react-native-config-ultimate', ['.env.base', '.env.staging']);
98
- expect(mock_load_env).toHaveBeenCalledWith(['.env.base', '.env.staging']);
99
- });
100
- describe('rc.on_env', () => {
101
- it('invoke rc hook with config before flattening', async () => {
102
- const on_env = jest.fn();
103
- mock_load_env.mockReturnValueOnce({
104
- data: true
105
- });
106
- await main('project', 'project/node_modules/react-native-config-ultimate', 'file', {
107
- on_env
108
- });
109
- expect(on_env).toHaveBeenCalledWith({
110
- data: true
111
- });
112
- expect(mock_flatten).toHaveBeenCalledWith({
113
- data: true
114
- }, 'ios');
115
- expect(mock_flatten).toHaveBeenCalledWith({
116
- data: true
117
- }, 'android');
118
- expect(mock_flatten).toHaveBeenCalledWith({
119
- data: true
120
- }, 'web');
121
- });
122
- it('hook can add or remove values', async () => {
123
- const on_env = jest.fn();
124
- on_env.mockImplementation(env => {
125
- const {
126
- key1,
127
- ...rest
128
- } = env;
129
- void key1;
130
- return {
131
- ...rest,
132
- key2: 'hello'
133
- };
134
- });
135
- mock_load_env.mockReturnValueOnce({
136
- data: true,
137
- key1: 'bye'
138
- });
139
- await main('project', 'project/node_modules/react-native-config-ultimate', 'file', {
140
- on_env
141
- });
142
- expect(on_env).toHaveBeenCalledWith({
143
- data: true,
144
- key1: 'bye'
145
- });
146
- expect(mock_flatten).toHaveBeenCalledWith({
147
- data: true,
148
- key2: 'hello'
149
- }, 'ios');
150
- expect(mock_flatten).toHaveBeenCalledWith({
151
- data: true,
152
- key2: 'hello'
153
- }, 'android');
154
- expect(mock_flatten).toHaveBeenCalledWith({
155
- data: true,
156
- key2: 'hello'
157
- }, 'web');
158
- });
159
- });
160
- describe('rc.schema', () => {
161
- it('calls validate_env when schema is provided', async () => {
162
- const schema = {
163
- API_KEY: {
164
- type: 'string',
165
- required: true
166
- }
167
- };
168
- mock_load_env.mockReturnValueOnce({
169
- API_KEY: 'secret'
170
- });
171
- mock_flatten.mockReturnValue({});
172
- mock_render_env.mockReturnValueOnce({});
173
- await main('project', 'project/node_modules/react-native-config-ultimate', 'file', {
174
- schema
175
- });
176
- expect(mock_validate_env).toHaveBeenCalledWith({
177
- API_KEY: 'secret'
178
- }, schema);
179
- });
180
- it('does not call validate_env when no schema is provided', async () => {
181
- mock_load_env.mockReturnValueOnce({
182
- data: true
183
- });
184
- mock_flatten.mockReturnValue({});
185
- mock_render_env.mockReturnValueOnce({});
186
- await main('project', 'project/node_modules/react-native-config-ultimate', 'file');
187
- expect(mock_validate_env).not.toHaveBeenCalled();
188
- });
189
- it('validates env AFTER on_env hook runs (hook output is validated)', async () => {
190
- const schema = {
191
- INJECTED_KEY: {
192
- type: 'string',
193
- required: true
194
- }
195
- };
196
- const on_env = jest.fn().mockReturnValue({
197
- INJECTED_KEY: 'from-hook'
198
- });
199
- mock_load_env.mockReturnValueOnce({});
200
- mock_flatten.mockReturnValue({});
201
- mock_render_env.mockReturnValueOnce({});
202
- await main('project', 'project/node_modules/react-native-config-ultimate', 'file', {
203
- on_env,
204
- schema
205
- });
206
- // validate_env receives the HOOK output, not the raw env
207
- expect(mock_validate_env).toHaveBeenCalledWith({
208
- INJECTED_KEY: 'from-hook'
209
- }, schema);
210
- });
211
- it('propagates validation error thrown by validate_env', async () => {
212
- const schema = {
213
- API_KEY: {
214
- type: 'string',
215
- required: true
216
- }
217
- };
218
- mock_load_env.mockReturnValueOnce({});
219
- mock_validate_env.mockImplementation(() => {
220
- throw new Error('❌ validation failed: Missing required env var: API_KEY');
221
- });
222
- await expect(main('project', 'project/node_modules/react-native-config-ultimate', 'file', {
223
- schema
224
- })).rejects.toThrow('Missing required env var: API_KEY');
225
- });
226
- });
227
- });
228
- //# sourceMappingURL=main.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["mock_load_env","jest","fn","doMock","__esModule","default","mock_render_env","mock_write_env","mock_flatten","mock_validate_env","validate_env","main","require","files_to_assert","exports","describe","beforeEach","mockReset","it","mockReturnValueOnce","data","ios","android","web","hello","expect","toHaveBeenCalledWith","undefined","mockReturnValue","on_env","mockImplementation","env","key1","rest","key2","schema","API_KEY","type","required","not","toHaveBeenCalled","INJECTED_KEY","Error","rejects","toThrow"],"sourceRoot":"../../src","sources":["main.spec.ts"],"mappings":"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","ignoreList":[]}
@@ -1,397 +0,0 @@
1
- "use strict";
2
-
3
- var path = _interopRequireWildcard(require("path"));
4
- var fs = _interopRequireWildcard(require("fs"));
5
- var _renderEnv = _interopRequireDefault(require("./render-env"));
6
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
8
- // We need to mock fs for some tests, but test helpers with real handlebars
9
- jest.mock('fs', () => ({
10
- ...jest.requireActual('fs'),
11
- existsSync: jest.fn(),
12
- readFileSync: jest.fn()
13
- }));
14
- const mock_exists_sync = fs.existsSync;
15
- const mock_read_file_sync = fs.readFileSync;
16
- describe('render-env', () => {
17
- const project_root = '/project';
18
- const lib_root = '/project/node_modules/react-native-config-ultimate';
19
- const sample_env = {
20
- ios: {
21
- API_URL: 'https://api.com',
22
- DEBUG: true,
23
- PORT: 3000
24
- },
25
- android: {
26
- API_URL: 'https://api.com',
27
- DEBUG: true,
28
- PORT: 3000
29
- },
30
- web: {
31
- API_URL: 'https://api.com',
32
- DEBUG: true,
33
- PORT: 3000
34
- }
35
- };
36
- beforeEach(() => {
37
- mock_exists_sync.mockReset();
38
- mock_read_file_sync.mockReset();
39
-
40
- // Default: ios folder exists
41
- mock_exists_sync.mockImplementation(p => {
42
- const path_str = p.toString();
43
- // ios folder exists
44
- if (path_str === path.join(project_root, 'ios')) return true;
45
- // template files exist (use real fs for templates)
46
- if (path_str.includes('templates')) {
47
- return jest.requireActual('fs').existsSync(p);
48
- }
49
- return false;
50
- });
51
-
52
- // For templates, use real fs
53
- mock_read_file_sync.mockImplementation((p, options) => {
54
- const path_str = p.toString();
55
- if (path_str.includes('templates')) {
56
- return jest.requireActual('fs').readFileSync(p, options);
57
- }
58
- return 'mocked content';
59
- });
60
- });
61
- describe('file generation', () => {
62
- it('generates index.d.ts in lib root', () => {
63
- const result = (0, _renderEnv.default)(project_root, lib_root, sample_env);
64
- const expected_path = path.join(lib_root, 'index.d.ts');
65
- expect(result[expected_path]).toBeDefined();
66
- });
67
- it('generates index.web.js in lib root', () => {
68
- const result = (0, _renderEnv.default)(project_root, lib_root, sample_env);
69
- const expected_path = path.join(lib_root, 'index.web.js');
70
- expect(result[expected_path]).toBeDefined();
71
- });
72
- it('generates ConfigValues.h in ios folder', () => {
73
- const result = (0, _renderEnv.default)(project_root, lib_root, sample_env);
74
- const expected_path = path.join(lib_root, 'ios', 'ConfigValues.h');
75
- expect(result[expected_path]).toBeDefined();
76
- });
77
- it('generates rncu.yaml in android folder', () => {
78
- const result = (0, _renderEnv.default)(project_root, lib_root, sample_env);
79
- const expected_path = path.join(lib_root, 'android', 'rncu.yaml');
80
- expect(result[expected_path]).toBeDefined();
81
- });
82
- it('generates rncu.xcconfig in project ios folder when it exists', () => {
83
- const result = (0, _renderEnv.default)(project_root, lib_root, sample_env);
84
- const expected_path = path.join(project_root, 'ios', 'rncu.xcconfig');
85
- expect(result[expected_path]).toBeDefined();
86
- });
87
- it('does NOT generate rncu.xcconfig when project has no ios folder', () => {
88
- mock_exists_sync.mockImplementation(p => {
89
- const path_str = p.toString();
90
- // ios folder does NOT exist
91
- if (path_str === path.join(project_root, 'ios')) return false;
92
- // template files exist (use real fs for templates)
93
- if (path_str.includes('templates')) {
94
- return jest.requireActual('fs').existsSync(p);
95
- }
96
- return false;
97
- });
98
- const result = (0, _renderEnv.default)(project_root, lib_root, sample_env);
99
- const xcconfig_path = path.join(project_root, 'ios', 'rncu.xcconfig');
100
- expect(result[xcconfig_path]).toBeUndefined();
101
- });
102
- it('generates override.js in lib root', () => {
103
- const result = (0, _renderEnv.default)(project_root, lib_root, sample_env);
104
- const expected_path = path.join(lib_root, 'override.js');
105
- expect(result[expected_path]).toBeDefined();
106
- });
107
- });
108
- describe('js_override RC option', () => {
109
- it('passes empty objects to override.js when js_override is false', () => {
110
- const result = (0, _renderEnv.default)(project_root, lib_root, sample_env, {
111
- js_override: false
112
- });
113
- const override_path = path.join(lib_root, 'override.js');
114
- const content = result[override_path];
115
-
116
- // The override.js template uses IOS_DATA and ANDROID_DATA variables
117
- expect(content).toContain('IOS_DATA = {}');
118
- expect(content).toContain('ANDROID_DATA = {}');
119
- });
120
- it('passes empty objects to override.js when js_override is undefined', () => {
121
- const result = (0, _renderEnv.default)(project_root, lib_root, sample_env, undefined);
122
- const override_path = path.join(lib_root, 'override.js');
123
- const content = result[override_path];
124
- expect(content).toContain('IOS_DATA = {}');
125
- expect(content).toContain('ANDROID_DATA = {}');
126
- });
127
- it('passes full env to override.js when js_override is true', () => {
128
- const result = (0, _renderEnv.default)(project_root, lib_root, sample_env, {
129
- js_override: true
130
- });
131
- const override_path = path.join(lib_root, 'override.js');
132
- const content = result[override_path];
133
-
134
- // Should contain actual env values
135
- expect(content).toContain('API_URL');
136
- expect(content).toContain('https://api.com');
137
- });
138
- });
139
- describe('template content', () => {
140
- it('index.d.ts contains type declarations for ios env keys', () => {
141
- const result = (0, _renderEnv.default)(project_root, lib_root, sample_env);
142
- const content = result[path.join(lib_root, 'index.d.ts')];
143
- expect(content).toContain('API_URL');
144
- expect(content).toContain('DEBUG');
145
- expect(content).toContain('PORT');
146
- });
147
- it('index.web.js contains web env values', () => {
148
- const result = (0, _renderEnv.default)(project_root, lib_root, sample_env);
149
- const content = result[path.join(lib_root, 'index.web.js')];
150
- expect(content).toContain('API_URL');
151
- expect(content).toContain('https://api.com');
152
- });
153
- it('rncu.yaml contains android env values', () => {
154
- const result = (0, _renderEnv.default)(project_root, lib_root, sample_env);
155
- const content = result[path.join(lib_root, 'android', 'rncu.yaml')];
156
- expect(content).toContain('API_URL');
157
- });
158
- it('rncu.xcconfig contains ios env values with xcconfig escaping', () => {
159
- const result = (0, _renderEnv.default)(project_root, lib_root, sample_env);
160
- const content = result[path.join(project_root, 'ios', 'rncu.xcconfig')];
161
-
162
- // xcconfig escapes // to /$()/
163
- expect(content).toContain('API_URL');
164
- expect(content).toContain('/$()/'); // https:// becomes https:/$()/
165
- });
166
- });
167
- });
168
- describe('handlebars helpers (via template output)', () => {
169
- // Test helpers indirectly through actual rendered output
170
- const project_root = '/project';
171
- const lib_root = '/project/node_modules/react-native-config-ultimate';
172
- beforeEach(() => {
173
- mock_exists_sync.mockImplementation(p => {
174
- const path_str = p.toString();
175
- if (path_str === path.join(project_root, 'ios')) return true;
176
- if (path_str.includes('templates')) {
177
- return jest.requireActual('fs').existsSync(p);
178
- }
179
- return false;
180
- });
181
- mock_read_file_sync.mockImplementation((p, options) => {
182
- const path_str = p.toString();
183
- if (path_str.includes('templates')) {
184
- return jest.requireActual('fs').readFileSync(p, options);
185
- }
186
- return 'mocked content';
187
- });
188
- });
189
- describe('escape helper', () => {
190
- it('escapes backslashes in string values', () => {
191
- const env = {
192
- ios: {
193
- PATH: 'C:\\Users\\test'
194
- },
195
- android: {
196
- PATH: 'C:\\Users\\test'
197
- },
198
- web: {
199
- PATH: 'C:\\Users\\test'
200
- }
201
- };
202
- const result = (0, _renderEnv.default)(project_root, lib_root, env);
203
- const content = result[path.join(lib_root, 'index.web.js')];
204
-
205
- // Backslashes should be escaped
206
- expect(content).toContain('\\\\');
207
- });
208
- it('escapes double quotes in string values', () => {
209
- const env = {
210
- ios: {
211
- MSG: 'say "hello"'
212
- },
213
- android: {
214
- MSG: 'say "hello"'
215
- },
216
- web: {
217
- MSG: 'say "hello"'
218
- }
219
- };
220
- const result = (0, _renderEnv.default)(project_root, lib_root, env);
221
- const content = result[path.join(lib_root, 'index.web.js')];
222
-
223
- // Quotes should be escaped
224
- expect(content).toContain('\\"');
225
- });
226
- it('escapes newlines in string values', () => {
227
- const env = {
228
- ios: {
229
- MSG: 'line1\nline2'
230
- },
231
- android: {
232
- MSG: 'line1\nline2'
233
- },
234
- web: {
235
- MSG: 'line1\nline2'
236
- }
237
- };
238
- const result = (0, _renderEnv.default)(project_root, lib_root, env);
239
- const content = result[path.join(lib_root, 'index.web.js')];
240
-
241
- // Newlines should be escaped as \\n
242
- expect(content).toContain('\\n');
243
- });
244
- });
245
- describe('xcconfig_format helper', () => {
246
- it('escapes // in URLs for xcconfig compatibility', () => {
247
- const env = {
248
- ios: {
249
- URL: 'https://example.com/path//double'
250
- },
251
- android: {
252
- URL: 'https://example.com'
253
- },
254
- web: {
255
- URL: 'https://example.com'
256
- }
257
- };
258
- const result = (0, _renderEnv.default)(project_root, lib_root, env);
259
- const content = result[path.join(project_root, 'ios', 'rncu.xcconfig')];
260
-
261
- // // should become /$()/ in xcconfig
262
- expect(content).toContain('/$()');
263
- });
264
- });
265
- describe('type helpers', () => {
266
- it('handles boolean values correctly', () => {
267
- const env = {
268
- ios: {
269
- ENABLED: true,
270
- DISABLED: false
271
- },
272
- android: {
273
- ENABLED: true,
274
- DISABLED: false
275
- },
276
- web: {
277
- ENABLED: true,
278
- DISABLED: false
279
- }
280
- };
281
- const result = (0, _renderEnv.default)(project_root, lib_root, env);
282
- const content = result[path.join(lib_root, 'index.web.js')];
283
-
284
- // Booleans should be rendered as true/false not "true"/"false"
285
- expect(content).toMatch(/ENABLED.*true/);
286
- expect(content).toMatch(/DISABLED.*false/);
287
- });
288
- it('handles number values correctly', () => {
289
- const env = {
290
- ios: {
291
- PORT: 3000,
292
- FLOAT: 3.14
293
- },
294
- android: {
295
- PORT: 3000,
296
- FLOAT: 3.14
297
- },
298
- web: {
299
- PORT: 3000,
300
- FLOAT: 3.14
301
- }
302
- };
303
- const result = (0, _renderEnv.default)(project_root, lib_root, env);
304
- const content = result[path.join(lib_root, 'index.web.js')];
305
-
306
- // Numbers should be rendered as numbers not strings
307
- expect(content).toMatch(/PORT.*3000/);
308
- expect(content).toMatch(/FLOAT.*3\.14/);
309
- });
310
- it('handles string values correctly', () => {
311
- const env = {
312
- ios: {
313
- NAME: 'test-app'
314
- },
315
- android: {
316
- NAME: 'test-app'
317
- },
318
- web: {
319
- NAME: 'test-app'
320
- }
321
- };
322
- const result = (0, _renderEnv.default)(project_root, lib_root, env);
323
- const content = result[path.join(lib_root, 'index.web.js')];
324
-
325
- // Strings should be quoted
326
- expect(content).toContain('"test-app"');
327
- });
328
- });
329
- });
330
- describe('template caching', () => {
331
- const project_root = '/project';
332
- const lib_root = '/project/node_modules/react-native-config-ultimate';
333
- const sample_env = {
334
- ios: {
335
- KEY: 'value'
336
- },
337
- android: {
338
- KEY: 'value'
339
- },
340
- web: {
341
- KEY: 'value'
342
- }
343
- };
344
- beforeEach(() => {
345
- mock_exists_sync.mockImplementation(p => {
346
- const path_str = p.toString();
347
- if (path_str === path.join(project_root, 'ios')) return true;
348
- if (path_str.includes('templates')) {
349
- return jest.requireActual('fs').existsSync(p);
350
- }
351
- return false;
352
- });
353
- mock_read_file_sync.mockImplementation((p, options) => {
354
- const path_str = p.toString();
355
- if (path_str.includes('templates')) {
356
- return jest.requireActual('fs').readFileSync(p, options);
357
- }
358
- return 'mocked content';
359
- });
360
- });
361
- it('produces consistent output across multiple calls', () => {
362
- const result1 = (0, _renderEnv.default)(project_root, lib_root, sample_env);
363
- const result2 = (0, _renderEnv.default)(project_root, lib_root, sample_env);
364
-
365
- // Same input should produce same output
366
- expect(result1).toEqual(result2);
367
- });
368
- it('produces different output for different env values', () => {
369
- const env1 = {
370
- ios: {
371
- A: 1
372
- },
373
- android: {
374
- A: 1
375
- },
376
- web: {
377
- A: 1
378
- }
379
- };
380
- const env2 = {
381
- ios: {
382
- B: 2
383
- },
384
- android: {
385
- B: 2
386
- },
387
- web: {
388
- B: 2
389
- }
390
- };
391
- const result1 = (0, _renderEnv.default)(project_root, lib_root, env1);
392
- const result2 = (0, _renderEnv.default)(project_root, lib_root, env2);
393
- const key = path.join(lib_root, 'index.d.ts');
394
- expect(result1[key]).not.toEqual(result2[key]);
395
- });
396
- });
397
- //# sourceMappingURL=render-env.spec.js.map