@teambit/react 0.0.802 → 0.0.805

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 (45) hide show
  1. package/apps/web/react-app-options.ts +4 -4
  2. package/apps/web/react.app-type.ts +5 -2
  3. package/apps/web/react.application.ts +120 -25
  4. package/apps/web/ssr/ssr-express.ts +81 -0
  5. package/apps/web/webpack/mutators.ts +21 -0
  6. package/apps/web/webpack/webpack.app.ssr.config.ts +37 -0
  7. package/artifacts/__bit_junit.xml +2 -2
  8. package/artifacts/env-template/public/{22.20acd98351f2158a41da.js → 22.0f657f2dfdd8e90d81ba.js} +0 -0
  9. package/artifacts/env-template/public/{697.d653451cb84e67a5a1e6.js → 750.2bbe0002ca73603de518.js} +19 -11
  10. package/artifacts/env-template/public/assets-manifest.json +16 -16
  11. package/artifacts/env-template/public/{compositions.4f32d45facc10b788b84.js → compositions.853254f720441442d37a.js} +1 -1
  12. package/artifacts/env-template/public/compositions.html +1 -1
  13. package/artifacts/env-template/public/{overview.3b7b230063483eef660c.js → overview.0ca27c1c75ca340b6722.js} +1 -1
  14. package/artifacts/env-template/public/overview.html +1 -1
  15. package/artifacts/env-template/public/{peers.185e5d6ee27c15e8a771.js → peers.283551d5f03dbfad5477.js} +1 -1
  16. package/artifacts/env-template/public/{preview-root.291f6f0c253a631863cb.js → preview-root.b859b02336387c766d60.js} +1 -1
  17. package/artifacts/env-template/public/static/css/{697.90cfc900.css → 750.f6840c3e.css} +1 -1
  18. package/artifacts/env-template/public/static/css/{overview.df4a22d4.css → overview.c86de60f.css} +1 -1
  19. package/artifacts/preview/teambit_react_react-preview.js +2 -2
  20. package/{compositions-1659151732866.js → compositions-1659456045857.js} +0 -0
  21. package/dist/apps/web/react-app-options.d.ts +4 -4
  22. package/dist/apps/web/react-app-options.js.map +1 -1
  23. package/dist/apps/web/react.app-type.d.ts +3 -1
  24. package/dist/apps/web/react.app-type.js +3 -2
  25. package/dist/apps/web/react.app-type.js.map +1 -1
  26. package/dist/apps/web/react.application.d.ts +12 -5
  27. package/dist/apps/web/react.application.js +135 -15
  28. package/dist/apps/web/react.application.js.map +1 -1
  29. package/dist/apps/web/ssr/ssr-express.d.ts +15 -0
  30. package/dist/apps/web/ssr/ssr-express.js +151 -0
  31. package/dist/apps/web/ssr/ssr-express.js.map +1 -0
  32. package/dist/apps/web/webpack/mutators.d.ts +3 -0
  33. package/dist/apps/web/webpack/mutators.js +28 -0
  34. package/dist/apps/web/webpack/mutators.js.map +1 -0
  35. package/dist/apps/web/webpack/webpack.app.ssr.config.d.ts +15 -0
  36. package/dist/apps/web/webpack/webpack.app.ssr.config.js +62 -0
  37. package/dist/apps/web/webpack/webpack.app.ssr.config.js.map +1 -0
  38. package/dist/react.main.runtime.d.ts +3 -2
  39. package/dist/react.main.runtime.js +5 -4
  40. package/dist/react.main.runtime.js.map +1 -1
  41. package/{overview-1659151732866.js → overview-1659456045857.js} +0 -0
  42. package/package-tar/teambit-react-0.0.805.tgz +0 -0
  43. package/package.json +40 -32
  44. package/{preview-1659151732866.js → preview-1659456045857.js} +2 -2
  45. package/package-tar/teambit-react-0.0.802.tgz +0 -0
@@ -1 +1 @@
1
- .docs-app_compositionSection__2rAWY{margin-top:40px}.docs-app_compositionCard__2BFqj{max-height:500px;max-width:100%;overflow:hidden}.docs-app_docsMainBlock__1Vyyg{margin:0 auto 150px;max-width:1440px;padding:50px 40px 10px}.docs-app_docsMainBlock__1Vyyg .docs-app_heading__25cfc{margin-bottom:unset}.docs-app_mdx__WbON7{font-size:16px}.heading-sizes_xxs__sqY6F{font-size:16px;font-size:var(--bit-h-xxs,16px)}.heading-sizes_xs__2vIO-{font-size:18px;font-size:var(--bit-h-xs,18px)}.heading-sizes_sm__SWCg7{font-size:24px;font-size:var(--bit-h-sm,24px)}.heading-sizes_md__1VfRy{font-size:26px;font-size:var(--bit-h-md,26px)}.heading-sizes_lg__12r2v{font-size:36px;font-size:var(--bit-h-lg,36px)}.heading-sizes_xl__18vfm{font-size:40px;font-size:var(--bit-h-xl,40px)}.heading-sizes_xxl__1XBq0{font-size:50px;font-size:var(--bit-h-xxl,50px)}.heading_h1__18YHt,.heading_h2__1ja7_,.heading_h3__3SLRc,.heading_h4__uSuLS,.heading_h5__30dq2,.heading_h6__2CGfq{font-weight:700;margin:0}.heading_h1__18YHt{margin-bottom:20px}.anchor_anchor__3Kymc{align-items:center;display:flex;text-decoration:none}.anchor_anchorIcon__osznX{color:var(--bit-text-color-light);font-size:18px}.linked-heading_linkedHeading__1exDt{align-items:center;display:flex;margin-bottom:16px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.linked-heading_linkedHeading__1exDt:hover .linked-heading_anchor__3xkqo{opacity:1;visibility:unset}.linked-heading_heading__28Zmh{margin-bottom:0;margin-right:8px}.linked-heading_anchor__3xkqo{opacity:0;transform:translateY(4px);transition:visibility .3s,opacity .3s ease-in-out;visibility:hidden}.error_error__Aedkj{color:#e62e5c;color:var(--bit-error-color,#e62e5c)}.react-playground_error__1zi13{background-color:var(--bit-bg-color);border:1px solid var(--bit-error-color);border-bottom-right-radius:6px;border-left:none;border-top-right-radius:6px;bottom:0;box-sizing:border-box;color:var(--bit-error-color);font-family:Roboto mono;font-size:11px;left:0;overflow:auto;padding:8px;position:absolute;right:0;top:0;transition:all 1s ease-in-out;width:100%}.react-playground_error__1zi13.react-playground_column__1Kovw{border:1px solid var(--bit-error-color);border-bottom:none;border-bottom-right-radius:0;border-top-left-radius:6px}.react-playground_editorWrapper__1wY8s{max-height:450px;overflow:auto!important}.react-playground_codePane__19Xda{background-color:#282c34;max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content;max-width:90%;min-width:150px}.react-playground_codePane__19Xda.react-playground_column__1Kovw,.react-playground_codePane__19Xda.react-playground_column__1Kovw .react-playground_editorWrapper__1wY8s{height:220px;max-width:100%}.react-playground_editor__1LFjB{border-bottom-left-radius:6px;border-top-left-radius:6px;box-sizing:border-box;font-family:Roboto mono!important;font-size:11px;min-height:100px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.react-playground_editor__1LFjB>textarea{outline:none;white-space:pre!important;width:100%!important}.react-playground_editor__1LFjB>pre{white-space:pre!important;width:-webkit-fit-content!important;width:-moz-fit-content!important;width:fit-content!important}.react-playground_splitter__R480r{background-color:#282c34}.react-playground_splitter__R480r>div{border:none;border-radius:0}.react-playground_previewPane__1Rkn-{border:1px solid var(--bit-border-color-lightest);border-bottom-right-radius:6px;border-left:none;border-top-right-radius:6px;min-height:100px;overflow:auto;position:relative}.react-playground_previewPane__1Rkn-.react-playground_column__1Kovw{border:1px solid var(--bit-border-color-lightest);border-bottom:none;border-bottom-right-radius:0;border-top-left-radius:6px;min-height:220px}.react-playground_previewPane__1Rkn-.react-playground_column__1Kovw .react-playground_editorWrapper__1wY8s{max-height:220px}.react-playground_previewBox__1quIl{bottom:0;left:0;position:absolute;right:0;top:0}.react-playground_preview__1LvFd{border-left:none;box-sizing:border-box;height:100%;width:100%}.react-playground_playground__1mVdr{border-radius:6px;display:flex;max-height:450px;overflow:hidden;width:100%}.react-playground_playground__1mVdr>div{width:100%}.examples-overview_exampleSection__1OdhX>:not(:last-child){margin-bottom:8px}
1
+ .docs-app_compositionSection__2rAWY{margin-top:40px}.docs-app_compositionCard__2BFqj{max-height:500px;max-width:100%;overflow:hidden}.docs-app_docsMainBlock__1Vyyg{margin:0 auto 150px;max-width:1440px;padding:20px 40px 10px}.docs-app_docsMainBlock__1Vyyg .docs-app_heading__25cfc{margin-bottom:unset}.docs-app_mdx__WbON7{font-size:16px}.heading-sizes_xxs__sqY6F{font-size:16px;font-size:var(--bit-h-xxs,16px)}.heading-sizes_xs__2vIO-{font-size:18px;font-size:var(--bit-h-xs,18px)}.heading-sizes_sm__SWCg7{font-size:24px;font-size:var(--bit-h-sm,24px)}.heading-sizes_md__1VfRy{font-size:26px;font-size:var(--bit-h-md,26px)}.heading-sizes_lg__12r2v{font-size:36px;font-size:var(--bit-h-lg,36px)}.heading-sizes_xl__18vfm{font-size:40px;font-size:var(--bit-h-xl,40px)}.heading-sizes_xxl__1XBq0{font-size:50px;font-size:var(--bit-h-xxl,50px)}.heading_h1__18YHt,.heading_h2__1ja7_,.heading_h3__3SLRc,.heading_h4__uSuLS,.heading_h5__30dq2,.heading_h6__2CGfq{font-weight:700;margin:0}.heading_h1__18YHt{margin-bottom:20px}.anchor_anchor__3Kymc{align-items:center;display:flex;text-decoration:none}.anchor_anchorIcon__osznX{color:var(--bit-text-color-light);font-size:18px}.linked-heading_linkedHeading__1exDt{align-items:center;display:flex;margin-bottom:16px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.linked-heading_linkedHeading__1exDt:hover .linked-heading_anchor__3xkqo{opacity:1;visibility:unset}.linked-heading_heading__28Zmh{margin-bottom:0;margin-right:8px}.linked-heading_anchor__3xkqo{opacity:0;transform:translateY(4px);transition:visibility .3s,opacity .3s ease-in-out;visibility:hidden}.error_error__Aedkj{color:#e62e5c;color:var(--bit-error-color,#e62e5c)}.react-playground_error__1zi13{background-color:var(--bit-bg-color);border:1px solid var(--bit-error-color);border-bottom-right-radius:6px;border-left:none;border-top-right-radius:6px;bottom:0;box-sizing:border-box;color:var(--bit-error-color);font-family:Roboto mono;font-size:11px;left:0;overflow:auto;padding:8px;position:absolute;right:0;top:0;transition:all 1s ease-in-out;width:100%}.react-playground_error__1zi13.react-playground_column__1Kovw{border:1px solid var(--bit-error-color);border-bottom:none;border-bottom-right-radius:0;border-top-left-radius:6px}.react-playground_editorWrapper__1wY8s{max-height:450px;overflow:auto!important}.react-playground_codePane__19Xda{background-color:#282c34;max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content;max-width:90%;min-width:150px}.react-playground_codePane__19Xda.react-playground_column__1Kovw,.react-playground_codePane__19Xda.react-playground_column__1Kovw .react-playground_editorWrapper__1wY8s{height:220px;max-width:100%}.react-playground_editor__1LFjB{border-bottom-left-radius:6px;border-top-left-radius:6px;box-sizing:border-box;font-family:Roboto mono!important;font-size:11px;min-height:100px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.react-playground_editor__1LFjB>textarea{outline:none;white-space:pre!important;width:100%!important}.react-playground_editor__1LFjB>pre{white-space:pre!important;width:-webkit-fit-content!important;width:-moz-fit-content!important;width:fit-content!important}.react-playground_splitter__R480r{background-color:#282c34}.react-playground_splitter__R480r>div{border:none;border-radius:0}.react-playground_previewPane__1Rkn-{border:1px solid var(--bit-border-color-lightest);border-bottom-right-radius:6px;border-left:none;border-top-right-radius:6px;min-height:100px;overflow:auto;position:relative}.react-playground_previewPane__1Rkn-.react-playground_column__1Kovw{border:1px solid var(--bit-border-color-lightest);border-bottom:none;border-bottom-right-radius:0;border-top-left-radius:6px;min-height:220px}.react-playground_previewPane__1Rkn-.react-playground_column__1Kovw .react-playground_editorWrapper__1wY8s{max-height:220px}.react-playground_previewBox__1quIl{bottom:0;left:0;position:absolute;right:0;top:0}.react-playground_preview__1LvFd{border-left:none;box-sizing:border-box;height:100%;width:100%}.react-playground_playground__1mVdr{border-radius:6px;display:flex;max-height:450px;overflow:hidden;width:100%}.react-playground_playground__1mVdr>div{width:100%}.examples-overview_exampleSection__1OdhX>:not(:last-child){margin-bottom:8px}
@@ -1,4 +1,4 @@
1
- (function(root,factory){typeof exports=="object"&&typeof module=="object"?module.exports=factory():typeof define=="function"&&define.amd?define([],factory):typeof exports=="object"?exports["teambit.react/react-preview"]=factory():root["teambit.react/react-preview"]=factory()})(self,function(){return(()=>{var __webpack_modules__={88244:module2=>{function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}module2.exports=_interopRequireDefault},55906:(__unused_webpack_module,exports2,__webpack_require__2)=>{"use strict";var __webpack_unused_export__,__bit_component={id:"teambit.react/content/react-overview@1.95.0",homepage:"https://bit.dev/teambit/react/content/react-overview",exported:!0};__webpack_unused_export__={value:!0},__webpack_unused_export__={enumerable:!0,get:function(){return _reactOverview.default}},Object.defineProperty(exports2,"ZP",{enumerable:!0,get:function(){return _reactOverview.default}});var _reactOverview=_interopRequireDefault(__webpack_require__2(85009));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}_interopRequireDefault.__bit_component=__bit_component},85009:(__unused_webpack_module,exports2,__webpack_require__2)=>{"use strict";var __bit_component={id:"teambit.react/content/react-overview@1.95.0",homepage:"https://bit.dev/teambit/react/content/react-overview",exported:!0};Object.defineProperty(exports2,"__esModule",{value:!0}),exports2.default=MDXContent;var _react=_interopRequireDefault(__webpack_require__2(63804)),_react2=__webpack_require__2(85057),_mdxUi=__webpack_require__2(58459),_excluded=["components"];function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}_interopRequireDefault.__bit_component=__bit_component;function _extends(){return _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target},_extends.apply(this,arguments)}_extends.__bit_component=__bit_component;function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded),key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++)key=sourceSymbolKeys[i],!(excluded.indexOf(key)>=0)&&(!Object.prototype.propertyIsEnumerable.call(source,key)||(target[key]=source[key]))}return target}_objectWithoutProperties.__bit_component=__bit_component;function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={},sourceKeys=Object.keys(source),key,i;for(i=0;i<sourceKeys.length;i++)key=sourceKeys[i],!(excluded.indexOf(key)>=0)&&(target[key]=source[key]);return target}_objectWithoutPropertiesLoose.__bit_component=__bit_component;var layoutProps={},MDXLayout="wrapper";function MDXContent(_ref){var components=_ref.components,props=_objectWithoutProperties(_ref,_excluded);return(0,_react2.mdx)(MDXLayout,_extends({},layoutProps,props,{components,mdxType:"MDXLayout"}),(0,_react2.mdx)(_mdxUi.MDXScopeProvider,{components:{},mdxType:"MDXScopeProvider"},(0,_react2.mdx)("h1",null,"React Overview"),(0,_react2.mdx)("p",null,`React is teambit's Component Development Environment (Env) for React.
1
+ (function(root,factory){typeof exports=="object"&&typeof module=="object"?module.exports=factory():typeof define=="function"&&define.amd?define([],factory):typeof exports=="object"?exports["teambit.react/react-preview"]=factory():root["teambit.react/react-preview"]=factory()})(self,function(){return(()=>{var __webpack_modules__={244:module2=>{function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}module2.exports=_interopRequireDefault},906:(__unused_webpack_module,exports2,__webpack_require__2)=>{"use strict";var __webpack_unused_export__,__bit_component={id:"teambit.react/content/react-overview@1.95.0",homepage:"https://bit.dev/teambit/react/content/react-overview",exported:!0};__webpack_unused_export__={value:!0},__webpack_unused_export__={enumerable:!0,get:function(){return _reactOverview.default}},Object.defineProperty(exports2,"ZP",{enumerable:!0,get:function(){return _reactOverview.default}});var _reactOverview=_interopRequireDefault(__webpack_require__2(664));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}_interopRequireDefault.__bit_component=__bit_component},664:(__unused_webpack_module,exports2,__webpack_require__2)=>{"use strict";var __bit_component={id:"teambit.react/content/react-overview@1.95.0",homepage:"https://bit.dev/teambit/react/content/react-overview",exported:!0};Object.defineProperty(exports2,"__esModule",{value:!0}),exports2.default=MDXContent;var _react=_interopRequireDefault(__webpack_require__2(804)),_react2=__webpack_require__2(57),_mdxUi=__webpack_require__2(459),_excluded=["components"];function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}_interopRequireDefault.__bit_component=__bit_component;function _extends(){return _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target},_extends.apply(this,arguments)}_extends.__bit_component=__bit_component;function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded),key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++)key=sourceSymbolKeys[i],!(excluded.indexOf(key)>=0)&&(!Object.prototype.propertyIsEnumerable.call(source,key)||(target[key]=source[key]))}return target}_objectWithoutProperties.__bit_component=__bit_component;function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={},sourceKeys=Object.keys(source),key,i;for(i=0;i<sourceKeys.length;i++)key=sourceKeys[i],!(excluded.indexOf(key)>=0)&&(target[key]=source[key]);return target}_objectWithoutPropertiesLoose.__bit_component=__bit_component;var layoutProps={},MDXLayout="wrapper";function MDXContent(_ref){var components=_ref.components,props=_objectWithoutProperties(_ref,_excluded);return(0,_react2.mdx)(MDXLayout,_extends({},layoutProps,props,{components,mdxType:"MDXLayout"}),(0,_react2.mdx)(_mdxUi.MDXScopeProvider,{components:{},mdxType:"MDXScopeProvider"},(0,_react2.mdx)("h1",null,"React Overview"),(0,_react2.mdx)("p",null,`React is teambit's Component Development Environment (Env) for React.
2
2
  It enables you to quickly set up a dev environment that follows best practices for React component development.`),(0,_react2.mdx)("p",null,"React can also be used as a good starting point for your own customized Env as it provides a comprehensive API that makes it easy to extend."),(0,_react2.mdx)("h2",null,"Using the React env"),(0,_react2.mdx)("p",null,"To use React Env, apply it on the relevant ",(0,_react2.mdx)("a",{parentName:"p",href:"/docs/workspace/variants"},"variants")," (component selections) in your ",(0,_react2.mdx)("a",{parentName:"p",href:"/docs/workspace/workspace-configuration"},"Workspace config"),":"),(0,_react2.mdx)("pre",null,(0,_react2.mdx)("code",{parentName:"pre",className:"language-json",metastring:'title="workspace.jsonc"',title:'"workspace.jsonc"'},`{
3
3
  "teambit.workspace/variants": {
4
4
  "{ui/**}": {
@@ -8,4 +8,4 @@ It enables you to quickly set up a dev environment that follows best practices f
8
8
  }
9
9
  `)),(0,_react2.mdx)("h2",null,"Creating Components"),(0,_react2.mdx)("p",null,"React env provides a set of component templates that can be used to speed-up and standardize your component development:"),(0,_react2.mdx)("p",null,"To list all available templates:"),(0,_react2.mdx)("pre",null,(0,_react2.mdx)("code",{parentName:"pre",className:"language-bash"},`bit templates
10
10
  `)),(0,_react2.mdx)("ul",null,(0,_react2.mdx)("li",{parentName:"ul"},(0,_react2.mdx)("inlineCode",{parentName:"li"},"react")," a basic React UI component."),(0,_react2.mdx)("li",{parentName:"ul"},(0,_react2.mdx)("inlineCode",{parentName:"li"},"react-context")," a react context component."),(0,_react2.mdx)("li",{parentName:"ul"},(0,_react2.mdx)("inlineCode",{parentName:"li"},"react-hook")," a react hook component."),(0,_react2.mdx)("li",{parentName:"ul"},(0,_react2.mdx)("inlineCode",{parentName:"li"},"mdx-component")," an MDX component."),(0,_react2.mdx)("li",{parentName:"ul"},(0,_react2.mdx)("inlineCode",{parentName:"li"},"react-component-js")," a basic React component in JS."),(0,_react2.mdx)("li",{parentName:"ul"},(0,_react2.mdx)("inlineCode",{parentName:"li"},"react-env")," boilerplate for a customized environment configuration.")),(0,_react2.mdx)("p",null,"Use any of these templates with the ",(0,_react2.mdx)("inlineCode",{parentName:"p"},"bit create")," command:"),(0,_react2.mdx)("pre",null,(0,_react2.mdx)("code",{parentName:"pre",className:"language-bash"},`bit create react ui/my-welcome
11
- `)),(0,_react2.mdx)("h2",null,"Development services and configurations"),(0,_react2.mdx)("p",null,"The table below lists ",(0,_react2.mdx)("a",{parentName:"p",href:"/dev-services/dev-services-overview"},"dev services")," that are provided by the React env. Each service handles a specific component development operation. Each is implemented by the React env, using a specific set of configurations."),(0,_react2.mdx)("p",null,"To customize and extend the React env, ",(0,_react2.mdx)("a",{parentName:"p",href:"/envs/pre-configured-envs/react/extending-react#using-your-own-react-env-extension"},"create you own React env extension"),". You can replace the Aspects used by the env, or override their configurations (use the links provided in the 'customization' column)."),(0,_react2.mdx)("table",null,(0,_react2.mdx)("thead",{parentName:"table"},(0,_react2.mdx)("tr",{parentName:"thead"},(0,_react2.mdx)("th",{parentName:"tr",align:null},"Service"),(0,_react2.mdx)("th",{parentName:"tr",align:null},"Aspect"),(0,_react2.mdx)("th",{parentName:"tr",align:null},"Default config"),(0,_react2.mdx)("th",{parentName:"tr",align:null},"Customization"))),(0,_react2.mdx)("tbody",{parentName:"table"},(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/docs/dev-services/compiler/compiler-overview"},"Compiler")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/typescript/typescript"},"TypeScript")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/typescript/tsconfig.json"},"tsconfig.json")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/frameworks/react/config-react-tools#typescript"},"TS compilation config")," ",(0,_react2.mdx)("br",null)," \u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/docs/dev-services/compiler/configure-env-with-compiler"},"Replace compiler"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/tester/overview"},"Tester")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/defender/jest"},"Jest")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/jest/jest.config.js"},"jest.config.js")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/frameworks/react/config-react-tools#jest"},"Jest config")," ",(0,_react2.mdx)("br",null)," \u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/dev-services/tester/configure-env-with-tester"},"Replace Tester"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/linter/overview"},"Linting")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/defender/eslint"},"ESLint")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/eslint/eslintrc.ts"},"eslintrc.ts")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/frameworks/react/config-react-tools#eslint"},"ESLint Config")," ",(0,_react2.mdx)("br",null)," \u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/dev-services/linter/configure-env-with-linter"},"Replace Linter"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/formatter/overview"},"Formatter")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/defender/prettier"},"Prettier")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/prettier/prettier.config.js"},"prettier.config.ts")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/frameworks/react/config-react-tools#prettier"},"Prettier config")," ",(0,_react2.mdx)("br",null)," \u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/dev-services/formatter/configure-env-with-formatter"},"Replace Formatter"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},"DevServer"),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/webpack/webpack"},"Webpack")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/webpack/webpack.config.preview.dev.ts"},"webpack.config.preview.dev.ts")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 Webpack config (for bundling in the workspace)")),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/docs/dev-services/preview/overview"},"Preview")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"-"),(0,_react2.mdx)("td",{parentName:"tr",align:null}),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/dev-services/preview/register-custom-preview"},"Add preview"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/docs/packages/packages-overview"},"Package")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"-"),(0,_react2.mdx)("td",{parentName:"tr",align:null},"See the ",(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/typescript/typescript/~code/typescript.main.runtime.ts"},"TypeScript Aspect")," config"),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/packages/managing-package-json#set-configuration-from-an-env"},"Add Env package config")," ",(0,_react2.mdx)("br",null)," \u2022 TypeScript's package config")),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},"Bundler"),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/webpack/webpack"},"Webpack")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/webpack/webpack.config.preview.ts"},"webpack.config.preview.ts")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 Webpack config (for bundling during build)")),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/docs/dev-services/docs/docs-overview"},"Documentation")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"-"),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/docs/index.tsx"},"Docs template")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/docs/dev-services/docs/docs-templates"},"Replace docs template"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"http://localhost:3000/docs/dev-services/builder/builder-overview"},"Builder")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"-"),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"http://localhost:3000/docs/dev-services/builder/builder-overview"},"Build pipeline")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/dev-services/builder/build-pipelines"},"Build pipelines"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/dependencies/dependencies-overview"},"Dependencies")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"-"),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/react.env.ts"},"Env-dependencies")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/dependencies/configuring-dependencies#configuring-dependencies-from-an-env"},"Env dependencies"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/docs/dev-services/generator/generator-overview"},"Generator")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"-"),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/templates/react-component.ts"},"React templates")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:""},"Add a component template"))))),(0,_react2.mdx)("h3",null,"Default React versions"),(0,_react2.mdx)("p",null,"By default, the React env sets the following dependency versions for components using it:"),(0,_react2.mdx)("ul",null,(0,_react2.mdx)("li",{parentName:"ul"},(0,_react2.mdx)("strong",{parentName:"li"},"react")," (peer dependency): ",(0,_react2.mdx)("inlineCode",{parentName:"li"},"^16.8.0 || ^17.0.0")),(0,_react2.mdx)("li",{parentName:"ul"},(0,_react2.mdx)("strong",{parentName:"li"},"react-dom")," (peer dependency): ",(0,_react2.mdx)("inlineCode",{parentName:"li"},"^16.8.0 || ^17.0.0")),(0,_react2.mdx)("li",{parentName:"ul"},(0,_react2.mdx)("strong",{parentName:"li"},"@types/react"),": ",(0,_react2.mdx)("inlineCode",{parentName:"li"},"^17.0.8")),(0,_react2.mdx)("li",{parentName:"ul"},(0,_react2.mdx)("strong",{parentName:"li"},"@types/react-dom"),": ",(0,_react2.mdx)("inlineCode",{parentName:"li"},"^17.0.5")))))}MDXContent.__bit_component=__bit_component,MDXContent.isMDXComponent=!0},64357:(__unused_webpack_module,exports2,__webpack_require__2)=>{"use strict";var __bit_component={id:"teambit.react/react@0.0.802",homepage:"https://bit.dev/teambit/react/react",exported:!0},_interopRequireDefault=__webpack_require__2(88244);Object.defineProperty(exports2,"__esModule",{value:!0}),exports2.Logo=void 0;function _react(){const data=_interopRequireDefault(__webpack_require__2(63804));return _react=function(){return data},data}_react.__bit_component=__bit_component;const Logo=()=>_react().default.createElement("div",{style:{height:"100%",display:"flex",justifyContent:"center"}},_react().default.createElement("img",{style:{width:70},src:"https://static.bit.dev/extensions-icons/react.svg"}));Logo.__bit_component=__bit_component,exports2.Logo=Logo},85057:module2=>{"use strict";module2.exports=MdxJsReact},63804:module2=>{"use strict";module2.exports=React},58459:module2=>{"use strict";module2.exports=TeambitMdxUiMdxScopeContext}},__webpack_module_cache__={};function __webpack_require__(moduleId){var cachedModule=__webpack_module_cache__[moduleId];if(cachedModule!==void 0)return cachedModule.exports;var module2=__webpack_module_cache__[moduleId]={exports:{}};return __webpack_modules__[moduleId](module2,module2.exports,__webpack_require__),module2.exports}__webpack_require__.d=(exports2,definition)=>{for(var key in definition)__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports2,key)&&Object.defineProperty(exports2,key,{enumerable:!0,get:definition[key]})},__webpack_require__.o=(obj,prop)=>Object.prototype.hasOwnProperty.call(obj,prop),__webpack_require__.r=exports2=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(exports2,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports2,"__esModule",{value:!0})};var __webpack_exports__={};return(()=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{compositions:()=>compositions,overview:()=>overview});var react_docs_namespaceObject={};__webpack_require__.r(react_docs_namespaceObject),__webpack_require__.d(react_docs_namespaceObject,{default:()=>MDXContent});var react_composition=__webpack_require__(64357),external_React_=__webpack_require__(63804),external_MdxJsReact_=__webpack_require__(85057),external_TeambitMdxUiMdxScopeContext_=__webpack_require__(58459),dist=__webpack_require__(55906),_excluded=["components"];function _extends(){return _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target},_extends.apply(this,arguments)}function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded),key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++)key=sourceSymbolKeys[i],!(excluded.indexOf(key)>=0)&&(!Object.prototype.propertyIsEnumerable.call(source,key)||(target[key]=source[key]))}return target}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={},sourceKeys=Object.keys(source),key,i;for(i=0;i<sourceKeys.length;i++)key=sourceKeys[i],!(excluded.indexOf(key)>=0)&&(target[key]=source[key]);return target}var layoutProps={},MDXLayout="wrapper";function MDXContent(_ref){var components=_ref.components,props=_objectWithoutProperties(_ref,_excluded);return(0,external_MdxJsReact_.mdx)(MDXLayout,_extends({},layoutProps,props,{components,mdxType:"MDXLayout"}),(0,external_MdxJsReact_.mdx)(external_TeambitMdxUiMdxScopeContext_.MDXScopeProvider,{components:{ReactOverview:dist.ZP},mdxType:"MDXScopeProvider"},(0,external_MdxJsReact_.mdx)(dist.ZP,{mdxType:"ReactOverview"})))}MDXContent.isMDXComponent=!0;const compositions=[react_composition],overview=[react_docs_namespaceObject]})(),__webpack_exports__})()});
11
+ `)),(0,_react2.mdx)("h2",null,"Development services and configurations"),(0,_react2.mdx)("p",null,"The table below lists ",(0,_react2.mdx)("a",{parentName:"p",href:"/dev-services/dev-services-overview"},"dev services")," that are provided by the React env. Each service handles a specific component development operation. Each is implemented by the React env, using a specific set of configurations."),(0,_react2.mdx)("p",null,"To customize and extend the React env, ",(0,_react2.mdx)("a",{parentName:"p",href:"/envs/pre-configured-envs/react/extending-react#using-your-own-react-env-extension"},"create you own React env extension"),". You can replace the Aspects used by the env, or override their configurations (use the links provided in the 'customization' column)."),(0,_react2.mdx)("table",null,(0,_react2.mdx)("thead",{parentName:"table"},(0,_react2.mdx)("tr",{parentName:"thead"},(0,_react2.mdx)("th",{parentName:"tr",align:null},"Service"),(0,_react2.mdx)("th",{parentName:"tr",align:null},"Aspect"),(0,_react2.mdx)("th",{parentName:"tr",align:null},"Default config"),(0,_react2.mdx)("th",{parentName:"tr",align:null},"Customization"))),(0,_react2.mdx)("tbody",{parentName:"table"},(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/docs/dev-services/compiler/compiler-overview"},"Compiler")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/typescript/typescript"},"TypeScript")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/typescript/tsconfig.json"},"tsconfig.json")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/frameworks/react/config-react-tools#typescript"},"TS compilation config")," ",(0,_react2.mdx)("br",null)," \u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/docs/dev-services/compiler/configure-env-with-compiler"},"Replace compiler"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/tester/overview"},"Tester")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/defender/jest"},"Jest")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/jest/jest.config.js"},"jest.config.js")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/frameworks/react/config-react-tools#jest"},"Jest config")," ",(0,_react2.mdx)("br",null)," \u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/dev-services/tester/configure-env-with-tester"},"Replace Tester"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/linter/overview"},"Linting")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/defender/eslint"},"ESLint")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/eslint/eslintrc.ts"},"eslintrc.ts")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/frameworks/react/config-react-tools#eslint"},"ESLint Config")," ",(0,_react2.mdx)("br",null)," \u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/dev-services/linter/configure-env-with-linter"},"Replace Linter"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/formatter/overview"},"Formatter")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/defender/prettier"},"Prettier")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/prettier/prettier.config.js"},"prettier.config.ts")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/frameworks/react/config-react-tools#prettier"},"Prettier config")," ",(0,_react2.mdx)("br",null)," \u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/dev-services/formatter/configure-env-with-formatter"},"Replace Formatter"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},"DevServer"),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/webpack/webpack"},"Webpack")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/webpack/webpack.config.preview.dev.ts"},"webpack.config.preview.dev.ts")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 Webpack config (for bundling in the workspace)")),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/docs/dev-services/preview/overview"},"Preview")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"-"),(0,_react2.mdx)("td",{parentName:"tr",align:null}),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/dev-services/preview/register-custom-preview"},"Add preview"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/docs/packages/packages-overview"},"Package")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"-"),(0,_react2.mdx)("td",{parentName:"tr",align:null},"See the ",(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/typescript/typescript/~code/typescript.main.runtime.ts"},"TypeScript Aspect")," config"),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 ",(0,_react2.mdx)("a",{parentName:"td",href:"/packages/managing-package-json#set-configuration-from-an-env"},"Add Env package config")," ",(0,_react2.mdx)("br",null)," \u2022 TypeScript's package config")),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},"Bundler"),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/webpack/webpack"},"Webpack")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/webpack/webpack.config.preview.ts"},"webpack.config.preview.ts")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"\u2022 Webpack config (for bundling during build)")),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/docs/dev-services/docs/docs-overview"},"Documentation")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"-"),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/docs/index.tsx"},"Docs template")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/docs/dev-services/docs/docs-templates"},"Replace docs template"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"http://localhost:3000/docs/dev-services/builder/builder-overview"},"Builder")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"-"),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"http://localhost:3000/docs/dev-services/builder/builder-overview"},"Build pipeline")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/dev-services/builder/build-pipelines"},"Build pipelines"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/dependencies/dependencies-overview"},"Dependencies")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"-"),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/react.env.ts"},"Env-dependencies")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/dependencies/configuring-dependencies#configuring-dependencies-from-an-env"},"Env dependencies"))),(0,_react2.mdx)("tr",{parentName:"tbody"},(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"/docs/dev-services/generator/generator-overview"},"Generator")),(0,_react2.mdx)("td",{parentName:"tr",align:null},"-"),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/templates/react-component.ts"},"React templates")),(0,_react2.mdx)("td",{parentName:"tr",align:null},(0,_react2.mdx)("a",{parentName:"td",href:""},"Add a component template"))))),(0,_react2.mdx)("h3",null,"Default React versions"),(0,_react2.mdx)("p",null,"By default, the React env sets the following dependency versions for components using it:"),(0,_react2.mdx)("ul",null,(0,_react2.mdx)("li",{parentName:"ul"},(0,_react2.mdx)("strong",{parentName:"li"},"react")," (peer dependency): ",(0,_react2.mdx)("inlineCode",{parentName:"li"},"^16.8.0 || ^17.0.0")),(0,_react2.mdx)("li",{parentName:"ul"},(0,_react2.mdx)("strong",{parentName:"li"},"react-dom")," (peer dependency): ",(0,_react2.mdx)("inlineCode",{parentName:"li"},"^16.8.0 || ^17.0.0")),(0,_react2.mdx)("li",{parentName:"ul"},(0,_react2.mdx)("strong",{parentName:"li"},"@types/react"),": ",(0,_react2.mdx)("inlineCode",{parentName:"li"},"^17.0.8")),(0,_react2.mdx)("li",{parentName:"ul"},(0,_react2.mdx)("strong",{parentName:"li"},"@types/react-dom"),": ",(0,_react2.mdx)("inlineCode",{parentName:"li"},"^17.0.5")))))}MDXContent.__bit_component=__bit_component,MDXContent.isMDXComponent=!0},975:(__unused_webpack_module,exports2,__webpack_require__2)=>{"use strict";var __bit_component={id:"teambit.react/react@0.0.805",homepage:"https://bit.dev/teambit/react/react",exported:!0},_interopRequireDefault=__webpack_require__2(244);Object.defineProperty(exports2,"__esModule",{value:!0}),exports2.Logo=void 0;function _react(){const data=_interopRequireDefault(__webpack_require__2(804));return _react=function(){return data},data}_react.__bit_component=__bit_component;const Logo=()=>_react().default.createElement("div",{style:{height:"100%",display:"flex",justifyContent:"center"}},_react().default.createElement("img",{style:{width:70},src:"https://static.bit.dev/extensions-icons/react.svg"}));Logo.__bit_component=__bit_component,exports2.Logo=Logo},57:module2=>{"use strict";module2.exports=MdxJsReact},804:module2=>{"use strict";module2.exports=React},459:module2=>{"use strict";module2.exports=TeambitMdxUiMdxScopeContext}},__webpack_module_cache__={};function __webpack_require__(moduleId){var cachedModule=__webpack_module_cache__[moduleId];if(cachedModule!==void 0)return cachedModule.exports;var module2=__webpack_module_cache__[moduleId]={exports:{}};return __webpack_modules__[moduleId](module2,module2.exports,__webpack_require__),module2.exports}__webpack_require__.d=(exports2,definition)=>{for(var key in definition)__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports2,key)&&Object.defineProperty(exports2,key,{enumerable:!0,get:definition[key]})},__webpack_require__.o=(obj,prop)=>Object.prototype.hasOwnProperty.call(obj,prop),__webpack_require__.r=exports2=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(exports2,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports2,"__esModule",{value:!0})};var __webpack_exports__={};return(()=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{compositions:()=>compositions,overview:()=>overview});var react_docs_namespaceObject={};__webpack_require__.r(react_docs_namespaceObject),__webpack_require__.d(react_docs_namespaceObject,{default:()=>MDXContent});var react_composition=__webpack_require__(975),external_React_=__webpack_require__(804),external_MdxJsReact_=__webpack_require__(57),external_TeambitMdxUiMdxScopeContext_=__webpack_require__(459),dist=__webpack_require__(906),_excluded=["components"];function _extends(){return _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target},_extends.apply(this,arguments)}function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded),key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++)key=sourceSymbolKeys[i],!(excluded.indexOf(key)>=0)&&(!Object.prototype.propertyIsEnumerable.call(source,key)||(target[key]=source[key]))}return target}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={},sourceKeys=Object.keys(source),key,i;for(i=0;i<sourceKeys.length;i++)key=sourceKeys[i],!(excluded.indexOf(key)>=0)&&(target[key]=source[key]);return target}var layoutProps={},MDXLayout="wrapper";function MDXContent(_ref){var components=_ref.components,props=_objectWithoutProperties(_ref,_excluded);return(0,external_MdxJsReact_.mdx)(MDXLayout,_extends({},layoutProps,props,{components,mdxType:"MDXLayout"}),(0,external_MdxJsReact_.mdx)(external_TeambitMdxUiMdxScopeContext_.MDXScopeProvider,{components:{ReactOverview:dist.ZP},mdxType:"MDXScopeProvider"},(0,external_MdxJsReact_.mdx)(dist.ZP,{mdxType:"ReactOverview"})))}MDXContent.isMDXComponent=!0;const compositions=[react_composition],overview=[react_docs_namespaceObject]})(),__webpack_exports__})()});
@@ -61,11 +61,11 @@ export declare type ReactAppOptions = {
61
61
  /**
62
62
  * path to entry files of the application.
63
63
  */
64
- entry: string[] | (() => Promise<string[]>);
64
+ entry: string[] | ((path?: string) => Promise<string[]>);
65
65
  /**
66
- * use server-side rendering for the app.
66
+ * path to server-rendered entrypoint of the app
67
67
  */
68
- ssr?: boolean;
68
+ ssr?: string | (() => Promise<string>);
69
69
  /**
70
70
  * instance of bundler to use. default is Webpack.
71
71
  */
@@ -92,7 +92,7 @@ export declare type ReactAppOptions = {
92
92
  /**
93
93
  * ranges of ports to use to run the app server.
94
94
  */
95
- portRange?: number[];
95
+ portRange?: [start: number, end: number];
96
96
  /**
97
97
  * favicon for the app. You can pass an abs path (using require.resolve()) or a url.
98
98
  */
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["react-app-options.ts"],"sourcesContent":["import { Bundler, DevServer } from '@teambit/bundler';\nimport { WebpackConfigTransformer } from '@teambit/webpack';\n\nimport { ReactDeployContext } from './deploy-context';\n\ntype prerenderedRoute = {\n /** The prerendered route, after following redirects */\n route: string;\n /** The original route passed, before redirects */\n originalRoute: string;\n /** The resulting HTML for the route */\n html: string;\n /**\n * The path to write the rendered HTML to.\n * This is null (automatically calculated after postProcess)\n * unless explicitly set. */\n outputPath?: string | null;\n};\n\n/** https://github.com/Tofandel/prerender-spa-plugin-next */\nexport type ReactAppPrerenderOptions = {\n /**\n * sub folder to output the prerender, inside the webpack output folder\n * @default '/'\n */\n staticDir?: string;\n\n /** The index file to fall back on for SPAs. */\n indexPath?: string;\n\n /**\n * routes to prerender\n */\n routes: string[];\n\n /**\n * the proxy server you want the prerender headless browser to run on\n */\n server?: {\n proxy: {\n [key: string]: {\n /** required by HPM.\n * @default 'http://localhost:8000/' */\n target: string;\n pathRewrite: { [key: string]: string };\n };\n };\n };\n\n /**\n * Post processing of the prerendered html. This is useful for adding meta tags to the html or changing the file name.\n */\n postProcess?: (prerenderRoute: prerenderedRoute) => prerenderedRoute;\n\n /** The renderer you'd like to use to prerender the app.\n * @default new require(\"@prerenderer/renderer-puppeteer\").\n */\n renderer?: any;\n\n /** options to pass to the renderer class's constructor */\n rendererOptions?: any;\n};\n\nexport type ReactAppOptions = {\n /**\n * name of the application.\n */\n name: string;\n\n /**\n * path to entry files of the application.\n */\n entry: string[] | (() => Promise<string[]>);\n\n /**\n * use server-side rendering for the app.\n */\n ssr?: boolean;\n\n /**\n * instance of bundler to use. default is Webpack.\n */\n bundler?: Bundler;\n\n /**\n * instance of dev server to use. default is Webpack.\n */\n devServer?: DevServer;\n\n /**\n * set webpack transformers\n */\n webpackTransformers?: WebpackConfigTransformer[];\n\n /**\n * decide whether to prerender your app. accepts an array of routes. if none, prerender would not apply.\n * e.g ['/plugins', '/learn', '/docs/quick-start]\n * You can also pass a configuration for the proxy, please refer here: https://github.com/webpack/docs/wiki/webpack-dev-server#proxy\n *\n */\n prerender?: ReactAppPrerenderOptions;\n\n /**\n * deploy function.\n */\n deploy?: (context: ReactDeployContext) => Promise<void>;\n\n /**\n * ranges of ports to use to run the app server.\n */\n portRange?: number[];\n\n /**\n * favicon for the app. You can pass an abs path (using require.resolve()) or a url.\n */\n favicon?: string;\n};\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["react-app-options.ts"],"sourcesContent":["import { Bundler, DevServer } from '@teambit/bundler';\nimport { WebpackConfigTransformer } from '@teambit/webpack';\n\nimport { ReactDeployContext } from './deploy-context';\n\ntype prerenderedRoute = {\n /** The prerendered route, after following redirects */\n route: string;\n /** The original route passed, before redirects */\n originalRoute: string;\n /** The resulting HTML for the route */\n html: string;\n /**\n * The path to write the rendered HTML to.\n * This is null (automatically calculated after postProcess)\n * unless explicitly set. */\n outputPath?: string | null;\n};\n\n/** https://github.com/Tofandel/prerender-spa-plugin-next */\nexport type ReactAppPrerenderOptions = {\n /**\n * sub folder to output the prerender, inside the webpack output folder\n * @default '/'\n */\n staticDir?: string;\n\n /** The index file to fall back on for SPAs. */\n indexPath?: string;\n\n /**\n * routes to prerender\n */\n routes: string[];\n\n /**\n * the proxy server you want the prerender headless browser to run on\n */\n server?: {\n proxy: {\n [key: string]: {\n /** required by HPM.\n * @default 'http://localhost:8000/' */\n target: string;\n pathRewrite: { [key: string]: string };\n };\n };\n };\n\n /**\n * Post processing of the prerendered html. This is useful for adding meta tags to the html or changing the file name.\n */\n postProcess?: (prerenderRoute: prerenderedRoute) => prerenderedRoute;\n\n /** The renderer you'd like to use to prerender the app.\n * @default new require(\"@prerenderer/renderer-puppeteer\").\n */\n renderer?: any;\n\n /** options to pass to the renderer class's constructor */\n rendererOptions?: any;\n};\n\nexport type ReactAppOptions = {\n /**\n * name of the application.\n */\n name: string;\n\n /**\n * path to entry files of the application.\n */\n entry: string[] | ((path?: string) => Promise<string[]>);\n\n /**\n * path to server-rendered entrypoint of the app\n */\n ssr?: string | (() => Promise<string>);\n\n /**\n * instance of bundler to use. default is Webpack.\n */\n bundler?: Bundler;\n\n /**\n * instance of dev server to use. default is Webpack.\n */\n devServer?: DevServer;\n\n /**\n * set webpack transformers\n */\n webpackTransformers?: WebpackConfigTransformer[];\n\n /**\n * decide whether to prerender your app. accepts an array of routes. if none, prerender would not apply.\n * e.g ['/plugins', '/learn', '/docs/quick-start]\n * You can also pass a configuration for the proxy, please refer here: https://github.com/webpack/docs/wiki/webpack-dev-server#proxy\n *\n */\n prerender?: ReactAppPrerenderOptions;\n\n /**\n * deploy function.\n */\n deploy?: (context: ReactDeployContext) => Promise<void>;\n\n /**\n * ranges of ports to use to run the app server.\n */\n portRange?: [start: number, end: number];\n\n /**\n * favicon for the app. You can pass an abs path (using require.resolve()) or a url.\n */\n favicon?: string;\n};\n"],"mappings":""}
@@ -1,10 +1,12 @@
1
1
  import { ApplicationType } from '@teambit/application';
2
+ import type { Logger } from '@teambit/logger';
2
3
  import { ReactAppOptions } from './react-app-options';
3
4
  import { ReactApp } from './react.application';
4
5
  import { ReactEnv } from '../../react.env';
5
6
  export declare class ReactAppType implements ApplicationType<ReactAppOptions> {
6
7
  readonly name: string;
7
8
  private reactEnv;
8
- constructor(name: string, reactEnv: ReactEnv);
9
+ private logger?;
10
+ constructor(name: string, reactEnv: ReactEnv, logger?: Logger | undefined);
9
11
  createApp(options: ReactAppOptions): ReactApp;
10
12
  }
@@ -16,13 +16,14 @@ function _react() {
16
16
  }
17
17
 
18
18
  class ReactAppType {
19
- constructor(name, reactEnv) {
19
+ constructor(name, reactEnv, logger) {
20
20
  this.name = name;
21
21
  this.reactEnv = reactEnv;
22
+ this.logger = logger;
22
23
  }
23
24
 
24
25
  createApp(options) {
25
- return new (_react().ReactApp)(options.name, options.entry, options.portRange || [3000, 4000], this.reactEnv, options.prerender, options.bundler, options.devServer, options.webpackTransformers, options.deploy, options.favicon);
26
+ return new (_react().ReactApp)(options.name, options.entry, options.ssr, options.portRange || [3000, 4000], this.reactEnv, options.prerender, options.bundler, options.devServer, options.webpackTransformers, options.deploy, options.favicon, this.logger);
26
27
  }
27
28
 
28
29
  }
@@ -1 +1 @@
1
- {"version":3,"names":["ReactAppType","constructor","name","reactEnv","createApp","options","ReactApp","entry","portRange","prerender","bundler","devServer","webpackTransformers","deploy","favicon"],"sources":["react.app-type.ts"],"sourcesContent":["import { ApplicationType } from '@teambit/application';\nimport { ReactAppOptions } from './react-app-options';\nimport { ReactApp } from './react.application';\nimport { ReactEnv } from '../../react.env';\n\nexport class ReactAppType implements ApplicationType<ReactAppOptions> {\n constructor(readonly name: string, private reactEnv: ReactEnv) {}\n\n createApp(options: ReactAppOptions) {\n return new ReactApp(\n options.name,\n options.entry,\n options.portRange || [3000, 4000],\n this.reactEnv,\n options.prerender,\n options.bundler,\n options.devServer,\n options.webpackTransformers,\n options.deploy,\n options.favicon\n );\n }\n}\n"],"mappings":";;;;;;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGO,MAAMA,YAAN,CAA+D;EACpEC,WAAW,CAAUC,IAAV,EAAgCC,QAAhC,EAAoD;IAAA,KAA1CD,IAA0C,GAA1CA,IAA0C;IAAA,KAApBC,QAAoB,GAApBA,QAAoB;EAAE;;EAEjEC,SAAS,CAACC,OAAD,EAA2B;IAClC,OAAO,KAAIC,iBAAJ,EACLD,OAAO,CAACH,IADH,EAELG,OAAO,CAACE,KAFH,EAGLF,OAAO,CAACG,SAAR,IAAqB,CAAC,IAAD,EAAO,IAAP,CAHhB,EAIL,KAAKL,QAJA,EAKLE,OAAO,CAACI,SALH,EAMLJ,OAAO,CAACK,OANH,EAOLL,OAAO,CAACM,SAPH,EAQLN,OAAO,CAACO,mBARH,EASLP,OAAO,CAACQ,MATH,EAULR,OAAO,CAACS,OAVH,CAAP;EAYD;;AAhBmE"}
1
+ {"version":3,"names":["ReactAppType","constructor","name","reactEnv","logger","createApp","options","ReactApp","entry","ssr","portRange","prerender","bundler","devServer","webpackTransformers","deploy","favicon"],"sources":["react.app-type.ts"],"sourcesContent":["import { ApplicationType } from '@teambit/application';\nimport type { Logger } from '@teambit/logger';\nimport { ReactAppOptions } from './react-app-options';\nimport { ReactApp } from './react.application';\nimport { ReactEnv } from '../../react.env';\n\nexport class ReactAppType implements ApplicationType<ReactAppOptions> {\n constructor(readonly name: string, private reactEnv: ReactEnv, private logger?: Logger) {}\n\n createApp(options: ReactAppOptions) {\n return new ReactApp(\n options.name,\n options.entry,\n options.ssr,\n options.portRange || [3000, 4000],\n this.reactEnv,\n options.prerender,\n options.bundler,\n options.devServer,\n options.webpackTransformers,\n options.deploy,\n options.favicon,\n this.logger\n );\n }\n}\n"],"mappings":";;;;;;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGO,MAAMA,YAAN,CAA+D;EACpEC,WAAW,CAAUC,IAAV,EAAgCC,QAAhC,EAA4DC,MAA5D,EAA6E;IAAA,KAAnEF,IAAmE,GAAnEA,IAAmE;IAAA,KAA7CC,QAA6C,GAA7CA,QAA6C;IAAA,KAAjBC,MAAiB,GAAjBA,MAAiB;EAAE;;EAE1FC,SAAS,CAACC,OAAD,EAA2B;IAClC,OAAO,KAAIC,iBAAJ,EACLD,OAAO,CAACJ,IADH,EAELI,OAAO,CAACE,KAFH,EAGLF,OAAO,CAACG,GAHH,EAILH,OAAO,CAACI,SAAR,IAAqB,CAAC,IAAD,EAAO,IAAP,CAJhB,EAKL,KAAKP,QALA,EAMLG,OAAO,CAACK,SANH,EAOLL,OAAO,CAACM,OAPH,EAQLN,OAAO,CAACO,SARH,EASLP,OAAO,CAACQ,mBATH,EAULR,OAAO,CAACS,MAVH,EAWLT,OAAO,CAACU,OAXH,EAYL,KAAKZ,MAZA,CAAP;EAcD;;AAlBmE"}
@@ -1,5 +1,6 @@
1
- import { Application, AppContext, AppBuildContext } from '@teambit/application';
2
- import { Bundler, DevServer } from '@teambit/bundler';
1
+ import { Application, AppContext, AppBuildContext, AppResult } from '@teambit/application';
2
+ import type { Bundler, DevServer } from '@teambit/bundler';
3
+ import type { Logger } from '@teambit/logger';
3
4
  import { WebpackConfigTransformer } from '@teambit/webpack';
4
5
  import { ReactEnv } from '../../react.env';
5
6
  import { ReactAppBuildResult } from './react-build-result';
@@ -7,8 +8,9 @@ import { ReactAppPrerenderOptions } from './react-app-options';
7
8
  import { ReactDeployContext } from '.';
8
9
  export declare class ReactApp implements Application {
9
10
  readonly name: string;
10
- readonly entry: string[] | (() => Promise<string[]>);
11
- readonly portRange: number[];
11
+ readonly entry: string[] | ((path?: string) => Promise<string[]>);
12
+ readonly ssr: string | (() => Promise<string>) | undefined;
13
+ readonly portRange: [number, number];
12
14
  private reactEnv;
13
15
  readonly prerender?: ReactAppPrerenderOptions | undefined;
14
16
  readonly bundler?: Bundler | undefined;
@@ -16,16 +18,21 @@ export declare class ReactApp implements Application {
16
18
  readonly transformers: WebpackConfigTransformer[];
17
19
  readonly deploy?: ((context: ReactDeployContext) => Promise<void>) | undefined;
18
20
  readonly favicon?: string | undefined;
19
- constructor(name: string, entry: string[] | (() => Promise<string[]>), portRange: number[], reactEnv: ReactEnv, prerender?: ReactAppPrerenderOptions | undefined, bundler?: Bundler | undefined, devServer?: DevServer | undefined, transformers?: WebpackConfigTransformer[], deploy?: ((context: ReactDeployContext) => Promise<void>) | undefined, favicon?: string | undefined);
21
+ private logger?;
22
+ constructor(name: string, entry: string[] | ((path?: string) => Promise<string[]>), ssr: string | (() => Promise<string>) | undefined, portRange: [number, number], reactEnv: ReactEnv, prerender?: ReactAppPrerenderOptions | undefined, bundler?: Bundler | undefined, devServer?: DevServer | undefined, transformers?: WebpackConfigTransformer[], deploy?: ((context: ReactDeployContext) => Promise<void>) | undefined, favicon?: string | undefined, logger?: Logger | undefined);
20
23
  readonly applicationType = "react-common-js";
21
24
  readonly dir = "public";
22
25
  run(context: AppContext): Promise<number>;
26
+ runSsr(context: AppContext): Promise<AppResult>;
27
+ private buildClient;
28
+ private buildSsr;
23
29
  build(context: AppBuildContext): Promise<ReactAppBuildResult>;
24
30
  private getBundler;
25
31
  private getDefaultBundler;
26
32
  private getESBuildConfig;
27
33
  private getPublicDir;
28
34
  getEntries(): Promise<string[]>;
35
+ getSsrEntries(): Promise<string[]>;
29
36
  private getDevServerContext;
30
37
  private getPeers;
31
38
  }
@@ -61,6 +61,16 @@ function _terserWebpackPlugin() {
61
61
  return data;
62
62
  }
63
63
 
64
+ function _bitError() {
65
+ const data = require("@teambit/bit-error");
66
+
67
+ _bitError = function () {
68
+ return data;
69
+ };
70
+
71
+ return data;
72
+ }
73
+
64
74
  function _plugins() {
65
75
  const data = require("./plugins");
66
76
 
@@ -91,10 +101,45 @@ function _computeResults() {
91
101
  return data;
92
102
  }
93
103
 
104
+ function _webpackAppSsr() {
105
+ const data = require("./webpack/webpack.app.ssr.config");
106
+
107
+ _webpackAppSsr = function () {
108
+ return data;
109
+ };
110
+
111
+ return data;
112
+ }
113
+
114
+ function _mutators() {
115
+ const data = require("./webpack/mutators");
116
+
117
+ _mutators = function () {
118
+ return data;
119
+ };
120
+
121
+ return data;
122
+ }
123
+
124
+ function _ssrExpress() {
125
+ const data = require("./ssr/ssr-express");
126
+
127
+ _ssrExpress = function () {
128
+ return data;
129
+ };
130
+
131
+ return data;
132
+ }
133
+
134
+ 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; }
135
+
136
+ 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; }
137
+
94
138
  class ReactApp {
95
- constructor(name, entry, portRange, reactEnv, prerender, bundler, devServer, transformers = [], deploy, favicon) {
139
+ constructor(name, entry, ssr, portRange, reactEnv, prerender, bundler, devServer, transformers = [], deploy, favicon, logger) {
96
140
  this.name = name;
97
141
  this.entry = entry;
142
+ this.ssr = ssr;
98
143
  this.portRange = portRange;
99
144
  this.reactEnv = reactEnv;
100
145
  this.prerender = prerender;
@@ -103,6 +148,7 @@ class ReactApp {
103
148
  this.transformers = transformers;
104
149
  this.deploy = deploy;
105
150
  this.favicon = favicon;
151
+ this.logger = logger;
106
152
  (0, _defineProperty2().default)(this, "applicationType", 'react-common-js');
107
153
  (0, _defineProperty2().default)(this, "dir", 'public');
108
154
  (0, _defineProperty2().default)(this, "getESBuildConfig", (isPrerendering = this.prerender) => {
@@ -169,23 +215,90 @@ class ReactApp {
169
215
  }
170
216
 
171
217
  const devServerContext = await this.getDevServerContext(context);
172
- const devServer = this.reactEnv.getDevServer(devServerContext, [configMutator => configMutator.addTopLevel('devServer', {
173
- historyApiFallback: {
174
- index: '/index.html',
175
- disableDotRule: true,
176
- headers: {
177
- 'Access-Control-Allow-Headers': '*'
178
- }
179
- }
180
- }), configMutator => {
181
- if (!configMutator.raw.output) configMutator.raw.output = {};
182
- configMutator.raw.output.publicPath = '/';
183
- return configMutator;
184
- }, ...this.transformers]);
218
+ const devServer = this.reactEnv.getDevServer(devServerContext, [_mutators().addDevServer, _mutators().setOutput, ...this.transformers]);
185
219
  await devServer.listen(port);
186
220
  return port;
187
221
  }
188
222
 
223
+ async runSsr(context) {
224
+ var _this$logger, _this$logger2, _this$logger3;
225
+
226
+ const [from, to] = this.portRange;
227
+ const port = await _toolboxNetwork().Port.getPort(from, to); // bundle client
228
+
229
+ const clientBundle = await this.buildClient(context);
230
+ if (clientBundle.errors.length > 0) return {
231
+ errors: clientBundle.errors
232
+ };
233
+ (_this$logger = this.logger) === null || _this$logger === void 0 ? void 0 : _this$logger.info('[react.application] [ssr] client bundle - complete'); // bundle server
234
+
235
+ const serverBundle = await this.buildSsr(context);
236
+ if (serverBundle.errors.length > 0) return {
237
+ errors: serverBundle.errors
238
+ };
239
+ (_this$logger2 = this.logger) === null || _this$logger2 === void 0 ? void 0 : _this$logger2.info('[react.application] [ssr] server bundle - complete'); // load server-side runtime
240
+
241
+ const app = await (0, _ssrExpress().loadSsrApp)(context.workdir, context.appName);
242
+ (_this$logger3 = this.logger) === null || _this$logger3 === void 0 ? void 0 : _this$logger3.info('[react.application] [ssr] bundle code - loaded');
243
+ const expressApp = (0, _ssrExpress().createExpressSsr)({
244
+ name: context.appName,
245
+ workdir: context.workdir,
246
+ port,
247
+ app,
248
+ assets: (0, _ssrExpress().parseAssets)(clientBundle.assets),
249
+ logger: this.logger
250
+ });
251
+ expressApp.listen(port);
252
+ return {
253
+ port
254
+ };
255
+ }
256
+
257
+ async buildClient(context) {
258
+ const htmlConfig = [{
259
+ title: context.appName,
260
+ templateContent: (0, _webpack().html)(context.appName),
261
+ minify: false,
262
+ favicon: this.favicon
263
+ }]; // extend, including prototype methods
264
+
265
+ const ctx = Object.assign(Object.create(context), {
266
+ html: htmlConfig,
267
+ targets: [{
268
+ entries: await this.getEntries(),
269
+ components: [context.appComponent],
270
+ outputPath: (0, _path().resolve)(context.workdir, (0, _webpackAppSsr().calcOutputPath)(context.appName, 'browser')),
271
+ hostDependencies: await this.getPeers(),
272
+ aliasHostDependencies: true
273
+ }],
274
+ // @ts-ignore
275
+ capsuleNetwork: undefined,
276
+ previousTasksResults: []
277
+ });
278
+ const bundler = await this.reactEnv.getBundler(ctx, [config => config.merge([(0, _webpackAppSsr().clientConfig)()]), ...this.transformers]);
279
+ const bundleResult = await bundler.run();
280
+ return bundleResult[0];
281
+ }
282
+
283
+ async buildSsr(context) {
284
+ // extend, including prototype methods
285
+ const ctx = Object.assign(Object.create(context), _objectSpread(_objectSpread({}, context), {}, {
286
+ targets: [{
287
+ entries: await this.getSsrEntries(),
288
+ components: [context.appComponent],
289
+ outputPath: (0, _path().resolve)(context.workdir, (0, _webpackAppSsr().calcOutputPath)(context.appName, 'ssr')),
290
+ hostDependencies: await this.getPeers(),
291
+ aliasHostDependencies: true
292
+ }],
293
+ // @ts-ignore
294
+ capsuleNetwork: undefined,
295
+ previousTasksResults: []
296
+ }));
297
+ const bundler = await this.reactEnv.getBundler(ctx, [config => config.merge([(0, _webpackAppSsr().ssrConfig)()]), ...this.transformers]);
298
+ const bundleResult = await bundler.run();
299
+ return bundleResult[0];
300
+ }
301
+
189
302
  async build(context) {
190
303
  const htmlConfig = [{
191
304
  title: context.name,
@@ -219,7 +332,7 @@ class ReactApp {
219
332
  const {
220
333
  distDir
221
334
  } = reactEnv.getCompiler();
222
- const targetEntries = Array.isArray(this.entry) ? this.entry : await this.entry();
335
+ const targetEntries = Array.isArray(this.entry) ? this.entry : await this.entry(`${capsule.path}/${distDir}`);
223
336
  const entries = targetEntries.map(entry => require.resolve(`${capsule.path}/${distDir}/${(0, _path().basename)(entry)}`));
224
337
  const staticDir = (0, _path().join)(outputPath, this.dir);
225
338
  const bundlerContext = Object.assign(context, {
@@ -227,6 +340,7 @@ class ReactApp {
227
340
  components: [capsule === null || capsule === void 0 ? void 0 : capsule.component],
228
341
  entries,
229
342
  outputPath,
343
+ hostRootDir: capsule === null || capsule === void 0 ? void 0 : capsule.path,
230
344
  hostDependencies: await this.getPeers(),
231
345
  aliasHostDependencies: true
232
346
  }],
@@ -274,6 +388,12 @@ class ReactApp {
274
388
  return this.entry();
275
389
  }
276
390
 
391
+ async getSsrEntries() {
392
+ if (!this.ssr) throw new (_bitError().BitError)('tried to build ssr without ssr entries');
393
+ if (typeof this.ssr === 'string') return [this.ssr];
394
+ return [await this.ssr()];
395
+ }
396
+
277
397
  async getDevServerContext(context) {
278
398
  const entries = await this.getEntries();
279
399
  return Object.assign(context, {
@@ -1 +1 @@
1
- {"version":3,"names":["ReactApp","constructor","name","entry","portRange","reactEnv","prerender","bundler","devServer","transformers","deploy","favicon","isPrerendering","TerserPlugin","extractComments","terserOptions","parse","ecma","compress","warnings","comparisons","inline","mangle","safari10","output","comments","ascii_only","minify","esbuildMinify","run","context","from","to","port","Port","getPort","listen","devServerContext","getDevServerContext","getDevServer","configMutator","addTopLevel","historyApiFallback","index","disableDotRule","headers","raw","publicPath","build","htmlConfig","title","templateContent","html","Object","assign","getBundler","bundleResult","computeResults","publicDir","getPublicDir","artifactsDir","dir","getDefaultBundler","capsule","env","outputPath","join","path","distDir","getCompiler","targetEntries","Array","isArray","entries","map","require","resolve","basename","staticDir","bundlerContext","targets","components","component","hostDependencies","getPeers","aliasHostDependencies","rootPath","metaData","initiator","envId","id","defaultTransformer","config","filename","addPlugin","prerenderPlugin","optimization","minimizer","remove","push","getESBuildConfig","applicationType","getEntries","getPeerDependenciesList"],"sources":["react.application.ts"],"sourcesContent":["import { join, basename } from 'path';\nimport { Application, AppContext, AppBuildContext } from '@teambit/application';\nimport { Bundler, DevServer, BundlerContext, DevServerContext, BundlerHtmlConfig } from '@teambit/bundler';\nimport { Port } from '@teambit/toolbox.network.get-port';\nimport { remove } from 'lodash';\nimport TerserPlugin from 'terser-webpack-plugin';\nimport { WebpackConfigTransformer } from '@teambit/webpack';\nimport { ReactEnv } from '../../react.env';\nimport { prerenderPlugin } from './plugins';\nimport { ReactAppBuildResult } from './react-build-result';\nimport { ReactAppPrerenderOptions } from './react-app-options';\nimport { html } from '../../webpack';\nimport { ReactDeployContext } from '.';\nimport { computeResults } from './compute-results';\n\nexport class ReactApp implements Application {\n constructor(\n readonly name: string,\n readonly entry: string[] | (() => Promise<string[]>),\n readonly portRange: number[],\n private reactEnv: ReactEnv,\n readonly prerender?: ReactAppPrerenderOptions,\n readonly bundler?: Bundler,\n readonly devServer?: DevServer,\n readonly transformers: WebpackConfigTransformer[] = [],\n readonly deploy?: (context: ReactDeployContext) => Promise<void>,\n readonly favicon?: string\n ) {}\n readonly applicationType = 'react-common-js';\n readonly dir = 'public';\n\n async run(context: AppContext): Promise<number> {\n const [from, to] = this.portRange;\n const port = await Port.getPort(from, to);\n if (this.devServer) {\n await this.devServer.listen(port);\n return port;\n }\n const devServerContext = await this.getDevServerContext(context);\n const devServer = this.reactEnv.getDevServer(devServerContext, [\n (configMutator) =>\n configMutator.addTopLevel('devServer', {\n historyApiFallback: {\n index: '/index.html',\n disableDotRule: true,\n headers: {\n 'Access-Control-Allow-Headers': '*',\n },\n },\n }),\n (configMutator) => {\n if (!configMutator.raw.output) configMutator.raw.output = {};\n configMutator.raw.output.publicPath = '/';\n\n return configMutator;\n },\n ...this.transformers,\n ]);\n await devServer.listen(port);\n return port;\n }\n\n async build(context: AppBuildContext): Promise<ReactAppBuildResult> {\n const htmlConfig: BundlerHtmlConfig[] = [\n {\n title: context.name,\n templateContent: html(context.name),\n minify: false,\n favicon: this.favicon,\n // filename: ''.html`,\n },\n ];\n Object.assign(context, {\n html: htmlConfig,\n });\n const bundler = await this.getBundler(context);\n const bundleResult = await bundler.run();\n\n return computeResults(bundleResult, { publicDir: `${this.getPublicDir(context.artifactsDir)}/${this.dir}` });\n }\n\n private getBundler(context: AppBuildContext) {\n if (this.bundler) return this.bundler;\n return this.getDefaultBundler(context);\n }\n private async getDefaultBundler(context: AppBuildContext) {\n const { capsule } = context;\n const reactEnv: ReactEnv = context.env;\n const publicDir = this.getPublicDir(context.artifactsDir);\n const outputPath = join(capsule.path, publicDir);\n const { distDir } = reactEnv.getCompiler();\n const targetEntries = Array.isArray(this.entry) ? this.entry : await this.entry();\n const entries = targetEntries.map((entry) => require.resolve(`${capsule.path}/${distDir}/${basename(entry)}`));\n const staticDir = join(outputPath, this.dir);\n\n const bundlerContext: BundlerContext = Object.assign(context, {\n targets: [\n {\n components: [capsule?.component],\n entries,\n outputPath,\n hostDependencies: await this.getPeers(),\n aliasHostDependencies: true,\n },\n ],\n entry: [],\n rootPath: '/',\n metaData: {\n initiator: `building app: ${context.name}`,\n envId: context.id,\n },\n });\n\n const defaultTransformer: WebpackConfigTransformer = (configMutator) => {\n const config = configMutator.addTopLevel('output', {\n path: staticDir,\n publicPath: `/`,\n filename: '[name].[chunkhash].js',\n });\n if (this.prerender) config.addPlugin(prerenderPlugin(this.prerender));\n if (config.raw.optimization?.minimizer) {\n remove(config.raw.optimization?.minimizer, (minimizer) => {\n return minimizer.constructor.name === 'TerserPlugin';\n });\n\n config.raw.optimization?.minimizer.push(this.getESBuildConfig());\n }\n\n return config;\n };\n const transformers = [defaultTransformer, ...this.transformers];\n const bundler: Bundler = await reactEnv.getBundler(bundlerContext, transformers);\n return bundler;\n }\n private getESBuildConfig = (isPrerendering = this.prerender) => {\n // We don't want to use esbuild in case of prerendering since the headless browser puppeteer doesn't support\n // the output of esbuild\n\n if (isPrerendering) {\n return new TerserPlugin({\n extractComments: false,\n terserOptions: {\n parse: {\n // We want terser to parse ecma 8 code. However, we don't want it\n // to apply any minification steps that turns valid ecma 5 code\n // into invalid ecma 5 code. This is why the 'compress' and 'output'\n // sections only apply transformations that are ecma 5 safe\n // https://github.com/facebook/create-react-app/pull/4234\n ecma: 8,\n },\n compress: {\n ecma: 5,\n warnings: false,\n // Disabled because of an issue with Uglify breaking seemingly valid code:\n // https://github.com/facebook/create-react-app/issues/2376\n // Pending further investigation:\n // https://github.com/mishoo/UglifyJS2/issues/2011\n comparisons: false,\n // Disabled because of an issue with Terser breaking valid code:\n // https://github.com/facebook/create-react-app/issues/5250\n // Pending further investigation:\n // https://github.com/terser-js/terser/issues/120\n inline: 2,\n },\n mangle: {\n safari10: true,\n },\n output: {\n ecma: 5,\n comments: false,\n // Turned on because emoji and regex is not minified properly using default\n // https://github.com/facebook/create-react-app/issues/2488\n ascii_only: true,\n },\n },\n });\n }\n return new TerserPlugin({\n minify: TerserPlugin.esbuildMinify,\n // `terserOptions` options will be passed to `esbuild`\n // Link to options - https://esbuild.github.io/api/#minify\n terserOptions: {\n minify: true,\n },\n });\n };\n\n private getPublicDir(artifactsDir: string) {\n return join(artifactsDir, this.applicationType, this.name);\n }\n\n async getEntries(): Promise<string[]> {\n if (Array.isArray(this.entry)) return this.entry;\n return this.entry();\n }\n\n private async getDevServerContext(context: AppContext): Promise<DevServerContext> {\n const entries = await this.getEntries();\n return Object.assign(context, {\n entry: entries,\n rootPath: '',\n publicPath: `public/${this.name}`,\n title: this.name,\n favicon: this.favicon,\n hostDependencies: await this.getPeers(),\n aliasHostDependencies: true,\n });\n }\n\n private getPeers(): Promise<string[]> {\n return this.reactEnv.getPeerDependenciesList();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["ReactApp","constructor","name","entry","ssr","portRange","reactEnv","prerender","bundler","devServer","transformers","deploy","favicon","logger","isPrerendering","TerserPlugin","extractComments","terserOptions","parse","ecma","compress","warnings","comparisons","inline","mangle","safari10","output","comments","ascii_only","minify","esbuildMinify","run","context","from","to","port","Port","getPort","listen","devServerContext","getDevServerContext","getDevServer","addDevServer","setOutput","runSsr","clientBundle","buildClient","errors","length","info","serverBundle","buildSsr","app","loadSsrApp","workdir","appName","expressApp","createExpressSsr","assets","parseAssets","htmlConfig","title","templateContent","html","ctx","Object","assign","create","targets","entries","getEntries","components","appComponent","outputPath","resolve","calcOutputPath","hostDependencies","getPeers","aliasHostDependencies","capsuleNetwork","undefined","previousTasksResults","getBundler","config","merge","clientConfig","bundleResult","getSsrEntries","ssrConfig","build","computeResults","publicDir","getPublicDir","artifactsDir","dir","getDefaultBundler","capsule","env","join","path","distDir","getCompiler","targetEntries","Array","isArray","map","require","basename","staticDir","bundlerContext","component","hostRootDir","rootPath","metaData","initiator","envId","id","defaultTransformer","configMutator","addTopLevel","publicPath","filename","addPlugin","prerenderPlugin","raw","optimization","minimizer","remove","push","getESBuildConfig","applicationType","BitError","getPeerDependenciesList"],"sources":["react.application.ts"],"sourcesContent":["import { join, resolve, basename } from 'path';\nimport { Application, AppContext, AppBuildContext, AppResult } from '@teambit/application';\nimport type { Bundler, DevServer, BundlerContext, DevServerContext, BundlerHtmlConfig } from '@teambit/bundler';\nimport { Port } from '@teambit/toolbox.network.get-port';\nimport type { Logger } from '@teambit/logger';\nimport { remove } from 'lodash';\nimport TerserPlugin from 'terser-webpack-plugin';\nimport { WebpackConfigTransformer } from '@teambit/webpack';\nimport { BitError } from '@teambit/bit-error';\nimport { ReactEnv } from '../../react.env';\nimport { prerenderPlugin } from './plugins';\nimport { ReactAppBuildResult } from './react-build-result';\nimport { ReactAppPrerenderOptions } from './react-app-options';\nimport { html } from '../../webpack';\nimport { ReactDeployContext } from '.';\nimport { computeResults } from './compute-results';\nimport { clientConfig, ssrConfig, calcOutputPath } from './webpack/webpack.app.ssr.config';\nimport { addDevServer, setOutput } from './webpack/mutators';\nimport { createExpressSsr, loadSsrApp, parseAssets } from './ssr/ssr-express';\n\nexport class ReactApp implements Application {\n constructor(\n readonly name: string,\n readonly entry: string[] | ((path?: string) => Promise<string[]>),\n readonly ssr: string | (() => Promise<string>) | undefined,\n readonly portRange: [number, number],\n private reactEnv: ReactEnv,\n readonly prerender?: ReactAppPrerenderOptions,\n readonly bundler?: Bundler,\n readonly devServer?: DevServer,\n readonly transformers: WebpackConfigTransformer[] = [],\n readonly deploy?: (context: ReactDeployContext) => Promise<void>,\n readonly favicon?: string,\n private logger?: Logger\n ) {}\n readonly applicationType = 'react-common-js';\n readonly dir = 'public';\n\n async run(context: AppContext): Promise<number> {\n const [from, to] = this.portRange;\n const port = await Port.getPort(from, to);\n\n if (this.devServer) {\n await this.devServer.listen(port);\n return port;\n }\n\n const devServerContext = await this.getDevServerContext(context);\n const devServer = this.reactEnv.getDevServer(devServerContext, [addDevServer, setOutput, ...this.transformers]);\n await devServer.listen(port);\n return port;\n }\n\n async runSsr(context: AppContext): Promise<AppResult> {\n const [from, to] = this.portRange;\n const port = await Port.getPort(from, to);\n\n // bundle client\n const clientBundle = await this.buildClient(context);\n if (clientBundle.errors.length > 0) return { errors: clientBundle.errors };\n this.logger?.info('[react.application] [ssr] client bundle - complete');\n\n // bundle server\n const serverBundle = await this.buildSsr(context);\n if (serverBundle.errors.length > 0) return { errors: serverBundle.errors };\n this.logger?.info('[react.application] [ssr] server bundle - complete');\n\n // load server-side runtime\n const app = await loadSsrApp(context.workdir, context.appName);\n this.logger?.info('[react.application] [ssr] bundle code - loaded');\n\n const expressApp = createExpressSsr({\n name: context.appName,\n workdir: context.workdir,\n port,\n app,\n assets: parseAssets(clientBundle.assets),\n logger: this.logger,\n });\n\n expressApp.listen(port);\n return { port };\n }\n\n private async buildClient(context: AppContext) {\n const htmlConfig: BundlerHtmlConfig[] = [\n {\n title: context.appName,\n templateContent: html(context.appName),\n minify: false,\n favicon: this.favicon,\n },\n ];\n\n // extend, including prototype methods\n const ctx: BundlerContext = Object.assign(Object.create(context), {\n html: htmlConfig,\n targets: [\n {\n entries: await this.getEntries(),\n components: [context.appComponent],\n outputPath: resolve(context.workdir, calcOutputPath(context.appName, 'browser')),\n hostDependencies: await this.getPeers(),\n aliasHostDependencies: true,\n },\n ],\n\n // @ts-ignore\n capsuleNetwork: undefined,\n previousTasksResults: [],\n });\n\n const bundler = await this.reactEnv.getBundler(ctx, [\n (config) => config.merge([clientConfig()]),\n ...this.transformers,\n ]);\n\n const bundleResult = await bundler.run();\n return bundleResult[0];\n }\n\n private async buildSsr(context: AppContext) {\n // extend, including prototype methods\n const ctx: BundlerContext = Object.assign(Object.create(context), {\n ...context,\n targets: [\n {\n entries: await this.getSsrEntries(),\n components: [context.appComponent],\n outputPath: resolve(context.workdir, calcOutputPath(context.appName, 'ssr')),\n hostDependencies: await this.getPeers(),\n aliasHostDependencies: true,\n },\n ],\n\n // @ts-ignore\n capsuleNetwork: undefined,\n previousTasksResults: [],\n });\n\n const bundler = await this.reactEnv.getBundler(ctx, [\n (config) => config.merge([ssrConfig()]),\n ...this.transformers,\n ]);\n\n const bundleResult = await bundler.run();\n return bundleResult[0];\n }\n\n async build(context: AppBuildContext): Promise<ReactAppBuildResult> {\n const htmlConfig: BundlerHtmlConfig[] = [\n {\n title: context.name,\n templateContent: html(context.name),\n minify: false,\n favicon: this.favicon,\n // filename: ''.html`,\n },\n ];\n Object.assign(context, {\n html: htmlConfig,\n });\n const bundler = await this.getBundler(context);\n const bundleResult = await bundler.run();\n\n return computeResults(bundleResult, { publicDir: `${this.getPublicDir(context.artifactsDir)}/${this.dir}` });\n }\n\n private getBundler(context: AppBuildContext) {\n if (this.bundler) return this.bundler;\n return this.getDefaultBundler(context);\n }\n \n private async getDefaultBundler(context: AppBuildContext) {\n const { capsule } = context;\n const reactEnv: ReactEnv = context.env as ReactEnv;\n const publicDir = this.getPublicDir(context.artifactsDir);\n const outputPath = join(capsule.path, publicDir);\n const { distDir } = reactEnv.getCompiler();\n const targetEntries = Array.isArray(this.entry) ? this.entry : await this.entry(`${capsule.path}/${distDir}`);\n const entries = targetEntries.map((entry) => require.resolve(`${capsule.path}/${distDir}/${basename(entry)}`));\n const staticDir = join(outputPath, this.dir);\n\n const bundlerContext: BundlerContext = Object.assign(context, {\n targets: [\n {\n components: [capsule?.component],\n entries,\n outputPath,\n hostRootDir: capsule?.path,\n hostDependencies: await this.getPeers(),\n aliasHostDependencies: true,\n },\n ],\n entry: [],\n rootPath: '/',\n metaData: {\n initiator: `building app: ${context.name}`,\n envId: context.id,\n },\n });\n\n const defaultTransformer: WebpackConfigTransformer = (configMutator) => {\n const config = configMutator.addTopLevel('output', {\n path: staticDir,\n publicPath: `/`,\n filename: '[name].[chunkhash].js',\n });\n if (this.prerender) config.addPlugin(prerenderPlugin(this.prerender));\n if (config.raw.optimization?.minimizer) {\n remove(config.raw.optimization?.minimizer, (minimizer) => {\n return minimizer.constructor.name === 'TerserPlugin';\n });\n\n config.raw.optimization?.minimizer.push(this.getESBuildConfig());\n }\n\n return config;\n };\n const transformers = [defaultTransformer, ...this.transformers];\n const bundler: Bundler = await reactEnv.getBundler(bundlerContext, transformers);\n return bundler;\n }\n private getESBuildConfig = (isPrerendering = this.prerender) => {\n // We don't want to use esbuild in case of prerendering since the headless browser puppeteer doesn't support\n // the output of esbuild\n\n if (isPrerendering) {\n return new TerserPlugin({\n extractComments: false,\n terserOptions: {\n parse: {\n // We want terser to parse ecma 8 code. However, we don't want it\n // to apply any minification steps that turns valid ecma 5 code\n // into invalid ecma 5 code. This is why the 'compress' and 'output'\n // sections only apply transformations that are ecma 5 safe\n // https://github.com/facebook/create-react-app/pull/4234\n ecma: 8,\n },\n compress: {\n ecma: 5,\n warnings: false,\n // Disabled because of an issue with Uglify breaking seemingly valid code:\n // https://github.com/facebook/create-react-app/issues/2376\n // Pending further investigation:\n // https://github.com/mishoo/UglifyJS2/issues/2011\n comparisons: false,\n // Disabled because of an issue with Terser breaking valid code:\n // https://github.com/facebook/create-react-app/issues/5250\n // Pending further investigation:\n // https://github.com/terser-js/terser/issues/120\n inline: 2,\n },\n mangle: {\n safari10: true,\n },\n output: {\n ecma: 5,\n comments: false,\n // Turned on because emoji and regex is not minified properly using default\n // https://github.com/facebook/create-react-app/issues/2488\n ascii_only: true,\n },\n },\n });\n }\n return new TerserPlugin({\n minify: TerserPlugin.esbuildMinify,\n // `terserOptions` options will be passed to `esbuild`\n // Link to options - https://esbuild.github.io/api/#minify\n terserOptions: {\n minify: true,\n },\n });\n };\n\n private getPublicDir(artifactsDir: string) {\n return join(artifactsDir, this.applicationType, this.name);\n }\n\n async getEntries(): Promise<string[]> {\n if (Array.isArray(this.entry)) return this.entry;\n return this.entry();\n }\n\n async getSsrEntries(): Promise<string[]> {\n if (!this.ssr) throw new BitError('tried to build ssr without ssr entries');\n if (typeof this.ssr === 'string') return [this.ssr];\n return [await this.ssr()];\n }\n\n private async getDevServerContext(context: AppContext): Promise<DevServerContext> {\n const entries = await this.getEntries();\n return Object.assign(context, {\n entry: entries,\n rootPath: '',\n publicPath: `public/${this.name}`,\n title: this.name,\n favicon: this.favicon,\n hostDependencies: await this.getPeers(),\n aliasHostDependencies: true,\n });\n }\n\n private getPeers(): Promise<string[]> {\n return this.reactEnv.getPeerDependenciesList();\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Asset } from '@teambit/bundler';
2
+ import { Logger } from '@teambit/logger';
3
+ import type { HtmlAssets } from '@teambit/react.rendering.ssr';
4
+ declare type ExpressSsrOptions = {
5
+ name: string;
6
+ workdir: string;
7
+ port: number;
8
+ app: any;
9
+ assets: HtmlAssets;
10
+ logger?: Logger;
11
+ };
12
+ export declare function createExpressSsr({ name, workdir, port, app, assets, logger }: ExpressSsrOptions): import("express-serve-static-core").Express;
13
+ export declare function loadSsrApp(workdir: string, appName: string): Promise<any>;
14
+ export declare function parseAssets(assets: Asset[], publicPath?: string): HtmlAssets;
15
+ export {};