@earendil-works/chord 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/README.md +79 -195
  3. package/dist/cell.d.ts +122 -0
  4. package/dist/cell.d.ts.map +1 -0
  5. package/dist/cell.js +356 -0
  6. package/dist/cell.js.map +1 -0
  7. package/dist/cluster.d.ts +27 -0
  8. package/dist/cluster.d.ts.map +1 -0
  9. package/dist/cluster.js +230 -0
  10. package/dist/cluster.js.map +1 -0
  11. package/dist/connection.d.ts +270 -0
  12. package/dist/connection.d.ts.map +1 -0
  13. package/dist/connection.js +1216 -0
  14. package/dist/connection.js.map +1 -0
  15. package/dist/context/index.d.ts +12 -1
  16. package/dist/context/index.d.ts.map +1 -1
  17. package/dist/context/index.js.map +1 -1
  18. package/dist/contract.d.ts +208 -0
  19. package/dist/contract.d.ts.map +1 -0
  20. package/dist/contract.js +246 -0
  21. package/dist/contract.js.map +1 -0
  22. package/dist/declare.d.ts +33 -0
  23. package/dist/declare.d.ts.map +1 -0
  24. package/dist/declare.js +2 -0
  25. package/dist/declare.js.map +1 -0
  26. package/dist/delta/apply-immutable-trusted.js.map +1 -1
  27. package/dist/delta/diff.d.ts +1 -1
  28. package/dist/delta/diff.d.ts.map +1 -1
  29. package/dist/delta/diff.js.map +1 -1
  30. package/dist/delta/index.d.ts +4 -3
  31. package/dist/delta/index.d.ts.map +1 -1
  32. package/dist/delta/index.js +45 -0
  33. package/dist/delta/index.js.map +1 -1
  34. package/dist/delta/revision-validator.d.ts +1 -1
  35. package/dist/delta/revision-validator.d.ts.map +1 -1
  36. package/dist/delta/revision-validator.js.map +1 -1
  37. package/dist/delta/tracker.d.ts +1 -1
  38. package/dist/delta/tracker.d.ts.map +1 -1
  39. package/dist/delta/tracker.js +40 -4
  40. package/dist/delta/tracker.js.map +1 -1
  41. package/dist/errors.d.ts +28 -0
  42. package/dist/errors.d.ts.map +1 -0
  43. package/dist/errors.js +59 -0
  44. package/dist/errors.js.map +1 -0
  45. package/dist/host.d.ts +348 -0
  46. package/dist/host.d.ts.map +1 -0
  47. package/dist/host.js +1000 -0
  48. package/dist/host.js.map +1 -0
  49. package/dist/index.d.ts +17 -10
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +8 -8
  52. package/dist/index.js.map +1 -1
  53. package/dist/json.d.ts +9 -1
  54. package/dist/json.d.ts.map +1 -1
  55. package/dist/json.js.map +1 -1
  56. package/dist/link.d.ts +107 -0
  57. package/dist/link.d.ts.map +1 -0
  58. package/dist/link.js +355 -0
  59. package/dist/link.js.map +1 -0
  60. package/dist/loader.d.ts +4 -0
  61. package/dist/loader.d.ts.map +1 -0
  62. package/dist/loader.js +73 -0
  63. package/dist/loader.js.map +1 -0
  64. package/dist/manager.d.ts +115 -0
  65. package/dist/manager.d.ts.map +1 -0
  66. package/dist/manager.js +345 -0
  67. package/dist/manager.js.map +1 -0
  68. package/dist/node.d.ts +3 -4
  69. package/dist/node.d.ts.map +1 -1
  70. package/dist/node.js +3 -2
  71. package/dist/node.js.map +1 -1
  72. package/dist/object.d.ts +438 -0
  73. package/dist/object.d.ts.map +1 -0
  74. package/dist/object.js +1571 -0
  75. package/dist/object.js.map +1 -0
  76. package/dist/output.d.ts +85 -0
  77. package/dist/output.d.ts.map +1 -0
  78. package/dist/output.js +350 -0
  79. package/dist/output.js.map +1 -0
  80. package/dist/publish.d.ts +5 -0
  81. package/dist/publish.d.ts.map +1 -0
  82. package/dist/publish.js +40 -0
  83. package/dist/publish.js.map +1 -0
  84. package/dist/registry.d.ts +25 -0
  85. package/dist/registry.d.ts.map +1 -0
  86. package/dist/registry.js +6 -0
  87. package/dist/registry.js.map +1 -0
  88. package/dist/reload.d.ts +126 -0
  89. package/dist/reload.d.ts.map +1 -0
  90. package/dist/reload.js +653 -0
  91. package/dist/reload.js.map +1 -0
  92. package/dist/remote.d.ts +165 -0
  93. package/dist/remote.d.ts.map +1 -0
  94. package/dist/remote.js +612 -0
  95. package/dist/remote.js.map +1 -0
  96. package/dist/schema.d.ts +21 -0
  97. package/dist/schema.d.ts.map +1 -0
  98. package/dist/schema.js +228 -0
  99. package/dist/schema.js.map +1 -0
  100. package/dist/state.d.ts +92 -0
  101. package/dist/state.d.ts.map +1 -0
  102. package/dist/{services/state.js → state.js} +28 -138
  103. package/dist/state.js.map +1 -0
  104. package/dist/types.d.ts +69 -258
  105. package/dist/types.d.ts.map +1 -1
  106. package/dist/types.js.map +1 -1
  107. package/dist/websocket.d.ts +15 -0
  108. package/dist/websocket.d.ts.map +1 -0
  109. package/dist/websocket.js +16 -0
  110. package/dist/websocket.js.map +1 -0
  111. package/dist/wire.d.ts +216 -0
  112. package/dist/wire.d.ts.map +1 -0
  113. package/dist/wire.js +165 -0
  114. package/dist/wire.js.map +1 -0
  115. package/docs/guide.md +814 -0
  116. package/docs/spec.md +288 -0
  117. package/docs/tutorial.md +931 -0
  118. package/package.json +14 -10
  119. package/src/delta/README.md +5 -3
  120. package/dist/api.d.ts +0 -20
  121. package/dist/api.d.ts.map +0 -1
  122. package/dist/api.js +0 -77
  123. package/dist/api.js.map +0 -1
  124. package/dist/bundler.d.ts +0 -6
  125. package/dist/bundler.d.ts.map +0 -1
  126. package/dist/bundler.js +0 -3
  127. package/dist/bundler.js.map +0 -1
  128. package/dist/facets/host.d.ts +0 -12
  129. package/dist/facets/host.d.ts.map +0 -1
  130. package/dist/facets/host.js +0 -763
  131. package/dist/facets/host.js.map +0 -1
  132. package/dist/facets/loader.d.ts +0 -3
  133. package/dist/facets/loader.d.ts.map +0 -1
  134. package/dist/facets/loader.js +0 -5
  135. package/dist/facets/loader.js.map +0 -1
  136. package/dist/node/bundle-loader.d.ts +0 -30
  137. package/dist/node/bundle-loader.d.ts.map +0 -1
  138. package/dist/node/bundle-loader.js +0 -377
  139. package/dist/node/bundle-loader.js.map +0 -1
  140. package/dist/node/bundle.d.ts +0 -26
  141. package/dist/node/bundle.d.ts.map +0 -1
  142. package/dist/node/bundle.js +0 -183
  143. package/dist/node/bundle.js.map +0 -1
  144. package/dist/node/manifest.d.ts +0 -36
  145. package/dist/node/manifest.d.ts.map +0 -1
  146. package/dist/node/manifest.js +0 -6
  147. package/dist/node/manifest.js.map +0 -1
  148. package/dist/node/package.d.ts +0 -15
  149. package/dist/node/package.d.ts.map +0 -1
  150. package/dist/node/package.js +0 -199
  151. package/dist/node/package.js.map +0 -1
  152. package/dist/services/consumer.d.ts +0 -11
  153. package/dist/services/consumer.d.ts.map +0 -1
  154. package/dist/services/consumer.js +0 -585
  155. package/dist/services/consumer.js.map +0 -1
  156. package/dist/services/errors.d.ts +0 -8
  157. package/dist/services/errors.d.ts.map +0 -1
  158. package/dist/services/errors.js +0 -22
  159. package/dist/services/errors.js.map +0 -1
  160. package/dist/services/handle.d.ts +0 -15
  161. package/dist/services/handle.d.ts.map +0 -1
  162. package/dist/services/handle.js +0 -101
  163. package/dist/services/handle.js.map +0 -1
  164. package/dist/services/instances.d.ts +0 -26
  165. package/dist/services/instances.d.ts.map +0 -1
  166. package/dist/services/instances.js +0 -140
  167. package/dist/services/instances.js.map +0 -1
  168. package/dist/services/loopback.d.ts +0 -5
  169. package/dist/services/loopback.d.ts.map +0 -1
  170. package/dist/services/loopback.js +0 -15
  171. package/dist/services/loopback.js.map +0 -1
  172. package/dist/services/provider.d.ts +0 -37
  173. package/dist/services/provider.d.ts.map +0 -1
  174. package/dist/services/provider.js +0 -521
  175. package/dist/services/provider.js.map +0 -1
  176. package/dist/services/state-codec.d.ts +0 -15
  177. package/dist/services/state-codec.d.ts.map +0 -1
  178. package/dist/services/state-codec.js +0 -133
  179. package/dist/services/state-codec.js.map +0 -1
  180. package/dist/services/state-internals.d.ts +0 -13
  181. package/dist/services/state-internals.d.ts.map +0 -1
  182. package/dist/services/state-internals.js +0 -10
  183. package/dist/services/state-internals.js.map +0 -1
  184. package/dist/services/state.d.ts +0 -28
  185. package/dist/services/state.d.ts.map +0 -1
  186. package/dist/services/state.js.map +0 -1
  187. package/dist/services/wire.d.ts +0 -63
  188. package/dist/services/wire.d.ts.map +0 -1
  189. package/dist/services/wire.js +0 -186
  190. package/dist/services/wire.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reload.js","sourceRoot":"","sources":["../src/reload.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Cell } from \"./cell.ts\";\nimport { type AnyContract, bind, coverage } from \"./contract.ts\";\nimport { asChordError, ChordError, invalid, isChordError } from \"./errors.ts\";\nimport type { CodeVersionState, Facet, HostImpl, PluginRef, Serve } from \"./host.ts\";\nimport {\n\ttype Factory,\n\thostLifetime,\n\tmakeService,\n\tmemberSchemas,\n\ttype ObjectImpl,\n\tRefImpl,\n\ttype ResourceImpl,\n\ttype Run,\n\ttype ServeOptions,\n\ttype Service,\n\ttype StagedListeners,\n} from \"./object.ts\";\nimport { holdPublications } from \"./publish.ts\";\nimport type { RegistryTable } from \"./registry.ts\";\nimport { assertValid, deepEqual } from \"./schema.ts\";\nimport type { Readable } from \"./types.ts\";\n\nexport interface ReloadOptions {\n\t/** Facet names to remove. */\n\treadonly remove?: readonly string[];\n\t/** Milliseconds the gate waits for grandfathered roots (default 5000). Missed: the reload aborts. */\n\treadonly gateDeadline?: number;\n\t/** Milliseconds to wait for the previous code version to retire first (default 5000). Missed: it is retired anyway. */\n\treadonly retireDeadline?: number;\n\t/** Server: facet modules for child hosts by host-name prefix (longest wins). Every connected host participates. */\n\treadonly remote?: Readonly<Record<string, readonly string[]>>;\n\t/** Server: facet names to remove on child hosts, by the same host-name prefix rules. */\n\treadonly remoteRemove?: Readonly<Record<string, readonly string[]>>;\n\t/** Server: milliseconds to wait for every child's vote (default: gate + retire deadlines + 5000). */\n\treadonly voteDeadline?: number;\n}\n\nexport interface ReloadReport {\n\treadonly codeVersion: number;\n\treadonly previous: number;\n\treadonly changed: readonly string[];\n\treadonly removed: readonly string[];\n\t/** Addresses of objects whose new factory was installed. */\n\treadonly prepared: readonly string[];\n\t/** Addresses of objects that went through the gate. */\n\treadonly gated: readonly string[];\n\t/**\n\t * Cluster reloads: what each participating child host prepared, by host name (its vote; the child commits it after\n\t * the server). Absent for local reloads.\n\t */\n\treadonly children?: Readonly<Record<string, ReloadReport>>;\n}\n\ninterface Candidate {\n\treadonly object: ObjectImpl;\n\treadonly service: Service;\n\treadonly run: Run;\n\t/** Why the object needs the gate (empty: compatible). */\n\treadonly reasons: string[];\n\t/** New exclusive resources and their new dependents, opened at the gate. */\n\treadonly atGate: ResourceImpl[];\n\t/** Old exclusive resources closed at the gate. */\n\treadonly replaced: ResourceImpl[];\n\treadonly migrated: Map<Cell<unknown>, unknown>;\n\t/** Values of the run's derivations over the candidate (migrated) values, validated. */\n\tderived: Map<unknown, unknown>;\n\t/** Listener subscriptions made at the end of prepare, activated by the commit. */\n\tstaged: StagedListeners | undefined;\n}\n\n/**\n * Computes the new derivation functions over the candidate values and validates every prospective value (migrated\n * cells and derivations) against every schema that will apply after the commit: the cell's new schema and the new\n * implementation's remote state-member schemas. A failure fails prepare; the commit then installs without re-checking.\n */\nfunction dryRun(candidate: Candidate): void {\n\tconst { run, migrated, service, object } = candidate;\n\tconst exposed = memberSchemas(service, run.implementation);\n\tfor (const [cell, value] of migrated) {\n\t\tfor (const schema of exposed.get(cell) ?? [])\n\t\t\tassertValid(\"state\", `${object.address}: migrated state ${cell.key}`, schema, value);\n\t}\n\tconst values = new Map<unknown, unknown>(migrated);\n\tconst derives = [...run.decls.derives].sort(([, a], [, b]) => a.seq - b.seq);\n\tfor (const [name, derived] of derives) {\n\t\tconst value = derived.compute((source) => (values.has(source) ? values.get(source) : candidateValue(source)));\n\t\tfor (const schema of exposed.get(derived) ?? [])\n\t\t\tassertValid(\"state\", `${object.address}: derivation ${name}`, schema, value);\n\t\tvalues.set(derived, value);\n\t}\n\tcandidate.derived = values;\n}\n\n/**\n * A source's value for a dry run. A reference to a provider this reload upgrades too reads nothing before the commit\n * (its new contract does not bind the old code): the dry run computes without it, the commit with the real value.\n */\nfunction candidateValue(source: Readable<unknown>): unknown {\n\ttry {\n\t\treturn source.value;\n\t} catch (error) {\n\t\tif (isChordError(error, \"not_ready\") || isChordError(error, \"not_in_variant\")) return undefined;\n\t\tthrow error;\n\t}\n}\n\n/** A reload error keeps the underlying code (`contract_mismatch`, `invalid`, ...) and says it aborted the reload. */\nexport function reloadError(error: unknown): ChordError {\n\tconst cause = asChordError(error, \"reload\");\n\tif (/^reload aborted/.test(cause.message.replace(/^[^:]*: /, \"\"))) return cause;\n\treturn new ChordError(cause.code, `reload aborted: ${cause.message}`, {\n\t\tcause,\n\t\treason: cause.reason,\n\t\tdetails: cause.details,\n\t});\n}\n\n/** Serialized: a second reload while one runs is rejected. */\nexport async function runReload(\n\thost: HostImpl,\n\tplugins: readonly PluginRef[],\n\toptions: ReloadOptions,\n): Promise<ReloadReport> {\n\tconst reload = await beginReload(host, plugins, options);\n\ttry {\n\t\tawait reload.prepare();\n\t\treturn reload.commit();\n\t} finally {\n\t\tendReload(host);\n\t}\n}\n\n/** Takes the host's reload slot and loads the plugin modules. Pair with `endReload`. */\nexport async function beginReload(\n\thost: HostImpl,\n\tplugins: readonly PluginRef[],\n\toptions: ReloadOptions,\n\tcodeVersion?: number,\n): Promise<Reload> {\n\tif (host.reloading) {\n\t\tthrow new ChordError(\"unavailable\", \"a reload is already running\", { reason: \"reload_running\" });\n\t}\n\thost.reloading = true;\n\ttry {\n\t\treturn new Reload(host, await host.resolve(plugins), options, codeVersion);\n\t} catch (error) {\n\t\thost.reloadEnded();\n\t\tthrow reloadError(error);\n\t}\n}\n\nexport function endReload(host: HostImpl): void {\n\thost.reloadEnded();\n}\n\n/** Most milliseconds a forced retirement waits for aborted roots to settle before it closes what they used. */\nconst ABORTED_ROOTS_GRACE = 1000;\n\n/** Resolves true once `ready()` holds (checked whenever retirement-relevant state changes), false after `ms`. */\nfunction until(host: HostImpl, ready: () => boolean, ms: number): Promise<boolean> {\n\tif (ready()) return Promise.resolve(true);\n\treturn new Promise<boolean>((resolve) => {\n\t\tconst timer = setTimeout(() => {\n\t\t\tstop();\n\t\t\tresolve(false);\n\t\t}, ms);\n\t\tconst stop = host.watchRetirement(() => {\n\t\t\tif (!ready()) return;\n\t\t\tclearTimeout(timer);\n\t\t\tstop();\n\t\t\tresolve(true);\n\t\t});\n\t});\n}\n\n/** One reload on one host: `prepare` (load, prepare, gate), then `commit` or `rollback`. */\nexport class Reload {\n\treadonly host: HostImpl;\n\treadonly facets: readonly Facet[];\n\treadonly options: ReloadOptions;\n\t/** Code version id to commit (issued by the coordinating server); a local reload allocates one. */\n\treadonly codeVersion: number | undefined;\n\treadonly candidates = new Map<ObjectImpl, Candidate>();\n\treadonly abort = new AbortController();\n\treadonly closed: [ObjectImpl, ResourceImpl][] = [];\n\tservices = new Map<string, Service>();\n\tchanged = new Set<string>();\n\tremoved = new Set<string>();\n\ttables = new Map<string, RegistryTable<unknown>>();\n\tgated: Candidate[] = [];\n\trolledBack = false;\n\t/** Objects of types this reload adds, with their staged listeners: their runtime starts at commit. */\n\treadonly deferred = new Map<ObjectImpl, StagedListeners>();\n\t/** This reload's run of each facet it loads (`FacetApi.signal`): installed at commit, aborted at rollback. */\n\treadonly facetRuns = new Map<string, AbortController>();\n\n\tconstructor(host: HostImpl, facets: readonly Facet[], options: ReloadOptions, codeVersion?: number) {\n\t\tthis.host = host;\n\t\tthis.facets = facets;\n\t\tthis.options = options;\n\t\tthis.codeVersion = codeVersion;\n\t}\n\n\t/** Everything up to the commit. On failure the host is rolled back and the underlying error is thrown. */\n\tasync prepare(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.waitForRetirement();\n\t\t\tthis.load();\n\t\t\tthis.checkProviders();\n\t\t\tawait this.prepareAll();\n\t\t\t// From here new objects of changed types are rejected (upgrade_conflict, retryable) until commit or abort,\n\t\t\t// so the candidate set is final once the activations already in flight have been prepared.\n\t\t\tthis.host.gating = this.changed;\n\t\t\tawait this.withDeadline(this.prepareAll(), \"activations in flight did not finish\");\n\t\t\tthis.checkRefs();\n\t\t\tthis.tables = this.host.buildTables(this.entries());\n\t\t\tawait this.gate();\n\t\t\tthis.#alive();\n\t\t\tthis.#stage();\n\t\t} catch (error) {\n\t\t\tawait this.rollback();\n\t\t\tthrow reloadError(error);\n\t\t}\n\t}\n\n\t/** What a successful prepare will commit (a child sends it with its vote). */\n\tsummary(): ReloadReport {\n\t\tconst live = [...this.candidates.values()].filter(({ object }) => object.status === \"live\");\n\t\treturn {\n\t\t\tcodeVersion: this.host.pending?.id ?? this.host.current.id,\n\t\t\tprevious: this.host.current.id,\n\t\t\tchanged: [...this.changed],\n\t\t\tremoved: [...this.removed],\n\t\t\tprepared: live.map(({ object }) => object.address),\n\t\t\tgated: this.gated.map(({ object }) => object.address),\n\t\t};\n\t}\n\n\t/** After every await of prepare: a rollback meanwhile (abort from the coordinator) ends it. */\n\t#alive(): void {\n\t\tif (this.rolledBack) throw new ChordError(\"aborted\", \"reload aborted while preparing\", { reason: \"aborted\" });\n\t}\n\n\t/**\n\t * Subscribes every new listener now, buffering its events, so a failing source fails prepare instead of leaving a\n\t * half-installed code version. Objects running only the new code (types this reload adds) are staged too.\n\t */\n\t#stage(): void {\n\t\tfor (const candidate of this.candidates.values()) {\n\t\t\tif (candidate.object.status === \"live\")\n\t\t\t\tcandidate.staged = candidate.object.stageListeners(candidate.run.decls);\n\t\t}\n\t\tfor (const object of this.host.objects.values()) {\n\t\t\tif (object.status === \"live\" && object.deferredRuntime)\n\t\t\t\tthis.deferred.set(object, object.stageListeners(object.decls));\n\t\t}\n\t}\n\n\t/**\n\t * Retires the previous code version before loading the next one (a host keeps two). Waits until its roots ended and,\n\t * on a child host, its parent retired it too (`retire` frame), at most `retireDeadline`. Past the deadline it is\n\t * retired anyway: its remaining roots are aborted first and get a short grace to stop, so they see cancellation\n\t * before the resources only that code version used are closed; their next call is `superseded`.\n\t */\n\tasync waitForRetirement(): Promise<void> {\n\t\tconst host = this.host;\n\t\tconst previous = host.previous;\n\t\tif (previous === undefined) return;\n\t\tconst deadline = this.options.retireDeadline ?? 5000;\n\t\tconst gone = (): boolean => host.previous !== previous;\n\t\tif (!(await until(host, () => gone() || host.retirable(), deadline)) && !gone()) {\n\t\t\tprevious.abort.abort(new ChordError(\"superseded\", `code version ${previous.id} was retired`));\n\t\t\tawait until(host, () => gone() || previous.roots.size === 0, Math.min(deadline, ABORTED_ROOTS_GRACE));\n\t\t}\n\t\tif (!gone()) host.retire();\n\t}\n\n\t/** Builds the candidate service table: unchanged services plus everything the given facets serve. */\n\tload(): void {\n\t\tconst replaced = new Set([...this.facets.map((facet) => facet.name), ...(this.options.remove ?? [])]);\n\t\tconst current = this.host.current.services;\n\t\tthis.services = new Map([...current].filter(([, service]) => !replaced.has(service.facet)));\n\t\tfor (const facet of this.facets) {\n\t\t\tconst run = new AbortController();\n\t\t\tthis.facetRuns.set(facet.name, run);\n\t\t\tfacet.setup(\n\t\t\t\tthis.host.facetApi(\n\t\t\t\t\t((type: AnyContract, factory: Factory<AnyContract>, options: ServeOptions = {}) =>\n\t\t\t\t\t\tthis.host.serveInto(this.services, makeService(type, factory, options, facet.name))) as Serve,\n\t\t\t\t\trun.signal,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tfor (const [name, service] of this.services) if (current.get(name) !== service) this.changed.add(name);\n\t\tfor (const name of current.keys()) if (!this.services.has(name)) this.removed.add(name);\n\t\tthis.host.pending = {\n\t\t\tid: this.host.nextCodeVersionId(this.codeVersion),\n\t\t\tservices: this.services,\n\t\t\ttables: new Map(),\n\t\t\troots: new Map(),\n\t\t\tabort: new AbortController(),\n\t\t};\n\t}\n\n\tasync withDeadline<T>(promise: Promise<T>, what: string): Promise<T> {\n\t\tconst deadline = this.options.gateDeadline ?? 5000;\n\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\t\tconst timeout = new Promise<never>((_, reject) => {\n\t\t\ttimer = setTimeout(\n\t\t\t\t() => reject(new ChordError(\"aborted\", `${what} within ${deadline} ms`, { reason: \"deadline\" })),\n\t\t\t\tdeadline,\n\t\t\t);\n\t\t});\n\t\ttry {\n\t\t\treturn await Promise.race([promise, timeout]);\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n\n\t/** Same contract version must cover the old description (forgotten bump); facets' `uses` must bind. */\n\tcheckProviders(): void {\n\t\tfor (const name of this.changed) {\n\t\t\tconst next = this.services.get(name)!.contract;\n\t\t\tconst old = this.host.current.services.get(name)?.contract;\n\t\t\tif (old === undefined || old.version !== next.version) continue;\n\t\t\tconst reason = coverage(next.description, old.description);\n\t\t\tif (reason !== undefined) {\n\t\t\t\tthrow new ChordError(\n\t\t\t\t\t\"contract_mismatch\",\n\t\t\t\t\t`${name}@${next.version} changed incompatibly without a version bump (${reason})`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconst facets = new Map(this.host.facets);\n\t\tfor (const facet of this.facets) facets.set(facet.name, facet);\n\t\tfor (const name of this.options.remove ?? []) facets.delete(name);\n\t\tfor (const facet of facets.values()) {\n\t\t\tfor (const token of facet.uses ?? []) {\n\t\t\t\tconst service = this.services.get(token.name);\n\t\t\t\tif (service !== undefined && this.changed.has(token.name))\n\t\t\t\t\tbind(service.contract, service.options.accepts, token);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Prepares every live object of a changed type, including objects that activate meanwhile, to a fixpoint. Objects\n\t * already running the new code (types this reload adds) are skipped.\n\t */\n\tasync prepareAll(): Promise<void> {\n\t\tfor (;;) {\n\t\t\tconst todo = [...this.host.objects.values()].filter(\n\t\t\t\t(object) =>\n\t\t\t\t\tthis.changed.has(object.typeName) &&\n\t\t\t\t\t!this.candidates.has(object) &&\n\t\t\t\t\tobject.service !== this.services.get(object.typeName) &&\n\t\t\t\t\t(object.status === \"live\" || object.status === \"activating\"),\n\t\t\t);\n\t\t\tif (todo.length === 0) return;\n\t\t\tawait Promise.allSettled(todo.map((object) => object.ready));\n\t\t\tthis.#alive();\n\t\t\tfor (const object of todo) {\n\t\t\t\tif (object.status === \"live\" && object.service !== this.services.get(object.typeName)) {\n\t\t\t\t\tawait this.prepareObject(object);\n\t\t\t\t\tthis.#alive();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Runs the new factory in recording mode and opens what can be opened without the gate. */\n\tasync prepareObject(object: ObjectImpl): Promise<void> {\n\t\tconst service = this.services.get(object.typeName)!;\n\t\tconst run = object.run(service, object.decls);\n\t\tconst candidate: Candidate = {\n\t\t\tobject,\n\t\t\tservice,\n\t\t\trun,\n\t\t\treasons: [],\n\t\t\tatGate: [],\n\t\t\treplaced: [],\n\t\t\tmigrated: new Map(),\n\t\t\tderived: new Map(),\n\t\t\tstaged: undefined,\n\t\t};\n\t\tthis.candidates.set(object, candidate);\n\t\t// Each cell carries its own version: a raised one gates and migrates, a schema change without one is refused.\n\t\tfor (const [name, cell] of run.decls.cells) {\n\t\t\tif (object.decls.cells.get(name) !== cell) continue;\n\t\t\tconst from = object.decls.cellVersions.get(name) ?? 1;\n\t\t\tconst to = run.decls.cellVersions.get(name) ?? 1;\n\t\t\tif (to < from)\n\t\t\t\tthrow invalid(\"state\", `${object.address}: version of state ${name} lowered from ${from} to ${to}`);\n\t\t\tif (to > from) candidate.reasons.push(`state ${name} version ${from} -> ${to}`);\n\t\t\telse if (!deepEqual(cell.schema, run.decls.cellSchemas.get(name)))\n\t\t\t\tthrow invalid(\"state\", `${object.address}: schema of state ${name} changed without a version bump`);\n\t\t}\n\t\tconst deferred = new Set<ResourceImpl>();\n\t\tfor (const resource of run.created.resources) {\n\t\t\tif (resource.exclusive || resource.deps.some((dep) => deferred.has(dep as ResourceImpl)))\n\t\t\t\tdeferred.add(resource);\n\t\t}\n\t\tfor (const resource of deferred) {\n\t\t\tcandidate.atGate.push(resource);\n\t\t\tconst old = object.decls.resources.get(resource.key);\n\t\t\tif (resource.exclusive && old?.exclusive && old.state === \"open\") candidate.replaced.push(old);\n\t\t}\n\t\tif (deferred.size > 0) candidate.reasons.push(\"exclusive resource replaced\");\n\t\tawait object.open(\n\t\t\trun.created.resources.filter((resource) => !deferred.has(resource)),\n\t\t\trun.created.refs,\n\t\t\tthis.abort.signal,\n\t\t);\n\t\tawait object.waitHydrated(run);\n\t\t// Cells this reload adds read their first value once the new resources are open (gated objects: at the gate);\n\t\t// the derivations over them are checked after.\n\t\tif (candidate.reasons.length === 0) {\n\t\t\tawait object.initCells(run, this.abort.signal);\n\t\t\tdryRun(candidate);\n\t\t}\n\t}\n\n\t/**\n\t * Every reference that survives into the new code version must bind to the new provider. Browser references don't block a\n\t * reload: after the commit they get `upgrade_required` instead.\n\t */\n\tcheckRefs(): void {\n\t\tconst dropped = new Set<unknown>();\n\t\tfor (const { object, run } of this.candidates.values()) {\n\t\t\tfor (const ref of object.decls.refs.values())\n\t\t\t\tif (![...run.decls.refs.values()].includes(ref)) dropped.add(ref);\n\t\t}\n\t\tfor (const object of this.host.objects.values()) {\n\t\t\tconst service = this.services.get(object.typeName);\n\t\t\tif (service === undefined || !this.changed.has(object.typeName)) continue;\n\t\t\tfor (const ref of object.refs) {\n\t\t\t\t// The host's bootstrap reference follows this provider at commit; it is not an old-code consumer.\n\t\t\t\tif (ref === this.host.hostObjects.get(object.typeName)) continue;\n\t\t\t\tif (!dropped.has(ref) && ref.owner !== \"client\")\n\t\t\t\t\tbind(service.contract, service.options.accepts, ref.contract);\n\t\t\t}\n\t\t}\n\t}\n\n\tentries(): [ObjectImpl, Run[\"decls\"]][] {\n\t\treturn this.host\n\t\t\t.liveDecls(true)\n\t\t\t.filter(([object]) => !this.removed.has(object.typeName))\n\t\t\t.map(([object, decls]) => [object, this.candidates.get(object)?.run.decls ?? decls]);\n\t}\n\n\t/**\n\t * Admission cut, wait for grandfathered roots (deadline), replace exclusive resources, migrate into private\n\t * copies. Old tasks of gated objects are stopped at the cut; listener events are queued until commit or abort.\n\t */\n\tasync gate(): Promise<void> {\n\t\tthis.gated = [...this.candidates.values()].filter(\n\t\t\t(candidate) => candidate.reasons.length > 0 && candidate.object.status === \"live\",\n\t\t);\n\t\tconst drained = this.gated.map(({ object }) => {\n\t\t\tconst grandfathered = new Set(object.leases.keys());\n\t\t\treturn new Promise<void>((resolve) => {\n\t\t\t\tobject.gate = { grandfathered, queue: [], drained: resolve };\n\t\t\t\tobject.stopTasks();\n\t\t\t\tif (grandfathered.size === 0) resolve();\n\t\t\t});\n\t\t});\n\t\tconst deadline = this.options.gateDeadline ?? 5000;\n\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\t\tconst timedOut = await Promise.race([\n\t\t\tPromise.all(drained).then(() => false),\n\t\t\tnew Promise<boolean>((resolve) => {\n\t\t\t\ttimer = setTimeout(() => resolve(true), deadline);\n\t\t\t}),\n\t\t]);\n\t\tclearTimeout(timer);\n\t\tif (timedOut) {\n\t\t\tconst blocking = this.gated.flatMap(({ object }) => [...(object.gate?.grandfathered ?? [])]);\n\t\t\tthrow new ChordError(\n\t\t\t\t\"aborted\",\n\t\t\t\t`gate deadline (${deadline} ms) missed; blocking roots: ${blocking.join(\", \")}`,\n\t\t\t\t{\n\t\t\t\t\treason: \"gate_deadline\",\n\t\t\t\t\tdetails: { blocking },\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\tthis.#alive();\n\t\tfor (const candidate of this.gated) {\n\t\t\tconst { object } = candidate;\n\t\t\tfor (const old of candidate.replaced) {\n\t\t\t\t// Owned by the rollback before closing: a failing close must still be restored.\n\t\t\t\tthis.closed.push([object, old]);\n\t\t\t\tawait old.close(object.openOrder);\n\t\t\t}\n\t\t\tawait object.open(candidate.atGate, [], this.abort.signal);\n\t\t\tthis.#alive();\n\t\t\tawait object.initCells(candidate.run, this.abort.signal);\n\t\t\tthis.#alive();\n\t\t}\n\t\tfor (const candidate of this.gated) this.migrate(candidate);\n\t}\n\n\tmigrate(candidate: Candidate): void {\n\t\tconst { object, run } = candidate;\n\t\tfor (const [name, cell] of run.decls.cells) {\n\t\t\tif (object.decls.cells.get(name) !== cell) continue;\n\t\t\tconst schema = run.decls.cellSchemas.get(name)!;\n\t\t\tconst from = object.decls.cellVersions.get(name) ?? 1;\n\t\t\tconst fn = run.decls.cellMigrations.get(name);\n\t\t\tlet value: unknown;\n\t\t\tif ((run.decls.cellVersions.get(name) ?? 1) > from && fn !== undefined)\n\t\t\t\tvalue = fn(structuredClone(cell.value), from);\n\t\t\telse if (!deepEqual(cell.schema, schema)) value = cell.value;\n\t\t\telse continue;\n\t\t\tassertValid(\"state\", `${object.address}: migrated state ${name}`, schema, value);\n\t\t\tcandidate.migrated.set(cell, value);\n\t\t}\n\t\tdryRun(candidate);\n\t}\n\n\tasync rollback(): Promise<void> {\n\t\tif (this.rolledBack) return;\n\t\tthis.rolledBack = true;\n\t\tthis.abort.abort(new ChordError(\"aborted\", \"reload aborted\"));\n\t\tfor (const run of this.facetRuns.values()) run.abort(new ChordError(\"aborted\", \"reload aborted\"));\n\t\tconst report = (error: unknown): void => this.host.report(error);\n\t\tfor (const candidate of this.candidates.values()) candidate.staged?.discard();\n\t\tfor (const staged of this.deferred.values()) staged.discard();\n\t\tfor (const { object, run } of this.candidates.values()) {\n\t\t\tobject.pending.delete(run.decls);\n\t\t\tawait object.unwind(run).catch(report);\n\t\t}\n\t\t// Replaced exclusive resources are restored; one that cannot be is marked unavailable, never silently closed.\n\t\tfor (const [object, resource] of this.closed) {\n\t\t\tif (resource.state !== \"closed\") continue;\n\t\t\tawait resource.open(new AbortController().signal, object.openOrder).catch((error: unknown) => {\n\t\t\t\tresource.markUnavailable();\n\t\t\t\treport(\n\t\t\t\t\tnew ChordError(\"unavailable\", `${object.address}: resource ${resource.key} could not be restored`, {\n\t\t\t\t\t\tcause: error,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t\tfor (const { object } of this.gated) {\n\t\t\tif (object.gate === undefined) continue;\n\t\t\tobject.openGate();\n\t\t\tobject.startTasks();\n\t\t}\n\t\t// Objects of types this reload would have added lose their code.\n\t\tconst reason = new ChordError(\"gone\", \"reload aborted; type not served\");\n\t\tfor (const object of [...this.host.objects.values()]) {\n\t\t\tif (!this.host.current.services.has(object.typeName)) await object.dispose(true, reason).catch(report);\n\t\t}\n\t\tthis.host.pending = undefined;\n\t\tthis.host.gating = undefined;\n\t}\n\n\t/**\n\t * Publishes the new code version in one synchronous step. Everything fallible ran in prepare (factories, opens,\n\t * migration and derivation checks against the prospective schemas, listener subscriptions), so this only installs.\n\t * Observers (state, shapes, registries, listener roots) are notified after the whole step. If an install still\n\t * throws, the code version is half-published: the host fails terminally and admits no more work.\n\t */\n\tcommit(beforeStart?: () => void): ReloadReport {\n\t\ttry {\n\t\t\treturn holdPublications(() => {\n\t\t\t\tconst report = this.#publish();\n\t\t\t\t// Installed, not yet started: the coordinator queues its commit frames here, so nothing this code version\n\t\t\t\t// starts (tasks, host object activations, then the held listener/registry/state notifications) can reach a child\n\t\t\t\t// first.\n\t\t\t\tbeforeStart?.();\n\t\t\t\tfor (const start of this.#starts.splice(0)) start();\n\t\t\t\treturn report;\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthis.host.fail(error);\n\t\t\tthrow reloadError(error);\n\t\t}\n\t}\n\n\t/** Work that may start new-code-version roots, run after installation (and after the coordinator's commit frames). */\n\treadonly #starts: (() => void)[] = [];\n\n\t#publish(): ReloadReport {\n\t\tconst host = this.host;\n\t\tconst previous = host.current;\n\t\tconst next: CodeVersionState = host.pending!;\n\t\thost.pending = undefined;\n\t\thost.codeVersions.set(next.id, next);\n\t\thost.previous = previous;\n\t\thost.current = next;\n\t\tconst prepared: string[] = [];\n\t\tfor (const object of [...host.objects.values()]) {\n\t\t\tif (this.removed.has(object.typeName)) continue;\n\t\t\tconst candidate = this.candidates.get(object);\n\t\t\tif (candidate === undefined) {\n\t\t\t\tconst installed = object.implementations.get(previous.id);\n\t\t\t\tif (installed !== undefined) object.implementations.set(next.id, { ...installed, codeVersion: next.id });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (object.status !== \"live\") continue;\n\t\t\tthis.install(candidate, next.id);\n\t\t\tprepared.push(object.address);\n\t\t}\n\t\tfor (const { object, run, staged } of this.candidates.values()) {\n\t\t\tif (object.status === \"live\") continue;\n\t\t\tstaged?.discard();\n\t\t\tobject.pending.delete(run.decls);\n\t\t\tobject.unwind(run).catch((error: unknown) => host.report(error));\n\t\t}\n\t\t// Objects of types this reload adds start their runtime now.\n\t\tfor (const [object, staged] of this.deferred) {\n\t\t\tif (object.status !== \"live\") {\n\t\t\t\tstaged.discard();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tobject.deferredRuntime = false;\n\t\t\tstaged.activate();\n\t\t\tthis.#starts.push(() => object.startTasks());\n\t\t}\n\t\thost.installTables(next, this.tables, true);\n\t\tconst reason = new ChordError(\"gone\", \"type no longer served\");\n\t\tfor (const object of [...host.objects.values()]) {\n\t\t\tif (this.removed.has(object.typeName))\n\t\t\t\tobject.dispose(true, reason).catch((error: unknown) => host.report(error));\n\t\t}\n\t\tfor (const name of this.removed) host.hostObjects.delete(name);\n\t\tfor (const facet of this.facets) host.facets.set(facet.name, facet);\n\t\tfor (const name of this.options.remove ?? []) host.facets.delete(name);\n\t\t// The replaced and removed runs' signals abort after the install, like other observers.\n\t\tfor (const [name, run] of this.facetRuns) this.#starts.push(() => host.facetRunChanged(name, run));\n\t\tfor (const name of this.options.remove ?? []) this.#starts.push(() => host.facetRunChanged(name, undefined));\n\t\thost.gating = undefined;\n\t\tfor (const [name, service] of this.services) {\n\t\t\tif (hostLifetime(service) && this.changed.has(name) && host.hostObjects.get(name)?.object?.status !== \"live\") {\n\t\t\t\tthis.#starts.push(() => host.startHostObject(service));\n\t\t\t}\n\t\t\t// A type whose lifetime became \"referenced\" lives on only while someone else references its object.\n\t\t\tconst pinned = host.hostObjects.get(name);\n\t\t\tif (!hostLifetime(service) && pinned !== undefined) {\n\t\t\t\thost.hostObjects.delete(name);\n\t\t\t\tthis.#starts.push(() => pinned.release());\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tcodeVersion: next.id,\n\t\t\tprevious: previous.id,\n\t\t\tchanged: [...this.changed],\n\t\t\tremoved: [...this.removed],\n\t\t\tprepared,\n\t\t\tgated: this.gated.map(({ object }) => object.address),\n\t\t};\n\t}\n\n\tinstall(candidate: Candidate, codeVersion: number): void {\n\t\tconst { object, run, service } = candidate;\n\t\tconst gated = candidate.reasons.length > 0;\n\t\tobject.pending.delete(run.decls);\n\t\tobject.stopTasks();\n\t\tif (gated) {\n\t\t\t// Old derivations would compute over migrated values; the old implementation can no longer run anyway.\n\t\t\tconst kept = new Set(run.decls.derives.values());\n\t\t\tfor (const derived of object.decls.derives.values()) if (!kept.has(derived)) derived.detach();\n\t\t}\n\t\tobject.decls = run.decls;\n\t\tobject.service = service;\n\t\t// Kept resources close with the new code's `close`; replaced ones keep their own (closed at retirement).\n\t\tfor (const [resource, declaration] of run.decls.adopted) resource.adopt(declaration);\n\t\tobject.implementations.set(codeVersion, {\n\t\t\tcodeVersion,\n\t\t\tservice,\n\t\t\timplementation: run.implementation,\n\t\t\tdecls: run.decls,\n\t\t});\n\t\tif (gated) {\n\t\t\t// Old code can never run over migrated state: drop the previous implementation now, not at retirement.\n\t\t\tobject.minCodeVersion = codeVersion;\n\t\t\tfor (const old of [...object.implementations.keys()])\n\t\t\t\tif (old !== codeVersion) this.host.retireImplementation(object, old);\n\t\t}\n\t\t// Schemas first, then the values validated against them in prepare.\n\t\tobject.refreshSchemas();\n\t\tfor (const [name, cell] of run.decls.cells) {\n\t\t\tconst schema = run.decls.cellSchemas.get(name)!;\n\t\t\tif (candidate.migrated.has(cell)) cell.reset(candidate.migrated.get(cell), schema);\n\t\t\telse cell.schema = schema;\n\t\t}\n\t\tconst created = new Set(run.created.derives);\n\t\tfor (const derived of run.created.derives) derived.attach(candidate.derived);\n\t\tfor (const derived of run.decls.derives.values()) if (!created.has(derived)) derived.refresh();\n\t\tcandidate.staged?.activate();\n\t\tthis.#starts.push(() => object.startTasks());\n\t\tobject.openGate();\n\t\tconst pinned = this.host.hostObjects.get(object.typeName);\n\t\tif (pinned?.object === object && pinned.contract.fingerprint !== service.contract.fingerprint) {\n\t\t\tconst replacement = new RefImpl(object, service.contract, \"host\");\n\t\t\t// Acquire first: releasing the only reference must not dispose/reopen the surviving host object.\n\t\t\tobject.addRef(replacement);\n\t\t\tthis.host.hostObjects.set(object.typeName, replacement);\n\t\t\tpinned.release();\n\t\t}\n\t\tfor (const ref of [...object.refs]) {\n\t\t\t// Browser references whose contract no longer binds are told to reload their code (they never block a reload).\n\t\t\tif (ref.owner === \"client\") {\n\t\t\t\ttry {\n\t\t\t\t\tbind(service.contract, service.options.accepts, ref.contract);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tref.gone(\n\t\t\t\t\t\tnew ChordError(\"upgrade_required\", `${object.typeName} changed; reload the web facets`, {\n\t\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t\tobject.release(ref);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tref.shapeChanged();\n\t\t}\n\t}\n}\n"]}
@@ -0,0 +1,165 @@
1
+ import { HYDRATION, type Hydration } from "./cell.ts";
2
+ import { type AnyContract } from "./contract.ts";
3
+ import { type Decoder } from "./delta/index.ts";
4
+ import { type RefCore, type RefOwner, type StatusListener } from "./object.ts";
5
+ import type { Ctx, Readable, RefStatus, Shape, StateEvent } from "./types.ts";
6
+ import { type RootRef, type WireError } from "./wire.ts";
7
+ /** One state frame for a member, as the binding receives it (payload unpacked). */
8
+ export interface StateIn {
9
+ readonly as: "snap" | "reset" | "ops" | "error";
10
+ readonly value?: unknown;
11
+ readonly ops?: readonly unknown[];
12
+ readonly error?: WireError;
13
+ }
14
+ /** What a binding needs from the link it is bound to (implemented by Connection). */
15
+ export interface RemoteChannel {
16
+ /** Sends a hold for `binding`; `again`: the binding already has values (a re-hold), its unit is not urgent. */
17
+ hold(binding: RemoteBinding, again: boolean): number;
18
+ release(id: number): void;
19
+ call(hold: number, member: string, args: unknown, root: RootRef | undefined, signal: AbortSignal): Promise<unknown>;
20
+ /** Starts (`sub`) or stops (`unsub`) the state of a hold. */
21
+ wantState(hold: number, wanted: boolean): void;
22
+ }
23
+ /** What a binding needs from its host. */
24
+ export interface RemoteHost {
25
+ readonly inFactory: number;
26
+ report(error: unknown): void;
27
+ root<T>(fn: (ctx: Ctx) => T | Promise<T>, options?: {
28
+ signal?: AbortSignal;
29
+ }): Promise<T>;
30
+ /** The binding has no views left: the host lingers it or closes it. */
31
+ bindingIdle(binding: RemoteBinding): void;
32
+ /** The binding ended or was closed: the host forgets it. */
33
+ forgetBinding(binding: RemoteBinding): void;
34
+ }
35
+ /** A member's value with the decoder of its current stream. */
36
+ interface MemberState {
37
+ value: unknown;
38
+ decoder: Decoder;
39
+ }
40
+ /**
41
+ * One hold per host and key (type, normalized input, principal key, contract fingerprint), shared by every reference to
42
+ * it: one hold over the link, one stream per state member, calls over the same hold. References are views onto it.
43
+ *
44
+ * A hold implies the state of its variant (unless no view wants state): the provider answers with a unit, the shape
45
+ * followed by a snapshot of each state member the binding lacks. A shape is applied only once all of its snapshots are
46
+ * here, so a live binding always has every state member of its variant. After the first hydration the values stay
47
+ * readable while the binding re-holds (link loss): status `loading`, last values kept.
48
+ */
49
+ export declare class RemoteBinding {
50
+ #private;
51
+ readonly host: RemoteHost;
52
+ readonly key: string;
53
+ readonly contract: AnyContract;
54
+ readonly at: string;
55
+ readonly input: unknown;
56
+ /** Forwarded principal (omitted for the host's own principal). */
57
+ readonly principal: unknown | undefined;
58
+ /** `ended`: gone with `error`, or closed (no views, no linger). */
59
+ status: "loading" | "live" | "ended";
60
+ error: unknown;
61
+ /** The applied shape (kept while re-holding). */
62
+ shape: Shape | undefined;
63
+ /** Every state member of the applied shape has a value (stays true while re-holding). */
64
+ hydrated: boolean;
65
+ /** The current hold; undefined while resolving the route or after a link loss. */
66
+ hold: {
67
+ readonly channel: RemoteChannel;
68
+ readonly id: number;
69
+ } | undefined;
70
+ /** What the provider was told: state for this hold (`state: false` / `sub` / `unsub`). */
71
+ stateOn: boolean;
72
+ readonly views: Set<RemoteRef>;
73
+ readonly members: Map<string, MemberState>;
74
+ /** Lingering since (no views): set by the host. */
75
+ lingerTimer: ReturnType<typeof setTimeout> | undefined;
76
+ constructor(host: RemoteHost, fields: {
77
+ key: string;
78
+ contract: AnyContract;
79
+ at: string;
80
+ input: unknown;
81
+ principal: unknown | undefined;
82
+ });
83
+ get ended(): boolean;
84
+ /** Views that want state. */
85
+ get stateViews(): number;
86
+ /** Whether the next hold should carry state: some view wants it, or nobody is left (lingering keeps it). */
87
+ get wantsState(): boolean;
88
+ /** Whether a re-hold is `again` (the binding already has a shape). */
89
+ get applied(): boolean;
90
+ addView(view: RemoteRef): void;
91
+ removeView(view: RemoteRef): void;
92
+ listen(name: string, readable: ViewReadable): void;
93
+ unlisten(name: string, readable: ViewReadable): void;
94
+ /** Whether `name` is a state member of the applied variant (as the consumer's contract describes it). */
95
+ inVariant(name: string): boolean;
96
+ /** The members' value as views read it: throws `not_ready` before the first hydration, `not_in_variant` outside it. */
97
+ read(name: string): unknown;
98
+ /** Resolves once the binding has its state (rejects if it ends first). */
99
+ whenHydrated(): Promise<void>;
100
+ readable(name: string): boolean;
101
+ terminalError(): unknown;
102
+ bound(channel: RemoteChannel, id: number): void;
103
+ /** A unit begins: `listed` are the members whose snapshots follow. */
104
+ shaped(shape: Shape, listed: readonly string[]): void;
105
+ /** A state frame for member `name` of the current hold. */
106
+ state(name: string, frame: StateIn): void;
107
+ /** The provider ended the object (or refused the hold): every view is gone. */
108
+ gone(error: unknown): void;
109
+ /** The link went down but may come back (upstream reconnect): keep the values, wait for the re-hold. */
110
+ detached(): void;
111
+ /** No views and no linger: releases the hold and forgets the binding. */
112
+ close(): void;
113
+ /** Calls `name` over the current hold, waiting for it while the binding (re)holds. */
114
+ call(name: string, args: unknown, ctx: Ctx): Promise<unknown>;
115
+ }
116
+ /**
117
+ * A state member of a remote reference: the binding's value. Reading throws `not_ready` before the first hydration and
118
+ * `not_in_variant` outside the variant. A listener added before the hydration gets its snapshot then.
119
+ */
120
+ declare class ViewReadable implements Readable<unknown> {
121
+ #private;
122
+ readonly view: RemoteRef;
123
+ constructor(view: RemoteRef, name: string);
124
+ get value(): unknown;
125
+ /** Not hydrated before the binding's first snapshots (a local object forwarding this member waits for them). */
126
+ get [HYDRATION](): Hydration | undefined;
127
+ subscribe(listener: (value: unknown) => void): () => void;
128
+ events(listener: (event: StateEvent<unknown>) => void): () => void;
129
+ deliver(event: StateEvent<unknown>): void;
130
+ stop(): void;
131
+ }
132
+ /**
133
+ * A reference to an object on another host: a view onto the host's shared binding for its key. Each view has its own
134
+ * owner, status, observers and `release`; ending by the provider and re-holding belong to the binding.
135
+ */
136
+ export declare class RemoteRef implements RefCore {
137
+ #private;
138
+ readonly object: undefined;
139
+ readonly binding: RemoteBinding;
140
+ readonly owner: RefOwner;
141
+ /** False: a method-only view (`state: false`), ready once live. */
142
+ readonly wantsState: boolean;
143
+ readonly proxy: object;
144
+ readonly ready: Promise<void>;
145
+ status: RefStatus;
146
+ error: unknown;
147
+ readonly shapeListeners: Set<(shape: Shape) => void>;
148
+ constructor(binding: RemoteBinding, owner: RefOwner, wantsState: boolean);
149
+ get contract(): AnyContract;
150
+ get address(): string;
151
+ get ended(): boolean;
152
+ get variant(): string | undefined;
153
+ get shape(): Shape | undefined;
154
+ onShape(listener: (shape: Shape) => void): () => void;
155
+ onStatus(listener: StatusListener): () => void;
156
+ terminalError(): unknown;
157
+ release(): void;
158
+ /** Follows the binding: live once it has a shape (and, for a state view, its state) over a current hold. */
159
+ update(): void;
160
+ end(error: unknown): void;
161
+ shapeChanged(): void;
162
+ member(name: string): unknown;
163
+ }
164
+ export {};
165
+ //# sourceMappingURL=remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"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"}