@schukai/monster 3.51.5 → 3.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +15 -12
  3. package/example/components/form/button.mjs +10 -0
  4. package/example/components/form/select.mjs +25 -0
  5. package/example/components/form/tree-select.mjs +27 -0
  6. package/example/components/host/host.mjs +0 -0
  7. package/example/components/notify/message.mjs +4 -0
  8. package/example/components/notify/notify.mjs +4 -0
  9. package/example/components/state/log.mjs +0 -0
  10. package/example/components/state/state.mjs +0 -0
  11. package/package.json +6 -2
  12. package/source/components/constants.mjs +132 -0
  13. package/source/components/datatable/columnbar.mjs +310 -0
  14. package/source/components/datatable/constants.mjs +121 -0
  15. package/source/components/datatable/dataset.mjs +219 -0
  16. package/source/components/datatable/datasource/dom.mjs +186 -0
  17. package/source/components/datatable/datasource/namespace.mjs +13 -0
  18. package/source/components/datatable/datasource/rest.mjs +400 -0
  19. package/source/components/datatable/datasource.mjs +102 -0
  20. package/source/components/datatable/datatable/header.mjs +268 -0
  21. package/source/components/datatable/datatable/namespace.mjs +13 -0
  22. package/source/components/datatable/datatable.mjs +789 -0
  23. package/source/components/datatable/embedded-pagination.mjs +113 -0
  24. package/source/components/datatable/filter/abstract-base.mjs +31 -0
  25. package/source/components/datatable/filter/date-range.mjs +1041 -0
  26. package/source/components/datatable/filter/input.mjs +175 -0
  27. package/source/components/datatable/filter/namespace.mjs +13 -0
  28. package/source/components/datatable/filter/range.mjs +671 -0
  29. package/source/components/datatable/filter/select.mjs +65 -0
  30. package/source/components/datatable/filter/settings.mjs +116 -0
  31. package/source/components/datatable/filter-button.mjs +98 -0
  32. package/source/components/datatable/filter.mjs +929 -0
  33. package/source/components/datatable/namespace.mjs +11 -0
  34. package/source/components/datatable/pagination.mjs +456 -0
  35. package/source/components/datatable/style/column-bar.pcss +123 -0
  36. package/source/components/datatable/style/dataset.pcss +13 -0
  37. package/source/components/datatable/style/datasource.pcss +16 -0
  38. package/source/components/datatable/style/datatable.pcss +239 -0
  39. package/source/components/datatable/style/embedded-pagination.pcss +101 -0
  40. package/source/components/datatable/style/filter-button.pcss +22 -0
  41. package/source/components/datatable/style/filter-controls-defaults.pcss +46 -0
  42. package/source/components/datatable/style/filter-date-range.pcss +9 -0
  43. package/source/components/datatable/style/filter-range.pcss +5 -0
  44. package/source/components/datatable/style/filter.pcss +156 -0
  45. package/source/components/datatable/style/pagination.pcss +59 -0
  46. package/source/components/datatable/style/select-filter.pcss +27 -0
  47. package/source/components/datatable/stylesheet/column-bar.mjs +33 -0
  48. package/source/components/datatable/stylesheet/dataset.mjs +33 -0
  49. package/source/components/datatable/stylesheet/datasource.mjs +33 -0
  50. package/source/components/datatable/stylesheet/datatable.mjs +33 -0
  51. package/source/components/datatable/stylesheet/embedded-pagination.mjs +33 -0
  52. package/source/components/datatable/stylesheet/filter-button.mjs +33 -0
  53. package/source/components/datatable/stylesheet/filter-controls-defaults.mjs +33 -0
  54. package/source/components/datatable/stylesheet/filter-date-range.mjs +33 -0
  55. package/source/components/datatable/stylesheet/filter-range.mjs +33 -0
  56. package/source/components/datatable/stylesheet/filter.mjs +33 -0
  57. package/source/components/datatable/stylesheet/namespace.mjs +13 -0
  58. package/source/components/datatable/stylesheet/pagination.mjs +33 -0
  59. package/source/components/datatable/stylesheet/select-filter.mjs +33 -0
  60. package/source/components/datatable/util.mjs +60 -0
  61. package/source/components/form/action-button.mjs +262 -0
  62. package/source/components/form/api-button.mjs +515 -0
  63. package/source/components/form/button-bar.mjs +739 -0
  64. package/source/components/form/button.mjs +350 -0
  65. package/source/components/form/confirm-button.mjs +330 -0
  66. package/source/components/form/constants.mjs +111 -0
  67. package/source/components/form/context-help.mjs +123 -0
  68. package/source/components/form/events.mjs +84 -0
  69. package/source/components/form/form.mjs +601 -0
  70. package/source/components/form/message-state-button.mjs +396 -0
  71. package/source/components/form/namespace.mjs +13 -0
  72. package/source/components/form/popper-button.mjs +435 -0
  73. package/source/components/form/popper.mjs +487 -0
  74. package/source/components/form/reload.mjs +360 -0
  75. package/source/components/form/select.mjs +2314 -0
  76. package/source/components/form/shadow-reload.mjs +137 -0
  77. package/source/components/form/state-button.mjs +182 -0
  78. package/source/components/form/style/action-button.pcss +41 -0
  79. package/source/components/form/style/api-button.pcss +0 -0
  80. package/source/components/form/style/button-bar.pcss +51 -0
  81. package/source/components/form/style/button.pcss +8 -0
  82. package/source/components/form/style/confirm-button.pcss +17 -0
  83. package/source/components/form/style/context-help.pcss +16 -0
  84. package/source/components/form/style/form.pcss +10 -0
  85. package/source/components/form/style/message-state-button.pcss +10 -0
  86. package/source/components/form/style/popper-button.pcss +16 -0
  87. package/source/components/form/style/popper.pcss +8 -0
  88. package/source/components/form/style/select.pcss +265 -0
  89. package/source/components/form/style/state-button.pcss +116 -0
  90. package/source/components/form/style/tabs.pcss +170 -0
  91. package/source/components/form/style/tree-select.pcss +81 -0
  92. package/source/components/form/stylesheet/action-button.mjs +33 -0
  93. package/source/components/form/stylesheet/api-button.mjs +33 -0
  94. package/source/components/form/stylesheet/button-bar.mjs +33 -0
  95. package/source/components/form/stylesheet/button.mjs +33 -0
  96. package/source/components/form/stylesheet/confirm-button.mjs +33 -0
  97. package/source/components/form/stylesheet/context-help.mjs +33 -0
  98. package/source/components/form/stylesheet/form.mjs +33 -0
  99. package/source/components/form/stylesheet/message-state-button.mjs +33 -0
  100. package/source/components/form/stylesheet/namespace.mjs +13 -0
  101. package/source/components/form/stylesheet/popper-button.mjs +33 -0
  102. package/source/components/form/stylesheet/popper.mjs +33 -0
  103. package/source/components/form/stylesheet/select.mjs +33 -0
  104. package/source/components/form/stylesheet/state-button.mjs +33 -0
  105. package/source/components/form/stylesheet/tabs.mjs +33 -0
  106. package/source/components/form/stylesheet/tree-select.mjs +33 -0
  107. package/source/components/form/tabs.mjs +1011 -0
  108. package/source/components/form/template.mjs +373 -0
  109. package/source/components/form/tree-select.mjs +527 -0
  110. package/source/components/form/types/namespace.mjs +13 -0
  111. package/source/components/form/types/state.mjs +93 -0
  112. package/source/components/form/util/fetch.mjs +133 -0
  113. package/source/components/form/util/floating-ui.mjs +245 -0
  114. package/source/components/form/util/namespace.mjs +13 -0
  115. package/source/components/form/util/popper.mjs +49 -0
  116. package/source/components/host/call-button.mjs +236 -0
  117. package/source/components/host/collapse.mjs +526 -0
  118. package/source/components/host/config-manager.mjs +304 -0
  119. package/source/components/host/constants.mjs +18 -0
  120. package/source/components/host/details.mjs +268 -0
  121. package/source/components/host/events.mjs +131 -0
  122. package/source/components/host/host.mjs +420 -0
  123. package/source/components/host/namespace.mjs +13 -0
  124. package/source/components/host/overlay.mjs +339 -0
  125. package/source/components/host/style/call-button.pcss +36 -0
  126. package/source/components/host/style/collapse.pcss +67 -0
  127. package/source/components/host/style/config-manager.pcss +5 -0
  128. package/source/components/host/style/details.pcss +68 -0
  129. package/source/components/host/style/host.pcss +43 -0
  130. package/source/components/host/style/overlay.pcss +73 -0
  131. package/source/components/host/style/toggle-button.pcss +36 -0
  132. package/source/components/host/style/viewer.pcss +13 -0
  133. package/source/components/host/stylesheet/call-button.mjs +33 -0
  134. package/source/components/host/stylesheet/collapse.mjs +33 -0
  135. package/source/components/host/stylesheet/config-manager.mjs +33 -0
  136. package/source/components/host/stylesheet/details.mjs +33 -0
  137. package/source/components/host/stylesheet/host.mjs +33 -0
  138. package/source/components/host/stylesheet/namespace.mjs +13 -0
  139. package/source/components/host/stylesheet/overlay.mjs +33 -0
  140. package/source/components/host/stylesheet/toggle-button.mjs +33 -0
  141. package/source/components/host/stylesheet/viewer.mjs +33 -0
  142. package/source/components/host/toggle-button.mjs +88 -0
  143. package/source/components/host/util.mjs +23 -0
  144. package/source/components/host/viewer.mjs +309 -0
  145. package/source/components/namespace.mjs +14 -0
  146. package/source/components/notify/constants.mjs +15 -0
  147. package/source/components/notify/events.mjs +15 -0
  148. package/source/components/notify/message.mjs +374 -0
  149. package/source/components/notify/namespace.mjs +15 -0
  150. package/source/components/notify/notify.mjs +236 -0
  151. package/source/components/notify/style/message.pcss +57 -0
  152. package/source/components/notify/style/notify.pcss +118 -0
  153. package/source/components/notify/stylesheet/message.mjs +33 -0
  154. package/source/components/notify/stylesheet/namespace.mjs +15 -0
  155. package/source/components/notify/stylesheet/notify.mjs +33 -0
  156. package/source/components/state/log/entry.mjs +126 -0
  157. package/source/components/state/log/namespace.mjs +13 -0
  158. package/source/components/state/log.mjs +275 -0
  159. package/source/components/state/namespace.mjs +13 -0
  160. package/source/components/state/state.mjs +131 -0
  161. package/source/components/state/style/log.pcss +111 -0
  162. package/source/components/state/style/state.pcss +113 -0
  163. package/source/components/state/stylesheet/log.mjs +33 -0
  164. package/source/components/state/stylesheet/state.mjs +33 -0
  165. package/source/components/style/badge.pcss +92 -0
  166. package/source/components/style/border.pcss +77 -0
  167. package/source/components/style/button.pcss +105 -0
  168. package/source/components/style/card.pcss +108 -0
  169. package/source/components/style/color.pcss +257 -0
  170. package/source/components/style/common.pcss +103 -0
  171. package/source/components/style/control.pcss +11 -0
  172. package/source/components/style/data-grid.pcss +43 -0
  173. package/source/components/style/display.pcss +42 -0
  174. package/source/components/style/floating-ui.pcss +33 -0
  175. package/source/components/style/form.pcss +5 -0
  176. package/source/components/style/host.pcss +15 -0
  177. package/source/components/style/link.pcss +63 -0
  178. package/source/components/style/mixin/badge.pcss +18 -0
  179. package/source/components/style/mixin/button.pcss +54 -0
  180. package/source/components/style/mixin/form.pcss +247 -0
  181. package/source/components/style/mixin/hover.pcss +8 -0
  182. package/source/components/style/mixin/media.pcss +107 -0
  183. package/source/components/style/mixin/property.pcss +288 -0
  184. package/source/components/style/mixin/skeleton.pcss +26 -0
  185. package/source/components/style/mixin/spinner.pcss +24 -0
  186. package/source/components/style/mixin/typography.pcss +52 -0
  187. package/source/components/style/normalize.pcss +14 -0
  188. package/source/components/style/popper.pcss +78 -0
  189. package/source/components/style/property.pcss +17 -0
  190. package/source/components/style/ripple.pcss +14 -0
  191. package/source/components/style/skeleton.pcss +28 -0
  192. package/source/components/style/space.pcss +47 -0
  193. package/source/components/style/spinner.pcss +6 -0
  194. package/source/components/style/table.pcss +46 -0
  195. package/source/components/style/theme.pcss +119 -0
  196. package/source/components/style/typography.pcss +131 -0
  197. package/source/components/stylesheet/badge.mjs +33 -0
  198. package/source/components/stylesheet/border.mjs +33 -0
  199. package/source/components/stylesheet/button.mjs +33 -0
  200. package/source/components/stylesheet/card.mjs +33 -0
  201. package/source/components/stylesheet/color.mjs +33 -0
  202. package/source/components/stylesheet/common.mjs +33 -0
  203. package/source/components/stylesheet/control.mjs +33 -0
  204. package/source/components/stylesheet/data-grid.mjs +33 -0
  205. package/source/components/stylesheet/display.mjs +33 -0
  206. package/source/components/stylesheet/floating-ui.mjs +33 -0
  207. package/source/components/stylesheet/form.mjs +33 -0
  208. package/source/components/stylesheet/host.mjs +33 -0
  209. package/source/components/stylesheet/link.mjs +33 -0
  210. package/source/components/stylesheet/namespace.mjs +13 -0
  211. package/source/components/stylesheet/normalize.mjs +33 -0
  212. package/source/components/stylesheet/popper.mjs +33 -0
  213. package/source/components/stylesheet/property.mjs +33 -0
  214. package/source/components/stylesheet/ripple.mjs +33 -0
  215. package/source/components/stylesheet/skeleton.mjs +33 -0
  216. package/source/components/stylesheet/space.mjs +33 -0
  217. package/source/components/stylesheet/spinner.mjs +33 -0
  218. package/source/components/stylesheet/table.mjs +33 -0
  219. package/source/components/stylesheet/theme.mjs +33 -0
  220. package/source/components/stylesheet/tree-menu.mjs +33 -0
  221. package/source/components/stylesheet/typography.mjs +33 -0
  222. package/source/components/tree-menu/namespace.mjs +13 -0
  223. package/source/components/tree-menu/style/tree-menu.pcss +107 -0
  224. package/source/components/tree-menu/stylesheet/namespace.mjs +13 -0
  225. package/source/components/tree-menu/stylesheet/tree-menu.mjs +33 -0
  226. package/source/components/tree-menu/tree-menu.mjs +660 -0
  227. package/source/constraints/abstract.mjs +17 -24
  228. package/source/constraints/abstractoperator.mjs +27 -22
  229. package/source/constraints/andoperator.mjs +20 -17
  230. package/source/constraints/invalid.mjs +17 -17
  231. package/source/constraints/isarray.mjs +20 -20
  232. package/source/constraints/isobject.mjs +20 -20
  233. package/source/constraints/oroperator.mjs +45 -45
  234. package/source/constraints/valid.mjs +17 -17
  235. package/source/data/buildmap.mjs +108 -103
  236. package/source/data/buildtree.mjs +59 -57
  237. package/source/data/datasource/dom.mjs +80 -84
  238. package/source/data/datasource/namespace.mjs +1 -1
  239. package/source/data/datasource/server/restapi/data-fetch-error.mjs +27 -25
  240. package/source/data/datasource/server/restapi/writeerror.mjs +34 -32
  241. package/source/data/datasource/server/restapi.mjs +176 -177
  242. package/source/data/datasource/server/webconnect.mjs +150 -156
  243. package/source/data/datasource/server.mjs +58 -59
  244. package/source/data/datasource/storage/localstorage.mjs +25 -24
  245. package/source/data/datasource/storage/sessionstorage.mjs +28 -25
  246. package/source/data/datasource/storage.mjs +74 -73
  247. package/source/data/datasource.mjs +176 -167
  248. package/source/data/diff.mjs +98 -97
  249. package/source/data/extend.mjs +42 -42
  250. package/source/data/pathfinder.mjs +301 -288
  251. package/source/data/pipe.mjs +36 -36
  252. package/source/data/transformer.mjs +742 -726
  253. package/source/dom/assembler.mjs +44 -44
  254. package/source/dom/attributes.mjs +142 -122
  255. package/source/dom/constants.mjs +62 -58
  256. package/source/dom/customcontrol.mjs +299 -299
  257. package/source/dom/customelement.mjs +843 -806
  258. package/source/dom/dimension.mjs +56 -46
  259. package/source/dom/events.mjs +74 -69
  260. package/source/dom/focusmanager.mjs +175 -175
  261. package/source/dom/locale.mjs +28 -28
  262. package/source/dom/ready.mjs +13 -13
  263. package/source/dom/resource/data.mjs +117 -111
  264. package/source/dom/resource/link/stylesheet.mjs +16 -16
  265. package/source/dom/resource/link.mjs +94 -96
  266. package/source/dom/resource/script.mjs +72 -74
  267. package/source/dom/resource.mjs +174 -172
  268. package/source/dom/resourcemanager.mjs +152 -156
  269. package/source/dom/slotted.mjs +78 -80
  270. package/source/dom/template.mjs +126 -112
  271. package/source/dom/theme.mjs +35 -35
  272. package/source/dom/updater.mjs +673 -651
  273. package/source/dom/util/extract-keys.mjs +34 -22
  274. package/source/dom/util/init-options-from-attributes.mjs +46 -38
  275. package/source/dom/util/namespace.mjs +13 -0
  276. package/source/dom/util/set-option-from-attribute.mjs +35 -29
  277. package/source/dom/util.mjs +112 -81
  278. package/source/dom/worker/factory.mjs +83 -83
  279. package/source/i18n/formatter.mjs +75 -73
  280. package/source/i18n/locale.mjs +146 -144
  281. package/source/i18n/provider.mjs +70 -64
  282. package/source/i18n/providers/embed.mjs +136 -127
  283. package/source/i18n/providers/fetch.mjs +84 -76
  284. package/source/i18n/translations.mjs +205 -195
  285. package/source/logging/handler/console.mjs +36 -36
  286. package/source/logging/handler.mjs +140 -140
  287. package/source/logging/logentry.mjs +25 -25
  288. package/source/logging/logger.mjs +177 -175
  289. package/source/math/random.mjs +63 -59
  290. package/source/monster.mjs +223 -103
  291. package/source/net/webconnect/message.mjs +31 -31
  292. package/source/net/webconnect.mjs +278 -271
  293. package/source/text/bracketed-key-value-hash.mjs +182 -179
  294. package/source/text/formatter.mjs +235 -210
  295. package/source/text/generate-range-comparison-expression.mjs +56 -34
  296. package/source/text/namespace.mjs +1 -1
  297. package/source/types/base.mjs +69 -61
  298. package/source/types/basewithoptions.mjs +46 -46
  299. package/source/types/binary.mjs +20 -20
  300. package/source/types/dataurl.mjs +96 -90
  301. package/source/types/global.mjs +45 -39
  302. package/source/types/id.mjs +25 -25
  303. package/source/types/internal.mjs +115 -114
  304. package/source/types/is.mjs +56 -40
  305. package/source/types/mediatype.mjs +119 -119
  306. package/source/types/namespace.mjs +1 -1
  307. package/source/types/node.mjs +160 -150
  308. package/source/types/nodelist.mjs +94 -96
  309. package/source/types/noderecursiveiterator.mjs +50 -50
  310. package/source/types/observablequeue.mjs +73 -73
  311. package/source/types/observer.mjs +104 -104
  312. package/source/types/observerlist.mjs +66 -66
  313. package/source/types/proxyobserver.mjs +210 -210
  314. package/source/types/queue.mjs +63 -63
  315. package/source/types/randomid.mjs +13 -13
  316. package/source/types/regex.mjs +3 -1
  317. package/source/types/stack.mjs +64 -64
  318. package/source/types/tokenlist.mjs +206 -205
  319. package/source/types/typeof.mjs +12 -10
  320. package/source/types/uniquequeue.mjs +48 -48
  321. package/source/types/uuid.mjs +32 -32
  322. package/source/types/validate.mjs +67 -67
  323. package/source/types/version.mjs +115 -105
  324. package/source/util/clone.mjs +103 -91
  325. package/source/util/comparator.mjs +97 -97
  326. package/source/util/deadmansswitch.mjs +40 -44
  327. package/source/util/freeze.mjs +10 -9
  328. package/source/util/namespace.mjs +1 -1
  329. package/source/util/processing.mjs +104 -105
  330. package/source/util/runtime.mjs +56 -44
  331. package/source/util/trimspaces.mjs +24 -24
  332. package/test/cases/components/form/button.mjs +122 -0
  333. package/test/cases/components/form/confirm-button.mjs +127 -0
  334. package/test/cases/components/form/form.mjs +317 -0
  335. package/test/cases/components/form/reload.mjs +188 -0
  336. package/test/cases/components/form/select.mjs +229 -0
  337. package/test/cases/components/form/state-button.mjs +130 -0
  338. package/test/cases/components/form/tabs.mjs +98 -0
  339. package/test/cases/components/form/template.mjs +189 -0
  340. package/test/cases/components/form/tree-select.mjs +216 -0
  341. package/test/cases/components/host/details.mjs +68 -0
  342. package/test/cases/components/host/host.mjs +70 -0
  343. package/test/cases/components/host/overlay.mjs +60 -0
  344. package/test/cases/components/host/util.mjs +79 -0
  345. package/test/cases/components/notify/message.mjs +39 -0
  346. package/test/cases/components/notify/notify.mjs +89 -0
  347. package/test/cases/dom/customcontrol.mjs +5 -4
  348. package/test/cases/math/random.mjs +0 -1
  349. package/test/cases/monster.mjs +1 -1
  350. package/test/cases/net/webconnect/message.mjs +0 -1
  351. package/test/cases/types/node.mjs +1 -1
  352. package/test/util/chai-dom.mjs +2 -2
  353. package/test/util/intersection-mock.mjs +69 -0
  354. package/test/util/jsdom.mjs +41 -25
  355. package/test/util/localstorage.mjs +1 -0
  356. package/test/util/resize-observer.mjs +29 -0
  357. package/test/util/websocket.mjs +4 -1
  358. package/test/web/import.js +16 -1
  359. package/test/web/test.html +28 -5
  360. package/test/web/tests.js +30398 -17879
@@ -15,18 +15,18 @@ export { WebConnect };
15
15
 
16
16
  /**
17
17
  * @private
18
- * @type {Symbol}
18
+ * @type {symbol}
19
19
  */
20
20
  const receiveQueueSymbol = Symbol("receiveQueue");
21
21
  /**
22
22
  * @private
23
- * @type {Symbol}
23
+ * @type {symbol}
24
24
  */
25
25
  const sendQueueSymbol = Symbol("sendQueue");
26
26
 
27
27
  /**
28
28
  * @private
29
- * @type {Symbol}
29
+ * @type {symbol}
30
30
  *
31
31
  * hint: this name is used in the tests. if you want to change it, please change it in the tests as well.
32
32
  */
@@ -41,22 +41,22 @@ const manualCloseSymbol = Symbol("manualClose");
41
41
  /**
42
42
  * @private
43
43
  * @see https://www.rfc-editor.org/rfc/rfc6455.html#section-7.4.1
44
- * @type {{"1000": string, "1011": string, "1010": string, "1008": string, "1007": string, "1006": string, "1005": string, "1004": string, "1015": string, "1003": string, "1002": string, "1001": string, "1009": string}}
44
+ * @type {Object}
45
45
  */
46
46
  const connectionStatusCode = {
47
- 1000: "Normal closure",
48
- 1001: "Going away",
49
- 1002: "Protocol error",
50
- 1003: "Unsupported data",
51
- 1004: "Reserved",
52
- 1005: "No status code",
53
- 1006: "Connection closed abnormally",
54
- 1007: "Invalid frame payload data",
55
- 1008: "Policy violation",
56
- 1009: "Message too big",
57
- 1010: "Mandatory extension",
58
- 1011: "Internal server error",
59
- 1015: "TLS handshake",
47
+ 1000: "Normal closure",
48
+ 1001: "Going away",
49
+ 1002: "Protocol error",
50
+ 1003: "Unsupported data",
51
+ 1004: "Reserved",
52
+ 1005: "No status code",
53
+ 1006: "Connection closed abnormally",
54
+ 1007: "Invalid frame payload data",
55
+ 1008: "Policy violation",
56
+ 1009: "Message too big",
57
+ 1010: "Mandatory extension",
58
+ 1011: "Internal server error",
59
+ 1015: "TLS handshake",
60
60
  };
61
61
 
62
62
  /**
@@ -65,89 +65,100 @@ const connectionStatusCode = {
65
65
  * @throws {Error} No url defined for websocket datasource.
66
66
  */
67
67
  function connectServer(resolve, reject) {
68
- const self = this;
69
-
70
- const url = self.getOption("url");
71
- if (!url) {
72
- reject("No url defined for webconnect.");
73
- return;
74
- }
75
-
76
- let promiseAllredyResolved = false;
77
-
78
- let connectionTimeout = self.getOption("connection.timeout");
79
- if (!isInteger(connectionTimeout) || connectionTimeout < 100) {
80
- connectionTimeout = 5000;
81
- }
82
-
83
- setTimeout(() => {
84
- if (promiseAllredyResolved) {
85
- return;
86
- }
87
- reject(new Error("Connection timeout"));
88
- }, connectionTimeout);
89
-
90
- let reconnectTimeout = self.getOption("connection.reconnect.timeout");
91
- if (!isInteger(reconnectTimeout) || reconnectTimeout < 1000) reconnectTimeout = 1000;
92
- let reconnectAttempts = self.getOption("connection.reconnect.attempts");
93
- if (!isInteger(reconnectAttempts) || reconnectAttempts < 1) reconnectAttempts = 1;
94
- let reconnectEnabled = self.getOption("connection.reconnect.enabled");
95
- if (reconnectEnabled !== true) reconnectEnabled = false;
96
-
97
- self[manualCloseSymbol] = false;
98
- self[connectionSymbol].reconnectCounter++;
99
-
100
- if (self[connectionSymbol].socket && self[connectionSymbol].socket.readyState < 2) {
101
- self[connectionSymbol].socket.close();
102
- }
103
- self[connectionSymbol].socket = null;
104
- self[connectionSymbol].socket = new WebSocket(url);
105
-
106
- self[connectionSymbol].socket.onmessage = function (event) {
107
- if (event.data instanceof Blob) {
108
- const reader = new FileReader();
109
- reader.addEventListener("loadend", function () {
110
- self[receiveQueueSymbol].add(new Message(reader.result));
111
- });
112
- reader.readAsText(new Message(event.data));
113
- } else {
114
- self[receiveQueueSymbol].add(Message.fromJSON(event.data));
115
- }
116
- };
117
-
118
- self[connectionSymbol].socket.onopen = function () {
119
- self[connectionSymbol].reconnectCounter = 0;
120
- if (typeof resolve === "function" && !promiseAllredyResolved) {
121
- promiseAllredyResolved = true;
122
- resolve();
123
- }
124
- };
125
-
126
- self[connectionSymbol].socket.close = function (event) {
127
- if (self[manualCloseSymbol]) {
128
- self[manualCloseSymbol] = false;
129
- return;
130
- }
131
-
132
- if (reconnectEnabled && this[connectionSymbol].reconnectCounter < reconnectAttempts) {
133
- setTimeout(() => {
134
- self.connect();
135
- }, reconnectTimeout * this[connectionSymbol].reconnectCounter);
136
- }
137
- };
138
-
139
- self[connectionSymbol].socket.onerror = (error) => {
140
- if (reconnectEnabled && self[connectionSymbol].reconnectCounter < reconnectAttempts) {
141
- setTimeout(() => {
142
- self.connect();
143
- }, reconnectTimeout * this[connectionSymbol].reconnectCounter);
144
- } else {
145
- if (typeof reject === "function" && !promiseAllredyResolved) {
146
- promiseAllredyResolved = true;
147
- reject(error);
148
- }
149
- }
150
- };
68
+ const self = this;
69
+
70
+ const url = self.getOption("url");
71
+ if (!url) {
72
+ reject("No url defined for webconnect.");
73
+ return;
74
+ }
75
+
76
+ let promiseAllredyResolved = false;
77
+
78
+ let connectionTimeout = self.getOption("connection.timeout");
79
+ if (!isInteger(connectionTimeout) || connectionTimeout < 100) {
80
+ connectionTimeout = 5000;
81
+ }
82
+
83
+ setTimeout(() => {
84
+ if (promiseAllredyResolved) {
85
+ return;
86
+ }
87
+ reject(new Error("Connection timeout"));
88
+ }, connectionTimeout);
89
+
90
+ let reconnectTimeout = self.getOption("connection.reconnect.timeout");
91
+ if (!isInteger(reconnectTimeout) || reconnectTimeout < 1000)
92
+ reconnectTimeout = 1000;
93
+ let reconnectAttempts = self.getOption("connection.reconnect.attempts");
94
+ if (!isInteger(reconnectAttempts) || reconnectAttempts < 1)
95
+ reconnectAttempts = 1;
96
+ let reconnectEnabled = self.getOption("connection.reconnect.enabled");
97
+ if (reconnectEnabled !== true) reconnectEnabled = false;
98
+
99
+ self[manualCloseSymbol] = false;
100
+ self[connectionSymbol].reconnectCounter++;
101
+
102
+ if (
103
+ self[connectionSymbol].socket &&
104
+ self[connectionSymbol].socket.readyState < 2
105
+ ) {
106
+ self[connectionSymbol].socket.close();
107
+ }
108
+ self[connectionSymbol].socket = null;
109
+ self[connectionSymbol].socket = new WebSocket(url);
110
+
111
+ self[connectionSymbol].socket.onmessage = function (event) {
112
+ if (event.data instanceof Blob) {
113
+ const reader = new FileReader();
114
+ reader.addEventListener("loadend", function () {
115
+ self[receiveQueueSymbol].add(new Message(reader.result));
116
+ });
117
+ reader.readAsText(new Message(event.data));
118
+ } else {
119
+ self[receiveQueueSymbol].add(Message.fromJSON(event.data));
120
+ }
121
+ };
122
+
123
+ self[connectionSymbol].socket.onopen = function () {
124
+ self[connectionSymbol].reconnectCounter = 0;
125
+ if (typeof resolve === "function" && !promiseAllredyResolved) {
126
+ promiseAllredyResolved = true;
127
+ resolve();
128
+ }
129
+ };
130
+
131
+ self[connectionSymbol].socket.close = function (event) {
132
+ if (self[manualCloseSymbol]) {
133
+ self[manualCloseSymbol] = false;
134
+ return;
135
+ }
136
+
137
+ if (
138
+ reconnectEnabled &&
139
+ this[connectionSymbol].reconnectCounter < reconnectAttempts
140
+ ) {
141
+ setTimeout(() => {
142
+ self.connect();
143
+ }, reconnectTimeout * this[connectionSymbol].reconnectCounter);
144
+ }
145
+ };
146
+
147
+ self[connectionSymbol].socket.onerror = (error) => {
148
+ if (
149
+ reconnectEnabled &&
150
+ self[connectionSymbol].reconnectCounter < reconnectAttempts
151
+ ) {
152
+ setTimeout(() => {
153
+ self.connect();
154
+ }, reconnectTimeout * this[connectionSymbol].reconnectCounter);
155
+ } else {
156
+ if (typeof reject === "function" && !promiseAllredyResolved) {
157
+ promiseAllredyResolved = true;
158
+ reject(error);
159
+ }
160
+ }
161
+ };
151
162
  }
152
163
 
153
164
  /**
@@ -161,175 +172,171 @@ function connectServer(resolve, reject) {
161
172
  * @summary The LocalStorage class encapsulates the access to data objects.
162
173
  */
163
174
  class WebConnect extends BaseWithOptions {
164
- /**
165
- *
166
- * @param {Object} [options] options contains definitions for the webconnect.
167
- */
168
- constructor(options) {
169
- if (isString(options)) {
170
- options = { url: options };
171
- }
172
-
173
- super(options);
174
-
175
- this[receiveQueueSymbol] = new ObservableQueue();
176
- this[sendQueueSymbol] = new ObservableQueue();
177
-
178
- this[connectionSymbol] = {};
179
- this[connectionSymbol].socket = null;
180
- this[connectionSymbol].reconnectCounter = 0;
181
- this[manualCloseSymbol] = false;
182
- }
183
-
184
- /**
185
- *
186
- * @returns {Promise}
187
- */
188
- connect() {
189
- const self = this;
190
-
191
- return new Promise((resolve, reject) => {
192
- connectServer.call(this, resolve, reject);
193
- });
194
- }
195
-
196
- /**
197
- * @returns {boolean}
198
- */
199
- isConnected() {
200
- return this[connectionSymbol]?.socket?.readyState === 1;
201
- }
202
-
203
- /**
204
- * This method is called by the `instanceof` operator.
205
- * @returns {symbol}
206
- */
207
- static get [instanceSymbol]() {
208
- return Symbol.for("@schukai/monster/net/webconnect");
209
- }
210
-
211
- /**
212
- * @property {string} url=undefined Defines the resource that you wish to fetch.
213
- * @property {Object} connection
214
- * @property {Object} connection.timeout=5000 Defines the timeout for the connection.
215
- * @property {Number} connection.reconnect.timeout The timeout in milliseconds for the reconnect.
216
- * @property {Number} connection.reconnect.attempts The maximum number of reconnects.
217
- * @property {Bool} connection.reconnect.enabled If the reconnect is enabled.
218
- */
219
- get defaults() {
220
- return Object.assign({}, super.defaults, {
221
- url: undefined,
222
- connection: {
223
- timeout: 5000,
224
- reconnect: {
225
- timeout: 1000,
226
- attempts: 1,
227
- enabled: false,
228
- },
229
- },
230
- });
231
- }
232
-
233
- /**
234
- * This method closes the connection.
235
- *
236
- * @param {Number} [code=1000] The close code.
237
- * @param {String} [reason=""] The close reason.
238
- * @returns {Promise}
239
- * @see https://www.rfc-editor.org/rfc/rfc6455.html#section-7.4.1
240
- */
241
- close(statusCode, reason) {
242
- if (!isInteger(statusCode) || statusCode < 1000 || statusCode > 4999) {
243
- statusCode = 1000;
244
- }
245
- if (!isString(reason)) {
246
- reason = "";
247
- }
248
-
249
- return new Promise((resolve, reject) => {
250
- try {
251
- this[manualCloseSymbol] = true;
252
- if (this[connectionSymbol].socket) {
253
- this[connectionSymbol].socket.close(statusCode, reason);
254
- }
255
- } catch (error) {
256
- reject(error);
257
- }
258
- resolve();
259
- });
260
- }
261
-
262
- /**
263
- * Polls the receive queue for new messages.
264
- *
265
- * @returns {Message}
266
- */
267
- poll() {
268
- return this[receiveQueueSymbol].poll();
269
- }
270
-
271
- /**
272
- * Are there any messages in the receive queue?
273
- *
274
- * @returns {boolean}
275
- */
276
- dataReceived() {
277
- return !this[receiveQueueSymbol].isEmpty();
278
- }
279
-
280
- /**
281
- * Get Message from the receive queue, but do not remove it.
282
- *
283
- * @returns {Object}
284
- */
285
- peek() {
286
- return this[receiveQueueSymbol].peek();
287
- }
288
-
289
- /**
290
- * Attach a new observer
291
- *
292
- * @param {Observer} observer
293
- * @returns {ProxyObserver}
294
- */
295
- attachObserver(observer) {
296
- this[receiveQueueSymbol].attachObserver(observer);
297
- return this;
298
- }
299
-
300
- /**
301
- * Detach a observer
302
- *
303
- * @param {Observer} observer
304
- * @returns {ProxyObserver}
305
- */
306
- detachObserver(observer) {
307
- this[receiveQueueSymbol].detachObserver(observer);
308
- return this;
309
- }
310
-
311
- /**
312
- * @param {Observer} observer
313
- * @returns {boolean}
314
- */
315
- containsObserver(observer) {
316
- return this[receiveQueueSymbol].containsObserver(observer);
317
- }
318
-
319
- /**
320
- * @param {Message|Object} message
321
- * @return {Promise}
322
- */
323
- send(message) {
324
- const self = this;
325
-
326
- return new Promise((resolve, reject) => {
327
- if (self[connectionSymbol].socket.readyState !== 1) {
328
- reject("the socket is not ready");
329
- }
330
-
331
- self[connectionSymbol].socket.send(JSON.stringify(message));
332
- resolve();
333
- });
334
- }
175
+ /**
176
+ *
177
+ * @param {Object} [options] options contains definitions for the webconnect.
178
+ */
179
+ constructor(options) {
180
+ if (isString(options)) {
181
+ options = { url: options };
182
+ }
183
+
184
+ super(options);
185
+
186
+ this[receiveQueueSymbol] = new ObservableQueue();
187
+ this[sendQueueSymbol] = new ObservableQueue();
188
+
189
+ this[connectionSymbol] = {};
190
+ this[connectionSymbol].socket = null;
191
+ this[connectionSymbol].reconnectCounter = 0;
192
+ this[manualCloseSymbol] = false;
193
+ }
194
+
195
+ /**
196
+ *
197
+ * @returns {Promise}
198
+ */
199
+ connect() {
200
+ return new Promise((resolve, reject) => {
201
+ connectServer.call(this, resolve, reject);
202
+ });
203
+ }
204
+
205
+ /**
206
+ * @returns {boolean}
207
+ */
208
+ isConnected() {
209
+ return this[connectionSymbol]?.socket?.readyState === 1;
210
+ }
211
+
212
+ /**
213
+ * This method is called by the `instanceof` operator.
214
+ * @returns {symbol}
215
+ */
216
+ static get [instanceSymbol]() {
217
+ return Symbol.for("@schukai/monster/net/webconnect");
218
+ }
219
+
220
+ /**
221
+ * @property {string} url=undefined Defines the resource that you wish to fetch.
222
+ * @property {Object} connection
223
+ * @property {Object} connection.timeout=5000 Defines the timeout for the connection.
224
+ * @property {Number} connection.reconnect.timeout The timeout in milliseconds for the reconnect.
225
+ * @property {Number} connection.reconnect.attempts The maximum number of reconnects.
226
+ * @property {Bool} connection.reconnect.enabled If the reconnect is enabled.
227
+ */
228
+ get defaults() {
229
+ return Object.assign({}, super.defaults, {
230
+ url: undefined,
231
+ connection: {
232
+ timeout: 5000,
233
+ reconnect: {
234
+ timeout: 1000,
235
+ attempts: 1,
236
+ enabled: false,
237
+ },
238
+ },
239
+ });
240
+ }
241
+
242
+ /**
243
+ * This method closes the connection.
244
+ *
245
+ * @param {Number} [code=1000] The close code.
246
+ * @param {String} [reason=""] The close reason.
247
+ * @returns {Promise}
248
+ * @see https://www.rfc-editor.org/rfc/rfc6455.html#section-7.4.1
249
+ */
250
+ close(statusCode, reason) {
251
+ if (!isInteger(statusCode) || statusCode < 1000 || statusCode > 4999) {
252
+ statusCode = 1000;
253
+ }
254
+ if (!isString(reason)) {
255
+ reason = "";
256
+ }
257
+
258
+ return new Promise((resolve, reject) => {
259
+ try {
260
+ this[manualCloseSymbol] = true;
261
+ if (this[connectionSymbol].socket) {
262
+ this[connectionSymbol].socket.close(statusCode, reason);
263
+ }
264
+ } catch (error) {
265
+ reject(error);
266
+ }
267
+ resolve();
268
+ });
269
+ }
270
+
271
+ /**
272
+ * Polls the receive queue for new messages.
273
+ *
274
+ * @returns {Message}
275
+ */
276
+ poll() {
277
+ return this[receiveQueueSymbol].poll();
278
+ }
279
+
280
+ /**
281
+ * Are there any messages in the receive queue?
282
+ *
283
+ * @returns {boolean}
284
+ */
285
+ dataReceived() {
286
+ return !this[receiveQueueSymbol].isEmpty();
287
+ }
288
+
289
+ /**
290
+ * Get Message from the receive queue, but do not remove it.
291
+ *
292
+ * @returns {Object}
293
+ */
294
+ peek() {
295
+ return this[receiveQueueSymbol].peek();
296
+ }
297
+
298
+ /**
299
+ * Attach a new observer
300
+ *
301
+ * @param {Observer} observer
302
+ * @returns {ProxyObserver}
303
+ */
304
+ attachObserver(observer) {
305
+ this[receiveQueueSymbol].attachObserver(observer);
306
+ return this;
307
+ }
308
+
309
+ /**
310
+ * Detach a observer
311
+ *
312
+ * @param {Observer} observer
313
+ * @returns {ProxyObserver}
314
+ */
315
+ detachObserver(observer) {
316
+ this[receiveQueueSymbol].detachObserver(observer);
317
+ return this;
318
+ }
319
+
320
+ /**
321
+ * @param {Observer} observer
322
+ * @returns {boolean}
323
+ */
324
+ containsObserver(observer) {
325
+ return this[receiveQueueSymbol].containsObserver(observer);
326
+ }
327
+
328
+ /**
329
+ * @param {Message|Object} message
330
+ * @return {Promise}
331
+ */
332
+ send(message) {
333
+ return new Promise((resolve, reject) => {
334
+ if (this[connectionSymbol].socket.readyState !== 1) {
335
+ reject("the socket is not ready");
336
+ }
337
+
338
+ this[connectionSymbol].socket.send(JSON.stringify(message));
339
+ resolve();
340
+ });
341
+ }
335
342
  }