@primafuture/contrib-kit-react 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -0
- package/README.md +294 -0
- package/dist/contribution-component.d.ts +82 -0
- package/dist/contribution-component.d.ts.map +1 -0
- package/dist/contribution-component.js +12 -0
- package/dist/contribution-component.js.map +1 -0
- package/dist/extension-outlet.d.ts +155 -0
- package/dist/extension-outlet.d.ts.map +1 -0
- package/dist/extension-outlet.js +229 -0
- package/dist/extension-outlet.js.map +1 -0
- package/dist/extension-registry-provider.d.ts +26 -0
- package/dist/extension-registry-provider.d.ts.map +1 -0
- package/dist/extension-registry-provider.js +82 -0
- package/dist/extension-registry-provider.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/adapter-configuration.d.ts +54 -0
- package/dist/internal/adapter-configuration.d.ts.map +1 -0
- package/dist/internal/adapter-configuration.js +89 -0
- package/dist/internal/adapter-configuration.js.map +1 -0
- package/dist/internal/adapter-context.d.ts +24 -0
- package/dist/internal/adapter-context.d.ts.map +1 -0
- package/dist/internal/adapter-context.js +23 -0
- package/dist/internal/adapter-context.js.map +1 -0
- package/dist/internal/adapter-registry-bridge.d.ts +58 -0
- package/dist/internal/adapter-registry-bridge.d.ts.map +1 -0
- package/dist/internal/adapter-registry-bridge.js +494 -0
- package/dist/internal/adapter-registry-bridge.js.map +1 -0
- package/dist/internal/adapter-registry-protocol.d.ts +53 -0
- package/dist/internal/adapter-registry-protocol.d.ts.map +1 -0
- package/dist/internal/adapter-registry-protocol.js +182 -0
- package/dist/internal/adapter-registry-protocol.js.map +1 -0
- package/dist/internal/adapter-scope.d.ts +87 -0
- package/dist/internal/adapter-scope.d.ts.map +1 -0
- package/dist/internal/adapter-scope.js +346 -0
- package/dist/internal/adapter-scope.js.map +1 -0
- package/dist/internal/implementation-classifier.d.ts +21 -0
- package/dist/internal/implementation-classifier.d.ts.map +1 -0
- package/dist/internal/implementation-classifier.js +39 -0
- package/dist/internal/implementation-classifier.js.map +1 -0
- package/dist/internal/managed-lazy-generation.d.ts +100 -0
- package/dist/internal/managed-lazy-generation.d.ts.map +1 -0
- package/dist/internal/managed-lazy-generation.js +419 -0
- package/dist/internal/managed-lazy-generation.js.map +1 -0
- package/dist/internal/outlet-commit-lease.d.ts +46 -0
- package/dist/internal/outlet-commit-lease.d.ts.map +1 -0
- package/dist/internal/outlet-commit-lease.js +137 -0
- package/dist/internal/outlet-commit-lease.js.map +1 -0
- package/dist/internal/outlet-error-pipeline.d.ts +122 -0
- package/dist/internal/outlet-error-pipeline.d.ts.map +1 -0
- package/dist/internal/outlet-error-pipeline.js +214 -0
- package/dist/internal/outlet-error-pipeline.js.map +1 -0
- package/dist/internal/outlet-input.d.ts +42 -0
- package/dist/internal/outlet-input.d.ts.map +1 -0
- package/dist/internal/outlet-input.js +86 -0
- package/dist/internal/outlet-input.js.map +1 -0
- package/dist/internal/outlet-membership-boundary.d.ts +93 -0
- package/dist/internal/outlet-membership-boundary.d.ts.map +1 -0
- package/dist/internal/outlet-membership-boundary.js +710 -0
- package/dist/internal/outlet-membership-boundary.js.map +1 -0
- package/dist/internal/outlet-membership.d.ts +31 -0
- package/dist/internal/outlet-membership.d.ts.map +1 -0
- package/dist/internal/outlet-membership.js +65 -0
- package/dist/internal/outlet-membership.js.map +1 -0
- package/dist/internal/outlet-projection.d.ts +102 -0
- package/dist/internal/outlet-projection.d.ts.map +1 -0
- package/dist/internal/outlet-projection.js +228 -0
- package/dist/internal/outlet-projection.js.map +1 -0
- package/dist/internal/outlet-reporter-boundary.d.ts +42 -0
- package/dist/internal/outlet-reporter-boundary.d.ts.map +1 -0
- package/dist/internal/outlet-reporter-boundary.js +57 -0
- package/dist/internal/outlet-reporter-boundary.js.map +1 -0
- package/dist/internal/public-input-capture.d.ts +13 -0
- package/dist/internal/public-input-capture.d.ts.map +1 -0
- package/dist/internal/public-input-capture.js +34 -0
- package/dist/internal/public-input-capture.js.map +1 -0
- package/dist/internal/resolved-contributions-query.d.ts +42 -0
- package/dist/internal/resolved-contributions-query.d.ts.map +1 -0
- package/dist/internal/resolved-contributions-query.js +203 -0
- package/dist/internal/resolved-contributions-query.js.map +1 -0
- package/dist/react-adapter-diagnostics.d.ts +199 -0
- package/dist/react-adapter-diagnostics.d.ts.map +1 -0
- package/dist/react-adapter-diagnostics.js +257 -0
- package/dist/react-adapter-diagnostics.js.map +1 -0
- package/dist/react-adapter-error.d.ts +35 -0
- package/dist/react-adapter-error.d.ts.map +1 -0
- package/dist/react-adapter-error.js +37 -0
- package/dist/react-adapter-error.js.map +1 -0
- package/dist/react-extension-point.d.ts +26 -0
- package/dist/react-extension-point.d.ts.map +1 -0
- package/dist/react-extension-point.js +100 -0
- package/dist/react-extension-point.js.map +1 -0
- package/dist/react-lazy-contribution.d.ts +40 -0
- package/dist/react-lazy-contribution.d.ts.map +1 -0
- package/dist/react-lazy-contribution.js +18 -0
- package/dist/react-lazy-contribution.js.map +1 -0
- package/dist/resolved-contributions.d.ts +90 -0
- package/dist/resolved-contributions.d.ts.map +1 -0
- package/dist/resolved-contributions.js +455 -0
- package/dist/resolved-contributions.js.map +1 -0
- package/package.json +47 -0
- package/src/contribution-component.ts +118 -0
- package/src/extension-outlet.ts +590 -0
- package/src/extension-registry-provider.ts +179 -0
- package/src/index.ts +72 -0
- package/src/internal/adapter-configuration.ts +181 -0
- package/src/internal/adapter-context.ts +43 -0
- package/src/internal/adapter-registry-bridge.ts +723 -0
- package/src/internal/adapter-registry-protocol.ts +365 -0
- package/src/internal/adapter-scope.ts +500 -0
- package/src/internal/implementation-classifier.ts +59 -0
- package/src/internal/managed-lazy-generation.ts +540 -0
- package/src/internal/outlet-commit-lease.ts +216 -0
- package/src/internal/outlet-error-pipeline.ts +447 -0
- package/src/internal/outlet-input.ts +264 -0
- package/src/internal/outlet-membership-boundary.ts +1048 -0
- package/src/internal/outlet-membership.ts +125 -0
- package/src/internal/outlet-projection.ts +511 -0
- package/src/internal/outlet-reporter-boundary.ts +105 -0
- package/src/internal/public-input-capture.ts +55 -0
- package/src/internal/resolved-contributions-query.ts +318 -0
- package/src/react-adapter-diagnostics.ts +457 -0
- package/src/react-adapter-error.ts +88 -0
- package/src/react-extension-point.ts +181 -0
- package/src/react-lazy-contribution.ts +66 -0
- package/src/resolved-contributions.ts +895 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type * as contribKitCore from "@primafuture/contrib-kit-core";
|
|
2
|
+
import * as adapterRegistryProtocol from "./adapter-registry-protocol.js";
|
|
3
|
+
import * as reactAdapterError from "../react-adapter-error.js";
|
|
4
|
+
/** Listener tvar kompatibilní s React external-store subscribe callbackem. */
|
|
5
|
+
export type AdapterExternalStoreListener = () => unknown;
|
|
6
|
+
/** Immutable point-specific snapshot token vytvořený pouze mimo render. */
|
|
7
|
+
export interface AdapterPointSnapshotToken {
|
|
8
|
+
/** Rozlišuje committed point cell od pre-subscribe primitive. */
|
|
9
|
+
readonly kind: "point";
|
|
10
|
+
/** Bridge-local monotonní změna bez veřejného identity kontraktu. */
|
|
11
|
+
readonly serial: number;
|
|
12
|
+
}
|
|
13
|
+
/** Hybridní client snapshot před a po committed point bindu. */
|
|
14
|
+
export type AdapterExternalStoreSnapshot = adapterRegistryProtocol.AdapterRegistrySnapshotToken | AdapterPointSnapshotToken | "contrib-kit-react:server";
|
|
15
|
+
/** Constant logical SSR/hydration sentinel bez request-local identity. */
|
|
16
|
+
export declare const ADAPTER_SERVER_SNAPSHOT = "contrib-kit-react:server";
|
|
17
|
+
/** Interní host lifecycle oddělující bridge od konkrétního React hooku. */
|
|
18
|
+
export interface AdapterRegistryBridgeHost {
|
|
19
|
+
/** Ověří current scope epoch po každém reentrantním Core seam. */
|
|
20
|
+
readonly checkpoint: () => void;
|
|
21
|
+
/** Povolí ordinary last-consumer detach pouze během aktivní scope epochy. */
|
|
22
|
+
readonly canFinalizeDetach: () => boolean;
|
|
23
|
+
/** Deterministicky naplánuje nejbližší microtask finalizaci. */
|
|
24
|
+
readonly scheduleMicrotask: (callback: () => void) => void;
|
|
25
|
+
/** Best-effort seam pro committed lifecycle diagnostiku. */
|
|
26
|
+
readonly reportLifecycleFailure: (error: reactAdapterError.ReactAdapterError) => void;
|
|
27
|
+
/** Odstraní fyzicky detached bridge z owning epoch mapy. */
|
|
28
|
+
readonly onDetached: (bridge: AdapterRegistryBridge) => void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Scope-owned multiplexer jednoho Core subscriberu a exact point cells.
|
|
32
|
+
*/
|
|
33
|
+
export declare class AdapterRegistryBridge {
|
|
34
|
+
#private;
|
|
35
|
+
/** Vytvoří lazy bridge bez subscriberu, cellu nebo microtasku. */
|
|
36
|
+
constructor(protocol: adapterRegistryProtocol.AdapterRegistryProtocolSnapshot, host: AdapterRegistryBridgeHost);
|
|
37
|
+
/** Vrátí přesnou raw registry identity používanou owning mapou. */
|
|
38
|
+
readRawRegistry(): object;
|
|
39
|
+
/** Vrátí první stabilní fault pro následnou hook error projekci. */
|
|
40
|
+
readFault(): reactAdapterError.ReactAdapterError | undefined;
|
|
41
|
+
/** Vrátí poslední validní registry-wide lifecycle stav. */
|
|
42
|
+
readRegistryState(): contribKitCore.ExtensionRegistryState;
|
|
43
|
+
/** Pure lookup již committed point cellu bez vytvoření cache state. */
|
|
44
|
+
peekSnapshot(point: contribKitCore.AnyExtensionPoint): AdapterPointSnapshotToken | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Commit-time acquire jednoho React listeneru se subscription rollbackem.
|
|
47
|
+
*/
|
|
48
|
+
subscribe(point: contribKitCore.AnyExtensionPoint, listener: AdapterExternalStoreListener): contribKitCore.Unsubscribe;
|
|
49
|
+
/**
|
|
50
|
+
* Scope cleanup okamžitě revokuje listeners a odloží fyzický unsubscribe.
|
|
51
|
+
*/
|
|
52
|
+
prepareEpochDeactivation(): void;
|
|
53
|
+
/** Zruší Strict grace detach před vznikem nového consumeru stejné epochy. */
|
|
54
|
+
reactivateEpoch(): void;
|
|
55
|
+
/** Terminálně odpojí bridge při generation switchi bez grace. */
|
|
56
|
+
forceDetach(): void;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=adapter-registry-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-registry-bridge.d.ts","sourceRoot":"","sources":["../../src/internal/adapter-registry-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,cAAc,MAAM,+BAA+B,CAAC;AAErE,OAAO,KAAK,uBAAuB,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,iBAAiB,MAAM,2BAA2B,CAAC;AAE/D,8EAA8E;AAC9E,MAAM,MAAM,4BAA4B,GAAG,MAAM,OAAO,CAAC;AAEzD,2EAA2E;AAC3E,MAAM,WAAW,yBAAyB;IACzC,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED,gEAAgE;AAChE,MAAM,MAAM,4BAA4B,GACrC,uBAAuB,CAAC,4BAA4B,GACpD,yBAAyB,GACzB,0BAA0B,CAAC;AAE9B,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,6BAA6B,CAAC;AAElE,2EAA2E;AAC3E,MAAM,WAAW,yBAAyB;IACzC,kEAAkE;IAClE,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAChC,6EAA6E;IAC7E,QAAQ,CAAC,iBAAiB,EAAE,MAAM,OAAO,CAAC;IAC1C,gEAAgE;IAChE,QAAQ,CAAC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAC3D,4DAA4D;IAC5D,QAAQ,CAAC,sBAAsB,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,iBAAiB,KAAK,IAAI,CAAC;IACtF,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAC7D;AA8MD;;GAEG;AACH,qBAAa,qBAAqB;;IA0BjC,kEAAkE;IAClE,YACC,QAAQ,EAAE,uBAAuB,CAAC,+BAA+B,EACjE,IAAI,EAAE,yBAAyB,EAI/B;IAED,mEAAmE;IAC5D,eAAe,IAAI,MAAM,CAE/B;IAED,oEAAoE;IAC7D,SAAS,IAAI,iBAAiB,CAAC,iBAAiB,GAAG,SAAS,CAElE;IAED,2DAA2D;IACpD,iBAAiB,IAAI,cAAc,CAAC,sBAAsB,CAEhE;IAED,uEAAuE;IAChE,YAAY,CAClB,KAAK,EAAE,cAAc,CAAC,iBAAiB,GACrC,yBAAyB,GAAG,SAAS,CAEvC;IAED;;OAEG;IACI,SAAS,CACf,KAAK,EAAE,cAAc,CAAC,iBAAiB,EACvC,QAAQ,EAAE,4BAA4B,GACpC,cAAc,CAAC,WAAW,CAsD5B;IAED;;OAEG;IACI,wBAAwB,IAAI,IAAI,CAQtC;IAED,6EAA6E;IACtE,eAAe,IAAI,IAAI,CAI7B;IAED,iEAAiE;IAC1D,WAAW,IAAI,IAAI,CASzB;CAuUD"}
|
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
import * as adapterRegistryProtocol from "./adapter-registry-protocol.js";
|
|
2
|
+
import * as reactAdapterError from "../react-adapter-error.js";
|
|
3
|
+
/** Constant logical SSR/hydration sentinel bez request-local identity. */
|
|
4
|
+
export const ADAPTER_SERVER_SNAPSHOT = "contrib-kit-react:server";
|
|
5
|
+
/** Public Core event kinds přijímané strukturálním subscriberem. */
|
|
6
|
+
const registryEventKinds = new Set([
|
|
7
|
+
"pointRegistered",
|
|
8
|
+
"pointPolicyUpdated",
|
|
9
|
+
"pointDefinitionRefreshed",
|
|
10
|
+
"contributionActivated",
|
|
11
|
+
"contributionDisposed",
|
|
12
|
+
"contributionReplaced",
|
|
13
|
+
"pointClosed",
|
|
14
|
+
"registryDisposing",
|
|
15
|
+
"registryDisposed",
|
|
16
|
+
]);
|
|
17
|
+
/**
|
|
18
|
+
* Vytvoří stabilní lifecycle chybu bez raw registry, eventu nebo listeneru.
|
|
19
|
+
*/
|
|
20
|
+
function createBridgeError(code, message, field, cause, preserveCause = false) {
|
|
21
|
+
return new reactAdapterError.ReactAdapterError(code, message, preserveCause
|
|
22
|
+
? { cause, details: { field, phase: "lifecycle" } }
|
|
23
|
+
: { details: { field, phase: "lifecycle" } });
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Pohltí sync throw, throwing thenable i async rejection cleanup callbacku.
|
|
27
|
+
*/
|
|
28
|
+
function consumeCleanupResult(callback, reportFailure) {
|
|
29
|
+
let result;
|
|
30
|
+
try {
|
|
31
|
+
result = callback();
|
|
32
|
+
}
|
|
33
|
+
catch (cause) {
|
|
34
|
+
reportFailure(cause);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
void Promise.resolve(result).catch(reportFailure);
|
|
39
|
+
}
|
|
40
|
+
catch (cause) {
|
|
41
|
+
reportFailure(cause);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Bezpečně doručí external-store listener bez úniku host failure.
|
|
46
|
+
*/
|
|
47
|
+
function notifyListener(listener, reportFailure) {
|
|
48
|
+
consumeCleanupResult(listener, reportFailure);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Přečte jedno event pole právě jednou se zachovaným returned receiverem.
|
|
52
|
+
*/
|
|
53
|
+
function readEventProperty(event, property) {
|
|
54
|
+
try {
|
|
55
|
+
return Reflect.get(event, property, event);
|
|
56
|
+
}
|
|
57
|
+
catch (cause) {
|
|
58
|
+
throw createBridgeError("REACT_REGISTRY_INVALID", "Unable to read a committed registry event field.", `registryEvent.${String(property)}`, cause, true);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Přečte jeden array index bez spreadu nebo iterator user code.
|
|
63
|
+
*/
|
|
64
|
+
function readArrayIndex(values, index, field) {
|
|
65
|
+
try {
|
|
66
|
+
return Reflect.get(values, index, values);
|
|
67
|
+
}
|
|
68
|
+
catch (cause) {
|
|
69
|
+
throw createBridgeError("REACT_REGISTRY_INVALID", "Unable to read a committed registry event array entry.", `${field}[${index}]`, cause, true);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Zachytí a plně validuje event dříve, než změní jediný point token.
|
|
74
|
+
*/
|
|
75
|
+
function captureRegistryEvent(value) {
|
|
76
|
+
if (typeof value !== "object" || value === null) {
|
|
77
|
+
throw createBridgeError("REACT_REGISTRY_INVALID", "Committed registry event must be a non-null object.", "registryEvent");
|
|
78
|
+
}
|
|
79
|
+
const revision = readEventProperty(value, "revision");
|
|
80
|
+
const kind = readEventProperty(value, "kind");
|
|
81
|
+
const affectedPoints = readEventProperty(value, "affectedPoints");
|
|
82
|
+
const pointRevisions = readEventProperty(value, "pointRevisions");
|
|
83
|
+
if (typeof revision !== "number" || !Number.isSafeInteger(revision) || revision < 1) {
|
|
84
|
+
throw createBridgeError("REACT_REGISTRY_INVALID", "Committed registry event revision is invalid.", "registryEvent.revision");
|
|
85
|
+
}
|
|
86
|
+
if (typeof kind !== "string" || !registryEventKinds.has(kind)) {
|
|
87
|
+
throw createBridgeError("REACT_REGISTRY_INVALID", "Committed registry event kind is invalid.", "registryEvent.kind");
|
|
88
|
+
}
|
|
89
|
+
if (!Array.isArray(affectedPoints) || !Array.isArray(pointRevisions)) {
|
|
90
|
+
throw createBridgeError("REACT_REGISTRY_INVALID", "Committed registry event point collections must be arrays.", "registryEvent.affectedPoints");
|
|
91
|
+
}
|
|
92
|
+
if (affectedPoints.length !== pointRevisions.length) {
|
|
93
|
+
throw createBridgeError("REACT_REGISTRY_INVALID", "Committed registry event point collections have different lengths.", "registryEvent.pointRevisions");
|
|
94
|
+
}
|
|
95
|
+
const capturedPoints = [];
|
|
96
|
+
for (let index = 0; index < affectedPoints.length; index += 1) {
|
|
97
|
+
const point = readArrayIndex(affectedPoints, index, "registryEvent.affectedPoints");
|
|
98
|
+
const entry = readArrayIndex(pointRevisions, index, "registryEvent.pointRevisions");
|
|
99
|
+
if (typeof point !== "object" || point === null
|
|
100
|
+
|| typeof entry !== "object" || entry === null) {
|
|
101
|
+
throw createBridgeError("REACT_REGISTRY_INVALID", "Committed registry event point entry is invalid.", `registryEvent.pointRevisions[${index}]`);
|
|
102
|
+
}
|
|
103
|
+
const entryPoint = readEventProperty(entry, "point");
|
|
104
|
+
const pointRevision = readEventProperty(entry, "pointRevision");
|
|
105
|
+
if (entryPoint !== point
|
|
106
|
+
|| typeof pointRevision !== "number"
|
|
107
|
+
|| !Number.isSafeInteger(pointRevision)
|
|
108
|
+
|| pointRevision < 1) {
|
|
109
|
+
throw createBridgeError("REACT_REGISTRY_INVALID", "Committed registry event point revision is invalid.", `registryEvent.pointRevisions[${index}]`);
|
|
110
|
+
}
|
|
111
|
+
capturedPoints.push(point);
|
|
112
|
+
}
|
|
113
|
+
return Object.freeze({
|
|
114
|
+
kind: kind,
|
|
115
|
+
affectedPoints: Object.freeze(capturedPoints),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Scope-owned multiplexer jednoho Core subscriberu a exact point cells.
|
|
120
|
+
*/
|
|
121
|
+
export class AdapterRegistryBridge {
|
|
122
|
+
/** First committed read-once registry protocol držený do detach. */
|
|
123
|
+
#protocol;
|
|
124
|
+
/** Owning epoch callbacks a deterministic scheduler. */
|
|
125
|
+
#host;
|
|
126
|
+
/** Weak lookup canonical pointu bez process-global retention. */
|
|
127
|
+
#cellsByPoint = new WeakMap();
|
|
128
|
+
/** Enumerovatelný bounded set pouze pro global invalidaci a detach. */
|
|
129
|
+
#cells = new Set();
|
|
130
|
+
/** Všechny committed consumer records současné epochy. */
|
|
131
|
+
#consumers = new Set();
|
|
132
|
+
/** Zachycený Core unsubscribe callback právě aktivního subscriberu. */
|
|
133
|
+
#unsubscribe;
|
|
134
|
+
/** Zabrání reentrantnímu druhému fyzickému subscribe pokusu. */
|
|
135
|
+
#subscribing = false;
|
|
136
|
+
/** Terminální bridge detach po skutečném grace drainu. */
|
|
137
|
+
#detached = false;
|
|
138
|
+
/** Monotónní token rušící stale detach microtask. */
|
|
139
|
+
#detachGeneration = 0;
|
|
140
|
+
/** Monotónní serial immutable point snapshotů. */
|
|
141
|
+
#snapshotSerial = 0;
|
|
142
|
+
/** První malformed/setup fault sdílený všemi point cells. */
|
|
143
|
+
#fault;
|
|
144
|
+
/** Poslední validní registry lifecycle stav z Core eventů. */
|
|
145
|
+
#registryState = "active";
|
|
146
|
+
/** Vytvoří lazy bridge bez subscriberu, cellu nebo microtasku. */
|
|
147
|
+
constructor(protocol, host) {
|
|
148
|
+
this.#protocol = protocol;
|
|
149
|
+
this.#host = host;
|
|
150
|
+
}
|
|
151
|
+
/** Vrátí přesnou raw registry identity používanou owning mapou. */
|
|
152
|
+
readRawRegistry() {
|
|
153
|
+
return this.#protocol.rawRegistry;
|
|
154
|
+
}
|
|
155
|
+
/** Vrátí první stabilní fault pro následnou hook error projekci. */
|
|
156
|
+
readFault() {
|
|
157
|
+
return this.#fault;
|
|
158
|
+
}
|
|
159
|
+
/** Vrátí poslední validní registry-wide lifecycle stav. */
|
|
160
|
+
readRegistryState() {
|
|
161
|
+
return this.#registryState;
|
|
162
|
+
}
|
|
163
|
+
/** Pure lookup již committed point cellu bez vytvoření cache state. */
|
|
164
|
+
peekSnapshot(point) {
|
|
165
|
+
return this.#cellsByPoint.get(point)?.token;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Commit-time acquire jednoho React listeneru se subscription rollbackem.
|
|
169
|
+
*/
|
|
170
|
+
subscribe(point, listener) {
|
|
171
|
+
if (typeof listener !== "function") {
|
|
172
|
+
throw new reactAdapterError.ReactAdapterError("REACT_INVALID_ARGUMENT", "External-store listener must be callable.", { details: { field: "listener", phase: "lifecycle" } });
|
|
173
|
+
}
|
|
174
|
+
if (this.#detached) {
|
|
175
|
+
return function releaseDetachedSubscribe() {
|
|
176
|
+
// Terminálně detached bridge stale subscribe znovu neaktivuje.
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
this.#host.checkpoint();
|
|
180
|
+
this.#cancelPendingDetach();
|
|
181
|
+
if (this.#fault !== undefined || this.#registryState !== "active") {
|
|
182
|
+
return this.#notifyRejectedSubscribe(listener);
|
|
183
|
+
}
|
|
184
|
+
const cell = this.#getOrCreateCell(point);
|
|
185
|
+
const record = {
|
|
186
|
+
active: true,
|
|
187
|
+
cell,
|
|
188
|
+
listener,
|
|
189
|
+
};
|
|
190
|
+
this.#consumers.add(record);
|
|
191
|
+
cell.listeners.set(listener, (cell.listeners.get(listener) ?? 0) + 1);
|
|
192
|
+
if (this.#unsubscribe === undefined && !this.#establishSubscription()) {
|
|
193
|
+
this.#removeConsumer(record);
|
|
194
|
+
return function releaseRejectedProvisionalSubscribe() {
|
|
195
|
+
// Fault už provisional listener invalidoval; stale scope jej nedoručuje.
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
this.#host.checkpoint();
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
this.#removeConsumer(record);
|
|
203
|
+
this.#scheduleDetachIfEmpty();
|
|
204
|
+
return function releaseStaleSubscribe() {
|
|
205
|
+
// Reentrant scope invalidace již provisional membership odstranila.
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
this.#notifyOne(listener);
|
|
209
|
+
const bridge = this;
|
|
210
|
+
/** Idempotentně uvolní právě tuto committed membership. */
|
|
211
|
+
function releaseConsumer() {
|
|
212
|
+
bridge.#releaseConsumer(record);
|
|
213
|
+
}
|
|
214
|
+
return releaseConsumer;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Scope cleanup okamžitě revokuje listeners a odloží fyzický unsubscribe.
|
|
218
|
+
*/
|
|
219
|
+
prepareEpochDeactivation() {
|
|
220
|
+
if (this.#detached) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
for (const record of [...this.#consumers]) {
|
|
224
|
+
this.#removeConsumer(record);
|
|
225
|
+
}
|
|
226
|
+
this.#scheduleDetach();
|
|
227
|
+
}
|
|
228
|
+
/** Zruší Strict grace detach před vznikem nového consumeru stejné epochy. */
|
|
229
|
+
reactivateEpoch() {
|
|
230
|
+
if (!this.#detached) {
|
|
231
|
+
this.#cancelPendingDetach();
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/** Terminálně odpojí bridge při generation switchi bez grace. */
|
|
235
|
+
forceDetach() {
|
|
236
|
+
if (this.#detached) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
this.#detachGeneration += 1;
|
|
240
|
+
for (const record of [...this.#consumers]) {
|
|
241
|
+
this.#removeConsumer(record);
|
|
242
|
+
}
|
|
243
|
+
this.#finalizeDetach();
|
|
244
|
+
}
|
|
245
|
+
/** Vytvoří immutable point token pouze v commit-time cestě. */
|
|
246
|
+
#createPointToken() {
|
|
247
|
+
this.#snapshotSerial += 1;
|
|
248
|
+
return Object.freeze({ kind: "point", serial: this.#snapshotSerial });
|
|
249
|
+
}
|
|
250
|
+
/** Vrátí existující cell nebo commit-time vytvoří bounded nový cell. */
|
|
251
|
+
#getOrCreateCell(point) {
|
|
252
|
+
const existing = this.#cellsByPoint.get(point);
|
|
253
|
+
if (existing !== undefined) {
|
|
254
|
+
return existing;
|
|
255
|
+
}
|
|
256
|
+
const created = {
|
|
257
|
+
point,
|
|
258
|
+
listeners: new Map(),
|
|
259
|
+
token: this.#createPointToken(),
|
|
260
|
+
};
|
|
261
|
+
this.#cellsByPoint.set(point, created);
|
|
262
|
+
this.#cells.add(created);
|
|
263
|
+
return created;
|
|
264
|
+
}
|
|
265
|
+
/** Připojí jediný Core subscriber a atomicky přijme jeho cleanup capability. */
|
|
266
|
+
#establishSubscription() {
|
|
267
|
+
if (this.#unsubscribe !== undefined) {
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
if (this.#subscribing) {
|
|
271
|
+
this.#commitFault(createBridgeError("REACT_REGISTRY_INVALID", "Registry subscribe reentered before completion.", "registry.subscribe"));
|
|
272
|
+
return false;
|
|
273
|
+
}
|
|
274
|
+
this.#subscribing = true;
|
|
275
|
+
let candidate;
|
|
276
|
+
let accepted = false;
|
|
277
|
+
try {
|
|
278
|
+
/** Přeloží jeden Core event do no-throw atomic bridge invalidace. */
|
|
279
|
+
const handleRegistryEvent = (event) => {
|
|
280
|
+
this.#handleRegistryEvent(event);
|
|
281
|
+
};
|
|
282
|
+
candidate = adapterRegistryProtocol.subscribeAdapterRegistry(this.#protocol, handleRegistryEvent);
|
|
283
|
+
if (typeof candidate !== "function") {
|
|
284
|
+
throw createBridgeError("REACT_REGISTRY_INVALID", "Registry subscribe must return a callable unsubscribe.", "registry.subscribe");
|
|
285
|
+
}
|
|
286
|
+
this.#host.checkpoint();
|
|
287
|
+
adapterRegistryProtocol.requireAdapterRegistryAvailable(this.#protocol, "lifecycle", this.#host.checkpoint);
|
|
288
|
+
if (this.#fault !== undefined) {
|
|
289
|
+
throw this.#fault;
|
|
290
|
+
}
|
|
291
|
+
this.#unsubscribe = candidate;
|
|
292
|
+
accepted = true;
|
|
293
|
+
return true;
|
|
294
|
+
}
|
|
295
|
+
catch (cause) {
|
|
296
|
+
if (typeof candidate === "function" && !accepted) {
|
|
297
|
+
this.#consumeUnsubscribe(candidate);
|
|
298
|
+
}
|
|
299
|
+
const classified = this.#classifySubscribeFailure(cause);
|
|
300
|
+
if (classified !== undefined) {
|
|
301
|
+
this.#commitFault(classified);
|
|
302
|
+
}
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
finally {
|
|
306
|
+
this.#subscribing = false;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
/** Zachová lifecycle precedence po throwing nebo reentrantním subscribe seamu. */
|
|
310
|
+
#classifySubscribeFailure(cause) {
|
|
311
|
+
try {
|
|
312
|
+
this.#host.checkpoint();
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
return undefined;
|
|
316
|
+
}
|
|
317
|
+
try {
|
|
318
|
+
adapterRegistryProtocol.requireAdapterRegistryAvailable(this.#protocol, "lifecycle", this.#host.checkpoint);
|
|
319
|
+
}
|
|
320
|
+
catch (availabilityError) {
|
|
321
|
+
if (availabilityError instanceof reactAdapterError.ReactAdapterError) {
|
|
322
|
+
return availabilityError;
|
|
323
|
+
}
|
|
324
|
+
return createBridgeError("REACT_REGISTRY_UNAVAILABLE", "Registry became unavailable during subscribe.", "registry.state", availabilityError, true);
|
|
325
|
+
}
|
|
326
|
+
if (cause instanceof reactAdapterError.ReactAdapterError) {
|
|
327
|
+
return cause;
|
|
328
|
+
}
|
|
329
|
+
return createBridgeError("REACT_REGISTRY_INVALID", "Registry subscribe failed.", "registry.subscribe", cause, true);
|
|
330
|
+
}
|
|
331
|
+
/** No-throw subscriber boundary s atomic capture-before-commit chováním. */
|
|
332
|
+
#handleRegistryEvent(value) {
|
|
333
|
+
if (this.#detached || this.#fault !== undefined) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
let event;
|
|
337
|
+
try {
|
|
338
|
+
event = captureRegistryEvent(value);
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
this.#commitFault(error instanceof reactAdapterError.ReactAdapterError
|
|
342
|
+
? error
|
|
343
|
+
: createBridgeError("REACT_REGISTRY_INVALID", "Committed registry event capture failed.", "registryEvent", error, true));
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
if (event.kind === "registryDisposing" || event.kind === "registryDisposed") {
|
|
347
|
+
this.#registryState = event.kind === "registryDisposing" ? "disposing" : "disposed";
|
|
348
|
+
for (const cell of this.#cells) {
|
|
349
|
+
this.#bumpCell(cell);
|
|
350
|
+
}
|
|
351
|
+
if (event.kind === "registryDisposed") {
|
|
352
|
+
this.#detachPhysicalSubscription();
|
|
353
|
+
}
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
const affected = new Set(event.affectedPoints);
|
|
357
|
+
for (const cell of this.#cells) {
|
|
358
|
+
if (affected.has(cell.point)) {
|
|
359
|
+
this.#bumpCell(cell);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
/** Atomicky faultne bridge, posune všechny cells a odpojí event autoritu. */
|
|
364
|
+
#commitFault(error) {
|
|
365
|
+
if (this.#fault !== undefined || this.#detached) {
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
this.#fault = error;
|
|
369
|
+
for (const cell of this.#cells) {
|
|
370
|
+
this.#bumpCell(cell);
|
|
371
|
+
}
|
|
372
|
+
this.#detachPhysicalSubscription();
|
|
373
|
+
this.#reportLifecycleFailure(error);
|
|
374
|
+
}
|
|
375
|
+
/** Posune jeden cell token a doručí snapshot současných listeners. */
|
|
376
|
+
#bumpCell(cell) {
|
|
377
|
+
cell.token = this.#createPointToken();
|
|
378
|
+
for (const listener of [...cell.listeners.keys()]) {
|
|
379
|
+
this.#notifyOne(listener);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
/** Bezpečně doručí jeden listener a izoluje jeho případné selhání. */
|
|
383
|
+
#notifyOne(listener) {
|
|
384
|
+
notifyListener(listener, (cause) => {
|
|
385
|
+
this.#reportLifecycleFailure(createBridgeError("REACT_CALLBACK_FAILED", "External-store listener failed.", "listener", cause, true));
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
/** Vrátí stable no-op cleanup a synchronně vynutí snapshot recheck. */
|
|
389
|
+
#notifyRejectedSubscribe(listener) {
|
|
390
|
+
this.#notifyOne(listener);
|
|
391
|
+
return function releaseRejectedSubscribe() {
|
|
392
|
+
// Rejected membership nikdy nezískala bridge ownership.
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
/** Idempotentně uvolní jeden committed consumer record. */
|
|
396
|
+
#releaseConsumer(record) {
|
|
397
|
+
if (!record.active) {
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
this.#removeConsumer(record);
|
|
401
|
+
this.#scheduleDetachIfEmpty();
|
|
402
|
+
}
|
|
403
|
+
/** Odstraní membership bez spuštění detach policy. */
|
|
404
|
+
#removeConsumer(record) {
|
|
405
|
+
if (!record.active) {
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
record.active = false;
|
|
409
|
+
this.#consumers.delete(record);
|
|
410
|
+
const listenerCount = record.cell.listeners.get(record.listener);
|
|
411
|
+
if (listenerCount === 1) {
|
|
412
|
+
record.cell.listeners.delete(record.listener);
|
|
413
|
+
}
|
|
414
|
+
else if (listenerCount !== undefined) {
|
|
415
|
+
record.cell.listeners.set(record.listener, listenerCount - 1);
|
|
416
|
+
}
|
|
417
|
+
if (record.cell.listeners.size === 0) {
|
|
418
|
+
this.#cells.delete(record.cell);
|
|
419
|
+
this.#cellsByPoint.delete(record.cell.point);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
/** Naplánuje bridge detach pouze po skutečně posledním consumeru. */
|
|
423
|
+
#scheduleDetachIfEmpty() {
|
|
424
|
+
if (this.#consumers.size === 0) {
|
|
425
|
+
this.#scheduleDetach();
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
/** Naplánuje tokenově guarded microtask fyzického detach. */
|
|
429
|
+
#scheduleDetach() {
|
|
430
|
+
if (this.#detached) {
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
this.#detachGeneration += 1;
|
|
434
|
+
const generation = this.#detachGeneration;
|
|
435
|
+
this.#host.scheduleMicrotask(() => {
|
|
436
|
+
if (this.#detached
|
|
437
|
+
|| generation !== this.#detachGeneration
|
|
438
|
+
|| this.#consumers.size !== 0
|
|
439
|
+
|| !this.#host.canFinalizeDetach()) {
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
this.#finalizeDetach();
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
/** Zruší stale last-release nebo epoch-deactivation drain. */
|
|
446
|
+
#cancelPendingDetach() {
|
|
447
|
+
this.#detachGeneration += 1;
|
|
448
|
+
}
|
|
449
|
+
/** Terminálně vyčistí bridge a oznámí owning epoch mapě detach. */
|
|
450
|
+
#finalizeDetach() {
|
|
451
|
+
if (this.#detached) {
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
this.#detached = true;
|
|
455
|
+
this.#detachPhysicalSubscription();
|
|
456
|
+
for (const cell of this.#cells) {
|
|
457
|
+
this.#cellsByPoint.delete(cell.point);
|
|
458
|
+
cell.listeners.clear();
|
|
459
|
+
}
|
|
460
|
+
this.#cells.clear();
|
|
461
|
+
this.#consumers.clear();
|
|
462
|
+
try {
|
|
463
|
+
this.#host.onDetached(this);
|
|
464
|
+
}
|
|
465
|
+
catch (cause) {
|
|
466
|
+
this.#reportLifecycleFailure(createBridgeError("REACT_CALLBACK_FAILED", "Bridge detach callback failed.", "bridge.onDetached", cause, true));
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
/** Vyjme Core unsubscribe před best-effort voláním s undefined receiverem. */
|
|
470
|
+
#detachPhysicalSubscription() {
|
|
471
|
+
const unsubscribe = this.#unsubscribe;
|
|
472
|
+
if (unsubscribe === undefined) {
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
475
|
+
this.#unsubscribe = undefined;
|
|
476
|
+
this.#consumeUnsubscribe(unsubscribe);
|
|
477
|
+
}
|
|
478
|
+
/** Spotřebuje všechny cleanup outcomes bez druhého lifecycle outcome. */
|
|
479
|
+
#consumeUnsubscribe(unsubscribe) {
|
|
480
|
+
consumeCleanupResult(() => Reflect.apply(unsubscribe, undefined, []), (cause) => {
|
|
481
|
+
this.#reportLifecycleFailure(createBridgeError("REACT_CALLBACK_FAILED", "Registry unsubscribe failed.", "registry.unsubscribe", cause, true));
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
/** Izoluje lifecycle reporter jako poslední best-effort hranici. */
|
|
485
|
+
#reportLifecycleFailure(error) {
|
|
486
|
+
try {
|
|
487
|
+
this.#host.reportLifecycleFailure(error);
|
|
488
|
+
}
|
|
489
|
+
catch {
|
|
490
|
+
// Diagnostic seam nemá business ani lifecycle autoritu.
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
//# sourceMappingURL=adapter-registry-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-registry-bridge.js","sourceRoot":"","sources":["../../src/internal/adapter-registry-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type * as contribKitCore from "@primafuture/contrib-kit-core";
|
|
2
|
+
/** Lifecycle checkpoint spuštěný po každé user-observable registry operaci. */
|
|
3
|
+
export type AdapterRegistryProtocolCheckpoint = () => void;
|
|
4
|
+
/** Fáze, ve které validní, ale neaktivní registry odmítne novou práci. */
|
|
5
|
+
export type AdapterRegistryAvailabilityPhase = "resolve" | "lifecycle";
|
|
6
|
+
/** Cache-safe pre-subscribe token odvozený pouze z public snapshot stavu. */
|
|
7
|
+
export type AdapterRegistrySnapshotToken = `${contribKitCore.ExtensionRegistryState}:${number}`;
|
|
8
|
+
/**
|
|
9
|
+
* Read-once structural registry snapshot používaný budoucím React bridgem.
|
|
10
|
+
*/
|
|
11
|
+
export interface AdapterRegistryProtocolSnapshot {
|
|
12
|
+
/** Přesný raw receiver bez proxy unwrappingu nebo Core brand kontroly. */
|
|
13
|
+
readonly rawRegistry: object;
|
|
14
|
+
/** Neprázdná registry identita zachycená při vzniku snapshotu. */
|
|
15
|
+
readonly registryId: string;
|
|
16
|
+
/** Aktivní registry stav ověřený až po úplné shape validaci. */
|
|
17
|
+
readonly initialState: "active";
|
|
18
|
+
/** Stabilní reference public Core subscriber metody. */
|
|
19
|
+
readonly subscribe: contribKitCore.ExtensionRegistry["subscribe"];
|
|
20
|
+
/** Stabilní reference public Core snapshot selectoru. */
|
|
21
|
+
readonly createSnapshot: contribKitCore.ExtensionRegistry["createSnapshot"];
|
|
22
|
+
/** Stabilní reference public Core katalogového readu. */
|
|
23
|
+
readonly listContributions: contribKitCore.ExtensionRegistry["listContributions"];
|
|
24
|
+
/** Stabilní reference public Core resolved-view readu. */
|
|
25
|
+
readonly resolveContributions: contribKitCore.ExtensionRegistry["resolveContributions"];
|
|
26
|
+
}
|
|
27
|
+
/** Sdílený checkpoint pro capture bez existující lifecycle autority. */
|
|
28
|
+
export declare function skipAdapterRegistryProtocolCheckpoint(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Zachytí úplný šestipolový registry protocol v normativním pořadí.
|
|
31
|
+
*/
|
|
32
|
+
export declare function captureAdapterRegistryProtocol(value: unknown, checkpoint?: AdapterRegistryProtocolCheckpoint): AdapterRegistryProtocolSnapshot;
|
|
33
|
+
/**
|
|
34
|
+
* Ověří jediný live state read existujícího protocol snapshotu.
|
|
35
|
+
*/
|
|
36
|
+
export declare function requireAdapterRegistryAvailable(protocol: AdapterRegistryProtocolSnapshot, phase: AdapterRegistryAvailabilityPhase, checkpoint?: AdapterRegistryProtocolCheckpoint): "active";
|
|
37
|
+
/**
|
|
38
|
+
* Vytvoří cache-safe primitive pre-subscribe token z public Core snapshotu.
|
|
39
|
+
*/
|
|
40
|
+
export declare function createAdapterRegistrySnapshotToken(protocol: AdapterRegistryProtocolSnapshot, checkpoint?: AdapterRegistryProtocolCheckpoint): AdapterRegistrySnapshotToken;
|
|
41
|
+
/**
|
|
42
|
+
* Zavolá zachycenou subscriber metodu s původní raw registry jako receiverem.
|
|
43
|
+
*/
|
|
44
|
+
export declare function subscribeAdapterRegistry(protocol: AdapterRegistryProtocolSnapshot, listener: contribKitCore.RegistrySubscriber): unknown;
|
|
45
|
+
/**
|
|
46
|
+
* Zavolá zachycený katalogový read s původní raw registry jako receiverem.
|
|
47
|
+
*/
|
|
48
|
+
export declare function listAdapterRegistryContributions<Point extends contribKitCore.AnyExtensionPoint>(protocol: AdapterRegistryProtocolSnapshot, point: Point): unknown;
|
|
49
|
+
/**
|
|
50
|
+
* Zavolá zachycený resolved-view read s původní raw registry jako receiverem.
|
|
51
|
+
*/
|
|
52
|
+
export declare function resolveAdapterRegistryContributions<Point extends contribKitCore.AnyExtensionPoint>(protocol: AdapterRegistryProtocolSnapshot, point: Point, context: contribKitCore.ExtensionPointContext<Point>): unknown;
|
|
53
|
+
//# sourceMappingURL=adapter-registry-protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-registry-protocol.d.ts","sourceRoot":"","sources":["../../src/internal/adapter-registry-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,cAAc,MAAM,+BAA+B,CAAC;AAIrE,+EAA+E;AAC/E,MAAM,MAAM,iCAAiC,GAAG,MAAM,IAAI,CAAC;AAE3D,0EAA0E;AAC1E,MAAM,MAAM,gCAAgC,GAAG,SAAS,GAAG,WAAW,CAAC;AAEvE,6EAA6E;AAC7E,MAAM,MAAM,4BAA4B,GAAG,GAAG,cAAc,CAAC,sBAAsB,IAAI,MAAM,EAAE,CAAC;AAEhG;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC/C,0EAA0E;IAC1E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gEAAgE;IAChE,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC;IAChC,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAClE,yDAAyD;IACzD,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAC5E,yDAAyD;IACzD,QAAQ,CAAC,iBAAiB,EAAE,cAAc,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IAClF,0DAA0D;IAC1D,QAAQ,CAAC,oBAAoB,EAAE,cAAc,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,CAAC;CACxF;AAED,wEAAwE;AACxE,wBAAgB,qCAAqC,IAAI,IAAI,CAE5D;AAyID;;GAEG;AACH,wBAAgB,8BAA8B,CAC7C,KAAK,EAAE,OAAO,EACd,UAAU,GAAE,iCAAyE,GACnF,+BAA+B,CAgCjC;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC9C,QAAQ,EAAE,+BAA+B,EACzC,KAAK,EAAE,gCAAgC,EACvC,UAAU,GAAE,iCAAyE,GACnF,QAAQ,CAGV;AA4DD;;GAEG;AACH,wBAAgB,kCAAkC,CACjD,QAAQ,EAAE,+BAA+B,EACzC,UAAU,GAAE,iCAAyE,GACnF,4BAA4B,CAwC9B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACvC,QAAQ,EAAE,+BAA+B,EACzC,QAAQ,EAAE,cAAc,CAAC,kBAAkB,GACzC,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC/C,KAAK,SAAS,cAAc,CAAC,iBAAiB,EAE9C,QAAQ,EAAE,+BAA+B,EACzC,KAAK,EAAE,KAAK,GACV,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,mCAAmC,CAClD,KAAK,SAAS,cAAc,CAAC,iBAAiB,EAE9C,QAAQ,EAAE,+BAA+B,EACzC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,cAAc,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAClD,OAAO,CAET"}
|