@teambit/envs 1.0.424 → 1.0.426
Sign up to get free protection for your applications and to get access to all the features.
- package/artifacts/__bit_junit.xml +1 -1
- package/artifacts/preview/teambit_envs_envs-preview.js +1 -1
- package/artifacts/schema.json +7 -7
- package/dist/environments.main.runtime.js.map +1 -1
- package/dist/envs.cmd.js.map +1 -1
- package/dist/exceptions/env-not-found.js.map +1 -1
- package/dist/{preview-1728098619529.js → preview-1728236174539.js} +2 -2
- package/exceptions/env-not-found.ts +4 -1
- package/package.json +27 -27
@@ -1,4 +1,4 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<testsuites tests="0" failures="0" errors="0" skipped="0">
|
3
|
-
<testsuite name="teambit.envs/envs@1.0.
|
3
|
+
<testsuite name="teambit.envs/envs@1.0.426" tests="0" failures="0" errors="0" skipped="0"/>
|
4
4
|
</testsuites>
|
@@ -1 +1 @@
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports["teambit.envs/envs-preview"]=n():e["teambit.envs/envs-preview"]=n()}(self,(()=>(()=>{"use strict";var e={45506:(e,n,t)=>{var o={id:"teambit.envs/aspect-docs/envs@0.0.169",homepage:"https://bit.cloud/teambit/envs/aspect-docs/envs",exported:!0};Object.defineProperty(n,"__esModule",{value:!0}),n.default=d,i(t(41594));var r=t(5016),a=["components"];function i(e){return e&&e.__esModule?e:{default:e}}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var o in t)({}).hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},s.apply(null,arguments)}function m(e,n){if(null==e)return{};var t,o,r=l(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)t=a[o],n.includes(t)||{}.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}function l(e,n){if(null==e)return{};var t={};for(var o in e)if({}.hasOwnProperty.call(e,o)){if(n.includes(o))continue;t[o]=e[o]}return t}i.__bit_component=o,s.__bit_component=o,m.__bit_component=o,l.__bit_component=o;var c={},p="wrapper";function d(e){var n=e.components,t=m(e,a);return(0,r.mdx)(p,s({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.mdx)("p",null,"The Envs aspect runs Bit environments and environment services, and defines their structure."),(0,r.mdx)("p",null,"A Bit environment is a development environment encapsulated in a Bit component. Just like other components, Bit environments can be instantly added to your workspace to start developing, testing, and building components with zero configurations.\nDifferent environments can be easily applied to multiple components in a workspace, and can be easily extended or customized to fit your needs and development stack. For example, try the React environment to start developing React components in your workspace.\nLike all Bit components, Bit environments are reusable, so you can share them across projects and teams to greatly speed up and standardize development."),(0,r.mdx)("h4",null,"Example"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json"},'// Using the \'Node\' and \'React\' environments for different components in a Bit workspace.\n{\n "teambit.workspace/variants": {\n "components/ui": {\n "teambit.react/react": {}\n },\n "components/utils": {\n "teambit.harmony/node": {}\n }\n }\n}\n')),(0,r.mdx)("h4",null,"Features"),(0,r.mdx)("ul",null,(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},(0,r.mdx)("strong",{parentName:"p"},"Blazing fast environment setup"),": Setting up an environment requires nothing more than configuring a workspace to use a Bit extension.\nGet started in seconds and focus on the thing that matters most - delivering great features.")),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},(0,r.mdx)("strong",{parentName:"p"},"Multiple environments in a single workspace"),": No need to constantly switch between workspaces as different environments,\nset to handle different components, can all be used in parallel in a single workspace.")),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},(0,r.mdx)("strong",{parentName:"p"},"Less to learn"),": Using a pre-configured environment extension means you don't have to get into all the details of your build tooling.\nThat's a especially important when onboarding a new developer to your team.")),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},(0,r.mdx)("strong",{parentName:"p"},"Customizable and extensible"),": Environments can be extended to add or override configurations.\nQuickly add your own modifications to get an environment that best suits your needs.\nExport your environment extension to a remote scope to have it available to all your team.")),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},(0,r.mdx)("strong",{parentName:"p"},"Standardized development"),": Sharing and reusing environments makes it easier to maintain consistency in development across multiple decoupled Bit workspaces.")),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},(0,r.mdx)("strong",{parentName:"p"},"Easy to maintain"),": Get your environment's latest updates with just a simple ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit import")," command. Roll-back as easily, if needed."))),(0,r.mdx)("h2",null,"CLI reference"),(0,r.mdx)("p",null,"Bit environments make use of Bit's CLI to execute their different services. That means, ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit test"),", for example, may execute different test runners, depending on the environment in use."),(0,r.mdx)("h4",null,"start"),(0,r.mdx)("p",null,"Runs the development serve (that includes running the Workspace UI)."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"// run the dev server\nbit start\n")),(0,r.mdx)("h4",null,"build"),(0,r.mdx)("p",null,"Runs the build pipeline (without tagging components with a new release version)."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"bit build\n")),(0,r.mdx)("h4",null,"test"),(0,r.mdx)("p",null,"Runs all tests."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"bit test\n")),(0,r.mdx)("h4",null,"compile"),(0,r.mdx)("p",null,"Compiles all components."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"bit compile\n")),(0,r.mdx)("h4",null,"lint"),(0,r.mdx)("p",null,"Get lint results for all components."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"bit lint\n")),(0,r.mdx)("h2",null,"Usage"),(0,r.mdx)("h3",null,"Setting a default environment for the workspace"),(0,r.mdx)("p",null,"Environments can only be configured using the ",(0,r.mdx)("inlineCode",{parentName:"p"},"teambit.workspace/variants")," workspace API. That means the ",(0,r.mdx)("inlineCode",{parentName:"p"},"teambit.workspace/workspace")," cannot be utilized to set an environment as the default for all components. To achieve a similar result, select all components using the ",(0,r.mdx)("inlineCode",{parentName:"p"},"*")," wildcard."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json"},'{\n "teambit.workspace/variants": {\n "*": {\n "teambit.react/react": {}\n }\n }\n}\n')),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{style:{color:"#c31313"}},"Never use the '*' wildcard in a workspace that uses multiple environments!"),"Instead, use exclusive namespaces or directories to select and configure each group of components to use its own environment (see an example in the next section)."),(0,r.mdx)("br",null),(0,r.mdx)("br",null),(0,r.mdx)("p",null,"To learn more, see the 'Troubleshooting' section."),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"A single component (with the same version) cannot use more than a single environment.")),(0,r.mdx)("h3",null,"Setting multiple environments"),(0,r.mdx)("p",null,"A single workspace can use different environments for different sets of components. Setting an environment on a specific group of components is done by selecting the group and applying the environment. This is done using ",(0,r.mdx)("inlineCode",{parentName:"p"},"teambit.workspace/variants"),"."),(0,r.mdx)("p",null,"For example, to set the Node and React environments on two sets of components (selected by their directory):"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json"},'{\n "teambit.workspace/variants": {\n "components/ui": {\n "teambit.react/react": {}\n },\n "components/utils": {\n "teambit.harmony/node": {}\n }\n }\n}\n')),(0,r.mdx)("h3",null,"Extending an environment"),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"This section goes through the steps of extending the 'main runtime'.\nSee the 'Runtime Environment' section to learn how to extend multiple runtime environments.")),(0,r.mdx)("p",null,"An environment extension is a component that extends an existing environment. An extension file will have the ",(0,r.mdx)("inlineCode",{parentName:"p"},".extension.ts")," suffix as a convention."),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"The ",(0,r.mdx)("inlineCode",{parentName:"p"},"*.extensions.ts")," pattern should only be used when no other 'runtime environment' is being extended other than the 'main runtime.' For more details, see the 'runtime environments' section.")),(0,r.mdx)("p",null,"To create and use an environment extension:"),(0,r.mdx)("ol",null,(0,r.mdx)("li",{parentName:"ol"},"Create the extension files"),(0,r.mdx)("li",{parentName:"ol"},"Use and extend an existing environment"),(0,r.mdx)("li",{parentName:"ol"},"Track the new component"),(0,r.mdx)("li",{parentName:"ol"},"Use the new extension component ID to set it in the workspace configuration file"),(0,r.mdx)("li",{parentName:"ol"},"(Optional) Tag the new component"),(0,r.mdx)("li",{parentName:"ol"},"(Optional) Export the component the make it available to be used by others")),(0,r.mdx)("h4",null,"1. Create the environment extension files"),(0,r.mdx)("p",null,"We'll start by creating a new extension:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"// In the workspace's root directory\nmkdir -p extensions/custom-react\ntouch extensions/custom-react/custom-react.extension.ts\ntouch extensions/custom-react/index.ts\n")),(0,r.mdx)("h4",null,"2. Use an existing environment to extend it"),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"The below code uses the React environment as an example.")),(0,r.mdx)("p",null,"Our files will have the following code (the code below will only extend the ",(0,r.mdx)("inlineCode",{parentName:"p"},"@teambit.react/react")," environment without changing its configurations):"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-tsx"},"// custom-react.extension.ts\n\n// Import from the Environments aspect to register this extension as an environment\nimport { EnvsMain, EnvsAspect } from '@teambit/envs';\n// Import from the React aspect to extend it\nimport { ReactAspect, ReactMain } from '@teambit/react';\n\nexport class CustomReactExtension {\n constructor(private react: ReactMain) {}\n\n // Set the necessary dependencies to be injected (by Bit) into the following 'provider' function\n static dependencies: any = [EnvsAspect, ReactAspect];\n\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n // The 'compose' methods to compose the overrides into a single environment\n const customReactEnv = react.compose([\n // This is were the environment's 'transformers' will be used to customize it\n ]);\n\n // Register this extension as an environment using the \"registerEnv\" slot (provided by the Environments aspect).\n envs.registerEnv(customReactEnv);\n\n return new CustomReactExtension(react);\n }\n}\n")),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// index.ts\n\nimport { CustomReactExtension } from './custom-react.extension';\nexport { CustomReactExtension };\nexport default CustomReactExtension;\n")),(0,r.mdx)("h4",null,"3. Track the extension component"),(0,r.mdx)("p",null,"We'll then track the new component (with the 'my-extensions' namespace):"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"bit add extensions/custom-react -n my-extensions\n")),(0,r.mdx)("h4",null,"4. Set the extension component in the workspace config file"),(0,r.mdx)("p",null,"Our extension component now has a component ID that can be used in our ",(0,r.mdx)("inlineCode",{parentName:"p"},"workspace.jsonc")," configuration file:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json"},'{\n "teambit.workspace/workspace": {\n "name": "my-workspace",\n "icon": "https://image.flaticon.com/icons/svg/185/185034.svg",\n "defaultScope": "my-org.my-extensions"\n },\n "teambit.workspace/variants": {\n "*": {\n "my-org.my-extensions/custom-react": {}\n }\n }\n}\n')),(0,r.mdx)("h3",null,"The anatomy of an environment extension"),(0,r.mdx)("p",null,"An environment extension uses the following Bit components to extend an existing environment, and to register itself as an environment:"),(0,r.mdx)("ul",null,(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},"The ",(0,r.mdx)("strong",{parentName:"p"},'"base" environment')," (e.g, ",(0,r.mdx)("inlineCode",{parentName:"p"},"@teambit/react"),") is extended and customized using its override methods. Each override method, or \"environment transformer\", corresponds to a Bit extension component used by the environment (e.g, the TypeScript component). Using an 'environment transformer' will add new configurations to the relevant Bit component and will override any conflicting ones.",(0,r.mdx)("br",null)," The full list of available 'environment transformers' can be seen in the specific environment's documentation (see: React, React Native, Node).")),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},"The ",(0,r.mdx)("strong",{parentName:"p"},"'Environments' component")," (",(0,r.mdx)("inlineCode",{parentName:"p"},"@teambit/envs"),") is used to:"),(0,r.mdx)("ol",{parentName:"li"},(0,r.mdx)("li",{parentName:"ol"},'Register the new environment using its "slot"'),(0,r.mdx)("li",{parentName:"ol"},'Override a "service handler". This is done to replace a Bit component used by an environment service. For example, to set the "compiler" service handler to use Babel instead of TypeScript')))),(0,r.mdx)("h4",null,"Override the config for a Bit component used by the environment"),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"The current Envs API will soon be replaced.")),(0,r.mdx)("p",null,"The example below is of a React environment extension. This new environment overrides React's DevServer configuration by setting a new Webpack configuration file."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-tsx"},"// custom-react.extension.ts\n\n// Import from the Environments aspect to register this extension as an environment\nimport { EnvsMain, EnvsAspect } from '@teambit/envs';\n// Import from the React aspect to extend it and override its DevServer config\nimport { ReactAspect, ReactMain } from '@teambit/react';\n\nconst newWebpackConfig = require('./webpack/new-webpack-config');\n\nexport class CustomReactExtension {\n constructor(private react: ReactMain) {}\n\n // Set the necessary dependencies to be injected (by Bit) into the following 'provider' function\n static dependencies: any = [EnvsAspect, ReactAspect];\n\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n // The 'compose' methods to compose the overrides into a single environment\n const customReactEnv = react.compose([\n\n // Override the Webpack configs of the DevServer aspect\n react.overrideDevServerConfig(newWebpackRules);\n\n ]);\n\n // Register this extension as an environment using the \"registerEnv\" slot (provided by the Environments aspect).\n envs.registerEnv(customReactEnv);\n\n return new CustomReactExtension(react);\n }\n}\n")),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// index.ts\nimport { CustomReactExtension } from './custom-react.extension';\nexport { CustomReactExtension };\nexport default CustomReactExtension;\n")),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"The 'provider' method will be executed by Bit. Its Bit aspects dependencies are set in the ",(0,r.mdx)("inlineCode",{parentName:"p"},"dependencies")," variable, and will be injected into the method upon execution.")),(0,r.mdx)("h4",null,"Override a 'service handler' to replace a component used by the environment"),(0,r.mdx)("p",null,"The example below is of a React environment extension. This new environment overrides the 'service handler' for the compiler service. It replaces the Bit aspect used by it, TypeScript, with another Bit aspect, Babel."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-tsx"},"// custom-react.extension.ts\n\n// Import from the Environments aspect to register this extension as an environment\nimport { EnvsMain, EnvsAspect } from '@teambit/envs';\n// Import from the React aspect to extend it and override its DevServer config\nimport { ReactAspect, ReactMain } from '@teambit/react';\n// Import the Babel aspect to configure it and set it as the new compiler\nimport { BabelAspect, BabelMain } from '@teambit.compilation/babel';\n\nconst babelConfig = require('./babel/babel-config');\n\nexport class CustomReactExtension {\n constructor(private react: ReactMain) {}\n\n // Set the necessary dependencies to be injected (by Bit) into the following 'provider' function\n static dependencies: any = [EnvsAspect, ReactAspect, BabelAspect];\n\n static async provider([envs, react, babel]: [EnvsMain, ReactMain, BabelMain]) {\n // Create a new Babel compiler with the 'babelConfig' configurations\n const babelCompiler = babel.createCompiler({\n babelTransformOptions: babelConfig,\n });\n\n // Use the 'override' method provided by the 'environments' aspect (not the React aspect)\n const compilerOverride = envs.override({\n getCompiler: () => {\n return babelCompiler;\n },\n });\n\n // Compose the overrides into a single environment\n const customReactEnv = react.compose([compilerOverride]);\n\n // Register this extension as an environment using the \"registerEnv\" slot (provided by the 'environments' aspect).\n envs.registerEnv(customReactEnv);\n\n return new CustomReactExtension(react);\n }\n}\n")),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// index.ts\nimport { CustomReactExtension } from './custom-react.extension';\nexport { CustomReactExtension };\nexport default CustomReactExtension;\n")),(0,r.mdx)("h2",null,"Concepts and tools"),(0,r.mdx)("h3",null,"Environment Services"),(0,r.mdx)("p",null,'To become a "one-stop-shop" for components, an environment "bundles" together different Environment Services provided by various Bit aspect components. These Environment Services enable other Bit aspects to integrate into Bit\'s component life-cycle features.'),(0,r.mdx)("p",null,"For example, the 'Tester' service (",(0,r.mdx)("inlineCode",{parentName:"p"},"@teambit.defender/tester"),") enables the React environment (",(0,r.mdx)("inlineCode",{parentName:"p"},"@teambit.react/react"),") to set 'Jest' (",(0,r.mdx)("inlineCode",{parentName:"p"},"teambit.defender/jest"),") as the default test runner for its components. This will enable Jest to be executed on the ",(0,r.mdx)("inlineCode",{parentName:"p"},"bbit test")," command, to be run as a pre-tag check, to output results using Bit's logger, and even to display the generated logs in the Workspace and Scope UIs (to name just a few examples)."),(0,r.mdx)("img",{src:"https://storage.googleapis.com/docs-images/react_env_ex.png",alt:"React env using Jest with the tester service",style:{width:"50%",minWidth:500}}),(0,r.mdx)("blockquote",null,(0,r.mdx)("h5",{parentName:"blockquote"},"Services VS Build Tasks"),(0,r.mdx)("p",{parentName:"blockquote"},"Environment Services which are executed either by the development server, or via the CLI, are not identical\nto Build Tasks that run as part of the Build Pipeline.\nFor example, the TypeScript configurations used for compilation by the development server are not the same as the ones used for a component's build process.")),(0,r.mdx)("h4",null,"Compiler"),(0,r.mdx)("p",null,"Runs the environment's selected compiler (for example, TypeScript)."),(0,r.mdx)("h4",null,"Tester"),(0,r.mdx)("p",null,"Runs the environment's selected test runner (for example, Jest)"),(0,r.mdx)("h4",null,"Linter"),(0,r.mdx)("p",null,"Runs the environment's selected linter (for example, ESLint)"),(0,r.mdx)("h4",null,"Documentation"),(0,r.mdx)("p",null,"Sets the template for the auto-generated component documentation, as well as the API for customizing component docs."),(0,r.mdx)("h4",null,"Build pipeline (CI)"),(0,r.mdx)("p",null,"Sets the sequence of build tasks to run before a component is tagged with a new version."),(0,r.mdx)("h4",null,"DevServer"),(0,r.mdx)("p",null,"Bundles all components and runs a server to display them, live (using \"hot reloading\") in the workspace UI. This includes rendering the 'compositions' as well as the documentation shown in the 'Overview' tab."),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"Even though different types of components, e.g. React and Node components, run on different servers (one for each environment) the workspace is explored and navigated through as if it where a single server.")),(0,r.mdx)("h4",null,"Package"),(0,r.mdx)("p",null,"Generates the node module package for components, with properties set by the environment."),(0,r.mdx)("h4",null,"Dependencies"),(0,r.mdx)("p",null,"Sets the default dependencies (as well as their version and type) for each component handled by the environment. That includes peer dependencies used for runtime (for example, ",(0,r.mdx)("inlineCode",{parentName:"p"},"react-dom"),") and dev dependencies (for example, ",(0,r.mdx)("inlineCode",{parentName:"p"},"@types/react"),")."),(0,r.mdx)("h4",null,"Bundler"),(0,r.mdx)("p",null,"Bundles components (compositions, docs, etc.) using the environment's bundler and bundling configurations. The generated assets are use both in development (when running the development server) and when exploring component's tagged releases (for example, in the scope UI)."),(0,r.mdx)("h3",null,"Service Handlers"),(0,r.mdx)("p",null,"Service Handlers are the link that binds an environment to the various Environment Services. They are methods in the Environment class that set an Environment Service to use a specific Bit extension component or a configuration file."),(0,r.mdx)("p",null,"For example, the React environment uses the Service Handler ",(0,r.mdx)("inlineCode",{parentName:"p"},"getCompiler()")," to configure the Compiler Environment Service to run the TypeScript extension component."),(0,r.mdx)("p",null,"Environment services run on various events. Whenever a service runs, it executes its corresponding service handler which consequently runs the configured aspect (in the previous example, that would be TypeScript)."),(0,r.mdx)("p",null,"Different components in a Bit workspace may use different environments. That means environment services need to execute their corresponding service handlers in the specific environment applied on the component currently being processed."),(0,r.mdx)("p",null,"For example, if ",(0,r.mdx)("em",{parentName:"p"},"component A")," uses the Node environment then the Compiler service processing that component, will execute the Service Handler (in that case, ",(0,r.mdx)("inlineCode",{parentName:"p"},"getCompiler"),") found in the Node environment."),(0,r.mdx)("h3",null,"List of service handlers"),(0,r.mdx)("h4",null,"getTester"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getTester(...args : any[]): Tester\n")),(0,r.mdx)("p",null,"Returns a test runner to be used by the Tester service."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"export class ReactEnv implements Environment {\n constructor(\n // ...\n\n // The Jest Aspect\n private jestAspect: JestMain\n ) {}\n\n // ...\n\n getTester(jestConfigPath: string, jestModule = jest): Tester {\n const jestConfig = require.resolve('./jest/jest.config');\n return this.jestAspect.createTester(jestConfig);\n }\n}\n")),(0,r.mdx)("h4",null,"getCompiler"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getCompiler(...args : any[]): Compiler\n")),(0,r.mdx)("p",null,"Returns a compiler to be used by the Compiler service."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"export class ReactEnv implements Environment {\n\nconstructor(\n // ...\n\n // The TypeScript aspect\n private tsAspect: TypescriptMain\n){}\n\n// ...\n\ngetCompiler() {\n const tsConfig = require.resolve('./typescript/tsconfig.json')\n return this.tsAspect.createCompiler(tsConfig);\n}\n")),(0,r.mdx)("h4",null,"getLinter"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getLinter(...args : any[]): Linter\n")),(0,r.mdx)("p",null,"Returns a linter to be used by the Linter service."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"import { ESLintLinter } from '@teambit/defender.eslint-linter';\n\nexport class ReactEnv implements Environment {\n\n constructor(){\n // ...\n\n // The ESLint aspect\n private eslint: ESLintMain\n }\n\n // ...\n\n getLinter() {\n return ESLintLinter.from({\n configPath: require.resolve('./eslint/eslintrc'),\n // resolve all plugins from the react environment.\n pluginsPath: __dirname,\n });\n }\n}\n")),(0,r.mdx)("h4",null,"getDevServer"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getDevServer(...args : any[]): DevServer\n")),(0,r.mdx)("p",null,"Returns a DevServer to be used by the DevServer service. (A DevServer is essentially the combination of the bundler configurations, together with a specified 'listen' port number)"),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"export class ReactEnv implements Environment {\n constructor(\n // ...\n\n // The Webpack aspect\n private webpack: WebpackMain\n ) {}\n\n // ...\n\n getDevServer(): DevServer {\n const withDocs = Object.assign(context, {\n entry: context.entry.concat([require.resolve('./docs')]),\n });\n return this.webpack.createDevServer(withDocs, webpackConfig);\n }\n}\n")),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"The above example runs the dev server with the environment's documentation template.")),(0,r.mdx)("h4",null,"getDocsTemplate"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getDocsTemplate(...args : any[]): string\n")),(0,r.mdx)("p",null,"Returns the path to the documentation template files, to be used by the Documentation service."),(0,r.mdx)("p",null,"For example (see docs files ",(0,r.mdx)("a",{parentName:"p",href:"https://github.com/teambit/bit/tree/master/scopes/react/react/docs"},"here"),"):"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"export class ReactEnv implements Environment {\n // ...\n\n getDocsTemplate() {\n return require.resolve('./docs');\n }\n}\n")),(0,r.mdx)("h4",null,"getPackageJsonProps"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getPackageJsonProps(...args : any[]): object\n")),(0,r.mdx)("p",null,"Returns an object that defines the ",(0,r.mdx)("inlineCode",{parentName:"p"},"package.json")," properties of the packages generated for components handled by this environment. This configuration is used by the Packager service."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"export class ReactEnv implements Environment {\n // ...\n\n getPackageJsonProps() {\n return {\n main: 'dist/{main}.js',\n types: '{main}.ts',\n };\n }\n}\n")),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"As with any other 'merging' process, the properties defined in the above returned object will be added to configurations set by Bit.\nConflicting properties will be overridden by the properties that are set here.\nConfigurations that are set here may also be overridden, either by the 'pkg aspect' or by workspace configurations set using the 'variants API'.")),(0,r.mdx)("h4",null,"getDependencies"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getDependencies(component: any): Promise<DependencyList>\n")),(0,r.mdx)("p",null,"Returns an object that defines the default dependencies for components handled by this environment. The returned object is used by the Dependencies service."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"export class ReactEnv implements Environment {\n // ...\n\n async getDependencies() {\n return {\n dependencies: {\n react: '-',\n },\n devDependencies: {\n '@types/react': '16.9.43',\n '@types/jest': '~26.0.9',\n },\n peerDependencies: {\n react: '^16.13.1',\n 'react-dom': '^16.13.1',\n },\n };\n }\n}\n")),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"As with any other 'merging' process, the properties defined in the above returned object will be added to configurations set by Bit.\nConflicting properties will be overridden by the properties that are set here.\nConfigurations that are set here may also be overridden, either by the 'Dependency Resolver aspect' or by workspace configurations set using the 'variants API'.")),(0,r.mdx)("h4",null,"getBuildPipe"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getBuildPipe(...args : any[]): BuildTask[]\n")),(0,r.mdx)("p",null,"Returns an array of build tasks to be used by the Builder service. Tasks will be added after and before Bit's pre-configured build tasks."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"export class ReactEnv implements Environment {\n constructor(\n // ...\n\n // The Compiler aspect\n private compiler: CompilerMain,\n\n // The Tester aspect\n private tester: TesterMain\n ) {}\n\n getBuildPipe(): BuildTask[] {\n return [this.compiler.createTask('StencilCompiler', this.getCompiler()), this.tester.task];\n }\n}\n")),(0,r.mdx)("h2",null,"Extending multiple runtime environments"),(0,r.mdx)("p",null,"An environment may operate in multiple runtime environments: 'Main', which runs on the server and 'UI' and 'Preview', which run on the browser.\nEach runtime environment runs all files that are named with its corresponding file pattern."),(0,r.mdx)("p",null,'An environment extension that runs on multiple runtimes is called "Aspect" an will have the following file structure:'),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre"},"|-- env-extension\n |-- env-extension.main.ts\n |-- env-extension.ui.tsx\n |-- env-extension.preview.tsx\n |-- env.extension.aspect.ts\n")),(0,r.mdx)("h3",null,"Registering an environment as an aspect"),(0,r.mdx)("p",null,"Create a ",(0,r.mdx)("inlineCode",{parentName:"p"},"*.aspect.ts")," file:"),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"touch path/to/extension/env-extension.aspect.ts\n")),(0,r.mdx)("p",null,"Place the following lines to register your environment as a multiple runtime extension (a.k.a, an Aspect):"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// env-extension.aspect.ts\n\nimport { Aspect } from '@teambit/harmony';\n\nexport const ReactWithProvidersAspect = Aspect.create({\n // The ID should be your component's ID\n // Make sure to track your extension component before registering it as an Aspect\n id: 'my-scope.react-with-providers',\n});\n")),(0,r.mdx)("h3",null,"Registering a runtime extension"),(0,r.mdx)("p",null,"An aspect is a collection of multiple extensions, each extending a specific runtime."),(0,r.mdx)("p",null,"Register each runtime extension to its corresponding runtime, using the ",(0,r.mdx)("inlineCode",{parentName:"p"},"addRuntime")," method."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-typescript"},"// react-extension.preview.ts\n\nimport { PreviewRuntime } from '@teambit/preview';\nimport { ReactAspect, ReactPreview } from '@teambit/react';\nimport { ReactExtensionAspect } from './react-with-providers.aspect';\n\nexport class ReactExtensionPreview {\n static runtime = PreviewRuntime;\n\n static dependencies = [ReactAspect];\n\n static async provider([react]: [ReactPreview]) {\n return new ReactExtensionPreview();\n }\n}\n\nReactExtensionAspect.addRuntime(ReactExtensionPreview);\n")),(0,r.mdx)("h3",null,"Runtime environments"),(0,r.mdx)("h4",null,"Main"),(0,r.mdx)("p",null,(0,r.mdx)("inlineCode",{parentName:"p"},"*.main.runtime.ts")),(0,r.mdx)("p",null,"Node files that run in a node runtime environments and outputs to the terminal."),(0,r.mdx)("p",null,(0,r.mdx)("strong",{parentName:"p"},"Example:"),"\nThe React environment TypeScript compiler will be extended in the main runtime."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-typescript"},"// react-extension.main.ts\n\nimport { MainRuntime } from '@teambit/cli';\nimport { EnvsAspect, EnvsMain } from '@teambit/envs';\nimport { ReactAspect, ReactMain } from '@teambit/react';\nimport { ReactExtensionAspect } from './react-extension.aspect';\n\nconst tsconfig = require('./typescript/tsconfig.json');\n\nexport class ReactExtensionMain {\n constructor(private react: ReactMain, private envs: EnvsMain) {}\n\n icon() {\n return 'https://static.bit.dev/extensions-icons/react.svg';\n }\n\n static runtime = MainRuntime;\n\n static dependencies = [ReactAspect, EnvsAspect];\n\n static async provider([react, envs]: [ReactMain, EnvsMain]) {\n const reactExtension = envs.compose(react, [react.overrideTsConfig(tsconfig)]);\n envs.registerEnv(reactExtension);\n return new ReactWithProvidersMain(react, envs);\n }\n}\n\nReactExtensionAspect.addRuntime(ReactExtensionMain);\n")),(0,r.mdx)("h4",null,"UI"),(0,r.mdx)("p",null,(0,r.mdx)("inlineCode",{parentName:"p"},"*.ui.runtime.[ts,js,jsx,tsx]")),(0,r.mdx)("p",null,"JSX files that run in the browser, as part of the Workspace/Scope UI bundle that is being served by the development server."),(0,r.mdx)("h4",null,"Preview"),(0,r.mdx)("p",null,(0,r.mdx)("inlineCode",{parentName:"p"},"*.preview.runtime.*")),(0,r.mdx)("p",null,"These files are served by the environment's server, as part of the environment's preview bundle (i.e, the component compositions and documentation).\n(The 'preview' runtime is rendered in the Workspace/Scope UI using an iframe.)"),(0,r.mdx)("p",null,(0,r.mdx)("strong",{parentName:"p"},"Example:"),'\nA new composition provider that will "wrap" every composition using that environment will be added using the preview runtime since it is part of the component compositions (which are being served to the browser by the environment\'s server).'),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-typescript"},"// react-extension.preview.ts\n\nimport { PreviewRuntime } from '@teambit/preview';\nimport { ReactAspect, ReactPreview } from '@teambit/react';\nimport { ReactExtensionAspect } from './react-with-providers.aspect';\nimport { Center } from './my-providers/center';\n\nexport class ReactExtensionPreview {\n static runtime = PreviewRuntime;\n\n static dependencies = [ReactAspect];\n\n static async provider([react]: [ReactPreview]) {\n react.registerProvider(Center);\n\n return new ReactExtensionPreview();\n }\n}\n\nReactExtensionAspect.addRuntime(ReactExtensionPreview);\n")),(0,r.mdx)("h2",null,"Troubleshooting"),(0,r.mdx)("p",null,(0,r.mdx)("strong",{parentName:"p"},"Problem:")," Components that are configured to use a specific environment, use the workspace's default environment, instead."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json"},'{\n "teambit.workspace/variants": {\n "*": {\n "teambit.react/react": {}\n },\n "components/utils": {\n "teambit.harmony/node": {}\n }\n }\n}\n')),(0,r.mdx)("p",null,"In the above example, components in the ",(0,r.mdx)("inlineCode",{parentName:"p"},"components/utils")," directory are set to use the Node environment.\nSince that selection is more specific than the one done using the ",(0,r.mdx)("inlineCode",{parentName:"p"},"*")," wildcard selector, it is expected to override it."),(0,r.mdx)("p",null,(0,r.mdx)("strong",{parentName:"p"},"Understanding the problem:"),"\nTo select the right configurations for each component, the 'Variants' aspect sorts all workspace configurations, from the most specific to the most general.\nThe first configuration set on an aspect (the most specific one) will be the one that is selected for that aspect.\nThat means, once Variants encounters configurations for an aspect, it stops looking for additional configurations for that specific aspect."),(0,r.mdx)("p",null,"Each environment is considered as a different aspect, even though they are all under the \"environments\" category and can only be used once per component.\n'Variants' does not understand categories, only individual aspects and therefore, cannot override one environment with a different environment."),(0,r.mdx)("p",null,(0,r.mdx)("strong",{parentName:"p"},"Solution #1:")),(0,r.mdx)("p",null,"Remove the ",(0,r.mdx)("inlineCode",{parentName:"p"},"*")," general selection and use only specific and exclusive selectors to configure environments\n(that means your workspace directories/ namespaces need to be structured in a way that enables complete selection of all components using selectors that are exclusive)."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json"},'{\n "teambit.workspace/variants": {\n "components/react": {\n "teambit.react/react": {}\n },\n "components/utils": {\n "teambit.harmony/node": {}\n }\n }\n}\n')),(0,r.mdx)("p",null,(0,r.mdx)("strong",{parentName:"p"},"Solution #2:"),"\nConfigure the environment using the Envs config API."),(0,r.mdx)("p",null,"Example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json"},'{\n "teambit.workspace/variants": {\n "*": {\n "teambit.react/react": {}\n },\n "components/utils": {\n "teambit.harmony/node": {},\n "teambit.envs/envs": {\n "env": "teambit.harmony/node"\n }\n }\n }\n}\n')),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"Notice how the Node environment was added also as a standalone aspect, to ensure that it is registered as a dependency of the selected components.")),(0,r.mdx)("hr",null))}d.__bit_component=o,d.isMDXComponent=!0},10583:(e,n,t)=>{Object.defineProperty(n,"B",{enumerable:!0,get:function(){return o.default}});var o=r(t(45506));function r(e){return e&&e.__esModule?e:{default:e}}r.__bit_component={id:"teambit.envs/aspect-docs/envs@0.0.169",homepage:"https://bit.cloud/teambit/envs/aspect-docs/envs",exported:!0}},33114:(e,n,t)=>{var o={id:"teambit.envs/envs@1.0.424",homepage:"https://bit.cloud/teambit/envs/envs",exported:!0};function r(){const e=a(t(41594));return r=function(){return e},e}function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0}),n.Logo=void 0,r.__bit_component=o,a.__bit_component=o;const i=()=>r().default.createElement("div",{style:{height:"100%",display:"flex",justifyContent:"center"}},r().default.createElement("img",{style:{width:70},src:"https://static.bit.dev/extensions-icons/env.svg"}));i.__bit_component=o,n.Logo=i},5016:e=>{e.exports=MdxJsReact},41594:e=>{e.exports=React}},n={};function t(o){var r=n[o];if(void 0!==r)return r.exports;var a=n[o]={exports:{}};return e[o](a,a.exports,t),a.exports}t.d=(e,n)=>{for(var o in n)t.o(n,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:n[o]})},t.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};t.r(o),t.d(o,{compositions:()=>x,compositions_metadata:()=>v,overview:()=>h});var r={};t.r(r),t.d(r,{default:()=>u});var a=t(33114),i=(t(41594),t(5016));const s=TeambitMdxUiMdxScopeContext;var m=t(10583),l=["components"];function c(){return c=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var o in t)({}).hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},c.apply(null,arguments)}var p={},d="wrapper";function u(e){var n=e.components,t=function(e,n){if(null==e)return{};var t,o,r=function(e,n){if(null==e)return{};var t={};for(var o in e)if({}.hasOwnProperty.call(e,o)){if(n.includes(o))continue;t[o]=e[o]}return t}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)t=a[o],n.includes(t)||{}.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}(e,l);return(0,i.mdx)(d,c({},p,t,{components:n,mdxType:"MDXLayout"}),(0,i.mdx)(s.MDXScopeProvider,{components:{Envs:m.B},mdxType:"MDXScopeProvider"},(0,i.mdx)(m.B,{mdxType:"Envs"})))}u.isMDXComponent=!0;const x=[a],h=[r],v={compositions:[{displayName:"Logo",identifier:"Logo"}]};return o})()));
|
1
|
+
!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports["teambit.envs/envs-preview"]=n():e["teambit.envs/envs-preview"]=n()}(self,(()=>(()=>{"use strict";var e={1148:(e,n,t)=>{var o={id:"teambit.envs/aspect-docs/envs@0.0.170",homepage:"https://bit.cloud/teambit/envs/aspect-docs/envs",exported:!0};Object.defineProperty(n,"__esModule",{value:!0}),n.default=d,i(t(1594));var r=t(5016),a=["components"];function i(e){return e&&e.__esModule?e:{default:e}}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var o in t)({}).hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},s.apply(null,arguments)}function m(e,n){if(null==e)return{};var t,o,r=l(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)t=a[o],n.includes(t)||{}.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}function l(e,n){if(null==e)return{};var t={};for(var o in e)if({}.hasOwnProperty.call(e,o)){if(n.includes(o))continue;t[o]=e[o]}return t}i.__bit_component=o,s.__bit_component=o,m.__bit_component=o,l.__bit_component=o;var c={},p="wrapper";function d(e){var n=e.components,t=m(e,a);return(0,r.mdx)(p,s({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.mdx)("p",null,"The Envs aspect runs Bit environments and environment services, and defines their structure."),(0,r.mdx)("p",null,"A Bit environment is a development environment encapsulated in a Bit component. Just like other components, Bit environments can be instantly added to your workspace to start developing, testing, and building components with zero configurations.\nDifferent environments can be easily applied to multiple components in a workspace, and can be easily extended or customized to fit your needs and development stack. For example, try the React environment to start developing React components in your workspace.\nLike all Bit components, Bit environments are reusable, so you can share them across projects and teams to greatly speed up and standardize development."),(0,r.mdx)("h4",null,"Example"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json"},'// Using the \'Node\' and \'React\' environments for different components in a Bit workspace.\n{\n "teambit.workspace/variants": {\n "components/ui": {\n "teambit.react/react": {}\n },\n "components/utils": {\n "teambit.harmony/node": {}\n }\n }\n}\n')),(0,r.mdx)("h4",null,"Features"),(0,r.mdx)("ul",null,(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},(0,r.mdx)("strong",{parentName:"p"},"Blazing fast environment setup"),": Setting up an environment requires nothing more than configuring a workspace to use a Bit extension.\nGet started in seconds and focus on the thing that matters most - delivering great features.")),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},(0,r.mdx)("strong",{parentName:"p"},"Multiple environments in a single workspace"),": No need to constantly switch between workspaces as different environments,\nset to handle different components, can all be used in parallel in a single workspace.")),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},(0,r.mdx)("strong",{parentName:"p"},"Less to learn"),": Using a pre-configured environment extension means you don't have to get into all the details of your build tooling.\nThat's a especially important when onboarding a new developer to your team.")),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},(0,r.mdx)("strong",{parentName:"p"},"Customizable and extensible"),": Environments can be extended to add or override configurations.\nQuickly add your own modifications to get an environment that best suits your needs.\nExport your environment extension to a remote scope to have it available to all your team.")),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},(0,r.mdx)("strong",{parentName:"p"},"Standardized development"),": Sharing and reusing environments makes it easier to maintain consistency in development across multiple decoupled Bit workspaces.")),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},(0,r.mdx)("strong",{parentName:"p"},"Easy to maintain"),": Get your environment's latest updates with just a simple ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit import")," command. Roll-back as easily, if needed."))),(0,r.mdx)("h2",null,"CLI reference"),(0,r.mdx)("p",null,"Bit environments make use of Bit's CLI to execute their different services. That means, ",(0,r.mdx)("inlineCode",{parentName:"p"},"bit test"),", for example, may execute different test runners, depending on the environment in use."),(0,r.mdx)("h4",null,"start"),(0,r.mdx)("p",null,"Runs the development serve (that includes running the Workspace UI)."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"// run the dev server\nbit start\n")),(0,r.mdx)("h4",null,"build"),(0,r.mdx)("p",null,"Runs the build pipeline (without tagging components with a new release version)."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"bit build\n")),(0,r.mdx)("h4",null,"test"),(0,r.mdx)("p",null,"Runs all tests."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"bit test\n")),(0,r.mdx)("h4",null,"compile"),(0,r.mdx)("p",null,"Compiles all components."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"bit compile\n")),(0,r.mdx)("h4",null,"lint"),(0,r.mdx)("p",null,"Get lint results for all components."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"bit lint\n")),(0,r.mdx)("h2",null,"Usage"),(0,r.mdx)("h3",null,"Setting a default environment for the workspace"),(0,r.mdx)("p",null,"Environments can only be configured using the ",(0,r.mdx)("inlineCode",{parentName:"p"},"teambit.workspace/variants")," workspace API. That means the ",(0,r.mdx)("inlineCode",{parentName:"p"},"teambit.workspace/workspace")," cannot be utilized to set an environment as the default for all components. To achieve a similar result, select all components using the ",(0,r.mdx)("inlineCode",{parentName:"p"},"*")," wildcard."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json"},'{\n "teambit.workspace/variants": {\n "*": {\n "teambit.react/react": {}\n }\n }\n}\n')),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{style:{color:"#c31313"}},"Never use the '*' wildcard in a workspace that uses multiple environments!"),"Instead, use exclusive namespaces or directories to select and configure each group of components to use its own environment (see an example in the next section)."),(0,r.mdx)("br",null),(0,r.mdx)("br",null),(0,r.mdx)("p",null,"To learn more, see the 'Troubleshooting' section."),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"A single component (with the same version) cannot use more than a single environment.")),(0,r.mdx)("h3",null,"Setting multiple environments"),(0,r.mdx)("p",null,"A single workspace can use different environments for different sets of components. Setting an environment on a specific group of components is done by selecting the group and applying the environment. This is done using ",(0,r.mdx)("inlineCode",{parentName:"p"},"teambit.workspace/variants"),"."),(0,r.mdx)("p",null,"For example, to set the Node and React environments on two sets of components (selected by their directory):"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json"},'{\n "teambit.workspace/variants": {\n "components/ui": {\n "teambit.react/react": {}\n },\n "components/utils": {\n "teambit.harmony/node": {}\n }\n }\n}\n')),(0,r.mdx)("h3",null,"Extending an environment"),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"This section goes through the steps of extending the 'main runtime'.\nSee the 'Runtime Environment' section to learn how to extend multiple runtime environments.")),(0,r.mdx)("p",null,"An environment extension is a component that extends an existing environment. An extension file will have the ",(0,r.mdx)("inlineCode",{parentName:"p"},".extension.ts")," suffix as a convention."),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"The ",(0,r.mdx)("inlineCode",{parentName:"p"},"*.extensions.ts")," pattern should only be used when no other 'runtime environment' is being extended other than the 'main runtime.' For more details, see the 'runtime environments' section.")),(0,r.mdx)("p",null,"To create and use an environment extension:"),(0,r.mdx)("ol",null,(0,r.mdx)("li",{parentName:"ol"},"Create the extension files"),(0,r.mdx)("li",{parentName:"ol"},"Use and extend an existing environment"),(0,r.mdx)("li",{parentName:"ol"},"Track the new component"),(0,r.mdx)("li",{parentName:"ol"},"Use the new extension component ID to set it in the workspace configuration file"),(0,r.mdx)("li",{parentName:"ol"},"(Optional) Tag the new component"),(0,r.mdx)("li",{parentName:"ol"},"(Optional) Export the component the make it available to be used by others")),(0,r.mdx)("h4",null,"1. Create the environment extension files"),(0,r.mdx)("p",null,"We'll start by creating a new extension:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"// In the workspace's root directory\nmkdir -p extensions/custom-react\ntouch extensions/custom-react/custom-react.extension.ts\ntouch extensions/custom-react/index.ts\n")),(0,r.mdx)("h4",null,"2. Use an existing environment to extend it"),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"The below code uses the React environment as an example.")),(0,r.mdx)("p",null,"Our files will have the following code (the code below will only extend the ",(0,r.mdx)("inlineCode",{parentName:"p"},"@teambit.react/react")," environment without changing its configurations):"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-tsx"},"// custom-react.extension.ts\n\n// Import from the Environments aspect to register this extension as an environment\nimport { EnvsMain, EnvsAspect } from '@teambit/envs';\n// Import from the React aspect to extend it\nimport { ReactAspect, ReactMain } from '@teambit/react';\n\nexport class CustomReactExtension {\n constructor(private react: ReactMain) {}\n\n // Set the necessary dependencies to be injected (by Bit) into the following 'provider' function\n static dependencies: any = [EnvsAspect, ReactAspect];\n\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n // The 'compose' methods to compose the overrides into a single environment\n const customReactEnv = react.compose([\n // This is were the environment's 'transformers' will be used to customize it\n ]);\n\n // Register this extension as an environment using the \"registerEnv\" slot (provided by the Environments aspect).\n envs.registerEnv(customReactEnv);\n\n return new CustomReactExtension(react);\n }\n}\n")),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// index.ts\n\nimport { CustomReactExtension } from './custom-react.extension';\nexport { CustomReactExtension };\nexport default CustomReactExtension;\n")),(0,r.mdx)("h4",null,"3. Track the extension component"),(0,r.mdx)("p",null,"We'll then track the new component (with the 'my-extensions' namespace):"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"bit add extensions/custom-react -n my-extensions\n")),(0,r.mdx)("h4",null,"4. Set the extension component in the workspace config file"),(0,r.mdx)("p",null,"Our extension component now has a component ID that can be used in our ",(0,r.mdx)("inlineCode",{parentName:"p"},"workspace.jsonc")," configuration file:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json"},'{\n "teambit.workspace/workspace": {\n "name": "my-workspace",\n "icon": "https://image.flaticon.com/icons/svg/185/185034.svg",\n "defaultScope": "my-org.my-extensions"\n },\n "teambit.workspace/variants": {\n "*": {\n "my-org.my-extensions/custom-react": {}\n }\n }\n}\n')),(0,r.mdx)("h3",null,"The anatomy of an environment extension"),(0,r.mdx)("p",null,"An environment extension uses the following Bit components to extend an existing environment, and to register itself as an environment:"),(0,r.mdx)("ul",null,(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},"The ",(0,r.mdx)("strong",{parentName:"p"},'"base" environment')," (e.g, ",(0,r.mdx)("inlineCode",{parentName:"p"},"@teambit/react"),") is extended and customized using its override methods. Each override method, or \"environment transformer\", corresponds to a Bit extension component used by the environment (e.g, the TypeScript component). Using an 'environment transformer' will add new configurations to the relevant Bit component and will override any conflicting ones.",(0,r.mdx)("br",null)," The full list of available 'environment transformers' can be seen in the specific environment's documentation (see: React, React Native, Node).")),(0,r.mdx)("li",{parentName:"ul"},(0,r.mdx)("p",{parentName:"li"},"The ",(0,r.mdx)("strong",{parentName:"p"},"'Environments' component")," (",(0,r.mdx)("inlineCode",{parentName:"p"},"@teambit/envs"),") is used to:"),(0,r.mdx)("ol",{parentName:"li"},(0,r.mdx)("li",{parentName:"ol"},'Register the new environment using its "slot"'),(0,r.mdx)("li",{parentName:"ol"},'Override a "service handler". This is done to replace a Bit component used by an environment service. For example, to set the "compiler" service handler to use Babel instead of TypeScript')))),(0,r.mdx)("h4",null,"Override the config for a Bit component used by the environment"),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"The current Envs API will soon be replaced.")),(0,r.mdx)("p",null,"The example below is of a React environment extension. This new environment overrides React's DevServer configuration by setting a new Webpack configuration file."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-tsx"},"// custom-react.extension.ts\n\n// Import from the Environments aspect to register this extension as an environment\nimport { EnvsMain, EnvsAspect } from '@teambit/envs';\n// Import from the React aspect to extend it and override its DevServer config\nimport { ReactAspect, ReactMain } from '@teambit/react';\n\nconst newWebpackConfig = require('./webpack/new-webpack-config');\n\nexport class CustomReactExtension {\n constructor(private react: ReactMain) {}\n\n // Set the necessary dependencies to be injected (by Bit) into the following 'provider' function\n static dependencies: any = [EnvsAspect, ReactAspect];\n\n static async provider([envs, react]: [EnvsMain, ReactMain]) {\n // The 'compose' methods to compose the overrides into a single environment\n const customReactEnv = react.compose([\n\n // Override the Webpack configs of the DevServer aspect\n react.overrideDevServerConfig(newWebpackRules);\n\n ]);\n\n // Register this extension as an environment using the \"registerEnv\" slot (provided by the Environments aspect).\n envs.registerEnv(customReactEnv);\n\n return new CustomReactExtension(react);\n }\n}\n")),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// index.ts\nimport { CustomReactExtension } from './custom-react.extension';\nexport { CustomReactExtension };\nexport default CustomReactExtension;\n")),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"The 'provider' method will be executed by Bit. Its Bit aspects dependencies are set in the ",(0,r.mdx)("inlineCode",{parentName:"p"},"dependencies")," variable, and will be injected into the method upon execution.")),(0,r.mdx)("h4",null,"Override a 'service handler' to replace a component used by the environment"),(0,r.mdx)("p",null,"The example below is of a React environment extension. This new environment overrides the 'service handler' for the compiler service. It replaces the Bit aspect used by it, TypeScript, with another Bit aspect, Babel."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-tsx"},"// custom-react.extension.ts\n\n// Import from the Environments aspect to register this extension as an environment\nimport { EnvsMain, EnvsAspect } from '@teambit/envs';\n// Import from the React aspect to extend it and override its DevServer config\nimport { ReactAspect, ReactMain } from '@teambit/react';\n// Import the Babel aspect to configure it and set it as the new compiler\nimport { BabelAspect, BabelMain } from '@teambit.compilation/babel';\n\nconst babelConfig = require('./babel/babel-config');\n\nexport class CustomReactExtension {\n constructor(private react: ReactMain) {}\n\n // Set the necessary dependencies to be injected (by Bit) into the following 'provider' function\n static dependencies: any = [EnvsAspect, ReactAspect, BabelAspect];\n\n static async provider([envs, react, babel]: [EnvsMain, ReactMain, BabelMain]) {\n // Create a new Babel compiler with the 'babelConfig' configurations\n const babelCompiler = babel.createCompiler({\n babelTransformOptions: babelConfig,\n });\n\n // Use the 'override' method provided by the 'environments' aspect (not the React aspect)\n const compilerOverride = envs.override({\n getCompiler: () => {\n return babelCompiler;\n },\n });\n\n // Compose the overrides into a single environment\n const customReactEnv = react.compose([compilerOverride]);\n\n // Register this extension as an environment using the \"registerEnv\" slot (provided by the 'environments' aspect).\n envs.registerEnv(customReactEnv);\n\n return new CustomReactExtension(react);\n }\n}\n")),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// index.ts\nimport { CustomReactExtension } from './custom-react.extension';\nexport { CustomReactExtension };\nexport default CustomReactExtension;\n")),(0,r.mdx)("h2",null,"Concepts and tools"),(0,r.mdx)("h3",null,"Environment Services"),(0,r.mdx)("p",null,'To become a "one-stop-shop" for components, an environment "bundles" together different Environment Services provided by various Bit aspect components. These Environment Services enable other Bit aspects to integrate into Bit\'s component life-cycle features.'),(0,r.mdx)("p",null,"For example, the 'Tester' service (",(0,r.mdx)("inlineCode",{parentName:"p"},"@teambit.defender/tester"),") enables the React environment (",(0,r.mdx)("inlineCode",{parentName:"p"},"@teambit.react/react"),") to set 'Jest' (",(0,r.mdx)("inlineCode",{parentName:"p"},"teambit.defender/jest"),") as the default test runner for its components. This will enable Jest to be executed on the ",(0,r.mdx)("inlineCode",{parentName:"p"},"bbit test")," command, to be run as a pre-tag check, to output results using Bit's logger, and even to display the generated logs in the Workspace and Scope UIs (to name just a few examples)."),(0,r.mdx)("img",{src:"https://storage.googleapis.com/docs-images/react_env_ex.png",alt:"React env using Jest with the tester service",style:{width:"50%",minWidth:500}}),(0,r.mdx)("blockquote",null,(0,r.mdx)("h5",{parentName:"blockquote"},"Services VS Build Tasks"),(0,r.mdx)("p",{parentName:"blockquote"},"Environment Services which are executed either by the development server, or via the CLI, are not identical\nto Build Tasks that run as part of the Build Pipeline.\nFor example, the TypeScript configurations used for compilation by the development server are not the same as the ones used for a component's build process.")),(0,r.mdx)("h4",null,"Compiler"),(0,r.mdx)("p",null,"Runs the environment's selected compiler (for example, TypeScript)."),(0,r.mdx)("h4",null,"Tester"),(0,r.mdx)("p",null,"Runs the environment's selected test runner (for example, Jest)"),(0,r.mdx)("h4",null,"Linter"),(0,r.mdx)("p",null,"Runs the environment's selected linter (for example, ESLint)"),(0,r.mdx)("h4",null,"Documentation"),(0,r.mdx)("p",null,"Sets the template for the auto-generated component documentation, as well as the API for customizing component docs."),(0,r.mdx)("h4",null,"Build pipeline (CI)"),(0,r.mdx)("p",null,"Sets the sequence of build tasks to run before a component is tagged with a new version."),(0,r.mdx)("h4",null,"DevServer"),(0,r.mdx)("p",null,"Bundles all components and runs a server to display them, live (using \"hot reloading\") in the workspace UI. This includes rendering the 'compositions' as well as the documentation shown in the 'Overview' tab."),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"Even though different types of components, e.g. React and Node components, run on different servers (one for each environment) the workspace is explored and navigated through as if it where a single server.")),(0,r.mdx)("h4",null,"Package"),(0,r.mdx)("p",null,"Generates the node module package for components, with properties set by the environment."),(0,r.mdx)("h4",null,"Dependencies"),(0,r.mdx)("p",null,"Sets the default dependencies (as well as their version and type) for each component handled by the environment. That includes peer dependencies used for runtime (for example, ",(0,r.mdx)("inlineCode",{parentName:"p"},"react-dom"),") and dev dependencies (for example, ",(0,r.mdx)("inlineCode",{parentName:"p"},"@types/react"),")."),(0,r.mdx)("h4",null,"Bundler"),(0,r.mdx)("p",null,"Bundles components (compositions, docs, etc.) using the environment's bundler and bundling configurations. The generated assets are use both in development (when running the development server) and when exploring component's tagged releases (for example, in the scope UI)."),(0,r.mdx)("h3",null,"Service Handlers"),(0,r.mdx)("p",null,"Service Handlers are the link that binds an environment to the various Environment Services. They are methods in the Environment class that set an Environment Service to use a specific Bit extension component or a configuration file."),(0,r.mdx)("p",null,"For example, the React environment uses the Service Handler ",(0,r.mdx)("inlineCode",{parentName:"p"},"getCompiler()")," to configure the Compiler Environment Service to run the TypeScript extension component."),(0,r.mdx)("p",null,"Environment services run on various events. Whenever a service runs, it executes its corresponding service handler which consequently runs the configured aspect (in the previous example, that would be TypeScript)."),(0,r.mdx)("p",null,"Different components in a Bit workspace may use different environments. That means environment services need to execute their corresponding service handlers in the specific environment applied on the component currently being processed."),(0,r.mdx)("p",null,"For example, if ",(0,r.mdx)("em",{parentName:"p"},"component A")," uses the Node environment then the Compiler service processing that component, will execute the Service Handler (in that case, ",(0,r.mdx)("inlineCode",{parentName:"p"},"getCompiler"),") found in the Node environment."),(0,r.mdx)("h3",null,"List of service handlers"),(0,r.mdx)("h4",null,"getTester"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getTester(...args : any[]): Tester\n")),(0,r.mdx)("p",null,"Returns a test runner to be used by the Tester service."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"export class ReactEnv implements Environment {\n constructor(\n // ...\n\n // The Jest Aspect\n private jestAspect: JestMain\n ) {}\n\n // ...\n\n getTester(jestConfigPath: string, jestModule = jest): Tester {\n const jestConfig = require.resolve('./jest/jest.config');\n return this.jestAspect.createTester(jestConfig);\n }\n}\n")),(0,r.mdx)("h4",null,"getCompiler"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getCompiler(...args : any[]): Compiler\n")),(0,r.mdx)("p",null,"Returns a compiler to be used by the Compiler service."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"export class ReactEnv implements Environment {\n\nconstructor(\n // ...\n\n // The TypeScript aspect\n private tsAspect: TypescriptMain\n){}\n\n// ...\n\ngetCompiler() {\n const tsConfig = require.resolve('./typescript/tsconfig.json')\n return this.tsAspect.createCompiler(tsConfig);\n}\n")),(0,r.mdx)("h4",null,"getLinter"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getLinter(...args : any[]): Linter\n")),(0,r.mdx)("p",null,"Returns a linter to be used by the Linter service."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"import { ESLintLinter } from '@teambit/defender.eslint-linter';\n\nexport class ReactEnv implements Environment {\n\n constructor(){\n // ...\n\n // The ESLint aspect\n private eslint: ESLintMain\n }\n\n // ...\n\n getLinter() {\n return ESLintLinter.from({\n configPath: require.resolve('./eslint/eslintrc'),\n // resolve all plugins from the react environment.\n pluginsPath: __dirname,\n });\n }\n}\n")),(0,r.mdx)("h4",null,"getDevServer"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getDevServer(...args : any[]): DevServer\n")),(0,r.mdx)("p",null,"Returns a DevServer to be used by the DevServer service. (A DevServer is essentially the combination of the bundler configurations, together with a specified 'listen' port number)"),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"export class ReactEnv implements Environment {\n constructor(\n // ...\n\n // The Webpack aspect\n private webpack: WebpackMain\n ) {}\n\n // ...\n\n getDevServer(): DevServer {\n const withDocs = Object.assign(context, {\n entry: context.entry.concat([require.resolve('./docs')]),\n });\n return this.webpack.createDevServer(withDocs, webpackConfig);\n }\n}\n")),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"The above example runs the dev server with the environment's documentation template.")),(0,r.mdx)("h4",null,"getDocsTemplate"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getDocsTemplate(...args : any[]): string\n")),(0,r.mdx)("p",null,"Returns the path to the documentation template files, to be used by the Documentation service."),(0,r.mdx)("p",null,"For example (see docs files ",(0,r.mdx)("a",{parentName:"p",href:"https://github.com/teambit/bit/tree/master/scopes/react/react/docs"},"here"),"):"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"export class ReactEnv implements Environment {\n // ...\n\n getDocsTemplate() {\n return require.resolve('./docs');\n }\n}\n")),(0,r.mdx)("h4",null,"getPackageJsonProps"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getPackageJsonProps(...args : any[]): object\n")),(0,r.mdx)("p",null,"Returns an object that defines the ",(0,r.mdx)("inlineCode",{parentName:"p"},"package.json")," properties of the packages generated for components handled by this environment. This configuration is used by the Packager service."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"export class ReactEnv implements Environment {\n // ...\n\n getPackageJsonProps() {\n return {\n main: 'dist/{main}.js',\n types: '{main}.ts',\n };\n }\n}\n")),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"As with any other 'merging' process, the properties defined in the above returned object will be added to configurations set by Bit.\nConflicting properties will be overridden by the properties that are set here.\nConfigurations that are set here may also be overridden, either by the 'pkg aspect' or by workspace configurations set using the 'variants API'.")),(0,r.mdx)("h4",null,"getDependencies"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getDependencies(component: any): Promise<DependencyList>\n")),(0,r.mdx)("p",null,"Returns an object that defines the default dependencies for components handled by this environment. The returned object is used by the Dependencies service."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"export class ReactEnv implements Environment {\n // ...\n\n async getDependencies() {\n return {\n dependencies: {\n react: '-',\n },\n devDependencies: {\n '@types/react': '16.9.43',\n '@types/jest': '~26.0.9',\n },\n peerDependencies: {\n react: '^16.13.1',\n 'react-dom': '^16.13.1',\n },\n };\n }\n}\n")),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"As with any other 'merging' process, the properties defined in the above returned object will be added to configurations set by Bit.\nConflicting properties will be overridden by the properties that are set here.\nConfigurations that are set here may also be overridden, either by the 'Dependency Resolver aspect' or by workspace configurations set using the 'variants API'.")),(0,r.mdx)("h4",null,"getBuildPipe"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"getBuildPipe(...args : any[]): BuildTask[]\n")),(0,r.mdx)("p",null,"Returns an array of build tasks to be used by the Builder service. Tasks will be added after and before Bit's pre-configured build tasks."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"export class ReactEnv implements Environment {\n constructor(\n // ...\n\n // The Compiler aspect\n private compiler: CompilerMain,\n\n // The Tester aspect\n private tester: TesterMain\n ) {}\n\n getBuildPipe(): BuildTask[] {\n return [this.compiler.createTask('StencilCompiler', this.getCompiler()), this.tester.task];\n }\n}\n")),(0,r.mdx)("h2",null,"Extending multiple runtime environments"),(0,r.mdx)("p",null,"An environment may operate in multiple runtime environments: 'Main', which runs on the server and 'UI' and 'Preview', which run on the browser.\nEach runtime environment runs all files that are named with its corresponding file pattern."),(0,r.mdx)("p",null,'An environment extension that runs on multiple runtimes is called "Aspect" an will have the following file structure:'),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre"},"|-- env-extension\n |-- env-extension.main.ts\n |-- env-extension.ui.tsx\n |-- env-extension.preview.tsx\n |-- env.extension.aspect.ts\n")),(0,r.mdx)("h3",null,"Registering an environment as an aspect"),(0,r.mdx)("p",null,"Create a ",(0,r.mdx)("inlineCode",{parentName:"p"},"*.aspect.ts")," file:"),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-shell"},"touch path/to/extension/env-extension.aspect.ts\n")),(0,r.mdx)("p",null,"Place the following lines to register your environment as a multiple runtime extension (a.k.a, an Aspect):"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-ts"},"// env-extension.aspect.ts\n\nimport { Aspect } from '@teambit/harmony';\n\nexport const ReactWithProvidersAspect = Aspect.create({\n // The ID should be your component's ID\n // Make sure to track your extension component before registering it as an Aspect\n id: 'my-scope.react-with-providers',\n});\n")),(0,r.mdx)("h3",null,"Registering a runtime extension"),(0,r.mdx)("p",null,"An aspect is a collection of multiple extensions, each extending a specific runtime."),(0,r.mdx)("p",null,"Register each runtime extension to its corresponding runtime, using the ",(0,r.mdx)("inlineCode",{parentName:"p"},"addRuntime")," method."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-typescript"},"// react-extension.preview.ts\n\nimport { PreviewRuntime } from '@teambit/preview';\nimport { ReactAspect, ReactPreview } from '@teambit/react';\nimport { ReactExtensionAspect } from './react-with-providers.aspect';\n\nexport class ReactExtensionPreview {\n static runtime = PreviewRuntime;\n\n static dependencies = [ReactAspect];\n\n static async provider([react]: [ReactPreview]) {\n return new ReactExtensionPreview();\n }\n}\n\nReactExtensionAspect.addRuntime(ReactExtensionPreview);\n")),(0,r.mdx)("h3",null,"Runtime environments"),(0,r.mdx)("h4",null,"Main"),(0,r.mdx)("p",null,(0,r.mdx)("inlineCode",{parentName:"p"},"*.main.runtime.ts")),(0,r.mdx)("p",null,"Node files that run in a node runtime environments and outputs to the terminal."),(0,r.mdx)("p",null,(0,r.mdx)("strong",{parentName:"p"},"Example:"),"\nThe React environment TypeScript compiler will be extended in the main runtime."),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-typescript"},"// react-extension.main.ts\n\nimport { MainRuntime } from '@teambit/cli';\nimport { EnvsAspect, EnvsMain } from '@teambit/envs';\nimport { ReactAspect, ReactMain } from '@teambit/react';\nimport { ReactExtensionAspect } from './react-extension.aspect';\n\nconst tsconfig = require('./typescript/tsconfig.json');\n\nexport class ReactExtensionMain {\n constructor(\n private react: ReactMain,\n private envs: EnvsMain\n ) {}\n\n icon() {\n return 'https://static.bit.dev/extensions-icons/react.svg';\n }\n\n static runtime = MainRuntime;\n\n static dependencies = [ReactAspect, EnvsAspect];\n\n static async provider([react, envs]: [ReactMain, EnvsMain]) {\n const reactExtension = envs.compose(react, [react.overrideTsConfig(tsconfig)]);\n envs.registerEnv(reactExtension);\n return new ReactWithProvidersMain(react, envs);\n }\n}\n\nReactExtensionAspect.addRuntime(ReactExtensionMain);\n")),(0,r.mdx)("h4",null,"UI"),(0,r.mdx)("p",null,(0,r.mdx)("inlineCode",{parentName:"p"},"*.ui.runtime.[ts,js,jsx,tsx]")),(0,r.mdx)("p",null,"JSX files that run in the browser, as part of the Workspace/Scope UI bundle that is being served by the development server."),(0,r.mdx)("h4",null,"Preview"),(0,r.mdx)("p",null,(0,r.mdx)("inlineCode",{parentName:"p"},"*.preview.runtime.*")),(0,r.mdx)("p",null,"These files are served by the environment's server, as part of the environment's preview bundle (i.e, the component compositions and documentation).\n(The 'preview' runtime is rendered in the Workspace/Scope UI using an iframe.)"),(0,r.mdx)("p",null,(0,r.mdx)("strong",{parentName:"p"},"Example:"),'\nA new composition provider that will "wrap" every composition using that environment will be added using the preview runtime since it is part of the component compositions (which are being served to the browser by the environment\'s server).'),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-typescript"},"// react-extension.preview.ts\n\nimport { PreviewRuntime } from '@teambit/preview';\nimport { ReactAspect, ReactPreview } from '@teambit/react';\nimport { ReactExtensionAspect } from './react-with-providers.aspect';\nimport { Center } from './my-providers/center';\n\nexport class ReactExtensionPreview {\n static runtime = PreviewRuntime;\n\n static dependencies = [ReactAspect];\n\n static async provider([react]: [ReactPreview]) {\n react.registerProvider(Center);\n\n return new ReactExtensionPreview();\n }\n}\n\nReactExtensionAspect.addRuntime(ReactExtensionPreview);\n")),(0,r.mdx)("h2",null,"Troubleshooting"),(0,r.mdx)("p",null,(0,r.mdx)("strong",{parentName:"p"},"Problem:")," Components that are configured to use a specific environment, use the workspace's default environment, instead."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json"},'{\n "teambit.workspace/variants": {\n "*": {\n "teambit.react/react": {}\n },\n "components/utils": {\n "teambit.harmony/node": {}\n }\n }\n}\n')),(0,r.mdx)("p",null,"In the above example, components in the ",(0,r.mdx)("inlineCode",{parentName:"p"},"components/utils")," directory are set to use the Node environment.\nSince that selection is more specific than the one done using the ",(0,r.mdx)("inlineCode",{parentName:"p"},"*")," wildcard selector, it is expected to override it."),(0,r.mdx)("p",null,(0,r.mdx)("strong",{parentName:"p"},"Understanding the problem:"),"\nTo select the right configurations for each component, the 'Variants' aspect sorts all workspace configurations, from the most specific to the most general.\nThe first configuration set on an aspect (the most specific one) will be the one that is selected for that aspect.\nThat means, once Variants encounters configurations for an aspect, it stops looking for additional configurations for that specific aspect."),(0,r.mdx)("p",null,"Each environment is considered as a different aspect, even though they are all under the \"environments\" category and can only be used once per component.\n'Variants' does not understand categories, only individual aspects and therefore, cannot override one environment with a different environment."),(0,r.mdx)("p",null,(0,r.mdx)("strong",{parentName:"p"},"Solution #1:")),(0,r.mdx)("p",null,"Remove the ",(0,r.mdx)("inlineCode",{parentName:"p"},"*")," general selection and use only specific and exclusive selectors to configure environments\n(that means your workspace directories/ namespaces need to be structured in a way that enables complete selection of all components using selectors that are exclusive)."),(0,r.mdx)("p",null,"For example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json"},'{\n "teambit.workspace/variants": {\n "components/react": {\n "teambit.react/react": {}\n },\n "components/utils": {\n "teambit.harmony/node": {}\n }\n }\n}\n')),(0,r.mdx)("p",null,(0,r.mdx)("strong",{parentName:"p"},"Solution #2:"),"\nConfigure the environment using the Envs config API."),(0,r.mdx)("p",null,"Example:"),(0,r.mdx)("pre",null,(0,r.mdx)("code",{parentName:"pre",className:"language-json"},'{\n "teambit.workspace/variants": {\n "*": {\n "teambit.react/react": {}\n },\n "components/utils": {\n "teambit.harmony/node": {},\n "teambit.envs/envs": {\n "env": "teambit.harmony/node"\n }\n }\n }\n}\n')),(0,r.mdx)("blockquote",null,(0,r.mdx)("p",{parentName:"blockquote"},"Notice how the Node environment was added also as a standalone aspect, to ensure that it is registered as a dependency of the selected components.")),(0,r.mdx)("hr",null))}d.__bit_component=o,d.isMDXComponent=!0},3761:function(e,n,t){var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0}),n.Envs=void 0;var r=t(1148);Object.defineProperty(n,"Envs",{enumerable:!0,get:function(){return o(r).default}})},1560:(e,n,t)=>{var o={id:"teambit.envs/envs@1.0.426",homepage:"https://bit.cloud/teambit/envs/envs",exported:!0};function r(){const e=a(t(1594));return r=function(){return e},e}function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0}),n.Logo=void 0,r.__bit_component=o,a.__bit_component=o;const i=()=>r().default.createElement("div",{style:{height:"100%",display:"flex",justifyContent:"center"}},r().default.createElement("img",{style:{width:70},src:"https://static.bit.dev/extensions-icons/env.svg"}));i.__bit_component=o,n.Logo=i},5016:e=>{e.exports=MdxJsReact},1594:e=>{e.exports=React}},n={};function t(o){var r=n[o];if(void 0!==r)return r.exports;var a=n[o]={exports:{}};return e[o].call(a.exports,a,a.exports,t),a.exports}t.d=(e,n)=>{for(var o in n)t.o(n,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:n[o]})},t.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};t.r(o),t.d(o,{compositions:()=>x,compositions_metadata:()=>v,overview:()=>h});var r={};t.r(r),t.d(r,{default:()=>u});var a=t(1560),i=(t(1594),t(5016));const s=TeambitMdxUiMdxScopeContext;var m=t(3761),l=["components"];function c(){return c=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var o in t)({}).hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},c.apply(null,arguments)}var p={},d="wrapper";function u(e){var n=e.components,t=function(e,n){if(null==e)return{};var t,o,r=function(e,n){if(null==e)return{};var t={};for(var o in e)if({}.hasOwnProperty.call(e,o)){if(n.includes(o))continue;t[o]=e[o]}return t}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)t=a[o],n.includes(t)||{}.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}(e,l);return(0,i.mdx)(d,c({},p,t,{components:n,mdxType:"MDXLayout"}),(0,i.mdx)(s.MDXScopeProvider,{components:{Envs:m.Envs},mdxType:"MDXScopeProvider"},(0,i.mdx)(m.Envs,{mdxType:"Envs"})))}u.isMDXComponent=!0;const x=[a],h=[r],v={compositions:[{displayName:"Logo",identifier:"Logo"}]};return o})()));
|
package/artifacts/schema.json
CHANGED
@@ -11693,7 +11693,7 @@
|
|
11693
11693
|
"componentId": {
|
11694
11694
|
"scope": "teambit.component",
|
11695
11695
|
"name": "sources",
|
11696
|
-
"version": "0.0.
|
11696
|
+
"version": "0.0.34"
|
11697
11697
|
}
|
11698
11698
|
}
|
11699
11699
|
}
|
@@ -11763,7 +11763,7 @@
|
|
11763
11763
|
"componentId": {
|
11764
11764
|
"scope": "teambit.component",
|
11765
11765
|
"name": "sources",
|
11766
|
-
"version": "0.0.
|
11766
|
+
"version": "0.0.34"
|
11767
11767
|
}
|
11768
11768
|
}
|
11769
11769
|
},
|
@@ -11861,7 +11861,7 @@
|
|
11861
11861
|
"componentId": {
|
11862
11862
|
"scope": "teambit.component",
|
11863
11863
|
"name": "sources",
|
11864
|
-
"version": "0.0.
|
11864
|
+
"version": "0.0.34"
|
11865
11865
|
}
|
11866
11866
|
}
|
11867
11867
|
},
|
@@ -28552,7 +28552,7 @@
|
|
28552
28552
|
"componentId": {
|
28553
28553
|
"scope": "teambit.component",
|
28554
28554
|
"name": "sources",
|
28555
|
-
"version": "0.0.
|
28555
|
+
"version": "0.0.34"
|
28556
28556
|
}
|
28557
28557
|
}
|
28558
28558
|
}
|
@@ -28622,7 +28622,7 @@
|
|
28622
28622
|
"componentId": {
|
28623
28623
|
"scope": "teambit.component",
|
28624
28624
|
"name": "sources",
|
28625
|
-
"version": "0.0.
|
28625
|
+
"version": "0.0.34"
|
28626
28626
|
}
|
28627
28627
|
}
|
28628
28628
|
},
|
@@ -28720,7 +28720,7 @@
|
|
28720
28720
|
"componentId": {
|
28721
28721
|
"scope": "teambit.component",
|
28722
28722
|
"name": "sources",
|
28723
|
-
"version": "0.0.
|
28723
|
+
"version": "0.0.34"
|
28724
28724
|
}
|
28725
28725
|
}
|
28726
28726
|
},
|
@@ -32182,7 +32182,7 @@
|
|
32182
32182
|
"componentId": {
|
32183
32183
|
"scope": "teambit.envs",
|
32184
32184
|
"name": "envs",
|
32185
|
-
"version": "1.0.
|
32185
|
+
"version": "1.0.426"
|
32186
32186
|
},
|
32187
32187
|
"taggedModuleExports": []
|
32188
32188
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_path","data","require","_findRoot","_interopRequireDefault","_toolboxModules","_bit","_fsExtra","_pLocate","_commentJson","_cli","_component","_graphql","_issues","_pMapSeries","_componentIssues","_harmony","_logger","_bitError","_toolboxArray","_lodash","_worker","_componentId","_environments","_environments2","_runtime","_envDefinition","_envServiceList","_envs","_env","_exceptions","_env2","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","DEFAULT_ENV","exports","EnvsMain","icon","constructor","config","harmony","envSlot","logger","servicesRegistry","componentMain","loggerMain","workerMain","envJsoncMergeCustomizerSlot","Set","createEnvironment","components","createRuntime","addFailedToLoadEnvs","id","failedToLoadEnvs","add","envIds","addFailedToLoadExt","failedToLoadExt","has","resetFailedToLoadEnvs","clear","getFailedToLoadEnvs","Array","from","extId","uniq","getDefaultEnv","defaultEnv","get","Error","EnvDefinition","getCoreEnvsIds","compose","targetEnv","envTransformers","a","reduce","acc","transformer","override","propsToOverride","env","merge","sourceEnv","allNames","prototype","getPrototypeOf","name","getOwnPropertyNames","key","fn","includes","bind","hasEnvManifest","envComponent","legacyFiles","undefined","files","filesystem","envJson","find","file","relative","getEnvManifest","object","parse","contents","toString","resolvedObject","recursivelyMergeWithParentManifest","path","originPath","extends","parentPackageName","parentPath","resolveFrom","parentResolvedPath","findRoot","existsSync","info","parentEnvJsoncPath","map","fileName","join","filePath","consoleWarning","parentStr","readFileSync","parentObject","mergedObject","mergeEnvManifests","parent","child","merged","mergeCustomizer","getAllRegisteredEnvJsoncCustomizers","customizer","oneMerged","hasEnvManifestById","envId","requesting","component","getEnvComponentByEnvId","getEnvData","envsData","state","aspects","EnvsAspect","getEnvIdFromEnvsData","ignoreVersion","rawEnvId","envIdWithoutVersion","ComponentID","fromString","toStringWithoutVersion","getEnvId","envIdFromEnvData","withVersion","resolveEnv","withVersionMatch","toArray","withVersionMatchId","exactMatch","exactMatchId","EnvNotConfiguredForComponent","isUsingCoreEnv","isCoreEnv","getEnv","envDef","getEnvDefinitionByStringId","EnvNotFound","getEnvComponent","host","getHost","newId","resolveComponentId","BitError","getOrCalculateEnv","err","calculateEnv","getDescriptor","calcDescriptor","opts","componentDescriptor","getComponentEnvDescriptor","envComponentSelfDescriptor","getEnvSelfDescriptor","result","self","isEnvRegistered","getEnvFromComponent","rawServices","getServices","services","toObject","selfDescriptor","getEnvDescriptorFromEnvDef","__getDescriptor","systemDescriptor","type","split","description","matchedEntry","entries","aspectEntry","calculateEnvId","envIdFromEnvsConfig","getEnvIdFromEnvsConfig","envIdFromEnvsConfigWithoutVersion","ids","findFirstEnv","finalId","getEnvDefinitionById","skipWarnings","printWarningIfFirstTime","envDefFromList","getAllEnvsConfiguredOnComponent","getEnvFromEnvsConfig","getEnvsNotFromEnvsConfig","hasEnvConfigured","Boolean","getAllRegisteredEnvsIds","envData","getAllRegisteredEnvs","customizerEntry","getEnvPlugin","EnvPlugin","getEnvIdFromEnvsLegacyExtensions","extensions","envsAspect","findCoreExtension","calculateEnvIdFromExtensions","extension","extensionId","stringId","calculateEnvFromExtensions","getEnvDefinitionByLegacyExtension","isFoundWithoutVersion","pLocate","idWithoutVersion","isCoreAspect","envDefWithoutVersion","hasManifest","isUsingEnvEnv","finalEnvId","getEnvDefinition","allVersions","all","first","head","getEnvsEnvDefinition","message","alreadyShownWarning","isUsingAspectEnv","isEnv","registerService","envServices","register","allServices","currentServices","service","implements","warn","EnvServiceList","registerEnv","registerEnvJsoncMergeCustomizer","addNonLoadedEnvAsComponentIssues","pMapSeries","envIdStr","foundComp","c","issues","getOrCreate","IssuesClasses","ExternalEnvWithoutVersion","componentId","NonLoadedEnv","Runtime","aggregateByDefs","throwForDuplicateComponents","envsMap","Promise","envAspectDef","getEnvAspectDef","EnvRuntime","resolvedAspects","resolveAspects","MainRuntime","requestedOnly","filterByRuntime","useScopeAspectsCapsule","def","idsStr","duplications","findDuplications","provider","graphql","loggerAspect","cli","worker","context","createLogger","envs","registerShowFragments","EnvFragment","registerAddComponentsIssues","envsCmd","EnvsCmd","commands","ListEnvsCmd","GetEnvCmd","environmentsSchema","Slot","withType","GraphqlAspect","LoggerAspect","ComponentAspect","CLIAspect","WorkerAspect","IssuesAspect","addRuntime"],"sources":["environments.main.runtime.ts"],"sourcesContent":["import { join } from 'path';\nimport findRoot from 'find-root';\nimport { resolveFrom } from '@teambit/toolbox.modules.module-resolver';\nimport { isCoreAspect } from '@teambit/bit';\nimport { existsSync, readFileSync } from 'fs-extra';\nimport pLocate from 'p-locate';\nimport { parse } from 'comment-json';\nimport { SourceFile } from '@teambit/component.sources';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { Component, ComponentAspect, ComponentMain } from '@teambit/component';\nimport type { EnvPolicyConfigObject } from '@teambit/dependency-resolver';\nimport { GraphqlAspect, GraphqlMain } from '@teambit/graphql';\nimport { IssuesAspect, IssuesMain } from '@teambit/issues';\nimport type { EnvJsoncPatterns } from '@teambit/dev-files';\nimport pMapSeries from 'p-map-series';\nimport { IssuesClasses } from '@teambit/component-issues';\nimport { Harmony, Slot, SlotRegistry } from '@teambit/harmony';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport type { AspectDefinition } from '@teambit/aspect-loader';\nimport { ExtensionDataList, ExtensionDataEntry } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { BitError } from '@teambit/bit-error';\nimport { findDuplications } from '@teambit/toolbox.array.duplications-finder';\nimport { head, uniq } from 'lodash';\nimport { WorkerAspect, WorkerMain } from '@teambit/worker';\nimport { ComponentID } from '@teambit/component-id';\nimport { EnvService } from './services';\nimport { Environment } from './environment';\nimport { EnvsAspect } from './environments.aspect';\nimport { environmentsSchema } from './environments.graphql';\nimport { EnvRuntime, Runtime } from './runtime';\nimport { EnvDefinition } from './env-definition';\nimport { EnvServiceList } from './env-service-list';\nimport { EnvsCmd, GetEnvCmd, ListEnvsCmd } from './envs.cmd';\nimport { EnvFragment } from './env.fragment';\nimport { EnvNotFound, EnvNotConfiguredForComponent } from './exceptions';\nimport { EnvPlugin } from './env.plugin';\n\nexport type EnvJsonc = {\n extends?: string;\n policy?: EnvPolicyConfigObject;\n patterns?: EnvJsoncPatterns;\n};\n\nexport type EnvJsoncMergeCustomizer = (parentObj: EnvJsonc, childObj: EnvJsonc) => Partial<EnvJsonc>;\n\nexport type EnvsRegistry = SlotRegistry<Environment>;\nexport type EnvJsoncMergeCustomizerRegistry = SlotRegistry<EnvJsoncMergeCustomizer>;\n\nexport type EnvsConfig = {\n env: string;\n options: EnvOptions;\n};\n\ntype GetCalcEnvOptions = {\n skipWarnings?: boolean;\n};\n\nexport type EnvOptions = {};\n\nexport type EnvTransformer = (env: Environment) => Environment;\n\nexport type ServicesRegistry = SlotRegistry<Array<EnvService<any>>>;\n\nexport type RegularCompDescriptor = {\n id: string;\n icon?: string;\n type?: string;\n name?: string;\n description?: string;\n};\nexport type EnvCompDescriptorProps = RegularCompDescriptor & {\n services?: {\n env: {\n id: string;\n icon: string;\n name?: string;\n description?: string;\n };\n services: Array<{\n id: string;\n name?: string;\n description?: string;\n data: any;\n }>;\n };\n};\n\nexport type EnvCompDescriptor = EnvCompDescriptorProps & {\n self?: EnvCompDescriptorProps;\n};\n\nexport type Descriptor = RegularCompDescriptor | EnvCompDescriptor;\n\nexport const DEFAULT_ENV = 'teambit.harmony/node';\n\nexport class EnvsMain {\n /**\n * Envs that are failed to load\n */\n private failedToLoadEnvs = new Set<string>();\n /**\n * Extensions that are failed to load\n * We use this as sometime when we couldn't load an extension we don't know if it's an env or not\n * We should ideally take it from the aspect loader aspect, but right now the aspect loader is using envs\n */\n private failedToLoadExt = new Set<string>();\n /**\n * Ids of envs (not neccesrraly loaded successfully)\n */\n public envIds = new Set<string>();\n\n static runtime = MainRuntime;\n\n private alreadyShownWarning = {};\n\n /**\n * icon of the extension.\n */\n icon() {\n return `<svg width=\"50\" height=\"50\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"25\" cy=\"25\" r=\"20\"/>\n </svg>`;\n }\n\n constructor(\n /**\n * environments extension configuration.\n */\n readonly config: EnvsConfig,\n\n /**\n * harmony context.\n */\n private harmony: Harmony,\n\n /**\n * slot for allowing extensions to register new environment.\n */\n private envSlot: EnvsRegistry,\n\n private logger: Logger,\n\n private servicesRegistry: ServicesRegistry,\n\n private componentMain: ComponentMain,\n\n private loggerMain: LoggerMain,\n\n private workerMain: WorkerMain,\n\n private envJsoncMergeCustomizerSlot: EnvJsoncMergeCustomizerRegistry\n ) {}\n\n /**\n * creates a new runtime environments for a set of components.\n */\n async createEnvironment(components: Component[]): Promise<Runtime> {\n return this.createRuntime(components);\n }\n\n /**\n *\n * @param id\n */\n /**\n * This function adds an extension ID to a set of failed to load extensions.\n * This mostly used by the aspect loader to add such issues\n * Then it is used to hide different errors that are caused by the same issue.\n * @param {string} id - string - represents the unique identifier of an extension that failed to load.\n */\n addFailedToLoadEnvs(id: string) {\n this.failedToLoadEnvs.add(id);\n this.envIds.add(id);\n }\n\n addFailedToLoadExt(id: string) {\n this.failedToLoadExt.add(id);\n if (this.envIds.has(id)) {\n this.addFailedToLoadEnvs(id);\n }\n }\n\n resetFailedToLoadEnvs() {\n this.failedToLoadEnvs.clear();\n this.failedToLoadExt.clear();\n }\n\n getFailedToLoadEnvs() {\n const failedToLoadEnvs = Array.from(this.failedToLoadEnvs);\n // Add all extensions which are also envs\n for (const extId of this.failedToLoadExt) {\n if (this.envIds.has(extId)) {\n failedToLoadEnvs.push(extId);\n }\n }\n return uniq(failedToLoadEnvs);\n }\n\n /**\n * get the configured default env.\n */\n getDefaultEnv(): EnvDefinition {\n const defaultEnv = this.envSlot.get(DEFAULT_ENV);\n if (!defaultEnv) throw new Error('default env must be set.');\n\n return new EnvDefinition(DEFAULT_ENV, defaultEnv);\n }\n\n getCoreEnvsIds(): string[] {\n return [\n 'teambit.harmony/aspect',\n 'teambit.react/react',\n 'teambit.harmony/node',\n 'teambit.react/react-native',\n 'teambit.html/html',\n 'teambit.mdx/mdx',\n 'teambit.envs/env',\n 'teambit.mdx/readme',\n 'teambit.harmony/bit-custom-aspect',\n ];\n }\n\n /**\n * compose a new environment from a list of environment transformers.\n */\n compose(targetEnv: Environment, envTransformers: EnvTransformer[]) {\n const a = envTransformers.reduce((acc, transformer) => {\n acc = transformer(acc);\n return acc;\n }, targetEnv);\n\n return a;\n }\n\n /**\n * create an env transformer which overrides specific env properties.\n */\n override(propsToOverride: Environment): EnvTransformer {\n return (env: Environment) => {\n return this.merge(propsToOverride, env);\n };\n }\n\n /**\n * compose two environments into one.\n */\n merge<T extends Environment, S extends Environment>(targetEnv: Environment, sourceEnv: Environment): T & S {\n const allNames = new Set<string>();\n const keys = ['icon', 'name', 'description'];\n for (let o = sourceEnv; o !== Object.prototype; o = Object.getPrototypeOf(o)) {\n for (const name of Object.getOwnPropertyNames(o)) {\n allNames.add(name);\n }\n }\n\n allNames.forEach((key: string) => {\n const fn = sourceEnv[key];\n if (targetEnv[key]) return;\n if (keys.includes(key)) targetEnv[key] = fn;\n if (!fn || !fn.bind) {\n return;\n }\n targetEnv[key] = fn.bind(sourceEnv);\n });\n\n return targetEnv as T & S;\n }\n\n /**\n * This function checks if an environment manifest file exists in a given component or set of legacy files.\n * @param {Component} [envComponent] - A component object that represents an environment. It contains information about\n * the files and directories that make up the environment.\n * @param {SourceFile[]} [legacyFiles] - An optional array of SourceFile objects representing the files in the legacy\n * file system. If this parameter is not provided, the function will attempt to retrieve the files from the envComponent\n * parameter.\n * @returns a boolean value indicating whether an `env.jsonc` or `env.json` file exists in the `files` array of either\n * the `envComponent` object or the `legacyFiles` array. If neither `envComponent` nor `legacyFiles` are provided, the\n * function returns `undefined`.\n */\n hasEnvManifest(envComponent?: Component, legacyFiles?: SourceFile[]): boolean | undefined {\n if (!envComponent && !legacyFiles) return undefined;\n // @ts-ignore\n const files = legacyFiles || envComponent.filesystem.files;\n const envJson = files.find((file) => {\n return file.relative === 'env.jsonc' || file.relative === 'env.json';\n });\n\n if (!envJson) return false;\n return true;\n }\n\n getEnvManifest(envComponent?: Component, legacyFiles?: SourceFile[]): EnvJsonc | undefined {\n // TODO: maybe throw an error here?\n if (!envComponent && !legacyFiles) return undefined;\n // @ts-ignore\n const files = legacyFiles || envComponent.filesystem.files;\n const envJson = files.find((file) => {\n return file.relative === 'env.jsonc' || file.relative === 'env.json';\n });\n\n if (!envJson) return undefined;\n\n const object: EnvJsonc = parse(envJson.contents.toString('utf8'), undefined, true);\n const resolvedObject = this.recursivelyMergeWithParentManifest(object, envJson.path);\n return resolvedObject;\n }\n\n recursivelyMergeWithParentManifest(object: EnvJsonc, originPath: string): EnvJsonc {\n if (!object.extends) return object;\n const parentPackageName = object.extends;\n const parentPath = resolveFrom(originPath, [parentPackageName]);\n const parentResolvedPath = findRoot(parentPath);\n if (!parentResolvedPath || !existsSync(parentResolvedPath)) {\n this.logger.info(`failed finding parent manifest for ${parentPackageName} at ${parentResolvedPath}`);\n }\n const parentEnvJsoncPath = ['env.jsonc', 'env.json']\n .map((fileName) => join(parentResolvedPath, fileName))\n .find((filePath) => {\n return existsSync(filePath);\n });\n if (!parentEnvJsoncPath) {\n this.logger.consoleWarning(\n `failed finding parent manifest for ${parentPackageName} at ${parentResolvedPath} referred from ${originPath}`\n );\n return object;\n }\n const parentStr = readFileSync(parentEnvJsoncPath).toString('utf8');\n const parentObject: EnvJsonc = parse(parentStr, undefined, true);\n const mergedObject = this.mergeEnvManifests(parentObject, object);\n if (mergedObject.extends) {\n return this.recursivelyMergeWithParentManifest(mergedObject, parentEnvJsoncPath);\n }\n return mergedObject;\n }\n\n mergeEnvManifests(parent: EnvJsonc, child: EnvJsonc): EnvJsonc {\n let merged: EnvJsonc = {};\n const mergeCustomizer = this.getAllRegisteredEnvJsoncCustomizers();\n for (const customizer of mergeCustomizer) {\n const oneMerged = customizer(parent, child);\n merged = { ...merged, ...oneMerged };\n }\n // Take extends specifically from the parent so we can propagate it to the next parent\n if (parent.extends) {\n merged.extends = parent.extends;\n }\n return merged;\n }\n\n async hasEnvManifestById(envId: string, requesting: string): Promise<boolean | undefined> {\n const component = await this.getEnvComponentByEnvId(envId, requesting);\n return this.hasEnvManifest(component);\n }\n\n getEnvData(component: Component): Descriptor {\n let envsData = component.state.aspects.get(EnvsAspect.id);\n if (!envsData) {\n // TODO: remove this once we re-export old components used to store the data here\n envsData = component.state.aspects.get('teambit.workspace/workspace');\n }\n if (!envsData) throw new Error(`env was not configured on component ${component.id.toString()}`);\n return envsData.data as Descriptor;\n }\n\n /**\n * Return the id of the env as configured in the envs data (without version by default)\n * The reason it's not contain version by default is that we want to take the version from the aspect defined on the component itself\n * As this version is stay up to date during tagging the env along with the component\n * @param component\n * @param ignoreVersion\n */\n private getEnvIdFromEnvsData(component: Component, ignoreVersion = true): string | undefined {\n const envsData = this.getEnvData(component);\n if (!envsData) return undefined;\n const rawEnvId = envsData.id;\n if (!rawEnvId) return undefined;\n if (!ignoreVersion) return rawEnvId;\n const envIdWithoutVersion = ComponentID.fromString(rawEnvId).toStringWithoutVersion();\n return envIdWithoutVersion;\n }\n\n /**\n * get the env id of the given component.\n */\n getEnvId(component: Component): string {\n const envIdFromEnvData = this.getEnvIdFromEnvsData(component);\n if (!envIdFromEnvData) {\n // This should never happen\n throw new Error(`no env found for ${component.id.toString()}`);\n }\n const withVersion = this.resolveEnv(component, envIdFromEnvData);\n const withVersionMatch = this.envSlot.toArray().find(([envId]) => {\n return withVersion?.toString() === envId;\n });\n const withVersionMatchId = withVersionMatch?.[0];\n if (withVersionMatchId) return withVersionMatchId;\n\n // Handle core envs\n const exactMatch = this.envSlot.toArray().find(([envId]) => {\n return envIdFromEnvData === envId;\n });\n\n const exactMatchId = exactMatch?.[0];\n if (exactMatchId) return exactMatchId;\n\n if (!withVersion) throw new EnvNotConfiguredForComponent(envIdFromEnvData, component.id.toString());\n return withVersion.toString();\n }\n\n isUsingCoreEnv(component: Component): boolean {\n const envId = this.getEnvId(component);\n return this.isCoreEnv(envId);\n }\n\n isCoreEnv(envId: string): boolean {\n return this.getCoreEnvsIds().includes(envId);\n }\n\n /**\n * get the env of the given component.\n * In case you are asking for the env during on load you should use calculateEnv instead\n */\n getEnv(component: Component): EnvDefinition {\n const id = this.getEnvId(component);\n const envDef = this.getEnvDefinitionByStringId(id);\n if (envDef) {\n return envDef;\n }\n // Do not allow a non existing env\n throw new EnvNotFound(id, component.id.toString());\n }\n\n /**\n * get the env component of the given component.\n */\n async getEnvComponent(component: Component): Promise<Component> {\n const envId = this.getEnvId(component);\n return this.getEnvComponentByEnvId(envId, component.id.toString());\n }\n\n /**\n * get the env component by the env id.\n */\n async getEnvComponentByEnvId(envId: string, requesting?: string): Promise<Component> {\n const host = this.componentMain.getHost();\n const newId = await host.resolveComponentId(envId);\n const envComponent = await host.get(newId);\n if (!envComponent) {\n throw new BitError(`can't load env. env id is ${envId} used by component ${requesting || 'unknown'}`);\n }\n return envComponent;\n }\n\n /**\n * get the env of the given component.\n * This will try to use the regular getEnv but fallback to the calculate env (in case you are using it during on load)\n * This is safe to be used on onLoad as well\n */\n getOrCalculateEnv(component: Component): EnvDefinition {\n try {\n return this.getEnv(component);\n } catch (err) {\n return this.calculateEnv(component);\n }\n }\n\n /**\n * get an environment Descriptor.\n */\n getDescriptor(component: Component): Descriptor | undefined {\n const envsData = this.getEnvData(component);\n envsData.id = this.resolveEnv(component, envsData.id)?.toString() || envsData.id;\n return envsData;\n }\n\n async calcDescriptor(component: Component, opts: GetCalcEnvOptions = {}): Promise<Descriptor | undefined> {\n const componentDescriptor = await this.getComponentEnvDescriptor(component, opts);\n if (!componentDescriptor) return undefined;\n const envComponentSelfDescriptor = await this.getEnvSelfDescriptor(component);\n const result = envComponentSelfDescriptor\n ? { ...componentDescriptor, self: envComponentSelfDescriptor }\n : componentDescriptor;\n return result;\n }\n\n /**\n * Get env descriptor from the env itself if the component is an env\n * This will be empty for regular component, and will only contain data for env themself\n */\n private async getEnvSelfDescriptor(envComponent: Component): Promise<EnvCompDescriptorProps | undefined> {\n // !important calculate only on the env itself.\n if (!this.isEnvRegistered(envComponent.id.toString())) {\n return undefined;\n }\n\n const envDef = this.getEnvFromComponent(envComponent);\n if (!envDef) return undefined;\n\n const rawServices = this.getServices(envDef);\n const services = rawServices.toObject();\n // const selfDescriptor = (await this.getEnvDescriptorFromEnvDef(envDef)) || {};\n const selfDescriptor = await this.getEnvDescriptorFromEnvDef(envDef);\n\n if (!selfDescriptor) return undefined;\n return {\n ...selfDescriptor,\n services,\n };\n }\n\n /**\n * Get env descriptor from the env that a given component is using\n */\n private async getComponentEnvDescriptor(\n component: Component,\n opts: GetCalcEnvOptions = {}\n ): Promise<RegularCompDescriptor | undefined> {\n const envDef = this.calculateEnv(component, opts);\n return this.getEnvDescriptorFromEnvDef(envDef);\n }\n\n private async getEnvDescriptorFromEnvDef(envDef: EnvDefinition): Promise<RegularCompDescriptor | undefined> {\n if (!envDef.env.__getDescriptor || typeof envDef.env.__getDescriptor !== 'function') {\n return undefined;\n }\n const systemDescriptor = await envDef.env.__getDescriptor();\n\n return {\n type: systemDescriptor.type,\n // Make sure to store the env id in the data without the version\n // The version should always come from the aspect id configured on the component\n id: envDef.id.split('@')[0],\n name: envDef.name,\n icon: envDef.env.icon,\n description: envDef.description,\n };\n }\n\n resolveEnv(component: Component, id: string) {\n const matchedEntry = component.state.aspects.entries.find((aspectEntry) => {\n return id === aspectEntry.id.toString() || id === aspectEntry.id.toString({ ignoreVersion: true });\n });\n\n return matchedEntry?.id;\n }\n\n /**\n * This used to calculate the actual env during the component load.\n * Do not use it to get the env (use getEnv instead)\n * This should be used only during on load\n */\n async calculateEnvId(component: Component): Promise<ComponentID> {\n // Search first for env configured via envs aspect itself\n const envIdFromEnvsConfig = this.getEnvIdFromEnvsConfig(component);\n // if (!envIdFromEnvsConfig) return this.getDefaultEnv();\n const envIdFromEnvsConfigWithoutVersion = envIdFromEnvsConfig\n ? ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion()\n : undefined;\n\n if (envIdFromEnvsConfig && this.isCoreEnv(envIdFromEnvsConfig)) {\n return ComponentID.fromString(envIdFromEnvsConfig);\n }\n\n // in some cases we have the id configured in the teambit.envs/envs but without the version\n // in such cases we won't find it in the slot\n // we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs\n if (envIdFromEnvsConfigWithoutVersion) {\n const matchedEntry = component.state.aspects.entries.find((aspectEntry) => {\n return (\n envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString() ||\n envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString({ ignoreVersion: true })\n );\n });\n\n if (matchedEntry?.id) return matchedEntry?.id;\n }\n\n // in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env\n let ids: string[] = [];\n component.state.aspects.entries.forEach((aspectEntry) => {\n ids.push(aspectEntry.id.toString());\n // ids.push(aspectEntry.id.toString({ ignoreVersion: true }));\n });\n ids = uniq(ids);\n const envId = await this.findFirstEnv(ids);\n const finalId = envId || this.getDefaultEnv().id;\n return ComponentID.fromString(finalId);\n }\n\n /**\n * This used to calculate the actual env during the component load.\n * Do not use it to get the env (use getEnv instead)\n * This should be used only during on load\n */\n calculateEnv(component: Component, opts: GetCalcEnvOptions = {}): EnvDefinition {\n // Search first for env configured via envs aspect itself\n const envIdFromEnvsConfig = this.getEnvIdFromEnvsConfig(component);\n let envIdFromEnvsConfigWithoutVersion;\n if (envIdFromEnvsConfig) {\n envIdFromEnvsConfigWithoutVersion = ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion();\n const envDef = this.getEnvDefinitionByStringId(envIdFromEnvsConfigWithoutVersion);\n if (envDef) {\n this.envIds.add(envDef.id);\n return envDef;\n }\n }\n\n // in some cases we have the id configured in the teambit.envs/envs but without the version\n // in such cases we won't find it in the slot\n // we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs\n if (envIdFromEnvsConfigWithoutVersion) {\n const matchedEntry = component.state.aspects.entries.find((aspectEntry) => {\n return (\n envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString() ||\n envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString({ ignoreVersion: true })\n );\n });\n if (matchedEntry) {\n // during the tag process, the version in the aspect-entry-id is changed and is not the\n // same as it was when it registered to the slot.\n const envDef = this.getEnvDefinitionById(matchedEntry.id);\n if (envDef) {\n this.envIds.add(envDef.id);\n return envDef;\n }\n if (!opts.skipWarnings) {\n // Do not allow a non existing env\n this.printWarningIfFirstTime(\n matchedEntry.id.toString(),\n `environment with ID: ${matchedEntry.id.toString()} configured on component ${component.id.toString()} was not loaded (run \"bit install\")`\n );\n }\n }\n // Do not allow configure teambit.envs/envs on the component without configure the env aspect itself\n // const errMsg = new EnvNotConfiguredForComponent(envIdFromEnvsConfig as string, component.id.toString()).message;\n // this.printWarningIfFirstTime(envIdFromEnvsConfig as string, errMsg);\n }\n\n // in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env\n let envDefFromList;\n component.state.aspects.entries.find((aspectEntry) => {\n const envDef = this.getEnvDefinitionById(aspectEntry.id);\n if (envDef) {\n envDefFromList = envDef;\n }\n return !!envDef;\n });\n\n if (envDefFromList) {\n this.envIds.add(envDefFromList.id);\n return envDefFromList;\n }\n return this.getDefaultEnv();\n }\n\n /**\n * an env can be configured on a component in two ways:\n * 1) explicitly inside \"teambit.envs/envs\". `{ \"teambit.envs/envs\": { \"env\": \"my-env\" } }`\n * 2) the env aspect is set on the variant as any other aspect, e.g. `{ \"my-env\": {} }`\n *\n * this method returns #1 if exists, otherwise, #2.\n */\n getAllEnvsConfiguredOnComponent(component: Component): EnvDefinition[] {\n // if a component has \"envs\" config, use it and ignore other components that are set up\n // in this components which happen to be envs.\n const envDef = this.getEnvFromEnvsConfig(component);\n if (envDef) {\n return [envDef];\n }\n\n return this.getEnvsNotFromEnvsConfig(component);\n }\n\n /**\n * whether a component has an env configured (either by variant or .bitmap).\n */\n hasEnvConfigured(component: Component): boolean {\n return Boolean(this.getAllEnvsConfiguredOnComponent(component).length);\n }\n\n getAllRegisteredEnvsIds(): string[] {\n return this.envSlot.toArray().map((envData) => envData[0]);\n }\n\n getAllRegisteredEnvs(): Environment[] {\n return this.envSlot.toArray().map((envData) => envData[1]);\n }\n\n getAllRegisteredEnvJsoncCustomizers(): EnvJsoncMergeCustomizer[] {\n return this.envJsoncMergeCustomizerSlot.toArray().map((customizerEntry) => customizerEntry[1]);\n }\n\n getEnvPlugin() {\n return new EnvPlugin(this.envSlot, this.servicesRegistry, this.loggerMain, this.workerMain, this.harmony);\n }\n\n /**\n * an env can be configured on a component in two ways:\n * 1) explicitly inside \"teambit.envs/envs\". `{ \"teambit.envs/envs\": { \"env\": \"my-env\" } }`\n * 2) the env aspect is set on the variant as any other aspect, e.g. `{ \"my-env\": {} }`\n *\n * this method returns only #1\n */\n getEnvFromEnvsConfig(component: Component): EnvDefinition | undefined {\n const envIdFromEnvsConfig = this.getEnvIdFromEnvsConfig(component);\n if (!envIdFromEnvsConfig) {\n return undefined;\n }\n const envIdFromEnvsConfigWithoutVersion = ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion();\n const envDef = this.getEnvDefinitionByStringId(envIdFromEnvsConfigWithoutVersion);\n return envDef;\n }\n\n /**\n * an env can be configured on a component in two ways:\n * 1) explicitly inside \"teambit.envs/envs\". `{ \"teambit.envs/envs\": { \"env\": \"my-env\" } }`\n * 2) the env aspect is set on the variant as any other aspect, e.g. `{ \"my-env\": {} }`\n *\n * this method returns only #2\n */\n getEnvsNotFromEnvsConfig(component: Component): EnvDefinition[] {\n return component.state.aspects.entries.reduce((acc: EnvDefinition[], aspectEntry) => {\n const envDef = this.getEnvDefinitionById(aspectEntry.id);\n if (envDef) acc.push(envDef);\n return acc;\n }, []);\n }\n\n getEnvIdFromEnvsLegacyExtensions(extensions: ExtensionDataList): string | undefined {\n const envsAspect = extensions.findCoreExtension(EnvsAspect.id);\n const envIdFromEnvsConfig = envsAspect?.data.id;\n return envIdFromEnvsConfig;\n }\n\n /**\n * @deprecated DO NOT USE THIS METHOD ANYMORE!!! (PLEASE USE .calculateEnvId() instead!)\n */\n async calculateEnvIdFromExtensions(extensions: ExtensionDataList): Promise<string> {\n // Search first for env configured via envs aspect itself\n const envsAspect = extensions.findCoreExtension(EnvsAspect.id);\n const envIdFromEnvsConfig = envsAspect?.config.env;\n\n const envIdFromEnvsConfigWithoutVersion = envIdFromEnvsConfig\n ? ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion()\n : undefined;\n\n if (envIdFromEnvsConfig && this.isCoreEnv(envIdFromEnvsConfig)) {\n return envIdFromEnvsConfig;\n }\n\n // in some cases we have the id configured in the teambit.envs/envs but without the version\n // in such cases we won't find it in the slot\n // we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs\n if (envIdFromEnvsConfigWithoutVersion) {\n const matchedEntry = extensions.find((extension) => {\n if (extension.extensionId) {\n return (\n envIdFromEnvsConfigWithoutVersion === extension.extensionId.toString() ||\n envIdFromEnvsConfigWithoutVersion === extension.extensionId.toString({ ignoreVersion: true })\n );\n }\n return envIdFromEnvsConfigWithoutVersion === extension.stringId;\n });\n if (matchedEntry?.id) return matchedEntry?.stringId;\n }\n\n // in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env\n const ids: string[] = [];\n extensions.forEach((extension) => {\n if (extension.extensionId) {\n ids.push(extension.extensionId.toString());\n } else {\n ids.push(extension.stringId);\n }\n });\n const envId = await this.findFirstEnv(ids);\n const finalId = envId || this.getDefaultEnv().id;\n return finalId;\n }\n\n /**\n * @deprecated DO NOT USE THIS METHOD ANYMORE!!! (PLEASE USE .calculateEnv() instead!)\n */\n async calculateEnvFromExtensions(extensions: ExtensionDataList): Promise<EnvDefinition> {\n // Search first for env configured via envs aspect itself\n const envsAspect = extensions.findCoreExtension(EnvsAspect.id);\n const envIdFromEnvsConfig = envsAspect?.config.env;\n let envIdFromEnvsConfigWithoutVersion;\n\n if (envIdFromEnvsConfig) {\n envIdFromEnvsConfigWithoutVersion = ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion();\n const envDef = this.getEnvDefinitionByStringId(envIdFromEnvsConfigWithoutVersion);\n if (envDef) {\n this.envIds.add(envDef.id);\n return envDef;\n }\n }\n\n // in some cases we have the id configured in the teambit.envs/envs but without the version\n // in such cases we won't find it in the slot\n // we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs\n if (envIdFromEnvsConfigWithoutVersion) {\n const matchedEntry = extensions.find((extension) => {\n if (extension.extensionId) {\n return (\n envIdFromEnvsConfigWithoutVersion === extension.extensionId.toString() ||\n envIdFromEnvsConfigWithoutVersion === extension.extensionId.toString({ ignoreVersion: true })\n );\n }\n return envIdFromEnvsConfigWithoutVersion === extension.stringId;\n });\n if (matchedEntry) {\n // during the tag process, the version in the aspect-entry-id is changed and is not the\n // same as it was when it registered to the slot.\n const envDef = this.getEnvDefinitionByLegacyExtension(matchedEntry);\n if (envDef) {\n this.envIds.add(envDef.id);\n return envDef;\n }\n // Do not allow a non existing env\n // this.printWarningIfFirstTime(\n // matchedEntry.id.toString(),\n // `environment with ID: ${matchedEntry.id.toString()} was not found`\n // );\n }\n // Do not allow configure teambit.envs/envs on the component without configure the env aspect itself\n // const errMsg = new EnvNotConfiguredForComponent(envIdFromEnvsConfig).message;\n // this.printWarningIfFirstTime(envIdFromEnvsConfig, errMsg);\n }\n\n // in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env\n const ids: string[] = [];\n extensions.forEach((extension) => {\n if (extension.extensionId) {\n ids.push(extension.extensionId.toString());\n } else {\n ids.push(extension.stringId);\n }\n });\n const envId = await this.findFirstEnv(ids);\n const envDef = envId ? this.getEnvDefinitionByStringId(envId) : undefined;\n\n return envDef || this.getDefaultEnv();\n }\n\n /**\n * This function finds the first environment ID from a list of IDs by checking if it is register as env (to the slot).\n * or contains env.jsonc file\n * @param {string[]} ids - `ids` is an array of string values representing environment IDs. The function `findFirstEnv`\n * takes this array as input and returns a Promise that resolves to a string value representing the first environment ID\n * that matches certain conditions.\n * @returns The `findFirstEnv` function returns a Promise that resolves to a string or undefined. The string represents\n * the ID of the first environment that matches the conditions specified in the function, or undefined if no environment\n * is found.\n */\n private async findFirstEnv(ids: string[]): Promise<string | undefined> {\n let isFoundWithoutVersion = false;\n const envId = await pLocate(ids, async (id) => {\n const idWithoutVersion = id.split('@')[0];\n if (this.isCoreEnv(idWithoutVersion)) return true;\n if (isCoreAspect(idWithoutVersion)) return false;\n const envDef = this.getEnvDefinitionByStringId(id);\n if (envDef) return true;\n const envDefWithoutVersion = this.getEnvDefinitionByStringId(idWithoutVersion);\n if (envDefWithoutVersion) {\n isFoundWithoutVersion = true;\n return true;\n }\n const envComponent = await this.getEnvComponentByEnvId(id);\n const hasManifest = this.hasEnvManifest(envComponent);\n if (hasManifest) return true;\n const isUsingEnvEnv = this.isUsingEnvEnv(envComponent);\n return !!isUsingEnvEnv;\n });\n let finalEnvId;\n if (envId) {\n finalEnvId = isFoundWithoutVersion ? envId?.split('@')[0] : envId;\n this.envIds.add(envId);\n }\n return finalEnvId;\n }\n\n private getEnvDefinitionByLegacyExtension(extension: ExtensionDataEntry): EnvDefinition | undefined {\n const envDef = extension.extensionId\n ? this.getEnvDefinitionById(extension.extensionId)\n : this.getEnvDefinitionByStringId(extension.stringId);\n return envDef;\n }\n\n getEnvIdFromEnvsConfig(component: Component): string | undefined {\n const envsAspect = component.state.aspects.get(EnvsAspect.id);\n return envsAspect?.config.env;\n }\n\n getEnvDefinition(id: ComponentID) {\n const allVersions = this.envSlot.toArray();\n const all = allVersions.filter(([envId]) => envId.includes(id.toStringWithoutVersion()));\n const first = head(all);\n if (!first) return undefined;\n const [envId, env] = first;\n return new EnvDefinition(envId, env);\n }\n\n getEnvDefinitionById(id: ComponentID): EnvDefinition | undefined {\n const envDef =\n this.getEnvDefinitionByStringId(id.toString()) ||\n this.getEnvDefinitionByStringId(id.toString({ ignoreVersion: true }));\n return envDef;\n }\n\n public getEnvDefinitionByStringId(envId: string): EnvDefinition | undefined {\n const env = this.envSlot.get(envId);\n if (env) {\n return new EnvDefinition(envId, env as Environment);\n }\n return undefined;\n }\n\n getEnvFromComponent(envComponent: Component): EnvDefinition | undefined {\n const env = this.getEnvDefinitionById(envComponent.id);\n return env;\n }\n\n /**\n * Return the env definition of teambit.envs/env\n */\n getEnvsEnvDefinition(): EnvDefinition {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.getEnvDefinitionByStringId('teambit.envs/env')!;\n }\n\n private printWarningIfFirstTime(envId: string, message: string) {\n if (!this.alreadyShownWarning[envId] && !this.failedToLoadEnvs.has(envId)) {\n this.alreadyShownWarning[envId] = true;\n this.logger.consoleWarning(message);\n this.addFailedToLoadEnvs(envId);\n }\n }\n\n /**\n * determines whether an env is registered.\n */\n public isEnvRegistered(id: string) {\n return Boolean(this.envSlot.get(id));\n }\n\n isUsingAspectEnv(component: Component): boolean {\n const data = this.getEnvData(component);\n if (!data) return false;\n return data.type === 'aspect';\n }\n\n isUsingEnvEnv(component: Component): boolean {\n const data = this.getEnvData(component);\n if (!data) return false;\n return data.type === 'env';\n }\n\n /**\n * Check if the given component is an env component.\n * @param component\n * @returns\n */\n isEnv(component: Component): boolean {\n return (\n this.isUsingEnvEnv(component) ||\n this.isEnvRegistered(component.id.toString()) ||\n this.isEnvRegistered(component.id.toStringWithoutVersion())\n );\n }\n\n /**\n * register a new environment service.\n */\n registerService(...envServices: EnvService<any>[]) {\n this.servicesRegistry.register(envServices);\n return this;\n }\n\n /**\n * get list of services enabled on an env.\n */\n getServices(env: EnvDefinition): EnvServiceList {\n const allServices = this.servicesRegistry.toArray();\n const services: [string, EnvService<any>][] = [];\n allServices.forEach(([id, currentServices]) => {\n currentServices.forEach((service) => {\n try {\n if (this.implements(env, service)) {\n services.push([id, service]);\n }\n } catch (err) {\n this.logger.warn(`failed loading service ${id} for env ${env.id}`);\n }\n });\n });\n return new EnvServiceList(env, services);\n }\n\n implements(env: EnvDefinition, service: EnvService<any>) {\n // TODO: remove this after refactoring everything and remove getDescriptor from being optional.\n if (!service.getDescriptor) return false;\n return !!service.getDescriptor(env);\n }\n\n /**\n * register an environment.\n */\n registerEnv(env: Environment) {\n return this.envSlot.register(env);\n }\n\n /**\n * register an env.jsonc merge customizer.\n */\n registerEnvJsoncMergeCustomizer(customizer: EnvJsoncMergeCustomizer) {\n return this.envJsoncMergeCustomizerSlot.register(customizer);\n }\n\n async addNonLoadedEnvAsComponentIssues(components: Component[]) {\n await pMapSeries(components, async (component) => {\n const envId = await this.calculateEnvId(component);\n const envIdStr = envId.toString();\n if (!this.isEnvRegistered(envIdStr)) {\n this.addFailedToLoadEnvs(envIdStr);\n // If there is no version and the env is not in the workspace this is not valid\n // you can't set external env without version\n if (!envIdStr.includes('@')) {\n const foundComp = components.find((c) => c.id.toStringWithoutVersion() === envIdStr);\n if (!foundComp) {\n component.state.issues.getOrCreate(IssuesClasses.ExternalEnvWithoutVersion).data = {\n envId: envIdStr,\n componentId: component.id.toString(),\n };\n } else {\n component.state.issues.getOrCreate(IssuesClasses.NonLoadedEnv).data = envIdStr;\n }\n } else {\n component.state.issues.getOrCreate(IssuesClasses.NonLoadedEnv).data = envIdStr;\n }\n }\n });\n }\n\n // refactor here\n private async createRuntime(components: Component[]): Promise<Runtime> {\n return new Runtime(await this.aggregateByDefs(components), this.logger);\n }\n\n // :TODO can be refactored to few utilities who will make repeating this very easy.\n private async aggregateByDefs(components: Component[]): Promise<EnvRuntime[]> {\n this.throwForDuplicateComponents(components);\n const envsMap = {};\n components.forEach((component: Component) => {\n const envDef = this.getEnv(component);\n const envId = envDef.id;\n const env = envDef.env;\n // handle config as well when aggregating envs.\n if (envsMap[envId]) envsMap[envId].components.push(component);\n else\n envsMap[envId] = {\n components: [component],\n env,\n };\n });\n\n return Promise.all(\n Object.keys(envsMap).map(async (key) => {\n const envAspectDef = await this.getEnvAspectDef(key);\n return new EnvRuntime(key, envsMap[key].env, envsMap[key].components, envAspectDef);\n })\n );\n }\n\n private async getEnvAspectDef(envId: string): Promise<AspectDefinition> {\n const host = this.componentMain.getHost();\n const id = await host.resolveComponentId(envId);\n // We don't want to filter by runtime here as we want to also get envs that configured as plugins. so they don't\n // contain the runtime path.\n const resolvedAspects = await host.resolveAspects(MainRuntime.name, [id], {\n requestedOnly: true,\n filterByRuntime: false,\n useScopeAspectsCapsule: true,\n });\n const def = resolvedAspects[0];\n\n return def;\n }\n\n private throwForDuplicateComponents(components: Component[]) {\n const idsStr = components.map((c) => c.id.toString());\n const duplications = findDuplications(idsStr);\n if (duplications.length) {\n throw new Error(`found duplicated components: ${duplications.join(', ')}`);\n }\n }\n\n static slots = [\n Slot.withType<Environment>(),\n Slot.withType<EnvService<any>>(),\n Slot.withType<EnvJsoncMergeCustomizerRegistry>(),\n ];\n\n static dependencies = [GraphqlAspect, LoggerAspect, ComponentAspect, CLIAspect, WorkerAspect, IssuesAspect];\n\n static async provider(\n [graphql, loggerAspect, component, cli, worker, issues]: [\n GraphqlMain,\n LoggerMain,\n ComponentMain,\n CLIMain,\n WorkerMain,\n IssuesMain\n ],\n config: EnvsConfig,\n [envSlot, servicesRegistry, envJsoncMergeCustomizerSlot]: [\n EnvsRegistry,\n ServicesRegistry,\n EnvJsoncMergeCustomizerRegistry\n ],\n context: Harmony\n ) {\n const logger = loggerAspect.createLogger(EnvsAspect.id);\n const envs = new EnvsMain(\n config,\n context,\n envSlot,\n logger,\n servicesRegistry,\n component,\n loggerAspect,\n worker,\n envJsoncMergeCustomizerSlot\n );\n component.registerShowFragments([new EnvFragment(envs)]);\n if (issues) issues.registerAddComponentsIssues(envs.addNonLoadedEnvAsComponentIssues.bind(envs));\n\n const envsCmd = new EnvsCmd(envs, component);\n envsCmd.commands = [new ListEnvsCmd(envs, component), new GetEnvCmd(envs, component)];\n cli.register(envsCmd);\n graphql.register(environmentsSchema(envs));\n return envs;\n }\n}\n\nEnvsAspect.addRuntime(EnvsMain);\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"names":["_path","data","require","_findRoot","_interopRequireDefault","_toolboxModules","_bit","_fsExtra","_pLocate","_commentJson","_cli","_component","_graphql","_issues","_pMapSeries","_componentIssues","_harmony","_logger","_bitError","_toolboxArray","_lodash","_worker","_componentId","_environments","_environments2","_runtime","_envDefinition","_envServiceList","_envs","_env","_exceptions","_env2","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","DEFAULT_ENV","exports","EnvsMain","icon","constructor","config","harmony","envSlot","logger","servicesRegistry","componentMain","loggerMain","workerMain","envJsoncMergeCustomizerSlot","Set","createEnvironment","components","createRuntime","addFailedToLoadEnvs","id","failedToLoadEnvs","add","envIds","addFailedToLoadExt","failedToLoadExt","has","resetFailedToLoadEnvs","clear","getFailedToLoadEnvs","Array","from","extId","uniq","getDefaultEnv","defaultEnv","get","Error","EnvDefinition","getCoreEnvsIds","compose","targetEnv","envTransformers","a","reduce","acc","transformer","override","propsToOverride","env","merge","sourceEnv","allNames","prototype","getPrototypeOf","name","getOwnPropertyNames","key","fn","includes","bind","hasEnvManifest","envComponent","legacyFiles","undefined","files","filesystem","envJson","find","file","relative","getEnvManifest","object","parse","contents","toString","resolvedObject","recursivelyMergeWithParentManifest","path","originPath","extends","parentPackageName","parentPath","resolveFrom","parentResolvedPath","findRoot","existsSync","info","parentEnvJsoncPath","map","fileName","join","filePath","consoleWarning","parentStr","readFileSync","parentObject","mergedObject","mergeEnvManifests","parent","child","merged","mergeCustomizer","getAllRegisteredEnvJsoncCustomizers","customizer","oneMerged","hasEnvManifestById","envId","requesting","component","getEnvComponentByEnvId","getEnvData","envsData","state","aspects","EnvsAspect","getEnvIdFromEnvsData","ignoreVersion","rawEnvId","envIdWithoutVersion","ComponentID","fromString","toStringWithoutVersion","getEnvId","envIdFromEnvData","withVersion","resolveEnv","withVersionMatch","toArray","withVersionMatchId","exactMatch","exactMatchId","EnvNotConfiguredForComponent","isUsingCoreEnv","isCoreEnv","getEnv","envDef","getEnvDefinitionByStringId","EnvNotFound","getEnvComponent","host","getHost","newId","resolveComponentId","BitError","getOrCalculateEnv","err","calculateEnv","getDescriptor","calcDescriptor","opts","componentDescriptor","getComponentEnvDescriptor","envComponentSelfDescriptor","getEnvSelfDescriptor","result","self","isEnvRegistered","getEnvFromComponent","rawServices","getServices","services","toObject","selfDescriptor","getEnvDescriptorFromEnvDef","__getDescriptor","systemDescriptor","type","split","description","matchedEntry","entries","aspectEntry","calculateEnvId","envIdFromEnvsConfig","getEnvIdFromEnvsConfig","envIdFromEnvsConfigWithoutVersion","ids","findFirstEnv","finalId","getEnvDefinitionById","skipWarnings","printWarningIfFirstTime","envDefFromList","getAllEnvsConfiguredOnComponent","getEnvFromEnvsConfig","getEnvsNotFromEnvsConfig","hasEnvConfigured","Boolean","getAllRegisteredEnvsIds","envData","getAllRegisteredEnvs","customizerEntry","getEnvPlugin","EnvPlugin","getEnvIdFromEnvsLegacyExtensions","extensions","envsAspect","findCoreExtension","calculateEnvIdFromExtensions","extension","extensionId","stringId","calculateEnvFromExtensions","getEnvDefinitionByLegacyExtension","isFoundWithoutVersion","pLocate","idWithoutVersion","isCoreAspect","envDefWithoutVersion","hasManifest","isUsingEnvEnv","finalEnvId","getEnvDefinition","allVersions","all","first","head","getEnvsEnvDefinition","message","alreadyShownWarning","isUsingAspectEnv","isEnv","registerService","envServices","register","allServices","currentServices","service","implements","warn","EnvServiceList","registerEnv","registerEnvJsoncMergeCustomizer","addNonLoadedEnvAsComponentIssues","pMapSeries","envIdStr","foundComp","c","issues","getOrCreate","IssuesClasses","ExternalEnvWithoutVersion","componentId","NonLoadedEnv","Runtime","aggregateByDefs","throwForDuplicateComponents","envsMap","Promise","envAspectDef","getEnvAspectDef","EnvRuntime","resolvedAspects","resolveAspects","MainRuntime","requestedOnly","filterByRuntime","useScopeAspectsCapsule","def","idsStr","duplications","findDuplications","provider","graphql","loggerAspect","cli","worker","context","createLogger","envs","registerShowFragments","EnvFragment","registerAddComponentsIssues","envsCmd","EnvsCmd","commands","ListEnvsCmd","GetEnvCmd","environmentsSchema","Slot","withType","GraphqlAspect","LoggerAspect","ComponentAspect","CLIAspect","WorkerAspect","IssuesAspect","addRuntime"],"sources":["environments.main.runtime.ts"],"sourcesContent":["import { join } from 'path';\nimport findRoot from 'find-root';\nimport { resolveFrom } from '@teambit/toolbox.modules.module-resolver';\nimport { isCoreAspect } from '@teambit/bit';\nimport { existsSync, readFileSync } from 'fs-extra';\nimport pLocate from 'p-locate';\nimport { parse } from 'comment-json';\nimport { SourceFile } from '@teambit/component.sources';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { Component, ComponentAspect, ComponentMain } from '@teambit/component';\nimport type { EnvPolicyConfigObject } from '@teambit/dependency-resolver';\nimport { GraphqlAspect, GraphqlMain } from '@teambit/graphql';\nimport { IssuesAspect, IssuesMain } from '@teambit/issues';\nimport type { EnvJsoncPatterns } from '@teambit/dev-files';\nimport pMapSeries from 'p-map-series';\nimport { IssuesClasses } from '@teambit/component-issues';\nimport { Harmony, Slot, SlotRegistry } from '@teambit/harmony';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport type { AspectDefinition } from '@teambit/aspect-loader';\nimport { ExtensionDataList, ExtensionDataEntry } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { BitError } from '@teambit/bit-error';\nimport { findDuplications } from '@teambit/toolbox.array.duplications-finder';\nimport { head, uniq } from 'lodash';\nimport { WorkerAspect, WorkerMain } from '@teambit/worker';\nimport { ComponentID } from '@teambit/component-id';\nimport { EnvService } from './services';\nimport { Environment } from './environment';\nimport { EnvsAspect } from './environments.aspect';\nimport { environmentsSchema } from './environments.graphql';\nimport { EnvRuntime, Runtime } from './runtime';\nimport { EnvDefinition } from './env-definition';\nimport { EnvServiceList } from './env-service-list';\nimport { EnvsCmd, GetEnvCmd, ListEnvsCmd } from './envs.cmd';\nimport { EnvFragment } from './env.fragment';\nimport { EnvNotFound, EnvNotConfiguredForComponent } from './exceptions';\nimport { EnvPlugin } from './env.plugin';\n\nexport type EnvJsonc = {\n extends?: string;\n policy?: EnvPolicyConfigObject;\n patterns?: EnvJsoncPatterns;\n};\n\nexport type EnvJsoncMergeCustomizer = (parentObj: EnvJsonc, childObj: EnvJsonc) => Partial<EnvJsonc>;\n\nexport type EnvsRegistry = SlotRegistry<Environment>;\nexport type EnvJsoncMergeCustomizerRegistry = SlotRegistry<EnvJsoncMergeCustomizer>;\n\nexport type EnvsConfig = {\n env: string;\n options: EnvOptions;\n};\n\ntype GetCalcEnvOptions = {\n skipWarnings?: boolean;\n};\n\nexport type EnvOptions = {};\n\nexport type EnvTransformer = (env: Environment) => Environment;\n\nexport type ServicesRegistry = SlotRegistry<Array<EnvService<any>>>;\n\nexport type RegularCompDescriptor = {\n id: string;\n icon?: string;\n type?: string;\n name?: string;\n description?: string;\n};\nexport type EnvCompDescriptorProps = RegularCompDescriptor & {\n services?: {\n env: {\n id: string;\n icon: string;\n name?: string;\n description?: string;\n };\n services: Array<{\n id: string;\n name?: string;\n description?: string;\n data: any;\n }>;\n };\n};\n\nexport type EnvCompDescriptor = EnvCompDescriptorProps & {\n self?: EnvCompDescriptorProps;\n};\n\nexport type Descriptor = RegularCompDescriptor | EnvCompDescriptor;\n\nexport const DEFAULT_ENV = 'teambit.harmony/node';\n\nexport class EnvsMain {\n /**\n * Envs that are failed to load\n */\n private failedToLoadEnvs = new Set<string>();\n /**\n * Extensions that are failed to load\n * We use this as sometime when we couldn't load an extension we don't know if it's an env or not\n * We should ideally take it from the aspect loader aspect, but right now the aspect loader is using envs\n */\n private failedToLoadExt = new Set<string>();\n /**\n * Ids of envs (not neccesrraly loaded successfully)\n */\n public envIds = new Set<string>();\n\n static runtime = MainRuntime;\n\n private alreadyShownWarning = {};\n\n /**\n * icon of the extension.\n */\n icon() {\n return `<svg width=\"50\" height=\"50\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"25\" cy=\"25\" r=\"20\"/>\n </svg>`;\n }\n\n constructor(\n /**\n * environments extension configuration.\n */\n readonly config: EnvsConfig,\n\n /**\n * harmony context.\n */\n private harmony: Harmony,\n\n /**\n * slot for allowing extensions to register new environment.\n */\n private envSlot: EnvsRegistry,\n\n private logger: Logger,\n\n private servicesRegistry: ServicesRegistry,\n\n private componentMain: ComponentMain,\n\n private loggerMain: LoggerMain,\n\n private workerMain: WorkerMain,\n\n private envJsoncMergeCustomizerSlot: EnvJsoncMergeCustomizerRegistry\n ) {}\n\n /**\n * creates a new runtime environments for a set of components.\n */\n async createEnvironment(components: Component[]): Promise<Runtime> {\n return this.createRuntime(components);\n }\n\n /**\n *\n * @param id\n */\n /**\n * This function adds an extension ID to a set of failed to load extensions.\n * This mostly used by the aspect loader to add such issues\n * Then it is used to hide different errors that are caused by the same issue.\n * @param {string} id - string - represents the unique identifier of an extension that failed to load.\n */\n addFailedToLoadEnvs(id: string) {\n this.failedToLoadEnvs.add(id);\n this.envIds.add(id);\n }\n\n addFailedToLoadExt(id: string) {\n this.failedToLoadExt.add(id);\n if (this.envIds.has(id)) {\n this.addFailedToLoadEnvs(id);\n }\n }\n\n resetFailedToLoadEnvs() {\n this.failedToLoadEnvs.clear();\n this.failedToLoadExt.clear();\n }\n\n getFailedToLoadEnvs() {\n const failedToLoadEnvs = Array.from(this.failedToLoadEnvs);\n // Add all extensions which are also envs\n for (const extId of this.failedToLoadExt) {\n if (this.envIds.has(extId)) {\n failedToLoadEnvs.push(extId);\n }\n }\n return uniq(failedToLoadEnvs);\n }\n\n /**\n * get the configured default env.\n */\n getDefaultEnv(): EnvDefinition {\n const defaultEnv = this.envSlot.get(DEFAULT_ENV);\n if (!defaultEnv) throw new Error('default env must be set.');\n\n return new EnvDefinition(DEFAULT_ENV, defaultEnv);\n }\n\n getCoreEnvsIds(): string[] {\n return [\n 'teambit.harmony/aspect',\n 'teambit.react/react',\n 'teambit.harmony/node',\n 'teambit.react/react-native',\n 'teambit.html/html',\n 'teambit.mdx/mdx',\n 'teambit.envs/env',\n 'teambit.mdx/readme',\n 'teambit.harmony/bit-custom-aspect',\n ];\n }\n\n /**\n * compose a new environment from a list of environment transformers.\n */\n compose(targetEnv: Environment, envTransformers: EnvTransformer[]) {\n const a = envTransformers.reduce((acc, transformer) => {\n acc = transformer(acc);\n return acc;\n }, targetEnv);\n\n return a;\n }\n\n /**\n * create an env transformer which overrides specific env properties.\n */\n override(propsToOverride: Environment): EnvTransformer {\n return (env: Environment) => {\n return this.merge(propsToOverride, env);\n };\n }\n\n /**\n * compose two environments into one.\n */\n merge<T extends Environment, S extends Environment>(targetEnv: Environment, sourceEnv: Environment): T & S {\n const allNames = new Set<string>();\n const keys = ['icon', 'name', 'description'];\n for (let o = sourceEnv; o !== Object.prototype; o = Object.getPrototypeOf(o)) {\n for (const name of Object.getOwnPropertyNames(o)) {\n allNames.add(name);\n }\n }\n\n allNames.forEach((key: string) => {\n const fn = sourceEnv[key];\n if (targetEnv[key]) return;\n if (keys.includes(key)) targetEnv[key] = fn;\n if (!fn || !fn.bind) {\n return;\n }\n targetEnv[key] = fn.bind(sourceEnv);\n });\n\n return targetEnv as T & S;\n }\n\n /**\n * This function checks if an environment manifest file exists in a given component or set of legacy files.\n * @param {Component} [envComponent] - A component object that represents an environment. It contains information about\n * the files and directories that make up the environment.\n * @param {SourceFile[]} [legacyFiles] - An optional array of SourceFile objects representing the files in the legacy\n * file system. If this parameter is not provided, the function will attempt to retrieve the files from the envComponent\n * parameter.\n * @returns a boolean value indicating whether an `env.jsonc` or `env.json` file exists in the `files` array of either\n * the `envComponent` object or the `legacyFiles` array. If neither `envComponent` nor `legacyFiles` are provided, the\n * function returns `undefined`.\n */\n hasEnvManifest(envComponent?: Component, legacyFiles?: SourceFile[]): boolean | undefined {\n if (!envComponent && !legacyFiles) return undefined;\n // @ts-ignore\n const files = legacyFiles || envComponent.filesystem.files;\n const envJson = files.find((file) => {\n return file.relative === 'env.jsonc' || file.relative === 'env.json';\n });\n\n if (!envJson) return false;\n return true;\n }\n\n getEnvManifest(envComponent?: Component, legacyFiles?: SourceFile[]): EnvJsonc | undefined {\n // TODO: maybe throw an error here?\n if (!envComponent && !legacyFiles) return undefined;\n // @ts-ignore\n const files = legacyFiles || envComponent.filesystem.files;\n const envJson = files.find((file) => {\n return file.relative === 'env.jsonc' || file.relative === 'env.json';\n });\n\n if (!envJson) return undefined;\n\n const object: EnvJsonc = parse(envJson.contents.toString('utf8'), undefined, true);\n const resolvedObject = this.recursivelyMergeWithParentManifest(object, envJson.path);\n return resolvedObject;\n }\n\n recursivelyMergeWithParentManifest(object: EnvJsonc, originPath: string): EnvJsonc {\n if (!object.extends) return object;\n const parentPackageName = object.extends;\n const parentPath = resolveFrom(originPath, [parentPackageName]);\n const parentResolvedPath = findRoot(parentPath);\n if (!parentResolvedPath || !existsSync(parentResolvedPath)) {\n this.logger.info(`failed finding parent manifest for ${parentPackageName} at ${parentResolvedPath}`);\n }\n const parentEnvJsoncPath = ['env.jsonc', 'env.json']\n .map((fileName) => join(parentResolvedPath, fileName))\n .find((filePath) => {\n return existsSync(filePath);\n });\n if (!parentEnvJsoncPath) {\n this.logger.consoleWarning(\n `failed finding parent manifest for ${parentPackageName} at ${parentResolvedPath} referred from ${originPath}`\n );\n return object;\n }\n const parentStr = readFileSync(parentEnvJsoncPath).toString('utf8');\n const parentObject: EnvJsonc = parse(parentStr, undefined, true);\n const mergedObject = this.mergeEnvManifests(parentObject, object);\n if (mergedObject.extends) {\n return this.recursivelyMergeWithParentManifest(mergedObject, parentEnvJsoncPath);\n }\n return mergedObject;\n }\n\n mergeEnvManifests(parent: EnvJsonc, child: EnvJsonc): EnvJsonc {\n let merged: EnvJsonc = {};\n const mergeCustomizer = this.getAllRegisteredEnvJsoncCustomizers();\n for (const customizer of mergeCustomizer) {\n const oneMerged = customizer(parent, child);\n merged = { ...merged, ...oneMerged };\n }\n // Take extends specifically from the parent so we can propagate it to the next parent\n if (parent.extends) {\n merged.extends = parent.extends;\n }\n return merged;\n }\n\n async hasEnvManifestById(envId: string, requesting: string): Promise<boolean | undefined> {\n const component = await this.getEnvComponentByEnvId(envId, requesting);\n return this.hasEnvManifest(component);\n }\n\n getEnvData(component: Component): Descriptor {\n let envsData = component.state.aspects.get(EnvsAspect.id);\n if (!envsData) {\n // TODO: remove this once we re-export old components used to store the data here\n envsData = component.state.aspects.get('teambit.workspace/workspace');\n }\n if (!envsData) throw new Error(`env was not configured on component ${component.id.toString()}`);\n return envsData.data as Descriptor;\n }\n\n /**\n * Return the id of the env as configured in the envs data (without version by default)\n * The reason it's not contain version by default is that we want to take the version from the aspect defined on the component itself\n * As this version is stay up to date during tagging the env along with the component\n * @param component\n * @param ignoreVersion\n */\n private getEnvIdFromEnvsData(component: Component, ignoreVersion = true): string | undefined {\n const envsData = this.getEnvData(component);\n if (!envsData) return undefined;\n const rawEnvId = envsData.id;\n if (!rawEnvId) return undefined;\n if (!ignoreVersion) return rawEnvId;\n const envIdWithoutVersion = ComponentID.fromString(rawEnvId).toStringWithoutVersion();\n return envIdWithoutVersion;\n }\n\n /**\n * get the env id of the given component.\n */\n getEnvId(component: Component): string {\n const envIdFromEnvData = this.getEnvIdFromEnvsData(component);\n if (!envIdFromEnvData) {\n // This should never happen\n throw new Error(`no env found for ${component.id.toString()}`);\n }\n const withVersion = this.resolveEnv(component, envIdFromEnvData);\n const withVersionMatch = this.envSlot.toArray().find(([envId]) => {\n return withVersion?.toString() === envId;\n });\n const withVersionMatchId = withVersionMatch?.[0];\n if (withVersionMatchId) return withVersionMatchId;\n\n // Handle core envs\n const exactMatch = this.envSlot.toArray().find(([envId]) => {\n return envIdFromEnvData === envId;\n });\n\n const exactMatchId = exactMatch?.[0];\n if (exactMatchId) return exactMatchId;\n\n if (!withVersion) throw new EnvNotConfiguredForComponent(envIdFromEnvData, component.id.toString());\n return withVersion.toString();\n }\n\n isUsingCoreEnv(component: Component): boolean {\n const envId = this.getEnvId(component);\n return this.isCoreEnv(envId);\n }\n\n isCoreEnv(envId: string): boolean {\n return this.getCoreEnvsIds().includes(envId);\n }\n\n /**\n * get the env of the given component.\n * In case you are asking for the env during on load you should use calculateEnv instead\n */\n getEnv(component: Component): EnvDefinition {\n const id = this.getEnvId(component);\n const envDef = this.getEnvDefinitionByStringId(id);\n if (envDef) {\n return envDef;\n }\n // Do not allow a non existing env\n throw new EnvNotFound(id, component.id.toString());\n }\n\n /**\n * get the env component of the given component.\n */\n async getEnvComponent(component: Component): Promise<Component> {\n const envId = this.getEnvId(component);\n return this.getEnvComponentByEnvId(envId, component.id.toString());\n }\n\n /**\n * get the env component by the env id.\n */\n async getEnvComponentByEnvId(envId: string, requesting?: string): Promise<Component> {\n const host = this.componentMain.getHost();\n const newId = await host.resolveComponentId(envId);\n const envComponent = await host.get(newId);\n if (!envComponent) {\n throw new BitError(`can't load env. env id is ${envId} used by component ${requesting || 'unknown'}`);\n }\n return envComponent;\n }\n\n /**\n * get the env of the given component.\n * This will try to use the regular getEnv but fallback to the calculate env (in case you are using it during on load)\n * This is safe to be used on onLoad as well\n */\n getOrCalculateEnv(component: Component): EnvDefinition {\n try {\n return this.getEnv(component);\n } catch (err) {\n return this.calculateEnv(component);\n }\n }\n\n /**\n * get an environment Descriptor.\n */\n getDescriptor(component: Component): Descriptor | undefined {\n const envsData = this.getEnvData(component);\n envsData.id = this.resolveEnv(component, envsData.id)?.toString() || envsData.id;\n return envsData;\n }\n\n async calcDescriptor(component: Component, opts: GetCalcEnvOptions = {}): Promise<Descriptor | undefined> {\n const componentDescriptor = await this.getComponentEnvDescriptor(component, opts);\n if (!componentDescriptor) return undefined;\n const envComponentSelfDescriptor = await this.getEnvSelfDescriptor(component);\n const result = envComponentSelfDescriptor\n ? { ...componentDescriptor, self: envComponentSelfDescriptor }\n : componentDescriptor;\n return result;\n }\n\n /**\n * Get env descriptor from the env itself if the component is an env\n * This will be empty for regular component, and will only contain data for env themself\n */\n private async getEnvSelfDescriptor(envComponent: Component): Promise<EnvCompDescriptorProps | undefined> {\n // !important calculate only on the env itself.\n if (!this.isEnvRegistered(envComponent.id.toString())) {\n return undefined;\n }\n\n const envDef = this.getEnvFromComponent(envComponent);\n if (!envDef) return undefined;\n\n const rawServices = this.getServices(envDef);\n const services = rawServices.toObject();\n // const selfDescriptor = (await this.getEnvDescriptorFromEnvDef(envDef)) || {};\n const selfDescriptor = await this.getEnvDescriptorFromEnvDef(envDef);\n\n if (!selfDescriptor) return undefined;\n return {\n ...selfDescriptor,\n services,\n };\n }\n\n /**\n * Get env descriptor from the env that a given component is using\n */\n private async getComponentEnvDescriptor(\n component: Component,\n opts: GetCalcEnvOptions = {}\n ): Promise<RegularCompDescriptor | undefined> {\n const envDef = this.calculateEnv(component, opts);\n return this.getEnvDescriptorFromEnvDef(envDef);\n }\n\n private async getEnvDescriptorFromEnvDef(envDef: EnvDefinition): Promise<RegularCompDescriptor | undefined> {\n if (!envDef.env.__getDescriptor || typeof envDef.env.__getDescriptor !== 'function') {\n return undefined;\n }\n const systemDescriptor = await envDef.env.__getDescriptor();\n\n return {\n type: systemDescriptor.type,\n // Make sure to store the env id in the data without the version\n // The version should always come from the aspect id configured on the component\n id: envDef.id.split('@')[0],\n name: envDef.name,\n icon: envDef.env.icon,\n description: envDef.description,\n };\n }\n\n resolveEnv(component: Component, id: string) {\n const matchedEntry = component.state.aspects.entries.find((aspectEntry) => {\n return id === aspectEntry.id.toString() || id === aspectEntry.id.toString({ ignoreVersion: true });\n });\n\n return matchedEntry?.id;\n }\n\n /**\n * This used to calculate the actual env during the component load.\n * Do not use it to get the env (use getEnv instead)\n * This should be used only during on load\n */\n async calculateEnvId(component: Component): Promise<ComponentID> {\n // Search first for env configured via envs aspect itself\n const envIdFromEnvsConfig = this.getEnvIdFromEnvsConfig(component);\n // if (!envIdFromEnvsConfig) return this.getDefaultEnv();\n const envIdFromEnvsConfigWithoutVersion = envIdFromEnvsConfig\n ? ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion()\n : undefined;\n\n if (envIdFromEnvsConfig && this.isCoreEnv(envIdFromEnvsConfig)) {\n return ComponentID.fromString(envIdFromEnvsConfig);\n }\n\n // in some cases we have the id configured in the teambit.envs/envs but without the version\n // in such cases we won't find it in the slot\n // we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs\n if (envIdFromEnvsConfigWithoutVersion) {\n const matchedEntry = component.state.aspects.entries.find((aspectEntry) => {\n return (\n envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString() ||\n envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString({ ignoreVersion: true })\n );\n });\n\n if (matchedEntry?.id) return matchedEntry?.id;\n }\n\n // in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env\n let ids: string[] = [];\n component.state.aspects.entries.forEach((aspectEntry) => {\n ids.push(aspectEntry.id.toString());\n // ids.push(aspectEntry.id.toString({ ignoreVersion: true }));\n });\n ids = uniq(ids);\n const envId = await this.findFirstEnv(ids);\n const finalId = envId || this.getDefaultEnv().id;\n return ComponentID.fromString(finalId);\n }\n\n /**\n * This used to calculate the actual env during the component load.\n * Do not use it to get the env (use getEnv instead)\n * This should be used only during on load\n */\n calculateEnv(component: Component, opts: GetCalcEnvOptions = {}): EnvDefinition {\n // Search first for env configured via envs aspect itself\n const envIdFromEnvsConfig = this.getEnvIdFromEnvsConfig(component);\n let envIdFromEnvsConfigWithoutVersion;\n if (envIdFromEnvsConfig) {\n envIdFromEnvsConfigWithoutVersion = ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion();\n const envDef = this.getEnvDefinitionByStringId(envIdFromEnvsConfigWithoutVersion);\n if (envDef) {\n this.envIds.add(envDef.id);\n return envDef;\n }\n }\n\n // in some cases we have the id configured in the teambit.envs/envs but without the version\n // in such cases we won't find it in the slot\n // we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs\n if (envIdFromEnvsConfigWithoutVersion) {\n const matchedEntry = component.state.aspects.entries.find((aspectEntry) => {\n return (\n envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString() ||\n envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString({ ignoreVersion: true })\n );\n });\n if (matchedEntry) {\n // during the tag process, the version in the aspect-entry-id is changed and is not the\n // same as it was when it registered to the slot.\n const envDef = this.getEnvDefinitionById(matchedEntry.id);\n if (envDef) {\n this.envIds.add(envDef.id);\n return envDef;\n }\n if (!opts.skipWarnings) {\n // Do not allow a non existing env\n this.printWarningIfFirstTime(\n matchedEntry.id.toString(),\n `environment with ID: ${matchedEntry.id.toString()} configured on component ${component.id.toString()} was not loaded (run \"bit install\")`\n );\n }\n }\n // Do not allow configure teambit.envs/envs on the component without configure the env aspect itself\n // const errMsg = new EnvNotConfiguredForComponent(envIdFromEnvsConfig as string, component.id.toString()).message;\n // this.printWarningIfFirstTime(envIdFromEnvsConfig as string, errMsg);\n }\n\n // in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env\n let envDefFromList;\n component.state.aspects.entries.find((aspectEntry) => {\n const envDef = this.getEnvDefinitionById(aspectEntry.id);\n if (envDef) {\n envDefFromList = envDef;\n }\n return !!envDef;\n });\n\n if (envDefFromList) {\n this.envIds.add(envDefFromList.id);\n return envDefFromList;\n }\n return this.getDefaultEnv();\n }\n\n /**\n * an env can be configured on a component in two ways:\n * 1) explicitly inside \"teambit.envs/envs\". `{ \"teambit.envs/envs\": { \"env\": \"my-env\" } }`\n * 2) the env aspect is set on the variant as any other aspect, e.g. `{ \"my-env\": {} }`\n *\n * this method returns #1 if exists, otherwise, #2.\n */\n getAllEnvsConfiguredOnComponent(component: Component): EnvDefinition[] {\n // if a component has \"envs\" config, use it and ignore other components that are set up\n // in this components which happen to be envs.\n const envDef = this.getEnvFromEnvsConfig(component);\n if (envDef) {\n return [envDef];\n }\n\n return this.getEnvsNotFromEnvsConfig(component);\n }\n\n /**\n * whether a component has an env configured (either by variant or .bitmap).\n */\n hasEnvConfigured(component: Component): boolean {\n return Boolean(this.getAllEnvsConfiguredOnComponent(component).length);\n }\n\n getAllRegisteredEnvsIds(): string[] {\n return this.envSlot.toArray().map((envData) => envData[0]);\n }\n\n getAllRegisteredEnvs(): Environment[] {\n return this.envSlot.toArray().map((envData) => envData[1]);\n }\n\n getAllRegisteredEnvJsoncCustomizers(): EnvJsoncMergeCustomizer[] {\n return this.envJsoncMergeCustomizerSlot.toArray().map((customizerEntry) => customizerEntry[1]);\n }\n\n getEnvPlugin() {\n return new EnvPlugin(this.envSlot, this.servicesRegistry, this.loggerMain, this.workerMain, this.harmony);\n }\n\n /**\n * an env can be configured on a component in two ways:\n * 1) explicitly inside \"teambit.envs/envs\". `{ \"teambit.envs/envs\": { \"env\": \"my-env\" } }`\n * 2) the env aspect is set on the variant as any other aspect, e.g. `{ \"my-env\": {} }`\n *\n * this method returns only #1\n */\n getEnvFromEnvsConfig(component: Component): EnvDefinition | undefined {\n const envIdFromEnvsConfig = this.getEnvIdFromEnvsConfig(component);\n if (!envIdFromEnvsConfig) {\n return undefined;\n }\n const envIdFromEnvsConfigWithoutVersion = ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion();\n const envDef = this.getEnvDefinitionByStringId(envIdFromEnvsConfigWithoutVersion);\n return envDef;\n }\n\n /**\n * an env can be configured on a component in two ways:\n * 1) explicitly inside \"teambit.envs/envs\". `{ \"teambit.envs/envs\": { \"env\": \"my-env\" } }`\n * 2) the env aspect is set on the variant as any other aspect, e.g. `{ \"my-env\": {} }`\n *\n * this method returns only #2\n */\n getEnvsNotFromEnvsConfig(component: Component): EnvDefinition[] {\n return component.state.aspects.entries.reduce((acc: EnvDefinition[], aspectEntry) => {\n const envDef = this.getEnvDefinitionById(aspectEntry.id);\n if (envDef) acc.push(envDef);\n return acc;\n }, []);\n }\n\n getEnvIdFromEnvsLegacyExtensions(extensions: ExtensionDataList): string | undefined {\n const envsAspect = extensions.findCoreExtension(EnvsAspect.id);\n const envIdFromEnvsConfig = envsAspect?.data.id;\n return envIdFromEnvsConfig;\n }\n\n /**\n * @deprecated DO NOT USE THIS METHOD ANYMORE!!! (PLEASE USE .calculateEnvId() instead!)\n */\n async calculateEnvIdFromExtensions(extensions: ExtensionDataList): Promise<string> {\n // Search first for env configured via envs aspect itself\n const envsAspect = extensions.findCoreExtension(EnvsAspect.id);\n const envIdFromEnvsConfig = envsAspect?.config.env;\n\n const envIdFromEnvsConfigWithoutVersion = envIdFromEnvsConfig\n ? ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion()\n : undefined;\n\n if (envIdFromEnvsConfig && this.isCoreEnv(envIdFromEnvsConfig)) {\n return envIdFromEnvsConfig;\n }\n\n // in some cases we have the id configured in the teambit.envs/envs but without the version\n // in such cases we won't find it in the slot\n // we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs\n if (envIdFromEnvsConfigWithoutVersion) {\n const matchedEntry = extensions.find((extension) => {\n if (extension.extensionId) {\n return (\n envIdFromEnvsConfigWithoutVersion === extension.extensionId.toString() ||\n envIdFromEnvsConfigWithoutVersion === extension.extensionId.toString({ ignoreVersion: true })\n );\n }\n return envIdFromEnvsConfigWithoutVersion === extension.stringId;\n });\n if (matchedEntry?.id) return matchedEntry?.stringId;\n }\n\n // in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env\n const ids: string[] = [];\n extensions.forEach((extension) => {\n if (extension.extensionId) {\n ids.push(extension.extensionId.toString());\n } else {\n ids.push(extension.stringId);\n }\n });\n const envId = await this.findFirstEnv(ids);\n const finalId = envId || this.getDefaultEnv().id;\n return finalId;\n }\n\n /**\n * @deprecated DO NOT USE THIS METHOD ANYMORE!!! (PLEASE USE .calculateEnv() instead!)\n */\n async calculateEnvFromExtensions(extensions: ExtensionDataList): Promise<EnvDefinition> {\n // Search first for env configured via envs aspect itself\n const envsAspect = extensions.findCoreExtension(EnvsAspect.id);\n const envIdFromEnvsConfig = envsAspect?.config.env;\n let envIdFromEnvsConfigWithoutVersion;\n\n if (envIdFromEnvsConfig) {\n envIdFromEnvsConfigWithoutVersion = ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion();\n const envDef = this.getEnvDefinitionByStringId(envIdFromEnvsConfigWithoutVersion);\n if (envDef) {\n this.envIds.add(envDef.id);\n return envDef;\n }\n }\n\n // in some cases we have the id configured in the teambit.envs/envs but without the version\n // in such cases we won't find it in the slot\n // we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs\n if (envIdFromEnvsConfigWithoutVersion) {\n const matchedEntry = extensions.find((extension) => {\n if (extension.extensionId) {\n return (\n envIdFromEnvsConfigWithoutVersion === extension.extensionId.toString() ||\n envIdFromEnvsConfigWithoutVersion === extension.extensionId.toString({ ignoreVersion: true })\n );\n }\n return envIdFromEnvsConfigWithoutVersion === extension.stringId;\n });\n if (matchedEntry) {\n // during the tag process, the version in the aspect-entry-id is changed and is not the\n // same as it was when it registered to the slot.\n const envDef = this.getEnvDefinitionByLegacyExtension(matchedEntry);\n if (envDef) {\n this.envIds.add(envDef.id);\n return envDef;\n }\n // Do not allow a non existing env\n // this.printWarningIfFirstTime(\n // matchedEntry.id.toString(),\n // `environment with ID: ${matchedEntry.id.toString()} was not found`\n // );\n }\n // Do not allow configure teambit.envs/envs on the component without configure the env aspect itself\n // const errMsg = new EnvNotConfiguredForComponent(envIdFromEnvsConfig).message;\n // this.printWarningIfFirstTime(envIdFromEnvsConfig, errMsg);\n }\n\n // in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env\n const ids: string[] = [];\n extensions.forEach((extension) => {\n if (extension.extensionId) {\n ids.push(extension.extensionId.toString());\n } else {\n ids.push(extension.stringId);\n }\n });\n const envId = await this.findFirstEnv(ids);\n const envDef = envId ? this.getEnvDefinitionByStringId(envId) : undefined;\n\n return envDef || this.getDefaultEnv();\n }\n\n /**\n * This function finds the first environment ID from a list of IDs by checking if it is register as env (to the slot).\n * or contains env.jsonc file\n * @param {string[]} ids - `ids` is an array of string values representing environment IDs. The function `findFirstEnv`\n * takes this array as input and returns a Promise that resolves to a string value representing the first environment ID\n * that matches certain conditions.\n * @returns The `findFirstEnv` function returns a Promise that resolves to a string or undefined. The string represents\n * the ID of the first environment that matches the conditions specified in the function, or undefined if no environment\n * is found.\n */\n private async findFirstEnv(ids: string[]): Promise<string | undefined> {\n let isFoundWithoutVersion = false;\n const envId = await pLocate(ids, async (id) => {\n const idWithoutVersion = id.split('@')[0];\n if (this.isCoreEnv(idWithoutVersion)) return true;\n if (isCoreAspect(idWithoutVersion)) return false;\n const envDef = this.getEnvDefinitionByStringId(id);\n if (envDef) return true;\n const envDefWithoutVersion = this.getEnvDefinitionByStringId(idWithoutVersion);\n if (envDefWithoutVersion) {\n isFoundWithoutVersion = true;\n return true;\n }\n const envComponent = await this.getEnvComponentByEnvId(id);\n const hasManifest = this.hasEnvManifest(envComponent);\n if (hasManifest) return true;\n const isUsingEnvEnv = this.isUsingEnvEnv(envComponent);\n return !!isUsingEnvEnv;\n });\n let finalEnvId;\n if (envId) {\n finalEnvId = isFoundWithoutVersion ? envId?.split('@')[0] : envId;\n this.envIds.add(envId);\n }\n return finalEnvId;\n }\n\n private getEnvDefinitionByLegacyExtension(extension: ExtensionDataEntry): EnvDefinition | undefined {\n const envDef = extension.extensionId\n ? this.getEnvDefinitionById(extension.extensionId)\n : this.getEnvDefinitionByStringId(extension.stringId);\n return envDef;\n }\n\n getEnvIdFromEnvsConfig(component: Component): string | undefined {\n const envsAspect = component.state.aspects.get(EnvsAspect.id);\n return envsAspect?.config.env;\n }\n\n getEnvDefinition(id: ComponentID) {\n const allVersions = this.envSlot.toArray();\n const all = allVersions.filter(([envId]) => envId.includes(id.toStringWithoutVersion()));\n const first = head(all);\n if (!first) return undefined;\n const [envId, env] = first;\n return new EnvDefinition(envId, env);\n }\n\n getEnvDefinitionById(id: ComponentID): EnvDefinition | undefined {\n const envDef =\n this.getEnvDefinitionByStringId(id.toString()) ||\n this.getEnvDefinitionByStringId(id.toString({ ignoreVersion: true }));\n return envDef;\n }\n\n public getEnvDefinitionByStringId(envId: string): EnvDefinition | undefined {\n const env = this.envSlot.get(envId);\n if (env) {\n return new EnvDefinition(envId, env as Environment);\n }\n return undefined;\n }\n\n getEnvFromComponent(envComponent: Component): EnvDefinition | undefined {\n const env = this.getEnvDefinitionById(envComponent.id);\n return env;\n }\n\n /**\n * Return the env definition of teambit.envs/env\n */\n getEnvsEnvDefinition(): EnvDefinition {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.getEnvDefinitionByStringId('teambit.envs/env')!;\n }\n\n private printWarningIfFirstTime(envId: string, message: string) {\n if (!this.alreadyShownWarning[envId] && !this.failedToLoadEnvs.has(envId)) {\n this.alreadyShownWarning[envId] = true;\n this.logger.consoleWarning(message);\n this.addFailedToLoadEnvs(envId);\n }\n }\n\n /**\n * determines whether an env is registered.\n */\n public isEnvRegistered(id: string) {\n return Boolean(this.envSlot.get(id));\n }\n\n isUsingAspectEnv(component: Component): boolean {\n const data = this.getEnvData(component);\n if (!data) return false;\n return data.type === 'aspect';\n }\n\n isUsingEnvEnv(component: Component): boolean {\n const data = this.getEnvData(component);\n if (!data) return false;\n return data.type === 'env';\n }\n\n /**\n * Check if the given component is an env component.\n * @param component\n * @returns\n */\n isEnv(component: Component): boolean {\n return (\n this.isUsingEnvEnv(component) ||\n this.isEnvRegistered(component.id.toString()) ||\n this.isEnvRegistered(component.id.toStringWithoutVersion())\n );\n }\n\n /**\n * register a new environment service.\n */\n registerService(...envServices: EnvService<any>[]) {\n this.servicesRegistry.register(envServices);\n return this;\n }\n\n /**\n * get list of services enabled on an env.\n */\n getServices(env: EnvDefinition): EnvServiceList {\n const allServices = this.servicesRegistry.toArray();\n const services: [string, EnvService<any>][] = [];\n allServices.forEach(([id, currentServices]) => {\n currentServices.forEach((service) => {\n try {\n if (this.implements(env, service)) {\n services.push([id, service]);\n }\n } catch (err) {\n this.logger.warn(`failed loading service ${id} for env ${env.id}`);\n }\n });\n });\n return new EnvServiceList(env, services);\n }\n\n implements(env: EnvDefinition, service: EnvService<any>) {\n // TODO: remove this after refactoring everything and remove getDescriptor from being optional.\n if (!service.getDescriptor) return false;\n return !!service.getDescriptor(env);\n }\n\n /**\n * register an environment.\n */\n registerEnv(env: Environment) {\n return this.envSlot.register(env);\n }\n\n /**\n * register an env.jsonc merge customizer.\n */\n registerEnvJsoncMergeCustomizer(customizer: EnvJsoncMergeCustomizer) {\n return this.envJsoncMergeCustomizerSlot.register(customizer);\n }\n\n async addNonLoadedEnvAsComponentIssues(components: Component[]) {\n await pMapSeries(components, async (component) => {\n const envId = await this.calculateEnvId(component);\n const envIdStr = envId.toString();\n if (!this.isEnvRegistered(envIdStr)) {\n this.addFailedToLoadEnvs(envIdStr);\n // If there is no version and the env is not in the workspace this is not valid\n // you can't set external env without version\n if (!envIdStr.includes('@')) {\n const foundComp = components.find((c) => c.id.toStringWithoutVersion() === envIdStr);\n if (!foundComp) {\n component.state.issues.getOrCreate(IssuesClasses.ExternalEnvWithoutVersion).data = {\n envId: envIdStr,\n componentId: component.id.toString(),\n };\n } else {\n component.state.issues.getOrCreate(IssuesClasses.NonLoadedEnv).data = envIdStr;\n }\n } else {\n component.state.issues.getOrCreate(IssuesClasses.NonLoadedEnv).data = envIdStr;\n }\n }\n });\n }\n\n // refactor here\n private async createRuntime(components: Component[]): Promise<Runtime> {\n return new Runtime(await this.aggregateByDefs(components), this.logger);\n }\n\n // :TODO can be refactored to few utilities who will make repeating this very easy.\n private async aggregateByDefs(components: Component[]): Promise<EnvRuntime[]> {\n this.throwForDuplicateComponents(components);\n const envsMap = {};\n components.forEach((component: Component) => {\n const envDef = this.getEnv(component);\n const envId = envDef.id;\n const env = envDef.env;\n // handle config as well when aggregating envs.\n if (envsMap[envId]) envsMap[envId].components.push(component);\n else\n envsMap[envId] = {\n components: [component],\n env,\n };\n });\n\n return Promise.all(\n Object.keys(envsMap).map(async (key) => {\n const envAspectDef = await this.getEnvAspectDef(key);\n return new EnvRuntime(key, envsMap[key].env, envsMap[key].components, envAspectDef);\n })\n );\n }\n\n private async getEnvAspectDef(envId: string): Promise<AspectDefinition> {\n const host = this.componentMain.getHost();\n const id = await host.resolveComponentId(envId);\n // We don't want to filter by runtime here as we want to also get envs that configured as plugins. so they don't\n // contain the runtime path.\n const resolvedAspects = await host.resolveAspects(MainRuntime.name, [id], {\n requestedOnly: true,\n filterByRuntime: false,\n useScopeAspectsCapsule: true,\n });\n const def = resolvedAspects[0];\n\n return def;\n }\n\n private throwForDuplicateComponents(components: Component[]) {\n const idsStr = components.map((c) => c.id.toString());\n const duplications = findDuplications(idsStr);\n if (duplications.length) {\n throw new Error(`found duplicated components: ${duplications.join(', ')}`);\n }\n }\n\n static slots = [\n Slot.withType<Environment>(),\n Slot.withType<EnvService<any>>(),\n Slot.withType<EnvJsoncMergeCustomizerRegistry>(),\n ];\n\n static dependencies = [GraphqlAspect, LoggerAspect, ComponentAspect, CLIAspect, WorkerAspect, IssuesAspect];\n\n static async provider(\n [graphql, loggerAspect, component, cli, worker, issues]: [\n GraphqlMain,\n LoggerMain,\n ComponentMain,\n CLIMain,\n WorkerMain,\n IssuesMain,\n ],\n config: EnvsConfig,\n [envSlot, servicesRegistry, envJsoncMergeCustomizerSlot]: [\n EnvsRegistry,\n ServicesRegistry,\n EnvJsoncMergeCustomizerRegistry,\n ],\n context: Harmony\n ) {\n const logger = loggerAspect.createLogger(EnvsAspect.id);\n const envs = new EnvsMain(\n config,\n context,\n envSlot,\n logger,\n servicesRegistry,\n component,\n loggerAspect,\n worker,\n envJsoncMergeCustomizerSlot\n );\n component.registerShowFragments([new EnvFragment(envs)]);\n if (issues) issues.registerAddComponentsIssues(envs.addNonLoadedEnvAsComponentIssues.bind(envs));\n\n const envsCmd = new EnvsCmd(envs, component);\n envsCmd.commands = [new ListEnvsCmd(envs, component), new GetEnvCmd(envs, component)];\n cli.register(envsCmd);\n graphql.register(environmentsSchema(envs));\n return envs;\n }\n}\n\nEnvsAspect.addRuntime(EnvsMain);\n"],"mappings":"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","ignoreList":[]}
|
package/dist/envs.cmd.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_pMapSeries","data","_interopRequireDefault","require","_chalk","_cliTable","_lodash","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ListEnvsCmd","constructor","envs","componentAspect","report","allEnvs","getAllRegisteredEnvsIds","join","title","chalk","green","exports","GetEnvCmd","name","description","showEnv","id","host","servicesArr","component","get","resolveComponentId","Error","env","getEnv","envRuntime","createEnvironment","envExecutionContext","getEnvExecutionContext","services","getServices","allP","map","serviceId","service","includes","serviceTitle","cyan","bold","underline","content","render","all","compact","Promise","envTitle","getHost","split","undefined","EnvsCmd","Set","components","list","table","getTable","warning","getNonLoadedEnvsWarning","tableData","pMapSeries","envId","calculateEnvId","envIdStr","toString","isLoaded","isEnvRegistered","nonLoadedEnvs","add","envWithErr","red","header","CLITable","fromObject","sort","size","Array","from","values","yellow"],"sources":["envs.cmd.ts"],"sourcesContent":["// eslint-disable-next-line max-classes-per-file\nimport pMapSeries from 'p-map-series';\nimport chalk from 'chalk';\nimport { CLITable } from '@teambit/cli-table';\nimport { Command, CommandOptions } from '@teambit/cli';\nimport { compact } from 'lodash';\nimport { ComponentMain, ComponentFactory, Component } from '@teambit/component';\nimport { EnvsMain } from './environments.main.runtime';\n\nexport class ListEnvsCmd implements Command {\n name = 'list';\n description = 'list all envs currently used in the workspace';\n options = [];\n group = 'development';\n\n constructor(private envs: EnvsMain, private componentAspect: ComponentMain) {}\n\n async report() {\n const allEnvs = this.envs.getAllRegisteredEnvsIds().join('\\n');\n const title = chalk.green('the following envs are available in the workspace:');\n return `${title}\\n${allEnvs}`;\n }\n}\n\ntype GetEnvOpts = {\n services: string;\n};\n\nexport class GetEnvCmd implements Command {\n name = 'get <component-name>';\n description = \"show config information from a component's env\";\n arguments = [\n {\n name: 'component-name',\n description: \"the 'component name' or 'component id' of the component whose env you'd like to inspect\",\n },\n ];\n examples: [{ cmd: 'get ui/button'; description: 'show config information from the env configured for ui/button' }];\n options = [\n [\n '',\n 'services <string>',\n 'show information about the specific services only. for multiple services, separate by a comma and wrap with quotes',\n ],\n ] as CommandOptions;\n group = 'development';\n\n constructor(private envs: EnvsMain, private componentAspect: ComponentMain) {}\n\n async showEnv(id: string, host: ComponentFactory, servicesArr: string[] | undefined) {\n const component = await host.get(await host.resolveComponentId(id));\n if (!component) throw new Error(`component for env ${id} was not found`);\n const env = this.envs.getEnv(component);\n const envRuntime = await this.envs.createEnvironment([component]);\n const envExecutionContext = envRuntime.getEnvExecutionContext();\n const services = this.envs.getServices(env);\n const allP = services.services.map(async ([serviceId, service]) => {\n if (servicesArr && !servicesArr.includes(serviceId)) return null;\n const serviceTitle = chalk.cyan.bold.underline(serviceId);\n const content = service.render ? await service.render(env, envExecutionContext) : '';\n return `${serviceTitle}\\n\\n${content}`;\n });\n\n const all = compact(await Promise.all(allP));\n\n const envTitle = chalk.green(`Environment: ${env.id}`);\n return `${envTitle}\\n${all.join('\\n\\n')}`;\n }\n\n async report([name]: [string], { services }: GetEnvOpts): Promise<string> {\n const host = this.componentAspect.getHost();\n const servicesArr = services ? services.split(',') : undefined;\n\n // TODO: think what to do re this line with gilad.\n if (!host) throw new Error('error: workspace not found');\n return this.showEnv(name, host, servicesArr);\n }\n}\n\nexport class EnvsCmd implements Command {\n name = 'envs';\n alias = 'env';\n description = 'list all components maintained by the workspace and their corresponding envs';\n options = [];\n group = 'development';\n commands: Command[] = [];\n\n // private showNonLoadedEnvsWarning = false;\n private nonLoadedEnvs = new Set<string>();\n\n constructor(private envs: EnvsMain, private componentAspect: ComponentMain) {}\n\n async report(): Promise<string> {\n const host = this.componentAspect.getHost();\n // TODO: think what to do re this line with gilad.\n if (!host) throw new Error('error: workspace not found');\n const components = await host.list();\n const table = await this.getTable(components);\n const warning = this.getNonLoadedEnvsWarning();\n return warning ? `${table}\\n${warning}` : table;\n }\n\n private async getTable(components: Component[]) {\n const tableData = await pMapSeries(components, async (component) => {\n // const envId = this.envs.getEnvId(component);\n const envId = await this.envs.calculateEnvId(component);\n const envIdStr = envId.toString();\n const isLoaded = this.envs.isEnvRegistered(envIdStr);\n if (!isLoaded) {\n this.nonLoadedEnvs.add(envIdStr);\n }\n const envWithErr = isLoaded ? envIdStr : `${envIdStr} ${chalk.red('(not loaded)')}`;\n return {\n component: component.id.toString(),\n env: envWithErr,\n };\n });\n\n const header = [\n {\n value: 'component',\n },\n {\n value: 'env',\n },\n ];\n const table = CLITable.fromObject(header, tableData);\n table.sort();\n return table.render();\n }\n\n getNonLoadedEnvsWarning() {\n if (!this.nonLoadedEnvs.size) return '';\n const list = Array.from(this.nonLoadedEnvs.values()).join(',');\n return chalk.yellow(`warning: bit wasn't able to load the following envs: ${chalk.cyan(list)}.\nplease run ${chalk.cyan(\"'bit install'\")} to fix. if this doesn't help, run ${chalk.cyan(\n \"'bit status'\"\n )} to see if there are any additional issues`);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"names":["_pMapSeries","data","_interopRequireDefault","require","_chalk","_cliTable","_lodash","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ListEnvsCmd","constructor","envs","componentAspect","report","allEnvs","getAllRegisteredEnvsIds","join","title","chalk","green","exports","GetEnvCmd","name","description","showEnv","id","host","servicesArr","component","get","resolveComponentId","Error","env","getEnv","envRuntime","createEnvironment","envExecutionContext","getEnvExecutionContext","services","getServices","allP","map","serviceId","service","includes","serviceTitle","cyan","bold","underline","content","render","all","compact","Promise","envTitle","getHost","split","undefined","EnvsCmd","Set","components","list","table","getTable","warning","getNonLoadedEnvsWarning","tableData","pMapSeries","envId","calculateEnvId","envIdStr","toString","isLoaded","isEnvRegistered","nonLoadedEnvs","add","envWithErr","red","header","CLITable","fromObject","sort","size","Array","from","values","yellow"],"sources":["envs.cmd.ts"],"sourcesContent":["// eslint-disable-next-line max-classes-per-file\nimport pMapSeries from 'p-map-series';\nimport chalk from 'chalk';\nimport { CLITable } from '@teambit/cli-table';\nimport { Command, CommandOptions } from '@teambit/cli';\nimport { compact } from 'lodash';\nimport { ComponentMain, ComponentFactory, Component } from '@teambit/component';\nimport { EnvsMain } from './environments.main.runtime';\n\nexport class ListEnvsCmd implements Command {\n name = 'list';\n description = 'list all envs currently used in the workspace';\n options = [];\n group = 'development';\n\n constructor(\n private envs: EnvsMain,\n private componentAspect: ComponentMain\n ) {}\n\n async report() {\n const allEnvs = this.envs.getAllRegisteredEnvsIds().join('\\n');\n const title = chalk.green('the following envs are available in the workspace:');\n return `${title}\\n${allEnvs}`;\n }\n}\n\ntype GetEnvOpts = {\n services: string;\n};\n\nexport class GetEnvCmd implements Command {\n name = 'get <component-name>';\n description = \"show config information from a component's env\";\n arguments = [\n {\n name: 'component-name',\n description: \"the 'component name' or 'component id' of the component whose env you'd like to inspect\",\n },\n ];\n examples: [{ cmd: 'get ui/button'; description: 'show config information from the env configured for ui/button' }];\n options = [\n [\n '',\n 'services <string>',\n 'show information about the specific services only. for multiple services, separate by a comma and wrap with quotes',\n ],\n ] as CommandOptions;\n group = 'development';\n\n constructor(\n private envs: EnvsMain,\n private componentAspect: ComponentMain\n ) {}\n\n async showEnv(id: string, host: ComponentFactory, servicesArr: string[] | undefined) {\n const component = await host.get(await host.resolveComponentId(id));\n if (!component) throw new Error(`component for env ${id} was not found`);\n const env = this.envs.getEnv(component);\n const envRuntime = await this.envs.createEnvironment([component]);\n const envExecutionContext = envRuntime.getEnvExecutionContext();\n const services = this.envs.getServices(env);\n const allP = services.services.map(async ([serviceId, service]) => {\n if (servicesArr && !servicesArr.includes(serviceId)) return null;\n const serviceTitle = chalk.cyan.bold.underline(serviceId);\n const content = service.render ? await service.render(env, envExecutionContext) : '';\n return `${serviceTitle}\\n\\n${content}`;\n });\n\n const all = compact(await Promise.all(allP));\n\n const envTitle = chalk.green(`Environment: ${env.id}`);\n return `${envTitle}\\n${all.join('\\n\\n')}`;\n }\n\n async report([name]: [string], { services }: GetEnvOpts): Promise<string> {\n const host = this.componentAspect.getHost();\n const servicesArr = services ? services.split(',') : undefined;\n\n // TODO: think what to do re this line with gilad.\n if (!host) throw new Error('error: workspace not found');\n return this.showEnv(name, host, servicesArr);\n }\n}\n\nexport class EnvsCmd implements Command {\n name = 'envs';\n alias = 'env';\n description = 'list all components maintained by the workspace and their corresponding envs';\n options = [];\n group = 'development';\n commands: Command[] = [];\n\n // private showNonLoadedEnvsWarning = false;\n private nonLoadedEnvs = new Set<string>();\n\n constructor(\n private envs: EnvsMain,\n private componentAspect: ComponentMain\n ) {}\n\n async report(): Promise<string> {\n const host = this.componentAspect.getHost();\n // TODO: think what to do re this line with gilad.\n if (!host) throw new Error('error: workspace not found');\n const components = await host.list();\n const table = await this.getTable(components);\n const warning = this.getNonLoadedEnvsWarning();\n return warning ? `${table}\\n${warning}` : table;\n }\n\n private async getTable(components: Component[]) {\n const tableData = await pMapSeries(components, async (component) => {\n // const envId = this.envs.getEnvId(component);\n const envId = await this.envs.calculateEnvId(component);\n const envIdStr = envId.toString();\n const isLoaded = this.envs.isEnvRegistered(envIdStr);\n if (!isLoaded) {\n this.nonLoadedEnvs.add(envIdStr);\n }\n const envWithErr = isLoaded ? envIdStr : `${envIdStr} ${chalk.red('(not loaded)')}`;\n return {\n component: component.id.toString(),\n env: envWithErr,\n };\n });\n\n const header = [\n {\n value: 'component',\n },\n {\n value: 'env',\n },\n ];\n const table = CLITable.fromObject(header, tableData);\n table.sort();\n return table.render();\n }\n\n getNonLoadedEnvsWarning() {\n if (!this.nonLoadedEnvs.size) return '';\n const list = Array.from(this.nonLoadedEnvs.values()).join(',');\n return chalk.yellow(`warning: bit wasn't able to load the following envs: ${chalk.cyan(list)}.\nplease run ${chalk.cyan(\"'bit install'\")} to fix. if this doesn't help, run ${chalk.cyan(\n \"'bit status'\"\n )} to see if there are any additional issues`);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_bitError","data","require","EnvNotFound","BitError","constructor","id","componentId","getMessage","exports","compIdDetails"],"sources":["env-not-found.ts"],"sourcesContent":["import { BitError } from '@teambit/bit-error';\n\nexport class EnvNotFound extends BitError {\n constructor(private id: string
|
1
|
+
{"version":3,"names":["_bitError","data","require","EnvNotFound","BitError","constructor","id","componentId","getMessage","exports","compIdDetails"],"sources":["env-not-found.ts"],"sourcesContent":["import { BitError } from '@teambit/bit-error';\n\nexport class EnvNotFound extends BitError {\n constructor(\n private id: string,\n private componentId?: string\n ) {\n super(getMessage(id, componentId));\n }\n}\n\nfunction getMessage(id: string, componentId?: string): string {\n const compIdDetails = componentId ? `configured on component ${componentId}` : '';\n return `environment with ID: ${id} ${compIdDetails} was not found`;\n}\n"],"mappings":";;;;;;AAAA,SAAAA,UAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,SAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAME,WAAW,SAASC,oBAAQ,CAAC;EACxCC,WAAWA,CACDC,EAAU,EACVC,WAAoB,EAC5B;IACA,KAAK,CAACC,UAAU,CAACF,EAAE,EAAEC,WAAW,CAAC,CAAC;IAAC,KAH3BD,EAAU,GAAVA,EAAU;IAAA,KACVC,WAAoB,GAApBA,WAAoB;EAG9B;AACF;AAACE,OAAA,CAAAN,WAAA,GAAAA,WAAA;AAED,SAASK,UAAUA,CAACF,EAAU,EAAEC,WAAoB,EAAU;EAC5D,MAAMG,aAAa,GAAGH,WAAW,GAAG,2BAA2BA,WAAW,EAAE,GAAG,EAAE;EACjF,OAAO,wBAAwBD,EAAE,IAAII,aAAa,gBAAgB;AACpE","ignoreList":[]}
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.envs_envs@1.0.
|
2
|
-
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.envs_envs@1.0.
|
1
|
+
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.envs_envs@1.0.426/dist/env.composition.js';
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.envs_envs@1.0.426/dist/envs.docs.mdx';
|
3
3
|
|
4
4
|
export const compositions = [compositions_0];
|
5
5
|
export const overview = [overview_0];
|
@@ -1,7 +1,10 @@
|
|
1
1
|
import { BitError } from '@teambit/bit-error';
|
2
2
|
|
3
3
|
export class EnvNotFound extends BitError {
|
4
|
-
constructor(
|
4
|
+
constructor(
|
5
|
+
private id: string,
|
6
|
+
private componentId?: string
|
7
|
+
) {
|
5
8
|
super(getMessage(id, componentId));
|
6
9
|
}
|
7
10
|
}
|
package/package.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "@teambit/envs",
|
3
|
-
"version": "1.0.
|
3
|
+
"version": "1.0.426",
|
4
4
|
"homepage": "https://bit.cloud/teambit/envs/envs",
|
5
5
|
"main": "dist/index.js",
|
6
6
|
"componentId": {
|
7
7
|
"scope": "teambit.envs",
|
8
8
|
"name": "envs",
|
9
|
-
"version": "1.0.
|
9
|
+
"version": "1.0.426"
|
10
10
|
},
|
11
11
|
"dependencies": {
|
12
12
|
"chalk": "2.4.2",
|
@@ -20,33 +20,33 @@
|
|
20
20
|
"@teambit/harmony": "0.4.6",
|
21
21
|
"@teambit/bit-error": "0.0.404",
|
22
22
|
"@teambit/component-id": "1.2.2",
|
23
|
-
"@teambit/component": "1.0.
|
24
|
-
"@teambit/aspect-loader": "1.0.
|
25
|
-
"@teambit/cli": "0.0.
|
26
|
-
"@teambit/logger": "0.0.
|
27
|
-
"@teambit/worker": "0.0.
|
28
|
-
"@teambit/builder": "1.0.
|
29
|
-
"@teambit/bundler": "1.0.
|
30
|
-
"@teambit/compiler": "1.0.
|
31
|
-
"@teambit/dependency-resolver": "1.0.
|
32
|
-
"@teambit/formatter": "1.0.
|
33
|
-
"@teambit/isolator": "1.0.
|
34
|
-
"@teambit/linter": "1.0.
|
35
|
-
"@teambit/pkg": "1.0.
|
36
|
-
"@teambit/preview": "1.0.
|
37
|
-
"@teambit/schema": "1.0.
|
38
|
-
"@teambit/tester": "1.0.
|
39
|
-
"@teambit/typescript": "1.0.
|
40
|
-
"@teambit/webpack": "1.0.
|
41
|
-
"@teambit/graphql": "1.0.
|
42
|
-
"@teambit/bit": "1.8.
|
23
|
+
"@teambit/component": "1.0.426",
|
24
|
+
"@teambit/aspect-loader": "1.0.426",
|
25
|
+
"@teambit/cli": "0.0.1003",
|
26
|
+
"@teambit/logger": "0.0.1096",
|
27
|
+
"@teambit/worker": "0.0.1307",
|
28
|
+
"@teambit/builder": "1.0.426",
|
29
|
+
"@teambit/bundler": "1.0.426",
|
30
|
+
"@teambit/compiler": "1.0.426",
|
31
|
+
"@teambit/dependency-resolver": "1.0.426",
|
32
|
+
"@teambit/formatter": "1.0.426",
|
33
|
+
"@teambit/isolator": "1.0.426",
|
34
|
+
"@teambit/linter": "1.0.426",
|
35
|
+
"@teambit/pkg": "1.0.426",
|
36
|
+
"@teambit/preview": "1.0.426",
|
37
|
+
"@teambit/schema": "1.0.426",
|
38
|
+
"@teambit/tester": "1.0.426",
|
39
|
+
"@teambit/typescript": "1.0.426",
|
40
|
+
"@teambit/webpack": "1.0.426",
|
41
|
+
"@teambit/graphql": "1.0.426",
|
42
|
+
"@teambit/bit": "1.8.77",
|
43
43
|
"@teambit/component-issues": "0.0.151",
|
44
|
-
"@teambit/component.sources": "0.0.
|
45
|
-
"@teambit/dev-files": "1.0.
|
46
|
-
"@teambit/issues": "1.0.
|
44
|
+
"@teambit/component.sources": "0.0.34",
|
45
|
+
"@teambit/dev-files": "1.0.426",
|
46
|
+
"@teambit/issues": "1.0.426",
|
47
47
|
"@teambit/toolbox.array.duplications-finder": "0.0.1",
|
48
48
|
"@teambit/toolbox.modules.module-resolver": "0.0.7",
|
49
|
-
"@teambit/cli-table": "0.0.
|
49
|
+
"@teambit/cli-table": "0.0.49"
|
50
50
|
},
|
51
51
|
"devDependencies": {
|
52
52
|
"@types/lodash": "4.14.165",
|
@@ -54,7 +54,7 @@
|
|
54
54
|
"@types/fs-extra": "9.0.7",
|
55
55
|
"@types/mocha": "9.1.0",
|
56
56
|
"@teambit/harmony.envs.core-aspect-env": "0.0.60",
|
57
|
-
"@teambit/envs.aspect-docs.envs": "0.0.
|
57
|
+
"@teambit/envs.aspect-docs.envs": "0.0.170"
|
58
58
|
},
|
59
59
|
"peerDependencies": {
|
60
60
|
"react": "^17.0.0 || ^18.0.0",
|