UNPKG

@deploystack/docker-to-iac

Version:

Translate docker run and docker compose file to Infrastructure as Code

55 lines (54 loc) 1.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseDockerImage = void 0; // file: utils/parseDockerImage.ts const base_parser_1 = require("../parsers/base-parser"); const parseDockerImage = (imageString) => { if (typeof imageString !== 'string') { throw new Error('Docker image must be a string'); } if (!imageString.trim()) { throw new Error('Docker image string cannot be empty'); } // Remove any whitespace const cleanImageString = imageString.trim(); let registry_type = base_parser_1.RegistryType.DOCKER_HUB; let registry; let repository; let tag = 'latest'; let digest; // Split the image string into parts const parts = cleanImageString.split('/'); // Check if image has a registry if (cleanImageString.includes('ghcr.io')) { registry_type = base_parser_1.RegistryType.GHCR; registry = parts[0]; parts.shift(); // Remove the registry part } else if (parts.length > 1 && (parts[0].includes('.') || parts[0].includes(':'))) { registry = parts[0]; parts.shift(); // Remove the registry part } // Join remaining parts to get repository repository = parts.join('/'); // Handle digest or tag if (repository.includes('@sha256:')) { const [repoName, digestValue] = repository.split('@sha256:'); repository = repoName; digest = `sha256:${digestValue}`; tag = undefined; } else if (repository.includes(':')) { const [repoName, tagValue] = repository.split(':'); repository = repoName; tag = tagValue; } return { registry_type, ...(registry && { registry }), repository, ...(tag && { tag }), ...(digest && { digest }) }; }; exports.parseDockerImage = parseDockerImage;