@nocios/crudify-ui 5.0.22 → 5.0.26

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 (75) hide show
  1. package/coverage/coverage-final.json +47 -6
  2. package/coverage/index.html +257 -92
  3. package/dist/chunk-4AEUOTN2.js +1 -0
  4. package/dist/{chunk-46CKGJCC.js → chunk-4R472VF6.js} +1 -1
  5. package/dist/{chunk-6LMZ3PZW.js → chunk-BBA4D4JY.js} +1 -1
  6. package/dist/{chunk-5GGDNAMR.mjs → chunk-I2GWDIIJ.mjs} +1 -1
  7. package/dist/{chunk-LZTU56BB.mjs → chunk-WVEMQ7DL.mjs} +1 -1
  8. package/dist/chunk-Z2GYZNAL.mjs +1 -0
  9. package/dist/components.js +1 -1
  10. package/dist/components.mjs +1 -1
  11. package/dist/hooks.d.mts +1 -1
  12. package/dist/hooks.d.ts +1 -1
  13. package/dist/hooks.js +1 -1
  14. package/dist/hooks.mjs +1 -1
  15. package/dist/{index-SS8n9MbX.d.mts → index-8iJiQ3bI.d.mts} +43 -30
  16. package/dist/{index-Dp5wNqtm.d.ts → index-BaP3eAZd.d.ts} +43 -30
  17. package/dist/index.d.mts +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.js +2 -2
  20. package/dist/index.mjs +1 -1
  21. package/package.json +1 -1
  22. package/vitest.config.ts +1 -1
  23. package/coverage/components/CrudiaAutoGenerate.tsx.html +0 -583
  24. package/coverage/components/CrudiaFileField.tsx.html +0 -3754
  25. package/coverage/components/CrudiaMarkdownField.tsx.html +0 -619
  26. package/coverage/components/CrudifyInitializer.tsx.html +0 -676
  27. package/coverage/components/CrudifyLogin/context/I18nProvider.tsx.html +0 -397
  28. package/coverage/components/CrudifyLogin/context/LoginStateProvider.tsx.html +0 -1258
  29. package/coverage/components/CrudifyLogin/context/index.html +0 -131
  30. package/coverage/components/CrudifyLogin/hooks/index.html +0 -131
  31. package/coverage/components/CrudifyLogin/hooks/useCrudifyLogin.ts.html +0 -391
  32. package/coverage/components/CrudifyLogin/hooks/useTranslationsFromUrl.ts.html +0 -292
  33. package/coverage/components/CrudifyLogin/utils/cookies.ts.html +0 -97
  34. package/coverage/components/CrudifyLogin/utils/index.html +0 -131
  35. package/coverage/components/CrudifyLogin/utils/secureStorage.ts.html +0 -847
  36. package/coverage/components/GlobalNotificationProvider.tsx.html +0 -781
  37. package/coverage/components/PublicPolicies/constants.ts.html +0 -127
  38. package/coverage/components/PublicPolicies/index.html +0 -116
  39. package/coverage/components/Routing/AuthRoute.tsx.html +0 -235
  40. package/coverage/components/Routing/ProtectedRoute.tsx.html +0 -334
  41. package/coverage/components/Routing/index.html +0 -131
  42. package/coverage/components/SessionLoadingScreen/index.html +0 -116
  43. package/coverage/components/SessionLoadingScreen/index.tsx.html +0 -388
  44. package/coverage/components/SessionTimeIndicator/index.html +0 -116
  45. package/coverage/components/SessionTimeIndicator/index.tsx.html +0 -505
  46. package/coverage/components/index.html +0 -176
  47. package/coverage/core/CrudifyInitializationManager.ts.html +0 -1132
  48. package/coverage/core/SessionManager.ts.html +0 -2341
  49. package/coverage/core/index.html +0 -131
  50. package/coverage/hooks/index.html +0 -131
  51. package/coverage/hooks/useAutoGenerate.ts.html +0 -562
  52. package/coverage/hooks/useFileUpload.ts.html +0 -3088
  53. package/coverage/providers/CrudifyThemeProvider.tsx.html +0 -289
  54. package/coverage/providers/TranslationsProvider.tsx.html +0 -1450
  55. package/coverage/providers/index.html +0 -131
  56. package/coverage/services/credentialsEventBus.ts.html +0 -310
  57. package/coverage/services/crudifyAdminWrapper.ts.html +0 -745
  58. package/coverage/services/index.html +0 -146
  59. package/coverage/services/translationService.ts.html +0 -1318
  60. package/coverage/translations/critical.ts.html +0 -1012
  61. package/coverage/translations/index.html +0 -116
  62. package/coverage/utils/authErrorDetector.ts.html +0 -631
  63. package/coverage/utils/authEventBus.ts.html +0 -445
  64. package/coverage/utils/configResolver.ts.html +0 -661
  65. package/coverage/utils/errorHandler.ts.html +0 -1264
  66. package/coverage/utils/errorTranslation.ts.html +0 -862
  67. package/coverage/utils/index.html +0 -266
  68. package/coverage/utils/jwtUtils.ts.html +0 -301
  69. package/coverage/utils/logger.ts.html +0 -910
  70. package/coverage/utils/navigationTracker.ts.html +0 -565
  71. package/coverage/utils/redirectSecurity.ts.html +0 -490
  72. package/coverage/utils/tokenStorage.ts.html +0 -1438
  73. package/coverage/utils/webCrypto.ts.html +0 -472
  74. package/dist/chunk-IKYHYKJB.js +0 -1
  75. package/dist/chunk-NAAOS7YG.mjs +0 -1
@@ -1,1132 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for core/CrudifyInitializationManager.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">core</a> CrudifyInitializationManager.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">91.69% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>320/349</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'>45/60</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>11/11</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">91.69% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>320/349</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>
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>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
416
- <span class="cline-any cline-yes">1x</span>
417
- <span class="cline-any cline-yes">1x</span>
418
- <span class="cline-any cline-yes">1x</span>
419
- <span class="cline-any cline-yes">1x</span>
420
- <span class="cline-any cline-yes">1x</span>
421
- <span class="cline-any cline-yes">1x</span>
422
- <span class="cline-any cline-yes">1x</span>
423
- <span class="cline-any cline-yes">1x</span>
424
- <span class="cline-any cline-yes">1x</span>
425
- <span class="cline-any cline-yes">1x</span>
426
- <span class="cline-any cline-yes">1x</span>
427
- <span class="cline-any cline-yes">1x</span>
428
- <span class="cline-any cline-yes">1x</span>
429
- <span class="cline-any cline-yes">1x</span>
430
- <span class="cline-any cline-yes">1x</span>
431
- <span class="cline-any cline-yes">1x</span>
432
- <span class="cline-any cline-yes">1x</span>
433
- <span class="cline-any cline-yes">1x</span>
434
- <span class="cline-any cline-yes">1x</span>
435
- <span class="cline-any cline-yes">1x</span>
436
- <span class="cline-any cline-yes">1x</span>
437
- <span class="cline-any cline-yes">1x</span>
438
- <span class="cline-any cline-yes">1x</span>
439
- <span class="cline-any cline-yes">1x</span>
440
- <span class="cline-any cline-yes">1x</span>
441
- <span class="cline-any cline-yes">1x</span>
442
- <span class="cline-any cline-yes">1x</span>
443
- <span class="cline-any cline-yes">1x</span>
444
- <span class="cline-any cline-yes">1x</span>
445
- <span class="cline-any cline-yes">1x</span>
446
- <span class="cline-any cline-yes">1x</span>
447
- <span class="cline-any cline-yes">1x</span>
448
- <span class="cline-any cline-yes">1x</span>
449
- <span class="cline-any cline-yes">1x</span>
450
- <span class="cline-any cline-yes">1x</span>
451
- <span class="cline-any cline-yes">1x</span>
452
- <span class="cline-any cline-yes">1x</span>
453
- <span class="cline-any cline-yes">1x</span>
454
- <span class="cline-any cline-yes">1x</span>
455
- <span class="cline-any cline-yes">1x</span>
456
- <span class="cline-any cline-yes">1x</span>
457
- <span class="cline-any cline-yes">1x</span>
458
- <span class="cline-any cline-yes">1x</span>
459
- <span class="cline-any cline-yes">1x</span>
460
- <span class="cline-any cline-yes">1x</span>
461
- <span class="cline-any cline-yes">1x</span>
462
- <span class="cline-any cline-yes">1x</span>
463
- <span class="cline-any cline-yes">1x</span>
464
- <span class="cline-any cline-yes">1x</span>
465
- <span class="cline-any cline-yes">1x</span>
466
- <span class="cline-any cline-yes">1x</span>
467
- <span class="cline-any cline-yes">1x</span>
468
- <span class="cline-any cline-yes">1x</span>
469
- <span class="cline-any cline-yes">1x</span>
470
- <span class="cline-any cline-yes">1x</span>
471
- <span class="cline-any cline-yes">1x</span>
472
- <span class="cline-any cline-yes">1x</span>
473
- <span class="cline-any cline-yes">1x</span>
474
- <span class="cline-any cline-yes">1x</span>
475
- <span class="cline-any cline-yes">1x</span>
476
- <span class="cline-any cline-yes">1x</span>
477
- <span class="cline-any cline-yes">1x</span>
478
- <span class="cline-any cline-yes">1x</span>
479
- <span class="cline-any cline-yes">1x</span>
480
- <span class="cline-any cline-yes">1x</span>
481
- <span class="cline-any cline-yes">1x</span>
482
- <span class="cline-any cline-yes">1x</span>
483
- <span class="cline-any cline-yes">1x</span>
484
- <span class="cline-any cline-yes">1x</span>
485
- <span class="cline-any cline-yes">1x</span>
486
- <span class="cline-any cline-yes">1x</span>
487
- <span class="cline-any cline-yes">1x</span>
488
- <span class="cline-any cline-yes">1x</span>
489
- <span class="cline-any cline-yes">1x</span>
490
- <span class="cline-any cline-yes">1x</span>
491
- <span class="cline-any cline-yes">1x</span>
492
- <span class="cline-any cline-yes">1x</span>
493
- <span class="cline-any cline-yes">1x</span>
494
- <span class="cline-any cline-yes">1x</span>
495
- <span class="cline-any cline-yes">1x</span>
496
- <span class="cline-any cline-yes">31x</span>
497
- <span class="cline-any cline-yes">3x</span>
498
- <span class="cline-any cline-yes">3x</span>
499
- <span class="cline-any cline-yes">31x</span>
500
- <span class="cline-any cline-yes">31x</span>
501
- <span class="cline-any cline-yes">1x</span>
502
- <span class="cline-any cline-yes">1x</span>
503
- <span class="cline-any cline-yes">1x</span>
504
- <span class="cline-any cline-yes">1x</span>
505
- <span class="cline-any cline-yes">1x</span>
506
- <span class="cline-any cline-yes">1x</span>
507
- <span class="cline-any cline-yes">21x</span>
508
- <span class="cline-any cline-yes">21x</span>
509
- <span class="cline-any cline-yes">1x</span>
510
- <span class="cline-any cline-yes">1x</span>
511
- <span class="cline-any cline-yes">1x</span>
512
- <span class="cline-any cline-yes">1x</span>
513
- <span class="cline-any cline-yes">1x</span>
514
- <span class="cline-any cline-yes">6x</span>
515
- <span class="cline-any cline-yes">6x</span>
516
- <span class="cline-any cline-yes">1x</span>
517
- <span class="cline-any cline-yes">1x</span>
518
- <span class="cline-any cline-yes">1x</span>
519
- <span class="cline-any cline-yes">1x</span>
520
- <span class="cline-any cline-yes">1x</span>
521
- <span class="cline-any cline-yes">30x</span>
522
- <span class="cline-any cline-yes">30x</span>
523
- <span class="cline-any cline-yes">1x</span>
524
- <span class="cline-any cline-yes">1x</span>
525
- <span class="cline-any cline-yes">1x</span>
526
- <span class="cline-any cline-yes">1x</span>
527
- <span class="cline-any cline-yes">1x</span>
528
- <span class="cline-any cline-yes">1x</span>
529
- <span class="cline-any cline-yes">1x</span>
530
- <span class="cline-any cline-yes">1x</span>
531
- <span class="cline-any cline-yes">1x</span>
532
- <span class="cline-any cline-yes">61x</span>
533
- <span class="cline-any cline-yes">61x</span>
534
- <span class="cline-any cline-yes">61x</span>
535
- <span class="cline-any cline-yes">61x</span>
536
- <span class="cline-any cline-yes">5x</span>
537
- <span class="cline-any cline-yes">5x</span>
538
- <span class="cline-any cline-yes">2x</span>
539
- <span class="cline-any cline-yes">2x</span>
540
- <span class="cline-any cline-yes">2x</span>
541
- <span class="cline-any cline-yes">2x</span>
542
- <span class="cline-any cline-yes">2x</span>
543
- <span class="cline-any cline-yes">5x</span>
544
- <span class="cline-any cline-yes">5x</span>
545
- <span class="cline-any cline-yes">56x</span>
546
- <span class="cline-any cline-yes">56x</span>
547
- <span class="cline-any cline-yes">61x</span>
548
- <span class="cline-any cline-yes">6x</span>
549
- <span class="cline-any cline-no">&nbsp;</span>
550
- <span class="cline-any cline-no">&nbsp;</span>
551
- <span class="cline-any cline-yes">6x</span>
552
- <span class="cline-any cline-yes">6x</span>
553
- <span class="cline-any cline-yes">50x</span>
554
- <span class="cline-any cline-yes">50x</span>
555
- <span class="cline-any cline-yes">61x</span>
556
- <span class="cline-any cline-yes">5x</span>
557
- <span class="cline-any cline-no">&nbsp;</span>
558
- <span class="cline-any cline-no">&nbsp;</span>
559
- <span class="cline-any cline-yes">5x</span>
560
- <span class="cline-any cline-yes">5x</span>
561
- <span class="cline-any cline-yes">5x</span>
562
- <span class="cline-any cline-yes">5x</span>
563
- <span class="cline-any cline-yes">5x</span>
564
- <span class="cline-any cline-yes">5x</span>
565
- <span class="cline-any cline-yes">5x</span>
566
- <span class="cline-any cline-yes">5x</span>
567
- <span class="cline-any cline-yes">5x</span>
568
- <span class="cline-any cline-yes">5x</span>
569
- <span class="cline-any cline-yes">5x</span>
570
- <span class="cline-any cline-yes">3x</span>
571
- <span class="cline-any cline-no">&nbsp;</span>
572
- <span class="cline-any cline-no">&nbsp;</span>
573
- <span class="cline-any cline-yes">3x</span>
574
- <span class="cline-any cline-yes">3x</span>
575
- <span class="cline-any cline-yes">2x</span>
576
- <span class="cline-any cline-yes">2x</span>
577
- <span class="cline-any cline-yes">3x</span>
578
- <span class="cline-any cline-no">&nbsp;</span>
579
- <span class="cline-any cline-no">&nbsp;</span>
580
- <span class="cline-any cline-yes">5x</span>
581
- <span class="cline-any cline-yes">47x</span>
582
- <span class="cline-any cline-yes">47x</span>
583
- <span class="cline-any cline-yes">61x</span>
584
- <span class="cline-any cline-no">&nbsp;</span>
585
- <span class="cline-any cline-no">&nbsp;</span>
586
- <span class="cline-any cline-no">&nbsp;</span>
587
- <span class="cline-any cline-no">&nbsp;</span>
588
- <span class="cline-any cline-no">&nbsp;</span>
589
- <span class="cline-any cline-no">&nbsp;</span>
590
- <span class="cline-any cline-no">&nbsp;</span>
591
- <span class="cline-any cline-no">&nbsp;</span>
592
- <span class="cline-any cline-yes">47x</span>
593
- <span class="cline-any cline-yes">47x</span>
594
- <span class="cline-any cline-yes">61x</span>
595
- <span class="cline-any cline-yes">2x</span>
596
- <span class="cline-any cline-yes">2x</span>
597
- <span class="cline-any cline-yes">47x</span>
598
- <span class="cline-any cline-yes">47x</span>
599
- <span class="cline-any cline-yes">47x</span>
600
- <span class="cline-any cline-yes">47x</span>
601
- <span class="cline-any cline-yes">47x</span>
602
- <span class="cline-any cline-yes">47x</span>
603
- <span class="cline-any cline-yes">47x</span>
604
- <span class="cline-any cline-yes">47x</span>
605
- <span class="cline-any cline-yes">47x</span>
606
- <span class="cline-any cline-yes">40x</span>
607
- <span class="cline-any cline-yes">40x</span>
608
- <span class="cline-any cline-yes">40x</span>
609
- <span class="cline-any cline-yes">40x</span>
610
- <span class="cline-any cline-yes">40x</span>
611
- <span class="cline-any cline-yes">61x</span>
612
- <span class="cline-any cline-yes">2x</span>
613
- <span class="cline-any cline-yes">2x</span>
614
- <span class="cline-any cline-yes">61x</span>
615
- <span class="cline-any cline-yes">7x</span>
616
- <span class="cline-any cline-yes">7x</span>
617
- <span class="cline-any cline-yes">7x</span>
618
- <span class="cline-any cline-yes">7x</span>
619
- <span class="cline-any cline-yes">7x</span>
620
- <span class="cline-any cline-yes">7x</span>
621
- <span class="cline-any cline-yes">7x</span>
622
- <span class="cline-any cline-yes">7x</span>
623
- <span class="cline-any cline-yes">7x</span>
624
- <span class="cline-any cline-yes">7x</span>
625
- <span class="cline-any cline-yes">61x</span>
626
- <span class="cline-any cline-yes">1x</span>
627
- <span class="cline-any cline-yes">1x</span>
628
- <span class="cline-any cline-yes">1x</span>
629
- <span class="cline-any cline-yes">1x</span>
630
- <span class="cline-any cline-yes">1x</span>
631
- <span class="cline-any cline-yes">5x</span>
632
- <span class="cline-any cline-yes">5x</span>
633
- <span class="cline-any cline-yes">5x</span>
634
- <span class="cline-any cline-yes">5x</span>
635
- <span class="cline-any cline-yes">5x</span>
636
- <span class="cline-any cline-yes">32x</span>
637
- <span class="cline-any cline-yes">32x</span>
638
- <span class="cline-any cline-yes">32x</span>
639
- <span class="cline-any cline-yes">32x</span>
640
- <span class="cline-any cline-yes">3x</span>
641
- <span class="cline-any cline-yes">3x</span>
642
- <span class="cline-any cline-yes">3x</span>
643
- <span class="cline-any cline-yes">3x</span>
644
- <span class="cline-any cline-yes">29x</span>
645
- <span class="cline-any cline-yes">29x</span>
646
- <span class="cline-any cline-yes">32x</span>
647
- <span class="cline-any cline-no">&nbsp;</span>
648
- <span class="cline-any cline-no">&nbsp;</span>
649
- <span class="cline-any cline-no">&nbsp;</span>
650
- <span class="cline-any cline-no">&nbsp;</span>
651
- <span class="cline-any cline-yes">29x</span>
652
- <span class="cline-any cline-yes">29x</span>
653
- <span class="cline-any cline-yes">32x</span>
654
- <span class="cline-any cline-yes">2x</span>
655
- <span class="cline-any cline-yes">2x</span>
656
- <span class="cline-any cline-no">&nbsp;</span>
657
- <span class="cline-any cline-no">&nbsp;</span>
658
- <span class="cline-any cline-yes">2x</span>
659
- <span class="cline-any cline-yes">2x</span>
660
- <span class="cline-any cline-yes">5x</span>
661
- <span class="cline-any cline-yes">5x</span>
662
- <span class="cline-any cline-yes">5x</span>
663
- <span class="cline-any cline-yes">1x</span>
664
- <span class="cline-any cline-yes">1x</span>
665
- <span class="cline-any cline-yes">1x</span>
666
- <span class="cline-any cline-yes">1x</span>
667
- <span class="cline-any cline-yes">1x</span>
668
- <span class="cline-any cline-yes">47x</span>
669
- <span class="cline-any cline-yes">47x</span>
670
- <span class="cline-any cline-yes">47x</span>
671
- <span class="cline-any cline-yes">3x</span>
672
- <span class="cline-any cline-no">&nbsp;</span>
673
- <span class="cline-any cline-no">&nbsp;</span>
674
- <span class="cline-any cline-yes">3x</span>
675
- <span class="cline-any cline-yes">3x</span>
676
- <span class="cline-any cline-yes">44x</span>
677
- <span class="cline-any cline-yes">44x</span>
678
- <span class="cline-any cline-yes">44x</span>
679
- <span class="cline-any cline-yes">44x</span>
680
- <span class="cline-any cline-yes">44x</span>
681
- <span class="cline-any cline-yes">47x</span>
682
- <span class="cline-any cline-yes">47x</span>
683
- <span class="cline-any cline-yes">44x</span>
684
- <span class="cline-any cline-yes">44x</span>
685
- <span class="cline-any cline-yes">44x</span>
686
- <span class="cline-any cline-yes">44x</span>
687
- <span class="cline-any cline-yes">44x</span>
688
- <span class="cline-any cline-yes">44x</span>
689
- <span class="cline-any cline-yes">47x</span>
690
- <span class="cline-any cline-yes">7x</span>
691
- <span class="cline-any cline-yes">7x</span>
692
- <span class="cline-any cline-yes">37x</span>
693
- <span class="cline-any cline-yes">37x</span>
694
- <span class="cline-any cline-yes">47x</span>
695
- <span class="cline-any cline-no">&nbsp;</span>
696
- <span class="cline-any cline-no">&nbsp;</span>
697
- <span class="cline-any cline-no">&nbsp;</span>
698
- <span class="cline-any cline-no">&nbsp;</span>
699
- <span class="cline-any cline-no">&nbsp;</span>
700
- <span class="cline-any cline-yes">47x</span>
701
- <span class="cline-any cline-yes">1x</span>
702
- <span class="cline-any cline-yes">1x</span>
703
- <span class="cline-any cline-yes">1x</span>
704
- <span class="cline-any cline-yes">1x</span>
705
- <span class="cline-any cline-yes">1x</span>
706
- <span class="cline-any cline-yes">112x</span>
707
- <span class="cline-any cline-yes">112x</span>
708
- <span class="cline-any cline-yes">112x</span>
709
- <span class="cline-any cline-yes">112x</span>
710
- <span class="cline-any cline-yes">112x</span>
711
- <span class="cline-any cline-yes">112x</span>
712
- <span class="cline-any cline-yes">112x</span>
713
- <span class="cline-any cline-yes">112x</span>
714
- <span class="cline-any cline-yes">112x</span>
715
- <span class="cline-any cline-yes">112x</span>
716
- <span class="cline-any cline-yes">112x</span>
717
- <span class="cline-any cline-yes">112x</span>
718
- <span class="cline-any cline-yes">1x</span>
719
- <span class="cline-any cline-yes">1x</span>
720
- <span class="cline-any cline-yes">1x</span>
721
- <span class="cline-any cline-yes">1x</span>
722
- <span class="cline-any cline-yes">1x</span>
723
- <span class="cline-any cline-yes">22x</span>
724
- <span class="cline-any cline-yes">22x</span>
725
- <span class="cline-any cline-yes">1x</span>
726
- <span class="cline-any cline-yes">1x</span>
727
- <span class="cline-any cline-yes">1x</span>
728
- <span class="cline-any cline-yes">1x</span>
729
- <span class="cline-any cline-yes">1x</span>
730
- <span class="cline-any cline-yes">5x</span>
731
- <span class="cline-any cline-yes">5x</span>
732
- <span class="cline-any cline-yes">5x</span>
733
- <span class="cline-any cline-yes">5x</span>
734
- <span class="cline-any cline-yes">5x</span>
735
- <span class="cline-any cline-yes">5x</span>
736
- <span class="cline-any cline-yes">5x</span>
737
- <span class="cline-any cline-yes">1x</span>
738
- <span class="cline-any cline-yes">1x</span>
739
- <span class="cline-any cline-yes">1x</span>
740
- <span class="cline-any cline-yes">1x</span>
741
- <span class="cline-any cline-yes">1x</span>
742
- <span class="cline-any cline-yes">1x</span>
743
- <span class="cline-any cline-yes">1x</span>
744
- <span class="cline-any cline-yes">1x</span>
745
- <span class="cline-any cline-yes">1x</span>
746
- <span class="cline-any cline-yes">1x</span>
747
- <span class="cline-any cline-yes">1x</span>
748
- <span class="cline-any cline-yes">1x</span>
749
- <span class="cline-any cline-yes">1x</span>
750
- <span class="cline-any cline-yes">1x</span>
751
- <span class="cline-any cline-yes">1x</span>
752
- <span class="cline-any cline-yes">1x</span>
753
- <span class="cline-any cline-yes">1x</span>
754
- <span class="cline-any cline-yes">1x</span>
755
- <span class="cline-any cline-yes">1x</span>
756
- <span class="cline-any cline-yes">1x</span>
757
- <span class="cline-any cline-yes">1x</span>
758
- <span class="cline-any cline-yes">1x</span>
759
- <span class="cline-any cline-yes">1x</span>
760
- <span class="cline-any cline-yes">1x</span>
761
- <span class="cline-any cline-yes">1x</span>
762
- <span class="cline-any cline-yes">1x</span>
763
- <span class="cline-any cline-yes">1x</span>
764
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import crudify from "@nocios/crudify-browser";
765
- import { credentialsEventBus } from "../services/credentialsEventBus";
766
- import { logger } from "../utils/logger";
767
- import type { CrudifyTokenData, CrudifyInitResponse } from "../types/crudify-sdk";
768
- &nbsp;
769
- export type InitializationPriority = "HIGH" | "LOW";
770
- export type InitializationStatus = "UNINITIALIZED" | "INITIALIZING" | "INITIALIZED" | "ERROR";
771
- &nbsp;
772
- interface InitializationState {
773
- status: InitializationStatus;
774
- priority: InitializationPriority | null;
775
- publicApiKey: string | null;
776
- env: string | null;
777
- error: Error | null;
778
- initializedBy: string | null; // For debugging: which component initialized
779
- }
780
- &nbsp;
781
- export interface InitializationRequest {
782
- priority: InitializationPriority;
783
- publicApiKey: string;
784
- env: "dev" | "stg" | "api" | "prod";
785
- enableLogging?: boolean;
786
- requestedBy: string; // For debugging
787
- }
788
- &nbsp;
789
- /**
790
- * CrudifyInitializationManager
791
- *
792
- * Singleton manager for controlling Crudify SDK initialization with priority system.
793
- *
794
- * **Priority System:**
795
- * - HIGH: Explicit initialization via `&lt;CrudifyInitializer&gt;` component
796
- * - LOW: Automatic fallback initialization in providers
797
- *
798
- * **Thread-Safe:**
799
- * - Prevents duplicate initializations
800
- * - Handles concurrent initialization requests
801
- * - Shared promise ensures single initialization
802
- *
803
- * @example
804
- * ```typescript
805
- * // HIGH priority (CrudifyInitializer)
806
- * await crudifyInitManager.initialize({
807
- * priority: "HIGH",
808
- * publicApiKey: "key",
809
- * env: "stg",
810
- * requestedBy: "CrudifyInitializer"
811
- * });
812
- *
813
- * // LOW priority (provider auto-init)
814
- * await crudifyInitManager.initialize({
815
- * priority: "LOW",
816
- * publicApiKey: "key",
817
- * env: "stg",
818
- * requestedBy: "SessionProvider"
819
- * });
820
- * ```
821
- */
822
- export class CrudifyInitializationManager {
823
- private static instance: CrudifyInitializationManager;
824
- &nbsp;
825
- private state: InitializationState = {
826
- status: "UNINITIALIZED",
827
- priority: null,
828
- publicApiKey: null,
829
- env: null,
830
- error: null,
831
- initializedBy: null,
832
- };
833
- &nbsp;
834
- private initializationPromise: Promise&lt;void&gt; | null = null;
835
- private highPriorityInitializerPresent: boolean = false;
836
- private waitingForHighPriority: Set&lt;string&gt; = new Set(); // Track who's waiting
837
- private readonly HIGH_PRIORITY_WAIT_TIMEOUT = 100; // ms to wait for HIGH priority initializer
838
- &nbsp;
839
- private constructor() {}
840
- &nbsp;
841
- /**
842
- * Get singleton instance
843
- */
844
- public static getInstance(): CrudifyInitializationManager {
845
- if (!CrudifyInitializationManager.instance) {
846
- CrudifyInitializationManager.instance = new CrudifyInitializationManager();
847
- }
848
- return CrudifyInitializationManager.instance;
849
- }
850
- &nbsp;
851
- /**
852
- * Register that a HIGH priority initializer is present
853
- * This must be called SYNCHRONOUSLY during component mount
854
- */
855
- public registerHighPriorityInitializer(): void {
856
- this.highPriorityInitializerPresent = true;
857
- }
858
- &nbsp;
859
- /**
860
- * Check if a HIGH priority initializer is present
861
- */
862
- public isHighPriorityInitializerPresent(): boolean {
863
- return this.highPriorityInitializerPresent;
864
- }
865
- &nbsp;
866
- /**
867
- * Get current initialization state (read-only)
868
- */
869
- public getState(): Readonly&lt;InitializationState&gt; {
870
- return { ...this.state };
871
- }
872
- &nbsp;
873
- /**
874
- * Main initialization method - handles priority and concurrency
875
- *
876
- * @param request Initialization request with priority and config
877
- * @returns Promise that resolves when initialization completes
878
- * @throws Error if initialization fails
879
- */
880
- public async initialize(request: InitializationRequest): Promise&lt;void&gt; {
881
- const { priority, publicApiKey, env, enableLogging, requestedBy } = request;
882
- &nbsp;
883
- // CASE 1: Already initialized successfully
884
- if (this.state.status === "INITIALIZED") {
885
- // Validate that the same key is being used
886
- if (this.state.publicApiKey !== publicApiKey) {
887
- logger.warn(
888
- `[CrudifyInitialization] ${requestedBy} attempted to initialize with different key. ` +
889
- `Already initialized with key: ${this.state.publicApiKey?.slice(0, 10)}... by ${this.state.initializedBy}`
890
- );
891
- }
892
- return;
893
- }
894
- &nbsp;
895
- // CASE 2: Initialization in progress - wait for it
896
- if (this.initializationPromise) {
897
- if (enableLogging) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
898
- <span class="cstat-no" title="statement not covered" > logger.debug(`[CrudifyInitialization] ${requestedBy} waiting for ongoing initialization...`);</span>
899
- <span class="cstat-no" title="statement not covered" > }</span>
900
- return this.initializationPromise;
901
- }
902
- &nbsp;
903
- // CASE 3: LOW priority request but HIGH priority initializer exists
904
- if (priority === "LOW" &amp;&amp; this.highPriorityInitializerPresent &amp;&amp; this.state.status === "UNINITIALIZED") {
905
- if (enableLogging) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
906
- <span class="cstat-no" title="statement not covered" > logger.debug(`[CrudifyInitialization] ${requestedBy} (LOW priority) waiting for HIGH priority initializer...`);</span>
907
- <span class="cstat-no" title="statement not covered" > }</span>
908
- &nbsp;
909
- this.waitingForHighPriority.add(requestedBy);
910
- &nbsp;
911
- // Wait for HIGH priority initializer with timeout
912
- await this.waitForHighPriorityOrTimeout(enableLogging);
913
- &nbsp;
914
- this.waitingForHighPriority.delete(requestedBy);
915
- &nbsp;
916
- // Re-check status after wait - it may have changed during async operation
917
- const currentStatus = this.getState().status;
918
- if (currentStatus === "INITIALIZED") {
919
- if (enableLogging) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
920
- <span class="cstat-no" title="statement not covered" > logger.debug(`[CrudifyInitialization] ${requestedBy} found initialization completed by HIGH priority`);</span>
921
- <span class="cstat-no" title="statement not covered" > }</span>
922
- return;
923
- }
924
- &nbsp;
925
- // HIGH priority didn't initialize - fall through to initialize ourselves
926
- if (enableLogging) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
927
- <span class="cstat-no" title="statement not covered" > logger.warn(`[CrudifyInitialization] ${requestedBy} timeout waiting for HIGH priority, initializing with LOW priority`);</span>
928
- <span class="cstat-no" title="statement not covered" > }</span>
929
- }
930
- &nbsp;
931
- // CASE 4: HIGH priority request overrides LOW priority if still initializing
932
- if (priority === "HIGH" &amp;&amp; this.state.status === <span class="branch-0 cbranch-no" title="branch not covered" >"INITIALIZING" &amp;&amp; this.state.priority === "LOW") <span class="branch-0 cbranch-no" title="branch not covered" >{</span></span>
933
- <span class="cstat-no" title="statement not covered" > logger.warn(</span>
934
- <span class="cstat-no" title="statement not covered" > `[CrudifyInitialization] HIGH priority request from ${requestedBy} ` +</span>
935
- <span class="cstat-no" title="statement not covered" > `interrupting LOW priority initialization by ${this.state.initializedBy}`</span>
936
- <span class="cstat-no" title="statement not covered" > );</span>
937
- <span class="cstat-no" title="statement not covered" > // Cancel the LOW priority initialization (if possible) and restart</span>
938
- <span class="cstat-no" title="statement not covered" > this.state.status = "UNINITIALIZED";</span>
939
- <span class="cstat-no" title="statement not covered" > this.initializationPromise = null;</span>
940
- <span class="cstat-no" title="statement not covered" > }</span>
941
- &nbsp;
942
- // CASE 5: Proceed with initialization
943
- if (enableLogging) {
944
- logger.debug(`[CrudifyInitialization] ${requestedBy} starting initialization (${priority} priority)...`);
945
- }
946
- &nbsp;
947
- this.state.status = "INITIALIZING";
948
- this.state.priority = priority;
949
- this.state.initializedBy = requestedBy;
950
- &nbsp;
951
- this.initializationPromise = this.performInitialization(publicApiKey, env, enableLogging);
952
- &nbsp;
953
- try {
954
- await this.initializationPromise;
955
- this.state.status = "INITIALIZED";
956
- this.state.publicApiKey = publicApiKey;
957
- this.state.env = env;
958
- this.state.error = null;
959
- &nbsp;
960
- if (enableLogging) {
961
- logger.info(`[CrudifyInitialization] Successfully initialized by ${requestedBy} (${priority} priority)`);
962
- }
963
- } catch (error) {
964
- this.state.status = "ERROR";
965
- this.state.error = error instanceof Error ? <span class="branch-0 cbranch-no" title="branch not covered" >error : new Error(String(error));</span>
966
- this.initializationPromise = null; // Allow retry
967
- &nbsp;
968
- logger.error(
969
- `[CrudifyInitialization] Initialization failed for ${requestedBy}`,
970
- error instanceof Error ? <span class="branch-0 cbranch-no" title="branch not covered" >error : { message: String(error) }</span>
971
- );
972
- throw error;
973
- }
974
- }
975
- &nbsp;
976
- /**
977
- * Wait for HIGH priority initializer with timeout
978
- */
979
- private async waitForHighPriorityOrTimeout(enableLogging?: boolean): Promise&lt;void&gt; {
980
- return new Promise((resolve) =&gt; {
981
- const checkInterval = 10; // Check every 10ms
982
- let elapsed = 0;
983
- &nbsp;
984
- const intervalId = setInterval(() =&gt; {
985
- elapsed += checkInterval;
986
- &nbsp;
987
- // Initialized by HIGH priority
988
- if (this.state.status === "INITIALIZED" &amp;&amp; this.state.priority === "HIGH") {
989
- clearInterval(intervalId);
990
- resolve();
991
- return;
992
- }
993
- &nbsp;
994
- // HIGH priority is initializing
995
- if (this.state.status === <span class="branch-0 cbranch-no" title="branch not covered" >"INITIALIZING" &amp;&amp; this.state.priority === "HIGH") <span class="branch-0 cbranch-no" title="branch not covered" >{</span></span>
996
- <span class="cstat-no" title="statement not covered" > // Keep waiting, but reset timeout</span>
997
- <span class="cstat-no" title="statement not covered" > elapsed = 0;</span>
998
- <span class="cstat-no" title="statement not covered" > return;</span>
999
- <span class="cstat-no" title="statement not covered" > }</span>
1000
- &nbsp;
1001
- // Timeout reached
1002
- if (elapsed &gt;= this.HIGH_PRIORITY_WAIT_TIMEOUT) {
1003
- clearInterval(intervalId);
1004
- if (enableLogging) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1005
- <span class="cstat-no" title="statement not covered" > logger.debug(`[CrudifyInitialization] Timeout waiting for HIGH priority (${this.HIGH_PRIORITY_WAIT_TIMEOUT}ms)`);</span>
1006
- <span class="cstat-no" title="statement not covered" > }</span>
1007
- resolve();
1008
- }
1009
- }, checkInterval);
1010
- });
1011
- }
1012
- &nbsp;
1013
- /**
1014
- * Actual SDK initialization
1015
- */
1016
- private async performInitialization(publicApiKey: string, env: "dev" | "stg" | "api" | "prod", enableLogging?: boolean): Promise&lt;void&gt; {
1017
- // Check if already initialized by another service (outside this manager)
1018
- const tokenData = crudify.getTokenData() as CrudifyTokenData | null;
1019
- if (tokenData &amp;&amp; tokenData.endpoint) {
1020
- if (enableLogging) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1021
- <span class="cstat-no" title="statement not covered" > logger.debug("[CrudifyInitialization] SDK already initialized externally");</span>
1022
- <span class="cstat-no" title="statement not covered" > }</span>
1023
- return;
1024
- }
1025
- &nbsp;
1026
- // Configure environment
1027
- crudify.config(env);
1028
- &nbsp;
1029
- // Initialize with API key
1030
- const logLevel = enableLogging ? "debug" : "none";
1031
- const response = (await crudify.init(publicApiKey, logLevel)) as CrudifyInitResponse;
1032
- &nbsp;
1033
- // Check if initialization succeeded
1034
- // crudify.init() returns:
1035
- // - { data: {...} } on first successful init
1036
- // - { apiEndpointAdmin, apiKeyEndpointAdmin } when already initialized
1037
- // - { success: false, errors: [...] } on error
1038
- if (response.success === false) {
1039
- throw new Error(`Crudify initialization failed: ${JSON.stringify(response.<span class="branch-0 cbranch-no" title="branch not covered" >errors || "Unknown error")</span>}`);
1040
- }
1041
- &nbsp;
1042
- // Notify credentials event bus for crudifyAdmin initialization
1043
- if (response.<span class="branch-0 cbranch-no" title="branch not covered" >apiEndpointAdmin &amp;&amp; response.apiKeyEndpointAdmin) <span class="branch-0 cbranch-no" title="branch not covered" >{</span></span>
1044
- <span class="cstat-no" title="statement not covered" > credentialsEventBus.notifyCredentialsReady({</span>
1045
- <span class="cstat-no" title="statement not covered" > apiUrl: response.apiEndpointAdmin,</span>
1046
- <span class="cstat-no" title="statement not covered" > apiKey: response.apiKeyEndpointAdmin,</span>
1047
- <span class="cstat-no" title="statement not covered" > });</span>
1048
- <span class="cstat-no" title="statement not covered" > }</span>
1049
- }
1050
- &nbsp;
1051
- /**
1052
- * Reset initialization state (for testing)
1053
- */
1054
- public reset(): void {
1055
- this.state = {
1056
- status: "UNINITIALIZED",
1057
- priority: null,
1058
- publicApiKey: null,
1059
- env: null,
1060
- error: null,
1061
- initializedBy: null,
1062
- };
1063
- this.initializationPromise = null;
1064
- this.highPriorityInitializerPresent = false;
1065
- this.waitingForHighPriority.clear();
1066
- }
1067
- &nbsp;
1068
- /**
1069
- * Check if initialized (without triggering initialization)
1070
- */
1071
- public isInitialized(): boolean {
1072
- return this.state.status === "INITIALIZED";
1073
- }
1074
- &nbsp;
1075
- /**
1076
- * Get diagnostic info (for debugging)
1077
- */
1078
- public getDiagnostics() {
1079
- return {
1080
- ...this.state,
1081
- waitingCount: this.waitingForHighPriority.size,
1082
- waitingComponents: Array.from(this.waitingForHighPriority),
1083
- hasActivePromise: this.initializationPromise !== null,
1084
- };
1085
- }
1086
- }
1087
- &nbsp;
1088
- /**
1089
- * Export singleton instance
1090
- *
1091
- * @example
1092
- * ```typescript
1093
- * import { crudifyInitManager } from "@nocios/crudify-ui";
1094
- *
1095
- * // Initialize with HIGH priority
1096
- * await crudifyInitManager.initialize({
1097
- * priority: "HIGH",
1098
- * publicApiKey: "your-key",
1099
- * env: "stg",
1100
- * requestedBy: "CrudifyInitializer"
1101
- * });
1102
- *
1103
- * // Check if initialized
1104
- * if (crudifyInitManager.isInitialized()) {
1105
- * // Ready to use crudify SDK
1106
- * }
1107
- *
1108
- * // Get diagnostics
1109
- * console.log(crudifyInitManager.getDiagnostics());
1110
- * ```
1111
- */
1112
- export const crudifyInitManager = CrudifyInitializationManager.getInstance();
1113
- &nbsp;</pre></td></tr></table></pre>
1114
-
1115
- <div class='push'></div><!-- for sticky footer -->
1116
- </div><!-- /wrapper -->
1117
- <div class='footer quiet pad2 space-top1 center small'>
1118
- Code coverage generated by
1119
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1120
- at 2026-01-02T06:29:59.375Z
1121
- </div>
1122
- <script src="../prettify.js"></script>
1123
- <script>
1124
- window.onload = function () {
1125
- prettyPrint();
1126
- };
1127
- </script>
1128
- <script src="../sorter.js"></script>
1129
- <script src="../block-navigation.js"></script>
1130
- </body>
1131
- </html>
1132
-