@agentshouse/mdruntime-adapter 0.1.0-ca3a44982cbe7 → 0.1.0-ca5b2f7fcb9d1

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/read.js CHANGED
@@ -1,4 +1,4 @@
1
- import { readPosition, roomVersion } from './version.js';
1
+ import { DECIMAL, readPosition, roomVersion } from './version.js';
2
2
  export function authorityRoot(handle) {
3
3
  return `/rooms/${handle}`;
4
4
  }
@@ -92,6 +92,7 @@ function parseFile(value, mode) {
92
92
  path: file.path,
93
93
  revision: file.revision,
94
94
  version: file.revision,
95
+ ...(typeof file.sha256 === 'string' ? { sha256: file.sha256 } : {}),
95
96
  ...headed(head),
96
97
  ...binaried(binary),
97
98
  };
@@ -132,13 +133,26 @@ function parseScope(value, mode) {
132
133
  }
133
134
  return { anchor: manifest.anchor, ...at, files, contents };
134
135
  }
136
+ function parseCut(value) {
137
+ if (value === undefined)
138
+ return undefined;
139
+ if (typeof value !== 'object' || value === null)
140
+ return null;
141
+ const { position, log_epoch: logEpoch } = value;
142
+ if (typeof position !== 'string' || typeof logEpoch !== 'string')
143
+ return null;
144
+ return { position, log_epoch: logEpoch };
145
+ }
135
146
  function parseCursor(value) {
136
147
  if (typeof value !== 'object' || value === null)
137
148
  return null;
138
- const { room, path } = value;
149
+ const { room, path, cut } = value;
139
150
  if (typeof room !== 'string' || (path !== null && typeof path !== 'string'))
140
151
  return null;
141
- return { room, path };
152
+ const parsed = parseCut(cut);
153
+ if (parsed === null)
154
+ return null;
155
+ return { room, path, ...(parsed === undefined ? {} : { cut: parsed }) };
142
156
  }
143
157
  export function parseEnvelope(body) {
144
158
  if (typeof body !== 'object' || body === null)
@@ -160,6 +174,18 @@ export function parseEnvelope(body) {
160
174
  export function parseSiteBootstrap(body) {
161
175
  return parseScope(body, 'site');
162
176
  }
177
+ export function siteBootstrapNext(body) {
178
+ if (typeof body !== 'object' || body === null || !('next' in body))
179
+ return null;
180
+ return typeof body.next === 'string' && body.next.length > 0 ? body.next : null;
181
+ }
182
+ export function siteBootstrapOffset(body) {
183
+ if (typeof body !== 'object' || body === null || !('offset' in body))
184
+ return null;
185
+ return Number.isSafeInteger(body.offset) && body.offset > 0
186
+ ? body.offset
187
+ : null;
188
+ }
163
189
  function parseChange(value, mode) {
164
190
  if (typeof value !== 'object' || value === null)
165
191
  return null;
@@ -222,10 +248,60 @@ export function parseEnumeration(body, mode) {
222
248
  return null;
223
249
  changes.push(mapped);
224
250
  }
225
- authorities.push({ authority: held.authority, ...at, changes });
251
+ const next = held.next === undefined ? undefined : readPage(held.next);
252
+ if (next === null)
253
+ return null;
254
+ authorities.push({
255
+ authority: held.authority,
256
+ ...at,
257
+ changes,
258
+ ...(next === undefined ? {} : { next }),
259
+ });
226
260
  }
227
261
  return { authorities };
228
262
  }
263
+ function readPage(held) {
264
+ if (typeof held !== 'object' || held === null)
265
+ return null;
266
+ const { after, through, read } = held;
267
+ if (typeof after !== 'string' || !DECIMAL.test(after))
268
+ return null;
269
+ if (typeof through !== 'string' || !DECIMAL.test(through))
270
+ return null;
271
+ if (typeof read !== 'number' || !Number.isSafeInteger(read) || read < 0)
272
+ return null;
273
+ return { after, through, read };
274
+ }
275
+ function advances(asked, next) {
276
+ const moved = BigInt(next.through) - BigInt(asked.through);
277
+ return moved > 0n || (moved === 0n && next.after === asked.after && next.read > asked.read);
278
+ }
279
+ export async function wholeView(first, more) {
280
+ const changes = new Map(first.changes.map((change) => [change.path, change]));
281
+ let view = first;
282
+ while (view.next !== undefined) {
283
+ const asked = view.next;
284
+ const page = await more(asked);
285
+ if ('kind' in page)
286
+ return page;
287
+ if (page.position !== asked.through ||
288
+ page.logEpoch !== first.logEpoch ||
289
+ (page.next !== undefined && !advances(asked, page.next))) {
290
+ return { kind: 'transport-uncertainty' };
291
+ }
292
+ for (const change of page.changes) {
293
+ changes.delete(change.path);
294
+ changes.set(change.path, change);
295
+ }
296
+ view = page;
297
+ }
298
+ return {
299
+ authority: first.authority,
300
+ position: view.position,
301
+ logEpoch: first.logEpoch,
302
+ changes: [...changes.values()],
303
+ };
304
+ }
229
305
  export function advancedScope(scope, view) {
230
306
  const files = new Map(scope.files.map((file) => [file.path, file]));
231
307
  const contents = new Map(scope.contents.map((entry) => [entry.path, entry.content]));
@@ -1 +1 @@
1
- {"version":3,"file":"refusal.d.ts","sourceRoot":"","sources":["../src/refusal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,aAAa,EACd,MAAM,wBAAwB,CAAC;AAEhC,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAOjE;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,EAC7B,OAAO,EAAE,eAAe,GACvB,aAAa,CAEf;AAmBD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,GACd,cAAc,GAAG,IAAI,CAMvB;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,GACd,cAAc,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAAG,IAAI,CAGpD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAQrF"}
1
+ {"version":3,"file":"refusal.d.ts","sourceRoot":"","sources":["../src/refusal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,aAAa,EACd,MAAM,wBAAwB,CAAC;AAEhC,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAOjE;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,EAC7B,OAAO,EAAE,eAAe,GACvB,aAAa,CAEf;AAqBD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,GACd,cAAc,GAAG,IAAI,CAMvB;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,GACd,cAAc,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAAG,IAAI,CAGpD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAQrF"}
package/dist/refusal.js CHANGED
@@ -18,8 +18,9 @@ function doorFailure(status, body) {
18
18
  const refusal = doorRefusal(body);
19
19
  if (status === 401)
20
20
  return { kind: 'revoked-authorization' };
21
- if (refusal?.retryable === true)
21
+ if (refusal?.retryable === true || refusal?.code === 'update_required') {
22
22
  return { kind: 'transport-uncertainty' };
23
+ }
23
24
  if (status === 404 || refusal?.code === 'room_not_found')
24
25
  return { kind: 'room-not-readable' };
25
26
  if (status < 400)
package/dist/site.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import type { Adapter } from '@agentshouse/mdruntime';
2
2
  import { type HouseSiteTransport } from './transport.js';
3
- export declare function createSiteAdapter(transport: HouseSiteTransport): Adapter;
3
+ export declare function createSiteAdapter(transport: HouseSiteTransport, snapshot?: boolean): Adapter;
4
4
  //# sourceMappingURL=site.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAOR,MAAM,wBAAwB,CAAC;AAsBhC,OAAO,EAOL,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAiCxB,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CA8KxE"}
1
+ {"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAOR,MAAM,wBAAwB,CAAC;AA2BhC,OAAO,EAOL,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAmCxB,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,EAAE,QAAQ,UAAQ,GAAG,OAAO,CA8Q1F"}
package/dist/site.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { actionOutcome, SITE_SUBMIT } from './actions.js';
2
2
  import { mapDiscovery, parseSiteDiscovery, siteCapabilities, siteTracked, } from './discovery.js';
3
- import { scopeModels, streamedModels, viewModels } from './model.js';
4
- import { advancedScope, bootstrapOf, parseEnumeration, parseSiteBootstrap, refreshFrom, viewOf, } from './read.js';
3
+ import { partModels, streamedModels, viewModels } from './model.js';
4
+ import { advancedScope, bootstrapOf, parseEnumeration, parseSiteBootstrap, refreshFrom, siteBootstrapNext, siteBootstrapOffset, viewOf, wholeView, } from './read.js';
5
+ import { sha256Hex } from './digest.js';
5
6
  import { classifyDoor, classifyRead, discoveryFailure } from './refusal.js';
6
7
  import { houseNotifications } from './stream.js';
7
8
  import { SITE_DOOR_BOOTSTRAP, SITE_DOOR_DISCOVER, SITE_DOOR_ENUMERATE, SITE_DOOR_SUBMIT, SITE_FILE_RECORD, SITE_FILES, } from './transport.js';
@@ -22,39 +23,97 @@ function siteRoom(tracked) {
22
23
  function settled(refused) {
23
24
  return refused.kind === 'beyond-horizon' ? UNCERTAIN : refused;
24
25
  }
25
- export function createSiteAdapter(transport) {
26
+ export function createSiteAdapter(transport, snapshot = false) {
26
27
  const notifications = houseNotifications(transport, 'site');
27
28
  const tracked = new Map();
28
29
  function published(referrer) {
29
30
  const named = houseReferrer(referrer, tracked);
30
31
  return named === null || !tracked.has(named.locator) ? null : named;
31
32
  }
32
- async function enumeration(entry, from) {
33
+ async function enumerated(entry, from, page) {
33
34
  const answer = await transport.door(SITE_DOOR_ENUMERATE, {
34
- positions: [presented(entry.authority, from)],
35
+ positions: [
36
+ page === undefined
37
+ ? presented(entry.authority, from)
38
+ : {
39
+ ...presented(entry.authority, { position: page.after, logEpoch: from.logEpoch }),
40
+ page: { through: page.through, read: page.read },
41
+ },
42
+ ],
35
43
  });
36
44
  const classified = classifyRead(answer.status, answer.body, entry.locator);
37
45
  if (classified !== null)
38
46
  return classified;
39
- return parseEnumeration(answer.body, 'site') ?? UNCERTAIN;
47
+ const found = parseEnumeration(answer.body, 'site');
48
+ if (found === null)
49
+ return UNCERTAIN;
50
+ return viewOf(found, entry) ?? { kind: 'room-not-readable', locator: entry.locator };
51
+ }
52
+ async function enumeration(entry, from) {
53
+ const first = await enumerated(entry, from);
54
+ return 'kind' in first ? first : wholeView(first, (page) => enumerated(entry, from, page));
40
55
  }
41
- async function caughtUp(entry) {
42
- const answer = await transport.read(`${SITE_DOOR_BOOTSTRAP}${entry.authority}`);
56
+ async function bootstrapPart(entry, after, offset) {
57
+ const query = [
58
+ ...(after === null ? [] : [`after=${encodeURIComponent(after)}`]),
59
+ ...(offset === null ? [] : [`offset=${offset}`]),
60
+ ];
61
+ const answer = await transport.read(`${SITE_DOOR_BOOTSTRAP}${entry.authority}${query.length === 0 ? '' : `?${query.join('&')}`}`);
43
62
  const classified = classifyDoor(answer.status, answer.body, entry.locator);
44
63
  if (classified !== null)
45
64
  return { failure: classified };
46
65
  const scope = parseSiteBootstrap(answer.body);
47
- if (scope === null)
48
- return { failure: UNCERTAIN };
49
- if (roomVersion(scope) === roomVersion(entry))
50
- return { scope };
51
- const found = await enumeration(entry, scope);
52
- if ('kind' in found)
53
- return { failure: settled(found) };
54
- const view = viewOf(found, entry);
55
- if (view === undefined)
56
- return { failure: { kind: 'room-not-readable', locator: entry.locator } };
57
- return { scope: advancedScope(scope, view) };
66
+ return scope === null ? { failure: UNCERTAIN } : { body: answer.body, scope };
67
+ }
68
+ async function assembled(entry, scope, path, offset) {
69
+ const opened = scope.contents.at(-1);
70
+ if (opened === undefined || opened.path !== path || opened.content.length !== offset) {
71
+ return UNCERTAIN;
72
+ }
73
+ let text = opened.content;
74
+ for (;;) {
75
+ const part = await bootstrapPart(entry, path, text.length);
76
+ if ('failure' in part)
77
+ return part.failure;
78
+ const [piece] = part.scope.contents;
79
+ if (piece === undefined ||
80
+ part.scope.contents.length !== 1 ||
81
+ piece.path !== path ||
82
+ piece.content.length === 0) {
83
+ return UNCERTAIN;
84
+ }
85
+ text += piece.content;
86
+ const more = siteBootstrapOffset(part.body);
87
+ if (more === null)
88
+ break;
89
+ if (more !== text.length)
90
+ return UNCERTAIN;
91
+ }
92
+ const file = scope.files.find((held) => held.path === path);
93
+ if (file === undefined || (await sha256Hex(text)) !== file.version)
94
+ return UNCERTAIN;
95
+ return { ...scope, contents: [...scope.contents.slice(0, -1), { path, content: text }] };
96
+ }
97
+ async function caughtUp(entry, after) {
98
+ const part = await bootstrapPart(entry, after, null);
99
+ if ('failure' in part)
100
+ return part;
101
+ const next = siteBootstrapNext(part.body);
102
+ const offset = siteBootstrapOffset(part.body);
103
+ if (offset !== null) {
104
+ if (next === null)
105
+ return { failure: UNCERTAIN };
106
+ const scope = await assembled(entry, part.scope, next, offset);
107
+ return 'kind' in scope ? { failure: scope } : { scope, next };
108
+ }
109
+ const { scope } = part;
110
+ if (after !== null || next !== null || roomVersion(scope) === roomVersion(entry)) {
111
+ return { scope, next };
112
+ }
113
+ const view = await enumeration(entry, scope);
114
+ if ('kind' in view)
115
+ return { failure: settled(view) };
116
+ return { scope: advancedScope(scope, view), next: null };
58
117
  }
59
118
  async function refreshed(entry, fromRoomVersion) {
60
119
  const from = logPosition(fromRoomVersion);
@@ -65,12 +124,9 @@ export function createSiteAdapter(transport) {
65
124
  const models = await streamedModels(streamed.schemas, entry, 'site');
66
125
  return models === undefined ? streamed.page : { ...streamed.page, models };
67
126
  }
68
- const found = await enumeration(entry, from);
69
- if ('kind' in found)
70
- return found;
71
- const view = viewOf(found, entry);
72
- if (view === undefined)
73
- return { kind: 'room-not-readable', locator: entry.locator };
127
+ const view = await enumeration(entry, from);
128
+ if ('kind' in view)
129
+ return view;
74
130
  notifications.reach(entry.authority, view);
75
131
  const answer = refreshFrom(view, fromRoomVersion);
76
132
  if (answer.kind !== 'net-advancement')
@@ -80,6 +136,7 @@ export function createSiteAdapter(transport) {
80
136
  }
81
137
  return {
82
138
  localSaves: true,
139
+ exhaustiveDiscovery: true,
83
140
  async authorize() {
84
141
  return {};
85
142
  },
@@ -102,14 +159,24 @@ export function createSiteAdapter(transport) {
102
159
  const entry = tracked.get(request.locator);
103
160
  if (entry === undefined)
104
161
  return { kind: 'room-not-readable', locator: request.locator };
105
- if (request.pageToken !== undefined)
106
- return UNCERTAIN;
107
- const held = await caughtUp(entry);
162
+ const continued = request.pageToken === undefined
163
+ ? null
164
+ : JSON.parse(request.pageToken);
165
+ const held = await caughtUp(entry, continued?.after ?? null);
108
166
  if ('failure' in held)
109
167
  return held.failure;
110
168
  notifications.reach(entry.authority, held.scope);
111
- const models = await scopeModels(held.scope, entry);
112
- return { ...bootstrapOf(held.scope), ...(models === undefined ? {} : { models }) };
169
+ const seen = [
170
+ ...(continued?.seen ?? []),
171
+ ...entry.schemas.filter((schema) => held.scope.files.some((file) => file.path === schema)),
172
+ ];
173
+ const models = await partModels(held.scope, entry, new Set(seen), held.next === null);
174
+ const continuation = held.next === null ? null : { after: held.next, seen };
175
+ return {
176
+ ...bootstrapOf(held.scope),
177
+ ...(models === undefined ? {} : { models }),
178
+ ...(continuation === null ? {} : { pageToken: JSON.stringify(continuation) }),
179
+ };
113
180
  },
114
181
  async refresh(_authorization, request) {
115
182
  const entry = tracked.get(request.locator);
@@ -117,6 +184,11 @@ export function createSiteAdapter(transport) {
117
184
  return { kind: 'room-not-readable', locator: request.locator };
118
185
  if (request.pageToken !== undefined)
119
186
  return UNCERTAIN;
187
+ if (snapshot) {
188
+ return request.fromRoomVersion === roomVersion(entry)
189
+ ? { kind: 'still-current' }
190
+ : { kind: 'beyond-horizon' };
191
+ }
120
192
  return refreshed(entry, request.fromRoomVersion);
121
193
  },
122
194
  async mutate() {
@@ -170,20 +242,27 @@ export function createSiteAdapter(transport) {
170
242
  return UNCERTAIN;
171
243
  return actionOutcome(await transport.door(SITE_DOOR_SUBMIT, request.input), SITE_SUBMIT);
172
244
  },
173
- roomStream: {
174
- hold(rooms) {
175
- notifications.send(rooms.flatMap((room) => {
176
- const entry = tracked.get(room.locator);
177
- const at = logPosition(room.roomVersion);
178
- if (entry === undefined || at === null)
179
- return [];
180
- notifications.reach(entry.authority, at);
181
- return [presented(entry.authority, at)];
182
- }));
245
+ roomStream: snapshot
246
+ ? undefined
247
+ : {
248
+ hold(rooms) {
249
+ notifications.send(rooms.flatMap((room) => {
250
+ const entry = tracked.get(room.locator);
251
+ const at = logPosition(room.roomVersion);
252
+ if (entry === undefined || at === null)
253
+ return [];
254
+ notifications.reach(entry.authority, at);
255
+ return [presented(entry.authority, at)];
256
+ }));
257
+ },
258
+ reopen: notifications.reopen,
259
+ observe: notifications.observe,
260
+ published(locator, roomVersion) {
261
+ const at = logPosition(roomVersion);
262
+ if (at !== null)
263
+ notifications.published(locator, at);
264
+ },
183
265
  },
184
- reopen: notifications.reopen,
185
- observe: notifications.observe,
186
- },
187
266
  serviceMode: notifications.serviceMode,
188
267
  };
189
268
  }
package/dist/stream.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ConversationStream, RefreshPage, RoomStreamEvent, ServiceModeSignal } from '@agentshouse/mdruntime';
1
+ import type { ConversationStream, RefreshPage, RoomStreamEvent, ServiceModeSignal, StreamReceipts } from '@agentshouse/mdruntime';
2
2
  import type { TrackedAuthority } from './discovery.js';
3
3
  import type { HouseDoor, HouseHeldRoom, HouseMode, HouseStreamEntry } from './transport.js';
4
4
  import { type LogPosition } from './version.js';
@@ -10,8 +10,9 @@ export type StreamedAdvancement = {
10
10
  };
11
11
  export type HouseNotifications = {
12
12
  runtime: string;
13
- observe(notify: (event: RoomStreamEvent) => void): () => void;
13
+ observe(notify: (event: RoomStreamEvent) => void, receipts: StreamReceipts): () => void;
14
14
  send(rooms: readonly HouseHeldRoom[]): void;
15
+ published(locator: string, at: LogPosition): void;
15
16
  reopen(): void;
16
17
  track(authorities: readonly TrackedAuthority[]): void;
17
18
  reach(authority: string, at: LogPosition): void;
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,kBAAkB,EAElB,WAAW,EACX,eAAe,EAEf,iBAAiB,EAElB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EAEb,SAAS,EAET,gBAAgB,EAEjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAgB7D,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;AAEvE,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC9D,IAAI,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,CAAC;IAC5C,MAAM,IAAI,IAAI,CAAC;IACf,KAAK,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,GAAG,IAAI,CAAC;IACtD,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC;IAChD,OAAO,CACL,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,WAAW,EACjB,KAAK,CAAC,EAAE,YAAY,GACnB,mBAAmB,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,kBAAkB,CAAC;IAClC,WAAW,EAAE,iBAAiB,CAAC;CAChC,CAAC;AAuBF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,kBAAkB,CA8S5F"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,kBAAkB,EAElB,WAAW,EACX,eAAe,EAEf,iBAAiB,EACjB,cAAc,EAEf,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EAEb,SAAS,EAET,gBAAgB,EAEjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AA0C7D,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;AAEvE,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,IAAI,CAAC;IACxF,IAAI,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,CAAC;IAC5C,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC;IAClD,MAAM,IAAI,IAAI,CAAC;IACf,KAAK,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,GAAG,IAAI,CAAC;IACtD,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC;IAChD,OAAO,CACL,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,WAAW,EACjB,KAAK,CAAC,EAAE,YAAY,GACnB,mBAAmB,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,kBAAkB,CAAC;IAClC,WAAW,EAAE,iBAAiB,CAAC;CAChC,CAAC;AAkFF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,kBAAkB,CAmhB5F"}