wenay-common2 1.0.62 → 1.0.64

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 (37) hide show
  1. package/CLAUDE.md +63 -0
  2. package/README.md +6 -322
  3. package/doc/NAMING_RENAMES.md +36 -0
  4. package/doc/RECOMMENDATIONS.md +56 -0
  5. package/doc/REPLAY-PLAN.md +81 -0
  6. package/doc/changes/1.0.63.md +8 -0
  7. package/doc/changes/1.0.64.md +10 -0
  8. package/doc/changes/README.md +8 -0
  9. package/doc/wenay-common2-rare.md +522 -0
  10. package/doc/wenay-common2.md +334 -0
  11. package/lib/Common/Observe/index.d.ts +2 -1
  12. package/lib/Common/Observe/index.js +2 -1
  13. package/lib/Common/Observe/reactive.d.ts +21 -0
  14. package/lib/Common/Observe/reactive.js +374 -0
  15. package/lib/Common/Observe/reactive2.d.ts +1 -21
  16. package/lib/Common/Observe/reactive2.js +15 -372
  17. package/lib/Common/Observe/store-manager.d.ts +123 -0
  18. package/lib/Common/Observe/store-manager.js +227 -0
  19. package/lib/Common/Observe/store-offline.d.ts +10 -10
  20. package/lib/Common/Observe/store-offline.js +2 -2
  21. package/lib/Common/Observe/store.d.ts +1 -1
  22. package/lib/Common/Observe/store.js +13 -13
  23. package/lib/Common/async/promiseProgress.d.ts +2 -2
  24. package/lib/Common/events/Listen.d.ts +129 -1
  25. package/lib/Common/events/Listen.js +243 -15
  26. package/lib/Common/events/Listen3.d.ts +1 -129
  27. package/lib/Common/events/Listen3.js +15 -243
  28. package/lib/Common/events/SocketBuffer.d.ts +4 -4
  29. package/lib/Common/events/SocketServerHook.d.ts +2 -2
  30. package/lib/Common/events/replay-conflate.d.ts +2 -2
  31. package/lib/Common/events/replay-conflate.js +2 -2
  32. package/lib/Common/events/replay-history.d.ts +1 -1
  33. package/lib/Common/events/replay-listen.d.ts +9 -9
  34. package/lib/Common/events/replay-listen.js +4 -4
  35. package/lib/Common/events/replay-wire.d.ts +1 -1
  36. package/package.json +9 -2
  37. package/rpc.md +293 -0
@@ -1,17 +1,245 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./Listen3"), exports);
3
+ exports.getListenByOn = getListenByOn;
4
+ exports.isListenOn = isListenOn;
5
+ exports.registerListenOn = registerListenOn;
6
+ exports.createListenCore = createListenCore;
7
+ exports.createListen = createListen;
8
+ exports.createFastListen = createFastListen;
9
+ exports.listen = listen;
10
+ exports.withStoreListen = withStoreListen;
11
+ exports.createStoreListen = createStoreListen;
12
+ exports.listenStore = listenStore;
13
+ exports.toSlimListen = toSlimListen;
14
+ exports.slimListen = slimListen;
15
+ exports.isListenCallback = isListenCallback;
16
+ const listenByOn = new WeakMap();
17
+ function getListenByOn(fn) { return typeof fn == 'function' ? listenByOn.get(fn) : undefined; }
18
+ function isListenOn(fn) { return typeof fn == 'function' && listenByOn.has(fn); }
19
+ function registerListenOn(on, api) { listenByOn.set(on, api); }
20
+ function createListenCore(options = {}) {
21
+ const { fast = true, onRemove, event } = options;
22
+ const subs = new Map();
23
+ let dispatcher = (...args) => { subs.forEach(cb => cb(...args)); };
24
+ let cached = null;
25
+ const getArr = () => cached ?? (cached = Array.from(subs.values()));
26
+ function rebuild() {
27
+ cached = null;
28
+ const size = subs.size;
29
+ if (size == 0) {
30
+ dispatcher = null;
31
+ return;
32
+ }
33
+ if (size == 1) {
34
+ dispatcher = subs.values().next().value;
35
+ return;
36
+ }
37
+ if (size == 2) {
38
+ const [a, b] = getArr();
39
+ dispatcher = ((...args) => { a(...args); b(...args); });
40
+ return;
41
+ }
42
+ dispatcher = ((...args) => {
43
+ const arr = getArr();
44
+ for (let i = 0; i < arr.length; i++)
45
+ arr[i](...args);
46
+ });
47
+ }
48
+ function removeOne(key) {
49
+ if (!subs.has(key))
50
+ return;
51
+ subs.delete(key);
52
+ onRemove?.(key);
53
+ if (fast)
54
+ rebuild();
55
+ event?.('remove', subs.size, api);
56
+ }
57
+ const api = {
58
+ emit: ((...args) => { dispatcher?.(...args); }),
59
+ has: (key) => subs.has(key),
60
+ on: ((cb, { key } = {}) => {
61
+ const k = key ?? Symbol();
62
+ if (subs.has(k)) {
63
+ subs.delete(k);
64
+ onRemove?.(k);
65
+ }
66
+ subs.set(k, cb);
67
+ if (fast)
68
+ rebuild();
69
+ event?.('add', subs.size, api);
70
+ return function off() { removeOne(k); };
71
+ }),
72
+ off: (keyOrCallback) => {
73
+ if (typeof keyOrCallback == 'function') {
74
+ for (const [key, cb] of [...subs])
75
+ if (cb === keyOrCallback)
76
+ removeOne(key);
77
+ return;
78
+ }
79
+ if (keyOrCallback != null)
80
+ removeOne(keyOrCallback);
81
+ },
82
+ once: (cb, opts = {}) => {
83
+ let off = () => { };
84
+ off = api.on(((...args) => { off(); cb(...args); }), opts);
85
+ return off;
86
+ },
87
+ close: () => {
88
+ subs.clear();
89
+ if (fast)
90
+ rebuild();
91
+ },
92
+ count: () => subs.size,
93
+ keys: () => [...subs.keys()],
94
+ };
95
+ listenByOn.set(api.on, api);
96
+ return api;
97
+ }
98
+ function createListen(producer, options = {}) {
99
+ const { fast = true, event, closeOn } = options;
100
+ let teardown = null;
101
+ let closeSignalOff = null;
102
+ let closeHooks = null;
103
+ function forgetKey(key) {
104
+ closeHooks?.delete(key);
105
+ }
106
+ const core = createListenCore({
107
+ fast,
108
+ onRemove: forgetKey,
109
+ event: event && ((type, count) => {
110
+ if (type == 'remove')
111
+ event(type, count, api);
112
+ }),
113
+ });
114
+ const api = {
115
+ emit: core.emit,
116
+ has: core.has,
117
+ isRunning: () => teardown !== null,
118
+ run: () => {
119
+ if (teardown)
120
+ return;
121
+ teardown = (producer(core.emit) ?? (() => { }));
122
+ if (closeOn && !closeSignalOff)
123
+ closeSignalOff = closeOn.on(() => api.close());
124
+ },
125
+ close: () => {
126
+ const stop = teardown;
127
+ teardown = null;
128
+ stop?.();
129
+ core.close();
130
+ if (closeHooks) {
131
+ const hooks = closeHooks;
132
+ closeHooks = null;
133
+ hooks.forEach(cb => cb());
134
+ }
135
+ closeSignalOff?.();
136
+ closeSignalOff = null;
137
+ },
138
+ onClose: (cb) => {
139
+ closeHooks = closeHooks ?? new Map();
140
+ closeHooks.set(cb, cb);
141
+ return function offClose() { closeHooks?.delete(cb); };
142
+ },
143
+ on: ((cb, { cbClose, key } = {}) => {
144
+ const k = key ?? Symbol();
145
+ const off = core.on(cb, { key: k });
146
+ if (cbClose) {
147
+ closeHooks = closeHooks ?? new Map();
148
+ closeHooks.set(k, cbClose);
149
+ }
150
+ event?.('add', core.count(), api);
151
+ return off;
152
+ }),
153
+ off: core.off,
154
+ once: (cb, opts = {}) => {
155
+ let off = () => { };
156
+ off = api.on(((...args) => { off(); cb(...args); }), opts);
157
+ return off;
158
+ },
159
+ count: core.count,
160
+ keys: core.keys,
161
+ };
162
+ listenByOn.set(api.on, api);
163
+ return api;
164
+ }
165
+ function createFastListen(producer) {
166
+ return createListen(producer, { fast: true });
167
+ }
168
+ function listen(options = { fast: true }) {
169
+ let emit;
170
+ const api = createListen((next) => { emit = next; }, { fast: true, ...options });
171
+ api.run();
172
+ emit = api.emit;
173
+ return [emit, api];
174
+ }
175
+ function withStoreListen(base, currentProvider) {
176
+ function currentValue(current) {
177
+ if (typeof current == 'function')
178
+ return current();
179
+ return current ? currentProvider() : undefined;
180
+ }
181
+ const api = {
182
+ ...base,
183
+ on: ((cb, { cbClose, key, current } = {}) => {
184
+ const off = base.on(cb, { cbClose, key });
185
+ if (current) {
186
+ const value = currentValue(current);
187
+ if (value)
188
+ cb(...value);
189
+ }
190
+ return off;
191
+ }),
192
+ once: (cb, opts = {}) => {
193
+ if (opts.current) {
194
+ const value = currentValue(opts.current);
195
+ if (value) {
196
+ cb(...value);
197
+ return () => { };
198
+ }
199
+ }
200
+ let off = () => { };
201
+ off = base.on(((...args) => { off(); cb(...args); }), { key: opts.key });
202
+ return off;
203
+ },
204
+ };
205
+ listenByOn.set(api.on, api);
206
+ return api;
207
+ }
208
+ function createStoreListen(producer, options) {
209
+ const { current, ...listenOptions } = options;
210
+ return withStoreListen(createListen(producer, listenOptions), current);
211
+ }
212
+ function listenStore(options) {
213
+ const { current, ...listenOptions } = options;
214
+ let emit;
215
+ const base = createListen((next) => { emit = next; }, { fast: true, ...listenOptions });
216
+ const api = withStoreListen(base, current);
217
+ base.run();
218
+ emit = base.emit;
219
+ return [emit, api];
220
+ }
221
+ function toSlimListen(full) {
222
+ return {
223
+ on: (cb, opts) => full.on(cb, opts),
224
+ off: (keyOrCallback) => full.off(keyOrCallback),
225
+ close: () => full.close(),
226
+ count: () => full.count(),
227
+ };
228
+ }
229
+ function slimListen(options = { fast: true }) {
230
+ const [emit, full] = listen(options);
231
+ return [emit, toSlimListen(full)];
232
+ }
233
+ const LISTEN_CORE = ['emit', 'on', 'off', 'onClose', 'run', 'isRunning', 'close', 'count'];
234
+ function isListenCallback(obj) {
235
+ if (obj == null || typeof obj != 'object')
236
+ return false;
237
+ const keys = new Set(Object.keys(obj));
238
+ for (const key of LISTEN_CORE)
239
+ if (!keys.has(key))
240
+ return false;
241
+ for (const key of LISTEN_CORE)
242
+ if (typeof obj[key] != 'function')
243
+ return false;
244
+ return true;
245
+ }
@@ -1,129 +1 @@
1
- export type Listener<T extends any[]> = (...args: T) => void;
2
- export type NormalizeTuple<T> = T extends any[] ? T : [T];
3
- export type ListenKey = string | symbol;
4
- export type ListenOff = () => void;
5
- type CloseCallback = () => void;
6
- declare const LISTEN_ON_BRAND: unique symbol;
7
- export type ListenOn<Z extends any[] = any[]> = ((cb: Listener<Z>, opts?: {
8
- cbClose?: CloseCallback;
9
- key?: ListenKey;
10
- }) => ListenOff) & {
11
- readonly [LISTEN_ON_BRAND]: Z;
12
- };
13
- export type ListenOnCurrent<Z extends any[] = any[]> = ((cb: Listener<Z>, opts?: {
14
- cbClose?: CloseCallback;
15
- key?: ListenKey;
16
- current?: ListenCurrent<Z>;
17
- }) => ListenOff) & {
18
- readonly [LISTEN_ON_BRAND]: Z;
19
- };
20
- export type ListenCurrentProvider<Z extends any[]> = () => Z | undefined;
21
- export type ListenCurrent<Z extends any[]> = boolean | ListenCurrentProvider<Z>;
22
- export type ListenCoreApi<T = any> = {
23
- emit: Listener<NormalizeTuple<T>>;
24
- has(key: ListenKey): boolean;
25
- on: ListenOn<NormalizeTuple<T>>;
26
- off(keyOrCallback: Listener<NormalizeTuple<T>> | null | ListenKey): void;
27
- once(cb: Listener<NormalizeTuple<T>>, opts?: {
28
- key?: ListenKey;
29
- }): ListenOff;
30
- close(): void;
31
- count(): number;
32
- keys(): ListenKey[];
33
- };
34
- export type ListenApi<T = any> = ListenCoreApi<T> & {
35
- isRunning(): boolean;
36
- run(): void;
37
- onClose(cb: CloseCallback): ListenOff;
38
- };
39
- export type ListenCoreOptions<T = any> = {
40
- fast?: boolean;
41
- onRemove?: (key: ListenKey) => void;
42
- event?: (type: 'add' | 'remove', count: number, api: ListenCoreApi<T>) => void;
43
- };
44
- export type ListenOptions<T = any> = {
45
- event?: (type: 'add' | 'remove', count: number, api: ListenApi<T>) => void;
46
- fast?: boolean;
47
- closeOn?: ListenApi<any>;
48
- };
49
- export type ListenStoreOptions<T> = ListenOptions<T> & {
50
- current: ListenCurrentProvider<NormalizeTuple<T>>;
51
- };
52
- export type ListenOnBrand<Z extends any[] = any[]> = {
53
- readonly [LISTEN_ON_BRAND]: Z;
54
- };
55
- export declare function getListenByOn(fn: any): any;
56
- export declare function isListenOn(fn: any): boolean;
57
- export declare function registerListenOn(on: Function, api: any): void;
58
- export declare function createListenCore<T>(options?: ListenCoreOptions<T>): ListenCoreApi<T>;
59
- export declare function createListen<T>(producer: (emit: Listener<NormalizeTuple<T>>) => (void | ListenOff), options?: ListenOptions<T>): ListenApi<T>;
60
- export declare function createFastListen<T>(producer: (emit: Listener<NormalizeTuple<T>>) => (void | ListenOff)): ListenApi<T>;
61
- export declare function listen<T>(options?: ListenOptions<T>): readonly [Listener<NormalizeTuple<T>>, ListenApi<T>];
62
- export declare function withStoreListen<T>(base: ListenApi<T>, currentProvider: ListenCurrentProvider<NormalizeTuple<T>>): {
63
- on: ListenOnCurrent<NormalizeTuple<T>>;
64
- once: (cb: Listener<NormalizeTuple<T>>, opts?: {
65
- key?: ListenKey;
66
- current?: ListenCurrent<NormalizeTuple<T>>;
67
- }) => ListenOff;
68
- emit: Listener<NormalizeTuple<T>>;
69
- has(key: ListenKey): boolean;
70
- off(keyOrCallback: ListenKey | Listener<NormalizeTuple<T>> | null): void;
71
- close(): void;
72
- count(): number;
73
- keys(): ListenKey[];
74
- isRunning(): boolean;
75
- run(): void;
76
- onClose(cb: CloseCallback): ListenOff;
77
- };
78
- export type ListenStoreApi<T> = ReturnType<typeof withStoreListen<T>>;
79
- export declare function createStoreListen<T>(producer: (emit: Listener<NormalizeTuple<T>>) => (void | ListenOff), options: ListenStoreOptions<T>): {
80
- on: ListenOnCurrent<NormalizeTuple<T>>;
81
- once: (cb: Listener<NormalizeTuple<T>>, opts?: {
82
- key?: ListenKey;
83
- current?: ListenCurrent<NormalizeTuple<T>> | undefined;
84
- }) => ListenOff;
85
- emit: Listener<NormalizeTuple<T>>;
86
- has(key: ListenKey): boolean;
87
- off(keyOrCallback: ListenKey | Listener<NormalizeTuple<T>> | null): void;
88
- close(): void;
89
- count(): number;
90
- keys(): ListenKey[];
91
- isRunning(): boolean;
92
- run(): void;
93
- onClose(cb: CloseCallback): ListenOff;
94
- };
95
- export declare function listenStore<T>(options: ListenStoreOptions<T>): readonly [Listener<NormalizeTuple<T>>, {
96
- on: ListenOnCurrent<NormalizeTuple<T>>;
97
- once: (cb: Listener<NormalizeTuple<T>>, opts?: {
98
- key?: ListenKey;
99
- current?: ListenCurrent<NormalizeTuple<T>> | undefined;
100
- }) => ListenOff;
101
- emit: Listener<NormalizeTuple<T>>;
102
- has(key: ListenKey): boolean;
103
- off(keyOrCallback: ListenKey | Listener<NormalizeTuple<T>> | null): void;
104
- close(): void;
105
- count(): number;
106
- keys(): ListenKey[];
107
- isRunning(): boolean;
108
- run(): void;
109
- onClose(cb: CloseCallback): ListenOff;
110
- }];
111
- export declare function toSlimListen<T>(full: ListenApi<T>): {
112
- on: (cb: Listener<NormalizeTuple<T>>, opts?: {
113
- key?: ListenKey;
114
- }) => ListenOff;
115
- off: (keyOrCallback: Listener<NormalizeTuple<T>> | null | ListenKey) => void;
116
- close: () => void;
117
- count: () => number;
118
- };
119
- export type SlimListen<T> = ReturnType<typeof toSlimListen<T>>;
120
- export declare function slimListen<T>(options?: ListenOptions<T>): readonly [Listener<NormalizeTuple<T>>, {
121
- on: (cb: Listener<NormalizeTuple<T>>, opts?: {
122
- key?: ListenKey;
123
- } | undefined) => ListenOff;
124
- off: (keyOrCallback: ListenKey | Listener<NormalizeTuple<T>> | null) => void;
125
- close: () => void;
126
- count: () => number;
127
- }];
128
- export declare function isListenCallback(obj: any): obj is ListenApi;
129
- export {};
1
+ export * from './Listen';
@@ -1,245 +1,17 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getListenByOn = getListenByOn;
4
- exports.isListenOn = isListenOn;
5
- exports.registerListenOn = registerListenOn;
6
- exports.createListenCore = createListenCore;
7
- exports.createListen = createListen;
8
- exports.createFastListen = createFastListen;
9
- exports.listen = listen;
10
- exports.withStoreListen = withStoreListen;
11
- exports.createStoreListen = createStoreListen;
12
- exports.listenStore = listenStore;
13
- exports.toSlimListen = toSlimListen;
14
- exports.slimListen = slimListen;
15
- exports.isListenCallback = isListenCallback;
16
- const listenByOn = new WeakMap();
17
- function getListenByOn(fn) { return typeof fn == 'function' ? listenByOn.get(fn) : undefined; }
18
- function isListenOn(fn) { return typeof fn == 'function' && listenByOn.has(fn); }
19
- function registerListenOn(on, api) { listenByOn.set(on, api); }
20
- function createListenCore(options = {}) {
21
- const { fast = true, onRemove, event } = options;
22
- const subs = new Map();
23
- let dispatcher = (...args) => { subs.forEach(cb => cb(...args)); };
24
- let cached = null;
25
- const getArr = () => cached ?? (cached = Array.from(subs.values()));
26
- function rebuild() {
27
- cached = null;
28
- const size = subs.size;
29
- if (size == 0) {
30
- dispatcher = null;
31
- return;
32
- }
33
- if (size == 1) {
34
- dispatcher = subs.values().next().value;
35
- return;
36
- }
37
- if (size == 2) {
38
- const [a, b] = getArr();
39
- dispatcher = ((...args) => { a(...args); b(...args); });
40
- return;
41
- }
42
- dispatcher = ((...args) => {
43
- const arr = getArr();
44
- for (let i = 0; i < arr.length; i++)
45
- arr[i](...args);
46
- });
47
- }
48
- function removeOne(key) {
49
- if (!subs.has(key))
50
- return;
51
- subs.delete(key);
52
- onRemove?.(key);
53
- if (fast)
54
- rebuild();
55
- event?.('remove', subs.size, api);
56
- }
57
- const api = {
58
- emit: ((...args) => { dispatcher?.(...args); }),
59
- has: (key) => subs.has(key),
60
- on: ((cb, { key } = {}) => {
61
- const k = key ?? Symbol();
62
- if (subs.has(k)) {
63
- subs.delete(k);
64
- onRemove?.(k);
65
- }
66
- subs.set(k, cb);
67
- if (fast)
68
- rebuild();
69
- event?.('add', subs.size, api);
70
- return function off() { removeOne(k); };
71
- }),
72
- off: (keyOrCallback) => {
73
- if (typeof keyOrCallback == 'function') {
74
- for (const [key, cb] of [...subs])
75
- if (cb === keyOrCallback)
76
- removeOne(key);
77
- return;
78
- }
79
- if (keyOrCallback != null)
80
- removeOne(keyOrCallback);
81
- },
82
- once: (cb, opts = {}) => {
83
- let off = () => { };
84
- off = api.on(((...args) => { off(); cb(...args); }), opts);
85
- return off;
86
- },
87
- close: () => {
88
- subs.clear();
89
- if (fast)
90
- rebuild();
91
- },
92
- count: () => subs.size,
93
- keys: () => [...subs.keys()],
94
- };
95
- listenByOn.set(api.on, api);
96
- return api;
97
- }
98
- function createListen(producer, options = {}) {
99
- const { fast = true, event, closeOn } = options;
100
- let teardown = null;
101
- let closeSignalOff = null;
102
- let closeHooks = null;
103
- function forgetKey(key) {
104
- closeHooks?.delete(key);
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
105
7
  }
106
- const core = createListenCore({
107
- fast,
108
- onRemove: forgetKey,
109
- event: event && ((type, count) => {
110
- if (type == 'remove')
111
- event(type, count, api);
112
- }),
113
- });
114
- const api = {
115
- emit: core.emit,
116
- has: core.has,
117
- isRunning: () => teardown !== null,
118
- run: () => {
119
- if (teardown)
120
- return;
121
- teardown = (producer(core.emit) ?? (() => { }));
122
- if (closeOn && !closeSignalOff)
123
- closeSignalOff = closeOn.on(() => api.close());
124
- },
125
- close: () => {
126
- const stop = teardown;
127
- teardown = null;
128
- stop?.();
129
- core.close();
130
- if (closeHooks) {
131
- const hooks = closeHooks;
132
- closeHooks = null;
133
- hooks.forEach(cb => cb());
134
- }
135
- closeSignalOff?.();
136
- closeSignalOff = null;
137
- },
138
- onClose: (cb) => {
139
- closeHooks = closeHooks ?? new Map();
140
- closeHooks.set(cb, cb);
141
- return function offClose() { closeHooks?.delete(cb); };
142
- },
143
- on: ((cb, { cbClose, key } = {}) => {
144
- const k = key ?? Symbol();
145
- const off = core.on(cb, { key: k });
146
- if (cbClose) {
147
- closeHooks = closeHooks ?? new Map();
148
- closeHooks.set(k, cbClose);
149
- }
150
- event?.('add', core.count(), api);
151
- return off;
152
- }),
153
- off: core.off,
154
- once: (cb, opts = {}) => {
155
- let off = () => { };
156
- off = api.on(((...args) => { off(); cb(...args); }), opts);
157
- return off;
158
- },
159
- count: core.count,
160
- keys: core.keys,
161
- };
162
- listenByOn.set(api.on, api);
163
- return api;
164
- }
165
- function createFastListen(producer) {
166
- return createListen(producer, { fast: true });
167
- }
168
- function listen(options = { fast: true }) {
169
- let emit;
170
- const api = createListen((next) => { emit = next; }, { fast: true, ...options });
171
- api.run();
172
- emit = api.emit;
173
- return [emit, api];
174
- }
175
- function withStoreListen(base, currentProvider) {
176
- function currentValue(current) {
177
- if (typeof current == 'function')
178
- return current();
179
- return current ? currentProvider() : undefined;
180
- }
181
- const api = {
182
- ...base,
183
- on: ((cb, { cbClose, key, current } = {}) => {
184
- const off = base.on(cb, { cbClose, key });
185
- if (current) {
186
- const value = currentValue(current);
187
- if (value)
188
- cb(...value);
189
- }
190
- return off;
191
- }),
192
- once: (cb, opts = {}) => {
193
- if (opts.current) {
194
- const value = currentValue(opts.current);
195
- if (value) {
196
- cb(...value);
197
- return () => { };
198
- }
199
- }
200
- let off = () => { };
201
- off = base.on(((...args) => { off(); cb(...args); }), { key: opts.key });
202
- return off;
203
- },
204
- };
205
- listenByOn.set(api.on, api);
206
- return api;
207
- }
208
- function createStoreListen(producer, options) {
209
- const { current, ...listenOptions } = options;
210
- return withStoreListen(createListen(producer, listenOptions), current);
211
- }
212
- function listenStore(options) {
213
- const { current, ...listenOptions } = options;
214
- let emit;
215
- const base = createListen((next) => { emit = next; }, { fast: true, ...listenOptions });
216
- const api = withStoreListen(base, current);
217
- base.run();
218
- emit = base.emit;
219
- return [emit, api];
220
- }
221
- function toSlimListen(full) {
222
- return {
223
- on: (cb, opts) => full.on(cb, opts),
224
- off: (keyOrCallback) => full.off(keyOrCallback),
225
- close: () => full.close(),
226
- count: () => full.count(),
227
- };
228
- }
229
- function slimListen(options = { fast: true }) {
230
- const [emit, full] = listen(options);
231
- return [emit, toSlimListen(full)];
232
- }
233
- const LISTEN_CORE = ['emit', 'on', 'off', 'onClose', 'run', 'isRunning', 'close', 'count'];
234
- function isListenCallback(obj) {
235
- if (obj == null || typeof obj != 'object')
236
- return false;
237
- const keys = new Set(Object.keys(obj));
238
- for (const key of LISTEN_CORE)
239
- if (!keys.has(key))
240
- return false;
241
- for (const key of LISTEN_CORE)
242
- if (typeof obj[key] != 'function')
243
- return false;
244
- return true;
245
- }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./Listen"), exports);
@@ -18,13 +18,13 @@ export declare function listenSnapshot<T extends SocketSource<any | any[]>, T2 e
18
18
  memo: T4;
19
19
  snapshot?: (memo: T4) => T3;
20
20
  }): {
21
- run: (cb: import("./Listen3").Listener<[data: SocketPayload<T>, memo: T3]>, opts?: {
21
+ run: (cb: import("./Listen").Listener<[data: SocketPayload<T>, memo: T3]>, opts?: {
22
22
  cbClose?: () => void;
23
- key?: import("./Listen3").ListenKey;
24
- } | undefined) => import("./Listen3").ListenOff;
23
+ key?: import("./Listen").ListenKey;
24
+ } | undefined) => import("./Listen").ListenOff;
25
25
  snapshot: () => T3 | undefined;
26
26
  memo: T4;
27
- listenA: import("./Listen3").ListenApi<[data: SocketPayload<T>, memo: T3]>;
27
+ listenA: import("./Listen").ListenApi<[data: SocketPayload<T>, memo: T3]>;
28
28
  connect: () => void;
29
29
  readonly disconnect: ((a: Omit<Parameters<T>[0], "callback"> & {
30
30
  callback: (...data: NonUndefined<T2>) => any;
@@ -4,9 +4,9 @@ export declare function SocketServerHook(opt?: {
4
4
  transformer?: transformer;
5
5
  }): {
6
6
  obj: {
7
- [k: string]: readonly [import("./Listen3").Listener<[unknown]>, import("./Listen3").ListenApi<unknown>];
7
+ [k: string]: readonly [import("./Listen").Listener<[unknown]>, import("./Listen").ListenApi<unknown>];
8
8
  };
9
- get(tag: string): readonly [import("./Listen3").Listener<[unknown]>, import("./Listen3").ListenApi<unknown>];
9
+ get(tag: string): readonly [import("./Listen").Listener<[unknown]>, import("./Listen").ListenApi<unknown>];
10
10
  provider: (tag: string, data: any) => void;
11
11
  };
12
12
  export declare function WebSocketServerHook(s: ReturnType<typeof SocketServerHook>, paramsSoc?: Parameters<typeof soc>[1], disconnect?: () => any): {