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.
Files changed (152) hide show
  1. package/android/gradle.properties +6 -0
  2. package/android/rnuc.yaml +1 -0
  3. package/lib/commonjs/NativeUltimateConfig.js +20 -0
  4. package/lib/commonjs/NativeUltimateConfig.js.map +1 -0
  5. package/lib/commonjs/bin.spec.js +50 -0
  6. package/lib/commonjs/bin.spec.js.map +1 -0
  7. package/lib/commonjs/cli.js +143 -0
  8. package/lib/commonjs/cli.js.map +1 -0
  9. package/lib/commonjs/cli.spec.js +190 -0
  10. package/lib/commonjs/cli.spec.js.map +1 -0
  11. package/lib/commonjs/flatten.js +23 -0
  12. package/lib/commonjs/flatten.js.map +1 -0
  13. package/lib/commonjs/flatten.spec.js +32 -0
  14. package/lib/commonjs/flatten.spec.js.map +1 -0
  15. package/lib/commonjs/index.js +34 -0
  16. package/lib/commonjs/index.js.map +1 -0
  17. package/lib/commonjs/load-env.js +86 -0
  18. package/lib/commonjs/load-env.js.map +1 -0
  19. package/lib/commonjs/load-env.spec.js +257 -0
  20. package/lib/commonjs/load-env.spec.js.map +1 -0
  21. package/lib/commonjs/main.js +36 -0
  22. package/lib/commonjs/main.js.map +1 -0
  23. package/lib/commonjs/main.spec.js +228 -0
  24. package/lib/commonjs/main.spec.js.map +1 -0
  25. package/lib/commonjs/package.json +1 -0
  26. package/lib/commonjs/render-env.js +90 -0
  27. package/lib/commonjs/render-env.js.map +1 -0
  28. package/lib/commonjs/render-env.spec.js +397 -0
  29. package/lib/commonjs/render-env.spec.js.map +1 -0
  30. package/lib/commonjs/resolve-env.js +30 -0
  31. package/lib/commonjs/resolve-env.js.map +1 -0
  32. package/lib/commonjs/resolve-env.spec.js +31 -0
  33. package/lib/commonjs/resolve-env.spec.js.map +1 -0
  34. package/lib/commonjs/templates/ConfigValues.h.handlebars +24 -0
  35. package/lib/commonjs/templates/index.d.ts.handlebars +18 -0
  36. package/lib/commonjs/templates/index.web.js.handlebars +1 -0
  37. package/lib/commonjs/templates/override.js.handlebars +16 -0
  38. package/lib/commonjs/templates/rncu.xcconfig.handlebars +4 -0
  39. package/lib/commonjs/templates/rncu.yaml.handlebars +7 -0
  40. package/lib/commonjs/validate-env.js +63 -0
  41. package/lib/commonjs/validate-env.js.map +1 -0
  42. package/lib/commonjs/validate-env.spec.js +325 -0
  43. package/lib/commonjs/validate-env.spec.js.map +1 -0
  44. package/lib/commonjs/write-env.js +80 -0
  45. package/lib/commonjs/write-env.js.map +1 -0
  46. package/lib/commonjs/write-env.spec.js +115 -0
  47. package/lib/commonjs/write-env.spec.js.map +1 -0
  48. package/lib/module/NativeUltimateConfig.js +16 -0
  49. package/lib/module/NativeUltimateConfig.js.map +1 -0
  50. package/lib/module/bin.spec.js +49 -0
  51. package/lib/module/bin.spec.js.map +1 -0
  52. package/lib/module/cli.js +136 -0
  53. package/lib/module/cli.js.map +1 -0
  54. package/lib/module/cli.spec.js +190 -0
  55. package/lib/module/cli.spec.js.map +1 -0
  56. package/lib/module/flatten.js +18 -0
  57. package/lib/module/flatten.js.map +1 -0
  58. package/lib/module/flatten.spec.js +31 -0
  59. package/lib/module/flatten.spec.js.map +1 -0
  60. package/lib/module/index.js +30 -0
  61. package/lib/module/index.js.map +1 -0
  62. package/lib/module/load-env.js +81 -0
  63. package/lib/module/load-env.js.map +1 -0
  64. package/lib/module/load-env.spec.js +257 -0
  65. package/lib/module/load-env.spec.js.map +1 -0
  66. package/lib/module/main.js +31 -0
  67. package/lib/module/main.js.map +1 -0
  68. package/lib/module/main.spec.js +224 -0
  69. package/lib/module/main.spec.js.map +1 -0
  70. package/lib/module/render-env.js +84 -0
  71. package/lib/module/render-env.js.map +1 -0
  72. package/lib/module/render-env.spec.js +396 -0
  73. package/lib/module/render-env.spec.js.map +1 -0
  74. package/lib/module/resolve-env.js +26 -0
  75. package/lib/module/resolve-env.js.map +1 -0
  76. package/lib/module/resolve-env.spec.js +30 -0
  77. package/lib/module/resolve-env.spec.js.map +1 -0
  78. package/lib/module/templates/ConfigValues.h.handlebars +24 -0
  79. package/lib/module/templates/index.d.ts.handlebars +18 -0
  80. package/lib/module/templates/index.web.js.handlebars +1 -0
  81. package/lib/module/templates/override.js.handlebars +16 -0
  82. package/lib/module/templates/rncu.xcconfig.handlebars +4 -0
  83. package/lib/module/templates/rncu.yaml.handlebars +7 -0
  84. package/lib/module/validate-env.js +59 -0
  85. package/lib/module/validate-env.js.map +1 -0
  86. package/lib/module/validate-env.spec.js +325 -0
  87. package/lib/module/validate-env.spec.js.map +1 -0
  88. package/lib/module/write-env.js +75 -0
  89. package/lib/module/write-env.js.map +1 -0
  90. package/lib/module/write-env.spec.js +115 -0
  91. package/lib/module/write-env.spec.js.map +1 -0
  92. package/lib/typescript/src/NativeUltimateConfig.d.ts +18 -0
  93. package/lib/typescript/src/NativeUltimateConfig.d.ts.map +1 -0
  94. package/lib/typescript/src/bin.spec.d.ts +2 -0
  95. package/lib/typescript/src/bin.spec.d.ts.map +1 -0
  96. package/lib/typescript/src/cli.d.ts +2 -0
  97. package/lib/typescript/src/cli.d.ts.map +1 -0
  98. package/lib/typescript/src/cli.spec.d.ts +14 -0
  99. package/lib/typescript/src/cli.spec.d.ts.map +1 -0
  100. package/lib/typescript/src/flatten.d.ts +8 -0
  101. package/lib/typescript/src/flatten.d.ts.map +1 -0
  102. package/lib/typescript/src/flatten.spec.d.ts +2 -0
  103. package/lib/typescript/src/flatten.spec.d.ts.map +1 -0
  104. package/lib/typescript/src/index.d.ts +6 -0
  105. package/lib/typescript/src/index.d.ts.map +1 -0
  106. package/lib/typescript/src/load-env.d.ts +23 -0
  107. package/lib/typescript/src/load-env.d.ts.map +1 -0
  108. package/lib/typescript/src/load-env.spec.d.ts +6 -0
  109. package/lib/typescript/src/load-env.spec.d.ts.map +1 -0
  110. package/lib/typescript/src/main.d.ts +12 -0
  111. package/lib/typescript/src/main.d.ts.map +1 -0
  112. package/lib/typescript/src/main.spec.d.ts +2 -0
  113. package/lib/typescript/src/main.spec.d.ts.map +1 -0
  114. package/lib/typescript/src/render-env.d.ts +11 -0
  115. package/lib/typescript/src/render-env.d.ts.map +1 -0
  116. package/lib/typescript/src/render-env.spec.d.ts +2 -0
  117. package/lib/typescript/src/render-env.spec.d.ts.map +1 -0
  118. package/lib/typescript/src/resolve-env.d.ts +35 -0
  119. package/lib/typescript/src/resolve-env.d.ts.map +1 -0
  120. package/lib/typescript/src/resolve-env.spec.d.ts +2 -0
  121. package/lib/typescript/src/resolve-env.spec.d.ts.map +1 -0
  122. package/lib/typescript/src/validate-env.d.ts +10 -0
  123. package/lib/typescript/src/validate-env.d.ts.map +1 -0
  124. package/lib/typescript/src/validate-env.spec.d.ts +2 -0
  125. package/lib/typescript/src/validate-env.spec.d.ts.map +1 -0
  126. package/lib/typescript/src/write-env.d.ts +13 -0
  127. package/lib/typescript/src/write-env.d.ts.map +1 -0
  128. package/lib/typescript/src/write-env.spec.d.ts +9 -0
  129. package/lib/typescript/src/write-env.spec.d.ts.map +1 -0
  130. package/package.json +84 -52
  131. package/src/NativeUltimateConfig.ts +1 -2
  132. package/src/cli.ts +158 -0
  133. package/src/flatten.ts +26 -0
  134. package/src/index.ts +37 -0
  135. package/src/load-env.ts +81 -0
  136. package/src/main.ts +39 -0
  137. package/src/render-env.ts +111 -0
  138. package/src/resolve-env.ts +45 -0
  139. package/src/validate-env.ts +71 -0
  140. package/src/write-env.ts +74 -0
  141. package/bin.js +0 -5
  142. package/index.js +0 -28
  143. package/override.js +0 -1
  144. package/src/NativeUltimateConfig.js +0 -4
  145. package/src/cli.js +0 -176
  146. package/src/flatten.js +0 -22
  147. package/src/load-env.js +0 -107
  148. package/src/main.js +0 -34
  149. package/src/render-env.js +0 -113
  150. package/src/resolve-env.js +0 -12
  151. package/src/validate-env.js +0 -59
  152. package/src/write-env.js +0 -102
@@ -0,0 +1 @@
1
+ {"version":3,"names":["dotenv","_interopRequireWildcard","require","_dotenvExpand","yaml","path","fs","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","detect_format","config_path","ext","parse","read_yaml","data","load","readFileSync","toString","Error","load_env","config_paths","paths","Array","isArray","length","formats","map","allDotenv","every","raw","p","content","assign","result","expand","parsed","merged","expanded"],"sourceRoot":"../../src","sources":["load-env.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,IAAA,GAAAH,uBAAA,CAAAC,OAAA;AACA,IAAAG,IAAA,GAAAJ,uBAAA,CAAAC,OAAA;AACA,IAAAI,EAAA,GAAAL,uBAAA,CAAAC,OAAA;AAAyB,SAAAD,wBAAAM,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAR,uBAAA,YAAAA,CAAAM,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAMzB,SAASkB,aAAaA,CAACC,WAAmB,EAAc;EACtD,MAAM;IAAEC;EAAI,CAAC,GAAGvB,IAAI,CAACwB,KAAK,CAACF,WAAW,CAAC;EACvC,OAAOC,GAAG,KAAK,MAAM,IAAIA,GAAG,KAAK,OAAO,GAAG,MAAM,GAAG,QAAQ;AAC9D;AAEA,SAASE,SAASA,CAACH,WAAmB,EAAW;EAC/C,MAAMI,IAAI,GAAG3B,IAAI,CAAC4B,IAAI,CAAC1B,EAAE,CAAC2B,YAAY,CAACN,WAAW,CAAC,CAACO,QAAQ,CAAC,CAAC,CAAC;EAC/D,IAAI,OAAOH,IAAI,KAAK,WAAW,IAAIA,IAAI,KAAK,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IAC5E,MAAM,IAAII,KAAK,CAAC,gCAAgCR,WAAW,cAAcI,IAAI,GAAG,CAAC;EACnF;EACA,OAAOA,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASK,QAAQA,CAACC,YAA+B,EAAW;EACzE,MAAMC,KAAK,GAAGC,KAAK,CAACC,OAAO,CAACH,YAAY,CAAC,GAAGA,YAAY,GAAG,CAACA,YAAY,CAAC;EAEzE,IAAIC,KAAK,CAACG,MAAM,KAAK,CAAC,EAAE;IACtB,MAAM,IAAIN,KAAK,CAAC,+DAA+D,CAAC;EAClF;EAEA,MAAMO,OAAO,GAAGJ,KAAK,CAACK,GAAG,CAACjB,aAAa,CAAC;EACxC,MAAMkB,SAAS,GAAGF,OAAO,CAACG,KAAK,CAAE9B,CAAC,IAAKA,CAAC,KAAK,QAAQ,CAAC;EAEtD,IAAI6B,SAAS,EAAE;IACb;IACA;IACA,MAAME,GAA2B,GAAG,CAAC,CAAC;IACtC,KAAK,MAAMC,CAAC,IAAIT,KAAK,EAAE;MACrB,MAAMU,OAAO,GAAG1C,EAAE,CAAC2B,YAAY,CAACc,CAAC,EAAE,MAAM,CAAC;MAC1CxB,MAAM,CAAC0B,MAAM,CAACH,GAAG,EAAE9C,MAAM,CAAC6B,KAAK,CAACmB,OAAO,CAAC,CAAC;IAC3C;IACA,MAAME,MAAM,GAAG,IAAAC,oBAAM,EAAC;MAAEC,MAAM,EAAEN;IAAI,CAAC,CAAC;IACtC,OAAQI,MAAM,CAACE,MAAM,IAAIN,GAAG;EAC9B;;EAEA;EACA,MAAMO,MAAe,GAAG,CAAC,CAAC;EAC1B,KAAK,IAAIvC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwB,KAAK,CAACG,MAAM,EAAE3B,CAAC,EAAE,EAAE;IACrC,MAAMiC,CAAC,GAAGT,KAAK,CAACxB,CAAC,CAAW;IAC5B,IAAI,CAACiC,CAAC,EAAE;IACR,IAAIL,OAAO,CAAC5B,CAAC,CAAC,KAAK,MAAM,EAAE;MACzBS,MAAM,CAAC0B,MAAM,CAACI,MAAM,EAAEvB,SAAS,CAACiB,CAAC,CAAC,CAAC;IACrC,CAAC,MAAM;MACL,MAAMC,OAAO,GAAG1C,EAAE,CAAC2B,YAAY,CAACc,CAAC,EAAE,MAAM,CAAC;MAC1C,MAAMK,MAAM,GAAGpD,MAAM,CAAC6B,KAAK,CAACmB,OAAO,CAAC;MACpC,MAAMM,QAAQ,GAAG,IAAAH,oBAAM,EAAC;QAAEC;MAAO,CAAC,CAAC;MACnC7B,MAAM,CAAC0B,MAAM,CAACI,MAAM,EAAEC,QAAQ,CAACF,MAAM,IAAIA,MAAM,CAAC;IAClD;EACF;EACA,OAAOC,MAAM;AACf","ignoreList":[]}
@@ -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,36 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = main;
7
+ var _loadEnv = _interopRequireDefault(require("./load-env"));
8
+ var _renderEnv = _interopRequireDefault(require("./render-env"));
9
+ var _writeEnv = _interopRequireDefault(require("./write-env"));
10
+ var _flatten = _interopRequireDefault(require("./flatten"));
11
+ var _resolveEnv = _interopRequireDefault(require("./resolve-env"));
12
+ var _validateEnv = require("./validate-env");
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ /**
15
+ * Main build-time pipeline:
16
+ * load → resolve (on_env hook) → validate (schema) → flatten → render → write
17
+ *
18
+ * @param project_root Root of the React Native project
19
+ * @param lib_root Root of the react-native-config-ultimate install
20
+ * @param env_file Path(s) to env file(s). Multiple files are merged (last wins).
21
+ * @param rc Optional RC config from `.rncurc.js`
22
+ */
23
+ async function main(project_root, lib_root, env_file, rc) {
24
+ const env = await (0, _resolveEnv.default)((0, _loadEnv.default)(env_file), rc);
25
+ if (rc?.schema) {
26
+ (0, _validateEnv.validate_env)(env, rc.schema);
27
+ }
28
+ const flat = {
29
+ ios: (0, _flatten.default)(env, 'ios'),
30
+ android: (0, _flatten.default)(env, 'android'),
31
+ web: (0, _flatten.default)(env, 'web')
32
+ };
33
+ const files_to_write = (0, _renderEnv.default)(project_root, lib_root, flat, rc);
34
+ (0, _writeEnv.default)(files_to_write);
35
+ }
36
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_loadEnv","_interopRequireDefault","require","_renderEnv","_writeEnv","_flatten","_resolveEnv","_validateEnv","e","__esModule","default","main","project_root","lib_root","env_file","rc","env","resolve_env","load_env","schema","validate_env","flat","ios","flatten","android","web","files_to_write","render_env","write_env"],"sourceRoot":"../../src","sources":["main.ts"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,SAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,WAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,YAAA,GAAAL,OAAA;AAA8C,SAAAD,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAK9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,eAAeG,IAAIA,CAChCC,YAAoB,EACpBC,QAAgB,EAChBC,QAA2B,EAC3BC,EAAO,EACQ;EACf,MAAMC,GAAY,GAAG,MAAM,IAAAC,mBAAW,EAAC,IAAAC,gBAAQ,EAACJ,QAAQ,CAAC,EAAEC,EAAE,CAAC;EAE9D,IAAIA,EAAE,EAAEI,MAAM,EAAE;IACd,IAAAC,yBAAY,EAACJ,GAAG,EAAED,EAAE,CAACI,MAAM,CAAC;EAC9B;EAEA,MAAME,IAAI,GAAG;IACXC,GAAG,EAAE,IAAAC,gBAAO,EAACP,GAAG,EAAe,KAAK,CAAC;IACrCQ,OAAO,EAAE,IAAAD,gBAAO,EAACP,GAAG,EAAe,SAAS,CAAC;IAC7CS,GAAG,EAAE,IAAAF,gBAAO,EAACP,GAAG,EAAe,KAAK;EACtC,CAAC;EACD,MAAMU,cAAc,GAAG,IAAAC,kBAAU,EAACf,YAAY,EAAEC,QAAQ,EAAEQ,IAAI,EAAEN,EAAE,CAAC;EACnE,IAAAa,iBAAS,EAACF,cAAc,CAAC;AAC3B","ignoreList":[]}
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.files_to_assert = void 0;
7
+ const mock_load_env = jest.fn();
8
+ jest.doMock('./load-env', () => ({
9
+ __esModule: true,
10
+ default: mock_load_env
11
+ }));
12
+ const mock_render_env = jest.fn();
13
+ jest.doMock('./render-env', () => ({
14
+ __esModule: true,
15
+ default: mock_render_env
16
+ }));
17
+ const mock_write_env = jest.fn();
18
+ jest.doMock('./write-env', () => ({
19
+ __esModule: true,
20
+ default: mock_write_env
21
+ }));
22
+ const mock_flatten = jest.fn();
23
+ jest.doMock('./flatten', () => ({
24
+ __esModule: true,
25
+ default: mock_flatten
26
+ }));
27
+ const mock_validate_env = jest.fn();
28
+ jest.doMock('./validate-env', () => ({
29
+ validate_env: mock_validate_env
30
+ }));
31
+
32
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
33
+ const main = require('./main').default;
34
+ const files_to_assert = exports.files_to_assert = ['ios/rncu.xcconfig', 'node_modules/react-native-config-ultimate/ios/ConfigValues.h', 'node_modules/react-native-config-ultimate/android/rncu.yaml', 'node_modules/react-native-config-ultimate/index.d.ts', 'node_modules/react-native-config-ultimate/index.web.js', 'node_modules/react-native-config-ultimate/override.js'];
35
+ describe('main', () => {
36
+ beforeEach(() => {
37
+ mock_load_env.mockReset();
38
+ mock_render_env.mockReset();
39
+ mock_write_env.mockReset();
40
+ mock_flatten.mockReset();
41
+ mock_validate_env.mockReset();
42
+ });
43
+ it('execute render with paths (string arg — backward-compatible)', async () => {
44
+ mock_load_env.mockReturnValueOnce({
45
+ data: true
46
+ });
47
+ mock_flatten.mockReturnValueOnce({
48
+ data: true,
49
+ ios: true
50
+ });
51
+ mock_flatten.mockReturnValueOnce({
52
+ data: true,
53
+ android: true
54
+ });
55
+ mock_flatten.mockReturnValueOnce({
56
+ data: true,
57
+ web: true
58
+ });
59
+ mock_render_env.mockReturnValueOnce({
60
+ hello: 'world'
61
+ });
62
+ await main('project', 'project/node_modules/react-native-config-ultimate', 'file');
63
+ expect(mock_load_env).toHaveBeenCalledWith('file');
64
+ expect(mock_flatten).toHaveBeenCalledWith({
65
+ data: true
66
+ }, 'ios');
67
+ expect(mock_flatten).toHaveBeenCalledWith({
68
+ data: true
69
+ }, 'android');
70
+ expect(mock_flatten).toHaveBeenCalledWith({
71
+ data: true
72
+ }, 'web');
73
+ expect(mock_render_env).toHaveBeenCalledWith('project', 'project/node_modules/react-native-config-ultimate', {
74
+ ios: {
75
+ data: true,
76
+ ios: true
77
+ },
78
+ android: {
79
+ data: true,
80
+ android: true
81
+ },
82
+ web: {
83
+ data: true,
84
+ web: true
85
+ }
86
+ }, undefined);
87
+ expect(mock_write_env).toHaveBeenCalledWith({
88
+ hello: 'world'
89
+ });
90
+ });
91
+ it('passes array of env files to load_env (multi-file merge)', async () => {
92
+ mock_load_env.mockReturnValueOnce({
93
+ data: true
94
+ });
95
+ mock_flatten.mockReturnValue({});
96
+ mock_render_env.mockReturnValueOnce({});
97
+ await main('project', 'project/node_modules/react-native-config-ultimate', ['.env.base', '.env.staging']);
98
+ expect(mock_load_env).toHaveBeenCalledWith(['.env.base', '.env.staging']);
99
+ });
100
+ describe('rc.on_env', () => {
101
+ it('invoke rc hook with config before flattening', async () => {
102
+ const on_env = jest.fn();
103
+ mock_load_env.mockReturnValueOnce({
104
+ data: true
105
+ });
106
+ await main('project', 'project/node_modules/react-native-config-ultimate', 'file', {
107
+ on_env
108
+ });
109
+ expect(on_env).toHaveBeenCalledWith({
110
+ data: true
111
+ });
112
+ expect(mock_flatten).toHaveBeenCalledWith({
113
+ data: true
114
+ }, 'ios');
115
+ expect(mock_flatten).toHaveBeenCalledWith({
116
+ data: true
117
+ }, 'android');
118
+ expect(mock_flatten).toHaveBeenCalledWith({
119
+ data: true
120
+ }, 'web');
121
+ });
122
+ it('hook can add or remove values', async () => {
123
+ const on_env = jest.fn();
124
+ on_env.mockImplementation(env => {
125
+ const {
126
+ key1,
127
+ ...rest
128
+ } = env;
129
+ void key1;
130
+ return {
131
+ ...rest,
132
+ key2: 'hello'
133
+ };
134
+ });
135
+ mock_load_env.mockReturnValueOnce({
136
+ data: true,
137
+ key1: 'bye'
138
+ });
139
+ await main('project', 'project/node_modules/react-native-config-ultimate', 'file', {
140
+ on_env
141
+ });
142
+ expect(on_env).toHaveBeenCalledWith({
143
+ data: true,
144
+ key1: 'bye'
145
+ });
146
+ expect(mock_flatten).toHaveBeenCalledWith({
147
+ data: true,
148
+ key2: 'hello'
149
+ }, 'ios');
150
+ expect(mock_flatten).toHaveBeenCalledWith({
151
+ data: true,
152
+ key2: 'hello'
153
+ }, 'android');
154
+ expect(mock_flatten).toHaveBeenCalledWith({
155
+ data: true,
156
+ key2: 'hello'
157
+ }, 'web');
158
+ });
159
+ });
160
+ describe('rc.schema', () => {
161
+ it('calls validate_env when schema is provided', async () => {
162
+ const schema = {
163
+ API_KEY: {
164
+ type: 'string',
165
+ required: true
166
+ }
167
+ };
168
+ mock_load_env.mockReturnValueOnce({
169
+ API_KEY: 'secret'
170
+ });
171
+ mock_flatten.mockReturnValue({});
172
+ mock_render_env.mockReturnValueOnce({});
173
+ await main('project', 'project/node_modules/react-native-config-ultimate', 'file', {
174
+ schema
175
+ });
176
+ expect(mock_validate_env).toHaveBeenCalledWith({
177
+ API_KEY: 'secret'
178
+ }, schema);
179
+ });
180
+ it('does not call validate_env when no schema is provided', async () => {
181
+ mock_load_env.mockReturnValueOnce({
182
+ data: true
183
+ });
184
+ mock_flatten.mockReturnValue({});
185
+ mock_render_env.mockReturnValueOnce({});
186
+ await main('project', 'project/node_modules/react-native-config-ultimate', 'file');
187
+ expect(mock_validate_env).not.toHaveBeenCalled();
188
+ });
189
+ it('validates env AFTER on_env hook runs (hook output is validated)', async () => {
190
+ const schema = {
191
+ INJECTED_KEY: {
192
+ type: 'string',
193
+ required: true
194
+ }
195
+ };
196
+ const on_env = jest.fn().mockReturnValue({
197
+ INJECTED_KEY: 'from-hook'
198
+ });
199
+ mock_load_env.mockReturnValueOnce({});
200
+ mock_flatten.mockReturnValue({});
201
+ mock_render_env.mockReturnValueOnce({});
202
+ await main('project', 'project/node_modules/react-native-config-ultimate', 'file', {
203
+ on_env,
204
+ schema
205
+ });
206
+ // validate_env receives the HOOK output, not the raw env
207
+ expect(mock_validate_env).toHaveBeenCalledWith({
208
+ INJECTED_KEY: 'from-hook'
209
+ }, schema);
210
+ });
211
+ it('propagates validation error thrown by validate_env', async () => {
212
+ const schema = {
213
+ API_KEY: {
214
+ type: 'string',
215
+ required: true
216
+ }
217
+ };
218
+ mock_load_env.mockReturnValueOnce({});
219
+ mock_validate_env.mockImplementation(() => {
220
+ throw new Error('❌ validation failed: Missing required env var: API_KEY');
221
+ });
222
+ await expect(main('project', 'project/node_modules/react-native-config-ultimate', 'file', {
223
+ schema
224
+ })).rejects.toThrow('Missing required env var: API_KEY');
225
+ });
226
+ });
227
+ });
228
+ //# sourceMappingURL=main.spec.js.map
@@ -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","exports","describe","beforeEach","mockReset","it","mockReturnValueOnce","data","ios","android","web","hello","expect","toHaveBeenCalledWith","undefined","mockReturnValue","on_env","mockImplementation","env","key1","rest","key2","schema","API_KEY","type","required","not","toHaveBeenCalled","INJECTED_KEY","Error","rejects","toThrow"],"sourceRoot":"../../src","sources":["main.spec.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = render_env;
7
+ var path = _interopRequireWildcard(require("path"));
8
+ var fs = _interopRequireWildcard(require("fs"));
9
+ var _handlebars = _interopRequireDefault(require("handlebars"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ 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); }
12
+ const code_file_name = 'ConfigValues';
13
+ const config_file_name = 'rncu';
14
+
15
+ // ─── Handlebars helpers (registered once at module load, not per-call) ────────
16
+
17
+ function is_string(value) {
18
+ return typeof value === 'string';
19
+ }
20
+ function is_number(value) {
21
+ return typeof value === 'number';
22
+ }
23
+ function is_boolean(value) {
24
+ return typeof value === 'boolean';
25
+ }
26
+ function escape(value) {
27
+ if (is_string(value)) {
28
+ return value.replace(/\\/gm, '\\\\').replace(/"/gm, '\\"').replace(/\n/gm, '\\n').replace(/\r/gm, '\\r');
29
+ }
30
+ return value;
31
+ }
32
+ function xcconfig_format(value) {
33
+ if (is_string(value)) {
34
+ return value.replace(/\/\//gm, '/$()/');
35
+ }
36
+ return value;
37
+ }
38
+ function to_json(value) {
39
+ return JSON.stringify(value, null, 2);
40
+ }
41
+ _handlebars.default.registerHelper('isBoolean', is_boolean);
42
+ _handlebars.default.registerHelper('isString', is_string);
43
+ _handlebars.default.registerHelper('isNumber', is_number);
44
+ _handlebars.default.registerHelper('escape', escape);
45
+ _handlebars.default.registerHelper('xcconfigFormat', xcconfig_format);
46
+ _handlebars.default.registerHelper('toJSON', to_json);
47
+
48
+ // ─── Template cache (compiled once per template name, not per build) ──────────
49
+
50
+ const template_cache = new Map();
51
+ function get_compiled_template(template_name) {
52
+ const cached = template_cache.get(template_name);
53
+ if (cached) return cached;
54
+ const template_path = path.join(__dirname, 'templates', `${template_name}.handlebars`);
55
+ const compiled = _handlebars.default.compile(fs.readFileSync(template_path, 'utf8'));
56
+ template_cache.set(template_name, compiled);
57
+ return compiled;
58
+ }
59
+ function render_template(template_name, data) {
60
+ return get_compiled_template(template_name)(data);
61
+ }
62
+
63
+ // ─── Public API ───────────────────────────────────────────────────────────────
64
+
65
+ function render_env(project_root, lib_root, env, rc) {
66
+ const {
67
+ ios,
68
+ android,
69
+ web
70
+ } = env;
71
+ const map = {
72
+ [path.join(lib_root, 'index.d.ts')]: render_template('index.d.ts', ios),
73
+ [path.join(lib_root, 'index.web.js')]: render_template('index.web.js', web),
74
+ [path.join(lib_root, 'ios', `${code_file_name}.h`)]: render_template('ConfigValues.h', ios),
75
+ [path.join(lib_root, 'android', 'rncu.yaml')]: render_template('rncu.yaml', android)
76
+ };
77
+
78
+ // Only write xcconfig if the project has an ios folder.
79
+ // All RN apps have it; some react-native-web apps may not.
80
+ if (fs.existsSync(path.join(project_root, 'ios'))) {
81
+ map[path.join(project_root, 'ios', `${config_file_name}.xcconfig`)] = render_template('rncu.xcconfig', ios);
82
+ }
83
+ const js_override = rc && typeof rc.js_override === 'boolean' && rc.js_override;
84
+ map[path.join(lib_root, 'override.js')] = render_template('override.js', {
85
+ ios: js_override ? ios : {},
86
+ android: js_override ? android : {}
87
+ });
88
+ return map;
89
+ }
90
+ //# sourceMappingURL=render-env.js.map