@use-everywhere/core 0.5.0 → 0.6.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/dist/index.cjs +3 -60
- package/dist/index.d.cts +2 -38
- package/dist/index.d.ts +2 -38
- package/dist/index.js +0 -55
- package/dist/testing.cjs +84 -0
- package/dist/testing.d.cts +30 -0
- package/dist/testing.d.ts +30 -0
- package/dist/testing.js +56 -0
- package/dist/transport.types-tQ1cu6Xm.d.cts +12 -0
- package/dist/transport.types-tQ1cu6Xm.d.ts +12 -0
- package/package.json +24 -7
package/dist/index.cjs
CHANGED
|
@@ -18,14 +18,12 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
|
|
20
20
|
// src/index.ts
|
|
21
|
-
var
|
|
22
|
-
__export(
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
23
|
BroadcastChannelTransport: () => BroadcastChannelTransport,
|
|
24
24
|
CID_PARAM: () => CID_PARAM,
|
|
25
25
|
DEFAULT_NAME: () => DEFAULT_NAME,
|
|
26
26
|
HandshakeTimeoutError: () => HandshakeTimeoutError,
|
|
27
|
-
MemoryHub: () => MemoryHub,
|
|
28
|
-
MemoryTransport: () => MemoryTransport,
|
|
29
27
|
NoopTransport: () => NoopTransport,
|
|
30
28
|
WindowClosedError: () => WindowClosedError,
|
|
31
29
|
connectToOpener: () => connectToOpener,
|
|
@@ -44,7 +42,7 @@ __export(index_exports, {
|
|
|
44
42
|
sessionStorageAdapter: () => sessionStorageAdapter,
|
|
45
43
|
webStorageAdapter: () => webStorageAdapter
|
|
46
44
|
});
|
|
47
|
-
module.exports = __toCommonJS(
|
|
45
|
+
module.exports = __toCommonJS(src_exports);
|
|
48
46
|
|
|
49
47
|
// src/defaults.ts
|
|
50
48
|
var DEFAULT_NAME = "use-everywhere";
|
|
@@ -1030,67 +1028,12 @@ function connectToOpener(options) {
|
|
|
1030
1028
|
}
|
|
1031
1029
|
};
|
|
1032
1030
|
}
|
|
1033
|
-
|
|
1034
|
-
// src/transport/memory-transport.ts
|
|
1035
|
-
var MemoryTransport = class {
|
|
1036
|
-
constructor(hub) {
|
|
1037
|
-
this.hub = hub;
|
|
1038
|
-
this.listeners = /* @__PURE__ */ new Set();
|
|
1039
|
-
this.closed = false;
|
|
1040
|
-
}
|
|
1041
|
-
post(data) {
|
|
1042
|
-
if (this.closed) return;
|
|
1043
|
-
this.hub.broadcast(this, data);
|
|
1044
|
-
}
|
|
1045
|
-
subscribe(listener) {
|
|
1046
|
-
this.listeners.add(listener);
|
|
1047
|
-
return () => this.listeners.delete(listener);
|
|
1048
|
-
}
|
|
1049
|
-
close() {
|
|
1050
|
-
this.closed = true;
|
|
1051
|
-
this.listeners.clear();
|
|
1052
|
-
this.hub.disconnect(this);
|
|
1053
|
-
}
|
|
1054
|
-
/** @internal */
|
|
1055
|
-
deliver(data) {
|
|
1056
|
-
if (this.closed) return;
|
|
1057
|
-
for (const listener of this.listeners) listener(data);
|
|
1058
|
-
}
|
|
1059
|
-
};
|
|
1060
|
-
|
|
1061
|
-
// src/transport/memory-hub.ts
|
|
1062
|
-
var MemoryHub = class {
|
|
1063
|
-
constructor() {
|
|
1064
|
-
this.transports = /* @__PURE__ */ new Set();
|
|
1065
|
-
}
|
|
1066
|
-
connect() {
|
|
1067
|
-
const transport = new MemoryTransport(this);
|
|
1068
|
-
this.transports.add(transport);
|
|
1069
|
-
return transport;
|
|
1070
|
-
}
|
|
1071
|
-
/** @internal */
|
|
1072
|
-
broadcast(from, data) {
|
|
1073
|
-
structuredClone(data);
|
|
1074
|
-
for (const transport of this.transports) {
|
|
1075
|
-
if (transport !== from) {
|
|
1076
|
-
const copy = structuredClone(data);
|
|
1077
|
-
queueMicrotask(() => transport.deliver(copy));
|
|
1078
|
-
}
|
|
1079
|
-
}
|
|
1080
|
-
}
|
|
1081
|
-
/** @internal */
|
|
1082
|
-
disconnect(transport) {
|
|
1083
|
-
this.transports.delete(transport);
|
|
1084
|
-
}
|
|
1085
|
-
};
|
|
1086
1031
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1087
1032
|
0 && (module.exports = {
|
|
1088
1033
|
BroadcastChannelTransport,
|
|
1089
1034
|
CID_PARAM,
|
|
1090
1035
|
DEFAULT_NAME,
|
|
1091
1036
|
HandshakeTimeoutError,
|
|
1092
|
-
MemoryHub,
|
|
1093
|
-
MemoryTransport,
|
|
1094
1037
|
NoopTransport,
|
|
1095
1038
|
WindowClosedError,
|
|
1096
1039
|
connectToOpener,
|
package/dist/index.d.cts
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Minimal message bus. Implementations: BroadcastChannelTransport (same-origin),
|
|
3
|
-
* NoopTransport (SSR / local-only), MemoryTransport (tests). A transport never
|
|
4
|
-
* echoes a client's own posts back to it.
|
|
5
|
-
*/
|
|
6
|
-
interface Transport {
|
|
7
|
-
post(data: unknown): void;
|
|
8
|
-
subscribe(listener: (data: unknown) => void): () => void;
|
|
9
|
-
close(): void;
|
|
10
|
-
}
|
|
1
|
+
import { T as Transport } from './transport.types-tQ1cu6Xm.cjs';
|
|
11
2
|
|
|
12
3
|
type MessageMap = Record<string, unknown>;
|
|
13
4
|
type PeerKind = 'tab' | 'worker' | (string & {});
|
|
@@ -425,31 +416,4 @@ declare function isBroadcastChannelAvailable(): boolean;
|
|
|
425
416
|
/** Default factory: real BroadcastChannel when available, otherwise a local no-op. */
|
|
426
417
|
declare function defaultTransport(name: string): Transport;
|
|
427
418
|
|
|
428
|
-
|
|
429
|
-
declare class MemoryTransport implements Transport {
|
|
430
|
-
private hub;
|
|
431
|
-
private listeners;
|
|
432
|
-
private closed;
|
|
433
|
-
constructor(hub: MemoryHub);
|
|
434
|
-
post(data: unknown): void;
|
|
435
|
-
subscribe(listener: (data: unknown) => void): () => void;
|
|
436
|
-
close(): void;
|
|
437
|
-
/** @internal */
|
|
438
|
-
deliver(data: unknown): void;
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
/**
|
|
442
|
-
* In-memory hub for tests: N transports attached to one hub, each post is
|
|
443
|
-
* delivered to every *other* transport on a microtask (mirrors BroadcastChannel's
|
|
444
|
-
* async, no-self-echo delivery).
|
|
445
|
-
*/
|
|
446
|
-
declare class MemoryHub {
|
|
447
|
-
private transports;
|
|
448
|
-
connect(): MemoryTransport;
|
|
449
|
-
/** @internal */
|
|
450
|
-
broadcast(from: MemoryTransport, data: unknown): void;
|
|
451
|
-
/** @internal */
|
|
452
|
-
disconnect(transport: MemoryTransport): void;
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
export { BroadcastChannelTransport, type BusEvent, type BusObserver, type BusWire, CID_PARAM, type Channel, type CommonOptions, type ConnectToOpenerOptions, DEFAULT_NAME, type DebugOptions, HandshakeTimeoutError, type Leader, type LeaderOptions, type LeaderSnapshot, MemoryHub, MemoryTransport, type MessageEventLike, type MessageMap, type MessageMeta, NoopTransport, type OpenWindowOptions, type OpenedWindow, type OpenerConnection, type Peer, type PeerKind, type PersistAdapter, type PersistOptions, type Persisted, type Presence, type PresenceOptions, type SharedStore, type SharedStoreOptions, type StorageLike, type Transport, type Version, type WebStorageAdapterOptions, WindowClosedError, type WindowEventTarget, type WindowLike, connectToOpener, createChannel, createLeader, createPresence, createSharedStore, defaultTransport, enableDebug, getBusNames, isBroadcastChannelAvailable, localStorageAdapter, newer, observeBus, openWindow, sessionStorageAdapter, webStorageAdapter };
|
|
419
|
+
export { BroadcastChannelTransport, type BusEvent, type BusObserver, type BusWire, CID_PARAM, type Channel, type CommonOptions, type ConnectToOpenerOptions, DEFAULT_NAME, type DebugOptions, HandshakeTimeoutError, type Leader, type LeaderOptions, type LeaderSnapshot, type MessageEventLike, type MessageMap, type MessageMeta, NoopTransport, type OpenWindowOptions, type OpenedWindow, type OpenerConnection, type Peer, type PeerKind, type PersistAdapter, type PersistOptions, type Persisted, type Presence, type PresenceOptions, type SharedStore, type SharedStoreOptions, type StorageLike, Transport, type Version, type WebStorageAdapterOptions, WindowClosedError, type WindowEventTarget, type WindowLike, connectToOpener, createChannel, createLeader, createPresence, createSharedStore, defaultTransport, enableDebug, getBusNames, isBroadcastChannelAvailable, localStorageAdapter, newer, observeBus, openWindow, sessionStorageAdapter, webStorageAdapter };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Minimal message bus. Implementations: BroadcastChannelTransport (same-origin),
|
|
3
|
-
* NoopTransport (SSR / local-only), MemoryTransport (tests). A transport never
|
|
4
|
-
* echoes a client's own posts back to it.
|
|
5
|
-
*/
|
|
6
|
-
interface Transport {
|
|
7
|
-
post(data: unknown): void;
|
|
8
|
-
subscribe(listener: (data: unknown) => void): () => void;
|
|
9
|
-
close(): void;
|
|
10
|
-
}
|
|
1
|
+
import { T as Transport } from './transport.types-tQ1cu6Xm.js';
|
|
11
2
|
|
|
12
3
|
type MessageMap = Record<string, unknown>;
|
|
13
4
|
type PeerKind = 'tab' | 'worker' | (string & {});
|
|
@@ -425,31 +416,4 @@ declare function isBroadcastChannelAvailable(): boolean;
|
|
|
425
416
|
/** Default factory: real BroadcastChannel when available, otherwise a local no-op. */
|
|
426
417
|
declare function defaultTransport(name: string): Transport;
|
|
427
418
|
|
|
428
|
-
|
|
429
|
-
declare class MemoryTransport implements Transport {
|
|
430
|
-
private hub;
|
|
431
|
-
private listeners;
|
|
432
|
-
private closed;
|
|
433
|
-
constructor(hub: MemoryHub);
|
|
434
|
-
post(data: unknown): void;
|
|
435
|
-
subscribe(listener: (data: unknown) => void): () => void;
|
|
436
|
-
close(): void;
|
|
437
|
-
/** @internal */
|
|
438
|
-
deliver(data: unknown): void;
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
/**
|
|
442
|
-
* In-memory hub for tests: N transports attached to one hub, each post is
|
|
443
|
-
* delivered to every *other* transport on a microtask (mirrors BroadcastChannel's
|
|
444
|
-
* async, no-self-echo delivery).
|
|
445
|
-
*/
|
|
446
|
-
declare class MemoryHub {
|
|
447
|
-
private transports;
|
|
448
|
-
connect(): MemoryTransport;
|
|
449
|
-
/** @internal */
|
|
450
|
-
broadcast(from: MemoryTransport, data: unknown): void;
|
|
451
|
-
/** @internal */
|
|
452
|
-
disconnect(transport: MemoryTransport): void;
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
export { BroadcastChannelTransport, type BusEvent, type BusObserver, type BusWire, CID_PARAM, type Channel, type CommonOptions, type ConnectToOpenerOptions, DEFAULT_NAME, type DebugOptions, HandshakeTimeoutError, type Leader, type LeaderOptions, type LeaderSnapshot, MemoryHub, MemoryTransport, type MessageEventLike, type MessageMap, type MessageMeta, NoopTransport, type OpenWindowOptions, type OpenedWindow, type OpenerConnection, type Peer, type PeerKind, type PersistAdapter, type PersistOptions, type Persisted, type Presence, type PresenceOptions, type SharedStore, type SharedStoreOptions, type StorageLike, type Transport, type Version, type WebStorageAdapterOptions, WindowClosedError, type WindowEventTarget, type WindowLike, connectToOpener, createChannel, createLeader, createPresence, createSharedStore, defaultTransport, enableDebug, getBusNames, isBroadcastChannelAvailable, localStorageAdapter, newer, observeBus, openWindow, sessionStorageAdapter, webStorageAdapter };
|
|
419
|
+
export { BroadcastChannelTransport, type BusEvent, type BusObserver, type BusWire, CID_PARAM, type Channel, type CommonOptions, type ConnectToOpenerOptions, DEFAULT_NAME, type DebugOptions, HandshakeTimeoutError, type Leader, type LeaderOptions, type LeaderSnapshot, type MessageEventLike, type MessageMap, type MessageMeta, NoopTransport, type OpenWindowOptions, type OpenedWindow, type OpenerConnection, type Peer, type PeerKind, type PersistAdapter, type PersistOptions, type Persisted, type Presence, type PresenceOptions, type SharedStore, type SharedStoreOptions, type StorageLike, Transport, type Version, type WebStorageAdapterOptions, WindowClosedError, type WindowEventTarget, type WindowLike, connectToOpener, createChannel, createLeader, createPresence, createSharedStore, defaultTransport, enableDebug, getBusNames, isBroadcastChannelAvailable, localStorageAdapter, newer, observeBus, openWindow, sessionStorageAdapter, webStorageAdapter };
|
package/dist/index.js
CHANGED
|
@@ -982,66 +982,11 @@ function connectToOpener(options) {
|
|
|
982
982
|
}
|
|
983
983
|
};
|
|
984
984
|
}
|
|
985
|
-
|
|
986
|
-
// src/transport/memory-transport.ts
|
|
987
|
-
var MemoryTransport = class {
|
|
988
|
-
constructor(hub) {
|
|
989
|
-
this.hub = hub;
|
|
990
|
-
this.listeners = /* @__PURE__ */ new Set();
|
|
991
|
-
this.closed = false;
|
|
992
|
-
}
|
|
993
|
-
post(data) {
|
|
994
|
-
if (this.closed) return;
|
|
995
|
-
this.hub.broadcast(this, data);
|
|
996
|
-
}
|
|
997
|
-
subscribe(listener) {
|
|
998
|
-
this.listeners.add(listener);
|
|
999
|
-
return () => this.listeners.delete(listener);
|
|
1000
|
-
}
|
|
1001
|
-
close() {
|
|
1002
|
-
this.closed = true;
|
|
1003
|
-
this.listeners.clear();
|
|
1004
|
-
this.hub.disconnect(this);
|
|
1005
|
-
}
|
|
1006
|
-
/** @internal */
|
|
1007
|
-
deliver(data) {
|
|
1008
|
-
if (this.closed) return;
|
|
1009
|
-
for (const listener of this.listeners) listener(data);
|
|
1010
|
-
}
|
|
1011
|
-
};
|
|
1012
|
-
|
|
1013
|
-
// src/transport/memory-hub.ts
|
|
1014
|
-
var MemoryHub = class {
|
|
1015
|
-
constructor() {
|
|
1016
|
-
this.transports = /* @__PURE__ */ new Set();
|
|
1017
|
-
}
|
|
1018
|
-
connect() {
|
|
1019
|
-
const transport = new MemoryTransport(this);
|
|
1020
|
-
this.transports.add(transport);
|
|
1021
|
-
return transport;
|
|
1022
|
-
}
|
|
1023
|
-
/** @internal */
|
|
1024
|
-
broadcast(from, data) {
|
|
1025
|
-
structuredClone(data);
|
|
1026
|
-
for (const transport of this.transports) {
|
|
1027
|
-
if (transport !== from) {
|
|
1028
|
-
const copy = structuredClone(data);
|
|
1029
|
-
queueMicrotask(() => transport.deliver(copy));
|
|
1030
|
-
}
|
|
1031
|
-
}
|
|
1032
|
-
}
|
|
1033
|
-
/** @internal */
|
|
1034
|
-
disconnect(transport) {
|
|
1035
|
-
this.transports.delete(transport);
|
|
1036
|
-
}
|
|
1037
|
-
};
|
|
1038
985
|
export {
|
|
1039
986
|
BroadcastChannelTransport,
|
|
1040
987
|
CID_PARAM,
|
|
1041
988
|
DEFAULT_NAME,
|
|
1042
989
|
HandshakeTimeoutError,
|
|
1043
|
-
MemoryHub,
|
|
1044
|
-
MemoryTransport,
|
|
1045
990
|
NoopTransport,
|
|
1046
991
|
WindowClosedError,
|
|
1047
992
|
connectToOpener,
|
package/dist/testing.cjs
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/testing.ts
|
|
21
|
+
var testing_exports = {};
|
|
22
|
+
__export(testing_exports, {
|
|
23
|
+
MemoryHub: () => MemoryHub,
|
|
24
|
+
MemoryTransport: () => MemoryTransport
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(testing_exports);
|
|
27
|
+
|
|
28
|
+
// src/transport/memory-transport.ts
|
|
29
|
+
var MemoryTransport = class {
|
|
30
|
+
constructor(hub) {
|
|
31
|
+
this.hub = hub;
|
|
32
|
+
this.listeners = /* @__PURE__ */ new Set();
|
|
33
|
+
this.closed = false;
|
|
34
|
+
}
|
|
35
|
+
post(data) {
|
|
36
|
+
if (this.closed) return;
|
|
37
|
+
this.hub.broadcast(this, data);
|
|
38
|
+
}
|
|
39
|
+
subscribe(listener) {
|
|
40
|
+
this.listeners.add(listener);
|
|
41
|
+
return () => this.listeners.delete(listener);
|
|
42
|
+
}
|
|
43
|
+
close() {
|
|
44
|
+
this.closed = true;
|
|
45
|
+
this.listeners.clear();
|
|
46
|
+
this.hub.disconnect(this);
|
|
47
|
+
}
|
|
48
|
+
/** @internal */
|
|
49
|
+
deliver(data) {
|
|
50
|
+
if (this.closed) return;
|
|
51
|
+
for (const listener of this.listeners) listener(data);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// src/transport/memory-hub.ts
|
|
56
|
+
var MemoryHub = class {
|
|
57
|
+
constructor() {
|
|
58
|
+
this.transports = /* @__PURE__ */ new Set();
|
|
59
|
+
}
|
|
60
|
+
connect() {
|
|
61
|
+
const transport = new MemoryTransport(this);
|
|
62
|
+
this.transports.add(transport);
|
|
63
|
+
return transport;
|
|
64
|
+
}
|
|
65
|
+
/** @internal */
|
|
66
|
+
broadcast(from, data) {
|
|
67
|
+
structuredClone(data);
|
|
68
|
+
for (const transport of this.transports) {
|
|
69
|
+
if (transport !== from) {
|
|
70
|
+
const copy = structuredClone(data);
|
|
71
|
+
queueMicrotask(() => transport.deliver(copy));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** @internal */
|
|
76
|
+
disconnect(transport) {
|
|
77
|
+
this.transports.delete(transport);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
81
|
+
0 && (module.exports = {
|
|
82
|
+
MemoryHub,
|
|
83
|
+
MemoryTransport
|
|
84
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { T as Transport } from './transport.types-tQ1cu6Xm.cjs';
|
|
2
|
+
|
|
3
|
+
/** One simulated client on a MemoryHub. Create via hub.connect(). */
|
|
4
|
+
declare class MemoryTransport implements Transport {
|
|
5
|
+
private hub;
|
|
6
|
+
private listeners;
|
|
7
|
+
private closed;
|
|
8
|
+
constructor(hub: MemoryHub);
|
|
9
|
+
post(data: unknown): void;
|
|
10
|
+
subscribe(listener: (data: unknown) => void): () => void;
|
|
11
|
+
close(): void;
|
|
12
|
+
/** @internal */
|
|
13
|
+
deliver(data: unknown): void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* In-memory hub for tests: N transports attached to one hub, each post is
|
|
18
|
+
* delivered to every *other* transport on a microtask (mirrors BroadcastChannel's
|
|
19
|
+
* async, no-self-echo delivery).
|
|
20
|
+
*/
|
|
21
|
+
declare class MemoryHub {
|
|
22
|
+
private transports;
|
|
23
|
+
connect(): MemoryTransport;
|
|
24
|
+
/** @internal */
|
|
25
|
+
broadcast(from: MemoryTransport, data: unknown): void;
|
|
26
|
+
/** @internal */
|
|
27
|
+
disconnect(transport: MemoryTransport): void;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { MemoryHub, MemoryTransport };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { T as Transport } from './transport.types-tQ1cu6Xm.js';
|
|
2
|
+
|
|
3
|
+
/** One simulated client on a MemoryHub. Create via hub.connect(). */
|
|
4
|
+
declare class MemoryTransport implements Transport {
|
|
5
|
+
private hub;
|
|
6
|
+
private listeners;
|
|
7
|
+
private closed;
|
|
8
|
+
constructor(hub: MemoryHub);
|
|
9
|
+
post(data: unknown): void;
|
|
10
|
+
subscribe(listener: (data: unknown) => void): () => void;
|
|
11
|
+
close(): void;
|
|
12
|
+
/** @internal */
|
|
13
|
+
deliver(data: unknown): void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* In-memory hub for tests: N transports attached to one hub, each post is
|
|
18
|
+
* delivered to every *other* transport on a microtask (mirrors BroadcastChannel's
|
|
19
|
+
* async, no-self-echo delivery).
|
|
20
|
+
*/
|
|
21
|
+
declare class MemoryHub {
|
|
22
|
+
private transports;
|
|
23
|
+
connect(): MemoryTransport;
|
|
24
|
+
/** @internal */
|
|
25
|
+
broadcast(from: MemoryTransport, data: unknown): void;
|
|
26
|
+
/** @internal */
|
|
27
|
+
disconnect(transport: MemoryTransport): void;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { MemoryHub, MemoryTransport };
|
package/dist/testing.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// src/transport/memory-transport.ts
|
|
2
|
+
var MemoryTransport = class {
|
|
3
|
+
constructor(hub) {
|
|
4
|
+
this.hub = hub;
|
|
5
|
+
this.listeners = /* @__PURE__ */ new Set();
|
|
6
|
+
this.closed = false;
|
|
7
|
+
}
|
|
8
|
+
post(data) {
|
|
9
|
+
if (this.closed) return;
|
|
10
|
+
this.hub.broadcast(this, data);
|
|
11
|
+
}
|
|
12
|
+
subscribe(listener) {
|
|
13
|
+
this.listeners.add(listener);
|
|
14
|
+
return () => this.listeners.delete(listener);
|
|
15
|
+
}
|
|
16
|
+
close() {
|
|
17
|
+
this.closed = true;
|
|
18
|
+
this.listeners.clear();
|
|
19
|
+
this.hub.disconnect(this);
|
|
20
|
+
}
|
|
21
|
+
/** @internal */
|
|
22
|
+
deliver(data) {
|
|
23
|
+
if (this.closed) return;
|
|
24
|
+
for (const listener of this.listeners) listener(data);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// src/transport/memory-hub.ts
|
|
29
|
+
var MemoryHub = class {
|
|
30
|
+
constructor() {
|
|
31
|
+
this.transports = /* @__PURE__ */ new Set();
|
|
32
|
+
}
|
|
33
|
+
connect() {
|
|
34
|
+
const transport = new MemoryTransport(this);
|
|
35
|
+
this.transports.add(transport);
|
|
36
|
+
return transport;
|
|
37
|
+
}
|
|
38
|
+
/** @internal */
|
|
39
|
+
broadcast(from, data) {
|
|
40
|
+
structuredClone(data);
|
|
41
|
+
for (const transport of this.transports) {
|
|
42
|
+
if (transport !== from) {
|
|
43
|
+
const copy = structuredClone(data);
|
|
44
|
+
queueMicrotask(() => transport.deliver(copy));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** @internal */
|
|
49
|
+
disconnect(transport) {
|
|
50
|
+
this.transports.delete(transport);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
export {
|
|
54
|
+
MemoryHub,
|
|
55
|
+
MemoryTransport
|
|
56
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal message bus. Implementations: BroadcastChannelTransport (same-origin),
|
|
3
|
+
* NoopTransport (SSR / local-only), MemoryTransport (tests). A transport never
|
|
4
|
+
* echoes a client's own posts back to it.
|
|
5
|
+
*/
|
|
6
|
+
interface Transport {
|
|
7
|
+
post(data: unknown): void;
|
|
8
|
+
subscribe(listener: (data: unknown) => void): () => void;
|
|
9
|
+
close(): void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type { Transport as T };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal message bus. Implementations: BroadcastChannelTransport (same-origin),
|
|
3
|
+
* NoopTransport (SSR / local-only), MemoryTransport (tests). A transport never
|
|
4
|
+
* echoes a client's own posts back to it.
|
|
5
|
+
*/
|
|
6
|
+
interface Transport {
|
|
7
|
+
post(data: unknown): void;
|
|
8
|
+
subscribe(listener: (data: unknown) => void): () => void;
|
|
9
|
+
close(): void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type { Transport as T };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@use-everywhere/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Cross-tab shared state, events, presence, and cross-origin window channels",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Jonatan Kruszewski <jonakrusze@gmail.com>",
|
|
@@ -38,6 +38,16 @@
|
|
|
38
38
|
"types": "./dist/index.d.cts",
|
|
39
39
|
"default": "./dist/index.cjs"
|
|
40
40
|
}
|
|
41
|
+
},
|
|
42
|
+
"./testing": {
|
|
43
|
+
"import": {
|
|
44
|
+
"types": "./dist/testing.d.ts",
|
|
45
|
+
"default": "./dist/testing.js"
|
|
46
|
+
},
|
|
47
|
+
"require": {
|
|
48
|
+
"types": "./dist/testing.d.cts",
|
|
49
|
+
"default": "./dist/testing.cjs"
|
|
50
|
+
}
|
|
41
51
|
}
|
|
42
52
|
},
|
|
43
53
|
"files": [
|
|
@@ -86,12 +96,6 @@
|
|
|
86
96
|
"import": "{ connectToOpener }",
|
|
87
97
|
"limit": "1.15 kB"
|
|
88
98
|
},
|
|
89
|
-
{
|
|
90
|
-
"name": "MemoryHub (test transport)",
|
|
91
|
-
"path": "dist/index.js",
|
|
92
|
-
"import": "{ MemoryHub }",
|
|
93
|
-
"limit": "300 B"
|
|
94
|
-
},
|
|
95
99
|
{
|
|
96
100
|
"name": "observeBus + enableDebug",
|
|
97
101
|
"path": "dist/index.js",
|
|
@@ -103,6 +107,12 @@
|
|
|
103
107
|
"path": "dist/index.js",
|
|
104
108
|
"import": "{ localStorageAdapter }",
|
|
105
109
|
"limit": "500 B"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"name": "MemoryHub (testing subpath)",
|
|
113
|
+
"path": "dist/testing.js",
|
|
114
|
+
"import": "{ MemoryHub }",
|
|
115
|
+
"limit": "350 B"
|
|
106
116
|
}
|
|
107
117
|
],
|
|
108
118
|
"devDependencies": {
|
|
@@ -116,6 +126,13 @@
|
|
|
116
126
|
"typescript": "^6.0.3",
|
|
117
127
|
"vitest": "^4.1.10"
|
|
118
128
|
},
|
|
129
|
+
"typesVersions": {
|
|
130
|
+
"*": {
|
|
131
|
+
"testing": [
|
|
132
|
+
"./dist/testing.d.ts"
|
|
133
|
+
]
|
|
134
|
+
}
|
|
135
|
+
},
|
|
119
136
|
"scripts": {
|
|
120
137
|
"build": "tsup",
|
|
121
138
|
"test": "vitest run --coverage",
|