@schukai/monster 3.51.5 → 3.52.1

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 (361) hide show
  1. package/CHANGELOG.md +25 -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/example/data/datasource/server/restapi.mjs +7 -1
  12. package/package.json +6 -2
  13. package/source/components/constants.mjs +132 -0
  14. package/source/components/datatable/columnbar.mjs +310 -0
  15. package/source/components/datatable/constants.mjs +121 -0
  16. package/source/components/datatable/dataset.mjs +219 -0
  17. package/source/components/datatable/datasource/dom.mjs +186 -0
  18. package/source/components/datatable/datasource/namespace.mjs +13 -0
  19. package/source/components/datatable/datasource/rest.mjs +400 -0
  20. package/source/components/datatable/datasource.mjs +102 -0
  21. package/source/components/datatable/datatable/header.mjs +268 -0
  22. package/source/components/datatable/datatable/namespace.mjs +13 -0
  23. package/source/components/datatable/datatable.mjs +789 -0
  24. package/source/components/datatable/embedded-pagination.mjs +113 -0
  25. package/source/components/datatable/filter/abstract-base.mjs +31 -0
  26. package/source/components/datatable/filter/date-range.mjs +1041 -0
  27. package/source/components/datatable/filter/input.mjs +175 -0
  28. package/source/components/datatable/filter/namespace.mjs +13 -0
  29. package/source/components/datatable/filter/range.mjs +671 -0
  30. package/source/components/datatable/filter/select.mjs +65 -0
  31. package/source/components/datatable/filter/settings.mjs +116 -0
  32. package/source/components/datatable/filter-button.mjs +98 -0
  33. package/source/components/datatable/filter.mjs +929 -0
  34. package/source/components/datatable/namespace.mjs +11 -0
  35. package/source/components/datatable/pagination.mjs +456 -0
  36. package/source/components/datatable/style/column-bar.pcss +123 -0
  37. package/source/components/datatable/style/dataset.pcss +13 -0
  38. package/source/components/datatable/style/datasource.pcss +16 -0
  39. package/source/components/datatable/style/datatable.pcss +239 -0
  40. package/source/components/datatable/style/embedded-pagination.pcss +101 -0
  41. package/source/components/datatable/style/filter-button.pcss +22 -0
  42. package/source/components/datatable/style/filter-controls-defaults.pcss +46 -0
  43. package/source/components/datatable/style/filter-date-range.pcss +9 -0
  44. package/source/components/datatable/style/filter-range.pcss +5 -0
  45. package/source/components/datatable/style/filter.pcss +156 -0
  46. package/source/components/datatable/style/pagination.pcss +59 -0
  47. package/source/components/datatable/style/select-filter.pcss +27 -0
  48. package/source/components/datatable/stylesheet/column-bar.mjs +27 -0
  49. package/source/components/datatable/stylesheet/dataset.mjs +27 -0
  50. package/source/components/datatable/stylesheet/datasource.mjs +27 -0
  51. package/source/components/datatable/stylesheet/datatable.mjs +27 -0
  52. package/source/components/datatable/stylesheet/embedded-pagination.mjs +27 -0
  53. package/source/components/datatable/stylesheet/filter-button.mjs +27 -0
  54. package/source/components/datatable/stylesheet/filter-controls-defaults.mjs +27 -0
  55. package/source/components/datatable/stylesheet/filter-date-range.mjs +27 -0
  56. package/source/components/datatable/stylesheet/filter-range.mjs +27 -0
  57. package/source/components/datatable/stylesheet/filter.mjs +27 -0
  58. package/source/components/datatable/stylesheet/namespace.mjs +13 -0
  59. package/source/components/datatable/stylesheet/pagination.mjs +27 -0
  60. package/source/components/datatable/stylesheet/select-filter.mjs +27 -0
  61. package/source/components/datatable/util.mjs +60 -0
  62. package/source/components/form/action-button.mjs +262 -0
  63. package/source/components/form/api-button.mjs +515 -0
  64. package/source/components/form/button-bar.mjs +739 -0
  65. package/source/components/form/button.mjs +350 -0
  66. package/source/components/form/confirm-button.mjs +330 -0
  67. package/source/components/form/constants.mjs +111 -0
  68. package/source/components/form/context-help.mjs +123 -0
  69. package/source/components/form/events.mjs +84 -0
  70. package/source/components/form/form.mjs +601 -0
  71. package/source/components/form/message-state-button.mjs +396 -0
  72. package/source/components/form/namespace.mjs +13 -0
  73. package/source/components/form/popper-button.mjs +435 -0
  74. package/source/components/form/popper.mjs +487 -0
  75. package/source/components/form/reload.mjs +360 -0
  76. package/source/components/form/select.mjs +2314 -0
  77. package/source/components/form/shadow-reload.mjs +137 -0
  78. package/source/components/form/state-button.mjs +182 -0
  79. package/source/components/form/style/action-button.pcss +41 -0
  80. package/source/components/form/style/api-button.pcss +0 -0
  81. package/source/components/form/style/button-bar.pcss +51 -0
  82. package/source/components/form/style/button.pcss +8 -0
  83. package/source/components/form/style/confirm-button.pcss +17 -0
  84. package/source/components/form/style/context-help.pcss +16 -0
  85. package/source/components/form/style/form.pcss +10 -0
  86. package/source/components/form/style/message-state-button.pcss +10 -0
  87. package/source/components/form/style/popper-button.pcss +16 -0
  88. package/source/components/form/style/popper.pcss +8 -0
  89. package/source/components/form/style/select.pcss +265 -0
  90. package/source/components/form/style/state-button.pcss +116 -0
  91. package/source/components/form/style/tabs.pcss +173 -0
  92. package/source/components/form/style/tree-select.pcss +81 -0
  93. package/source/components/form/stylesheet/action-button.mjs +27 -0
  94. package/source/components/form/stylesheet/api-button.mjs +27 -0
  95. package/source/components/form/stylesheet/button-bar.mjs +27 -0
  96. package/source/components/form/stylesheet/button.mjs +27 -0
  97. package/source/components/form/stylesheet/confirm-button.mjs +27 -0
  98. package/source/components/form/stylesheet/context-help.mjs +27 -0
  99. package/source/components/form/stylesheet/form.mjs +27 -0
  100. package/source/components/form/stylesheet/message-state-button.mjs +27 -0
  101. package/source/components/form/stylesheet/namespace.mjs +13 -0
  102. package/source/components/form/stylesheet/popper-button.mjs +27 -0
  103. package/source/components/form/stylesheet/popper.mjs +27 -0
  104. package/source/components/form/stylesheet/select.mjs +27 -0
  105. package/source/components/form/stylesheet/state-button.mjs +27 -0
  106. package/source/components/form/stylesheet/tabs.mjs +27 -0
  107. package/source/components/form/stylesheet/tree-select.mjs +27 -0
  108. package/source/components/form/tabs.mjs +1029 -0
  109. package/source/components/form/template.mjs +373 -0
  110. package/source/components/form/tree-select.mjs +527 -0
  111. package/source/components/form/types/namespace.mjs +13 -0
  112. package/source/components/form/types/state.mjs +93 -0
  113. package/source/components/form/util/fetch.mjs +133 -0
  114. package/source/components/form/util/floating-ui.mjs +245 -0
  115. package/source/components/form/util/namespace.mjs +13 -0
  116. package/source/components/form/util/popper.mjs +49 -0
  117. package/source/components/host/call-button.mjs +236 -0
  118. package/source/components/host/collapse.mjs +526 -0
  119. package/source/components/host/config-manager.mjs +304 -0
  120. package/source/components/host/constants.mjs +18 -0
  121. package/source/components/host/details.mjs +268 -0
  122. package/source/components/host/events.mjs +131 -0
  123. package/source/components/host/host.mjs +420 -0
  124. package/source/components/host/namespace.mjs +13 -0
  125. package/source/components/host/overlay.mjs +339 -0
  126. package/source/components/host/style/call-button.pcss +36 -0
  127. package/source/components/host/style/collapse.pcss +67 -0
  128. package/source/components/host/style/config-manager.pcss +5 -0
  129. package/source/components/host/style/details.pcss +68 -0
  130. package/source/components/host/style/host.pcss +43 -0
  131. package/source/components/host/style/overlay.pcss +73 -0
  132. package/source/components/host/style/toggle-button.pcss +36 -0
  133. package/source/components/host/style/viewer.pcss +13 -0
  134. package/source/components/host/stylesheet/call-button.mjs +27 -0
  135. package/source/components/host/stylesheet/collapse.mjs +27 -0
  136. package/source/components/host/stylesheet/config-manager.mjs +27 -0
  137. package/source/components/host/stylesheet/details.mjs +27 -0
  138. package/source/components/host/stylesheet/host.mjs +27 -0
  139. package/source/components/host/stylesheet/namespace.mjs +13 -0
  140. package/source/components/host/stylesheet/overlay.mjs +27 -0
  141. package/source/components/host/stylesheet/toggle-button.mjs +27 -0
  142. package/source/components/host/stylesheet/viewer.mjs +27 -0
  143. package/source/components/host/toggle-button.mjs +88 -0
  144. package/source/components/host/util.mjs +23 -0
  145. package/source/components/host/viewer.mjs +309 -0
  146. package/source/components/namespace.mjs +14 -0
  147. package/source/components/notify/constants.mjs +15 -0
  148. package/source/components/notify/events.mjs +15 -0
  149. package/source/components/notify/message.mjs +374 -0
  150. package/source/components/notify/namespace.mjs +15 -0
  151. package/source/components/notify/notify.mjs +236 -0
  152. package/source/components/notify/style/message.pcss +57 -0
  153. package/source/components/notify/style/notify.pcss +118 -0
  154. package/source/components/notify/stylesheet/message.mjs +27 -0
  155. package/source/components/notify/stylesheet/namespace.mjs +15 -0
  156. package/source/components/notify/stylesheet/notify.mjs +27 -0
  157. package/source/components/state/log/entry.mjs +126 -0
  158. package/source/components/state/log/namespace.mjs +13 -0
  159. package/source/components/state/log.mjs +275 -0
  160. package/source/components/state/namespace.mjs +13 -0
  161. package/source/components/state/state.mjs +131 -0
  162. package/source/components/state/style/log.pcss +111 -0
  163. package/source/components/state/style/state.pcss +113 -0
  164. package/source/components/state/stylesheet/log.mjs +27 -0
  165. package/source/components/state/stylesheet/state.mjs +27 -0
  166. package/source/components/style/badge.pcss +92 -0
  167. package/source/components/style/border.pcss +77 -0
  168. package/source/components/style/button.pcss +105 -0
  169. package/source/components/style/card.pcss +108 -0
  170. package/source/components/style/color.pcss +257 -0
  171. package/source/components/style/common.pcss +105 -0
  172. package/source/components/style/control.pcss +11 -0
  173. package/source/components/style/data-grid.pcss +43 -0
  174. package/source/components/style/display.pcss +42 -0
  175. package/source/components/style/floating-ui.pcss +33 -0
  176. package/source/components/style/form.pcss +5 -0
  177. package/source/components/style/host.pcss +15 -0
  178. package/source/components/style/link.pcss +63 -0
  179. package/source/components/style/mixin/badge.pcss +18 -0
  180. package/source/components/style/mixin/button.pcss +52 -0
  181. package/source/components/style/mixin/form.pcss +247 -0
  182. package/source/components/style/mixin/hover.pcss +8 -0
  183. package/source/components/style/mixin/media.pcss +107 -0
  184. package/source/components/style/mixin/property.pcss +292 -0
  185. package/source/components/style/mixin/skeleton.pcss +26 -0
  186. package/source/components/style/mixin/spinner.pcss +24 -0
  187. package/source/components/style/mixin/typography.pcss +52 -0
  188. package/source/components/style/normalize.pcss +14 -0
  189. package/source/components/style/popper.pcss +78 -0
  190. package/source/components/style/property.pcss +17 -0
  191. package/source/components/style/ripple.pcss +14 -0
  192. package/source/components/style/skeleton.pcss +28 -0
  193. package/source/components/style/space.pcss +47 -0
  194. package/source/components/style/spinner.pcss +6 -0
  195. package/source/components/style/table.pcss +46 -0
  196. package/source/components/style/theme.pcss +119 -0
  197. package/source/components/style/typography.pcss +131 -0
  198. package/source/components/stylesheet/badge.mjs +27 -0
  199. package/source/components/stylesheet/border.mjs +27 -0
  200. package/source/components/stylesheet/button.mjs +27 -0
  201. package/source/components/stylesheet/card.mjs +27 -0
  202. package/source/components/stylesheet/color.mjs +27 -0
  203. package/source/components/stylesheet/common.mjs +27 -0
  204. package/source/components/stylesheet/control.mjs +27 -0
  205. package/source/components/stylesheet/data-grid.mjs +27 -0
  206. package/source/components/stylesheet/display.mjs +27 -0
  207. package/source/components/stylesheet/floating-ui.mjs +27 -0
  208. package/source/components/stylesheet/form.mjs +27 -0
  209. package/source/components/stylesheet/host.mjs +27 -0
  210. package/source/components/stylesheet/link.mjs +27 -0
  211. package/source/components/stylesheet/namespace.mjs +13 -0
  212. package/source/components/stylesheet/normalize.mjs +27 -0
  213. package/source/components/stylesheet/popper.mjs +27 -0
  214. package/source/components/stylesheet/property.mjs +27 -0
  215. package/source/components/stylesheet/ripple.mjs +27 -0
  216. package/source/components/stylesheet/skeleton.mjs +27 -0
  217. package/source/components/stylesheet/space.mjs +27 -0
  218. package/source/components/stylesheet/spinner.mjs +27 -0
  219. package/source/components/stylesheet/table.mjs +27 -0
  220. package/source/components/stylesheet/theme.mjs +27 -0
  221. package/source/components/stylesheet/tree-menu.mjs +33 -0
  222. package/source/components/stylesheet/typography.mjs +27 -0
  223. package/source/components/tree-menu/namespace.mjs +13 -0
  224. package/source/components/tree-menu/style/tree-menu.pcss +107 -0
  225. package/source/components/tree-menu/stylesheet/namespace.mjs +13 -0
  226. package/source/components/tree-menu/stylesheet/tree-menu.mjs +27 -0
  227. package/source/components/tree-menu/tree-menu.mjs +660 -0
  228. package/source/constraints/abstract.mjs +17 -24
  229. package/source/constraints/abstractoperator.mjs +27 -22
  230. package/source/constraints/andoperator.mjs +20 -17
  231. package/source/constraints/invalid.mjs +17 -17
  232. package/source/constraints/isarray.mjs +20 -20
  233. package/source/constraints/isobject.mjs +20 -20
  234. package/source/constraints/oroperator.mjs +45 -45
  235. package/source/constraints/valid.mjs +17 -17
  236. package/source/data/buildmap.mjs +108 -103
  237. package/source/data/buildtree.mjs +59 -57
  238. package/source/data/datasource/dom.mjs +80 -84
  239. package/source/data/datasource/namespace.mjs +1 -1
  240. package/source/data/datasource/server/restapi/data-fetch-error.mjs +27 -25
  241. package/source/data/datasource/server/restapi/writeerror.mjs +35 -32
  242. package/source/data/datasource/server/restapi.mjs +176 -177
  243. package/source/data/datasource/server/webconnect.mjs +150 -156
  244. package/source/data/datasource/server.mjs +62 -63
  245. package/source/data/datasource/storage/localstorage.mjs +25 -24
  246. package/source/data/datasource/storage/sessionstorage.mjs +28 -25
  247. package/source/data/datasource/storage.mjs +74 -73
  248. package/source/data/datasource.mjs +177 -168
  249. package/source/data/diff.mjs +98 -97
  250. package/source/data/extend.mjs +42 -42
  251. package/source/data/pathfinder.mjs +301 -288
  252. package/source/data/pipe.mjs +36 -36
  253. package/source/data/transformer.mjs +742 -726
  254. package/source/dom/assembler.mjs +44 -44
  255. package/source/dom/attributes.mjs +142 -122
  256. package/source/dom/constants.mjs +62 -58
  257. package/source/dom/customcontrol.mjs +299 -299
  258. package/source/dom/customelement.mjs +843 -806
  259. package/source/dom/dimension.mjs +56 -46
  260. package/source/dom/events.mjs +74 -69
  261. package/source/dom/focusmanager.mjs +175 -175
  262. package/source/dom/locale.mjs +28 -28
  263. package/source/dom/ready.mjs +13 -13
  264. package/source/dom/resource/data.mjs +117 -111
  265. package/source/dom/resource/link/stylesheet.mjs +16 -16
  266. package/source/dom/resource/link.mjs +94 -96
  267. package/source/dom/resource/script.mjs +72 -74
  268. package/source/dom/resource.mjs +174 -172
  269. package/source/dom/resourcemanager.mjs +152 -156
  270. package/source/dom/slotted.mjs +78 -80
  271. package/source/dom/template.mjs +126 -112
  272. package/source/dom/theme.mjs +35 -35
  273. package/source/dom/updater.mjs +673 -651
  274. package/source/dom/util/extract-keys.mjs +34 -22
  275. package/source/dom/util/init-options-from-attributes.mjs +46 -38
  276. package/source/dom/util/namespace.mjs +13 -0
  277. package/source/dom/util/set-option-from-attribute.mjs +35 -29
  278. package/source/dom/util.mjs +112 -81
  279. package/source/dom/worker/factory.mjs +83 -83
  280. package/source/i18n/formatter.mjs +75 -73
  281. package/source/i18n/locale.mjs +146 -144
  282. package/source/i18n/provider.mjs +70 -64
  283. package/source/i18n/providers/embed.mjs +136 -127
  284. package/source/i18n/providers/fetch.mjs +84 -76
  285. package/source/i18n/translations.mjs +205 -195
  286. package/source/logging/handler/console.mjs +36 -36
  287. package/source/logging/handler.mjs +140 -140
  288. package/source/logging/logentry.mjs +25 -25
  289. package/source/logging/logger.mjs +177 -175
  290. package/source/math/random.mjs +63 -59
  291. package/source/monster.mjs +223 -103
  292. package/source/net/webconnect/message.mjs +31 -31
  293. package/source/net/webconnect.mjs +278 -271
  294. package/source/text/bracketed-key-value-hash.mjs +182 -179
  295. package/source/text/formatter.mjs +235 -210
  296. package/source/text/generate-range-comparison-expression.mjs +56 -34
  297. package/source/text/namespace.mjs +1 -1
  298. package/source/types/base.mjs +69 -61
  299. package/source/types/basewithoptions.mjs +46 -46
  300. package/source/types/binary.mjs +20 -20
  301. package/source/types/dataurl.mjs +96 -90
  302. package/source/types/global.mjs +45 -39
  303. package/source/types/id.mjs +25 -25
  304. package/source/types/internal.mjs +115 -114
  305. package/source/types/is.mjs +56 -40
  306. package/source/types/mediatype.mjs +119 -119
  307. package/source/types/namespace.mjs +1 -1
  308. package/source/types/node.mjs +160 -150
  309. package/source/types/nodelist.mjs +94 -96
  310. package/source/types/noderecursiveiterator.mjs +50 -50
  311. package/source/types/observablequeue.mjs +73 -73
  312. package/source/types/observer.mjs +114 -106
  313. package/source/types/observerlist.mjs +66 -66
  314. package/source/types/proxyobserver.mjs +210 -210
  315. package/source/types/queue.mjs +63 -63
  316. package/source/types/randomid.mjs +13 -13
  317. package/source/types/regex.mjs +3 -1
  318. package/source/types/stack.mjs +64 -64
  319. package/source/types/tokenlist.mjs +206 -205
  320. package/source/types/typeof.mjs +12 -10
  321. package/source/types/uniquequeue.mjs +48 -48
  322. package/source/types/uuid.mjs +32 -32
  323. package/source/types/validate.mjs +67 -67
  324. package/source/types/version.mjs +115 -105
  325. package/source/util/clone.mjs +103 -91
  326. package/source/util/comparator.mjs +97 -97
  327. package/source/util/deadmansswitch.mjs +40 -44
  328. package/source/util/freeze.mjs +10 -9
  329. package/source/util/namespace.mjs +1 -1
  330. package/source/util/processing.mjs +104 -105
  331. package/source/util/runtime.mjs +56 -44
  332. package/source/util/trimspaces.mjs +24 -24
  333. package/test/cases/components/form/button.mjs +122 -0
  334. package/test/cases/components/form/confirm-button.mjs +127 -0
  335. package/test/cases/components/form/form.mjs +317 -0
  336. package/test/cases/components/form/reload.mjs +188 -0
  337. package/test/cases/components/form/select.mjs +229 -0
  338. package/test/cases/components/form/state-button.mjs +130 -0
  339. package/test/cases/components/form/tabs.mjs +98 -0
  340. package/test/cases/components/form/template.mjs +189 -0
  341. package/test/cases/components/form/tree-select.mjs +216 -0
  342. package/test/cases/components/host/details.mjs +68 -0
  343. package/test/cases/components/host/host.mjs +70 -0
  344. package/test/cases/components/host/overlay.mjs +60 -0
  345. package/test/cases/components/host/util.mjs +79 -0
  346. package/test/cases/components/notify/message.mjs +39 -0
  347. package/test/cases/components/notify/notify.mjs +89 -0
  348. package/test/cases/dom/customcontrol.mjs +5 -4
  349. package/test/cases/math/random.mjs +0 -1
  350. package/test/cases/monster.mjs +1 -1
  351. package/test/cases/net/webconnect/message.mjs +0 -1
  352. package/test/cases/types/node.mjs +1 -1
  353. package/test/util/chai-dom.mjs +2 -2
  354. package/test/util/intersection-mock.mjs +69 -0
  355. package/test/util/jsdom.mjs +41 -25
  356. package/test/util/localstorage.mjs +1 -0
  357. package/test/util/resize-observer.mjs +29 -0
  358. package/test/util/websocket.mjs +4 -1
  359. package/test/web/import.js +16 -1
  360. package/test/web/test.html +28 -5
  361. package/test/web/tests.js +30398 -17879
@@ -29,107 +29,107 @@ export { ProxyObserver };
29
29
  * @memberOf Monster.Types
30
30
  */
31
31
  class ProxyObserver extends Base {
32
- /**
33
- *
34
- * @param {object} object
35
- * @throws {TypeError} value is not a object
36
- */
37
- constructor(object) {
38
- super();
39
-
40
- this.realSubject = validateObject(object);
41
- this.subject = new Proxy(object, getHandler.call(this));
42
-
43
- this.objectMap = new WeakMap();
44
- this.objectMap.set(this.realSubject, this.subject);
45
-
46
- this.proxyMap = new WeakMap();
47
- this.proxyMap.set(this.subject, this.realSubject);
48
-
49
- this.observers = new ObserverList();
50
- }
51
-
52
- /**
53
- * This method is called by the `instanceof` operator.
54
- * @returns {symbol}
55
- * @since 2.1.0
56
- */
57
- static get [instanceSymbol]() {
58
- return Symbol.for("@schukai/monster/types/proxy-observer");
59
- }
60
-
61
- /**
62
- * @returns {object}
63
- */
64
- getSubject() {
65
- return this.subject;
66
- }
67
-
68
- /**
69
- * @since 1.24.0
70
- * @param {Object} obj
71
- * @return {Monster.Types.ProxyObserver}
72
- */
73
- setSubject(obj) {
74
- let i;
75
- let k = Object.keys(this.subject);
76
- for (i = 0; i < k.length; i++) {
77
- delete this.subject[k[i]];
78
- }
79
-
80
- this.subject = extend(this.subject, obj);
81
- return this;
82
- }
83
-
84
- /**
85
- * Get the real object
86
- *
87
- * Changes to this object are not noticed by the observers, so you can make a large number of changes and inform the observers later.
88
- *
89
- * @returns {object}
90
- */
91
- getRealSubject() {
92
- return this.realSubject;
93
- }
94
-
95
- /**
96
- * attach a new observer
97
- *
98
- * @param {Observer} observer
99
- * @returns {ProxyObserver}
100
- */
101
- attachObserver(observer) {
102
- this.observers.attach(observer);
103
- return this;
104
- }
105
-
106
- /**
107
- * detach a observer
108
- *
109
- * @param {Observer} observer
110
- * @returns {ProxyObserver}
111
- */
112
- detachObserver(observer) {
113
- this.observers.detach(observer);
114
- return this;
115
- }
116
-
117
- /**
118
- * notify all observer
119
- *
120
- * @returns {Promise}
121
- */
122
- notifyObservers() {
123
- return this.observers.notify(this);
124
- }
125
-
126
- /**
127
- * @param {Observer} observer
128
- * @returns {boolean}
129
- */
130
- containsObserver(observer) {
131
- return this.observers.contains(observer);
132
- }
32
+ /**
33
+ *
34
+ * @param {object} object
35
+ * @throws {TypeError} value is not a object
36
+ */
37
+ constructor(object) {
38
+ super();
39
+
40
+ this.realSubject = validateObject(object);
41
+ this.subject = new Proxy(object, getHandler.call(this));
42
+
43
+ this.objectMap = new WeakMap();
44
+ this.objectMap.set(this.realSubject, this.subject);
45
+
46
+ this.proxyMap = new WeakMap();
47
+ this.proxyMap.set(this.subject, this.realSubject);
48
+
49
+ this.observers = new ObserverList();
50
+ }
51
+
52
+ /**
53
+ * This method is called by the `instanceof` operator.
54
+ * @returns {symbol}
55
+ * @since 2.1.0
56
+ */
57
+ static get [instanceSymbol]() {
58
+ return Symbol.for("@schukai/monster/types/proxy-observer");
59
+ }
60
+
61
+ /**
62
+ * @returns {object}
63
+ */
64
+ getSubject() {
65
+ return this.subject;
66
+ }
67
+
68
+ /**
69
+ * @since 1.24.0
70
+ * @param {Object} obj
71
+ * @return {Monster.Types.ProxyObserver}
72
+ */
73
+ setSubject(obj) {
74
+ let i;
75
+ const k = Object.keys(this.subject);
76
+ for (i = 0; i < k.length; i++) {
77
+ delete this.subject[k[i]];
78
+ }
79
+
80
+ this.subject = extend(this.subject, obj);
81
+ return this;
82
+ }
83
+
84
+ /**
85
+ * Get the real object
86
+ *
87
+ * Changes to this object are not noticed by the observers, so you can make a large number of changes and inform the observers later.
88
+ *
89
+ * @returns {object}
90
+ */
91
+ getRealSubject() {
92
+ return this.realSubject;
93
+ }
94
+
95
+ /**
96
+ * attach a new observer
97
+ *
98
+ * @param {Observer} observer
99
+ * @returns {ProxyObserver}
100
+ */
101
+ attachObserver(observer) {
102
+ this.observers.attach(observer);
103
+ return this;
104
+ }
105
+
106
+ /**
107
+ * detach a observer
108
+ *
109
+ * @param {Observer} observer
110
+ * @returns {ProxyObserver}
111
+ */
112
+ detachObserver(observer) {
113
+ this.observers.detach(observer);
114
+ return this;
115
+ }
116
+
117
+ /**
118
+ * notify all observer
119
+ *
120
+ * @returns {Promise}
121
+ */
122
+ notifyObservers() {
123
+ return this.observers.notify(this);
124
+ }
125
+
126
+ /**
127
+ * @param {Observer} observer
128
+ * @returns {boolean}
129
+ */
130
+ containsObserver(observer) {
131
+ return this.observers.contains(observer);
132
+ }
133
133
  }
134
134
 
135
135
  /**
@@ -139,113 +139,113 @@ class ProxyObserver extends Base {
139
139
  * @see {@link https://gitlab.schukai.com/-/snippets/49}
140
140
  */
141
141
  function getHandler() {
142
- const proxy = this;
143
-
144
- // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots
145
- const handler = {
146
- // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver
147
- get: function (target, key, receiver) {
148
- const value = Reflect.get(target, key, receiver);
149
-
150
- if (typeof key === "symbol") {
151
- return value;
152
- }
153
-
154
- if (isPrimitive(value)) {
155
- return value;
156
- }
157
-
158
- // set value as proxy if object or array
159
- if (isArray(value) || isObject(value)) {
160
- if (proxy.objectMap.has(value)) {
161
- return proxy.objectMap.get(value);
162
- } else if (proxy.proxyMap.has(value)) {
163
- return value;
164
- } else {
165
- let p = new Proxy(value, handler);
166
- proxy.objectMap.set(value, p);
167
- proxy.proxyMap.set(p, value);
168
- return p;
169
- }
170
- }
171
-
172
- return value;
173
- },
174
-
175
- // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver
176
- set: function (target, key, value, receiver) {
177
- if (proxy.proxyMap.has(value)) {
178
- value = proxy.proxyMap.get(value);
179
- }
180
-
181
- if (proxy.proxyMap.has(target)) {
182
- target = proxy.proxyMap.get(target);
183
- }
184
-
185
- let current = Reflect.get(target, key, receiver);
186
- if (proxy.proxyMap.has(current)) {
187
- current = proxy.proxyMap.get(current);
188
- }
189
-
190
- if (current === value) {
191
- return true;
192
- }
193
-
194
- let result;
195
- let descriptor = Reflect.getOwnPropertyDescriptor(target, key);
196
-
197
- if (descriptor === undefined) {
198
- descriptor = {
199
- writable: true,
200
- enumerable: true,
201
- configurable: true,
202
- };
203
- }
204
-
205
- descriptor["value"] = value;
206
- result = Reflect.defineProperty(target, key, descriptor);
207
-
208
- if (typeof key !== "symbol") {
209
- proxy.observers.notify(proxy);
210
- }
211
-
212
- return result;
213
- },
214
-
215
- // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-delete-p
216
- deleteProperty: function (target, key) {
217
- if (key in target) {
218
- delete target[key];
219
-
220
- if (typeof key !== "symbol") {
221
- proxy.observers.notify(proxy);
222
- }
223
-
224
- return true;
225
- }
226
- return false;
227
- },
228
-
229
- // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc
230
- defineProperty: function (target, key, descriptor) {
231
- let result = Reflect.defineProperty(target, key, descriptor);
232
- if (typeof key !== "symbol") {
233
- proxy.observers.notify(proxy);
234
- }
235
- return result;
236
- },
237
-
238
- // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v
239
- setPrototypeOf: function (target, key) {
240
- let result = Reflect.setPrototypeOf(object1, key);
241
-
242
- if (typeof key !== "symbol") {
243
- proxy.observers.notify(proxy);
244
- }
245
-
246
- return result;
247
- },
248
- };
249
-
250
- return handler;
142
+ const proxy = this;
143
+
144
+ // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots
145
+ const handler = {
146
+ // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver
147
+ get: function (target, key, receiver) {
148
+ const value = Reflect.get(target, key, receiver);
149
+
150
+ if (typeof key === "symbol") {
151
+ return value;
152
+ }
153
+
154
+ if (isPrimitive(value)) {
155
+ return value;
156
+ }
157
+
158
+ // set value as proxy if object or array
159
+ if (isArray(value) || isObject(value)) {
160
+ if (proxy.objectMap.has(value)) {
161
+ return proxy.objectMap.get(value);
162
+ } else if (proxy.proxyMap.has(value)) {
163
+ return value;
164
+ } else {
165
+ const p = new Proxy(value, handler);
166
+ proxy.objectMap.set(value, p);
167
+ proxy.proxyMap.set(p, value);
168
+ return p;
169
+ }
170
+ }
171
+
172
+ return value;
173
+ },
174
+
175
+ // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver
176
+ set: function (target, key, value, receiver) {
177
+ if (proxy.proxyMap.has(value)) {
178
+ value = proxy.proxyMap.get(value);
179
+ }
180
+
181
+ if (proxy.proxyMap.has(target)) {
182
+ target = proxy.proxyMap.get(target);
183
+ }
184
+
185
+ let current = Reflect.get(target, key, receiver);
186
+ if (proxy.proxyMap.has(current)) {
187
+ current = proxy.proxyMap.get(current);
188
+ }
189
+
190
+ if (current === value) {
191
+ return true;
192
+ }
193
+
194
+ let result;
195
+ let descriptor = Reflect.getOwnPropertyDescriptor(target, key);
196
+
197
+ if (descriptor === undefined) {
198
+ descriptor = {
199
+ writable: true,
200
+ enumerable: true,
201
+ configurable: true,
202
+ };
203
+ }
204
+
205
+ descriptor["value"] = value;
206
+ result = Reflect.defineProperty(target, key, descriptor);
207
+
208
+ if (typeof key !== "symbol") {
209
+ proxy.observers.notify(proxy);
210
+ }
211
+
212
+ return result;
213
+ },
214
+
215
+ // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-delete-p
216
+ deleteProperty: function (target, key) {
217
+ if (key in target) {
218
+ delete target[key];
219
+
220
+ if (typeof key !== "symbol") {
221
+ proxy.observers.notify(proxy);
222
+ }
223
+
224
+ return true;
225
+ }
226
+ return false;
227
+ },
228
+
229
+ // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc
230
+ defineProperty: function (target, key, descriptor) {
231
+ const result = Reflect.defineProperty(target, key, descriptor);
232
+ if (typeof key !== "symbol") {
233
+ proxy.observers.notify(proxy);
234
+ }
235
+ return result;
236
+ },
237
+
238
+ // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v
239
+ setPrototypeOf: function (target, key) {
240
+ const result = Reflect.setPrototypeOf(object1, key);
241
+
242
+ if (typeof key !== "symbol") {
243
+ proxy.observers.notify(proxy);
244
+ }
245
+
246
+ return result;
247
+ },
248
+ };
249
+
250
+ return handler;
251
251
  }
@@ -27,74 +27,74 @@ export { Queue };
27
27
  * @summary A Queue (Fifo)
28
28
  */
29
29
  class Queue extends Base {
30
- /**
31
- *
32
- */
33
- constructor() {
34
- super();
35
- this.data = [];
36
- }
30
+ /**
31
+ *
32
+ */
33
+ constructor() {
34
+ super();
35
+ this.data = [];
36
+ }
37
37
 
38
- /**
39
- * This method is called by the `instanceof` operator.
40
- * @returns {symbol}
41
- * @since 2.1.0
42
- */
43
- static get [instanceSymbol]() {
44
- return Symbol.for("@schukai/monster/types/queue");
45
- }
38
+ /**
39
+ * This method is called by the `instanceof` operator.
40
+ * @returns {symbol}
41
+ * @since 2.1.0
42
+ */
43
+ static get [instanceSymbol]() {
44
+ return Symbol.for("@schukai/monster/types/queue");
45
+ }
46
46
 
47
- /**
48
- * @return {boolean}
49
- */
50
- isEmpty() {
51
- return this.data.length === 0;
52
- }
47
+ /**
48
+ * @return {boolean}
49
+ */
50
+ isEmpty() {
51
+ return this.data.length === 0;
52
+ }
53
53
 
54
- /**
55
- * Read the element at the front of the queue without removing it.
56
- *
57
- * @return {*}
58
- */
59
- peek() {
60
- if (this.isEmpty()) {
61
- return undefined;
62
- }
54
+ /**
55
+ * Read the element at the front of the queue without removing it.
56
+ *
57
+ * @return {*}
58
+ */
59
+ peek() {
60
+ if (this.isEmpty()) {
61
+ return undefined;
62
+ }
63
63
 
64
- return this.data[0];
65
- }
64
+ return this.data[0];
65
+ }
66
66
 
67
- /**
68
- * Add a new element to the end of the queue.
69
- *
70
- * @param {*} value
71
- * @returns {Queue}
72
- */
73
- add(value) {
74
- this.data.push(value);
75
- return this;
76
- }
67
+ /**
68
+ * Add a new element to the end of the queue.
69
+ *
70
+ * @param {*} value
71
+ * @returns {Queue}
72
+ */
73
+ add(value) {
74
+ this.data.push(value);
75
+ return this;
76
+ }
77
77
 
78
- /**
79
- * remove all entries
80
- *
81
- * @returns {Queue}
82
- */
83
- clear() {
84
- this.data = [];
85
- return this;
86
- }
78
+ /**
79
+ * remove all entries
80
+ *
81
+ * @returns {Queue}
82
+ */
83
+ clear() {
84
+ this.data = [];
85
+ return this;
86
+ }
87
87
 
88
- /**
89
- * Remove the element at the front of the queue
90
- * If the queue is empty, return undefined.
91
- *
92
- * @return {*}
93
- */
94
- poll() {
95
- if (this.isEmpty()) {
96
- return undefined;
97
- }
98
- return this.data.shift();
99
- }
88
+ /**
89
+ * Remove the element at the front of the queue
90
+ * If the queue is empty, return undefined.
91
+ *
92
+ * @return {*}
93
+ */
94
+ poll() {
95
+ if (this.isEmpty()) {
96
+ return undefined;
97
+ }
98
+ return this.data.shift();
99
+ }
100
100
  }
@@ -27,19 +27,19 @@ let internalCounter = 0;
27
27
  * @summary class to generate random numbers
28
28
  */
29
29
  class RandomID extends ID {
30
- /**
31
- * create new object
32
- */
33
- constructor() {
34
- super();
30
+ /**
31
+ * create new object
32
+ */
33
+ constructor() {
34
+ super();
35
35
 
36
- internalCounter += 1;
36
+ internalCounter += 1;
37
37
 
38
- this.id =
39
- getGlobal()
40
- .btoa(random(1, 10000))
41
- .replace(/=/g, "")
42
- /** No numbers at the beginning of the ID, because of possible problems with DOM */
43
- .replace(/^[0-9]+/, "X") + internalCounter;
44
- }
38
+ this.id =
39
+ getGlobal()
40
+ .btoa(random(1, 10000))
41
+ .replace(/=/g, "")
42
+ /** No numbers at the beginning of the ID, because of possible problems with DOM */
43
+ .replace(/^[0-9]+/, "X") + internalCounter;
44
+ }
45
45
  }
@@ -21,5 +21,7 @@ export { escapeString };
21
21
  * @throws {TypeError} value is not a string
22
22
  */
23
23
  function escapeString(value) {
24
- return validateString(value).replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
24
+ return validateString(value)
25
+ .replace(/[|\\{}()[\]^$+*?.]/g, "\\$&")
26
+ .replace(/-/g, "\\x2d");
25
27
  }