@teambit/workspace 0.0.521 → 0.0.525
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.
- package/dist/on-component-events.d.ts +2 -1
- package/dist/watch/watcher.d.ts +2 -0
- package/dist/watch/watcher.js +5 -5
- package/dist/watch/watcher.js.map +1 -1
- package/dist/workspace.d.ts +2 -1
- package/dist/workspace.js +14 -5
- package/dist/workspace.js.map +1 -1
- package/dist/workspace.main.runtime.d.ts +2 -2
- package/on-component-events.ts +5 -1
- package/package-tar/teambit-workspace-0.0.525.tgz +0 -0
- package/package.json +51 -51
- package/watch/watcher.ts +8 -6
- package/workspace.ts +19 -6
- package/package-tar/teambit-workspace-0.0.521.tgz +0 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Component, ComponentID, AspectData } from '@teambit/component';
|
|
2
|
+
import { CompilationInitiator } from '@teambit/compiler';
|
|
2
3
|
export declare type SerializableResults = {
|
|
3
4
|
results: any;
|
|
4
5
|
toString: () => string;
|
|
5
6
|
};
|
|
6
|
-
export declare type OnComponentChange = (component: Component) => Promise<SerializableResults>;
|
|
7
|
+
export declare type OnComponentChange = (component: Component, initiator?: CompilationInitiator) => Promise<SerializableResults>;
|
|
7
8
|
export declare type OnComponentAdd = (component: Component) => Promise<SerializableResults>;
|
|
8
9
|
export declare type OnComponentRemove = (componentId: ComponentID) => Promise<SerializableResults>;
|
|
9
10
|
export declare type OnComponentEventResult = {
|
package/dist/watch/watcher.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { BitId } from '@teambit/legacy-bit-id';
|
|
|
5
5
|
import { Consumer } from '@teambit/legacy/dist/consumer';
|
|
6
6
|
import { ChildProcess } from 'child_process';
|
|
7
7
|
import { PathLinux } from '@teambit/legacy/dist/utils/path';
|
|
8
|
+
import { CompilationInitiator } from '@teambit/compiler';
|
|
8
9
|
import { Workspace } from '../workspace';
|
|
9
10
|
export declare type WatcherProcessData = {
|
|
10
11
|
watchProcess: ChildProcess;
|
|
@@ -29,6 +30,7 @@ export declare class Watcher {
|
|
|
29
30
|
watchAll(opts?: {
|
|
30
31
|
msgs: any;
|
|
31
32
|
verbose?: boolean;
|
|
33
|
+
initiator?: CompilationInitiator;
|
|
32
34
|
}): Promise<unknown>;
|
|
33
35
|
private handleChange;
|
|
34
36
|
private handleBitmapChanges;
|
package/dist/watch/watcher.js
CHANGED
|
@@ -188,7 +188,7 @@ class Watcher {
|
|
|
188
188
|
var _opts$msgs5;
|
|
189
189
|
|
|
190
190
|
const startTime = new Date().getTime();
|
|
191
|
-
const buildResults = (await this.handleChange(filePath)) || [];
|
|
191
|
+
const buildResults = (await this.handleChange(filePath, opts === null || opts === void 0 ? void 0 : opts.initiator)) || [];
|
|
192
192
|
const duration = new Date().getTime() - startTime;
|
|
193
193
|
opts === null || opts === void 0 ? void 0 : (_opts$msgs5 = opts.msgs) === null || _opts$msgs5 === void 0 ? void 0 : _opts$msgs5.onChange(filePath, buildResults, _verbose, duration);
|
|
194
194
|
}); // eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
@@ -217,7 +217,7 @@ class Watcher {
|
|
|
217
217
|
});
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
-
async handleChange(filePath) {
|
|
220
|
+
async handleChange(filePath, initiator) {
|
|
221
221
|
try {
|
|
222
222
|
if (filePath.endsWith(_constants().BIT_MAP)) {
|
|
223
223
|
const buildResults = await this.handleBitmapChanges();
|
|
@@ -233,7 +233,7 @@ class Watcher {
|
|
|
233
233
|
return this.completeWatch();
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
-
const buildResults = await this.executeWatchOperationsOnComponent(componentId);
|
|
236
|
+
const buildResults = await this.executeWatchOperationsOnComponent(componentId, true, initiator);
|
|
237
237
|
this.completeWatch();
|
|
238
238
|
return buildResults;
|
|
239
239
|
} catch (err) {
|
|
@@ -281,7 +281,7 @@ class Watcher {
|
|
|
281
281
|
await this.workspace.triggerOnComponentRemove(componentId);
|
|
282
282
|
}
|
|
283
283
|
|
|
284
|
-
async executeWatchOperationsOnComponent(componentId, isChange = true) {
|
|
284
|
+
async executeWatchOperationsOnComponent(componentId, isChange = true, initiator) {
|
|
285
285
|
if (this.isComponentWatchedExternally(componentId)) {
|
|
286
286
|
// update capsule, once done, it automatically triggers the external watcher
|
|
287
287
|
await this.workspace.get(componentId);
|
|
@@ -303,7 +303,7 @@ class Watcher {
|
|
|
303
303
|
let buildResults;
|
|
304
304
|
|
|
305
305
|
try {
|
|
306
|
-
buildResults = isChange ? await this.workspace.triggerOnComponentChange(componentId) : await this.workspace.triggerOnComponentAdd(componentId);
|
|
306
|
+
buildResults = isChange ? await this.workspace.triggerOnComponentChange(componentId, initiator) : await this.workspace.triggerOnComponentAdd(componentId);
|
|
307
307
|
} catch (err) {
|
|
308
308
|
// do not exist the watch process on errors, just print them
|
|
309
309
|
_logger().default.console(err.message || err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["watcher.ts"],"names":["Watcher","constructor","workspace","pubsub","trackDirs","verbose","multipleWatchers","watch","opts","Boolean","watchAll","msgs","consumer","_verbose","createWatcher","watcher","fsWatcher","onStart","Promise","resolve","reject","process","env","BIT_LOG","onAll","on","onReady","filePath","startTime","Date","getTime","buildResults","handleChange","duration","onChange","onAdd","p","onUnlink","err","onError","endsWith","BIT_MAP","handleBitmapChanges","completeWatch","componentId","getComponentIdAndClearItsCache","logger","debug","executeWatchOperationsOnComponent","msg","error","console","message","previewsTrackDirs","_reloadConsumer","setTrackDirs","newDirs","Object","keys","removedDirs","results","length","add","addResults","dir","push","flat","unwatch","executeWatchOperationsOnRemove","chalk","bold","toString","pub","WorkspaceAspect","id","creatOnComponentRemovedEvent","triggerOnComponentRemove","isChange","isComponentWatchedExternally","get","idStr","creatOnComponentChangeEvent","creatOnComponentAddEvent","triggerOnComponentChange","triggerOnComponentAdd","OnComponentRemovedEvent","now","hook","OnComponentChangeEvent","OnComponentAddEvent","loader","stop","watcherData","find","m","componentIds","isEqual","_legacy","compilerId","relativeFile","getPathRelativeToConsumer","trackDir","findTrackDirByFilePathRecursively","clearComponentCache","component","componentMap","state","_consumer","getFilesRelativeToConsumer","parentDir","pathsToWatch","getPathsToWatch","chokidar","ignoreInitial","ignored","path","includes","sep","persistent","useFsEvents","componentsFromBitMap","bitMap","getAllComponents","COMPONENT_ORIGINS","AUTHORED","IMPORTED","all","map","bitId","getTrackDir","Error","resolveComponentId","paths","pathsAbsolute","toAbsolutePath"],"mappings":"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","sourcesContent":["import { PubsubMain } from '@teambit/pubsub';\nimport { dirname, sep } from 'path';\nimport { difference } from 'lodash';\nimport { ComponentID } from '@teambit/component';\nimport { BitId } from '@teambit/legacy-bit-id';\nimport loader from '@teambit/legacy/dist/cli/loader';\nimport { BIT_MAP, COMPONENT_ORIGINS } from '@teambit/legacy/dist/constants';\nimport { Consumer } from '@teambit/legacy/dist/consumer';\nimport logger from '@teambit/legacy/dist/logger/logger';\nimport { pathNormalizeToLinux } from '@teambit/legacy/dist/utils';\nimport mapSeries from 'p-map-series';\nimport chalk from 'chalk';\nimport { ChildProcess } from 'child_process';\nimport chokidar, { FSWatcher } from 'chokidar';\nimport ComponentMap from '@teambit/legacy/dist/consumer/bit-map/component-map';\nimport { PathLinux, PathOsBasedAbsolute } from '@teambit/legacy/dist/utils/path';\nimport { WorkspaceAspect } from '../';\nimport { OnComponentChangeEvent, OnComponentAddEvent, OnComponentRemovedEvent } from '../events';\nimport { Workspace } from '../workspace';\nimport { OnComponentEventResult } from '../on-component-events';\n\nexport type WatcherProcessData = { watchProcess: ChildProcess; compilerId: BitId; componentIds: BitId[] };\n\nexport class Watcher {\n private fsWatcher: FSWatcher;\n constructor(\n private workspace: Workspace,\n private pubsub: PubsubMain,\n private trackDirs: { [dir: PathLinux]: ComponentID } = {},\n private verbose = false,\n private multipleWatchers: WatcherProcessData[] = []\n ) {}\n\n async watch(opts: { msgs; verbose?: boolean }) {\n this.verbose = Boolean(opts.verbose);\n await this.watchAll({ msgs: opts.msgs, verbose: this.verbose });\n }\n\n get consumer(): Consumer {\n return this.workspace.consumer;\n }\n\n async watchAll(opts?: { msgs; verbose?: boolean }) {\n // TODO: run build in the beginning of process (it's work like this in other envs)\n const _verbose = opts?.verbose || false;\n await this.createWatcher();\n const watcher = this.fsWatcher;\n opts?.msgs?.onStart(this.workspace);\n\n return new Promise((resolve, reject) => {\n // prefix your command with \"BIT_LOG=*\" to see all watch events\n if (process.env.BIT_LOG) {\n if (opts?.msgs?.onAll) watcher.on('all', opts?.msgs?.onAll);\n }\n watcher.on('ready', () => {\n opts?.msgs?.onReady(this.workspace, this.trackDirs, _verbose);\n });\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n watcher.on('change', async (filePath) => {\n const startTime = new Date().getTime();\n const buildResults = (await this.handleChange(filePath)) || [];\n const duration = new Date().getTime() - startTime;\n opts?.msgs?.onChange(filePath, buildResults, _verbose, duration);\n });\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n watcher.on('add', async (filePath) => {\n const startTime = new Date().getTime();\n const buildResults = (await this.handleChange(filePath)) || [];\n const duration = new Date().getTime() - startTime;\n opts?.msgs?.onAdd(filePath, buildResults, _verbose, duration);\n });\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n watcher.on('unlink', async (p) => {\n opts?.msgs?.onUnlink(p);\n await this.handleChange(p);\n });\n watcher.on('error', (err) => {\n opts?.msgs?.onError(err);\n reject(err);\n });\n });\n }\n\n private async handleChange(filePath: string): Promise<OnComponentEventResult[]> {\n try {\n if (filePath.endsWith(BIT_MAP)) {\n const buildResults = await this.handleBitmapChanges();\n this.completeWatch();\n return buildResults;\n }\n const componentId = await this.getComponentIdAndClearItsCache(filePath);\n if (!componentId) {\n logger.debug(`file ${filePath} is not part of any component, ignoring it`);\n return this.completeWatch();\n }\n\n const buildResults = await this.executeWatchOperationsOnComponent(componentId);\n this.completeWatch();\n return buildResults;\n } catch (err: any) {\n const msg = `watcher found an error while handling ${filePath}`;\n logger.error(msg, err);\n logger.console(`${msg}, ${err.message}`);\n return [];\n }\n }\n\n /**\n * if .bitmap changed, it's possible that a new component has been added. trigger onComponentAdd.\n */\n private async handleBitmapChanges(): Promise<OnComponentEventResult[]> {\n const previewsTrackDirs = { ...this.trackDirs };\n await this.workspace._reloadConsumer();\n await this.setTrackDirs();\n const newDirs: string[] = difference(Object.keys(this.trackDirs), Object.keys(previewsTrackDirs));\n const removedDirs: string[] = difference(Object.keys(previewsTrackDirs), Object.keys(this.trackDirs));\n const results: OnComponentEventResult[] = [];\n if (newDirs.length) {\n this.fsWatcher.add(newDirs);\n const addResults = await mapSeries(newDirs, (dir) =>\n this.executeWatchOperationsOnComponent(this.trackDirs[dir], false)\n );\n results.push(...addResults.flat());\n }\n if (removedDirs.length) {\n await this.fsWatcher.unwatch(removedDirs);\n await mapSeries(removedDirs, (dir) => this.executeWatchOperationsOnRemove(previewsTrackDirs[dir]));\n }\n return results;\n }\n\n private async executeWatchOperationsOnRemove(componentId: ComponentID) {\n logger.debug(`running OnComponentRemove hook for ${chalk.bold(componentId.toString())}`);\n this.pubsub.pub(WorkspaceAspect.id, this.creatOnComponentRemovedEvent(componentId.toString()));\n await this.workspace.triggerOnComponentRemove(componentId);\n }\n\n private async executeWatchOperationsOnComponent(\n componentId: ComponentID,\n isChange = true\n ): Promise<OnComponentEventResult[]> {\n if (this.isComponentWatchedExternally(componentId)) {\n // update capsule, once done, it automatically triggers the external watcher\n await this.workspace.get(componentId);\n return [];\n }\n const idStr = componentId.toString();\n\n if (isChange) {\n logger.debug(`running OnComponentChange hook for ${chalk.bold(idStr)}`);\n this.pubsub.pub(WorkspaceAspect.id, this.creatOnComponentChangeEvent(idStr, 'OnComponentChange'));\n } else {\n logger.debug(`running OnComponentAdd hook for ${chalk.bold(idStr)}`);\n this.pubsub.pub(WorkspaceAspect.id, this.creatOnComponentAddEvent(idStr, 'OnComponentAdd'));\n }\n\n let buildResults: OnComponentEventResult[];\n try {\n buildResults = isChange\n ? await this.workspace.triggerOnComponentChange(componentId)\n : await this.workspace.triggerOnComponentAdd(componentId);\n } catch (err: any) {\n // do not exist the watch process on errors, just print them\n logger.console(err.message || err);\n return [];\n }\n if (buildResults && buildResults.length) {\n return buildResults;\n }\n logger.console(`${idStr} doesn't have a compiler, nothing to build`);\n return [];\n }\n\n private creatOnComponentRemovedEvent(idStr) {\n return new OnComponentRemovedEvent(Date.now(), idStr);\n }\n\n private creatOnComponentChangeEvent(idStr, hook) {\n return new OnComponentChangeEvent(Date.now(), idStr, hook);\n }\n\n private creatOnComponentAddEvent(idStr, hook) {\n return new OnComponentAddEvent(Date.now(), idStr, hook);\n }\n\n private completeWatch() {\n loader.stop();\n return [];\n }\n\n private isComponentWatchedExternally(componentId: ComponentID) {\n const watcherData = this.multipleWatchers.find((m) => m.componentIds.find((id) => id.isEqual(componentId._legacy)));\n if (watcherData) {\n logger.debug(`${componentId.toString()} is watched by ${watcherData.compilerId.toString()}`);\n return true;\n }\n return false;\n }\n\n /**\n * if a file was added/remove, once the component is loaded, it changes .bitmap, and then the\n * entire cache is invalidated and the consumer is reloaded.\n * when a file just changed, no need to reload the consumer, it is enough to just delete the\n * component from the cache (both, workspace and consumer)\n */\n private async getComponentIdAndClearItsCache(filePath: string): Promise<ComponentID | null> {\n const relativeFile = pathNormalizeToLinux(this.consumer.getPathRelativeToConsumer(filePath));\n const trackDir = this.findTrackDirByFilePathRecursively(relativeFile);\n if (!trackDir) {\n // the file is not part of any component. If it was a new component, or a new file of\n // existing component, then, handleBitmapChanges() should deal with it.\n return null;\n }\n const componentId = this.trackDirs[trackDir];\n this.workspace.clearComponentCache(componentId);\n const component = await this.workspace.get(componentId);\n const componentMap: ComponentMap = component.state._consumer.componentMap;\n if (componentMap.getFilesRelativeToConsumer().find((p) => p === relativeFile)) {\n return componentId;\n }\n // the file is inside the component dir but it's ignored. (e.g. it's in IGNORE_LIST)\n return null;\n }\n\n private findTrackDirByFilePathRecursively(filePath: string): string | null {\n if (this.trackDirs[filePath]) return filePath;\n const parentDir = dirname(filePath);\n if (parentDir === filePath) return null;\n return this.findTrackDirByFilePathRecursively(parentDir);\n }\n\n private async createWatcher() {\n const pathsToWatch = await this.getPathsToWatch();\n this.fsWatcher = chokidar.watch(pathsToWatch, {\n ignoreInitial: true,\n // Using the function way since the regular way not working as expected\n // It might be solved when upgrading to chokidar > 3.0.0\n // See:\n // https://github.com/paulmillr/chokidar/issues/773\n // https://github.com/paulmillr/chokidar/issues/492\n // https://github.com/paulmillr/chokidar/issues/724\n ignored: (path) => {\n // Ignore package.json temporarily since it cerates endless loop since it's re-written after each build\n if (path.includes(`${sep}node_modules${sep}`) || path.includes(`${sep}package.json`)) {\n return true;\n }\n return false;\n },\n persistent: true,\n useFsEvents: false,\n });\n }\n\n async setTrackDirs() {\n this.trackDirs = {};\n const componentsFromBitMap = this.consumer.bitMap.getAllComponents([\n COMPONENT_ORIGINS.AUTHORED,\n COMPONENT_ORIGINS.IMPORTED,\n ]);\n await Promise.all(\n componentsFromBitMap.map(async (componentMap) => {\n const bitId = componentMap.id;\n const trackDir = componentMap.getTrackDir();\n if (!trackDir) throw new Error(`${bitId.toString()} has no rootDir, which is invalid in Harmony`);\n const componentId = await this.workspace.resolveComponentId(bitId);\n this.trackDirs[trackDir] = componentId;\n })\n );\n }\n\n private async getPathsToWatch(): Promise<PathOsBasedAbsolute[]> {\n await this.setTrackDirs();\n const paths = [...Object.keys(this.trackDirs), BIT_MAP];\n const pathsAbsolute = paths.map((dir) => this.consumer.toAbsolutePath(dir));\n return pathsAbsolute;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["watcher.ts"],"names":["Watcher","constructor","workspace","pubsub","trackDirs","verbose","multipleWatchers","watch","opts","Boolean","watchAll","msgs","consumer","_verbose","createWatcher","watcher","fsWatcher","onStart","Promise","resolve","reject","process","env","BIT_LOG","onAll","on","onReady","filePath","startTime","Date","getTime","buildResults","handleChange","initiator","duration","onChange","onAdd","p","onUnlink","err","onError","endsWith","BIT_MAP","handleBitmapChanges","completeWatch","componentId","getComponentIdAndClearItsCache","logger","debug","executeWatchOperationsOnComponent","msg","error","console","message","previewsTrackDirs","_reloadConsumer","setTrackDirs","newDirs","Object","keys","removedDirs","results","length","add","addResults","dir","push","flat","unwatch","executeWatchOperationsOnRemove","chalk","bold","toString","pub","WorkspaceAspect","id","creatOnComponentRemovedEvent","triggerOnComponentRemove","isChange","isComponentWatchedExternally","get","idStr","creatOnComponentChangeEvent","creatOnComponentAddEvent","triggerOnComponentChange","triggerOnComponentAdd","OnComponentRemovedEvent","now","hook","OnComponentChangeEvent","OnComponentAddEvent","loader","stop","watcherData","find","m","componentIds","isEqual","_legacy","compilerId","relativeFile","getPathRelativeToConsumer","trackDir","findTrackDirByFilePathRecursively","clearComponentCache","component","componentMap","state","_consumer","getFilesRelativeToConsumer","parentDir","pathsToWatch","getPathsToWatch","chokidar","ignoreInitial","ignored","path","includes","sep","persistent","useFsEvents","componentsFromBitMap","bitMap","getAllComponents","COMPONENT_ORIGINS","AUTHORED","IMPORTED","all","map","bitId","getTrackDir","Error","resolveComponentId","paths","pathsAbsolute","toAbsolutePath"],"mappings":"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","sourcesContent":["import { PubsubMain } from '@teambit/pubsub';\nimport { dirname, sep } from 'path';\nimport { difference } from 'lodash';\nimport { ComponentID } from '@teambit/component';\nimport { BitId } from '@teambit/legacy-bit-id';\nimport loader from '@teambit/legacy/dist/cli/loader';\nimport { BIT_MAP, COMPONENT_ORIGINS } from '@teambit/legacy/dist/constants';\nimport { Consumer } from '@teambit/legacy/dist/consumer';\nimport logger from '@teambit/legacy/dist/logger/logger';\nimport { pathNormalizeToLinux } from '@teambit/legacy/dist/utils';\nimport mapSeries from 'p-map-series';\nimport chalk from 'chalk';\nimport { ChildProcess } from 'child_process';\nimport chokidar, { FSWatcher } from 'chokidar';\nimport ComponentMap from '@teambit/legacy/dist/consumer/bit-map/component-map';\nimport { PathLinux, PathOsBasedAbsolute } from '@teambit/legacy/dist/utils/path';\nimport { CompilationInitiator } from '@teambit/compiler';\nimport { WorkspaceAspect } from '../';\nimport { OnComponentChangeEvent, OnComponentAddEvent, OnComponentRemovedEvent } from '../events';\nimport { Workspace } from '../workspace';\nimport { OnComponentEventResult } from '../on-component-events';\n\nexport type WatcherProcessData = { watchProcess: ChildProcess; compilerId: BitId; componentIds: BitId[] };\n\nexport class Watcher {\n private fsWatcher: FSWatcher;\n constructor(\n private workspace: Workspace,\n private pubsub: PubsubMain,\n private trackDirs: { [dir: PathLinux]: ComponentID } = {},\n private verbose = false,\n private multipleWatchers: WatcherProcessData[] = []\n ) {}\n\n async watch(opts: { msgs; verbose?: boolean }) {\n this.verbose = Boolean(opts.verbose);\n await this.watchAll({ msgs: opts.msgs, verbose: this.verbose });\n }\n\n get consumer(): Consumer {\n return this.workspace.consumer;\n }\n\n async watchAll(opts?: { msgs; verbose?: boolean; initiator?: CompilationInitiator }) {\n // TODO: run build in the beginning of process (it's work like this in other envs)\n const _verbose = opts?.verbose || false;\n await this.createWatcher();\n const watcher = this.fsWatcher;\n opts?.msgs?.onStart(this.workspace);\n\n return new Promise((resolve, reject) => {\n // prefix your command with \"BIT_LOG=*\" to see all watch events\n if (process.env.BIT_LOG) {\n if (opts?.msgs?.onAll) watcher.on('all', opts?.msgs?.onAll);\n }\n watcher.on('ready', () => {\n opts?.msgs?.onReady(this.workspace, this.trackDirs, _verbose);\n });\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n watcher.on('change', async (filePath) => {\n const startTime = new Date().getTime();\n const buildResults = (await this.handleChange(filePath, opts?.initiator)) || [];\n const duration = new Date().getTime() - startTime;\n opts?.msgs?.onChange(filePath, buildResults, _verbose, duration);\n });\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n watcher.on('add', async (filePath) => {\n const startTime = new Date().getTime();\n const buildResults = (await this.handleChange(filePath)) || [];\n const duration = new Date().getTime() - startTime;\n opts?.msgs?.onAdd(filePath, buildResults, _verbose, duration);\n });\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n watcher.on('unlink', async (p) => {\n opts?.msgs?.onUnlink(p);\n await this.handleChange(p);\n });\n watcher.on('error', (err) => {\n opts?.msgs?.onError(err);\n reject(err);\n });\n });\n }\n\n private async handleChange(filePath: string, initiator?: CompilationInitiator): Promise<OnComponentEventResult[]> {\n try {\n if (filePath.endsWith(BIT_MAP)) {\n const buildResults = await this.handleBitmapChanges();\n this.completeWatch();\n return buildResults;\n }\n const componentId = await this.getComponentIdAndClearItsCache(filePath);\n if (!componentId) {\n logger.debug(`file ${filePath} is not part of any component, ignoring it`);\n return this.completeWatch();\n }\n\n const buildResults = await this.executeWatchOperationsOnComponent(componentId, true, initiator);\n this.completeWatch();\n return buildResults;\n } catch (err: any) {\n const msg = `watcher found an error while handling ${filePath}`;\n logger.error(msg, err);\n logger.console(`${msg}, ${err.message}`);\n return [];\n }\n }\n\n /**\n * if .bitmap changed, it's possible that a new component has been added. trigger onComponentAdd.\n */\n private async handleBitmapChanges(): Promise<OnComponentEventResult[]> {\n const previewsTrackDirs = { ...this.trackDirs };\n await this.workspace._reloadConsumer();\n await this.setTrackDirs();\n const newDirs: string[] = difference(Object.keys(this.trackDirs), Object.keys(previewsTrackDirs));\n const removedDirs: string[] = difference(Object.keys(previewsTrackDirs), Object.keys(this.trackDirs));\n const results: OnComponentEventResult[] = [];\n if (newDirs.length) {\n this.fsWatcher.add(newDirs);\n const addResults = await mapSeries(newDirs, (dir) =>\n this.executeWatchOperationsOnComponent(this.trackDirs[dir], false)\n );\n results.push(...addResults.flat());\n }\n if (removedDirs.length) {\n await this.fsWatcher.unwatch(removedDirs);\n await mapSeries(removedDirs, (dir) => this.executeWatchOperationsOnRemove(previewsTrackDirs[dir]));\n }\n return results;\n }\n\n private async executeWatchOperationsOnRemove(componentId: ComponentID) {\n logger.debug(`running OnComponentRemove hook for ${chalk.bold(componentId.toString())}`);\n this.pubsub.pub(WorkspaceAspect.id, this.creatOnComponentRemovedEvent(componentId.toString()));\n await this.workspace.triggerOnComponentRemove(componentId);\n }\n\n private async executeWatchOperationsOnComponent(\n componentId: ComponentID,\n isChange = true,\n initiator?: CompilationInitiator\n ): Promise<OnComponentEventResult[]> {\n if (this.isComponentWatchedExternally(componentId)) {\n // update capsule, once done, it automatically triggers the external watcher\n await this.workspace.get(componentId);\n return [];\n }\n const idStr = componentId.toString();\n\n if (isChange) {\n logger.debug(`running OnComponentChange hook for ${chalk.bold(idStr)}`);\n this.pubsub.pub(WorkspaceAspect.id, this.creatOnComponentChangeEvent(idStr, 'OnComponentChange'));\n } else {\n logger.debug(`running OnComponentAdd hook for ${chalk.bold(idStr)}`);\n this.pubsub.pub(WorkspaceAspect.id, this.creatOnComponentAddEvent(idStr, 'OnComponentAdd'));\n }\n\n let buildResults: OnComponentEventResult[];\n try {\n buildResults = isChange\n ? await this.workspace.triggerOnComponentChange(componentId, initiator)\n : await this.workspace.triggerOnComponentAdd(componentId);\n } catch (err: any) {\n // do not exist the watch process on errors, just print them\n logger.console(err.message || err);\n return [];\n }\n if (buildResults && buildResults.length) {\n return buildResults;\n }\n logger.console(`${idStr} doesn't have a compiler, nothing to build`);\n return [];\n }\n\n private creatOnComponentRemovedEvent(idStr) {\n return new OnComponentRemovedEvent(Date.now(), idStr);\n }\n\n private creatOnComponentChangeEvent(idStr, hook) {\n return new OnComponentChangeEvent(Date.now(), idStr, hook);\n }\n\n private creatOnComponentAddEvent(idStr, hook) {\n return new OnComponentAddEvent(Date.now(), idStr, hook);\n }\n\n private completeWatch() {\n loader.stop();\n return [];\n }\n\n private isComponentWatchedExternally(componentId: ComponentID) {\n const watcherData = this.multipleWatchers.find((m) => m.componentIds.find((id) => id.isEqual(componentId._legacy)));\n if (watcherData) {\n logger.debug(`${componentId.toString()} is watched by ${watcherData.compilerId.toString()}`);\n return true;\n }\n return false;\n }\n\n /**\n * if a file was added/remove, once the component is loaded, it changes .bitmap, and then the\n * entire cache is invalidated and the consumer is reloaded.\n * when a file just changed, no need to reload the consumer, it is enough to just delete the\n * component from the cache (both, workspace and consumer)\n */\n private async getComponentIdAndClearItsCache(filePath: string): Promise<ComponentID | null> {\n const relativeFile = pathNormalizeToLinux(this.consumer.getPathRelativeToConsumer(filePath));\n const trackDir = this.findTrackDirByFilePathRecursively(relativeFile);\n if (!trackDir) {\n // the file is not part of any component. If it was a new component, or a new file of\n // existing component, then, handleBitmapChanges() should deal with it.\n return null;\n }\n const componentId = this.trackDirs[trackDir];\n this.workspace.clearComponentCache(componentId);\n const component = await this.workspace.get(componentId);\n const componentMap: ComponentMap = component.state._consumer.componentMap;\n if (componentMap.getFilesRelativeToConsumer().find((p) => p === relativeFile)) {\n return componentId;\n }\n // the file is inside the component dir but it's ignored. (e.g. it's in IGNORE_LIST)\n return null;\n }\n\n private findTrackDirByFilePathRecursively(filePath: string): string | null {\n if (this.trackDirs[filePath]) return filePath;\n const parentDir = dirname(filePath);\n if (parentDir === filePath) return null;\n return this.findTrackDirByFilePathRecursively(parentDir);\n }\n\n private async createWatcher() {\n const pathsToWatch = await this.getPathsToWatch();\n this.fsWatcher = chokidar.watch(pathsToWatch, {\n ignoreInitial: true,\n // Using the function way since the regular way not working as expected\n // It might be solved when upgrading to chokidar > 3.0.0\n // See:\n // https://github.com/paulmillr/chokidar/issues/773\n // https://github.com/paulmillr/chokidar/issues/492\n // https://github.com/paulmillr/chokidar/issues/724\n ignored: (path) => {\n // Ignore package.json temporarily since it cerates endless loop since it's re-written after each build\n if (path.includes(`${sep}node_modules${sep}`) || path.includes(`${sep}package.json`)) {\n return true;\n }\n return false;\n },\n persistent: true,\n useFsEvents: false,\n });\n }\n\n async setTrackDirs() {\n this.trackDirs = {};\n const componentsFromBitMap = this.consumer.bitMap.getAllComponents([\n COMPONENT_ORIGINS.AUTHORED,\n COMPONENT_ORIGINS.IMPORTED,\n ]);\n await Promise.all(\n componentsFromBitMap.map(async (componentMap) => {\n const bitId = componentMap.id;\n const trackDir = componentMap.getTrackDir();\n if (!trackDir) throw new Error(`${bitId.toString()} has no rootDir, which is invalid in Harmony`);\n const componentId = await this.workspace.resolveComponentId(bitId);\n this.trackDirs[trackDir] = componentId;\n })\n );\n }\n\n private async getPathsToWatch(): Promise<PathOsBasedAbsolute[]> {\n await this.setTrackDirs();\n const paths = [...Object.keys(this.trackDirs), BIT_MAP];\n const pathsAbsolute = paths.map((dir) => this.consumer.toAbsolutePath(dir));\n return pathsAbsolute;\n }\n}\n"]}
|
package/dist/workspace.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ import { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extensio
|
|
|
24
24
|
import { PathOsBased, PathOsBasedRelative, PathOsBasedAbsolute } from '@teambit/legacy/dist/utils/path';
|
|
25
25
|
import ConsumerComponent from '@teambit/legacy/dist/consumer/component';
|
|
26
26
|
import type { ComponentLog } from '@teambit/legacy/dist/scope/models/model-component';
|
|
27
|
+
import { CompilationInitiator } from '@teambit/compiler';
|
|
27
28
|
import { OnComponentAdd, OnComponentChange, OnComponentEventResult, OnComponentLoad, OnComponentRemove } from './on-component-events';
|
|
28
29
|
import { WorkspaceExtConfig } from './types';
|
|
29
30
|
import { Watcher } from './watch/watcher';
|
|
@@ -121,7 +122,7 @@ export declare class Workspace implements ComponentFactory {
|
|
|
121
122
|
getEnvSystemDescriptor(component: Component): Promise<AspectData>;
|
|
122
123
|
clearCache(): void;
|
|
123
124
|
clearComponentCache(id: ComponentID): void;
|
|
124
|
-
triggerOnComponentChange(id: ComponentID): Promise<OnComponentEventResult[]>;
|
|
125
|
+
triggerOnComponentChange(id: ComponentID, initiator?: CompilationInitiator): Promise<OnComponentEventResult[]>;
|
|
125
126
|
triggerOnComponentAdd(id: ComponentID): Promise<OnComponentEventResult[]>;
|
|
126
127
|
triggerOnComponentRemove(id: ComponentID): Promise<OnComponentEventResult[]>;
|
|
127
128
|
getState(id: ComponentID, hash: string): Promise<import("@teambit/component").State>;
|
package/dist/workspace.js
CHANGED
|
@@ -717,7 +717,7 @@ class Workspace {
|
|
|
717
717
|
this.componentList = new (_componentsList().default)(this.consumer);
|
|
718
718
|
}
|
|
719
719
|
|
|
720
|
-
async triggerOnComponentChange(id) {
|
|
720
|
+
async triggerOnComponentChange(id, initiator) {
|
|
721
721
|
const component = await this.get(id); // if a new file was added, upon component-load, its .bitmap entry is updated to include the
|
|
722
722
|
// new file. write these changes to the .bitmap file so then other processes have access to
|
|
723
723
|
// this new file. If the .bitmap wasn't change, it won't do anything.
|
|
@@ -727,7 +727,7 @@ class Workspace {
|
|
|
727
727
|
|
|
728
728
|
const results = [];
|
|
729
729
|
await (0, _pMapSeries().default)(onChangeEntries, async ([extension, onChangeFunc]) => {
|
|
730
|
-
const onChangeResult = await onChangeFunc(component);
|
|
730
|
+
const onChangeResult = await onChangeFunc(component, initiator);
|
|
731
731
|
results.push({
|
|
732
732
|
extensionId: extension,
|
|
733
733
|
results: onChangeResult
|
|
@@ -1241,9 +1241,12 @@ class Workspace {
|
|
|
1241
1241
|
} = await this.groupComponentsByWorkspaceAndScope(aspects); // load the scope first because we might need it for custom envs that extend external aspects
|
|
1242
1242
|
|
|
1243
1243
|
const scopeIds = scopeComps.map(aspect => aspect.id.toString());
|
|
1244
|
-
await this.scope.loadAspects(scopeIds, throwOnError);
|
|
1245
1244
|
const workspaceAspects = await this.requireComponents(workspaceComps);
|
|
1246
|
-
await this.aspectLoader.
|
|
1245
|
+
const workspaceManifests = await this.aspectLoader.getManifestsFromRequireableExtensions(workspaceAspects, throwOnError);
|
|
1246
|
+
const manifestsIds = workspaceManifests.map(m => m.id);
|
|
1247
|
+
const scopeManifests = await this.scope.getManifestsGraphRecursively(scopeIds, (0, _lodash().compact)(manifestsIds), throwOnError);
|
|
1248
|
+
const allManifests = [...scopeManifests, ...workspaceManifests];
|
|
1249
|
+
await this.aspectLoader.loadExtensionsByManifests(allManifests, throwOnError);
|
|
1247
1250
|
}
|
|
1248
1251
|
|
|
1249
1252
|
async resolveAspects(runtimeName, componentIds) {
|
|
@@ -1390,7 +1393,13 @@ class Workspace {
|
|
|
1390
1393
|
}
|
|
1391
1394
|
|
|
1392
1395
|
const requireFunc = async () => {
|
|
1393
|
-
|
|
1396
|
+
const plugins = this.aspectLoader.getPlugins(component, localPath);
|
|
1397
|
+
|
|
1398
|
+
if (plugins.has()) {
|
|
1399
|
+
return plugins.load(_cli().MainRuntime.name);
|
|
1400
|
+
} // eslint-disable-next-line global-require, import/no-dynamic-require
|
|
1401
|
+
|
|
1402
|
+
|
|
1394
1403
|
const aspect = require(localPath); // require aspect runtimes
|
|
1395
1404
|
|
|
1396
1405
|
|
package/dist/workspace.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["workspace.ts"],"names":["ComponentAdded","ComponentChanged","ComponentRemoved","DEFAULT_VENDOR_DIR","Workspace","constructor","pubsub","config","consumer","scope","componentAspect","isolator","dependencyResolver","variants","aspectLoader","logger","componentList","ComponentsList","harmony","onComponentLoadSlot","onComponentChangeSlot","envs","onComponentAddSlot","onComponentRemoveSlot","graphql","Watcher","owner","defaultOwner","componentLoader","WorkspaceComponentLoader","validateConfig","defaultScope","isLegacy","Error","InvalidScopeName","path","getPath","modulesPath","join","onComponentLoad","loadFn","register","registerOnComponentChange","onComponentChangeFunc","registerOnComponentAdd","onComponentAddFunc","registerOnComponentRemove","onComponentRemoveFunc","name","tokenizedPath","split","length","icon","hasModifiedDependencies","component","componentsList","listAutoTagPendingComponents","isAutoTag","find","consumerComponent","id","isEqualWithoutVersion","_legacy","getComponentIssues","state","_consumer","issues","getComponentStatus","status","getComponentStatusById","ComponentStatus","fromLegacy","isOutdated","list","filter","legacyIds","bitMap","getAllIdsAvailableOnLane","ids","resolveMultipleComponentIds","getMany","limit","offset","listInvalid","getInvalid","listIds","bitmapIdsFromCurrentLane","hasId","componentId","found","isEqual","hasName","Boolean","fullName","hasIdNested","includeCache","modified","listModifiedComponents","componentIds","map","ComponentID","newComponents","listNewComponents","getAllComponentIds","bitIds","getAuthoredAndImportedBitIds","getNewAndModifiedIds","listTagPendingComponents","getLogs","getLegacyGraph","legacyGraph","loadCapsules","components","load","comp","capsule","network","isolateComponents","c","resolvedComponents","graphCapsules","getCapsule","toString","ResolvedComponent","createAspectList","extensionDataList","entiresP","entry","AspectEntry","resolveComponentId","entries","Promise","all","createAspectListFromEntries","get","forCapsule","legacyComponent","useCache","storeInCache","debug","getEnvSystemDescriptor","env","calculateEnv","__getDescriptor","systemDescriptor","services","isEnvRegistered","getServices","getDescriptor","type","description","toObject","clearCache","clearComponentCache","clearOneComponentCache","triggerOnComponentChange","writeBitMap","onChangeEntries","toArray","results","extension","onChangeFunc","onChangeResult","push","extensionId","publish","componentChanged","triggerOnComponentAdd","onAddEntries","onAddFunc","onAddResult","componentAdded","triggerOnComponentRemove","onRemoveEntries","onRemoveFunc","onRemoveResult","componentRemoved","getState","hash","getSnap","getCurrentLaneId","getDefaultExtensions","extensions","ExtensionDataList","fromConfigObject","ejectConfig","options","aspects","resolveScopeAspectListIds","componentDir","ignoreVersion","componentConfigFile","ComponentConfigFile","propagate","write","override","configPath","composePath","aspectListFromScope","resolvedList","pmap","newId","newEntry","legacy","byPattern","pattern","finalPattern","targetIds","spec","toStringWithoutVersion","match","getManyByLegacy","undefined","importAndGetMany","import","add","componentPaths","main","addComponent","AddComponents","addResults","componentFsCache","track","trackData","rootDir","componentName","mainFile","result","addedComponent","addedComponents","files","f","relativePath","warnings","rootPath","filesystem","file","pathToWrite","fs","outputFile","contents","bitMapOptions","relative","componentDirFromLegacyId","bitId","componentMap","getComponent","relativeComponentDir","getComponentDir","NoComponentDir","componentDirToAbsolute","componentDefaultScope","componentDefaultScopeFromComponentDirAndName","componentConfigFileFromComponentDirAndName","componentDefaultScopeFromComponentDirAndNameWithoutConfigFile","variantConfig","byRootDirAndName","isVendor","isVendorComponentByComponentDir","componentExtensions","componentFromScope","configFileExtensions","variantsExtensions","wsDefaultExtensions","mergeFromScope","scopeExtensions","toLegacy","extensionsToMerge","continuePropagating","isDefaultExtension","findExtension","promises","resolveExtensionListIds","mergedExtensions","mergeConfigs","filterRemovedExtensions","selfInMergedExtensions","toStringWithoutScopeAndVersion","remove","extensionList","vendorDir","vendor","directory","absComponentDir","defaultScopeFromVariantsOrWs","bind","getGraphWithoutCore","coreAspectsStringIds","getCoreAspectIds","coreAspectsComponentIds","BitId","parse","coreAspectsBitIds","BitIds","fromArray","changeScope","ignoredIds","concat","loadAspects","throwOnError","notLoadedIds","isAspectLoaded","idsWithoutCore","importAndGetAspects","graph","allIdsP","nodes","allIds","allComponents","data","EnvsAspect","includes","err","IncorrectEnvAspect","DEFAULT_ENV","error","message","workspaceComps","scopeComps","groupComponentsByWorkspaceAndScope","scopeIds","aspect","workspaceAspects","requireComponents","loadRequireableExtensions","resolveAspects","runtimeName","missingPaths","stringIds","idsToResolve","extensionsIds","coreAspectsIds","userAspectsIds","componentIdsToResolve","workspaceIds","groupIdsByWorkspaceAndScope","wsComponents","aspectDefs","localPath","getComponentPackagePath","isExist","pathExists","aspectPath","runtimePath","getRuntimePath","scopeAspectDefs","coreAspectDefs","coreId","rawDef","loadDefinition","coreAspect","allDefs","uniqDefs","def","defs","existOnWorkspace","loadExtensions","extensionsIdsP","extensionEntry","stringId","loadedExtensions","extensionsToLoad","getTempDir","PREFIX","cacheDir","existsSync","mkdirSync","recursive","resolveP","requireFunc","require","MainRuntime","RequireableComponent","resolved","getComponentsDirectory","ComponentMap","as","install","packages","lifecycleType","DependencyTypeNotSupportedInPolicy","resolver","getVersionResolver","resolvedPackagesP","packageName","resolveRemoteVersion","resolvedPackages","newWorkspacePolicyEntries","forEach","resolvedPackage","version","versionWithPrefix","getVersionWithSavePrefix","savePrefix","dependencyId","value","addToRootPolicy","updateExisting","persistConfig","setStatusLine","importObjects","consoleSuccess","console","chalk","cyan","getPackageManagerName","installer","getInstaller","compDirMap","mergedRootPolicy","getWorkspacePolicy","depsFilterFn","generateFilterFnForDepsFromLocalRemote","pmInstallOptions","dedupe","copyPeerToRuntimeOnRoot","copyPeerToRuntimeOnComponents","dependencyFilterFn","installTeambitBit","link","linkTeambitBit","legacyLink","linkCoreAspects","linkNestedDepsInNM","deleteAllDependenciesDataCache","linker","getLinker","linkingOptions","res","remotes","_legacyRemotes","dependencyList","filtered","dep","ComponentDependency","isHub","ComponentNotFound","configStr","JSON","stringify","workspaceConfig","raw","BitError","importOptions","verbose","merge","objectsOnly","withEnvironments","writeDists","writeConfig","installNpmPackages","writePackageJson","importDependenciesDirectly","importDependents","tester","compiler","NothingToImport","_reloadConsumer","ConsumerComponent","defaultDirectory","legacyDefaultDirectory","isCoreAspect","fromString","legacyId","getParsedIdIfExist","idWithVersion","idWithoutVersion","_bitMapId","_bitMapIdWithoutVersion","_bitMapIdWithVersion","changeVersion","endsWith","startsWith","resolveExtensionsList","resolveMergedExtensionsP","resolvedId","addDefaultScopeToExtensionsList","hasScope"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAIA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAYA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAUA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAMA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAKA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAUA;AAAA;;AAAA;AAAA;AAAA;;AAAA;A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","sourcesContent":["import chalk from 'chalk';\nimport mapSeries from 'p-map-series';\nimport type { PubsubMain } from '@teambit/pubsub';\nimport { IssuesList } from '@teambit/component-issues';\nimport type { AspectLoaderMain, AspectDefinition } from '@teambit/aspect-loader';\nimport { getAspectDef } from '@teambit/aspect-loader';\nimport { MainRuntime } from '@teambit/cli';\nimport {\n AspectEntry,\n ComponentMain,\n Component,\n ComponentFactory,\n ComponentID,\n ComponentMap,\n AspectList,\n AspectData,\n InvalidComponent,\n} from '@teambit/component';\nimport { ComponentScopeDirMap, Config } from '@teambit/config';\nimport {\n DependencyLifecycleType,\n DependencyResolverMain,\n PackageManagerInstallOptions,\n ComponentDependency,\n WorkspacePolicyEntry,\n LinkingOptions,\n LinkResults,\n DependencyList,\n} from '@teambit/dependency-resolver';\nimport { EnvsMain, EnvsAspect, EnvServiceList, DEFAULT_ENV } from '@teambit/envs';\nimport { GraphqlMain } from '@teambit/graphql';\nimport { Harmony } from '@teambit/harmony';\nimport { IsolatorMain } from '@teambit/isolator';\nimport { Logger } from '@teambit/logger';\nimport type { ScopeMain } from '@teambit/scope';\nimport { isMatchNamespacePatternItem } from '@teambit/workspace.modules.match-pattern';\nimport { RequireableComponent } from '@teambit/harmony.modules.requireable-component';\nimport { ResolvedComponent } from '@teambit/harmony.modules.resolved-component';\nimport type { VariantsMain } from '@teambit/variants';\nimport { link, importAction } from '@teambit/legacy/dist/api/consumer';\nimport LegacyGraph from '@teambit/legacy/dist/scope/graph/graph';\nimport { ImportOptions } from '@teambit/legacy/dist/consumer/component-ops/import-components';\nimport { NothingToImport } from '@teambit/legacy/dist/consumer/exceptions';\nimport { BitIds } from '@teambit/legacy/dist/bit-id';\nimport { BitId, InvalidScopeName, isValidScopeName } from '@teambit/legacy-bit-id';\nimport { LocalLaneId } from '@teambit/legacy/dist/lane-id/lane-id';\nimport { Consumer, loadConsumer } from '@teambit/legacy/dist/consumer';\nimport { GetBitMapComponentOptions } from '@teambit/legacy/dist/consumer/bit-map/bit-map';\nimport AddComponents from '@teambit/legacy/dist/consumer/component-ops/add-components';\nimport type {\n AddActionResults,\n Warnings,\n} from '@teambit/legacy/dist/consumer/component-ops/add-components/add-components';\nimport { ComponentNotFound } from '@teambit/legacy/dist/scope/exceptions';\nimport ComponentsList from '@teambit/legacy/dist/consumer/component/components-list';\nimport { NoComponentDir } from '@teambit/legacy/dist/consumer/component/exceptions/no-component-dir';\nimport { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { buildOneGraphForComponents } from '@teambit/legacy/dist/scope/graph/components-graph';\nimport { pathIsInside } from '@teambit/legacy/dist/utils';\nimport componentIdToPackageName from '@teambit/legacy/dist/utils/bit/component-id-to-package-name';\nimport { PathOsBased, PathOsBasedRelative, PathOsBasedAbsolute } from '@teambit/legacy/dist/utils/path';\nimport { BitError } from '@teambit/bit-error';\nimport fs from 'fs-extra';\nimport { slice, uniqBy, difference } from 'lodash';\nimport path from 'path';\nimport ConsumerComponent from '@teambit/legacy/dist/consumer/component';\nimport type { ComponentLog } from '@teambit/legacy/dist/scope/models/model-component';\nimport { ComponentConfigFile } from './component-config-file';\nimport { DependencyTypeNotSupportedInPolicy } from './exceptions';\nimport {\n OnComponentAdd,\n OnComponentChange,\n OnComponentEventResult,\n OnComponentLoad,\n OnComponentRemove,\n SerializableResults,\n} from './on-component-events';\nimport { WorkspaceExtConfig } from './types';\nimport { Watcher } from './watch/watcher';\nimport { ComponentStatus } from './workspace-component/component-status';\nimport {\n OnComponentAddSlot,\n OnComponentChangeSlot,\n OnComponentLoadSlot,\n OnComponentRemoveSlot,\n} from './workspace.provider';\nimport { WorkspaceComponentLoader } from './workspace-component/workspace-component-loader';\nimport { IncorrectEnvAspect } from './exceptions/incorrect-env-aspect';\n\nexport type EjectConfResult = {\n configPath: string;\n};\n\nexport const ComponentAdded = 'componentAdded';\nexport const ComponentChanged = 'componentChanged';\nexport const ComponentRemoved = 'componentRemoved';\n\nexport interface EjectConfOptions {\n propagate?: boolean;\n override?: boolean;\n}\n\nexport type WorkspaceInstallOptions = {\n variants?: string;\n lifecycleType?: DependencyLifecycleType;\n dedupe: boolean;\n import: boolean;\n copyPeerToRuntimeOnRoot?: boolean;\n copyPeerToRuntimeOnComponents?: boolean;\n updateExisting: boolean;\n savePrefix?: string;\n};\n\nexport type WorkspaceLinkOptions = LinkingOptions;\n\nexport type TrackData = {\n rootDir: PathOsBasedRelative; // path relative to the workspace\n componentName?: string; // if empty, it'll be generated from the path\n mainFile?: string; // if empty, attempts will be made to guess the best candidate\n};\n\nexport type TrackResult = { componentName: string; files: string[]; warnings: Warnings };\n\nconst DEFAULT_VENDOR_DIR = 'vendor';\n\n/**\n * API of the Bit Workspace\n */\nexport class Workspace implements ComponentFactory {\n priority = true;\n owner?: string;\n componentsScopeDirsMap: ComponentScopeDirMap;\n componentLoader: WorkspaceComponentLoader;\n constructor(\n /**\n * private pubsub.\n */\n private pubsub: PubsubMain,\n\n private config: WorkspaceExtConfig,\n /**\n * private access to the legacy consumer instance.\n */\n public consumer: Consumer,\n\n /**\n * access to the workspace `Scope` instance\n */\n readonly scope: ScopeMain,\n\n /**\n * access to the `ComponentProvider` instance\n */\n private componentAspect: ComponentMain,\n\n private isolator: IsolatorMain,\n\n private dependencyResolver: DependencyResolverMain,\n\n private variants: VariantsMain,\n\n private aspectLoader: AspectLoaderMain,\n\n private logger: Logger,\n\n private componentList: ComponentsList = new ComponentsList(consumer),\n\n /**\n * private reference to the instance of Harmony.\n */\n private harmony: Harmony,\n\n /**\n * on component load slot.\n */\n public onComponentLoadSlot: OnComponentLoadSlot,\n\n /**\n * on component change slot.\n */\n private onComponentChangeSlot: OnComponentChangeSlot,\n\n private envs: EnvsMain,\n\n /**\n * on component add slot.\n */\n private onComponentAddSlot: OnComponentAddSlot,\n\n private onComponentRemoveSlot: OnComponentRemoveSlot,\n\n private graphql: GraphqlMain\n ) {\n // TODO: refactor - prefer to avoid code inside the constructor.\n this.owner = this.config?.defaultOwner;\n this.componentLoader = new WorkspaceComponentLoader(this, logger, dependencyResolver, envs);\n this.validateConfig();\n }\n\n private validateConfig() {\n const defaultScope = this.config.defaultScope;\n if (this.consumer.isLegacy) return;\n if (!defaultScope) throw new Error('defaultScope is missing');\n if (!isValidScopeName(defaultScope)) throw new InvalidScopeName(defaultScope);\n }\n\n /**\n * watcher api.\n */\n readonly watcher = new Watcher(this, this.pubsub);\n\n /**\n * root path of the Workspace.\n */\n get path() {\n return this.consumer.getPath();\n }\n\n /** get the `node_modules` folder of this workspace */\n private get modulesPath() {\n return path.join(this.path, 'node_modules');\n }\n\n get isLegacy(): boolean {\n return this.consumer.isLegacy;\n }\n\n onComponentLoad(loadFn: OnComponentLoad) {\n this.onComponentLoadSlot.register(loadFn);\n return this;\n }\n\n registerOnComponentChange(onComponentChangeFunc: OnComponentChange) {\n this.onComponentChangeSlot.register(onComponentChangeFunc);\n return this;\n }\n\n registerOnComponentAdd(onComponentAddFunc: OnComponentAdd) {\n this.onComponentAddSlot.register(onComponentAddFunc);\n return this;\n }\n\n registerOnComponentRemove(onComponentRemoveFunc: OnComponentRemove) {\n this.onComponentRemoveSlot.register(onComponentRemoveFunc);\n return this;\n }\n\n /**\n * name of the workspace as configured in either `workspace.json`.\n * defaults to workspace root directory name.\n */\n get name() {\n if (this.config.name) return this.config.name;\n const tokenizedPath = this.path.split('/');\n return tokenizedPath[tokenizedPath.length - 1];\n }\n\n get icon() {\n return this.config.icon;\n }\n\n async hasModifiedDependencies(component: Component) {\n const componentsList = new ComponentsList(this.consumer);\n const listAutoTagPendingComponents = await componentsList.listAutoTagPendingComponents();\n const isAutoTag = listAutoTagPendingComponents.find((consumerComponent) =>\n consumerComponent.id.isEqualWithoutVersion(component.id._legacy)\n );\n if (isAutoTag) return true;\n return false;\n }\n\n /**\n * get Component issues\n */\n getComponentIssues(component: Component): IssuesList | null {\n return component.state._consumer.issues || null;\n }\n\n /**\n * provides status of all components in the workspace.\n */\n async getComponentStatus(component: Component): Promise<ComponentStatus> {\n const status = await this.consumer.getComponentStatusById(component.id._legacy);\n const hasModifiedDependencies = await this.hasModifiedDependencies(component);\n return ComponentStatus.fromLegacy(status, hasModifiedDependencies, component.isOutdated());\n }\n\n /**\n * list all workspace components.\n */\n async list(filter?: { offset: number; limit: number }): Promise<Component[]> {\n const legacyIds = this.consumer.bitMap.getAllIdsAvailableOnLane();\n const ids = await this.resolveMultipleComponentIds(legacyIds);\n return this.getMany(filter && filter.limit ? slice(ids, filter.offset, filter.offset + filter.limit) : ids);\n }\n\n /**\n * list all invalid components.\n * (see the invalid criteria in ConsumerComponent.isComponentInvalidByErrorType())\n */\n async listInvalid(): Promise<InvalidComponent[]> {\n const legacyIds = this.consumer.bitMap.getAllIdsAvailableOnLane();\n const ids = await this.resolveMultipleComponentIds(legacyIds);\n return this.componentLoader.getInvalid(ids);\n }\n\n /**\n * get ids of all workspace components.\n */\n async listIds(): Promise<ComponentID[]> {\n return this.resolveMultipleComponentIds(this.consumer.bitmapIdsFromCurrentLane);\n }\n\n /**\n * Check if a specific id exist in the workspace\n * @param componentId\n */\n async hasId(componentId: ComponentID): Promise<boolean> {\n const ids = await this.listIds();\n const found = ids.find((id) => {\n return id.isEqual(componentId);\n });\n return !!found;\n }\n\n /**\n * whether or not a workspace has a component with the given name\n */\n async hasName(name: string): Promise<boolean> {\n const ids = await this.listIds();\n return Boolean(ids.find((id) => id.fullName === name));\n }\n\n /**\n * Check if a specific id exist in the workspace or in the scope\n * @param componentId\n */\n async hasIdNested(componentId: ComponentID, includeCache = true): Promise<boolean> {\n const found = await this.hasId(componentId);\n if (found) return found;\n return this.scope.hasIdNested(componentId, includeCache);\n }\n\n /**\n * list all modified components in the workspace.\n */\n async modified() {\n const ids: any = await this.componentList.listModifiedComponents(false);\n const componentIds = ids.map(ComponentID.fromLegacy);\n return this.getMany(componentIds);\n }\n\n /**\n * list all new components in the workspace.\n */\n async newComponents() {\n const ids: any = await this.componentList.listNewComponents(false);\n const componentIds = ids.map(ComponentID.fromLegacy);\n return this.getMany(componentIds);\n }\n\n /**\n * get all workspace component-ids, include vendor components.\n * (exclude nested dependencies in case dependencies are saved as components and not packages)\n */\n getAllComponentIds(): Promise<ComponentID[]> {\n const bitIds = this.consumer.bitMap.getAuthoredAndImportedBitIds();\n return this.resolveMultipleComponentIds(bitIds);\n }\n\n async getNewAndModifiedIds(): Promise<ComponentID[]> {\n const ids = await this.componentList.listTagPendingComponents();\n return this.resolveMultipleComponentIds(ids);\n }\n\n async getLogs(id: ComponentID): Promise<ComponentLog[]> {\n return this.scope.getLogs(id);\n }\n\n async getLegacyGraph(ids?: ComponentID[]): Promise<LegacyGraph> {\n if (!ids || ids.length < 1) ids = await this.listIds();\n\n const legacyIds = ids.map((id) => id._legacy);\n\n const legacyGraph = await buildOneGraphForComponents(legacyIds, this.consumer);\n return legacyGraph;\n }\n\n async loadCapsules(bitIds: string[]) {\n // throw new Error(\"Method not implemented.\");\n const components = await this.load(bitIds);\n return components.map((comp) => comp.capsule);\n }\n /**\n * fully load components, including dependency resolution and prepare them for runtime.\n * @todo: remove the string option, use only BitId\n */\n async load(ids: Array<BitId | string>): Promise<ResolvedComponent[]> {\n const componentIds = await this.resolveMultipleComponentIds(ids);\n const components = await this.getMany(componentIds);\n const network = await this.isolator.isolateComponents(components.map((c) => c.id));\n const resolvedComponents = components.map((component) => {\n const capsule = network.graphCapsules.getCapsule(component.id);\n if (!capsule) throw new Error(`unable to find capsule for ${component.id.toString()}`);\n return new ResolvedComponent(component, capsule);\n });\n return resolvedComponents;\n }\n\n public async createAspectList(extensionDataList: ExtensionDataList) {\n const entiresP = extensionDataList.map(async (entry) => {\n return new AspectEntry(await this.resolveComponentId(entry.id), entry);\n });\n\n const entries: AspectEntry[] = await Promise.all(entiresP);\n return this.componentAspect.createAspectListFromEntries(entries);\n }\n\n /**\n * get a component from workspace\n * @param id component ID\n */\n async get(\n componentId: ComponentID,\n forCapsule = false,\n legacyComponent?: ConsumerComponent,\n useCache = true,\n storeInCache = true\n ): Promise<Component> {\n this.logger.debug(`get ${componentId.toString()}`);\n return this.componentLoader.get(componentId, forCapsule, legacyComponent, useCache, storeInCache);\n }\n\n // TODO: @gilad we should refactor this asap into to the envs aspect.\n async getEnvSystemDescriptor(component: Component): Promise<AspectData> {\n const env = this.envs.calculateEnv(component);\n if (env.env.__getDescriptor && typeof env.env.__getDescriptor === 'function') {\n const systemDescriptor = await env.env.__getDescriptor();\n // !important persist services only on the env itself.\n let services: undefined | EnvServiceList;\n if (this.envs.isEnvRegistered(component.id.toString())) services = this.envs.getServices(env);\n const icon = this.aspectLoader.getDescriptor(env.id).icon || env.env.icon;\n\n return {\n type: systemDescriptor.type,\n id: env.id,\n name: env.name,\n icon,\n description: env.description,\n services: services?.toObject(),\n };\n }\n\n return {};\n }\n\n clearCache() {\n this.logger.debug('clearing the workspace and scope caches');\n this.componentLoader.clearCache();\n this.scope.clearCache();\n this.componentList = new ComponentsList(this.consumer);\n }\n\n clearComponentCache(id: ComponentID) {\n this.componentLoader.clearComponentCache(id);\n this.consumer.componentLoader.clearOneComponentCache(id._legacy);\n this.componentList = new ComponentsList(this.consumer);\n }\n\n async triggerOnComponentChange(id: ComponentID): Promise<OnComponentEventResult[]> {\n const component = await this.get(id);\n // if a new file was added, upon component-load, its .bitmap entry is updated to include the\n // new file. write these changes to the .bitmap file so then other processes have access to\n // this new file. If the .bitmap wasn't change, it won't do anything.\n await this.writeBitMap();\n const onChangeEntries = this.onComponentChangeSlot.toArray(); // e.g. [ [ 'teambit.bit/compiler', [Function: bound onComponentChange] ] ]\n const results: Array<{ extensionId: string; results: SerializableResults }> = [];\n await mapSeries(onChangeEntries, async ([extension, onChangeFunc]) => {\n const onChangeResult = await onChangeFunc(component);\n results.push({ extensionId: extension, results: onChangeResult });\n });\n\n // TODO: find way to standardize event names.\n await this.graphql.pubsub.publish(ComponentChanged, { componentChanged: { component } });\n return results;\n }\n\n async triggerOnComponentAdd(id: ComponentID): Promise<OnComponentEventResult[]> {\n const component = await this.get(id);\n const onAddEntries = this.onComponentAddSlot.toArray(); // e.g. [ [ 'teambit.bit/compiler', [Function: bound onComponentChange] ] ]\n const results: Array<{ extensionId: string; results: SerializableResults }> = [];\n await mapSeries(onAddEntries, async ([extension, onAddFunc]) => {\n const onAddResult = await onAddFunc(component);\n results.push({ extensionId: extension, results: onAddResult });\n });\n\n await this.graphql.pubsub.publish(ComponentAdded, { componentAdded: { component } });\n return results;\n }\n\n async triggerOnComponentRemove(id: ComponentID): Promise<OnComponentEventResult[]> {\n const onRemoveEntries = this.onComponentRemoveSlot.toArray(); // e.g. [ [ 'teambit.bit/compiler', [Function: bound onComponentChange] ] ]\n const results: Array<{ extensionId: string; results: SerializableResults }> = [];\n await mapSeries(onRemoveEntries, async ([extension, onRemoveFunc]) => {\n const onRemoveResult = await onRemoveFunc(id);\n results.push({ extensionId: extension, results: onRemoveResult });\n });\n\n await this.graphql.pubsub.publish(ComponentRemoved, { componentRemoved: { componentIds: [id.toObject()] } });\n return results;\n }\n\n getState(id: ComponentID, hash: string) {\n return this.scope.getState(id, hash);\n }\n\n getSnap(id: ComponentID, hash: string) {\n return this.scope.getSnap(id, hash);\n }\n\n getCurrentLaneId(): LocalLaneId {\n return this.consumer.getCurrentLaneId();\n }\n\n getDefaultExtensions(): ExtensionDataList {\n if (!this.config.extensions) {\n return new ExtensionDataList();\n }\n return ExtensionDataList.fromConfigObject(this.config.extensions);\n }\n\n async ejectConfig(id: ComponentID, options: EjectConfOptions): Promise<EjectConfResult> {\n const componentId = await this.resolveComponentId(id);\n const component = await this.scope.get(componentId);\n const aspects = component?.state.aspects\n ? await this.resolveScopeAspectListIds(component?.state.aspects)\n : await this.createAspectList(new ExtensionDataList());\n\n const componentDir = this.componentDir(id, { ignoreVersion: true });\n const componentConfigFile = new ComponentConfigFile(componentId, aspects, options.propagate);\n await componentConfigFile.write(componentDir, { override: options.override });\n return {\n configPath: ComponentConfigFile.composePath(componentDir),\n };\n }\n\n private async resolveScopeAspectListIds(aspectListFromScope: AspectList): Promise<AspectList> {\n const resolvedList = await aspectListFromScope.pmap(async (entry) => {\n if (entry.id.scope !== this.scope.name) {\n return entry;\n }\n const newId = await this.resolveComponentId(entry.id.fullName);\n const newEntry = new AspectEntry(newId, entry.legacy);\n return newEntry;\n });\n return resolvedList;\n }\n\n /**\n * load components into the workspace through a variants pattern.\n * @param pattern variants.\n * @param scope scope name.\n */\n async byPattern(pattern: string, scope = '**'): Promise<Component[]> {\n const ids = await this.listIds();\n const finalPattern = `${scope}/${pattern || '**'}`;\n const targetIds = ids.filter((id) => {\n const spec = isMatchNamespacePatternItem(id.toStringWithoutVersion(), finalPattern);\n return spec.match;\n });\n\n const components = await this.getMany(targetIds);\n return components;\n }\n\n async getMany(ids: Array<ComponentID>, forCapsule = false): Promise<Component[]> {\n return this.componentLoader.getMany(ids, forCapsule);\n }\n\n getManyByLegacy(components: ConsumerComponent[]): Promise<Component[]> {\n return mapSeries(components, async (component) => {\n const id = await this.resolveComponentId(component.id);\n return this.get(id, undefined, component);\n });\n }\n\n /**\n * This will make sure to fetch the objects prior to load them\n * do not use it if you are not sure you need it.\n * It will influence the performance\n * currently it used only for get many of aspects\n * @param ids\n * @param forCapsule\n */\n async importAndGetMany(ids: Array<ComponentID>, forCapsule = false): Promise<Component[]> {\n await this.scope.import(ids);\n return this.componentLoader.getMany(ids, forCapsule);\n }\n\n /**\n * @deprecated use this.track() instead\n * track a new component. (practically, add it to .bitmap).\n *\n * @param componentPaths component paths relative to the workspace dir\n * @param id if not set, will be concluded from the filenames\n * @param main if not set, will try to guess according to some strategies and throws if failed\n * @param override whether add details to an existing component or re-define it\n */\n async add(\n componentPaths: PathOsBasedRelative[],\n id?: string,\n main?: string,\n override = false\n ): Promise<AddActionResults> {\n const addComponent = new AddComponents({ consumer: this.consumer }, { componentPaths, id, main, override });\n const addResults = await addComponent.add();\n // @todo: the legacy commands have `consumer.onDestroy()` on command completion, it writes the\n // .bitmap file. workspace needs a similar mechanism. once done, remove the next line.\n await this.consumer.bitMap.write(this.consumer.componentFsCache);\n return addResults;\n }\n\n /**\n * add a new component to the .bitmap file.\n * this method only adds the records in memory but doesn't persist to the filesystem.\n * to write the .bitmap file once completed, run \"await this.writeBitMap();\"\n */\n async track(trackData: TrackData): Promise<TrackResult> {\n const addComponent = new AddComponents(\n { consumer: this.consumer },\n { componentPaths: [trackData.rootDir], id: trackData.componentName, main: trackData.mainFile, override: false }\n );\n const result = await addComponent.add();\n const addedComponent = result.addedComponents[0];\n const componentName = addedComponent?.id.name || (trackData.componentName as string);\n const files = addedComponent?.files.map((f) => f.relativePath) || [];\n return { componentName, files, warnings: result.warnings };\n }\n\n async write(rootPath: string, component: Component) {\n await Promise.all(\n component.filesystem.files.map(async (file) => {\n const pathToWrite = path.join(this.path, rootPath, file.path);\n await fs.outputFile(pathToWrite, file.contents);\n })\n );\n }\n\n async writeBitMap() {\n await this.consumer.writeBitMap();\n }\n\n /**\n * Get the component root dir in the file system (relative to workspace or full)\n * @param componentId\n * @param relative return the path relative to the workspace or full path\n */\n componentDir(\n componentId: ComponentID,\n bitMapOptions?: GetBitMapComponentOptions,\n options = { relative: false }\n ): PathOsBased {\n return this.componentDirFromLegacyId(componentId._legacy, bitMapOptions, options);\n }\n\n private componentDirFromLegacyId(\n bitId: BitId,\n bitMapOptions?: GetBitMapComponentOptions,\n options = { relative: false }\n ): PathOsBased {\n const componentMap = this.consumer.bitMap.getComponent(bitId, bitMapOptions);\n const relativeComponentDir = componentMap.getComponentDir();\n if (!relativeComponentDir) {\n throw new NoComponentDir(bitId.toString());\n }\n if (options.relative) {\n return relativeComponentDir;\n }\n\n return path.join(this.path, relativeComponentDir);\n }\n\n componentDirToAbsolute(relativeComponentDir: PathOsBasedRelative): PathOsBasedAbsolute {\n return path.join(this.path, relativeComponentDir);\n }\n\n async componentDefaultScope(componentId: ComponentID): Promise<string | undefined> {\n const relativeComponentDir = this.componentDir(componentId, { ignoreVersion: true }, { relative: true });\n return this.componentDefaultScopeFromComponentDirAndName(relativeComponentDir, componentId.fullName);\n }\n\n async componentDefaultScopeFromComponentDirAndName(\n relativeComponentDir: PathOsBasedRelative,\n name: string\n ): Promise<string | undefined> {\n const componentConfigFile = await this.componentConfigFileFromComponentDirAndName(relativeComponentDir, name);\n if (componentConfigFile && componentConfigFile.defaultScope) {\n return componentConfigFile.defaultScope;\n }\n return this.componentDefaultScopeFromComponentDirAndNameWithoutConfigFile(relativeComponentDir, name);\n }\n\n get defaultScope() {\n return this.config.defaultScope;\n }\n\n private async componentDefaultScopeFromComponentDirAndNameWithoutConfigFile(\n relativeComponentDir: PathOsBasedRelative,\n name: string\n ): Promise<string | undefined> {\n const variantConfig = this.variants.byRootDirAndName(relativeComponentDir, name);\n if (variantConfig && variantConfig.defaultScope) {\n return variantConfig.defaultScope;\n }\n const isVendor = this.isVendorComponentByComponentDir(relativeComponentDir);\n if (!isVendor) {\n return this.config.defaultScope;\n }\n return undefined;\n }\n\n /**\n * Calculate the component config based on:\n * the component.json file in the component folder\n * matching pattern in the variants config\n * defaults extensions from workspace config\n *\n * @param {ComponentID} componentId\n * @param {Component} [componentFromScope]\n * @returns {Promise<ExtensionDataList>}\n * @memberof Workspace\n */\n async componentExtensions(componentId: ComponentID, componentFromScope?: Component): Promise<ExtensionDataList> {\n // TODO: consider caching this result\n let configFileExtensions;\n let variantsExtensions;\n let wsDefaultExtensions;\n const mergeFromScope = true;\n const scopeExtensions = componentFromScope?.config?.extensions || new ExtensionDataList();\n\n const componentConfigFile = await this.componentConfigFile(componentId);\n if (componentConfigFile) {\n configFileExtensions = componentConfigFile.aspects.toLegacy();\n // do not merge from scope data when there is component config file\n // mergeFromScope = false;\n }\n const relativeComponentDir = this.componentDir(componentId, { ignoreVersion: true }, { relative: true });\n const variantConfig = this.variants.byRootDirAndName(relativeComponentDir, componentId.fullName);\n if (variantConfig) {\n variantsExtensions = variantConfig.extensions;\n // Do not merge from scope when there is specific variant (which is not *) that match the component\n // if (variantConfig.maxSpecificity > 0) {\n // mergeFromScope = false;\n // }\n }\n const isVendor = this.isVendorComponentByComponentDir(relativeComponentDir);\n if (!isVendor) {\n wsDefaultExtensions = this.getDefaultExtensions();\n }\n // We don't stop on each step because we want to merge the default scope even if propagate=false but the default scope is not defined\n const extensionsToMerge: ExtensionDataList[] = [];\n if (configFileExtensions) {\n extensionsToMerge.push(configFileExtensions);\n }\n let continuePropagating = componentConfigFile?.propagate ?? true;\n if (variantsExtensions && continuePropagating) {\n // Put it in the start to make sure the config file is stronger\n extensionsToMerge.push(variantsExtensions);\n }\n continuePropagating = continuePropagating && (variantConfig?.propagate ?? true);\n // Do not apply default extensions on the default extensions (it will create infinite loop when loading them)\n const isDefaultExtension = wsDefaultExtensions.findExtension(componentId.toString(), true, true);\n if (wsDefaultExtensions && continuePropagating && !isDefaultExtension) {\n // Put it in the start to make sure the config file is stronger\n extensionsToMerge.push(wsDefaultExtensions);\n }\n\n // It's before the scope extensions, since there is no need to resolve extensions from scope they are already resolved\n // await Promise.all(extensionsToMerge.map((extensions) => this.resolveExtensionsList(extensions)));\n\n if (mergeFromScope && continuePropagating) {\n extensionsToMerge.push(scopeExtensions);\n }\n\n // It's important to do this resolution before the merge, otherwise we have issues with extensions\n // coming from scope with local scope name, as opposed to the same extension comes from the workspace with default scope name\n const promises = extensionsToMerge.map((list) => this.resolveExtensionListIds(list));\n await Promise.all(promises);\n\n let mergedExtensions = ExtensionDataList.mergeConfigs(extensionsToMerge).filterRemovedExtensions();\n\n // remove self from merged extensions\n const selfInMergedExtensions = mergedExtensions.findExtension(\n componentId._legacy.toStringWithoutScopeAndVersion(),\n true,\n true\n );\n if (selfInMergedExtensions && selfInMergedExtensions.extensionId) {\n mergedExtensions = mergedExtensions.remove(selfInMergedExtensions.extensionId);\n }\n\n return mergedExtensions;\n }\n\n /**\n * This will mutate the entries with extensionId prop to have resolved legacy id\n * This should be worked on the extension data list not the new aspect list\n * @param extensionList\n */\n private async resolveExtensionListIds(extensionList: ExtensionDataList): Promise<ExtensionDataList> {\n const promises = extensionList.map(async (entry) => {\n if (entry.extensionId) {\n const id = await this.resolveComponentId(entry.extensionId);\n entry.extensionId = id._legacy;\n }\n\n return entry;\n });\n await Promise.all(promises);\n return extensionList;\n }\n\n private isVendorComponentByComponentDir(relativeComponentDir: PathOsBasedRelative): boolean {\n const vendorDir = this.config.vendor?.directory || DEFAULT_VENDOR_DIR;\n if (pathIsInside(relativeComponentDir, vendorDir)) {\n return true;\n }\n // TODO: implement\n return false;\n }\n\n /**\n * return the component config from its folder (component.json)\n * @param componentId\n */\n private async componentConfigFile(id: ComponentID): Promise<ComponentConfigFile | undefined> {\n const relativeComponentDir = this.componentDir(id, { ignoreVersion: true }, { relative: true });\n return this.componentConfigFileFromComponentDirAndName(relativeComponentDir, id.fullName);\n }\n\n private async componentConfigFileFromComponentDirAndName(\n relativeComponentDir: PathOsBasedRelative,\n name: string\n ): Promise<ComponentConfigFile | undefined> {\n let componentConfigFile;\n if (relativeComponentDir) {\n const absComponentDir = this.componentDirToAbsolute(relativeComponentDir);\n const defaultScopeFromVariantsOrWs = await this.componentDefaultScopeFromComponentDirAndNameWithoutConfigFile(\n relativeComponentDir,\n name\n );\n componentConfigFile = await ComponentConfigFile.load(\n absComponentDir,\n this.createAspectList.bind(this),\n defaultScopeFromVariantsOrWs\n );\n }\n\n return componentConfigFile;\n }\n\n async getGraphWithoutCore(components: Component[]) {\n const ids = components.map((component) => component.id._legacy);\n const coreAspectsStringIds = this.aspectLoader.getCoreAspectIds();\n const coreAspectsComponentIds = coreAspectsStringIds.map((id) => BitId.parse(id, true));\n const coreAspectsBitIds = BitIds.fromArray(coreAspectsComponentIds.map((id) => id.changeScope(null)));\n // const aspectsIds = components.reduce((acc, curr) => {\n // const currIds = curr.state.aspects.ids;\n // acc = acc.concat(currIds);\n // return acc;\n // }, [] as any);\n // const otherDependenciesMap = components.reduce((acc, curr) => {\n // // const currIds = curr.state.dependencies.dependencies.map(dep => dep.id.toString());\n // const currMap = curr.state.dependencies.getIdsMap();\n // Object.assign(acc, currMap);\n // return acc;\n // }, {});\n\n // const depsWhichAreNotAspects = difference(Object.keys(otherDependenciesMap), aspectsIds);\n // const depsWhichAreNotAspectsBitIds = depsWhichAreNotAspects.map((strId) => otherDependenciesMap[strId]);\n // We only want to load into the graph components which are aspects and not regular dependencies\n // This come to solve a circular loop when an env aspect use an aspect (as regular dep) and the aspect use the env aspect as its env\n // TODO: @gilad it causes many issues we need to find a better solution. removed for now.\n const ignoredIds = coreAspectsBitIds.concat([]);\n return buildOneGraphForComponents(ids, this.consumer, undefined, BitIds.fromArray(ignoredIds));\n }\n\n /**\n * load aspects from the workspace and if not exists in the workspace, load from the scope.\n * keep in mind that the graph may have circles.\n */\n async loadAspects(ids: string[] = [], throwOnError = false): Promise<void> {\n this.logger.debug(`loading ${ids.length} aspects`);\n const notLoadedIds = ids.filter((id) => !this.aspectLoader.isAspectLoaded(id));\n if (!notLoadedIds.length) return;\n const coreAspectsStringIds = this.aspectLoader.getCoreAspectIds();\n const idsWithoutCore: string[] = difference(notLoadedIds, coreAspectsStringIds);\n const componentIds = await this.resolveMultipleComponentIds(idsWithoutCore);\n const components = await this.importAndGetAspects(componentIds);\n const graph = await this.getGraphWithoutCore(components);\n const allIdsP = graph.nodes().map(async (id) => {\n return this.resolveComponentId(id);\n });\n const allIds = await Promise.all(allIdsP);\n const allComponents = await this.getMany(allIds as ComponentID[]);\n\n const aspects = allComponents.filter((component: Component) => {\n let data = component.config.extensions.findExtension(EnvsAspect.id)?.data;\n if (!data) {\n // TODO: remove this once we re-export old components used to store the data here\n data = component.state.aspects.get('teambit.workspace/workspace');\n }\n\n if (!data) return false;\n if (data.type !== 'aspect' && idsWithoutCore.includes(component.id.toString())) {\n const err = new IncorrectEnvAspect(component.id.toString(), data.type, data.id);\n if (data.id === DEFAULT_ENV) {\n // when cloning a project, or when the node-modules dir is deleted, nothing works and all\n // components are default to the DEFAULT_ENV, which is node-env. we must allow \"bit\n // install\" to prepare the workspace and let the proper the envs to be loaded\n this.logger.error(err.message);\n } else {\n throw err;\n }\n }\n return data.type === 'aspect';\n });\n // no need to filter core aspects as they are not included in the graph\n // here we are trying to load extensions from the workspace.\n const { workspaceComps, scopeComps } = await this.groupComponentsByWorkspaceAndScope(aspects);\n // load the scope first because we might need it for custom envs that extend external aspects\n const scopeIds = scopeComps.map((aspect) => aspect.id.toString());\n await this.scope.loadAspects(scopeIds, throwOnError);\n\n const workspaceAspects = await this.requireComponents(workspaceComps);\n await this.aspectLoader.loadRequireableExtensions(workspaceAspects, throwOnError);\n }\n\n async resolveAspects(runtimeName?: string, componentIds?: ComponentID[]): Promise<AspectDefinition[]> {\n let missingPaths = false;\n const stringIds: string[] = [];\n const idsToResolve = componentIds ? componentIds.map((id) => id.toString()) : this.harmony.extensionsIds;\n const coreAspectsIds = this.aspectLoader.getCoreAspectIds();\n const userAspectsIds: string[] = difference(idsToResolve, coreAspectsIds);\n const componentIdsToResolve = await this.resolveMultipleComponentIds(userAspectsIds);\n const { workspaceIds, scopeIds } = await this.groupIdsByWorkspaceAndScope(componentIdsToResolve);\n const wsComponents = await this.getMany(workspaceIds);\n const aspectDefs = await this.aspectLoader.resolveAspects(wsComponents, async (component) => {\n stringIds.push(component.id._legacy.toString());\n const localPath = this.getComponentPackagePath(component.state._consumer);\n const isExist = await fs.pathExists(localPath);\n if (!isExist) {\n missingPaths = true;\n }\n\n return {\n aspectPath: localPath,\n runtimePath: runtimeName ? await this.aspectLoader.getRuntimePath(component, localPath, runtimeName) : null,\n };\n });\n\n let scopeAspectDefs: AspectDefinition[] = [];\n if (scopeIds.length) {\n scopeAspectDefs = await this.scope.resolveAspects(runtimeName, scopeIds);\n }\n\n let coreAspectDefs = await Promise.all(\n coreAspectsIds.map(async (coreId) => {\n const rawDef = await getAspectDef(coreId, runtimeName);\n return this.aspectLoader.loadDefinition(rawDef);\n })\n );\n\n // due to lack of workspace and scope runtimes. TODO: fix after adding them.\n if (runtimeName) {\n coreAspectDefs = coreAspectDefs.filter((coreAspect) => {\n return coreAspect.runtimePath;\n });\n }\n\n if (missingPaths) {\n await link(stringIds, false);\n }\n\n const allDefs = aspectDefs.concat(coreAspectDefs).concat(scopeAspectDefs);\n const uniqDefs = uniqBy(allDefs, (def) => `${def.aspectPath}-${def.runtimePath}`);\n let defs = uniqDefs;\n if (runtimeName) {\n defs = defs.filter((def) => def.runtimePath);\n }\n\n return defs;\n }\n\n private async groupIdsByWorkspaceAndScope(\n ids: ComponentID[]\n ): Promise<{ workspaceIds: ComponentID[]; scopeIds: ComponentID[] }> {\n const workspaceIds: ComponentID[] = [];\n const scopeIds: ComponentID[] = [];\n await Promise.all(\n ids.map(async (id) => {\n const existOnWorkspace = await this.hasId(id);\n existOnWorkspace ? workspaceIds.push(id) : scopeIds.push(id);\n })\n );\n return { workspaceIds, scopeIds };\n }\n\n private async groupComponentsByWorkspaceAndScope(\n components: Component[]\n ): Promise<{ workspaceComps: Component[]; scopeComps: Component[] }> {\n const workspaceComps: Component[] = [];\n const scopeComps: Component[] = [];\n await Promise.all(\n components.map(async (component) => {\n const existOnWorkspace = await this.hasId(component.id);\n existOnWorkspace ? workspaceComps.push(component) : scopeComps.push(component);\n })\n );\n return { workspaceComps, scopeComps };\n }\n\n /**\n * Load all unloaded extensions from a list\n * @param extensions list of extensions with config to load\n */\n async loadExtensions(extensions: ExtensionDataList, throwOnError = false): Promise<void> {\n const extensionsIdsP = extensions.map(async (extensionEntry) => {\n // Core extension\n if (!extensionEntry.extensionId) {\n return extensionEntry.stringId as string;\n }\n\n const id = await this.resolveComponentId(extensionEntry.extensionId);\n // return this.resolveComponentId(extensionEntry.extensionId);\n return id.toString();\n });\n const extensionsIds: string[] = await Promise.all(extensionsIdsP);\n const loadedExtensions = this.harmony.extensionsIds;\n const extensionsToLoad = difference(extensionsIds, loadedExtensions);\n if (!extensionsToLoad.length) return;\n await this.loadAspects(extensionsToLoad, throwOnError);\n }\n\n /**\n * Provides a cache folder, unique per key.\n * Return value may be undefined, if workspace folder is unconventional (bare-scope, no node_modules, etc)\n */\n getTempDir(\n /*\n * unique key, i.e. aspect or component id\n */\n id: string\n ) {\n const PREFIX = 'bit';\n const cacheDir = path.join(this.modulesPath, '.cache', PREFIX, id);\n\n // maybe should also check it's a folder and has write permissions\n if (!fs.existsSync(cacheDir)) {\n fs.mkdirSync(cacheDir, { recursive: true });\n }\n\n return cacheDir;\n }\n\n async requireComponents(components: Component[]): Promise<RequireableComponent[]> {\n let missingPaths = false;\n const stringIds: string[] = [];\n const resolveP = components.map(async (component) => {\n stringIds.push(component.id._legacy.toString());\n const localPath = this.getComponentPackagePath(component);\n const isExist = await fs.pathExists(localPath);\n if (!isExist) {\n missingPaths = true;\n }\n\n const requireFunc = async () => {\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const aspect = require(localPath);\n // require aspect runtimes\n const runtimePath = await this.aspectLoader.getRuntimePath(component, localPath, MainRuntime.name);\n // eslint-disable-next-line global-require, import/no-dynamic-require\n if (runtimePath) require(runtimePath);\n return aspect;\n };\n return new RequireableComponent(component, requireFunc);\n });\n const resolved = await Promise.all(resolveP);\n // Make sure to link missing components\n if (missingPaths) {\n await link(stringIds, false);\n }\n return resolved;\n }\n\n private async getComponentsDirectory(ids: ComponentID[]) {\n const components = ids.length ? await this.getMany(ids) : await this.list();\n return ComponentMap.as<string>(components, (component) => this.componentDir(component.id));\n }\n\n /**\n * Install dependencies for all components in the workspace\n *\n * @returns\n * @memberof Workspace\n */\n async install(packages?: string[], options?: WorkspaceInstallOptions) {\n if (packages && packages.length) {\n if (!options?.variants && options?.lifecycleType === 'dev') {\n throw new DependencyTypeNotSupportedInPolicy(options?.lifecycleType);\n }\n this.logger.debug(`installing the following packages: ${packages.join()}`);\n const resolver = this.dependencyResolver.getVersionResolver();\n const resolvedPackagesP = packages.map((packageName) =>\n resolver.resolveRemoteVersion(packageName, {\n rootDir: this.path,\n })\n );\n const resolvedPackages = await Promise.all(resolvedPackagesP);\n const newWorkspacePolicyEntries: WorkspacePolicyEntry[] = [];\n resolvedPackages.forEach((resolvedPackage) => {\n if (resolvedPackage.version) {\n const versionWithPrefix = this.dependencyResolver.getVersionWithSavePrefix(\n resolvedPackage.version,\n options?.savePrefix\n );\n newWorkspacePolicyEntries.push({\n dependencyId: resolvedPackage.packageName,\n value: {\n version: versionWithPrefix,\n },\n lifecycleType: options?.lifecycleType || 'runtime',\n });\n }\n });\n if (!options?.variants) {\n this.dependencyResolver.addToRootPolicy(newWorkspacePolicyEntries, {\n updateExisting: options?.updateExisting ?? false,\n });\n } else {\n // TODO: implement\n }\n await this.dependencyResolver.persistConfig(this.path);\n }\n if (options?.import) {\n this.logger.setStatusLine('importing missing objects');\n await this.importObjects();\n this.logger.consoleSuccess();\n }\n this.logger.console(\n `installing dependencies in workspace using ${chalk.cyan(this.dependencyResolver.getPackageManagerName())}`\n );\n this.logger.debug(`installing dependencies in workspace with options`, options);\n this.clearCache();\n // TODO: pass get install options\n const installer = this.dependencyResolver.getInstaller({});\n const compDirMap = await this.getComponentsDirectory([]);\n const mergedRootPolicy = this.dependencyResolver.getWorkspacePolicy();\n\n const depsFilterFn = await this.generateFilterFnForDepsFromLocalRemote();\n\n const pmInstallOptions: PackageManagerInstallOptions = {\n dedupe: options?.dedupe,\n copyPeerToRuntimeOnRoot: options?.copyPeerToRuntimeOnRoot ?? true,\n copyPeerToRuntimeOnComponents: options?.copyPeerToRuntimeOnComponents ?? false,\n dependencyFilterFn: depsFilterFn,\n };\n await installer.install(this.path, mergedRootPolicy, compDirMap, { installTeambitBit: false }, pmInstallOptions);\n // TODO: this make duplicate\n // this.logger.consoleSuccess();\n // TODO: add the links results to the output\n await this.link({\n linkTeambitBit: true,\n legacyLink: true,\n linkCoreAspects: true,\n linkNestedDepsInNM: !this.isLegacy,\n });\n await this.consumer.componentFsCache.deleteAllDependenciesDataCache();\n return compDirMap;\n }\n\n async link(options?: WorkspaceLinkOptions): Promise<LinkResults> {\n const compDirMap = await this.getComponentsDirectory([]);\n const mergedRootPolicy = this.dependencyResolver.getWorkspacePolicy();\n const linker = this.dependencyResolver.getLinker({\n rootDir: this.path,\n linkingOptions: options,\n });\n const res = await linker.link(this.path, mergedRootPolicy, compDirMap, options);\n return res;\n }\n\n /**\n * Generate a filter to pass to the installer\n * This will filter deps which are come from remotes which defined in scope.json\n * those components comes from local remotes, usually doesn't have a package in a registry\n * so no reason to try to install them (it will fail)\n */\n private async generateFilterFnForDepsFromLocalRemote() {\n // TODO: once scope create a new API for this, replace it with the new one\n const remotes = await this.scope._legacyRemotes();\n return (dependencyList: DependencyList): DependencyList => {\n const filtered = dependencyList.filter((dep) => {\n if (!(dep instanceof ComponentDependency)) {\n return true;\n }\n if (remotes.isHub(dep.componentId.scope)) {\n return true;\n }\n return false;\n });\n return filtered;\n };\n }\n\n /**\n * same as `this.importAndGetMany()` with a specific error handling of ComponentNotFound\n */\n private async importAndGetAspects(componentIds: ComponentID[]): Promise<Component[]> {\n try {\n return await this.importAndGetMany(componentIds);\n } catch (err: any) {\n if (err instanceof ComponentNotFound) {\n const config = this.harmony.get<Config>('teambit.harmony/config');\n const configStr = JSON.stringify(config.workspaceConfig?.raw || {});\n if (configStr.includes(err.id)) {\n throw new BitError(`error: a component \"${err.id}\" was not found\nyour workspace.jsonc has this component-id set. you might want to remove/change it.`);\n }\n }\n\n throw err;\n }\n }\n\n // TODO: replace with a proper import API on the workspace\n private async importObjects() {\n const importOptions: ImportOptions = {\n ids: [],\n verbose: false,\n merge: false,\n objectsOnly: true,\n withEnvironments: false,\n override: false,\n writeDists: false,\n writeConfig: false,\n installNpmPackages: false,\n writePackageJson: false,\n importDependenciesDirectly: false,\n importDependents: false,\n };\n try {\n const res = await importAction({ tester: false, compiler: false }, importOptions, []);\n return res;\n } catch (err: any) {\n // TODO: this is a hack since the legacy throw an error, we should provide a way to not throw this error from the legacy\n if (err instanceof NothingToImport) {\n // Do not write nothing to import warning\n return undefined;\n }\n throw err;\n }\n }\n\n /**\n * this should be rarely in-use.\n * it's currently used by watch extension as a quick workaround to load .bitmap and the components\n */\n async _reloadConsumer() {\n this.consumer = await loadConsumer(this.path, true);\n this.clearCache();\n }\n\n getComponentPackagePath(component: ConsumerComponent | Component) {\n const packageName = componentIdToPackageName(\n component instanceof ConsumerComponent ? component : component.state._consumer\n );\n return path.join(this.modulesPath, packageName);\n }\n\n // TODO: should we return here the dir as it defined (aka components) or with /{name} prefix (as it used in legacy)\n get defaultDirectory(): string {\n return this.config.defaultDirectory;\n }\n\n get legacyDefaultDirectory(): string {\n if (this.defaultDirectory && !this.defaultDirectory.includes('{name}')) {\n return `${this.defaultDirectory}/{name}`;\n }\n return this.defaultDirectory;\n }\n\n /**\n * Transform the id to ComponentId and get the exact id as appear in bitmap\n *\n * @param {(string | ComponentID | BitId)} id\n * @returns {Promise<ComponentID>}\n * @memberof Workspace\n */\n async resolveComponentId(id: string | ComponentID | BitId): Promise<ComponentID> {\n // This is required in case where you have in your workspace a component with the same name as a core aspect\n // let's say you have component called react-native (which is eventually my-org.my-scope/react-native)\n // and you set teambit.react/react-native as your env\n // bit will get here with the string teambit.react/react-native and will try to resolve it from the workspace\n // during this it will find the my-org.my-scope/react-native which is incorrect as the core one doesn't exist in the\n // workspace\n if (this.aspectLoader.isCoreAspect(id.toString())) {\n return ComponentID.fromString(id.toString());\n }\n let legacyId = this.consumer.getParsedIdIfExist(id.toString(), true, true);\n if (!legacyId) {\n try {\n const idWithVersion = id.toString();\n const [idWithoutVersion, version] = id.toString().split('@');\n const _bitMapId = this.consumer.getParsedIdIfExist(idWithoutVersion, false, true);\n // This logic is very specific, and very sensitive for changes please do not touch this without consulting with @ran or @gilad\n // example (partial list) cases which should be handled are:\n // use case 1 - ws component provided with the local scope name:\n // source id : my-scope1/my-name1\n // bitmap res (_id) : my-name1 (comp is tagged but not exported)\n // local scope name : my-scope1\n // scope content : my-name1\n // expected result : my-name1\n // use case 2 - component with same name exist in ws and scope (but with different scope name)\n // source id : my-scope2/my-name1\n // bitmap res (_id) : my-name1 (comp exist in ws but it's actually different component)\n // local scope name : my-scope1\n // scope content : my-scope2/my-name1\n // expected result : my-scope2/my-name1\n // use case 3 - component with same name exist in ws and scope (but with different scope name) - source provided without scope name\n // source id : my-name1\n // bitmap res (_id) : my-name1 (comp exist in ws but it's actually different component)\n // local scope name : my-scope1\n // scope content : my-scope1/my-name1 and my-scope2/my-name1\n // expected result : my-name1 (get the name from the bitmap)\n // use case 4 - component with the same name and different scope are imported into the ws\n // source id : my-name1\n // bitmap res (_id) : my-scope2/my-name1 (comp exist in ws from different scope (imported))\n // local scope name : my-scope1\n // scope content : my-scope2/my-name1\n // expected result : my-scope2/my-name1 (get the name from the bitmap)\n\n // No entry in bitmap at all, search for the original input id\n if (!_bitMapId) {\n return await this.scope.resolveComponentId(id.toString());\n }\n const _bitMapIdWithoutVersion = _bitMapId.toStringWithoutVersion();\n const _bitMapIdWithVersion = _bitMapId.changeVersion(version).toString();\n // The id in the bitmap has prefix which is not in the source id - the bitmap entry has scope name\n // Handle use case 4\n if (_bitMapIdWithoutVersion.endsWith(idWithoutVersion) && _bitMapIdWithoutVersion !== idWithoutVersion) {\n return await this.scope.resolveComponentId(_bitMapIdWithVersion);\n }\n // The id in the bitmap doesn't have scope, the source id has scope\n // Handle use case 2 and use case 1\n if (idWithoutVersion.endsWith(_bitMapIdWithoutVersion) && _bitMapIdWithoutVersion !== idWithoutVersion) {\n if (id.toString().startsWith(this.scope.name)) {\n // Handle use case 1 - the provided id has scope name same as the local scope name\n // we want to send it as it appear in the bitmap\n return await this.scope.resolveComponentId(_bitMapIdWithVersion);\n }\n // Handle use case 2 - the provided id has scope which is not the local scope\n // we want to search by the source id\n return await this.scope.resolveComponentId(idWithVersion);\n }\n // Handle use case 3\n return await this.scope.resolveComponentId(idWithVersion);\n } catch (error: any) {\n legacyId = BitId.parse(id.toString(), true);\n return ComponentID.fromLegacy(legacyId);\n }\n }\n const relativeComponentDir = this.componentDirFromLegacyId(legacyId, undefined, { relative: true });\n const defaultScope = await this.componentDefaultScopeFromComponentDirAndName(\n relativeComponentDir,\n legacyId.toStringWithoutScopeAndVersion()\n );\n return ComponentID.fromLegacy(legacyId, defaultScope);\n }\n\n async resolveMultipleComponentIds(ids: Array<string | ComponentID | BitId>): Promise<ComponentID[]> {\n return Promise.all(ids.map(async (id) => this.resolveComponentId(id)));\n }\n\n /**\n * This will mutate the original extensions list and resolve it's ids\n *\n * @param {ExtensionDataList} extensions\n * @returns {Promise<void[]>}\n * @memberof Workspace\n */\n resolveExtensionsList(extensions: ExtensionDataList): Promise<void[]> {\n const resolveMergedExtensionsP = extensions.map(async (extensionEntry) => {\n if (extensionEntry.extensionId) {\n // const hasVersion = extensionEntry.extensionId.hasVersion();\n // const useBitmapVersion = !hasVersion;\n // const resolvedId = await this.resolveComponentId(extensionEntry.extensionId, true, useBitmapVersion);\n\n // Assuming extensionId always has scope - do not allow extension id without scope\n const resolvedId = await this.resolveComponentId(extensionEntry.extensionId);\n extensionEntry.extensionId = resolvedId._legacy;\n }\n });\n return Promise.all(resolveMergedExtensionsP);\n }\n\n /**\n * This will mutate the original extensions list and make sure all extensions has the ids with the scope / default scope\n *\n * @param {ExtensionDataList} extensions\n * @returns {Promise<void[]>}\n * @memberof Workspace\n */\n addDefaultScopeToExtensionsList(extensions: ExtensionDataList): Promise<void[]> {\n const resolveMergedExtensionsP = extensions.map(async (extensionEntry) => {\n if (extensionEntry.extensionId && !extensionEntry.extensionId.hasScope()) {\n const componentId = ComponentID.fromLegacy(extensionEntry.extensionId);\n const defaultScope = await this.componentDefaultScope(componentId);\n extensionEntry.extensionId = extensionEntry.extensionId.changeScope(defaultScope);\n }\n });\n return Promise.all(resolveMergedExtensionsP);\n }\n}\n\nexport default Workspace;\n"]}
|
|
1
|
+
{"version":3,"sources":["workspace.ts"],"names":["ComponentAdded","ComponentChanged","ComponentRemoved","DEFAULT_VENDOR_DIR","Workspace","constructor","pubsub","config","consumer","scope","componentAspect","isolator","dependencyResolver","variants","aspectLoader","logger","componentList","ComponentsList","harmony","onComponentLoadSlot","onComponentChangeSlot","envs","onComponentAddSlot","onComponentRemoveSlot","graphql","Watcher","owner","defaultOwner","componentLoader","WorkspaceComponentLoader","validateConfig","defaultScope","isLegacy","Error","InvalidScopeName","path","getPath","modulesPath","join","onComponentLoad","loadFn","register","registerOnComponentChange","onComponentChangeFunc","registerOnComponentAdd","onComponentAddFunc","registerOnComponentRemove","onComponentRemoveFunc","name","tokenizedPath","split","length","icon","hasModifiedDependencies","component","componentsList","listAutoTagPendingComponents","isAutoTag","find","consumerComponent","id","isEqualWithoutVersion","_legacy","getComponentIssues","state","_consumer","issues","getComponentStatus","status","getComponentStatusById","ComponentStatus","fromLegacy","isOutdated","list","filter","legacyIds","bitMap","getAllIdsAvailableOnLane","ids","resolveMultipleComponentIds","getMany","limit","offset","listInvalid","getInvalid","listIds","bitmapIdsFromCurrentLane","hasId","componentId","found","isEqual","hasName","Boolean","fullName","hasIdNested","includeCache","modified","listModifiedComponents","componentIds","map","ComponentID","newComponents","listNewComponents","getAllComponentIds","bitIds","getAuthoredAndImportedBitIds","getNewAndModifiedIds","listTagPendingComponents","getLogs","getLegacyGraph","legacyGraph","loadCapsules","components","load","comp","capsule","network","isolateComponents","c","resolvedComponents","graphCapsules","getCapsule","toString","ResolvedComponent","createAspectList","extensionDataList","entiresP","entry","AspectEntry","resolveComponentId","entries","Promise","all","createAspectListFromEntries","get","forCapsule","legacyComponent","useCache","storeInCache","debug","getEnvSystemDescriptor","env","calculateEnv","__getDescriptor","systemDescriptor","services","isEnvRegistered","getServices","getDescriptor","type","description","toObject","clearCache","clearComponentCache","clearOneComponentCache","triggerOnComponentChange","initiator","writeBitMap","onChangeEntries","toArray","results","extension","onChangeFunc","onChangeResult","push","extensionId","publish","componentChanged","triggerOnComponentAdd","onAddEntries","onAddFunc","onAddResult","componentAdded","triggerOnComponentRemove","onRemoveEntries","onRemoveFunc","onRemoveResult","componentRemoved","getState","hash","getSnap","getCurrentLaneId","getDefaultExtensions","extensions","ExtensionDataList","fromConfigObject","ejectConfig","options","aspects","resolveScopeAspectListIds","componentDir","ignoreVersion","componentConfigFile","ComponentConfigFile","propagate","write","override","configPath","composePath","aspectListFromScope","resolvedList","pmap","newId","newEntry","legacy","byPattern","pattern","finalPattern","targetIds","spec","toStringWithoutVersion","match","getManyByLegacy","undefined","importAndGetMany","import","add","componentPaths","main","addComponent","AddComponents","addResults","componentFsCache","track","trackData","rootDir","componentName","mainFile","result","addedComponent","addedComponents","files","f","relativePath","warnings","rootPath","filesystem","file","pathToWrite","fs","outputFile","contents","bitMapOptions","relative","componentDirFromLegacyId","bitId","componentMap","getComponent","relativeComponentDir","getComponentDir","NoComponentDir","componentDirToAbsolute","componentDefaultScope","componentDefaultScopeFromComponentDirAndName","componentConfigFileFromComponentDirAndName","componentDefaultScopeFromComponentDirAndNameWithoutConfigFile","variantConfig","byRootDirAndName","isVendor","isVendorComponentByComponentDir","componentExtensions","componentFromScope","configFileExtensions","variantsExtensions","wsDefaultExtensions","mergeFromScope","scopeExtensions","toLegacy","extensionsToMerge","continuePropagating","isDefaultExtension","findExtension","promises","resolveExtensionListIds","mergedExtensions","mergeConfigs","filterRemovedExtensions","selfInMergedExtensions","toStringWithoutScopeAndVersion","remove","extensionList","vendorDir","vendor","directory","absComponentDir","defaultScopeFromVariantsOrWs","bind","getGraphWithoutCore","coreAspectsStringIds","getCoreAspectIds","coreAspectsComponentIds","BitId","parse","coreAspectsBitIds","BitIds","fromArray","changeScope","ignoredIds","concat","loadAspects","throwOnError","notLoadedIds","isAspectLoaded","idsWithoutCore","importAndGetAspects","graph","allIdsP","nodes","allIds","allComponents","data","EnvsAspect","includes","err","IncorrectEnvAspect","DEFAULT_ENV","error","message","workspaceComps","scopeComps","groupComponentsByWorkspaceAndScope","scopeIds","aspect","workspaceAspects","requireComponents","workspaceManifests","getManifestsFromRequireableExtensions","manifestsIds","m","scopeManifests","getManifestsGraphRecursively","allManifests","loadExtensionsByManifests","resolveAspects","runtimeName","missingPaths","stringIds","idsToResolve","extensionsIds","coreAspectsIds","userAspectsIds","componentIdsToResolve","workspaceIds","groupIdsByWorkspaceAndScope","wsComponents","aspectDefs","localPath","getComponentPackagePath","isExist","pathExists","aspectPath","runtimePath","getRuntimePath","scopeAspectDefs","coreAspectDefs","coreId","rawDef","loadDefinition","coreAspect","allDefs","uniqDefs","def","defs","existOnWorkspace","loadExtensions","extensionsIdsP","extensionEntry","stringId","loadedExtensions","extensionsToLoad","getTempDir","PREFIX","cacheDir","existsSync","mkdirSync","recursive","resolveP","requireFunc","plugins","getPlugins","has","MainRuntime","require","RequireableComponent","resolved","getComponentsDirectory","ComponentMap","as","install","packages","lifecycleType","DependencyTypeNotSupportedInPolicy","resolver","getVersionResolver","resolvedPackagesP","packageName","resolveRemoteVersion","resolvedPackages","newWorkspacePolicyEntries","forEach","resolvedPackage","version","versionWithPrefix","getVersionWithSavePrefix","savePrefix","dependencyId","value","addToRootPolicy","updateExisting","persistConfig","setStatusLine","importObjects","consoleSuccess","console","chalk","cyan","getPackageManagerName","installer","getInstaller","compDirMap","mergedRootPolicy","getWorkspacePolicy","depsFilterFn","generateFilterFnForDepsFromLocalRemote","pmInstallOptions","dedupe","copyPeerToRuntimeOnRoot","copyPeerToRuntimeOnComponents","dependencyFilterFn","installTeambitBit","link","linkTeambitBit","legacyLink","linkCoreAspects","linkNestedDepsInNM","deleteAllDependenciesDataCache","linker","getLinker","linkingOptions","res","remotes","_legacyRemotes","dependencyList","filtered","dep","ComponentDependency","isHub","ComponentNotFound","configStr","JSON","stringify","workspaceConfig","raw","BitError","importOptions","verbose","merge","objectsOnly","withEnvironments","writeDists","writeConfig","installNpmPackages","writePackageJson","importDependenciesDirectly","importDependents","tester","compiler","NothingToImport","_reloadConsumer","ConsumerComponent","defaultDirectory","legacyDefaultDirectory","isCoreAspect","fromString","legacyId","getParsedIdIfExist","idWithVersion","idWithoutVersion","_bitMapId","_bitMapIdWithoutVersion","_bitMapIdWithVersion","changeVersion","endsWith","startsWith","resolveExtensionsList","resolveMergedExtensionsP","resolvedId","addDefaultScopeToExtensionsList","hasScope"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAIA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAYA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAUA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAMA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAKA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAUA;AAAA;;AAAA;AAAA;AAAA;;AAAA;A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","sourcesContent":["import chalk from 'chalk';\nimport mapSeries from 'p-map-series';\nimport type { PubsubMain } from '@teambit/pubsub';\nimport { IssuesList } from '@teambit/component-issues';\nimport type { AspectLoaderMain, AspectDefinition } from '@teambit/aspect-loader';\nimport { getAspectDef } from '@teambit/aspect-loader';\nimport { MainRuntime } from '@teambit/cli';\nimport {\n AspectEntry,\n ComponentMain,\n Component,\n ComponentFactory,\n ComponentID,\n ComponentMap,\n AspectList,\n AspectData,\n InvalidComponent,\n} from '@teambit/component';\nimport { ComponentScopeDirMap, Config } from '@teambit/config';\nimport {\n DependencyLifecycleType,\n DependencyResolverMain,\n PackageManagerInstallOptions,\n ComponentDependency,\n WorkspacePolicyEntry,\n LinkingOptions,\n LinkResults,\n DependencyList,\n} from '@teambit/dependency-resolver';\nimport { EnvsMain, EnvsAspect, EnvServiceList, DEFAULT_ENV } from '@teambit/envs';\nimport { GraphqlMain } from '@teambit/graphql';\nimport { Harmony } from '@teambit/harmony';\nimport { IsolatorMain } from '@teambit/isolator';\nimport { Logger } from '@teambit/logger';\nimport type { ScopeMain } from '@teambit/scope';\nimport { isMatchNamespacePatternItem } from '@teambit/workspace.modules.match-pattern';\nimport { RequireableComponent } from '@teambit/harmony.modules.requireable-component';\nimport { ResolvedComponent } from '@teambit/harmony.modules.resolved-component';\nimport type { VariantsMain } from '@teambit/variants';\nimport { link, importAction } from '@teambit/legacy/dist/api/consumer';\nimport LegacyGraph from '@teambit/legacy/dist/scope/graph/graph';\nimport { ImportOptions } from '@teambit/legacy/dist/consumer/component-ops/import-components';\nimport { NothingToImport } from '@teambit/legacy/dist/consumer/exceptions';\nimport { BitIds } from '@teambit/legacy/dist/bit-id';\nimport { BitId, InvalidScopeName, isValidScopeName } from '@teambit/legacy-bit-id';\nimport { LocalLaneId } from '@teambit/legacy/dist/lane-id/lane-id';\nimport { Consumer, loadConsumer } from '@teambit/legacy/dist/consumer';\nimport { GetBitMapComponentOptions } from '@teambit/legacy/dist/consumer/bit-map/bit-map';\nimport AddComponents from '@teambit/legacy/dist/consumer/component-ops/add-components';\nimport type {\n AddActionResults,\n Warnings,\n} from '@teambit/legacy/dist/consumer/component-ops/add-components/add-components';\nimport { ComponentNotFound } from '@teambit/legacy/dist/scope/exceptions';\nimport ComponentsList from '@teambit/legacy/dist/consumer/component/components-list';\nimport { NoComponentDir } from '@teambit/legacy/dist/consumer/component/exceptions/no-component-dir';\nimport { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { buildOneGraphForComponents } from '@teambit/legacy/dist/scope/graph/components-graph';\nimport { pathIsInside } from '@teambit/legacy/dist/utils';\nimport componentIdToPackageName from '@teambit/legacy/dist/utils/bit/component-id-to-package-name';\nimport { PathOsBased, PathOsBasedRelative, PathOsBasedAbsolute } from '@teambit/legacy/dist/utils/path';\nimport { BitError } from '@teambit/bit-error';\nimport fs from 'fs-extra';\nimport { slice, uniqBy, difference, compact } from 'lodash';\nimport path from 'path';\nimport ConsumerComponent from '@teambit/legacy/dist/consumer/component';\nimport type { ComponentLog } from '@teambit/legacy/dist/scope/models/model-component';\nimport { CompilationInitiator } from '@teambit/compiler';\nimport { ComponentConfigFile } from './component-config-file';\nimport { DependencyTypeNotSupportedInPolicy } from './exceptions';\nimport {\n OnComponentAdd,\n OnComponentChange,\n OnComponentEventResult,\n OnComponentLoad,\n OnComponentRemove,\n SerializableResults,\n} from './on-component-events';\nimport { WorkspaceExtConfig } from './types';\nimport { Watcher } from './watch/watcher';\nimport { ComponentStatus } from './workspace-component/component-status';\nimport {\n OnComponentAddSlot,\n OnComponentChangeSlot,\n OnComponentLoadSlot,\n OnComponentRemoveSlot,\n} from './workspace.provider';\nimport { WorkspaceComponentLoader } from './workspace-component/workspace-component-loader';\nimport { IncorrectEnvAspect } from './exceptions/incorrect-env-aspect';\n\nexport type EjectConfResult = {\n configPath: string;\n};\n\nexport const ComponentAdded = 'componentAdded';\nexport const ComponentChanged = 'componentChanged';\nexport const ComponentRemoved = 'componentRemoved';\n\nexport interface EjectConfOptions {\n propagate?: boolean;\n override?: boolean;\n}\n\nexport type WorkspaceInstallOptions = {\n variants?: string;\n lifecycleType?: DependencyLifecycleType;\n dedupe: boolean;\n import: boolean;\n copyPeerToRuntimeOnRoot?: boolean;\n copyPeerToRuntimeOnComponents?: boolean;\n updateExisting: boolean;\n savePrefix?: string;\n};\n\nexport type WorkspaceLinkOptions = LinkingOptions;\n\nexport type TrackData = {\n rootDir: PathOsBasedRelative; // path relative to the workspace\n componentName?: string; // if empty, it'll be generated from the path\n mainFile?: string; // if empty, attempts will be made to guess the best candidate\n};\n\nexport type TrackResult = { componentName: string; files: string[]; warnings: Warnings };\n\nconst DEFAULT_VENDOR_DIR = 'vendor';\n\n/**\n * API of the Bit Workspace\n */\nexport class Workspace implements ComponentFactory {\n priority = true;\n owner?: string;\n componentsScopeDirsMap: ComponentScopeDirMap;\n componentLoader: WorkspaceComponentLoader;\n constructor(\n /**\n * private pubsub.\n */\n private pubsub: PubsubMain,\n\n private config: WorkspaceExtConfig,\n /**\n * private access to the legacy consumer instance.\n */\n public consumer: Consumer,\n\n /**\n * access to the workspace `Scope` instance\n */\n readonly scope: ScopeMain,\n\n /**\n * access to the `ComponentProvider` instance\n */\n private componentAspect: ComponentMain,\n\n private isolator: IsolatorMain,\n\n private dependencyResolver: DependencyResolverMain,\n\n private variants: VariantsMain,\n\n private aspectLoader: AspectLoaderMain,\n\n private logger: Logger,\n\n private componentList: ComponentsList = new ComponentsList(consumer),\n\n /**\n * private reference to the instance of Harmony.\n */\n private harmony: Harmony,\n\n /**\n * on component load slot.\n */\n public onComponentLoadSlot: OnComponentLoadSlot,\n\n /**\n * on component change slot.\n */\n private onComponentChangeSlot: OnComponentChangeSlot,\n\n private envs: EnvsMain,\n\n /**\n * on component add slot.\n */\n private onComponentAddSlot: OnComponentAddSlot,\n\n private onComponentRemoveSlot: OnComponentRemoveSlot,\n\n private graphql: GraphqlMain\n ) {\n // TODO: refactor - prefer to avoid code inside the constructor.\n this.owner = this.config?.defaultOwner;\n this.componentLoader = new WorkspaceComponentLoader(this, logger, dependencyResolver, envs);\n this.validateConfig();\n }\n\n private validateConfig() {\n const defaultScope = this.config.defaultScope;\n if (this.consumer.isLegacy) return;\n if (!defaultScope) throw new Error('defaultScope is missing');\n if (!isValidScopeName(defaultScope)) throw new InvalidScopeName(defaultScope);\n }\n\n /**\n * watcher api.\n */\n readonly watcher = new Watcher(this, this.pubsub);\n\n /**\n * root path of the Workspace.\n */\n get path() {\n return this.consumer.getPath();\n }\n\n /** get the `node_modules` folder of this workspace */\n private get modulesPath() {\n return path.join(this.path, 'node_modules');\n }\n\n get isLegacy(): boolean {\n return this.consumer.isLegacy;\n }\n\n onComponentLoad(loadFn: OnComponentLoad) {\n this.onComponentLoadSlot.register(loadFn);\n return this;\n }\n\n registerOnComponentChange(onComponentChangeFunc: OnComponentChange) {\n this.onComponentChangeSlot.register(onComponentChangeFunc);\n return this;\n }\n\n registerOnComponentAdd(onComponentAddFunc: OnComponentAdd) {\n this.onComponentAddSlot.register(onComponentAddFunc);\n return this;\n }\n\n registerOnComponentRemove(onComponentRemoveFunc: OnComponentRemove) {\n this.onComponentRemoveSlot.register(onComponentRemoveFunc);\n return this;\n }\n\n /**\n * name of the workspace as configured in either `workspace.json`.\n * defaults to workspace root directory name.\n */\n get name() {\n if (this.config.name) return this.config.name;\n const tokenizedPath = this.path.split('/');\n return tokenizedPath[tokenizedPath.length - 1];\n }\n\n get icon() {\n return this.config.icon;\n }\n\n async hasModifiedDependencies(component: Component) {\n const componentsList = new ComponentsList(this.consumer);\n const listAutoTagPendingComponents = await componentsList.listAutoTagPendingComponents();\n const isAutoTag = listAutoTagPendingComponents.find((consumerComponent) =>\n consumerComponent.id.isEqualWithoutVersion(component.id._legacy)\n );\n if (isAutoTag) return true;\n return false;\n }\n\n /**\n * get Component issues\n */\n getComponentIssues(component: Component): IssuesList | null {\n return component.state._consumer.issues || null;\n }\n\n /**\n * provides status of all components in the workspace.\n */\n async getComponentStatus(component: Component): Promise<ComponentStatus> {\n const status = await this.consumer.getComponentStatusById(component.id._legacy);\n const hasModifiedDependencies = await this.hasModifiedDependencies(component);\n return ComponentStatus.fromLegacy(status, hasModifiedDependencies, component.isOutdated());\n }\n\n /**\n * list all workspace components.\n */\n async list(filter?: { offset: number; limit: number }): Promise<Component[]> {\n const legacyIds = this.consumer.bitMap.getAllIdsAvailableOnLane();\n const ids = await this.resolveMultipleComponentIds(legacyIds);\n return this.getMany(filter && filter.limit ? slice(ids, filter.offset, filter.offset + filter.limit) : ids);\n }\n\n /**\n * list all invalid components.\n * (see the invalid criteria in ConsumerComponent.isComponentInvalidByErrorType())\n */\n async listInvalid(): Promise<InvalidComponent[]> {\n const legacyIds = this.consumer.bitMap.getAllIdsAvailableOnLane();\n const ids = await this.resolveMultipleComponentIds(legacyIds);\n return this.componentLoader.getInvalid(ids);\n }\n\n /**\n * get ids of all workspace components.\n */\n async listIds(): Promise<ComponentID[]> {\n return this.resolveMultipleComponentIds(this.consumer.bitmapIdsFromCurrentLane);\n }\n\n /**\n * Check if a specific id exist in the workspace\n * @param componentId\n */\n async hasId(componentId: ComponentID): Promise<boolean> {\n const ids = await this.listIds();\n const found = ids.find((id) => {\n return id.isEqual(componentId);\n });\n return !!found;\n }\n\n /**\n * whether or not a workspace has a component with the given name\n */\n async hasName(name: string): Promise<boolean> {\n const ids = await this.listIds();\n return Boolean(ids.find((id) => id.fullName === name));\n }\n\n /**\n * Check if a specific id exist in the workspace or in the scope\n * @param componentId\n */\n async hasIdNested(componentId: ComponentID, includeCache = true): Promise<boolean> {\n const found = await this.hasId(componentId);\n if (found) return found;\n return this.scope.hasIdNested(componentId, includeCache);\n }\n\n /**\n * list all modified components in the workspace.\n */\n async modified() {\n const ids: any = await this.componentList.listModifiedComponents(false);\n const componentIds = ids.map(ComponentID.fromLegacy);\n return this.getMany(componentIds);\n }\n\n /**\n * list all new components in the workspace.\n */\n async newComponents() {\n const ids: any = await this.componentList.listNewComponents(false);\n const componentIds = ids.map(ComponentID.fromLegacy);\n return this.getMany(componentIds);\n }\n\n /**\n * get all workspace component-ids, include vendor components.\n * (exclude nested dependencies in case dependencies are saved as components and not packages)\n */\n getAllComponentIds(): Promise<ComponentID[]> {\n const bitIds = this.consumer.bitMap.getAuthoredAndImportedBitIds();\n return this.resolveMultipleComponentIds(bitIds);\n }\n\n async getNewAndModifiedIds(): Promise<ComponentID[]> {\n const ids = await this.componentList.listTagPendingComponents();\n return this.resolveMultipleComponentIds(ids);\n }\n\n async getLogs(id: ComponentID): Promise<ComponentLog[]> {\n return this.scope.getLogs(id);\n }\n\n async getLegacyGraph(ids?: ComponentID[]): Promise<LegacyGraph> {\n if (!ids || ids.length < 1) ids = await this.listIds();\n\n const legacyIds = ids.map((id) => id._legacy);\n\n const legacyGraph = await buildOneGraphForComponents(legacyIds, this.consumer);\n return legacyGraph;\n }\n\n async loadCapsules(bitIds: string[]) {\n // throw new Error(\"Method not implemented.\");\n const components = await this.load(bitIds);\n return components.map((comp) => comp.capsule);\n }\n /**\n * fully load components, including dependency resolution and prepare them for runtime.\n * @todo: remove the string option, use only BitId\n */\n async load(ids: Array<BitId | string>): Promise<ResolvedComponent[]> {\n const componentIds = await this.resolveMultipleComponentIds(ids);\n const components = await this.getMany(componentIds);\n const network = await this.isolator.isolateComponents(components.map((c) => c.id));\n const resolvedComponents = components.map((component) => {\n const capsule = network.graphCapsules.getCapsule(component.id);\n if (!capsule) throw new Error(`unable to find capsule for ${component.id.toString()}`);\n return new ResolvedComponent(component, capsule);\n });\n return resolvedComponents;\n }\n\n public async createAspectList(extensionDataList: ExtensionDataList) {\n const entiresP = extensionDataList.map(async (entry) => {\n return new AspectEntry(await this.resolveComponentId(entry.id), entry);\n });\n\n const entries: AspectEntry[] = await Promise.all(entiresP);\n return this.componentAspect.createAspectListFromEntries(entries);\n }\n\n /**\n * get a component from workspace\n * @param id component ID\n */\n async get(\n componentId: ComponentID,\n forCapsule = false,\n legacyComponent?: ConsumerComponent,\n useCache = true,\n storeInCache = true\n ): Promise<Component> {\n this.logger.debug(`get ${componentId.toString()}`);\n return this.componentLoader.get(componentId, forCapsule, legacyComponent, useCache, storeInCache);\n }\n\n // TODO: @gilad we should refactor this asap into to the envs aspect.\n async getEnvSystemDescriptor(component: Component): Promise<AspectData> {\n const env = this.envs.calculateEnv(component);\n if (env.env.__getDescriptor && typeof env.env.__getDescriptor === 'function') {\n const systemDescriptor = await env.env.__getDescriptor();\n // !important persist services only on the env itself.\n let services: undefined | EnvServiceList;\n if (this.envs.isEnvRegistered(component.id.toString())) services = this.envs.getServices(env);\n const icon = this.aspectLoader.getDescriptor(env.id).icon || env.env.icon;\n\n return {\n type: systemDescriptor.type,\n id: env.id,\n name: env.name,\n icon,\n description: env.description,\n services: services?.toObject(),\n };\n }\n\n return {};\n }\n\n clearCache() {\n this.logger.debug('clearing the workspace and scope caches');\n this.componentLoader.clearCache();\n this.scope.clearCache();\n this.componentList = new ComponentsList(this.consumer);\n }\n\n clearComponentCache(id: ComponentID) {\n this.componentLoader.clearComponentCache(id);\n this.consumer.componentLoader.clearOneComponentCache(id._legacy);\n this.componentList = new ComponentsList(this.consumer);\n }\n\n async triggerOnComponentChange(id: ComponentID, initiator?: CompilationInitiator): Promise<OnComponentEventResult[]> {\n const component = await this.get(id);\n // if a new file was added, upon component-load, its .bitmap entry is updated to include the\n // new file. write these changes to the .bitmap file so then other processes have access to\n // this new file. If the .bitmap wasn't change, it won't do anything.\n await this.writeBitMap();\n const onChangeEntries = this.onComponentChangeSlot.toArray(); // e.g. [ [ 'teambit.bit/compiler', [Function: bound onComponentChange] ] ]\n const results: Array<{ extensionId: string; results: SerializableResults }> = [];\n await mapSeries(onChangeEntries, async ([extension, onChangeFunc]) => {\n const onChangeResult = await onChangeFunc(component, initiator);\n results.push({ extensionId: extension, results: onChangeResult });\n });\n\n // TODO: find way to standardize event names.\n await this.graphql.pubsub.publish(ComponentChanged, { componentChanged: { component } });\n return results;\n }\n\n async triggerOnComponentAdd(id: ComponentID): Promise<OnComponentEventResult[]> {\n const component = await this.get(id);\n const onAddEntries = this.onComponentAddSlot.toArray(); // e.g. [ [ 'teambit.bit/compiler', [Function: bound onComponentChange] ] ]\n const results: Array<{ extensionId: string; results: SerializableResults }> = [];\n await mapSeries(onAddEntries, async ([extension, onAddFunc]) => {\n const onAddResult = await onAddFunc(component);\n results.push({ extensionId: extension, results: onAddResult });\n });\n\n await this.graphql.pubsub.publish(ComponentAdded, { componentAdded: { component } });\n return results;\n }\n\n async triggerOnComponentRemove(id: ComponentID): Promise<OnComponentEventResult[]> {\n const onRemoveEntries = this.onComponentRemoveSlot.toArray(); // e.g. [ [ 'teambit.bit/compiler', [Function: bound onComponentChange] ] ]\n const results: Array<{ extensionId: string; results: SerializableResults }> = [];\n await mapSeries(onRemoveEntries, async ([extension, onRemoveFunc]) => {\n const onRemoveResult = await onRemoveFunc(id);\n results.push({ extensionId: extension, results: onRemoveResult });\n });\n\n await this.graphql.pubsub.publish(ComponentRemoved, { componentRemoved: { componentIds: [id.toObject()] } });\n return results;\n }\n\n getState(id: ComponentID, hash: string) {\n return this.scope.getState(id, hash);\n }\n\n getSnap(id: ComponentID, hash: string) {\n return this.scope.getSnap(id, hash);\n }\n\n getCurrentLaneId(): LocalLaneId {\n return this.consumer.getCurrentLaneId();\n }\n\n getDefaultExtensions(): ExtensionDataList {\n if (!this.config.extensions) {\n return new ExtensionDataList();\n }\n return ExtensionDataList.fromConfigObject(this.config.extensions);\n }\n\n async ejectConfig(id: ComponentID, options: EjectConfOptions): Promise<EjectConfResult> {\n const componentId = await this.resolveComponentId(id);\n const component = await this.scope.get(componentId);\n const aspects = component?.state.aspects\n ? await this.resolveScopeAspectListIds(component?.state.aspects)\n : await this.createAspectList(new ExtensionDataList());\n\n const componentDir = this.componentDir(id, { ignoreVersion: true });\n const componentConfigFile = new ComponentConfigFile(componentId, aspects, options.propagate);\n await componentConfigFile.write(componentDir, { override: options.override });\n return {\n configPath: ComponentConfigFile.composePath(componentDir),\n };\n }\n\n private async resolveScopeAspectListIds(aspectListFromScope: AspectList): Promise<AspectList> {\n const resolvedList = await aspectListFromScope.pmap(async (entry) => {\n if (entry.id.scope !== this.scope.name) {\n return entry;\n }\n const newId = await this.resolveComponentId(entry.id.fullName);\n const newEntry = new AspectEntry(newId, entry.legacy);\n return newEntry;\n });\n return resolvedList;\n }\n\n /**\n * load components into the workspace through a variants pattern.\n * @param pattern variants.\n * @param scope scope name.\n */\n async byPattern(pattern: string, scope = '**'): Promise<Component[]> {\n const ids = await this.listIds();\n const finalPattern = `${scope}/${pattern || '**'}`;\n const targetIds = ids.filter((id) => {\n const spec = isMatchNamespacePatternItem(id.toStringWithoutVersion(), finalPattern);\n return spec.match;\n });\n\n const components = await this.getMany(targetIds);\n return components;\n }\n\n async getMany(ids: Array<ComponentID>, forCapsule = false): Promise<Component[]> {\n return this.componentLoader.getMany(ids, forCapsule);\n }\n\n getManyByLegacy(components: ConsumerComponent[]): Promise<Component[]> {\n return mapSeries(components, async (component) => {\n const id = await this.resolveComponentId(component.id);\n return this.get(id, undefined, component);\n });\n }\n\n /**\n * This will make sure to fetch the objects prior to load them\n * do not use it if you are not sure you need it.\n * It will influence the performance\n * currently it used only for get many of aspects\n * @param ids\n * @param forCapsule\n */\n async importAndGetMany(ids: Array<ComponentID>, forCapsule = false): Promise<Component[]> {\n await this.scope.import(ids);\n return this.componentLoader.getMany(ids, forCapsule);\n }\n\n /**\n * @deprecated use this.track() instead\n * track a new component. (practically, add it to .bitmap).\n *\n * @param componentPaths component paths relative to the workspace dir\n * @param id if not set, will be concluded from the filenames\n * @param main if not set, will try to guess according to some strategies and throws if failed\n * @param override whether add details to an existing component or re-define it\n */\n async add(\n componentPaths: PathOsBasedRelative[],\n id?: string,\n main?: string,\n override = false\n ): Promise<AddActionResults> {\n const addComponent = new AddComponents({ consumer: this.consumer }, { componentPaths, id, main, override });\n const addResults = await addComponent.add();\n // @todo: the legacy commands have `consumer.onDestroy()` on command completion, it writes the\n // .bitmap file. workspace needs a similar mechanism. once done, remove the next line.\n await this.consumer.bitMap.write(this.consumer.componentFsCache);\n return addResults;\n }\n\n /**\n * add a new component to the .bitmap file.\n * this method only adds the records in memory but doesn't persist to the filesystem.\n * to write the .bitmap file once completed, run \"await this.writeBitMap();\"\n */\n async track(trackData: TrackData): Promise<TrackResult> {\n const addComponent = new AddComponents(\n { consumer: this.consumer },\n { componentPaths: [trackData.rootDir], id: trackData.componentName, main: trackData.mainFile, override: false }\n );\n const result = await addComponent.add();\n const addedComponent = result.addedComponents[0];\n const componentName = addedComponent?.id.name || (trackData.componentName as string);\n const files = addedComponent?.files.map((f) => f.relativePath) || [];\n return { componentName, files, warnings: result.warnings };\n }\n\n async write(rootPath: string, component: Component) {\n await Promise.all(\n component.filesystem.files.map(async (file) => {\n const pathToWrite = path.join(this.path, rootPath, file.path);\n await fs.outputFile(pathToWrite, file.contents);\n })\n );\n }\n\n async writeBitMap() {\n await this.consumer.writeBitMap();\n }\n\n /**\n * Get the component root dir in the file system (relative to workspace or full)\n * @param componentId\n * @param relative return the path relative to the workspace or full path\n */\n componentDir(\n componentId: ComponentID,\n bitMapOptions?: GetBitMapComponentOptions,\n options = { relative: false }\n ): PathOsBased {\n return this.componentDirFromLegacyId(componentId._legacy, bitMapOptions, options);\n }\n\n private componentDirFromLegacyId(\n bitId: BitId,\n bitMapOptions?: GetBitMapComponentOptions,\n options = { relative: false }\n ): PathOsBased {\n const componentMap = this.consumer.bitMap.getComponent(bitId, bitMapOptions);\n const relativeComponentDir = componentMap.getComponentDir();\n if (!relativeComponentDir) {\n throw new NoComponentDir(bitId.toString());\n }\n if (options.relative) {\n return relativeComponentDir;\n }\n\n return path.join(this.path, relativeComponentDir);\n }\n\n componentDirToAbsolute(relativeComponentDir: PathOsBasedRelative): PathOsBasedAbsolute {\n return path.join(this.path, relativeComponentDir);\n }\n\n async componentDefaultScope(componentId: ComponentID): Promise<string | undefined> {\n const relativeComponentDir = this.componentDir(componentId, { ignoreVersion: true }, { relative: true });\n return this.componentDefaultScopeFromComponentDirAndName(relativeComponentDir, componentId.fullName);\n }\n\n async componentDefaultScopeFromComponentDirAndName(\n relativeComponentDir: PathOsBasedRelative,\n name: string\n ): Promise<string | undefined> {\n const componentConfigFile = await this.componentConfigFileFromComponentDirAndName(relativeComponentDir, name);\n if (componentConfigFile && componentConfigFile.defaultScope) {\n return componentConfigFile.defaultScope;\n }\n return this.componentDefaultScopeFromComponentDirAndNameWithoutConfigFile(relativeComponentDir, name);\n }\n\n get defaultScope() {\n return this.config.defaultScope;\n }\n\n private async componentDefaultScopeFromComponentDirAndNameWithoutConfigFile(\n relativeComponentDir: PathOsBasedRelative,\n name: string\n ): Promise<string | undefined> {\n const variantConfig = this.variants.byRootDirAndName(relativeComponentDir, name);\n if (variantConfig && variantConfig.defaultScope) {\n return variantConfig.defaultScope;\n }\n const isVendor = this.isVendorComponentByComponentDir(relativeComponentDir);\n if (!isVendor) {\n return this.config.defaultScope;\n }\n return undefined;\n }\n\n /**\n * Calculate the component config based on:\n * the component.json file in the component folder\n * matching pattern in the variants config\n * defaults extensions from workspace config\n *\n * @param {ComponentID} componentId\n * @param {Component} [componentFromScope]\n * @returns {Promise<ExtensionDataList>}\n * @memberof Workspace\n */\n async componentExtensions(componentId: ComponentID, componentFromScope?: Component): Promise<ExtensionDataList> {\n // TODO: consider caching this result\n let configFileExtensions;\n let variantsExtensions;\n let wsDefaultExtensions;\n const mergeFromScope = true;\n const scopeExtensions = componentFromScope?.config?.extensions || new ExtensionDataList();\n\n const componentConfigFile = await this.componentConfigFile(componentId);\n if (componentConfigFile) {\n configFileExtensions = componentConfigFile.aspects.toLegacy();\n // do not merge from scope data when there is component config file\n // mergeFromScope = false;\n }\n const relativeComponentDir = this.componentDir(componentId, { ignoreVersion: true }, { relative: true });\n const variantConfig = this.variants.byRootDirAndName(relativeComponentDir, componentId.fullName);\n if (variantConfig) {\n variantsExtensions = variantConfig.extensions;\n // Do not merge from scope when there is specific variant (which is not *) that match the component\n // if (variantConfig.maxSpecificity > 0) {\n // mergeFromScope = false;\n // }\n }\n const isVendor = this.isVendorComponentByComponentDir(relativeComponentDir);\n if (!isVendor) {\n wsDefaultExtensions = this.getDefaultExtensions();\n }\n // We don't stop on each step because we want to merge the default scope even if propagate=false but the default scope is not defined\n const extensionsToMerge: ExtensionDataList[] = [];\n if (configFileExtensions) {\n extensionsToMerge.push(configFileExtensions);\n }\n let continuePropagating = componentConfigFile?.propagate ?? true;\n if (variantsExtensions && continuePropagating) {\n // Put it in the start to make sure the config file is stronger\n extensionsToMerge.push(variantsExtensions);\n }\n continuePropagating = continuePropagating && (variantConfig?.propagate ?? true);\n // Do not apply default extensions on the default extensions (it will create infinite loop when loading them)\n const isDefaultExtension = wsDefaultExtensions.findExtension(componentId.toString(), true, true);\n if (wsDefaultExtensions && continuePropagating && !isDefaultExtension) {\n // Put it in the start to make sure the config file is stronger\n extensionsToMerge.push(wsDefaultExtensions);\n }\n\n // It's before the scope extensions, since there is no need to resolve extensions from scope they are already resolved\n // await Promise.all(extensionsToMerge.map((extensions) => this.resolveExtensionsList(extensions)));\n\n if (mergeFromScope && continuePropagating) {\n extensionsToMerge.push(scopeExtensions);\n }\n\n // It's important to do this resolution before the merge, otherwise we have issues with extensions\n // coming from scope with local scope name, as opposed to the same extension comes from the workspace with default scope name\n const promises = extensionsToMerge.map((list) => this.resolveExtensionListIds(list));\n await Promise.all(promises);\n\n let mergedExtensions = ExtensionDataList.mergeConfigs(extensionsToMerge).filterRemovedExtensions();\n\n // remove self from merged extensions\n const selfInMergedExtensions = mergedExtensions.findExtension(\n componentId._legacy.toStringWithoutScopeAndVersion(),\n true,\n true\n );\n if (selfInMergedExtensions && selfInMergedExtensions.extensionId) {\n mergedExtensions = mergedExtensions.remove(selfInMergedExtensions.extensionId);\n }\n\n return mergedExtensions;\n }\n\n /**\n * This will mutate the entries with extensionId prop to have resolved legacy id\n * This should be worked on the extension data list not the new aspect list\n * @param extensionList\n */\n private async resolveExtensionListIds(extensionList: ExtensionDataList): Promise<ExtensionDataList> {\n const promises = extensionList.map(async (entry) => {\n if (entry.extensionId) {\n const id = await this.resolveComponentId(entry.extensionId);\n entry.extensionId = id._legacy;\n }\n\n return entry;\n });\n await Promise.all(promises);\n return extensionList;\n }\n\n private isVendorComponentByComponentDir(relativeComponentDir: PathOsBasedRelative): boolean {\n const vendorDir = this.config.vendor?.directory || DEFAULT_VENDOR_DIR;\n if (pathIsInside(relativeComponentDir, vendorDir)) {\n return true;\n }\n // TODO: implement\n return false;\n }\n\n /**\n * return the component config from its folder (component.json)\n * @param componentId\n */\n private async componentConfigFile(id: ComponentID): Promise<ComponentConfigFile | undefined> {\n const relativeComponentDir = this.componentDir(id, { ignoreVersion: true }, { relative: true });\n return this.componentConfigFileFromComponentDirAndName(relativeComponentDir, id.fullName);\n }\n\n private async componentConfigFileFromComponentDirAndName(\n relativeComponentDir: PathOsBasedRelative,\n name: string\n ): Promise<ComponentConfigFile | undefined> {\n let componentConfigFile;\n if (relativeComponentDir) {\n const absComponentDir = this.componentDirToAbsolute(relativeComponentDir);\n const defaultScopeFromVariantsOrWs = await this.componentDefaultScopeFromComponentDirAndNameWithoutConfigFile(\n relativeComponentDir,\n name\n );\n componentConfigFile = await ComponentConfigFile.load(\n absComponentDir,\n this.createAspectList.bind(this),\n defaultScopeFromVariantsOrWs\n );\n }\n\n return componentConfigFile;\n }\n\n async getGraphWithoutCore(components: Component[]) {\n const ids = components.map((component) => component.id._legacy);\n const coreAspectsStringIds = this.aspectLoader.getCoreAspectIds();\n const coreAspectsComponentIds = coreAspectsStringIds.map((id) => BitId.parse(id, true));\n const coreAspectsBitIds = BitIds.fromArray(coreAspectsComponentIds.map((id) => id.changeScope(null)));\n // const aspectsIds = components.reduce((acc, curr) => {\n // const currIds = curr.state.aspects.ids;\n // acc = acc.concat(currIds);\n // return acc;\n // }, [] as any);\n // const otherDependenciesMap = components.reduce((acc, curr) => {\n // // const currIds = curr.state.dependencies.dependencies.map(dep => dep.id.toString());\n // const currMap = curr.state.dependencies.getIdsMap();\n // Object.assign(acc, currMap);\n // return acc;\n // }, {});\n\n // const depsWhichAreNotAspects = difference(Object.keys(otherDependenciesMap), aspectsIds);\n // const depsWhichAreNotAspectsBitIds = depsWhichAreNotAspects.map((strId) => otherDependenciesMap[strId]);\n // We only want to load into the graph components which are aspects and not regular dependencies\n // This come to solve a circular loop when an env aspect use an aspect (as regular dep) and the aspect use the env aspect as its env\n // TODO: @gilad it causes many issues we need to find a better solution. removed for now.\n const ignoredIds = coreAspectsBitIds.concat([]);\n return buildOneGraphForComponents(ids, this.consumer, undefined, BitIds.fromArray(ignoredIds));\n }\n\n /**\n * load aspects from the workspace and if not exists in the workspace, load from the scope.\n * keep in mind that the graph may have circles.\n */\n async loadAspects(ids: string[] = [], throwOnError = false): Promise<void> {\n this.logger.debug(`loading ${ids.length} aspects`);\n const notLoadedIds = ids.filter((id) => !this.aspectLoader.isAspectLoaded(id));\n if (!notLoadedIds.length) return;\n const coreAspectsStringIds = this.aspectLoader.getCoreAspectIds();\n const idsWithoutCore: string[] = difference(notLoadedIds, coreAspectsStringIds);\n const componentIds = await this.resolveMultipleComponentIds(idsWithoutCore);\n const components = await this.importAndGetAspects(componentIds);\n const graph = await this.getGraphWithoutCore(components);\n const allIdsP = graph.nodes().map(async (id) => {\n return this.resolveComponentId(id);\n });\n const allIds = await Promise.all(allIdsP);\n const allComponents = await this.getMany(allIds as ComponentID[]);\n\n const aspects = allComponents.filter((component: Component) => {\n let data = component.config.extensions.findExtension(EnvsAspect.id)?.data;\n if (!data) {\n // TODO: remove this once we re-export old components used to store the data here\n data = component.state.aspects.get('teambit.workspace/workspace');\n }\n\n if (!data) return false;\n if (data.type !== 'aspect' && idsWithoutCore.includes(component.id.toString())) {\n const err = new IncorrectEnvAspect(component.id.toString(), data.type, data.id);\n if (data.id === DEFAULT_ENV) {\n // when cloning a project, or when the node-modules dir is deleted, nothing works and all\n // components are default to the DEFAULT_ENV, which is node-env. we must allow \"bit\n // install\" to prepare the workspace and let the proper the envs to be loaded\n this.logger.error(err.message);\n } else {\n throw err;\n }\n }\n return data.type === 'aspect';\n });\n // no need to filter core aspects as they are not included in the graph\n // here we are trying to load extensions from the workspace.\n const { workspaceComps, scopeComps } = await this.groupComponentsByWorkspaceAndScope(aspects);\n // load the scope first because we might need it for custom envs that extend external aspects\n const scopeIds = scopeComps.map((aspect) => aspect.id.toString());\n const workspaceAspects = await this.requireComponents(workspaceComps);\n const workspaceManifests = await this.aspectLoader.getManifestsFromRequireableExtensions(\n workspaceAspects,\n throwOnError\n );\n const manifestsIds = workspaceManifests.map((m) => m.id);\n\n const scopeManifests = await this.scope.getManifestsGraphRecursively(scopeIds, compact(manifestsIds), throwOnError);\n\n const allManifests = [...scopeManifests, ...workspaceManifests];\n await this.aspectLoader.loadExtensionsByManifests(allManifests, throwOnError);\n }\n\n async resolveAspects(runtimeName?: string, componentIds?: ComponentID[]): Promise<AspectDefinition[]> {\n let missingPaths = false;\n const stringIds: string[] = [];\n const idsToResolve = componentIds ? componentIds.map((id) => id.toString()) : this.harmony.extensionsIds;\n const coreAspectsIds = this.aspectLoader.getCoreAspectIds();\n const userAspectsIds: string[] = difference(idsToResolve, coreAspectsIds);\n const componentIdsToResolve = await this.resolveMultipleComponentIds(userAspectsIds);\n const { workspaceIds, scopeIds } = await this.groupIdsByWorkspaceAndScope(componentIdsToResolve);\n const wsComponents = await this.getMany(workspaceIds);\n const aspectDefs = await this.aspectLoader.resolveAspects(wsComponents, async (component) => {\n stringIds.push(component.id._legacy.toString());\n const localPath = this.getComponentPackagePath(component.state._consumer);\n const isExist = await fs.pathExists(localPath);\n if (!isExist) {\n missingPaths = true;\n }\n\n return {\n aspectPath: localPath,\n runtimePath: runtimeName ? await this.aspectLoader.getRuntimePath(component, localPath, runtimeName) : null,\n };\n });\n\n let scopeAspectDefs: AspectDefinition[] = [];\n if (scopeIds.length) {\n scopeAspectDefs = await this.scope.resolveAspects(runtimeName, scopeIds);\n }\n\n let coreAspectDefs = await Promise.all(\n coreAspectsIds.map(async (coreId) => {\n const rawDef = await getAspectDef(coreId, runtimeName);\n return this.aspectLoader.loadDefinition(rawDef);\n })\n );\n\n // due to lack of workspace and scope runtimes. TODO: fix after adding them.\n if (runtimeName) {\n coreAspectDefs = coreAspectDefs.filter((coreAspect) => {\n return coreAspect.runtimePath;\n });\n }\n\n if (missingPaths) {\n await link(stringIds, false);\n }\n\n const allDefs = aspectDefs.concat(coreAspectDefs).concat(scopeAspectDefs);\n const uniqDefs = uniqBy(allDefs, (def) => `${def.aspectPath}-${def.runtimePath}`);\n let defs = uniqDefs;\n if (runtimeName) {\n defs = defs.filter((def) => def.runtimePath);\n }\n\n return defs;\n }\n\n private async groupIdsByWorkspaceAndScope(\n ids: ComponentID[]\n ): Promise<{ workspaceIds: ComponentID[]; scopeIds: ComponentID[] }> {\n const workspaceIds: ComponentID[] = [];\n const scopeIds: ComponentID[] = [];\n await Promise.all(\n ids.map(async (id) => {\n const existOnWorkspace = await this.hasId(id);\n existOnWorkspace ? workspaceIds.push(id) : scopeIds.push(id);\n })\n );\n return { workspaceIds, scopeIds };\n }\n\n private async groupComponentsByWorkspaceAndScope(\n components: Component[]\n ): Promise<{ workspaceComps: Component[]; scopeComps: Component[] }> {\n const workspaceComps: Component[] = [];\n const scopeComps: Component[] = [];\n await Promise.all(\n components.map(async (component) => {\n const existOnWorkspace = await this.hasId(component.id);\n existOnWorkspace ? workspaceComps.push(component) : scopeComps.push(component);\n })\n );\n return { workspaceComps, scopeComps };\n }\n\n /**\n * Load all unloaded extensions from a list\n * @param extensions list of extensions with config to load\n */\n async loadExtensions(extensions: ExtensionDataList, throwOnError = false): Promise<void> {\n const extensionsIdsP = extensions.map(async (extensionEntry) => {\n // Core extension\n if (!extensionEntry.extensionId) {\n return extensionEntry.stringId as string;\n }\n\n const id = await this.resolveComponentId(extensionEntry.extensionId);\n // return this.resolveComponentId(extensionEntry.extensionId);\n return id.toString();\n });\n const extensionsIds: string[] = await Promise.all(extensionsIdsP);\n const loadedExtensions = this.harmony.extensionsIds;\n const extensionsToLoad = difference(extensionsIds, loadedExtensions);\n if (!extensionsToLoad.length) return;\n await this.loadAspects(extensionsToLoad, throwOnError);\n }\n\n /**\n * Provides a cache folder, unique per key.\n * Return value may be undefined, if workspace folder is unconventional (bare-scope, no node_modules, etc)\n */\n getTempDir(\n /*\n * unique key, i.e. aspect or component id\n */\n id: string\n ) {\n const PREFIX = 'bit';\n const cacheDir = path.join(this.modulesPath, '.cache', PREFIX, id);\n\n // maybe should also check it's a folder and has write permissions\n if (!fs.existsSync(cacheDir)) {\n fs.mkdirSync(cacheDir, { recursive: true });\n }\n\n return cacheDir;\n }\n\n async requireComponents(components: Component[]): Promise<RequireableComponent[]> {\n let missingPaths = false;\n const stringIds: string[] = [];\n const resolveP = components.map(async (component) => {\n stringIds.push(component.id._legacy.toString());\n const localPath = this.getComponentPackagePath(component);\n const isExist = await fs.pathExists(localPath);\n if (!isExist) {\n missingPaths = true;\n }\n\n const requireFunc = async () => {\n const plugins = this.aspectLoader.getPlugins(component, localPath);\n if (plugins.has()) {\n return plugins.load(MainRuntime.name);\n }\n\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const aspect = require(localPath);\n // require aspect runtimes\n const runtimePath = await this.aspectLoader.getRuntimePath(component, localPath, MainRuntime.name);\n // eslint-disable-next-line global-require, import/no-dynamic-require\n if (runtimePath) require(runtimePath);\n return aspect;\n };\n return new RequireableComponent(component, requireFunc);\n });\n const resolved = await Promise.all(resolveP);\n // Make sure to link missing components\n if (missingPaths) {\n await link(stringIds, false);\n }\n return resolved;\n }\n\n private async getComponentsDirectory(ids: ComponentID[]) {\n const components = ids.length ? await this.getMany(ids) : await this.list();\n return ComponentMap.as<string>(components, (component) => this.componentDir(component.id));\n }\n\n /**\n * Install dependencies for all components in the workspace\n *\n * @returns\n * @memberof Workspace\n */\n async install(packages?: string[], options?: WorkspaceInstallOptions) {\n if (packages && packages.length) {\n if (!options?.variants && options?.lifecycleType === 'dev') {\n throw new DependencyTypeNotSupportedInPolicy(options?.lifecycleType);\n }\n this.logger.debug(`installing the following packages: ${packages.join()}`);\n const resolver = this.dependencyResolver.getVersionResolver();\n const resolvedPackagesP = packages.map((packageName) =>\n resolver.resolveRemoteVersion(packageName, {\n rootDir: this.path,\n })\n );\n const resolvedPackages = await Promise.all(resolvedPackagesP);\n const newWorkspacePolicyEntries: WorkspacePolicyEntry[] = [];\n resolvedPackages.forEach((resolvedPackage) => {\n if (resolvedPackage.version) {\n const versionWithPrefix = this.dependencyResolver.getVersionWithSavePrefix(\n resolvedPackage.version,\n options?.savePrefix\n );\n newWorkspacePolicyEntries.push({\n dependencyId: resolvedPackage.packageName,\n value: {\n version: versionWithPrefix,\n },\n lifecycleType: options?.lifecycleType || 'runtime',\n });\n }\n });\n if (!options?.variants) {\n this.dependencyResolver.addToRootPolicy(newWorkspacePolicyEntries, {\n updateExisting: options?.updateExisting ?? false,\n });\n } else {\n // TODO: implement\n }\n await this.dependencyResolver.persistConfig(this.path);\n }\n if (options?.import) {\n this.logger.setStatusLine('importing missing objects');\n await this.importObjects();\n this.logger.consoleSuccess();\n }\n this.logger.console(\n `installing dependencies in workspace using ${chalk.cyan(this.dependencyResolver.getPackageManagerName())}`\n );\n this.logger.debug(`installing dependencies in workspace with options`, options);\n this.clearCache();\n // TODO: pass get install options\n const installer = this.dependencyResolver.getInstaller({});\n const compDirMap = await this.getComponentsDirectory([]);\n const mergedRootPolicy = this.dependencyResolver.getWorkspacePolicy();\n\n const depsFilterFn = await this.generateFilterFnForDepsFromLocalRemote();\n\n const pmInstallOptions: PackageManagerInstallOptions = {\n dedupe: options?.dedupe,\n copyPeerToRuntimeOnRoot: options?.copyPeerToRuntimeOnRoot ?? true,\n copyPeerToRuntimeOnComponents: options?.copyPeerToRuntimeOnComponents ?? false,\n dependencyFilterFn: depsFilterFn,\n };\n await installer.install(this.path, mergedRootPolicy, compDirMap, { installTeambitBit: false }, pmInstallOptions);\n // TODO: this make duplicate\n // this.logger.consoleSuccess();\n // TODO: add the links results to the output\n await this.link({\n linkTeambitBit: true,\n legacyLink: true,\n linkCoreAspects: true,\n linkNestedDepsInNM: !this.isLegacy,\n });\n await this.consumer.componentFsCache.deleteAllDependenciesDataCache();\n return compDirMap;\n }\n\n async link(options?: WorkspaceLinkOptions): Promise<LinkResults> {\n const compDirMap = await this.getComponentsDirectory([]);\n const mergedRootPolicy = this.dependencyResolver.getWorkspacePolicy();\n const linker = this.dependencyResolver.getLinker({\n rootDir: this.path,\n linkingOptions: options,\n });\n const res = await linker.link(this.path, mergedRootPolicy, compDirMap, options);\n return res;\n }\n\n /**\n * Generate a filter to pass to the installer\n * This will filter deps which are come from remotes which defined in scope.json\n * those components comes from local remotes, usually doesn't have a package in a registry\n * so no reason to try to install them (it will fail)\n */\n private async generateFilterFnForDepsFromLocalRemote() {\n // TODO: once scope create a new API for this, replace it with the new one\n const remotes = await this.scope._legacyRemotes();\n return (dependencyList: DependencyList): DependencyList => {\n const filtered = dependencyList.filter((dep) => {\n if (!(dep instanceof ComponentDependency)) {\n return true;\n }\n if (remotes.isHub(dep.componentId.scope)) {\n return true;\n }\n return false;\n });\n return filtered;\n };\n }\n\n /**\n * same as `this.importAndGetMany()` with a specific error handling of ComponentNotFound\n */\n private async importAndGetAspects(componentIds: ComponentID[]): Promise<Component[]> {\n try {\n return await this.importAndGetMany(componentIds);\n } catch (err: any) {\n if (err instanceof ComponentNotFound) {\n const config = this.harmony.get<Config>('teambit.harmony/config');\n const configStr = JSON.stringify(config.workspaceConfig?.raw || {});\n if (configStr.includes(err.id)) {\n throw new BitError(`error: a component \"${err.id}\" was not found\nyour workspace.jsonc has this component-id set. you might want to remove/change it.`);\n }\n }\n\n throw err;\n }\n }\n\n // TODO: replace with a proper import API on the workspace\n private async importObjects() {\n const importOptions: ImportOptions = {\n ids: [],\n verbose: false,\n merge: false,\n objectsOnly: true,\n withEnvironments: false,\n override: false,\n writeDists: false,\n writeConfig: false,\n installNpmPackages: false,\n writePackageJson: false,\n importDependenciesDirectly: false,\n importDependents: false,\n };\n try {\n const res = await importAction({ tester: false, compiler: false }, importOptions, []);\n return res;\n } catch (err: any) {\n // TODO: this is a hack since the legacy throw an error, we should provide a way to not throw this error from the legacy\n if (err instanceof NothingToImport) {\n // Do not write nothing to import warning\n return undefined;\n }\n throw err;\n }\n }\n\n /**\n * this should be rarely in-use.\n * it's currently used by watch extension as a quick workaround to load .bitmap and the components\n */\n async _reloadConsumer() {\n this.consumer = await loadConsumer(this.path, true);\n this.clearCache();\n }\n\n getComponentPackagePath(component: ConsumerComponent | Component) {\n const packageName = componentIdToPackageName(\n component instanceof ConsumerComponent ? component : component.state._consumer\n );\n return path.join(this.modulesPath, packageName);\n }\n\n // TODO: should we return here the dir as it defined (aka components) or with /{name} prefix (as it used in legacy)\n get defaultDirectory(): string {\n return this.config.defaultDirectory;\n }\n\n get legacyDefaultDirectory(): string {\n if (this.defaultDirectory && !this.defaultDirectory.includes('{name}')) {\n return `${this.defaultDirectory}/{name}`;\n }\n return this.defaultDirectory;\n }\n\n /**\n * Transform the id to ComponentId and get the exact id as appear in bitmap\n *\n * @param {(string | ComponentID | BitId)} id\n * @returns {Promise<ComponentID>}\n * @memberof Workspace\n */\n async resolveComponentId(id: string | ComponentID | BitId): Promise<ComponentID> {\n // This is required in case where you have in your workspace a component with the same name as a core aspect\n // let's say you have component called react-native (which is eventually my-org.my-scope/react-native)\n // and you set teambit.react/react-native as your env\n // bit will get here with the string teambit.react/react-native and will try to resolve it from the workspace\n // during this it will find the my-org.my-scope/react-native which is incorrect as the core one doesn't exist in the\n // workspace\n if (this.aspectLoader.isCoreAspect(id.toString())) {\n return ComponentID.fromString(id.toString());\n }\n let legacyId = this.consumer.getParsedIdIfExist(id.toString(), true, true);\n if (!legacyId) {\n try {\n const idWithVersion = id.toString();\n const [idWithoutVersion, version] = id.toString().split('@');\n const _bitMapId = this.consumer.getParsedIdIfExist(idWithoutVersion, false, true);\n // This logic is very specific, and very sensitive for changes please do not touch this without consulting with @ran or @gilad\n // example (partial list) cases which should be handled are:\n // use case 1 - ws component provided with the local scope name:\n // source id : my-scope1/my-name1\n // bitmap res (_id) : my-name1 (comp is tagged but not exported)\n // local scope name : my-scope1\n // scope content : my-name1\n // expected result : my-name1\n // use case 2 - component with same name exist in ws and scope (but with different scope name)\n // source id : my-scope2/my-name1\n // bitmap res (_id) : my-name1 (comp exist in ws but it's actually different component)\n // local scope name : my-scope1\n // scope content : my-scope2/my-name1\n // expected result : my-scope2/my-name1\n // use case 3 - component with same name exist in ws and scope (but with different scope name) - source provided without scope name\n // source id : my-name1\n // bitmap res (_id) : my-name1 (comp exist in ws but it's actually different component)\n // local scope name : my-scope1\n // scope content : my-scope1/my-name1 and my-scope2/my-name1\n // expected result : my-name1 (get the name from the bitmap)\n // use case 4 - component with the same name and different scope are imported into the ws\n // source id : my-name1\n // bitmap res (_id) : my-scope2/my-name1 (comp exist in ws from different scope (imported))\n // local scope name : my-scope1\n // scope content : my-scope2/my-name1\n // expected result : my-scope2/my-name1 (get the name from the bitmap)\n\n // No entry in bitmap at all, search for the original input id\n if (!_bitMapId) {\n return await this.scope.resolveComponentId(id.toString());\n }\n const _bitMapIdWithoutVersion = _bitMapId.toStringWithoutVersion();\n const _bitMapIdWithVersion = _bitMapId.changeVersion(version).toString();\n // The id in the bitmap has prefix which is not in the source id - the bitmap entry has scope name\n // Handle use case 4\n if (_bitMapIdWithoutVersion.endsWith(idWithoutVersion) && _bitMapIdWithoutVersion !== idWithoutVersion) {\n return await this.scope.resolveComponentId(_bitMapIdWithVersion);\n }\n // The id in the bitmap doesn't have scope, the source id has scope\n // Handle use case 2 and use case 1\n if (idWithoutVersion.endsWith(_bitMapIdWithoutVersion) && _bitMapIdWithoutVersion !== idWithoutVersion) {\n if (id.toString().startsWith(this.scope.name)) {\n // Handle use case 1 - the provided id has scope name same as the local scope name\n // we want to send it as it appear in the bitmap\n return await this.scope.resolveComponentId(_bitMapIdWithVersion);\n }\n // Handle use case 2 - the provided id has scope which is not the local scope\n // we want to search by the source id\n return await this.scope.resolveComponentId(idWithVersion);\n }\n // Handle use case 3\n return await this.scope.resolveComponentId(idWithVersion);\n } catch (error: any) {\n legacyId = BitId.parse(id.toString(), true);\n return ComponentID.fromLegacy(legacyId);\n }\n }\n const relativeComponentDir = this.componentDirFromLegacyId(legacyId, undefined, { relative: true });\n const defaultScope = await this.componentDefaultScopeFromComponentDirAndName(\n relativeComponentDir,\n legacyId.toStringWithoutScopeAndVersion()\n );\n return ComponentID.fromLegacy(legacyId, defaultScope);\n }\n\n async resolveMultipleComponentIds(ids: Array<string | ComponentID | BitId>): Promise<ComponentID[]> {\n return Promise.all(ids.map(async (id) => this.resolveComponentId(id)));\n }\n\n /**\n * This will mutate the original extensions list and resolve it's ids\n *\n * @param {ExtensionDataList} extensions\n * @returns {Promise<void[]>}\n * @memberof Workspace\n */\n resolveExtensionsList(extensions: ExtensionDataList): Promise<void[]> {\n const resolveMergedExtensionsP = extensions.map(async (extensionEntry) => {\n if (extensionEntry.extensionId) {\n // const hasVersion = extensionEntry.extensionId.hasVersion();\n // const useBitmapVersion = !hasVersion;\n // const resolvedId = await this.resolveComponentId(extensionEntry.extensionId, true, useBitmapVersion);\n\n // Assuming extensionId always has scope - do not allow extension id without scope\n const resolvedId = await this.resolveComponentId(extensionEntry.extensionId);\n extensionEntry.extensionId = resolvedId._legacy;\n }\n });\n return Promise.all(resolveMergedExtensionsP);\n }\n\n /**\n * This will mutate the original extensions list and make sure all extensions has the ids with the scope / default scope\n *\n * @param {ExtensionDataList} extensions\n * @returns {Promise<void[]>}\n * @memberof Workspace\n */\n addDefaultScopeToExtensionsList(extensions: ExtensionDataList): Promise<void[]> {\n const resolveMergedExtensionsP = extensions.map(async (extensionEntry) => {\n if (extensionEntry.extensionId && !extensionEntry.extensionId.hasScope()) {\n const componentId = ComponentID.fromLegacy(extensionEntry.extensionId);\n const defaultScope = await this.componentDefaultScope(componentId);\n extensionEntry.extensionId = extensionEntry.extensionId.changeScope(defaultScope);\n }\n });\n return Promise.all(resolveMergedExtensionsP);\n }\n}\n\nexport default Workspace;\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { OnComponentRemove, OnComponentLoad } from './on-component-events';
|
|
1
|
+
import { OnComponentChange, OnComponentRemove, OnComponentLoad } from './on-component-events';
|
|
2
2
|
import workspaceProvider from './workspace.provider';
|
|
3
3
|
export declare const WorkspaceMain: {
|
|
4
4
|
name: string;
|
|
5
5
|
runtime: import("@teambit/harmony").RuntimeDefinition;
|
|
6
6
|
dependencies: import("@teambit/harmony").Aspect[];
|
|
7
|
-
slots: (((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<OnComponentLoad>) | ((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<OnComponentRemove>))[];
|
|
7
|
+
slots: (((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<OnComponentLoad>) | ((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<OnComponentChange>) | ((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<OnComponentRemove>))[];
|
|
8
8
|
provider: typeof workspaceProvider;
|
|
9
9
|
defineRuntime: string;
|
|
10
10
|
};
|
package/on-component-events.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { Component, ComponentID, AspectData } from '@teambit/component';
|
|
2
|
+
import { CompilationInitiator } from '@teambit/compiler';
|
|
2
3
|
|
|
3
4
|
export type SerializableResults = { results: any; toString: () => string };
|
|
4
|
-
export type OnComponentChange = (
|
|
5
|
+
export type OnComponentChange = (
|
|
6
|
+
component: Component,
|
|
7
|
+
initiator?: CompilationInitiator
|
|
8
|
+
) => Promise<SerializableResults>;
|
|
5
9
|
export type OnComponentAdd = (component: Component) => Promise<SerializableResults>;
|
|
6
10
|
export type OnComponentRemove = (componentId: ComponentID) => Promise<SerializableResults>;
|
|
7
11
|
export type OnComponentEventResult = { extensionId: string; results: SerializableResults };
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/workspace",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.525",
|
|
4
4
|
"homepage": "https://bit.dev/teambit/workspace/workspace",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.workspace",
|
|
8
8
|
"name": "workspace",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.525"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"chalk": "2.4.2",
|
|
@@ -32,54 +32,54 @@
|
|
|
32
32
|
"@teambit/base-ui.surfaces.split-pane.hover-splitter": "1.0.0",
|
|
33
33
|
"@teambit/base-ui.surfaces.split-pane.split-pane": "1.0.0",
|
|
34
34
|
"@teambit/base-ui.graph.tree.recursive-tree": "1.0.0",
|
|
35
|
-
"@teambit/cli": "0.0.
|
|
36
|
-
"@teambit/isolator": "0.0.
|
|
37
|
-
"@teambit/component-tree": "0.0.
|
|
38
|
-
"@teambit/component.ui.component-status-resolver": "0.0.
|
|
39
|
-
"@teambit/harmony.modules.resolved-component": "0.0.
|
|
40
|
-
"@teambit/dependency-resolver": "0.0.
|
|
41
|
-
"@teambit/logger": "0.0.
|
|
42
|
-
"@teambit/
|
|
43
|
-
"@teambit/
|
|
44
|
-
"@teambit/
|
|
45
|
-
"@teambit/
|
|
46
|
-
"@teambit/
|
|
47
|
-
"@teambit/
|
|
48
|
-
"@teambit/
|
|
49
|
-
"@teambit/
|
|
50
|
-
"@teambit/
|
|
51
|
-
"@teambit/
|
|
52
|
-
"@teambit/bit-
|
|
53
|
-
"@teambit/
|
|
54
|
-
"@teambit/
|
|
55
|
-
"@teambit/
|
|
56
|
-
"@teambit/
|
|
57
|
-
"@teambit/
|
|
58
|
-
"@teambit/
|
|
59
|
-
"@teambit/
|
|
60
|
-
"@teambit/
|
|
61
|
-
"@teambit/
|
|
62
|
-
"@teambit/
|
|
63
|
-
"@teambit/ui-foundation.ui.
|
|
64
|
-
"@teambit/ui-foundation.ui.
|
|
65
|
-
"@teambit/
|
|
66
|
-
"@teambit/
|
|
67
|
-
"@teambit/component-id": "0.0.
|
|
68
|
-
"@teambit/ui-foundation.ui.hooks.use-data-query": "0.0.
|
|
69
|
-
"@teambit/deprecation": "0.0.
|
|
70
|
-
"@teambit/ui-foundation.ui.constants.z-indexes": "0.0.
|
|
71
|
-
"@teambit/ui-foundation.ui.buttons.collapser": "0.0.
|
|
72
|
-
"@teambit/ui-foundation.ui.corner": "0.0.
|
|
73
|
-
"@teambit/ui-foundation.ui.notifications.notification-context": "0.0.
|
|
74
|
-
"@teambit/ui-foundation.ui.top-bar": "0.0.
|
|
75
|
-
"@teambit/design.ui.styles.ellipsis": "0.0.
|
|
76
|
-
"@teambit/design.ui.styles.muted-italic": "0.0.
|
|
77
|
-
"@teambit/ui-foundation.ui.full-loader": "0.0.
|
|
78
|
-
"@teambit/ui-foundation.ui.side-bar": "0.0.
|
|
79
|
-
"@teambit/ui-foundation.ui.tree.drawer": "0.0.
|
|
80
|
-
"@teambit/explorer.ui.gallery.component-grid": "0.0.
|
|
81
|
-
"@teambit/workspace.ui.empty-workspace": "0.0.
|
|
82
|
-
"@teambit/workspace.ui.workspace-component-card": "0.0.
|
|
35
|
+
"@teambit/cli": "0.0.380",
|
|
36
|
+
"@teambit/isolator": "0.0.525",
|
|
37
|
+
"@teambit/component-tree": "0.0.366",
|
|
38
|
+
"@teambit/component.ui.component-status-resolver": "0.0.451",
|
|
39
|
+
"@teambit/harmony.modules.resolved-component": "0.0.445",
|
|
40
|
+
"@teambit/dependency-resolver": "0.0.525",
|
|
41
|
+
"@teambit/logger": "0.0.451",
|
|
42
|
+
"@teambit/compiler": "0.0.525",
|
|
43
|
+
"@teambit/component": "0.0.525",
|
|
44
|
+
"@teambit/graphql": "0.0.525",
|
|
45
|
+
"@teambit/aspect-loader": "0.0.525",
|
|
46
|
+
"@teambit/bundler": "0.0.525",
|
|
47
|
+
"@teambit/envs": "0.0.525",
|
|
48
|
+
"@teambit/pubsub": "0.0.525",
|
|
49
|
+
"@teambit/scope": "0.0.525",
|
|
50
|
+
"@teambit/ui": "0.0.525",
|
|
51
|
+
"@teambit/variants": "0.0.453",
|
|
52
|
+
"@teambit/legacy-bit-id": "0.0.369",
|
|
53
|
+
"@teambit/bit-error": "0.0.366",
|
|
54
|
+
"@teambit/component-issues": "0.0.15",
|
|
55
|
+
"@teambit/config": "0.0.391",
|
|
56
|
+
"@teambit/harmony.modules.requireable-component": "0.0.445",
|
|
57
|
+
"@teambit/workspace.modules.match-pattern": "0.0.447",
|
|
58
|
+
"@teambit/command-bar": "0.0.525",
|
|
59
|
+
"@teambit/design.ui.surfaces.menu.link-item": "0.0.374",
|
|
60
|
+
"@teambit/graph": "0.0.525",
|
|
61
|
+
"@teambit/react-router": "0.0.525",
|
|
62
|
+
"@teambit/sidebar": "0.0.525",
|
|
63
|
+
"@teambit/ui-foundation.ui.main-dropdown": "0.0.447",
|
|
64
|
+
"@teambit/ui-foundation.ui.menu": "0.0.447",
|
|
65
|
+
"@teambit/ui-foundation.ui.react-router.slot-router": "0.0.449",
|
|
66
|
+
"@teambit/toolbox.time.time-format": "0.0.444",
|
|
67
|
+
"@teambit/component-id": "0.0.370",
|
|
68
|
+
"@teambit/ui-foundation.ui.hooks.use-data-query": "0.0.448",
|
|
69
|
+
"@teambit/deprecation": "0.0.525",
|
|
70
|
+
"@teambit/ui-foundation.ui.constants.z-indexes": "0.0.447",
|
|
71
|
+
"@teambit/ui-foundation.ui.buttons.collapser": "0.0.152",
|
|
72
|
+
"@teambit/ui-foundation.ui.corner": "0.0.454",
|
|
73
|
+
"@teambit/ui-foundation.ui.notifications.notification-context": "0.0.448",
|
|
74
|
+
"@teambit/ui-foundation.ui.top-bar": "0.0.449",
|
|
75
|
+
"@teambit/design.ui.styles.ellipsis": "0.0.346",
|
|
76
|
+
"@teambit/design.ui.styles.muted-italic": "0.0.35",
|
|
77
|
+
"@teambit/ui-foundation.ui.full-loader": "0.0.447",
|
|
78
|
+
"@teambit/ui-foundation.ui.side-bar": "0.0.451",
|
|
79
|
+
"@teambit/ui-foundation.ui.tree.drawer": "0.0.447",
|
|
80
|
+
"@teambit/explorer.ui.gallery.component-grid": "0.0.447",
|
|
81
|
+
"@teambit/workspace.ui.empty-workspace": "0.0.449",
|
|
82
|
+
"@teambit/workspace.ui.workspace-component-card": "0.0.450"
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
85
|
"@types/react": "^17.0.8",
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"react-dom": "^16.8.0 || ^17.0.0",
|
|
102
102
|
"react": "^16.8.0 || ^17.0.0"
|
|
103
103
|
},
|
|
104
|
-
"license": "
|
|
104
|
+
"license": "Apache-2.0",
|
|
105
105
|
"bit": {
|
|
106
106
|
"bindingPrefix": "@teambit",
|
|
107
107
|
"env": {},
|
package/watch/watcher.ts
CHANGED
|
@@ -14,6 +14,7 @@ import { ChildProcess } from 'child_process';
|
|
|
14
14
|
import chokidar, { FSWatcher } from 'chokidar';
|
|
15
15
|
import ComponentMap from '@teambit/legacy/dist/consumer/bit-map/component-map';
|
|
16
16
|
import { PathLinux, PathOsBasedAbsolute } from '@teambit/legacy/dist/utils/path';
|
|
17
|
+
import { CompilationInitiator } from '@teambit/compiler';
|
|
17
18
|
import { WorkspaceAspect } from '../';
|
|
18
19
|
import { OnComponentChangeEvent, OnComponentAddEvent, OnComponentRemovedEvent } from '../events';
|
|
19
20
|
import { Workspace } from '../workspace';
|
|
@@ -40,7 +41,7 @@ export class Watcher {
|
|
|
40
41
|
return this.workspace.consumer;
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
async watchAll(opts?: { msgs; verbose?: boolean }) {
|
|
44
|
+
async watchAll(opts?: { msgs; verbose?: boolean; initiator?: CompilationInitiator }) {
|
|
44
45
|
// TODO: run build in the beginning of process (it's work like this in other envs)
|
|
45
46
|
const _verbose = opts?.verbose || false;
|
|
46
47
|
await this.createWatcher();
|
|
@@ -58,7 +59,7 @@ export class Watcher {
|
|
|
58
59
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
59
60
|
watcher.on('change', async (filePath) => {
|
|
60
61
|
const startTime = new Date().getTime();
|
|
61
|
-
const buildResults = (await this.handleChange(filePath)) || [];
|
|
62
|
+
const buildResults = (await this.handleChange(filePath, opts?.initiator)) || [];
|
|
62
63
|
const duration = new Date().getTime() - startTime;
|
|
63
64
|
opts?.msgs?.onChange(filePath, buildResults, _verbose, duration);
|
|
64
65
|
});
|
|
@@ -81,7 +82,7 @@ export class Watcher {
|
|
|
81
82
|
});
|
|
82
83
|
}
|
|
83
84
|
|
|
84
|
-
private async handleChange(filePath: string): Promise<OnComponentEventResult[]> {
|
|
85
|
+
private async handleChange(filePath: string, initiator?: CompilationInitiator): Promise<OnComponentEventResult[]> {
|
|
85
86
|
try {
|
|
86
87
|
if (filePath.endsWith(BIT_MAP)) {
|
|
87
88
|
const buildResults = await this.handleBitmapChanges();
|
|
@@ -94,7 +95,7 @@ export class Watcher {
|
|
|
94
95
|
return this.completeWatch();
|
|
95
96
|
}
|
|
96
97
|
|
|
97
|
-
const buildResults = await this.executeWatchOperationsOnComponent(componentId);
|
|
98
|
+
const buildResults = await this.executeWatchOperationsOnComponent(componentId, true, initiator);
|
|
98
99
|
this.completeWatch();
|
|
99
100
|
return buildResults;
|
|
100
101
|
} catch (err: any) {
|
|
@@ -137,7 +138,8 @@ export class Watcher {
|
|
|
137
138
|
|
|
138
139
|
private async executeWatchOperationsOnComponent(
|
|
139
140
|
componentId: ComponentID,
|
|
140
|
-
isChange = true
|
|
141
|
+
isChange = true,
|
|
142
|
+
initiator?: CompilationInitiator
|
|
141
143
|
): Promise<OnComponentEventResult[]> {
|
|
142
144
|
if (this.isComponentWatchedExternally(componentId)) {
|
|
143
145
|
// update capsule, once done, it automatically triggers the external watcher
|
|
@@ -157,7 +159,7 @@ export class Watcher {
|
|
|
157
159
|
let buildResults: OnComponentEventResult[];
|
|
158
160
|
try {
|
|
159
161
|
buildResults = isChange
|
|
160
|
-
? await this.workspace.triggerOnComponentChange(componentId)
|
|
162
|
+
? await this.workspace.triggerOnComponentChange(componentId, initiator)
|
|
161
163
|
: await this.workspace.triggerOnComponentAdd(componentId);
|
|
162
164
|
} catch (err: any) {
|
|
163
165
|
// do not exist the watch process on errors, just print them
|
package/workspace.ts
CHANGED
|
@@ -61,10 +61,11 @@ import componentIdToPackageName from '@teambit/legacy/dist/utils/bit/component-i
|
|
|
61
61
|
import { PathOsBased, PathOsBasedRelative, PathOsBasedAbsolute } from '@teambit/legacy/dist/utils/path';
|
|
62
62
|
import { BitError } from '@teambit/bit-error';
|
|
63
63
|
import fs from 'fs-extra';
|
|
64
|
-
import { slice, uniqBy, difference } from 'lodash';
|
|
64
|
+
import { slice, uniqBy, difference, compact } from 'lodash';
|
|
65
65
|
import path from 'path';
|
|
66
66
|
import ConsumerComponent from '@teambit/legacy/dist/consumer/component';
|
|
67
67
|
import type { ComponentLog } from '@teambit/legacy/dist/scope/models/model-component';
|
|
68
|
+
import { CompilationInitiator } from '@teambit/compiler';
|
|
68
69
|
import { ComponentConfigFile } from './component-config-file';
|
|
69
70
|
import { DependencyTypeNotSupportedInPolicy } from './exceptions';
|
|
70
71
|
import {
|
|
@@ -467,7 +468,7 @@ export class Workspace implements ComponentFactory {
|
|
|
467
468
|
this.componentList = new ComponentsList(this.consumer);
|
|
468
469
|
}
|
|
469
470
|
|
|
470
|
-
async triggerOnComponentChange(id: ComponentID): Promise<OnComponentEventResult[]> {
|
|
471
|
+
async triggerOnComponentChange(id: ComponentID, initiator?: CompilationInitiator): Promise<OnComponentEventResult[]> {
|
|
471
472
|
const component = await this.get(id);
|
|
472
473
|
// if a new file was added, upon component-load, its .bitmap entry is updated to include the
|
|
473
474
|
// new file. write these changes to the .bitmap file so then other processes have access to
|
|
@@ -476,7 +477,7 @@ export class Workspace implements ComponentFactory {
|
|
|
476
477
|
const onChangeEntries = this.onComponentChangeSlot.toArray(); // e.g. [ [ 'teambit.bit/compiler', [Function: bound onComponentChange] ] ]
|
|
477
478
|
const results: Array<{ extensionId: string; results: SerializableResults }> = [];
|
|
478
479
|
await mapSeries(onChangeEntries, async ([extension, onChangeFunc]) => {
|
|
479
|
-
const onChangeResult = await onChangeFunc(component);
|
|
480
|
+
const onChangeResult = await onChangeFunc(component, initiator);
|
|
480
481
|
results.push({ extensionId: extension, results: onChangeResult });
|
|
481
482
|
});
|
|
482
483
|
|
|
@@ -930,10 +931,17 @@ export class Workspace implements ComponentFactory {
|
|
|
930
931
|
const { workspaceComps, scopeComps } = await this.groupComponentsByWorkspaceAndScope(aspects);
|
|
931
932
|
// load the scope first because we might need it for custom envs that extend external aspects
|
|
932
933
|
const scopeIds = scopeComps.map((aspect) => aspect.id.toString());
|
|
933
|
-
await this.scope.loadAspects(scopeIds, throwOnError);
|
|
934
|
-
|
|
935
934
|
const workspaceAspects = await this.requireComponents(workspaceComps);
|
|
936
|
-
await this.aspectLoader.
|
|
935
|
+
const workspaceManifests = await this.aspectLoader.getManifestsFromRequireableExtensions(
|
|
936
|
+
workspaceAspects,
|
|
937
|
+
throwOnError
|
|
938
|
+
);
|
|
939
|
+
const manifestsIds = workspaceManifests.map((m) => m.id);
|
|
940
|
+
|
|
941
|
+
const scopeManifests = await this.scope.getManifestsGraphRecursively(scopeIds, compact(manifestsIds), throwOnError);
|
|
942
|
+
|
|
943
|
+
const allManifests = [...scopeManifests, ...workspaceManifests];
|
|
944
|
+
await this.aspectLoader.loadExtensionsByManifests(allManifests, throwOnError);
|
|
937
945
|
}
|
|
938
946
|
|
|
939
947
|
async resolveAspects(runtimeName?: string, componentIds?: ComponentID[]): Promise<AspectDefinition[]> {
|
|
@@ -1075,6 +1083,11 @@ export class Workspace implements ComponentFactory {
|
|
|
1075
1083
|
}
|
|
1076
1084
|
|
|
1077
1085
|
const requireFunc = async () => {
|
|
1086
|
+
const plugins = this.aspectLoader.getPlugins(component, localPath);
|
|
1087
|
+
if (plugins.has()) {
|
|
1088
|
+
return plugins.load(MainRuntime.name);
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1078
1091
|
// eslint-disable-next-line global-require, import/no-dynamic-require
|
|
1079
1092
|
const aspect = require(localPath);
|
|
1080
1093
|
// require aspect runtimes
|
|
Binary file
|