@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.
Files changed (128) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +294 -0
  3. package/dist/contribution-component.d.ts +82 -0
  4. package/dist/contribution-component.d.ts.map +1 -0
  5. package/dist/contribution-component.js +12 -0
  6. package/dist/contribution-component.js.map +1 -0
  7. package/dist/extension-outlet.d.ts +155 -0
  8. package/dist/extension-outlet.d.ts.map +1 -0
  9. package/dist/extension-outlet.js +229 -0
  10. package/dist/extension-outlet.js.map +1 -0
  11. package/dist/extension-registry-provider.d.ts +26 -0
  12. package/dist/extension-registry-provider.d.ts.map +1 -0
  13. package/dist/extension-registry-provider.js +82 -0
  14. package/dist/extension-registry-provider.js.map +1 -0
  15. package/dist/index.d.ts +22 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +14 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/internal/adapter-configuration.d.ts +54 -0
  20. package/dist/internal/adapter-configuration.d.ts.map +1 -0
  21. package/dist/internal/adapter-configuration.js +89 -0
  22. package/dist/internal/adapter-configuration.js.map +1 -0
  23. package/dist/internal/adapter-context.d.ts +24 -0
  24. package/dist/internal/adapter-context.d.ts.map +1 -0
  25. package/dist/internal/adapter-context.js +23 -0
  26. package/dist/internal/adapter-context.js.map +1 -0
  27. package/dist/internal/adapter-registry-bridge.d.ts +58 -0
  28. package/dist/internal/adapter-registry-bridge.d.ts.map +1 -0
  29. package/dist/internal/adapter-registry-bridge.js +494 -0
  30. package/dist/internal/adapter-registry-bridge.js.map +1 -0
  31. package/dist/internal/adapter-registry-protocol.d.ts +53 -0
  32. package/dist/internal/adapter-registry-protocol.d.ts.map +1 -0
  33. package/dist/internal/adapter-registry-protocol.js +182 -0
  34. package/dist/internal/adapter-registry-protocol.js.map +1 -0
  35. package/dist/internal/adapter-scope.d.ts +87 -0
  36. package/dist/internal/adapter-scope.d.ts.map +1 -0
  37. package/dist/internal/adapter-scope.js +346 -0
  38. package/dist/internal/adapter-scope.js.map +1 -0
  39. package/dist/internal/implementation-classifier.d.ts +21 -0
  40. package/dist/internal/implementation-classifier.d.ts.map +1 -0
  41. package/dist/internal/implementation-classifier.js +39 -0
  42. package/dist/internal/implementation-classifier.js.map +1 -0
  43. package/dist/internal/managed-lazy-generation.d.ts +100 -0
  44. package/dist/internal/managed-lazy-generation.d.ts.map +1 -0
  45. package/dist/internal/managed-lazy-generation.js +419 -0
  46. package/dist/internal/managed-lazy-generation.js.map +1 -0
  47. package/dist/internal/outlet-commit-lease.d.ts +46 -0
  48. package/dist/internal/outlet-commit-lease.d.ts.map +1 -0
  49. package/dist/internal/outlet-commit-lease.js +137 -0
  50. package/dist/internal/outlet-commit-lease.js.map +1 -0
  51. package/dist/internal/outlet-error-pipeline.d.ts +122 -0
  52. package/dist/internal/outlet-error-pipeline.d.ts.map +1 -0
  53. package/dist/internal/outlet-error-pipeline.js +214 -0
  54. package/dist/internal/outlet-error-pipeline.js.map +1 -0
  55. package/dist/internal/outlet-input.d.ts +42 -0
  56. package/dist/internal/outlet-input.d.ts.map +1 -0
  57. package/dist/internal/outlet-input.js +86 -0
  58. package/dist/internal/outlet-input.js.map +1 -0
  59. package/dist/internal/outlet-membership-boundary.d.ts +93 -0
  60. package/dist/internal/outlet-membership-boundary.d.ts.map +1 -0
  61. package/dist/internal/outlet-membership-boundary.js +710 -0
  62. package/dist/internal/outlet-membership-boundary.js.map +1 -0
  63. package/dist/internal/outlet-membership.d.ts +31 -0
  64. package/dist/internal/outlet-membership.d.ts.map +1 -0
  65. package/dist/internal/outlet-membership.js +65 -0
  66. package/dist/internal/outlet-membership.js.map +1 -0
  67. package/dist/internal/outlet-projection.d.ts +102 -0
  68. package/dist/internal/outlet-projection.d.ts.map +1 -0
  69. package/dist/internal/outlet-projection.js +228 -0
  70. package/dist/internal/outlet-projection.js.map +1 -0
  71. package/dist/internal/outlet-reporter-boundary.d.ts +42 -0
  72. package/dist/internal/outlet-reporter-boundary.d.ts.map +1 -0
  73. package/dist/internal/outlet-reporter-boundary.js +57 -0
  74. package/dist/internal/outlet-reporter-boundary.js.map +1 -0
  75. package/dist/internal/public-input-capture.d.ts +13 -0
  76. package/dist/internal/public-input-capture.d.ts.map +1 -0
  77. package/dist/internal/public-input-capture.js +34 -0
  78. package/dist/internal/public-input-capture.js.map +1 -0
  79. package/dist/internal/resolved-contributions-query.d.ts +42 -0
  80. package/dist/internal/resolved-contributions-query.d.ts.map +1 -0
  81. package/dist/internal/resolved-contributions-query.js +203 -0
  82. package/dist/internal/resolved-contributions-query.js.map +1 -0
  83. package/dist/react-adapter-diagnostics.d.ts +199 -0
  84. package/dist/react-adapter-diagnostics.d.ts.map +1 -0
  85. package/dist/react-adapter-diagnostics.js +257 -0
  86. package/dist/react-adapter-diagnostics.js.map +1 -0
  87. package/dist/react-adapter-error.d.ts +35 -0
  88. package/dist/react-adapter-error.d.ts.map +1 -0
  89. package/dist/react-adapter-error.js +37 -0
  90. package/dist/react-adapter-error.js.map +1 -0
  91. package/dist/react-extension-point.d.ts +26 -0
  92. package/dist/react-extension-point.d.ts.map +1 -0
  93. package/dist/react-extension-point.js +100 -0
  94. package/dist/react-extension-point.js.map +1 -0
  95. package/dist/react-lazy-contribution.d.ts +40 -0
  96. package/dist/react-lazy-contribution.d.ts.map +1 -0
  97. package/dist/react-lazy-contribution.js +18 -0
  98. package/dist/react-lazy-contribution.js.map +1 -0
  99. package/dist/resolved-contributions.d.ts +90 -0
  100. package/dist/resolved-contributions.d.ts.map +1 -0
  101. package/dist/resolved-contributions.js +455 -0
  102. package/dist/resolved-contributions.js.map +1 -0
  103. package/package.json +47 -0
  104. package/src/contribution-component.ts +118 -0
  105. package/src/extension-outlet.ts +590 -0
  106. package/src/extension-registry-provider.ts +179 -0
  107. package/src/index.ts +72 -0
  108. package/src/internal/adapter-configuration.ts +181 -0
  109. package/src/internal/adapter-context.ts +43 -0
  110. package/src/internal/adapter-registry-bridge.ts +723 -0
  111. package/src/internal/adapter-registry-protocol.ts +365 -0
  112. package/src/internal/adapter-scope.ts +500 -0
  113. package/src/internal/implementation-classifier.ts +59 -0
  114. package/src/internal/managed-lazy-generation.ts +540 -0
  115. package/src/internal/outlet-commit-lease.ts +216 -0
  116. package/src/internal/outlet-error-pipeline.ts +447 -0
  117. package/src/internal/outlet-input.ts +264 -0
  118. package/src/internal/outlet-membership-boundary.ts +1048 -0
  119. package/src/internal/outlet-membership.ts +125 -0
  120. package/src/internal/outlet-projection.ts +511 -0
  121. package/src/internal/outlet-reporter-boundary.ts +105 -0
  122. package/src/internal/public-input-capture.ts +55 -0
  123. package/src/internal/resolved-contributions-query.ts +318 -0
  124. package/src/react-adapter-diagnostics.ts +457 -0
  125. package/src/react-adapter-error.ts +88 -0
  126. package/src/react-extension-point.ts +181 -0
  127. package/src/react-lazy-contribution.ts +66 -0
  128. package/src/resolved-contributions.ts +895 -0
@@ -0,0 +1,264 @@
1
+ import type * as contribKitCore from "@primafuture/contrib-kit-core";
2
+ import type * as react from "react";
3
+
4
+ import * as adapterConfiguration from "./adapter-configuration.js";
5
+ import * as publicInputCapture from "./public-input-capture.js";
6
+ import * as reactAdapterError from "../react-adapter-error.js";
7
+ import type * as reactExtensionPoint from "../react-extension-point.js";
8
+
9
+ /** Interní render callback zachycený bez změny původní reference. */
10
+ export type CapturedOutletCallback<Argument, Result> = (argument: Argument) => Result;
11
+
12
+ /** Immutable read-once vstup budoucího headless outletu. */
13
+ export interface CapturedOutletInput<
14
+ Point extends reactExtensionPoint.AnyReactExtensionPoint,
15
+ > {
16
+ /** Exact canonical point předaný budoucímu resolved hooku. */
17
+ readonly point: Point;
18
+ /** Point-specific context zachycený pro jeden render attempt. */
19
+ readonly context: contribKitCore.ExtensionPointContext<Point>;
20
+ /** Explicitní nebo inherited raw registry vstup bez vzniklé subscription. */
21
+ readonly registry: unknown;
22
+ /** Zda budoucí membership boundary izoluje contribution render chyby. */
23
+ readonly isolateErrors: boolean;
24
+ /** Efektivní outlet-local konfigurace se zachovaným provider inheritance. */
25
+ readonly configuration: adapterConfiguration.AdapterScopeConfiguration;
26
+ /** Optional custom renderer ready membershipu. */
27
+ readonly renderContribution: CapturedOutletCallback<unknown, react.ReactNode> | undefined;
28
+ /** Optional custom renderer loading membershipu. */
29
+ readonly renderLoading: CapturedOutletCallback<unknown, react.ReactNode> | undefined;
30
+ /** Optional custom renderer contribution failure. */
31
+ readonly renderContributionError: CapturedOutletCallback<unknown, react.ReactNode> | undefined;
32
+ /** Optional custom renderer úspěšného prázdného výsledku. */
33
+ readonly renderEmpty: CapturedOutletCallback<unknown, react.ReactNode> | undefined;
34
+ /** Optional custom renderer resolve failure. */
35
+ readonly renderResolveError: CapturedOutletCallback<unknown, react.ReactNode> | undefined;
36
+ /** Optional callback budoucího committed error emission. */
37
+ readonly onError: CapturedOutletCallback<unknown, unknown> | undefined;
38
+ /** Optional callback budoucího committed retry eventu. */
39
+ readonly onRetry: CapturedOutletCallback<unknown, unknown> | undefined;
40
+ }
41
+
42
+ /** Lifecycle checkpoint mezi user-observable capture kroky. */
43
+ export type OutletInputCaptureCheckpoint = () => void;
44
+
45
+ /** Výchozí resource-free checkpoint interního čistého capture. */
46
+ function skipOutletInputCaptureCheckpoint(): void {
47
+ // Volající bez lifecycle autority nepotřebuje další gate.
48
+ }
49
+
50
+ /** Ověří exact point jako non-null objekt bez čtení jeho polí. */
51
+ function requireOutletPoint<
52
+ Point extends reactExtensionPoint.AnyReactExtensionPoint,
53
+ >(value: unknown): Point {
54
+ if (typeof value !== "object" || value === null) {
55
+ throw new reactAdapterError.ReactAdapterError(
56
+ "REACT_INVALID_ARGUMENT",
57
+ "props.point must be a non-null object.",
58
+ { details: { field: "props.point", phase: "configuration" } },
59
+ );
60
+ }
61
+
62
+ return value as Point;
63
+ }
64
+
65
+ /** Normalizuje optional isolate flag bez truthy/falsy coercion. */
66
+ function captureIsolateErrors(value: unknown): boolean {
67
+ if (value === undefined) {
68
+ return true;
69
+ }
70
+ if (typeof value !== "boolean") {
71
+ return publicInputCapture.throwInvalidCapturedArgument(
72
+ "props.isolateErrors",
73
+ "props.isolateErrors must be a boolean when provided.",
74
+ );
75
+ }
76
+
77
+ return value;
78
+ }
79
+
80
+ /** Ověří optional outlet callback bez jeho zavolání nebo přebalení. */
81
+ function captureOptionalOutletCallback<Argument, Result>(
82
+ value: unknown,
83
+ field:
84
+ | "renderContribution"
85
+ | "renderLoading"
86
+ | "renderContributionError"
87
+ | "renderEmpty"
88
+ | "renderResolveError"
89
+ | "onError"
90
+ | "onRetry",
91
+ ): CapturedOutletCallback<Argument, Result> | undefined {
92
+ if (value === undefined) {
93
+ return undefined;
94
+ }
95
+ if (typeof value !== "function") {
96
+ return publicInputCapture.throwInvalidCapturedArgument(
97
+ `props.${field}`,
98
+ `props.${field} must be callable when provided.`,
99
+ );
100
+ }
101
+
102
+ return value as CapturedOutletCallback<Argument, Result>;
103
+ }
104
+
105
+ /**
106
+ * Zachytí budoucí outlet props v normativním pořadí bez vytvoření resource.
107
+ */
108
+ export function captureOutletInput<
109
+ Point extends reactExtensionPoint.AnyReactExtensionPoint,
110
+ >(
111
+ props: object,
112
+ inheritedRegistry: unknown | undefined,
113
+ inheritedConfiguration: adapterConfiguration.AdapterScopeConfiguration | undefined,
114
+ checkpoint: OutletInputCaptureCheckpoint = skipOutletInputCaptureCheckpoint,
115
+ ): CapturedOutletInput<Point> {
116
+ const source = publicInputCapture.requireInputObject(props, "props");
117
+ const pointValue = publicInputCapture.readInputProperty(
118
+ source,
119
+ "point",
120
+ "props.point",
121
+ checkpoint,
122
+ );
123
+ const context = publicInputCapture.readInputProperty(
124
+ source,
125
+ "context",
126
+ "props.context",
127
+ checkpoint,
128
+ ) as contribKitCore.ExtensionPointContext<Point>;
129
+ const registryValue = publicInputCapture.readInputProperty(
130
+ source,
131
+ "registry",
132
+ "props.registry",
133
+ checkpoint,
134
+ );
135
+ const isolateErrorsValue = publicInputCapture.readInputProperty(
136
+ source,
137
+ "isolateErrors",
138
+ "props.isolateErrors",
139
+ checkpoint,
140
+ );
141
+ const sinkValue = publicInputCapture.readInputProperty(
142
+ source,
143
+ "sink",
144
+ "props.sink",
145
+ checkpoint,
146
+ );
147
+ const errorPolicyValue = publicInputCapture.readInputProperty(
148
+ source,
149
+ "errorPolicy",
150
+ "props.errorPolicy",
151
+ checkpoint,
152
+ );
153
+ const projectContextValue = publicInputCapture.readInputProperty(
154
+ source,
155
+ "projectContext",
156
+ "props.projectContext",
157
+ checkpoint,
158
+ );
159
+ const renderContributionValue = publicInputCapture.readInputProperty(
160
+ source,
161
+ "renderContribution",
162
+ "props.renderContribution",
163
+ checkpoint,
164
+ );
165
+ const renderLoadingValue = publicInputCapture.readInputProperty(
166
+ source,
167
+ "renderLoading",
168
+ "props.renderLoading",
169
+ checkpoint,
170
+ );
171
+ const renderContributionErrorValue = publicInputCapture.readInputProperty(
172
+ source,
173
+ "renderContributionError",
174
+ "props.renderContributionError",
175
+ checkpoint,
176
+ );
177
+ const renderEmptyValue = publicInputCapture.readInputProperty(
178
+ source,
179
+ "renderEmpty",
180
+ "props.renderEmpty",
181
+ checkpoint,
182
+ );
183
+ const renderResolveErrorValue = publicInputCapture.readInputProperty(
184
+ source,
185
+ "renderResolveError",
186
+ "props.renderResolveError",
187
+ checkpoint,
188
+ );
189
+ const onErrorValue = publicInputCapture.readInputProperty(
190
+ source,
191
+ "onError",
192
+ "props.onError",
193
+ checkpoint,
194
+ );
195
+ const onRetryValue = publicInputCapture.readInputProperty(
196
+ source,
197
+ "onRetry",
198
+ "props.onRetry",
199
+ checkpoint,
200
+ );
201
+
202
+ const point = requireOutletPoint<Point>(pointValue);
203
+ const isolateErrors = captureIsolateErrors(isolateErrorsValue);
204
+ const registry = adapterConfiguration.resolveAdapterRegistryInput(
205
+ registryValue,
206
+ inheritedRegistry,
207
+ );
208
+ const patch = adapterConfiguration.captureAdapterConfigurationPatch(
209
+ sinkValue,
210
+ errorPolicyValue,
211
+ projectContextValue,
212
+ checkpoint,
213
+ );
214
+ const configuration = adapterConfiguration.resolveAdapterScopeConfiguration(
215
+ inheritedConfiguration,
216
+ patch,
217
+ );
218
+ const renderContribution = captureOptionalOutletCallback<unknown, react.ReactNode>(
219
+ renderContributionValue,
220
+ "renderContribution",
221
+ );
222
+ const renderLoading = captureOptionalOutletCallback<unknown, react.ReactNode>(
223
+ renderLoadingValue,
224
+ "renderLoading",
225
+ );
226
+ const renderContributionError = captureOptionalOutletCallback<unknown, react.ReactNode>(
227
+ renderContributionErrorValue,
228
+ "renderContributionError",
229
+ );
230
+ const renderEmpty = captureOptionalOutletCallback<unknown, react.ReactNode>(
231
+ renderEmptyValue,
232
+ "renderEmpty",
233
+ );
234
+ const renderResolveError = captureOptionalOutletCallback<unknown, react.ReactNode>(
235
+ renderResolveErrorValue,
236
+ "renderResolveError",
237
+ );
238
+ const onError = captureOptionalOutletCallback<unknown, unknown>(onErrorValue, "onError");
239
+ const onRetry = captureOptionalOutletCallback<unknown, unknown>(onRetryValue, "onRetry");
240
+ checkpoint();
241
+
242
+ return Object.freeze({
243
+ point,
244
+ context,
245
+ registry,
246
+ isolateErrors,
247
+ configuration,
248
+ renderContribution,
249
+ renderLoading,
250
+ renderContributionError,
251
+ renderEmpty,
252
+ renderResolveError,
253
+ onError,
254
+ onRetry,
255
+ });
256
+ }
257
+
258
+ /** Zavolá již zachycený outlet callback vždy s `undefined` receiverem. */
259
+ export function callCapturedOutletCallback<Argument, Result>(
260
+ callback: CapturedOutletCallback<Argument, Result>,
261
+ argument: Argument,
262
+ ): Result {
263
+ return Reflect.apply(callback, undefined, [argument]) as Result;
264
+ }