@schukai/monster 1.31.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. package/CHANGELOG +11 -0
  2. package/README.md +55 -58
  3. package/example/constraints/andoperator.mjs +17 -0
  4. package/example/constraints/invalid.mjs +6 -0
  5. package/example/constraints/isarray.mjs +11 -0
  6. package/example/constraints/isobject.mjs +12 -0
  7. package/example/constraints/oroperator.mjs +15 -0
  8. package/example/constraints/valid.mjs +6 -0
  9. package/example/data/buildmap.mjs +67 -0
  10. package/example/data/datasource.mjs +7 -0
  11. package/example/data/diff.mjs +39 -0
  12. package/example/data/pathfinder-1.mjs +23 -0
  13. package/example/data/pathfinder-2.mjs +19 -0
  14. package/example/data/pipe.mjs +14 -0
  15. package/example/data/storage/restapi.mjs +11 -0
  16. package/example/data/transformer.mjs +9 -0
  17. package/example/dom/customelement.mjs +13 -0
  18. package/example/dom/theme.mjs +5 -0
  19. package/example/dom/updater.mjs +23 -0
  20. package/example/i18n/formatter.mjs +10 -0
  21. package/example/i18n/providers/fetch.mjs +5 -0
  22. package/example/i18n/translations.mjs +20 -0
  23. package/example/types/basewithoptions.mjs +10 -0
  24. package/example/types/is-1.mjs +5 -0
  25. package/example/types/is-10.mjs +6 -0
  26. package/example/types/is-2.mjs +4 -0
  27. package/example/types/is-3.mjs +4 -0
  28. package/example/types/is-4.mjs +5 -0
  29. package/example/types/is-5.mjs +4 -0
  30. package/example/types/is-6.mjs +4 -0
  31. package/example/types/is-7.mjs +4 -0
  32. package/example/types/is-8.mjs +4 -0
  33. package/example/types/is-9.mjs +6 -0
  34. package/example/types/noderecursiveiterator.mjs +32 -0
  35. package/example/types/observer.mjs +9 -0
  36. package/example/types/proxyobserver.mjs +25 -0
  37. package/example/types/queue.mjs +20 -0
  38. package/example/types/tokenlist-1.mjs +4 -0
  39. package/example/types/tokenlist-2.mjs +7 -0
  40. package/example/types/tokenlist-3.mjs +5 -0
  41. package/example/types/tokenlist-4.mjs +5 -0
  42. package/example/types/tokenlist-5.mjs +5 -0
  43. package/example/types/typeof.mjs +9 -0
  44. package/example/types/version-1.mjs +6 -0
  45. package/example/types/version-2.mjs +3 -0
  46. package/example/util/comparator.mjs +10 -0
  47. package/example/util/deadmansswitch.mjs +9 -0
  48. package/example/util/processing.mjs +17 -0
  49. package/package.json +5 -59
  50. package/source/{constants.js → constants.mjs} +7 -10
  51. package/source/constraints/{abstract.js → abstract.mjs} +8 -9
  52. package/source/constraints/{abstractoperator.js → abstractoperator.mjs} +11 -8
  53. package/source/constraints/andoperator.mjs +38 -0
  54. package/source/constraints/invalid.mjs +38 -0
  55. package/source/constraints/isarray.mjs +41 -0
  56. package/source/constraints/isobject.mjs +41 -0
  57. package/source/constraints/{namespace.js → namespace.mjs} +3 -8
  58. package/source/constraints/{oroperator.js → oroperator.mjs} +10 -42
  59. package/source/constraints/valid.mjs +38 -0
  60. package/source/data/{buildmap.js → buildmap.mjs} +18 -104
  61. package/source/data/{buildtree.js → buildtree.mjs} +11 -31
  62. package/source/data/datasource/{namespace.js → namespace.mjs} +1 -9
  63. package/source/data/datasource/restapi/namespace.mjs +8 -0
  64. package/source/data/datasource/restapi/{writeerror.js → writeerror.mjs} +8 -9
  65. package/source/data/datasource/{restapi.js → restapi.mjs} +15 -45
  66. package/source/data/datasource/storage/localstorage.mjs +45 -0
  67. package/source/data/datasource/storage/{namespace.js → namespace.mjs} +1 -9
  68. package/source/data/datasource/storage/sessionstorage.mjs +45 -0
  69. package/source/data/datasource/{storage.js → storage.mjs} +12 -35
  70. package/source/data/{datasource.js → datasource.mjs} +17 -45
  71. package/source/data/{diff.js → diff.mjs} +10 -69
  72. package/source/data/{extend.js → extend.mjs} +10 -28
  73. package/source/data/{namespace.js → namespace.mjs} +2 -8
  74. package/source/data/{pathfinder.js → pathfinder.mjs} +18 -77
  75. package/source/data/{pipe.js → pipe.mjs} +14 -46
  76. package/source/data/{transformer.js → transformer.mjs} +18 -43
  77. package/source/dom/{assembler.js → assembler.mjs} +12 -28
  78. package/source/dom/{attributes.js → attributes.mjs} +42 -253
  79. package/source/dom/{constants.js → constants.mjs} +110 -61
  80. package/source/dom/{customcontrol.js → customcontrol.mjs} +10 -17
  81. package/source/dom/{customelement.js → customelement.mjs} +28 -52
  82. package/source/dom/{events.js → events.mjs} +15 -64
  83. package/source/dom/{focusmanager.js → focusmanager.mjs} +13 -34
  84. package/source/dom/{locale.js → locale.mjs} +11 -26
  85. package/source/dom/{namespace.js → namespace.mjs} +1 -8
  86. package/source/dom/{ready.js → ready.mjs} +12 -30
  87. package/source/dom/resource/{data.js → data.mjs} +11 -31
  88. package/source/dom/resource/link/namespace.mjs +10 -0
  89. package/source/dom/resource/link/stylesheet.mjs +35 -0
  90. package/source/dom/resource/{link.js → link.mjs} +9 -29
  91. package/source/dom/resource/namespace.mjs +8 -0
  92. package/source/dom/resource/{script.js → script.mjs} +9 -29
  93. package/source/dom/{resource.js → resource.mjs} +19 -39
  94. package/source/dom/{resourcemanager.js → resourcemanager.mjs} +17 -35
  95. package/source/dom/{template.js → template.mjs} +18 -43
  96. package/source/dom/{theme.js → theme.mjs} +14 -36
  97. package/source/dom/{updater.js → updater.mjs} +34 -68
  98. package/source/dom/{util.js → util.mjs} +17 -66
  99. package/source/dom/worker/{factory.js → factory.mjs} +13 -34
  100. package/source/dom/worker/namespace.mjs +8 -0
  101. package/source/i18n/{formatter.js → formatter.mjs} +14 -45
  102. package/source/i18n/{locale.js → locale.mjs} +15 -30
  103. package/source/i18n/{namespace.js → namespace.mjs} +1 -9
  104. package/source/i18n/provider.mjs +40 -0
  105. package/source/i18n/providers/{fetch.js → fetch.mjs} +18 -43
  106. package/source/i18n/providers/namespace.mjs +8 -0
  107. package/source/i18n/{translations.js → translations.mjs} +12 -52
  108. package/source/logging/handler/console.mjs +50 -0
  109. package/source/logging/handler/namespace.mjs +6 -0
  110. package/source/logging/{handler.js → handler.mjs} +13 -30
  111. package/source/logging/logentry.mjs +51 -0
  112. package/source/logging/{logger.js → logger.mjs} +12 -28
  113. package/source/logging/{namespace.js → namespace.mjs} +1 -9
  114. package/source/math/{namespace.js → namespace.mjs} +1 -9
  115. package/source/math/{random.js → random.mjs} +8 -34
  116. package/source/monster.mjs +114 -0
  117. package/source/text/{formatter.js → formatter.mjs} +17 -33
  118. package/source/text/{namespace.js → namespace.mjs} +1 -9
  119. package/source/types/base.mjs +31 -0
  120. package/source/types/{basewithoptions.js → basewithoptions.mjs} +17 -46
  121. package/source/types/{binary.js → binary.mjs} +10 -42
  122. package/source/types/{dataurl.js → dataurl.mjs} +12 -46
  123. package/source/types/{global.js → global.mjs} +20 -12
  124. package/source/types/{id.js → id.mjs} +10 -27
  125. package/source/types/is.mjs +225 -0
  126. package/source/types/{mediatype.js → mediatype.mjs} +13 -29
  127. package/source/types/{namespace.js → namespace.mjs} +1 -8
  128. package/source/types/{node.js → node.mjs} +11 -28
  129. package/source/types/{nodelist.js → nodelist.mjs} +17 -32
  130. package/source/types/{noderecursiveiterator.js → noderecursiveiterator.mjs} +14 -65
  131. package/source/types/{observer.js → observer.mjs} +15 -42
  132. package/source/types/{observerlist.js → observerlist.mjs} +12 -29
  133. package/source/types/{proxyobserver.js → proxyobserver.mjs} +19 -62
  134. package/source/types/{queue.js → queue.mjs} +10 -47
  135. package/source/types/randomid.mjs +45 -0
  136. package/source/types/regex.mjs +27 -0
  137. package/source/types/{stack.js → stack.mjs} +8 -24
  138. package/source/types/{tokenlist.js → tokenlist.mjs} +20 -64
  139. package/source/types/typeof.mjs +37 -0
  140. package/source/types/{uniquequeue.js → uniquequeue.mjs} +11 -27
  141. package/source/types/{uuid.js → uuid.mjs} +15 -33
  142. package/source/types/{validate.js → validate.mjs} +38 -155
  143. package/source/types/{version.js → version.mjs} +19 -62
  144. package/source/util/{clone.js → clone.mjs} +10 -28
  145. package/source/util/{comparator.js → comparator.mjs} +13 -43
  146. package/source/util/{deadmansswitch.js → deadmansswitch.mjs} +15 -40
  147. package/source/util/freeze.mjs +39 -0
  148. package/source/util/{namespace.js → namespace.mjs} +1 -9
  149. package/source/util/{processing.js → processing.mjs} +13 -51
  150. package/source/util/{trimspaces.js → trimspaces.mjs} +14 -21
  151. package/test/cases/constraint/{andoperator.js → andoperator.mjs} +3 -3
  152. package/test/cases/constraint/{invalid.js → invalid.mjs} +1 -1
  153. package/test/cases/constraint/{isarray.js → isarray.mjs} +1 -1
  154. package/test/cases/constraint/{isobject.js → isobject.mjs} +1 -1
  155. package/test/cases/constraint/{oroperator.js → oroperator.mjs} +3 -3
  156. package/test/cases/constraint/{valid.js → valid.mjs} +1 -1
  157. package/test/cases/data/{buildmap.js → buildmap.mjs} +1 -1
  158. package/test/cases/data/{buildtree.js → buildtree.mjs} +2 -2
  159. package/test/cases/data/datasource/{restapi.js → restapi.mjs} +5 -5
  160. package/test/cases/data/datasource/storage/{localstorage.js → localstorage.mjs} +5 -5
  161. package/test/cases/data/datasource/storage/{sessionstorage.js → sessionstorage.mjs} +5 -5
  162. package/test/cases/data/{datasource.js → datasource.mjs} +1 -1
  163. package/test/cases/data/{diff.js → diff.mjs} +2 -2
  164. package/test/cases/data/{extend.js → extend.mjs} +1 -1
  165. package/test/cases/data/{pathfinder.js → pathfinder.mjs} +1 -1
  166. package/test/cases/data/{pipe.js → pipe.mjs} +19 -5
  167. package/test/cases/data/{transformer.js → transformer.mjs} +14 -10
  168. package/test/cases/dom/{assembler.js → assembler.mjs} +2 -2
  169. package/test/cases/dom/{attributes.js → attributes.mjs} +2 -2
  170. package/test/cases/dom/{customcontrol.js → customcontrol.mjs} +6 -6
  171. package/test/cases/dom/{customelement.js → customelement.mjs} +6 -6
  172. package/test/cases/dom/{events.js → events.mjs} +2 -2
  173. package/test/cases/dom/{focusmanager.js → focusmanager.mjs} +3 -3
  174. package/test/cases/dom/{locale.js → locale.mjs} +2 -2
  175. package/test/cases/dom/{ready.js → ready.mjs} +2 -2
  176. package/test/cases/dom/resource/{data.js → data.mjs} +9 -9
  177. package/test/cases/dom/resource/link/{stylesheet.js → stylesheet.mjs} +6 -6
  178. package/test/cases/dom/resource/{link.js → link.mjs} +6 -6
  179. package/test/cases/dom/resource/{script.js → script.mjs} +6 -6
  180. package/test/cases/dom/{resourcemanager.js → resourcemanager.mjs} +6 -6
  181. package/test/cases/dom/{template.js → template.mjs} +3 -3
  182. package/test/cases/dom/{theme.js → theme.mjs} +3 -3
  183. package/test/cases/dom/{updater.js → updater.mjs} +6 -6
  184. package/test/cases/dom/{util.js → util.mjs} +2 -2
  185. package/test/cases/dom/worker/{factory.js → factory.mjs} +4 -4
  186. package/test/cases/i18n/{formatter.js → formatter.mjs} +2 -2
  187. package/test/cases/i18n/{locale.js → locale.mjs} +1 -1
  188. package/test/cases/i18n/{provider.js → provider.mjs} +1 -1
  189. package/test/cases/i18n/providers/{fetch.js → fetch.mjs} +3 -3
  190. package/test/cases/i18n/{translations.js → translations.mjs} +2 -2
  191. package/test/cases/logging/handler/{console.js → console.mjs} +3 -3
  192. package/test/cases/logging/{handler.js → handler.mjs} +3 -3
  193. package/test/cases/logging/{logentry.js → logentry.mjs} +1 -1
  194. package/test/cases/logging/{logger.js → logger.mjs} +1 -1
  195. package/test/cases/math/random.mjs +101 -0
  196. package/test/cases/monster.mjs +20 -0
  197. package/test/cases/text/{formatter.js → formatter.mjs} +1 -1
  198. package/test/cases/types/{base.js → base.mjs} +1 -1
  199. package/test/cases/types/{basewithoptions.js → basewithoptions.mjs} +1 -1
  200. package/test/cases/types/{binary.js → binary.mjs} +1 -1
  201. package/test/cases/types/{dataurl.js → dataurl.mjs} +1 -1
  202. package/test/cases/types/{global.js → global.mjs} +1 -1
  203. package/test/cases/types/{id.js → id.mjs} +17 -6
  204. package/test/cases/types/{is.js → is.mjs} +20 -8
  205. package/test/cases/types/{mediatype.js → mediatype.mjs} +1 -1
  206. package/test/cases/types/{node.js → node.mjs} +3 -3
  207. package/test/cases/types/{nodelist.js → nodelist.mjs} +2 -2
  208. package/test/cases/types/{noderecursiveiterator.js → noderecursiveiterator.mjs} +3 -3
  209. package/test/cases/types/{observer.js → observer.mjs} +1 -1
  210. package/test/cases/types/{observerlist.js → observerlist.mjs} +2 -2
  211. package/test/cases/types/{proxyobserver.js → proxyobserver.mjs} +4 -4
  212. package/test/cases/types/{queue.js → queue.mjs} +1 -1
  213. package/test/cases/types/randomid.mjs +39 -0
  214. package/test/cases/types/regex.mjs +46 -0
  215. package/test/cases/types/{stack.js → stack.mjs} +1 -1
  216. package/test/cases/types/{tokenlist.js → tokenlist.mjs} +1 -1
  217. package/test/cases/types/{typeof.js → typeof.mjs} +3 -4
  218. package/test/cases/types/{uniquequeue.js → uniquequeue.mjs} +1 -1
  219. package/test/cases/types/{uuid.js → uuid.mjs} +30 -10
  220. package/test/cases/types/{validate.js → validate.mjs} +3 -4
  221. package/test/cases/types/{version.js → version.mjs} +1 -2
  222. package/test/cases/util/{clone.js → clone.mjs} +1 -1
  223. package/test/cases/util/{comparator.js → comparator.mjs} +1 -1
  224. package/test/cases/util/{deadmansswitch.js → deadmansswitch.mjs} +1 -1
  225. package/test/cases/util/{freeze.js → freeze.mjs} +1 -1
  226. package/test/cases/util/{processing.js → processing.mjs} +1 -1
  227. package/test/cases/util/{trimspaces.js → trimspaces.mjs} +1 -1
  228. package/test/util/{chai-dom.js → chai-dom.mjs} +0 -0
  229. package/test/util/{cleanupdom.js → cleanupdom.mjs} +0 -0
  230. package/test/util/{jsdom.js → jsdom.mjs} +2 -2
  231. package/test/util/{localstorage.js → localstorage.mjs} +0 -0
  232. package/test/web/import.js +77 -78
  233. package/test/web/prepare.js +0 -8
  234. package/test/web/test.html +5 -4
  235. package/test/web/tests.js +25731 -587
  236. package/dist/modules/constants.js +0 -2
  237. package/dist/modules/constraints/abstract.js +0 -2
  238. package/dist/modules/constraints/abstractoperator.js +0 -2
  239. package/dist/modules/constraints/andoperator.js +0 -2
  240. package/dist/modules/constraints/invalid.js +0 -2
  241. package/dist/modules/constraints/isarray.js +0 -2
  242. package/dist/modules/constraints/isobject.js +0 -2
  243. package/dist/modules/constraints/namespace.js +0 -2
  244. package/dist/modules/constraints/oroperator.js +0 -2
  245. package/dist/modules/constraints/valid.js +0 -2
  246. package/dist/modules/data/buildmap.js +0 -2
  247. package/dist/modules/data/buildtree.js +0 -2
  248. package/dist/modules/data/datasource/namespace.js +0 -2
  249. package/dist/modules/data/datasource/restapi/writeerror.js +0 -2
  250. package/dist/modules/data/datasource/restapi.js +0 -2
  251. package/dist/modules/data/datasource/storage/localstorage.js +0 -2
  252. package/dist/modules/data/datasource/storage/namespace.js +0 -2
  253. package/dist/modules/data/datasource/storage/sessionstorage.js +0 -2
  254. package/dist/modules/data/datasource/storage.js +0 -2
  255. package/dist/modules/data/datasource.js +0 -2
  256. package/dist/modules/data/diff.js +0 -2
  257. package/dist/modules/data/extend.js +0 -2
  258. package/dist/modules/data/namespace.js +0 -2
  259. package/dist/modules/data/pathfinder.js +0 -2
  260. package/dist/modules/data/pipe.js +0 -2
  261. package/dist/modules/data/transformer.js +0 -2
  262. package/dist/modules/dom/assembler.js +0 -2
  263. package/dist/modules/dom/attributes.js +0 -2
  264. package/dist/modules/dom/constants.js +0 -2
  265. package/dist/modules/dom/customcontrol.js +0 -2
  266. package/dist/modules/dom/customelement.js +0 -2
  267. package/dist/modules/dom/events.js +0 -2
  268. package/dist/modules/dom/focusmanager.js +0 -2
  269. package/dist/modules/dom/locale.js +0 -2
  270. package/dist/modules/dom/namespace.js +0 -2
  271. package/dist/modules/dom/ready.js +0 -2
  272. package/dist/modules/dom/resource/data.js +0 -2
  273. package/dist/modules/dom/resource/link/stylesheet.js +0 -2
  274. package/dist/modules/dom/resource/link.js +0 -2
  275. package/dist/modules/dom/resource/script.js +0 -2
  276. package/dist/modules/dom/resource.js +0 -2
  277. package/dist/modules/dom/resourcemanager.js +0 -2
  278. package/dist/modules/dom/template.js +0 -2
  279. package/dist/modules/dom/theme.js +0 -2
  280. package/dist/modules/dom/updater.js +0 -2
  281. package/dist/modules/dom/util.js +0 -2
  282. package/dist/modules/dom/worker/factory.js +0 -2
  283. package/dist/modules/i18n/formatter.js +0 -2
  284. package/dist/modules/i18n/locale.js +0 -2
  285. package/dist/modules/i18n/namespace.js +0 -2
  286. package/dist/modules/i18n/provider.js +0 -2
  287. package/dist/modules/i18n/providers/fetch.js +0 -2
  288. package/dist/modules/i18n/providers/namespace.js +0 -2
  289. package/dist/modules/i18n/translations.js +0 -2
  290. package/dist/modules/logging/handler/console.js +0 -2
  291. package/dist/modules/logging/handler/namespace.js +0 -2
  292. package/dist/modules/logging/handler.js +0 -2
  293. package/dist/modules/logging/logentry.js +0 -2
  294. package/dist/modules/logging/logger.js +0 -2
  295. package/dist/modules/logging/namespace.js +0 -2
  296. package/dist/modules/math/namespace.js +0 -2
  297. package/dist/modules/math/random.js +0 -2
  298. package/dist/modules/monster.js +0 -2
  299. package/dist/modules/namespace.js +0 -2
  300. package/dist/modules/text/formatter.js +0 -2
  301. package/dist/modules/text/namespace.js +0 -2
  302. package/dist/modules/types/base.js +0 -2
  303. package/dist/modules/types/basewithoptions.js +0 -2
  304. package/dist/modules/types/binary.js +0 -2
  305. package/dist/modules/types/dataurl.js +0 -2
  306. package/dist/modules/types/global.js +0 -2
  307. package/dist/modules/types/id.js +0 -2
  308. package/dist/modules/types/is.js +0 -2
  309. package/dist/modules/types/mediatype.js +0 -2
  310. package/dist/modules/types/namespace.js +0 -2
  311. package/dist/modules/types/node.js +0 -2
  312. package/dist/modules/types/nodelist.js +0 -2
  313. package/dist/modules/types/noderecursiveiterator.js +0 -2
  314. package/dist/modules/types/observer.js +0 -2
  315. package/dist/modules/types/observerlist.js +0 -2
  316. package/dist/modules/types/proxyobserver.js +0 -2
  317. package/dist/modules/types/queue.js +0 -2
  318. package/dist/modules/types/randomid.js +0 -2
  319. package/dist/modules/types/regex.js +0 -2
  320. package/dist/modules/types/stack.js +0 -2
  321. package/dist/modules/types/tokenlist.js +0 -2
  322. package/dist/modules/types/typeof.js +0 -2
  323. package/dist/modules/types/uniquequeue.js +0 -2
  324. package/dist/modules/types/uuid.js +0 -2
  325. package/dist/modules/types/validate.js +0 -2
  326. package/dist/modules/types/version.js +0 -2
  327. package/dist/modules/util/clone.js +0 -2
  328. package/dist/modules/util/comparator.js +0 -2
  329. package/dist/modules/util/deadmansswitch.js +0 -2
  330. package/dist/modules/util/freeze.js +0 -2
  331. package/dist/modules/util/namespace.js +0 -2
  332. package/dist/modules/util/processing.js +0 -2
  333. package/dist/modules/util/trimspaces.js +0 -2
  334. package/dist/monster.dev.js +0 -15490
  335. package/dist/monster.dev.js.map +0 -1
  336. package/dist/monster.js +0 -2
  337. package/source/constraints/andoperator.js +0 -71
  338. package/source/constraints/invalid.js +0 -63
  339. package/source/constraints/isarray.js +0 -71
  340. package/source/constraints/isobject.js +0 -72
  341. package/source/constraints/valid.js +0 -63
  342. package/source/data/datasource/storage/localstorage.js +0 -64
  343. package/source/data/datasource/storage/sessionstorage.js +0 -61
  344. package/source/dom/resource/link/stylesheet.js +0 -54
  345. package/source/i18n/provider.js +0 -58
  346. package/source/i18n/providers/namespace.js +0 -16
  347. package/source/logging/handler/console.js +0 -66
  348. package/source/logging/handler/namespace.js +0 -14
  349. package/source/logging/logentry.js +0 -68
  350. package/source/monster.js +0 -80
  351. package/source/namespace.js +0 -171
  352. package/source/types/base.js +0 -50
  353. package/source/types/is.js +0 -429
  354. package/source/types/package.d.ts +0 -1
  355. package/source/types/randomid.js +0 -60
  356. package/source/types/regex.js +0 -49
  357. package/source/types/typeof.js +0 -63
  358. package/source/util/freeze.js +0 -57
  359. package/test/cases/math/random.js +0 -82
  360. package/test/cases/monster.js +0 -23
  361. package/test/cases/namespace.js +0 -93
  362. package/test/cases/types/randomid.js +0 -24
  363. package/test/cases/types/regex.js +0 -32
  364. package/test/web/monster-dev.html +0 -22
  365. package/test/web/monster.html +0 -21
package/CHANGELOG CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [2.0.0] - 2022-08-08
6
+
7
+ - New structure in the repo
8
+ - Remove namespace functionality
9
+ - Switching the tests to esbuild
10
+ - Actualization of the documentation template
11
+ - New URL of the documentation
12
+ - Bug fix typeOf (constructor name was recognized wrong)
13
+ - Removal of the built version of the library
14
+ - Switching from js to mjs
15
+
5
16
  ## [1.31.0] - 2022-02-07
6
17
 
7
18
  ## Added
package/README.md CHANGED
@@ -1,88 +1,86 @@
1
1
  # Monster
2
2
 
3
- Monster is a lightweight, robust and easy-to-use library with modest ambitions.
4
- Monster integrates easily into your existing websites without taking over
5
- everything.
3
+ Monster is perfectly suited for the creation of beautiful and fast
4
+ user interfaces and websites.
6
5
 
7
- It is not the goal of Monster to pull in a completely new abstraction
8
- with its own language, but to combine the existing techniques of HTML,
9
- CSS and Javascript in a meaningful way.
6
+ Monster relies on proven concepts mixed with many new JavaScript concepts such as
7
+ classes, WeakRef, WeakMaps, proxies or the MutationObserver interface, just to name a few.
10
8
 
11
- Monster is perfectly suited for the creation of beautiful and fast
12
- user interfaces and websites. The basis is formed by core functions that
13
- can be supplemented by necessary classes and objects.
9
+ Monster integrates easily into your existing websites without taking over everything.
14
10
 
15
- One design target is to reach the shiny sun with as little Javascript as possible.
11
+ It is not the goal of Monster to pull in an entirely new abstraction
12
+ with its own language, but to combine the existing techniques of HTML,
13
+ CSS and JavaScript in a meaningful way.
14
+
15
+ One design target is to reach the shiny sun with as little JavaScript as possible.
16
16
 
17
17
  Monster was built with ES6 modules and uses [import](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/import)
18
18
  and [export](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export).
19
19
 
20
- There is a version in the `/dist` folder that was built via [webpack](https://github.com/webpack/webpack) and
21
- thus supports all browsers that are compatible with [ES5](https://caniuse.com/es5).
20
+ For some functions, you need additional [polyfills](#polyfill).
21
+
22
+ ## Documentation
22
23
 
23
- For some functions you need additional [polyfills](#polyfill).
24
+ To check out docs and examples, visit [monsterjs.org/en/doc/monster/](https://monsterjs.org/en/doc/monster/).
24
25
 
25
26
  ## Installation
26
27
 
27
- `npm install @schukai/monster`
28
+ `npm install @schukai/monster`, `yarn install @schukai/monster` or `pnpm install @schukai/monster`
28
29
 
29
- ## CDN
30
+ ## Usage
30
31
 
31
- ```
32
- <!DOCTYPE html>
33
- <html>
34
- <head>
35
- <title>HTML, CSS and JavaScript demo</title>
36
- </head>
37
-
38
- <body>
39
- <p>Hello Monster <span id="version"></span>!</p>
40
- <script type="module">
41
- import {
42
- Monster
43
- } from 'https://unpkg.com/@schukai/monster@1.31.0/dist/modules/monster.js';
44
- let id = document.getElementById('version');
45
- id.innerHTML = Monster.getVersion();
46
- </script>
47
- </body>
48
- </html>
49
- ```
32
+ A simple example of the use of functionality from Monster. We create a small file `index.mjs`.
33
+ The `m` in `.mjs` stands for module. In the example we want to make substitutions in a string.
50
34
 
51
- `nomodule` for backwards compatibility
35
+ ```js
36
+ import {Formatter} from '@schukai/monster/source/text/formatter.mjs';
37
+ const text = '${mykey${subkey}}';
38
+ let obj = {
39
+ mykey2: "1",
40
+ subkey: "2"
41
+ };
52
42
 
43
+ new Formatter(obj).format(text);
44
+ // ↦ 1
53
45
  ```
54
- <script type="module" src="https://unpkg.com/@schukai/monster@1.31.0/dist/modules/monster.js"></script>
55
- <script nomodule src="https://unpkg.com/@schukai/monster@1.31.0/dist/monster.js"></script>
56
- ```
57
- ### Polyfill
58
46
 
59
- We do try to work around some browser bugs, but on the whole we don't use polyfills and feature detection.
60
-
61
- However, many functions can be mapped via [polyfill.io](https://polyfill.io/) and thus the compatibility can be increased.
47
+ To integrate this function into a website it is recommended to use a bundler like [esbuild](https://esbuild.github.io/).
62
48
 
49
+ ```sh
50
+ esbuild index.mjs --outfile dist.js
63
51
  ```
64
- <script id="polyfill" src="https://polyfill.io/v3/polyfill.min.js?features=Array.from,Array.isArray,Array.prototype.entries,Array.prototype.fill,Array.prototype.filter,Array.prototype.forEach,Array.prototype.indexOf,Array.prototype.keys,Array.prototype.lastIndexOf,Array.prototype.map,Array.prototype.reduce,Array.prototype.sort,ArrayBuffer,atob,CustomEvent,DataView,document,Document,DocumentFragment,Element,Event,fetch,globalThis,HTMLDocument,HTMLTemplateElement,Intl,JSON,Map,Math.log2,Number.isInteger,Object.assign,Object.defineProperty,Object.entries,Object.freeze,Object.getOwnPropertyDescriptor,Object.getOwnPropertyNames,Object.getPrototypeOf,Object.keys,Promise,Reflect,Reflect.defineProperty,Reflect.get,Reflect.getOwnPropertyDescriptor,Reflect.setPrototypeOf,Set,String.prototype.endsWith,String.prototype.padStart,String.prototype.startsWith,String.prototype.trim,Symbol,Symbol.iterator,Uint16Array,Uint8Array,URL,WeakMap,WeakSet"
65
- crossorigin="anonymous"
66
- referrerpolicy="no-referrer"></script>
52
+
53
+ We can now integrate that into our website.
54
+
55
+ ```html
56
+ <!DOCTYPE html>
57
+ <html lang="en">
58
+ <head>
59
+ <meta charset="UTF-8">
60
+ <title>Monster</title>
61
+ <script src="dist.js"></script>
62
+ </head>
63
+ <body>
67
64
  ```
68
65
 
69
- ### Compatibility
66
+ Voila!
70
67
 
71
- if the global name Monster, is already used by another component, the following variable can be used to adapt the name of the component.
72
68
 
73
- ```
74
- __MonsterRootName__="MyMonster"
75
- ```
69
+ ### Polyfill
76
70
 
77
- After that, all classes are accessible via `MyMonster`. For example `MyMonster.getVersion()`.
71
+ We do try to work around some browser bugs, but on the whole we don't use polyfills and feature detection.
78
72
 
79
- ## Documentation
73
+ However, many functions can be mapped via [polyfill.io](https://polyfill.io/) and thus the compatibility can be increased.
80
74
 
81
- To check out docs and examples, visit [monsterjs.org/en/doc/latest/](https://monsterjs.org/en/doc/latest/).
75
+ ```
76
+ <script id="polyfill" src="https://polyfill.io/v3/polyfill.min.js?features=Array.from,Array.isArray,Array.prototype.entries,Array.prototype.fill,Array.prototype.forEach,Array.prototype.indexOf,Array.prototype.keys,Array.prototype.lastIndexOf,Array.prototype.map,Array.prototype.reduce,Array.prototype.sort,ArrayBuffer,atob,DataView,document,DocumentFragment,Element,Event,globalThis,HTMLDocument,HTMLTemplateElement,JSON,Map,Math.log2,Number.isInteger,Object.assign,Object.defineProperty,Object.entries,Object.getOwnPropertyDescriptor,Object.getPrototypeOf,Object.keys,Promise,Reflect,Reflect.defineProperty,Reflect.get,Reflect.getOwnPropertyDescriptor,Reflect.setPrototypeOf,Set,String.prototype.endsWith,String.prototype.matchAll,String.prototype.padStart,String.prototype.startsWith,String.prototype.trim,Symbol,Symbol.iterator,WeakMap,WeakSet"
77
+ crossorigin="anonymous"
78
+ referrerpolicy="no-referrer"></script>
79
+ ```
82
80
 
83
81
  ## Questions
84
82
 
85
- For questions and commercial support please contact [schukai GmbH](https://www.schukai.com/).
83
+ For questions and commercial support, please contact [schukai GmbH](https://www.schukai.com/).
86
84
  The issue list of this repo is exclusively for bug reports and feature requests.
87
85
 
88
86
  ## Issues
@@ -92,14 +90,13 @@ issue. Issues not conforming to the guidelines may be closed immediately.
92
90
 
93
91
  ## License
94
92
 
95
- Copyright © 2021 schukai GmbH
93
+ Copyright © 2022 schukai GmbH
96
94
 
97
95
  [AGPL](https://www.gnu.org/licenses/agpl-3.0.de.html)
98
96
 
99
- you can also purchase a commercial licence
97
+ You can also purchase a commercial license.
100
98
 
101
99
  ## Changelog
102
100
 
103
101
  Detailed changes for each release are documented in
104
- the [CHANGELOG](https://gitlab.schukai.com/oss/libraries/javascript/monster/-/blob/master/packages/monster/CHANGELOG).
105
-
102
+ the [CHANGELOG](https://gitlab.schukai.com/oss/libraries/javascript/monster/-/blob/master/application/CHANGELOG).
@@ -0,0 +1,17 @@
1
+ import {Valid} from '@schukai/monster/source/constraints/valid.mjs';
2
+ import {Invalid} from '@schukai/monster/source/constraints/invalid.mjs';
3
+ import {AndOperator} from '@schukai/monster/source/constraints/andoperator.mjs';
4
+
5
+ new AndOperator(
6
+ new Valid(), new Valid()).isValid()
7
+ .then(() => console.log(true))
8
+ .catch(() => console.log(false));
9
+ // ↦ true
10
+
11
+ new AndOperator(
12
+ new Invalid(), new Valid()).isValid()
13
+ .then(() => console.log(true))
14
+ .catch(() => console.log(false));
15
+ // ↦ false
16
+
17
+
@@ -0,0 +1,6 @@
1
+ import {Invalid} from '@schukai/monster/source/constraints/invalid.mjs';
2
+
3
+ new Invalid().isValid()
4
+ .then(() => console.log(true))
5
+ .catch(() => console.log(false));
6
+ // ↦ false
@@ -0,0 +1,11 @@
1
+ import {IsArray} from '@schukai/monster/source/constraints/isarray.mjs';
2
+
3
+ new IsArray()
4
+ .isValid([])
5
+ .then(() => console.log(true));
6
+ // ↦ true
7
+
8
+ new IsArray()
9
+ .isValid(99)
10
+ .catch(e => console.log(e));
11
+ // ↦ 99
@@ -0,0 +1,12 @@
1
+ import {IsObject} from '@schukai/monster/source/constraints/isobject.mjs';
2
+
3
+ new IsObject()
4
+ .isValid({})
5
+ .then(() => console.log(true));
6
+ // ↦ true
7
+
8
+
9
+ new IsObject()
10
+ .isValid(99)
11
+ .catch(e => console.log(e));
12
+ // ↦ 99
@@ -0,0 +1,15 @@
1
+ import {Valid} from '@schukai/monster/source/constraints/valid.mjs';
2
+ import {Invalid} from '@schukai/monster/source/constraints/invalid.mjs';
3
+ import {OrOperator} from '@schukai/monster/source/constraints/oroperator.mjs';
4
+
5
+ new OrOperator(
6
+ new Valid(), new Invalid()).isValid()
7
+ .then(() => console.log(true))
8
+ .catch(() => console.log(false));
9
+ // ↦ true
10
+
11
+ new OrOperator(
12
+ new Invalid(), new Invalid()).isValid()
13
+ .then(() => console.log(true))
14
+ .catch(() => console.log(false));
15
+ // ↦ false
@@ -0,0 +1,6 @@
1
+ import {Valid} from '@schukai/monster/source/constraints/valid.mjs';
2
+
3
+ new Valid().isValid()
4
+ .then(() => console.log(true))
5
+ .catch(() => console.log(false));
6
+ // ↦ true
@@ -0,0 +1,67 @@
1
+ import {buildMap} from '@schukai/monster/source/data/buildmap.mjs';
2
+ // a typical data structure as reported by an api
3
+
4
+ let map;
5
+ let obj = {
6
+ "data": [
7
+ {
8
+ "id": 10,
9
+ "name": "Cassandra",
10
+ "address": {
11
+ "street": "493-4105 Vulputate Street",
12
+ "city": "Saumur",
13
+ "zip": "52628"
14
+ }
15
+ },
16
+ {
17
+ "id": 20,
18
+ "name": "Holly",
19
+ "address": {
20
+ "street": "1762 Eget Rd.",
21
+ "city": "Schwalbach",
22
+ "zip": "952340"
23
+ }
24
+ },
25
+ {
26
+ "id": 30,
27
+ "name": "Guy",
28
+ "address": {
29
+ "street": "957-388 Sollicitudin Avenue",
30
+ "city": "Panchià",
31
+ "zip": "420729"
32
+ }
33
+ }
34
+ ]
35
+ };
36
+
37
+ // The function is passed this data structure and with the help of the selector `'data.*'` the data to be considered are selected.
38
+ // The key is given by a simple definition `'id'` and the value is given by a template `'${name} (${address.zip} ${address.city})'`.
39
+ map = buildMap(obj, 'data.*', '${name} (${address.zip} ${address.city})', 'id');
40
+ console.log(map);
41
+
42
+ // ↦ Map(3) {
43
+ // '10' => 'Cassandra (52628 Saumur)',
44
+ // '20' => 'Holly (952340 Schwalbach)',
45
+ // '30' => 'Guy (420729 Panchià)'
46
+ // }
47
+
48
+ // If no key is specified, the key from the selection, here the array index, is taken.
49
+ map = buildMap(obj, 'data.*', '${name} (${address.zip} ${address.city})');
50
+ console.log(map);
51
+
52
+ // ↦ Map(3) {
53
+ // '0' => 'Cassandra (52628 Saumur)',
54
+ // '1' => 'Holly (952340 Schwalbach)',
55
+ // '2' => 'Guy (420729 Panchià)'
56
+ // }
57
+
58
+ // a filter (function(value, key) {}) can be specified to accept only defined entries.
59
+ map = buildMap(obj, 'data.*', '${name} (${address.zip} ${address.city})', 'id', function (value, key) {
60
+ return (value['id'] >= 20) ? true : false
61
+ });
62
+ console.log(map);
63
+
64
+ // ↦ Map(2) {
65
+ // 20 => 'Holly (952340 Schwalbach)',
66
+ // 30 => 'Guy (420729 Panchià)'
67
+ // }
@@ -0,0 +1,7 @@
1
+ import {Datasource} from '@schukai/monster/source/data/datasource.mjs'
2
+
3
+ class MyDatasource extends Datasource {
4
+
5
+ }
6
+
7
+ const ds = new MyDatasource();
@@ -0,0 +1,39 @@
1
+ import {Diff} from '@schukai/monster/source/data/diff.mjs';
2
+
3
+ // given are two objects x and y.
4
+
5
+ let x = {
6
+ a: 1,
7
+ b: "Hello!"
8
+ }
9
+
10
+ let y = {
11
+ a: 2,
12
+ c: true
13
+ }
14
+
15
+ // These two objects can be compared with each other.
16
+
17
+ console.log(Diff(x, y));
18
+
19
+ // the result is then the following
20
+
21
+ //
22
+ // [
23
+ // {
24
+ // operator: 'update',
25
+ // path: [ 'a' ],
26
+ // first: { value: 1, type: 'number' },
27
+ // second: { value: 2, type: 'number' }
28
+ // },
29
+ // {
30
+ // operator: 'delete',
31
+ // path: [ 'b' ],
32
+ // first: { value: 'Hello!', type: 'string' }
33
+ // },
34
+ // {
35
+ // operator: 'add',
36
+ // path: [ 'c' ],
37
+ // second: { value: true, type: 'boolean' }
38
+ // }
39
+ // ]
@@ -0,0 +1,23 @@
1
+ import {Pathfinder} from '@schukai/monster/source/data/pathfinder.mjs';
2
+
3
+ let value = new Pathfinder({
4
+ a: {
5
+ b: {
6
+ f: [
7
+ {
8
+ g: false,
9
+ }
10
+ ],
11
+ }
12
+ }
13
+ }).getVia("a.b.f.0.g");
14
+
15
+ console.log(value);
16
+ // ↦ false
17
+
18
+ try {
19
+ new Pathfinder({}).getVia("a.b.f.0.g");
20
+ } catch (e) {
21
+ console.log(e.toString());
22
+ // ↦ Error: the journey is not at its end (b.f.0.g)
23
+ }
@@ -0,0 +1,19 @@
1
+ import {Pathfinder} from '@schukai/monster/source/data/pathfinder.mjs';
2
+
3
+ let p = new Pathfinder({
4
+ a: {
5
+ x: [
6
+ {c: 1}, {c: 2}
7
+ ],
8
+ y: true
9
+ },
10
+ b: {
11
+ x: [
12
+ {c: 1, d: false}, {c: 2}
13
+ ],
14
+ y: true
15
+ },
16
+ });
17
+
18
+ let r = p.getVia("*.x.*.c");
19
+ console.log(r);
@@ -0,0 +1,14 @@
1
+ import {Pipe} from '@schukai/monster/source/data/pipe.mjs';
2
+
3
+ let obj = {
4
+ a: {
5
+ b: {
6
+ c: {
7
+ d: "world"
8
+ }
9
+ }
10
+ }
11
+ }
12
+
13
+ console.log(new Pipe('path:a.b.c.d | toupper | prefix:Hello\\ ').run(obj));
14
+ // ↦ Hello WORLD
@@ -0,0 +1,11 @@
1
+ import {RestAPI} from '@schukai/monster/source/data/datasource/restapi.mjs';
2
+
3
+ const ds = new RestAPI({
4
+ url: 'https://httpbin.org/get'
5
+ }, {
6
+ url: 'https://httpbin.org/post'
7
+ });
8
+
9
+ ds.set({flag: true})
10
+ ds.write().then(() => console.log('done'));
11
+ ds.read().then(() => console.log('done'));
@@ -0,0 +1,9 @@
1
+ import {Transformer} from '@schukai/monster/source/data/transformer.mjs';
2
+
3
+ const transformer = new Transformer("tolower")
4
+
5
+ console.log(transformer.run("HELLO"))
6
+ // ↦ hello
7
+
8
+ console.log(transformer.run("WORLD"))
9
+ // ↦ world
@@ -0,0 +1,13 @@
1
+ // In the example the user can use his own template by creating a template in the DOM with the ID `my-custom-element`.
2
+ // You can also specify a theme (for example `mytheme`), then it will search for the ID `my-custom-element-mytheme` and
3
+ // if not available for the ID `my-custom-element`.
4
+
5
+ class MyCustomElement extends CustomElement {
6
+
7
+ static getTag() {
8
+ return "my-custom-element"
9
+ }
10
+
11
+ }
12
+
13
+ // ↦ <my-custom-element></my-custom-element>
@@ -0,0 +1,5 @@
1
+ import {getDocumentTheme} from '@schukai/monster/source/dom/theme.mjs';
2
+
3
+ const theme = getDocumentTheme();
4
+ console.log(theme.getName());
5
+ // ↦ monster
@@ -0,0 +1,23 @@
1
+ import {Updater} from '@schukai/monster/source/dom/updater.mjs';
2
+
3
+ // First we prepare the html document.
4
+ // This is done here via script, but can also be inserted into the document as pure html.
5
+ // To do this, simply insert the tag <h1 data-monster-replace="path:headline"></h1>.
6
+ const body = document.querySelector('body');
7
+ const headline = document.createElement('h1');
8
+ headline.setAttribute('data-monster-replace', 'path:headline')
9
+ body.appendChild(headline);
10
+
11
+ // the data structure
12
+ let obj = {
13
+ headline: "Hello World",
14
+ };
15
+
16
+ // Now comes the real magic. we pass the updater the parent HTMLElement
17
+ // and the desired data structure.
18
+ const updater = new Updater(body, obj);
19
+ updater.run();
20
+
21
+ // Now you can change the data structure and the HTML will follow these changes.
22
+ const subject = updater.getSubject();
23
+ subject['headline'] = "Hello World!"
@@ -0,0 +1,10 @@
1
+ import {Formatter} from '@schukai/monster/source/i18n/formatter.mjs';
2
+ import {Translations} from '@schukai/monster/source/i18n/translations.mjs';
3
+
4
+ const translations = new Translations('en')
5
+ .assignTranslations({
6
+ thekey: "${animal} has eaten the ${food}!"
7
+ });
8
+
9
+ new Formatter({}, translations).format("thekey:animal=dog::food=cake")
10
+ // ↦ dog has eaten the cake!
@@ -0,0 +1,5 @@
1
+ import {Fetch} from '@schukai/monster/source/i18n/providers/fetch.mjs';
2
+
3
+ // fetch from API
4
+ const translation = new Fetch('https://example.com/${language}.json').getTranslation('en-GB');
5
+ // ↦ https://example.com/en.json
@@ -0,0 +1,20 @@
1
+ import {Translations} from '@schukai/monster/source/i18n/translations.mjs';
2
+ import {parseLocale} from '@schukai/monster/source/i18n/locale.mjs';
3
+
4
+ const translation = new Translations(parseLocale('en-GB'));
5
+
6
+ translation.assignTranslations({
7
+ text1: "click",
8
+ text2: {
9
+ 'one': 'click once',
10
+ 'other': 'click n times'
11
+ }
12
+ });
13
+
14
+ console.log(translation.getText('text1'));
15
+ // ↦ click
16
+
17
+ console.log(translation.getPluralRuleText('text2', 1));
18
+ // -> click once
19
+ console.log(translation.getPluralRuleText('text2', 2));
20
+ // -> click n times
@@ -0,0 +1,10 @@
1
+ import {BaseWithOptions} from '@schukai/monster/source/types/basewithoptions.mjs';
2
+
3
+ class My extends BaseWithOptions {
4
+ get defaults() {
5
+ return Object.assign({}, super.defaults, {
6
+ mykey: true
7
+ });
8
+ }
9
+ }
10
+
@@ -0,0 +1,5 @@
1
+ import {isIterable} from '@schukai/monster/source/types/is.mjs';
2
+
3
+ isIterable(null) // ↦ false
4
+ isIterable('hello') // ↦ true
5
+ isIterable([]) // ↦ true
@@ -0,0 +1,6 @@
1
+ import {isInteger} from '@schukai/monster/source/types/is.mjs';
2
+
3
+ isInteger(() => {
4
+ }) // ↦ true
5
+ isInteger('2') // ↦ false
6
+ isInteger(2) // ↦ true
@@ -0,0 +1,4 @@
1
+ import {isPrimitive} from '@schukai/monster/source/types/is.mjs';
2
+
3
+ isPrimitive('2') // ↦ true
4
+ isPrimitive([]) // ↦ false
@@ -0,0 +1,4 @@
1
+ import {isSymbol} from '@schukai/monster/source/types/is.mjs';
2
+
3
+ isSymbol(Symbol('a')) // ↦ true
4
+ isSymbol([]) // ↦ false
@@ -0,0 +1,5 @@
1
+ import {isBoolean} from '@schukai/monster/source/types/is.mjs';
2
+
3
+ isBoolean('2') // ↦ false
4
+ isBoolean([]) // ↦ false
5
+ isBoolean(2 > 4) // ↦ true
@@ -0,0 +1,4 @@
1
+ import {isString} from '@schukai/monster/source/types/is.mjs';
2
+
3
+ isString('2') // ↦ true
4
+ isString([]) // ↦ false
@@ -0,0 +1,4 @@
1
+ import {isObject} from '@schukai/monster/source/types/is.mjs';
2
+
3
+ isObject('2') // ↦ false
4
+ isObject([]) // ↦ false
@@ -0,0 +1,4 @@
1
+ import {isInstance} from '@schukai/monster/source/types/is.mjs';
2
+
3
+ isInstance('2') // ↦ false
4
+ isInstance([]) // ↦ false
@@ -0,0 +1,4 @@
1
+ import {isArray} from '@schukai/monster/source/types/is.mjs';
2
+
3
+ isArray('2') // ↦ false
4
+ isArray([]) // ↦ true
@@ -0,0 +1,6 @@
1
+ import {isFunction} from '@schukai/monster/source/types/is.mjs';
2
+
3
+ isFunction(() => {
4
+ }) // ↦ true
5
+ isFunction('2') // ↦ false
6
+ isFunction([]) // ↦ false
@@ -0,0 +1,32 @@
1
+ import {Node} from '@schukai/monster/source/types/node.mjs';
2
+ import {NodeRecursiveIterator} from '@schukai/monster/source/types/noderecursiveiterator.mjs';
3
+
4
+ const node = new Node('1')
5
+
6
+ // 1
7
+ // 2
8
+ // ├ 2.1
9
+ // ├ 2.2
10
+ // └ 2.3
11
+ // 3
12
+ // 4
13
+ // ├ 4.1
14
+ // └ 4.2
15
+ node.appendChild(
16
+ (new Node('2'))
17
+ .appendChild(new Node('2.1'))
18
+ .appendChild(new Node('2.2'))
19
+ .appendChild(new Node('2.3')))
20
+ .appendChild(new Node('3'))
21
+ .appendChild(new Node('4')
22
+ .appendChild(new Node('4.1'))
23
+ .appendChild(new Node('4.2')));
24
+
25
+ const iterator = new NodeRecursiveIterator(node);
26
+
27
+ const result = [];
28
+ for (const n of iterator) {
29
+ result.push(n.value);
30
+ }
31
+
32
+ // ↦ ['1', '2', '2.1', '2.2', '2.3', '3', '4', '4.1', '4.2']