@web-widget/react 0.8.5 → 0.8.7

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.
@@ -3,11 +3,9 @@ import { RenderContext, ComponentProps } from '@web-widget/schema';
3
3
  import * as react from 'react';
4
4
  import { ReactNode, Component } from 'react';
5
5
  export * from '@web-widget/schema/client-helpers';
6
+ export { useWidgetSyncState as useWidgetState } from '@web-widget/schema/client-helpers';
6
7
  import { WebWidgetContainerOptions, Loader } from '@web-widget/web-widget';
7
8
 
8
- declare const __ENV__: {
9
- server: boolean;
10
- };
11
9
  interface WebWidgetProps {
12
10
  base?: WebWidgetContainerOptions["base"];
13
11
  children?: ReactNode;
@@ -52,7 +50,6 @@ interface CreateReactRenderOptions {
52
50
 
53
51
  declare const createReactRender: ({ onPrefetchData, }?: CreateReactRenderOptions) => (context: _web_widget_schema.ClientWidgetRenderContext<unknown> | _web_widget_schema.ClientRouteRenderContext<unknown, Record<string, string>>, renderOptions: any) => Promise<void | {
54
52
  mount?: (() => void | Promise<void>) | undefined;
55
- /**@deprecated Please use `createReactRender` instead.*/
56
53
  unmount?: (() => void | Promise<void>) | undefined;
57
54
  update?: (({ data }: {
58
55
  data: Record<string, any>;
@@ -67,7 +64,6 @@ declare const createReactRender: ({ onPrefetchData, }?: CreateReactRenderOptions
67
64
  /**@deprecated Please use `createReactRender` instead.*/
68
65
  declare const defineReactRender: ({ onPrefetchData, }?: CreateReactRenderOptions) => (context: _web_widget_schema.ClientWidgetRenderContext<unknown> | _web_widget_schema.ClientRouteRenderContext<unknown, Record<string, string>>, renderOptions: any) => Promise<void | {
69
66
  mount?: (() => void | Promise<void>) | undefined;
70
- /**@deprecated Please use `createReactRender` instead.*/
71
67
  unmount?: (() => void | Promise<void>) | undefined;
72
68
  update?: (({ data }: {
73
69
  data: Record<string, any>;
@@ -81,7 +77,6 @@ declare const defineReactRender: ({ onPrefetchData, }?: CreateReactRenderOptions
81
77
  }>;
82
78
  declare const render: (context: _web_widget_schema.ClientWidgetRenderContext<unknown> | _web_widget_schema.ClientRouteRenderContext<unknown, Record<string, string>>, renderOptions: any) => Promise<void | {
83
79
  mount?: (() => void | Promise<void>) | undefined;
84
- /**@deprecated Please use `createReactRender` instead.*/
85
80
  unmount?: (() => void | Promise<void>) | undefined;
86
81
  update?: (({ data }: {
87
82
  data: Record<string, any>;
@@ -94,4 +89,4 @@ declare const render: (context: _web_widget_schema.ClientWidgetRenderContext<unk
94
89
  }) => void | Promise<void>) | undefined;
95
90
  }>;
96
91
 
97
- export { DefineWebWidgetOptions, WebWidget, WebWidgetProps, WebWidgetSuspenseProps, __ENV__, createReactRender, defineReactRender, defineWebWidget, render };
92
+ export { DefineWebWidgetOptions, WebWidget, WebWidgetProps, WebWidgetSuspenseProps, createReactRender, defineReactRender, defineWebWidget, render };
@@ -37,13 +37,13 @@ import {
37
37
  } from "@web-widget/schema/client-helpers";
38
38
  import { createElement as createElement2, StrictMode } from "react";
39
39
  import { createRoot, hydrateRoot } from "react-dom/client";
40
+ export * from "@web-widget/schema/client-helpers";
41
+ import { useWidgetSyncState } from "@web-widget/schema/client-helpers";
40
42
 
41
- // src/web-widget.ts
43
+ // src/components.ts
42
44
  import { parse } from "@web-widget/web-widget";
43
45
  import { Suspense, createElement, lazy } from "react";
44
- var __ENV__ = {
45
- server: true
46
- };
46
+ import { IS_BROWSER } from "@web-widget/schema/helpers";
47
47
  function WebWidget(_a) {
48
48
  var _b = _a, {
49
49
  children,
@@ -64,7 +64,7 @@ function WebWidget(_a) {
64
64
  // TODO Render children
65
65
  children: ""
66
66
  }));
67
- if (!__ENV__.server) {
67
+ if (IS_BROWSER) {
68
68
  console.warn(`Client components are experimental.`);
69
69
  await customElements.whenDefined(tag);
70
70
  const element = Object.assign(document.createElement(tag), props);
@@ -112,10 +112,6 @@ function defineWebWidget(loader, options) {
112
112
  }
113
113
 
114
114
  // src/client.ts
115
- export * from "@web-widget/schema/client-helpers";
116
- Reflect.defineProperty(__ENV__, "server", {
117
- value: false
118
- });
119
115
  var createReactRender = ({
120
116
  onPrefetchData
121
117
  } = {}) => {
@@ -157,9 +153,9 @@ var defineReactRender = createReactRender;
157
153
  var render = createReactRender();
158
154
  export {
159
155
  WebWidget,
160
- __ENV__,
161
156
  createReactRender,
162
157
  defineReactRender,
163
158
  defineWebWidget,
164
- render
159
+ render,
160
+ useWidgetSyncState as useWidgetState
165
161
  };
@@ -4,11 +4,9 @@ import { RenderToReadableStreamOptions } from 'react-dom/server';
4
4
  import * as react from 'react';
5
5
  import { ReactNode, Component } from 'react';
6
6
  export * from '@web-widget/schema/server-helpers';
7
+ export { useWidgetSyncState as useWidgetState } from '@web-widget/schema/server-helpers';
7
8
  import { WebWidgetContainerOptions, Loader } from '@web-widget/web-widget';
8
9
 
9
- declare const __ENV__: {
10
- server: boolean;
11
- };
12
10
  interface WebWidgetProps {
13
11
  base?: WebWidgetContainerOptions["base"];
14
12
  children?: ReactNode;
@@ -61,4 +59,4 @@ declare const createReactRender: ({ onPrefetchData, }?: CreateReactRenderOptions
61
59
  declare const defineReactRender: ({ onPrefetchData, }?: CreateReactRenderOptions) => (context: _web_widget_schema.ServerWidgetRenderContext<unknown> | _web_widget_schema.ServerRouteRenderContext<unknown, Record<string, string>>, renderOptions: ResponseInit & ReactRenderOptions) => Promise<string | ReadableStream<any> | ReadableStream<any>>;
62
60
  declare const render: (context: _web_widget_schema.ServerWidgetRenderContext<unknown> | _web_widget_schema.ServerRouteRenderContext<unknown, Record<string, string>>, renderOptions: ResponseInit & ReactRenderOptions) => Promise<string | ReadableStream<any> | ReadableStream<any>>;
63
61
 
64
- export { DefineWebWidgetOptions, ReactRenderOptions, WebWidget, WebWidgetProps, WebWidgetSuspenseProps, __ENV__, createReactRender, defineReactRender, defineWebWidget, render };
62
+ export { DefineWebWidgetOptions, ReactRenderOptions, WebWidget, WebWidgetProps, WebWidgetSuspenseProps, createReactRender, defineReactRender, defineWebWidget, render };
@@ -36,13 +36,14 @@ import {
36
36
  getComponentDescriptor
37
37
  } from "@web-widget/schema/server-helpers";
38
38
  import { createElement as createElement2 } from "react";
39
+ import * as ReactDOMServer from "react-dom/server.browser";
40
+ export * from "@web-widget/schema/server-helpers";
41
+ import { useWidgetSyncState } from "@web-widget/schema/server-helpers";
39
42
 
40
- // src/web-widget.ts
43
+ // src/components.ts
41
44
  import { parse } from "@web-widget/web-widget";
42
45
  import { Suspense, createElement, lazy } from "react";
43
- var __ENV__ = {
44
- server: true
45
- };
46
+ import { IS_BROWSER } from "@web-widget/schema/helpers";
46
47
  function WebWidget(_a) {
47
48
  var _b = _a, {
48
49
  children,
@@ -63,7 +64,7 @@ function WebWidget(_a) {
63
64
  // TODO Render children
64
65
  children: ""
65
66
  }));
66
- if (!__ENV__.server) {
67
+ if (IS_BROWSER) {
67
68
  console.warn(`Client components are experimental.`);
68
69
  await customElements.whenDefined(tag);
69
70
  const element = Object.assign(document.createElement(tag), props);
@@ -111,14 +112,23 @@ function defineWebWidget(loader, options) {
111
112
  }
112
113
 
113
114
  // src/server.ts
114
- import * as ReactDOMServer from "react-dom/server.browser";
115
- export * from "@web-widget/schema/server-helpers";
116
- Reflect.defineProperty(__ENV__, "server", {
117
- value: true
118
- });
119
115
  function renderToReadableStream2(vNode, renderOptions) {
120
116
  return ReactDOMServer.renderToReadableStream(vNode, renderOptions);
121
117
  }
118
+ function createTimeoutSignal(ms) {
119
+ const controller = new AbortController();
120
+ const timer = setTimeout(() => {
121
+ controller.abort(
122
+ new Error(`Component did not finish rendering within ${ms}ms.`)
123
+ );
124
+ }, ms);
125
+ return [
126
+ controller.signal,
127
+ function disconnect() {
128
+ clearTimeout(timer);
129
+ }
130
+ ];
131
+ }
122
132
  var createReactRender = ({
123
133
  onPrefetchData
124
134
  } = {}) => {
@@ -126,9 +136,24 @@ var createReactRender = ({
126
136
  throw new Error(`"onPrefetchData" is not supported.`);
127
137
  }
128
138
  return defineRender(
129
- async (context, { react: reactRenderOptions } = {}) => {
139
+ async (context, { react: reactRenderOptions = {} } = {}) => {
140
+ let error, signal, disconnect;
130
141
  const componentDescriptor = getComponentDescriptor(context);
131
142
  const { component, props } = componentDescriptor;
143
+ const onError = reactRenderOptions.onError;
144
+ const awaitAllReady = reactRenderOptions.awaitAllReady;
145
+ if (!reactRenderOptions.signal) {
146
+ [signal, disconnect] = createTimeoutSignal(1e3 * 10);
147
+ reactRenderOptions.signal = signal;
148
+ }
149
+ reactRenderOptions.onError = (e) => {
150
+ error = e;
151
+ if (onError) {
152
+ onError(e);
153
+ } else if (!awaitAllReady) {
154
+ console.error(`[@web-widget/react]`, e);
155
+ }
156
+ };
132
157
  let vNode;
133
158
  if (typeof component === "function" && component.constructor.name === "AsyncFunction") {
134
159
  vNode = await component(props);
@@ -136,9 +161,15 @@ var createReactRender = ({
136
161
  vNode = createElement2(component, props);
137
162
  }
138
163
  const stream = await renderToReadableStream2(vNode, reactRenderOptions);
139
- if (reactRenderOptions == null ? void 0 : reactRenderOptions.awaitAllReady) {
164
+ if (awaitAllReady) {
140
165
  await stream.allReady;
141
166
  }
167
+ if (disconnect) {
168
+ disconnect();
169
+ }
170
+ if (error) {
171
+ throw error;
172
+ }
142
173
  return stream;
143
174
  }
144
175
  );
@@ -147,9 +178,9 @@ var defineReactRender = createReactRender;
147
178
  var render = createReactRender();
148
179
  export {
149
180
  WebWidget,
150
- __ENV__,
151
181
  createReactRender,
152
182
  defineReactRender,
153
183
  defineWebWidget,
154
- render
184
+ render,
185
+ useWidgetSyncState as useWidgetState
155
186
  };
package/globals.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  interface WebWidgetSuspenseProps {
4
4
  fallback?: ReactNode;
5
- experimental_loading?: "lazy" | "eager";
5
+ experimental_loading?: "lazy" | "eager" | "idle";
6
6
  renderStage?: "server" | "client";
7
7
  experimental_renderTarget?: "light" | "shadow";
8
8
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@web-widget/react",
3
- "version": "0.8.5",
3
+ "version": "0.8.7",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -31,9 +31,9 @@
31
31
  "globals.d.ts"
32
32
  ],
33
33
  "dependencies": {
34
- "@web-widget/vite": "2.8.3",
35
- "@web-widget/schema": "0.4.1",
36
- "@web-widget/web-widget": "1.7.0"
34
+ "@web-widget/vite": "2.8.5",
35
+ "@web-widget/schema": "0.4.3",
36
+ "@web-widget/web-widget": "1.7.2"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/react": "^18.2.9",