@braidlabs/data 0.4.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/package.json +2 -2
- package/src/index.d.ts +2 -2
- package/src/index.js +1 -1
- package/src/index.js.map +1 -1
- package/src/lib/events.d.ts +34 -2
- package/src/lib/events.js +437 -13
- package/src/lib/events.js.map +1 -1
- package/src/lib/intents.d.ts +27 -0
- package/src/lib/intents.js +31 -4
- package/src/lib/intents.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@braidlabs/data",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Local-first client data layer: persistence-first, skew-tolerant across independently deployed readers.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"local-first",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"./package.json": "./package.json"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
|
-
"@braidlabs/skew": "^0.
|
|
26
|
+
"@braidlabs/skew": "^0.6.0"
|
|
27
27
|
},
|
|
28
28
|
"publishConfig": {
|
|
29
29
|
"access": "public"
|
package/src/index.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export { copyPartition } from './lib/partitions.js';
|
|
|
32
32
|
export type { CopyPartitionOptions, CopyPartitionResult, PartitionConflictPolicy, } from './lib/partitions.js';
|
|
33
33
|
export { fromPull } from './lib/adapters.js';
|
|
34
34
|
export type { PullAdapter, PushAdapter, PushConnection, PushRecord, PushSink, CommandAdapter, } from './lib/adapters.js';
|
|
35
|
-
export { createEventBus } from './lib/events.js';
|
|
35
|
+
export { createEventBus, EVENT_BUS_COLLECTIONS } from './lib/events.js';
|
|
36
36
|
export type { EventBus, EventBusOptions, Channel, ChannelOptions, SubscribeOptions, BusEvent, Delivery, } from './lib/events.js';
|
|
37
37
|
export { createIntentRegistry, NoIntentHandlerError } from './lib/intents.js';
|
|
38
|
-
export type { IntentRegistry, IntentRegistryOptions, IntentHandlerOptions, IntentCandidate, IntentResult, ResolvePolicy, RaiseOptions, } from './lib/intents.js';
|
|
38
|
+
export type { IntentRegistry, IntentRegistryOptions, IntentHandlerOptions, IntentCandidate, RemoteIntentHandler, LocalIntentHandler, IntentResult, ResolvePolicy, RaiseOptions, } from './lib/intents.js';
|
package/src/index.js
CHANGED
|
@@ -20,6 +20,6 @@ export { createOutbox, OutboxEntrySchema } from './lib/outbox.js';
|
|
|
20
20
|
export { createTenancy, partitionKey, TenancyRecordSchema } from './lib/tenancy.js';
|
|
21
21
|
export { copyPartition } from './lib/partitions.js';
|
|
22
22
|
export { fromPull } from './lib/adapters.js';
|
|
23
|
-
export { createEventBus } from './lib/events.js';
|
|
23
|
+
export { createEventBus, EVENT_BUS_COLLECTIONS } from './lib/events.js';
|
|
24
24
|
export { createIntentRegistry, NoIntentHandlerError } from './lib/intents.js';
|
|
25
25
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/data/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAS1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAG7E,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAmBlD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGtG,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGlE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGpF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOpD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAU7C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/data/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAS1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAG7E,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAmBlD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGtG,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGlE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGpF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOpD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAU7C,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAWxE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/src/lib/events.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { VersionedSchema } from '@braidlabs/skew';
|
|
2
2
|
import { type FlushResult } from './flush.js';
|
|
3
3
|
import { type BroadcastChannelLike, type Invalidator } from './invalidation.js';
|
|
4
|
-
import type
|
|
4
|
+
import { type RecordDriver } from './record-store.js';
|
|
5
5
|
import type { Conflict, ConflictPolicy } from './query.js';
|
|
6
6
|
import { type IntentHandlerOptions, type IntentRegistry, type IntentResult, type RaiseOptions } from './intents.js';
|
|
7
7
|
/**
|
|
@@ -61,8 +61,24 @@ export interface EventBusOptions {
|
|
|
61
61
|
consumers?: readonly string[];
|
|
62
62
|
/** Cross-context wake-up and page-scoped fan-out. Defaults to the shared one for the partition. */
|
|
63
63
|
invalidator?: Invalidator;
|
|
64
|
-
/**
|
|
64
|
+
/** The transport between contexts. Injectable for tests; defaults to a `BroadcastChannel`. */
|
|
65
65
|
broadcastChannel?: (name: string) => BroadcastChannelLike | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Which page this bus is on, for `scope: 'page'` channels: buses that name the same page share
|
|
68
|
+
* them, and a bus on another page — another tab — does not.
|
|
69
|
+
*
|
|
70
|
+
* In a browser it defaults to the top-level document, which every Braid realm on the page shares
|
|
71
|
+
* and no other tab does: each fragment's realm is its own JavaScript context, as isolated from
|
|
72
|
+
* the others in memory as a tab is, so without a transport a page-scoped channel would reach no
|
|
73
|
+
* further than the bus that wrote to it. Outside a browser there is no page, and a page-scoped
|
|
74
|
+
* channel stays within this bus unless one is named here.
|
|
75
|
+
*/
|
|
76
|
+
page?: string;
|
|
77
|
+
/**
|
|
78
|
+
* How long a raised intent waits for a handler in another context to answer before it fails.
|
|
79
|
+
* Defaults to 30 seconds. A context that closes answers its pending calls at once.
|
|
80
|
+
*/
|
|
81
|
+
intentTimeoutMs?: number;
|
|
66
82
|
/** Attempts before a queued event is abandoned. */
|
|
67
83
|
maxAttempts?: number;
|
|
68
84
|
/** Never silent: retention drops and abandoned handlers are reported here. */
|
|
@@ -99,6 +115,17 @@ export interface ChannelOptions {
|
|
|
99
115
|
* different partition, and then none of this applies because the storage differs too.
|
|
100
116
|
*/
|
|
101
117
|
entity?: string;
|
|
118
|
+
/**
|
|
119
|
+
* Keep this channel's state across reloads, in the bus's `driver`: the last value this context
|
|
120
|
+
* broadcast is stored, and a bus that opens the channel later — after a reload, with no other
|
|
121
|
+
* context alive to ask — starts from it. Stored per partition, as a versioned envelope when a
|
|
122
|
+
* contract is registered for the channel, so a newer or older build reads it at its own version.
|
|
123
|
+
*
|
|
124
|
+
* A stored value is a fallback, not the truth: a value broadcast since, or a fresher one another
|
|
125
|
+
* context holds, wins over it. Needs a `driver`, and is refused without one rather than quietly
|
|
126
|
+
* not persisting.
|
|
127
|
+
*/
|
|
128
|
+
persist?: boolean;
|
|
102
129
|
}
|
|
103
130
|
export interface SubscribeOptions {
|
|
104
131
|
/** The contract version this subscriber speaks. Projected per subscriber, as the context bus does. */
|
|
@@ -138,4 +165,9 @@ export interface EventBus extends Pick<IntentRegistry, 'candidates'> {
|
|
|
138
165
|
flush(): Promise<FlushResult>;
|
|
139
166
|
close(): void;
|
|
140
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* The collections an event bus writes to its `driver`: durable event queues and persisted channel
|
|
170
|
+
* state. A driver that must declare its collections up front — IndexedDB — needs these among them.
|
|
171
|
+
*/
|
|
172
|
+
export declare const EVENT_BUS_COLLECTIONS: readonly ["skew-events", "skew-channel-state"];
|
|
141
173
|
export declare function createEventBus(options: EventBusOptions): EventBus;
|
package/src/lib/events.js
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import { drainOutbox } from './flush.js';
|
|
2
2
|
import { sharedInvalidator } from './invalidation.js';
|
|
3
3
|
import { createOutbox } from './outbox.js';
|
|
4
|
-
import {
|
|
4
|
+
import { storageKey } from './record-store.js';
|
|
5
|
+
import { createIntentRegistry, NoIntentHandlerError, } from './intents.js';
|
|
5
6
|
const EVENT_COLLECTION = 'skew-events';
|
|
7
|
+
/** Where `persist` channels keep their state between reloads: one record per channel per partition. */
|
|
8
|
+
const STATE_COLLECTION = 'skew-channel-state';
|
|
9
|
+
/**
|
|
10
|
+
* The collections an event bus writes to its `driver`: durable event queues and persisted channel
|
|
11
|
+
* state. A driver that must declare its collections up front — IndexedDB — needs these among them.
|
|
12
|
+
*/
|
|
13
|
+
export const EVENT_BUS_COLLECTIONS = [EVENT_COLLECTION, STATE_COLLECTION];
|
|
6
14
|
const DEFAULT_TTL_MS = 60 * 60 * 1000;
|
|
7
15
|
const DEFAULT_MAX_DEPTH = 500;
|
|
8
16
|
/** The queue owner for a consumer's events, kept clear of its mutation outbox's lock and records. */
|
|
@@ -11,8 +19,49 @@ const queueOwner = (consumer) => `events:${consumer}`;
|
|
|
11
19
|
const wakeTag = (consumer) => `skew:events#${consumer}`;
|
|
12
20
|
/** One mutation id per channel+type, so `drainOutbox` can find the handler by name after a reload. */
|
|
13
21
|
const runnerId = (channel, type) => `event:${channel}:${type}`;
|
|
22
|
+
/** How long a new bus's directory of other realms' intent handlers may take to fill. */
|
|
23
|
+
const INTENT_DISCOVERY_MS = 100;
|
|
24
|
+
/**
|
|
25
|
+
* How long a context that holds state it did not publish waits before answering a state request,
|
|
26
|
+
* at most — in case the publisher is gone. The publisher answers at once, and any answer cancels
|
|
27
|
+
* the rest, so a page of many realms sends one reply, not one per realm.
|
|
28
|
+
*/
|
|
29
|
+
const FALLBACK_REPLY_MS = 60;
|
|
30
|
+
/**
|
|
31
|
+
* The page this context is on, named by when its document started: the highest ancestor document
|
|
32
|
+
* this context can read, which every same-origin realm composed onto the page reaches and no
|
|
33
|
+
* other tab does. Read, never written: nothing is installed on the host. A cross-origin ancestor
|
|
34
|
+
* (the whole app embedded in another site) stops the walk at the last same-origin one, which is
|
|
35
|
+
* still the composed page. Undefined outside a browser.
|
|
36
|
+
*/
|
|
37
|
+
function currentPage() {
|
|
38
|
+
if (typeof window === 'undefined')
|
|
39
|
+
return undefined;
|
|
40
|
+
let page = window;
|
|
41
|
+
for (let depth = 0; depth < 32; depth += 1) {
|
|
42
|
+
let parent;
|
|
43
|
+
try {
|
|
44
|
+
parent = page.parent;
|
|
45
|
+
if (!parent || parent === page)
|
|
46
|
+
break;
|
|
47
|
+
// throws for a cross-origin parent
|
|
48
|
+
void parent.performance.timeOrigin;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
page = parent;
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
return String(page.performance.timeOrigin);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
14
62
|
export function createEventBus(options) {
|
|
15
63
|
const partition = options.partition ?? (() => 'default');
|
|
64
|
+
const page = options.page ?? currentPage();
|
|
16
65
|
const invalidator = options.invalidator ?? sharedInvalidator({ partition: partition() });
|
|
17
66
|
const schemas = new Map();
|
|
18
67
|
const channels = new Map();
|
|
@@ -39,24 +88,76 @@ export function createEventBus(options) {
|
|
|
39
88
|
const wireName = `skew:events:${partition()}:${name}`;
|
|
40
89
|
if (options.broadcastChannel)
|
|
41
90
|
return options.broadcastChannel(wireName);
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
91
|
+
if (typeof BroadcastChannel === 'undefined')
|
|
92
|
+
return undefined;
|
|
93
|
+
const channel = new BroadcastChannel(wireName);
|
|
94
|
+
// Node — a test environment with a `window` — would otherwise stay alive for an open channel
|
|
95
|
+
channel.unref?.();
|
|
96
|
+
return channel;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Sends to other contexts. A value that cannot be cloned has already reached this context's
|
|
100
|
+
* subscribers and handlers, so the failure is reported rather than thrown after the fact.
|
|
101
|
+
*/
|
|
102
|
+
function post(channel, message) {
|
|
103
|
+
try {
|
|
104
|
+
channel.wire?.postMessage(message);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
options.onEventError?.(`[skew/data] "${channel.name}" could not be sent to other contexts`, error);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Asks other contexts for the channel's state, once, the first time this context reads it. A
|
|
112
|
+
* channel used only for events never asks.
|
|
113
|
+
*/
|
|
114
|
+
function askForState(channel) {
|
|
115
|
+
if (!channel.wire || channel.live || channel.asked !== undefined)
|
|
116
|
+
return;
|
|
117
|
+
channel.asked = crypto.randomUUID();
|
|
118
|
+
post(channel, { kind: 'state-request', request: channel.asked });
|
|
119
|
+
}
|
|
120
|
+
function answer(channel, request) {
|
|
121
|
+
if (!channel.heard || channel.state === undefined || channel.replying.has(request) || channel.answered.has(request))
|
|
122
|
+
return;
|
|
123
|
+
const reply = () => {
|
|
124
|
+
channel.replying.delete(request);
|
|
125
|
+
post(channel, { kind: 'state-reply', request, value: channel.state, at: channel.at ?? 0 });
|
|
126
|
+
};
|
|
127
|
+
if (channel.authored)
|
|
128
|
+
return reply();
|
|
129
|
+
const timer = setTimeout(reply, Math.random() * FALLBACK_REPLY_MS);
|
|
130
|
+
timer.unref?.();
|
|
131
|
+
channel.replying.set(request, timer);
|
|
45
132
|
}
|
|
46
133
|
function channelState(name, channelOptions) {
|
|
47
134
|
// One entity's channel is not another's, so the identity carries it — while the contract stays
|
|
48
135
|
// registered under the logical name, because every fund's selection has the same shape.
|
|
49
136
|
const key = channelOptions.entity ? `${name}@${channelOptions.entity}` : name;
|
|
50
137
|
const existing = channels.get(key);
|
|
51
|
-
if (existing)
|
|
138
|
+
if (existing) {
|
|
139
|
+
// the first call decides a channel's reach and storage; a later one asking for different
|
|
140
|
+
// ones would otherwise get them silently ignored
|
|
141
|
+
if ((existing.options.scope ?? 'page') !== (channelOptions.scope ?? 'page') || Boolean(existing.options.persist) !== Boolean(channelOptions.persist)) {
|
|
142
|
+
throw new TypeError(`[skew/data] channel "${key}" is already open with scope "${existing.options.scope ?? 'page'}"` +
|
|
143
|
+
`${existing.options.persist ? ' and persist' : ''}; open it with the same options everywhere in this context`);
|
|
144
|
+
}
|
|
52
145
|
return existing;
|
|
146
|
+
}
|
|
53
147
|
const scope = channelOptions.scope ?? 'page';
|
|
54
|
-
const wire = scope === 'origin' ? openWire(key) : undefined;
|
|
148
|
+
const wire = scope === 'origin' ? openWire(key) : page === undefined ? undefined : openWire(`page:${page}:${key}`);
|
|
55
149
|
const created = {
|
|
56
150
|
name,
|
|
57
151
|
key,
|
|
58
152
|
options: channelOptions,
|
|
59
153
|
state: undefined,
|
|
154
|
+
published: undefined,
|
|
155
|
+
heard: false,
|
|
156
|
+
live: false,
|
|
157
|
+
at: undefined,
|
|
158
|
+
authored: false,
|
|
159
|
+
replying: new Map(),
|
|
160
|
+
answered: new Set(),
|
|
60
161
|
conflict: null,
|
|
61
162
|
stateListeners: new Set(),
|
|
62
163
|
wire,
|
|
@@ -66,11 +167,29 @@ export function createEventBus(options) {
|
|
|
66
167
|
wire?.addEventListener('message', (event) => {
|
|
67
168
|
const message = event.data;
|
|
68
169
|
if (message?.kind === 'state')
|
|
69
|
-
applyState(created, message.value, { local: false });
|
|
170
|
+
applyState(created, message.value, { local: false, at: message.at });
|
|
70
171
|
if (message?.kind === 'event' && message.event)
|
|
71
172
|
deliverLive(message.event);
|
|
173
|
+
// A context that reads the channel after its state was set asks for it once (askForState).
|
|
174
|
+
if (message?.kind === 'state-request')
|
|
175
|
+
answer(created, message.request);
|
|
176
|
+
if (message?.kind === 'state-reply') {
|
|
177
|
+
// someone answered: nobody else needs to
|
|
178
|
+
clearTimeout(created.replying.get(message.request));
|
|
179
|
+
created.replying.delete(message.request);
|
|
180
|
+
created.answered.add(message.request);
|
|
181
|
+
// a few recent ones are enough: a request is answered within FALLBACK_REPLY_MS
|
|
182
|
+
if (created.answered.size > 64)
|
|
183
|
+
created.answered.delete(created.answered.values().next().value);
|
|
184
|
+
// Only the asker takes it, and only as a catch-up: a reply that arrives after a newer
|
|
185
|
+
// broadcast, or after state was cleared, must not set it back.
|
|
186
|
+
if (message.request === created.asked)
|
|
187
|
+
catchUp(created, message.value, message.at);
|
|
188
|
+
}
|
|
72
189
|
});
|
|
73
190
|
channels.set(key, created);
|
|
191
|
+
if (channelOptions.persist)
|
|
192
|
+
restore(created);
|
|
74
193
|
return created;
|
|
75
194
|
}
|
|
76
195
|
/**
|
|
@@ -80,8 +199,8 @@ export function createEventBus(options) {
|
|
|
80
199
|
* news, not a disagreement. Two publishers racing end in last-write-wins, and the policy decides
|
|
81
200
|
* whether anyone is told — the same contract, and the same words, as a mutation's confirmation.
|
|
82
201
|
*/
|
|
83
|
-
function applyState(channel, value, { local }) {
|
|
84
|
-
const previous = channel.
|
|
202
|
+
function applyState(channel, value, { local, at = Date.now(), live = true }) {
|
|
203
|
+
const previous = channel.published;
|
|
85
204
|
let stored = value;
|
|
86
205
|
if (local && previous !== undefined && !same(previous, value)) {
|
|
87
206
|
const policy = channel.options.onConflict ?? 'raise';
|
|
@@ -96,6 +215,14 @@ export function createEventBus(options) {
|
|
|
96
215
|
channel.conflict = conflict;
|
|
97
216
|
}
|
|
98
217
|
channel.state = stored;
|
|
218
|
+
channel.heard = true;
|
|
219
|
+
channel.live = channel.live || live;
|
|
220
|
+
channel.at = at;
|
|
221
|
+
channel.authored = local;
|
|
222
|
+
if (live)
|
|
223
|
+
channel.asked = undefined;
|
|
224
|
+
if (local)
|
|
225
|
+
channel.published = stored;
|
|
99
226
|
for (const subscription of [...channel.stateListeners]) {
|
|
100
227
|
// Isolated per subscriber: one application's bad deploy must not present as a different
|
|
101
228
|
// application silently failing to update.
|
|
@@ -107,6 +234,85 @@ export function createEventBus(options) {
|
|
|
107
234
|
}
|
|
108
235
|
}
|
|
109
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* A value from somewhere other than a live broadcast — a peer's answer to a state request, or
|
|
239
|
+
* what was stored before a reload. Taken only while nothing live has arrived, and only when it is
|
|
240
|
+
* newer than what this context already caught up to.
|
|
241
|
+
*/
|
|
242
|
+
function catchUp(channel, value, at) {
|
|
243
|
+
if (channel.live || (channel.at !== undefined && at <= channel.at))
|
|
244
|
+
return;
|
|
245
|
+
applyState(channel, value, { local: false, at, live: false });
|
|
246
|
+
}
|
|
247
|
+
function storedId(channel) {
|
|
248
|
+
return storageKey(partition(), channel.key);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Writes the channel's state to the driver. Runs after the value has reached this context's
|
|
252
|
+
* subscribers, and never throws: a value that cannot be stored — not cloneable, no active
|
|
253
|
+
* partition, a failing driver — is reported, not allowed to undo a broadcast that already happened.
|
|
254
|
+
*/
|
|
255
|
+
function store(channel) {
|
|
256
|
+
const report = (error) => options.onEventError?.(`[skew/data] "${channel.name}" state could not be stored`, error);
|
|
257
|
+
try {
|
|
258
|
+
const driver = options.driver;
|
|
259
|
+
const id = storedId(channel);
|
|
260
|
+
const write = channel.state === undefined
|
|
261
|
+
? driver.delete(STATE_COLLECTION, id)
|
|
262
|
+
: driver.put(STATE_COLLECTION, {
|
|
263
|
+
id,
|
|
264
|
+
key: channel.key,
|
|
265
|
+
partition: partition(),
|
|
266
|
+
seq: channel.at ?? Date.now(),
|
|
267
|
+
envelope: envelopeOf(channel.name, channel.state),
|
|
268
|
+
owner: options.consumer,
|
|
269
|
+
});
|
|
270
|
+
write.catch(report);
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
report(error);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
function restore(channel) {
|
|
277
|
+
let id;
|
|
278
|
+
try {
|
|
279
|
+
id = storedId(channel);
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
options.onEventError?.(`[skew/data] stored "${channel.name}" state could not be read`, error);
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
options
|
|
286
|
+
.driver.get(STATE_COLLECTION, id)
|
|
287
|
+
.then((record) => {
|
|
288
|
+
if (!record)
|
|
289
|
+
return;
|
|
290
|
+
const value = valueOf(channel.name, record.envelope);
|
|
291
|
+
if (value.ok)
|
|
292
|
+
catchUp(channel, value.value, record.seq);
|
|
293
|
+
else
|
|
294
|
+
options.onEventError?.(`[skew/data] stored "${channel.name}" state could not be read`, value.error);
|
|
295
|
+
})
|
|
296
|
+
.catch((error) => options.onEventError?.(`[skew/data] stored "${channel.name}" state could not be read`, error));
|
|
297
|
+
}
|
|
298
|
+
/** The stored form: a versioned envelope under the channel's contract, when it has one. */
|
|
299
|
+
function envelopeOf(type, value) {
|
|
300
|
+
const schema = schemas.get(type);
|
|
301
|
+
// without a contract, written as v1 — what a contract registered later reads it as
|
|
302
|
+
return schema ? schema.write(value) : { v: 1, payload: structuredClone(value) };
|
|
303
|
+
}
|
|
304
|
+
function valueOf(type, envelope) {
|
|
305
|
+
const schema = schemas.get(type);
|
|
306
|
+
if (!schema && envelope.n !== undefined) {
|
|
307
|
+
// written under a contract this build has not registered (yet): handing over the raw payload
|
|
308
|
+
// could give it a shape from another version
|
|
309
|
+
return { ok: false, error: new Error(`stored under the "${envelope.n}" contract; register it before opening the channel`) };
|
|
310
|
+
}
|
|
311
|
+
if (!schema)
|
|
312
|
+
return { ok: true, value: envelope.payload };
|
|
313
|
+
const result = schema.read(envelope);
|
|
314
|
+
return result.ok ? { ok: true, value: result.value } : { ok: false, error: result };
|
|
315
|
+
}
|
|
110
316
|
/** Fan-out to handlers in this context. Used by at-most-once, and by the queue drain. */
|
|
111
317
|
function deliverLive(event) {
|
|
112
318
|
for (const handler of [...(handlers.get(runnerId(event.channel, event.type)) ?? [])]) {
|
|
@@ -226,28 +432,233 @@ export function createEventBus(options) {
|
|
|
226
432
|
...(options.onEventError === undefined ? {} : { onError: options.onEventError }),
|
|
227
433
|
});
|
|
228
434
|
}
|
|
435
|
+
/**
|
|
436
|
+
* Intents across this page's realms. Each bus announces its own handlers and keeps a directory of
|
|
437
|
+
* everyone else's, so `candidates()` stays synchronous; a raise that picks a handler in another
|
|
438
|
+
* realm calls it over the wire. Page scope only: an intent is "somebody on this page handle
|
|
439
|
+
* this", and a handler in another tab is not on the page.
|
|
440
|
+
*/
|
|
441
|
+
const busId = crypto.randomUUID();
|
|
442
|
+
// `#` keeps it apart from a page-scoped channel that happens to be named "intents"
|
|
443
|
+
const intentWire = page === undefined ? undefined : openWire(`page:${page}:#intents`);
|
|
444
|
+
const directory = new Map();
|
|
445
|
+
const calls = new Map();
|
|
446
|
+
const intentTimeoutMs = options.intentTimeoutMs ?? 30_000;
|
|
447
|
+
let intentsClosed = false;
|
|
448
|
+
function sendIntents(message) {
|
|
449
|
+
if (intentsClosed && message.kind !== 'intents-bye')
|
|
450
|
+
return;
|
|
451
|
+
try {
|
|
452
|
+
intentWire?.postMessage(message);
|
|
453
|
+
}
|
|
454
|
+
catch (error) {
|
|
455
|
+
options.onEventError?.('[skew/data] an intent message could not be sent to other contexts', error);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
/** Several registrations in one task — a fragment mounting — are announced once. */
|
|
459
|
+
let announcing = false;
|
|
460
|
+
function announce() {
|
|
461
|
+
if (announcing)
|
|
462
|
+
return;
|
|
463
|
+
announcing = true;
|
|
464
|
+
queueMicrotask(() => {
|
|
465
|
+
announcing = false;
|
|
466
|
+
sendIntents({ kind: 'intents-list', from: busId, handlers: intents.local() });
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Another realm's handlers, as far as they can be read. Any same-origin script on the page can
|
|
471
|
+
* write to the wire, so an entry of the wrong shape is dropped rather than allowed to break every
|
|
472
|
+
* raise on the page.
|
|
473
|
+
*/
|
|
474
|
+
function readHandlers(handlers) {
|
|
475
|
+
if (!Array.isArray(handlers))
|
|
476
|
+
return [];
|
|
477
|
+
return handlers.filter((handler) => typeof handler === 'object' &&
|
|
478
|
+
handler !== null &&
|
|
479
|
+
typeof handler.id === 'string' &&
|
|
480
|
+
typeof handler.intent === 'string' &&
|
|
481
|
+
typeof handler.consumer === 'string' &&
|
|
482
|
+
typeof handler.label === 'string' &&
|
|
483
|
+
Number.isFinite(handler.priority) &&
|
|
484
|
+
(handler.as === undefined || Number.isInteger(handler.as)));
|
|
485
|
+
}
|
|
486
|
+
function remoteHandlers(intent) {
|
|
487
|
+
return [...directory].flatMap(([source, handlers]) => handlers
|
|
488
|
+
.filter((handler) => handler.intent === intent)
|
|
489
|
+
.map(({ id, ...candidate }) => ({ ...candidate, source, run: (payload) => callRemote(source, id, payload, candidate) })));
|
|
490
|
+
}
|
|
491
|
+
/** A realm that no longer answers — crashed, frozen, gone without a word — is dropped, and its calls fail now. */
|
|
492
|
+
function forget(source, reason) {
|
|
493
|
+
directory.delete(source);
|
|
494
|
+
for (const [call, pending] of calls) {
|
|
495
|
+
if (pending.to === source)
|
|
496
|
+
settle(call, { ok: false, error: new Error(`[skew/data] ${reason}`) });
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
function callRemote(to, handler, payload, candidate) {
|
|
500
|
+
return new Promise((resolve, reject) => {
|
|
501
|
+
const call = crypto.randomUUID();
|
|
502
|
+
const timer = setTimeout(() => {
|
|
503
|
+
calls.delete(call);
|
|
504
|
+
reject(new Error(`[skew/data] the "${candidate.intent}" handler in ${candidate.consumer} did not answer within ${intentTimeoutMs}ms`));
|
|
505
|
+
// a realm that cannot answer one call will not answer the next: stop offering its handlers
|
|
506
|
+
forget(to, `the context handling "${candidate.intent}" stopped answering`);
|
|
507
|
+
}, intentTimeoutMs);
|
|
508
|
+
timer.unref?.();
|
|
509
|
+
calls.set(call, { to, resolve, reject, timer });
|
|
510
|
+
try {
|
|
511
|
+
intentWire.postMessage({ kind: 'intent-call', call, from: busId, to, handler, payload });
|
|
512
|
+
}
|
|
513
|
+
catch (error) {
|
|
514
|
+
clearTimeout(timer);
|
|
515
|
+
calls.delete(call);
|
|
516
|
+
// `cause` set by hand: Angular builds of this package compile against a lib without Error options
|
|
517
|
+
reject(Object.assign(new Error(`[skew/data] the "${candidate.intent}" payload could not be sent to ${candidate.consumer}`), { cause: error }));
|
|
518
|
+
}
|
|
519
|
+
});
|
|
520
|
+
}
|
|
521
|
+
function settle(call, outcome) {
|
|
522
|
+
const pending = calls.get(call);
|
|
523
|
+
if (!pending)
|
|
524
|
+
return;
|
|
525
|
+
calls.delete(call);
|
|
526
|
+
clearTimeout(pending.timer);
|
|
527
|
+
if (outcome.ok)
|
|
528
|
+
pending.resolve(outcome.result);
|
|
529
|
+
else
|
|
530
|
+
pending.reject(outcome.error);
|
|
531
|
+
}
|
|
532
|
+
/** Runs a call from another realm and answers it. Never throws: the answer is the only output. */
|
|
533
|
+
function answerCall(message) {
|
|
534
|
+
const reply = (outcome) => {
|
|
535
|
+
if (intentsClosed)
|
|
536
|
+
return;
|
|
537
|
+
try {
|
|
538
|
+
intentWire?.postMessage({ kind: 'intent-return', call: message.call, from: busId, to: message.from, ...outcome });
|
|
539
|
+
}
|
|
540
|
+
catch (error) {
|
|
541
|
+
sendIntents({
|
|
542
|
+
kind: 'intent-return',
|
|
543
|
+
call: message.call,
|
|
544
|
+
from: busId,
|
|
545
|
+
to: message.from,
|
|
546
|
+
ok: false,
|
|
547
|
+
error: `the handler's result could not be sent back: ${error instanceof Error ? error.message : String(error)}`,
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
};
|
|
551
|
+
intents
|
|
552
|
+
.runLocal(message.handler, message.payload)
|
|
553
|
+
.then((result) => reply({ ok: true, result }), (error) => reply({ ok: false, error: error instanceof Error ? error.message : String(error), ...(error instanceof Error ? { name: error.name } : {}) }))
|
|
554
|
+
.catch((error) => options.onEventError?.('[skew/data] an intent call could not be answered', error));
|
|
555
|
+
}
|
|
556
|
+
intentWire?.addEventListener('message', (event) => {
|
|
557
|
+
const message = event.data;
|
|
558
|
+
if (intentsClosed || typeof message !== 'object' || message === null || typeof message.from !== 'string')
|
|
559
|
+
return;
|
|
560
|
+
try {
|
|
561
|
+
switch (message.kind) {
|
|
562
|
+
case 'intents-hello':
|
|
563
|
+
// a context that just arrived: tell it what is here
|
|
564
|
+
if (intents.local().length > 0)
|
|
565
|
+
announce();
|
|
566
|
+
return;
|
|
567
|
+
case 'intents-list': {
|
|
568
|
+
const handlers = readHandlers(message.handlers);
|
|
569
|
+
if (handlers.length > 0)
|
|
570
|
+
directory.set(message.from, handlers);
|
|
571
|
+
else
|
|
572
|
+
directory.delete(message.from);
|
|
573
|
+
return;
|
|
574
|
+
}
|
|
575
|
+
case 'intents-bye':
|
|
576
|
+
forget(message.from, 'the context handling this intent closed');
|
|
577
|
+
return;
|
|
578
|
+
case 'intent-call':
|
|
579
|
+
if (message.to === busId && typeof message.call === 'string' && typeof message.handler === 'string')
|
|
580
|
+
answerCall(message);
|
|
581
|
+
return;
|
|
582
|
+
case 'intent-return': {
|
|
583
|
+
// only the realm the call went to can answer it
|
|
584
|
+
if (message.to !== busId || calls.get(message.call)?.to !== message.from)
|
|
585
|
+
return;
|
|
586
|
+
const error = message.ok
|
|
587
|
+
? undefined
|
|
588
|
+
: message.name === 'NoIntentHandlerError'
|
|
589
|
+
? new NoIntentHandlerError(message.error, [])
|
|
590
|
+
: new Error(message.error);
|
|
591
|
+
settle(message.call, error ? { ok: false, error } : { ok: true, result: message.result });
|
|
592
|
+
return;
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
catch (error) {
|
|
597
|
+
options.onEventError?.('[skew/data] an intent message from another context could not be handled', error);
|
|
598
|
+
}
|
|
599
|
+
});
|
|
229
600
|
const intents = createIntentRegistry({
|
|
230
601
|
consumer: options.consumer,
|
|
231
602
|
// Intents project through the same registered contracts state and events do, so an application
|
|
232
603
|
// declares a shape once and every path respects it.
|
|
233
604
|
schemaFor: (intent) => schemas.get(intent),
|
|
234
605
|
...(options.onEventError === undefined ? {} : { onEventError: options.onEventError }),
|
|
606
|
+
...(intentWire ? { remote: remoteHandlers, onChange: announce } : {}),
|
|
235
607
|
});
|
|
608
|
+
sendIntents({ kind: 'intents-hello', from: busId });
|
|
609
|
+
/** Until then, other realms' answers to the hello may still be on their way. */
|
|
610
|
+
const directoryReadyAt = intentWire ? Date.now() + INTENT_DISCOVERY_MS : 0;
|
|
611
|
+
/**
|
|
612
|
+
* A raise in the bus's first moments that finds nobody waits for the directory before choosing,
|
|
613
|
+
* so a fragment that raises as it mounts is not told "nothing can handle this" while the other
|
|
614
|
+
* realms' answers are still in flight. It waits *before* running anything, so no handler runs twice.
|
|
615
|
+
*/
|
|
616
|
+
async function raiseIntent(intent, payload, raiseOptions) {
|
|
617
|
+
const wait = directoryReadyAt - Date.now();
|
|
618
|
+
if (wait > 0 && intents.candidates(intent).eligible.length === 0) {
|
|
619
|
+
await new Promise((resolve) => setTimeout(resolve, wait));
|
|
620
|
+
}
|
|
621
|
+
return intents.raiseIntent(intent, payload, raiseOptions);
|
|
622
|
+
}
|
|
623
|
+
// A realm going away — its iframe removed, the tab closing, or entering the back-forward cache —
|
|
624
|
+
// says so; one coming back from that cache says hello again.
|
|
625
|
+
const sayBye = () => sendIntents({ kind: 'intents-bye', from: busId });
|
|
626
|
+
const sayHelloAgain = (event) => {
|
|
627
|
+
if (!event.persisted)
|
|
628
|
+
return;
|
|
629
|
+
sendIntents({ kind: 'intents-hello', from: busId });
|
|
630
|
+
if (intents.local().length > 0)
|
|
631
|
+
announce();
|
|
632
|
+
};
|
|
633
|
+
const listensToPage = Boolean(intentWire) && typeof window !== 'undefined' && typeof window.addEventListener === 'function';
|
|
634
|
+
if (listensToPage) {
|
|
635
|
+
window.addEventListener('pagehide', sayBye);
|
|
636
|
+
window.addEventListener('pageshow', sayHelloAgain);
|
|
637
|
+
}
|
|
236
638
|
// Woken by any context that queued something for us — including our own emit.
|
|
237
639
|
const stopWaking = invalidator.subscribe(() => [wakeTag(options.consumer)], () => void flush().catch(() => undefined));
|
|
238
640
|
return {
|
|
239
641
|
channel(name, channelOptions = {}) {
|
|
642
|
+
if (channelOptions.persist && !options.driver) {
|
|
643
|
+
throw new TypeError(`[skew/data] channel "${name}" asks to persist its state, which needs a \`driver\` on the bus — ` +
|
|
644
|
+
'without one it would quietly forget on reload');
|
|
645
|
+
}
|
|
240
646
|
const channel = channelState(name, channelOptions);
|
|
241
647
|
return {
|
|
242
648
|
name,
|
|
243
649
|
broadcast(value) {
|
|
244
650
|
applyState(channel, value, { local: true });
|
|
245
|
-
channel
|
|
651
|
+
post(channel, { kind: 'state', value: channel.state, at: channel.at ?? Date.now() });
|
|
652
|
+
if (channel.options.persist)
|
|
653
|
+
store(channel);
|
|
246
654
|
},
|
|
247
655
|
state(readOptions) {
|
|
656
|
+
askForState(channel);
|
|
248
657
|
return channel.state === undefined ? undefined : project(name, channel.state, readOptions?.as);
|
|
249
658
|
},
|
|
250
659
|
subscribe(listener, subscribeOptions) {
|
|
660
|
+
if (subscribeOptions?.signal?.aborted)
|
|
661
|
+
return () => undefined;
|
|
251
662
|
const subscription = {
|
|
252
663
|
listener: listener,
|
|
253
664
|
...(subscribeOptions?.as === undefined ? {} : { as: subscribeOptions.as }),
|
|
@@ -265,6 +676,8 @@ export function createEventBus(options) {
|
|
|
265
676
|
}
|
|
266
677
|
const unsubscribe = () => void channel.stateListeners.delete(subscription);
|
|
267
678
|
subscribeOptions?.signal?.addEventListener('abort', unsubscribe, { once: true });
|
|
679
|
+
// nothing here yet: another context may hold it, and its answer arrives as an update
|
|
680
|
+
askForState(channel);
|
|
268
681
|
return unsubscribe;
|
|
269
682
|
},
|
|
270
683
|
async emit(type, payload, emitOptions) {
|
|
@@ -283,7 +696,7 @@ export function createEventBus(options) {
|
|
|
283
696
|
return;
|
|
284
697
|
}
|
|
285
698
|
deliverLive(event);
|
|
286
|
-
channel
|
|
699
|
+
post(channel, { kind: 'event', event: event });
|
|
287
700
|
},
|
|
288
701
|
addEventListener(type, handler, subscribeOptions) {
|
|
289
702
|
const id = runnerId(channel.key, type);
|
|
@@ -311,13 +724,24 @@ export function createEventBus(options) {
|
|
|
311
724
|
schemas.set(type, schema);
|
|
312
725
|
},
|
|
313
726
|
addIntentListener: intents.addIntentListener,
|
|
314
|
-
raiseIntent
|
|
727
|
+
raiseIntent,
|
|
315
728
|
candidates: intents.candidates,
|
|
316
729
|
flush,
|
|
317
730
|
close() {
|
|
318
731
|
stopWaking();
|
|
319
|
-
|
|
732
|
+
sayBye();
|
|
733
|
+
intentsClosed = true;
|
|
734
|
+
if (listensToPage) {
|
|
735
|
+
window.removeEventListener('pagehide', sayBye);
|
|
736
|
+
window.removeEventListener('pageshow', sayHelloAgain);
|
|
737
|
+
}
|
|
738
|
+
for (const call of [...calls.keys()])
|
|
739
|
+
settle(call, { ok: false, error: new Error('[skew/data] the bus closed before the intent was answered') });
|
|
740
|
+
intentWire?.close();
|
|
741
|
+
for (const channel of channels.values()) {
|
|
742
|
+
channel.replying.forEach((timer) => clearTimeout(timer));
|
|
320
743
|
channel.wire?.close();
|
|
744
|
+
}
|
|
321
745
|
channels.clear();
|
|
322
746
|
handlers.clear();
|
|
323
747
|
invalidator.close();
|
package/src/lib/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../../libs/data/src/lib/events.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../../libs/data/src/lib/events.ts"],"names":[],"mappings":"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"}
|
package/src/lib/intents.d.ts
CHANGED
|
@@ -28,6 +28,22 @@ export interface IntentCandidate {
|
|
|
28
28
|
priority: number;
|
|
29
29
|
/** The contract version it reads the payload at. */
|
|
30
30
|
as?: number;
|
|
31
|
+
/**
|
|
32
|
+
* The bus in another JavaScript context — another fragment's realm on this page — that
|
|
33
|
+
* registered it. Absent for a handler registered here.
|
|
34
|
+
*/
|
|
35
|
+
source?: string;
|
|
36
|
+
}
|
|
37
|
+
/** A handler registered in another context, as the event bus's directory knows it. */
|
|
38
|
+
export interface RemoteIntentHandler extends IntentCandidate {
|
|
39
|
+
source: string;
|
|
40
|
+
/** Hands the payload — already projected to `as` here — to the other context and awaits its result. */
|
|
41
|
+
run: (payload: unknown) => Promise<unknown>;
|
|
42
|
+
}
|
|
43
|
+
/** A handler registered here, as the event bus announces it to other contexts. */
|
|
44
|
+
export interface LocalIntentHandler extends IntentCandidate {
|
|
45
|
+
/** Stable for the registration's lifetime; how another context asks for this one to run. */
|
|
46
|
+
id: string;
|
|
31
47
|
}
|
|
32
48
|
/**
|
|
33
49
|
* How to choose between handlers.
|
|
@@ -73,11 +89,22 @@ export interface IntentRegistry {
|
|
|
73
89
|
eligible: IntentCandidate[];
|
|
74
90
|
ineligible: IntentCandidate[];
|
|
75
91
|
};
|
|
92
|
+
/** The handlers registered here, for announcing to other contexts. */
|
|
93
|
+
local(): LocalIntentHandler[];
|
|
94
|
+
/** Runs a handler registered here, for a call from another context. The payload is already projected. */
|
|
95
|
+
runLocal(id: string, payload: unknown): Promise<unknown>;
|
|
76
96
|
}
|
|
77
97
|
export interface IntentRegistryOptions {
|
|
78
98
|
consumer: string;
|
|
79
99
|
/** Resolves the contract for an intent's payload, so eligibility can be decided. */
|
|
80
100
|
schemaFor: (intent: string) => VersionedSchema<unknown> | undefined;
|
|
81
101
|
onEventError?: (message: string, detail?: unknown) => void;
|
|
102
|
+
/**
|
|
103
|
+
* Handlers registered in other contexts, considered with this one's. Eligibility and projection
|
|
104
|
+
* are decided here, by the raiser's contract, exactly as for a local handler.
|
|
105
|
+
*/
|
|
106
|
+
remote?: (intent: string) => readonly RemoteIntentHandler[];
|
|
107
|
+
/** Called when this context's own registrations change. */
|
|
108
|
+
onChange?: () => void;
|
|
82
109
|
}
|
|
83
110
|
export declare function createIntentRegistry(options: IntentRegistryOptions): IntentRegistry;
|
package/src/lib/intents.js
CHANGED
|
@@ -22,6 +22,11 @@ export function createIntentRegistry(options) {
|
|
|
22
22
|
*/
|
|
23
23
|
function eligibility(registration) {
|
|
24
24
|
const schema = options.schemaFor(registration.intent);
|
|
25
|
+
if (!schema && registration.source !== undefined && registration.as !== undefined) {
|
|
26
|
+
// In another realm, a handler that names a version is promised that version — and with no
|
|
27
|
+
// contract here, there is nothing to project the payload with.
|
|
28
|
+
return { ok: false, reason: `reads v${registration.as}, and this context registers no contract for "${registration.intent}" to project with` };
|
|
29
|
+
}
|
|
25
30
|
if (!schema || registration.as === undefined || registration.as === schema.version)
|
|
26
31
|
return { ok: true };
|
|
27
32
|
if (registration.as > schema.version) {
|
|
@@ -34,6 +39,10 @@ export function createIntentRegistry(options) {
|
|
|
34
39
|
? { ok: true }
|
|
35
40
|
: { ok: false, reason: `v${registration.as} is unreachable — ${missing.join(', ')} declare no down migration` };
|
|
36
41
|
}
|
|
42
|
+
/** This context's handlers for an intent, then other contexts'. */
|
|
43
|
+
function everyone(intent) {
|
|
44
|
+
return [...(registrations.get(intent) ?? []), ...(options.remote?.(intent) ?? [])];
|
|
45
|
+
}
|
|
37
46
|
function project(intent, payload, as) {
|
|
38
47
|
const schema = options.schemaFor(intent);
|
|
39
48
|
if (!schema || as === undefined || as === schema.version)
|
|
@@ -53,17 +62,33 @@ export function createIntentRegistry(options) {
|
|
|
53
62
|
label: handlerOptions.label ?? options.consumer,
|
|
54
63
|
priority: handlerOptions.priority ?? 0,
|
|
55
64
|
...(handlerOptions.as === undefined ? {} : { as: handlerOptions.as }),
|
|
65
|
+
id: crypto.randomUUID(),
|
|
56
66
|
run: handlerOptions.handler,
|
|
57
67
|
};
|
|
58
68
|
forIntent.add(registration);
|
|
59
|
-
|
|
69
|
+
options.onChange?.();
|
|
70
|
+
const unsubscribe = () => {
|
|
71
|
+
if (forIntent.delete(registration))
|
|
72
|
+
options.onChange?.();
|
|
73
|
+
};
|
|
60
74
|
handlerOptions.signal?.addEventListener('abort', unsubscribe, { once: true });
|
|
61
75
|
return unsubscribe;
|
|
62
76
|
},
|
|
77
|
+
local() {
|
|
78
|
+
return [...registrations.values()].flatMap((set) => [...set].map((registration) => ({ ...strip(registration), id: registration.id })));
|
|
79
|
+
},
|
|
80
|
+
async runLocal(id, payload) {
|
|
81
|
+
for (const set of registrations.values()) {
|
|
82
|
+
for (const registration of set)
|
|
83
|
+
if (registration.id === id)
|
|
84
|
+
return registration.run(payload);
|
|
85
|
+
}
|
|
86
|
+
throw new NoIntentHandlerError('(removed handler)', []);
|
|
87
|
+
},
|
|
63
88
|
candidates(intent) {
|
|
64
89
|
const eligible = [];
|
|
65
90
|
const ineligible = [];
|
|
66
|
-
for (const registration of
|
|
91
|
+
for (const registration of everyone(intent)) {
|
|
67
92
|
(eligibility(registration).ok ? eligible : ineligible).push(strip(registration));
|
|
68
93
|
}
|
|
69
94
|
// Ranked here so every policy — and every chooser the host renders — sees one order.
|
|
@@ -72,7 +97,7 @@ export function createIntentRegistry(options) {
|
|
|
72
97
|
},
|
|
73
98
|
async raiseIntent(intent, payload, raiseOptions) {
|
|
74
99
|
const policy = raiseOptions?.resolve ?? 'first';
|
|
75
|
-
const all =
|
|
100
|
+
const all = everyone(intent);
|
|
76
101
|
const eligible = [];
|
|
77
102
|
const ineligible = [];
|
|
78
103
|
for (const registration of all) {
|
|
@@ -128,8 +153,10 @@ const strip = (registration) => ({
|
|
|
128
153
|
label: registration.label,
|
|
129
154
|
priority: registration.priority,
|
|
130
155
|
...(registration.as === undefined ? {} : { as: registration.as }),
|
|
156
|
+
...(registration.source === undefined ? {} : { source: registration.source }),
|
|
131
157
|
});
|
|
132
|
-
const matches = (registration, candidate) => registration.
|
|
158
|
+
const matches = (registration, candidate) => registration.source === candidate.source &&
|
|
159
|
+
registration.consumer === candidate.consumer &&
|
|
133
160
|
registration.label === candidate.label &&
|
|
134
161
|
registration.priority === candidate.priority &&
|
|
135
162
|
registration.as === candidate.as;
|
package/src/lib/intents.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intents.js","sourceRoot":"","sources":["../../../../../libs/data/src/lib/intents.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"intents.js","sourceRoot":"","sources":["../../../../../libs/data/src/lib/intents.ts"],"names":[],"mappings":"AA+EA,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAElC;IACA;IAFX,YACW,MAAc,EACd,UAAqE;QAE9E,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM;YAChC,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,8BAA8B,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC5I,CAAC,CAAC,EAAE,CAAC;QACP,KAAK,CAAC,8CAA8C,MAAM,KAAK,QAAQ,EAAE,CAAC,CAAC;QANlE,WAAM,GAAN,MAAM,CAAQ;QACd,eAAU,GAAV,UAAU,CAA2D;QAM9E,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAgCD,MAAM,UAAU,oBAAoB,CAAC,OAA8B;IACjE,MAAM,aAAa,GAAG,IAAI,GAAG,EAA6B,CAAC;IAE3D;;;;;;OAMG;IACH,SAAS,WAAW,CAAC,YAA0B;QAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS,IAAI,YAAY,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAClF,0FAA0F;YAC1F,+DAA+D;YAC/D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,YAAY,CAAC,EAAE,iDAAiD,YAAY,CAAC,MAAM,mBAAmB,EAAE,CAAC;QACjJ,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,EAAE,KAAK,SAAS,IAAI,YAAY,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QAExG,IAAI,YAAY,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACrC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,YAAY,CAAC,EAAE,qBAAqB,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/F,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK;aACzB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,YAAY,CAAC,EAAG,IAAI,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;aACvF,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAEhC,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC;YACzB,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE;YACd,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,YAAY,CAAC,EAAE,qBAAqB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC;IACpH,CAAC;IAED,mEAAmE;IACnE,SAAS,QAAQ,CAAC,MAAc;QAC9B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,SAAS,OAAO,CAAC,MAAc,EAAE,OAAgB,EAAE,EAAsB;QACvE,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,MAAM,CAAC,OAAO;YAAE,OAAO,OAAO,CAAC;QACzE,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,iBAAiB,CAAI,MAAc,EAAE,cAAuC;YAC1E,IAAI,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;gBACtB,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACvC,CAAC;YAED,MAAM,YAAY,GAAiB;gBACjC,MAAM;gBACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,KAAK,EAAE,cAAc,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ;gBAC/C,QAAQ,EAAE,cAAc,CAAC,QAAQ,IAAI,CAAC;gBACtC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC;gBACrE,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;gBACvB,GAAG,EAAE,cAAc,CAAC,OAAwC;aAC7D,CAAC;YACF,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC5B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YAErB,MAAM,WAAW,GAAG,GAAG,EAAE;gBACvB,IAAI,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;oBAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3D,CAAC,CAAC;YACF,cAAc,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,KAAK;YACH,OAAO,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,EAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1I,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,EAAU,EAAE,OAAgB;YACzC,KAAK,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;gBACzC,KAAK,MAAM,YAAY,IAAI,GAAG;oBAAE,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE;wBAAE,OAAO,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC/F,CAAC;YACD,MAAM,IAAI,oBAAoB,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,UAAU,CAAC,MAAc;YACvB,MAAM,QAAQ,GAAsB,EAAE,CAAC;YACvC,MAAM,UAAU,GAAsB,EAAE,CAAC;YAEzC,KAAK,MAAM,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5C,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;YACnF,CAAC;YAED,qFAAqF;YACrF,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;QAClC,CAAC;QAED,KAAK,CAAC,WAAW,CAAI,MAAc,EAAE,OAAgB,EAAE,YAA2B;YAChF,MAAM,MAAM,GAAG,YAAY,EAAE,OAAO,IAAI,OAAO,CAAC;YAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAE7B,MAAM,QAAQ,GAAmB,EAAE,CAAC;YACpC,MAAM,UAAU,GAAqD,EAAE,CAAC;YAExE,KAAK,MAAM,YAAY,IAAI,GAAG,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;gBAC1C,IAAI,OAAO,CAAC,EAAE;oBAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;oBACvC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACnF,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YAEjD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAE9E,MAAM,GAAG,GAAG,KAAK,EAAE,YAA0B,EAAE,EAAE,CAAC,CAAC;gBACjD,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;gBAC9B,MAAM,EAAE,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAM;aACjF,CAAC,CAAC;YAEH,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,0FAA0F;gBAC1F,0CAA0C;gBAC1C,MAAM,OAAO,GAAgD,EAAE,CAAC;gBAChE,KAAK,MAAM,YAAY,IAAI,QAAQ;oBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;gBAC3E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;YACjC,CAAC;YAED,IAAI,MAAgC,CAAC;YAErC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACvB,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC;iBAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC5B,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;oBAC3B,MAAM,IAAI,SAAS,CACjB,0FAA0F;wBACxF,yDAAyD,CAC5D,CAAC;gBACJ,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;gBACxE,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC1D,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,2FAA2F;gBAC3F,uCAAuC;gBACvC,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,6CAA6C,CAAC,CAAC;YACxG,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;QACtD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,YAA0B,EAAmB,EAAE,CAAC,CAAC;IAC9D,MAAM,EAAE,YAAY,CAAC,MAAM;IAC3B,QAAQ,EAAE,YAAY,CAAC,QAAQ;IAC/B,KAAK,EAAE,YAAY,CAAC,KAAK;IACzB,QAAQ,EAAE,YAAY,CAAC,QAAQ;IAC/B,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC;IACjE,GAAG,CAAC,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC;CAC9E,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,CAAC,YAA0B,EAAE,SAA0B,EAAW,EAAE,CAClF,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;IACxC,YAAY,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ;IAC5C,YAAY,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK;IACtC,YAAY,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ;IAC5C,YAAY,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC"}
|