@agentshouse/mdruntime 0.1.0-c4ca57eefb98a → 0.1.0-c4ef58fbdca7b

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. package/README.md +2 -2
  2. package/dist/acceptance.d.ts +6 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +389 -0
  5. package/dist/actions.d.ts +20 -0
  6. package/dist/actions.d.ts.map +1 -0
  7. package/dist/actions.js +251 -0
  8. package/dist/adapter.d.ts +85 -67
  9. package/dist/adapter.d.ts.map +1 -1
  10. package/dist/attached-model.d.ts +3 -10
  11. package/dist/attached-model.d.ts.map +1 -1
  12. package/dist/attached-model.js +21 -56
  13. package/dist/bootstrap.d.ts +11 -10
  14. package/dist/bootstrap.d.ts.map +1 -1
  15. package/dist/bootstrap.js +218 -82
  16. package/dist/cell.d.ts +6 -0
  17. package/dist/cell.d.ts.map +1 -0
  18. package/dist/cell.js +9 -0
  19. package/dist/chain.d.ts +2 -1
  20. package/dist/chain.d.ts.map +1 -1
  21. package/dist/chain.js +3 -7
  22. package/dist/change.d.ts +1 -0
  23. package/dist/change.d.ts.map +1 -1
  24. package/dist/chat-types.d.ts +5 -0
  25. package/dist/chat-types.d.ts.map +1 -0
  26. package/dist/chat-types.js +13 -0
  27. package/dist/client.d.ts +21 -6
  28. package/dist/client.d.ts.map +1 -1
  29. package/dist/client.js +3 -1
  30. package/dist/collection.d.ts +2 -4
  31. package/dist/collection.d.ts.map +1 -1
  32. package/dist/collection.js +1 -17
  33. package/dist/compile.d.ts +6 -6
  34. package/dist/compile.d.ts.map +1 -1
  35. package/dist/compile.js +263 -319
  36. package/dist/connection.d.ts +5 -143
  37. package/dist/connection.d.ts.map +1 -1
  38. package/dist/connection.js +102 -5311
  39. package/dist/context.d.ts +2 -0
  40. package/dist/context.d.ts.map +1 -0
  41. package/dist/context.js +7 -0
  42. package/dist/conversation-live.d.ts +136 -0
  43. package/dist/conversation-live.d.ts.map +1 -0
  44. package/dist/conversation-live.js +248 -0
  45. package/dist/conversation-row.d.ts +33 -0
  46. package/dist/conversation-row.d.ts.map +1 -0
  47. package/dist/conversation-row.js +53 -0
  48. package/dist/conversation.d.ts +41 -45
  49. package/dist/conversation.d.ts.map +1 -1
  50. package/dist/conversation.js +860 -869
  51. package/dist/discovery.d.ts +10 -0
  52. package/dist/discovery.d.ts.map +1 -0
  53. package/dist/discovery.js +175 -0
  54. package/dist/durability.d.ts +15 -1
  55. package/dist/durability.d.ts.map +1 -1
  56. package/dist/entry.d.ts +2 -2
  57. package/dist/entry.d.ts.map +1 -1
  58. package/dist/entry.js +17 -7
  59. package/dist/figures.d.ts +49 -0
  60. package/dist/figures.d.ts.map +1 -0
  61. package/dist/figures.js +197 -0
  62. package/dist/holdings.d.ts +29 -0
  63. package/dist/holdings.d.ts.map +1 -0
  64. package/dist/holdings.js +95 -0
  65. package/dist/host.d.ts +4 -7
  66. package/dist/host.d.ts.map +1 -1
  67. package/dist/host.js +29 -31
  68. package/dist/identity.d.ts +0 -1
  69. package/dist/identity.d.ts.map +1 -1
  70. package/dist/identity.js +0 -3
  71. package/dist/index.d.ts +25 -8
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +7 -1
  74. package/dist/install.d.ts +56 -0
  75. package/dist/install.d.ts.map +1 -0
  76. package/dist/install.js +556 -0
  77. package/dist/job.d.ts +33 -0
  78. package/dist/job.d.ts.map +1 -0
  79. package/dist/job.js +54 -0
  80. package/dist/lifecycle.d.ts +7 -0
  81. package/dist/lifecycle.d.ts.map +1 -0
  82. package/dist/lifecycle.js +268 -0
  83. package/dist/listing.d.ts +53 -0
  84. package/dist/listing.d.ts.map +1 -0
  85. package/dist/listing.js +175 -0
  86. package/dist/live.d.ts +5 -4
  87. package/dist/live.d.ts.map +1 -1
  88. package/dist/live.js +63 -22
  89. package/dist/locks.d.ts +9 -0
  90. package/dist/locks.d.ts.map +1 -0
  91. package/dist/locks.js +61 -0
  92. package/dist/log.d.ts +1 -0
  93. package/dist/log.d.ts.map +1 -1
  94. package/dist/lost.d.ts +5 -0
  95. package/dist/lost.d.ts.map +1 -0
  96. package/dist/lost.js +61 -0
  97. package/dist/media.d.ts +1 -1
  98. package/dist/media.d.ts.map +1 -1
  99. package/dist/media.js +19 -9
  100. package/dist/memory.d.ts +11 -4
  101. package/dist/memory.d.ts.map +1 -1
  102. package/dist/memory.js +171 -82
  103. package/dist/messages.d.ts +27 -3
  104. package/dist/messages.d.ts.map +1 -1
  105. package/dist/messages.js +97 -19
  106. package/dist/model.d.ts +2 -10
  107. package/dist/model.d.ts.map +1 -1
  108. package/dist/model.js +0 -18
  109. package/dist/models.d.ts +14 -0
  110. package/dist/models.d.ts.map +1 -0
  111. package/dist/models.js +193 -0
  112. package/dist/observation.d.ts +2 -2
  113. package/dist/observation.d.ts.map +1 -1
  114. package/dist/observation.js +7 -2
  115. package/dist/opening.d.ts +4 -0
  116. package/dist/opening.d.ts.map +1 -0
  117. package/dist/opening.js +57 -0
  118. package/dist/outcome.d.ts +4 -4
  119. package/dist/outcome.d.ts.map +1 -1
  120. package/dist/outcome.js +3 -0
  121. package/dist/overlay.d.ts +1 -0
  122. package/dist/overlay.d.ts.map +1 -1
  123. package/dist/overlay.js +11 -0
  124. package/dist/parts.d.ts +59 -0
  125. package/dist/parts.d.ts.map +1 -0
  126. package/dist/parts.js +118 -0
  127. package/dist/preparation.d.ts +20 -0
  128. package/dist/preparation.d.ts.map +1 -0
  129. package/dist/preparation.js +226 -0
  130. package/dist/queries.d.ts +16 -0
  131. package/dist/queries.d.ts.map +1 -0
  132. package/dist/queries.js +272 -0
  133. package/dist/query.d.ts +14 -209
  134. package/dist/query.d.ts.map +1 -1
  135. package/dist/query.js +3 -505
  136. package/dist/questions.d.ts +34 -0
  137. package/dist/questions.d.ts.map +1 -0
  138. package/dist/questions.js +122 -0
  139. package/dist/reach.d.ts +15 -13
  140. package/dist/reach.d.ts.map +1 -1
  141. package/dist/reach.js +183 -137
  142. package/dist/react.d.ts +10 -2
  143. package/dist/react.d.ts.map +1 -1
  144. package/dist/read.d.ts +7 -0
  145. package/dist/read.d.ts.map +1 -0
  146. package/dist/read.js +17 -0
  147. package/dist/readiness.d.ts +2 -16
  148. package/dist/readiness.d.ts.map +1 -1
  149. package/dist/readiness.js +4 -10
  150. package/dist/reads.d.ts +36 -10
  151. package/dist/reads.d.ts.map +1 -1
  152. package/dist/reads.js +158 -78
  153. package/dist/recovery.d.ts +1 -0
  154. package/dist/recovery.d.ts.map +1 -1
  155. package/dist/recovery.js +35 -1
  156. package/dist/refresh.d.ts +7 -5
  157. package/dist/refresh.d.ts.map +1 -1
  158. package/dist/refresh.js +33 -5
  159. package/dist/refusal.d.ts +5 -0
  160. package/dist/refusal.d.ts.map +1 -0
  161. package/dist/refusal.js +56 -0
  162. package/dist/replica.d.ts +8 -9
  163. package/dist/replica.d.ts.map +1 -1
  164. package/dist/replica.js +52 -20
  165. package/dist/room-draft.d.ts +4 -3
  166. package/dist/room-draft.d.ts.map +1 -1
  167. package/dist/room-draft.js +65 -52
  168. package/dist/room-drafts.d.ts +24 -0
  169. package/dist/room-drafts.d.ts.map +1 -0
  170. package/dist/room-drafts.js +216 -0
  171. package/dist/rows.d.ts +14 -21
  172. package/dist/rows.d.ts.map +1 -1
  173. package/dist/rows.js +48 -184
  174. package/dist/runtime.d.ts +43 -0
  175. package/dist/runtime.d.ts.map +1 -0
  176. package/dist/runtime.js +1 -0
  177. package/dist/save.d.ts +3 -1
  178. package/dist/save.d.ts.map +1 -1
  179. package/dist/save.js +16 -11
  180. package/dist/saves.d.ts +70 -0
  181. package/dist/saves.d.ts.map +1 -0
  182. package/dist/saves.js +1006 -0
  183. package/dist/search.d.ts +12 -63
  184. package/dist/search.d.ts.map +1 -1
  185. package/dist/search.js +9 -52
  186. package/dist/seed.d.ts +11 -2
  187. package/dist/seed.d.ts.map +1 -1
  188. package/dist/seed.js +71 -0
  189. package/dist/shared.d.ts +1 -2
  190. package/dist/shared.d.ts.map +1 -1
  191. package/dist/shared.js +9 -15
  192. package/dist/shown.d.ts +31 -0
  193. package/dist/shown.d.ts.map +1 -0
  194. package/dist/shown.js +295 -0
  195. package/dist/socket/admission.d.ts +7 -0
  196. package/dist/socket/admission.d.ts.map +1 -0
  197. package/dist/socket/admission.js +39 -0
  198. package/dist/socket/answers.d.ts +6 -0
  199. package/dist/socket/answers.d.ts.map +1 -0
  200. package/dist/socket/answers.js +20 -0
  201. package/dist/socket/lanes.d.ts +20 -0
  202. package/dist/socket/lanes.d.ts.map +1 -0
  203. package/dist/socket/lanes.js +77 -0
  204. package/dist/socket/reads.d.ts +10 -0
  205. package/dist/socket/reads.d.ts.map +1 -0
  206. package/dist/socket/reads.js +31 -0
  207. package/dist/socket/rooms.d.ts +43 -0
  208. package/dist/socket/rooms.d.ts.map +1 -0
  209. package/dist/socket/rooms.js +90 -0
  210. package/dist/socket/session.d.ts +39 -0
  211. package/dist/socket/session.d.ts.map +1 -0
  212. package/dist/socket/session.js +23 -0
  213. package/dist/socket.d.ts +70 -0
  214. package/dist/socket.d.ts.map +1 -0
  215. package/dist/socket.js +175 -0
  216. package/dist/source.d.ts +61 -0
  217. package/dist/source.d.ts.map +1 -0
  218. package/dist/source.js +81 -0
  219. package/dist/status.d.ts +0 -6
  220. package/dist/status.d.ts.map +1 -1
  221. package/dist/status.js +0 -6
  222. package/dist/store/fences.d.ts +16 -0
  223. package/dist/store/fences.d.ts.map +1 -0
  224. package/dist/store/fences.js +26 -0
  225. package/dist/store/installs.d.ts +30 -0
  226. package/dist/store/installs.d.ts.map +1 -0
  227. package/dist/store/installs.js +34 -0
  228. package/dist/store/readiness.d.ts +10 -0
  229. package/dist/store/readiness.d.ts.map +1 -0
  230. package/dist/store/readiness.js +52 -0
  231. package/dist/store/records.d.ts +212 -0
  232. package/dist/store/records.d.ts.map +1 -0
  233. package/dist/store/records.js +431 -0
  234. package/dist/store/room-held.d.ts +8 -0
  235. package/dist/store/room-held.d.ts.map +1 -0
  236. package/dist/store/room-held.js +17 -0
  237. package/dist/store/space.d.ts +11 -0
  238. package/dist/store/space.d.ts.map +1 -0
  239. package/dist/store/space.js +43 -0
  240. package/dist/store/watchers.d.ts +17 -0
  241. package/dist/store/watchers.d.ts.map +1 -0
  242. package/dist/store/watchers.js +57 -0
  243. package/dist/store/writes.d.ts +24 -0
  244. package/dist/store/writes.d.ts.map +1 -0
  245. package/dist/store/writes.js +125 -0
  246. package/dist/store.d.ts +107 -157
  247. package/dist/store.d.ts.map +1 -1
  248. package/dist/store.js +143 -395
  249. package/dist/stored.d.ts +58 -37
  250. package/dist/stored.d.ts.map +1 -1
  251. package/dist/stored.js +283 -203
  252. package/dist/surface.d.ts +88 -0
  253. package/dist/surface.d.ts.map +1 -0
  254. package/dist/surface.js +223 -0
  255. package/dist/sync.d.ts +20 -0
  256. package/dist/sync.d.ts.map +1 -0
  257. package/dist/sync.js +532 -0
  258. package/dist/tables.d.ts +120 -55
  259. package/dist/tables.d.ts.map +1 -1
  260. package/dist/tables.js +212 -93
  261. package/dist/tallies.d.ts +18 -0
  262. package/dist/tallies.d.ts.map +1 -0
  263. package/dist/tallies.js +129 -0
  264. package/dist/transfer.d.ts +0 -5
  265. package/dist/transfer.d.ts.map +1 -1
  266. package/dist/validation.d.ts +3 -4
  267. package/dist/validation.d.ts.map +1 -1
  268. package/dist/validation.js +42 -100
  269. package/dist/windows.d.ts +1 -12
  270. package/dist/windows.d.ts.map +1 -1
  271. package/dist/windows.js +2 -75
  272. package/dist/wire.d.ts +17 -5
  273. package/dist/wire.d.ts.map +1 -1
  274. package/dist/wire.js +7 -1
  275. package/package.json +2 -2
  276. package/dist/fence.d.ts +0 -6
  277. package/dist/fence.d.ts.map +0 -1
  278. package/dist/fence.js +0 -10
  279. package/dist/fulltext.d.ts +0 -27
  280. package/dist/fulltext.d.ts.map +0 -1
  281. package/dist/fulltext.js +0 -370
  282. package/dist/words.d.ts +0 -19
  283. package/dist/words.d.ts.map +0 -1
  284. package/dist/words.js +0 -156
@@ -1,81 +1,46 @@
1
- import { verify } from '@agentshouse/mdmodel';
1
+ import { readTypes } from '@agentshouse/mdmodel';
2
2
  import { MD_MODEL } from './collection.js';
3
- import { NO_MODEL, sameModel } from './model.js';
4
3
  export const NO_ROOM_TYPES = Object.freeze({ types: Object.freeze({}) });
5
4
  export function roomTypesOf(schema, nameable = []) {
6
5
  if (schema === undefined)
7
6
  return NO_ROOM_TYPES;
8
- const verified = verify(schema);
9
- if (verified.verdict === 'refuse')
10
- throw new Error(`the Adapter's Room types refuse ${verified.rule}`);
11
- return Object.freeze({ ...verified.model, nameable });
7
+ return Object.freeze({ ...readTypes(schema), nameable });
12
8
  }
13
9
  const BUILT_IN = {
14
10
  kind: 'model',
15
11
  snapshot: { identity: 'built-in', version: '', schema: null, revision: null },
16
12
  };
17
13
  export function builtInModel(roomTypes) {
18
- return attachedModel(BUILT_IN, NO_MODEL, roomTypes).state;
14
+ return attachedModel(BUILT_IN, roomTypes);
19
15
  }
20
- const VERIFIED_SCHEMAS = 64;
21
- const verifications = new WeakMap();
22
- function schemaVerification(schema, roomTypes) {
23
- let held = verifications.get(roomTypes);
16
+ const READ_SCHEMAS = 64;
17
+ const read = new WeakMap();
18
+ function typesRead(schema, roomTypes) {
19
+ let held = read.get(roomTypes);
24
20
  if (held === undefined) {
25
21
  held = new Map();
26
- verifications.set(roomTypes, held);
22
+ read.set(roomTypes, held);
27
23
  }
28
24
  const known = held.get(schema);
29
25
  if (known !== undefined)
30
26
  return known;
31
- const verification = verify(schema, roomTypes);
32
- if (held.size >= VERIFIED_SCHEMAS)
27
+ const types = readTypes(schema, roomTypes);
28
+ if (held.size >= READ_SCHEMAS)
33
29
  held.delete(held.keys().next().value);
34
- held.set(schema, verification);
35
- return verification;
30
+ held.set(schema, types);
31
+ return types;
36
32
  }
37
- export function attachedModel(answer, previous, roomTypes) {
33
+ export function schemaTypes(schema, roomTypes) {
34
+ return (schema === null ? roomTypes : typesRead(schema, roomTypes)).types;
35
+ }
36
+ export function attachedModel(answer, roomTypes) {
38
37
  if (answer.kind === 'model-unavailable') {
39
- return { state: { status: 'unavailable', reason: answer.reason }, refused: null };
40
- }
41
- if (previous.status !== 'unavailable' &&
42
- sameModel(previous.snapshot, answer.snapshot) &&
43
- previous.snapshot.schema !== answer.snapshot.schema) {
44
- return {
45
- state: {
46
- status: 'unavailable',
47
- reason: 'invalid',
48
- schema: answer.snapshot.schema,
49
- revision: answer.snapshot.revision,
50
- },
51
- refused: null,
52
- };
53
- }
54
- const verified = answer.snapshot.schema === null
55
- ? { verdict: 'accept', model: roomTypes }
56
- : schemaVerification(answer.snapshot.schema, roomTypes);
57
- if (verified.verdict === 'refuse') {
58
- return {
59
- state: {
60
- status: 'unavailable',
61
- reason: 'invalid',
62
- schema: answer.snapshot.schema,
63
- revision: answer.snapshot.revision,
64
- },
65
- refused: {
66
- identity: answer.snapshot.identity,
67
- rule: verified.rule,
68
- ...(verified.location === undefined ? {} : { location: verified.location }),
69
- },
70
- };
38
+ return { status: 'unavailable', reason: answer.reason };
71
39
  }
72
40
  return {
73
- state: {
74
- status: 'current',
75
- snapshot: structuredClone(answer.snapshot),
76
- verifiedWith: MD_MODEL,
77
- types: verified.model.types,
78
- },
79
- refused: null,
41
+ status: 'current',
42
+ snapshot: structuredClone(answer.snapshot),
43
+ verifiedWith: MD_MODEL,
44
+ types: schemaTypes(answer.snapshot.schema, roomTypes),
80
45
  };
81
46
  }
@@ -1,18 +1,17 @@
1
1
  import type { ModelState } from './model.js';
2
- import type { Adapter, AdapterFailure, Authorization, DiscoveredRoom, HeldContent, RetryableRefusal, RoomModels } from './adapter.js';
2
+ import type { Adapter, TypedPath, AdapterFailure, Authorization, BootstrapPart, DiscoveredRoom, NotReady, RetryableRefusal, RoomModels } from './adapter.js';
3
3
  import type { Composition } from './collection.js';
4
4
  import type { InstallationStep } from './readiness.js';
5
5
  import { type Refreshing } from './refresh.js';
6
6
  import type { ReplicaRecord } from './replica.js';
7
7
  import type { StagedPage, TransferRecord } from './store.js';
8
- import type { View } from './tables.js';
9
- import { type Refused, type Unconfirmed } from './transfer.js';
8
+ import { type Unconfirmed } from './transfer.js';
10
9
  export type Bootstrapped = {
11
10
  kind: 'staged';
12
11
  record: ReplicaRecord;
13
12
  refreshed: boolean;
14
13
  };
15
- export type BootstrapOutcome = Bootstrapped | Refused | Unconfirmed | RetryableRefusal | AdapterFailure;
14
+ export type BootstrapOutcome = Bootstrapped | Unconfirmed | NotReady | RetryableRefusal | AdapterFailure;
16
15
  export type HeldModels = {
17
16
  collection: ModelState;
18
17
  };
@@ -20,24 +19,26 @@ export type Remodel = (models: RoomModels | undefined, held: HeldModels) => Held
20
19
  export type Reads = Pick<Adapter, 'bootstrap' | 'refresh' | 'reached'>;
21
20
  export type Arriving = {
22
21
  at(bytes: number): void;
23
- part(): void;
24
22
  end(): void;
25
23
  };
24
+ export type Resumed = {
25
+ readonly record: TransferRecord | null;
26
+ readonly staged: ReadonlySet<string>;
27
+ };
26
28
  export type Staging = {
27
29
  held(locator: string): TransferRecord | null;
28
30
  turn(locator: string, step: InstallationStep): Promise<() => void>;
29
31
  unqueued(): Promise<void>;
30
- queued(bytes: number): () => void;
32
+ queued(text: number): () => void;
31
33
  arriving(locator: string): Arriving;
32
- announced(locator: string): readonly string[];
34
+ readonly streamed: boolean;
33
35
  stage(record: TransferRecord, page: StagedPage, composition: Composition): Promise<TransferRecord | null>;
36
+ resume(record: TransferRecord, parts: readonly BootstrapPart[], composition: Composition): Promise<Resumed | null>;
34
37
  derive(locator: string, key: number, composition: Composition): Promise<boolean>;
35
38
  refreshing(locator: string, key: number, composition: Composition): Promise<Refreshing>;
36
39
  abandon(locator: string): Promise<void>;
37
40
  setAside(locator: string): Promise<void>;
38
41
  release(key: number): Promise<void>;
39
- content(key: number): HeldContent;
40
- validate(record: ReplicaRecord, view: View): Promise<Refused | null>;
41
42
  };
42
- export declare function bootstrapRoom(adapter: Reads, authorization: Authorization, room: DiscoveredRoom, held: HeldModels, builtIn: ModelState, remodel: Remodel, continuing: () => boolean, staging: Staging, reuse: HeldContent | null): Promise<BootstrapOutcome>;
43
+ export declare function bootstrapRoom(adapter: Reads, authorization: Authorization, room: DiscoveredRoom, held: HeldModels, builtIn: ModelState, typedPaths: readonly TypedPath[], remodel: Remodel, continuing: () => boolean, staging: Staging): Promise<BootstrapOutcome>;
43
44
  //# sourceMappingURL=bootstrap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,aAAa,EAGb,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,UAAU,EACX,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAA4B,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAa,IAAI,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAe,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAEzF,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,OAAO,GACP,WAAW,GACX,gBAAgB,GAChB,cAAc,CAAC;AAEnB,MAAM,MAAM,UAAU,GAAG;IAAE,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC;AAEpD,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,KAAK,UAAU,CAAC;AAEvF,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;AAEvE,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,IAAI,IAAI,CAAC;IACb,GAAG,IAAI,IAAI,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IACnE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;IACpC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAC9C,KAAK,CACH,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAClC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjF,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACxF,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;CACtE,CAAC;AAoCF,wBAAsB,aAAa,CACjC,OAAO,EAAE,KAAK,EACd,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,OAAO,EACzB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,GAAG,IAAI,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAe3B"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
package/dist/bootstrap.js CHANGED
@@ -1,47 +1,32 @@
1
1
  import { transferIdentity } from './identity.js';
2
2
  import { advancement, pageEntries } from './refresh.js';
3
+ import { entriesIn } from './shared.js';
3
4
  import { unconfirmed } from './transfer.js';
4
5
  const NOTHING_PRIOR = () => Promise.resolve(new Map());
5
- async function pageOf(page) {
6
+ const PARTS_IN_FLIGHT = 6;
7
+ function textOf(page) {
8
+ let text = 0;
9
+ for (const [, content] of entriesIn(page.documents))
10
+ text += content.length;
11
+ return text;
12
+ }
13
+ async function pageOf(page, part) {
6
14
  return {
7
15
  entries: await pageEntries(page, [], page.roomVersion, NOTHING_PRIOR),
8
16
  folders: page.folders ?? [],
17
+ ...(part === undefined ? {} : { part }),
9
18
  };
10
19
  }
11
- function heldTogether(first, second) {
12
- if (first === null)
13
- return second;
14
- return {
15
- async files(after, limit) {
16
- const [left, right] = await Promise.all([
17
- first.files(after, limit),
18
- second.files(after, limit),
19
- ]);
20
- const merged = new Map([...left, ...right].map((file) => [file.path, file]));
21
- return [...merged.values()]
22
- .sort((one, other) => (one.path < other.path ? -1 : one.path > other.path ? 1 : 0))
23
- .slice(0, limit);
24
- },
25
- async contents(paths) {
26
- const [left, right] = await Promise.all([first.contents(paths), second.contents(paths)]);
27
- return new Map([...left, ...right]);
28
- },
29
- };
30
- }
31
- const NO_CONTENT = {
32
- files: () => Promise.resolve([]),
33
- contents: () => Promise.resolve(new Map()),
34
- };
35
- export async function bootstrapRoom(adapter, authorization, room, held, builtIn, remodel, continuing, staging, reuse) {
20
+ export async function bootstrapRoom(adapter, authorization, room, held, builtIn, typedPaths, remodel, continuing, staging) {
36
21
  if (staging.held(room.locator) !== null)
37
22
  await staging.abandon(room.locator);
38
- const begun = (pool) => started(adapter, authorization, room, held, builtIn, remodel, continuing, staging, pool);
39
- const first = await begun(reuse);
23
+ const begun = () => started(adapter, authorization, room, held, builtIn, typedPaths, remodel, continuing, staging);
24
+ const first = await begun();
40
25
  if (first.kind !== 'expired')
41
26
  return first;
42
27
  await staging.setAside(room.locator);
43
28
  try {
44
- const replacement = await begun(heldTogether(reuse, first.held));
29
+ const replacement = await begun();
45
30
  if (replacement.kind !== 'expired')
46
31
  return replacement;
47
32
  await staging.abandon(room.locator);
@@ -58,29 +43,34 @@ function dropped(ahead) {
58
43
  dropped(next);
59
44
  }, () => { });
60
45
  }
61
- function compositionFor(room, models, builtIn) {
46
+ function compositionFor(room, models, builtIn, typedPaths) {
62
47
  return {
63
48
  model: models.collection,
64
49
  selection: room.typedSelection === undefined
65
50
  ? null
66
51
  : { roots: room.typedSelection.roots, model: builtIn },
52
+ typedPaths,
67
53
  };
68
54
  }
69
- async function started(adapter, authorization, room, held, builtIn, remodel, continuing, staging, pool) {
55
+ async function started(adapter, authorization, room, held, builtIn, typedPaths, remodel, continuing, staging) {
56
+ const mode = { paged: false };
70
57
  let outcome;
71
58
  try {
72
- outcome = await bundle(adapter, authorization, room, held, builtIn, remodel, continuing, staging, pool);
59
+ outcome = await bundle(adapter, authorization, room, held, builtIn, typedPaths, remodel, continuing, staging, mode);
73
60
  }
74
61
  catch (error) {
75
- await staging.abandon(room.locator).catch(() => { });
62
+ await stopped(staging, room.locator, mode).catch(() => { });
76
63
  throw error;
77
64
  }
78
65
  if (outcome.kind !== 'staged' && outcome.kind !== 'expired') {
79
- await staging.abandon(room.locator);
66
+ await stopped(staging, room.locator, mode);
80
67
  }
81
68
  return outcome;
82
69
  }
83
- async function bundle(adapter, authorization, room, held, builtIn, remodel, continuing, staging, pool) {
70
+ function stopped(staging, locator, mode) {
71
+ return mode.paged ? staging.abandon(locator) : staging.setAside(locator);
72
+ }
73
+ async function bundle(adapter, authorization, room, held, builtIn, typedPaths, remodel, continuing, staging, mode) {
84
74
  const locator = room.locator;
85
75
  const selection = room.replica.selection;
86
76
  const ending = new AbortController();
@@ -93,7 +83,6 @@ async function bundle(adapter, authorization, room, held, builtIn, remodel, cont
93
83
  ...(token === null
94
84
  ? { arriving: (bytes) => arriving.at(bytes) }
95
85
  : { pageToken: token }),
96
- ...(pool === null ? {} : { held: pool }),
97
86
  });
98
87
  const fetching = (token) => {
99
88
  const fetched = (async () => {
@@ -101,10 +90,9 @@ async function bundle(adapter, authorization, room, held, builtIn, remodel, cont
101
90
  const page = continuing() ? await asking(token) : unconfirmed;
102
91
  if (page.kind !== 'bootstrap')
103
92
  return { page, next: null, written: () => { } };
104
- const written = staging.queued(page.bytes ?? 0);
105
- arriving.part();
93
+ const written = staging.queued(textOf(page));
106
94
  const later = page.pageToken;
107
- if (later === undefined) {
95
+ if (later === undefined && page.parts === undefined) {
108
96
  downloaded();
109
97
  arriving.end();
110
98
  }
@@ -125,12 +113,19 @@ async function bundle(adapter, authorization, room, held, builtIn, remodel, cont
125
113
  if (!continuing())
126
114
  return unconfirmed;
127
115
  const page = fetched.page;
128
- if (page.kind === 'beyond-horizon') {
129
- const key = transfer?.key ?? null;
130
- return { kind: 'expired', held: key === null ? NO_CONTENT : staging.content(key), key };
131
- }
116
+ if (page.kind === 'beyond-horizon')
117
+ return { kind: 'expired', key: transfer?.key ?? null };
132
118
  if (page.kind !== 'bootstrap')
133
119
  return page;
120
+ if (transfer === null && page.parts !== undefined) {
121
+ const parted = await parts(page, page.parts);
122
+ if (parted.kind !== 'parted')
123
+ return parted;
124
+ transfer = parted.transfer;
125
+ continue;
126
+ }
127
+ if (transfer === null)
128
+ mode.paged = true;
134
129
  const models = remodel(page.models, transfer?.models ?? held);
135
130
  const staged = await staging.stage({
136
131
  locator,
@@ -142,13 +137,10 @@ async function bundle(adapter, authorization, room, held, builtIn, remodel, cont
142
137
  last: transfer !== null && !adapter.reached(locator, page.roomVersion, transfer.last)
143
138
  ? transfer.last
144
139
  : page.roomVersion,
145
- done: {
146
- parts: (transfer?.done.parts ?? 0) + 1,
147
- bytes: (transfer?.done.bytes ?? 0) + (page.bytes ?? 0),
148
- },
140
+ done: { bytes: (transfer?.done.bytes ?? 0) + (page.bytes ?? 0) },
149
141
  models,
150
142
  key: transfer?.key ?? null,
151
- }, await pageOf(page), compositionFor(room, models, builtIn));
143
+ }, await pageOf(page), compositionFor(room, models, builtIn, typedPaths));
152
144
  if (staged === null)
153
145
  return unconfirmed;
154
146
  transfer = staged;
@@ -166,40 +158,184 @@ async function bundle(adapter, authorization, room, held, builtIn, remodel, cont
166
158
  }
167
159
  if (transfer === null)
168
160
  return unconfirmed;
169
- const installed = transfer;
170
- const composition = compositionFor(room, installed.models, builtIn);
171
- if (!(await staging.derive(locator, installed.key, composition)))
172
- return unconfirmed;
173
- await staging.turn(locator, 'replaying');
174
- if (!continuing())
175
- return unconfirmed;
176
- const record = {
177
- locator,
178
- name: room.name,
179
- handle: room.handle,
180
- operations: room.operations,
181
- replica: room.replica,
182
- model: installed.models.collection,
183
- typedSelection: room.typedSelection ?? null,
184
- providerOwnedPaths: room.providerOwnedPaths,
185
- roomVersion: installed.from,
186
- transfer: installed.transfer,
187
- inventory: installed.done,
188
- key: installed.key,
189
- };
190
- const due = [room.roomVersion, ...staging.announced(locator)];
191
- const last = installed.last;
192
- const reconciled = last === installed.from && due.every((version) => adapter.reached(locator, last, version))
193
- ? { kind: 'still-current' }
194
- : await advancement(adapter, authorization, record, remodel, continuing, await staging.refreshing(locator, record.key, composition));
195
- if (reconciled.kind === 'advanced' || reconciled.kind === 'still-current') {
196
- const refreshed = reconciled.kind === 'advanced';
197
- const result = refreshed ? reconciled.record : record;
198
- const refused = await staging.validate(result, refreshed ? 'refreshed' : 'confirmed');
199
- return refused ?? { kind: 'staged', record: result, refreshed };
161
+ return installed(transfer);
162
+ async function parts(head, listed) {
163
+ const models = remodel(head.models, held);
164
+ const composition = compositionFor(room, models, builtIn, typedPaths);
165
+ const resumed = await staging.resume({
166
+ locator,
167
+ transfer: transferIdentity(),
168
+ selection,
169
+ from: head.roomVersion,
170
+ last: head.roomVersion,
171
+ done: { bytes: 0 },
172
+ models,
173
+ key: null,
174
+ }, listed, composition);
175
+ if (resumed === null)
176
+ return unconfirmed;
177
+ let staged = resumed.record ?? {
178
+ locator,
179
+ transfer: transferIdentity(),
180
+ selection,
181
+ from: head.roomVersion,
182
+ last: head.roomVersion,
183
+ done: { bytes: 0 },
184
+ models,
185
+ key: null,
186
+ };
187
+ const wanted = listed.filter((part) => !resumed.staged.has(part.id));
188
+ let arrived = staged.done.bytes;
189
+ const partial = new Map();
190
+ const report = () => {
191
+ let bytes = arrived;
192
+ for (const held of partial.values())
193
+ bytes += held;
194
+ arriving.at(bytes);
195
+ };
196
+ report();
197
+ const arrivals = [];
198
+ let woken = null;
199
+ let next = 0;
200
+ let flying = 0;
201
+ let halted = false;
202
+ let stopped = false;
203
+ let admitted = Promise.resolve();
204
+ const fetched = () => {
205
+ if ((next < wanted.length && !halted) || flying > 0)
206
+ return;
207
+ downloaded();
208
+ arriving.end();
209
+ };
210
+ const landed = (one) => {
211
+ flying -= 1;
212
+ if (stopped)
213
+ one.written();
214
+ else
215
+ arrivals.push(one);
216
+ woken?.();
217
+ ask();
218
+ fetched();
219
+ };
220
+ const fetch = async (part) => {
221
+ let written = () => { };
222
+ const admission = admitted.then(async () => {
223
+ await staging.unqueued();
224
+ written = staging.queued(part.bytes);
225
+ });
226
+ admitted = admission;
227
+ await admission;
228
+ const page = continuing()
229
+ ? await adapter.bootstrap(authorization, {
230
+ locator,
231
+ selection,
232
+ signal: ending.signal,
233
+ pageToken: part.id,
234
+ arriving: (bytes) => {
235
+ partial.set(part.id, Math.min(bytes, part.bytes));
236
+ report();
237
+ },
238
+ })
239
+ : unconfirmed;
240
+ landed({ part, page, written });
241
+ };
242
+ const ask = () => {
243
+ while (!stopped && !halted && flying < PARTS_IN_FLIGHT && next < wanted.length) {
244
+ const part = wanted[next];
245
+ next += 1;
246
+ flying += 1;
247
+ fetch(part).catch((error) => landed({ part, page: unconfirmed, written: () => { }, error }));
248
+ }
249
+ };
250
+ let failed = null;
251
+ ask();
252
+ fetched();
253
+ try {
254
+ for (;;) {
255
+ while (arrivals.length === 0) {
256
+ if (flying === 0 && (halted || next >= wanted.length))
257
+ break;
258
+ await new Promise((wake) => (woken = wake));
259
+ woken = null;
260
+ }
261
+ const one = arrivals.shift();
262
+ if (one === undefined)
263
+ break;
264
+ const { part, page, written, error } = one;
265
+ try {
266
+ if (error !== undefined)
267
+ throw error;
268
+ if (!continuing())
269
+ return unconfirmed;
270
+ if (page.kind !== 'bootstrap') {
271
+ halted = true;
272
+ failed ??= page.kind === 'beyond-horizon' ? unconfirmed : page;
273
+ continue;
274
+ }
275
+ partial.delete(part.id);
276
+ arrived += part.bytes;
277
+ report();
278
+ const kept = await staging.stage({ ...staged, done: { bytes: staged.done.bytes + part.bytes } }, await pageOf({ ...page, roomVersion: head.roomVersion }, part.id), composition);
279
+ if (kept === null)
280
+ return unconfirmed;
281
+ staged = kept;
282
+ }
283
+ finally {
284
+ written();
285
+ }
286
+ }
287
+ }
288
+ finally {
289
+ stopped = true;
290
+ for (const one of arrivals.splice(0))
291
+ one.written();
292
+ }
293
+ if (failed !== null)
294
+ return failed;
295
+ if (staged.key === null) {
296
+ const empty = await staging.stage(staged, { entries: [], folders: [] }, composition);
297
+ if (empty === null)
298
+ return unconfirmed;
299
+ staged = empty;
300
+ }
301
+ return { kind: 'parted', transfer: staged };
200
302
  }
201
- if (reconciled.kind === 'beyond-horizon') {
202
- return { kind: 'expired', held: staging.content(record.key), key: record.key };
303
+ async function installed(transfer) {
304
+ const composition = compositionFor(room, transfer.models, builtIn, typedPaths);
305
+ if (!(await staging.derive(locator, transfer.key, composition)))
306
+ return unconfirmed;
307
+ await staging.turn(locator, 'replaying');
308
+ if (!continuing())
309
+ return unconfirmed;
310
+ const record = {
311
+ locator,
312
+ name: room.name,
313
+ handle: room.handle,
314
+ operations: room.operations,
315
+ replica: room.replica,
316
+ model: transfer.models.collection,
317
+ typedSelection: room.typedSelection ?? null,
318
+ providerOwnedPaths: room.providerOwnedPaths,
319
+ roomVersion: transfer.from,
320
+ transfer: transfer.transfer,
321
+ inventory: transfer.done,
322
+ key: transfer.key,
323
+ };
324
+ const last = transfer.last;
325
+ const refresh = adapter.refresh;
326
+ const reconciled = last === transfer.from &&
327
+ (staging.streamed || adapter.reached(locator, last, room.roomVersion))
328
+ ? { kind: 'still-current' }
329
+ : refresh === undefined
330
+ ? unconfirmed
331
+ : await advancement(refresh, authorization, record, remodel, continuing, await staging.refreshing(locator, record.key, composition));
332
+ if (reconciled.kind === 'advanced') {
333
+ return { kind: 'staged', record: reconciled.record, refreshed: true };
334
+ }
335
+ if (reconciled.kind === 'still-current')
336
+ return { kind: 'staged', record, refreshed: false };
337
+ if (reconciled.kind === 'beyond-horizon')
338
+ return { kind: 'expired', key: record.key };
339
+ return reconciled;
203
340
  }
204
- return reconciled;
205
341
  }
package/dist/cell.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export type Cell<T> = {
2
+ now(): T;
3
+ set(change: Partial<T>): void;
4
+ };
5
+ export declare function createCell<T extends object>(first: T): Cell<T>;
6
+ //# sourceMappingURL=cell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cell.d.ts","sourceRoot":"","sources":["../src/cell.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI;IACpB,GAAG,IAAI,CAAC,CAAC;IACT,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAQ9D"}
package/dist/cell.js ADDED
@@ -0,0 +1,9 @@
1
+ export function createCell(first) {
2
+ let held = first;
3
+ return {
4
+ now: () => held,
5
+ set(change) {
6
+ held = { ...held, ...change };
7
+ },
8
+ };
9
+ }
package/dist/chain.d.ts CHANGED
@@ -1,5 +1,6 @@
1
+ import type { DocumentQuery, GroupQuery } from '@agentshouse/mdmodel';
1
2
  import type { MdRuntimeClient } from './client.js';
2
- import type { DocumentQuery, DocumentResult, GroupQuery, GroupResult, PendingResult } from './query.js';
3
+ import type { DocumentResult, GroupResult, PendingResult } from './query.js';
3
4
  type Rows = DocumentResult | GroupResult;
4
5
  export type WindowAnswer = Rows | PendingResult;
5
6
  export type WindowChain = {
@@ -1 +1 @@
1
- {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACV,WAAW,EACX,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,KAAK,IAAI,GAAG,cAAc,GAAG,WAAW,CAAC;AAEzC,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,aAAa,CAAC;AAEhD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAcF,wBAAgB,cAAc,CAC5B,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,aAAa,GAAG,UAAU,EACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,GAC7E,WAAW,CAsEb"}
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE7E,KAAK,IAAI,GAAG,cAAc,GAAG,WAAW,CAAC;AAEzC,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,aAAa,CAAC;AAEhD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAaF,wBAAgB,cAAc,CAC5B,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,aAAa,GAAG,UAAU,EACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,GAC7E,WAAW,CAkEb"}
package/dist/chain.js CHANGED
@@ -7,7 +7,7 @@ export function chainedWindows(runtime, query, count, publish) {
7
7
  let closed = false;
8
8
  const observe = runtime.observe;
9
9
  const open = (after, shown) => {
10
- const link = { after, observation: null, value: shown, fresh: false, failed: false };
10
+ const link = { after, observation: null, value: shown, fresh: false };
11
11
  void observe('query', after === undefined ? query : { ...query, after }).then((observation) => {
12
12
  if (closed || !links.includes(link)) {
13
13
  observation.close();
@@ -21,9 +21,7 @@ export function chainedWindows(runtime, query, count, publish) {
21
21
  };
22
22
  observation.subscribe(take);
23
23
  take(observation.current());
24
- }, () => {
25
- link.failed = true;
26
- });
24
+ }, () => { });
27
25
  return link;
28
26
  };
29
27
  const settle = () => {
@@ -41,9 +39,7 @@ export function chainedWindows(runtime, query, count, publish) {
41
39
  }
42
40
  const after = before === undefined ? undefined : before.value.next;
43
41
  const held = links[at];
44
- next.push(held !== undefined && held.after === after && !held.failed
45
- ? held
46
- : open(after, held?.value ?? null));
42
+ next.push(held !== undefined && held.after === after ? held : open(after, held?.value ?? null));
47
43
  }
48
44
  for (const link of links)
49
45
  if (!next.includes(link))
package/dist/change.d.ts CHANGED
@@ -50,6 +50,7 @@ type Arriving = {
50
50
  readonly path: string;
51
51
  readonly revision?: string;
52
52
  readonly fileId?: string;
53
+ readonly created?: string;
53
54
  readonly change?: HeadChange;
54
55
  };
55
56
  export type RoomMove = {
@@ -1 +1 @@
1
- {"version":3,"file":"change.d.ts","sourceRoot":"","sources":["../src/change.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"change.d.ts","sourceRoot":"","sources":["../src/change.ts"],"names":[],"mappings":"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"}