@agentshouse/mdruntime 0.1.0-c2af3ddcc243b → 0.1.0-c2e433921a4d5
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/README.md +14 -13
- package/dist/acceptance.js +1 -1
- package/dist/adapter.d.ts +55 -9
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +0 -1
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +0 -5
- package/dist/authored.d.ts +88 -0
- package/dist/authored.d.ts.map +1 -0
- package/dist/authored.js +345 -0
- package/dist/change.d.ts +4 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +3 -0
- package/dist/chat-types.d.ts +0 -2
- package/dist/chat-types.d.ts.map +1 -1
- package/dist/chat-types.js +0 -2
- package/dist/client.d.ts +5 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +4 -7
- package/dist/collection.d.ts +4 -1
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +7 -0
- package/dist/column.d.ts +5 -0
- package/dist/column.d.ts.map +1 -0
- package/dist/column.js +9 -0
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +2 -3
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +6 -4
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +1 -1
- package/dist/conversation-live.d.ts +16 -6
- package/dist/conversation-live.d.ts.map +1 -1
- package/dist/conversation-live.js +15 -6
- package/dist/conversation-row.d.ts +8 -1
- package/dist/conversation-row.d.ts.map +1 -1
- package/dist/conversation-row.js +20 -7
- package/dist/conversation.d.ts +9 -5
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +155 -123
- package/dist/figures.d.ts.map +1 -1
- package/dist/figures.js +4 -2
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +2 -1
- package/dist/host.d.ts +1 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +14 -8
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/install.d.ts +8 -2
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +40 -33
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +15 -10
- package/dist/listing.d.ts +7 -3
- package/dist/listing.d.ts.map +1 -1
- package/dist/listing.js +26 -13
- package/dist/live.d.ts +5 -3
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +71 -30
- package/dist/loaded.d.ts +5 -0
- package/dist/loaded.d.ts.map +1 -0
- package/dist/loaded.js +40 -0
- package/dist/locks.d.ts.map +1 -1
- package/dist/locks.js +2 -2
- package/dist/lost.js +1 -1
- package/dist/media.d.ts +5 -0
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +65 -14
- package/dist/memory.d.ts +3 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +17 -8
- package/dist/messages.d.ts +3 -1
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +5 -3
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +3 -3
- package/dist/observation.d.ts +27 -12
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +173 -69
- package/dist/outcome.d.ts +4 -0
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +8 -2
- package/dist/overlay.d.ts +1 -1
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +3 -5
- package/dist/preparation.d.ts +27 -6
- package/dist/preparation.d.ts.map +1 -1
- package/dist/preparation.js +131 -44
- package/dist/presence.d.ts +8 -2
- package/dist/presence.d.ts.map +1 -1
- package/dist/presence.js +24 -13
- package/dist/queries.d.ts +1 -1
- package/dist/queries.d.ts.map +1 -1
- package/dist/queries.js +43 -17
- package/dist/questions.d.ts +1 -0
- package/dist/questions.d.ts.map +1 -1
- package/dist/questions.js +1 -0
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +51 -21
- package/dist/reach.d.ts +2 -3
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +20 -7
- package/dist/react.d.ts +3 -1
- package/dist/react.d.ts.map +1 -1
- package/dist/readiness.d.ts +8 -2
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +3 -5
- package/dist/reads.d.ts +1 -1
- package/dist/reads.d.ts.map +1 -1
- package/dist/reads.js +2 -2
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +2 -2
- package/dist/room-draft.d.ts +28 -3
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +230 -12
- package/dist/room-drafts.d.ts.map +1 -1
- package/dist/room-drafts.js +5 -2
- package/dist/room-list.d.ts +10 -0
- package/dist/room-list.d.ts.map +1 -0
- package/dist/room-list.js +45 -0
- package/dist/rows.d.ts +2 -1
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +6 -6
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +17 -86
- package/dist/saves.d.ts.map +1 -1
- package/dist/saves.js +23 -7
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +2 -2
- package/dist/shown.d.ts +1 -1
- package/dist/shown.d.ts.map +1 -1
- package/dist/shown.js +51 -37
- package/dist/source.d.ts +5 -0
- package/dist/source.d.ts.map +1 -1
- package/dist/source.js +13 -2
- package/dist/store/installs.d.ts +2 -2
- package/dist/store/installs.d.ts.map +1 -1
- package/dist/store/installs.js +10 -4
- package/dist/store/readiness.d.ts +5 -4
- package/dist/store/readiness.d.ts.map +1 -1
- package/dist/store/readiness.js +28 -12
- package/dist/store/records.d.ts +10 -1
- package/dist/store/records.d.ts.map +1 -1
- package/dist/store/records.js +46 -19
- package/dist/store/rooms-shown.d.ts +8 -0
- package/dist/store/rooms-shown.d.ts.map +1 -0
- package/dist/store/rooms-shown.js +13 -0
- package/dist/store.d.ts +12 -8
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +8 -4
- package/dist/stored.d.ts +23 -13
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +73 -22
- package/dist/surface.d.ts +4 -2
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +7 -2
- package/dist/sync.d.ts +1 -1
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +8 -7
- package/dist/tables.d.ts +10 -49
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +60 -322
- package/dist/tallies.d.ts.map +1 -1
- package/dist/tallies.js +1 -2
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +3 -9
- package/dist/wire.d.ts +2 -8
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +2 -2
- package/package.json +2 -2
package/dist/preparation.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { changeSet } from './change-set.js';
|
|
2
2
|
import { uncaught } from './failure.js';
|
|
3
|
-
import { installationOf } from './install.js';
|
|
4
|
-
import { listedLocators } from './listing.js';
|
|
3
|
+
import { installationOf, installShare } from './install.js';
|
|
4
|
+
import { listedLocators, listedOrHeld } from './listing.js';
|
|
5
|
+
import { keyedAt, keyedChange, unchanged, } from './observation.js';
|
|
5
6
|
import { planReach } from './reach.js';
|
|
6
|
-
import { readinessOf, } from './readiness.js';
|
|
7
|
-
import {
|
|
7
|
+
import { COMPLETE_ROOMS, readinessOf, } from './readiness.js';
|
|
8
|
+
import { roomsOfReach } from './rows.js';
|
|
8
9
|
import { recoverReads } from './shown.js';
|
|
9
10
|
import { yielded } from './turn.js';
|
|
10
11
|
async function prepareReplica(runtime, locator) {
|
|
@@ -23,8 +24,8 @@ async function prepareReplica(runtime, locator) {
|
|
|
23
24
|
if ((await store.rooms([locator])).get(locator)?.record.key !== key)
|
|
24
25
|
continue;
|
|
25
26
|
store.changed(changeSet(locator, { documents: null }));
|
|
26
|
-
recoverReads(runtime);
|
|
27
|
-
store.readiness.queue();
|
|
27
|
+
recoverReads(runtime, [locator]);
|
|
28
|
+
store.readiness.queue([locator]);
|
|
28
29
|
return;
|
|
29
30
|
}
|
|
30
31
|
}
|
|
@@ -36,7 +37,7 @@ async function unprepared({ store }) {
|
|
|
36
37
|
function unpreparedBy({ store }, locator) {
|
|
37
38
|
const { unpreparable } = store.device.now();
|
|
38
39
|
store.device.set({ unpreparable: new Set([...unpreparable, locator]) });
|
|
39
|
-
store.readiness.queue();
|
|
40
|
+
store.readiness.queue([locator]);
|
|
40
41
|
}
|
|
41
42
|
export function prepare(runtime, locators = []) {
|
|
42
43
|
const { store, socket } = runtime;
|
|
@@ -67,19 +68,16 @@ export function prepare(runtime, locators = []) {
|
|
|
67
68
|
}
|
|
68
69
|
})();
|
|
69
70
|
}
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
function requires(runtime, named, held, room) {
|
|
72
|
+
const listed = listedOrHeld(runtime, held, room);
|
|
73
|
+
if (named === null)
|
|
74
|
+
return listed;
|
|
75
|
+
return named.has(room) && (!runtime.socket.session.now().roomsListed || listed);
|
|
72
76
|
}
|
|
73
|
-
function requiredRooms(runtime,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if (reach === null)
|
|
78
|
-
return { listed: roomsListed, rooms: [...listed].sort() };
|
|
79
|
-
const named = [...roomsOfReach(reach)].sort();
|
|
80
|
-
if (roomsListed)
|
|
81
|
-
return { listed: true, rooms: named.filter((room) => listed.has(room)) };
|
|
82
|
-
return { listed: named.every((room) => held.has(room)), rooms: named };
|
|
77
|
+
function requiredRooms(runtime, named, held) {
|
|
78
|
+
return [...(named ?? listedLocators(runtime, held))]
|
|
79
|
+
.filter((room) => requires(runtime, named, held, room))
|
|
80
|
+
.sort();
|
|
83
81
|
}
|
|
84
82
|
function roomState({ socket, presence }, locator, held) {
|
|
85
83
|
if (socket.session.now().roomsListed &&
|
|
@@ -112,29 +110,89 @@ export async function connectionNow(runtime) {
|
|
|
112
110
|
if (socket.isOpen() || socket.session.now().moving.providerUnreachable || socket.streamed) {
|
|
113
111
|
return connectionOf(runtime, null);
|
|
114
112
|
}
|
|
115
|
-
return connectionOf(runtime, (await (await store.open()).facts()).lastCompleted);
|
|
113
|
+
return connectionOf(runtime, (await (await store.open()).facts(['lastCompleted'])).lastCompleted);
|
|
116
114
|
}
|
|
117
115
|
async function readinessHeld({ store }) {
|
|
118
116
|
const local = await store.open();
|
|
119
|
-
const [held, facts] = await Promise.all([
|
|
117
|
+
const [held, facts] = await Promise.all([
|
|
118
|
+
store.covering(),
|
|
119
|
+
local.facts(['lastCompleted', 'targets']),
|
|
120
|
+
]);
|
|
120
121
|
return { held: held.rooms, facts };
|
|
121
122
|
}
|
|
122
|
-
function
|
|
123
|
-
const {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
123
|
+
function shareOf(runtime, room, held) {
|
|
124
|
+
const coverage = Object.freeze({ room, state: roomState(runtime, room, held) });
|
|
125
|
+
return { ...installShare(runtime.store, coverage, held), coverage };
|
|
126
|
+
}
|
|
127
|
+
function sameState(was, now) {
|
|
128
|
+
return was.coverage.state === now.coverage.state;
|
|
129
|
+
}
|
|
130
|
+
function coverageOf(change) {
|
|
131
|
+
return {
|
|
132
|
+
...change,
|
|
133
|
+
changed: change.changed.map(([room, share]) => [room, share.coverage]),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
function counted(totals, share, sign) {
|
|
137
|
+
const { state } = share.coverage;
|
|
138
|
+
totals.installing += share.installing ? sign : 0;
|
|
139
|
+
totals.downloading += share.downloading ? sign : 0;
|
|
140
|
+
totals.acquiring += state === 'acquiring' ? sign : 0;
|
|
141
|
+
totals.unsettled += COMPLETE_ROOMS.has(state) ? 0 : sign;
|
|
142
|
+
totals.done += sign * share.bytes.done;
|
|
143
|
+
totals.total += sign * share.bytes.total;
|
|
144
|
+
}
|
|
145
|
+
function showingOf(runtime, reach, held) {
|
|
146
|
+
const planned = planReach(reach);
|
|
147
|
+
const named = planned === null ? null : roomsOfReach(planned);
|
|
148
|
+
const totals = { installing: 0, downloading: 0, acquiring: 0, unsettled: 0, done: 0, total: 0 };
|
|
149
|
+
const rooms = new Map();
|
|
150
|
+
for (const room of requiredRooms(runtime, named, held)) {
|
|
151
|
+
const share = shareOf(runtime, room, held);
|
|
152
|
+
rooms.set(room, share);
|
|
153
|
+
counted(totals, share, 1);
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
listing: runtime.presence.listing(),
|
|
157
|
+
roomsListed: runtime.socket.session.now().roomsListed,
|
|
158
|
+
named,
|
|
159
|
+
rooms,
|
|
160
|
+
totals,
|
|
161
|
+
shown: '',
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function moved(runtime, showing, held, touched) {
|
|
165
|
+
const at = new Map();
|
|
166
|
+
for (const room of touched) {
|
|
167
|
+
at.set(room, requires(runtime, showing.named, held, room) ? shareOf(runtime, room, held) : null);
|
|
168
|
+
}
|
|
169
|
+
const change = keyedAt(showing.rooms, at, sameState);
|
|
170
|
+
if (change === null || change.removed.length > 0)
|
|
171
|
+
return null;
|
|
172
|
+
for (const [room, share] of at) {
|
|
173
|
+
if (share === null)
|
|
174
|
+
continue;
|
|
175
|
+
counted(showing.totals, showing.rooms.get(room), -1);
|
|
176
|
+
counted(showing.totals, share, 1);
|
|
177
|
+
showing.rooms.set(room, share);
|
|
178
|
+
}
|
|
179
|
+
return change;
|
|
180
|
+
}
|
|
181
|
+
function preparingIn(runtime, showing, rooms) {
|
|
182
|
+
const { unpreparable } = runtime.store.device.now();
|
|
183
|
+
const preparing = [...rooms].filter((room) => showing.rooms.get(room)?.coverage.state === 'preparing' && !unpreparable.has(room));
|
|
130
184
|
if (preparing.length > 0)
|
|
131
185
|
prepare(runtime, preparing);
|
|
186
|
+
}
|
|
187
|
+
function shownOf(runtime, { port, reach }, { named, totals }, { facts }) {
|
|
188
|
+
const { store, socket, usableWhenHeld } = runtime;
|
|
132
189
|
const { persistence, storageLoss, heldWhenOpened } = store.device.now();
|
|
190
|
+
const { roomsListed } = socket.session.now();
|
|
133
191
|
return readinessOf({
|
|
134
192
|
code: port.code,
|
|
135
193
|
coverage: {
|
|
136
|
-
listed:
|
|
137
|
-
|
|
194
|
+
listed: named === null ? roomsListed : roomsListed || totals.acquiring === 0,
|
|
195
|
+
unsettled: totals.unsettled,
|
|
138
196
|
conversations: conversationCoverage(runtime, reach),
|
|
139
197
|
},
|
|
140
198
|
persistence,
|
|
@@ -145,7 +203,10 @@ function readinessFor(runtime, port, reach, { held, facts }) {
|
|
|
145
203
|
? 'write-halted'
|
|
146
204
|
: 'open',
|
|
147
205
|
space: store.space.full() ? 'full' : null,
|
|
148
|
-
installation: installationOf(
|
|
206
|
+
installation: installationOf(totals.installing, totals.downloading, {
|
|
207
|
+
done: totals.done,
|
|
208
|
+
total: totals.total,
|
|
209
|
+
}),
|
|
149
210
|
lost: storageLoss !== null,
|
|
150
211
|
established: facts.targets[port.target]?.established === true ||
|
|
151
212
|
(heldWhenOpened && usableWhenHeld.includes(port.target)),
|
|
@@ -159,11 +220,11 @@ function establish(runtime, name) {
|
|
|
159
220
|
device.set({ establishing: new Set([...device.now().establishing, name]) });
|
|
160
221
|
void store
|
|
161
222
|
.durably(async (local) => {
|
|
162
|
-
const { targets } = await local.facts();
|
|
223
|
+
const { targets } = await local.facts(['targets']);
|
|
163
224
|
await local.fact('targets', { ...targets, [name]: { established: true } });
|
|
164
225
|
})
|
|
165
226
|
.then(() => {
|
|
166
|
-
store.readiness.queue();
|
|
227
|
+
store.readiness.queue([]);
|
|
167
228
|
void probeEachMinute(runtime);
|
|
168
229
|
}, uncaught)
|
|
169
230
|
.finally(() => {
|
|
@@ -172,23 +233,49 @@ function establish(runtime, name) {
|
|
|
172
233
|
device.set({ establishing });
|
|
173
234
|
});
|
|
174
235
|
}
|
|
175
|
-
function deliverReadiness(runtime, watch, held) {
|
|
176
|
-
|
|
236
|
+
function deliverReadiness(runtime, watch, held, touched) {
|
|
237
|
+
const { readiness } = runtime.store;
|
|
238
|
+
if (!readiness.held(watch))
|
|
177
239
|
return;
|
|
178
|
-
const
|
|
179
|
-
|
|
240
|
+
const kept = readiness.kept(watch);
|
|
241
|
+
const patched = kept === undefined ||
|
|
242
|
+
touched === null ||
|
|
243
|
+
kept.listing !== runtime.presence.listing() ||
|
|
244
|
+
kept.roomsListed !== runtime.socket.session.now().roomsListed
|
|
245
|
+
? null
|
|
246
|
+
: moved(runtime, kept, held.held, touched);
|
|
247
|
+
const showing = patched === null ? showingOf(runtime, watch.reach, held.held) : kept;
|
|
248
|
+
preparingIn(runtime, showing, patched === null ? showing.rooms.keys() : touched);
|
|
249
|
+
const shown = shownOf(runtime, watch, showing, held);
|
|
250
|
+
if (shown.ready && held.facts.targets[watch.port.target]?.established !== true) {
|
|
180
251
|
establish(runtime, watch.port.target);
|
|
181
252
|
}
|
|
182
|
-
|
|
253
|
+
const text = JSON.stringify(shown);
|
|
254
|
+
const before = kept?.shown;
|
|
255
|
+
showing.shown = text;
|
|
256
|
+
readiness.keep(watch, showing);
|
|
257
|
+
if (kept === undefined) {
|
|
258
|
+
watch.deliver({
|
|
259
|
+
...shown,
|
|
260
|
+
coverage: {
|
|
261
|
+
...shown.coverage,
|
|
262
|
+
rooms: [...showing.rooms.values()].map(({ coverage }) => coverage),
|
|
263
|
+
},
|
|
264
|
+
});
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
const rooms = coverageOf(patched ??
|
|
268
|
+
keyedChange(kept.rooms, [...showing.rooms.keys()], [...showing.rooms.values()], sameState));
|
|
269
|
+
if (text === before && unchanged(rooms))
|
|
183
270
|
return;
|
|
184
|
-
watch.deliver(
|
|
271
|
+
watch.deliver({ shown, rooms });
|
|
185
272
|
}
|
|
186
|
-
export async function deliverOwedReadiness(runtime, owed) {
|
|
273
|
+
export async function deliverOwedReadiness(runtime, owed, touched) {
|
|
187
274
|
const held = await readinessHeld(runtime);
|
|
188
275
|
if (runtime.socket.closed())
|
|
189
276
|
return;
|
|
190
277
|
for (const watch of owed)
|
|
191
|
-
deliverReadiness(runtime, watch, held);
|
|
278
|
+
deliverReadiness(runtime, watch, held, touched);
|
|
192
279
|
}
|
|
193
280
|
export function watchReadiness({ store }, port, reach, deliver) {
|
|
194
281
|
const watch = { port, reach, deliver };
|
|
@@ -200,13 +287,13 @@ export function filled(runtime) {
|
|
|
200
287
|
const { store, socket } = runtime;
|
|
201
288
|
if (socket.closed() || !store.space.fill())
|
|
202
289
|
return;
|
|
203
|
-
store.readiness.queue();
|
|
290
|
+
store.readiness.queue([]);
|
|
204
291
|
void probeEachMinute(runtime);
|
|
205
292
|
}
|
|
206
293
|
async function installedTarget({ store }) {
|
|
207
294
|
if (store.device.now().heldWhenOpened)
|
|
208
295
|
return true;
|
|
209
|
-
const { targets } = await (await store.open()).facts();
|
|
296
|
+
const { targets } = await (await store.open()).facts(['targets']);
|
|
210
297
|
return Object.values(targets).some((target) => target.established);
|
|
211
298
|
}
|
|
212
299
|
async function probeEachMinute(runtime) {
|
package/dist/presence.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ type Standing = {
|
|
|
9
9
|
readonly repairing: boolean;
|
|
10
10
|
readonly reloadDue: boolean;
|
|
11
11
|
};
|
|
12
|
+
export declare function lockingMode(mode: string | undefined): boolean;
|
|
12
13
|
type Listing = {
|
|
13
14
|
readonly whole: boolean;
|
|
14
15
|
readonly live: boolean;
|
|
@@ -25,7 +26,10 @@ export type Presence = {
|
|
|
25
26
|
modelled(locator: string, model: ModelState | null): void;
|
|
26
27
|
installed(locator: string, bootstrapped: boolean): void;
|
|
27
28
|
locked(locator: string, stored: () => Promise<string | null>): Promise<boolean>;
|
|
28
|
-
lockedAmong(stored: ReadonlyMap<string,
|
|
29
|
+
lockedAmong(stored: ReadonlyMap<string, {
|
|
30
|
+
readonly offline: string;
|
|
31
|
+
}>, locking: ReadonlySet<string>): readonly string[];
|
|
32
|
+
lockedAs(locator: string, mode: string | undefined): boolean;
|
|
29
33
|
connectionLost(lapsed: () => void): void;
|
|
30
34
|
connectionLive(): void;
|
|
31
35
|
lapse(): void;
|
|
@@ -41,12 +45,14 @@ export type Presence = {
|
|
|
41
45
|
writing(locator: string): boolean;
|
|
42
46
|
unwritten(locator: string): void;
|
|
43
47
|
lost(locator: string): boolean;
|
|
48
|
+
losing(): boolean;
|
|
49
|
+
listing(): number;
|
|
44
50
|
losses(): number;
|
|
45
51
|
lostSince(locator: string, losses: number): boolean;
|
|
46
52
|
liftable(locator: string, discovery: number): boolean;
|
|
47
53
|
lift(locator: string, discovery: number, unfenced: boolean): void;
|
|
48
54
|
close(): void;
|
|
49
55
|
};
|
|
50
|
-
export declare function createPresence(): Presence;
|
|
56
|
+
export declare function createPresence(notReadyWaitMs: (asked: number) => number): Presence;
|
|
51
57
|
export {};
|
|
52
58
|
//# sourceMappingURL=presence.d.ts.map
|
package/dist/presence.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presence.d.ts","sourceRoot":"","sources":["../src/presence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,KAAK,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEzD,KAAK,QAAQ,GAAG;IACd,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B,CAAC;
|
|
1
|
+
{"version":3,"file":"presence.d.ts","sourceRoot":"","sources":["../src/presence.ts"],"names":[],"mappings":"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"}
|
package/dist/presence.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export function lockingMode(mode) {
|
|
2
|
+
return mode === 'locked';
|
|
3
|
+
}
|
|
1
4
|
const UNANSWERED = {
|
|
2
5
|
stale: false,
|
|
3
6
|
repairable: null,
|
|
@@ -9,12 +12,12 @@ const UNANSWERED = {
|
|
|
9
12
|
unheldModel: null,
|
|
10
13
|
confirmed: false,
|
|
11
14
|
};
|
|
12
|
-
// A Room the Provider answers not ready is asked again after these waits, the last repeating, so a chunk build that catches up within seconds installs at once and a long one is asked every 15 seconds.
|
|
13
|
-
const NOT_READY_MS = [1_000, 2_000, 3_000, 5_000, 8_000, 11_000, 15_000];
|
|
14
15
|
// A Room that locks offline stays readable this long after the connection drops, so a laptop waking or changing network keeps working while a disconnected device locks soon after.
|
|
15
16
|
const LOCK_GRACE_MS = 120_000;
|
|
16
|
-
export function createPresence() {
|
|
17
|
+
export function createPresence(notReadyWaitMs) {
|
|
17
18
|
const listed = new Map();
|
|
19
|
+
const lockable = new Set();
|
|
20
|
+
let listings = 0;
|
|
18
21
|
const answered = new Map();
|
|
19
22
|
const marks = new Map();
|
|
20
23
|
const lastLost = new Map();
|
|
@@ -59,7 +62,7 @@ export function createPresence() {
|
|
|
59
62
|
return true;
|
|
60
63
|
}
|
|
61
64
|
function locks(locator, mode) {
|
|
62
|
-
return mode
|
|
65
|
+
return lockingMode(mode) && !answer(locator).confirmed && !marks.has(locator);
|
|
63
66
|
}
|
|
64
67
|
function liftable(locator, discovery) {
|
|
65
68
|
const mark = marks.get(locator);
|
|
@@ -67,11 +70,18 @@ export function createPresence() {
|
|
|
67
70
|
}
|
|
68
71
|
return {
|
|
69
72
|
list(found, { whole, live }) {
|
|
73
|
+
listings += 1;
|
|
70
74
|
const kept = found.filter(({ locator }) => !marks.has(locator));
|
|
71
|
-
if (whole)
|
|
75
|
+
if (whole) {
|
|
72
76
|
listed.clear();
|
|
77
|
+
lockable.clear();
|
|
78
|
+
}
|
|
73
79
|
for (const room of kept) {
|
|
74
80
|
listed.set(room.locator, room);
|
|
81
|
+
if (lockingMode(room.replica.offline))
|
|
82
|
+
lockable.add(room.locator);
|
|
83
|
+
else
|
|
84
|
+
lockable.delete(room.locator);
|
|
75
85
|
change(room.locator, {
|
|
76
86
|
refusal: null,
|
|
77
87
|
unreading: false,
|
|
@@ -125,13 +135,10 @@ export function createPresence() {
|
|
|
125
135
|
return false;
|
|
126
136
|
return locks(locator, (await stored()) ?? listed.get(locator)?.replica.offline);
|
|
127
137
|
},
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
return [...modes]
|
|
133
|
-
.filter(([locator, mode]) => locks(locator, mode))
|
|
134
|
-
.map(([locator]) => locator)
|
|
138
|
+
lockedAs: locks,
|
|
139
|
+
lockedAmong(stored, locking) {
|
|
140
|
+
return [...new Set([...lockable, ...locking])]
|
|
141
|
+
.filter((locator) => locks(locator, stored.get(locator)?.offline ?? listed.get(locator)?.replica.offline))
|
|
135
142
|
.sort();
|
|
136
143
|
},
|
|
137
144
|
connectionLost(lapsed) {
|
|
@@ -171,7 +178,7 @@ export function createPresence() {
|
|
|
171
178
|
unready.set(locator, held);
|
|
172
179
|
if (held.timer !== null)
|
|
173
180
|
return;
|
|
174
|
-
const wait =
|
|
181
|
+
const wait = notReadyWaitMs(held.tries);
|
|
175
182
|
held.tries += 1;
|
|
176
183
|
held.timer = setTimeout(() => {
|
|
177
184
|
held.timer = null;
|
|
@@ -184,7 +191,9 @@ export function createPresence() {
|
|
|
184
191
|
return false;
|
|
185
192
|
marks.set(locator, { during, written: false });
|
|
186
193
|
lastLost.set(locator, ++lossCount);
|
|
194
|
+
listings += 1;
|
|
187
195
|
listed.delete(locator);
|
|
196
|
+
lockable.delete(locator);
|
|
188
197
|
readied(locator);
|
|
189
198
|
const { repairing, reloadDue } = answer(locator);
|
|
190
199
|
answered.set(locator, { ...UNANSWERED, repairing, reloadDue });
|
|
@@ -203,6 +212,8 @@ export function createPresence() {
|
|
|
203
212
|
marks.set(locator, { ...mark, written: false });
|
|
204
213
|
},
|
|
205
214
|
lost: (locator) => marks.has(locator),
|
|
215
|
+
losing: () => marks.size > 0,
|
|
216
|
+
listing: () => listings,
|
|
206
217
|
losses: () => lossCount,
|
|
207
218
|
lostSince: (locator, losses) => marks.has(locator) || (lastLost.get(locator) ?? 0) > losses,
|
|
208
219
|
liftable,
|
package/dist/queries.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type FiguresCover } from './figures.js';
|
|
2
|
-
import type
|
|
2
|
+
import { type Cover, type Ran } from './live.js';
|
|
3
3
|
import { type Plan, type QueryResult } from './query.js';
|
|
4
4
|
import { type Deliver, type Fail, type PortReach } from './reach.js';
|
|
5
5
|
import type { Runtime } from './runtime.js';
|
package/dist/queries.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,EAAY,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAK3D,OAAO,EAKL,KAAK,IAAI,EACT,KAAK,WAAW,EAEjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAa,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAGhF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,KAAK,EAAa,SAAS,EAAgB,MAAM,YAAY,CAAC;AAiHrE,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAa1E;AAoGD,wBAAsB,YAAY,CAChC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,GAC1B,OAAO,CAAC,GAAG,CAAC,CAQd;AAQD,wBAAsB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAWlF;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,SAAS,GAAG,IAAI,GACtB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,wDAO7F;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,IAAI,CAmBhG;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,EACvB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,GACT,MAAM,IAAI,CAeZ;AAED,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,SAAS,GAAG,IAAI,GACtB,OAAO,CAAC,YAAY,CAAC,CAkDvB"}
|
package/dist/queries.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { identityOf } from '@agentshouse/mdmodel';
|
|
2
2
|
import { ROOM_TOTALS } from './figures.js';
|
|
3
3
|
import { roomInFlight } from './install.js';
|
|
4
|
+
import { readerOf } from './live.js';
|
|
4
5
|
import { compositionFor, roomFacts } from './listing.js';
|
|
5
6
|
import { lockedRooms } from './locks.js';
|
|
6
7
|
import { OFFLINE, UNCERTAIN, failure } from './outcome.js';
|
|
7
|
-
import { connectionNow, prepare
|
|
8
|
+
import { connectionNow, prepare } from './preparation.js';
|
|
8
9
|
import { planWithin, } from './query.js';
|
|
9
10
|
import { planReach } from './reach.js';
|
|
10
11
|
import { refuse } from './refusal.js';
|
|
11
|
-
import { documentKey } from './rows.js';
|
|
12
|
+
import { documentKey, roomsOfReach } from './rows.js';
|
|
12
13
|
import { searchPlanOf } from './search.js';
|
|
13
14
|
import { seedApplies, seededResult, watchSeeded } from './seed.js';
|
|
14
15
|
import { capped, MAXIMUM_WINDOW } from './windows.js';
|
|
@@ -22,16 +23,30 @@ function everyRoom({ presence }, held) {
|
|
|
22
23
|
]),
|
|
23
24
|
];
|
|
24
25
|
}
|
|
26
|
+
function anyHeld({ presence }, held, locator) {
|
|
27
|
+
return (presence.room(locator) !== undefined || held.rooms.has(locator) || held.queues.has(locator));
|
|
28
|
+
}
|
|
29
|
+
function anyRoom(plan) {
|
|
30
|
+
return plan.rooms === null && plan.reach === null;
|
|
31
|
+
}
|
|
32
|
+
function reaching(runtime, plan, reads, held) {
|
|
33
|
+
if (!anyRoom(plan))
|
|
34
|
+
return reads;
|
|
35
|
+
return (locator) => reads(locator) && anyHeld(runtime, held, locator);
|
|
36
|
+
}
|
|
25
37
|
function reachedRooms(runtime, plan, held) {
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
return [...new Set(named)]
|
|
29
|
-
.filter((locator) => (reached === null || reached.has(locator)) && !plan.locked.includes(locator))
|
|
30
|
-
.sort();
|
|
38
|
+
const named = plan.rooms ?? (plan.reach === null ? everyRoom(runtime, held) : roomsOfReach(plan.reach));
|
|
39
|
+
return [...new Set(named)].filter(reaching(runtime, plan, readerOf(plan), held)).sort();
|
|
31
40
|
}
|
|
32
41
|
function awaited({ socket, presence }, locator) {
|
|
33
42
|
return (!socket.session.now().roomsListed || presence.room(locator)?.replica.admission === 'admitted');
|
|
34
43
|
}
|
|
44
|
+
function awaitsOf(runtime, locator, held) {
|
|
45
|
+
const replica = held.rooms.get(locator);
|
|
46
|
+
if (replica === undefined)
|
|
47
|
+
return awaited(runtime, locator) ? 'acquisition' : null;
|
|
48
|
+
return replica.indexed ? null : 'preparation';
|
|
49
|
+
}
|
|
35
50
|
function coveredRooms(runtime, locators, whole, held) {
|
|
36
51
|
const { store, socket } = runtime;
|
|
37
52
|
if (locators.length === 0 && whole && !socket.session.now().roomsListed)
|
|
@@ -41,16 +56,12 @@ function coveredRooms(runtime, locators, whole, held) {
|
|
|
41
56
|
const overlay = [];
|
|
42
57
|
const read = [];
|
|
43
58
|
for (const locator of locators) {
|
|
59
|
+
const awaits = awaitsOf(runtime, locator, held);
|
|
60
|
+
if (awaits !== null)
|
|
61
|
+
pending.push({ room: locator, awaits });
|
|
44
62
|
const replica = held.rooms.get(locator);
|
|
45
|
-
if (replica === undefined)
|
|
46
|
-
if (awaited(runtime, locator))
|
|
47
|
-
pending.push({ room: locator, awaits: 'acquisition' });
|
|
48
|
-
continue;
|
|
49
|
-
}
|
|
50
|
-
if (!replica.indexed) {
|
|
51
|
-
pending.push({ room: locator, awaits: 'preparation' });
|
|
63
|
+
if (awaits !== null || replica === undefined)
|
|
52
64
|
continue;
|
|
53
|
-
}
|
|
54
65
|
coverage.push({
|
|
55
66
|
room: locator,
|
|
56
67
|
generation: replica.transfer,
|
|
@@ -65,7 +76,19 @@ function coveredRooms(runtime, locators, whole, held) {
|
|
|
65
76
|
return { coverage: { rooms: coverage, overlay }, rooms: read };
|
|
66
77
|
}
|
|
67
78
|
function covered(runtime, plan, held) {
|
|
68
|
-
return coveredRooms(runtime, reachedRooms(runtime, plan, held), plan
|
|
79
|
+
return coveredRooms(runtime, reachedRooms(runtime, plan, held), anyRoom(plan), held);
|
|
80
|
+
}
|
|
81
|
+
function pendingAt(runtime, plan, reads, held, rooms) {
|
|
82
|
+
const reached = reaching(runtime, plan, reads, held);
|
|
83
|
+
const at = new Map();
|
|
84
|
+
for (const room of rooms) {
|
|
85
|
+
const awaits = reached(room) ? awaitsOf(runtime, room, held) : null;
|
|
86
|
+
at.set(room, awaits === null ? null : { room, awaits });
|
|
87
|
+
}
|
|
88
|
+
awaitPreparation(runtime, {
|
|
89
|
+
pending: [...at.values()].filter((room) => room !== null),
|
|
90
|
+
});
|
|
91
|
+
return at;
|
|
69
92
|
}
|
|
70
93
|
function awaitPreparation(runtime, cover) {
|
|
71
94
|
if (!('pending' in cover))
|
|
@@ -204,11 +227,14 @@ export async function roomTallies(runtime, rooms, since) {
|
|
|
204
227
|
});
|
|
205
228
|
}
|
|
206
229
|
export function watchPlan(runtime, plan, deliver, fail) {
|
|
230
|
+
const reads = readerOf(plan);
|
|
207
231
|
return watchSeeded(runtime, plan, deliver, (behind, answered) => runtime.liveQueries.watch(plan, identityOf(plan), (held) => {
|
|
208
232
|
const cover = covered(runtime, plan, held);
|
|
209
233
|
awaitPreparation(runtime, cover);
|
|
210
234
|
return behind(cover, held);
|
|
211
|
-
},
|
|
235
|
+
}, (held, rooms) => runtime.store.seeds.of(plan.key) === undefined
|
|
236
|
+
? pendingAt(runtime, plan, reads, held, rooms)
|
|
237
|
+
: null, answered, fail));
|
|
212
238
|
}
|
|
213
239
|
export function watchPlanned(runtime, planning, deliver, fail) {
|
|
214
240
|
let stop = null;
|
package/dist/questions.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export type ChatQuestion = {
|
|
|
16
16
|
readonly interaction: string;
|
|
17
17
|
readonly asked: string | null;
|
|
18
18
|
readonly secret: boolean;
|
|
19
|
+
readonly page: string | null;
|
|
19
20
|
readonly message: string;
|
|
20
21
|
readonly fields: readonly ChatField[];
|
|
21
22
|
readonly undelivered: boolean;
|
package/dist/questions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../src/questions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3D,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;AAuCF,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEjD;AA2DD,wBAAgB,WAAW,CACzB,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,GAAG,IAAI,GAC/C,SAAS,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../src/questions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3D,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;AAuCF,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEjD;AA2DD,wBAAgB,WAAW,CACzB,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,GAAG,IAAI,GAC/C,SAAS,YAAY,EAAE,CAkBzB;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,GAAG,IAAI,CAKzE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,GAAG,IAAI,CAE1E"}
|
package/dist/questions.js
CHANGED
package/dist/queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAmC,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAKhF,OAAO,EAUL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,KAAK,EAEX,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"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"}
|