@teambit/application 0.0.229 → 0.0.233

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.
@@ -1,7 +1,10 @@
1
1
  import { ExecutionContext } from '@teambit/envs';
2
+ import { Component } from '@teambit/component';
2
3
  export interface AppContext extends ExecutionContext {
3
4
  /**
4
5
  * determine whether to serve the application in dev mode.
5
6
  */
6
7
  dev: boolean;
8
+ appName: string;
9
+ appComponent: Component;
7
10
  }
package/dist/app.cmd.js CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
+ require("core-js/modules/es.array.flat-map.js");
6
+
7
+ require("core-js/modules/es.array.iterator.js");
8
+
9
+ require("core-js/modules/es.array.unscopables.flat-map.js");
10
+
5
11
  require("core-js/modules/es.promise.js");
6
12
 
7
13
  Object.defineProperty(exports, "__esModule", {
@@ -54,13 +60,13 @@ class AppListCmd {
54
60
  async report(args, {
55
61
  json
56
62
  }) {
57
- const apps = this.applicationAspect.listApps();
58
- if (json) return JSON.stringify(apps, null, 2);
59
- if (!apps.length) return _chalk().default.yellow('no apps found');
60
- const rows = apps.map(app => {
61
- return [app.name];
63
+ const appComponents = this.applicationAspect.mapApps();
64
+ if (json) return JSON.stringify(appComponents, null, 2);
65
+ if (!appComponents.length) return _chalk().default.yellow('no apps found');
66
+ const rows = appComponents.flatMap(([id, apps]) => {
67
+ return apps.map(app => [id, app.name]);
62
68
  });
63
- const table = new (_cliTable().CLITable)([], rows);
69
+ const table = new (_cliTable().CLITable)(['id', 'name'], rows);
64
70
  return table.render();
65
71
  }
66
72
 
@@ -1 +1 @@
1
- {"version":3,"sources":["app.cmd.ts"],"names":["AppListCmd","constructor","applicationAspect","report","args","json","apps","listApps","JSON","stringify","length","chalk","yellow","rows","map","app","name","table","CLITable","render","AppCmd"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAJA;AAEA;AAKO,MAAMA,UAAN,CAAoC;AAOzCC,EAAAA,WAAW,CAASC,iBAAT,EAA6C;AAAA,SAApCA,iBAAoC,GAApCA,iBAAoC;AAAA,kDANjD,MAMiD;AAAA,yDAL1C,kCAK0C;AAAA,mDAJhD,EAIgD;AAAA,mDAHhD,MAGgD;AAAA,qDAF9C,CAAC,CAAC,GAAD,EAAM,MAAN,EAAc,0CAAd,CAAD,CAE8C;AAAE;;AAE9C,QAANC,MAAM,CAACC,IAAD,EAAiB;AAAEC,IAAAA;AAAF,GAAjB,EAA8C;AACxD,UAAMC,IAAI,GAAG,KAAKJ,iBAAL,CAAuBK,QAAvB,EAAb;AACA,QAAIF,IAAJ,EAAU,OAAOG,IAAI,CAACC,SAAL,CAAeH,IAAf,EAAqB,IAArB,EAA2B,CAA3B,CAAP;AACV,QAAI,CAACA,IAAI,CAACI,MAAV,EAAkB,OAAOC,iBAAMC,MAAN,CAAa,eAAb,CAAP;AAElB,UAAMC,IAAI,GAAGP,IAAI,CAACQ,GAAL,CAAUC,GAAD,IAAS;AAC7B,aAAO,CAACA,GAAG,CAACC,IAAL,CAAP;AACD,KAFY,CAAb;AAIA,UAAMC,KAAK,GAAG,KAAIC,oBAAJ,EAAa,EAAb,EAAiBL,IAAjB,CAAd;AACA,WAAOI,KAAK,CAACE,MAAN,EAAP;AACD;;AApBwC;;;;AAuBpC,MAAMC,MAAN,CAAgC;AAAA;AAAA,kDAC9B,mBAD8B;AAAA,yDAEvB,qBAFuB;AAAA,mDAG7B,EAH6B;AAAA,mDAI7B,MAJ6B;AAAA,sDAKf,EALe;AAAA,qDAM3B,EAN2B;AAAA;;AAQrC;AACY,QAANjB,MAAM,CAACC,IAAD,EAAiB;AAC3B;AACA,WAAQ,8BAAR;AACD;;AAZoC","sourcesContent":["// eslint-disable-next-line max-classes-per-file\nimport { Command, CommandOptions } from '@teambit/cli';\n// import { Logger } from '@teambit/logger';\nimport chalk from 'chalk';\nimport { CLITable } from '@teambit/cli-table';\nimport { ApplicationMain } from './application.main.runtime';\n\nexport class AppListCmd implements Command {\n name = 'list';\n description = 'list all registered applications';\n alias = '';\n group = 'apps';\n options = [['j', 'json', 'return the component data in json format']] as CommandOptions;\n\n constructor(private applicationAspect: ApplicationMain) {}\n\n async report(args: [string], { json }: { json: boolean }) {\n const apps = this.applicationAspect.listApps();\n if (json) return JSON.stringify(apps, null, 2);\n if (!apps.length) return chalk.yellow('no apps found');\n\n const rows = apps.map((app) => {\n return [app.name];\n });\n\n const table = new CLITable([], rows);\n return table.render();\n }\n}\n\nexport class AppCmd implements Command {\n name = 'app <sub-command>';\n description = 'manage applications';\n alias = '';\n group = 'apps';\n commands: Command[] = [];\n options = [] as CommandOptions;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async report(args: [string]) {\n // it should never be here. Yargs throws an error before reaching this method.\n return `Please specify a sub-command`;\n }\n}\n"]}
1
+ {"version":3,"sources":["app.cmd.ts"],"names":["AppListCmd","constructor","applicationAspect","report","args","json","appComponents","mapApps","JSON","stringify","length","chalk","yellow","rows","flatMap","id","apps","map","app","name","table","CLITable","render","AppCmd"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAJA;AAEA;AAKO,MAAMA,UAAN,CAAoC;AAOzCC,EAAAA,WAAW,CAASC,iBAAT,EAA6C;AAAA,SAApCA,iBAAoC,GAApCA,iBAAoC;AAAA,kDANjD,MAMiD;AAAA,yDAL1C,kCAK0C;AAAA,mDAJhD,EAIgD;AAAA,mDAHhD,MAGgD;AAAA,qDAF9C,CAAC,CAAC,GAAD,EAAM,MAAN,EAAc,0CAAd,CAAD,CAE8C;AAAE;;AAE9C,QAANC,MAAM,CAACC,IAAD,EAAiB;AAAEC,IAAAA;AAAF,GAAjB,EAA8C;AACxD,UAAMC,aAAa,GAAG,KAAKJ,iBAAL,CAAuBK,OAAvB,EAAtB;AACA,QAAIF,IAAJ,EAAU,OAAOG,IAAI,CAACC,SAAL,CAAeH,aAAf,EAA8B,IAA9B,EAAoC,CAApC,CAAP;AACV,QAAI,CAACA,aAAa,CAACI,MAAnB,EAA2B,OAAOC,iBAAMC,MAAN,CAAa,eAAb,CAAP;AAE3B,UAAMC,IAAI,GAAGP,aAAa,CAACQ,OAAd,CAAsB,CAAC,CAACC,EAAD,EAAKC,IAAL,CAAD,KAAgB;AACjD,aAAOA,IAAI,CAACC,GAAL,CAAUC,GAAD,IAAS,CAACH,EAAD,EAAKG,GAAG,CAACC,IAAT,CAAlB,CAAP;AACD,KAFY,CAAb;AAIA,UAAMC,KAAK,GAAG,KAAIC,oBAAJ,EAAa,CAAC,IAAD,EAAO,MAAP,CAAb,EAA6BR,IAA7B,CAAd;AACA,WAAOO,KAAK,CAACE,MAAN,EAAP;AACD;;AApBwC;;;;AAuBpC,MAAMC,MAAN,CAAgC;AAAA;AAAA,kDAC9B,mBAD8B;AAAA,yDAEvB,qBAFuB;AAAA,mDAG7B,EAH6B;AAAA,mDAI7B,MAJ6B;AAAA,sDAKf,EALe;AAAA,qDAM3B,EAN2B;AAAA;;AAQrC;AACY,QAANpB,MAAM,CAACC,IAAD,EAAiB;AAC3B;AACA,WAAQ,8BAAR;AACD;;AAZoC","sourcesContent":["// eslint-disable-next-line max-classes-per-file\nimport { Command, CommandOptions } from '@teambit/cli';\n// import { Logger } from '@teambit/logger';\nimport chalk from 'chalk';\nimport { CLITable } from '@teambit/cli-table';\nimport { ApplicationMain } from './application.main.runtime';\n\nexport class AppListCmd implements Command {\n name = 'list';\n description = 'list all registered applications';\n alias = '';\n group = 'apps';\n options = [['j', 'json', 'return the component data in json format']] as CommandOptions;\n\n constructor(private applicationAspect: ApplicationMain) {}\n\n async report(args: [string], { json }: { json: boolean }) {\n const appComponents = this.applicationAspect.mapApps();\n if (json) return JSON.stringify(appComponents, null, 2);\n if (!appComponents.length) return chalk.yellow('no apps found');\n\n const rows = appComponents.flatMap(([id, apps]) => {\n return apps.map((app) => [id, app.name]);\n });\n\n const table = new CLITable(['id', 'name'], rows);\n return table.render();\n }\n}\n\nexport class AppCmd implements Command {\n name = 'app <sub-command>';\n description = 'manage applications';\n alias = '';\n group = 'apps';\n commands: Command[] = [];\n options = [] as CommandOptions;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async report(args: [string]) {\n // it should never be here. Yargs throws an error before reaching this method.\n return `Please specify a sub-command`;\n }\n}\n"]}
@@ -14,7 +14,7 @@ export interface Application {
14
14
  /**
15
15
  * build the application.
16
16
  */
17
- build(context: BuildContext, aspectId: string, capsule: Capsule): Promise<DeployContext>;
17
+ build?(context: BuildContext, aspectId: string, capsule: Capsule): Promise<DeployContext>;
18
18
  /**
19
19
  * application deployment. this is a build task.
20
20
  */
@@ -40,6 +40,14 @@ export declare class ApplicationMain {
40
40
  * list all registered apps.
41
41
  */
42
42
  listApps(): Application[];
43
+ /**
44
+ * map all apps by component ID.
45
+ */
46
+ mapApps(): [string, Application[]][];
47
+ /**
48
+ * list apps by a component id.
49
+ */
50
+ listAppsById(id?: ComponentID): Application[] | undefined;
43
51
  /**
44
52
  * register new deployment provider like netlify, cloudflare pages or custom deployment.
45
53
  */
@@ -51,7 +59,7 @@ export declare class ApplicationMain {
51
59
  /**
52
60
  * get an app.
53
61
  */
54
- getApp(appName: string): Application | undefined;
62
+ getApp(appName: string, id?: ComponentID): Application | undefined;
55
63
  /**
56
64
  * registers a new app and sets a plugin for it.
57
65
  */
@@ -195,9 +195,9 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
195
195
 
196
196
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
197
197
 
198
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
198
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
199
199
 
200
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2().default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
200
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2().default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
201
201
 
202
202
  class ApplicationMain {
203
203
  constructor(appSlot, appTypeSlot, deploymentProviderSlot, envs, componentAspect, appService, aspectLoader) {
@@ -226,6 +226,23 @@ class ApplicationMain {
226
226
  listApps() {
227
227
  return (0, _lodash().flatten)(this.appSlot.values());
228
228
  }
229
+ /**
230
+ * map all apps by component ID.
231
+ */
232
+
233
+
234
+ mapApps() {
235
+ return this.appSlot.toArray();
236
+ }
237
+ /**
238
+ * list apps by a component id.
239
+ */
240
+
241
+
242
+ listAppsById(id) {
243
+ if (!id) return undefined;
244
+ return this.appSlot.get(id.toString());
245
+ }
229
246
  /**
230
247
  * register new deployment provider like netlify, cloudflare pages or custom deployment.
231
248
  */
@@ -248,8 +265,8 @@ class ApplicationMain {
248
265
  */
249
266
 
250
267
 
251
- getApp(appName) {
252
- const apps = this.listApps();
268
+ getApp(appName, id) {
269
+ const apps = this.listAppsById(id) || this.listApps();
253
270
  return apps.find(app => app.name === appName);
254
271
  }
255
272
  /**
@@ -323,10 +340,16 @@ class ApplicationMain {
323
340
  const components = await host.list();
324
341
  const id = this.getAppIdOrThrow(appName);
325
342
  const component = components.find(c => c.id.isEqual(id));
326
- if (!component) throw new (_exceptions().AppNotFound)(appName);
343
+ if (!component) throw new (_exceptions().AppNotFound)(appName); // console.log(comp)
344
+
327
345
  const env = await this.envs.createEnvironment([component]);
328
346
  const res = await env.run(this.appService);
329
- return res.results[0].data;
347
+ const context = res.results[0].data;
348
+ if (!context) throw new (_exceptions().AppNotFound)(appName);
349
+ return Object.assign({}, context, {
350
+ appName,
351
+ appComponent: component
352
+ });
330
353
  }
331
354
 
332
355
  static async provider([cli, loggerAspect, builder, envs, component, aspectLoader], config, [appTypeSlot, appSlot, deploymentProviderSlot]) {
@@ -1 +1 @@
1
- {"version":3,"sources":["application.main.runtime.ts"],"names":["ApplicationMain","constructor","appSlot","appTypeSlot","deploymentProviderSlot","envs","componentAspect","appService","aspectLoader","registerApp","app","register","listApps","values","registerDeploymentProvider","provider","listProviders","getApp","appName","apps","find","name","registerAppType","appType","plugin","AppTypePlugin","registerPlugins","getAppAspect","toArray","getAppOrThrow","AppNotFound","computeOptions","opts","defaultOpts","dev","defaultPortRange","runApp","options","context","createAppContext","port","run","getAppIdOrThrow","maybeApp","ComponentID","fromString","host","getHost","components","list","id","component","c","isEqual","env","createEnvironment","res","results","data","cli","loggerAspect","builder","config","logger","createLogger","ApplicationAspect","AppService","application","appCmd","AppCmd","commands","AppListCmd","AppPlugin","registerTagTasks","DeployTask","registerGroup","RunCmd","AppListCmdDeprecated","MainRuntime","CLIAspect","LoggerAspect","BuilderAspect","EnvsAspect","ComponentAspect","AspectLoaderAspect","Slot","withType","addRuntime"],"mappings":"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","sourcesContent":["import { MainRuntime, CLIMain, CLIAspect } from '@teambit/cli';\nimport { flatten } from 'lodash';\nimport { AspectLoaderMain, AspectLoaderAspect } from '@teambit/aspect-loader';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport { BuilderAspect, BuilderMain } from '@teambit/builder';\nimport { LoggerAspect, LoggerMain } from '@teambit/logger';\nimport { EnvsAspect, EnvsMain } from '@teambit/envs';\nimport ComponentAspect, { ComponentMain, ComponentID } from '@teambit/component';\nimport { ApplicationType } from './application-type';\nimport { Application } from './application';\nimport { DeploymentProvider } from './deployment-provider';\nimport { AppNotFound } from './exceptions';\nimport { ApplicationAspect } from './application.aspect';\nimport { AppListCmdDeprecated } from './app-list.cmd';\nimport { DeployTask } from './deploy.task';\nimport { RunCmd } from './run.cmd';\nimport { AppService } from './application.service';\nimport { AppCmd, AppListCmd } from './app.cmd';\nimport { AppPlugin } from './app.plugin';\nimport { AppTypePlugin } from './app-type.plugin';\n\nexport type ApplicationTypeSlot = SlotRegistry<ApplicationType<unknown>[]>;\nexport type ApplicationSlot = SlotRegistry<Application[]>;\nexport type DeploymentProviderSlot = SlotRegistry<DeploymentProvider[]>;\n\nexport type ApplicationAspectConfig = {};\n\nexport type ServeAppOptions = {\n /**\n * default port range used to serve applications.\n */\n defaultPortRange?: number[];\n\n /**\n * determine whether to start the application in dev mode.\n */\n dev: boolean;\n};\n\nexport class ApplicationMain {\n constructor(\n private appSlot: ApplicationSlot,\n private appTypeSlot: ApplicationTypeSlot,\n private deploymentProviderSlot: DeploymentProviderSlot,\n private envs: EnvsMain,\n private componentAspect: ComponentMain,\n private appService: AppService,\n private aspectLoader: AspectLoaderMain\n ) {}\n\n /**\n * register a new app.\n */\n registerApp(app: Application) {\n this.appSlot.register([app]);\n return this;\n }\n\n /**\n * list all registered apps.\n */\n listApps(): Application[] {\n return flatten(this.appSlot.values());\n }\n\n /**\n * register new deployment provider like netlify, cloudflare pages or custom deployment.\n */\n registerDeploymentProvider(provider: DeploymentProvider) {\n this.deploymentProviderSlot.register([provider]);\n return this;\n }\n\n /**\n * list all deployment providers\n */\n listProviders() {\n return flatten(this.deploymentProviderSlot.values());\n }\n\n /**\n * get an app.\n */\n getApp(appName: string): Application | undefined {\n const apps = this.listApps();\n return apps.find((app) => app.name === appName);\n }\n\n /**\n * registers a new app and sets a plugin for it.\n */\n registerAppType<T>(appType: ApplicationType<T>) {\n const plugin = new AppTypePlugin(`*.${appType.name}.*`, appType, this.appSlot);\n this.aspectLoader.registerPlugins([plugin]);\n this.appTypeSlot.register([appType]);\n return this;\n }\n\n /**\n * get an app AspectId.\n */\n getAppAspect(appName: string): string | undefined {\n return this.appSlot.toArray().find(([, apps]) => apps.find((app) => app.name === appName))?.[0];\n }\n\n /**\n * get app to throw.\n */\n getAppOrThrow(appName: string) {\n const app = this.getApp(appName);\n if (!app) throw new AppNotFound(appName);\n return app;\n }\n\n private computeOptions(opts: Partial<ServeAppOptions>) {\n const defaultOpts: ServeAppOptions = {\n dev: false,\n defaultPortRange: [3100, 3500],\n };\n\n return {\n defaultOpts,\n ...opts,\n };\n }\n\n async runApp(appName: string, options: Partial<ServeAppOptions> = {}) {\n const app = this.getAppOrThrow(appName);\n this.computeOptions(options);\n const context = await this.createAppContext(appName);\n if (!context) throw new AppNotFound(appName);\n const port = await app.run(context);\n return { app, port };\n }\n\n /**\n * get the component ID of a certain app.\n */\n getAppIdOrThrow(appName: string) {\n const maybeApp = this.appSlot.toArray().find(([, apps]) => {\n return apps.find((app) => app.name === appName);\n });\n\n if (!maybeApp) throw new AppNotFound(appName);\n return ComponentID.fromString(maybeApp[0]);\n }\n\n private async createAppContext(appName: string) {\n const host = this.componentAspect.getHost();\n const components = await host.list();\n const id = this.getAppIdOrThrow(appName);\n const component = components.find((c) => c.id.isEqual(id));\n if (!component) throw new AppNotFound(appName);\n\n const env = await this.envs.createEnvironment([component]);\n const res = await env.run(this.appService);\n return res.results[0].data;\n }\n\n static runtime = MainRuntime;\n static dependencies = [CLIAspect, LoggerAspect, BuilderAspect, EnvsAspect, ComponentAspect, AspectLoaderAspect];\n\n static slots = [\n Slot.withType<ApplicationType<unknown>[]>(),\n Slot.withType<Application[]>(),\n Slot.withType<DeploymentProvider[]>(),\n ];\n\n static async provider(\n [cli, loggerAspect, builder, envs, component, aspectLoader]: [\n CLIMain,\n LoggerMain,\n BuilderMain,\n EnvsMain,\n ComponentMain,\n AspectLoaderMain\n ],\n config: ApplicationAspectConfig,\n [appTypeSlot, appSlot, deploymentProviderSlot]: [ApplicationTypeSlot, ApplicationSlot, DeploymentProviderSlot]\n ) {\n const logger = loggerAspect.createLogger(ApplicationAspect.id);\n const appService = new AppService();\n const application = new ApplicationMain(\n appSlot,\n appTypeSlot,\n deploymentProviderSlot,\n envs,\n component,\n appService,\n aspectLoader\n );\n const appCmd = new AppCmd();\n appCmd.commands = [new AppListCmd(application)];\n aspectLoader.registerPlugins([new AppPlugin(appSlot)]);\n builder.registerTagTasks([new DeployTask(application)]);\n cli.registerGroup('apps', 'Applications');\n cli.register(new RunCmd(application, logger), new AppListCmdDeprecated(application), appCmd);\n\n return application;\n }\n}\n\nApplicationAspect.addRuntime(ApplicationMain);\n"]}
1
+ {"version":3,"sources":["application.main.runtime.ts"],"names":["ApplicationMain","constructor","appSlot","appTypeSlot","deploymentProviderSlot","envs","componentAspect","appService","aspectLoader","registerApp","app","register","listApps","values","mapApps","toArray","listAppsById","id","undefined","get","toString","registerDeploymentProvider","provider","listProviders","getApp","appName","apps","find","name","registerAppType","appType","plugin","AppTypePlugin","registerPlugins","getAppAspect","getAppOrThrow","AppNotFound","computeOptions","opts","defaultOpts","dev","defaultPortRange","runApp","options","context","createAppContext","port","run","getAppIdOrThrow","maybeApp","ComponentID","fromString","host","getHost","components","list","component","c","isEqual","env","createEnvironment","res","results","data","Object","assign","appComponent","cli","loggerAspect","builder","config","logger","createLogger","ApplicationAspect","AppService","application","appCmd","AppCmd","commands","AppListCmd","AppPlugin","registerTagTasks","DeployTask","registerGroup","RunCmd","AppListCmdDeprecated","MainRuntime","CLIAspect","LoggerAspect","BuilderAspect","EnvsAspect","ComponentAspect","AspectLoaderAspect","Slot","withType","addRuntime"],"mappings":"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","sourcesContent":["import { MainRuntime, CLIMain, CLIAspect } from '@teambit/cli';\nimport { flatten } from 'lodash';\nimport { AspectLoaderMain, AspectLoaderAspect } from '@teambit/aspect-loader';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport { BuilderAspect, BuilderMain } from '@teambit/builder';\nimport { LoggerAspect, LoggerMain } from '@teambit/logger';\nimport { EnvsAspect, EnvsMain } from '@teambit/envs';\nimport ComponentAspect, { ComponentMain, ComponentID } from '@teambit/component';\nimport { ApplicationType } from './application-type';\nimport { Application } from './application';\nimport { DeploymentProvider } from './deployment-provider';\nimport { AppNotFound } from './exceptions';\nimport { ApplicationAspect } from './application.aspect';\nimport { AppListCmdDeprecated } from './app-list.cmd';\nimport { DeployTask } from './deploy.task';\nimport { RunCmd } from './run.cmd';\nimport { AppService } from './application.service';\nimport { AppCmd, AppListCmd } from './app.cmd';\nimport { AppPlugin } from './app.plugin';\nimport { AppTypePlugin } from './app-type.plugin';\nimport { AppContext } from './app-context';\n\nexport type ApplicationTypeSlot = SlotRegistry<ApplicationType<unknown>[]>;\nexport type ApplicationSlot = SlotRegistry<Application[]>;\nexport type DeploymentProviderSlot = SlotRegistry<DeploymentProvider[]>;\n\nexport type ApplicationAspectConfig = {};\n\nexport type ServeAppOptions = {\n /**\n * default port range used to serve applications.\n */\n defaultPortRange?: number[];\n\n /**\n * determine whether to start the application in dev mode.\n */\n dev: boolean;\n};\n\nexport class ApplicationMain {\n constructor(\n private appSlot: ApplicationSlot,\n private appTypeSlot: ApplicationTypeSlot,\n private deploymentProviderSlot: DeploymentProviderSlot,\n private envs: EnvsMain,\n private componentAspect: ComponentMain,\n private appService: AppService,\n private aspectLoader: AspectLoaderMain\n ) {}\n\n /**\n * register a new app.\n */\n registerApp(app: Application) {\n this.appSlot.register([app]);\n return this;\n }\n\n /**\n * list all registered apps.\n */\n listApps(): Application[] {\n return flatten(this.appSlot.values());\n }\n\n /**\n * map all apps by component ID.\n */\n mapApps() {\n return this.appSlot.toArray();\n }\n\n /**\n * list apps by a component id.\n */\n listAppsById(id?: ComponentID): Application[] | undefined {\n if (!id) return undefined;\n return this.appSlot.get(id.toString());\n }\n\n /**\n * register new deployment provider like netlify, cloudflare pages or custom deployment.\n */\n registerDeploymentProvider(provider: DeploymentProvider) {\n this.deploymentProviderSlot.register([provider]);\n return this;\n }\n\n /**\n * list all deployment providers\n */\n listProviders() {\n return flatten(this.deploymentProviderSlot.values());\n }\n\n /**\n * get an app.\n */\n getApp(appName: string, id?: ComponentID): Application | undefined {\n const apps = this.listAppsById(id) || this.listApps();\n return apps.find((app) => app.name === appName);\n }\n\n /**\n * registers a new app and sets a plugin for it.\n */\n registerAppType<T>(appType: ApplicationType<T>) {\n const plugin = new AppTypePlugin(`*.${appType.name}.*`, appType, this.appSlot);\n this.aspectLoader.registerPlugins([plugin]);\n this.appTypeSlot.register([appType]);\n return this;\n }\n\n /**\n * get an app AspectId.\n */\n getAppAspect(appName: string): string | undefined {\n return this.appSlot.toArray().find(([, apps]) => apps.find((app) => app.name === appName))?.[0];\n }\n\n /**\n * get app to throw.\n */\n getAppOrThrow(appName: string) {\n const app = this.getApp(appName);\n if (!app) throw new AppNotFound(appName);\n return app;\n }\n\n private computeOptions(opts: Partial<ServeAppOptions>) {\n const defaultOpts: ServeAppOptions = {\n dev: false,\n defaultPortRange: [3100, 3500],\n };\n\n return {\n defaultOpts,\n ...opts,\n };\n }\n\n async runApp(appName: string, options: Partial<ServeAppOptions> = {}) {\n const app = this.getAppOrThrow(appName);\n this.computeOptions(options);\n const context = await this.createAppContext(appName);\n if (!context) throw new AppNotFound(appName);\n const port = await app.run(context);\n return { app, port };\n }\n\n /**\n * get the component ID of a certain app.\n */\n getAppIdOrThrow(appName: string) {\n const maybeApp = this.appSlot.toArray().find(([, apps]) => {\n return apps.find((app) => app.name === appName);\n });\n\n if (!maybeApp) throw new AppNotFound(appName);\n return ComponentID.fromString(maybeApp[0]);\n }\n\n private async createAppContext(appName: string): Promise<AppContext> {\n const host = this.componentAspect.getHost();\n const components = await host.list();\n const id = this.getAppIdOrThrow(appName);\n const component = components.find((c) => c.id.isEqual(id));\n if (!component) throw new AppNotFound(appName);\n // console.log(comp)\n\n const env = await this.envs.createEnvironment([component]);\n const res = await env.run(this.appService);\n const context = res.results[0].data;\n if (!context) throw new AppNotFound(appName);\n return Object.assign({}, context, {\n appName,\n appComponent: component,\n });\n }\n\n static runtime = MainRuntime;\n static dependencies = [CLIAspect, LoggerAspect, BuilderAspect, EnvsAspect, ComponentAspect, AspectLoaderAspect];\n\n static slots = [\n Slot.withType<ApplicationType<unknown>[]>(),\n Slot.withType<Application[]>(),\n Slot.withType<DeploymentProvider[]>(),\n ];\n\n static async provider(\n [cli, loggerAspect, builder, envs, component, aspectLoader]: [\n CLIMain,\n LoggerMain,\n BuilderMain,\n EnvsMain,\n ComponentMain,\n AspectLoaderMain\n ],\n config: ApplicationAspectConfig,\n [appTypeSlot, appSlot, deploymentProviderSlot]: [ApplicationTypeSlot, ApplicationSlot, DeploymentProviderSlot]\n ) {\n const logger = loggerAspect.createLogger(ApplicationAspect.id);\n const appService = new AppService();\n const application = new ApplicationMain(\n appSlot,\n appTypeSlot,\n deploymentProviderSlot,\n envs,\n component,\n appService,\n aspectLoader\n );\n const appCmd = new AppCmd();\n appCmd.commands = [new AppListCmd(application)];\n aspectLoader.registerPlugins([new AppPlugin(appSlot)]);\n builder.registerTagTasks([new DeployTask(application)]);\n cli.registerGroup('apps', 'Applications');\n cli.register(new RunCmd(application, logger), new AppListCmdDeprecated(application), appCmd);\n\n return application;\n }\n}\n\nApplicationAspect.addRuntime(ApplicationMain);\n"]}
@@ -71,8 +71,9 @@ class DeployTask {
71
71
  const capsules = context.capsuleNetwork.seedersCapsules;
72
72
  const capsule = this.getCapsule(capsules, aspectId);
73
73
  if (!capsule) return undefined;
74
+ if (!app.build) return undefined;
74
75
  const deployContext = await app.build(context, aspectId, capsule);
75
- if (!deployContext.publicDir) return undefined;
76
+ if (!deployContext || !deployContext.publicDir) return undefined;
76
77
  if (app.deploy) await app.deploy(deployContext);
77
78
  await this.deployToProviders(deployContext);
78
79
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["deploy.task.ts"],"names":["BUILD_UI_TASK","DeployTask","constructor","application","ApplicationAspect","id","execute","context","apps","listApps","componentsResultsUi","app","aspectId","getAppAspect","name","undefined","capsules","capsuleNetwork","seedersCapsules","capsule","getCapsule","deployContext","build","publicDir","deploy","deployToProviders","component","metadata","componentsResults","flatMap","f","aspectCapsuleId","ComponentID","fromString","toStringWithoutVersion","find","providers","listProviders","provider"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAIO,MAAMA,aAAa,GAAG,sBAAtB;;;AAEA,MAAMC,UAAN,CAAsC;AAI3CC,EAAAA,WAAW,CAASC,WAAT,EAAuC;AAAA,SAA9BA,WAA8B,GAA9BA,WAA8B;AAAA,kDAH3CH,aAG2C;AAAA,sDAFvCI,iCAAkBC,EAEqB;AAAE;;AAEvC,QAAPC,OAAO,CAACC,OAAD,EAAkD;AAC7D,UAAMC,IAAI,GAAG,KAAKL,WAAL,CAAiBM,QAAjB,EAAb;AACA,UAAMC,mBAAmB,GAAG,MAAM,2BAChCF,IADgC,EAEhC,MAAOG,GAAP,IAAqD;AACnD,YAAMC,QAAQ,GAAG,KAAKT,WAAL,CAAiBU,YAAjB,CAA8BF,GAAG,CAACG,IAAlC,CAAjB;AACA,UAAI,CAACF,QAAL,EAAe,OAAOG,SAAP;AACf,YAAMC,QAAQ,GAAGT,OAAO,CAACU,cAAR,CAAuBC,eAAxC;AACA,YAAMC,OAAO,GAAG,KAAKC,UAAL,CAAgBJ,QAAhB,EAA0BJ,QAA1B,CAAhB;AACA,UAAI,CAACO,OAAL,EAAc,OAAOJ,SAAP;AACd,YAAMM,aAAa,GAAG,MAAMV,GAAG,CAACW,KAAJ,CAAUf,OAAV,EAAmBK,QAAnB,EAA6BO,OAA7B,CAA5B;AACA,UAAI,CAACE,aAAa,CAACE,SAAnB,EAA8B,OAAOR,SAAP;AAC9B,UAAIJ,GAAG,CAACa,MAAR,EAAgB,MAAMb,GAAG,CAACa,MAAJ,CAAWH,aAAX,CAAN;AAChB,YAAM,KAAKI,iBAAL,CAAuBJ,aAAvB,CAAN;AACA,aAAO;AAAEK,QAAAA,SAAS,EAAEP,OAAO,CAACO,SAArB;AAAgCC,QAAAA,QAAQ,EAAE;AAAEJ,UAAAA,SAAS,EAAEF,aAAa,CAACE;AAA3B;AAA1C,OAAP;AACD,KAb+B,CAAlC;AAgBA,WAAO;AACLK,MAAAA,iBAAiB,EAAElB,mBAAmB,CAACmB,OAApB,CAA6BC,CAAD,IAAQA,CAAC,GAAG,CAACA,CAAD,CAAH,GAAS,EAA9C;AADd,KAAP;AAGD;;AAEOV,EAAAA,UAAU,CAACJ,QAAD,EAAsBJ,QAAtB,EAAwC;AACxD,UAAMmB,eAAe,GAAGC,yBAAYC,UAAZ,CAAuBrB,QAAvB,EAAiCsB,sBAAjC,EAAxB;;AACA,WAAOlB,QAAQ,CAACmB,IAAT,CAAehB,OAAD,IAAaA,OAAO,CAACO,SAAR,CAAkBrB,EAAlB,CAAqB6B,sBAArB,OAAkDH,eAA7E,CAAP;AACD;;AAE8B,QAAjBN,iBAAiB,CAACJ,aAAD,EAA+B;AAC5D,UAAMe,SAAS,GAAG,KAAKjC,WAAL,CAAiBkC,aAAjB,EAAlB;AACA,UAAM,2BAAUD,SAAV,EAAqB,MAAOE,QAAP,IAAoBA,QAAQ,CAACd,MAAT,CAAgBH,aAAhB,CAAzC,CAAN;AACD;;AArC0C","sourcesContent":["import mapSeries from 'p-map-series';\nimport { Capsule } from '@teambit/isolator';\nimport { BuildTask, BuiltTaskResult, BuildContext, ComponentResult } from '@teambit/builder';\nimport { ComponentID } from '@teambit/component';\nimport { ApplicationAspect } from './application.aspect';\nimport { ApplicationMain } from './application.main.runtime';\nimport { DeployContext } from './deploy-context';\n\nexport const BUILD_UI_TASK = 'build_ui_application';\n\nexport class DeployTask implements BuildTask {\n name = BUILD_UI_TASK;\n aspectId = ApplicationAspect.id;\n\n constructor(private application: ApplicationMain) {}\n\n async execute(context: BuildContext): Promise<BuiltTaskResult> {\n const apps = this.application.listApps();\n const componentsResultsUi = await mapSeries(\n apps,\n async (app): Promise<ComponentResult | undefined> => {\n const aspectId = this.application.getAppAspect(app.name);\n if (!aspectId) return undefined;\n const capsules = context.capsuleNetwork.seedersCapsules;\n const capsule = this.getCapsule(capsules, aspectId);\n if (!capsule) return undefined;\n const deployContext = await app.build(context, aspectId, capsule);\n if (!deployContext.publicDir) return undefined;\n if (app.deploy) await app.deploy(deployContext);\n await this.deployToProviders(deployContext);\n return { component: capsule.component, metadata: { publicDir: deployContext.publicDir } };\n }\n );\n\n return {\n componentsResults: componentsResultsUi.flatMap((f) => (f ? [f] : [])),\n };\n }\n\n private getCapsule(capsules: Capsule[], aspectId: string) {\n const aspectCapsuleId = ComponentID.fromString(aspectId).toStringWithoutVersion();\n return capsules.find((capsule) => capsule.component.id.toStringWithoutVersion() === aspectCapsuleId);\n }\n\n private async deployToProviders(deployContext: DeployContext) {\n const providers = this.application.listProviders();\n await mapSeries(providers, async (provider) => provider.deploy(deployContext));\n }\n}\n"]}
1
+ {"version":3,"sources":["deploy.task.ts"],"names":["BUILD_UI_TASK","DeployTask","constructor","application","ApplicationAspect","id","execute","context","apps","listApps","componentsResultsUi","app","aspectId","getAppAspect","name","undefined","capsules","capsuleNetwork","seedersCapsules","capsule","getCapsule","build","deployContext","publicDir","deploy","deployToProviders","component","metadata","componentsResults","flatMap","f","aspectCapsuleId","ComponentID","fromString","toStringWithoutVersion","find","providers","listProviders","provider"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAIO,MAAMA,aAAa,GAAG,sBAAtB;;;AAEA,MAAMC,UAAN,CAAsC;AAI3CC,EAAAA,WAAW,CAASC,WAAT,EAAuC;AAAA,SAA9BA,WAA8B,GAA9BA,WAA8B;AAAA,kDAH3CH,aAG2C;AAAA,sDAFvCI,iCAAkBC,EAEqB;AAAE;;AAEvC,QAAPC,OAAO,CAACC,OAAD,EAAkD;AAC7D,UAAMC,IAAI,GAAG,KAAKL,WAAL,CAAiBM,QAAjB,EAAb;AACA,UAAMC,mBAAmB,GAAG,MAAM,2BAAUF,IAAV,EAAgB,MAAOG,GAAP,IAAqD;AACrG,YAAMC,QAAQ,GAAG,KAAKT,WAAL,CAAiBU,YAAjB,CAA8BF,GAAG,CAACG,IAAlC,CAAjB;AACA,UAAI,CAACF,QAAL,EAAe,OAAOG,SAAP;AACf,YAAMC,QAAQ,GAAGT,OAAO,CAACU,cAAR,CAAuBC,eAAxC;AACA,YAAMC,OAAO,GAAG,KAAKC,UAAL,CAAgBJ,QAAhB,EAA0BJ,QAA1B,CAAhB;AACA,UAAI,CAACO,OAAL,EAAc,OAAOJ,SAAP;AACd,UAAI,CAACJ,GAAG,CAACU,KAAT,EAAgB,OAAON,SAAP;AAChB,YAAMO,aAAa,GAAG,MAAMX,GAAG,CAACU,KAAJ,CAAUd,OAAV,EAAmBK,QAAnB,EAA6BO,OAA7B,CAA5B;AACA,UAAI,CAACG,aAAD,IAAkB,CAACA,aAAa,CAACC,SAArC,EAAgD,OAAOR,SAAP;AAChD,UAAIJ,GAAG,CAACa,MAAR,EAAgB,MAAMb,GAAG,CAACa,MAAJ,CAAWF,aAAX,CAAN;AAChB,YAAM,KAAKG,iBAAL,CAAuBH,aAAvB,CAAN;AACA,aAAO;AAAEI,QAAAA,SAAS,EAAEP,OAAO,CAACO,SAArB;AAAgCC,QAAAA,QAAQ,EAAE;AAAEJ,UAAAA,SAAS,EAAED,aAAa,CAACC;AAA3B;AAA1C,OAAP;AACD,KAZiC,CAAlC;AAcA,WAAO;AACLK,MAAAA,iBAAiB,EAAElB,mBAAmB,CAACmB,OAApB,CAA6BC,CAAD,IAAQA,CAAC,GAAG,CAACA,CAAD,CAAH,GAAS,EAA9C;AADd,KAAP;AAGD;;AAEOV,EAAAA,UAAU,CAACJ,QAAD,EAAsBJ,QAAtB,EAAwC;AACxD,UAAMmB,eAAe,GAAGC,yBAAYC,UAAZ,CAAuBrB,QAAvB,EAAiCsB,sBAAjC,EAAxB;;AACA,WAAOlB,QAAQ,CAACmB,IAAT,CAAehB,OAAD,IAAaA,OAAO,CAACO,SAAR,CAAkBrB,EAAlB,CAAqB6B,sBAArB,OAAkDH,eAA7E,CAAP;AACD;;AAE8B,QAAjBN,iBAAiB,CAACH,aAAD,EAA+B;AAC5D,UAAMc,SAAS,GAAG,KAAKjC,WAAL,CAAiBkC,aAAjB,EAAlB;AACA,UAAM,2BAAUD,SAAV,EAAqB,MAAOE,QAAP,IAAoBA,QAAQ,CAACd,MAAT,CAAgBF,aAAhB,CAAzC,CAAN;AACD;;AAnC0C","sourcesContent":["import mapSeries from 'p-map-series';\nimport { Capsule } from '@teambit/isolator';\nimport { BuildTask, BuiltTaskResult, BuildContext, ComponentResult } from '@teambit/builder';\nimport { ComponentID } from '@teambit/component';\nimport { ApplicationAspect } from './application.aspect';\nimport { ApplicationMain } from './application.main.runtime';\nimport { DeployContext } from './deploy-context';\n\nexport const BUILD_UI_TASK = 'build_ui_application';\n\nexport class DeployTask implements BuildTask {\n name = BUILD_UI_TASK;\n aspectId = ApplicationAspect.id;\n\n constructor(private application: ApplicationMain) {}\n\n async execute(context: BuildContext): Promise<BuiltTaskResult> {\n const apps = this.application.listApps();\n const componentsResultsUi = await mapSeries(apps, async (app): Promise<ComponentResult | undefined> => {\n const aspectId = this.application.getAppAspect(app.name);\n if (!aspectId) return undefined;\n const capsules = context.capsuleNetwork.seedersCapsules;\n const capsule = this.getCapsule(capsules, aspectId);\n if (!capsule) return undefined;\n if (!app.build) return undefined;\n const deployContext = await app.build(context, aspectId, capsule);\n if (!deployContext || !deployContext.publicDir) return undefined;\n if (app.deploy) await app.deploy(deployContext);\n await this.deployToProviders(deployContext);\n return { component: capsule.component, metadata: { publicDir: deployContext.publicDir } };\n });\n\n return {\n componentsResults: componentsResultsUi.flatMap((f) => (f ? [f] : [])),\n };\n }\n\n private getCapsule(capsules: Capsule[], aspectId: string) {\n const aspectCapsuleId = ComponentID.fromString(aspectId).toStringWithoutVersion();\n return capsules.find((capsule) => capsule.component.id.toStringWithoutVersion() === aspectCapsuleId);\n }\n\n private async deployToProviders(deployContext: DeployContext) {\n const providers = this.application.listProviders();\n await mapSeries(providers, async (provider) => provider.deploy(deployContext));\n }\n}\n"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/application",
3
- "version": "0.0.229",
3
+ "version": "0.0.233",
4
4
  "homepage": "https://bit.dev/teambit/harmony/application",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.harmony",
8
8
  "name": "application",
9
- "version": "0.0.229"
9
+ "version": "0.0.233"
10
10
  },
11
11
  "dependencies": {
12
12
  "chalk": "2.4.2",
@@ -16,14 +16,14 @@
16
16
  "ink": "3.0.8",
17
17
  "@babel/runtime": "7.12.18",
18
18
  "core-js": "^3.0.0",
19
- "@teambit/envs": "0.0.587",
20
- "@teambit/cli-table": "0.0.26",
21
- "@teambit/cli": "0.0.403",
22
- "@teambit/aspect-loader": "0.0.587",
23
- "@teambit/builder": "0.0.587",
24
- "@teambit/component": "0.0.587",
25
- "@teambit/logger": "0.0.491",
26
- "@teambit/isolator": "0.0.587"
19
+ "@teambit/component": "0.0.591",
20
+ "@teambit/envs": "0.0.591",
21
+ "@teambit/cli-table": "0.0.29",
22
+ "@teambit/cli": "0.0.406",
23
+ "@teambit/aspect-loader": "0.0.591",
24
+ "@teambit/builder": "0.0.591",
25
+ "@teambit/logger": "0.0.494",
26
+ "@teambit/isolator": "0.0.591"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@types/lodash": "4.14.165",
@@ -35,7 +35,7 @@
35
35
  "@types/node": "12.20.4"
36
36
  },
37
37
  "peerDependencies": {
38
- "@teambit/legacy": "1.0.189",
38
+ "@teambit/legacy": "1.0.192",
39
39
  "react-dom": "^16.8.0 || ^17.0.0",
40
40
  "react": "^16.8.0 || ^17.0.0"
41
41
  },
@@ -63,7 +63,7 @@
63
63
  "react": "-"
64
64
  },
65
65
  "peerDependencies": {
66
- "@teambit/legacy": "1.0.189",
66
+ "@teambit/legacy": "1.0.192",
67
67
  "react-dom": "^16.8.0 || ^17.0.0",
68
68
  "react": "^16.8.0 || ^17.0.0"
69
69
  }