UNPKG

@wocker/ws

Version:

Docker workspace for web projects

81 lines (80 loc) 2.91 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ImageService = void 0; const core_1 = require("@wocker/core"); const ModemService_1 = require("./ModemService"); let ImageService = class ImageService { constructor(modemService) { this.modemService = modemService; } get docker() { return this.modemService.docker; } async build(params) { const { version, tag, context, labels, buildArgs } = params; const dockerfile = "dockerfile" in params ? params.dockerfile : params.src; const files = (new core_1.FileSystem(context)).readdir("", { recursive: true }); const stream = await this.docker.buildImage({ context, src: files }, { version, t: tag, labels, buildargs: Object.keys(buildArgs || {}).reduce((res, key) => { const value = buildArgs[key]; if (typeof value !== "undefined") { res[key] = typeof value !== "string" ? value.toString() : value; } return res; }, {}), rm: true, dockerfile }); await this.modemService.followProgress(stream); } async exists(tag) { const image = this.docker.getImage(tag); try { await image.inspect(); return true; } catch (err) { return false; } } async pull(tag) { if (await this.exists(tag)) { return; } const stream = await this.docker.pull(tag); await this.modemService.followProgress(stream); } async rm(tag, force = false) { if (!await this.exists(tag)) { return; } const image = this.docker.getImage(tag); await image.remove({ force }); } }; exports.ImageService = ImageService; exports.ImageService = ImageService = __decorate([ (0, core_1.Injectable)(), __metadata("design:paramtypes", [ModemService_1.ModemService]) ], ImageService);