lakutata
Version:
An IoC-based universal application framework.
340 lines (237 loc) • 10.7 kB
JavaScript
;
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);