@teambit/api-server 0.0.0-e8287ed72e2b99e42d753c493df21297eff042bb → 0.0.0-e91d3d4331123ccbcedf52861bd91ca00b6eec45

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,24 +1,24 @@
1
- import { CompFiles, Workspace, FilesStatus } from '@teambit/workspace';
2
- import { PathOsBasedAbsolute, PathOsBasedRelative } from '@teambit/legacy.utils';
3
- import { SnappingMain } from '@teambit/snapping';
4
- import { LanesMain } from '@teambit/lanes';
5
- import { InstallMain } from '@teambit/install';
6
- import { ExportMain } from '@teambit/export';
7
- import { CheckoutMain } from '@teambit/checkout';
8
- import { ComponentLogMain, FileHashDiffFromParent } from '@teambit/component-log';
9
- import { LaneLog } from '@teambit/objects';
10
- import { ComponentCompareMain } from '@teambit/component-compare';
11
- import { GeneratorMain, PromptOption, PromptResults } from '@teambit/generator';
12
- import { RemoveMain } from '@teambit/remove';
13
- import { ConfigMain } from '@teambit/config';
14
- import { ApplicationMain } from '@teambit/application';
15
- import { DeprecationMain } from '@teambit/deprecation';
16
- import { EnvsMain } from '@teambit/envs';
17
- import { GraphMain } from '@teambit/graph';
18
- import { ScopeMain } from '@teambit/scope';
19
- import { ComponentMain } from '@teambit/component';
20
- import { SchemaMain } from '@teambit/schema';
21
- import { Logger } from '@teambit/logger';
1
+ import type { CompFiles, Workspace, FilesStatus } from '@teambit/workspace';
2
+ import type { PathOsBasedAbsolute, PathOsBasedRelative } from '@teambit/legacy.utils';
3
+ import type { SnappingMain } from '@teambit/snapping';
4
+ import type { LanesMain } from '@teambit/lanes';
5
+ import type { InstallMain } from '@teambit/install';
6
+ import type { ExportMain } from '@teambit/export';
7
+ import type { CheckoutMain } from '@teambit/checkout';
8
+ import type { ComponentLogMain, FileHashDiffFromParent } from '@teambit/component-log';
9
+ import type { LaneLog } from '@teambit/objects';
10
+ import type { ComponentCompareMain } from '@teambit/component-compare';
11
+ import type { GenerateResult, GeneratorMain, PromptOption, PromptResults, TemplateDescriptor } from '@teambit/generator';
12
+ import type { RemoveMain } from '@teambit/remove';
13
+ import type { ConfigMain } from '@teambit/config';
14
+ import type { ApplicationMain } from '@teambit/application';
15
+ import type { DeprecationMain } from '@teambit/deprecation';
16
+ import type { EnvsMain } from '@teambit/envs';
17
+ import type { GraphMain } from '@teambit/graph';
18
+ import type { ScopeMain } from '@teambit/scope';
19
+ import type { ComponentMain, ComponentMap } from '@teambit/component';
20
+ import type { SchemaMain } from '@teambit/schema';
21
+ import type { Logger } from '@teambit/logger';
22
22
  type PathLinux = string;
23
23
  type PathFromLastSnap = {
24
24
  [relativeToWorkspace: PathLinux]: string;
@@ -128,8 +128,8 @@ export declare class APIForIDE {
128
128
  [relativePath: string]: string;
129
129
  }>;
130
130
  catObject(hash: string): Promise<string>;
131
- logFile(filePath: string): Promise<import("@teambit/component-log/component-log.main.runtime").FileLog[]>;
132
- blame(filePath: string): Promise<import("@teambit/component-log/component-log.main.runtime").BlameLineInfo[]>;
131
+ logFile(filePath: string): Promise<import("@teambit/component-log/dist/component-log.main.runtime").FileLog[]>;
132
+ blame(filePath: string): Promise<import("@teambit/component-log/dist/component-log.main.runtime").BlameLineInfo[]>;
133
133
  changedFilesFromParent(id: string): Promise<FileHashDiffFromParent[]>;
134
134
  getConfigForDiff(id: string): Promise<{
135
135
  version?: string;
@@ -143,7 +143,7 @@ export declare class APIForIDE {
143
143
  }>;
144
144
  warmWorkspaceCache(): Promise<void>;
145
145
  clearCache(): Promise<void>;
146
- install(options?: {}, packages?: string[]): Promise<import("@teambit/component").ComponentMap<string>>;
146
+ install(options?: {}, packages?: string[]): Promise<ComponentMap<string>>;
147
147
  export(): Promise<{
148
148
  componentsIds: string[];
149
149
  removedIds: string[];
@@ -156,9 +156,10 @@ export declare class APIForIDE {
156
156
  skipped: string[] | undefined;
157
157
  failed: string[] | undefined;
158
158
  }>;
159
- getTemplates(): Promise<import("@teambit/generator/generator.main.runtime").TemplateDescriptor[]>;
159
+ importObjectsIfOutdatedAgainstBitmap(): Promise<void>;
160
+ getTemplates(): Promise<TemplateDescriptor[]>;
160
161
  getPromptOptionsForTemplate(templateName: string): Promise<PromptOption[] | undefined>;
161
- createComponent(templateName: string, idIncludeScope: string, promptResults?: PromptResults): Promise<import("@teambit/generator").GenerateResult[]>;
162
+ createComponent(templateName: string, idIncludeScope: string, promptResults?: PromptResults): Promise<GenerateResult[]>;
162
163
  removeComponent(componentsPattern: string): Promise<import("@teambit/legacy.scope").RemovedObjectSerialized>;
163
164
  deleteComponents(componentsPattern: string, opts: any): Promise<string[]>;
164
165
  deprecateComponent(id: string, newId?: string, range?: string): Promise<boolean>;
@@ -176,7 +177,7 @@ export declare class APIForIDE {
176
177
  [relativePath: string]: string;
177
178
  }>;
178
179
  getCurrentLaneName(includeScope?: boolean): string;
179
- tagOrSnap(message?: string): Promise<import("@teambit/snapping").TagResults | import("@teambit/snapping").SnapResults | null>;
180
+ tagOrSnap(message?: string): Promise<import("@teambit/snapping").SnapResults | import("@teambit/snapping").TagResults | null>;
180
181
  tag(message?: string): Promise<string[]>;
181
182
  snap(message?: string): Promise<string[]>;
182
183
  getCompDetails(id: string, includeSchema?: boolean): Promise<Record<string, any>>;
@@ -430,6 +430,9 @@ class APIForIDE {
430
430
  });
431
431
  return this.adjustCheckoutResultsToIde(results);
432
432
  }
433
+ async importObjectsIfOutdatedAgainstBitmap() {
434
+ return this.workspace.importObjectsIfOutdatedAgainstBitmap();
435
+ }
433
436
  async getTemplates() {
434
437
  const templates = await this.generator.listTemplates();
435
438
  return templates;
@@ -1 +1 @@
1
- {"version":3,"names":["_path","data","_interopRequireDefault","require","_fsExtra","_filenamify","_legacy","_pMap","_legacy2","_lodash","_laneId","_nodeFetch","_scope","_componentModules","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","FILES_HISTORY_DIR","ENV_ICONS_DIR","LAST_SNAP_DIR","CMD_HISTORY","APIForIDE","constructor","workspace","snapping","lanes","installer","exporter","checkout","componentLog","componentCompare","generator","remove","config","application","deprecation","envs","graph","scope","component","schema","logger","logStartCmdHistory","op","str","writeToCmdHistory","logFinishCmdHistory","code","endStr","getProcessPid","process","pid","fs","appendFile","path","join","Date","toISOString","listIdsWithPaths","ids","listIds","reduce","acc","id","toStringWithoutVersion","componentDir","getMainFilePath","compId","resolveComponentId","comp","get","state","_consumer","mainFile","getWorkspaceHistory","current","bitMap","getPath","bitmapHistoryDir","consumer","getBitmapHistoryDir","historyPaths","readdir","historyMetadata","getParsedBitmapHistoryMetadata","history","map","historyPath","fileName","basename","fileId","replace","reason","historySorted","sort","a","b","fileIdToTimestamp","getConfigHistory","workspaceConfig","Error","configHistoryDir","getBackupHistoryDir","getParsedHistoryMetadata","getBackupMetadataFilePath","importLane","laneName","skipDependencyInstallation","results","switchLanes","components","c","toString","getCurrentLaneObject","currentLane","getCurrentLane","undefined","head","name","log","isNew","forkedFrom","listLanes","getLanes","showDefaultLane","createLane","includes","LANE_REMOTE_DELIMITER","laneId","LaneId","parse","getCompsMetadata","comps","list","apps","listAppsIdsAndNames","pMap","deprecationInfo","getDeprecationInfo","foundApp","find","app","env","getEnv","isDeprecated","isDeprecate","appName","icon","concurrency","allIcons","uniq","compact","iconsMap","getEnvIconsMapFetchIfMissing","localIconPath","getEnvIconsFullPath","getExistingEnvIcons","existingEnvIcons","envIconsDir","ensureDir","existingIcons","icons","Promise","all","iconFileName","filenamify","replacement","fullIconPath","res","fetch","err","message","svgText","text","outputFile","getCompFiles","dirAbs","filesRelative","filesystem","files","file","relative","getGraphIdsAsSVG","opts","visualGraph","getVisualGraphIds","svg","getAsSVGString","getWorkspaceDependencies","allDeps","getAllDedupedDirectDependencies","allDepsObj","dep","currentRange","getCompFilesDirPathFromLastSnap","hasVersion","compDir","ignoreVersion","filePathsRootDir","modelComponent","getBitObjectModelComponent","versionObject","getBitObjectVersion","version","sourceFiles","modelFilesToSourceFiles","legacyScope","objects","filePath","contents","pathJoinLinux","catObject","hash","object","getRawObject","JSON","stringify","content","logFile","getFileHistoryHashes","blame","changedFilesFromParent","getChangedFilesFromParent","getConfigForDiff","getConfigForDiffById","setDefaultScope","scopeName","getDefaultScope","defaultScope","getCompFilesDirPathFromLastSnapUsingCompFiles","compFiles","getHeadFiles","warmWorkspaceCache","warmCache","clearCache","clearAllComponentsCache","install","options","packages","optimizeReportForNonTerminal","dedupe","updateExisting","import","export","componentsIds","removedIds","exportedLanes","rippleJobUrls","l","rippleJobs","checkoutHead","skipNpmInstall","adjustCheckoutResultsToIde","getTemplates","templates","listTemplates","getPromptOptionsForTemplate","templateName","template","getTemplateWithId","promptOptions","createComponent","idIncludeScope","promptResults","nameSplit","split","generateComponentTemplate","removeComponent","componentsPattern","force","serializedResults","localResult","serialize","deleteComponents","deleteComps","deprecateComponent","newId","range","deprecateByCLIValues","undeprecateComponent","unDeprecateByCLIValues","switchLane","output","failedComponents","skipped","f","unchangedLegitimately","failed","succeed","getModifiedByConfig","modifiedComps","modified","autoTagIds","listAutoTagPendingComponentIds","autoTagComps","getMany","locallyDeletedIds","locallyDeletedComps","allComps","allIds","wsComp","getConfigForDiffByCompObject","scopeComp","hasSameDeps","dependencies","hasSameAspects","aspects","result","getDataToInitSCM","getFilesModification","pathsFromLastSnap","idStr","filesStatus","getFilesStatus","componentId","getCompFilesDirPathFromLastSnapForAllComps","compResults","getCurrentLaneName","includeScope","currentLaneId","getCurrentLaneId","isDefault","tagOrSnap","params","build","isOnMain","tag","snap","taggedComponents","snappedComponents","getCompDetails","includeSchema","debug","existsLocally","hasId","getComp","ComponentNotFound","fragments","getShowFragments","titlesToInclude","showResults","fragment","json","title","deps","getDependencies","pkg","getPackageName","pkgWithVer","compIdStr","type","lifecycle","source","getSchema","getSchemaFromRemote","publicAPI","toStringPerType","error","docsAspectFiles","Array","isArray","docs","relativePath","compositionsAspectFiles","usageExamples","fileContent","url","ComponentUrl","toUrl","includeVersion","packageName","componentLocation","isInstalledAsPackage","lockFilePath","pathExists","lockFileContent","readFile","warn","exports","dateStr","year","month","day","hours","minutes","seconds","date","getTime"],"sources":["api-for-ide.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport filenamify from 'filenamify';\nimport { CompFiles, Workspace, FilesStatus } from '@teambit/workspace';\nimport { PathOsBasedAbsolute, PathOsBasedRelative, pathJoinLinux } from '@teambit/legacy.utils';\nimport pMap from 'p-map';\nimport { SnappingMain } from '@teambit/snapping';\nimport { LanesMain } from '@teambit/lanes';\nimport { InstallMain } from '@teambit/install';\nimport { ExportMain } from '@teambit/export';\nimport { CheckoutMain } from '@teambit/checkout';\nimport { ApplyVersionResults } from '@teambit/merging';\nimport { ComponentLogMain, FileHashDiffFromParent } from '@teambit/component-log';\nimport { LaneLog } from '@teambit/objects';\nimport { ComponentCompareMain } from '@teambit/component-compare';\nimport { GeneratorMain, PromptOption, PromptResults } from '@teambit/generator';\nimport { getParsedHistoryMetadata } from '@teambit/legacy.consumer';\nimport { RemovedObjects } from '@teambit/legacy.scope';\nimport { RemoveMain } from '@teambit/remove';\nimport { compact, uniq } from 'lodash';\nimport { ConfigMain } from '@teambit/config';\nimport { LANE_REMOTE_DELIMITER, LaneId } from '@teambit/lane-id';\nimport { ApplicationMain } from '@teambit/application';\nimport { DeprecationMain } from '@teambit/deprecation';\nimport { EnvsMain } from '@teambit/envs';\nimport fetch from 'node-fetch';\nimport { GraphMain } from '@teambit/graph';\nimport { ComponentNotFound, ScopeMain } from '@teambit/scope';\nimport { ComponentMain } from '@teambit/component';\nimport { SchemaMain } from '@teambit/schema';\nimport { ComponentUrl } from '@teambit/component.modules.component-url';\nimport { Logger } from '@teambit/logger';\n\nconst FILES_HISTORY_DIR = 'files-history';\nconst ENV_ICONS_DIR = 'env-icons';\nconst LAST_SNAP_DIR = 'last-snap';\nconst CMD_HISTORY = 'command-history-ide';\n\ntype PathLinux = string; // problematic to get it from @teambit/legacy/dist/utils/path.\n\ntype PathFromLastSnap = { [relativeToWorkspace: PathLinux]: string };\n\ntype InitSCMEntry = {\n filesStatus: FilesStatus;\n pathsFromLastSnap: PathFromLastSnap;\n compDir: PathLinux;\n};\n\ntype DataToInitSCM = { [compId: string]: InitSCMEntry };\n\ntype LaneObj = {\n name: string;\n scope: string;\n id: string;\n log: LaneLog;\n components: Array<{ id: string; head: string }>;\n isNew: boolean;\n forkedFrom?: string;\n};\n\ntype ModifiedByConfig = {\n id: string;\n version: string;\n dependencies?: { workspace: string[]; scope: string[] };\n aspects?: { workspace: Record<string, any>; scope: Record<string, any> };\n};\n\ntype WorkspaceHistory = {\n current: PathOsBasedAbsolute;\n history: Array<{ path: PathOsBasedAbsolute; fileId: string; reason?: string }>;\n};\n\ntype CompMetadata = {\n id: string;\n isDeprecated: boolean;\n appName?: string; // in case it's an app\n env: {\n id: string;\n name?: string;\n icon: string;\n localIconPath?: string;\n };\n};\n\nexport class APIForIDE {\n private existingEnvIcons: string[] | undefined;\n constructor(\n private workspace: Workspace,\n private snapping: SnappingMain,\n private lanes: LanesMain,\n private installer: InstallMain,\n private exporter: ExportMain,\n private checkout: CheckoutMain,\n private componentLog: ComponentLogMain,\n private componentCompare: ComponentCompareMain,\n private generator: GeneratorMain,\n private remove: RemoveMain,\n private config: ConfigMain,\n private application: ApplicationMain,\n private deprecation: DeprecationMain,\n private envs: EnvsMain,\n private graph: GraphMain,\n private scope: ScopeMain,\n private component: ComponentMain,\n private schema: SchemaMain,\n private logger: Logger\n ) {}\n\n async logStartCmdHistory(op: string) {\n const str = `${op}, started`;\n await this.writeToCmdHistory(str);\n }\n\n async logFinishCmdHistory(op: string, code: number) {\n const endStr = code === 0 ? 'succeeded' : 'failed';\n const str = `${op}, ${endStr}`;\n await this.writeToCmdHistory(str);\n }\n\n getProcessPid() {\n return process.pid;\n }\n\n private async writeToCmdHistory(str: string) {\n await fs.appendFile(path.join(this.workspace.scope.path, CMD_HISTORY), `${new Date().toISOString()} ${str}\\n`);\n }\n\n async listIdsWithPaths() {\n const ids = this.workspace.listIds();\n return ids.reduce((acc, id) => {\n acc[id.toStringWithoutVersion()] = this.workspace.componentDir(id);\n return acc;\n }, {});\n }\n\n async getMainFilePath(id: string): Promise<PathOsBasedAbsolute> {\n const compId = await this.workspace.resolveComponentId(id);\n const comp = await this.workspace.get(compId);\n return path.join(this.workspace.componentDir(compId), comp.state._consumer.mainFile);\n }\n\n async getWorkspaceHistory(): Promise<WorkspaceHistory> {\n const current = this.workspace.bitMap.getPath();\n const bitmapHistoryDir = this.workspace.consumer.getBitmapHistoryDir();\n const historyPaths = await fs.readdir(bitmapHistoryDir);\n const historyMetadata = await this.workspace.consumer.getParsedBitmapHistoryMetadata();\n const history = historyPaths.map((historyPath) => {\n const fileName = path.basename(historyPath);\n const fileId = fileName.replace('.bitmap-', '');\n const reason = historyMetadata[fileId];\n return { path: path.join(bitmapHistoryDir, fileName), fileId, reason };\n });\n const historySorted = history.sort((a, b) => fileIdToTimestamp(b.fileId) - fileIdToTimestamp(a.fileId));\n\n return { current, history: historySorted };\n }\n\n async getConfigHistory(): Promise<WorkspaceHistory> {\n const workspaceConfig = this.config.workspaceConfig;\n if (!workspaceConfig) throw new Error('getConfigHistory(), workspace config is missing');\n const current = workspaceConfig.path;\n const configHistoryDir = workspaceConfig.getBackupHistoryDir();\n const historyPaths = await fs.readdir(configHistoryDir);\n const historyMetadata = await getParsedHistoryMetadata(workspaceConfig.getBackupMetadataFilePath());\n const history = historyPaths.map((historyPath) => {\n const fileName = path.basename(historyPath);\n const fileId = fileName;\n const reason = historyMetadata[fileId];\n return { path: path.join(configHistoryDir, fileName), fileId, reason };\n });\n const historySorted = history.sort((a, b) => fileIdToTimestamp(b.fileId) - fileIdToTimestamp(a.fileId));\n\n return { current, history: historySorted };\n }\n\n async importLane(\n laneName: string,\n { skipDependencyInstallation }: { skipDependencyInstallation?: boolean }\n ): Promise<string[]> {\n const results = await this.lanes.switchLanes(laneName, {\n skipDependencyInstallation,\n });\n return (results.components || []).map((c) => c.id.toString());\n }\n\n async getCurrentLaneObject(): Promise<LaneObj | undefined> {\n const currentLane = await this.lanes.getCurrentLane();\n if (!currentLane) return undefined;\n const components = currentLane.components.map((c) => {\n return {\n id: c.id.toStringWithoutVersion(),\n head: c.head.toString(),\n };\n });\n return {\n name: currentLane.name,\n scope: currentLane.scope,\n id: currentLane.id(),\n log: currentLane.log,\n components,\n isNew: currentLane.isNew,\n forkedFrom: currentLane.forkedFrom?.toString(),\n };\n }\n\n async listLanes() {\n return this.lanes.getLanes({ showDefaultLane: true });\n }\n\n async createLane(name: string) {\n if (name.includes(LANE_REMOTE_DELIMITER)) {\n const laneId = LaneId.parse(name);\n return this.lanes.createLane(laneId.name, { scope: laneId.scope });\n }\n return this.lanes.createLane(name);\n }\n\n async getCompsMetadata(): Promise<CompMetadata[]> {\n const comps = await this.workspace.list();\n const apps = await this.application.listAppsIdsAndNames();\n const results: CompMetadata[] = await pMap(\n comps,\n async (comp) => {\n const id = comp.id;\n const deprecationInfo = await this.deprecation.getDeprecationInfo(comp);\n const foundApp = apps.find((app) => app.id === id.toString());\n const env = this.envs.getEnv(comp);\n return {\n id: id.toStringWithoutVersion(),\n isDeprecated: deprecationInfo.isDeprecate,\n appName: foundApp?.name,\n env: {\n id: env.id,\n name: env.name,\n icon: env.icon,\n },\n };\n },\n { concurrency: 30 }\n );\n const allIcons = uniq(compact(results.map((r) => r.env.icon)));\n const iconsMap = await this.getEnvIconsMapFetchIfMissing(allIcons);\n results.forEach((r) => {\n r.env.localIconPath = iconsMap[r.env.icon];\n });\n return results;\n }\n\n private getEnvIconsFullPath() {\n return path.join(this.workspace.scope.path, ENV_ICONS_DIR);\n }\n\n private async getExistingEnvIcons(): Promise<string[]> {\n if (!this.existingEnvIcons) {\n const envIconsDir = this.getEnvIconsFullPath();\n await fs.ensureDir(envIconsDir);\n const existingIcons = await fs.readdir(envIconsDir);\n this.existingEnvIcons = existingIcons;\n }\n return this.existingEnvIcons;\n }\n\n private async getEnvIconsMapFetchIfMissing(icons: string[]): Promise<{ [iconHttpUrl: string]: string }> {\n const existingIcons = await this.getExistingEnvIcons();\n const iconsMap: Record<string, string> = {};\n await Promise.all(\n icons.map(async (icon) => {\n const iconFileName = filenamify(icon, { replacement: '-' });\n const fullIconPath = path.join(this.workspace.scope.path, ENV_ICONS_DIR, iconFileName);\n if (existingIcons.includes(iconFileName)) {\n iconsMap[icon] = fullIconPath;\n return;\n }\n let res;\n // download the icon from the url and save it locally.\n try {\n res = await fetch(icon);\n } catch (err: any) {\n throw new Error(`failed to get the icon from ${icon}, error: ${err.message}`);\n }\n const svgText = await res.text();\n await fs.outputFile(fullIconPath, svgText);\n iconsMap[icon] = fullIconPath;\n this.existingEnvIcons?.push(iconFileName);\n })\n );\n return iconsMap;\n }\n\n async getCompFiles(id: string): Promise<{ dirAbs: string; filesRelative: PathOsBasedRelative[] }> {\n const compId = await this.workspace.resolveComponentId(id);\n const comp = await this.workspace.get(compId);\n const dirAbs = this.workspace.componentDir(comp.id);\n const filesRelative = comp.state.filesystem.files.map((file) => file.relative);\n return { dirAbs, filesRelative };\n }\n\n async getGraphIdsAsSVG(id?: string, opts: { includeLocalOnly?: boolean } = {}): Promise<string> {\n const compId = id ? await this.workspace.resolveComponentId(id) : undefined;\n const visualGraph = await this.graph.getVisualGraphIds(compId ? [compId] : undefined, opts);\n const svg = await visualGraph.getAsSVGString();\n if (!svg) throw new Error('failed to render the graph');\n return svg;\n }\n\n async getWorkspaceDependencies(): Promise<{ [pkgName: string]: string }> {\n const allDeps = await this.workspace.getAllDedupedDirectDependencies();\n const allDepsObj = {};\n for (const dep of allDeps) {\n allDepsObj[dep.name] = dep.currentRange;\n }\n\n return allDepsObj;\n }\n\n async getCompFilesDirPathFromLastSnap(id: string): Promise<{ [relativePath: string]: string }> {\n const compId = await this.workspace.resolveComponentId(id);\n if (!compId.hasVersion()) return {}; // it's a new component.\n const compDir = this.workspace.componentDir(compId, { ignoreVersion: true }, { relative: true });\n // const dirName = filenamify(compId.toString(), { replacement: '_' });\n const filePathsRootDir = path.join(this.workspace.scope.path, FILES_HISTORY_DIR, LAST_SNAP_DIR, compDir);\n await fs.remove(filePathsRootDir); // in case it has old data\n await fs.ensureDir(filePathsRootDir);\n\n const modelComponent = await this.workspace.scope.getBitObjectModelComponent(compId);\n if (!modelComponent) {\n throw new Error(`unable to find ${compId.toString()} in the local scope, please run \"bit import\"`);\n }\n const versionObject = await this.workspace.scope.getBitObjectVersion(modelComponent, compId.version as string);\n if (!versionObject)\n throw new Error(`unable to find the Version object of ${compId.toString()}, please run \"bit import\"`);\n const sourceFiles = await versionObject.modelFilesToSourceFiles(this.workspace.scope.legacyScope.objects);\n const results: { [relativePath: string]: string } = {};\n await Promise.all(\n sourceFiles.map(async (file) => {\n const filePath = path.join(filePathsRootDir, file.relative);\n await fs.outputFile(filePath, file.contents);\n results[pathJoinLinux(compDir, file.relative)] = filePath;\n })\n );\n return results;\n }\n\n async catObject(hash: string) {\n const object = await this.workspace.scope.legacyScope.getRawObject(hash);\n return JSON.stringify(object.content.toString());\n }\n\n async logFile(filePath: string) {\n const results = await this.componentLog.getFileHistoryHashes(filePath);\n return results;\n }\n\n async blame(filePath: string) {\n const results = await this.componentLog.blame(filePath);\n return results;\n }\n\n async changedFilesFromParent(id: string): Promise<FileHashDiffFromParent[]> {\n const results = await this.componentLog.getChangedFilesFromParent(id);\n return results;\n }\n\n async getConfigForDiff(id: string) {\n const results = await this.componentCompare.getConfigForDiffById(id);\n return results;\n }\n\n async setDefaultScope(scopeName: string) {\n await this.workspace.setDefaultScope(scopeName);\n return scopeName;\n }\n\n getDefaultScope() {\n return this.workspace.defaultScope;\n }\n\n async getCompFilesDirPathFromLastSnapUsingCompFiles(\n compFiles: CompFiles\n ): Promise<{ [relativePath: string]: string }> {\n const compId = compFiles.id;\n if (!compId.hasVersion()) return {}; // it's a new component.\n const compDir = compFiles.compDir;\n const filePathsRootDir = path.join(this.workspace.scope.path, FILES_HISTORY_DIR, LAST_SNAP_DIR, compDir);\n await fs.remove(filePathsRootDir); // in case it has old data\n\n const sourceFiles = await compFiles.getHeadFiles();\n\n const results: { [relativePath: string]: string } = {};\n await Promise.all(\n sourceFiles.map(async (file) => {\n const filePath = path.join(filePathsRootDir, file.relative);\n await fs.outputFile(filePath, file.contents);\n results[pathJoinLinux(compDir, file.relative)] = filePath;\n })\n );\n return results;\n }\n\n async warmWorkspaceCache() {\n await this.workspace.warmCache();\n }\n async clearCache() {\n await this.workspace.clearCache();\n this.workspace.clearAllComponentsCache();\n }\n\n async install(options = {}, packages?: string[]) {\n const opts = {\n optimizeReportForNonTerminal: true,\n dedupe: true,\n updateExisting: false,\n import: false,\n ...options,\n };\n\n return this.installer.install(packages, opts);\n }\n\n async export() {\n const { componentsIds, removedIds, exportedLanes, rippleJobUrls } = await this.exporter.export();\n return {\n componentsIds: componentsIds.map((c) => c.toString()),\n removedIds: removedIds.map((c) => c.toString()),\n exportedLanes: exportedLanes.map((l) => l.id()),\n rippleJobs: rippleJobUrls, // for backward compatibility. bit-extension until 1.1.52 expects rippleJobs.\n rippleJobUrls,\n };\n }\n\n async checkoutHead() {\n const results = await this.checkout.checkout({\n head: true,\n skipNpmInstall: true,\n ids: await this.workspace.listIds(),\n });\n return this.adjustCheckoutResultsToIde(results);\n }\n\n async getTemplates() {\n const templates = await this.generator.listTemplates();\n return templates;\n }\n\n async getPromptOptionsForTemplate(templateName: string): Promise<PromptOption[] | undefined> {\n const template = await this.generator.getTemplateWithId(templateName);\n return template.template.promptOptions?.();\n }\n\n async createComponent(templateName: string, idIncludeScope: string, promptResults?: PromptResults) {\n if (!idIncludeScope.includes('/')) {\n throw new Error('id should include the scope name');\n }\n const [scope, ...nameSplit] = idIncludeScope.split('/');\n return this.generator.generateComponentTemplate(\n [nameSplit.join('/')],\n templateName,\n { scope },\n { optimizeReportForNonTerminal: true },\n promptResults\n );\n }\n\n async removeComponent(componentsPattern: string) {\n const results = await this.remove.remove({\n componentsPattern,\n force: true,\n });\n const serializedResults = (results.localResult as RemovedObjects).serialize();\n return serializedResults;\n }\n\n async deleteComponents(componentsPattern: string, opts): Promise<string[]> {\n const results = await this.remove.deleteComps(componentsPattern, opts);\n const serializedResults = results.map((c) => c.id.toString());\n return serializedResults;\n }\n\n async deprecateComponent(id: string, newId?: string, range?: string): Promise<boolean> {\n return this.deprecation.deprecateByCLIValues(id, newId, range);\n }\n async undeprecateComponent(id: string): Promise<boolean> {\n return this.deprecation.unDeprecateByCLIValues(id);\n }\n\n async switchLane(name: string) {\n const results = await this.lanes.switchLanes(name, { skipDependencyInstallation: true });\n return this.adjustCheckoutResultsToIde(results);\n }\n\n private adjustCheckoutResultsToIde(output: ApplyVersionResults) {\n const { components, failedComponents } = output;\n const skipped = failedComponents?.filter((f) => f.unchangedLegitimately).map((f) => f.id.toString());\n const failed = failedComponents?.filter((f) => !f.unchangedLegitimately).map((f) => f.id.toString());\n return {\n succeed: components?.map((c) => c.id.toString()),\n skipped,\n failed,\n };\n }\n\n async getModifiedByConfig(): Promise<ModifiedByConfig[]> {\n const modifiedComps = await this.workspace.modified();\n const autoTagIds = await this.workspace.listAutoTagPendingComponentIds();\n const autoTagComps = await this.workspace.getMany(autoTagIds);\n const locallyDeletedIds = await this.workspace.locallyDeletedIds();\n const locallyDeletedComps = await this.workspace.getMany(locallyDeletedIds);\n const allComps = [...modifiedComps, ...autoTagComps, ...locallyDeletedComps];\n const allIds = allComps.map((c) => c.id);\n const results = await Promise.all(\n allComps.map(async (comp) => {\n const wsComp = await this.componentCompare.getConfigForDiffByCompObject(comp, allIds);\n const scopeComp = await this.componentCompare.getConfigForDiffById(comp.id.toString());\n const hasSameDeps = JSON.stringify(wsComp.dependencies) === JSON.stringify(scopeComp.dependencies);\n const hasSameAspects = JSON.stringify(wsComp.aspects) === JSON.stringify(scopeComp.aspects);\n if (hasSameDeps && hasSameAspects) return null;\n const result: ModifiedByConfig = {\n id: comp.id.toStringWithoutVersion(),\n version: comp.id.version as string,\n };\n if (!hasSameDeps) result.dependencies = { workspace: wsComp.dependencies, scope: scopeComp.dependencies || [] };\n if (!hasSameAspects) result.aspects = { workspace: wsComp.aspects, scope: scopeComp.aspects || {} };\n return result;\n })\n );\n\n return compact(results);\n }\n\n async getDataToInitSCM(): Promise<DataToInitSCM> {\n const ids = this.workspace.listIds();\n const results: DataToInitSCM = {};\n await pMap(\n ids,\n async (id) => {\n const compFiles = await this.workspace.getFilesModification(id);\n const pathsFromLastSnap = await this.getCompFilesDirPathFromLastSnapUsingCompFiles(compFiles);\n const idStr = id.toStringWithoutVersion();\n results[idStr] = {\n filesStatus: compFiles.getFilesStatus(),\n pathsFromLastSnap,\n compDir: compFiles.compDir,\n };\n },\n { concurrency: 30 }\n );\n\n return results;\n }\n\n async getFilesStatus(id: string): Promise<FilesStatus> {\n const componentId = await this.workspace.resolveComponentId(id);\n const compFiles = await this.workspace.getFilesModification(componentId);\n return compFiles.getFilesStatus();\n }\n\n async getCompFilesDirPathFromLastSnapForAllComps(): Promise<{ [relativePath: string]: string }> {\n const ids = this.workspace.listIds();\n let results = {};\n await pMap(\n ids,\n async (id) => {\n const idStr = id.toStringWithoutVersion();\n const compResults = await this.getCompFilesDirPathFromLastSnap(idStr);\n results = { ...results, ...compResults };\n },\n { concurrency: 30 }\n );\n return results;\n }\n\n getCurrentLaneName(includeScope = false): string {\n const currentLaneId = this.workspace.getCurrentLaneId();\n if (!includeScope) return currentLaneId.name;\n if (currentLaneId.isDefault()) return currentLaneId.name;\n return currentLaneId.toString();\n }\n\n async tagOrSnap(message = '') {\n const params = { message, build: false };\n return this.workspace.isOnMain() ? this.snapping.tag(params) : this.snapping.snap(params);\n }\n\n async tag(message = ''): Promise<string[]> {\n const params = { message, build: false };\n const results = await this.snapping.tag(params);\n return (results?.taggedComponents || []).map((c) => c.id.toString());\n }\n\n async snap(message = ''): Promise<string[]> {\n const params = { message, build: false };\n const results = await this.snapping.snap(params);\n return (results?.snappedComponents || []).map((c) => c.id.toString());\n }\n\n async getCompDetails(id: string, includeSchema = false) {\n this.logger.debug(`getCompDetails(${id}, ${includeSchema})`);\n const compId = await this.workspace.resolveComponentId(id);\n const existsLocally = this.workspace.hasId(compId);\n const getComp = async () => {\n if (existsLocally) {\n return this.workspace.get(compId);\n }\n const comp = await this.scope.get(compId);\n if (comp) return comp;\n throw new ComponentNotFound(compId);\n };\n const comp = await getComp();\n\n const fragments = this.component.getShowFragments();\n const titlesToInclude = ['id', 'env', 'package name', 'files', 'dev files', 'deprecated'];\n const showResults: Record<string, any> = {};\n await Promise.all(\n fragments.map(async (fragment) => {\n const result = fragment.json ? await fragment.json(comp) : undefined;\n if (!result || !titlesToInclude.includes(result.title)) return;\n if (result.title === 'deprecated' && !result.json.isDeprecate) return; // skip if not deprecated\n showResults[result.title] = result.json;\n })\n );\n\n const deps = comp.getDependencies();\n showResults.dependencies = deps.map((dep) => {\n const pkg = dep.getPackageName?.() || dep.id;\n const pkgWithVer = `${pkg}@${dep.version}`;\n const compIdStr = dep.type === 'component' ? `, component-id: ${dep.id}` : '';\n return `${pkgWithVer} (lifecycle: ${dep.lifecycle}, type: ${dep.type}, source: ${dep.source}${compIdStr})`;\n });\n\n if (includeSchema) {\n try {\n const schema = existsLocally\n ? await this.schema.getSchema(comp)\n : await this.schema.getSchemaFromRemote(comp.id.toString());\n showResults.publicAPI = schema.toStringPerType();\n } catch (error) {\n // If schema fails, add error info instead of crashing\n showResults.publicAPI = `Error fetching schema: ${(error as Error).message}`;\n }\n }\n\n // Add docs content if available from teambit.docs/docs aspect\n try {\n const docsAspectFiles = showResults['dev files']?.[`teambit.docs/docs`];\n if (docsAspectFiles && Array.isArray(docsAspectFiles) && docsAspectFiles.length > 0) {\n showResults.docs = {};\n docsAspectFiles.forEach((relativePath: string) => {\n const file = comp.filesystem.files.find((f) => f.relative === relativePath);\n if (file) {\n showResults.docs[relativePath] = file.contents.toString();\n }\n });\n }\n } catch (error) {\n // If docs extraction fails, add error info but don't crash\n showResults.docs = `Error fetching docs: ${(error as Error).message}`;\n }\n\n // Add usage examples from teambit.compositions/compositions aspect\n try {\n const compositionsAspectFiles = showResults['dev files']?.[`teambit.compositions/compositions`];\n if (compositionsAspectFiles && Array.isArray(compositionsAspectFiles) && compositionsAspectFiles.length > 0) {\n showResults.usageExamples = {};\n compositionsAspectFiles.forEach((relativePath: string) => {\n const file = comp.filesystem.files.find((f) => f.relative === relativePath);\n if (file) {\n const fileContent = file.contents.toString();\n showResults.usageExamples[relativePath] = fileContent;\n }\n });\n }\n } catch (error) {\n // If composition extraction fails, add error info but don't crash\n showResults.usageExamples = `Error fetching usage examples: ${(error as Error).message}`;\n }\n\n showResults.url = ComponentUrl.toUrl(compId, { includeVersion: false });\n\n // Add component location status\n // Check if component exists as a package by looking it up in the pnpm lock file\n const packageName = comp.getPackageName();\n let componentLocation: string;\n\n if (existsLocally) {\n const compDir = this.workspace.componentDir(compId, { ignoreVersion: true }, { relative: true });\n componentLocation = `exists locally in the workspace at '${compDir}'`;\n } else {\n let isInstalledAsPackage = false;\n\n try {\n const lockFilePath = path.join(this.workspace.path, 'node_modules', '.pnpm', 'lock.yaml');\n if (await fs.pathExists(lockFilePath)) {\n const lockFileContent = await fs.readFile(lockFilePath, 'utf8');\n // Check if the package name exists in the lock file\n isInstalledAsPackage = lockFileContent.includes(packageName);\n }\n } catch (error) {\n this.logger.warn(`Error checking package existence for ${packageName}: ${(error as Error).message}`);\n // If error occurs during package check, default to false\n isInstalledAsPackage = false;\n }\n\n componentLocation = isInstalledAsPackage ? 'installed as a package' : 'a remote component';\n }\n\n showResults.componentLocation = componentLocation;\n\n return showResults;\n }\n}\n\nfunction fileIdToTimestamp(dateStr: string): number {\n const [year, month, day, hours, minutes, seconds] = dateStr.split('-');\n const date = new Date(Number(year), Number(month) - 1, Number(day), Number(hours), Number(minutes), Number(seconds));\n return date.getTime();\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_path","data","_interopRequireDefault","require","_fsExtra","_filenamify","_legacy","_pMap","_legacy2","_lodash","_laneId","_nodeFetch","_scope","_componentModules","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","FILES_HISTORY_DIR","ENV_ICONS_DIR","LAST_SNAP_DIR","CMD_HISTORY","APIForIDE","constructor","workspace","snapping","lanes","installer","exporter","checkout","componentLog","componentCompare","generator","remove","config","application","deprecation","envs","graph","scope","component","schema","logger","logStartCmdHistory","op","str","writeToCmdHistory","logFinishCmdHistory","code","endStr","getProcessPid","process","pid","fs","appendFile","path","join","Date","toISOString","listIdsWithPaths","ids","listIds","reduce","acc","id","toStringWithoutVersion","componentDir","getMainFilePath","compId","resolveComponentId","comp","get","state","_consumer","mainFile","getWorkspaceHistory","current","bitMap","getPath","bitmapHistoryDir","consumer","getBitmapHistoryDir","historyPaths","readdir","historyMetadata","getParsedBitmapHistoryMetadata","history","map","historyPath","fileName","basename","fileId","replace","reason","historySorted","sort","a","b","fileIdToTimestamp","getConfigHistory","workspaceConfig","Error","configHistoryDir","getBackupHistoryDir","getParsedHistoryMetadata","getBackupMetadataFilePath","importLane","laneName","skipDependencyInstallation","results","switchLanes","components","c","toString","getCurrentLaneObject","currentLane","getCurrentLane","undefined","head","name","log","isNew","forkedFrom","listLanes","getLanes","showDefaultLane","createLane","includes","LANE_REMOTE_DELIMITER","laneId","LaneId","parse","getCompsMetadata","comps","list","apps","listAppsIdsAndNames","pMap","deprecationInfo","getDeprecationInfo","foundApp","find","app","env","getEnv","isDeprecated","isDeprecate","appName","icon","concurrency","allIcons","uniq","compact","iconsMap","getEnvIconsMapFetchIfMissing","localIconPath","getEnvIconsFullPath","getExistingEnvIcons","existingEnvIcons","envIconsDir","ensureDir","existingIcons","icons","Promise","all","iconFileName","filenamify","replacement","fullIconPath","res","fetch","err","message","svgText","text","outputFile","getCompFiles","dirAbs","filesRelative","filesystem","files","file","relative","getGraphIdsAsSVG","opts","visualGraph","getVisualGraphIds","svg","getAsSVGString","getWorkspaceDependencies","allDeps","getAllDedupedDirectDependencies","allDepsObj","dep","currentRange","getCompFilesDirPathFromLastSnap","hasVersion","compDir","ignoreVersion","filePathsRootDir","modelComponent","getBitObjectModelComponent","versionObject","getBitObjectVersion","version","sourceFiles","modelFilesToSourceFiles","legacyScope","objects","filePath","contents","pathJoinLinux","catObject","hash","object","getRawObject","JSON","stringify","content","logFile","getFileHistoryHashes","blame","changedFilesFromParent","getChangedFilesFromParent","getConfigForDiff","getConfigForDiffById","setDefaultScope","scopeName","getDefaultScope","defaultScope","getCompFilesDirPathFromLastSnapUsingCompFiles","compFiles","getHeadFiles","warmWorkspaceCache","warmCache","clearCache","clearAllComponentsCache","install","options","packages","optimizeReportForNonTerminal","dedupe","updateExisting","import","export","componentsIds","removedIds","exportedLanes","rippleJobUrls","l","rippleJobs","checkoutHead","skipNpmInstall","adjustCheckoutResultsToIde","importObjectsIfOutdatedAgainstBitmap","getTemplates","templates","listTemplates","getPromptOptionsForTemplate","templateName","template","getTemplateWithId","promptOptions","createComponent","idIncludeScope","promptResults","nameSplit","split","generateComponentTemplate","removeComponent","componentsPattern","force","serializedResults","localResult","serialize","deleteComponents","deleteComps","deprecateComponent","newId","range","deprecateByCLIValues","undeprecateComponent","unDeprecateByCLIValues","switchLane","output","failedComponents","skipped","f","unchangedLegitimately","failed","succeed","getModifiedByConfig","modifiedComps","modified","autoTagIds","listAutoTagPendingComponentIds","autoTagComps","getMany","locallyDeletedIds","locallyDeletedComps","allComps","allIds","wsComp","getConfigForDiffByCompObject","scopeComp","hasSameDeps","dependencies","hasSameAspects","aspects","result","getDataToInitSCM","getFilesModification","pathsFromLastSnap","idStr","filesStatus","getFilesStatus","componentId","getCompFilesDirPathFromLastSnapForAllComps","compResults","getCurrentLaneName","includeScope","currentLaneId","getCurrentLaneId","isDefault","tagOrSnap","params","build","isOnMain","tag","snap","taggedComponents","snappedComponents","getCompDetails","includeSchema","debug","existsLocally","hasId","getComp","ComponentNotFound","fragments","getShowFragments","titlesToInclude","showResults","fragment","json","title","deps","getDependencies","pkg","getPackageName","pkgWithVer","compIdStr","type","lifecycle","source","getSchema","getSchemaFromRemote","publicAPI","toStringPerType","error","docsAspectFiles","Array","isArray","docs","relativePath","compositionsAspectFiles","usageExamples","fileContent","url","ComponentUrl","toUrl","includeVersion","packageName","componentLocation","isInstalledAsPackage","lockFilePath","pathExists","lockFileContent","readFile","warn","exports","dateStr","year","month","day","hours","minutes","seconds","date","getTime"],"sources":["api-for-ide.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport filenamify from 'filenamify';\nimport type { CompFiles, Workspace, FilesStatus } from '@teambit/workspace';\nimport type { PathOsBasedAbsolute, PathOsBasedRelative } from '@teambit/legacy.utils';\nimport { pathJoinLinux } from '@teambit/legacy.utils';\nimport pMap from 'p-map';\nimport type { SnappingMain } from '@teambit/snapping';\nimport type { LanesMain } from '@teambit/lanes';\nimport type { InstallMain } from '@teambit/install';\nimport type { ExportMain } from '@teambit/export';\nimport type { CheckoutMain } from '@teambit/checkout';\nimport type { ApplyVersionResults } from '@teambit/component.modules.merge-helper';\nimport type { ComponentLogMain, FileHashDiffFromParent } from '@teambit/component-log';\nimport type { LaneLog } from '@teambit/objects';\nimport type { ComponentCompareMain } from '@teambit/component-compare';\nimport type {\n GenerateResult,\n GeneratorMain,\n PromptOption,\n PromptResults,\n TemplateDescriptor,\n} from '@teambit/generator';\nimport { getParsedHistoryMetadata } from '@teambit/legacy.consumer';\nimport type { RemovedObjects } from '@teambit/legacy.scope';\nimport type { RemoveMain } from '@teambit/remove';\nimport { compact, uniq } from 'lodash';\nimport type { ConfigMain } from '@teambit/config';\nimport { LANE_REMOTE_DELIMITER, LaneId } from '@teambit/lane-id';\nimport type { ApplicationMain } from '@teambit/application';\nimport type { DeprecationMain } from '@teambit/deprecation';\nimport type { EnvsMain } from '@teambit/envs';\nimport fetch from 'node-fetch';\nimport type { GraphMain } from '@teambit/graph';\nimport type { ScopeMain } from '@teambit/scope';\nimport { ComponentNotFound } from '@teambit/scope';\nimport type { ComponentMain, ComponentMap } from '@teambit/component';\nimport type { SchemaMain } from '@teambit/schema';\nimport { ComponentUrl } from '@teambit/component.modules.component-url';\nimport type { Logger } from '@teambit/logger';\n\nconst FILES_HISTORY_DIR = 'files-history';\nconst ENV_ICONS_DIR = 'env-icons';\nconst LAST_SNAP_DIR = 'last-snap';\nconst CMD_HISTORY = 'command-history-ide';\n\ntype PathLinux = string; // problematic to get it from @teambit/legacy/dist/utils/path.\n\ntype PathFromLastSnap = { [relativeToWorkspace: PathLinux]: string };\n\ntype InitSCMEntry = {\n filesStatus: FilesStatus;\n pathsFromLastSnap: PathFromLastSnap;\n compDir: PathLinux;\n};\n\ntype DataToInitSCM = { [compId: string]: InitSCMEntry };\n\ntype LaneObj = {\n name: string;\n scope: string;\n id: string;\n log: LaneLog;\n components: Array<{ id: string; head: string }>;\n isNew: boolean;\n forkedFrom?: string;\n};\n\ntype ModifiedByConfig = {\n id: string;\n version: string;\n dependencies?: { workspace: string[]; scope: string[] };\n aspects?: { workspace: Record<string, any>; scope: Record<string, any> };\n};\n\ntype WorkspaceHistory = {\n current: PathOsBasedAbsolute;\n history: Array<{ path: PathOsBasedAbsolute; fileId: string; reason?: string }>;\n};\n\ntype CompMetadata = {\n id: string;\n isDeprecated: boolean;\n appName?: string; // in case it's an app\n env: {\n id: string;\n name?: string;\n icon: string;\n localIconPath?: string;\n };\n};\n\nexport class APIForIDE {\n private existingEnvIcons: string[] | undefined;\n constructor(\n private workspace: Workspace,\n private snapping: SnappingMain,\n private lanes: LanesMain,\n private installer: InstallMain,\n private exporter: ExportMain,\n private checkout: CheckoutMain,\n private componentLog: ComponentLogMain,\n private componentCompare: ComponentCompareMain,\n private generator: GeneratorMain,\n private remove: RemoveMain,\n private config: ConfigMain,\n private application: ApplicationMain,\n private deprecation: DeprecationMain,\n private envs: EnvsMain,\n private graph: GraphMain,\n private scope: ScopeMain,\n private component: ComponentMain,\n private schema: SchemaMain,\n private logger: Logger\n ) {}\n\n async logStartCmdHistory(op: string) {\n const str = `${op}, started`;\n await this.writeToCmdHistory(str);\n }\n\n async logFinishCmdHistory(op: string, code: number) {\n const endStr = code === 0 ? 'succeeded' : 'failed';\n const str = `${op}, ${endStr}`;\n await this.writeToCmdHistory(str);\n }\n\n getProcessPid() {\n return process.pid;\n }\n\n private async writeToCmdHistory(str: string) {\n await fs.appendFile(path.join(this.workspace.scope.path, CMD_HISTORY), `${new Date().toISOString()} ${str}\\n`);\n }\n\n async listIdsWithPaths() {\n const ids = this.workspace.listIds();\n return ids.reduce((acc, id) => {\n acc[id.toStringWithoutVersion()] = this.workspace.componentDir(id);\n return acc;\n }, {});\n }\n\n async getMainFilePath(id: string): Promise<PathOsBasedAbsolute> {\n const compId = await this.workspace.resolveComponentId(id);\n const comp = await this.workspace.get(compId);\n return path.join(this.workspace.componentDir(compId), comp.state._consumer.mainFile);\n }\n\n async getWorkspaceHistory(): Promise<WorkspaceHistory> {\n const current = this.workspace.bitMap.getPath();\n const bitmapHistoryDir = this.workspace.consumer.getBitmapHistoryDir();\n const historyPaths = await fs.readdir(bitmapHistoryDir);\n const historyMetadata = await this.workspace.consumer.getParsedBitmapHistoryMetadata();\n const history = historyPaths.map((historyPath) => {\n const fileName = path.basename(historyPath);\n const fileId = fileName.replace('.bitmap-', '');\n const reason = historyMetadata[fileId];\n return { path: path.join(bitmapHistoryDir, fileName), fileId, reason };\n });\n const historySorted = history.sort((a, b) => fileIdToTimestamp(b.fileId) - fileIdToTimestamp(a.fileId));\n\n return { current, history: historySorted };\n }\n\n async getConfigHistory(): Promise<WorkspaceHistory> {\n const workspaceConfig = this.config.workspaceConfig;\n if (!workspaceConfig) throw new Error('getConfigHistory(), workspace config is missing');\n const current = workspaceConfig.path;\n const configHistoryDir = workspaceConfig.getBackupHistoryDir();\n const historyPaths = await fs.readdir(configHistoryDir);\n const historyMetadata = await getParsedHistoryMetadata(workspaceConfig.getBackupMetadataFilePath());\n const history = historyPaths.map((historyPath) => {\n const fileName = path.basename(historyPath);\n const fileId = fileName;\n const reason = historyMetadata[fileId];\n return { path: path.join(configHistoryDir, fileName), fileId, reason };\n });\n const historySorted = history.sort((a, b) => fileIdToTimestamp(b.fileId) - fileIdToTimestamp(a.fileId));\n\n return { current, history: historySorted };\n }\n\n async importLane(\n laneName: string,\n { skipDependencyInstallation }: { skipDependencyInstallation?: boolean }\n ): Promise<string[]> {\n const results = await this.lanes.switchLanes(laneName, {\n skipDependencyInstallation,\n });\n return (results.components || []).map((c) => c.id.toString());\n }\n\n async getCurrentLaneObject(): Promise<LaneObj | undefined> {\n const currentLane = await this.lanes.getCurrentLane();\n if (!currentLane) return undefined;\n const components = currentLane.components.map((c) => {\n return {\n id: c.id.toStringWithoutVersion(),\n head: c.head.toString(),\n };\n });\n return {\n name: currentLane.name,\n scope: currentLane.scope,\n id: currentLane.id(),\n log: currentLane.log,\n components,\n isNew: currentLane.isNew,\n forkedFrom: currentLane.forkedFrom?.toString(),\n };\n }\n\n async listLanes() {\n return this.lanes.getLanes({ showDefaultLane: true });\n }\n\n async createLane(name: string) {\n if (name.includes(LANE_REMOTE_DELIMITER)) {\n const laneId = LaneId.parse(name);\n return this.lanes.createLane(laneId.name, { scope: laneId.scope });\n }\n return this.lanes.createLane(name);\n }\n\n async getCompsMetadata(): Promise<CompMetadata[]> {\n const comps = await this.workspace.list();\n const apps = await this.application.listAppsIdsAndNames();\n const results: CompMetadata[] = await pMap(\n comps,\n async (comp) => {\n const id = comp.id;\n const deprecationInfo = await this.deprecation.getDeprecationInfo(comp);\n const foundApp = apps.find((app) => app.id === id.toString());\n const env = this.envs.getEnv(comp);\n return {\n id: id.toStringWithoutVersion(),\n isDeprecated: deprecationInfo.isDeprecate,\n appName: foundApp?.name,\n env: {\n id: env.id,\n name: env.name,\n icon: env.icon,\n },\n };\n },\n { concurrency: 30 }\n );\n const allIcons = uniq(compact(results.map((r) => r.env.icon)));\n const iconsMap = await this.getEnvIconsMapFetchIfMissing(allIcons);\n results.forEach((r) => {\n r.env.localIconPath = iconsMap[r.env.icon];\n });\n return results;\n }\n\n private getEnvIconsFullPath() {\n return path.join(this.workspace.scope.path, ENV_ICONS_DIR);\n }\n\n private async getExistingEnvIcons(): Promise<string[]> {\n if (!this.existingEnvIcons) {\n const envIconsDir = this.getEnvIconsFullPath();\n await fs.ensureDir(envIconsDir);\n const existingIcons = await fs.readdir(envIconsDir);\n this.existingEnvIcons = existingIcons;\n }\n return this.existingEnvIcons;\n }\n\n private async getEnvIconsMapFetchIfMissing(icons: string[]): Promise<{ [iconHttpUrl: string]: string }> {\n const existingIcons = await this.getExistingEnvIcons();\n const iconsMap: Record<string, string> = {};\n await Promise.all(\n icons.map(async (icon) => {\n const iconFileName = filenamify(icon, { replacement: '-' });\n const fullIconPath = path.join(this.workspace.scope.path, ENV_ICONS_DIR, iconFileName);\n if (existingIcons.includes(iconFileName)) {\n iconsMap[icon] = fullIconPath;\n return;\n }\n let res;\n // download the icon from the url and save it locally.\n try {\n res = await fetch(icon);\n } catch (err: any) {\n throw new Error(`failed to get the icon from ${icon}, error: ${err.message}`);\n }\n const svgText = await res.text();\n await fs.outputFile(fullIconPath, svgText);\n iconsMap[icon] = fullIconPath;\n this.existingEnvIcons?.push(iconFileName);\n })\n );\n return iconsMap;\n }\n\n async getCompFiles(id: string): Promise<{ dirAbs: string; filesRelative: PathOsBasedRelative[] }> {\n const compId = await this.workspace.resolveComponentId(id);\n const comp = await this.workspace.get(compId);\n const dirAbs = this.workspace.componentDir(comp.id);\n const filesRelative = comp.state.filesystem.files.map((file) => file.relative);\n return { dirAbs, filesRelative };\n }\n\n async getGraphIdsAsSVG(id?: string, opts: { includeLocalOnly?: boolean } = {}): Promise<string> {\n const compId = id ? await this.workspace.resolveComponentId(id) : undefined;\n const visualGraph = await this.graph.getVisualGraphIds(compId ? [compId] : undefined, opts);\n const svg = await visualGraph.getAsSVGString();\n if (!svg) throw new Error('failed to render the graph');\n return svg;\n }\n\n async getWorkspaceDependencies(): Promise<{ [pkgName: string]: string }> {\n const allDeps = await this.workspace.getAllDedupedDirectDependencies();\n const allDepsObj = {};\n for (const dep of allDeps) {\n allDepsObj[dep.name] = dep.currentRange;\n }\n\n return allDepsObj;\n }\n\n async getCompFilesDirPathFromLastSnap(id: string): Promise<{ [relativePath: string]: string }> {\n const compId = await this.workspace.resolveComponentId(id);\n if (!compId.hasVersion()) return {}; // it's a new component.\n const compDir = this.workspace.componentDir(compId, { ignoreVersion: true }, { relative: true });\n // const dirName = filenamify(compId.toString(), { replacement: '_' });\n const filePathsRootDir = path.join(this.workspace.scope.path, FILES_HISTORY_DIR, LAST_SNAP_DIR, compDir);\n await fs.remove(filePathsRootDir); // in case it has old data\n await fs.ensureDir(filePathsRootDir);\n\n const modelComponent = await this.workspace.scope.getBitObjectModelComponent(compId);\n if (!modelComponent) {\n throw new Error(`unable to find ${compId.toString()} in the local scope, please run \"bit import\"`);\n }\n const versionObject = await this.workspace.scope.getBitObjectVersion(modelComponent, compId.version as string);\n if (!versionObject)\n throw new Error(`unable to find the Version object of ${compId.toString()}, please run \"bit import\"`);\n const sourceFiles = await versionObject.modelFilesToSourceFiles(this.workspace.scope.legacyScope.objects);\n const results: { [relativePath: string]: string } = {};\n await Promise.all(\n sourceFiles.map(async (file) => {\n const filePath = path.join(filePathsRootDir, file.relative);\n await fs.outputFile(filePath, file.contents);\n results[pathJoinLinux(compDir, file.relative)] = filePath;\n })\n );\n return results;\n }\n\n async catObject(hash: string) {\n const object = await this.workspace.scope.legacyScope.getRawObject(hash);\n return JSON.stringify(object.content.toString());\n }\n\n async logFile(filePath: string) {\n const results = await this.componentLog.getFileHistoryHashes(filePath);\n return results;\n }\n\n async blame(filePath: string) {\n const results = await this.componentLog.blame(filePath);\n return results;\n }\n\n async changedFilesFromParent(id: string): Promise<FileHashDiffFromParent[]> {\n const results = await this.componentLog.getChangedFilesFromParent(id);\n return results;\n }\n\n async getConfigForDiff(id: string) {\n const results = await this.componentCompare.getConfigForDiffById(id);\n return results;\n }\n\n async setDefaultScope(scopeName: string) {\n await this.workspace.setDefaultScope(scopeName);\n return scopeName;\n }\n\n getDefaultScope() {\n return this.workspace.defaultScope;\n }\n\n async getCompFilesDirPathFromLastSnapUsingCompFiles(\n compFiles: CompFiles\n ): Promise<{ [relativePath: string]: string }> {\n const compId = compFiles.id;\n if (!compId.hasVersion()) return {}; // it's a new component.\n const compDir = compFiles.compDir;\n const filePathsRootDir = path.join(this.workspace.scope.path, FILES_HISTORY_DIR, LAST_SNAP_DIR, compDir);\n await fs.remove(filePathsRootDir); // in case it has old data\n\n const sourceFiles = await compFiles.getHeadFiles();\n\n const results: { [relativePath: string]: string } = {};\n await Promise.all(\n sourceFiles.map(async (file) => {\n const filePath = path.join(filePathsRootDir, file.relative);\n await fs.outputFile(filePath, file.contents);\n results[pathJoinLinux(compDir, file.relative)] = filePath;\n })\n );\n return results;\n }\n\n async warmWorkspaceCache() {\n await this.workspace.warmCache();\n }\n async clearCache() {\n await this.workspace.clearCache();\n this.workspace.clearAllComponentsCache();\n }\n\n async install(options = {}, packages?: string[]): Promise<ComponentMap<string>> {\n const opts = {\n optimizeReportForNonTerminal: true,\n dedupe: true,\n updateExisting: false,\n import: false,\n ...options,\n };\n\n return this.installer.install(packages, opts);\n }\n\n async export() {\n const { componentsIds, removedIds, exportedLanes, rippleJobUrls } = await this.exporter.export();\n return {\n componentsIds: componentsIds.map((c) => c.toString()),\n removedIds: removedIds.map((c) => c.toString()),\n exportedLanes: exportedLanes.map((l) => l.id()),\n rippleJobs: rippleJobUrls, // for backward compatibility. bit-extension until 1.1.52 expects rippleJobs.\n rippleJobUrls,\n };\n }\n\n async checkoutHead() {\n const results = await this.checkout.checkout({\n head: true,\n skipNpmInstall: true,\n ids: await this.workspace.listIds(),\n });\n return this.adjustCheckoutResultsToIde(results);\n }\n\n async importObjectsIfOutdatedAgainstBitmap(): Promise<void> {\n return this.workspace.importObjectsIfOutdatedAgainstBitmap();\n }\n\n async getTemplates(): Promise<TemplateDescriptor[]> {\n const templates = await this.generator.listTemplates();\n return templates;\n }\n\n async getPromptOptionsForTemplate(templateName: string): Promise<PromptOption[] | undefined> {\n const template = await this.generator.getTemplateWithId(templateName);\n return template.template.promptOptions?.();\n }\n\n async createComponent(\n templateName: string,\n idIncludeScope: string,\n promptResults?: PromptResults\n ): Promise<GenerateResult[]> {\n if (!idIncludeScope.includes('/')) {\n throw new Error('id should include the scope name');\n }\n const [scope, ...nameSplit] = idIncludeScope.split('/');\n return this.generator.generateComponentTemplate(\n [nameSplit.join('/')],\n templateName,\n { scope },\n { optimizeReportForNonTerminal: true },\n promptResults\n );\n }\n\n async removeComponent(componentsPattern: string) {\n const results = await this.remove.remove({\n componentsPattern,\n force: true,\n });\n const serializedResults = (results.localResult as RemovedObjects).serialize();\n return serializedResults;\n }\n\n async deleteComponents(componentsPattern: string, opts): Promise<string[]> {\n const results = await this.remove.deleteComps(componentsPattern, opts);\n const serializedResults = results.map((c) => c.id.toString());\n return serializedResults;\n }\n\n async deprecateComponent(id: string, newId?: string, range?: string): Promise<boolean> {\n return this.deprecation.deprecateByCLIValues(id, newId, range);\n }\n async undeprecateComponent(id: string): Promise<boolean> {\n return this.deprecation.unDeprecateByCLIValues(id);\n }\n\n async switchLane(name: string) {\n const results = await this.lanes.switchLanes(name, { skipDependencyInstallation: true });\n return this.adjustCheckoutResultsToIde(results);\n }\n\n private adjustCheckoutResultsToIde(output: ApplyVersionResults) {\n const { components, failedComponents } = output;\n const skipped = failedComponents?.filter((f) => f.unchangedLegitimately).map((f) => f.id.toString());\n const failed = failedComponents?.filter((f) => !f.unchangedLegitimately).map((f) => f.id.toString());\n return {\n succeed: components?.map((c) => c.id.toString()),\n skipped,\n failed,\n };\n }\n\n async getModifiedByConfig(): Promise<ModifiedByConfig[]> {\n const modifiedComps = await this.workspace.modified();\n const autoTagIds = await this.workspace.listAutoTagPendingComponentIds();\n const autoTagComps = await this.workspace.getMany(autoTagIds);\n const locallyDeletedIds = await this.workspace.locallyDeletedIds();\n const locallyDeletedComps = await this.workspace.getMany(locallyDeletedIds);\n const allComps = [...modifiedComps, ...autoTagComps, ...locallyDeletedComps];\n const allIds = allComps.map((c) => c.id);\n const results = await Promise.all(\n allComps.map(async (comp) => {\n const wsComp = await this.componentCompare.getConfigForDiffByCompObject(comp, allIds);\n const scopeComp = await this.componentCompare.getConfigForDiffById(comp.id.toString());\n const hasSameDeps = JSON.stringify(wsComp.dependencies) === JSON.stringify(scopeComp.dependencies);\n const hasSameAspects = JSON.stringify(wsComp.aspects) === JSON.stringify(scopeComp.aspects);\n if (hasSameDeps && hasSameAspects) return null;\n const result: ModifiedByConfig = {\n id: comp.id.toStringWithoutVersion(),\n version: comp.id.version as string,\n };\n if (!hasSameDeps) result.dependencies = { workspace: wsComp.dependencies, scope: scopeComp.dependencies || [] };\n if (!hasSameAspects) result.aspects = { workspace: wsComp.aspects, scope: scopeComp.aspects || {} };\n return result;\n })\n );\n\n return compact(results);\n }\n\n async getDataToInitSCM(): Promise<DataToInitSCM> {\n const ids = this.workspace.listIds();\n const results: DataToInitSCM = {};\n await pMap(\n ids,\n async (id) => {\n const compFiles = await this.workspace.getFilesModification(id);\n const pathsFromLastSnap = await this.getCompFilesDirPathFromLastSnapUsingCompFiles(compFiles);\n const idStr = id.toStringWithoutVersion();\n results[idStr] = {\n filesStatus: compFiles.getFilesStatus(),\n pathsFromLastSnap,\n compDir: compFiles.compDir,\n };\n },\n { concurrency: 30 }\n );\n\n return results;\n }\n\n async getFilesStatus(id: string): Promise<FilesStatus> {\n const componentId = await this.workspace.resolveComponentId(id);\n const compFiles = await this.workspace.getFilesModification(componentId);\n return compFiles.getFilesStatus();\n }\n\n async getCompFilesDirPathFromLastSnapForAllComps(): Promise<{ [relativePath: string]: string }> {\n const ids = this.workspace.listIds();\n let results = {};\n await pMap(\n ids,\n async (id) => {\n const idStr = id.toStringWithoutVersion();\n const compResults = await this.getCompFilesDirPathFromLastSnap(idStr);\n results = { ...results, ...compResults };\n },\n { concurrency: 30 }\n );\n return results;\n }\n\n getCurrentLaneName(includeScope = false): string {\n const currentLaneId = this.workspace.getCurrentLaneId();\n if (!includeScope) return currentLaneId.name;\n if (currentLaneId.isDefault()) return currentLaneId.name;\n return currentLaneId.toString();\n }\n\n async tagOrSnap(message = '') {\n const params = { message, build: false };\n return this.workspace.isOnMain() ? this.snapping.tag(params) : this.snapping.snap(params);\n }\n\n async tag(message = ''): Promise<string[]> {\n const params = { message, build: false };\n const results = await this.snapping.tag(params);\n return (results?.taggedComponents || []).map((c) => c.id.toString());\n }\n\n async snap(message = ''): Promise<string[]> {\n const params = { message, build: false };\n const results = await this.snapping.snap(params);\n return (results?.snappedComponents || []).map((c) => c.id.toString());\n }\n\n async getCompDetails(id: string, includeSchema = false) {\n this.logger.debug(`getCompDetails(${id}, ${includeSchema})`);\n const compId = await this.workspace.resolveComponentId(id);\n const existsLocally = this.workspace.hasId(compId);\n const getComp = async () => {\n if (existsLocally) {\n return this.workspace.get(compId);\n }\n const comp = await this.scope.get(compId);\n if (comp) return comp;\n throw new ComponentNotFound(compId);\n };\n const comp = await getComp();\n\n const fragments = this.component.getShowFragments();\n const titlesToInclude = ['id', 'env', 'package name', 'files', 'dev files', 'deprecated'];\n const showResults: Record<string, any> = {};\n await Promise.all(\n fragments.map(async (fragment) => {\n const result = fragment.json ? await fragment.json(comp) : undefined;\n if (!result || !titlesToInclude.includes(result.title)) return;\n if (result.title === 'deprecated' && !result.json.isDeprecate) return; // skip if not deprecated\n showResults[result.title] = result.json;\n })\n );\n\n const deps = comp.getDependencies();\n showResults.dependencies = deps.map((dep) => {\n const pkg = dep.getPackageName?.() || dep.id;\n const pkgWithVer = `${pkg}@${dep.version}`;\n const compIdStr = dep.type === 'component' ? `, component-id: ${dep.id}` : '';\n return `${pkgWithVer} (lifecycle: ${dep.lifecycle}, type: ${dep.type}, source: ${dep.source}${compIdStr})`;\n });\n\n if (includeSchema) {\n try {\n const schema = existsLocally\n ? await this.schema.getSchema(comp)\n : await this.schema.getSchemaFromRemote(comp.id.toString());\n showResults.publicAPI = schema.toStringPerType();\n } catch (error) {\n // If schema fails, add error info instead of crashing\n showResults.publicAPI = `Error fetching schema: ${(error as Error).message}`;\n }\n }\n\n // Add docs content if available from teambit.docs/docs aspect\n try {\n const docsAspectFiles = showResults['dev files']?.[`teambit.docs/docs`];\n if (docsAspectFiles && Array.isArray(docsAspectFiles) && docsAspectFiles.length > 0) {\n showResults.docs = {};\n docsAspectFiles.forEach((relativePath: string) => {\n const file = comp.filesystem.files.find((f) => f.relative === relativePath);\n if (file) {\n showResults.docs[relativePath] = file.contents.toString();\n }\n });\n }\n } catch (error) {\n // If docs extraction fails, add error info but don't crash\n showResults.docs = `Error fetching docs: ${(error as Error).message}`;\n }\n\n // Add usage examples from teambit.compositions/compositions aspect\n try {\n const compositionsAspectFiles = showResults['dev files']?.[`teambit.compositions/compositions`];\n if (compositionsAspectFiles && Array.isArray(compositionsAspectFiles) && compositionsAspectFiles.length > 0) {\n showResults.usageExamples = {};\n compositionsAspectFiles.forEach((relativePath: string) => {\n const file = comp.filesystem.files.find((f) => f.relative === relativePath);\n if (file) {\n const fileContent = file.contents.toString();\n showResults.usageExamples[relativePath] = fileContent;\n }\n });\n }\n } catch (error) {\n // If composition extraction fails, add error info but don't crash\n showResults.usageExamples = `Error fetching usage examples: ${(error as Error).message}`;\n }\n\n showResults.url = ComponentUrl.toUrl(compId, { includeVersion: false });\n\n // Add component location status\n // Check if component exists as a package by looking it up in the pnpm lock file\n const packageName = comp.getPackageName();\n let componentLocation: string;\n\n if (existsLocally) {\n const compDir = this.workspace.componentDir(compId, { ignoreVersion: true }, { relative: true });\n componentLocation = `exists locally in the workspace at '${compDir}'`;\n } else {\n let isInstalledAsPackage = false;\n\n try {\n const lockFilePath = path.join(this.workspace.path, 'node_modules', '.pnpm', 'lock.yaml');\n if (await fs.pathExists(lockFilePath)) {\n const lockFileContent = await fs.readFile(lockFilePath, 'utf8');\n // Check if the package name exists in the lock file\n isInstalledAsPackage = lockFileContent.includes(packageName);\n }\n } catch (error) {\n this.logger.warn(`Error checking package existence for ${packageName}: ${(error as Error).message}`);\n // If error occurs during package check, default to false\n isInstalledAsPackage = false;\n }\n\n componentLocation = isInstalledAsPackage ? 'installed as a package' : 'a remote component';\n }\n\n showResults.componentLocation = componentLocation;\n\n return showResults;\n }\n}\n\nfunction fileIdToTimestamp(dateStr: string): number {\n const [year, month, day, hours, minutes, seconds] = dateStr.split('-');\n const date = new Date(Number(year), Number(month) - 1, Number(day), Number(hours), Number(minutes), Number(seconds));\n return date.getTime();\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,26 +1,26 @@
1
- import { CLIMain } from '@teambit/cli';
2
- import { ExpressMain } from '@teambit/express';
3
- import { Logger, LoggerMain } from '@teambit/logger';
4
- import { LanesMain } from '@teambit/lanes';
5
- import { RemoveMain } from '@teambit/remove';
6
- import { SnappingMain } from '@teambit/snapping';
7
- import { GeneratorMain } from '@teambit/generator';
8
- import { ComponentCompareMain } from '@teambit/component-compare';
9
- import { ComponentLogMain } from '@teambit/component-log';
10
- import { WatcherMain } from '@teambit/watcher';
11
- import { ConfigMain } from '@teambit/config';
12
- import { ExportMain } from '@teambit/export';
13
- import { CheckoutMain } from '@teambit/checkout';
14
- import { InstallMain } from '@teambit/install';
15
- import { ImporterMain } from '@teambit/importer';
16
- import { ComponentMain } from '@teambit/component';
17
- import { Workspace } from '@teambit/workspace';
18
- import { ApplicationMain } from '@teambit/application';
19
- import { DeprecationMain } from '@teambit/deprecation';
20
- import { EnvsMain } from '@teambit/envs';
21
- import { GraphMain } from '@teambit/graph';
22
- import { ScopeMain } from '@teambit/scope';
23
- import { SchemaMain } from '@teambit/schema';
1
+ import type { CLIMain } from '@teambit/cli';
2
+ import type { ExpressMain } from '@teambit/express';
3
+ import type { Logger, LoggerMain } from '@teambit/logger';
4
+ import type { LanesMain } from '@teambit/lanes';
5
+ import type { RemoveMain } from '@teambit/remove';
6
+ import type { SnappingMain } from '@teambit/snapping';
7
+ import type { GeneratorMain } from '@teambit/generator';
8
+ import type { ComponentCompareMain } from '@teambit/component-compare';
9
+ import type { ComponentLogMain } from '@teambit/component-log';
10
+ import type { WatcherMain } from '@teambit/watcher';
11
+ import type { ConfigMain } from '@teambit/config';
12
+ import type { ExportMain } from '@teambit/export';
13
+ import type { CheckoutMain } from '@teambit/checkout';
14
+ import type { InstallMain } from '@teambit/install';
15
+ import type { ImporterMain } from '@teambit/importer';
16
+ import type { ComponentMain } from '@teambit/component';
17
+ import type { Workspace } from '@teambit/workspace';
18
+ import type { ApplicationMain } from '@teambit/application';
19
+ import type { DeprecationMain } from '@teambit/deprecation';
20
+ import type { EnvsMain } from '@teambit/envs';
21
+ import type { GraphMain } from '@teambit/graph';
22
+ import type { ScopeMain } from '@teambit/scope';
23
+ import type { SchemaMain } from '@teambit/schema';
24
24
  export declare class ApiServerMain {
25
25
  private workspace;
26
26
  private logger;
@@ -34,6 +34,22 @@ export declare class ApiServerMain {
34
34
  compile: boolean;
35
35
  }): Promise<unknown>;
36
36
  writeUsedPort(port: number): void;
37
+ /**
38
+ * Monitor the parent process (typically VSCode) and shut down if it dies.
39
+ *
40
+ * On Unix-like systems (macOS, Linux), when a parent process dies, orphaned children are
41
+ * re-parented to PID 1 (init/launchd). By watching for `process.ppid` changing from
42
+ * the original value to 1, we can detect that the parent exited and proactively
43
+ * shut down the bit server to avoid leaving stale background processes running.
44
+ *
45
+ * Note: This orphan detection does not work on Windows, as Windows does not re-parent
46
+ * processes to PID 1. On Windows, this method only logs the parent process info at startup.
47
+ */
48
+ private startParentProcessMonitor;
49
+ /**
50
+ * Get the command/path of a process by its PID.
51
+ */
52
+ private getProcessInfo;
37
53
  getRandomPort(): Promise<number>;
38
54
  getExistingUsedPort(): Promise<number | undefined>;
39
55
  private getServerPortFilePath;
@@ -207,6 +207,13 @@ function _path() {
207
207
  };
208
208
  return data;
209
209
  }
210
+ function _child_process() {
211
+ const data = require("child_process");
212
+ _child_process = function () {
213
+ return data;
214
+ };
215
+ return data;
216
+ }
210
217
  function _cliRaw() {
211
218
  const data = require("./cli-raw.route");
212
219
  _cliRaw = function () {
@@ -313,18 +320,13 @@ class ApiServerMain {
313
320
  this.installer.registerPostInstall(async () => {
314
321
  (0, _harmonyModules().sendEventsToClients)('onPostInstall', {});
315
322
  });
316
- this.watcher.watch({
323
+ await this.watcher.watch({
317
324
  preCompile: false,
318
325
  compile: options.compile
319
- }).catch(err => {
320
- // don't throw an error, we don't want to break the "run" process
321
- this.logger.error('watcher found an error', err);
322
326
  });
323
327
  const port = options.port || (await this.getRandomPort());
324
328
  const app = this.express.createApp();
325
- app.use(
326
- // @ts-ignore todo: it's not clear what's the issue.
327
- (0, _cors().default)({
329
+ app.use((0, _cors().default)({
328
330
  origin(origin, callback) {
329
331
  callback(null, true);
330
332
  },
@@ -375,14 +377,34 @@ class ApiServerMain {
375
377
  proxyReq: _httpProxyMiddleware().fixRequestBody
376
378
  }
377
379
  }));
380
+ app.use('/websocket-server/subscriptions', (0, _httpProxyMiddleware().createProxyMiddleware)({
381
+ on: {
382
+ proxyReqWs: proxyReq => {
383
+ Object.entries(proxyHeaders).forEach(([key, value]) => {
384
+ proxyReq.setHeader(key, value);
385
+ });
386
+ },
387
+ error: err => {
388
+ this.logger.error('websocket cloud proxy error', err);
389
+ }
390
+ },
391
+ pathFilter: '/',
392
+ target: symphonyUrl,
393
+ ws: true,
394
+ secure: false,
395
+ // Disable SSL verification for proxy to remote server
396
+ changeOrigin: true
397
+ }));
378
398
  const server = await app.listen(port);
379
399
  return new Promise((resolve, reject) => {
380
400
  server.on('error', err => {
381
401
  reject(err);
382
402
  });
383
403
  server.on('listening', () => {
404
+ // important! if you change the message here, change it also in server-forever.ts and also in the vscode extension.
384
405
  this.logger.consoleSuccess(`Bit Server is listening on port ${port}`);
385
406
  this.writeUsedPort(port);
407
+ this.startParentProcessMonitor();
386
408
  resolve(port);
387
409
  });
388
410
  });
@@ -391,6 +413,69 @@ class ApiServerMain {
391
413
  const filePath = this.getServerPortFilePath();
392
414
  _fsExtra().default.writeFileSync(filePath, port.toString());
393
415
  }
416
+
417
+ /**
418
+ * Monitor the parent process (typically VSCode) and shut down if it dies.
419
+ *
420
+ * On Unix-like systems (macOS, Linux), when a parent process dies, orphaned children are
421
+ * re-parented to PID 1 (init/launchd). By watching for `process.ppid` changing from
422
+ * the original value to 1, we can detect that the parent exited and proactively
423
+ * shut down the bit server to avoid leaving stale background processes running.
424
+ *
425
+ * Note: This orphan detection does not work on Windows, as Windows does not re-parent
426
+ * processes to PID 1. On Windows, this method only logs the parent process info at startup.
427
+ */
428
+ startParentProcessMonitor() {
429
+ const originalPpid = process.ppid;
430
+
431
+ // Log parent process info at startup
432
+ const parentInfo = this.getProcessInfo(originalPpid);
433
+ this.logger.debug(`bit server started. PID: ${process.pid}, Parent PID: ${originalPpid}, Parent command: ${parentInfo}`);
434
+
435
+ // Skip orphan detection on Windows - PPID doesn't change to 1 when parent dies
436
+ if (process.platform === 'win32') {
437
+ return;
438
+ }
439
+ const checkInterval = 5000; // Check every 5 seconds
440
+ const intervalId = setInterval(() => {
441
+ const currentPpid = process.ppid;
442
+ // If PPID changed to 1, our parent (e.g., VSCode) died and we were re-parented to init
443
+ if (currentPpid === 1 && originalPpid !== 1) {
444
+ this.logger.debug(`Parent process died (was PID ${originalPpid}: ${parentInfo}). Current PPID is now 1 (init/launchd). Shutting down bit server.`);
445
+ clearInterval(intervalId);
446
+ process.exit(0);
447
+ }
448
+ }, checkInterval);
449
+
450
+ // Don't let this interval keep the process alive if everything else is done
451
+ intervalId.unref();
452
+ }
453
+
454
+ /**
455
+ * Get the command/path of a process by its PID.
456
+ */
457
+ getProcessInfo(pid) {
458
+ try {
459
+ if (process.platform === 'win32') {
460
+ // Windows: use PowerShell Get-CimInstance (WMIC is deprecated/removed on modern Windows)
461
+ const psCommand = `Get-CimInstance Win32_Process -Filter 'ProcessId = ${pid}' | Select-Object -ExpandProperty CommandLine`;
462
+ const output = (0, _child_process().execSync)(`powershell.exe -NoProfile -Command "${psCommand}"`, {
463
+ encoding: 'utf8',
464
+ timeout: 2000
465
+ });
466
+ return output.trim() || 'unknown';
467
+ } else {
468
+ // macOS/Linux: use ps
469
+ const output = (0, _child_process().execSync)(`ps -o command= -p ${pid}`, {
470
+ encoding: 'utf8',
471
+ timeout: 2000
472
+ });
473
+ return output.trim() || 'unknown';
474
+ }
475
+ } catch {
476
+ return 'unknown (process may have exited)';
477
+ }
478
+ }
394
479
  async getRandomPort() {
395
480
  const startingPort = 4000; // we prefer to have the ports between 4000 and 4999.
396
481
  // get random number in the range of [startingPort, 4999].
@@ -1 +1 @@
1
- {"version":3,"names":["_cli","data","require","_toolboxNetwork","_fsExtra","_interopRequireDefault","_express","_logger","_lanes","_remove","_snapping","_generator","_componentCompare","_componentLog","_watcher","_config","_export","_checkout","_install","_importer","_component","_workspace","_harmonyModules","_cors","_httpProxyMiddleware","_apiServer","_cli2","_server","_ide","_apiForIde","_sseEvents","_path","_cliRaw","_application","_deprecation","_envs","_scope","_legacy","_graph","_scope2","_schema","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","scope","registerOnPostExport","registerPostInstall","watch","preCompile","compile","catch","err","error","port","getRandomPort","app","createApp","use","cors","origin","callback","credentials","proxyHeaders","Authorization","DEFAULT_AUTH_TYPE","Http","getToken","symphonyUrl","getSymphonyUrl","createProxyMiddleware","target","changeOrigin","headers","on","req","res","writeHead","end","proxyReq","fixRequestBody","proxyRes","server","listen","Promise","resolve","reject","consoleSuccess","writeUsedPort","filePath","getServerPortFilePath","fs","writeFileSync","toString","startingPort","randomNumber","Math","floor","random","Port","getPort","getExistingUsedPort","fileContent","readFile","parseInt","code","undefined","join","path","provider","cli","loggerMain","snapping","lanes","exporter","checkout","componentLog","componentCompare","generator","remove","config","application","deprecation","envs","graph","schema","createLogger","ApiServerAspect","apiServer","register","ServerCmd","apiForIDE","APIForIDE","cliRoute","CLIRoute","cliRawRoute","CLIRawRoute","ideRoute","IDERoute","sseEventsRoute","SSEEventsRoute","exports","CLIAspect","WorkspaceAspect","LoggerAspect","ExpressAspect","WatcherAspect","SnappingAspect","LanesAspect","InstallAspect","ExportAspect","CheckoutAspect","ComponentLogAspect","ImporterAspect","ComponentCompareAspect","GeneratorAspect","RemoveAspect","ConfigAspect","ApplicationAspect","DeprecationAspect","EnvsAspect","GraphAspect","ScopeAspect","ComponentAspect","SchemaAspect","MainRuntime","addRuntime","_default"],"sources":["api-server.main.runtime.ts"],"sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { Port } from '@teambit/toolbox.network.get-port';\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 { ComponentAspect, Component, ComponentMain } 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';\nimport { CLIRawRoute } from './cli-raw.route';\nimport { ApplicationAspect, ApplicationMain } from '@teambit/application';\nimport { DeprecationAspect, DeprecationMain } from '@teambit/deprecation';\nimport { EnvsAspect, EnvsMain } from '@teambit/envs';\nimport { DEFAULT_AUTH_TYPE, Http } from '@teambit/scope.network';\nimport { getSymphonyUrl } from '@teambit/legacy.constants';\nimport { GraphAspect, GraphMain } from '@teambit/graph';\nimport { ScopeAspect, ScopeMain } from '@teambit/scope';\nimport { SchemaAspect, SchemaMain } from '@teambit/schema';\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.workspace.scope.registerOnPostExport(async () => {\n sendEventsToClients('onPostExport', {});\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 || (await this.getRandomPort());\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 const proxyHeaders = {\n Authorization: `${DEFAULT_AUTH_TYPE} ${Http.getToken()}`,\n origin: '',\n 'user-agent': 'bit-vscode-proxy',\n };\n const symphonyUrl = getSymphonyUrl();\n app.use(\n '/api/cloud-graphql',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n createProxyMiddleware({\n target: `${symphonyUrl}/graphql`,\n changeOrigin: true,\n headers: proxyHeaders,\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 app.use(\n '/api/cloud-rest',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n createProxyMiddleware({\n target: `${symphonyUrl}`,\n changeOrigin: true,\n headers: proxyHeaders,\n on: {\n proxyRes: (proxyRes) => {\n proxyRes.headers['Access-Control-Allow-Credentials'] = 'true';\n },\n error: (err, req, res) => {\n this.logger.error('rest 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 rest');\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 getRandomPort() {\n const startingPort = 4000; // we prefer to have the ports between 4000 and 4999.\n // get random number in the range of [startingPort, 4999].\n const randomNumber = Math.floor(Math.random() * (4999 - startingPort + 1) + startingPort);\n const port = await Port.getPort(randomNumber, 65500);\n return port;\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 ApplicationAspect,\n DeprecationAspect,\n EnvsAspect,\n GraphAspect,\n ScopeAspect,\n ComponentAspect,\n SchemaAspect,\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 application,\n deprecation,\n envs,\n graph,\n scope,\n component,\n schema,\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 ApplicationMain,\n DeprecationMain,\n EnvsMain,\n GraphMain,\n ScopeMain,\n ComponentMain,\n SchemaMain,\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 application,\n deprecation,\n envs,\n graph,\n scope,\n component,\n schema,\n logger\n );\n const cliRoute = new CLIRoute(logger, cli, apiForIDE);\n const cliRawRoute = new CLIRawRoute(logger, cli, apiForIDE);\n const ideRoute = 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, cliRawRoute, ideRoute, 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","_toolboxNetwork","_fsExtra","_interopRequireDefault","_express","_logger","_lanes","_remove","_snapping","_generator","_componentCompare","_componentLog","_watcher","_config","_export","_checkout","_install","_importer","_component","_workspace","_harmonyModules","_cors","_httpProxyMiddleware","_apiServer","_cli2","_server","_ide","_apiForIde","_sseEvents","_path","_child_process","_cliRaw","_application","_deprecation","_envs","_scope","_legacy","_graph","_scope2","_schema","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","scope","registerOnPostExport","registerPostInstall","watch","preCompile","compile","port","getRandomPort","app","createApp","use","cors","origin","callback","credentials","proxyHeaders","Authorization","DEFAULT_AUTH_TYPE","Http","getToken","symphonyUrl","getSymphonyUrl","createProxyMiddleware","target","changeOrigin","headers","on","error","err","req","res","writeHead","end","proxyReq","fixRequestBody","proxyRes","proxyReqWs","entries","forEach","key","setHeader","pathFilter","ws","secure","server","listen","Promise","resolve","reject","consoleSuccess","writeUsedPort","startParentProcessMonitor","filePath","getServerPortFilePath","fs","writeFileSync","toString","originalPpid","ppid","parentInfo","getProcessInfo","pid","platform","checkInterval","intervalId","setInterval","currentPpid","clearInterval","exit","unref","psCommand","output","execSync","encoding","timeout","trim","startingPort","randomNumber","Math","floor","random","Port","getPort","getExistingUsedPort","fileContent","readFile","parseInt","code","undefined","join","path","provider","cli","loggerMain","snapping","lanes","exporter","checkout","componentLog","componentCompare","generator","remove","config","application","deprecation","envs","graph","schema","createLogger","ApiServerAspect","apiServer","register","ServerCmd","apiForIDE","APIForIDE","cliRoute","CLIRoute","cliRawRoute","CLIRawRoute","ideRoute","IDERoute","sseEventsRoute","SSEEventsRoute","exports","CLIAspect","WorkspaceAspect","LoggerAspect","ExpressAspect","WatcherAspect","SnappingAspect","LanesAspect","InstallAspect","ExportAspect","CheckoutAspect","ComponentLogAspect","ImporterAspect","ComponentCompareAspect","GeneratorAspect","RemoveAspect","ConfigAspect","ApplicationAspect","DeprecationAspect","EnvsAspect","GraphAspect","ScopeAspect","ComponentAspect","SchemaAspect","MainRuntime","addRuntime","_default"],"sources":["api-server.main.runtime.ts"],"sourcesContent":["import type { CLIMain } from '@teambit/cli';\nimport { CLIAspect, MainRuntime } from '@teambit/cli';\nimport { Port } from '@teambit/toolbox.network.get-port';\nimport fs from 'fs-extra';\nimport type { ExpressMain } from '@teambit/express';\nimport { ExpressAspect } from '@teambit/express';\nimport type { Logger, LoggerMain } from '@teambit/logger';\nimport { LoggerAspect } from '@teambit/logger';\nimport type { LanesMain } from '@teambit/lanes';\nimport { LanesAspect } from '@teambit/lanes';\nimport type { RemoveMain } from '@teambit/remove';\nimport { RemoveAspect } from '@teambit/remove';\nimport type { SnappingMain } from '@teambit/snapping';\nimport { SnappingAspect } from '@teambit/snapping';\nimport type { GeneratorMain } from '@teambit/generator';\nimport { GeneratorAspect } from '@teambit/generator';\nimport type { ComponentCompareMain } from '@teambit/component-compare';\nimport { ComponentCompareAspect } from '@teambit/component-compare';\nimport type { ComponentLogMain } from '@teambit/component-log';\nimport { ComponentLogAspect } from '@teambit/component-log';\nimport type { WatcherMain } from '@teambit/watcher';\nimport { WatcherAspect } from '@teambit/watcher';\nimport type { ConfigMain } from '@teambit/config';\nimport { ConfigAspect } from '@teambit/config';\nimport type { ExportMain } from '@teambit/export';\nimport { ExportAspect } from '@teambit/export';\nimport type { CheckoutMain } from '@teambit/checkout';\nimport { CheckoutAspect } from '@teambit/checkout';\nimport type { InstallMain } from '@teambit/install';\nimport { InstallAspect } from '@teambit/install';\nimport type { ImporterMain } from '@teambit/importer';\nimport { ImporterAspect } from '@teambit/importer';\nimport type { Component, ComponentMain } from '@teambit/component';\nimport { ComponentAspect } from '@teambit/component';\nimport type { Workspace } from '@teambit/workspace';\nimport { WorkspaceAspect } 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';\nimport { execSync } from 'child_process';\nimport { CLIRawRoute } from './cli-raw.route';\nimport type { ApplicationMain } from '@teambit/application';\nimport { ApplicationAspect } from '@teambit/application';\nimport type { DeprecationMain } from '@teambit/deprecation';\nimport { DeprecationAspect } from '@teambit/deprecation';\nimport type { EnvsMain } from '@teambit/envs';\nimport { EnvsAspect } from '@teambit/envs';\nimport { DEFAULT_AUTH_TYPE, Http } from '@teambit/scope.network';\nimport { getSymphonyUrl } from '@teambit/legacy.constants';\nimport type { GraphMain } from '@teambit/graph';\nimport { GraphAspect } from '@teambit/graph';\nimport type { ScopeMain } from '@teambit/scope';\nimport { ScopeAspect } from '@teambit/scope';\nimport type { SchemaMain } from '@teambit/schema';\nimport { SchemaAspect } from '@teambit/schema';\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.workspace.scope.registerOnPostExport(async () => {\n sendEventsToClients('onPostExport', {});\n });\n\n this.installer.registerPostInstall(async () => {\n sendEventsToClients('onPostInstall', {});\n });\n\n await this.watcher.watch({\n preCompile: false,\n compile: options.compile,\n });\n\n const port = options.port || (await this.getRandomPort());\n\n const app = this.express.createApp();\n\n app.use(\n cors({\n origin(origin, callback) {\n callback(null, true);\n },\n credentials: true,\n })\n );\n const proxyHeaders = {\n Authorization: `${DEFAULT_AUTH_TYPE} ${Http.getToken()}`,\n origin: '',\n 'user-agent': 'bit-vscode-proxy',\n };\n const symphonyUrl = getSymphonyUrl();\n app.use(\n '/api/cloud-graphql',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n createProxyMiddleware({\n target: `${symphonyUrl}/graphql`,\n changeOrigin: true,\n headers: proxyHeaders,\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 app.use(\n '/api/cloud-rest',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n createProxyMiddleware({\n target: `${symphonyUrl}`,\n changeOrigin: true,\n headers: proxyHeaders,\n on: {\n proxyRes: (proxyRes) => {\n proxyRes.headers['Access-Control-Allow-Credentials'] = 'true';\n },\n error: (err, req, res) => {\n this.logger.error('rest 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 rest');\n },\n proxyReq: fixRequestBody,\n },\n })\n );\n\n app.use(\n '/websocket-server/subscriptions',\n createProxyMiddleware({\n on: {\n proxyReqWs: (proxyReq) => {\n Object.entries(proxyHeaders).forEach(([key, value]) => {\n proxyReq.setHeader(key, value);\n });\n },\n error: (err) => {\n this.logger.error('websocket cloud proxy error', err);\n },\n },\n pathFilter: '/',\n target: symphonyUrl,\n ws: true,\n secure: false, // Disable SSL verification for proxy to remote server\n changeOrigin: true,\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 // important! if you change the message here, change it also in server-forever.ts and also in the vscode extension.\n this.logger.consoleSuccess(`Bit Server is listening on port ${port}`);\n this.writeUsedPort(port);\n this.startParentProcessMonitor();\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 /**\n * Monitor the parent process (typically VSCode) and shut down if it dies.\n *\n * On Unix-like systems (macOS, Linux), when a parent process dies, orphaned children are\n * re-parented to PID 1 (init/launchd). By watching for `process.ppid` changing from\n * the original value to 1, we can detect that the parent exited and proactively\n * shut down the bit server to avoid leaving stale background processes running.\n *\n * Note: This orphan detection does not work on Windows, as Windows does not re-parent\n * processes to PID 1. On Windows, this method only logs the parent process info at startup.\n */\n private startParentProcessMonitor() {\n const originalPpid = process.ppid;\n\n // Log parent process info at startup\n const parentInfo = this.getProcessInfo(originalPpid);\n this.logger.debug(\n `bit server started. PID: ${process.pid}, Parent PID: ${originalPpid}, Parent command: ${parentInfo}`\n );\n\n // Skip orphan detection on Windows - PPID doesn't change to 1 when parent dies\n if (process.platform === 'win32') {\n return;\n }\n\n const checkInterval = 5000; // Check every 5 seconds\n const intervalId = setInterval(() => {\n const currentPpid = process.ppid;\n // If PPID changed to 1, our parent (e.g., VSCode) died and we were re-parented to init\n if (currentPpid === 1 && originalPpid !== 1) {\n this.logger.debug(\n `Parent process died (was PID ${originalPpid}: ${parentInfo}). Current PPID is now 1 (init/launchd). Shutting down bit server.`\n );\n clearInterval(intervalId);\n process.exit(0);\n }\n }, checkInterval);\n\n // Don't let this interval keep the process alive if everything else is done\n intervalId.unref();\n }\n\n /**\n * Get the command/path of a process by its PID.\n */\n private getProcessInfo(pid: number): string {\n try {\n if (process.platform === 'win32') {\n // Windows: use PowerShell Get-CimInstance (WMIC is deprecated/removed on modern Windows)\n const psCommand = `Get-CimInstance Win32_Process -Filter 'ProcessId = ${pid}' | Select-Object -ExpandProperty CommandLine`;\n const output = execSync(`powershell.exe -NoProfile -Command \"${psCommand}\"`, {\n encoding: 'utf8',\n timeout: 2000,\n });\n return output.trim() || 'unknown';\n } else {\n // macOS/Linux: use ps\n const output = execSync(`ps -o command= -p ${pid}`, { encoding: 'utf8', timeout: 2000 });\n return output.trim() || 'unknown';\n }\n } catch {\n return 'unknown (process may have exited)';\n }\n }\n\n async getRandomPort() {\n const startingPort = 4000; // we prefer to have the ports between 4000 and 4999.\n // get random number in the range of [startingPort, 4999].\n const randomNumber = Math.floor(Math.random() * (4999 - startingPort + 1) + startingPort);\n const port = await Port.getPort(randomNumber, 65500);\n return port;\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 ApplicationAspect,\n DeprecationAspect,\n EnvsAspect,\n GraphAspect,\n ScopeAspect,\n ComponentAspect,\n SchemaAspect,\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 application,\n deprecation,\n envs,\n graph,\n scope,\n component,\n schema,\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 ApplicationMain,\n DeprecationMain,\n EnvsMain,\n GraphMain,\n ScopeMain,\n ComponentMain,\n SchemaMain,\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 application,\n deprecation,\n envs,\n graph,\n scope,\n component,\n schema,\n logger\n );\n const cliRoute = new CLIRoute(logger, cli, apiForIDE);\n const cliRawRoute = new CLIRawRoute(logger, cli, apiForIDE);\n const ideRoute = 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, cliRawRoute, ideRoute, sseEventsRoute]);\n }\n\n return apiServer;\n }\n}\n\nApiServerAspect.addRuntime(ApiServerMain);\n\nexport default ApiServerMain;\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
- import { CLIMain } from '@teambit/cli';
2
- import { Route, Request, Response } from '@teambit/express';
3
- import { Logger } from '@teambit/logger';
4
- import { APIForIDE } from './api-for-ide';
1
+ import type { CLIMain } from '@teambit/cli';
2
+ import type { Route, Request, Response } from '@teambit/express';
3
+ import type { Logger } from '@teambit/logger';
4
+ import type { APIForIDE } from './api-for-ide';
5
5
  /**
6
6
  * example usage:
7
7
  * post to http://localhost:3000/api/cli
@@ -18,6 +18,13 @@ function _fsExtra() {
18
18
  };
19
19
  return data;
20
20
  }
21
+ function _path() {
22
+ const data = _interopRequireDefault(require("path"));
23
+ _path = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
21
28
  function _chalk() {
22
29
  const data = _interopRequireDefault(require("chalk"));
23
30
  _chalk = function () {
@@ -75,8 +82,23 @@ class CLIRawRoute {
75
82
  isPty
76
83
  } = req.body;
77
84
  this.logger.debug(`cli-raw server: got request for ${command}`);
78
- if (pwd && !pwd.startsWith(process.cwd())) {
79
- throw new Error(`bit-server is running on a different directory. bit-server: ${process.cwd()}, pwd: ${pwd}`);
85
+
86
+ // Validate pwd parameter to prevent path traversal
87
+ if (pwd) {
88
+ const resolvedPwd = _path().default.resolve(pwd);
89
+ const currentDir = process.cwd();
90
+ if (!resolvedPwd.startsWith(currentDir)) {
91
+ throw new Error(`Invalid pwd parameter. bit-server: ${currentDir}, pwd: ${pwd}`);
92
+ }
93
+ }
94
+
95
+ // Validate ttyPath parameter to prevent path traversal
96
+ if (ttyPath) {
97
+ // ttyPath should be a legitimate terminal device path (e.g., /dev/ttys000, /dev/pts/0)
98
+ // Validate it's a device path and doesn't contain traversal sequences
99
+ if (ttyPath.includes('..') || !(ttyPath.startsWith('/dev/') || ttyPath.startsWith('/proc/'))) {
100
+ throw new Error(`Invalid ttyPath parameter. Must be a legitimate terminal device path.`);
101
+ }
80
102
  }
81
103
  // there are 3 methods to interact with bit-server: 1) SSE, 2) TTY, 3) PTY. See server-commander.ts for more info.
82
104
  const isSSE = !ttyPath && !isPty;
@@ -1 +1 @@
1
- {"version":3,"names":["_cli","data","require","_fsExtra","_interopRequireDefault","_chalk","_legacy","_harmonyModules","_legacy2","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","CLIRawRoute","constructor","logger","cli","apiForIDE","req","res","command","pwd","envBitFeatures","ttyPath","isPty","body","debug","startsWith","process","cwd","Error","isSSE","originalStdoutWrite","stdout","write","originalStderrWrite","stderr","fileHandle","fs","open","chunk","encoding","callback","writeSync","toString","env","BIT_CLI_SERVER_NO_TTY","loader","shouldSendServerEvents","currentLogger","levelFromArgv","getLevelFromArgv","legacyLogger","switchToConsoleLogger","switchToSSELogger","currentBitFeatures","BIT_FEATURES","shouldReloadFeatureToggle","reloadFeatureToggle","randomNumber","Math","floor","random","commandStr","join","cmdStrLog","logStartCmdHistory","isDaemon","enableChalk","cliParser","CLIParser","commands","groups","onCommandStartSlot","commandRunner","parse","result","runCommand","logFinishCmdHistory","clearStatusLine","json","err","YargsExitWorkaround","helpMsg","exitCode","error","status","jsonp","message","chalk","level","switchToLogger","exports"],"sources":["cli-raw.route.ts"],"sourcesContent":["import { CLIMain, CLIParser, YargsExitWorkaround } from '@teambit/cli';\nimport fs from 'fs-extra';\nimport chalk from 'chalk';\nimport { Route, Request, Response } from '@teambit/express';\nimport { Logger } from '@teambit/logger';\nimport { logger as legacyLogger, getLevelFromArgv } from '@teambit/legacy.logger';\nimport { reloadFeatureToggle } from '@teambit/harmony.modules.feature-toggle';\nimport { loader } from '@teambit/legacy.loader';\nimport { APIForIDE } from './api-for-ide';\n\n/**\n * example usage:\n * post to http://localhost:3000/api/cli\n * with the following json as the body\n *\n{\n \"command\": [\"tag comp1 --build\"]\n}\n */\nexport class CLIRawRoute implements Route {\n constructor(\n private logger: Logger,\n private cli: CLIMain,\n private apiForIDE: APIForIDE\n ) {}\n\n method = 'post';\n route = '/cli-raw';\n\n middlewares = [\n async (req: Request, res: Response) => {\n const { command, pwd, envBitFeatures, ttyPath, isPty } = req.body;\n this.logger.debug(`cli-raw server: got request for ${command}`);\n if (pwd && !pwd.startsWith(process.cwd())) {\n throw new Error(`bit-server is running on a different directory. bit-server: ${process.cwd()}, pwd: ${pwd}`);\n }\n // there are 3 methods to interact with bit-server: 1) SSE, 2) TTY, 3) PTY. See server-commander.ts for more info.\n const isSSE = !ttyPath && !isPty;\n\n // save the original process.stdout.write method\n const originalStdoutWrite = process.stdout.write;\n const originalStderrWrite = process.stderr.write;\n\n if (ttyPath) {\n const fileHandle = await fs.open(ttyPath, 'w');\n // @ts-ignore monkey patch the process stdout write method\n process.stdout.write = (chunk, encoding, callback) => {\n fs.writeSync(fileHandle, chunk.toString());\n return originalStdoutWrite.call(process.stdout, chunk, encoding, callback);\n };\n // @ts-ignore monkey patch the process stderr write method\n process.stderr.write = (chunk, encoding, callback) => {\n fs.writeSync(fileHandle, chunk.toString());\n return originalStderrWrite.call(process.stdout, chunk, encoding, callback);\n };\n }\n if (isSSE) {\n process.env.BIT_CLI_SERVER_NO_TTY = 'true';\n loader.shouldSendServerEvents = true;\n }\n\n let currentLogger;\n const levelFromArgv = getLevelFromArgv(command);\n if (levelFromArgv) {\n currentLogger = legacyLogger.logger;\n if (ttyPath || isPty) {\n legacyLogger.switchToConsoleLogger(levelFromArgv);\n }\n if (isSSE) {\n legacyLogger.switchToSSELogger(levelFromArgv);\n }\n }\n\n const currentBitFeatures = process.env.BIT_FEATURES;\n const shouldReloadFeatureToggle = currentBitFeatures !== envBitFeatures;\n if (shouldReloadFeatureToggle) {\n process.env.BIT_FEATURES = envBitFeatures;\n reloadFeatureToggle();\n }\n\n const randomNumber = Math.floor(Math.random() * 10000); // helps to distinguish between commands in the log\n const commandStr = command.join(' ');\n const cmdStrLog = `${randomNumber} ${commandStr}`;\n await this.apiForIDE.logStartCmdHistory(cmdStrLog);\n legacyLogger.isDaemon = true;\n enableChalk();\n const cliParser = new CLIParser(this.cli.commands, this.cli.groups, this.cli.onCommandStartSlot);\n try {\n const commandRunner = await cliParser.parse(command);\n const result = await commandRunner.runCommand(true);\n await this.apiForIDE.logFinishCmdHistory(cmdStrLog, 0);\n this.logger.clearStatusLine();\n res.json(result);\n } catch (err: any) {\n this.logger.clearStatusLine();\n if (err instanceof YargsExitWorkaround) {\n res.json({ data: err.helpMsg, exitCode: err.exitCode });\n } else {\n this.logger.error(`cli-raw server: got an error for ${commandStr}`, err);\n await this.apiForIDE.logFinishCmdHistory(cmdStrLog, 1);\n res.status(500);\n res.jsonp({\n message: err.message,\n error: err,\n });\n }\n } finally {\n // important! at this stage, don't write to stdout/stderr anymore, e.g. don't do \"this.logger.clearStatusLine()\"\n // because the socket (for pty) is already closed.\n if (ttyPath) {\n process.stdout.write = originalStdoutWrite;\n process.stderr.write = originalStderrWrite;\n }\n if (isSSE) {\n delete process.env.BIT_CLI_SERVER_NO_TTY;\n loader.shouldSendServerEvents = false;\n }\n // change chalk back to false, otherwise, the IDE will have colors. (this is a global setting)\n chalk.level = 0;\n if (shouldReloadFeatureToggle) {\n process.env.BIT_FEATURES = currentBitFeatures;\n reloadFeatureToggle();\n }\n if (currentLogger) {\n legacyLogger.switchToLogger(currentLogger);\n }\n }\n },\n ];\n}\n\n/**\n * because this gets called from the express server, which gets spawn from a script, chalk defaults to false.\n * only when calling this route from the terminal, we want colors. on the IDE, we don't want colors.\n */\nfunction enableChalk() {\n chalk.level = 3;\n}\n"],"mappings":";;;;;;AAAA,SAAAA,KAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,IAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,SAAA;EAAA,MAAAF,IAAA,GAAAG,sBAAA,CAAAF,OAAA;EAAAC,QAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAI,OAAA;EAAA,MAAAJ,IAAA,GAAAG,sBAAA,CAAAF,OAAA;EAAAG,MAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAGA,SAAAK,QAAA;EAAA,MAAAL,IAAA,GAAAC,OAAA;EAAAI,OAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAM,gBAAA;EAAA,MAAAN,IAAA,GAAAC,OAAA;EAAAK,eAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAO,SAAA;EAAA,MAAAP,IAAA,GAAAC,OAAA;EAAAM,QAAA,YAAAA,CAAA;IAAA,OAAAP,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAgD,SAAAG,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,gBAAAH,CAAA,EAAAI,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAJ,CAAA,GAAAO,MAAA,CAAAC,cAAA,CAAAR,CAAA,EAAAI,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAZ,CAAA,CAAAI,CAAA,IAAAC,CAAA,EAAAL,CAAA;AAAA,SAAAM,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,MAAAL,CAAA,GAAAK,CAAA,CAAAU,MAAA,CAAAC,WAAA,kBAAAhB,CAAA,QAAAa,CAAA,GAAAb,CAAA,CAAAiB,IAAA,CAAAZ,CAAA,EAAAD,CAAA,uCAAAS,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAAd,CAAA,GAAAe,MAAA,GAAAC,MAAA,EAAAf,CAAA;AAGhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMgB,WAAW,CAAkB;EACxCC,WAAWA,CACDC,MAAc,EACdC,GAAY,EACZC,SAAoB,EAC5B;IAAA,KAHQF,MAAc,GAAdA,MAAc;IAAA,KACdC,GAAY,GAAZA,GAAY;IAAA,KACZC,SAAoB,GAApBA,SAAoB;IAAAtB,eAAA,iBAGrB,MAAM;IAAAA,eAAA,gBACP,UAAU;IAAAA,eAAA,sBAEJ,CACZ,OAAOuB,GAAY,EAAEC,GAAa,KAAK;MACrC,MAAM;QAAEC,OAAO;QAAEC,GAAG;QAAEC,cAAc;QAAEC,OAAO;QAAEC;MAAM,CAAC,GAAGN,GAAG,CAACO,IAAI;MACjE,IAAI,CAACV,MAAM,CAACW,KAAK,CAAC,mCAAmCN,OAAO,EAAE,CAAC;MAC/D,IAAIC,GAAG,IAAI,CAACA,GAAG,CAACM,UAAU,CAACC,OAAO,CAACC,GAAG,CAAC,CAAC,CAAC,EAAE;QACzC,MAAM,IAAIC,KAAK,CAAC,+DAA+DF,OAAO,CAACC,GAAG,CAAC,CAAC,UAAUR,GAAG,EAAE,CAAC;MAC9G;MACA;MACA,MAAMU,KAAK,GAAG,CAACR,OAAO,IAAI,CAACC,KAAK;;MAEhC;MACA,MAAMQ,mBAAmB,GAAGJ,OAAO,CAACK,MAAM,CAACC,KAAK;MAChD,MAAMC,mBAAmB,GAAGP,OAAO,CAACQ,MAAM,CAACF,KAAK;MAEhD,IAAIX,OAAO,EAAE;QACX,MAAMc,UAAU,GAAG,MAAMC,kBAAE,CAACC,IAAI,CAAChB,OAAO,EAAE,GAAG,CAAC;QAC9C;QACAK,OAAO,CAACK,MAAM,CAACC,KAAK,GAAG,CAACM,KAAK,EAAEC,QAAQ,EAAEC,QAAQ,KAAK;UACpDJ,kBAAE,CAACK,SAAS,CAACN,UAAU,EAAEG,KAAK,CAACI,QAAQ,CAAC,CAAC,CAAC;UAC1C,OAAOZ,mBAAmB,CAACvB,IAAI,CAACmB,OAAO,CAACK,MAAM,EAAEO,KAAK,EAAEC,QAAQ,EAAEC,QAAQ,CAAC;QAC5E,CAAC;QACD;QACAd,OAAO,CAACQ,MAAM,CAACF,KAAK,GAAG,CAACM,KAAK,EAAEC,QAAQ,EAAEC,QAAQ,KAAK;UACpDJ,kBAAE,CAACK,SAAS,CAACN,UAAU,EAAEG,KAAK,CAACI,QAAQ,CAAC,CAAC,CAAC;UAC1C,OAAOT,mBAAmB,CAAC1B,IAAI,CAACmB,OAAO,CAACK,MAAM,EAAEO,KAAK,EAAEC,QAAQ,EAAEC,QAAQ,CAAC;QAC5E,CAAC;MACH;MACA,IAAIX,KAAK,EAAE;QACTH,OAAO,CAACiB,GAAG,CAACC,qBAAqB,GAAG,MAAM;QAC1CC,iBAAM,CAACC,sBAAsB,GAAG,IAAI;MACtC;MAEA,IAAIC,aAAa;MACjB,MAAMC,aAAa,GAAG,IAAAC,0BAAgB,EAAC/B,OAAO,CAAC;MAC/C,IAAI8B,aAAa,EAAE;QACjBD,aAAa,GAAGG,gBAAY,CAACrC,MAAM;QACnC,IAAIQ,OAAO,IAAIC,KAAK,EAAE;UACpB4B,gBAAY,CAACC,qBAAqB,CAACH,aAAa,CAAC;QACnD;QACA,IAAInB,KAAK,EAAE;UACTqB,gBAAY,CAACE,iBAAiB,CAACJ,aAAa,CAAC;QAC/C;MACF;MAEA,MAAMK,kBAAkB,GAAG3B,OAAO,CAACiB,GAAG,CAACW,YAAY;MACnD,MAAMC,yBAAyB,GAAGF,kBAAkB,KAAKjC,cAAc;MACvE,IAAImC,yBAAyB,EAAE;QAC7B7B,OAAO,CAACiB,GAAG,CAACW,YAAY,GAAGlC,cAAc;QACzC,IAAAoC,qCAAmB,EAAC,CAAC;MACvB;MAEA,MAAMC,YAAY,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;MACxD,MAAMC,UAAU,GAAG3C,OAAO,CAAC4C,IAAI,CAAC,GAAG,CAAC;MACpC,MAAMC,SAAS,GAAG,GAAGN,YAAY,IAAII,UAAU,EAAE;MACjD,MAAM,IAAI,CAAC9C,SAAS,CAACiD,kBAAkB,CAACD,SAAS,CAAC;MAClDb,gBAAY,CAACe,QAAQ,GAAG,IAAI;MAC5BC,WAAW,CAAC,CAAC;MACb,MAAMC,SAAS,GAAG,KAAIC,gBAAS,EAAC,IAAI,CAACtD,GAAG,CAACuD,QAAQ,EAAE,IAAI,CAACvD,GAAG,CAACwD,MAAM,EAAE,IAAI,CAACxD,GAAG,CAACyD,kBAAkB,CAAC;MAChG,IAAI;QACF,MAAMC,aAAa,GAAG,MAAML,SAAS,CAACM,KAAK,CAACvD,OAAO,CAAC;QACpD,MAAMwD,MAAM,GAAG,MAAMF,aAAa,CAACG,UAAU,CAAC,IAAI,CAAC;QACnD,MAAM,IAAI,CAAC5D,SAAS,CAAC6D,mBAAmB,CAACb,SAAS,EAAE,CAAC,CAAC;QACtD,IAAI,CAAClD,MAAM,CAACgE,eAAe,CAAC,CAAC;QAC7B5D,GAAG,CAAC6D,IAAI,CAACJ,MAAM,CAAC;MAClB,CAAC,CAAC,OAAOK,GAAQ,EAAE;QACjB,IAAI,CAAClE,MAAM,CAACgE,eAAe,CAAC,CAAC;QAC7B,IAAIE,GAAG,YAAYC,0BAAmB,EAAE;UACtC/D,GAAG,CAAC6D,IAAI,CAAC;YAAEhG,IAAI,EAAEiG,GAAG,CAACE,OAAO;YAAEC,QAAQ,EAAEH,GAAG,CAACG;UAAS,CAAC,CAAC;QACzD,CAAC,MAAM;UACL,IAAI,CAACrE,MAAM,CAACsE,KAAK,CAAC,oCAAoCtB,UAAU,EAAE,EAAEkB,GAAG,CAAC;UACxE,MAAM,IAAI,CAAChE,SAAS,CAAC6D,mBAAmB,CAACb,SAAS,EAAE,CAAC,CAAC;UACtD9C,GAAG,CAACmE,MAAM,CAAC,GAAG,CAAC;UACfnE,GAAG,CAACoE,KAAK,CAAC;YACRC,OAAO,EAAEP,GAAG,CAACO,OAAO;YACpBH,KAAK,EAAEJ;UACT,CAAC,CAAC;QACJ;MACF,CAAC,SAAS;QACR;QACA;QACA,IAAI1D,OAAO,EAAE;UACXK,OAAO,CAACK,MAAM,CAACC,KAAK,GAAGF,mBAAmB;UAC1CJ,OAAO,CAACQ,MAAM,CAACF,KAAK,GAAGC,mBAAmB;QAC5C;QACA,IAAIJ,KAAK,EAAE;UACT,OAAOH,OAAO,CAACiB,GAAG,CAACC,qBAAqB;UACxCC,iBAAM,CAACC,sBAAsB,GAAG,KAAK;QACvC;QACA;QACAyC,gBAAK,CAACC,KAAK,GAAG,CAAC;QACf,IAAIjC,yBAAyB,EAAE;UAC7B7B,OAAO,CAACiB,GAAG,CAACW,YAAY,GAAGD,kBAAkB;UAC7C,IAAAG,qCAAmB,EAAC,CAAC;QACvB;QACA,IAAIT,aAAa,EAAE;UACjBG,gBAAY,CAACuC,cAAc,CAAC1C,aAAa,CAAC;QAC5C;MACF;IACF,CAAC,CACF;EAxGE;AAyGL;;AAEA;AACA;AACA;AACA;AAHA2C,OAAA,CAAA/E,WAAA,GAAAA,WAAA;AAIA,SAASuD,WAAWA,CAAA,EAAG;EACrBqB,gBAAK,CAACC,KAAK,GAAG,CAAC;AACjB","ignoreList":[]}
1
+ {"version":3,"names":["_cli","data","require","_fsExtra","_interopRequireDefault","_path","_chalk","_legacy","_harmonyModules","_legacy2","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","CLIRawRoute","constructor","logger","cli","apiForIDE","req","res","command","pwd","envBitFeatures","ttyPath","isPty","body","debug","resolvedPwd","path","resolve","currentDir","process","cwd","startsWith","Error","includes","isSSE","originalStdoutWrite","stdout","write","originalStderrWrite","stderr","fileHandle","fs","open","chunk","encoding","callback","writeSync","toString","env","BIT_CLI_SERVER_NO_TTY","loader","shouldSendServerEvents","currentLogger","levelFromArgv","getLevelFromArgv","legacyLogger","switchToConsoleLogger","switchToSSELogger","currentBitFeatures","BIT_FEATURES","shouldReloadFeatureToggle","reloadFeatureToggle","randomNumber","Math","floor","random","commandStr","join","cmdStrLog","logStartCmdHistory","isDaemon","enableChalk","cliParser","CLIParser","commands","groups","onCommandStartSlot","commandRunner","parse","result","runCommand","logFinishCmdHistory","clearStatusLine","json","err","YargsExitWorkaround","helpMsg","exitCode","error","status","jsonp","message","chalk","level","switchToLogger","exports"],"sources":["cli-raw.route.ts"],"sourcesContent":["import type { CLIMain } from '@teambit/cli';\nimport { CLIParser, YargsExitWorkaround } from '@teambit/cli';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport type { Route, Request, Response } from '@teambit/express';\nimport type { Logger } from '@teambit/logger';\nimport { logger as legacyLogger, getLevelFromArgv } from '@teambit/legacy.logger';\nimport { reloadFeatureToggle } from '@teambit/harmony.modules.feature-toggle';\nimport { loader } from '@teambit/legacy.loader';\nimport type { APIForIDE } from './api-for-ide';\n\n/**\n * example usage:\n * post to http://localhost:3000/api/cli\n * with the following json as the body\n *\n{\n \"command\": [\"tag comp1 --build\"]\n}\n */\nexport class CLIRawRoute implements Route {\n constructor(\n private logger: Logger,\n private cli: CLIMain,\n private apiForIDE: APIForIDE\n ) {}\n\n method = 'post';\n route = '/cli-raw';\n\n middlewares = [\n async (req: Request, res: Response) => {\n const { command, pwd, envBitFeatures, ttyPath, isPty } = req.body;\n this.logger.debug(`cli-raw server: got request for ${command}`);\n\n // Validate pwd parameter to prevent path traversal\n if (pwd) {\n const resolvedPwd = path.resolve(pwd);\n const currentDir = process.cwd();\n if (!resolvedPwd.startsWith(currentDir)) {\n throw new Error(`Invalid pwd parameter. bit-server: ${currentDir}, pwd: ${pwd}`);\n }\n }\n\n // Validate ttyPath parameter to prevent path traversal\n if (ttyPath) {\n // ttyPath should be a legitimate terminal device path (e.g., /dev/ttys000, /dev/pts/0)\n // Validate it's a device path and doesn't contain traversal sequences\n if (ttyPath.includes('..') || !(ttyPath.startsWith('/dev/') || ttyPath.startsWith('/proc/'))) {\n throw new Error(`Invalid ttyPath parameter. Must be a legitimate terminal device path.`);\n }\n }\n // there are 3 methods to interact with bit-server: 1) SSE, 2) TTY, 3) PTY. See server-commander.ts for more info.\n const isSSE = !ttyPath && !isPty;\n\n // save the original process.stdout.write method\n const originalStdoutWrite = process.stdout.write;\n const originalStderrWrite = process.stderr.write;\n\n if (ttyPath) {\n const fileHandle = await fs.open(ttyPath, 'w');\n // @ts-ignore monkey patch the process stdout write method\n process.stdout.write = (chunk, encoding, callback) => {\n fs.writeSync(fileHandle, chunk.toString());\n return originalStdoutWrite.call(process.stdout, chunk, encoding, callback);\n };\n // @ts-ignore monkey patch the process stderr write method\n process.stderr.write = (chunk, encoding, callback) => {\n fs.writeSync(fileHandle, chunk.toString());\n return originalStderrWrite.call(process.stdout, chunk, encoding, callback);\n };\n }\n if (isSSE) {\n process.env.BIT_CLI_SERVER_NO_TTY = 'true';\n loader.shouldSendServerEvents = true;\n }\n\n let currentLogger;\n const levelFromArgv = getLevelFromArgv(command);\n if (levelFromArgv) {\n currentLogger = legacyLogger.logger;\n if (ttyPath || isPty) {\n legacyLogger.switchToConsoleLogger(levelFromArgv);\n }\n if (isSSE) {\n legacyLogger.switchToSSELogger(levelFromArgv);\n }\n }\n\n const currentBitFeatures = process.env.BIT_FEATURES;\n const shouldReloadFeatureToggle = currentBitFeatures !== envBitFeatures;\n if (shouldReloadFeatureToggle) {\n process.env.BIT_FEATURES = envBitFeatures;\n reloadFeatureToggle();\n }\n\n const randomNumber = Math.floor(Math.random() * 10000); // helps to distinguish between commands in the log\n const commandStr = command.join(' ');\n const cmdStrLog = `${randomNumber} ${commandStr}`;\n await this.apiForIDE.logStartCmdHistory(cmdStrLog);\n legacyLogger.isDaemon = true;\n enableChalk();\n const cliParser = new CLIParser(this.cli.commands, this.cli.groups, this.cli.onCommandStartSlot);\n try {\n const commandRunner = await cliParser.parse(command);\n const result = await commandRunner.runCommand(true);\n await this.apiForIDE.logFinishCmdHistory(cmdStrLog, 0);\n this.logger.clearStatusLine();\n res.json(result);\n } catch (err: any) {\n this.logger.clearStatusLine();\n if (err instanceof YargsExitWorkaround) {\n res.json({ data: err.helpMsg, exitCode: err.exitCode });\n } else {\n this.logger.error(`cli-raw server: got an error for ${commandStr}`, err);\n await this.apiForIDE.logFinishCmdHistory(cmdStrLog, 1);\n res.status(500);\n res.jsonp({\n message: err.message,\n error: err,\n });\n }\n } finally {\n // important! at this stage, don't write to stdout/stderr anymore, e.g. don't do \"this.logger.clearStatusLine()\"\n // because the socket (for pty) is already closed.\n if (ttyPath) {\n process.stdout.write = originalStdoutWrite;\n process.stderr.write = originalStderrWrite;\n }\n if (isSSE) {\n delete process.env.BIT_CLI_SERVER_NO_TTY;\n loader.shouldSendServerEvents = false;\n }\n // change chalk back to false, otherwise, the IDE will have colors. (this is a global setting)\n chalk.level = 0;\n if (shouldReloadFeatureToggle) {\n process.env.BIT_FEATURES = currentBitFeatures;\n reloadFeatureToggle();\n }\n if (currentLogger) {\n legacyLogger.switchToLogger(currentLogger);\n }\n }\n },\n ];\n}\n\n/**\n * because this gets called from the express server, which gets spawn from a script, chalk defaults to false.\n * only when calling this route from the terminal, we want colors. on the IDE, we don't want colors.\n */\nfunction enableChalk() {\n chalk.level = 3;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
- import { CLIMain } from '@teambit/cli';
2
- import { Route, Request, Response } from '@teambit/express';
3
- import { Logger } from '@teambit/logger';
4
- import { APIForIDE } from './api-for-ide';
1
+ import type { CLIMain } from '@teambit/cli';
2
+ import type { Route, Request, Response } from '@teambit/express';
3
+ import type { Logger } from '@teambit/logger';
4
+ import type { APIForIDE } from './api-for-ide';
5
5
  /**
6
6
  * example usage:
7
7
  * post to http://localhost:3000/api/cli/list
@@ -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","getCommandByNameOrAlias","Error","body","args","options","format","outputMethod","optsToString","keys","map","key","join","argsStr","optsStr","cmdStr","msgStart","info","console","log","randomNumber","Math","floor","random","logStartCmdHistory","optionsAsCamelCase","reduce","acc","camelCaseKey","camelCase","startTask","process","hrtime","result","clearStatusLine","duration","prettyTime","msgEnd","logFinishCmdHistory","json","exitCode","code","err","msgErr","message","error","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(\n private logger: Logger,\n private cli: CLIMain,\n private apiForIDE: APIForIDE\n ) {}\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.getCommandByNameOrAlias(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 // don't use \"logger.console\" here, we don't want these message to pollute cli-raw output\n const msgStart = `[*] started a new ${outputMethod} command: ${cmdStr}`;\n this.logger.info(msgStart);\n console.log(msgStart); // eslint-disable-line no-console\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 this.logger.clearStatusLine();\n const duration = prettyTime(process.hrtime(startTask));\n const msgEnd = `✔ command \"${req.params.cmd}\" had been completed in ${duration}`;\n this.logger.info(msgEnd);\n console.log(msgEnd); // eslint-disable-line no-console\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 const msgErr = `command \"${req.params.cmd}\" had failed. ${err.message}`;\n this.logger.error(msgErr, err);\n console.error(msgErr); // eslint-disable-line no-console\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","_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","getCommandByNameOrAlias","Error","body","args","options","format","outputMethod","optsToString","keys","map","key","join","argsStr","optsStr","cmdStr","msgStart","info","console","log","randomNumber","Math","floor","random","logStartCmdHistory","optionsAsCamelCase","reduce","acc","camelCaseKey","camelCase","startTask","process","hrtime","result","clearStatusLine","duration","prettyTime","msgEnd","logFinishCmdHistory","json","exitCode","code","err","msgErr","message","error","status","jsonp","exports"],"sources":["cli.route.ts"],"sourcesContent":["import type { CLIMain } from '@teambit/cli';\nimport prettyTime from 'pretty-time';\nimport type { Route, Request, Response } from '@teambit/express';\nimport type { Logger } from '@teambit/logger';\nimport { camelCase } from 'lodash';\nimport type { 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(\n private logger: Logger,\n private cli: CLIMain,\n private apiForIDE: APIForIDE\n ) {}\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.getCommandByNameOrAlias(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 // don't use \"logger.console\" here, we don't want these message to pollute cli-raw output\n const msgStart = `[*] started a new ${outputMethod} command: ${cmdStr}`;\n this.logger.info(msgStart);\n console.log(msgStart); // eslint-disable-line no-console\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 this.logger.clearStatusLine();\n const duration = prettyTime(process.hrtime(startTask));\n const msgEnd = `✔ command \"${req.params.cmd}\" had been completed in ${duration}`;\n this.logger.info(msgEnd);\n console.log(msgEnd); // eslint-disable-line no-console\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 const msgErr = `command \"${req.params.cmd}\" had failed. ${err.message}`;\n this.logger.error(msgErr, err);\n console.error(msgErr); // eslint-disable-line no-console\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,6 +1,6 @@
1
- import { Route, Request, Response } from '@teambit/express';
2
- import { Logger } from '@teambit/logger';
3
- import { APIForIDE } from './api-for-ide';
1
+ import type { Route, Request, Response } from '@teambit/express';
2
+ import type { Logger } from '@teambit/logger';
3
+ import type { APIForIDE } from './api-for-ide';
4
4
  /**
5
5
  * example usage:
6
6
  * post to http://localhost:3000/api/ide/list-dirs
@@ -1 +1 @@
1
- {"version":3,"names":["_prettyTime","data","_interopRequireDefault","require","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","IDERoute","constructor","logger","apiForIDE","req","res","debug","params","method","ideCallLog","Error","body","args","msgStart","length","info","console","log","randomNumber","Math","floor","random","getArgsAsString","logStartCmdHistory","startTask","process","hrtime","result","duration","prettyTime","msgEnd","logFinishCmdHistory","json","err","msgErr","error","message","status","jsonp","exports","map","arg","toString","JSON","stringify","join"],"sources":["ide.route.ts"],"sourcesContent":["import prettyTime from 'pretty-time';\nimport { Route, Request, Response } from '@teambit/express';\nimport { Logger } from '@teambit/logger';\nimport { APIForIDE } from './api-for-ide';\n\n/**\n * example usage:\n * post to http://localhost:3000/api/ide/list-dirs\n * with the following json as the body\n *\n{\n \"args\": [\"some-args\"]\n}\n */\nexport class IDERoute implements Route {\n constructor(\n private logger: Logger,\n private apiForIDE: APIForIDE\n ) {}\n\n method = 'post';\n route = '/ide/:method';\n\n middlewares = [\n async (req: Request, res: Response) => {\n this.logger.debug(`api-IDE: got request for ${req.params.method}`);\n let ideCallLog: string | undefined;\n try {\n if (!this.apiForIDE[req.params.method]) {\n throw new Error(`API \"${req.params.method}\" was not found`);\n }\n const body = req.body;\n const { args } = body;\n // don't use \"logger.console\" here, we don't want these message to pollute cli-raw output\n const msgStart = `[*] started a new api-IDE call: ${req.params.method}, total: ${args?.length || 0} args`;\n this.logger.info(msgStart);\n console.log(msgStart); // eslint-disable-line no-console\n const randomNumber = Math.floor(Math.random() * 10000); // helps to distinguish between commands in the log\n ideCallLog = `${randomNumber} ${req.params.method}(${getArgsAsString(args)})`;\n await this.apiForIDE.logStartCmdHistory(ideCallLog);\n const startTask = process.hrtime();\n const result = await this.apiForIDE[req.params.method](...args);\n const duration = prettyTime(process.hrtime(startTask));\n const msgEnd = `✔ api-IDE call: ${req.params.method} had been completed in ${duration}`;\n this.logger.info(msgEnd);\n console.log(msgEnd); // eslint-disable-line no-console\n await this.apiForIDE.logFinishCmdHistory(ideCallLog, 0);\n res.json(result);\n } catch (err: any) {\n const msgErr = `api-IDE call: ${req.params.method} had failed`;\n this.logger.error(msgErr, err);\n console.error(`api-IDE call: ${req.params.method} had failed. ${err.message}`); // eslint-disable-line no-console\n if (ideCallLog) await this.apiForIDE.logFinishCmdHistory(ideCallLog, 1);\n res.status(500).jsonp(err.message);\n }\n },\n ];\n}\n\nfunction getArgsAsString(args?: any[]) {\n if (!args) return '';\n return args\n .map((arg) => {\n if (typeof arg === 'string') return arg;\n if (typeof arg === 'number') return arg.toString();\n return JSON.stringify(arg);\n })\n .join(' ');\n}\n"],"mappings":";;;;;;AAAA,SAAAA,YAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,WAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAqC,SAAAC,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,gBAAAH,CAAA,EAAAI,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAJ,CAAA,GAAAO,MAAA,CAAAC,cAAA,CAAAR,CAAA,EAAAI,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAZ,CAAA,CAAAI,CAAA,IAAAC,CAAA,EAAAL,CAAA;AAAA,SAAAM,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,MAAAL,CAAA,GAAAK,CAAA,CAAAU,MAAA,CAAAC,WAAA,kBAAAhB,CAAA,QAAAa,CAAA,GAAAb,CAAA,CAAAiB,IAAA,CAAAZ,CAAA,EAAAD,CAAA,uCAAAS,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAAd,CAAA,GAAAe,MAAA,GAAAC,MAAA,EAAAf,CAAA;AAKrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMgB,QAAQ,CAAkB;EACrCC,WAAWA,CACDC,MAAc,EACdC,SAAoB,EAC5B;IAAA,KAFQD,MAAc,GAAdA,MAAc;IAAA,KACdC,SAAoB,GAApBA,SAAoB;IAAArB,eAAA,iBAGrB,MAAM;IAAAA,eAAA,gBACP,cAAc;IAAAA,eAAA,sBAER,CACZ,OAAOsB,GAAY,EAAEC,GAAa,KAAK;MACrC,IAAI,CAACH,MAAM,CAACI,KAAK,CAAC,4BAA4BF,GAAG,CAACG,MAAM,CAACC,MAAM,EAAE,CAAC;MAClE,IAAIC,UAA8B;MAClC,IAAI;QACF,IAAI,CAAC,IAAI,CAACN,SAAS,CAACC,GAAG,CAACG,MAAM,CAACC,MAAM,CAAC,EAAE;UACtC,MAAM,IAAIE,KAAK,CAAC,QAAQN,GAAG,CAACG,MAAM,CAACC,MAAM,iBAAiB,CAAC;QAC7D;QACA,MAAMG,IAAI,GAAGP,GAAG,CAACO,IAAI;QACrB,MAAM;UAAEC;QAAK,CAAC,GAAGD,IAAI;QACrB;QACA,MAAME,QAAQ,GAAG,mCAAmCT,GAAG,CAACG,MAAM,CAACC,MAAM,YAAYI,IAAI,EAAEE,MAAM,IAAI,CAAC,OAAO;QACzG,IAAI,CAACZ,MAAM,CAACa,IAAI,CAACF,QAAQ,CAAC;QAC1BG,OAAO,CAACC,GAAG,CAACJ,QAAQ,CAAC,CAAC,CAAC;QACvB,MAAMK,YAAY,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACxDZ,UAAU,GAAG,GAAGS,YAAY,IAAId,GAAG,CAACG,MAAM,CAACC,MAAM,IAAIc,eAAe,CAACV,IAAI,CAAC,GAAG;QAC7E,MAAM,IAAI,CAACT,SAAS,CAACoB,kBAAkB,CAACd,UAAU,CAAC;QACnD,MAAMe,SAAS,GAAGC,OAAO,CAACC,MAAM,CAAC,CAAC;QAClC,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACxB,SAAS,CAACC,GAAG,CAACG,MAAM,CAACC,MAAM,CAAC,CAAC,GAAGI,IAAI,CAAC;QAC/D,MAAMgB,QAAQ,GAAG,IAAAC,qBAAU,EAACJ,OAAO,CAACC,MAAM,CAACF,SAAS,CAAC,CAAC;QACtD,MAAMM,MAAM,GAAG,mBAAmB1B,GAAG,CAACG,MAAM,CAACC,MAAM,0BAA0BoB,QAAQ,EAAE;QACvF,IAAI,CAAC1B,MAAM,CAACa,IAAI,CAACe,MAAM,CAAC;QACxBd,OAAO,CAACC,GAAG,CAACa,MAAM,CAAC,CAAC,CAAC;QACrB,MAAM,IAAI,CAAC3B,SAAS,CAAC4B,mBAAmB,CAACtB,UAAU,EAAE,CAAC,CAAC;QACvDJ,GAAG,CAAC2B,IAAI,CAACL,MAAM,CAAC;MAClB,CAAC,CAAC,OAAOM,GAAQ,EAAE;QACjB,MAAMC,MAAM,GAAG,iBAAiB9B,GAAG,CAACG,MAAM,CAACC,MAAM,aAAa;QAC9D,IAAI,CAACN,MAAM,CAACiC,KAAK,CAACD,MAAM,EAAED,GAAG,CAAC;QAC9BjB,OAAO,CAACmB,KAAK,CAAC,iBAAiB/B,GAAG,CAACG,MAAM,CAACC,MAAM,gBAAgByB,GAAG,CAACG,OAAO,EAAE,CAAC,CAAC,CAAC;QAChF,IAAI3B,UAAU,EAAE,MAAM,IAAI,CAACN,SAAS,CAAC4B,mBAAmB,CAACtB,UAAU,EAAE,CAAC,CAAC;QACvEJ,GAAG,CAACgC,MAAM,CAAC,GAAG,CAAC,CAACC,KAAK,CAACL,GAAG,CAACG,OAAO,CAAC;MACpC;IACF,CAAC,CACF;EAtCE;AAuCL;AAACG,OAAA,CAAAvC,QAAA,GAAAA,QAAA;AAED,SAASsB,eAAeA,CAACV,IAAY,EAAE;EACrC,IAAI,CAACA,IAAI,EAAE,OAAO,EAAE;EACpB,OAAOA,IAAI,CACR4B,GAAG,CAAEC,GAAG,IAAK;IACZ,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE,OAAOA,GAAG;IACvC,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE,OAAOA,GAAG,CAACC,QAAQ,CAAC,CAAC;IAClD,OAAOC,IAAI,CAACC,SAAS,CAACH,GAAG,CAAC;EAC5B,CAAC,CAAC,CACDI,IAAI,CAAC,GAAG,CAAC;AACd","ignoreList":[]}
1
+ {"version":3,"names":["_prettyTime","data","_interopRequireDefault","require","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","IDERoute","constructor","logger","apiForIDE","req","res","debug","params","method","ideCallLog","Error","body","args","msgStart","length","info","console","log","randomNumber","Math","floor","random","getArgsAsString","logStartCmdHistory","startTask","process","hrtime","result","duration","prettyTime","msgEnd","logFinishCmdHistory","json","err","msgErr","error","message","status","jsonp","exports","map","arg","toString","JSON","stringify","join"],"sources":["ide.route.ts"],"sourcesContent":["import prettyTime from 'pretty-time';\nimport type { Route, Request, Response } from '@teambit/express';\nimport type { Logger } from '@teambit/logger';\nimport type { APIForIDE } from './api-for-ide';\n\n/**\n * example usage:\n * post to http://localhost:3000/api/ide/list-dirs\n * with the following json as the body\n *\n{\n \"args\": [\"some-args\"]\n}\n */\nexport class IDERoute implements Route {\n constructor(\n private logger: Logger,\n private apiForIDE: APIForIDE\n ) {}\n\n method = 'post';\n route = '/ide/:method';\n\n middlewares = [\n async (req: Request, res: Response) => {\n this.logger.debug(`api-IDE: got request for ${req.params.method}`);\n let ideCallLog: string | undefined;\n try {\n if (!this.apiForIDE[req.params.method]) {\n throw new Error(`API \"${req.params.method}\" was not found`);\n }\n const body = req.body;\n const { args } = body;\n // don't use \"logger.console\" here, we don't want these message to pollute cli-raw output\n const msgStart = `[*] started a new api-IDE call: ${req.params.method}, total: ${args?.length || 0} args`;\n this.logger.info(msgStart);\n console.log(msgStart); // eslint-disable-line no-console\n const randomNumber = Math.floor(Math.random() * 10000); // helps to distinguish between commands in the log\n ideCallLog = `${randomNumber} ${req.params.method}(${getArgsAsString(args)})`;\n await this.apiForIDE.logStartCmdHistory(ideCallLog);\n const startTask = process.hrtime();\n const result = await this.apiForIDE[req.params.method](...args);\n const duration = prettyTime(process.hrtime(startTask));\n const msgEnd = `✔ api-IDE call: ${req.params.method} had been completed in ${duration}`;\n this.logger.info(msgEnd);\n console.log(msgEnd); // eslint-disable-line no-console\n await this.apiForIDE.logFinishCmdHistory(ideCallLog, 0);\n res.json(result);\n } catch (err: any) {\n const msgErr = `api-IDE call: ${req.params.method} had failed`;\n this.logger.error(msgErr, err);\n console.error(`api-IDE call: ${req.params.method} had failed. ${err.message}`); // eslint-disable-line no-console\n if (ideCallLog) await this.apiForIDE.logFinishCmdHistory(ideCallLog, 1);\n res.status(500).jsonp(err.message);\n }\n },\n ];\n}\n\nfunction getArgsAsString(args?: any[]) {\n if (!args) return '';\n return args\n .map((arg) => {\n if (typeof arg === 'string') return arg;\n if (typeof arg === 'number') return arg.toString();\n return JSON.stringify(arg);\n })\n .join(' ');\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
- import { Command, CommandOptions } from '@teambit/cli';
2
- import { ApiServerMain } from './api-server.main.runtime';
1
+ import type { Command, CommandOptions } from '@teambit/cli';
2
+ import type { ApiServerMain } from './api-server.main.runtime';
3
3
  export declare class ServerCmd implements Command {
4
4
  private apiServer;
5
5
  name: string;
@@ -1 +1 @@
1
- {"version":3,"names":["ServerCmd","constructor","apiServer","_defineProperty","wait","args","options","runApiServer","exports"],"sources":["server.cmd.ts"],"sourcesContent":["// eslint-disable-next-line max-classes-per-file\nimport { Command, CommandOptions } from '@teambit/cli';\nimport { ApiServerMain } from './api-server.main.runtime';\n\nexport class ServerCmd implements Command {\n name = 'server';\n description = 'communicate with bit cli program via http requests';\n alias = '';\n commands: Command[] = [];\n group = 'workspace-setup';\n options = [\n ['p', 'port [port]', 'port to run the server on'],\n ['c', 'compile', 'compile components during the watch process'],\n ] as CommandOptions;\n private = true;\n\n constructor(private apiServer: ApiServerMain) {}\n\n async wait(args, options: { port: number; compile: boolean }) {\n await this.apiServer.runApiServer(options);\n }\n}\n"],"mappings":";;;;;;;;;AAAA;;AAIO,MAAMA,SAAS,CAAoB;EAYxCC,WAAWA,CAASC,SAAwB,EAAE;IAAA,KAA1BA,SAAwB,GAAxBA,SAAwB;IAAAC,eAAA,eAXrC,QAAQ;IAAAA,eAAA,sBACD,oDAAoD;IAAAA,eAAA,gBAC1D,EAAE;IAAAA,eAAA,mBACY,EAAE;IAAAA,eAAA,gBAChB,iBAAiB;IAAAA,eAAA,kBACf,CACR,CAAC,GAAG,EAAE,aAAa,EAAE,2BAA2B,CAAC,EACjD,CAAC,GAAG,EAAE,SAAS,EAAE,6CAA6C,CAAC,CAChE;IAAAA,eAAA,kBACS,IAAI;EAEiC;EAE/C,MAAMC,IAAIA,CAACC,IAAI,EAAEC,OAA2C,EAAE;IAC5D,MAAM,IAAI,CAACJ,SAAS,CAACK,YAAY,CAACD,OAAO,CAAC;EAC5C;AACF;AAACE,OAAA,CAAAR,SAAA,GAAAA,SAAA","ignoreList":[]}
1
+ {"version":3,"names":["ServerCmd","constructor","apiServer","_defineProperty","wait","args","options","runApiServer","exports"],"sources":["server.cmd.ts"],"sourcesContent":["// eslint-disable-next-line max-classes-per-file\nimport type { Command, CommandOptions } from '@teambit/cli';\nimport type { ApiServerMain } from './api-server.main.runtime';\n\nexport class ServerCmd implements Command {\n name = 'server';\n description = 'communicate with bit cli program via http requests';\n alias = '';\n commands: Command[] = [];\n group = 'workspace-setup';\n options = [\n ['p', 'port [port]', 'port to run the server on'],\n ['c', 'compile', 'compile components during the watch process'],\n ] as CommandOptions;\n private = true;\n\n constructor(private apiServer: ApiServerMain) {}\n\n async wait(args, options: { port: number; compile: boolean }) {\n await this.apiServer.runApiServer(options);\n }\n}\n"],"mappings":";;;;;;;;;AAAA;;AAIO,MAAMA,SAAS,CAAoB;EAYxCC,WAAWA,CAASC,SAAwB,EAAE;IAAA,KAA1BA,SAAwB,GAAxBA,SAAwB;IAAAC,eAAA,eAXrC,QAAQ;IAAAA,eAAA,sBACD,oDAAoD;IAAAA,eAAA,gBAC1D,EAAE;IAAAA,eAAA,mBACY,EAAE;IAAAA,eAAA,gBAChB,iBAAiB;IAAAA,eAAA,kBACf,CACR,CAAC,GAAG,EAAE,aAAa,EAAE,2BAA2B,CAAC,EACjD,CAAC,GAAG,EAAE,SAAS,EAAE,6CAA6C,CAAC,CAChE;IAAAA,eAAA,kBACS,IAAI;EAEiC;EAE/C,MAAMC,IAAIA,CAACC,IAAI,EAAEC,OAA2C,EAAE;IAC5D,MAAM,IAAI,CAACJ,SAAS,CAACK,YAAY,CAACD,OAAO,CAAC;EAC5C;AACF;AAACE,OAAA,CAAAR,SAAA,GAAAA,SAAA","ignoreList":[]}
@@ -1,6 +1,6 @@
1
- import { CLIMain } from '@teambit/cli';
2
- import { Route, Request, Response } from '@teambit/express';
3
- import { Logger } from '@teambit/logger';
1
+ import type { CLIMain } from '@teambit/cli';
2
+ import type { Route, Request, Response } from '@teambit/express';
3
+ import type { Logger } from '@teambit/logger';
4
4
  /**
5
5
  * Server-Sent Events (SSE).
6
6
  */
@@ -31,6 +31,10 @@ class SSEEventsRoute {
31
31
  'Cache-Control': 'no-cache'
32
32
  };
33
33
  response.writeHead(200, headers);
34
+
35
+ // Send an initial event to complete the SSE handshake.
36
+ // Without this, some EventSource clients stay in CONNECTING state until they receive data.
37
+ response.write('event: connected\ndata: {}\n\n');
34
38
  const clientId = Date.now();
35
39
  const newClient = {
36
40
  id: clientId,
@@ -1 +1 @@
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(\n private logger: Logger,\n private cli: CLIMain\n ) {}\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,CACDC,MAAc,EACdC,GAAY,EACpB;IAAA,KAFQD,MAAc,GAAdA,MAAc;IAAA,KACdC,GAAY,GAAZA,GAAY;IAAAtB,eAAA,iBAGb,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;EA7BE;AA8BL;AAACK,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","write","clientId","Date","now","newClient","id","addClient","on","removeClient","exports"],"sources":["sse-events.route.ts"],"sourcesContent":["import type { CLIMain } from '@teambit/cli';\nimport type { Route, Request, Response } from '@teambit/express';\nimport type { 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(\n private logger: Logger,\n private cli: CLIMain\n ) {}\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 // Send an initial event to complete the SSE handshake.\n // Without this, some EventSource clients stay in CONNECTING state until they receive data.\n response.write('event: connected\\ndata: {}\\n\\n');\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,CACDC,MAAc,EACdC,GAAY,EACpB;IAAA,KAFQD,MAAc,GAAdA,MAAc;IAAA,KACdC,GAAY,GAAZA,GAAY;IAAAtB,eAAA,iBAGb,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;MACA;MACAH,QAAQ,CAACM,KAAK,CAAC,gCAAgC,CAAC;MAEhD,MAAMC,QAAQ,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;MAE3B,MAAMC,SAAiB,GAAG;QACxBC,EAAE,EAAEJ,QAAQ;QACZP;MACF,CAAC;MAED,IAAAY,2BAAS,EAACF,SAAS,CAAC;MAEpBX,OAAO,CAACc,EAAE,CAAC,OAAO,EAAE,MAAM;QACxB,IAAI,CAAChB,MAAM,CAACI,KAAK,CAAC,GAAGM,QAAQ,wBAAwB,CAAC;QACtD,IAAAO,8BAAY,EAACJ,SAAS,CAAC;MACzB,CAAC,CAAC;IACJ,CAAC,CACF;EAjCE;AAkCL;AAACK,OAAA,CAAApB,cAAA,GAAAA,cAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/api-server",
3
- "version": "0.0.0-e8287ed72e2b99e42d753c493df21297eff042bb",
3
+ "version": "0.0.0-e91d3d4331123ccbcedf52861bd91ca00b6eec45",
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": "e8287ed72e2b99e42d753c493df21297eff042bb"
9
+ "version": "e91d3d4331123ccbcedf52861bd91ca00b6eec45"
10
10
  },
11
11
  "dependencies": {
12
12
  "filenamify": "4.2.0",
@@ -18,44 +18,44 @@
18
18
  "http-proxy-middleware": "^3.0.3",
19
19
  "chalk": "4.1.2",
20
20
  "pretty-time": "1.1.0",
21
+ "@teambit/application": "1.0.914",
22
+ "@teambit/checkout": "1.0.914",
23
+ "@teambit/component-compare": "1.0.914",
24
+ "@teambit/component-log": "1.0.914",
25
+ "@teambit/component.modules.component-url": "0.0.187",
26
+ "@teambit/component.modules.merge-helper": "0.0.43",
27
+ "@teambit/component": "1.0.914",
28
+ "@teambit/config": "0.0.1479",
29
+ "@teambit/deprecation": "1.0.914",
30
+ "@teambit/envs": "1.0.914",
31
+ "@teambit/export": "1.0.914",
32
+ "@teambit/generator": "1.0.915",
33
+ "@teambit/graph": "1.0.914",
34
+ "@teambit/install": "1.0.914",
21
35
  "@teambit/lane-id": "0.0.312",
36
+ "@teambit/legacy.consumer": "0.0.102",
37
+ "@teambit/legacy.scope": "0.0.102",
38
+ "@teambit/legacy.utils": "0.0.34",
39
+ "@teambit/logger": "0.0.1397",
40
+ "@teambit/objects": "0.0.421",
41
+ "@teambit/remove": "1.0.914",
42
+ "@teambit/schema": "1.0.914",
43
+ "@teambit/scope": "1.0.914",
44
+ "@teambit/snapping": "1.0.914",
45
+ "@teambit/workspace": "1.0.914",
22
46
  "@teambit/harmony": "0.4.7",
23
- "@teambit/application": "0.0.0-9c1eb57982205605f29c2af404a8eb1f0fec750b",
24
- "@teambit/checkout": "0.0.0-4fdbc236717e591ef76a8f2ec559230989a0d1c7",
25
- "@teambit/component-compare": "0.0.0-4ccf7bdaa0ff99f9823b34608c8e1efd39dcd635",
26
- "@teambit/component-log": "0.0.0-4c65add1d6c420e6716c7ba7587d8b8b09469043",
27
- "@teambit/component.modules.component-url": "0.0.176",
28
- "@teambit/component": "0.0.0-cca23a93617e06144dc6182b0b2c36b6fd2cc075",
29
- "@teambit/config": "0.0.0-6fd8ad666dfbd2048eaa8e3c5e2650bd242bb354",
30
- "@teambit/deprecation": "0.0.0-49e9a5690a12b22fc92ce39922ad39f665511a4f",
31
- "@teambit/envs": "0.0.0-974e1bad2d86996b4e88685e9dadc541f479cbe1",
32
- "@teambit/export": "0.0.0-3c11bf473d4fd82eb125f931a06b38a10c0b9329",
33
- "@teambit/generator": "0.0.0-cb1bd86100b9d1debeb42399b600811e763d5b19",
34
- "@teambit/graph": "0.0.0-71d4b87b9ba7ddb4d3368530a4ccf9f5cbd72f70",
35
- "@teambit/install": "0.0.0-d92b51d4cb9817db489826f061ab89b1c882b9da",
36
- "@teambit/lanes": "0.0.0-e13425d1e99532240f770da7d24a73f2c133c662",
37
- "@teambit/legacy.consumer": "0.0.0-dc89f9625ba8a26421ddfd4f4f21e23d650b3870",
38
- "@teambit/legacy.scope": "0.0.0-482998c5a37cb782b68e330b96b9901974889d89",
39
- "@teambit/legacy.utils": "0.0.21",
40
- "@teambit/logger": "0.0.0-84184266636aca1a269b792c366e49aa9253adfa",
41
- "@teambit/merging": "0.0.0-fed0542704657273931101ebfeb4c53c08f07ccf",
42
- "@teambit/objects": "0.0.0-2ae9562c570cbd95c75cca40f8113089ebd882ba",
43
- "@teambit/remove": "0.0.0-5a073dfd19cba7c23ed25cbf3801abd7dfd6ec4b",
44
- "@teambit/schema": "0.0.0-f8a2f11932b8f801765004c25636424487f52de6",
45
- "@teambit/scope": "0.0.0-e904235314ac47364f0f50a94e4b24f9f7409742",
46
- "@teambit/snapping": "0.0.0-7aebc7bdd7aea635abce823116ac83c7a1f0ddba",
47
- "@teambit/workspace": "0.0.0-6e8d2de42f46a86907763222e275840bddc345d3",
48
- "@teambit/cli": "0.0.0-2e5f911c71db9449d65d68c07703201040c5418e",
49
- "@teambit/express": "0.0.0-06d7ddd9143ece6308d8fb1afc39beb3e6ccc512",
50
- "@teambit/harmony.modules.send-server-sent-events": "0.0.7",
51
- "@teambit/importer": "0.0.0-cbd6e7cabdd77ef69f78b6680de49377df63ef68",
52
- "@teambit/legacy.constants": "0.0.12",
53
- "@teambit/scope.network": "0.0.0-f38899a56ee27723f216678eec54a90b4d9fd643",
54
- "@teambit/toolbox.network.get-port": "1.0.10",
55
- "@teambit/watcher": "0.0.0-a03eac588f494d8285603f5fa5af67719d993d81",
56
- "@teambit/harmony.modules.feature-toggle": "0.0.21",
57
- "@teambit/legacy.loader": "0.0.7",
58
- "@teambit/legacy.logger": "0.0.0-10581461a3181840ca5b138250c8df9ba4d609cf"
47
+ "@teambit/cli": "0.0.1304",
48
+ "@teambit/express": "0.0.1403",
49
+ "@teambit/harmony.modules.send-server-sent-events": "0.0.17",
50
+ "@teambit/importer": "1.0.914",
51
+ "@teambit/legacy.constants": "0.0.24",
52
+ "@teambit/scope.network": "0.0.102",
53
+ "@teambit/toolbox.network.get-port": "1.0.20",
54
+ "@teambit/watcher": "1.0.914",
55
+ "@teambit/harmony.modules.feature-toggle": "0.0.34",
56
+ "@teambit/legacy.loader": "0.0.18",
57
+ "@teambit/legacy.logger": "0.0.36",
58
+ "@teambit/lanes": "0.0.0-b6f9b058f78066231906e473250586cf4016895e"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@types/fs-extra": "9.0.7",
@@ -64,7 +64,7 @@
64
64
  "@types/cors": "2.8.10",
65
65
  "@types/pretty-time": "^1.1.5",
66
66
  "@types/mocha": "9.1.0",
67
- "@teambit/harmony.envs.core-aspect-env": "0.0.69"
67
+ "@teambit/harmony.envs.core-aspect-env": "0.1.4"
68
68
  },
69
69
  "peerDependencies": {},
70
70
  "license": "Apache-2.0",