UNPKG

lakutata

Version:

An IoC-based universal application framework.

340 lines (237 loc) 10.7 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const e = require("../../../../vendor/Package.1.cjs"); const r = require("../../../lib/core/Provider.cjs"); const t = require("../../../decorators/di/Lifetime.cjs"); const i = require("../../../decorators/di/Configurable.cjs"); const o = require("../../../../vendor/Package.2.cjs"); const s = require("../../../lib/core/Time.cjs"); const a = require("../options/image/ImageTagOptions.cjs"); const n = require("../../../decorators/dto/Accept.cjs"); const c = require("../options/image/ImageExportOptions.cjs"); const u = require("node:fs"); const p = require("stream/promises"); const l = require("../exceptions/DockerImageRepoTagNotFoundException.cjs"); const g = require("../options/image/ImageRemoveOptions.cjs"); const d = require("../options/image/ImagePushOptions.cjs"); const m = require("../exceptions/DockerImagePushException.cjs"); const j = require("node:readline"); const q = require("../../../lib/helpers/IsAbortError.cjs"); const b = require("./ParseRepositoryTag.cjs"); const h = require("../../../lib/helpers/As.cjs"); const y = require("./ParseEnvToRecord.cjs"); const I = require("../options/container/ContainerSettingOptions.cjs"); require("../../../../vendor/Package.3.cjs"); require("../../../lib/base/async-constructor/AsyncConstructor.cjs"); require("../../../lib/base/async-constructor/Append.cjs"); require("../../../lib/helpers/IsPromiseLike.cjs"); require("../../../lib/helpers/IsPromise.cjs"); require("util/types"); require("../../../exceptions/MethodNotFoundException.cjs"); require("../../../lib/base/abstracts/Exception.cjs"); require("../../../lib/base/internal/BasicInfo.cjs"); require("../../../../vendor/Package.6.cjs"); require("../../../../vendor/Package.5.cjs"); require("../../../../vendor/Package.7.cjs"); require("../../../lib/base/internal/ThrowWarning.cjs"); require("../../../lib/helpers/Templating.cjs"); require("../../../lib/base/internal/CamelCase.cjs"); require("../../../lib/helpers/NoCase.cjs"); require("../../../lib/ioc/DependencyInjectionContainer.cjs"); require("util"); require("../../../lib/ioc/Errors.cjs"); require("../../../exceptions/di/DependencyInjectionException.cjs"); require("../../../lib/base/internal/ConstructorSymbol.cjs"); require("../../../constants/DIMetadataKey.cjs"); require("../../../../vendor/Package.4.cjs"); require("node:crypto"); require("../../../lib/base/internal/DataValidator.cjs"); require("node:util/types"); require("../../../lib/validation/VLD.cjs"); require("../../../../vendor/Package.11.cjs"); require("url"); require("../../../../vendor/Package.10.cjs"); require("../../../exceptions/dto/InvalidValueException.cjs"); require("../../../../vendor/Package.9.cjs"); require("../../../lib/helpers/IsHtml.cjs"); require("../../../lib/helpers/IsXML.cjs"); require("../../../constants/DTOMetadataKey.cjs"); require("../../../lib/helpers/ObjectConstructor.cjs"); require("../../../lib/helpers/ObjectParentConstructors.cjs"); require("../../../lib/helpers/ObjectParentConstructor.cjs"); require("../../../lib/helpers/ObjectPrototype.cjs"); require("../../../lib/ioc/InjectionMode.cjs"); require("../../../lib/ioc/Lifetime.cjs"); require("../../../lib/ioc/ListModules.cjs"); require("../../../../vendor/Package.8.cjs"); require("os"); require("path"); require("stream"); require("events"); require("fs"); require("../../../lib/ioc/Utils.cjs"); require("../../../lib/ioc/FunctionTokenizer.cjs"); require("../../../lib/ioc/LoadModules.cjs"); require("../../../lib/ioc/Resolvers.cjs"); require("../../../lib/ioc/ParamParser.cjs"); require("../../../lib/base/internal/ObjectLifetime.cjs"); require("../../../exceptions/di/LifetimeLockedException.cjs"); require("../../../lib/base/internal/ObjectWeakRefs.cjs"); require("../../../lib/base/internal/ConfigurableRecordsInjection.cjs"); require("../../../lib/base/internal/ObjectConfiguration.cjs"); require("../../../lib/base/internal/ObjectInjection.cjs"); require("../../../lib/base/internal/ObjectContainer.cjs"); require("../../../lib/helpers/DevNull.cjs"); require("../../../decorators/dto/Expect.cjs"); require("../../../decorators/dto/IndexSignature.cjs"); require("../../../lib/helpers/IsEmptyObject.cjs"); require("../../../lib/base/internal/MethodValidation.cjs"); require("../../../exceptions/dto/InvalidMethodAcceptException.cjs"); require("../../../exceptions/dto/InvalidMethodReturnException.cjs"); require("node:stream"); require("../options/auth/DockerAuthOptions.cjs"); require("../types/ContainerCapability.cjs"); exports.DockerImage = class DockerImage extends r.Provider { #e=new AbortController; get #r() { return this.getDockerode().getImage(this.id); } async init() { await this.syncImageInfo(); } async destroy() { this.#e.abort(); } async syncImageInfo() { const e = await this.#r.inspect(); this.repoTags = e.RepoTags; this.createdAt = new s.Time(e.Created); this.arch = e.Architecture; this.os = e.Os; this.platform = `${this.os}/${this.arch}`; this.size = e.Size; const r = []; const t = new Map; if (e.Config.ExposedPorts) { Object.keys(e.Config.ExposedPorts).forEach((e => { const r = e.split("/"); const i = parseInt(r[0]); const o = h.As(r[1].toLowerCase()); if (!t.has(i)) t.set(i, { tcp: false, udp: false }); const s = t.get(i); s[o] = true; t.set(i, s); })); t.forEach(((e, t) => r.push({ port: t, ...e }))); } this.config = { hostname: e.Config.Hostname, user: e.Config.User, env: y.ParseEnvToRecord(e.Config.Env), cmd: e.Config.Cmd, entrypoint: e.Config.Entrypoint ? Array.isArray(e.Config.Entrypoint) ? e.Config.Entrypoint : [ e.Config.Entrypoint ] : [], volumes: e.Config.Volumes ? Object.keys(e.Config.Volumes) : [], ports: r }; } async tag(e) { try { await this.#r.tag({ ...e, abortSignal: this.#e.signal }); await this.syncImageInfo(); } catch (e) { if (!q.IsAbortError(e)) throw e; } } async export(e) { try { let r; if (e.repoTag) { if (!this.repoTags.includes(e.repoTag)) { if (!e.createRepoTagIfNotExists) throw new l.DockerImageRepoTagNotFoundException("The current image does not contain the RepoTag of {0}", [ e.repoTag ]); const {repo: r, tag: t} = b.ParseRepositoryTag(e.repoTag); await this.tag({ repo: r, tag: t }); } r = this.getDockerode().getImage(e.repoTag); } else { r = this.#r; } const t = await r.get(); const i = typeof e.destination === "string" ? u.createWriteStream(e.destination, { signal: this.#e.signal }) : e.destination; await p.pipeline(t, i); } catch (e) { if (!q.IsAbortError(e)) throw e; } } async push(e) { const r = e.tag ? e.tag : "latest"; const t = `${e.repo}:${r}`; await this.tag({ repo: e.repo, tag: r }); await this.syncImageInfo(); const i = await this.getDockerode().getImage(t).push({ authconfig: e.auth ? { username: e.auth.username, password: e.auth.password, serveraddress: e.auth.serverAddress, email: e.auth.email } : undefined }); return new Promise(((r, t) => { let o; j.createInterface({ input: i }).on("line", (r => { const t = JSON.parse(r); if (t.error) o = new m.DockerImagePushException(t.error); if (e.outputCallback) e.outputCallback(t); })).once("close", (() => { if (o) return t(o); return r(); })); })); } async remove(e) { try { await this.#r.remove({ ...e, abortSignal: this.#e.signal }); } catch (e) { if (!q.IsAbortError(e)) throw e; } } async run(e) { const r = await this.getDocker().createContainer(this.id, this.platform, e); await r.start(); return r; } }; e.__decorate([ i.Configurable(o.DTO.Function()), e.__metadata("design:type", Function) ], exports.DockerImage.prototype, "getDockerode", void 0); e.__decorate([ i.Configurable(o.DTO.Function()), e.__metadata("design:type", Function) ], exports.DockerImage.prototype, "getDocker", void 0); e.__decorate([ i.Configurable(o.DTO.String()), e.__metadata("design:type", String) ], exports.DockerImage.prototype, "id", void 0); e.__decorate([ n.Accept(a.ImageTagOptions.required()), e.__metadata("design:type", Function), e.__metadata("design:paramtypes", [ a.ImageTagOptions ]), e.__metadata("design:returntype", Promise) ], exports.DockerImage.prototype, "tag", null); e.__decorate([ n.Accept(c.ImageExportOptions.required()), e.__metadata("design:type", Function), e.__metadata("design:paramtypes", [ c.ImageExportOptions ]), e.__metadata("design:returntype", Promise) ], exports.DockerImage.prototype, "export", null); e.__decorate([ n.Accept(d.ImagePushOptions.required()), e.__metadata("design:type", Function), e.__metadata("design:paramtypes", [ d.ImagePushOptions ]), e.__metadata("design:returntype", Promise) ], exports.DockerImage.prototype, "push", null); e.__decorate([ n.Accept(g.ImageRemoveOptions.optional().default({ force: true })), e.__metadata("design:type", Function), e.__metadata("design:paramtypes", [ g.ImageRemoveOptions ]), e.__metadata("design:returntype", Promise) ], exports.DockerImage.prototype, "remove", null); e.__decorate([ n.Accept(I.ContainerSettingOptions.required()), e.__metadata("design:type", Function), e.__metadata("design:paramtypes", [ I.ContainerSettingOptions ]), e.__metadata("design:returntype", Promise) ], exports.DockerImage.prototype, "run", null); exports.DockerImage = e.__decorate([ t.Transient() ], exports.DockerImage);