@ny4n/chord 0.0.0-stage → 1.0.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 (124) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +261 -2
  3. package/dist/api.d.ts +20 -0
  4. package/dist/api.d.ts.map +1 -0
  5. package/dist/api.js +77 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/bundler.d.ts +6 -0
  8. package/dist/bundler.d.ts.map +1 -0
  9. package/dist/bundler.js +3 -0
  10. package/dist/bundler.js.map +1 -0
  11. package/dist/context/index.d.ts +24 -0
  12. package/dist/context/index.d.ts.map +1 -0
  13. package/dist/context/index.js +97 -0
  14. package/dist/context/index.js.map +1 -0
  15. package/dist/delta/apply-immutable-trusted.d.ts +4 -0
  16. package/dist/delta/apply-immutable-trusted.d.ts.map +1 -0
  17. package/dist/delta/apply-immutable-trusted.js +127 -0
  18. package/dist/delta/apply-immutable-trusted.js.map +1 -0
  19. package/dist/delta/core.d.ts +108 -0
  20. package/dist/delta/core.d.ts.map +1 -0
  21. package/dist/delta/core.js +645 -0
  22. package/dist/delta/core.js.map +1 -0
  23. package/dist/delta/diff.d.ts +5 -0
  24. package/dist/delta/diff.d.ts.map +1 -0
  25. package/dist/delta/diff.js +433 -0
  26. package/dist/delta/diff.js.map +1 -0
  27. package/dist/delta/draft.d.ts +5 -0
  28. package/dist/delta/draft.d.ts.map +1 -0
  29. package/dist/delta/draft.js +2 -0
  30. package/dist/delta/draft.js.map +1 -0
  31. package/dist/delta/index.d.ts +5 -0
  32. package/dist/delta/index.d.ts.map +1 -0
  33. package/dist/delta/index.js +6 -0
  34. package/dist/delta/index.js.map +1 -0
  35. package/dist/delta/revision-validator.d.ts +7 -0
  36. package/dist/delta/revision-validator.d.ts.map +1 -0
  37. package/dist/delta/revision-validator.js +71 -0
  38. package/dist/delta/revision-validator.js.map +1 -0
  39. package/dist/delta/tracker.d.ts +26 -0
  40. package/dist/delta/tracker.d.ts.map +1 -0
  41. package/dist/delta/tracker.js +2069 -0
  42. package/dist/delta/tracker.js.map +1 -0
  43. package/dist/facets/host.d.ts +12 -0
  44. package/dist/facets/host.d.ts.map +1 -0
  45. package/dist/facets/host.js +763 -0
  46. package/dist/facets/host.js.map +1 -0
  47. package/dist/facets/loader.d.ts +3 -0
  48. package/dist/facets/loader.d.ts.map +1 -0
  49. package/dist/facets/loader.js +5 -0
  50. package/dist/facets/loader.js.map +1 -0
  51. package/dist/index.d.ts +12 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +10 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/json.d.ts +10 -0
  56. package/dist/json.d.ts.map +1 -0
  57. package/dist/json.js +124 -0
  58. package/dist/json.js.map +1 -0
  59. package/dist/node/bundle-loader.d.ts +30 -0
  60. package/dist/node/bundle-loader.d.ts.map +1 -0
  61. package/dist/node/bundle-loader.js +377 -0
  62. package/dist/node/bundle-loader.js.map +1 -0
  63. package/dist/node/bundle.d.ts +26 -0
  64. package/dist/node/bundle.d.ts.map +1 -0
  65. package/dist/node/bundle.js +183 -0
  66. package/dist/node/bundle.js.map +1 -0
  67. package/dist/node/manifest.d.ts +36 -0
  68. package/dist/node/manifest.d.ts.map +1 -0
  69. package/dist/node/manifest.js +6 -0
  70. package/dist/node/manifest.js.map +1 -0
  71. package/dist/node/package.d.ts +15 -0
  72. package/dist/node/package.d.ts.map +1 -0
  73. package/dist/node/package.js +199 -0
  74. package/dist/node/package.js.map +1 -0
  75. package/dist/node.d.ts +5 -0
  76. package/dist/node.d.ts.map +1 -0
  77. package/dist/node.js +3 -0
  78. package/dist/node.js.map +1 -0
  79. package/dist/services/consumer.d.ts +11 -0
  80. package/dist/services/consumer.d.ts.map +1 -0
  81. package/dist/services/consumer.js +585 -0
  82. package/dist/services/consumer.js.map +1 -0
  83. package/dist/services/errors.d.ts +8 -0
  84. package/dist/services/errors.d.ts.map +1 -0
  85. package/dist/services/errors.js +22 -0
  86. package/dist/services/errors.js.map +1 -0
  87. package/dist/services/handle.d.ts +15 -0
  88. package/dist/services/handle.d.ts.map +1 -0
  89. package/dist/services/handle.js +101 -0
  90. package/dist/services/handle.js.map +1 -0
  91. package/dist/services/instances.d.ts +26 -0
  92. package/dist/services/instances.d.ts.map +1 -0
  93. package/dist/services/instances.js +140 -0
  94. package/dist/services/instances.js.map +1 -0
  95. package/dist/services/loopback.d.ts +5 -0
  96. package/dist/services/loopback.d.ts.map +1 -0
  97. package/dist/services/loopback.js +15 -0
  98. package/dist/services/loopback.js.map +1 -0
  99. package/dist/services/provider.d.ts +37 -0
  100. package/dist/services/provider.d.ts.map +1 -0
  101. package/dist/services/provider.js +521 -0
  102. package/dist/services/provider.js.map +1 -0
  103. package/dist/services/state-codec.d.ts +15 -0
  104. package/dist/services/state-codec.d.ts.map +1 -0
  105. package/dist/services/state-codec.js +133 -0
  106. package/dist/services/state-codec.js.map +1 -0
  107. package/dist/services/state-internals.d.ts +13 -0
  108. package/dist/services/state-internals.d.ts.map +1 -0
  109. package/dist/services/state-internals.js +10 -0
  110. package/dist/services/state-internals.js.map +1 -0
  111. package/dist/services/state.d.ts +28 -0
  112. package/dist/services/state.d.ts.map +1 -0
  113. package/dist/services/state.js +397 -0
  114. package/dist/services/state.js.map +1 -0
  115. package/dist/services/wire.d.ts +63 -0
  116. package/dist/services/wire.d.ts.map +1 -0
  117. package/dist/services/wire.js +186 -0
  118. package/dist/services/wire.js.map +1 -0
  119. package/dist/types.d.ts +277 -0
  120. package/dist/types.d.ts.map +1 -0
  121. package/dist/types.js +2 -0
  122. package/dist/types.js.map +1 -0
  123. package/package.json +71 -5
  124. package/src/delta/README.md +191 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/facets/host.ts"],"names":[],"mappings":"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","sourcesContent":["import { BACKGROUND_CONTEXT } from \"../context/index.ts\";\nimport { RemoteServiceBindingImpl } from \"../services/consumer.ts\";\nimport { ServiceSlot } from \"../services/handle.ts\";\nimport { InstanceDirectory, type InstanceDirectoryEntry } from \"../services/instances.ts\";\nimport { createLoopbackServiceTransport } from \"../services/loopback.ts\";\nimport { RemoteServiceProvider, validateRemoteServiceImplementation } from \"../services/provider.ts\";\nimport { MutableReplicatedStateImpl } from \"../services/state.ts\";\nimport type {\n\tContext,\n\tFacet,\n\tFacetEnvironment,\n\tFacetOptions,\n\tRemoteServiceContract,\n\tRemoteServiceSource,\n\tRemoteServices,\n\tService,\n\tServiceMode,\n\tServiceSpawner,\n} from \"../types.ts\";\n\ninterface FacetServiceReference {\n\treadonly serviceId: string;\n\treadonly service: Service<unknown>;\n\treadonly mode: ServiceMode;\n}\n\ninterface ExternalService {\n\treadonly service: Service<unknown>;\n\treadonly mode: ServiceMode;\n\treadonly source: RemoteServiceSource;\n}\n\ninterface FacetShape {\n\tfacetId: string;\n\trequires: readonly FacetServiceReference[];\n\tprovides: readonly FacetServiceReference[];\n}\n\ninterface FacetRuntime extends FacetShape {\n\trequires: FacetServiceReference[];\n\tprovides: FacetServiceReference[];\n\treadonly lifecycle: FacetLifecycle;\n\treadonly provisions: FacetProvision[];\n\treadonly singletonViews: Map<string, unknown>;\n}\n\ntype LifecycleState = \"setting_up\" | \"prepared\" | \"active\" | \"disposing\" | \"dead\";\ntype GenerationPhase =\n\t| \"setup\"\n\t| \"assembling\"\n\t| \"connecting\"\n\t| \"activating\"\n\t| \"active\"\n\t| \"reloading\"\n\t| \"disposing\"\n\t| \"dead\";\ntype Disposal = () => void | Promise<void>;\n\nclass FacetLifecycle {\n\treadonly id: string;\n\treadonly #effects: Disposal[] = [];\n\treadonly #observations: Array<() => Disposal> = [];\n\treadonly #activate: Array<() => void | Promise<void>> = [];\n\t#state: LifecycleState = \"setting_up\";\n\t#serviceAccess = false;\n\n\tconstructor(id: string) {\n\t\tthis.id = id;\n\t}\n\n\tassertSettingUp(operation: string): void {\n\t\tif (this.#state !== \"setting_up\") {\n\t\t\tthrow new Error(`Facet ${this.id} can ${operation} only during setup`);\n\t\t}\n\t}\n\n\tassertRunning(operation: string): void {\n\t\tif (this.#state !== \"setting_up\" && this.#state !== \"active\") {\n\t\t\tthrow new Error(`Facet ${this.id} cannot ${operation} while ${this.#state}`);\n\t\t}\n\t}\n\n\tassertActive(operation: string): void {\n\t\tif (this.#state !== \"active\") throw new Error(`Facet ${this.id} can ${operation} only while active`);\n\t}\n\n\tassertServiceAccess(): void {\n\t\tif (!this.#serviceAccess) {\n\t\t\tthrow new Error(`Facet ${this.id} service handles cannot be used while ${this.#state}`);\n\t\t}\n\t}\n\n\trevoke(): void {\n\t\tthis.#serviceAccess = false;\n\t}\n\n\town(disposal: Disposal): void {\n\t\tthis.assertRunning(\"own resources\");\n\t\tthis.#effects.push(disposal);\n\t}\n\n\tobserve(start: () => Disposal): void {\n\t\tthis.assertSettingUp(\"observe services\");\n\t\tthis.#observations.push(start);\n\t}\n\n\tonActivate(callback: () => void | Promise<void>): void {\n\t\tthis.assertSettingUp(\"register activation callbacks\");\n\t\tthis.#activate.push(callback);\n\t}\n\n\tprepared(): void {\n\t\tthis.assertSettingUp(\"finish setup\");\n\t\tthis.#state = \"prepared\";\n\t}\n\n\tasync activate(): Promise<void> {\n\t\tif (this.#state !== \"prepared\") throw new Error(`Facet ${this.id} is not prepared`);\n\t\tthis.#state = \"active\";\n\t\tthis.#serviceAccess = true;\n\t\tfor (const start of this.#observations) this.#effects.push(start());\n\t\tfor (const callback of this.#activate) await callback();\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tif (this.#state === \"dead\") return;\n\t\tthis.#state = \"disposing\";\n\t\tconst errors: unknown[] = [];\n\t\tfor (const effect of this.#effects.splice(0).reverse()) {\n\t\t\ttry {\n\t\t\t\tawait effect();\n\t\t\t} catch (error) {\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t}\n\t\tthis.#observations.length = 0;\n\t\tthis.#activate.length = 0;\n\t\tthis.#serviceAccess = false;\n\t\tthis.#state = \"dead\";\n\t\tif (errors.length === 1) throw errors[0];\n\t\tif (errors.length > 1) throw new AggregateError(errors, `Failed to dispose facet ${this.id}`);\n\t}\n}\n\ninterface KeyedServiceSource {\n\tobserve<T>(service: Service<T>, handler: (service: T, context: Context) => void | Promise<void>): () => void;\n}\n\ninterface LocalKeyedRegistration {\n\treadonly generations: Map<string, number>;\n\treadonly directory: InstanceDirectory<InstanceDirectoryEntry>;\n}\n\nclass LocalKeyedServiceRegistry implements KeyedServiceSource {\n\treadonly #registrations = new Map<string, LocalKeyedRegistration>();\n\t#disposed = false;\n\n\tconstructor(services: readonly { readonly id: string }[], onError: (error: Error) => void) {\n\t\tconst ids = services.map(({ id }) => id);\n\t\tif (new Set(ids).size !== ids.length) throw new TypeError(\"Local keyed service registry has duplicate IDs\");\n\t\tfor (const serviceId of ids) {\n\t\t\tthis.#registrations.set(serviceId, {\n\t\t\t\tgenerations: new Map(),\n\t\t\t\tdirectory: new InstanceDirectory({ ready: true, onError }),\n\t\t\t});\n\t\t}\n\t}\n\n\tspawn<T>(service: Service<T>, key: string, implementation: T): () => void {\n\t\tthis.#assertActive();\n\t\tif (key.length === 0) throw new TypeError(\"Local service instance key must not be empty\");\n\t\tif (typeof implementation !== \"object\" || implementation === null || Array.isArray(implementation)) {\n\t\t\tthrow new TypeError(`Local service ${service.id} implementation must be an object`);\n\t\t}\n\t\tconst registration = this.#registration(service.id);\n\t\tif (registration.directory.get(key) !== undefined) {\n\t\t\tthrow new Error(`Local service ${service.id} already has a live instance with key ${key}`);\n\t\t}\n\t\tconst generation = (registration.generations.get(key) ?? 0) + 1;\n\t\tregistration.generations.set(key, generation);\n\t\tconst instance: InstanceDirectoryEntry = {\n\t\t\tkey,\n\t\t\tgeneration,\n\t\t\tservice: implementation as object,\n\t\t\tdeactivate() {},\n\t\t};\n\t\tregistration.directory.insert(instance);\n\t\tlet closed = false;\n\t\treturn () => {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\tregistration.directory.remove(instance);\n\t\t};\n\t}\n\n\tobserve<T>(service: Service<T>, handler: (service: T, context: Context) => void | Promise<void>): () => void {\n\t\tthis.#assertActive();\n\t\treturn this.#registration(service.id).directory.observe(handler);\n\t}\n\n\tdispose(): void {\n\t\tif (this.#disposed) return;\n\t\tthis.#disposed = true;\n\t\tfor (const registration of this.#registrations.values()) registration.directory.dispose();\n\t\tthis.#registrations.clear();\n\t}\n\n\t#registration(serviceId: string): LocalKeyedRegistration {\n\t\tconst registration = this.#registrations.get(serviceId);\n\t\tif (registration === undefined) throw new Error(`Local keyed service ${serviceId} is not registered`);\n\t\treturn registration;\n\t}\n\n\t#assertActive(): void {\n\t\tif (this.#disposed) throw new Error(\"Local keyed service registry is disposed\");\n\t}\n}\n\nclass HostServiceSlots {\n\treadonly #singletons = new Map<string, ServiceSlot>();\n\treadonly #keyedSources = new Map<string, KeyedServiceSource>();\n\n\tgetSingleton<T>(service: Service<T>, assertAccess: () => void): T {\n\t\tlet slot = this.#singletons.get(service.id);\n\t\tif (slot === undefined) {\n\t\t\tslot = new ServiceSlot(service.id, !service.local);\n\t\t\tthis.#singletons.set(service.id, slot);\n\t\t}\n\t\treturn slot.view<T>(assertAccess);\n\t}\n\n\thasSingleton(serviceId: string): boolean {\n\t\treturn this.#singletons.has(serviceId);\n\t}\n\n\tobserve<T>(\n\t\tservice: Service<T>,\n\t\tassertAccess: () => void,\n\t\thandler: (service: T, context: Context) => void | Promise<void>,\n\t): Disposal {\n\t\tconst source = this.#keyedSources.get(service.id);\n\t\tif (source === undefined) throw new Error(`Service ${service.id} is disconnected`);\n\t\tlet stopped = false;\n\t\tconst stop = source.observe(service, (target, context) => {\n\t\t\tconst slot = new ServiceSlot(service.id, !service.local);\n\t\t\tslot.bind(target as object);\n\t\t\treturn handler(\n\t\t\t\tslot.view<T>(() => {\n\t\t\t\t\tassertAccess();\n\t\t\t\t\tif (stopped || context.abortSignal?.aborted) {\n\t\t\t\t\t\tthrow new Error(`Keyed service ${service.id} observation is closed`);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t});\n\t\treturn () => {\n\t\t\tif (stopped) return;\n\t\t\tstopped = true;\n\t\t\tstop();\n\t\t};\n\t}\n\n\tbindSingleton(serviceId: string, target: object): void {\n\t\tthis.#singletons.get(serviceId)?.bind(target);\n\t}\n\n\tbindKeyed(serviceId: string, services: KeyedServiceSource): void {\n\t\tthis.#keyedSources.set(serviceId, services);\n\t}\n\n\tdispose(): void {\n\t\tfor (const slot of this.#singletons.values()) slot.unbind();\n\t\tthis.#singletons.clear();\n\t\tthis.#keyedSources.clear();\n\t}\n}\n\ntype ServiceInstanceInstaller<T> = (key: string, implementation: T) => () => void;\n\ninterface StagedServiceInstance<T> {\n\treadonly key: string;\n\treadonly implementation: T;\n\trelease?: () => void;\n}\n\nclass StagedServiceSpawner<T> implements ServiceSpawner<T> {\n\treadonly #lifecycle: FacetLifecycle;\n\treadonly #validate: (key: string, implementation: T) => void;\n\treadonly #instances = new Map<string, StagedServiceInstance<T>>();\n\t#installer: ServiceInstanceInstaller<T> | undefined;\n\n\tconstructor(lifecycle: FacetLifecycle, validate: (key: string, implementation: T) => void) {\n\t\tthis.#lifecycle = lifecycle;\n\t\tthis.#validate = validate;\n\t}\n\n\tconnect(installer: ServiceInstanceInstaller<T>): void {\n\t\tif (this.#installer !== undefined) throw new Error(\"Facet service provider is already connected\");\n\t\tthis.#installer = installer;\n\t\tfor (const instance of this.#instances.values()) {\n\t\t\tinstance.release = installer(instance.key, instance.implementation);\n\t\t}\n\t}\n\n\tspawn(key: string, implementation: T): () => void {\n\t\tthis.#lifecycle.assertActive(\"spawn service instances\");\n\t\tthis.#validate(key, implementation);\n\t\tif (this.#instances.has(key)) throw new Error(`Facet service already has a live instance with key ${key}`);\n\t\tconst instance: StagedServiceInstance<T> = { key, implementation };\n\t\tthis.#instances.set(key, instance);\n\t\tif (this.#installer !== undefined) instance.release = this.#installer(key, implementation);\n\t\tconst close = (): void => {\n\t\t\tif (this.#instances.get(key) !== instance) return;\n\t\t\tthis.#instances.delete(key);\n\t\t\tinstance.release?.();\n\t\t};\n\t\tthis.#lifecycle.own(close);\n\t\treturn close;\n\t}\n}\n\ntype FacetProvision =\n\t| {\n\t\t\treadonly kind: \"singleton\";\n\t\t\treadonly service: { readonly id: string; readonly local: boolean };\n\t\t\treadonly implementation: object;\n\t\t\tinstall(provider: RemoteServiceProvider): void;\n\t\t\tvalidateReplacement(provider: RemoteServiceProvider): void;\n\t\t\treplace(provider: RemoteServiceProvider): void;\n\t }\n\t| {\n\t\t\treadonly kind: \"keyed\";\n\t\t\treadonly service: { readonly id: string; readonly local: boolean };\n\t\t\tconnectLocal(registry: LocalKeyedServiceRegistry): void;\n\t\t\tconnectRemote(provider: RemoteServiceProvider): void;\n\t };\n\n/** Private lifecycle and dependency kernel behind the atomic host entry point. */\nexport class FacetKernel {\n\treadonly #initialFacets: readonly Facet[];\n\treadonly #serviceSources: readonly RemoteServiceSource[];\n\treadonly #onError: (error: Error) => void;\n\treadonly #facets = new Map<string, FacetRuntime>();\n\treadonly #serviceSlots: HostServiceSlots;\n\treadonly #sourceBindings = new Map<RemoteServiceSource, RemoteServices>();\n\t#activationOrder: readonly string[] = [];\n\t#provider: RemoteServiceProvider | undefined;\n\t#internalServices: RemoteServices | undefined;\n\t#localKeyedServices: LocalKeyedServiceRegistry | undefined;\n\t#phase: GenerationPhase = \"setup\";\n\n\tconstructor(options: FacetOptions) {\n\t\tconst ids = options.facets.map((facet) => facet.id);\n\t\tif (ids.some((id) => id.length === 0)) throw new Error(\"Facet ID must not be empty\");\n\t\tif (new Set(ids).size !== ids.length) throw new Error(\"Facet IDs must be unique within a generation\");\n\t\tthis.#initialFacets = options.facets;\n\t\tthis.#serviceSources = options.serviceSources ?? [];\n\t\tthis.#onError = options.onError ?? (() => {});\n\t\tthis.#serviceSlots = new HostServiceSlots();\n\t}\n\n\tget provider(): RemoteServiceProvider {\n\t\tif (this.#provider === undefined) throw new Error(\"Facet service provider is not assembled\");\n\t\treturn this.#provider;\n\t}\n\n\t#createFacetRuntime(facetId: string): FacetRuntime {\n\t\treturn {\n\t\t\tfacetId,\n\t\t\trequires: [],\n\t\t\tprovides: [],\n\t\t\tlifecycle: new FacetLifecycle(facetId),\n\t\t\tprovisions: [],\n\t\t\tsingletonViews: new Map(),\n\t\t};\n\t}\n\n\t#setupFacet(facet: Facet, record: FacetRuntime): void {\n\t\tconst result: unknown = facet.setup(this.#environment(record));\n\t\tif (isPromiseLike(result)) {\n\t\t\tvoid Promise.resolve(result).catch(() => {});\n\t\t\tthrow new Error(`Facet ${facet.id} setup must be synchronous`);\n\t\t}\n\t\trecord.lifecycle.prepared();\n\t}\n\n\tasync activate(): Promise<void> {\n\t\tconst records: FacetRuntime[] = [];\n\t\ttry {\n\t\t\tfor (const facet of this.#initialFacets) {\n\t\t\t\tconst record = this.#createFacetRuntime(facet.id);\n\t\t\t\tthis.#facets.set(facet.id, record);\n\t\t\t\tthis.#setupFacet(facet, record);\n\t\t\t\trecords.push(record);\n\t\t\t}\n\n\t\t\tthis.#phase = \"assembling\";\n\t\t\tconst externalServices = await this.#resolveExternalServices(records);\n\t\t\tthis.#activationOrder = validateFacets(records, externalServices);\n\t\t\tthis.#assembleProviders();\n\t\t\tthis.#bindServices(externalServices);\n\n\t\t\tthis.#phase = \"connecting\";\n\t\t\tawait Promise.all(\n\t\t\t\t[...this.#sourceBindings.values(), this.#internalServiceBinding].map((services) =>\n\t\t\t\t\tservices.ready(BACKGROUND_CONTEXT),\n\t\t\t\t),\n\t\t\t);\n\n\t\t\tthis.#phase = \"activating\";\n\t\t\tfor (const id of this.#activationOrder) await this.#facets.get(id)!.lifecycle.activate();\n\t\t\tthis.#phase = \"active\";\n\t\t} catch (error) {\n\t\t\tconst cleanupErrors = await this.#terminate();\n\t\t\tif (cleanupErrors.length > 0) {\n\t\t\t\tthrow new AggregateError([error, ...cleanupErrors], \"Facet generation startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync reload(facets: readonly Facet[]): Promise<void> {\n\t\tif (this.#phase !== \"active\") throw new Error(`Facet host cannot reload while ${this.#phase}`);\n\t\tconst ids = facets.map(({ id }) => id);\n\t\tif (ids.some((id) => id.length === 0)) throw new Error(\"Facet ID must not be empty\");\n\t\tif (new Set(ids).size !== ids.length) throw new Error(\"Reloaded facet IDs must be unique\");\n\t\tfor (const id of ids) {\n\t\t\tif (!this.#facets.has(id)) throw new Error(`Facet ${id} is not active`);\n\t\t}\n\t\tthis.#phase = \"reloading\";\n\n\t\tconst staged: FacetRuntime[] = [];\n\t\tconst candidates: FacetRuntime[] = [];\n\t\ttry {\n\t\t\tfor (const facet of facets) {\n\t\t\t\tconst record = this.#createFacetRuntime(facet.id);\n\t\t\t\tstaged.push(record);\n\t\t\t\tthis.#setupFacet(facet, record);\n\t\t\t\tconst previous = this.#facets.get(facet.id)!;\n\t\t\t\tif (!sameFacetShape(previous, record)) {\n\t\t\t\t\tthrow new Error(`Reloaded facet ${facet.id} must preserve its service requirements and provisions`);\n\t\t\t\t}\n\t\t\t\tthis.#validateReplacementProvisions(record.provisions);\n\t\t\t\tcandidates.push(record);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst cleanupErrors = await disposeFacetRecords(staged.reverse());\n\t\t\tif (cleanupErrors.length > 0) {\n\t\t\t\tconst abortErrors = await this.#abort();\n\t\t\t\tthrow new AggregateError(\n\t\t\t\t\t[error, ...cleanupErrors, ...abortErrors],\n\t\t\t\t\t\"Facet reload setup and cleanup failed\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.#phase = \"active\";\n\t\t\tthrow error;\n\t\t}\n\n\t\tconst replacements = new Map(candidates.map((record) => [record.facetId, record]));\n\t\tconst candidateOrder = this.#activationOrder.flatMap((id) => {\n\t\t\tconst candidate = replacements.get(id);\n\t\t\treturn candidate === undefined ? [] : [candidate];\n\t\t});\n\t\ttry {\n\t\t\tfor (const candidate of candidateOrder) await candidate.lifecycle.activate();\n\t\t\tfor (const candidate of candidateOrder) this.#validateReplacementProvisions(candidate.provisions);\n\t\t} catch (error) {\n\t\t\tconst cleanupErrors = await disposeFacetRecords([...candidateOrder].reverse());\n\t\t\tif (cleanupErrors.length > 0) {\n\t\t\t\tconst abortErrors = await this.#abort();\n\t\t\t\tthrow new AggregateError(\n\t\t\t\t\t[error, ...cleanupErrors, ...abortErrors],\n\t\t\t\t\t\"Facet reload activation and cleanup failed\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.#phase = \"active\";\n\t\t\tthrow error;\n\t\t}\n\n\t\tconst previous = candidateOrder.map(({ facetId }) => this.#facets.get(facetId)!);\n\t\tfor (const candidate of candidateOrder) this.#facets.set(candidate.facetId, candidate);\n\t\ttry {\n\t\t\tfor (const candidate of candidateOrder) {\n\t\t\t\tfor (const provision of candidate.provisions) {\n\t\t\t\t\tif (provision.kind !== \"singleton\") continue;\n\t\t\t\t\tif (provision.service.local) {\n\t\t\t\t\t\tthis.#serviceSlots.bindSingleton(provision.service.id, provision.implementation);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprovision.replace(this.provider);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst retirementErrors = await disposeFacetRecords(previous.reverse());\n\t\t\tif (retirementErrors.length === 1) throw retirementErrors[0];\n\t\t\tif (retirementErrors.length > 1) {\n\t\t\t\tthrow new AggregateError(retirementErrors, \"Failed to retire replaced facets\");\n\t\t\t}\n\t\t\tfor (const candidate of candidateOrder) {\n\t\t\t\tfor (const provision of candidate.provisions) {\n\t\t\t\t\tif (provision.kind !== \"keyed\") continue;\n\t\t\t\t\tif (provision.service.local) provision.connectLocal(this.#localKeyedRegistry);\n\t\t\t\t\telse provision.connectRemote(this.provider);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst abortErrors = await this.#abort(previous);\n\t\t\tthrow new AggregateError([error, ...abortErrors], \"Facet reload failed after cutover\");\n\t\t}\n\t\tthis.#phase = \"active\";\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tif (this.#phase === \"dead\") return;\n\t\tif (this.#phase !== \"active\") throw new Error(`Facet host cannot be disposed while ${this.#phase}`);\n\t\tconst errors = await this.#terminate();\n\t\tif (errors.length === 1) throw errors[0];\n\t\tif (errors.length > 1) throw new AggregateError(errors, \"Failed to dispose facet generation\");\n\t}\n\n\t#validateReplacementProvisions(provisions: readonly FacetProvision[]): void {\n\t\tfor (const provision of provisions) {\n\t\t\tif (provision.kind !== \"singleton\" || provision.service.local) continue;\n\t\t\tprovision.validateReplacement(this.provider);\n\t\t}\n\t}\n\n\t#environment(runtime: FacetRuntime): FacetEnvironment {\n\t\tconst { lifecycle, provisions } = runtime;\n\t\treturn {\n\t\t\tprovide: <T>(service: Service<T>, implementation: NoInfer<T>): void => {\n\t\t\t\tlifecycle.assertSettingUp(\"provide services\");\n\t\t\t\tif (typeof implementation !== \"object\" || implementation === null || Array.isArray(implementation)) {\n\t\t\t\t\tthrow new TypeError(`Service ${service.id} implementation must be an object`);\n\t\t\t\t}\n\t\t\t\trecordServiceReference(runtime.provides, service, \"singleton\");\n\t\t\t\tprovisions.push({\n\t\t\t\t\tkind: \"singleton\",\n\t\t\t\t\tservice,\n\t\t\t\t\timplementation,\n\t\t\t\t\tinstall: (provider) => provider.provide(service, implementation as NoInfer<RemoteServiceContract<T>>),\n\t\t\t\t\tvalidateReplacement: (provider) =>\n\t\t\t\t\t\tprovider.validateReplacement(service, implementation as NoInfer<RemoteServiceContract<T>>),\n\t\t\t\t\treplace: (provider) => provider.replace(service, implementation as NoInfer<RemoteServiceContract<T>>),\n\t\t\t\t});\n\t\t\t},\n\t\t\tprovideMany: <T>(service: Service<T>): ServiceSpawner<T> => {\n\t\t\t\tlifecycle.assertSettingUp(\"provide service instances\");\n\t\t\t\trecordServiceReference(runtime.provides, service, \"keyed\");\n\t\t\t\tconst instances = new StagedServiceSpawner<T>(lifecycle, (key, implementation) => {\n\t\t\t\t\tif (key.length === 0) throw new TypeError(\"Facet service instance key must not be empty\");\n\t\t\t\t\tif (typeof implementation !== \"object\" || implementation === null || Array.isArray(implementation)) {\n\t\t\t\t\t\tthrow new TypeError(`Facet service ${service.id} implementation must be an object`);\n\t\t\t\t\t}\n\t\t\t\t\tif (!service.local) validateRemoteServiceImplementation(service.id, implementation);\n\t\t\t\t});\n\t\t\t\tprovisions.push({\n\t\t\t\t\tkind: \"keyed\",\n\t\t\t\t\tservice,\n\t\t\t\t\tconnectLocal: (registry) =>\n\t\t\t\t\t\tinstances.connect((key, implementation) => registry.spawn(service, key, implementation)),\n\t\t\t\t\tconnectRemote: (provider) =>\n\t\t\t\t\t\tinstances.connect((key, implementation) =>\n\t\t\t\t\t\t\tprovider.spawn(service, key, implementation as NoInfer<RemoteServiceContract<T>>),\n\t\t\t\t\t\t),\n\t\t\t\t});\n\t\t\t\treturn instances;\n\t\t\t},\n\t\t\tuse: <T>(service: Service<T>): T => {\n\t\t\t\tlifecycle.assertSettingUp(\"acquire services\");\n\t\t\t\trecordServiceReference(runtime.requires, service, \"singleton\");\n\t\t\t\tlet view = runtime.singletonViews.get(service.id);\n\t\t\t\tif (view === undefined) {\n\t\t\t\t\tview = this.#serviceSlots.getSingleton<T>(service, () => lifecycle.assertServiceAccess());\n\t\t\t\t\truntime.singletonViews.set(service.id, view);\n\t\t\t\t}\n\t\t\t\treturn view as T;\n\t\t\t},\n\t\t\tobserve: <T>(service: Service<T>, handler: (service: T, context: Context) => void | Promise<void>): void => {\n\t\t\t\tlifecycle.assertSettingUp(\"observe services\");\n\t\t\t\trecordServiceReference(runtime.requires, service, \"keyed\");\n\t\t\t\tlifecycle.observe(() =>\n\t\t\t\t\tthis.#serviceSlots.observe(service, () => lifecycle.assertServiceAccess(), handler),\n\t\t\t\t);\n\t\t\t},\n\t\t\treplicatedState: <T extends object>(initial: T) => {\n\t\t\t\tlifecycle.assertRunning(\"create replicated state\");\n\t\t\t\treturn new MutableReplicatedStateImpl(initial);\n\t\t\t},\n\t\t\town: (disposal) => lifecycle.own(disposal),\n\t\t\tonActivate: (callback) => lifecycle.onActivate(callback),\n\t\t\tonDeactivate: (callback) => lifecycle.own(callback),\n\t\t};\n\t}\n\n\tasync #resolveExternalServices(records: readonly FacetShape[]): Promise<ReadonlyMap<string, ExternalService>> {\n\t\tconst catalogues = await Promise.all(\n\t\t\tthis.#serviceSources.map(async (source) => ({\n\t\t\t\tsource,\n\t\t\t\tentries: await source.catalogue(BACKGROUND_CONTEXT),\n\t\t\t})),\n\t\t);\n\t\tconst offered = new Map<string, { readonly mode: ServiceMode; readonly source: RemoteServiceSource }>();\n\t\tfor (const { source, entries } of catalogues) {\n\t\t\tfor (const { serviceId, mode } of entries) {\n\t\t\t\tif (offered.has(serviceId)) {\n\t\t\t\t\tthrow new Error(`Facet host service ${serviceId} is offered by more than one source`);\n\t\t\t\t}\n\t\t\t\toffered.set(serviceId, { mode, source });\n\t\t\t}\n\t\t}\n\n\t\tconst local = new Set(records.flatMap(({ provides }) => provides.map(({ serviceId }) => serviceId)));\n\t\tconst external = new Map<string, ExternalService>();\n\t\tfor (const { requires } of records) {\n\t\t\tfor (const requirement of requires) {\n\t\t\t\tif (local.has(requirement.serviceId) || external.has(requirement.serviceId)) continue;\n\t\t\t\tlet source = offered.get(requirement.serviceId);\n\t\t\t\tif (source === undefined) {\n\t\t\t\t\tconst deferred = this.#serviceSources.filter(\n\t\t\t\t\t\t({ acceptsUnavailableServices }) => acceptsUnavailableServices,\n\t\t\t\t\t);\n\t\t\t\t\tif (deferred.length > 1) {\n\t\t\t\t\t\tthrow new Error(`Facet host service ${requirement.serviceId} has more than one deferred source`);\n\t\t\t\t\t}\n\t\t\t\t\tif (deferred.length === 1) source = { mode: requirement.mode, source: deferred[0]! };\n\t\t\t\t}\n\t\t\t\tif (source !== undefined) {\n\t\t\t\t\texternal.set(requirement.serviceId, { ...source, service: requirement.service });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst serviceIdsBySource = new Map<RemoteServiceSource, string[]>();\n\t\tfor (const [serviceId, { source }] of external) {\n\t\t\tlet serviceIds = serviceIdsBySource.get(source);\n\t\t\tif (serviceIds === undefined) {\n\t\t\t\tserviceIds = [];\n\t\t\t\tserviceIdsBySource.set(source, serviceIds);\n\t\t\t}\n\t\t\tserviceIds.push(serviceId);\n\t\t}\n\t\tfor (const [source, serviceIds] of serviceIdsBySource) {\n\t\t\tthis.#sourceBindings.set(\n\t\t\t\tsource,\n\t\t\t\tsource.open({\n\t\t\t\t\tservices: serviceIds.map((id) => ({ id })),\n\t\t\t\t\tassertAccess: () => this.#assertServiceTargetAccess(),\n\t\t\t\t\tonError: this.#onError,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\treturn external;\n\t}\n\n\t#assembleProviders(): void {\n\t\tconst provisions = this.#provisions();\n\t\tconst remoteProvisions = provisions.filter(({ service }) => !service.local);\n\t\tconst provider = new RemoteServiceProvider(\n\t\t\tremoteProvisions.map(({ service, kind }) => ({ service, mode: kind })),\n\t\t);\n\t\tconst internalServices = new RemoteServiceBindingImpl({\n\t\t\tservices: remoteProvisions.map(({ service }) => service),\n\t\t\ttransport: createLoopbackServiceTransport(provider),\n\t\t\tassertAccess: () => this.#assertServiceTargetAccess(),\n\t\t\tonError: this.#onError,\n\t\t});\n\t\tconst localKeyedServices = new LocalKeyedServiceRegistry(\n\t\t\tprovisions.flatMap((provision) =>\n\t\t\t\tprovision.kind === \"keyed\" && provision.service.local ? [provision.service] : [],\n\t\t\t),\n\t\t\tthis.#onError,\n\t\t);\n\t\tthis.#provider = provider;\n\t\tthis.#internalServices = internalServices;\n\t\tthis.#localKeyedServices = localKeyedServices;\n\t\tfor (const provision of provisions) {\n\t\t\tif (provision.kind === \"singleton\") {\n\t\t\t\tif (!provision.service.local) provision.install(provider);\n\t\t\t} else if (provision.service.local) {\n\t\t\t\tprovision.connectLocal(localKeyedServices);\n\t\t\t} else {\n\t\t\t\tprovision.connectRemote(provider);\n\t\t\t}\n\t\t}\n\t}\n\n\t#bindServices(externalServices: ReadonlyMap<string, ExternalService>): void {\n\t\tfor (const provision of this.#provisions()) {\n\t\t\tif (provision.kind === \"singleton\") {\n\t\t\t\tif (!this.#serviceSlots.hasSingleton(provision.service.id)) continue;\n\t\t\t\tconst target = provision.service.local\n\t\t\t\t\t? provision.implementation\n\t\t\t\t\t: (this.#internalServiceBinding.use(provision.service) as object);\n\t\t\t\tthis.#serviceSlots.bindSingleton(provision.service.id, target);\n\t\t\t} else {\n\t\t\t\tthis.#serviceSlots.bindKeyed(\n\t\t\t\t\tprovision.service.id,\n\t\t\t\t\tprovision.service.local ? this.#localKeyedRegistry : this.#internalServiceBinding,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tfor (const [serviceId, { service, mode, source }] of externalServices) {\n\t\t\tconst services = this.#sourceBindings.get(source);\n\t\t\tif (services === undefined) throw new Error(`Service source for ${serviceId} is not open`);\n\t\t\tif (mode === \"singleton\") {\n\t\t\t\tthis.#serviceSlots.bindSingleton(serviceId, services.use(service) as object);\n\t\t\t} else {\n\t\t\t\tthis.#serviceSlots.bindKeyed(serviceId, services);\n\t\t\t}\n\t\t}\n\t}\n\n\t#provisions(): FacetProvision[] {\n\t\treturn [...this.#facets.values()].flatMap(({ provisions }) => provisions);\n\t}\n\n\tget #localKeyedRegistry(): LocalKeyedServiceRegistry {\n\t\tif (this.#localKeyedServices === undefined) throw new Error(\"Facet keyed services are not assembled\");\n\t\treturn this.#localKeyedServices;\n\t}\n\n\tget #internalServiceBinding(): RemoteServices {\n\t\tif (this.#internalServices === undefined) throw new Error(\"Facet remote services are not assembled\");\n\t\treturn this.#internalServices;\n\t}\n\n\tasync #disposeServiceBindings(): Promise<unknown[]> {\n\t\tconst bindings = [...this.#sourceBindings.values()];\n\t\tthis.#sourceBindings.clear();\n\t\tif (this.#internalServices !== undefined) bindings.push(this.#internalServices);\n\t\tthis.#internalServices = undefined;\n\t\tconst results = await Promise.allSettled(bindings.map((services) => services.dispose(BACKGROUND_CONTEXT)));\n\t\treturn results.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n\t}\n\n\t#assertServiceTargetAccess(): void {\n\t\tif (\n\t\t\tthis.#phase !== \"activating\" &&\n\t\t\tthis.#phase !== \"active\" &&\n\t\t\tthis.#phase !== \"reloading\" &&\n\t\t\tthis.#phase !== \"disposing\"\n\t\t) {\n\t\t\tthrow new Error(`Facet service targets cannot be used during ${this.#phase}`);\n\t\t}\n\t}\n\n\tasync #abort(extraRecords: readonly FacetRuntime[] = []): Promise<unknown[]> {\n\t\tfor (const record of this.#facets.values()) record.lifecycle.revoke();\n\t\tfor (const record of extraRecords) record.lifecycle.revoke();\n\t\treturn this.#terminate(extraRecords);\n\t}\n\n\tasync #terminate(extraRecords: readonly FacetRuntime[] = []): Promise<unknown[]> {\n\t\tthis.#phase = \"disposing\";\n\t\tconst errors = await this.#disposeLifecycles();\n\t\terrors.push(...(await disposeFacetRecords([...extraRecords].reverse())));\n\t\ttry {\n\t\t\tthis.#localKeyedServices?.dispose();\n\t\t} catch (error) {\n\t\t\terrors.push(error);\n\t\t}\n\t\tthis.#localKeyedServices = undefined;\n\t\terrors.push(...(await this.#disposeServiceBindings()));\n\t\ttry {\n\t\t\tthis.#serviceSlots.dispose();\n\t\t} catch (error) {\n\t\t\terrors.push(error);\n\t\t}\n\t\ttry {\n\t\t\tthis.#provider?.dispose();\n\t\t} catch (error) {\n\t\t\terrors.push(error);\n\t\t}\n\t\tthis.#phase = \"dead\";\n\t\treturn errors;\n\t}\n\n\tasync #disposeLifecycles(): Promise<unknown[]> {\n\t\tconst errors: unknown[] = [];\n\t\tconst order =\n\t\t\tthis.#activationOrder.length > 0 ? [...this.#activationOrder].reverse() : [...this.#facets.keys()].reverse();\n\t\tfor (const id of order) {\n\t\t\tconst record = this.#facets.get(id);\n\t\t\tif (record === undefined) continue;\n\t\t\tthis.#facets.delete(id);\n\t\t\ttry {\n\t\t\t\tawait record.lifecycle.dispose();\n\t\t\t} catch (error) {\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t}\n\t\treturn errors;\n\t}\n}\n\nasync function disposeFacetRecords(records: readonly FacetRuntime[]): Promise<unknown[]> {\n\tconst errors: unknown[] = [];\n\tfor (const record of records) {\n\t\ttry {\n\t\t\tawait record.lifecycle.dispose();\n\t\t} catch (error) {\n\t\t\terrors.push(error);\n\t\t}\n\t}\n\treturn errors;\n}\n\nfunction validateFacets(\n\trecords: readonly FacetShape[],\n\texternalServices: ReadonlyMap<string, { readonly mode: ServiceMode }>,\n): string[] {\n\tconst providers = new Map<\n\t\tstring,\n\t\t{ readonly facetId: string | undefined; readonly mode: ServiceMode | undefined }\n\t>();\n\tfor (const [serviceId, { mode }] of externalServices) providers.set(serviceId, { facetId: undefined, mode });\n\tfor (const record of records) {\n\t\tfor (const provision of record.provides) {\n\t\t\tconst existing = providers.get(provision.serviceId);\n\t\t\tif (existing !== undefined) {\n\t\t\t\tif (existing.mode !== undefined && existing.mode !== provision.mode) {\n\t\t\t\t\tthrow new Error(`Service ${provision.serviceId} is provided as both singleton and keyed`);\n\t\t\t\t}\n\t\t\t\tif (existing.facetId === undefined) {\n\t\t\t\t\tthrow new Error(`Service ${provision.serviceId} is provided by both the host and ${record.facetId}`);\n\t\t\t\t}\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Service ${provision.serviceId} is provided by both ${existing.facetId} and ${record.facetId}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tproviders.set(provision.serviceId, { facetId: record.facetId, mode: provision.mode });\n\t\t}\n\t}\n\n\tconst dependencies = new Map(records.map((record) => [record.facetId, new Set<string>()]));\n\tconst dependents = new Map(records.map((record) => [record.facetId, new Set<string>()]));\n\tfor (const record of records) {\n\t\tfor (const requirement of record.requires) {\n\t\t\tconst provider = providers.get(requirement.serviceId);\n\t\t\tif (provider === undefined) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Facet ${record.facetId} requires local/${requirement.serviceId}/${requirement.mode}, but no facet provides it`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (provider.mode !== undefined && provider.mode !== requirement.mode) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Facet ${record.facetId} requires ${requirement.serviceId} as ${requirement.mode}, but ${provider.facetId ?? \"the host\"} provides it as ${provider.mode}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (provider.facetId === undefined || provider.facetId === record.facetId) continue;\n\t\t\tdependencies.get(record.facetId)!.add(provider.facetId);\n\t\t\tdependents.get(provider.facetId)!.add(record.facetId);\n\t\t}\n\t}\n\treturn topologicalOrder(records, dependencies, dependents);\n}\n\nfunction topologicalOrder(\n\trecords: readonly FacetShape[],\n\tdependencies: ReadonlyMap<string, ReadonlySet<string>>,\n\tdependents: ReadonlyMap<string, ReadonlySet<string>>,\n): string[] {\n\tconst remaining = new Map([...dependencies].map(([id, values]) => [id, values.size]));\n\tconst ready = records.map((record) => record.facetId).filter((id) => remaining.get(id) === 0);\n\tconst order: string[] = [];\n\twhile (ready.length > 0) {\n\t\tconst id = ready.shift()!;\n\t\torder.push(id);\n\t\tfor (const dependent of dependents.get(id) ?? []) {\n\t\t\tconst count = remaining.get(dependent)! - 1;\n\t\t\tremaining.set(dependent, count);\n\t\t\tif (count === 0) ready.push(dependent);\n\t\t}\n\t}\n\tif (order.length !== records.length) {\n\t\tconst cycle = records.map((record) => record.facetId).filter((id) => remaining.get(id)! > 0);\n\t\tthrow new Error(`Facet dependency cycle: ${cycle.join(\", \")}`);\n\t}\n\treturn order;\n}\n\nfunction recordServiceReference(\n\ttarget: FacetServiceReference[],\n\tservice: { readonly id: string },\n\tmode: ServiceMode,\n): void {\n\tif (target.some((reference) => reference.serviceId === service.id && reference.mode === mode)) return;\n\ttarget.push({ serviceId: service.id, service: service as Service<unknown>, mode });\n}\n\nfunction sameFacetShape(left: FacetShape, right: FacetShape): boolean {\n\treturn sameReferences(left.requires, right.requires) && sameReferences(left.provides, right.provides);\n}\n\nfunction sameReferences(left: readonly FacetServiceReference[], right: readonly FacetServiceReference[]): boolean {\n\treturn (\n\t\tleft.length === right.length &&\n\t\tleft.every((reference) =>\n\t\t\tright.some((other) => other.serviceId === reference.serviceId && other.mode === reference.mode),\n\t\t)\n\t);\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n\treturn typeof value === \"object\" && value !== null && \"then\" in value && typeof value.then === \"function\";\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { LoadedFacets } from "../types.ts";
2
+ export declare function disposeLoadedFacets(loaded: readonly LoadedFacets[]): Promise<unknown[]>;
3
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/facets/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAG7F"}
@@ -0,0 +1,5 @@
1
+ export async function disposeLoadedFacets(loaded) {
2
+ const results = await Promise.allSettled(loaded.map((entry) => entry.dispose()));
3
+ return results.flatMap((result) => (result.status === "rejected" ? [result.reason] : []));
4
+ }
5
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/facets/loader.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAA+B;IACxE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACjF,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3F,CAAC","sourcesContent":["import type { LoadedFacets } from \"../types.ts\";\n\nexport async function disposeLoadedFacets(loaded: readonly LoadedFacets[]): Promise<unknown[]> {\n\tconst results = await Promise.allSettled(loaded.map((entry) => entry.dispose()));\n\treturn results.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n}\n"]}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Chord is a standalone application-composition runtime for agentic applications.
3
+ */
4
+ export { combineFacetLoaders, createFacetHost, createRemoteServiceBinding, createStaticFacetLoader, defineFacet, defineService, replicatedState, } from "./api.ts";
5
+ export type { Draft } from "./delta/index.ts";
6
+ export { type CopyJsonOptions, copyJson, isJsonValue } from "./json.ts";
7
+ export { isRemoteServiceErrorCode, REMOTE_SERVICE_ERROR_CODES, RemoteServiceError, type RemoteServiceErrorCode, } from "./services/errors.ts";
8
+ export { createRemoteServiceEndpoint, type RemoteServiceEndpoint, RemoteServiceProvider, type ServiceUpdatePublisher, } from "./services/provider.ts";
9
+ export { createServiceStateDecoder, createServiceStateEncoder, type ServiceStateDecoder, type ServiceStateEncoder, } from "./services/state-codec.ts";
10
+ export { createServiceCatalogueCall, createServiceSubscribeCall, createServiceUnsubscribeCall, decodeServiceControlCall, parseServiceCall, parseServiceCatalogue, parseServiceProviderUpdate, parseServiceSubscriptionSnapshot, parseWireServiceProviderUpdate, parseWireServiceSubscriptionSnapshot, type ServiceControlCall, type WireServiceInstanceSnapshot, type WireServiceMemberSnapshot, type WireServiceProviderUpdate, type WireServiceSubscriptionSnapshot, } from "./services/wire.ts";
11
+ export type { AttachedReplicatedState, Context, ContextKey, Facet, FacetEnvironment, FacetHost, FacetLoader, FacetOptions, JsonRepresentation, JsonValue, LoadedFacets, MutableReplicatedState, RemoteServiceBinding, RemoteServiceBindingOptions, RemoteServiceSource, RemoteServices, RemoteServiceTransport, ReplicatedState, ReplicatedStateDelivery, ReplicatedStateSource, ReplicatedStateSourceAttachment, ReplicatedStateSourceFrame, ReplicatedStateSourceOptions, Service, ServiceCall, ServiceCatalogueEntry, ServiceInstanceAddress, ServiceInstanceSnapshot, ServiceMemberSnapshot, ServiceMode, ServiceProviderUpdate, ServiceSpawner, ServiceSubscription, ServiceSubscriptionSnapshot, } from "./types.ts";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACN,mBAAmB,EACnB,eAAe,EACf,0BAA0B,EAC1B,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,eAAe,GACf,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EACN,wBAAwB,EACxB,0BAA0B,EAC1B,kBAAkB,EAClB,KAAK,sBAAsB,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,2BAA2B,EAC3B,KAAK,qBAAqB,EAC1B,qBAAqB,EACrB,KAAK,sBAAsB,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,yBAAyB,EACzB,yBAAyB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACN,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,EAC1B,gCAAgC,EAChC,8BAA8B,EAC9B,oCAAoC,EACpC,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,GACpC,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACX,uBAAuB,EACvB,OAAO,EACP,UAAU,EACV,KAAK,EACL,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,oBAAoB,EACpB,2BAA2B,EAC3B,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,uBAAuB,EACvB,qBAAqB,EACrB,+BAA+B,EAC/B,0BAA0B,EAC1B,4BAA4B,EAC5B,OAAO,EACP,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,WAAW,EACX,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,2BAA2B,GAC3B,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Chord is a standalone application-composition runtime for agentic applications.
3
+ */
4
+ export { combineFacetLoaders, createFacetHost, createRemoteServiceBinding, createStaticFacetLoader, defineFacet, defineService, replicatedState, } from "./api.js";
5
+ export { copyJson, isJsonValue } from "./json.js";
6
+ export { isRemoteServiceErrorCode, REMOTE_SERVICE_ERROR_CODES, RemoteServiceError, } from "./services/errors.js";
7
+ export { createRemoteServiceEndpoint, RemoteServiceProvider, } from "./services/provider.js";
8
+ export { createServiceStateDecoder, createServiceStateEncoder, } from "./services/state-codec.js";
9
+ export { createServiceCatalogueCall, createServiceSubscribeCall, createServiceUnsubscribeCall, decodeServiceControlCall, parseServiceCall, parseServiceCatalogue, parseServiceProviderUpdate, parseServiceSubscriptionSnapshot, parseWireServiceProviderUpdate, parseWireServiceSubscriptionSnapshot, } from "./services/wire.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACN,mBAAmB,EACnB,eAAe,EACf,0BAA0B,EAC1B,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,eAAe,GACf,MAAM,UAAU,CAAC;AAElB,OAAO,EAAwB,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EACN,wBAAwB,EACxB,0BAA0B,EAC1B,kBAAkB,GAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,2BAA2B,EAE3B,qBAAqB,GAErB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,yBAAyB,EACzB,yBAAyB,GAGzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACN,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,EAC1B,gCAAgC,EAChC,8BAA8B,EAC9B,oCAAoC,GAMpC,MAAM,oBAAoB,CAAC","sourcesContent":["/**\n * Chord is a standalone application-composition runtime for agentic applications.\n */\nexport {\n\tcombineFacetLoaders,\n\tcreateFacetHost,\n\tcreateRemoteServiceBinding,\n\tcreateStaticFacetLoader,\n\tdefineFacet,\n\tdefineService,\n\treplicatedState,\n} from \"./api.ts\";\nexport type { Draft } from \"./delta/index.ts\";\nexport { type CopyJsonOptions, copyJson, isJsonValue } from \"./json.ts\";\nexport {\n\tisRemoteServiceErrorCode,\n\tREMOTE_SERVICE_ERROR_CODES,\n\tRemoteServiceError,\n\ttype RemoteServiceErrorCode,\n} from \"./services/errors.ts\";\nexport {\n\tcreateRemoteServiceEndpoint,\n\ttype RemoteServiceEndpoint,\n\tRemoteServiceProvider,\n\ttype ServiceUpdatePublisher,\n} from \"./services/provider.ts\";\nexport {\n\tcreateServiceStateDecoder,\n\tcreateServiceStateEncoder,\n\ttype ServiceStateDecoder,\n\ttype ServiceStateEncoder,\n} from \"./services/state-codec.ts\";\nexport {\n\tcreateServiceCatalogueCall,\n\tcreateServiceSubscribeCall,\n\tcreateServiceUnsubscribeCall,\n\tdecodeServiceControlCall,\n\tparseServiceCall,\n\tparseServiceCatalogue,\n\tparseServiceProviderUpdate,\n\tparseServiceSubscriptionSnapshot,\n\tparseWireServiceProviderUpdate,\n\tparseWireServiceSubscriptionSnapshot,\n\ttype ServiceControlCall,\n\ttype WireServiceInstanceSnapshot,\n\ttype WireServiceMemberSnapshot,\n\ttype WireServiceProviderUpdate,\n\ttype WireServiceSubscriptionSnapshot,\n} from \"./services/wire.ts\";\nexport type {\n\tAttachedReplicatedState,\n\tContext,\n\tContextKey,\n\tFacet,\n\tFacetEnvironment,\n\tFacetHost,\n\tFacetLoader,\n\tFacetOptions,\n\tJsonRepresentation,\n\tJsonValue,\n\tLoadedFacets,\n\tMutableReplicatedState,\n\tRemoteServiceBinding,\n\tRemoteServiceBindingOptions,\n\tRemoteServiceSource,\n\tRemoteServices,\n\tRemoteServiceTransport,\n\tReplicatedState,\n\tReplicatedStateDelivery,\n\tReplicatedStateSource,\n\tReplicatedStateSourceAttachment,\n\tReplicatedStateSourceFrame,\n\tReplicatedStateSourceOptions,\n\tService,\n\tServiceCall,\n\tServiceCatalogueEntry,\n\tServiceInstanceAddress,\n\tServiceInstanceSnapshot,\n\tServiceMemberSnapshot,\n\tServiceMode,\n\tServiceProviderUpdate,\n\tServiceSpawner,\n\tServiceSubscription,\n\tServiceSubscriptionSnapshot,\n} from \"./types.ts\";\n"]}
package/dist/json.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import type { JsonValue } from "./types.ts";
2
+ export type CopyJsonOptions = {
3
+ /** Omit undefined object properties while preserving strict array semantics. */
4
+ readonly omitUndefinedProperties?: boolean;
5
+ };
6
+ /** Copy a value into an alias-free strict-JSON tree owned by the caller. */
7
+ export declare function copyJson(value: unknown, options?: CopyJsonOptions): JsonValue;
8
+ /** Return whether a value is finite strict JSON with plain objects and no cycles. */
9
+ export declare function isJsonValue(value: unknown): value is JsonValue;
10
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAS5C,MAAM,MAAM,eAAe,GAAG;IAC7B,gFAAgF;IAChF,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC3C,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,CAE7E;AAuDD,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D"}
package/dist/json.js ADDED
@@ -0,0 +1,124 @@
1
+ const DATA_DESCRIPTOR = {
2
+ value: undefined,
3
+ writable: true,
4
+ enumerable: true,
5
+ configurable: true,
6
+ };
7
+ /** Copy a value into an alias-free strict-JSON tree owned by the caller. */
8
+ export function copyJson(value, options) {
9
+ return copy(value, undefined, options?.omitUndefinedProperties === true);
10
+ }
11
+ function copy(value, ancestors, omitUndefinedProperties) {
12
+ if (value === null || typeof value === "string" || typeof value === "boolean")
13
+ return value;
14
+ if (typeof value === "number") {
15
+ if (Number.isFinite(value))
16
+ return value;
17
+ throw new TypeError("Value contains a non-finite number and is not strict JSON");
18
+ }
19
+ if (typeof value !== "object")
20
+ throw new TypeError(`Value contains a non-JSON ${typeof value}; expected strict JSON`);
21
+ const active = ancestors ?? new Set();
22
+ if (active.has(value))
23
+ throw new TypeError("Value contains cycles and is not strict JSON");
24
+ active.add(value);
25
+ try {
26
+ if (Array.isArray(value)) {
27
+ // Indices plus `length` only: extra, symbol, and missing keys all change the count.
28
+ if (Object.getPrototypeOf(value) !== Array.prototype || Reflect.ownKeys(value).length !== value.length + 1) {
29
+ throw new TypeError("Value must contain strict JSON dense plain arrays");
30
+ }
31
+ const result = new Array(value.length);
32
+ for (let index = 0; index < value.length; index++) {
33
+ const descriptor = Object.getOwnPropertyDescriptor(value, index);
34
+ if (descriptor === undefined || !descriptor.enumerable || !("value" in descriptor)) {
35
+ throw new TypeError("Value must contain strict JSON enumerable indexed data properties");
36
+ }
37
+ defineData(result, String(index), copy(descriptor.value, active, omitUndefinedProperties));
38
+ }
39
+ return result;
40
+ }
41
+ const prototype = Object.getPrototypeOf(value);
42
+ if (prototype !== Object.prototype && prototype !== null) {
43
+ throw new TypeError("Value must contain strict JSON plain objects or arrays");
44
+ }
45
+ const result = Object.create(prototype);
46
+ for (const key of Reflect.ownKeys(value)) {
47
+ if (typeof key === "symbol")
48
+ throw new TypeError("Value contains a symbol key and is not strict JSON");
49
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
50
+ if (!descriptor.enumerable || !("value" in descriptor)) {
51
+ throw new TypeError("Value must contain strict JSON enumerable data properties");
52
+ }
53
+ if (descriptor.value === undefined && omitUndefinedProperties)
54
+ continue;
55
+ defineData(result, key, copy(descriptor.value, active, omitUndefinedProperties));
56
+ }
57
+ return result;
58
+ }
59
+ finally {
60
+ active.delete(value);
61
+ }
62
+ }
63
+ function defineData(target, key, value) {
64
+ DATA_DESCRIPTOR.value = value;
65
+ Object.defineProperty(target, key, DATA_DESCRIPTOR);
66
+ DATA_DESCRIPTOR.value = undefined;
67
+ }
68
+ /** Return whether a value is finite strict JSON with plain objects and no cycles. */
69
+ export function isJsonValue(value) {
70
+ return check(value, new Set());
71
+ }
72
+ function check(value, ancestors) {
73
+ if (value === null || typeof value === "string" || typeof value === "boolean")
74
+ return true;
75
+ if (typeof value === "number")
76
+ return Number.isFinite(value);
77
+ if (Array.isArray(value)) {
78
+ if (Object.getPrototypeOf(value) !== Array.prototype)
79
+ return false;
80
+ const keys = Reflect.ownKeys(value);
81
+ if (keys.length !== value.length + 1 || keys.some((key) => typeof key !== "string"))
82
+ return false;
83
+ if (ancestors.has(value))
84
+ return false;
85
+ ancestors.add(value);
86
+ try {
87
+ for (let index = 0; index < value.length; index++) {
88
+ const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
89
+ if (descriptor === undefined ||
90
+ !descriptor.enumerable ||
91
+ !("value" in descriptor) ||
92
+ !check(descriptor.value, ancestors)) {
93
+ return false;
94
+ }
95
+ }
96
+ return true;
97
+ }
98
+ finally {
99
+ ancestors.delete(value);
100
+ }
101
+ }
102
+ if (typeof value !== "object" || value === null)
103
+ return false;
104
+ const prototype = Object.getPrototypeOf(value);
105
+ if (prototype !== Object.prototype && prototype !== null)
106
+ return false;
107
+ if (Reflect.ownKeys(value).some((key) => typeof key !== "string"))
108
+ return false;
109
+ if (ancestors.has(value))
110
+ return false;
111
+ ancestors.add(value);
112
+ try {
113
+ for (const descriptor of Object.values(Object.getOwnPropertyDescriptors(value))) {
114
+ if (!descriptor.enumerable || !("value" in descriptor) || !check(descriptor.value, ancestors)) {
115
+ return false;
116
+ }
117
+ }
118
+ return true;
119
+ }
120
+ finally {
121
+ ancestors.delete(value);
122
+ }
123
+ }
124
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsonValue } from \"./types.ts\";\n\nconst DATA_DESCRIPTOR: PropertyDescriptor = {\n\tvalue: undefined,\n\twritable: true,\n\tenumerable: true,\n\tconfigurable: true,\n};\n\nexport type CopyJsonOptions = {\n\t/** Omit undefined object properties while preserving strict array semantics. */\n\treadonly omitUndefinedProperties?: boolean;\n};\n\n/** Copy a value into an alias-free strict-JSON tree owned by the caller. */\nexport function copyJson(value: unknown, options?: CopyJsonOptions): JsonValue {\n\treturn copy(value, undefined, options?.omitUndefinedProperties === true);\n}\n\nfunction copy(value: unknown, ancestors: Set<object> | undefined, omitUndefinedProperties: boolean): JsonValue {\n\tif (value === null || typeof value === \"string\" || typeof value === \"boolean\") return value;\n\tif (typeof value === \"number\") {\n\t\tif (Number.isFinite(value)) return value;\n\t\tthrow new TypeError(\"Value contains a non-finite number and is not strict JSON\");\n\t}\n\tif (typeof value !== \"object\")\n\t\tthrow new TypeError(`Value contains a non-JSON ${typeof value}; expected strict JSON`);\n\tconst active = ancestors ?? new Set<object>();\n\tif (active.has(value)) throw new TypeError(\"Value contains cycles and is not strict JSON\");\n\tactive.add(value);\n\ttry {\n\t\tif (Array.isArray(value)) {\n\t\t\t// Indices plus `length` only: extra, symbol, and missing keys all change the count.\n\t\t\tif (Object.getPrototypeOf(value) !== Array.prototype || Reflect.ownKeys(value).length !== value.length + 1) {\n\t\t\t\tthrow new TypeError(\"Value must contain strict JSON dense plain arrays\");\n\t\t\t}\n\t\t\tconst result = new Array<JsonValue>(value.length);\n\t\t\tfor (let index = 0; index < value.length; index++) {\n\t\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(value, index);\n\t\t\t\tif (descriptor === undefined || !descriptor.enumerable || !(\"value\" in descriptor)) {\n\t\t\t\t\tthrow new TypeError(\"Value must contain strict JSON enumerable indexed data properties\");\n\t\t\t\t}\n\t\t\t\tdefineData(result, String(index), copy(descriptor.value, active, omitUndefinedProperties));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tconst prototype = Object.getPrototypeOf(value);\n\t\tif (prototype !== Object.prototype && prototype !== null) {\n\t\t\tthrow new TypeError(\"Value must contain strict JSON plain objects or arrays\");\n\t\t}\n\t\tconst result = Object.create(prototype) as Record<string, JsonValue>;\n\t\tfor (const key of Reflect.ownKeys(value)) {\n\t\t\tif (typeof key === \"symbol\") throw new TypeError(\"Value contains a symbol key and is not strict JSON\");\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(value, key)!;\n\t\t\tif (!descriptor.enumerable || !(\"value\" in descriptor)) {\n\t\t\t\tthrow new TypeError(\"Value must contain strict JSON enumerable data properties\");\n\t\t\t}\n\t\t\tif (descriptor.value === undefined && omitUndefinedProperties) continue;\n\t\t\tdefineData(result, key, copy(descriptor.value, active, omitUndefinedProperties));\n\t\t}\n\t\treturn result;\n\t} finally {\n\t\tactive.delete(value);\n\t}\n}\n\nfunction defineData(target: object, key: PropertyKey, value: JsonValue): void {\n\tDATA_DESCRIPTOR.value = value;\n\tObject.defineProperty(target, key, DATA_DESCRIPTOR);\n\tDATA_DESCRIPTOR.value = undefined;\n}\n\n/** Return whether a value is finite strict JSON with plain objects and no cycles. */\nexport function isJsonValue(value: unknown): value is JsonValue {\n\treturn check(value, new Set<object>());\n}\n\nfunction check(value: unknown, ancestors: Set<object>): boolean {\n\tif (value === null || typeof value === \"string\" || typeof value === \"boolean\") return true;\n\tif (typeof value === \"number\") return Number.isFinite(value);\n\tif (Array.isArray(value)) {\n\t\tif (Object.getPrototypeOf(value) !== Array.prototype) return false;\n\t\tconst keys = Reflect.ownKeys(value);\n\t\tif (keys.length !== value.length + 1 || keys.some((key) => typeof key !== \"string\")) return false;\n\t\tif (ancestors.has(value)) return false;\n\t\tancestors.add(value);\n\t\ttry {\n\t\t\tfor (let index = 0; index < value.length; index++) {\n\t\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n\t\t\t\tif (\n\t\t\t\t\tdescriptor === undefined ||\n\t\t\t\t\t!descriptor.enumerable ||\n\t\t\t\t\t!(\"value\" in descriptor) ||\n\t\t\t\t\t!check(descriptor.value, ancestors)\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} finally {\n\t\t\tancestors.delete(value);\n\t\t}\n\t}\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst prototype = Object.getPrototypeOf(value);\n\tif (prototype !== Object.prototype && prototype !== null) return false;\n\tif (Reflect.ownKeys(value).some((key) => typeof key !== \"string\")) return false;\n\tif (ancestors.has(value)) return false;\n\tancestors.add(value);\n\ttry {\n\t\tfor (const descriptor of Object.values(Object.getOwnPropertyDescriptors(value))) {\n\t\t\tif (!descriptor.enumerable || !(\"value\" in descriptor) || !check(descriptor.value, ancestors)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t} finally {\n\t\tancestors.delete(value);\n\t}\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import type { FacetLoader } from "../types.ts";
2
+ import { type FacetBundleArtifact, type FacetBundleManifest } from "./manifest.ts";
3
+ export type FacetBundleExternalResolver = (specifier: string) => string | URL | undefined;
4
+ export interface FacetBundleLoaderOptions {
5
+ readonly manifestPath: string | URL;
6
+ readonly entry: string;
7
+ /** Verify the entry's SHA-256 integrity before evaluating it. Defaults to true. */
8
+ readonly verifyIntegrity?: boolean;
9
+ /** Resolve host-provided external imports when the bundle is outside the host's package tree. */
10
+ readonly resolveExternal?: FacetBundleExternalResolver;
11
+ }
12
+ export interface FacetBundleArtifactLoaderOptions {
13
+ readonly artifact: unknown;
14
+ /** Resolve host-provided external imports against the receiving application. */
15
+ readonly resolveExternal?: FacetBundleExternalResolver;
16
+ /** Parent directory for materialized module generations. Defaults to the operating system temp directory. */
17
+ readonly temporaryDirectory?: string;
18
+ }
19
+ /** Read and validate a versioned facet bundle manifest. */
20
+ export declare function readFacetBundleManifest(path: string | URL): Promise<FacetBundleManifest>;
21
+ /** Read and verify one transportable entry from a facet bundle on disk. */
22
+ export declare function readFacetBundleArtifact(options: {
23
+ readonly manifestPath: string | URL;
24
+ readonly entry: string;
25
+ }): Promise<FacetBundleArtifact>;
26
+ /** Materialize a transported artifact and create a fresh VM-compiled CommonJS generation for each load. */
27
+ export declare function createFacetBundleArtifactLoader(options: FacetBundleArtifactLoaderOptions): FacetLoader;
28
+ /** Create a reusable loader for one opaque entry in a facet bundle manifest. */
29
+ export declare function createFacetBundleLoader(options: FacetBundleLoaderOptions): FacetLoader;
30
+ //# sourceMappingURL=bundle-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-loader.d.ts","sourceRoot":"","sources":["../../src/node/bundle-loader.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAS,WAAW,EAAgB,MAAM,aAAa,CAAC;AACpE,OAAO,EAMN,KAAK,mBAAmB,EAExB,KAAK,mBAAmB,EACxB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,2BAA2B,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC;AAE1F,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,mFAAmF;IACnF,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,iGAAiG;IACjG,QAAQ,CAAC,eAAe,CAAC,EAAE,2BAA2B,CAAC;CACvD;AAED,MAAM,WAAW,gCAAgC;IAChD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,eAAe,CAAC,EAAE,2BAA2B,CAAC;IACvD,6GAA6G;IAC7G,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACrC;AAMD,2DAA2D;AAC3D,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAS9F;AAED,2EAA2E;AAC3E,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACtD,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAsB/B;AAED,2GAA2G;AAC3G,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,gCAAgC,GAAG,WAAW,CA+CtG;AAED,gFAAgF;AAChF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,WAAW,CAmCtF"}