@teambit/workspace 0.0.597 → 0.0.603
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/bit-map.d.ts +9 -1
- package/dist/bit-map.js +37 -2
- package/dist/bit-map.js.map +1 -1
- package/dist/envs-subcommands/envs-set.cmd.d.ts +11 -0
- package/dist/envs-subcommands/envs-set.cmd.js +55 -0
- package/dist/envs-subcommands/envs-set.cmd.js.map +1 -0
- package/dist/envs-subcommands/envs-unset.cmd.d.ts +11 -0
- package/dist/envs-subcommands/envs-unset.cmd.js +46 -0
- package/dist/envs-subcommands/envs-unset.cmd.js.map +1 -0
- package/dist/workspace-component/workspace-component-loader.js +3 -2
- package/dist/workspace-component/workspace-component-loader.js.map +1 -1
- package/dist/workspace.d.ts +18 -5
- package/dist/workspace.js +99 -21
- package/dist/workspace.js.map +1 -1
- package/dist/workspace.provider.js +29 -1
- package/dist/workspace.provider.js.map +1 -1
- package/envs-subcommands/envs-set.cmd.ts +20 -0
- package/envs-subcommands/envs-unset.cmd.ts +18 -0
- package/package-tar/teambit-workspace-0.0.603.tgz +0 -0
- package/package.json +35 -35
- package/workspace-component/workspace-component-loader.ts +4 -3
- package/package-tar/teambit-workspace-0.0.597.tgz +0 -0
package/dist/bit-map.d.ts
CHANGED
|
@@ -16,10 +16,18 @@ export declare class BitMap {
|
|
|
16
16
|
* later, upon `bit tag`, the data is saved in the scope.
|
|
17
17
|
* returns a boolean indicating whether a change has been made.
|
|
18
18
|
*/
|
|
19
|
-
addComponentConfig(
|
|
19
|
+
addComponentConfig(id: ComponentID, aspectId: string, config?: Record<string, any>): boolean;
|
|
20
|
+
removeComponentConfig(id: ComponentID, aspectId: string): boolean;
|
|
20
21
|
/**
|
|
21
22
|
* write .bitmap object to the filesystem
|
|
22
23
|
*/
|
|
23
24
|
write(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* get the data saved in the .bitmap file for this component-id.
|
|
27
|
+
*/
|
|
24
28
|
getBitmapEntry(id: ComponentID, { ignoreVersion, ignoreScopeAndVersion }?: GetBitMapComponentOptions): ComponentMap;
|
|
29
|
+
/**
|
|
30
|
+
* components that were not tagged yet are safe to rename them from the .bitmap file.
|
|
31
|
+
*/
|
|
32
|
+
renameNewComponent(sourceId: ComponentID, targetId: ComponentID): void;
|
|
25
33
|
}
|
package/dist/bit-map.js
CHANGED
|
@@ -33,7 +33,7 @@ class BitMap {
|
|
|
33
33
|
*/
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
addComponentConfig(id, aspectId, config = {}) {
|
|
37
37
|
if (!aspectId || typeof aspectId !== 'string') throw new Error(`expect aspectId to be string, got ${aspectId}`);
|
|
38
38
|
const bitMapEntry = this.getBitmapEntry(id, {
|
|
39
39
|
ignoreScopeAndVersion: true
|
|
@@ -51,7 +51,22 @@ class BitMap {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
this.legacyBitMap.markAsChanged();
|
|
54
|
-
|
|
54
|
+
return true; // changes have been made
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
removeComponentConfig(id, aspectId) {
|
|
58
|
+
if (!aspectId || typeof aspectId !== 'string') throw new Error(`expect aspectId to be string, got ${aspectId}`);
|
|
59
|
+
const bitMapEntry = this.getBitmapEntry(id, {
|
|
60
|
+
ignoreScopeAndVersion: true
|
|
61
|
+
});
|
|
62
|
+
const currentConfig = (bitMapEntry.config || (bitMapEntry.config = {}))[aspectId];
|
|
63
|
+
|
|
64
|
+
if (!currentConfig) {
|
|
65
|
+
return false; // no changes
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
delete bitMapEntry.config[aspectId];
|
|
69
|
+
this.legacyBitMap.markAsChanged();
|
|
55
70
|
return true; // changes have been made
|
|
56
71
|
}
|
|
57
72
|
/**
|
|
@@ -62,6 +77,10 @@ class BitMap {
|
|
|
62
77
|
async write() {
|
|
63
78
|
await this.consumer.writeBitMap();
|
|
64
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* get the data saved in the .bitmap file for this component-id.
|
|
82
|
+
*/
|
|
83
|
+
|
|
65
84
|
|
|
66
85
|
getBitmapEntry(id, {
|
|
67
86
|
ignoreVersion,
|
|
@@ -72,6 +91,22 @@ class BitMap {
|
|
|
72
91
|
ignoreScopeAndVersion
|
|
73
92
|
});
|
|
74
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* components that were not tagged yet are safe to rename them from the .bitmap file.
|
|
96
|
+
*/
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
renameNewComponent(sourceId, targetId) {
|
|
100
|
+
const bitMapEntry = this.getBitmapEntry(sourceId);
|
|
101
|
+
|
|
102
|
+
if (bitMapEntry.id.hasVersion()) {
|
|
103
|
+
throw new Error(`unable to rename tagged or exported component: ${bitMapEntry.id.toString()}`);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
this.legacyBitMap.removeComponent(bitMapEntry.id);
|
|
107
|
+
bitMapEntry.id = targetId._legacy;
|
|
108
|
+
this.legacyBitMap.setComponent(bitMapEntry.id, bitMapEntry);
|
|
109
|
+
}
|
|
75
110
|
|
|
76
111
|
}
|
|
77
112
|
|
package/dist/bit-map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["bit-map.ts"],"names":["BitMap","constructor","legacyBitMap","consumer","addComponentConfig","
|
|
1
|
+
{"version":3,"sources":["bit-map.ts"],"names":["BitMap","constructor","legacyBitMap","consumer","addComponentConfig","id","aspectId","config","Error","bitMapEntry","getBitmapEntry","ignoreScopeAndVersion","currentConfig","markAsChanged","removeComponentConfig","write","writeBitMap","ignoreVersion","getComponent","_legacy","renameNewComponent","sourceId","targetId","hasVersion","toString","removeComponent","setComponent"],"mappings":"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","sourcesContent":["import { isEqual } from 'lodash';\nimport { ComponentID } from '@teambit/component-id';\nimport LegacyBitMap from '@teambit/legacy/dist/consumer/bit-map';\nimport { Consumer } from '@teambit/legacy/dist/consumer';\nimport { GetBitMapComponentOptions } from '@teambit/legacy/dist/consumer/bit-map/bit-map';\nimport ComponentMap from '@teambit/legacy/dist/consumer/bit-map/component-map';\n/**\n * consider extracting to a new component.\n * (pro: making Workspace aspect smaller. con: it's an implementation details of the workspace)\n */\nexport class BitMap {\n constructor(private legacyBitMap: LegacyBitMap, private consumer: Consumer) {}\n\n /**\n * adds component config to the .bitmap file.\n * later, upon `bit tag`, the data is saved in the scope.\n * returns a boolean indicating whether a change has been made.\n */\n addComponentConfig(id: ComponentID, aspectId: string, config: Record<string, any> = {}): boolean {\n if (!aspectId || typeof aspectId !== 'string') throw new Error(`expect aspectId to be string, got ${aspectId}`);\n const bitMapEntry = this.getBitmapEntry(id, { ignoreScopeAndVersion: true });\n const currentConfig = (bitMapEntry.config ||= {})[aspectId];\n if (isEqual(currentConfig, config)) {\n return false; // no changes\n }\n if (!config) {\n delete bitMapEntry.config[aspectId];\n } else {\n bitMapEntry.config[aspectId] = config;\n }\n this.legacyBitMap.markAsChanged();\n\n return true; // changes have been made\n }\n\n removeComponentConfig(id: ComponentID, aspectId: string): boolean {\n if (!aspectId || typeof aspectId !== 'string') throw new Error(`expect aspectId to be string, got ${aspectId}`);\n const bitMapEntry = this.getBitmapEntry(id, { ignoreScopeAndVersion: true });\n const currentConfig = (bitMapEntry.config ||= {})[aspectId];\n if (!currentConfig) {\n return false; // no changes\n }\n delete bitMapEntry.config[aspectId];\n this.legacyBitMap.markAsChanged();\n\n return true; // changes have been made\n }\n\n /**\n * write .bitmap object to the filesystem\n */\n async write() {\n await this.consumer.writeBitMap();\n }\n\n /**\n * get the data saved in the .bitmap file for this component-id.\n */\n getBitmapEntry(\n id: ComponentID,\n { ignoreVersion, ignoreScopeAndVersion }: GetBitMapComponentOptions = {}\n ): ComponentMap {\n return this.legacyBitMap.getComponent(id._legacy, { ignoreVersion, ignoreScopeAndVersion });\n }\n\n /**\n * components that were not tagged yet are safe to rename them from the .bitmap file.\n */\n renameNewComponent(sourceId: ComponentID, targetId: ComponentID) {\n const bitMapEntry = this.getBitmapEntry(sourceId);\n if (bitMapEntry.id.hasVersion()) {\n throw new Error(`unable to rename tagged or exported component: ${bitMapEntry.id.toString()}`);\n }\n this.legacyBitMap.removeComponent(bitMapEntry.id);\n bitMapEntry.id = targetId._legacy;\n this.legacyBitMap.setComponent(bitMapEntry.id, bitMapEntry);\n }\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Command } from '@teambit/cli';
|
|
2
|
+
import { Workspace } from '../workspace';
|
|
3
|
+
export declare class EnvsSetCmd implements Command {
|
|
4
|
+
private workspace;
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
options: never[];
|
|
8
|
+
group: string;
|
|
9
|
+
constructor(workspace: Workspace);
|
|
10
|
+
report([pattern, env]: [string, string]): Promise<string>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
require("core-js/modules/es.array.iterator.js");
|
|
6
|
+
|
|
7
|
+
require("core-js/modules/es.promise.js");
|
|
8
|
+
|
|
9
|
+
Object.defineProperty(exports, "__esModule", {
|
|
10
|
+
value: true
|
|
11
|
+
});
|
|
12
|
+
exports.EnvsSetCmd = void 0;
|
|
13
|
+
|
|
14
|
+
function _defineProperty2() {
|
|
15
|
+
const data = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
|
|
17
|
+
_defineProperty2 = function () {
|
|
18
|
+
return data;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
return data;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function _chalk() {
|
|
25
|
+
const data = _interopRequireDefault(require("chalk"));
|
|
26
|
+
|
|
27
|
+
_chalk = function () {
|
|
28
|
+
return data;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
return data;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
class EnvsSetCmd {
|
|
35
|
+
constructor(workspace) {
|
|
36
|
+
this.workspace = workspace;
|
|
37
|
+
(0, _defineProperty2().default)(this, "name", 'set <pattern> <env>');
|
|
38
|
+
(0, _defineProperty2().default)(this, "description", 'set an environment to component(s)');
|
|
39
|
+
(0, _defineProperty2().default)(this, "options", []);
|
|
40
|
+
(0, _defineProperty2().default)(this, "group", 'development');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async report([pattern, env]) {
|
|
44
|
+
const envId = await this.workspace.resolveComponentId(env);
|
|
45
|
+
const components = await this.workspace.byPattern(pattern);
|
|
46
|
+
await this.workspace.setEnvToComponents(envId, components);
|
|
47
|
+
return `added ${_chalk().default.bold(envId.toString())} env to the following component(s):
|
|
48
|
+
${components.map(comp => comp.id.toString()).join('\n')}`;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
exports.EnvsSetCmd = EnvsSetCmd;
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=envs-set.cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["envs-set.cmd.ts"],"names":["EnvsSetCmd","constructor","workspace","report","pattern","env","envId","resolveComponentId","components","byPattern","setEnvToComponents","chalk","bold","toString","map","comp","id","join"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGO,MAAMA,UAAN,CAAoC;AAMzCC,EAAAA,WAAW,CAASC,SAAT,EAA+B;AAAA,SAAtBA,SAAsB,GAAtBA,SAAsB;AAAA,kDALnC,qBAKmC;AAAA,yDAJ5B,oCAI4B;AAAA,qDAHhC,EAGgC;AAAA,mDAFlC,aAEkC;AAAE;;AAEhC,QAANC,MAAM,CAAC,CAACC,OAAD,EAAUC,GAAV,CAAD,EAAmC;AAC7C,UAAMC,KAAK,GAAG,MAAM,KAAKJ,SAAL,CAAeK,kBAAf,CAAkCF,GAAlC,CAApB;AACA,UAAMG,UAAU,GAAG,MAAM,KAAKN,SAAL,CAAeO,SAAf,CAAyBL,OAAzB,CAAzB;AACA,UAAM,KAAKF,SAAL,CAAeQ,kBAAf,CAAkCJ,KAAlC,EAAyCE,UAAzC,CAAN;AACA,WAAQ,SAAQG,iBAAMC,IAAN,CAAWN,KAAK,CAACO,QAAN,EAAX,CAA6B;AACjD,EAAEL,UAAU,CAACM,GAAX,CAAgBC,IAAD,IAAUA,IAAI,CAACC,EAAL,CAAQH,QAAR,EAAzB,EAA6CI,IAA7C,CAAkD,IAAlD,CAAwD,EADtD;AAED;;AAdwC","sourcesContent":["import { Command } from '@teambit/cli';\nimport chalk from 'chalk';\nimport { Workspace } from '../workspace';\n\nexport class EnvsSetCmd implements Command {\n name = 'set <pattern> <env>';\n description = 'set an environment to component(s)';\n options = [];\n group = 'development';\n\n constructor(private workspace: Workspace) {}\n\n async report([pattern, env]: [string, string]) {\n const envId = await this.workspace.resolveComponentId(env);\n const components = await this.workspace.byPattern(pattern);\n await this.workspace.setEnvToComponents(envId, components);\n return `added ${chalk.bold(envId.toString())} env to the following component(s):\n${components.map((comp) => comp.id.toString()).join('\\n')}`;\n }\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Command } from '@teambit/cli';
|
|
2
|
+
import { Workspace } from '../workspace';
|
|
3
|
+
export declare class EnvsUnsetCmd implements Command {
|
|
4
|
+
private workspace;
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
options: never[];
|
|
8
|
+
group: string;
|
|
9
|
+
constructor(workspace: Workspace);
|
|
10
|
+
report([pattern]: [string]): Promise<string>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
require("core-js/modules/es.array.iterator.js");
|
|
6
|
+
|
|
7
|
+
require("core-js/modules/es.promise.js");
|
|
8
|
+
|
|
9
|
+
Object.defineProperty(exports, "__esModule", {
|
|
10
|
+
value: true
|
|
11
|
+
});
|
|
12
|
+
exports.EnvsUnsetCmd = void 0;
|
|
13
|
+
|
|
14
|
+
function _defineProperty2() {
|
|
15
|
+
const data = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
|
|
17
|
+
_defineProperty2 = function () {
|
|
18
|
+
return data;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
return data;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
class EnvsUnsetCmd {
|
|
25
|
+
constructor(workspace) {
|
|
26
|
+
this.workspace = workspace;
|
|
27
|
+
(0, _defineProperty2().default)(this, "name", 'unset <pattern>');
|
|
28
|
+
(0, _defineProperty2().default)(this, "description", 'unset an environment from component(s)');
|
|
29
|
+
(0, _defineProperty2().default)(this, "options", []);
|
|
30
|
+
(0, _defineProperty2().default)(this, "group", 'development');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async report([pattern]) {
|
|
34
|
+
const components = await this.workspace.byPattern(pattern);
|
|
35
|
+
const {
|
|
36
|
+
changed
|
|
37
|
+
} = await this.workspace.unsetEnvFromComponents(components);
|
|
38
|
+
return `successfully removed env from the following component(s):
|
|
39
|
+
${changed.map(id => id.toString()).join('\n')}`;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
exports.EnvsUnsetCmd = EnvsUnsetCmd;
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=envs-unset.cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["envs-unset.cmd.ts"],"names":["EnvsUnsetCmd","constructor","workspace","report","pattern","components","byPattern","changed","unsetEnvFromComponents","map","id","toString","join"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGO,MAAMA,YAAN,CAAsC;AAM3CC,EAAAA,WAAW,CAASC,SAAT,EAA+B;AAAA,SAAtBA,SAAsB,GAAtBA,SAAsB;AAAA,kDALnC,iBAKmC;AAAA,yDAJ5B,wCAI4B;AAAA,qDAHhC,EAGgC;AAAA,mDAFlC,aAEkC;AAAE;;AAEhC,QAANC,MAAM,CAAC,CAACC,OAAD,CAAD,EAAsB;AAChC,UAAMC,UAAU,GAAG,MAAM,KAAKH,SAAL,CAAeI,SAAf,CAAyBF,OAAzB,CAAzB;AACA,UAAM;AAAEG,MAAAA;AAAF,QAAc,MAAM,KAAKL,SAAL,CAAeM,sBAAf,CAAsCH,UAAtC,CAA1B;AACA,WAAQ;AACZ,EAAEE,OAAO,CAACE,GAAR,CAAaC,EAAD,IAAQA,EAAE,CAACC,QAAH,EAApB,EAAmCC,IAAnC,CAAwC,IAAxC,CAA8C,EAD5C;AAED;;AAb0C","sourcesContent":["import { Command } from '@teambit/cli';\nimport { Workspace } from '../workspace';\n\nexport class EnvsUnsetCmd implements Command {\n name = 'unset <pattern>';\n description = 'unset an environment from component(s)';\n options = [];\n group = 'development';\n\n constructor(private workspace: Workspace) {}\n\n async report([pattern]: [string]) {\n const components = await this.workspace.byPattern(pattern);\n const { changed } = await this.workspace.unsetEnvFromComponents(components);\n return `successfully removed env from the following component(s):\n${changed.map((id) => id.toString()).join('\\n')}`;\n }\n}\n"]}
|
|
@@ -292,12 +292,13 @@ class WorkspaceComponentLoader {
|
|
|
292
292
|
|
|
293
293
|
addMultipleEnvsIssueIfNeeded(component) {
|
|
294
294
|
const envs = this.envs.getAllEnvsConfiguredOnComponent(component);
|
|
295
|
+
const envIds = (0, _lodash().uniq)(envs.map(env => env.id));
|
|
295
296
|
|
|
296
|
-
if (
|
|
297
|
+
if (envIds.length < 2) {
|
|
297
298
|
return;
|
|
298
299
|
}
|
|
299
300
|
|
|
300
|
-
component.state.issues.getOrCreate(_componentIssues().IssuesClasses.MultipleEnvs).data =
|
|
301
|
+
component.state.issues.getOrCreate(_componentIssues().IssuesClasses.MultipleEnvs).data = envIds;
|
|
301
302
|
}
|
|
302
303
|
|
|
303
304
|
clearCache() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["workspace-component-loader.ts"],"names":["WorkspaceComponentLoader","constructor","workspace","logger","dependencyResolver","envs","componentsCache","maxSize","componentsCacheForCapsule","getMany","ids","forCapsule","idsWithoutEmpty","errors","longProcessLogger","createLongProcessLogger","length","componentsP","id","logProgress","toString","get","catch","err","isComponentNotExistsError","push","undefined","components","forEach","consumer","isLegacy","console","warn","filteredComponents","end","getInvalid","loadComponent","_legacy","ConsumerComponent","isComponentInvalidByErrorType","componentId","legacyComponent","useCache","storeInCache","bitIdWithVersion","bitmapIdsFromCurrentLane","version","changeVersion","fromCache","getFromCache","consumerComponent","getConsumerComponent","updatedId","ComponentID","fromLegacy","scope","component","loadOne","addMultipleEnvsIssueIfNeeded","saveInCache","getIfExist","getAllEnvsConfiguredOnComponent","state","issues","getOrCreate","IssuesClasses","MultipleEnvs","data","map","e","clearCache","deleteAll","clearComponentCache","idStr","delete","componentFromScope","MissingBitMapComponent","extensionDataList","componentExtensions","extensionsFromConsumerComponent","extensions","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"],"mappings":"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","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 } 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 if (!this.workspace.consumer.isLegacy) {\n this.logger.console(`failed loading component ${err.id.toString()}, see full error in debug.log file`);\n }\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 if (envs.length < 2) {\n return;\n }\n component.state.issues.getOrCreate(IssuesClasses.MultipleEnvs).data = envs.map((e) => e.id);\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\n let extensionDataList = 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 extensionDataList = ExtensionDataList.mergeConfigs([\n extensionsFromConsumerComponent,\n extensionDataList,\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) {\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"]}
|
|
1
|
+
{"version":3,"sources":["workspace-component-loader.ts"],"names":["WorkspaceComponentLoader","constructor","workspace","logger","dependencyResolver","envs","componentsCache","maxSize","componentsCacheForCapsule","getMany","ids","forCapsule","idsWithoutEmpty","errors","longProcessLogger","createLongProcessLogger","length","componentsP","id","logProgress","toString","get","catch","err","isComponentNotExistsError","push","undefined","components","forEach","consumer","isLegacy","console","warn","filteredComponents","end","getInvalid","loadComponent","_legacy","ConsumerComponent","isComponentInvalidByErrorType","componentId","legacyComponent","useCache","storeInCache","bitIdWithVersion","bitmapIdsFromCurrentLane","version","changeVersion","fromCache","getFromCache","consumerComponent","getConsumerComponent","updatedId","ComponentID","fromLegacy","scope","component","loadOne","addMultipleEnvsIssueIfNeeded","saveInCache","getIfExist","getAllEnvsConfiguredOnComponent","envIds","map","env","state","issues","getOrCreate","IssuesClasses","MultipleEnvs","data","clearCache","deleteAll","clearComponentCache","idStr","delete","componentFromScope","MissingBitMapComponent","extensionDataList","componentExtensions","extensionsFromConsumerComponent","extensions","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"],"mappings":"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","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 if (!this.workspace.consumer.isLegacy) {\n this.logger.console(`failed loading component ${err.id.toString()}, see full error in debug.log file`);\n }\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\n let extensionDataList = 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 extensionDataList = ExtensionDataList.mergeConfigs([\n extensionsFromConsumerComponent,\n extensionDataList,\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) {\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"]}
|
package/dist/workspace.d.ts
CHANGED
|
@@ -286,6 +286,10 @@ export declare class Workspace implements ComponentFactory {
|
|
|
286
286
|
* don't throw an error if the component was not found, simply return undefined.
|
|
287
287
|
*/
|
|
288
288
|
getIfExist(componentId: ComponentID): Promise<Component | undefined>;
|
|
289
|
+
/**
|
|
290
|
+
* whether a component exists in the workspace
|
|
291
|
+
*/
|
|
292
|
+
exists(componentId: ComponentID): boolean;
|
|
289
293
|
/**
|
|
290
294
|
* This will make sure to fetch the objects prior to load them
|
|
291
295
|
* do not use it if you are not sure you need it.
|
|
@@ -346,16 +350,13 @@ export declare class Workspace implements ComponentFactory {
|
|
|
346
350
|
private componentDefaultScopeFromComponentDirAndNameWithoutConfigFile;
|
|
347
351
|
/**
|
|
348
352
|
* Calculate the component config based on:
|
|
353
|
+
* the config property in the .bitmap file
|
|
349
354
|
* the component.json file in the component folder
|
|
350
355
|
* matching pattern in the variants config
|
|
351
356
|
* defaults extensions from workspace config
|
|
352
|
-
*
|
|
353
|
-
* @param {ComponentID} componentId
|
|
354
|
-
* @param {Component} [componentFromScope]
|
|
355
|
-
* @returns {Promise<ExtensionDataList>}
|
|
356
|
-
* @memberof Workspace
|
|
357
357
|
*/
|
|
358
358
|
componentExtensions(componentId: ComponentID, componentFromScope?: Component): Promise<ExtensionDataList>;
|
|
359
|
+
private filterEnvsFromExtensionsIfNeeded;
|
|
359
360
|
triggerOnPreWatch(componentIds: ComponentID[], watchOpts: WatchOptions): Promise<void>;
|
|
360
361
|
/**
|
|
361
362
|
* This will mutate the entries with extensionId prop to have resolved legacy id
|
|
@@ -475,5 +476,17 @@ export declare class Workspace implements ComponentFactory {
|
|
|
475
476
|
* @param {string[]} the list of packages that should be removed from dependencies.
|
|
476
477
|
*/
|
|
477
478
|
uninstallDependencies(packages: string[]): Promise<ComponentMap<string>>;
|
|
479
|
+
/**
|
|
480
|
+
* configure an environment to the given components in the .bitmap file, this configuration overrides other, such as
|
|
481
|
+
* overrides in workspace.jsonc.
|
|
482
|
+
*/
|
|
483
|
+
setEnvToComponents(envId: ComponentID, components: Component[]): Promise<void>;
|
|
484
|
+
/**
|
|
485
|
+
* remove env configuration from the .bitmap file, so then other configuration, such as "variants" will take place
|
|
486
|
+
*/
|
|
487
|
+
unsetEnvFromComponents(components: Component[]): Promise<{
|
|
488
|
+
changed: ComponentID[];
|
|
489
|
+
unchanged: ComponentID[];
|
|
490
|
+
}>;
|
|
478
491
|
}
|
|
479
492
|
export default Workspace;
|
package/dist/workspace.js
CHANGED
|
@@ -1017,6 +1017,14 @@ class Workspace {
|
|
|
1017
1017
|
async getIfExist(componentId) {
|
|
1018
1018
|
return this.componentLoader.getIfExist(componentId);
|
|
1019
1019
|
}
|
|
1020
|
+
/**
|
|
1021
|
+
* whether a component exists in the workspace
|
|
1022
|
+
*/
|
|
1023
|
+
|
|
1024
|
+
|
|
1025
|
+
exists(componentId) {
|
|
1026
|
+
return Boolean(this.consumer.bitmapIdsFromCurrentLane.find(_ => _.isEqualWithoutVersion(componentId._legacy)));
|
|
1027
|
+
}
|
|
1020
1028
|
/**
|
|
1021
1029
|
* This will make sure to fetch the objects prior to load them
|
|
1022
1030
|
* do not use it if you are not sure you need it.
|
|
@@ -1218,19 +1226,15 @@ class Workspace {
|
|
|
1218
1226
|
}
|
|
1219
1227
|
/**
|
|
1220
1228
|
* Calculate the component config based on:
|
|
1229
|
+
* the config property in the .bitmap file
|
|
1221
1230
|
* the component.json file in the component folder
|
|
1222
1231
|
* matching pattern in the variants config
|
|
1223
1232
|
* defaults extensions from workspace config
|
|
1224
|
-
*
|
|
1225
|
-
* @param {ComponentID} componentId
|
|
1226
|
-
* @param {Component} [componentFromScope]
|
|
1227
|
-
* @returns {Promise<ExtensionDataList>}
|
|
1228
|
-
* @memberof Workspace
|
|
1229
1233
|
*/
|
|
1230
1234
|
|
|
1231
1235
|
|
|
1232
1236
|
async componentExtensions(componentId, componentFromScope) {
|
|
1233
|
-
var _componentFromScope$c, _componentConfigFile$, _variantConfig$propag;
|
|
1237
|
+
var _componentFromScope$c, _componentConfigFile$, _variantConfig$propag, _wsDefaultExtensions;
|
|
1234
1238
|
|
|
1235
1239
|
// TODO: consider caching this result
|
|
1236
1240
|
let configFileExtensions;
|
|
@@ -1270,54 +1274,83 @@ class Workspace {
|
|
|
1270
1274
|
|
|
1271
1275
|
|
|
1272
1276
|
const extensionsToMerge = [];
|
|
1277
|
+
let envWasFoundPreviously = false;
|
|
1278
|
+
|
|
1279
|
+
const addAndLoadExtensions = async extensions => {
|
|
1280
|
+
const extsWithoutRemoved = extensions.filterRemovedExtensions();
|
|
1281
|
+
const selfInMergedExtensions = extsWithoutRemoved.findExtension(componentId._legacy.toStringWithoutScopeAndVersion(), true, true);
|
|
1282
|
+
const extsWithoutSelf = selfInMergedExtensions !== null && selfInMergedExtensions !== void 0 && selfInMergedExtensions.extensionId ? extsWithoutRemoved.remove(selfInMergedExtensions.extensionId) : extsWithoutRemoved;
|
|
1283
|
+
await this.loadExtensions(extsWithoutSelf);
|
|
1284
|
+
const {
|
|
1285
|
+
extensionDataListFiltered,
|
|
1286
|
+
envIsCurrentlySet
|
|
1287
|
+
} = this.filterEnvsFromExtensionsIfNeeded(extsWithoutSelf, envWasFoundPreviously);
|
|
1288
|
+
if (envIsCurrentlySet) envWasFoundPreviously = true;
|
|
1289
|
+
extensionsToMerge.push(extensionDataListFiltered);
|
|
1290
|
+
};
|
|
1273
1291
|
|
|
1274
1292
|
if (bitMapExtensions) {
|
|
1275
1293
|
const extensionsDataEntries = Object.keys(bitMapExtensions).map(aspectId => new (_extensionData().ExtensionDataEntry)(aspectId, undefined, aspectId, bitMapExtensions[aspectId]));
|
|
1276
1294
|
const extensionDataList = new (_extensionData().ExtensionDataList)(...extensionsDataEntries);
|
|
1277
|
-
|
|
1295
|
+
await addAndLoadExtensions(extensionDataList);
|
|
1278
1296
|
}
|
|
1279
1297
|
|
|
1280
1298
|
if (configFileExtensions) {
|
|
1281
|
-
|
|
1299
|
+
await addAndLoadExtensions(configFileExtensions);
|
|
1282
1300
|
}
|
|
1283
1301
|
|
|
1284
1302
|
let continuePropagating = (_componentConfigFile$ = componentConfigFile === null || componentConfigFile === void 0 ? void 0 : componentConfigFile.propagate) !== null && _componentConfigFile$ !== void 0 ? _componentConfigFile$ : true;
|
|
1285
1303
|
|
|
1286
1304
|
if (variantsExtensions && continuePropagating) {
|
|
1287
1305
|
// Put it in the start to make sure the config file is stronger
|
|
1288
|
-
|
|
1306
|
+
await addAndLoadExtensions(variantsExtensions);
|
|
1289
1307
|
}
|
|
1290
1308
|
|
|
1291
1309
|
continuePropagating = continuePropagating && ((_variantConfig$propag = variantConfig === null || variantConfig === void 0 ? void 0 : variantConfig.propagate) !== null && _variantConfig$propag !== void 0 ? _variantConfig$propag : true); // Do not apply default extensions on the default extensions (it will create infinite loop when loading them)
|
|
1292
1310
|
|
|
1293
|
-
const isDefaultExtension = wsDefaultExtensions.findExtension(componentId.toString(), true, true);
|
|
1311
|
+
const isDefaultExtension = (_wsDefaultExtensions = wsDefaultExtensions) === null || _wsDefaultExtensions === void 0 ? void 0 : _wsDefaultExtensions.findExtension(componentId.toString(), true, true);
|
|
1294
1312
|
|
|
1295
1313
|
if (wsDefaultExtensions && continuePropagating && !isDefaultExtension) {
|
|
1296
1314
|
// Put it in the start to make sure the config file is stronger
|
|
1297
|
-
|
|
1315
|
+
await addAndLoadExtensions(wsDefaultExtensions);
|
|
1298
1316
|
} // It's before the scope extensions, since there is no need to resolve extensions from scope they are already resolved
|
|
1299
1317
|
// await Promise.all(extensionsToMerge.map((extensions) => this.resolveExtensionsList(extensions)));
|
|
1300
1318
|
|
|
1301
1319
|
|
|
1302
1320
|
if (mergeFromScope && continuePropagating) {
|
|
1303
|
-
|
|
1321
|
+
await addAndLoadExtensions(scopeExtensions);
|
|
1304
1322
|
} // It's important to do this resolution before the merge, otherwise we have issues with extensions
|
|
1305
1323
|
// coming from scope with local scope name, as opposed to the same extension comes from the workspace with default scope name
|
|
1306
1324
|
|
|
1307
1325
|
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
let mergedExtensions = _extensionData().ExtensionDataList.mergeConfigs(extensionsToMerge).filterRemovedExtensions(); // remove self from merged extensions
|
|
1312
|
-
|
|
1326
|
+
await Promise.all(extensionsToMerge.map(list => this.resolveExtensionListIds(list)));
|
|
1327
|
+
return _extensionData().ExtensionDataList.mergeConfigs(extensionsToMerge);
|
|
1328
|
+
}
|
|
1313
1329
|
|
|
1314
|
-
|
|
1330
|
+
filterEnvsFromExtensionsIfNeeded(extensionDataList, envWasFoundPreviously) {
|
|
1331
|
+
const envAspect = extensionDataList.findExtension(_envs().EnvsAspect.id);
|
|
1332
|
+
const envFromEnvsAspect = envAspect === null || envAspect === void 0 ? void 0 : envAspect.config.env;
|
|
1333
|
+
const [envsNotFromEnvsAspect, nonEnvs] = (0, _lodash().partition)(extensionDataList, ext => this.envs.isEnvRegistered(ext.stringId));
|
|
1334
|
+
const extensionDataListFiltered = new (_extensionData().ExtensionDataList)(...nonEnvs);
|
|
1335
|
+
const envIsCurrentlySet = envFromEnvsAspect || envsNotFromEnvsAspect.length;
|
|
1336
|
+
const shouldIgnoreCurrentEnv = envIsCurrentlySet && envWasFoundPreviously;
|
|
1315
1337
|
|
|
1316
|
-
if (
|
|
1317
|
-
|
|
1338
|
+
if (shouldIgnoreCurrentEnv) {
|
|
1339
|
+
// still, aspect env may have other data other then config.env.
|
|
1340
|
+
if (envAspect) {
|
|
1341
|
+
delete envAspect.config.env;
|
|
1342
|
+
extensionDataListFiltered.push(envAspect);
|
|
1343
|
+
}
|
|
1344
|
+
} else {
|
|
1345
|
+
// add the envs
|
|
1346
|
+
if (envAspect) extensionDataListFiltered.push(envAspect);
|
|
1347
|
+
extensionDataListFiltered.push(...envsNotFromEnvsAspect);
|
|
1318
1348
|
}
|
|
1319
1349
|
|
|
1320
|
-
return
|
|
1350
|
+
return {
|
|
1351
|
+
extensionDataListFiltered,
|
|
1352
|
+
envIsCurrentlySet
|
|
1353
|
+
};
|
|
1321
1354
|
}
|
|
1322
1355
|
|
|
1323
1356
|
async triggerOnPreWatch(componentIds, watchOpts) {
|
|
@@ -2191,6 +2224,51 @@ your workspace.jsonc has this component-id set. you might want to remove/change
|
|
|
2191
2224
|
dedupe: true
|
|
2192
2225
|
});
|
|
2193
2226
|
}
|
|
2227
|
+
/**
|
|
2228
|
+
* configure an environment to the given components in the .bitmap file, this configuration overrides other, such as
|
|
2229
|
+
* overrides in workspace.jsonc.
|
|
2230
|
+
*/
|
|
2231
|
+
|
|
2232
|
+
|
|
2233
|
+
async setEnvToComponents(envId, components) {
|
|
2234
|
+
const envIdStr = envId.toString();
|
|
2235
|
+
components.forEach(component => {
|
|
2236
|
+
this.bitMap.addComponentConfig(component.id, envIdStr);
|
|
2237
|
+
this.bitMap.addComponentConfig(component.id, _envs().EnvsAspect.id, {
|
|
2238
|
+
env: envIdStr
|
|
2239
|
+
});
|
|
2240
|
+
});
|
|
2241
|
+
await this.bitMap.write();
|
|
2242
|
+
}
|
|
2243
|
+
/**
|
|
2244
|
+
* remove env configuration from the .bitmap file, so then other configuration, such as "variants" will take place
|
|
2245
|
+
*/
|
|
2246
|
+
|
|
2247
|
+
|
|
2248
|
+
async unsetEnvFromComponents(components) {
|
|
2249
|
+
const changed = [];
|
|
2250
|
+
const unchanged = [];
|
|
2251
|
+
components.forEach(comp => {
|
|
2252
|
+
var _bitMapEntry$config, _bitMapEntry$config$E;
|
|
2253
|
+
|
|
2254
|
+
const bitMapEntry = this.bitMap.getBitmapEntry(comp.id);
|
|
2255
|
+
const currentEnv = (_bitMapEntry$config = bitMapEntry.config) === null || _bitMapEntry$config === void 0 ? void 0 : (_bitMapEntry$config$E = _bitMapEntry$config[_envs().EnvsAspect.id]) === null || _bitMapEntry$config$E === void 0 ? void 0 : _bitMapEntry$config$E.env;
|
|
2256
|
+
|
|
2257
|
+
if (!currentEnv) {
|
|
2258
|
+
unchanged.push(comp.id);
|
|
2259
|
+
return;
|
|
2260
|
+
}
|
|
2261
|
+
|
|
2262
|
+
this.bitMap.removeComponentConfig(comp.id, currentEnv);
|
|
2263
|
+
this.bitMap.removeComponentConfig(comp.id, _envs().EnvsAspect.id);
|
|
2264
|
+
changed.push(comp.id);
|
|
2265
|
+
});
|
|
2266
|
+
await this.bitMap.write();
|
|
2267
|
+
return {
|
|
2268
|
+
changed,
|
|
2269
|
+
unchanged
|
|
2270
|
+
};
|
|
2271
|
+
}
|
|
2194
2272
|
|
|
2195
2273
|
}
|
|
2196
2274
|
/**
|