@rnx-kit/cli 0.9.54 → 0.9.58

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 (41) hide show
  1. package/CHANGELOG.md +24 -3
  2. package/coverage/clover.xml +116 -73
  3. package/coverage/coverage-final.json +3 -2
  4. package/coverage/lcov-report/index.html +43 -28
  5. package/coverage/lcov-report/src/bundle/index.html +15 -15
  6. package/coverage/lcov-report/src/bundle/kit-config.ts.html +1 -1
  7. package/coverage/lcov-report/src/bundle/metro.ts.html +15 -78
  8. package/coverage/lcov-report/src/bundle/overrides.ts.html +1 -1
  9. package/coverage/lcov-report/src/index.html +21 -21
  10. package/coverage/lcov-report/src/metro-config.ts.html +112 -121
  11. package/coverage/lcov-report/src/typescript/index.html +111 -0
  12. package/coverage/lcov-report/src/typescript/project-cache.ts.html +626 -0
  13. package/coverage/lcov.info +208 -128
  14. package/lib/bundle/metro.d.ts +1 -2
  15. package/lib/bundle/metro.d.ts.map +1 -1
  16. package/lib/bundle/metro.js +5 -17
  17. package/lib/bundle/metro.js.map +1 -1
  18. package/lib/bundle.d.ts.map +1 -1
  19. package/lib/bundle.js +1 -3
  20. package/lib/bundle.js.map +1 -1
  21. package/lib/metro-config.d.ts +3 -3
  22. package/lib/metro-config.d.ts.map +1 -1
  23. package/lib/metro-config.js +58 -67
  24. package/lib/metro-config.js.map +1 -1
  25. package/lib/start.d.ts.map +1 -1
  26. package/lib/start.js +6 -17
  27. package/lib/start.js.map +1 -1
  28. package/lib/types.d.ts +3 -4
  29. package/lib/types.d.ts.map +1 -1
  30. package/lib/typescript/project-cache.d.ts +42 -0
  31. package/lib/typescript/project-cache.d.ts.map +1 -0
  32. package/lib/typescript/project-cache.js +114 -0
  33. package/lib/typescript/project-cache.js.map +1 -0
  34. package/package.json +2 -2
  35. package/src/bundle/metro.ts +6 -27
  36. package/src/bundle.ts +1 -4
  37. package/src/metro-config.ts +78 -81
  38. package/src/start.ts +7 -26
  39. package/src/types.ts +3 -5
  40. package/src/typescript/project-cache.ts +182 -0
  41. package/CHANGELOG.json +0 -3289
@@ -0,0 +1,626 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/typescript/project-cache.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">src/typescript</a> project-cache.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">8.7% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>4/46</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/14</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">10% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>1/10</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">9.09% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>4/44</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
+ </div>
58
+ <div class='status-line low'></div>
59
+ <pre><table class="coverage">
60
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
+ <a name='L2'></a><a href='#L2'>2</a>
62
+ <a name='L3'></a><a href='#L3'>3</a>
63
+ <a name='L4'></a><a href='#L4'>4</a>
64
+ <a name='L5'></a><a href='#L5'>5</a>
65
+ <a name='L6'></a><a href='#L6'>6</a>
66
+ <a name='L7'></a><a href='#L7'>7</a>
67
+ <a name='L8'></a><a href='#L8'>8</a>
68
+ <a name='L9'></a><a href='#L9'>9</a>
69
+ <a name='L10'></a><a href='#L10'>10</a>
70
+ <a name='L11'></a><a href='#L11'>11</a>
71
+ <a name='L12'></a><a href='#L12'>12</a>
72
+ <a name='L13'></a><a href='#L13'>13</a>
73
+ <a name='L14'></a><a href='#L14'>14</a>
74
+ <a name='L15'></a><a href='#L15'>15</a>
75
+ <a name='L16'></a><a href='#L16'>16</a>
76
+ <a name='L17'></a><a href='#L17'>17</a>
77
+ <a name='L18'></a><a href='#L18'>18</a>
78
+ <a name='L19'></a><a href='#L19'>19</a>
79
+ <a name='L20'></a><a href='#L20'>20</a>
80
+ <a name='L21'></a><a href='#L21'>21</a>
81
+ <a name='L22'></a><a href='#L22'>22</a>
82
+ <a name='L23'></a><a href='#L23'>23</a>
83
+ <a name='L24'></a><a href='#L24'>24</a>
84
+ <a name='L25'></a><a href='#L25'>25</a>
85
+ <a name='L26'></a><a href='#L26'>26</a>
86
+ <a name='L27'></a><a href='#L27'>27</a>
87
+ <a name='L28'></a><a href='#L28'>28</a>
88
+ <a name='L29'></a><a href='#L29'>29</a>
89
+ <a name='L30'></a><a href='#L30'>30</a>
90
+ <a name='L31'></a><a href='#L31'>31</a>
91
+ <a name='L32'></a><a href='#L32'>32</a>
92
+ <a name='L33'></a><a href='#L33'>33</a>
93
+ <a name='L34'></a><a href='#L34'>34</a>
94
+ <a name='L35'></a><a href='#L35'>35</a>
95
+ <a name='L36'></a><a href='#L36'>36</a>
96
+ <a name='L37'></a><a href='#L37'>37</a>
97
+ <a name='L38'></a><a href='#L38'>38</a>
98
+ <a name='L39'></a><a href='#L39'>39</a>
99
+ <a name='L40'></a><a href='#L40'>40</a>
100
+ <a name='L41'></a><a href='#L41'>41</a>
101
+ <a name='L42'></a><a href='#L42'>42</a>
102
+ <a name='L43'></a><a href='#L43'>43</a>
103
+ <a name='L44'></a><a href='#L44'>44</a>
104
+ <a name='L45'></a><a href='#L45'>45</a>
105
+ <a name='L46'></a><a href='#L46'>46</a>
106
+ <a name='L47'></a><a href='#L47'>47</a>
107
+ <a name='L48'></a><a href='#L48'>48</a>
108
+ <a name='L49'></a><a href='#L49'>49</a>
109
+ <a name='L50'></a><a href='#L50'>50</a>
110
+ <a name='L51'></a><a href='#L51'>51</a>
111
+ <a name='L52'></a><a href='#L52'>52</a>
112
+ <a name='L53'></a><a href='#L53'>53</a>
113
+ <a name='L54'></a><a href='#L54'>54</a>
114
+ <a name='L55'></a><a href='#L55'>55</a>
115
+ <a name='L56'></a><a href='#L56'>56</a>
116
+ <a name='L57'></a><a href='#L57'>57</a>
117
+ <a name='L58'></a><a href='#L58'>58</a>
118
+ <a name='L59'></a><a href='#L59'>59</a>
119
+ <a name='L60'></a><a href='#L60'>60</a>
120
+ <a name='L61'></a><a href='#L61'>61</a>
121
+ <a name='L62'></a><a href='#L62'>62</a>
122
+ <a name='L63'></a><a href='#L63'>63</a>
123
+ <a name='L64'></a><a href='#L64'>64</a>
124
+ <a name='L65'></a><a href='#L65'>65</a>
125
+ <a name='L66'></a><a href='#L66'>66</a>
126
+ <a name='L67'></a><a href='#L67'>67</a>
127
+ <a name='L68'></a><a href='#L68'>68</a>
128
+ <a name='L69'></a><a href='#L69'>69</a>
129
+ <a name='L70'></a><a href='#L70'>70</a>
130
+ <a name='L71'></a><a href='#L71'>71</a>
131
+ <a name='L72'></a><a href='#L72'>72</a>
132
+ <a name='L73'></a><a href='#L73'>73</a>
133
+ <a name='L74'></a><a href='#L74'>74</a>
134
+ <a name='L75'></a><a href='#L75'>75</a>
135
+ <a name='L76'></a><a href='#L76'>76</a>
136
+ <a name='L77'></a><a href='#L77'>77</a>
137
+ <a name='L78'></a><a href='#L78'>78</a>
138
+ <a name='L79'></a><a href='#L79'>79</a>
139
+ <a name='L80'></a><a href='#L80'>80</a>
140
+ <a name='L81'></a><a href='#L81'>81</a>
141
+ <a name='L82'></a><a href='#L82'>82</a>
142
+ <a name='L83'></a><a href='#L83'>83</a>
143
+ <a name='L84'></a><a href='#L84'>84</a>
144
+ <a name='L85'></a><a href='#L85'>85</a>
145
+ <a name='L86'></a><a href='#L86'>86</a>
146
+ <a name='L87'></a><a href='#L87'>87</a>
147
+ <a name='L88'></a><a href='#L88'>88</a>
148
+ <a name='L89'></a><a href='#L89'>89</a>
149
+ <a name='L90'></a><a href='#L90'>90</a>
150
+ <a name='L91'></a><a href='#L91'>91</a>
151
+ <a name='L92'></a><a href='#L92'>92</a>
152
+ <a name='L93'></a><a href='#L93'>93</a>
153
+ <a name='L94'></a><a href='#L94'>94</a>
154
+ <a name='L95'></a><a href='#L95'>95</a>
155
+ <a name='L96'></a><a href='#L96'>96</a>
156
+ <a name='L97'></a><a href='#L97'>97</a>
157
+ <a name='L98'></a><a href='#L98'>98</a>
158
+ <a name='L99'></a><a href='#L99'>99</a>
159
+ <a name='L100'></a><a href='#L100'>100</a>
160
+ <a name='L101'></a><a href='#L101'>101</a>
161
+ <a name='L102'></a><a href='#L102'>102</a>
162
+ <a name='L103'></a><a href='#L103'>103</a>
163
+ <a name='L104'></a><a href='#L104'>104</a>
164
+ <a name='L105'></a><a href='#L105'>105</a>
165
+ <a name='L106'></a><a href='#L106'>106</a>
166
+ <a name='L107'></a><a href='#L107'>107</a>
167
+ <a name='L108'></a><a href='#L108'>108</a>
168
+ <a name='L109'></a><a href='#L109'>109</a>
169
+ <a name='L110'></a><a href='#L110'>110</a>
170
+ <a name='L111'></a><a href='#L111'>111</a>
171
+ <a name='L112'></a><a href='#L112'>112</a>
172
+ <a name='L113'></a><a href='#L113'>113</a>
173
+ <a name='L114'></a><a href='#L114'>114</a>
174
+ <a name='L115'></a><a href='#L115'>115</a>
175
+ <a name='L116'></a><a href='#L116'>116</a>
176
+ <a name='L117'></a><a href='#L117'>117</a>
177
+ <a name='L118'></a><a href='#L118'>118</a>
178
+ <a name='L119'></a><a href='#L119'>119</a>
179
+ <a name='L120'></a><a href='#L120'>120</a>
180
+ <a name='L121'></a><a href='#L121'>121</a>
181
+ <a name='L122'></a><a href='#L122'>122</a>
182
+ <a name='L123'></a><a href='#L123'>123</a>
183
+ <a name='L124'></a><a href='#L124'>124</a>
184
+ <a name='L125'></a><a href='#L125'>125</a>
185
+ <a name='L126'></a><a href='#L126'>126</a>
186
+ <a name='L127'></a><a href='#L127'>127</a>
187
+ <a name='L128'></a><a href='#L128'>128</a>
188
+ <a name='L129'></a><a href='#L129'>129</a>
189
+ <a name='L130'></a><a href='#L130'>130</a>
190
+ <a name='L131'></a><a href='#L131'>131</a>
191
+ <a name='L132'></a><a href='#L132'>132</a>
192
+ <a name='L133'></a><a href='#L133'>133</a>
193
+ <a name='L134'></a><a href='#L134'>134</a>
194
+ <a name='L135'></a><a href='#L135'>135</a>
195
+ <a name='L136'></a><a href='#L136'>136</a>
196
+ <a name='L137'></a><a href='#L137'>137</a>
197
+ <a name='L138'></a><a href='#L138'>138</a>
198
+ <a name='L139'></a><a href='#L139'>139</a>
199
+ <a name='L140'></a><a href='#L140'>140</a>
200
+ <a name='L141'></a><a href='#L141'>141</a>
201
+ <a name='L142'></a><a href='#L142'>142</a>
202
+ <a name='L143'></a><a href='#L143'>143</a>
203
+ <a name='L144'></a><a href='#L144'>144</a>
204
+ <a name='L145'></a><a href='#L145'>145</a>
205
+ <a name='L146'></a><a href='#L146'>146</a>
206
+ <a name='L147'></a><a href='#L147'>147</a>
207
+ <a name='L148'></a><a href='#L148'>148</a>
208
+ <a name='L149'></a><a href='#L149'>149</a>
209
+ <a name='L150'></a><a href='#L150'>150</a>
210
+ <a name='L151'></a><a href='#L151'>151</a>
211
+ <a name='L152'></a><a href='#L152'>152</a>
212
+ <a name='L153'></a><a href='#L153'>153</a>
213
+ <a name='L154'></a><a href='#L154'>154</a>
214
+ <a name='L155'></a><a href='#L155'>155</a>
215
+ <a name='L156'></a><a href='#L156'>156</a>
216
+ <a name='L157'></a><a href='#L157'>157</a>
217
+ <a name='L158'></a><a href='#L158'>158</a>
218
+ <a name='L159'></a><a href='#L159'>159</a>
219
+ <a name='L160'></a><a href='#L160'>160</a>
220
+ <a name='L161'></a><a href='#L161'>161</a>
221
+ <a name='L162'></a><a href='#L162'>162</a>
222
+ <a name='L163'></a><a href='#L163'>163</a>
223
+ <a name='L164'></a><a href='#L164'>164</a>
224
+ <a name='L165'></a><a href='#L165'>165</a>
225
+ <a name='L166'></a><a href='#L166'>166</a>
226
+ <a name='L167'></a><a href='#L167'>167</a>
227
+ <a name='L168'></a><a href='#L168'>168</a>
228
+ <a name='L169'></a><a href='#L169'>169</a>
229
+ <a name='L170'></a><a href='#L170'>170</a>
230
+ <a name='L171'></a><a href='#L171'>171</a>
231
+ <a name='L172'></a><a href='#L172'>172</a>
232
+ <a name='L173'></a><a href='#L173'>173</a>
233
+ <a name='L174'></a><a href='#L174'>174</a>
234
+ <a name='L175'></a><a href='#L175'>175</a>
235
+ <a name='L176'></a><a href='#L176'>176</a>
236
+ <a name='L177'></a><a href='#L177'>177</a>
237
+ <a name='L178'></a><a href='#L178'>178</a>
238
+ <a name='L179'></a><a href='#L179'>179</a>
239
+ <a name='L180'></a><a href='#L180'>180</a>
240
+ <a name='L181'></a><a href='#L181'>181</a>
241
+ <a name='L182'></a><a href='#L182'>182</a>
242
+ <a name='L183'></a><a href='#L183'>183</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
243
+ <span class="cline-any cline-neutral">&nbsp;</span>
244
+ <span class="cline-any cline-neutral">&nbsp;</span>
245
+ <span class="cline-any cline-neutral">&nbsp;</span>
246
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
271
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
275
+ <span class="cline-any cline-neutral">&nbsp;</span>
276
+ <span class="cline-any cline-neutral">&nbsp;</span>
277
+ <span class="cline-any cline-neutral">&nbsp;</span>
278
+ <span class="cline-any cline-neutral">&nbsp;</span>
279
+ <span class="cline-any cline-neutral">&nbsp;</span>
280
+ <span class="cline-any cline-neutral">&nbsp;</span>
281
+ <span class="cline-any cline-neutral">&nbsp;</span>
282
+ <span class="cline-any cline-neutral">&nbsp;</span>
283
+ <span class="cline-any cline-neutral">&nbsp;</span>
284
+ <span class="cline-any cline-neutral">&nbsp;</span>
285
+ <span class="cline-any cline-neutral">&nbsp;</span>
286
+ <span class="cline-any cline-neutral">&nbsp;</span>
287
+ <span class="cline-any cline-neutral">&nbsp;</span>
288
+ <span class="cline-any cline-neutral">&nbsp;</span>
289
+ <span class="cline-any cline-neutral">&nbsp;</span>
290
+ <span class="cline-any cline-neutral">&nbsp;</span>
291
+ <span class="cline-any cline-neutral">&nbsp;</span>
292
+ <span class="cline-any cline-neutral">&nbsp;</span>
293
+ <span class="cline-any cline-neutral">&nbsp;</span>
294
+ <span class="cline-any cline-neutral">&nbsp;</span>
295
+ <span class="cline-any cline-neutral">&nbsp;</span>
296
+ <span class="cline-any cline-neutral">&nbsp;</span>
297
+ <span class="cline-any cline-neutral">&nbsp;</span>
298
+ <span class="cline-any cline-neutral">&nbsp;</span>
299
+ <span class="cline-any cline-neutral">&nbsp;</span>
300
+ <span class="cline-any cline-yes">6x</span>
301
+ <span class="cline-any cline-yes">6x</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-neutral">&nbsp;</span>
305
+ <span class="cline-any cline-neutral">&nbsp;</span>
306
+ <span class="cline-any cline-neutral">&nbsp;</span>
307
+ <span class="cline-any cline-yes">6x</span>
308
+ <span class="cline-any cline-neutral">&nbsp;</span>
309
+ <span class="cline-any cline-neutral">&nbsp;</span>
310
+ <span class="cline-any cline-neutral">&nbsp;</span>
311
+ <span class="cline-any cline-no">&nbsp;</span>
312
+ <span class="cline-any cline-no">&nbsp;</span>
313
+ <span class="cline-any cline-no">&nbsp;</span>
314
+ <span class="cline-any cline-neutral">&nbsp;</span>
315
+ <span class="cline-any cline-neutral">&nbsp;</span>
316
+ <span class="cline-any cline-neutral">&nbsp;</span>
317
+ <span class="cline-any cline-neutral">&nbsp;</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-no">&nbsp;</span>
321
+ <span class="cline-any cline-neutral">&nbsp;</span>
322
+ <span class="cline-any cline-neutral">&nbsp;</span>
323
+ <span class="cline-any cline-neutral">&nbsp;</span>
324
+ <span class="cline-any cline-neutral">&nbsp;</span>
325
+ <span class="cline-any cline-no">&nbsp;</span>
326
+ <span class="cline-any cline-neutral">&nbsp;</span>
327
+ <span class="cline-any cline-neutral">&nbsp;</span>
328
+ <span class="cline-any cline-neutral">&nbsp;</span>
329
+ <span class="cline-any cline-no">&nbsp;</span>
330
+ <span class="cline-any cline-neutral">&nbsp;</span>
331
+ <span class="cline-any cline-no">&nbsp;</span>
332
+ <span class="cline-any cline-no">&nbsp;</span>
333
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
337
+ <span class="cline-any cline-no">&nbsp;</span>
338
+ <span class="cline-any cline-neutral">&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-no">&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-no">&nbsp;</span>
360
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
365
+ <span class="cline-any cline-no">&nbsp;</span>
366
+ <span class="cline-any cline-no">&nbsp;</span>
367
+ <span class="cline-any cline-no">&nbsp;</span>
368
+ <span class="cline-any cline-no">&nbsp;</span>
369
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&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-no">&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-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-neutral">&nbsp;</span>
384
+ <span class="cline-any cline-neutral">&nbsp;</span>
385
+ <span class="cline-any cline-neutral">&nbsp;</span>
386
+ <span class="cline-any cline-no">&nbsp;</span>
387
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
391
+ <span class="cline-any cline-neutral">&nbsp;</span>
392
+ <span class="cline-any cline-neutral">&nbsp;</span>
393
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
399
+ <span class="cline-any cline-no">&nbsp;</span>
400
+ <span class="cline-any cline-no">&nbsp;</span>
401
+ <span class="cline-any cline-no">&nbsp;</span>
402
+ <span class="cline-any cline-no">&nbsp;</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-no">&nbsp;</span>
405
+ <span class="cline-any cline-neutral">&nbsp;</span>
406
+ <span class="cline-any cline-neutral">&nbsp;</span>
407
+ <span class="cline-any cline-neutral">&nbsp;</span>
408
+ <span class="cline-any cline-no">&nbsp;</span>
409
+ <span class="cline-any cline-no">&nbsp;</span>
410
+ <span class="cline-any cline-no">&nbsp;</span>
411
+ <span class="cline-any cline-no">&nbsp;</span>
412
+ <span class="cline-any cline-no">&nbsp;</span>
413
+ <span class="cline-any cline-neutral">&nbsp;</span>
414
+ <span class="cline-any cline-no">&nbsp;</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-neutral">&nbsp;</span>
418
+ <span class="cline-any cline-neutral">&nbsp;</span>
419
+ <span class="cline-any cline-yes">6x</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-neutral">&nbsp;</span>
422
+ <span class="cline-any cline-neutral">&nbsp;</span>
423
+ <span class="cline-any cline-neutral">&nbsp;</span>
424
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { findPackageDir } from "@rnx-kit/tools-node";
425
+ import {
426
+ AllPlatforms,
427
+ platformExtensions,
428
+ } from "@rnx-kit/tools-react-native/platform";
429
+ import { changeHostToUseReactNativeResolver } from "@rnx-kit/typescript-react-native-resolver";
430
+ import {
431
+ createDiagnosticWriter,
432
+ Project,
433
+ readConfigFile,
434
+ } from "@rnx-kit/typescript-service";
435
+ import path from "path";
436
+ import ts from "typescript";
437
+ &nbsp;
438
+ export type ProjectInfo = {
439
+ tsproject: Project;
440
+ tssourceFiles: Set&lt;string&gt;;
441
+ };
442
+ &nbsp;
443
+ /**
444
+ * Collection of TypeScript projects, separated by their target platform.
445
+ *
446
+ * Target platform is a react-native concept, not a TypeScript concept.
447
+ * However, each project is configured with react-native module resolution,
448
+ * which means the module file graph could vary by platform. And that means
449
+ * each platform could yield different type errors.
450
+ *
451
+ * For example, `import { f } from "./utils"` could load `./utils.android.ts`
452
+ * for Android and `./utils.ios.ts` iOS.
453
+ */
454
+ export interface ProjectCache {
455
+ /**
456
+ * Discard all cached projects targeting a specific platform.
457
+ *
458
+ * @param platform Target platform
459
+ */
460
+ clearPlatform(platform: AllPlatforms): void;
461
+ &nbsp;
462
+ /**
463
+ * Get info on the project which targets a specific platform and contains a specific
464
+ * source file. If the project is not cached, load it and add it to the cache.
465
+ *
466
+ * @param platform Target platform
467
+ * @param sourceFile Source file
468
+ * @returns Project targeting the given platform and containing the given source file
469
+ */
470
+ getProjectInfo(sourceFile: string, platform: AllPlatforms): ProjectInfo;
471
+ }
472
+ &nbsp;
473
+ /**
474
+ * Create an empty cache for holding TypeScript projects.
475
+ *
476
+ * @param print Optional method for printing messages. When not set, messages are printed to the console.
477
+ * @returns Empty project cache
478
+ */
479
+ export function createProjectCache(
480
+ print?: (message: string) =&gt; void
481
+ ): ProjectCache {
482
+ const documentRegistry = ts.createDocumentRegistry();
483
+ const diagnosticWriter = createDiagnosticWriter(print);
484
+ &nbsp;
485
+ // Collection of projects organized by root directory, then by platform.
486
+ const projects: Record&lt;
487
+ string,
488
+ Partial&lt;Record&lt;AllPlatforms, ProjectInfo&gt;&gt;
489
+ &gt; = {};
490
+ &nbsp;
491
+ function <span class="fstat-no" title="function not covered" >findProjectRoot(</span>sourceFile: string): string {
492
+ // Search known root directories to see if the source file is in one of them.
493
+ <span class="cstat-no" title="statement not covered" > for (const root of Object.keys(projects)) {</span>
494
+ <span class="cstat-no" title="statement not covered" > if (sourceFile.startsWith(root)) {</span>
495
+ <span class="cstat-no" title="statement not covered" > return root;</span>
496
+ }
497
+ }
498
+ &nbsp;
499
+ // Search the file system for the root of source file's package.
500
+ const root = <span class="cstat-no" title="statement not covered" >findPackageDir(path.dirname(sourceFile));</span>
501
+ <span class="cstat-no" title="statement not covered" > if (!root) {</span>
502
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
503
+ `Cannot find project root for source file '${sourceFile}'`
504
+ );
505
+ }
506
+ &nbsp;
507
+ <span class="cstat-no" title="statement not covered" > return root;</span>
508
+ }
509
+ &nbsp;
510
+ function <span class="fstat-no" title="function not covered" >readTSConfig(</span>root: string): ts.ParsedCommandLine {
511
+ const configFileName = <span class="cstat-no" title="statement not covered" >path.join(root, "tsconfig.json");</span>
512
+ &nbsp;
513
+ const cmdLine = <span class="cstat-no" title="statement not covered" >readConfigFile(configFileName);</span>
514
+ <span class="cstat-no" title="statement not covered" > if (!cmdLine) {</span>
515
+ <span class="cstat-no" title="statement not covered" > throw new Error(`Failed to load '${configFileName}'`);</span>
516
+ } else <span class="cstat-no" title="statement not covered" >if (cmdLine.errors.length &gt; 0) {</span>
517
+ const writer = <span class="cstat-no" title="statement not covered" >createDiagnosticWriter();</span>
518
+ <span class="cstat-no" title="statement not covered" > cmdLine.errors.forEach(<span class="fstat-no" title="function not covered" >(e</span>) =&gt; <span class="cstat-no" title="statement not covered" >writer.print(e))</span>;</span>
519
+ <span class="cstat-no" title="statement not covered" > throw new Error(`Failed to load '${configFileName}'`);</span>
520
+ }
521
+ &nbsp;
522
+ <span class="cstat-no" title="statement not covered" > return cmdLine;</span>
523
+ }
524
+ &nbsp;
525
+ function <span class="fstat-no" title="function not covered" >createProjectInfo(</span>
526
+ root: string,
527
+ platform: AllPlatforms
528
+ ): ProjectInfo {
529
+ // Load the TypeScript configuration file for this project.
530
+ const cmdLine = <span class="cstat-no" title="statement not covered" >readTSConfig(root);</span>
531
+ &nbsp;
532
+ // Trim down the list of source files found by TypeScript. This ensures
533
+ // that only explicitly added files are loaded and parsed by TypeScript.
534
+ // This is a perf optimization. We don't want to spend cycles on files
535
+ // that won't be used, such as *.android.ts when bundling for ios.
536
+ //
537
+ // The exception to this rule are .d.ts files. They hold global types,
538
+ // modules and namespaces, and having them in the project is the only
539
+ // way they can be loaded.
540
+ &nbsp;
541
+ const tssourceFiles = <span class="cstat-no" title="statement not covered" >new Set(cmdLine.fileNames);</span>
542
+ <span class="cstat-no" title="statement not covered" > cmdLine.fileNames = cmdLine.fileNames.filter(<span class="fstat-no" title="function not covered" >(f</span>) =&gt; <span class="cstat-no" title="statement not covered" >f.endsWith(".d.ts"))</span>;</span>
543
+ &nbsp;
544
+ // Create a TypeScript project using the configuration file. Enhance the
545
+ // underlying TS language service with our react-native module resolver.
546
+ const enhanceLanguageServiceHost = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(h</span>ost: ts.LanguageServiceHost): void =&gt; {</span>
547
+ const platformExtensionNames = <span class="cstat-no" title="statement not covered" >platformExtensions(platform);</span>
548
+ const disableReactNativePackageSubstitution = <span class="cstat-no" title="statement not covered" >true;</span>
549
+ const traceReactNativeModuleResolutionErrors = <span class="cstat-no" title="statement not covered" >false;</span>
550
+ const traceResolutionLog = <span class="cstat-no" title="statement not covered" >undefined;</span>
551
+ <span class="cstat-no" title="statement not covered" > changeHostToUseReactNativeResolver({</span>
552
+ host,
553
+ options: cmdLine.options,
554
+ platform,
555
+ platformExtensionNames,
556
+ disableReactNativePackageSubstitution,
557
+ traceReactNativeModuleResolutionErrors,
558
+ traceResolutionLog,
559
+ });
560
+ };
561
+ const tsproject = <span class="cstat-no" title="statement not covered" >new Project(</span>
562
+ documentRegistry,
563
+ diagnosticWriter,
564
+ cmdLine,
565
+ enhanceLanguageServiceHost
566
+ );
567
+ &nbsp;
568
+ <span class="cstat-no" title="statement not covered" > return {</span>
569
+ tsproject,
570
+ tssourceFiles,
571
+ };
572
+ }
573
+ &nbsp;
574
+ function <span class="fstat-no" title="function not covered" >getProjectInfo(</span>
575
+ sourceFile: string,
576
+ platform: AllPlatforms
577
+ ): ProjectInfo {
578
+ const root = <span class="cstat-no" title="statement not covered" >findProjectRoot(sourceFile);</span>
579
+ <span class="cstat-no" title="statement not covered" > projects[root] ||= {};</span>
580
+ &nbsp;
581
+ let info = <span class="cstat-no" title="statement not covered" >projects[root][platform];</span>
582
+ <span class="cstat-no" title="statement not covered" > if (!info) {</span>
583
+ <span class="cstat-no" title="statement not covered" > info = createProjectInfo(root, platform);</span>
584
+ <span class="cstat-no" title="statement not covered" > projects[root][platform] = info;</span>
585
+ }
586
+ <span class="cstat-no" title="statement not covered" > return info;</span>
587
+ }
588
+ &nbsp;
589
+ function <span class="fstat-no" title="function not covered" >clearPlatform(</span>platform: AllPlatforms): void {
590
+ <span class="cstat-no" title="statement not covered" > Object.values(projects).forEach(<span class="fstat-no" title="function not covered" >(p</span>rojectsByPlatform) =&gt; {</span>
591
+ const info = <span class="cstat-no" title="statement not covered" >projectsByPlatform[platform];</span>
592
+ <span class="cstat-no" title="statement not covered" > if (info) {</span>
593
+ <span class="cstat-no" title="statement not covered" > if (info.tsproject) {</span>
594
+ <span class="cstat-no" title="statement not covered" > info.tsproject.dispose();</span>
595
+ }
596
+ <span class="cstat-no" title="statement not covered" > delete projectsByPlatform[platform];</span>
597
+ }
598
+ });
599
+ }
600
+ &nbsp;
601
+ return {
602
+ clearPlatform,
603
+ getProjectInfo,
604
+ };
605
+ }
606
+ &nbsp;</pre></td></tr></table></pre>
607
+
608
+ <div class='push'></div><!-- for sticky footer -->
609
+ </div><!-- /wrapper -->
610
+ <div class='footer quiet pad2 space-top1 center small'>
611
+ Code coverage generated by
612
+ <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
613
+ at Tue Dec 21 2021 01:09:41 GMT+0000 (Coordinated Universal Time)
614
+ </div>
615
+ </div>
616
+ <script src="../../prettify.js"></script>
617
+ <script>
618
+ window.onload = function () {
619
+ prettyPrint();
620
+ };
621
+ </script>
622
+ <script src="../../sorter.js"></script>
623
+ <script src="../../block-navigation.js"></script>
624
+ </body>
625
+ </html>
626
+