@apollion-dsi/scripts 0.7.7 → 0.8.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 (77) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/README.md +73 -0
  3. package/codemods/v4-migrate.mjs +196 -0
  4. package/coverage/clover.xml +123 -0
  5. package/coverage/coverage-final.json +7 -0
  6. package/coverage/lcov-report/base.css +224 -0
  7. package/coverage/lcov-report/block-navigation.js +87 -0
  8. package/coverage/lcov-report/config/env.ts.html +400 -0
  9. package/coverage/lcov-report/config/index.html +146 -0
  10. package/coverage/lcov-report/config/paths.ts.html +442 -0
  11. package/coverage/lcov-report/config/shared.ts.html +211 -0
  12. package/coverage/lcov-report/favicon.png +0 -0
  13. package/coverage/lcov-report/index.html +131 -0
  14. package/coverage/lcov-report/prettify.css +1 -0
  15. package/coverage/lcov-report/prettify.js +2 -0
  16. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  17. package/coverage/lcov-report/sorter.js +210 -0
  18. package/coverage/lcov-report/utils/checkRequiredFiles.ts.html +178 -0
  19. package/coverage/lcov-report/utils/formatWebpackMessages.ts.html +214 -0
  20. package/coverage/lcov-report/utils/getPublicUrlOrPath.ts.html +259 -0
  21. package/coverage/lcov-report/utils/index.html +146 -0
  22. package/coverage/lcov.info +236 -0
  23. package/jest.config.js +36 -0
  24. package/lib/command/build.d.ts +14 -0
  25. package/lib/command/build.js +14 -0
  26. package/lib/command/build.js.map +1 -1
  27. package/lib/command/create/helper.js +0 -1
  28. package/lib/command/create/helper.js.map +1 -1
  29. package/lib/command/dev.d.ts +12 -0
  30. package/lib/command/dev.js +12 -0
  31. package/lib/command/dev.js.map +1 -1
  32. package/lib/config/env.d.ts +23 -0
  33. package/lib/config/env.js +23 -0
  34. package/lib/config/env.js.map +1 -1
  35. package/lib/config/paths.d.ts +31 -0
  36. package/lib/config/paths.js +11 -0
  37. package/lib/config/paths.js.map +1 -1
  38. package/lib/config/shared.d.ts +15 -0
  39. package/lib/config/shared.js +1 -0
  40. package/lib/config/shared.js.map +1 -1
  41. package/lib/index.d.ts +8 -0
  42. package/lib/index.js +8 -0
  43. package/lib/index.js.map +1 -1
  44. package/lib/utils/checkRequiredFiles.d.ts +9 -0
  45. package/lib/utils/checkRequiredFiles.js +9 -0
  46. package/lib/utils/checkRequiredFiles.js.map +1 -1
  47. package/lib/utils/formatWebpackMessages.d.ts +13 -0
  48. package/lib/utils/formatWebpackMessages.js +9 -0
  49. package/lib/utils/formatWebpackMessages.js.map +1 -1
  50. package/lib/utils/getPublicUrlOrPath.d.ts +19 -0
  51. package/lib/utils/getPublicUrlOrPath.js +19 -0
  52. package/lib/utils/getPublicUrlOrPath.js.map +1 -1
  53. package/llms.txt +52 -0
  54. package/package.json +9 -5
  55. package/scripts/validate.sh +3 -3
  56. package/src/__tests__/checkRequiredFiles.test.ts +44 -0
  57. package/src/__tests__/env.test.ts +51 -0
  58. package/src/__tests__/formatWebpackMessages.test.ts +42 -0
  59. package/src/__tests__/getPublicUrlOrPath.test.ts +38 -0
  60. package/src/__tests__/paths.test.ts +47 -0
  61. package/src/__tests__/shared.test.ts +14 -0
  62. package/src/command/build.ts +14 -0
  63. package/src/command/create/helper.ts +0 -1
  64. package/src/command/dev.ts +12 -0
  65. package/src/config/env.ts +23 -0
  66. package/src/config/paths.ts +31 -0
  67. package/src/config/shared.ts +15 -0
  68. package/src/index.ts +9 -0
  69. package/src/utils/checkRequiredFiles.ts +9 -0
  70. package/src/utils/formatWebpackMessages.ts +13 -0
  71. package/src/utils/getPublicUrlOrPath.ts +19 -0
  72. package/tsconfig.json +1 -1
  73. package/tsconfig.test.json +14 -0
  74. package/verify-no-install-scripts.js +76 -0
  75. package/.prettierrc.js +0 -1
  76. package/README.MD +0 -91
  77. package/audit-ci.json +0 -5
@@ -0,0 +1,400 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for config/env.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">config</a> env.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">90.9% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>20/22</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">75% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>9/12</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">87.5% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>7/8</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">90.9% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>20/22</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
172
+ <span class="cline-any cline-yes">1x</span>
173
+ <span class="cline-any cline-neutral">&nbsp;</span>
174
+ <span class="cline-any cline-neutral">&nbsp;</span>
175
+ <span class="cline-any cline-neutral">&nbsp;</span>
176
+ <span class="cline-any cline-neutral">&nbsp;</span>
177
+ <span class="cline-any cline-neutral">&nbsp;</span>
178
+ <span class="cline-any cline-neutral">&nbsp;</span>
179
+ <span class="cline-any cline-neutral">&nbsp;</span>
180
+ <span class="cline-any cline-neutral">&nbsp;</span>
181
+ <span class="cline-any cline-neutral">&nbsp;</span>
182
+ <span class="cline-any cline-neutral">&nbsp;</span>
183
+ <span class="cline-any cline-neutral">&nbsp;</span>
184
+ <span class="cline-any cline-neutral">&nbsp;</span>
185
+ <span class="cline-any cline-neutral">&nbsp;</span>
186
+ <span class="cline-any cline-yes">1x</span>
187
+ <span class="cline-any cline-yes">2x</span>
188
+ <span class="cline-any cline-neutral">&nbsp;</span>
189
+ <span class="cline-any cline-yes">2x</span>
190
+ <span class="cline-any cline-yes">1x</span>
191
+ <span class="cline-any cline-neutral">&nbsp;</span>
192
+ <span class="cline-any cline-neutral">&nbsp;</span>
193
+ <span class="cline-any cline-yes">1x</span>
194
+ <span class="cline-any cline-neutral">&nbsp;</span>
195
+ <span class="cline-any cline-neutral">&nbsp;</span>
196
+ <span class="cline-any cline-neutral">&nbsp;</span>
197
+ <span class="cline-any cline-neutral">&nbsp;</span>
198
+ <span class="cline-any cline-neutral">&nbsp;</span>
199
+ <span class="cline-any cline-neutral">&nbsp;</span>
200
+ <span class="cline-any cline-neutral">&nbsp;</span>
201
+ <span class="cline-any cline-neutral">&nbsp;</span>
202
+ <span class="cline-any cline-neutral">&nbsp;</span>
203
+ <span class="cline-any cline-neutral">&nbsp;</span>
204
+ <span class="cline-any cline-neutral">&nbsp;</span>
205
+ <span class="cline-any cline-neutral">&nbsp;</span>
206
+ <span class="cline-any cline-neutral">&nbsp;</span>
207
+ <span class="cline-any cline-neutral">&nbsp;</span>
208
+ <span class="cline-any cline-yes">1x</span>
209
+ <span class="cline-any cline-yes">5x</span>
210
+ <span class="cline-any cline-no">&nbsp;</span>
211
+ <span class="cline-any cline-neutral">&nbsp;</span>
212
+ <span class="cline-any cline-neutral">&nbsp;</span>
213
+ <span class="cline-any cline-neutral">&nbsp;</span>
214
+ <span class="cline-any cline-neutral">&nbsp;</span>
215
+ <span class="cline-any cline-neutral">&nbsp;</span>
216
+ <span class="cline-any cline-neutral">&nbsp;</span>
217
+ <span class="cline-any cline-neutral">&nbsp;</span>
218
+ <span class="cline-any cline-yes">1x</span>
219
+ <span class="cline-any cline-yes">1x</span>
220
+ <span class="cline-any cline-neutral">&nbsp;</span>
221
+ <span class="cline-any cline-yes">1x</span>
222
+ <span class="cline-any cline-no">&nbsp;</span>
223
+ <span class="cline-any cline-neutral">&nbsp;</span>
224
+ <span class="cline-any cline-neutral">&nbsp;</span>
225
+ <span class="cline-any cline-neutral">&nbsp;</span>
226
+ <span class="cline-any cline-neutral">&nbsp;</span>
227
+ <span class="cline-any cline-neutral">&nbsp;</span>
228
+ <span class="cline-any cline-neutral">&nbsp;</span>
229
+ <span class="cline-any cline-neutral">&nbsp;</span>
230
+ <span class="cline-any cline-neutral">&nbsp;</span>
231
+ <span class="cline-any cline-neutral">&nbsp;</span>
232
+ <span class="cline-any cline-neutral">&nbsp;</span>
233
+ <span class="cline-any cline-neutral">&nbsp;</span>
234
+ <span class="cline-any cline-neutral">&nbsp;</span>
235
+ <span class="cline-any cline-neutral">&nbsp;</span>
236
+ <span class="cline-any cline-neutral">&nbsp;</span>
237
+ <span class="cline-any cline-neutral">&nbsp;</span>
238
+ <span class="cline-any cline-neutral">&nbsp;</span>
239
+ <span class="cline-any cline-yes">1x</span>
240
+ <span class="cline-any cline-neutral">&nbsp;</span>
241
+ <span class="cline-any cline-neutral">&nbsp;</span>
242
+ <span class="cline-any cline-yes">2x</span>
243
+ <span class="cline-any cline-neutral">&nbsp;</span>
244
+ <span class="cline-any cline-yes">2x</span>
245
+ <span class="cline-any cline-yes">127x</span>
246
+ <span class="cline-any cline-yes">1x</span>
247
+ <span class="cline-any cline-neutral">&nbsp;</span>
248
+ <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-neutral">&nbsp;</span>
250
+ <span class="cline-any cline-neutral">&nbsp;</span>
251
+ <span class="cline-any cline-neutral">&nbsp;</span>
252
+ <span class="cline-any cline-neutral">&nbsp;</span>
253
+ <span class="cline-any cline-neutral">&nbsp;</span>
254
+ <span class="cline-any cline-neutral">&nbsp;</span>
255
+ <span class="cline-any cline-neutral">&nbsp;</span>
256
+ <span class="cline-any cline-neutral">&nbsp;</span>
257
+ <span class="cline-any cline-neutral">&nbsp;</span>
258
+ <span class="cline-any cline-neutral">&nbsp;</span>
259
+ <span class="cline-any cline-neutral">&nbsp;</span>
260
+ <span class="cline-any cline-neutral">&nbsp;</span>
261
+ <span class="cline-any cline-neutral">&nbsp;</span>
262
+ <span class="cline-any cline-neutral">&nbsp;</span>
263
+ <span class="cline-any cline-neutral">&nbsp;</span>
264
+ <span class="cline-any cline-neutral">&nbsp;</span>
265
+ <span class="cline-any cline-neutral">&nbsp;</span>
266
+ <span class="cline-any cline-neutral">&nbsp;</span>
267
+ <span class="cline-any cline-neutral">&nbsp;</span>
268
+ <span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-neutral">&nbsp;</span>
270
+ <span class="cline-any cline-yes">2x</span>
271
+ <span class="cline-any cline-yes">13x</span>
272
+ <span class="cline-any cline-neutral">&nbsp;</span>
273
+ <span class="cline-any cline-neutral">&nbsp;</span>
274
+ <span class="cline-any cline-yes">2x</span>
275
+ <span class="cline-any cline-neutral">&nbsp;</span>
276
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import fs from 'fs';
277
+ import path from 'path';
278
+ &nbsp;
279
+ import { CustomConfigType } from './shared';
280
+ &nbsp;
281
+ /**
282
+ * Load environment variables from `.env*` files in cascading order
283
+ * (`.env.&lt;NODE_ENV&gt;.local`, `.env.local`, `.env.&lt;NODE_ENV&gt;`, `.env`)
284
+ * and prepend the consumer's `NODE_PATH` entries with absolute paths.
285
+ *
286
+ * **Throws** when `process.env.NODE_ENV` is unset — required so the
287
+ * cascade can pick the right file. Skips `.env.local` for `NODE_ENV=test`.
288
+ *
289
+ * @param paths `AppPaths` (only `paths.dotenv` is read).
290
+ */
291
+ export function getEnviroment(paths) {
292
+ const { NODE_ENV, ENV } = process.env;
293
+ &nbsp;
294
+ if (!NODE_ENV) {
295
+ throw new Error('The NODE_ENV environment variable is required but was not specified.');
296
+ }
297
+ &nbsp;
298
+ const dotenvFiles = [
299
+ `${paths.dotenv}.${NODE_ENV}.local`,
300
+ `${paths.dotenv}.${ENV}.local`,
301
+ // Don't include `.env.local` for `test` environment
302
+ // since normally you expect tests to produce the same
303
+ // results for everyone
304
+ NODE_ENV !== 'test' &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >`${paths.dotenv}.local`,</span>
305
+ `${paths.dotenv}.${NODE_ENV}`,
306
+ `${paths.dotenv}.${ENV}`,
307
+ paths.dotenv,
308
+ ].filter(Boolean) as Array&lt;string&gt;;
309
+ &nbsp;
310
+ // Load environment variables from .env* files. Suppress warnings using silent
311
+ // if this file is missing. dotenv will never modify any environment variables
312
+ // that have already been set. Variable expansion is supported in .env files.
313
+ dotenvFiles.forEach((dotenvFile) =&gt; {
314
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (fs.existsSync(dotenvFile)) {
315
+ <span class="cstat-no" title="statement not covered" > require('dotenv-expand')(</span>
316
+ require('dotenv').config({
317
+ path: dotenvFile,
318
+ }),
319
+ );
320
+ }
321
+ });
322
+ &nbsp;
323
+ const appDirectory = fs.realpathSync(process.cwd());
324
+ process.env.NODE_PATH = (process.env.NODE_PATH || '')
325
+ .split(path.delimiter)
326
+ .filter((folder) =&gt; folder &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >!path.isAbsolute(folder))</span>
327
+ .map(<span class="fstat-no" title="function not covered" >(f</span>older) =&gt; <span class="cstat-no" title="statement not covered" >path.resolve(appDirectory, folder))</span>
328
+ .join(path.delimiter);
329
+ }
330
+ &nbsp;
331
+ /**
332
+ * Pick the `REACT_APP_*` subset of `process.env`, augment it with the
333
+ * fixed `NODE_ENV`/`PUBLIC_URL`/`WDS_SOCKET_*`/`FAST_REFRESH` keys, and
334
+ * return both the raw object (for runtime consumers) and a stringified
335
+ * form ready for webpack's `DefinePlugin`.
336
+ *
337
+ * **Security:** vars NOT prefixed with `REACT_APP_` (e.g. `SECRET_KEY`)
338
+ * are excluded — this is the boundary that prevents server-only secrets
339
+ * from leaking into the client bundle.
340
+ *
341
+ * @param publicUrl `paths.publicUrlOrPath` — exposed as `PUBLIC_URL`.
342
+ * @param config Resolved `CustomConfigType` (only `useFastRefresh` is read).
343
+ */
344
+ export default function getClientEnvironment(publicUrl: string, config: CustomConfigType) {
345
+ // Grab NODE_ENV and REACT_APP_* environment variables and prepare them to be
346
+ // injected into the application via DefinePlugin in webpack configuration.
347
+ const REACT_APP = /^REACT_APP_/i;
348
+ &nbsp;
349
+ const raw = Object.keys(process.env)
350
+ .filter((key) =&gt; REACT_APP.test(key))
351
+ .reduce((env, key) =&gt; Object.assign(env, { [key]: process.env[key] }), {
352
+ // Useful for determining whether we’re running in production mode.
353
+ // Most importantly, it switches React into the correct mode.
354
+ NODE_ENV: process.env.NODE_ENV || 'development',
355
+ // Useful for resolving the correct path to static assets in `public`.
356
+ // For example, &lt;img src={process.env.PUBLIC_URL + '/img/logo.png'} /&gt;.
357
+ // This should only be used as an escape hatch. Normally you would put
358
+ // images into the `src` and `import` them in code to get their paths.
359
+ PUBLIC_URL: publicUrl,
360
+ // We support configuring the sockjs pathname during development.
361
+ // These settings let a developer run multiple simultaneous projects.
362
+ // They are used as the connection `hostname`, `pathname` and `port`
363
+ // in webpackHotDevClient. They are used as the `sockHost`, `sockPath`
364
+ // and `sockPort` options in webpack-dev-server.
365
+ WDS_SOCKET_HOST: process.env.WDS_SOCKET_HOST,
366
+ WDS_SOCKET_PATH: process.env.WDS_SOCKET_PATH,
367
+ WDS_SOCKET_PORT: process.env.WDS_SOCKET_PORT,
368
+ // Whether or not react-refresh is enabled.
369
+ // react-refresh is not 100% stable at this time,
370
+ // which is why it's disabled by default.
371
+ // It is defined here so it is available in the webpackHotDevClient.
372
+ FAST_REFRESH: !!config.useFastRefresh,
373
+ });
374
+ // Stringify all values so we can feed into webpack DefinePlugin
375
+ const stringified = {
376
+ 'process.env': Object.keys(raw).reduce((env, key) =&gt; Object.assign(env, { [key]: JSON.stringify(raw[key]) }), {}),
377
+ };
378
+ &nbsp;
379
+ return { raw, stringified };
380
+ }
381
+ &nbsp;</pre></td></tr></table></pre>
382
+
383
+ <div class='push'></div><!-- for sticky footer -->
384
+ </div><!-- /wrapper -->
385
+ <div class='footer quiet pad2 space-top1 center small'>
386
+ Code coverage generated by
387
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
388
+ at 2026-05-28T11:55:20.079Z
389
+ </div>
390
+ <script src="../prettify.js"></script>
391
+ <script>
392
+ window.onload = function () {
393
+ prettyPrint();
394
+ };
395
+ </script>
396
+ <script src="../sorter.js"></script>
397
+ <script src="../block-navigation.js"></script>
398
+ </body>
399
+ </html>
400
+
@@ -0,0 +1,146 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for config</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> config</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">95.55% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>43/45</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">78.94% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>15/19</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">91.66% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>11/12</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">95.34% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>41/43</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <div class="pad1">
66
+ <table class="coverage-summary">
67
+ <thead>
68
+ <tr>
69
+ <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
70
+ <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
71
+ <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
72
+ <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
73
+ <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
74
+ <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
75
+ <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
76
+ <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
77
+ <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
78
+ <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
79
+ </tr>
80
+ </thead>
81
+ <tbody><tr>
82
+ <td class="file high" data-value="env.ts"><a href="env.ts.html">env.ts</a></td>
83
+ <td data-value="90.9" class="pic high">
84
+ <div class="chart"><div class="cover-fill" style="width: 90%"></div><div class="cover-empty" style="width: 10%"></div></div>
85
+ </td>
86
+ <td data-value="90.9" class="pct high">90.9%</td>
87
+ <td data-value="22" class="abs high">20/22</td>
88
+ <td data-value="75" class="pct medium">75%</td>
89
+ <td data-value="12" class="abs medium">9/12</td>
90
+ <td data-value="87.5" class="pct high">87.5%</td>
91
+ <td data-value="8" class="abs high">7/8</td>
92
+ <td data-value="90.9" class="pct high">90.9%</td>
93
+ <td data-value="22" class="abs high">20/22</td>
94
+ </tr>
95
+
96
+ <tr>
97
+ <td class="file high" data-value="paths.ts"><a href="paths.ts.html">paths.ts</a></td>
98
+ <td data-value="100" class="pic high">
99
+ <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
100
+ </td>
101
+ <td data-value="100" class="pct high">100%</td>
102
+ <td data-value="22" class="abs high">22/22</td>
103
+ <td data-value="85.71" class="pct high">85.71%</td>
104
+ <td data-value="7" class="abs high">6/7</td>
105
+ <td data-value="100" class="pct high">100%</td>
106
+ <td data-value="4" class="abs high">4/4</td>
107
+ <td data-value="100" class="pct high">100%</td>
108
+ <td data-value="20" class="abs high">20/20</td>
109
+ </tr>
110
+
111
+ <tr>
112
+ <td class="file high" data-value="shared.ts"><a href="shared.ts.html">shared.ts</a></td>
113
+ <td data-value="100" class="pic high">
114
+ <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
115
+ </td>
116
+ <td data-value="100" class="pct high">100%</td>
117
+ <td data-value="1" class="abs high">1/1</td>
118
+ <td data-value="100" class="pct high">100%</td>
119
+ <td data-value="0" class="abs high">0/0</td>
120
+ <td data-value="100" class="pct high">100%</td>
121
+ <td data-value="0" class="abs high">0/0</td>
122
+ <td data-value="100" class="pct high">100%</td>
123
+ <td data-value="1" class="abs high">1/1</td>
124
+ </tr>
125
+
126
+ </tbody>
127
+ </table>
128
+ </div>
129
+ <div class='push'></div><!-- for sticky footer -->
130
+ </div><!-- /wrapper -->
131
+ <div class='footer quiet pad2 space-top1 center small'>
132
+ Code coverage generated by
133
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
134
+ at 2026-05-28T11:55:20.079Z
135
+ </div>
136
+ <script src="../prettify.js"></script>
137
+ <script>
138
+ window.onload = function () {
139
+ prettyPrint();
140
+ };
141
+ </script>
142
+ <script src="../sorter.js"></script>
143
+ <script src="../block-navigation.js"></script>
144
+ </body>
145
+ </html>
146
+