@teambit/ui 0.0.636 → 0.0.640
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/{__preview-1643426469482.js → __preview-1643858579620.js} +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.js +4 -52
- package/dist/index.js.map +1 -1
- package/dist/react-ssr/index.d.ts +5 -0
- package/dist/react-ssr/index.js +23 -0
- package/dist/react-ssr/index.js.map +1 -0
- package/dist/react-ssr/react-ssr.d.ts +21 -0
- package/dist/react-ssr/react-ssr.js +285 -0
- package/dist/react-ssr/react-ssr.js.map +1 -0
- package/dist/{render-lifecycle.d.ts → react-ssr/render-lifecycle.d.ts} +8 -4
- package/dist/{render-lifecycle.js → react-ssr/render-lifecycle.js} +0 -0
- package/dist/{render-lifecycle.js.map → react-ssr/render-lifecycle.js.map} +0 -0
- package/dist/{ssr → react-ssr}/request-browser.d.ts +0 -5
- package/dist/react-ssr/request-browser.js +3 -0
- package/dist/{ssr/request-server.js.map → react-ssr/request-browser.js.map} +0 -0
- package/dist/{ssr → react-ssr}/request-server.d.ts +0 -0
- package/dist/{ssr → react-ssr}/request-server.js +0 -0
- package/dist/{ssr/ssr-content.js.map → react-ssr/request-server.js.map} +0 -0
- package/dist/{ssr → react-ssr}/ssr-content.d.ts +0 -0
- package/dist/{ssr → react-ssr}/ssr-content.js +0 -0
- package/dist/react-ssr/ssr-content.js.map +1 -0
- package/dist/ssr-middleware/extract-browser-data.d.ts +6 -0
- package/dist/{ssr/request-browser.js → ssr-middleware/extract-browser-data.js} +4 -5
- package/dist/ssr-middleware/extract-browser-data.js.map +1 -0
- package/dist/ssr-middleware/index.d.ts +1 -0
- package/dist/ssr-middleware/index.js +23 -0
- package/dist/ssr-middleware/index.js.map +1 -0
- package/dist/{ssr/render-middleware.d.ts → ssr-middleware/ssr-middleware.d.ts} +0 -0
- package/dist/{ssr/render-middleware.js → ssr-middleware/ssr-middleware.js} +5 -5
- package/dist/ssr-middleware/ssr-middleware.js.map +1 -0
- package/dist/ui-server.js +4 -4
- package/dist/ui-server.js.map +1 -1
- package/dist/ui.ui.runtime.d.ts +8 -20
- package/dist/ui.ui.runtime.js +25 -215
- package/dist/ui.ui.runtime.js.map +1 -1
- package/package-tar/teambit-ui-0.0.640.tgz +0 -0
- package/package.json +18 -17
- package/react-ssr/index.ts +6 -0
- package/react-ssr/react-ssr.tsx +183 -0
- package/{render-lifecycle.tsx → react-ssr/render-lifecycle.tsx} +6 -4
- package/{ssr → react-ssr}/request-browser.ts +0 -31
- package/{ssr → react-ssr}/request-server.ts +0 -0
- package/{ssr → react-ssr}/ssr-content.ts +0 -0
- package/ssr-middleware/extract-browser-data.ts +31 -0
- package/ssr-middleware/index.ts +1 -0
- package/{ssr/render-middleware.ts → ssr-middleware/ssr-middleware.ts} +3 -3
- package/ui.ui.runtime.tsx +29 -179
- package/compose.tsx +0 -27
- package/dist/compose.d.ts +0 -14
- package/dist/compose.js +0 -37
- package/dist/compose.js.map +0 -1
- package/dist/ssr/render-middleware.js.map +0 -1
- package/dist/ssr/request-browser.js.map +0 -1
- package/package-tar/teambit-ui-0.0.636.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.ui-foundation_ui@0.0.
|
|
1
|
+
export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.ui-foundation_ui@0.0.640/dist/ui.docs.md')]
|
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { UIAspect, UIRuntime } from './ui.aspect';
|
|
2
|
+
export { UIAspect, UIRuntime, UIAspect as default };
|
|
2
3
|
export * from './events';
|
|
3
4
|
export { UIRoot, PostStartOptions, ProxyEntry } from './ui-root';
|
|
4
5
|
export type { UiMain, PreStartOpts } from './ui.main.runtime';
|
|
5
|
-
export type { UiUI
|
|
6
|
-
export { StartPlugin, StartPluginOptions } from './start-plugin';
|
|
7
|
-
export type {
|
|
8
|
-
|
|
6
|
+
export type { UiUI } from './ui.ui.runtime';
|
|
7
|
+
export type { StartPlugin, StartPluginOptions } from './start-plugin';
|
|
8
|
+
export type { BrowserData, RenderPlugins,
|
|
9
|
+
/** @deprecated - legacy name, use RenderPlugins */
|
|
10
|
+
RenderPlugins as RenderLifecycle, } from './react-ssr';
|
|
11
|
+
export type { UIRootUI, UIRootFactory } from './ui-root.ui';
|
|
9
12
|
export type { UIServer } from './ui-server';
|
|
10
|
-
export { UIAspect, UIRuntime };
|
|
11
|
-
export type { BrowserData } from './ssr/request-browser';
|
|
12
|
-
export default UIAspect;
|
|
13
13
|
export { DataQueryResult, useDataQuery } from '@teambit/ui-foundation.ui.hooks.use-data-query';
|
|
14
14
|
export { useMutation } from '@apollo/client';
|
package/dist/index.js
CHANGED
|
@@ -9,10 +9,6 @@ var _exportNames = {
|
|
|
9
9
|
UIRoot: true,
|
|
10
10
|
PostStartOptions: true,
|
|
11
11
|
ProxyEntry: true,
|
|
12
|
-
StartPlugin: true,
|
|
13
|
-
StartPluginOptions: true,
|
|
14
|
-
UIRootUI: true,
|
|
15
|
-
UIRootFactory: true,
|
|
16
12
|
DataQueryResult: true,
|
|
17
13
|
useDataQuery: true,
|
|
18
14
|
useMutation: true
|
|
@@ -35,18 +31,6 @@ Object.defineProperty(exports, "ProxyEntry", {
|
|
|
35
31
|
return _uiRoot().ProxyEntry;
|
|
36
32
|
}
|
|
37
33
|
});
|
|
38
|
-
Object.defineProperty(exports, "StartPlugin", {
|
|
39
|
-
enumerable: true,
|
|
40
|
-
get: function () {
|
|
41
|
-
return _startPlugin().StartPlugin;
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
Object.defineProperty(exports, "StartPluginOptions", {
|
|
45
|
-
enumerable: true,
|
|
46
|
-
get: function () {
|
|
47
|
-
return _startPlugin().StartPluginOptions;
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
34
|
Object.defineProperty(exports, "UIAspect", {
|
|
51
35
|
enumerable: true,
|
|
52
36
|
get: function () {
|
|
@@ -59,25 +43,18 @@ Object.defineProperty(exports, "UIRoot", {
|
|
|
59
43
|
return _uiRoot().UIRoot;
|
|
60
44
|
}
|
|
61
45
|
});
|
|
62
|
-
Object.defineProperty(exports, "
|
|
63
|
-
enumerable: true,
|
|
64
|
-
get: function () {
|
|
65
|
-
return _uiRoot2().UIRootFactory;
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
Object.defineProperty(exports, "UIRootUI", {
|
|
46
|
+
Object.defineProperty(exports, "UIRuntime", {
|
|
69
47
|
enumerable: true,
|
|
70
48
|
get: function () {
|
|
71
|
-
return
|
|
49
|
+
return _ui().UIRuntime;
|
|
72
50
|
}
|
|
73
51
|
});
|
|
74
|
-
Object.defineProperty(exports, "
|
|
52
|
+
Object.defineProperty(exports, "default", {
|
|
75
53
|
enumerable: true,
|
|
76
54
|
get: function () {
|
|
77
|
-
return _ui().
|
|
55
|
+
return _ui().UIAspect;
|
|
78
56
|
}
|
|
79
57
|
});
|
|
80
|
-
exports.default = void 0;
|
|
81
58
|
Object.defineProperty(exports, "useDataQuery", {
|
|
82
59
|
enumerable: true,
|
|
83
60
|
get: function () {
|
|
@@ -125,26 +102,6 @@ function _uiRoot() {
|
|
|
125
102
|
return data;
|
|
126
103
|
}
|
|
127
104
|
|
|
128
|
-
function _startPlugin() {
|
|
129
|
-
const data = require("./start-plugin");
|
|
130
|
-
|
|
131
|
-
_startPlugin = function () {
|
|
132
|
-
return data;
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
return data;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
function _uiRoot2() {
|
|
139
|
-
const data = require("./ui-root.ui");
|
|
140
|
-
|
|
141
|
-
_uiRoot2 = function () {
|
|
142
|
-
return data;
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
return data;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
105
|
function _uiFoundationUiHooks() {
|
|
149
106
|
const data = require("@teambit/ui-foundation.ui.hooks.use-data-query");
|
|
150
107
|
|
|
@@ -165,9 +122,4 @@ function _client() {
|
|
|
165
122
|
return data;
|
|
166
123
|
}
|
|
167
124
|
|
|
168
|
-
var _default = _ui().UIAspect; // using `useDataQuery` from this package is deprecated, use `@teambit/ui-foundation.ui.hooks.use-data-query` directly
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
exports.default = _default;
|
|
172
|
-
|
|
173
125
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":[
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAIA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAcA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA","sourcesContent":["import { UIAspect, UIRuntime } from './ui.aspect';\n\nexport { UIAspect, UIRuntime, UIAspect as default };\n\nexport * from './events';\nexport { UIRoot, PostStartOptions, ProxyEntry } from './ui-root';\nexport type { UiMain, PreStartOpts } from './ui.main.runtime';\nexport type { UiUI } from './ui.ui.runtime';\nexport type { StartPlugin, StartPluginOptions } from './start-plugin';\nexport type {\n BrowserData,\n RenderPlugins,\n /** @deprecated - legacy name, use RenderPlugins */\n RenderPlugins as RenderLifecycle,\n} from './react-ssr';\nexport type { UIRootUI, UIRootFactory } from './ui-root.ui';\nexport type { UIServer } from './ui-server';\n\n// using `useDataQuery` from this package is deprecated, use `@teambit/ui-foundation.ui.hooks.use-data-query` directly\nexport { DataQueryResult, useDataQuery } from '@teambit/ui-foundation.ui.hooks.use-data-query';\n// temporary. TODO: fix this\nexport { useMutation } from '@apollo/client';\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { ReactSSR } from './react-ssr';
|
|
2
|
+
export type { ContextProps, RenderPlugins } from './render-lifecycle';
|
|
3
|
+
export type { BrowserData, ParsedQuery } from './request-browser';
|
|
4
|
+
export type { RequestServer } from './request-server';
|
|
5
|
+
export type { SsrContent } from './ssr-content';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "ReactSSR", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _reactSsr().ReactSSR;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
function _reactSsr() {
|
|
14
|
+
const data = require("./react-ssr");
|
|
15
|
+
|
|
16
|
+
_reactSsr = function () {
|
|
17
|
+
return data;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
return data;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA","sourcesContent":["export { ReactSSR } from './react-ssr';\n\nexport type { ContextProps, RenderPlugins } from './render-lifecycle';\nexport type { BrowserData, ParsedQuery } from './request-browser';\nexport type { RequestServer } from './request-server';\nexport type { SsrContent } from './ssr-content';\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import type { RenderPlugins } from './render-lifecycle';
|
|
3
|
+
import type { SsrContent } from './ssr-content';
|
|
4
|
+
declare type RenderPluginsWithId = [key: string, hooks: RenderPlugins];
|
|
5
|
+
export declare class ReactSSR {
|
|
6
|
+
private lifecycleHooks;
|
|
7
|
+
constructor(lifecycleHooks: RenderPluginsWithId[]);
|
|
8
|
+
/** render and rehydrate client-side */
|
|
9
|
+
renderBrowser(children: ReactNode): Promise<void>;
|
|
10
|
+
/** render dehydrated server-side */
|
|
11
|
+
renderServer(children: ReactNode, { assets, browser, server }?: SsrContent): Promise<string>;
|
|
12
|
+
private triggerBrowserInit;
|
|
13
|
+
private triggerServerInit;
|
|
14
|
+
private triggerBeforeHydrateHook;
|
|
15
|
+
private triggerHydrateHook;
|
|
16
|
+
private triggerBeforeRender;
|
|
17
|
+
private getReactContexts;
|
|
18
|
+
private deserialize;
|
|
19
|
+
private serialize;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
require("core-js/modules/es.array.iterator.js");
|
|
6
|
+
|
|
7
|
+
require("core-js/modules/es.promise.js");
|
|
8
|
+
|
|
9
|
+
Object.defineProperty(exports, "__esModule", {
|
|
10
|
+
value: true
|
|
11
|
+
});
|
|
12
|
+
exports.ReactSSR = void 0;
|
|
13
|
+
|
|
14
|
+
function _react() {
|
|
15
|
+
const data = _interopRequireDefault(require("react"));
|
|
16
|
+
|
|
17
|
+
_react = function () {
|
|
18
|
+
return data;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
return data;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function _webpackMerge() {
|
|
25
|
+
const data = require("webpack-merge");
|
|
26
|
+
|
|
27
|
+
_webpackMerge = function () {
|
|
28
|
+
return data;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
return data;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function _lodash() {
|
|
35
|
+
const data = _interopRequireDefault(require("lodash.compact"));
|
|
36
|
+
|
|
37
|
+
_lodash = function () {
|
|
38
|
+
return data;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
return data;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function _reactDom() {
|
|
45
|
+
const data = _interopRequireDefault(require("react-dom"));
|
|
46
|
+
|
|
47
|
+
_reactDom = function () {
|
|
48
|
+
return data;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
return data;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function _server() {
|
|
55
|
+
const data = _interopRequireDefault(require("react-dom/server"));
|
|
56
|
+
|
|
57
|
+
_server = function () {
|
|
58
|
+
return data;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
return data;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function _uiFoundationUiRendering() {
|
|
65
|
+
const data = require("@teambit/ui-foundation.ui.rendering.html");
|
|
66
|
+
|
|
67
|
+
_uiFoundationUiRendering = function () {
|
|
68
|
+
return data;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
return data;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function _baseUiUtils() {
|
|
75
|
+
const data = require("@teambit/base-ui.utils.composer");
|
|
76
|
+
|
|
77
|
+
_baseUiUtils = function () {
|
|
78
|
+
return data;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
return data;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
class ReactSSR {
|
|
85
|
+
constructor( // create array once to keep consistent indexes
|
|
86
|
+
lifecycleHooks) {
|
|
87
|
+
this.lifecycleHooks = lifecycleHooks;
|
|
88
|
+
}
|
|
89
|
+
/** render and rehydrate client-side */
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
async renderBrowser(children) {
|
|
93
|
+
// (*) load state from the dom
|
|
94
|
+
const deserializedState = await this.deserialize(); // (1) init setup client plugins
|
|
95
|
+
|
|
96
|
+
let renderContexts = await this.triggerBrowserInit(deserializedState); // (2) make react dom
|
|
97
|
+
|
|
98
|
+
const reactContexts = this.getReactContexts(renderContexts);
|
|
99
|
+
|
|
100
|
+
const app = /*#__PURE__*/_react().default.createElement(_baseUiUtils().Composer, {
|
|
101
|
+
components: reactContexts
|
|
102
|
+
}, children);
|
|
103
|
+
|
|
104
|
+
renderContexts = await this.triggerBeforeHydrateHook(renderContexts, app); // (3) render / rehydrate
|
|
105
|
+
|
|
106
|
+
const mountPoint = document.getElementById(_uiFoundationUiRendering().mountPointId); // .render() already runs `.hydrate()` behind the scenes.
|
|
107
|
+
// in the future, we may want to replace it with .hydrate()
|
|
108
|
+
|
|
109
|
+
_reactDom().default.render(app, mountPoint);
|
|
110
|
+
|
|
111
|
+
await this.triggerHydrateHook(renderContexts, mountPoint); // (3.1) remove ssr only styles
|
|
112
|
+
|
|
113
|
+
(0, _uiFoundationUiRendering().ssrCleanup)();
|
|
114
|
+
}
|
|
115
|
+
/** render dehydrated server-side */
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
async renderServer(children, {
|
|
119
|
+
assets,
|
|
120
|
+
browser,
|
|
121
|
+
server
|
|
122
|
+
} = {}) {
|
|
123
|
+
// (1) init
|
|
124
|
+
let renderContexts = await this.triggerServerInit(browser, server); // (2) make React dom
|
|
125
|
+
|
|
126
|
+
const reactContexts = this.getReactContexts(renderContexts);
|
|
127
|
+
|
|
128
|
+
const app = /*#__PURE__*/_react().default.createElement(_uiFoundationUiRendering().MountPoint, null, /*#__PURE__*/_react().default.createElement(_baseUiUtils().Composer, {
|
|
129
|
+
components: reactContexts
|
|
130
|
+
}, children));
|
|
131
|
+
|
|
132
|
+
renderContexts = await this.triggerBeforeRender(renderContexts, app); // (3) render (to string)
|
|
133
|
+
|
|
134
|
+
const renderedApp = _server().default.renderToString(app); // (*) serialize state
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
const realtimeAssets = await this.serialize(renderContexts, app); // @ts-ignore // TODO upgrade 'webpack-merge'
|
|
138
|
+
|
|
139
|
+
const totalAssets = (0, _webpackMerge().merge)(assets, realtimeAssets); // (4) render html-template (to string)
|
|
140
|
+
|
|
141
|
+
const html = /*#__PURE__*/_react().default.createElement(_uiFoundationUiRendering().Html, {
|
|
142
|
+
assets: totalAssets,
|
|
143
|
+
withDevTools: true,
|
|
144
|
+
fullHeight: true,
|
|
145
|
+
ssr: true
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
const renderedHtml = `<!DOCTYPE html>${_server().default.renderToStaticMarkup(html)}`;
|
|
149
|
+
|
|
150
|
+
const fullHtml = _uiFoundationUiRendering().Html.fillContent(renderedHtml, renderedApp); // (5) serve
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
return fullHtml;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
triggerBrowserInit(deserializedState) {
|
|
157
|
+
const {
|
|
158
|
+
lifecycleHooks
|
|
159
|
+
} = this;
|
|
160
|
+
const initPromises = lifecycleHooks.map(([, hooks], idx) => {
|
|
161
|
+
var _hooks$browserInit;
|
|
162
|
+
|
|
163
|
+
const state = deserializedState[idx];
|
|
164
|
+
return (_hooks$browserInit = hooks.browserInit) === null || _hooks$browserInit === void 0 ? void 0 : _hooks$browserInit.call(hooks, state);
|
|
165
|
+
});
|
|
166
|
+
return Promise.all(initPromises);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
triggerServerInit(browser, server) {
|
|
170
|
+
const {
|
|
171
|
+
lifecycleHooks
|
|
172
|
+
} = this;
|
|
173
|
+
const promises = lifecycleHooks.map(([, hooks]) => {
|
|
174
|
+
var _hooks$serverInit;
|
|
175
|
+
|
|
176
|
+
return (_hooks$serverInit = hooks.serverInit) === null || _hooks$serverInit === void 0 ? void 0 : _hooks$serverInit.call(hooks, {
|
|
177
|
+
browser,
|
|
178
|
+
server
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
return Promise.all(promises);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
triggerBeforeHydrateHook(renderContexts, app) {
|
|
185
|
+
const {
|
|
186
|
+
lifecycleHooks
|
|
187
|
+
} = this;
|
|
188
|
+
const promises = lifecycleHooks.map(async ([, hooks], idx) => {
|
|
189
|
+
var _hooks$onBeforeHydrat;
|
|
190
|
+
|
|
191
|
+
const ctx = renderContexts[idx];
|
|
192
|
+
const nextCtx = await ((_hooks$onBeforeHydrat = hooks.onBeforeHydrate) === null || _hooks$onBeforeHydrat === void 0 ? void 0 : _hooks$onBeforeHydrat.call(hooks, ctx, app));
|
|
193
|
+
return nextCtx || ctx;
|
|
194
|
+
});
|
|
195
|
+
return Promise.all(promises);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
async triggerHydrateHook(renderContexts, mountPoint) {
|
|
199
|
+
const {
|
|
200
|
+
lifecycleHooks
|
|
201
|
+
} = this;
|
|
202
|
+
const promises = lifecycleHooks.map(([, hooks], idx) => {
|
|
203
|
+
var _hooks$onHydrate;
|
|
204
|
+
|
|
205
|
+
const renderCtx = renderContexts[idx];
|
|
206
|
+
return (_hooks$onHydrate = hooks.onHydrate) === null || _hooks$onHydrate === void 0 ? void 0 : _hooks$onHydrate.call(hooks, renderCtx, mountPoint);
|
|
207
|
+
});
|
|
208
|
+
await Promise.all(promises);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
async triggerBeforeRender(renderContexts, app) {
|
|
212
|
+
const {
|
|
213
|
+
lifecycleHooks
|
|
214
|
+
} = this;
|
|
215
|
+
const promises = lifecycleHooks.map(async ([, hooks], idx) => {
|
|
216
|
+
var _hooks$onBeforeRender;
|
|
217
|
+
|
|
218
|
+
const ctx = renderContexts[idx];
|
|
219
|
+
const nextCtx = await ((_hooks$onBeforeRender = hooks.onBeforeRender) === null || _hooks$onBeforeRender === void 0 ? void 0 : _hooks$onBeforeRender.call(hooks, ctx, app));
|
|
220
|
+
return nextCtx || ctx;
|
|
221
|
+
});
|
|
222
|
+
await Promise.all(promises);
|
|
223
|
+
return renderContexts;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
getReactContexts(renderContexts) {
|
|
227
|
+
const {
|
|
228
|
+
lifecycleHooks
|
|
229
|
+
} = this;
|
|
230
|
+
return (0, _lodash().default)(lifecycleHooks.map(([, hooks], idx) => {
|
|
231
|
+
const renderCtx = renderContexts[idx];
|
|
232
|
+
const props = {
|
|
233
|
+
renderCtx
|
|
234
|
+
};
|
|
235
|
+
return hooks.reactContext ? [hooks.reactContext, props] : undefined;
|
|
236
|
+
}));
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
async deserialize() {
|
|
240
|
+
const {
|
|
241
|
+
lifecycleHooks
|
|
242
|
+
} = this;
|
|
243
|
+
|
|
244
|
+
const rawAssets = _uiFoundationUiRendering().Html.popAssets();
|
|
245
|
+
|
|
246
|
+
const deserialized = await Promise.all(lifecycleHooks.map(async ([key, hooks]) => {
|
|
247
|
+
try {
|
|
248
|
+
var _hooks$deserialize;
|
|
249
|
+
|
|
250
|
+
const raw = rawAssets.get(key);
|
|
251
|
+
return (_hooks$deserialize = hooks.deserialize) === null || _hooks$deserialize === void 0 ? void 0 : _hooks$deserialize.call(hooks, raw);
|
|
252
|
+
} catch (e) {
|
|
253
|
+
// eslint-disable-next-line no-console
|
|
254
|
+
console.error(`failed deserializing server state for aspect ${key}`, e);
|
|
255
|
+
return undefined;
|
|
256
|
+
}
|
|
257
|
+
}));
|
|
258
|
+
return deserialized;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
async serialize(renderContexts, app) {
|
|
262
|
+
const {
|
|
263
|
+
lifecycleHooks
|
|
264
|
+
} = this;
|
|
265
|
+
const json = {};
|
|
266
|
+
const promises = lifecycleHooks.map(async ([key, hooks], idx) => {
|
|
267
|
+
var _hooks$serialize;
|
|
268
|
+
|
|
269
|
+
const renderCtx = renderContexts[idx];
|
|
270
|
+
const result = await ((_hooks$serialize = hooks.serialize) === null || _hooks$serialize === void 0 ? void 0 : _hooks$serialize.call(hooks, renderCtx, app));
|
|
271
|
+
if (!result) return;
|
|
272
|
+
if (result.json) json[key] = result.json;
|
|
273
|
+
});
|
|
274
|
+
await Promise.all(promises); // more assets will be available in the future
|
|
275
|
+
|
|
276
|
+
return {
|
|
277
|
+
json
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
exports.ReactSSR = ReactSSR;
|
|
284
|
+
|
|
285
|
+
//# sourceMappingURL=react-ssr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["react-ssr.tsx"],"names":["ReactSSR","constructor","lifecycleHooks","renderBrowser","children","deserializedState","deserialize","renderContexts","triggerBrowserInit","reactContexts","getReactContexts","app","triggerBeforeHydrateHook","mountPoint","document","getElementById","mountPointId","ReactDOM","render","triggerHydrateHook","renderServer","assets","browser","server","triggerServerInit","triggerBeforeRender","renderedApp","ReactDOMServer","renderToString","realtimeAssets","serialize","totalAssets","html","renderedHtml","renderToStaticMarkup","fullHtml","Html","fillContent","initPromises","map","hooks","idx","state","browserInit","Promise","all","promises","serverInit","ctx","nextCtx","onBeforeHydrate","renderCtx","onHydrate","onBeforeRender","props","reactContext","undefined","rawAssets","popAssets","deserialized","key","raw","get","e","console","error","json","result"],"mappings":"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","sourcesContent":["import React, { ReactNode } from 'react';\nimport { merge } from 'webpack-merge';\nimport compact from 'lodash.compact';\nimport ReactDOM from 'react-dom';\nimport ReactDOMServer from 'react-dom/server';\n\nimport { Html, MountPoint, mountPointId, ssrCleanup, Assets } from '@teambit/ui-foundation.ui.rendering.html';\nimport { Composer, Wrapper } from '@teambit/base-ui.utils.composer';\n\nimport type { RenderPlugins } from './render-lifecycle';\nimport type { SsrContent } from './ssr-content';\nimport type { RequestServer } from './request-server';\nimport type { BrowserData } from './request-browser';\n\ntype RenderPluginsWithId = [key: string, hooks: RenderPlugins];\n\nexport class ReactSSR {\n constructor(\n // create array once to keep consistent indexes\n private lifecycleHooks: RenderPluginsWithId[]\n ) {}\n\n /** render and rehydrate client-side */\n async renderBrowser(children: ReactNode) {\n // (*) load state from the dom\n const deserializedState = await this.deserialize();\n\n // (1) init setup client plugins\n let renderContexts = await this.triggerBrowserInit(deserializedState);\n\n // (2) make react dom\n const reactContexts = this.getReactContexts(renderContexts);\n const app = <Composer components={reactContexts}>{children}</Composer>;\n\n renderContexts = await this.triggerBeforeHydrateHook(renderContexts, app);\n\n // (3) render / rehydrate\n const mountPoint = document.getElementById(mountPointId);\n // .render() already runs `.hydrate()` behind the scenes.\n // in the future, we may want to replace it with .hydrate()\n ReactDOM.render(app, mountPoint);\n\n await this.triggerHydrateHook(renderContexts, mountPoint);\n\n // (3.1) remove ssr only styles\n ssrCleanup();\n }\n\n /** render dehydrated server-side */\n async renderServer(children: ReactNode, { assets, browser, server }: SsrContent = {}): Promise<string> {\n // (1) init\n let renderContexts = await this.triggerServerInit(browser, server);\n\n // (2) make React dom\n const reactContexts = this.getReactContexts(renderContexts);\n const app = (\n <MountPoint>\n <Composer components={reactContexts}>{children}</Composer>\n </MountPoint>\n );\n\n renderContexts = await this.triggerBeforeRender(renderContexts, app);\n\n // (3) render (to string)\n const renderedApp = ReactDOMServer.renderToString(app);\n\n // (*) serialize state\n const realtimeAssets = await this.serialize(renderContexts, app);\n // @ts-ignore // TODO upgrade 'webpack-merge'\n const totalAssets = merge(assets, realtimeAssets) as Assets;\n\n // (4) render html-template (to string)\n const html = <Html assets={totalAssets} withDevTools fullHeight ssr />;\n const renderedHtml = `<!DOCTYPE html>${ReactDOMServer.renderToStaticMarkup(html)}`;\n const fullHtml = Html.fillContent(renderedHtml, renderedApp);\n\n // (5) serve\n return fullHtml;\n }\n\n private triggerBrowserInit(deserializedState: any[]) {\n const { lifecycleHooks } = this;\n\n const initPromises = lifecycleHooks.map(([, hooks], idx) => {\n const state = deserializedState[idx];\n return hooks.browserInit?.(state);\n });\n return Promise.all(initPromises);\n }\n\n private triggerServerInit(browser?: BrowserData, server?: RequestServer) {\n const { lifecycleHooks } = this;\n const promises = lifecycleHooks.map(([, hooks]) => hooks.serverInit?.({ browser, server }));\n return Promise.all(promises);\n }\n\n private triggerBeforeHydrateHook(renderContexts: any[], app: JSX.Element) {\n const { lifecycleHooks } = this;\n\n const promises = lifecycleHooks.map(async ([, hooks], idx) => {\n const ctx = renderContexts[idx];\n const nextCtx = await hooks.onBeforeHydrate?.(ctx, app);\n return nextCtx || ctx;\n });\n\n return Promise.all(promises);\n }\n\n private async triggerHydrateHook(renderContexts: any[], mountPoint: HTMLElement | null) {\n const { lifecycleHooks } = this;\n\n const promises = lifecycleHooks.map(([, hooks], idx) => {\n const renderCtx = renderContexts[idx];\n return hooks.onHydrate?.(renderCtx, mountPoint);\n });\n\n await Promise.all(promises);\n }\n\n private async triggerBeforeRender(renderContexts: any[], app: JSX.Element) {\n const { lifecycleHooks } = this;\n\n const promises = lifecycleHooks.map(async ([, hooks], idx) => {\n const ctx = renderContexts[idx];\n const nextCtx = await hooks.onBeforeRender?.(ctx, app);\n return nextCtx || ctx;\n });\n\n await Promise.all(promises);\n\n return renderContexts;\n }\n\n private getReactContexts(renderContexts: any[]): Wrapper[] {\n const { lifecycleHooks } = this;\n\n return compact(\n lifecycleHooks.map(([, hooks], idx) => {\n const renderCtx = renderContexts[idx];\n const props = { renderCtx };\n return hooks.reactContext ? [hooks.reactContext, props] : undefined;\n })\n );\n }\n\n private async deserialize() {\n const { lifecycleHooks } = this;\n const rawAssets = Html.popAssets();\n\n const deserialized = await Promise.all(\n lifecycleHooks.map(async ([key, hooks]) => {\n try {\n const raw = rawAssets.get(key);\n return hooks.deserialize?.(raw);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`failed deserializing server state for aspect ${key}`, e);\n return undefined;\n }\n })\n );\n\n return deserialized;\n }\n\n private async serialize(renderContexts: any[], app: ReactNode): Promise<Assets> {\n const { lifecycleHooks } = this;\n const json = {};\n\n const promises = lifecycleHooks.map(async ([key, hooks], idx) => {\n const renderCtx = renderContexts[idx];\n const result = await hooks.serialize?.(renderCtx, app);\n\n if (!result) return;\n if (result.json) json[key] = result.json;\n });\n\n await Promise.all(promises);\n\n // more assets will be available in the future\n return { json };\n }\n}\n"]}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { ReactNode, ComponentType } from 'react';
|
|
2
|
-
import { BrowserData } from './
|
|
3
|
-
import { RequestServer } from './
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import { BrowserData } from './request-browser';
|
|
3
|
+
import { RequestServer } from './request-server';
|
|
4
|
+
export declare type ContextProps<T = any> = {
|
|
5
|
+
renderCtx?: T;
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
};
|
|
8
|
+
/** Plugins for each step of the SSR and regular rendering lifecycle */
|
|
9
|
+
export declare type RenderPlugins<RenderCtx = any, Serialized = any> = {
|
|
6
10
|
/**
|
|
7
11
|
* Initialize a context state for this specific rendering.
|
|
8
12
|
* Context state will only be available to the current Aspect, in the other hooks, as well as a prop to the react context component.
|
|
File without changes
|
|
File without changes
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import type { IncomingHttpHeaders } from 'http';
|
|
3
|
-
import type { Request } from 'express';
|
|
4
3
|
export declare type ParsedQuery = {
|
|
5
4
|
[key: string]: undefined | string | string[] | ParsedQuery | ParsedQuery[];
|
|
6
5
|
};
|
|
@@ -55,7 +54,3 @@ export declare type BrowserData = {
|
|
|
55
54
|
};
|
|
56
55
|
cookie?: string;
|
|
57
56
|
};
|
|
58
|
-
/**
|
|
59
|
-
* extract relevant information from Express request.
|
|
60
|
-
*/
|
|
61
|
-
export declare function requestToObj(req: Request, port: number): BrowserData;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
|
|
@@ -3,20 +3,19 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.extractBrowserData = extractBrowserData;
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* extract relevant information from Express request.
|
|
10
10
|
*/
|
|
11
|
-
function
|
|
12
|
-
// apparently port is not readily available in request.
|
|
11
|
+
function extractBrowserData(req, port) {
|
|
13
12
|
const browser = {
|
|
14
13
|
connection: {
|
|
15
14
|
secure: req.secure,
|
|
16
15
|
headers: req.headers,
|
|
17
16
|
body: req.body
|
|
18
17
|
},
|
|
19
|
-
//
|
|
18
|
+
// rebuild browser location from request, +port
|
|
20
19
|
location: {
|
|
21
20
|
host: `${req.hostname}:${port}`,
|
|
22
21
|
hostname: req.hostname,
|
|
@@ -33,4 +32,4 @@ function requestToObj(req, port) {
|
|
|
33
32
|
return browser;
|
|
34
33
|
}
|
|
35
34
|
|
|
36
|
-
//# sourceMappingURL=
|
|
35
|
+
//# sourceMappingURL=extract-browser-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["extract-browser-data.ts"],"names":["extractBrowserData","req","port","browser","connection","secure","headers","body","location","host","hostname","href","protocol","url","origin","pathname","path","query","cookie","header"],"mappings":";;;;;;;AAGA;AACA;AACA;AAEO,SAASA,kBAAT,CAA4BC,GAA5B,EAA0CC,IAA1C,EAAwD;AAC7D,QAAMC,OAAoB,GAAG;AAC3BC,IAAAA,UAAU,EAAE;AACVC,MAAAA,MAAM,EAAEJ,GAAG,CAACI,MADF;AAEVC,MAAAA,OAAO,EAAEL,GAAG,CAACK,OAFH;AAGVC,MAAAA,IAAI,EAAEN,GAAG,CAACM;AAHA,KADe;AAM3B;AACAC,IAAAA,QAAQ,EAAE;AACRC,MAAAA,IAAI,EAAG,GAAER,GAAG,CAACS,QAAS,IAAGR,IAAK,EADtB;AAERQ,MAAAA,QAAQ,EAAET,GAAG,CAACS,QAFN;AAGRC,MAAAA,IAAI,EAAG,GAAEV,GAAG,CAACW,QAAS,MAAKX,GAAG,CAACS,QAAS,IAAGR,IAAK,GAAED,GAAG,CAACY,GAAI,EAHlD;AAIRC,MAAAA,MAAM,EAAG,GAAEb,GAAG,CAACW,QAAS,MAAKX,GAAG,CAACS,QAAS,IAAGR,IAAK,EAJ1C;AAKRa,MAAAA,QAAQ,EAAEd,GAAG,CAACe,IALN;AAMRd,MAAAA,IANQ;AAORU,MAAAA,QAAQ,EAAG,GAAEX,GAAG,CAACW,QAAS,GAPlB;AAQRK,MAAAA,KAAK,EAAEhB,GAAG,CAACgB,KARH;AASRJ,MAAAA,GAAG,EAAEZ,GAAG,CAACY;AATD,KAPiB;AAkB3BK,IAAAA,MAAM,EAAEjB,GAAG,CAACkB,MAAJ,CAAW,QAAX;AAlBmB,GAA7B;AAqBA,SAAOhB,OAAP;AACD","sourcesContent":["import { Request } from 'express';\nimport { BrowserData } from '../react-ssr';\n\n/**\n * extract relevant information from Express request.\n */\n\nexport function extractBrowserData(req: Request, port: number) {\n const browser: BrowserData = {\n connection: {\n secure: req.secure,\n headers: req.headers,\n body: req.body,\n },\n // rebuild browser location from request, +port\n location: {\n host: `${req.hostname}:${port}`,\n hostname: req.hostname,\n href: `${req.protocol}://${req.hostname}:${port}${req.url}`,\n origin: `${req.protocol}://${req.hostname}:${port}`,\n pathname: req.path,\n port,\n protocol: `${req.protocol}:`,\n query: req.query,\n url: req.url,\n },\n cookie: req.header('Cookie'),\n };\n\n return browser;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { createSsrMiddleware } from './ssr-middleware';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "createSsrMiddleware", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _ssrMiddleware().createSsrMiddleware;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
function _ssrMiddleware() {
|
|
14
|
+
const data = require("./ssr-middleware");
|
|
15
|
+
|
|
16
|
+
_ssrMiddleware = function () {
|
|
17
|
+
return data;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
return data;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA","sourcesContent":["export { createSsrMiddleware } from './ssr-middleware';\n"]}
|
|
File without changes
|