cdk-common 2.0.189 → 2.0.192
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/.jsii +3 -3
- package/lib/main.js +1 -1
- package/node_modules/@aws-cdk/assert/package.json +8 -8
- package/node_modules/@aws-cdk/cfnspec/build-tools/create-missing-libraries.js +2 -2
- package/node_modules/@aws-cdk/cfnspec/package.json +3 -3
- package/node_modules/@aws-cdk/cfnspec/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@aws-cdk/cloudformation-diff/package.json +4 -4
- package/package.json +3 -3
- package/node_modules/@aws-cdk/cfnspec/coverage/base.css +0 -224
- package/node_modules/@aws-cdk/cfnspec/coverage/block-navigation.js +0 -87
- package/node_modules/@aws-cdk/cfnspec/coverage/build-tools/index.html +0 -161
- package/node_modules/@aws-cdk/cfnspec/coverage/build-tools/massage-spec.ts.html +0 -295
- package/node_modules/@aws-cdk/cfnspec/coverage/build-tools/patch-set.ts.html +0 -907
- package/node_modules/@aws-cdk/cfnspec/coverage/build-tools/scrutiny.ts.html +0 -349
- package/node_modules/@aws-cdk/cfnspec/coverage/build-tools/validate-cfn.ts.html +0 -1093
- package/node_modules/@aws-cdk/cfnspec/coverage/favicon.png +0 -0
- package/node_modules/@aws-cdk/cfnspec/coverage/index.html +0 -161
- package/node_modules/@aws-cdk/cfnspec/coverage/junit.xml +0 -35617
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/base.css +0 -224
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/block-navigation.js +0 -87
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/build-tools/index.html +0 -161
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/build-tools/massage-spec.ts.html +0 -295
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/build-tools/patch-set.ts.html +0 -907
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/build-tools/scrutiny.ts.html +0 -349
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/build-tools/validate-cfn.ts.html +0 -1093
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/favicon.png +0 -0
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/index.html +0 -161
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/canned-metrics/canned-metrics-schema.ts.html +0 -304
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/canned-metrics/index.html +0 -116
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/canned-metrics.ts.html +0 -445
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/index.html +0 -131
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/index.ts.html +0 -634
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/augmentation.ts.html +0 -376
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/base-types.ts.html +0 -172
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/index.html +0 -191
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/index.ts.html +0 -103
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/property.ts.html +0 -1003
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/resource-type.ts.html +0 -577
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/specification.ts.html +0 -253
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/prettify.css +0 -1
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/prettify.js +0 -2
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/sorter.js +0 -196
- package/node_modules/@aws-cdk/cfnspec/coverage/lcov.info +0 -1112
- package/node_modules/@aws-cdk/cfnspec/coverage/lib/canned-metrics/canned-metrics-schema.ts.html +0 -304
- package/node_modules/@aws-cdk/cfnspec/coverage/lib/canned-metrics/index.html +0 -116
- package/node_modules/@aws-cdk/cfnspec/coverage/lib/canned-metrics.ts.html +0 -445
- package/node_modules/@aws-cdk/cfnspec/coverage/lib/index.html +0 -131
- package/node_modules/@aws-cdk/cfnspec/coverage/lib/index.ts.html +0 -634
- package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/augmentation.ts.html +0 -376
- package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/base-types.ts.html +0 -172
- package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/index.html +0 -191
- package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/index.ts.html +0 -103
- package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/property.ts.html +0 -1003
- package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/resource-type.ts.html +0 -577
- package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/specification.ts.html +0 -253
- package/node_modules/@aws-cdk/cfnspec/coverage/prettify.css +0 -1
- package/node_modules/@aws-cdk/cfnspec/coverage/prettify.js +0 -2
- package/node_modules/@aws-cdk/cfnspec/coverage/sort-arrow-sprite.png +0 -0
- package/node_modules/@aws-cdk/cfnspec/coverage/sorter.js +0 -196
|
@@ -1,1093 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
<!doctype html>
|
|
3
|
-
<html lang="en">
|
|
4
|
-
|
|
5
|
-
<head>
|
|
6
|
-
<title>Code coverage report for build-tools/validate-cfn.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">build-tools</a> validate-cfn.ts</h1>
|
|
23
|
-
<div class='clearfix'>
|
|
24
|
-
|
|
25
|
-
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">72.41% </span>
|
|
27
|
-
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>84/116</span>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">68.57% </span>
|
|
34
|
-
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>24/35</span>
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">75.75% </span>
|
|
41
|
-
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>25/33</span>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">71.81% </span>
|
|
48
|
-
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>79/110</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 oninput="onInput()" type="search" id="fileSearch">
|
|
61
|
-
</div>
|
|
62
|
-
</template>
|
|
63
|
-
</div>
|
|
64
|
-
<div class='status-line high'></div>
|
|
65
|
-
<pre><table class="coverage">
|
|
66
|
-
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
-
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
-
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
-
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
-
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
-
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
-
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
-
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
-
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
-
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
-
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
-
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
-
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
-
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
-
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
-
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
-
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
-
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
-
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
-
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
-
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
-
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
-
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
-
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
-
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
-
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
-
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
-
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
-
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
-
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
-
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
-
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
-
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
-
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
-
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
-
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
-
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
-
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
-
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
-
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
-
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
-
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
-
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
-
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
-
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
-
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
-
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
-
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
-
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
-
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
-
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
-
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
-
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
-
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
-
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
-
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
-
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
-
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
-
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
-
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
-
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
-
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
-
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
-
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
-
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
-
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
-
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
-
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
-
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
-
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
-
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
-
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
-
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
-
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
-
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
-
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
-
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
-
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
-
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
-
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
-
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
-
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
-
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
-
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
-
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
-
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
-
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
-
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
-
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
-
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
-
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
-
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
-
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
-
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
-
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
-
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
-
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
-
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
-
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
-
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
-
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
-
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
-
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
-
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
-
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
-
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
-
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
-
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
-
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
-
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
-
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
-
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
-
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
-
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
-
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
-
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
-
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
-
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
-
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
-
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
-
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
-
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
-
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
-
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
-
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
-
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
-
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
-
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
-
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
-
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
-
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
-
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
-
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
-
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
-
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
-
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
-
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
-
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
-
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
-
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
-
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
-
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
-
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
-
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
-
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
-
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
-
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
-
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
-
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
-
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
-
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
-
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
-
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
-
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
-
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
-
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
-
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
-
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
-
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
-
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
-
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
-
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
-
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
-
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
-
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
-
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
-
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
-
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
-
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
-
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
-
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
-
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
-
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
-
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
-
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
-
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
-
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
-
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
-
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
-
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
-
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
-
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
-
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
-
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
-
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
-
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
-
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
-
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
-
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
-
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
-
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
-
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
-
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
-
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
-
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
-
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
-
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
-
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
-
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
-
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
-
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
-
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
-
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
-
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
-
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
-
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
-
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
-
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
-
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
-
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
-
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
-
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
-
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
-
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
-
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
-
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
-
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
-
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
-
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
-
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
-
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
-
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
-
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
-
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
-
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
-
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
-
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
-
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
-
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
-
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
-
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
-
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
-
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
-
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
-
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
-
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
-
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
-
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
-
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
-
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
-
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
-
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
-
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
-
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
-
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
-
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
-
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
-
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
-
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
-
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
-
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
-
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
-
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
-
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
-
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
-
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
-
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
-
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
-
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
-
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
-
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
-
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
-
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
-
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
-
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
-
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
-
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
-
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
-
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
-
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
-
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
-
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
-
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
-
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
-
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
-
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
-
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
-
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
-
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
-
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
-
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
-
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
-
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
-
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
-
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
-
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
-
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
-
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
-
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
-
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
-
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
-
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
-
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
-
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
-
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
-
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
-
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
-
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
-
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
-
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
-
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
-
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
-
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
-
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
-
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
-
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
-
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
-
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
-
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
-
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
-
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
-
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
-
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
-
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
-
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
-
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
-
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
-
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
-
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
-
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
-
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
-
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
-
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
-
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
-
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
-
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
-
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
-
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
-
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
-
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
-
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
-
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
-
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
-
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
-
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
-
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
-
<a name='L337'></a><a href='#L337'>337</a></td><td class="line-coverage quiet"><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-neutral"> </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-neutral"> </span>
|
|
411
|
-
<span class="cline-any cline-neutral"> </span>
|
|
412
|
-
<span class="cline-any cline-neutral"> </span>
|
|
413
|
-
<span class="cline-any cline-neutral"> </span>
|
|
414
|
-
<span class="cline-any cline-neutral"> </span>
|
|
415
|
-
<span class="cline-any cline-neutral"> </span>
|
|
416
|
-
<span class="cline-any cline-neutral"> </span>
|
|
417
|
-
<span class="cline-any cline-neutral"> </span>
|
|
418
|
-
<span class="cline-any cline-neutral"> </span>
|
|
419
|
-
<span class="cline-any cline-neutral"> </span>
|
|
420
|
-
<span class="cline-any cline-neutral"> </span>
|
|
421
|
-
<span class="cline-any cline-neutral"> </span>
|
|
422
|
-
<span class="cline-any cline-neutral"> </span>
|
|
423
|
-
<span class="cline-any cline-neutral"> </span>
|
|
424
|
-
<span class="cline-any cline-neutral"> </span>
|
|
425
|
-
<span class="cline-any cline-neutral"> </span>
|
|
426
|
-
<span class="cline-any cline-neutral"> </span>
|
|
427
|
-
<span class="cline-any cline-neutral"> </span>
|
|
428
|
-
<span class="cline-any cline-neutral"> </span>
|
|
429
|
-
<span class="cline-any cline-neutral"> </span>
|
|
430
|
-
<span class="cline-any cline-neutral"> </span>
|
|
431
|
-
<span class="cline-any cline-neutral"> </span>
|
|
432
|
-
<span class="cline-any cline-neutral"> </span>
|
|
433
|
-
<span class="cline-any cline-neutral"> </span>
|
|
434
|
-
<span class="cline-any cline-neutral"> </span>
|
|
435
|
-
<span class="cline-any cline-neutral"> </span>
|
|
436
|
-
<span class="cline-any cline-neutral"> </span>
|
|
437
|
-
<span class="cline-any cline-neutral"> </span>
|
|
438
|
-
<span class="cline-any cline-neutral"> </span>
|
|
439
|
-
<span class="cline-any cline-neutral"> </span>
|
|
440
|
-
<span class="cline-any cline-neutral"> </span>
|
|
441
|
-
<span class="cline-any cline-neutral"> </span>
|
|
442
|
-
<span class="cline-any cline-neutral"> </span>
|
|
443
|
-
<span class="cline-any cline-neutral"> </span>
|
|
444
|
-
<span class="cline-any cline-neutral"> </span>
|
|
445
|
-
<span class="cline-any cline-neutral"> </span>
|
|
446
|
-
<span class="cline-any cline-neutral"> </span>
|
|
447
|
-
<span class="cline-any cline-yes">1x</span>
|
|
448
|
-
<span class="cline-any cline-neutral"> </span>
|
|
449
|
-
<span class="cline-any cline-neutral"> </span>
|
|
450
|
-
<span class="cline-any cline-neutral"> </span>
|
|
451
|
-
<span class="cline-any cline-neutral"> </span>
|
|
452
|
-
<span class="cline-any cline-neutral"> </span>
|
|
453
|
-
<span class="cline-any cline-neutral"> </span>
|
|
454
|
-
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
460
|
-
<span class="cline-any cline-yes">1x</span>
|
|
461
|
-
<span class="cline-any cline-neutral"> </span>
|
|
462
|
-
<span class="cline-any cline-yes">7x</span>
|
|
463
|
-
<span class="cline-any cline-yes">7x</span>
|
|
464
|
-
<span class="cline-any cline-yes">7x</span>
|
|
465
|
-
<span class="cline-any cline-neutral"> </span>
|
|
466
|
-
<span class="cline-any cline-neutral"> </span>
|
|
467
|
-
<span class="cline-any cline-yes">7x</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">7x</span>
|
|
472
|
-
<span class="cline-any cline-neutral"> </span>
|
|
473
|
-
<span class="cline-any cline-neutral"> </span>
|
|
474
|
-
<span class="cline-any cline-neutral"> </span>
|
|
475
|
-
<span class="cline-any cline-yes">7x</span>
|
|
476
|
-
<span class="cline-any cline-yes">7x</span>
|
|
477
|
-
<span class="cline-any cline-neutral"> </span>
|
|
478
|
-
<span class="cline-any cline-neutral"> </span>
|
|
479
|
-
<span class="cline-any cline-yes">7x</span>
|
|
480
|
-
<span class="cline-any cline-yes">7x</span>
|
|
481
|
-
<span class="cline-any cline-neutral"> </span>
|
|
482
|
-
<span class="cline-any cline-neutral"> </span>
|
|
483
|
-
<span class="cline-any cline-neutral"> </span>
|
|
484
|
-
<span class="cline-any cline-neutral"> </span>
|
|
485
|
-
<span class="cline-any cline-neutral"> </span>
|
|
486
|
-
<span class="cline-any cline-neutral"> </span>
|
|
487
|
-
<span class="cline-any cline-neutral"> </span>
|
|
488
|
-
<span class="cline-any cline-neutral"> </span>
|
|
489
|
-
<span class="cline-any cline-neutral"> </span>
|
|
490
|
-
<span class="cline-any cline-neutral"> </span>
|
|
491
|
-
<span class="cline-any cline-neutral"> </span>
|
|
492
|
-
<span class="cline-any cline-neutral"> </span>
|
|
493
|
-
<span class="cline-any cline-neutral"> </span>
|
|
494
|
-
<span class="cline-any cline-neutral"> </span>
|
|
495
|
-
<span class="cline-any cline-neutral"> </span>
|
|
496
|
-
<span class="cline-any cline-neutral"> </span>
|
|
497
|
-
<span class="cline-any cline-neutral"> </span>
|
|
498
|
-
<span class="cline-any cline-neutral"> </span>
|
|
499
|
-
<span class="cline-any cline-neutral"> </span>
|
|
500
|
-
<span class="cline-any cline-neutral"> </span>
|
|
501
|
-
<span class="cline-any cline-neutral"> </span>
|
|
502
|
-
<span class="cline-any cline-neutral"> </span>
|
|
503
|
-
<span class="cline-any cline-yes">7x</span>
|
|
504
|
-
<span class="cline-any cline-no"> </span>
|
|
505
|
-
<span class="cline-any cline-neutral"> </span>
|
|
506
|
-
<span class="cline-any cline-neutral"> </span>
|
|
507
|
-
<span class="cline-any cline-yes">7x</span>
|
|
508
|
-
<span class="cline-any cline-yes">7x</span>
|
|
509
|
-
<span class="cline-any cline-yes">7x</span>
|
|
510
|
-
<span class="cline-any cline-yes">7x</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-neutral"> </span>
|
|
518
|
-
<span class="cline-any cline-yes">7x</span>
|
|
519
|
-
<span class="cline-any cline-yes">7x</span>
|
|
520
|
-
<span class="cline-any cline-neutral"> </span>
|
|
521
|
-
<span class="cline-any cline-neutral"> </span>
|
|
522
|
-
<span class="cline-any cline-yes">7x</span>
|
|
523
|
-
<span class="cline-any cline-no"> </span>
|
|
524
|
-
<span class="cline-any cline-no"> </span>
|
|
525
|
-
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
530
|
-
<span class="cline-any cline-yes">14x</span>
|
|
531
|
-
<span class="cline-any cline-yes">14x</span>
|
|
532
|
-
<span class="cline-any cline-neutral"> </span>
|
|
533
|
-
<span class="cline-any cline-yes">14x</span>
|
|
534
|
-
<span class="cline-any cline-no"> </span>
|
|
535
|
-
<span class="cline-any cline-no"> </span>
|
|
536
|
-
<span class="cline-any cline-neutral"> </span>
|
|
537
|
-
<span class="cline-any cline-neutral"> </span>
|
|
538
|
-
<span class="cline-any cline-neutral"> </span>
|
|
539
|
-
<span class="cline-any cline-neutral"> </span>
|
|
540
|
-
<span class="cline-any cline-neutral"> </span>
|
|
541
|
-
<span class="cline-any cline-neutral"> </span>
|
|
542
|
-
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
549
|
-
<span class="cline-any cline-neutral"> </span>
|
|
550
|
-
<span class="cline-any cline-yes">14x</span>
|
|
551
|
-
<span class="cline-any cline-yes">14x</span>
|
|
552
|
-
<span class="cline-any cline-neutral"> </span>
|
|
553
|
-
<span class="cline-any cline-yes">14x</span>
|
|
554
|
-
<span class="cline-any cline-yes">2x</span>
|
|
555
|
-
<span class="cline-any cline-neutral"> </span>
|
|
556
|
-
<span class="cline-any cline-neutral"> </span>
|
|
557
|
-
<span class="cline-any cline-neutral"> </span>
|
|
558
|
-
<span class="cline-any cline-neutral"> </span>
|
|
559
|
-
<span class="cline-any cline-neutral"> </span>
|
|
560
|
-
<span class="cline-any cline-yes">14x</span>
|
|
561
|
-
<span class="cline-any cline-neutral"> </span>
|
|
562
|
-
<span class="cline-any cline-yes">14x</span>
|
|
563
|
-
<span class="cline-any cline-yes">14x</span>
|
|
564
|
-
<span class="cline-any cline-yes">14x</span>
|
|
565
|
-
<span class="cline-any cline-neutral"> </span>
|
|
566
|
-
<span class="cline-any cline-yes">14x</span>
|
|
567
|
-
<span class="cline-any cline-yes">4x</span>
|
|
568
|
-
<span class="cline-any cline-yes">4x</span>
|
|
569
|
-
<span class="cline-any cline-yes">2x</span>
|
|
570
|
-
<span class="cline-any cline-yes">2x</span>
|
|
571
|
-
<span class="cline-any cline-neutral"> </span>
|
|
572
|
-
<span class="cline-any cline-neutral"> </span>
|
|
573
|
-
<span class="cline-any cline-neutral"> </span>
|
|
574
|
-
<span class="cline-any cline-neutral"> </span>
|
|
575
|
-
<span class="cline-any cline-neutral"> </span>
|
|
576
|
-
<span class="cline-any cline-yes">2x</span>
|
|
577
|
-
<span class="cline-any cline-yes">2x</span>
|
|
578
|
-
<span class="cline-any cline-yes">1x</span>
|
|
579
|
-
<span class="cline-any cline-neutral"> </span>
|
|
580
|
-
<span class="cline-any cline-neutral"> </span>
|
|
581
|
-
<span class="cline-any cline-yes">2x</span>
|
|
582
|
-
<span class="cline-any cline-neutral"> </span>
|
|
583
|
-
<span class="cline-any cline-neutral"> </span>
|
|
584
|
-
<span class="cline-any cline-neutral"> </span>
|
|
585
|
-
<span class="cline-any cline-yes">14x</span>
|
|
586
|
-
<span class="cline-any cline-yes">12x</span>
|
|
587
|
-
<span class="cline-any cline-yes">2x</span>
|
|
588
|
-
<span class="cline-any cline-neutral"> </span>
|
|
589
|
-
<span class="cline-any cline-neutral"> </span>
|
|
590
|
-
<span class="cline-any cline-neutral"> </span>
|
|
591
|
-
<span class="cline-any cline-yes">14x</span>
|
|
592
|
-
<span class="cline-any cline-yes">14x</span>
|
|
593
|
-
<span class="cline-any cline-no"> </span>
|
|
594
|
-
<span class="cline-any cline-neutral"> </span>
|
|
595
|
-
<span class="cline-any cline-neutral"> </span>
|
|
596
|
-
<span class="cline-any cline-neutral"> </span>
|
|
597
|
-
<span class="cline-any cline-neutral"> </span>
|
|
598
|
-
<span class="cline-any cline-yes">3x</span>
|
|
599
|
-
<span class="cline-any cline-no"> </span>
|
|
600
|
-
<span class="cline-any cline-neutral"> </span>
|
|
601
|
-
<span class="cline-any cline-neutral"> </span>
|
|
602
|
-
<span class="cline-any cline-yes">3x</span>
|
|
603
|
-
<span class="cline-any cline-yes">3x</span>
|
|
604
|
-
<span class="cline-any cline-neutral"> </span>
|
|
605
|
-
<span class="cline-any cline-yes">3x</span>
|
|
606
|
-
<span class="cline-any cline-yes">3x</span>
|
|
607
|
-
<span class="cline-any cline-yes">1x</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">44x</span>
|
|
613
|
-
<span class="cline-any cline-neutral"> </span>
|
|
614
|
-
<span class="cline-any cline-neutral"> </span>
|
|
615
|
-
<span class="cline-any cline-neutral"> </span>
|
|
616
|
-
<span class="cline-any cline-yes">39x</span>
|
|
617
|
-
<span class="cline-any cline-yes">39x</span>
|
|
618
|
-
<span class="cline-any cline-yes">39x</span>
|
|
619
|
-
<span class="cline-any cline-yes">28x</span>
|
|
620
|
-
<span class="cline-any cline-neutral"> </span>
|
|
621
|
-
<span class="cline-any cline-yes">39x</span>
|
|
622
|
-
<span class="cline-any cline-neutral"> </span>
|
|
623
|
-
<span class="cline-any cline-no"> </span>
|
|
624
|
-
<span class="cline-any cline-no"> </span>
|
|
625
|
-
<span class="cline-any cline-neutral"> </span>
|
|
626
|
-
<span class="cline-any cline-neutral"> </span>
|
|
627
|
-
<span class="cline-any cline-neutral"> </span>
|
|
628
|
-
<span class="cline-any cline-neutral"> </span>
|
|
629
|
-
<span class="cline-any cline-yes">28x</span>
|
|
630
|
-
<span class="cline-any cline-yes">28x</span>
|
|
631
|
-
<span class="cline-any cline-neutral"> </span>
|
|
632
|
-
<span class="cline-any cline-neutral"> </span>
|
|
633
|
-
<span class="cline-any cline-neutral"> </span>
|
|
634
|
-
<span class="cline-any cline-neutral"> </span>
|
|
635
|
-
<span class="cline-any cline-yes">7x</span>
|
|
636
|
-
<span class="cline-any cline-neutral"> </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-yes">28x</span>
|
|
641
|
-
<span class="cline-any cline-no"> </span>
|
|
642
|
-
<span class="cline-any cline-neutral"> </span>
|
|
643
|
-
<span class="cline-any cline-neutral"> </span>
|
|
644
|
-
<span class="cline-any cline-neutral"> </span>
|
|
645
|
-
<span class="cline-any cline-yes">1x</span>
|
|
646
|
-
<span class="cline-any cline-yes">1x</span>
|
|
647
|
-
<span class="cline-any cline-neutral"> </span>
|
|
648
|
-
<span class="cline-any cline-neutral"> </span>
|
|
649
|
-
<span class="cline-any cline-yes">11x</span>
|
|
650
|
-
<span class="cline-any cline-neutral"> </span>
|
|
651
|
-
<span class="cline-any cline-yes">11x</span>
|
|
652
|
-
<span class="cline-any cline-no"> </span>
|
|
653
|
-
<span class="cline-any cline-neutral"> </span>
|
|
654
|
-
<span class="cline-any cline-neutral"> </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-yes">7x</span>
|
|
668
|
-
<span class="cline-any cline-neutral"> </span>
|
|
669
|
-
<span class="cline-any cline-neutral"> </span>
|
|
670
|
-
<span class="cline-any cline-yes">114x</span>
|
|
671
|
-
<span class="cline-any cline-yes">114x</span>
|
|
672
|
-
<span class="cline-any cline-yes">114x</span>
|
|
673
|
-
<span class="cline-any cline-neutral"> </span>
|
|
674
|
-
<span class="cline-any cline-yes">114x</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-yes">153x</span>
|
|
679
|
-
<span class="cline-any cline-no"> </span>
|
|
680
|
-
<span class="cline-any cline-neutral"> </span>
|
|
681
|
-
<span class="cline-any cline-yes">153x</span>
|
|
682
|
-
<span class="cline-any cline-yes">153x</span>
|
|
683
|
-
<span class="cline-any cline-yes">74x</span>
|
|
684
|
-
<span class="cline-any cline-neutral"> </span>
|
|
685
|
-
<span class="cline-any cline-yes">79x</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-yes">74x</span>
|
|
691
|
-
<span class="cline-any cline-yes">74x</span>
|
|
692
|
-
<span class="cline-any cline-neutral"> </span>
|
|
693
|
-
<span class="cline-any cline-yes">74x</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-no"> </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-no"> </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-yes">1x</span>
|
|
706
|
-
<span class="cline-any cline-no"> </span>
|
|
707
|
-
<span class="cline-any cline-no"> </span>
|
|
708
|
-
<span class="cline-any cline-no"> </span>
|
|
709
|
-
<span class="cline-any cline-neutral"> </span>
|
|
710
|
-
<span class="cline-any cline-neutral"> </span>
|
|
711
|
-
<span class="cline-any cline-no"> </span>
|
|
712
|
-
<span class="cline-any cline-neutral"> </span>
|
|
713
|
-
<span class="cline-any cline-no"> </span>
|
|
714
|
-
<span class="cline-any cline-neutral"> </span>
|
|
715
|
-
<span class="cline-any cline-neutral"> </span>
|
|
716
|
-
<span class="cline-any cline-no"> </span>
|
|
717
|
-
<span class="cline-any cline-neutral"> </span>
|
|
718
|
-
<span class="cline-any cline-no"> </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-no"> </span>
|
|
723
|
-
<span class="cline-any cline-no"> </span>
|
|
724
|
-
<span class="cline-any cline-no"> </span>
|
|
725
|
-
<span class="cline-any cline-no"> </span>
|
|
726
|
-
<span class="cline-any cline-no"> </span>
|
|
727
|
-
<span class="cline-any cline-neutral"> </span>
|
|
728
|
-
<span class="cline-any cline-no"> </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-yes">1x</span>
|
|
733
|
-
<span class="cline-any cline-no"> </span>
|
|
734
|
-
<span class="cline-any cline-no"> </span>
|
|
735
|
-
<span class="cline-any cline-neutral"> </span>
|
|
736
|
-
<span class="cline-any cline-no"> </span>
|
|
737
|
-
<span class="cline-any cline-neutral"> </span>
|
|
738
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/* eslint-disable no-console */
|
|
739
|
-
/**
|
|
740
|
-
* CloudFormation spec validator
|
|
741
|
-
*
|
|
742
|
-
* "Why not JSON Schema?", you might ask, and it's a fair question. The answer is:
|
|
743
|
-
* because the error reporting from JSON schema is pretty bad, and I want the validation
|
|
744
|
-
* errors reported from this check to be blindingly obvious, as non-spec-experts
|
|
745
|
-
* are going to have to consume and understand them.
|
|
746
|
-
*
|
|
747
|
-
* I tried JSON Schema validation and its errors look like:
|
|
748
|
-
*
|
|
749
|
-
* ```
|
|
750
|
-
* - instance.PropertyTypes["..."].Properties.Xyz does not match allOf schema <#/definitions/Typed> with 7 error[s]:
|
|
751
|
-
* - instance.PropertyTypes["..."].Properties.Xyz requires property "PrimitiveType"
|
|
752
|
-
* - instance.PropertyTypes["..."].Properties.Xyz requires property "Type"
|
|
753
|
-
* - instance.PropertyTypes["..."].Properties.Xyz requires property "Type"
|
|
754
|
-
* - instance.PropertyTypes["..."].Properties.Xyz requires property "ItemType"
|
|
755
|
-
* - instance.PropertyTypes["..."].Properties.Xyz requires property "Type"
|
|
756
|
-
* - instance.PropertyTypes["..."].Properties.Xyz requires property "PrimitiveItemType"
|
|
757
|
-
* - instance.PropertyTypes["..."].Properties.Xyz is not exactly one from "Primitive","Complex Type","Collection of Primitives","Collection of Complex Types"
|
|
758
|
-
* ```
|
|
759
|
-
*
|
|
760
|
-
* No bueno. In contrast, this script prints:
|
|
761
|
-
*
|
|
762
|
-
* ```
|
|
763
|
-
* {
|
|
764
|
-
* "ResourceTypes": {
|
|
765
|
-
* "AWS::SageMaker::Device": {
|
|
766
|
-
* "Properties": {
|
|
767
|
-
* "Device": {
|
|
768
|
-
*
|
|
769
|
-
* !!! must have exactly one of 'Type', 'PrimitiveType', found: {"Type":"Device","PrimitiveType":"Json"} !!!
|
|
770
|
-
*
|
|
771
|
-
* "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-device.html#cfn-sagemaker-device-device",
|
|
772
|
-
* "UpdateType": "Mutable",
|
|
773
|
-
* "Required": false,
|
|
774
|
-
* "PrimitiveType": "Json",
|
|
775
|
-
* "Type": "Device"
|
|
776
|
-
* }
|
|
777
|
-
* }
|
|
778
|
-
* }
|
|
779
|
-
* }
|
|
780
|
-
* }
|
|
781
|
-
* ```
|
|
782
|
-
*/
|
|
783
|
-
import * as fs from 'fs-extra';
|
|
784
|
-
|
|
785
|
-
export interface CfnSpec {
|
|
786
|
-
PropertyTypes: Record<string, any>;
|
|
787
|
-
ResourceTypes: Record<string, any>;
|
|
788
|
-
ResourceSpecificationVersion: string;
|
|
789
|
-
}
|
|
790
|
-
|
|
791
|
-
export interface ValidationError {
|
|
792
|
-
readonly value: JsonValue<any>;
|
|
793
|
-
readonly message: string;
|
|
794
|
-
}
|
|
795
|
-
|
|
796
|
-
export class CfnSpecValidator {
|
|
797
|
-
public static validate(spec: CfnSpec) {
|
|
798
|
-
const ret = new CfnSpecValidator(spec);
|
|
799
|
-
ret.validateSpec();
|
|
800
|
-
return ret.errors;
|
|
801
|
-
}
|
|
802
|
-
|
|
803
|
-
public readonly errors = new Array<ValidationError>();
|
|
804
|
-
private readonly root: JsonValue<CfnSpec>;
|
|
805
|
-
|
|
806
|
-
constructor(spec: CfnSpec) {
|
|
807
|
-
this.root = JsonValue.of(spec);
|
|
808
|
-
}
|
|
809
|
-
|
|
810
|
-
public validateSpec() {
|
|
811
|
-
this.assert(this.root.get('PropertyTypes'), isObject, (propTypes) => {
|
|
812
|
-
this.validateMap(propTypes, (propType) => this.validatePropertyType(propType));
|
|
813
|
-
});
|
|
814
|
-
|
|
815
|
-
this.assert(this.root.get('ResourceTypes'), isObject, (resTypes) => {
|
|
816
|
-
this.validateMap(resTypes, (propType) => this.validateResourceType(propType));
|
|
817
|
-
});
|
|
818
|
-
}
|
|
819
|
-
|
|
820
|
-
/**
|
|
821
|
-
* Property types are extremely weird
|
|
822
|
-
*
|
|
823
|
-
* Nominally, they define "records" that have a `Properties` field with the defined
|
|
824
|
-
* properties.
|
|
825
|
-
*
|
|
826
|
-
* However, they are also commonly used as aliases for other types, meaning they have
|
|
827
|
-
* the same type-indicating fields as individual property *fields* would have.
|
|
828
|
-
*
|
|
829
|
-
* Also also, it seems to be quite common to have them empty--have no fields at all.
|
|
830
|
-
* This seems to be taken as an alias for an unstructured `Json` type. It's probably
|
|
831
|
-
* just a mistake, but unfortunately a mistake that S3 is participating in, so if we
|
|
832
|
-
* fail on that we won't be able to consume updates to S3's schema. Our codegen is
|
|
833
|
-
* ready to deal with this and just renders it to an empty struct.
|
|
834
|
-
*/
|
|
835
|
-
private validatePropertyType(propType: JsonValue<Record<string, any>>) {
|
|
836
|
-
// If the only set of properties is "Documentation", we take this to be an alias
|
|
837
|
-
// for an empty struct and allow it. I feel icky allowing this, but it seems to
|
|
838
|
-
// be pragmatic for now.
|
|
839
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (Object.keys(propType.value).join(',') === 'Documentation') {
|
|
840
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
841
|
-
}
|
|
842
|
-
|
|
843
|
-
const properties = propType.get('Properties');
|
|
844
|
-
if (properties.hasValue) {
|
|
845
|
-
this.assert(properties, isObject, (props) => {
|
|
846
|
-
this.validateProperties(props);
|
|
847
|
-
});
|
|
848
|
-
} else <span class="missing-if-branch" title="else path not taken" >E</span>{
|
|
849
|
-
<span class="cstat-no" title="statement not covered" > this.validateType(propType, 'if a property type doesn\'t have "Properties", it ');</span>
|
|
850
|
-
}
|
|
851
|
-
}
|
|
852
|
-
|
|
853
|
-
private validateResourceType(resType: JsonValue<any>) {
|
|
854
|
-
this.assertOptional(resType.get('Properties'), isObject, (props) => {
|
|
855
|
-
this.validateProperties(props);
|
|
856
|
-
});
|
|
857
|
-
|
|
858
|
-
this.assertOptional(resType.get('Attributes'), isObject, <span class="fstat-no" title="function not covered" >(a</span>ttrs) => {
|
|
859
|
-
<span class="cstat-no" title="statement not covered" > this.validateMap(attrs, <span class="fstat-no" title="function not covered" >attr </span>=> {</span>
|
|
860
|
-
<span class="cstat-no" title="statement not covered" > this.validateType(attr);</span>
|
|
861
|
-
});
|
|
862
|
-
});
|
|
863
|
-
}
|
|
864
|
-
|
|
865
|
-
private validateProperties(properties: JsonValue<Record<string, any>>) {
|
|
866
|
-
this.validateMap(properties, prop => {
|
|
867
|
-
this.validateType(prop);
|
|
868
|
-
|
|
869
|
-
this.assertOptional(prop.get('UpdateType'), <span class="fstat-no" title="function not covered" >(x</span>: any) => {
|
|
870
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!['Mutable', 'Immutable', 'Conditional'].includes(x)) {</span>
|
|
871
|
-
<span class="cstat-no" title="statement not covered" > throw new Error(`invalid value for enum: '${x}'`);</span>
|
|
872
|
-
}
|
|
873
|
-
});
|
|
874
|
-
});
|
|
875
|
-
}
|
|
876
|
-
|
|
877
|
-
/**
|
|
878
|
-
* Validate the type
|
|
879
|
-
*
|
|
880
|
-
* There must be:
|
|
881
|
-
* - Either Type or PrimitiveType
|
|
882
|
-
* - Only if Type is List or Map, there will be either an ItemType or a PrimitiveItemType
|
|
883
|
-
* - Non-primitive Types must correspond to a property type
|
|
884
|
-
*/
|
|
885
|
-
private validateType(typedObject: JsonValue<Record<string, any>>, errorPrefix = '') {
|
|
886
|
-
const type = typedObject.get('Type');
|
|
887
|
-
const primitiveType = typedObject.get('PrimitiveType');
|
|
888
|
-
|
|
889
|
-
if (type.hasValue === primitiveType.hasValue) {
|
|
890
|
-
this.report(typedObject, `${errorPrefix}must have exactly one of 'Type', 'PrimitiveType', found: ${JSON.stringify({
|
|
891
|
-
Type: type.valueOrUndefined,
|
|
892
|
-
PrimitiveType: primitiveType.valueOrUndefined,
|
|
893
|
-
})}`);
|
|
894
|
-
}
|
|
895
|
-
|
|
896
|
-
this.assertOptional(primitiveType, isValidPrimitive);
|
|
897
|
-
|
|
898
|
-
let isCollectionType = false;
|
|
899
|
-
const itemType = typedObject.get('ItemType');
|
|
900
|
-
const primitiveItemType = typedObject.get('PrimitiveItemType');
|
|
901
|
-
|
|
902
|
-
if (type.hasValue) {
|
|
903
|
-
isCollectionType = COLLECTION_TYPES.includes(type.value);
|
|
904
|
-
if (isCollectionType) {
|
|
905
|
-
if (itemType.hasValue === primitiveItemType.hasValue) {
|
|
906
|
-
this.report(typedObject, `must have exactly one of 'ItemType', 'PrimitiveItemType', found: ${JSON.stringify({
|
|
907
|
-
ItemType: itemType.valueOrUndefined,
|
|
908
|
-
PrimitiveItemType: primitiveItemType.valueOrUndefined,
|
|
909
|
-
})}`);
|
|
910
|
-
}
|
|
911
|
-
|
|
912
|
-
this.assertOptional(primitiveItemType, isValidPrimitive);
|
|
913
|
-
if (itemType.hasValue) {
|
|
914
|
-
this.assertValidPropertyTypeReference(itemType);
|
|
915
|
-
}
|
|
916
|
-
} else {
|
|
917
|
-
this.assertValidPropertyTypeReference(type);
|
|
918
|
-
}
|
|
919
|
-
}
|
|
920
|
-
|
|
921
|
-
if (!isCollectionType) {
|
|
922
|
-
if (itemType.hasValue || primitiveItemType.hasValue) {
|
|
923
|
-
this.report(typedObject, 'only \'List\' or \'Map\' types can have \'ItemType\', \'PrimitiveItemType\'');
|
|
924
|
-
}
|
|
925
|
-
}
|
|
926
|
-
|
|
927
|
-
const dupes = typedObject.get('DuplicatesAllowed');
|
|
928
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (dupes.hasValue && <span class="branch-1 cbranch-no" title="branch not covered" >!isCollectionType)</span> {
|
|
929
|
-
<span class="cstat-no" title="statement not covered" > this.report(dupes, 'occurs on non-collection type');</span>
|
|
930
|
-
}
|
|
931
|
-
}
|
|
932
|
-
|
|
933
|
-
private assertValidPropertyTypeReference(typeName: JsonValue<string>) {
|
|
934
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (BUILTIN_COMPLEX_TYPES.includes(typeName.value)) {
|
|
935
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
936
|
-
}
|
|
937
|
-
|
|
938
|
-
const cfnName = typeName.path[1]; // AWS::Xyz::Resource[.Property]
|
|
939
|
-
const namespace = cfnName.split('.')[0];
|
|
940
|
-
|
|
941
|
-
const propTypeName = `${namespace}.${typeName.value}`;
|
|
942
|
-
if (!this.root.get('PropertyTypes').get(propTypeName).hasValue) {
|
|
943
|
-
this.report(typeName, `unknown property type name '${typeName.value}' (missing definition for '${propTypeName}')`);
|
|
944
|
-
}
|
|
945
|
-
}
|
|
946
|
-
|
|
947
|
-
private assertOptional<A, B extends A>(x: JsonValue<A>, pred: (x: A) => asserts x is B, block?: (x: JsonValue<B>) => void): boolean {
|
|
948
|
-
return x.hasValue ? this.assert(x, pred, block) : true;
|
|
949
|
-
}
|
|
950
|
-
|
|
951
|
-
private assert<A, B extends A>(x: JsonValue<A>, pred: (x: A) => asserts x is B, block?: (x: JsonValue<B>) => void): boolean {
|
|
952
|
-
try {
|
|
953
|
-
pred(x.value);
|
|
954
|
-
if (block) {
|
|
955
|
-
block(new JsonValue(x.value, x.path));
|
|
956
|
-
}
|
|
957
|
-
return true;
|
|
958
|
-
} catch (e) {
|
|
959
|
-
<span class="cstat-no" title="statement not covered" > this.report(x, e.message);</span>
|
|
960
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
961
|
-
}
|
|
962
|
-
}
|
|
963
|
-
|
|
964
|
-
private validateMap<A>(x: JsonValue<Record<string, A>>, block: (x: JsonValue<A>) => void) {
|
|
965
|
-
for (const key in x.value) {
|
|
966
|
-
block(x.get(key));
|
|
967
|
-
}
|
|
968
|
-
}
|
|
969
|
-
|
|
970
|
-
private report(value: JsonValue<any>, message: string) {
|
|
971
|
-
this.errors.push({ value, message });
|
|
972
|
-
}
|
|
973
|
-
}
|
|
974
|
-
|
|
975
|
-
function isObject(x: any): asserts x is Record<string, any> {
|
|
976
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (x == null || typeof x !== 'object' || Array.isArray(x)) {
|
|
977
|
-
<span class="cstat-no" title="statement not covered" > throw new Error(`expected object, found '${x}'`);</span>
|
|
978
|
-
}
|
|
979
|
-
}
|
|
980
|
-
|
|
981
|
-
const COLLECTION_TYPES = ['List', 'Map'];
|
|
982
|
-
const BUILTIN_COMPLEX_TYPES = ['Tag'];
|
|
983
|
-
|
|
984
|
-
function isValidPrimitive(x: any): asserts x is string {
|
|
985
|
-
const primitives = ['String', 'Long', 'Integer', 'Double', 'Boolean', 'Timestamp', 'Json'];
|
|
986
|
-
|
|
987
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!primitives.includes(x)) {
|
|
988
|
-
<span class="cstat-no" title="statement not covered" > throw new Error(`must be one of ${primitives.join(', ')}, got: ${x}`);</span>
|
|
989
|
-
}
|
|
990
|
-
}
|
|
991
|
-
|
|
992
|
-
interface JsonValue<A> {
|
|
993
|
-
readonly path: string[];
|
|
994
|
-
readonly pathValue: any;
|
|
995
|
-
readonly hasValue: boolean;
|
|
996
|
-
readonly value: A;
|
|
997
|
-
readonly valueOrUndefined: A | undefined;
|
|
998
|
-
get<K extends keyof A>(k: K): JsonValue<A[K]>;
|
|
999
|
-
}
|
|
1000
|
-
|
|
1001
|
-
class JsonValue<A> implements JsonValue<A> {
|
|
1002
|
-
public static of<B>(x: B): JsonValue<B> {
|
|
1003
|
-
return new JsonValue(x, []);
|
|
1004
|
-
}
|
|
1005
|
-
|
|
1006
|
-
public readonly hasValue: boolean = true;
|
|
1007
|
-
public readonly valueOrUndefined: A | undefined = this.value;
|
|
1008
|
-
public readonly pathValue: any = this.value;
|
|
1009
|
-
|
|
1010
|
-
constructor(public readonly value: A, public readonly path: string[]) {
|
|
1011
|
-
}
|
|
1012
|
-
|
|
1013
|
-
public get<K extends keyof A>(k: K): JsonValue<A[K]> {
|
|
1014
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!this.value || typeof this.value !== 'object' || Array.isArray(this.value)) {
|
|
1015
|
-
<span class="cstat-no" title="statement not covered" > return new ErrorValue(`expected object, found ${this.value}`, this.path, this.value);</span>
|
|
1016
|
-
}
|
|
1017
|
-
const ret = this.value[k];
|
|
1018
|
-
if (ret === undefined) {
|
|
1019
|
-
return new ErrorValue(`missing required key '${k}'`, this.path, this.value);
|
|
1020
|
-
}
|
|
1021
|
-
return new JsonValue(ret, [...this.path, `${k}`]);
|
|
1022
|
-
}
|
|
1023
|
-
}
|
|
1024
|
-
|
|
1025
|
-
class ErrorValue<A> implements JsonValue<A> {
|
|
1026
|
-
public readonly hasValue = false;
|
|
1027
|
-
public readonly valueOrUndefined: A | undefined = undefined;
|
|
1028
|
-
|
|
1029
|
-
constructor(private readonly error: string, public readonly path: string[], public readonly pathValue: any) {
|
|
1030
|
-
}
|
|
1031
|
-
|
|
1032
|
-
public <span class="fstat-no" title="function not covered" >get<</span>K extends keyof A>(_k: K): JsonValue<A[K]> {
|
|
1033
|
-
<span class="cstat-no" title="statement not covered" > return this as any;</span>
|
|
1034
|
-
}
|
|
1035
|
-
|
|
1036
|
-
<span class="fstat-no" title="function not covered" > public get v</span>alue(): A {
|
|
1037
|
-
<span class="cstat-no" title="statement not covered" > throw new Error(this.error);</span>
|
|
1038
|
-
}
|
|
1039
|
-
}
|
|
1040
|
-
|
|
1041
|
-
export function <span class="fstat-no" title="function not covered" >formatErrorInContext(</span>error: ValidationError) {
|
|
1042
|
-
let reportValue = <span class="cstat-no" title="statement not covered" >error.value.pathValue;</span>
|
|
1043
|
-
<span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >error.value.path.length;</span> i > 0; i--) {</span>
|
|
1044
|
-
<span class="cstat-no" title="statement not covered" > reportValue = { [error.value.path[i - 1]]: reportValue };</span>
|
|
1045
|
-
}
|
|
1046
|
-
|
|
1047
|
-
const formattedLines = <span class="cstat-no" title="statement not covered" >JSON.stringify(reportValue, undefined, 2).split('\n');</span>
|
|
1048
|
-
|
|
1049
|
-
const indent = <span class="cstat-no" title="statement not covered" >2 * (error.value.path.length + 1);</span>
|
|
1050
|
-
|
|
1051
|
-
// Insert the error message at line N with an appropriate indent
|
|
1052
|
-
<span class="cstat-no" title="statement not covered" > formattedLines.splice(error.value.path.length + 1, 0, `\n!!!${' '.repeat(indent - 3)}${error.message} !!!\n`);</span>
|
|
1053
|
-
|
|
1054
|
-
<span class="cstat-no" title="statement not covered" > return formattedLines.join('\n');</span>
|
|
1055
|
-
}
|
|
1056
|
-
|
|
1057
|
-
async function <span class="fstat-no" title="function not covered" >main(</span>args: string[]) {
|
|
1058
|
-
const spec = <span class="cstat-no" title="statement not covered" >await fs.readJson(args[0]);</span>
|
|
1059
|
-
const errors = <span class="cstat-no" title="statement not covered" >CfnSpecValidator.validate(spec);</span>
|
|
1060
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (errors.length !== 0) {</span>
|
|
1061
|
-
<span class="cstat-no" title="statement not covered" > for (const error of errors) {</span>
|
|
1062
|
-
<span class="cstat-no" title="statement not covered" > console.error(formatErrorInContext(error));</span>
|
|
1063
|
-
}
|
|
1064
|
-
<span class="cstat-no" title="statement not covered" > process.exitCode = 1;</span>
|
|
1065
|
-
}
|
|
1066
|
-
}
|
|
1067
|
-
|
|
1068
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (require.main === module) {
|
|
1069
|
-
<span class="cstat-no" title="statement not covered" > main(process.argv.slice(2)).catch(<span class="fstat-no" title="function not covered" >e </span>=> {</span>
|
|
1070
|
-
<span class="cstat-no" title="statement not covered" > process.exitCode = 1;</span>
|
|
1071
|
-
// eslint-disable-next-line no-console
|
|
1072
|
-
<span class="cstat-no" title="statement not covered" > console.error(e.message);</span>
|
|
1073
|
-
});
|
|
1074
|
-
}</pre></td></tr></table></pre>
|
|
1075
|
-
|
|
1076
|
-
<div class='push'></div><!-- for sticky footer -->
|
|
1077
|
-
</div><!-- /wrapper -->
|
|
1078
|
-
<div class='footer quiet pad2 space-top1 center small'>
|
|
1079
|
-
Code coverage generated by
|
|
1080
|
-
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1081
|
-
at Fri Jun 24 2022 21:27:03 GMT+0000 (Coordinated Universal Time)
|
|
1082
|
-
</div>
|
|
1083
|
-
<script src="../prettify.js"></script>
|
|
1084
|
-
<script>
|
|
1085
|
-
window.onload = function () {
|
|
1086
|
-
prettyPrint();
|
|
1087
|
-
};
|
|
1088
|
-
</script>
|
|
1089
|
-
<script src="../sorter.js"></script>
|
|
1090
|
-
<script src="../block-navigation.js"></script>
|
|
1091
|
-
</body>
|
|
1092
|
-
</html>
|
|
1093
|
-
|