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