@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.
Files changed (55) hide show
  1. package/{__preview-1643426469482.js → __preview-1643858579620.js} +1 -1
  2. package/dist/index.d.ts +7 -7
  3. package/dist/index.js +4 -52
  4. package/dist/index.js.map +1 -1
  5. package/dist/react-ssr/index.d.ts +5 -0
  6. package/dist/react-ssr/index.js +23 -0
  7. package/dist/react-ssr/index.js.map +1 -0
  8. package/dist/react-ssr/react-ssr.d.ts +21 -0
  9. package/dist/react-ssr/react-ssr.js +285 -0
  10. package/dist/react-ssr/react-ssr.js.map +1 -0
  11. package/dist/{render-lifecycle.d.ts → react-ssr/render-lifecycle.d.ts} +8 -4
  12. package/dist/{render-lifecycle.js → react-ssr/render-lifecycle.js} +0 -0
  13. package/dist/{render-lifecycle.js.map → react-ssr/render-lifecycle.js.map} +0 -0
  14. package/dist/{ssr → react-ssr}/request-browser.d.ts +0 -5
  15. package/dist/react-ssr/request-browser.js +3 -0
  16. package/dist/{ssr/request-server.js.map → react-ssr/request-browser.js.map} +0 -0
  17. package/dist/{ssr → react-ssr}/request-server.d.ts +0 -0
  18. package/dist/{ssr → react-ssr}/request-server.js +0 -0
  19. package/dist/{ssr/ssr-content.js.map → react-ssr/request-server.js.map} +0 -0
  20. package/dist/{ssr → react-ssr}/ssr-content.d.ts +0 -0
  21. package/dist/{ssr → react-ssr}/ssr-content.js +0 -0
  22. package/dist/react-ssr/ssr-content.js.map +1 -0
  23. package/dist/ssr-middleware/extract-browser-data.d.ts +6 -0
  24. package/dist/{ssr/request-browser.js → ssr-middleware/extract-browser-data.js} +4 -5
  25. package/dist/ssr-middleware/extract-browser-data.js.map +1 -0
  26. package/dist/ssr-middleware/index.d.ts +1 -0
  27. package/dist/ssr-middleware/index.js +23 -0
  28. package/dist/ssr-middleware/index.js.map +1 -0
  29. package/dist/{ssr/render-middleware.d.ts → ssr-middleware/ssr-middleware.d.ts} +0 -0
  30. package/dist/{ssr/render-middleware.js → ssr-middleware/ssr-middleware.js} +5 -5
  31. package/dist/ssr-middleware/ssr-middleware.js.map +1 -0
  32. package/dist/ui-server.js +4 -4
  33. package/dist/ui-server.js.map +1 -1
  34. package/dist/ui.ui.runtime.d.ts +8 -20
  35. package/dist/ui.ui.runtime.js +25 -215
  36. package/dist/ui.ui.runtime.js.map +1 -1
  37. package/package-tar/teambit-ui-0.0.640.tgz +0 -0
  38. package/package.json +18 -17
  39. package/react-ssr/index.ts +6 -0
  40. package/react-ssr/react-ssr.tsx +183 -0
  41. package/{render-lifecycle.tsx → react-ssr/render-lifecycle.tsx} +6 -4
  42. package/{ssr → react-ssr}/request-browser.ts +0 -31
  43. package/{ssr → react-ssr}/request-server.ts +0 -0
  44. package/{ssr → react-ssr}/ssr-content.ts +0 -0
  45. package/ssr-middleware/extract-browser-data.ts +31 -0
  46. package/ssr-middleware/index.ts +1 -0
  47. package/{ssr/render-middleware.ts → ssr-middleware/ssr-middleware.ts} +3 -3
  48. package/ui.ui.runtime.tsx +29 -179
  49. package/compose.tsx +0 -27
  50. package/dist/compose.d.ts +0 -14
  51. package/dist/compose.js +0 -37
  52. package/dist/compose.js.map +0 -1
  53. package/dist/ssr/render-middleware.js.map +0 -1
  54. package/dist/ssr/request-browser.js.map +0 -1
  55. 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.636/dist/ui.docs.md')]
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, ContextProps } from './ui.ui.runtime';
6
- export { StartPlugin, StartPluginOptions } from './start-plugin';
7
- export type { RenderLifecycle } from './render-lifecycle';
8
- export { UIRootUI, UIRootFactory } from './ui-root.ui';
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, "UIRootFactory", {
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 _uiRoot2().UIRootUI;
49
+ return _ui().UIRuntime;
72
50
  }
73
51
  });
74
- Object.defineProperty(exports, "UIRuntime", {
52
+ Object.defineProperty(exports, "default", {
75
53
  enumerable: true,
76
54
  get: function () {
77
- return _ui().UIRuntime;
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":["UIAspect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAOA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;eALeA,c,EAEf","sourcesContent":["import { UIAspect, UIRuntime } from './ui.aspect';\n\nexport * from './events';\nexport { UIRoot, PostStartOptions, ProxyEntry } from './ui-root';\nexport type { UiMain, PreStartOpts } from './ui.main.runtime';\nexport type { UiUI, ContextProps } from './ui.ui.runtime';\nexport { StartPlugin, StartPluginOptions } from './start-plugin';\nexport type { RenderLifecycle } from './render-lifecycle';\nexport { UIRootUI, UIRootFactory } from './ui-root.ui';\nexport type { UIServer } from './ui-server';\nexport { UIAspect, UIRuntime };\nexport type { BrowserData } from './ssr/request-browser';\nexport default UIAspect;\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"]}
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 './ssr/request-browser';
3
- import { RequestServer } from './ssr/request-server';
4
- import { ContextProps } from './ui.ui.runtime';
5
- export declare type RenderLifecycle<RenderCtx = any, Serialized = any> = {
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.
@@ -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;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ //# sourceMappingURL=request-browser.js.map
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
@@ -0,0 +1,6 @@
1
+ import { Request } from 'express';
2
+ import { BrowserData } from '../react-ssr';
3
+ /**
4
+ * extract relevant information from Express request.
5
+ */
6
+ export declare function extractBrowserData(req: Request, port: number): BrowserData;
@@ -3,20 +3,19 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.requestToObj = requestToObj;
6
+ exports.extractBrowserData = extractBrowserData;
7
7
 
8
8
  /**
9
9
  * extract relevant information from Express request.
10
10
  */
11
- function requestToObj(req, port) {
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
- // trying to match to browser.location
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=request-browser.js.map
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"]}