@teambit/workspace 0.0.957 → 0.0.959
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.
- package/dist/aspects-merger.d.ts +2 -1
- package/dist/aspects-merger.js +16 -30
- package/dist/aspects-merger.js.map +1 -1
- package/dist/exceptions/merge-config-conflict.js +1 -1
- package/dist/exceptions/merge-config-conflict.js.map +1 -1
- package/dist/merge-conflict-file.d.ts +22 -0
- package/dist/merge-conflict-file.js +150 -0
- package/dist/merge-conflict-file.js.map +1 -0
- package/dist/{preview-1673494106850.js → preview-1673666932263.js} +2 -2
- package/dist/workspace.d.ts +3 -1
- package/dist/workspace.js +5 -5
- package/dist/workspace.js.map +1 -1
- package/exceptions/merge-config-conflict.ts +1 -1
- package/package-tar/teambit-workspace-0.0.959.tgz +0 -0
- package/package.json +40 -40
- package/package-tar/teambit-workspace-0.0.957.tgz +0 -0
package/dist/aspects-merger.d.ts
CHANGED
|
@@ -2,11 +2,13 @@ import { Harmony } from '@teambit/harmony';
|
|
|
2
2
|
import { Component, ComponentID } from '@teambit/component';
|
|
3
3
|
import { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';
|
|
4
4
|
import { ExtensionsOrigin, Workspace } from './workspace';
|
|
5
|
+
import { MergeConflictFile } from './merge-conflict-file';
|
|
5
6
|
export declare class AspectsMerger {
|
|
6
7
|
private workspace;
|
|
7
8
|
private harmony;
|
|
8
9
|
private consumer;
|
|
9
10
|
private warnedAboutMisconfiguredEnvs;
|
|
11
|
+
readonly mergeConflictFile: MergeConflictFile;
|
|
10
12
|
constructor(workspace: Workspace, harmony: Harmony);
|
|
11
13
|
/**
|
|
12
14
|
* Calculate the component config based on:
|
|
@@ -28,7 +30,6 @@ export declare class AspectsMerger {
|
|
|
28
30
|
private getUnmergedData;
|
|
29
31
|
private warnAboutMisconfiguredEnv;
|
|
30
32
|
private filterEnvsFromExtensionsIfNeeded;
|
|
31
|
-
private getConfigMergeFile;
|
|
32
33
|
/**
|
|
33
34
|
* Load all unloaded extensions from a list
|
|
34
35
|
* @param extensions list of extensions with config to load
|
package/dist/aspects-merger.js
CHANGED
|
@@ -15,13 +15,6 @@ function _defineProperty2() {
|
|
|
15
15
|
};
|
|
16
16
|
return data;
|
|
17
17
|
}
|
|
18
|
-
function _fsExtra() {
|
|
19
|
-
const data = _interopRequireDefault(require("fs-extra"));
|
|
20
|
-
_fsExtra = function () {
|
|
21
|
-
return data;
|
|
22
|
-
};
|
|
23
|
-
return data;
|
|
24
|
-
}
|
|
25
18
|
function _envs() {
|
|
26
19
|
const data = require("@teambit/envs");
|
|
27
20
|
_envs = function () {
|
|
@@ -57,14 +50,24 @@ function _workspace() {
|
|
|
57
50
|
};
|
|
58
51
|
return data;
|
|
59
52
|
}
|
|
53
|
+
function _mergeConflictFile() {
|
|
54
|
+
const data = require("./merge-conflict-file");
|
|
55
|
+
_mergeConflictFile = function () {
|
|
56
|
+
return data;
|
|
57
|
+
};
|
|
58
|
+
return data;
|
|
59
|
+
}
|
|
60
60
|
class AspectsMerger {
|
|
61
61
|
// cache env-ids that have been errored about not having "env" type
|
|
62
|
+
|
|
62
63
|
constructor(workspace, harmony) {
|
|
63
64
|
this.workspace = workspace;
|
|
64
65
|
this.harmony = harmony;
|
|
65
66
|
(0, _defineProperty2().default)(this, "consumer", void 0);
|
|
66
67
|
(0, _defineProperty2().default)(this, "warnedAboutMisconfiguredEnvs", []);
|
|
68
|
+
(0, _defineProperty2().default)(this, "mergeConflictFile", void 0);
|
|
67
69
|
this.consumer = workspace.consumer;
|
|
70
|
+
this.mergeConflictFile = new (_mergeConflictFile().MergeConflictFile)(workspace.path);
|
|
68
71
|
}
|
|
69
72
|
|
|
70
73
|
/**
|
|
@@ -86,9 +89,9 @@ class AspectsMerger {
|
|
|
86
89
|
const errors = [];
|
|
87
90
|
const bitMapEntry = this.consumer.bitMap.getComponentIfExist(componentId._legacy);
|
|
88
91
|
const bitMapExtensions = bitMapEntry === null || bitMapEntry === void 0 ? void 0 : bitMapEntry.config;
|
|
89
|
-
let
|
|
92
|
+
let configMerge;
|
|
90
93
|
try {
|
|
91
|
-
|
|
94
|
+
configMerge = await this.mergeConflictFile.getConflictParsed(componentId.toStringWithoutVersion());
|
|
92
95
|
} catch (err) {
|
|
93
96
|
if (!(err instanceof _mergeConfigConflict().MergeConfigConflict)) {
|
|
94
97
|
throw err;
|
|
@@ -109,10 +112,10 @@ class AspectsMerger {
|
|
|
109
112
|
const unmergedData = this.getUnmergedData(componentId);
|
|
110
113
|
const unmergedDataMergeConf = unmergedData === null || unmergedData === void 0 ? void 0 : unmergedData.mergedConfig;
|
|
111
114
|
const getMergeConfigCombined = () => {
|
|
112
|
-
if (!
|
|
113
|
-
if (!
|
|
114
|
-
if (!unmergedDataMergeConf) return
|
|
115
|
-
return (0, _lodash().mergeWith)(
|
|
115
|
+
if (!configMerge && !unmergedDataMergeConf) return undefined;
|
|
116
|
+
if (!configMerge) return unmergedDataMergeConf;
|
|
117
|
+
if (!unmergedDataMergeConf) return configMerge;
|
|
118
|
+
return (0, _lodash().mergeWith)(configMerge, unmergedDataMergeConf, (objValue, srcValue) => {
|
|
116
119
|
if (Array.isArray(objValue)) {
|
|
117
120
|
// critical for dependencyResolver.policy.*dependencies. otherwise, it will override the array
|
|
118
121
|
return objValue.concat(srcValue);
|
|
@@ -286,23 +289,6 @@ class AspectsMerger {
|
|
|
286
289
|
envIsCurrentlySet: Boolean(envFromEnvsAspect)
|
|
287
290
|
};
|
|
288
291
|
}
|
|
289
|
-
async getConfigMergeFile(componentId) {
|
|
290
|
-
const configMergePath = this.workspace.getConfigMergeFilePath(componentId);
|
|
291
|
-
let fileContent;
|
|
292
|
-
try {
|
|
293
|
-
fileContent = await _fsExtra().default.readFile(configMergePath, 'utf-8');
|
|
294
|
-
} catch (err) {
|
|
295
|
-
if (err.code === 'ENOENT') {
|
|
296
|
-
return undefined;
|
|
297
|
-
}
|
|
298
|
-
throw err;
|
|
299
|
-
}
|
|
300
|
-
try {
|
|
301
|
-
return JSON.parse(fileContent);
|
|
302
|
-
} catch (err) {
|
|
303
|
-
throw new (_mergeConfigConflict().MergeConfigConflict)(configMergePath);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
292
|
|
|
307
293
|
/**
|
|
308
294
|
* Load all unloaded extensions from a list
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AspectsMerger","constructor","workspace","harmony","consumer","merge","componentId","componentFromScope","excludeOrigins","configFileExtensions","variantsExtensions","wsDefaultExtensions","mergeFromScope","errors","bitMapEntry","bitMap","getComponentIfExist","_legacy","bitMapExtensions","config","configMergeFile","getConfigMergeFile","err","MergeConfigConflict","logger","error","toString","push","adjustEnvsOnConfigMerge","conf","env","EnvsAspect","id","split","unmergedData","getUnmergedData","unmergedDataMergeConf","mergedConfig","getMergeConfigCombined","undefined","mergeWith","objValue","srcValue","Array","isArray","concat","mergeConfigCombined","configMergeExtensions","ExtensionDataList","fromConfigObject","scopeExtensions","extensions","specific","nonSpecific","partition","entry","AspectSpecificField","scopeExtensionsNonSpecific","scopeExtensionsSpecific","componentConfigFile","aspects","toLegacy","relativeComponentDir","componentDir","ignoreVersion","relative","variantConfig","variants","byRootDirAndName","fullName","clone","extensionsToMerge","envWasFoundPreviously","removedExtensionIds","addExtensionsToMerge","origin","extraData","length","filter","extData","isRemoved","map","stringId","extsWithoutRemoved","filterRemovedExtensions","selfInMergedExtensions","findExtension","toStringWithoutScopeAndVersion","extsWithoutSelf","extensionId","remove","extensionDataListFiltered","envIsCurrentlySet","filterEnvsFromExtensionsIfNeeded","warnAboutMisconfiguredEnv","setDataListAsSpecific","forEach","dataEntry","includes","fromArray","extensionDataList","continuePropagating","propagate","appliedRules","sortedMatches","pattern","specificity","isDefaultExtension","Promise","all","list","resolveExtensionListIds","afterMerge","mergeConfigs","ext","loadExtensions","withoutRemoved","beforeMerge","scope","legacyScope","objects","unmergedComponents","getEntry","name","hasId","envAspect","envFromEnvsAspect","envs","getCoreEnvsIds","warnedAboutMisconfiguredEnvs","envId","resolveComponentId","get","isUsingEnvEnv","consoleWarning","data","nonEnvs","e","toStringWithoutVersion","envAspectExt","find","ids","listIds","envAspectId","found","isEqualWithoutVersion","Boolean","configMergePath","getConfigMergeFilePath","fileContent","fs","readFile","code","JSON","parse","originatedFrom","throwOnError","extensionsIdsP","extensionEntry","extensionsIds","loadedExtensions","extensionsToLoad","difference","loadAspects","extensionList","promises"],"sources":["aspects-merger.ts"],"sourcesContent":["import { Harmony } from '@teambit/harmony';\nimport fs from 'fs-extra';\nimport { Component, ComponentID } from '@teambit/component';\nimport { UnmergedComponent } from '@teambit/legacy/dist/scope/lanes/unmerged-components';\nimport { EnvsAspect } from '@teambit/envs';\nimport { Consumer } from '@teambit/legacy/dist/consumer';\nimport { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { partition, mergeWith, difference } from 'lodash';\nimport { MergeConfigConflict } from './exceptions/merge-config-conflict';\nimport { AspectSpecificField, ExtensionsOrigin, Workspace } from './workspace';\n\nexport class AspectsMerger {\n private consumer: Consumer;\n private warnedAboutMisconfiguredEnvs: string[] = []; // cache env-ids that have been errored about not having \"env\" type\n constructor(private workspace: Workspace, private harmony: Harmony) {\n this.consumer = workspace.consumer;\n }\n\n /**\n * Calculate the component config based on:\n * the config property in the .bitmap file\n * the component.json file in the component folder\n * matching pattern in the variants config\n * defaults extensions from workspace config\n * extensions from the model.\n */\n // eslint-disable-next-line complexity\n async merge(\n componentId: ComponentID,\n componentFromScope?: Component,\n excludeOrigins: ExtensionsOrigin[] = []\n ): Promise<{\n extensions: ExtensionDataList;\n beforeMerge: Array<{ extensions: ExtensionDataList; origin: ExtensionsOrigin; extraData: any }>; // useful for debugging\n errors?: Error[];\n }> {\n // TODO: consider caching this result\n let configFileExtensions: ExtensionDataList | undefined;\n let variantsExtensions: ExtensionDataList | undefined;\n let wsDefaultExtensions: ExtensionDataList | undefined;\n const mergeFromScope = true;\n const errors: Error[] = [];\n\n const bitMapEntry = this.consumer.bitMap.getComponentIfExist(componentId._legacy);\n const bitMapExtensions = bitMapEntry?.config;\n\n let configMergeFile: Record<string, any> | undefined;\n try {\n configMergeFile = await this.getConfigMergeFile(componentId);\n } catch (err) {\n if (!(err instanceof MergeConfigConflict)) {\n throw err;\n }\n this.workspace.logger.error(`unable to parse the config file for ${componentId.toString()} due to conflicts`);\n errors.push(err);\n }\n\n const adjustEnvsOnConfigMerge = (conf: Record<string, any>) => {\n const env = conf[EnvsAspect.id]?.env;\n if (!env) return;\n const [id] = env.split('@');\n conf[EnvsAspect.id] = { env: id };\n conf[env] = {};\n };\n const unmergedData = this.getUnmergedData(componentId);\n const unmergedDataMergeConf = unmergedData?.mergedConfig;\n const getMergeConfigCombined = () => {\n if (!configMergeFile && !unmergedDataMergeConf) return undefined;\n if (!configMergeFile) return unmergedDataMergeConf;\n if (!unmergedDataMergeConf) return configMergeFile;\n\n return mergeWith(configMergeFile, unmergedDataMergeConf, (objValue, srcValue) => {\n if (Array.isArray(objValue)) {\n // critical for dependencyResolver.policy.*dependencies. otherwise, it will override the array\n return objValue.concat(srcValue);\n }\n return undefined;\n });\n };\n const mergeConfigCombined = getMergeConfigCombined();\n adjustEnvsOnConfigMerge(mergeConfigCombined || {});\n const configMergeExtensions = mergeConfigCombined\n ? ExtensionDataList.fromConfigObject(mergeConfigCombined)\n : undefined;\n\n const scopeExtensions = componentFromScope?.config?.extensions || new ExtensionDataList();\n const [specific, nonSpecific] = partition(scopeExtensions, (entry) => entry.config[AspectSpecificField] === true);\n const scopeExtensionsNonSpecific = new ExtensionDataList(...nonSpecific);\n const scopeExtensionsSpecific = new ExtensionDataList(...specific);\n\n const componentConfigFile = await this.workspace.componentConfigFile(componentId);\n if (componentConfigFile) {\n configFileExtensions = componentConfigFile.aspects.toLegacy();\n }\n const relativeComponentDir = this.workspace.componentDir(componentId, { ignoreVersion: true }, { relative: true });\n const variantConfig = this.workspace.variants.byRootDirAndName(relativeComponentDir, componentId.fullName);\n if (variantConfig) {\n variantsExtensions = variantConfig.extensions.clone();\n // Do not merge from scope when there is specific variant (which is not *) that match the component\n // if (variantConfig.maxSpecificity > 0) {\n // mergeFromScope = false;\n // }\n }\n // We don't stop on each step because we want to merge the default scope even if propagate=false but the default scope is not defined\n // in the case the same extension pushed twice, the former takes precedence (opposite of Object.assign)\n const extensionsToMerge: Array<{ origin: ExtensionsOrigin; extensions: ExtensionDataList; extraData: any }> = [];\n let envWasFoundPreviously = false;\n const removedExtensionIds: string[] = [];\n\n const addExtensionsToMerge = async (extensions: ExtensionDataList, origin: ExtensionsOrigin, extraData?: any) => {\n if (!extensions.length) {\n return;\n }\n removedExtensionIds.push(...extensions.filter((extData) => extData.isRemoved).map((extData) => extData.stringId));\n const extsWithoutRemoved = extensions.filterRemovedExtensions();\n const selfInMergedExtensions = extsWithoutRemoved.findExtension(\n componentId._legacy.toStringWithoutScopeAndVersion(),\n true,\n true\n );\n const extsWithoutSelf = selfInMergedExtensions?.extensionId\n ? extsWithoutRemoved.remove(selfInMergedExtensions.extensionId)\n : extsWithoutRemoved;\n const { extensionDataListFiltered, envIsCurrentlySet } = await this.filterEnvsFromExtensionsIfNeeded(\n extsWithoutSelf,\n envWasFoundPreviously,\n origin\n );\n if (envIsCurrentlySet) {\n await this.warnAboutMisconfiguredEnv(componentId, extensions);\n envWasFoundPreviously = true;\n }\n\n extensionsToMerge.push({ origin, extensions: extensionDataListFiltered, extraData });\n };\n const setDataListAsSpecific = (extensions: ExtensionDataList) => {\n extensions.forEach((dataEntry) => (dataEntry.config[AspectSpecificField] = true));\n };\n if (configMergeExtensions && !excludeOrigins.includes('ConfigMerge')) {\n await addExtensionsToMerge(ExtensionDataList.fromArray(configMergeExtensions), 'ConfigMerge');\n }\n if (bitMapExtensions && !excludeOrigins.includes('BitmapFile')) {\n const extensionDataList = ExtensionDataList.fromConfigObject(bitMapExtensions);\n setDataListAsSpecific(extensionDataList);\n await addExtensionsToMerge(extensionDataList, 'BitmapFile');\n }\n if (configFileExtensions && !excludeOrigins.includes('ComponentJsonFile')) {\n setDataListAsSpecific(configFileExtensions);\n await addExtensionsToMerge(configFileExtensions, 'ComponentJsonFile');\n }\n if (!excludeOrigins.includes('ModelSpecific')) {\n await addExtensionsToMerge(ExtensionDataList.fromArray(scopeExtensionsSpecific), 'ModelSpecific');\n }\n let continuePropagating = componentConfigFile?.propagate ?? true;\n if (variantsExtensions && continuePropagating && !excludeOrigins.includes('WorkspaceVariants')) {\n const appliedRules = variantConfig?.sortedMatches.map(({ pattern, specificity }) => ({ pattern, specificity }));\n await addExtensionsToMerge(variantsExtensions, 'WorkspaceVariants', { appliedRules });\n }\n continuePropagating = continuePropagating && (variantConfig?.propagate ?? true);\n // Do not apply default extensions on the default extensions (it will create infinite loop when loading them)\n const isDefaultExtension = wsDefaultExtensions?.findExtension(componentId.toString(), true, true);\n if (\n wsDefaultExtensions &&\n continuePropagating &&\n !isDefaultExtension &&\n !excludeOrigins.includes('WorkspaceDefault')\n ) {\n await addExtensionsToMerge(wsDefaultExtensions, 'WorkspaceDefault');\n }\n if (mergeFromScope && continuePropagating && !excludeOrigins.includes('ModelNonSpecific')) {\n await addExtensionsToMerge(scopeExtensionsNonSpecific, 'ModelNonSpecific');\n }\n\n // It's important to do this resolution before the merge, otherwise we have issues with extensions\n // coming from scope with local scope name, as opposed to the same extension comes from the workspace with default scope name\n await Promise.all(extensionsToMerge.map((list) => this.resolveExtensionListIds(list.extensions)));\n const afterMerge = ExtensionDataList.mergeConfigs(extensionsToMerge.map((ext) => ext.extensions));\n await this.loadExtensions(afterMerge, componentId);\n const withoutRemoved = afterMerge.filter((extData) => !removedExtensionIds.includes(extData.stringId));\n const extensions = ExtensionDataList.fromArray(withoutRemoved);\n return {\n extensions,\n beforeMerge: extensionsToMerge,\n errors,\n };\n }\n\n private getUnmergedData(componentId: ComponentID): UnmergedComponent | undefined {\n return this.workspace.scope.legacyScope.objects.unmergedComponents.getEntry(componentId._legacy.name);\n }\n\n private async warnAboutMisconfiguredEnv(componentId: ComponentID, extensionDataList: ExtensionDataList) {\n if (!(await this.workspace.hasId(componentId))) {\n // if this is a dependency and not belong to the workspace, don't show the warning\n return;\n }\n const envAspect = extensionDataList.findExtension(EnvsAspect.id);\n const envFromEnvsAspect = envAspect?.config.env;\n if (!envFromEnvsAspect) return;\n if (this.workspace.envs.getCoreEnvsIds().includes(envFromEnvsAspect)) return;\n if (this.warnedAboutMisconfiguredEnvs.includes(envFromEnvsAspect)) return;\n let env: Component;\n try {\n const envId = await this.workspace.resolveComponentId(envFromEnvsAspect);\n env = await this.workspace.get(envId);\n } catch (err) {\n return; // unable to get the component for some reason. don't sweat it. forget about the warning\n }\n if (!this.workspace.envs.isUsingEnvEnv(env)) {\n this.warnedAboutMisconfiguredEnvs.push(envFromEnvsAspect);\n this.workspace.logger.consoleWarning(\n `env \"${envFromEnvsAspect}\" is not of type env. (correct the env's type, or component config with \"bit env set ${envFromEnvsAspect} teambit.envs/env\")`\n );\n }\n }\n\n private async filterEnvsFromExtensionsIfNeeded(\n extensionDataList: ExtensionDataList,\n envWasFoundPreviously: boolean,\n origin: ExtensionsOrigin\n ) {\n const envAspect = extensionDataList.findExtension(EnvsAspect.id);\n const envFromEnvsAspect: string | undefined = envAspect?.config.env || envAspect?.data.id;\n if (envWasFoundPreviously && envAspect) {\n const nonEnvs = extensionDataList.filter((e) => {\n // normally the env-id inside the envs aspect doesn't have a version, but the aspect itself has a version.\n if (e.stringId === envFromEnvsAspect || e.extensionId?.toStringWithoutVersion() === envFromEnvsAspect)\n return false;\n return true;\n });\n // still, aspect env may have other data other then config.env.\n delete envAspect.config.env;\n return { extensionDataListFiltered: new ExtensionDataList(...nonEnvs), envIsCurrentlySet: true };\n }\n if (envFromEnvsAspect && (origin === 'ModelNonSpecific' || origin === 'ModelSpecific')) {\n // if env was found, search for this env in the workspace and if found, replace the env-id with the one from the workspace\n const envAspectExt = extensionDataList.find((e) => e.extensionId?.toStringWithoutVersion() === envFromEnvsAspect);\n const ids = await this.workspace.listIds();\n const envAspectId = envAspectExt?.extensionId;\n const found = envAspectId && ids.find((id) => id._legacy.isEqualWithoutVersion(envAspectId));\n if (found) {\n envAspectExt.extensionId = found._legacy;\n }\n }\n return { extensionDataListFiltered: extensionDataList, envIsCurrentlySet: Boolean(envFromEnvsAspect) };\n }\n\n private async getConfigMergeFile(componentId: ComponentID): Promise<Record<string, any> | undefined> {\n const configMergePath = this.workspace.getConfigMergeFilePath(componentId);\n let fileContent: string;\n try {\n fileContent = await fs.readFile(configMergePath, 'utf-8');\n } catch (err: any) {\n if (err.code === 'ENOENT') {\n return undefined;\n }\n throw err;\n }\n try {\n return JSON.parse(fileContent);\n } catch (err: any) {\n throw new MergeConfigConflict(configMergePath);\n }\n }\n\n /**\n * Load all unloaded extensions from a list\n * @param extensions list of extensions with config to load\n */\n private async loadExtensions(\n extensions: ExtensionDataList,\n originatedFrom?: ComponentID,\n throwOnError = false\n ): Promise<void> {\n const extensionsIdsP = extensions.map(async (extensionEntry) => {\n // Core extension\n if (!extensionEntry.extensionId) {\n return extensionEntry.stringId as string;\n }\n\n const id = await this.workspace.resolveComponentId(extensionEntry.extensionId);\n // return this.resolveComponentId(extensionEntry.extensionId);\n return id.toString();\n });\n const extensionsIds: string[] = await Promise.all(extensionsIdsP);\n const loadedExtensions = this.harmony.extensionsIds;\n const extensionsToLoad = difference(extensionsIds, loadedExtensions);\n if (!extensionsToLoad.length) return;\n await this.workspace.loadAspects(extensionsToLoad, throwOnError, originatedFrom?.toString());\n }\n\n /**\n * This will mutate the entries with extensionId prop to have resolved legacy id\n * This should be worked on the extension data list not the new aspect list\n * @param extensionList\n */\n private async resolveExtensionListIds(extensionList: ExtensionDataList): Promise<ExtensionDataList> {\n const promises = extensionList.map(async (entry) => {\n if (entry.extensionId) {\n const id = await this.workspace.resolveComponentId(entry.extensionId);\n entry.extensionId = id._legacy;\n }\n\n return entry;\n });\n await Promise.all(promises);\n return extensionList;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAGA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEO,MAAMA,aAAa,CAAC;EAE4B;EACrDC,WAAW,CAASC,SAAoB,EAAUC,OAAgB,EAAE;IAAA,KAAhDD,SAAoB,GAApBA,SAAoB;IAAA,KAAUC,OAAgB,GAAhBA,OAAgB;IAAA;IAAA,sEADjB,EAAE;IAEjD,IAAI,CAACC,QAAQ,GAAGF,SAAS,CAACE,QAAQ;EACpC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE;EACA,MAAMC,KAAK,CACTC,WAAwB,EACxBC,kBAA8B,EAC9BC,cAAkC,GAAG,EAAE,EAKtC;IAAA;IACD;IACA,IAAIC,oBAAmD;IACvD,IAAIC,kBAAiD;IACrD,IAAIC,mBAAkD;IACtD,MAAMC,cAAc,GAAG,IAAI;IAC3B,MAAMC,MAAe,GAAG,EAAE;IAE1B,MAAMC,WAAW,GAAG,IAAI,CAACV,QAAQ,CAACW,MAAM,CAACC,mBAAmB,CAACV,WAAW,CAACW,OAAO,CAAC;IACjF,MAAMC,gBAAgB,GAAGJ,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEK,MAAM;IAE5C,IAAIC,eAAgD;IACpD,IAAI;MACFA,eAAe,GAAG,MAAM,IAAI,CAACC,kBAAkB,CAACf,WAAW,CAAC;IAC9D,CAAC,CAAC,OAAOgB,GAAG,EAAE;MACZ,IAAI,EAAEA,GAAG,YAAYC,0CAAmB,CAAC,EAAE;QACzC,MAAMD,GAAG;MACX;MACA,IAAI,CAACpB,SAAS,CAACsB,MAAM,CAACC,KAAK,CAAE,uCAAsCnB,WAAW,CAACoB,QAAQ,EAAG,mBAAkB,CAAC;MAC7Gb,MAAM,CAACc,IAAI,CAACL,GAAG,CAAC;IAClB;IAEA,MAAMM,uBAAuB,GAAIC,IAAyB,IAAK;MAAA;MAC7D,MAAMC,GAAG,0BAAGD,IAAI,CAACE,kBAAU,CAACC,EAAE,CAAC,wDAAnB,oBAAqBF,GAAG;MACpC,IAAI,CAACA,GAAG,EAAE;MACV,MAAM,CAACE,EAAE,CAAC,GAAGF,GAAG,CAACG,KAAK,CAAC,GAAG,CAAC;MAC3BJ,IAAI,CAACE,kBAAU,CAACC,EAAE,CAAC,GAAG;QAAEF,GAAG,EAAEE;MAAG,CAAC;MACjCH,IAAI,CAACC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,MAAMI,YAAY,GAAG,IAAI,CAACC,eAAe,CAAC7B,WAAW,CAAC;IACtD,MAAM8B,qBAAqB,GAAGF,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEG,YAAY;IACxD,MAAMC,sBAAsB,GAAG,MAAM;MACnC,IAAI,CAAClB,eAAe,IAAI,CAACgB,qBAAqB,EAAE,OAAOG,SAAS;MAChE,IAAI,CAACnB,eAAe,EAAE,OAAOgB,qBAAqB;MAClD,IAAI,CAACA,qBAAqB,EAAE,OAAOhB,eAAe;MAElD,OAAO,IAAAoB,mBAAS,EAACpB,eAAe,EAAEgB,qBAAqB,EAAE,CAACK,QAAQ,EAAEC,QAAQ,KAAK;QAC/E,IAAIC,KAAK,CAACC,OAAO,CAACH,QAAQ,CAAC,EAAE;UAC3B;UACA,OAAOA,QAAQ,CAACI,MAAM,CAACH,QAAQ,CAAC;QAClC;QACA,OAAOH,SAAS;MAClB,CAAC,CAAC;IACJ,CAAC;IACD,MAAMO,mBAAmB,GAAGR,sBAAsB,EAAE;IACpDV,uBAAuB,CAACkB,mBAAmB,IAAI,CAAC,CAAC,CAAC;IAClD,MAAMC,qBAAqB,GAAGD,mBAAmB,GAC7CE,kCAAiB,CAACC,gBAAgB,CAACH,mBAAmB,CAAC,GACvDP,SAAS;IAEb,MAAMW,eAAe,GAAG,CAAA3C,kBAAkB,aAAlBA,kBAAkB,gDAAlBA,kBAAkB,CAAEY,MAAM,0DAA1B,sBAA4BgC,UAAU,KAAI,KAAIH,kCAAiB,GAAE;IACzF,MAAM,CAACI,QAAQ,EAAEC,WAAW,CAAC,GAAG,IAAAC,mBAAS,EAACJ,eAAe,EAAGK,KAAK,IAAKA,KAAK,CAACpC,MAAM,CAACqC,gCAAmB,CAAC,KAAK,IAAI,CAAC;IACjH,MAAMC,0BAA0B,GAAG,KAAIT,kCAAiB,EAAC,GAAGK,WAAW,CAAC;IACxE,MAAMK,uBAAuB,GAAG,KAAIV,kCAAiB,EAAC,GAAGI,QAAQ,CAAC;IAElE,MAAMO,mBAAmB,GAAG,MAAM,IAAI,CAACzD,SAAS,CAACyD,mBAAmB,CAACrD,WAAW,CAAC;IACjF,IAAIqD,mBAAmB,EAAE;MACvBlD,oBAAoB,GAAGkD,mBAAmB,CAACC,OAAO,CAACC,QAAQ,EAAE;IAC/D;IACA,MAAMC,oBAAoB,GAAG,IAAI,CAAC5D,SAAS,CAAC6D,YAAY,CAACzD,WAAW,EAAE;MAAE0D,aAAa,EAAE;IAAK,CAAC,EAAE;MAAEC,QAAQ,EAAE;IAAK,CAAC,CAAC;IAClH,MAAMC,aAAa,GAAG,IAAI,CAAChE,SAAS,CAACiE,QAAQ,CAACC,gBAAgB,CAACN,oBAAoB,EAAExD,WAAW,CAAC+D,QAAQ,CAAC;IAC1G,IAAIH,aAAa,EAAE;MACjBxD,kBAAkB,GAAGwD,aAAa,CAACf,UAAU,CAACmB,KAAK,EAAE;MACrD;MACA;MACA;MACA;IACF;IACA;IACA;IACA,MAAMC,iBAAqG,GAAG,EAAE;IAChH,IAAIC,qBAAqB,GAAG,KAAK;IACjC,MAAMC,mBAA6B,GAAG,EAAE;IAExC,MAAMC,oBAAoB,GAAG,OAAOvB,UAA6B,EAAEwB,MAAwB,EAAEC,SAAe,KAAK;MAC/G,IAAI,CAACzB,UAAU,CAAC0B,MAAM,EAAE;QACtB;MACF;MACAJ,mBAAmB,CAAC9C,IAAI,CAAC,GAAGwB,UAAU,CAAC2B,MAAM,CAAEC,OAAO,IAAKA,OAAO,CAACC,SAAS,CAAC,CAACC,GAAG,CAAEF,OAAO,IAAKA,OAAO,CAACG,QAAQ,CAAC,CAAC;MACjH,MAAMC,kBAAkB,GAAGhC,UAAU,CAACiC,uBAAuB,EAAE;MAC/D,MAAMC,sBAAsB,GAAGF,kBAAkB,CAACG,aAAa,CAC7DhF,WAAW,CAACW,OAAO,CAACsE,8BAA8B,EAAE,EACpD,IAAI,EACJ,IAAI,CACL;MACD,MAAMC,eAAe,GAAGH,sBAAsB,aAAtBA,sBAAsB,eAAtBA,sBAAsB,CAAEI,WAAW,GACvDN,kBAAkB,CAACO,MAAM,CAACL,sBAAsB,CAACI,WAAW,CAAC,GAC7DN,kBAAkB;MACtB,MAAM;QAAEQ,yBAAyB;QAAEC;MAAkB,CAAC,GAAG,MAAM,IAAI,CAACC,gCAAgC,CAClGL,eAAe,EACfhB,qBAAqB,EACrBG,MAAM,CACP;MACD,IAAIiB,iBAAiB,EAAE;QACrB,MAAM,IAAI,CAACE,yBAAyB,CAACxF,WAAW,EAAE6C,UAAU,CAAC;QAC7DqB,qBAAqB,GAAG,IAAI;MAC9B;MAEAD,iBAAiB,CAAC5C,IAAI,CAAC;QAAEgD,MAAM;QAAExB,UAAU,EAAEwC,yBAAyB;QAAEf;MAAU,CAAC,CAAC;IACtF,CAAC;IACD,MAAMmB,qBAAqB,GAAI5C,UAA6B,IAAK;MAC/DA,UAAU,CAAC6C,OAAO,CAAEC,SAAS,IAAMA,SAAS,CAAC9E,MAAM,CAACqC,gCAAmB,CAAC,GAAG,IAAK,CAAC;IACnF,CAAC;IACD,IAAIT,qBAAqB,IAAI,CAACvC,cAAc,CAAC0F,QAAQ,CAAC,aAAa,CAAC,EAAE;MACpE,MAAMxB,oBAAoB,CAAC1B,kCAAiB,CAACmD,SAAS,CAACpD,qBAAqB,CAAC,EAAE,aAAa,CAAC;IAC/F;IACA,IAAI7B,gBAAgB,IAAI,CAACV,cAAc,CAAC0F,QAAQ,CAAC,YAAY,CAAC,EAAE;MAC9D,MAAME,iBAAiB,GAAGpD,kCAAiB,CAACC,gBAAgB,CAAC/B,gBAAgB,CAAC;MAC9E6E,qBAAqB,CAACK,iBAAiB,CAAC;MACxC,MAAM1B,oBAAoB,CAAC0B,iBAAiB,EAAE,YAAY,CAAC;IAC7D;IACA,IAAI3F,oBAAoB,IAAI,CAACD,cAAc,CAAC0F,QAAQ,CAAC,mBAAmB,CAAC,EAAE;MACzEH,qBAAqB,CAACtF,oBAAoB,CAAC;MAC3C,MAAMiE,oBAAoB,CAACjE,oBAAoB,EAAE,mBAAmB,CAAC;IACvE;IACA,IAAI,CAACD,cAAc,CAAC0F,QAAQ,CAAC,eAAe,CAAC,EAAE;MAC7C,MAAMxB,oBAAoB,CAAC1B,kCAAiB,CAACmD,SAAS,CAACzC,uBAAuB,CAAC,EAAE,eAAe,CAAC;IACnG;IACA,IAAI2C,mBAAmB,4BAAG1C,mBAAmB,aAAnBA,mBAAmB,uBAAnBA,mBAAmB,CAAE2C,SAAS,yEAAI,IAAI;IAChE,IAAI5F,kBAAkB,IAAI2F,mBAAmB,IAAI,CAAC7F,cAAc,CAAC0F,QAAQ,CAAC,mBAAmB,CAAC,EAAE;MAC9F,MAAMK,YAAY,GAAGrC,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEsC,aAAa,CAACvB,GAAG,CAAC,CAAC;QAAEwB,OAAO;QAAEC;MAAY,CAAC,MAAM;QAAED,OAAO;QAAEC;MAAY,CAAC,CAAC,CAAC;MAC/G,MAAMhC,oBAAoB,CAAChE,kBAAkB,EAAE,mBAAmB,EAAE;QAAE6F;MAAa,CAAC,CAAC;IACvF;IACAF,mBAAmB,GAAGA,mBAAmB,8BAAKnC,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEoC,SAAS,yEAAI,IAAI,CAAC;IAC/E;IACA,MAAMK,kBAAkB,GAAGhG,mBAAmB,aAAnBA,mBAAmB,uBAAnBA,mBAAmB,CAAE2E,aAAa,CAAChF,WAAW,CAACoB,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC;IACjG,IACEf,mBAAmB,IACnB0F,mBAAmB,IACnB,CAACM,kBAAkB,IACnB,CAACnG,cAAc,CAAC0F,QAAQ,CAAC,kBAAkB,CAAC,EAC5C;MACA,MAAMxB,oBAAoB,CAAC/D,mBAAmB,EAAE,kBAAkB,CAAC;IACrE;IACA,IAAIC,cAAc,IAAIyF,mBAAmB,IAAI,CAAC7F,cAAc,CAAC0F,QAAQ,CAAC,kBAAkB,CAAC,EAAE;MACzF,MAAMxB,oBAAoB,CAACjB,0BAA0B,EAAE,kBAAkB,CAAC;IAC5E;;IAEA;IACA;IACA,MAAMmD,OAAO,CAACC,GAAG,CAACtC,iBAAiB,CAACU,GAAG,CAAE6B,IAAI,IAAK,IAAI,CAACC,uBAAuB,CAACD,IAAI,CAAC3D,UAAU,CAAC,CAAC,CAAC;IACjG,MAAM6D,UAAU,GAAGhE,kCAAiB,CAACiE,YAAY,CAAC1C,iBAAiB,CAACU,GAAG,CAAEiC,GAAG,IAAKA,GAAG,CAAC/D,UAAU,CAAC,CAAC;IACjG,MAAM,IAAI,CAACgE,cAAc,CAACH,UAAU,EAAE1G,WAAW,CAAC;IAClD,MAAM8G,cAAc,GAAGJ,UAAU,CAAClC,MAAM,CAAEC,OAAO,IAAK,CAACN,mBAAmB,CAACyB,QAAQ,CAACnB,OAAO,CAACG,QAAQ,CAAC,CAAC;IACtG,MAAM/B,UAAU,GAAGH,kCAAiB,CAACmD,SAAS,CAACiB,cAAc,CAAC;IAC9D,OAAO;MACLjE,UAAU;MACVkE,WAAW,EAAE9C,iBAAiB;MAC9B1D;IACF,CAAC;EACH;EAEQsB,eAAe,CAAC7B,WAAwB,EAAiC;IAC/E,OAAO,IAAI,CAACJ,SAAS,CAACoH,KAAK,CAACC,WAAW,CAACC,OAAO,CAACC,kBAAkB,CAACC,QAAQ,CAACpH,WAAW,CAACW,OAAO,CAAC0G,IAAI,CAAC;EACvG;EAEA,MAAc7B,yBAAyB,CAACxF,WAAwB,EAAE8F,iBAAoC,EAAE;IACtG,IAAI,EAAE,MAAM,IAAI,CAAClG,SAAS,CAAC0H,KAAK,CAACtH,WAAW,CAAC,CAAC,EAAE;MAC9C;MACA;IACF;IACA,MAAMuH,SAAS,GAAGzB,iBAAiB,CAACd,aAAa,CAACvD,kBAAU,CAACC,EAAE,CAAC;IAChE,MAAM8F,iBAAiB,GAAGD,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAE1G,MAAM,CAACW,GAAG;IAC/C,IAAI,CAACgG,iBAAiB,EAAE;IACxB,IAAI,IAAI,CAAC5H,SAAS,CAAC6H,IAAI,CAACC,cAAc,EAAE,CAAC9B,QAAQ,CAAC4B,iBAAiB,CAAC,EAAE;IACtE,IAAI,IAAI,CAACG,4BAA4B,CAAC/B,QAAQ,CAAC4B,iBAAiB,CAAC,EAAE;IACnE,IAAIhG,GAAc;IAClB,IAAI;MACF,MAAMoG,KAAK,GAAG,MAAM,IAAI,CAAChI,SAAS,CAACiI,kBAAkB,CAACL,iBAAiB,CAAC;MACxEhG,GAAG,GAAG,MAAM,IAAI,CAAC5B,SAAS,CAACkI,GAAG,CAACF,KAAK,CAAC;IACvC,CAAC,CAAC,OAAO5G,GAAG,EAAE;MACZ,OAAO,CAAC;IACV;;IACA,IAAI,CAAC,IAAI,CAACpB,SAAS,CAAC6H,IAAI,CAACM,aAAa,CAACvG,GAAG,CAAC,EAAE;MAC3C,IAAI,CAACmG,4BAA4B,CAACtG,IAAI,CAACmG,iBAAiB,CAAC;MACzD,IAAI,CAAC5H,SAAS,CAACsB,MAAM,CAAC8G,cAAc,CACjC,QAAOR,iBAAkB,wFAAuFA,iBAAkB,qBAAoB,CACxJ;IACH;EACF;EAEA,MAAcjC,gCAAgC,CAC5CO,iBAAoC,EACpC5B,qBAA8B,EAC9BG,MAAwB,EACxB;IACA,MAAMkD,SAAS,GAAGzB,iBAAiB,CAACd,aAAa,CAACvD,kBAAU,CAACC,EAAE,CAAC;IAChE,MAAM8F,iBAAqC,GAAG,CAAAD,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAE1G,MAAM,CAACW,GAAG,MAAI+F,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEU,IAAI,CAACvG,EAAE;IACzF,IAAIwC,qBAAqB,IAAIqD,SAAS,EAAE;MACtC,MAAMW,OAAO,GAAGpC,iBAAiB,CAACtB,MAAM,CAAE2D,CAAC,IAAK;QAAA;QAC9C;QACA,IAAIA,CAAC,CAACvD,QAAQ,KAAK4C,iBAAiB,IAAI,mBAAAW,CAAC,CAAChD,WAAW,mDAAb,eAAeiD,sBAAsB,EAAE,MAAKZ,iBAAiB,EACnG,OAAO,KAAK;QACd,OAAO,IAAI;MACb,CAAC,CAAC;MACF;MACA,OAAOD,SAAS,CAAC1G,MAAM,CAACW,GAAG;MAC3B,OAAO;QAAE6D,yBAAyB,EAAE,KAAI3C,kCAAiB,EAAC,GAAGwF,OAAO,CAAC;QAAE5C,iBAAiB,EAAE;MAAK,CAAC;IAClG;IACA,IAAIkC,iBAAiB,KAAKnD,MAAM,KAAK,kBAAkB,IAAIA,MAAM,KAAK,eAAe,CAAC,EAAE;MACtF;MACA,MAAMgE,YAAY,GAAGvC,iBAAiB,CAACwC,IAAI,CAAEH,CAAC;QAAA;QAAA,OAAK,oBAAAA,CAAC,CAAChD,WAAW,oDAAb,gBAAeiD,sBAAsB,EAAE,MAAKZ,iBAAiB;MAAA,EAAC;MACjH,MAAMe,GAAG,GAAG,MAAM,IAAI,CAAC3I,SAAS,CAAC4I,OAAO,EAAE;MAC1C,MAAMC,WAAW,GAAGJ,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAElD,WAAW;MAC7C,MAAMuD,KAAK,GAAGD,WAAW,IAAIF,GAAG,CAACD,IAAI,CAAE5G,EAAE,IAAKA,EAAE,CAACf,OAAO,CAACgI,qBAAqB,CAACF,WAAW,CAAC,CAAC;MAC5F,IAAIC,KAAK,EAAE;QACTL,YAAY,CAAClD,WAAW,GAAGuD,KAAK,CAAC/H,OAAO;MAC1C;IACF;IACA,OAAO;MAAE0E,yBAAyB,EAAES,iBAAiB;MAAER,iBAAiB,EAAEsD,OAAO,CAACpB,iBAAiB;IAAE,CAAC;EACxG;EAEA,MAAczG,kBAAkB,CAACf,WAAwB,EAA4C;IACnG,MAAM6I,eAAe,GAAG,IAAI,CAACjJ,SAAS,CAACkJ,sBAAsB,CAAC9I,WAAW,CAAC;IAC1E,IAAI+I,WAAmB;IACvB,IAAI;MACFA,WAAW,GAAG,MAAMC,kBAAE,CAACC,QAAQ,CAACJ,eAAe,EAAE,OAAO,CAAC;IAC3D,CAAC,CAAC,OAAO7H,GAAQ,EAAE;MACjB,IAAIA,GAAG,CAACkI,IAAI,KAAK,QAAQ,EAAE;QACzB,OAAOjH,SAAS;MAClB;MACA,MAAMjB,GAAG;IACX;IACA,IAAI;MACF,OAAOmI,IAAI,CAACC,KAAK,CAACL,WAAW,CAAC;IAChC,CAAC,CAAC,OAAO/H,GAAQ,EAAE;MACjB,MAAM,KAAIC,0CAAmB,EAAC4H,eAAe,CAAC;IAChD;EACF;;EAEA;AACF;AACA;AACA;EACE,MAAchC,cAAc,CAC1BhE,UAA6B,EAC7BwG,cAA4B,EAC5BC,YAAY,GAAG,KAAK,EACL;IACf,MAAMC,cAAc,GAAG1G,UAAU,CAAC8B,GAAG,CAAC,MAAO6E,cAAc,IAAK;MAC9D;MACA,IAAI,CAACA,cAAc,CAACrE,WAAW,EAAE;QAC/B,OAAOqE,cAAc,CAAC5E,QAAQ;MAChC;MAEA,MAAMlD,EAAE,GAAG,MAAM,IAAI,CAAC9B,SAAS,CAACiI,kBAAkB,CAAC2B,cAAc,CAACrE,WAAW,CAAC;MAC9E;MACA,OAAOzD,EAAE,CAACN,QAAQ,EAAE;IACtB,CAAC,CAAC;IACF,MAAMqI,aAAuB,GAAG,MAAMnD,OAAO,CAACC,GAAG,CAACgD,cAAc,CAAC;IACjE,MAAMG,gBAAgB,GAAG,IAAI,CAAC7J,OAAO,CAAC4J,aAAa;IACnD,MAAME,gBAAgB,GAAG,IAAAC,oBAAU,EAACH,aAAa,EAAEC,gBAAgB,CAAC;IACpE,IAAI,CAACC,gBAAgB,CAACpF,MAAM,EAAE;IAC9B,MAAM,IAAI,CAAC3E,SAAS,CAACiK,WAAW,CAACF,gBAAgB,EAAEL,YAAY,EAAED,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEjI,QAAQ,EAAE,CAAC;EAC9F;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAcqF,uBAAuB,CAACqD,aAAgC,EAA8B;IAClG,MAAMC,QAAQ,GAAGD,aAAa,CAACnF,GAAG,CAAC,MAAO1B,KAAK,IAAK;MAClD,IAAIA,KAAK,CAACkC,WAAW,EAAE;QACrB,MAAMzD,EAAE,GAAG,MAAM,IAAI,CAAC9B,SAAS,CAACiI,kBAAkB,CAAC5E,KAAK,CAACkC,WAAW,CAAC;QACrElC,KAAK,CAACkC,WAAW,GAAGzD,EAAE,CAACf,OAAO;MAChC;MAEA,OAAOsC,KAAK;IACd,CAAC,CAAC;IACF,MAAMqD,OAAO,CAACC,GAAG,CAACwD,QAAQ,CAAC;IAC3B,OAAOD,aAAa;EACtB;AACF;AAAC"}
|
|
1
|
+
{"version":3,"names":["AspectsMerger","constructor","workspace","harmony","consumer","mergeConflictFile","MergeConflictFile","path","merge","componentId","componentFromScope","excludeOrigins","configFileExtensions","variantsExtensions","wsDefaultExtensions","mergeFromScope","errors","bitMapEntry","bitMap","getComponentIfExist","_legacy","bitMapExtensions","config","configMerge","getConflictParsed","toStringWithoutVersion","err","MergeConfigConflict","logger","error","toString","push","adjustEnvsOnConfigMerge","conf","env","EnvsAspect","id","split","unmergedData","getUnmergedData","unmergedDataMergeConf","mergedConfig","getMergeConfigCombined","undefined","mergeWith","objValue","srcValue","Array","isArray","concat","mergeConfigCombined","configMergeExtensions","ExtensionDataList","fromConfigObject","scopeExtensions","extensions","specific","nonSpecific","partition","entry","AspectSpecificField","scopeExtensionsNonSpecific","scopeExtensionsSpecific","componentConfigFile","aspects","toLegacy","relativeComponentDir","componentDir","ignoreVersion","relative","variantConfig","variants","byRootDirAndName","fullName","clone","extensionsToMerge","envWasFoundPreviously","removedExtensionIds","addExtensionsToMerge","origin","extraData","length","filter","extData","isRemoved","map","stringId","extsWithoutRemoved","filterRemovedExtensions","selfInMergedExtensions","findExtension","toStringWithoutScopeAndVersion","extsWithoutSelf","extensionId","remove","extensionDataListFiltered","envIsCurrentlySet","filterEnvsFromExtensionsIfNeeded","warnAboutMisconfiguredEnv","setDataListAsSpecific","forEach","dataEntry","includes","fromArray","extensionDataList","continuePropagating","propagate","appliedRules","sortedMatches","pattern","specificity","isDefaultExtension","Promise","all","list","resolveExtensionListIds","afterMerge","mergeConfigs","ext","loadExtensions","withoutRemoved","beforeMerge","scope","legacyScope","objects","unmergedComponents","getEntry","name","hasId","envAspect","envFromEnvsAspect","envs","getCoreEnvsIds","warnedAboutMisconfiguredEnvs","envId","resolveComponentId","get","isUsingEnvEnv","consoleWarning","data","nonEnvs","e","envAspectExt","find","ids","listIds","envAspectId","found","isEqualWithoutVersion","Boolean","originatedFrom","throwOnError","extensionsIdsP","extensionEntry","extensionsIds","loadedExtensions","extensionsToLoad","difference","loadAspects","extensionList","promises"],"sources":["aspects-merger.ts"],"sourcesContent":["import { Harmony } from '@teambit/harmony';\nimport { Component, ComponentID } from '@teambit/component';\nimport { UnmergedComponent } from '@teambit/legacy/dist/scope/lanes/unmerged-components';\nimport { EnvsAspect } from '@teambit/envs';\nimport { Consumer } from '@teambit/legacy/dist/consumer';\nimport { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { partition, mergeWith, difference } from 'lodash';\nimport { MergeConfigConflict } from './exceptions/merge-config-conflict';\nimport { AspectSpecificField, ExtensionsOrigin, Workspace } from './workspace';\nimport { MergeConflictFile } from './merge-conflict-file';\n\nexport class AspectsMerger {\n private consumer: Consumer;\n private warnedAboutMisconfiguredEnvs: string[] = []; // cache env-ids that have been errored about not having \"env\" type\n readonly mergeConflictFile: MergeConflictFile;\n constructor(private workspace: Workspace, private harmony: Harmony) {\n this.consumer = workspace.consumer;\n this.mergeConflictFile = new MergeConflictFile(workspace.path);\n }\n\n /**\n * Calculate the component config based on:\n * the config property in the .bitmap file\n * the component.json file in the component folder\n * matching pattern in the variants config\n * defaults extensions from workspace config\n * extensions from the model.\n */\n // eslint-disable-next-line complexity\n async merge(\n componentId: ComponentID,\n componentFromScope?: Component,\n excludeOrigins: ExtensionsOrigin[] = []\n ): Promise<{\n extensions: ExtensionDataList;\n beforeMerge: Array<{ extensions: ExtensionDataList; origin: ExtensionsOrigin; extraData: any }>; // useful for debugging\n errors?: Error[];\n }> {\n // TODO: consider caching this result\n let configFileExtensions: ExtensionDataList | undefined;\n let variantsExtensions: ExtensionDataList | undefined;\n let wsDefaultExtensions: ExtensionDataList | undefined;\n const mergeFromScope = true;\n const errors: Error[] = [];\n\n const bitMapEntry = this.consumer.bitMap.getComponentIfExist(componentId._legacy);\n const bitMapExtensions = bitMapEntry?.config;\n\n let configMerge: Record<string, any> | undefined;\n try {\n configMerge = await this.mergeConflictFile.getConflictParsed(componentId.toStringWithoutVersion());\n } catch (err) {\n if (!(err instanceof MergeConfigConflict)) {\n throw err;\n }\n this.workspace.logger.error(`unable to parse the config file for ${componentId.toString()} due to conflicts`);\n errors.push(err);\n }\n\n const adjustEnvsOnConfigMerge = (conf: Record<string, any>) => {\n const env = conf[EnvsAspect.id]?.env;\n if (!env) return;\n const [id] = env.split('@');\n conf[EnvsAspect.id] = { env: id };\n conf[env] = {};\n };\n const unmergedData = this.getUnmergedData(componentId);\n const unmergedDataMergeConf = unmergedData?.mergedConfig;\n const getMergeConfigCombined = () => {\n if (!configMerge && !unmergedDataMergeConf) return undefined;\n if (!configMerge) return unmergedDataMergeConf;\n if (!unmergedDataMergeConf) return configMerge;\n\n return mergeWith(configMerge, unmergedDataMergeConf, (objValue, srcValue) => {\n if (Array.isArray(objValue)) {\n // critical for dependencyResolver.policy.*dependencies. otherwise, it will override the array\n return objValue.concat(srcValue);\n }\n return undefined;\n });\n };\n const mergeConfigCombined = getMergeConfigCombined();\n adjustEnvsOnConfigMerge(mergeConfigCombined || {});\n const configMergeExtensions = mergeConfigCombined\n ? ExtensionDataList.fromConfigObject(mergeConfigCombined)\n : undefined;\n\n const scopeExtensions = componentFromScope?.config?.extensions || new ExtensionDataList();\n const [specific, nonSpecific] = partition(scopeExtensions, (entry) => entry.config[AspectSpecificField] === true);\n const scopeExtensionsNonSpecific = new ExtensionDataList(...nonSpecific);\n const scopeExtensionsSpecific = new ExtensionDataList(...specific);\n\n const componentConfigFile = await this.workspace.componentConfigFile(componentId);\n if (componentConfigFile) {\n configFileExtensions = componentConfigFile.aspects.toLegacy();\n }\n const relativeComponentDir = this.workspace.componentDir(componentId, { ignoreVersion: true }, { relative: true });\n const variantConfig = this.workspace.variants.byRootDirAndName(relativeComponentDir, componentId.fullName);\n if (variantConfig) {\n variantsExtensions = variantConfig.extensions.clone();\n // Do not merge from scope when there is specific variant (which is not *) that match the component\n // if (variantConfig.maxSpecificity > 0) {\n // mergeFromScope = false;\n // }\n }\n // We don't stop on each step because we want to merge the default scope even if propagate=false but the default scope is not defined\n // in the case the same extension pushed twice, the former takes precedence (opposite of Object.assign)\n const extensionsToMerge: Array<{ origin: ExtensionsOrigin; extensions: ExtensionDataList; extraData: any }> = [];\n let envWasFoundPreviously = false;\n const removedExtensionIds: string[] = [];\n\n const addExtensionsToMerge = async (extensions: ExtensionDataList, origin: ExtensionsOrigin, extraData?: any) => {\n if (!extensions.length) {\n return;\n }\n removedExtensionIds.push(...extensions.filter((extData) => extData.isRemoved).map((extData) => extData.stringId));\n const extsWithoutRemoved = extensions.filterRemovedExtensions();\n const selfInMergedExtensions = extsWithoutRemoved.findExtension(\n componentId._legacy.toStringWithoutScopeAndVersion(),\n true,\n true\n );\n const extsWithoutSelf = selfInMergedExtensions?.extensionId\n ? extsWithoutRemoved.remove(selfInMergedExtensions.extensionId)\n : extsWithoutRemoved;\n const { extensionDataListFiltered, envIsCurrentlySet } = await this.filterEnvsFromExtensionsIfNeeded(\n extsWithoutSelf,\n envWasFoundPreviously,\n origin\n );\n if (envIsCurrentlySet) {\n await this.warnAboutMisconfiguredEnv(componentId, extensions);\n envWasFoundPreviously = true;\n }\n\n extensionsToMerge.push({ origin, extensions: extensionDataListFiltered, extraData });\n };\n const setDataListAsSpecific = (extensions: ExtensionDataList) => {\n extensions.forEach((dataEntry) => (dataEntry.config[AspectSpecificField] = true));\n };\n if (configMergeExtensions && !excludeOrigins.includes('ConfigMerge')) {\n await addExtensionsToMerge(ExtensionDataList.fromArray(configMergeExtensions), 'ConfigMerge');\n }\n if (bitMapExtensions && !excludeOrigins.includes('BitmapFile')) {\n const extensionDataList = ExtensionDataList.fromConfigObject(bitMapExtensions);\n setDataListAsSpecific(extensionDataList);\n await addExtensionsToMerge(extensionDataList, 'BitmapFile');\n }\n if (configFileExtensions && !excludeOrigins.includes('ComponentJsonFile')) {\n setDataListAsSpecific(configFileExtensions);\n await addExtensionsToMerge(configFileExtensions, 'ComponentJsonFile');\n }\n if (!excludeOrigins.includes('ModelSpecific')) {\n await addExtensionsToMerge(ExtensionDataList.fromArray(scopeExtensionsSpecific), 'ModelSpecific');\n }\n let continuePropagating = componentConfigFile?.propagate ?? true;\n if (variantsExtensions && continuePropagating && !excludeOrigins.includes('WorkspaceVariants')) {\n const appliedRules = variantConfig?.sortedMatches.map(({ pattern, specificity }) => ({ pattern, specificity }));\n await addExtensionsToMerge(variantsExtensions, 'WorkspaceVariants', { appliedRules });\n }\n continuePropagating = continuePropagating && (variantConfig?.propagate ?? true);\n // Do not apply default extensions on the default extensions (it will create infinite loop when loading them)\n const isDefaultExtension = wsDefaultExtensions?.findExtension(componentId.toString(), true, true);\n if (\n wsDefaultExtensions &&\n continuePropagating &&\n !isDefaultExtension &&\n !excludeOrigins.includes('WorkspaceDefault')\n ) {\n await addExtensionsToMerge(wsDefaultExtensions, 'WorkspaceDefault');\n }\n if (mergeFromScope && continuePropagating && !excludeOrigins.includes('ModelNonSpecific')) {\n await addExtensionsToMerge(scopeExtensionsNonSpecific, 'ModelNonSpecific');\n }\n\n // It's important to do this resolution before the merge, otherwise we have issues with extensions\n // coming from scope with local scope name, as opposed to the same extension comes from the workspace with default scope name\n await Promise.all(extensionsToMerge.map((list) => this.resolveExtensionListIds(list.extensions)));\n const afterMerge = ExtensionDataList.mergeConfigs(extensionsToMerge.map((ext) => ext.extensions));\n await this.loadExtensions(afterMerge, componentId);\n const withoutRemoved = afterMerge.filter((extData) => !removedExtensionIds.includes(extData.stringId));\n const extensions = ExtensionDataList.fromArray(withoutRemoved);\n return {\n extensions,\n beforeMerge: extensionsToMerge,\n errors,\n };\n }\n\n private getUnmergedData(componentId: ComponentID): UnmergedComponent | undefined {\n return this.workspace.scope.legacyScope.objects.unmergedComponents.getEntry(componentId._legacy.name);\n }\n\n private async warnAboutMisconfiguredEnv(componentId: ComponentID, extensionDataList: ExtensionDataList) {\n if (!(await this.workspace.hasId(componentId))) {\n // if this is a dependency and not belong to the workspace, don't show the warning\n return;\n }\n const envAspect = extensionDataList.findExtension(EnvsAspect.id);\n const envFromEnvsAspect = envAspect?.config.env;\n if (!envFromEnvsAspect) return;\n if (this.workspace.envs.getCoreEnvsIds().includes(envFromEnvsAspect)) return;\n if (this.warnedAboutMisconfiguredEnvs.includes(envFromEnvsAspect)) return;\n let env: Component;\n try {\n const envId = await this.workspace.resolveComponentId(envFromEnvsAspect);\n env = await this.workspace.get(envId);\n } catch (err) {\n return; // unable to get the component for some reason. don't sweat it. forget about the warning\n }\n if (!this.workspace.envs.isUsingEnvEnv(env)) {\n this.warnedAboutMisconfiguredEnvs.push(envFromEnvsAspect);\n this.workspace.logger.consoleWarning(\n `env \"${envFromEnvsAspect}\" is not of type env. (correct the env's type, or component config with \"bit env set ${envFromEnvsAspect} teambit.envs/env\")`\n );\n }\n }\n\n private async filterEnvsFromExtensionsIfNeeded(\n extensionDataList: ExtensionDataList,\n envWasFoundPreviously: boolean,\n origin: ExtensionsOrigin\n ) {\n const envAspect = extensionDataList.findExtension(EnvsAspect.id);\n const envFromEnvsAspect: string | undefined = envAspect?.config.env || envAspect?.data.id;\n if (envWasFoundPreviously && envAspect) {\n const nonEnvs = extensionDataList.filter((e) => {\n // normally the env-id inside the envs aspect doesn't have a version, but the aspect itself has a version.\n if (e.stringId === envFromEnvsAspect || e.extensionId?.toStringWithoutVersion() === envFromEnvsAspect)\n return false;\n return true;\n });\n // still, aspect env may have other data other then config.env.\n delete envAspect.config.env;\n return { extensionDataListFiltered: new ExtensionDataList(...nonEnvs), envIsCurrentlySet: true };\n }\n if (envFromEnvsAspect && (origin === 'ModelNonSpecific' || origin === 'ModelSpecific')) {\n // if env was found, search for this env in the workspace and if found, replace the env-id with the one from the workspace\n const envAspectExt = extensionDataList.find((e) => e.extensionId?.toStringWithoutVersion() === envFromEnvsAspect);\n const ids = await this.workspace.listIds();\n const envAspectId = envAspectExt?.extensionId;\n const found = envAspectId && ids.find((id) => id._legacy.isEqualWithoutVersion(envAspectId));\n if (found) {\n envAspectExt.extensionId = found._legacy;\n }\n }\n return { extensionDataListFiltered: extensionDataList, envIsCurrentlySet: Boolean(envFromEnvsAspect) };\n }\n\n /**\n * Load all unloaded extensions from a list\n * @param extensions list of extensions with config to load\n */\n private async loadExtensions(\n extensions: ExtensionDataList,\n originatedFrom?: ComponentID,\n throwOnError = false\n ): Promise<void> {\n const extensionsIdsP = extensions.map(async (extensionEntry) => {\n // Core extension\n if (!extensionEntry.extensionId) {\n return extensionEntry.stringId as string;\n }\n\n const id = await this.workspace.resolveComponentId(extensionEntry.extensionId);\n // return this.resolveComponentId(extensionEntry.extensionId);\n return id.toString();\n });\n const extensionsIds: string[] = await Promise.all(extensionsIdsP);\n const loadedExtensions = this.harmony.extensionsIds;\n const extensionsToLoad = difference(extensionsIds, loadedExtensions);\n if (!extensionsToLoad.length) return;\n await this.workspace.loadAspects(extensionsToLoad, throwOnError, originatedFrom?.toString());\n }\n\n /**\n * This will mutate the entries with extensionId prop to have resolved legacy id\n * This should be worked on the extension data list not the new aspect list\n * @param extensionList\n */\n private async resolveExtensionListIds(extensionList: ExtensionDataList): Promise<ExtensionDataList> {\n const promises = extensionList.map(async (entry) => {\n if (entry.extensionId) {\n const id = await this.workspace.resolveComponentId(entry.extensionId);\n entry.extensionId = id._legacy;\n }\n\n return entry;\n });\n await Promise.all(promises);\n return extensionList;\n }\n}\n"],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ function _bitError() {
|
|
|
13
13
|
}
|
|
14
14
|
class MergeConfigConflict extends _bitError().BitError {
|
|
15
15
|
constructor(filePath) {
|
|
16
|
-
super(`unable to parse the merge-
|
|
16
|
+
super(`unable to parse the merge-conflict file ${filePath} as it has unresolved conflicts`);
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
exports.MergeConfigConflict = MergeConfigConflict;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MergeConfigConflict","BitError","constructor","filePath"],"sources":["merge-config-conflict.ts"],"sourcesContent":["import { BitError } from '@teambit/bit-error';\n\nexport class MergeConfigConflict extends BitError {\n constructor(filePath: string) {\n super(`unable to parse the merge-
|
|
1
|
+
{"version":3,"names":["MergeConfigConflict","BitError","constructor","filePath"],"sources":["merge-config-conflict.ts"],"sourcesContent":["import { BitError } from '@teambit/bit-error';\n\nexport class MergeConfigConflict extends BitError {\n constructor(filePath: string) {\n super(`unable to parse the merge-conflict file ${filePath} as it has unresolved conflicts`);\n }\n}\n"],"mappings":";;;;;;AAAA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEO,MAAMA,mBAAmB,SAASC,oBAAQ,CAAC;EAChDC,WAAW,CAACC,QAAgB,EAAE;IAC5B,KAAK,CAAE,2CAA0CA,QAAS,iCAAgC,CAAC;EAC7F;AACF;AAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
declare type ConflictPerId = {
|
|
2
|
+
[compIdWithoutVersion: string]: string;
|
|
3
|
+
};
|
|
4
|
+
export declare class MergeConflictFile {
|
|
5
|
+
private workspacePath;
|
|
6
|
+
conflictPerId: ConflictPerId | undefined;
|
|
7
|
+
constructor(workspacePath: string);
|
|
8
|
+
addConflict(id: string, conflict: string): void;
|
|
9
|
+
removeConflict(id: string): void;
|
|
10
|
+
getConflict(id: string): Promise<string | undefined>;
|
|
11
|
+
getConflictParsed(id: string): Promise<Record<string, any> | undefined>;
|
|
12
|
+
hasConflict(): boolean;
|
|
13
|
+
getPath(): string;
|
|
14
|
+
loadIfNeeded(): Promise<void>;
|
|
15
|
+
write(): Promise<void>;
|
|
16
|
+
delete(): Promise<void>;
|
|
17
|
+
private formatConflicts;
|
|
18
|
+
private stringHasConflictMarker;
|
|
19
|
+
private parseConflict;
|
|
20
|
+
private getFileContentIfExists;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
require("core-js/modules/es.array.iterator.js");
|
|
5
|
+
require("core-js/modules/es.promise.js");
|
|
6
|
+
require("core-js/modules/es.regexp.exec.js");
|
|
7
|
+
require("core-js/modules/es.string.trim.js");
|
|
8
|
+
Object.defineProperty(exports, "__esModule", {
|
|
9
|
+
value: true
|
|
10
|
+
});
|
|
11
|
+
exports.MergeConflictFile = void 0;
|
|
12
|
+
function _defineProperty2() {
|
|
13
|
+
const data = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
|
+
_defineProperty2 = function () {
|
|
15
|
+
return data;
|
|
16
|
+
};
|
|
17
|
+
return data;
|
|
18
|
+
}
|
|
19
|
+
function _constants() {
|
|
20
|
+
const data = require("@teambit/legacy/dist/constants");
|
|
21
|
+
_constants = function () {
|
|
22
|
+
return data;
|
|
23
|
+
};
|
|
24
|
+
return data;
|
|
25
|
+
}
|
|
26
|
+
function _path() {
|
|
27
|
+
const data = _interopRequireDefault(require("path"));
|
|
28
|
+
_path = function () {
|
|
29
|
+
return data;
|
|
30
|
+
};
|
|
31
|
+
return data;
|
|
32
|
+
}
|
|
33
|
+
function _fsExtra() {
|
|
34
|
+
const data = _interopRequireDefault(require("fs-extra"));
|
|
35
|
+
_fsExtra = function () {
|
|
36
|
+
return data;
|
|
37
|
+
};
|
|
38
|
+
return data;
|
|
39
|
+
}
|
|
40
|
+
function _mergeConfigConflict() {
|
|
41
|
+
const data = require("./exceptions/merge-config-conflict");
|
|
42
|
+
_mergeConfigConflict = function () {
|
|
43
|
+
return data;
|
|
44
|
+
};
|
|
45
|
+
return data;
|
|
46
|
+
}
|
|
47
|
+
const idPrefix = `[*]`;
|
|
48
|
+
const idDivider = '-'.repeat(80);
|
|
49
|
+
class MergeConflictFile {
|
|
50
|
+
constructor(workspacePath) {
|
|
51
|
+
this.workspacePath = workspacePath;
|
|
52
|
+
(0, _defineProperty2().default)(this, "conflictPerId", void 0);
|
|
53
|
+
}
|
|
54
|
+
addConflict(id, conflict) {
|
|
55
|
+
if (!this.conflictPerId) this.conflictPerId = {};
|
|
56
|
+
this.conflictPerId[id] = conflict;
|
|
57
|
+
}
|
|
58
|
+
removeConflict(id) {
|
|
59
|
+
var _this$conflictPerId;
|
|
60
|
+
(_this$conflictPerId = this.conflictPerId) === null || _this$conflictPerId === void 0 ? true : delete _this$conflictPerId[id];
|
|
61
|
+
}
|
|
62
|
+
async getConflict(id) {
|
|
63
|
+
await this.loadIfNeeded();
|
|
64
|
+
if (!this.conflictPerId) throw new Error(`this.conflictPerId must be instantiated after load`);
|
|
65
|
+
return this.conflictPerId[id];
|
|
66
|
+
}
|
|
67
|
+
async getConflictParsed(id) {
|
|
68
|
+
const configMergeContent = await this.getConflict(id);
|
|
69
|
+
if (!configMergeContent) return undefined;
|
|
70
|
+
try {
|
|
71
|
+
return JSON.parse(configMergeContent);
|
|
72
|
+
} catch (err) {
|
|
73
|
+
if (this.stringHasConflictMarker(configMergeContent)) {
|
|
74
|
+
throw new (_mergeConfigConflict().MergeConfigConflict)(this.getPath());
|
|
75
|
+
}
|
|
76
|
+
throw new Error(`unable to parse the merge-conflict entry for ${id} as the JSON is invalid. err: ${err.message}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
hasConflict() {
|
|
80
|
+
return Boolean(this.conflictPerId && Object.keys(this.conflictPerId).length);
|
|
81
|
+
}
|
|
82
|
+
getPath() {
|
|
83
|
+
return _path().default.join(this.workspacePath, _constants().MergeConfigFilename);
|
|
84
|
+
}
|
|
85
|
+
async loadIfNeeded() {
|
|
86
|
+
if (this.conflictPerId) return; // already loaded
|
|
87
|
+
const fileContent = await this.getFileContentIfExists();
|
|
88
|
+
if (!fileContent) {
|
|
89
|
+
this.conflictPerId = {}; // to indicate that it's loaded
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const parsedConflict = this.parseConflict(fileContent);
|
|
93
|
+
this.conflictPerId = parsedConflict;
|
|
94
|
+
}
|
|
95
|
+
async write() {
|
|
96
|
+
if (!this.hasConflict()) return;
|
|
97
|
+
const afterFormat = this.formatConflicts();
|
|
98
|
+
await _fsExtra().default.writeFile(this.getPath(), afterFormat);
|
|
99
|
+
}
|
|
100
|
+
async delete() {
|
|
101
|
+
await _fsExtra().default.remove(this.getPath());
|
|
102
|
+
}
|
|
103
|
+
formatConflicts() {
|
|
104
|
+
const conflictPerId = this.conflictPerId;
|
|
105
|
+
if (!conflictPerId) throw new Error('conflictPerId is not populated');
|
|
106
|
+
const title = `# Resolve configuration conflicts per component and make sure the Component ID remain in place`;
|
|
107
|
+
const conflicts = Object.keys(conflictPerId).map(id => {
|
|
108
|
+
const conflict = conflictPerId[id];
|
|
109
|
+
return `${idDivider}
|
|
110
|
+
${idPrefix} ${id}
|
|
111
|
+
${idDivider}
|
|
112
|
+
${conflict}`;
|
|
113
|
+
}).join('\n\n');
|
|
114
|
+
return `${title}\n\n${conflicts}`;
|
|
115
|
+
}
|
|
116
|
+
stringHasConflictMarker(str) {
|
|
117
|
+
return str.includes('<<<<<<<') || str.includes('>>>>>>>');
|
|
118
|
+
}
|
|
119
|
+
parseConflict(conflict) {
|
|
120
|
+
// remove irrelevant lines
|
|
121
|
+
conflict = conflict.split('\n').filter(line => line !== idDivider && !line.startsWith('#')).join('\n');
|
|
122
|
+
// split by id
|
|
123
|
+
const conflictPerId = {};
|
|
124
|
+
const split = conflict.split(idPrefix);
|
|
125
|
+
split.forEach(conflictItem => {
|
|
126
|
+
const conflictItemSplit = conflictItem.split('\n');
|
|
127
|
+
const [rawId, ...conflictStr] = conflictItemSplit;
|
|
128
|
+
const id = rawId.trim();
|
|
129
|
+
if (!id) return; // first line has it empty
|
|
130
|
+
conflictPerId[id] = conflictStr.join('\n');
|
|
131
|
+
});
|
|
132
|
+
return conflictPerId;
|
|
133
|
+
}
|
|
134
|
+
async getFileContentIfExists() {
|
|
135
|
+
const filePath = this.getPath();
|
|
136
|
+
let fileContent;
|
|
137
|
+
try {
|
|
138
|
+
fileContent = await _fsExtra().default.readFile(filePath, 'utf-8');
|
|
139
|
+
} catch (err) {
|
|
140
|
+
if (err.code === 'ENOENT') {
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
throw err;
|
|
144
|
+
}
|
|
145
|
+
return fileContent;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.MergeConflictFile = MergeConflictFile;
|
|
149
|
+
|
|
150
|
+
//# sourceMappingURL=merge-conflict-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["idPrefix","idDivider","repeat","MergeConflictFile","constructor","workspacePath","addConflict","id","conflict","conflictPerId","removeConflict","getConflict","loadIfNeeded","Error","getConflictParsed","configMergeContent","undefined","JSON","parse","err","stringHasConflictMarker","MergeConfigConflict","getPath","message","hasConflict","Boolean","Object","keys","length","path","join","MergeConfigFilename","fileContent","getFileContentIfExists","parsedConflict","parseConflict","write","afterFormat","formatConflicts","fs","writeFile","delete","remove","title","conflicts","map","str","includes","split","filter","line","startsWith","forEach","conflictItem","conflictItemSplit","rawId","conflictStr","trim","filePath","readFile","code"],"sources":["merge-conflict-file.ts"],"sourcesContent":["import { MergeConfigFilename } from '@teambit/legacy/dist/constants';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { MergeConfigConflict } from './exceptions/merge-config-conflict';\n\nconst idPrefix = `[*]`;\nconst idDivider = '-'.repeat(80);\ntype ConflictPerId = { [compIdWithoutVersion: string]: string };\n\nexport class MergeConflictFile {\n conflictPerId: ConflictPerId | undefined;\n constructor(private workspacePath: string) {}\n\n addConflict(id: string, conflict: string) {\n if (!this.conflictPerId) this.conflictPerId = {};\n this.conflictPerId[id] = conflict;\n }\n\n removeConflict(id: string) {\n delete this.conflictPerId?.[id];\n }\n\n async getConflict(id: string): Promise<string | undefined> {\n await this.loadIfNeeded();\n if (!this.conflictPerId) throw new Error(`this.conflictPerId must be instantiated after load`);\n return this.conflictPerId[id];\n }\n\n async getConflictParsed(id: string): Promise<Record<string, any> | undefined> {\n const configMergeContent = await this.getConflict(id);\n if (!configMergeContent) return undefined;\n try {\n return JSON.parse(configMergeContent);\n } catch (err: any) {\n if (this.stringHasConflictMarker(configMergeContent)) {\n throw new MergeConfigConflict(this.getPath());\n }\n throw new Error(`unable to parse the merge-conflict entry for ${id} as the JSON is invalid. err: ${err.message}`);\n }\n }\n\n hasConflict(): boolean {\n return Boolean(this.conflictPerId && Object.keys(this.conflictPerId).length);\n }\n\n getPath() {\n return path.join(this.workspacePath, MergeConfigFilename);\n }\n\n async loadIfNeeded() {\n if (this.conflictPerId) return; // already loaded\n const fileContent = await this.getFileContentIfExists();\n if (!fileContent) {\n this.conflictPerId = {}; // to indicate that it's loaded\n return;\n }\n const parsedConflict = this.parseConflict(fileContent);\n this.conflictPerId = parsedConflict;\n }\n\n async write() {\n if (!this.hasConflict()) return;\n const afterFormat = this.formatConflicts();\n await fs.writeFile(this.getPath(), afterFormat);\n }\n\n async delete() {\n await fs.remove(this.getPath());\n }\n\n private formatConflicts(): string {\n const conflictPerId = this.conflictPerId;\n if (!conflictPerId) throw new Error('conflictPerId is not populated');\n const title = `# Resolve configuration conflicts per component and make sure the Component ID remain in place`;\n const conflicts = Object.keys(conflictPerId)\n .map((id) => {\n const conflict = conflictPerId[id];\n return `${idDivider}\n${idPrefix} ${id}\n${idDivider}\n${conflict}`;\n })\n .join('\\n\\n');\n return `${title}\\n\\n${conflicts}`;\n }\n\n private stringHasConflictMarker(str: string): boolean {\n return str.includes('<<<<<<<') || str.includes('>>>>>>>');\n }\n\n private parseConflict(conflict: string): ConflictPerId {\n // remove irrelevant lines\n conflict = conflict\n .split('\\n')\n .filter((line) => line !== idDivider && !line.startsWith('#'))\n .join('\\n');\n // split by id\n const conflictPerId: ConflictPerId = {};\n const split = conflict.split(idPrefix);\n split.forEach((conflictItem) => {\n const conflictItemSplit = conflictItem.split('\\n');\n const [rawId, ...conflictStr] = conflictItemSplit;\n const id = rawId.trim();\n if (!id) return; // first line has it empty\n conflictPerId[id] = conflictStr.join('\\n');\n });\n return conflictPerId;\n }\n\n private async getFileContentIfExists(): Promise<string | undefined> {\n const filePath = this.getPath();\n let fileContent: string;\n try {\n fileContent = await fs.readFile(filePath, 'utf-8');\n } catch (err: any) {\n if (err.code === 'ENOENT') {\n return undefined;\n }\n throw err;\n }\n return fileContent;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA,MAAMA,QAAQ,GAAI,KAAI;AACtB,MAAMC,SAAS,GAAG,GAAG,CAACC,MAAM,CAAC,EAAE,CAAC;AAGzB,MAAMC,iBAAiB,CAAC;EAE7BC,WAAW,CAASC,aAAqB,EAAE;IAAA,KAAvBA,aAAqB,GAArBA,aAAqB;IAAA;EAAG;EAE5CC,WAAW,CAACC,EAAU,EAAEC,QAAgB,EAAE;IACxC,IAAI,CAAC,IAAI,CAACC,aAAa,EAAE,IAAI,CAACA,aAAa,GAAG,CAAC,CAAC;IAChD,IAAI,CAACA,aAAa,CAACF,EAAE,CAAC,GAAGC,QAAQ;EACnC;EAEAE,cAAc,CAACH,EAAU,EAAE;IAAA;IACzB,uBAAO,IAAI,CAACE,aAAa,sDAAzB,OAAO,oBAAqBF,EAAE,CAAC;EACjC;EAEA,MAAMI,WAAW,CAACJ,EAAU,EAA+B;IACzD,MAAM,IAAI,CAACK,YAAY,EAAE;IACzB,IAAI,CAAC,IAAI,CAACH,aAAa,EAAE,MAAM,IAAII,KAAK,CAAE,oDAAmD,CAAC;IAC9F,OAAO,IAAI,CAACJ,aAAa,CAACF,EAAE,CAAC;EAC/B;EAEA,MAAMO,iBAAiB,CAACP,EAAU,EAA4C;IAC5E,MAAMQ,kBAAkB,GAAG,MAAM,IAAI,CAACJ,WAAW,CAACJ,EAAE,CAAC;IACrD,IAAI,CAACQ,kBAAkB,EAAE,OAAOC,SAAS;IACzC,IAAI;MACF,OAAOC,IAAI,CAACC,KAAK,CAACH,kBAAkB,CAAC;IACvC,CAAC,CAAC,OAAOI,GAAQ,EAAE;MACjB,IAAI,IAAI,CAACC,uBAAuB,CAACL,kBAAkB,CAAC,EAAE;QACpD,MAAM,KAAIM,0CAAmB,EAAC,IAAI,CAACC,OAAO,EAAE,CAAC;MAC/C;MACA,MAAM,IAAIT,KAAK,CAAE,gDAA+CN,EAAG,iCAAgCY,GAAG,CAACI,OAAQ,EAAC,CAAC;IACnH;EACF;EAEAC,WAAW,GAAY;IACrB,OAAOC,OAAO,CAAC,IAAI,CAAChB,aAAa,IAAIiB,MAAM,CAACC,IAAI,CAAC,IAAI,CAAClB,aAAa,CAAC,CAACmB,MAAM,CAAC;EAC9E;EAEAN,OAAO,GAAG;IACR,OAAOO,eAAI,CAACC,IAAI,CAAC,IAAI,CAACzB,aAAa,EAAE0B,gCAAmB,CAAC;EAC3D;EAEA,MAAMnB,YAAY,GAAG;IACnB,IAAI,IAAI,CAACH,aAAa,EAAE,OAAO,CAAC;IAChC,MAAMuB,WAAW,GAAG,MAAM,IAAI,CAACC,sBAAsB,EAAE;IACvD,IAAI,CAACD,WAAW,EAAE;MAChB,IAAI,CAACvB,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;MACzB;IACF;IACA,MAAMyB,cAAc,GAAG,IAAI,CAACC,aAAa,CAACH,WAAW,CAAC;IACtD,IAAI,CAACvB,aAAa,GAAGyB,cAAc;EACrC;EAEA,MAAME,KAAK,GAAG;IACZ,IAAI,CAAC,IAAI,CAACZ,WAAW,EAAE,EAAE;IACzB,MAAMa,WAAW,GAAG,IAAI,CAACC,eAAe,EAAE;IAC1C,MAAMC,kBAAE,CAACC,SAAS,CAAC,IAAI,CAAClB,OAAO,EAAE,EAAEe,WAAW,CAAC;EACjD;EAEA,MAAMI,MAAM,GAAG;IACb,MAAMF,kBAAE,CAACG,MAAM,CAAC,IAAI,CAACpB,OAAO,EAAE,CAAC;EACjC;EAEQgB,eAAe,GAAW;IAChC,MAAM7B,aAAa,GAAG,IAAI,CAACA,aAAa;IACxC,IAAI,CAACA,aAAa,EAAE,MAAM,IAAII,KAAK,CAAC,gCAAgC,CAAC;IACrE,MAAM8B,KAAK,GAAI,gGAA+F;IAC9G,MAAMC,SAAS,GAAGlB,MAAM,CAACC,IAAI,CAAClB,aAAa,CAAC,CACzCoC,GAAG,CAAEtC,EAAE,IAAK;MACX,MAAMC,QAAQ,GAAGC,aAAa,CAACF,EAAE,CAAC;MAClC,OAAQ,GAAEN,SAAU;AAC5B,EAAED,QAAS,IAAGO,EAAG;AACjB,EAAEN,SAAU;AACZ,EAAEO,QAAS,EAAC;IACN,CAAC,CAAC,CACDsB,IAAI,CAAC,MAAM,CAAC;IACf,OAAQ,GAAEa,KAAM,OAAMC,SAAU,EAAC;EACnC;EAEQxB,uBAAuB,CAAC0B,GAAW,EAAW;IACpD,OAAOA,GAAG,CAACC,QAAQ,CAAC,SAAS,CAAC,IAAID,GAAG,CAACC,QAAQ,CAAC,SAAS,CAAC;EAC3D;EAEQZ,aAAa,CAAC3B,QAAgB,EAAiB;IACrD;IACAA,QAAQ,GAAGA,QAAQ,CAChBwC,KAAK,CAAC,IAAI,CAAC,CACXC,MAAM,CAAEC,IAAI,IAAKA,IAAI,KAAKjD,SAAS,IAAI,CAACiD,IAAI,CAACC,UAAU,CAAC,GAAG,CAAC,CAAC,CAC7DrB,IAAI,CAAC,IAAI,CAAC;IACb;IACA,MAAMrB,aAA4B,GAAG,CAAC,CAAC;IACvC,MAAMuC,KAAK,GAAGxC,QAAQ,CAACwC,KAAK,CAAChD,QAAQ,CAAC;IACtCgD,KAAK,CAACI,OAAO,CAAEC,YAAY,IAAK;MAC9B,MAAMC,iBAAiB,GAAGD,YAAY,CAACL,KAAK,CAAC,IAAI,CAAC;MAClD,MAAM,CAACO,KAAK,EAAE,GAAGC,WAAW,CAAC,GAAGF,iBAAiB;MACjD,MAAM/C,EAAE,GAAGgD,KAAK,CAACE,IAAI,EAAE;MACvB,IAAI,CAAClD,EAAE,EAAE,OAAO,CAAC;MACjBE,aAAa,CAACF,EAAE,CAAC,GAAGiD,WAAW,CAAC1B,IAAI,CAAC,IAAI,CAAC;IAC5C,CAAC,CAAC;IACF,OAAOrB,aAAa;EACtB;EAEA,MAAcwB,sBAAsB,GAAgC;IAClE,MAAMyB,QAAQ,GAAG,IAAI,CAACpC,OAAO,EAAE;IAC/B,IAAIU,WAAmB;IACvB,IAAI;MACFA,WAAW,GAAG,MAAMO,kBAAE,CAACoB,QAAQ,CAACD,QAAQ,EAAE,OAAO,CAAC;IACpD,CAAC,CAAC,OAAOvC,GAAQ,EAAE;MACjB,IAAIA,GAAG,CAACyC,IAAI,KAAK,QAAQ,EAAE;QACzB,OAAO5C,SAAS;MAClB;MACA,MAAMG,GAAG;IACX;IACA,OAAOa,WAAW;EACpB;AACF;AAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.workspace_workspace@0.0.
|
|
2
|
-
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.workspace_workspace@0.0.
|
|
1
|
+
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.workspace_workspace@0.0.959/dist/workspace.composition.js';
|
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.workspace_workspace@0.0.959/dist/workspace.docs.mdx';
|
|
3
3
|
|
|
4
4
|
export const compositions = [compositions_0];
|
|
5
5
|
export const overview = [overview_0];
|
package/dist/workspace.d.ts
CHANGED
|
@@ -35,6 +35,7 @@ import { OnComponentAddSlot, OnComponentChangeSlot, OnComponentLoadSlot, OnCompo
|
|
|
35
35
|
import { WorkspaceComponentLoader } from './workspace-component/workspace-component-loader';
|
|
36
36
|
import { ShouldLoadFunc } from './build-graph-from-fs';
|
|
37
37
|
import { BitMap } from './bit-map';
|
|
38
|
+
import { MergeConflictFile } from './merge-conflict-file';
|
|
38
39
|
export declare type EjectConfResult = {
|
|
39
40
|
configPath: string;
|
|
40
41
|
};
|
|
@@ -372,7 +373,8 @@ export declare class Workspace implements ComponentFactory {
|
|
|
372
373
|
}>;
|
|
373
374
|
errors?: Error[];
|
|
374
375
|
}>;
|
|
375
|
-
getConfigMergeFilePath(
|
|
376
|
+
getConfigMergeFilePath(): string;
|
|
377
|
+
getConflictMergeFile(): MergeConflictFile;
|
|
376
378
|
listComponentsDuringMerge(): Promise<ComponentID[]>;
|
|
377
379
|
getUnmergedComponent(componentId: ComponentID): Promise<Component | undefined>;
|
|
378
380
|
isModified(component: Component): Promise<boolean>;
|
package/dist/workspace.js
CHANGED
|
@@ -1219,11 +1219,11 @@ the following envs are used in this workspace: ${availableEnvs.join(', ')}`);
|
|
|
1219
1219
|
async componentExtensions(componentId, componentFromScope, excludeOrigins = []) {
|
|
1220
1220
|
return this.aspectsMerger.merge(componentId, componentFromScope, excludeOrigins);
|
|
1221
1221
|
}
|
|
1222
|
-
getConfigMergeFilePath(
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
return
|
|
1222
|
+
getConfigMergeFilePath() {
|
|
1223
|
+
return _path2().default.join(this.path, _constants().MergeConfigFilename);
|
|
1224
|
+
}
|
|
1225
|
+
getConflictMergeFile() {
|
|
1226
|
+
return this.aspectsMerger.mergeConflictFile;
|
|
1227
1227
|
}
|
|
1228
1228
|
async listComponentsDuringMerge() {
|
|
1229
1229
|
const unmergedComps = this.scope.legacyScope.objects.unmergedComponents.getComponents();
|