@teambit/merging 0.0.336 → 0.0.337

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.
@@ -8,6 +8,7 @@ export declare class ConfigMergeResult {
8
8
  hasConflicts(): boolean;
9
9
  generateMergeConflictFile(): string | null;
10
10
  getSuccessfullyMergedConfig(): Record<string, any>;
11
+ getDepsResolverResult(): MergeStrategyResult | undefined;
11
12
  private generateConflictStringPerAspect;
12
13
  private depsResolverConfigGenerator;
13
14
  private basicConflictGenerator;
@@ -67,6 +67,9 @@ ${this.concatenateConflicts(configMergeFormatted)}
67
67
  return _objectSpread(_objectSpread({}, acc), currObject);
68
68
  }, {});
69
69
  }
70
+ getDepsResolverResult() {
71
+ return this.results.find(result => result.id === _dependencyResolver().DependencyResolverAspect.id);
72
+ }
70
73
  generateConflictStringPerAspect(result) {
71
74
  if (!result.conflict) return undefined;
72
75
  if (result.id === _dependencyResolver().DependencyResolverAspect.id) {
@@ -1 +1 @@
1
- {"version":3,"names":["ConfigMergeResult","constructor","compIdStr","currentLabel","otherLabel","results","hasConflicts","some","result","conflict","generateMergeConflictFile","resultsWithConflict","filter","length","allConflicts","compact","map","generateConflictStringPerAspect","configMergeFormatted","c","formatConflict","conflictStr","concatenateConflicts","getSuccessfullyMergedConfig","resultsWithMergedConfig","mergedConfig","reduce","acc","curr","currObject","id","undefined","DependencyResolverAspect","depsResolverConfigGenerator","basicConflictGenerator","mergedConfigSplit","JSON","stringify","policy","split","conflictLines","line","includes","conflictIndicator","currentVal","otherVal","repeat","shift","unshift","join","conflictObj","currentConfig","otherConfig","formatConfig","conf","confStr","confStrSplit","pop","replace","conflicts","conflictsWithComma","index","endsWith","conflictSplit","lastLineWithClosingBrace","lastIndexOf"],"sources":["config-merge-result.ts"],"sourcesContent":["import { DependencyResolverAspect } from '@teambit/dependency-resolver';\nimport { compact } from 'lodash';\nimport { MergeStrategyResult, conflictIndicator, GenericConfigOrRemoved } from './config-merger';\n\nexport class ConfigMergeResult {\n constructor(\n readonly compIdStr: string,\n private currentLabel: string,\n private otherLabel: string,\n private results: MergeStrategyResult[]\n ) {}\n hasConflicts(): boolean {\n return this.results.some((result) => result.conflict);\n }\n generateMergeConflictFile(): string | null {\n const resultsWithConflict = this.results.filter((result) => result.conflict);\n if (!resultsWithConflict.length) return null;\n const allConflicts = compact(resultsWithConflict.map((result) => this.generateConflictStringPerAspect(result)));\n const configMergeFormatted = allConflicts.map((c) => this.formatConflict(c));\n const conflictStr = `{\n${this.concatenateConflicts(configMergeFormatted)}\n}`;\n return conflictStr;\n }\n getSuccessfullyMergedConfig(): Record<string, any> {\n const resultsWithMergedConfig = this.results.filter((result) => result.mergedConfig);\n return resultsWithMergedConfig.reduce((acc, curr) => {\n const currObject = { [curr.id]: curr.mergedConfig };\n return { ...acc, ...currObject };\n }, {});\n }\n\n private generateConflictStringPerAspect(result: MergeStrategyResult): string | undefined {\n if (!result.conflict) return undefined;\n if (result.id === DependencyResolverAspect.id) {\n return this.depsResolverConfigGenerator(result.conflict);\n }\n return this.basicConflictGenerator(result.id, result.conflict);\n }\n\n private depsResolverConfigGenerator(conflict: Record<string, any>): string {\n const mergedConfigSplit = JSON.stringify({ policy: conflict }, undefined, 2).split('\\n');\n const conflictLines = mergedConfigSplit.map((line) => {\n if (!line.includes(conflictIndicator)) return line;\n const [, currentVal, otherVal] = line.split('::');\n return `${'<'.repeat(7)} ${this.currentLabel}\n \"version\": \"${currentVal}\",\n=======\n \"version\": \"${otherVal}\",\n${'>'.repeat(7)} ${this.otherLabel}`;\n });\n // replace the first line with line with the id\n conflictLines.shift();\n conflictLines.unshift(`\"${DependencyResolverAspect.id}\": {`);\n return conflictLines.join('\\n');\n }\n\n private basicConflictGenerator(id: string, conflictObj: Record<string, any>): string {\n const { currentConfig, otherConfig } = conflictObj;\n let conflict: string;\n if (currentConfig === '-') {\n conflict = `${'<'.repeat(7)} ${this.currentLabel}\n\"${id}\": \"-\"\n=======\n\"${id}\": ${JSON.stringify(otherConfig, undefined, 2)}\n${'>'.repeat(7)} ${this.otherLabel}`;\n } else if (otherConfig === '-') {\n conflict = `${'<'.repeat(7)} ${this.currentLabel}\n\"${id}\": ${JSON.stringify(currentConfig, undefined, 2)}\n=======\n\"${id}\": \"-\"\n${'>'.repeat(7)} ${this.otherLabel}`;\n } else {\n const formatConfig = (conf: GenericConfigOrRemoved) => {\n const confStr = JSON.stringify(conf, undefined, 2);\n const confStrSplit = confStr.split('\\n');\n confStrSplit.shift(); // remove first {\n confStrSplit.pop(); // remove last }\n return confStrSplit.join('\\n');\n };\n conflict = `\"${id}\": {\n${'<'.repeat(7)} ${this.currentLabel}\n${formatConfig(currentConfig)}\n=======\n${formatConfig(otherConfig)}\n${'>'.repeat(7)} ${this.otherLabel}\n}`;\n }\n\n return conflict;\n }\n\n private formatConflict(conflict: string) {\n return (\n conflict\n .split('\\n')\n // add 2 spaces before each line\n .map((line) => ` ${line}`)\n // remove the white spaces before the conflict indicators\n .map((line) => line.replace(/ *(<<<<<<<|>>>>>>>|=======)/g, '$1'))\n .join('\\n')\n );\n }\n\n private concatenateConflicts(conflicts: string[]) {\n const conflictsWithComma = conflicts.map((conflict, index) => {\n if (index === conflicts.length - 1) return conflict; // last element in the array, no need to add a comma\n if (conflict.endsWith('}')) return `${conflict},`; // ends normally with a closing brace, add a comma.\n // if it doesn't end with a closing brace, it means it ends with a conflict indicator.\n // the comma should be added after the last line with a closing brace.\n const conflictSplit = conflict.split('\\n');\n // find the last line with '}' and add a comma after it\n const lastLineWithClosingBrace = conflictSplit.lastIndexOf(' }');\n conflictSplit[lastLineWithClosingBrace] += ',';\n return conflictSplit.join('\\n');\n });\n return conflictsWithComma.join('\\n');\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["ConfigMergeResult","constructor","compIdStr","currentLabel","otherLabel","results","hasConflicts","some","result","conflict","generateMergeConflictFile","resultsWithConflict","filter","length","allConflicts","compact","map","generateConflictStringPerAspect","configMergeFormatted","c","formatConflict","conflictStr","concatenateConflicts","getSuccessfullyMergedConfig","resultsWithMergedConfig","mergedConfig","reduce","acc","curr","currObject","id","getDepsResolverResult","find","DependencyResolverAspect","undefined","depsResolverConfigGenerator","basicConflictGenerator","mergedConfigSplit","JSON","stringify","policy","split","conflictLines","line","includes","conflictIndicator","currentVal","otherVal","repeat","shift","unshift","join","conflictObj","currentConfig","otherConfig","formatConfig","conf","confStr","confStrSplit","pop","replace","conflicts","conflictsWithComma","index","endsWith","conflictSplit","lastLineWithClosingBrace","lastIndexOf"],"sources":["config-merge-result.ts"],"sourcesContent":["import { DependencyResolverAspect } from '@teambit/dependency-resolver';\nimport { compact } from 'lodash';\nimport { MergeStrategyResult, conflictIndicator, GenericConfigOrRemoved } from './config-merger';\n\nexport class ConfigMergeResult {\n constructor(\n readonly compIdStr: string,\n private currentLabel: string,\n private otherLabel: string,\n private results: MergeStrategyResult[]\n ) {}\n hasConflicts(): boolean {\n return this.results.some((result) => result.conflict);\n }\n generateMergeConflictFile(): string | null {\n const resultsWithConflict = this.results.filter((result) => result.conflict);\n if (!resultsWithConflict.length) return null;\n const allConflicts = compact(resultsWithConflict.map((result) => this.generateConflictStringPerAspect(result)));\n const configMergeFormatted = allConflicts.map((c) => this.formatConflict(c));\n const conflictStr = `{\n${this.concatenateConflicts(configMergeFormatted)}\n}`;\n return conflictStr;\n }\n getSuccessfullyMergedConfig(): Record<string, any> {\n const resultsWithMergedConfig = this.results.filter((result) => result.mergedConfig);\n return resultsWithMergedConfig.reduce((acc, curr) => {\n const currObject = { [curr.id]: curr.mergedConfig };\n return { ...acc, ...currObject };\n }, {});\n }\n\n getDepsResolverResult(): MergeStrategyResult | undefined {\n return this.results.find((result) => result.id === DependencyResolverAspect.id);\n }\n\n private generateConflictStringPerAspect(result: MergeStrategyResult): string | undefined {\n if (!result.conflict) return undefined;\n if (result.id === DependencyResolverAspect.id) {\n return this.depsResolverConfigGenerator(result.conflict);\n }\n return this.basicConflictGenerator(result.id, result.conflict);\n }\n\n private depsResolverConfigGenerator(conflict: Record<string, any>): string {\n const mergedConfigSplit = JSON.stringify({ policy: conflict }, undefined, 2).split('\\n');\n const conflictLines = mergedConfigSplit.map((line) => {\n if (!line.includes(conflictIndicator)) return line;\n const [, currentVal, otherVal] = line.split('::');\n return `${'<'.repeat(7)} ${this.currentLabel}\n \"version\": \"${currentVal}\",\n=======\n \"version\": \"${otherVal}\",\n${'>'.repeat(7)} ${this.otherLabel}`;\n });\n // replace the first line with line with the id\n conflictLines.shift();\n conflictLines.unshift(`\"${DependencyResolverAspect.id}\": {`);\n return conflictLines.join('\\n');\n }\n\n private basicConflictGenerator(id: string, conflictObj: Record<string, any>): string {\n const { currentConfig, otherConfig } = conflictObj;\n let conflict: string;\n if (currentConfig === '-') {\n conflict = `${'<'.repeat(7)} ${this.currentLabel}\n\"${id}\": \"-\"\n=======\n\"${id}\": ${JSON.stringify(otherConfig, undefined, 2)}\n${'>'.repeat(7)} ${this.otherLabel}`;\n } else if (otherConfig === '-') {\n conflict = `${'<'.repeat(7)} ${this.currentLabel}\n\"${id}\": ${JSON.stringify(currentConfig, undefined, 2)}\n=======\n\"${id}\": \"-\"\n${'>'.repeat(7)} ${this.otherLabel}`;\n } else {\n const formatConfig = (conf: GenericConfigOrRemoved) => {\n const confStr = JSON.stringify(conf, undefined, 2);\n const confStrSplit = confStr.split('\\n');\n confStrSplit.shift(); // remove first {\n confStrSplit.pop(); // remove last }\n return confStrSplit.join('\\n');\n };\n conflict = `\"${id}\": {\n${'<'.repeat(7)} ${this.currentLabel}\n${formatConfig(currentConfig)}\n=======\n${formatConfig(otherConfig)}\n${'>'.repeat(7)} ${this.otherLabel}\n}`;\n }\n\n return conflict;\n }\n\n private formatConflict(conflict: string) {\n return (\n conflict\n .split('\\n')\n // add 2 spaces before each line\n .map((line) => ` ${line}`)\n // remove the white spaces before the conflict indicators\n .map((line) => line.replace(/ *(<<<<<<<|>>>>>>>|=======)/g, '$1'))\n .join('\\n')\n );\n }\n\n private concatenateConflicts(conflicts: string[]) {\n const conflictsWithComma = conflicts.map((conflict, index) => {\n if (index === conflicts.length - 1) return conflict; // last element in the array, no need to add a comma\n if (conflict.endsWith('}')) return `${conflict},`; // ends normally with a closing brace, add a comma.\n // if it doesn't end with a closing brace, it means it ends with a conflict indicator.\n // the comma should be added after the last line with a closing brace.\n const conflictSplit = conflict.split('\\n');\n // find the last line with '}' and add a comma after it\n const lastLineWithClosingBrace = conflictSplit.lastIndexOf(' }');\n conflictSplit[lastLineWithClosingBrace] += ',';\n return conflictSplit.join('\\n');\n });\n return conflictsWithComma.join('\\n');\n }\n}\n"],"mappings":"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"}
@@ -101,7 +101,7 @@ class ConfigMerger {
101
101
  this.otherLaneIdsStr = (otherLane === null || otherLane === void 0 ? void 0 : otherLane.components.map(c => c.id.toStringWithoutVersion())) || [];
102
102
  }
103
103
  merge() {
104
- this.logger.trace(`************** start config-merger for ${this.compIdStr} **************`);
104
+ this.logger.debug(`\n************** start config-merger for ${this.compIdStr} **************`);
105
105
  this.populateEnvs();
106
106
  const results = this.currentAspects.map(currentExt => {
107
107
  const id = currentExt.stringId;
@@ -163,7 +163,7 @@ class ConfigMerger {
163
163
  };
164
164
  });
165
165
  const envResult = [this.envStrategy()] || [];
166
- this.logger.trace(`*** end config-merger for ${this.compIdStr} ***\n`);
166
+ this.logger.debug(`*** end config-merger for ${this.compIdStr} ***\n`);
167
167
  return new (_configMergeResult().ConfigMergeResult)(this.compIdStr, this.currentLabel, this.otherLabel, (0, _lodash().compact)([...results, ...otherAspectsNotHandledResults, ...envResult]));
168
168
  }
169
169
  populateEnvs() {
@@ -295,7 +295,7 @@ class ConfigMerger {
295
295
  }
296
296
  depResolverStrategy(params) {
297
297
  if (params.id !== _dependencyResolver().DependencyResolverAspect.id) return undefined;
298
- this.logger.trace('start depResolverStrategy');
298
+ this.logger.trace(`start depResolverStrategy for ${this.compIdStr}`);
299
299
  const {
300
300
  currentExt,
301
301
  otherExt,
@@ -318,10 +318,12 @@ class ConfigMerger {
318
318
  const getPolicyVer = () => {
319
319
  if (d.__type === 'package') return undefined; // for packages, the policy is already the version
320
320
  if (existingPolicy) return existingPolicy.value.version; // currently it's missing, will be implemented by @Gilad
321
- if (!_semver().default.valid(d.version)) return d.version; // could be a hash
322
- // default to `^` or ~ if starts with zero, until we save the policy from the workspace during tag/snap.
323
- return d.version.startsWith('0.') ? `~${d.version}` : `^${d.version}`;
321
+ return d.version;
322
+ // if (!semver.valid(d.version)) return d.version; // could be a hash
323
+ // // default to `^` or ~ if starts with zero, until we save the policy from the workspace during tag/snap.
324
+ // return d.version.startsWith('0.') ? `~${d.version}` : `^${d.version}`;
324
325
  };
326
+
325
327
  return _objectSpread(_objectSpread({}, d), {}, {
326
328
  id: idWithoutVersion,
327
329
  policy: getPolicyVer()
@@ -484,24 +486,31 @@ class ConfigMerger {
484
486
  force: false
485
487
  });
486
488
  };
487
- this.logger.trace(`currentData, ${currentAllData.length}\n${currentAllData.map(d => `${d.__type} ${d.id} ${d.version}`).join('\n')}`);
488
- this.logger.trace(`otherData, ${otherData.length}\n${otherData.map(d => `${d.__type} ${d.id} ${d.version}`).join('\n')}`);
489
- this.logger.trace(`baseData, ${baseData.length}\n${baseData.map(d => `${d.__type} ${d.id} ${d.version}`).join('\n')}`);
489
+ this.logger.debug(`currentData, ${currentAllData.length}\n${currentAllData.map(d => `${d.__type} ${d.id} ${d.version}`).join('\n')}`);
490
+ this.logger.debug(`otherData, ${otherData.length}\n${otherData.map(d => `${d.__type} ${d.id} ${d.version}`).join('\n')}`);
491
+ this.logger.debug(`baseData, ${baseData.length}\n${baseData.map(d => `${d.__type} ${d.id} ${d.version}`).join('\n')}`);
490
492
 
491
493
  // eslint-disable-next-line complexity
492
494
  currentAndOtherData.forEach(depData => {
495
+ this.logger.trace(`depData.id, ${depData.id}`);
493
496
  if (this.isEnv(depData.id)) {
494
497
  // ignore the envs
495
498
  return;
496
499
  }
497
500
  const currentDep = currentAllData.find(d => d.id === depData.id);
498
501
  const otherDep = otherData.find(d => d.id === depData.id);
502
+ const baseDep = baseData.find(d => d.id === depData.id);
499
503
  this.logger.trace(`currentDep`, currentDep);
500
504
  this.logger.trace(`otherDep`, otherDep);
505
+ this.logger.trace(`baseDep`, baseDep);
501
506
  if (!otherDep) {
502
507
  return;
503
508
  }
504
509
  if (!currentDep) {
510
+ if (baseDep) {
511
+ // exists in other and base, so it was removed from current
512
+ return;
513
+ }
505
514
  // only on other
506
515
  addSerializedDepToPolicy(otherDep);
507
516
  return;
@@ -514,17 +523,16 @@ class ConfigMerger {
514
523
  return;
515
524
  }
516
525
  }
517
- const currentId = currentDep.id;
518
526
  const currentVer = currentDep.policy || currentDep.version;
519
527
  const otherVer = otherDep.policy || otherDep.version;
520
528
  if (currentVer === otherVer) {
521
529
  return;
522
530
  }
523
- const baseDep = baseData.find(d => d.id === currentId);
524
531
  const baseVer = (baseDep === null || baseDep === void 0 ? void 0 : baseDep.policy) || (baseDep === null || baseDep === void 0 ? void 0 : baseDep.version);
525
532
  if (baseVer && baseVer === otherVer) {
526
533
  return;
527
534
  }
535
+ const currentId = currentDep.id;
528
536
  if (currentDep.__type === 'component' && this.isIdInWorkspace(currentId)) {
529
537
  // dependencies that exist in the workspace, should be ignored. they'll be resolved later to the version in the ws.
530
538
  return;
@@ -553,6 +561,8 @@ class ConfigMerger {
553
561
  policy: mergedPolicy
554
562
  } : undefined;
555
563
  const conflict = hasConflict ? conflictedPolicy : undefined;
564
+ this.logger.debug('final mergedConfig', config);
565
+ this.logger.debug('final conflict', conflict);
556
566
  return {
557
567
  id: params.id,
558
568
  mergedConfig: config,
@@ -1 +1 @@
1
- {"version":3,"names":["conflictIndicator","ConfigMerger","constructor","compIdStr","workspaceIds","otherLane","currentAspects","baseAspects","otherAspects","currentLabel","otherLabel","logger","otherLaneIdsStr","components","map","c","id","toStringWithoutVersion","merge","trace","populateEnvs","results","currentExt","stringId","handledExtIds","includes","push","baseExt","findExtension","otherExt","mergePerStrategy","conflict","currentConfig","getConfig","otherConfig","otherAspectsNotHandledResults","extensionId","hasVersion","idFromWorkspace","getIdFromWorkspace","existingExt","_legacy","toString","mergedConfig","envResult","envStrategy","ConfigMergeResult","compact","getEnvId","ext","envsAspect","findCoreExtension","EnvsAspect","Error","env","config","data","currentEnv","otherEnv","baseEnv","undefined","currentEnvAspect","version","otherEnvAspect","baseEnvAspect","mergeStrategyParams","baseConfig","isIdInWorkspace","basicConfigMerge","areConfigsEqual","configA","configB","JSON","stringify","depResolverResult","depResolverStrategy","params","DependencyResolverAspect","currentPolicy","getPolicy","otherPolicy","basePolicy","getAllDeps","dependencies","policy","d","idWithoutVersion","__type","split","existingPolicy","find","p","dependencyId","getPolicyVer","value","semver","valid","startsWith","getDataPolicy","getAutoDeps","allDeps","filter","source","currentAutoData","currentAllData","currentDataPolicy","otherData","currentAndOtherData","uniqBy","concat","currentAndOtherComponentsData","baseData","getCompIdStrByPkgNameFromData","pkgName","found","packageName","getFromCurrentDataByPackageName","getFromCurrentDataPolicyByPackageName","mergedPolicy","devDependencies","peerDependencies","conflictedPolicy","hasConflict","lifecycleToDepType","runtime","dev","peer","handleConfigMerge","addVariantPolicyEntryToPolicy","dep","fromCurrentData","force","isHash","satisfies","fromCurrentDataPolicy","depType","lifecycleType","name","length","forEach","currentAndOtherConfig","currentDep","otherDep","baseDep","currentVer","otherVer","baseVer","hasConfigForDep","depName","getDepIdAsPkgName","addSerializedDepToPolicy","lifecycle","join","depData","isEnv","isRange","currentId","Object","keys","Boolean","rawConfig","omit","VariantPolicy","fromConfigObject","entries"],"sources":["config-merger.ts"],"sourcesContent":["import { ComponentID } from '@teambit/component-id';\nimport semver from 'semver';\nimport { Logger } from '@teambit/logger';\nimport { isHash } from '@teambit/component-version';\nimport {\n DependencyResolverAspect,\n isRange,\n SerializedDependency,\n VariantPolicy,\n VariantPolicyEntry,\n} from '@teambit/dependency-resolver';\nimport { Lane } from '@teambit/legacy/dist/scope/models';\nimport { EnvsAspect } from '@teambit/envs';\nimport { ExtensionDataEntry, ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { compact, omit, uniqBy } from 'lodash';\nimport { ConfigMergeResult } from './config-merge-result';\n\nexport type GenericConfigOrRemoved = Record<string, any> | '-';\n\ntype EnvData = { id: string; version?: string; config?: GenericConfigOrRemoved };\n\ntype SerializedDependencyWithPolicy = SerializedDependency & { policy?: string; packageName?: string };\n\nexport const conflictIndicator = 'CONFLICT::';\n\nexport type MergeStrategyResult = {\n id: string;\n mergedConfig?: GenericConfigOrRemoved;\n conflict?: Record<string, any>;\n};\ntype MergeStrategyParamsWithRemoved = {\n id: string;\n currentConfig: GenericConfigOrRemoved;\n otherConfig: GenericConfigOrRemoved;\n baseConfig?: GenericConfigOrRemoved;\n};\ntype MergeStrategyParams = {\n id: string;\n currentExt: ExtensionDataEntry;\n otherExt: ExtensionDataEntry;\n baseExt?: ExtensionDataEntry;\n};\n\n/**\n * perform 3-way merge of component configuration (aspects).\n * normally this is needed when merging one lane into another. the component may have different aspects config in each lane.\n * the baseAspects are the aspects of the component in the diversion point (the common ancestor of the two lanes).\n * the currentAspects are the aspects of the component in the current lane.\n * the otherAspects are the aspects of the component in the other lane. this is the lane we merge into the current lane.\n *\n * the basic merging strategy is a simple comparison between the aspect-configs, if they're different, we have a conflict.\n * we have two special cases:\n *\n * 1. dependency-resolver: we do a deeper check for the policy, we compare each dependency separately. also, we take\n * into account not only the config, but also the data. this is needed because some dependencies are automatically\n * added by Bit (from the import statements in the code) and they're not in the config. the final config has the deps\n * from both sources, the config and the data. The way we know to differentiate between them is by the \"force\" prop.\n * the config has always force: true.\n *\n * 2. envs: if we don't treat it specially, the user will need to make the change not only in the envs aspect, but also\n * in the deps-resolver (because the env is added as a devDependency) and also in the aspect itself (because\n * teambit.envs/env has only the id and not the version). to make it simpler, we ignore the envs in the deps-resolver\n * we ignore the individual aspect that is the env itself. we only show teambit.envs/env and we put the env id and\n * version. later, when the component is loaded, we split the id and the version and put them in the correct places.\n * see workspace.componentExtension / adjustEnvsOnConfigMerge for more details.\n */\nexport class ConfigMerger {\n private currentEnv: EnvData;\n private otherEnv: EnvData;\n private baseEnv?: EnvData;\n private handledExtIds: string[] = [];\n private otherLaneIdsStr: string[];\n constructor(\n private compIdStr: string,\n private workspaceIds: ComponentID[],\n otherLane: Lane | undefined,\n private currentAspects: ExtensionDataList,\n private baseAspects: ExtensionDataList,\n private otherAspects: ExtensionDataList,\n private currentLabel: string,\n private otherLabel: string,\n private logger: Logger\n ) {\n this.otherLaneIdsStr = otherLane?.components.map((c) => c.id.toStringWithoutVersion()) || [];\n }\n\n merge(): ConfigMergeResult {\n this.logger.trace(`************** start config-merger for ${this.compIdStr} **************`);\n this.populateEnvs();\n const results = this.currentAspects.map((currentExt) => {\n const id = currentExt.stringId;\n if (this.handledExtIds.includes(id)) return null;\n this.handledExtIds.push(id);\n const baseExt = this.baseAspects.findExtension(id, true);\n const otherExt = this.otherAspects.findExtension(id, true);\n if (otherExt) {\n // try to 3-way-merge\n return this.mergePerStrategy({ id, currentExt, otherExt, baseExt });\n }\n // exist in current but not in other\n if (baseExt) {\n // was removed on other\n return { id, conflict: { currentConfig: this.getConfig(currentExt), otherConfig: '-' } };\n }\n // exist in current but not in other and base, so it got created on current. nothing to do.\n return null;\n });\n const otherAspectsNotHandledResults = this.otherAspects.map((otherExt) => {\n let id = otherExt.stringId;\n if (this.handledExtIds.includes(id)) return null;\n this.handledExtIds.push(id);\n if (otherExt.extensionId && otherExt.extensionId.hasVersion()) {\n // avoid using the id from the other lane if it exits in the workspace. prefer the id from the workspace.\n const idFromWorkspace = this.getIdFromWorkspace(otherExt.extensionId.toStringWithoutVersion());\n if (idFromWorkspace) {\n const existingExt = this.currentAspects.findExtension(otherExt.extensionId.toStringWithoutVersion(), true);\n if (existingExt) return null; // the aspect is set currently, no need to add it again.\n id = idFromWorkspace._legacy.toString();\n }\n }\n const baseExt = this.baseAspects.findExtension(id, true);\n if (baseExt) {\n // was removed on current\n return { id, conflict: { currentConfig: '-', otherConfig: this.getConfig(otherExt) } };\n }\n // exist in other but not in current and base, so it got created on other.\n return { id, mergedConfig: this.getConfig(otherExt) };\n });\n const envResult = [this.envStrategy()] || [];\n this.logger.trace(`*** end config-merger for ${this.compIdStr} ***\\n`);\n return new ConfigMergeResult(\n this.compIdStr,\n this.currentLabel,\n this.otherLabel,\n compact([...results, ...otherAspectsNotHandledResults, ...envResult])\n );\n }\n\n private populateEnvs() {\n // populate ids\n const getEnvId = (ext: ExtensionDataList) => {\n const envsAspect = ext.findCoreExtension(EnvsAspect.id);\n if (!envsAspect) throw new Error(`unable to find ${EnvsAspect.id} aspect for ${this.compIdStr}`);\n const env = envsAspect.config.env || envsAspect.data.id;\n if (!env)\n throw new Error(`unable to find env for ${this.compIdStr}, the config and data of ${EnvsAspect.id} are empty}`);\n return env;\n };\n const currentEnv = getEnvId(this.currentAspects);\n this.currentEnv = { id: currentEnv };\n const otherEnv = getEnvId(this.otherAspects);\n this.otherEnv = { id: otherEnv };\n const baseEnv = this.baseAspects ? getEnvId(this.baseAspects) : undefined;\n if (baseEnv) this.baseEnv = { id: baseEnv };\n\n // populate version\n const currentEnvAspect = this.currentAspects.findExtension(currentEnv, true);\n if (currentEnvAspect) {\n this.handledExtIds.push(currentEnvAspect.stringId);\n this.currentEnv.version = currentEnvAspect.extensionId?.version;\n this.currentEnv.config = this.getConfig(currentEnvAspect);\n }\n const otherEnvAspect = this.otherAspects.findExtension(otherEnv, true);\n if (otherEnvAspect) {\n this.handledExtIds.push(otherEnvAspect.stringId);\n this.otherEnv.version = otherEnvAspect.extensionId?.version;\n this.otherEnv.config = this.getConfig(otherEnvAspect);\n }\n if (this.baseEnv) {\n const baseEnvAspect = this.baseAspects.findExtension(baseEnv, true);\n if (baseEnvAspect) {\n this.baseEnv.version = baseEnvAspect.extensionId?.version;\n this.baseEnv.config = this.getConfig(baseEnvAspect);\n }\n }\n }\n\n private envStrategy(): MergeStrategyResult | null {\n const mergeStrategyParams: MergeStrategyParamsWithRemoved = {\n id: EnvsAspect.id,\n currentConfig: {\n env: this.currentEnv.version ? `${this.currentEnv.id}@${this.currentEnv.version}` : this.currentEnv.id,\n },\n otherConfig: { env: this.otherEnv.version ? `${this.otherEnv.id}@${this.otherEnv.version}` : this.otherEnv.id },\n };\n if (this.baseEnv) {\n mergeStrategyParams.baseConfig = {\n env: this.baseEnv?.version ? `${this.baseEnv.id}@${this.baseEnv.version}` : this.baseEnv?.id,\n };\n }\n if (this.currentEnv.id === this.otherEnv.id && this.currentEnv.version === this.otherEnv.version) {\n return null;\n }\n if (this.isIdInWorkspace(this.currentEnv.id)) {\n // the env currently used is part of the workspace, that's what the user needs. don't try to resolve anything.\n return null;\n }\n return this.basicConfigMerge(mergeStrategyParams);\n }\n\n private areConfigsEqual(configA: GenericConfigOrRemoved, configB: GenericConfigOrRemoved) {\n return JSON.stringify(configA) === JSON.stringify(configB);\n }\n\n private mergePerStrategy(mergeStrategyParams: MergeStrategyParams): MergeStrategyResult | null {\n const { id, currentExt, otherExt, baseExt } = mergeStrategyParams;\n const depResolverResult = this.depResolverStrategy(mergeStrategyParams);\n\n if (depResolverResult) {\n // if (depResolverResult.mergedConfig || depResolverResult?.conflict) console.log(\"\\n\\nDepResolverResult\", this.compIdStr, '\\n', JSON.stringify(depResolverResult, undefined, 2))\n return depResolverResult;\n }\n const currentConfig = this.getConfig(currentExt);\n const otherConfig = this.getConfig(otherExt);\n const baseConfig = baseExt ? this.getConfig(baseExt) : undefined;\n\n return this.basicConfigMerge({ id, currentConfig, otherConfig, baseConfig });\n }\n\n private basicConfigMerge(mergeStrategyParams: MergeStrategyParamsWithRemoved) {\n const { id, currentConfig, otherConfig, baseConfig } = mergeStrategyParams;\n if (this.areConfigsEqual(currentConfig, otherConfig)) {\n return null;\n }\n if (baseConfig && this.areConfigsEqual(baseConfig, otherConfig)) {\n // was changed on current\n return null;\n }\n if (baseConfig && this.areConfigsEqual(baseConfig, currentConfig)) {\n // was changed on other\n return { id, mergedConfig: otherConfig };\n }\n // either no baseConfig, or baseConfig is also different from both: other and local. that's a conflict.\n return { id, conflict: { currentConfig, otherConfig, baseConfig } };\n }\n\n private depResolverStrategy(params: MergeStrategyParams): MergeStrategyResult | undefined {\n if (params.id !== DependencyResolverAspect.id) return undefined;\n this.logger.trace('start depResolverStrategy');\n const { currentExt, otherExt, baseExt } = params;\n\n const currentConfig = this.getConfig(currentExt);\n const currentPolicy = this.getPolicy(currentConfig);\n const otherConfig = this.getConfig(otherExt);\n const otherPolicy = this.getPolicy(otherConfig);\n\n const baseConfig = baseExt ? this.getConfig(baseExt) : undefined;\n const basePolicy = baseConfig ? this.getPolicy(baseConfig) : undefined;\n\n const getAllDeps = (ext: ExtensionDataList): SerializedDependencyWithPolicy[] => {\n const data = ext.findCoreExtension(DependencyResolverAspect.id)?.data.dependencies;\n if (!data) return [];\n const policy = ext.findCoreExtension(DependencyResolverAspect.id)?.data.policy || [];\n return data.map((d) => {\n const idWithoutVersion = d.__type === 'package' ? d.id : d.id.split('@')[0];\n const existingPolicy = policy.find((p) => p.dependencyId === idWithoutVersion);\n const getPolicyVer = () => {\n if (d.__type === 'package') return undefined; // for packages, the policy is already the version\n if (existingPolicy) return existingPolicy.value.version; // currently it's missing, will be implemented by @Gilad\n if (!semver.valid(d.version)) return d.version; // could be a hash\n // default to `^` or ~ if starts with zero, until we save the policy from the workspace during tag/snap.\n return d.version.startsWith('0.') ? `~${d.version}` : `^${d.version}`;\n };\n return {\n ...d,\n id: idWithoutVersion,\n policy: getPolicyVer(),\n };\n });\n };\n const getDataPolicy = (ext: ExtensionDataList): VariantPolicyEntry[] => {\n return ext.findCoreExtension(DependencyResolverAspect.id)?.data.policy || [];\n };\n\n const getAutoDeps = (ext: ExtensionDataList): SerializedDependencyWithPolicy[] => {\n const allDeps = getAllDeps(ext);\n return allDeps.filter((d) => d.source === 'auto');\n };\n\n const currentAutoData = getAutoDeps(this.currentAspects);\n const currentAllData = getAllDeps(this.currentAspects);\n const currentDataPolicy = getDataPolicy(this.currentAspects);\n const otherData = getAutoDeps(this.otherAspects);\n const currentAndOtherData = uniqBy(currentAutoData.concat(otherData), (d) => d.id);\n const currentAndOtherComponentsData = currentAndOtherData.filter((c) => c.__type === 'component');\n const baseData = getAutoDeps(this.baseAspects);\n\n const getCompIdStrByPkgNameFromData = (pkgName: string): string | undefined => {\n const found = currentAndOtherComponentsData.find((d) => d.packageName === pkgName);\n return found?.id;\n };\n\n const getFromCurrentDataByPackageName = (pkgName: string) => {\n return currentAllData.find((d) => {\n if (d.__type === 'package') return d.id === pkgName;\n return d.packageName === pkgName;\n });\n };\n\n const getFromCurrentDataPolicyByPackageName = (pkgName: string) => {\n return currentDataPolicy.find((d) => d.dependencyId === pkgName);\n };\n\n const mergedPolicy = {\n dependencies: [],\n devDependencies: [],\n peerDependencies: [],\n };\n const conflictedPolicy = {\n dependencies: [],\n devDependencies: [],\n peerDependencies: [],\n };\n let hasConflict = false;\n const lifecycleToDepType = {\n runtime: 'dependencies',\n dev: 'devDependencies',\n peer: 'peerDependencies',\n };\n const handleConfigMerge = () => {\n const addVariantPolicyEntryToPolicy = (dep: VariantPolicyEntry) => {\n const compIdStr = getCompIdStrByPkgNameFromData(dep.dependencyId);\n if (compIdStr && this.isIdInWorkspace(compIdStr)) {\n // no need to add if the id exists in the workspace (regardless the version)\n return;\n }\n const fromCurrentData = getFromCurrentDataByPackageName(dep.dependencyId);\n if (fromCurrentData && !dep.force) {\n if (fromCurrentData.version === dep.value.version) return;\n if (\n !isHash(fromCurrentData.version) &&\n !isHash(dep.value.version) &&\n semver.satisfies(fromCurrentData.version, dep.value.version)\n ) {\n return;\n }\n }\n const fromCurrentDataPolicy = getFromCurrentDataPolicyByPackageName(dep.dependencyId);\n if (fromCurrentDataPolicy && fromCurrentDataPolicy.value.version === dep.value.version) {\n // that's a bug. if it's in the data.policy, it should be in data.dependencies.\n return;\n }\n const depType = lifecycleToDepType[dep.lifecycleType];\n mergedPolicy[depType].push({\n name: dep.dependencyId,\n version: dep.value.version,\n force: dep.force,\n });\n };\n\n if (this.areConfigsEqual(currentConfig, otherConfig)) {\n return;\n }\n if (baseConfig && this.areConfigsEqual(baseConfig, otherConfig)) {\n // was changed on current\n return;\n }\n if (currentConfig === '-' || otherConfig === '-') {\n throw new Error('not implemented. Is it possible to have it as minus?');\n }\n if (baseConfig && this.areConfigsEqual(baseConfig, currentConfig)) {\n // was changed on other\n if (otherPolicy.length) {\n otherPolicy.forEach((dep) => {\n addVariantPolicyEntryToPolicy(dep);\n });\n }\n return;\n }\n\n // either no baseConfig, or baseConfig is also different from both: other and local. that's a conflict.\n if (!currentConfig.policy && !otherConfig.policy) return;\n const currentAndOtherConfig = uniqBy(currentPolicy.concat(otherPolicy), (d) => d.dependencyId);\n currentAndOtherConfig.forEach((dep) => {\n const depType = lifecycleToDepType[dep.lifecycleType];\n const currentDep = currentPolicy.find((d) => d.dependencyId === dep.dependencyId);\n const otherDep = otherPolicy.find((d) => d.dependencyId === dep.dependencyId);\n const baseDep = basePolicy?.find((d) => d.dependencyId === dep.dependencyId);\n\n if (!otherDep) {\n return;\n }\n if (!currentDep) {\n // only on other\n addVariantPolicyEntryToPolicy(otherDep);\n return;\n }\n const currentVer = currentDep.value.version;\n const otherVer = otherDep.value.version;\n if (currentVer === otherVer) {\n return;\n }\n const baseVer = baseDep?.value.version;\n if (baseVer && baseVer === otherVer) {\n return;\n }\n if (baseVer && baseVer === currentVer) {\n addVariantPolicyEntryToPolicy(otherDep);\n return;\n }\n const compIdStr = getCompIdStrByPkgNameFromData(dep.dependencyId);\n if (compIdStr && this.isIdInWorkspace(compIdStr)) {\n // no need to add if the id exists in the workspace (regardless the version)\n return;\n }\n\n hasConflict = true;\n conflictedPolicy[depType].push({\n name: currentDep.dependencyId,\n version: `${conflictIndicator}${currentVer}::${otherVer}::`,\n force: currentDep.force,\n });\n });\n };\n\n handleConfigMerge();\n\n const hasConfigForDep = (depType: string, depName: string) => mergedPolicy[depType].find((d) => d.name === depName);\n const getDepIdAsPkgName = (dep: SerializedDependencyWithPolicy) => {\n if (dep.__type !== 'component') {\n return dep.id;\n }\n // @ts-ignore\n return dep.packageName;\n };\n\n const addSerializedDepToPolicy = (dep: SerializedDependencyWithPolicy) => {\n const depType = lifecycleToDepType[dep.lifecycle];\n if (dep.__type === 'component' && this.isIdInWorkspace(dep.id)) {\n return;\n }\n if (hasConfigForDep(depType, dep.id)) {\n return; // there is already config for it.\n }\n mergedPolicy[depType].push({\n name: getDepIdAsPkgName(dep),\n version: dep.policy || dep.version,\n force: false,\n });\n };\n\n this.logger.trace(\n `currentData, ${currentAllData.length}\\n${currentAllData\n .map((d) => `${d.__type} ${d.id} ${d.version}`)\n .join('\\n')}`\n );\n this.logger.trace(\n `otherData, ${otherData.length}\\n${otherData.map((d) => `${d.__type} ${d.id} ${d.version}`).join('\\n')}`\n );\n this.logger.trace(\n `baseData, ${baseData.length}\\n${baseData.map((d) => `${d.__type} ${d.id} ${d.version}`).join('\\n')}`\n );\n\n // eslint-disable-next-line complexity\n currentAndOtherData.forEach((depData) => {\n if (this.isEnv(depData.id)) {\n // ignore the envs\n return;\n }\n const currentDep = currentAllData.find((d) => d.id === depData.id);\n const otherDep = otherData.find((d) => d.id === depData.id);\n this.logger.trace(`currentDep`, currentDep);\n this.logger.trace(`otherDep`, otherDep);\n if (!otherDep) {\n return;\n }\n if (!currentDep) {\n // only on other\n addSerializedDepToPolicy(otherDep);\n return;\n }\n\n if (\n currentDep.policy &&\n otherDep.policy &&\n isRange(currentDep.policy, currentDep.id) &&\n isRange(otherDep.policy, otherDep.id)\n ) {\n if (semver.satisfies(currentDep.version, otherDep.policy)) {\n return;\n }\n if (semver.satisfies(otherDep.version, currentDep.policy)) {\n return;\n }\n }\n const currentId = currentDep.id;\n const currentVer = currentDep.policy || currentDep.version;\n const otherVer = otherDep.policy || otherDep.version;\n if (currentVer === otherVer) {\n return;\n }\n const baseDep = baseData.find((d) => d.id === currentId);\n const baseVer = baseDep?.policy || baseDep?.version;\n if (baseVer && baseVer === otherVer) {\n return;\n }\n if (currentDep.__type === 'component' && this.isIdInWorkspace(currentId)) {\n // dependencies that exist in the workspace, should be ignored. they'll be resolved later to the version in the ws.\n return;\n }\n const depType = lifecycleToDepType[currentDep.lifecycle];\n if (hasConfigForDep(depType, currentDep.id)) {\n return; // there is already config for it.\n }\n if (baseVer && baseVer === currentVer) {\n addSerializedDepToPolicy(otherDep);\n return;\n }\n hasConflict = true;\n conflictedPolicy[depType].push({\n name: getDepIdAsPkgName(currentDep),\n version: `${conflictIndicator}${currentVer}::${otherVer}::`,\n force: false,\n });\n });\n\n ['dependencies', 'devDependencies', 'peerDependencies'].forEach((depType) => {\n if (!mergedPolicy[depType].length) delete mergedPolicy[depType];\n if (!conflictedPolicy[depType].length) delete conflictedPolicy[depType];\n });\n\n const config = Object.keys(mergedPolicy).length ? { policy: mergedPolicy } : undefined;\n const conflict = hasConflict ? conflictedPolicy : undefined;\n\n return { id: params.id, mergedConfig: config, conflict };\n }\n\n private isIdInWorkspace(id: string): boolean {\n return Boolean(this.getIdFromWorkspace(id)) || this.otherLaneIdsStr.includes(id);\n }\n\n private getIdFromWorkspace(id: string): ComponentID | undefined {\n return this.workspaceIds.find((c) => c.toStringWithoutVersion() === id);\n }\n\n private isEnv(id: string) {\n return id === this.currentEnv.id || id === this.otherEnv.id;\n }\n\n private getConfig(ext: ExtensionDataEntry): GenericConfigOrRemoved {\n if (ext.rawConfig === '-') return ext.rawConfig;\n return omit(ext.rawConfig, ['__specific']);\n }\n\n private getPolicy(config): VariantPolicyEntry[] {\n if (!config.policy) return [];\n return VariantPolicy.fromConfigObject(config.policy).entries;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["conflictIndicator","ConfigMerger","constructor","compIdStr","workspaceIds","otherLane","currentAspects","baseAspects","otherAspects","currentLabel","otherLabel","logger","otherLaneIdsStr","components","map","c","id","toStringWithoutVersion","merge","debug","populateEnvs","results","currentExt","stringId","handledExtIds","includes","push","baseExt","findExtension","otherExt","mergePerStrategy","conflict","currentConfig","getConfig","otherConfig","otherAspectsNotHandledResults","extensionId","hasVersion","idFromWorkspace","getIdFromWorkspace","existingExt","_legacy","toString","mergedConfig","envResult","envStrategy","ConfigMergeResult","compact","getEnvId","ext","envsAspect","findCoreExtension","EnvsAspect","Error","env","config","data","currentEnv","otherEnv","baseEnv","undefined","currentEnvAspect","version","otherEnvAspect","baseEnvAspect","mergeStrategyParams","baseConfig","isIdInWorkspace","basicConfigMerge","areConfigsEqual","configA","configB","JSON","stringify","depResolverResult","depResolverStrategy","params","DependencyResolverAspect","trace","currentPolicy","getPolicy","otherPolicy","basePolicy","getAllDeps","dependencies","policy","d","idWithoutVersion","__type","split","existingPolicy","find","p","dependencyId","getPolicyVer","value","getDataPolicy","getAutoDeps","allDeps","filter","source","currentAutoData","currentAllData","currentDataPolicy","otherData","currentAndOtherData","uniqBy","concat","currentAndOtherComponentsData","baseData","getCompIdStrByPkgNameFromData","pkgName","found","packageName","getFromCurrentDataByPackageName","getFromCurrentDataPolicyByPackageName","mergedPolicy","devDependencies","peerDependencies","conflictedPolicy","hasConflict","lifecycleToDepType","runtime","dev","peer","handleConfigMerge","addVariantPolicyEntryToPolicy","dep","fromCurrentData","force","isHash","semver","satisfies","fromCurrentDataPolicy","depType","lifecycleType","name","length","forEach","currentAndOtherConfig","currentDep","otherDep","baseDep","currentVer","otherVer","baseVer","hasConfigForDep","depName","getDepIdAsPkgName","addSerializedDepToPolicy","lifecycle","join","depData","isEnv","isRange","currentId","Object","keys","Boolean","rawConfig","omit","VariantPolicy","fromConfigObject","entries"],"sources":["config-merger.ts"],"sourcesContent":["import { ComponentID } from '@teambit/component-id';\nimport semver from 'semver';\nimport { Logger } from '@teambit/logger';\nimport { isHash } from '@teambit/component-version';\nimport {\n DependencyResolverAspect,\n isRange,\n SerializedDependency,\n VariantPolicy,\n VariantPolicyEntry,\n} from '@teambit/dependency-resolver';\nimport { Lane } from '@teambit/legacy/dist/scope/models';\nimport { EnvsAspect } from '@teambit/envs';\nimport { ExtensionDataEntry, ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { compact, omit, uniqBy } from 'lodash';\nimport { ConfigMergeResult } from './config-merge-result';\n\nexport type GenericConfigOrRemoved = Record<string, any> | '-';\n\ntype EnvData = { id: string; version?: string; config?: GenericConfigOrRemoved };\n\ntype SerializedDependencyWithPolicy = SerializedDependency & { policy?: string; packageName?: string };\n\nexport const conflictIndicator = 'CONFLICT::';\n\nexport type MergeStrategyResult = {\n id: string;\n mergedConfig?: GenericConfigOrRemoved;\n conflict?: Record<string, any>;\n};\ntype MergeStrategyParamsWithRemoved = {\n id: string;\n currentConfig: GenericConfigOrRemoved;\n otherConfig: GenericConfigOrRemoved;\n baseConfig?: GenericConfigOrRemoved;\n};\ntype MergeStrategyParams = {\n id: string;\n currentExt: ExtensionDataEntry;\n otherExt: ExtensionDataEntry;\n baseExt?: ExtensionDataEntry;\n};\n\n/**\n * perform 3-way merge of component configuration (aspects).\n * normally this is needed when merging one lane into another. the component may have different aspects config in each lane.\n * the baseAspects are the aspects of the component in the diversion point (the common ancestor of the two lanes).\n * the currentAspects are the aspects of the component in the current lane.\n * the otherAspects are the aspects of the component in the other lane. this is the lane we merge into the current lane.\n *\n * the basic merging strategy is a simple comparison between the aspect-configs, if they're different, we have a conflict.\n * we have two special cases:\n *\n * 1. dependency-resolver: we do a deeper check for the policy, we compare each dependency separately. also, we take\n * into account not only the config, but also the data. this is needed because some dependencies are automatically\n * added by Bit (from the import statements in the code) and they're not in the config. the final config has the deps\n * from both sources, the config and the data. The way we know to differentiate between them is by the \"force\" prop.\n * the config has always force: true.\n *\n * 2. envs: if we don't treat it specially, the user will need to make the change not only in the envs aspect, but also\n * in the deps-resolver (because the env is added as a devDependency) and also in the aspect itself (because\n * teambit.envs/env has only the id and not the version). to make it simpler, we ignore the envs in the deps-resolver\n * we ignore the individual aspect that is the env itself. we only show teambit.envs/env and we put the env id and\n * version. later, when the component is loaded, we split the id and the version and put them in the correct places.\n * see workspace.componentExtension / adjustEnvsOnConfigMerge for more details.\n */\nexport class ConfigMerger {\n private currentEnv: EnvData;\n private otherEnv: EnvData;\n private baseEnv?: EnvData;\n private handledExtIds: string[] = [];\n private otherLaneIdsStr: string[];\n constructor(\n private compIdStr: string,\n private workspaceIds: ComponentID[],\n otherLane: Lane | undefined,\n private currentAspects: ExtensionDataList,\n private baseAspects: ExtensionDataList,\n private otherAspects: ExtensionDataList,\n private currentLabel: string,\n private otherLabel: string,\n private logger: Logger\n ) {\n this.otherLaneIdsStr = otherLane?.components.map((c) => c.id.toStringWithoutVersion()) || [];\n }\n\n merge(): ConfigMergeResult {\n this.logger.debug(`\\n************** start config-merger for ${this.compIdStr} **************`);\n this.populateEnvs();\n const results = this.currentAspects.map((currentExt) => {\n const id = currentExt.stringId;\n if (this.handledExtIds.includes(id)) return null;\n this.handledExtIds.push(id);\n const baseExt = this.baseAspects.findExtension(id, true);\n const otherExt = this.otherAspects.findExtension(id, true);\n if (otherExt) {\n // try to 3-way-merge\n return this.mergePerStrategy({ id, currentExt, otherExt, baseExt });\n }\n // exist in current but not in other\n if (baseExt) {\n // was removed on other\n return { id, conflict: { currentConfig: this.getConfig(currentExt), otherConfig: '-' } };\n }\n // exist in current but not in other and base, so it got created on current. nothing to do.\n return null;\n });\n const otherAspectsNotHandledResults = this.otherAspects.map((otherExt) => {\n let id = otherExt.stringId;\n if (this.handledExtIds.includes(id)) return null;\n this.handledExtIds.push(id);\n if (otherExt.extensionId && otherExt.extensionId.hasVersion()) {\n // avoid using the id from the other lane if it exits in the workspace. prefer the id from the workspace.\n const idFromWorkspace = this.getIdFromWorkspace(otherExt.extensionId.toStringWithoutVersion());\n if (idFromWorkspace) {\n const existingExt = this.currentAspects.findExtension(otherExt.extensionId.toStringWithoutVersion(), true);\n if (existingExt) return null; // the aspect is set currently, no need to add it again.\n id = idFromWorkspace._legacy.toString();\n }\n }\n const baseExt = this.baseAspects.findExtension(id, true);\n if (baseExt) {\n // was removed on current\n return { id, conflict: { currentConfig: '-', otherConfig: this.getConfig(otherExt) } };\n }\n // exist in other but not in current and base, so it got created on other.\n return { id, mergedConfig: this.getConfig(otherExt) };\n });\n const envResult = [this.envStrategy()] || [];\n this.logger.debug(`*** end config-merger for ${this.compIdStr} ***\\n`);\n return new ConfigMergeResult(\n this.compIdStr,\n this.currentLabel,\n this.otherLabel,\n compact([...results, ...otherAspectsNotHandledResults, ...envResult])\n );\n }\n\n private populateEnvs() {\n // populate ids\n const getEnvId = (ext: ExtensionDataList) => {\n const envsAspect = ext.findCoreExtension(EnvsAspect.id);\n if (!envsAspect) throw new Error(`unable to find ${EnvsAspect.id} aspect for ${this.compIdStr}`);\n const env = envsAspect.config.env || envsAspect.data.id;\n if (!env)\n throw new Error(`unable to find env for ${this.compIdStr}, the config and data of ${EnvsAspect.id} are empty}`);\n return env;\n };\n const currentEnv = getEnvId(this.currentAspects);\n this.currentEnv = { id: currentEnv };\n const otherEnv = getEnvId(this.otherAspects);\n this.otherEnv = { id: otherEnv };\n const baseEnv = this.baseAspects ? getEnvId(this.baseAspects) : undefined;\n if (baseEnv) this.baseEnv = { id: baseEnv };\n\n // populate version\n const currentEnvAspect = this.currentAspects.findExtension(currentEnv, true);\n if (currentEnvAspect) {\n this.handledExtIds.push(currentEnvAspect.stringId);\n this.currentEnv.version = currentEnvAspect.extensionId?.version;\n this.currentEnv.config = this.getConfig(currentEnvAspect);\n }\n const otherEnvAspect = this.otherAspects.findExtension(otherEnv, true);\n if (otherEnvAspect) {\n this.handledExtIds.push(otherEnvAspect.stringId);\n this.otherEnv.version = otherEnvAspect.extensionId?.version;\n this.otherEnv.config = this.getConfig(otherEnvAspect);\n }\n if (this.baseEnv) {\n const baseEnvAspect = this.baseAspects.findExtension(baseEnv, true);\n if (baseEnvAspect) {\n this.baseEnv.version = baseEnvAspect.extensionId?.version;\n this.baseEnv.config = this.getConfig(baseEnvAspect);\n }\n }\n }\n\n private envStrategy(): MergeStrategyResult | null {\n const mergeStrategyParams: MergeStrategyParamsWithRemoved = {\n id: EnvsAspect.id,\n currentConfig: {\n env: this.currentEnv.version ? `${this.currentEnv.id}@${this.currentEnv.version}` : this.currentEnv.id,\n },\n otherConfig: { env: this.otherEnv.version ? `${this.otherEnv.id}@${this.otherEnv.version}` : this.otherEnv.id },\n };\n if (this.baseEnv) {\n mergeStrategyParams.baseConfig = {\n env: this.baseEnv?.version ? `${this.baseEnv.id}@${this.baseEnv.version}` : this.baseEnv?.id,\n };\n }\n if (this.currentEnv.id === this.otherEnv.id && this.currentEnv.version === this.otherEnv.version) {\n return null;\n }\n if (this.isIdInWorkspace(this.currentEnv.id)) {\n // the env currently used is part of the workspace, that's what the user needs. don't try to resolve anything.\n return null;\n }\n return this.basicConfigMerge(mergeStrategyParams);\n }\n\n private areConfigsEqual(configA: GenericConfigOrRemoved, configB: GenericConfigOrRemoved) {\n return JSON.stringify(configA) === JSON.stringify(configB);\n }\n\n private mergePerStrategy(mergeStrategyParams: MergeStrategyParams): MergeStrategyResult | null {\n const { id, currentExt, otherExt, baseExt } = mergeStrategyParams;\n const depResolverResult = this.depResolverStrategy(mergeStrategyParams);\n\n if (depResolverResult) {\n // if (depResolverResult.mergedConfig || depResolverResult?.conflict) console.log(\"\\n\\nDepResolverResult\", this.compIdStr, '\\n', JSON.stringify(depResolverResult, undefined, 2))\n return depResolverResult;\n }\n const currentConfig = this.getConfig(currentExt);\n const otherConfig = this.getConfig(otherExt);\n const baseConfig = baseExt ? this.getConfig(baseExt) : undefined;\n\n return this.basicConfigMerge({ id, currentConfig, otherConfig, baseConfig });\n }\n\n private basicConfigMerge(mergeStrategyParams: MergeStrategyParamsWithRemoved) {\n const { id, currentConfig, otherConfig, baseConfig } = mergeStrategyParams;\n if (this.areConfigsEqual(currentConfig, otherConfig)) {\n return null;\n }\n if (baseConfig && this.areConfigsEqual(baseConfig, otherConfig)) {\n // was changed on current\n return null;\n }\n if (baseConfig && this.areConfigsEqual(baseConfig, currentConfig)) {\n // was changed on other\n return { id, mergedConfig: otherConfig };\n }\n // either no baseConfig, or baseConfig is also different from both: other and local. that's a conflict.\n return { id, conflict: { currentConfig, otherConfig, baseConfig } };\n }\n\n private depResolverStrategy(params: MergeStrategyParams): MergeStrategyResult | undefined {\n if (params.id !== DependencyResolverAspect.id) return undefined;\n this.logger.trace(`start depResolverStrategy for ${this.compIdStr}`);\n const { currentExt, otherExt, baseExt } = params;\n\n const currentConfig = this.getConfig(currentExt);\n const currentPolicy = this.getPolicy(currentConfig);\n const otherConfig = this.getConfig(otherExt);\n const otherPolicy = this.getPolicy(otherConfig);\n\n const baseConfig = baseExt ? this.getConfig(baseExt) : undefined;\n const basePolicy = baseConfig ? this.getPolicy(baseConfig) : undefined;\n\n const getAllDeps = (ext: ExtensionDataList): SerializedDependencyWithPolicy[] => {\n const data = ext.findCoreExtension(DependencyResolverAspect.id)?.data.dependencies;\n if (!data) return [];\n const policy = ext.findCoreExtension(DependencyResolverAspect.id)?.data.policy || [];\n return data.map((d) => {\n const idWithoutVersion = d.__type === 'package' ? d.id : d.id.split('@')[0];\n const existingPolicy = policy.find((p) => p.dependencyId === idWithoutVersion);\n const getPolicyVer = () => {\n if (d.__type === 'package') return undefined; // for packages, the policy is already the version\n if (existingPolicy) return existingPolicy.value.version; // currently it's missing, will be implemented by @Gilad\n return d.version;\n // if (!semver.valid(d.version)) return d.version; // could be a hash\n // // default to `^` or ~ if starts with zero, until we save the policy from the workspace during tag/snap.\n // return d.version.startsWith('0.') ? `~${d.version}` : `^${d.version}`;\n };\n return {\n ...d,\n id: idWithoutVersion,\n policy: getPolicyVer(),\n };\n });\n };\n const getDataPolicy = (ext: ExtensionDataList): VariantPolicyEntry[] => {\n return ext.findCoreExtension(DependencyResolverAspect.id)?.data.policy || [];\n };\n\n const getAutoDeps = (ext: ExtensionDataList): SerializedDependencyWithPolicy[] => {\n const allDeps = getAllDeps(ext);\n return allDeps.filter((d) => d.source === 'auto');\n };\n\n const currentAutoData = getAutoDeps(this.currentAspects);\n const currentAllData = getAllDeps(this.currentAspects);\n const currentDataPolicy = getDataPolicy(this.currentAspects);\n const otherData = getAutoDeps(this.otherAspects);\n const currentAndOtherData = uniqBy(currentAutoData.concat(otherData), (d) => d.id);\n const currentAndOtherComponentsData = currentAndOtherData.filter((c) => c.__type === 'component');\n const baseData = getAutoDeps(this.baseAspects);\n\n const getCompIdStrByPkgNameFromData = (pkgName: string): string | undefined => {\n const found = currentAndOtherComponentsData.find((d) => d.packageName === pkgName);\n return found?.id;\n };\n\n const getFromCurrentDataByPackageName = (pkgName: string) => {\n return currentAllData.find((d) => {\n if (d.__type === 'package') return d.id === pkgName;\n return d.packageName === pkgName;\n });\n };\n\n const getFromCurrentDataPolicyByPackageName = (pkgName: string) => {\n return currentDataPolicy.find((d) => d.dependencyId === pkgName);\n };\n\n const mergedPolicy = {\n dependencies: [],\n devDependencies: [],\n peerDependencies: [],\n };\n const conflictedPolicy = {\n dependencies: [],\n devDependencies: [],\n peerDependencies: [],\n };\n let hasConflict = false;\n const lifecycleToDepType = {\n runtime: 'dependencies',\n dev: 'devDependencies',\n peer: 'peerDependencies',\n };\n const handleConfigMerge = () => {\n const addVariantPolicyEntryToPolicy = (dep: VariantPolicyEntry) => {\n const compIdStr = getCompIdStrByPkgNameFromData(dep.dependencyId);\n if (compIdStr && this.isIdInWorkspace(compIdStr)) {\n // no need to add if the id exists in the workspace (regardless the version)\n return;\n }\n const fromCurrentData = getFromCurrentDataByPackageName(dep.dependencyId);\n if (fromCurrentData && !dep.force) {\n if (fromCurrentData.version === dep.value.version) return;\n if (\n !isHash(fromCurrentData.version) &&\n !isHash(dep.value.version) &&\n semver.satisfies(fromCurrentData.version, dep.value.version)\n ) {\n return;\n }\n }\n const fromCurrentDataPolicy = getFromCurrentDataPolicyByPackageName(dep.dependencyId);\n if (fromCurrentDataPolicy && fromCurrentDataPolicy.value.version === dep.value.version) {\n // that's a bug. if it's in the data.policy, it should be in data.dependencies.\n return;\n }\n const depType = lifecycleToDepType[dep.lifecycleType];\n mergedPolicy[depType].push({\n name: dep.dependencyId,\n version: dep.value.version,\n force: dep.force,\n });\n };\n\n if (this.areConfigsEqual(currentConfig, otherConfig)) {\n return;\n }\n if (baseConfig && this.areConfigsEqual(baseConfig, otherConfig)) {\n // was changed on current\n return;\n }\n if (currentConfig === '-' || otherConfig === '-') {\n throw new Error('not implemented. Is it possible to have it as minus?');\n }\n if (baseConfig && this.areConfigsEqual(baseConfig, currentConfig)) {\n // was changed on other\n if (otherPolicy.length) {\n otherPolicy.forEach((dep) => {\n addVariantPolicyEntryToPolicy(dep);\n });\n }\n return;\n }\n\n // either no baseConfig, or baseConfig is also different from both: other and local. that's a conflict.\n if (!currentConfig.policy && !otherConfig.policy) return;\n const currentAndOtherConfig = uniqBy(currentPolicy.concat(otherPolicy), (d) => d.dependencyId);\n currentAndOtherConfig.forEach((dep) => {\n const depType = lifecycleToDepType[dep.lifecycleType];\n const currentDep = currentPolicy.find((d) => d.dependencyId === dep.dependencyId);\n const otherDep = otherPolicy.find((d) => d.dependencyId === dep.dependencyId);\n const baseDep = basePolicy?.find((d) => d.dependencyId === dep.dependencyId);\n\n if (!otherDep) {\n return;\n }\n if (!currentDep) {\n // only on other\n addVariantPolicyEntryToPolicy(otherDep);\n return;\n }\n const currentVer = currentDep.value.version;\n const otherVer = otherDep.value.version;\n if (currentVer === otherVer) {\n return;\n }\n const baseVer = baseDep?.value.version;\n if (baseVer && baseVer === otherVer) {\n return;\n }\n if (baseVer && baseVer === currentVer) {\n addVariantPolicyEntryToPolicy(otherDep);\n return;\n }\n const compIdStr = getCompIdStrByPkgNameFromData(dep.dependencyId);\n if (compIdStr && this.isIdInWorkspace(compIdStr)) {\n // no need to add if the id exists in the workspace (regardless the version)\n return;\n }\n\n hasConflict = true;\n conflictedPolicy[depType].push({\n name: currentDep.dependencyId,\n version: `${conflictIndicator}${currentVer}::${otherVer}::`,\n force: currentDep.force,\n });\n });\n };\n\n handleConfigMerge();\n\n const hasConfigForDep = (depType: string, depName: string) => mergedPolicy[depType].find((d) => d.name === depName);\n const getDepIdAsPkgName = (dep: SerializedDependencyWithPolicy) => {\n if (dep.__type !== 'component') {\n return dep.id;\n }\n // @ts-ignore\n return dep.packageName;\n };\n\n const addSerializedDepToPolicy = (dep: SerializedDependencyWithPolicy) => {\n const depType = lifecycleToDepType[dep.lifecycle];\n if (dep.__type === 'component' && this.isIdInWorkspace(dep.id)) {\n return;\n }\n if (hasConfigForDep(depType, dep.id)) {\n return; // there is already config for it.\n }\n mergedPolicy[depType].push({\n name: getDepIdAsPkgName(dep),\n version: dep.policy || dep.version,\n force: false,\n });\n };\n\n this.logger.debug(\n `currentData, ${currentAllData.length}\\n${currentAllData\n .map((d) => `${d.__type} ${d.id} ${d.version}`)\n .join('\\n')}`\n );\n this.logger.debug(\n `otherData, ${otherData.length}\\n${otherData.map((d) => `${d.__type} ${d.id} ${d.version}`).join('\\n')}`\n );\n this.logger.debug(\n `baseData, ${baseData.length}\\n${baseData.map((d) => `${d.__type} ${d.id} ${d.version}`).join('\\n')}`\n );\n\n // eslint-disable-next-line complexity\n currentAndOtherData.forEach((depData) => {\n this.logger.trace(`depData.id, ${depData.id}`);\n if (this.isEnv(depData.id)) {\n // ignore the envs\n return;\n }\n const currentDep = currentAllData.find((d) => d.id === depData.id);\n const otherDep = otherData.find((d) => d.id === depData.id);\n const baseDep = baseData.find((d) => d.id === depData.id);\n\n this.logger.trace(`currentDep`, currentDep);\n this.logger.trace(`otherDep`, otherDep);\n this.logger.trace(`baseDep`, baseDep);\n if (!otherDep) {\n return;\n }\n if (!currentDep) {\n if (baseDep) {\n // exists in other and base, so it was removed from current\n return;\n }\n // only on other\n addSerializedDepToPolicy(otherDep);\n return;\n }\n\n if (\n currentDep.policy &&\n otherDep.policy &&\n isRange(currentDep.policy, currentDep.id) &&\n isRange(otherDep.policy, otherDep.id)\n ) {\n if (semver.satisfies(currentDep.version, otherDep.policy)) {\n return;\n }\n if (semver.satisfies(otherDep.version, currentDep.policy)) {\n return;\n }\n }\n\n const currentVer = currentDep.policy || currentDep.version;\n const otherVer = otherDep.policy || otherDep.version;\n if (currentVer === otherVer) {\n return;\n }\n const baseVer = baseDep?.policy || baseDep?.version;\n if (baseVer && baseVer === otherVer) {\n return;\n }\n const currentId = currentDep.id;\n if (currentDep.__type === 'component' && this.isIdInWorkspace(currentId)) {\n // dependencies that exist in the workspace, should be ignored. they'll be resolved later to the version in the ws.\n return;\n }\n const depType = lifecycleToDepType[currentDep.lifecycle];\n if (hasConfigForDep(depType, currentDep.id)) {\n return; // there is already config for it.\n }\n if (baseVer && baseVer === currentVer) {\n addSerializedDepToPolicy(otherDep);\n return;\n }\n hasConflict = true;\n conflictedPolicy[depType].push({\n name: getDepIdAsPkgName(currentDep),\n version: `${conflictIndicator}${currentVer}::${otherVer}::`,\n force: false,\n });\n });\n\n ['dependencies', 'devDependencies', 'peerDependencies'].forEach((depType) => {\n if (!mergedPolicy[depType].length) delete mergedPolicy[depType];\n if (!conflictedPolicy[depType].length) delete conflictedPolicy[depType];\n });\n\n const config = Object.keys(mergedPolicy).length ? { policy: mergedPolicy } : undefined;\n const conflict = hasConflict ? conflictedPolicy : undefined;\n\n this.logger.debug('final mergedConfig', config);\n this.logger.debug('final conflict', conflict);\n\n return { id: params.id, mergedConfig: config, conflict };\n }\n\n private isIdInWorkspace(id: string): boolean {\n return Boolean(this.getIdFromWorkspace(id)) || this.otherLaneIdsStr.includes(id);\n }\n\n private getIdFromWorkspace(id: string): ComponentID | undefined {\n return this.workspaceIds.find((c) => c.toStringWithoutVersion() === id);\n }\n\n private isEnv(id: string) {\n return id === this.currentEnv.id || id === this.otherEnv.id;\n }\n\n private getConfig(ext: ExtensionDataEntry): GenericConfigOrRemoved {\n if (ext.rawConfig === '-') return ext.rawConfig;\n return omit(ext.rawConfig, ['__specific']);\n }\n\n private getPolicy(config): VariantPolicyEntry[] {\n if (!config.policy) return [];\n return VariantPolicy.fromConfigObject(config.policy).entries;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAQA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAA0D;AAAA;AAQnD,MAAMA,iBAAiB,GAAG,YAAY;AAAC;AAoB9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,YAAY,CAAC;EAMxBC,WAAW,CACDC,SAAiB,EACjBC,YAA2B,EACnCC,SAA2B,EACnBC,cAAiC,EACjCC,WAA8B,EAC9BC,YAA+B,EAC/BC,YAAoB,EACpBC,UAAkB,EAClBC,MAAc,EACtB;IAAA,KATQR,SAAiB,GAAjBA,SAAiB;IAAA,KACjBC,YAA2B,GAA3BA,YAA2B;IAAA,KAE3BE,cAAiC,GAAjCA,cAAiC;IAAA,KACjCC,WAA8B,GAA9BA,WAA8B;IAAA,KAC9BC,YAA+B,GAA/BA,YAA+B;IAAA,KAC/BC,YAAoB,GAApBA,YAAoB;IAAA,KACpBC,UAAkB,GAAlBA,UAAkB;IAAA,KAClBC,MAAc,GAAdA,MAAc;IAAA;IAAA;IAAA;IAAA,uDAXU,EAAE;IAAA;IAalC,IAAI,CAACC,eAAe,GAAG,CAAAP,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEQ,UAAU,CAACC,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,EAAE,CAACC,sBAAsB,EAAE,CAAC,KAAI,EAAE;EAC9F;EAEAC,KAAK,GAAsB;IACzB,IAAI,CAACP,MAAM,CAACQ,KAAK,CAAE,4CAA2C,IAAI,CAAChB,SAAU,iBAAgB,CAAC;IAC9F,IAAI,CAACiB,YAAY,EAAE;IACnB,MAAMC,OAAO,GAAG,IAAI,CAACf,cAAc,CAACQ,GAAG,CAAEQ,UAAU,IAAK;MACtD,MAAMN,EAAE,GAAGM,UAAU,CAACC,QAAQ;MAC9B,IAAI,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACT,EAAE,CAAC,EAAE,OAAO,IAAI;MAChD,IAAI,CAACQ,aAAa,CAACE,IAAI,CAACV,EAAE,CAAC;MAC3B,MAAMW,OAAO,GAAG,IAAI,CAACpB,WAAW,CAACqB,aAAa,CAACZ,EAAE,EAAE,IAAI,CAAC;MACxD,MAAMa,QAAQ,GAAG,IAAI,CAACrB,YAAY,CAACoB,aAAa,CAACZ,EAAE,EAAE,IAAI,CAAC;MAC1D,IAAIa,QAAQ,EAAE;QACZ;QACA,OAAO,IAAI,CAACC,gBAAgB,CAAC;UAAEd,EAAE;UAAEM,UAAU;UAAEO,QAAQ;UAAEF;QAAQ,CAAC,CAAC;MACrE;MACA;MACA,IAAIA,OAAO,EAAE;QACX;QACA,OAAO;UAAEX,EAAE;UAAEe,QAAQ,EAAE;YAAEC,aAAa,EAAE,IAAI,CAACC,SAAS,CAACX,UAAU,CAAC;YAAEY,WAAW,EAAE;UAAI;QAAE,CAAC;MAC1F;MACA;MACA,OAAO,IAAI;IACb,CAAC,CAAC;IACF,MAAMC,6BAA6B,GAAG,IAAI,CAAC3B,YAAY,CAACM,GAAG,CAAEe,QAAQ,IAAK;MACxE,IAAIb,EAAE,GAAGa,QAAQ,CAACN,QAAQ;MAC1B,IAAI,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACT,EAAE,CAAC,EAAE,OAAO,IAAI;MAChD,IAAI,CAACQ,aAAa,CAACE,IAAI,CAACV,EAAE,CAAC;MAC3B,IAAIa,QAAQ,CAACO,WAAW,IAAIP,QAAQ,CAACO,WAAW,CAACC,UAAU,EAAE,EAAE;QAC7D;QACA,MAAMC,eAAe,GAAG,IAAI,CAACC,kBAAkB,CAACV,QAAQ,CAACO,WAAW,CAACnB,sBAAsB,EAAE,CAAC;QAC9F,IAAIqB,eAAe,EAAE;UACnB,MAAME,WAAW,GAAG,IAAI,CAAClC,cAAc,CAACsB,aAAa,CAACC,QAAQ,CAACO,WAAW,CAACnB,sBAAsB,EAAE,EAAE,IAAI,CAAC;UAC1G,IAAIuB,WAAW,EAAE,OAAO,IAAI,CAAC,CAAC;UAC9BxB,EAAE,GAAGsB,eAAe,CAACG,OAAO,CAACC,QAAQ,EAAE;QACzC;MACF;MACA,MAAMf,OAAO,GAAG,IAAI,CAACpB,WAAW,CAACqB,aAAa,CAACZ,EAAE,EAAE,IAAI,CAAC;MACxD,IAAIW,OAAO,EAAE;QACX;QACA,OAAO;UAAEX,EAAE;UAAEe,QAAQ,EAAE;YAAEC,aAAa,EAAE,GAAG;YAAEE,WAAW,EAAE,IAAI,CAACD,SAAS,CAACJ,QAAQ;UAAE;QAAE,CAAC;MACxF;MACA;MACA,OAAO;QAAEb,EAAE;QAAE2B,YAAY,EAAE,IAAI,CAACV,SAAS,CAACJ,QAAQ;MAAE,CAAC;IACvD,CAAC,CAAC;IACF,MAAMe,SAAS,GAAG,CAAC,IAAI,CAACC,WAAW,EAAE,CAAC,IAAI,EAAE;IAC5C,IAAI,CAAClC,MAAM,CAACQ,KAAK,CAAE,6BAA4B,IAAI,CAAChB,SAAU,QAAO,CAAC;IACtE,OAAO,KAAI2C,sCAAiB,EAC1B,IAAI,CAAC3C,SAAS,EACd,IAAI,CAACM,YAAY,EACjB,IAAI,CAACC,UAAU,EACf,IAAAqC,iBAAO,EAAC,CAAC,GAAG1B,OAAO,EAAE,GAAGc,6BAA6B,EAAE,GAAGS,SAAS,CAAC,CAAC,CACtE;EACH;EAEQxB,YAAY,GAAG;IACrB;IACA,MAAM4B,QAAQ,GAAIC,GAAsB,IAAK;MAC3C,MAAMC,UAAU,GAAGD,GAAG,CAACE,iBAAiB,CAACC,kBAAU,CAACpC,EAAE,CAAC;MACvD,IAAI,CAACkC,UAAU,EAAE,MAAM,IAAIG,KAAK,CAAE,kBAAiBD,kBAAU,CAACpC,EAAG,eAAc,IAAI,CAACb,SAAU,EAAC,CAAC;MAChG,MAAMmD,GAAG,GAAGJ,UAAU,CAACK,MAAM,CAACD,GAAG,IAAIJ,UAAU,CAACM,IAAI,CAACxC,EAAE;MACvD,IAAI,CAACsC,GAAG,EACN,MAAM,IAAID,KAAK,CAAE,0BAAyB,IAAI,CAAClD,SAAU,4BAA2BiD,kBAAU,CAACpC,EAAG,aAAY,CAAC;MACjH,OAAOsC,GAAG;IACZ,CAAC;IACD,MAAMG,UAAU,GAAGT,QAAQ,CAAC,IAAI,CAAC1C,cAAc,CAAC;IAChD,IAAI,CAACmD,UAAU,GAAG;MAAEzC,EAAE,EAAEyC;IAAW,CAAC;IACpC,MAAMC,QAAQ,GAAGV,QAAQ,CAAC,IAAI,CAACxC,YAAY,CAAC;IAC5C,IAAI,CAACkD,QAAQ,GAAG;MAAE1C,EAAE,EAAE0C;IAAS,CAAC;IAChC,MAAMC,OAAO,GAAG,IAAI,CAACpD,WAAW,GAAGyC,QAAQ,CAAC,IAAI,CAACzC,WAAW,CAAC,GAAGqD,SAAS;IACzE,IAAID,OAAO,EAAE,IAAI,CAACA,OAAO,GAAG;MAAE3C,EAAE,EAAE2C;IAAQ,CAAC;;IAE3C;IACA,MAAME,gBAAgB,GAAG,IAAI,CAACvD,cAAc,CAACsB,aAAa,CAAC6B,UAAU,EAAE,IAAI,CAAC;IAC5E,IAAII,gBAAgB,EAAE;MAAA;MACpB,IAAI,CAACrC,aAAa,CAACE,IAAI,CAACmC,gBAAgB,CAACtC,QAAQ,CAAC;MAClD,IAAI,CAACkC,UAAU,CAACK,OAAO,4BAAGD,gBAAgB,CAACzB,WAAW,0DAA5B,sBAA8B0B,OAAO;MAC/D,IAAI,CAACL,UAAU,CAACF,MAAM,GAAG,IAAI,CAACtB,SAAS,CAAC4B,gBAAgB,CAAC;IAC3D;IACA,MAAME,cAAc,GAAG,IAAI,CAACvD,YAAY,CAACoB,aAAa,CAAC8B,QAAQ,EAAE,IAAI,CAAC;IACtE,IAAIK,cAAc,EAAE;MAAA;MAClB,IAAI,CAACvC,aAAa,CAACE,IAAI,CAACqC,cAAc,CAACxC,QAAQ,CAAC;MAChD,IAAI,CAACmC,QAAQ,CAACI,OAAO,4BAAGC,cAAc,CAAC3B,WAAW,0DAA1B,sBAA4B0B,OAAO;MAC3D,IAAI,CAACJ,QAAQ,CAACH,MAAM,GAAG,IAAI,CAACtB,SAAS,CAAC8B,cAAc,CAAC;IACvD;IACA,IAAI,IAAI,CAACJ,OAAO,EAAE;MAChB,MAAMK,aAAa,GAAG,IAAI,CAACzD,WAAW,CAACqB,aAAa,CAAC+B,OAAO,EAAE,IAAI,CAAC;MACnE,IAAIK,aAAa,EAAE;QAAA;QACjB,IAAI,CAACL,OAAO,CAACG,OAAO,4BAAGE,aAAa,CAAC5B,WAAW,0DAAzB,sBAA2B0B,OAAO;QACzD,IAAI,CAACH,OAAO,CAACJ,MAAM,GAAG,IAAI,CAACtB,SAAS,CAAC+B,aAAa,CAAC;MACrD;IACF;EACF;EAEQnB,WAAW,GAA+B;IAChD,MAAMoB,mBAAmD,GAAG;MAC1DjD,EAAE,EAAEoC,kBAAU,CAACpC,EAAE;MACjBgB,aAAa,EAAE;QACbsB,GAAG,EAAE,IAAI,CAACG,UAAU,CAACK,OAAO,GAAI,GAAE,IAAI,CAACL,UAAU,CAACzC,EAAG,IAAG,IAAI,CAACyC,UAAU,CAACK,OAAQ,EAAC,GAAG,IAAI,CAACL,UAAU,CAACzC;MACtG,CAAC;MACDkB,WAAW,EAAE;QAAEoB,GAAG,EAAE,IAAI,CAACI,QAAQ,CAACI,OAAO,GAAI,GAAE,IAAI,CAACJ,QAAQ,CAAC1C,EAAG,IAAG,IAAI,CAAC0C,QAAQ,CAACI,OAAQ,EAAC,GAAG,IAAI,CAACJ,QAAQ,CAAC1C;MAAG;IAChH,CAAC;IACD,IAAI,IAAI,CAAC2C,OAAO,EAAE;MAAA;MAChBM,mBAAmB,CAACC,UAAU,GAAG;QAC/BZ,GAAG,EAAE,qBAAI,CAACK,OAAO,0CAAZ,cAAcG,OAAO,GAAI,GAAE,IAAI,CAACH,OAAO,CAAC3C,EAAG,IAAG,IAAI,CAAC2C,OAAO,CAACG,OAAQ,EAAC,qBAAG,IAAI,CAACH,OAAO,mDAAZ,eAAc3C;MAC5F,CAAC;IACH;IACA,IAAI,IAAI,CAACyC,UAAU,CAACzC,EAAE,KAAK,IAAI,CAAC0C,QAAQ,CAAC1C,EAAE,IAAI,IAAI,CAACyC,UAAU,CAACK,OAAO,KAAK,IAAI,CAACJ,QAAQ,CAACI,OAAO,EAAE;MAChG,OAAO,IAAI;IACb;IACA,IAAI,IAAI,CAACK,eAAe,CAAC,IAAI,CAACV,UAAU,CAACzC,EAAE,CAAC,EAAE;MAC5C;MACA,OAAO,IAAI;IACb;IACA,OAAO,IAAI,CAACoD,gBAAgB,CAACH,mBAAmB,CAAC;EACnD;EAEQI,eAAe,CAACC,OAA+B,EAAEC,OAA+B,EAAE;IACxF,OAAOC,IAAI,CAACC,SAAS,CAACH,OAAO,CAAC,KAAKE,IAAI,CAACC,SAAS,CAACF,OAAO,CAAC;EAC5D;EAEQzC,gBAAgB,CAACmC,mBAAwC,EAA8B;IAC7F,MAAM;MAAEjD,EAAE;MAAEM,UAAU;MAAEO,QAAQ;MAAEF;IAAQ,CAAC,GAAGsC,mBAAmB;IACjE,MAAMS,iBAAiB,GAAG,IAAI,CAACC,mBAAmB,CAACV,mBAAmB,CAAC;IAEvE,IAAIS,iBAAiB,EAAE;MACrB;MACA,OAAOA,iBAAiB;IAC1B;IACA,MAAM1C,aAAa,GAAG,IAAI,CAACC,SAAS,CAACX,UAAU,CAAC;IAChD,MAAMY,WAAW,GAAG,IAAI,CAACD,SAAS,CAACJ,QAAQ,CAAC;IAC5C,MAAMqC,UAAU,GAAGvC,OAAO,GAAG,IAAI,CAACM,SAAS,CAACN,OAAO,CAAC,GAAGiC,SAAS;IAEhE,OAAO,IAAI,CAACQ,gBAAgB,CAAC;MAAEpD,EAAE;MAAEgB,aAAa;MAAEE,WAAW;MAAEgC;IAAW,CAAC,CAAC;EAC9E;EAEQE,gBAAgB,CAACH,mBAAmD,EAAE;IAC5E,MAAM;MAAEjD,EAAE;MAAEgB,aAAa;MAAEE,WAAW;MAAEgC;IAAW,CAAC,GAAGD,mBAAmB;IAC1E,IAAI,IAAI,CAACI,eAAe,CAACrC,aAAa,EAAEE,WAAW,CAAC,EAAE;MACpD,OAAO,IAAI;IACb;IACA,IAAIgC,UAAU,IAAI,IAAI,CAACG,eAAe,CAACH,UAAU,EAAEhC,WAAW,CAAC,EAAE;MAC/D;MACA,OAAO,IAAI;IACb;IACA,IAAIgC,UAAU,IAAI,IAAI,CAACG,eAAe,CAACH,UAAU,EAAElC,aAAa,CAAC,EAAE;MACjE;MACA,OAAO;QAAEhB,EAAE;QAAE2B,YAAY,EAAET;MAAY,CAAC;IAC1C;IACA;IACA,OAAO;MAAElB,EAAE;MAAEe,QAAQ,EAAE;QAAEC,aAAa;QAAEE,WAAW;QAAEgC;MAAW;IAAE,CAAC;EACrE;EAEQS,mBAAmB,CAACC,MAA2B,EAAmC;IACxF,IAAIA,MAAM,CAAC5D,EAAE,KAAK6D,8CAAwB,CAAC7D,EAAE,EAAE,OAAO4C,SAAS;IAC/D,IAAI,CAACjD,MAAM,CAACmE,KAAK,CAAE,iCAAgC,IAAI,CAAC3E,SAAU,EAAC,CAAC;IACpE,MAAM;MAAEmB,UAAU;MAAEO,QAAQ;MAAEF;IAAQ,CAAC,GAAGiD,MAAM;IAEhD,MAAM5C,aAAa,GAAG,IAAI,CAACC,SAAS,CAACX,UAAU,CAAC;IAChD,MAAMyD,aAAa,GAAG,IAAI,CAACC,SAAS,CAAChD,aAAa,CAAC;IACnD,MAAME,WAAW,GAAG,IAAI,CAACD,SAAS,CAACJ,QAAQ,CAAC;IAC5C,MAAMoD,WAAW,GAAG,IAAI,CAACD,SAAS,CAAC9C,WAAW,CAAC;IAE/C,MAAMgC,UAAU,GAAGvC,OAAO,GAAG,IAAI,CAACM,SAAS,CAACN,OAAO,CAAC,GAAGiC,SAAS;IAChE,MAAMsB,UAAU,GAAGhB,UAAU,GAAG,IAAI,CAACc,SAAS,CAACd,UAAU,CAAC,GAAGN,SAAS;IAEtE,MAAMuB,UAAU,GAAIlC,GAAsB,IAAuC;MAAA;MAC/E,MAAMO,IAAI,4BAAGP,GAAG,CAACE,iBAAiB,CAAC0B,8CAAwB,CAAC7D,EAAE,CAAC,0DAAlD,sBAAoDwC,IAAI,CAAC4B,YAAY;MAClF,IAAI,CAAC5B,IAAI,EAAE,OAAO,EAAE;MACpB,MAAM6B,MAAM,GAAG,2BAAApC,GAAG,CAACE,iBAAiB,CAAC0B,8CAAwB,CAAC7D,EAAE,CAAC,2DAAlD,uBAAoDwC,IAAI,CAAC6B,MAAM,KAAI,EAAE;MACpF,OAAO7B,IAAI,CAAC1C,GAAG,CAAEwE,CAAC,IAAK;QACrB,MAAMC,gBAAgB,GAAGD,CAAC,CAACE,MAAM,KAAK,SAAS,GAAGF,CAAC,CAACtE,EAAE,GAAGsE,CAAC,CAACtE,EAAE,CAACyE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAMC,cAAc,GAAGL,MAAM,CAACM,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,YAAY,KAAKN,gBAAgB,CAAC;QAC9E,MAAMO,YAAY,GAAG,MAAM;UACzB,IAAIR,CAAC,CAACE,MAAM,KAAK,SAAS,EAAE,OAAO5B,SAAS,CAAC,CAAC;UAC9C,IAAI8B,cAAc,EAAE,OAAOA,cAAc,CAACK,KAAK,CAACjC,OAAO,CAAC,CAAC;UACzD,OAAOwB,CAAC,CAACxB,OAAO;UAChB;UACA;UACA;QACF,CAAC;;QACD,uCACKwB,CAAC;UACJtE,EAAE,EAAEuE,gBAAgB;UACpBF,MAAM,EAAES,YAAY;QAAE;MAE1B,CAAC,CAAC;IACJ,CAAC;IACD,MAAME,aAAa,GAAI/C,GAAsB,IAA2B;MAAA;MACtE,OAAO,2BAAAA,GAAG,CAACE,iBAAiB,CAAC0B,8CAAwB,CAAC7D,EAAE,CAAC,2DAAlD,uBAAoDwC,IAAI,CAAC6B,MAAM,KAAI,EAAE;IAC9E,CAAC;IAED,MAAMY,WAAW,GAAIhD,GAAsB,IAAuC;MAChF,MAAMiD,OAAO,GAAGf,UAAU,CAAClC,GAAG,CAAC;MAC/B,OAAOiD,OAAO,CAACC,MAAM,CAAEb,CAAC,IAAKA,CAAC,CAACc,MAAM,KAAK,MAAM,CAAC;IACnD,CAAC;IAED,MAAMC,eAAe,GAAGJ,WAAW,CAAC,IAAI,CAAC3F,cAAc,CAAC;IACxD,MAAMgG,cAAc,GAAGnB,UAAU,CAAC,IAAI,CAAC7E,cAAc,CAAC;IACtD,MAAMiG,iBAAiB,GAAGP,aAAa,CAAC,IAAI,CAAC1F,cAAc,CAAC;IAC5D,MAAMkG,SAAS,GAAGP,WAAW,CAAC,IAAI,CAACzF,YAAY,CAAC;IAChD,MAAMiG,mBAAmB,GAAG,IAAAC,gBAAM,EAACL,eAAe,CAACM,MAAM,CAACH,SAAS,CAAC,EAAGlB,CAAC,IAAKA,CAAC,CAACtE,EAAE,CAAC;IAClF,MAAM4F,6BAA6B,GAAGH,mBAAmB,CAACN,MAAM,CAAEpF,CAAC,IAAKA,CAAC,CAACyE,MAAM,KAAK,WAAW,CAAC;IACjG,MAAMqB,QAAQ,GAAGZ,WAAW,CAAC,IAAI,CAAC1F,WAAW,CAAC;IAE9C,MAAMuG,6BAA6B,GAAIC,OAAe,IAAyB;MAC7E,MAAMC,KAAK,GAAGJ,6BAA6B,CAACjB,IAAI,CAAEL,CAAC,IAAKA,CAAC,CAAC2B,WAAW,KAAKF,OAAO,CAAC;MAClF,OAAOC,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEhG,EAAE;IAClB,CAAC;IAED,MAAMkG,+BAA+B,GAAIH,OAAe,IAAK;MAC3D,OAAOT,cAAc,CAACX,IAAI,CAAEL,CAAC,IAAK;QAChC,IAAIA,CAAC,CAACE,MAAM,KAAK,SAAS,EAAE,OAAOF,CAAC,CAACtE,EAAE,KAAK+F,OAAO;QACnD,OAAOzB,CAAC,CAAC2B,WAAW,KAAKF,OAAO;MAClC,CAAC,CAAC;IACJ,CAAC;IAED,MAAMI,qCAAqC,GAAIJ,OAAe,IAAK;MACjE,OAAOR,iBAAiB,CAACZ,IAAI,CAAEL,CAAC,IAAKA,CAAC,CAACO,YAAY,KAAKkB,OAAO,CAAC;IAClE,CAAC;IAED,MAAMK,YAAY,GAAG;MACnBhC,YAAY,EAAE,EAAE;MAChBiC,eAAe,EAAE,EAAE;MACnBC,gBAAgB,EAAE;IACpB,CAAC;IACD,MAAMC,gBAAgB,GAAG;MACvBnC,YAAY,EAAE,EAAE;MAChBiC,eAAe,EAAE,EAAE;MACnBC,gBAAgB,EAAE;IACpB,CAAC;IACD,IAAIE,WAAW,GAAG,KAAK;IACvB,MAAMC,kBAAkB,GAAG;MACzBC,OAAO,EAAE,cAAc;MACvBC,GAAG,EAAE,iBAAiB;MACtBC,IAAI,EAAE;IACR,CAAC;IACD,MAAMC,iBAAiB,GAAG,MAAM;MAC9B,MAAMC,6BAA6B,GAAIC,GAAuB,IAAK;QACjE,MAAM5H,SAAS,GAAG2G,6BAA6B,CAACiB,GAAG,CAAClC,YAAY,CAAC;QACjE,IAAI1F,SAAS,IAAI,IAAI,CAACgE,eAAe,CAAChE,SAAS,CAAC,EAAE;UAChD;UACA;QACF;QACA,MAAM6H,eAAe,GAAGd,+BAA+B,CAACa,GAAG,CAAClC,YAAY,CAAC;QACzE,IAAImC,eAAe,IAAI,CAACD,GAAG,CAACE,KAAK,EAAE;UACjC,IAAID,eAAe,CAAClE,OAAO,KAAKiE,GAAG,CAAChC,KAAK,CAACjC,OAAO,EAAE;UACnD,IACE,CAAC,IAAAoE,0BAAM,EAACF,eAAe,CAAClE,OAAO,CAAC,IAChC,CAAC,IAAAoE,0BAAM,EAACH,GAAG,CAAChC,KAAK,CAACjC,OAAO,CAAC,IAC1BqE,iBAAM,CAACC,SAAS,CAACJ,eAAe,CAAClE,OAAO,EAAEiE,GAAG,CAAChC,KAAK,CAACjC,OAAO,CAAC,EAC5D;YACA;UACF;QACF;QACA,MAAMuE,qBAAqB,GAAGlB,qCAAqC,CAACY,GAAG,CAAClC,YAAY,CAAC;QACrF,IAAIwC,qBAAqB,IAAIA,qBAAqB,CAACtC,KAAK,CAACjC,OAAO,KAAKiE,GAAG,CAAChC,KAAK,CAACjC,OAAO,EAAE;UACtF;UACA;QACF;QACA,MAAMwE,OAAO,GAAGb,kBAAkB,CAACM,GAAG,CAACQ,aAAa,CAAC;QACrDnB,YAAY,CAACkB,OAAO,CAAC,CAAC5G,IAAI,CAAC;UACzB8G,IAAI,EAAET,GAAG,CAAClC,YAAY;UACtB/B,OAAO,EAAEiE,GAAG,CAAChC,KAAK,CAACjC,OAAO;UAC1BmE,KAAK,EAAEF,GAAG,CAACE;QACb,CAAC,CAAC;MACJ,CAAC;MAED,IAAI,IAAI,CAAC5D,eAAe,CAACrC,aAAa,EAAEE,WAAW,CAAC,EAAE;QACpD;MACF;MACA,IAAIgC,UAAU,IAAI,IAAI,CAACG,eAAe,CAACH,UAAU,EAAEhC,WAAW,CAAC,EAAE;QAC/D;QACA;MACF;MACA,IAAIF,aAAa,KAAK,GAAG,IAAIE,WAAW,KAAK,GAAG,EAAE;QAChD,MAAM,IAAImB,KAAK,CAAC,sDAAsD,CAAC;MACzE;MACA,IAAIa,UAAU,IAAI,IAAI,CAACG,eAAe,CAACH,UAAU,EAAElC,aAAa,CAAC,EAAE;QACjE;QACA,IAAIiD,WAAW,CAACwD,MAAM,EAAE;UACtBxD,WAAW,CAACyD,OAAO,CAAEX,GAAG,IAAK;YAC3BD,6BAA6B,CAACC,GAAG,CAAC;UACpC,CAAC,CAAC;QACJ;QACA;MACF;;MAEA;MACA,IAAI,CAAC/F,aAAa,CAACqD,MAAM,IAAI,CAACnD,WAAW,CAACmD,MAAM,EAAE;MAClD,MAAMsD,qBAAqB,GAAG,IAAAjC,gBAAM,EAAC3B,aAAa,CAAC4B,MAAM,CAAC1B,WAAW,CAAC,EAAGK,CAAC,IAAKA,CAAC,CAACO,YAAY,CAAC;MAC9F8C,qBAAqB,CAACD,OAAO,CAAEX,GAAG,IAAK;QACrC,MAAMO,OAAO,GAAGb,kBAAkB,CAACM,GAAG,CAACQ,aAAa,CAAC;QACrD,MAAMK,UAAU,GAAG7D,aAAa,CAACY,IAAI,CAAEL,CAAC,IAAKA,CAAC,CAACO,YAAY,KAAKkC,GAAG,CAAClC,YAAY,CAAC;QACjF,MAAMgD,QAAQ,GAAG5D,WAAW,CAACU,IAAI,CAAEL,CAAC,IAAKA,CAAC,CAACO,YAAY,KAAKkC,GAAG,CAAClC,YAAY,CAAC;QAC7E,MAAMiD,OAAO,GAAG5D,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAES,IAAI,CAAEL,CAAC,IAAKA,CAAC,CAACO,YAAY,KAAKkC,GAAG,CAAClC,YAAY,CAAC;QAE5E,IAAI,CAACgD,QAAQ,EAAE;UACb;QACF;QACA,IAAI,CAACD,UAAU,EAAE;UACf;UACAd,6BAA6B,CAACe,QAAQ,CAAC;UACvC;QACF;QACA,MAAME,UAAU,GAAGH,UAAU,CAAC7C,KAAK,CAACjC,OAAO;QAC3C,MAAMkF,QAAQ,GAAGH,QAAQ,CAAC9C,KAAK,CAACjC,OAAO;QACvC,IAAIiF,UAAU,KAAKC,QAAQ,EAAE;UAC3B;QACF;QACA,MAAMC,OAAO,GAAGH,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAE/C,KAAK,CAACjC,OAAO;QACtC,IAAImF,OAAO,IAAIA,OAAO,KAAKD,QAAQ,EAAE;UACnC;QACF;QACA,IAAIC,OAAO,IAAIA,OAAO,KAAKF,UAAU,EAAE;UACrCjB,6BAA6B,CAACe,QAAQ,CAAC;UACvC;QACF;QACA,MAAM1I,SAAS,GAAG2G,6BAA6B,CAACiB,GAAG,CAAClC,YAAY,CAAC;QACjE,IAAI1F,SAAS,IAAI,IAAI,CAACgE,eAAe,CAAChE,SAAS,CAAC,EAAE;UAChD;UACA;QACF;QAEAqH,WAAW,GAAG,IAAI;QAClBD,gBAAgB,CAACe,OAAO,CAAC,CAAC5G,IAAI,CAAC;UAC7B8G,IAAI,EAAEI,UAAU,CAAC/C,YAAY;UAC7B/B,OAAO,EAAG,GAAE9D,iBAAkB,GAAE+I,UAAW,KAAIC,QAAS,IAAG;UAC3Df,KAAK,EAAEW,UAAU,CAACX;QACpB,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAEDJ,iBAAiB,EAAE;IAEnB,MAAMqB,eAAe,GAAG,CAACZ,OAAe,EAAEa,OAAe,KAAK/B,YAAY,CAACkB,OAAO,CAAC,CAAC3C,IAAI,CAAEL,CAAC,IAAKA,CAAC,CAACkD,IAAI,KAAKW,OAAO,CAAC;IACnH,MAAMC,iBAAiB,GAAIrB,GAAmC,IAAK;MACjE,IAAIA,GAAG,CAACvC,MAAM,KAAK,WAAW,EAAE;QAC9B,OAAOuC,GAAG,CAAC/G,EAAE;MACf;MACA;MACA,OAAO+G,GAAG,CAACd,WAAW;IACxB,CAAC;IAED,MAAMoC,wBAAwB,GAAItB,GAAmC,IAAK;MACxE,MAAMO,OAAO,GAAGb,kBAAkB,CAACM,GAAG,CAACuB,SAAS,CAAC;MACjD,IAAIvB,GAAG,CAACvC,MAAM,KAAK,WAAW,IAAI,IAAI,CAACrB,eAAe,CAAC4D,GAAG,CAAC/G,EAAE,CAAC,EAAE;QAC9D;MACF;MACA,IAAIkI,eAAe,CAACZ,OAAO,EAAEP,GAAG,CAAC/G,EAAE,CAAC,EAAE;QACpC,OAAO,CAAC;MACV;;MACAoG,YAAY,CAACkB,OAAO,CAAC,CAAC5G,IAAI,CAAC;QACzB8G,IAAI,EAAEY,iBAAiB,CAACrB,GAAG,CAAC;QAC5BjE,OAAO,EAAEiE,GAAG,CAAC1C,MAAM,IAAI0C,GAAG,CAACjE,OAAO;QAClCmE,KAAK,EAAE;MACT,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAACtH,MAAM,CAACQ,KAAK,CACd,gBAAemF,cAAc,CAACmC,MAAO,KAAInC,cAAc,CACrDxF,GAAG,CAAEwE,CAAC,IAAM,GAAEA,CAAC,CAACE,MAAO,IAAGF,CAAC,CAACtE,EAAG,IAAGsE,CAAC,CAACxB,OAAQ,EAAC,CAAC,CAC9CyF,IAAI,CAAC,IAAI,CAAE,EAAC,CAChB;IACD,IAAI,CAAC5I,MAAM,CAACQ,KAAK,CACd,cAAaqF,SAAS,CAACiC,MAAO,KAAIjC,SAAS,CAAC1F,GAAG,CAAEwE,CAAC,IAAM,GAAEA,CAAC,CAACE,MAAO,IAAGF,CAAC,CAACtE,EAAG,IAAGsE,CAAC,CAACxB,OAAQ,EAAC,CAAC,CAACyF,IAAI,CAAC,IAAI,CAAE,EAAC,CACzG;IACD,IAAI,CAAC5I,MAAM,CAACQ,KAAK,CACd,aAAY0F,QAAQ,CAAC4B,MAAO,KAAI5B,QAAQ,CAAC/F,GAAG,CAAEwE,CAAC,IAAM,GAAEA,CAAC,CAACE,MAAO,IAAGF,CAAC,CAACtE,EAAG,IAAGsE,CAAC,CAACxB,OAAQ,EAAC,CAAC,CAACyF,IAAI,CAAC,IAAI,CAAE,EAAC,CACtG;;IAED;IACA9C,mBAAmB,CAACiC,OAAO,CAAEc,OAAO,IAAK;MACvC,IAAI,CAAC7I,MAAM,CAACmE,KAAK,CAAE,eAAc0E,OAAO,CAACxI,EAAG,EAAC,CAAC;MAC9C,IAAI,IAAI,CAACyI,KAAK,CAACD,OAAO,CAACxI,EAAE,CAAC,EAAE;QAC1B;QACA;MACF;MACA,MAAM4H,UAAU,GAAGtC,cAAc,CAACX,IAAI,CAAEL,CAAC,IAAKA,CAAC,CAACtE,EAAE,KAAKwI,OAAO,CAACxI,EAAE,CAAC;MAClE,MAAM6H,QAAQ,GAAGrC,SAAS,CAACb,IAAI,CAAEL,CAAC,IAAKA,CAAC,CAACtE,EAAE,KAAKwI,OAAO,CAACxI,EAAE,CAAC;MAC3D,MAAM8H,OAAO,GAAGjC,QAAQ,CAAClB,IAAI,CAAEL,CAAC,IAAKA,CAAC,CAACtE,EAAE,KAAKwI,OAAO,CAACxI,EAAE,CAAC;MAEzD,IAAI,CAACL,MAAM,CAACmE,KAAK,CAAE,YAAW,EAAE8D,UAAU,CAAC;MAC3C,IAAI,CAACjI,MAAM,CAACmE,KAAK,CAAE,UAAS,EAAE+D,QAAQ,CAAC;MACvC,IAAI,CAAClI,MAAM,CAACmE,KAAK,CAAE,SAAQ,EAAEgE,OAAO,CAAC;MACrC,IAAI,CAACD,QAAQ,EAAE;QACb;MACF;MACA,IAAI,CAACD,UAAU,EAAE;QACf,IAAIE,OAAO,EAAE;UACX;UACA;QACF;QACA;QACAO,wBAAwB,CAACR,QAAQ,CAAC;QAClC;MACF;MAEA,IACED,UAAU,CAACvD,MAAM,IACjBwD,QAAQ,CAACxD,MAAM,IACf,IAAAqE,6BAAO,EAACd,UAAU,CAACvD,MAAM,EAAEuD,UAAU,CAAC5H,EAAE,CAAC,IACzC,IAAA0I,6BAAO,EAACb,QAAQ,CAACxD,MAAM,EAAEwD,QAAQ,CAAC7H,EAAE,CAAC,EACrC;QACA,IAAImH,iBAAM,CAACC,SAAS,CAACQ,UAAU,CAAC9E,OAAO,EAAE+E,QAAQ,CAACxD,MAAM,CAAC,EAAE;UACzD;QACF;QACA,IAAI8C,iBAAM,CAACC,SAAS,CAACS,QAAQ,CAAC/E,OAAO,EAAE8E,UAAU,CAACvD,MAAM,CAAC,EAAE;UACzD;QACF;MACF;MAEA,MAAM0D,UAAU,GAAGH,UAAU,CAACvD,MAAM,IAAIuD,UAAU,CAAC9E,OAAO;MAC1D,MAAMkF,QAAQ,GAAGH,QAAQ,CAACxD,MAAM,IAAIwD,QAAQ,CAAC/E,OAAO;MACpD,IAAIiF,UAAU,KAAKC,QAAQ,EAAE;QAC3B;MACF;MACA,MAAMC,OAAO,GAAG,CAAAH,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEzD,MAAM,MAAIyD,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEhF,OAAO;MACnD,IAAImF,OAAO,IAAIA,OAAO,KAAKD,QAAQ,EAAE;QACnC;MACF;MACA,MAAMW,SAAS,GAAGf,UAAU,CAAC5H,EAAE;MAC/B,IAAI4H,UAAU,CAACpD,MAAM,KAAK,WAAW,IAAI,IAAI,CAACrB,eAAe,CAACwF,SAAS,CAAC,EAAE;QACxE;QACA;MACF;MACA,MAAMrB,OAAO,GAAGb,kBAAkB,CAACmB,UAAU,CAACU,SAAS,CAAC;MACxD,IAAIJ,eAAe,CAACZ,OAAO,EAAEM,UAAU,CAAC5H,EAAE,CAAC,EAAE;QAC3C,OAAO,CAAC;MACV;;MACA,IAAIiI,OAAO,IAAIA,OAAO,KAAKF,UAAU,EAAE;QACrCM,wBAAwB,CAACR,QAAQ,CAAC;QAClC;MACF;MACArB,WAAW,GAAG,IAAI;MAClBD,gBAAgB,CAACe,OAAO,CAAC,CAAC5G,IAAI,CAAC;QAC7B8G,IAAI,EAAEY,iBAAiB,CAACR,UAAU,CAAC;QACnC9E,OAAO,EAAG,GAAE9D,iBAAkB,GAAE+I,UAAW,KAAIC,QAAS,IAAG;QAC3Df,KAAK,EAAE;MACT,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,CAAC,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAACS,OAAO,CAAEJ,OAAO,IAAK;MAC3E,IAAI,CAAClB,YAAY,CAACkB,OAAO,CAAC,CAACG,MAAM,EAAE,OAAOrB,YAAY,CAACkB,OAAO,CAAC;MAC/D,IAAI,CAACf,gBAAgB,CAACe,OAAO,CAAC,CAACG,MAAM,EAAE,OAAOlB,gBAAgB,CAACe,OAAO,CAAC;IACzE,CAAC,CAAC;IAEF,MAAM/E,MAAM,GAAGqG,MAAM,CAACC,IAAI,CAACzC,YAAY,CAAC,CAACqB,MAAM,GAAG;MAAEpD,MAAM,EAAE+B;IAAa,CAAC,GAAGxD,SAAS;IACtF,MAAM7B,QAAQ,GAAGyF,WAAW,GAAGD,gBAAgB,GAAG3D,SAAS;IAE3D,IAAI,CAACjD,MAAM,CAACQ,KAAK,CAAC,oBAAoB,EAAEoC,MAAM,CAAC;IAC/C,IAAI,CAAC5C,MAAM,CAACQ,KAAK,CAAC,gBAAgB,EAAEY,QAAQ,CAAC;IAE7C,OAAO;MAAEf,EAAE,EAAE4D,MAAM,CAAC5D,EAAE;MAAE2B,YAAY,EAAEY,MAAM;MAAExB;IAAS,CAAC;EAC1D;EAEQoC,eAAe,CAACnD,EAAU,EAAW;IAC3C,OAAO8I,OAAO,CAAC,IAAI,CAACvH,kBAAkB,CAACvB,EAAE,CAAC,CAAC,IAAI,IAAI,CAACJ,eAAe,CAACa,QAAQ,CAACT,EAAE,CAAC;EAClF;EAEQuB,kBAAkB,CAACvB,EAAU,EAA2B;IAC9D,OAAO,IAAI,CAACZ,YAAY,CAACuF,IAAI,CAAE5E,CAAC,IAAKA,CAAC,CAACE,sBAAsB,EAAE,KAAKD,EAAE,CAAC;EACzE;EAEQyI,KAAK,CAACzI,EAAU,EAAE;IACxB,OAAOA,EAAE,KAAK,IAAI,CAACyC,UAAU,CAACzC,EAAE,IAAIA,EAAE,KAAK,IAAI,CAAC0C,QAAQ,CAAC1C,EAAE;EAC7D;EAEQiB,SAAS,CAACgB,GAAuB,EAA0B;IACjE,IAAIA,GAAG,CAAC8G,SAAS,KAAK,GAAG,EAAE,OAAO9G,GAAG,CAAC8G,SAAS;IAC/C,OAAO,IAAAC,cAAI,EAAC/G,GAAG,CAAC8G,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC;EAC5C;EAEQ/E,SAAS,CAACzB,MAAM,EAAwB;IAC9C,IAAI,CAACA,MAAM,CAAC8B,MAAM,EAAE,OAAO,EAAE;IAC7B,OAAO4E,mCAAa,CAACC,gBAAgB,CAAC3G,MAAM,CAAC8B,MAAM,CAAC,CAAC8E,OAAO;EAC9D;AACF;AAAC"}
@@ -26,7 +26,7 @@ export declare class MergeCmd implements Command {
26
26
  skipDependencyInstallation?: boolean;
27
27
  }): Promise<string>;
28
28
  }
29
- export declare function mergeReport({ components, failedComponents, version, mergeSnapResults, mergeSnapError, leftUnresolvedConflicts, verbose, configMergeResults, }: ApplyVersionResults & {
29
+ export declare function mergeReport({ components, failedComponents, version, mergeSnapResults, mergeSnapError, leftUnresolvedConflicts, verbose, configMergeResults, workspaceDepsUpdates, }: ApplyVersionResults & {
30
30
  configMergeResults?: ConfigMergeResult[];
31
31
  }): string;
32
32
  export declare function applyVersionReport(components: ApplyVersionResult[], addName?: boolean, showVersion?: boolean): string;
package/dist/merge-cmd.js CHANGED
@@ -128,7 +128,8 @@ function mergeReport({
128
128
  mergeSnapError,
129
129
  leftUnresolvedConflicts,
130
130
  verbose,
131
- configMergeResults
131
+ configMergeResults,
132
+ workspaceDepsUpdates
132
133
  }) {
133
134
  const getSuccessOutput = () => {
134
135
  if (!components || !components.length) return '';
@@ -178,6 +179,15 @@ ${mergeSnapError.message}
178
179
  };
179
180
  return `\n${_chalk().default.underline('merge-snapped components')}\n(${'components that snapped as a result of the merge'})\n${outputComponents(snappedComponents)}\n`;
180
181
  };
182
+ const getWorkspaceDepsOutput = () => {
183
+ if (!workspaceDepsUpdates) return '';
184
+ const title = '\nworkspace.jsonc has been updated with the following dependencies';
185
+ const body = Object.keys(workspaceDepsUpdates).map(pkgName => {
186
+ const [from, to] = workspaceDepsUpdates[pkgName];
187
+ return ` ${pkgName}: ${from} => ${to}`;
188
+ }).join('\n');
189
+ return `\n${_chalk().default.underline(title)}\n${body}\n\n`;
190
+ };
181
191
  const getFailureOutput = () => {
182
192
  if (!failedComponents || !failedComponents.length) return '';
183
193
  const title = '\nthe merge has been skipped on the following component(s)';
@@ -205,7 +215,7 @@ ${mergeSnapError.message}
205
215
  const autoSnappedStr = `\nTotal Snapped: ${_chalk().default.bold(autoSnapped.toString())}`;
206
216
  return newLines + title + mergedStr + unchangedLegitimatelyStr + failedToMergeStr + autoSnappedStr;
207
217
  };
208
- return getSuccessOutput() + getFailureOutput() + getSnapsOutput() + getConfigMergeConflictSummary() + getConflictSummary() + getSummary();
218
+ return getSuccessOutput() + getFailureOutput() + getSnapsOutput() + getWorkspaceDepsOutput() + getConfigMergeConflictSummary() + getConflictSummary() + getSummary();
209
219
  }
210
220
  function applyVersionReport(components, addName = true, showVersion = false) {
211
221
  const tab = addName ? '\t' : '';
@@ -1 +1 @@
1
- {"version":3,"names":["MergeCmd","constructor","merging","WILDCARD_HELP","report","ids","ours","theirs","manual","abort","resolve","build","noSnap","verbose","message","skipDependencyInstallation","isFeatureEnabled","BUILD_ON_CI","Boolean","mergeStrategy","getMergeStrategy","BitError","components","failedComponents","version","resolvedComponents","abortedComponents","mergeSnapResults","mergeSnapError","merge","title","componentsStr","map","c","id","toStringWithoutVersion","join","chalk","underline","green","mergeReport","leftUnresolvedConflicts","configMergeResults","getSuccessOutput","length","bold","applyVersionReport","getConflictSummary","suggestion","conflictSummaryReport","yellow","configMergeWithConflicts","filter","hasConflicts","getConfigMergeConflictSummary","comps","compIdStr","MergeConfigFilename","getSnapsOutput","snappedComponents","autoSnappedResults","outputComponents","component","componentOutput","toString","autoTag","result","triggeredBy","searchWithoutScopeAndVersion","autoTagComp","a","AUTO_SNAPPED_MSG","getFailureOutput","body","compact","failedComponent","unchangedLegitimately","color","failureMessage","getSummary","merged","f","failedToMerge","autoSnapped","newLines","mergedStr","unchangedLegitimatelyStr","failedToMergeStr","autoSnappedStr","addName","showVersion","tab","name","files","Object","keys","filesStatus","file","note","FileStatus","white","cyan","installationErrorOutput","installationError","subTitle","red","compilationErrorOutput","compilationError"],"sources":["merge-cmd.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { Command, CommandOptions } from '@teambit/cli';\nimport { compact } from 'lodash';\nimport { WILDCARD_HELP, AUTO_SNAPPED_MSG, MergeConfigFilename } from '@teambit/legacy/dist/constants';\nimport {\n getMergeStrategy,\n FileStatus,\n ApplyVersionResult,\n} from '@teambit/legacy/dist/consumer/versions-ops/merge-version';\nimport { isFeatureEnabled, BUILD_ON_CI } from '@teambit/legacy/dist/api/consumer/lib/feature-toggle';\nimport { BitError } from '@teambit/bit-error';\nimport { ApplyVersionResults, MergingMain } from './merging.main.runtime';\nimport { ConfigMergeResult } from './config-merge-result';\n\nexport class MergeCmd implements Command {\n name = 'merge [ids...]';\n description = 'merge changes of the remote head into local';\n helpUrl = 'docs/components/merging-changes';\n group = 'development';\n extendedDescription = `merge changes of the remote head into local, optionally use '--abort' or '--resolve\n${WILDCARD_HELP('merge')}`;\n alias = '';\n options = [\n ['', 'ours', 'in case of a conflict, override the used version with the current modification'],\n ['', 'theirs', 'in case of a conflict, override the current modification with the specified version'],\n ['', 'manual', 'in case of a conflict, leave the files with a conflict state to resolve them manually later'],\n ['', 'abort', 'EXPERIMENTAL. in case of an unresolved merge, revert to the state before the merge began'],\n ['', 'resolve', 'EXPERIMENTAL. mark an unresolved merge as resolved and create a new snap with the changes'],\n ['', 'no-snap', 'EXPERIMENTAL. do not auto snap in case the merge completed without conflicts'],\n ['', 'build', 'in case of snap during the merge, run the build-pipeline (similar to bit snap --build)'],\n ['', 'verbose', 'show details of components that were not merged legitimately'],\n ['x', 'skip-dependency-installation', 'do not install packages of the imported components'],\n ['m', 'message <message>', 'EXPERIMENTAL. override the default message for the auto snap'],\n ] as CommandOptions;\n loader = true;\n\n constructor(private merging: MergingMain) {}\n\n async report(\n [ids = []]: [string[]],\n {\n ours = false,\n theirs = false,\n manual = false,\n abort = false,\n resolve = false,\n build = false,\n noSnap = false,\n verbose = false,\n message,\n skipDependencyInstallation = false,\n }: {\n ours?: boolean;\n theirs?: boolean;\n manual?: boolean;\n abort?: boolean;\n resolve?: boolean;\n build?: boolean;\n noSnap?: boolean;\n verbose?: boolean;\n message: string;\n skipDependencyInstallation?: boolean;\n }\n ) {\n build = isFeatureEnabled(BUILD_ON_CI) ? Boolean(build) : true;\n const mergeStrategy = getMergeStrategy(ours, theirs, manual);\n if (abort && resolve) throw new BitError('unable to use \"abort\" and \"resolve\" flags together');\n if (noSnap && message) throw new BitError('unable to use \"noSnap\" and \"message\" flags together');\n const {\n components,\n failedComponents,\n version,\n resolvedComponents,\n abortedComponents,\n mergeSnapResults,\n mergeSnapError,\n }: ApplyVersionResults = await this.merging.merge(\n ids,\n mergeStrategy as any,\n abort,\n resolve,\n noSnap,\n message,\n build,\n skipDependencyInstallation\n );\n if (resolvedComponents) {\n const title = 'successfully resolved component(s)\\n';\n const componentsStr = resolvedComponents.map((c) => c.id.toStringWithoutVersion()).join('\\n');\n return chalk.underline(title) + chalk.green(componentsStr);\n }\n if (abortedComponents) {\n const title = 'successfully aborted the merge of the following component(s)\\n';\n const componentsStr = abortedComponents.map((c) => c.id.toStringWithoutVersion()).join('\\n');\n return chalk.underline(title) + chalk.green(componentsStr);\n }\n\n return mergeReport({\n components,\n failedComponents,\n version,\n mergeSnapResults,\n mergeSnapError,\n verbose,\n });\n }\n}\n\nexport function mergeReport({\n components,\n failedComponents,\n version,\n mergeSnapResults,\n mergeSnapError,\n leftUnresolvedConflicts,\n verbose,\n configMergeResults,\n}: ApplyVersionResults & { configMergeResults?: ConfigMergeResult[] }): string {\n const getSuccessOutput = () => {\n if (!components || !components.length) return '';\n // @ts-ignore version is set in case of merge command\n const title = `successfully merged components${version ? `from version ${chalk.bold(version)}` : ''}\\n`;\n // @ts-ignore components is set in case of merge command\n return chalk.underline(title) + chalk.green(applyVersionReport(components));\n };\n\n const getConflictSummary = () => {\n if (!components || !components.length || !leftUnresolvedConflicts) return '';\n const title = `\\n\\nfiles with conflicts summary\\n`;\n const suggestion = `\\n\\nthe merge process wasn't completed due to the conflicts above. fix them manually and then run \"bit install\".\nonce ready, snap/tag the components to complete the merge.`;\n return chalk.underline(title) + conflictSummaryReport(components) + chalk.yellow(suggestion);\n };\n\n const configMergeWithConflicts = configMergeResults?.filter((c) => c.hasConflicts()) || [];\n const getConfigMergeConflictSummary = () => {\n if (!configMergeWithConflicts.length) return '';\n const comps = configMergeWithConflicts.map((c) => c.compIdStr).join('\\n');\n const title = `\\n\\ncomponents with config-merge conflicts\\n`;\n const suggestion = `\\nconflicts were found while trying to merge the config. fix them manually by editing the ${MergeConfigFilename} file in the workspace root.\nonce ready, snap/tag the components to complete the merge.`;\n return chalk.underline(title) + comps + chalk.yellow(suggestion);\n };\n\n const getSnapsOutput = () => {\n if (mergeSnapError) {\n return `\n${chalk.bold(\n 'snapping the merged components had failed with the following error, please fix the issues and snap manually'\n)}\n${mergeSnapError.message}\n`;\n }\n if (!mergeSnapResults || !mergeSnapResults.snappedComponents) return '';\n const { snappedComponents, autoSnappedResults } = mergeSnapResults;\n const outputComponents = (comps) => {\n return comps\n .map((component) => {\n let componentOutput = ` > ${component.id.toString()}`;\n const autoTag = autoSnappedResults.filter((result) =>\n result.triggeredBy.searchWithoutScopeAndVersion(component.id)\n );\n if (autoTag.length) {\n const autoTagComp = autoTag.map((a) => a.component.id.toString());\n componentOutput += `\\n ${AUTO_SNAPPED_MSG}: ${autoTagComp.join(', ')}`;\n }\n return componentOutput;\n })\n .join('\\n');\n };\n\n return `\\n${chalk.underline(\n 'merge-snapped components'\n )}\\n(${'components that snapped as a result of the merge'})\\n${outputComponents(snappedComponents)}\\n`;\n };\n\n const getFailureOutput = () => {\n if (!failedComponents || !failedComponents.length) return '';\n const title = '\\nthe merge has been skipped on the following component(s)';\n const body = compact(\n failedComponents.map((failedComponent) => {\n if (!verbose && failedComponent.unchangedLegitimately) return null;\n const color = failedComponent.unchangedLegitimately ? 'white' : 'red';\n return `${chalk.bold(failedComponent.id.toString())} - ${chalk[color](failedComponent.failureMessage)}`;\n })\n ).join('\\n');\n if (!body) {\n return `${chalk.bold(`\\nthe merge has been skipped on ${failedComponents.length} component(s) legitimately`)}\n(use --verbose to list them next time)`;\n }\n return `\\n${chalk.underline(title)}\\n${body}\\n\\n`;\n };\n\n const getSummary = () => {\n const merged = components?.length || 0;\n const unchangedLegitimately = failedComponents?.filter((f) => f.unchangedLegitimately).length || 0;\n const failedToMerge = failedComponents?.filter((f) => !f.unchangedLegitimately).length || 0;\n const autoSnapped =\n (mergeSnapResults?.snappedComponents.length || 0) + (mergeSnapResults?.autoSnappedResults.length || 0);\n\n const newLines = '\\n\\n';\n const title = chalk.bold.underline('Merge Summary');\n const mergedStr = `\\nTotal Merged: ${chalk.bold(merged.toString())}`;\n const unchangedLegitimatelyStr = `\\nTotal Unchanged: ${chalk.bold(unchangedLegitimately.toString())}`;\n const failedToMergeStr = `\\nTotal Failed: ${chalk.bold(failedToMerge.toString())}`;\n const autoSnappedStr = `\\nTotal Snapped: ${chalk.bold(autoSnapped.toString())}`;\n\n return newLines + title + mergedStr + unchangedLegitimatelyStr + failedToMergeStr + autoSnappedStr;\n };\n\n return (\n getSuccessOutput() +\n getFailureOutput() +\n getSnapsOutput() +\n getConfigMergeConflictSummary() +\n getConflictSummary() +\n getSummary()\n );\n}\n\nexport function applyVersionReport(components: ApplyVersionResult[], addName = true, showVersion = false): string {\n const tab = addName ? '\\t' : '';\n return components\n .map((component: ApplyVersionResult) => {\n const name = showVersion ? component.id.toString() : component.id.toStringWithoutVersion();\n const files = Object.keys(component.filesStatus)\n .map((file) => {\n const note =\n component.filesStatus[file] === FileStatus.manual\n ? chalk.white(\n 'automatic merge failed. please fix conflicts manually and then run \"bit install\" and \"bit compile\"'\n )\n : '';\n return `${tab}${component.filesStatus[file]} ${chalk.bold(file)} ${note}`;\n })\n .join('\\n');\n return `${addName ? name : ''}\\n${chalk.cyan(files)}`;\n })\n .join('\\n\\n');\n}\n\nexport function conflictSummaryReport(components: ApplyVersionResult[]): string {\n const tab = '\\t';\n return compact(\n components.map((component: ApplyVersionResult) => {\n const name = component.id.toStringWithoutVersion();\n const files = compact(\n Object.keys(component.filesStatus).map((file) => {\n if (component.filesStatus[file] === FileStatus.manual) {\n return `${tab}${component.filesStatus[file]} ${chalk.bold(file)}`;\n }\n return null;\n })\n );\n if (!files.length) return null;\n\n return `${name}\\n${chalk.cyan(files.join('\\n'))}`;\n })\n ).join('\\n');\n}\n\nexport function installationErrorOutput(installationError?: Error) {\n if (!installationError) return '';\n const title = chalk.underline('Installation Error');\n const subTitle =\n 'The following error had been caught from the package manager, please fix the issue and run \"bit install\"';\n const body = chalk.red(installationError.message);\n return `\\n\\n${title}\\n${subTitle}\\n${body}`;\n}\n\nexport function compilationErrorOutput(compilationError?: Error) {\n if (!compilationError) return '';\n const title = chalk.underline('Compilation Error');\n const subTitle = 'The following error had been caught from the compiler, please fix the issue and run \"bit compile\"';\n const body = chalk.red(compilationError.message);\n return `\\n\\n${title}\\n${subTitle}\\n${body}`;\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["MergeCmd","constructor","merging","WILDCARD_HELP","report","ids","ours","theirs","manual","abort","resolve","build","noSnap","verbose","message","skipDependencyInstallation","isFeatureEnabled","BUILD_ON_CI","Boolean","mergeStrategy","getMergeStrategy","BitError","components","failedComponents","version","resolvedComponents","abortedComponents","mergeSnapResults","mergeSnapError","merge","title","componentsStr","map","c","id","toStringWithoutVersion","join","chalk","underline","green","mergeReport","leftUnresolvedConflicts","configMergeResults","workspaceDepsUpdates","getSuccessOutput","length","bold","applyVersionReport","getConflictSummary","suggestion","conflictSummaryReport","yellow","configMergeWithConflicts","filter","hasConflicts","getConfigMergeConflictSummary","comps","compIdStr","MergeConfigFilename","getSnapsOutput","snappedComponents","autoSnappedResults","outputComponents","component","componentOutput","toString","autoTag","result","triggeredBy","searchWithoutScopeAndVersion","autoTagComp","a","AUTO_SNAPPED_MSG","getWorkspaceDepsOutput","body","Object","keys","pkgName","from","to","getFailureOutput","compact","failedComponent","unchangedLegitimately","color","failureMessage","getSummary","merged","f","failedToMerge","autoSnapped","newLines","mergedStr","unchangedLegitimatelyStr","failedToMergeStr","autoSnappedStr","addName","showVersion","tab","name","files","filesStatus","file","note","FileStatus","white","cyan","installationErrorOutput","installationError","subTitle","red","compilationErrorOutput","compilationError"],"sources":["merge-cmd.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { Command, CommandOptions } from '@teambit/cli';\nimport { compact } from 'lodash';\nimport { WILDCARD_HELP, AUTO_SNAPPED_MSG, MergeConfigFilename } from '@teambit/legacy/dist/constants';\nimport {\n getMergeStrategy,\n FileStatus,\n ApplyVersionResult,\n} from '@teambit/legacy/dist/consumer/versions-ops/merge-version';\nimport { isFeatureEnabled, BUILD_ON_CI } from '@teambit/legacy/dist/api/consumer/lib/feature-toggle';\nimport { BitError } from '@teambit/bit-error';\nimport { ApplyVersionResults, MergingMain } from './merging.main.runtime';\nimport { ConfigMergeResult } from './config-merge-result';\n\nexport class MergeCmd implements Command {\n name = 'merge [ids...]';\n description = 'merge changes of the remote head into local';\n helpUrl = 'docs/components/merging-changes';\n group = 'development';\n extendedDescription = `merge changes of the remote head into local, optionally use '--abort' or '--resolve\n${WILDCARD_HELP('merge')}`;\n alias = '';\n options = [\n ['', 'ours', 'in case of a conflict, override the used version with the current modification'],\n ['', 'theirs', 'in case of a conflict, override the current modification with the specified version'],\n ['', 'manual', 'in case of a conflict, leave the files with a conflict state to resolve them manually later'],\n ['', 'abort', 'EXPERIMENTAL. in case of an unresolved merge, revert to the state before the merge began'],\n ['', 'resolve', 'EXPERIMENTAL. mark an unresolved merge as resolved and create a new snap with the changes'],\n ['', 'no-snap', 'EXPERIMENTAL. do not auto snap in case the merge completed without conflicts'],\n ['', 'build', 'in case of snap during the merge, run the build-pipeline (similar to bit snap --build)'],\n ['', 'verbose', 'show details of components that were not merged legitimately'],\n ['x', 'skip-dependency-installation', 'do not install packages of the imported components'],\n ['m', 'message <message>', 'EXPERIMENTAL. override the default message for the auto snap'],\n ] as CommandOptions;\n loader = true;\n\n constructor(private merging: MergingMain) {}\n\n async report(\n [ids = []]: [string[]],\n {\n ours = false,\n theirs = false,\n manual = false,\n abort = false,\n resolve = false,\n build = false,\n noSnap = false,\n verbose = false,\n message,\n skipDependencyInstallation = false,\n }: {\n ours?: boolean;\n theirs?: boolean;\n manual?: boolean;\n abort?: boolean;\n resolve?: boolean;\n build?: boolean;\n noSnap?: boolean;\n verbose?: boolean;\n message: string;\n skipDependencyInstallation?: boolean;\n }\n ) {\n build = isFeatureEnabled(BUILD_ON_CI) ? Boolean(build) : true;\n const mergeStrategy = getMergeStrategy(ours, theirs, manual);\n if (abort && resolve) throw new BitError('unable to use \"abort\" and \"resolve\" flags together');\n if (noSnap && message) throw new BitError('unable to use \"noSnap\" and \"message\" flags together');\n const {\n components,\n failedComponents,\n version,\n resolvedComponents,\n abortedComponents,\n mergeSnapResults,\n mergeSnapError,\n }: ApplyVersionResults = await this.merging.merge(\n ids,\n mergeStrategy as any,\n abort,\n resolve,\n noSnap,\n message,\n build,\n skipDependencyInstallation\n );\n if (resolvedComponents) {\n const title = 'successfully resolved component(s)\\n';\n const componentsStr = resolvedComponents.map((c) => c.id.toStringWithoutVersion()).join('\\n');\n return chalk.underline(title) + chalk.green(componentsStr);\n }\n if (abortedComponents) {\n const title = 'successfully aborted the merge of the following component(s)\\n';\n const componentsStr = abortedComponents.map((c) => c.id.toStringWithoutVersion()).join('\\n');\n return chalk.underline(title) + chalk.green(componentsStr);\n }\n\n return mergeReport({\n components,\n failedComponents,\n version,\n mergeSnapResults,\n mergeSnapError,\n verbose,\n });\n }\n}\n\nexport function mergeReport({\n components,\n failedComponents,\n version,\n mergeSnapResults,\n mergeSnapError,\n leftUnresolvedConflicts,\n verbose,\n configMergeResults,\n workspaceDepsUpdates,\n}: ApplyVersionResults & { configMergeResults?: ConfigMergeResult[] }): string {\n const getSuccessOutput = () => {\n if (!components || !components.length) return '';\n // @ts-ignore version is set in case of merge command\n const title = `successfully merged components${version ? `from version ${chalk.bold(version)}` : ''}\\n`;\n // @ts-ignore components is set in case of merge command\n return chalk.underline(title) + chalk.green(applyVersionReport(components));\n };\n\n const getConflictSummary = () => {\n if (!components || !components.length || !leftUnresolvedConflicts) return '';\n const title = `\\n\\nfiles with conflicts summary\\n`;\n const suggestion = `\\n\\nthe merge process wasn't completed due to the conflicts above. fix them manually and then run \"bit install\".\nonce ready, snap/tag the components to complete the merge.`;\n return chalk.underline(title) + conflictSummaryReport(components) + chalk.yellow(suggestion);\n };\n\n const configMergeWithConflicts = configMergeResults?.filter((c) => c.hasConflicts()) || [];\n const getConfigMergeConflictSummary = () => {\n if (!configMergeWithConflicts.length) return '';\n const comps = configMergeWithConflicts.map((c) => c.compIdStr).join('\\n');\n const title = `\\n\\ncomponents with config-merge conflicts\\n`;\n const suggestion = `\\nconflicts were found while trying to merge the config. fix them manually by editing the ${MergeConfigFilename} file in the workspace root.\nonce ready, snap/tag the components to complete the merge.`;\n return chalk.underline(title) + comps + chalk.yellow(suggestion);\n };\n\n const getSnapsOutput = () => {\n if (mergeSnapError) {\n return `\n${chalk.bold(\n 'snapping the merged components had failed with the following error, please fix the issues and snap manually'\n)}\n${mergeSnapError.message}\n`;\n }\n if (!mergeSnapResults || !mergeSnapResults.snappedComponents) return '';\n const { snappedComponents, autoSnappedResults } = mergeSnapResults;\n const outputComponents = (comps) => {\n return comps\n .map((component) => {\n let componentOutput = ` > ${component.id.toString()}`;\n const autoTag = autoSnappedResults.filter((result) =>\n result.triggeredBy.searchWithoutScopeAndVersion(component.id)\n );\n if (autoTag.length) {\n const autoTagComp = autoTag.map((a) => a.component.id.toString());\n componentOutput += `\\n ${AUTO_SNAPPED_MSG}: ${autoTagComp.join(', ')}`;\n }\n return componentOutput;\n })\n .join('\\n');\n };\n\n return `\\n${chalk.underline(\n 'merge-snapped components'\n )}\\n(${'components that snapped as a result of the merge'})\\n${outputComponents(snappedComponents)}\\n`;\n };\n\n const getWorkspaceDepsOutput = () => {\n if (!workspaceDepsUpdates) return '';\n\n const title = '\\nworkspace.jsonc has been updated with the following dependencies';\n const body = Object.keys(workspaceDepsUpdates)\n .map((pkgName) => {\n const [from, to] = workspaceDepsUpdates[pkgName];\n return ` ${pkgName}: ${from} => ${to}`;\n })\n .join('\\n');\n\n return `\\n${chalk.underline(title)}\\n${body}\\n\\n`;\n };\n\n const getFailureOutput = () => {\n if (!failedComponents || !failedComponents.length) return '';\n const title = '\\nthe merge has been skipped on the following component(s)';\n const body = compact(\n failedComponents.map((failedComponent) => {\n if (!verbose && failedComponent.unchangedLegitimately) return null;\n const color = failedComponent.unchangedLegitimately ? 'white' : 'red';\n return `${chalk.bold(failedComponent.id.toString())} - ${chalk[color](failedComponent.failureMessage)}`;\n })\n ).join('\\n');\n if (!body) {\n return `${chalk.bold(`\\nthe merge has been skipped on ${failedComponents.length} component(s) legitimately`)}\n(use --verbose to list them next time)`;\n }\n return `\\n${chalk.underline(title)}\\n${body}\\n\\n`;\n };\n\n const getSummary = () => {\n const merged = components?.length || 0;\n const unchangedLegitimately = failedComponents?.filter((f) => f.unchangedLegitimately).length || 0;\n const failedToMerge = failedComponents?.filter((f) => !f.unchangedLegitimately).length || 0;\n const autoSnapped =\n (mergeSnapResults?.snappedComponents.length || 0) + (mergeSnapResults?.autoSnappedResults.length || 0);\n\n const newLines = '\\n\\n';\n const title = chalk.bold.underline('Merge Summary');\n const mergedStr = `\\nTotal Merged: ${chalk.bold(merged.toString())}`;\n const unchangedLegitimatelyStr = `\\nTotal Unchanged: ${chalk.bold(unchangedLegitimately.toString())}`;\n const failedToMergeStr = `\\nTotal Failed: ${chalk.bold(failedToMerge.toString())}`;\n const autoSnappedStr = `\\nTotal Snapped: ${chalk.bold(autoSnapped.toString())}`;\n\n return newLines + title + mergedStr + unchangedLegitimatelyStr + failedToMergeStr + autoSnappedStr;\n };\n\n return (\n getSuccessOutput() +\n getFailureOutput() +\n getSnapsOutput() +\n getWorkspaceDepsOutput() +\n getConfigMergeConflictSummary() +\n getConflictSummary() +\n getSummary()\n );\n}\n\nexport function applyVersionReport(components: ApplyVersionResult[], addName = true, showVersion = false): string {\n const tab = addName ? '\\t' : '';\n return components\n .map((component: ApplyVersionResult) => {\n const name = showVersion ? component.id.toString() : component.id.toStringWithoutVersion();\n const files = Object.keys(component.filesStatus)\n .map((file) => {\n const note =\n component.filesStatus[file] === FileStatus.manual\n ? chalk.white(\n 'automatic merge failed. please fix conflicts manually and then run \"bit install\" and \"bit compile\"'\n )\n : '';\n return `${tab}${component.filesStatus[file]} ${chalk.bold(file)} ${note}`;\n })\n .join('\\n');\n return `${addName ? name : ''}\\n${chalk.cyan(files)}`;\n })\n .join('\\n\\n');\n}\n\nexport function conflictSummaryReport(components: ApplyVersionResult[]): string {\n const tab = '\\t';\n return compact(\n components.map((component: ApplyVersionResult) => {\n const name = component.id.toStringWithoutVersion();\n const files = compact(\n Object.keys(component.filesStatus).map((file) => {\n if (component.filesStatus[file] === FileStatus.manual) {\n return `${tab}${component.filesStatus[file]} ${chalk.bold(file)}`;\n }\n return null;\n })\n );\n if (!files.length) return null;\n\n return `${name}\\n${chalk.cyan(files.join('\\n'))}`;\n })\n ).join('\\n');\n}\n\nexport function installationErrorOutput(installationError?: Error) {\n if (!installationError) return '';\n const title = chalk.underline('Installation Error');\n const subTitle =\n 'The following error had been caught from the package manager, please fix the issue and run \"bit install\"';\n const body = chalk.red(installationError.message);\n return `\\n\\n${title}\\n${subTitle}\\n${body}`;\n}\n\nexport function compilationErrorOutput(compilationError?: Error) {\n if (!compilationError) return '';\n const title = chalk.underline('Compilation Error');\n const subTitle = 'The following error had been caught from the compiler, please fix the issue and run \"bit compile\"';\n const body = chalk.red(compilationError.message);\n return `\\n\\n${title}\\n${subTitle}\\n${body}`;\n}\n"],"mappings":"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"}