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.
- package/CHANGELOG.md +646 -0
- package/README.md +24 -9
- package/dist/astro/client.cjs.js +16 -9
- package/dist/astro/client.cjs.js.map +1 -1
- package/dist/astro/client.mjs +16 -9
- package/dist/astro/client.mjs.map +1 -1
- package/dist/astro/index.cjs.js +362 -91
- package/dist/astro/index.cjs.js.map +1 -1
- package/dist/astro/index.mjs +362 -92
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/server.cjs.js +3396 -165
- package/dist/astro/server.cjs.js.map +1 -1
- package/dist/astro/server.mjs +3396 -165
- package/dist/astro/server.mjs.map +1 -1
- package/dist/devtools.cjs.js +1431 -0
- package/dist/devtools.cjs.js.map +1 -0
- package/dist/devtools.esm.js +1419 -0
- package/dist/devtools.esm.js.map +1 -0
- package/dist/diagnostics.cjs.js +3032 -296
- package/dist/diagnostics.cjs.js.map +1 -1
- package/dist/diagnostics.esm.js +3032 -296
- package/dist/diagnostics.esm.js.map +1 -1
- package/dist/element.cjs.js +230 -0
- package/dist/element.cjs.js.map +1 -0
- package/dist/element.esm.js +228 -0
- package/dist/element.esm.js.map +1 -0
- package/dist/guide/accessibility.md +257 -0
- package/dist/guide/adapters.md +221 -0
- package/dist/guide/behaviors.md +312 -0
- package/dist/guide/browser-sources.md +203 -0
- package/dist/guide/drag-and-drop.md +342 -0
- package/dist/guide/element-commands.md +306 -0
- package/dist/guide/error-boundaries.md +169 -0
- package/dist/guide/forms-reference.md +381 -0
- package/dist/guide/forms.md +250 -0
- package/dist/guide/http.md +299 -0
- package/dist/guide/inputs.md +173 -0
- package/dist/guide/persistence.md +245 -0
- package/dist/guide/recipes/carousel.md +155 -0
- package/dist/guide/recipes/charts.md +177 -0
- package/dist/guide/recipes/code-editor.md +135 -0
- package/dist/guide/recipes/data-grid.md +155 -0
- package/dist/guide/recipes/data-table.md +196 -0
- package/dist/guide/recipes/i18n.md +222 -0
- package/dist/guide/recipes/icons.md +115 -0
- package/dist/guide/recipes/overview.md +33 -0
- package/dist/guide/recipes/rich-text.md +154 -0
- package/dist/guide/resources.md +471 -0
- package/dist/guide/ssr.md +255 -0
- package/dist/guide/timers.md +178 -0
- package/dist/guide/ui/accordion.md +93 -0
- package/dist/guide/ui/combobox.md +144 -0
- package/dist/guide/ui/dialog.md +124 -0
- package/dist/guide/ui/disclosure.md +60 -0
- package/dist/guide/ui/menu.md +125 -0
- package/dist/guide/ui/overview.md +166 -0
- package/dist/guide/ui/popover.md +101 -0
- package/dist/guide/ui/select.md +114 -0
- package/dist/guide/ui/tabs.md +161 -0
- package/dist/guide/ui/toaster.md +152 -0
- package/dist/guide/ui/tooltip.md +103 -0
- package/dist/guide/undo.md +178 -0
- package/dist/guide/virtual-collections.md +183 -0
- package/dist/guide/web-components.md +179 -0
- package/dist/guide/widgets.md +217 -0
- package/dist/index.cjs.js +13178 -5769
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +2908 -276
- package/dist/index.esm.js +13149 -5779
- package/dist/index.esm.js.map +1 -1
- package/dist/jsx-dev-runtime.cjs.js +26 -334
- package/dist/jsx-dev-runtime.cjs.js.map +1 -1
- package/dist/jsx-dev-runtime.esm.js +19 -327
- package/dist/jsx-dev-runtime.esm.js.map +1 -1
- package/dist/jsx-runtime.cjs.js +26 -334
- package/dist/jsx-runtime.cjs.js.map +1 -1
- package/dist/jsx-runtime.esm.js +19 -327
- package/dist/jsx-runtime.esm.js.map +1 -1
- package/dist/jsx.cjs.js +10 -314
- package/dist/jsx.cjs.js.map +1 -1
- package/dist/jsx.esm.js +8 -315
- package/dist/jsx.esm.js.map +1 -1
- package/dist/react.cjs.js +117 -0
- package/dist/react.cjs.js.map +1 -0
- package/dist/react.esm.js +115 -0
- package/dist/react.esm.js.map +1 -0
- package/dist/shims/globalthis.cjs +20 -0
- package/dist/sygnal.min.js +1 -1
- package/dist/sygnal.min.js.map +1 -1
- package/dist/ui-combobox.cjs.js +169 -0
- package/dist/ui-combobox.cjs.js.map +1 -0
- package/dist/ui-combobox.esm.js +148 -0
- package/dist/ui-combobox.esm.js.map +1 -0
- package/dist/ui-menu.cjs.js +87 -0
- package/dist/ui-menu.cjs.js.map +1 -0
- package/dist/ui-menu.esm.js +66 -0
- package/dist/ui-menu.esm.js.map +1 -0
- package/dist/ui-select.cjs.js +104 -0
- package/dist/ui-select.cjs.js.map +1 -0
- package/dist/ui-select.esm.js +83 -0
- package/dist/ui-select.esm.js.map +1 -0
- package/dist/ui.cjs.js +738 -0
- package/dist/ui.cjs.js.map +1 -0
- package/dist/ui.esm.js +727 -0
- package/dist/ui.esm.js.map +1 -0
- package/dist/vike/ClientOnly.cjs.js +4 -14
- package/dist/vike/ClientOnly.cjs.js.map +1 -1
- package/dist/vike/ClientOnly.mjs +4 -14
- package/dist/vike/ClientOnly.mjs.map +1 -1
- package/dist/vike/{+config.js → config/+config.js} +9 -1
- package/dist/vike/config/+config.js.map +1 -0
- package/dist/vike/config/package.json +6 -0
- package/dist/vike/onRenderClient.cjs.js +165 -95
- package/dist/vike/onRenderClient.cjs.js.map +1 -1
- package/dist/vike/onRenderClient.mjs +165 -95
- package/dist/vike/onRenderClient.mjs.map +1 -1
- package/dist/vike/onRenderHtml.cjs.js +59 -24
- package/dist/vike/onRenderHtml.cjs.js.map +1 -1
- package/dist/vike/onRenderHtml.mjs +60 -25
- package/dist/vike/onRenderHtml.mjs.map +1 -1
- package/dist/vite/plugin.cjs.js +323 -88
- package/dist/vite/plugin.cjs.js.map +1 -1
- package/dist/vite/plugin.mjs +323 -89
- package/dist/vite/plugin.mjs.map +1 -1
- package/dist/zag.cjs.js +408 -0
- package/dist/zag.cjs.js.map +1 -0
- package/dist/zag.esm.js +405 -0
- package/dist/zag.esm.js.map +1 -0
- package/llms.txt +166 -103
- package/package.json +98 -14
- package/src/astro/client.ts +27 -16
- package/src/astro/index.d.ts +24 -0
- package/src/astro/index.ts +69 -3
- package/src/astro/server.ts +8 -2
- package/src/collection.ts +6 -93
- package/src/core/actions.ts +134 -0
- package/src/core/cell.ts +202 -0
- package/src/core/debug.ts +23 -0
- package/src/core/define.ts +242 -0
- package/src/core/hooks.ts +314 -0
- package/src/core/hosts/collection.ts +325 -0
- package/src/core/hosts/switchable.ts +146 -0
- package/src/core/instance.ts +592 -0
- package/src/core/markers/clientonly.ts +13 -0
- package/src/core/markers/lazy.ts +40 -0
- package/src/core/markers/portal.ts +96 -0
- package/src/core/markers/suspense.ts +41 -0
- package/src/core/markers/transition.ts +70 -0
- package/src/core/registry.ts +25 -0
- package/src/core/runtime.ts +573 -0
- package/src/core/statics.ts +104 -0
- package/src/core/teardown.ts +60 -0
- package/src/core/view.ts +37 -0
- package/src/cycle/dom/DocumentDOMSource.ts +13 -8
- package/src/cycle/dom/ElementFinder.ts +7 -9
- package/src/cycle/dom/EventDelegator.ts +174 -223
- package/src/cycle/dom/IsolateModule.ts +65 -35
- package/src/cycle/dom/MainDOMSource.ts +9 -2
- package/src/cycle/dom/PriorityQueue.ts +4 -2
- package/src/cycle/dom/SymbolTree.ts +18 -47
- package/src/cycle/dom/classNameModule.ts +9 -7
- package/src/cycle/dom/controlledInputModule.ts +23 -6
- package/src/cycle/dom/enrichEventStream.ts +25 -47
- package/src/cycle/dom/fragment.ts +7 -0
- package/src/cycle/dom/isolate.ts +30 -27
- package/src/cycle/dom/makeDOMDriver.ts +115 -56
- package/src/cycle/dom/mockDOMSource.ts +21 -1
- package/src/cycle/dom/modules.ts +16 -3
- package/src/cycle/dom/propsModule.ts +65 -0
- package/src/cycle/dom/selectModule.ts +22 -17
- package/src/cycle/dom/snabbdom.ts +1 -6
- package/src/cycle/dom/thunk.ts +3 -0
- package/src/cycle/dom/utils.ts +98 -0
- package/src/cycle/dom/viewTransition.ts +43 -0
- package/src/cycle/state/StateSource.ts +19 -3
- package/src/cycle/state/objIsEqual.ts +50 -0
- package/src/cycle/state/types.ts +0 -10
- package/src/defineComponent.ts +34 -0
- package/src/devtools.d.ts +151 -0
- package/src/devtools.ts +34 -0
- package/src/element.d.ts +59 -0
- package/src/element.ts +235 -0
- package/src/extra/backoff.ts +9 -0
- package/src/extra/behaviors.ts +169 -0
- package/src/extra/browserSignals.ts +23 -0
- package/src/extra/browserSources.ts +326 -0
- package/src/extra/command.ts +3 -3
- package/src/extra/controls.ts +47 -0
- package/src/extra/copyAsTest.ts +286 -0
- package/src/extra/devtools.ts +101 -31
- package/src/extra/devtoolsActions.ts +379 -0
- package/src/extra/devtoolsHook.ts +9 -0
- package/src/extra/devtoolsNext.ts +83 -0
- package/src/extra/diagnostics/checks/actionLog.ts +108 -0
- package/src/extra/diagnostics/checks/behaviors.ts +49 -0
- package/src/extra/diagnostics/checks/browserSources.ts +96 -0
- package/src/extra/diagnostics/checks/collections.ts +1 -1
- package/src/extra/diagnostics/checks/controls.ts +148 -0
- package/src/extra/diagnostics/checks/dataset.ts +57 -0
- package/src/extra/diagnostics/checks/dom.ts +20 -11
- package/src/extra/diagnostics/checks/elementCommands.ts +175 -0
- package/src/extra/diagnostics/checks/events.ts +17 -2
- package/src/extra/diagnostics/checks/fetch.ts +135 -0
- package/src/extra/diagnostics/checks/forms.ts +163 -0
- package/src/extra/diagnostics/checks/index.ts +97 -4
- package/src/extra/diagnostics/checks/inspect.ts +140 -32
- package/src/extra/diagnostics/checks/next.ts +417 -0
- package/src/extra/diagnostics/checks/persist.ts +54 -0
- package/src/extra/diagnostics/checks/props.ts +10 -5
- package/src/extra/diagnostics/checks/public.d.ts +98 -7
- package/src/extra/diagnostics/checks/replies.ts +128 -0
- package/src/extra/diagnostics/checks/router.ts +100 -0
- package/src/extra/diagnostics/checks/rxjsHints.ts +1 -1
- package/src/extra/diagnostics/checks/shared.ts +86 -2
- package/src/extra/diagnostics/checks/shorthand.ts +115 -0
- package/src/extra/diagnostics/checks/sortable.ts +129 -0
- package/src/extra/diagnostics/checks/state.ts +100 -7
- package/src/extra/diagnostics/checks/statics.ts +48 -0
- package/src/extra/diagnostics/checks/strict.ts +10 -67
- package/src/extra/diagnostics/checks/timers.ts +80 -0
- package/src/extra/diagnostics/checks/viewTransitions.ts +47 -0
- package/src/extra/diagnostics/checks/virtual.ts +73 -0
- package/src/extra/diagnostics/checks/widgets.ts +109 -0
- package/src/extra/diagnostics/checks/wiring.ts +66 -10
- package/src/extra/diagnostics/codes.ts +268 -23
- package/src/extra/diagnostics/index.ts +34 -9
- package/src/extra/diagnostics/legacy.ts +17 -0
- package/src/extra/driverFactories.ts +83 -19
- package/src/extra/elementCommands.ts +53 -0
- package/src/extra/fetchDriver.ts +519 -0
- package/src/extra/focusWithin.ts +27 -0
- package/src/extra/form.ts +268 -0
- package/src/extra/formHelpers.ts +139 -0
- package/src/extra/head.ts +106 -0
- package/src/extra/hmr.ts +2 -3
- package/src/extra/owned.ts +24 -0
- package/src/extra/pager.ts +50 -0
- package/src/extra/persist.ts +133 -0
- package/src/extra/pwa.ts +1 -1
- package/src/extra/queryCache.ts +107 -0
- package/src/extra/reducers.ts +1 -1
- package/src/extra/reduxDevtools.ts +92 -0
- package/src/extra/replies.ts +54 -0
- package/src/extra/router.ts +323 -0
- package/src/extra/run.ts +90 -217
- package/src/extra/selection.ts +76 -0
- package/src/extra/socketDriver.ts +265 -0
- package/src/extra/sortable.ts +377 -0
- package/src/extra/ssr.ts +427 -160
- package/src/extra/standardSchema.ts +27 -0
- package/src/extra/testing.ts +2433 -175
- package/src/extra/timers.ts +95 -0
- package/src/extra/undo.ts +261 -0
- package/src/extra/viewTransitions.ts +38 -0
- package/src/extra/virtual.ts +513 -0
- package/src/extra/widget.ts +201 -0
- package/src/index.d.ts +2631 -117
- package/src/index.ts +25 -4
- package/src/jsx-runtime.ts +15 -1
- package/src/jsx.ts +2 -1
- package/src/lazy.ts +50 -7
- package/src/portal.ts +3 -1
- package/src/pragma/index.ts +256 -133
- package/src/react-peers.d.ts +5 -0
- package/src/react.d.ts +43 -0
- package/src/react.ts +110 -0
- package/src/shared.ts +48 -0
- package/src/slot.ts +1 -1
- package/src/suspense.ts +3 -1
- package/src/switchable.ts +6 -121
- package/src/transition.ts +3 -1
- package/src/ui/accordion.ts +64 -0
- package/src/ui/dialog.ts +129 -0
- package/src/ui/disclosure.ts +35 -0
- package/src/ui/popover.ts +45 -0
- package/src/ui/shared.ts +94 -0
- package/src/ui/tabs.ts +82 -0
- package/src/ui/toaster.ts +198 -0
- package/src/ui/tooltip.ts +70 -0
- package/src/ui/zag/combobox.ts +115 -0
- package/src/ui/zag/menu.ts +40 -0
- package/src/ui/zag/select.ts +54 -0
- package/src/ui/zag/shared.ts +43 -0
- package/src/ui-combobox.d.ts +20 -0
- package/src/ui-combobox.ts +6 -0
- package/src/ui-menu.d.ts +30 -0
- package/src/ui-menu.ts +6 -0
- package/src/ui-select.d.ts +17 -0
- package/src/ui-select.ts +6 -0
- package/src/ui-zag-types.d.ts +42 -0
- package/src/ui.d.ts +208 -0
- package/src/ui.ts +15 -0
- package/src/vike/+config.ts +9 -1
- package/src/vike/ClientOnly.ts +1 -1
- package/src/vike/onRenderClient.ts +144 -96
- package/src/vike/onRenderHtml.ts +69 -26
- package/src/vike/types.ts +7 -1
- package/src/vite/globalthis-shim.ts +18 -0
- package/src/vite/globalthis.ts +56 -0
- package/src/vite/plugin.d.ts +22 -3
- package/src/vite/plugin.ts +222 -24
- package/src/zag.d.ts +64 -0
- package/src/zag.ts +238 -0
- package/dist/vike/+config.cjs.js +0 -66
- package/dist/vike/+config.cjs.js.map +0 -1
- package/dist/vike/+config.js.map +0 -1
- package/src/component.ts +0 -2301
- package/src/cycle/isolate/index.ts +0 -196
- package/src/cycle/run/index.ts +0 -151
- package/src/cycle/run/internals.ts +0 -143
- package/src/cycle/state/Collection.ts +0 -184
- package/src/cycle/state/index.ts +0 -5
- package/src/cycle/state/pickCombine.ts +0 -201
- package/src/cycle/state/pickMerge.ts +0 -122
- package/src/cycle/state/withState.ts +0 -47
- 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
|
-
)
|