@teambit/api-server 1.0.354 → 1.0.356

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.
@@ -26,6 +26,9 @@ export declare class ApiServerMain {
26
26
  port: number;
27
27
  compile: boolean;
28
28
  }): Promise<unknown>;
29
+ writeUsedPort(port: number): void;
30
+ getExistingUsedPort(): Promise<number | undefined>;
31
+ private getServerPortFilePath;
29
32
  static dependencies: import("@teambit/harmony").Aspect[];
30
33
  static runtime: import("@teambit/harmony").RuntimeDefinition;
31
34
  static provider([cli, workspace, loggerMain, express, watcher, snapping, lanes, installer, exporter, checkout, componentLog, importer, componentCompare, generator, remove, config,]: [
@@ -11,6 +11,13 @@ function _cli() {
11
11
  };
12
12
  return data;
13
13
  }
14
+ function _fsExtra() {
15
+ const data = _interopRequireDefault(require("fs-extra"));
16
+ _fsExtra = function () {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
14
21
  function _express() {
15
22
  const data = require("@teambit/express");
16
23
  _express = function () {
@@ -116,6 +123,13 @@ function _workspace() {
116
123
  };
117
124
  return data;
118
125
  }
126
+ function _harmonyModules() {
127
+ const data = require("@teambit/harmony.modules.send-server-sent-events");
128
+ _harmonyModules = function () {
129
+ return data;
130
+ };
131
+ return data;
132
+ }
119
133
  function _cors() {
120
134
  const data = _interopRequireDefault(require("cors"));
121
135
  _cors = function () {
@@ -172,6 +186,13 @@ function _sseEvents() {
172
186
  };
173
187
  return data;
174
188
  }
189
+ function _path() {
190
+ const data = require("path");
191
+ _path = function () {
192
+ return data;
193
+ };
194
+ return data;
195
+ }
175
196
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
176
197
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
177
198
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
@@ -190,7 +211,7 @@ class ApiServerMain {
190
211
  throw new Error(`unable to run bit-server, the current directory ${process.cwd()} is not a workspace`);
191
212
  }
192
213
  this.workspace.registerOnComponentChange(async (component, files, removedFiles) => {
193
- (0, _sseEvents().sendEventsToClients)('onComponentChange', {
214
+ (0, _harmonyModules().sendEventsToClients)('onComponentChange', {
194
215
  id: component.id.toStringWithoutVersion(),
195
216
  files,
196
217
  removedFiles
@@ -204,13 +225,13 @@ class ApiServerMain {
204
225
  this.logger.debug(`running import because we assume the .bitmap file has changed due to "git pull", last time it was modified by bit was ${secondsPassedSinceLastModified} seconds ago`);
205
226
  await this.importer.importCurrentObjects();
206
227
  }
207
- (0, _sseEvents().sendEventsToClients)('onBitmapChange', {});
228
+ (0, _harmonyModules().sendEventsToClients)('onBitmapChange', {});
208
229
  });
209
230
  this.workspace.registerOnWorkspaceConfigChange(async () => {
210
- (0, _sseEvents().sendEventsToClients)('onWorkspaceConfigChange', {});
231
+ (0, _harmonyModules().sendEventsToClients)('onWorkspaceConfigChange', {});
211
232
  });
212
233
  this.installer.registerPostInstall(async () => {
213
- (0, _sseEvents().sendEventsToClients)('onPostInstall', {});
234
+ (0, _harmonyModules().sendEventsToClients)('onPostInstall', {});
214
235
  });
215
236
  this.watcher.watch({
216
237
  preCompile: false,
@@ -253,10 +274,30 @@ class ApiServerMain {
253
274
  });
254
275
  server.on('listening', () => {
255
276
  this.logger.consoleSuccess(`Bit Server is listening on port ${port}`);
256
- resolve(true);
277
+ this.writeUsedPort(port);
278
+ resolve(port);
257
279
  });
258
280
  });
259
281
  }
282
+ writeUsedPort(port) {
283
+ const filePath = this.getServerPortFilePath();
284
+ _fsExtra().default.writeFileSync(filePath, port.toString());
285
+ }
286
+ async getExistingUsedPort() {
287
+ const filePath = this.getServerPortFilePath();
288
+ try {
289
+ const fileContent = await _fsExtra().default.readFile(filePath, 'utf8');
290
+ return parseInt(fileContent, 10);
291
+ } catch (err) {
292
+ if (err.code === 'ENOENT') {
293
+ return undefined;
294
+ }
295
+ throw err;
296
+ }
297
+ }
298
+ getServerPortFilePath() {
299
+ return (0, _path().join)(this.workspace.scope.path, 'server-port.txt');
300
+ }
260
301
  static async provider([cli, workspace, loggerMain, express, watcher, snapping, lanes, installer, exporter, checkout, componentLog, importer, componentCompare, generator, remove, config]) {
261
302
  const logger = loggerMain.createLogger(_apiServer().ApiServerAspect.id);
262
303
  const apiServer = new ApiServerMain(workspace, logger, express, watcher, installer, importer);
@@ -1 +1 @@
1
- {"version":3,"names":["_cli","data","require","_express","_logger","_lanes","_remove","_snapping","_generator","_componentCompare","_componentLog","_watcher","_config","_export","_checkout","_install","_importer","_workspace","_cors","_interopRequireDefault","_httpProxyMiddleware","_apiServer","_cli2","_server","_ide","_apiForIde","_sseEvents","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ApiServerMain","constructor","workspace","logger","express","watcher","installer","importer","runApiServer","options","Error","process","cwd","registerOnComponentChange","component","files","removedFiles","sendEventsToClients","id","toStringWithoutVersion","registerOnBitmapChange","lastModifiedTimestamp","bitMap","getLastModifiedBitmapThroughBit","secondsPassedSinceLastModified","Date","now","debug","importCurrentObjects","registerOnWorkspaceConfigChange","registerPostInstall","watch","preCompile","compile","catch","err","error","port","app","createApp","use","cors","origin","callback","credentials","createProxyMiddleware","target","changeOrigin","on","req","res","writeHead","end","proxyReq","fixRequestBody","server","listen","Promise","resolve","reject","consoleSuccess","provider","cli","loggerMain","snapping","lanes","exporter","checkout","componentLog","componentCompare","generator","remove","config","createLogger","ApiServerAspect","apiServer","register","ServerCmd","apiForIDE","APIForIDE","cliRoute","CLIRoute","vscodeRoute","IDERoute","sseEventsRoute","SSEEventsRoute","exports","CLIAspect","WorkspaceAspect","LoggerAspect","ExpressAspect","WatcherAspect","SnappingAspect","LanesAspect","InstallAspect","ExportAspect","CheckoutAspect","ComponentLogAspect","ImporterAspect","ComponentCompareAspect","GeneratorAspect","RemoveAspect","ConfigAspect","MainRuntime","addRuntime","_default"],"sources":["api-server.main.runtime.ts"],"sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { ExpressAspect, ExpressMain } from '@teambit/express';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport { LanesAspect, LanesMain } from '@teambit/lanes';\nimport { RemoveAspect, RemoveMain } from '@teambit/remove';\nimport { SnappingAspect, SnappingMain } from '@teambit/snapping';\nimport { GeneratorAspect, GeneratorMain } from '@teambit/generator';\nimport { ComponentCompareAspect, ComponentCompareMain } from '@teambit/component-compare';\nimport { ComponentLogAspect, ComponentLogMain } from '@teambit/component-log';\nimport { WatcherAspect, WatcherMain } from '@teambit/watcher';\nimport { ConfigAspect, ConfigMain } from '@teambit/config';\nimport { ExportAspect, ExportMain } from '@teambit/export';\nimport { CheckoutAspect, CheckoutMain } from '@teambit/checkout';\nimport { InstallAspect, InstallMain } from '@teambit/install';\nimport { ImporterAspect, ImporterMain } from '@teambit/importer';\nimport { Component } from '@teambit/component';\nimport { WorkspaceAspect, Workspace } from '@teambit/workspace';\nimport cors from 'cors';\nimport { createProxyMiddleware, fixRequestBody } from 'http-proxy-middleware';\nimport { ApiServerAspect } from './api-server.aspect';\nimport { CLIRoute } from './cli.route';\nimport { ServerCmd } from './server.cmd';\nimport { IDERoute } from './ide.route';\nimport { APIForIDE } from './api-for-ide';\nimport { SSEEventsRoute, sendEventsToClients } from './sse-events.route';\n\nexport class ApiServerMain {\n constructor(\n private workspace: Workspace,\n private logger: Logger,\n private express: ExpressMain,\n private watcher: WatcherMain,\n private installer: InstallMain,\n private importer: ImporterMain\n ) {}\n\n async runApiServer(options: { port: number; compile: boolean }) {\n if (!this.workspace) {\n throw new Error(`unable to run bit-server, the current directory ${process.cwd()} is not a workspace`);\n }\n\n this.workspace.registerOnComponentChange(\n async (\n component: Component,\n files: string[], // os absolute paths\n removedFiles?: string[] // os absolute paths\n ) => {\n sendEventsToClients('onComponentChange', {\n id: component.id.toStringWithoutVersion(),\n files,\n removedFiles,\n });\n }\n );\n\n this.workspace.registerOnBitmapChange(async () => {\n const lastModifiedTimestamp = await this.workspace.bitMap.getLastModifiedBitmapThroughBit();\n const secondsPassedSinceLastModified = lastModifiedTimestamp && (Date.now() - lastModifiedTimestamp) / 1000;\n if (secondsPassedSinceLastModified && secondsPassedSinceLastModified > 1) {\n // changes by bit were done more than a second ago, so probably this .bitmap change was done by \"git pull\"\n this.logger.debug(\n `running import because we assume the .bitmap file has changed due to \"git pull\", last time it was modified by bit was ${secondsPassedSinceLastModified} seconds ago`\n );\n await this.importer.importCurrentObjects();\n }\n sendEventsToClients('onBitmapChange', {});\n });\n\n this.workspace.registerOnWorkspaceConfigChange(async () => {\n sendEventsToClients('onWorkspaceConfigChange', {});\n });\n\n this.installer.registerPostInstall(async () => {\n sendEventsToClients('onPostInstall', {});\n });\n\n this.watcher\n .watch({\n preCompile: false,\n compile: options.compile,\n })\n .catch((err) => {\n // don't throw an error, we don't want to break the \"run\" process\n this.logger.error('watcher found an error', err);\n });\n\n const port = options.port || 3000;\n\n const app = this.express.createApp();\n\n app.use(\n // @ts-ignore todo: it's not clear what's the issue.\n cors({\n origin(origin, callback) {\n callback(null, true);\n },\n credentials: true,\n })\n );\n app.use(\n '/api/cloud-graphql',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n createProxyMiddleware({\n target: 'https://api.main.lanes.bit.cloud/graphql',\n changeOrigin: true,\n on: {\n error: (err, req, res) => {\n this.logger.error('graphql cloud proxy error', err);\n // @ts-ignore\n res.writeHead(500, {\n 'Content-Type': 'text/plain',\n });\n res.end('Something went wrong with the proxy server of bit cloud graphql');\n },\n proxyReq: fixRequestBody,\n },\n })\n );\n\n const server = await app.listen(port);\n\n return new Promise((resolve, reject) => {\n server.on('error', (err) => {\n reject(err);\n });\n server.on('listening', () => {\n this.logger.consoleSuccess(`Bit Server is listening on port ${port}`);\n resolve(true);\n });\n });\n }\n\n static dependencies = [\n CLIAspect,\n WorkspaceAspect,\n LoggerAspect,\n ExpressAspect,\n WatcherAspect,\n SnappingAspect,\n LanesAspect,\n InstallAspect,\n ExportAspect,\n CheckoutAspect,\n ComponentLogAspect,\n ImporterAspect,\n ComponentCompareAspect,\n GeneratorAspect,\n RemoveAspect,\n ConfigAspect,\n ];\n static runtime = MainRuntime;\n static async provider([\n cli,\n workspace,\n loggerMain,\n express,\n watcher,\n snapping,\n lanes,\n installer,\n exporter,\n checkout,\n componentLog,\n importer,\n componentCompare,\n generator,\n remove,\n config,\n ]: [\n CLIMain,\n Workspace,\n LoggerMain,\n ExpressMain,\n WatcherMain,\n SnappingMain,\n LanesMain,\n InstallMain,\n ExportMain,\n CheckoutMain,\n ComponentLogMain,\n ImporterMain,\n ComponentCompareMain,\n GeneratorMain,\n RemoveMain,\n ConfigMain\n ]) {\n const logger = loggerMain.createLogger(ApiServerAspect.id);\n const apiServer = new ApiServerMain(workspace, logger, express, watcher, installer, importer);\n cli.register(new ServerCmd(apiServer));\n\n const apiForIDE = new APIForIDE(\n workspace,\n snapping,\n lanes,\n installer,\n exporter,\n checkout,\n componentLog,\n componentCompare,\n generator,\n remove,\n config\n );\n const cliRoute = new CLIRoute(logger, cli, apiForIDE);\n const vscodeRoute = new IDERoute(logger, apiForIDE);\n const sseEventsRoute = new SSEEventsRoute(logger, cli);\n // register only when the workspace is available. don't register this on a remote-scope, for security reasons.\n if (workspace) {\n express.register([cliRoute, vscodeRoute, sseEventsRoute]);\n }\n\n return apiServer;\n }\n}\n\nApiServerAspect.addRuntime(ApiServerMain);\n\nexport default ApiServerMain;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_cli","data","require","_fsExtra","_interopRequireDefault","_express","_logger","_lanes","_remove","_snapping","_generator","_componentCompare","_componentLog","_watcher","_config","_export","_checkout","_install","_importer","_workspace","_harmonyModules","_cors","_httpProxyMiddleware","_apiServer","_cli2","_server","_ide","_apiForIde","_sseEvents","_path","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ApiServerMain","constructor","workspace","logger","express","watcher","installer","importer","runApiServer","options","Error","process","cwd","registerOnComponentChange","component","files","removedFiles","sendEventsToClients","id","toStringWithoutVersion","registerOnBitmapChange","lastModifiedTimestamp","bitMap","getLastModifiedBitmapThroughBit","secondsPassedSinceLastModified","Date","now","debug","importCurrentObjects","registerOnWorkspaceConfigChange","registerPostInstall","watch","preCompile","compile","catch","err","error","port","app","createApp","use","cors","origin","callback","credentials","createProxyMiddleware","target","changeOrigin","on","req","res","writeHead","end","proxyReq","fixRequestBody","server","listen","Promise","resolve","reject","consoleSuccess","writeUsedPort","filePath","getServerPortFilePath","fs","writeFileSync","toString","getExistingUsedPort","fileContent","readFile","parseInt","code","undefined","join","scope","path","provider","cli","loggerMain","snapping","lanes","exporter","checkout","componentLog","componentCompare","generator","remove","config","createLogger","ApiServerAspect","apiServer","register","ServerCmd","apiForIDE","APIForIDE","cliRoute","CLIRoute","vscodeRoute","IDERoute","sseEventsRoute","SSEEventsRoute","exports","CLIAspect","WorkspaceAspect","LoggerAspect","ExpressAspect","WatcherAspect","SnappingAspect","LanesAspect","InstallAspect","ExportAspect","CheckoutAspect","ComponentLogAspect","ImporterAspect","ComponentCompareAspect","GeneratorAspect","RemoveAspect","ConfigAspect","MainRuntime","addRuntime","_default"],"sources":["api-server.main.runtime.ts"],"sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport fs from 'fs-extra';\nimport { ExpressAspect, ExpressMain } from '@teambit/express';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport { LanesAspect, LanesMain } from '@teambit/lanes';\nimport { RemoveAspect, RemoveMain } from '@teambit/remove';\nimport { SnappingAspect, SnappingMain } from '@teambit/snapping';\nimport { GeneratorAspect, GeneratorMain } from '@teambit/generator';\nimport { ComponentCompareAspect, ComponentCompareMain } from '@teambit/component-compare';\nimport { ComponentLogAspect, ComponentLogMain } from '@teambit/component-log';\nimport { WatcherAspect, WatcherMain } from '@teambit/watcher';\nimport { ConfigAspect, ConfigMain } from '@teambit/config';\nimport { ExportAspect, ExportMain } from '@teambit/export';\nimport { CheckoutAspect, CheckoutMain } from '@teambit/checkout';\nimport { InstallAspect, InstallMain } from '@teambit/install';\nimport { ImporterAspect, ImporterMain } from '@teambit/importer';\nimport { Component } from '@teambit/component';\nimport { WorkspaceAspect, Workspace } from '@teambit/workspace';\nimport { sendEventsToClients } from '@teambit/harmony.modules.send-server-sent-events';\nimport cors from 'cors';\nimport { createProxyMiddleware, fixRequestBody } from 'http-proxy-middleware';\nimport { ApiServerAspect } from './api-server.aspect';\nimport { CLIRoute } from './cli.route';\nimport { ServerCmd } from './server.cmd';\nimport { IDERoute } from './ide.route';\nimport { APIForIDE } from './api-for-ide';\nimport { SSEEventsRoute } from './sse-events.route';\nimport { join } from 'path';\n\nexport class ApiServerMain {\n constructor(\n private workspace: Workspace,\n private logger: Logger,\n private express: ExpressMain,\n private watcher: WatcherMain,\n private installer: InstallMain,\n private importer: ImporterMain\n ) {}\n\n async runApiServer(options: { port: number; compile: boolean }) {\n if (!this.workspace) {\n throw new Error(`unable to run bit-server, the current directory ${process.cwd()} is not a workspace`);\n }\n\n this.workspace.registerOnComponentChange(\n async (\n component: Component,\n files: string[], // os absolute paths\n removedFiles?: string[] // os absolute paths\n ) => {\n sendEventsToClients('onComponentChange', {\n id: component.id.toStringWithoutVersion(),\n files,\n removedFiles,\n });\n }\n );\n\n this.workspace.registerOnBitmapChange(async () => {\n const lastModifiedTimestamp = await this.workspace.bitMap.getLastModifiedBitmapThroughBit();\n const secondsPassedSinceLastModified = lastModifiedTimestamp && (Date.now() - lastModifiedTimestamp) / 1000;\n if (secondsPassedSinceLastModified && secondsPassedSinceLastModified > 1) {\n // changes by bit were done more than a second ago, so probably this .bitmap change was done by \"git pull\"\n this.logger.debug(\n `running import because we assume the .bitmap file has changed due to \"git pull\", last time it was modified by bit was ${secondsPassedSinceLastModified} seconds ago`\n );\n await this.importer.importCurrentObjects();\n }\n sendEventsToClients('onBitmapChange', {});\n });\n\n this.workspace.registerOnWorkspaceConfigChange(async () => {\n sendEventsToClients('onWorkspaceConfigChange', {});\n });\n\n this.installer.registerPostInstall(async () => {\n sendEventsToClients('onPostInstall', {});\n });\n\n this.watcher\n .watch({\n preCompile: false,\n compile: options.compile,\n })\n .catch((err) => {\n // don't throw an error, we don't want to break the \"run\" process\n this.logger.error('watcher found an error', err);\n });\n\n const port = options.port || 3000;\n\n const app = this.express.createApp();\n\n app.use(\n // @ts-ignore todo: it's not clear what's the issue.\n cors({\n origin(origin, callback) {\n callback(null, true);\n },\n credentials: true,\n })\n );\n app.use(\n '/api/cloud-graphql',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n createProxyMiddleware({\n target: 'https://api.main.lanes.bit.cloud/graphql',\n changeOrigin: true,\n on: {\n error: (err, req, res) => {\n this.logger.error('graphql cloud proxy error', err);\n // @ts-ignore\n res.writeHead(500, {\n 'Content-Type': 'text/plain',\n });\n res.end('Something went wrong with the proxy server of bit cloud graphql');\n },\n proxyReq: fixRequestBody,\n },\n })\n );\n\n const server = await app.listen(port);\n\n return new Promise((resolve, reject) => {\n server.on('error', (err) => {\n reject(err);\n });\n server.on('listening', () => {\n this.logger.consoleSuccess(`Bit Server is listening on port ${port}`);\n this.writeUsedPort(port);\n resolve(port);\n });\n });\n }\n\n writeUsedPort(port: number) {\n const filePath = this.getServerPortFilePath();\n fs.writeFileSync(filePath, port.toString());\n }\n\n async getExistingUsedPort(): Promise<number | undefined> {\n const filePath = this.getServerPortFilePath();\n try {\n const fileContent = await fs.readFile(filePath, 'utf8');\n return parseInt(fileContent, 10);\n } catch (err: any) {\n if (err.code === 'ENOENT') {\n return undefined;\n }\n throw err;\n }\n }\n\n private getServerPortFilePath() {\n return join(this.workspace.scope.path, 'server-port.txt');\n }\n\n static dependencies = [\n CLIAspect,\n WorkspaceAspect,\n LoggerAspect,\n ExpressAspect,\n WatcherAspect,\n SnappingAspect,\n LanesAspect,\n InstallAspect,\n ExportAspect,\n CheckoutAspect,\n ComponentLogAspect,\n ImporterAspect,\n ComponentCompareAspect,\n GeneratorAspect,\n RemoveAspect,\n ConfigAspect,\n ];\n static runtime = MainRuntime;\n static async provider([\n cli,\n workspace,\n loggerMain,\n express,\n watcher,\n snapping,\n lanes,\n installer,\n exporter,\n checkout,\n componentLog,\n importer,\n componentCompare,\n generator,\n remove,\n config,\n ]: [\n CLIMain,\n Workspace,\n LoggerMain,\n ExpressMain,\n WatcherMain,\n SnappingMain,\n LanesMain,\n InstallMain,\n ExportMain,\n CheckoutMain,\n ComponentLogMain,\n ImporterMain,\n ComponentCompareMain,\n GeneratorMain,\n RemoveMain,\n ConfigMain\n ]) {\n const logger = loggerMain.createLogger(ApiServerAspect.id);\n const apiServer = new ApiServerMain(workspace, logger, express, watcher, installer, importer);\n cli.register(new ServerCmd(apiServer));\n\n const apiForIDE = new APIForIDE(\n workspace,\n snapping,\n lanes,\n installer,\n exporter,\n checkout,\n componentLog,\n componentCompare,\n generator,\n remove,\n config\n );\n const cliRoute = new CLIRoute(logger, cli, apiForIDE);\n const vscodeRoute = new IDERoute(logger, apiForIDE);\n const sseEventsRoute = new SSEEventsRoute(logger, cli);\n // register only when the workspace is available. don't register this on a remote-scope, for security reasons.\n if (workspace) {\n express.register([cliRoute, vscodeRoute, sseEventsRoute]);\n }\n\n return apiServer;\n }\n}\n\nApiServerAspect.addRuntime(ApiServerMain);\n\nexport default ApiServerMain;\n"],"mappings":"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","ignoreList":[]}
package/dist/cli.route.js CHANGED
@@ -11,6 +11,13 @@ function _prettyTime() {
11
11
  };
12
12
  return data;
13
13
  }
14
+ function _chalk() {
15
+ const data = _interopRequireDefault(require("chalk"));
16
+ _chalk = function () {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
14
21
  function _lodash() {
15
22
  const data = require("lodash");
16
23
  _lodash = function () {
@@ -51,7 +58,8 @@ class CLIRoute {
51
58
  const {
52
59
  args,
53
60
  options,
54
- format
61
+ format,
62
+ isTerminal
55
63
  } = body;
56
64
  if (format && format !== 'json' && format !== 'report') throw new Error(`format "${format}" is not supported`);
57
65
  const outputMethod = format || 'json';
@@ -60,7 +68,7 @@ class CLIRoute {
60
68
  const argsStr = args ? ` ${args.join(' ')}` : '';
61
69
  const optsStr = optsToString ? ` ${optsToString}` : '';
62
70
  const cmdStr = req.params.cmd + argsStr + optsStr;
63
- this.logger.console(`[*] started a new ${outputMethod} command: ${cmdStr}`);
71
+ if (!isTerminal) this.logger.console(`[*] started a new ${outputMethod} command: ${cmdStr}`);
64
72
  const randomNumber = Math.floor(Math.random() * 10000); // helps to distinguish between commands in the log
65
73
  cmdStrLog = `${randomNumber} ${cmdStr}`;
66
74
  await this.apiForIDE.logStartCmdHistory(cmdStrLog);
@@ -70,11 +78,21 @@ class CLIRoute {
70
78
  return acc;
71
79
  }, {});
72
80
  const startTask = process.hrtime();
81
+ // because this gets called from the express server, which gets spawn from a script, chalk defaults to false.
82
+ // changing only the "level" is not enough, it must be enabled as well.
83
+ // only when calling this route from the terminal, we want colors. on the IDE, we don't want colors.
84
+ if (isTerminal) {
85
+ _chalk().default.enabled = true;
86
+ _chalk().default.level = 3;
87
+ }
73
88
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
74
89
  const result = await command[outputMethod](args || [], optionsAsCamelCase);
90
+ this.logger.clearStatusLine();
75
91
  const duration = (0, _prettyTime().default)(process.hrtime(startTask));
76
- this.logger.consoleSuccess(`command "${req.params.cmd}" had been completed in ${duration}`);
92
+ if (!isTerminal) this.logger.consoleSuccess(`command "${req.params.cmd}" had been completed in ${duration}`);
77
93
  await this.apiForIDE.logFinishCmdHistory(cmdStrLog, 0);
94
+ // change chalk back to false, otherwise, the IDE will have colors. (this is a global setting)
95
+ _chalk().default.enabled = false;
78
96
  if (outputMethod === 'json') {
79
97
  res.json(result);
80
98
  } else {
@@ -89,6 +107,7 @@ class CLIRoute {
89
107
  this.logger.error(`command "${req.params.cmd}" had failed`, err);
90
108
  this.logger.consoleFailure(`command "${req.params.cmd}" had failed. ${err.message}`);
91
109
  if (cmdStrLog) await this.apiForIDE.logFinishCmdHistory(cmdStrLog, 1);
110
+ _chalk().default.enabled = false;
92
111
  res.status(500);
93
112
  res.jsonp({
94
113
  message: err.message,
@@ -1 +1 @@
1
- {"version":3,"names":["_prettyTime","data","_interopRequireDefault","require","_lodash","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","CLIRoute","constructor","logger","cli","apiForIDE","req","res","debug","params","cmd","cmdStrLog","command","getCommand","Error","body","args","options","format","outputMethod","optsToString","keys","map","key","join","argsStr","optsStr","cmdStr","console","randomNumber","Math","floor","random","logStartCmdHistory","optionsAsCamelCase","reduce","acc","camelCaseKey","camelCase","startTask","process","hrtime","result","duration","prettyTime","consoleSuccess","logFinishCmdHistory","json","exitCode","code","err","error","consoleFailure","message","status","jsonp","exports"],"sources":["cli.route.ts"],"sourcesContent":["import { CLIMain } from '@teambit/cli';\nimport prettyTime from 'pretty-time';\nimport { Route, Request, Response } from '@teambit/express';\nimport { Logger } from '@teambit/logger';\nimport { camelCase } from 'lodash';\nimport { APIForIDE } from './api-for-ide';\n\n/**\n * example usage:\n * post to http://localhost:3000/api/cli/list\n * with the following json as the body\n *\n{\n \"args\": [\"teambit.workspace\"],\n \"options\": {\n \"ids\": true\n }\n}\n */\nexport class CLIRoute implements Route {\n constructor(private logger: Logger, private cli: CLIMain, private apiForIDE: APIForIDE) {}\n\n method = 'post';\n route = '/cli/:cmd';\n\n middlewares = [\n async (req: Request, res: Response) => {\n this.logger.debug(`cli server: got request for ${req.params.cmd}`);\n let cmdStrLog: string | undefined;\n try {\n const command = this.cli.getCommand(req.params.cmd);\n if (!command) throw new Error(`command \"${req.params.cmd}\" was not found`);\n const body = req.body;\n const { args, options, format } = body;\n if (format && format !== 'json' && format !== 'report') throw new Error(`format \"${format}\" is not supported`);\n const outputMethod: 'json' | 'report' = format || 'json';\n if (!command[outputMethod])\n throw new Error(`command \"${req.params.cmd}\" does not have a ${outputMethod} method`);\n const optsToString = Object.keys(options || {})\n .map((key) => `--${key}`)\n .join(' ');\n const argsStr = args ? ` ${args.join(' ')}` : '';\n const optsStr = optsToString ? ` ${optsToString}` : '';\n const cmdStr = req.params.cmd + argsStr + optsStr;\n this.logger.console(`[*] started a new ${outputMethod} command: ${cmdStr}`);\n const randomNumber = Math.floor(Math.random() * 10000); // helps to distinguish between commands in the log\n cmdStrLog = `${randomNumber} ${cmdStr}`;\n await this.apiForIDE.logStartCmdHistory(cmdStrLog);\n const optionsAsCamelCase = Object.keys(options || {}).reduce((acc, key) => {\n const camelCaseKey = camelCase(key);\n acc[camelCaseKey] = options[key];\n return acc;\n }, {});\n const startTask = process.hrtime();\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const result = await command[outputMethod]!(args || [], optionsAsCamelCase);\n const duration = prettyTime(process.hrtime(startTask));\n this.logger.consoleSuccess(`command \"${req.params.cmd}\" had been completed in ${duration}`);\n await this.apiForIDE.logFinishCmdHistory(cmdStrLog, 0);\n if (outputMethod === 'json') {\n res.json(result);\n } else {\n const data = typeof result === 'string' ? result : result.data;\n const exitCode = typeof result === 'string' ? 0 : result.code;\n res.json({ data, exitCode });\n }\n } catch (err: any) {\n this.logger.error(`command \"${req.params.cmd}\" had failed`, err);\n this.logger.consoleFailure(`command \"${req.params.cmd}\" had failed. ${err.message}`);\n if (cmdStrLog) await this.apiForIDE.logFinishCmdHistory(cmdStrLog, 1);\n res.status(500);\n res.jsonp({\n message: err.message,\n error: err,\n });\n }\n },\n ];\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_prettyTime","data","_interopRequireDefault","require","_chalk","_lodash","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","CLIRoute","constructor","logger","cli","apiForIDE","req","res","debug","params","cmd","cmdStrLog","command","getCommand","Error","body","args","options","format","isTerminal","outputMethod","optsToString","keys","map","key","join","argsStr","optsStr","cmdStr","console","randomNumber","Math","floor","random","logStartCmdHistory","optionsAsCamelCase","reduce","acc","camelCaseKey","camelCase","startTask","process","hrtime","chalk","enabled","level","result","clearStatusLine","duration","prettyTime","consoleSuccess","logFinishCmdHistory","json","exitCode","code","err","error","consoleFailure","message","status","jsonp","exports"],"sources":["cli.route.ts"],"sourcesContent":["import { CLIMain } from '@teambit/cli';\nimport prettyTime from 'pretty-time';\nimport chalk from 'chalk';\nimport { Route, Request, Response } from '@teambit/express';\nimport { Logger } from '@teambit/logger';\nimport { camelCase } from 'lodash';\nimport { APIForIDE } from './api-for-ide';\n\n/**\n * example usage:\n * post to http://localhost:3000/api/cli/list\n * with the following json as the body\n *\n{\n \"args\": [\"teambit.workspace\"],\n \"options\": {\n \"ids\": true\n }\n}\n */\nexport class CLIRoute implements Route {\n constructor(private logger: Logger, private cli: CLIMain, private apiForIDE: APIForIDE) {}\n\n method = 'post';\n route = '/cli/:cmd';\n\n middlewares = [\n async (req: Request, res: Response) => {\n this.logger.debug(`cli server: got request for ${req.params.cmd}`);\n let cmdStrLog: string | undefined;\n try {\n const command = this.cli.getCommand(req.params.cmd);\n if (!command) throw new Error(`command \"${req.params.cmd}\" was not found`);\n const body = req.body;\n const { args, options, format, isTerminal } = body;\n if (format && format !== 'json' && format !== 'report') throw new Error(`format \"${format}\" is not supported`);\n const outputMethod: 'json' | 'report' = format || 'json';\n if (!command[outputMethod])\n throw new Error(`command \"${req.params.cmd}\" does not have a ${outputMethod} method`);\n const optsToString = Object.keys(options || {})\n .map((key) => `--${key}`)\n .join(' ');\n const argsStr = args ? ` ${args.join(' ')}` : '';\n const optsStr = optsToString ? ` ${optsToString}` : '';\n const cmdStr = req.params.cmd + argsStr + optsStr;\n if (!isTerminal) this.logger.console(`[*] started a new ${outputMethod} command: ${cmdStr}`);\n const randomNumber = Math.floor(Math.random() * 10000); // helps to distinguish between commands in the log\n cmdStrLog = `${randomNumber} ${cmdStr}`;\n await this.apiForIDE.logStartCmdHistory(cmdStrLog);\n const optionsAsCamelCase = Object.keys(options || {}).reduce((acc, key) => {\n const camelCaseKey = camelCase(key);\n acc[camelCaseKey] = options[key];\n return acc;\n }, {});\n const startTask = process.hrtime();\n // because this gets called from the express server, which gets spawn from a script, chalk defaults to false.\n // changing only the \"level\" is not enough, it must be enabled as well.\n // only when calling this route from the terminal, we want colors. on the IDE, we don't want colors.\n if (isTerminal) {\n chalk.enabled = true;\n chalk.level = 3;\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const result = await command[outputMethod]!(args || [], optionsAsCamelCase);\n this.logger.clearStatusLine();\n const duration = prettyTime(process.hrtime(startTask));\n if (!isTerminal) this.logger.consoleSuccess(`command \"${req.params.cmd}\" had been completed in ${duration}`);\n await this.apiForIDE.logFinishCmdHistory(cmdStrLog, 0);\n // change chalk back to false, otherwise, the IDE will have colors. (this is a global setting)\n chalk.enabled = false;\n if (outputMethod === 'json') {\n res.json(result);\n } else {\n const data = typeof result === 'string' ? result : result.data;\n const exitCode = typeof result === 'string' ? 0 : result.code;\n res.json({ data, exitCode });\n }\n } catch (err: any) {\n this.logger.error(`command \"${req.params.cmd}\" had failed`, err);\n this.logger.consoleFailure(`command \"${req.params.cmd}\" had failed. ${err.message}`);\n if (cmdStrLog) await this.apiForIDE.logFinishCmdHistory(cmdStrLog, 1);\n chalk.enabled = false;\n res.status(500);\n res.jsonp({\n message: err.message,\n error: err,\n });\n }\n },\n ];\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,6 @@
1
1
  import { CLIMain } from '@teambit/cli';
2
2
  import { Route, Request, Response } from '@teambit/express';
3
3
  import { Logger } from '@teambit/logger';
4
- type EventName = 'onComponentChange' | 'onBitmapChange' | 'onWorkspaceConfigChange' | 'onPostInstall';
5
- export declare function sendEventsToClients(eventName: EventName, data: any): void;
6
4
  /**
7
5
  * Server-Sent Events (SSE).
8
6
  */
@@ -14,4 +12,3 @@ export declare class SSEEventsRoute implements Route {
14
12
  route: string;
15
13
  middlewares: ((request: Request, response: Response) => Promise<void>)[];
16
14
  }
17
- export {};
@@ -4,15 +4,16 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.SSEEventsRoute = void 0;
7
- exports.sendEventsToClients = sendEventsToClients;
7
+ function _harmonyModules() {
8
+ const data = require("@teambit/harmony.modules.send-server-sent-events");
9
+ _harmonyModules = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
8
14
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
9
15
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
10
16
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
11
- let clients = [];
12
- function sendEventsToClients(eventName, data) {
13
- clients.forEach(client => client.response.write(`event:${eventName}\ndata: ${JSON.stringify(data)}\n\n`));
14
- }
15
-
16
17
  /**
17
18
  * Server-Sent Events (SSE).
18
19
  */
@@ -35,10 +36,10 @@ class SSEEventsRoute {
35
36
  id: clientId,
36
37
  response
37
38
  };
38
- clients.push(newClient);
39
+ (0, _harmonyModules().addClient)(newClient);
39
40
  request.on('close', () => {
40
41
  this.logger.debug(`${clientId} SSE Connection closed`);
41
- clients = clients.filter(client => client.id !== clientId);
42
+ (0, _harmonyModules().removeClient)(newClient);
42
43
  });
43
44
  }]);
44
45
  }
@@ -1 +1 @@
1
- {"version":3,"names":["clients","sendEventsToClients","eventName","data","forEach","client","response","write","JSON","stringify","SSEEventsRoute","constructor","logger","cli","_defineProperty","request","debug","params","headers","Connection","writeHead","clientId","Date","now","newClient","id","push","on","filter","exports"],"sources":["sse-events.route.ts"],"sourcesContent":["import { CLIMain } from '@teambit/cli';\nimport { Route, Request, Response } from '@teambit/express';\nimport { Logger } from '@teambit/logger';\n\ntype CLIENT = {\n id: number;\n response: Response;\n};\n\nlet clients: CLIENT[] = [];\n\ntype EventName = 'onComponentChange' | 'onBitmapChange' | 'onWorkspaceConfigChange' | 'onPostInstall';\n\nexport function sendEventsToClients(eventName: EventName, data: any) {\n clients.forEach((client) => client.response.write(`event:${eventName}\\ndata: ${JSON.stringify(data)}\\n\\n`));\n}\n\n/**\n * Server-Sent Events (SSE).\n */\nexport class SSEEventsRoute implements Route {\n constructor(private logger: Logger, private cli: CLIMain) {}\n\n method = 'get';\n route = '/sse-events';\n\n middlewares = [\n async (request: Request, response: Response) => {\n this.logger.debug(`sse-events: got request for ${request.params}`);\n const headers = {\n 'Content-Type': 'text/event-stream',\n Connection: 'keep-alive',\n 'Cache-Control': 'no-cache',\n };\n response.writeHead(200, headers);\n\n const clientId = Date.now();\n\n const newClient = {\n id: clientId,\n response,\n };\n\n clients.push(newClient);\n\n request.on('close', () => {\n this.logger.debug(`${clientId} SSE Connection closed`);\n clients = clients.filter((client) => client.id !== clientId);\n });\n },\n ];\n}\n"],"mappings":";;;;;;;;;;AASA,IAAIA,OAAiB,GAAG,EAAE;AAInB,SAASC,mBAAmBA,CAACC,SAAoB,EAAEC,IAAS,EAAE;EACnEH,OAAO,CAACI,OAAO,CAAEC,MAAM,IAAKA,MAAM,CAACC,QAAQ,CAACC,KAAK,CAAC,SAASL,SAAS,WAAWM,IAAI,CAACC,SAAS,CAACN,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7G;;AAEA;AACA;AACA;AACO,MAAMO,cAAc,CAAkB;EAC3CC,WAAWA,CAASC,MAAc,EAAUC,GAAY,EAAE;IAAA,KAAtCD,MAAc,GAAdA,MAAc;IAAA,KAAUC,GAAY,GAAZA,GAAY;IAAAC,eAAA,iBAE/C,KAAK;IAAAA,eAAA,gBACN,aAAa;IAAAA,eAAA,sBAEP,CACZ,OAAOC,OAAgB,EAAET,QAAkB,KAAK;MAC9C,IAAI,CAACM,MAAM,CAACI,KAAK,CAAC,+BAA+BD,OAAO,CAACE,MAAM,EAAE,CAAC;MAClE,MAAMC,OAAO,GAAG;QACd,cAAc,EAAE,mBAAmB;QACnCC,UAAU,EAAE,YAAY;QACxB,eAAe,EAAE;MACnB,CAAC;MACDb,QAAQ,CAACc,SAAS,CAAC,GAAG,EAAEF,OAAO,CAAC;MAEhC,MAAMG,QAAQ,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;MAE3B,MAAMC,SAAS,GAAG;QAChBC,EAAE,EAAEJ,QAAQ;QACZf;MACF,CAAC;MAEDN,OAAO,CAAC0B,IAAI,CAACF,SAAS,CAAC;MAEvBT,OAAO,CAACY,EAAE,CAAC,OAAO,EAAE,MAAM;QACxB,IAAI,CAACf,MAAM,CAACI,KAAK,CAAC,GAAGK,QAAQ,wBAAwB,CAAC;QACtDrB,OAAO,GAAGA,OAAO,CAAC4B,MAAM,CAAEvB,MAAM,IAAKA,MAAM,CAACoB,EAAE,KAAKJ,QAAQ,CAAC;MAC9D,CAAC,CAAC;IACJ,CAAC,CACF;EA7B0D;AA8B7D;AAACQ,OAAA,CAAAnB,cAAA,GAAAA,cAAA","ignoreList":[]}
1
+ {"version":3,"names":["_harmonyModules","data","require","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","SSEEventsRoute","constructor","logger","cli","request","response","debug","params","headers","Connection","writeHead","clientId","Date","now","newClient","id","addClient","on","removeClient","exports"],"sources":["sse-events.route.ts"],"sourcesContent":["import { CLIMain } from '@teambit/cli';\nimport { Route, Request, Response } from '@teambit/express';\nimport { Logger } from '@teambit/logger';\nimport { addClient, removeClient } from '@teambit/harmony.modules.send-server-sent-events';\n\ntype CLIENT = {\n id: number;\n response: Response;\n};\n\n/**\n * Server-Sent Events (SSE).\n */\nexport class SSEEventsRoute implements Route {\n constructor(private logger: Logger, private cli: CLIMain) {}\n\n method = 'get';\n route = '/sse-events';\n\n middlewares = [\n async (request: Request, response: Response) => {\n this.logger.debug(`sse-events: got request for ${request.params}`);\n const headers = {\n 'Content-Type': 'text/event-stream',\n Connection: 'keep-alive',\n 'Cache-Control': 'no-cache',\n };\n response.writeHead(200, headers);\n\n const clientId = Date.now();\n\n const newClient: CLIENT = {\n id: clientId,\n response,\n };\n\n addClient(newClient);\n\n request.on('close', () => {\n this.logger.debug(`${clientId} SSE Connection closed`);\n removeClient(newClient);\n });\n },\n ];\n}\n"],"mappings":";;;;;;AAGA,SAAAA,gBAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,eAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAA2F,SAAAE,gBAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAD,CAAA,GAAAI,MAAA,CAAAC,cAAA,CAAAL,CAAA,EAAAC,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAT,CAAA,CAAAC,CAAA,IAAAC,CAAA,EAAAF,CAAA;AAAA,SAAAG,eAAAD,CAAA,QAAAQ,CAAA,GAAAC,YAAA,CAAAT,CAAA,uCAAAQ,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAT,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAF,CAAA,GAAAE,CAAA,CAAAU,MAAA,CAAAC,WAAA,kBAAAb,CAAA,QAAAU,CAAA,GAAAV,CAAA,CAAAc,IAAA,CAAAZ,CAAA,EAAAD,CAAA,uCAAAS,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAAd,CAAA,GAAAe,MAAA,GAAAC,MAAA,EAAAf,CAAA;AAO3F;AACA;AACA;AACO,MAAMgB,cAAc,CAAkB;EAC3CC,WAAWA,CAASC,MAAc,EAAUC,GAAY,EAAE;IAAA,KAAtCD,MAAc,GAAdA,MAAc;IAAA,KAAUC,GAAY,GAAZA,GAAY;IAAAtB,eAAA,iBAE/C,KAAK;IAAAA,eAAA,gBACN,aAAa;IAAAA,eAAA,sBAEP,CACZ,OAAOuB,OAAgB,EAAEC,QAAkB,KAAK;MAC9C,IAAI,CAACH,MAAM,CAACI,KAAK,CAAC,+BAA+BF,OAAO,CAACG,MAAM,EAAE,CAAC;MAClE,MAAMC,OAAO,GAAG;QACd,cAAc,EAAE,mBAAmB;QACnCC,UAAU,EAAE,YAAY;QACxB,eAAe,EAAE;MACnB,CAAC;MACDJ,QAAQ,CAACK,SAAS,CAAC,GAAG,EAAEF,OAAO,CAAC;MAEhC,MAAMG,QAAQ,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;MAE3B,MAAMC,SAAiB,GAAG;QACxBC,EAAE,EAAEJ,QAAQ;QACZN;MACF,CAAC;MAED,IAAAW,2BAAS,EAACF,SAAS,CAAC;MAEpBV,OAAO,CAACa,EAAE,CAAC,OAAO,EAAE,MAAM;QACxB,IAAI,CAACf,MAAM,CAACI,KAAK,CAAC,GAAGK,QAAQ,wBAAwB,CAAC;QACtD,IAAAO,8BAAY,EAACJ,SAAS,CAAC;MACzB,CAAC,CAAC;IACJ,CAAC,CACF;EA7B0D;AA8B7D;AAACK,OAAA,CAAAnB,cAAA,GAAAA,cAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/api-server",
3
- "version": "1.0.354",
3
+ "version": "1.0.356",
4
4
  "homepage": "https://bit.cloud/teambit/harmony/api-server",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.harmony",
8
8
  "name": "api-server",
9
- "version": "1.0.354"
9
+ "version": "1.0.356"
10
10
  },
11
11
  "dependencies": {
12
12
  "fs-extra": "10.0.0",
@@ -14,28 +14,30 @@
14
14
  "p-map": "4.0.0",
15
15
  "cors": "2.8.5",
16
16
  "http-proxy-middleware": "^3.0.0",
17
+ "chalk": "2.4.2",
17
18
  "pretty-time": "1.1.0",
18
19
  "@teambit/lane-id": "0.0.311",
19
20
  "@teambit/harmony": "0.4.6",
20
- "@teambit/checkout": "1.0.354",
21
- "@teambit/component-compare": "1.0.354",
22
- "@teambit/component-log": "1.0.354",
23
- "@teambit/config": "0.0.1105",
24
- "@teambit/export": "1.0.354",
25
- "@teambit/generator": "1.0.355",
26
- "@teambit/install": "1.0.354",
27
- "@teambit/lanes": "1.0.354",
21
+ "@teambit/checkout": "1.0.356",
22
+ "@teambit/component-compare": "1.0.356",
23
+ "@teambit/component-log": "1.0.356",
24
+ "@teambit/config": "0.0.1107",
25
+ "@teambit/export": "1.0.356",
26
+ "@teambit/generator": "1.0.357",
27
+ "@teambit/install": "1.0.356",
28
+ "@teambit/lanes": "1.0.356",
28
29
  "@teambit/legacy.utils": "0.0.4",
29
- "@teambit/merging": "1.0.354",
30
- "@teambit/remove": "1.0.354",
31
- "@teambit/snapping": "1.0.354",
32
- "@teambit/workspace": "1.0.354",
33
- "@teambit/cli": "0.0.931",
34
- "@teambit/component": "1.0.354",
35
- "@teambit/express": "0.0.1030",
36
- "@teambit/importer": "1.0.354",
37
- "@teambit/logger": "0.0.1024",
38
- "@teambit/watcher": "1.0.354"
30
+ "@teambit/merging": "1.0.356",
31
+ "@teambit/remove": "1.0.356",
32
+ "@teambit/snapping": "1.0.356",
33
+ "@teambit/workspace": "1.0.356",
34
+ "@teambit/cli": "0.0.933",
35
+ "@teambit/component": "1.0.356",
36
+ "@teambit/express": "0.0.1032",
37
+ "@teambit/harmony.modules.send-server-sent-events": "0.0.1",
38
+ "@teambit/importer": "1.0.356",
39
+ "@teambit/logger": "0.0.1026",
40
+ "@teambit/watcher": "1.0.356"
39
41
  },
40
42
  "devDependencies": {
41
43
  "@types/fs-extra": "9.0.7",