memorio 0.2.19 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +31 -0
- package/.gitattributes +1 -0
- package/.private/npm +1 -0
- package/.vscode/extension.json +15 -0
- package/.vscode/settings.json +90 -0
- package/config/dispatch.ts +49 -0
- package/config/global.ts +36 -0
- package/coverage/clover.xml +260 -0
- package/coverage/coverage-final.json +10 -0
- package/coverage/lcov-report/a51.memorio/config/dispatch.ts.html +232 -0
- package/coverage/lcov-report/a51.memorio/config/global.ts.html +193 -0
- package/coverage/lcov-report/a51.memorio/config/index.html +131 -0
- package/coverage/lcov-report/a51.memorio/dist/config/dispatch.js.html +157 -0
- package/coverage/lcov-report/a51.memorio/dist/config/global.js.html +142 -0
- package/coverage/lcov-report/a51.memorio/dist/config/index.html +131 -0
- package/coverage/lcov-report/a51.memorio/dist/functions/cache/index.html +116 -0
- package/coverage/lcov-report/a51.memorio/dist/functions/cache/index.js.html +103 -0
- package/coverage/lcov-report/a51.memorio/dist/functions/observer/index.html +116 -0
- package/coverage/lcov-report/a51.memorio/dist/functions/observer/index.js.html +280 -0
- package/coverage/lcov-report/a51.memorio/dist/functions/state/index.html +116 -0
- package/coverage/lcov-report/a51.memorio/dist/functions/state/index.js.html +460 -0
- package/coverage/lcov-report/a51.memorio/dist/functions/store/index.html +116 -0
- package/coverage/lcov-report/a51.memorio/dist/functions/store/index.js.html +367 -0
- package/coverage/lcov-report/a51.memorio/dist/index.html +116 -0
- package/coverage/lcov-report/a51.memorio/dist/init.js.html +106 -0
- package/coverage/lcov-report/a51.memorio/functions/cache/index.html +116 -0
- package/coverage/lcov-report/a51.memorio/functions/cache/index.ts.html +142 -0
- package/coverage/lcov-report/a51.memorio/functions/observer/index.html +116 -0
- package/coverage/lcov-report/a51.memorio/functions/observer/index.ts.html +448 -0
- package/coverage/lcov-report/a51.memorio/functions/session/index.html +116 -0
- package/coverage/lcov-report/a51.memorio/functions/session/index.ts.html +409 -0
- package/coverage/lcov-report/a51.memorio/functions/state/index.html +116 -0
- package/coverage/lcov-report/a51.memorio/functions/state/index.ts.html +682 -0
- package/coverage/lcov-report/a51.memorio/functions/store/index.html +116 -0
- package/coverage/lcov-report/a51.memorio/functions/store/index.ts.html +409 -0
- package/coverage/lcov-report/a51.memorio/index.html +131 -0
- package/coverage/lcov-report/a51.memorio/index.ts.html +88 -0
- package/coverage/lcov-report/a51.memorio/init.ts.html +115 -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 +206 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/session/index.html +116 -0
- package/coverage/lcov-report/session/index.ts.html +571 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov-report/state/index.html +116 -0
- package/coverage/lcov-report/state/index.ts.html +1090 -0
- package/coverage/lcov-report/store/index.html +116 -0
- package/coverage/lcov-report/store/index.ts.html +556 -0
- package/coverage/lcov.info +518 -0
- package/dist/README.md +319 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +1 -0
- package/dist/package.json +98 -0
- package/dist/types/cache.d.ts +27 -0
- package/dist/types/memorio.d.ts +18 -0
- package/dist/types/observer.d.ts +47 -0
- package/dist/types/session.d.ts +91 -0
- package/dist/types/state.d.ts +71 -0
- package/dist/types/store.d.ts +91 -0
- package/esbuild.config.mjs +54 -0
- package/eslint.config.mjs +174 -0
- package/examples/bg.jpg +0 -0
- package/examples/bootstrap.less +92 -0
- package/examples/favicon.ico +0 -0
- package/examples/index.htm +65 -0
- package/examples/javascript.js +2 -0
- package/examples/responsive.less +47 -0
- package/examples/styles.less +169 -0
- package/functions/cache/index.ts +19 -0
- package/functions/observer/index.ts +121 -0
- package/functions/session/index.ts +108 -0
- package/functions/state/index.ts +199 -0
- package/functions/store/index.ts +108 -0
- package/index.ts +1 -0
- package/init.ts +12 -0
- package/jest.config.mjs +33 -0
- package/jest.setup.js +2 -0
- package/package.json +4 -10
- package/tests/basic.test.ts +50 -0
- package/tests/cache.test.ts +52 -0
- package/tests/observer.test.ts +62 -0
- package/tests/setup.ts +48 -0
- package/tests/state.test.ts +45 -0
- package/tests/store.test.ts +62 -0
- package/tsconfig.json +67 -0
- package/index.js +0 -1
- /package/{CHANGELOG.md → .github/CHANGELOG.md} +0 -0
- /package/{CITATION.cff → .github/CITATION.cff} +0 -0
- /package/{CODEOWNERS → .github/CODEOWNERS} +0 -0
- /package/{CODE_OF_CONDUCT.md → .github/CODE_OF_CONDUCT.md} +0 -0
- /package/{CONTRIBUTING.md → .github/CONTRIBUTING.md} +0 -0
- /package/{COPYRIGHT.md → .github/COPYRIGHT.md} +0 -0
- /package/{FUNDING.yml → .github/FUNDING.yml} +0 -0
- /package/{HISTORY.md → .github/HISTORY.md} +0 -0
- /package/{LICENSE.md → .github/LICENSE.md} +0 -0
- /package/{README.md → .github/README.md} +0 -0
- /package/{SECURITY.md → .github/SECURITY.md} +0 -0
- /package/{SUMMARY.md → .github/SUMMARY.md} +0 -0
- /package/{dependabot.yml → .github/dependabot.yml} +0 -0
- /package/{documents → .github/documents}/OBSERVER.md +0 -0
- /package/{documents → .github/documents}/STATE.md +0 -0
- /package/{documents → .github/documents}/STORE.md +0 -0
- /package/{pull_request_template.md → .github/pull_request_template.md} +0 -0
|
@@ -0,0 +1,1090 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for state/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> / <a href="index.html">state</a> index.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">76% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>95/125</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">73.33% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>66/90</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">76.92% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>20/26</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">76.22% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>93/122</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 medium'></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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
402
|
+
<span class="cline-any cline-neutral"> </span>
|
|
403
|
+
<span class="cline-any cline-neutral"> </span>
|
|
404
|
+
<span class="cline-any cline-neutral"> </span>
|
|
405
|
+
<span class="cline-any cline-neutral"> </span>
|
|
406
|
+
<span class="cline-any cline-yes">33x</span>
|
|
407
|
+
<span class="cline-any cline-neutral"> </span>
|
|
408
|
+
<span class="cline-any cline-neutral"> </span>
|
|
409
|
+
<span class="cline-any cline-neutral"> </span>
|
|
410
|
+
<span class="cline-any cline-yes">1x</span>
|
|
411
|
+
<span class="cline-any cline-neutral"> </span>
|
|
412
|
+
<span class="cline-any cline-yes">18x</span>
|
|
413
|
+
<span class="cline-any cline-yes">15x</span>
|
|
414
|
+
<span class="cline-any cline-yes">15x</span>
|
|
415
|
+
<span class="cline-any cline-yes">30x</span>
|
|
416
|
+
<span class="cline-any cline-yes">30x</span>
|
|
417
|
+
<span class="cline-any cline-neutral"> </span>
|
|
418
|
+
<span class="cline-any cline-neutral"> </span>
|
|
419
|
+
<span class="cline-any cline-neutral"> </span>
|
|
420
|
+
<span class="cline-any cline-neutral"> </span>
|
|
421
|
+
<span class="cline-any cline-yes">18x</span>
|
|
422
|
+
<span class="cline-any cline-neutral"> </span>
|
|
423
|
+
<span class="cline-any cline-yes">87x</span>
|
|
424
|
+
<span class="cline-any cline-neutral"> </span>
|
|
425
|
+
<span class="cline-any cline-yes">87x</span>
|
|
426
|
+
<span class="cline-any cline-yes">1x</span>
|
|
427
|
+
<span class="cline-any cline-neutral"> </span>
|
|
428
|
+
<span class="cline-any cline-yes">86x</span>
|
|
429
|
+
<span class="cline-any cline-yes">86x</span>
|
|
430
|
+
<span class="cline-any cline-yes">19x</span>
|
|
431
|
+
<span class="cline-any cline-neutral"> </span>
|
|
432
|
+
<span class="cline-any cline-yes">19x</span>
|
|
433
|
+
<span class="cline-any cline-yes">2x</span>
|
|
434
|
+
<span class="cline-any cline-neutral"> </span>
|
|
435
|
+
<span class="cline-any cline-yes">1x</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-no"> </span>
|
|
441
|
+
<span class="cline-any cline-neutral"> </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-no"> </span>
|
|
445
|
+
<span class="cline-any cline-neutral"> </span>
|
|
446
|
+
<span class="cline-any cline-neutral"> </span>
|
|
447
|
+
<span class="cline-any cline-neutral"> </span>
|
|
448
|
+
<span class="cline-any cline-yes">1x</span>
|
|
449
|
+
<span class="cline-any cline-neutral"> </span>
|
|
450
|
+
<span class="cline-any cline-neutral"> </span>
|
|
451
|
+
<span class="cline-any cline-no"> </span>
|
|
452
|
+
<span class="cline-any cline-neutral"> </span>
|
|
453
|
+
<span class="cline-any cline-neutral"> </span>
|
|
454
|
+
<span class="cline-any cline-no"> </span>
|
|
455
|
+
<span class="cline-any cline-neutral"> </span>
|
|
456
|
+
<span class="cline-any cline-neutral"> </span>
|
|
457
|
+
<span class="cline-any cline-neutral"> </span>
|
|
458
|
+
<span class="cline-any cline-neutral"> </span>
|
|
459
|
+
<span class="cline-any cline-yes">17x</span>
|
|
460
|
+
<span class="cline-any cline-yes">17x</span>
|
|
461
|
+
<span class="cline-any cline-neutral"> </span>
|
|
462
|
+
<span class="cline-any cline-neutral"> </span>
|
|
463
|
+
<span class="cline-any cline-yes">67x</span>
|
|
464
|
+
<span class="cline-any cline-neutral"> </span>
|
|
465
|
+
<span class="cline-any cline-neutral"> </span>
|
|
466
|
+
<span class="cline-any cline-no"> </span>
|
|
467
|
+
<span class="cline-any cline-no"> </span>
|
|
468
|
+
<span class="cline-any cline-neutral"> </span>
|
|
469
|
+
<span class="cline-any cline-neutral"> </span>
|
|
470
|
+
<span class="cline-any cline-neutral"> </span>
|
|
471
|
+
<span class="cline-any cline-yes">18x</span>
|
|
472
|
+
<span class="cline-any cline-no"> </span>
|
|
473
|
+
<span class="cline-any cline-neutral"> </span>
|
|
474
|
+
<span class="cline-any cline-yes">18x</span>
|
|
475
|
+
<span class="cline-any cline-yes">18x</span>
|
|
476
|
+
<span class="cline-any cline-yes">18x</span>
|
|
477
|
+
<span class="cline-any cline-neutral"> </span>
|
|
478
|
+
<span class="cline-any cline-neutral"> </span>
|
|
479
|
+
<span class="cline-any cline-neutral"> </span>
|
|
480
|
+
<span class="cline-any cline-neutral"> </span>
|
|
481
|
+
<span class="cline-any cline-neutral"> </span>
|
|
482
|
+
<span class="cline-any cline-neutral"> </span>
|
|
483
|
+
<span class="cline-any cline-yes">15x</span>
|
|
484
|
+
<span class="cline-any cline-yes">15x</span>
|
|
485
|
+
<span class="cline-any cline-neutral"> </span>
|
|
486
|
+
<span class="cline-any cline-yes">15x</span>
|
|
487
|
+
<span class="cline-any cline-yes">5x</span>
|
|
488
|
+
<span class="cline-any cline-neutral"> </span>
|
|
489
|
+
<span class="cline-any cline-yes">1x</span>
|
|
490
|
+
<span class="cline-any cline-yes">1x</span>
|
|
491
|
+
<span class="cline-any cline-yes">1x</span>
|
|
492
|
+
<span class="cline-any cline-yes">1x</span>
|
|
493
|
+
<span class="cline-any cline-yes">1x</span>
|
|
494
|
+
<span class="cline-any cline-yes">1x</span>
|
|
495
|
+
<span class="cline-any cline-no"> </span>
|
|
496
|
+
<span class="cline-any cline-neutral"> </span>
|
|
497
|
+
<span class="cline-any cline-neutral"> </span>
|
|
498
|
+
<span class="cline-any cline-yes">1x</span>
|
|
499
|
+
<span class="cline-any cline-neutral"> </span>
|
|
500
|
+
<span class="cline-any cline-no"> </span>
|
|
501
|
+
<span class="cline-any cline-neutral"> </span>
|
|
502
|
+
<span class="cline-any cline-neutral"> </span>
|
|
503
|
+
<span class="cline-any cline-yes">1x</span>
|
|
504
|
+
<span class="cline-any cline-yes">1x</span>
|
|
505
|
+
<span class="cline-any cline-no"> </span>
|
|
506
|
+
<span class="cline-any cline-neutral"> </span>
|
|
507
|
+
<span class="cline-any cline-yes">1x</span>
|
|
508
|
+
<span class="cline-any cline-neutral"> </span>
|
|
509
|
+
<span class="cline-any cline-neutral"> </span>
|
|
510
|
+
<span class="cline-any cline-no"> </span>
|
|
511
|
+
<span class="cline-any cline-neutral"> </span>
|
|
512
|
+
<span class="cline-any cline-neutral"> </span>
|
|
513
|
+
<span class="cline-any cline-no"> </span>
|
|
514
|
+
<span class="cline-any cline-neutral"> </span>
|
|
515
|
+
<span class="cline-any cline-neutral"> </span>
|
|
516
|
+
<span class="cline-any cline-neutral"> </span>
|
|
517
|
+
<span class="cline-any cline-yes">1x</span>
|
|
518
|
+
<span class="cline-any cline-neutral"> </span>
|
|
519
|
+
<span class="cline-any cline-neutral"> </span>
|
|
520
|
+
<span class="cline-any cline-neutral"> </span>
|
|
521
|
+
<span class="cline-any cline-yes">15x</span>
|
|
522
|
+
<span class="cline-any cline-neutral"> </span>
|
|
523
|
+
<span class="cline-any cline-neutral"> </span>
|
|
524
|
+
<span class="cline-any cline-yes">3x</span>
|
|
525
|
+
<span class="cline-any cline-yes">3x</span>
|
|
526
|
+
<span class="cline-any cline-neutral"> </span>
|
|
527
|
+
<span class="cline-any cline-neutral"> </span>
|
|
528
|
+
<span class="cline-any cline-neutral"> </span>
|
|
529
|
+
<span class="cline-any cline-yes">15x</span>
|
|
530
|
+
<span class="cline-any cline-yes">15x</span>
|
|
531
|
+
<span class="cline-any cline-yes">15x</span>
|
|
532
|
+
<span class="cline-any cline-yes">15x</span>
|
|
533
|
+
<span class="cline-any cline-neutral"> </span>
|
|
534
|
+
<span class="cline-any cline-neutral"> </span>
|
|
535
|
+
<span class="cline-any cline-no"> </span>
|
|
536
|
+
<span class="cline-any cline-no"> </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-neutral"> </span>
|
|
542
|
+
<span class="cline-any cline-yes">1x</span>
|
|
543
|
+
<span class="cline-any cline-neutral"> </span>
|
|
544
|
+
<span class="cline-any cline-neutral"> </span>
|
|
545
|
+
<span class="cline-any cline-neutral"> </span>
|
|
546
|
+
<span class="cline-any cline-neutral"> </span>
|
|
547
|
+
<span class="cline-any cline-neutral"> </span>
|
|
548
|
+
<span class="cline-any cline-yes">70x</span>
|
|
549
|
+
<span class="cline-any cline-yes">2x</span>
|
|
550
|
+
<span class="cline-any cline-yes">2x</span>
|
|
551
|
+
<span class="cline-any cline-neutral"> </span>
|
|
552
|
+
<span class="cline-any cline-yes">68x</span>
|
|
553
|
+
<span class="cline-any cline-yes">2x</span>
|
|
554
|
+
<span class="cline-any cline-neutral"> </span>
|
|
555
|
+
<span class="cline-any cline-yes">66x</span>
|
|
556
|
+
<span class="cline-any cline-yes">66x</span>
|
|
557
|
+
<span class="cline-any cline-neutral"> </span>
|
|
558
|
+
<span class="cline-any cline-yes">11x</span>
|
|
559
|
+
<span class="cline-any cline-no"> </span>
|
|
560
|
+
<span class="cline-any cline-no"> </span>
|
|
561
|
+
<span class="cline-any cline-neutral"> </span>
|
|
562
|
+
<span class="cline-any cline-yes">11x</span>
|
|
563
|
+
<span class="cline-any cline-neutral"> </span>
|
|
564
|
+
<span class="cline-any cline-yes">18x</span>
|
|
565
|
+
<span class="cline-any cline-no"> </span>
|
|
566
|
+
<span class="cline-any cline-no"> </span>
|
|
567
|
+
<span class="cline-any cline-neutral"> </span>
|
|
568
|
+
<span class="cline-any cline-yes">18x</span>
|
|
569
|
+
<span class="cline-any cline-neutral"> </span>
|
|
570
|
+
<span class="cline-any cline-yes">35x</span>
|
|
571
|
+
<span class="cline-any cline-yes">3x</span>
|
|
572
|
+
<span class="cline-any cline-no"> </span>
|
|
573
|
+
<span class="cline-any cline-no"> </span>
|
|
574
|
+
<span class="cline-any cline-neutral"> </span>
|
|
575
|
+
<span class="cline-any cline-yes">8x</span>
|
|
576
|
+
<span class="cline-any cline-neutral"> </span>
|
|
577
|
+
<span class="cline-any cline-yes">44x</span>
|
|
578
|
+
<span class="cline-any cline-neutral"> </span>
|
|
579
|
+
<span class="cline-any cline-no"> </span>
|
|
580
|
+
<span class="cline-any cline-no"> </span>
|
|
581
|
+
<span class="cline-any cline-neutral"> </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-yes">1x</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-neutral"> </span>
|
|
590
|
+
<span class="cline-any cline-yes">1x</span>
|
|
591
|
+
<span class="cline-any cline-yes">33x</span>
|
|
592
|
+
<span class="cline-any cline-yes">3x</span>
|
|
593
|
+
<span class="cline-any cline-neutral"> </span>
|
|
594
|
+
<span class="cline-any cline-neutral"> </span>
|
|
595
|
+
<span class="cline-any cline-yes">1x</span>
|
|
596
|
+
<span class="cline-any cline-neutral"> </span>
|
|
597
|
+
<span class="cline-any cline-neutral"> </span>
|
|
598
|
+
<span class="cline-any cline-neutral"> </span>
|
|
599
|
+
<span class="cline-any cline-neutral"> </span>
|
|
600
|
+
<span class="cline-any cline-yes">1x</span>
|
|
601
|
+
<span class="cline-any cline-yes">1x</span>
|
|
602
|
+
<span class="cline-any cline-yes">1x</span>
|
|
603
|
+
<span class="cline-any cline-no"> </span>
|
|
604
|
+
<span class="cline-any cline-no"> </span>
|
|
605
|
+
<span class="cline-any cline-no"> </span>
|
|
606
|
+
<span class="cline-any cline-no"> </span>
|
|
607
|
+
<span class="cline-any cline-no"> </span>
|
|
608
|
+
<span class="cline-any cline-neutral"> </span>
|
|
609
|
+
<span class="cline-any cline-neutral"> </span>
|
|
610
|
+
<span class="cline-any cline-neutral"> </span>
|
|
611
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
617
|
+
<span class="cline-any cline-neutral"> </span>
|
|
618
|
+
<span class="cline-any cline-yes">1x</span>
|
|
619
|
+
<span class="cline-any cline-neutral"> </span>
|
|
620
|
+
<span class="cline-any cline-neutral"> </span>
|
|
621
|
+
<span class="cline-any cline-yes">1x</span>
|
|
622
|
+
<span class="cline-any cline-yes">1x</span>
|
|
623
|
+
<span class="cline-any cline-yes">2x</span>
|
|
624
|
+
<span class="cline-any cline-yes">2x</span>
|
|
625
|
+
<span class="cline-any cline-neutral"> </span>
|
|
626
|
+
<span class="cline-any cline-neutral"> </span>
|
|
627
|
+
<span class="cline-any cline-yes">1x</span>
|
|
628
|
+
<span class="cline-any cline-neutral"> </span>
|
|
629
|
+
<span class="cline-any cline-neutral"> </span>
|
|
630
|
+
<span class="cline-any cline-neutral"> </span>
|
|
631
|
+
<span class="cline-any cline-neutral"> </span>
|
|
632
|
+
<span class="cline-any cline-yes">1x</span>
|
|
633
|
+
<span class="cline-any cline-yes">1x</span>
|
|
634
|
+
<span class="cline-any cline-yes">1x</span>
|
|
635
|
+
<span class="cline-any cline-yes">1x</span>
|
|
636
|
+
<span class="cline-any cline-yes">1x</span>
|
|
637
|
+
<span class="cline-any cline-neutral"> </span>
|
|
638
|
+
<span class="cline-any cline-neutral"> </span>
|
|
639
|
+
<span class="cline-any cline-neutral"> </span>
|
|
640
|
+
<span class="cline-any cline-no"> </span>
|
|
641
|
+
<span class="cline-any cline-neutral"> </span>
|
|
642
|
+
<span class="cline-any cline-no"> </span>
|
|
643
|
+
<span class="cline-any cline-neutral"> </span>
|
|
644
|
+
<span class="cline-any cline-neutral"> </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-yes">1x</span>
|
|
650
|
+
<span class="cline-any cline-yes">2x</span>
|
|
651
|
+
<span class="cline-any cline-yes">2x</span>
|
|
652
|
+
<span class="cline-any cline-neutral"> </span>
|
|
653
|
+
<span class="cline-any cline-neutral"> </span>
|
|
654
|
+
<span class="cline-any cline-yes">1x</span>
|
|
655
|
+
<span class="cline-any cline-neutral"> </span>
|
|
656
|
+
<span class="cline-any cline-neutral"> </span>
|
|
657
|
+
<span class="cline-any cline-neutral"> </span>
|
|
658
|
+
<span class="cline-any cline-neutral"> </span>
|
|
659
|
+
<span class="cline-any cline-neutral"> </span>
|
|
660
|
+
<span class="cline-any cline-neutral"> </span>
|
|
661
|
+
<span class="cline-any cline-neutral"> </span>
|
|
662
|
+
<span class="cline-any cline-neutral"> </span>
|
|
663
|
+
<span class="cline-any cline-neutral"> </span>
|
|
664
|
+
<span class="cline-any cline-neutral"> </span>
|
|
665
|
+
<span class="cline-any cline-neutral"> </span>
|
|
666
|
+
<span class="cline-any cline-neutral"> </span>
|
|
667
|
+
<span class="cline-any cline-neutral"> </span>
|
|
668
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
674
|
+
<span class="cline-any cline-neutral"> </span>
|
|
675
|
+
<span class="cline-any cline-neutral"> </span>
|
|
676
|
+
<span class="cline-any cline-neutral"> </span>
|
|
677
|
+
<span class="cline-any cline-neutral"> </span>
|
|
678
|
+
<span class="cline-any cline-neutral"> </span>
|
|
679
|
+
<span class="cline-any cline-neutral"> </span>
|
|
680
|
+
<span class="cline-any cline-neutral"> </span>
|
|
681
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
686
|
+
<span class="cline-any cline-neutral"> </span>
|
|
687
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
692
|
+
<span class="cline-any cline-neutral"> </span>
|
|
693
|
+
<span class="cline-any cline-neutral"> </span>
|
|
694
|
+
<span class="cline-any cline-neutral"> </span>
|
|
695
|
+
<span class="cline-any cline-neutral"> </span>
|
|
696
|
+
<span class="cline-any cline-neutral"> </span>
|
|
697
|
+
<span class="cline-any cline-neutral"> </span>
|
|
698
|
+
<span class="cline-any cline-neutral"> </span>
|
|
699
|
+
<span class="cline-any cline-neutral"> </span>
|
|
700
|
+
<span class="cline-any cline-neutral"> </span>
|
|
701
|
+
<span class="cline-any cline-neutral"> </span>
|
|
702
|
+
<span class="cline-any cline-neutral"> </span>
|
|
703
|
+
<span class="cline-any cline-neutral"> </span>
|
|
704
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
709
|
+
<span class="cline-any cline-neutral"> </span>
|
|
710
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
719
|
+
<span class="cline-any cline-neutral"> </span>
|
|
720
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
729
|
+
<span class="cline-any cline-neutral"> </span>
|
|
730
|
+
<span class="cline-any cline-neutral"> </span>
|
|
731
|
+
<span class="cline-any cline-neutral"> </span>
|
|
732
|
+
<span class="cline-any cline-neutral"> </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></td><td class="text"><pre class="prettyprint lang-js">Object.defineProperty(
|
|
737
|
+
memorio,
|
|
738
|
+
'objPath',
|
|
739
|
+
{
|
|
740
|
+
writable: false,
|
|
741
|
+
configurable: false,
|
|
742
|
+
enumerable: false,
|
|
743
|
+
value: (prop: string, object: string[], separator: string = '.'): string => {
|
|
744
|
+
return object.concat(prop).join(separator)
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
)
|
|
748
|
+
|
|
749
|
+
/////////////////////////////////////////////////////
|
|
750
|
+
|
|
751
|
+
const buildProxy = (obj: Record<string, any>, callback: (props: any) => void, tree: string[] = []): any => {
|
|
752
|
+
|
|
753
|
+
// EVENT FUNCTION FOR OBSERVER
|
|
754
|
+
const event = (name: string) => {
|
|
755
|
+
const array = name.split('.')
|
|
756
|
+
array.forEach(
|
|
757
|
+
(x, i) => {
|
|
758
|
+
const command = array.slice(0, i + 1).join('.')
|
|
759
|
+
globalThis.memorio.dispatch.set(command, { detail: { name: command } })
|
|
760
|
+
}
|
|
761
|
+
)
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
///////////////////////////////////////////////
|
|
765
|
+
|
|
766
|
+
// CREATE THE PROXY
|
|
767
|
+
return new Proxy(
|
|
768
|
+
obj,
|
|
769
|
+
{
|
|
770
|
+
get(target: any, prop: any) {
|
|
771
|
+
try {
|
|
772
|
+
// Se la proprietà è una funzione speciale (come lock)
|
|
773
|
+
if (prop === 'lock' && target.hasOwnProperty(prop)) {
|
|
774
|
+
return Reflect.get(t<span class="missing-if-branch" title="if path not taken" >I</span>arget, prop)
|
|
775
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
776
|
+
|
|
777
|
+
const value = Reflect.get(target, prop)
|
|
778
|
+
if (value && typeof va<span class="missing-if-branch" title="if path not taken" >I</span>lue === 'object') {
|
|
779
|
+
const path = tree.concat<span class="cstat-no" title="statement not covered" >(prop as string).join('.')</span>
|
|
780
|
+
|
|
781
|
+
// Per proprietà bloccate (frozen)
|
|
782
|
+
if (Object.isFrozen(value)) {
|
|
783
|
+
return new Proxy(value, {
|
|
784
|
+
set(obj: any, key: string) {
|
|
785
|
+
throw new <span class="fstat-no" title="function not covered" >Er</span>ror(`Cannot modify locked object at '${path}.${key}'`)
|
|
786
|
+
},<span class="cstat-no" title="statement not covered" ></span>
|
|
787
|
+
get(obj: any, key: string) {
|
|
788
|
+
// Se è un<span class="fstat-no" title="function not covered" >a </span>proprietà speciale, restituiscila direttamente
|
|
789
|
+
if (key === 'l<span class="cstat-no" title="statement not covered" >ock') {</span>
|
|
790
|
+
return Reflect.get(obj, key)
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
const val = Reflect.get(obj, key)
|
|
794
|
+
if<span class="missing-if-branch" title="else path not taken" >E</span> (val && typeof val === 'object') {
|
|
795
|
+
return Object.isFrozen(val) ?
|
|
796
|
+
new Proxy(val, this) :
|
|
797
|
+
buildProxy(val, callback, tree.concat(prop as string, key))
|
|
798
|
+
}
|
|
799
|
+
return val
|
|
800
|
+
},
|
|
801
|
+
<span class="cstat-no" title="statement not covered" > defineProperty() {</span>
|
|
802
|
+
<span class="cstat-no" title="statement not covered" > throw new Er</span>ror(`Cannot modify locked object at '${path}'`)
|
|
803
|
+
},
|
|
804
|
+
deleteProperty() {
|
|
805
|
+
throw new Error(`Cannot delete properties of locked object at '${path}'`)
|
|
806
|
+
<span class="missing-if-branch" title="if path not taken" >I</span> }<span class="branch-1 cbranch-no" title="branch not covered" ></span>
|
|
807
|
+
})<span class="cstat-no" title="statement not covered" ></span>
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
// Per oggetti non bloccati
|
|
811
|
+
if (['Array', 'Object'].includes(value.constructor.name)) {
|
|
812
|
+
return buildProxy(value, callback, tree.concat(prop as string))
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
return value
|
|
816
|
+
} catch (error) {
|
|
817
|
+
console.error('Error: ', error)
|
|
818
|
+
return false
|
|
819
|
+
}
|
|
820
|
+
},
|
|
821
|
+
|
|
822
|
+
set(target: any, prop: string, value: any): boolean {
|
|
823
|
+
if (target[prop] && Object.isFrozen(target[prop])) {
|
|
824
|
+
throw new Error(`State '${prop}' is locked`)
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
try {
|
|
828
|
+
|
|
829
|
+
const path = globalThis.me<span class="missing-if-branch" title="if path not taken" >I</span>morio.objPath(prop as string, tree)
|
|
830
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
831
|
+
callback(
|
|
832
|
+
{
|
|
833
|
+
action: 'set',
|
|
834
|
+
path,<span class="fstat-no" title="function not covered" ></span>
|
|
835
|
+
target,<span class="cstat-no" title="statement not covered" ></span>
|
|
836
|
+
newValue: value,
|
|
837
|
+
previousValue: Reflect.get(target, prop)
|
|
838
|
+
}
|
|
839
|
+
)<span class="missing-if-branch" title="if path not taken" >I</span>
|
|
840
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
841
|
+
event('state.' + path)
|
|
842
|
+
|
|
843
|
+
Reflect.set(target, prop, value)
|
|
844
|
+
<span class="fstat-no" title="function not covered" ></span>
|
|
845
|
+
// DEFINE LOCK PROPERTY FUNCTI<span class="cstat-no" title="statement not covered" >ON</span>
|
|
846
|
+
if (target[prop] && typeof target[prop] === 'object') {
|
|
847
|
+
Reflect.defineProperty(<span class="fstat-no" title="function not covered" ></span>
|
|
848
|
+
target[prop],<span class="cstat-no" title="statement not covered" ></span>
|
|
849
|
+
'lock',
|
|
850
|
+
{
|
|
851
|
+
value() {
|
|
852
|
+
const immutableProxy = (obj: any) => {
|
|
853
|
+
Object.preventExtensions(obj)
|
|
854
|
+
Object.freeze(obj)
|
|
855
|
+
|
|
856
|
+
Object.keys(obj).forEach(key => {
|
|
857
|
+
const value = obj[key]
|
|
858
|
+
if (value && typeof value === 'object') {
|
|
859
|
+
obj[key] = immutableProxy(value)
|
|
860
|
+
}
|
|
861
|
+
})
|
|
862
|
+
|
|
863
|
+
return new Proxy(obj, {
|
|
864
|
+
set(target, key) {
|
|
865
|
+
throw new Error(`Cannot modify locked property '${String(key)}'`)
|
|
866
|
+
},
|
|
867
|
+
get(target, key) {
|
|
868
|
+
const value = target[key]
|
|
869
|
+
if (value && typeof value === 'object') {
|
|
870
|
+
<span class="cstat-no" title="statement not covered" > return value.__isProxy ? value : immutablePro</span>xy(value)
|
|
871
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
872
|
+
return value
|
|
873
|
+
},
|
|
874
|
+
defineProperty() {
|
|
875
|
+
throw new Error(`Cannot modify locked object`)
|
|
876
|
+
},
|
|
877
|
+
deleteProperty() {
|
|
878
|
+
throw new Error(`Cannot delete properties from locked object`)
|
|
879
|
+
}
|
|
880
|
+
})
|
|
881
|
+
}<span class="branch-0 cbranch-no" title="branch not covered" ></span>
|
|
882
|
+
|
|
883
|
+
target[prop] = immutableProxy(target[prop])
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
)
|
|
887
|
+
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
return true
|
|
891
|
+
|
|
892
|
+
} catch (error) {
|
|
893
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>
|
|
894
|
+
console.er<span class="cstat-no" title="statement not covered" >ror('Error in set trap:', error)</span>
|
|
895
|
+
return fal<span class="cstat-no" title="statement not covered" >se</span>
|
|
896
|
+
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
},<span class="missing-if-branch" title="if path not taken" >I</span>
|
|
900
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
901
|
+
deleteProperty<span class="cstat-no" title="statement not covered" >(target: any, </span>prop: string | symbol): boolean {
|
|
902
|
+
try {
|
|
903
|
+
const path = globalThis.memorio.objPath(prop as string, tree)
|
|
904
|
+
callback({ action: 'delete', path, target })
|
|
905
|
+
return Reflect.deleteProperty(target, prop)
|
|
906
|
+
} catch (err<span class="missing-if-branch" title="if path not taken" >I</span>or) {
|
|
907
|
+
console.error(<span class="cstat-no" title="statement not covered" >'Error in deleteProperty trap:', error)</span>
|
|
908
|
+
return false<span class="cstat-no" title="statement not covered" ></span>
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
}<span class="branch-1 cbranch-no" title="branch not covered" ></span>
|
|
913
|
+
<span class="branch-3 cbranch-no" title="branch not covered" ></span>
|
|
914
|
+
)<span class="cstat-no" title="statement not covered" ></span>
|
|
915
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
// State validation rules
|
|
919
|
+
const stateValidators = {
|
|
920
|
+
maxDepth: 10,
|
|
921
|
+
maxStringLength: 100000,
|
|
922
|
+
maxArrayLength: 10000,
|
|
923
|
+
validateValue(value: any, path: string = '', depth: number = 0): boolean {
|
|
924
|
+
// Prevent circular references and excessive nesting
|
|
925
|
+
if (depth > this.maxDepth) {
|
|
926
|
+
console.error(`State: Maximum object depth exceeded at ${path}`)
|
|
927
|
+
return false
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
if (value === null || value === undefined) {
|
|
931
|
+
return true
|
|
932
|
+
}<span class="branch-1 cbranch-no" title="branch not covered" ></span>
|
|
933
|
+
|
|
934
|
+
const type = typeof value
|
|
935
|
+
|
|
936
|
+
switch (type) {
|
|
937
|
+
case '<span class="fstat-no" title="function not covered" >st</span>ring':
|
|
938
|
+
<span class="cstat-no" title="statement not covered" > if (value.length > this.maxStringLength) {</span>
|
|
939
|
+
<span class="cstat-no" title="statement not covered" > console.error(`State: String exceeds maximum length at ${path}`)</span>
|
|
940
|
+
<span class="cstat-no" title="statement not covered" > return fals<span class="cstat-no" title="statement not covered" >e</span></span>
|
|
941
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
942
|
+
<span class="cstat-no" title="statement not covered" > return t</span>rue
|
|
943
|
+
|
|
944
|
+
case 'number':
|
|
945
|
+
if (!Number.isFinite(value)) {
|
|
946
|
+
console.error(`State: Invalid number value at ${path}`)
|
|
947
|
+
return false
|
|
948
|
+
}
|
|
949
|
+
return true
|
|
950
|
+
|
|
951
|
+
case 'object':
|
|
952
|
+
if (Array.isArray(value)) {
|
|
953
|
+
if (value.length > this.maxArrayLength) {
|
|
954
|
+
console.error(`State: Array exceeds maximum length at ${path}`)
|
|
955
|
+
return false
|
|
956
|
+
}
|
|
957
|
+
return value.every((item, index) =>
|
|
958
|
+
this<span class="missing-if-branch" title="else path not taken" >E</span>.validateValue(item, `${path}[${index}]`, depth + 1)
|
|
959
|
+
)
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
return Object.entries(value).every(([key, val]) =>
|
|
963
|
+
this.validateValue(val, path ? `${path}.${key}` : key, depth + 1)
|
|
964
|
+
)
|
|
965
|
+
|
|
966
|
+
case 'function':
|
|
967
|
+
console.error(`State: Functions are not allowed as state values at ${path}`)
|
|
968
|
+
return false
|
|
969
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>
|
|
970
|
+
case 'symbol':
|
|
971
|
+
console.error(`State: Symbols are not allowed as state values at ${path}`)
|
|
972
|
+
return false
|
|
973
|
+
|
|
974
|
+
default:<span class="missing-if-branch" title="else path not taken" >E</span>
|
|
975
|
+
return t<span class="cstat-no" title="statement not covered" >rue</span>
|
|
976
|
+
}
|
|
977
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
// SET STATE AS PROXY
|
|
981
|
+
const initialState = buildProxy({}, (props) => {
|
|
982
|
+
if (props.action === 'set' && !stateValidators.validateValue(props.newValue, props.path)) {
|
|
983
|
+
throw new Error(`Invalid state value at ${props.path}`)
|
|
984
|
+
}
|
|
985
|
+
})<span class="missing-if-branch" title="else path not taken" >E</span>
|
|
986
|
+
|
|
987
|
+
!globalThis?.state
|
|
988
|
+
? globalThis.state = initialState
|
|
989
|
+
: globalThis.state = state
|
|
990
|
+
|
|
991
|
+
///////////////////////////////////////////////
|
|
992
|
+
|
|
993
|
+
// TEST IF STATE IS A PROXY
|
|
994
|
+
const testProxy = new WeakSet()
|
|
995
|
+
|
|
996
|
+
testProxy.add(state)
|
|
997
|
+
|
|
998
|
+
setInterval(
|
|
999
|
+
() => {
|
|
1000
|
+
if (!testProxy.has(state)) {
|
|
1001
|
+
alert('memorio State is compromised, check if you override it and please reload the page')
|
|
1002
|
+
for (let i = 1; i < 99999; i++) clearInterval(i)
|
|
1003
|
+
stop()
|
|
1004
|
+
}
|
|
1005
|
+
}, 1000
|
|
1006
|
+
)
|
|
1007
|
+
|
|
1008
|
+
///////////////////////////////////////////////
|
|
1009
|
+
|
|
1010
|
+
// DEFINE THE STATE IN GLOBAL
|
|
1011
|
+
Object.defineProperty(
|
|
1012
|
+
globalThis,
|
|
1013
|
+
'state',
|
|
1014
|
+
{
|
|
1015
|
+
enumerable: false,
|
|
1016
|
+
configurable: false
|
|
1017
|
+
}
|
|
1018
|
+
)
|
|
1019
|
+
|
|
1020
|
+
///////////////////////////////////////////////
|
|
1021
|
+
|
|
1022
|
+
// ADD FUNCTION IN STATE IN GLOBAL
|
|
1023
|
+
Object.defineProperties(
|
|
1024
|
+
state,
|
|
1025
|
+
{
|
|
1026
|
+
list: {
|
|
1027
|
+
get() {
|
|
1028
|
+
const entries = []
|
|
1029
|
+
for (const key in state) {
|
|
1030
|
+
if (key !== 'list' && key !== 'remove' && key !== 'removeAll') {
|
|
1031
|
+
entries.push([key, state[key]])
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
return entries
|
|
1035
|
+
}
|
|
1036
|
+
},
|
|
1037
|
+
|
|
1038
|
+
remove: {
|
|
1039
|
+
value(s: string) {
|
|
1040
|
+
if (s in state && s !== 'list' && s !== 'remove' && s !== 'removeAll') {
|
|
1041
|
+
const deleted = delete state[s]
|
|
1042
|
+
if (deleted) {
|
|
1043
|
+
console.debug(`State '${s}' deleted`)
|
|
1044
|
+
return true
|
|
1045
|
+
}
|
|
1046
|
+
} else {
|
|
1047
|
+
console.error(`'${s}' not exist or cannot be removed`)
|
|
1048
|
+
}
|
|
1049
|
+
return false
|
|
1050
|
+
},
|
|
1051
|
+
writable: false,
|
|
1052
|
+
configurable: false
|
|
1053
|
+
},
|
|
1054
|
+
|
|
1055
|
+
removeAll: {
|
|
1056
|
+
value() {
|
|
1057
|
+
for (const key in state) {
|
|
1058
|
+
if (key !== 'list' && key !== 'remove' && key !== 'removeAll') {
|
|
1059
|
+
delete state[key]
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
return true
|
|
1063
|
+
},
|
|
1064
|
+
writable: false,
|
|
1065
|
+
configurable: false
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
)
|
|
1071
|
+
</pre></td></tr></table></pre>
|
|
1072
|
+
|
|
1073
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1074
|
+
</div><!-- /wrapper -->
|
|
1075
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1076
|
+
Code coverage generated by
|
|
1077
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1078
|
+
at 2025-08-24T04:29:01.563Z
|
|
1079
|
+
</div>
|
|
1080
|
+
<script src="../prettify.js"></script>
|
|
1081
|
+
<script>
|
|
1082
|
+
window.onload = function () {
|
|
1083
|
+
prettyPrint();
|
|
1084
|
+
};
|
|
1085
|
+
</script>
|
|
1086
|
+
<script src="../sorter.js"></script>
|
|
1087
|
+
<script src="../block-navigation.js"></script>
|
|
1088
|
+
</body>
|
|
1089
|
+
</html>
|
|
1090
|
+
|