@teambit/eject 0.0.316 → 0.0.317

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,6 +14,7 @@ import Component from '@teambit/legacy/dist/consumer/component/consumer-componen
14
14
  import PackageJsonFile from '@teambit/legacy/dist/consumer/component/package-json-file';
15
15
  import { Logger } from '@teambit/logger';
16
16
  import { ComponentID } from '@teambit/component-id';
17
+ import { InstallMain } from '@teambit/install';
17
18
  export declare type EjectResults = {
18
19
  ejectedComponents: BitIds;
19
20
  failedComponents: FailedComponents;
@@ -30,6 +31,7 @@ declare type FailedComponents = {
30
31
  };
31
32
  export declare class ComponentsEjector {
32
33
  private workspace;
34
+ private install;
33
35
  private logger;
34
36
  private componentsIds;
35
37
  private ejectOptions;
@@ -42,7 +44,7 @@ export declare class ComponentsEjector {
42
44
  }>;
43
45
  failedComponents: FailedComponents;
44
46
  packageJsonFilesBeforeChanges: PackageJsonFile[];
45
- constructor(workspace: Workspace, logger: Logger, componentsIds: ComponentID[], ejectOptions: EjectOptions);
47
+ constructor(workspace: Workspace, install: InstallMain, logger: Logger, componentsIds: ComponentID[], ejectOptions: EjectOptions);
46
48
  eject(): Promise<EjectResults>;
47
49
  decideWhichComponentsToEject(): Promise<void>;
48
50
  loadComponentsToEject(): Promise<void>;
@@ -108,8 +108,9 @@ class ComponentsEjector {
108
108
  // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
109
109
  // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
110
110
  // for rollback in case of errors
111
- constructor(workspace, logger, componentsIds, ejectOptions) {
111
+ constructor(workspace, install, logger, componentsIds, ejectOptions) {
112
112
  this.workspace = workspace;
113
+ this.install = install;
113
114
  this.logger = logger;
114
115
  this.componentsIds = componentsIds;
115
116
  this.ejectOptions = ejectOptions;
@@ -196,7 +197,7 @@ class ComponentsEjector {
196
197
  async installPackages() {
197
198
  this.logger.setStatusLine('Eject: installing packages using the package-manager');
198
199
  const packages = this.getPackagesToInstall();
199
- await this.workspace.install(packages);
200
+ await this.install.install(packages);
200
201
  }
201
202
 
202
203
  getPackagesToInstall() {
@@ -1 +1 @@
1
- {"version":3,"names":["ComponentsEjector","constructor","workspace","logger","componentsIds","ejectOptions","consumer","idsToEject","BitIds","failedComponents","modifiedComponents","stagedComponents","notExportedComponents","selfHostedExportedComponents","eject","decideWhichComponentsToEject","debug","length","loadComponentsToEject","_validateIdsHaveScopesAndVersions","removeComponentsFromNodeModules","untrackComponents","installPackages","removeComponentsFiles","writeBitMap","ejectedComponents","setStatusLine","remotes","getScopeRemotes","scope","hubExportedComponents","forEach","componentId","bitId","_legacy","hasScope","push","isHub","force","Promise","all","map","id","componentStatus","getComponentStatusById","modified","staged","err","throwEjectError","toString","consoleSuccess","components","loadComponents","componentsToEject","action","packageJsonUtils","packages","getPackagesToInstall","install","c","componentIdToPackageName","_buildExceptionMessageWithRollbackData","keepFiles","dataToPersist","DataToPersist","component","componentMap","Error","rootDir","removePath","RemovePath","addBasePath","getPath","persistAllToFS","cleanFromBitMap","message","originalError","originalErrorMessage","defaultErrorHandler","error","hasVersion","TypeError"],"sources":["components-ejector.ts"],"sourcesContent":["/**\n * a classic use case of eject is when a user imports a component using `bit import` to update it,\n * but the user has no intention to have the code as part of the project source code.\n * the eject provides the option to delete the component locally and install it via the NPM client.\n *\n * an implementation note, the entire process is done with rollback in mind.\n * since installing the component via NPM client is an error prone process, we do it first, before\n * removing the component files, so then it's easier to rollback.\n */\nimport { Workspace } from '@teambit/workspace';\nimport { Consumer } from '@teambit/legacy/dist/consumer';\nimport { BitIds } from '@teambit/legacy/dist/bit-id';\nimport defaultErrorHandler from '@teambit/legacy/dist/cli/default-error-handler';\nimport { getScopeRemotes } from '@teambit/legacy/dist/scope/scope-remotes';\nimport componentIdToPackageName from '@teambit/legacy/dist/utils/bit/component-id-to-package-name';\nimport Component from '@teambit/legacy/dist/consumer/component/consumer-component';\nimport PackageJsonFile from '@teambit/legacy/dist/consumer/component/package-json-file';\nimport * as packageJsonUtils from '@teambit/legacy/dist/consumer/component/package-json-utils';\nimport DataToPersist from '@teambit/legacy/dist/consumer/component/sources/data-to-persist';\nimport RemovePath from '@teambit/legacy/dist/consumer/component/sources/remove-path';\nimport { Logger } from '@teambit/logger';\nimport { ComponentID } from '@teambit/component-id';\n\nexport type EjectResults = {\n ejectedComponents: BitIds;\n failedComponents: FailedComponents;\n};\n\nexport type EjectOptions = {\n force: boolean; // eject although a component is modified/staged\n keepFiles: boolean; // keep component files on the workspace\n};\n\ntype FailedComponents = {\n modifiedComponents: BitIds;\n stagedComponents: BitIds;\n notExportedComponents: BitIds;\n selfHostedExportedComponents: BitIds;\n};\n\nexport class ComponentsEjector {\n consumer: Consumer;\n idsToEject: BitIds;\n componentsToEject: Component[] = [];\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n notEjectedDependents: Array<{ dependent: Component; ejectedDependencies: Component[] }>;\n failedComponents: FailedComponents;\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n packageJsonFilesBeforeChanges: PackageJsonFile[]; // for rollback in case of errors\n constructor(\n private workspace: Workspace,\n private logger: Logger,\n private componentsIds: ComponentID[],\n private ejectOptions: EjectOptions\n ) {\n this.consumer = this.workspace.consumer;\n this.idsToEject = new BitIds();\n this.failedComponents = {\n modifiedComponents: new BitIds(),\n stagedComponents: new BitIds(),\n notExportedComponents: new BitIds(),\n selfHostedExportedComponents: new BitIds(),\n };\n }\n\n async eject(): Promise<EjectResults> {\n await this.decideWhichComponentsToEject();\n this.logger.debug(`${this.idsToEject.length} to eject`);\n await this.loadComponentsToEject();\n if (this.idsToEject.length) {\n this._validateIdsHaveScopesAndVersions();\n await this.removeComponentsFromNodeModules();\n await this.untrackComponents();\n await this.installPackages();\n await this.removeComponentsFiles();\n await this.consumer.writeBitMap();\n }\n this.logger.debug('eject: completed successfully');\n return {\n ejectedComponents: this.idsToEject,\n failedComponents: this.failedComponents,\n };\n }\n\n async decideWhichComponentsToEject(): Promise<void> {\n this.logger.setStatusLine('Eject: getting the components status');\n if (!this.componentsIds.length) return;\n const remotes = await getScopeRemotes(this.consumer.scope);\n const hubExportedComponents = new BitIds();\n this.componentsIds.forEach((componentId) => {\n const bitId = componentId._legacy;\n if (!bitId.hasScope()) this.failedComponents.notExportedComponents.push(bitId);\n else if (remotes.isHub(bitId.scope as string)) hubExportedComponents.push(bitId);\n else this.failedComponents.selfHostedExportedComponents.push(bitId);\n });\n if (this.ejectOptions.force) {\n this.idsToEject = hubExportedComponents;\n } else {\n await Promise.all(\n hubExportedComponents.map(async (id) => {\n try {\n const componentStatus = await this.consumer.getComponentStatusById(id);\n if (componentStatus.modified) this.failedComponents.modifiedComponents.push(id);\n else if (componentStatus.staged) this.failedComponents.stagedComponents.push(id);\n else this.idsToEject.push(id);\n } catch (err: any) {\n this.throwEjectError(\n `eject operation failed getting the status of ${id.toString()}, no action has been done.\n please fix the issue to continue.`,\n err\n );\n }\n })\n );\n }\n this.logger.consoleSuccess();\n }\n\n async loadComponentsToEject() {\n const { components } = await this.consumer.loadComponents(this.idsToEject);\n this.componentsToEject = components;\n }\n\n async removeComponentsFromNodeModules() {\n const action = 'Eject: removing the existing components from node_modules';\n this.logger.setStatusLine(action);\n this.logger.debug(action);\n await packageJsonUtils.removeComponentsFromNodeModules(this.consumer, this.componentsToEject);\n this.logger.consoleSuccess(action);\n }\n\n async installPackages() {\n this.logger.setStatusLine('Eject: installing packages using the package-manager');\n const packages = this.getPackagesToInstall();\n await this.workspace.install(packages);\n }\n\n getPackagesToInstall(): string[] {\n return this.componentsToEject.map((c) => componentIdToPackageName(c));\n }\n\n _buildExceptionMessageWithRollbackData(action: string): string {\n return `eject failed ${action}.\nyour package.json (if existed) has been restored, however, some bit generated data may have been deleted, please run \"bit link\" to restore them.`;\n }\n\n /**\n * as part of the 'eject' operation, a component is removed locally. as opposed to the remove\n * command, in this case, no need to remove the objects from the scope, only remove from the\n * filesystem, which means, delete the component files, untrack from .bitmap and clean\n * package.json and bit.json traces.\n */\n private async removeComponentsFiles() {\n if (this.ejectOptions.keepFiles) {\n return;\n }\n this.logger.setStatusLine('Eject: removing the components files from the filesystem');\n const dataToPersist = new DataToPersist();\n this.componentsToEject.forEach((component) => {\n const componentMap = component.componentMap;\n if (!componentMap) {\n throw new Error('ComponentEjector.removeComponentsFiles expect a component to have componentMap prop');\n }\n const rootDir = componentMap.rootDir;\n if (!rootDir) {\n throw new Error('ComponentEjector.removeComponentsFiles expect a componentMap to have rootDir');\n }\n dataToPersist.removePath(new RemovePath(rootDir, true));\n });\n dataToPersist.addBasePath(this.consumer.getPath());\n await dataToPersist.persistAllToFS();\n this.logger.consoleSuccess();\n }\n\n private async untrackComponents() {\n this.logger.debug('eject: removing the components from the .bitmap');\n await this.consumer.cleanFromBitMap(this.idsToEject);\n }\n\n throwEjectError(message: string, originalError: Error) {\n const { message: originalErrorMessage } = defaultErrorHandler(originalError);\n this.logger.error(`eject has stopped due to an error ${originalErrorMessage}`, originalError);\n throw new Error(`${message}\n\ngot the following error: ${originalErrorMessage}`);\n }\n\n _validateIdsHaveScopesAndVersions() {\n this.idsToEject.forEach((id) => {\n if (!id.hasScope() || !id.hasVersion()) {\n throw new TypeError(`EjectComponents expects ids with scope and version, got ${id.toString()}`);\n }\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["ComponentsEjector","constructor","workspace","install","logger","componentsIds","ejectOptions","consumer","idsToEject","BitIds","failedComponents","modifiedComponents","stagedComponents","notExportedComponents","selfHostedExportedComponents","eject","decideWhichComponentsToEject","debug","length","loadComponentsToEject","_validateIdsHaveScopesAndVersions","removeComponentsFromNodeModules","untrackComponents","installPackages","removeComponentsFiles","writeBitMap","ejectedComponents","setStatusLine","remotes","getScopeRemotes","scope","hubExportedComponents","forEach","componentId","bitId","_legacy","hasScope","push","isHub","force","Promise","all","map","id","componentStatus","getComponentStatusById","modified","staged","err","throwEjectError","toString","consoleSuccess","components","loadComponents","componentsToEject","action","packageJsonUtils","packages","getPackagesToInstall","c","componentIdToPackageName","_buildExceptionMessageWithRollbackData","keepFiles","dataToPersist","DataToPersist","component","componentMap","Error","rootDir","removePath","RemovePath","addBasePath","getPath","persistAllToFS","cleanFromBitMap","message","originalError","originalErrorMessage","defaultErrorHandler","error","hasVersion","TypeError"],"sources":["components-ejector.ts"],"sourcesContent":["/**\n * a classic use case of eject is when a user imports a component using `bit import` to update it,\n * but the user has no intention to have the code as part of the project source code.\n * the eject provides the option to delete the component locally and install it via the NPM client.\n *\n * an implementation note, the entire process is done with rollback in mind.\n * since installing the component via NPM client is an error prone process, we do it first, before\n * removing the component files, so then it's easier to rollback.\n */\nimport { Workspace } from '@teambit/workspace';\nimport { Consumer } from '@teambit/legacy/dist/consumer';\nimport { BitIds } from '@teambit/legacy/dist/bit-id';\nimport defaultErrorHandler from '@teambit/legacy/dist/cli/default-error-handler';\nimport { getScopeRemotes } from '@teambit/legacy/dist/scope/scope-remotes';\nimport componentIdToPackageName from '@teambit/legacy/dist/utils/bit/component-id-to-package-name';\nimport Component from '@teambit/legacy/dist/consumer/component/consumer-component';\nimport PackageJsonFile from '@teambit/legacy/dist/consumer/component/package-json-file';\nimport * as packageJsonUtils from '@teambit/legacy/dist/consumer/component/package-json-utils';\nimport DataToPersist from '@teambit/legacy/dist/consumer/component/sources/data-to-persist';\nimport RemovePath from '@teambit/legacy/dist/consumer/component/sources/remove-path';\nimport { Logger } from '@teambit/logger';\nimport { ComponentID } from '@teambit/component-id';\nimport { InstallMain } from '@teambit/install';\n\nexport type EjectResults = {\n ejectedComponents: BitIds;\n failedComponents: FailedComponents;\n};\n\nexport type EjectOptions = {\n force: boolean; // eject although a component is modified/staged\n keepFiles: boolean; // keep component files on the workspace\n};\n\ntype FailedComponents = {\n modifiedComponents: BitIds;\n stagedComponents: BitIds;\n notExportedComponents: BitIds;\n selfHostedExportedComponents: BitIds;\n};\n\nexport class ComponentsEjector {\n consumer: Consumer;\n idsToEject: BitIds;\n componentsToEject: Component[] = [];\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n notEjectedDependents: Array<{ dependent: Component; ejectedDependencies: Component[] }>;\n failedComponents: FailedComponents;\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n packageJsonFilesBeforeChanges: PackageJsonFile[]; // for rollback in case of errors\n constructor(\n private workspace: Workspace,\n private install: InstallMain,\n private logger: Logger,\n private componentsIds: ComponentID[],\n private ejectOptions: EjectOptions\n ) {\n this.consumer = this.workspace.consumer;\n this.idsToEject = new BitIds();\n this.failedComponents = {\n modifiedComponents: new BitIds(),\n stagedComponents: new BitIds(),\n notExportedComponents: new BitIds(),\n selfHostedExportedComponents: new BitIds(),\n };\n }\n\n async eject(): Promise<EjectResults> {\n await this.decideWhichComponentsToEject();\n this.logger.debug(`${this.idsToEject.length} to eject`);\n await this.loadComponentsToEject();\n if (this.idsToEject.length) {\n this._validateIdsHaveScopesAndVersions();\n await this.removeComponentsFromNodeModules();\n await this.untrackComponents();\n await this.installPackages();\n await this.removeComponentsFiles();\n await this.consumer.writeBitMap();\n }\n this.logger.debug('eject: completed successfully');\n return {\n ejectedComponents: this.idsToEject,\n failedComponents: this.failedComponents,\n };\n }\n\n async decideWhichComponentsToEject(): Promise<void> {\n this.logger.setStatusLine('Eject: getting the components status');\n if (!this.componentsIds.length) return;\n const remotes = await getScopeRemotes(this.consumer.scope);\n const hubExportedComponents = new BitIds();\n this.componentsIds.forEach((componentId) => {\n const bitId = componentId._legacy;\n if (!bitId.hasScope()) this.failedComponents.notExportedComponents.push(bitId);\n else if (remotes.isHub(bitId.scope as string)) hubExportedComponents.push(bitId);\n else this.failedComponents.selfHostedExportedComponents.push(bitId);\n });\n if (this.ejectOptions.force) {\n this.idsToEject = hubExportedComponents;\n } else {\n await Promise.all(\n hubExportedComponents.map(async (id) => {\n try {\n const componentStatus = await this.consumer.getComponentStatusById(id);\n if (componentStatus.modified) this.failedComponents.modifiedComponents.push(id);\n else if (componentStatus.staged) this.failedComponents.stagedComponents.push(id);\n else this.idsToEject.push(id);\n } catch (err: any) {\n this.throwEjectError(\n `eject operation failed getting the status of ${id.toString()}, no action has been done.\n please fix the issue to continue.`,\n err\n );\n }\n })\n );\n }\n this.logger.consoleSuccess();\n }\n\n async loadComponentsToEject() {\n const { components } = await this.consumer.loadComponents(this.idsToEject);\n this.componentsToEject = components;\n }\n\n async removeComponentsFromNodeModules() {\n const action = 'Eject: removing the existing components from node_modules';\n this.logger.setStatusLine(action);\n this.logger.debug(action);\n await packageJsonUtils.removeComponentsFromNodeModules(this.consumer, this.componentsToEject);\n this.logger.consoleSuccess(action);\n }\n\n async installPackages() {\n this.logger.setStatusLine('Eject: installing packages using the package-manager');\n const packages = this.getPackagesToInstall();\n await this.install.install(packages);\n }\n\n getPackagesToInstall(): string[] {\n return this.componentsToEject.map((c) => componentIdToPackageName(c));\n }\n\n _buildExceptionMessageWithRollbackData(action: string): string {\n return `eject failed ${action}.\nyour package.json (if existed) has been restored, however, some bit generated data may have been deleted, please run \"bit link\" to restore them.`;\n }\n\n /**\n * as part of the 'eject' operation, a component is removed locally. as opposed to the remove\n * command, in this case, no need to remove the objects from the scope, only remove from the\n * filesystem, which means, delete the component files, untrack from .bitmap and clean\n * package.json and bit.json traces.\n */\n private async removeComponentsFiles() {\n if (this.ejectOptions.keepFiles) {\n return;\n }\n this.logger.setStatusLine('Eject: removing the components files from the filesystem');\n const dataToPersist = new DataToPersist();\n this.componentsToEject.forEach((component) => {\n const componentMap = component.componentMap;\n if (!componentMap) {\n throw new Error('ComponentEjector.removeComponentsFiles expect a component to have componentMap prop');\n }\n const rootDir = componentMap.rootDir;\n if (!rootDir) {\n throw new Error('ComponentEjector.removeComponentsFiles expect a componentMap to have rootDir');\n }\n dataToPersist.removePath(new RemovePath(rootDir, true));\n });\n dataToPersist.addBasePath(this.consumer.getPath());\n await dataToPersist.persistAllToFS();\n this.logger.consoleSuccess();\n }\n\n private async untrackComponents() {\n this.logger.debug('eject: removing the components from the .bitmap');\n await this.consumer.cleanFromBitMap(this.idsToEject);\n }\n\n throwEjectError(message: string, originalError: Error) {\n const { message: originalErrorMessage } = defaultErrorHandler(originalError);\n this.logger.error(`eject has stopped due to an error ${originalErrorMessage}`, originalError);\n throw new Error(`${message}\n\ngot the following error: ${originalErrorMessage}`);\n }\n\n _validateIdsHaveScopesAndVersions() {\n this.idsToEject.forEach((id) => {\n if (!id.hasScope() || !id.hasVersion()) {\n throw new TypeError(`EjectComponents expects ids with scope and version, got ${id.toString()}`);\n }\n });\n }\n}\n"],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import { Command, CommandOptions } from '@teambit/cli';
2
2
  import { Workspace } from '@teambit/workspace';
3
3
  import { Logger } from '@teambit/logger';
4
+ import { InstallMain } from '@teambit/install';
4
5
  export declare class EjectCmd implements Command {
5
6
  private workspace;
6
7
  private logger;
8
+ private install;
7
9
  name: string;
8
10
  description: string;
9
11
  arguments: {
@@ -15,7 +17,7 @@ export declare class EjectCmd implements Command {
15
17
  loader: boolean;
16
18
  migration: boolean;
17
19
  group: string;
18
- constructor(workspace: Workspace, logger: Logger);
20
+ constructor(workspace: Workspace, logger: Logger, install: InstallMain);
19
21
  report([pattern]: [string], { force, json, keepFiles }: {
20
22
  force: boolean;
21
23
  json: boolean;
package/dist/eject-cmd.js CHANGED
@@ -52,9 +52,10 @@ function _componentsEjector() {
52
52
  }
53
53
 
54
54
  class EjectCmd {
55
- constructor(workspace, logger) {
55
+ constructor(workspace, logger, install) {
56
56
  this.workspace = workspace;
57
57
  this.logger = logger;
58
+ this.install = install;
58
59
  (0, _defineProperty2().default)(this, "name", 'eject <component-pattern>');
59
60
  (0, _defineProperty2().default)(this, "description", 'replace components maintained in the workspace with their corresponding packages');
60
61
  (0, _defineProperty2().default)(this, "arguments", [{
@@ -75,7 +76,7 @@ class EjectCmd {
75
76
  }) {
76
77
  if (!this.workspace) throw new (_exceptions().ConsumerNotFound)();
77
78
  const componentIds = await this.workspace.idsByPattern(pattern);
78
- const componentEjector = new (_componentsEjector().ComponentsEjector)(this.workspace, this.logger, componentIds, {
79
+ const componentEjector = new (_componentsEjector().ComponentsEjector)(this.workspace, this.install, this.logger, componentIds, {
79
80
  force,
80
81
  keepFiles
81
82
  });
@@ -1 +1 @@
1
- {"version":3,"names":["EjectCmd","constructor","workspace","logger","name","description","report","pattern","force","json","keepFiles","ConsumerNotFound","componentIds","idsByPattern","componentEjector","ComponentsEjector","ejectResults","eject","JSON","stringify","ejectTemplate"],"sources":["eject-cmd.ts"],"sourcesContent":["import { Command, CommandOptions } from '@teambit/cli';\nimport { Workspace } from '@teambit/workspace';\nimport ejectTemplate from '@teambit/legacy/dist/cli/templates/eject-template';\nimport { ConsumerNotFound } from '@teambit/legacy/dist/consumer/exceptions';\nimport { Logger } from '@teambit/logger';\nimport { ComponentsEjector } from './components-ejector';\n\nexport class EjectCmd implements Command {\n name = 'eject <component-pattern>';\n description = 'replace components maintained in the workspace with their corresponding packages';\n arguments = [\n {\n name: 'component-pattern',\n description:\n 'component name, component id, or component pattern.\\nuse component pattern to select multiple components. use comma to separate patterns and \"!\" to exclude. e.g. \"ui/**, !ui/button\"\\nwrap the pattern with quotes',\n },\n ];\n alias = 'E';\n options = [\n ['f', 'force', 'ignore local version. remove the components even when they are staged or modified'],\n ['j', 'json', 'print the results in JSON format'],\n ['', 'keep-files', 'keep the component files in the workspace intact'],\n ] as CommandOptions;\n loader = true;\n migration = true;\n group = 'development';\n\n constructor(private workspace: Workspace, private logger: Logger) {}\n\n async report(\n [pattern]: [string],\n { force = false, json = false, keepFiles = false }: { force: boolean; json: boolean; keepFiles: boolean }\n ): Promise<string> {\n if (!this.workspace) throw new ConsumerNotFound();\n const componentIds = await this.workspace.idsByPattern(pattern);\n const componentEjector = new ComponentsEjector(this.workspace, this.logger, componentIds, { force, keepFiles });\n const ejectResults = await componentEjector.eject();\n if (json) return JSON.stringify(ejectResults, null, 2);\n return ejectTemplate(ejectResults);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEO,MAAMA,QAAN,CAAkC;EAoBvCC,WAAW,CAASC,SAAT,EAAuCC,MAAvC,EAAuD;IAAA,KAA9CD,SAA8C,GAA9CA,SAA8C;IAAA,KAAhBC,MAAgB,GAAhBA,MAAgB;IAAA,8CAnB3D,2BAmB2D;IAAA,qDAlBpD,kFAkBoD;IAAA,mDAjBtD,CACV;MACEC,IAAI,EAAE,mBADR;MAEEC,WAAW,EACT;IAHJ,CADU,CAiBsD;IAAA,+CAV1D,GAU0D;IAAA,iDATxD,CACR,CAAC,GAAD,EAAM,OAAN,EAAe,mFAAf,CADQ,EAER,CAAC,GAAD,EAAM,MAAN,EAAc,kCAAd,CAFQ,EAGR,CAAC,EAAD,EAAK,YAAL,EAAmB,kDAAnB,CAHQ,CASwD;IAAA,gDAJzD,IAIyD;IAAA,mDAHtD,IAGsD;IAAA,+CAF1D,aAE0D;EAAE;;EAExD,MAANC,MAAM,CACV,CAACC,OAAD,CADU,EAEV;IAAEC,KAAK,GAAG,KAAV;IAAiBC,IAAI,GAAG,KAAxB;IAA+BC,SAAS,GAAG;EAA3C,CAFU,EAGO;IACjB,IAAI,CAAC,KAAKR,SAAV,EAAqB,MAAM,KAAIS,8BAAJ,GAAN;IACrB,MAAMC,YAAY,GAAG,MAAM,KAAKV,SAAL,CAAeW,YAAf,CAA4BN,OAA5B,CAA3B;IACA,MAAMO,gBAAgB,GAAG,KAAIC,sCAAJ,EAAsB,KAAKb,SAA3B,EAAsC,KAAKC,MAA3C,EAAmDS,YAAnD,EAAiE;MAAEJ,KAAF;MAASE;IAAT,CAAjE,CAAzB;IACA,MAAMM,YAAY,GAAG,MAAMF,gBAAgB,CAACG,KAAjB,EAA3B;IACA,IAAIR,IAAJ,EAAU,OAAOS,IAAI,CAACC,SAAL,CAAeH,YAAf,EAA6B,IAA7B,EAAmC,CAAnC,CAAP;IACV,OAAO,IAAAI,wBAAA,EAAcJ,YAAd,CAAP;EACD;;AAhCsC"}
1
+ {"version":3,"names":["EjectCmd","constructor","workspace","logger","install","name","description","report","pattern","force","json","keepFiles","ConsumerNotFound","componentIds","idsByPattern","componentEjector","ComponentsEjector","ejectResults","eject","JSON","stringify","ejectTemplate"],"sources":["eject-cmd.ts"],"sourcesContent":["import { Command, CommandOptions } from '@teambit/cli';\nimport { Workspace } from '@teambit/workspace';\nimport ejectTemplate from '@teambit/legacy/dist/cli/templates/eject-template';\nimport { ConsumerNotFound } from '@teambit/legacy/dist/consumer/exceptions';\nimport { Logger } from '@teambit/logger';\nimport { InstallMain } from '@teambit/install';\nimport { ComponentsEjector } from './components-ejector';\n\nexport class EjectCmd implements Command {\n name = 'eject <component-pattern>';\n description = 'replace components maintained in the workspace with their corresponding packages';\n arguments = [\n {\n name: 'component-pattern',\n description:\n 'component name, component id, or component pattern.\\nuse component pattern to select multiple components. use comma to separate patterns and \"!\" to exclude. e.g. \"ui/**, !ui/button\"\\nwrap the pattern with quotes',\n },\n ];\n alias = 'E';\n options = [\n ['f', 'force', 'ignore local version. remove the components even when they are staged or modified'],\n ['j', 'json', 'print the results in JSON format'],\n ['', 'keep-files', 'keep the component files in the workspace intact'],\n ] as CommandOptions;\n loader = true;\n migration = true;\n group = 'development';\n\n constructor(private workspace: Workspace, private logger: Logger, private install: InstallMain) {}\n\n async report(\n [pattern]: [string],\n { force = false, json = false, keepFiles = false }: { force: boolean; json: boolean; keepFiles: boolean }\n ): Promise<string> {\n if (!this.workspace) throw new ConsumerNotFound();\n const componentIds = await this.workspace.idsByPattern(pattern);\n const componentEjector = new ComponentsEjector(this.workspace, this.install, this.logger, componentIds, {\n force,\n keepFiles,\n });\n const ejectResults = await componentEjector.eject();\n if (json) return JSON.stringify(ejectResults, null, 2);\n return ejectTemplate(ejectResults);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEO,MAAMA,QAAN,CAAkC;EAoBvCC,WAAW,CAASC,SAAT,EAAuCC,MAAvC,EAA+DC,OAA/D,EAAqF;IAAA,KAA5EF,SAA4E,GAA5EA,SAA4E;IAAA,KAA9CC,MAA8C,GAA9CA,MAA8C;IAAA,KAAtBC,OAAsB,GAAtBA,OAAsB;IAAA,8CAnBzF,2BAmByF;IAAA,qDAlBlF,kFAkBkF;IAAA,mDAjBpF,CACV;MACEC,IAAI,EAAE,mBADR;MAEEC,WAAW,EACT;IAHJ,CADU,CAiBoF;IAAA,+CAVxF,GAUwF;IAAA,iDATtF,CACR,CAAC,GAAD,EAAM,OAAN,EAAe,mFAAf,CADQ,EAER,CAAC,GAAD,EAAM,MAAN,EAAc,kCAAd,CAFQ,EAGR,CAAC,EAAD,EAAK,YAAL,EAAmB,kDAAnB,CAHQ,CASsF;IAAA,gDAJvF,IAIuF;IAAA,mDAHpF,IAGoF;IAAA,+CAFxF,aAEwF;EAAE;;EAEtF,MAANC,MAAM,CACV,CAACC,OAAD,CADU,EAEV;IAAEC,KAAK,GAAG,KAAV;IAAiBC,IAAI,GAAG,KAAxB;IAA+BC,SAAS,GAAG;EAA3C,CAFU,EAGO;IACjB,IAAI,CAAC,KAAKT,SAAV,EAAqB,MAAM,KAAIU,8BAAJ,GAAN;IACrB,MAAMC,YAAY,GAAG,MAAM,KAAKX,SAAL,CAAeY,YAAf,CAA4BN,OAA5B,CAA3B;IACA,MAAMO,gBAAgB,GAAG,KAAIC,sCAAJ,EAAsB,KAAKd,SAA3B,EAAsC,KAAKE,OAA3C,EAAoD,KAAKD,MAAzD,EAAiEU,YAAjE,EAA+E;MACtGJ,KADsG;MAEtGE;IAFsG,CAA/E,CAAzB;IAIA,MAAMM,YAAY,GAAG,MAAMF,gBAAgB,CAACG,KAAjB,EAA3B;IACA,IAAIR,IAAJ,EAAU,OAAOS,IAAI,CAACC,SAAL,CAAeH,YAAf,EAA6B,IAA7B,EAAmC,CAAnC,CAAP;IACV,OAAO,IAAAI,wBAAA,EAAcJ,YAAd,CAAP;EACD;;AAnCsC"}
@@ -1,8 +1,9 @@
1
1
  import { CLIMain } from '@teambit/cli';
2
2
  import { LoggerMain } from '@teambit/logger';
3
3
  import { Workspace } from '@teambit/workspace';
4
+ import { InstallMain } from '@teambit/install';
4
5
  export declare class EjectMain {
5
6
  static runtime: import("@teambit/harmony").RuntimeDefinition;
6
7
  static dependencies: import("@teambit/harmony").Aspect[];
7
- static provider([cli, workspace, loggerMain]: [CLIMain, Workspace, LoggerMain]): Promise<EjectMain>;
8
+ static provider([cli, workspace, loggerMain, install]: [CLIMain, Workspace, LoggerMain, InstallMain]): Promise<EjectMain>;
8
9
  }
@@ -51,6 +51,16 @@ function _workspace() {
51
51
  return data;
52
52
  }
53
53
 
54
+ function _install() {
55
+ const data = require("@teambit/install");
56
+
57
+ _install = function () {
58
+ return data;
59
+ };
60
+
61
+ return data;
62
+ }
63
+
54
64
  function _ejectCmd() {
55
65
  const data = require("./eject-cmd");
56
66
 
@@ -72,9 +82,9 @@ function _eject() {
72
82
  }
73
83
 
74
84
  class EjectMain {
75
- static async provider([cli, workspace, loggerMain]) {
85
+ static async provider([cli, workspace, loggerMain, install]) {
76
86
  const logger = loggerMain.createLogger(_eject().EjectAspect.id);
77
- cli.register(new (_ejectCmd().EjectCmd)(workspace, logger));
87
+ cli.register(new (_ejectCmd().EjectCmd)(workspace, logger, install));
78
88
  return new EjectMain();
79
89
  }
80
90
 
@@ -82,7 +92,7 @@ class EjectMain {
82
92
 
83
93
  exports.EjectMain = EjectMain;
84
94
  (0, _defineProperty2().default)(EjectMain, "runtime", _cli().MainRuntime);
85
- (0, _defineProperty2().default)(EjectMain, "dependencies", [_cli().CLIAspect, _workspace().default, _logger().LoggerAspect]);
95
+ (0, _defineProperty2().default)(EjectMain, "dependencies", [_cli().CLIAspect, _workspace().default, _logger().LoggerAspect, _install().InstallAspect]);
86
96
 
87
97
  _eject().EjectAspect.addRuntime(EjectMain);
88
98
 
@@ -1 +1 @@
1
- {"version":3,"names":["EjectMain","provider","cli","workspace","loggerMain","logger","createLogger","EjectAspect","id","register","EjectCmd","MainRuntime","CLIAspect","WorkspaceAspect","LoggerAspect","addRuntime"],"sources":["eject.main.runtime.ts"],"sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { LoggerAspect, LoggerMain } from '@teambit/logger';\nimport WorkspaceAspect, { Workspace } from '@teambit/workspace';\nimport { EjectCmd } from './eject-cmd';\nimport { EjectAspect } from './eject.aspect';\n\nexport class EjectMain {\n static runtime = MainRuntime;\n\n static dependencies = [CLIAspect, WorkspaceAspect, LoggerAspect];\n\n static async provider([cli, workspace, loggerMain]: [CLIMain, Workspace, LoggerMain]) {\n const logger = loggerMain.createLogger(EjectAspect.id);\n cli.register(new EjectCmd(workspace, logger));\n\n return new EjectMain();\n }\n}\n\nEjectAspect.addRuntime(EjectMain);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEO,MAAMA,SAAN,CAAgB;EAKA,aAARC,QAAQ,CAAC,CAACC,GAAD,EAAMC,SAAN,EAAiBC,UAAjB,CAAD,EAAiE;IACpF,MAAMC,MAAM,GAAGD,UAAU,CAACE,YAAX,CAAwBC,oBAAA,CAAYC,EAApC,CAAf;IACAN,GAAG,CAACO,QAAJ,CAAa,KAAIC,oBAAJ,EAAaP,SAAb,EAAwBE,MAAxB,CAAb;IAEA,OAAO,IAAIL,SAAJ,EAAP;EACD;;AAVoB;;;gCAAVA,S,aACMW,kB;gCADNX,S,kBAGW,CAACY,gBAAD,EAAYC,oBAAZ,EAA6BC,sBAA7B,C;;AAUxBP,oBAAA,CAAYQ,UAAZ,CAAuBf,SAAvB"}
1
+ {"version":3,"names":["EjectMain","provider","cli","workspace","loggerMain","install","logger","createLogger","EjectAspect","id","register","EjectCmd","MainRuntime","CLIAspect","WorkspaceAspect","LoggerAspect","InstallAspect","addRuntime"],"sources":["eject.main.runtime.ts"],"sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { LoggerAspect, LoggerMain } from '@teambit/logger';\nimport WorkspaceAspect, { Workspace } from '@teambit/workspace';\nimport { InstallAspect, InstallMain } from '@teambit/install';\nimport { EjectCmd } from './eject-cmd';\nimport { EjectAspect } from './eject.aspect';\n\nexport class EjectMain {\n static runtime = MainRuntime;\n\n static dependencies = [CLIAspect, WorkspaceAspect, LoggerAspect, InstallAspect];\n\n static async provider([cli, workspace, loggerMain, install]: [CLIMain, Workspace, LoggerMain, InstallMain]) {\n const logger = loggerMain.createLogger(EjectAspect.id);\n cli.register(new EjectCmd(workspace, logger, install));\n\n return new EjectMain();\n }\n}\n\nEjectAspect.addRuntime(EjectMain);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEO,MAAMA,SAAN,CAAgB;EAKA,aAARC,QAAQ,CAAC,CAACC,GAAD,EAAMC,SAAN,EAAiBC,UAAjB,EAA6BC,OAA7B,CAAD,EAAuF;IAC1G,MAAMC,MAAM,GAAGF,UAAU,CAACG,YAAX,CAAwBC,oBAAA,CAAYC,EAApC,CAAf;IACAP,GAAG,CAACQ,QAAJ,CAAa,KAAIC,oBAAJ,EAAaR,SAAb,EAAwBG,MAAxB,EAAgCD,OAAhC,CAAb;IAEA,OAAO,IAAIL,SAAJ,EAAP;EACD;;AAVoB;;;gCAAVA,S,aACMY,kB;gCADNZ,S,kBAGW,CAACa,gBAAD,EAAYC,oBAAZ,EAA6BC,sBAA7B,EAA2CC,wBAA3C,C;;AAUxBR,oBAAA,CAAYS,UAAZ,CAAuBjB,SAAvB"}
package/package.json CHANGED
@@ -1,19 +1,20 @@
1
1
  {
2
2
  "name": "@teambit/eject",
3
- "version": "0.0.316",
3
+ "version": "0.0.317",
4
4
  "homepage": "https://bit.dev/teambit/workspace/eject",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.workspace",
8
8
  "name": "eject",
9
- "version": "0.0.316"
9
+ "version": "0.0.317"
10
10
  },
11
11
  "dependencies": {
12
12
  "@babel/runtime": "7.12.18",
13
13
  "core-js": "^3.0.0",
14
14
  "@teambit/component-id": "0.0.417",
15
+ "@teambit/install": "0.0.1",
15
16
  "@teambit/logger": "0.0.657",
16
- "@teambit/workspace": "0.0.845",
17
+ "@teambit/workspace": "0.0.846",
17
18
  "@teambit/cli": "0.0.564",
18
19
  "@teambit/harmony": "0.3.3"
19
20
  },
@@ -1,5 +1,5 @@
1
- import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.workspace_eject@0.0.316/dist/eject.composition.js';
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.workspace_eject@0.0.316/dist/eject.docs.mdx';
1
+ import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.workspace_eject@0.0.317/dist/eject.composition.js';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.workspace_eject@0.0.317/dist/eject.docs.mdx';
3
3
 
4
4
  export const compositions = [compositions_0];
5
5
  export const overview = [overview_0];