@saasquatch/squatch-js 2.6.0-4 → 2.6.0-5
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/coverage/clover.xml +843 -64
- package/coverage/coverage-final.json +19 -1
- package/coverage/lcov-report/DeclarativeWidget.ts.html +298 -118
- package/coverage/lcov-report/Widgets.ts.html +70 -22
- package/coverage/lcov-report/api/AnalyticsApi.ts.html +38 -38
- package/coverage/lcov-report/api/EventsApi.ts.html +352 -0
- package/coverage/lcov-report/api/WidgetApi.ts.html +88 -61
- package/coverage/lcov-report/api/graphql.ts.html +1 -1
- package/coverage/lcov-report/squatch.ts.html +721 -0
- package/coverage/lcov-report/utils/cookieUtils.ts.html +1 -1
- package/coverage/lcov-report/utils/decodeUserJwt.ts.html +1 -1
- package/coverage/lcov-report/utils/domready.ts.html +1 -1
- package/coverage/lcov-report/utils/io.ts.html +7 -7
- package/coverage/lcov-report/utils/utmUtils.ts.html +22 -22
- package/coverage/lcov-report/utils/validate.ts.html +41 -41
- package/coverage/lcov-report/validate.ts.html +1 -1
- package/coverage/lcov-report/widgets/EmbedWidget.ts.html +24 -3
- package/coverage/lcov-report/widgets/PopupWidget.ts.html +17 -2
- package/coverage/lcov-report/widgets/Widget.ts.html +1 -1
- package/coverage/lcov-report/widgets/Widgets.ts.html +61 -16
- package/coverage/lcov-report/widgets/declarative/DeclarativeWidget.ts.html +368 -74
- package/coverage/lcov-report/widgets/declarative/DeclarativeWidgets.ts.html +388 -0
- package/coverage/lcov.info +1553 -125
- package/dist/api/WidgetApi.d.ts +2 -2
- package/dist/squatch.d.ts +28 -1
- package/dist/squatch.esm.js +176 -29
- package/dist/squatch.esm.js.map +1 -1
- package/dist/squatch.js +176 -29
- package/dist/squatch.js.map +1 -1
- package/dist/squatch.min.js +1 -1
- package/dist/widgets/EmbedWidget.d.ts +5 -0
- package/dist/widgets/PopupWidget.d.ts +6 -1
- package/dist/widgets/Widgets.d.ts +15 -2
- package/dist/widgets/declarative/DeclarativeWidget.d.ts +57 -1
- package/dist/widgets/declarative/DeclarativeWidgets.d.ts +22 -0
- package/package.json +1 -1
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">60.93% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>39/64</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">54.76% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>23/42</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">41.66% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>5/12</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">67.24% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>39/58</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line medium'></div>
|
|
65
65
|
<pre><table class="coverage">
|
|
66
66
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
67
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -201,12 +201,115 @@
|
|
|
201
201
|
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
202
|
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
203
|
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
-
<a name='L139'></a><a href='#L139'>139</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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
303
|
+
<span class="cline-any cline-yes">1x</span>
|
|
205
304
|
<span class="cline-any cline-yes">1x</span>
|
|
206
305
|
<span class="cline-any cline-neutral"> </span>
|
|
207
306
|
<span class="cline-any cline-yes">1x</span>
|
|
208
307
|
<span class="cline-any cline-yes">1x</span>
|
|
209
308
|
<span class="cline-any cline-yes">1x</span>
|
|
309
|
+
<span class="cline-any cline-neutral"> </span>
|
|
310
|
+
<span class="cline-any cline-neutral"> </span>
|
|
311
|
+
<span class="cline-any cline-neutral"> </span>
|
|
312
|
+
<span class="cline-any cline-neutral"> </span>
|
|
210
313
|
<span class="cline-any cline-yes">1x</span>
|
|
211
314
|
<span class="cline-any cline-yes">1x</span>
|
|
212
315
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -222,6 +325,58 @@
|
|
|
222
325
|
<span class="cline-any cline-neutral"> </span>
|
|
223
326
|
<span class="cline-any cline-neutral"> </span>
|
|
224
327
|
<span class="cline-any cline-neutral"> </span>
|
|
328
|
+
<span class="cline-any cline-yes">1x</span>
|
|
329
|
+
<span class="cline-any cline-neutral"> </span>
|
|
330
|
+
<span class="cline-any cline-neutral"> </span>
|
|
331
|
+
<span class="cline-any cline-neutral"> </span>
|
|
332
|
+
<span class="cline-any cline-neutral"> </span>
|
|
333
|
+
<span class="cline-any cline-neutral"> </span>
|
|
334
|
+
<span class="cline-any cline-neutral"> </span>
|
|
335
|
+
<span class="cline-any cline-neutral"> </span>
|
|
336
|
+
<span class="cline-any cline-neutral"> </span>
|
|
337
|
+
<span class="cline-any cline-neutral"> </span>
|
|
338
|
+
<span class="cline-any cline-neutral"> </span>
|
|
339
|
+
<span class="cline-any cline-neutral"> </span>
|
|
340
|
+
<span class="cline-any cline-neutral"> </span>
|
|
341
|
+
<span class="cline-any cline-neutral"> </span>
|
|
342
|
+
<span class="cline-any cline-neutral"> </span>
|
|
343
|
+
<span class="cline-any cline-neutral"> </span>
|
|
344
|
+
<span class="cline-any cline-neutral"> </span>
|
|
345
|
+
<span class="cline-any cline-neutral"> </span>
|
|
346
|
+
<span class="cline-any cline-neutral"> </span>
|
|
347
|
+
<span class="cline-any cline-neutral"> </span>
|
|
348
|
+
<span class="cline-any cline-neutral"> </span>
|
|
349
|
+
<span class="cline-any cline-neutral"> </span>
|
|
350
|
+
<span class="cline-any cline-neutral"> </span>
|
|
351
|
+
<span class="cline-any cline-neutral"> </span>
|
|
352
|
+
<span class="cline-any cline-neutral"> </span>
|
|
353
|
+
<span class="cline-any cline-neutral"> </span>
|
|
354
|
+
<span class="cline-any cline-neutral"> </span>
|
|
355
|
+
<span class="cline-any cline-neutral"> </span>
|
|
356
|
+
<span class="cline-any cline-neutral"> </span>
|
|
357
|
+
<span class="cline-any cline-neutral"> </span>
|
|
358
|
+
<span class="cline-any cline-neutral"> </span>
|
|
359
|
+
<span class="cline-any cline-neutral"> </span>
|
|
360
|
+
<span class="cline-any cline-neutral"> </span>
|
|
361
|
+
<span class="cline-any cline-neutral"> </span>
|
|
362
|
+
<span class="cline-any cline-neutral"> </span>
|
|
363
|
+
<span class="cline-any cline-neutral"> </span>
|
|
364
|
+
<span class="cline-any cline-neutral"> </span>
|
|
365
|
+
<span class="cline-any cline-neutral"> </span>
|
|
366
|
+
<span class="cline-any cline-neutral"> </span>
|
|
367
|
+
<span class="cline-any cline-neutral"> </span>
|
|
368
|
+
<span class="cline-any cline-neutral"> </span>
|
|
369
|
+
<span class="cline-any cline-neutral"> </span>
|
|
370
|
+
<span class="cline-any cline-neutral"> </span>
|
|
371
|
+
<span class="cline-any cline-neutral"> </span>
|
|
372
|
+
<span class="cline-any cline-neutral"> </span>
|
|
373
|
+
<span class="cline-any cline-neutral"> </span>
|
|
374
|
+
<span class="cline-any cline-neutral"> </span>
|
|
375
|
+
<span class="cline-any cline-neutral"> </span>
|
|
376
|
+
<span class="cline-any cline-neutral"> </span>
|
|
377
|
+
<span class="cline-any cline-neutral"> </span>
|
|
378
|
+
<span class="cline-any cline-neutral"> </span>
|
|
379
|
+
<span class="cline-any cline-neutral"> </span>
|
|
225
380
|
<span class="cline-any cline-neutral"> </span>
|
|
226
381
|
<span class="cline-any cline-neutral"> </span>
|
|
227
382
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -239,20 +394,23 @@
|
|
|
239
394
|
<span class="cline-any cline-neutral"> </span>
|
|
240
395
|
<span class="cline-any cline-neutral"> </span>
|
|
241
396
|
<span class="cline-any cline-neutral"> </span>
|
|
242
|
-
<span class="cline-any cline-
|
|
397
|
+
<span class="cline-any cline-yes">1x</span>
|
|
243
398
|
<span class="cline-any cline-neutral"> </span>
|
|
399
|
+
<span class="cline-any cline-yes">1x</span>
|
|
244
400
|
<span class="cline-any cline-neutral"> </span>
|
|
245
401
|
<span class="cline-any cline-neutral"> </span>
|
|
246
|
-
<span class="cline-any cline-no"> </span>
|
|
247
402
|
<span class="cline-any cline-neutral"> </span>
|
|
403
|
+
<span class="cline-any cline-yes">1x</span>
|
|
248
404
|
<span class="cline-any cline-neutral"> </span>
|
|
249
405
|
<span class="cline-any cline-neutral"> </span>
|
|
250
406
|
<span class="cline-any cline-neutral"> </span>
|
|
251
407
|
<span class="cline-any cline-neutral"> </span>
|
|
252
|
-
<span class="cline-any cline-no"> </span>
|
|
253
|
-
<span class="cline-any cline-no"> </span>
|
|
254
408
|
<span class="cline-any cline-neutral"> </span>
|
|
255
|
-
<span class="cline-any cline-
|
|
409
|
+
<span class="cline-any cline-yes">1x</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">1x</span>
|
|
413
|
+
<span class="cline-any cline-neutral"> </span>
|
|
256
414
|
<span class="cline-any cline-neutral"> </span>
|
|
257
415
|
<span class="cline-any cline-neutral"> </span>
|
|
258
416
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -263,7 +421,6 @@
|
|
|
263
421
|
<span class="cline-any cline-neutral"> </span>
|
|
264
422
|
<span class="cline-any cline-neutral"> </span>
|
|
265
423
|
<span class="cline-any cline-no"> </span>
|
|
266
|
-
<span class="cline-any cline-no"> </span>
|
|
267
424
|
<span class="cline-any cline-neutral"> </span>
|
|
268
425
|
<span class="cline-any cline-no"> </span>
|
|
269
426
|
<span class="cline-any cline-no"> </span>
|
|
@@ -275,6 +432,7 @@
|
|
|
275
432
|
<span class="cline-any cline-neutral"> </span>
|
|
276
433
|
<span class="cline-any cline-neutral"> </span>
|
|
277
434
|
<span class="cline-any cline-neutral"> </span>
|
|
435
|
+
<span class="cline-any cline-neutral"> </span>
|
|
278
436
|
<span class="cline-any cline-no"> </span>
|
|
279
437
|
<span class="cline-any cline-neutral"> </span>
|
|
280
438
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -282,6 +440,18 @@
|
|
|
282
440
|
<span class="cline-any cline-neutral"> </span>
|
|
283
441
|
<span class="cline-any cline-neutral"> </span>
|
|
284
442
|
<span class="cline-any cline-yes">1x</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-no"> </span>
|
|
447
|
+
<span class="cline-any cline-neutral"> </span>
|
|
448
|
+
<span class="cline-any cline-neutral"> </span>
|
|
449
|
+
<span class="cline-any cline-neutral"> </span>
|
|
450
|
+
<span class="cline-any cline-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>
|
|
285
455
|
<span class="cline-any cline-no"> </span>
|
|
286
456
|
<span class="cline-any cline-no"> </span>
|
|
287
457
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -296,28 +466,39 @@
|
|
|
296
466
|
<span class="cline-any cline-neutral"> </span>
|
|
297
467
|
<span class="cline-any cline-neutral"> </span>
|
|
298
468
|
<span class="cline-any cline-neutral"> </span>
|
|
469
|
+
<span class="cline-any cline-yes">1x</span>
|
|
470
|
+
<span class="cline-any cline-yes">1x</span>
|
|
299
471
|
<span class="cline-any cline-neutral"> </span>
|
|
300
|
-
<span class="cline-any cline-
|
|
472
|
+
<span class="cline-any cline-yes">1x</span>
|
|
301
473
|
<span class="cline-any cline-neutral"> </span>
|
|
302
|
-
<span class="cline-any cline-
|
|
474
|
+
<span class="cline-any cline-yes">1x</span>
|
|
475
|
+
<span class="cline-any cline-yes">1x</span>
|
|
303
476
|
<span class="cline-any cline-neutral"> </span>
|
|
304
477
|
<span class="cline-any cline-no"> </span>
|
|
305
|
-
<span class="cline-any cline-no"> </span>
|
|
306
478
|
<span class="cline-any cline-neutral"> </span>
|
|
307
|
-
<span class="cline-any cline-
|
|
479
|
+
<span class="cline-any cline-neutral"> </span>
|
|
480
|
+
<span class="cline-any cline-yes">1x</span>
|
|
481
|
+
<span class="cline-any cline-yes">1x</span>
|
|
482
|
+
<span class="cline-any cline-neutral"> </span>
|
|
483
|
+
<span class="cline-any cline-yes">1x</span>
|
|
484
|
+
<span class="cline-any cline-yes">1x</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>
|
|
308
488
|
<span class="cline-any cline-neutral"> </span>
|
|
309
489
|
<span class="cline-any cline-neutral"> </span>
|
|
310
|
-
<span class="cline-any cline-no"> </span>
|
|
311
490
|
<span class="cline-any cline-neutral"> </span>
|
|
312
491
|
<span class="cline-any cline-no"> </span>
|
|
313
492
|
<span class="cline-any cline-no"> </span>
|
|
314
|
-
<span class="cline-any cline-
|
|
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>
|
|
315
497
|
<span class="cline-any cline-neutral"> </span>
|
|
316
498
|
<span class="cline-any cline-neutral"> </span>
|
|
317
499
|
<span class="cline-any cline-yes">1x</span>
|
|
318
|
-
<span class="cline-any cline-
|
|
500
|
+
<span class="cline-any cline-yes">1x</span>
|
|
319
501
|
<span class="cline-any cline-neutral"> </span>
|
|
320
|
-
<span class="cline-any cline-no"> </span>
|
|
321
502
|
<span class="cline-any cline-neutral"> </span>
|
|
322
503
|
<span class="cline-any cline-neutral"> </span>
|
|
323
504
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -325,42 +506,114 @@
|
|
|
325
506
|
<span class="cline-any cline-neutral"> </span>
|
|
326
507
|
<span class="cline-any cline-neutral"> </span>
|
|
327
508
|
<span class="cline-any cline-neutral"> </span>
|
|
509
|
+
<span class="cline-any cline-yes">1x</span>
|
|
510
|
+
<span class="cline-any cline-no"> </span>
|
|
511
|
+
<span class="cline-any cline-neutral"> </span>
|
|
512
|
+
<span class="cline-any cline-yes">1x</span>
|
|
513
|
+
<span class="cline-any cline-neutral"> </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>
|
|
328
517
|
<span class="cline-any cline-neutral"> </span>
|
|
329
518
|
<span class="cline-any cline-neutral"> </span>
|
|
330
519
|
<span class="cline-any cline-neutral"> </span>
|
|
331
520
|
<span class="cline-any cline-neutral"> </span>
|
|
332
521
|
<span class="cline-any cline-no"> </span>
|
|
522
|
+
<span class="cline-any cline-no"> </span>
|
|
523
|
+
<span class="cline-any cline-neutral"> </span>
|
|
524
|
+
<span class="cline-any cline-neutral"> </span>
|
|
525
|
+
<span class="cline-any cline-neutral"> </span>
|
|
526
|
+
<span class="cline-any cline-neutral"> </span>
|
|
333
527
|
<span class="cline-any cline-neutral"> </span>
|
|
334
528
|
<span class="cline-any cline-neutral"> </span>
|
|
335
529
|
<span class="cline-any cline-neutral"> </span>
|
|
336
530
|
<span class="cline-any cline-no"> </span>
|
|
531
|
+
<span class="cline-any cline-no"> </span>
|
|
337
532
|
<span class="cline-any cline-neutral"> </span>
|
|
338
533
|
<span class="cline-any cline-neutral"> </span>
|
|
339
534
|
<span class="cline-any cline-yes">1x</span>
|
|
340
535
|
<span class="cline-any cline-yes">1x</span>
|
|
536
|
+
<span class="cline-any cline-yes">1x</span>
|
|
341
537
|
<span class="cline-any cline-neutral"> </span>
|
|
342
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import
|
|
538
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import debug from "debug";
|
|
539
|
+
import AnalyticsApi from "../../api/AnalyticsApi";
|
|
343
540
|
import WidgetApi from "../../api/WidgetApi";
|
|
344
541
|
import { ConfigOptions, DeclarativeConfigOptions } from "../../types";
|
|
345
542
|
import { decodeUserJwt } from "../../utils/decodeUserJwt";
|
|
346
543
|
import { _getAutoConfig } from "../../utils/utmUtils";
|
|
347
|
-
import {
|
|
544
|
+
import {
|
|
545
|
+
DEFAULT_DOMAIN,
|
|
546
|
+
DEFAULT_NPM_CDN,
|
|
547
|
+
validateLocale,
|
|
548
|
+
} from "../../utils/validate";
|
|
348
549
|
import EmbedWidget from "../EmbedWidget";
|
|
349
550
|
import PopupWidget from "../PopupWidget";
|
|
350
551
|
|
|
552
|
+
const _log = debug("sqh:DeclarativeWidget");
|
|
553
|
+
|
|
554
|
+
/**
|
|
555
|
+
* Abstract class for building web-components that render SaaSquatch widgets to the DOM.
|
|
556
|
+
* @abstract
|
|
557
|
+
* @example
|
|
558
|
+
* class TestWidgetElement extends DeclarativeWidget {}
|
|
559
|
+
* const testWidget = new TestWidgetElement()
|
|
560
|
+
* testWidget.widgetType = 'w/widget-type'
|
|
561
|
+
* testWidget.type = 'EMBED'
|
|
562
|
+
* testWidget.renderWidget()
|
|
563
|
+
*/
|
|
351
564
|
export default abstract class DeclarativeWidget extends HTMLElement {
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
565
|
+
/**
|
|
566
|
+
* Configuration overrides
|
|
567
|
+
* @default window.squatchConfig
|
|
568
|
+
*/
|
|
569
|
+
config: DeclarativeConfigOptions | undefined;
|
|
570
|
+
|
|
571
|
+
/**
|
|
572
|
+
* Signed JWT containing user information
|
|
573
|
+
* @default window.squatchToken
|
|
574
|
+
*/
|
|
575
|
+
token: string | undefined;
|
|
576
|
+
|
|
577
|
+
/**
|
|
578
|
+
* Tenant alias of SaaSquatch tenant
|
|
579
|
+
* @default window.squatchTenant
|
|
580
|
+
*/
|
|
581
|
+
tenant: string | undefined;
|
|
582
|
+
|
|
583
|
+
/**
|
|
584
|
+
* widgetType of widget to load
|
|
585
|
+
*/
|
|
355
586
|
widgetType: string | undefined;
|
|
356
587
|
|
|
588
|
+
/**
|
|
589
|
+
* Locale to render the widget in
|
|
590
|
+
*/
|
|
591
|
+
locale: string | undefined;
|
|
592
|
+
|
|
593
|
+
/**
|
|
594
|
+
* Instance of {@link WidgetApi}
|
|
595
|
+
*/
|
|
357
596
|
widgetApi: WidgetApi;
|
|
597
|
+
|
|
598
|
+
/**
|
|
599
|
+
* Instance of {@link AnalyticsApi}
|
|
600
|
+
*/
|
|
358
601
|
analyticsApi: AnalyticsApi;
|
|
359
602
|
|
|
360
|
-
|
|
603
|
+
/**
|
|
604
|
+
* Instance of {@link EmbedWidget} or {@link PopupWidget}
|
|
605
|
+
*/
|
|
361
606
|
widgetInstance: EmbedWidget | PopupWidget;
|
|
362
|
-
frame: HTMLIFrameElement;
|
|
363
607
|
|
|
608
|
+
/**
|
|
609
|
+
* Determines whether to render the widget as an embedding widget or popup widget.
|
|
610
|
+
*/
|
|
611
|
+
type: "EMBED" | "POPUP";
|
|
612
|
+
|
|
613
|
+
/**
|
|
614
|
+
* Container element to contain the widget iframe
|
|
615
|
+
* @default this
|
|
616
|
+
*/
|
|
364
617
|
container: string | HTMLElement | undefined | null;
|
|
365
618
|
element: HTMLElement | undefined;
|
|
366
619
|
|
|
@@ -376,104 +629,145 @@ export default abstract class DeclarativeWidget extends HTMLElement {
|
|
|
376
629
|
this.container = this;
|
|
377
630
|
}
|
|
378
631
|
|
|
379
|
-
private
|
|
380
|
-
<span class="cstat-no" title="statement not covered" >
|
|
632
|
+
private _setupApis(config?: ConfigOptions) {
|
|
633
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!this.tenant) <span class="cstat-no" title="statement not covered" >throw new Error("Requires tenantAlias");</span>
|
|
634
|
+
|
|
635
|
+
this.widgetApi = new WidgetApi({
|
|
381
636
|
tenantAlias: config?.tenantAlias || this.tenant,
|
|
382
|
-
domain: config?.domain || this.config
|
|
637
|
+
domain: config?.domain || this.config?.domain || DEFAULT_DOMAIN,
|
|
383
638
|
});
|
|
384
|
-
|
|
385
|
-
domain: config?.domain || this.config
|
|
639
|
+
this.analyticsApi = new AnalyticsApi({
|
|
640
|
+
domain: config?.domain || this.config?.domain || DEFAULT_DOMAIN,
|
|
386
641
|
});
|
|
387
642
|
}
|
|
388
643
|
|
|
389
|
-
|
|
390
|
-
const configs =
|
|
391
|
-
|
|
644
|
+
private async renderPasswordlessVariant() {
|
|
645
|
+
const configs = _getAutoConfig();
|
|
646
|
+
this._setupApis(configs?.squatchConfig);
|
|
392
647
|
|
|
393
|
-
|
|
648
|
+
return await this.widgetApi
|
|
394
649
|
.render({
|
|
395
650
|
engagementMedium: configs?.widgetConfig?.engagementMedium || this.type,
|
|
396
651
|
widgetType: configs?.widgetConfig?.widgetType || this.widgetType,
|
|
652
|
+
locale: configs?.widgetConfig?.locale || this.locale,
|
|
397
653
|
})
|
|
398
654
|
.then(<span class="fstat-no" title="function not covered" >(r</span>es) => <span class="cstat-no" title="statement not covered" >this._setWidget(res.template, { type: "passwordless" }))</span>
|
|
399
|
-
.catch(this.
|
|
655
|
+
.catch(this.setErrorWidget);
|
|
400
656
|
}
|
|
401
657
|
|
|
402
|
-
<span class="fstat-no" title="function not covered" >
|
|
403
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.widgetType) <span class="cstat-no" title="statement not covered" >throw new Error("Widget must be specified");</span></span>
|
|
658
|
+
private <span class="fstat-no" title="function not covered" >async </span>renderUserUpsertVariant() {
|
|
404
659
|
<span class="cstat-no" title="statement not covered" > this._setupApis();</span>
|
|
405
660
|
|
|
406
|
-
const userObj = <span class="cstat-no" title="statement not covered" >decodeUserJwt(this.token);</span>
|
|
661
|
+
const userObj = <span class="cstat-no" title="statement not covered" >decodeUserJwt(this.token!);</span>
|
|
407
662
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!userObj) <span class="cstat-no" title="statement not covered" >throw new Error("Could not load user information from jwt");</span></span>
|
|
408
663
|
|
|
409
664
|
const widgetInstance = <span class="cstat-no" title="statement not covered" >await this.widgetApi</span>
|
|
410
665
|
.upsertUser({
|
|
411
666
|
user: userObj,
|
|
667
|
+
locale: this.locale,
|
|
412
668
|
engagementMedium: this.type,
|
|
413
669
|
widgetType: this.widgetType,
|
|
414
670
|
jwt: this.token,
|
|
415
671
|
})
|
|
416
672
|
.then(<span class="fstat-no" title="function not covered" >(r</span>es) => <span class="cstat-no" title="statement not covered" >this._setWidget(res.template, { type: "upsert" }))</span>
|
|
417
|
-
.catch(this.
|
|
673
|
+
.catch(this.setErrorWidget);
|
|
418
674
|
|
|
419
675
|
<span class="cstat-no" title="statement not covered" > return widgetInstance;</span>
|
|
420
676
|
}
|
|
421
677
|
|
|
422
|
-
_setWidget = <span class="fstat-no" title="function not covered" >(
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
<span class="cstat-no" title="statement not covered" >
|
|
678
|
+
private _setWidget = <span class="fstat-no" title="function not covered" >(</span>
|
|
679
|
+
template: any,
|
|
680
|
+
config: { type: "upsert" | "passwordless" }
|
|
681
|
+
) => {
|
|
682
|
+
const params = <span class="cstat-no" title="statement not covered" >{</span>
|
|
427
683
|
api: this.widgetApi,
|
|
428
684
|
content: template,
|
|
429
685
|
context: { type: config.type, engagementMedium: this.type },
|
|
430
|
-
type: this.widgetType
|
|
431
|
-
domain: this.config
|
|
686
|
+
type: this.widgetType!,
|
|
687
|
+
domain: this.config?.domain || DEFAULT_DOMAIN,
|
|
432
688
|
npmCdn: DEFAULT_NPM_CDN,
|
|
433
689
|
container: this.container || this,
|
|
434
|
-
}
|
|
690
|
+
};
|
|
691
|
+
<span class="cstat-no" title="statement not covered" > if (this.type === "EMBED") {</span>
|
|
692
|
+
<span class="cstat-no" title="statement not covered" > return new EmbedWidget(params);</span>
|
|
693
|
+
} else {
|
|
694
|
+
<span class="cstat-no" title="statement not covered" > return new PopupWidget(params, this.firstChild ? null : undefined);</span>
|
|
695
|
+
}
|
|
435
696
|
};
|
|
436
697
|
|
|
437
|
-
|
|
438
|
-
|
|
698
|
+
/**
|
|
699
|
+
* Fetches widget content from SaaSquatch and builds a Widget instance to support rendering the widget in the DOM.
|
|
700
|
+
* @returns Instance of either {@link EmbedWidget} or {@link PopupWidget} depending on `this.type`
|
|
701
|
+
* @throws Throws an Error if `widgetType` is undefined
|
|
702
|
+
*/
|
|
703
|
+
async getWidgetInstance() {
|
|
704
|
+
let widgetInstance: EmbedWidget | PopupWidget;
|
|
705
|
+
this.widgetType = this.getAttribute("widget") || <span class="branch-1 cbranch-no" title="branch not covered" >undefined;</span>
|
|
706
|
+
this.locale = this.getAttribute("locale") || this.locale;
|
|
439
707
|
|
|
440
|
-
|
|
708
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!this.widgetType) <span class="cstat-no" title="statement not covered" >throw new Error("No widget has been specified");</span>
|
|
441
709
|
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
} else {
|
|
445
|
-
<span class="cstat-no" title="statement not covered" >
|
|
710
|
+
if (!this.token) {
|
|
711
|
+
widgetInstance = await this.renderPasswordlessVariant();
|
|
712
|
+
} else <span class="missing-if-branch" title="else path not taken" >E</span>{
|
|
713
|
+
<span class="cstat-no" title="statement not covered" > widgetInstance = await this.renderUserUpsertVariant();</span>
|
|
446
714
|
}
|
|
447
715
|
|
|
448
|
-
|
|
716
|
+
console.log(widgetInstance);
|
|
717
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!widgetInstance) <span class="cstat-no" title="statement not covered" >throw new Error("Could not create widget.");</span>
|
|
449
718
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
<span class="cstat-no" title="statement not covered" > this.widgetInstance.load(this.frame);</span>
|
|
719
|
+
this.widgetInstance = widgetInstance;
|
|
720
|
+
return widgetInstance;
|
|
453
721
|
}
|
|
454
722
|
|
|
455
|
-
|
|
456
|
-
|
|
723
|
+
/**
|
|
724
|
+
* Calls {@link getWidgetInstance} to build the Widget instance and loads the widget iframe into the DOM.
|
|
725
|
+
*/
|
|
726
|
+
<span class="fstat-no" title="function not covered" > async </span>renderWidget() {
|
|
727
|
+
<span class="cstat-no" title="statement not covered" > await this.getWidgetInstance();</span>
|
|
728
|
+
<span class="cstat-no" title="statement not covered" > await this.widgetInstance.load();</span>
|
|
729
|
+
}
|
|
457
730
|
|
|
458
|
-
|
|
731
|
+
/**
|
|
732
|
+
* Builds a Widget instance for the default error widget.
|
|
733
|
+
* @returns Instance of either {@link EmbedWidget} or {@link PopupWidget} depending on `this.type`
|
|
734
|
+
*/
|
|
735
|
+
setErrorWidget = (e: Error) => {
|
|
736
|
+
const params = {
|
|
459
737
|
api: this.widgetApi,
|
|
460
738
|
content: "error",
|
|
461
|
-
context: { type: "error" },
|
|
739
|
+
context: { type: "error" as const },
|
|
462
740
|
type: "ERROR_WIDGET",
|
|
463
|
-
domain: this.config
|
|
741
|
+
domain: this.config?.domain || DEFAULT_DOMAIN,
|
|
464
742
|
npmCdn: DEFAULT_NPM_CDN,
|
|
465
|
-
container: this.container || this
|
|
466
|
-
}
|
|
743
|
+
container: this.container || <span class="branch-1 cbranch-no" title="branch not covered" >this,</span>
|
|
744
|
+
};
|
|
745
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (this.type === "EMBED") {
|
|
746
|
+
<span class="cstat-no" title="statement not covered" > return new EmbedWidget(params);</span>
|
|
747
|
+
} else {
|
|
748
|
+
return new PopupWidget(params, this.firstChild ? <span class="branch-0 cbranch-no" title="branch not covered" >null </span>: undefined);
|
|
749
|
+
}
|
|
467
750
|
};
|
|
468
751
|
|
|
752
|
+
/**
|
|
753
|
+
* Calls `open` method of `widgetInstance`
|
|
754
|
+
* @throws Throws an Error if called before the widget has loaded
|
|
755
|
+
*/
|
|
469
756
|
<span class="fstat-no" title="function not covered" > open(</span>) {
|
|
470
|
-
<span class="cstat-no" title="statement not covered" > this.widgetInstance
|
|
757
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.widgetInstance) <span class="cstat-no" title="statement not covered" >throw new Error("Widget has not loaded yet");</span></span>
|
|
758
|
+
<span class="cstat-no" title="statement not covered" > this.widgetInstance.open();</span>
|
|
471
759
|
}
|
|
472
760
|
|
|
761
|
+
/**
|
|
762
|
+
* Calls `close` method of `widgetInstance`
|
|
763
|
+
* @throws Throws an Error if called before the widget has loaded
|
|
764
|
+
*/
|
|
473
765
|
<span class="fstat-no" title="function not covered" > close(</span>) {
|
|
474
|
-
<span class="cstat-no" title="statement not covered" > this.widgetInstance
|
|
766
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.widgetInstance) <span class="cstat-no" title="statement not covered" >throw new Error("Widget has not loaded yet");</span></span>
|
|
767
|
+
<span class="cstat-no" title="statement not covered" > this.widgetInstance.close();</span>
|
|
475
768
|
}
|
|
476
769
|
|
|
770
|
+
reload = this.renderWidget;
|
|
477
771
|
show = this.open;
|
|
478
772
|
hide = this.close;
|
|
479
773
|
}
|
|
@@ -484,7 +778,7 @@ export default abstract class DeclarativeWidget extends HTMLElement {
|
|
|
484
778
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
485
779
|
Code coverage generated by
|
|
486
780
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
487
|
-
at 2023-07-
|
|
781
|
+
at 2023-07-21T18:05:37.786Z
|
|
488
782
|
</div>
|
|
489
783
|
<script src="../../prettify.js"></script>
|
|
490
784
|
<script>
|