@dougongjs/core 0.0.1
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/LICENSE +22 -0
- package/README.md +18 -0
- package/dist/application-api.d.ts +51 -0
- package/dist/application-api.d.ts.map +1 -0
- package/dist/application-runtime.d.ts +36 -0
- package/dist/application-runtime.d.ts.map +1 -0
- package/dist/application.d.ts +6 -0
- package/dist/application.d.ts.map +1 -0
- package/dist/change-set.d.ts +51 -0
- package/dist/change-set.d.ts.map +1 -0
- package/dist/contract-registry.d.ts +19 -0
- package/dist/contract-registry.d.ts.map +1 -0
- package/dist/contracts.d.ts +30 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/diagnostics.d.ts +35 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/errors.d.ts +19 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/event-hub.d.ts +10 -0
- package/dist/event-hub.d.ts.map +1 -0
- package/dist/extension-store.d.ts +46 -0
- package/dist/extension-store.d.ts.map +1 -0
- package/dist/group-coordinator.d.ts +46 -0
- package/dist/group-coordinator.d.ts.map +1 -0
- package/dist/group-lifecycle.d.ts +19 -0
- package/dist/group-lifecycle.d.ts.map +1 -0
- package/dist/group.d.ts +31 -0
- package/dist/group.d.ts.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2344 -0
- package/dist/lifetime-diagnostics.d.ts +36 -0
- package/dist/lifetime-diagnostics.d.ts.map +1 -0
- package/dist/lifetime.d.ts +77 -0
- package/dist/lifetime.d.ts.map +1 -0
- package/dist/plugin-graph.d.ts +17 -0
- package/dist/plugin-graph.d.ts.map +1 -0
- package/dist/plugin-installation.d.ts +44 -0
- package/dist/plugin-installation.d.ts.map +1 -0
- package/dist/plugin.d.ts +30 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/readonly-map.d.ts +14 -0
- package/dist/readonly-map.d.ts.map +1 -0
- package/dist/resource.d.ts +13 -0
- package/dist/resource.d.ts.map +1 -0
- package/dist/serial-queue.d.ts +7 -0
- package/dist/serial-queue.d.ts.map +1 -0
- package/dist/snapshot-view.d.ts +15 -0
- package/dist/snapshot-view.d.ts.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { SnapshotView } from './snapshot-view';
|
|
2
|
+
export type LifetimePhase = "active" | "disposing" | "disposed";
|
|
3
|
+
/** Immutable projection of one real Lifetime ownership node. */
|
|
4
|
+
export interface LifetimeSnapshot {
|
|
5
|
+
readonly label: string;
|
|
6
|
+
readonly phase: LifetimePhase;
|
|
7
|
+
readonly cleanups: number;
|
|
8
|
+
readonly tasks: number;
|
|
9
|
+
readonly listeners: number;
|
|
10
|
+
readonly contributions: number;
|
|
11
|
+
readonly extensionViews: number;
|
|
12
|
+
readonly subscriptions: number;
|
|
13
|
+
readonly children: ReadonlyArray<LifetimeSnapshot>;
|
|
14
|
+
}
|
|
15
|
+
export type LifetimeResourceKind = "cleanups" | "tasks" | "listeners" | "contributions" | "extensionViews" | "subscriptions";
|
|
16
|
+
/** Internal state that mirrors a Lifetime without retaining any owned resource. */
|
|
17
|
+
export interface LifetimeDiagnosticNode {
|
|
18
|
+
readonly label: string;
|
|
19
|
+
readonly counts: Record<LifetimeResourceKind, number>;
|
|
20
|
+
readonly children: Set<LifetimeDiagnosticNode>;
|
|
21
|
+
phase: LifetimePhase;
|
|
22
|
+
}
|
|
23
|
+
/** Publishes immutable data snapshots for one root Lifetime ownership tree. */
|
|
24
|
+
export declare class LifetimeDiagnostics {
|
|
25
|
+
#private;
|
|
26
|
+
readonly root: LifetimeDiagnosticNode;
|
|
27
|
+
readonly view: SnapshotView<LifetimeSnapshot>;
|
|
28
|
+
constructor(rootLabel: string, report: (error: unknown) => void);
|
|
29
|
+
createNode(label: string): LifetimeDiagnosticNode;
|
|
30
|
+
attach(parent: LifetimeDiagnosticNode, child: LifetimeDiagnosticNode): void;
|
|
31
|
+
detach(parent: LifetimeDiagnosticNode, child: LifetimeDiagnosticNode): void;
|
|
32
|
+
change(node: LifetimeDiagnosticNode, kind: LifetimeResourceKind, delta: 1 | -1): void;
|
|
33
|
+
beginDisposing(node: LifetimeDiagnosticNode): void;
|
|
34
|
+
finishRoot(): void;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=lifetime-diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifetime-diagnostics.d.ts","sourceRoot":"","sources":["../src/lifetime-diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;AAEhE,gEAAgE;AAChE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;CACpD;AAED,MAAM,MAAM,oBAAoB,GAC9B,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,eAAe,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAE5F,mFAAmF;AACnF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAC/C,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,+EAA+E;AAC/E,qBAAa,mBAAmB;;IAG9B,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;gBAElC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI;IAM/D,UAAU,CAAC,KAAK,EAAE,MAAM;IAIxB,MAAM,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,sBAAsB;IAMpE,MAAM,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,sBAAsB;IAKpE,MAAM,CAAC,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;IAO9E,cAAc,CAAC,IAAI,EAAE,sBAAsB;IAM3C,UAAU;CAMX"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Event, Extension } from './contracts';
|
|
2
|
+
import { Contribution, ExtensionLeaseKind } from './extension-store';
|
|
3
|
+
import { EventListener } from './event-hub';
|
|
4
|
+
import { LifetimeDiagnostics, LifetimeDiagnosticNode } from './lifetime-diagnostics';
|
|
5
|
+
import { Disposable, Publication, StagedResource } from './resource';
|
|
6
|
+
export type { LifetimePhase, LifetimeSnapshot } from './lifetime-diagnostics';
|
|
7
|
+
export interface Logger {
|
|
8
|
+
debug(message: unknown, ...details: unknown[]): void;
|
|
9
|
+
info(message: unknown, ...details: unknown[]): void;
|
|
10
|
+
warn(message: unknown, ...details: unknown[]): void;
|
|
11
|
+
error(message: unknown, ...details: unknown[]): void;
|
|
12
|
+
}
|
|
13
|
+
export interface PluginMeta {
|
|
14
|
+
readonly applicationName: string;
|
|
15
|
+
readonly pluginName: string;
|
|
16
|
+
readonly installationId: string;
|
|
17
|
+
readonly groupId: string;
|
|
18
|
+
}
|
|
19
|
+
export interface Task<T = void> extends Disposable {
|
|
20
|
+
readonly result: Promise<T>;
|
|
21
|
+
}
|
|
22
|
+
export type Cleanup = () => unknown;
|
|
23
|
+
export type BackgroundTask<T> = (signal: AbortSignal) => T | PromiseLike<T>;
|
|
24
|
+
export interface LifetimeOperations {
|
|
25
|
+
readonly signal: AbortSignal;
|
|
26
|
+
cleanup(dispose: Cleanup): Disposable;
|
|
27
|
+
lifetime(label: string): LifetimeContext;
|
|
28
|
+
spawn<T>(task: BackgroundTask<T>): Task<T>;
|
|
29
|
+
on<T>(token: Event<T>, listener: EventListener<T>): Disposable;
|
|
30
|
+
emit<T>(token: Event<T>, payload: T): Promise<void>;
|
|
31
|
+
contribute<T>(token: Extension<T>, key: string, value: T): Contribution<T>;
|
|
32
|
+
}
|
|
33
|
+
export interface LifetimeContext extends LifetimeOperations, Disposable {
|
|
34
|
+
}
|
|
35
|
+
export interface LifetimeHost {
|
|
36
|
+
stageOn<T>(ownerId: string, token: Event<T>, listener: EventListener<T>, release: (publication: Publication) => void): StagedResource<Disposable>;
|
|
37
|
+
emit<T>(ownerId: string, token: Event<T>, payload: T): Promise<void>;
|
|
38
|
+
stageContribution<T>(ownerId: string, token: Extension<T>, key: string, value: T, release: (publication: Publication) => void): StagedResource<Contribution<T>>;
|
|
39
|
+
report(error: unknown): void;
|
|
40
|
+
}
|
|
41
|
+
interface LifetimeOptions {
|
|
42
|
+
readonly parentSignal?: AbortSignal;
|
|
43
|
+
readonly declarations?: "staged" | "published";
|
|
44
|
+
readonly parent?: {
|
|
45
|
+
readonly detach: (lifetime: Lifetime) => void;
|
|
46
|
+
readonly diagnostics: LifetimeDiagnostics;
|
|
47
|
+
readonly diagnosticNode: LifetimeDiagnosticNode;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
declare class CleanupRecord implements Disposable {
|
|
51
|
+
#private;
|
|
52
|
+
constructor(cleanup: Cleanup, detachFromParent: (resource: Disposable) => void);
|
|
53
|
+
dispose(): Promise<void>;
|
|
54
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
export declare class Lifetime implements LifetimeContext {
|
|
57
|
+
#private;
|
|
58
|
+
readonly handle: LifetimeContext;
|
|
59
|
+
constructor(host: LifetimeHost, ownerId: string, options?: LifetimeOptions);
|
|
60
|
+
get signal(): AbortSignal;
|
|
61
|
+
get diagnostics(): import('./snapshot-view').SnapshotView<import('./lifetime-diagnostics').LifetimeSnapshot>;
|
|
62
|
+
cleanup(dispose: Cleanup): CleanupRecord;
|
|
63
|
+
lifetime(label: string): LifetimeContext;
|
|
64
|
+
spawn<T>(task: BackgroundTask<T>): Task<T>;
|
|
65
|
+
on<T>(token: Event<T>, listener: EventListener<T>): Disposable;
|
|
66
|
+
emit<T>(token: Event<T>, payload: T): Promise<void>;
|
|
67
|
+
contribute<T>(token: Extension<T>, key: string, value: T): Contribution<T>;
|
|
68
|
+
/** Owns an internal live capability without exposing a second Context API. */
|
|
69
|
+
ownLease(resource: Disposable, kind: ExtensionLeaseKind): () => boolean;
|
|
70
|
+
/** Releases a temporary startup cancellation edge after its layer commits. */
|
|
71
|
+
detachStartupSignal(): void;
|
|
72
|
+
/** Atomically makes all declarations staged during setup visible. */
|
|
73
|
+
publish(): void;
|
|
74
|
+
dispose(): Promise<void>;
|
|
75
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=lifetime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifetime.d.ts","sourceRoot":"","sources":["../src/lifetime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ContractKind } from './contracts';
|
|
2
|
+
import { PluginInstallation } from './plugin-installation';
|
|
3
|
+
/** Immutable validated dependency plan over one application-wide capability graph. */
|
|
4
|
+
export declare class PluginGraph {
|
|
5
|
+
#private;
|
|
6
|
+
readonly order: ReadonlyArray<PluginInstallation>;
|
|
7
|
+
readonly layers: ReadonlyArray<ReadonlyArray<PluginInstallation>>;
|
|
8
|
+
readonly providers: ReadonlyMap<string, PluginInstallation>;
|
|
9
|
+
readonly dependents: ReadonlyMap<PluginInstallation, ReadonlySet<PluginInstallation>>;
|
|
10
|
+
readonly contractKinds: ReadonlyMap<string, ContractKind>;
|
|
11
|
+
private constructor();
|
|
12
|
+
static build(source: Iterable<PluginInstallation>, committedKinds: ReadonlyMap<string, ContractKind>): PluginGraph;
|
|
13
|
+
providerFor(installation: PluginInstallation, serviceId: string): PluginInstallation | undefined;
|
|
14
|
+
provider(serviceId: string): PluginInstallation | undefined;
|
|
15
|
+
affectedByTransitionTo(other: PluginGraph, changed: ReadonlySet<PluginInstallation>): Set<PluginInstallation>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=plugin-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-graph.d.ts","sourceRoot":"","sources":["../src/plugin-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,sFAAsF;AACtF,qBAAa,WAAW;;IAOpB,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;IAL3D,OAAO;IAWP,MAAM,CAAC,KAAK,CACV,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC;IAsBnD,WAAW,CAAC,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM;IAI/D,QAAQ,CAAC,SAAS,EAAE,MAAM;IAI1B,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,kBAAkB,CAAC;CAmBpF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Lifetime } from './lifetime';
|
|
2
|
+
import { PluginDefinition, Provisions, Requirements } from './plugin';
|
|
3
|
+
import { GroupNode } from './group';
|
|
4
|
+
export type InstallationStatus = "pending" | "active" | "stopping" | "failed" | "removed";
|
|
5
|
+
export type AnyPlugin = PluginDefinition<unknown, Requirements, Provisions, unknown>;
|
|
6
|
+
export interface InstallationSpec {
|
|
7
|
+
readonly plugin: AnyPlugin;
|
|
8
|
+
readonly config: unknown;
|
|
9
|
+
}
|
|
10
|
+
export interface PluginRuntime {
|
|
11
|
+
readonly plugin: AnyPlugin;
|
|
12
|
+
readonly config: unknown;
|
|
13
|
+
readonly lifetime: Lifetime;
|
|
14
|
+
}
|
|
15
|
+
export declare function createInstallationSpec(plugin: AnyPlugin, config: unknown): InstallationSpec;
|
|
16
|
+
/**
|
|
17
|
+
* A plugin installation is a stable identity whose declaration and runtime may
|
|
18
|
+
* change. State transitions and ready waiters live here so orchestration code
|
|
19
|
+
* cannot create a status that disagrees with the owned runtime.
|
|
20
|
+
*/
|
|
21
|
+
export declare class PluginInstallation {
|
|
22
|
+
#private;
|
|
23
|
+
readonly id: string;
|
|
24
|
+
readonly index: number;
|
|
25
|
+
readonly groupId: string;
|
|
26
|
+
constructor(id: string, index: number, group: GroupNode, spec: InstallationSpec);
|
|
27
|
+
attach(notifyChanged: () => void): void;
|
|
28
|
+
get status(): "failed" | "active" | "removed" | "pending" | "stopping";
|
|
29
|
+
get runtime(): PluginRuntime | undefined;
|
|
30
|
+
get error(): Error | undefined;
|
|
31
|
+
get group(): GroupNode;
|
|
32
|
+
get spec(): InstallationSpec;
|
|
33
|
+
reconfigure(spec: InstallationSpec): void;
|
|
34
|
+
ready(): Promise<void>;
|
|
35
|
+
trackReadiness(operation: Promise<void>): void;
|
|
36
|
+
activate(runtime: PluginRuntime): void;
|
|
37
|
+
settleReady(): void;
|
|
38
|
+
beginStopping(): boolean;
|
|
39
|
+
deactivate(): void;
|
|
40
|
+
fail(error: unknown): void;
|
|
41
|
+
discard(error: unknown): void;
|
|
42
|
+
remove(): void;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=plugin-installation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-installation.d.ts","sourceRoot":"","sources":["../src/plugin-installation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE1F,MAAM,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAErF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAE3F;AAiCD;;;;GAIG;AACH,qBAAa,kBAAkB;;IAa3B,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM;IATxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAQd,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACtB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,gBAAgB;IAMxB,MAAM,CAAC,aAAa,EAAE,MAAM,IAAI;IAMhC,IAAI,MAAM,6DAET;IAED,IAAI,OAAO,8BAGV;IAED,IAAI,KAAK,sBAWR;IAED,IAAI,KAAK,cAER;IAED,IAAI,IAAI,qBAEP;IAED,WAAW,CAAC,IAAI,EAAE,gBAAgB;IAIlC,KAAK;IAML,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC;IAoCvC,QAAQ,CAAC,OAAO,EAAE,aAAa;IAI/B,WAAW;IAkBX,aAAa;IAOb,UAAU;IAIV,IAAI,CAAC,KAAK,EAAE,OAAO;IAInB,OAAO,CAAC,KAAK,EAAE,OAAO;IAuBtB,MAAM;CAwBP"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { StandardSchemaV1 } from '@standard-schema/spec';
|
|
2
|
+
import { Extension, OptionalService, Requirement, Service } from './contracts';
|
|
3
|
+
import { ExtensionRequirementView } from './extension-store';
|
|
4
|
+
import { LifetimeOperations, Logger, PluginMeta } from './lifetime';
|
|
5
|
+
import { Awaitable } from './resource';
|
|
6
|
+
export type { Awaitable } from './resource';
|
|
7
|
+
export type Requirements = Readonly<Record<string, Requirement>>;
|
|
8
|
+
export type Provisions = Readonly<Record<string, Service<unknown>>>;
|
|
9
|
+
type ServiceValue<T> = T extends Service<infer Value> ? Value : never;
|
|
10
|
+
export type ResolvedRequirement<T> = T extends OptionalService<infer Value> ? Value | undefined : T extends Service<infer Value> ? Value : T extends Extension<unknown> ? ExtensionRequirementView<T> : never;
|
|
11
|
+
export type ResolvedRequirements<T extends Requirements> = {
|
|
12
|
+
readonly [Key in keyof T]: ResolvedRequirement<T[Key]>;
|
|
13
|
+
};
|
|
14
|
+
export type ProvidedServices<T extends Provisions> = {
|
|
15
|
+
readonly [Key in keyof T]: ServiceValue<T[Key]>;
|
|
16
|
+
};
|
|
17
|
+
type SetupOutput<T extends Provisions> = keyof T extends never ? void : ProvidedServices<T>;
|
|
18
|
+
export type PluginContext<T extends Requirements = Requirements> = LifetimeOperations & ResolvedRequirements<T> & {
|
|
19
|
+
readonly meta: PluginMeta;
|
|
20
|
+
readonly log: Logger;
|
|
21
|
+
};
|
|
22
|
+
export interface PluginDefinition<Config = void, Requires extends Requirements = {}, Provides extends Provisions = {}, ConfigInput = Config> {
|
|
23
|
+
readonly name: string;
|
|
24
|
+
readonly config?: StandardSchemaV1<ConfigInput, Config>;
|
|
25
|
+
readonly requires?: Requires;
|
|
26
|
+
readonly provides?: Provides;
|
|
27
|
+
readonly setup: (context: PluginContext<Requires>, config: Config) => Awaitable<SetupOutput<NoInfer<Provides>>>;
|
|
28
|
+
}
|
|
29
|
+
export declare function definePlugin<Config = void, Requires extends Requirements = {}, Provides extends Provisions = {}, ConfigInput = Config>(definition: PluginDefinition<Config, Requires, Provides, ConfigInput>): PluginDefinition<Config, Requires, Provides, ConfigInput>;
|
|
30
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** A structural snapshot that exposes no mutating Map methods. */
|
|
2
|
+
export declare class ReadonlyMapSnapshot<Key, Value> implements ReadonlyMap<Key, Value> {
|
|
3
|
+
#private;
|
|
4
|
+
constructor(values?: ReadonlyMap<Key, Value> | Iterable<readonly [Key, Value]>);
|
|
5
|
+
get size(): number;
|
|
6
|
+
get(key: Key): Value | undefined;
|
|
7
|
+
has(key: Key): boolean;
|
|
8
|
+
forEach(callback: (value: Value, key: Key, map: ReadonlyMap<Key, Value>) => void, thisArg?: unknown): void;
|
|
9
|
+
entries(): MapIterator<[Key, Value]>;
|
|
10
|
+
keys(): MapIterator<Key>;
|
|
11
|
+
values(): MapIterator<Value>;
|
|
12
|
+
[Symbol.iterator](): MapIterator<[Key, Value]>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=readonly-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readonly-map.d.ts","sourceRoot":"","sources":["../src/readonly-map.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,qBAAa,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAE,YAAW,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;;gBAGjE,MAAM,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAK9E,IAAI,IAAI,WAEP;IAED,GAAG,CAAC,GAAG,EAAE,GAAG;IAIZ,GAAG,CAAC,GAAG,EAAE,GAAG;IAIZ,OAAO,CACL,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,IAAI,EACxE,OAAO,CAAC,EAAE,OAAO;IAKnB,OAAO;IAIP,IAAI;IAIJ,MAAM;IAIN,CAAC,MAAM,CAAC,QAAQ,CAAC;CAGlB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type Awaitable<T> = T | PromiseLike<T>;
|
|
2
|
+
export interface Disposable {
|
|
3
|
+
dispose(): void | Promise<void>;
|
|
4
|
+
[Symbol.dispose]?(): void;
|
|
5
|
+
[Symbol.asyncDispose]?(): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export interface Publication extends Disposable {
|
|
8
|
+
publish(): void;
|
|
9
|
+
}
|
|
10
|
+
export interface StagedResource<T extends Disposable> extends Publication {
|
|
11
|
+
readonly handle: T;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,OAAO,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC;IAC1B,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,UAAU,CAAE,SAAQ,WAAW;IACvE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;CACpB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Serial execution where each caller keeps its own result and failures do not poison the tail. */
|
|
2
|
+
export declare class SerialQueue {
|
|
3
|
+
#private;
|
|
4
|
+
get settled(): Promise<void>;
|
|
5
|
+
run<T>(operation: () => T | PromiseLike<T>): Promise<T>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=serial-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serial-queue.d.ts","sourceRoot":"","sources":["../src/serial-queue.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,qBAAa,WAAW;;IAGtB,IAAI,OAAO,kBAEV;IAED,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAWxD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Disposable } from './resource';
|
|
2
|
+
export interface SnapshotView<T> {
|
|
3
|
+
get(): T;
|
|
4
|
+
subscribe(listener: () => void): Disposable;
|
|
5
|
+
}
|
|
6
|
+
/** Synchronous writer for immutable operational snapshots. */
|
|
7
|
+
export declare class SnapshotPublisher<T> implements Disposable {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(read: () => T, report: (error: unknown) => void);
|
|
10
|
+
readonly view: SnapshotView<T>;
|
|
11
|
+
invalidate(): void;
|
|
12
|
+
dispose(): void;
|
|
13
|
+
[Symbol.dispose](): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=snapshot-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot-view.d.ts","sourceRoot":"","sources":["../src/snapshot-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,GAAG,IAAI,CAAC,CAAC;IACT,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,UAAU,CAAC;CAC7C;AAoBD,8DAA8D;AAC9D,qBAAa,iBAAiB,CAAC,CAAC,CAAE,YAAW,UAAU;;gBAMzC,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI;IAU3D,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAG3B;IAEH,UAAU;IAYV,OAAO;IAcP,CAAC,MAAM,CAAC,OAAO,CAAC;CAgCjB"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dougongjs/core",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"engines": {
|
|
6
|
+
"node": ">=22"
|
|
7
|
+
},
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md",
|
|
12
|
+
"LICENSE"
|
|
13
|
+
],
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"import": "./dist/index.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@standard-schema/spec": "^1.0.0"
|
|
22
|
+
},
|
|
23
|
+
"description": "Capability composition and structured lifetime kernel for JavaScript/TypeScript.",
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"author": "Dougong contributors",
|
|
26
|
+
"homepage": "https://tangerg.github.io/dougong/",
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "git+https://github.com/Tangerg/dougong.git",
|
|
30
|
+
"directory": "packages/core"
|
|
31
|
+
},
|
|
32
|
+
"bugs": {
|
|
33
|
+
"url": "https://github.com/Tangerg/dougong/issues"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"plugin",
|
|
37
|
+
"plugin-system",
|
|
38
|
+
"dependency-injection",
|
|
39
|
+
"lifetime",
|
|
40
|
+
"service-container",
|
|
41
|
+
"typescript"
|
|
42
|
+
],
|
|
43
|
+
"publishConfig": {
|
|
44
|
+
"access": "public"
|
|
45
|
+
},
|
|
46
|
+
"scripts": {
|
|
47
|
+
"build": "vite build"
|
|
48
|
+
}
|
|
49
|
+
}
|