compose-as-code
Version:
Provides a module to express docker compose files as code
71 lines (70 loc) • 3.36 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.listContainers = exports.compile = void 0;
const compilerUtils_1 = require("./compilerUtils");
const serviceCompiler_1 = require("./serviceCompiler");
const networkCompiler_1 = require("./networkCompiler");
const volumeCompiler_1 = require("./volumeCompiler");
const compileCompositionMetaData = (composition) => {
const baseIndentation = 0;
let result = '';
result += (0, compilerUtils_1.compileKeyValuePair)('name', composition.name.toLowerCase(), baseIndentation);
return result;
};
const compile = (compilerProps) => __awaiter(void 0, void 0, void 0, function* () {
const app = globalThis.cacStore.app;
if (!app) {
console.error('No app was defined. Without an app there is no composition possible.');
return Promise.reject();
}
console.log(`Found ${app.compositions.length} compositions`);
const resultingFiles = [];
for (const composition of app.compositions) {
let resultFileContent = '';
resultFileContent += compileCompositionMetaData(composition);
if (composition.services && composition.services.length > 0) {
resultFileContent += (0, serviceCompiler_1.compileServices)(composition);
}
if (composition.networks && composition.networks.length > 0) {
resultFileContent += (0, networkCompiler_1.compileNetworks)(composition);
}
if (composition.volumes && composition.volumes.length > 0) {
resultFileContent += (0, volumeCompiler_1.compileVolumes)(composition);
}
resultingFiles.push({
fileName: composition.id,
outputDir: compilerProps.outputDir,
content: resultFileContent,
});
}
resultingFiles.forEach(file => (0, compilerUtils_1.writeFile)(file));
globalThis.cacStore.app = undefined;
return Promise.resolve(resultingFiles);
});
exports.compile = compile;
const listContainers = () => __awaiter(void 0, void 0, void 0, function* () {
const app = globalThis.cacStore.app;
if (!app) {
console.error('No app was defined. Without an app there is no composition possible.');
return Promise.reject();
}
console.log(`Found ${app.compositions.length} compositions`);
const containerNames = [];
for (const composition of app.compositions) {
containerNames.push({
composition,
containerNames: composition.services.map(service => service.containerName || `${composition.name}-${service.id}-1`),
});
}
return Promise.resolve(containerNames);
});
exports.listContainers = listContainers;