@finnair/v-validation-luxon 11.0.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/coverage/lcov-report/Vluxon.ts.html +1111 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +146 -0
- package/coverage/lcov-report/index.ts.html +91 -0
- package/coverage/lcov-report/luxon.ts.html +1564 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov.info +1124 -0
- package/dist/cjs/Vluxon.d.ts +8 -8
- package/dist/cjs/Vluxon.js +65 -19
- package/dist/esm/Vluxon.d.ts +8 -8
- package/dist/esm/Vluxon.js +65 -19
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,1111 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for Vluxon.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> Vluxon.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">100% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>263/263</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">100% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>84/84</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'>40/40</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">100% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>263/263</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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
409
|
+
<span class="cline-any cline-neutral"> </span>
|
|
410
|
+
<span class="cline-any cline-yes">1x</span>
|
|
411
|
+
<span class="cline-any cline-yes">1x</span>
|
|
412
|
+
<span class="cline-any cline-neutral"> </span>
|
|
413
|
+
<span class="cline-any cline-neutral"> </span>
|
|
414
|
+
<span class="cline-any cline-neutral"> </span>
|
|
415
|
+
<span class="cline-any cline-neutral"> </span>
|
|
416
|
+
<span class="cline-any cline-neutral"> </span>
|
|
417
|
+
<span class="cline-any cline-neutral"> </span>
|
|
418
|
+
<span class="cline-any cline-neutral"> </span>
|
|
419
|
+
<span class="cline-any cline-neutral"> </span>
|
|
420
|
+
<span class="cline-any cline-neutral"> </span>
|
|
421
|
+
<span class="cline-any cline-neutral"> </span>
|
|
422
|
+
<span class="cline-any cline-neutral"> </span>
|
|
423
|
+
<span class="cline-any cline-neutral"> </span>
|
|
424
|
+
<span class="cline-any cline-neutral"> </span>
|
|
425
|
+
<span class="cline-any cline-neutral"> </span>
|
|
426
|
+
<span class="cline-any cline-neutral"> </span>
|
|
427
|
+
<span class="cline-any cline-neutral"> </span>
|
|
428
|
+
<span class="cline-any cline-neutral"> </span>
|
|
429
|
+
<span class="cline-any cline-neutral"> </span>
|
|
430
|
+
<span class="cline-any cline-neutral"> </span>
|
|
431
|
+
<span class="cline-any cline-neutral"> </span>
|
|
432
|
+
<span class="cline-any cline-neutral"> </span>
|
|
433
|
+
<span class="cline-any cline-neutral"> </span>
|
|
434
|
+
<span class="cline-any cline-yes">1x</span>
|
|
435
|
+
<span class="cline-any cline-yes">133x</span>
|
|
436
|
+
<span class="cline-any cline-yes">133x</span>
|
|
437
|
+
<span class="cline-any cline-yes">133x</span>
|
|
438
|
+
<span class="cline-any cline-yes">133x</span>
|
|
439
|
+
<span class="cline-any cline-yes">133x</span>
|
|
440
|
+
<span class="cline-any cline-yes">133x</span>
|
|
441
|
+
<span class="cline-any cline-yes">126x</span>
|
|
442
|
+
<span class="cline-any cline-yes">126x</span>
|
|
443
|
+
<span class="cline-any cline-yes">5x</span>
|
|
444
|
+
<span class="cline-any cline-yes">5x</span>
|
|
445
|
+
<span class="cline-any cline-yes">5x</span>
|
|
446
|
+
<span class="cline-any cline-yes">126x</span>
|
|
447
|
+
<span class="cline-any cline-yes">6x</span>
|
|
448
|
+
<span class="cline-any cline-yes">6x</span>
|
|
449
|
+
<span class="cline-any cline-yes">6x</span>
|
|
450
|
+
<span class="cline-any cline-yes">6x</span>
|
|
451
|
+
<span class="cline-any cline-yes">126x</span>
|
|
452
|
+
<span class="cline-any cline-yes">108x</span>
|
|
453
|
+
<span class="cline-any cline-yes">108x</span>
|
|
454
|
+
<span class="cline-any cline-yes">62x</span>
|
|
455
|
+
<span class="cline-any cline-yes">62x</span>
|
|
456
|
+
<span class="cline-any cline-yes">50x</span>
|
|
457
|
+
<span class="cline-any cline-yes">50x</span>
|
|
458
|
+
<span class="cline-any cline-yes">50x</span>
|
|
459
|
+
<span class="cline-any cline-yes">62x</span>
|
|
460
|
+
<span class="cline-any cline-yes">108x</span>
|
|
461
|
+
<span class="cline-any cline-yes">65x</span>
|
|
462
|
+
<span class="cline-any cline-yes">126x</span>
|
|
463
|
+
<span class="cline-any cline-yes">133x</span>
|
|
464
|
+
<span class="cline-any cline-neutral"> </span>
|
|
465
|
+
<span class="cline-any cline-yes">1x</span>
|
|
466
|
+
<span class="cline-any cline-yes">125x</span>
|
|
467
|
+
<span class="cline-any cline-yes">125x</span>
|
|
468
|
+
<span class="cline-any cline-yes">125x</span>
|
|
469
|
+
<span class="cline-any cline-yes">125x</span>
|
|
470
|
+
<span class="cline-any cline-yes">125x</span>
|
|
471
|
+
<span class="cline-any cline-yes">125x</span>
|
|
472
|
+
<span class="cline-any cline-neutral"> </span>
|
|
473
|
+
<span class="cline-any cline-yes">125x</span>
|
|
474
|
+
<span class="cline-any cline-yes">126x</span>
|
|
475
|
+
<span class="cline-any cline-yes">6x</span>
|
|
476
|
+
<span class="cline-any cline-yes">126x</span>
|
|
477
|
+
<span class="cline-any cline-yes">2x</span>
|
|
478
|
+
<span class="cline-any cline-yes">120x</span>
|
|
479
|
+
<span class="cline-any cline-yes">118x</span>
|
|
480
|
+
<span class="cline-any cline-yes">118x</span>
|
|
481
|
+
<span class="cline-any cline-yes">118x</span>
|
|
482
|
+
<span class="cline-any cline-yes">118x</span>
|
|
483
|
+
<span class="cline-any cline-yes">126x</span>
|
|
484
|
+
<span class="cline-any cline-yes">125x</span>
|
|
485
|
+
<span class="cline-any cline-neutral"> </span>
|
|
486
|
+
<span class="cline-any cline-neutral"> </span>
|
|
487
|
+
<span class="cline-any cline-neutral"> </span>
|
|
488
|
+
<span class="cline-any cline-neutral"> </span>
|
|
489
|
+
<span class="cline-any cline-neutral"> </span>
|
|
490
|
+
<span class="cline-any cline-neutral"> </span>
|
|
491
|
+
<span class="cline-any cline-neutral"> </span>
|
|
492
|
+
<span class="cline-any cline-neutral"> </span>
|
|
493
|
+
<span class="cline-any cline-neutral"> </span>
|
|
494
|
+
<span class="cline-any cline-yes">35x</span>
|
|
495
|
+
<span class="cline-any cline-yes">35x</span>
|
|
496
|
+
<span class="cline-any cline-yes">15x</span>
|
|
497
|
+
<span class="cline-any cline-yes">15x</span>
|
|
498
|
+
<span class="cline-any cline-yes">35x</span>
|
|
499
|
+
<span class="cline-any cline-yes">35x</span>
|
|
500
|
+
<span class="cline-any cline-yes">35x</span>
|
|
501
|
+
<span class="cline-any cline-neutral"> </span>
|
|
502
|
+
<span class="cline-any cline-neutral"> </span>
|
|
503
|
+
<span class="cline-any cline-neutral"> </span>
|
|
504
|
+
<span class="cline-any cline-yes">1x</span>
|
|
505
|
+
<span class="cline-any cline-neutral"> </span>
|
|
506
|
+
<span class="cline-any cline-yes">14x</span>
|
|
507
|
+
<span class="cline-any cline-yes">14x</span>
|
|
508
|
+
<span class="cline-any cline-yes">14x</span>
|
|
509
|
+
<span class="cline-any cline-yes">14x</span>
|
|
510
|
+
<span class="cline-any cline-yes">14x</span>
|
|
511
|
+
<span class="cline-any cline-yes">14x</span>
|
|
512
|
+
<span class="cline-any cline-yes">14x</span>
|
|
513
|
+
<span class="cline-any cline-yes">14x</span>
|
|
514
|
+
<span class="cline-any cline-neutral"> </span>
|
|
515
|
+
<span class="cline-any cline-neutral"> </span>
|
|
516
|
+
<span class="cline-any cline-yes">1x</span>
|
|
517
|
+
<span class="cline-any cline-neutral"> </span>
|
|
518
|
+
<span class="cline-any cline-yes">13x</span>
|
|
519
|
+
<span class="cline-any cline-yes">13x</span>
|
|
520
|
+
<span class="cline-any cline-yes">13x</span>
|
|
521
|
+
<span class="cline-any cline-yes">13x</span>
|
|
522
|
+
<span class="cline-any cline-yes">13x</span>
|
|
523
|
+
<span class="cline-any cline-yes">13x</span>
|
|
524
|
+
<span class="cline-any cline-yes">13x</span>
|
|
525
|
+
<span class="cline-any cline-yes">13x</span>
|
|
526
|
+
<span class="cline-any cline-neutral"> </span>
|
|
527
|
+
<span class="cline-any cline-neutral"> </span>
|
|
528
|
+
<span class="cline-any cline-yes">1x</span>
|
|
529
|
+
<span class="cline-any cline-neutral"> </span>
|
|
530
|
+
<span class="cline-any cline-yes">15x</span>
|
|
531
|
+
<span class="cline-any cline-yes">15x</span>
|
|
532
|
+
<span class="cline-any cline-yes">15x</span>
|
|
533
|
+
<span class="cline-any cline-yes">15x</span>
|
|
534
|
+
<span class="cline-any cline-yes">15x</span>
|
|
535
|
+
<span class="cline-any cline-yes">15x</span>
|
|
536
|
+
<span class="cline-any cline-yes">3x</span>
|
|
537
|
+
<span class="cline-any cline-yes">15x</span>
|
|
538
|
+
<span class="cline-any cline-yes">15x</span>
|
|
539
|
+
<span class="cline-any cline-neutral"> </span>
|
|
540
|
+
<span class="cline-any cline-neutral"> </span>
|
|
541
|
+
<span class="cline-any cline-neutral"> </span>
|
|
542
|
+
<span class="cline-any cline-neutral"> </span>
|
|
543
|
+
<span class="cline-any cline-neutral"> </span>
|
|
544
|
+
<span class="cline-any cline-yes">1x</span>
|
|
545
|
+
<span class="cline-any cline-neutral"> </span>
|
|
546
|
+
<span class="cline-any cline-yes">17x</span>
|
|
547
|
+
<span class="cline-any cline-yes">17x</span>
|
|
548
|
+
<span class="cline-any cline-yes">17x</span>
|
|
549
|
+
<span class="cline-any cline-yes">17x</span>
|
|
550
|
+
<span class="cline-any cline-yes">17x</span>
|
|
551
|
+
<span class="cline-any cline-yes">17x</span>
|
|
552
|
+
<span class="cline-any cline-yes">17x</span>
|
|
553
|
+
<span class="cline-any cline-yes">17x</span>
|
|
554
|
+
<span class="cline-any cline-yes">17x</span>
|
|
555
|
+
<span class="cline-any cline-yes">17x</span>
|
|
556
|
+
<span class="cline-any cline-yes">17x</span>
|
|
557
|
+
<span class="cline-any cline-yes">17x</span>
|
|
558
|
+
<span class="cline-any cline-yes">17x</span>
|
|
559
|
+
<span class="cline-any cline-neutral"> </span>
|
|
560
|
+
<span class="cline-any cline-yes">19x</span>
|
|
561
|
+
<span class="cline-any cline-yes">19x</span>
|
|
562
|
+
<span class="cline-any cline-yes">19x</span>
|
|
563
|
+
<span class="cline-any cline-yes">19x</span>
|
|
564
|
+
<span class="cline-any cline-yes">19x</span>
|
|
565
|
+
<span class="cline-any cline-yes">19x</span>
|
|
566
|
+
<span class="cline-any cline-yes">19x</span>
|
|
567
|
+
<span class="cline-any cline-yes">19x</span>
|
|
568
|
+
<span class="cline-any cline-neutral"> </span>
|
|
569
|
+
<span class="cline-any cline-yes">20x</span>
|
|
570
|
+
<span class="cline-any cline-yes">20x</span>
|
|
571
|
+
<span class="cline-any cline-yes">20x</span>
|
|
572
|
+
<span class="cline-any cline-yes">20x</span>
|
|
573
|
+
<span class="cline-any cline-yes">20x</span>
|
|
574
|
+
<span class="cline-any cline-yes">20x</span>
|
|
575
|
+
<span class="cline-any cline-yes">20x</span>
|
|
576
|
+
<span class="cline-any cline-yes">20x</span>
|
|
577
|
+
<span class="cline-any cline-neutral"> </span>
|
|
578
|
+
<span class="cline-any cline-neutral"> </span>
|
|
579
|
+
<span class="cline-any cline-neutral"> </span>
|
|
580
|
+
<span class="cline-any cline-yes">1x</span>
|
|
581
|
+
<span class="cline-any cline-neutral"> </span>
|
|
582
|
+
<span class="cline-any cline-yes">18x</span>
|
|
583
|
+
<span class="cline-any cline-yes">18x</span>
|
|
584
|
+
<span class="cline-any cline-yes">18x</span>
|
|
585
|
+
<span class="cline-any cline-yes">18x</span>
|
|
586
|
+
<span class="cline-any cline-yes">18x</span>
|
|
587
|
+
<span class="cline-any cline-yes">18x</span>
|
|
588
|
+
<span class="cline-any cline-yes">18x</span>
|
|
589
|
+
<span class="cline-any cline-yes">18x</span>
|
|
590
|
+
<span class="cline-any cline-yes">18x</span>
|
|
591
|
+
<span class="cline-any cline-yes">18x</span>
|
|
592
|
+
<span class="cline-any cline-yes">18x</span>
|
|
593
|
+
<span class="cline-any cline-yes">18x</span>
|
|
594
|
+
<span class="cline-any cline-yes">18x</span>
|
|
595
|
+
<span class="cline-any cline-yes">18x</span>
|
|
596
|
+
<span class="cline-any cline-neutral"> </span>
|
|
597
|
+
<span class="cline-any cline-yes">21x</span>
|
|
598
|
+
<span class="cline-any cline-yes">21x</span>
|
|
599
|
+
<span class="cline-any cline-yes">21x</span>
|
|
600
|
+
<span class="cline-any cline-yes">21x</span>
|
|
601
|
+
<span class="cline-any cline-yes">21x</span>
|
|
602
|
+
<span class="cline-any cline-yes">21x</span>
|
|
603
|
+
<span class="cline-any cline-yes">21x</span>
|
|
604
|
+
<span class="cline-any cline-yes">21x</span>
|
|
605
|
+
<span class="cline-any cline-neutral"> </span>
|
|
606
|
+
<span class="cline-any cline-yes">22x</span>
|
|
607
|
+
<span class="cline-any cline-yes">22x</span>
|
|
608
|
+
<span class="cline-any cline-yes">22x</span>
|
|
609
|
+
<span class="cline-any cline-yes">22x</span>
|
|
610
|
+
<span class="cline-any cline-yes">22x</span>
|
|
611
|
+
<span class="cline-any cline-yes">22x</span>
|
|
612
|
+
<span class="cline-any cline-yes">22x</span>
|
|
613
|
+
<span class="cline-any cline-yes">22x</span>
|
|
614
|
+
<span class="cline-any cline-neutral"> </span>
|
|
615
|
+
<span class="cline-any cline-yes">2x</span>
|
|
616
|
+
<span class="cline-any cline-yes">2x</span>
|
|
617
|
+
<span class="cline-any cline-yes">2x</span>
|
|
618
|
+
<span class="cline-any cline-yes">2x</span>
|
|
619
|
+
<span class="cline-any cline-yes">2x</span>
|
|
620
|
+
<span class="cline-any cline-yes">2x</span>
|
|
621
|
+
<span class="cline-any cline-yes">2x</span>
|
|
622
|
+
<span class="cline-any cline-neutral"> </span>
|
|
623
|
+
<span class="cline-any cline-yes">2x</span>
|
|
624
|
+
<span class="cline-any cline-yes">2x</span>
|
|
625
|
+
<span class="cline-any cline-yes">2x</span>
|
|
626
|
+
<span class="cline-any cline-yes">2x</span>
|
|
627
|
+
<span class="cline-any cline-yes">2x</span>
|
|
628
|
+
<span class="cline-any cline-yes">2x</span>
|
|
629
|
+
<span class="cline-any cline-yes">2x</span>
|
|
630
|
+
<span class="cline-any cline-neutral"> </span>
|
|
631
|
+
<span class="cline-any cline-yes">2x</span>
|
|
632
|
+
<span class="cline-any cline-yes">2x</span>
|
|
633
|
+
<span class="cline-any cline-yes">2x</span>
|
|
634
|
+
<span class="cline-any cline-yes">2x</span>
|
|
635
|
+
<span class="cline-any cline-yes">2x</span>
|
|
636
|
+
<span class="cline-any cline-yes">2x</span>
|
|
637
|
+
<span class="cline-any cline-yes">2x</span>
|
|
638
|
+
<span class="cline-any cline-neutral"> </span>
|
|
639
|
+
<span class="cline-any cline-yes">2x</span>
|
|
640
|
+
<span class="cline-any cline-yes">2x</span>
|
|
641
|
+
<span class="cline-any cline-yes">2x</span>
|
|
642
|
+
<span class="cline-any cline-yes">2x</span>
|
|
643
|
+
<span class="cline-any cline-yes">2x</span>
|
|
644
|
+
<span class="cline-any cline-yes">2x</span>
|
|
645
|
+
<span class="cline-any cline-yes">2x</span>
|
|
646
|
+
<span class="cline-any cline-neutral"> </span>
|
|
647
|
+
<span class="cline-any cline-neutral"> </span>
|
|
648
|
+
<span class="cline-any cline-neutral"> </span>
|
|
649
|
+
<span class="cline-any cline-neutral"> </span>
|
|
650
|
+
<span class="cline-any cline-neutral"> </span>
|
|
651
|
+
<span class="cline-any cline-neutral"> </span>
|
|
652
|
+
<span class="cline-any cline-neutral"> </span>
|
|
653
|
+
<span class="cline-any cline-neutral"> </span>
|
|
654
|
+
<span class="cline-any cline-neutral"> </span>
|
|
655
|
+
<span class="cline-any cline-yes">7x</span>
|
|
656
|
+
<span class="cline-any cline-yes">7x</span>
|
|
657
|
+
<span class="cline-any cline-yes">1x</span>
|
|
658
|
+
<span class="cline-any cline-yes">7x</span>
|
|
659
|
+
<span class="cline-any cline-yes">2x</span>
|
|
660
|
+
<span class="cline-any cline-yes">1x</span>
|
|
661
|
+
<span class="cline-any cline-yes">1x</span>
|
|
662
|
+
<span class="cline-any cline-yes">6x</span>
|
|
663
|
+
<span class="cline-any cline-yes">2x</span>
|
|
664
|
+
<span class="cline-any cline-yes">2x</span>
|
|
665
|
+
<span class="cline-any cline-yes">2x</span>
|
|
666
|
+
<span class="cline-any cline-yes">2x</span>
|
|
667
|
+
<span class="cline-any cline-yes">2x</span>
|
|
668
|
+
<span class="cline-any cline-yes">3x</span>
|
|
669
|
+
<span class="cline-any cline-yes">3x</span>
|
|
670
|
+
<span class="cline-any cline-neutral"> </span>
|
|
671
|
+
<span class="cline-any cline-yes">5x</span>
|
|
672
|
+
<span class="cline-any cline-yes">5x</span>
|
|
673
|
+
<span class="cline-any cline-yes">5x</span>
|
|
674
|
+
<span class="cline-any cline-yes">5x</span>
|
|
675
|
+
<span class="cline-any cline-yes">5x</span>
|
|
676
|
+
<span class="cline-any cline-yes">5x</span>
|
|
677
|
+
<span class="cline-any cline-yes">5x</span>
|
|
678
|
+
<span class="cline-any cline-yes">5x</span>
|
|
679
|
+
<span class="cline-any cline-yes">5x</span>
|
|
680
|
+
<span class="cline-any cline-yes">5x</span>
|
|
681
|
+
<span class="cline-any cline-yes">5x</span>
|
|
682
|
+
<span class="cline-any cline-neutral"> </span>
|
|
683
|
+
<span class="cline-any cline-yes">2x</span>
|
|
684
|
+
<span class="cline-any cline-yes">2x</span>
|
|
685
|
+
<span class="cline-any cline-yes">2x</span>
|
|
686
|
+
<span class="cline-any cline-yes">2x</span>
|
|
687
|
+
<span class="cline-any cline-yes">2x</span>
|
|
688
|
+
<span class="cline-any cline-yes">2x</span>
|
|
689
|
+
<span class="cline-any cline-yes">2x</span>
|
|
690
|
+
<span class="cline-any cline-yes">2x</span>
|
|
691
|
+
<span class="cline-any cline-yes">2x</span>
|
|
692
|
+
<span class="cline-any cline-yes">2x</span>
|
|
693
|
+
<span class="cline-any cline-yes">2x</span>
|
|
694
|
+
<span class="cline-any cline-neutral"> </span>
|
|
695
|
+
<span class="cline-any cline-yes">1x</span>
|
|
696
|
+
<span class="cline-any cline-yes">1x</span>
|
|
697
|
+
<span class="cline-any cline-neutral"> </span>
|
|
698
|
+
<span class="cline-any cline-yes">1x</span>
|
|
699
|
+
<span class="cline-any cline-yes">1x</span>
|
|
700
|
+
<span class="cline-any cline-yes">6x</span>
|
|
701
|
+
<span class="cline-any cline-yes">2x</span>
|
|
702
|
+
<span class="cline-any cline-yes">6x</span>
|
|
703
|
+
<span class="cline-any cline-yes">1x</span>
|
|
704
|
+
<span class="cline-any cline-yes">4x</span>
|
|
705
|
+
<span class="cline-any cline-yes">1x</span>
|
|
706
|
+
<span class="cline-any cline-yes">1x</span>
|
|
707
|
+
<span class="cline-any cline-yes">1x</span>
|
|
708
|
+
<span class="cline-any cline-yes">1x</span>
|
|
709
|
+
<span class="cline-any cline-yes">1x</span>
|
|
710
|
+
<span class="cline-any cline-yes">2x</span>
|
|
711
|
+
<span class="cline-any cline-yes">6x</span>
|
|
712
|
+
<span class="cline-any cline-yes">1x</span>
|
|
713
|
+
<span class="cline-any cline-neutral"> </span>
|
|
714
|
+
<span class="cline-any cline-yes">1x</span>
|
|
715
|
+
<span class="cline-any cline-yes">1x</span>
|
|
716
|
+
<span class="cline-any cline-yes">6x</span>
|
|
717
|
+
<span class="cline-any cline-yes">2x</span>
|
|
718
|
+
<span class="cline-any cline-yes">6x</span>
|
|
719
|
+
<span class="cline-any cline-yes">1x</span>
|
|
720
|
+
<span class="cline-any cline-yes">4x</span>
|
|
721
|
+
<span class="cline-any cline-yes">2x</span>
|
|
722
|
+
<span class="cline-any cline-yes">2x</span>
|
|
723
|
+
<span class="cline-any cline-yes">1x</span>
|
|
724
|
+
<span class="cline-any cline-yes">1x</span>
|
|
725
|
+
<span class="cline-any cline-yes">2x</span>
|
|
726
|
+
<span class="cline-any cline-yes">2x</span>
|
|
727
|
+
<span class="cline-any cline-yes">6x</span>
|
|
728
|
+
<span class="cline-any cline-yes">1x</span>
|
|
729
|
+
<span class="cline-any cline-neutral"> </span>
|
|
730
|
+
<span class="cline-any cline-yes">1x</span>
|
|
731
|
+
<span class="cline-any cline-neutral"> </span>
|
|
732
|
+
<span class="cline-any cline-yes">1x</span>
|
|
733
|
+
<span class="cline-any cline-yes">1x</span>
|
|
734
|
+
<span class="cline-any cline-yes">1x</span>
|
|
735
|
+
<span class="cline-any cline-yes">1x</span>
|
|
736
|
+
<span class="cline-any cline-yes">1x</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-neutral"> </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-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { ValidationContext, isNullOrUndefined, defaultViolations, isString, V, Validator, TypeMismatch, SuccessCallback, FailureCallback } from '@finnair/v-validation';
|
|
751
|
+
import { Path } from '@finnair/path';
|
|
752
|
+
import { DateTime, DateTimeJSOptions, DateTimeOptions, Duration, FixedOffsetZone } from 'luxon';
|
|
753
|
+
import {
|
|
754
|
+
LocalDateLuxon,
|
|
755
|
+
DateTimeLuxon,
|
|
756
|
+
DateTimeMillisLuxon,
|
|
757
|
+
DateTimeMillisUtcLuxon,
|
|
758
|
+
DateTimeUtcLuxon,
|
|
759
|
+
LuxonDateTime,
|
|
760
|
+
LocalTimeLuxon,
|
|
761
|
+
LocalDateTimeLuxon,
|
|
762
|
+
} from './luxon.js';
|
|
763
|
+
|
|
764
|
+
export type LuxonInput = string | DateTime | LuxonDateTime;
|
|
765
|
+
|
|
766
|
+
export interface DateTimeParams {
|
|
767
|
+
type: string;
|
|
768
|
+
pattern: RegExp;
|
|
769
|
+
parser: (value: string, match: RegExpExecArray) => DateTime;
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
export interface ValidateLuxonParams<Out extends LuxonDateTime> extends DateTimeParams {
|
|
773
|
+
proto: new (...args:any[]) => Out;
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
export class DateTimeValidator extends Validator<DateTime> {
|
|
777
|
+
constructor(public readonly params: DateTimeParams) {
|
|
778
|
+
super();
|
|
779
|
+
Object.freeze(params);
|
|
780
|
+
Object.freeze(this);
|
|
781
|
+
}
|
|
782
|
+
validatePathV2(value: any, path: Path, ctx: ValidationContext, success: SuccessCallback<DateTime>, failure: FailureCallback): void {
|
|
783
|
+
const params = this.params;
|
|
784
|
+
if (isNullOrUndefined(value)) {
|
|
785
|
+
failure(defaultViolations.notNull(path));
|
|
786
|
+
return;
|
|
787
|
+
}
|
|
788
|
+
if (DateTime.isDateTime(value)) {
|
|
789
|
+
if (value.isValid) {
|
|
790
|
+
success(value as DateTime);
|
|
791
|
+
return;
|
|
792
|
+
}
|
|
793
|
+
} else if (isString(value)) {
|
|
794
|
+
const match = params.pattern.exec(value);
|
|
795
|
+
if (match) {
|
|
796
|
+
const dateTime = params.parser(value, match);
|
|
797
|
+
if (dateTime.isValid) {
|
|
798
|
+
success(dateTime);
|
|
799
|
+
return;
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
failure(defaultViolations.date(value, path, params.type));
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
export class LuxonValidator<Out extends LuxonDateTime> extends Validator<Out> {
|
|
808
|
+
private readonly dateTimeValidator: DateTimeValidator;
|
|
809
|
+
constructor(public readonly params: ValidateLuxonParams<Out>) {
|
|
810
|
+
super();
|
|
811
|
+
this.dateTimeValidator = new DateTimeValidator(params);
|
|
812
|
+
Object.freeze(this);
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
validatePathV2(value: any, path: Path, ctx: ValidationContext, success: SuccessCallback<Out>, failure: FailureCallback): void {
|
|
816
|
+
if (value instanceof this.params.proto) {
|
|
817
|
+
success(value);
|
|
818
|
+
} else if (DateTime.isDateTime(value?.dateTime)) {
|
|
819
|
+
success(new this.params.proto(value.dateTime));
|
|
820
|
+
} else {
|
|
821
|
+
this.dateTimeValidator.validatePathV2(value, path, ctx,
|
|
822
|
+
(result: DateTime) => success(new this.params.proto(result)),
|
|
823
|
+
failure);
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
/**
|
|
829
|
+
* Resolve an ISO offset into a cached `FixedOffsetZone` from its already-captured parts: the
|
|
830
|
+
* `[+-]` `sign`, two-digit `hours` and optional two-digit `minutes` groups. `sign` is `undefined`
|
|
831
|
+
* for a `Z` (UTC) offset, in which case `hours`/`minutes` are absent too. Reusing the pattern's
|
|
832
|
+
* capturing groups avoids re-parsing the offset substring here. `FixedOffsetZone.instance` caches
|
|
833
|
+
* instances (and returns the shared UTC instance for a zero offset), so this stays allocation free
|
|
834
|
+
* for repeated offsets.
|
|
835
|
+
*/
|
|
836
|
+
function offsetZone(sign: string | undefined, hours: string | undefined, minutes: string | undefined): FixedOffsetZone {
|
|
837
|
+
if (sign === undefined) {
|
|
838
|
+
return FixedOffsetZone.utcInstance;
|
|
839
|
+
}
|
|
840
|
+
const offset = +hours! * 60 + (minutes ? +minutes : 0);
|
|
841
|
+
return FixedOffsetZone.instance(sign === '-' ? -offset : offset);
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
// Capturing groups: year, month, day. The pattern only guarantees the shape, so out-of-range
|
|
845
|
+
// values (e.g. an invalid leap day) still yield an invalid DateTime that fails validation.
|
|
846
|
+
const datePattern = /^(\d{4})-(\d{2})-(\d{2})$/;
|
|
847
|
+
|
|
848
|
+
function localDate() {
|
|
849
|
+
return new LuxonValidator({
|
|
850
|
+
type: 'Date',
|
|
851
|
+
proto: LocalDateLuxon,
|
|
852
|
+
pattern: datePattern,
|
|
853
|
+
parser: (_value: string, match: RegExpExecArray) => DateTime.utc(+match[1], +match[2], +match[3]),
|
|
854
|
+
});
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
// Capturing groups: hour, minute, second. LocalTimeLuxon discards the date, so any date works.
|
|
858
|
+
const timePattern = /^(\d{2}):(\d{2}):(\d{2})$/;
|
|
859
|
+
|
|
860
|
+
function localTime() {
|
|
861
|
+
return new LuxonValidator({
|
|
862
|
+
type: 'Time',
|
|
863
|
+
proto: LocalTimeLuxon,
|
|
864
|
+
pattern: timePattern,
|
|
865
|
+
parser: (_value: string, match: RegExpExecArray) => DateTime.utc(1970, 1, 1, +match[1], +match[2], +match[3]),
|
|
866
|
+
});
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
// Capturing groups: year, month, day, hour, minute, second.
|
|
870
|
+
const localDateTimePattern = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})$/;
|
|
871
|
+
|
|
872
|
+
function localDateTime() {
|
|
873
|
+
return new LuxonValidator({
|
|
874
|
+
type: 'DateTime',
|
|
875
|
+
proto: LocalDateTimeLuxon,
|
|
876
|
+
pattern: localDateTimePattern,
|
|
877
|
+
parser: (_value: string, match: RegExpExecArray) =>
|
|
878
|
+
DateTime.utc(+match[1], +match[2], +match[3], +match[4], +match[5], +match[6]),
|
|
879
|
+
});
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
// Capturing groups: year, month, day, hour, minute, second, then the offset split into sign,
|
|
883
|
+
// hours and (optional) minutes; all three offset groups are absent for a `Z` (UTC) offset. The
|
|
884
|
+
// DateTime is built in the parsed fixed-offset zone; the *Utc wrappers convert to UTC during
|
|
885
|
+
// normalization.
|
|
886
|
+
const dateTimeTzPattern = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:Z|([+-])(\d{2})(?::?(\d{2}))?)$/;
|
|
887
|
+
|
|
888
|
+
function parseDateTimeTz(match: RegExpExecArray): DateTime {
|
|
889
|
+
return DateTime.fromObject(
|
|
890
|
+
{
|
|
891
|
+
year: +match[1],
|
|
892
|
+
month: +match[2],
|
|
893
|
+
day: +match[3],
|
|
894
|
+
hour: +match[4],
|
|
895
|
+
minute: +match[5],
|
|
896
|
+
second: +match[6],
|
|
897
|
+
},
|
|
898
|
+
{ zone: offsetZone(match[7], match[8], match[9]) },
|
|
899
|
+
);
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
function dateTime() {
|
|
903
|
+
return new LuxonValidator({
|
|
904
|
+
type: 'DateTime',
|
|
905
|
+
proto: DateTimeLuxon,
|
|
906
|
+
pattern: dateTimeTzPattern,
|
|
907
|
+
parser: (_value: string, match: RegExpExecArray) => parseDateTimeTz(match),
|
|
908
|
+
});
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
function dateTimeUtc() {
|
|
912
|
+
return new LuxonValidator({
|
|
913
|
+
type: 'DateTime',
|
|
914
|
+
proto: DateTimeUtcLuxon,
|
|
915
|
+
pattern: dateTimeTzPattern,
|
|
916
|
+
parser: (_value: string, match: RegExpExecArray) => parseDateTimeTz(match),
|
|
917
|
+
});
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
// Capturing groups: year, month, day, hour, minute, second, millisecond, then the offset split
|
|
921
|
+
// into sign, hours and (optional) minutes; all three offset groups are absent for a `Z` offset.
|
|
922
|
+
const dateTimeMillisPattern = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})\.(\d{3})(?:Z|([+-])(\d{2})(?::?(\d{2}))?)$/;
|
|
923
|
+
|
|
924
|
+
function parseDateTimeMillisTz(match: RegExpExecArray): DateTime {
|
|
925
|
+
return DateTime.fromObject(
|
|
926
|
+
{
|
|
927
|
+
year: +match[1],
|
|
928
|
+
month: +match[2],
|
|
929
|
+
day: +match[3],
|
|
930
|
+
hour: +match[4],
|
|
931
|
+
minute: +match[5],
|
|
932
|
+
second: +match[6],
|
|
933
|
+
millisecond: +match[7],
|
|
934
|
+
},
|
|
935
|
+
{ zone: offsetZone(match[8], match[9], match[10]) },
|
|
936
|
+
);
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
function dateTimeMillis() {
|
|
940
|
+
return new LuxonValidator<DateTimeMillisLuxon>({
|
|
941
|
+
type: 'DateTimeMillis',
|
|
942
|
+
proto: DateTimeMillisLuxon,
|
|
943
|
+
pattern: dateTimeMillisPattern,
|
|
944
|
+
parser: (_value: string, match: RegExpExecArray) => parseDateTimeMillisTz(match),
|
|
945
|
+
});
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
function dateTimeMillisUtc() {
|
|
949
|
+
return new LuxonValidator({
|
|
950
|
+
type: 'DateTimeMillis',
|
|
951
|
+
proto: DateTimeMillisUtcLuxon,
|
|
952
|
+
pattern: dateTimeMillisPattern,
|
|
953
|
+
parser: (_value: string, match: RegExpExecArray) => parseDateTimeMillisTz(match),
|
|
954
|
+
});
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
function dateTimeFromISO(options: DateTimeOptions = { setZone: true }) {
|
|
958
|
+
return new DateTimeValidator({
|
|
959
|
+
type: 'ISODateTime',
|
|
960
|
+
pattern: /./,
|
|
961
|
+
parser: (value: string) => DateTime.fromISO(value, options),
|
|
962
|
+
});
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
function dateTimeFromRFC2822(options: DateTimeOptions = { setZone: true }) {
|
|
966
|
+
return new DateTimeValidator({
|
|
967
|
+
type: 'RFC2822DateTime',
|
|
968
|
+
pattern: /./,
|
|
969
|
+
parser: (value: string) => DateTime.fromRFC2822(value, options),
|
|
970
|
+
});
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
function dateTimeFromHTTP(options: DateTimeOptions = { setZone: true }) {
|
|
974
|
+
return new DateTimeValidator({
|
|
975
|
+
type: 'HTTPDateTime',
|
|
976
|
+
pattern: /./,
|
|
977
|
+
parser: (value: string) => DateTime.fromHTTP(value, options),
|
|
978
|
+
});
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
function dateTimeFromSQL(options: DateTimeOptions = { zone: FixedOffsetZone.utcInstance }) {
|
|
982
|
+
return new DateTimeValidator({
|
|
983
|
+
type: 'SQLDateTime',
|
|
984
|
+
pattern: /./,
|
|
985
|
+
parser: (value: string) => DateTime.fromSQL(value, options),
|
|
986
|
+
});
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
export interface ValidateLuxonNumberParams {
|
|
990
|
+
value: any;
|
|
991
|
+
path: Path;
|
|
992
|
+
ctx: ValidationContext;
|
|
993
|
+
type: string;
|
|
994
|
+
parser: (value: number) => DateTime;
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
export async function validateLuxonNumber({ value, path, ctx, type, parser }: ValidateLuxonNumberParams): Promise<DateTime> {
|
|
998
|
+
if (isNullOrUndefined(value)) {
|
|
999
|
+
return Promise.reject(defaultViolations.notNull(path));
|
|
1000
|
+
} else if (DateTime.isDateTime(value)) {
|
|
1001
|
+
if (value.isValid) {
|
|
1002
|
+
return Promise.resolve(value);
|
|
1003
|
+
}
|
|
1004
|
+
} else if (typeof value === 'number' && !Number.isNaN(value)) {
|
|
1005
|
+
const dateTime = parser(value);
|
|
1006
|
+
if (dateTime.isValid) {
|
|
1007
|
+
return Promise.resolve(dateTime);
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
1010
|
+
return Promise.reject(defaultViolations.date(value, path, type));
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
function dateTimeFromMillis(options: DateTimeJSOptions = { zone: FixedOffsetZone.utcInstance }) {
|
|
1014
|
+
return V.fn((value: any, path: Path, ctx: ValidationContext) =>
|
|
1015
|
+
validateLuxonNumber({
|
|
1016
|
+
value,
|
|
1017
|
+
path,
|
|
1018
|
+
ctx,
|
|
1019
|
+
type: 'MillisDateTime',
|
|
1020
|
+
parser: value => DateTime.fromMillis(value, options),
|
|
1021
|
+
}),
|
|
1022
|
+
);
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
function dateTimeFromSeconds(options: DateTimeJSOptions = { zone: FixedOffsetZone.utcInstance }) {
|
|
1026
|
+
return V.fn((value: any, path: Path, ctx: ValidationContext) =>
|
|
1027
|
+
validateLuxonNumber({
|
|
1028
|
+
value,
|
|
1029
|
+
path,
|
|
1030
|
+
ctx,
|
|
1031
|
+
type: 'SecondsDateTime',
|
|
1032
|
+
parser: value => DateTime.fromSeconds(value, options),
|
|
1033
|
+
}),
|
|
1034
|
+
);
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
const durationPattern =
|
|
1038
|
+
/^P(?!$)(\d+(?:\.\d+)?Y)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?W)?(\d+(?:\.\d+)?D)?(T(?=\d)(\d+(?:\.\d+)?H)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?S)?)?$/;
|
|
1039
|
+
|
|
1040
|
+
export class DurationValidator extends Validator<Duration> {
|
|
1041
|
+
validatePathV2(value: any, path: Path, ctx: ValidationContext, success: SuccessCallback<Duration>, failure: FailureCallback): void {
|
|
1042
|
+
if (isNullOrUndefined(value)) {
|
|
1043
|
+
return failure(defaultViolations.notNull(path));
|
|
1044
|
+
} else if (Duration.isDuration(value)) {
|
|
1045
|
+
return success(value);
|
|
1046
|
+
} else if (isString(value) && durationPattern.test(value)) {
|
|
1047
|
+
const duration = Duration.fromISO(value);
|
|
1048
|
+
if (duration.isValid) {
|
|
1049
|
+
return success(duration);
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
return failure(new TypeMismatch(path, 'Duration', value));
|
|
1053
|
+
}
|
|
1054
|
+
}
|
|
1055
|
+
|
|
1056
|
+
export class TimeDurationValidator extends Validator<Duration> {
|
|
1057
|
+
validatePathV2(value: any, path: Path, ctx: ValidationContext, success: SuccessCallback<Duration>, failure: FailureCallback): void {
|
|
1058
|
+
if (isNullOrUndefined(value)) {
|
|
1059
|
+
return failure(defaultViolations.notNull(path));
|
|
1060
|
+
} else if (Duration.isDuration(value)) {
|
|
1061
|
+
return success(value);
|
|
1062
|
+
} else if (isString(value)) {
|
|
1063
|
+
const duration = Duration.fromISOTime(value);
|
|
1064
|
+
if (duration.isValid) {
|
|
1065
|
+
return success(duration);
|
|
1066
|
+
}
|
|
1067
|
+
}
|
|
1068
|
+
return failure(new TypeMismatch(path, 'TimeDuration', value));
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1072
|
+
export const Vluxon = {
|
|
1073
|
+
// DateTime wrapper validators
|
|
1074
|
+
localDate,
|
|
1075
|
+
localTime,
|
|
1076
|
+
localDateTime,
|
|
1077
|
+
dateTime,
|
|
1078
|
+
dateTimeUtc,
|
|
1079
|
+
dateTimeMillis,
|
|
1080
|
+
dateTimeMillisUtc,
|
|
1081
|
+
// Plain DateTime validators
|
|
1082
|
+
dateTimeFromISO,
|
|
1083
|
+
dateTimeFromRFC2822,
|
|
1084
|
+
dateTimeFromHTTP,
|
|
1085
|
+
dateTimeFromSQL,
|
|
1086
|
+
dateTimeFromSeconds,
|
|
1087
|
+
dateTimeFromMillis,
|
|
1088
|
+
duration: () => new DurationValidator(),
|
|
1089
|
+
timeDuration: () => new TimeDurationValidator(),
|
|
1090
|
+
};
|
|
1091
|
+
Object.freeze(Vluxon);
|
|
1092
|
+
</pre></td></tr></table></pre>
|
|
1093
|
+
|
|
1094
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1095
|
+
</div><!-- /wrapper -->
|
|
1096
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1097
|
+
Code coverage generated by
|
|
1098
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1099
|
+
at 2026-09-11T12:27:28.717Z
|
|
1100
|
+
</div>
|
|
1101
|
+
<script src="prettify.js"></script>
|
|
1102
|
+
<script>
|
|
1103
|
+
window.onload = function () {
|
|
1104
|
+
prettyPrint();
|
|
1105
|
+
};
|
|
1106
|
+
</script>
|
|
1107
|
+
<script src="sorter.js"></script>
|
|
1108
|
+
<script src="block-navigation.js"></script>
|
|
1109
|
+
</body>
|
|
1110
|
+
</html>
|
|
1111
|
+
|