@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.
- package/dist/react.client.d.ts +3 -3
- package/dist/react.client.js +12 -8
- package/dist/react.server.d.ts +10 -4
- package/dist/react.server.js +31 -19
- package/package.json +4 -4
package/dist/react.client.d.ts
CHANGED
|
@@ -43,11 +43,11 @@ type JSONValue = string | number | boolean | {
|
|
|
43
43
|
type JSONProps = {
|
|
44
44
|
[x: string]: JSONValue;
|
|
45
45
|
};
|
|
46
|
-
interface
|
|
46
|
+
interface DefineReactRenderOptions {
|
|
47
47
|
onPrefetchData?: (context: RenderContext, component: Component, props: ComponentProps) => Promise<JSONProps>;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
declare const defineReactRender: ({ onPrefetchData, }?:
|
|
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
|
|
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 }: {
|
package/dist/react.client.js
CHANGED
|
@@ -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
|
|
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);
|
package/dist/react.server.d.ts
CHANGED
|
@@ -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
|
|
47
|
+
interface DefineReactRenderOptions {
|
|
47
48
|
onPrefetchData?: (context: RenderContext, component: Component, props: ComponentProps) => Promise<JSONProps>;
|
|
48
49
|
}
|
|
49
50
|
|
|
50
|
-
|
|
51
|
-
|
|
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 };
|
package/dist/react.server.js
CHANGED
|
@@ -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(
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
-
|
|
147
|
-
|
|
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.
|
|
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": "
|
|
33
|
-
"@web-widget/schema": "0.
|
|
34
|
-
"@web-widget/web-widget": "1.0.0
|
|
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",
|