@rnx-kit/cli 0.15.4 → 0.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +32 -20
  3. package/coverage/clover.xml +75 -26
  4. package/coverage/coverage-final.json +2 -2
  5. package/coverage/lcov-report/index.html +21 -21
  6. package/coverage/lcov-report/src/bundle/defaultPlugins.ts.html +31 -13
  7. package/coverage/lcov-report/src/bundle/index.html +5 -5
  8. package/coverage/lcov-report/src/bundle/kit-config.ts.html +1 -1
  9. package/coverage/lcov-report/src/bundle/metro.ts.html +1 -1
  10. package/coverage/lcov-report/src/bundle/overrides.ts.html +1 -1
  11. package/coverage/lcov-report/src/copy-assets.ts.html +1 -1
  12. package/coverage/lcov-report/src/index.html +20 -20
  13. package/coverage/lcov-report/src/metro-config.ts.html +426 -42
  14. package/coverage/lcov.info +127 -42
  15. package/lib/bundle/defaultPlugins.d.ts +4 -2
  16. package/lib/bundle/defaultPlugins.d.ts.map +1 -1
  17. package/lib/bundle/defaultPlugins.js +9 -6
  18. package/lib/bundle/defaultPlugins.js.map +1 -1
  19. package/lib/bundle/types.d.ts +1 -1
  20. package/lib/bundle/types.d.ts.map +1 -1
  21. package/lib/metro-config.d.ts +5 -3
  22. package/lib/metro-config.d.ts.map +1 -1
  23. package/lib/metro-config.js +122 -21
  24. package/lib/metro-config.js.map +1 -1
  25. package/lib/serve/kit-config.d.ts +7 -3
  26. package/lib/serve/kit-config.d.ts.map +1 -1
  27. package/lib/serve/kit-config.js +1 -1
  28. package/lib/serve/kit-config.js.map +1 -1
  29. package/package.json +8 -12
  30. package/src/bundle/defaultPlugins.ts +14 -8
  31. package/src/bundle/types.ts +1 -3
  32. package/src/metro-config.ts +154 -26
  33. package/src/serve/kit-config.ts +8 -5
  34. package/src/start.ts +1 -1
  35. package/test/bundle/kit-config.test.ts +25 -15
  36. package/test/bundle/metro.test.ts +10 -11
  37. package/test/bundle/overrides.test.ts +5 -4
  38. package/test/metro-config.test.ts +71 -32
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">100% </span>
26
+ <span class="strong">54.54% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>18/18</span>
28
+ <span class='fraction'>36/66</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
33
+ <span class="strong">50% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>12/12</span>
35
+ <span class='fraction'>19/38</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
40
+ <span class="strong">66.66% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>1/1</span>
42
+ <span class='fraction'>4/6</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">100% </span>
47
+ <span class="strong">54.54% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>18/18</span>
49
+ <span class='fraction'>36/66</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line high'></div>
64
+ <div class='status-line medium'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -132,7 +132,135 @@
132
132
  <a name='L67'></a><a href='#L67'>67</a>
133
133
  <a name='L68'></a><a href='#L68'>68</a>
134
134
  <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
136
264
  <span class="cline-any cline-neutral">&nbsp;</span>
137
265
  <span class="cline-any cline-neutral">&nbsp;</span>
138
266
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -156,29 +284,144 @@
156
284
  <span class="cline-any cline-neutral">&nbsp;</span>
157
285
  <span class="cline-any cline-neutral">&nbsp;</span>
158
286
  <span class="cline-any cline-neutral">&nbsp;</span>
287
+ <span class="cline-any cline-yes">21x</span>
288
+ <span class="cline-any cline-yes">21x</span>
159
289
  <span class="cline-any cline-neutral">&nbsp;</span>
290
+ <span class="cline-any cline-no">&nbsp;</span>
160
291
  <span class="cline-any cline-neutral">&nbsp;</span>
161
292
  <span class="cline-any cline-neutral">&nbsp;</span>
162
293
  <span class="cline-any cline-neutral">&nbsp;</span>
163
294
  <span class="cline-any cline-neutral">&nbsp;</span>
295
+ <span class="cline-any cline-yes">21x</span>
296
+ <span class="cline-any cline-yes">21x</span>
164
297
  <span class="cline-any cline-neutral">&nbsp;</span>
165
298
  <span class="cline-any cline-neutral">&nbsp;</span>
299
+ <span class="cline-any cline-neutral">&nbsp;</span>
300
+ <span class="cline-any cline-neutral">&nbsp;</span>
301
+ <span class="cline-any cline-neutral">&nbsp;</span>
302
+ <span class="cline-any cline-neutral">&nbsp;</span>
303
+ <span class="cline-any cline-neutral">&nbsp;</span>
304
+ <span class="cline-any cline-yes">10x</span>
305
+ <span class="cline-any cline-yes">10x</span>
306
+ <span class="cline-any cline-neutral">&nbsp;</span>
166
307
  <span class="cline-any cline-yes">10x</span>
308
+ <span class="cline-any cline-no">&nbsp;</span>
309
+ <span class="cline-any cline-no">&nbsp;</span>
310
+ <span class="cline-any cline-neutral">&nbsp;</span>
167
311
  <span class="cline-any cline-neutral">&nbsp;</span>
168
312
  <span class="cline-any cline-yes">10x</span>
313
+ <span class="cline-any cline-no">&nbsp;</span>
314
+ <span class="cline-any cline-no">&nbsp;</span>
315
+ <span class="cline-any cline-neutral">&nbsp;</span>
316
+ <span class="cline-any cline-neutral">&nbsp;</span>
169
317
  <span class="cline-any cline-yes">10x</span>
170
- <span class="cline-any cline-yes">1x</span>
171
- <span class="cline-any cline-yes">9x</span>
172
- <span class="cline-any cline-yes">5x</span>
318
+ <span class="cline-any cline-no">&nbsp;</span>
319
+ <span class="cline-any cline-no">&nbsp;</span>
320
+ <span class="cline-any cline-neutral">&nbsp;</span>
321
+ <span class="cline-any cline-neutral">&nbsp;</span>
173
322
  <span class="cline-any cline-neutral">&nbsp;</span>
174
323
  <span class="cline-any cline-yes">10x</span>
175
- <span class="cline-any cline-yes">1x</span>
324
+ <span class="cline-any cline-yes">10x</span>
325
+ <span class="cline-any cline-neutral">&nbsp;</span>
326
+ <span class="cline-any cline-neutral">&nbsp;</span>
327
+ <span class="cline-any cline-no">&nbsp;</span>
328
+ <span class="cline-any cline-neutral">&nbsp;</span>
329
+ <span class="cline-any cline-neutral">&nbsp;</span>
330
+ <span class="cline-any cline-neutral">&nbsp;</span>
331
+ <span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
+ <span class="cline-any cline-neutral">&nbsp;</span>
334
+ <span class="cline-any cline-no">&nbsp;</span>
335
+ <span class="cline-any cline-no">&nbsp;</span>
336
+ <span class="cline-any cline-neutral">&nbsp;</span>
337
+ <span class="cline-any cline-neutral">&nbsp;</span>
338
+ <span class="cline-any cline-no">&nbsp;</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-no">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
342
+ <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-neutral">&nbsp;</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-neutral">&nbsp;</span>
347
+ <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-neutral">&nbsp;</span>
349
+ <span class="cline-any cline-neutral">&nbsp;</span>
350
+ <span class="cline-any cline-neutral">&nbsp;</span>
351
+ <span class="cline-any cline-neutral">&nbsp;</span>
352
+ <span class="cline-any cline-neutral">&nbsp;</span>
353
+ <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-neutral">&nbsp;</span>
355
+ <span class="cline-any cline-neutral">&nbsp;</span>
356
+ <span class="cline-any cline-neutral">&nbsp;</span>
357
+ <span class="cline-any cline-neutral">&nbsp;</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-neutral">&nbsp;</span>
361
+ <span class="cline-any cline-neutral">&nbsp;</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-neutral">&nbsp;</span>
364
+ <span class="cline-any cline-neutral">&nbsp;</span>
365
+ <span class="cline-any cline-neutral">&nbsp;</span>
366
+ <span class="cline-any cline-yes">10x</span>
367
+ <span class="cline-any cline-neutral">&nbsp;</span>
368
+ <span class="cline-any cline-yes">10x</span>
369
+ <span class="cline-any cline-neutral">&nbsp;</span>
370
+ <span class="cline-any cline-neutral">&nbsp;</span>
371
+ <span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-yes">10x</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-yes">10x</span>
375
+ <span class="cline-any cline-yes">10x</span>
376
+ <span class="cline-any cline-no">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-neutral">&nbsp;</span>
380
+ <span class="cline-any cline-neutral">&nbsp;</span>
381
+ <span class="cline-any cline-neutral">&nbsp;</span>
382
+ <span class="cline-any cline-no">&nbsp;</span>
383
+ <span class="cline-any cline-neutral">&nbsp;</span>
384
+ <span class="cline-any cline-no">&nbsp;</span>
385
+ <span class="cline-any cline-no">&nbsp;</span>
386
+ <span class="cline-any cline-no">&nbsp;</span>
387
+ <span class="cline-any cline-no">&nbsp;</span>
388
+ <span class="cline-any cline-neutral">&nbsp;</span>
389
+ <span class="cline-any cline-neutral">&nbsp;</span>
390
+ <span class="cline-any cline-no">&nbsp;</span>
391
+ <span class="cline-any cline-no">&nbsp;</span>
392
+ <span class="cline-any cline-no">&nbsp;</span>
393
+ <span class="cline-any cline-no">&nbsp;</span>
394
+ <span class="cline-any cline-neutral">&nbsp;</span>
395
+ <span class="cline-any cline-neutral">&nbsp;</span>
396
+ <span class="cline-any cline-no">&nbsp;</span>
397
+ <span class="cline-any cline-no">&nbsp;</span>
398
+ <span class="cline-any cline-no">&nbsp;</span>
399
+ <span class="cline-any cline-neutral">&nbsp;</span>
400
+ <span class="cline-any cline-neutral">&nbsp;</span>
401
+ <span class="cline-any cline-yes">10x</span>
402
+ <span class="cline-any cline-yes">10x</span>
403
+ <span class="cline-any cline-yes">21x</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-neutral">&nbsp;</span>
406
+ <span class="cline-any cline-yes">21x</span>
407
+ <span class="cline-any cline-yes">21x</span>
408
+ <span class="cline-any cline-neutral">&nbsp;</span>
409
+ <span class="cline-any cline-yes">12x</span>
410
+ <span class="cline-any cline-yes">12x</span>
411
+ <span class="cline-any cline-neutral">&nbsp;</span>
412
+ <span class="cline-any cline-neutral">&nbsp;</span>
176
413
  <span class="cline-any cline-yes">9x</span>
177
- <span class="cline-any cline-yes">5x</span>
414
+ <span class="cline-any cline-yes">9x</span>
415
+ <span class="cline-any cline-neutral">&nbsp;</span>
416
+ <span class="cline-any cline-neutral">&nbsp;</span>
417
+ <span class="cline-any cline-no">&nbsp;</span>
418
+ <span class="cline-any cline-neutral">&nbsp;</span>
419
+ <span class="cline-any cline-neutral">&nbsp;</span>
178
420
  <span class="cline-any cline-neutral">&nbsp;</span>
179
421
  <span class="cline-any cline-neutral">&nbsp;</span>
180
422
  <span class="cline-any cline-yes">10x</span>
181
423
  <span class="cline-any cline-yes">1x</span>
424
+ <span class="cline-any cline-neutral">&nbsp;</span>
182
425
  <span class="cline-any cline-yes">1x</span>
183
426
  <span class="cline-any cline-yes">9x</span>
184
427
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -201,7 +444,21 @@
201
444
  <span class="cline-any cline-yes">10x</span>
202
445
  <span class="cline-any cline-yes">10x</span>
203
446
  <span class="cline-any cline-neutral">&nbsp;</span>
204
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { BundlerPlugins } from "@rnx-kit/config";
447
+ <span class="cline-any cline-yes">1x</span>
448
+ <span class="cline-any cline-neutral">&nbsp;</span>
449
+ <span class="cline-any cline-yes">9x</span>
450
+ <span class="cline-any cline-yes">9x</span>
451
+ <span class="cline-any cline-neutral">&nbsp;</span>
452
+ <span class="cline-any cline-no">&nbsp;</span>
453
+ <span class="cline-any cline-no">&nbsp;</span>
454
+ <span class="cline-any cline-no">&nbsp;</span>
455
+ <span class="cline-any cline-neutral">&nbsp;</span>
456
+ <span class="cline-any cline-neutral">&nbsp;</span>
457
+ <span class="cline-any cline-no">&nbsp;</span>
458
+ <span class="cline-any cline-neutral">&nbsp;</span>
459
+ <span class="cline-any cline-neutral">&nbsp;</span>
460
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { BundleParameters } from "@rnx-kit/config";
461
+ import { warn } from "@rnx-kit/console";
205
462
  import { CyclicDependencies } from "@rnx-kit/metro-plugin-cyclic-dependencies-detector";
206
463
  import { DuplicateDependencies } from "@rnx-kit/metro-plugin-duplicates-checker";
207
464
  import { TypeScriptPlugin } from "@rnx-kit/metro-plugin-typescript";
@@ -212,44 +469,158 @@ import {
212
469
  MetroSerializer as MetroSerializerEsbuild,
213
470
  } from "@rnx-kit/metro-serializer-esbuild";
214
471
  import type { InputConfigT, SerializerConfigT } from "metro-config";
472
+ import { getDefaultBundlerPlugins } from "./bundle/defaultPlugins";
473
+ &nbsp;
474
+ type MetroExtraParams = Pick&lt;
475
+ BundleParameters,
476
+ | "detectCyclicDependencies"
477
+ | "detectDuplicateDependencies"
478
+ | "typescriptValidation"
479
+ | "plugins"
480
+ | "treeShake"
481
+ &gt;;
482
+ &nbsp;
483
+ function resolvePlugin(name: string): string {
484
+ try {
485
+ return require.resolve(name);
486
+ } catch (_) {
487
+ <span class="cstat-no" title="statement not covered" > return require.resolve(name, { paths: [process.cwd()] });</span>
488
+ }
489
+ }
490
+ &nbsp;
491
+ function importPlugin(name: string) {
492
+ const plugin = require(resolvePlugin(name));
493
+ return plugin.default || plugin;
494
+ }
495
+ &nbsp;
496
+ function readLegacyOptions({
497
+ detectCyclicDependencies,
498
+ detectDuplicateDependencies,
499
+ typescriptValidation,
500
+ }: MetroExtraParams): string | undefined {
501
+ const oldOptions = [];
502
+ const deprecatedOptions: Record&lt;string, Record&lt;string, unknown&gt; | true&gt; = {};
503
+ &nbsp;
504
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (detectCyclicDependencies) {
505
+ <span class="cstat-no" title="statement not covered" > oldOptions.push("detectCyclicDependencies");</span>
506
+ <span class="cstat-no" title="statement not covered" > deprecatedOptions["@rnx-kit/metro-plugin-cyclic-dependencies-detector"] =</span>
507
+ detectCyclicDependencies;
508
+ }
509
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (detectDuplicateDependencies) {
510
+ <span class="cstat-no" title="statement not covered" > oldOptions.push("detectDuplicateDependencies");</span>
511
+ <span class="cstat-no" title="statement not covered" > deprecatedOptions["@rnx-kit/metro-plugin-duplicates-checker"] =</span>
512
+ detectDuplicateDependencies;
513
+ }
514
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (typescriptValidation) {
515
+ <span class="cstat-no" title="statement not covered" > oldOptions.push("typescriptValidation");</span>
516
+ <span class="cstat-no" title="statement not covered" > deprecatedOptions["@rnx-kit/metro-plugin-typescript"] =</span>
517
+ typescriptValidation;
518
+ }
519
+ &nbsp;
520
+ if (oldOptions.length === 0) {
521
+ return undefined;
522
+ }
523
+ &nbsp;
524
+ <span class="cstat-no" title="statement not covered" > return (</span>
525
+ `'${oldOptions.join("', '")}' have been replaced by a new 'plugins' ` +
526
+ "option. Below is an equivalent config:\n" +
527
+ "\n" +
528
+ ' "plugins": [\n' +
529
+ Object.entries(deprecatedOptions)
530
+ .map(<span class="fstat-no" title="function not covered" >([</span>name, options]) =&gt; {
531
+ <span class="cstat-no" title="statement not covered" > if (typeof options === "object") {</span>
532
+ const json = <span class="cstat-no" title="statement not covered" >JSON.stringify(options, null, 2)</span>
533
+ .split("\n")
534
+ .join("\n ");
535
+ <span class="cstat-no" title="statement not covered" > return ` ["${name}", ${json}]`;</span>
536
+ } else {
537
+ <span class="cstat-no" title="statement not covered" > return ` "${name}"`;</span>
538
+ }
539
+ })
540
+ .join(",\n") +
541
+ "\n" +
542
+ " ]\n" +
543
+ "\n" +
544
+ "For more details, see " +
545
+ "https://github.com/microsoft/rnx-kit/tree/main/packages/cli#readme"
546
+ );
547
+ }
215
548
  &nbsp;
216
549
  /**
217
550
  * Customize the Metro configuration.
218
551
  *
219
552
  * @param metroConfigReadonly Metro configuration
220
- * @param bundlerPlugins Plugins used to further customize Metro configuration
553
+ * @param extraParams Parameters used to further customize Metro configuration
221
554
  * @param print Optional function to use when printing status messages to the Metro console
222
555
  */
223
556
  export function customizeMetroConfig(
224
557
  metroConfigReadonly: InputConfigT,
225
- {
226
- detectCyclicDependencies,
227
- detectDuplicateDependencies,
228
- treeShake,
229
- typescriptValidation,
230
- }: BundlerPlugins,
558
+ extraParams: MetroExtraParams,
231
559
  print?: (message: string) =&gt; void
232
560
  ): void {
233
- // We will be making changes to the Metro configuration. Coerce from a
234
- // type with readonly props to a type where the props are writeable.
561
+ // We will be making changes to the Metro configuration. Coerce from a type
562
+ // with readonly props to a type where the props are writeable.
235
563
  const metroConfig = metroConfigReadonly as InputConfigT;
236
564
  &nbsp;
237
- const plugins: MetroPlugin[] = [];
238
- if (typeof detectDuplicateDependencies === "object") {
239
- plugins.push(DuplicateDependencies(detectDuplicateDependencies));
240
- } else if (detectDuplicateDependencies !== false) {
241
- plugins.push(DuplicateDependencies());
242
- }
243
- if (typeof detectCyclicDependencies === "object") {
244
- plugins.push(CyclicDependencies(detectCyclicDependencies));
245
- } else if (detectCyclicDependencies !== false) {
246
- plugins.push(CyclicDependencies());
565
+ const metroPlugins: MetroPlugin[] = [];
566
+ const serializerHooks: Record&lt;
567
+ string,
568
+ SerializerConfigT["experimentalSerializerHook"]
569
+ &gt; = {};
570
+ &nbsp;
571
+ const legacyWarning = readLegacyOptions(extraParams);
572
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (legacyWarning) {
573
+ <span class="cstat-no" title="statement not covered" > warn(legacyWarning);</span>
574
+ &nbsp;
575
+ const {
576
+ detectCyclicDependencies,
577
+ detectDuplicateDependencies,
578
+ typescriptValidation,
579
+ } = <span class="cstat-no" title="statement not covered" >extraParams;</span>
580
+ &nbsp;
581
+ <span class="cstat-no" title="statement not covered" > if (typeof detectDuplicateDependencies === "object") {</span>
582
+ <span class="cstat-no" title="statement not covered" > metroPlugins.push(DuplicateDependencies(detectDuplicateDependencies));</span>
583
+ } else <span class="cstat-no" title="statement not covered" >if (detectDuplicateDependencies !== false) {</span>
584
+ <span class="cstat-no" title="statement not covered" > metroPlugins.push(DuplicateDependencies());</span>
585
+ }
586
+ &nbsp;
587
+ <span class="cstat-no" title="statement not covered" > if (typeof detectCyclicDependencies === "object") {</span>
588
+ <span class="cstat-no" title="statement not covered" > metroPlugins.push(CyclicDependencies(detectCyclicDependencies));</span>
589
+ } else <span class="cstat-no" title="statement not covered" >if (detectCyclicDependencies !== false) {</span>
590
+ <span class="cstat-no" title="statement not covered" > metroPlugins.push(CyclicDependencies());</span>
591
+ }
592
+ &nbsp;
593
+ <span class="cstat-no" title="statement not covered" > if (typescriptValidation !== false) {</span>
594
+ const plugin = <span class="cstat-no" title="statement not covered" >TypeScriptPlugin(typescriptValidation, print);</span>
595
+ <span class="cstat-no" title="statement not covered" > serializerHooks["@rnx-kit/metro-plugin-typescript"] = plugin;</span>
596
+ }
597
+ } else {
598
+ const plugins = extraParams.plugins || getDefaultBundlerPlugins().plugins;
599
+ for (const entry of plugins) {
600
+ const [module, options] = Array.isArray(entry)
601
+ ? entry
602
+ : [entry, undefined];
603
+ const plugin = importPlugin(module);
604
+ switch (plugin.type) {
605
+ case "serializer":
606
+ metroPlugins.push(plugin(options));
607
+ break;
608
+ &nbsp;
609
+ case "serializerHook":
610
+ serializerHooks[module] = plugin(options, print);
611
+ break;
612
+ &nbsp;
613
+ <span class="branch-2 cbranch-no" title="branch not covered" > default:</span>
614
+ <span class="cstat-no" title="statement not covered" > throw new Error(`${module}: unknown plugin type: ${plugin.type}`);</span>
615
+ }
616
+ }
247
617
  }
248
618
  &nbsp;
249
- if (treeShake) {
250
- metroConfig.serializer.customSerializer = MetroSerializerEsbuild(plugins);
619
+ if (extraParams.treeShake) {
620
+ metroConfig.serializer.customSerializer =
621
+ MetroSerializerEsbuild(metroPlugins);
251
622
  Object.assign(metroConfig.transformer, esbuildTransformerConfig);
252
- } else if (plugins.length &gt; 0) {
623
+ } else if (metroPlugins.length &gt; 0) {
253
624
  // MetroSerializer acts as a CustomSerializer, and it works with both
254
625
  // older and newer versions of Metro. Older versions expect a return
255
626
  // value, while newer versions expect a promise.
@@ -261,14 +632,27 @@ export function customizeMetroConfig(
261
632
  // Since it can handle either scenario, just coerce it to whatever
262
633
  // the current version of Metro expects.
263
634
  metroConfig.serializer.customSerializer = MetroSerializer(
264
- plugins
635
+ metroPlugins
265
636
  ) as SerializerConfigT["customSerializer"];
266
637
  } else {
267
638
  delete metroConfig.serializer.customSerializer;
268
639
  }
269
640
  &nbsp;
270
- const hook = TypeScriptPlugin(typescriptValidation, print);
271
- metroConfig.serializer.experimentalSerializerHook = hook;
641
+ const hooks = Object.values(serializerHooks);
642
+ switch (hooks.length) {
643
+ case 0:
644
+ break;
645
+ case 1:
646
+ metroConfig.serializer.experimentalSerializerHook = hooks[0];
647
+ break;
648
+ <span class="branch-2 cbranch-no" title="branch not covered" > default:</span>
649
+ <span class="cstat-no" title="statement not covered" > metroConfig.serializer.experimentalSerializerHook = <span class="fstat-no" title="function not covered" >(g</span>raph, delta) =&gt; {</span>
650
+ <span class="cstat-no" title="statement not covered" > for (const hook of hooks) {</span>
651
+ <span class="cstat-no" title="statement not covered" > hook(graph, delta);</span>
652
+ }
653
+ };
654
+ <span class="cstat-no" title="statement not covered" > break;</span>
655
+ }
272
656
  }
273
657
  &nbsp;</pre></td></tr></table></pre>
274
658
 
@@ -277,7 +661,7 @@ export function customizeMetroConfig(
277
661
  <div class='footer quiet pad2 space-top1 center small'>
278
662
  Code coverage generated by
279
663
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
280
- at Mon Jan 16 2023 14:39:54 GMT+0000 (Coordinated Universal Time)
664
+ at Thu Jan 19 2023 18:03:10 GMT+0000 (Coordinated Universal Time)
281
665
  </div>
282
666
  <script src="../prettify.js"></script>
283
667
  <script>