sygnal 5.4.0 → 6.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 (316) hide show
  1. package/CHANGELOG.md +646 -0
  2. package/README.md +24 -9
  3. package/dist/astro/client.cjs.js +16 -9
  4. package/dist/astro/client.cjs.js.map +1 -1
  5. package/dist/astro/client.mjs +16 -9
  6. package/dist/astro/client.mjs.map +1 -1
  7. package/dist/astro/index.cjs.js +362 -91
  8. package/dist/astro/index.cjs.js.map +1 -1
  9. package/dist/astro/index.mjs +362 -92
  10. package/dist/astro/index.mjs.map +1 -1
  11. package/dist/astro/server.cjs.js +3396 -165
  12. package/dist/astro/server.cjs.js.map +1 -1
  13. package/dist/astro/server.mjs +3396 -165
  14. package/dist/astro/server.mjs.map +1 -1
  15. package/dist/devtools.cjs.js +1431 -0
  16. package/dist/devtools.cjs.js.map +1 -0
  17. package/dist/devtools.esm.js +1419 -0
  18. package/dist/devtools.esm.js.map +1 -0
  19. package/dist/diagnostics.cjs.js +3032 -296
  20. package/dist/diagnostics.cjs.js.map +1 -1
  21. package/dist/diagnostics.esm.js +3032 -296
  22. package/dist/diagnostics.esm.js.map +1 -1
  23. package/dist/element.cjs.js +230 -0
  24. package/dist/element.cjs.js.map +1 -0
  25. package/dist/element.esm.js +228 -0
  26. package/dist/element.esm.js.map +1 -0
  27. package/dist/guide/accessibility.md +257 -0
  28. package/dist/guide/adapters.md +221 -0
  29. package/dist/guide/behaviors.md +312 -0
  30. package/dist/guide/browser-sources.md +203 -0
  31. package/dist/guide/drag-and-drop.md +342 -0
  32. package/dist/guide/element-commands.md +306 -0
  33. package/dist/guide/error-boundaries.md +169 -0
  34. package/dist/guide/forms-reference.md +381 -0
  35. package/dist/guide/forms.md +250 -0
  36. package/dist/guide/http.md +299 -0
  37. package/dist/guide/inputs.md +173 -0
  38. package/dist/guide/persistence.md +245 -0
  39. package/dist/guide/recipes/carousel.md +155 -0
  40. package/dist/guide/recipes/charts.md +177 -0
  41. package/dist/guide/recipes/code-editor.md +135 -0
  42. package/dist/guide/recipes/data-grid.md +155 -0
  43. package/dist/guide/recipes/data-table.md +196 -0
  44. package/dist/guide/recipes/i18n.md +222 -0
  45. package/dist/guide/recipes/icons.md +115 -0
  46. package/dist/guide/recipes/overview.md +33 -0
  47. package/dist/guide/recipes/rich-text.md +154 -0
  48. package/dist/guide/resources.md +471 -0
  49. package/dist/guide/ssr.md +255 -0
  50. package/dist/guide/timers.md +178 -0
  51. package/dist/guide/ui/accordion.md +93 -0
  52. package/dist/guide/ui/combobox.md +144 -0
  53. package/dist/guide/ui/dialog.md +124 -0
  54. package/dist/guide/ui/disclosure.md +60 -0
  55. package/dist/guide/ui/menu.md +125 -0
  56. package/dist/guide/ui/overview.md +166 -0
  57. package/dist/guide/ui/popover.md +101 -0
  58. package/dist/guide/ui/select.md +114 -0
  59. package/dist/guide/ui/tabs.md +161 -0
  60. package/dist/guide/ui/toaster.md +152 -0
  61. package/dist/guide/ui/tooltip.md +103 -0
  62. package/dist/guide/undo.md +178 -0
  63. package/dist/guide/virtual-collections.md +183 -0
  64. package/dist/guide/web-components.md +179 -0
  65. package/dist/guide/widgets.md +217 -0
  66. package/dist/index.cjs.js +13178 -5769
  67. package/dist/index.cjs.js.map +1 -1
  68. package/dist/index.d.ts +2908 -276
  69. package/dist/index.esm.js +13149 -5779
  70. package/dist/index.esm.js.map +1 -1
  71. package/dist/jsx-dev-runtime.cjs.js +26 -334
  72. package/dist/jsx-dev-runtime.cjs.js.map +1 -1
  73. package/dist/jsx-dev-runtime.esm.js +19 -327
  74. package/dist/jsx-dev-runtime.esm.js.map +1 -1
  75. package/dist/jsx-runtime.cjs.js +26 -334
  76. package/dist/jsx-runtime.cjs.js.map +1 -1
  77. package/dist/jsx-runtime.esm.js +19 -327
  78. package/dist/jsx-runtime.esm.js.map +1 -1
  79. package/dist/jsx.cjs.js +10 -314
  80. package/dist/jsx.cjs.js.map +1 -1
  81. package/dist/jsx.esm.js +8 -315
  82. package/dist/jsx.esm.js.map +1 -1
  83. package/dist/react.cjs.js +117 -0
  84. package/dist/react.cjs.js.map +1 -0
  85. package/dist/react.esm.js +115 -0
  86. package/dist/react.esm.js.map +1 -0
  87. package/dist/shims/globalthis.cjs +20 -0
  88. package/dist/sygnal.min.js +1 -1
  89. package/dist/sygnal.min.js.map +1 -1
  90. package/dist/ui-combobox.cjs.js +169 -0
  91. package/dist/ui-combobox.cjs.js.map +1 -0
  92. package/dist/ui-combobox.esm.js +148 -0
  93. package/dist/ui-combobox.esm.js.map +1 -0
  94. package/dist/ui-menu.cjs.js +87 -0
  95. package/dist/ui-menu.cjs.js.map +1 -0
  96. package/dist/ui-menu.esm.js +66 -0
  97. package/dist/ui-menu.esm.js.map +1 -0
  98. package/dist/ui-select.cjs.js +104 -0
  99. package/dist/ui-select.cjs.js.map +1 -0
  100. package/dist/ui-select.esm.js +83 -0
  101. package/dist/ui-select.esm.js.map +1 -0
  102. package/dist/ui.cjs.js +738 -0
  103. package/dist/ui.cjs.js.map +1 -0
  104. package/dist/ui.esm.js +727 -0
  105. package/dist/ui.esm.js.map +1 -0
  106. package/dist/vike/ClientOnly.cjs.js +4 -14
  107. package/dist/vike/ClientOnly.cjs.js.map +1 -1
  108. package/dist/vike/ClientOnly.mjs +4 -14
  109. package/dist/vike/ClientOnly.mjs.map +1 -1
  110. package/dist/vike/{+config.js → config/+config.js} +9 -1
  111. package/dist/vike/config/+config.js.map +1 -0
  112. package/dist/vike/config/package.json +6 -0
  113. package/dist/vike/onRenderClient.cjs.js +165 -95
  114. package/dist/vike/onRenderClient.cjs.js.map +1 -1
  115. package/dist/vike/onRenderClient.mjs +165 -95
  116. package/dist/vike/onRenderClient.mjs.map +1 -1
  117. package/dist/vike/onRenderHtml.cjs.js +59 -24
  118. package/dist/vike/onRenderHtml.cjs.js.map +1 -1
  119. package/dist/vike/onRenderHtml.mjs +60 -25
  120. package/dist/vike/onRenderHtml.mjs.map +1 -1
  121. package/dist/vite/plugin.cjs.js +323 -88
  122. package/dist/vite/plugin.cjs.js.map +1 -1
  123. package/dist/vite/plugin.mjs +323 -89
  124. package/dist/vite/plugin.mjs.map +1 -1
  125. package/dist/zag.cjs.js +408 -0
  126. package/dist/zag.cjs.js.map +1 -0
  127. package/dist/zag.esm.js +405 -0
  128. package/dist/zag.esm.js.map +1 -0
  129. package/llms.txt +166 -103
  130. package/package.json +98 -14
  131. package/src/astro/client.ts +27 -16
  132. package/src/astro/index.d.ts +24 -0
  133. package/src/astro/index.ts +69 -3
  134. package/src/astro/server.ts +8 -2
  135. package/src/collection.ts +6 -93
  136. package/src/core/actions.ts +134 -0
  137. package/src/core/cell.ts +202 -0
  138. package/src/core/debug.ts +23 -0
  139. package/src/core/define.ts +242 -0
  140. package/src/core/hooks.ts +314 -0
  141. package/src/core/hosts/collection.ts +325 -0
  142. package/src/core/hosts/switchable.ts +146 -0
  143. package/src/core/instance.ts +592 -0
  144. package/src/core/markers/clientonly.ts +13 -0
  145. package/src/core/markers/lazy.ts +40 -0
  146. package/src/core/markers/portal.ts +96 -0
  147. package/src/core/markers/suspense.ts +41 -0
  148. package/src/core/markers/transition.ts +70 -0
  149. package/src/core/registry.ts +25 -0
  150. package/src/core/runtime.ts +573 -0
  151. package/src/core/statics.ts +104 -0
  152. package/src/core/teardown.ts +60 -0
  153. package/src/core/view.ts +37 -0
  154. package/src/cycle/dom/DocumentDOMSource.ts +13 -8
  155. package/src/cycle/dom/ElementFinder.ts +7 -9
  156. package/src/cycle/dom/EventDelegator.ts +174 -223
  157. package/src/cycle/dom/IsolateModule.ts +65 -35
  158. package/src/cycle/dom/MainDOMSource.ts +9 -2
  159. package/src/cycle/dom/PriorityQueue.ts +4 -2
  160. package/src/cycle/dom/SymbolTree.ts +18 -47
  161. package/src/cycle/dom/classNameModule.ts +9 -7
  162. package/src/cycle/dom/controlledInputModule.ts +23 -6
  163. package/src/cycle/dom/enrichEventStream.ts +25 -47
  164. package/src/cycle/dom/fragment.ts +7 -0
  165. package/src/cycle/dom/isolate.ts +30 -27
  166. package/src/cycle/dom/makeDOMDriver.ts +115 -56
  167. package/src/cycle/dom/mockDOMSource.ts +21 -1
  168. package/src/cycle/dom/modules.ts +16 -3
  169. package/src/cycle/dom/propsModule.ts +65 -0
  170. package/src/cycle/dom/selectModule.ts +22 -17
  171. package/src/cycle/dom/snabbdom.ts +1 -6
  172. package/src/cycle/dom/thunk.ts +3 -0
  173. package/src/cycle/dom/utils.ts +98 -0
  174. package/src/cycle/dom/viewTransition.ts +43 -0
  175. package/src/cycle/state/StateSource.ts +19 -3
  176. package/src/cycle/state/objIsEqual.ts +50 -0
  177. package/src/cycle/state/types.ts +0 -10
  178. package/src/defineComponent.ts +34 -0
  179. package/src/devtools.d.ts +151 -0
  180. package/src/devtools.ts +34 -0
  181. package/src/element.d.ts +59 -0
  182. package/src/element.ts +235 -0
  183. package/src/extra/backoff.ts +9 -0
  184. package/src/extra/behaviors.ts +169 -0
  185. package/src/extra/browserSignals.ts +23 -0
  186. package/src/extra/browserSources.ts +326 -0
  187. package/src/extra/command.ts +3 -3
  188. package/src/extra/controls.ts +47 -0
  189. package/src/extra/copyAsTest.ts +286 -0
  190. package/src/extra/devtools.ts +101 -31
  191. package/src/extra/devtoolsActions.ts +379 -0
  192. package/src/extra/devtoolsHook.ts +9 -0
  193. package/src/extra/devtoolsNext.ts +83 -0
  194. package/src/extra/diagnostics/checks/actionLog.ts +108 -0
  195. package/src/extra/diagnostics/checks/behaviors.ts +49 -0
  196. package/src/extra/diagnostics/checks/browserSources.ts +96 -0
  197. package/src/extra/diagnostics/checks/collections.ts +1 -1
  198. package/src/extra/diagnostics/checks/controls.ts +148 -0
  199. package/src/extra/diagnostics/checks/dataset.ts +57 -0
  200. package/src/extra/diagnostics/checks/dom.ts +20 -11
  201. package/src/extra/diagnostics/checks/elementCommands.ts +175 -0
  202. package/src/extra/diagnostics/checks/events.ts +17 -2
  203. package/src/extra/diagnostics/checks/fetch.ts +135 -0
  204. package/src/extra/diagnostics/checks/forms.ts +163 -0
  205. package/src/extra/diagnostics/checks/index.ts +97 -4
  206. package/src/extra/diagnostics/checks/inspect.ts +140 -32
  207. package/src/extra/diagnostics/checks/next.ts +417 -0
  208. package/src/extra/diagnostics/checks/persist.ts +54 -0
  209. package/src/extra/diagnostics/checks/props.ts +10 -5
  210. package/src/extra/diagnostics/checks/public.d.ts +98 -7
  211. package/src/extra/diagnostics/checks/replies.ts +128 -0
  212. package/src/extra/diagnostics/checks/router.ts +100 -0
  213. package/src/extra/diagnostics/checks/rxjsHints.ts +1 -1
  214. package/src/extra/diagnostics/checks/shared.ts +86 -2
  215. package/src/extra/diagnostics/checks/shorthand.ts +115 -0
  216. package/src/extra/diagnostics/checks/sortable.ts +129 -0
  217. package/src/extra/diagnostics/checks/state.ts +100 -7
  218. package/src/extra/diagnostics/checks/statics.ts +48 -0
  219. package/src/extra/diagnostics/checks/strict.ts +10 -67
  220. package/src/extra/diagnostics/checks/timers.ts +80 -0
  221. package/src/extra/diagnostics/checks/viewTransitions.ts +47 -0
  222. package/src/extra/diagnostics/checks/virtual.ts +73 -0
  223. package/src/extra/diagnostics/checks/widgets.ts +109 -0
  224. package/src/extra/diagnostics/checks/wiring.ts +66 -10
  225. package/src/extra/diagnostics/codes.ts +268 -23
  226. package/src/extra/diagnostics/index.ts +34 -9
  227. package/src/extra/diagnostics/legacy.ts +17 -0
  228. package/src/extra/driverFactories.ts +83 -19
  229. package/src/extra/elementCommands.ts +53 -0
  230. package/src/extra/fetchDriver.ts +519 -0
  231. package/src/extra/focusWithin.ts +27 -0
  232. package/src/extra/form.ts +268 -0
  233. package/src/extra/formHelpers.ts +139 -0
  234. package/src/extra/head.ts +106 -0
  235. package/src/extra/hmr.ts +2 -3
  236. package/src/extra/owned.ts +24 -0
  237. package/src/extra/pager.ts +50 -0
  238. package/src/extra/persist.ts +133 -0
  239. package/src/extra/pwa.ts +1 -1
  240. package/src/extra/queryCache.ts +107 -0
  241. package/src/extra/reducers.ts +1 -1
  242. package/src/extra/reduxDevtools.ts +92 -0
  243. package/src/extra/replies.ts +54 -0
  244. package/src/extra/router.ts +323 -0
  245. package/src/extra/run.ts +90 -217
  246. package/src/extra/selection.ts +76 -0
  247. package/src/extra/socketDriver.ts +265 -0
  248. package/src/extra/sortable.ts +377 -0
  249. package/src/extra/ssr.ts +427 -160
  250. package/src/extra/standardSchema.ts +27 -0
  251. package/src/extra/testing.ts +2433 -175
  252. package/src/extra/timers.ts +95 -0
  253. package/src/extra/undo.ts +261 -0
  254. package/src/extra/viewTransitions.ts +38 -0
  255. package/src/extra/virtual.ts +513 -0
  256. package/src/extra/widget.ts +201 -0
  257. package/src/index.d.ts +2631 -117
  258. package/src/index.ts +25 -4
  259. package/src/jsx-runtime.ts +15 -1
  260. package/src/jsx.ts +2 -1
  261. package/src/lazy.ts +50 -7
  262. package/src/portal.ts +3 -1
  263. package/src/pragma/index.ts +256 -133
  264. package/src/react-peers.d.ts +5 -0
  265. package/src/react.d.ts +43 -0
  266. package/src/react.ts +110 -0
  267. package/src/shared.ts +48 -0
  268. package/src/slot.ts +1 -1
  269. package/src/suspense.ts +3 -1
  270. package/src/switchable.ts +6 -121
  271. package/src/transition.ts +3 -1
  272. package/src/ui/accordion.ts +64 -0
  273. package/src/ui/dialog.ts +129 -0
  274. package/src/ui/disclosure.ts +35 -0
  275. package/src/ui/popover.ts +45 -0
  276. package/src/ui/shared.ts +94 -0
  277. package/src/ui/tabs.ts +82 -0
  278. package/src/ui/toaster.ts +198 -0
  279. package/src/ui/tooltip.ts +70 -0
  280. package/src/ui/zag/combobox.ts +115 -0
  281. package/src/ui/zag/menu.ts +40 -0
  282. package/src/ui/zag/select.ts +54 -0
  283. package/src/ui/zag/shared.ts +43 -0
  284. package/src/ui-combobox.d.ts +20 -0
  285. package/src/ui-combobox.ts +6 -0
  286. package/src/ui-menu.d.ts +30 -0
  287. package/src/ui-menu.ts +6 -0
  288. package/src/ui-select.d.ts +17 -0
  289. package/src/ui-select.ts +6 -0
  290. package/src/ui-zag-types.d.ts +42 -0
  291. package/src/ui.d.ts +208 -0
  292. package/src/ui.ts +15 -0
  293. package/src/vike/+config.ts +9 -1
  294. package/src/vike/ClientOnly.ts +1 -1
  295. package/src/vike/onRenderClient.ts +144 -96
  296. package/src/vike/onRenderHtml.ts +69 -26
  297. package/src/vike/types.ts +7 -1
  298. package/src/vite/globalthis-shim.ts +18 -0
  299. package/src/vite/globalthis.ts +56 -0
  300. package/src/vite/plugin.d.ts +22 -3
  301. package/src/vite/plugin.ts +222 -24
  302. package/src/zag.d.ts +64 -0
  303. package/src/zag.ts +238 -0
  304. package/dist/vike/+config.cjs.js +0 -66
  305. package/dist/vike/+config.cjs.js.map +0 -1
  306. package/dist/vike/+config.js.map +0 -1
  307. package/src/component.ts +0 -2301
  308. package/src/cycle/isolate/index.ts +0 -196
  309. package/src/cycle/run/index.ts +0 -151
  310. package/src/cycle/run/internals.ts +0 -143
  311. package/src/cycle/state/Collection.ts +0 -184
  312. package/src/cycle/state/index.ts +0 -5
  313. package/src/cycle/state/pickCombine.ts +0 -201
  314. package/src/cycle/state/pickMerge.ts +0 -122
  315. package/src/cycle/state/withState.ts +0 -47
  316. package/src/pragma/fn.ts +0 -55
@@ -1,201 +0,0 @@
1
- import xs, {Stream, InternalListener, OutSender, Operator, NO} from 'xstream';
2
- import {InternalInstances} from './types';
3
-
4
- class PickCombineListener<Si, T>
5
- implements InternalListener<T>, OutSender<Array<T>> {
6
- private key: string;
7
- public out: Stream<Array<T>>;
8
- public p: PickCombine<Si, T>;
9
- public val: T;
10
- public ins: Stream<T>;
11
-
12
- constructor(
13
- key: string,
14
- out: Stream<Array<T>>,
15
- p: PickCombine<Si, T>,
16
- ins: Stream<T>
17
- ) {
18
- this.key = key;
19
- this.out = out;
20
- this.p = p;
21
- this.val = NO as any;
22
- this.ins = ins;
23
- }
24
-
25
- public _n(t: T): void {
26
- const p = this.p,
27
- out = this.out;
28
- this.val = t;
29
- if (out === null) {
30
- return;
31
- }
32
- this.p.up();
33
- }
34
-
35
- public _e(err: any): void {
36
- const out = this.out;
37
- if (out === null) {
38
- return;
39
- }
40
- out._e(err);
41
- }
42
-
43
- public _c(): void {}
44
- }
45
-
46
- // True when the items present both before and after appear in a different relative
47
- // order. Additions emit through the new item's sink and removals are handled
48
- // separately, so only a permutation of the surviving items counts here.
49
- function isReordered(prev: Array<string>, next: Array<string>, dict: Map<string, any>): boolean {
50
- const m = prev.length;
51
- if (m === next.length) {
52
- let same = true;
53
- for (let i = 0; i < m && same; ++i) same = prev[i] === next[i];
54
- if (same) return false;
55
- }
56
- let j = 0;
57
- const seen = new Set(prev);
58
- for (let i = 0; i < next.length; ++i) {
59
- const key = next[i];
60
- if (!seen.has(key)) continue;
61
- while (j < m && !dict.has(prev[j])) ++j;
62
- if (prev[j] !== key) return true;
63
- ++j;
64
- }
65
- return false;
66
- }
67
-
68
- class PickCombine<Si, R> implements Operator<InternalInstances<Si>, Array<R>> {
69
- public type = 'combine';
70
- public ins: Stream<InternalInstances<Si>>;
71
- public out: Stream<Array<R>>;
72
- public sel: string;
73
- public ils: Map<string, PickCombineListener<Si, R>>;
74
- public inst: InternalInstances<Si>;
75
- // item keys in the order of the last instances (B-010: detect pure reorders)
76
- public keys: Array<string>;
77
-
78
- constructor(sel: string, ins: Stream<InternalInstances<Si>>) {
79
- this.ins = ins;
80
- this.sel = sel;
81
- this.out = null as any;
82
- this.ils = new Map();
83
- this.inst = null as any;
84
- this.keys = [];
85
- }
86
-
87
- public _start(out: Stream<Array<R>>): void {
88
- this.out = out;
89
- this.ins._add(this);
90
- }
91
-
92
- public _stop(): void {
93
- this.ins._remove(this);
94
- const ils = this.ils;
95
- ils.forEach(il => {
96
- il.ins._remove(il);
97
- il.ins = null as any;
98
- il.out = null as any;
99
- il.val = null as any;
100
- });
101
- ils.clear();
102
- this.out = null as any;
103
- this.ils = new Map();
104
- this.inst = null as any;
105
- this.keys = [];
106
- }
107
-
108
- public up(): void {
109
- const arr = this.inst.arr;
110
- const n = arr.length;
111
- const ils = this.ils;
112
- const outArr: Array<R> = Array(n);
113
- for (let i = 0; i < n; ++i) {
114
- const sinks = arr[i];
115
- const key = (sinks as any)._key as string;
116
- if (!ils.has(key)) {
117
- return;
118
- }
119
- const val = (ils.get(key) as any).val;
120
- if (val === NO) {
121
- return;
122
- }
123
- outArr[i] = val;
124
- }
125
- this.out._n(outArr);
126
- }
127
-
128
- public _n(inst: InternalInstances<Si>): void {
129
- this.inst = inst;
130
- const arrSinks = inst.arr;
131
- const ils = this.ils;
132
- const out = this.out;
133
- const sel = this.sel;
134
- const dict = inst.dict;
135
- const n = arrSinks.length;
136
- // remove
137
- let removed = false;
138
- ils.forEach((il, key) => {
139
- if (!dict.has(key)) {
140
- il.ins._remove(il);
141
- il.ins = null as any;
142
- il.out = null as any;
143
- il.val = null as any;
144
- ils.delete(key);
145
- removed = true;
146
- }
147
- });
148
- if (n === 0) {
149
- this.keys = [];
150
- out._n([]);
151
- return;
152
- }
153
- // add
154
- const keys: Array<string> = Array(n);
155
- for (let i = 0; i < n; ++i) {
156
- const sinks = arrSinks[i];
157
- const key = (sinks as any)._key as string;
158
- keys[i] = key;
159
- if (!(sinks as any)[sel]) {
160
- throw new Error('pickCombine found an undefined child sink stream');
161
- }
162
- const sink: Stream<any> = xs.fromObservable((sinks as any)[sel]);
163
- if (!ils.has(key)) {
164
- ils.set(key, new PickCombineListener(key, out, this, sink));
165
- sink._add(ils.get(key) as PickCombineListener<Si, R>);
166
- }
167
- }
168
- const reordered = isReordered(this.keys, keys, dict);
169
- this.keys = keys;
170
- // B-010: a permutation (swap, reverse, move) neither removes an item nor makes an
171
- // item sink emit, so re-emit whenever the order of keys changed. up() waits until
172
- // every item has emitted, so a brand new item still triggers its own emission.
173
- if (removed || reordered) {
174
- this.up();
175
- }
176
- }
177
-
178
- public _e(e: any): void {
179
- const out = this.out;
180
- if (out === null) {
181
- return;
182
- }
183
- out._e(e);
184
- }
185
-
186
- public _c(): void {
187
- const out = this.out;
188
- if (out === null) {
189
- return;
190
- }
191
- out._c();
192
- }
193
- }
194
-
195
- export function pickCombine(selector: string) {
196
- return function pickCombineOperator(
197
- inst$: Stream<InternalInstances<any>>
198
- ): Stream<Array<any>> {
199
- return new Stream(new PickCombine(selector, inst$));
200
- };
201
- }
@@ -1,122 +0,0 @@
1
- import xs, {Stream, InternalListener, OutSender, Operator} from 'xstream';
2
- import {InternalInstances} from './types';
3
-
4
- class PickMergeListener<Si, T> implements InternalListener<T>, OutSender<T> {
5
- public ins: Stream<T>;
6
- public out: Stream<T>;
7
- public p: PickMerge<Si, T>;
8
-
9
- constructor(out: Stream<T>, p: PickMerge<Si, T>, ins: Stream<T>) {
10
- this.ins = ins;
11
- this.out = out;
12
- this.p = p;
13
- }
14
-
15
- public _n(t: T): void {
16
- const p = this.p,
17
- out = this.out;
18
- if (out === null) {
19
- return;
20
- }
21
- out._n(t);
22
- }
23
-
24
- public _e(err: any): void {
25
- const out = this.out;
26
- if (out === null) {
27
- return;
28
- }
29
- out._e(err);
30
- }
31
-
32
- public _c(): void {}
33
- }
34
-
35
- class PickMerge<Si, T> implements Operator<InternalInstances<Si>, T> {
36
- public type = 'pickMerge';
37
- public ins: Stream<InternalInstances<Si>>;
38
- public out: Stream<T>;
39
- public sel: string;
40
- public ils: Map<string, PickMergeListener<Si, T>>;
41
- public inst: InternalInstances<Si>;
42
-
43
- constructor(sel: string, ins: Stream<InternalInstances<Si>>) {
44
- this.ins = ins;
45
- this.out = null as any;
46
- this.sel = sel;
47
- this.ils = new Map();
48
- this.inst = null as any;
49
- }
50
-
51
- public _start(out: Stream<T>): void {
52
- this.out = out;
53
- this.ins._add(this);
54
- }
55
-
56
- public _stop(): void {
57
- this.ins._remove(this);
58
- const ils = this.ils;
59
- ils.forEach((il, key) => {
60
- il.ins._remove(il);
61
- il.ins = null as any;
62
- il.out = null as any;
63
- ils.delete(key);
64
- });
65
- ils.clear();
66
- this.out = null as any;
67
- this.ils = new Map();
68
- this.inst = null as any;
69
- }
70
-
71
- public _n(inst: InternalInstances<Si>): void {
72
- this.inst = inst;
73
- const arrSinks = inst.arr;
74
- const ils = this.ils;
75
- const out = this.out;
76
- const sel = this.sel;
77
- const n = arrSinks.length;
78
- // add
79
- for (let i = 0; i < n; ++i) {
80
- const sinks = arrSinks[i];
81
- const key = (sinks as any)._key as string;
82
- const sink: Stream<any> = xs.fromObservable((sinks as any)[sel] || xs.never());
83
- if (!ils.has(key)) {
84
- ils.set(key, new PickMergeListener(out, this, sink));
85
- sink._add(ils.get(key) as PickMergeListener<Si, T>);
86
- }
87
- }
88
- // remove
89
- ils.forEach((il, key) => {
90
- if (!inst.dict.has(key) || !inst.dict.get(key)) {
91
- il.ins._remove(il);
92
- il.ins = null as any;
93
- il.out = null as any;
94
- ils.delete(key);
95
- }
96
- });
97
- }
98
-
99
- public _e(err: any) {
100
- const u = this.out;
101
- if (u === null) {
102
- return;
103
- }
104
- u._e(err);
105
- }
106
-
107
- public _c() {
108
- const u = this.out;
109
- if (u === null) {
110
- return;
111
- }
112
- u._c();
113
- }
114
- }
115
-
116
- export function pickMerge(selector: string) {
117
- return function pickMergeOperator(
118
- inst$: Stream<InternalInstances<any>>
119
- ): Stream<any> {
120
- return new Stream(new PickMerge(selector, inst$));
121
- };
122
- }
@@ -1,47 +0,0 @@
1
- import xs, {Stream} from 'xstream';
2
- import {concat} from '../../extra/xstreamExtras';
3
- import {MainFn, Reducer} from './types';
4
- import {StateSource} from './StateSource';
5
-
6
- export type Omit<T, K extends keyof T> = {[P in Exclude<keyof T, K>]: T[P]};
7
-
8
- export type Forbid<T, K extends keyof T> = Omit<T, K> & {[P in K]?: never};
9
-
10
- export type OSo<T, N extends string> = {[P in N]: StateSource<T>};
11
- export type OSi<T, N extends string> = {[P in N]: Stream<Reducer<T>>};
12
-
13
- export type MainWithState<
14
- So extends OSo<T, N>,
15
- Si extends OSi<T, N>,
16
- T,
17
- N extends string
18
- > = MainFn<Forbid<So, N>, Omit<Si, N>>;
19
-
20
- export function withState<
21
- So extends OSo<T, N>,
22
- Si extends OSi<T, N>,
23
- T = any,
24
- N extends string = 'state'
25
- >(main: MainFn<So, Si>, name: N = 'state' as N): MainWithState<So, Si, T, N> {
26
- return function mainWithState(sources: Forbid<So, N>): Omit<Si, N> {
27
- const reducerMimic$ = xs.create<Reducer<T>>();
28
- const state$ = reducerMimic$
29
- .fold((state, reducer) => reducer(state), void 0 as T | undefined)
30
- .drop(1);
31
- const innerSources: So = sources as any;
32
- (innerSources as any)[name] = new StateSource<any>(state$, name);
33
- const sinks = main(innerSources);
34
- if (sinks[name]) {
35
- const stream$ = concat(
36
- xs.fromObservable<Reducer<T>>(sinks[name]),
37
- xs.never()
38
- );
39
- stream$.subscribe({
40
- next: i => queueMicrotask(() => reducerMimic$._n(i)),
41
- error: err => queueMicrotask(() => reducerMimic$._e(err)),
42
- complete: () => queueMicrotask(() => reducerMimic$._c()),
43
- });
44
- }
45
- return sinks as any;
46
- };
47
- }
package/src/pragma/fn.ts DELETED
@@ -1,55 +0,0 @@
1
- // TODO: stop using extend here
2
- // @ts-ignore — no type declarations for 'extend'
3
- import _extend from 'extend'
4
-
5
- import * as is from './is'
6
-
7
- export const extend = (...objs: any[]): any => _extend(true, ...objs)
8
-
9
- export const assign = (...objs: any[]): any => _extend(false, ...objs)
10
-
11
- export const reduceDeep = <T>(arr: any[], fn: (acc: T, value: any) => T, initial: T): T => {
12
- let result = initial
13
- for (let i = 0; i < arr.length; i++) {
14
- const value = arr[i]
15
- if (is.array(value)) {
16
- result = reduceDeep(value, fn, result)
17
- } else {
18
- result = fn(result, value)
19
- }
20
- }
21
- return result
22
- }
23
-
24
- export const mapObject = (obj: Record<string, any>, fn: (key: string, val: any) => any): any => Object.keys(obj).map(
25
- (key) => fn(key, obj[key])
26
- ).reduce(
27
- (acc: any, curr: any) => extend(acc, curr),
28
- {}
29
- )
30
-
31
- export const deepifyKeys = (obj: Record<string, any>, modules: Record<string, any>): any => mapObject(obj,
32
- (key: string, val: any) => {
33
- const dashIndex = key.indexOf('-')
34
- if (dashIndex > -1 && modules[key.slice(0, dashIndex)] !== undefined) {
35
- const moduleData = {
36
- [key.slice(dashIndex + 1)]: val
37
- }
38
- return {
39
- [key.slice(0, dashIndex)]: moduleData
40
- }
41
- }
42
- return { [key]: val }
43
- }
44
- )
45
-
46
- export const flatifyKeys = (obj: Record<string, any>): any => mapObject(obj,
47
- (mod: string, data: any) => !is.object(data) ? ({ [mod]: data }) : mapObject(
48
- flatifyKeys(data),
49
- (key: string, val: any) => ({ [`${mod}-${key}`]: val })
50
- )
51
- )
52
-
53
- export const omit = (key: string, obj: Record<string, any>): any => mapObject(obj,
54
- (mod: string, data: any) => mod !== key ? ({ [mod]: data }) : {}
55
- )