@typewirets/react 0.1.0 → 0.2.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/dist/cjs/index.js CHANGED
@@ -43,94 +43,390 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
43
43
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
44
44
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
45
45
  };
46
- var _ReactResolutionContext_resolutionContext, _ReactResolutionContext_resolutions, _ReactResolutionContext_resolutionErrors;
46
+ var _ReactResolutionContext_instances, _ReactResolutionContext_resolutionContext, _ReactResolutionContext_resolutionErrors, _ReactResolutionContext_generation, _ReactResolutionContext_allClearedAt, _ReactResolutionContext_clearedAt, _ReactResolutionContext_clearedSince;
47
47
  Object.defineProperty(exports, "__esModule", { value: true });
48
48
  exports.ContainerContext = exports.ReactResolutionContext = void 0;
49
49
  exports.useContainer = useContainer;
50
50
  exports.useTypeWire = useTypeWire;
51
+ exports.usePreload = usePreload;
51
52
  exports.ResolutionContextProvider = ResolutionContextProvider;
52
53
  const jsx_runtime_1 = require("react/jsx-runtime");
54
+ /**
55
+ * TypeWire React Integration
56
+ *
57
+ * Provides React bindings for TypeWire dependency injection, enabling
58
+ * context-based dependency resolution within React component trees.
59
+ *
60
+ * Key exports:
61
+ * - {@link ReactResolutionContext} — Wraps a `ResolutionContext` with error caching, so a failed resolution doesn't loop under Suspense
62
+ * - {@link ContainerContext} — React Context holding the active resolution context
63
+ * - {@link useContainer} — Hook to access the current resolution context
64
+ * - {@link useTypeWire} — Hook to resolve a TypeWire with React Suspense support
65
+ * - {@link usePreload} — Hook that suspends a subtree once until a set of wires is created
66
+ * - {@link ResolutionContextProvider} — Component that provides a resolution context to the tree
67
+ *
68
+ * @packageDocumentation
69
+ */
53
70
  const React = __importStar(require("react"));
54
71
  const core_1 = require("@typewirets/core");
72
+ /**
73
+ * A React-aware wrapper around {@link ResolutionContext} that caches resolution
74
+ * errors.
75
+ *
76
+ * When a component suspends on a resolution that then fails, React renders it
77
+ * again, and that render would start a new creation, suspend, fail and repeat
78
+ * forever. To stop that loop, the error from a failed `get` is cached, and
79
+ * later `get` and `getSync` calls for the same `TypeSymbol` throw it without
80
+ * calling the underlying context.
81
+ *
82
+ * A cached error lasts until {@link ReactResolutionContext.clearErrors} is
83
+ * called, even across `unbind` and a re-apply: this class only sees a
84
+ * `ResolutionContext`, so it cannot tell that a binding changed. To retry
85
+ * after replacing a binding, call `clearErrors` and then reset the error
86
+ * boundary that caught the error.
87
+ *
88
+ * Calls that run while a resolution is in flight are not deduplicated here.
89
+ * The underlying context must share one in-flight creation per singleton
90
+ * itself, or readers may get different instances. `TypeWireContainer` does,
91
+ * and never hands a creation started before `unbind` to new callers. So does
92
+ * the `@typewirets/inversify` adapter, because Inversify 7 shares concurrent
93
+ * singleton `getAsync` calls. A custom `ResolutionContext` must do the same.
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const container = new TypeWireContainer();
98
+ * const context = new ReactResolutionContext(container);
99
+ * const value = await context.get(MySymbol);
100
+ *
101
+ * // After replacing the binding for MySymbol:
102
+ * context.clearErrors(MySymbol);
103
+ * ```
104
+ */
55
105
  class ReactResolutionContext {
56
106
  constructor(resolutionContext) {
107
+ _ReactResolutionContext_instances.add(this);
108
+ /** The underlying resolution context that performs actual dependency resolution. */
57
109
  _ReactResolutionContext_resolutionContext.set(this, void 0);
58
- _ReactResolutionContext_resolutions.set(this, new Map());
110
+ /** Cached resolution errors, keyed by symbol, to fail fast on repeated access. */
59
111
  _ReactResolutionContext_resolutionErrors.set(this, new Map());
112
+ /** Counts `clearErrors` calls, so a `get` can tell if one ran while it waited. */
113
+ _ReactResolutionContext_generation.set(this, 0);
114
+ /** The generation of the last `clearErrors()` call that cleared every symbol. */
115
+ _ReactResolutionContext_allClearedAt.set(this, 0);
116
+ /** The generation of the last `clearErrors(typeSymbol)` call, per symbol. */
117
+ _ReactResolutionContext_clearedAt.set(this, new Map());
60
118
  __classPrivateFieldSet(this, _ReactResolutionContext_resolutionContext, resolutionContext, "f");
61
119
  }
120
+ /**
121
+ * Synchronously retrieves a resolved instance for the given type symbol.
122
+ *
123
+ * @template T The type of the resolved instance
124
+ * @param typeSymbol - The typed symbol identifying the dependency to resolve
125
+ * @returns The resolved instance
126
+ * @throws Re-throws the cached error if a previous async resolution for this symbol failed
127
+ * @throws Throws if the instance has not been resolved yet (see {@link ResolutionContext.getSync})
128
+ */
62
129
  getSync(typeSymbol) {
63
130
  if (__classPrivateFieldGet(this, _ReactResolutionContext_resolutionErrors, "f").has(typeSymbol.symbol)) {
64
131
  throw __classPrivateFieldGet(this, _ReactResolutionContext_resolutionErrors, "f").get(typeSymbol.symbol);
65
132
  }
66
133
  return __classPrivateFieldGet(this, _ReactResolutionContext_resolutionContext, "f").getSync(typeSymbol);
67
134
  }
135
+ /**
136
+ * Asynchronously resolves an instance for the given type symbol.
137
+ *
138
+ * If a previous resolution for this symbol failed, the cached error is
139
+ * thrown immediately. Otherwise the call goes to the underlying context,
140
+ * which joins a creation already in flight for a singleton.
141
+ *
142
+ * @template T The type of the resolved instance
143
+ * @param typeSymbol - The typed symbol identifying the dependency to resolve
144
+ * @returns A promise that resolves to the instance
145
+ * @throws Re-throws the cached error if a previous resolution for this symbol failed
146
+ */
68
147
  async get(typeSymbol) {
69
- if (__classPrivateFieldGet(this, _ReactResolutionContext_resolutionErrors, "f").has(typeSymbol.symbol)) {
70
- throw __classPrivateFieldGet(this, _ReactResolutionContext_resolutionErrors, "f").get(typeSymbol.symbol);
148
+ const symbol = typeSymbol.symbol;
149
+ if (__classPrivateFieldGet(this, _ReactResolutionContext_resolutionErrors, "f").has(symbol)) {
150
+ throw __classPrivateFieldGet(this, _ReactResolutionContext_resolutionErrors, "f").get(symbol);
71
151
  }
72
- const promise = __classPrivateFieldGet(this, _ReactResolutionContext_resolutions, "f").get(typeSymbol.symbol);
73
- if (promise) {
74
- return promise;
152
+ const startedAt = __classPrivateFieldGet(this, _ReactResolutionContext_generation, "f");
153
+ try {
154
+ return await __classPrivateFieldGet(this, _ReactResolutionContext_resolutionContext, "f").get(typeSymbol);
75
155
  }
76
- const newResolution = __classPrivateFieldGet(this, _ReactResolutionContext_resolutionContext, "f").get(typeSymbol);
77
- __classPrivateFieldGet(this, _ReactResolutionContext_resolutions, "f").set(typeSymbol.symbol, newResolution);
78
- return newResolution
79
- .catch((err) => {
80
- __classPrivateFieldGet(this, _ReactResolutionContext_resolutionErrors, "f").set(typeSymbol.symbol, err);
156
+ catch (err) {
157
+ // A failure that settles after `clearErrors` belongs to the attempt the
158
+ // caller just discarded: hand it to this caller, but don't cache it.
159
+ if (!__classPrivateFieldGet(this, _ReactResolutionContext_instances, "m", _ReactResolutionContext_clearedSince).call(this, symbol, startedAt)) {
160
+ __classPrivateFieldGet(this, _ReactResolutionContext_resolutionErrors, "f").set(symbol, err);
161
+ }
81
162
  throw err;
82
- })
83
- .finally(() => {
84
- __classPrivateFieldGet(this, _ReactResolutionContext_resolutions, "f").delete(typeSymbol.symbol);
85
- });
163
+ }
164
+ }
165
+ /**
166
+ * Forgets cached resolution errors, so the next `get` or `getSync` asks the
167
+ * underlying context again.
168
+ *
169
+ * Call it after replacing a failed binding (`unbind`, then apply the wire
170
+ * again), then reset the error boundary that shows the error. A failure that
171
+ * was still in flight when you call this is not cached when it settles.
172
+ *
173
+ * @param typeSymbol - The symbol whose error to forget. Omit to forget all.
174
+ */
175
+ clearErrors(typeSymbol) {
176
+ __classPrivateFieldSet(this, _ReactResolutionContext_generation, __classPrivateFieldGet(this, _ReactResolutionContext_generation, "f") + 1, "f");
177
+ if (typeSymbol) {
178
+ __classPrivateFieldGet(this, _ReactResolutionContext_resolutionErrors, "f").delete(typeSymbol.symbol);
179
+ __classPrivateFieldGet(this, _ReactResolutionContext_clearedAt, "f").set(typeSymbol.symbol, __classPrivateFieldGet(this, _ReactResolutionContext_generation, "f"));
180
+ return;
181
+ }
182
+ __classPrivateFieldGet(this, _ReactResolutionContext_resolutionErrors, "f").clear();
183
+ __classPrivateFieldGet(this, _ReactResolutionContext_clearedAt, "f").clear();
184
+ __classPrivateFieldSet(this, _ReactResolutionContext_allClearedAt, __classPrivateFieldGet(this, _ReactResolutionContext_generation, "f"), "f");
86
185
  }
87
186
  }
88
187
  exports.ReactResolutionContext = ReactResolutionContext;
89
- _ReactResolutionContext_resolutionContext = new WeakMap(), _ReactResolutionContext_resolutions = new WeakMap(), _ReactResolutionContext_resolutionErrors = new WeakMap();
188
+ _ReactResolutionContext_resolutionContext = new WeakMap(), _ReactResolutionContext_resolutionErrors = new WeakMap(), _ReactResolutionContext_generation = new WeakMap(), _ReactResolutionContext_allClearedAt = new WeakMap(), _ReactResolutionContext_clearedAt = new WeakMap(), _ReactResolutionContext_instances = new WeakSet(), _ReactResolutionContext_clearedSince = function _ReactResolutionContext_clearedSince(symbol, generation) {
189
+ const clearedAt = Math.max(__classPrivateFieldGet(this, _ReactResolutionContext_allClearedAt, "f"), __classPrivateFieldGet(this, _ReactResolutionContext_clearedAt, "f").get(symbol) ?? 0);
190
+ return clearedAt > generation;
191
+ };
192
+ /**
193
+ * The wrapper {@link ResolutionContextProvider} uses for each plain context, so
194
+ * every render and every mount of a provider for that context share one error
195
+ * cache and one context value.
196
+ */
197
+ const reactResolutionContexts = new WeakMap();
198
+ function reactResolutionContextFor(resolutionContext) {
199
+ if (resolutionContext instanceof ReactResolutionContext) {
200
+ return resolutionContext;
201
+ }
202
+ let wrapper = reactResolutionContexts.get(resolutionContext);
203
+ if (!wrapper) {
204
+ wrapper = new ReactResolutionContext(resolutionContext);
205
+ reactResolutionContexts.set(resolutionContext, wrapper);
206
+ }
207
+ return wrapper;
208
+ }
209
+ /**
210
+ * React Context that holds the active {@link ResolutionContext} for the component tree.
211
+ *
212
+ * The default value is an empty {@link TypeWireContainer} wrapped in a
213
+ * {@link ReactResolutionContext}. In practice, you should provide your own
214
+ * container via {@link ResolutionContextProvider}.
215
+ */
90
216
  exports.ContainerContext = React.createContext(new ReactResolutionContext(new core_1.TypeWireContainer()));
217
+ /**
218
+ * Hook to access the current {@link ResolutionContext} from the nearest
219
+ * {@link ResolutionContextProvider}.
220
+ *
221
+ * @returns The current resolution context
222
+ *
223
+ * @example
224
+ * ```tsx
225
+ * function MyComponent() {
226
+ * const container = useContainer();
227
+ * // Use container for manual resolution if needed
228
+ * }
229
+ * ```
230
+ */
91
231
  function useContainer() {
92
232
  const container = React.useContext(exports.ContainerContext);
93
233
  return container;
94
234
  }
95
- function useTypeWire(typeWire) {
235
+ /** Error reason thrown by {@link useTypeWire} with `{ suspend: false }`. */
236
+ const ReasonNotPreloaded = "NotPreloaded";
237
+ const ScopeSingleton = "singleton";
238
+ /** Marks a state that has no value yet, so falsy values still count as values. */
239
+ const NotReady = Symbol("NotReady");
240
+ /**
241
+ * Reads a wire synchronously. Returns `NotReady` when the value isn't
242
+ * created yet and can be waited for; rethrows any other error.
243
+ */
244
+ function readSync(typeWire, container) {
245
+ try {
246
+ return typeWire.getInstanceSync(container);
247
+ }
248
+ catch (err) {
249
+ if (err instanceof core_1.TypeWireError && err.retriable) {
250
+ return NotReady;
251
+ }
252
+ throw err;
253
+ }
254
+ }
255
+ function notPreloaded(typeWire, cause) {
256
+ const name = typeWire.type.symbol.description ?? "(unnamed wire)";
257
+ const err = new core_1.TypeWireError(ReasonNotPreloaded, `${name} is not ready. It was rendered with { suspend: false } before it was created: preload it (container.preload or usePreload) before this component renders.`);
258
+ err.retriable = false;
259
+ Object.defineProperty(err, "cause", {
260
+ value: cause,
261
+ enumerable: false,
262
+ writable: true,
263
+ configurable: true,
264
+ });
265
+ return err;
266
+ }
267
+ /**
268
+ * Hook that resolves a {@link TypeWire} within the current container context,
269
+ * with React Suspense integration.
270
+ *
271
+ * Resolution behavior:
272
+ * 1. **Sync available** — If the wire can be resolved synchronously (e.g., a singleton
273
+ * that was already created or preloaded), the value is returned immediately,
274
+ * including falsy values such as `0`, `""`, `false` and `null`.
275
+ * 2. **Async pending** — If sync resolution fails with a retriable error, the hook
276
+ * starts an async resolution and throws the promise to trigger React Suspense.
277
+ * With `{ suspend: false }` it throws a `TypeWireError` with reason
278
+ * `NotPreloaded` instead.
279
+ * 3. **Error** — If sync resolution fails with a non-retriable error, it is re-thrown.
280
+ *
281
+ * To render without a fallback, preload the wires first, with
282
+ * `container.preload` before rendering or {@link usePreload} higher in the
283
+ * tree. A wire nobody preloaded suspends, so this hook must be used inside a
284
+ * `<Suspense>` boundary unless you pass `{ suspend: false }`.
285
+ *
286
+ * @template T The type of the resolved instance
287
+ * @param typeWire - The TypeWire to resolve
288
+ * @param opts - Optional settings; see {@link UseTypeWireOpts}
289
+ * @returns The resolved instance
290
+ * @throws The resolution promise when the value is not yet available (for Suspense)
291
+ * @throws {@link TypeWireError} with reason `NotPreloaded` when the value is not yet available and `suspend` is `false`
292
+ * @throws {@link TypeWireError} if synchronous resolution fails with a non-retriable error
293
+ *
294
+ * @example
295
+ * ```tsx
296
+ * function UserProfile() {
297
+ * const userService = useTypeWire(UserServiceWire);
298
+ * return <div>{userService.getName()}</div>;
299
+ * }
300
+ *
301
+ * // Preloaded before rendering: no fallback.
302
+ * await container.preload({ wires: [UserServiceWire] });
303
+ *
304
+ * // Or wrap in Suspense for wires that may not be ready yet.
305
+ * <Suspense fallback={<Loading />}>
306
+ * <UserProfile />
307
+ * </Suspense>
308
+ * ```
309
+ */
310
+ function useTypeWire(typeWire, opts) {
96
311
  const container = useContainer();
97
- const [value, setValue] = React.useState(() => {
312
+ const suspend = opts?.suspend ?? true;
313
+ const [state, setState] = React.useState(() => ({ value: readSync(typeWire, container) }));
314
+ if (state.value === NotReady && !suspend) {
315
+ let cause;
98
316
  try {
99
- return typeWire.getInstanceSync(container);
317
+ typeWire.getInstanceSync(container);
100
318
  }
101
319
  catch (err) {
102
- if (err instanceof core_1.TypeWireError && err.retriable) {
103
- return null;
104
- }
105
- throw err;
320
+ cause = err;
106
321
  }
107
- });
322
+ throw notPreloaded(typeWire, cause);
323
+ }
108
324
  const promise = typeWire.getInstance(container);
109
325
  React.useEffect(() => {
110
- let mounted = false;
326
+ let mounted = true;
111
327
  promise
112
328
  .then((value) => {
113
329
  if (mounted) {
114
- console.log("we got the value", value);
115
- setValue(() => value);
330
+ // Keep the same state object for the same value, so React skips the
331
+ // re-render; a new object here would re-render, start a new
332
+ // `getInstance` and run this effect again, forever.
333
+ setState((prev) => (Object.is(prev.value, value) ? prev : { value }));
116
334
  }
117
335
  })
118
336
  .catch((err) => {
119
- console.error(err);
337
+ if (mounted) {
338
+ console.error(err);
339
+ }
120
340
  });
121
341
  return () => {
122
342
  mounted = false;
123
343
  };
124
344
  }, [promise]);
125
- if (value) {
126
- return value;
345
+ if (state.value !== NotReady) {
346
+ return state.value;
127
347
  }
128
348
  throw promise;
129
349
  }
350
+ /**
351
+ * Hook that suspends the calling component until every singleton in
352
+ * `opts.wires` is created, so components below it read them with
353
+ * {@link useTypeWire} without suspending.
354
+ *
355
+ * Use it where a part of the app starts (a route, a panel, a feature), under
356
+ * one `<Suspense>` boundary: the fallback shows once for the whole set, and
357
+ * the creations run in parallel. A creation that fails reaches the nearest
358
+ * error boundary.
359
+ *
360
+ * It works with any resolution context, including the Inversify adapter.
361
+ * Outside React, use `container.preload` instead.
362
+ *
363
+ * @param opts - The wires to preload; see {@link UsePreloadOpts}
364
+ * @throws A promise while any of the wires is still being created (for Suspense)
365
+ * @throws The creation's error, once one has failed
366
+ *
367
+ * @example
368
+ * ```tsx
369
+ * function ReportsRoute() {
370
+ * usePreload({ wires: [reportsServiceWire, chartsWire] });
371
+ * return <ReportsPage />;
372
+ * }
373
+ *
374
+ * <Suspense fallback={<Loading />}>
375
+ * <ReportsRoute />
376
+ * </Suspense>
377
+ * ```
378
+ */
379
+ function usePreload(opts) {
380
+ const container = useContainer();
381
+ const pending = [];
382
+ for (const wire of opts.wires) {
383
+ if ((wire.scope ?? ScopeSingleton) !== ScopeSingleton) {
384
+ continue;
385
+ }
386
+ if (readSync(wire, container) === NotReady) {
387
+ pending.push(wire.getInstance(container));
388
+ }
389
+ }
390
+ if (pending.length > 0) {
391
+ throw Promise.all(pending);
392
+ }
393
+ }
394
+ /**
395
+ * React component that provides a {@link ResolutionContext} to the component tree.
396
+ *
397
+ * If the given `resolutionContext` is not already a {@link ReactResolutionContext},
398
+ * it is wrapped in one, so a failed resolution reaches an error boundary
399
+ * instead of retrying under Suspense. Each plain context gets one wrapper,
400
+ * reused on every render and every mount, so re-rendering the provider keeps
401
+ * cached errors and gives consumers the same context value.
402
+ *
403
+ * A cached error lasts until `clearErrors` is called, even after `unbind` and
404
+ * a re-apply. To be able to retry, create the {@link ReactResolutionContext}
405
+ * yourself, pass it here, and call its `clearErrors` after replacing the
406
+ * binding.
407
+ *
408
+ * The context must share one in-flight creation per singleton (as
409
+ * `TypeWireContainer` does); see {@link ReactResolutionContext}.
410
+ *
411
+ * @param props.resolutionContext - The resolution context to provide to descendants
412
+ * @param props.children - Child components that will have access to the context
413
+ *
414
+ * @example
415
+ * ```tsx
416
+ * async function main() {
417
+ * const container = new TypeWireContainer();
418
+ * await AppWireGroup.apply(container);
419
+ *
420
+ * createRoot(document.getElementById('root')!).render(
421
+ * <ResolutionContextProvider resolutionContext={container}>
422
+ * <App />
423
+ * </ResolutionContextProvider>
424
+ * );
425
+ * }
426
+ * ```
427
+ */
130
428
  function ResolutionContextProvider(props) {
131
- const resolutionContext = props.resolutionContext instanceof ReactResolutionContext
132
- ? props.resolutionContext
133
- : new ReactResolutionContext(props.resolutionContext);
429
+ const resolutionContext = reactResolutionContextFor(props.resolutionContext);
134
430
  return ((0, jsx_runtime_1.jsx)(exports.ContainerContext, { value: resolutionContext, children: props.children }));
135
431
  }
136
432
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}