@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 @@
|
|
|
1
|
+
{"version":3,"file":"resolved-contributions.d.ts","sourceRoot":"","sources":["../src/resolved-contributions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
import * as contribKitCore from "@primafuture/contrib-kit-core";
|
|
2
|
+
import * as react from "react";
|
|
3
|
+
import * as adapterConfiguration from "./internal/adapter-configuration.js";
|
|
4
|
+
import * as adapterContext from "./internal/adapter-context.js";
|
|
5
|
+
import * as adapterRegistryBridge from "./internal/adapter-registry-bridge.js";
|
|
6
|
+
import * as adapterRegistryProtocol from "./internal/adapter-registry-protocol.js";
|
|
7
|
+
import * as adapterScope from "./internal/adapter-scope.js";
|
|
8
|
+
import * as outletCommitLease from "./internal/outlet-commit-lease.js";
|
|
9
|
+
import * as outletInput from "./internal/outlet-input.js";
|
|
10
|
+
import * as publicInputCapture from "./internal/public-input-capture.js";
|
|
11
|
+
import * as resolvedContributionsQuery from "./internal/resolved-contributions-query.js";
|
|
12
|
+
import * as reactAdapterDiagnostics from "./react-adapter-diagnostics.js";
|
|
13
|
+
import * as reactAdapterError from "./react-adapter-error.js";
|
|
14
|
+
/** Stable external-store fallback pro configuration a unavailable větve. */
|
|
15
|
+
const EMPTY_EXTERNAL_STORE = Object.freeze({
|
|
16
|
+
/** Resource-free subscribe vracející idempotentní no-op. */
|
|
17
|
+
subscribe() {
|
|
18
|
+
/** Resource-free unsubscribe fallback. */
|
|
19
|
+
function unsubscribe() {
|
|
20
|
+
// Bez validního registry protocolu nevznikla žádná resource.
|
|
21
|
+
}
|
|
22
|
+
return unsubscribe;
|
|
23
|
+
},
|
|
24
|
+
/** Konstantní client snapshot bez host reads. */
|
|
25
|
+
getSnapshot() {
|
|
26
|
+
return "disposed:0";
|
|
27
|
+
},
|
|
28
|
+
/** Konstantní server snapshot sdílený s normálním bridgem. */
|
|
29
|
+
getServerSnapshot() {
|
|
30
|
+
return "contrib-kit-react:server";
|
|
31
|
+
},
|
|
32
|
+
/** Neexistující bridge nemůže mít committed fault. */
|
|
33
|
+
readFault() {
|
|
34
|
+
return undefined;
|
|
35
|
+
},
|
|
36
|
+
/** Fallback pouze splní interní structural interface. */
|
|
37
|
+
readRegistryState() {
|
|
38
|
+
return "disposed";
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
/** Vytvoří resource-free consumer-local scope jako lazy React state. */
|
|
42
|
+
function createConsumerScope() {
|
|
43
|
+
return new adapterScope.AdapterScopeRuntime();
|
|
44
|
+
}
|
|
45
|
+
/** Ověří, že point může bezpečně sloužit jako exact WeakMap capability key. */
|
|
46
|
+
function requirePointObject(value) {
|
|
47
|
+
if (typeof value !== "object" || value === null) {
|
|
48
|
+
throw new reactAdapterError.ReactAdapterError("REACT_INVALID_ARGUMENT", "options.point must be a non-null object.", { details: { field: "options.point", phase: "configuration" } });
|
|
49
|
+
}
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
/** Rozpozná unavailable query failure, která patří do public failed state. */
|
|
53
|
+
function isUnavailableProtocolError(cause) {
|
|
54
|
+
return cause instanceof reactAdapterError.ReactAdapterError
|
|
55
|
+
&& cause.code === "REACT_REGISTRY_UNAVAILABLE"
|
|
56
|
+
&& cause.details.phase === "resolve";
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Zachytí structural registry protocol pro již read-once point/context/config vstup.
|
|
60
|
+
*/
|
|
61
|
+
function captureResolvedRegistry(point, context, registry, configuration, parent, localScope, checkpoint) {
|
|
62
|
+
const scope = parent?.scope ?? localScope;
|
|
63
|
+
let protocol;
|
|
64
|
+
try {
|
|
65
|
+
protocol = adapterRegistryProtocol.captureAdapterRegistryProtocol(registry, checkpoint);
|
|
66
|
+
}
|
|
67
|
+
catch (cause) {
|
|
68
|
+
if (isUnavailableProtocolError(cause)) {
|
|
69
|
+
return Object.freeze({
|
|
70
|
+
kind: "unavailable",
|
|
71
|
+
point,
|
|
72
|
+
context,
|
|
73
|
+
configuration,
|
|
74
|
+
scope,
|
|
75
|
+
rawRegistry: registry,
|
|
76
|
+
generation: parent?.generation,
|
|
77
|
+
cause,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
throw cause;
|
|
81
|
+
}
|
|
82
|
+
const generation = parent?.generation
|
|
83
|
+
?? adapterScope.createAdapterScopeGeneration(protocol, configuration);
|
|
84
|
+
return Object.freeze({
|
|
85
|
+
kind: "captured",
|
|
86
|
+
point,
|
|
87
|
+
context,
|
|
88
|
+
protocol,
|
|
89
|
+
scope,
|
|
90
|
+
generation,
|
|
91
|
+
configuration,
|
|
92
|
+
standalone: parent === undefined,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/** Zachytí hook options v přesném veřejném pořadí bez partial publication. */
|
|
96
|
+
function captureResolvedHook(options, parent, localScope, checkpoint) {
|
|
97
|
+
const source = publicInputCapture.requireInputObject(options, "options");
|
|
98
|
+
const pointValue = publicInputCapture.readInputProperty(source, "point", "options.point", checkpoint);
|
|
99
|
+
const context = publicInputCapture.readInputProperty(source, "context", "options.context", checkpoint);
|
|
100
|
+
const registryValue = publicInputCapture.readInputProperty(source, "registry", "options.registry", checkpoint);
|
|
101
|
+
const sinkValue = publicInputCapture.readInputProperty(source, "sink", "options.sink", checkpoint);
|
|
102
|
+
const projectContextValue = publicInputCapture.readInputProperty(source, "projectContext", "options.projectContext", checkpoint);
|
|
103
|
+
const point = requirePointObject(pointValue);
|
|
104
|
+
const patch = adapterConfiguration.captureAdapterConfigurationPatch(sinkValue, undefined, projectContextValue, checkpoint);
|
|
105
|
+
const configuration = adapterConfiguration.resolveAdapterScopeConfiguration(parent?.generation.configuration, patch);
|
|
106
|
+
const registry = adapterConfiguration.resolveAdapterRegistryInput(registryValue, parent?.generation.defaultProtocol.rawRegistry);
|
|
107
|
+
return captureResolvedRegistry(point, context, registry, configuration, parent, localScope, checkpoint);
|
|
108
|
+
}
|
|
109
|
+
/** Zachytí outlet props jednou a připraví query nad stejným config/scope vstupem. */
|
|
110
|
+
function captureOutletResolvedHook(props, parent, localScope, checkpoint) {
|
|
111
|
+
const input = outletInput.captureOutletInput(props, parent?.generation.defaultProtocol.rawRegistry, parent?.generation.configuration, checkpoint);
|
|
112
|
+
const captured = captureResolvedRegistry(input.point, input.context, input.registry, input.configuration, parent, localScope, checkpoint);
|
|
113
|
+
return Object.freeze({ captured, payload: input });
|
|
114
|
+
}
|
|
115
|
+
/** Vrátí stabilní binding a zachová první committed method capture bridge. */
|
|
116
|
+
function resolveExternalStoreBinding(captured, cacheRef) {
|
|
117
|
+
const cached = cacheRef.current;
|
|
118
|
+
if (cached !== undefined
|
|
119
|
+
&& cached.scope === captured.scope
|
|
120
|
+
&& cached.rawRegistry === captured.protocol.rawRegistry
|
|
121
|
+
&& cached.registryId === captured.protocol.registryId
|
|
122
|
+
&& cached.point === captured.point
|
|
123
|
+
&& adapterScope.isSameAdapterScopeGeneration(cached.generation, captured.generation)) {
|
|
124
|
+
return cached.binding;
|
|
125
|
+
}
|
|
126
|
+
const binding = captured.scope.createExternalStore(captured.generation, captured.protocol, captured.point);
|
|
127
|
+
cacheRef.current = Object.freeze({
|
|
128
|
+
scope: captured.scope,
|
|
129
|
+
generation: captured.generation,
|
|
130
|
+
rawRegistry: captured.protocol.rawRegistry,
|
|
131
|
+
registryId: captured.protocol.registryId,
|
|
132
|
+
point: captured.point,
|
|
133
|
+
binding,
|
|
134
|
+
});
|
|
135
|
+
return binding;
|
|
136
|
+
}
|
|
137
|
+
/** Ověří committed autoritu po každém sink callbacku. */
|
|
138
|
+
function isCommittedAttemptCurrent(authority, committedRef, commandEpochRef) {
|
|
139
|
+
return committedRef.current === authority
|
|
140
|
+
&& commandEpochRef.current === authority.commandEpoch;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Sdílí Hook pořadí, external-store bridge a query mezi public hookem a outletem.
|
|
144
|
+
*/
|
|
145
|
+
function useResolvedContributionsEngine(captureFactory, commitOwner, commitObserver) {
|
|
146
|
+
const parent = adapterContext.useAdapterContext();
|
|
147
|
+
const [localScope] = react.useState(createConsumerScope);
|
|
148
|
+
const [, forceRefresh] = react.useReducer(
|
|
149
|
+
/** Monotonicky posune pouze hook-local render command. */
|
|
150
|
+
function incrementRefreshEpoch(value) {
|
|
151
|
+
return value + 1;
|
|
152
|
+
}, 0);
|
|
153
|
+
const renderSerialRef = react.useRef(0);
|
|
154
|
+
const commandEpochRef = react.useRef(0);
|
|
155
|
+
const controlRef = react.useRef({
|
|
156
|
+
mounted: false,
|
|
157
|
+
allowWithoutGeneration: false,
|
|
158
|
+
});
|
|
159
|
+
const committedRef = react.useRef(undefined);
|
|
160
|
+
const storeCacheRef = react.useRef(undefined);
|
|
161
|
+
const [outletLease, setOutletLease] = react.useState(undefined);
|
|
162
|
+
const [refresh] = react.useState(
|
|
163
|
+
/** Vytvoří právě jednu referenčně stabilní refresh capability. */
|
|
164
|
+
function createRefresh() {
|
|
165
|
+
/** Invaliduje předchozí command autoritu před React update schedulingem. */
|
|
166
|
+
function refreshResolvedContributions() {
|
|
167
|
+
const control = controlRef.current;
|
|
168
|
+
if (!control.mounted) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (!control.allowWithoutGeneration
|
|
172
|
+
&& (control.scope === undefined
|
|
173
|
+
|| control.generation === undefined
|
|
174
|
+
|| !control.scope.isGenerationActive(control.generation))) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
commandEpochRef.current += 1;
|
|
178
|
+
forceRefresh();
|
|
179
|
+
}
|
|
180
|
+
return refreshResolvedContributions;
|
|
181
|
+
});
|
|
182
|
+
renderSerialRef.current += 1;
|
|
183
|
+
const renderSerial = renderSerialRef.current;
|
|
184
|
+
const renderCommandEpoch = commandEpochRef.current;
|
|
185
|
+
/** Ukončí reentrantně stale capture nebo query bez dalšího public Getu. */
|
|
186
|
+
function checkpointRenderAuthority() {
|
|
187
|
+
if (renderSerialRef.current !== renderSerial
|
|
188
|
+
|| commandEpochRef.current !== renderCommandEpoch) {
|
|
189
|
+
throw new reactAdapterError.ReactAdapterError("REACT_ADAPTER_DISPOSED", "The resolved contribution render attempt is no longer current.", { details: { field: "hook.render", phase: "lifecycle" } });
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
let captured;
|
|
193
|
+
let payload;
|
|
194
|
+
try {
|
|
195
|
+
const envelope = captureFactory(parent, localScope, checkpointRenderAuthority);
|
|
196
|
+
captured = envelope.captured;
|
|
197
|
+
payload = envelope.payload;
|
|
198
|
+
}
|
|
199
|
+
catch (cause) {
|
|
200
|
+
captured = Object.freeze({ kind: "configurationFailure", cause });
|
|
201
|
+
}
|
|
202
|
+
const externalStore = captured.kind === "captured"
|
|
203
|
+
? resolveExternalStoreBinding(captured, storeCacheRef)
|
|
204
|
+
: EMPTY_EXTERNAL_STORE;
|
|
205
|
+
let renderAttempt;
|
|
206
|
+
let renderConfiguration;
|
|
207
|
+
let renderScope;
|
|
208
|
+
let renderGeneration;
|
|
209
|
+
let renderStandalone = false;
|
|
210
|
+
const outletRegistryIdentity = captured.kind === "captured"
|
|
211
|
+
? captured.protocol.rawRegistry
|
|
212
|
+
: captured.kind === "unavailable"
|
|
213
|
+
? captured.rawRegistry
|
|
214
|
+
: undefined;
|
|
215
|
+
react.useEffect(
|
|
216
|
+
/** Standalone hook vlastní scope epochu pouze po React commitu. */
|
|
217
|
+
function acquireStandaloneScope() {
|
|
218
|
+
if (!renderStandalone || renderGeneration === undefined || renderScope === undefined) {
|
|
219
|
+
return undefined;
|
|
220
|
+
}
|
|
221
|
+
return renderScope.acquireOwner(renderGeneration);
|
|
222
|
+
}, [captured.kind === "captured" ? captured.scope : undefined,
|
|
223
|
+
captured.kind === "captured" ? captured.generation : undefined,
|
|
224
|
+
captured.kind === "captured" ? captured.standalone : false]);
|
|
225
|
+
react.useEffect(
|
|
226
|
+
/** Publikuje pouze committed attempt autoritu a synchronně ji invaliduje při cleanupu. */
|
|
227
|
+
function commitResolvedAttempt() {
|
|
228
|
+
if (renderAttempt === undefined || renderScope === undefined) {
|
|
229
|
+
return function cleanupMissingAttempt() {
|
|
230
|
+
// Configuration failure nemá committed autoritu k invalidaci.
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
const authority = Object.freeze({
|
|
234
|
+
attempt: renderAttempt,
|
|
235
|
+
commandEpoch: commandEpochRef.current,
|
|
236
|
+
scope: renderScope,
|
|
237
|
+
configuration: renderConfiguration
|
|
238
|
+
?? adapterConfiguration.EMPTY_ADAPTER_SCOPE_CONFIGURATION,
|
|
239
|
+
});
|
|
240
|
+
committedRef.current = authority;
|
|
241
|
+
controlRef.current = {
|
|
242
|
+
mounted: true,
|
|
243
|
+
scope: renderScope,
|
|
244
|
+
...(renderGeneration === undefined ? {} : { generation: renderGeneration }),
|
|
245
|
+
allowWithoutGeneration: renderGeneration === undefined,
|
|
246
|
+
};
|
|
247
|
+
/** Zneplatní uniklé command capability před resource effect cleanupem. */
|
|
248
|
+
function cleanupCommittedAttempt() {
|
|
249
|
+
if (committedRef.current !== authority) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
committedRef.current = undefined;
|
|
253
|
+
controlRef.current.mounted = false;
|
|
254
|
+
commandEpochRef.current += 1;
|
|
255
|
+
}
|
|
256
|
+
return cleanupCommittedAttempt;
|
|
257
|
+
});
|
|
258
|
+
react.useEffect(
|
|
259
|
+
/** Doručí secondary a primary diagnostiku pouze jednou pro committed attempt. */
|
|
260
|
+
function reportCommittedResolveFailure() {
|
|
261
|
+
const authority = committedRef.current;
|
|
262
|
+
if (authority === undefined
|
|
263
|
+
|| authority.attempt !== renderAttempt
|
|
264
|
+
|| renderAttempt?.primaryDiagnostic === undefined
|
|
265
|
+
|| !authority.scope.claimDiagnosticAttempt(renderAttempt.token)) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
if (renderAttempt.secondaryDiagnostic !== undefined) {
|
|
269
|
+
reactAdapterDiagnostics.reportReactAdapterDiagnostic(renderAttempt.secondaryDiagnostic, authority.configuration);
|
|
270
|
+
if (!isCommittedAttemptCurrent(authority, committedRef, commandEpochRef)) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
reactAdapterDiagnostics.reportReactAdapterDiagnostic(renderAttempt.primaryDiagnostic, authority.configuration);
|
|
275
|
+
});
|
|
276
|
+
react.useEffect(
|
|
277
|
+
/** Přidělí outlet ID až po committed query autoritě a active scope epoše. */
|
|
278
|
+
function acquireOutletCommitLease() {
|
|
279
|
+
if (commitOwner === undefined
|
|
280
|
+
|| renderGeneration === undefined
|
|
281
|
+
|| renderScope === undefined
|
|
282
|
+
|| renderAttempt?.state.status !== "resolved"
|
|
283
|
+
|| committedRef.current?.attempt !== renderAttempt) {
|
|
284
|
+
return undefined;
|
|
285
|
+
}
|
|
286
|
+
const lease = renderScope.acquireCommitLease(renderGeneration, "outlet", commitOwner.token);
|
|
287
|
+
setOutletLease(lease);
|
|
288
|
+
/** Synchronous cleanup zneplatní ID před další scope/outlet prací. */
|
|
289
|
+
function releaseOutletCommitLease() {
|
|
290
|
+
lease.release();
|
|
291
|
+
}
|
|
292
|
+
return releaseOutletCommitLease;
|
|
293
|
+
}, [commitOwner?.token, outletRegistryIdentity, renderScope, renderGeneration]);
|
|
294
|
+
react.useEffect(
|
|
295
|
+
/** Doručí outlet observer až po committed authority, sinku a lease effectu. */
|
|
296
|
+
function notifyCommittedResolvedObserver() {
|
|
297
|
+
const attempt = renderAttempt;
|
|
298
|
+
const scope = renderScope;
|
|
299
|
+
if (commitObserver === undefined
|
|
300
|
+
|| attempt === undefined
|
|
301
|
+
|| scope === undefined
|
|
302
|
+
|| payload === undefined) {
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
const authority = committedRef.current;
|
|
306
|
+
if (authority === undefined
|
|
307
|
+
|| authority.attempt !== attempt
|
|
308
|
+
|| !isCommittedAttemptCurrent(authority, committedRef, commandEpochRef)) {
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
const rawRegistry = captured.kind === "captured"
|
|
312
|
+
? captured.protocol.rawRegistry
|
|
313
|
+
: captured.kind === "unavailable"
|
|
314
|
+
? captured.rawRegistry
|
|
315
|
+
: undefined;
|
|
316
|
+
if (rawRegistry === undefined) {
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
const committedAuthority = authority;
|
|
320
|
+
/** Ověří tutéž authority i po user-observable callback seamu. */
|
|
321
|
+
function isCurrent() {
|
|
322
|
+
return isCommittedAttemptCurrent(committedAuthority, committedRef, commandEpochRef);
|
|
323
|
+
}
|
|
324
|
+
const result = Object.freeze({
|
|
325
|
+
state: attempt.state,
|
|
326
|
+
refresh,
|
|
327
|
+
});
|
|
328
|
+
try {
|
|
329
|
+
commitObserver(Object.freeze({
|
|
330
|
+
payload,
|
|
331
|
+
result,
|
|
332
|
+
attempt,
|
|
333
|
+
scope,
|
|
334
|
+
generation: renderGeneration,
|
|
335
|
+
rawRegistry,
|
|
336
|
+
isCurrent,
|
|
337
|
+
checkpoint: checkpointRenderAuthority,
|
|
338
|
+
outletLease,
|
|
339
|
+
serverSnapshot,
|
|
340
|
+
}));
|
|
341
|
+
}
|
|
342
|
+
catch {
|
|
343
|
+
// Interní observer musí vlastní host callback chyby bezpečně normalizovat.
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
const externalStoreSnapshot = react.useSyncExternalStore(externalStore.subscribe, externalStore.getSnapshot, externalStore.getServerSnapshot);
|
|
347
|
+
const serverSnapshot = externalStoreSnapshot === adapterRegistryBridge.ADAPTER_SERVER_SNAPSHOT;
|
|
348
|
+
if (captured.kind === "configurationFailure") {
|
|
349
|
+
throw captured.cause;
|
|
350
|
+
}
|
|
351
|
+
renderConfiguration = captured.configuration;
|
|
352
|
+
renderScope = captured.scope;
|
|
353
|
+
if (captured.kind === "captured") {
|
|
354
|
+
renderGeneration = captured.generation;
|
|
355
|
+
renderStandalone = captured.standalone;
|
|
356
|
+
const bridgeFault = externalStore.readFault();
|
|
357
|
+
renderAttempt = resolvedContributionsQuery.queryResolvedContributions({
|
|
358
|
+
protocol: captured.protocol,
|
|
359
|
+
point: captured.point,
|
|
360
|
+
context: captured.context,
|
|
361
|
+
configuration: captured.configuration,
|
|
362
|
+
...(bridgeFault === undefined ? {} : { bridgeFault }),
|
|
363
|
+
checkpoint: checkpointRenderAuthority,
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
renderAttempt = resolvedContributionsQuery.createFailedResolvedQueryAttempt(captured.cause, captured.point, captured.context, captured.configuration, checkpointRenderAuthority);
|
|
368
|
+
}
|
|
369
|
+
const attempt = renderAttempt;
|
|
370
|
+
const scope = renderScope;
|
|
371
|
+
if (attempt === undefined || scope === undefined || payload === undefined) {
|
|
372
|
+
throw new reactAdapterError.ReactAdapterError("REACT_ADAPTER_DISPOSED", "The resolved contribution render attempt did not produce a complete binding.", { details: { field: "hook.binding", phase: "lifecycle" } });
|
|
373
|
+
}
|
|
374
|
+
const rawRegistry = captured.kind === "captured"
|
|
375
|
+
? captured.protocol.rawRegistry
|
|
376
|
+
: captured.rawRegistry;
|
|
377
|
+
const result = Object.freeze({
|
|
378
|
+
state: attempt.state,
|
|
379
|
+
refresh,
|
|
380
|
+
});
|
|
381
|
+
/** Ověří exact attempt po jeho committed effectu a command epoch gate. */
|
|
382
|
+
function isCurrent() {
|
|
383
|
+
const authority = committedRef.current;
|
|
384
|
+
return authority !== undefined
|
|
385
|
+
&& authority.attempt === attempt
|
|
386
|
+
&& isCommittedAttemptCurrent(authority, committedRef, commandEpochRef);
|
|
387
|
+
}
|
|
388
|
+
return Object.freeze({
|
|
389
|
+
payload,
|
|
390
|
+
result,
|
|
391
|
+
attempt,
|
|
392
|
+
scope,
|
|
393
|
+
generation: renderGeneration,
|
|
394
|
+
rawRegistry,
|
|
395
|
+
isCurrent,
|
|
396
|
+
checkpoint: checkpointRenderAuthority,
|
|
397
|
+
outletLease,
|
|
398
|
+
serverSnapshot,
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Synchronně promítne public Core katalog do React render state.
|
|
403
|
+
*
|
|
404
|
+
* @public
|
|
405
|
+
*/
|
|
406
|
+
export function useResolvedContributions(options) {
|
|
407
|
+
const engine = useResolvedContributionsEngine(
|
|
408
|
+
/** Zachytí public hook options uvnitř společného Hook-order-safe enginu. */
|
|
409
|
+
function capturePublicResolvedHook(parent, localScope, checkpoint) {
|
|
410
|
+
return Object.freeze({
|
|
411
|
+
captured: captureResolvedHook(options, parent, localScope, checkpoint),
|
|
412
|
+
payload: true,
|
|
413
|
+
});
|
|
414
|
+
});
|
|
415
|
+
return engine.result;
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Interně promítne outlet props stejným subscriberem, query a committed autoritou.
|
|
419
|
+
*/
|
|
420
|
+
export function useResolvedContributionsForOutlet(props, commitObserver) {
|
|
421
|
+
const [outletToken] = react.useState(outletCommitLease.createOutletInstanceToken);
|
|
422
|
+
const engine = useResolvedContributionsEngine(
|
|
423
|
+
/** Zachytí celý outlet vstup právě jednou v normativním pořadí. */
|
|
424
|
+
function captureOutletHook(parent, localScope, checkpoint) {
|
|
425
|
+
return captureOutletResolvedHook(props, parent, localScope, checkpoint);
|
|
426
|
+
}, { token: outletToken }, commitObserver === undefined
|
|
427
|
+
? undefined
|
|
428
|
+
: function observeCommittedOutlet(engineResult) {
|
|
429
|
+
commitObserver(Object.freeze({
|
|
430
|
+
input: engineResult.payload,
|
|
431
|
+
result: engineResult.result,
|
|
432
|
+
attempt: engineResult.attempt,
|
|
433
|
+
scope: engineResult.scope,
|
|
434
|
+
generation: engineResult.generation,
|
|
435
|
+
rawRegistry: engineResult.rawRegistry,
|
|
436
|
+
isCurrent: engineResult.isCurrent,
|
|
437
|
+
checkpoint: engineResult.checkpoint,
|
|
438
|
+
outletLease: engineResult.outletLease,
|
|
439
|
+
serverSnapshot: engineResult.serverSnapshot,
|
|
440
|
+
}));
|
|
441
|
+
});
|
|
442
|
+
return Object.freeze({
|
|
443
|
+
input: engine.payload,
|
|
444
|
+
result: engine.result,
|
|
445
|
+
attempt: engine.attempt,
|
|
446
|
+
scope: engine.scope,
|
|
447
|
+
generation: engine.generation,
|
|
448
|
+
rawRegistry: engine.rawRegistry,
|
|
449
|
+
isCurrent: engine.isCurrent,
|
|
450
|
+
checkpoint: engine.checkpoint,
|
|
451
|
+
outletLease: engine.outletLease,
|
|
452
|
+
serverSnapshot: engine.serverSnapshot,
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
//# sourceMappingURL=resolved-contributions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolved-contributions.js","sourceRoot":"","sources":["../src/resolved-contributions.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@primafuture/contrib-kit-react",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "React adapter for Contrib Kit with headless outlets, scoped registries, managed lazy loading, and SSR support.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"react",
|
|
7
|
+
"contributions",
|
|
8
|
+
"extension-points",
|
|
9
|
+
"plugins",
|
|
10
|
+
"typescript"
|
|
11
|
+
],
|
|
12
|
+
"author": "PrimaFuture.cz s.r.o. <dev@primafuture.cz>",
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"type": "module",
|
|
15
|
+
"sideEffects": false,
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"src"
|
|
19
|
+
],
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"import": "./dist/index.js"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"@primafuture/contrib-kit-core": ">=1.0.0 <2",
|
|
28
|
+
"react": ">=18.3.1 <20",
|
|
29
|
+
"react-dom": ">=18.3.1 <20"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@primafuture/contrib-kit-core": "^1.0.0",
|
|
33
|
+
"@types/react": "19.2.17",
|
|
34
|
+
"@types/react-dom": "19.2.3",
|
|
35
|
+
"react": "19.2.8",
|
|
36
|
+
"react-dom": "19.2.8"
|
|
37
|
+
},
|
|
38
|
+
"publishConfig": {
|
|
39
|
+
"access": "public"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"typecheck": "tsc --project tsconfig.json",
|
|
43
|
+
"build": "tsc --build tsconfig.build.json --clean && tsc --build tsconfig.build.json",
|
|
44
|
+
"test": "tsc --project tsconfig.test.json && vitest run",
|
|
45
|
+
"api:check": "api-extractor run"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type * as react from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Privátní compile-time identita, která brání záměně komponent s odlišným kontraktem.
|
|
5
|
+
*/
|
|
6
|
+
declare const reactContributionComponentBrand: unique symbol;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Immutable public view of one contribution passed to a rendering component.
|
|
10
|
+
*
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
export interface ExtensionContributionView<Data> {
|
|
14
|
+
/** Stable identifier of the specific contribution within the registry. */
|
|
15
|
+
readonly contributionId: string;
|
|
16
|
+
|
|
17
|
+
/** Optional owner identifier when the contribution declares one publicly. */
|
|
18
|
+
readonly contributorId?: string;
|
|
19
|
+
|
|
20
|
+
/** Opaque data projection defined by the specific extension point. */
|
|
21
|
+
readonly data: Data;
|
|
22
|
+
|
|
23
|
+
/** Optional human-readable label without adapter runtime identity. */
|
|
24
|
+
readonly label?: string;
|
|
25
|
+
|
|
26
|
+
/** Optional local name that the host can use for readable identification. */
|
|
27
|
+
readonly localName?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Outlet-local logical placement within the final resolved contribution order.
|
|
32
|
+
*
|
|
33
|
+
* @public
|
|
34
|
+
*/
|
|
35
|
+
export interface ResolvedContributionPlacement {
|
|
36
|
+
/** Zero-based position within the final resolved collection. */
|
|
37
|
+
readonly index: number;
|
|
38
|
+
|
|
39
|
+
/** Total number of memberships in the final resolved collection. */
|
|
40
|
+
readonly count: number;
|
|
41
|
+
|
|
42
|
+
/** True only for the first membership in a non-empty collection. */
|
|
43
|
+
readonly isFirst: boolean;
|
|
44
|
+
|
|
45
|
+
/** True only for the last membership in a non-empty collection. */
|
|
46
|
+
readonly isLast: boolean;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The only required props passed by an outlet to a contribution component.
|
|
51
|
+
*
|
|
52
|
+
* @public
|
|
53
|
+
*/
|
|
54
|
+
export interface ExtensionContributionProps<Context, Data> {
|
|
55
|
+
/** Context captured for the current resolution and render attempt. */
|
|
56
|
+
readonly context: Context;
|
|
57
|
+
|
|
58
|
+
/** Immutable public view of the contribution currently being rendered. */
|
|
59
|
+
readonly contribution: ExtensionContributionView<Data>;
|
|
60
|
+
|
|
61
|
+
/** Outlet-local logical placement in the final resolved order. */
|
|
62
|
+
readonly placement: ResolvedContributionPlacement;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* React component verified for the exact contribution context/data contract.
|
|
67
|
+
*
|
|
68
|
+
* A private brand keeps both types invariant and prevents assigning an
|
|
69
|
+
* unverified raw component without {@link defineReactContributionComponent}.
|
|
70
|
+
*
|
|
71
|
+
* @public
|
|
72
|
+
*/
|
|
73
|
+
export type ReactContributionComponent<Context, Data> =
|
|
74
|
+
(react.ComponentType<any> | react.ExoticComponent<any>) & {
|
|
75
|
+
/** Compile-time identity; no property is added to the component at runtime. */
|
|
76
|
+
readonly [reactContributionComponentBrand]: {
|
|
77
|
+
/** Invariant anchor for rendering context. */
|
|
78
|
+
readonly context: (value: Context) => Context;
|
|
79
|
+
|
|
80
|
+
/** Invariant anchor for contribution data. */
|
|
81
|
+
readonly data: (value: Data) => Data;
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Verifies a React component props contract and returns its original runtime reference.
|
|
87
|
+
*
|
|
88
|
+
* The component must require `context`, `contribution`, and `placement`, cannot
|
|
89
|
+
* require any additional prop, and may declare additional optional props.
|
|
90
|
+
*
|
|
91
|
+
* @public
|
|
92
|
+
*/
|
|
93
|
+
export function defineReactContributionComponent<
|
|
94
|
+
const Component extends react.ComponentType<any> | react.ExoticComponent<any>,
|
|
95
|
+
Props = Component extends react.ComponentType<infer ComponentProps>
|
|
96
|
+
? ComponentProps
|
|
97
|
+
: Component extends react.ExoticComponent<infer ExoticProps>
|
|
98
|
+
? ExoticProps
|
|
99
|
+
: never,
|
|
100
|
+
Context = Props extends { readonly context: infer ComponentContext }
|
|
101
|
+
? ComponentContext
|
|
102
|
+
: never,
|
|
103
|
+
Data = Props extends {
|
|
104
|
+
readonly contribution: ExtensionContributionView<infer ComponentData>;
|
|
105
|
+
}
|
|
106
|
+
? ComponentData
|
|
107
|
+
: never,
|
|
108
|
+
>(
|
|
109
|
+
component: Component & (
|
|
110
|
+
Props extends ExtensionContributionProps<Context, Data>
|
|
111
|
+
? ExtensionContributionProps<Context, Data> extends Props
|
|
112
|
+
? unknown
|
|
113
|
+
: never
|
|
114
|
+
: never
|
|
115
|
+
),
|
|
116
|
+
): Component & ReactContributionComponent<Context, Data> {
|
|
117
|
+
return component as unknown as Component & ReactContributionComponent<Context, Data>;
|
|
118
|
+
}
|