@teambit/workspace 0.0.801 → 0.0.804

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/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export type { WatchOptions } from './watch/watcher';
7
7
  export { CheckTypes } from './watch/check-types';
8
8
  export * from './events';
9
9
  export type { WorkspaceUI } from './workspace.ui.runtime';
10
- export type { SerializableResults, OnComponentEventResult } from './on-component-events';
10
+ export type { SerializableResults, OnComponentLoad, OnComponentEventResult } from './on-component-events';
11
11
  export { ComponentStatus } from './workspace-component';
12
12
  export { WorkspaceModelComponent } from './ui/workspace/workspace-model';
13
13
  export { WorkspaceContext } from './ui/workspace/workspace-context';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["WorkspaceAspect"],"sources":["index.ts"],"sourcesContent":["import { WorkspaceAspect } from './workspace.aspect';\n// eslint-disable-next-line import/prefer-default-export\nexport type { default as Workspace, ExtensionsOrigin } from './workspace';\n// TODO: change to module path once track the utils folder\nexport type { ResolvedComponent } from '@teambit/harmony.modules.resolved-component';\nexport type { AlreadyExistsError as ComponentConfigFileAlreadyExistsError } from './component-config-file';\nexport type { WorkspaceMain } from './workspace.main.runtime';\nexport type { WatchOptions } from './watch/watcher';\nexport { CheckTypes } from './watch/check-types';\nexport * from './events';\nexport type { WorkspaceUI } from './workspace.ui.runtime';\nexport type { SerializableResults, OnComponentEventResult } from './on-component-events';\nexport { ComponentStatus } from './workspace-component';\nexport { WorkspaceModelComponent } from './ui/workspace/workspace-model';\nexport { WorkspaceContext } from './ui/workspace/workspace-context';\nexport type { WorkspaceComponent } from './workspace-component';\n\nexport { WorkspaceAspect };\nexport default WorkspaceAspect;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAQA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;eAIeA,4B"}
1
+ {"version":3,"names":["WorkspaceAspect"],"sources":["index.ts"],"sourcesContent":["import { WorkspaceAspect } from './workspace.aspect';\n// eslint-disable-next-line import/prefer-default-export\nexport type { default as Workspace, ExtensionsOrigin } from './workspace';\n// TODO: change to module path once track the utils folder\nexport type { ResolvedComponent } from '@teambit/harmony.modules.resolved-component';\nexport type { AlreadyExistsError as ComponentConfigFileAlreadyExistsError } from './component-config-file';\nexport type { WorkspaceMain } from './workspace.main.runtime';\nexport type { WatchOptions } from './watch/watcher';\nexport { CheckTypes } from './watch/check-types';\nexport * from './events';\nexport type { WorkspaceUI } from './workspace.ui.runtime';\nexport type { SerializableResults, OnComponentLoad, OnComponentEventResult } from './on-component-events';\nexport { ComponentStatus } from './workspace-component';\nexport { WorkspaceModelComponent } from './ui/workspace/workspace-model';\nexport { WorkspaceContext } from './ui/workspace/workspace-context';\nexport type { WorkspaceComponent } from './workspace-component';\n\nexport { WorkspaceAspect };\nexport default WorkspaceAspect;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAQA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;eAIeA,4B"}
@@ -1,5 +1,6 @@
1
1
  import { Component, ComponentID, AspectData } from '@teambit/component';
2
2
  import { CompilationInitiator } from '@teambit/compiler';
3
+ import { ComponentLoadOptions } from '@teambit/legacy/dist/consumer/component/component-loader';
3
4
  export declare type SerializableResults = {
4
5
  results: any;
5
6
  toString: () => string;
@@ -11,4 +12,4 @@ export declare type OnComponentEventResult = {
11
12
  extensionId: string;
12
13
  results: SerializableResults;
13
14
  };
14
- export declare type OnComponentLoad = (component: Component) => Promise<AspectData | undefined>;
15
+ export declare type OnComponentLoad = (component: Component, loadOpts?: ComponentLoadOptions) => Promise<AspectData | undefined>;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["on-component-events.ts"],"sourcesContent":["import { Component, ComponentID, AspectData } from '@teambit/component';\nimport { CompilationInitiator } from '@teambit/compiler';\n\nexport type SerializableResults = { results: any; toString: () => string };\nexport type OnComponentChange = (\n component: Component,\n files: string[],\n initiator?: CompilationInitiator\n) => Promise<SerializableResults>;\nexport type OnComponentAdd = (component: Component, files: string[]) => Promise<SerializableResults>;\nexport type OnComponentRemove = (componentId: ComponentID) => Promise<SerializableResults>;\nexport type OnComponentEventResult = { extensionId: string; results: SerializableResults };\n\nexport type OnComponentLoad = (component: Component) => Promise<AspectData | undefined>;\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["on-component-events.ts"],"sourcesContent":["import { Component, ComponentID, AspectData } from '@teambit/component';\nimport { CompilationInitiator } from '@teambit/compiler';\nimport { ComponentLoadOptions } from '@teambit/legacy/dist/consumer/component/component-loader';\n\nexport type SerializableResults = { results: any; toString: () => string };\nexport type OnComponentChange = (\n component: Component,\n files: string[],\n initiator?: CompilationInitiator\n) => Promise<SerializableResults>;\nexport type OnComponentAdd = (component: Component, files: string[]) => Promise<SerializableResults>;\nexport type OnComponentRemove = (componentId: ComponentID) => Promise<SerializableResults>;\nexport type OnComponentEventResult = { extensionId: string; results: SerializableResults };\n\nexport type OnComponentLoad = (\n component: Component,\n loadOpts?: ComponentLoadOptions\n) => Promise<AspectData | undefined>;\n"],"mappings":""}
@@ -3,6 +3,7 @@ import ConsumerComponent from '@teambit/legacy/dist/consumer/component';
3
3
  import { DependencyResolverMain } from '@teambit/dependency-resolver';
4
4
  import { Logger } from '@teambit/logger';
5
5
  import { EnvsMain } from '@teambit/envs';
6
+ import { ComponentLoadOptions } from '@teambit/legacy/dist/consumer/component/component-loader';
6
7
  import { Workspace } from '../workspace';
7
8
  export declare class WorkspaceComponentLoader {
8
9
  private workspace;
@@ -14,7 +15,7 @@ export declare class WorkspaceComponentLoader {
14
15
  constructor(workspace: Workspace, logger: Logger, dependencyResolver: DependencyResolverMain, envs: EnvsMain);
15
16
  getMany(ids: Array<ComponentID>, forCapsule?: boolean): Promise<Component[]>;
16
17
  getInvalid(ids: Array<ComponentID>): Promise<InvalidComponent[]>;
17
- get(componentId: ComponentID, forCapsule?: boolean, legacyComponent?: ConsumerComponent, useCache?: boolean, storeInCache?: boolean): Promise<Component>;
18
+ get(componentId: ComponentID, forCapsule?: boolean, legacyComponent?: ConsumerComponent, useCache?: boolean, storeInCache?: boolean, loadOpts?: ComponentLoadOptions): Promise<Component>;
18
19
  getIfExist(componentId: ComponentID): Promise<Component | undefined>;
19
20
  private addMultipleEnvsIssueIfNeeded;
20
21
  clearCache(): void;
@@ -4,6 +4,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
 
5
5
  require("core-js/modules/es.array.iterator.js");
6
6
 
7
+ require("core-js/modules/es.array.sort.js");
8
+
7
9
  require("core-js/modules/es.promise.js");
8
10
 
9
11
  Object.defineProperty(exports, "__esModule", {
@@ -252,10 +254,10 @@ class WorkspaceComponentLoader {
252
254
  return errors;
253
255
  }
254
256
 
255
- async get(componentId, forCapsule = false, legacyComponent, useCache = true, storeInCache = true) {
257
+ async get(componentId, forCapsule = false, legacyComponent, useCache = true, storeInCache = true, loadOpts) {
256
258
  const bitIdWithVersion = (0, _utils().getLatestVersionNumber)(this.workspace.consumer.bitmapIdsFromCurrentLane, componentId._legacy);
257
259
  const id = bitIdWithVersion.version ? componentId.changeVersion(bitIdWithVersion.version) : componentId;
258
- const fromCache = this.getFromCache(id, forCapsule);
260
+ const fromCache = this.getFromCache(id, forCapsule, loadOpts);
259
261
 
260
262
  if (fromCache && useCache) {
261
263
  return fromCache;
@@ -264,12 +266,12 @@ class WorkspaceComponentLoader {
264
266
  const consumerComponent = legacyComponent || (await this.getConsumerComponent(id, forCapsule)); // in case of out-of-sync, the id may changed during the load process
265
267
 
266
268
  const updatedId = consumerComponent ? _component().ComponentID.fromLegacy(consumerComponent.id, id.scope) : id;
267
- const component = await this.loadOne(updatedId, consumerComponent);
269
+ const component = await this.loadOne(updatedId, consumerComponent, loadOpts);
268
270
 
269
271
  if (storeInCache) {
270
272
  this.addMultipleEnvsIssueIfNeeded(component); // it's in storeInCache block, otherwise, it wasn't fully loaded
271
273
 
272
- this.saveInCache(component, forCapsule);
274
+ this.saveInCache(component, forCapsule, loadOpts);
273
275
  }
274
276
 
275
277
  return component;
@@ -305,11 +307,21 @@ class WorkspaceComponentLoader {
305
307
 
306
308
  clearComponentCache(id) {
307
309
  const idStr = id.toString();
308
- this.componentsCache.delete(idStr);
309
- this.componentsCacheForCapsule.delete(idStr);
310
+
311
+ for (const cacheKey of this.componentsCache.keys()) {
312
+ if (cacheKey === idStr || cacheKey.startsWith(`${idStr}:`)) {
313
+ this.componentsCache.delete(cacheKey);
314
+ }
315
+ }
316
+
317
+ for (const cacheKey of this.componentsCacheForCapsule.keys()) {
318
+ if (cacheKey === idStr || cacheKey.startsWith(`${idStr}:`)) {
319
+ this.componentsCacheForCapsule.delete(cacheKey);
320
+ }
321
+ }
310
322
  }
311
323
 
312
- async loadOne(id, consumerComponent) {
324
+ async loadOne(id, consumerComponent, loadOpts) {
313
325
  const componentFromScope = await this.workspace.scope.get(id);
314
326
 
315
327
  if (!consumerComponent) {
@@ -334,17 +346,19 @@ class WorkspaceComponentLoader {
334
346
  // componentFromScope.state = state;
335
347
  // const workspaceComponent = WorkspaceComponent.fromComponent(componentFromScope, this.workspace);
336
348
  const workspaceComponent = new (_workspaceComponent().WorkspaceComponent)(componentFromScope.id, componentFromScope.head, state, componentFromScope.tags, this.workspace);
337
- return this.executeLoadSlot(workspaceComponent);
349
+ return this.executeLoadSlot(workspaceComponent, loadOpts);
338
350
  }
339
351
 
340
- return this.executeLoadSlot(this.newComponentFromState(id, state));
352
+ return this.executeLoadSlot(this.newComponentFromState(id, state), loadOpts);
341
353
  }
342
354
 
343
- saveInCache(component, forCapsule) {
355
+ saveInCache(component, forCapsule, loadOpts) {
356
+ const cacheKey = createComponentCacheKey(component.id, loadOpts);
357
+
344
358
  if (forCapsule) {
345
- this.componentsCacheForCapsule.set(component.id.toString(), component);
359
+ this.componentsCacheForCapsule.set(cacheKey, component);
346
360
  } else {
347
- this.componentsCache.set(component.id.toString(), component);
361
+ this.componentsCache.set(cacheKey, component);
348
362
  }
349
363
  }
350
364
  /**
@@ -356,8 +370,9 @@ class WorkspaceComponentLoader {
356
370
  */
357
371
 
358
372
 
359
- getFromCache(id, forCapsule) {
360
- const fromCache = forCapsule ? this.componentsCacheForCapsule.get(id.toString()) : this.componentsCache.get(id.toString());
373
+ getFromCache(id, forCapsule, loadOpts) {
374
+ const cacheKey = createComponentCacheKey(id, loadOpts);
375
+ const fromCache = forCapsule ? this.componentsCacheForCapsule.get(cacheKey) : this.componentsCache.get(cacheKey);
361
376
 
362
377
  if (fromCache && fromCache.id._legacy.isEqual(id._legacy)) {
363
378
  return fromCache;
@@ -388,10 +403,10 @@ class WorkspaceComponentLoader {
388
403
  return err instanceof _exceptions2().ComponentNotFound || err instanceof _exceptions().MissingBitMapComponent || err instanceof _componentNotFoundInPath().default;
389
404
  }
390
405
 
391
- async executeLoadSlot(component) {
406
+ async executeLoadSlot(component, loadOpts) {
392
407
  const entries = this.workspace.onComponentLoadSlot.toArray();
393
408
  const promises = entries.map(async ([extension, onLoad]) => {
394
- const data = await onLoad(component);
409
+ const data = await onLoad(component, loadOpts);
395
410
  return this.upsertExtensionData(component, extension, data);
396
411
  }); // Special load events which runs from the workspace but should run from the correct aspect
397
412
  // TODO: remove this once those extensions dependent on workspace
@@ -438,4 +453,12 @@ class WorkspaceComponentLoader {
438
453
 
439
454
  exports.WorkspaceComponentLoader = WorkspaceComponentLoader;
440
455
 
456
+ function createComponentCacheKey(id, loadOpts) {
457
+ return `${id.toString()}:${JSON.stringify(sortKeys(loadOpts !== null && loadOpts !== void 0 ? loadOpts : {}))}`;
458
+ }
459
+
460
+ function sortKeys(obj) {
461
+ return (0, _lodash().fromPairs)(Object.entries(obj).sort(([k1], [k2]) => k1.localeCompare(k2)));
462
+ }
463
+
441
464
  //# sourceMappingURL=workspace-component-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["WorkspaceComponentLoader","constructor","workspace","logger","dependencyResolver","envs","componentsCache","createInMemoryCache","maxSize","getMaxSizeForComponents","componentsCacheForCapsule","getMany","ids","forCapsule","idsWithoutEmpty","compact","errors","longProcessLogger","createLongProcessLogger","length","componentsP","mapSeries","id","logProgress","toString","get","catch","err","isComponentNotExistsError","push","undefined","components","forEach","console","warn","filteredComponents","end","getInvalid","consumer","loadComponent","_legacy","ConsumerComponent","isComponentInvalidByErrorType","componentId","legacyComponent","useCache","storeInCache","bitIdWithVersion","getLatestVersionNumber","bitmapIdsFromCurrentLane","version","changeVersion","fromCache","getFromCache","consumerComponent","getConsumerComponent","updatedId","ComponentID","fromLegacy","scope","component","loadOne","addMultipleEnvsIssueIfNeeded","saveInCache","getIfExist","getAllEnvsConfiguredOnComponent","envIds","uniq","map","env","state","issues","getOrCreate","IssuesClasses","MultipleEnvs","data","clearCache","deleteAll","clearComponentCache","idStr","delete","componentFromScope","MissingBitMapComponent","extensions","componentExtensions","extensionsFromConsumerComponent","ExtensionDataList","extensionDataList","mergeConfigs","filterRemovedExtensions","State","Config","mainFile","createAspectList","ComponentFS","fromVinyls","files","dependencies","workspaceComponent","WorkspaceComponent","head","tags","executeLoadSlot","newComponentFromState","set","isEqual","loadComponentForCapsule","debug","name","message","ComponentNotFound","ComponentNotFoundInPath","entries","onComponentLoadSlot","toArray","promises","extension","onLoad","upsertExtensionData","envsData","getEnvSystemDescriptor","policy","mergeVariantPolicies","config","extractDepsFromLegacy","depResolverData","serialize","EnvsAspect","DependencyResolverAspect","Promise","all","updatedAspectList","aspects","TagMap","existingExtension","findExtension","Object","assign","getDataEntry","ExtensionDataEntry"],"sources":["workspace-component-loader.ts"],"sourcesContent":["import { Component, ComponentFS, ComponentID, Config, InvalidComponent, State, TagMap } from '@teambit/component';\nimport { BitId } from '@teambit/legacy-bit-id';\nimport { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport mapSeries from 'p-map-series';\nimport { compact, uniq } from 'lodash';\nimport ConsumerComponent from '@teambit/legacy/dist/consumer/component';\nimport { MissingBitMapComponent } from '@teambit/legacy/dist/consumer/bit-map/exceptions';\nimport { getLatestVersionNumber } from '@teambit/legacy/dist/utils';\nimport { IssuesClasses } from '@teambit/component-issues';\nimport { ComponentNotFound } from '@teambit/legacy/dist/scope/exceptions';\nimport { DependencyResolverAspect, DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { Logger } from '@teambit/logger';\nimport { EnvsAspect, EnvsMain } from '@teambit/envs';\nimport { ExtensionDataEntry } from '@teambit/legacy/dist/consumer/config';\nimport { getMaxSizeForComponents, InMemoryCache } from '@teambit/legacy/dist/cache/in-memory-cache';\nimport { createInMemoryCache } from '@teambit/legacy/dist/cache/cache-factory';\nimport ComponentNotFoundInPath from '@teambit/legacy/dist/consumer/component/exceptions/component-not-found-in-path';\nimport { Workspace } from '../workspace';\nimport { WorkspaceComponent } from './workspace-component';\n\nexport class WorkspaceComponentLoader {\n private componentsCache: InMemoryCache<Component>; // cache loaded components\n private componentsCacheForCapsule: InMemoryCache<Component>; // cache loaded components for capsule, must not use the cache for the workspace\n constructor(\n private workspace: Workspace,\n private logger: Logger,\n private dependencyResolver: DependencyResolverMain,\n private envs: EnvsMain\n ) {\n this.componentsCache = createInMemoryCache({ maxSize: getMaxSizeForComponents() });\n this.componentsCacheForCapsule = createInMemoryCache({ maxSize: getMaxSizeForComponents() });\n }\n\n async getMany(ids: Array<ComponentID>, forCapsule = false): Promise<Component[]> {\n const idsWithoutEmpty = compact(ids);\n const errors: { id: ComponentID; err: Error }[] = [];\n const longProcessLogger = this.logger.createLongProcessLogger('loading components', ids.length);\n const componentsP = mapSeries(idsWithoutEmpty, async (id: ComponentID) => {\n longProcessLogger.logProgress(id.toString());\n return this.get(id, forCapsule).catch((err) => {\n if (this.isComponentNotExistsError(err)) {\n errors.push({\n id,\n err,\n });\n return undefined;\n }\n throw err;\n });\n });\n const components = await componentsP;\n errors.forEach((err) => {\n this.logger.console(`failed loading component ${err.id.toString()}, see full error in debug.log file`);\n this.logger.warn(`failed loading component ${err.id.toString()}`, err.err);\n });\n // remove errored components\n const filteredComponents: Component[] = compact(components);\n longProcessLogger.end();\n return filteredComponents;\n }\n\n async getInvalid(ids: Array<ComponentID>): Promise<InvalidComponent[]> {\n const idsWithoutEmpty = compact(ids);\n const errors: InvalidComponent[] = [];\n const longProcessLogger = this.logger.createLongProcessLogger('loading components', ids.length);\n await mapSeries(idsWithoutEmpty, async (id: ComponentID) => {\n longProcessLogger.logProgress(id.toString());\n try {\n await this.workspace.consumer.loadComponent(id._legacy);\n } catch (err: any) {\n if (ConsumerComponent.isComponentInvalidByErrorType(err)) {\n errors.push({\n id,\n err,\n });\n return;\n }\n throw err;\n }\n });\n return errors;\n }\n\n async get(\n componentId: ComponentID,\n forCapsule = false,\n legacyComponent?: ConsumerComponent,\n useCache = true,\n storeInCache = true\n ): Promise<Component> {\n const bitIdWithVersion: BitId = getLatestVersionNumber(\n this.workspace.consumer.bitmapIdsFromCurrentLane,\n componentId._legacy\n );\n const id = bitIdWithVersion.version ? componentId.changeVersion(bitIdWithVersion.version) : componentId;\n const fromCache = this.getFromCache(id, forCapsule);\n if (fromCache && useCache) {\n return fromCache;\n }\n const consumerComponent = legacyComponent || (await this.getConsumerComponent(id, forCapsule));\n // in case of out-of-sync, the id may changed during the load process\n const updatedId = consumerComponent ? ComponentID.fromLegacy(consumerComponent.id, id.scope) : id;\n const component = await this.loadOne(updatedId, consumerComponent);\n if (storeInCache) {\n this.addMultipleEnvsIssueIfNeeded(component); // it's in storeInCache block, otherwise, it wasn't fully loaded\n this.saveInCache(component, forCapsule);\n }\n return component;\n }\n\n async getIfExist(componentId: ComponentID) {\n try {\n return await this.get(componentId);\n } catch (err: any) {\n if (this.isComponentNotExistsError(err)) {\n return undefined;\n }\n throw err;\n }\n }\n\n private addMultipleEnvsIssueIfNeeded(component: Component) {\n const envs = this.envs.getAllEnvsConfiguredOnComponent(component);\n const envIds = uniq(envs.map((env) => env.id));\n if (envIds.length < 2) {\n return;\n }\n component.state.issues.getOrCreate(IssuesClasses.MultipleEnvs).data = envIds;\n }\n\n clearCache() {\n this.componentsCache.deleteAll();\n this.componentsCacheForCapsule.deleteAll();\n }\n clearComponentCache(id: ComponentID) {\n const idStr = id.toString();\n this.componentsCache.delete(idStr);\n this.componentsCacheForCapsule.delete(idStr);\n }\n\n private async loadOne(id: ComponentID, consumerComponent?: ConsumerComponent) {\n const componentFromScope = await this.workspace.scope.get(id);\n if (!consumerComponent) {\n if (!componentFromScope) throw new MissingBitMapComponent(id.toString());\n return componentFromScope;\n }\n const { extensions } = await this.workspace.componentExtensions(id, componentFromScope);\n const extensionsFromConsumerComponent = consumerComponent.extensions || new ExtensionDataList();\n // Merge extensions added by the legacy code in memory (for example data of dependency resolver)\n const extensionDataList = ExtensionDataList.mergeConfigs([\n extensionsFromConsumerComponent,\n extensions,\n ]).filterRemovedExtensions();\n\n // temporarily mutate consumer component extensions until we remove all direct access from legacy to extensions data\n // TODO: remove this once we remove all direct access from legacy code to extensions data\n consumerComponent.extensions = extensionDataList;\n\n const state = new State(\n new Config(consumerComponent.mainFile, extensionDataList),\n await this.workspace.createAspectList(extensionDataList),\n ComponentFS.fromVinyls(consumerComponent.files),\n consumerComponent.dependencies,\n consumerComponent\n );\n if (componentFromScope) {\n // Removed by @gilad. do not mutate the component from the scope\n // componentFromScope.state = state;\n // const workspaceComponent = WorkspaceComponent.fromComponent(componentFromScope, this.workspace);\n const workspaceComponent = new WorkspaceComponent(\n componentFromScope.id,\n componentFromScope.head,\n state,\n componentFromScope.tags,\n this.workspace\n );\n return this.executeLoadSlot(workspaceComponent);\n }\n return this.executeLoadSlot(this.newComponentFromState(id, state));\n }\n\n private saveInCache(component: Component, forCapsule: boolean): void {\n if (forCapsule) {\n this.componentsCacheForCapsule.set(component.id.toString(), component);\n } else {\n this.componentsCache.set(component.id.toString(), component);\n }\n }\n\n /**\n * make sure that not only the id-str match, but also the legacy-id.\n * this is needed because the ComponentID.toString() is the same whether or not the legacy-id has\n * scope-name, as it includes the defaultScope if the scope is empty.\n * as a result, when out-of-sync is happening and the id is changed to include scope-name in the\n * legacy-id, the component is the cache has the old id.\n */\n private getFromCache(id: ComponentID, forCapsule: boolean): Component | undefined {\n const fromCache = forCapsule\n ? this.componentsCacheForCapsule.get(id.toString())\n : this.componentsCache.get(id.toString());\n if (fromCache && fromCache.id._legacy.isEqual(id._legacy)) {\n return fromCache;\n }\n return undefined;\n }\n\n private async getConsumerComponent(id: ComponentID, forCapsule = false): Promise<ConsumerComponent | undefined> {\n try {\n return forCapsule\n ? // eslint-disable-next-line @typescript-eslint/return-await\n await this.workspace.consumer.loadComponentForCapsule(id._legacy)\n : // eslint-disable-next-line @typescript-eslint/return-await\n await this.workspace.consumer.loadComponent(id._legacy);\n } catch (err: any) {\n // don't return undefined for any error. otherwise, if the component is invalid (e.g. main\n // file is missing) it returns the model component later unexpectedly, or if it's new, it\n // shows MissingBitMapComponent error incorrectly.\n if (this.isComponentNotExistsError(err)) {\n this.logger.debug(\n `failed loading component \"${id.toString()}\" from the workspace due to \"${err.name}\" error\\n${err.message}`\n );\n return undefined;\n }\n throw err;\n }\n }\n\n private isComponentNotExistsError(err: Error): boolean {\n return (\n err instanceof ComponentNotFound ||\n err instanceof MissingBitMapComponent ||\n err instanceof ComponentNotFoundInPath\n );\n }\n\n private async executeLoadSlot(component: Component) {\n const entries = this.workspace.onComponentLoadSlot.toArray();\n const promises = entries.map(async ([extension, onLoad]) => {\n const data = await onLoad(component);\n return this.upsertExtensionData(component, extension, data);\n });\n\n // Special load events which runs from the workspace but should run from the correct aspect\n // TODO: remove this once those extensions dependent on workspace\n const envsData = await this.workspace.getEnvSystemDescriptor(component);\n\n // Move to deps resolver main runtime once we switch ws<> deps resolver direction\n const policy = await this.dependencyResolver.mergeVariantPolicies(component.config.extensions);\n const dependencies = await this.dependencyResolver.extractDepsFromLegacy(component, policy);\n\n const depResolverData = {\n dependencies,\n policy: policy.serialize(),\n };\n\n promises.push(this.upsertExtensionData(component, EnvsAspect.id, envsData));\n promises.push(this.upsertExtensionData(component, DependencyResolverAspect.id, depResolverData));\n\n await Promise.all(promises);\n\n // Update the aspect list to have changes happened during the on load slot (new data added above)\n const updatedAspectList = await this.workspace.createAspectList(component.state.config.extensions);\n component.state.aspects = updatedAspectList;\n return component;\n }\n\n private newComponentFromState(id: ComponentID, state: State): Component {\n return new WorkspaceComponent(id, null, state, new TagMap(), this.workspace);\n }\n\n private async upsertExtensionData(component: Component, extension: string, data: any) {\n const existingExtension = component.state.config.extensions.findExtension(extension);\n if (existingExtension && data) {\n // Only merge top level of extension data\n Object.assign(existingExtension.data, data);\n return;\n }\n component.state.config.extensions.push(await this.getDataEntry(extension, data));\n }\n\n private async getDataEntry(extension: string, data: { [key: string]: any }): Promise<ExtensionDataEntry> {\n // TODO: @gilad we need to refactor the extension data entry api.\n return new ExtensionDataEntry(undefined, undefined, extension, undefined, data);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["WorkspaceComponentLoader","constructor","workspace","logger","dependencyResolver","envs","componentsCache","createInMemoryCache","maxSize","getMaxSizeForComponents","componentsCacheForCapsule","getMany","ids","forCapsule","idsWithoutEmpty","compact","errors","longProcessLogger","createLongProcessLogger","length","componentsP","mapSeries","id","logProgress","toString","get","catch","err","isComponentNotExistsError","push","undefined","components","forEach","console","warn","filteredComponents","end","getInvalid","consumer","loadComponent","_legacy","ConsumerComponent","isComponentInvalidByErrorType","componentId","legacyComponent","useCache","storeInCache","loadOpts","bitIdWithVersion","getLatestVersionNumber","bitmapIdsFromCurrentLane","version","changeVersion","fromCache","getFromCache","consumerComponent","getConsumerComponent","updatedId","ComponentID","fromLegacy","scope","component","loadOne","addMultipleEnvsIssueIfNeeded","saveInCache","getIfExist","getAllEnvsConfiguredOnComponent","envIds","uniq","map","env","state","issues","getOrCreate","IssuesClasses","MultipleEnvs","data","clearCache","deleteAll","clearComponentCache","idStr","cacheKey","keys","startsWith","delete","componentFromScope","MissingBitMapComponent","extensions","componentExtensions","extensionsFromConsumerComponent","ExtensionDataList","extensionDataList","mergeConfigs","filterRemovedExtensions","State","Config","mainFile","createAspectList","ComponentFS","fromVinyls","files","dependencies","workspaceComponent","WorkspaceComponent","head","tags","executeLoadSlot","newComponentFromState","createComponentCacheKey","set","isEqual","loadComponentForCapsule","debug","name","message","ComponentNotFound","ComponentNotFoundInPath","entries","onComponentLoadSlot","toArray","promises","extension","onLoad","upsertExtensionData","envsData","getEnvSystemDescriptor","policy","mergeVariantPolicies","config","extractDepsFromLegacy","depResolverData","serialize","EnvsAspect","DependencyResolverAspect","Promise","all","updatedAspectList","aspects","TagMap","existingExtension","findExtension","Object","assign","getDataEntry","ExtensionDataEntry","JSON","stringify","sortKeys","obj","fromPairs","sort","k1","k2","localeCompare"],"sources":["workspace-component-loader.ts"],"sourcesContent":["import { Component, ComponentFS, ComponentID, Config, InvalidComponent, State, TagMap } from '@teambit/component';\nimport { BitId } from '@teambit/legacy-bit-id';\nimport { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport mapSeries from 'p-map-series';\nimport { compact, fromPairs, uniq } from 'lodash';\nimport ConsumerComponent from '@teambit/legacy/dist/consumer/component';\nimport { MissingBitMapComponent } from '@teambit/legacy/dist/consumer/bit-map/exceptions';\nimport { getLatestVersionNumber } from '@teambit/legacy/dist/utils';\nimport { IssuesClasses } from '@teambit/component-issues';\nimport { ComponentNotFound } from '@teambit/legacy/dist/scope/exceptions';\nimport { DependencyResolverAspect, DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { Logger } from '@teambit/logger';\nimport { EnvsAspect, EnvsMain } from '@teambit/envs';\nimport { ExtensionDataEntry } from '@teambit/legacy/dist/consumer/config';\nimport { getMaxSizeForComponents, InMemoryCache } from '@teambit/legacy/dist/cache/in-memory-cache';\nimport { createInMemoryCache } from '@teambit/legacy/dist/cache/cache-factory';\nimport ComponentNotFoundInPath from '@teambit/legacy/dist/consumer/component/exceptions/component-not-found-in-path';\nimport { ComponentLoadOptions } from '@teambit/legacy/dist/consumer/component/component-loader';\nimport { Workspace } from '../workspace';\nimport { WorkspaceComponent } from './workspace-component';\n\nexport class WorkspaceComponentLoader {\n private componentsCache: InMemoryCache<Component>; // cache loaded components\n private componentsCacheForCapsule: InMemoryCache<Component>; // cache loaded components for capsule, must not use the cache for the workspace\n constructor(\n private workspace: Workspace,\n private logger: Logger,\n private dependencyResolver: DependencyResolverMain,\n private envs: EnvsMain\n ) {\n this.componentsCache = createInMemoryCache({ maxSize: getMaxSizeForComponents() });\n this.componentsCacheForCapsule = createInMemoryCache({ maxSize: getMaxSizeForComponents() });\n }\n\n async getMany(ids: Array<ComponentID>, forCapsule = false): Promise<Component[]> {\n const idsWithoutEmpty = compact(ids);\n const errors: { id: ComponentID; err: Error }[] = [];\n const longProcessLogger = this.logger.createLongProcessLogger('loading components', ids.length);\n const componentsP = mapSeries(idsWithoutEmpty, async (id: ComponentID) => {\n longProcessLogger.logProgress(id.toString());\n return this.get(id, forCapsule).catch((err) => {\n if (this.isComponentNotExistsError(err)) {\n errors.push({\n id,\n err,\n });\n return undefined;\n }\n throw err;\n });\n });\n const components = await componentsP;\n errors.forEach((err) => {\n this.logger.console(`failed loading component ${err.id.toString()}, see full error in debug.log file`);\n this.logger.warn(`failed loading component ${err.id.toString()}`, err.err);\n });\n // remove errored components\n const filteredComponents: Component[] = compact(components);\n longProcessLogger.end();\n return filteredComponents;\n }\n\n async getInvalid(ids: Array<ComponentID>): Promise<InvalidComponent[]> {\n const idsWithoutEmpty = compact(ids);\n const errors: InvalidComponent[] = [];\n const longProcessLogger = this.logger.createLongProcessLogger('loading components', ids.length);\n await mapSeries(idsWithoutEmpty, async (id: ComponentID) => {\n longProcessLogger.logProgress(id.toString());\n try {\n await this.workspace.consumer.loadComponent(id._legacy);\n } catch (err: any) {\n if (ConsumerComponent.isComponentInvalidByErrorType(err)) {\n errors.push({\n id,\n err,\n });\n return;\n }\n throw err;\n }\n });\n return errors;\n }\n\n async get(\n componentId: ComponentID,\n forCapsule = false,\n legacyComponent?: ConsumerComponent,\n useCache = true,\n storeInCache = true,\n loadOpts?: ComponentLoadOptions\n ): Promise<Component> {\n const bitIdWithVersion: BitId = getLatestVersionNumber(\n this.workspace.consumer.bitmapIdsFromCurrentLane,\n componentId._legacy\n );\n const id = bitIdWithVersion.version ? componentId.changeVersion(bitIdWithVersion.version) : componentId;\n const fromCache = this.getFromCache(id, forCapsule, loadOpts);\n if (fromCache && useCache) {\n return fromCache;\n }\n const consumerComponent = legacyComponent || (await this.getConsumerComponent(id, forCapsule));\n // in case of out-of-sync, the id may changed during the load process\n const updatedId = consumerComponent ? ComponentID.fromLegacy(consumerComponent.id, id.scope) : id;\n const component = await this.loadOne(updatedId, consumerComponent, loadOpts);\n if (storeInCache) {\n this.addMultipleEnvsIssueIfNeeded(component); // it's in storeInCache block, otherwise, it wasn't fully loaded\n this.saveInCache(component, forCapsule, loadOpts);\n }\n return component;\n }\n\n async getIfExist(componentId: ComponentID) {\n try {\n return await this.get(componentId);\n } catch (err: any) {\n if (this.isComponentNotExistsError(err)) {\n return undefined;\n }\n throw err;\n }\n }\n\n private addMultipleEnvsIssueIfNeeded(component: Component) {\n const envs = this.envs.getAllEnvsConfiguredOnComponent(component);\n const envIds = uniq(envs.map((env) => env.id));\n if (envIds.length < 2) {\n return;\n }\n component.state.issues.getOrCreate(IssuesClasses.MultipleEnvs).data = envIds;\n }\n\n clearCache() {\n this.componentsCache.deleteAll();\n this.componentsCacheForCapsule.deleteAll();\n }\n clearComponentCache(id: ComponentID) {\n const idStr = id.toString();\n for (const cacheKey of this.componentsCache.keys()) {\n if (cacheKey === idStr || cacheKey.startsWith(`${idStr}:`)) {\n this.componentsCache.delete(cacheKey);\n }\n }\n for (const cacheKey of this.componentsCacheForCapsule.keys()) {\n if (cacheKey === idStr || cacheKey.startsWith(`${idStr}:`)) {\n this.componentsCacheForCapsule.delete(cacheKey);\n }\n }\n }\n\n private async loadOne(id: ComponentID, consumerComponent?: ConsumerComponent, loadOpts?: ComponentLoadOptions) {\n const componentFromScope = await this.workspace.scope.get(id);\n if (!consumerComponent) {\n if (!componentFromScope) throw new MissingBitMapComponent(id.toString());\n return componentFromScope;\n }\n const { extensions } = await this.workspace.componentExtensions(id, componentFromScope);\n const extensionsFromConsumerComponent = consumerComponent.extensions || new ExtensionDataList();\n // Merge extensions added by the legacy code in memory (for example data of dependency resolver)\n const extensionDataList = ExtensionDataList.mergeConfigs([\n extensionsFromConsumerComponent,\n extensions,\n ]).filterRemovedExtensions();\n\n // temporarily mutate consumer component extensions until we remove all direct access from legacy to extensions data\n // TODO: remove this once we remove all direct access from legacy code to extensions data\n consumerComponent.extensions = extensionDataList;\n\n const state = new State(\n new Config(consumerComponent.mainFile, extensionDataList),\n await this.workspace.createAspectList(extensionDataList),\n ComponentFS.fromVinyls(consumerComponent.files),\n consumerComponent.dependencies,\n consumerComponent\n );\n if (componentFromScope) {\n // Removed by @gilad. do not mutate the component from the scope\n // componentFromScope.state = state;\n // const workspaceComponent = WorkspaceComponent.fromComponent(componentFromScope, this.workspace);\n const workspaceComponent = new WorkspaceComponent(\n componentFromScope.id,\n componentFromScope.head,\n state,\n componentFromScope.tags,\n this.workspace\n );\n return this.executeLoadSlot(workspaceComponent, loadOpts);\n }\n return this.executeLoadSlot(this.newComponentFromState(id, state), loadOpts);\n }\n\n private saveInCache(component: Component, forCapsule: boolean, loadOpts?: ComponentLoadOptions): void {\n const cacheKey = createComponentCacheKey(component.id, loadOpts);\n if (forCapsule) {\n this.componentsCacheForCapsule.set(cacheKey, component);\n } else {\n this.componentsCache.set(cacheKey, component);\n }\n }\n\n /**\n * make sure that not only the id-str match, but also the legacy-id.\n * this is needed because the ComponentID.toString() is the same whether or not the legacy-id has\n * scope-name, as it includes the defaultScope if the scope is empty.\n * as a result, when out-of-sync is happening and the id is changed to include scope-name in the\n * legacy-id, the component is the cache has the old id.\n */\n private getFromCache(id: ComponentID, forCapsule: boolean, loadOpts?: ComponentLoadOptions): Component | undefined {\n const cacheKey = createComponentCacheKey(id, loadOpts);\n const fromCache = forCapsule ? this.componentsCacheForCapsule.get(cacheKey) : this.componentsCache.get(cacheKey);\n if (fromCache && fromCache.id._legacy.isEqual(id._legacy)) {\n return fromCache;\n }\n return undefined;\n }\n\n private async getConsumerComponent(id: ComponentID, forCapsule = false): Promise<ConsumerComponent | undefined> {\n try {\n return forCapsule\n ? // eslint-disable-next-line @typescript-eslint/return-await\n await this.workspace.consumer.loadComponentForCapsule(id._legacy)\n : // eslint-disable-next-line @typescript-eslint/return-await\n await this.workspace.consumer.loadComponent(id._legacy);\n } catch (err: any) {\n // don't return undefined for any error. otherwise, if the component is invalid (e.g. main\n // file is missing) it returns the model component later unexpectedly, or if it's new, it\n // shows MissingBitMapComponent error incorrectly.\n if (this.isComponentNotExistsError(err)) {\n this.logger.debug(\n `failed loading component \"${id.toString()}\" from the workspace due to \"${err.name}\" error\\n${err.message}`\n );\n return undefined;\n }\n throw err;\n }\n }\n\n private isComponentNotExistsError(err: Error): boolean {\n return (\n err instanceof ComponentNotFound ||\n err instanceof MissingBitMapComponent ||\n err instanceof ComponentNotFoundInPath\n );\n }\n\n private async executeLoadSlot(component: Component, loadOpts?: ComponentLoadOptions) {\n const entries = this.workspace.onComponentLoadSlot.toArray();\n const promises = entries.map(async ([extension, onLoad]) => {\n const data = await onLoad(component, loadOpts);\n return this.upsertExtensionData(component, extension, data);\n });\n\n // Special load events which runs from the workspace but should run from the correct aspect\n // TODO: remove this once those extensions dependent on workspace\n const envsData = await this.workspace.getEnvSystemDescriptor(component);\n\n // Move to deps resolver main runtime once we switch ws<> deps resolver direction\n const policy = await this.dependencyResolver.mergeVariantPolicies(component.config.extensions);\n const dependencies = await this.dependencyResolver.extractDepsFromLegacy(component, policy);\n\n const depResolverData = {\n dependencies,\n policy: policy.serialize(),\n };\n\n promises.push(this.upsertExtensionData(component, EnvsAspect.id, envsData));\n promises.push(this.upsertExtensionData(component, DependencyResolverAspect.id, depResolverData));\n\n await Promise.all(promises);\n\n // Update the aspect list to have changes happened during the on load slot (new data added above)\n const updatedAspectList = await this.workspace.createAspectList(component.state.config.extensions);\n component.state.aspects = updatedAspectList;\n return component;\n }\n\n private newComponentFromState(id: ComponentID, state: State): Component {\n return new WorkspaceComponent(id, null, state, new TagMap(), this.workspace);\n }\n\n private async upsertExtensionData(component: Component, extension: string, data: any) {\n const existingExtension = component.state.config.extensions.findExtension(extension);\n if (existingExtension && data) {\n // Only merge top level of extension data\n Object.assign(existingExtension.data, data);\n return;\n }\n component.state.config.extensions.push(await this.getDataEntry(extension, data));\n }\n\n private async getDataEntry(extension: string, data: { [key: string]: any }): Promise<ExtensionDataEntry> {\n // TODO: @gilad we need to refactor the extension data entry api.\n return new ExtensionDataEntry(undefined, undefined, extension, undefined, data);\n }\n}\n\nfunction createComponentCacheKey(id: ComponentID, loadOpts?: ComponentLoadOptions): string {\n return `${id.toString()}:${JSON.stringify(sortKeys(loadOpts ?? {}))}`;\n}\n\nfunction sortKeys(obj: Object) {\n return fromPairs(Object.entries(obj).sort(([k1], [k2]) => k1.localeCompare(k2)));\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { PubsubMain } from '@teambit/pubsub';
2
2
  import { IssuesList } from '@teambit/component-issues';
3
3
  import type { AspectLoaderMain, AspectDefinition } from '@teambit/aspect-loader';
4
- import { ComponentMain, Component, ComponentFactory, ComponentID, ComponentMap, AspectList, AspectData, InvalidComponent } from '@teambit/component';
4
+ import { ComponentMain, Component, ComponentFactory, ComponentID, ComponentMap, AspectList, AspectData, InvalidComponent, ResolveAspectsOptions } from '@teambit/component';
5
5
  import { ComponentScopeDirMap } from '@teambit/config';
6
6
  import { WorkspaceDependencyLifecycleType, DependencyResolverMain, LinkingOptions, LinkResults } from '@teambit/dependency-resolver';
7
7
  import { EnvsMain } from '@teambit/envs';
@@ -26,6 +26,7 @@ import ConsumerComponent from '@teambit/legacy/dist/consumer/component';
26
26
  import type { ComponentLog } from '@teambit/legacy/dist/scope/models/model-component';
27
27
  import { CompilationInitiator } from '@teambit/compiler';
28
28
  import { Lane } from '@teambit/legacy/dist/scope/models';
29
+ import { ComponentLoadOptions } from '@teambit/legacy/dist/consumer/component/component-loader';
29
30
  import { OnComponentAdd, OnComponentChange, OnComponentEventResult, OnComponentLoad, OnComponentRemove } from './on-component-events';
30
31
  import { WorkspaceExtConfig } from './types';
31
32
  import { Watcher, WatchOptions } from './watch/watcher';
@@ -250,7 +251,7 @@ export declare class Workspace implements ComponentFactory {
250
251
  * get a component from workspace
251
252
  * @param id component ID
252
253
  */
253
- get(componentId: ComponentID, forCapsule?: boolean, legacyComponent?: ConsumerComponent, useCache?: boolean, storeInCache?: boolean): Promise<Component>;
254
+ get(componentId: ComponentID, forCapsule?: boolean, legacyComponent?: ConsumerComponent, useCache?: boolean, storeInCache?: boolean, loadOpts?: ComponentLoadOptions): Promise<Component>;
254
255
  getEnvSystemDescriptor(component: Component): Promise<AspectData>;
255
256
  clearCache(): void;
256
257
  clearComponentCache(id: ComponentID): void;
@@ -294,7 +295,7 @@ export declare class Workspace implements ComponentFactory {
294
295
  getComponentsByUserInput(all?: boolean, pattern?: string, includeDependents?: boolean): Promise<Component[]>;
295
296
  getComponentsUsingEnv(env: string, ignoreVersion?: boolean, throwIfNotFound?: boolean): Promise<Component[]>;
296
297
  getMany(ids: Array<ComponentID>, forCapsule?: boolean): Promise<Component[]>;
297
- getManyByLegacy(components: ConsumerComponent[]): Promise<Component[]>;
298
+ getManyByLegacy(components: ConsumerComponent[], loadOpts?: ComponentLoadOptions): Promise<Component[]>;
298
299
  /**
299
300
  * don't throw an error if the component was not found, simply return undefined.
300
301
  */
@@ -418,7 +419,7 @@ export declare class Workspace implements ComponentFactory {
418
419
  * type. the nodes content is the Component object.
419
420
  */
420
421
  buildOneGraphForComponents(ids: BitId[], ignoreIds?: BitIds, shouldIgnoreFunc?: ShouldIgnoreFunc): Promise<LegacyGraph>;
421
- resolveAspects(runtimeName?: string, componentIds?: ComponentID[], excludeCore?: boolean): Promise<AspectDefinition[]>;
422
+ resolveAspects(runtimeName?: string, componentIds?: ComponentID[], opts?: ResolveAspectsOptions): Promise<AspectDefinition[]>;
422
423
  private groupIdsByWorkspaceAndScope;
423
424
  private groupComponentsByWorkspaceAndScope;
424
425
  /**
@@ -481,7 +482,7 @@ export declare class Workspace implements ComponentFactory {
481
482
  * it's currently used by watch extension as a quick workaround to load .bitmap and the components
482
483
  */
483
484
  _reloadConsumer(): Promise<void>;
484
- getComponentPackagePath(component: ConsumerComponent | Component): string;
485
+ getComponentPackagePath(component: Component): string;
485
486
  get defaultDirectory(): string;
486
487
  get legacyDefaultDirectory(): string;
487
488
  /**
package/dist/workspace.js CHANGED
@@ -349,16 +349,6 @@ function _path2() {
349
349
  return data;
350
350
  }
351
351
 
352
- function _component2() {
353
- const data = _interopRequireDefault(require("@teambit/legacy/dist/consumer/component"));
354
-
355
- _component2 = function () {
356
- return data;
357
- };
358
-
359
- return data;
360
- }
361
-
362
352
  function _scopeComponentsImporter() {
363
353
  const data = _interopRequireDefault(require("@teambit/legacy/dist/scope/component-ops/scope-components-importer"));
364
354
 
@@ -499,7 +489,10 @@ function _workspace() {
499
489
  return data;
500
490
  }
501
491
 
502
- /* eslint-disable max-lines */
492
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
493
+
494
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2().default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
495
+
503
496
  const AspectSpecificField = '__specific';
504
497
  exports.AspectSpecificField = AspectSpecificField;
505
498
  const ComponentAdded = 'componentAdded';
@@ -843,9 +836,9 @@ class Workspace {
843
836
  */
844
837
 
845
838
 
846
- async get(componentId, forCapsule = false, legacyComponent, useCache = true, storeInCache = true) {
839
+ async get(componentId, forCapsule = false, legacyComponent, useCache = true, storeInCache = true, loadOpts) {
847
840
  this.logger.debug(`get ${componentId.toString()}`);
848
- const component = await this.componentLoader.get(componentId, forCapsule, legacyComponent, useCache, storeInCache); // When loading a component if it's an env make sure to load it as aspect as well
841
+ const component = await this.componentLoader.get(componentId, forCapsule, legacyComponent, useCache, storeInCache, loadOpts); // When loading a component if it's an env make sure to load it as aspect as well
849
842
  // We only want to try load it as aspect if it's the first time we load the component
850
843
 
851
844
  const tryLoadAsAspect = this.componentLoadedSelfAsAspects.get(component.id.toString()) === undefined; // const config = this.harmony.get<ConfigMain>('teambit.harmony/config');
@@ -1168,10 +1161,10 @@ the following envs are used in this workspace: ${availableEnvs.join(', ')}`);
1168
1161
  return this.componentLoader.getMany(ids, forCapsule);
1169
1162
  }
1170
1163
 
1171
- getManyByLegacy(components) {
1164
+ getManyByLegacy(components, loadOpts) {
1172
1165
  return (0, _pMapSeries().default)(components, async component => {
1173
1166
  const id = await this.resolveComponentId(component.id);
1174
- return this.get(id, undefined, component);
1167
+ return this.get(id, undefined, component, true, true, loadOpts);
1175
1168
  });
1176
1169
  }
1177
1170
  /**
@@ -1941,7 +1934,14 @@ needed-for: ${neededFor || '<unknown>'}`);
1941
1934
  return graphFromFsBuilder.buildGraph(ids);
1942
1935
  }
1943
1936
 
1944
- async resolveAspects(runtimeName, componentIds, excludeCore = false) {
1937
+ async resolveAspects(runtimeName, componentIds, opts) {
1938
+ const defaultOpts = {
1939
+ excludeCore: false,
1940
+ requestedOnly: false
1941
+ };
1942
+
1943
+ const mergedOpts = _objectSpread(_objectSpread({}, defaultOpts), opts);
1944
+
1945
1945
  let missingPaths = false;
1946
1946
  const stringIds = [];
1947
1947
  const idsToResolve = componentIds ? componentIds.map(id => id.toString()) : this.harmony.extensionsIds;
@@ -1955,7 +1955,7 @@ needed-for: ${neededFor || '<unknown>'}`);
1955
1955
  const wsComponents = await this.getMany(workspaceIds);
1956
1956
  const aspectDefs = await this.aspectLoader.resolveAspects(wsComponents, async component => {
1957
1957
  stringIds.push(component.id._legacy.toString());
1958
- const localPath = this.getComponentPackagePath(component.state._consumer);
1958
+ const localPath = this.getComponentPackagePath(component);
1959
1959
  const isExist = await _fsExtra().default.pathExists(localPath);
1960
1960
 
1961
1961
  if (!isExist) {
@@ -1990,14 +1990,14 @@ needed-for: ${neededFor || '<unknown>'}`);
1990
1990
 
1991
1991
  const allDefs = aspectDefs.concat(coreAspectDefs).concat(scopeAspectDefs);
1992
1992
  const ids = idsToResolve.map(idStr => _component().ComponentID.fromString(idStr).toStringWithoutVersion());
1993
- const afterExclusion = excludeCore ? allDefs.filter(def => {
1993
+ const afterExclusion = mergedOpts.excludeCore ? allDefs.filter(def => {
1994
1994
  const isCore = coreAspectDefs.find(coreId => def.getId === coreId.getId);
1995
1995
 
1996
1996
  const id = _component().ComponentID.fromString(def.getId || '');
1997
1997
 
1998
1998
  const isTarget = ids.includes(id.toStringWithoutVersion());
1999
1999
  if (isTarget) return true;
2000
- return isCore && isTarget;
2000
+ return !isCore;
2001
2001
  }) : allDefs;
2002
2002
  const uniqDefs = (0, _lodash().uniqBy)(afterExclusion, def => `${def.aspectPath}-${def.runtimePath}`);
2003
2003
  let defs = uniqDefs;
@@ -2006,6 +2006,15 @@ needed-for: ${neededFor || '<unknown>'}`);
2006
2006
  defs = defs.filter(def => def.runtimePath);
2007
2007
  }
2008
2008
 
2009
+ if (componentIds && componentIds.length && mergedOpts.requestedOnly) {
2010
+ const componentIdsString = componentIds.map(id => id.toString());
2011
+ defs = defs.filter(def => {
2012
+ var _def$component;
2013
+
2014
+ return def.id && componentIdsString.includes(def.id) || def.component && componentIdsString.includes((_def$component = def.component) === null || _def$component === void 0 ? void 0 : _def$component.id.toString());
2015
+ });
2016
+ }
2017
+
2009
2018
  return defs;
2010
2019
  }
2011
2020
 
@@ -2314,6 +2323,18 @@ needed-for: ${neededFor || '<unknown>'}`);
2314
2323
 
2315
2324
  this.logger.console(`installing dependencies in workspace using ${_chalk().default.cyan(this.dependencyResolver.getPackageManagerName())}`);
2316
2325
  this.logger.debug(`installing dependencies in workspace with options`, options);
2326
+ const hasRootComponents = this.dependencyResolver.hasRootComponents(); // TODO: this make duplicate
2327
+ // this.logger.consoleSuccess();
2328
+ // TODO: add the links results to the output
2329
+
2330
+ await this.link({
2331
+ linkTeambitBit: true,
2332
+ legacyLink: true,
2333
+ linkCoreAspects: false,
2334
+ linkDepsResolvedFromEnv: !hasRootComponents,
2335
+ linkNestedDepsInNM: false
2336
+ });
2337
+ this.consumer.componentLoader.clearComponentsCache();
2317
2338
  this.clearCache(); // TODO: pass get install options
2318
2339
 
2319
2340
  const installer = this.dependencyResolver.getInstaller({});
@@ -2321,23 +2342,23 @@ needed-for: ${neededFor || '<unknown>'}`);
2321
2342
  const mergedRootPolicy = this.dependencyResolver.getWorkspacePolicy();
2322
2343
  const depsFilterFn = await this.generateFilterFnForDepsFromLocalRemote();
2323
2344
  const pmInstallOptions = {
2324
- dedupe: options === null || options === void 0 ? void 0 : options.dedupe,
2345
+ dedupe: !hasRootComponents && (options === null || options === void 0 ? void 0 : options.dedupe),
2325
2346
  copyPeerToRuntimeOnRoot: (_options$copyPeerToRu3 = options === null || options === void 0 ? void 0 : options.copyPeerToRuntimeOnRoot) !== null && _options$copyPeerToRu3 !== void 0 ? _options$copyPeerToRu3 : true,
2326
2347
  copyPeerToRuntimeOnComponents: (_options$copyPeerToRu4 = options === null || options === void 0 ? void 0 : options.copyPeerToRuntimeOnComponents) !== null && _options$copyPeerToRu4 !== void 0 ? _options$copyPeerToRu4 : false,
2327
2348
  dependencyFilterFn: depsFilterFn,
2328
- overrides: this.dependencyResolver.config.overrides
2349
+ overrides: this.dependencyResolver.config.overrides,
2350
+ packageImportMethod: this.dependencyResolver.config.packageImportMethod,
2351
+ rootComponents: hasRootComponents
2329
2352
  };
2330
2353
  await installer.install(this.path, mergedRootPolicy, compDirMap, {
2331
2354
  installTeambitBit: false
2332
- }, pmInstallOptions); // TODO: this make duplicate
2333
- // this.logger.consoleSuccess();
2334
- // TODO: add the links results to the output
2335
-
2355
+ }, pmInstallOptions);
2336
2356
  await this.link({
2337
- linkTeambitBit: true,
2357
+ linkTeambitBit: false,
2338
2358
  legacyLink: true,
2339
2359
  linkCoreAspects: true,
2340
- linkNestedDepsInNM: !this.isLegacy
2360
+ linkDepsResolvedFromEnv: !hasRootComponents,
2361
+ linkNestedDepsInNM: !this.isLegacy && !hasRootComponents
2341
2362
  });
2342
2363
  await this.consumer.componentFsCache.deleteAllDependenciesDataCache();
2343
2364
  return compDirMap;
@@ -2483,8 +2504,8 @@ your workspace.jsonc has this component-id set. you might want to remove/change
2483
2504
  }
2484
2505
 
2485
2506
  getComponentPackagePath(component) {
2486
- const packageName = (0, _componentIdToPackageName().default)(component instanceof _component2().default ? component : component.state._consumer);
2487
- return _path2().default.join(this.modulesPath, packageName);
2507
+ const relativePath = this.dependencyResolver.getRuntimeModulePath(component);
2508
+ return _path2().default.join(this.path, relativePath);
2488
2509
  } // TODO: should we return here the dir as it defined (aka components) or with /{name} prefix (as it used in legacy)
2489
2510
 
2490
2511