react-native-config-ultimate 0.0.7 → 0.1.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/gradle.properties +6 -0
- package/android/rnuc.yaml +1 -0
- package/lib/commonjs/NativeUltimateConfig.js +20 -0
- package/lib/commonjs/NativeUltimateConfig.js.map +1 -0
- package/lib/commonjs/bin.spec.js +50 -0
- package/lib/commonjs/bin.spec.js.map +1 -0
- package/lib/commonjs/cli.js +143 -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 +49 -0
- package/lib/module/bin.spec.js.map +1 -0
- package/lib/module/cli.js +136 -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 +84 -52
- package/src/NativeUltimateConfig.ts +1 -2
- package/src/cli.ts +158 -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,325 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _validateEnv = require("./validate-env");
|
|
4
|
+
describe('validate-env', () => {
|
|
5
|
+
describe('required fields', () => {
|
|
6
|
+
it('throws when a required var is missing', () => {
|
|
7
|
+
const schema = {
|
|
8
|
+
API_KEY: {
|
|
9
|
+
type: 'string',
|
|
10
|
+
required: true
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
expect(() => (0, _validateEnv.validate_env)({}, schema)).toThrow('Missing required env var: API_KEY');
|
|
14
|
+
});
|
|
15
|
+
it('throws when a required var is an empty string', () => {
|
|
16
|
+
const schema = {
|
|
17
|
+
API_KEY: {
|
|
18
|
+
type: 'string',
|
|
19
|
+
required: true
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
23
|
+
API_KEY: ''
|
|
24
|
+
}, schema)).toThrow('Missing required env var: API_KEY');
|
|
25
|
+
});
|
|
26
|
+
it('throws when a required var is null', () => {
|
|
27
|
+
const schema = {
|
|
28
|
+
API_KEY: {
|
|
29
|
+
type: 'string',
|
|
30
|
+
required: true
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
34
|
+
API_KEY: null
|
|
35
|
+
}, schema)).toThrow('Missing required env var: API_KEY');
|
|
36
|
+
});
|
|
37
|
+
it('does not throw when a required var is present', () => {
|
|
38
|
+
const schema = {
|
|
39
|
+
API_KEY: {
|
|
40
|
+
type: 'string',
|
|
41
|
+
required: true
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
45
|
+
API_KEY: 'my-key'
|
|
46
|
+
}, schema)).not.toThrow();
|
|
47
|
+
});
|
|
48
|
+
it('does not throw when an optional var is missing', () => {
|
|
49
|
+
const schema = {
|
|
50
|
+
DEBUG: {
|
|
51
|
+
type: 'boolean',
|
|
52
|
+
required: false
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
expect(() => (0, _validateEnv.validate_env)({}, schema)).not.toThrow();
|
|
56
|
+
});
|
|
57
|
+
it('does not throw when required is not specified and var is missing', () => {
|
|
58
|
+
const schema = {
|
|
59
|
+
DEBUG: {
|
|
60
|
+
type: 'boolean'
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
expect(() => (0, _validateEnv.validate_env)({}, schema)).not.toThrow();
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
describe('type validation', () => {
|
|
67
|
+
describe('number', () => {
|
|
68
|
+
it('accepts valid number strings', () => {
|
|
69
|
+
const schema = {
|
|
70
|
+
TIMEOUT: {
|
|
71
|
+
type: 'number'
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
75
|
+
TIMEOUT: '3000'
|
|
76
|
+
}, schema)).not.toThrow();
|
|
77
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
78
|
+
TIMEOUT: '0'
|
|
79
|
+
}, schema)).not.toThrow();
|
|
80
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
81
|
+
TIMEOUT: '-1'
|
|
82
|
+
}, schema)).not.toThrow();
|
|
83
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
84
|
+
TIMEOUT: '3.14'
|
|
85
|
+
}, schema)).not.toThrow();
|
|
86
|
+
});
|
|
87
|
+
it('throws for non-numeric strings', () => {
|
|
88
|
+
const schema = {
|
|
89
|
+
TIMEOUT: {
|
|
90
|
+
type: 'number'
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
94
|
+
TIMEOUT: 'fast'
|
|
95
|
+
}, schema)).toThrow('TIMEOUT must be a number, got "fast"');
|
|
96
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
97
|
+
TIMEOUT: 'abc'
|
|
98
|
+
}, schema)).toThrow('TIMEOUT must be a number');
|
|
99
|
+
});
|
|
100
|
+
it('accepts actual number values', () => {
|
|
101
|
+
const schema = {
|
|
102
|
+
TIMEOUT: {
|
|
103
|
+
type: 'number'
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
107
|
+
TIMEOUT: 3000
|
|
108
|
+
}, schema)).not.toThrow();
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
describe('boolean', () => {
|
|
112
|
+
it('accepts valid boolean strings', () => {
|
|
113
|
+
const schema = {
|
|
114
|
+
DEBUG: {
|
|
115
|
+
type: 'boolean'
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
for (const v of ['true', 'false', '1', '0', 'TRUE', 'FALSE']) {
|
|
119
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
120
|
+
DEBUG: v
|
|
121
|
+
}, schema)).not.toThrow();
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
it('throws for invalid boolean strings', () => {
|
|
125
|
+
const schema = {
|
|
126
|
+
DEBUG: {
|
|
127
|
+
type: 'boolean'
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
131
|
+
DEBUG: 'yes'
|
|
132
|
+
}, schema)).toThrow('DEBUG must be a boolean (true/false/1/0), got "yes"');
|
|
133
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
134
|
+
DEBUG: 'enabled'
|
|
135
|
+
}, schema)).toThrow('DEBUG must be a boolean');
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
describe('string', () => {
|
|
139
|
+
it('accepts any non-empty value as string', () => {
|
|
140
|
+
const schema = {
|
|
141
|
+
NAME: {
|
|
142
|
+
type: 'string'
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
146
|
+
NAME: 'hello'
|
|
147
|
+
}, schema)).not.toThrow();
|
|
148
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
149
|
+
NAME: '123'
|
|
150
|
+
}, schema)).not.toThrow();
|
|
151
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
152
|
+
NAME: 'true'
|
|
153
|
+
}, schema)).not.toThrow();
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
describe('pattern validation', () => {
|
|
158
|
+
it('accepts values matching the pattern', () => {
|
|
159
|
+
const schema = {
|
|
160
|
+
ENV: {
|
|
161
|
+
type: 'string',
|
|
162
|
+
pattern: '^(dev|staging|prod)$'
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
166
|
+
ENV: 'dev'
|
|
167
|
+
}, schema)).not.toThrow();
|
|
168
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
169
|
+
ENV: 'staging'
|
|
170
|
+
}, schema)).not.toThrow();
|
|
171
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
172
|
+
ENV: 'prod'
|
|
173
|
+
}, schema)).not.toThrow();
|
|
174
|
+
});
|
|
175
|
+
it('throws for values not matching the pattern', () => {
|
|
176
|
+
const schema = {
|
|
177
|
+
ENV: {
|
|
178
|
+
type: 'string',
|
|
179
|
+
pattern: '^(dev|staging|prod)$'
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
183
|
+
ENV: 'production'
|
|
184
|
+
}, schema)).toThrow('ENV does not match pattern /^(dev|staging|prod)$/, got "production"');
|
|
185
|
+
});
|
|
186
|
+
it('pattern validation is skipped for missing optional vars', () => {
|
|
187
|
+
const schema = {
|
|
188
|
+
ENV: {
|
|
189
|
+
type: 'string',
|
|
190
|
+
pattern: '^(dev|staging|prod)$'
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
expect(() => (0, _validateEnv.validate_env)({}, schema)).not.toThrow();
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
describe('multiple errors', () => {
|
|
197
|
+
it('reports all validation errors at once, not just the first', () => {
|
|
198
|
+
const schema = {
|
|
199
|
+
API_KEY: {
|
|
200
|
+
type: 'string',
|
|
201
|
+
required: true
|
|
202
|
+
},
|
|
203
|
+
TIMEOUT: {
|
|
204
|
+
type: 'number',
|
|
205
|
+
required: true
|
|
206
|
+
},
|
|
207
|
+
ENV: {
|
|
208
|
+
type: 'string',
|
|
209
|
+
pattern: '^(dev|staging|prod)$'
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
let error;
|
|
213
|
+
try {
|
|
214
|
+
(0, _validateEnv.validate_env)({
|
|
215
|
+
TIMEOUT: 'fast',
|
|
216
|
+
ENV: 'production'
|
|
217
|
+
}, schema);
|
|
218
|
+
} catch (e) {
|
|
219
|
+
error = e;
|
|
220
|
+
}
|
|
221
|
+
expect(error).toBeDefined();
|
|
222
|
+
expect(error?.message).toContain('Missing required env var: API_KEY');
|
|
223
|
+
expect(error?.message).toContain('TIMEOUT must be a number');
|
|
224
|
+
expect(error?.message).toContain('ENV does not match pattern');
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
describe('does not throw for valid env', () => {
|
|
228
|
+
it('passes a complete valid env without error', () => {
|
|
229
|
+
const schema = {
|
|
230
|
+
API_KEY: {
|
|
231
|
+
type: 'string',
|
|
232
|
+
required: true
|
|
233
|
+
},
|
|
234
|
+
TIMEOUT_MS: {
|
|
235
|
+
type: 'number',
|
|
236
|
+
required: true
|
|
237
|
+
},
|
|
238
|
+
DEBUG: {
|
|
239
|
+
type: 'boolean',
|
|
240
|
+
required: false
|
|
241
|
+
},
|
|
242
|
+
ENV_NAME: {
|
|
243
|
+
type: 'string',
|
|
244
|
+
required: true,
|
|
245
|
+
pattern: '^(dev|staging|prod)$'
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
249
|
+
API_KEY: 'secret-key',
|
|
250
|
+
TIMEOUT_MS: '5000',
|
|
251
|
+
ENV_NAME: 'staging'
|
|
252
|
+
// DEBUG intentionally omitted (optional)
|
|
253
|
+
}, schema)).not.toThrow();
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
describe('env key name validation', () => {
|
|
257
|
+
it('throws for keys with invalid characters', () => {
|
|
258
|
+
const schema = {};
|
|
259
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
260
|
+
'invalid-key': 'value'
|
|
261
|
+
}, schema)).toThrow('Invalid env key name: "invalid-key"');
|
|
262
|
+
});
|
|
263
|
+
it('throws for keys starting with a number', () => {
|
|
264
|
+
const schema = {};
|
|
265
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
266
|
+
'123KEY': 'value'
|
|
267
|
+
}, schema)).toThrow('Invalid env key name: "123KEY"');
|
|
268
|
+
});
|
|
269
|
+
it('throws for keys with spaces', () => {
|
|
270
|
+
const schema = {};
|
|
271
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
272
|
+
'MY KEY': 'value'
|
|
273
|
+
}, schema)).toThrow('Invalid env key name: "MY KEY"');
|
|
274
|
+
});
|
|
275
|
+
it('accepts valid key names starting with underscore', () => {
|
|
276
|
+
const schema = {};
|
|
277
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
278
|
+
_PRIVATE_KEY: 'value'
|
|
279
|
+
}, schema)).not.toThrow();
|
|
280
|
+
});
|
|
281
|
+
it('accepts valid key names with numbers', () => {
|
|
282
|
+
const schema = {};
|
|
283
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
284
|
+
API_V2_URL: 'value'
|
|
285
|
+
}, schema)).not.toThrow();
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
describe('invalid regex patterns', () => {
|
|
289
|
+
it('reports error for invalid regex in schema', () => {
|
|
290
|
+
const schema = {
|
|
291
|
+
ENV: {
|
|
292
|
+
type: 'string',
|
|
293
|
+
pattern: '[invalid('
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
expect(() => (0, _validateEnv.validate_env)({
|
|
297
|
+
ENV: 'test'
|
|
298
|
+
}, schema)).toThrow('invalid regex pattern /[invalid(/');
|
|
299
|
+
});
|
|
300
|
+
it('reports multiple invalid regex patterns', () => {
|
|
301
|
+
const schema = {
|
|
302
|
+
ENV1: {
|
|
303
|
+
type: 'string',
|
|
304
|
+
pattern: '[bad1('
|
|
305
|
+
},
|
|
306
|
+
ENV2: {
|
|
307
|
+
type: 'string',
|
|
308
|
+
pattern: '[bad2('
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
let error;
|
|
312
|
+
try {
|
|
313
|
+
(0, _validateEnv.validate_env)({
|
|
314
|
+
ENV1: 'a',
|
|
315
|
+
ENV2: 'b'
|
|
316
|
+
}, schema);
|
|
317
|
+
} catch (e) {
|
|
318
|
+
error = e;
|
|
319
|
+
}
|
|
320
|
+
expect(error?.message).toContain('ENV1: invalid regex pattern');
|
|
321
|
+
expect(error?.message).toContain('ENV2: invalid regex pattern');
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
//# sourceMappingURL=validate-env.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_validateEnv","require","describe","it","schema","API_KEY","type","required","expect","validate_env","toThrow","not","DEBUG","TIMEOUT","v","NAME","ENV","pattern","error","e","toBeDefined","message","toContain","TIMEOUT_MS","ENV_NAME","_PRIVATE_KEY","API_V2_URL","ENV1","ENV2"],"sourceRoot":"../../src","sources":["validate-env.spec.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = write_env;
|
|
7
|
+
var fs = _interopRequireWildcard(require("fs"));
|
|
8
|
+
var os = _interopRequireWildcard(require("os"));
|
|
9
|
+
var path = _interopRequireWildcard(require("path"));
|
|
10
|
+
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); }
|
|
11
|
+
/**
|
|
12
|
+
* Atomically write all generated files.
|
|
13
|
+
*
|
|
14
|
+
* Strategy: write each file to a temp path first, then rename (atomic on POSIX).
|
|
15
|
+
* If any write fails, we abort before committing any renames so the project
|
|
16
|
+
* is never left in a partially-written state.
|
|
17
|
+
*
|
|
18
|
+
* On Windows, `fs.renameSync` across drives may fail — in that case we fall
|
|
19
|
+
* back to a direct `writeFileSync` (best-effort, still better than nothing).
|
|
20
|
+
*/
|
|
21
|
+
function write_env(files) {
|
|
22
|
+
const tmp_dir = os.tmpdir();
|
|
23
|
+
// Phase 1: write all content to temp files — if anything fails, no real files are touched.
|
|
24
|
+
const pending = [];
|
|
25
|
+
try {
|
|
26
|
+
for (const dest of Object.keys(files)) {
|
|
27
|
+
// Ensure the destination directory exists (handles first-run and hoisted workspaces).
|
|
28
|
+
fs.mkdirSync(path.dirname(dest), {
|
|
29
|
+
recursive: true
|
|
30
|
+
});
|
|
31
|
+
const tmp = path.join(tmp_dir, `rncu_${Date.now()}_${Math.random().toString(36).slice(2)}`);
|
|
32
|
+
fs.writeFileSync(tmp, files[dest], 'utf8');
|
|
33
|
+
pending.push({
|
|
34
|
+
tmp,
|
|
35
|
+
dest
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
} catch (err) {
|
|
39
|
+
// Clean up any temp files we already created.
|
|
40
|
+
for (const {
|
|
41
|
+
tmp
|
|
42
|
+
} of pending) {
|
|
43
|
+
try {
|
|
44
|
+
fs.unlinkSync(tmp);
|
|
45
|
+
} catch {
|
|
46
|
+
/* ignore */
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
throw new Error(`[rncu] Failed to prepare output files: ${err instanceof Error ? err.message : String(err)}`);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Phase 2: atomically rename temp → dest.
|
|
53
|
+
// We collect errors and rethrow at the end so the caller gets a clear message.
|
|
54
|
+
const rename_errors = [];
|
|
55
|
+
for (const {
|
|
56
|
+
tmp,
|
|
57
|
+
dest
|
|
58
|
+
} of pending) {
|
|
59
|
+
try {
|
|
60
|
+
fs.renameSync(tmp, dest);
|
|
61
|
+
} catch {
|
|
62
|
+
// Cross-device rename (e.g. Windows different drives) — fall back to copy+delete.
|
|
63
|
+
try {
|
|
64
|
+
fs.copyFileSync(tmp, dest);
|
|
65
|
+
fs.unlinkSync(tmp);
|
|
66
|
+
} catch (copy_err) {
|
|
67
|
+
rename_errors.push(`${dest}: ${copy_err instanceof Error ? copy_err.message : String(copy_err)}`);
|
|
68
|
+
try {
|
|
69
|
+
fs.unlinkSync(tmp);
|
|
70
|
+
} catch {
|
|
71
|
+
/* ignore */
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (rename_errors.length > 0) {
|
|
77
|
+
throw new Error(`[rncu] Failed to write output files:\n` + rename_errors.map(e => ` • ${e}`).join('\n'));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=write-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["fs","_interopRequireWildcard","require","os","path","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","write_env","files","tmp_dir","tmpdir","pending","dest","keys","mkdirSync","dirname","recursive","tmp","join","Date","now","Math","random","toString","slice","writeFileSync","push","err","unlinkSync","Error","message","String","rename_errors","renameSync","copyFileSync","copy_err","length","map"],"sourceRoot":"../../src","sources":["write-env.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// Mocks must be declared before the module is required.
|
|
4
|
+
const mockWriteFileSync = jest.fn();
|
|
5
|
+
const mockRenameSync = jest.fn();
|
|
6
|
+
const mockUnlinkSync = jest.fn();
|
|
7
|
+
const mockCopyFileSync = jest.fn();
|
|
8
|
+
const mockMkdirSync = jest.fn(); // needed since write-env creates dest dirs
|
|
9
|
+
|
|
10
|
+
jest.mock('fs', () => ({
|
|
11
|
+
writeFileSync: (...args) => mockWriteFileSync(...args),
|
|
12
|
+
renameSync: (...args) => mockRenameSync(...args),
|
|
13
|
+
unlinkSync: (...args) => mockUnlinkSync(...args),
|
|
14
|
+
copyFileSync: (...args) => mockCopyFileSync(...args),
|
|
15
|
+
mkdirSync: (...args) => mockMkdirSync(...args)
|
|
16
|
+
}));
|
|
17
|
+
jest.mock('os', () => ({
|
|
18
|
+
tmpdir: () => '/tmp'
|
|
19
|
+
}));
|
|
20
|
+
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
22
|
+
const write_env = require('./write-env').default;
|
|
23
|
+
|
|
24
|
+
// ─── helpers ─────────────────────────────────────────────────────────────────
|
|
25
|
+
|
|
26
|
+
/** Returns the temp file path used for a given destination. */
|
|
27
|
+
function tmp_for(dest) {
|
|
28
|
+
const rename_call = mockRenameSync.mock.calls.find(([, d]) => d === dest);
|
|
29
|
+
return rename_call?.[0];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// ─── tests ───────────────────────────────────────────────────────────────────
|
|
33
|
+
|
|
34
|
+
describe('write-env', () => {
|
|
35
|
+
beforeEach(() => {
|
|
36
|
+
mockWriteFileSync.mockReset();
|
|
37
|
+
mockRenameSync.mockReset();
|
|
38
|
+
mockUnlinkSync.mockReset();
|
|
39
|
+
mockCopyFileSync.mockReset();
|
|
40
|
+
mockMkdirSync.mockReset();
|
|
41
|
+
});
|
|
42
|
+
it('writes content to a temp file then renames to destination (atomic write)', () => {
|
|
43
|
+
write_env({
|
|
44
|
+
hello: 'world'
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// Phase 1: content written to a temp path under /tmp
|
|
48
|
+
expect(mockWriteFileSync).toHaveBeenCalledTimes(1);
|
|
49
|
+
const [tmp_path, content, encoding] = mockWriteFileSync.mock.calls[0];
|
|
50
|
+
expect(tmp_path).toMatch(/^\/tmp\/rncu_/);
|
|
51
|
+
expect(content).toBe('world');
|
|
52
|
+
expect(encoding).toBe('utf8');
|
|
53
|
+
|
|
54
|
+
// Phase 2: temp renamed to final destination (atomic)
|
|
55
|
+
expect(mockRenameSync).toHaveBeenCalledWith(tmp_path, 'hello');
|
|
56
|
+
});
|
|
57
|
+
it('writes multiple files atomically', () => {
|
|
58
|
+
write_env({
|
|
59
|
+
hello: 'world',
|
|
60
|
+
hey: 'you'
|
|
61
|
+
});
|
|
62
|
+
expect(mockWriteFileSync).toHaveBeenCalledTimes(2);
|
|
63
|
+
expect(mockRenameSync).toHaveBeenCalledTimes(2);
|
|
64
|
+
|
|
65
|
+
// Each dest should have been renamed from a unique temp path
|
|
66
|
+
const tmp_hello = tmp_for('hello');
|
|
67
|
+
const tmp_hey = tmp_for('hey');
|
|
68
|
+
expect(tmp_hello).toBeDefined();
|
|
69
|
+
expect(tmp_hey).toBeDefined();
|
|
70
|
+
expect(tmp_hello).not.toBe(tmp_hey);
|
|
71
|
+
});
|
|
72
|
+
it('falls back to copyFileSync + unlinkSync when renameSync fails (cross-device)', () => {
|
|
73
|
+
// Simulate cross-device rename error (e.g. /tmp on different device)
|
|
74
|
+
mockRenameSync.mockImplementation(() => {
|
|
75
|
+
throw new Error('EXDEV');
|
|
76
|
+
});
|
|
77
|
+
write_env({
|
|
78
|
+
hello: 'world'
|
|
79
|
+
});
|
|
80
|
+
expect(mockCopyFileSync).toHaveBeenCalledWith(expect.stringMatching(/^\/tmp\/rncu_/), 'hello');
|
|
81
|
+
expect(mockUnlinkSync).toHaveBeenCalled();
|
|
82
|
+
});
|
|
83
|
+
it('throws a descriptive error if copyFileSync also fails', () => {
|
|
84
|
+
mockRenameSync.mockImplementation(() => {
|
|
85
|
+
throw new Error('EXDEV');
|
|
86
|
+
});
|
|
87
|
+
mockCopyFileSync.mockImplementation(() => {
|
|
88
|
+
throw new Error('EACCES: permission denied');
|
|
89
|
+
});
|
|
90
|
+
expect(() => write_env({
|
|
91
|
+
hello: 'world'
|
|
92
|
+
})).toThrow(/Failed to write output files/);
|
|
93
|
+
expect(() => write_env({
|
|
94
|
+
hello: 'world'
|
|
95
|
+
})).toThrow('hello');
|
|
96
|
+
});
|
|
97
|
+
it('cleans up temp files when Phase 1 write fails', () => {
|
|
98
|
+
// First write succeeds, second fails mid-write
|
|
99
|
+
mockWriteFileSync.mockImplementationOnce(() => {
|
|
100
|
+
/* success */
|
|
101
|
+
}).mockImplementationOnce(() => {
|
|
102
|
+
throw new Error('ENOSPC: no space left');
|
|
103
|
+
});
|
|
104
|
+
expect(() => write_env({
|
|
105
|
+
hello: 'world',
|
|
106
|
+
hey: 'you'
|
|
107
|
+
})).toThrow(/Failed to prepare output files/);
|
|
108
|
+
|
|
109
|
+
// The first temp file should have been cleaned up
|
|
110
|
+
expect(mockUnlinkSync).toHaveBeenCalledTimes(1);
|
|
111
|
+
// No renames should have happened (no real files touched)
|
|
112
|
+
expect(mockRenameSync).not.toHaveBeenCalled();
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=write-env.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mockWriteFileSync","jest","fn","mockRenameSync","mockUnlinkSync","mockCopyFileSync","mockMkdirSync","mock","writeFileSync","args","renameSync","unlinkSync","copyFileSync","mkdirSync","tmpdir","write_env","require","default","tmp_for","dest","rename_call","calls","find","d","describe","beforeEach","mockReset","it","hello","expect","toHaveBeenCalledTimes","tmp_path","content","encoding","toMatch","toBe","toHaveBeenCalledWith","hey","tmp_hello","tmp_hey","toBeDefined","not","mockImplementation","Error","stringMatching","toHaveBeenCalled","toThrow","mockImplementationOnce"],"sourceRoot":"../../src","sources":["write-env.spec.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* TurboModule spec for react-native-config-ultimate
|
|
5
|
+
* This file is read by React Native Codegen to generate native bindings.
|
|
6
|
+
* Do not rename or move this file - Codegen relies on the "Native" prefix.
|
|
7
|
+
*
|
|
8
|
+
* NOTE: We use getAll(): string instead of getConstants(): {} because:
|
|
9
|
+
* - Codegen requires getConstants() to have a concrete return type with named fields
|
|
10
|
+
* - Config keys are dynamic (generated from .env at build time), so a fixed type is impossible
|
|
11
|
+
* - getAll() returns all config values as a JSON-encoded string, which Codegen handles perfectly
|
|
12
|
+
* - This gives us a working TurboModule binding for New Architecture
|
|
13
|
+
*/
|
|
14
|
+
import { TurboModuleRegistry } from 'react-native';
|
|
15
|
+
export default TurboModuleRegistry.get('UltimateConfig');
|
|
16
|
+
//# sourceMappingURL=NativeUltimateConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","get"],"sourceRoot":"../../src","sources":["NativeUltimateConfig.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,mBAAmB,QAA0B,cAAc;AAQpE,eAAeA,mBAAmB,CAACC,GAAG,CAAO,gBAAgB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import cp from 'child_process';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
7
|
+
const {
|
|
8
|
+
files_to_assert
|
|
9
|
+
} = require('./main.spec');
|
|
10
|
+
|
|
11
|
+
// TODO: Re-enable after fixing integration test paths for bob build output
|
|
12
|
+
describe.skip.each`
|
|
13
|
+
extension | env_test_content
|
|
14
|
+
${''} | ${'hello=world'}
|
|
15
|
+
${'.yaml'} | ${'hello: world'}
|
|
16
|
+
${'.yml'} | ${'hello: world'}
|
|
17
|
+
`('test codegen', ({
|
|
18
|
+
extension,
|
|
19
|
+
env_test_content
|
|
20
|
+
}) => {
|
|
21
|
+
let project_root;
|
|
22
|
+
beforeAll(() => {
|
|
23
|
+
project_root = path.join(process.cwd(), fs.mkdtempSync('rncu-jest'));
|
|
24
|
+
for (const file_path of files_to_assert) {
|
|
25
|
+
const {
|
|
26
|
+
dir
|
|
27
|
+
} = path.parse(file_path);
|
|
28
|
+
const folder = path.join(project_root, dir);
|
|
29
|
+
fs.mkdirSync(folder, {
|
|
30
|
+
recursive: true
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
afterAll(() => {
|
|
35
|
+
fs.rmSync(project_root, {
|
|
36
|
+
recursive: true,
|
|
37
|
+
force: true
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
it.each(files_to_assert.map(k => [k]))('creates file at path %s', file_path => {
|
|
41
|
+
const env_file_path = path.join(project_root, `.env${extension}`);
|
|
42
|
+
fs.writeFileSync(env_file_path, env_test_content);
|
|
43
|
+
cp.execFileSync('node', [path.join(process.cwd(), 'lib/commonjs/cli.js'), env_file_path], {
|
|
44
|
+
cwd: project_root
|
|
45
|
+
});
|
|
46
|
+
expect(fs.existsSync(path.join(project_root, file_path))).toEqual(true);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=bin.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["cp","fs","path","files_to_assert","require","describe","skip","each","extension","env_test_content","project_root","beforeAll","join","process","cwd","mkdtempSync","file_path","dir","parse","folder","mkdirSync","recursive","afterAll","rmSync","force","it","map","k","env_file_path","writeFileSync","execFileSync","expect","existsSync","toEqual"],"sourceRoot":"../../src","sources":["bin.spec.ts"],"mappings":";;AAAA,OAAOA,EAAE,MAAM,eAAe;AAC9B,OAAOC,EAAE,MAAM,IAAI;AACnB,OAAOC,IAAI,MAAM,MAAM;AACvB;AACA,MAAM;EAAEC;AAAgB,CAAC,GAAGC,OAAO,CAAC,aAAa,CAAkC;;AAEnF;AACAC,QAAQ,CAACC,IAAI,CAACC,IAAI;AAClB;AACA,IAAI,EAAE,WAAW,aAAa;AAC9B,IAAI,OAAO,MAAM,cAAc;AAC/B,IAAI,MAAM,OAAO,cAAc;AAC/B,CAAC,CACC,cAAc,EACd,CAAC;EAAEC,SAAS;EAAEC;AAAkE,CAAC,KAAK;EACpF,IAAIC,YAAoB;EACxBC,SAAS,CAAC,MAAM;IACdD,YAAY,GAAGR,IAAI,CAACU,IAAI,CAACC,OAAO,CAACC,GAAG,CAAC,CAAC,EAAEb,EAAE,CAACc,WAAW,CAAC,WAAW,CAAC,CAAC;IACpE,KAAK,MAAMC,SAAS,IAAIb,eAAe,EAAE;MACvC,MAAM;QAAEc;MAAI,CAAC,GAAGf,IAAI,CAACgB,KAAK,CAACF,SAAS,CAAC;MACrC,MAAMG,MAAM,GAAGjB,IAAI,CAACU,IAAI,CAACF,YAAY,EAAEO,GAAG,CAAC;MAC3ChB,EAAE,CAACmB,SAAS,CAACD,MAAM,EAAE;QAAEE,SAAS,EAAE;MAAK,CAAC,CAAC;IAC3C;EACF,CAAC,CAAC;EACFC,QAAQ,CAAC,MAAM;IACbrB,EAAE,CAACsB,MAAM,CAACb,YAAY,EAAE;MAAEW,SAAS,EAAE,IAAI;MAAEG,KAAK,EAAE;IAAK,CAAC,CAAC;EAC3D,CAAC,CAAC;EACFC,EAAE,CAAClB,IAAI,CAACJ,eAAe,CAACuB,GAAG,CAAEC,CAAC,IAAK,CAACA,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB,EAAGX,SAAS,IAAK;IACjF,MAAMY,aAAa,GAAG1B,IAAI,CAACU,IAAI,CAACF,YAAY,EAAE,OAAOF,SAAS,EAAE,CAAC;IACjEP,EAAE,CAAC4B,aAAa,CAACD,aAAa,EAAEnB,gBAAgB,CAAC;IACjDT,EAAE,CAAC8B,YAAY,CAAC,MAAM,EAAE,CAAC5B,IAAI,CAACU,IAAI,CAACC,OAAO,CAACC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAEc,aAAa,CAAC,EAAE;MACxFd,GAAG,EAAEJ;IACP,CAAC,CAAC;IACFqB,MAAM,CAAC9B,EAAE,CAAC+B,UAAU,CAAC9B,IAAI,CAACU,IAAI,CAACF,YAAY,EAAEM,SAAmB,CAAC,CAAC,CAAC,CAACiB,OAAO,CAAC,IAAI,CAAC;EACnF,CAAC,CAAC;AACJ,CACF,CAAC","ignoreList":[]}
|