@teambit/envs 0.0.919 → 0.0.920

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.
@@ -0,0 +1,4 @@
1
+ import { EnvHandler } from ".";
2
+ export interface Env {
3
+ [key: string]: EnvHandler<unknown> | any;
4
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ //# sourceMappingURL=env-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["env-interface.ts"],"sourcesContent":["import { EnvHandler } from \".\"\n\nexport interface Env {\n [key: string]: EnvHandler<unknown> | any;\n}\n"],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { PluginDefinition } from '@teambit/aspect-loader';
2
+ import { Aspect, Harmony } from '@teambit/harmony';
3
+ import { WorkerMain } from '@teambit/worker';
4
+ import { LoggerMain } from '@teambit/logger';
5
+ import { EnvsRegistry } from './environments.main.runtime';
6
+ export declare class EnvPlugin implements PluginDefinition {
7
+ private envSlot;
8
+ private loggerMain;
9
+ private workerMain;
10
+ private harmony;
11
+ constructor(envSlot: EnvsRegistry, loggerMain: LoggerMain, workerMain: WorkerMain, harmony: Harmony);
12
+ pattern: string;
13
+ runtimes: string[];
14
+ private createContext;
15
+ private transformToLegacyEnv;
16
+ register(object: any, aspect: Aspect): void;
17
+ }
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ require("core-js/modules/es.promise.js");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.EnvPlugin = void 0;
9
+ function _defineProperty2() {
10
+ const data = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ _defineProperty2 = function () {
12
+ return data;
13
+ };
14
+ return data;
15
+ }
16
+ function _component() {
17
+ const data = require("@teambit/component");
18
+ _component = function () {
19
+ return data;
20
+ };
21
+ return data;
22
+ }
23
+ function _cli() {
24
+ const data = require("@teambit/cli");
25
+ _cli = function () {
26
+ return data;
27
+ };
28
+ return data;
29
+ }
30
+ function _serviceHandlerContext() {
31
+ const data = require("./services/service-handler-context");
32
+ _serviceHandlerContext = function () {
33
+ return data;
34
+ };
35
+ return data;
36
+ }
37
+ class EnvPlugin {
38
+ constructor(envSlot, loggerMain, workerMain, harmony) {
39
+ this.envSlot = envSlot;
40
+ this.loggerMain = loggerMain;
41
+ this.workerMain = workerMain;
42
+ this.harmony = harmony;
43
+ (0, _defineProperty2().default)(this, "pattern", '*.bit-env.*');
44
+ (0, _defineProperty2().default)(this, "runtimes", [_cli().MainRuntime.name]);
45
+ }
46
+ createContext(envId) {
47
+ return new (_serviceHandlerContext().ServiceHandlerContext)(envId, this.loggerMain, this.workerMain, this.harmony);
48
+ }
49
+ transformToLegacyEnv(envId, env) {
50
+ // HACK BECAUSE OF OLD APIS WE SHOULD MIGRATE EACH TO BE HANDLED BY ITS SERVICE
51
+ // IF YOU ARE THINKING ABOUT IT YOU SHOULD HEAD TO THE SERVICE SLOT INSTEAD.
52
+ // E.G. COMPILER SHOULD BE TRANSFORMED IN COMPILER NOT HERE!
53
+ // const
54
+ const envComponentId = _component().ComponentID.fromString(envId);
55
+ const envContext = this.createContext(envComponentId);
56
+ if (!env.preview && !env.compiler) return undefined;
57
+ const preview = env.preview()(envContext);
58
+ const packageGenerator = env.package()(envContext);
59
+ return {
60
+ getCompiler: () => env.compiler()(envContext),
61
+ getTester: () => env.tester()(envContext),
62
+ getLinter: () => env.linter()(envContext),
63
+ getFormatter: () => env.formatter()(envContext),
64
+ getPackageJsonProps: () => packageGenerator.packageJsonProps,
65
+ getNpmIgnore: () => packageGenerator.npmIgnore,
66
+ name: env.name,
67
+ icon: env.icon,
68
+ getDevEnvId: () => {
69
+ return preview.getDevEnvId();
70
+ },
71
+ getSchemaExtractor: env.schemaExtractor()(envContext),
72
+ getDevServer: context => {
73
+ return preview.getDevServer(context)(envContext);
74
+ },
75
+ getAdditionalHostDependencies: preview.getHostDependencies.bind(preview),
76
+ getMounter: preview.getMounter.bind(preview),
77
+ getGeneratorTemplates: () => {
78
+ if (!env.generators) return undefined;
79
+ const generatorList = env.generators()(envContext);
80
+ return generatorList.compute();
81
+ },
82
+ getGeneratorStarters: () => {
83
+ if (!env.starters) return undefined;
84
+ const starterList = env.starters()(envContext);
85
+ return starterList.compute();
86
+ },
87
+ getBuildPipe: () => {
88
+ // TODO: refactor after defining for an env property
89
+ const pipeline = env.build()(envContext);
90
+ if (!pipeline || !pipeline.compute) return [];
91
+ return pipeline === null || pipeline === void 0 ? void 0 : pipeline.compute();
92
+ },
93
+ getTagPipe: () => {
94
+ // TODO: refactor after defining for an env property
95
+ const pipeline = env.snap()(envContext);
96
+ if (!pipeline || !pipeline.compute) return [];
97
+ return pipeline === null || pipeline === void 0 ? void 0 : pipeline.compute();
98
+ },
99
+ getSnapPipe: () => {
100
+ const pipeline = env.tag()(envContext);
101
+ if (!pipeline || !pipeline.compute) return [];
102
+ return pipeline === null || pipeline === void 0 ? void 0 : pipeline.compute();
103
+ },
104
+ getDocsTemplate: preview.getDocsTemplate.bind(preview),
105
+ getPreviewConfig: preview.getPreviewConfig.bind(preview),
106
+ getBundler: context => preview.getBundler(context)(envContext),
107
+ __getDescriptor: async () => {
108
+ return {
109
+ type: env.name
110
+ };
111
+ },
112
+ id: envId
113
+ };
114
+ }
115
+ register(object, aspect) {
116
+ const env = this.transformToLegacyEnv(aspect.id, object);
117
+ if (!env) return undefined;
118
+ return this.envSlot.register(env);
119
+ }
120
+ }
121
+ exports.EnvPlugin = EnvPlugin;
122
+
123
+ //# sourceMappingURL=env.plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EnvPlugin","constructor","envSlot","loggerMain","workerMain","harmony","MainRuntime","name","createContext","envId","EnvContext","transformToLegacyEnv","env","envComponentId","ComponentID","fromString","envContext","preview","compiler","undefined","packageGenerator","package","getCompiler","getTester","tester","getLinter","linter","getFormatter","formatter","getPackageJsonProps","packageJsonProps","getNpmIgnore","npmIgnore","icon","getDevEnvId","getSchemaExtractor","schemaExtractor","getDevServer","context","getAdditionalHostDependencies","getHostDependencies","bind","getMounter","getGeneratorTemplates","generators","generatorList","compute","getGeneratorStarters","starters","starterList","getBuildPipe","pipeline","build","getTagPipe","snap","getSnapPipe","tag","getDocsTemplate","getPreviewConfig","getBundler","__getDescriptor","type","id","register","object","aspect"],"sources":["env.plugin.ts"],"sourcesContent":["import { PluginDefinition } from '@teambit/aspect-loader';\nimport { Aspect, Harmony } from '@teambit/harmony';\nimport { ComponentID } from '@teambit/component';\nimport { WorkerMain } from '@teambit/worker';\nimport { MainRuntime } from '@teambit/cli';\nimport { LoggerMain } from '@teambit/logger';\nimport { ServiceHandlerContext as EnvContext } from './services/service-handler-context';\nimport { Env } from './env-interface';\nimport { EnvsRegistry } from './environments.main.runtime';\n\nexport class EnvPlugin implements PluginDefinition {\n constructor(\n private envSlot: EnvsRegistry,\n private loggerMain: LoggerMain,\n private workerMain: WorkerMain,\n private harmony: Harmony\n ) {}\n\n pattern = '*.bit-env.*';\n\n runtimes = [MainRuntime.name];\n\n private createContext(envId: ComponentID) {\n return new EnvContext(envId, this.loggerMain, this.workerMain, this.harmony);\n }\n\n private transformToLegacyEnv(envId: string, env: Env) {\n // HACK BECAUSE OF OLD APIS WE SHOULD MIGRATE EACH TO BE HANDLED BY ITS SERVICE\n // IF YOU ARE THINKING ABOUT IT YOU SHOULD HEAD TO THE SERVICE SLOT INSTEAD.\n // E.G. COMPILER SHOULD BE TRANSFORMED IN COMPILER NOT HERE!\n // const\n const envComponentId = ComponentID.fromString(envId);\n const envContext = this.createContext(envComponentId);\n if (!env.preview && !env.compiler) return undefined;\n const preview = env.preview()(envContext);\n const packageGenerator = env.package()(envContext);\n\n return {\n getCompiler: () => env.compiler()(envContext),\n getTester: () => env.tester()(envContext),\n getLinter: () => env.linter()(envContext),\n getFormatter: () => env.formatter()(envContext),\n getPackageJsonProps: () => packageGenerator.packageJsonProps,\n getNpmIgnore: () => packageGenerator.npmIgnore,\n name: env.name,\n icon: env.icon,\n getDevEnvId: () => {\n return preview.getDevEnvId();\n },\n getSchemaExtractor: env.schemaExtractor()(envContext),\n getDevServer: (context) => {\n return preview.getDevServer(context)(envContext);\n },\n getAdditionalHostDependencies: preview.getHostDependencies.bind(preview),\n getMounter: preview.getMounter.bind(preview),\n getGeneratorTemplates: () => {\n if (!env.generators) return undefined;\n const generatorList = env.generators()(envContext);\n return generatorList.compute();\n },\n getGeneratorStarters: () => {\n if (!env.starters) return undefined;\n const starterList = env.starters()(envContext);\n return starterList.compute();\n },\n getBuildPipe: () => {\n // TODO: refactor after defining for an env property\n const pipeline = env.build()(envContext);\n if (!pipeline || !pipeline.compute) return [];\n return pipeline?.compute();\n },\n getTagPipe: () => {\n // TODO: refactor after defining for an env property\n const pipeline = env.snap()(envContext);\n if (!pipeline || !pipeline.compute) return [];\n return pipeline?.compute();\n },\n getSnapPipe: () => {\n const pipeline = env.tag()(envContext);\n if (!pipeline || !pipeline.compute) return [];\n return pipeline?.compute();\n },\n getDocsTemplate: preview.getDocsTemplate.bind(preview),\n getPreviewConfig: preview.getPreviewConfig.bind(preview),\n getBundler: (context) => preview.getBundler(context)(envContext),\n __getDescriptor: async () => {\n return {\n type: env.name,\n }\n },\n id: envId,\n }\n }\n\n register(object: any, aspect: Aspect) {\n const env = this.transformToLegacyEnv(aspect.id, object);\n if (!env) return undefined;\n return this.envSlot.register(env);\n }\n}\n"],"mappings":"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"}
@@ -4,12 +4,14 @@ import { GraphqlMain } from '@teambit/graphql';
4
4
  import { Harmony, SlotRegistry } from '@teambit/harmony';
5
5
  import { Logger, LoggerMain } from '@teambit/logger';
6
6
  import { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';
7
+ import { WorkerMain } from '@teambit/worker';
7
8
  import { BitId } from '@teambit/legacy-bit-id';
8
9
  import { EnvService } from './services';
9
10
  import { Environment } from './environment';
10
11
  import { Runtime } from './runtime';
11
12
  import { EnvDefinition } from './env-definition';
12
13
  import { EnvServiceList } from './env-service-list';
14
+ import { EnvPlugin } from './env.plugin';
13
15
  export declare type EnvsRegistry = SlotRegistry<Environment>;
14
16
  export declare type EnvsConfig = {
15
17
  env: string;
@@ -32,7 +34,7 @@ export declare class EnvsMain {
32
34
  /**
33
35
  * harmony context.
34
36
  */
35
- private context;
37
+ private harmony;
36
38
  /**
37
39
  * slot for allowing extensions to register new environment.
38
40
  */
@@ -40,6 +42,8 @@ export declare class EnvsMain {
40
42
  private logger;
41
43
  private serviceSlot;
42
44
  private componentMain;
45
+ private loggerMain;
46
+ private workerMain;
43
47
  static runtime: import("@teambit/harmony").RuntimeDefinition;
44
48
  private alreadyShownWarning;
45
49
  /**
@@ -54,11 +58,11 @@ export declare class EnvsMain {
54
58
  /**
55
59
  * harmony context.
56
60
  */
57
- context: Harmony,
61
+ harmony: Harmony,
58
62
  /**
59
63
  * slot for allowing extensions to register new environment.
60
64
  */
61
- envSlot: EnvsRegistry, logger: Logger, serviceSlot: ServiceSlot, componentMain: ComponentMain);
65
+ envSlot: EnvsRegistry, logger: Logger, serviceSlot: ServiceSlot, componentMain: ComponentMain, loggerMain: LoggerMain, workerMain: WorkerMain);
62
66
  /**
63
67
  * creates a new runtime environments for a set of components.
64
68
  */
@@ -138,6 +142,7 @@ export declare class EnvsMain {
138
142
  */
139
143
  hasEnvConfigured(component: Component): boolean;
140
144
  getAllRegisteredEnvs(): string[];
145
+ getEnvPlugin(): EnvPlugin;
141
146
  /**
142
147
  * an env can be configured on a component in two ways:
143
148
  * 1) explicitly inside "teambit.envs/envs". `{ "teambit.envs/envs": { "env": "my-env" } }`
@@ -159,6 +164,7 @@ export declare class EnvsMain {
159
164
  */
160
165
  calculateEnvFromExtensions(extensions: ExtensionDataList): EnvDefinition;
161
166
  private getEnvIdFromEnvsConfig;
167
+ getEnvDefinition(id: ComponentID): EnvDefinition | undefined;
162
168
  getEnvDefinitionById(id: ComponentID): EnvDefinition | undefined;
163
169
  getEnvDefinitionByLegacyId(id: BitId): Promise<EnvDefinition | undefined>;
164
170
  private getEnvDefinitionByStringId;
@@ -199,5 +205,5 @@ export declare class EnvsMain {
199
205
  private throwForDuplicateComponents;
200
206
  static slots: (((registerFn: () => string) => SlotRegistry<Environment>) | ((registerFn: () => string) => SlotRegistry<EnvService<any, {}, {}>>))[];
201
207
  static dependencies: import("@teambit/harmony").Aspect[];
202
- static provider([graphql, loggerAspect, component, cli]: [GraphqlMain, LoggerMain, ComponentMain, CLIMain], config: EnvsConfig, [envSlot, serviceSlot]: [EnvsRegistry, ServiceSlot], context: Harmony): Promise<EnvsMain>;
208
+ static provider([graphql, loggerAspect, component, cli, worker]: [GraphqlMain, LoggerMain, ComponentMain, CLIMain, WorkerMain], config: EnvsConfig, [envSlot, serviceSlot]: [EnvsRegistry, ServiceSlot], context: Harmony): Promise<EnvsMain>;
203
209
  }
@@ -63,6 +63,20 @@ function _findDuplications() {
63
63
  };
64
64
  return data;
65
65
  }
66
+ function _lodash() {
67
+ const data = require("lodash");
68
+ _lodash = function () {
69
+ return data;
70
+ };
71
+ return data;
72
+ }
73
+ function _worker() {
74
+ const data = _interopRequireDefault(require("@teambit/worker"));
75
+ _worker = function () {
76
+ return data;
77
+ };
78
+ return data;
79
+ }
66
80
  function _environments() {
67
81
  const data = require("./environments.aspect");
68
82
  _environments = function () {
@@ -119,6 +133,13 @@ function _exceptions() {
119
133
  };
120
134
  return data;
121
135
  }
136
+ function _env2() {
137
+ const data = require("./env.plugin");
138
+ _env2 = function () {
139
+ return data;
140
+ };
141
+ return data;
142
+ }
122
143
  const DEFAULT_ENV = 'teambit.harmony/node';
123
144
  exports.DEFAULT_ENV = DEFAULT_ENV;
124
145
  class EnvsMain {
@@ -138,17 +159,19 @@ class EnvsMain {
138
159
  /**
139
160
  * harmony context.
140
161
  */
141
- context,
162
+ harmony,
142
163
  /**
143
164
  * slot for allowing extensions to register new environment.
144
165
  */
145
- envSlot, logger, serviceSlot, componentMain) {
166
+ envSlot, logger, serviceSlot, componentMain, loggerMain, workerMain) {
146
167
  this.config = config;
147
- this.context = context;
168
+ this.harmony = harmony;
148
169
  this.envSlot = envSlot;
149
170
  this.logger = logger;
150
171
  this.serviceSlot = serviceSlot;
151
172
  this.componentMain = componentMain;
173
+ this.loggerMain = loggerMain;
174
+ this.workerMain = workerMain;
152
175
  (0, _defineProperty2().default)(this, "alreadyShownWarning", {});
153
176
  }
154
177
 
@@ -256,7 +279,7 @@ class EnvsMain {
256
279
  const withVersionMatchId = withVersionMatch === null || withVersionMatch === void 0 ? void 0 : withVersionMatch[0];
257
280
  if (withVersionMatchId) return withVersionMatchId;
258
281
 
259
- // Handle core envs
282
+ // Handle core envs
260
283
  const exactMatch = this.envSlot.toArray().find(([envId]) => {
261
284
  return envIdFromEnvData === envId;
262
285
  });
@@ -423,6 +446,9 @@ class EnvsMain {
423
446
  getAllRegisteredEnvs() {
424
447
  return this.envSlot.toArray().map(envData => envData[0]);
425
448
  }
449
+ getEnvPlugin() {
450
+ return new (_env2().EnvPlugin)(this.envSlot, this.loggerMain, this.workerMain, this.harmony);
451
+ }
426
452
 
427
453
  /**
428
454
  * an env can be configured on a component in two ways:
@@ -521,6 +547,14 @@ class EnvsMain {
521
547
  const envsAspect = component.state.aspects.get(_environments().EnvsAspect.id);
522
548
  return envsAspect === null || envsAspect === void 0 ? void 0 : envsAspect.config.env;
523
549
  }
550
+ getEnvDefinition(id) {
551
+ const allVersions = this.envSlot.toArray();
552
+ const all = allVersions.filter(([envId]) => envId.includes(id.toStringWithoutVersion()));
553
+ const first = (0, _lodash().head)(all);
554
+ if (!first) return undefined;
555
+ const [envId, env] = first;
556
+ return new (_envDefinition().EnvDefinition)(envId, env);
557
+ }
524
558
  getEnvDefinitionById(id) {
525
559
  const envDef = this.getEnvDefinitionByStringId(id.toString()) || this.getEnvDefinitionByStringId(id.toString({
526
560
  ignoreVersion: true
@@ -659,9 +693,9 @@ class EnvsMain {
659
693
  throw new Error(`found duplicated components: ${duplications.join(', ')}`);
660
694
  }
661
695
  }
662
- static async provider([graphql, loggerAspect, component, cli], config, [envSlot, serviceSlot], context) {
696
+ static async provider([graphql, loggerAspect, component, cli, worker], config, [envSlot, serviceSlot], context) {
663
697
  const logger = loggerAspect.createLogger(_environments().EnvsAspect.id);
664
- const envs = new EnvsMain(config, context, envSlot, logger, serviceSlot, component);
698
+ const envs = new EnvsMain(config, context, envSlot, logger, serviceSlot, component, loggerAspect, worker);
665
699
  component.registerShowFragments([new (_env().EnvFragment)(envs)]);
666
700
  const envsCmd = new (_envs().EnvsCmd)(envs, component);
667
701
  envsCmd.commands = [new (_envs().ListEnvsCmd)(envs, component), new (_envs().GetEnvCmd)(envs, component)];
@@ -673,7 +707,7 @@ class EnvsMain {
673
707
  exports.EnvsMain = EnvsMain;
674
708
  (0, _defineProperty2().default)(EnvsMain, "runtime", _cli().MainRuntime);
675
709
  (0, _defineProperty2().default)(EnvsMain, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType()]);
676
- (0, _defineProperty2().default)(EnvsMain, "dependencies", [_graphql().GraphqlAspect, _logger().LoggerAspect, _component().ComponentAspect, _cli().CLIAspect]);
710
+ (0, _defineProperty2().default)(EnvsMain, "dependencies", [_graphql().GraphqlAspect, _logger().LoggerAspect, _component().ComponentAspect, _cli().CLIAspect, _worker().default]);
677
711
  _environments().EnvsAspect.addRuntime(EnvsMain);
678
712
 
679
713
  //# sourceMappingURL=environments.main.runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_ENV","EnvsMain","icon","constructor","config","context","envSlot","logger","serviceSlot","componentMain","createEnvironment","components","createRuntime","getDefaultEnv","defaultEnv","get","Error","EnvDefinition","getCoreEnvsIds","compose","targetEnv","envTransformers","a","reduce","acc","transformer","override","propsToOverride","env","merge","sourceEnv","allNames","Set","keys","o","Object","prototype","getPrototypeOf","name","getOwnPropertyNames","add","forEach","key","fn","includes","bind","getEnvData","component","envsData","state","aspects","EnvsAspect","id","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","services","matchedEntry","entries","aspectEntry","envIdFromEnvsConfig","getEnvIdFromEnvsConfig","envIdFromEnvsConfigWithoutVersion","getEnvDefinitionById","printWarningIfFirstTime","errMsg","message","envDefFromList","getAllEnvsConfiguredOnComponent","getEnvFromEnvsConfig","getEnvsNotFromEnvsConfig","hasEnvConfigured","Boolean","length","getAllRegisteredEnvs","map","envData","push","calculateEnvFromExtensions","extensions","envsAspect","findCoreExtension","getEnvDefinitionByLegacyExtension","extension","newExtensionId","stringId","getEnvDefinitionByLegacyId","getEnvFromComponent","getEnvsEnvDefinition","alreadyShownWarning","consoleWarning","isEnvRegistered","isUsingAspectEnv","type","isUsingEnvEnv","isEnv","registerService","envServices","register","getServices","allServices","currentServices","service","implements","EnvServiceList","registerEnv","Runtime","aggregateByDefs","throwForDuplicateComponents","envsMap","Promise","all","envAspectDef","getEnvAspectDef","EnvRuntime","def","resolveAspects","MainRuntime","requestedOnly","idsStr","c","duplications","findDuplications","join","provider","graphql","loggerAspect","cli","createLogger","envs","registerShowFragments","EnvFragment","envsCmd","EnvsCmd","commands","ListEnvsCmd","GetEnvCmd","environmentsSchema","Slot","withType","GraphqlAspect","LoggerAspect","ComponentAspect","CLIAspect","addRuntime"],"sources":["environments.main.runtime.ts"],"sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { Component, ComponentAspect, ComponentMain, ComponentID, AspectData } 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 { 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';\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 ServiceSlot = SlotRegistry<Array<EnvService<any>>>;\n\nexport type Descriptor = {\n id: string;\n icon: string;\n services?: [];\n};\n\nexport const DEFAULT_ENV = 'teambit.harmony/node';\n\nexport class EnvsMain {\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 context: 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 serviceSlot: ServiceSlot,\n\n private componentMain: ComponentMain\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 * 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): AspectData {\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;\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 | null {\n const envsData = this.getEnvData(component);\n return {\n id: this.getEnvId(component),\n icon: envsData.icon,\n services: envsData.services,\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 /**\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 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 private 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]) {\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.serviceSlot.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.serviceSlot.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 const def = (await host.resolveAspects(MainRuntime.name, [id], { requestedOnly: true }))[0];\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];\n\n static async provider(\n [graphql, loggerAspect, component, cli]: [GraphqlMain, LoggerMain, ComponentMain, CLIMain],\n config: EnvsConfig,\n [envSlot, serviceSlot]: [EnvsRegistry, ServiceSlot],\n context: Harmony\n ) {\n const logger = loggerAspect.createLogger(EnvsAspect.id);\n const envs = new EnvsMain(config, context, envSlot, logger, serviceSlot, component);\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","serviceSlot","componentMain","loggerMain","workerMain","createEnvironment","components","createRuntime","getDefaultEnv","defaultEnv","get","Error","EnvDefinition","getCoreEnvsIds","compose","targetEnv","envTransformers","a","reduce","acc","transformer","override","propsToOverride","env","merge","sourceEnv","allNames","Set","keys","o","Object","prototype","getPrototypeOf","name","getOwnPropertyNames","add","forEach","key","fn","includes","bind","getEnvData","component","envsData","state","aspects","EnvsAspect","id","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","services","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","getEnvFromComponent","getEnvsEnvDefinition","alreadyShownWarning","consoleWarning","isEnvRegistered","isUsingAspectEnv","type","isUsingEnvEnv","isEnv","registerService","envServices","register","getServices","allServices","currentServices","service","implements","EnvServiceList","registerEnv","Runtime","aggregateByDefs","throwForDuplicateComponents","envsMap","Promise","envAspectDef","getEnvAspectDef","EnvRuntime","def","resolveAspects","MainRuntime","requestedOnly","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, AspectData } 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 ServiceSlot = SlotRegistry<Array<EnvService<any>>>;\n\nexport type Descriptor = {\n id: string;\n icon: string;\n services?: [];\n};\n\nexport const DEFAULT_ENV = 'teambit.harmony/node';\n\nexport class EnvsMain {\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 serviceSlot: ServiceSlot,\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 * 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): AspectData {\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;\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 | null {\n const envsData = this.getEnvData(component);\n return {\n id: this.getEnvId(component),\n icon: envsData.icon,\n services: envsData.services,\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.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 private 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]) {\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.serviceSlot.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.serviceSlot.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 const def = (await host.resolveAspects(MainRuntime.name, [id], { requestedOnly: true }))[0];\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, serviceSlot]: [EnvsRegistry, ServiceSlot],\n context: Harmony\n ) {\n const logger = loggerAspect.createLogger(EnvsAspect.id);\n const envs = new EnvsMain(config, context, envSlot, logger, serviceSlot, 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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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  import { EnvsAspect } from './environments.aspect';
2
+ export type { ServiceHandlerContext as EnvContext, ServiceHandlerFactory as EnvHandler, ServiceHandler } from './services';
2
3
  export { DEFAULT_ENV } from './environments.main.runtime';
3
4
  export * from './environment';
4
5
  export { ExecutionContext } from './context';
5
- export { EnvService, ConcreteService } from './services';
6
+ export { EnvService, ConcreteService, reduceServiceHandlersFactories } from './services';
6
7
  export { EnvRuntime } from './runtime/env-runtime';
8
+ export type { Env } from './env-interface';
7
9
  export type { EnvsMain, EnvTransformer, Descriptor } from './environments.main.runtime';
8
10
  export { EnvsAspect };
9
11
  export { EnvsExecutionResult } from './runtime/envs-execution-result';
package/dist/index.js CHANGED
@@ -9,6 +9,7 @@ var _exportNames = {
9
9
  ExecutionContext: true,
10
10
  EnvService: true,
11
11
  ConcreteService: true,
12
+ reduceServiceHandlersFactories: true,
12
13
  EnvRuntime: true,
13
14
  EnvsExecutionResult: true,
14
15
  EnvDefinition: true
@@ -62,6 +63,12 @@ Object.defineProperty(exports, "ExecutionContext", {
62
63
  }
63
64
  });
64
65
  exports.default = void 0;
66
+ Object.defineProperty(exports, "reduceServiceHandlersFactories", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _services().reduceServiceHandlersFactories;
70
+ }
71
+ });
65
72
  function _environments() {
66
73
  const data = require("./environments.aspect");
67
74
  _environments = function () {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["EnvsAspect"],"sources":["index.ts"],"sourcesContent":["import { EnvsAspect } from './environments.aspect';\n\nexport { DEFAULT_ENV } from './environments.main.runtime';\nexport * from './environment';\nexport { ExecutionContext } from './context';\nexport { EnvService, ConcreteService } from './services';\nexport { EnvRuntime } from './runtime/env-runtime';\nexport type { EnvsMain, EnvTransformer, Descriptor } from './environments.main.runtime';\nexport { EnvsAspect };\nexport { EnvsExecutionResult } from './runtime/envs-execution-result';\nexport type { EnvServiceList } from './env-service-list';\nexport { EnvDefinition } from './env-definition';\nexport default EnvsAspect;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAGA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAAiD,eAClCA,0BAAU;AAAA"}
1
+ {"version":3,"names":["EnvsAspect"],"sources":["index.ts"],"sourcesContent":["import { EnvsAspect } from './environments.aspect';\n\nexport type { ServiceHandlerContext as EnvContext, ServiceHandlerFactory as EnvHandler, ServiceHandler } from './services';\nexport { DEFAULT_ENV } from './environments.main.runtime';\nexport * from './environment';\nexport { ExecutionContext } from './context';\nexport { EnvService, ConcreteService, reduceServiceHandlersFactories } from './services';\nexport { EnvRuntime } from './runtime/env-runtime';\nexport type { Env } from './env-interface';\nexport type { EnvsMain, EnvTransformer, Descriptor } from './environments.main.runtime';\nexport { EnvsAspect };\nexport { EnvsExecutionResult } from './runtime/envs-execution-result';\nexport type { EnvServiceList } from './env-service-list';\nexport { EnvDefinition } from './env-definition';\nexport default EnvsAspect;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAGA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAIA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAAiD,eAClCA,0BAAU;AAAA"}
@@ -1,5 +1,5 @@
1
- import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.envs_envs@0.0.919/dist/env.composition.js';
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.envs_envs@0.0.919/dist/envs.docs.mdx';
1
+ import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.envs_envs@0.0.920/dist/env.composition.js';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.envs_envs@0.0.920/dist/envs.docs.mdx';
3
3
 
4
4
  export const compositions = [compositions_0];
5
5
  export const overview = [overview_0];
@@ -1,3 +1,4 @@
1
1
  export { Service as EnvService, ServiceExecutionResult } from './service';
2
2
  export { ConcreteService } from './concrete-service';
3
- export { ServiceHandler } from './service-handler';
3
+ export { ServiceHandler, ServiceHandlerFactory, reduceServiceHandlersFactories } from './service-handler';
4
+ export { ServiceHandlerContext } from './service-handler-context';
@@ -27,6 +27,24 @@ Object.defineProperty(exports, "ServiceHandler", {
27
27
  return _serviceHandler().ServiceHandler;
28
28
  }
29
29
  });
30
+ Object.defineProperty(exports, "ServiceHandlerContext", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _serviceHandlerContext().ServiceHandlerContext;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "ServiceHandlerFactory", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _serviceHandler().ServiceHandlerFactory;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "reduceServiceHandlersFactories", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _serviceHandler().reduceServiceHandlersFactories;
46
+ }
47
+ });
30
48
  function _service() {
31
49
  const data = require("./service");
32
50
  _service = function () {
@@ -48,5 +66,12 @@ function _serviceHandler() {
48
66
  };
49
67
  return data;
50
68
  }
69
+ function _serviceHandlerContext() {
70
+ const data = require("./service-handler-context");
71
+ _serviceHandlerContext = function () {
72
+ return data;
73
+ };
74
+ return data;
75
+ }
51
76
 
52
77
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { Service as EnvService, ServiceExecutionResult } from './service';\nexport { ConcreteService } from './concrete-service';\nexport { ServiceHandler } from './service-handler';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA"}
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { Service as EnvService, ServiceExecutionResult } from './service';\nexport { ConcreteService } from './concrete-service';\nexport { ServiceHandler, ServiceHandlerFactory, reduceServiceHandlersFactories } from './service-handler';\nexport { ServiceHandlerContext } from './service-handler-context';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA"}
@@ -0,0 +1,30 @@
1
+ import { ComponentID } from "@teambit/component";
2
+ import { Harmony } from "@teambit/harmony";
3
+ import { Logger, LoggerMain } from "@teambit/logger";
4
+ import { WorkerMain } from "@teambit/worker";
5
+ export declare class ServiceHandlerContext {
6
+ /**
7
+ * id of the environment defined in the context.
8
+ */
9
+ readonly envId: ComponentID;
10
+ readonly loggerMain: LoggerMain;
11
+ readonly workerMain: WorkerMain;
12
+ readonly harmony: Harmony;
13
+ constructor(
14
+ /**
15
+ * id of the environment defined in the context.
16
+ */
17
+ envId: ComponentID, loggerMain: LoggerMain, workerMain: WorkerMain, harmony: Harmony);
18
+ /**
19
+ * return a logger instance for the env.
20
+ */
21
+ createLogger(name?: string): Logger;
22
+ /**
23
+ * get an instance of an aspect. make sure it is loaded prior to requesting it.
24
+ */
25
+ getAspect<T>(aspectId: string): T;
26
+ /**
27
+ * create worker for the env context.
28
+ */
29
+ createWorker<T>(name: string, path: string): import("@teambit/worker").HarmonyWorker<T>;
30
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ServiceHandlerContext = void 0;
7
+ class ServiceHandlerContext {
8
+ constructor(
9
+ /**
10
+ * id of the environment defined in the context.
11
+ */
12
+ envId, loggerMain, workerMain, harmony) {
13
+ this.envId = envId;
14
+ this.loggerMain = loggerMain;
15
+ this.workerMain = workerMain;
16
+ this.harmony = harmony;
17
+ }
18
+
19
+ /**
20
+ * return a logger instance for the env.
21
+ */
22
+ createLogger(name) {
23
+ const loggerName = name ? `${this.envId.toString()}::${name}` : this.envId.toString();
24
+ return this.loggerMain.createLogger(loggerName);
25
+ }
26
+
27
+ /**
28
+ * get an instance of an aspect. make sure it is loaded prior to requesting it.
29
+ */
30
+ getAspect(aspectId) {
31
+ return this.harmony.get(aspectId);
32
+ }
33
+
34
+ /**
35
+ * create worker for the env context.
36
+ */
37
+ createWorker(name, path) {
38
+ const worker = this.workerMain.declareWorker(name, path);
39
+ return worker;
40
+ }
41
+ }
42
+ exports.ServiceHandlerContext = ServiceHandlerContext;
43
+
44
+ //# sourceMappingURL=service-handler-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ServiceHandlerContext","constructor","envId","loggerMain","workerMain","harmony","createLogger","name","loggerName","toString","getAspect","aspectId","get","createWorker","path","worker","declareWorker"],"sources":["service-handler-context.ts"],"sourcesContent":["import { ComponentID } from \"@teambit/component\";\nimport { Harmony } from \"@teambit/harmony\";\nimport { Logger, LoggerMain } from \"@teambit/logger\";\nimport { WorkerMain } from \"@teambit/worker\";\n\nexport class ServiceHandlerContext {\n constructor(\n /**\n * id of the environment defined in the context.\n */\n readonly envId: ComponentID,\n readonly loggerMain: LoggerMain,\n readonly workerMain: WorkerMain,\n readonly harmony: Harmony\n ) {}\n\n /**\n * return a logger instance for the env.\n */\n createLogger(name?: string): Logger {\n const loggerName = name \n ? `${this.envId.toString()}::${name}`\n : this.envId.toString();\n \n return this.loggerMain.createLogger(loggerName);\n }\n\n /**\n * get an instance of an aspect. make sure it is loaded prior to requesting it.\n */\n getAspect<T>(aspectId: string) {\n return this.harmony.get<T>(aspectId);\n }\n\n /**\n * create worker for the env context.\n */\n createWorker<T>(name: string, path: string) {\n const worker = this.workerMain.declareWorker<T>(name, path);\n return worker;\n }\n}\n"],"mappings":";;;;;;AAKO,MAAMA,qBAAqB,CAAC;EACjCC,WAAW;EACT;AACJ;AACA;EACaC,KAAkB,EAClBC,UAAsB,EACtBC,UAAsB,EACtBC,OAAgB,EACzB;IAAA,KAJSH,KAAkB,GAAlBA,KAAkB;IAAA,KAClBC,UAAsB,GAAtBA,UAAsB;IAAA,KACtBC,UAAsB,GAAtBA,UAAsB;IAAA,KACtBC,OAAgB,GAAhBA,OAAgB;EACxB;;EAEH;AACF;AACA;EACEC,YAAY,CAACC,IAAa,EAAU;IAClC,MAAMC,UAAU,GAAGD,IAAI,GAClB,GAAE,IAAI,CAACL,KAAK,CAACO,QAAQ,EAAG,KAAIF,IAAK,EAAC,GACnC,IAAI,CAACL,KAAK,CAACO,QAAQ,EAAE;IAEzB,OAAO,IAAI,CAACN,UAAU,CAACG,YAAY,CAACE,UAAU,CAAC;EACjD;;EAEA;AACF;AACA;EACEE,SAAS,CAAIC,QAAgB,EAAE;IAC7B,OAAO,IAAI,CAACN,OAAO,CAACO,GAAG,CAAID,QAAQ,CAAC;EACtC;;EAEA;AACF;AACA;EACEE,YAAY,CAAIN,IAAY,EAAEO,IAAY,EAAE;IAC1C,MAAMC,MAAM,GAAG,IAAI,CAACX,UAAU,CAACY,aAAa,CAAIT,IAAI,EAAEO,IAAI,CAAC;IAC3D,OAAOC,MAAM;EACf;AACF;AAAC"}
@@ -1,6 +1,17 @@
1
+ import { ServiceHandlerContext } from './service-handler-context';
1
2
  /**
2
3
  * definition of the service handler.
3
4
  */
5
+ export declare type ServiceHandlerFactory<T> = (context: ServiceHandlerContext) => ServiceHandler & T;
4
6
  export interface ServiceHandler {
5
- identifier: string;
7
+ /**
8
+ * name of the service. e.g. 'typescript-compiler'
9
+ */
10
+ name?: string;
11
+ /**
12
+ * version of the service. optional.
13
+ */
14
+ version?: () => string;
6
15
  }
16
+ export declare type ReduceFactoryCallback<T> = (acc: T, value: T) => ServiceHandler & T;
17
+ export declare function reduceServiceHandlersFactories<T>(factories: ServiceHandlerFactory<T>[], callback: ReduceFactoryCallback<T>): ServiceHandlerFactory<T>;
@@ -1,3 +1,25 @@
1
1
  "use strict";
2
2
 
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.reduceServiceHandlersFactories = reduceServiceHandlersFactories;
7
+ /**
8
+ * definition of the service handler.
9
+ */
10
+
11
+ function reduceServiceHandlersFactories(factories, callback) {
12
+ if (!factories.length) throw new Error('no factories were provided');
13
+ const result = context => {
14
+ // @ts-ignore
15
+ const initialVal = factories.shift()(context);
16
+ const reduced = factories.reduce((acc, currFactory) => {
17
+ const curr = currFactory(context);
18
+ return callback(acc, curr);
19
+ }, initialVal);
20
+ return reduced;
21
+ };
22
+ return result;
23
+ }
24
+
3
25
  //# sourceMappingURL=service-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["service-handler.ts"],"sourcesContent":["/**\n * definition of the service handler.\n */\nexport interface ServiceHandler {\n identifier: string;\n}\n"],"mappings":""}
1
+ {"version":3,"names":["reduceServiceHandlersFactories","factories","callback","length","Error","result","context","initialVal","shift","reduced","reduce","acc","currFactory","curr"],"sources":["service-handler.ts"],"sourcesContent":["import { ServiceHandlerContext } from './service-handler-context';\n\n/**\n * definition of the service handler.\n */\nexport type ServiceHandlerFactory<T> = (context: ServiceHandlerContext) => ServiceHandler & T;\n\nexport interface ServiceHandler {\n /**\n * name of the service. e.g. 'typescript-compiler'\n */\n name?: string;\n /**\n * version of the service. optional.\n */\n version?: () => string;\n\n /**\n * config of the service. e.g. tsconfig.json\n */\n // config?: string;\n}\n\nexport type ReduceFactoryCallback<T> = (acc: T, value: T) => ServiceHandler & T;\nexport function reduceServiceHandlersFactories<T>(\n factories: ServiceHandlerFactory<T>[],\n callback: ReduceFactoryCallback<T>\n): ServiceHandlerFactory<T> {\n if (!factories.length) throw new Error('no factories were provided');\n const result: ServiceHandlerFactory<T> = (context: ServiceHandlerContext) => {\n // @ts-ignore\n const initialVal = factories.shift()(context);\n const reduced: ServiceHandler & T = factories.reduce((acc, currFactory) => {\n const curr = currFactory(context);\n return callback(acc, curr);\n }, initialVal);\n return reduced;\n }\n return result;\n}\n"],"mappings":";;;;;;AAEA;AACA;AACA;;AAoBO,SAASA,8BAA8B,CAC5CC,SAAqC,EACrCC,QAAkC,EACR;EAC1B,IAAI,CAACD,SAAS,CAACE,MAAM,EAAE,MAAM,IAAIC,KAAK,CAAC,4BAA4B,CAAC;EACpE,MAAMC,MAAgC,GAAIC,OAA8B,IAAK;IAC3E;IACA,MAAMC,UAAU,GAAGN,SAAS,CAACO,KAAK,EAAE,CAACF,OAAO,CAAC;IAC7C,MAAMG,OAA2B,GAAGR,SAAS,CAACS,MAAM,CAAC,CAACC,GAAG,EAAEC,WAAW,KAAK;MACzE,MAAMC,IAAI,GAAGD,WAAW,CAACN,OAAO,CAAC;MACjC,OAAOJ,QAAQ,CAACS,GAAG,EAAEE,IAAI,CAAC;IAC5B,CAAC,EAAEN,UAAU,CAAC;IACd,OAAOE,OAAO;EAChB,CAAC;EACD,OAAOJ,MAAM;AACf"}
package/package.json CHANGED
@@ -1,42 +1,43 @@
1
1
  {
2
2
  "name": "@teambit/envs",
3
- "version": "0.0.919",
3
+ "version": "0.0.920",
4
4
  "homepage": "https://bit.dev/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.919"
9
+ "version": "0.0.920"
10
10
  },
11
11
  "dependencies": {
12
12
  "graphql-tag": "2.12.1",
13
+ "lodash": "4.17.21",
13
14
  "chalk": "2.4.2",
14
15
  "ink": "3.2.0",
15
- "lodash": "4.17.21",
16
16
  "p-map-series": "2.1.0",
17
17
  "@babel/runtime": "7.20.0",
18
18
  "core-js": "^3.0.0",
19
19
  "@teambit/harmony": "0.3.3",
20
- "@teambit/component": "0.0.919",
21
- "@teambit/builder": "0.0.919",
22
- "@teambit/bundler": "0.0.919",
23
- "@teambit/compiler": "0.0.919",
24
- "@teambit/dependency-resolver": "0.0.919",
25
- "@teambit/elements": "0.0.372",
26
- "@teambit/formatter": "0.0.470",
27
- "@teambit/isolator": "0.0.919",
28
- "@teambit/linter": "0.0.919",
29
- "@teambit/pkg": "0.0.919",
30
- "@teambit/preview": "0.0.919",
31
- "@teambit/schema": "0.0.919",
32
- "@teambit/tester": "0.0.919",
33
- "@teambit/webpack": "0.0.919",
34
- "@teambit/graphql": "0.0.919",
35
- "@teambit/aspect-loader": "0.0.919",
20
+ "@teambit/component": "0.0.920",
21
+ "@teambit/aspect-loader": "0.0.920",
22
+ "@teambit/cli": "0.0.616",
23
+ "@teambit/logger": "0.0.709",
24
+ "@teambit/worker": "0.0.920",
25
+ "@teambit/builder": "0.0.920",
26
+ "@teambit/bundler": "0.0.920",
27
+ "@teambit/compiler": "0.0.920",
28
+ "@teambit/dependency-resolver": "0.0.920",
29
+ "@teambit/elements": "0.0.373",
30
+ "@teambit/formatter": "0.0.471",
31
+ "@teambit/isolator": "0.0.920",
32
+ "@teambit/linter": "0.0.920",
33
+ "@teambit/pkg": "0.0.920",
34
+ "@teambit/preview": "0.0.920",
35
+ "@teambit/schema": "0.0.920",
36
+ "@teambit/tester": "0.0.920",
37
+ "@teambit/webpack": "0.0.920",
38
+ "@teambit/graphql": "0.0.920",
36
39
  "@teambit/bit-error": "0.0.402",
37
- "@teambit/cli": "0.0.615",
38
40
  "@teambit/legacy-bit-id": "0.0.421",
39
- "@teambit/logger": "0.0.708",
40
41
  "@teambit/cli-table": "0.0.41"
41
42
  },
42
43
  "devDependencies": {
@@ -47,10 +48,10 @@
47
48
  "@types/jest": "^26.0.0",
48
49
  "@types/react-dom": "^17.0.5",
49
50
  "@types/node": "12.20.4",
50
- "@teambit/envs.aspect-docs.envs": "0.0.148"
51
+ "@teambit/envs.aspect-docs.envs": "0.0.149"
51
52
  },
52
53
  "peerDependencies": {
53
- "@teambit/legacy": "1.0.396",
54
+ "@teambit/legacy": "1.0.397",
54
55
  "react-dom": "^16.8.0 || ^17.0.0",
55
56
  "react": "^16.8.0 || ^17.0.0"
56
57
  },
package/services/index.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { Service as EnvService, ServiceExecutionResult } from './service';
2
2
  export { ConcreteService } from './concrete-service';
3
- export { ServiceHandler } from './service-handler';
3
+ export { ServiceHandler, ServiceHandlerFactory, reduceServiceHandlersFactories } from './service-handler';
4
+ export { ServiceHandlerContext } from './service-handler-context';
@@ -0,0 +1,42 @@
1
+ import { ComponentID } from "@teambit/component";
2
+ import { Harmony } from "@teambit/harmony";
3
+ import { Logger, LoggerMain } from "@teambit/logger";
4
+ import { WorkerMain } from "@teambit/worker";
5
+
6
+ export class ServiceHandlerContext {
7
+ constructor(
8
+ /**
9
+ * id of the environment defined in the context.
10
+ */
11
+ readonly envId: ComponentID,
12
+ readonly loggerMain: LoggerMain,
13
+ readonly workerMain: WorkerMain,
14
+ readonly harmony: Harmony
15
+ ) {}
16
+
17
+ /**
18
+ * return a logger instance for the env.
19
+ */
20
+ createLogger(name?: string): Logger {
21
+ const loggerName = name
22
+ ? `${this.envId.toString()}::${name}`
23
+ : this.envId.toString();
24
+
25
+ return this.loggerMain.createLogger(loggerName);
26
+ }
27
+
28
+ /**
29
+ * get an instance of an aspect. make sure it is loaded prior to requesting it.
30
+ */
31
+ getAspect<T>(aspectId: string) {
32
+ return this.harmony.get<T>(aspectId);
33
+ }
34
+
35
+ /**
36
+ * create worker for the env context.
37
+ */
38
+ createWorker<T>(name: string, path: string) {
39
+ const worker = this.workerMain.declareWorker<T>(name, path);
40
+ return worker;
41
+ }
42
+ }
@@ -1,6 +1,40 @@
1
+ import { ServiceHandlerContext } from './service-handler-context';
2
+
1
3
  /**
2
4
  * definition of the service handler.
3
5
  */
6
+ export type ServiceHandlerFactory<T> = (context: ServiceHandlerContext) => ServiceHandler & T;
7
+
4
8
  export interface ServiceHandler {
5
- identifier: string;
9
+ /**
10
+ * name of the service. e.g. 'typescript-compiler'
11
+ */
12
+ name?: string;
13
+ /**
14
+ * version of the service. optional.
15
+ */
16
+ version?: () => string;
17
+
18
+ /**
19
+ * config of the service. e.g. tsconfig.json
20
+ */
21
+ // config?: string;
22
+ }
23
+
24
+ export type ReduceFactoryCallback<T> = (acc: T, value: T) => ServiceHandler & T;
25
+ export function reduceServiceHandlersFactories<T>(
26
+ factories: ServiceHandlerFactory<T>[],
27
+ callback: ReduceFactoryCallback<T>
28
+ ): ServiceHandlerFactory<T> {
29
+ if (!factories.length) throw new Error('no factories were provided');
30
+ const result: ServiceHandlerFactory<T> = (context: ServiceHandlerContext) => {
31
+ // @ts-ignore
32
+ const initialVal = factories.shift()(context);
33
+ const reduced: ServiceHandler & T = factories.reduce((acc, currFactory) => {
34
+ const curr = currFactory(context);
35
+ return callback(acc, curr);
36
+ }, initialVal);
37
+ return reduced;
38
+ }
39
+ return result;
6
40
  }