@teambit/react 0.0.637 → 0.0.641

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 (27) hide show
  1. package/{__compositions-1643599267183.js → __compositions-1644176887286.js} +0 -0
  2. package/{__overview-1643599267183.js → __overview-1644176887286.js} +0 -0
  3. package/{__preview-1643599267183.js → __preview-1644176887286.js} +2 -2
  4. package/artifacts/env-template/public/141.js +1 -1
  5. package/artifacts/env-template/public/181.js +1 -1
  6. package/artifacts/env-template/public/664.js +6 -4
  7. package/artifacts/env-template/public/733.js +1 -0
  8. package/artifacts/env-template/public/848.js +1 -1
  9. package/artifacts/env-template/public/assets-manifest.json +12 -12
  10. package/artifacts/env-template/public/compositions.7b2ba445c34f45f78ad2.js +1 -0
  11. package/artifacts/env-template/public/compositions.html +1 -1
  12. package/artifacts/env-template/public/{overview.70a38b25d58dc227f9c6.js → overview.0042d4096ae1562205ca.js} +1 -1
  13. package/artifacts/env-template/public/overview.html +1 -1
  14. package/artifacts/env-template/public/preview-root.b7c3405a276c5fb44ba9.js +1 -0
  15. package/artifacts/env-template/public/service-worker.js +1 -1
  16. package/artifacts/env-template/public/static/css/664.fd0bd83a.css +1 -0
  17. package/artifacts/env-template/public/static/css/{previewRoot.5ad41161.css → previewRoot.1262db93.css} +1 -1
  18. package/artifacts/preview/teambit_react_react-preview.js +1 -1
  19. package/dist/react.main.runtime.d.ts +2 -2
  20. package/dist/react.main.runtime.js.map +1 -1
  21. package/package-tar/teambit-react-0.0.641.tgz +0 -0
  22. package/package.json +31 -31
  23. package/artifacts/env-template/public/287.js +0 -1
  24. package/artifacts/env-template/public/compositions.584df38a8a0ec2c1e849.js +0 -1
  25. package/artifacts/env-template/public/preview-root.344bfad0432988cf6b3e.js +0 -1
  26. package/artifacts/env-template/public/static/css/664.e8cc4753.css +0 -1
  27. package/package-tar/teambit-react-0.0.637.tgz +0 -0
@@ -1 +1 @@
1
- !function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t():"function"===typeof define&&define.amd?define([],t):"object"===typeof exports?exports["teambit.react/react-preview"]=t():e["teambit.react/react-preview"]=t()}(self,(function(){return(()=>{var e={8244:e=>{e.exports=function(e){return e&&e.__esModule?e:{default:e}}},3626:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});n(3804);var a=n(5057),r=n(8459),o=n(2140),i=["components"];function s(){return s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},s.apply(this,arguments)}function m(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c={};function p(e){var t=e.components,n=m(e,i);return(0,a.mdx)("wrapper",s({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.mdx)(r.MDXScopeProvider,{components:{ReactAspect:o.a},mdxType:"MDXScopeProvider"},(0,a.mdx)(o.a,{mdxType:"ReactAspect"})))}p.isMDXComponent=!0},2140:(e,t,n)=>{"use strict";Object.defineProperty(t,"a",{enumerable:!0,get:function(){return a.default}});var a=r(n(4869));function r(e){return e&&e.__esModule?e:{default:e}}r.__bit_component={id:"teambit.react/aspect-docs/react@0.0.131",homepage:"https://bit.dev/teambit/react/aspect-docs/react",exported:!0}},4869:(e,t,n)=>{"use strict";var a={id:"teambit.react/aspect-docs/react@0.0.131",homepage:"https://bit.dev/teambit/react/aspect-docs/react",exported:!0};Object.defineProperty(t,"__esModule",{value:!0}),t.default=l;s(n(3804));var r=n(5057),o=n(8459),i=["components"];function s(e){return e&&e.__esModule?e:{default:e}}function m(){return m=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},m.apply(this,arguments)}function c(e,t){if(null==e)return{};var n,a,r=p(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function p(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}s.__bit_component=a,m.__bit_component=a,c.__bit_component=a,p.__bit_component=a;var d={};function l(e){var t=e.components,n=c(e,i);return(0,r.mdx)("wrapper",m({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.mdx)(o.MDXScopeProvider,{components:{},mdxType:"MDXScopeProvider"},(0,r.mdx)("p",null,"The built-in ",(0,r.mdx)("a",{parentName:"p",href:"https://bit.dev/teambit/react/react"},"React Component Development Environment")," is a concrete composition of the ",(0,r.mdx)("a",{parentName:"p",href:"https://bit.dev/teambit/envs/envs"},"Env Aspect"),". It compose different tools and configs that fit practices implemented in ",(0,r.mdx)("a",{parentName:"p",href:"https://create-react-app.dev"},"Create React App"),". Use it when getting started with React components with Bit and later as a base for any future customization of your React-based workflow."),(0,r.mdx)("h2",null,"Use React environment"),(0,r.mdx)("p",null,"To use this environment for your components, add it to any of the ",(0,r.mdx)("inlineCode",{parentName:"p"},"variants")," in your ",(0,r.mdx)("inlineCode",{parentName:"p"},"workspace.jsonc")," file as follows:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json",metastring:'title="workspace.jsonc"',title:'"workspace.jsonc"'},'{\n "teambit.workspace/variants": {\n "some/path": {\n "teambit.react/react": {}\n }\n }\n}\n')),(0,r.mdx)("h2",null,"Create React components"),(0,r.mdx)("p",null,"React implements several component templates:"),(0,r.mdx)("ul",null,(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("inlineCode",{parentName:"li"},"react-component")," a basic React UI component."),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("inlineCode",{parentName:"li"},"react-context")," a react context component."),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("inlineCode",{parentName:"li"},"react-hook")," a react hook component."),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("inlineCode",{parentName:"li"},"mdx-component")," an MDX component."),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("inlineCode",{parentName:"li"},"react-component-js")," a basic React component in JS."),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("inlineCode",{parentName:"li"},"react-env")," boilerplate for a customized environment configuration.")),(0,r.mdx)("p",null,"Use any of these templates with the ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit create")," command:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-sh"},"bit create <template name> [components...]\n")),(0,r.mdx)("h2",null,"Runtime (framework) dependencies"),(0,r.mdx)("p",null,"As with many Frontend frameworks React requires a singleton instance in your app's runtime. When building reuseable components that means setting ",(0,r.mdx)("inlineCode",{parentName:"p"},"react")," and ",(0,r.mdx)("inlineCode",{parentName:"p"},"react-dom")," as ",(0,r.mdx)("inlineCode",{parentName:"p"},"peerDependencies"),", thus allowing the consuming app to determine the runtime version. Bit's base React environment implements this via the ",(0,r.mdx)("strong",{parentName:"p"},"Dependencies")," service which is used to override ",(0,r.mdx)("a",{parentName:"p",href:"https://bit.dev/teambit/dependencies/dependency-resolver"},"dependency-resolver")," and set your preferred dependencies.\nIt is recommended for you to extend the base React environment and define a semantic version rule and range to fit your current tech stack and guidelines for reuseable React components."),(0,r.mdx)("h2",null,"Development services"),(0,r.mdx)("p",null,"React, like all other Bit Environments must implement a set of Service Handlers. Each service corresponds to a specific tool or stage in the component life-cycle, with a default config as set by the base React environment:"),(0,r.mdx)("table",null,(0,r.mdx)("thead",{parentName:"table"},(0,r.mdx)("tr",{parentName:"thead"},(0,r.mdx)("th",{parentName:"tr",align:null},"Service"),(0,r.mdx)("th",{parentName:"tr",align:null},"Aspect"),(0,r.mdx)("th",{parentName:"tr",align:null},"Base Configuration"))),(0,r.mdx)("tbody",{parentName:"table"},(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Compilation"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/typescript/typescript"},"TypeScript")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/typescript/tsconfig.json"},"tsconfig.json"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Testing"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("strong",{parentName:"td"},"Jest")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/jest/jest.config.js"},"jest.config.js"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Linting"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("strong",{parentName:"td"},"ESLint")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/eslint/eslintrc.ts"},"eslintrc.ts"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"DevServer"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("strong",{parentName:"td"},"Webpack")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/webpack/webpack.config.preview.dev.ts"},"webpack.config.preview.dev.ts"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Preview (simulation)"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("strong",{parentName:"td"},"Webpack")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/webpack/webpack.config.preview.ts"},"webpack.config.preview.ts"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Package"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("strong",{parentName:"td"},"PKG")),(0,r.mdx)("td",{parentName:"tr",align:null},"Base ",(0,r.mdx)("inlineCode",{parentName:"td"},"package.json")," props from ",(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/typescript/typescript/~code/typescript.main.runtime.ts"},"TypeScript Aspect"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Bundling"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("strong",{parentName:"td"},"Webpack")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/webpack/webpack.config.preview.ts"},"webpack.config.preview.ts"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Documentation"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("em",{parentName:"td"},"Core implementation")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/docs/index.tsx"},"Docs template"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Build pipeline"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/pipelines/builder"},"Builder")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/react.env.ts"},"Build pipeline"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Dependencies"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("em",{parentName:"td"},"Core implementation")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/react.env.ts"},"Env-dependencies"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Component Generator"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/generator/generator"},"Generator")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/templates/react-component.ts"},"example template"))))),(0,r.mdx)("h2",null,"Customize environment"),(0,r.mdx)("p",null,"All environments are extendible. You can take any pre-existing environment, and create a component to extend it, creating a customized environment. That customized environment can use APIs from the environment it is extending to:"),(0,r.mdx)("ul",null,(0,r.mdx)("li",{parentName:"ul"},"Override default configurations."),(0,r.mdx)("li",{parentName:"ul"},"Replace composed tools with others (for example - use Babel to transpile instead of TypeScript)."),(0,r.mdx)("li",{parentName:"ul"},"Add new services and capabilities.")),(0,r.mdx)("h3",null,"Create an extension"),(0,r.mdx)("p",null,"The first step is to create a component that extends React. Use the ",(0,r.mdx)("inlineCode",{parentName:"p"},"react-env")," template from React env."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-sh"},"bit create react-env extensions/custom-react\n")),(0,r.mdx)("p",null,"As with any component, environments must themselves have an environment which compiles, builds, transpiles, etc, them. Bit has a special environment that knows how to create other environments - ",(0,r.mdx)("inlineCode",{parentName:"p"},"teambit.harmony/aspect"),". So for any component that is meant to be a Bit environment, you must set ",(0,r.mdx)("inlineCode",{parentName:"p"},"teambit.harmony/aspect")," as the environment for that component."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json",metastring:'title="add variant for the extension and set the aspect env"',title:'"add',variant:!0,for:!0,the:!0,extension:!0,and:!0,set:!0,aspect:!0,'env"':!0},'{\n //...\n "teambit.workspace/variants": {\n //...\n "extensions/custom-react": {\n "teambit.harmony/aspect": {}\n }\n //...\n }\n}\n')),(0,r.mdx)("p",null,"Validate the above by running ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit env")," and see that the extension-component has ",(0,r.mdx)("inlineCode",{parentName:"p"},"teambit.harmony/aspect")," set as its environment."),(0,r.mdx)("p",null,"Now that you have a basic customized extension to start from, you can go ahead and configure it for your components in ",(0,r.mdx)("inlineCode",{parentName:"p"},"workspace.json"),":"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json",metastring:'title="edit variants and set the new env"',title:'"edit',variants:!0,and:!0,set:!0,the:!0,new:!0,'env"':!0},'{\n //...\n "teambit.workspace/variants": {\n //...\n "[some]/[variant]": {\n "[yourscope]/extensions/custom-react": {}\n }\n //...\n }\n}\n')),(0,r.mdx)("h3",null,"Customize configuration"),(0,r.mdx)("p",null,"React implements a set of APIs you can use to merge your preferred configuration with its defaults. These APIs are called ",(0,r.mdx)("strong",{parentName:"p"},"transformers")," and they all start with the ",(0,r.mdx)("inlineCode",{parentName:"p"},"override")," pre-fix. Find ",(0,r.mdx)("a",{parentName:"p",href:"#transformers-api-docs"},"Available transformers here"),".\nIn case of a conflict, your config will override the default."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-typescript",metastring:'{4,14} title="Customized TypeScript configuration"',"{4,14}":!0,title:'"Customized',TypeScript:!0,'configuration"':!0},"import { EnvsMain, EnvsAspect } from '@teambit/envs';\nimport { ReactAspect, ReactMain } from '@teambit/react';\n\nconst tsconfig = require('./typescript/tsconfig.json');\n\nexport class CustomReactExtension {\n constructor(private react: ReactMain) {}\n\n static dependencies: any = [EnvsAspect, ReactAspect];\n\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const customReactEnv = react.compose([react.overrideTsConfig(tsconfig)]);\n\n envs.registerEnv(customReactEnv);\n\n return new CustomReactExtension(react);\n }\n}\n")),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"To override any specific configuration it's recommended to create a separate config file with your customized configuration and import it into the main ",(0,r.mdx)("inlineCode",{parentName:"p"},".extension.ts")," file where you can supply it to the relevant ",(0,r.mdx)("strong",{parentName:"p"},"transformers"),". See the tsconfig example in the above snippet.")),(0,r.mdx)("h3",null,"Composing tools and services"),(0,r.mdx)("p",null,"Environments use Environment Services by implementing a special class of methods called Service Handlers.\nThe supplied transformers allow overriding of these services - for instance the ",(0,r.mdx)("inlineCode",{parentName:"p"},"overrideCompiler")," transformer allows overriding the environment's ",(0,r.mdx)("inlineCode",{parentName:"p"},"getCompiler()")," method."),(0,r.mdx)("p",null,"The below example uses the ",(0,r.mdx)("inlineCode",{parentName:"p"},"overrideCompiler")," transformer to override the ",(0,r.mdx)("inlineCode",{parentName:"p"},"getCompiler()")," Service Handler to change the compilation service."),(0,r.mdx)("ol",null,(0,r.mdx)("li",{parentName:"ol"},"Add a Babel config file to your custom environment and import/require it in your ",(0,r.mdx)("inlineCode",{parentName:"li"},".extension")," file"),(0,r.mdx)("li",{parentName:"ol"},"Create a new Babel compiler using the Babel aspect, and initialize it with the above babelConfig"),(0,r.mdx)("li",{parentName:"ol"},"Use the ",(0,r.mdx)("inlineCode",{parentName:"li"},"compose")," Env API to apply the compiler override transformer and add Babel as a transpiler in the environment")),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-typescript",metastring:"{3,5,10-12,15,17-18,22-23}","{3,5,10-12,15,17-18,22-23}":!0},"import { EnvsMain, EnvsAspect } from '@teambit/envs';\nimport { ReactAspect, ReactMain } from '@teambit/react';\nimport { BabelAspect, BabelMain } from '@teambit/babel';\n\nconst babelConfig = require('./babel/babel.config');\n\nexport class CustomReactExtension {\n constructor(private react: ReactMain) {}\n\n static dependencies: any = [EnvsAspect, ReactAspect, BabelAspect];\n\n static async provider([envs, react, babel]: [EnvsMain, ReactMain, BabelMain]) {\n const babelCompiler = babel.createCompiler({\n babelTransformOptions: babelConfig,\n });\n\n const customReactEnv = react.compose([\n react.overrideCompiler(babelCompiler),\n react.overrideCompilerTasks([babelCompiler.createTask()]),\n ]);\n\n envs.registerEnv(customReactEnv);\n return new CustomReactExtension(react);\n }\n}\n")),(0,r.mdx)("h3",null,"Transformers API docs"),(0,r.mdx)("p",null,"Use these APIs to customize the base React environment default configuration with your extension. ",(0,r.mdx)("a",{parentName:"p",href:"#customizing-configuration"},"Read more here"),"."),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overrideTsConfig(tsconfig: TsConfigSourceFile): EnvTransformer")),(0,r.mdx)("p",null,"Merges the environment's default TypeScript configuration with the contents of your ",(0,r.mdx)("a",{parentName:"p",href:"https://www.typescriptlang.org/handbook/tsconfig-json.html"},"typescript configuration file"),".\nThis config affects the transpilation carried out when rendering components on the local dev UI. To override the config used when building components, use ",(0,r.mdx)("inlineCode",{parentName:"p"},"overrideBuildTsConfig")," below."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\nconst tsconfig = require('./typescript/tsconfig.json');\nexport class ReactExtension {\n// ...\n\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const newReactEnv = react.compose([\n react.overrideTsConfig(tsconfig)\n ]);\n}\n// ...\n")),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overrideBuildTsConfig(tsconfig: TsConfigSourceFile): EnvTransformer")),(0,r.mdx)("p",null,"Merges the environment's default TypeScript configuration with the contents of your ",(0,r.mdx)("a",{parentName:"p",href:"https://www.typescriptlang.org/handbook/tsconfig-json.html"},"typescript configuration file"),".\nThis config affects transpilation of component code during the build process, i.e. in preparation for packaging and exporting the component. To override the local ts config used when rendering components in the local UI, please use ",(0,r.mdx)("inlineCode",{parentName:"p"},"overrideTsConfig")," above."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\nconst tsconfig = require('./typescript/tsconfig.json');\nexport class ReactExtension {\n// ...\n\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const newReactEnv = react.compose([\n react.overrideTsConfig(tsconfig)\n ]);\n}\n// ...\n")),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overridePreviewConfig(config: Configuration): EnvTransformer")),(0,r.mdx)("p",null,"Merges the Webpack configuration for the 'Preview' environment service, with the contents of your ",(0,r.mdx)("a",{parentName:"p",href:"https://webpack.js.org/configuration/"},"webpack configuration file"),".\nThis webpack configuration is used for building and rendering your components for production (during ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit tag")," or ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit build"),")."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\nconst webpackConfig = require('./webpack/webpack.config');\nexport class ReactExtension {\n// ...\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const newReactEnv = react.compose([\n react.overridePreviewConfig(webpackConfig)\n ]);\n}\n// ...\n")),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overrideDevServerConfig(config: Configuration): EnvTransformer")),(0,r.mdx)("p",null,"Merges the Webpack configuration for the 'DevServer' environment service, with the contents of your ",(0,r.mdx)("a",{parentName:"p",href:"https://webpack.js.org/configuration/"},"webpack configuration file"),".\nThis configuration is used for building and rendering your components in the local dev server."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\nconst webpackConfig = require('./webpack/webpack.config');\nexport class ReactExtension {\n// ...\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const newReactEnv = react.compose([\n react.overrideDevServerConfig(webpackConfig)\n ]);\n}\n// ...\n")),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overrideJestConfig(jestConfigPath: string): EnvTransformer")),(0,r.mdx)("p",null,"Merges the default configuration for the Jest test runner with the contents of your (",(0,r.mdx)("a",{parentName:"p",href:"https://jestjs.io/en/configuration"},"jest.config configuration file"),")."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\nconst jestConfig = require.resolve('./jest/jest.config');\nexport class ReactExtension {\n// ...\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const newReactEnv = react.compose([\n react.overrideJestConfig(jestConfig)\n ]);\n}\n// ...\n")),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overrideBuildPipe(tasks: BuildTask[]): EnvTransformer")),(0,r.mdx)("p",null,"This method receives an array of build tasks. It merges the provided tasks with the environment's default build pipeline (initiated either on a ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit tag")," or ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit build")," command)."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\n// Import the task\nimport { CustomTask } from './custom.task';\nexport class CustomReact {\n // ...\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n // Get the environment's default build pipeline using the 'getBuildPipe' service handler\n const reactPipe = react.env.getBuildPipe();\n // Add the custom task to the end of the build tasks sequence.\n const tasks = [...reactPipe, new CustomTask()];\n const newReactEnv = react.compose([react.overrideBuildPipe(tasks)]);\n // ...\n }\n}\n")),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overrideDependencies(dependencyPolicy: DependenciesPolicy): EnvTransformer")),(0,r.mdx)("p",null,"This method receives a dependency-policy object and merges it with the environment's default dependency policy for components using this environment.\nEach key-value pair in a dependency-policy object signifies the package and the version to be used. Use also the ",(0,r.mdx)("inlineCode",{parentName:"p"},"-")," and ",(0,r.mdx)("inlineCode",{parentName:"p"},"+")," notation to signify a module should moved between dependency types (dev, peer or standard)."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\nconst newDependencies = {\n dependencies: {\n react: '-',\n },\n devDependencies: {\n '@types/jest': '~26.0.9',\n },\n peerDependencies: {\n react: '^17.0.2',\n },\n};\n\nexport class CustomReact {\n // ...\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const newReactEnv = react.compose([react.overrideDependencies(newDependencies)]);\n // ...\n }\n}\n")),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"The above example shows the 'React' library being removed as a (runtime) dependency and added as a peer dependency.")),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overridePackageJsonProps(props: PackageJsonProps): EnvTransformer")),(0,r.mdx)("p",null,"Merges the provide props with the default properties added to the ",(0,r.mdx)("inlineCode",{parentName:"p"},"package.json")," file of every package generated from components using this environment."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\nconst newPackageProps = {\n main: 'dist/{main}.js',\n types: '{main}.ts',\n};\n\nexport class CustomReact {\n // ...\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const newReactEnv = react.compose([react.overridePackageJsonProps(newPackageProps)]);\n // ...\n }\n}\n"))))}l.__bit_component=a,l.isMDXComponent=!0},2190:(e,t,n)=>{"use strict";var a={id:"teambit.react/react@0.0.637",homepage:"https://bit.dev/teambit/react/react",exported:!0},r=n(8244);function o(){const e=r(n(3804));return o=function(){return e},e}Object.defineProperty(t,"__esModule",{value:!0}),t.Logo=void 0,o.__bit_component=a;const i=()=>o().default.createElement("div",{style:{height:"100%",display:"flex",justifyContent:"center"}},o().default.createElement("img",{style:{width:70},src:"https://static.bit.dev/brands/logo-react.svg"}));i.__bit_component=a,t.Logo=i},5057:e=>{"use strict";e.exports=MdxJsReact},3804:e=>{"use strict";e.exports=React},8459:e=>{"use strict";e.exports=TeambitMdxUiMdxScopeContext}},t={};function n(a){var r=t[a];if(void 0!==r)return r.exports;var o=t[a]={exports:{}};return e[a](o,o.exports,n),o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};return(()=>{"use strict";n.r(a),n.d(a,{compositions:()=>e,overview:()=>t});const e=[n(2190)],t=[n(3626)]})(),a})()}));
1
+ !function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t():"function"===typeof define&&define.amd?define([],t):"object"===typeof exports?exports["teambit.react/react-preview"]=t():e["teambit.react/react-preview"]=t()}(self,(function(){return(()=>{var e={8244:e=>{e.exports=function(e){return e&&e.__esModule?e:{default:e}}},273:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});n(3804);var a=n(5057),r=n(8459),o=n(2140),i=["components"];function s(){return s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},s.apply(this,arguments)}function m(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c={};function p(e){var t=e.components,n=m(e,i);return(0,a.mdx)("wrapper",s({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.mdx)(r.MDXScopeProvider,{components:{ReactAspect:o.a},mdxType:"MDXScopeProvider"},(0,a.mdx)(o.a,{mdxType:"ReactAspect"})))}p.isMDXComponent=!0},2140:(e,t,n)=>{"use strict";Object.defineProperty(t,"a",{enumerable:!0,get:function(){return a.default}});var a=r(n(4869));function r(e){return e&&e.__esModule?e:{default:e}}r.__bit_component={id:"teambit.react/aspect-docs/react@0.0.131",homepage:"https://bit.dev/teambit/react/aspect-docs/react",exported:!0}},4869:(e,t,n)=>{"use strict";var a={id:"teambit.react/aspect-docs/react@0.0.131",homepage:"https://bit.dev/teambit/react/aspect-docs/react",exported:!0};Object.defineProperty(t,"__esModule",{value:!0}),t.default=l;s(n(3804));var r=n(5057),o=n(8459),i=["components"];function s(e){return e&&e.__esModule?e:{default:e}}function m(){return m=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},m.apply(this,arguments)}function c(e,t){if(null==e)return{};var n,a,r=p(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function p(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}s.__bit_component=a,m.__bit_component=a,c.__bit_component=a,p.__bit_component=a;var d={};function l(e){var t=e.components,n=c(e,i);return(0,r.mdx)("wrapper",m({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.mdx)(o.MDXScopeProvider,{components:{},mdxType:"MDXScopeProvider"},(0,r.mdx)("p",null,"The built-in ",(0,r.mdx)("a",{parentName:"p",href:"https://bit.dev/teambit/react/react"},"React Component Development Environment")," is a concrete composition of the ",(0,r.mdx)("a",{parentName:"p",href:"https://bit.dev/teambit/envs/envs"},"Env Aspect"),". It compose different tools and configs that fit practices implemented in ",(0,r.mdx)("a",{parentName:"p",href:"https://create-react-app.dev"},"Create React App"),". Use it when getting started with React components with Bit and later as a base for any future customization of your React-based workflow."),(0,r.mdx)("h2",null,"Use React environment"),(0,r.mdx)("p",null,"To use this environment for your components, add it to any of the ",(0,r.mdx)("inlineCode",{parentName:"p"},"variants")," in your ",(0,r.mdx)("inlineCode",{parentName:"p"},"workspace.jsonc")," file as follows:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json",metastring:'title="workspace.jsonc"',title:'"workspace.jsonc"'},'{\n "teambit.workspace/variants": {\n "some/path": {\n "teambit.react/react": {}\n }\n }\n}\n')),(0,r.mdx)("h2",null,"Create React components"),(0,r.mdx)("p",null,"React implements several component templates:"),(0,r.mdx)("ul",null,(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("inlineCode",{parentName:"li"},"react-component")," a basic React UI component."),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("inlineCode",{parentName:"li"},"react-context")," a react context component."),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("inlineCode",{parentName:"li"},"react-hook")," a react hook component."),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("inlineCode",{parentName:"li"},"mdx-component")," an MDX component."),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("inlineCode",{parentName:"li"},"react-component-js")," a basic React component in JS."),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("inlineCode",{parentName:"li"},"react-env")," boilerplate for a customized environment configuration.")),(0,r.mdx)("p",null,"Use any of these templates with the ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit create")," command:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-sh"},"bit create <template name> [components...]\n")),(0,r.mdx)("h2",null,"Runtime (framework) dependencies"),(0,r.mdx)("p",null,"As with many Frontend frameworks React requires a singleton instance in your app's runtime. When building reuseable components that means setting ",(0,r.mdx)("inlineCode",{parentName:"p"},"react")," and ",(0,r.mdx)("inlineCode",{parentName:"p"},"react-dom")," as ",(0,r.mdx)("inlineCode",{parentName:"p"},"peerDependencies"),", thus allowing the consuming app to determine the runtime version. Bit's base React environment implements this via the ",(0,r.mdx)("strong",{parentName:"p"},"Dependencies")," service which is used to override ",(0,r.mdx)("a",{parentName:"p",href:"https://bit.dev/teambit/dependencies/dependency-resolver"},"dependency-resolver")," and set your preferred dependencies.\nIt is recommended for you to extend the base React environment and define a semantic version rule and range to fit your current tech stack and guidelines for reuseable React components."),(0,r.mdx)("h2",null,"Development services"),(0,r.mdx)("p",null,"React, like all other Bit Environments must implement a set of Service Handlers. Each service corresponds to a specific tool or stage in the component life-cycle, with a default config as set by the base React environment:"),(0,r.mdx)("table",null,(0,r.mdx)("thead",{parentName:"table"},(0,r.mdx)("tr",{parentName:"thead"},(0,r.mdx)("th",{parentName:"tr",align:null},"Service"),(0,r.mdx)("th",{parentName:"tr",align:null},"Aspect"),(0,r.mdx)("th",{parentName:"tr",align:null},"Base Configuration"))),(0,r.mdx)("tbody",{parentName:"table"},(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Compilation"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/typescript/typescript"},"TypeScript")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/typescript/tsconfig.json"},"tsconfig.json"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Testing"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("strong",{parentName:"td"},"Jest")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/jest/jest.config.js"},"jest.config.js"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Linting"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("strong",{parentName:"td"},"ESLint")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/eslint/eslintrc.ts"},"eslintrc.ts"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"DevServer"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("strong",{parentName:"td"},"Webpack")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/webpack/webpack.config.preview.dev.ts"},"webpack.config.preview.dev.ts"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Preview (simulation)"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("strong",{parentName:"td"},"Webpack")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/webpack/webpack.config.preview.ts"},"webpack.config.preview.ts"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Package"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("strong",{parentName:"td"},"PKG")),(0,r.mdx)("td",{parentName:"tr",align:null},"Base ",(0,r.mdx)("inlineCode",{parentName:"td"},"package.json")," props from ",(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/typescript/typescript/~code/typescript.main.runtime.ts"},"TypeScript Aspect"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Bundling"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("strong",{parentName:"td"},"Webpack")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/webpack/webpack.config.preview.ts"},"webpack.config.preview.ts"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Documentation"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("em",{parentName:"td"},"Core implementation")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/docs/index.tsx"},"Docs template"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Build pipeline"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/pipelines/builder"},"Builder")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/react.env.ts"},"Build pipeline"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Dependencies"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("em",{parentName:"td"},"Core implementation")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/react.env.ts"},"Env-dependencies"))),(0,r.mdx)("tr",{parentName:"tbody"},(0,r.mdx)("td",{parentName:"tr",align:null},"Component Generator"),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/generator/generator"},"Generator")),(0,r.mdx)("td",{parentName:"tr",align:null},(0,r.mdx)("a",{parentName:"td",href:"https://bit.dev/teambit/react/react/~code/templates/react-component.ts"},"example template"))))),(0,r.mdx)("h2",null,"Customize environment"),(0,r.mdx)("p",null,"All environments are extendible. You can take any pre-existing environment, and create a component to extend it, creating a customized environment. That customized environment can use APIs from the environment it is extending to:"),(0,r.mdx)("ul",null,(0,r.mdx)("li",{parentName:"ul"},"Override default configurations."),(0,r.mdx)("li",{parentName:"ul"},"Replace composed tools with others (for example - use Babel to transpile instead of TypeScript)."),(0,r.mdx)("li",{parentName:"ul"},"Add new services and capabilities.")),(0,r.mdx)("h3",null,"Create an extension"),(0,r.mdx)("p",null,"The first step is to create a component that extends React. Use the ",(0,r.mdx)("inlineCode",{parentName:"p"},"react-env")," template from React env."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-sh"},"bit create react-env extensions/custom-react\n")),(0,r.mdx)("p",null,"As with any component, environments must themselves have an environment which compiles, builds, transpiles, etc, them. Bit has a special environment that knows how to create other environments - ",(0,r.mdx)("inlineCode",{parentName:"p"},"teambit.harmony/aspect"),". So for any component that is meant to be a Bit environment, you must set ",(0,r.mdx)("inlineCode",{parentName:"p"},"teambit.harmony/aspect")," as the environment for that component."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json",metastring:'title="add variant for the extension and set the aspect env"',title:'"add',variant:!0,for:!0,the:!0,extension:!0,and:!0,set:!0,aspect:!0,'env"':!0},'{\n //...\n "teambit.workspace/variants": {\n //...\n "extensions/custom-react": {\n "teambit.harmony/aspect": {}\n }\n //...\n }\n}\n')),(0,r.mdx)("p",null,"Validate the above by running ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit env")," and see that the extension-component has ",(0,r.mdx)("inlineCode",{parentName:"p"},"teambit.harmony/aspect")," set as its environment."),(0,r.mdx)("p",null,"Now that you have a basic customized extension to start from, you can go ahead and configure it for your components in ",(0,r.mdx)("inlineCode",{parentName:"p"},"workspace.json"),":"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json",metastring:'title="edit variants and set the new env"',title:'"edit',variants:!0,and:!0,set:!0,the:!0,new:!0,'env"':!0},'{\n //...\n "teambit.workspace/variants": {\n //...\n "[some]/[variant]": {\n "[yourscope]/extensions/custom-react": {}\n }\n //...\n }\n}\n')),(0,r.mdx)("h3",null,"Customize configuration"),(0,r.mdx)("p",null,"React implements a set of APIs you can use to merge your preferred configuration with its defaults. These APIs are called ",(0,r.mdx)("strong",{parentName:"p"},"transformers")," and they all start with the ",(0,r.mdx)("inlineCode",{parentName:"p"},"override")," pre-fix. Find ",(0,r.mdx)("a",{parentName:"p",href:"#transformers-api-docs"},"Available transformers here"),".\nIn case of a conflict, your config will override the default."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-typescript",metastring:'{4,14} title="Customized TypeScript configuration"',"{4,14}":!0,title:'"Customized',TypeScript:!0,'configuration"':!0},"import { EnvsMain, EnvsAspect } from '@teambit/envs';\nimport { ReactAspect, ReactMain } from '@teambit/react';\n\nconst tsconfig = require('./typescript/tsconfig.json');\n\nexport class CustomReactExtension {\n constructor(private react: ReactMain) {}\n\n static dependencies: any = [EnvsAspect, ReactAspect];\n\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const customReactEnv = react.compose([react.overrideTsConfig(tsconfig)]);\n\n envs.registerEnv(customReactEnv);\n\n return new CustomReactExtension(react);\n }\n}\n")),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"To override any specific configuration it's recommended to create a separate config file with your customized configuration and import it into the main ",(0,r.mdx)("inlineCode",{parentName:"p"},".extension.ts")," file where you can supply it to the relevant ",(0,r.mdx)("strong",{parentName:"p"},"transformers"),". See the tsconfig example in the above snippet.")),(0,r.mdx)("h3",null,"Composing tools and services"),(0,r.mdx)("p",null,"Environments use Environment Services by implementing a special class of methods called Service Handlers.\nThe supplied transformers allow overriding of these services - for instance the ",(0,r.mdx)("inlineCode",{parentName:"p"},"overrideCompiler")," transformer allows overriding the environment's ",(0,r.mdx)("inlineCode",{parentName:"p"},"getCompiler()")," method."),(0,r.mdx)("p",null,"The below example uses the ",(0,r.mdx)("inlineCode",{parentName:"p"},"overrideCompiler")," transformer to override the ",(0,r.mdx)("inlineCode",{parentName:"p"},"getCompiler()")," Service Handler to change the compilation service."),(0,r.mdx)("ol",null,(0,r.mdx)("li",{parentName:"ol"},"Add a Babel config file to your custom environment and import/require it in your ",(0,r.mdx)("inlineCode",{parentName:"li"},".extension")," file"),(0,r.mdx)("li",{parentName:"ol"},"Create a new Babel compiler using the Babel aspect, and initialize it with the above babelConfig"),(0,r.mdx)("li",{parentName:"ol"},"Use the ",(0,r.mdx)("inlineCode",{parentName:"li"},"compose")," Env API to apply the compiler override transformer and add Babel as a transpiler in the environment")),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-typescript",metastring:"{3,5,10-12,15,17-18,22-23}","{3,5,10-12,15,17-18,22-23}":!0},"import { EnvsMain, EnvsAspect } from '@teambit/envs';\nimport { ReactAspect, ReactMain } from '@teambit/react';\nimport { BabelAspect, BabelMain } from '@teambit/babel';\n\nconst babelConfig = require('./babel/babel.config');\n\nexport class CustomReactExtension {\n constructor(private react: ReactMain) {}\n\n static dependencies: any = [EnvsAspect, ReactAspect, BabelAspect];\n\n static async provider([envs, react, babel]: [EnvsMain, ReactMain, BabelMain]) {\n const babelCompiler = babel.createCompiler({\n babelTransformOptions: babelConfig,\n });\n\n const customReactEnv = react.compose([\n react.overrideCompiler(babelCompiler),\n react.overrideCompilerTasks([babelCompiler.createTask()]),\n ]);\n\n envs.registerEnv(customReactEnv);\n return new CustomReactExtension(react);\n }\n}\n")),(0,r.mdx)("h3",null,"Transformers API docs"),(0,r.mdx)("p",null,"Use these APIs to customize the base React environment default configuration with your extension. ",(0,r.mdx)("a",{parentName:"p",href:"#customizing-configuration"},"Read more here"),"."),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overrideTsConfig(tsconfig: TsConfigSourceFile): EnvTransformer")),(0,r.mdx)("p",null,"Merges the environment's default TypeScript configuration with the contents of your ",(0,r.mdx)("a",{parentName:"p",href:"https://www.typescriptlang.org/handbook/tsconfig-json.html"},"typescript configuration file"),".\nThis config affects the transpilation carried out when rendering components on the local dev UI. To override the config used when building components, use ",(0,r.mdx)("inlineCode",{parentName:"p"},"overrideBuildTsConfig")," below."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\nconst tsconfig = require('./typescript/tsconfig.json');\nexport class ReactExtension {\n// ...\n\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const newReactEnv = react.compose([\n react.overrideTsConfig(tsconfig)\n ]);\n}\n// ...\n")),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overrideBuildTsConfig(tsconfig: TsConfigSourceFile): EnvTransformer")),(0,r.mdx)("p",null,"Merges the environment's default TypeScript configuration with the contents of your ",(0,r.mdx)("a",{parentName:"p",href:"https://www.typescriptlang.org/handbook/tsconfig-json.html"},"typescript configuration file"),".\nThis config affects transpilation of component code during the build process, i.e. in preparation for packaging and exporting the component. To override the local ts config used when rendering components in the local UI, please use ",(0,r.mdx)("inlineCode",{parentName:"p"},"overrideTsConfig")," above."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\nconst tsconfig = require('./typescript/tsconfig.json');\nexport class ReactExtension {\n// ...\n\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const newReactEnv = react.compose([\n react.overrideTsConfig(tsconfig)\n ]);\n}\n// ...\n")),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overridePreviewConfig(config: Configuration): EnvTransformer")),(0,r.mdx)("p",null,"Merges the Webpack configuration for the 'Preview' environment service, with the contents of your ",(0,r.mdx)("a",{parentName:"p",href:"https://webpack.js.org/configuration/"},"webpack configuration file"),".\nThis webpack configuration is used for building and rendering your components for production (during ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit tag")," or ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit build"),")."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\nconst webpackConfig = require('./webpack/webpack.config');\nexport class ReactExtension {\n// ...\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const newReactEnv = react.compose([\n react.overridePreviewConfig(webpackConfig)\n ]);\n}\n// ...\n")),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overrideDevServerConfig(config: Configuration): EnvTransformer")),(0,r.mdx)("p",null,"Merges the Webpack configuration for the 'DevServer' environment service, with the contents of your ",(0,r.mdx)("a",{parentName:"p",href:"https://webpack.js.org/configuration/"},"webpack configuration file"),".\nThis configuration is used for building and rendering your components in the local dev server."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\nconst webpackConfig = require('./webpack/webpack.config');\nexport class ReactExtension {\n// ...\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const newReactEnv = react.compose([\n react.overrideDevServerConfig(webpackConfig)\n ]);\n}\n// ...\n")),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overrideJestConfig(jestConfigPath: string): EnvTransformer")),(0,r.mdx)("p",null,"Merges the default configuration for the Jest test runner with the contents of your (",(0,r.mdx)("a",{parentName:"p",href:"https://jestjs.io/en/configuration"},"jest.config configuration file"),")."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\nconst jestConfig = require.resolve('./jest/jest.config');\nexport class ReactExtension {\n// ...\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const newReactEnv = react.compose([\n react.overrideJestConfig(jestConfig)\n ]);\n}\n// ...\n")),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overrideBuildPipe(tasks: BuildTask[]): EnvTransformer")),(0,r.mdx)("p",null,"This method receives an array of build tasks. It merges the provided tasks with the environment's default build pipeline (initiated either on a ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit tag")," or ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit build")," command)."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\n// Import the task\nimport { CustomTask } from './custom.task';\nexport class CustomReact {\n // ...\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n // Get the environment's default build pipeline using the 'getBuildPipe' service handler\n const reactPipe = react.env.getBuildPipe();\n // Add the custom task to the end of the build tasks sequence.\n const tasks = [...reactPipe, new CustomTask()];\n const newReactEnv = react.compose([react.overrideBuildPipe(tasks)]);\n // ...\n }\n}\n")),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overrideDependencies(dependencyPolicy: DependenciesPolicy): EnvTransformer")),(0,r.mdx)("p",null,"This method receives a dependency-policy object and merges it with the environment's default dependency policy for components using this environment.\nEach key-value pair in a dependency-policy object signifies the package and the version to be used. Use also the ",(0,r.mdx)("inlineCode",{parentName:"p"},"-")," and ",(0,r.mdx)("inlineCode",{parentName:"p"},"+")," notation to signify a module should moved between dependency types (dev, peer or standard)."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\nconst newDependencies = {\n dependencies: {\n react: '-',\n },\n devDependencies: {\n '@types/jest': '~26.0.9',\n },\n peerDependencies: {\n react: '^17.0.2',\n },\n};\n\nexport class CustomReact {\n // ...\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const newReactEnv = react.compose([react.overrideDependencies(newDependencies)]);\n // ...\n }\n}\n")),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"The above example shows the 'React' library being removed as a (runtime) dependency and added as a peer dependency.")),(0,r.mdx)("h4",null,(0,r.mdx)("inlineCode",{parentName:"h4"},"overridePackageJsonProps(props: PackageJsonProps): EnvTransformer")),(0,r.mdx)("p",null,"Merges the provide props with the default properties added to the ",(0,r.mdx)("inlineCode",{parentName:"p"},"package.json")," file of every package generated from components using this environment."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// ...\nconst newPackageProps = {\n main: 'dist/{main}.js',\n types: '{main}.ts',\n};\n\nexport class CustomReact {\n // ...\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n const newReactEnv = react.compose([react.overridePackageJsonProps(newPackageProps)]);\n // ...\n }\n}\n"))))}l.__bit_component=a,l.isMDXComponent=!0},3898:(e,t,n)=>{"use strict";var a={id:"teambit.react/react@0.0.641",homepage:"https://bit.dev/teambit/react/react",exported:!0},r=n(8244);function o(){const e=r(n(3804));return o=function(){return e},e}Object.defineProperty(t,"__esModule",{value:!0}),t.Logo=void 0,o.__bit_component=a;const i=()=>o().default.createElement("div",{style:{height:"100%",display:"flex",justifyContent:"center"}},o().default.createElement("img",{style:{width:70},src:"https://static.bit.dev/brands/logo-react.svg"}));i.__bit_component=a,t.Logo=i},5057:e=>{"use strict";e.exports=MdxJsReact},3804:e=>{"use strict";e.exports=React},8459:e=>{"use strict";e.exports=TeambitMdxUiMdxScopeContext}},t={};function n(a){var r=t[a];if(void 0!==r)return r.exports;var o=t[a]={exports:{}};return e[a](o,o.exports,n),o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};return(()=>{"use strict";n.r(a),n.d(a,{compositions:()=>e,overview:()=>t});const e=[n(3898)],t=[n(273)]})(),a})()}));
@@ -11,7 +11,7 @@ import type { TypescriptMain, TsCompilerOptionsWithoutTsConfig, TsConfigTransfor
11
11
  import type { WebpackMain, Configuration, WebpackConfigTransformer } from '@teambit/webpack';
12
12
  import { GeneratorMain } from '@teambit/generator';
13
13
  import { Workspace } from '@teambit/workspace';
14
- import { VariantPolicyConfigObject } from '@teambit/dependency-resolver';
14
+ import { EnvPolicyConfigObject } from '@teambit/dependency-resolver';
15
15
  import { ApplicationMain } from '@teambit/application';
16
16
  import { ESLintMain, EslintConfigTransformer } from '@teambit/eslint';
17
17
  import { PrettierMain, PrettierConfigTransformer } from '@teambit/prettier';
@@ -144,7 +144,7 @@ export declare class ReactMain {
144
144
  /**
145
145
  * override the dependency configuration of the component environment.
146
146
  */
147
- overrideDependencies(dependencyPolicy: VariantPolicyConfigObject): EnvTransformer;
147
+ overrideDependencies(dependencyPolicy: EnvPolicyConfigObject): EnvTransformer;
148
148
  /**
149
149
  * override the workspace compiler.
150
150
  */
@@ -1 +1 @@
1
- {"version":3,"sources":["react.main.runtime.ts"],"names":["ReactMain","constructor","reactEnv","envs","application","workspace","useTypescript","modifiers","tsModule","ts","overrides","devTransformers","devConfig","getCompiler","buildTransformers","buildConfig","buildPipeModifiers","tsModifier","transformers","module","getBuildPipe","override","overrideTsConfig","tsconfig","compilerOptions","transformer","configMutator","mergeTsConfig","raw","compileJs","compileJsx","types","addTypes","genericCompilerOptions","Object","assign","overrideDocsTemplate","templatePath","getDocsTemplate","overrideBuildTsConfig","useWebpack","devServerTransformers","devServerConfig","getDevServer","context","getDevEnvId","envDefinition","id","previewTransformers","previewConfig","getBundler","useEslint","getLinter","usePrettier","getFormatter","overrideDevServerConfig","config","merge","overridePreviewConfig","overrideMounter","mounterPath","getMounter","compose","targetEnv","overrideJestConfig","jestConfigPath","jestModulePath","getTester","overrideBuildPipe","tasks","overrideCompilerTasks","pipeWithoutCompiler","filter","task","aspectId","CompilerAspect","overrideDependencies","dependencyPolicy","getDependencies","reactDeps","overrideCompiler","compiler","overrideEslintConfig","overridePackageJsonProps","props","getPackageJsonProps","getDocs","component","docsArray","state","_consumer","docs","abstract","description","filePath","properties","provider","jestAspect","tsAspect","webpack","graphql","pkg","tester","eslint","prettier","generator","ReactEnv","react","register","registerEnv","registerComponentTemplate","componentTemplates","registerWorkspaceTemplate","workspaceTemplates","registerAppType","ReactAppType","MainRuntime","EnvsAspect","JestAspect","TypescriptAspect","WebpackAspect","WorkspaceAspect","GraphqlAspect","PkgAspect","TesterAspect","ESLintAspect","PrettierAspect","ApplicationAspect","GeneratorAspect","ReactAspect","addRuntime"],"mappings":"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","sourcesContent":["import mergeDeepLeft from 'ramda/src/mergeDeepLeft';\nimport { omit } from 'lodash';\nimport { MainRuntime } from '@teambit/cli';\nimport type { CompilerMain } from '@teambit/compiler';\nimport { CompilerAspect, Compiler } from '@teambit/compiler';\nimport { BuildTask } from '@teambit/builder';\nimport { Component } from '@teambit/component';\nimport { EnvsAspect, EnvsMain, EnvTransformer, Environment } from '@teambit/envs';\nimport type { GraphqlMain } from '@teambit/graphql';\nimport { GraphqlAspect } from '@teambit/graphql';\nimport type { JestMain } from '@teambit/jest';\nimport { JestAspect } from '@teambit/jest';\nimport type { PkgMain, PackageJsonProps } from '@teambit/pkg';\nimport { PkgAspect } from '@teambit/pkg';\nimport type { TesterMain } from '@teambit/tester';\nimport { TesterAspect } from '@teambit/tester';\nimport type { TypescriptMain, TsCompilerOptionsWithoutTsConfig, TsConfigTransformer } from '@teambit/typescript';\nimport { TypescriptAspect } from '@teambit/typescript';\nimport type { WebpackMain, Configuration, WebpackConfigTransformer } from '@teambit/webpack';\nimport { WebpackAspect } from '@teambit/webpack';\nimport { GeneratorAspect, GeneratorMain } from '@teambit/generator';\nimport { Workspace, WorkspaceAspect } from '@teambit/workspace';\nimport { DevServerContext, BundlerContext } from '@teambit/bundler';\nimport { VariantPolicyConfigObject } from '@teambit/dependency-resolver';\nimport ts from 'typescript';\nimport { ApplicationAspect, ApplicationMain } from '@teambit/application';\nimport { FormatterContext } from '@teambit/formatter';\nimport { LinterContext } from '@teambit/linter';\nimport { ESLintMain, ESLintAspect, EslintConfigTransformer } from '@teambit/eslint';\nimport { PrettierMain, PrettierAspect, PrettierConfigTransformer } from '@teambit/prettier';\nimport { ReactAspect } from './react.aspect';\nimport { ReactEnv } from './react.env';\nimport { ReactAppType } from './apps/web';\nimport { reactSchema } from './react.graphql';\nimport { componentTemplates, workspaceTemplates } from './react.templates';\n\ntype ReactDeps = [\n EnvsMain,\n JestMain,\n TypescriptMain,\n CompilerMain,\n WebpackMain,\n Workspace,\n GraphqlMain,\n PkgMain,\n TesterMain,\n ESLintMain,\n PrettierMain,\n ApplicationMain,\n GeneratorMain\n];\n\nexport type ReactMainConfig = {\n /**\n * configure the react env compiler.\n * can be configured to either TypeScript ('ts') or Babel ('babel').\n */\n compiler: 'babel' | 'ts';\n\n /**\n * configure the component tester.\n * can be either Jest ('jest') or Mocha ('mocha')\n */\n tester: 'jest' | 'mocha';\n\n /**\n * version of React to configure.\n */\n reactVersion: string;\n};\n\nexport type UseWebpackModifiers = {\n previewConfig?: WebpackConfigTransformer[];\n devServerConfig?: WebpackConfigTransformer[];\n};\n\nexport type UseTypescriptModifiers = {\n buildConfig?: TsConfigTransformer[];\n devConfig?: TsConfigTransformer[];\n};\n\nexport type UseEslintModifiers = {\n transformers: EslintConfigTransformer[];\n};\nexport type UsePrettierModifiers = {\n transformers: PrettierConfigTransformer[];\n};\n\nexport class ReactMain {\n constructor(\n /**\n * an instance of the React env.\n */\n readonly reactEnv: ReactEnv,\n\n private envs: EnvsMain,\n\n private application: ApplicationMain,\n\n private workspace: Workspace\n ) {}\n\n readonly env = this.reactEnv;\n\n /**\n * override the env's typescript config for both dev and build time.\n * Replaces both overrideTsConfig (devConfig) and overrideBuildTsConfig (buildConfig)\n */\n useTypescript(modifiers?: UseTypescriptModifiers, tsModule: any = ts) {\n const overrides: any = {};\n const devTransformers = modifiers?.devConfig;\n if (devTransformers) {\n overrides.getCompiler = () => this.reactEnv.getCompiler(devTransformers, tsModule);\n }\n const buildTransformers = modifiers?.buildConfig;\n if (buildTransformers) {\n const buildPipeModifiers = {\n tsModifier: {\n transformers: buildTransformers,\n module: tsModule,\n },\n };\n overrides.getBuildPipe = () => this.reactEnv.getBuildPipe(buildPipeModifiers);\n }\n return this.envs.override(overrides);\n }\n\n /**\n * @deprecated use useTypescript()\n * override the TS config of the React environment.\n * @param tsModule typeof `ts` module instance.\n */\n overrideTsConfig(\n tsconfig: Record<string, any> = {},\n compilerOptions: Partial<TsCompilerOptionsWithoutTsConfig> = {},\n tsModule: any = ts\n ) {\n const transformer: TsConfigTransformer = (configMutator) => {\n configMutator.mergeTsConfig(tsconfig);\n configMutator.raw.compileJs = compilerOptions.compileJs ?? configMutator.raw.compileJs;\n configMutator.raw.compileJsx = compilerOptions.compileJsx ?? configMutator.raw.compileJsx;\n if (compilerOptions.types) {\n configMutator.addTypes(compilerOptions.types);\n }\n const genericCompilerOptions = omit(compilerOptions, ['types', 'compileJs', 'compileJsx']);\n configMutator.raw = Object.assign(configMutator.raw, genericCompilerOptions);\n return configMutator;\n };\n // return this.envs.override({\n // getCompiler: () => this.reactEnv.getCompiler([transformer], tsModule),\n // });\n return this.useTypescript({ devConfig: [transformer] }, tsModule);\n }\n\n /**\n * Override the Bit documentation link. See docs: https://bit.dev/docs/docs/doc-templates\n */\n overrideDocsTemplate(templatePath: string) {\n return this.envs.override({\n getDocsTemplate: () => templatePath,\n });\n }\n\n /**\n * @deprecated use useTypescript()\n * override the build tsconfig.\n */\n overrideBuildTsConfig(\n tsconfig: Record<string, any> = {},\n compilerOptions: Partial<TsCompilerOptionsWithoutTsConfig> = {},\n tsModule: any = ts\n ) {\n const transformer: TsConfigTransformer = (configMutator) => {\n configMutator.mergeTsConfig(tsconfig);\n configMutator.raw.compileJs = compilerOptions.compileJs ?? configMutator.raw.compileJs;\n configMutator.raw.compileJsx = compilerOptions.compileJsx ?? configMutator.raw.compileJsx;\n if (compilerOptions.types) {\n configMutator.addTypes(compilerOptions.types);\n }\n const genericCompilerOptions = omit(compilerOptions, ['types', 'compileJs', 'compileJsx']);\n configMutator.raw = Object.assign(configMutator.raw, genericCompilerOptions);\n return configMutator;\n };\n // return this.envs.override({\n // getBuildPipe: () => this.reactEnv.getBuildPipe([transformer], tsModule),\n // });\n return this.useTypescript({ buildConfig: [transformer] }, tsModule);\n }\n\n /**\n * override the env's dev server and preview webpack configurations.\n * Replaces both overrideDevServerConfig and overridePreviewConfig\n */\n useWebpack(modifiers?: UseWebpackModifiers): EnvTransformer {\n const overrides: any = {};\n const devServerTransformers = modifiers?.devServerConfig;\n if (devServerTransformers) {\n overrides.getDevServer = (context: DevServerContext) =>\n this.reactEnv.getDevServer(context, devServerTransformers);\n overrides.getDevEnvId = (context: DevServerContext) => this.reactEnv.getDevEnvId(context.envDefinition.id);\n }\n const previewTransformers = modifiers?.previewConfig;\n if (previewTransformers) {\n overrides.getBundler = (context: BundlerContext) => this.reactEnv.getBundler(context, previewTransformers);\n }\n return this.envs.override(overrides);\n }\n\n /**\n * An API to mutate the prettier config\n * @param modifiers\n * @returns\n */\n useEslint(modifiers?: UseEslintModifiers): EnvTransformer {\n const transformers = modifiers?.transformers || [];\n return this.envs.override({\n getLinter: (context: LinterContext) => this.reactEnv.getLinter(context, transformers),\n });\n }\n\n /**\n * An API to mutate the prettier config\n * @param modifiers\n * @returns\n */\n usePrettier(modifiers?: UsePrettierModifiers): EnvTransformer {\n const transformers = modifiers?.transformers || [];\n return this.envs.override({\n getFormatter: (context: FormatterContext) => this.reactEnv.getFormatter(context, transformers),\n });\n }\n\n /**\n * @deprecated use useWebpack()\n * override the dev server webpack config.\n */\n overrideDevServerConfig(config: Configuration) {\n const transformer: WebpackConfigTransformer = (configMutator) => {\n return configMutator.merge([config]);\n };\n\n return this.envs.override({\n getDevServer: (context: DevServerContext) => this.reactEnv.getDevServer(context, [transformer]),\n getDevEnvId: (context: DevServerContext) => this.reactEnv.getDevEnvId(context.envDefinition.id),\n });\n }\n\n /**\n * @deprecated use useWebpack()\n * override the preview webpack config.\n */\n overridePreviewConfig(config: Configuration) {\n const transformer: WebpackConfigTransformer = (configMutator) => {\n return configMutator.merge([config]);\n };\n return this.envs.override({\n getBundler: (context: BundlerContext) => this.reactEnv.getBundler(context, [transformer]),\n });\n }\n\n overrideMounter(mounterPath: string) {\n return this.envs.override({\n getMounter: () => {\n return mounterPath;\n },\n });\n }\n\n /**\n * create a new composition of the react environment.\n */\n compose(transformers: EnvTransformer[], targetEnv: Environment = {}) {\n return this.envs.compose(this.envs.merge(targetEnv, this.reactEnv), transformers);\n }\n\n /**\n * override the jest configuration.\n * @param jestConfigPath {typeof jest} absolute path to jest.config.json.\n * @param jestModulePath absolute path to jest\n */\n overrideJestConfig(jestConfigPath: string, jestModulePath?: string) {\n return this.envs.override({\n getTester: () => this.reactEnv.getTester(jestConfigPath, jestModulePath),\n });\n }\n\n /**\n * override the build pipeline of the component environment.\n */\n overrideBuildPipe(tasks: BuildTask[]) {\n return this.envs.override({\n getBuildPipe: () => tasks,\n });\n }\n\n /**\n * override the compiler tasks inside the build pipeline of the component environment.\n */\n overrideCompilerTasks(tasks: BuildTask[]) {\n const pipeWithoutCompiler = this.reactEnv.getBuildPipe().filter((task) => task.aspectId !== CompilerAspect.id);\n\n return this.envs.override({\n getBuildPipe: () => [...tasks, ...pipeWithoutCompiler],\n });\n }\n\n /**\n * override the dependency configuration of the component environment.\n */\n overrideDependencies(dependencyPolicy: VariantPolicyConfigObject) {\n return this.envs.override({\n getDependencies: async () => {\n const reactDeps = await this.reactEnv.getDependencies();\n return mergeDeepLeft(dependencyPolicy, reactDeps);\n },\n });\n }\n\n /**\n * override the workspace compiler.\n */\n overrideCompiler(compiler: Compiler) {\n return this.envs.override({\n getCompiler: () => {\n return compiler;\n },\n });\n }\n\n /**\n * TODO: @gilad we need to implement this.\n */\n overrideEslintConfig() {}\n\n /**\n * override the package json props of the component environment.\n */\n overridePackageJsonProps(props: PackageJsonProps) {\n return this.envs.override({\n getPackageJsonProps: () => {\n return {\n ...props,\n ...this.reactEnv.getPackageJsonProps(),\n };\n },\n });\n }\n\n /**\n * returns doc adjusted specifically for react components.\n */\n getDocs(component: Component) {\n const docsArray = component.state._consumer.docs;\n if (!docsArray || !docsArray[0]) {\n return null;\n }\n\n const docs = docsArray[0];\n\n return {\n abstract: docs.description,\n filePath: docs.filePath,\n properties: docs.properties,\n };\n }\n\n static runtime = MainRuntime;\n static dependencies = [\n EnvsAspect,\n JestAspect,\n TypescriptAspect,\n CompilerAspect,\n WebpackAspect,\n WorkspaceAspect,\n GraphqlAspect,\n PkgAspect,\n TesterAspect,\n ESLintAspect,\n PrettierAspect,\n ApplicationAspect,\n GeneratorAspect,\n ];\n\n static async provider(\n [\n envs,\n jestAspect,\n tsAspect,\n compiler,\n webpack,\n workspace,\n graphql,\n pkg,\n tester,\n eslint,\n prettier,\n application,\n generator,\n ]: ReactDeps,\n config: ReactMainConfig\n ) {\n const reactEnv = new ReactEnv(\n jestAspect,\n tsAspect,\n compiler,\n webpack,\n workspace,\n pkg,\n tester,\n config,\n eslint,\n prettier\n );\n const react = new ReactMain(reactEnv, envs, application, workspace);\n graphql.register(reactSchema(react));\n envs.registerEnv(reactEnv);\n generator.registerComponentTemplate(componentTemplates);\n generator.registerWorkspaceTemplate(workspaceTemplates);\n application.registerAppType(new ReactAppType('react-app', reactEnv));\n return react;\n }\n}\n\nReactAspect.addRuntime(ReactMain);\n"]}
1
+ {"version":3,"sources":["react.main.runtime.ts"],"names":["ReactMain","constructor","reactEnv","envs","application","workspace","useTypescript","modifiers","tsModule","ts","overrides","devTransformers","devConfig","getCompiler","buildTransformers","buildConfig","buildPipeModifiers","tsModifier","transformers","module","getBuildPipe","override","overrideTsConfig","tsconfig","compilerOptions","transformer","configMutator","mergeTsConfig","raw","compileJs","compileJsx","types","addTypes","genericCompilerOptions","Object","assign","overrideDocsTemplate","templatePath","getDocsTemplate","overrideBuildTsConfig","useWebpack","devServerTransformers","devServerConfig","getDevServer","context","getDevEnvId","envDefinition","id","previewTransformers","previewConfig","getBundler","useEslint","getLinter","usePrettier","getFormatter","overrideDevServerConfig","config","merge","overridePreviewConfig","overrideMounter","mounterPath","getMounter","compose","targetEnv","overrideJestConfig","jestConfigPath","jestModulePath","getTester","overrideBuildPipe","tasks","overrideCompilerTasks","pipeWithoutCompiler","filter","task","aspectId","CompilerAspect","overrideDependencies","dependencyPolicy","getDependencies","reactDeps","overrideCompiler","compiler","overrideEslintConfig","overridePackageJsonProps","props","getPackageJsonProps","getDocs","component","docsArray","state","_consumer","docs","abstract","description","filePath","properties","provider","jestAspect","tsAspect","webpack","graphql","pkg","tester","eslint","prettier","generator","ReactEnv","react","register","registerEnv","registerComponentTemplate","componentTemplates","registerWorkspaceTemplate","workspaceTemplates","registerAppType","ReactAppType","MainRuntime","EnvsAspect","JestAspect","TypescriptAspect","WebpackAspect","WorkspaceAspect","GraphqlAspect","PkgAspect","TesterAspect","ESLintAspect","PrettierAspect","ApplicationAspect","GeneratorAspect","ReactAspect","addRuntime"],"mappings":"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","sourcesContent":["import mergeDeepLeft from 'ramda/src/mergeDeepLeft';\nimport { omit } from 'lodash';\nimport { MainRuntime } from '@teambit/cli';\nimport type { CompilerMain } from '@teambit/compiler';\nimport { CompilerAspect, Compiler } from '@teambit/compiler';\nimport { BuildTask } from '@teambit/builder';\nimport { Component } from '@teambit/component';\nimport { EnvsAspect, EnvsMain, EnvTransformer, Environment } from '@teambit/envs';\nimport type { GraphqlMain } from '@teambit/graphql';\nimport { GraphqlAspect } from '@teambit/graphql';\nimport type { JestMain } from '@teambit/jest';\nimport { JestAspect } from '@teambit/jest';\nimport type { PkgMain, PackageJsonProps } from '@teambit/pkg';\nimport { PkgAspect } from '@teambit/pkg';\nimport type { TesterMain } from '@teambit/tester';\nimport { TesterAspect } from '@teambit/tester';\nimport type { TypescriptMain, TsCompilerOptionsWithoutTsConfig, TsConfigTransformer } from '@teambit/typescript';\nimport { TypescriptAspect } from '@teambit/typescript';\nimport type { WebpackMain, Configuration, WebpackConfigTransformer } from '@teambit/webpack';\nimport { WebpackAspect } from '@teambit/webpack';\nimport { GeneratorAspect, GeneratorMain } from '@teambit/generator';\nimport { Workspace, WorkspaceAspect } from '@teambit/workspace';\nimport { DevServerContext, BundlerContext } from '@teambit/bundler';\nimport { EnvPolicyConfigObject } from '@teambit/dependency-resolver';\nimport ts from 'typescript';\nimport { ApplicationAspect, ApplicationMain } from '@teambit/application';\nimport { FormatterContext } from '@teambit/formatter';\nimport { LinterContext } from '@teambit/linter';\nimport { ESLintMain, ESLintAspect, EslintConfigTransformer } from '@teambit/eslint';\nimport { PrettierMain, PrettierAspect, PrettierConfigTransformer } from '@teambit/prettier';\nimport { ReactAspect } from './react.aspect';\nimport { ReactEnv } from './react.env';\nimport { ReactAppType } from './apps/web';\nimport { reactSchema } from './react.graphql';\nimport { componentTemplates, workspaceTemplates } from './react.templates';\n\ntype ReactDeps = [\n EnvsMain,\n JestMain,\n TypescriptMain,\n CompilerMain,\n WebpackMain,\n Workspace,\n GraphqlMain,\n PkgMain,\n TesterMain,\n ESLintMain,\n PrettierMain,\n ApplicationMain,\n GeneratorMain\n];\n\nexport type ReactMainConfig = {\n /**\n * configure the react env compiler.\n * can be configured to either TypeScript ('ts') or Babel ('babel').\n */\n compiler: 'babel' | 'ts';\n\n /**\n * configure the component tester.\n * can be either Jest ('jest') or Mocha ('mocha')\n */\n tester: 'jest' | 'mocha';\n\n /**\n * version of React to configure.\n */\n reactVersion: string;\n};\n\nexport type UseWebpackModifiers = {\n previewConfig?: WebpackConfigTransformer[];\n devServerConfig?: WebpackConfigTransformer[];\n};\n\nexport type UseTypescriptModifiers = {\n buildConfig?: TsConfigTransformer[];\n devConfig?: TsConfigTransformer[];\n};\n\nexport type UseEslintModifiers = {\n transformers: EslintConfigTransformer[];\n};\nexport type UsePrettierModifiers = {\n transformers: PrettierConfigTransformer[];\n};\n\nexport class ReactMain {\n constructor(\n /**\n * an instance of the React env.\n */\n readonly reactEnv: ReactEnv,\n\n private envs: EnvsMain,\n\n private application: ApplicationMain,\n\n private workspace: Workspace\n ) {}\n\n readonly env = this.reactEnv;\n\n /**\n * override the env's typescript config for both dev and build time.\n * Replaces both overrideTsConfig (devConfig) and overrideBuildTsConfig (buildConfig)\n */\n useTypescript(modifiers?: UseTypescriptModifiers, tsModule: any = ts) {\n const overrides: any = {};\n const devTransformers = modifiers?.devConfig;\n if (devTransformers) {\n overrides.getCompiler = () => this.reactEnv.getCompiler(devTransformers, tsModule);\n }\n const buildTransformers = modifiers?.buildConfig;\n if (buildTransformers) {\n const buildPipeModifiers = {\n tsModifier: {\n transformers: buildTransformers,\n module: tsModule,\n },\n };\n overrides.getBuildPipe = () => this.reactEnv.getBuildPipe(buildPipeModifiers);\n }\n return this.envs.override(overrides);\n }\n\n /**\n * @deprecated use useTypescript()\n * override the TS config of the React environment.\n * @param tsModule typeof `ts` module instance.\n */\n overrideTsConfig(\n tsconfig: Record<string, any> = {},\n compilerOptions: Partial<TsCompilerOptionsWithoutTsConfig> = {},\n tsModule: any = ts\n ) {\n const transformer: TsConfigTransformer = (configMutator) => {\n configMutator.mergeTsConfig(tsconfig);\n configMutator.raw.compileJs = compilerOptions.compileJs ?? configMutator.raw.compileJs;\n configMutator.raw.compileJsx = compilerOptions.compileJsx ?? configMutator.raw.compileJsx;\n if (compilerOptions.types) {\n configMutator.addTypes(compilerOptions.types);\n }\n const genericCompilerOptions = omit(compilerOptions, ['types', 'compileJs', 'compileJsx']);\n configMutator.raw = Object.assign(configMutator.raw, genericCompilerOptions);\n return configMutator;\n };\n // return this.envs.override({\n // getCompiler: () => this.reactEnv.getCompiler([transformer], tsModule),\n // });\n return this.useTypescript({ devConfig: [transformer] }, tsModule);\n }\n\n /**\n * Override the Bit documentation link. See docs: https://bit.dev/docs/docs/doc-templates\n */\n overrideDocsTemplate(templatePath: string) {\n return this.envs.override({\n getDocsTemplate: () => templatePath,\n });\n }\n\n /**\n * @deprecated use useTypescript()\n * override the build tsconfig.\n */\n overrideBuildTsConfig(\n tsconfig: Record<string, any> = {},\n compilerOptions: Partial<TsCompilerOptionsWithoutTsConfig> = {},\n tsModule: any = ts\n ) {\n const transformer: TsConfigTransformer = (configMutator) => {\n configMutator.mergeTsConfig(tsconfig);\n configMutator.raw.compileJs = compilerOptions.compileJs ?? configMutator.raw.compileJs;\n configMutator.raw.compileJsx = compilerOptions.compileJsx ?? configMutator.raw.compileJsx;\n if (compilerOptions.types) {\n configMutator.addTypes(compilerOptions.types);\n }\n const genericCompilerOptions = omit(compilerOptions, ['types', 'compileJs', 'compileJsx']);\n configMutator.raw = Object.assign(configMutator.raw, genericCompilerOptions);\n return configMutator;\n };\n // return this.envs.override({\n // getBuildPipe: () => this.reactEnv.getBuildPipe([transformer], tsModule),\n // });\n return this.useTypescript({ buildConfig: [transformer] }, tsModule);\n }\n\n /**\n * override the env's dev server and preview webpack configurations.\n * Replaces both overrideDevServerConfig and overridePreviewConfig\n */\n useWebpack(modifiers?: UseWebpackModifiers): EnvTransformer {\n const overrides: any = {};\n const devServerTransformers = modifiers?.devServerConfig;\n if (devServerTransformers) {\n overrides.getDevServer = (context: DevServerContext) =>\n this.reactEnv.getDevServer(context, devServerTransformers);\n overrides.getDevEnvId = (context: DevServerContext) => this.reactEnv.getDevEnvId(context.envDefinition.id);\n }\n const previewTransformers = modifiers?.previewConfig;\n if (previewTransformers) {\n overrides.getBundler = (context: BundlerContext) => this.reactEnv.getBundler(context, previewTransformers);\n }\n return this.envs.override(overrides);\n }\n\n /**\n * An API to mutate the prettier config\n * @param modifiers\n * @returns\n */\n useEslint(modifiers?: UseEslintModifiers): EnvTransformer {\n const transformers = modifiers?.transformers || [];\n return this.envs.override({\n getLinter: (context: LinterContext) => this.reactEnv.getLinter(context, transformers),\n });\n }\n\n /**\n * An API to mutate the prettier config\n * @param modifiers\n * @returns\n */\n usePrettier(modifiers?: UsePrettierModifiers): EnvTransformer {\n const transformers = modifiers?.transformers || [];\n return this.envs.override({\n getFormatter: (context: FormatterContext) => this.reactEnv.getFormatter(context, transformers),\n });\n }\n\n /**\n * @deprecated use useWebpack()\n * override the dev server webpack config.\n */\n overrideDevServerConfig(config: Configuration) {\n const transformer: WebpackConfigTransformer = (configMutator) => {\n return configMutator.merge([config]);\n };\n\n return this.envs.override({\n getDevServer: (context: DevServerContext) => this.reactEnv.getDevServer(context, [transformer]),\n getDevEnvId: (context: DevServerContext) => this.reactEnv.getDevEnvId(context.envDefinition.id),\n });\n }\n\n /**\n * @deprecated use useWebpack()\n * override the preview webpack config.\n */\n overridePreviewConfig(config: Configuration) {\n const transformer: WebpackConfigTransformer = (configMutator) => {\n return configMutator.merge([config]);\n };\n return this.envs.override({\n getBundler: (context: BundlerContext) => this.reactEnv.getBundler(context, [transformer]),\n });\n }\n\n overrideMounter(mounterPath: string) {\n return this.envs.override({\n getMounter: () => {\n return mounterPath;\n },\n });\n }\n\n /**\n * create a new composition of the react environment.\n */\n compose(transformers: EnvTransformer[], targetEnv: Environment = {}) {\n return this.envs.compose(this.envs.merge(targetEnv, this.reactEnv), transformers);\n }\n\n /**\n * override the jest configuration.\n * @param jestConfigPath {typeof jest} absolute path to jest.config.json.\n * @param jestModulePath absolute path to jest\n */\n overrideJestConfig(jestConfigPath: string, jestModulePath?: string) {\n return this.envs.override({\n getTester: () => this.reactEnv.getTester(jestConfigPath, jestModulePath),\n });\n }\n\n /**\n * override the build pipeline of the component environment.\n */\n overrideBuildPipe(tasks: BuildTask[]) {\n return this.envs.override({\n getBuildPipe: () => tasks,\n });\n }\n\n /**\n * override the compiler tasks inside the build pipeline of the component environment.\n */\n overrideCompilerTasks(tasks: BuildTask[]) {\n const pipeWithoutCompiler = this.reactEnv.getBuildPipe().filter((task) => task.aspectId !== CompilerAspect.id);\n\n return this.envs.override({\n getBuildPipe: () => [...tasks, ...pipeWithoutCompiler],\n });\n }\n\n /**\n * override the dependency configuration of the component environment.\n */\n overrideDependencies(dependencyPolicy: EnvPolicyConfigObject) {\n return this.envs.override({\n getDependencies: async () => {\n const reactDeps = await this.reactEnv.getDependencies();\n return mergeDeepLeft(dependencyPolicy, reactDeps);\n },\n });\n }\n\n /**\n * override the workspace compiler.\n */\n overrideCompiler(compiler: Compiler) {\n return this.envs.override({\n getCompiler: () => {\n return compiler;\n },\n });\n }\n\n /**\n * TODO: @gilad we need to implement this.\n */\n overrideEslintConfig() {}\n\n /**\n * override the package json props of the component environment.\n */\n overridePackageJsonProps(props: PackageJsonProps) {\n return this.envs.override({\n getPackageJsonProps: () => {\n return {\n ...props,\n ...this.reactEnv.getPackageJsonProps(),\n };\n },\n });\n }\n\n /**\n * returns doc adjusted specifically for react components.\n */\n getDocs(component: Component) {\n const docsArray = component.state._consumer.docs;\n if (!docsArray || !docsArray[0]) {\n return null;\n }\n\n const docs = docsArray[0];\n\n return {\n abstract: docs.description,\n filePath: docs.filePath,\n properties: docs.properties,\n };\n }\n\n static runtime = MainRuntime;\n static dependencies = [\n EnvsAspect,\n JestAspect,\n TypescriptAspect,\n CompilerAspect,\n WebpackAspect,\n WorkspaceAspect,\n GraphqlAspect,\n PkgAspect,\n TesterAspect,\n ESLintAspect,\n PrettierAspect,\n ApplicationAspect,\n GeneratorAspect,\n ];\n\n static async provider(\n [\n envs,\n jestAspect,\n tsAspect,\n compiler,\n webpack,\n workspace,\n graphql,\n pkg,\n tester,\n eslint,\n prettier,\n application,\n generator,\n ]: ReactDeps,\n config: ReactMainConfig\n ) {\n const reactEnv = new ReactEnv(\n jestAspect,\n tsAspect,\n compiler,\n webpack,\n workspace,\n pkg,\n tester,\n config,\n eslint,\n prettier\n );\n const react = new ReactMain(reactEnv, envs, application, workspace);\n graphql.register(reactSchema(react));\n envs.registerEnv(reactEnv);\n generator.registerComponentTemplate(componentTemplates);\n generator.registerWorkspaceTemplate(workspaceTemplates);\n application.registerAppType(new ReactAppType('react-app', reactEnv));\n return react;\n }\n}\n\nReactAspect.addRuntime(ReactMain);\n"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/react",
3
- "version": "0.0.637",
3
+ "version": "0.0.641",
4
4
  "homepage": "https://bit.dev/teambit/react/react",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.react",
8
8
  "name": "react",
9
- "version": "0.0.637"
9
+ "version": "0.0.641"
10
10
  },
11
11
  "dependencies": {
12
12
  "react-error-boundary": "^3.0.0",
@@ -18,7 +18,6 @@
18
18
  "ramda": "0.27.1",
19
19
  "lodash.flatten": "4.4.0",
20
20
  "camelcase": "6.2.0",
21
- "@testing-library/jest-dom": "5.11.10",
22
21
  "@babel/core": "7.12.17",
23
22
  "@babel/plugin-proposal-class-properties": "7.12.13",
24
23
  "@babel/plugin-proposal-decorators": "7.12.13",
@@ -79,39 +78,39 @@
79
78
  "@teambit/react.instructions.react.adding-compositions": "0.0.6",
80
79
  "@teambit/react.instructions.react.adding-tests": "0.0.6",
81
80
  "@teambit/design.ui.pages.standalone-not-found-page": "0.0.355",
82
- "@teambit/preview": "0.0.637",
81
+ "@teambit/preview": "0.0.641",
83
82
  "@teambit/react.ui.error-fallback": "0.0.109",
84
83
  "@teambit/react.ui.loader-fallback": "0.0.88",
85
84
  "@teambit/compositions.ui.hooks.use-composition": "0.0.162",
86
85
  "@teambit/design.ui.input.option-button": "0.0.26",
87
86
  "@teambit/design.ui.tooltip": "0.0.352",
88
- "@teambit/builder": "0.0.637",
89
- "@teambit/bundler": "0.0.637",
90
- "@teambit/compiler": "0.0.637",
87
+ "@teambit/builder": "0.0.641",
88
+ "@teambit/bundler": "0.0.641",
89
+ "@teambit/compiler": "0.0.641",
91
90
  "@teambit/component.modules.component-url": "0.0.121",
92
- "@teambit/component": "0.0.637",
93
- "@teambit/envs": "0.0.637",
94
- "@teambit/eslint": "0.0.637",
95
- "@teambit/formatter": "0.0.188",
96
- "@teambit/jest": "0.0.637",
97
- "@teambit/linter": "0.0.637",
98
- "@teambit/pkg": "0.0.637",
99
- "@teambit/prettier": "0.0.188",
91
+ "@teambit/component": "0.0.641",
92
+ "@teambit/envs": "0.0.641",
93
+ "@teambit/eslint": "0.0.641",
94
+ "@teambit/formatter": "0.0.192",
95
+ "@teambit/jest": "0.0.641",
96
+ "@teambit/linter": "0.0.641",
97
+ "@teambit/pkg": "0.0.641",
98
+ "@teambit/prettier": "0.0.192",
100
99
  "@teambit/react.ui.highlighter.component-metadata.bit-component-meta": "0.0.20",
101
- "@teambit/schema": "0.0.637",
102
- "@teambit/tester": "0.0.637",
103
- "@teambit/typescript": "0.0.637",
104
- "@teambit/webpack": "0.0.637",
105
- "@teambit/workspace": "0.0.637",
106
- "@teambit/application": "0.0.279",
107
- "@teambit/cli": "0.0.434",
108
- "@teambit/dependency-resolver": "0.0.637",
109
- "@teambit/generator": "0.0.637",
110
- "@teambit/graphql": "0.0.637",
100
+ "@teambit/schema": "0.0.641",
101
+ "@teambit/tester": "0.0.641",
102
+ "@teambit/typescript": "0.0.641",
103
+ "@teambit/webpack": "0.0.641",
104
+ "@teambit/workspace": "0.0.641",
105
+ "@teambit/application": "0.0.283",
106
+ "@teambit/cli": "0.0.438",
107
+ "@teambit/dependency-resolver": "0.0.641",
108
+ "@teambit/generator": "0.0.641",
109
+ "@teambit/graphql": "0.0.641",
111
110
  "@teambit/react.ui.highlighter-provider": "0.0.182",
112
- "@teambit/compositions": "0.0.637",
113
- "@teambit/ui": "0.0.637",
114
- "@teambit/react.eslint-config-bit-react": "0.0.511",
111
+ "@teambit/compositions": "0.0.641",
112
+ "@teambit/ui": "0.0.641",
113
+ "@teambit/react.eslint-config-bit-react": "0.0.515",
115
114
  "@teambit/webpack.modules.generate-expose-loaders": "0.0.2",
116
115
  "@teambit/webpack.modules.generate-externals": "0.0.2",
117
116
  "@teambit/webpack.modules.config-mutator": "0.0.136",
@@ -121,7 +120,7 @@
121
120
  "@teambit/webpack.modules.style-regexps": "0.0.131",
122
121
  "@teambit/component-id": "0.0.400",
123
122
  "@teambit/toolbox.network.get-port": "0.0.112",
124
- "@teambit/config": "0.0.447"
123
+ "@teambit/config": "0.0.451"
125
124
  },
126
125
  "devDependencies": {
127
126
  "@types/react": "^17.0.8",
@@ -139,7 +138,8 @@
139
138
  "@teambit/react.aspect-docs.react": "0.0.131"
140
139
  },
141
140
  "peerDependencies": {
142
- "@teambit/legacy": "1.0.210",
141
+ "@testing-library/jest-dom": "5.11.10",
142
+ "@teambit/legacy": "1.0.216",
143
143
  "react-dom": "^16.8.0 || ^17.0.0",
144
144
  "react": "^16.8.0 || ^17.0.0"
145
145
  },
@@ -201,7 +201,7 @@
201
201
  "@types/jest": "^26.0.0"
202
202
  },
203
203
  "peerDependencies": {
204
- "@teambit/legacy": "1.0.210",
204
+ "@teambit/legacy": "1.0.216",
205
205
  "react-dom": "^16.8.0 || ^17.0.0",
206
206
  "react": "^16.8.0 || ^17.0.0"
207
207
  }