@deploystack/docker-to-iac
Version:
Translate docker run and docker compose file to Infrastructure as Code
55 lines (54 loc) • 1.86 kB
JavaScript
;
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;