@e1011/es-kit 1.0.98 → 1.0.100

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 (89) hide show
  1. package/dist/hooks/esm/index.css +67 -67
  2. package/dist/hooks/index.css +67 -67
  3. package/dist/lib/cjs/src/core/utils/appState/store/store.vanillajs.js +1 -1
  4. package/dist/lib/cjs/src/core/utils/appState/store/store.vanillajs.js.map +1 -1
  5. package/dist/lib/cjs/src/core/utils/appState/store/useStore.react.js.map +1 -1
  6. package/dist/lib/esm/src/core/utils/appState/store/store.vanillajs.js +1 -1
  7. package/dist/lib/esm/src/core/utils/appState/store/store.vanillajs.js.map +1 -1
  8. package/dist/lib/esm/src/core/utils/appState/store/useStore.react.js.map +1 -1
  9. package/dist/lib/src/core/ui/utils/styling.spec.js +24 -0
  10. package/dist/lib/src/core/ui/utils/styling.spec.js.map +1 -0
  11. package/dist/lib/src/core/utils/appState/store/store.vanillajs.js +2 -0
  12. package/dist/lib/src/core/utils/appState/store/store.vanillajs.js.map +1 -1
  13. package/dist/lib/src/core/utils/appState/store/store.vanillajs.spec.js +152 -0
  14. package/dist/lib/src/core/utils/appState/store/store.vanillajs.spec.js.map +1 -0
  15. package/dist/lib/src/core/utils/appState/store/store.vanillajs.templates.js +22 -18
  16. package/dist/lib/src/core/utils/appState/store/store.vanillajs.templates.js.map +1 -1
  17. package/dist/lib/src/core/utils/appState/store/store.vanillajs.templates.spec.js +36 -0
  18. package/dist/lib/src/core/utils/appState/store/store.vanillajs.templates.spec.js.map +1 -0
  19. package/dist/lib/src/core/utils/appState/store/useStore.react.js.map +1 -1
  20. package/dist/lib/src/core/utils/date.spec.js +97 -0
  21. package/dist/lib/src/core/utils/date.spec.js.map +1 -0
  22. package/dist/lib/src/core/utils/decorators/convert.spec.js +22 -0
  23. package/dist/lib/src/core/utils/decorators/convert.spec.js.map +1 -0
  24. package/dist/lib/src/core/utils/helpers/birthnumberCZSKvalidator.spec.js +53 -0
  25. package/dist/lib/src/core/utils/helpers/birthnumberCZSKvalidator.spec.js.map +1 -0
  26. package/dist/lib/src/core/utils/helpers/emailMatcher.spec.js +36 -0
  27. package/dist/lib/src/core/utils/helpers/emailMatcher.spec.js.map +1 -0
  28. package/dist/lib/src/core/utils/helpers/file.spec.js +23 -0
  29. package/dist/lib/src/core/utils/helpers/file.spec.js.map +1 -0
  30. package/dist/lib/src/core/utils/helpers/fileValidator.spec.js +103 -0
  31. package/dist/lib/src/core/utils/helpers/fileValidator.spec.js.map +1 -0
  32. package/dist/lib/src/core/utils/helpers/objectOperations.spec.js +75 -0
  33. package/dist/lib/src/core/utils/helpers/objectOperations.spec.js.map +1 -0
  34. package/dist/lib/src/core/utils/helpers/other.spec.js +49 -0
  35. package/dist/lib/src/core/utils/helpers/other.spec.js.map +1 -0
  36. package/dist/lib/src/core/utils/helpers/textValueOperations.spec.js +70 -0
  37. package/dist/lib/src/core/utils/helpers/textValueOperations.spec.js.map +1 -0
  38. package/dist/lib/src/core/utils/helpers/valueOperations.spec.js +18 -0
  39. package/dist/lib/src/core/utils/helpers/valueOperations.spec.js.map +1 -0
  40. package/dist/lib/src/core/utils/logger.spec.js +32 -0
  41. package/dist/lib/src/core/utils/logger.spec.js.map +1 -0
  42. package/dist/lib/src/core/utils/webComponents/webComponents.utils.spec.js +42 -0
  43. package/dist/lib/src/core/utils/webComponents/webComponents.utils.spec.js.map +1 -0
  44. package/dist/lib/tsconfig.tsbuildinfo +1 -1
  45. package/dist/types/src/core/ui/utils/styling.spec.d.ts +2 -0
  46. package/dist/types/src/core/ui/utils/styling.spec.d.ts.map +1 -0
  47. package/dist/types/src/core/utils/appState/store/store.vanillajs.d.ts +1 -5
  48. package/dist/types/src/core/utils/appState/store/store.vanillajs.d.ts.map +1 -1
  49. package/dist/types/src/core/utils/appState/store/store.vanillajs.spec.d.ts +2 -0
  50. package/dist/types/src/core/utils/appState/store/store.vanillajs.spec.d.ts.map +1 -0
  51. package/dist/types/src/core/utils/appState/store/store.vanillajs.templates.d.ts +7 -3
  52. package/dist/types/src/core/utils/appState/store/store.vanillajs.templates.d.ts.map +1 -1
  53. package/dist/types/src/core/utils/appState/store/store.vanillajs.templates.spec.d.ts +2 -0
  54. package/dist/types/src/core/utils/appState/store/store.vanillajs.templates.spec.d.ts.map +1 -0
  55. package/dist/types/src/core/utils/appState/store/useStore.react.d.ts +4 -4
  56. package/dist/types/src/core/utils/appState/store/useStore.react.d.ts.map +1 -1
  57. package/dist/types/src/core/utils/date.spec.d.ts +2 -0
  58. package/dist/types/src/core/utils/date.spec.d.ts.map +1 -0
  59. package/dist/types/src/core/utils/decorators/convert.spec.d.ts +2 -0
  60. package/dist/types/src/core/utils/decorators/convert.spec.d.ts.map +1 -0
  61. package/dist/types/src/core/utils/helpers/birthnumberCZSKvalidator.spec.d.ts +2 -0
  62. package/dist/types/src/core/utils/helpers/birthnumberCZSKvalidator.spec.d.ts.map +1 -0
  63. package/dist/types/src/core/utils/helpers/emailMatcher.spec.d.ts +2 -0
  64. package/dist/types/src/core/utils/helpers/emailMatcher.spec.d.ts.map +1 -0
  65. package/dist/types/src/core/utils/helpers/file.spec.d.ts +2 -0
  66. package/dist/types/src/core/utils/helpers/file.spec.d.ts.map +1 -0
  67. package/dist/types/src/core/utils/helpers/fileValidator.spec.d.ts +2 -0
  68. package/dist/types/src/core/utils/helpers/fileValidator.spec.d.ts.map +1 -0
  69. package/dist/types/src/core/utils/helpers/objectOperations.spec.d.ts +2 -0
  70. package/dist/types/src/core/utils/helpers/objectOperations.spec.d.ts.map +1 -0
  71. package/dist/types/src/core/utils/helpers/other.spec.d.ts +2 -0
  72. package/dist/types/src/core/utils/helpers/other.spec.d.ts.map +1 -0
  73. package/dist/types/src/core/utils/helpers/textValueOperations.spec.d.ts +2 -0
  74. package/dist/types/src/core/utils/helpers/textValueOperations.spec.d.ts.map +1 -0
  75. package/dist/types/src/core/utils/helpers/valueOperations.spec.d.ts +2 -0
  76. package/dist/types/src/core/utils/helpers/valueOperations.spec.d.ts.map +1 -0
  77. package/dist/types/src/core/utils/logger.spec.d.ts +21 -0
  78. package/dist/types/src/core/utils/logger.spec.d.ts.map +1 -0
  79. package/dist/types/src/core/utils/webComponents/webComponents.utils.spec.d.ts +5 -0
  80. package/dist/types/src/core/utils/webComponents/webComponents.utils.spec.d.ts.map +1 -0
  81. package/dist/utils/esm/index.css +67 -67
  82. package/dist/utils/esm/src/core/utils/appState/store/store.vanillajs.js +1 -1
  83. package/dist/utils/esm/src/core/utils/appState/store/store.vanillajs.js.map +1 -1
  84. package/dist/utils/esm/src/core/utils/appState/store/useStore.react.js.map +1 -1
  85. package/dist/utils/index.css +67 -67
  86. package/dist/utils/src/core/utils/appState/store/store.vanillajs.js +1 -1
  87. package/dist/utils/src/core/utils/appState/store/store.vanillajs.js.map +1 -1
  88. package/dist/utils/src/core/utils/appState/store/useStore.react.js.map +1 -1
  89. package/package.json +1 -1
@@ -1,45 +1,32 @@
1
- .divider-module_divider-line__6CesR {
2
- position: relative;
3
- display: block;
4
- transition: opacity, width, height 250ms ease-in-out;
5
- background-color: var(--color);
6
- opacity: var(--opacity);
7
- }
8
- .divider-module_divider-line__6CesR.divider-module_vertical__qSVWD {
9
- height: var(--length);
10
- left: var(--left);
11
- width: var(--width);
12
- margin: var(--margin);
1
+ .icon-module_icon-base-parent__nOMvW {
2
+ line-height: 1px !important;
13
3
  }
14
- .divider-module_divider-line__6CesR.divider-module_horizontal__Gz-Oj {
15
- width: var(--length);
16
- left: var(--left);
17
- height: var(--height);
18
- margin: var(--margin);
4
+
5
+ .icon-module_icon-base__S0tHf {
6
+ min-width: var(--min-width);
7
+ min-height: var(--min-height);
8
+ width: var(--width) !important;
9
+ height: var(--height) !important;
10
+ line-height: var(--height);
11
+ background-color: var(--icon-color);
12
+ color: var(--icon-content-color);
13
+ background-repeat: no-repeat;
14
+ mask-image: var(--icon-url);
15
+ -webkit-mask-image: var(--icon-url);
16
+ mask-repeat: no-repeat;
17
+ -webkit-mask-repeat: no-repeat;
18
+ mask-size: contain;
19
+ -webkit-mask-size: contain;
20
+ mask-position: center;
21
+ -webkit-mask-position: center;
22
+ display: inline-block;
23
+ will-change: transform;
24
+ transform: translate3d(0, 0, 0);
19
25
  }
20
- .fbox-module_flexible-box__rLJ93 {
21
- display: flex;
22
- position: relative;
23
- flex-direction: row;
24
- flex: 0;
25
- flex-grow: 0;
26
- flex-shrink: 0;
27
- flex-basis: auto;
28
- flex-wrap: nowrap;
29
- gap: 0;
30
- text-align: left;
31
- justify-content: flex-start;
32
- align-items: flex-start;
33
- align-self: auto;
34
- margin: 0;
35
- padding: 0;
36
- width: auto;
37
- height: auto;
38
- max-width: none;
39
- max-height: none;
40
- min-width: 0;
41
- min-height: 0;
42
- border-radius: initial;
26
+ .icon-module_icon-base__S0tHf svg {
27
+ fill: var(--icon-content-color);
28
+ width: var(--height);
29
+ height: var(--width);
43
30
  }
44
31
  .CollapsibleContainer-module_collapsible-container__u0Jmm {
45
32
  transform-origin: 0% 0%;
@@ -74,33 +61,46 @@
74
61
  max-width: var(--prop-value);
75
62
  opacity: 1;
76
63
  }
77
- .icon-module_icon-base-parent__nOMvW {
78
- line-height: 1px !important;
64
+ .fbox-module_flexible-box__rLJ93 {
65
+ display: flex;
66
+ position: relative;
67
+ flex-direction: row;
68
+ flex: 0;
69
+ flex-grow: 0;
70
+ flex-shrink: 0;
71
+ flex-basis: auto;
72
+ flex-wrap: nowrap;
73
+ gap: 0;
74
+ text-align: left;
75
+ justify-content: flex-start;
76
+ align-items: flex-start;
77
+ align-self: auto;
78
+ margin: 0;
79
+ padding: 0;
80
+ width: auto;
81
+ height: auto;
82
+ max-width: none;
83
+ max-height: none;
84
+ min-width: 0;
85
+ min-height: 0;
86
+ border-radius: initial;
79
87
  }
80
-
81
- .icon-module_icon-base__S0tHf {
82
- min-width: var(--min-width);
83
- min-height: var(--min-height);
84
- width: var(--width) !important;
85
- height: var(--height) !important;
86
- line-height: var(--height);
87
- background-color: var(--icon-color);
88
- color: var(--icon-content-color);
89
- background-repeat: no-repeat;
90
- mask-image: var(--icon-url);
91
- -webkit-mask-image: var(--icon-url);
92
- mask-repeat: no-repeat;
93
- -webkit-mask-repeat: no-repeat;
94
- mask-size: contain;
95
- -webkit-mask-size: contain;
96
- mask-position: center;
97
- -webkit-mask-position: center;
98
- display: inline-block;
99
- will-change: transform;
100
- transform: translate3d(0, 0, 0);
88
+ .divider-module_divider-line__6CesR {
89
+ position: relative;
90
+ display: block;
91
+ transition: opacity, width, height 250ms ease-in-out;
92
+ background-color: var(--color);
93
+ opacity: var(--opacity);
101
94
  }
102
- .icon-module_icon-base__S0tHf svg {
103
- fill: var(--icon-content-color);
104
- width: var(--height);
105
- height: var(--width);
95
+ .divider-module_divider-line__6CesR.divider-module_vertical__qSVWD {
96
+ height: var(--length);
97
+ left: var(--left);
98
+ width: var(--width);
99
+ margin: var(--margin);
100
+ }
101
+ .divider-module_divider-line__6CesR.divider-module_horizontal__Gz-Oj {
102
+ width: var(--length);
103
+ left: var(--left);
104
+ height: var(--height);
105
+ margin: var(--margin);
106
106
  }
@@ -1,45 +1,32 @@
1
- .divider-module_divider-line__6CesR {
2
- position: relative;
3
- display: block;
4
- transition: opacity, width, height 250ms ease-in-out;
5
- background-color: var(--color);
6
- opacity: var(--opacity);
7
- }
8
- .divider-module_divider-line__6CesR.divider-module_vertical__qSVWD {
9
- height: var(--length);
10
- left: var(--left);
11
- width: var(--width);
12
- margin: var(--margin);
1
+ .icon-module_icon-base-parent__nOMvW {
2
+ line-height: 1px !important;
13
3
  }
14
- .divider-module_divider-line__6CesR.divider-module_horizontal__Gz-Oj {
15
- width: var(--length);
16
- left: var(--left);
17
- height: var(--height);
18
- margin: var(--margin);
4
+
5
+ .icon-module_icon-base__S0tHf {
6
+ min-width: var(--min-width);
7
+ min-height: var(--min-height);
8
+ width: var(--width) !important;
9
+ height: var(--height) !important;
10
+ line-height: var(--height);
11
+ background-color: var(--icon-color);
12
+ color: var(--icon-content-color);
13
+ background-repeat: no-repeat;
14
+ mask-image: var(--icon-url);
15
+ -webkit-mask-image: var(--icon-url);
16
+ mask-repeat: no-repeat;
17
+ -webkit-mask-repeat: no-repeat;
18
+ mask-size: contain;
19
+ -webkit-mask-size: contain;
20
+ mask-position: center;
21
+ -webkit-mask-position: center;
22
+ display: inline-block;
23
+ will-change: transform;
24
+ transform: translate3d(0, 0, 0);
19
25
  }
20
- .fbox-module_flexible-box__rLJ93 {
21
- display: flex;
22
- position: relative;
23
- flex-direction: row;
24
- flex: 0;
25
- flex-grow: 0;
26
- flex-shrink: 0;
27
- flex-basis: auto;
28
- flex-wrap: nowrap;
29
- gap: 0;
30
- text-align: left;
31
- justify-content: flex-start;
32
- align-items: flex-start;
33
- align-self: auto;
34
- margin: 0;
35
- padding: 0;
36
- width: auto;
37
- height: auto;
38
- max-width: none;
39
- max-height: none;
40
- min-width: 0;
41
- min-height: 0;
42
- border-radius: initial;
26
+ .icon-module_icon-base__S0tHf svg {
27
+ fill: var(--icon-content-color);
28
+ width: var(--height);
29
+ height: var(--width);
43
30
  }
44
31
  .CollapsibleContainer-module_collapsible-container__u0Jmm {
45
32
  transform-origin: 0% 0%;
@@ -74,33 +61,46 @@
74
61
  max-width: var(--prop-value);
75
62
  opacity: 1;
76
63
  }
77
- .icon-module_icon-base-parent__nOMvW {
78
- line-height: 1px !important;
64
+ .fbox-module_flexible-box__rLJ93 {
65
+ display: flex;
66
+ position: relative;
67
+ flex-direction: row;
68
+ flex: 0;
69
+ flex-grow: 0;
70
+ flex-shrink: 0;
71
+ flex-basis: auto;
72
+ flex-wrap: nowrap;
73
+ gap: 0;
74
+ text-align: left;
75
+ justify-content: flex-start;
76
+ align-items: flex-start;
77
+ align-self: auto;
78
+ margin: 0;
79
+ padding: 0;
80
+ width: auto;
81
+ height: auto;
82
+ max-width: none;
83
+ max-height: none;
84
+ min-width: 0;
85
+ min-height: 0;
86
+ border-radius: initial;
79
87
  }
80
-
81
- .icon-module_icon-base__S0tHf {
82
- min-width: var(--min-width);
83
- min-height: var(--min-height);
84
- width: var(--width) !important;
85
- height: var(--height) !important;
86
- line-height: var(--height);
87
- background-color: var(--icon-color);
88
- color: var(--icon-content-color);
89
- background-repeat: no-repeat;
90
- mask-image: var(--icon-url);
91
- -webkit-mask-image: var(--icon-url);
92
- mask-repeat: no-repeat;
93
- -webkit-mask-repeat: no-repeat;
94
- mask-size: contain;
95
- -webkit-mask-size: contain;
96
- mask-position: center;
97
- -webkit-mask-position: center;
98
- display: inline-block;
99
- will-change: transform;
100
- transform: translate3d(0, 0, 0);
88
+ .divider-module_divider-line__6CesR {
89
+ position: relative;
90
+ display: block;
91
+ transition: opacity, width, height 250ms ease-in-out;
92
+ background-color: var(--color);
93
+ opacity: var(--opacity);
101
94
  }
102
- .icon-module_icon-base__S0tHf svg {
103
- fill: var(--icon-content-color);
104
- width: var(--height);
105
- height: var(--width);
95
+ .divider-module_divider-line__6CesR.divider-module_vertical__qSVWD {
96
+ height: var(--length);
97
+ left: var(--left);
98
+ width: var(--width);
99
+ margin: var(--margin);
100
+ }
101
+ .divider-module_divider-line__6CesR.divider-module_horizontal__Gz-Oj {
102
+ width: var(--length);
103
+ left: var(--left);
104
+ height: var(--height);
105
+ margin: var(--margin);
106
106
  }
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../../../_virtual/_rollupPluginBabelHelpers.js");require("../../../../../node_modules/core-js/modules/es.array.iterator.js"),require("../../../../../node_modules/core-js/modules/es.object.to-string.js"),require("../../../../../node_modules/core-js/modules/es.set.constructor.js"),require("../../../../../node_modules/core-js/modules/es.string.iterator.js"),require("../../../../../node_modules/core-js/modules/web.dom-collections.iterator.js"),require("../../../../../node_modules/core-js/modules/es.object.entries.js"),require("../../../../../node_modules/core-js/modules/es.array.reduce.js"),require("../../../../../node_modules/core-js/modules/es.array.concat.js");exports.createStore=function(r,t){var o,n=r,s=new Set,u=function(){return n},a=function(){var r=e.asyncToGenerator(e.regeneratorRuntime().mark((function r(t){var o,u,a,c,i;return e.regeneratorRuntime().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:n=t,o=e.createForOfIteratorHelper(s),r.prev=2,o.s();case 4:if((u=o.n()).done){r.next=14;break}if(a=u.value,c=null==a?void 0:a.selector,i=c?c(n):n,void 0!==a.previousValue&&a.previousValue===i){r.next=12;break}return a.previousValue=i,r.next=12,a(i);case 12:r.next=4;break;case 14:r.next=19;break;case 16:r.prev=16,r.t0=r.catch(2),o.e(r.t0);case 19:return r.prev=19,o.f(),r.finish(19);case 22:case"end":return r.stop()}}),r,null,[[2,16,19,22]])})));return function(e){return r.apply(this,arguments)}}(),c={getState:u,setState:a,subscribe:function(e){return s.add(e),function(){return s.delete(e)}}},i=t?null===(o=Object.entries(t))||void 0===o?void 0:o.reduce((function(r,t){var o=e.slicedToArray(t,2),n=o[0],s=o[1];return e.objectSpread2(e.objectSpread2({},r),{},e.defineProperty({},n,e.asyncToGenerator(e.regeneratorRuntime().mark((function r(){var t,o,n,c=arguments;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(t=c.length,o=new Array(t),n=0;n<t;n++)o[n]=c[n];return e.abrupt("return",s.apply(void 0,[u,a].concat(o)));case 2:case"end":return e.stop()}}),r)})))))}),{}):null,d=e.objectSpread2(e.objectSpread2({},c),i?{actions:e.objectSpread2({},i)}:{});return d};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../../../_virtual/_rollupPluginBabelHelpers.js");require("../../../../../node_modules/core-js/modules/es.array.iterator.js"),require("../../../../../node_modules/core-js/modules/es.object.to-string.js"),require("../../../../../node_modules/core-js/modules/es.set.constructor.js"),require("../../../../../node_modules/core-js/modules/es.string.iterator.js"),require("../../../../../node_modules/core-js/modules/web.dom-collections.iterator.js"),require("../../../../../node_modules/core-js/modules/es.object.entries.js"),require("../../../../../node_modules/core-js/modules/es.array.reduce.js"),require("../../../../../node_modules/core-js/modules/es.array.concat.js");exports.createStore=function(r,t){var o,n=r,s=new Set,u=function(){return n},a=function(){var r=e.asyncToGenerator(e.regeneratorRuntime().mark((function r(t){var o,u,a,c,i;return e.regeneratorRuntime().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:n=t,o=e.createForOfIteratorHelper(s),r.prev=2,o.s();case 4:if((u=o.n()).done){r.next=14;break}if(a=u.value,c=null==a?void 0:a.selector,i=c?c(n):n,void 0!==a.previousValue&&a.previousValue===i){r.next=12;break}return a.previousValue=i,r.next=12,a(i);case 12:r.next=4;break;case 14:r.next=19;break;case 16:r.prev=16,r.t0=r.catch(2),o.e(r.t0);case 19:return r.prev=19,o.f(),r.finish(19);case 22:return r.abrupt("return",n);case 23:case"end":return r.stop()}}),r,null,[[2,16,19,22]])})));return function(e){return r.apply(this,arguments)}}(),c={getState:u,setState:a,subscribe:function(e){return s.add(e),function(){return s.delete(e)}}},i=t?null===(o=Object.entries(t))||void 0===o?void 0:o.reduce((function(r,t){var o=e.slicedToArray(t,2),n=o[0],s=o[1];return e.objectSpread2(e.objectSpread2({},r),{},e.defineProperty({},n,e.asyncToGenerator(e.regeneratorRuntime().mark((function r(){var t,o,n,c=arguments;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(t=c.length,o=new Array(t),n=0;n<t;n++)o[n]=c[n];return e.abrupt("return",s.apply(void 0,[u,a].concat(o)));case 2:case"end":return e.stop()}}),r)})))))}),{}):null,d=e.objectSpread2(e.objectSpread2({},c),i?{actions:e.objectSpread2({},i)}:{});return d};
2
2
  //# sourceMappingURL=store.vanillajs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.vanillajs.js","sources":["../../../../../../../../src/core/utils/appState/store/store.vanillajs.ts"],"sourcesContent":["\n// TinyStore, inspired by https://github.com/jherr/syncexternalstore/blob/main/csr/src/store.js\nexport type ListenerCallBack<T> = (state: Partial<T>) => void\n\nexport type Selector<T> = (state: Partial<T>) => Partial<T>;\n\nexport type Listener<T> = {\n selector?: Selector<T>\n previousValue?: Partial<T>\n} & ListenerCallBack<T>\n\nexport type Store<T> = {\n getState: () => Partial<T>\n setState: (state: Partial<T>) => void\n subscribe: (listener: Listener<T>) => () => void\n} & { actions?: { [actionName: string]: ActionHandlerCaller } }\n\nexport type StoreWithActions<T> = Store<T> & { actions: { [actionName: string]: ActionHandlerCaller } }\n\n\nexport type ActionHandler<T> = (\n getState: Store<T>['getState'],\n setState: Store<T>['setState'],\n ...rest: unknown[]\n) => void | Partial<T> | Promise<void | Partial<T>>\n\n\nexport type ActionHandlerCaller = (...args: unknown[]) => void\n\n\nexport const createStore = <T>(\n initialState: Partial<T>,\n actions?: Record<string, ActionHandler<T>>,\n): Store<T> | StoreWithActions<T> => {\n let currentState: Partial<T> = initialState\n const listeners = new Set<Listener<T>>()\n\n const getState = () => currentState\n\n const setState = async (newState: Partial<T>) => {\n currentState = newState\n\n // eslint-disable-next-line no-restricted-syntax\n for (const listener of listeners) {\n // has Listener selector?\n const selector: Selector<T> | undefined = listener?.selector\n\n // TODO compare selected value to the previous values of that listener/selector pair\n // if listener.previousValue === selector(currentState) no call\n // else listener.previousValue = selector(currentState) and call\n // l1 cache, weak references?\n const newValue: Partial<T> = selector ? selector(currentState) : currentState\n\n // TODO plugin equality\n if (listener.previousValue === undefined || listener.previousValue !== newValue) {\n listener.previousValue = newValue\n // eslint-disable-next-line no-await-in-loop\n await listener(newValue)\n }\n }\n }\n\n const storeBaseicApi: Store<T> = {\n getState,\n setState,\n subscribe: (listener: Listener<T>) => {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n }\n\n\n const resolvedActions: Record<string, ActionHandlerCaller> | null | undefined\n = actions ? Object.entries(actions)?.reduce(\n (\n aggregator: Record<string, ActionHandlerCaller>,\n [actionName, actionHandler]: [string, ActionHandler<T>],\n ) => ({\n ...aggregator,\n [actionName]: async(...rest: unknown[]) => actionHandler(getState, setState, ...rest),\n }),\n {},\n ) : null\n\n const storeCombinedWithActions = {\n ...storeBaseicApi,\n ...(resolvedActions ? { actions: { ...resolvedActions } } : {}),\n }\n\n return resolvedActions\n ? storeCombinedWithActions as StoreWithActions<T> & { actions: keyof typeof resolvedActions }\n : storeCombinedWithActions as Store<T>\n}\n"],"names":["initialState","actions","_Object$entries","currentState","listeners","Set","getState","setState","_ref","_asyncToGenerator","_regeneratorRuntime","regeneratorRuntime","mark","_callee","newState","_iterator","_step","_listener","selector","newValue","wrap","_context","prev","next","_createForOfIteratorHelper","s","n","done","listener","value","undefined","previousValue","t0","e","f","finish","stop","_x","apply","this","arguments","storeBaseicApi","subscribe","add","delete","resolvedActions","Object","entries","reduce","aggregator","_ref2","_ref3","_slicedToArray","actionName","actionHandler","_objectSpread","objectSpread2","_defineProperty","_callee2","_len","rest","_key","_args2","_context2","length","Array","abrupt","concat","storeCombinedWithActions"],"mappings":"ywBA8B2B,SACzBA,EACAC,GACmC,IAAAC,EAC/BC,EAA2BH,EACzBI,EAAY,IAAIC,IAEhBC,EAAW,WAAH,OAASH,CAAY,EAE7BI,EAAQ,WAAA,IAAAC,EAAAC,EAAAA,iBAAAC,EAAAC,qBAAAC,MAAG,SAAAC,EAAOC,GAAoB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAT,EAAAC,qBAAAS,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAC1CpB,EAAeW,EAEfC,EAAAS,EAAAA,0BACuBpB,GAASiB,EAAAC,KAAA,EAAAP,EAAAU,IAAA,KAAA,EAAA,IAAAT,EAAAD,EAAAW,KAAAC,KAAA,CAAAN,EAAAE,KAAA,GAAA,KAAA,CAU9B,GAVSK,EAAQZ,EAAAa,MAEXX,EAAoCU,eAAAA,EAAUV,SAM9CC,EAAuBD,EAAWA,EAASf,GAAgBA,OAGlC2B,IAA3BF,EAASG,eAA+BH,EAASG,gBAAkBZ,EAAQ,CAAAE,EAAAE,KAAA,GAAA,KAAA,CAE7E,OADAK,EAASG,cAAgBZ,EACzBE,EAAAE,KAAA,GACMK,EAAST,GAAS,KAAA,GAAAE,EAAAE,KAAA,EAAA,MAAA,KAAA,GAAAF,EAAAE,KAAA,GAAA,MAAA,KAAA,GAAAF,EAAAC,KAAA,GAAAD,EAAAW,GAAAX,EAAA,MAAA,GAAAN,EAAAkB,EAAAZ,EAAAW,IAAA,KAAA,GAAA,OAAAX,EAAAC,KAAA,GAAAP,EAAAmB,IAAAb,EAAAc,OAAA,IAAA,KAAA,GAAA,IAAA,MAAA,OAAAd,EAAAe,OAAA,GAAAvB,EAAA,KAAA,CAAA,CAAA,EAAA,GAAA,GAAA,KAG7B,KAAA,OArBKN,SAAQ8B,GAAA,OAAA7B,EAAA8B,MAAAC,KAAAC,UAAA,EAAA,GAuBRC,EAA2B,CAC/BnC,SAAAA,EACAC,SAAAA,EACAmC,UAAW,SAACd,GAEV,OADAxB,EAAUuC,IAAIf,GACP,WAAA,OAAMxB,EAAUwC,OAAOhB,EAAS,CACzC,GAIIiB,EACF5C,EAAiCC,QAA1BA,EAAG4C,OAAOC,QAAQ9C,cAAQC,SAAvBA,EAAyB8C,QACnC,SACEC,EAA+CC,GAAA,IAAAC,EAAAC,EAAAA,cAAAF,EAAA,GAC9CG,EAAUF,EAAA,GAAEG,EAAaH,EAAA,GAAA,OAAAI,EAAAC,cAAAD,EAAAC,cAEvBP,CAAAA,EAAAA,MAAUQ,EAAAA,eAAA,CAAA,EACZJ,EAAU5C,EAAAA,iBAAAC,EAAAA,qBAAAE,MAAG,SAAA8C,IAAA,IAAAC,EAAAC,EAAAC,EAAAC,EAAAtB,UAAA,OAAA9B,EAAAC,qBAAAS,MAAA,SAAA2C,GAAA,cAAAA,EAAAzC,KAAAyC,EAAAxC,MAAA,KAAA,EAAA,IAAAoC,EAAAG,EAAAE,OAASJ,EAAIK,IAAAA,MAAAN,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAJD,EAAIC,GAAAC,EAAAD,GAAA,OAAAE,EAAAG,OAAA,SAAgBZ,EAAahB,WAAChC,EAAAA,CAAAA,EAAUC,GAAQ4D,OAAKP,KAAK,KAAA,EAAA,IAAA,MAAA,OAAAG,EAAA3B,OAAA,GAAAsB,EAAA,MAAA,GAEvF,CAAA,GACE,KAEAU,EAAwBb,EAAAA,cAAAA,EAAAA,cACzBd,CAAAA,EAAAA,GACCI,EAAkB,CAAE5C,QAAOsD,EAAAA,cAAA,CAAA,EAAOV,IAAsB,CAAE,GAGhE,OACIuB,CAEN"}
1
+ {"version":3,"file":"store.vanillajs.js","sources":["../../../../../../../../src/core/utils/appState/store/store.vanillajs.ts"],"sourcesContent":["\n// TinyStore, inspired by https://github.com/jherr/syncexternalstore/blob/main/csr/src/store.js\nexport type ListenerCallBack<T> = (state: Partial<T>) => void\n\nexport type Selector<T> = (state: Partial<T>) => Partial<T>;\n\nexport type Listener<T> = {\n selector?: Selector<T>\n previousValue?: Partial<T>\n} & ListenerCallBack<T>\n\nexport type Store<T> = {\n getState: () => Partial<T>\n setState: (state: Partial<T>) => Promise<Partial<T>>\n subscribe: (listener: Listener<T>) => () => void\n}\n// & { actions?: { [actionName: string]: ActionHandlerCaller } }\n\nexport type StoreWithActions<T> = Store<T> & { actions: { [actionName: string]: ActionHandlerCaller } }\n\n\nexport type ActionHandler<T> = (\n getState: Store<T>['getState'],\n setState: Store<T>['setState'],\n ...rest: unknown[]\n) => void | Partial<T> | Promise<void | Partial<T>>\n\n\nexport type ActionHandlerCaller = (...args: unknown[]) => void\n\n\nexport const createStore = <T>(\n initialState: Partial<T>,\n actions?: Record<string, ActionHandler<T>>,\n): Store<T> | StoreWithActions<T> => {\n let currentState: Partial<T> = initialState\n const listeners = new Set<Listener<T>>()\n\n const getState = () => currentState\n\n // TODO debounce, batch? what is the meaningful time between setState ofr UI to be rendered and registerd by User?\n const setState = async (newState: Partial<T>) => {\n currentState = newState\n\n // eslint-disable-next-line no-restricted-syntax\n for (const listener of listeners) {\n // has Listener selector?\n const selector: Selector<T> | undefined = listener?.selector\n\n // TODO compare selected value to the previous values of that listener/selector pair\n // if listener.previousValue === selector(currentState) no call\n // else listener.previousValue = selector(currentState) and call\n // l1 cache, weak references?\n const newValue: Partial<T> = selector ? selector(currentState) : currentState\n\n // TODO plugin equality\n if (listener.previousValue === undefined || listener.previousValue !== newValue) {\n listener.previousValue = newValue\n // eslint-disable-next-line no-await-in-loop\n await listener(newValue)\n }\n }\n return currentState\n }\n\n const storeBaseicApi: Store<T> = {\n getState,\n setState,\n subscribe: (listener: Listener<T>) => {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n }\n\n\n const resolvedActions: Record<string, ActionHandlerCaller> | null | undefined\n = actions ? Object.entries(actions)?.reduce(\n (\n aggregator: Record<string, ActionHandlerCaller>,\n [actionName, actionHandler]: [string, ActionHandler<T>],\n ) => ({\n ...aggregator,\n [actionName]: async(...rest: unknown[]) => actionHandler(getState, setState, ...rest),\n }),\n {},\n ) : null\n\n const storeCombinedWithActions = {\n ...storeBaseicApi,\n ...(resolvedActions ? { actions: { ...resolvedActions } } : {}),\n }\n\n return resolvedActions\n ? storeCombinedWithActions as StoreWithActions<T>\n : storeCombinedWithActions as Store<T>\n}\n"],"names":["initialState","actions","_Object$entries","currentState","listeners","Set","getState","setState","_ref","_asyncToGenerator","_regeneratorRuntime","regeneratorRuntime","mark","_callee","newState","_iterator","_step","_listener","selector","newValue","wrap","_context","prev","next","_createForOfIteratorHelper","s","n","done","listener","value","undefined","previousValue","t0","e","f","finish","abrupt","stop","_x","apply","this","arguments","storeBaseicApi","subscribe","add","delete","resolvedActions","Object","entries","reduce","aggregator","_ref2","_ref3","_slicedToArray","actionName","actionHandler","_objectSpread","objectSpread2","_defineProperty","_callee2","_len","rest","_key","_args2","_context2","length","Array","concat","storeCombinedWithActions"],"mappings":"ywBA+B2B,SACzBA,EACAC,GACmC,IAAAC,EAC/BC,EAA2BH,EACzBI,EAAY,IAAIC,IAEhBC,EAAW,WAAH,OAASH,CAAY,EAG7BI,EAAQ,WAAA,IAAAC,EAAAC,EAAAA,iBAAAC,EAAAC,qBAAAC,MAAG,SAAAC,EAAOC,GAAoB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAT,EAAAC,qBAAAS,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAC1CpB,EAAeW,EAEfC,EAAAS,EAAAA,0BACuBpB,GAASiB,EAAAC,KAAA,EAAAP,EAAAU,IAAA,KAAA,EAAA,IAAAT,EAAAD,EAAAW,KAAAC,KAAA,CAAAN,EAAAE,KAAA,GAAA,KAAA,CAU9B,GAVSK,EAAQZ,EAAAa,MAEXX,EAAoCU,eAAAA,EAAUV,SAM9CC,EAAuBD,EAAWA,EAASf,GAAgBA,OAGlC2B,IAA3BF,EAASG,eAA+BH,EAASG,gBAAkBZ,EAAQ,CAAAE,EAAAE,KAAA,GAAA,KAAA,CAE7E,OADAK,EAASG,cAAgBZ,EACzBE,EAAAE,KAAA,GACMK,EAAST,GAAS,KAAA,GAAAE,EAAAE,KAAA,EAAA,MAAA,KAAA,GAAAF,EAAAE,KAAA,GAAA,MAAA,KAAA,GAAAF,EAAAC,KAAA,GAAAD,EAAAW,GAAAX,EAAA,MAAA,GAAAN,EAAAkB,EAAAZ,EAAAW,IAAA,KAAA,GAAA,OAAAX,EAAAC,KAAA,GAAAP,EAAAmB,IAAAb,EAAAc,OAAA,IAAA,KAAA,GAAA,OAAAd,EAAAe,OAAA,SAGrBjC,GAAY,KAAA,GAAA,IAAA,MAAA,OAAAkB,EAAAgB,OAAA,GAAAxB,EAAA,KAAA,CAAA,CAAA,EAAA,GAAA,GAAA,KACpB,KAAA,OAtBKN,SAAQ+B,GAAA,OAAA9B,EAAA+B,MAAAC,KAAAC,UAAA,EAAA,GAwBRC,EAA2B,CAC/BpC,SAAAA,EACAC,SAAAA,EACAoC,UAAW,SAACf,GAEV,OADAxB,EAAUwC,IAAIhB,GACP,WAAA,OAAMxB,EAAUyC,OAAOjB,EAAS,CACzC,GAIIkB,EACF7C,EAAiCC,QAA1BA,EAAG6C,OAAOC,QAAQ/C,cAAQC,SAAvBA,EAAyB+C,QACnC,SACEC,EAA+CC,GAAA,IAAAC,EAAAC,EAAAA,cAAAF,EAAA,GAC9CG,EAAUF,EAAA,GAAEG,EAAaH,EAAA,GAAA,OAAAI,EAAAC,cAAAD,EAAAC,cAEvBP,CAAAA,EAAAA,MAAUQ,EAAAA,eAAA,CAAA,EACZJ,EAAU7C,EAAAA,iBAAAC,EAAAA,qBAAAE,MAAG,SAAA+C,IAAA,IAAAC,EAAAC,EAAAC,EAAAC,EAAAtB,UAAA,OAAA/B,EAAAC,qBAAAS,MAAA,SAAA4C,GAAA,cAAAA,EAAA1C,KAAA0C,EAAAzC,MAAA,KAAA,EAAA,IAAAqC,EAAAG,EAAAE,OAASJ,EAAIK,IAAAA,MAAAN,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAJD,EAAIC,GAAAC,EAAAD,GAAA,OAAAE,EAAA5B,OAAA,SAAgBmB,EAAahB,WAACjC,EAAAA,CAAAA,EAAUC,GAAQ4D,OAAKN,KAAK,KAAA,EAAA,IAAA,MAAA,OAAAG,EAAA3B,OAAA,GAAAsB,EAAA,MAAA,GAEvF,CAAA,GACE,KAEAS,EAAwBZ,EAAAA,cAAAA,EAAAA,cACzBd,CAAAA,EAAAA,GACCI,EAAkB,CAAE7C,QAAOuD,EAAAA,cAAA,CAAA,EAAOV,IAAsB,CAAE,GAGhE,OACIsB,CAEN"}
@@ -1 +1 @@
1
- {"version":3,"file":"useStore.react.js","sources":["../../../../../../../../src/core/utils/appState/store/useStore.react.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react'\n\nimport type { Store, Selector } from './store.vanillajs'\n\n\nexport type useStoreType<T> = [\n Partial<T>,\n Store<T>['setState'],\n Store<T>['actions'],\n]\n\n\nexport const useStore = <T>(\n store: Store<T>,\n selector: Selector<T> = (state: Partial<T>) => state,\n // TODO pass selector\n // useSyncExternalStore((...args) => {\n // args[0].selector?? store.subscribe(...args) }, () => selector(store.getState()));\n): useStoreType<T> => [\n useSyncExternalStore(store.subscribe, () => selector(store.getState())),\n store.setState,\n store.actions,\n ]\n\n\nexport type useStoreApiType<T> = [\n ReturnType<typeof useStore>,\n Store<T>['getState'],\n Store<T>['setState'],\n Store<T>['actions'],\n]\n\n\nexport const useStoreApi = <T>(\n store: Store<T>,\n selector: Selector<T> = (state: Partial<T>) => state,\n): useStoreApiType<T> => ([\n useStore(store, selector),\n store.getState,\n store.setState,\n store.actions,\n ])\n"],"names":["useStore","store","selector","arguments","length","undefined","state","useSyncExternalStore","subscribe","getState","setState","actions"],"mappings":"2FAYaA,EAAW,SACtBC,GAAe,IACfC,EAAqBC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,SAACG,GAAiB,OAAKA,CAAK,EAAA,MAIhC,CAClBC,EAAoBA,qBAACN,EAAMO,WAAW,WAAA,OAAMN,EAASD,EAAMQ,WAAY,IACvER,EAAMS,SACNT,EAAMU,QACP,yCAWwB,SACzBV,GACoD,MAC5B,CACtBD,EAASC,EAFUE,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,SAACG,GAAiB,OAAKA,CAAK,GAGlDL,EAAMQ,SACNR,EAAMS,SACNT,EAAMU,QACP"}
1
+ {"version":3,"file":"useStore.react.js","sources":["../../../../../../../../src/core/utils/appState/store/useStore.react.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react'\n\nimport type { Store, StoreWithActions, Selector } from './store.vanillajs'\n\n\nexport type useStoreType<T> = [\n Partial<T>,\n Store<T>['setState'],\n StoreWithActions<T>['actions'],\n]\n\n\nexport const useStore = <T>(\n store: Store<T> | StoreWithActions<T>,\n selector: Selector<T> = (state: Partial<T>) => state,\n // TODO pass selector\n // useSyncExternalStore((...args) => {\n // args[0].selector?? store.subscribe(...args) }, () => selector(store.getState()));\n): useStoreType<T> => [\n useSyncExternalStore(store.subscribe, () => selector(store.getState())),\n store.setState,\n (store as StoreWithActions<T>).actions,\n ]\n\n\nexport type useStoreApiType<T> = [\n ReturnType<typeof useStore>,\n Store<T>['getState'],\n Store<T>['setState'],\n StoreWithActions<T>['actions'],\n]\n\n\nexport const useStoreApi = <T>(\n store: Store<T>,\n selector: Selector<T> = (state: Partial<T>) => state,\n): useStoreApiType<T> => ([\n useStore(store, selector),\n store.getState,\n store.setState,\n (store as StoreWithActions<T>).actions,\n ])\n"],"names":["useStore","store","selector","arguments","length","undefined","state","useSyncExternalStore","subscribe","getState","setState","actions"],"mappings":"2FAYaA,EAAW,SACtBC,GAAqC,IACrCC,EAAqBC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,SAACG,GAAiB,OAAKA,CAAK,EAAA,MAIhC,CAClBC,EAAoBA,qBAACN,EAAMO,WAAW,WAAA,OAAMN,EAASD,EAAMQ,WAAY,IACvER,EAAMS,SACLT,EAA8BU,QAChC,yCAWwB,SACzBV,GACoD,MAC5B,CACtBD,EAASC,EAFUE,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,SAACG,GAAiB,OAAKA,CAAK,GAGlDL,EAAMQ,SACNR,EAAMS,SACLT,EAA8BU,QAChC"}
@@ -1,2 +1,2 @@
1
- import{slicedToArray as e,objectSpread2 as r,defineProperty as o,asyncToGenerator as t,regeneratorRuntime as s,createForOfIteratorHelper as n}from"../../../../../_virtual/_rollupPluginBabelHelpers.js";import"../../../../../node_modules/core-js/modules/es.array.iterator.js";import"../../../../../node_modules/core-js/modules/es.object.to-string.js";import"../../../../../node_modules/core-js/modules/es.set.constructor.js";import"../../../../../node_modules/core-js/modules/es.string.iterator.js";import"../../../../../node_modules/core-js/modules/web.dom-collections.iterator.js";import"../../../../../node_modules/core-js/modules/es.object.entries.js";import"../../../../../node_modules/core-js/modules/es.array.reduce.js";import"../../../../../node_modules/core-js/modules/es.array.concat.js";var a=function(a,u){var c,i=a,l=new Set,d=function(){return i},p=function(){var e=t(s().mark((function e(r){var o,t,a,u,c;return s().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=r,o=n(l),e.prev=2,o.s();case 4:if((t=o.n()).done){e.next=14;break}if(a=t.value,u=null==a?void 0:a.selector,c=u?u(i):i,void 0!==a.previousValue&&a.previousValue===c){e.next=12;break}return a.previousValue=c,e.next=12,a(c);case 12:e.next=4;break;case 14:e.next=19;break;case 16:e.prev=16,e.t0=e.catch(2),o.e(e.t0);case 19:return e.prev=19,o.f(),e.finish(19);case 22:case"end":return e.stop()}}),e,null,[[2,16,19,22]])})));return function(r){return e.apply(this,arguments)}}(),m={getState:d,setState:p,subscribe:function(e){return l.add(e),function(){return l.delete(e)}}},f=u?null===(c=Object.entries(u))||void 0===c?void 0:c.reduce((function(n,a){var u=e(a,2),c=u[0],i=u[1];return r(r({},n),{},o({},c,t(s().mark((function e(){var r,o,t,n=arguments;return s().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(r=n.length,o=new Array(r),t=0;t<r;t++)o[t]=n[t];return e.abrupt("return",i.apply(void 0,[d,p].concat(o)));case 2:case"end":return e.stop()}}),e)})))))}),{}):null,j=r(r({},m),f?{actions:r({},f)}:{});return j};export{a as createStore};
1
+ import{slicedToArray as e,objectSpread2 as r,defineProperty as t,asyncToGenerator as o,regeneratorRuntime as s,createForOfIteratorHelper as n}from"../../../../../_virtual/_rollupPluginBabelHelpers.js";import"../../../../../node_modules/core-js/modules/es.array.iterator.js";import"../../../../../node_modules/core-js/modules/es.object.to-string.js";import"../../../../../node_modules/core-js/modules/es.set.constructor.js";import"../../../../../node_modules/core-js/modules/es.string.iterator.js";import"../../../../../node_modules/core-js/modules/web.dom-collections.iterator.js";import"../../../../../node_modules/core-js/modules/es.object.entries.js";import"../../../../../node_modules/core-js/modules/es.array.reduce.js";import"../../../../../node_modules/core-js/modules/es.array.concat.js";var a=function(a,u){var c,i=a,l=new Set,d=function(){return i},p=function(){var e=o(s().mark((function e(r){var t,o,a,u,c;return s().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=r,t=n(l),e.prev=2,t.s();case 4:if((o=t.n()).done){e.next=14;break}if(a=o.value,u=null==a?void 0:a.selector,c=u?u(i):i,void 0!==a.previousValue&&a.previousValue===c){e.next=12;break}return a.previousValue=c,e.next=12,a(c);case 12:e.next=4;break;case 14:e.next=19;break;case 16:e.prev=16,e.t0=e.catch(2),t.e(e.t0);case 19:return e.prev=19,t.f(),e.finish(19);case 22:return e.abrupt("return",i);case 23:case"end":return e.stop()}}),e,null,[[2,16,19,22]])})));return function(r){return e.apply(this,arguments)}}(),m={getState:d,setState:p,subscribe:function(e){return l.add(e),function(){return l.delete(e)}}},f=u?null===(c=Object.entries(u))||void 0===c?void 0:c.reduce((function(n,a){var u=e(a,2),c=u[0],i=u[1];return r(r({},n),{},t({},c,o(s().mark((function e(){var r,t,o,n=arguments;return s().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(r=n.length,t=new Array(r),o=0;o<r;o++)t[o]=n[o];return e.abrupt("return",i.apply(void 0,[d,p].concat(t)));case 2:case"end":return e.stop()}}),e)})))))}),{}):null,j=r(r({},m),f?{actions:r({},f)}:{});return j};export{a as createStore};
2
2
  //# sourceMappingURL=store.vanillajs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.vanillajs.js","sources":["../../../../../../../../src/core/utils/appState/store/store.vanillajs.ts"],"sourcesContent":["\n// TinyStore, inspired by https://github.com/jherr/syncexternalstore/blob/main/csr/src/store.js\nexport type ListenerCallBack<T> = (state: Partial<T>) => void\n\nexport type Selector<T> = (state: Partial<T>) => Partial<T>;\n\nexport type Listener<T> = {\n selector?: Selector<T>\n previousValue?: Partial<T>\n} & ListenerCallBack<T>\n\nexport type Store<T> = {\n getState: () => Partial<T>\n setState: (state: Partial<T>) => void\n subscribe: (listener: Listener<T>) => () => void\n} & { actions?: { [actionName: string]: ActionHandlerCaller } }\n\nexport type StoreWithActions<T> = Store<T> & { actions: { [actionName: string]: ActionHandlerCaller } }\n\n\nexport type ActionHandler<T> = (\n getState: Store<T>['getState'],\n setState: Store<T>['setState'],\n ...rest: unknown[]\n) => void | Partial<T> | Promise<void | Partial<T>>\n\n\nexport type ActionHandlerCaller = (...args: unknown[]) => void\n\n\nexport const createStore = <T>(\n initialState: Partial<T>,\n actions?: Record<string, ActionHandler<T>>,\n): Store<T> | StoreWithActions<T> => {\n let currentState: Partial<T> = initialState\n const listeners = new Set<Listener<T>>()\n\n const getState = () => currentState\n\n const setState = async (newState: Partial<T>) => {\n currentState = newState\n\n // eslint-disable-next-line no-restricted-syntax\n for (const listener of listeners) {\n // has Listener selector?\n const selector: Selector<T> | undefined = listener?.selector\n\n // TODO compare selected value to the previous values of that listener/selector pair\n // if listener.previousValue === selector(currentState) no call\n // else listener.previousValue = selector(currentState) and call\n // l1 cache, weak references?\n const newValue: Partial<T> = selector ? selector(currentState) : currentState\n\n // TODO plugin equality\n if (listener.previousValue === undefined || listener.previousValue !== newValue) {\n listener.previousValue = newValue\n // eslint-disable-next-line no-await-in-loop\n await listener(newValue)\n }\n }\n }\n\n const storeBaseicApi: Store<T> = {\n getState,\n setState,\n subscribe: (listener: Listener<T>) => {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n }\n\n\n const resolvedActions: Record<string, ActionHandlerCaller> | null | undefined\n = actions ? Object.entries(actions)?.reduce(\n (\n aggregator: Record<string, ActionHandlerCaller>,\n [actionName, actionHandler]: [string, ActionHandler<T>],\n ) => ({\n ...aggregator,\n [actionName]: async(...rest: unknown[]) => actionHandler(getState, setState, ...rest),\n }),\n {},\n ) : null\n\n const storeCombinedWithActions = {\n ...storeBaseicApi,\n ...(resolvedActions ? { actions: { ...resolvedActions } } : {}),\n }\n\n return resolvedActions\n ? storeCombinedWithActions as StoreWithActions<T> & { actions: keyof typeof resolvedActions }\n : storeCombinedWithActions as Store<T>\n}\n"],"names":["createStore","initialState","actions","_Object$entries","currentState","listeners","Set","getState","setState","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","newState","_iterator","_step","_listener","selector","newValue","wrap","_context","prev","next","_createForOfIteratorHelper","s","n","done","listener","value","undefined","previousValue","t0","e","f","finish","stop","_x","apply","this","arguments","storeBaseicApi","subscribe","add","delete","resolvedActions","Object","entries","reduce","aggregator","_ref2","_ref3","_slicedToArray","actionName","actionHandler","_objectSpread","_defineProperty","_callee2","_len","rest","_key","_args2","_context2","length","Array","abrupt","concat","storeCombinedWithActions"],"mappings":"4xBA8BO,IAAMA,EAAc,SACzBC,EACAC,GACmC,IAAAC,EAC/BC,EAA2BH,EACzBI,EAAY,IAAIC,IAEhBC,EAAW,WAAH,OAASH,CAAY,EAE7BI,EAAQ,WAAA,IAAAC,EAAAC,EAAAC,IAAAC,MAAG,SAAAC,EAAOC,GAAoB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAR,IAAAS,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAC1CnB,EAAeU,EAEfC,EAAAS,EACuBnB,GAASgB,EAAAC,KAAA,EAAAP,EAAAU,IAAA,KAAA,EAAA,IAAAT,EAAAD,EAAAW,KAAAC,KAAA,CAAAN,EAAAE,KAAA,GAAA,KAAA,CAU9B,GAVSK,EAAQZ,EAAAa,MAEXX,EAAoCU,eAAAA,EAAUV,SAM9CC,EAAuBD,EAAWA,EAASd,GAAgBA,OAGlC0B,IAA3BF,EAASG,eAA+BH,EAASG,gBAAkBZ,EAAQ,CAAAE,EAAAE,KAAA,GAAA,KAAA,CAE7E,OADAK,EAASG,cAAgBZ,EACzBE,EAAAE,KAAA,GACMK,EAAST,GAAS,KAAA,GAAAE,EAAAE,KAAA,EAAA,MAAA,KAAA,GAAAF,EAAAE,KAAA,GAAA,MAAA,KAAA,GAAAF,EAAAC,KAAA,GAAAD,EAAAW,GAAAX,EAAA,MAAA,GAAAN,EAAAkB,EAAAZ,EAAAW,IAAA,KAAA,GAAA,OAAAX,EAAAC,KAAA,GAAAP,EAAAmB,IAAAb,EAAAc,OAAA,IAAA,KAAA,GAAA,IAAA,MAAA,OAAAd,EAAAe,OAAA,GAAAvB,EAAA,KAAA,CAAA,CAAA,EAAA,GAAA,GAAA,KAG7B,KAAA,OArBKL,SAAQ6B,GAAA,OAAA5B,EAAA6B,MAAAC,KAAAC,UAAA,EAAA,GAuBRC,EAA2B,CAC/BlC,SAAAA,EACAC,SAAAA,EACAkC,UAAW,SAACd,GAEV,OADAvB,EAAUsC,IAAIf,GACP,WAAA,OAAMvB,EAAUuC,OAAOhB,EAAS,CACzC,GAIIiB,EACF3C,EAAiCC,QAA1BA,EAAG2C,OAAOC,QAAQ7C,cAAQC,SAAvBA,EAAyB6C,QACnC,SACEC,EAA+CC,GAAA,IAAAC,EAAAC,EAAAF,EAAA,GAC9CG,EAAUF,EAAA,GAAEG,EAAaH,EAAA,GAAA,OAAAI,EAAAA,EAEvBN,CAAAA,EAAAA,MAAUO,EAAA,CAAA,EACZH,EAAU3C,EAAAC,IAAAC,MAAG,SAAA6C,IAAA,IAAAC,EAAAC,EAAAC,EAAAC,EAAArB,UAAA,OAAA7B,IAAAS,MAAA,SAAA0C,GAAA,cAAAA,EAAAxC,KAAAwC,EAAAvC,MAAA,KAAA,EAAA,IAAAmC,EAAAG,EAAAE,OAASJ,EAAIK,IAAAA,MAAAN,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAJD,EAAIC,GAAAC,EAAAD,GAAA,OAAAE,EAAAG,OAAA,SAAgBX,EAAahB,WAAC/B,EAAAA,CAAAA,EAAUC,GAAQ0D,OAAKP,KAAK,KAAA,EAAA,IAAA,MAAA,OAAAG,EAAA1B,OAAA,GAAAqB,EAAA,MAAA,GAEvF,CAAA,GACE,KAEAU,EAAwBZ,EAAAA,EACzBd,CAAAA,EAAAA,GACCI,EAAkB,CAAE3C,QAAOqD,EAAA,CAAA,EAAOV,IAAsB,CAAE,GAGhE,OACIsB,CAEN"}
1
+ {"version":3,"file":"store.vanillajs.js","sources":["../../../../../../../../src/core/utils/appState/store/store.vanillajs.ts"],"sourcesContent":["\n// TinyStore, inspired by https://github.com/jherr/syncexternalstore/blob/main/csr/src/store.js\nexport type ListenerCallBack<T> = (state: Partial<T>) => void\n\nexport type Selector<T> = (state: Partial<T>) => Partial<T>;\n\nexport type Listener<T> = {\n selector?: Selector<T>\n previousValue?: Partial<T>\n} & ListenerCallBack<T>\n\nexport type Store<T> = {\n getState: () => Partial<T>\n setState: (state: Partial<T>) => Promise<Partial<T>>\n subscribe: (listener: Listener<T>) => () => void\n}\n// & { actions?: { [actionName: string]: ActionHandlerCaller } }\n\nexport type StoreWithActions<T> = Store<T> & { actions: { [actionName: string]: ActionHandlerCaller } }\n\n\nexport type ActionHandler<T> = (\n getState: Store<T>['getState'],\n setState: Store<T>['setState'],\n ...rest: unknown[]\n) => void | Partial<T> | Promise<void | Partial<T>>\n\n\nexport type ActionHandlerCaller = (...args: unknown[]) => void\n\n\nexport const createStore = <T>(\n initialState: Partial<T>,\n actions?: Record<string, ActionHandler<T>>,\n): Store<T> | StoreWithActions<T> => {\n let currentState: Partial<T> = initialState\n const listeners = new Set<Listener<T>>()\n\n const getState = () => currentState\n\n // TODO debounce, batch? what is the meaningful time between setState ofr UI to be rendered and registerd by User?\n const setState = async (newState: Partial<T>) => {\n currentState = newState\n\n // eslint-disable-next-line no-restricted-syntax\n for (const listener of listeners) {\n // has Listener selector?\n const selector: Selector<T> | undefined = listener?.selector\n\n // TODO compare selected value to the previous values of that listener/selector pair\n // if listener.previousValue === selector(currentState) no call\n // else listener.previousValue = selector(currentState) and call\n // l1 cache, weak references?\n const newValue: Partial<T> = selector ? selector(currentState) : currentState\n\n // TODO plugin equality\n if (listener.previousValue === undefined || listener.previousValue !== newValue) {\n listener.previousValue = newValue\n // eslint-disable-next-line no-await-in-loop\n await listener(newValue)\n }\n }\n return currentState\n }\n\n const storeBaseicApi: Store<T> = {\n getState,\n setState,\n subscribe: (listener: Listener<T>) => {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n }\n\n\n const resolvedActions: Record<string, ActionHandlerCaller> | null | undefined\n = actions ? Object.entries(actions)?.reduce(\n (\n aggregator: Record<string, ActionHandlerCaller>,\n [actionName, actionHandler]: [string, ActionHandler<T>],\n ) => ({\n ...aggregator,\n [actionName]: async(...rest: unknown[]) => actionHandler(getState, setState, ...rest),\n }),\n {},\n ) : null\n\n const storeCombinedWithActions = {\n ...storeBaseicApi,\n ...(resolvedActions ? { actions: { ...resolvedActions } } : {}),\n }\n\n return resolvedActions\n ? storeCombinedWithActions as StoreWithActions<T>\n : storeCombinedWithActions as Store<T>\n}\n"],"names":["createStore","initialState","actions","_Object$entries","currentState","listeners","Set","getState","setState","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","newState","_iterator","_step","_listener","selector","newValue","wrap","_context","prev","next","_createForOfIteratorHelper","s","n","done","listener","value","undefined","previousValue","t0","e","f","finish","abrupt","stop","_x","apply","this","arguments","storeBaseicApi","subscribe","add","delete","resolvedActions","Object","entries","reduce","aggregator","_ref2","_ref3","_slicedToArray","actionName","actionHandler","_objectSpread","_defineProperty","_callee2","_len","rest","_key","_args2","_context2","length","Array","concat","storeCombinedWithActions"],"mappings":"4xBA+BO,IAAMA,EAAc,SACzBC,EACAC,GACmC,IAAAC,EAC/BC,EAA2BH,EACzBI,EAAY,IAAIC,IAEhBC,EAAW,WAAH,OAASH,CAAY,EAG7BI,EAAQ,WAAA,IAAAC,EAAAC,EAAAC,IAAAC,MAAG,SAAAC,EAAOC,GAAoB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAR,IAAAS,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAC1CnB,EAAeU,EAEfC,EAAAS,EACuBnB,GAASgB,EAAAC,KAAA,EAAAP,EAAAU,IAAA,KAAA,EAAA,IAAAT,EAAAD,EAAAW,KAAAC,KAAA,CAAAN,EAAAE,KAAA,GAAA,KAAA,CAU9B,GAVSK,EAAQZ,EAAAa,MAEXX,EAAoCU,eAAAA,EAAUV,SAM9CC,EAAuBD,EAAWA,EAASd,GAAgBA,OAGlC0B,IAA3BF,EAASG,eAA+BH,EAASG,gBAAkBZ,EAAQ,CAAAE,EAAAE,KAAA,GAAA,KAAA,CAE7E,OADAK,EAASG,cAAgBZ,EACzBE,EAAAE,KAAA,GACMK,EAAST,GAAS,KAAA,GAAAE,EAAAE,KAAA,EAAA,MAAA,KAAA,GAAAF,EAAAE,KAAA,GAAA,MAAA,KAAA,GAAAF,EAAAC,KAAA,GAAAD,EAAAW,GAAAX,EAAA,MAAA,GAAAN,EAAAkB,EAAAZ,EAAAW,IAAA,KAAA,GAAA,OAAAX,EAAAC,KAAA,GAAAP,EAAAmB,IAAAb,EAAAc,OAAA,IAAA,KAAA,GAAA,OAAAd,EAAAe,OAAA,SAGrBhC,GAAY,KAAA,GAAA,IAAA,MAAA,OAAAiB,EAAAgB,OAAA,GAAAxB,EAAA,KAAA,CAAA,CAAA,EAAA,GAAA,GAAA,KACpB,KAAA,OAtBKL,SAAQ8B,GAAA,OAAA7B,EAAA8B,MAAAC,KAAAC,UAAA,EAAA,GAwBRC,EAA2B,CAC/BnC,SAAAA,EACAC,SAAAA,EACAmC,UAAW,SAACf,GAEV,OADAvB,EAAUuC,IAAIhB,GACP,WAAA,OAAMvB,EAAUwC,OAAOjB,EAAS,CACzC,GAIIkB,EACF5C,EAAiCC,QAA1BA,EAAG4C,OAAOC,QAAQ9C,cAAQC,SAAvBA,EAAyB8C,QACnC,SACEC,EAA+CC,GAAA,IAAAC,EAAAC,EAAAF,EAAA,GAC9CG,EAAUF,EAAA,GAAEG,EAAaH,EAAA,GAAA,OAAAI,EAAAA,EAEvBN,CAAAA,EAAAA,MAAUO,EAAA,CAAA,EACZH,EAAU5C,EAAAC,IAAAC,MAAG,SAAA8C,IAAA,IAAAC,EAAAC,EAAAC,EAAAC,EAAArB,UAAA,OAAA9B,IAAAS,MAAA,SAAA2C,GAAA,cAAAA,EAAAzC,KAAAyC,EAAAxC,MAAA,KAAA,EAAA,IAAAoC,EAAAG,EAAAE,OAASJ,EAAIK,IAAAA,MAAAN,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAJD,EAAIC,GAAAC,EAAAD,GAAA,OAAAE,EAAA3B,OAAA,SAAgBmB,EAAahB,WAAChC,EAAAA,CAAAA,EAAUC,GAAQ0D,OAAKN,KAAK,KAAA,EAAA,IAAA,MAAA,OAAAG,EAAA1B,OAAA,GAAAqB,EAAA,MAAA,GAEvF,CAAA,GACE,KAEAS,EAAwBX,EAAAA,EACzBd,CAAAA,EAAAA,GACCI,EAAkB,CAAE5C,QAAOsD,EAAA,CAAA,EAAOV,IAAsB,CAAE,GAGhE,OACIqB,CAEN"}
@@ -1 +1 @@
1
- {"version":3,"file":"useStore.react.js","sources":["../../../../../../../../src/core/utils/appState/store/useStore.react.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react'\n\nimport type { Store, Selector } from './store.vanillajs'\n\n\nexport type useStoreType<T> = [\n Partial<T>,\n Store<T>['setState'],\n Store<T>['actions'],\n]\n\n\nexport const useStore = <T>(\n store: Store<T>,\n selector: Selector<T> = (state: Partial<T>) => state,\n // TODO pass selector\n // useSyncExternalStore((...args) => {\n // args[0].selector?? store.subscribe(...args) }, () => selector(store.getState()));\n): useStoreType<T> => [\n useSyncExternalStore(store.subscribe, () => selector(store.getState())),\n store.setState,\n store.actions,\n ]\n\n\nexport type useStoreApiType<T> = [\n ReturnType<typeof useStore>,\n Store<T>['getState'],\n Store<T>['setState'],\n Store<T>['actions'],\n]\n\n\nexport const useStoreApi = <T>(\n store: Store<T>,\n selector: Selector<T> = (state: Partial<T>) => state,\n): useStoreApiType<T> => ([\n useStore(store, selector),\n store.getState,\n store.setState,\n store.actions,\n ])\n"],"names":["useStore","store","selector","arguments","length","undefined","state","useSyncExternalStore","subscribe","getState","setState","actions","useStoreApi"],"mappings":"iDAYaA,EAAW,SACtBC,GAAe,IACfC,EAAqBC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,SAACG,GAAiB,OAAKA,CAAK,EAAA,MAIhC,CAClBC,EAAqBN,EAAMO,WAAW,WAAA,OAAMN,EAASD,EAAMQ,WAAY,IACvER,EAAMS,SACNT,EAAMU,QACP,EAWUC,EAAc,SACzBX,GACoD,MAC5B,CACtBD,EAASC,EAFUE,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,SAACG,GAAiB,OAAKA,CAAK,GAGlDL,EAAMQ,SACNR,EAAMS,SACNT,EAAMU,QACP"}
1
+ {"version":3,"file":"useStore.react.js","sources":["../../../../../../../../src/core/utils/appState/store/useStore.react.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react'\n\nimport type { Store, StoreWithActions, Selector } from './store.vanillajs'\n\n\nexport type useStoreType<T> = [\n Partial<T>,\n Store<T>['setState'],\n StoreWithActions<T>['actions'],\n]\n\n\nexport const useStore = <T>(\n store: Store<T> | StoreWithActions<T>,\n selector: Selector<T> = (state: Partial<T>) => state,\n // TODO pass selector\n // useSyncExternalStore((...args) => {\n // args[0].selector?? store.subscribe(...args) }, () => selector(store.getState()));\n): useStoreType<T> => [\n useSyncExternalStore(store.subscribe, () => selector(store.getState())),\n store.setState,\n (store as StoreWithActions<T>).actions,\n ]\n\n\nexport type useStoreApiType<T> = [\n ReturnType<typeof useStore>,\n Store<T>['getState'],\n Store<T>['setState'],\n StoreWithActions<T>['actions'],\n]\n\n\nexport const useStoreApi = <T>(\n store: Store<T>,\n selector: Selector<T> = (state: Partial<T>) => state,\n): useStoreApiType<T> => ([\n useStore(store, selector),\n store.getState,\n store.setState,\n (store as StoreWithActions<T>).actions,\n ])\n"],"names":["useStore","store","selector","arguments","length","undefined","state","useSyncExternalStore","subscribe","getState","setState","actions","useStoreApi"],"mappings":"iDAYaA,EAAW,SACtBC,GAAqC,IACrCC,EAAqBC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,SAACG,GAAiB,OAAKA,CAAK,EAAA,MAIhC,CAClBC,EAAqBN,EAAMO,WAAW,WAAA,OAAMN,EAASD,EAAMQ,WAAY,IACvER,EAAMS,SACLT,EAA8BU,QAChC,EAWUC,EAAc,SACzBX,GACoD,MAC5B,CACtBD,EAASC,EAFUE,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,SAACG,GAAiB,OAAKA,CAAK,GAGlDL,EAAMQ,SACNR,EAAMS,SACLT,EAA8BU,QAChC"}
@@ -0,0 +1,24 @@
1
+ import { delay } from '../../utils/helpers';
2
+ import { pxToRem, defaultFontSize, convertHex, convertRGB } from './style';
3
+ describe('styling utils', () => {
4
+ it(`pxToRem to convert pixels to rem (${defaultFontSize})`, async () => {
5
+ expect.assertions(1);
6
+ await delay(1000);
7
+ expect(pxToRem(200)).toEqual(200 / defaultFontSize);
8
+ });
9
+ it('should convert hex to rgb', () => {
10
+ const hex = convertHex('#FFFFFF', 0.5);
11
+ expect(hex).toEqual('#FFFFFF80'.toLowerCase());
12
+ const hex2 = convertHex('#FFFFFF', 100);
13
+ expect(hex2).toEqual('#FFFFFFFF'.toLowerCase());
14
+ const hex3 = convertHex('#FFFFFF', 100, true);
15
+ expect(hex3).toEqual('rgba(255,255,255,1)'.toLowerCase());
16
+ });
17
+ it('should convert rgb to hex', () => {
18
+ const hex = convertRGB(255, 255, 255, 0.5);
19
+ expect(hex).toEqual('#FFFFFF80'.toLowerCase());
20
+ const hex2 = convertRGB(255, 255, 255, 1);
21
+ expect(hex2).toEqual('#FFFFFFFF'.toLowerCase());
22
+ });
23
+ });
24
+ //# sourceMappingURL=styling.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styling.spec.js","sourceRoot":"","sources":["../../../../../../src/core/ui/utils/styling.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAE3C,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAE1E,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,qCAAqC,eAAe,GAAG,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACpB,MAAM,KAAK,CAAC,IAAI,CAAC,CAAA;QACjB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,eAAe,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QAEtC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAA;QAE9C,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QAEvC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAA;QAE/C,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAE7C,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QAE1C,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAA;QAE9C,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QAEzC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -2,6 +2,7 @@ export const createStore = (initialState, actions) => {
2
2
  let currentState = initialState;
3
3
  const listeners = new Set();
4
4
  const getState = () => currentState;
5
+ // TODO debounce, batch? what is the meaningful time between setState ofr UI to be rendered and registerd by User?
5
6
  const setState = async (newState) => {
6
7
  currentState = newState;
7
8
  // eslint-disable-next-line no-restricted-syntax
@@ -20,6 +21,7 @@ export const createStore = (initialState, actions) => {
20
21
  await listener(newValue);
21
22
  }
22
23
  }
24
+ return currentState;
23
25
  };
24
26
  const storeBaseicApi = {
25
27
  getState,
@@ -1 +1 @@
1
- {"version":3,"file":"store.vanillajs.js","sourceRoot":"","sources":["../../../../../../../src/core/utils/appState/store/store.vanillajs.ts"],"names":[],"mappings":"AA8BA,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,YAAwB,EACxB,OAA0C,EACV,EAAE;IAClC,IAAI,YAAY,GAAe,YAAY,CAAA;IAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAe,CAAA;IAExC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,YAAY,CAAA;IAEnC,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAoB,EAAE,EAAE;QAC9C,YAAY,GAAG,QAAQ,CAAA;QAEvB,gDAAgD;QAChD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,yBAAyB;YACzB,MAAM,QAAQ,GAA4B,QAAQ,EAAE,QAAQ,CAAA;YAE5D,oFAAoF;YACpF,+DAA+D;YAC/D,gEAAgE;YAChE,6BAA6B;YAC7B,MAAM,QAAQ,GAAe,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;YAE7E,uBAAuB;YACvB,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS,IAAI,QAAQ,CAAC,aAAa,KAAK,QAAQ,EAAE;gBAC/E,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAA;gBACjC,4CAA4C;gBAC5C,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAA;aACzB;SACF;IACH,CAAC,CAAA;IAED,MAAM,cAAc,GAAa;QAC/B,QAAQ;QACR,QAAQ;QACR,SAAS,EAAE,CAAC,QAAqB,EAAE,EAAE;YACnC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACvB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACzC,CAAC;KACF,CAAA;IAGD,MAAM,eAAe,GACjB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,CACzC,CACE,UAA+C,EAC/C,CAAC,UAAU,EAAE,aAAa,CAA6B,EACvD,EAAE,CAAC,CAAC;QACJ,GAAG,UAAU;QACb,CAAC,UAAU,CAAC,EAAE,KAAK,EAAC,GAAG,IAAe,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;KACtF,CAAC,EACF,EAAE,CACH,CAAC,CAAC,CAAC,IAAI,CAAA;IAEV,MAAM,wBAAwB,GAAG;QAC/B,GAAG,cAAc;QACjB,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAA;IAED,OAAO,eAAe;QACpB,CAAC,CAAC,wBAA2F;QAC7F,CAAC,CAAC,wBAAoC,CAAA;AAC1C,CAAC,CAAA"}
1
+ {"version":3,"file":"store.vanillajs.js","sourceRoot":"","sources":["../../../../../../../src/core/utils/appState/store/store.vanillajs.ts"],"names":[],"mappings":"AA+BA,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,YAAwB,EACxB,OAA0C,EACV,EAAE;IAClC,IAAI,YAAY,GAAe,YAAY,CAAA;IAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAe,CAAA;IAExC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,YAAY,CAAA;IAEnC,kHAAkH;IAClH,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAoB,EAAE,EAAE;QAC9C,YAAY,GAAG,QAAQ,CAAA;QAEvB,gDAAgD;QAChD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,yBAAyB;YACzB,MAAM,QAAQ,GAA4B,QAAQ,EAAE,QAAQ,CAAA;YAE5D,oFAAoF;YACpF,+DAA+D;YAC/D,gEAAgE;YAChE,6BAA6B;YAC7B,MAAM,QAAQ,GAAe,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;YAE7E,uBAAuB;YACvB,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS,IAAI,QAAQ,CAAC,aAAa,KAAK,QAAQ,EAAE;gBAC/E,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAA;gBACjC,4CAA4C;gBAC5C,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAA;aACzB;SACF;QACD,OAAO,YAAY,CAAA;IACrB,CAAC,CAAA;IAED,MAAM,cAAc,GAAa;QAC/B,QAAQ;QACR,QAAQ;QACR,SAAS,EAAE,CAAC,QAAqB,EAAE,EAAE;YACnC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACvB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACzC,CAAC;KACF,CAAA;IAGD,MAAM,eAAe,GACjB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,CACzC,CACE,UAA+C,EAC/C,CAAC,UAAU,EAAE,aAAa,CAA6B,EACvD,EAAE,CAAC,CAAC;QACJ,GAAG,UAAU;QACb,CAAC,UAAU,CAAC,EAAE,KAAK,EAAC,GAAG,IAAe,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;KACtF,CAAC,EACF,EAAE,CACH,CAAC,CAAC,CAAC,IAAI,CAAA;IAEV,MAAM,wBAAwB,GAAG;QAC/B,GAAG,cAAc;QACjB,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAA;IAED,OAAO,eAAe;QACpB,CAAC,CAAC,wBAA+C;QACjD,CAAC,CAAC,wBAAoC,CAAA;AAC1C,CAAC,CAAA"}
@@ -0,0 +1,152 @@
1
+ import { delay } from '../../helpers/other';
2
+ import { createStore } from './store.vanillajs';
3
+ describe('Simple Tiny Store', () => {
4
+ let initialState;
5
+ beforeEach(() => {
6
+ initialState = {
7
+ data: [1, 2, 3],
8
+ date: new Date(),
9
+ messages: [
10
+ 'message 1',
11
+ 'message 2',
12
+ 'message 3',
13
+ ],
14
+ };
15
+ });
16
+ it('should have state', () => {
17
+ const store = createStore(initialState);
18
+ console.log('store', store);
19
+ console.log('store.getState()', store.getState());
20
+ expect(store).toBeDefined();
21
+ expect(store.getState()).toEqual(initialState);
22
+ });
23
+ it('should call subscribers', () => {
24
+ const store = createStore(initialState);
25
+ console.log('store', store);
26
+ // const subscriber = (state: Partial<CommentsState>) => console.log('state subscriber, state:', state);
27
+ const subscriber = jest.fn((state) => console.log('state subscriber, state:', state));
28
+ const unsubscribe = store.subscribe(subscriber);
29
+ store.setState({
30
+ ...initialState,
31
+ messages: ['Only one message'],
32
+ });
33
+ expect(subscriber).toHaveBeenCalled();
34
+ expect(subscriber).toHaveBeenCalledTimes(1);
35
+ unsubscribe();
36
+ store.setState({
37
+ ...initialState,
38
+ messages: ['Only one message after unsibscribed'],
39
+ });
40
+ expect(subscriber).toHaveBeenCalledTimes(1);
41
+ });
42
+ it('should call and await async subscribers', async () => {
43
+ expect.assertions(3);
44
+ const store = createStore(initialState);
45
+ console.log('store', store);
46
+ const subscriberCallback = async (state) => {
47
+ await delay(1000);
48
+ console.log('awaited state subscriber, state:', state);
49
+ };
50
+ const subscriber = jest.fn(subscriberCallback);
51
+ const unsubscribe = store.subscribe(subscriber);
52
+ await store.setState({
53
+ ...initialState,
54
+ messages: ['Only one message'],
55
+ });
56
+ expect(subscriber).toHaveBeenCalled();
57
+ expect(subscriber).toHaveBeenCalledTimes(1);
58
+ unsubscribe();
59
+ store.setState({
60
+ ...initialState,
61
+ messages: ['Only one message after unsibscribed'],
62
+ });
63
+ expect(subscriber).toHaveBeenCalledTimes(1);
64
+ });
65
+ it('should call subscribers with selected part of state', () => {
66
+ const store = createStore(initialState);
67
+ console.log('store', store);
68
+ const subscriberCallback = (state) => console.log('state subscriber, state:', state);
69
+ // normall use outside of test, mocking
70
+ // subscriberCallback.selector = ((state: Partial<CommentsState>) => ({ messages: state.messages }));
71
+ const subscriber = jest.fn(subscriberCallback);
72
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
73
+ // @ts-ignore
74
+ subscriber.selector = ((state) => ({ messages: state.messages }));
75
+ const unsubscribe = store.subscribe(subscriber);
76
+ store.setState({
77
+ ...initialState,
78
+ messages: ['Only one message'],
79
+ });
80
+ expect(subscriber).toHaveBeenCalled();
81
+ expect(subscriber).toHaveBeenCalledWith({ messages: ['Only one message'] });
82
+ unsubscribe();
83
+ store.setState({
84
+ ...initialState,
85
+ messages: ['Only one message after unsibscribed'],
86
+ });
87
+ expect(subscriber).toHaveBeenCalledTimes(1);
88
+ });
89
+ it('actions for fast state handling, and should call subscribers', async () => {
90
+ const store = createStore(initialState, {
91
+ addPriority: async (getState, setState) => {
92
+ await delay(300);
93
+ setState({
94
+ ...getState(),
95
+ priority: 3,
96
+ });
97
+ },
98
+ });
99
+ console.log('store', store);
100
+ // const subscriber = (state: Partial<CommentsState>) => console.log('state subscriber, state:', state);
101
+ const subscriber = jest.fn((state) => console.log('state subscriber, state:', state));
102
+ const unsubscribe = store.subscribe(subscriber);
103
+ store.setState({
104
+ ...initialState,
105
+ messages: ['Only one message'],
106
+ });
107
+ // async function needs to be awaited or expect in queued micro task
108
+ await store.actions?.addPriority?.();
109
+ // store.actions?.addPriority?.()
110
+ queueMicrotask(() => {
111
+ expect(subscriber).toHaveBeenCalled();
112
+ expect(subscriber).toHaveBeenCalledTimes(2);
113
+ unsubscribe();
114
+ store.setState({
115
+ ...initialState,
116
+ messages: ['Only one message after unsibscribed'],
117
+ });
118
+ expect(subscriber).toHaveBeenCalledTimes(2);
119
+ });
120
+ });
121
+ it('subscriber called only for value different then previous call of setState:listener', async () => {
122
+ expect.assertions(2);
123
+ const store = createStore(initialState, {
124
+ addPriority: async (getState, setState, ...args) => {
125
+ await delay(250);
126
+ setState({
127
+ ...getState(),
128
+ priority: args[0],
129
+ });
130
+ },
131
+ });
132
+ console.log('store', store);
133
+ const subscriber = jest.fn((state) => console.log('state subscriber, state:', state));
134
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
135
+ // @ts-ignore
136
+ subscriber.selector = (state) => state?.priority;
137
+ store.subscribe(subscriber);
138
+ // async function needs to be awaited or expect in queued micro task
139
+ await store.actions?.addPriority?.(3);
140
+ await store.actions?.addPriority?.(3);
141
+ await store.actions?.addPriority?.(4);
142
+ await store.actions?.addPriority?.(4);
143
+ await store.actions?.addPriority?.(5);
144
+ await store.actions?.addPriority?.(5);
145
+ await store.actions?.addPriority?.(4);
146
+ queueMicrotask(() => {
147
+ expect(subscriber).toHaveBeenCalled();
148
+ expect(subscriber).toHaveBeenCalledTimes(4);
149
+ });
150
+ });
151
+ });
152
+ //# sourceMappingURL=store.vanillajs.spec.js.map