dougong 0.8.2 → 0.9.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 (78) hide show
  1. package/README.md +22 -97
  2. package/dist/advanced.d.ts +8 -0
  3. package/dist/advanced.d.ts.map +1 -0
  4. package/dist/advanced.js +39 -0
  5. package/dist/composition/change-set.d.ts +49 -0
  6. package/dist/composition/change-set.d.ts.map +1 -0
  7. package/dist/composition/configuration.d.ts +9 -0
  8. package/dist/composition/configuration.d.ts.map +1 -0
  9. package/dist/composition/declarations.d.ts +53 -0
  10. package/dist/composition/declarations.d.ts.map +1 -0
  11. package/dist/composition/group.d.ts +10 -0
  12. package/dist/composition/group.d.ts.map +1 -0
  13. package/dist/composition/installation-graph.d.ts +17 -0
  14. package/dist/composition/installation-graph.d.ts.map +1 -0
  15. package/dist/composition/installation.d.ts +34 -0
  16. package/dist/composition/installation.d.ts.map +1 -0
  17. package/dist/composition/plan.d.ts +82 -0
  18. package/dist/composition/plan.d.ts.map +1 -0
  19. package/dist/composition/planner.d.ts +18 -0
  20. package/dist/composition/planner.d.ts.map +1 -0
  21. package/dist/composition/plugin-description.d.ts +34 -0
  22. package/dist/composition/plugin-description.d.ts.map +1 -0
  23. package/dist/composition/plugin.d.ts +68 -0
  24. package/dist/composition/plugin.d.ts.map +1 -0
  25. package/dist/contracts/contract-registry.d.ts +18 -0
  26. package/dist/contracts/contract-registry.d.ts.map +1 -0
  27. package/dist/contracts/contracts.d.ts +51 -0
  28. package/dist/contracts/contracts.d.ts.map +1 -0
  29. package/dist/contracts/errors.d.ts +53 -0
  30. package/dist/contracts/errors.d.ts.map +1 -0
  31. package/dist/contracts/logging.d.ts +16 -0
  32. package/dist/contracts/logging.d.ts.map +1 -0
  33. package/dist/contracts/resource.d.ts +14 -0
  34. package/dist/contracts/resource.d.ts.map +1 -0
  35. package/dist/contracts/status.d.ts +3 -0
  36. package/dist/contracts/status.d.ts.map +1 -0
  37. package/dist/contributions/contribution-store.d.ts +50 -0
  38. package/dist/contributions/contribution-store.d.ts.map +1 -0
  39. package/dist/events/event-hub.d.ts +27 -0
  40. package/dist/events/event-hub.d.ts.map +1 -0
  41. package/dist/execution/engine.d.ts +26 -0
  42. package/dist/execution/engine.d.ts.map +1 -0
  43. package/dist/execution/host-api.d.ts +43 -0
  44. package/dist/execution/host-api.d.ts.map +1 -0
  45. package/dist/execution/host.d.ts +3 -0
  46. package/dist/execution/host.d.ts.map +1 -0
  47. package/dist/execution/instance.d.ts +33 -0
  48. package/dist/execution/instance.d.ts.map +1 -0
  49. package/dist/index.d.ts +17 -3
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +2207 -8
  52. package/dist/inspection/diagnostics.d.ts +36 -0
  53. package/dist/inspection/diagnostics.d.ts.map +1 -0
  54. package/dist/internal/abort.d.ts +4 -0
  55. package/dist/internal/abort.d.ts.map +1 -0
  56. package/dist/internal/data-array.d.ts +3 -0
  57. package/dist/internal/data-array.d.ts.map +1 -0
  58. package/dist/internal/disposal-runtime.d.ts +5 -0
  59. package/dist/internal/disposal-runtime.d.ts.map +1 -0
  60. package/dist/internal/record.d.ts +8 -0
  61. package/dist/internal/record.d.ts.map +1 -0
  62. package/dist/internal/serial-queue.d.ts +6 -0
  63. package/dist/internal/serial-queue.d.ts.map +1 -0
  64. package/dist/internal/synchronous-result.d.ts +3 -0
  65. package/dist/internal/synchronous-result.d.ts.map +1 -0
  66. package/dist/lifetime/lifetime-diagnostics.d.ts +21 -0
  67. package/dist/lifetime/lifetime-diagnostics.d.ts.map +1 -0
  68. package/dist/lifetime/lifetime.d.ts +71 -0
  69. package/dist/lifetime/lifetime.d.ts.map +1 -0
  70. package/dist/observation/readonly-map.d.ts +13 -0
  71. package/dist/observation/readonly-map.d.ts.map +1 -0
  72. package/dist/observation/snapshot-view.d.ts +14 -0
  73. package/dist/observation/snapshot-view.d.ts.map +1 -0
  74. package/dist/record-CZVpq8vk.js +493 -0
  75. package/package.json +17 -7
  76. package/runtime/abort-listener.d.mts +2 -0
  77. package/runtime/abort-listener.node.mjs +26 -0
  78. package/runtime/abort-listener.web.mjs +7 -0
package/README.md CHANGED
@@ -1,111 +1,36 @@
1
1
  # dougong
2
2
 
3
- [简体中文](#简体中文) · [English](#english)
3
+ The TypeScript plugin composition kernel. This package owns contracts, declarations, immutable plans, execution, resource lifetimes and diagnostic projections.
4
4
 
5
- ---
6
-
7
- ## 简体中文
8
-
9
- **能力组合与结构化生命周期内核**,纯 JavaScript/TypeScript。
10
-
11
- 这是门面包,聚合 [`@dougongjs/core`](https://www.npmjs.com/package/@dougongjs/core)、[`@dougongjs/reactive`](https://www.npmjs.com/package/@dougongjs/reactive) 与 [`@dougongjs/platform`](https://www.npmjs.com/package/@dougongjs/platform)。它只做 re-export,不包含任何逻辑——架构门禁会强制这一点。
12
-
13
- ```sh
14
- npm install dougong
15
- ```
16
-
17
- ```ts
18
- import { createHost, definePlugin, service } from "dougong"
19
-
20
- const CLOCK = service<Clock>("app/clock")
21
-
22
- const clock = definePlugin({
23
- name: "app.clock",
24
- provides: { clock: CLOCK },
25
- setup: () => ({ clock: { now: () => new Date() } }),
26
- })
27
-
28
- const greeter = definePlugin({
29
- name: "app.greeter",
30
- requires: { clock: CLOCK },
31
- setup(ctx) {
32
- console.log(ctx.clock.now())
33
- },
34
- })
35
-
36
- const host = createHost({ name: "hello" })
37
- host.install(greeter)
38
- host.install(clock)
39
- await host.start()
40
- ```
41
-
42
- 六个原子:**Service**(稳定的一对一能力)、**ExtensionPoint**(开放贡献集合)、**Event**(瞬时事实)、**Lifetime**(结构化所有权)、**Plugin**、**Host**。
43
-
44
- 三条核心保证:依赖与所有权**显式**写在声明里;每个语义只有**一条**正式路径;事务只暴露**已提交**状态。
45
-
46
- ### 环境要求
47
-
48
- Node.js ≥ 22;浏览器 / WebView 基线为 Chrome / Edge 119、Firefox 121、Safari 17.4,并提供 `Promise.withResolvers()`。显式 `.dispose()` 在全部基线上可用;`using` / `await using` 还要求运行时原生提供或应用预先 polyfill `Symbol.dispose` / `Symbol.asyncDispose`。Dougong 不修改全局对象。TypeScript 消费者需要:
49
-
50
- ```json
51
- "lib": ["ES2024", "DOM", "DOM.Iterable", "ESNext.Disposable"]
52
- ```
53
-
54
- ---
55
-
56
- ## English
57
-
58
- A **capability composition and structured lifetime kernel** in pure JavaScript/TypeScript.
59
-
60
- This is the facade package aggregating [`@dougongjs/core`](https://www.npmjs.com/package/@dougongjs/core), [`@dougongjs/reactive`](https://www.npmjs.com/package/@dougongjs/reactive) and [`@dougongjs/platform`](https://www.npmjs.com/package/@dougongjs/platform). It only re-exports and contains no logic — an architecture gate enforces that.
61
-
62
- ```sh
63
- npm install dougong
64
- ```
5
+ Upgrading from 0.8.3? Read the [migration guide](https://tangerg.github.io/dougong/en/guide/migrating-to-0.9) and [0.9.0 release notes](https://tangerg.github.io/dougong/en/reference/release-0.9.0).
65
6
 
66
7
  ```ts
67
- import { createHost, definePlugin, service } from "dougong"
68
-
69
- const CLOCK = service<Clock>("app/clock")
70
-
71
- const clock = definePlugin({
72
- name: "app.clock",
73
- provides: { clock: CLOCK },
74
- setup: () => ({ clock: { now: () => new Date() } }),
75
- })
8
+ import { createHost, definePlugin, service } from "dougong";
76
9
 
10
+ const GREETER = service<{ greet(name: string): string }>("application/greeter");
77
11
  const greeter = definePlugin({
78
- name: "app.greeter",
79
- requires: { clock: CLOCK },
80
- setup(ctx) {
81
- console.log(ctx.clock.now())
12
+ name: "application.greeter",
13
+ provides: { greeter: GREETER },
14
+ setup() {
15
+ return { greeter: { greet: (name) => `Hello, ${name}` } };
82
16
  },
83
- })
84
-
85
- const host = createHost({ name: "hello" })
86
- host.install(greeter)
87
- host.install(clock)
88
- await host.start()
17
+ });
18
+
19
+ const host = createHost({
20
+ name: "application",
21
+ installations: [{ id: "greeter", plugin: greeter }],
22
+ });
23
+ await host.start();
24
+ const message = await host.use(GREETER, (service) => service.greet("Dougong"));
25
+ await host[Symbol.asyncDispose]();
89
26
  ```
90
27
 
91
- Six atoms: **Service** (a stable one-to-one capability), **ExtensionPoint** (an open contribution set), **Event** (a transient fact), **Lifetime** (structured ownership), **Plugin**, **Host**.
92
-
93
- Three core guarantees: dependencies and ownership are written **explicitly** in declarations; every semantic has exactly **one** canonical path; transactions expose only **committed** state.
94
-
95
- ### Requirements
96
-
97
- Node.js ≥ 22; Chrome / Edge 119, Firefox 121 or Safari 17.4 for browsers and WebViews, with `Promise.withResolvers()`. Explicit `.dispose()` works throughout; `using` / `await using` additionally require native or application-polyfilled `Symbol.dispose` / `Symbol.asyncDispose`. Dougong does not mutate globals. TypeScript consumers need:
98
-
99
- ```json
100
- "lib": ["ES2024", "DOM", "DOM.Iterable", "ESNext.Disposable"]
101
- ```
28
+ Use `host.change()`, `host.plan(change)` and `host.apply(plan)` for changes. Services and executable contributions are borrowed with `host.use` and `ContributionView.use`. Standard resources belong to `context.lifetime`; context dependencies live under `context.dependencies`.
102
29
 
103
- ---
30
+ Read and observe execution through `host.diagnostics.get()` and `host.diagnostics.subscribe()`. Successful transitions resolve with the state revision and affected installations; failures reject. Cleanup failure retains dependent resources while releasing independently safe branches. It quarantines the whole Host permanently: creating a replacement does not dispose old resources. Follow the [quarantine procedure](https://tangerg.github.io/dougong/en/guide/transactions#quarantine) before takeover.
104
31
 
105
- - 文档站 / Documentation: https://tangerg.github.io/dougong/
106
- - 仓库 / Repository: https://github.com/Tangerg/dougong
32
+ The formal `dougong/advanced` subpath exports stable snapshot publishing, immutable map snapshots, serial queues and record normalization for downstream composition. Optional delivery and reactivity live in `@dougongjs/platform` and `@dougongjs/reactive`.
107
33
 
108
- > 早期 0.x 开发阶段,当前不承诺向后兼容。
109
- > Early 0.x development; no backward-compatibility promises yet.
34
+ ESM; Node.js 22+, Chrome/Edge 119+, Firefox 124+, Safari 17.4+.
110
35
 
111
- MIT
36
+ [API documentation](https://tangerg.github.io/dougong/en/reference/core-api) · [Architecture](https://tangerg.github.io/dougong/en/reference/architecture)
@@ -0,0 +1,8 @@
1
+ export { SnapshotPublisher, batchSnapshotNotifications } from './observation/snapshot-view.js';
2
+ export { ReadonlyMapSnapshot } from './observation/readonly-map.js';
3
+ export { SerialQueue } from './internal/serial-queue.js';
4
+ export { normalizePlainRecord } from './internal/record.js';
5
+ export { captureDataArray } from './internal/data-array.js';
6
+ export { onAbort } from './internal/abort.js';
7
+ export { captureLogger } from './contracts/logging.js';
8
+ //# sourceMappingURL=advanced.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced.d.ts","sourceRoot":"","sources":["../src/advanced.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { _ as e, i as t, m as n, n as r, o as i, s as a, t as o } from "./record-CZVpq8vk.js";
2
+ // src/observation/readonly-map.ts
3
+ var s = class {
4
+ #e;
5
+ constructor(e = []) {
6
+ if (!e || typeof e != "object" && typeof e != "function") throw TypeError("ReadonlyMapSnapshot values must be an iterable object");
7
+ this.#e = new Map(e), Object.freeze(this);
8
+ }
9
+ get size() {
10
+ return this.#e.size;
11
+ }
12
+ get(e) {
13
+ return this.#e.get(e);
14
+ }
15
+ has(e) {
16
+ return this.#e.has(e);
17
+ }
18
+ forEach(e, t) {
19
+ if (typeof e != "function") throw TypeError("ReadonlyMapSnapshot callback must be a function");
20
+ for (let [n, r] of this.#e) Reflect.apply(e, t, [
21
+ r,
22
+ n,
23
+ this
24
+ ]);
25
+ }
26
+ entries() {
27
+ return this.#e.entries();
28
+ }
29
+ keys() {
30
+ return this.#e.keys();
31
+ }
32
+ values() {
33
+ return this.#e.values();
34
+ }
35
+ [Symbol.iterator]() {
36
+ return this.entries();
37
+ }
38
+ };
39
+ export { s as ReadonlyMapSnapshot, r as SerialQueue, i as SnapshotPublisher, a as batchSnapshotNotifications, n as captureDataArray, t as captureLogger, o as normalizePlainRecord, e as onAbort };
@@ -0,0 +1,49 @@
1
+ import { ConfigurationValue } from './configuration.js';
2
+ import { NormalizedPlugin } from './plugin.js';
3
+ import { ChangeSet, InstallationOrigin } from './declarations.js';
4
+ import { InstallationDeclaration, InstallationRecord } from './installation.js';
5
+ import { GroupNode } from './group.js';
6
+ export type ChangeOperation = {
7
+ readonly kind: "install";
8
+ readonly installation: InstallationRecord;
9
+ readonly declaration: InstallationDeclaration;
10
+ } | {
11
+ readonly kind: "update";
12
+ readonly installation: InstallationRecord;
13
+ readonly update: Readonly<{
14
+ plugin?: NormalizedPlugin;
15
+ configuration?: ConfigurationValue | undefined;
16
+ origin?: InstallationOrigin | undefined;
17
+ }>;
18
+ } | {
19
+ readonly kind: "remove";
20
+ readonly installation: InstallationRecord;
21
+ } | {
22
+ readonly kind: "group";
23
+ readonly group: GroupNode;
24
+ } | {
25
+ readonly kind: "remove-group";
26
+ readonly group: GroupNode;
27
+ };
28
+ export interface ChangePort {
29
+ readonly create: (id: string, group: GroupNode | undefined) => InstallationRecord;
30
+ readonly resolve: (installation: object) => InstallationRecord;
31
+ readonly createGroup: (id: string, parent: GroupNode | undefined) => GroupNode;
32
+ readonly resolveGroup: (group: object) => GroupNode;
33
+ }
34
+ export declare function assertId(id: unknown, label: string): asserts id is string;
35
+ interface DraftState {
36
+ readonly port: ChangePort;
37
+ readonly operations: ChangeOperation[];
38
+ readonly targets: Set<object>;
39
+ }
40
+ export declare class ChangeSets {
41
+ #private;
42
+ create(port: ChangePort): ChangeSet;
43
+ take(change: ChangeSet): ReadonlyArray<ChangeOperation>;
44
+ requireOpen(change: ChangeSet): DraftState;
45
+ track(installation: InstallationRecord): void;
46
+ close(revision: number): void;
47
+ }
48
+ export {};
49
+ //# sourceMappingURL=change-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change-set.d.ts","sourceRoot":"","sources":["../../src/composition/change-set.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAmC,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAErF,OAAO,KAAK,EACV,SAAS,EAIT,kBAAkB,EAEnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAIL,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,MAAM,eAAe,GACvB;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAC;CAC/C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;QACxB,MAAM,CAAC,EAAE,gBAAgB,CAAC;QAC1B,aAAa,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;QAC/C,MAAM,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;KACzC,CAAC,CAAC;CACJ,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAEjE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,KAAK,kBAAkB,CAAC;IAClF,QAAQ,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,kBAAkB,CAAC;IAC/D,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,SAAS,KAAK,SAAS,CAAC;IAC/E,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;CACrD;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,IAAI,MAAM,CAIzE;AAED,UAAU,UAAU;IAClB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,qBAAa,UAAU;;IAIrB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS;IAMnC,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,CAAC,eAAe,CAAC;IAYvD,WAAW,CAAC,MAAM,EAAE,SAAS;IAM7B,KAAK,CAAC,YAAY,EAAE,kBAAkB;IAItC,KAAK,CAAC,QAAQ,EAAE,MAAM;CASvB"}
@@ -0,0 +1,9 @@
1
+ import { StandardSchemaV1 } from '@standard-schema/spec';
2
+ export type ConfigurationValue = null | boolean | string | number | ReadonlyArray<ConfigurationValue> | {
3
+ readonly [key: string]: ConfigurationValue;
4
+ };
5
+ export declare function captureConfiguration(input: unknown): ConfigurationValue | undefined;
6
+ export declare function resolvePluginConfiguration(schema: StandardSchemaV1<unknown, unknown> | undefined, input: ConfigurationValue | undefined, installationId: string, validity?: AbortSignal): Promise<{
7
+ readonly value: ConfigurationValue | undefined;
8
+ }>;
9
+ //# sourceMappingURL=configuration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/composition/configuration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAK9D,MAAM,MAAM,kBAAkB,GAC1B,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,aAAa,CAAC,kBAAkB,CAAC,GACjC;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAA;CAAE,CAAC;AASnD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,GAAG,SAAS,CAiDnF;AAGD,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,EACtD,KAAK,EAAE,kBAAkB,GAAG,SAAS,EACrC,cAAc,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC;IAAE,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAA;CAAE,CAAC,CAkC7D"}
@@ -0,0 +1,53 @@
1
+ import { AnyPlugin, Plugin } from './plugin.js';
2
+ import { ConfigurationValue } from './configuration.js';
3
+ import { InstallationState } from '../contracts/status.js';
4
+ export type InstallationOrigin = Readonly<Record<string, ConfigurationValue>>;
5
+ declare const installationBrand: unique symbol;
6
+ declare const groupBrand: unique symbol;
7
+ export interface Installation<Declaration extends AnyPlugin = AnyPlugin> {
8
+ readonly [installationBrand]: (declaration: Declaration) => Declaration;
9
+ readonly id: string;
10
+ readonly groupId: string | undefined;
11
+ readonly status: InstallationState;
12
+ readonly origin: InstallationOrigin | undefined;
13
+ }
14
+ export interface Group {
15
+ readonly [groupBrand]: true;
16
+ readonly id: string;
17
+ readonly parentId: string | undefined;
18
+ }
19
+ type ConfigurationInputOf<Declaration extends AnyPlugin> = Declaration extends Plugin<infer _Configuration, infer _Requires, infer _Provides, infer Input> ? Input : unknown;
20
+ export type InstallationOptions<Declaration extends AnyPlugin = AnyPlugin> = {
21
+ readonly id: string;
22
+ readonly group?: Group;
23
+ readonly origin?: InstallationOrigin;
24
+ } & ([ConfigurationInputOf<Declaration>] extends [void] ? {
25
+ readonly configuration?: ConfigurationInputOf<Declaration>;
26
+ } : {
27
+ readonly configuration: ConfigurationInputOf<Declaration>;
28
+ });
29
+ export type InstallationUpdate<Declaration extends AnyPlugin = AnyPlugin> = {
30
+ readonly plugin: Declaration;
31
+ readonly configuration?: ConfigurationInputOf<Declaration>;
32
+ readonly origin?: InstallationOrigin;
33
+ } | {
34
+ readonly plugin?: never;
35
+ readonly configuration: ConfigurationInputOf<Declaration>;
36
+ readonly origin?: never;
37
+ };
38
+ export interface ChangeSet {
39
+ install<Declaration extends AnyPlugin>(plugin: Declaration, options: InstallationOptions<Declaration>): Installation<Declaration>;
40
+ update<Declaration extends AnyPlugin>(installation: Installation<Declaration>, update: InstallationUpdate<Declaration>): void;
41
+ remove<Declaration extends AnyPlugin>(installation: Installation<Declaration>): void;
42
+ group(id: string, parent?: Group): Group;
43
+ removeGroup(group: Group): void;
44
+ }
45
+ export interface InitialInstallation {
46
+ readonly id: string;
47
+ readonly plugin: AnyPlugin;
48
+ readonly configuration?: unknown;
49
+ readonly origin?: InstallationOrigin;
50
+ readonly groupId?: string;
51
+ }
52
+ export {};
53
+ //# sourceMappingURL=declarations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declarations.d.ts","sourceRoot":"","sources":["../../src/composition/declarations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Group } from './declarations.js';
2
+ export declare class GroupNode {
3
+ readonly id: string;
4
+ readonly parent: GroupNode | undefined;
5
+ readonly facade: Group;
6
+ constructor(id: string, parent: GroupNode | undefined);
7
+ get parentId(): string | undefined;
8
+ }
9
+ export declare function buildInitialGroups(parents: ReadonlyMap<string, string | undefined>, create: (id: string, parent: GroupNode | undefined) => GroupNode): Map<string, GroupNode>;
10
+ //# sourceMappingURL=group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../src/composition/group.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,qBAAa,SAAS;IAGlB,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS;IAHxC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;gBAEZ,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,SAAS,GAAG,SAAS;IAKxC,IAAI,QAAQ,uBAEX;CACF;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAChD,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,SAAS,KAAK,SAAS,0BAqBjE"}
@@ -0,0 +1,17 @@
1
+ import { ContractKind } from '../contracts/contracts.js';
2
+ import { InstallationDeclaration, InstallationRecord } from './installation.js';
3
+ export declare class InstallationGraph {
4
+ #private;
5
+ readonly declarations: ReadonlyMap<InstallationRecord, InstallationDeclaration>;
6
+ readonly byId: ReadonlyMap<string, InstallationRecord>;
7
+ readonly order: ReadonlyArray<InstallationRecord>;
8
+ readonly layers: ReadonlyArray<ReadonlyArray<InstallationRecord>>;
9
+ readonly providers: ReadonlyMap<string, InstallationRecord>;
10
+ readonly dependents: ReadonlyMap<InstallationRecord, ReadonlySet<InstallationRecord>>;
11
+ readonly contractKinds: ReadonlyMap<string, ContractKind>;
12
+ private constructor();
13
+ static build(declarations: ReadonlyMap<InstallationRecord, InstallationDeclaration>): InstallationGraph;
14
+ declarationFor(installation: InstallationRecord): InstallationDeclaration;
15
+ affectedByTransitionTo(other: InstallationGraph, changed: ReadonlyArray<InstallationRecord>): Set<InstallationRecord>;
16
+ }
17
+ //# sourceMappingURL=installation-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation-graph.d.ts","sourceRoot":"","sources":["../../src/composition/installation-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAIrF,qBAAa,iBAAiB;;IAE1B,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;IAC/E,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACtD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,kBAAkB,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;IACjE,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAC3D,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,kBAAkB,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;IACrF,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC;IAP3D,OAAO;IAUP,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;IAuBnF,cAAc,CAAC,YAAY,EAAE,kBAAkB;IAO/C,sBAAsB,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC;CAmB5F"}
@@ -0,0 +1,34 @@
1
+ import { InstallationState } from '../contracts/status.js';
2
+ import { Installation, InstallationOrigin } from './declarations.js';
3
+ import { AnyPlugin, NormalizedPlugin } from './plugin.js';
4
+ import { ConfigurationValue } from './configuration.js';
5
+ import { GroupNode } from './group.js';
6
+ export interface InstallationDeclaration {
7
+ readonly plugin: NormalizedPlugin;
8
+ readonly configuration: ConfigurationValue | undefined;
9
+ readonly origin: InstallationOrigin | undefined;
10
+ }
11
+ export declare function claimInstallationId(ids: Set<string>, id: string): void;
12
+ export declare function captureInstallationDeclaration(plugin: AnyPlugin, configuration: unknown, origin: unknown): InstallationDeclaration;
13
+ export declare function captureOrigin(value: unknown): InstallationOrigin | undefined;
14
+ export interface InstallationProjection {
15
+ readonly status: InstallationState;
16
+ readonly origin: InstallationOrigin | undefined;
17
+ }
18
+ export declare class PendingInstallations {
19
+ #private;
20
+ attach(installation: InstallationRecord): void;
21
+ retire(): void;
22
+ }
23
+ export declare class InstallationRecord {
24
+ #private;
25
+ readonly id: string;
26
+ readonly index: number;
27
+ readonly group: GroupNode | undefined;
28
+ readonly facade: Installation;
29
+ constructor(id: string, index: number, group: GroupNode | undefined);
30
+ get groupId(): string | undefined;
31
+ attach(read: () => InstallationProjection): void;
32
+ detach(projection: InstallationProjection): void;
33
+ }
34
+ //# sourceMappingURL=installation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation.d.ts","sourceRoot":"","sources":["../../src/composition/installation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAmB,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;CACjD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,QAI/D;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,OAAO,EACtB,MAAM,EAAE,OAAO,GACd,uBAAuB,CAMzB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,GAAG,SAAS,CAO5E;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;CACjD;AAGD,qBAAa,oBAAoB;;IAK/B,MAAM,CAAC,YAAY,EAAE,kBAAkB;IAIvC,MAAM;CAGP;AAED,qBAAa,kBAAkB;;IAM3B,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS;IAPvC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;gBAKnB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,GAAG,SAAS;IAevC,IAAI,OAAO,uBAEV;IAED,MAAM,CAAC,IAAI,EAAE,MAAM,sBAAsB;IAIzC,MAAM,CAAC,UAAU,EAAE,sBAAsB;CAQ1C"}
@@ -0,0 +1,82 @@
1
+ import { InstallationGraph } from './installation-graph.js';
2
+ import { InstallationDeclaration, InstallationRecord } from './installation.js';
3
+ import { GroupNode } from './group.js';
4
+ import { ConfigurationValue } from './configuration.js';
5
+ import { InstallationOrigin } from './declarations.js';
6
+ export type TransitionIntent = "change" | "start" | "stop";
7
+ export interface BindingReport {
8
+ readonly installation: string;
9
+ readonly contract: string;
10
+ readonly optional: boolean;
11
+ readonly provider: string | undefined;
12
+ }
13
+ export interface ImpactReason {
14
+ readonly installation: string;
15
+ readonly kind: "installed" | "updated" | "removed" | "provider_changed" | "start" | "stop";
16
+ readonly contract?: string;
17
+ readonly provider?: string;
18
+ readonly previousProvider?: string;
19
+ }
20
+ export interface DeclarationSnapshot {
21
+ readonly pluginName: string;
22
+ readonly origin: InstallationOrigin | undefined;
23
+ }
24
+ export type PlanOperation = {
25
+ readonly kind: "install" | "update" | "remove";
26
+ readonly id: string;
27
+ readonly before: DeclarationSnapshot | undefined;
28
+ readonly after: DeclarationSnapshot | undefined;
29
+ } | {
30
+ readonly kind: "group" | "remove-group";
31
+ readonly id: string;
32
+ readonly parentId: string | undefined;
33
+ };
34
+ export interface PlanReport {
35
+ readonly baseStateRevision: number;
36
+ readonly intent: TransitionIntent;
37
+ readonly operations: ReadonlyArray<PlanOperation>;
38
+ readonly bindings: {
39
+ readonly before: ReadonlyArray<BindingReport>;
40
+ readonly after: ReadonlyArray<BindingReport>;
41
+ };
42
+ readonly affectedInstallations: ReadonlyArray<string>;
43
+ readonly reasons: ReadonlyArray<ImpactReason>;
44
+ readonly stopOrder: ReadonlyArray<string>;
45
+ readonly prepareOrder: ReadonlyArray<string>;
46
+ readonly publishOrder: ReadonlyArray<string>;
47
+ readonly execution: {
48
+ readonly atomicPublication: true;
49
+ readonly externalEffectsRollback: false;
50
+ };
51
+ }
52
+ declare const planBrand: unique symbol;
53
+ export interface Plan {
54
+ readonly [planBrand]: true;
55
+ readonly report: PlanReport;
56
+ }
57
+ export interface PreparedTransition {
58
+ readonly groups: ReadonlyMap<string, GroupNode>;
59
+ readonly graph: InstallationGraph;
60
+ readonly affected: ReadonlySet<InstallationRecord>;
61
+ readonly configurations: ReadonlyMap<InstallationRecord, {
62
+ readonly value: ConfigurationValue | undefined;
63
+ }>;
64
+ readonly report: PlanReport;
65
+ }
66
+ interface PlanBase {
67
+ readonly revision: number;
68
+ readonly graph: InstallationGraph;
69
+ }
70
+ export declare class PlanAuthority {
71
+ #private;
72
+ get validationSignal(): AbortSignal;
73
+ issue(prepared: PreparedTransition, base: PlanBase): Plan;
74
+ read(plan: Plan, revision: number): PreparedTransition;
75
+ consume(plan: Plan): void;
76
+ invalidate(revision: number, quarantined: boolean): void;
77
+ }
78
+ export declare function describeBindings(graph: InstallationGraph, installations?: ReadonlyArray<InstallationRecord>): ReadonlyArray<BindingReport>;
79
+ export declare function describeImpact(previous: InstallationGraph, candidate: InstallationGraph, affected: ReadonlySet<InstallationRecord>, direct: ReadonlyMap<InstallationRecord, ImpactReason["kind"]>): ReadonlyArray<ImpactReason>;
80
+ export declare function describeDeclaration(declaration: InstallationDeclaration | undefined): DeclarationSnapshot | undefined;
81
+ export {};
82
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/composition/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { ContractRegistry } from '../contracts/contract-registry.js';
2
+ import { InstallationGraph } from './installation-graph.js';
3
+ import { ConfigurationValue } from './configuration.js';
4
+ import { ChangeOperation } from './change-set.js';
5
+ import { GroupNode } from './group.js';
6
+ import { InstallationRecord } from './installation.js';
7
+ import { PreparedTransition, TransitionIntent } from './plan.js';
8
+ export interface CompositionState {
9
+ readonly phase: "stopped" | "running" | "quarantined";
10
+ readonly revision: number;
11
+ readonly groups: ReadonlyMap<string, GroupNode>;
12
+ readonly graph: InstallationGraph;
13
+ readonly configurations: ReadonlyMap<InstallationRecord, {
14
+ readonly value: ConfigurationValue | undefined;
15
+ }>;
16
+ }
17
+ export declare function compileTransition(current: CompositionState, operations: ReadonlyArray<ChangeOperation>, intent: TransitionIntent, contracts: ContractRegistry, validity?: AbortSignal): Promise<PreparedTransition>;
18
+ //# sourceMappingURL=planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/composition/planner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAA8B,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACtB,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,WAAW,CAClC,kBAAkB,EAClB;QAAE,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAA;KAAE,CACnD,CAAC;CACH;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,gBAAgB,EACzB,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,EAC1C,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,gBAAgB,EAC3B,QAAQ,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAuK7B"}
@@ -0,0 +1,34 @@
1
+ import { StandardJSONSchemaV1 } from '@standard-schema/spec';
2
+ import { ConfigurationValue } from './configuration.js';
3
+ import { AnyPlugin } from './plugin.js';
4
+ export interface PluginDescriptionOptions {
5
+ readonly jsonSchemaTarget?: StandardJSONSchemaV1.Target;
6
+ }
7
+ export type PluginConfigurationDescriptor = {
8
+ readonly status: "none";
9
+ } | {
10
+ readonly status: "unavailable";
11
+ readonly vendor: string;
12
+ } | {
13
+ readonly status: "available";
14
+ readonly vendor: string;
15
+ readonly target: StandardJSONSchemaV1.Target;
16
+ readonly input: Readonly<Record<string, ConfigurationValue>>;
17
+ readonly output: Readonly<Record<string, ConfigurationValue>>;
18
+ };
19
+ export interface PluginDescriptor {
20
+ readonly name: string;
21
+ readonly requires: ReadonlyArray<{
22
+ readonly alias: string;
23
+ readonly id: string;
24
+ readonly kind: "service" | "extensionPoint";
25
+ readonly optional: boolean;
26
+ }>;
27
+ readonly provides: ReadonlyArray<{
28
+ readonly alias: string;
29
+ readonly id: string;
30
+ }>;
31
+ readonly configuration: PluginConfigurationDescriptor;
32
+ }
33
+ export declare function describePlugin(plugin: AnyPlugin, options?: PluginDescriptionOptions): PluginDescriptor;
34
+ //# sourceMappingURL=plugin-description.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-description.d.ts","sourceRoot":"","sources":["../../src/composition/plugin-description.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,oBAAoB,CAAC,MAAM,CAAC;CACzD;AAED,MAAM,MAAM,6BAA6B,GACrC;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3D;IACE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC7D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;CAC/D,CAAC;AAEN,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,gBAAgB,CAAC;QAC5C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;KAC5B,CAAC,CAAC;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClF,QAAQ,CAAC,aAAa,EAAE,6BAA6B,CAAC;CACvD;AAID,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,OAAO,GAAE,wBAA6B,GACrC,gBAAgB,CA4ClB"}
@@ -0,0 +1,68 @@
1
+ import { StandardJSONSchemaV1, StandardSchemaV1 } from '@standard-schema/spec';
2
+ import { ExtensionPoint, OptionalService, Requirement, Service } from '../contracts/contracts.js';
3
+ import { ContributionView, ContributionOperations } from '../contributions/contribution-store.js';
4
+ import { LifetimeContext } from '../lifetime/lifetime.js';
5
+ import { Logger } from '../contracts/logging.js';
6
+ import { EventOperations } from '../events/event-hub.js';
7
+ import { Awaitable } from '../contracts/resource.js';
8
+ export type { Awaitable } from '../contracts/resource.js';
9
+ export type Requirements = Readonly<Record<string, Requirement>>;
10
+ export type Provisions = Readonly<Record<string, Extract<Requirement, {
11
+ readonly kind: "service";
12
+ }>>>;
13
+ type ServiceValue<T> = T extends Service<infer Value> ? Value : never;
14
+ export type ResolvedRequirement<T> = T extends OptionalService<infer Value> ? Value | undefined : T extends Service<infer Value> ? Value : T extends ExtensionPoint<infer Value> ? ContributionView<Value> : never;
15
+ export type ResolvedRequirements<T extends Requirements> = {
16
+ readonly [Key in keyof T]: ResolvedRequirement<T[Key]>;
17
+ };
18
+ export type ProvidedServices<T extends Provisions> = {
19
+ readonly [Key in keyof T]: ServiceValue<T[Key]>;
20
+ };
21
+ type SetupOutput<T extends Provisions> = keyof T extends never ? void : ProvidedServices<T>;
22
+ interface PluginSchema<Input, Output> extends StandardSchemaV1<Input, Output> {
23
+ readonly "~standard": StandardSchemaV1.Props<Input, Output> & {
24
+ readonly jsonSchema?: StandardJSONSchemaV1.Converter;
25
+ };
26
+ }
27
+ export interface InstanceMetadata {
28
+ readonly hostName: string;
29
+ readonly installationId: string;
30
+ readonly pluginName: string;
31
+ readonly generation: number;
32
+ readonly groupId: string | undefined;
33
+ }
34
+ export interface PluginContext<T extends Requirements = Requirements> {
35
+ readonly dependencies: ResolvedRequirements<T>;
36
+ readonly lifetime: LifetimeContext;
37
+ readonly events: EventOperations;
38
+ readonly contributions: ContributionOperations;
39
+ readonly metadata: InstanceMetadata;
40
+ readonly logger: Logger;
41
+ }
42
+ export interface Plugin<Configuration = void, Requires extends Requirements = {}, Provides extends Provisions = {}, ConfigurationInput = Configuration> {
43
+ readonly name: string;
44
+ readonly configuration?: PluginSchema<ConfigurationInput, Configuration>;
45
+ readonly requires?: Requires;
46
+ readonly provides?: Provides;
47
+ readonly setup: (context: PluginContext<Requires>, configuration: Configuration) => Awaitable<SetupOutput<NoInfer<Provides>>>;
48
+ }
49
+ export interface AnyPlugin {
50
+ readonly name: string;
51
+ readonly configuration?: unknown;
52
+ readonly requires?: Requirements;
53
+ readonly provides?: Provisions;
54
+ readonly setup: (context: never, configuration: never) => unknown;
55
+ }
56
+ export type InstanceContext = Omit<PluginContext<{}>, "dependencies"> & {
57
+ readonly dependencies: Readonly<Record<string, unknown>>;
58
+ };
59
+ export interface NormalizedPlugin {
60
+ readonly name: string;
61
+ readonly configuration?: PluginSchema<unknown, unknown>;
62
+ readonly requires: Requirements;
63
+ readonly provides: Provisions;
64
+ readonly setup: (context: InstanceContext, configuration: unknown) => Awaitable<void | Readonly<Record<string, unknown>>>;
65
+ }
66
+ export declare function definePlugin<Configuration = void, Requires extends Requirements = {}, Provides extends Provisions = {}, ConfigurationInput = Configuration>(plugin: Plugin<Configuration, Requires, Provides, ConfigurationInput>): Plugin<NoInfer<Configuration>, NoInfer<Requires>, NoInfer<Provides>, NoInfer<ConfigurationInput>>;
67
+ export declare function normalizePlugin(plugin: AnyPlugin): NormalizedPlugin;
68
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/composition/plugin.ts"],"names":[],"mappings":"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"}