@node-c/persistance-redis 1.0.0-alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +4 -0
  3. package/coverage/base.css +224 -0
  4. package/coverage/block-navigation.js +87 -0
  5. package/coverage/clover.xml +573 -0
  6. package/coverage/common/definitions/common.constants.ts.html +121 -0
  7. package/coverage/common/definitions/index.html +131 -0
  8. package/coverage/common/definitions/index.ts.html +88 -0
  9. package/coverage/coverage-final.json +13 -0
  10. package/coverage/entityService/index.html +131 -0
  11. package/coverage/entityService/index.ts.html +91 -0
  12. package/coverage/entityService/redis.entity.service.ts.html +439 -0
  13. package/coverage/favicon.png +0 -0
  14. package/coverage/index.html +176 -0
  15. package/coverage/module/index.html +131 -0
  16. package/coverage/module/index.ts.html +91 -0
  17. package/coverage/module/redis.module.ts.html +169 -0
  18. package/coverage/prettify.css +1 -0
  19. package/coverage/prettify.js +2 -0
  20. package/coverage/repository/index.html +146 -0
  21. package/coverage/repository/index.ts.html +94 -0
  22. package/coverage/repository/redis.repository.module.ts.html +181 -0
  23. package/coverage/repository/redis.repository.service.ts.html +763 -0
  24. package/coverage/sort-arrow-sprite.png +0 -0
  25. package/coverage/sorter.js +196 -0
  26. package/coverage/store/index.html +146 -0
  27. package/coverage/store/index.ts.html +94 -0
  28. package/coverage/store/redis.store.module.ts.html +181 -0
  29. package/coverage/store/redis.store.service.ts.html +586 -0
  30. package/dist/common/definitions/common.constants.d.ts +7 -0
  31. package/dist/common/definitions/common.constants.js +12 -0
  32. package/dist/common/definitions/common.constants.js.map +1 -0
  33. package/dist/common/definitions/index.d.ts +1 -0
  34. package/dist/common/definitions/index.js +18 -0
  35. package/dist/common/definitions/index.js.map +1 -0
  36. package/dist/entityService/index.d.ts +2 -0
  37. package/dist/entityService/index.js +19 -0
  38. package/dist/entityService/index.js.map +1 -0
  39. package/dist/entityService/redis.entity.service.d.ts +16 -0
  40. package/dist/entityService/redis.entity.service.definitions.d.ts +19 -0
  41. package/dist/entityService/redis.entity.service.definitions.js +3 -0
  42. package/dist/entityService/redis.entity.service.definitions.js.map +1 -0
  43. package/dist/entityService/redis.entity.service.js +121 -0
  44. package/dist/entityService/redis.entity.service.js.map +1 -0
  45. package/dist/index.d.ts +5 -0
  46. package/dist/index.js +22 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/module/index.d.ts +2 -0
  49. package/dist/module/index.js +19 -0
  50. package/dist/module/index.js.map +1 -0
  51. package/dist/module/redis.module.d.ts +5 -0
  52. package/dist/module/redis.module.definitions.d.ts +14 -0
  53. package/dist/module/redis.module.definitions.js +3 -0
  54. package/dist/module/redis.module.definitions.js.map +1 -0
  55. package/dist/module/redis.module.js +27 -0
  56. package/dist/module/redis.module.js.map +1 -0
  57. package/dist/repository/index.d.ts +3 -0
  58. package/dist/repository/index.js +20 -0
  59. package/dist/repository/index.js.map +1 -0
  60. package/dist/repository/redis.repository.definitions.d.ts +48 -0
  61. package/dist/repository/redis.repository.definitions.js +17 -0
  62. package/dist/repository/redis.repository.definitions.js.map +1 -0
  63. package/dist/repository/redis.repository.module.d.ts +5 -0
  64. package/dist/repository/redis.repository.module.js +42 -0
  65. package/dist/repository/redis.repository.module.js.map +1 -0
  66. package/dist/repository/redis.repository.service.d.ts +18 -0
  67. package/dist/repository/redis.repository.service.js +216 -0
  68. package/dist/repository/redis.repository.service.js.map +1 -0
  69. package/dist/store/index.d.ts +3 -0
  70. package/dist/store/index.js +20 -0
  71. package/dist/store/index.js.map +1 -0
  72. package/dist/store/redis.store.definitions.d.ts +32 -0
  73. package/dist/store/redis.store.definitions.js +3 -0
  74. package/dist/store/redis.store.definitions.js.map +1 -0
  75. package/dist/store/redis.store.module.d.ts +5 -0
  76. package/dist/store/redis.store.module.js +50 -0
  77. package/dist/store/redis.store.module.js.map +1 -0
  78. package/dist/store/redis.store.service.d.ts +20 -0
  79. package/dist/store/redis.store.service.js +171 -0
  80. package/dist/store/redis.store.service.js.map +1 -0
  81. package/package.json +28 -0
  82. package/tsconfig.build.json +9 -0
  83. package/tsconfig.json +9 -0
@@ -0,0 +1,763 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for repository/redis.repository.service.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">repository</a> redis.repository.service.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'>198/198</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'>56/56</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'>4/4</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'>198/198</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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
293
+ <span class="cline-any cline-neutral">&nbsp;</span>
294
+ <span class="cline-any cline-yes">1x</span>
295
+ <span class="cline-any cline-neutral">&nbsp;</span>
296
+ <span class="cline-any cline-yes">1x</span>
297
+ <span class="cline-any cline-yes">1x</span>
298
+ <span class="cline-any cline-yes">1x</span>
299
+ <span class="cline-any cline-yes">1x</span>
300
+ <span class="cline-any cline-neutral">&nbsp;</span>
301
+ <span class="cline-any cline-yes">1x</span>
302
+ <span class="cline-any cline-neutral">&nbsp;</span>
303
+ <span class="cline-any cline-neutral">&nbsp;</span>
304
+ <span class="cline-any cline-neutral">&nbsp;</span>
305
+ <span class="cline-any cline-neutral">&nbsp;</span>
306
+ <span class="cline-any cline-neutral">&nbsp;</span>
307
+ <span class="cline-any cline-neutral">&nbsp;</span>
308
+ <span class="cline-any cline-neutral">&nbsp;</span>
309
+ <span class="cline-any cline-neutral">&nbsp;</span>
310
+ <span class="cline-any cline-yes">1x</span>
311
+ <span class="cline-any cline-neutral">&nbsp;</span>
312
+ <span class="cline-any cline-neutral">&nbsp;</span>
313
+ <span class="cline-any cline-neutral">&nbsp;</span>
314
+ <span class="cline-any cline-neutral">&nbsp;</span>
315
+ <span class="cline-any cline-neutral">&nbsp;</span>
316
+ <span class="cline-any cline-neutral">&nbsp;</span>
317
+ <span class="cline-any cline-yes">1x</span>
318
+ <span class="cline-any cline-yes">1x</span>
319
+ <span class="cline-any cline-neutral">&nbsp;</span>
320
+ <span class="cline-any cline-neutral">&nbsp;</span>
321
+ <span class="cline-any cline-neutral">&nbsp;</span>
322
+ <span class="cline-any cline-yes">1x</span>
323
+ <span class="cline-any cline-yes">44x</span>
324
+ <span class="cline-any cline-yes">44x</span>
325
+ <span class="cline-any cline-yes">44x</span>
326
+ <span class="cline-any cline-yes">44x</span>
327
+ <span class="cline-any cline-neutral">&nbsp;</span>
328
+ <span class="cline-any cline-yes">44x</span>
329
+ <span class="cline-any cline-neutral">&nbsp;</span>
330
+ <span class="cline-any cline-yes">44x</span>
331
+ <span class="cline-any cline-yes">44x</span>
332
+ <span class="cline-any cline-yes">44x</span>
333
+ <span class="cline-any cline-yes">44x</span>
334
+ <span class="cline-any cline-yes">44x</span>
335
+ <span class="cline-any cline-yes">44x</span>
336
+ <span class="cline-any cline-yes">96x</span>
337
+ <span class="cline-any cline-yes">96x</span>
338
+ <span class="cline-any cline-yes">70x</span>
339
+ <span class="cline-any cline-yes">70x</span>
340
+ <span class="cline-any cline-yes">96x</span>
341
+ <span class="cline-any cline-yes">44x</span>
342
+ <span class="cline-any cline-yes">44x</span>
343
+ <span class="cline-any cline-yes">44x</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-yes">1x</span>
346
+ <span class="cline-any cline-yes">7x</span>
347
+ <span class="cline-any cline-yes">7x</span>
348
+ <span class="cline-any cline-yes">7x</span>
349
+ <span class="cline-any cline-yes">7x</span>
350
+ <span class="cline-any cline-yes">7x</span>
351
+ <span class="cline-any cline-yes">7x</span>
352
+ <span class="cline-any cline-yes">7x</span>
353
+ <span class="cline-any cline-yes">5x</span>
354
+ <span class="cline-any cline-yes">5x</span>
355
+ <span class="cline-any cline-yes">5x</span>
356
+ <span class="cline-any cline-yes">5x</span>
357
+ <span class="cline-any cline-yes">10x</span>
358
+ <span class="cline-any cline-yes">10x</span>
359
+ <span class="cline-any cline-yes">10x</span>
360
+ <span class="cline-any cline-yes">8x</span>
361
+ <span class="cline-any cline-yes">8x</span>
362
+ <span class="cline-any cline-yes">10x</span>
363
+ <span class="cline-any cline-yes">8x</span>
364
+ <span class="cline-any cline-yes">8x</span>
365
+ <span class="cline-any cline-yes">10x</span>
366
+ <span class="cline-any cline-yes">1x</span>
367
+ <span class="cline-any cline-yes">1x</span>
368
+ <span class="cline-any cline-yes">1x</span>
369
+ <span class="cline-any cline-yes">1x</span>
370
+ <span class="cline-any cline-yes">1x</span>
371
+ <span class="cline-any cline-yes">1x</span>
372
+ <span class="cline-any cline-yes">5x</span>
373
+ <span class="cline-any cline-yes">5x</span>
374
+ <span class="cline-any cline-yes">5x</span>
375
+ <span class="cline-any cline-yes">3x</span>
376
+ <span class="cline-any cline-yes">3x</span>
377
+ <span class="cline-any cline-yes">3x</span>
378
+ <span class="cline-any cline-yes">3x</span>
379
+ <span class="cline-any cline-yes">7x</span>
380
+ <span class="cline-any cline-yes">1x</span>
381
+ <span class="cline-any cline-yes">1x</span>
382
+ <span class="cline-any cline-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-yes">1x</span>
384
+ <span class="cline-any cline-yes">1x</span>
385
+ <span class="cline-any cline-yes">5x</span>
386
+ <span class="cline-any cline-yes">7x</span>
387
+ <span class="cline-any cline-neutral">&nbsp;</span>
388
+ <span class="cline-any cline-yes">1x</span>
389
+ <span class="cline-any cline-yes">17x</span>
390
+ <span class="cline-any cline-yes">17x</span>
391
+ <span class="cline-any cline-yes">17x</span>
392
+ <span class="cline-any cline-yes">17x</span>
393
+ <span class="cline-any cline-yes">17x</span>
394
+ <span class="cline-any cline-yes">17x</span>
395
+ <span class="cline-any cline-yes">17x</span>
396
+ <span class="cline-any cline-yes">17x</span>
397
+ <span class="cline-any cline-yes">17x</span>
398
+ <span class="cline-any cline-yes">17x</span>
399
+ <span class="cline-any cline-yes">17x</span>
400
+ <span class="cline-any cline-yes">17x</span>
401
+ <span class="cline-any cline-yes">17x</span>
402
+ <span class="cline-any cline-yes">11x</span>
403
+ <span class="cline-any cline-yes">11x</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-yes">17x</span>
406
+ <span class="cline-any cline-yes">6x</span>
407
+ <span class="cline-any cline-yes">1x</span>
408
+ <span class="cline-any cline-yes">1x</span>
409
+ <span class="cline-any cline-yes">1x</span>
410
+ <span class="cline-any cline-yes">5x</span>
411
+ <span class="cline-any cline-yes">5x</span>
412
+ <span class="cline-any cline-yes">5x</span>
413
+ <span class="cline-any cline-yes">6x</span>
414
+ <span class="cline-any cline-yes">1x</span>
415
+ <span class="cline-any cline-yes">1x</span>
416
+ <span class="cline-any cline-yes">1x</span>
417
+ <span class="cline-any cline-yes">1x</span>
418
+ <span class="cline-any cline-yes">1x</span>
419
+ <span class="cline-any cline-yes">6x</span>
420
+ <span class="cline-any cline-yes">2x</span>
421
+ <span class="cline-any cline-yes">2x</span>
422
+ <span class="cline-any cline-yes">2x</span>
423
+ <span class="cline-any cline-yes">2x</span>
424
+ <span class="cline-any cline-yes">2x</span>
425
+ <span class="cline-any cline-yes">2x</span>
426
+ <span class="cline-any cline-yes">2x</span>
427
+ <span class="cline-any cline-yes">2x</span>
428
+ <span class="cline-any cline-yes">2x</span>
429
+ <span class="cline-any cline-yes">2x</span>
430
+ <span class="cline-any cline-yes">6x</span>
431
+ <span class="cline-any cline-yes">1x</span>
432
+ <span class="cline-any cline-yes">1x</span>
433
+ <span class="cline-any cline-yes">1x</span>
434
+ <span class="cline-any cline-yes">1x</span>
435
+ <span class="cline-any cline-yes">1x</span>
436
+ <span class="cline-any cline-yes">1x</span>
437
+ <span class="cline-any cline-yes">1x</span>
438
+ <span class="cline-any cline-yes">1x</span>
439
+ <span class="cline-any cline-yes">1x</span>
440
+ <span class="cline-any cline-yes">1x</span>
441
+ <span class="cline-any cline-yes">1x</span>
442
+ <span class="cline-any cline-yes">1x</span>
443
+ <span class="cline-any cline-yes">1x</span>
444
+ <span class="cline-any cline-yes">17x</span>
445
+ <span class="cline-any cline-yes">1x</span>
446
+ <span class="cline-any cline-yes">1x</span>
447
+ <span class="cline-any cline-yes">1x</span>
448
+ <span class="cline-any cline-yes">1x</span>
449
+ <span class="cline-any cline-yes">1x</span>
450
+ <span class="cline-any cline-yes">10x</span>
451
+ <span class="cline-any cline-yes">10x</span>
452
+ <span class="cline-any cline-yes">17x</span>
453
+ <span class="cline-any cline-yes">6x</span>
454
+ <span class="cline-any cline-yes">6x</span>
455
+ <span class="cline-any cline-yes">1x</span>
456
+ <span class="cline-any cline-yes">1x</span>
457
+ <span class="cline-any cline-yes">1x</span>
458
+ <span class="cline-any cline-yes">1x</span>
459
+ <span class="cline-any cline-yes">6x</span>
460
+ <span class="cline-any cline-neutral">&nbsp;</span>
461
+ <span class="cline-any cline-yes">13x</span>
462
+ <span class="cline-any cline-yes">17x</span>
463
+ <span class="cline-any cline-yes">9x</span>
464
+ <span class="cline-any cline-yes">9x</span>
465
+ <span class="cline-any cline-yes">3x</span>
466
+ <span class="cline-any cline-yes">1x</span>
467
+ <span class="cline-any cline-yes">1x</span>
468
+ <span class="cline-any cline-yes">1x</span>
469
+ <span class="cline-any cline-yes">1x</span>
470
+ <span class="cline-any cline-yes">3x</span>
471
+ <span class="cline-any cline-yes">1x</span>
472
+ <span class="cline-any cline-yes">1x</span>
473
+ <span class="cline-any cline-yes">1x</span>
474
+ <span class="cline-any cline-yes">1x</span>
475
+ <span class="cline-any cline-yes">1x</span>
476
+ <span class="cline-any cline-yes">1x</span>
477
+ <span class="cline-any cline-yes">1x</span>
478
+ <span class="cline-any cline-yes">1x</span>
479
+ <span class="cline-any cline-yes">3x</span>
480
+ <span class="cline-any cline-yes">9x</span>
481
+ <span class="cline-any cline-yes">11x</span>
482
+ <span class="cline-any cline-yes">17x</span>
483
+ <span class="cline-any cline-neutral">&nbsp;</span>
484
+ <span class="cline-any cline-yes">1x</span>
485
+ <span class="cline-any cline-yes">4x</span>
486
+ <span class="cline-any cline-yes">4x</span>
487
+ <span class="cline-any cline-yes">4x</span>
488
+ <span class="cline-any cline-yes">4x</span>
489
+ <span class="cline-any cline-yes">4x</span>
490
+ <span class="cline-any cline-yes">4x</span>
491
+ <span class="cline-any cline-yes">4x</span>
492
+ <span class="cline-any cline-yes">4x</span>
493
+ <span class="cline-any cline-yes">1x</span>
494
+ <span class="cline-any cline-yes">1x</span>
495
+ <span class="cline-any cline-yes">1x</span>
496
+ <span class="cline-any cline-yes">1x</span>
497
+ <span class="cline-any cline-yes">1x</span>
498
+ <span class="cline-any cline-yes">1x</span>
499
+ <span class="cline-any cline-yes">1x</span>
500
+ <span class="cline-any cline-yes">1x</span>
501
+ <span class="cline-any cline-yes">1x</span>
502
+ <span class="cline-any cline-yes">1x</span>
503
+ <span class="cline-any cline-yes">1x</span>
504
+ <span class="cline-any cline-yes">3x</span>
505
+ <span class="cline-any cline-yes">3x</span>
506
+ <span class="cline-any cline-yes">3x</span>
507
+ <span class="cline-any cline-yes">3x</span>
508
+ <span class="cline-any cline-yes">3x</span>
509
+ <span class="cline-any cline-yes">3x</span>
510
+ <span class="cline-any cline-yes">4x</span>
511
+ <span class="cline-any cline-yes">4x</span>
512
+ <span class="cline-any cline-yes">4x</span>
513
+ <span class="cline-any cline-yes">4x</span>
514
+ <span class="cline-any cline-yes">4x</span>
515
+ <span class="cline-any cline-yes">3x</span>
516
+ <span class="cline-any cline-yes">4x</span>
517
+ <span class="cline-any cline-yes">1x</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Inject, Injectable } from '@nestjs/common';
519
+ &nbsp;
520
+ import { AppConfigPersistanceNoSQL, ApplicationError, ConfigProviderService } from '@node-c/core';
521
+ &nbsp;
522
+ import { validate } from 'class-validator';
523
+ import immutable from 'immutable';
524
+ import { mergeDeepRight } from 'ramda';
525
+ import { v4 as uuid } from 'uuid';
526
+ &nbsp;
527
+ import {
528
+ EntitySchema,
529
+ EntitySchemaColumnType,
530
+ PrepareOptions,
531
+ RepositoryFindOptions,
532
+ SaveOptions,
533
+ SaveOptionsOnConflict
534
+ } from './redis.repository.definitions';
535
+ &nbsp;
536
+ import { Constants } from '../common/definitions';
537
+ import { RedisStoreService } from '../store';
538
+ &nbsp;
539
+ // TODO: support "paranoid" mode
540
+ // TODO: support filtering by keys AND values, and indexing
541
+ // TODO: support validations according to the rules in the schema
542
+ // TODO: support defining the keys' delimiter symbol
543
+ @Injectable()
544
+ export class RedisRepositoryService&lt;Entity&gt; {
545
+ protected primaryKeys: string[];
546
+ protected storeDelimiter: string;
547
+ &nbsp;
548
+ constructor(
549
+ protected configProvider: ConfigProviderService,
550
+ @Inject(Constants.REDIS_CLIENT_PERSISTANCE_MODULE_NAME)
551
+ protected persistanceModuleName: string,
552
+ @Inject(Constants.REDIS_REPOSITORY_SCHEMA)
553
+ // eslint-disable-next-line no-unused-vars
554
+ protected schema: EntitySchema,
555
+ // eslint-disable-next-line no-unused-vars
556
+ protected store: RedisStoreService
557
+ ) {
558
+ const { storeDelimiter } = configProvider.config.persistance[persistanceModuleName] as AppConfigPersistanceNoSQL;
559
+ const { columns } = schema;
560
+ const primaryKeys: string[] = [];
561
+ for (const columnName in columns) {
562
+ const { primary } = columns[columnName];
563
+ if (primary) {
564
+ primaryKeys.push(columnName);
565
+ }
566
+ }
567
+ this.primaryKeys = primaryKeys;
568
+ this.storeDelimiter = storeDelimiter || Constants.DEFAULT_STORE_DELIMITER;
569
+ }
570
+ &nbsp;
571
+ async find&lt;ResultItem extends Entity | string = Entity&gt;(options: RepositoryFindOptions): Promise&lt;ResultItem[]&gt; {
572
+ const { primaryKeys, schema, store, storeDelimiter } = this;
573
+ const { name: entityName } = schema;
574
+ const { exactSearch, filters, findAll, page, perPage, withValues: optWithValues } = options;
575
+ const paginationOptions: { count?: number; cursor?: number } = {};
576
+ const withValues = typeof optWithValues === 'undefined' || optWithValues === true ? true : false;
577
+ let storeEntityKey = '';
578
+ if (filters) {
579
+ storeEntityKey =
580
+ storeDelimiter +
581
+ primaryKeys
582
+ .map(field =&gt; {
583
+ const value = filters[field];
584
+ if (
585
+ typeof value !== 'undefined' &amp;&amp;
586
+ typeof value !== 'object' &amp;&amp;
587
+ (typeof value !== 'string' || value.length)
588
+ ) {
589
+ return value;
590
+ }
591
+ if (exactSearch) {
592
+ throw new ApplicationError(
593
+ `[RedisRepositoryService ${entityName}][Find Error]: ` +
594
+ `The primary key field ${field} is required when exactSearch is set to true.`
595
+ );
596
+ }
597
+ return '*';
598
+ })
599
+ .join(storeDelimiter);
600
+ if (!findAll) {
601
+ const count = perPage || 100;
602
+ paginationOptions.count = count;
603
+ paginationOptions.cursor = (page ? page - 1 : 0) * count;
604
+ }
605
+ } else if (!findAll) {
606
+ throw new ApplicationError(
607
+ `[RedisRepositoryService ${entityName}][Error]: ` +
608
+ 'Either filters or findAll is required when calling the find method.'
609
+ );
610
+ }
611
+ return await store.scan(`${entityName}${storeEntityKey}`, { ...paginationOptions, scanAll: findAll, withValues });
612
+ }
613
+ &nbsp;
614
+ protected async prepare(data: Entity, options?: PrepareOptions): Promise&lt;{ data: Entity; storeEntityKey: string }&gt; {
615
+ const { primaryKeys, schema, store, storeDelimiter } = this;
616
+ const { columns, name: entityName } = schema;
617
+ const opt = options || ({} as PrepareOptions);
618
+ const { generatePrimaryKeys, onConflict: optOnConflict, validate: optValidate } = opt;
619
+ const onConflict = optOnConflict || SaveOptionsOnConflict.ThrowError;
620
+ let allPKValuesExist = true;
621
+ let preparedData = immutable.fromJS(data!).toJS() as Record&lt;string, unknown&gt;;
622
+ let storeEntityKey = '';
623
+ for (const columnName of primaryKeys) {
624
+ const { generated, type } = columns[columnName];
625
+ const value = preparedData[columnName];
626
+ const valueExists = !(
627
+ typeof value === 'undefined' ||
628
+ (typeof value === 'string' &amp;&amp; !value.length) ||
629
+ typeof value === 'object'
630
+ );
631
+ if (generated) {
632
+ if (valueExists) {
633
+ storeEntityKey += `${value}`;
634
+ continue;
635
+ }
636
+ if (allPKValuesExist) {
637
+ allPKValuesExist = false;
638
+ }
639
+ if (!generatePrimaryKeys) {
640
+ throw new ApplicationError(
641
+ `[RedisRepositoryService ${entityName}][Validation Error]: ` +
642
+ `A value is required for generated PK column ${columnName} when the generatePrimaryKeys is set to false.`
643
+ );
644
+ }
645
+ if (type === EntitySchemaColumnType.Integer) {
646
+ let currentMaxValue =
647
+ (await store.get&lt;number&gt;(`${entityName}${storeDelimiter}increment${storeDelimiter}${columnName}`, {
648
+ parseToJSON: true
649
+ })) || 0;
650
+ currentMaxValue++;
651
+ await store.set(`${entityName}${storeDelimiter}increment${storeDelimiter}${columnName}`, currentMaxValue);
652
+ preparedData[columnName] = currentMaxValue;
653
+ storeEntityKey += `${currentMaxValue}${storeDelimiter}`;
654
+ continue;
655
+ }
656
+ if (type === EntitySchemaColumnType.UUIDV4) {
657
+ let newValue = uuid();
658
+ if (storeDelimiter === '-') {
659
+ newValue = newValue.replace(/-/g, '_');
660
+ }
661
+ preparedData[columnName] = newValue;
662
+ storeEntityKey += `${newValue}${storeDelimiter}`;
663
+ continue;
664
+ }
665
+ throw new ApplicationError(
666
+ `[RedisRepositoryService ${entityName}][Validation Error]: ` +
667
+ `Unrecognized type "${type}" for PK column ${columnName}`
668
+ );
669
+ }
670
+ if (!valueExists) {
671
+ throw new ApplicationError(
672
+ `[RedisRepositoryService ${entityName}][Validation Error]: ` +
673
+ `A value is required for non-generated PK column ${columnName}`
674
+ );
675
+ }
676
+ storeEntityKey += `${value}`;
677
+ }
678
+ if (optValidate) {
679
+ const validationErrors = await validate(data as Record&lt;string, unknown&gt;);
680
+ if (validationErrors.length) {
681
+ throw new ApplicationError(
682
+ `[RedisRepositoryService ${entityName}][Validation Error]: ${validationErrors.join('\n')}`
683
+ );
684
+ }
685
+ }
686
+ // TODO: escape regex symbols
687
+ storeEntityKey = storeEntityKey.replace(new RegExp(`${storeDelimiter}$`), '');
688
+ if (onConflict !== SaveOptionsOnConflict.DoNothing &amp;&amp; allPKValuesExist) {
689
+ const existingValue = await store.get&lt;string | undefined&gt;(storeEntityKey, { parseToJSON: false });
690
+ if (existingValue) {
691
+ if (onConflict === SaveOptionsOnConflict.ThrowError) {
692
+ throw new ApplicationError(
693
+ `[RedisRepositoryService ${entityName}][Unique Error]: An entry already exists for key ${storeEntityKey}.`
694
+ );
695
+ }
696
+ if (onConflict === SaveOptionsOnConflict.Update) {
697
+ const existingData = JSON.parse(existingValue) as Record&lt;string, unknown&gt;;
698
+ preparedData = mergeDeepRight(existingData, preparedData);
699
+ } else {
700
+ throw new ApplicationError(
701
+ `[RedisRepositoryService ${entityName}][Execution Error]: ` +
702
+ `Invalid value "${onConflict}" provided for onConflict.`
703
+ );
704
+ }
705
+ }
706
+ }
707
+ return { data: preparedData as unknown as Entity, storeEntityKey };
708
+ }
709
+ &nbsp;
710
+ async save&lt;ResultItem extends Entity | string = Entity&gt;(
711
+ data: Entity | Entity[],
712
+ options?: SaveOptions
713
+ ): Promise&lt;ResultItem[]&gt; {
714
+ const { schema, store, storeDelimiter } = this;
715
+ const { name: entityName } = schema;
716
+ const { delete: optDelete, onConflict, transactionId } = options || ({} as SaveOptions);
717
+ const actualData = data instanceof Array ? data : [data];
718
+ if (optDelete) {
719
+ const prepareOptions: PrepareOptions = {
720
+ onConflict: SaveOptionsOnConflict.DoNothing,
721
+ validate: true
722
+ };
723
+ const deleteKeys: string[] = [];
724
+ for (const i in actualData) {
725
+ deleteKeys.push((await this.prepare(actualData[i], prepareOptions)).storeEntityKey);
726
+ }
727
+ await store.delete(deleteKeys, { transactionId });
728
+ return deleteKeys as ResultItem[];
729
+ }
730
+ const prepareOptions: PrepareOptions = {
731
+ generatePrimaryKeys: true,
732
+ onConflict,
733
+ validate: true
734
+ };
735
+ const results: Entity[] = [];
736
+ for (const i in actualData) {
737
+ const { data: validatedEntity, storeEntityKey } = await this.prepare(actualData[i], prepareOptions);
738
+ await store.set(`${entityName}${storeDelimiter}${storeEntityKey}`, validatedEntity, { transactionId });
739
+ results.push(validatedEntity);
740
+ }
741
+ return results as ResultItem[];
742
+ }
743
+ }
744
+ &nbsp;</pre></td></tr></table></pre>
745
+
746
+ <div class='push'></div><!-- for sticky footer -->
747
+ </div><!-- /wrapper -->
748
+ <div class='footer quiet pad2 space-top1 center small'>
749
+ Code coverage generated by
750
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
751
+ at 2025-02-27T04:47:56.120Z
752
+ </div>
753
+ <script src="../prettify.js"></script>
754
+ <script>
755
+ window.onload = function () {
756
+ prettyPrint();
757
+ };
758
+ </script>
759
+ <script src="../sorter.js"></script>
760
+ <script src="../block-navigation.js"></script>
761
+ </body>
762
+ </html>
763
+