inlaweb-lib-dynamodb 1.0.1 → 1.0.2
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/.vscode/launch.json +22 -0
- package/.vscode/task.json +13 -0
- package/coverage/clover.xml +169 -0
- package/coverage/coverage-final.json +2 -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 +116 -0
- package/coverage/lcov-report/index.ts.html +1114 -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 +196 -0
- package/coverage/lcov.info +267 -0
- package/jest.config.js +9 -0
- package/package.json +1 -1
- package/readme.MD +8 -0
- package/src/commons/types.ts +71 -0
- package/src/index.ts +344 -0
- package/tests/index.test.ts +244 -0
- package/tsconfig.json +12 -0
- /package/{commons → dist/commons}/types.js +0 -0
- /package/{index.js → dist/index.js} +0 -0
- /package/{types → dist/types}/commons/types.d.ts +0 -0
- /package/{types → dist/types}/index.d.ts +0 -0
|
@@ -0,0 +1,1114 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for index.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> index.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'>169/169</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'>48/48</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'>25/25</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'>160/160</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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</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-yes">1x</span>
|
|
414
|
+
<span class="cline-any cline-neutral"> </span>
|
|
415
|
+
<span class="cline-any cline-yes">1x</span>
|
|
416
|
+
<span class="cline-any cline-yes">6x</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-neutral"> </span>
|
|
420
|
+
<span class="cline-any cline-neutral"> </span>
|
|
421
|
+
<span class="cline-any cline-yes">1x</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-yes">18x</span>
|
|
428
|
+
<span class="cline-any cline-yes">18x</span>
|
|
429
|
+
<span class="cline-any cline-yes">18x</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-yes">1x</span>
|
|
434
|
+
<span class="cline-any cline-neutral"> </span>
|
|
435
|
+
<span class="cline-any cline-neutral"> </span>
|
|
436
|
+
<span class="cline-any cline-neutral"> </span>
|
|
437
|
+
<span class="cline-any cline-neutral"> </span>
|
|
438
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
443
|
+
<span class="cline-any cline-neutral"> </span>
|
|
444
|
+
<span class="cline-any cline-neutral"> </span>
|
|
445
|
+
<span class="cline-any cline-yes">2x</span>
|
|
446
|
+
<span class="cline-any cline-neutral"> </span>
|
|
447
|
+
<span class="cline-any cline-neutral"> </span>
|
|
448
|
+
<span class="cline-any cline-neutral"> </span>
|
|
449
|
+
<span class="cline-any cline-neutral"> </span>
|
|
450
|
+
<span class="cline-any cline-yes">2x</span>
|
|
451
|
+
<span class="cline-any cline-yes">2x</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-neutral"> </span>
|
|
455
|
+
<span class="cline-any cline-yes">2x</span>
|
|
456
|
+
<span class="cline-any cline-yes">2x</span>
|
|
457
|
+
<span class="cline-any cline-yes">2x</span>
|
|
458
|
+
<span class="cline-any cline-yes">2x</span>
|
|
459
|
+
<span class="cline-any cline-yes">1x</span>
|
|
460
|
+
<span class="cline-any cline-neutral"> </span>
|
|
461
|
+
<span class="cline-any cline-yes">1x</span>
|
|
462
|
+
<span class="cline-any cline-neutral"> </span>
|
|
463
|
+
<span class="cline-any cline-neutral"> </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">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-neutral"> </span>
|
|
471
|
+
<span class="cline-any cline-neutral"> </span>
|
|
472
|
+
<span class="cline-any cline-neutral"> </span>
|
|
473
|
+
<span class="cline-any cline-yes">6x</span>
|
|
474
|
+
<span class="cline-any cline-yes">6x</span>
|
|
475
|
+
<span class="cline-any cline-yes">6x</span>
|
|
476
|
+
<span class="cline-any cline-yes">6x</span>
|
|
477
|
+
<span class="cline-any cline-yes">6x</span>
|
|
478
|
+
<span class="cline-any cline-yes">5x</span>
|
|
479
|
+
<span class="cline-any cline-neutral"> </span>
|
|
480
|
+
<span class="cline-any cline-yes">1x</span>
|
|
481
|
+
<span class="cline-any cline-neutral"> </span>
|
|
482
|
+
<span class="cline-any cline-neutral"> </span>
|
|
483
|
+
<span class="cline-any cline-neutral"> </span>
|
|
484
|
+
<span class="cline-any cline-yes">6x</span>
|
|
485
|
+
<span class="cline-any cline-neutral"> </span>
|
|
486
|
+
<span class="cline-any cline-yes">6x</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-yes">6x</span>
|
|
494
|
+
<span class="cline-any cline-yes">1x</span>
|
|
495
|
+
<span class="cline-any cline-neutral"> </span>
|
|
496
|
+
<span class="cline-any cline-neutral"> </span>
|
|
497
|
+
<span class="cline-any cline-neutral"> </span>
|
|
498
|
+
<span class="cline-any cline-neutral"> </span>
|
|
499
|
+
<span class="cline-any cline-neutral"> </span>
|
|
500
|
+
<span class="cline-any cline-neutral"> </span>
|
|
501
|
+
<span class="cline-any cline-neutral"> </span>
|
|
502
|
+
<span class="cline-any cline-yes">6x</span>
|
|
503
|
+
<span class="cline-any cline-yes">13x</span>
|
|
504
|
+
<span class="cline-any cline-neutral"> </span>
|
|
505
|
+
<span class="cline-any cline-neutral"> </span>
|
|
506
|
+
<span class="cline-any cline-yes">6x</span>
|
|
507
|
+
<span class="cline-any cline-neutral"> </span>
|
|
508
|
+
<span class="cline-any cline-neutral"> </span>
|
|
509
|
+
<span class="cline-any cline-neutral"> </span>
|
|
510
|
+
<span class="cline-any cline-neutral"> </span>
|
|
511
|
+
<span class="cline-any cline-neutral"> </span>
|
|
512
|
+
<span class="cline-any cline-neutral"> </span>
|
|
513
|
+
<span class="cline-any cline-neutral"> </span>
|
|
514
|
+
<span class="cline-any cline-yes">13x</span>
|
|
515
|
+
<span class="cline-any cline-neutral"> </span>
|
|
516
|
+
<span class="cline-any cline-yes">13x</span>
|
|
517
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
521
|
+
<span class="cline-any cline-yes">1x</span>
|
|
522
|
+
<span class="cline-any cline-yes">1x</span>
|
|
523
|
+
<span class="cline-any cline-yes">1x</span>
|
|
524
|
+
<span class="cline-any cline-neutral"> </span>
|
|
525
|
+
<span class="cline-any cline-yes">6x</span>
|
|
526
|
+
<span class="cline-any cline-yes">6x</span>
|
|
527
|
+
<span class="cline-any cline-neutral"> </span>
|
|
528
|
+
<span class="cline-any cline-yes">5x</span>
|
|
529
|
+
<span class="cline-any cline-yes">5x</span>
|
|
530
|
+
<span class="cline-any cline-neutral"> </span>
|
|
531
|
+
<span class="cline-any cline-neutral"> </span>
|
|
532
|
+
<span class="cline-any cline-yes">13x</span>
|
|
533
|
+
<span class="cline-any cline-yes">13x</span>
|
|
534
|
+
<span class="cline-any cline-neutral"> </span>
|
|
535
|
+
<span class="cline-any cline-neutral"> </span>
|
|
536
|
+
<span class="cline-any cline-neutral"> </span>
|
|
537
|
+
<span class="cline-any cline-neutral"> </span>
|
|
538
|
+
<span class="cline-any cline-neutral"> </span>
|
|
539
|
+
<span class="cline-any cline-neutral"> </span>
|
|
540
|
+
<span class="cline-any cline-neutral"> </span>
|
|
541
|
+
<span class="cline-any cline-yes">6x</span>
|
|
542
|
+
<span class="cline-any cline-yes">2x</span>
|
|
543
|
+
<span class="cline-any cline-neutral"> </span>
|
|
544
|
+
<span class="cline-any cline-yes">6x</span>
|
|
545
|
+
<span class="cline-any cline-neutral"> </span>
|
|
546
|
+
<span class="cline-any cline-yes">1x</span>
|
|
547
|
+
<span class="cline-any cline-yes">1x</span>
|
|
548
|
+
<span class="cline-any cline-neutral"> </span>
|
|
549
|
+
<span class="cline-any cline-yes">1x</span>
|
|
550
|
+
<span class="cline-any cline-yes">1x</span>
|
|
551
|
+
<span class="cline-any cline-neutral"> </span>
|
|
552
|
+
<span class="cline-any cline-yes">1x</span>
|
|
553
|
+
<span class="cline-any cline-yes">1x</span>
|
|
554
|
+
<span class="cline-any cline-neutral"> </span>
|
|
555
|
+
<span class="cline-any cline-yes">1x</span>
|
|
556
|
+
<span class="cline-any cline-yes">1x</span>
|
|
557
|
+
<span class="cline-any cline-neutral"> </span>
|
|
558
|
+
<span class="cline-any cline-yes">2x</span>
|
|
559
|
+
<span class="cline-any cline-yes">2x</span>
|
|
560
|
+
<span class="cline-any cline-neutral"> </span>
|
|
561
|
+
<span class="cline-any cline-neutral"> </span>
|
|
562
|
+
<span class="cline-any cline-neutral"> </span>
|
|
563
|
+
<span class="cline-any cline-neutral"> </span>
|
|
564
|
+
<span class="cline-any cline-yes">8x</span>
|
|
565
|
+
<span class="cline-any cline-yes">7x</span>
|
|
566
|
+
<span class="cline-any cline-neutral"> </span>
|
|
567
|
+
<span class="cline-any cline-yes">1x</span>
|
|
568
|
+
<span class="cline-any cline-yes">1x</span>
|
|
569
|
+
<span class="cline-any cline-yes">1x</span>
|
|
570
|
+
<span class="cline-any cline-yes">1x</span>
|
|
571
|
+
<span class="cline-any cline-yes">1x</span>
|
|
572
|
+
<span class="cline-any cline-yes">2x</span>
|
|
573
|
+
<span class="cline-any cline-yes">2x</span>
|
|
574
|
+
<span class="cline-any cline-neutral"> </span>
|
|
575
|
+
<span class="cline-any cline-yes">1x</span>
|
|
576
|
+
<span class="cline-any cline-yes">1x</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-neutral"> </span>
|
|
581
|
+
<span class="cline-any cline-yes">1x</span>
|
|
582
|
+
<span class="cline-any cline-yes">1x</span>
|
|
583
|
+
<span class="cline-any cline-yes">1x</span>
|
|
584
|
+
<span class="cline-any cline-neutral"> </span>
|
|
585
|
+
<span class="cline-any cline-neutral"> </span>
|
|
586
|
+
<span class="cline-any cline-neutral"> </span>
|
|
587
|
+
<span class="cline-any cline-neutral"> </span>
|
|
588
|
+
<span class="cline-any cline-neutral"> </span>
|
|
589
|
+
<span class="cline-any cline-yes">1x</span>
|
|
590
|
+
<span class="cline-any cline-yes">1x</span>
|
|
591
|
+
<span class="cline-any cline-yes">1x</span>
|
|
592
|
+
<span class="cline-any cline-neutral"> </span>
|
|
593
|
+
<span class="cline-any cline-yes">1x</span>
|
|
594
|
+
<span class="cline-any cline-neutral"> </span>
|
|
595
|
+
<span class="cline-any cline-neutral"> </span>
|
|
596
|
+
<span class="cline-any cline-neutral"> </span>
|
|
597
|
+
<span class="cline-any cline-yes">1x</span>
|
|
598
|
+
<span class="cline-any cline-yes">1x</span>
|
|
599
|
+
<span class="cline-any cline-yes">1x</span>
|
|
600
|
+
<span class="cline-any cline-yes">1x</span>
|
|
601
|
+
<span class="cline-any cline-neutral"> </span>
|
|
602
|
+
<span class="cline-any cline-yes">1x</span>
|
|
603
|
+
<span class="cline-any cline-yes">2x</span>
|
|
604
|
+
<span class="cline-any cline-yes">2x</span>
|
|
605
|
+
<span class="cline-any cline-neutral"> </span>
|
|
606
|
+
<span class="cline-any cline-yes">1x</span>
|
|
607
|
+
<span class="cline-any cline-neutral"> </span>
|
|
608
|
+
<span class="cline-any cline-neutral"> </span>
|
|
609
|
+
<span class="cline-any cline-neutral"> </span>
|
|
610
|
+
<span class="cline-any cline-yes">1x</span>
|
|
611
|
+
<span class="cline-any cline-yes">1x</span>
|
|
612
|
+
<span class="cline-any cline-yes">1x</span>
|
|
613
|
+
<span class="cline-any cline-neutral"> </span>
|
|
614
|
+
<span class="cline-any cline-neutral"> </span>
|
|
615
|
+
<span class="cline-any cline-neutral"> </span>
|
|
616
|
+
<span class="cline-any cline-yes">1x</span>
|
|
617
|
+
<span class="cline-any cline-yes">1x</span>
|
|
618
|
+
<span class="cline-any cline-yes">1x</span>
|
|
619
|
+
<span class="cline-any cline-neutral"> </span>
|
|
620
|
+
<span class="cline-any cline-yes">1x</span>
|
|
621
|
+
<span class="cline-any cline-neutral"> </span>
|
|
622
|
+
<span class="cline-any cline-neutral"> </span>
|
|
623
|
+
<span class="cline-any cline-neutral"> </span>
|
|
624
|
+
<span class="cline-any cline-yes">1x</span>
|
|
625
|
+
<span class="cline-any cline-yes">1x</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-neutral"> </span>
|
|
629
|
+
<span class="cline-any cline-yes">1x</span>
|
|
630
|
+
<span class="cline-any cline-yes">2x</span>
|
|
631
|
+
<span class="cline-any cline-yes">2x</span>
|
|
632
|
+
<span class="cline-any cline-neutral"> </span>
|
|
633
|
+
<span class="cline-any cline-yes">1x</span>
|
|
634
|
+
<span class="cline-any cline-neutral"> </span>
|
|
635
|
+
<span class="cline-any cline-neutral"> </span>
|
|
636
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
644
|
+
<span class="cline-any cline-yes">2x</span>
|
|
645
|
+
<span class="cline-any cline-neutral"> </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">2x</span>
|
|
656
|
+
<span class="cline-any cline-yes">2x</span>
|
|
657
|
+
<span class="cline-any cline-neutral"> </span>
|
|
658
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
662
|
+
<span class="cline-any cline-neutral"> </span>
|
|
663
|
+
<span class="cline-any cline-yes">2x</span>
|
|
664
|
+
<span class="cline-any cline-yes">1x</span>
|
|
665
|
+
<span class="cline-any cline-neutral"> </span>
|
|
666
|
+
<span class="cline-any cline-neutral"> </span>
|
|
667
|
+
<span class="cline-any cline-yes">2x</span>
|
|
668
|
+
<span class="cline-any cline-yes">2x</span>
|
|
669
|
+
<span class="cline-any cline-neutral"> </span>
|
|
670
|
+
<span class="cline-any cline-neutral"> </span>
|
|
671
|
+
<span class="cline-any cline-neutral"> </span>
|
|
672
|
+
<span class="cline-any cline-neutral"> </span>
|
|
673
|
+
<span class="cline-any cline-yes">3x</span>
|
|
674
|
+
<span class="cline-any cline-neutral"> </span>
|
|
675
|
+
<span class="cline-any cline-yes">3x</span>
|
|
676
|
+
<span class="cline-any cline-neutral"> </span>
|
|
677
|
+
<span class="cline-any cline-yes">3x</span>
|
|
678
|
+
<span class="cline-any cline-yes">7x</span>
|
|
679
|
+
<span class="cline-any cline-yes">7x</span>
|
|
680
|
+
<span class="cline-any cline-yes">7x</span>
|
|
681
|
+
<span class="cline-any cline-yes">7x</span>
|
|
682
|
+
<span class="cline-any cline-neutral"> </span>
|
|
683
|
+
<span class="cline-any cline-neutral"> </span>
|
|
684
|
+
<span class="cline-any cline-neutral"> </span>
|
|
685
|
+
<span class="cline-any cline-yes">3x</span>
|
|
686
|
+
<span class="cline-any cline-neutral"> </span>
|
|
687
|
+
<span class="cline-any cline-yes">3x</span>
|
|
688
|
+
<span class="cline-any cline-neutral"> </span>
|
|
689
|
+
<span class="cline-any cline-neutral"> </span>
|
|
690
|
+
<span class="cline-any cline-neutral"> </span>
|
|
691
|
+
<span class="cline-any cline-yes">1x</span>
|
|
692
|
+
<span class="cline-any cline-neutral"> </span>
|
|
693
|
+
<span class="cline-any cline-yes">1x</span>
|
|
694
|
+
<span class="cline-any cline-neutral"> </span>
|
|
695
|
+
<span class="cline-any cline-yes">1x</span>
|
|
696
|
+
<span class="cline-any cline-neutral"> </span>
|
|
697
|
+
<span class="cline-any cline-yes">1x</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-neutral"> </span>
|
|
701
|
+
<span class="cline-any cline-neutral"> </span>
|
|
702
|
+
<span class="cline-any cline-yes">1x</span>
|
|
703
|
+
<span class="cline-any cline-neutral"> </span>
|
|
704
|
+
<span class="cline-any cline-yes">1x</span>
|
|
705
|
+
<span class="cline-any cline-neutral"> </span>
|
|
706
|
+
<span class="cline-any cline-neutral"> </span>
|
|
707
|
+
<span class="cline-any cline-neutral"> </span>
|
|
708
|
+
<span class="cline-any cline-yes">2x</span>
|
|
709
|
+
<span class="cline-any cline-yes">2x</span>
|
|
710
|
+
<span class="cline-any cline-yes">2x</span>
|
|
711
|
+
<span class="cline-any cline-neutral"> </span>
|
|
712
|
+
<span class="cline-any cline-neutral"> </span>
|
|
713
|
+
<span class="cline-any cline-neutral"> </span>
|
|
714
|
+
<span class="cline-any cline-neutral"> </span>
|
|
715
|
+
<span class="cline-any cline-neutral"> </span>
|
|
716
|
+
<span class="cline-any cline-neutral"> </span>
|
|
717
|
+
<span class="cline-any cline-neutral"> </span>
|
|
718
|
+
<span class="cline-any cline-yes">2x</span>
|
|
719
|
+
<span class="cline-any cline-neutral"> </span>
|
|
720
|
+
<span class="cline-any cline-yes">2x</span>
|
|
721
|
+
<span class="cline-any cline-neutral"> </span>
|
|
722
|
+
<span class="cline-any cline-neutral"> </span>
|
|
723
|
+
<span class="cline-any cline-neutral"> </span>
|
|
724
|
+
<span class="cline-any cline-neutral"> </span>
|
|
725
|
+
<span class="cline-any cline-neutral"> </span>
|
|
726
|
+
<span class="cline-any cline-neutral"> </span>
|
|
727
|
+
<span class="cline-any cline-neutral"> </span>
|
|
728
|
+
<span class="cline-any cline-yes">2x</span>
|
|
729
|
+
<span class="cline-any cline-yes">2x</span>
|
|
730
|
+
<span class="cline-any cline-yes">2x</span>
|
|
731
|
+
<span class="cline-any cline-yes">2x</span>
|
|
732
|
+
<span class="cline-any cline-yes">1x</span>
|
|
733
|
+
<span class="cline-any cline-neutral"> </span>
|
|
734
|
+
<span class="cline-any cline-neutral"> </span>
|
|
735
|
+
<span class="cline-any cline-neutral"> </span>
|
|
736
|
+
<span class="cline-any cline-neutral"> </span>
|
|
737
|
+
<span class="cline-any cline-neutral"> </span>
|
|
738
|
+
<span class="cline-any cline-yes">3x</span>
|
|
739
|
+
<span class="cline-any cline-neutral"> </span>
|
|
740
|
+
<span class="cline-any cline-neutral"> </span>
|
|
741
|
+
<span class="cline-any cline-neutral"> </span>
|
|
742
|
+
<span class="cline-any cline-neutral"> </span>
|
|
743
|
+
<span class="cline-any cline-neutral"> </span>
|
|
744
|
+
<span class="cline-any cline-neutral"> </span>
|
|
745
|
+
<span class="cline-any cline-yes">3x</span>
|
|
746
|
+
<span class="cline-any cline-yes">3x</span>
|
|
747
|
+
<span class="cline-any cline-yes">2x</span>
|
|
748
|
+
<span class="cline-any cline-yes">2x</span>
|
|
749
|
+
<span class="cline-any cline-neutral"> </span>
|
|
750
|
+
<span class="cline-any cline-yes">1x</span>
|
|
751
|
+
<span class="cline-any cline-neutral"> </span>
|
|
752
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
|
|
753
|
+
import { DynamoDBDocumentClient, GetCommand, PutCommand, QueryCommand, UpdateCommand, BatchWriteCommand, TransactWriteCommand } from "@aws-sdk/lib-dynamodb";
|
|
754
|
+
import { Logger } from "@aws-lambda-powertools/logger"
|
|
755
|
+
import { ParamsPut, ParamsGet, ParamsQuery, ParamsUpdate, ProjectionExpression, SearchParameters, KeyValue, InputUpdate, Operation } from "./commons/types";
|
|
756
|
+
import moment from "moment-timezone";
|
|
757
|
+
|
|
758
|
+
const templatesUpdateExpresion = {
|
|
759
|
+
SET: (atribute: string) => `#${atribute} = :${atribute},`,
|
|
760
|
+
ADD: (atribute: string) => `#${atribute} :${atribute},`,
|
|
761
|
+
REMOVE: (atribute: string) => `#${atribute},`,
|
|
762
|
+
};
|
|
763
|
+
|
|
764
|
+
export class DynamoLib {
|
|
765
|
+
private readonly client: DynamoDBClient;
|
|
766
|
+
private readonly docClient: DynamoDBDocumentClient;
|
|
767
|
+
private readonly logger: Logger;
|
|
768
|
+
|
|
769
|
+
constructor() {
|
|
770
|
+
this.client = new DynamoDBClient({});
|
|
771
|
+
this.docClient = DynamoDBDocumentClient.from(this.client);
|
|
772
|
+
this.logger = new Logger();
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
async putItem(tableName: string, item: KeyValue): Promise<void> {
|
|
776
|
+
const params: ParamsPut = {
|
|
777
|
+
TableName: tableName,
|
|
778
|
+
Item: item,
|
|
779
|
+
ReturnItemCollectionMetrics: "SIZE",
|
|
780
|
+
ReturnConsumedCapacity: "TOTAL",
|
|
781
|
+
};
|
|
782
|
+
this.logger.debug(`PutItem: ${JSON.stringify(params)}`);
|
|
783
|
+
const result = await this.docClient.send(new PutCommand(params));
|
|
784
|
+
this.logger.debug(`PutItem Result: ${JSON.stringify(result)}`);
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
async getItem<T>(tableName: string, key: KeyValue, projectionExpression?: string): Promise<T | undefined> {
|
|
788
|
+
const params: ParamsGet = {
|
|
789
|
+
TableName: tableName,
|
|
790
|
+
Key: key,
|
|
791
|
+
ReturnConsumedCapacity: "TOTAL",
|
|
792
|
+
};
|
|
793
|
+
const projection = this.buildProjectionExpression(projectionExpression);
|
|
794
|
+
if(projection) {
|
|
795
|
+
params.ProjectionExpression = projection.projectionExpression;
|
|
796
|
+
params.ExpressionAttributeNames = projection.expressionAttributeNames;
|
|
797
|
+
}
|
|
798
|
+
this.logger.debug(`GetItem: ${JSON.stringify(params)}`);
|
|
799
|
+
const response = await this.docClient.send(new GetCommand(params));
|
|
800
|
+
this.logger.debug(`GetItem Result: ${JSON.stringify(response)}`);
|
|
801
|
+
if (response.Item) {
|
|
802
|
+
return response.Item as T;
|
|
803
|
+
}
|
|
804
|
+
return undefined;
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
async updateItem(params: InputUpdate): Promise<boolean> {
|
|
808
|
+
const itemUpdate = this.createUpdateParams(params);
|
|
809
|
+
this.logger.debug(`UpdateItem: ${JSON.stringify(itemUpdate.Update)}`);
|
|
810
|
+
const result = await this.docClient.send(new UpdateCommand(itemUpdate.Update));
|
|
811
|
+
this.logger.debug(`UpdateItem Result: ${JSON.stringify(result)}`);
|
|
812
|
+
return true;
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
async query<T>(params: {tableName: string, searchParameters: SearchParameters, permission?: string, username?: string}): Promise<T[] | undefined> {
|
|
816
|
+
const parameters: ParamsQuery = this.buildQueryParams(params);
|
|
817
|
+
this.logger.debug(`Query: ${JSON.stringify(parameters)}`);
|
|
818
|
+
const response = await this.docClient.send(new QueryCommand(parameters));
|
|
819
|
+
this.logger.debug(`Query Result: ${JSON.stringify(response)}`);
|
|
820
|
+
if(response.Items) {
|
|
821
|
+
return response.Items as T[];
|
|
822
|
+
}
|
|
823
|
+
return;
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
private buildQueryParams(params: {tableName: string, searchParameters: SearchParameters, permission?: string, username?: string}): ParamsQuery {
|
|
827
|
+
const projection = this.buildProjectionExpression(params.searchParameters.projectionExpression);
|
|
828
|
+
|
|
829
|
+
const parameters: ParamsQuery = {
|
|
830
|
+
TableName: params.tableName,
|
|
831
|
+
KeyConditionExpression: "",
|
|
832
|
+
ExpressionAttributeNames: projection?.expressionAttributeNames || {},
|
|
833
|
+
ExpressionAttributeValues: {}
|
|
834
|
+
};
|
|
835
|
+
|
|
836
|
+
if (params.permission && params.permission === "OWNS") {
|
|
837
|
+
params.searchParameters.parameters.push({
|
|
838
|
+
name: "creationUser",
|
|
839
|
+
value: params.username,
|
|
840
|
+
operator: "FILTER",
|
|
841
|
+
filterOperator: "=",
|
|
842
|
+
});
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
params.searchParameters.parameters.forEach((searchParameter, index) => {
|
|
846
|
+
this.buildExpressions(searchParameter, index, parameters);
|
|
847
|
+
});
|
|
848
|
+
|
|
849
|
+
return parameters;
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
private buildExpressions(
|
|
853
|
+
searchParameter: KeyValue,
|
|
854
|
+
index: number,
|
|
855
|
+
params: ParamsQuery
|
|
856
|
+
): void {
|
|
857
|
+
if (index !== 0 && searchParameter.operator !== "FILTER") params.KeyConditionExpression += " and ";
|
|
858
|
+
|
|
859
|
+
switch (searchParameter.operator) {
|
|
860
|
+
case "begins_with":
|
|
861
|
+
params.KeyConditionExpression += `${searchParameter.operator}(#key${index}, :value${index})`;
|
|
862
|
+
break;
|
|
863
|
+
case "BETWEEN":
|
|
864
|
+
params.KeyConditionExpression += `#key${index} ${searchParameter.operator} :value${index} AND :value1${index}`;
|
|
865
|
+
params.ExpressionAttributeValues[`:value1${index}`] = searchParameter.value1;
|
|
866
|
+
break;
|
|
867
|
+
case "FILTER":
|
|
868
|
+
this.buildFilterExpression(searchParameter, index, params);
|
|
869
|
+
break;
|
|
870
|
+
default:
|
|
871
|
+
params.KeyConditionExpression += `#key${index} ${searchParameter.operator} :value${index}`;
|
|
872
|
+
break;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
params.ExpressionAttributeNames[`#key${index}`] = searchParameter.name;
|
|
876
|
+
params.ExpressionAttributeValues[`:value${index}`] = searchParameter.value;
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
private buildFilterExpression(
|
|
880
|
+
searchParameter: KeyValue,
|
|
881
|
+
index: number,
|
|
882
|
+
params: ParamsQuery
|
|
883
|
+
): void {
|
|
884
|
+
if (params.FilterExpression) params.FilterExpression += ' and ';
|
|
885
|
+
else params.FilterExpression = '';
|
|
886
|
+
|
|
887
|
+
switch (searchParameter.filterOperator) {
|
|
888
|
+
case 'contains':
|
|
889
|
+
params.FilterExpression += `contains (#key${index}, :value${index})`;
|
|
890
|
+
break;
|
|
891
|
+
case 'begins_with':
|
|
892
|
+
params.FilterExpression += `${searchParameter.filterOperator}(#key${index}, :value${index})`;
|
|
893
|
+
break;
|
|
894
|
+
case "attribute_not_exists":
|
|
895
|
+
params.FilterExpression += `attribute_not_exists (#key${index})`;
|
|
896
|
+
break;
|
|
897
|
+
case "attribute_exists":
|
|
898
|
+
params.FilterExpression += `attribute_exists (#key${index})`;
|
|
899
|
+
break;
|
|
900
|
+
default:
|
|
901
|
+
params.FilterExpression += `#key${index} ${searchParameter.filterOperator} :value${index}`;
|
|
902
|
+
break;
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
private buildProjectionExpression(projectionExpression: string | undefined): ProjectionExpression | undefined {
|
|
907
|
+
if (!projectionExpression) {
|
|
908
|
+
return undefined;
|
|
909
|
+
}
|
|
910
|
+
const fields = projectionExpression.split(",");
|
|
911
|
+
if(fields.length > 0) {
|
|
912
|
+
let projectionExpression = "";
|
|
913
|
+
const expressionAttributeNames: KeyValue = {};
|
|
914
|
+
fields.forEach((field) => {
|
|
915
|
+
projectionExpression += `#${field},`;
|
|
916
|
+
expressionAttributeNames[`#${field}`] = field;
|
|
917
|
+
});
|
|
918
|
+
projectionExpression = projectionExpression.slice(0, -1);
|
|
919
|
+
return { projectionExpression, expressionAttributeNames };
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
async saveBatch(table: string, items: KeyValue[]): Promise<boolean> {
|
|
924
|
+
const executions = this.createBatch(items);
|
|
925
|
+
for (let i = 0; i < executions.length; i++) {
|
|
926
|
+
const params = {
|
|
927
|
+
RequestItems: {
|
|
928
|
+
[table]: executions[i] as any
|
|
929
|
+
},
|
|
930
|
+
ReturnConsumedCapacity: "TOTAL" as const,
|
|
931
|
+
};
|
|
932
|
+
this.logger.debug(`BatchWrite: ${JSON.stringify(params)}`);
|
|
933
|
+
const response = await this.docClient.send(new BatchWriteCommand(params));
|
|
934
|
+
this.logger.debug(`BatchWrite Result: ${JSON.stringify(response)}`);
|
|
935
|
+
}
|
|
936
|
+
return true;
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
private createBatch(items: KeyValue[]): KeyValue[] {
|
|
940
|
+
const executions: KeyValue[] = [];
|
|
941
|
+
const numberOfBacthInsertions = Math.ceil(items.length / 25);
|
|
942
|
+
for (let i = 0; i < numberOfBacthInsertions; i++) {
|
|
943
|
+
executions[i] = [];
|
|
944
|
+
}
|
|
945
|
+
items.forEach((item, index) => {
|
|
946
|
+
const currentIndex = Math.ceil((index + 1) / 25);
|
|
947
|
+
executions[currentIndex - 1].push({ PutRequest: { Item: item } });
|
|
948
|
+
});
|
|
949
|
+
return executions;
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
async writeTransactions(items: KeyValue[], limit: number): Promise<boolean> {
|
|
953
|
+
const executions = this.createWriteTransactions(items, limit);
|
|
954
|
+
for (let i = 0; i < executions.length; i++) {
|
|
955
|
+
const params = {
|
|
956
|
+
TransactItems: executions[i],
|
|
957
|
+
ReturnConsumedCapacity: "TOTAL" as const,
|
|
958
|
+
};
|
|
959
|
+
this.logger.debug(`TransactWrite: ${JSON.stringify(params)}`);
|
|
960
|
+
const response = await this.docClient.send(new TransactWriteCommand(params));
|
|
961
|
+
this.logger.debug(`TransactWrite Result: ${JSON.stringify(response)}`);
|
|
962
|
+
}
|
|
963
|
+
return true;
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
createWriteTransactions(items: KeyValue[], limit: number): KeyValue[][] {
|
|
967
|
+
const executions: KeyValue[][] = [];
|
|
968
|
+
const numberOfBacthInsertions = Math.ceil(items.length / limit);
|
|
969
|
+
for (let i = 0; i < numberOfBacthInsertions; i++) {
|
|
970
|
+
executions[i] = [];
|
|
971
|
+
}
|
|
972
|
+
items.forEach((item, index) => {
|
|
973
|
+
const currentIndex = Math.ceil((index + 1) / limit);
|
|
974
|
+
executions[currentIndex - 1].push({ Put: { Item: item } });
|
|
975
|
+
});
|
|
976
|
+
return executions;
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
createUpdateParams(params: InputUpdate): KeyValue {
|
|
980
|
+
const { table, PK, SK, item, setAttributes, addAttributes, removeAttributes, username } = params;
|
|
981
|
+
// Se agregan los datos de auditoría para la actualización
|
|
982
|
+
item.updateUser = username;
|
|
983
|
+
item.updateDate = moment.tz(new Date(), "America/Bogota").format("YYYY-MM-DD");
|
|
984
|
+
if (!setAttributes.includes("updateUser")) setAttributes.push("updateUser");
|
|
985
|
+
if (!setAttributes.includes("updateDate")) setAttributes.push("updateDate");
|
|
986
|
+
// Se crea el objeto de la operación
|
|
987
|
+
let itemUpdate = {
|
|
988
|
+
Update: {
|
|
989
|
+
TableName: table,
|
|
990
|
+
Key: { PK, SK },
|
|
991
|
+
UpdateExpression: ``,
|
|
992
|
+
ExpressionAttributeNames: {},
|
|
993
|
+
ExpressionAttributeValues: {},
|
|
994
|
+
ReturnConsumedCapacity: "TOTAL",
|
|
995
|
+
},
|
|
996
|
+
};
|
|
997
|
+
// Se agregan los campos a modificar
|
|
998
|
+
if (Array.isArray(setAttributes) && setAttributes.length) {
|
|
999
|
+
this.formatUpdateExpression("SET", itemUpdate, item, setAttributes);
|
|
1000
|
+
}
|
|
1001
|
+
// Se agragan los campos nuevos del item
|
|
1002
|
+
if (Array.isArray(addAttributes) && addAttributes.length) {
|
|
1003
|
+
this.formatUpdateExpression("ADD", itemUpdate, item, addAttributes);
|
|
1004
|
+
}
|
|
1005
|
+
// Se agregan los campos que deben ser borrados
|
|
1006
|
+
if (Array.isArray(removeAttributes) && removeAttributes.length) {
|
|
1007
|
+
this.formatUpdateExpressionRemove(itemUpdate, removeAttributes);
|
|
1008
|
+
}
|
|
1009
|
+
// Se remueve el espacio al final de la expresión
|
|
1010
|
+
itemUpdate.Update.UpdateExpression = itemUpdate.Update.UpdateExpression.slice(0, -1);
|
|
1011
|
+
return itemUpdate;
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
private formatUpdateExpression(operation: Operation, updateObject: KeyValue, item: KeyValue, atributes: string[]): void {
|
|
1015
|
+
// Se agrega la operación.
|
|
1016
|
+
updateObject.Update.UpdateExpression += `${operation} `;
|
|
1017
|
+
// Se obtiene el templete de acuerdo a la operación.
|
|
1018
|
+
let operationTemplate = templatesUpdateExpresion[operation];
|
|
1019
|
+
// Se añaden los items afectados por la operación.
|
|
1020
|
+
for (let atribute of atributes) {
|
|
1021
|
+
if (typeof item[atribute] === "boolean" || typeof item[atribute] === "number" || item[atribute]) {
|
|
1022
|
+
updateObject.Update.UpdateExpression += operationTemplate(atribute);
|
|
1023
|
+
updateObject.Update.ExpressionAttributeNames[`#${atribute}`] = atribute;
|
|
1024
|
+
updateObject.Update.ExpressionAttributeValues[`:${atribute}`] = item[atribute];
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
// Se remueve la coma final para evitar errores con el SDK.
|
|
1028
|
+
updateObject.Update.UpdateExpression = updateObject.Update.UpdateExpression.slice(0, -1);
|
|
1029
|
+
// Se añade un espacio para poder agregar nuevas operaciones.
|
|
1030
|
+
updateObject.Update.UpdateExpression += " ";
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
private formatUpdateExpressionRemove(updateObject: KeyValue, atributes: string[]): void {
|
|
1034
|
+
let operation: Operation = "REMOVE";
|
|
1035
|
+
// Se agrega la operación.
|
|
1036
|
+
updateObject.Update.UpdateExpression += `${operation} `;
|
|
1037
|
+
// Se obtiene el templete de acuerdo a la operación.
|
|
1038
|
+
let operationTemplate = templatesUpdateExpresion[operation];
|
|
1039
|
+
// Se añaden los items afectados por la operación.
|
|
1040
|
+
for (let atribute of atributes) {
|
|
1041
|
+
updateObject.Update.UpdateExpression += operationTemplate(atribute);
|
|
1042
|
+
updateObject.Update.ExpressionAttributeNames[`#${atribute}`] = atribute;
|
|
1043
|
+
}
|
|
1044
|
+
// Se remueve la coma final para evitar errores con el SDK.
|
|
1045
|
+
updateObject.Update.UpdateExpression = updateObject.Update.UpdateExpression.slice(0, -1);
|
|
1046
|
+
// Se añade un espacio para poder agregar nuevas operaciones.
|
|
1047
|
+
updateObject.Update.UpdateExpression += " ";
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
async getId(table: string, entity: string, username: string, quantity?: number): Promise<number> {
|
|
1051
|
+
let item = await this.getItem<KeyValue>(table, {PK: "COUN", SK: entity}, "order");
|
|
1052
|
+
if (!item) {
|
|
1053
|
+
item = {
|
|
1054
|
+
PK: "COUN",
|
|
1055
|
+
SK: entity,
|
|
1056
|
+
entity: "COUN",
|
|
1057
|
+
order: 0,
|
|
1058
|
+
creationUser: username,
|
|
1059
|
+
creationDate: moment.tz(new Date(), "America/Bogota").format("YYYY-MM-DD"),
|
|
1060
|
+
};
|
|
1061
|
+
await this.putItem(table, item);
|
|
1062
|
+
}
|
|
1063
|
+
const params: ParamsUpdate = {
|
|
1064
|
+
TableName: table,
|
|
1065
|
+
Key: { PK: "COUN", SK: entity },
|
|
1066
|
+
UpdateExpression: `SET #id = #id + :increment`,
|
|
1067
|
+
ExpressionAttributeNames: {"#id": "order"},
|
|
1068
|
+
ExpressionAttributeValues: {":increment": quantity || 1 },
|
|
1069
|
+
ReturnValues: "UPDATED_OLD"
|
|
1070
|
+
};
|
|
1071
|
+
this.logger.debug(`GetId: ${JSON.stringify(params)}`);
|
|
1072
|
+
const result = await this.docClient.send(new UpdateCommand(params));
|
|
1073
|
+
this.logger.debug(`GetId Result: ${JSON.stringify(result)}`);
|
|
1074
|
+
if(result.Attributes) return result.Attributes.order + 1;
|
|
1075
|
+
return 1;
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
async validatePermission(table: string, entity: string, action: string, profile: string): Promise<string | undefined> {
|
|
1079
|
+
let result: KeyValue;
|
|
1080
|
+
|
|
1081
|
+
let searchParameters = {
|
|
1082
|
+
indexName: "GSI2",
|
|
1083
|
+
parameters: [
|
|
1084
|
+
{ name: "entity", value: "PERM", operator: "=" },
|
|
1085
|
+
{ name: "relation2", value: `${profile}|${entity}|${action}`, operator: "=" },
|
|
1086
|
+
],
|
|
1087
|
+
};
|
|
1088
|
+
let permissionQuery = await this.query<KeyValue>({tableName: table, searchParameters});
|
|
1089
|
+
if (permissionQuery && permissionQuery.length > 0) {
|
|
1090
|
+
result = permissionQuery[0];
|
|
1091
|
+
return result.type === "ALL" ? "ALL" : "OWNS";
|
|
1092
|
+
}
|
|
1093
|
+
throw new Error("UNAUTHORIZE_REQUEST");
|
|
1094
|
+
}
|
|
1095
|
+
}</pre></td></tr></table></pre>
|
|
1096
|
+
|
|
1097
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1098
|
+
</div><!-- /wrapper -->
|
|
1099
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1100
|
+
Code coverage generated by
|
|
1101
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1102
|
+
at 2025-03-07T20:16:19.147Z
|
|
1103
|
+
</div>
|
|
1104
|
+
<script src="prettify.js"></script>
|
|
1105
|
+
<script>
|
|
1106
|
+
window.onload = function () {
|
|
1107
|
+
prettyPrint();
|
|
1108
|
+
};
|
|
1109
|
+
</script>
|
|
1110
|
+
<script src="sorter.js"></script>
|
|
1111
|
+
<script src="block-navigation.js"></script>
|
|
1112
|
+
</body>
|
|
1113
|
+
</html>
|
|
1114
|
+
|