91 lines · 2.4 KB · TypeScript
RawDownload
import _ from "lodash";import type {	ComposeSpecification,	DefinitionsService,	DefinitionsVolume,} from "../types"; // Función para agregar prefijo a volúmenesexport const addSuffixToVolumesRoot = (	volumes: { [key: string]: DefinitionsVolume },	suffix: string,): { [key: string]: DefinitionsVolume } => {	return _.mapKeys(volumes, (_value, key) => `${key}-${suffix}`);}; export const addSuffixToVolumesInServices = (	services: { [key: string]: DefinitionsService },	suffix: string,): { [key: string]: DefinitionsService } => {	const newServices: { [key: string]: DefinitionsService } = {}; 	_.forEach(services, (serviceConfig, serviceName) => {		const newServiceConfig = _.cloneDeep(serviceConfig); 		// Reemplazar nombres de volúmenes en volumes		if (_.has(newServiceConfig, "volumes")) {			newServiceConfig.volumes = _.map(newServiceConfig.volumes, (volume) => {				if (_.isString(volume)) {					// remainder is the container path plus optional access mode (:ro, :z, :Z)					const [volumeName, ...pathAndMode] = volume.split(":");					const remainder = pathAndMode.join(":"); 					// skip bind mounts and variables (e.g. $PWD)					if (						!volumeName ||						!remainder ||						volumeName.startsWith(".") ||						volumeName.startsWith("/") ||						volumeName.startsWith("$")					) {						return volume;					} 					// Handle volume paths with subdirectories					const parts = volumeName.split("/");					if (parts.length > 1) {						const baseName = parts[0];						const rest = parts.slice(1).join("/");						return `${baseName}-${suffix}/${rest}:${remainder}`;					} 					return `${volumeName}-${suffix}:${remainder}`;				}				if (_.isObject(volume) && volume.type === "volume" && volume.source) {					return {						...volume,						source: `${volume.source}-${suffix}`,					};				}				return volume;			});		} 		newServices[serviceName] = newServiceConfig;	}); 	return newServices;}; export const addSuffixToAllVolumes = (	composeData: ComposeSpecification,	suffix: string,): ComposeSpecification => {	const updatedComposeData = { ...composeData }; 	if (updatedComposeData.volumes) {		updatedComposeData.volumes = addSuffixToVolumesRoot(			updatedComposeData.volumes,			suffix,		);	} 	if (updatedComposeData.services) {		updatedComposeData.services = addSuffixToVolumesInServices(			updatedComposeData.services,			suffix,		);	} 	return updatedComposeData;};