@web-widget/react 0.2.0 → 0.3.1

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.
@@ -43,11 +43,11 @@ type JSONValue = string | number | boolean | {
43
43
  type JSONProps = {
44
44
  [x: string]: JSONValue;
45
45
  };
46
- interface DefineVueRenderOptions {
46
+ interface DefineReactRenderOptions {
47
47
  onPrefetchData?: (context: RenderContext, component: Component, props: ComponentProps) => Promise<JSONProps>;
48
48
  }
49
49
 
50
- declare const defineReactRender: ({ onPrefetchData, }?: DefineVueRenderOptions) => (context: _web_widget_schema.ClientWidgetRenderContext<unknown> | _web_widget_schema.ClientRouteRenderContext<unknown, Record<string, string>>) => Promise<void | {
50
+ declare const defineReactRender: ({ onPrefetchData, }?: DefineReactRenderOptions) => (context: _web_widget_schema.ClientWidgetRenderContext<unknown> | _web_widget_schema.ClientRouteRenderContext<unknown, Record<string, string>>, renderOptions: any) => Promise<void | {
51
51
  mount?: (() => void | Promise<void>) | undefined;
52
52
  unmount?: (() => void | Promise<void>) | undefined;
53
53
  update?: (({ data }: {
@@ -60,7 +60,7 @@ declare const defineReactRender: ({ onPrefetchData, }?: DefineVueRenderOptions)
60
60
  data: Record<string, any>;
61
61
  }) => void | Promise<void>) | undefined;
62
62
  }>;
63
- declare const render: (context: _web_widget_schema.ClientWidgetRenderContext<unknown> | _web_widget_schema.ClientRouteRenderContext<unknown, Record<string, string>>) => Promise<void | {
63
+ declare const render: (context: _web_widget_schema.ClientWidgetRenderContext<unknown> | _web_widget_schema.ClientRouteRenderContext<unknown, Record<string, string>>, renderOptions: any) => Promise<void | {
64
64
  mount?: (() => void | Promise<void>) | undefined;
65
65
  unmount?: (() => void | Promise<void>) | undefined;
66
66
  update?: (({ data }: {
@@ -30,6 +30,14 @@ var __objRest = (source, exclude) => {
30
30
  return target;
31
31
  };
32
32
 
33
+ // src/client.ts
34
+ import {
35
+ defineRender,
36
+ getComponentDescriptor
37
+ } from "@web-widget/schema/client-helpers";
38
+ import { createElement as createElement2 } from "react";
39
+ import { createRoot, hydrateRoot } from "react-dom/client";
40
+
33
41
  // src/web-widget.tsx
34
42
  import { parse } from "@web-widget/web-widget";
35
43
  import { Suspense, createElement, lazy } from "react";
@@ -100,9 +108,6 @@ function defineWebWidget(loader, options) {
100
108
  }
101
109
 
102
110
  // src/client.ts
103
- import { createElement as createElement2 } from "react";
104
- import { createRoot, hydrateRoot } from "react-dom/client";
105
- import { defineRender } from "@web-widget/schema/client-helpers";
106
111
  export * from "@web-widget/schema/client-helpers";
107
112
  Reflect.defineProperty(__ENV__, "server", {
108
113
  value: false
@@ -110,8 +115,10 @@ Reflect.defineProperty(__ENV__, "server", {
110
115
  var defineReactRender = ({
111
116
  onPrefetchData
112
117
  } = {}) => {
113
- return defineRender(async (context, component, props) => {
118
+ return defineRender(async (context) => {
114
119
  const { recovering, container } = context;
120
+ const componentDescriptor = getComponentDescriptor(context);
121
+ const { component, props } = componentDescriptor;
115
122
  if (!container) {
116
123
  throw new Error(`Container required.`);
117
124
  }
@@ -128,10 +135,7 @@ var defineReactRender = ({
128
135
  if (typeof component === "function" && component.constructor.name === "AsyncFunction") {
129
136
  vNode = await component(mergedProps);
130
137
  } else {
131
- vNode = createElement2(
132
- component,
133
- mergedProps
134
- );
138
+ vNode = createElement2(component, mergedProps);
135
139
  }
136
140
  if (recovering) {
137
141
  root = hydrateRoot(context.container, vNode);
@@ -1,5 +1,6 @@
1
1
  import * as _web_widget_schema from '@web-widget/schema';
2
2
  import { RenderContext, ComponentProps } from '@web-widget/schema';
3
+ import { RenderToReadableStreamOptions } from 'react-dom/server';
3
4
  import * as react from 'react';
4
5
  import { ReactNode, Component } from 'react';
5
6
  export * from '@web-widget/schema/server-helpers';
@@ -43,11 +44,16 @@ type JSONValue = string | number | boolean | {
43
44
  type JSONProps = {
44
45
  [x: string]: JSONValue;
45
46
  };
46
- interface DefineVueRenderOptions {
47
+ interface DefineReactRenderOptions {
47
48
  onPrefetchData?: (context: RenderContext, component: Component, props: ComponentProps) => Promise<JSONProps>;
48
49
  }
49
50
 
50
- declare const defineReactRender: ({ onPrefetchData, }?: DefineVueRenderOptions) => (context: _web_widget_schema.ServerWidgetRenderContext<unknown> | _web_widget_schema.ServerRouteRenderContext<unknown, Record<string, string>>) => Promise<string | ReadableStream<any>>;
51
- declare const render: (context: _web_widget_schema.ServerWidgetRenderContext<unknown> | _web_widget_schema.ServerRouteRenderContext<unknown, Record<string, string>>) => Promise<string | ReadableStream<any>>;
51
+ interface ReactRenderOptions {
52
+ react?: {
53
+ awaitAllReady?: boolean;
54
+ } & RenderToReadableStreamOptions;
55
+ }
56
+ declare const defineReactRender: ({ onPrefetchData, }?: DefineReactRenderOptions) => (context: _web_widget_schema.ServerWidgetRenderContext<unknown> | _web_widget_schema.ServerRouteRenderContext<unknown, Record<string, string>>, renderOptions: ResponseInit & ReactRenderOptions) => Promise<string | ReadableStream<any> | ReadableStream<any>>;
57
+ 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>>;
52
58
 
53
- export { DefineWebWidgetOptions, WebWidget, WebWidgetProps, WebWidgetSuspenseProps, __ENV__, defineReactRender, defineWebWidget, render };
59
+ export { DefineWebWidgetOptions, ReactRenderOptions, WebWidget, WebWidgetProps, WebWidgetSuspenseProps, __ENV__, defineReactRender, defineWebWidget, render };
@@ -30,6 +30,13 @@ var __objRest = (source, exclude) => {
30
30
  return target;
31
31
  };
32
32
 
33
+ // src/server.ts
34
+ import {
35
+ defineRender,
36
+ getComponentDescriptor
37
+ } from "@web-widget/schema/server-helpers";
38
+ import { Fragment, createElement as createElement2 } from "react";
39
+
33
40
  // src/web-widget.tsx
34
41
  import { parse } from "@web-widget/web-widget";
35
42
  import { Suspense, createElement, lazy } from "react";
@@ -100,10 +107,7 @@ function defineWebWidget(loader, options) {
100
107
  }
101
108
 
102
109
  // src/server.ts
103
- import { Fragment } from "react";
104
- import { createElement as createElement2 } from "react";
105
110
  import * as ReactDOMServer from "react-dom/server.browser";
106
- import { defineRender } from "@web-widget/schema/server-helpers";
107
111
  export * from "@web-widget/schema/server-helpers";
108
112
  Reflect.defineProperty(__ENV__, "server", {
109
113
  value: true
@@ -118,20 +122,25 @@ var ESCAPE_REGEX = /[><\u2028\u2029]/g;
118
122
  function htmlEscapeJsonString(str) {
119
123
  return str.replace(ESCAPE_REGEX, (match) => ESCAPE_LOOKUP[match]);
120
124
  }
125
+ function renderToReadableStream2(vNode, renderOptions) {
126
+ return ReactDOMServer.renderToReadableStream(vNode, renderOptions);
127
+ }
121
128
  var defineReactRender = ({
122
129
  onPrefetchData
123
130
  } = {}) => {
124
- return defineRender(async (context, component, props) => {
125
- const state = onPrefetchData ? await onPrefetchData(context, component, props) : void 0;
126
- const mergedProps = state ? Object.assign({}, state, props) : props;
127
- let vNode;
128
- if (typeof component === "function" && component.constructor.name === "AsyncFunction") {
129
- vNode = await component(mergedProps);
130
- } else {
131
- vNode = createElement2(component, mergedProps);
132
- }
133
- if (state) {
134
- return ReactDOMServer.renderToReadableStream(
131
+ return defineRender(
132
+ async (context, { react: reactRenderOptions } = {}) => {
133
+ const componentDescriptor = getComponentDescriptor(context);
134
+ const { component, props } = componentDescriptor;
135
+ const state = onPrefetchData ? await onPrefetchData(context, component, props) : void 0;
136
+ const mergedProps = state ? Object.assign({}, state, props) : props;
137
+ let vNode;
138
+ if (typeof component === "function" && component.constructor.name === "AsyncFunction") {
139
+ vNode = await component(mergedProps);
140
+ } else {
141
+ vNode = createElement2(component, mergedProps);
142
+ }
143
+ const stream = state ? await renderToReadableStream2(
135
144
  createElement2(Fragment, null, [
136
145
  vNode,
137
146
  createElement2("script", {
@@ -141,12 +150,15 @@ var defineReactRender = ({
141
150
  __html: htmlEscapeJsonString(JSON.stringify(state))
142
151
  }
143
152
  })
144
- ])
145
- );
146
- } else {
147
- return ReactDOMServer.renderToReadableStream(vNode);
153
+ ]),
154
+ reactRenderOptions
155
+ ) : await renderToReadableStream2(vNode, reactRenderOptions);
156
+ if (reactRenderOptions == null ? void 0 : reactRenderOptions.awaitAllReady) {
157
+ await stream.allReady;
158
+ }
159
+ return stream;
148
160
  }
149
- });
161
+ );
150
162
  };
151
163
  var render = defineReactRender();
152
164
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@web-widget/react",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -29,9 +29,9 @@
29
29
  "globals.d.ts"
30
30
  ],
31
31
  "dependencies": {
32
- "@web-widget/vite": "1.1.0",
33
- "@web-widget/schema": "0.0.10",
34
- "@web-widget/web-widget": "1.0.0-alpha.10"
32
+ "@web-widget/vite": "2.0.1",
33
+ "@web-widget/schema": "0.1.1",
34
+ "@web-widget/web-widget": "1.0.0"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/react": "^18.2.9",