@teambit/ui 0.0.800 → 0.0.803

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 (47) hide show
  1. package/dist/index.d.ts +12 -5
  2. package/dist/index.js.map +1 -1
  3. package/dist/ssr-middleware/ssr-middleware.d.ts +2 -2
  4. package/dist/ssr-middleware/ssr-middleware.js +19 -17
  5. package/dist/ssr-middleware/ssr-middleware.js.map +1 -1
  6. package/dist/ui-root.d.ts +3 -3
  7. package/dist/ui-root.js.map +1 -1
  8. package/dist/ui.main.runtime.js +1 -1
  9. package/dist/ui.main.runtime.js.map +1 -1
  10. package/dist/ui.ui.runtime.d.ts +4 -5
  11. package/dist/ui.ui.runtime.js +27 -17
  12. package/dist/ui.ui.runtime.js.map +1 -1
  13. package/package-tar/teambit-ui-0.0.803.tgz +0 -0
  14. package/package.json +19 -22
  15. package/{preview-1658978882481.js → preview-1659271062546.js} +2 -2
  16. package/ssr-middleware/ssr-middleware.ts +14 -15
  17. package/ui-root.tsx +7 -3
  18. package/ui.ui.runtime.tsx +21 -18
  19. package/dist/react-ssr/index.d.ts +0 -5
  20. package/dist/react-ssr/index.js +0 -23
  21. package/dist/react-ssr/index.js.map +0 -1
  22. package/dist/react-ssr/react-ssr.d.ts +0 -21
  23. package/dist/react-ssr/react-ssr.js +0 -285
  24. package/dist/react-ssr/react-ssr.js.map +0 -1
  25. package/dist/react-ssr/render-lifecycle.d.ts +0 -56
  26. package/dist/react-ssr/render-lifecycle.js +0 -3
  27. package/dist/react-ssr/render-lifecycle.js.map +0 -1
  28. package/dist/react-ssr/request-browser.d.ts +0 -56
  29. package/dist/react-ssr/request-browser.js +0 -3
  30. package/dist/react-ssr/request-browser.js.map +0 -1
  31. package/dist/react-ssr/request-server.d.ts +0 -9
  32. package/dist/react-ssr/request-server.js +0 -3
  33. package/dist/react-ssr/request-server.js.map +0 -1
  34. package/dist/react-ssr/ssr-content.d.ts +0 -8
  35. package/dist/react-ssr/ssr-content.js +0 -3
  36. package/dist/react-ssr/ssr-content.js.map +0 -1
  37. package/dist/ssr-middleware/extract-browser-data.d.ts +0 -6
  38. package/dist/ssr-middleware/extract-browser-data.js +0 -35
  39. package/dist/ssr-middleware/extract-browser-data.js.map +0 -1
  40. package/package-tar/teambit-ui-0.0.800.tgz +0 -0
  41. package/react-ssr/index.ts +0 -6
  42. package/react-ssr/react-ssr.tsx +0 -183
  43. package/react-ssr/render-lifecycle.tsx +0 -58
  44. package/react-ssr/request-browser.ts +0 -55
  45. package/react-ssr/request-server.ts +0 -10
  46. package/react-ssr/ssr-content.ts +0 -9
  47. package/ssr-middleware/extract-browser-data.ts +0 -31
package/dist/index.d.ts CHANGED
@@ -1,14 +1,21 @@
1
- import { UIAspect, UIRuntime } from './ui.aspect';
2
- export { UIAspect, UIRuntime, UIAspect as default };
1
+ import type * as SSR from '@teambit/react.rendering.ssr';
2
+ export { UIAspect, UIRuntime, UIAspect as default } from './ui.aspect';
3
3
  export * from './events';
4
4
  export { UIRoot, PostStartOptions, ProxyEntry } from './ui-root';
5
5
  export type { UiMain, PreStartOpts } from './ui.main.runtime';
6
6
  export type { UiUI } from './ui.ui.runtime';
7
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';
8
+ export type { SSR };
11
9
  export type { UIRootUI, UIRootFactory } from './ui-root.ui';
12
10
  export type { UIServer } from './ui-server';
13
11
  export { DataQueryResult, useDataQuery } from '@teambit/ui-foundation.ui.hooks.use-data-query';
14
12
  export { useMutation } from '@apollo/client';
13
+ export type {
14
+ /** @deprecated - use SSR.BrowserData */
15
+ BrowserData,
16
+ /** @deprecated - use SSR.RenderPlugin */
17
+ RenderPlugin,
18
+ /** @deprecated use SSR.RenderPlugin */
19
+ RenderPlugin as RenderPlugins,
20
+ /** @deprecated use SSR..RenderPlugin */
21
+ RenderPlugin as RenderLifecycle, } from '@teambit/react.rendering.ssr';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAIA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAcA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA"}
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["import type * as SSR from '@teambit/react.rendering.ssr';\n\nexport { UIAspect, UIRuntime, UIAspect as default } 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 } from './ui.ui.runtime';\nexport type { StartPlugin, StartPluginOptions } from './start-plugin';\nexport type { SSR };\n\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\n// some types still used by Symphony\nexport type {\n /** @deprecated - use SSR.BrowserData */\n BrowserData,\n /** @deprecated - use SSR.RenderPlugin */\n RenderPlugin,\n /** @deprecated use SSR.RenderPlugin */\n RenderPlugin as RenderPlugins,\n /** @deprecated use SSR..RenderPlugin */\n RenderPlugin as RenderLifecycle,\n} from '@teambit/react.rendering.ssr';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAUA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA"}
@@ -1,10 +1,10 @@
1
- import { Request, Response, NextFunction } from 'express';
2
1
  import type { Logger } from '@teambit/logger';
2
+ import type { Request, Response, NextFunction } from 'express';
3
3
  declare type ssrRenderProps = {
4
4
  root: string;
5
5
  port: number;
6
6
  title: string;
7
7
  logger: Logger;
8
8
  };
9
- export declare function createSsrMiddleware({ root, port, title, logger }: ssrRenderProps): Promise<((req: Request, res: Response, next: NextFunction) => Promise<void>) | undefined>;
9
+ export declare function createSsrMiddleware({ root, port, title, logger }: ssrRenderProps): Promise<((request: Request, response: Response, next: NextFunction) => Promise<void>) | undefined>;
10
10
  export {};
@@ -19,30 +19,30 @@ function _defineProperty2() {
19
19
  return data;
20
20
  }
21
21
 
22
- function _path() {
23
- const data = _interopRequireDefault(require("path"));
22
+ function _reactRendering() {
23
+ const data = require("@teambit/react.rendering.ssr");
24
24
 
25
- _path = function () {
25
+ _reactRendering = function () {
26
26
  return data;
27
27
  };
28
28
 
29
29
  return data;
30
30
  }
31
31
 
32
- function fs() {
33
- const data = _interopRequireWildcard(require("fs-extra"));
32
+ function _path() {
33
+ const data = _interopRequireDefault(require("path"));
34
34
 
35
- fs = function () {
35
+ _path = function () {
36
36
  return data;
37
37
  };
38
38
 
39
39
  return data;
40
40
  }
41
41
 
42
- function _extractBrowserData() {
43
- const data = require("./extract-browser-data");
42
+ function fs() {
43
+ const data = _interopRequireWildcard(require("fs-extra"));
44
44
 
45
- _extractBrowserData = function () {
45
+ fs = function () {
46
46
  return data;
47
47
  };
48
48
 
@@ -77,12 +77,12 @@ async function createSsrMiddleware({
77
77
  title
78
78
  });
79
79
 
80
- return async function serverRenderMiddleware(req, res, next) {
80
+ return async function serverRenderMiddleware(request, response, next) {
81
81
  const {
82
82
  query,
83
83
  url
84
- } = req;
85
- const browser = (0, _extractBrowserData().extractBrowserData)(req, port);
84
+ } = request;
85
+ const browser = (0, _reactRendering().browserFromExpress)(request, port);
86
86
 
87
87
  if (denyList.test(url)) {
88
88
  logger.debug(`[ssr] skipping static denyList file ${url}`);
@@ -96,22 +96,24 @@ async function createSsrMiddleware({
96
96
  return;
97
97
  }
98
98
 
99
- logger.debug(`[ssr] ${req.method} ${url}`);
99
+ logger.debug(`[ssr] ${request.method} ${url}`);
100
100
  const server = {
101
101
  port,
102
- request: req,
103
- response: res
102
+ request,
103
+ response
104
104
  };
105
105
  const props = {
106
106
  assets,
107
107
  browser,
108
+ request,
109
+ response,
108
110
  server
109
111
  };
110
112
 
111
113
  try {
112
114
  const rendered = await render(props);
113
- res.set('Cache-Control', 'no-cache');
114
- res.send(rendered);
115
+ response.set('Cache-Control', 'no-cache');
116
+ response.send(rendered);
115
117
  logger.debug(`[ssr] success '${url}'`);
116
118
  } catch (e) {
117
119
  logger.error(`[ssr] failed at '${url}'`, e);
@@ -1 +1 @@
1
- {"version":3,"names":["denyList","createSsrMiddleware","root","port","title","logger","runtime","loadRuntime","undefined","render","assets","serverRenderMiddleware","req","res","next","query","url","browser","extractBrowserData","test","debug","rendering","method","server","request","response","props","rendered","set","send","e","error","entryFilepath","path","join","fs","existsSync","warn","manifestFilepath","parseManifest","imported","filepath","file","readFile","contents","toString","parsed","JSON","parse","getAssets","process","exit","manifest","css","js","entrypoints","filter","x","endsWith","map"],"sources":["ssr-middleware.ts"],"sourcesContent":["import type { Assets } from '@teambit/ui-foundation.ui.rendering.html';\nimport { Request, Response, NextFunction } from 'express';\nimport path from 'path';\nimport * as fs from 'fs-extra';\nimport type { Logger } from '@teambit/logger';\nimport type { SsrContent } from '../react-ssr';\nimport { extractBrowserData } from './extract-browser-data';\n\nconst denyList = /^\\/favicon.ico$/;\n\ntype ssrRenderProps = {\n root: string;\n port: number;\n title: string;\n logger: Logger;\n};\n\ntype ManifestFile = {\n files?: Record<string, string>;\n entrypoints?: string[];\n};\n\nexport async function createSsrMiddleware({ root, port, title, logger }: ssrRenderProps) {\n const runtime = await loadRuntime(root, { logger });\n if (!runtime) return undefined;\n\n const { render } = runtime;\n const assets = { ...runtime.assets, title };\n\n return async function serverRenderMiddleware(req: Request, res: Response, next: NextFunction) {\n const { query, url } = req;\n\n const browser = extractBrowserData(req, port);\n\n if (denyList.test(url)) {\n logger.debug(`[ssr] skipping static denyList file ${url}`);\n next();\n return;\n }\n\n if (query.rendering === 'client') {\n logger.debug(`[ssr] skipping ${url}`);\n next();\n return;\n }\n\n logger.debug(`[ssr] ${req.method} ${url}`);\n const server = { port, request: req, response: res };\n const props: SsrContent = { assets, browser, server };\n\n try {\n const rendered = await render(props);\n res.set('Cache-Control', 'no-cache');\n res.send(rendered);\n logger.debug(`[ssr] success '${url}'`);\n } catch (e: any) {\n logger.error(`[ssr] failed at '${url}'`, e);\n next();\n }\n };\n}\n\nasync function loadRuntime(root: string, { logger }: { logger: Logger }) {\n let render: (...arg: any[]) => any;\n let assets: Assets | undefined;\n\n try {\n const entryFilepath = path.join(root, 'ssr', 'index.js');\n if (!fs.existsSync(entryFilepath)) {\n logger.warn(`[ssr] - Skipping setup - failed finding ssr bundle at \"${entryFilepath}\"`);\n return undefined;\n }\n\n const manifestFilepath = path.join(root, 'asset-manifest.json');\n if (!fs.existsSync(manifestFilepath)) {\n logger.warn('[ssr] - Skipping setup (cannot find asset manifest file)');\n return undefined;\n }\n\n assets = await parseManifest(manifestFilepath);\n if (!assets) {\n logger.warn('[ssr] - Skipping setup (failed parsing assets manifest)');\n return undefined;\n }\n\n const imported = await import(entryFilepath);\n render = imported?.render;\n\n if (!render || typeof render !== 'function') {\n logger.warn('[ssr] - index file does not export a render() function. Skipping setup.');\n return undefined;\n }\n } catch (e: any) {\n logger.error(e);\n return undefined;\n }\n\n return {\n render,\n assets,\n };\n}\n\nasync function parseManifest(filepath: string, logger?: Logger) {\n try {\n const file = await fs.readFile(filepath);\n logger?.debug('[ssr] - ✓ aread manifest file');\n const contents = file.toString();\n const parsed: ManifestFile = JSON.parse(contents);\n logger?.debug('[ssr] - ✓ prased manifest file', parsed);\n const assets = getAssets(parsed);\n logger?.debug('[ssr] - ✓ extracted data from manifest file', assets);\n\n return assets;\n } catch (e: any) {\n logger?.error('[ssr] - error parsing asset manifest', e);\n process.exit();\n return undefined;\n }\n}\n\nfunction getAssets(manifest: ManifestFile) {\n const assets: Assets = { css: [], js: [] };\n\n assets.css = manifest.entrypoints?.filter((x) => x.endsWith('css')).map((x) => path.join('/', x));\n assets.js = manifest.entrypoints?.filter((x) => x.endsWith('js')).map((x) => path.join('/', x));\n\n return assets;\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["denyList","createSsrMiddleware","root","port","title","logger","runtime","loadRuntime","undefined","render","assets","serverRenderMiddleware","request","response","next","query","url","browser","browserFromExpress","test","debug","rendering","method","server","props","rendered","set","send","e","error","entryFilepath","path","join","fs","existsSync","warn","manifestFilepath","parseManifest","imported","filepath","file","readFile","contents","toString","parsed","JSON","parse","getAssets","process","exit","manifest","css","js","entrypoints","filter","x","endsWith","map"],"sources":["ssr-middleware.ts"],"sourcesContent":["import { browserFromExpress } from '@teambit/react.rendering.ssr';\nimport type { HtmlAssets, SsrSession } from '@teambit/react.rendering.ssr';\nimport type { Logger } from '@teambit/logger';\nimport type { Request, Response, NextFunction } from 'express';\nimport path from 'path';\nimport * as fs from 'fs-extra';\n\nconst denyList = /^\\/favicon.ico$/;\n\ntype ssrRenderProps = {\n root: string;\n port: number;\n title: string;\n logger: Logger;\n};\n\ntype ManifestFile = {\n files?: Record<string, string>;\n entrypoints?: string[];\n};\n\nexport async function createSsrMiddleware({ root, port, title, logger }: ssrRenderProps) {\n const runtime = await loadRuntime(root, { logger });\n if (!runtime) return undefined;\n\n const { render } = runtime;\n const assets = { ...runtime.assets, title };\n\n return async function serverRenderMiddleware(request: Request, response: Response, next: NextFunction) {\n const { query, url } = request;\n\n const browser = browserFromExpress(request, port);\n\n if (denyList.test(url)) {\n logger.debug(`[ssr] skipping static denyList file ${url}`);\n next();\n return;\n }\n\n if (query.rendering === 'client') {\n logger.debug(`[ssr] skipping ${url}`);\n next();\n return;\n }\n\n logger.debug(`[ssr] ${request.method} ${url}`);\n const server = { port, request, response };\n const props: SsrSession = { assets, browser, request, response, server };\n\n try {\n const rendered = await render(props);\n response.set('Cache-Control', 'no-cache');\n response.send(rendered);\n logger.debug(`[ssr] success '${url}'`);\n } catch (e: any) {\n logger.error(`[ssr] failed at '${url}'`, e);\n next();\n }\n };\n}\n\nasync function loadRuntime(root: string, { logger }: { logger: Logger }) {\n let render: (...arg: any[]) => any;\n let assets: HtmlAssets | undefined;\n\n try {\n const entryFilepath = path.join(root, 'ssr', 'index.js');\n if (!fs.existsSync(entryFilepath)) {\n logger.warn(`[ssr] - Skipping setup - failed finding ssr bundle at \"${entryFilepath}\"`);\n return undefined;\n }\n\n const manifestFilepath = path.join(root, 'asset-manifest.json');\n if (!fs.existsSync(manifestFilepath)) {\n logger.warn('[ssr] - Skipping setup (cannot find asset manifest file)');\n return undefined;\n }\n\n assets = await parseManifest(manifestFilepath);\n if (!assets) {\n logger.warn('[ssr] - Skipping setup (failed parsing assets manifest)');\n return undefined;\n }\n\n const imported = await import(entryFilepath);\n render = imported?.render;\n\n if (!render || typeof render !== 'function') {\n logger.warn('[ssr] - index file does not export a render() function. Skipping setup.');\n return undefined;\n }\n } catch (e: any) {\n logger.error(e);\n return undefined;\n }\n\n return {\n render,\n assets,\n };\n}\n\nasync function parseManifest(filepath: string, logger?: Logger) {\n try {\n const file = await fs.readFile(filepath);\n logger?.debug('[ssr] - ✓ aread manifest file');\n const contents = file.toString();\n const parsed: ManifestFile = JSON.parse(contents);\n logger?.debug('[ssr] - ✓ prased manifest file', parsed);\n const assets = getAssets(parsed);\n logger?.debug('[ssr] - ✓ extracted data from manifest file', assets);\n\n return assets;\n } catch (e: any) {\n logger?.error('[ssr] - error parsing asset manifest', e);\n process.exit();\n return undefined;\n }\n}\n\nfunction getAssets(manifest: ManifestFile) {\n const assets: HtmlAssets = { css: [], js: [] };\n\n assets.css = manifest.entrypoints?.filter((x) => x.endsWith('css')).map((x) => path.join('/', x));\n assets.js = manifest.entrypoints?.filter((x) => x.endsWith('js')).map((x) => path.join('/', x));\n\n return assets;\n}\n"],"mappings":"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"}
package/dist/ui-root.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { AspectDefinition } from '@teambit/aspect-loader';
2
2
  import { ComponentDir } from '@teambit/bundler';
3
- import { Component } from '@teambit/component';
3
+ import { Component, ComponentID, ResolveAspectsOptions } from '@teambit/component';
4
4
  import { ProxyConfigArrayItem } from 'webpack-dev-server';
5
5
  export interface UIRoot extends ComponentDir {
6
6
  /**
@@ -20,9 +20,9 @@ export interface UIRoot extends ComponentDir {
20
20
  launchBrowserOnStart?: boolean;
21
21
  };
22
22
  /**
23
- * resolve all aspects in the UI root.
23
+ * resolve aspects in the UI root. (resolve all if componentIds not provided)
24
24
  */
25
- resolveAspects(runtimeName: string): Promise<AspectDefinition[]>;
25
+ resolveAspects(runtimeName: string, componentIds?: ComponentID[], opts?: ResolveAspectsOptions): Promise<AspectDefinition[]>;
26
26
  /**
27
27
  * resolve components from a given pattern.
28
28
  */
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["ui-root.tsx"],"sourcesContent":["import { AspectDefinition } from '@teambit/aspect-loader';\nimport { ComponentDir } from '@teambit/bundler';\nimport { Component } from '@teambit/component';\nimport { ProxyConfigArrayItem } from 'webpack-dev-server';\n\n// TODO: remove this extends \"ComponentDir\", this should be part of the workspace alone since scope\n// would never have componentDir and as it has nothing to do with `UIRoot`.\nexport interface UIRoot extends ComponentDir {\n /**\n * unique name of the ui.\n */\n name: string;\n\n /**\n * path of the ui root.\n */\n path: string;\n\n /**\n * name of the UI root config file.\n */\n configFile: string;\n\n buildOptions?: {\n ssr?: boolean;\n launchBrowserOnStart?: boolean;\n };\n\n /**\n * resolve all aspects in the UI root.\n */\n resolveAspects(runtimeName: string): Promise<AspectDefinition[]>;\n\n /**\n * resolve components from a given pattern.\n */\n resolvePattern?(pattern: string): Promise<Component[]>;\n\n /**\n * listener for when the dev server starts. can be used for running the watcher.\n */\n postStart?(options: PostStartOptions): Promise<void>;\n\n /**\n * determine whether UI should get a priority.\n */\n priority?: boolean;\n}\n\nexport type ProxyEntry = ProxyConfigArrayItem & {\n context: string[]; // limit type to simplify our code. (not required)\n};\n\nexport type PostStartOptions = {\n /**\n * pattern for selecting components in the container.\n */\n pattern?: string;\n};\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["ui-root.tsx"],"sourcesContent":["import { AspectDefinition } from '@teambit/aspect-loader';\nimport { ComponentDir } from '@teambit/bundler';\nimport { Component, ComponentID, ResolveAspectsOptions } from '@teambit/component';\nimport { ProxyConfigArrayItem } from 'webpack-dev-server';\n\n// TODO: remove this extends \"ComponentDir\", this should be part of the workspace alone since scope\n// would never have componentDir and as it has nothing to do with `UIRoot`.\nexport interface UIRoot extends ComponentDir {\n /**\n * unique name of the ui.\n */\n name: string;\n\n /**\n * path of the ui root.\n */\n path: string;\n\n /**\n * name of the UI root config file.\n */\n configFile: string;\n\n buildOptions?: {\n ssr?: boolean;\n launchBrowserOnStart?: boolean;\n };\n\n /**\n * resolve aspects in the UI root. (resolve all if componentIds not provided)\n */\n resolveAspects(\n runtimeName: string,\n componentIds?: ComponentID[],\n opts?: ResolveAspectsOptions\n ): Promise<AspectDefinition[]>;\n\n /**\n * resolve components from a given pattern.\n */\n resolvePattern?(pattern: string): Promise<Component[]>;\n\n /**\n * listener for when the dev server starts. can be used for running the watcher.\n */\n postStart?(options: PostStartOptions): Promise<void>;\n\n /**\n * determine whether UI should get a priority.\n */\n priority?: boolean;\n}\n\nexport type ProxyEntry = ProxyConfigArrayItem & {\n context: string[]; // limit type to simplify our code. (not required)\n};\n\nexport type PostStartOptions = {\n /**\n * pattern for selecting components in the container.\n */\n pattern?: string;\n};\n"],"mappings":""}
@@ -579,7 +579,7 @@ class UiMain {
579
579
 
580
580
  async generateRoot(aspectDefs, rootExtensionName, runtimeName = _ui().UIRuntime.name, rootAspect = _ui().UIAspect.id, config) {
581
581
  const contents = await (0, _createRoot().createRoot)(aspectDefs, rootExtensionName, rootAspect, runtimeName, config || this.harmony.config.toObject());
582
- const filepath = (0, _path().resolve)((0, _path().join)(__dirname, `${runtimeName}.root${(0, _utils().sha1)(contents)}.js`));
582
+ const filepath = (0, _path().resolve)((0, _path().join)(__dirname, `${runtimeName}.root.${(0, _utils().sha1)(contents)}.js`));
583
583
  if (_fsExtra().default.existsSync(filepath)) return filepath;
584
584
 
585
585
  _fsExtra().default.outputFileSync(filepath, contents);
@@ -1 +1 @@
1
- {"version":3,"names":["UiMain","constructor","pubsub","config","graphql","uiRootSlot","express","preStartSlot","onStartSlot","publicDirOverwriteSlot","buildMethodOverwriteSlot","componentExtension","cache","logger","harmony","startPluginSlot","targetHost","targetPort","uiRoot","UiServerStartedEvent","Date","now","publicDir","overwriteFn","getOverwritePublic","hasDir","startsWith","substring","getUiByName","name","roots","toArray","root","find","build","uiRootName","debug","maybeUiRoot","getUi","UnknownUI","possibleUis","ssr","buildOptions","mainEntry","generateRoot","resolveAspects","UIRuntime","browserConfig","createWebpackConfig","path","ssrConfig","createSsrWebpackConfig","filter","x","compiler","webpack","compilerRun","promisify","run","bind","results","UnknownBuildError","hasErrors","clearConsole","Error","toString","registerStartPlugin","startPlugin","register","initiatePlugins","options","plugins","values","Promise","all","map","plugin","initiate","createRuntime","pattern","dev","port","rebuild","verbose","isHost","setHostPriority","uiServer","UIServer","create","uiRootExtension","ui","startPlugins","addSignalListener","portRange","buildUI","start","pub","UIAspect","id","createUiServerStartedEvent","host","process","on","exit","getPort","selectPort","registerPreStart","preStartFn","registerOnStart","onStartFn","registerBuildUIOverwrite","fn","registerPublicDirOverwrite","getOverwriteBuildFn","buildMethodOverwrite","undefined","overwritePublic","invokePreStart","preStartOpts","promises","invokeOnStart","registerUiRoot","get","uis","length","priority","isHostAvailable","Boolean","getHost","getUiName","createLink","aspectDefs","rootExtensionName","createRoot","runtimeName","rootAspect","contents","toObject","filepath","resolve","join","__dirname","sha1","fs","existsSync","outputFileSync","from","to","usedPorts","Port","set","concat","overwrite","hash","buildIfChanged","buildIfNoBundle","buildUiHash","runtime","aspects","sort","a","b","aspectPath","aspect","runtimePath","force","hashed","console","chalk","cyan","configFile","stdout","write","platform","output","pathExistsSync","publicUrl","provider","cli","loggerMain","proxyGetterSlot","createLogger","StartCmd","UIBuildCmd","MainRuntime","PubsubAspect","CLIAspect","GraphqlAspect","ExpressAspect","ComponentAspect","CacheAspect","LoggerAspect","Slot","withType","addRuntime"],"sources":["ui.main.runtime.ts"],"sourcesContent":["import type { AspectMain } from '@teambit/aspect';\nimport { ComponentType } from 'react';\nimport { AspectDefinition } from '@teambit/aspect-loader';\nimport { CacheAspect, CacheMain } from '@teambit/cache';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport type { ComponentMain } from '@teambit/component';\nimport { ComponentAspect } from '@teambit/component';\nimport { ExpressAspect, ExpressMain } from '@teambit/express';\nimport type { GraphqlMain } from '@teambit/graphql';\nimport { GraphqlAspect } from '@teambit/graphql';\nimport chalk from 'chalk';\nimport { Slot, SlotRegistry, Harmony } from '@teambit/harmony';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport PubsubAspect, { PubsubMain } from '@teambit/pubsub';\nimport { sha1 } from '@teambit/legacy/dist/utils';\nimport fs from 'fs-extra';\nimport { Port } from '@teambit/toolbox.network.get-port';\nimport { join, resolve } from 'path';\nimport { promisify } from 'util';\nimport webpack from 'webpack';\nimport { UiServerStartedEvent } from './events';\nimport { createRoot } from './create-root';\nimport { UnknownUI, UnknownBuildError } from './exceptions';\nimport { StartCmd } from './start.cmd';\nimport { UIBuildCmd } from './ui-build.cmd';\nimport { UIRoot } from './ui-root';\nimport { UIServer } from './ui-server';\nimport { UIAspect, UIRuntime } from './ui.aspect';\nimport createWebpackConfig from './webpack/webpack.browser.config';\nimport createSsrWebpackConfig from './webpack/webpack.ssr.config';\nimport { StartPlugin, StartPluginOptions } from './start-plugin';\n\nexport type UIDeps = [PubsubMain, CLIMain, GraphqlMain, ExpressMain, ComponentMain, CacheMain, LoggerMain, AspectMain];\n\nexport type UIRootRegistry = SlotRegistry<UIRoot>;\n\nexport type PreStart = (preStartOpts: PreStartOpts) => Promise<void>;\n\nexport type PreStartOpts = { skipCompilation?: boolean };\n\nexport type OnStart = () => Promise<undefined | ComponentType<{}>>;\n\nexport type StartPluginSlot = SlotRegistry<StartPlugin>;\n\nexport type PublicDirOverwrite = (uiRoot: UIRoot) => Promise<string | undefined>;\n\nexport type BuildMethodOverwrite = (name: string, uiRoot: UIRoot, rebuild?: boolean) => Promise<string>;\n\nexport type PreStartSlot = SlotRegistry<PreStart>;\n\nexport type OnStartSlot = SlotRegistry<OnStart>;\n\nexport type PublicDirOverwriteSlot = SlotRegistry<PublicDirOverwrite>;\n\nexport type BuildMethodOverwriteSlot = SlotRegistry<BuildMethodOverwrite>;\n\nexport type UIConfig = {\n /**\n * port for the UI root to use.\n */\n port?: number;\n\n /**\n * port range for the UI root to use.\n */\n portRange: [number, number];\n\n /**\n * host for the UI root\n */\n host: string;\n\n /**\n * directory in workspace to use for public assets.\n * always relative to the workspace root directory.\n */\n publicDir: string;\n\n /** the url to display when server is listening. Note that bit does not provide proxying to this url */\n publicUrl?: string;\n};\n\nexport type RuntimeOptions = {\n /**\n * determine whether to initiate on verbose mode.\n */\n verbose?: boolean;\n\n /**\n * name of the UI root to load.\n */\n uiRootName?: string;\n\n /**\n * component selector pattern to load.\n */\n pattern?: string;\n\n /**\n * determine whether to start a dev server (defaults to false).\n */\n dev?: boolean;\n\n /**\n * port of the config.\n */\n port?: number;\n\n /**\n * determine whether to rebuild the UI before start.\n */\n rebuild?: boolean;\n};\n\nexport class UiMain {\n constructor(\n /**\n * Pubsub extension.\n */\n private pubsub: PubsubMain,\n\n private config: UIConfig,\n\n /**\n * graphql extension.\n */\n private graphql: GraphqlMain,\n\n /**\n * slot registry of ui roots.\n */\n private uiRootSlot: UIRootRegistry,\n\n /**\n * express extension.\n */\n private express: ExpressMain,\n\n /**\n * pre-start slot\n */\n private preStartSlot: PreStartSlot,\n\n /**\n * on start slot\n */\n private onStartSlot: OnStartSlot,\n\n /**\n * Overwrite the public dir Slot\n */\n private publicDirOverwriteSlot: PublicDirOverwriteSlot,\n\n /**\n * Overwrite the build ui method\n */\n private buildMethodOverwriteSlot: BuildMethodOverwriteSlot,\n\n /**\n * component extension.\n */\n private componentExtension: ComponentMain,\n\n /**\n * ui logger instance.\n */\n private cache: CacheMain,\n\n /**\n * ui logger instance.\n */\n private logger: Logger,\n\n private harmony: Harmony,\n\n private startPluginSlot: StartPluginSlot\n ) {}\n\n async publicDir(uiRoot: UIRoot) {\n const overwriteFn = this.getOverwritePublic();\n if (overwriteFn) {\n const hasDir = await overwriteFn(uiRoot);\n if (hasDir) return hasDir;\n }\n\n if (this.config.publicDir.startsWith('/')) {\n return this.config.publicDir.substring(1);\n }\n\n return this.config.publicDir;\n }\n\n private getUiByName(name: string) {\n const roots = this.uiRootSlot.toArray();\n const [, root] =\n roots.find(([, uiRoot]) => {\n return uiRoot.name === name;\n }) || [];\n\n return root;\n }\n\n /**\n * create a build of the given UI root.\n */\n async build(uiRootName?: string): Promise<webpack.MultiStats | undefined> {\n // TODO: change to MultiStats from webpack once they export it in their types\n this.logger.debug(`build, uiRootName: \"${uiRootName}\"`);\n const maybeUiRoot = this.getUi(uiRootName);\n\n if (!maybeUiRoot) throw new UnknownUI(uiRootName, this.possibleUis());\n const [name, uiRoot] = maybeUiRoot;\n\n // TODO: @uri refactor all dev server related code to use the bundler extension instead.\n const ssr = uiRoot.buildOptions?.ssr || false;\n const mainEntry = await this.generateRoot(await uiRoot.resolveAspects(UIRuntime.name), name);\n\n const browserConfig = createWebpackConfig(uiRoot.path, [mainEntry], uiRoot.name, await this.publicDir(uiRoot));\n const ssrConfig = ssr && createSsrWebpackConfig(uiRoot.path, [mainEntry], await this.publicDir(uiRoot));\n\n const config = [browserConfig, ssrConfig].filter((x) => !!x) as webpack.Configuration[];\n const compiler = webpack(config);\n this.logger.debug(`build, uiRootName: \"${uiRootName}\" running webpack`);\n const compilerRun = promisify(compiler.run.bind(compiler));\n const results = await compilerRun();\n this.logger.debug(`build, uiRootName: \"${uiRootName}\" completed webpack`);\n if (!results) throw new UnknownBuildError();\n if (results?.hasErrors()) {\n this.clearConsole();\n throw new Error(results?.toString());\n }\n\n return results;\n }\n\n registerStartPlugin(startPlugin: StartPlugin) {\n this.startPluginSlot.register(startPlugin);\n return this;\n }\n\n private async initiatePlugins(options: StartPluginOptions) {\n const plugins = this.startPluginSlot.values();\n await Promise.all(plugins.map((plugin) => plugin.initiate(options)));\n return plugins;\n }\n\n /**\n * create a Bit UI runtime.\n */\n async createRuntime({ uiRootName, pattern, dev, port, rebuild, verbose }: RuntimeOptions) {\n const maybeUiRoot = this.getUi(uiRootName);\n if (!maybeUiRoot) throw new UnknownUI(uiRootName, this.possibleUis());\n\n const [name, uiRoot] = maybeUiRoot;\n\n const plugins = await this.initiatePlugins({\n verbose,\n pattern,\n });\n\n if (this.componentExtension.isHost(name)) this.componentExtension.setHostPriority(name);\n\n const uiServer = UIServer.create({\n express: this.express,\n graphql: this.graphql,\n uiRoot,\n uiRootExtension: name,\n ui: this,\n logger: this.logger,\n publicDir: await this.publicDir(uiRoot),\n startPlugins: plugins,\n });\n\n // Adding signal listeners to make sure we immediately close the process on sigint / sigterm (otherwise webpack dev server closing will take time)\n this.addSignalListener();\n if (dev) {\n await uiServer.dev({ portRange: port || this.config.portRange });\n } else {\n await this.buildUI(name, uiRoot, rebuild);\n await uiServer.start({ portRange: port || this.config.portRange });\n }\n\n this.pubsub.pub(UIAspect.id, this.createUiServerStartedEvent(this.config.host, uiServer.port, uiRoot));\n\n return uiServer;\n }\n\n private addSignalListener() {\n process.on('SIGTERM', () => {\n process.exit();\n });\n\n process.on('SIGINT', () => {\n process.exit();\n });\n }\n\n async getPort(port?: number): Promise<number> {\n if (port) return port;\n return this.config.port || this.selectPort();\n }\n\n /**\n * Events\n */\n private createUiServerStartedEvent = (targetHost, targetPort, uiRoot) => {\n return new UiServerStartedEvent(Date.now(), targetHost, targetPort, uiRoot);\n };\n\n /**\n * pre-start events are triggered and *completed* before the webserver started.\n * (the promise is awaited)\n */\n registerPreStart(preStartFn: PreStart) {\n this.preStartSlot.register(preStartFn);\n }\n\n /**\n * bind to ui server start event.\n */\n registerOnStart(onStartFn: OnStart) {\n this.onStartSlot.register(onStartFn);\n return this;\n }\n\n /**\n * overwrite the build ui function\n */\n registerBuildUIOverwrite(fn: BuildMethodOverwrite) {\n this.buildMethodOverwriteSlot.register(fn);\n return this;\n }\n\n /**\n * overwrite the build ui function\n */\n registerPublicDirOverwrite(fn: PublicDirOverwrite) {\n this.publicDirOverwriteSlot.register(fn);\n return this;\n }\n\n private getOverwriteBuildFn() {\n const buildMethodOverwrite = this.buildMethodOverwriteSlot.toArray();\n if (buildMethodOverwrite[0]) {\n const [, fn] = buildMethodOverwrite[0];\n return fn;\n }\n return undefined;\n }\n\n private getOverwritePublic() {\n const overwritePublic = this.publicDirOverwriteSlot.toArray();\n if (overwritePublic[0]) {\n const [, fn] = overwritePublic[0];\n return fn;\n }\n return undefined;\n }\n\n async invokePreStart(preStartOpts: PreStartOpts): Promise<void> {\n const promises = this.preStartSlot.values().map((fn) => fn(preStartOpts));\n await Promise.all(promises);\n }\n\n async invokeOnStart(): Promise<ComponentType[]> {\n const promises = this.onStartSlot.values().map((fn) => fn());\n const startPlugins = await Promise.all(promises);\n return startPlugins.filter((plugin) => !!plugin) as ComponentType[];\n }\n\n /**\n * register a UI slot.\n */\n registerUiRoot(uiRoot: UIRoot) {\n return this.uiRootSlot.register(uiRoot);\n }\n\n /**\n * get a UI runtime instance.\n */\n getUi(uiRootName?: string): [string, UIRoot] | undefined {\n if (uiRootName) {\n const root = this.uiRootSlot.get(uiRootName) || this.getUiByName(uiRootName);\n if (!root) return undefined;\n return [uiRootName, root];\n }\n const uis = this.uiRootSlot.toArray();\n if (uis.length === 1) return uis[0];\n return uis.find(([, root]) => root.priority);\n }\n\n isHostAvailable(): boolean {\n return Boolean(this.componentExtension.getHost());\n }\n\n getUiName(uiRootName?: string): string | undefined {\n const [, ui] = this.getUi(uiRootName) || [];\n if (!ui) return undefined;\n\n return ui.name;\n }\n\n private possibleUis() {\n return this.uiRootSlot.toArray().map(([id]) => id);\n }\n\n createLink(aspectDefs: AspectDefinition[], rootExtensionName: string) {\n return createRoot(aspectDefs, rootExtensionName);\n }\n\n /**\n * generate the root file of the UI runtime.\n */\n async generateRoot(\n aspectDefs: AspectDefinition[],\n rootExtensionName: string,\n runtimeName = UIRuntime.name,\n rootAspect = UIAspect.id,\n config?: object,\n ) {\n const contents = await createRoot(\n aspectDefs,\n rootExtensionName,\n rootAspect,\n runtimeName,\n config || this.harmony.config.toObject()\n );\n const filepath = resolve(join(__dirname, `${runtimeName}.root${sha1(contents)}.js`));\n if (fs.existsSync(filepath)) return filepath;\n fs.outputFileSync(filepath, contents);\n return filepath;\n }\n\n private async selectPort() {\n const [from, to] = this.config.portRange;\n const usedPorts = (await this.cache.get<number[]>(`${from}${to}`)) || [];\n const port = await Port.getPort(from, to, usedPorts);\n // this will lock the port for 1 min to avoid race conditions\n await this.cache.set(`${from}${to}`, usedPorts.concat(port), 5000);\n return port;\n }\n\n private async buildUI(name: string, uiRoot: UIRoot, rebuild?: boolean): Promise<string> {\n this.logger.debug(`buildUI, name ${name}`);\n const overwrite = this.getOverwriteBuildFn();\n if (overwrite) return overwrite(name, uiRoot, rebuild);\n const hash = await this.buildIfChanged(name, uiRoot, rebuild);\n await this.buildIfNoBundle(name, uiRoot);\n return hash;\n }\n\n async buildUiHash(uiRoot: UIRoot, runtime = 'ui'): Promise<string> {\n const aspects = await uiRoot.resolveAspects(runtime);\n aspects.sort((a, b) => (a.aspectPath > b.aspectPath ? 1 : -1));\n const hash = aspects.map((aspect) => {\n return [aspect.aspectPath, aspect.runtimePath].join('');\n });\n return sha1(hash.join(''));\n }\n\n async buildIfChanged(name: string, uiRoot: UIRoot, force: boolean | undefined): Promise<string> {\n this.logger.debug(`buildIfChanged, name ${name}`);\n const hash = await this.buildUiHash(uiRoot);\n const hashed = await this.cache.get(uiRoot.path);\n if (hash === hashed && !force) {\n this.logger.debug(`buildIfChanged, name ${name}, returned from cache`);\n return hash;\n }\n if (!hashed) {\n this.logger.console(\n `Building UI assets for '${chalk.cyan(uiRoot.name)}' in target directory: ${chalk.cyan(\n await this.publicDir(uiRoot)\n )}. The first time we build the UI it may take a few minutes.`\n );\n } else {\n this.logger.console(\n `Rebuilding UI assets for '${chalk.cyan(uiRoot.name)} in target directory: ${chalk.cyan(\n await this.publicDir(uiRoot)\n )}' as ${uiRoot.configFile} has been changed.`\n );\n }\n\n await this.build(name);\n await this.cache.set(uiRoot.path, hash);\n return hash;\n }\n\n clearConsole() {\n process.stdout.write(process.platform === 'win32' ? '\\x1B[2J\\x1B[0f' : '\\x1B[2J\\x1B[3J\\x1B[H');\n }\n\n async buildIfNoBundle(name: string, uiRoot: UIRoot) {\n const config = createWebpackConfig(\n uiRoot.path,\n [await this.generateRoot(await uiRoot.resolveAspects(UIRuntime.name), name)],\n uiRoot.name,\n await this.publicDir(uiRoot)\n );\n if (config.output?.path && fs.pathExistsSync(config.output.path)) return;\n const hash = await this.buildUiHash(uiRoot);\n await this.build(name);\n await this.cache.set(uiRoot.path, hash);\n }\n\n get publicUrl() {\n return this.config.publicUrl;\n }\n\n static defaultConfig: UIConfig = {\n publicDir: 'public/bit',\n portRange: [3000, 3100],\n host: 'localhost',\n };\n\n static runtime = MainRuntime;\n static dependencies = [\n PubsubAspect,\n CLIAspect,\n GraphqlAspect,\n ExpressAspect,\n ComponentAspect,\n CacheAspect,\n LoggerAspect,\n ];\n\n static slots = [\n Slot.withType<UIRoot>(),\n Slot.withType<PreStart>(),\n Slot.withType<OnStart>(),\n Slot.withType<PublicDirOverwriteSlot>(),\n Slot.withType<BuildMethodOverwriteSlot>(),\n Slot.withType<StartPlugin>(),\n ];\n\n static async provider(\n [pubsub, cli, graphql, express, componentExtension, cache, loggerMain]: UIDeps,\n config,\n [uiRootSlot, preStartSlot, onStartSlot, publicDirOverwriteSlot, buildMethodOverwriteSlot, proxyGetterSlot]: [\n UIRootRegistry,\n PreStartSlot,\n OnStartSlot,\n PublicDirOverwriteSlot,\n BuildMethodOverwriteSlot,\n StartPluginSlot\n ],\n harmony: Harmony\n ) {\n // aspectExtension.registerRuntime(new RuntimeDefinition('ui', []))\n const logger = loggerMain.createLogger(UIAspect.id);\n\n const ui = new UiMain(\n pubsub,\n config,\n graphql,\n uiRootSlot,\n express,\n preStartSlot,\n onStartSlot,\n publicDirOverwriteSlot,\n buildMethodOverwriteSlot,\n componentExtension,\n cache,\n logger,\n harmony,\n proxyGetterSlot\n );\n cli.register(new StartCmd(ui, logger), new UIBuildCmd(ui));\n return ui;\n }\n}\n\nUIAspect.addRuntime(UiMain);\n"],"mappings":"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"}
1
+ {"version":3,"names":["UiMain","constructor","pubsub","config","graphql","uiRootSlot","express","preStartSlot","onStartSlot","publicDirOverwriteSlot","buildMethodOverwriteSlot","componentExtension","cache","logger","harmony","startPluginSlot","targetHost","targetPort","uiRoot","UiServerStartedEvent","Date","now","publicDir","overwriteFn","getOverwritePublic","hasDir","startsWith","substring","getUiByName","name","roots","toArray","root","find","build","uiRootName","debug","maybeUiRoot","getUi","UnknownUI","possibleUis","ssr","buildOptions","mainEntry","generateRoot","resolveAspects","UIRuntime","browserConfig","createWebpackConfig","path","ssrConfig","createSsrWebpackConfig","filter","x","compiler","webpack","compilerRun","promisify","run","bind","results","UnknownBuildError","hasErrors","clearConsole","Error","toString","registerStartPlugin","startPlugin","register","initiatePlugins","options","plugins","values","Promise","all","map","plugin","initiate","createRuntime","pattern","dev","port","rebuild","verbose","isHost","setHostPriority","uiServer","UIServer","create","uiRootExtension","ui","startPlugins","addSignalListener","portRange","buildUI","start","pub","UIAspect","id","createUiServerStartedEvent","host","process","on","exit","getPort","selectPort","registerPreStart","preStartFn","registerOnStart","onStartFn","registerBuildUIOverwrite","fn","registerPublicDirOverwrite","getOverwriteBuildFn","buildMethodOverwrite","undefined","overwritePublic","invokePreStart","preStartOpts","promises","invokeOnStart","registerUiRoot","get","uis","length","priority","isHostAvailable","Boolean","getHost","getUiName","createLink","aspectDefs","rootExtensionName","createRoot","runtimeName","rootAspect","contents","toObject","filepath","resolve","join","__dirname","sha1","fs","existsSync","outputFileSync","from","to","usedPorts","Port","set","concat","overwrite","hash","buildIfChanged","buildIfNoBundle","buildUiHash","runtime","aspects","sort","a","b","aspectPath","aspect","runtimePath","force","hashed","console","chalk","cyan","configFile","stdout","write","platform","output","pathExistsSync","publicUrl","provider","cli","loggerMain","proxyGetterSlot","createLogger","StartCmd","UIBuildCmd","MainRuntime","PubsubAspect","CLIAspect","GraphqlAspect","ExpressAspect","ComponentAspect","CacheAspect","LoggerAspect","Slot","withType","addRuntime"],"sources":["ui.main.runtime.ts"],"sourcesContent":["import type { AspectMain } from '@teambit/aspect';\nimport { ComponentType } from 'react';\nimport { AspectDefinition } from '@teambit/aspect-loader';\nimport { CacheAspect, CacheMain } from '@teambit/cache';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport type { ComponentMain } from '@teambit/component';\nimport { ComponentAspect } from '@teambit/component';\nimport { ExpressAspect, ExpressMain } from '@teambit/express';\nimport type { GraphqlMain } from '@teambit/graphql';\nimport { GraphqlAspect } from '@teambit/graphql';\nimport chalk from 'chalk';\nimport { Slot, SlotRegistry, Harmony } from '@teambit/harmony';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport PubsubAspect, { PubsubMain } from '@teambit/pubsub';\nimport { sha1 } from '@teambit/legacy/dist/utils';\nimport fs from 'fs-extra';\nimport { Port } from '@teambit/toolbox.network.get-port';\nimport { join, resolve } from 'path';\nimport { promisify } from 'util';\nimport webpack from 'webpack';\nimport { UiServerStartedEvent } from './events';\nimport { createRoot } from './create-root';\nimport { UnknownUI, UnknownBuildError } from './exceptions';\nimport { StartCmd } from './start.cmd';\nimport { UIBuildCmd } from './ui-build.cmd';\nimport { UIRoot } from './ui-root';\nimport { UIServer } from './ui-server';\nimport { UIAspect, UIRuntime } from './ui.aspect';\nimport createWebpackConfig from './webpack/webpack.browser.config';\nimport createSsrWebpackConfig from './webpack/webpack.ssr.config';\nimport { StartPlugin, StartPluginOptions } from './start-plugin';\n\nexport type UIDeps = [PubsubMain, CLIMain, GraphqlMain, ExpressMain, ComponentMain, CacheMain, LoggerMain, AspectMain];\n\nexport type UIRootRegistry = SlotRegistry<UIRoot>;\n\nexport type PreStart = (preStartOpts: PreStartOpts) => Promise<void>;\n\nexport type PreStartOpts = { skipCompilation?: boolean };\n\nexport type OnStart = () => Promise<undefined | ComponentType<{}>>;\n\nexport type StartPluginSlot = SlotRegistry<StartPlugin>;\n\nexport type PublicDirOverwrite = (uiRoot: UIRoot) => Promise<string | undefined>;\n\nexport type BuildMethodOverwrite = (name: string, uiRoot: UIRoot, rebuild?: boolean) => Promise<string>;\n\nexport type PreStartSlot = SlotRegistry<PreStart>;\n\nexport type OnStartSlot = SlotRegistry<OnStart>;\n\nexport type PublicDirOverwriteSlot = SlotRegistry<PublicDirOverwrite>;\n\nexport type BuildMethodOverwriteSlot = SlotRegistry<BuildMethodOverwrite>;\n\nexport type UIConfig = {\n /**\n * port for the UI root to use.\n */\n port?: number;\n\n /**\n * port range for the UI root to use.\n */\n portRange: [number, number];\n\n /**\n * host for the UI root\n */\n host: string;\n\n /**\n * directory in workspace to use for public assets.\n * always relative to the workspace root directory.\n */\n publicDir: string;\n\n /** the url to display when server is listening. Note that bit does not provide proxying to this url */\n publicUrl?: string;\n};\n\nexport type RuntimeOptions = {\n /**\n * determine whether to initiate on verbose mode.\n */\n verbose?: boolean;\n\n /**\n * name of the UI root to load.\n */\n uiRootName?: string;\n\n /**\n * component selector pattern to load.\n */\n pattern?: string;\n\n /**\n * determine whether to start a dev server (defaults to false).\n */\n dev?: boolean;\n\n /**\n * port of the config.\n */\n port?: number;\n\n /**\n * determine whether to rebuild the UI before start.\n */\n rebuild?: boolean;\n};\n\nexport class UiMain {\n constructor(\n /**\n * Pubsub extension.\n */\n private pubsub: PubsubMain,\n\n private config: UIConfig,\n\n /**\n * graphql extension.\n */\n private graphql: GraphqlMain,\n\n /**\n * slot registry of ui roots.\n */\n private uiRootSlot: UIRootRegistry,\n\n /**\n * express extension.\n */\n private express: ExpressMain,\n\n /**\n * pre-start slot\n */\n private preStartSlot: PreStartSlot,\n\n /**\n * on start slot\n */\n private onStartSlot: OnStartSlot,\n\n /**\n * Overwrite the public dir Slot\n */\n private publicDirOverwriteSlot: PublicDirOverwriteSlot,\n\n /**\n * Overwrite the build ui method\n */\n private buildMethodOverwriteSlot: BuildMethodOverwriteSlot,\n\n /**\n * component extension.\n */\n private componentExtension: ComponentMain,\n\n /**\n * ui logger instance.\n */\n private cache: CacheMain,\n\n /**\n * ui logger instance.\n */\n private logger: Logger,\n\n private harmony: Harmony,\n\n private startPluginSlot: StartPluginSlot\n ) {}\n\n async publicDir(uiRoot: UIRoot) {\n const overwriteFn = this.getOverwritePublic();\n if (overwriteFn) {\n const hasDir = await overwriteFn(uiRoot);\n if (hasDir) return hasDir;\n }\n\n if (this.config.publicDir.startsWith('/')) {\n return this.config.publicDir.substring(1);\n }\n\n return this.config.publicDir;\n }\n\n private getUiByName(name: string) {\n const roots = this.uiRootSlot.toArray();\n const [, root] =\n roots.find(([, uiRoot]) => {\n return uiRoot.name === name;\n }) || [];\n\n return root;\n }\n\n /**\n * create a build of the given UI root.\n */\n async build(uiRootName?: string): Promise<webpack.MultiStats | undefined> {\n // TODO: change to MultiStats from webpack once they export it in their types\n this.logger.debug(`build, uiRootName: \"${uiRootName}\"`);\n const maybeUiRoot = this.getUi(uiRootName);\n\n if (!maybeUiRoot) throw new UnknownUI(uiRootName, this.possibleUis());\n const [name, uiRoot] = maybeUiRoot;\n\n // TODO: @uri refactor all dev server related code to use the bundler extension instead.\n const ssr = uiRoot.buildOptions?.ssr || false;\n const mainEntry = await this.generateRoot(await uiRoot.resolveAspects(UIRuntime.name), name);\n\n const browserConfig = createWebpackConfig(uiRoot.path, [mainEntry], uiRoot.name, await this.publicDir(uiRoot));\n const ssrConfig = ssr && createSsrWebpackConfig(uiRoot.path, [mainEntry], await this.publicDir(uiRoot));\n\n const config = [browserConfig, ssrConfig].filter((x) => !!x) as webpack.Configuration[];\n const compiler = webpack(config);\n this.logger.debug(`build, uiRootName: \"${uiRootName}\" running webpack`);\n const compilerRun = promisify(compiler.run.bind(compiler));\n const results = await compilerRun();\n this.logger.debug(`build, uiRootName: \"${uiRootName}\" completed webpack`);\n if (!results) throw new UnknownBuildError();\n if (results?.hasErrors()) {\n this.clearConsole();\n throw new Error(results?.toString());\n }\n\n return results;\n }\n\n registerStartPlugin(startPlugin: StartPlugin) {\n this.startPluginSlot.register(startPlugin);\n return this;\n }\n\n private async initiatePlugins(options: StartPluginOptions) {\n const plugins = this.startPluginSlot.values();\n await Promise.all(plugins.map((plugin) => plugin.initiate(options)));\n return plugins;\n }\n\n /**\n * create a Bit UI runtime.\n */\n async createRuntime({ uiRootName, pattern, dev, port, rebuild, verbose }: RuntimeOptions) {\n const maybeUiRoot = this.getUi(uiRootName);\n if (!maybeUiRoot) throw new UnknownUI(uiRootName, this.possibleUis());\n\n const [name, uiRoot] = maybeUiRoot;\n\n const plugins = await this.initiatePlugins({\n verbose,\n pattern,\n });\n\n if (this.componentExtension.isHost(name)) this.componentExtension.setHostPriority(name);\n\n const uiServer = UIServer.create({\n express: this.express,\n graphql: this.graphql,\n uiRoot,\n uiRootExtension: name,\n ui: this,\n logger: this.logger,\n publicDir: await this.publicDir(uiRoot),\n startPlugins: plugins,\n });\n\n // Adding signal listeners to make sure we immediately close the process on sigint / sigterm (otherwise webpack dev server closing will take time)\n this.addSignalListener();\n if (dev) {\n await uiServer.dev({ portRange: port || this.config.portRange });\n } else {\n await this.buildUI(name, uiRoot, rebuild);\n await uiServer.start({ portRange: port || this.config.portRange });\n }\n\n this.pubsub.pub(UIAspect.id, this.createUiServerStartedEvent(this.config.host, uiServer.port, uiRoot));\n\n return uiServer;\n }\n\n private addSignalListener() {\n process.on('SIGTERM', () => {\n process.exit();\n });\n\n process.on('SIGINT', () => {\n process.exit();\n });\n }\n\n async getPort(port?: number): Promise<number> {\n if (port) return port;\n return this.config.port || this.selectPort();\n }\n\n /**\n * Events\n */\n private createUiServerStartedEvent = (targetHost, targetPort, uiRoot) => {\n return new UiServerStartedEvent(Date.now(), targetHost, targetPort, uiRoot);\n };\n\n /**\n * pre-start events are triggered and *completed* before the webserver started.\n * (the promise is awaited)\n */\n registerPreStart(preStartFn: PreStart) {\n this.preStartSlot.register(preStartFn);\n }\n\n /**\n * bind to ui server start event.\n */\n registerOnStart(onStartFn: OnStart) {\n this.onStartSlot.register(onStartFn);\n return this;\n }\n\n /**\n * overwrite the build ui function\n */\n registerBuildUIOverwrite(fn: BuildMethodOverwrite) {\n this.buildMethodOverwriteSlot.register(fn);\n return this;\n }\n\n /**\n * overwrite the build ui function\n */\n registerPublicDirOverwrite(fn: PublicDirOverwrite) {\n this.publicDirOverwriteSlot.register(fn);\n return this;\n }\n\n private getOverwriteBuildFn() {\n const buildMethodOverwrite = this.buildMethodOverwriteSlot.toArray();\n if (buildMethodOverwrite[0]) {\n const [, fn] = buildMethodOverwrite[0];\n return fn;\n }\n return undefined;\n }\n\n private getOverwritePublic() {\n const overwritePublic = this.publicDirOverwriteSlot.toArray();\n if (overwritePublic[0]) {\n const [, fn] = overwritePublic[0];\n return fn;\n }\n return undefined;\n }\n\n async invokePreStart(preStartOpts: PreStartOpts): Promise<void> {\n const promises = this.preStartSlot.values().map((fn) => fn(preStartOpts));\n await Promise.all(promises);\n }\n\n async invokeOnStart(): Promise<ComponentType[]> {\n const promises = this.onStartSlot.values().map((fn) => fn());\n const startPlugins = await Promise.all(promises);\n return startPlugins.filter((plugin) => !!plugin) as ComponentType[];\n }\n\n /**\n * register a UI slot.\n */\n registerUiRoot(uiRoot: UIRoot) {\n return this.uiRootSlot.register(uiRoot);\n }\n\n /**\n * get a UI runtime instance.\n */\n getUi(uiRootName?: string): [string, UIRoot] | undefined {\n if (uiRootName) {\n const root = this.uiRootSlot.get(uiRootName) || this.getUiByName(uiRootName);\n if (!root) return undefined;\n return [uiRootName, root];\n }\n const uis = this.uiRootSlot.toArray();\n if (uis.length === 1) return uis[0];\n return uis.find(([, root]) => root.priority);\n }\n\n isHostAvailable(): boolean {\n return Boolean(this.componentExtension.getHost());\n }\n\n getUiName(uiRootName?: string): string | undefined {\n const [, ui] = this.getUi(uiRootName) || [];\n if (!ui) return undefined;\n\n return ui.name;\n }\n\n private possibleUis() {\n return this.uiRootSlot.toArray().map(([id]) => id);\n }\n\n createLink(aspectDefs: AspectDefinition[], rootExtensionName: string) {\n return createRoot(aspectDefs, rootExtensionName);\n }\n\n /**\n * generate the root file of the UI runtime.\n */\n async generateRoot(\n aspectDefs: AspectDefinition[],\n rootExtensionName: string,\n runtimeName = UIRuntime.name,\n rootAspect = UIAspect.id,\n config?: object,\n ) {\n const contents = await createRoot(\n aspectDefs,\n rootExtensionName,\n rootAspect,\n runtimeName,\n config || this.harmony.config.toObject()\n );\n const filepath = resolve(join(__dirname, `${runtimeName}.root.${sha1(contents)}.js`));\n if (fs.existsSync(filepath)) return filepath;\n fs.outputFileSync(filepath, contents);\n return filepath;\n }\n\n private async selectPort() {\n const [from, to] = this.config.portRange;\n const usedPorts = (await this.cache.get<number[]>(`${from}${to}`)) || [];\n const port = await Port.getPort(from, to, usedPorts);\n // this will lock the port for 1 min to avoid race conditions\n await this.cache.set(`${from}${to}`, usedPorts.concat(port), 5000);\n return port;\n }\n\n private async buildUI(name: string, uiRoot: UIRoot, rebuild?: boolean): Promise<string> {\n this.logger.debug(`buildUI, name ${name}`);\n const overwrite = this.getOverwriteBuildFn();\n if (overwrite) return overwrite(name, uiRoot, rebuild);\n const hash = await this.buildIfChanged(name, uiRoot, rebuild);\n await this.buildIfNoBundle(name, uiRoot);\n return hash;\n }\n\n async buildUiHash(uiRoot: UIRoot, runtime = 'ui'): Promise<string> {\n const aspects = await uiRoot.resolveAspects(runtime);\n aspects.sort((a, b) => (a.aspectPath > b.aspectPath ? 1 : -1));\n const hash = aspects.map((aspect) => {\n return [aspect.aspectPath, aspect.runtimePath].join('');\n });\n return sha1(hash.join(''));\n }\n\n async buildIfChanged(name: string, uiRoot: UIRoot, force: boolean | undefined): Promise<string> {\n this.logger.debug(`buildIfChanged, name ${name}`);\n const hash = await this.buildUiHash(uiRoot);\n const hashed = await this.cache.get(uiRoot.path);\n if (hash === hashed && !force) {\n this.logger.debug(`buildIfChanged, name ${name}, returned from cache`);\n return hash;\n }\n if (!hashed) {\n this.logger.console(\n `Building UI assets for '${chalk.cyan(uiRoot.name)}' in target directory: ${chalk.cyan(\n await this.publicDir(uiRoot)\n )}. The first time we build the UI it may take a few minutes.`\n );\n } else {\n this.logger.console(\n `Rebuilding UI assets for '${chalk.cyan(uiRoot.name)} in target directory: ${chalk.cyan(\n await this.publicDir(uiRoot)\n )}' as ${uiRoot.configFile} has been changed.`\n );\n }\n\n await this.build(name);\n await this.cache.set(uiRoot.path, hash);\n return hash;\n }\n\n clearConsole() {\n process.stdout.write(process.platform === 'win32' ? '\\x1B[2J\\x1B[0f' : '\\x1B[2J\\x1B[3J\\x1B[H');\n }\n\n async buildIfNoBundle(name: string, uiRoot: UIRoot) {\n const config = createWebpackConfig(\n uiRoot.path,\n [await this.generateRoot(await uiRoot.resolveAspects(UIRuntime.name), name)],\n uiRoot.name,\n await this.publicDir(uiRoot)\n );\n if (config.output?.path && fs.pathExistsSync(config.output.path)) return;\n const hash = await this.buildUiHash(uiRoot);\n await this.build(name);\n await this.cache.set(uiRoot.path, hash);\n }\n\n get publicUrl() {\n return this.config.publicUrl;\n }\n\n static defaultConfig: UIConfig = {\n publicDir: 'public/bit',\n portRange: [3000, 3100],\n host: 'localhost',\n };\n\n static runtime = MainRuntime;\n static dependencies = [\n PubsubAspect,\n CLIAspect,\n GraphqlAspect,\n ExpressAspect,\n ComponentAspect,\n CacheAspect,\n LoggerAspect,\n ];\n\n static slots = [\n Slot.withType<UIRoot>(),\n Slot.withType<PreStart>(),\n Slot.withType<OnStart>(),\n Slot.withType<PublicDirOverwriteSlot>(),\n Slot.withType<BuildMethodOverwriteSlot>(),\n Slot.withType<StartPlugin>(),\n ];\n\n static async provider(\n [pubsub, cli, graphql, express, componentExtension, cache, loggerMain]: UIDeps,\n config,\n [uiRootSlot, preStartSlot, onStartSlot, publicDirOverwriteSlot, buildMethodOverwriteSlot, proxyGetterSlot]: [\n UIRootRegistry,\n PreStartSlot,\n OnStartSlot,\n PublicDirOverwriteSlot,\n BuildMethodOverwriteSlot,\n StartPluginSlot\n ],\n harmony: Harmony\n ) {\n // aspectExtension.registerRuntime(new RuntimeDefinition('ui', []))\n const logger = loggerMain.createLogger(UIAspect.id);\n\n const ui = new UiMain(\n pubsub,\n config,\n graphql,\n uiRootSlot,\n express,\n preStartSlot,\n onStartSlot,\n publicDirOverwriteSlot,\n buildMethodOverwriteSlot,\n componentExtension,\n cache,\n logger,\n harmony,\n proxyGetterSlot\n );\n cli.register(new StartCmd(ui, logger), new UIBuildCmd(ui));\n return ui;\n }\n}\n\nUIAspect.addRuntime(UiMain);\n"],"mappings":"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"}
@@ -1,12 +1,11 @@
1
1
  import type { GraphqlUI } from '@teambit/graphql';
2
2
  import { SlotRegistry } from '@teambit/harmony';
3
3
  import type { ReactRouterUI } from '@teambit/react-router';
4
+ import type { SsrSession, RenderPlugin, ContextProps } from '@teambit/react.rendering.ssr';
4
5
  import React, { ReactNode, ComponentType } from 'react';
5
6
  import { UIRootFactory } from './ui-root.ui';
6
- import type { SsrContent } from './react-ssr/ssr-content';
7
- import { ContextProps, RenderPlugins } from './react-ssr/render-lifecycle';
8
7
  declare type HudSlot = SlotRegistry<ReactNode>;
9
- declare type RenderPluginsSlot = SlotRegistry<RenderPlugins>;
8
+ declare type RenderPluginsSlot = SlotRegistry<RenderPlugin<any, any>>;
10
9
  declare type UIRootRegistry = SlotRegistry<UIRootFactory>;
11
10
  /**
12
11
  * extension
@@ -40,7 +39,7 @@ export declare class UiUI {
40
39
  /** render and rehydrate client-side */
41
40
  render(rootExtension: string): Promise<void>;
42
41
  /** render dehydrated server-side */
43
- renderSsr(rootExtension: string, ssrContent: SsrContent): Promise<string>;
42
+ renderSsr(rootExtension: string, ssrContent: SsrSession): Promise<string>;
44
43
  /** adds elements to the Heads Up Display */
45
44
  registerHudItem: (element: ReactNode) => void;
46
45
  /**
@@ -49,7 +48,7 @@ export declare class UiUI {
49
48
  */
50
49
  registerContext<T>(context: ComponentType<ContextProps<T>>): void;
51
50
  registerRoot(uiRoot: UIRootFactory): void;
52
- registerRenderHooks<T, Y>(plugins: RenderPlugins<T, Y>): void;
51
+ registerRenderHooks<T, Y>(plugin: RenderPlugin<T, Y>): void;
53
52
  private getLifecyclePlugins;
54
53
  private getRoot;
55
54
  static slots: ((registerFn: () => string) => SlotRegistry<React.ReactNode>)[];
@@ -51,6 +51,16 @@ function _reactRouter() {
51
51
  return data;
52
52
  }
53
53
 
54
+ function _reactRendering() {
55
+ const data = require("@teambit/react.rendering.ssr");
56
+
57
+ _reactRendering = function () {
58
+ return data;
59
+ };
60
+
61
+ return data;
62
+ }
63
+
54
64
  function _react() {
55
65
  const data = _interopRequireDefault(require("react"));
56
66
 
@@ -81,15 +91,9 @@ function _clientContext() {
81
91
  return data;
82
92
  }
83
93
 
84
- function _reactSsr() {
85
- const data = require("./react-ssr/react-ssr");
94
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
86
95
 
87
- _reactSsr = function () {
88
- return data;
89
- };
90
-
91
- return data;
92
- }
96
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2().default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
93
97
 
94
98
  /**
95
99
  * extension
@@ -126,8 +130,8 @@ class UiUI {
126
130
  const routes = this.router.renderRoutes(uiRoot.routes);
127
131
  const hudItems = this.hudSlot.values();
128
132
  const lifecyclePlugins = this.getLifecyclePlugins();
129
- const reactSsr = new (_reactSsr().ReactSSR)(lifecyclePlugins);
130
- await reactSsr.renderBrowser( /*#__PURE__*/_react().default.createElement(_clientContext().ClientContext, null, hudItems, routes));
133
+ const reactSsr = new (_reactRendering().BrowserRenderer)(lifecyclePlugins);
134
+ await reactSsr.render( /*#__PURE__*/_react().default.createElement(_clientContext().ClientContext, null, hudItems, routes));
131
135
  }
132
136
  /** render dehydrated server-side */
133
137
 
@@ -139,8 +143,8 @@ class UiUI {
139
143
  const routes = this.router.renderRoutes(uiRoot.routes);
140
144
  const hudItems = this.hudSlot.values();
141
145
  const lifecyclePlugins = this.getLifecyclePlugins();
142
- const reactSsr = new (_reactSsr().ReactSSR)(lifecyclePlugins);
143
- const fullHtml = await reactSsr.renderServer( /*#__PURE__*/_react().default.createElement(_clientContext().ClientContext, null, hudItems, routes), ssrContent);
146
+ const reactSsr = new (_reactRendering().ServerRenderer)(lifecyclePlugins);
147
+ const fullHtml = await reactSsr.render( /*#__PURE__*/_react().default.createElement(_clientContext().ClientContext, null, hudItems, routes), ssrContent);
144
148
  return fullHtml;
145
149
  }
146
150
  /** adds elements to the Heads Up Display */
@@ -160,14 +164,20 @@ class UiUI {
160
164
  return this.uiRootSlot.register(uiRoot);
161
165
  }
162
166
 
163
- registerRenderHooks(plugins) {
164
- return this.renderPluginsSlot.register(plugins);
167
+ registerRenderHooks(plugin) {
168
+ return this.renderPluginsSlot.register(plugin);
165
169
  }
166
170
 
167
171
  getLifecyclePlugins() {
168
- const lifecyclePlugins = this.renderPluginsSlot.toArray(); // react-router should register its plugin, when we can reverse it's dependency to depend on Ui
172
+ const lifecyclePlugins = this.renderPluginsSlot.toArray().map(([key, plugin]) => {
173
+ if (plugin.key) return plugin; // for backward compatibility
174
+
175
+ return _objectSpread(_objectSpread({}, plugin), {}, {
176
+ key
177
+ });
178
+ }); // react-router should register its plugin, when we can reverse it's dependency to depend on Ui
169
179
 
170
- lifecyclePlugins.unshift([_reactRouter().ReactRouterAspect.id, this.router.renderPlugin]);
180
+ lifecyclePlugins.unshift(this.router.renderPlugin);
171
181
  return lifecyclePlugins;
172
182
  }
173
183
 
@@ -177,7 +187,7 @@ class UiUI {
177
187
 
178
188
  static async provider([GraphqlUi, router], config, [uiRootSlot, hudSlot, renderLifecycleSlot]) {
179
189
  const uiUi = new UiUI(router, uiRootSlot, hudSlot, renderLifecycleSlot);
180
- uiUi.registerRenderHooks(GraphqlUi.renderPlugins);
190
+ if (GraphqlUi) uiUi.registerRenderHooks(GraphqlUi.renderPlugins);
181
191
  return uiUi;
182
192
  }
183
193
 
@@ -1 +1 @@
1
- {"version":3,"names":["UiUI","constructor","router","uiRootSlot","hudSlot","renderPluginsSlot","element","register","render","rootExtension","rootFactory","getRoot","Error","uiRoot","routes","renderRoutes","hudItems","values","lifecyclePlugins","getLifecyclePlugins","reactSsr","ReactSSR","renderBrowser","renderSsr","ssrContent","fullHtml","renderServer","registerContext","context","reactContext","registerRoot","registerRenderHooks","plugins","toArray","unshift","ReactRouterAspect","id","renderPlugin","get","provider","GraphqlUi","config","renderLifecycleSlot","uiUi","renderPlugins","Slot","withType","GraphqlAspect","UIRuntime","UIAspect","addRuntime"],"sources":["ui.ui.runtime.tsx"],"sourcesContent":["import type { GraphqlUI } from '@teambit/graphql';\nimport { GraphqlAspect } from '@teambit/graphql';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport type { ReactRouterUI } from '@teambit/react-router';\nimport { ReactRouterAspect } from '@teambit/react-router';\n\nimport React, { ReactNode, ComponentType } from 'react';\n\nimport { UIRootFactory } from './ui-root.ui';\nimport { UIAspect, UIRuntime } from './ui.aspect';\nimport { ClientContext } from './ui/client-context';\nimport type { SsrContent } from './react-ssr/ssr-content';\nimport { ContextProps, RenderPlugins } from './react-ssr/render-lifecycle';\nimport { ReactSSR } from './react-ssr/react-ssr';\n\ntype HudSlot = SlotRegistry<ReactNode>;\ntype RenderPluginsSlot = SlotRegistry<RenderPlugins>;\ntype UIRootRegistry = SlotRegistry<UIRootFactory>;\n\n/**\n * extension\n */\nexport class UiUI {\n constructor(\n /**\n * react-router extension.\n */\n private router: ReactRouterUI,\n /**\n * ui root registry.\n */\n private uiRootSlot: UIRootRegistry,\n /** slot for overlay ui elements */\n private hudSlot: HudSlot,\n /** hooks into the ssr render process */\n private renderPluginsSlot: RenderPluginsSlot\n ) {}\n\n /** render and rehydrate client-side */\n async render(rootExtension: string): Promise<void> {\n const rootFactory = this.getRoot(rootExtension);\n if (!rootFactory) throw new Error(`root: ${rootExtension} was not found`);\n const uiRoot = rootFactory();\n const routes = this.router.renderRoutes(uiRoot.routes);\n const hudItems = this.hudSlot.values();\n const lifecyclePlugins = this.getLifecyclePlugins();\n\n const reactSsr = new ReactSSR(lifecyclePlugins);\n await reactSsr.renderBrowser(\n <ClientContext>\n {hudItems}\n {routes}\n </ClientContext>\n );\n }\n\n /** render dehydrated server-side */\n async renderSsr(rootExtension: string, ssrContent: SsrContent): Promise<string> {\n const rootFactory = this.getRoot(rootExtension);\n if (!rootFactory) throw new Error(`root: ${rootExtension} was not found`);\n\n const uiRoot = rootFactory();\n const routes = this.router.renderRoutes(uiRoot.routes);\n const hudItems = this.hudSlot.values();\n const lifecyclePlugins = this.getLifecyclePlugins();\n\n const reactSsr = new ReactSSR(lifecyclePlugins);\n const fullHtml = await reactSsr.renderServer(\n <ClientContext>\n {hudItems}\n {routes}\n </ClientContext>,\n ssrContent\n );\n\n return fullHtml;\n }\n\n /** adds elements to the Heads Up Display */\n registerHudItem = (element: ReactNode) => {\n this.hudSlot.register(element);\n };\n\n /**\n * adds global context at the ui root\n * @deprecated replace with `.registerRenderHooks({ reactContext })`.\n */\n registerContext<T>(context: ComponentType<ContextProps<T>>) {\n this.renderPluginsSlot.register({\n reactContext: context,\n });\n }\n\n registerRoot(uiRoot: UIRootFactory) {\n return this.uiRootSlot.register(uiRoot);\n }\n\n registerRenderHooks<T, Y>(plugins: RenderPlugins<T, Y>) {\n return this.renderPluginsSlot.register(plugins);\n }\n\n private getLifecyclePlugins() {\n const lifecyclePlugins = this.renderPluginsSlot.toArray();\n // react-router should register its plugin, when we can reverse it's dependency to depend on Ui\n lifecyclePlugins.unshift([ReactRouterAspect.id, this.router.renderPlugin]);\n\n return lifecyclePlugins;\n }\n\n private getRoot(rootExtension: string) {\n return this.uiRootSlot.get(rootExtension);\n }\n\n static slots = [Slot.withType<UIRootFactory>(), Slot.withType<ReactNode>(), Slot.withType<RenderPlugins>()];\n\n static dependencies = [GraphqlAspect, ReactRouterAspect];\n\n static runtime = UIRuntime;\n\n static async provider(\n [GraphqlUi, router]: [GraphqlUI, ReactRouterUI],\n config,\n [uiRootSlot, hudSlot, renderLifecycleSlot]: [UIRootRegistry, HudSlot, RenderPluginsSlot]\n ) {\n const uiUi = new UiUI(router, uiRootSlot, hudSlot, renderLifecycleSlot);\n\n uiUi.registerRenderHooks(GraphqlUi.renderPlugins);\n\n return uiUi;\n }\n}\n\nUIAspect.addRuntime(UiUI);\n"],"mappings":"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"}
1
+ {"version":3,"names":["UiUI","constructor","router","uiRootSlot","hudSlot","renderPluginsSlot","element","register","render","rootExtension","rootFactory","getRoot","Error","uiRoot","routes","renderRoutes","hudItems","values","lifecyclePlugins","getLifecyclePlugins","reactSsr","BrowserRenderer","renderSsr","ssrContent","ServerRenderer","fullHtml","registerContext","context","reactContext","registerRoot","registerRenderHooks","plugin","toArray","map","key","unshift","renderPlugin","get","provider","GraphqlUi","config","renderLifecycleSlot","uiUi","renderPlugins","Slot","withType","GraphqlAspect","ReactRouterAspect","UIRuntime","UIAspect","addRuntime"],"sources":["ui.ui.runtime.tsx"],"sourcesContent":["import type { GraphqlUI } from '@teambit/graphql';\nimport { GraphqlAspect } from '@teambit/graphql';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport type { ReactRouterUI } from '@teambit/react-router';\nimport { ReactRouterAspect } from '@teambit/react-router';\nimport { ServerRenderer, BrowserRenderer } from '@teambit/react.rendering.ssr';\nimport type { SsrSession, RenderPlugin, ContextProps } from '@teambit/react.rendering.ssr';\n\nimport React, { ReactNode, ComponentType } from 'react';\n\nimport { UIRootFactory } from './ui-root.ui';\nimport { UIAspect, UIRuntime } from './ui.aspect';\nimport { ClientContext } from './ui/client-context';\n\ntype HudSlot = SlotRegistry<ReactNode>;\ntype RenderPluginsSlot = SlotRegistry<RenderPlugin<any, any>>;\ntype UIRootRegistry = SlotRegistry<UIRootFactory>;\n\n/**\n * extension\n */\nexport class UiUI {\n constructor(\n /**\n * react-router extension.\n */\n private router: ReactRouterUI,\n /**\n * ui root registry.\n */\n private uiRootSlot: UIRootRegistry,\n /** slot for overlay ui elements */\n private hudSlot: HudSlot,\n /** hooks into the ssr render process */\n private renderPluginsSlot: RenderPluginsSlot\n ) {}\n\n /** render and rehydrate client-side */\n async render(rootExtension: string): Promise<void> {\n const rootFactory = this.getRoot(rootExtension);\n if (!rootFactory) throw new Error(`root: ${rootExtension} was not found`);\n const uiRoot = rootFactory();\n const routes = this.router.renderRoutes(uiRoot.routes);\n const hudItems = this.hudSlot.values();\n const lifecyclePlugins = this.getLifecyclePlugins();\n\n const reactSsr = new BrowserRenderer(lifecyclePlugins);\n await reactSsr.render(\n <ClientContext>\n {hudItems}\n {routes}\n </ClientContext>\n );\n }\n\n /** render dehydrated server-side */\n async renderSsr(rootExtension: string, ssrContent: SsrSession): Promise<string> {\n const rootFactory = this.getRoot(rootExtension);\n if (!rootFactory) throw new Error(`root: ${rootExtension} was not found`);\n\n const uiRoot = rootFactory();\n const routes = this.router.renderRoutes(uiRoot.routes);\n const hudItems = this.hudSlot.values();\n const lifecyclePlugins = this.getLifecyclePlugins();\n\n const reactSsr = new ServerRenderer(lifecyclePlugins);\n const fullHtml = await reactSsr.render(\n <ClientContext>\n {hudItems}\n {routes}\n </ClientContext>,\n ssrContent\n );\n\n return fullHtml;\n }\n\n /** adds elements to the Heads Up Display */\n registerHudItem = (element: ReactNode) => {\n this.hudSlot.register(element);\n };\n\n /**\n * adds global context at the ui root\n * @deprecated replace with `.registerRenderHooks({ reactContext })`.\n */\n registerContext<T>(context: ComponentType<ContextProps<T>>) {\n this.renderPluginsSlot.register({ reactContext: context });\n }\n\n registerRoot(uiRoot: UIRootFactory) {\n return this.uiRootSlot.register(uiRoot);\n }\n\n registerRenderHooks<T, Y>(plugin: RenderPlugin<T, Y>) {\n return this.renderPluginsSlot.register(plugin);\n }\n\n private getLifecyclePlugins() {\n const lifecyclePlugins = this.renderPluginsSlot.toArray().map(([key, plugin]) => {\n if (plugin.key) return plugin;\n\n // for backward compatibility\n return { ...plugin, key };\n });\n\n // react-router should register its plugin, when we can reverse it's dependency to depend on Ui\n lifecyclePlugins.unshift(this.router.renderPlugin);\n\n return lifecyclePlugins;\n }\n\n private getRoot(rootExtension: string) {\n return this.uiRootSlot.get(rootExtension);\n }\n\n static slots = [Slot.withType<UIRootFactory>(), Slot.withType<ReactNode>(), Slot.withType<RenderPlugin>()];\n\n static dependencies = [GraphqlAspect, ReactRouterAspect];\n\n static runtime = UIRuntime;\n\n static async provider(\n [GraphqlUi, router]: [GraphqlUI, ReactRouterUI],\n config,\n [uiRootSlot, hudSlot, renderLifecycleSlot]: [UIRootRegistry, HudSlot, RenderPluginsSlot]\n ) {\n const uiUi = new UiUI(router, uiRootSlot, hudSlot, renderLifecycleSlot);\n\n if (GraphqlUi) uiUi.registerRenderHooks(GraphqlUi.renderPlugins);\n\n return uiUi;\n }\n}\n\nUIAspect.addRuntime(UiUI);\n"],"mappings":"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"}