dougong 0.8.3 → 0.10.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.
- package/README.md +22 -97
- package/dist/advanced.d.ts +9 -0
- package/dist/advanced.d.ts.map +1 -0
- package/dist/advanced.js +39 -0
- package/dist/composition/change-set.d.ts +56 -0
- package/dist/composition/change-set.d.ts.map +1 -0
- package/dist/composition/configuration.d.ts +8 -0
- package/dist/composition/configuration.d.ts.map +1 -0
- package/dist/composition/declarations.d.ts +60 -0
- package/dist/composition/declarations.d.ts.map +1 -0
- package/dist/composition/group.d.ts +10 -0
- package/dist/composition/group.d.ts.map +1 -0
- package/dist/composition/installation-graph.d.ts +17 -0
- package/dist/composition/installation-graph.d.ts.map +1 -0
- package/dist/composition/installation.d.ts +33 -0
- package/dist/composition/installation.d.ts.map +1 -0
- package/dist/composition/plan.d.ts +109 -0
- package/dist/composition/plan.d.ts.map +1 -0
- package/dist/composition/planner.d.ts +18 -0
- package/dist/composition/planner.d.ts.map +1 -0
- package/dist/composition/plugin-description.d.ts +34 -0
- package/dist/composition/plugin-description.d.ts.map +1 -0
- package/dist/composition/plugin.d.ts +65 -0
- package/dist/composition/plugin.d.ts.map +1 -0
- package/dist/contracts/contract-registry.d.ts +18 -0
- package/dist/contracts/contract-registry.d.ts.map +1 -0
- package/dist/contracts/contracts.d.ts +51 -0
- package/dist/contracts/contracts.d.ts.map +1 -0
- package/dist/contracts/errors.d.ts +93 -0
- package/dist/contracts/errors.d.ts.map +1 -0
- package/dist/contracts/logging.d.ts +20 -0
- package/dist/contracts/logging.d.ts.map +1 -0
- package/dist/contracts/resource.d.ts +16 -0
- package/dist/contracts/resource.d.ts.map +1 -0
- package/dist/contracts/status.d.ts +3 -0
- package/dist/contracts/status.d.ts.map +1 -0
- package/dist/contributions/contribution-store.d.ts +51 -0
- package/dist/contributions/contribution-store.d.ts.map +1 -0
- package/dist/events/event-hub.d.ts +27 -0
- package/dist/events/event-hub.d.ts.map +1 -0
- package/dist/execution/engine.d.ts +27 -0
- package/dist/execution/engine.d.ts.map +1 -0
- package/dist/execution/host-api.d.ts +49 -0
- package/dist/execution/host-api.d.ts.map +1 -0
- package/dist/execution/host.d.ts +4 -0
- package/dist/execution/host.d.ts.map +1 -0
- package/dist/execution/instance.d.ts +34 -0
- package/dist/execution/instance.d.ts.map +1 -0
- package/dist/index.d.ts +18 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2271 -8
- package/dist/inspection/diagnostics.d.ts +36 -0
- package/dist/inspection/diagnostics.d.ts.map +1 -0
- package/dist/internal/abort.d.ts +4 -0
- package/dist/internal/abort.d.ts.map +1 -0
- package/dist/internal/async-result.d.ts +10 -0
- package/dist/internal/async-result.d.ts.map +1 -0
- package/dist/internal/data-array.d.ts +3 -0
- package/dist/internal/data-array.d.ts.map +1 -0
- package/dist/internal/disposal-runtime.d.ts +5 -0
- package/dist/internal/disposal-runtime.d.ts.map +1 -0
- package/dist/internal/record.d.ts +11 -0
- package/dist/internal/record.d.ts.map +1 -0
- package/dist/internal/serial-queue.d.ts +7 -0
- package/dist/internal/serial-queue.d.ts.map +1 -0
- package/dist/lifetime/lifetime-diagnostics.d.ts +21 -0
- package/dist/lifetime/lifetime-diagnostics.d.ts.map +1 -0
- package/dist/lifetime/lifetime.d.ts +78 -0
- package/dist/lifetime/lifetime.d.ts.map +1 -0
- package/dist/observation/readonly-map.d.ts +13 -0
- package/dist/observation/readonly-map.d.ts.map +1 -0
- package/dist/observation/snapshot-view.d.ts +17 -0
- package/dist/observation/snapshot-view.d.ts.map +1 -0
- package/dist/serial-queue-DjEs2KFf.js +559 -0
- package/package.json +17 -8
- package/runtime/abort-listener.d.mts +2 -0
- package/runtime/abort-listener.mjs +27 -0
package/README.md
CHANGED
|
@@ -1,111 +1,36 @@
|
|
|
1
1
|
# dougong
|
|
2
2
|
|
|
3
|
-
|
|
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 { asyncDisposeSymbol, createHost, definePlugin, service } from "dougong";
|
|
76
9
|
|
|
10
|
+
const GREETER = service<{ greet(name: string): string }>("application/greeter");
|
|
77
11
|
const greeter = definePlugin({
|
|
78
|
-
name: "
|
|
79
|
-
|
|
80
|
-
setup(
|
|
81
|
-
|
|
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({
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const host = createHost({
|
|
20
|
+
name: "application",
|
|
21
|
+
installations: [{ id: "greeter", plugin: greeter }],
|
|
22
|
+
});
|
|
23
|
+
await host.start();
|
|
24
|
+
const { value: message } = await host.use(GREETER, (service) => service.greet("Dougong"));
|
|
25
|
+
await host[asyncDisposeSymbol]();
|
|
89
26
|
```
|
|
90
27
|
|
|
91
|
-
|
|
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
|
-
|
|
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
|
-
|
|
109
|
-
> Early 0.x development; no backward-compatibility promises yet.
|
|
34
|
+
ESM; <!-- runtime-baseline:start -->Node.js `^24.22.0 || >=26.10.0`, Chrome ≥ 119, Edge ≥ 119, Firefox ≥ 124, Safari ≥ 17.4<!-- runtime-baseline:end -->.
|
|
110
35
|
|
|
111
|
-
|
|
36
|
+
[API documentation](https://tangerg.github.io/dougong/en/reference/core-api) · [Architecture](https://tangerg.github.io/dougong/en/reference/architecture)
|
|
@@ -0,0 +1,9 @@
|
|
|
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, recordFields } 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
|
+
export { resolveValue } from './internal/async-result.js';
|
|
9
|
+
//# 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,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC"}
|
package/dist/advanced.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { G as e, H as t, a as n, c as r, o as i, q as a, r as o, s, t as c } from "./serial-queue-DjEs2KFf.js";
|
|
2
|
+
// src/observation/readonly-map.ts
|
|
3
|
+
var l = 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 { l as ReadonlyMapSnapshot, c as SerialQueue, n as SnapshotPublisher, i as batchSnapshotNotifications, t as captureDataArray, o as captureLogger, s as normalizePlainRecord, e as onAbort, r as recordFields, a as resolveValue };
|
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
type NormalizedInstallationUpdate = {
|
|
7
|
+
readonly kind: "replace";
|
|
8
|
+
readonly plugin: NormalizedPlugin;
|
|
9
|
+
readonly configuration?: ConfigurationValue | undefined;
|
|
10
|
+
readonly origin: InstallationOrigin | undefined;
|
|
11
|
+
} | {
|
|
12
|
+
readonly kind: "configure";
|
|
13
|
+
readonly configuration: ConfigurationValue | undefined;
|
|
14
|
+
readonly plugin?: never;
|
|
15
|
+
readonly origin?: never;
|
|
16
|
+
};
|
|
17
|
+
export type ChangeOperation = {
|
|
18
|
+
readonly kind: "install";
|
|
19
|
+
readonly installation: InstallationRecord;
|
|
20
|
+
readonly declaration: InstallationDeclaration;
|
|
21
|
+
} | {
|
|
22
|
+
readonly kind: "update";
|
|
23
|
+
readonly installation: InstallationRecord;
|
|
24
|
+
readonly update: NormalizedInstallationUpdate;
|
|
25
|
+
} | {
|
|
26
|
+
readonly kind: "remove";
|
|
27
|
+
readonly installation: InstallationRecord;
|
|
28
|
+
} | {
|
|
29
|
+
readonly kind: "group";
|
|
30
|
+
readonly group: GroupNode;
|
|
31
|
+
} | {
|
|
32
|
+
readonly kind: "remove-group";
|
|
33
|
+
readonly group: GroupNode;
|
|
34
|
+
};
|
|
35
|
+
export interface ChangePort {
|
|
36
|
+
readonly create: (id: string, group: GroupNode | undefined) => InstallationRecord;
|
|
37
|
+
readonly resolve: (installation: object) => InstallationRecord;
|
|
38
|
+
readonly createGroup: (id: string, parent: GroupNode | undefined) => GroupNode;
|
|
39
|
+
readonly resolveGroup: (group: object) => GroupNode;
|
|
40
|
+
}
|
|
41
|
+
export declare function assertId(id: unknown, label: string): asserts id is string;
|
|
42
|
+
interface DraftState {
|
|
43
|
+
readonly port: ChangePort;
|
|
44
|
+
readonly operations: ChangeOperation[];
|
|
45
|
+
readonly targets: Set<object>;
|
|
46
|
+
}
|
|
47
|
+
export declare class ChangeSets {
|
|
48
|
+
#private;
|
|
49
|
+
create(port: ChangePort): ChangeSet;
|
|
50
|
+
take(change: ChangeSet): ReadonlyArray<ChangeOperation>;
|
|
51
|
+
requireOpen(change: ChangeSet): DraftState;
|
|
52
|
+
track(installation: InstallationRecord): void;
|
|
53
|
+
close(revision: number): void;
|
|
54
|
+
}
|
|
55
|
+
export {};
|
|
56
|
+
//# 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,EAKT,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;AAc5C,KAAK,4BAA4B,GAC7B;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;CACjD,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;CACzB,CAAC;AAEN,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,4BAA4B,CAAC;CAC/C,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,8 @@
|
|
|
1
|
+
import { StandardSchemaV1 } from '@standard-schema/spec';
|
|
2
|
+
import { ResolvedValue } from '../internal/async-result.js';
|
|
3
|
+
export type ConfigurationValue = null | boolean | string | number | ReadonlyArray<ConfigurationValue> | {
|
|
4
|
+
readonly [key: string]: ConfigurationValue;
|
|
5
|
+
};
|
|
6
|
+
export declare function captureConfiguration(input: unknown): ConfigurationValue | undefined;
|
|
7
|
+
export declare function resolvePluginConfiguration(schema: StandardSchemaV1<unknown, unknown> | undefined, input: ConfigurationValue | undefined, installationId: string, validity?: AbortSignal): Promise<ResolvedValue<ConfigurationValue | undefined>>;
|
|
8
|
+
//# 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;AAE9D,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAK/E,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,CAwCnF;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,aAAa,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAC,CAgCxD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
} & (undefined extends ConfigurationInputOf<Declaration> ? {
|
|
25
|
+
readonly configuration?: NoInfer<ConfigurationInputOf<Declaration>>;
|
|
26
|
+
} : {
|
|
27
|
+
readonly configuration: NoInfer<ConfigurationInputOf<Declaration>>;
|
|
28
|
+
});
|
|
29
|
+
export type InstallationArguments<Declaration extends AnyPlugin = AnyPlugin> = Declaration extends unknown ? [plugin: Declaration, options: InstallationOptions<Declaration>] : never;
|
|
30
|
+
type SharedConfigurationInput<Declaration extends AnyPlugin> = (Declaration extends unknown ? (input: ConfigurationInputOf<Declaration>) => void : never) extends (input: infer Input) => void ? Input : never;
|
|
31
|
+
type InstallationReplacement<Declaration extends AnyPlugin, PreviousInput> = Declaration extends unknown ? {
|
|
32
|
+
readonly plugin: Declaration;
|
|
33
|
+
readonly origin?: InstallationOrigin;
|
|
34
|
+
} & ([PreviousInput] extends [ConfigurationInputOf<Declaration>] ? {
|
|
35
|
+
readonly configuration?: ConfigurationInputOf<Declaration>;
|
|
36
|
+
} : {
|
|
37
|
+
readonly configuration: ConfigurationInputOf<Declaration>;
|
|
38
|
+
}) : never;
|
|
39
|
+
export type InstallationUpdate<Declaration extends AnyPlugin = AnyPlugin> = InstallationReplacement<Declaration, ConfigurationInputOf<Declaration>> | {
|
|
40
|
+
readonly plugin?: never;
|
|
41
|
+
readonly configuration: SharedConfigurationInput<Declaration>;
|
|
42
|
+
readonly origin?: never;
|
|
43
|
+
};
|
|
44
|
+
export interface ChangeSet {
|
|
45
|
+
install<Arguments extends readonly [plugin: AnyPlugin, options: unknown]>(...declaration: Arguments & NoInfer<InstallationArguments<Arguments[0]>>): Installation<Arguments[0]>;
|
|
46
|
+
update<Declaration extends AnyPlugin>(installation: Installation<Declaration>, update: NoInfer<InstallationUpdate<Declaration>>): void;
|
|
47
|
+
remove<Declaration extends AnyPlugin>(installation: Installation<Declaration>): void;
|
|
48
|
+
group(id: string, parent?: Group): Group;
|
|
49
|
+
removeGroup(group: Group): void;
|
|
50
|
+
}
|
|
51
|
+
type InitialInstallationFromArguments<Arguments> = Arguments extends [
|
|
52
|
+
plugin: infer Declaration,
|
|
53
|
+
options: infer Options
|
|
54
|
+
] ? Omit<Options, "group"> & {
|
|
55
|
+
readonly plugin: Declaration;
|
|
56
|
+
readonly groupId?: string;
|
|
57
|
+
} : never;
|
|
58
|
+
export type InitialInstallation<Declaration extends AnyPlugin = AnyPlugin> = InitialInstallationFromArguments<InstallationArguments<Declaration>>;
|
|
59
|
+
export {};
|
|
60
|
+
//# 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;AAQ9D,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;IAsBnF,cAAc,CAAC,YAAY,EAAE,kBAAkB;IAO/C,sBAAsB,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC;CAmB5F"}
|
|
@@ -0,0 +1,33 @@
|
|
|
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 group: GroupNode | undefined;
|
|
27
|
+
readonly facade: Installation;
|
|
28
|
+
constructor(id: string, group: GroupNode | undefined);
|
|
29
|
+
get groupId(): string | undefined;
|
|
30
|
+
attach(read: () => InstallationProjection): void;
|
|
31
|
+
detach(projection: InstallationProjection): void;
|
|
32
|
+
}
|
|
33
|
+
//# 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,SAAS,GAAG,SAAS;IANvC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;gBAKnB,EAAE,EAAE,MAAM,EACV,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,109 @@
|
|
|
1
|
+
import { InstallationGraph } from './installation-graph.js';
|
|
2
|
+
import { InstallationRecord } from './installation.js';
|
|
3
|
+
import { GroupNode } from './group.js';
|
|
4
|
+
import { ConfigurationValue } from './configuration.js';
|
|
5
|
+
import { InstallationOrigin } from './declarations.js';
|
|
6
|
+
import { ChangeOperation } from './change-set.js';
|
|
7
|
+
export type TransitionIntent = "change" | "start" | "stop";
|
|
8
|
+
export type BindingReport = {
|
|
9
|
+
readonly installation: string;
|
|
10
|
+
readonly contract: string;
|
|
11
|
+
} & ({
|
|
12
|
+
readonly optional: false;
|
|
13
|
+
readonly provider: string;
|
|
14
|
+
} | {
|
|
15
|
+
readonly optional: true;
|
|
16
|
+
readonly provider: string | undefined;
|
|
17
|
+
});
|
|
18
|
+
export type DirectImpactKind = "installed" | "updated" | "removed" | "start" | "stop";
|
|
19
|
+
type ProviderChange = {
|
|
20
|
+
readonly provider: string;
|
|
21
|
+
readonly previousProvider?: string;
|
|
22
|
+
} | {
|
|
23
|
+
readonly provider?: never;
|
|
24
|
+
readonly previousProvider: string;
|
|
25
|
+
};
|
|
26
|
+
export type ImpactReason = {
|
|
27
|
+
readonly installation: string;
|
|
28
|
+
readonly kind: DirectImpactKind;
|
|
29
|
+
readonly contract?: never;
|
|
30
|
+
readonly provider?: never;
|
|
31
|
+
readonly previousProvider?: never;
|
|
32
|
+
} | ({
|
|
33
|
+
readonly installation: string;
|
|
34
|
+
readonly kind: "provider_changed";
|
|
35
|
+
readonly contract: string;
|
|
36
|
+
} & ProviderChange);
|
|
37
|
+
export interface DeclarationSnapshot {
|
|
38
|
+
readonly pluginName: string;
|
|
39
|
+
readonly origin: InstallationOrigin | undefined;
|
|
40
|
+
}
|
|
41
|
+
export type PlanOperation = {
|
|
42
|
+
readonly kind: "install";
|
|
43
|
+
readonly id: string;
|
|
44
|
+
readonly before: undefined;
|
|
45
|
+
readonly after: DeclarationSnapshot;
|
|
46
|
+
} | {
|
|
47
|
+
readonly kind: "update";
|
|
48
|
+
readonly id: string;
|
|
49
|
+
readonly before: DeclarationSnapshot;
|
|
50
|
+
readonly after: DeclarationSnapshot;
|
|
51
|
+
} | {
|
|
52
|
+
readonly kind: "remove";
|
|
53
|
+
readonly id: string;
|
|
54
|
+
readonly before: DeclarationSnapshot;
|
|
55
|
+
readonly after: undefined;
|
|
56
|
+
} | {
|
|
57
|
+
readonly kind: "group" | "remove-group";
|
|
58
|
+
readonly id: string;
|
|
59
|
+
readonly parentId: string | undefined;
|
|
60
|
+
};
|
|
61
|
+
export interface PlanReport {
|
|
62
|
+
readonly baseStateRevision: number;
|
|
63
|
+
readonly intent: TransitionIntent;
|
|
64
|
+
readonly operations: ReadonlyArray<PlanOperation>;
|
|
65
|
+
readonly bindings: {
|
|
66
|
+
readonly before: ReadonlyArray<BindingReport>;
|
|
67
|
+
readonly after: ReadonlyArray<BindingReport>;
|
|
68
|
+
};
|
|
69
|
+
readonly affectedInstallations: ReadonlyArray<string>;
|
|
70
|
+
readonly reasons: ReadonlyArray<ImpactReason>;
|
|
71
|
+
readonly stopOrder: ReadonlyArray<string>;
|
|
72
|
+
readonly prepareOrder: ReadonlyArray<string>;
|
|
73
|
+
readonly publishOrder: ReadonlyArray<string>;
|
|
74
|
+
readonly execution: {
|
|
75
|
+
readonly atomicPublication: true;
|
|
76
|
+
readonly externalEffectsRollback: false;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
declare const planBrand: unique symbol;
|
|
80
|
+
export interface Plan {
|
|
81
|
+
readonly [planBrand]: true;
|
|
82
|
+
readonly report: PlanReport;
|
|
83
|
+
}
|
|
84
|
+
export interface PreparedTransition {
|
|
85
|
+
readonly groups: ReadonlyMap<string, GroupNode>;
|
|
86
|
+
readonly graph: InstallationGraph;
|
|
87
|
+
readonly affected: ReadonlySet<InstallationRecord>;
|
|
88
|
+
readonly configurations: ReadonlyMap<InstallationRecord, {
|
|
89
|
+
readonly value: ConfigurationValue | undefined;
|
|
90
|
+
}>;
|
|
91
|
+
readonly report: PlanReport;
|
|
92
|
+
}
|
|
93
|
+
interface PlanBase {
|
|
94
|
+
readonly revision: number;
|
|
95
|
+
readonly graph: InstallationGraph;
|
|
96
|
+
}
|
|
97
|
+
export declare class PlanAuthority {
|
|
98
|
+
#private;
|
|
99
|
+
get validationSignal(): AbortSignal;
|
|
100
|
+
issue(prepared: PreparedTransition, base: PlanBase): Plan;
|
|
101
|
+
read(plan: Plan, revision: number): PreparedTransition;
|
|
102
|
+
consume(plan: Plan): void;
|
|
103
|
+
invalidate(revision: number, quarantined: boolean): void;
|
|
104
|
+
}
|
|
105
|
+
export declare function describeOperations(operations: ReadonlyArray<ChangeOperation>, previous: InstallationGraph, candidate: InstallationGraph): ReadonlyArray<PlanOperation>;
|
|
106
|
+
export declare function describeBindings(graph: InstallationGraph, installations?: ReadonlyArray<InstallationRecord>): ReadonlyArray<BindingReport>;
|
|
107
|
+
export declare function describeImpact(previous: InstallationGraph, candidate: InstallationGraph, affected: ReadonlySet<InstallationRecord>, direct: ReadonlyMap<InstallationRecord, DirectImpactKind>): ReadonlyArray<ImpactReason>;
|
|
108
|
+
export {};
|
|
109
|
+
//# 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":"AAQA,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,CAqJ7B"}
|
|
@@ -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"}
|