@teambit/envs 0.0.1066 → 0.0.1068
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/env.fragment.js +15 -4
- package/dist/env.fragment.js.map +1 -1
- package/dist/environments.main.runtime.d.ts +69 -7
- package/dist/environments.main.runtime.js +295 -28
- package/dist/environments.main.runtime.js.map +1 -1
- package/dist/envs.cmd.d.ts +3 -1
- package/dist/envs.cmd.js +31 -7
- package/dist/envs.cmd.js.map +1 -1
- package/dist/{preview-1685331045403.js → preview-1685503265901.js} +2 -2
- package/envs.cmd.tsx +28 -7
- package/package-tar/teambit-envs-0.0.1068.tgz +0 -0
- package/package.json +29 -24
- package/package-tar/teambit-envs-0.0.1066.tgz +0 -0
package/dist/env.fragment.js
CHANGED
@@ -13,6 +13,13 @@ function _defineProperty2() {
|
|
13
13
|
};
|
14
14
|
return data;
|
15
15
|
}
|
16
|
+
function _chalk() {
|
17
|
+
const data = _interopRequireDefault(require("chalk"));
|
18
|
+
_chalk = function () {
|
19
|
+
return data;
|
20
|
+
};
|
21
|
+
return data;
|
22
|
+
}
|
16
23
|
class EnvFragment {
|
17
24
|
constructor(envs) {
|
18
25
|
this.envs = envs;
|
@@ -20,21 +27,25 @@ class EnvFragment {
|
|
20
27
|
(0, _defineProperty2().default)(this, "weight", 3);
|
21
28
|
}
|
22
29
|
async renderRow(component) {
|
30
|
+
const envId = await this.getEnvId(component);
|
31
|
+
const isLoaded = this.envs.isEnvRegistered(envId);
|
23
32
|
return {
|
24
33
|
title: this.title,
|
25
|
-
content:
|
34
|
+
content: isLoaded ? envId : `${envId} ${_chalk().default.red('(not loaded)')}`
|
26
35
|
};
|
27
36
|
}
|
28
37
|
async json(component) {
|
38
|
+
const envId = await this.getEnvId(component);
|
29
39
|
return {
|
30
40
|
title: this.title,
|
31
|
-
json:
|
41
|
+
json: envId
|
32
42
|
};
|
33
43
|
}
|
34
|
-
getEnvId(component) {
|
44
|
+
async getEnvId(component) {
|
35
45
|
// don't use this.envs.getEnv(). otherwise, it'll throw an error when running bit-show on a remote component
|
36
46
|
// where the env can't register to the slot.
|
37
|
-
return this.envs.getEnvId(component);
|
47
|
+
// return this.envs.getEnvId(component);
|
48
|
+
return (await this.envs.calculateEnvId(component)).toString();
|
38
49
|
}
|
39
50
|
}
|
40
51
|
exports.EnvFragment = EnvFragment;
|
package/dist/env.fragment.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["EnvFragment","constructor","envs","renderRow","component","title","content","
|
1
|
+
{"version":3,"names":["EnvFragment","constructor","envs","renderRow","component","envId","getEnvId","isLoaded","isEnvRegistered","title","content","chalk","red","json","calculateEnvId","toString"],"sources":["env.fragment.ts"],"sourcesContent":["import { ShowFragment, Component } from '@teambit/component';\nimport chalk from 'chalk';\nimport { EnvsMain } from './environments.main.runtime';\n\nexport class EnvFragment implements ShowFragment {\n constructor(private envs: EnvsMain) {}\n\n readonly title = 'env';\n\n async renderRow(component: Component) {\n const envId = await this.getEnvId(component);\n const isLoaded = this.envs.isEnvRegistered(envId);\n return {\n title: this.title,\n content: isLoaded ? envId : `${envId} ${chalk.red('(not loaded)')}`,\n };\n }\n\n async json(component: Component) {\n const envId = await this.getEnvId(component);\n return {\n title: this.title,\n json: envId,\n };\n }\n\n private async getEnvId(component: Component) {\n // don't use this.envs.getEnv(). otherwise, it'll throw an error when running bit-show on a remote component\n // where the env can't register to the slot.\n // return this.envs.getEnvId(component);\n return (await this.envs.calculateEnvId(component)).toString();\n }\n\n weight = 3;\n}\n"],"mappings":";;;;;;;;;;;;;;;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAGO,MAAMA,WAAW,CAAyB;EAC/CC,WAAW,CAASC,IAAc,EAAE;IAAA,KAAhBA,IAAc,GAAdA,IAAc;IAAA,+CAEjB,KAAK;IAAA,gDA0Bb,CAAC;EA5B2B;EAIrC,MAAMC,SAAS,CAACC,SAAoB,EAAE;IACpC,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACC,QAAQ,CAACF,SAAS,CAAC;IAC5C,MAAMG,QAAQ,GAAG,IAAI,CAACL,IAAI,CAACM,eAAe,CAACH,KAAK,CAAC;IACjD,OAAO;MACLI,KAAK,EAAE,IAAI,CAACA,KAAK;MACjBC,OAAO,EAAEH,QAAQ,GAAGF,KAAK,GAAI,GAAEA,KAAM,IAAGM,gBAAK,CAACC,GAAG,CAAC,cAAc,CAAE;IACpE,CAAC;EACH;EAEA,MAAMC,IAAI,CAACT,SAAoB,EAAE;IAC/B,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACC,QAAQ,CAACF,SAAS,CAAC;IAC5C,OAAO;MACLK,KAAK,EAAE,IAAI,CAACA,KAAK;MACjBI,IAAI,EAAER;IACR,CAAC;EACH;EAEA,MAAcC,QAAQ,CAACF,SAAoB,EAAE;IAC3C;IACA;IACA;IACA,OAAO,CAAC,MAAM,IAAI,CAACF,IAAI,CAACY,cAAc,CAACV,SAAS,CAAC,EAAEW,QAAQ,EAAE;EAC/D;AAGF;AAAC"}
|
@@ -1,6 +1,8 @@
|
|
1
|
+
import { SourceFile } from '@teambit/legacy/dist/consumer/component/sources';
|
1
2
|
import { CLIMain } from '@teambit/cli';
|
2
3
|
import { Component, ComponentMain, ComponentID } from '@teambit/component';
|
3
4
|
import { GraphqlMain } from '@teambit/graphql';
|
5
|
+
import { IssuesMain } from '@teambit/issues';
|
4
6
|
import { Harmony, SlotRegistry } from '@teambit/harmony';
|
5
7
|
import { Logger, LoggerMain } from '@teambit/logger';
|
6
8
|
import { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';
|
@@ -66,8 +68,21 @@ export declare class EnvsMain {
|
|
66
68
|
private componentMain;
|
67
69
|
private loggerMain;
|
68
70
|
private workerMain;
|
71
|
+
/**
|
72
|
+
* Envs that are failed to load
|
73
|
+
*/
|
74
|
+
private failedToLoadEnvs;
|
75
|
+
/**
|
76
|
+
* Extensions that are failed to load
|
77
|
+
* We use this as sometime when we couldn't load an extension we don't know if it's an env or not
|
78
|
+
* We should ideally take it from the aspect loader aspect, but right now the aspect loader is using envs
|
79
|
+
*/
|
69
80
|
private failedToLoadExt;
|
70
|
-
|
81
|
+
/**
|
82
|
+
* Ids of envs (not neccesrraly loaded successfully)
|
83
|
+
*/
|
84
|
+
envIds: Set<string>;
|
85
|
+
static runtime: import("@teambit/bit").RuntimeDefinition;
|
71
86
|
private alreadyShownWarning;
|
72
87
|
/**
|
73
88
|
* icon of the extension.
|
@@ -100,7 +115,10 @@ export declare class EnvsMain {
|
|
100
115
|
* Then it is used to hide different errors that are caused by the same issue.
|
101
116
|
* @param {string} id - string - represents the unique identifier of an extension that failed to load.
|
102
117
|
*/
|
103
|
-
|
118
|
+
addFailedToLoadEnvs(id: string): void;
|
119
|
+
addFailedToLoadExt(id: string): void;
|
120
|
+
resetFailedToLoadEnvs(): void;
|
121
|
+
getFailedToLoadEnvs(): string[];
|
104
122
|
/**
|
105
123
|
* get the configured default env.
|
106
124
|
*/
|
@@ -118,6 +136,20 @@ export declare class EnvsMain {
|
|
118
136
|
* compose two environments into one.
|
119
137
|
*/
|
120
138
|
merge<T extends Environment, S extends Environment>(targetEnv: Environment, sourceEnv: Environment): T & S;
|
139
|
+
/**
|
140
|
+
* This function checks if an environment manifest file exists in a given component or set of legacy files.
|
141
|
+
* @param {Component} [envComponent] - A component object that represents an environment. It contains information about
|
142
|
+
* the files and directories that make up the environment.
|
143
|
+
* @param {SourceFile[]} [legacyFiles] - An optional array of SourceFile objects representing the files in the legacy
|
144
|
+
* file system. If this parameter is not provided, the function will attempt to retrieve the files from the envComponent
|
145
|
+
* parameter.
|
146
|
+
* @returns a boolean value indicating whether an `env.jsonc` or `env.json` file exists in the `files` array of either
|
147
|
+
* the `envComponent` object or the `legacyFiles` array. If neither `envComponent` nor `legacyFiles` are provided, the
|
148
|
+
* function returns `undefined`.
|
149
|
+
*/
|
150
|
+
hasEnvManifest(envComponent?: Component, legacyFiles?: SourceFile[]): boolean | undefined;
|
151
|
+
getEnvManifest(envComponent?: Component, legacyFiles?: SourceFile[]): Object | undefined;
|
152
|
+
hasEnvManifestById(envId: string, requesting: string): Promise<boolean | undefined>;
|
121
153
|
getEnvData(component: Component): Descriptor;
|
122
154
|
/**
|
123
155
|
* Return the id of the env as configured in the envs data (without version by default)
|
@@ -145,7 +177,7 @@ export declare class EnvsMain {
|
|
145
177
|
/**
|
146
178
|
* get the env component by the env id.
|
147
179
|
*/
|
148
|
-
getEnvComponentByEnvId(envId: string, requesting
|
180
|
+
getEnvComponentByEnvId(envId: string, requesting?: string): Promise<Component>;
|
149
181
|
/**
|
150
182
|
* get the env of the given component.
|
151
183
|
* This will try to use the regular getEnv but fallback to the calculate env (in case you are using it during on load)
|
@@ -168,6 +200,12 @@ export declare class EnvsMain {
|
|
168
200
|
private getComponentEnvDescriptor;
|
169
201
|
private getEnvDescriptorFromEnvDef;
|
170
202
|
resolveEnv(component: Component, id: string): ComponentID | undefined;
|
203
|
+
/**
|
204
|
+
* This used to calculate the actual env during the component load.
|
205
|
+
* Do not use it to get the env (use getEnv instead)
|
206
|
+
* This should be used only during on load
|
207
|
+
*/
|
208
|
+
calculateEnvId(component: Component): Promise<ComponentID>;
|
171
209
|
/**
|
172
210
|
* This used to calculate the actual env during the component load.
|
173
211
|
* Do not use it to get the env (use getEnv instead)
|
@@ -204,11 +242,27 @@ export declare class EnvsMain {
|
|
204
242
|
* this method returns only #2
|
205
243
|
*/
|
206
244
|
getEnvsNotFromEnvsConfig(component: Component): EnvDefinition[];
|
245
|
+
/**
|
246
|
+
* @deprecated DO NOT USE THIS METHOD ANYMORE!!! (PLEASE USE .calculateEnvId() instead!)
|
247
|
+
*/
|
248
|
+
calculateEnvIdFromExtensions(extensions: ExtensionDataList): Promise<string>;
|
207
249
|
/**
|
208
250
|
* @deprecated DO NOT USE THIS METHOD ANYMORE!!! (PLEASE USE .calculateEnv() instead!)
|
209
251
|
*/
|
210
|
-
calculateEnvFromExtensions(extensions: ExtensionDataList): EnvDefinition
|
211
|
-
|
252
|
+
calculateEnvFromExtensions(extensions: ExtensionDataList): Promise<EnvDefinition>;
|
253
|
+
/**
|
254
|
+
* This function finds the first environment ID from a list of IDs by checking if it is register as env (to the slot).
|
255
|
+
* or contains env.jsonc file
|
256
|
+
* @param {string[]} ids - `ids` is an array of string values representing environment IDs. The function `findFirstEnv`
|
257
|
+
* takes this array as input and returns a Promise that resolves to a string value representing the first environment ID
|
258
|
+
* that matches certain conditions.
|
259
|
+
* @returns The `findFirstEnv` function returns a Promise that resolves to a string or undefined. The string represents
|
260
|
+
* the ID of the first environment that matches the conditions specified in the function, or undefined if no environment
|
261
|
+
* is found.
|
262
|
+
*/
|
263
|
+
private findFirstEnv;
|
264
|
+
private getEnvDefinitionByLegacyExtension;
|
265
|
+
getEnvIdFromEnvsConfig(component: Component): string | undefined;
|
212
266
|
getEnvDefinition(id: ComponentID): EnvDefinition | undefined;
|
213
267
|
getEnvDefinitionById(id: ComponentID): EnvDefinition | undefined;
|
214
268
|
getEnvDefinitionByLegacyId(id: BitId): Promise<EnvDefinition | undefined>;
|
@@ -244,11 +298,19 @@ export declare class EnvsMain {
|
|
244
298
|
* register an environment.
|
245
299
|
*/
|
246
300
|
registerEnv(env: Environment): void;
|
301
|
+
addNonLoadedEnvAsComponentIssues(components: Component[]): Promise<void>;
|
247
302
|
private createRuntime;
|
248
303
|
private aggregateByDefs;
|
249
304
|
private getEnvAspectDef;
|
250
305
|
private throwForDuplicateComponents;
|
251
306
|
static slots: (((registerFn: () => string) => SlotRegistry<Environment>) | ((registerFn: () => string) => SlotRegistry<EnvService<any, {}, {}>>))[];
|
252
|
-
static dependencies: import("@teambit/
|
253
|
-
static provider([graphql, loggerAspect, component, cli, worker
|
307
|
+
static dependencies: import("@teambit/bit").Aspect[];
|
308
|
+
static provider([graphql, loggerAspect, component, cli, worker, issues]: [
|
309
|
+
GraphqlMain,
|
310
|
+
LoggerMain,
|
311
|
+
ComponentMain,
|
312
|
+
CLIMain,
|
313
|
+
WorkerMain,
|
314
|
+
IssuesMain
|
315
|
+
], config: EnvsConfig, [envSlot, servicesRegistry]: [EnvsRegistry, ServicesRegistry], context: Harmony): Promise<EnvsMain>;
|
254
316
|
}
|
@@ -16,6 +16,27 @@ function _defineProperty2() {
|
|
16
16
|
};
|
17
17
|
return data;
|
18
18
|
}
|
19
|
+
function _bit() {
|
20
|
+
const data = require("@teambit/bit");
|
21
|
+
_bit = function () {
|
22
|
+
return data;
|
23
|
+
};
|
24
|
+
return data;
|
25
|
+
}
|
26
|
+
function _pLocate() {
|
27
|
+
const data = _interopRequireDefault(require("p-locate"));
|
28
|
+
_pLocate = function () {
|
29
|
+
return data;
|
30
|
+
};
|
31
|
+
return data;
|
32
|
+
}
|
33
|
+
function _commentJson() {
|
34
|
+
const data = require("comment-json");
|
35
|
+
_commentJson = function () {
|
36
|
+
return data;
|
37
|
+
};
|
38
|
+
return data;
|
39
|
+
}
|
19
40
|
function _cli() {
|
20
41
|
const data = require("@teambit/cli");
|
21
42
|
_cli = function () {
|
@@ -37,6 +58,27 @@ function _graphql() {
|
|
37
58
|
};
|
38
59
|
return data;
|
39
60
|
}
|
61
|
+
function _issues() {
|
62
|
+
const data = _interopRequireDefault(require("@teambit/issues"));
|
63
|
+
_issues = function () {
|
64
|
+
return data;
|
65
|
+
};
|
66
|
+
return data;
|
67
|
+
}
|
68
|
+
function _pMapSeries() {
|
69
|
+
const data = _interopRequireDefault(require("p-map-series"));
|
70
|
+
_pMapSeries = function () {
|
71
|
+
return data;
|
72
|
+
};
|
73
|
+
return data;
|
74
|
+
}
|
75
|
+
function _componentIssues() {
|
76
|
+
const data = require("@teambit/component-issues");
|
77
|
+
_componentIssues = function () {
|
78
|
+
return data;
|
79
|
+
};
|
80
|
+
return data;
|
81
|
+
}
|
40
82
|
function _harmony() {
|
41
83
|
const data = require("@teambit/harmony");
|
42
84
|
_harmony = function () {
|
@@ -147,6 +189,20 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
147
189
|
const DEFAULT_ENV = 'teambit.harmony/node';
|
148
190
|
exports.DEFAULT_ENV = DEFAULT_ENV;
|
149
191
|
class EnvsMain {
|
192
|
+
/**
|
193
|
+
* Envs that are failed to load
|
194
|
+
*/
|
195
|
+
|
196
|
+
/**
|
197
|
+
* Extensions that are failed to load
|
198
|
+
* We use this as sometime when we couldn't load an extension we don't know if it's an env or not
|
199
|
+
* We should ideally take it from the aspect loader aspect, but right now the aspect loader is using envs
|
200
|
+
*/
|
201
|
+
|
202
|
+
/**
|
203
|
+
* Ids of envs (not neccesrraly loaded successfully)
|
204
|
+
*/
|
205
|
+
|
150
206
|
/**
|
151
207
|
* icon of the extension.
|
152
208
|
*/
|
@@ -176,7 +232,9 @@ class EnvsMain {
|
|
176
232
|
this.componentMain = componentMain;
|
177
233
|
this.loggerMain = loggerMain;
|
178
234
|
this.workerMain = workerMain;
|
235
|
+
(0, _defineProperty2().default)(this, "failedToLoadEnvs", new Set());
|
179
236
|
(0, _defineProperty2().default)(this, "failedToLoadExt", new Set());
|
237
|
+
(0, _defineProperty2().default)(this, "envIds", new Set());
|
180
238
|
(0, _defineProperty2().default)(this, "alreadyShownWarning", {});
|
181
239
|
}
|
182
240
|
|
@@ -197,10 +255,29 @@ class EnvsMain {
|
|
197
255
|
* Then it is used to hide different errors that are caused by the same issue.
|
198
256
|
* @param {string} id - string - represents the unique identifier of an extension that failed to load.
|
199
257
|
*/
|
200
|
-
|
201
|
-
|
202
|
-
|
258
|
+
addFailedToLoadEnvs(id) {
|
259
|
+
this.failedToLoadEnvs.add(id);
|
260
|
+
this.envIds.add(id);
|
261
|
+
}
|
262
|
+
addFailedToLoadExt(id) {
|
263
|
+
this.failedToLoadExt.add(id);
|
264
|
+
if (this.envIds.has(id)) {
|
265
|
+
this.addFailedToLoadEnvs(id);
|
266
|
+
}
|
267
|
+
}
|
268
|
+
resetFailedToLoadEnvs() {
|
269
|
+
this.failedToLoadEnvs.clear();
|
270
|
+
this.failedToLoadExt.clear();
|
271
|
+
}
|
272
|
+
getFailedToLoadEnvs() {
|
273
|
+
const failedToLoadEnvs = Array.from(this.failedToLoadEnvs);
|
274
|
+
// Add all extensions which are also envs
|
275
|
+
for (const extId of this.failedToLoadExt) {
|
276
|
+
if (this.envIds.has(extId)) {
|
277
|
+
failedToLoadEnvs.push(extId);
|
278
|
+
}
|
203
279
|
}
|
280
|
+
return (0, _lodash().uniq)(failedToLoadEnvs);
|
204
281
|
}
|
205
282
|
|
206
283
|
/**
|
@@ -257,6 +334,44 @@ class EnvsMain {
|
|
257
334
|
});
|
258
335
|
return targetEnv;
|
259
336
|
}
|
337
|
+
|
338
|
+
/**
|
339
|
+
* This function checks if an environment manifest file exists in a given component or set of legacy files.
|
340
|
+
* @param {Component} [envComponent] - A component object that represents an environment. It contains information about
|
341
|
+
* the files and directories that make up the environment.
|
342
|
+
* @param {SourceFile[]} [legacyFiles] - An optional array of SourceFile objects representing the files in the legacy
|
343
|
+
* file system. If this parameter is not provided, the function will attempt to retrieve the files from the envComponent
|
344
|
+
* parameter.
|
345
|
+
* @returns a boolean value indicating whether an `env.jsonc` or `env.json` file exists in the `files` array of either
|
346
|
+
* the `envComponent` object or the `legacyFiles` array. If neither `envComponent` nor `legacyFiles` are provided, the
|
347
|
+
* function returns `undefined`.
|
348
|
+
*/
|
349
|
+
hasEnvManifest(envComponent, legacyFiles) {
|
350
|
+
if (!envComponent && !legacyFiles) return undefined;
|
351
|
+
// @ts-ignore
|
352
|
+
const files = legacyFiles || envComponent.filesystem.files;
|
353
|
+
const envJson = files.find(file => {
|
354
|
+
return file.relative === 'env.jsonc' || file.relative === 'env.json';
|
355
|
+
});
|
356
|
+
if (!envJson) return false;
|
357
|
+
return true;
|
358
|
+
}
|
359
|
+
getEnvManifest(envComponent, legacyFiles) {
|
360
|
+
// TODO: maybe throw an error here?
|
361
|
+
if (!envComponent && !legacyFiles) return undefined;
|
362
|
+
// @ts-ignore
|
363
|
+
const files = legacyFiles || envComponent.filesystem.files;
|
364
|
+
const envJson = files.find(file => {
|
365
|
+
return file.relative === 'env.jsonc' || file.relative === 'env.json';
|
366
|
+
});
|
367
|
+
if (!envJson) return undefined;
|
368
|
+
const object = (0, _commentJson().parse)(envJson.contents.toString('utf8'));
|
369
|
+
return object;
|
370
|
+
}
|
371
|
+
async hasEnvManifestById(envId, requesting) {
|
372
|
+
const component = await this.getEnvComponentByEnvId(envId, requesting);
|
373
|
+
return this.hasEnvManifest(component);
|
374
|
+
}
|
260
375
|
getEnvData(component) {
|
261
376
|
let envsData = component.state.aspects.get(_environments().EnvsAspect.id);
|
262
377
|
if (!envsData) {
|
@@ -347,7 +462,7 @@ class EnvsMain {
|
|
347
462
|
const newId = await host.resolveComponentId(envId);
|
348
463
|
const envComponent = await host.get(newId);
|
349
464
|
if (!envComponent) {
|
350
|
-
throw new (_bitError().BitError)(`can't load env. env id is ${envId} used by component ${requesting}`);
|
465
|
+
throw new (_bitError().BitError)(`can't load env. env id is ${envId} used by component ${requesting || 'unknown'}`);
|
351
466
|
}
|
352
467
|
return envComponent;
|
353
468
|
}
|
@@ -435,6 +550,45 @@ class EnvsMain {
|
|
435
550
|
return matchedEntry === null || matchedEntry === void 0 ? void 0 : matchedEntry.id;
|
436
551
|
}
|
437
552
|
|
553
|
+
/**
|
554
|
+
* This used to calculate the actual env during the component load.
|
555
|
+
* Do not use it to get the env (use getEnv instead)
|
556
|
+
* This should be used only during on load
|
557
|
+
*/
|
558
|
+
async calculateEnvId(component) {
|
559
|
+
// Search first for env configured via envs aspect itself
|
560
|
+
const envIdFromEnvsConfig = this.getEnvIdFromEnvsConfig(component);
|
561
|
+
// if (!envIdFromEnvsConfig) return this.getDefaultEnv();
|
562
|
+
const envIdFromEnvsConfigWithoutVersion = envIdFromEnvsConfig ? _component().ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion() : undefined;
|
563
|
+
if (envIdFromEnvsConfig && this.isCoreEnv(envIdFromEnvsConfig)) {
|
564
|
+
return _component().ComponentID.fromString(envIdFromEnvsConfig);
|
565
|
+
}
|
566
|
+
|
567
|
+
// in some cases we have the id configured in the teambit.envs/envs but without the version
|
568
|
+
// in such cases we won't find it in the slot
|
569
|
+
// we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs
|
570
|
+
if (envIdFromEnvsConfigWithoutVersion) {
|
571
|
+
const matchedEntry = component.state.aspects.entries.find(aspectEntry => {
|
572
|
+
return envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString() || envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString({
|
573
|
+
ignoreVersion: true
|
574
|
+
});
|
575
|
+
});
|
576
|
+
if (matchedEntry !== null && matchedEntry !== void 0 && matchedEntry.id) return matchedEntry === null || matchedEntry === void 0 ? void 0 : matchedEntry.id;
|
577
|
+
}
|
578
|
+
|
579
|
+
// in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env
|
580
|
+
let ids = [];
|
581
|
+
component.state.aspects.entries.forEach(aspectEntry => {
|
582
|
+
ids.push(aspectEntry.id.toString());
|
583
|
+
// ids.push(aspectEntry.id.toString({ ignoreVersion: true }));
|
584
|
+
});
|
585
|
+
|
586
|
+
ids = (0, _lodash().uniq)(ids);
|
587
|
+
const envId = await this.findFirstEnv(ids);
|
588
|
+
const finalId = envId || this.getDefaultEnv().id;
|
589
|
+
return _component().ComponentID.fromString(finalId);
|
590
|
+
}
|
591
|
+
|
438
592
|
/**
|
439
593
|
* This used to calculate the actual env during the component load.
|
440
594
|
* Do not use it to get the env (use getEnv instead)
|
@@ -448,6 +602,7 @@ class EnvsMain {
|
|
448
602
|
envIdFromEnvsConfigWithoutVersion = _component().ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion();
|
449
603
|
const envDef = this.getEnvDefinitionByStringId(envIdFromEnvsConfigWithoutVersion);
|
450
604
|
if (envDef) {
|
605
|
+
this.envIds.add(envDef.id);
|
451
606
|
return envDef;
|
452
607
|
}
|
453
608
|
}
|
@@ -466,14 +621,15 @@ class EnvsMain {
|
|
466
621
|
// same as it was when it registered to the slot.
|
467
622
|
const envDef = this.getEnvDefinitionById(matchedEntry.id);
|
468
623
|
if (envDef) {
|
624
|
+
this.envIds.add(envDef.id);
|
469
625
|
return envDef;
|
470
626
|
}
|
471
627
|
// Do not allow a non existing env
|
472
|
-
this.printWarningIfFirstTime(matchedEntry.id.toString(), `environment with ID: ${matchedEntry.id.toString()} configured on component ${component.id.toString()} was not
|
628
|
+
this.printWarningIfFirstTime(matchedEntry.id.toString(), `environment with ID: ${matchedEntry.id.toString()} configured on component ${component.id.toString()} was not loaded (run "bit install")`);
|
473
629
|
}
|
474
630
|
// Do not allow configure teambit.envs/envs on the component without configure the env aspect itself
|
475
|
-
const errMsg = new
|
476
|
-
this.printWarningIfFirstTime(envIdFromEnvsConfig, errMsg);
|
631
|
+
// const errMsg = new EnvNotConfiguredForComponent(envIdFromEnvsConfig as string, component.id.toString()).message;
|
632
|
+
// this.printWarningIfFirstTime(envIdFromEnvsConfig as string, errMsg);
|
477
633
|
}
|
478
634
|
|
479
635
|
// in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env
|
@@ -486,6 +642,7 @@ class EnvsMain {
|
|
486
642
|
return !!envDef;
|
487
643
|
});
|
488
644
|
if (envDefFromList) {
|
645
|
+
this.envIds.add(envDefFromList.id);
|
489
646
|
return envDefFromList;
|
490
647
|
}
|
491
648
|
return this.getDefaultEnv();
|
@@ -553,10 +710,52 @@ class EnvsMain {
|
|
553
710
|
}, []);
|
554
711
|
}
|
555
712
|
|
713
|
+
/**
|
714
|
+
* @deprecated DO NOT USE THIS METHOD ANYMORE!!! (PLEASE USE .calculateEnvId() instead!)
|
715
|
+
*/
|
716
|
+
async calculateEnvIdFromExtensions(extensions) {
|
717
|
+
// Search first for env configured via envs aspect itself
|
718
|
+
const envsAspect = extensions.findCoreExtension(_environments().EnvsAspect.id);
|
719
|
+
const envIdFromEnvsConfig = envsAspect === null || envsAspect === void 0 ? void 0 : envsAspect.config.env;
|
720
|
+
const envIdFromEnvsConfigWithoutVersion = envIdFromEnvsConfig ? _component().ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion() : undefined;
|
721
|
+
if (envIdFromEnvsConfig && this.isCoreEnv(envIdFromEnvsConfig)) {
|
722
|
+
return envIdFromEnvsConfig;
|
723
|
+
}
|
724
|
+
|
725
|
+
// in some cases we have the id configured in the teambit.envs/envs but without the version
|
726
|
+
// in such cases we won't find it in the slot
|
727
|
+
// we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs
|
728
|
+
if (envIdFromEnvsConfigWithoutVersion) {
|
729
|
+
const matchedEntry = extensions.find(extension => {
|
730
|
+
if (extension.newExtensionId) {
|
731
|
+
return envIdFromEnvsConfigWithoutVersion === extension.newExtensionId.toString() || envIdFromEnvsConfigWithoutVersion === extension.newExtensionId.toString({
|
732
|
+
ignoreVersion: true
|
733
|
+
});
|
734
|
+
}
|
735
|
+
return envIdFromEnvsConfigWithoutVersion === extension.stringId;
|
736
|
+
});
|
737
|
+
if (matchedEntry !== null && matchedEntry !== void 0 && matchedEntry.id) return matchedEntry === null || matchedEntry === void 0 ? void 0 : matchedEntry.stringId;
|
738
|
+
}
|
739
|
+
|
740
|
+
// in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env
|
741
|
+
const ids = [];
|
742
|
+
extensions.forEach(extension => {
|
743
|
+
if (extension.newExtensionId) {
|
744
|
+
ids.push(extension.newExtensionId.toString());
|
745
|
+
// ids.push(extension.newExtensionId.toString({ ignoreVersion: true }));
|
746
|
+
} else {
|
747
|
+
ids.push(extension.stringId);
|
748
|
+
}
|
749
|
+
});
|
750
|
+
const envId = await this.findFirstEnv(ids);
|
751
|
+
const finalId = envId || this.getDefaultEnv().id;
|
752
|
+
return finalId;
|
753
|
+
}
|
754
|
+
|
556
755
|
/**
|
557
756
|
* @deprecated DO NOT USE THIS METHOD ANYMORE!!! (PLEASE USE .calculateEnv() instead!)
|
558
757
|
*/
|
559
|
-
calculateEnvFromExtensions(extensions) {
|
758
|
+
async calculateEnvFromExtensions(extensions) {
|
560
759
|
// Search first for env configured via envs aspect itself
|
561
760
|
const envsAspect = extensions.findCoreExtension(_environments().EnvsAspect.id);
|
562
761
|
const envIdFromEnvsConfig = envsAspect === null || envsAspect === void 0 ? void 0 : envsAspect.config.env;
|
@@ -565,13 +764,10 @@ class EnvsMain {
|
|
565
764
|
envIdFromEnvsConfigWithoutVersion = _component().ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion();
|
566
765
|
const envDef = this.getEnvDefinitionByStringId(envIdFromEnvsConfigWithoutVersion);
|
567
766
|
if (envDef) {
|
767
|
+
this.envIds.add(envDef.id);
|
568
768
|
return envDef;
|
569
769
|
}
|
570
770
|
}
|
571
|
-
const getEnvDefinitionByLegacyExtension = extension => {
|
572
|
-
const envDef = extension.newExtensionId ? this.getEnvDefinitionById(extension.newExtensionId) : this.getEnvDefinitionByStringId(extension.stringId);
|
573
|
-
return envDef;
|
574
|
-
};
|
575
771
|
|
576
772
|
// in some cases we have the id configured in the teambit.envs/envs but without the version
|
577
773
|
// in such cases we won't find it in the slot
|
@@ -588,31 +784,76 @@ class EnvsMain {
|
|
588
784
|
if (matchedEntry) {
|
589
785
|
// during the tag process, the version in the aspect-entry-id is changed and is not the
|
590
786
|
// same as it was when it registered to the slot.
|
591
|
-
const envDef = getEnvDefinitionByLegacyExtension(matchedEntry);
|
787
|
+
const envDef = this.getEnvDefinitionByLegacyExtension(matchedEntry);
|
592
788
|
if (envDef) {
|
789
|
+
this.envIds.add(envDef.id);
|
593
790
|
return envDef;
|
594
791
|
}
|
595
792
|
// Do not allow a non existing env
|
596
|
-
this.printWarningIfFirstTime(
|
793
|
+
// this.printWarningIfFirstTime(
|
794
|
+
// matchedEntry.id.toString(),
|
795
|
+
// `environment with ID: ${matchedEntry.id.toString()} was not found`
|
796
|
+
// );
|
597
797
|
}
|
598
798
|
// Do not allow configure teambit.envs/envs on the component without configure the env aspect itself
|
599
|
-
const errMsg = new
|
600
|
-
this.printWarningIfFirstTime(envIdFromEnvsConfig, errMsg);
|
799
|
+
// const errMsg = new EnvNotConfiguredForComponent(envIdFromEnvsConfig).message;
|
800
|
+
// this.printWarningIfFirstTime(envIdFromEnvsConfig, errMsg);
|
601
801
|
}
|
602
802
|
|
603
803
|
// in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env
|
604
|
-
|
605
|
-
extensions.
|
606
|
-
|
607
|
-
|
608
|
-
|
804
|
+
const ids = [];
|
805
|
+
extensions.forEach(extension => {
|
806
|
+
if (extension.newExtensionId) {
|
807
|
+
ids.push(extension.newExtensionId.toString());
|
808
|
+
// ids.push(extension.newExtensionId.toString({ ignoreVersion: true }));
|
809
|
+
} else {
|
810
|
+
ids.push(extension.stringId);
|
609
811
|
}
|
610
|
-
return !!envDef;
|
611
812
|
});
|
612
|
-
|
613
|
-
|
813
|
+
const envId = await this.findFirstEnv(ids);
|
814
|
+
const envDef = envId ? this.getEnvDefinitionByStringId(envId) : undefined;
|
815
|
+
return envDef || this.getDefaultEnv();
|
816
|
+
}
|
817
|
+
|
818
|
+
/**
|
819
|
+
* This function finds the first environment ID from a list of IDs by checking if it is register as env (to the slot).
|
820
|
+
* or contains env.jsonc file
|
821
|
+
* @param {string[]} ids - `ids` is an array of string values representing environment IDs. The function `findFirstEnv`
|
822
|
+
* takes this array as input and returns a Promise that resolves to a string value representing the first environment ID
|
823
|
+
* that matches certain conditions.
|
824
|
+
* @returns The `findFirstEnv` function returns a Promise that resolves to a string or undefined. The string represents
|
825
|
+
* the ID of the first environment that matches the conditions specified in the function, or undefined if no environment
|
826
|
+
* is found.
|
827
|
+
*/
|
828
|
+
async findFirstEnv(ids) {
|
829
|
+
let isFoundWithoutVersion = false;
|
830
|
+
const envId = await (0, _pLocate().default)(ids, async id => {
|
831
|
+
const idWithoutVersion = id.split('@')[0];
|
832
|
+
if (this.isCoreEnv(idWithoutVersion)) return true;
|
833
|
+
if ((0, _bit().isCoreAspect)(idWithoutVersion)) return false;
|
834
|
+
const envDef = this.getEnvDefinitionByStringId(id);
|
835
|
+
if (envDef) return true;
|
836
|
+
const envDefWithoutVersion = this.getEnvDefinitionByStringId(idWithoutVersion);
|
837
|
+
if (envDefWithoutVersion) {
|
838
|
+
isFoundWithoutVersion = true;
|
839
|
+
return true;
|
840
|
+
}
|
841
|
+
const envComponent = await this.getEnvComponentByEnvId(id);
|
842
|
+
const hasManifest = this.hasEnvManifest(envComponent);
|
843
|
+
if (hasManifest) return true;
|
844
|
+
const isUsingEnvEnv = this.isUsingEnvEnv(envComponent);
|
845
|
+
return !!isUsingEnvEnv;
|
846
|
+
});
|
847
|
+
let finalEnvId;
|
848
|
+
if (envId) {
|
849
|
+
finalEnvId = isFoundWithoutVersion ? envId === null || envId === void 0 ? void 0 : envId.split('@')[0] : envId;
|
850
|
+
this.envIds.add(envId);
|
614
851
|
}
|
615
|
-
return
|
852
|
+
return finalEnvId;
|
853
|
+
}
|
854
|
+
getEnvDefinitionByLegacyExtension(extension) {
|
855
|
+
const envDef = extension.newExtensionId ? this.getEnvDefinitionById(extension.newExtensionId) : this.getEnvDefinitionByStringId(extension.stringId);
|
856
|
+
return envDef;
|
616
857
|
}
|
617
858
|
getEnvIdFromEnvsConfig(component) {
|
618
859
|
const envsAspect = component.state.aspects.get(_environments().EnvsAspect.id);
|
@@ -657,9 +898,10 @@ class EnvsMain {
|
|
657
898
|
return this.getEnvDefinitionByStringId('teambit.envs/env');
|
658
899
|
}
|
659
900
|
printWarningIfFirstTime(envId, message) {
|
660
|
-
if (!this.alreadyShownWarning[envId] && !this.
|
901
|
+
if (!this.alreadyShownWarning[envId] && !this.failedToLoadEnvs.has(envId)) {
|
661
902
|
this.alreadyShownWarning[envId] = true;
|
662
903
|
this.logger.consoleWarning(message);
|
904
|
+
this.addFailedToLoadEnvs(envId);
|
663
905
|
}
|
664
906
|
}
|
665
907
|
|
@@ -724,6 +966,30 @@ class EnvsMain {
|
|
724
966
|
registerEnv(env) {
|
725
967
|
return this.envSlot.register(env);
|
726
968
|
}
|
969
|
+
async addNonLoadedEnvAsComponentIssues(components) {
|
970
|
+
await (0, _pMapSeries().default)(components, async component => {
|
971
|
+
const envId = await this.calculateEnvId(component);
|
972
|
+
const envIdStr = envId.toString();
|
973
|
+
if (!this.isEnvRegistered(envIdStr)) {
|
974
|
+
this.addFailedToLoadEnvs(envIdStr);
|
975
|
+
// If there is no version and the env is not in the workspace this is not valid
|
976
|
+
// you can't set external env without version
|
977
|
+
if (!envIdStr.includes('@')) {
|
978
|
+
const foundComp = components.find(c => c.id.toStringWithoutVersion() === envIdStr);
|
979
|
+
if (!foundComp) {
|
980
|
+
component.state.issues.getOrCreate(_componentIssues().IssuesClasses.ExternalEnvWithoutVersion).data = {
|
981
|
+
envId: envIdStr,
|
982
|
+
componentId: component.id.toString()
|
983
|
+
};
|
984
|
+
} else {
|
985
|
+
component.state.issues.getOrCreate(_componentIssues().IssuesClasses.NonLoadedEnv).data = envIdStr;
|
986
|
+
}
|
987
|
+
} else {
|
988
|
+
component.state.issues.getOrCreate(_componentIssues().IssuesClasses.NonLoadedEnv).data = envIdStr;
|
989
|
+
}
|
990
|
+
}
|
991
|
+
});
|
992
|
+
}
|
727
993
|
|
728
994
|
// refactor here
|
729
995
|
async createRuntime(components) {
|
@@ -769,10 +1035,11 @@ class EnvsMain {
|
|
769
1035
|
throw new Error(`found duplicated components: ${duplications.join(', ')}`);
|
770
1036
|
}
|
771
1037
|
}
|
772
|
-
static async provider([graphql, loggerAspect, component, cli, worker], config, [envSlot, servicesRegistry], context) {
|
1038
|
+
static async provider([graphql, loggerAspect, component, cli, worker, issues], config, [envSlot, servicesRegistry], context) {
|
773
1039
|
const logger = loggerAspect.createLogger(_environments().EnvsAspect.id);
|
774
1040
|
const envs = new EnvsMain(config, context, envSlot, logger, servicesRegistry, component, loggerAspect, worker);
|
775
1041
|
component.registerShowFragments([new (_env().EnvFragment)(envs)]);
|
1042
|
+
issues.registerAddComponentsIssues(envs.addNonLoadedEnvAsComponentIssues.bind(envs));
|
776
1043
|
const envsCmd = new (_envs().EnvsCmd)(envs, component);
|
777
1044
|
envsCmd.commands = [new (_envs().ListEnvsCmd)(envs, component), new (_envs().GetEnvCmd)(envs, component)];
|
778
1045
|
cli.register(envsCmd);
|
@@ -783,7 +1050,7 @@ class EnvsMain {
|
|
783
1050
|
exports.EnvsMain = EnvsMain;
|
784
1051
|
(0, _defineProperty2().default)(EnvsMain, "runtime", _cli().MainRuntime);
|
785
1052
|
(0, _defineProperty2().default)(EnvsMain, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType()]);
|
786
|
-
(0, _defineProperty2().default)(EnvsMain, "dependencies", [_graphql().GraphqlAspect, _logger().LoggerAspect, _component().ComponentAspect, _cli().CLIAspect, _worker().default]);
|
1053
|
+
(0, _defineProperty2().default)(EnvsMain, "dependencies", [_graphql().GraphqlAspect, _logger().LoggerAspect, _component().ComponentAspect, _cli().CLIAspect, _worker().default, _issues().default]);
|
787
1054
|
_environments().EnvsAspect.addRuntime(EnvsMain);
|
788
1055
|
|
789
1056
|
//# sourceMappingURL=environments.main.runtime.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["DEFAULT_ENV","EnvsMain","icon","constructor","config","harmony","envSlot","logger","servicesRegistry","componentMain","loggerMain","workerMain","Set","createEnvironment","components","createRuntime","addFailedToLoadExtension","id","failedToLoadExt","has","add","getDefaultEnv","defaultEnv","get","Error","EnvDefinition","getCoreEnvsIds","compose","targetEnv","envTransformers","a","reduce","acc","transformer","override","propsToOverride","env","merge","sourceEnv","allNames","keys","o","Object","prototype","getPrototypeOf","name","getOwnPropertyNames","forEach","key","fn","includes","bind","getEnvData","component","envsData","state","aspects","EnvsAspect","toString","data","getEnvIdFromEnvsData","ignoreVersion","undefined","rawEnvId","envIdWithoutVersion","ComponentID","fromString","toStringWithoutVersion","getEnvId","envIdFromEnvData","withVersion","resolveEnv","withVersionMatch","toArray","find","envId","withVersionMatchId","exactMatch","exactMatchId","EnvNotConfiguredForComponent","isUsingCoreEnv","isCoreEnv","getEnv","envDef","getEnvDefinitionByStringId","EnvNotFound","getEnvComponent","getEnvComponentByEnvId","requesting","host","getHost","newId","resolveComponentId","envComponent","BitError","getOrCalculateEnv","err","calculateEnv","getDescriptor","calcDescriptor","componentDescriptor","getComponentEnvDescriptor","envComponentSelfDescriptor","getEnvSelfDescriptor","result","self","isEnvRegistered","getEnvFromComponent","services","getServices","selfDescriptor","getEnvDescriptorFromEnvDef","toObject","__getDescriptor","systemDescriptor","type","split","description","matchedEntry","entries","aspectEntry","envIdFromEnvsConfig","getEnvIdFromEnvsConfig","envIdFromEnvsConfigWithoutVersion","getEnvDefinitionById","printWarningIfFirstTime","errMsg","message","envDefFromList","getAllEnvsConfiguredOnComponent","getEnvFromEnvsConfig","getEnvsNotFromEnvsConfig","hasEnvConfigured","Boolean","length","getAllRegisteredEnvs","map","envData","getEnvPlugin","EnvPlugin","push","calculateEnvFromExtensions","extensions","envsAspect","findCoreExtension","getEnvDefinitionByLegacyExtension","extension","newExtensionId","stringId","getEnvDefinition","allVersions","all","filter","first","head","getEnvDefinitionByLegacyId","getEnvsEnvDefinition","alreadyShownWarning","consoleWarning","isUsingAspectEnv","isUsingEnvEnv","isEnv","registerService","envServices","register","allServices","currentServices","service","implements","EnvServiceList","registerEnv","Runtime","aggregateByDefs","throwForDuplicateComponents","envsMap","Promise","envAspectDef","getEnvAspectDef","EnvRuntime","resolvedAspects","resolveAspects","MainRuntime","requestedOnly","filterByRuntime","useScopeAspectsCapsule","def","idsStr","c","duplications","findDuplications","join","provider","graphql","loggerAspect","cli","worker","context","createLogger","envs","registerShowFragments","EnvFragment","envsCmd","EnvsCmd","commands","ListEnvsCmd","GetEnvCmd","environmentsSchema","Slot","withType","GraphqlAspect","LoggerAspect","ComponentAspect","CLIAspect","WorkerAspect","addRuntime"],"sources":["environments.main.runtime.ts"],"sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { Component, ComponentAspect, ComponentMain, ComponentID } from '@teambit/component';\nimport { GraphqlAspect, GraphqlMain } from '@teambit/graphql';\nimport { Harmony, Slot, SlotRegistry } from '@teambit/harmony';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport type { AspectDefinition } from '@teambit/aspect-loader';\nimport { ExtensionDataList, ExtensionDataEntry } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { BitError } from '@teambit/bit-error';\nimport findDuplications from '@teambit/legacy/dist/utils/array/find-duplications';\nimport { head } from 'lodash';\nimport WorkerAspect, { WorkerMain } from '@teambit/worker';\nimport { BitId } from '@teambit/legacy-bit-id';\nimport { EnvService } from './services';\nimport { Environment } from './environment';\nimport { EnvsAspect } from './environments.aspect';\nimport { environmentsSchema } from './environments.graphql';\nimport { EnvRuntime, Runtime } from './runtime';\nimport { EnvDefinition } from './env-definition';\nimport { EnvServiceList } from './env-service-list';\nimport { EnvsCmd, GetEnvCmd, ListEnvsCmd } from './envs.cmd';\nimport { EnvFragment } from './env.fragment';\nimport { EnvNotFound, EnvNotConfiguredForComponent } from './exceptions';\nimport { EnvPlugin } from './env.plugin';\n\nexport type EnvsRegistry = SlotRegistry<Environment>;\n\nexport type EnvsConfig = {\n env: string;\n options: EnvOptions;\n};\n\nexport type EnvOptions = {};\n\nexport type EnvTransformer = (env: Environment) => Environment;\n\nexport type ServicesRegistry = SlotRegistry<Array<EnvService<any>>>;\n\nexport type RegularCompDescriptor = {\n id: string;\n icon?: string;\n type?: string;\n name?: string;\n description?: string;\n};\nexport type EnvCompDescriptorProps = RegularCompDescriptor & {\n services?: {\n env: {\n id: string;\n icon: string;\n name?: string;\n description?: string;\n };\n services: Array<{\n id: string;\n name?: string;\n description?: string;\n data: any;\n }>;\n };\n};\n\nexport type EnvCompDescriptor = EnvCompDescriptorProps & {\n self?: EnvCompDescriptorProps;\n};\n\nexport type Descriptor = RegularCompDescriptor | EnvCompDescriptor;\n\nexport const DEFAULT_ENV = 'teambit.harmony/node';\n\nexport class EnvsMain {\n private failedToLoadExt = new Set<string>();\n\n static runtime = MainRuntime;\n\n private alreadyShownWarning = {};\n\n /**\n * icon of the extension.\n */\n icon() {\n return `<svg width=\"50\" height=\"50\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"25\" cy=\"25\" r=\"20\"/>\n </svg>`;\n }\n\n constructor(\n /**\n * environments extension configuration.\n */\n readonly config: EnvsConfig,\n\n /**\n * harmony context.\n */\n private harmony: Harmony,\n\n /**\n * slot for allowing extensions to register new environment.\n */\n private envSlot: EnvsRegistry,\n\n private logger: Logger,\n\n private servicesRegistry: ServicesRegistry,\n\n private componentMain: ComponentMain,\n\n private loggerMain: LoggerMain,\n\n private workerMain: WorkerMain\n ) {}\n\n /**\n * creates a new runtime environments for a set of components.\n */\n async createEnvironment(components: Component[]): Promise<Runtime> {\n return this.createRuntime(components);\n }\n\n /**\n *\n * @param id\n */\n /**\n * This function adds an extension ID to a set of failed to load extensions.\n * This mostly used by the aspect loader to add such issues\n * Then it is used to hide different errors that are caused by the same issue.\n * @param {string} id - string - represents the unique identifier of an extension that failed to load.\n */\n addFailedToLoadExtension(id: string) {\n if (!this.failedToLoadExt.has(id)) {\n this.failedToLoadExt.add(id);\n }\n }\n\n /**\n * get the configured default env.\n */\n getDefaultEnv(): EnvDefinition {\n const defaultEnv = this.envSlot.get(DEFAULT_ENV);\n if (!defaultEnv) throw new Error('default env must be set.');\n\n return new EnvDefinition(DEFAULT_ENV, defaultEnv);\n }\n\n getCoreEnvsIds(): string[] {\n return [\n 'teambit.harmony/aspect',\n 'teambit.react/react',\n 'teambit.harmony/node',\n 'teambit.react/react-native',\n 'teambit.html/html',\n 'teambit.mdx/mdx',\n 'teambit.envs/env',\n 'teambit.mdx/readme',\n ];\n }\n\n /**\n * compose a new environment from a list of environment transformers.\n */\n compose(targetEnv: Environment, envTransformers: EnvTransformer[]) {\n const a = envTransformers.reduce((acc, transformer) => {\n acc = transformer(acc);\n return acc;\n }, targetEnv);\n\n return a;\n }\n\n /**\n * create an env transformer which overrides specific env properties.\n */\n override(propsToOverride: Environment): EnvTransformer {\n return (env: Environment) => {\n return this.merge(propsToOverride, env);\n };\n }\n\n /**\n * compose two environments into one.\n */\n merge<T extends Environment, S extends Environment>(targetEnv: Environment, sourceEnv: Environment): T & S {\n const allNames = new Set<string>();\n const keys = ['icon', 'name', 'description'];\n for (let o = sourceEnv; o !== Object.prototype; o = Object.getPrototypeOf(o)) {\n for (const name of Object.getOwnPropertyNames(o)) {\n allNames.add(name);\n }\n }\n\n allNames.forEach((key: string) => {\n const fn = sourceEnv[key];\n if (targetEnv[key]) return;\n if (keys.includes(key)) targetEnv[key] = fn;\n if (!fn || !fn.bind) {\n return;\n }\n targetEnv[key] = fn.bind(sourceEnv);\n });\n\n return targetEnv as T & S;\n }\n\n getEnvData(component: Component): Descriptor {\n let envsData = component.state.aspects.get(EnvsAspect.id);\n if (!envsData) {\n // TODO: remove this once we re-export old components used to store the data here\n envsData = component.state.aspects.get('teambit.workspace/workspace');\n }\n if (!envsData) throw new Error(`env was not configured on component ${component.id.toString()}`);\n return envsData.data as Descriptor;\n }\n\n /**\n * Return the id of the env as configured in the envs data (without version by default)\n * The reason it's not contain version by default is that we want to take the version from the aspect defined on the component itself\n * As this version is stay up to date during tagging the env along with the component\n * @param component\n * @param ignoreVersion\n */\n private getEnvIdFromEnvsData(component: Component, ignoreVersion = true): string | undefined {\n const envsData = this.getEnvData(component);\n if (!envsData) return undefined;\n const rawEnvId = envsData.id;\n if (!rawEnvId) return undefined;\n if (!ignoreVersion) return rawEnvId;\n const envIdWithoutVersion = ComponentID.fromString(rawEnvId).toStringWithoutVersion();\n return envIdWithoutVersion;\n }\n\n /**\n * get the env id of the given component.\n */\n getEnvId(component: Component): string {\n const envIdFromEnvData = this.getEnvIdFromEnvsData(component);\n if (!envIdFromEnvData) {\n // This should never happen\n throw new Error(`no env found for ${component.id.toString()}`);\n }\n const withVersion = this.resolveEnv(component, envIdFromEnvData);\n const withVersionMatch = this.envSlot.toArray().find(([envId]) => {\n return withVersion?.toString() === envId;\n });\n const withVersionMatchId = withVersionMatch?.[0];\n if (withVersionMatchId) return withVersionMatchId;\n\n // Handle core envs\n const exactMatch = this.envSlot.toArray().find(([envId]) => {\n return envIdFromEnvData === envId;\n });\n\n const exactMatchId = exactMatch?.[0];\n if (exactMatchId) return exactMatchId;\n\n if (!withVersion) throw new EnvNotConfiguredForComponent(envIdFromEnvData, component.id.toString());\n return withVersion.toString();\n }\n\n isUsingCoreEnv(component: Component): boolean {\n const envId = this.getEnvId(component);\n return this.isCoreEnv(envId);\n }\n\n isCoreEnv(envId: string): boolean {\n return this.getCoreEnvsIds().includes(envId);\n }\n\n /**\n * get the env of the given component.\n * In case you are asking for the env during on load you should use calculateEnv instead\n */\n getEnv(component: Component): EnvDefinition {\n const id = this.getEnvId(component);\n const envDef = this.getEnvDefinitionByStringId(id);\n if (envDef) {\n return envDef;\n }\n // Do not allow a non existing env\n throw new EnvNotFound(id, component.id.toString());\n }\n\n /**\n * get the env component of the given component.\n */\n async getEnvComponent(component: Component): Promise<Component> {\n const envId = this.getEnvId(component);\n return this.getEnvComponentByEnvId(envId, component.id.toString());\n }\n\n /**\n * get the env component by the env id.\n */\n async getEnvComponentByEnvId(envId: string, requesting: string): Promise<Component> {\n const host = this.componentMain.getHost();\n const newId = await host.resolveComponentId(envId);\n const envComponent = await host.get(newId);\n if (!envComponent) {\n throw new BitError(`can't load env. env id is ${envId} used by component ${requesting}`);\n }\n return envComponent;\n }\n\n /**\n * get the env of the given component.\n * This will try to use the regular getEnv but fallback to the calculate env (in case you are using it during on load)\n * This is safe to be used on onLoad as well\n */\n getOrCalculateEnv(component: Component): EnvDefinition {\n try {\n return this.getEnv(component);\n } catch (err) {\n return this.calculateEnv(component);\n }\n }\n\n /**\n * get an environment Descriptor.\n */\n getDescriptor(component: Component): Descriptor | undefined {\n const envsData = this.getEnvData(component);\n envsData.id = this.resolveEnv(component, envsData.id)?.toString() || envsData.id;\n return envsData;\n }\n\n async calcDescriptor(component: Component): Promise<Descriptor | undefined> {\n const componentDescriptor = await this.getComponentEnvDescriptor(component);\n if (!componentDescriptor) return undefined;\n const envComponentSelfDescriptor = await this.getEnvSelfDescriptor(component);\n const result = envComponentSelfDescriptor\n ? { ...componentDescriptor, self: envComponentSelfDescriptor }\n : componentDescriptor;\n return result;\n }\n\n /**\n * Get env descriptor from the env itself if the component is an env\n * This will be empty for regular component, and will only contain data for env themself\n */\n private async getEnvSelfDescriptor(envComponent: Component): Promise<EnvCompDescriptorProps | undefined> {\n // !important calculate only on the env itself.\n if (!this.isEnvRegistered(envComponent.id.toString())) {\n return undefined;\n }\n\n const envDef = this.getEnvFromComponent(envComponent);\n if (!envDef) return undefined;\n\n const services = this.getServices(envDef);\n // const selfDescriptor = (await this.getEnvDescriptorFromEnvDef(envDef)) || {};\n const selfDescriptor = await this.getEnvDescriptorFromEnvDef(envDef);\n\n if (!selfDescriptor) return undefined;\n return {\n ...selfDescriptor,\n services: services.toObject(),\n };\n }\n\n /**\n * Get env descriptor from the env that a given component is using\n */\n private async getComponentEnvDescriptor(component: Component): Promise<RegularCompDescriptor | undefined> {\n const envDef = this.calculateEnv(component);\n return this.getEnvDescriptorFromEnvDef(envDef);\n }\n\n private async getEnvDescriptorFromEnvDef(envDef: EnvDefinition): Promise<RegularCompDescriptor | undefined> {\n if (!envDef.env.__getDescriptor || typeof envDef.env.__getDescriptor !== 'function') {\n return undefined;\n }\n const systemDescriptor = await envDef.env.__getDescriptor();\n\n return {\n type: systemDescriptor.type,\n // Make sure to store the env id in the data without the version\n // The version should always come from the aspect id configured on the component\n id: envDef.id.split('@')[0],\n name: envDef.name,\n icon: envDef.env.icon,\n description: envDef.description,\n };\n }\n\n resolveEnv(component: Component, id: string) {\n const matchedEntry = component.state.aspects.entries.find((aspectEntry) => {\n return id === aspectEntry.id.toString() || id === aspectEntry.id.toString({ ignoreVersion: true });\n });\n\n return matchedEntry?.id;\n }\n\n /**\n * This used to calculate the actual env during the component load.\n * Do not use it to get the env (use getEnv instead)\n * This should be used only during on load\n */\n calculateEnv(component: Component): EnvDefinition {\n // Search first for env configured via envs aspect itself\n const envIdFromEnvsConfig = this.getEnvIdFromEnvsConfig(component);\n let envIdFromEnvsConfigWithoutVersion;\n if (envIdFromEnvsConfig) {\n envIdFromEnvsConfigWithoutVersion = ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion();\n const envDef = this.getEnvDefinitionByStringId(envIdFromEnvsConfigWithoutVersion);\n if (envDef) {\n return envDef;\n }\n }\n\n // in some cases we have the id configured in the teambit.envs/envs but without the version\n // in such cases we won't find it in the slot\n // we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs\n if (envIdFromEnvsConfigWithoutVersion) {\n const matchedEntry = component.state.aspects.entries.find((aspectEntry) => {\n return (\n envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString() ||\n envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString({ ignoreVersion: true })\n );\n });\n if (matchedEntry) {\n // during the tag process, the version in the aspect-entry-id is changed and is not the\n // same as it was when it registered to the slot.\n const envDef = this.getEnvDefinitionById(matchedEntry.id);\n if (envDef) {\n return envDef;\n }\n // Do not allow a non existing env\n this.printWarningIfFirstTime(\n matchedEntry.id.toString(),\n `environment with ID: ${matchedEntry.id.toString()} configured on component ${component.id.toString()} was not found`\n );\n }\n // Do not allow configure teambit.envs/envs on the component without configure the env aspect itself\n const errMsg = new EnvNotConfiguredForComponent(envIdFromEnvsConfig as string, component.id.toString()).message;\n this.printWarningIfFirstTime(envIdFromEnvsConfig as string, errMsg);\n }\n\n // in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env\n let envDefFromList;\n component.state.aspects.entries.find((aspectEntry) => {\n const envDef = this.getEnvDefinitionById(aspectEntry.id);\n if (envDef) {\n envDefFromList = envDef;\n }\n return !!envDef;\n });\n\n if (envDefFromList) {\n return envDefFromList;\n }\n return this.getDefaultEnv();\n }\n\n /**\n * an env can be configured on a component in two ways:\n * 1) explicitly inside \"teambit.envs/envs\". `{ \"teambit.envs/envs\": { \"env\": \"my-env\" } }`\n * 2) the env aspect is set on the variant as any other aspect, e.g. `{ \"my-env\": {} }`\n *\n * this method returns #1 if exists, otherwise, #2.\n */\n getAllEnvsConfiguredOnComponent(component: Component): EnvDefinition[] {\n // if a component has \"envs\" config, use it and ignore other components that are set up\n // in this components which happen to be envs.\n const envDef = this.getEnvFromEnvsConfig(component);\n if (envDef) {\n return [envDef];\n }\n\n return this.getEnvsNotFromEnvsConfig(component);\n }\n\n /**\n * whether a component has an env configured (either by variant or .bitmap).\n */\n hasEnvConfigured(component: Component): boolean {\n return Boolean(this.getAllEnvsConfiguredOnComponent(component).length);\n }\n\n getAllRegisteredEnvs(): string[] {\n return this.envSlot.toArray().map((envData) => envData[0]);\n }\n\n getEnvPlugin() {\n return new EnvPlugin(this.envSlot, this.servicesRegistry, this.loggerMain, this.workerMain, this.harmony);\n }\n\n /**\n * an env can be configured on a component in two ways:\n * 1) explicitly inside \"teambit.envs/envs\". `{ \"teambit.envs/envs\": { \"env\": \"my-env\" } }`\n * 2) the env aspect is set on the variant as any other aspect, e.g. `{ \"my-env\": {} }`\n *\n * this method returns only #1\n */\n getEnvFromEnvsConfig(component: Component): EnvDefinition | undefined {\n const envIdFromEnvsConfig = this.getEnvIdFromEnvsConfig(component);\n if (!envIdFromEnvsConfig) {\n return undefined;\n }\n const envIdFromEnvsConfigWithoutVersion = ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion();\n const envDef = this.getEnvDefinitionByStringId(envIdFromEnvsConfigWithoutVersion);\n return envDef;\n }\n\n /**\n * an env can be configured on a component in two ways:\n * 1) explicitly inside \"teambit.envs/envs\". `{ \"teambit.envs/envs\": { \"env\": \"my-env\" } }`\n * 2) the env aspect is set on the variant as any other aspect, e.g. `{ \"my-env\": {} }`\n *\n * this method returns only #2\n */\n getEnvsNotFromEnvsConfig(component: Component): EnvDefinition[] {\n return component.state.aspects.entries.reduce((acc: EnvDefinition[], aspectEntry) => {\n const envDef = this.getEnvDefinitionById(aspectEntry.id);\n if (envDef) acc.push(envDef);\n return acc;\n }, []);\n }\n\n /**\n * @deprecated DO NOT USE THIS METHOD ANYMORE!!! (PLEASE USE .calculateEnv() instead!)\n */\n calculateEnvFromExtensions(extensions: ExtensionDataList): EnvDefinition {\n // Search first for env configured via envs aspect itself\n const envsAspect = extensions.findCoreExtension(EnvsAspect.id);\n const envIdFromEnvsConfig = envsAspect?.config.env;\n let envIdFromEnvsConfigWithoutVersion;\n\n if (envIdFromEnvsConfig) {\n envIdFromEnvsConfigWithoutVersion = ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion();\n const envDef = this.getEnvDefinitionByStringId(envIdFromEnvsConfigWithoutVersion);\n if (envDef) {\n return envDef;\n }\n }\n\n const getEnvDefinitionByLegacyExtension = (extension: ExtensionDataEntry): EnvDefinition | undefined => {\n const envDef = extension.newExtensionId\n ? this.getEnvDefinitionById(extension.newExtensionId)\n : this.getEnvDefinitionByStringId(extension.stringId);\n return envDef;\n };\n\n // in some cases we have the id configured in the teambit.envs/envs but without the version\n // in such cases we won't find it in the slot\n // we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs\n if (envIdFromEnvsConfigWithoutVersion) {\n const matchedEntry = extensions.find((extension) => {\n if (extension.newExtensionId) {\n return (\n envIdFromEnvsConfigWithoutVersion === extension.newExtensionId.toString() ||\n envIdFromEnvsConfigWithoutVersion === extension.newExtensionId.toString({ ignoreVersion: true })\n );\n }\n return envIdFromEnvsConfigWithoutVersion === extension.stringId;\n });\n if (matchedEntry) {\n // during the tag process, the version in the aspect-entry-id is changed and is not the\n // same as it was when it registered to the slot.\n const envDef = getEnvDefinitionByLegacyExtension(matchedEntry);\n if (envDef) {\n return envDef;\n }\n // Do not allow a non existing env\n this.printWarningIfFirstTime(\n matchedEntry.id.toString(),\n `environment with ID: ${matchedEntry.id.toString()} was not found`\n );\n }\n // Do not allow configure teambit.envs/envs on the component without configure the env aspect itself\n const errMsg = new EnvNotConfiguredForComponent(envIdFromEnvsConfig).message;\n this.printWarningIfFirstTime(envIdFromEnvsConfig, errMsg);\n }\n\n // in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env\n let envDefFromList;\n extensions.find((extension: ExtensionDataEntry) => {\n const envDef = getEnvDefinitionByLegacyExtension(extension);\n if (envDef) {\n envDefFromList = envDef;\n }\n return !!envDef;\n });\n\n if (envDefFromList) {\n return envDefFromList;\n }\n return this.getDefaultEnv();\n }\n\n private getEnvIdFromEnvsConfig(component: Component): string | undefined {\n const envsAspect = component.state.aspects.get(EnvsAspect.id);\n return envsAspect?.config.env;\n }\n\n getEnvDefinition(id: ComponentID) {\n const allVersions = this.envSlot.toArray();\n const all = allVersions.filter(([envId]) => envId.includes(id.toStringWithoutVersion()));\n const first = head(all);\n if (!first) return undefined;\n const [envId, env] = first;\n return new EnvDefinition(envId, env);\n }\n\n getEnvDefinitionById(id: ComponentID): EnvDefinition | undefined {\n const envDef =\n this.getEnvDefinitionByStringId(id.toString()) ||\n this.getEnvDefinitionByStringId(id.toString({ ignoreVersion: true }));\n return envDef;\n }\n\n async getEnvDefinitionByLegacyId(id: BitId): Promise<EnvDefinition | undefined> {\n const host = this.componentMain.getHost();\n const newId = await host.resolveComponentId(id);\n return this.getEnvDefinitionById(newId);\n }\n\n public getEnvDefinitionByStringId(envId: string): EnvDefinition | undefined {\n const env = this.envSlot.get(envId);\n if (env) {\n return new EnvDefinition(envId, env as Environment);\n }\n return undefined;\n }\n\n getEnvFromComponent(envComponent: Component): EnvDefinition | undefined {\n const env = this.getEnvDefinitionById(envComponent.id);\n return env;\n }\n\n /**\n * Return the env definition of teambit.envs/env\n */\n getEnvsEnvDefinition(): EnvDefinition {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.getEnvDefinitionByStringId('teambit.envs/env')!;\n }\n\n private printWarningIfFirstTime(envId: string, message: string) {\n if (!this.alreadyShownWarning[envId] && !this.failedToLoadExt.has(envId)) {\n this.alreadyShownWarning[envId] = true;\n this.logger.consoleWarning(message);\n }\n }\n\n /**\n * determines whether an env is registered.\n */\n isEnvRegistered(id: string) {\n return Boolean(this.envSlot.get(id));\n }\n\n isUsingAspectEnv(component: Component): boolean {\n const data = this.getEnvData(component);\n if (!data) return false;\n return data.type === 'aspect';\n }\n\n isUsingEnvEnv(component: Component): boolean {\n const data = this.getEnvData(component);\n if (!data) return false;\n return data.type === 'env';\n }\n\n /**\n * Check if the given component is an env component.\n * @param component\n * @returns\n */\n isEnv(component: Component): boolean {\n return (\n this.isUsingEnvEnv(component) ||\n this.isEnvRegistered(component.id.toString()) ||\n this.isEnvRegistered(component.id.toStringWithoutVersion())\n );\n }\n\n /**\n * register a new environment service.\n */\n registerService(...envServices: EnvService<any>[]) {\n this.servicesRegistry.register(envServices);\n return this;\n }\n\n /**\n * get list of services enabled on an env.\n */\n getServices(env: EnvDefinition): EnvServiceList {\n const allServices = this.servicesRegistry.toArray();\n const services: [string, EnvService<any>][] = [];\n allServices.forEach(([id, currentServices]) => {\n currentServices.forEach((service) => {\n if (this.implements(env, service)) {\n services.push([id, service]);\n }\n });\n });\n return new EnvServiceList(env, services);\n }\n\n implements(env: EnvDefinition, service: EnvService<any>) {\n // TODO: remove this after refactoring everything and remove getDescriptor from being optional.\n if (!service.getDescriptor) return false;\n return !!service.getDescriptor(env);\n }\n\n /**\n * register an environment.\n */\n registerEnv(env: Environment) {\n return this.envSlot.register(env);\n }\n\n // refactor here\n private async createRuntime(components: Component[]): Promise<Runtime> {\n return new Runtime(await this.aggregateByDefs(components), this.logger);\n }\n\n // :TODO can be refactored to few utilities who will make repeating this very easy.\n private async aggregateByDefs(components: Component[]): Promise<EnvRuntime[]> {\n this.throwForDuplicateComponents(components);\n const envsMap = {};\n components.forEach((component: Component) => {\n const envDef = this.getEnv(component);\n const envId = envDef.id;\n const env = envDef.env;\n // handle config as well when aggregating envs.\n if (envsMap[envId]) envsMap[envId].components.push(component);\n else\n envsMap[envId] = {\n components: [component],\n env,\n };\n });\n\n return Promise.all(\n Object.keys(envsMap).map(async (key) => {\n const envAspectDef = await this.getEnvAspectDef(key);\n return new EnvRuntime(key, envsMap[key].env, envsMap[key].components, envAspectDef);\n })\n );\n }\n\n private async getEnvAspectDef(envId: string): Promise<AspectDefinition> {\n const host = this.componentMain.getHost();\n const id = await host.resolveComponentId(envId);\n // We don't want to filter by runtime here as we want to also get envs that configured as plugins. so they don't\n // contain the runtime path.\n const resolvedAspects = await host.resolveAspects(MainRuntime.name, [id], {\n requestedOnly: true,\n filterByRuntime: false,\n useScopeAspectsCapsule: true,\n });\n const def = resolvedAspects[0];\n\n return def;\n }\n\n private throwForDuplicateComponents(components: Component[]) {\n const idsStr = components.map((c) => c.id.toString());\n const duplications = findDuplications(idsStr);\n if (duplications.length) {\n throw new Error(`found duplicated components: ${duplications.join(', ')}`);\n }\n }\n\n static slots = [Slot.withType<Environment>(), Slot.withType<EnvService<any>>()];\n\n static dependencies = [GraphqlAspect, LoggerAspect, ComponentAspect, CLIAspect, WorkerAspect];\n\n static async provider(\n [graphql, loggerAspect, component, cli, worker]: [GraphqlMain, LoggerMain, ComponentMain, CLIMain, WorkerMain],\n config: EnvsConfig,\n [envSlot, servicesRegistry]: [EnvsRegistry, ServicesRegistry],\n context: Harmony\n ) {\n const logger = loggerAspect.createLogger(EnvsAspect.id);\n const envs = new EnvsMain(config, context, envSlot, logger, servicesRegistry, component, loggerAspect, worker);\n component.registerShowFragments([new EnvFragment(envs)]);\n const envsCmd = new EnvsCmd(envs, component);\n envsCmd.commands = [new ListEnvsCmd(envs, component), new GetEnvCmd(envs, component)];\n cli.register(envsCmd);\n graphql.register(environmentsSchema(envs));\n return envs;\n }\n}\n\nEnvsAspect.addRuntime(EnvsMain);\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["DEFAULT_ENV","EnvsMain","icon","constructor","config","harmony","envSlot","logger","servicesRegistry","componentMain","loggerMain","workerMain","Set","createEnvironment","components","createRuntime","addFailedToLoadEnvs","id","failedToLoadEnvs","add","envIds","addFailedToLoadExt","failedToLoadExt","has","resetFailedToLoadEnvs","clear","getFailedToLoadEnvs","Array","from","extId","push","uniq","getDefaultEnv","defaultEnv","get","Error","EnvDefinition","getCoreEnvsIds","compose","targetEnv","envTransformers","a","reduce","acc","transformer","override","propsToOverride","env","merge","sourceEnv","allNames","keys","o","Object","prototype","getPrototypeOf","name","getOwnPropertyNames","forEach","key","fn","includes","bind","hasEnvManifest","envComponent","legacyFiles","undefined","files","filesystem","envJson","find","file","relative","getEnvManifest","object","parse","contents","toString","hasEnvManifestById","envId","requesting","component","getEnvComponentByEnvId","getEnvData","envsData","state","aspects","EnvsAspect","data","getEnvIdFromEnvsData","ignoreVersion","rawEnvId","envIdWithoutVersion","ComponentID","fromString","toStringWithoutVersion","getEnvId","envIdFromEnvData","withVersion","resolveEnv","withVersionMatch","toArray","withVersionMatchId","exactMatch","exactMatchId","EnvNotConfiguredForComponent","isUsingCoreEnv","isCoreEnv","getEnv","envDef","getEnvDefinitionByStringId","EnvNotFound","getEnvComponent","host","getHost","newId","resolveComponentId","BitError","getOrCalculateEnv","err","calculateEnv","getDescriptor","calcDescriptor","componentDescriptor","getComponentEnvDescriptor","envComponentSelfDescriptor","getEnvSelfDescriptor","result","self","isEnvRegistered","getEnvFromComponent","services","getServices","selfDescriptor","getEnvDescriptorFromEnvDef","toObject","__getDescriptor","systemDescriptor","type","split","description","matchedEntry","entries","aspectEntry","calculateEnvId","envIdFromEnvsConfig","getEnvIdFromEnvsConfig","envIdFromEnvsConfigWithoutVersion","ids","findFirstEnv","finalId","getEnvDefinitionById","printWarningIfFirstTime","envDefFromList","getAllEnvsConfiguredOnComponent","getEnvFromEnvsConfig","getEnvsNotFromEnvsConfig","hasEnvConfigured","Boolean","length","getAllRegisteredEnvs","map","envData","getEnvPlugin","EnvPlugin","calculateEnvIdFromExtensions","extensions","envsAspect","findCoreExtension","extension","newExtensionId","stringId","calculateEnvFromExtensions","getEnvDefinitionByLegacyExtension","isFoundWithoutVersion","pLocate","idWithoutVersion","isCoreAspect","envDefWithoutVersion","hasManifest","isUsingEnvEnv","finalEnvId","getEnvDefinition","allVersions","all","filter","first","head","getEnvDefinitionByLegacyId","getEnvsEnvDefinition","message","alreadyShownWarning","consoleWarning","isUsingAspectEnv","isEnv","registerService","envServices","register","allServices","currentServices","service","implements","EnvServiceList","registerEnv","addNonLoadedEnvAsComponentIssues","pMapSeries","envIdStr","foundComp","c","issues","getOrCreate","IssuesClasses","ExternalEnvWithoutVersion","componentId","NonLoadedEnv","Runtime","aggregateByDefs","throwForDuplicateComponents","envsMap","Promise","envAspectDef","getEnvAspectDef","EnvRuntime","resolvedAspects","resolveAspects","MainRuntime","requestedOnly","filterByRuntime","useScopeAspectsCapsule","def","idsStr","duplications","findDuplications","join","provider","graphql","loggerAspect","cli","worker","context","createLogger","envs","registerShowFragments","EnvFragment","registerAddComponentsIssues","envsCmd","EnvsCmd","commands","ListEnvsCmd","GetEnvCmd","environmentsSchema","Slot","withType","GraphqlAspect","LoggerAspect","ComponentAspect","CLIAspect","WorkerAspect","IssuesAspect","addRuntime"],"sources":["environments.main.runtime.ts"],"sourcesContent":["import { isCoreAspect } from '@teambit/bit';\nimport pLocate from 'p-locate';\nimport { parse } from 'comment-json';\nimport { SourceFile } from '@teambit/legacy/dist/consumer/component/sources';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { Component, ComponentAspect, ComponentMain, ComponentID } from '@teambit/component';\nimport { GraphqlAspect, GraphqlMain } from '@teambit/graphql';\nimport IssuesAspect, { IssuesMain } from '@teambit/issues';\nimport pMapSeries from 'p-map-series';\nimport { IssuesClasses } from '@teambit/component-issues';\nimport { Harmony, Slot, SlotRegistry } from '@teambit/harmony';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport type { AspectDefinition } from '@teambit/aspect-loader';\nimport { ExtensionDataList, ExtensionDataEntry } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { BitError } from '@teambit/bit-error';\nimport findDuplications from '@teambit/legacy/dist/utils/array/find-duplications';\nimport { head, uniq } from 'lodash';\nimport WorkerAspect, { WorkerMain } from '@teambit/worker';\nimport { BitId } from '@teambit/legacy-bit-id';\nimport { EnvService } from './services';\nimport { Environment } from './environment';\nimport { EnvsAspect } from './environments.aspect';\nimport { environmentsSchema } from './environments.graphql';\nimport { EnvRuntime, Runtime } from './runtime';\nimport { EnvDefinition } from './env-definition';\nimport { EnvServiceList } from './env-service-list';\nimport { EnvsCmd, GetEnvCmd, ListEnvsCmd } from './envs.cmd';\nimport { EnvFragment } from './env.fragment';\nimport { EnvNotFound, EnvNotConfiguredForComponent } from './exceptions';\nimport { EnvPlugin } from './env.plugin';\n\nexport type EnvsRegistry = SlotRegistry<Environment>;\n\nexport type EnvsConfig = {\n env: string;\n options: EnvOptions;\n};\n\nexport type EnvOptions = {};\n\nexport type EnvTransformer = (env: Environment) => Environment;\n\nexport type ServicesRegistry = SlotRegistry<Array<EnvService<any>>>;\n\nexport type RegularCompDescriptor = {\n id: string;\n icon?: string;\n type?: string;\n name?: string;\n description?: string;\n};\nexport type EnvCompDescriptorProps = RegularCompDescriptor & {\n services?: {\n env: {\n id: string;\n icon: string;\n name?: string;\n description?: string;\n };\n services: Array<{\n id: string;\n name?: string;\n description?: string;\n data: any;\n }>;\n };\n};\n\nexport type EnvCompDescriptor = EnvCompDescriptorProps & {\n self?: EnvCompDescriptorProps;\n};\n\nexport type Descriptor = RegularCompDescriptor | EnvCompDescriptor;\n\nexport const DEFAULT_ENV = 'teambit.harmony/node';\n\nexport class EnvsMain {\n /**\n * Envs that are failed to load\n */\n private failedToLoadEnvs = new Set<string>();\n /**\n * Extensions that are failed to load\n * We use this as sometime when we couldn't load an extension we don't know if it's an env or not\n * We should ideally take it from the aspect loader aspect, but right now the aspect loader is using envs\n */\n private failedToLoadExt = new Set<string>();\n /**\n * Ids of envs (not neccesrraly loaded successfully)\n */\n public envIds = new Set<string>();\n\n static runtime = MainRuntime;\n\n private alreadyShownWarning = {};\n\n /**\n * icon of the extension.\n */\n icon() {\n return `<svg width=\"50\" height=\"50\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"25\" cy=\"25\" r=\"20\"/>\n </svg>`;\n }\n\n constructor(\n /**\n * environments extension configuration.\n */\n readonly config: EnvsConfig,\n\n /**\n * harmony context.\n */\n private harmony: Harmony,\n\n /**\n * slot for allowing extensions to register new environment.\n */\n private envSlot: EnvsRegistry,\n\n private logger: Logger,\n\n private servicesRegistry: ServicesRegistry,\n\n private componentMain: ComponentMain,\n\n private loggerMain: LoggerMain,\n\n private workerMain: WorkerMain\n ) {}\n\n /**\n * creates a new runtime environments for a set of components.\n */\n async createEnvironment(components: Component[]): Promise<Runtime> {\n return this.createRuntime(components);\n }\n\n /**\n *\n * @param id\n */\n /**\n * This function adds an extension ID to a set of failed to load extensions.\n * This mostly used by the aspect loader to add such issues\n * Then it is used to hide different errors that are caused by the same issue.\n * @param {string} id - string - represents the unique identifier of an extension that failed to load.\n */\n addFailedToLoadEnvs(id: string) {\n this.failedToLoadEnvs.add(id);\n this.envIds.add(id);\n }\n\n addFailedToLoadExt(id: string) {\n this.failedToLoadExt.add(id);\n if (this.envIds.has(id)) {\n this.addFailedToLoadEnvs(id);\n }\n }\n\n resetFailedToLoadEnvs() {\n this.failedToLoadEnvs.clear();\n this.failedToLoadExt.clear();\n }\n\n getFailedToLoadEnvs() {\n const failedToLoadEnvs = Array.from(this.failedToLoadEnvs);\n // Add all extensions which are also envs\n for (const extId of this.failedToLoadExt) {\n if (this.envIds.has(extId)) {\n failedToLoadEnvs.push(extId);\n }\n }\n return uniq(failedToLoadEnvs);\n }\n\n /**\n * get the configured default env.\n */\n getDefaultEnv(): EnvDefinition {\n const defaultEnv = this.envSlot.get(DEFAULT_ENV);\n if (!defaultEnv) throw new Error('default env must be set.');\n\n return new EnvDefinition(DEFAULT_ENV, defaultEnv);\n }\n\n getCoreEnvsIds(): string[] {\n return [\n 'teambit.harmony/aspect',\n 'teambit.react/react',\n 'teambit.harmony/node',\n 'teambit.react/react-native',\n 'teambit.html/html',\n 'teambit.mdx/mdx',\n 'teambit.envs/env',\n 'teambit.mdx/readme',\n ];\n }\n\n /**\n * compose a new environment from a list of environment transformers.\n */\n compose(targetEnv: Environment, envTransformers: EnvTransformer[]) {\n const a = envTransformers.reduce((acc, transformer) => {\n acc = transformer(acc);\n return acc;\n }, targetEnv);\n\n return a;\n }\n\n /**\n * create an env transformer which overrides specific env properties.\n */\n override(propsToOverride: Environment): EnvTransformer {\n return (env: Environment) => {\n return this.merge(propsToOverride, env);\n };\n }\n\n /**\n * compose two environments into one.\n */\n merge<T extends Environment, S extends Environment>(targetEnv: Environment, sourceEnv: Environment): T & S {\n const allNames = new Set<string>();\n const keys = ['icon', 'name', 'description'];\n for (let o = sourceEnv; o !== Object.prototype; o = Object.getPrototypeOf(o)) {\n for (const name of Object.getOwnPropertyNames(o)) {\n allNames.add(name);\n }\n }\n\n allNames.forEach((key: string) => {\n const fn = sourceEnv[key];\n if (targetEnv[key]) return;\n if (keys.includes(key)) targetEnv[key] = fn;\n if (!fn || !fn.bind) {\n return;\n }\n targetEnv[key] = fn.bind(sourceEnv);\n });\n\n return targetEnv as T & S;\n }\n\n /**\n * This function checks if an environment manifest file exists in a given component or set of legacy files.\n * @param {Component} [envComponent] - A component object that represents an environment. It contains information about\n * the files and directories that make up the environment.\n * @param {SourceFile[]} [legacyFiles] - An optional array of SourceFile objects representing the files in the legacy\n * file system. If this parameter is not provided, the function will attempt to retrieve the files from the envComponent\n * parameter.\n * @returns a boolean value indicating whether an `env.jsonc` or `env.json` file exists in the `files` array of either\n * the `envComponent` object or the `legacyFiles` array. If neither `envComponent` nor `legacyFiles` are provided, the\n * function returns `undefined`.\n */\n hasEnvManifest(envComponent?: Component, legacyFiles?: SourceFile[]): boolean | undefined {\n if (!envComponent && !legacyFiles) return undefined;\n // @ts-ignore\n const files = legacyFiles || envComponent.filesystem.files;\n const envJson = files.find((file) => {\n return file.relative === 'env.jsonc' || file.relative === 'env.json';\n });\n\n if (!envJson) return false;\n return true;\n }\n\n getEnvManifest(envComponent?: Component, legacyFiles?: SourceFile[]): Object | undefined {\n // TODO: maybe throw an error here?\n if (!envComponent && !legacyFiles) return undefined;\n // @ts-ignore\n const files = legacyFiles || envComponent.filesystem.files;\n const envJson = files.find((file) => {\n return file.relative === 'env.jsonc' || file.relative === 'env.json';\n });\n\n if (!envJson) return undefined;\n\n const object = parse(envJson.contents.toString('utf8'));\n return object;\n }\n\n async hasEnvManifestById(envId: string, requesting: string): Promise<boolean | undefined> {\n const component = await this.getEnvComponentByEnvId(envId, requesting);\n return this.hasEnvManifest(component);\n }\n\n getEnvData(component: Component): Descriptor {\n let envsData = component.state.aspects.get(EnvsAspect.id);\n if (!envsData) {\n // TODO: remove this once we re-export old components used to store the data here\n envsData = component.state.aspects.get('teambit.workspace/workspace');\n }\n if (!envsData) throw new Error(`env was not configured on component ${component.id.toString()}`);\n return envsData.data as Descriptor;\n }\n\n /**\n * Return the id of the env as configured in the envs data (without version by default)\n * The reason it's not contain version by default is that we want to take the version from the aspect defined on the component itself\n * As this version is stay up to date during tagging the env along with the component\n * @param component\n * @param ignoreVersion\n */\n private getEnvIdFromEnvsData(component: Component, ignoreVersion = true): string | undefined {\n const envsData = this.getEnvData(component);\n if (!envsData) return undefined;\n const rawEnvId = envsData.id;\n if (!rawEnvId) return undefined;\n if (!ignoreVersion) return rawEnvId;\n const envIdWithoutVersion = ComponentID.fromString(rawEnvId).toStringWithoutVersion();\n return envIdWithoutVersion;\n }\n\n /**\n * get the env id of the given component.\n */\n getEnvId(component: Component): string {\n const envIdFromEnvData = this.getEnvIdFromEnvsData(component);\n if (!envIdFromEnvData) {\n // This should never happen\n throw new Error(`no env found for ${component.id.toString()}`);\n }\n const withVersion = this.resolveEnv(component, envIdFromEnvData);\n const withVersionMatch = this.envSlot.toArray().find(([envId]) => {\n return withVersion?.toString() === envId;\n });\n const withVersionMatchId = withVersionMatch?.[0];\n if (withVersionMatchId) return withVersionMatchId;\n\n // Handle core envs\n const exactMatch = this.envSlot.toArray().find(([envId]) => {\n return envIdFromEnvData === envId;\n });\n\n const exactMatchId = exactMatch?.[0];\n if (exactMatchId) return exactMatchId;\n\n if (!withVersion) throw new EnvNotConfiguredForComponent(envIdFromEnvData, component.id.toString());\n return withVersion.toString();\n }\n\n isUsingCoreEnv(component: Component): boolean {\n const envId = this.getEnvId(component);\n return this.isCoreEnv(envId);\n }\n\n isCoreEnv(envId: string): boolean {\n return this.getCoreEnvsIds().includes(envId);\n }\n\n /**\n * get the env of the given component.\n * In case you are asking for the env during on load you should use calculateEnv instead\n */\n getEnv(component: Component): EnvDefinition {\n const id = this.getEnvId(component);\n const envDef = this.getEnvDefinitionByStringId(id);\n if (envDef) {\n return envDef;\n }\n // Do not allow a non existing env\n throw new EnvNotFound(id, component.id.toString());\n }\n\n /**\n * get the env component of the given component.\n */\n async getEnvComponent(component: Component): Promise<Component> {\n const envId = this.getEnvId(component);\n return this.getEnvComponentByEnvId(envId, component.id.toString());\n }\n\n /**\n * get the env component by the env id.\n */\n async getEnvComponentByEnvId(envId: string, requesting?: string): Promise<Component> {\n const host = this.componentMain.getHost();\n const newId = await host.resolveComponentId(envId);\n const envComponent = await host.get(newId);\n if (!envComponent) {\n throw new BitError(`can't load env. env id is ${envId} used by component ${requesting || 'unknown'}`);\n }\n return envComponent;\n }\n\n /**\n * get the env of the given component.\n * This will try to use the regular getEnv but fallback to the calculate env (in case you are using it during on load)\n * This is safe to be used on onLoad as well\n */\n getOrCalculateEnv(component: Component): EnvDefinition {\n try {\n return this.getEnv(component);\n } catch (err) {\n return this.calculateEnv(component);\n }\n }\n\n /**\n * get an environment Descriptor.\n */\n getDescriptor(component: Component): Descriptor | undefined {\n const envsData = this.getEnvData(component);\n envsData.id = this.resolveEnv(component, envsData.id)?.toString() || envsData.id;\n return envsData;\n }\n\n async calcDescriptor(component: Component): Promise<Descriptor | undefined> {\n const componentDescriptor = await this.getComponentEnvDescriptor(component);\n if (!componentDescriptor) return undefined;\n const envComponentSelfDescriptor = await this.getEnvSelfDescriptor(component);\n const result = envComponentSelfDescriptor\n ? { ...componentDescriptor, self: envComponentSelfDescriptor }\n : componentDescriptor;\n return result;\n }\n\n /**\n * Get env descriptor from the env itself if the component is an env\n * This will be empty for regular component, and will only contain data for env themself\n */\n private async getEnvSelfDescriptor(envComponent: Component): Promise<EnvCompDescriptorProps | undefined> {\n // !important calculate only on the env itself.\n if (!this.isEnvRegistered(envComponent.id.toString())) {\n return undefined;\n }\n\n const envDef = this.getEnvFromComponent(envComponent);\n if (!envDef) return undefined;\n\n const services = this.getServices(envDef);\n // const selfDescriptor = (await this.getEnvDescriptorFromEnvDef(envDef)) || {};\n const selfDescriptor = await this.getEnvDescriptorFromEnvDef(envDef);\n\n if (!selfDescriptor) return undefined;\n return {\n ...selfDescriptor,\n services: services.toObject(),\n };\n }\n\n /**\n * Get env descriptor from the env that a given component is using\n */\n private async getComponentEnvDescriptor(component: Component): Promise<RegularCompDescriptor | undefined> {\n const envDef = this.calculateEnv(component);\n return this.getEnvDescriptorFromEnvDef(envDef);\n }\n\n private async getEnvDescriptorFromEnvDef(envDef: EnvDefinition): Promise<RegularCompDescriptor | undefined> {\n if (!envDef.env.__getDescriptor || typeof envDef.env.__getDescriptor !== 'function') {\n return undefined;\n }\n const systemDescriptor = await envDef.env.__getDescriptor();\n\n return {\n type: systemDescriptor.type,\n // Make sure to store the env id in the data without the version\n // The version should always come from the aspect id configured on the component\n id: envDef.id.split('@')[0],\n name: envDef.name,\n icon: envDef.env.icon,\n description: envDef.description,\n };\n }\n\n resolveEnv(component: Component, id: string) {\n const matchedEntry = component.state.aspects.entries.find((aspectEntry) => {\n return id === aspectEntry.id.toString() || id === aspectEntry.id.toString({ ignoreVersion: true });\n });\n\n return matchedEntry?.id;\n }\n\n /**\n * This used to calculate the actual env during the component load.\n * Do not use it to get the env (use getEnv instead)\n * This should be used only during on load\n */\n async calculateEnvId(component: Component): Promise<ComponentID> {\n // Search first for env configured via envs aspect itself\n const envIdFromEnvsConfig = this.getEnvIdFromEnvsConfig(component);\n // if (!envIdFromEnvsConfig) return this.getDefaultEnv();\n const envIdFromEnvsConfigWithoutVersion = envIdFromEnvsConfig\n ? ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion()\n : undefined;\n\n if (envIdFromEnvsConfig && this.isCoreEnv(envIdFromEnvsConfig)) {\n return ComponentID.fromString(envIdFromEnvsConfig);\n }\n\n // in some cases we have the id configured in the teambit.envs/envs but without the version\n // in such cases we won't find it in the slot\n // we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs\n if (envIdFromEnvsConfigWithoutVersion) {\n const matchedEntry = component.state.aspects.entries.find((aspectEntry) => {\n return (\n envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString() ||\n envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString({ ignoreVersion: true })\n );\n });\n\n if (matchedEntry?.id) return matchedEntry?.id;\n }\n\n // in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env\n let ids: string[] = [];\n component.state.aspects.entries.forEach((aspectEntry) => {\n ids.push(aspectEntry.id.toString());\n // ids.push(aspectEntry.id.toString({ ignoreVersion: true }));\n });\n ids = uniq(ids);\n const envId = await this.findFirstEnv(ids);\n const finalId = envId || this.getDefaultEnv().id;\n return ComponentID.fromString(finalId);\n }\n\n /**\n * This used to calculate the actual env during the component load.\n * Do not use it to get the env (use getEnv instead)\n * This should be used only during on load\n */\n calculateEnv(component: Component): EnvDefinition {\n // Search first for env configured via envs aspect itself\n const envIdFromEnvsConfig = this.getEnvIdFromEnvsConfig(component);\n let envIdFromEnvsConfigWithoutVersion;\n if (envIdFromEnvsConfig) {\n envIdFromEnvsConfigWithoutVersion = ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion();\n const envDef = this.getEnvDefinitionByStringId(envIdFromEnvsConfigWithoutVersion);\n if (envDef) {\n this.envIds.add(envDef.id);\n return envDef;\n }\n }\n\n // in some cases we have the id configured in the teambit.envs/envs but without the version\n // in such cases we won't find it in the slot\n // we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs\n if (envIdFromEnvsConfigWithoutVersion) {\n const matchedEntry = component.state.aspects.entries.find((aspectEntry) => {\n return (\n envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString() ||\n envIdFromEnvsConfigWithoutVersion === aspectEntry.id.toString({ ignoreVersion: true })\n );\n });\n if (matchedEntry) {\n // during the tag process, the version in the aspect-entry-id is changed and is not the\n // same as it was when it registered to the slot.\n const envDef = this.getEnvDefinitionById(matchedEntry.id);\n if (envDef) {\n this.envIds.add(envDef.id);\n return envDef;\n }\n // Do not allow a non existing env\n this.printWarningIfFirstTime(\n matchedEntry.id.toString(),\n `environment with ID: ${matchedEntry.id.toString()} configured on component ${component.id.toString()} was not loaded (run \"bit install\")`\n );\n }\n // Do not allow configure teambit.envs/envs on the component without configure the env aspect itself\n // const errMsg = new EnvNotConfiguredForComponent(envIdFromEnvsConfig as string, component.id.toString()).message;\n // this.printWarningIfFirstTime(envIdFromEnvsConfig as string, errMsg);\n }\n\n // in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env\n let envDefFromList;\n component.state.aspects.entries.find((aspectEntry) => {\n const envDef = this.getEnvDefinitionById(aspectEntry.id);\n if (envDef) {\n envDefFromList = envDef;\n }\n return !!envDef;\n });\n\n if (envDefFromList) {\n this.envIds.add(envDefFromList.id);\n return envDefFromList;\n }\n return this.getDefaultEnv();\n }\n\n /**\n * an env can be configured on a component in two ways:\n * 1) explicitly inside \"teambit.envs/envs\". `{ \"teambit.envs/envs\": { \"env\": \"my-env\" } }`\n * 2) the env aspect is set on the variant as any other aspect, e.g. `{ \"my-env\": {} }`\n *\n * this method returns #1 if exists, otherwise, #2.\n */\n getAllEnvsConfiguredOnComponent(component: Component): EnvDefinition[] {\n // if a component has \"envs\" config, use it and ignore other components that are set up\n // in this components which happen to be envs.\n const envDef = this.getEnvFromEnvsConfig(component);\n if (envDef) {\n return [envDef];\n }\n\n return this.getEnvsNotFromEnvsConfig(component);\n }\n\n /**\n * whether a component has an env configured (either by variant or .bitmap).\n */\n hasEnvConfigured(component: Component): boolean {\n return Boolean(this.getAllEnvsConfiguredOnComponent(component).length);\n }\n\n getAllRegisteredEnvs(): string[] {\n return this.envSlot.toArray().map((envData) => envData[0]);\n }\n\n getEnvPlugin() {\n return new EnvPlugin(this.envSlot, this.servicesRegistry, this.loggerMain, this.workerMain, this.harmony);\n }\n\n /**\n * an env can be configured on a component in two ways:\n * 1) explicitly inside \"teambit.envs/envs\". `{ \"teambit.envs/envs\": { \"env\": \"my-env\" } }`\n * 2) the env aspect is set on the variant as any other aspect, e.g. `{ \"my-env\": {} }`\n *\n * this method returns only #1\n */\n getEnvFromEnvsConfig(component: Component): EnvDefinition | undefined {\n const envIdFromEnvsConfig = this.getEnvIdFromEnvsConfig(component);\n if (!envIdFromEnvsConfig) {\n return undefined;\n }\n const envIdFromEnvsConfigWithoutVersion = ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion();\n const envDef = this.getEnvDefinitionByStringId(envIdFromEnvsConfigWithoutVersion);\n return envDef;\n }\n\n /**\n * an env can be configured on a component in two ways:\n * 1) explicitly inside \"teambit.envs/envs\". `{ \"teambit.envs/envs\": { \"env\": \"my-env\" } }`\n * 2) the env aspect is set on the variant as any other aspect, e.g. `{ \"my-env\": {} }`\n *\n * this method returns only #2\n */\n getEnvsNotFromEnvsConfig(component: Component): EnvDefinition[] {\n return component.state.aspects.entries.reduce((acc: EnvDefinition[], aspectEntry) => {\n const envDef = this.getEnvDefinitionById(aspectEntry.id);\n if (envDef) acc.push(envDef);\n return acc;\n }, []);\n }\n\n /**\n * @deprecated DO NOT USE THIS METHOD ANYMORE!!! (PLEASE USE .calculateEnvId() instead!)\n */\n async calculateEnvIdFromExtensions(extensions: ExtensionDataList): Promise<string> {\n // Search first for env configured via envs aspect itself\n const envsAspect = extensions.findCoreExtension(EnvsAspect.id);\n const envIdFromEnvsConfig = envsAspect?.config.env;\n\n const envIdFromEnvsConfigWithoutVersion = envIdFromEnvsConfig\n ? ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion()\n : undefined;\n\n if (envIdFromEnvsConfig && this.isCoreEnv(envIdFromEnvsConfig)) {\n return envIdFromEnvsConfig;\n }\n\n // in some cases we have the id configured in the teambit.envs/envs but without the version\n // in such cases we won't find it in the slot\n // we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs\n if (envIdFromEnvsConfigWithoutVersion) {\n const matchedEntry = extensions.find((extension) => {\n if (extension.newExtensionId) {\n return (\n envIdFromEnvsConfigWithoutVersion === extension.newExtensionId.toString() ||\n envIdFromEnvsConfigWithoutVersion === extension.newExtensionId.toString({ ignoreVersion: true })\n );\n }\n return envIdFromEnvsConfigWithoutVersion === extension.stringId;\n });\n if (matchedEntry?.id) return matchedEntry?.stringId;\n }\n\n // in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env\n const ids: string[] = [];\n extensions.forEach((extension) => {\n if (extension.newExtensionId) {\n ids.push(extension.newExtensionId.toString());\n // ids.push(extension.newExtensionId.toString({ ignoreVersion: true }));\n } else {\n ids.push(extension.stringId);\n }\n });\n const envId = await this.findFirstEnv(ids);\n const finalId = envId || this.getDefaultEnv().id;\n return finalId;\n }\n\n /**\n * @deprecated DO NOT USE THIS METHOD ANYMORE!!! (PLEASE USE .calculateEnv() instead!)\n */\n async calculateEnvFromExtensions(extensions: ExtensionDataList): Promise<EnvDefinition> {\n // Search first for env configured via envs aspect itself\n const envsAspect = extensions.findCoreExtension(EnvsAspect.id);\n const envIdFromEnvsConfig = envsAspect?.config.env;\n let envIdFromEnvsConfigWithoutVersion;\n\n if (envIdFromEnvsConfig) {\n envIdFromEnvsConfigWithoutVersion = ComponentID.fromString(envIdFromEnvsConfig).toStringWithoutVersion();\n const envDef = this.getEnvDefinitionByStringId(envIdFromEnvsConfigWithoutVersion);\n if (envDef) {\n this.envIds.add(envDef.id);\n return envDef;\n }\n }\n\n // in some cases we have the id configured in the teambit.envs/envs but without the version\n // in such cases we won't find it in the slot\n // we search in the component aspect list a matching aspect which is match the id from the teambit.envs/envs\n if (envIdFromEnvsConfigWithoutVersion) {\n const matchedEntry = extensions.find((extension) => {\n if (extension.newExtensionId) {\n return (\n envIdFromEnvsConfigWithoutVersion === extension.newExtensionId.toString() ||\n envIdFromEnvsConfigWithoutVersion === extension.newExtensionId.toString({ ignoreVersion: true })\n );\n }\n return envIdFromEnvsConfigWithoutVersion === extension.stringId;\n });\n if (matchedEntry) {\n // during the tag process, the version in the aspect-entry-id is changed and is not the\n // same as it was when it registered to the slot.\n const envDef = this.getEnvDefinitionByLegacyExtension(matchedEntry);\n if (envDef) {\n this.envIds.add(envDef.id);\n return envDef;\n }\n // Do not allow a non existing env\n // this.printWarningIfFirstTime(\n // matchedEntry.id.toString(),\n // `environment with ID: ${matchedEntry.id.toString()} was not found`\n // );\n }\n // Do not allow configure teambit.envs/envs on the component without configure the env aspect itself\n // const errMsg = new EnvNotConfiguredForComponent(envIdFromEnvsConfig).message;\n // this.printWarningIfFirstTime(envIdFromEnvsConfig, errMsg);\n }\n\n // in case there is no config in teambit.envs/envs search the aspects for the first env that registered as env\n const ids: string[] = [];\n extensions.forEach((extension) => {\n if (extension.newExtensionId) {\n ids.push(extension.newExtensionId.toString());\n // ids.push(extension.newExtensionId.toString({ ignoreVersion: true }));\n } else {\n ids.push(extension.stringId);\n }\n });\n const envId = await this.findFirstEnv(ids);\n const envDef = envId ? this.getEnvDefinitionByStringId(envId) : undefined;\n\n return envDef || this.getDefaultEnv();\n }\n\n /**\n * This function finds the first environment ID from a list of IDs by checking if it is register as env (to the slot).\n * or contains env.jsonc file\n * @param {string[]} ids - `ids` is an array of string values representing environment IDs. The function `findFirstEnv`\n * takes this array as input and returns a Promise that resolves to a string value representing the first environment ID\n * that matches certain conditions.\n * @returns The `findFirstEnv` function returns a Promise that resolves to a string or undefined. The string represents\n * the ID of the first environment that matches the conditions specified in the function, or undefined if no environment\n * is found.\n */\n private async findFirstEnv(ids: string[]): Promise<string | undefined> {\n let isFoundWithoutVersion = false;\n const envId = await pLocate(ids, async (id) => {\n const idWithoutVersion = id.split('@')[0];\n if (this.isCoreEnv(idWithoutVersion)) return true;\n if (isCoreAspect(idWithoutVersion)) return false;\n const envDef = this.getEnvDefinitionByStringId(id);\n if (envDef) return true;\n const envDefWithoutVersion = this.getEnvDefinitionByStringId(idWithoutVersion);\n if (envDefWithoutVersion) {\n isFoundWithoutVersion = true;\n return true;\n }\n const envComponent = await this.getEnvComponentByEnvId(id);\n const hasManifest = this.hasEnvManifest(envComponent);\n if (hasManifest) return true;\n const isUsingEnvEnv = this.isUsingEnvEnv(envComponent);\n return !!isUsingEnvEnv;\n });\n let finalEnvId;\n if (envId) {\n finalEnvId = isFoundWithoutVersion ? envId?.split('@')[0] : envId;\n this.envIds.add(envId);\n }\n return finalEnvId;\n }\n\n private getEnvDefinitionByLegacyExtension(extension: ExtensionDataEntry): EnvDefinition | undefined {\n const envDef = extension.newExtensionId\n ? this.getEnvDefinitionById(extension.newExtensionId)\n : this.getEnvDefinitionByStringId(extension.stringId);\n return envDef;\n }\n\n getEnvIdFromEnvsConfig(component: Component): string | undefined {\n const envsAspect = component.state.aspects.get(EnvsAspect.id);\n return envsAspect?.config.env;\n }\n\n getEnvDefinition(id: ComponentID) {\n const allVersions = this.envSlot.toArray();\n const all = allVersions.filter(([envId]) => envId.includes(id.toStringWithoutVersion()));\n const first = head(all);\n if (!first) return undefined;\n const [envId, env] = first;\n return new EnvDefinition(envId, env);\n }\n\n getEnvDefinitionById(id: ComponentID): EnvDefinition | undefined {\n const envDef =\n this.getEnvDefinitionByStringId(id.toString()) ||\n this.getEnvDefinitionByStringId(id.toString({ ignoreVersion: true }));\n return envDef;\n }\n\n async getEnvDefinitionByLegacyId(id: BitId): Promise<EnvDefinition | undefined> {\n const host = this.componentMain.getHost();\n const newId = await host.resolveComponentId(id);\n return this.getEnvDefinitionById(newId);\n }\n\n public getEnvDefinitionByStringId(envId: string): EnvDefinition | undefined {\n const env = this.envSlot.get(envId);\n if (env) {\n return new EnvDefinition(envId, env as Environment);\n }\n return undefined;\n }\n\n getEnvFromComponent(envComponent: Component): EnvDefinition | undefined {\n const env = this.getEnvDefinitionById(envComponent.id);\n return env;\n }\n\n /**\n * Return the env definition of teambit.envs/env\n */\n getEnvsEnvDefinition(): EnvDefinition {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.getEnvDefinitionByStringId('teambit.envs/env')!;\n }\n\n private printWarningIfFirstTime(envId: string, message: string) {\n if (!this.alreadyShownWarning[envId] && !this.failedToLoadEnvs.has(envId)) {\n this.alreadyShownWarning[envId] = true;\n this.logger.consoleWarning(message);\n this.addFailedToLoadEnvs(envId);\n }\n }\n\n /**\n * determines whether an env is registered.\n */\n public isEnvRegistered(id: string) {\n return Boolean(this.envSlot.get(id));\n }\n\n isUsingAspectEnv(component: Component): boolean {\n const data = this.getEnvData(component);\n if (!data) return false;\n return data.type === 'aspect';\n }\n\n isUsingEnvEnv(component: Component): boolean {\n const data = this.getEnvData(component);\n if (!data) return false;\n return data.type === 'env';\n }\n\n /**\n * Check if the given component is an env component.\n * @param component\n * @returns\n */\n isEnv(component: Component): boolean {\n return (\n this.isUsingEnvEnv(component) ||\n this.isEnvRegistered(component.id.toString()) ||\n this.isEnvRegistered(component.id.toStringWithoutVersion())\n );\n }\n\n /**\n * register a new environment service.\n */\n registerService(...envServices: EnvService<any>[]) {\n this.servicesRegistry.register(envServices);\n return this;\n }\n\n /**\n * get list of services enabled on an env.\n */\n getServices(env: EnvDefinition): EnvServiceList {\n const allServices = this.servicesRegistry.toArray();\n const services: [string, EnvService<any>][] = [];\n allServices.forEach(([id, currentServices]) => {\n currentServices.forEach((service) => {\n if (this.implements(env, service)) {\n services.push([id, service]);\n }\n });\n });\n return new EnvServiceList(env, services);\n }\n\n implements(env: EnvDefinition, service: EnvService<any>) {\n // TODO: remove this after refactoring everything and remove getDescriptor from being optional.\n if (!service.getDescriptor) return false;\n return !!service.getDescriptor(env);\n }\n\n /**\n * register an environment.\n */\n registerEnv(env: Environment) {\n return this.envSlot.register(env);\n }\n\n async addNonLoadedEnvAsComponentIssues(components: Component[]) {\n await pMapSeries(components, async (component) => {\n const envId = await this.calculateEnvId(component);\n const envIdStr = envId.toString();\n if (!this.isEnvRegistered(envIdStr)) {\n this.addFailedToLoadEnvs(envIdStr);\n // If there is no version and the env is not in the workspace this is not valid\n // you can't set external env without version\n if (!envIdStr.includes('@')) {\n const foundComp = components.find((c) => c.id.toStringWithoutVersion() === envIdStr);\n if (!foundComp) {\n component.state.issues.getOrCreate(IssuesClasses.ExternalEnvWithoutVersion).data = {\n envId: envIdStr,\n componentId: component.id.toString(),\n };\n } else {\n component.state.issues.getOrCreate(IssuesClasses.NonLoadedEnv).data = envIdStr;\n }\n } else {\n component.state.issues.getOrCreate(IssuesClasses.NonLoadedEnv).data = envIdStr;\n }\n }\n });\n }\n\n // refactor here\n private async createRuntime(components: Component[]): Promise<Runtime> {\n return new Runtime(await this.aggregateByDefs(components), this.logger);\n }\n\n // :TODO can be refactored to few utilities who will make repeating this very easy.\n private async aggregateByDefs(components: Component[]): Promise<EnvRuntime[]> {\n this.throwForDuplicateComponents(components);\n const envsMap = {};\n components.forEach((component: Component) => {\n const envDef = this.getEnv(component);\n const envId = envDef.id;\n const env = envDef.env;\n // handle config as well when aggregating envs.\n if (envsMap[envId]) envsMap[envId].components.push(component);\n else\n envsMap[envId] = {\n components: [component],\n env,\n };\n });\n\n return Promise.all(\n Object.keys(envsMap).map(async (key) => {\n const envAspectDef = await this.getEnvAspectDef(key);\n return new EnvRuntime(key, envsMap[key].env, envsMap[key].components, envAspectDef);\n })\n );\n }\n\n private async getEnvAspectDef(envId: string): Promise<AspectDefinition> {\n const host = this.componentMain.getHost();\n const id = await host.resolveComponentId(envId);\n // We don't want to filter by runtime here as we want to also get envs that configured as plugins. so they don't\n // contain the runtime path.\n const resolvedAspects = await host.resolveAspects(MainRuntime.name, [id], {\n requestedOnly: true,\n filterByRuntime: false,\n useScopeAspectsCapsule: true,\n });\n const def = resolvedAspects[0];\n\n return def;\n }\n\n private throwForDuplicateComponents(components: Component[]) {\n const idsStr = components.map((c) => c.id.toString());\n const duplications = findDuplications(idsStr);\n if (duplications.length) {\n throw new Error(`found duplicated components: ${duplications.join(', ')}`);\n }\n }\n\n static slots = [Slot.withType<Environment>(), Slot.withType<EnvService<any>>()];\n\n static dependencies = [GraphqlAspect, LoggerAspect, ComponentAspect, CLIAspect, WorkerAspect, IssuesAspect];\n\n static async provider(\n [graphql, loggerAspect, component, cli, worker, issues]: [\n GraphqlMain,\n LoggerMain,\n ComponentMain,\n CLIMain,\n WorkerMain,\n IssuesMain\n ],\n config: EnvsConfig,\n [envSlot, servicesRegistry]: [EnvsRegistry, ServicesRegistry],\n context: Harmony\n ) {\n const logger = loggerAspect.createLogger(EnvsAspect.id);\n const envs = new EnvsMain(config, context, envSlot, logger, servicesRegistry, component, loggerAspect, worker);\n component.registerShowFragments([new EnvFragment(envs)]);\n issues.registerAddComponentsIssues(envs.addNonLoadedEnvAsComponentIssues.bind(envs));\n\n const envsCmd = new EnvsCmd(envs, component);\n envsCmd.commands = [new ListEnvsCmd(envs, component), new GetEnvCmd(envs, component)];\n cli.register(envsCmd);\n graphql.register(environmentsSchema(envs));\n return envs;\n }\n}\n\nEnvsAspect.addRuntime(EnvsMain);\n"],"mappings":"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"}
|
package/dist/envs.cmd.d.ts
CHANGED
@@ -43,8 +43,10 @@ export declare class EnvsCmd implements Command {
|
|
43
43
|
options: never[];
|
44
44
|
group: string;
|
45
45
|
commands: Command[];
|
46
|
+
private nonLoadedEnvs;
|
46
47
|
constructor(envs: EnvsMain, componentAspect: ComponentMain);
|
47
|
-
|
48
|
+
report(): Promise<string>;
|
48
49
|
private getTable;
|
50
|
+
getNonLoadedEnvsWarning(): string;
|
49
51
|
}
|
50
52
|
export {};
|
package/dist/envs.cmd.js
CHANGED
@@ -23,6 +23,13 @@ function _react() {
|
|
23
23
|
};
|
24
24
|
return data;
|
25
25
|
}
|
26
|
+
function _pMapSeries() {
|
27
|
+
const data = _interopRequireDefault(require("p-map-series"));
|
28
|
+
_pMapSeries = function () {
|
29
|
+
return data;
|
30
|
+
};
|
31
|
+
return data;
|
32
|
+
}
|
26
33
|
function _ink() {
|
27
34
|
const data = require("ink");
|
28
35
|
_ink = function () {
|
@@ -129,6 +136,8 @@ class GetEnvCmd {
|
|
129
136
|
}
|
130
137
|
exports.GetEnvCmd = GetEnvCmd;
|
131
138
|
class EnvsCmd {
|
139
|
+
// private showNonLoadedEnvsWarning = false;
|
140
|
+
|
132
141
|
constructor(envs, componentAspect) {
|
133
142
|
this.envs = envs;
|
134
143
|
this.componentAspect = componentAspect;
|
@@ -138,21 +147,30 @@ class EnvsCmd {
|
|
138
147
|
(0, _defineProperty2().default)(this, "options", []);
|
139
148
|
(0, _defineProperty2().default)(this, "group", 'development');
|
140
149
|
(0, _defineProperty2().default)(this, "commands", []);
|
150
|
+
(0, _defineProperty2().default)(this, "nonLoadedEnvs", new Set());
|
141
151
|
}
|
142
|
-
async
|
152
|
+
async report() {
|
143
153
|
const host = this.componentAspect.getHost();
|
144
154
|
// TODO: think what to do re this line with gilad.
|
145
155
|
if (!host) throw new Error('error: workspace not found');
|
146
156
|
const components = await host.list();
|
147
|
-
|
148
|
-
|
157
|
+
const table = await this.getTable(components);
|
158
|
+
const warning = this.getNonLoadedEnvsWarning();
|
159
|
+
return warning ? `${table}\n${warning}` : table;
|
149
160
|
}
|
150
|
-
getTable(components) {
|
151
|
-
const tableData =
|
152
|
-
const envId = this.envs.getEnvId(component);
|
161
|
+
async getTable(components) {
|
162
|
+
const tableData = await (0, _pMapSeries().default)(components, async component => {
|
163
|
+
// const envId = this.envs.getEnvId(component);
|
164
|
+
const envId = await this.envs.calculateEnvId(component);
|
165
|
+
const envIdStr = envId.toString();
|
166
|
+
const isLoaded = this.envs.isEnvRegistered(envIdStr);
|
167
|
+
if (!isLoaded) {
|
168
|
+
this.nonLoadedEnvs.add(envIdStr);
|
169
|
+
}
|
170
|
+
const envWithErr = isLoaded ? envIdStr : `${envIdStr} ${_chalk().default.red('(not loaded)')}`;
|
153
171
|
return {
|
154
172
|
component: component.id.toString(),
|
155
|
-
env:
|
173
|
+
env: envWithErr
|
156
174
|
};
|
157
175
|
});
|
158
176
|
const header = [{
|
@@ -164,6 +182,12 @@ class EnvsCmd {
|
|
164
182
|
table.sort();
|
165
183
|
return table.render();
|
166
184
|
}
|
185
|
+
getNonLoadedEnvsWarning() {
|
186
|
+
if (!this.nonLoadedEnvs.size) return '';
|
187
|
+
const list = Array.from(this.nonLoadedEnvs.values()).join(',');
|
188
|
+
return _chalk().default.yellow(`warning: bit wasn't able to load the following envs: ${_chalk().default.cyan(list)}.
|
189
|
+
please run ${_chalk().default.cyan("'bit install'")} to fix. if this doesn't help, run ${_chalk().default.cyan("'bit status'")} to see if there are any additional issues`);
|
190
|
+
}
|
167
191
|
}
|
168
192
|
exports.EnvsCmd = EnvsCmd;
|
169
193
|
|
package/dist/envs.cmd.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["ListEnvsCmd","constructor","envs","componentAspect","report","allEnvs","getAllRegisteredEnvs","join","title","chalk","green","GetEnvCmd","name","description","showEnv","id","host","servicesArr","component","get","resolveComponentId","Error","env","getEnv","envRuntime","createEnvironment","envExecutionContext","getEnvExecutionContext","services","getServices","allP","map","serviceId","service","includes","render","all","compact","Promise","item","getHost","split","undefined","EnvsCmd","components","list","getTable","tableData","envId","getEnvId","toString","header","value","table","CLITable","fromObject","sort"],"sources":["envs.cmd.tsx"],"sourcesContent":["// eslint-disable-next-line max-classes-per-file\nimport React from 'react';\nimport { Text, Newline } from 'ink';\nimport chalk from 'chalk';\nimport { CLITable } from '@teambit/cli-table';\nimport { Command, CommandOptions } from '@teambit/cli';\nimport { compact } from 'lodash';\nimport { ComponentMain, ComponentFactory, Component } from '@teambit/component';\nimport { EnvsMain } from './environments.main.runtime';\nimport { EnvOverview } from './components/env-overview';\n\nexport class ListEnvsCmd implements Command {\n name = 'list';\n description = 'list all envs available in the workspace';\n options = [];\n group = 'development';\n\n constructor(private envs: EnvsMain, private componentAspect: ComponentMain) {}\n\n async report() {\n const allEnvs = this.envs.getAllRegisteredEnvs().join('\\n');\n const title = chalk.green('the following envs are available in the workspace:');\n return `${title}\\n${allEnvs}`;\n }\n}\n\ntype GetEnvOpts = {\n services: string;\n};\n\nexport class GetEnvCmd implements Command {\n name = 'get <component-name>';\n description = \"show information about a component's env\";\n arguments = [\n {\n name: 'component-name',\n description: \"the 'component name' or 'component id' of the component its env you'd like to inspect\",\n },\n ];\n examples: [{ cmd: 'get ui/button'; description: 'show information about the env configured for ui/button' }];\n options = [\n [\n '',\n 'services <string>',\n 'show information about the specific services only. for multiple services, separate by a comma and wrap with quotes',\n ],\n ] as CommandOptions;\n group = 'development';\n\n constructor(private envs: EnvsMain, private componentAspect: ComponentMain) {}\n\n async showEnv(id: string, host: ComponentFactory, servicesArr: string[] | undefined) {\n const component = await host.get(await host.resolveComponentId(id));\n if (!component) throw new Error(`component for env ${id} was not found`);\n const env = this.envs.getEnv(component);\n const envRuntime = await this.envs.createEnvironment([component]);\n const envExecutionContext = envRuntime.getEnvExecutionContext();\n const services = this.envs.getServices(env);\n const allP = services.services.map(async ([serviceId, service]) => {\n if (servicesArr && !servicesArr.includes(serviceId)) return null;\n if (service.render)\n return (\n <Text>\n <Text bold underline color=\"cyan\">\n {serviceId}\n </Text>\n <Newline />\n <Newline />\n {await service.render(env, envExecutionContext)}\n </Text>\n );\n return (\n <Text key={serviceId}>\n <Text bold underline>\n {serviceId}\n </Text>\n </Text>\n );\n });\n\n const all = compact(await Promise.all(allP));\n\n return (\n <Text>\n <EnvOverview envDef={env} />\n {all.map((item) => item)}\n </Text>\n );\n }\n\n async render([name]: [string], { services }: GetEnvOpts): Promise<JSX.Element> {\n const host = this.componentAspect.getHost();\n const servicesArr = services ? services.split(',') : undefined;\n\n // TODO: think what to do re this line with gilad.\n if (!host) throw new Error('error: workspace not found');\n return this.showEnv(name, host, servicesArr);\n }\n}\n\nexport class EnvsCmd implements Command {\n name = 'envs';\n alias = 'env';\n description = 'list all components maintained by the workspace and their corresponding envs';\n options = [];\n group = 'development';\n commands: Command[] = [];\n\n constructor(private envs: EnvsMain, private componentAspect: ComponentMain) {}\n\n async render(): Promise<JSX.Element> {\n const host = this.componentAspect.getHost();\n // TODO: think what to do re this line with gilad.\n if (!host) throw new Error('error: workspace not found');\n const components = await host.list();\n // TODO: refactor to a react table\n return <Text>{this.getTable(components)}</Text>;\n }\n\n private getTable(components: Component[]) {\n const tableData = components.map((component) => {\n const envId = this.envs.getEnvId(component);\n return {\n component: component.id.toString(),\n env: envId,\n };\n });\n\n const header = [\n {\n value: 'component',\n },\n {\n value: 'env',\n },\n ];\n const table = CLITable.fromObject(header, tableData);\n table.sort();\n return table.render();\n }\n}\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["ListEnvsCmd","constructor","envs","componentAspect","report","allEnvs","getAllRegisteredEnvs","join","title","chalk","green","GetEnvCmd","name","description","showEnv","id","host","servicesArr","component","get","resolveComponentId","Error","env","getEnv","envRuntime","createEnvironment","envExecutionContext","getEnvExecutionContext","services","getServices","allP","map","serviceId","service","includes","render","all","compact","Promise","item","getHost","split","undefined","EnvsCmd","Set","components","list","table","getTable","warning","getNonLoadedEnvsWarning","tableData","pMapSeries","envId","calculateEnvId","envIdStr","toString","isLoaded","isEnvRegistered","nonLoadedEnvs","add","envWithErr","red","header","value","CLITable","fromObject","sort","size","Array","from","values","yellow","cyan"],"sources":["envs.cmd.tsx"],"sourcesContent":["// eslint-disable-next-line max-classes-per-file\nimport React from 'react';\nimport pMapSeries from 'p-map-series';\nimport { Text, Newline } from 'ink';\nimport chalk from 'chalk';\nimport { CLITable } from '@teambit/cli-table';\nimport { Command, CommandOptions } from '@teambit/cli';\nimport { compact } from 'lodash';\nimport { ComponentMain, ComponentFactory, Component } from '@teambit/component';\nimport { EnvsMain } from './environments.main.runtime';\nimport { EnvOverview } from './components/env-overview';\n\nexport class ListEnvsCmd implements Command {\n name = 'list';\n description = 'list all envs available in the workspace';\n options = [];\n group = 'development';\n\n constructor(private envs: EnvsMain, private componentAspect: ComponentMain) {}\n\n async report() {\n const allEnvs = this.envs.getAllRegisteredEnvs().join('\\n');\n const title = chalk.green('the following envs are available in the workspace:');\n return `${title}\\n${allEnvs}`;\n }\n}\n\ntype GetEnvOpts = {\n services: string;\n};\n\nexport class GetEnvCmd implements Command {\n name = 'get <component-name>';\n description = \"show information about a component's env\";\n arguments = [\n {\n name: 'component-name',\n description: \"the 'component name' or 'component id' of the component its env you'd like to inspect\",\n },\n ];\n examples: [{ cmd: 'get ui/button'; description: 'show information about the env configured for ui/button' }];\n options = [\n [\n '',\n 'services <string>',\n 'show information about the specific services only. for multiple services, separate by a comma and wrap with quotes',\n ],\n ] as CommandOptions;\n group = 'development';\n\n constructor(private envs: EnvsMain, private componentAspect: ComponentMain) {}\n\n async showEnv(id: string, host: ComponentFactory, servicesArr: string[] | undefined) {\n const component = await host.get(await host.resolveComponentId(id));\n if (!component) throw new Error(`component for env ${id} was not found`);\n const env = this.envs.getEnv(component);\n const envRuntime = await this.envs.createEnvironment([component]);\n const envExecutionContext = envRuntime.getEnvExecutionContext();\n const services = this.envs.getServices(env);\n const allP = services.services.map(async ([serviceId, service]) => {\n if (servicesArr && !servicesArr.includes(serviceId)) return null;\n if (service.render)\n return (\n <Text>\n <Text bold underline color=\"cyan\">\n {serviceId}\n </Text>\n <Newline />\n <Newline />\n {await service.render(env, envExecutionContext)}\n </Text>\n );\n return (\n <Text key={serviceId}>\n <Text bold underline>\n {serviceId}\n </Text>\n </Text>\n );\n });\n\n const all = compact(await Promise.all(allP));\n\n return (\n <Text>\n <EnvOverview envDef={env} />\n {all.map((item) => item)}\n </Text>\n );\n }\n\n async render([name]: [string], { services }: GetEnvOpts): Promise<JSX.Element> {\n const host = this.componentAspect.getHost();\n const servicesArr = services ? services.split(',') : undefined;\n\n // TODO: think what to do re this line with gilad.\n if (!host) throw new Error('error: workspace not found');\n return this.showEnv(name, host, servicesArr);\n }\n}\n\nexport class EnvsCmd implements Command {\n name = 'envs';\n alias = 'env';\n description = 'list all components maintained by the workspace and their corresponding envs';\n options = [];\n group = 'development';\n commands: Command[] = [];\n\n // private showNonLoadedEnvsWarning = false;\n private nonLoadedEnvs = new Set<string>();\n\n constructor(private envs: EnvsMain, private componentAspect: ComponentMain) {}\n\n async report(): Promise<string> {\n const host = this.componentAspect.getHost();\n // TODO: think what to do re this line with gilad.\n if (!host) throw new Error('error: workspace not found');\n const components = await host.list();\n const table = await this.getTable(components);\n const warning = this.getNonLoadedEnvsWarning();\n return warning ? `${table}\\n${warning}` : table;\n }\n\n private async getTable(components: Component[]) {\n const tableData = await pMapSeries(components, async (component) => {\n // const envId = this.envs.getEnvId(component);\n const envId = await this.envs.calculateEnvId(component);\n const envIdStr = envId.toString();\n const isLoaded = this.envs.isEnvRegistered(envIdStr);\n if (!isLoaded) {\n this.nonLoadedEnvs.add(envIdStr);\n }\n const envWithErr = isLoaded ? envIdStr : `${envIdStr} ${chalk.red('(not loaded)')}`;\n return {\n component: component.id.toString(),\n env: envWithErr,\n };\n });\n\n const header = [\n {\n value: 'component',\n },\n {\n value: 'env',\n },\n ];\n const table = CLITable.fromObject(header, tableData);\n table.sort();\n return table.render();\n }\n\n getNonLoadedEnvsWarning() {\n if (!this.nonLoadedEnvs.size) return '';\n const list = Array.from(this.nonLoadedEnvs.values()).join(',');\n return chalk.yellow(`warning: bit wasn't able to load the following envs: ${chalk.cyan(list)}.\nplease run ${chalk.cyan(\"'bit install'\")} to fix. if this doesn't help, run ${chalk.cyan(\n \"'bit status'\"\n )} to see if there are any additional issues`);\n }\n}\n"],"mappings":"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"}
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.envs_envs@0.0.
|
2
|
-
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.envs_envs@0.0.
|
1
|
+
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.envs_envs@0.0.1068/dist/env.composition.js';
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.envs_envs@0.0.1068/dist/envs.docs.mdx';
|
3
3
|
|
4
4
|
export const compositions = [compositions_0];
|
5
5
|
export const overview = [overview_0];
|
package/envs.cmd.tsx
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
// eslint-disable-next-line max-classes-per-file
|
2
2
|
import React from 'react';
|
3
|
+
import pMapSeries from 'p-map-series';
|
3
4
|
import { Text, Newline } from 'ink';
|
4
5
|
import chalk from 'chalk';
|
5
6
|
import { CLITable } from '@teambit/cli-table';
|
@@ -106,23 +107,34 @@ export class EnvsCmd implements Command {
|
|
106
107
|
group = 'development';
|
107
108
|
commands: Command[] = [];
|
108
109
|
|
110
|
+
// private showNonLoadedEnvsWarning = false;
|
111
|
+
private nonLoadedEnvs = new Set<string>();
|
112
|
+
|
109
113
|
constructor(private envs: EnvsMain, private componentAspect: ComponentMain) {}
|
110
114
|
|
111
|
-
async
|
115
|
+
async report(): Promise<string> {
|
112
116
|
const host = this.componentAspect.getHost();
|
113
117
|
// TODO: think what to do re this line with gilad.
|
114
118
|
if (!host) throw new Error('error: workspace not found');
|
115
119
|
const components = await host.list();
|
116
|
-
|
117
|
-
|
120
|
+
const table = await this.getTable(components);
|
121
|
+
const warning = this.getNonLoadedEnvsWarning();
|
122
|
+
return warning ? `${table}\n${warning}` : table;
|
118
123
|
}
|
119
124
|
|
120
|
-
private getTable(components: Component[]) {
|
121
|
-
const tableData = components
|
122
|
-
const envId = this.envs.getEnvId(component);
|
125
|
+
private async getTable(components: Component[]) {
|
126
|
+
const tableData = await pMapSeries(components, async (component) => {
|
127
|
+
// const envId = this.envs.getEnvId(component);
|
128
|
+
const envId = await this.envs.calculateEnvId(component);
|
129
|
+
const envIdStr = envId.toString();
|
130
|
+
const isLoaded = this.envs.isEnvRegistered(envIdStr);
|
131
|
+
if (!isLoaded) {
|
132
|
+
this.nonLoadedEnvs.add(envIdStr);
|
133
|
+
}
|
134
|
+
const envWithErr = isLoaded ? envIdStr : `${envIdStr} ${chalk.red('(not loaded)')}`;
|
123
135
|
return {
|
124
136
|
component: component.id.toString(),
|
125
|
-
env:
|
137
|
+
env: envWithErr,
|
126
138
|
};
|
127
139
|
});
|
128
140
|
|
@@ -138,4 +150,13 @@ export class EnvsCmd implements Command {
|
|
138
150
|
table.sort();
|
139
151
|
return table.render();
|
140
152
|
}
|
153
|
+
|
154
|
+
getNonLoadedEnvsWarning() {
|
155
|
+
if (!this.nonLoadedEnvs.size) return '';
|
156
|
+
const list = Array.from(this.nonLoadedEnvs.values()).join(',');
|
157
|
+
return chalk.yellow(`warning: bit wasn't able to load the following envs: ${chalk.cyan(list)}.
|
158
|
+
please run ${chalk.cyan("'bit install'")} to fix. if this doesn't help, run ${chalk.cyan(
|
159
|
+
"'bit status'"
|
160
|
+
)} to see if there are any additional issues`);
|
161
|
+
}
|
141
162
|
}
|
Binary file
|
package/package.json
CHANGED
@@ -1,43 +1,48 @@
|
|
1
1
|
{
|
2
2
|
"name": "@teambit/envs",
|
3
|
-
"version": "0.0.
|
3
|
+
"version": "0.0.1068",
|
4
4
|
"homepage": "https://bit.cloud/teambit/envs/envs",
|
5
5
|
"main": "dist/index.js",
|
6
6
|
"componentId": {
|
7
7
|
"scope": "teambit.envs",
|
8
8
|
"name": "envs",
|
9
|
-
"version": "0.0.
|
9
|
+
"version": "0.0.1068"
|
10
10
|
},
|
11
11
|
"dependencies": {
|
12
|
+
"chalk": "2.4.2",
|
12
13
|
"lodash": "4.17.21",
|
13
14
|
"graphql-tag": "2.12.1",
|
14
|
-
"
|
15
|
-
"
|
15
|
+
"comment-json": "3.0.3",
|
16
|
+
"p-locate": "^5.0.0",
|
16
17
|
"p-map-series": "2.1.0",
|
18
|
+
"ink": "3.2.0",
|
17
19
|
"core-js": "^3.0.0",
|
18
20
|
"@babel/runtime": "7.20.0",
|
19
21
|
"@teambit/harmony": "0.4.6",
|
20
22
|
"@teambit/legacy-bit-id": "0.0.423",
|
21
|
-
"@teambit/component": "0.0.
|
22
|
-
"@teambit/aspect-loader": "0.0.
|
23
|
-
"@teambit/cli": "0.0.
|
24
|
-
"@teambit/logger": "0.0.
|
25
|
-
"@teambit/worker": "0.0.
|
26
|
-
"@teambit/builder": "0.0.
|
27
|
-
"@teambit/bundler": "0.0.
|
28
|
-
"@teambit/compiler": "0.0.
|
29
|
-
"@teambit/dependency-resolver": "0.0.
|
30
|
-
"@teambit/elements": "0.0.
|
31
|
-
"@teambit/formatter": "0.0.
|
32
|
-
"@teambit/isolator": "0.0.
|
33
|
-
"@teambit/linter": "0.0.
|
34
|
-
"@teambit/pkg": "0.0.
|
35
|
-
"@teambit/preview": "0.0.
|
36
|
-
"@teambit/schema": "0.0.
|
37
|
-
"@teambit/tester": "0.0.
|
38
|
-
"@teambit/webpack": "0.0.
|
39
|
-
"@teambit/graphql": "0.0.
|
23
|
+
"@teambit/component": "0.0.1068",
|
24
|
+
"@teambit/aspect-loader": "0.0.1068",
|
25
|
+
"@teambit/cli": "0.0.721",
|
26
|
+
"@teambit/logger": "0.0.814",
|
27
|
+
"@teambit/worker": "0.0.1025",
|
28
|
+
"@teambit/builder": "0.0.1068",
|
29
|
+
"@teambit/bundler": "0.0.1068",
|
30
|
+
"@teambit/compiler": "0.0.1068",
|
31
|
+
"@teambit/dependency-resolver": "0.0.1068",
|
32
|
+
"@teambit/elements": "0.0.521",
|
33
|
+
"@teambit/formatter": "0.0.619",
|
34
|
+
"@teambit/isolator": "0.0.1068",
|
35
|
+
"@teambit/linter": "0.0.1068",
|
36
|
+
"@teambit/pkg": "0.0.1068",
|
37
|
+
"@teambit/preview": "0.0.1068",
|
38
|
+
"@teambit/schema": "0.0.1068",
|
39
|
+
"@teambit/tester": "0.0.1068",
|
40
|
+
"@teambit/webpack": "0.0.1068",
|
41
|
+
"@teambit/graphql": "0.0.1068",
|
40
42
|
"@teambit/bit-error": "0.0.402",
|
43
|
+
"@teambit/bit": "0.1.55",
|
44
|
+
"@teambit/component-issues": "0.0.92",
|
45
|
+
"@teambit/issues": "0.0.376",
|
41
46
|
"@teambit/cli-table": "0.0.41"
|
42
47
|
},
|
43
48
|
"devDependencies": {
|
@@ -51,7 +56,7 @@
|
|
51
56
|
"@teambit/envs.aspect-docs.envs": "0.0.153"
|
52
57
|
},
|
53
58
|
"peerDependencies": {
|
54
|
-
"@teambit/legacy": "1.0.
|
59
|
+
"@teambit/legacy": "1.0.501",
|
55
60
|
"react": "^16.8.0 || ^17.0.0",
|
56
61
|
"react-dom": "^16.8.0 || ^17.0.0"
|
57
62
|
},
|
Binary file
|