react-native-config-ultimate 0.0.7 → 0.2.0
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/android/build.gradle +1 -1
- package/android/gradle.properties +6 -0
- package/lib/commonjs/NativeUltimateConfig.js +20 -0
- package/lib/commonjs/NativeUltimateConfig.js.map +1 -0
- package/lib/commonjs/bin.spec.js +48 -0
- package/lib/commonjs/bin.spec.js.map +1 -0
- package/lib/commonjs/cli.js +146 -0
- package/lib/commonjs/cli.js.map +1 -0
- package/lib/commonjs/cli.spec.js +190 -0
- package/lib/commonjs/cli.spec.js.map +1 -0
- package/lib/commonjs/flatten.js +23 -0
- package/lib/commonjs/flatten.js.map +1 -0
- package/lib/commonjs/flatten.spec.js +32 -0
- package/lib/commonjs/flatten.spec.js.map +1 -0
- package/lib/commonjs/index.js +34 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/load-env.js +86 -0
- package/lib/commonjs/load-env.js.map +1 -0
- package/lib/commonjs/load-env.spec.js +257 -0
- package/lib/commonjs/load-env.spec.js.map +1 -0
- package/lib/commonjs/main.js +36 -0
- package/lib/commonjs/main.js.map +1 -0
- package/lib/commonjs/main.spec.js +228 -0
- package/lib/commonjs/main.spec.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/render-env.js +90 -0
- package/lib/commonjs/render-env.js.map +1 -0
- package/lib/commonjs/render-env.spec.js +397 -0
- package/lib/commonjs/render-env.spec.js.map +1 -0
- package/lib/commonjs/resolve-env.js +30 -0
- package/lib/commonjs/resolve-env.js.map +1 -0
- package/lib/commonjs/resolve-env.spec.js +31 -0
- package/lib/commonjs/resolve-env.spec.js.map +1 -0
- package/lib/commonjs/templates/ConfigValues.h.handlebars +24 -0
- package/lib/commonjs/templates/index.d.ts.handlebars +18 -0
- package/lib/commonjs/templates/index.web.js.handlebars +1 -0
- package/lib/commonjs/templates/override.js.handlebars +16 -0
- package/lib/commonjs/templates/rncu.xcconfig.handlebars +4 -0
- package/lib/commonjs/templates/rncu.yaml.handlebars +7 -0
- package/lib/commonjs/validate-env.js +63 -0
- package/lib/commonjs/validate-env.js.map +1 -0
- package/lib/commonjs/validate-env.spec.js +325 -0
- package/lib/commonjs/validate-env.spec.js.map +1 -0
- package/lib/commonjs/write-env.js +80 -0
- package/lib/commonjs/write-env.js.map +1 -0
- package/lib/commonjs/write-env.spec.js +115 -0
- package/lib/commonjs/write-env.spec.js.map +1 -0
- package/lib/module/NativeUltimateConfig.js +16 -0
- package/lib/module/NativeUltimateConfig.js.map +1 -0
- package/lib/module/bin.spec.js +47 -0
- package/lib/module/bin.spec.js.map +1 -0
- package/lib/module/cli.js +139 -0
- package/lib/module/cli.js.map +1 -0
- package/lib/module/cli.spec.js +190 -0
- package/lib/module/cli.spec.js.map +1 -0
- package/lib/module/flatten.js +18 -0
- package/lib/module/flatten.js.map +1 -0
- package/lib/module/flatten.spec.js +31 -0
- package/lib/module/flatten.spec.js.map +1 -0
- package/lib/module/index.js +30 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/load-env.js +81 -0
- package/lib/module/load-env.js.map +1 -0
- package/lib/module/load-env.spec.js +257 -0
- package/lib/module/load-env.spec.js.map +1 -0
- package/lib/module/main.js +31 -0
- package/lib/module/main.js.map +1 -0
- package/lib/module/main.spec.js +224 -0
- package/lib/module/main.spec.js.map +1 -0
- package/lib/module/render-env.js +84 -0
- package/lib/module/render-env.js.map +1 -0
- package/lib/module/render-env.spec.js +396 -0
- package/lib/module/render-env.spec.js.map +1 -0
- package/lib/module/resolve-env.js +26 -0
- package/lib/module/resolve-env.js.map +1 -0
- package/lib/module/resolve-env.spec.js +30 -0
- package/lib/module/resolve-env.spec.js.map +1 -0
- package/lib/module/templates/ConfigValues.h.handlebars +24 -0
- package/lib/module/templates/index.d.ts.handlebars +18 -0
- package/lib/module/templates/index.web.js.handlebars +1 -0
- package/lib/module/templates/override.js.handlebars +16 -0
- package/lib/module/templates/rncu.xcconfig.handlebars +4 -0
- package/lib/module/templates/rncu.yaml.handlebars +7 -0
- package/lib/module/validate-env.js +59 -0
- package/lib/module/validate-env.js.map +1 -0
- package/lib/module/validate-env.spec.js +325 -0
- package/lib/module/validate-env.spec.js.map +1 -0
- package/lib/module/write-env.js +75 -0
- package/lib/module/write-env.js.map +1 -0
- package/lib/module/write-env.spec.js +115 -0
- package/lib/module/write-env.spec.js.map +1 -0
- package/lib/typescript/src/NativeUltimateConfig.d.ts +18 -0
- package/lib/typescript/src/NativeUltimateConfig.d.ts.map +1 -0
- package/lib/typescript/src/bin.spec.d.ts +2 -0
- package/lib/typescript/src/bin.spec.d.ts.map +1 -0
- package/lib/typescript/src/cli.d.ts +2 -0
- package/lib/typescript/src/cli.d.ts.map +1 -0
- package/lib/typescript/src/cli.spec.d.ts +14 -0
- package/lib/typescript/src/cli.spec.d.ts.map +1 -0
- package/lib/typescript/src/flatten.d.ts +8 -0
- package/lib/typescript/src/flatten.d.ts.map +1 -0
- package/lib/typescript/src/flatten.spec.d.ts +2 -0
- package/lib/typescript/src/flatten.spec.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +6 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/load-env.d.ts +23 -0
- package/lib/typescript/src/load-env.d.ts.map +1 -0
- package/lib/typescript/src/load-env.spec.d.ts +6 -0
- package/lib/typescript/src/load-env.spec.d.ts.map +1 -0
- package/lib/typescript/src/main.d.ts +12 -0
- package/lib/typescript/src/main.d.ts.map +1 -0
- package/lib/typescript/src/main.spec.d.ts +2 -0
- package/lib/typescript/src/main.spec.d.ts.map +1 -0
- package/lib/typescript/src/render-env.d.ts +11 -0
- package/lib/typescript/src/render-env.d.ts.map +1 -0
- package/lib/typescript/src/render-env.spec.d.ts +2 -0
- package/lib/typescript/src/render-env.spec.d.ts.map +1 -0
- package/lib/typescript/src/resolve-env.d.ts +35 -0
- package/lib/typescript/src/resolve-env.d.ts.map +1 -0
- package/lib/typescript/src/resolve-env.spec.d.ts +2 -0
- package/lib/typescript/src/resolve-env.spec.d.ts.map +1 -0
- package/lib/typescript/src/validate-env.d.ts +10 -0
- package/lib/typescript/src/validate-env.d.ts.map +1 -0
- package/lib/typescript/src/validate-env.spec.d.ts +2 -0
- package/lib/typescript/src/validate-env.spec.d.ts.map +1 -0
- package/lib/typescript/src/write-env.d.ts +13 -0
- package/lib/typescript/src/write-env.d.ts.map +1 -0
- package/lib/typescript/src/write-env.spec.d.ts +9 -0
- package/lib/typescript/src/write-env.spec.d.ts.map +1 -0
- package/package.json +86 -52
- package/src/NativeUltimateConfig.ts +1 -2
- package/src/cli.ts +161 -0
- package/src/flatten.ts +26 -0
- package/src/index.ts +37 -0
- package/src/load-env.ts +81 -0
- package/src/main.ts +39 -0
- package/src/render-env.ts +111 -0
- package/src/resolve-env.ts +45 -0
- package/src/validate-env.ts +71 -0
- package/src/write-env.ts +74 -0
- package/bin.js +0 -5
- package/index.js +0 -28
- package/override.js +0 -1
- package/src/NativeUltimateConfig.js +0 -4
- package/src/cli.js +0 -176
- package/src/flatten.js +0 -22
- package/src/load-env.js +0 -107
- package/src/main.js +0 -34
- package/src/render-env.js +0 -113
- package/src/resolve-env.js +0 -12
- package/src/validate-env.js +0 -59
- package/src/write-env.js +0 -102
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const mockReadFileSync = jest.fn();
|
|
4
|
+
jest.doMock('fs', () => ({
|
|
5
|
+
readFileSync: mockReadFileSync
|
|
6
|
+
}));
|
|
7
|
+
const mockParse = jest.fn();
|
|
8
|
+
jest.doMock('dotenv', () => ({
|
|
9
|
+
parse: mockParse
|
|
10
|
+
}));
|
|
11
|
+
const mockExpand = jest.fn();
|
|
12
|
+
jest.doMock('dotenv-expand', () => ({
|
|
13
|
+
expand: mockExpand
|
|
14
|
+
}));
|
|
15
|
+
const mockYaml = jest.fn();
|
|
16
|
+
jest.doMock('js-yaml', () => ({
|
|
17
|
+
load: mockYaml
|
|
18
|
+
}));
|
|
19
|
+
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
21
|
+
const load_env = require('./load-env').default;
|
|
22
|
+
describe('load-env', () => {
|
|
23
|
+
beforeEach(() => {
|
|
24
|
+
mockReadFileSync.mockReset();
|
|
25
|
+
mockParse.mockReset();
|
|
26
|
+
mockExpand.mockReset();
|
|
27
|
+
mockYaml.mockReset();
|
|
28
|
+
// Default expand: return parsed as-is (no expansion side effects)
|
|
29
|
+
mockExpand.mockImplementation(input => input);
|
|
30
|
+
});
|
|
31
|
+
describe('dotenv format', () => {
|
|
32
|
+
it('reads a single dotenv file (backward-compatible string arg)', () => {
|
|
33
|
+
mockReadFileSync.mockReturnValueOnce('hello=world');
|
|
34
|
+
mockParse.mockReturnValueOnce({
|
|
35
|
+
hello: 'world'
|
|
36
|
+
});
|
|
37
|
+
const result = load_env('hello');
|
|
38
|
+
expect(mockReadFileSync).toHaveBeenCalledWith('hello', 'utf8');
|
|
39
|
+
expect(mockParse).toHaveBeenCalledWith('hello=world');
|
|
40
|
+
expect(result).toEqual({
|
|
41
|
+
hello: 'world'
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
it('reads a single dotenv file when passed as an array', () => {
|
|
45
|
+
mockReadFileSync.mockReturnValueOnce('hello=world');
|
|
46
|
+
mockParse.mockReturnValueOnce({
|
|
47
|
+
hello: 'world'
|
|
48
|
+
});
|
|
49
|
+
const result = load_env(['hello']);
|
|
50
|
+
expect(mockReadFileSync).toHaveBeenCalledWith('hello', 'utf8');
|
|
51
|
+
expect(result).toEqual({
|
|
52
|
+
hello: 'world'
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
it('merges multiple dotenv files, last file wins for conflicts', () => {
|
|
56
|
+
mockReadFileSync.mockReturnValueOnce('A=base\nB=base').mockReturnValueOnce('B=override\nC=new');
|
|
57
|
+
mockParse.mockReturnValueOnce({
|
|
58
|
+
A: 'base',
|
|
59
|
+
B: 'base'
|
|
60
|
+
}).mockReturnValueOnce({
|
|
61
|
+
B: 'override',
|
|
62
|
+
C: 'new'
|
|
63
|
+
});
|
|
64
|
+
const result = load_env(['.env.base', '.env.staging']);
|
|
65
|
+
expect(mockReadFileSync).toHaveBeenCalledTimes(2);
|
|
66
|
+
// expand is called once with the merged raw object
|
|
67
|
+
expect(mockExpand).toHaveBeenCalledWith({
|
|
68
|
+
parsed: {
|
|
69
|
+
A: 'base',
|
|
70
|
+
B: 'override',
|
|
71
|
+
C: 'new'
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
expect(result).toEqual({
|
|
75
|
+
A: 'base',
|
|
76
|
+
B: 'override',
|
|
77
|
+
C: 'new'
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
it('expands $VAR references using dotenv-expand', () => {
|
|
81
|
+
mockReadFileSync.mockReturnValueOnce('BASE=https://api.com\nURL=$BASE/v1');
|
|
82
|
+
mockParse.mockReturnValueOnce({
|
|
83
|
+
BASE: 'https://api.com',
|
|
84
|
+
URL: '$BASE/v1'
|
|
85
|
+
});
|
|
86
|
+
mockExpand.mockReturnValueOnce({
|
|
87
|
+
parsed: {
|
|
88
|
+
BASE: 'https://api.com',
|
|
89
|
+
URL: 'https://api.com/v1'
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
const result = load_env('.env');
|
|
93
|
+
expect(result).toEqual({
|
|
94
|
+
BASE: 'https://api.com',
|
|
95
|
+
URL: 'https://api.com/v1'
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
it('expands cross-file $VAR references when merging multiple files', () => {
|
|
99
|
+
mockReadFileSync.mockReturnValueOnce('BASE_URL=https://api.com').mockReturnValueOnce('API_URL=$BASE_URL/v1');
|
|
100
|
+
mockParse.mockReturnValueOnce({
|
|
101
|
+
BASE_URL: 'https://api.com'
|
|
102
|
+
}).mockReturnValueOnce({
|
|
103
|
+
API_URL: '$BASE_URL/v1'
|
|
104
|
+
});
|
|
105
|
+
// Expand is called with merged raw — so cross-file reference resolves
|
|
106
|
+
mockExpand.mockReturnValueOnce({
|
|
107
|
+
parsed: {
|
|
108
|
+
BASE_URL: 'https://api.com',
|
|
109
|
+
API_URL: 'https://api.com/v1'
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
const result = load_env(['.env.base', '.env.staging']);
|
|
113
|
+
expect(mockExpand).toHaveBeenCalledWith({
|
|
114
|
+
parsed: {
|
|
115
|
+
BASE_URL: 'https://api.com',
|
|
116
|
+
API_URL: '$BASE_URL/v1'
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
expect(result).toEqual({
|
|
120
|
+
BASE_URL: 'https://api.com',
|
|
121
|
+
API_URL: 'https://api.com/v1'
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe('yaml format', () => {
|
|
126
|
+
it.each`
|
|
127
|
+
extension
|
|
128
|
+
${'yml'}
|
|
129
|
+
${'yaml'}
|
|
130
|
+
`("reads yaml when extension is '.$extension'", ({
|
|
131
|
+
extension
|
|
132
|
+
}) => {
|
|
133
|
+
mockReadFileSync.mockReturnValueOnce(Buffer.from('data'));
|
|
134
|
+
mockYaml.mockReturnValueOnce({
|
|
135
|
+
hello: 'world'
|
|
136
|
+
});
|
|
137
|
+
const result = load_env(`hello.${extension}`);
|
|
138
|
+
expect(mockReadFileSync).toHaveBeenCalledWith(`hello.${extension}`);
|
|
139
|
+
expect(mockYaml).toHaveBeenCalledWith('data');
|
|
140
|
+
expect(result).toEqual({
|
|
141
|
+
hello: 'world'
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
it('merges multiple yaml files, last file wins for conflicts', () => {
|
|
145
|
+
mockReadFileSync.mockReturnValueOnce(Buffer.from('A: base\nB: base')).mockReturnValueOnce(Buffer.from('B: override\nC: new'));
|
|
146
|
+
mockYaml.mockReturnValueOnce({
|
|
147
|
+
A: 'base',
|
|
148
|
+
B: 'base'
|
|
149
|
+
}).mockReturnValueOnce({
|
|
150
|
+
B: 'override',
|
|
151
|
+
C: 'new'
|
|
152
|
+
});
|
|
153
|
+
const result = load_env(['base.yaml', 'staging.yaml']);
|
|
154
|
+
expect(mockReadFileSync).toHaveBeenCalledTimes(2);
|
|
155
|
+
expect(result).toEqual({
|
|
156
|
+
A: 'base',
|
|
157
|
+
B: 'override',
|
|
158
|
+
C: 'new'
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
describe.each`
|
|
162
|
+
extension
|
|
163
|
+
${'yml'}
|
|
164
|
+
${'yaml'}
|
|
165
|
+
`("throws when yaml is not an object with extension '.$extension'", ({
|
|
166
|
+
extension
|
|
167
|
+
}) => {
|
|
168
|
+
it.each`
|
|
169
|
+
content
|
|
170
|
+
${'abc:def'}
|
|
171
|
+
${false}
|
|
172
|
+
${true}
|
|
173
|
+
${42}
|
|
174
|
+
${null}
|
|
175
|
+
${undefined}
|
|
176
|
+
`("when content is '$content'", ({
|
|
177
|
+
content
|
|
178
|
+
}) => {
|
|
179
|
+
mockReadFileSync.mockReturnValueOnce(Buffer.from('data'));
|
|
180
|
+
mockYaml.mockReturnValueOnce(content);
|
|
181
|
+
expect(() => {
|
|
182
|
+
load_env(`hello.${extension}`);
|
|
183
|
+
}).toThrow();
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
describe('edge cases', () => {
|
|
188
|
+
it('throws when no files are provided', () => {
|
|
189
|
+
expect(() => load_env([])).toThrow('No env file specified');
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
describe('mixed format (yaml + dotenv)', () => {
|
|
193
|
+
it('merges yaml and dotenv files together', () => {
|
|
194
|
+
// First file is yaml
|
|
195
|
+
mockReadFileSync.mockReturnValueOnce(Buffer.from('YAML_VAR: from_yaml')).mockReturnValueOnce('DOTENV_VAR=from_dotenv');
|
|
196
|
+
mockYaml.mockReturnValueOnce({
|
|
197
|
+
YAML_VAR: 'from_yaml'
|
|
198
|
+
});
|
|
199
|
+
mockParse.mockReturnValueOnce({
|
|
200
|
+
DOTENV_VAR: 'from_dotenv'
|
|
201
|
+
});
|
|
202
|
+
const result = load_env(['config.yaml', '.env']);
|
|
203
|
+
expect(mockYaml).toHaveBeenCalled();
|
|
204
|
+
expect(mockParse).toHaveBeenCalled();
|
|
205
|
+
expect(result).toEqual({
|
|
206
|
+
YAML_VAR: 'from_yaml',
|
|
207
|
+
DOTENV_VAR: 'from_dotenv'
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
it('dotenv file in mixed mode still gets expanded', () => {
|
|
211
|
+
mockReadFileSync.mockReturnValueOnce(Buffer.from('BASE: https://api.com')).mockReturnValueOnce('URL=$BASE/v1');
|
|
212
|
+
mockYaml.mockReturnValueOnce({
|
|
213
|
+
BASE: 'https://api.com'
|
|
214
|
+
});
|
|
215
|
+
mockParse.mockReturnValueOnce({
|
|
216
|
+
URL: '$BASE/v1'
|
|
217
|
+
});
|
|
218
|
+
// In mixed mode, expand is called per-dotenv-file
|
|
219
|
+
mockExpand.mockReturnValueOnce({
|
|
220
|
+
parsed: {
|
|
221
|
+
URL: 'https://api.com/v1'
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
const result = load_env(['config.yaml', '.env']);
|
|
225
|
+
expect(result).toEqual({
|
|
226
|
+
BASE: 'https://api.com',
|
|
227
|
+
URL: 'https://api.com/v1'
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
it('last file wins for conflicting keys in mixed mode', () => {
|
|
231
|
+
mockReadFileSync.mockReturnValueOnce(Buffer.from('SHARED: from_yaml')).mockReturnValueOnce('SHARED=from_dotenv');
|
|
232
|
+
mockYaml.mockReturnValueOnce({
|
|
233
|
+
SHARED: 'from_yaml'
|
|
234
|
+
});
|
|
235
|
+
mockParse.mockReturnValueOnce({
|
|
236
|
+
SHARED: 'from_dotenv'
|
|
237
|
+
});
|
|
238
|
+
const result = load_env(['config.yaml', '.env']);
|
|
239
|
+
expect(result.SHARED).toBe('from_dotenv');
|
|
240
|
+
});
|
|
241
|
+
it('handles dotenv first, then yaml', () => {
|
|
242
|
+
mockReadFileSync.mockReturnValueOnce('DOTENV_VAR=first').mockReturnValueOnce(Buffer.from('YAML_VAR: second'));
|
|
243
|
+
mockParse.mockReturnValueOnce({
|
|
244
|
+
DOTENV_VAR: 'first'
|
|
245
|
+
});
|
|
246
|
+
mockYaml.mockReturnValueOnce({
|
|
247
|
+
YAML_VAR: 'second'
|
|
248
|
+
});
|
|
249
|
+
const result = load_env(['.env', 'config.yml']);
|
|
250
|
+
expect(result).toEqual({
|
|
251
|
+
DOTENV_VAR: 'first',
|
|
252
|
+
YAML_VAR: 'second'
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
//# sourceMappingURL=load-env.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import load_env from './load-env';
|
|
4
|
+
import render_env from './render-env';
|
|
5
|
+
import write_env from './write-env';
|
|
6
|
+
import flatten from './flatten';
|
|
7
|
+
import resolve_env from './resolve-env';
|
|
8
|
+
import { validate_env } from './validate-env';
|
|
9
|
+
/**
|
|
10
|
+
* Main build-time pipeline:
|
|
11
|
+
* load → resolve (on_env hook) → validate (schema) → flatten → render → write
|
|
12
|
+
*
|
|
13
|
+
* @param project_root Root of the React Native project
|
|
14
|
+
* @param lib_root Root of the react-native-config-ultimate install
|
|
15
|
+
* @param env_file Path(s) to env file(s). Multiple files are merged (last wins).
|
|
16
|
+
* @param rc Optional RC config from `.rncurc.js`
|
|
17
|
+
*/
|
|
18
|
+
export default async function main(project_root, lib_root, env_file, rc) {
|
|
19
|
+
const env = await resolve_env(load_env(env_file), rc);
|
|
20
|
+
if (rc?.schema) {
|
|
21
|
+
validate_env(env, rc.schema);
|
|
22
|
+
}
|
|
23
|
+
const flat = {
|
|
24
|
+
ios: flatten(env, 'ios'),
|
|
25
|
+
android: flatten(env, 'android'),
|
|
26
|
+
web: flatten(env, 'web')
|
|
27
|
+
};
|
|
28
|
+
const files_to_write = render_env(project_root, lib_root, flat, rc);
|
|
29
|
+
write_env(files_to_write);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["load_env","render_env","write_env","flatten","resolve_env","validate_env","main","project_root","lib_root","env_file","rc","env","schema","flat","ios","android","web","files_to_write"],"sourceRoot":"../../src","sources":["main.ts"],"mappings":";;AAAA,OAAOA,QAAQ,MAAM,YAAY;AACjC,OAAOC,UAAU,MAAM,cAAc;AACrC,OAAOC,SAAS,MAAM,aAAa;AACnC,OAAOC,OAAO,MAAM,WAAW;AAC/B,OAAOC,WAAW,MAAM,eAAe;AACvC,SAASC,YAAY,QAAQ,gBAAgB;AAK7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,eAAeC,IAAIA,CAChCC,YAAoB,EACpBC,QAAgB,EAChBC,QAA2B,EAC3BC,EAAO,EACQ;EACf,MAAMC,GAAY,GAAG,MAAMP,WAAW,CAACJ,QAAQ,CAACS,QAAQ,CAAC,EAAEC,EAAE,CAAC;EAE9D,IAAIA,EAAE,EAAEE,MAAM,EAAE;IACdP,YAAY,CAACM,GAAG,EAAED,EAAE,CAACE,MAAM,CAAC;EAC9B;EAEA,MAAMC,IAAI,GAAG;IACXC,GAAG,EAAEX,OAAO,CAACQ,GAAG,EAAe,KAAK,CAAC;IACrCI,OAAO,EAAEZ,OAAO,CAACQ,GAAG,EAAe,SAAS,CAAC;IAC7CK,GAAG,EAAEb,OAAO,CAACQ,GAAG,EAAe,KAAK;EACtC,CAAC;EACD,MAAMM,cAAc,GAAGhB,UAAU,CAACM,YAAY,EAAEC,QAAQ,EAAEK,IAAI,EAAEH,EAAE,CAAC;EACnER,SAAS,CAACe,cAAc,CAAC;AAC3B","ignoreList":[]}
|
|
@@ -0,0 +1,224 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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":[]}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import handlebars from 'handlebars';
|
|
6
|
+
const code_file_name = 'ConfigValues';
|
|
7
|
+
const config_file_name = 'rncu';
|
|
8
|
+
|
|
9
|
+
// ─── Handlebars helpers (registered once at module load, not per-call) ────────
|
|
10
|
+
|
|
11
|
+
function is_string(value) {
|
|
12
|
+
return typeof value === 'string';
|
|
13
|
+
}
|
|
14
|
+
function is_number(value) {
|
|
15
|
+
return typeof value === 'number';
|
|
16
|
+
}
|
|
17
|
+
function is_boolean(value) {
|
|
18
|
+
return typeof value === 'boolean';
|
|
19
|
+
}
|
|
20
|
+
function escape(value) {
|
|
21
|
+
if (is_string(value)) {
|
|
22
|
+
return value.replace(/\\/gm, '\\\\').replace(/"/gm, '\\"').replace(/\n/gm, '\\n').replace(/\r/gm, '\\r');
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
function xcconfig_format(value) {
|
|
27
|
+
if (is_string(value)) {
|
|
28
|
+
return value.replace(/\/\//gm, '/$()/');
|
|
29
|
+
}
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
function to_json(value) {
|
|
33
|
+
return JSON.stringify(value, null, 2);
|
|
34
|
+
}
|
|
35
|
+
handlebars.registerHelper('isBoolean', is_boolean);
|
|
36
|
+
handlebars.registerHelper('isString', is_string);
|
|
37
|
+
handlebars.registerHelper('isNumber', is_number);
|
|
38
|
+
handlebars.registerHelper('escape', escape);
|
|
39
|
+
handlebars.registerHelper('xcconfigFormat', xcconfig_format);
|
|
40
|
+
handlebars.registerHelper('toJSON', to_json);
|
|
41
|
+
|
|
42
|
+
// ─── Template cache (compiled once per template name, not per build) ──────────
|
|
43
|
+
|
|
44
|
+
const template_cache = new Map();
|
|
45
|
+
function get_compiled_template(template_name) {
|
|
46
|
+
const cached = template_cache.get(template_name);
|
|
47
|
+
if (cached) return cached;
|
|
48
|
+
const template_path = path.join(__dirname, 'templates', `${template_name}.handlebars`);
|
|
49
|
+
const compiled = handlebars.compile(fs.readFileSync(template_path, 'utf8'));
|
|
50
|
+
template_cache.set(template_name, compiled);
|
|
51
|
+
return compiled;
|
|
52
|
+
}
|
|
53
|
+
function render_template(template_name, data) {
|
|
54
|
+
return get_compiled_template(template_name)(data);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
58
|
+
|
|
59
|
+
export default function render_env(project_root, lib_root, env, rc) {
|
|
60
|
+
const {
|
|
61
|
+
ios,
|
|
62
|
+
android,
|
|
63
|
+
web
|
|
64
|
+
} = env;
|
|
65
|
+
const map = {
|
|
66
|
+
[path.join(lib_root, 'index.d.ts')]: render_template('index.d.ts', ios),
|
|
67
|
+
[path.join(lib_root, 'index.web.js')]: render_template('index.web.js', web),
|
|
68
|
+
[path.join(lib_root, 'ios', `${code_file_name}.h`)]: render_template('ConfigValues.h', ios),
|
|
69
|
+
[path.join(lib_root, 'android', 'rncu.yaml')]: render_template('rncu.yaml', android)
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
// Only write xcconfig if the project has an ios folder.
|
|
73
|
+
// All RN apps have it; some react-native-web apps may not.
|
|
74
|
+
if (fs.existsSync(path.join(project_root, 'ios'))) {
|
|
75
|
+
map[path.join(project_root, 'ios', `${config_file_name}.xcconfig`)] = render_template('rncu.xcconfig', ios);
|
|
76
|
+
}
|
|
77
|
+
const js_override = rc && typeof rc.js_override === 'boolean' && rc.js_override;
|
|
78
|
+
map[path.join(lib_root, 'override.js')] = render_template('override.js', {
|
|
79
|
+
ios: js_override ? ios : {},
|
|
80
|
+
android: js_override ? android : {}
|
|
81
|
+
});
|
|
82
|
+
return map;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=render-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["path","fs","handlebars","code_file_name","config_file_name","is_string","value","is_number","is_boolean","escape","replace","xcconfig_format","to_json","JSON","stringify","registerHelper","template_cache","Map","get_compiled_template","template_name","cached","get","template_path","join","__dirname","compiled","compile","readFileSync","set","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":[]}
|