@decohere/forge 0.0.1-dev.19 → 0.0.1-dev.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "Docker", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return Docker;
9
+ }
10
+ });
11
+ const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
12
+ const _decorators = require("@decohere/crucible/decorators");
13
+ const _mesh = require("@decohere/mesh");
14
+ const _cli = require("@decohere/nexus/cli");
15
+ const _interop = require("@decohere/nexus/interop");
16
+ const _io = require("@decohere/nexus/io");
17
+ const _scribe = require("@decohere/scribe");
18
+ const _errors = require("../errors.js");
19
+ function _interop_require_default(obj) {
20
+ return obj && obj.__esModule ? obj : {
21
+ default: obj
22
+ };
23
+ }
24
+ function _ts_decorate(decorators, target, key, desc) {
25
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
26
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
27
+ 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;
28
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
29
+ }
30
+ function _ts_metadata(k, v) {
31
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
32
+ }
33
+ class Docker {
34
+ workspace;
35
+ #logger = _scribe.scribe.logger(Docker.name);
36
+ docker = new _interop.Docker();
37
+ #defaultRegistry = process.env.FORGE_DOCKER_REGISTRY?.trim() || "ghcr.io";
38
+ constructor(workspace){
39
+ this.workspace = workspace;
40
+ }
41
+ async run(options) {
42
+ const projects = await this.getDockerProjects(this.workspace.getProjects(options.configuration));
43
+ if (projects.length === 0) {
44
+ throw new _errors.ForgeError(`No projects found with a Dockerfile`);
45
+ }
46
+ const version = await this.workspace.getVersion();
47
+ const responses = await Promise.all(projects.map(async (project)=>await this.buildProject(project, version, options)));
48
+ const failed = responses.filter((response)=>!response.succeeded);
49
+ if (failed.length > 0) {
50
+ return _cli.ActionResponse.Error(Docker.name, responses);
51
+ }
52
+ return _cli.ActionResponse.Success(Docker.name, responses);
53
+ }
54
+ async getDockerProjects(projects) {
55
+ const result = [];
56
+ for (const project of projects){
57
+ const dockerfile = project.dockerConfig?.dockerfile ?? "Dockerfile";
58
+ const dockerfilePath = _nodepath.default.join(project.projectRoot, dockerfile);
59
+ if (!await _io.io.fileExists(dockerfilePath)) {
60
+ this.#logger.info(`Skipping ${project.name}: missing ${dockerfile}`);
61
+ continue;
62
+ }
63
+ result.push(project);
64
+ }
65
+ return result;
66
+ }
67
+ async buildProject(project, version, options) {
68
+ const dockerConfig = project.dockerConfig ?? {};
69
+ const envBuildArgs = this.parseJsonEnv("FORGE_DOCKER_BUILD_ARGS_JSON", {});
70
+ const envSecrets = this.parseJsonEnv("FORGE_DOCKER_SECRETS_JSON", {});
71
+ const envTags = this.parseJsonEnv("FORGE_DOCKER_EXTRA_TAGS_JSON", []);
72
+ const image = dockerConfig.image ?? this.defaultImageName(project.name);
73
+ const dockerfile = dockerConfig.dockerfile ?? "Dockerfile";
74
+ const tags = [
75
+ `${image}:${version}`,
76
+ ...dockerConfig.tags ?? [],
77
+ ...envTags
78
+ ];
79
+ const buildArgs = this.interpolateBuildArgs({
80
+ ...dockerConfig.buildArgs ?? {},
81
+ ...envBuildArgs
82
+ }, version);
83
+ const secrets = {
84
+ ...dockerConfig.secrets ?? {},
85
+ ...envSecrets
86
+ };
87
+ this.#logger.info(`${options.dryRun ? "[dry-run] " : ""}Building ${project.name}`);
88
+ try {
89
+ if (!options.dryRun) {
90
+ await this.docker.build(project.projectRoot, {
91
+ cwd: project.projectRoot,
92
+ dockerfile: _nodepath.default.join(project.projectRoot, dockerfile),
93
+ tags,
94
+ buildArgs,
95
+ secrets
96
+ });
97
+ if (options.push || dockerConfig.push) {
98
+ for (const tag of tags){
99
+ await this.docker.push(tag, {
100
+ cwd: project.projectRoot
101
+ });
102
+ }
103
+ }
104
+ }
105
+ return {
106
+ projectName: project.name,
107
+ image,
108
+ tags,
109
+ succeeded: true,
110
+ message: options.dryRun ? "Dry run" : `Built ${image}`
111
+ };
112
+ } catch (reason) {
113
+ const message = (0, _errors.formatUnknownError)(reason);
114
+ return {
115
+ projectName: project.name,
116
+ image,
117
+ tags,
118
+ succeeded: false,
119
+ message,
120
+ error: `${project.name}: ${message}`
121
+ };
122
+ }
123
+ }
124
+ interpolateBuildArgs(buildArgs, version) {
125
+ const result = {};
126
+ const versionPlaceholder = "$" + "{version}";
127
+ for (const [key, value] of Object.entries(buildArgs ?? {})){
128
+ result[key] = value.split(versionPlaceholder).join(version);
129
+ }
130
+ return result;
131
+ }
132
+ defaultImageName(projectName) {
133
+ return `${this.#defaultRegistry}/${this.normalizeDockerRepository(projectName)}`;
134
+ }
135
+ normalizeDockerRepository(name) {
136
+ const repository = name.replace(/^@/, "").split("/").map((segment)=>segment.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "")).filter(Boolean).join("/");
137
+ if (repository === "") {
138
+ throw new _errors.ForgeError(`Could not derive a Docker repository from project name "${name}"`);
139
+ }
140
+ return repository;
141
+ }
142
+ parseJsonEnv(name, fallback) {
143
+ const value = process.env[name];
144
+ if (value == null || value.trim() === "") {
145
+ return fallback;
146
+ }
147
+ try {
148
+ return JSON.parse(value);
149
+ } catch (reason) {
150
+ throw new _errors.ForgeError(`Invalid JSON in ${name}: ${(0, _errors.formatUnknownError)(reason)}`);
151
+ }
152
+ }
153
+ }
154
+ Docker = _ts_decorate([
155
+ (0, _decorators.injectable)(),
156
+ _ts_metadata("design:type", Function),
157
+ _ts_metadata("design:paramtypes", [
158
+ typeof _mesh.Workspace === "undefined" ? Object : _mesh.Workspace
159
+ ])
160
+ ], Docker);
161
+
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2RvY2tlci5hY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uLCBSZXN1bHRTdGF0dXMgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgQWN0aW9uUmVzcG9uc2UgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgRG9ja2VyIGFzIERvY2tlckludGVyb3AgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2ludGVyb3BcIjtcbmltcG9ydCB7IGlvIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pb1wiO1xuaW1wb3J0IHsgc2NyaWJlIH0gZnJvbSBcIkBkZWNvaGVyZS9zY3JpYmVcIjtcbmltcG9ydCB7IEZvcmdlRXJyb3IsIGZvcm1hdFVua25vd25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnMuanNcIjtcblxuZXhwb3J0IHR5cGUgRG9ja2VyT3B0aW9ucyA9IHtcblx0Y29uZmlndXJhdGlvbjogc3RyaW5nO1xuXHRkcnlSdW4/OiBib29sZWFuO1xuXHRwdXNoPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIERvY2tlclJlc3BvbnNlID0gUmVzdWx0U3RhdHVzICYge1xuXHRwcm9qZWN0TmFtZTogc3RyaW5nO1xuXHRpbWFnZTogc3RyaW5nO1xuXHR0YWdzOiBzdHJpbmdbXTtcblx0bWVzc2FnZTogc3RyaW5nO1xufTtcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERvY2tlciBpbXBsZW1lbnRzIEFjdGlvbjxEb2NrZXJPcHRpb25zPiB7XG5cdCNsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKERvY2tlci5uYW1lKTtcblx0cHJpdmF0ZSByZWFkb25seSBkb2NrZXIgPSBuZXcgRG9ja2VySW50ZXJvcCgpO1xuXHRyZWFkb25seSAjZGVmYXVsdFJlZ2lzdHJ5ID0gcHJvY2Vzcy5lbnYuRk9SR0VfRE9DS0VSX1JFR0lTVFJZPy50cmltKCkgfHwgXCJnaGNyLmlvXCI7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgd29ya3NwYWNlOiBXb3Jrc3BhY2UpIHt9XG5cblx0cHVibGljIGFzeW5jIHJ1bihvcHRpb25zOiBEb2NrZXJPcHRpb25zKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZTxEb2NrZXJSZXNwb25zZT4+IHtcblx0XHRjb25zdCBwcm9qZWN0cyA9IGF3YWl0IHRoaXMuZ2V0RG9ja2VyUHJvamVjdHMoXG5cdFx0XHR0aGlzLndvcmtzcGFjZS5nZXRQcm9qZWN0cyhvcHRpb25zLmNvbmZpZ3VyYXRpb24pLFxuXHRcdCk7XG5cdFx0aWYgKHByb2plY3RzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoYE5vIHByb2plY3RzIGZvdW5kIHdpdGggYSBEb2NrZXJmaWxlYCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmVyc2lvbiA9IGF3YWl0IHRoaXMud29ya3NwYWNlLmdldFZlcnNpb24oKTtcblx0XHRjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdHByb2plY3RzLm1hcChhc3luYyAocHJvamVjdCkgPT4gYXdhaXQgdGhpcy5idWlsZFByb2plY3QocHJvamVjdCwgdmVyc2lvbiwgb3B0aW9ucykpLFxuXHRcdCk7XG5cdFx0Y29uc3QgZmFpbGVkID0gcmVzcG9uc2VzLmZpbHRlcigocmVzcG9uc2UpID0+ICFyZXNwb25zZS5zdWNjZWVkZWQpO1xuXHRcdGlmIChmYWlsZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLkVycm9yKERvY2tlci5uYW1lLCByZXNwb25zZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gQWN0aW9uUmVzcG9uc2UuU3VjY2VzcyhEb2NrZXIubmFtZSwgcmVzcG9uc2VzKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZ2V0RG9ja2VyUHJvamVjdHMocHJvamVjdHM6IHJlYWRvbmx5IFByb2plY3RbXSkge1xuXHRcdGNvbnN0IHJlc3VsdDogUHJvamVjdFtdID0gW107XG5cdFx0Zm9yIChjb25zdCBwcm9qZWN0IG9mIHByb2plY3RzKSB7XG5cdFx0XHRjb25zdCBkb2NrZXJmaWxlID0gcHJvamVjdC5kb2NrZXJDb25maWc/LmRvY2tlcmZpbGUgPz8gXCJEb2NrZXJmaWxlXCI7XG5cdFx0XHRjb25zdCBkb2NrZXJmaWxlUGF0aCA9IHBhdGguam9pbihwcm9qZWN0LnByb2plY3RSb290LCBkb2NrZXJmaWxlKTtcblx0XHRcdGlmICghKGF3YWl0IGlvLmZpbGVFeGlzdHMoZG9ja2VyZmlsZVBhdGgpKSkge1xuXHRcdFx0XHR0aGlzLiNsb2dnZXIuaW5mbyhgU2tpcHBpbmcgJHtwcm9qZWN0Lm5hbWV9OiBtaXNzaW5nICR7ZG9ja2VyZmlsZX1gKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdC5wdXNoKHByb2plY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBidWlsZFByb2plY3QoXG5cdFx0cHJvamVjdDogUHJvamVjdCxcblx0XHR2ZXJzaW9uOiBzdHJpbmcsXG5cdFx0b3B0aW9uczogRG9ja2VyT3B0aW9ucyxcblx0KTogUHJvbWlzZTxEb2NrZXJSZXNwb25zZT4ge1xuXHRcdGNvbnN0IGRvY2tlckNvbmZpZyA9IHByb2plY3QuZG9ja2VyQ29uZmlnID8/IHt9O1xuXHRcdGNvbnN0IGVudkJ1aWxkQXJncyA9IHRoaXMucGFyc2VKc29uRW52PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KFxuXHRcdFx0XCJGT1JHRV9ET0NLRVJfQlVJTERfQVJHU19KU09OXCIsXG5cdFx0XHR7fSxcblx0XHQpO1xuXHRcdGNvbnN0IGVudlNlY3JldHMgPSB0aGlzLnBhcnNlSnNvbkVudjxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pihcblx0XHRcdFwiRk9SR0VfRE9DS0VSX1NFQ1JFVFNfSlNPTlwiLFxuXHRcdFx0e30sXG5cdFx0KTtcblx0XHRjb25zdCBlbnZUYWdzID0gdGhpcy5wYXJzZUpzb25FbnY8c3RyaW5nW10+KFwiRk9SR0VfRE9DS0VSX0VYVFJBX1RBR1NfSlNPTlwiLCBbXSk7XG5cblx0XHRjb25zdCBpbWFnZSA9IGRvY2tlckNvbmZpZy5pbWFnZSA/PyB0aGlzLmRlZmF1bHRJbWFnZU5hbWUocHJvamVjdC5uYW1lKTtcblx0XHRjb25zdCBkb2NrZXJmaWxlID0gZG9ja2VyQ29uZmlnLmRvY2tlcmZpbGUgPz8gXCJEb2NrZXJmaWxlXCI7XG5cdFx0Y29uc3QgdGFncyA9IFtgJHtpbWFnZX06JHt2ZXJzaW9ufWAsIC4uLihkb2NrZXJDb25maWcudGFncyA/PyBbXSksIC4uLmVudlRhZ3NdO1xuXHRcdGNvbnN0IGJ1aWxkQXJncyA9IHRoaXMuaW50ZXJwb2xhdGVCdWlsZEFyZ3MoXG5cdFx0XHR7IC4uLihkb2NrZXJDb25maWcuYnVpbGRBcmdzID8/IHt9KSwgLi4uZW52QnVpbGRBcmdzIH0sXG5cdFx0XHR2ZXJzaW9uLFxuXHRcdCk7XG5cdFx0Y29uc3Qgc2VjcmV0cyA9IHsgLi4uKGRvY2tlckNvbmZpZy5zZWNyZXRzID8/IHt9KSwgLi4uZW52U2VjcmV0cyB9O1xuXG5cdFx0dGhpcy4jbG9nZ2VyLmluZm8oYCR7b3B0aW9ucy5kcnlSdW4gPyBcIltkcnktcnVuXSBcIiA6IFwiXCJ9QnVpbGRpbmcgJHtwcm9qZWN0Lm5hbWV9YCk7XG5cdFx0dHJ5IHtcblx0XHRcdGlmICghb3B0aW9ucy5kcnlSdW4pIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5kb2NrZXIuYnVpbGQocHJvamVjdC5wcm9qZWN0Um9vdCwge1xuXHRcdFx0XHRcdGN3ZDogcHJvamVjdC5wcm9qZWN0Um9vdCxcblx0XHRcdFx0XHRkb2NrZXJmaWxlOiBwYXRoLmpvaW4ocHJvamVjdC5wcm9qZWN0Um9vdCwgZG9ja2VyZmlsZSksXG5cdFx0XHRcdFx0dGFncyxcblx0XHRcdFx0XHRidWlsZEFyZ3MsXG5cdFx0XHRcdFx0c2VjcmV0cyxcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKG9wdGlvbnMucHVzaCB8fCBkb2NrZXJDb25maWcucHVzaCkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuZG9ja2VyLnB1c2godGFnLCB7IGN3ZDogcHJvamVjdC5wcm9qZWN0Um9vdCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cHJvamVjdE5hbWU6IHByb2plY3QubmFtZSxcblx0XHRcdFx0aW1hZ2UsXG5cdFx0XHRcdHRhZ3MsXG5cdFx0XHRcdHN1Y2NlZWRlZDogdHJ1ZSxcblx0XHRcdFx0bWVzc2FnZTogb3B0aW9ucy5kcnlSdW4gPyBcIkRyeSBydW5cIiA6IGBCdWlsdCAke2ltYWdlfWAsXG5cdFx0XHR9O1xuXHRcdH0gY2F0Y2ggKHJlYXNvbikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGZvcm1hdFVua25vd25FcnJvcihyZWFzb24pO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cHJvamVjdE5hbWU6IHByb2plY3QubmFtZSxcblx0XHRcdFx0aW1hZ2UsXG5cdFx0XHRcdHRhZ3MsXG5cdFx0XHRcdHN1Y2NlZWRlZDogZmFsc2UsXG5cdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdGVycm9yOiBgJHtwcm9qZWN0Lm5hbWV9OiAke21lc3NhZ2V9YCxcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpbnRlcnBvbGF0ZUJ1aWxkQXJncyhcblx0XHRidWlsZEFyZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQsXG5cdFx0dmVyc2lvbjogc3RyaW5nLFxuXHQpIHtcblx0XHRjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRjb25zdCB2ZXJzaW9uUGxhY2Vob2xkZXIgPSBcIiRcIiArIFwie3ZlcnNpb259XCI7XG5cdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYnVpbGRBcmdzID8/IHt9KSkge1xuXHRcdFx0cmVzdWx0W2tleV0gPSB2YWx1ZS5zcGxpdCh2ZXJzaW9uUGxhY2Vob2xkZXIpLmpvaW4odmVyc2lvbik7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcml2YXRlIGRlZmF1bHRJbWFnZU5hbWUocHJvamVjdE5hbWU6IHN0cmluZykge1xuXHRcdHJldHVybiBgJHt0aGlzLiNkZWZhdWx0UmVnaXN0cnl9LyR7dGhpcy5ub3JtYWxpemVEb2NrZXJSZXBvc2l0b3J5KHByb2plY3ROYW1lKX1gO1xuXHR9XG5cblx0cHJpdmF0ZSBub3JtYWxpemVEb2NrZXJSZXBvc2l0b3J5KG5hbWU6IHN0cmluZykge1xuXHRcdGNvbnN0IHJlcG9zaXRvcnkgPSBuYW1lXG5cdFx0XHQucmVwbGFjZSgvXkAvLCBcIlwiKVxuXHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0Lm1hcCgoc2VnbWVudCkgPT5cblx0XHRcdFx0c2VnbWVudFxuXHRcdFx0XHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdFx0LnJlcGxhY2UoL1teYS16MC05XSsvZywgXCItXCIpXG5cdFx0XHRcdFx0LnJlcGxhY2UoL14tK3wtKyQvZywgXCJcIiksXG5cdFx0XHQpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pXG5cdFx0XHQuam9pbihcIi9cIik7XG5cblx0XHRpZiAocmVwb3NpdG9yeSA9PT0gXCJcIikge1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoYENvdWxkIG5vdCBkZXJpdmUgYSBEb2NrZXIgcmVwb3NpdG9yeSBmcm9tIHByb2plY3QgbmFtZSBcIiR7bmFtZX1cImApO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXBvc2l0b3J5O1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUpzb25FbnY8VD4obmFtZTogc3RyaW5nLCBmYWxsYmFjazogVCk6IFQge1xuXHRcdGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnZbbmFtZV07XG5cdFx0aWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUudHJpbSgpID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsbGJhY2s7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBKU09OLnBhcnNlKHZhbHVlKSBhcyBUO1xuXHRcdH0gY2F0Y2ggKHJlYXNvbikge1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoYEludmFsaWQgSlNPTiBpbiAke25hbWV9OiAke2Zvcm1hdFVua25vd25FcnJvcihyZWFzb24pfWApO1xuXHRcdH1cblx0fVxufVxuIl0sIm5hbWVzIjpbIkRvY2tlciIsInNjcmliZSIsImxvZ2dlciIsIm5hbWUiLCJkb2NrZXIiLCJEb2NrZXJJbnRlcm9wIiwicHJvY2VzcyIsImVudiIsIkZPUkdFX0RPQ0tFUl9SRUdJU1RSWSIsInRyaW0iLCJ3b3Jrc3BhY2UiLCJydW4iLCJvcHRpb25zIiwicHJvamVjdHMiLCJnZXREb2NrZXJQcm9qZWN0cyIsImdldFByb2plY3RzIiwiY29uZmlndXJhdGlvbiIsImxlbmd0aCIsIkZvcmdlRXJyb3IiLCJ2ZXJzaW9uIiwiZ2V0VmVyc2lvbiIsInJlc3BvbnNlcyIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJwcm9qZWN0IiwiYnVpbGRQcm9qZWN0IiwiZmFpbGVkIiwiZmlsdGVyIiwicmVzcG9uc2UiLCJzdWNjZWVkZWQiLCJBY3Rpb25SZXNwb25zZSIsIkVycm9yIiwiU3VjY2VzcyIsInJlc3VsdCIsImRvY2tlcmZpbGUiLCJkb2NrZXJDb25maWciLCJkb2NrZXJmaWxlUGF0aCIsInBhdGgiLCJqb2luIiwicHJvamVjdFJvb3QiLCJpbyIsImZpbGVFeGlzdHMiLCJpbmZvIiwicHVzaCIsImVudkJ1aWxkQXJncyIsInBhcnNlSnNvbkVudiIsImVudlNlY3JldHMiLCJlbnZUYWdzIiwiaW1hZ2UiLCJkZWZhdWx0SW1hZ2VOYW1lIiwidGFncyIsImJ1aWxkQXJncyIsImludGVycG9sYXRlQnVpbGRBcmdzIiwic2VjcmV0cyIsImRyeVJ1biIsImJ1aWxkIiwiY3dkIiwidGFnIiwicHJvamVjdE5hbWUiLCJtZXNzYWdlIiwicmVhc29uIiwiZm9ybWF0VW5rbm93bkVycm9yIiwiZXJyb3IiLCJ2ZXJzaW9uUGxhY2Vob2xkZXIiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJzcGxpdCIsIm5vcm1hbGl6ZURvY2tlclJlcG9zaXRvcnkiLCJyZXBvc2l0b3J5IiwicmVwbGFjZSIsInNlZ21lbnQiLCJ0b0xvd2VyQ2FzZSIsIkJvb2xlYW4iLCJmYWxsYmFjayIsIkpTT04iLCJwYXJzZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkEwQmFBOzs7ZUFBQUE7OztpRUExQkk7NEJBQ1U7c0JBR0Q7cUJBRUs7eUJBQ1M7b0JBQ3JCO3dCQUNJO3dCQUN3Qjs7Ozs7Ozs7Ozs7Ozs7O0FBZ0J4QyxNQUFNQTs7SUFDWixDQUFBLE1BQU8sR0FBR0MsY0FBTSxDQUFDQyxNQUFNLENBQUNGLE9BQU9HLElBQUksRUFBRTtJQUNwQkMsU0FBUyxJQUFJQyxlQUFhLEdBQUc7SUFDckMsQ0FBQSxlQUFnQixHQUFHQyxRQUFRQyxHQUFHLENBQUNDLHFCQUFxQixFQUFFQyxVQUFVLFVBQVU7SUFFbkYsWUFBbUIsQUFBaUJDLFNBQW9CLENBQUU7YUFBdEJBLFlBQUFBO0lBQXVCO0lBRTNELE1BQWFDLElBQUlDLE9BQXNCLEVBQTJDO1FBQ2pGLE1BQU1DLFdBQVcsTUFBTSxJQUFJLENBQUNDLGlCQUFpQixDQUM1QyxJQUFJLENBQUNKLFNBQVMsQ0FBQ0ssV0FBVyxDQUFDSCxRQUFRSSxhQUFhO1FBRWpELElBQUlILFNBQVNJLE1BQU0sS0FBSyxHQUFHO1lBQzFCLE1BQU0sSUFBSUMsa0JBQVUsQ0FBQyxDQUFDLG1DQUFtQyxDQUFDO1FBQzNEO1FBRUEsTUFBTUMsVUFBVSxNQUFNLElBQUksQ0FBQ1QsU0FBUyxDQUFDVSxVQUFVO1FBQy9DLE1BQU1DLFlBQVksTUFBTUMsUUFBUUMsR0FBRyxDQUNsQ1YsU0FBU1csR0FBRyxDQUFDLE9BQU9DLFVBQVksTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQ0QsU0FBU04sU0FBU1A7UUFFM0UsTUFBTWUsU0FBU04sVUFBVU8sTUFBTSxDQUFDLENBQUNDLFdBQWEsQ0FBQ0EsU0FBU0MsU0FBUztRQUNqRSxJQUFJSCxPQUFPVixNQUFNLEdBQUcsR0FBRztZQUN0QixPQUFPYyxtQkFBYyxDQUFDQyxLQUFLLENBQUNoQyxPQUFPRyxJQUFJLEVBQUVrQjtRQUMxQztRQUNBLE9BQU9VLG1CQUFjLENBQUNFLE9BQU8sQ0FBQ2pDLE9BQU9HLElBQUksRUFBRWtCO0lBQzVDO0lBRUEsTUFBY1Asa0JBQWtCRCxRQUE0QixFQUFFO1FBQzdELE1BQU1xQixTQUFvQixFQUFFO1FBQzVCLEtBQUssTUFBTVQsV0FBV1osU0FBVTtZQUMvQixNQUFNc0IsYUFBYVYsUUFBUVcsWUFBWSxFQUFFRCxjQUFjO1lBQ3ZELE1BQU1FLGlCQUFpQkMsaUJBQUksQ0FBQ0MsSUFBSSxDQUFDZCxRQUFRZSxXQUFXLEVBQUVMO1lBQ3RELElBQUksQ0FBRSxNQUFNTSxNQUFFLENBQUNDLFVBQVUsQ0FBQ0wsaUJBQWtCO2dCQUMzQyxJQUFJLENBQUMsQ0FBQSxNQUFPLENBQUNNLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRWxCLFFBQVF0QixJQUFJLENBQUMsVUFBVSxFQUFFZ0MsWUFBWTtnQkFDbkU7WUFDRDtZQUVBRCxPQUFPVSxJQUFJLENBQUNuQjtRQUNiO1FBQ0EsT0FBT1M7SUFDUjtJQUVBLE1BQWNSLGFBQ2JELE9BQWdCLEVBQ2hCTixPQUFlLEVBQ2ZQLE9BQXNCLEVBQ0k7UUFDMUIsTUFBTXdCLGVBQWVYLFFBQVFXLFlBQVksSUFBSSxDQUFDO1FBQzlDLE1BQU1TLGVBQWUsSUFBSSxDQUFDQyxZQUFZLENBQ3JDLGdDQUNBLENBQUM7UUFFRixNQUFNQyxhQUFhLElBQUksQ0FBQ0QsWUFBWSxDQUNuQyw2QkFDQSxDQUFDO1FBRUYsTUFBTUUsVUFBVSxJQUFJLENBQUNGLFlBQVksQ0FBVyxnQ0FBZ0MsRUFBRTtRQUU5RSxNQUFNRyxRQUFRYixhQUFhYSxLQUFLLElBQUksSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQ3pCLFFBQVF0QixJQUFJO1FBQ3RFLE1BQU1nQyxhQUFhQyxhQUFhRCxVQUFVLElBQUk7UUFDOUMsTUFBTWdCLE9BQU87WUFBQyxHQUFHRixNQUFNLENBQUMsRUFBRTlCLFNBQVM7ZUFBTWlCLGFBQWFlLElBQUksSUFBSSxFQUFFO2VBQU1IO1NBQVE7UUFDOUUsTUFBTUksWUFBWSxJQUFJLENBQUNDLG9CQUFvQixDQUMxQztZQUFFLEdBQUlqQixhQUFhZ0IsU0FBUyxJQUFJLENBQUMsQ0FBQztZQUFHLEdBQUdQLFlBQVk7UUFBQyxHQUNyRDFCO1FBRUQsTUFBTW1DLFVBQVU7WUFBRSxHQUFJbEIsYUFBYWtCLE9BQU8sSUFBSSxDQUFDLENBQUM7WUFBRyxHQUFHUCxVQUFVO1FBQUM7UUFFakUsSUFBSSxDQUFDLENBQUEsTUFBTyxDQUFDSixJQUFJLENBQUMsR0FBRy9CLFFBQVEyQyxNQUFNLEdBQUcsZUFBZSxHQUFHLFNBQVMsRUFBRTlCLFFBQVF0QixJQUFJLEVBQUU7UUFDakYsSUFBSTtZQUNILElBQUksQ0FBQ1MsUUFBUTJDLE1BQU0sRUFBRTtnQkFDcEIsTUFBTSxJQUFJLENBQUNuRCxNQUFNLENBQUNvRCxLQUFLLENBQUMvQixRQUFRZSxXQUFXLEVBQUU7b0JBQzVDaUIsS0FBS2hDLFFBQVFlLFdBQVc7b0JBQ3hCTCxZQUFZRyxpQkFBSSxDQUFDQyxJQUFJLENBQUNkLFFBQVFlLFdBQVcsRUFBRUw7b0JBQzNDZ0I7b0JBQ0FDO29CQUNBRTtnQkFDRDtnQkFFQSxJQUFJMUMsUUFBUWdDLElBQUksSUFBSVIsYUFBYVEsSUFBSSxFQUFFO29CQUN0QyxLQUFLLE1BQU1jLE9BQU9QLEtBQU07d0JBQ3ZCLE1BQU0sSUFBSSxDQUFDL0MsTUFBTSxDQUFDd0MsSUFBSSxDQUFDYyxLQUFLOzRCQUFFRCxLQUFLaEMsUUFBUWUsV0FBVzt3QkFBQztvQkFDeEQ7Z0JBQ0Q7WUFDRDtZQUVBLE9BQU87Z0JBQ05tQixhQUFhbEMsUUFBUXRCLElBQUk7Z0JBQ3pCOEM7Z0JBQ0FFO2dCQUNBckIsV0FBVztnQkFDWDhCLFNBQVNoRCxRQUFRMkMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUVOLE9BQU87WUFDdkQ7UUFDRCxFQUFFLE9BQU9ZLFFBQVE7WUFDaEIsTUFBTUQsVUFBVUUsSUFBQUEsMEJBQWtCLEVBQUNEO1lBQ25DLE9BQU87Z0JBQ05GLGFBQWFsQyxRQUFRdEIsSUFBSTtnQkFDekI4QztnQkFDQUU7Z0JBQ0FyQixXQUFXO2dCQUNYOEI7Z0JBQ0FHLE9BQU8sR0FBR3RDLFFBQVF0QixJQUFJLENBQUMsRUFBRSxFQUFFeUQsU0FBUztZQUNyQztRQUNEO0lBQ0Q7SUFFUVAscUJBQ1BELFNBQTZDLEVBQzdDakMsT0FBZSxFQUNkO1FBQ0QsTUFBTWUsU0FBaUMsQ0FBQztRQUN4QyxNQUFNOEIscUJBQXFCLE1BQU07UUFDakMsS0FBSyxNQUFNLENBQUNDLEtBQUtDLE1BQU0sSUFBSUMsT0FBT0MsT0FBTyxDQUFDaEIsYUFBYSxDQUFDLEdBQUk7WUFDM0RsQixNQUFNLENBQUMrQixJQUFJLEdBQUdDLE1BQU1HLEtBQUssQ0FBQ0wsb0JBQW9CekIsSUFBSSxDQUFDcEI7UUFDcEQ7UUFDQSxPQUFPZTtJQUNSO0lBRVFnQixpQkFBaUJTLFdBQW1CLEVBQUU7UUFDN0MsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFBLGVBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ1cseUJBQXlCLENBQUNYLGNBQWM7SUFDakY7SUFFUVcsMEJBQTBCbkUsSUFBWSxFQUFFO1FBQy9DLE1BQU1vRSxhQUFhcEUsS0FDakJxRSxPQUFPLENBQUMsTUFBTSxJQUNkSCxLQUFLLENBQUMsS0FDTjdDLEdBQUcsQ0FBQyxDQUFDaUQsVUFDTEEsUUFDRUMsV0FBVyxHQUNYRixPQUFPLENBQUMsZUFBZSxLQUN2QkEsT0FBTyxDQUFDLFlBQVksS0FFdEI1QyxNQUFNLENBQUMrQyxTQUNQcEMsSUFBSSxDQUFDO1FBRVAsSUFBSWdDLGVBQWUsSUFBSTtZQUN0QixNQUFNLElBQUlyRCxrQkFBVSxDQUFDLENBQUMsd0RBQXdELEVBQUVmLEtBQUssQ0FBQyxDQUFDO1FBQ3hGO1FBRUEsT0FBT29FO0lBQ1I7SUFFUXpCLGFBQWdCM0MsSUFBWSxFQUFFeUUsUUFBVyxFQUFLO1FBQ3JELE1BQU1WLFFBQVE1RCxRQUFRQyxHQUFHLENBQUNKLEtBQUs7UUFDL0IsSUFBSStELFNBQVMsUUFBUUEsTUFBTXpELElBQUksT0FBTyxJQUFJO1lBQ3pDLE9BQU9tRTtRQUNSO1FBRUEsSUFBSTtZQUNILE9BQU9DLEtBQUtDLEtBQUssQ0FBQ1o7UUFDbkIsRUFBRSxPQUFPTCxRQUFRO1lBQ2hCLE1BQU0sSUFBSTNDLGtCQUFVLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRWYsS0FBSyxFQUFFLEVBQUUyRCxJQUFBQSwwQkFBa0IsRUFBQ0QsU0FBUztRQUM5RTtJQUNEO0FBQ0QifQ==
@@ -8,6 +8,7 @@ _export_star(require("./commit.action.js"), exports);
8
8
  _export_star(require("./copy.action.js"), exports);
9
9
  _export_star(require("./dependency-report.action.js"), exports);
10
10
  _export_star(require("./dependency-sync.action.js"), exports);
11
+ _export_star(require("./docker.action.js"), exports);
11
12
  _export_star(require("./link.action.js"), exports);
12
13
  _export_star(require("./publish.action.js"), exports);
13
14
  _export_star(require("./sync-lock-file.action.js"), exports);
@@ -29,4 +30,4 @@ function _export_star(from, to) {
29
30
  return from;
30
31
  }
31
32
 
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2J1aWxkLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2xlYW4uYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21taXQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb3B5LmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVwZW5kZW5jeS1yZXBvcnQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZXBlbmRlbmN5LXN5bmMuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saW5rLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHVibGlzaC5hY3Rpb24uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N5bmMtbG9jay1maWxlLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGFnLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdW5saW5rLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmVyc2lvbi5hY3Rpb24uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3dhdGNoLmFjdGlvbi5qc1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWM7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0EifQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2J1aWxkLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2xlYW4uYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21taXQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb3B5LmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVwZW5kZW5jeS1yZXBvcnQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZXBlbmRlbmN5LXN5bmMuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kb2NrZXIuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saW5rLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHVibGlzaC5hY3Rpb24uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N5bmMtbG9jay1maWxlLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGFnLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdW5saW5rLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmVyc2lvbi5hY3Rpb24uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3dhdGNoLmFjdGlvbi5qc1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWM7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0EifQ==
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "DockerCommand", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return DockerCommand;
9
+ }
10
+ });
11
+ const _cli = require("@decohere/nexus/cli");
12
+ const _dockeraction = require("../actions/docker.action.js");
13
+ class DockerCommand extends _cli.DecohereCommand {
14
+ get actions() {
15
+ return [
16
+ _dockeraction.Docker
17
+ ];
18
+ }
19
+ constructor(name){
20
+ super(name);
21
+ this.description("Build Docker images for workspace projects");
22
+ this.addOption(new _cli.ConfigurationOption("release"));
23
+ this.addOption(new _cli.DryRunOption("Run docker build without executing it"));
24
+ this.option("--push", "Push built images after a successful build", false);
25
+ }
26
+ }
27
+
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9jb21tYW5kcy9kb2NrZXIuY29tbWFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWd1cmF0aW9uT3B0aW9uLCBEZWNvaGVyZUNvbW1hbmQsIERyeVJ1bk9wdGlvbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBEb2NrZXIgfSBmcm9tIFwiLi4vYWN0aW9ucy9kb2NrZXIuYWN0aW9uLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2NrZXJDb21tYW5kIGV4dGVuZHMgRGVjb2hlcmVDb21tYW5kIHtcblx0cHVibGljIG92ZXJyaWRlIGdldCBhY3Rpb25zKCkge1xuXHRcdHJldHVybiBbRG9ja2VyXTtcblx0fVxuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcblx0XHRzdXBlcihuYW1lKTtcblx0XHR0aGlzLmRlc2NyaXB0aW9uKFwiQnVpbGQgRG9ja2VyIGltYWdlcyBmb3Igd29ya3NwYWNlIHByb2plY3RzXCIpO1xuXHRcdHRoaXMuYWRkT3B0aW9uKG5ldyBDb25maWd1cmF0aW9uT3B0aW9uKFwicmVsZWFzZVwiKSk7XG5cdFx0dGhpcy5hZGRPcHRpb24obmV3IERyeVJ1bk9wdGlvbihcIlJ1biBkb2NrZXIgYnVpbGQgd2l0aG91dCBleGVjdXRpbmcgaXRcIikpO1xuXHRcdHRoaXMub3B0aW9uKFwiLS1wdXNoXCIsIFwiUHVzaCBidWlsdCBpbWFnZXMgYWZ0ZXIgYSBzdWNjZXNzZnVsIGJ1aWxkXCIsIGZhbHNlKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkRvY2tlckNvbW1hbmQiLCJEZWNvaGVyZUNvbW1hbmQiLCJhY3Rpb25zIiwiRG9ja2VyIiwibmFtZSIsImRlc2NyaXB0aW9uIiwiYWRkT3B0aW9uIiwiQ29uZmlndXJhdGlvbk9wdGlvbiIsIkRyeVJ1bk9wdGlvbiIsIm9wdGlvbiJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFHYUE7OztlQUFBQTs7O3FCQUhzRDs4QkFDNUM7QUFFaEIsTUFBTUEsc0JBQXNCQyxvQkFBZTtJQUNqRCxJQUFvQkMsVUFBVTtRQUM3QixPQUFPO1lBQUNDLG9CQUFNO1NBQUM7SUFDaEI7SUFFQSxZQUFtQkMsSUFBWSxDQUFFO1FBQ2hDLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNDLFdBQVcsQ0FBQztRQUNqQixJQUFJLENBQUNDLFNBQVMsQ0FBQyxJQUFJQyx3QkFBbUIsQ0FBQztRQUN2QyxJQUFJLENBQUNELFNBQVMsQ0FBQyxJQUFJRSxpQkFBWSxDQUFDO1FBQ2hDLElBQUksQ0FBQ0MsTUFBTSxDQUFDLFVBQVUsOENBQThDO0lBQ3JFO0FBQ0QifQ==
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  _export_star(require("./build.command.js"), exports);
6
6
  _export_star(require("./dependency.command.js"), exports);
7
+ _export_star(require("./docker.command.js"), exports);
7
8
  _export_star(require("./forge.command.js"), exports);
8
9
  _export_star(require("./link.command.js"), exports);
9
10
  _export_star(require("./publish.command.js"), exports);
@@ -23,4 +24,4 @@ function _export_star(from, to) {
23
24
  return from;
24
25
  }
25
26
 
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9jb21tYW5kcy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9idWlsZC5jb21tYW5kLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZXBlbmRlbmN5LmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2ZvcmdlLmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpbmsuY29tbWFuZC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHVibGlzaC5jb21tYW5kLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90YWcuY29tbWFuZC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmVyc2lvbi5jb21tYW5kLmpzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBYztxQkFDQTtxQkFDQTtxQkFDQTtxQkFDQTtxQkFDQTtxQkFDQSJ9
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9jb21tYW5kcy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9idWlsZC5jb21tYW5kLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZXBlbmRlbmN5LmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RvY2tlci5jb21tYW5kLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mb3JnZS5jb21tYW5kLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saW5rLmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3B1Ymxpc2guY29tbWFuZC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGFnLmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZlcnNpb24uY29tbWFuZC5qc1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWM7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0EifQ==
@@ -65,6 +65,7 @@ class ForgeModule extends _cli.ModuleManifest {
65
65
  actions = {
66
66
  clean: _index.Clean,
67
67
  copy: _index.Copy,
68
+ docker: _index.Docker,
68
69
  build: _index.Build,
69
70
  watch: _index.Watch,
70
71
  publish: _index.Publish,
@@ -81,6 +82,7 @@ class ForgeModule extends _cli.ModuleManifest {
81
82
  build: _index1.BuildCommand,
82
83
  publish: _index1.PublishCommand,
83
84
  dependencies: _index1.DependencyCommand,
85
+ docker: _index1.DockerCommand,
84
86
  version: _index1.VersionCommand,
85
87
  tag: _index1.TagCommand,
86
88
  link: _index1.LinkCommand,
@@ -110,4 +112,4 @@ class ForgeModule extends _cli.ModuleManifest {
110
112
  }
111
113
  }
112
114
 
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9mb3JnZS5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckNvbmZpZ0ZhY3RvcnksIFdvcmtzcGFjZUZhY3RvcnkgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlRmFjdG9yeU9wdGlvbnMgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgTW9kdWxlTWFuaWZlc3QgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXJCdWlsZGVyIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jb21wb3NpdGlvblwiO1xuaW1wb3J0ICogYXMgQWN0aW9ucyBmcm9tIFwiLi9hY3Rpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgKiBhcyBDb21tYW5kcyBmcm9tIFwiLi9jb21tYW5kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgRGVwZW5kZW5jeVJlc29sdmVyIH0gZnJvbSBcIi4vc2VydmljZXMvZGVwZW5kZW5jeS1yZXNvbHZlci5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBGaWxlV3JpdGVyU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL2ZpbGUtd3JpdGVyLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IFN3Y1RyYW5zcGlsZXIgfSBmcm9tIFwiLi9zZXJ2aWNlcy9zd2MtdHJhbnNwaWxlci5qc1wiO1xuaW1wb3J0IHsgVHlwZUVtaXR0ZXIgfSBmcm9tIFwiLi9zZXJ2aWNlcy90eXBlLWVtaXR0ZXIuanNcIjtcbmltcG9ydCB7IFRyYW5zZm9ybWVyS2V5IH0gZnJvbSBcIi4vdHlwZXMvdHJhbnNmb3JtZXIudHlwZS5qc1wiO1xuaW1wb3J0IHsgRGVmYXVsdENvbmZpZ3VyYXRpb25zLCBXb3Jrc3BhY2VEZWZhdWx0cyB9IGZyb20gXCIuL3dvcmtzcGFjZS5jb25maWcuanNcIjtcblxuZXhwb3J0IGNsYXNzIEZvcmdlTW9kdWxlIGV4dGVuZHMgTW9kdWxlTWFuaWZlc3Qge1xuXHRwdWJsaWMgcmVhZG9ubHkgaWQgPSBcImZvcmdlXCI7XG5cdHB1YmxpYyByZWFkb25seSBjb21tYW5kID0gQ29tbWFuZHMuRm9yZ2VDb21tYW5kO1xuXHRwdWJsaWMgcmVhZG9ubHkgYWN0aW9ucyA9IHtcblx0XHRjbGVhbjogQWN0aW9ucy5DbGVhbixcblx0XHRjb3B5OiBBY3Rpb25zLkNvcHksXG5cdFx0YnVpbGQ6IEFjdGlvbnMuQnVpbGQsXG5cdFx0d2F0Y2g6IEFjdGlvbnMuV2F0Y2gsXG5cdFx0cHVibGlzaDogQWN0aW9ucy5QdWJsaXNoLFxuXHRcdHN5bmNEZXBlbmRlbmNpZXM6IEFjdGlvbnMuU3luY0RlcGVuZGVuY2llcyxcblx0XHRzeW5jTG9ja0ZpbGU6IEFjdGlvbnMuU3luY0xvY2tGaWxlLFxuXHRcdHJlcG9ydERlcGVuZGVuY2llczogQWN0aW9ucy5SZXBvcnREZXBlbmRlbmNpZXMsXG5cdFx0dmVyc2lvbjogQWN0aW9ucy5WZXJzaW9uLFxuXHRcdHRhZzogQWN0aW9ucy5UYWcsXG5cdFx0Y29tbWl0RmlsZXM6IEFjdGlvbnMuQ29tbWl0RmlsZXMsXG5cdFx0bGluazogQWN0aW9ucy5MaW5rLFxuXHRcdHVubGluazogQWN0aW9ucy5VbmxpbmssXG5cdH07XG5cdHB1YmxpYyByZWFkb25seSBjb21tYW5kcyA9IHtcblx0XHRidWlsZDogQ29tbWFuZHMuQnVpbGRDb21tYW5kLFxuXHRcdHB1Ymxpc2g6IENvbW1hbmRzLlB1Ymxpc2hDb21tYW5kLFxuXHRcdGRlcGVuZGVuY2llczogQ29tbWFuZHMuRGVwZW5kZW5jeUNvbW1hbmQsXG5cdFx0dmVyc2lvbjogQ29tbWFuZHMuVmVyc2lvbkNvbW1hbmQsXG5cdFx0dGFnOiBDb21tYW5kcy5UYWdDb21tYW5kLFxuXHRcdGxpbms6IENvbW1hbmRzLkxpbmtDb21tYW5kLFxuXHRcdHVubGluazogQ29tbWFuZHMuVW5saW5rQ29tbWFuZCxcblx0fTtcblxuXHRwdWJsaWMgcmVnaXN0ZXJTZXJ2aWNlcyhidWlsZGVyOiBDb250YWluZXJCdWlsZGVyKSB7XG5cdFx0YnVpbGRlci5yZWdpc3RlclNpbmdsZXRvbihUcmFuc2Zvcm1lcktleSwgU3djVHJhbnNwaWxlcik7XG5cdFx0YnVpbGRlci5yZWdpc3RlclNpbmdsZXRvbihUcmFuc2Zvcm1lcktleSwgVHlwZUVtaXR0ZXIpO1xuXHRcdGJ1aWxkZXIucmVnaXN0ZXJTaW5nbGV0b24oRGVwZW5kZW5jeVJlc29sdmVyKTtcblx0XHRidWlsZGVyLnJlZ2lzdGVyU2luZ2xldG9uKEZpbGVXcml0ZXJTZXJ2aWNlKTtcblx0fVxuXG5cdHB1YmxpYyBvdmVycmlkZSBhc3luYyBjcmVhdGVXb3Jrc3BhY2Uob3B0aW9uczogV29ya3NwYWNlRmFjdG9yeU9wdGlvbnMpIHtcblx0XHRjb25zdCB7IGNvbmZpZ3VyYXRpb25zOiBfLCAuLi5mb3JnZURlZmF1bHRzIH0gPSBXb3Jrc3BhY2VEZWZhdWx0cztcblx0XHRjb25zdCB1c2VyQ29uZmlnID0gYXdhaXQgVXNlckNvbmZpZ0ZhY3RvcnkuZ2V0VXNlckNvbmZpZyhvcHRpb25zLmNvbmZpZ0ZpbGUpO1xuXHRcdC8vIE9ubHkgYXBwbHkgZm9yZ2UgZGVmYXVsdCBjb25maWd1cmF0aW9ucyB3aGVuIHVzZXIgY29uZmlnIGRvZXNuJ3QgcHJvdmlkZSBhbnkuXG5cdFx0Ly8gVGhpcyBlbnN1cmVzIHVzZXItZGVmaW5lZCBjb25maWd1cmF0aW9ucyB0YWtlIHByaW9yaXR5IHdoaWxlIHN0aWxsIHByb3ZpZGluZ1xuXHRcdC8vIHNlbnNpYmxlIGRlZmF1bHRzIChkZWJ1ZyArIHJlbGVhc2UpIHdoZW4gbm8gY29uZmlnIGZpbGUgaXMgcHJlc2VudC5cblx0XHRjb25zdCBjb25maWd1cmF0aW9ucyA9IHVzZXJDb25maWcuY29uZmlndXJhdGlvbnM/Lmxlbmd0aFxuXHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdDogRGVmYXVsdENvbmZpZ3VyYXRpb25zO1xuXHRcdHJldHVybiBXb3Jrc3BhY2VGYWN0b3J5LmNyZWF0ZSh7XG5cdFx0XHQuLi5mb3JnZURlZmF1bHRzLFxuXHRcdFx0Li4uKGNvbmZpZ3VyYXRpb25zID8geyBjb25maWd1cmF0aW9ucyB9IDoge30pLFxuXHRcdFx0Y29uZmlnRmlsZTogb3B0aW9ucy5jb25maWdGaWxlLFxuXHRcdFx0cm9vdERpcjogb3B0aW9ucy5yb290RGlyID8/IFdvcmtzcGFjZURlZmF1bHRzLnJvb3REaXIsXG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJGb3JnZU1vZHVsZSIsIk1vZHVsZU1hbmlmZXN0IiwiaWQiLCJjb21tYW5kIiwiQ29tbWFuZHMiLCJGb3JnZUNvbW1hbmQiLCJhY3Rpb25zIiwiY2xlYW4iLCJBY3Rpb25zIiwiQ2xlYW4iLCJjb3B5IiwiQ29weSIsImJ1aWxkIiwiQnVpbGQiLCJ3YXRjaCIsIldhdGNoIiwicHVibGlzaCIsIlB1Ymxpc2giLCJzeW5jRGVwZW5kZW5jaWVzIiwiU3luY0RlcGVuZGVuY2llcyIsInN5bmNMb2NrRmlsZSIsIlN5bmNMb2NrRmlsZSIsInJlcG9ydERlcGVuZGVuY2llcyIsIlJlcG9ydERlcGVuZGVuY2llcyIsInZlcnNpb24iLCJWZXJzaW9uIiwidGFnIiwiVGFnIiwiY29tbWl0RmlsZXMiLCJDb21taXRGaWxlcyIsImxpbmsiLCJMaW5rIiwidW5saW5rIiwiVW5saW5rIiwiY29tbWFuZHMiLCJCdWlsZENvbW1hbmQiLCJQdWJsaXNoQ29tbWFuZCIsImRlcGVuZGVuY2llcyIsIkRlcGVuZGVuY3lDb21tYW5kIiwiVmVyc2lvbkNvbW1hbmQiLCJUYWdDb21tYW5kIiwiTGlua0NvbW1hbmQiLCJVbmxpbmtDb21tYW5kIiwicmVnaXN0ZXJTZXJ2aWNlcyIsImJ1aWxkZXIiLCJyZWdpc3RlclNpbmdsZXRvbiIsIlRyYW5zZm9ybWVyS2V5IiwiU3djVHJhbnNwaWxlciIsIlR5cGVFbWl0dGVyIiwiRGVwZW5kZW5jeVJlc29sdmVyIiwiRmlsZVdyaXRlclNlcnZpY2UiLCJjcmVhdGVXb3Jrc3BhY2UiLCJvcHRpb25zIiwiY29uZmlndXJhdGlvbnMiLCJfIiwiZm9yZ2VEZWZhdWx0cyIsIldvcmtzcGFjZURlZmF1bHRzIiwidXNlckNvbmZpZyIsIlVzZXJDb25maWdGYWN0b3J5IiwiZ2V0VXNlckNvbmZpZyIsImNvbmZpZ0ZpbGUiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJEZWZhdWx0Q29uZmlndXJhdGlvbnMiLCJXb3Jrc3BhY2VGYWN0b3J5IiwiY3JlYXRlIiwicm9vdERpciJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFhYUE7OztlQUFBQTs7O3NCQWJ1QztxQkFFckI7K0RBRU47Z0VBQ0M7MkNBQ1M7bUNBQ0Q7K0JBQ0o7NkJBQ0Y7aUNBQ0c7aUNBQzBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFbEQsTUFBTUEsb0JBQW9CQyxtQkFBYztJQUM5QkMsS0FBSyxRQUFRO0lBQ2JDLFVBQVVDLFFBQVNDLFlBQVksQ0FBQztJQUNoQ0MsVUFBVTtRQUN6QkMsT0FBT0MsT0FBUUMsS0FBSztRQUNwQkMsTUFBTUYsT0FBUUcsSUFBSTtRQUNsQkMsT0FBT0osT0FBUUssS0FBSztRQUNwQkMsT0FBT04sT0FBUU8sS0FBSztRQUNwQkMsU0FBU1IsT0FBUVMsT0FBTztRQUN4QkMsa0JBQWtCVixPQUFRVyxnQkFBZ0I7UUFDMUNDLGNBQWNaLE9BQVFhLFlBQVk7UUFDbENDLG9CQUFvQmQsT0FBUWUsa0JBQWtCO1FBQzlDQyxTQUFTaEIsT0FBUWlCLE9BQU87UUFDeEJDLEtBQUtsQixPQUFRbUIsR0FBRztRQUNoQkMsYUFBYXBCLE9BQVFxQixXQUFXO1FBQ2hDQyxNQUFNdEIsT0FBUXVCLElBQUk7UUFDbEJDLFFBQVF4QixPQUFReUIsTUFBTTtJQUN2QixFQUFFO0lBQ2NDLFdBQVc7UUFDMUJ0QixPQUFPUixRQUFTK0IsWUFBWTtRQUM1Qm5CLFNBQVNaLFFBQVNnQyxjQUFjO1FBQ2hDQyxjQUFjakMsUUFBU2tDLGlCQUFpQjtRQUN4Q2QsU0FBU3BCLFFBQVNtQyxjQUFjO1FBQ2hDYixLQUFLdEIsUUFBU29DLFVBQVU7UUFDeEJWLE1BQU0xQixRQUFTcUMsV0FBVztRQUMxQlQsUUFBUTVCLFFBQVNzQyxhQUFhO0lBQy9CLEVBQUU7SUFFS0MsaUJBQWlCQyxPQUF5QixFQUFFO1FBQ2xEQSxRQUFRQyxpQkFBaUIsQ0FBQ0MsK0JBQWMsRUFBRUMsNEJBQWE7UUFDdkRILFFBQVFDLGlCQUFpQixDQUFDQywrQkFBYyxFQUFFRSx3QkFBVztRQUNyREosUUFBUUMsaUJBQWlCLENBQUNJLDZDQUFrQjtRQUM1Q0wsUUFBUUMsaUJBQWlCLENBQUNLLG9DQUFpQjtJQUM1QztJQUVBLE1BQXNCQyxnQkFBZ0JDLE9BQWdDLEVBQUU7UUFDdkUsTUFBTSxFQUFFQyxnQkFBZ0JDLENBQUMsRUFBRSxHQUFHQyxlQUFlLEdBQUdDLGtDQUFpQjtRQUNqRSxNQUFNQyxhQUFhLE1BQU1DLHVCQUFpQixDQUFDQyxhQUFhLENBQUNQLFFBQVFRLFVBQVU7UUFDM0UsZ0ZBQWdGO1FBQ2hGLCtFQUErRTtRQUMvRSxzRUFBc0U7UUFDdEUsTUFBTVAsaUJBQWlCSSxXQUFXSixjQUFjLEVBQUVRLFNBQy9DQyxZQUNBQyxzQ0FBcUI7UUFDeEIsT0FBT0Msc0JBQWdCLENBQUNDLE1BQU0sQ0FBQztZQUM5QixHQUFHVixhQUFhO1lBQ2hCLEdBQUlGLGlCQUFpQjtnQkFBRUE7WUFBZSxJQUFJLENBQUMsQ0FBQztZQUM1Q08sWUFBWVIsUUFBUVEsVUFBVTtZQUM5Qk0sU0FBU2QsUUFBUWMsT0FBTyxJQUFJVixrQ0FBaUIsQ0FBQ1UsT0FBTztRQUN0RDtJQUNEO0FBQ0QifQ==
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9mb3JnZS5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckNvbmZpZ0ZhY3RvcnksIFdvcmtzcGFjZUZhY3RvcnkgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlRmFjdG9yeU9wdGlvbnMgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgTW9kdWxlTWFuaWZlc3QgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXJCdWlsZGVyIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jb21wb3NpdGlvblwiO1xuaW1wb3J0ICogYXMgQWN0aW9ucyBmcm9tIFwiLi9hY3Rpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgKiBhcyBDb21tYW5kcyBmcm9tIFwiLi9jb21tYW5kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgRGVwZW5kZW5jeVJlc29sdmVyIH0gZnJvbSBcIi4vc2VydmljZXMvZGVwZW5kZW5jeS1yZXNvbHZlci5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBGaWxlV3JpdGVyU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL2ZpbGUtd3JpdGVyLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IFN3Y1RyYW5zcGlsZXIgfSBmcm9tIFwiLi9zZXJ2aWNlcy9zd2MtdHJhbnNwaWxlci5qc1wiO1xuaW1wb3J0IHsgVHlwZUVtaXR0ZXIgfSBmcm9tIFwiLi9zZXJ2aWNlcy90eXBlLWVtaXR0ZXIuanNcIjtcbmltcG9ydCB7IFRyYW5zZm9ybWVyS2V5IH0gZnJvbSBcIi4vdHlwZXMvdHJhbnNmb3JtZXIudHlwZS5qc1wiO1xuaW1wb3J0IHsgRGVmYXVsdENvbmZpZ3VyYXRpb25zLCBXb3Jrc3BhY2VEZWZhdWx0cyB9IGZyb20gXCIuL3dvcmtzcGFjZS5jb25maWcuanNcIjtcblxuZXhwb3J0IGNsYXNzIEZvcmdlTW9kdWxlIGV4dGVuZHMgTW9kdWxlTWFuaWZlc3Qge1xuXHRwdWJsaWMgcmVhZG9ubHkgaWQgPSBcImZvcmdlXCI7XG5cdHB1YmxpYyByZWFkb25seSBjb21tYW5kID0gQ29tbWFuZHMuRm9yZ2VDb21tYW5kO1xuXHRwdWJsaWMgcmVhZG9ubHkgYWN0aW9ucyA9IHtcblx0XHRjbGVhbjogQWN0aW9ucy5DbGVhbixcblx0XHRjb3B5OiBBY3Rpb25zLkNvcHksXG5cdFx0ZG9ja2VyOiBBY3Rpb25zLkRvY2tlcixcblx0XHRidWlsZDogQWN0aW9ucy5CdWlsZCxcblx0XHR3YXRjaDogQWN0aW9ucy5XYXRjaCxcblx0XHRwdWJsaXNoOiBBY3Rpb25zLlB1Ymxpc2gsXG5cdFx0c3luY0RlcGVuZGVuY2llczogQWN0aW9ucy5TeW5jRGVwZW5kZW5jaWVzLFxuXHRcdHN5bmNMb2NrRmlsZTogQWN0aW9ucy5TeW5jTG9ja0ZpbGUsXG5cdFx0cmVwb3J0RGVwZW5kZW5jaWVzOiBBY3Rpb25zLlJlcG9ydERlcGVuZGVuY2llcyxcblx0XHR2ZXJzaW9uOiBBY3Rpb25zLlZlcnNpb24sXG5cdFx0dGFnOiBBY3Rpb25zLlRhZyxcblx0XHRjb21taXRGaWxlczogQWN0aW9ucy5Db21taXRGaWxlcyxcblx0XHRsaW5rOiBBY3Rpb25zLkxpbmssXG5cdFx0dW5saW5rOiBBY3Rpb25zLlVubGluayxcblx0fTtcblx0cHVibGljIHJlYWRvbmx5IGNvbW1hbmRzID0ge1xuXHRcdGJ1aWxkOiBDb21tYW5kcy5CdWlsZENvbW1hbmQsXG5cdFx0cHVibGlzaDogQ29tbWFuZHMuUHVibGlzaENvbW1hbmQsXG5cdFx0ZGVwZW5kZW5jaWVzOiBDb21tYW5kcy5EZXBlbmRlbmN5Q29tbWFuZCxcblx0XHRkb2NrZXI6IENvbW1hbmRzLkRvY2tlckNvbW1hbmQsXG5cdFx0dmVyc2lvbjogQ29tbWFuZHMuVmVyc2lvbkNvbW1hbmQsXG5cdFx0dGFnOiBDb21tYW5kcy5UYWdDb21tYW5kLFxuXHRcdGxpbms6IENvbW1hbmRzLkxpbmtDb21tYW5kLFxuXHRcdHVubGluazogQ29tbWFuZHMuVW5saW5rQ29tbWFuZCxcblx0fTtcblxuXHRwdWJsaWMgcmVnaXN0ZXJTZXJ2aWNlcyhidWlsZGVyOiBDb250YWluZXJCdWlsZGVyKSB7XG5cdFx0YnVpbGRlci5yZWdpc3RlclNpbmdsZXRvbihUcmFuc2Zvcm1lcktleSwgU3djVHJhbnNwaWxlcik7XG5cdFx0YnVpbGRlci5yZWdpc3RlclNpbmdsZXRvbihUcmFuc2Zvcm1lcktleSwgVHlwZUVtaXR0ZXIpO1xuXHRcdGJ1aWxkZXIucmVnaXN0ZXJTaW5nbGV0b24oRGVwZW5kZW5jeVJlc29sdmVyKTtcblx0XHRidWlsZGVyLnJlZ2lzdGVyU2luZ2xldG9uKEZpbGVXcml0ZXJTZXJ2aWNlKTtcblx0fVxuXG5cdHB1YmxpYyBvdmVycmlkZSBhc3luYyBjcmVhdGVXb3Jrc3BhY2Uob3B0aW9uczogV29ya3NwYWNlRmFjdG9yeU9wdGlvbnMpIHtcblx0XHRjb25zdCB7IGNvbmZpZ3VyYXRpb25zOiBfLCAuLi5mb3JnZURlZmF1bHRzIH0gPSBXb3Jrc3BhY2VEZWZhdWx0cztcblx0XHRjb25zdCB1c2VyQ29uZmlnID0gYXdhaXQgVXNlckNvbmZpZ0ZhY3RvcnkuZ2V0VXNlckNvbmZpZyhvcHRpb25zLmNvbmZpZ0ZpbGUpO1xuXHRcdC8vIE9ubHkgYXBwbHkgZm9yZ2UgZGVmYXVsdCBjb25maWd1cmF0aW9ucyB3aGVuIHVzZXIgY29uZmlnIGRvZXNuJ3QgcHJvdmlkZSBhbnkuXG5cdFx0Ly8gVGhpcyBlbnN1cmVzIHVzZXItZGVmaW5lZCBjb25maWd1cmF0aW9ucyB0YWtlIHByaW9yaXR5IHdoaWxlIHN0aWxsIHByb3ZpZGluZ1xuXHRcdC8vIHNlbnNpYmxlIGRlZmF1bHRzIChkZWJ1ZyArIHJlbGVhc2UpIHdoZW4gbm8gY29uZmlnIGZpbGUgaXMgcHJlc2VudC5cblx0XHRjb25zdCBjb25maWd1cmF0aW9ucyA9IHVzZXJDb25maWcuY29uZmlndXJhdGlvbnM/Lmxlbmd0aFxuXHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdDogRGVmYXVsdENvbmZpZ3VyYXRpb25zO1xuXHRcdHJldHVybiBXb3Jrc3BhY2VGYWN0b3J5LmNyZWF0ZSh7XG5cdFx0XHQuLi5mb3JnZURlZmF1bHRzLFxuXHRcdFx0Li4uKGNvbmZpZ3VyYXRpb25zID8geyBjb25maWd1cmF0aW9ucyB9IDoge30pLFxuXHRcdFx0Y29uZmlnRmlsZTogb3B0aW9ucy5jb25maWdGaWxlLFxuXHRcdFx0cm9vdERpcjogb3B0aW9ucy5yb290RGlyID8/IFdvcmtzcGFjZURlZmF1bHRzLnJvb3REaXIsXG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJGb3JnZU1vZHVsZSIsIk1vZHVsZU1hbmlmZXN0IiwiaWQiLCJjb21tYW5kIiwiQ29tbWFuZHMiLCJGb3JnZUNvbW1hbmQiLCJhY3Rpb25zIiwiY2xlYW4iLCJBY3Rpb25zIiwiQ2xlYW4iLCJjb3B5IiwiQ29weSIsImRvY2tlciIsIkRvY2tlciIsImJ1aWxkIiwiQnVpbGQiLCJ3YXRjaCIsIldhdGNoIiwicHVibGlzaCIsIlB1Ymxpc2giLCJzeW5jRGVwZW5kZW5jaWVzIiwiU3luY0RlcGVuZGVuY2llcyIsInN5bmNMb2NrRmlsZSIsIlN5bmNMb2NrRmlsZSIsInJlcG9ydERlcGVuZGVuY2llcyIsIlJlcG9ydERlcGVuZGVuY2llcyIsInZlcnNpb24iLCJWZXJzaW9uIiwidGFnIiwiVGFnIiwiY29tbWl0RmlsZXMiLCJDb21taXRGaWxlcyIsImxpbmsiLCJMaW5rIiwidW5saW5rIiwiVW5saW5rIiwiY29tbWFuZHMiLCJCdWlsZENvbW1hbmQiLCJQdWJsaXNoQ29tbWFuZCIsImRlcGVuZGVuY2llcyIsIkRlcGVuZGVuY3lDb21tYW5kIiwiRG9ja2VyQ29tbWFuZCIsIlZlcnNpb25Db21tYW5kIiwiVGFnQ29tbWFuZCIsIkxpbmtDb21tYW5kIiwiVW5saW5rQ29tbWFuZCIsInJlZ2lzdGVyU2VydmljZXMiLCJidWlsZGVyIiwicmVnaXN0ZXJTaW5nbGV0b24iLCJUcmFuc2Zvcm1lcktleSIsIlN3Y1RyYW5zcGlsZXIiLCJUeXBlRW1pdHRlciIsIkRlcGVuZGVuY3lSZXNvbHZlciIsIkZpbGVXcml0ZXJTZXJ2aWNlIiwiY3JlYXRlV29ya3NwYWNlIiwib3B0aW9ucyIsImNvbmZpZ3VyYXRpb25zIiwiXyIsImZvcmdlRGVmYXVsdHMiLCJXb3Jrc3BhY2VEZWZhdWx0cyIsInVzZXJDb25maWciLCJVc2VyQ29uZmlnRmFjdG9yeSIsImdldFVzZXJDb25maWciLCJjb25maWdGaWxlIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiRGVmYXVsdENvbmZpZ3VyYXRpb25zIiwiV29ya3NwYWNlRmFjdG9yeSIsImNyZWF0ZSIsInJvb3REaXIiXSwibWFwcGluZ3MiOiI7Ozs7K0JBYWFBOzs7ZUFBQUE7OztzQkFidUM7cUJBRXJCOytEQUVOO2dFQUNDOzJDQUNTO21DQUNEOytCQUNKOzZCQUNGO2lDQUNHO2lDQUMwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWxELE1BQU1BLG9CQUFvQkMsbUJBQWM7SUFDOUJDLEtBQUssUUFBUTtJQUNiQyxVQUFVQyxRQUFTQyxZQUFZLENBQUM7SUFDaENDLFVBQVU7UUFDekJDLE9BQU9DLE9BQVFDLEtBQUs7UUFDcEJDLE1BQU1GLE9BQVFHLElBQUk7UUFDbEJDLFFBQVFKLE9BQVFLLE1BQU07UUFDdEJDLE9BQU9OLE9BQVFPLEtBQUs7UUFDcEJDLE9BQU9SLE9BQVFTLEtBQUs7UUFDcEJDLFNBQVNWLE9BQVFXLE9BQU87UUFDeEJDLGtCQUFrQlosT0FBUWEsZ0JBQWdCO1FBQzFDQyxjQUFjZCxPQUFRZSxZQUFZO1FBQ2xDQyxvQkFBb0JoQixPQUFRaUIsa0JBQWtCO1FBQzlDQyxTQUFTbEIsT0FBUW1CLE9BQU87UUFDeEJDLEtBQUtwQixPQUFRcUIsR0FBRztRQUNoQkMsYUFBYXRCLE9BQVF1QixXQUFXO1FBQ2hDQyxNQUFNeEIsT0FBUXlCLElBQUk7UUFDbEJDLFFBQVExQixPQUFRMkIsTUFBTTtJQUN2QixFQUFFO0lBQ2NDLFdBQVc7UUFDMUJ0QixPQUFPVixRQUFTaUMsWUFBWTtRQUM1Qm5CLFNBQVNkLFFBQVNrQyxjQUFjO1FBQ2hDQyxjQUFjbkMsUUFBU29DLGlCQUFpQjtRQUN4QzVCLFFBQVFSLFFBQVNxQyxhQUFhO1FBQzlCZixTQUFTdEIsUUFBU3NDLGNBQWM7UUFDaENkLEtBQUt4QixRQUFTdUMsVUFBVTtRQUN4QlgsTUFBTTVCLFFBQVN3QyxXQUFXO1FBQzFCVixRQUFROUIsUUFBU3lDLGFBQWE7SUFDL0IsRUFBRTtJQUVLQyxpQkFBaUJDLE9BQXlCLEVBQUU7UUFDbERBLFFBQVFDLGlCQUFpQixDQUFDQywrQkFBYyxFQUFFQyw0QkFBYTtRQUN2REgsUUFBUUMsaUJBQWlCLENBQUNDLCtCQUFjLEVBQUVFLHdCQUFXO1FBQ3JESixRQUFRQyxpQkFBaUIsQ0FBQ0ksNkNBQWtCO1FBQzVDTCxRQUFRQyxpQkFBaUIsQ0FBQ0ssb0NBQWlCO0lBQzVDO0lBRUEsTUFBc0JDLGdCQUFnQkMsT0FBZ0MsRUFBRTtRQUN2RSxNQUFNLEVBQUVDLGdCQUFnQkMsQ0FBQyxFQUFFLEdBQUdDLGVBQWUsR0FBR0Msa0NBQWlCO1FBQ2pFLE1BQU1DLGFBQWEsTUFBTUMsdUJBQWlCLENBQUNDLGFBQWEsQ0FBQ1AsUUFBUVEsVUFBVTtRQUMzRSxnRkFBZ0Y7UUFDaEYsK0VBQStFO1FBQy9FLHNFQUFzRTtRQUN0RSxNQUFNUCxpQkFBaUJJLFdBQVdKLGNBQWMsRUFBRVEsU0FDL0NDLFlBQ0FDLHNDQUFxQjtRQUN4QixPQUFPQyxzQkFBZ0IsQ0FBQ0MsTUFBTSxDQUFDO1lBQzlCLEdBQUdWLGFBQWE7WUFDaEIsR0FBSUYsaUJBQWlCO2dCQUFFQTtZQUFlLElBQUksQ0FBQyxDQUFDO1lBQzVDTyxZQUFZUixRQUFRUSxVQUFVO1lBQzlCTSxTQUFTZCxRQUFRYyxPQUFPLElBQUlWLGtDQUFpQixDQUFDVSxPQUFPO1FBQ3REO0lBQ0Q7QUFDRCJ9
@@ -0,0 +1,148 @@
1
+ function _ts_decorate(decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ }
7
+ function _ts_metadata(k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ }
10
+ import path from "node:path";
11
+ import { injectable } from "@decohere/crucible/decorators";
12
+ // biome-ignore lint/style/useImportType: <DI>
13
+ import { Workspace } from "@decohere/mesh";
14
+ import { ActionResponse } from "@decohere/nexus/cli";
15
+ import { Docker as DockerInterop } from "@decohere/nexus/interop";
16
+ import { io } from "@decohere/nexus/io";
17
+ import { scribe } from "@decohere/scribe";
18
+ import { ForgeError, formatUnknownError } from "../errors.js";
19
+ export class Docker {
20
+ workspace;
21
+ #logger = scribe.logger(Docker.name);
22
+ docker = new DockerInterop();
23
+ #defaultRegistry = process.env.FORGE_DOCKER_REGISTRY?.trim() || "ghcr.io";
24
+ constructor(workspace){
25
+ this.workspace = workspace;
26
+ }
27
+ async run(options) {
28
+ const projects = await this.getDockerProjects(this.workspace.getProjects(options.configuration));
29
+ if (projects.length === 0) {
30
+ throw new ForgeError(`No projects found with a Dockerfile`);
31
+ }
32
+ const version = await this.workspace.getVersion();
33
+ const responses = await Promise.all(projects.map(async (project)=>await this.buildProject(project, version, options)));
34
+ const failed = responses.filter((response)=>!response.succeeded);
35
+ if (failed.length > 0) {
36
+ return ActionResponse.Error(Docker.name, responses);
37
+ }
38
+ return ActionResponse.Success(Docker.name, responses);
39
+ }
40
+ async getDockerProjects(projects) {
41
+ const result = [];
42
+ for (const project of projects){
43
+ const dockerfile = project.dockerConfig?.dockerfile ?? "Dockerfile";
44
+ const dockerfilePath = path.join(project.projectRoot, dockerfile);
45
+ if (!await io.fileExists(dockerfilePath)) {
46
+ this.#logger.info(`Skipping ${project.name}: missing ${dockerfile}`);
47
+ continue;
48
+ }
49
+ result.push(project);
50
+ }
51
+ return result;
52
+ }
53
+ async buildProject(project, version, options) {
54
+ const dockerConfig = project.dockerConfig ?? {};
55
+ const envBuildArgs = this.parseJsonEnv("FORGE_DOCKER_BUILD_ARGS_JSON", {});
56
+ const envSecrets = this.parseJsonEnv("FORGE_DOCKER_SECRETS_JSON", {});
57
+ const envTags = this.parseJsonEnv("FORGE_DOCKER_EXTRA_TAGS_JSON", []);
58
+ const image = dockerConfig.image ?? this.defaultImageName(project.name);
59
+ const dockerfile = dockerConfig.dockerfile ?? "Dockerfile";
60
+ const tags = [
61
+ `${image}:${version}`,
62
+ ...dockerConfig.tags ?? [],
63
+ ...envTags
64
+ ];
65
+ const buildArgs = this.interpolateBuildArgs({
66
+ ...dockerConfig.buildArgs ?? {},
67
+ ...envBuildArgs
68
+ }, version);
69
+ const secrets = {
70
+ ...dockerConfig.secrets ?? {},
71
+ ...envSecrets
72
+ };
73
+ this.#logger.info(`${options.dryRun ? "[dry-run] " : ""}Building ${project.name}`);
74
+ try {
75
+ if (!options.dryRun) {
76
+ await this.docker.build(project.projectRoot, {
77
+ cwd: project.projectRoot,
78
+ dockerfile: path.join(project.projectRoot, dockerfile),
79
+ tags,
80
+ buildArgs,
81
+ secrets
82
+ });
83
+ if (options.push || dockerConfig.push) {
84
+ for (const tag of tags){
85
+ await this.docker.push(tag, {
86
+ cwd: project.projectRoot
87
+ });
88
+ }
89
+ }
90
+ }
91
+ return {
92
+ projectName: project.name,
93
+ image,
94
+ tags,
95
+ succeeded: true,
96
+ message: options.dryRun ? "Dry run" : `Built ${image}`
97
+ };
98
+ } catch (reason) {
99
+ const message = formatUnknownError(reason);
100
+ return {
101
+ projectName: project.name,
102
+ image,
103
+ tags,
104
+ succeeded: false,
105
+ message,
106
+ error: `${project.name}: ${message}`
107
+ };
108
+ }
109
+ }
110
+ interpolateBuildArgs(buildArgs, version) {
111
+ const result = {};
112
+ const versionPlaceholder = "$" + "{version}";
113
+ for (const [key, value] of Object.entries(buildArgs ?? {})){
114
+ result[key] = value.split(versionPlaceholder).join(version);
115
+ }
116
+ return result;
117
+ }
118
+ defaultImageName(projectName) {
119
+ return `${this.#defaultRegistry}/${this.normalizeDockerRepository(projectName)}`;
120
+ }
121
+ normalizeDockerRepository(name) {
122
+ const repository = name.replace(/^@/, "").split("/").map((segment)=>segment.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "")).filter(Boolean).join("/");
123
+ if (repository === "") {
124
+ throw new ForgeError(`Could not derive a Docker repository from project name "${name}"`);
125
+ }
126
+ return repository;
127
+ }
128
+ parseJsonEnv(name, fallback) {
129
+ const value = process.env[name];
130
+ if (value == null || value.trim() === "") {
131
+ return fallback;
132
+ }
133
+ try {
134
+ return JSON.parse(value);
135
+ } catch (reason) {
136
+ throw new ForgeError(`Invalid JSON in ${name}: ${formatUnknownError(reason)}`);
137
+ }
138
+ }
139
+ }
140
+ Docker = _ts_decorate([
141
+ injectable(),
142
+ _ts_metadata("design:type", Function),
143
+ _ts_metadata("design:paramtypes", [
144
+ typeof Workspace === "undefined" ? Object : Workspace
145
+ ])
146
+ ], Docker);
147
+
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2RvY2tlci5hY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uLCBSZXN1bHRTdGF0dXMgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgQWN0aW9uUmVzcG9uc2UgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgRG9ja2VyIGFzIERvY2tlckludGVyb3AgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2ludGVyb3BcIjtcbmltcG9ydCB7IGlvIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pb1wiO1xuaW1wb3J0IHsgc2NyaWJlIH0gZnJvbSBcIkBkZWNvaGVyZS9zY3JpYmVcIjtcbmltcG9ydCB7IEZvcmdlRXJyb3IsIGZvcm1hdFVua25vd25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnMuanNcIjtcblxuZXhwb3J0IHR5cGUgRG9ja2VyT3B0aW9ucyA9IHtcblx0Y29uZmlndXJhdGlvbjogc3RyaW5nO1xuXHRkcnlSdW4/OiBib29sZWFuO1xuXHRwdXNoPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIERvY2tlclJlc3BvbnNlID0gUmVzdWx0U3RhdHVzICYge1xuXHRwcm9qZWN0TmFtZTogc3RyaW5nO1xuXHRpbWFnZTogc3RyaW5nO1xuXHR0YWdzOiBzdHJpbmdbXTtcblx0bWVzc2FnZTogc3RyaW5nO1xufTtcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERvY2tlciBpbXBsZW1lbnRzIEFjdGlvbjxEb2NrZXJPcHRpb25zPiB7XG5cdCNsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKERvY2tlci5uYW1lKTtcblx0cHJpdmF0ZSByZWFkb25seSBkb2NrZXIgPSBuZXcgRG9ja2VySW50ZXJvcCgpO1xuXHRyZWFkb25seSAjZGVmYXVsdFJlZ2lzdHJ5ID0gcHJvY2Vzcy5lbnYuRk9SR0VfRE9DS0VSX1JFR0lTVFJZPy50cmltKCkgfHwgXCJnaGNyLmlvXCI7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgd29ya3NwYWNlOiBXb3Jrc3BhY2UpIHt9XG5cblx0cHVibGljIGFzeW5jIHJ1bihvcHRpb25zOiBEb2NrZXJPcHRpb25zKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZTxEb2NrZXJSZXNwb25zZT4+IHtcblx0XHRjb25zdCBwcm9qZWN0cyA9IGF3YWl0IHRoaXMuZ2V0RG9ja2VyUHJvamVjdHMoXG5cdFx0XHR0aGlzLndvcmtzcGFjZS5nZXRQcm9qZWN0cyhvcHRpb25zLmNvbmZpZ3VyYXRpb24pLFxuXHRcdCk7XG5cdFx0aWYgKHByb2plY3RzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoYE5vIHByb2plY3RzIGZvdW5kIHdpdGggYSBEb2NrZXJmaWxlYCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmVyc2lvbiA9IGF3YWl0IHRoaXMud29ya3NwYWNlLmdldFZlcnNpb24oKTtcblx0XHRjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdHByb2plY3RzLm1hcChhc3luYyAocHJvamVjdCkgPT4gYXdhaXQgdGhpcy5idWlsZFByb2plY3QocHJvamVjdCwgdmVyc2lvbiwgb3B0aW9ucykpLFxuXHRcdCk7XG5cdFx0Y29uc3QgZmFpbGVkID0gcmVzcG9uc2VzLmZpbHRlcigocmVzcG9uc2UpID0+ICFyZXNwb25zZS5zdWNjZWVkZWQpO1xuXHRcdGlmIChmYWlsZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLkVycm9yKERvY2tlci5uYW1lLCByZXNwb25zZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gQWN0aW9uUmVzcG9uc2UuU3VjY2VzcyhEb2NrZXIubmFtZSwgcmVzcG9uc2VzKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZ2V0RG9ja2VyUHJvamVjdHMocHJvamVjdHM6IHJlYWRvbmx5IFByb2plY3RbXSkge1xuXHRcdGNvbnN0IHJlc3VsdDogUHJvamVjdFtdID0gW107XG5cdFx0Zm9yIChjb25zdCBwcm9qZWN0IG9mIHByb2plY3RzKSB7XG5cdFx0XHRjb25zdCBkb2NrZXJmaWxlID0gcHJvamVjdC5kb2NrZXJDb25maWc/LmRvY2tlcmZpbGUgPz8gXCJEb2NrZXJmaWxlXCI7XG5cdFx0XHRjb25zdCBkb2NrZXJmaWxlUGF0aCA9IHBhdGguam9pbihwcm9qZWN0LnByb2plY3RSb290LCBkb2NrZXJmaWxlKTtcblx0XHRcdGlmICghKGF3YWl0IGlvLmZpbGVFeGlzdHMoZG9ja2VyZmlsZVBhdGgpKSkge1xuXHRcdFx0XHR0aGlzLiNsb2dnZXIuaW5mbyhgU2tpcHBpbmcgJHtwcm9qZWN0Lm5hbWV9OiBtaXNzaW5nICR7ZG9ja2VyZmlsZX1gKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdC5wdXNoKHByb2plY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBidWlsZFByb2plY3QoXG5cdFx0cHJvamVjdDogUHJvamVjdCxcblx0XHR2ZXJzaW9uOiBzdHJpbmcsXG5cdFx0b3B0aW9uczogRG9ja2VyT3B0aW9ucyxcblx0KTogUHJvbWlzZTxEb2NrZXJSZXNwb25zZT4ge1xuXHRcdGNvbnN0IGRvY2tlckNvbmZpZyA9IHByb2plY3QuZG9ja2VyQ29uZmlnID8/IHt9O1xuXHRcdGNvbnN0IGVudkJ1aWxkQXJncyA9IHRoaXMucGFyc2VKc29uRW52PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KFxuXHRcdFx0XCJGT1JHRV9ET0NLRVJfQlVJTERfQVJHU19KU09OXCIsXG5cdFx0XHR7fSxcblx0XHQpO1xuXHRcdGNvbnN0IGVudlNlY3JldHMgPSB0aGlzLnBhcnNlSnNvbkVudjxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pihcblx0XHRcdFwiRk9SR0VfRE9DS0VSX1NFQ1JFVFNfSlNPTlwiLFxuXHRcdFx0e30sXG5cdFx0KTtcblx0XHRjb25zdCBlbnZUYWdzID0gdGhpcy5wYXJzZUpzb25FbnY8c3RyaW5nW10+KFwiRk9SR0VfRE9DS0VSX0VYVFJBX1RBR1NfSlNPTlwiLCBbXSk7XG5cblx0XHRjb25zdCBpbWFnZSA9IGRvY2tlckNvbmZpZy5pbWFnZSA/PyB0aGlzLmRlZmF1bHRJbWFnZU5hbWUocHJvamVjdC5uYW1lKTtcblx0XHRjb25zdCBkb2NrZXJmaWxlID0gZG9ja2VyQ29uZmlnLmRvY2tlcmZpbGUgPz8gXCJEb2NrZXJmaWxlXCI7XG5cdFx0Y29uc3QgdGFncyA9IFtgJHtpbWFnZX06JHt2ZXJzaW9ufWAsIC4uLihkb2NrZXJDb25maWcudGFncyA/PyBbXSksIC4uLmVudlRhZ3NdO1xuXHRcdGNvbnN0IGJ1aWxkQXJncyA9IHRoaXMuaW50ZXJwb2xhdGVCdWlsZEFyZ3MoXG5cdFx0XHR7IC4uLihkb2NrZXJDb25maWcuYnVpbGRBcmdzID8/IHt9KSwgLi4uZW52QnVpbGRBcmdzIH0sXG5cdFx0XHR2ZXJzaW9uLFxuXHRcdCk7XG5cdFx0Y29uc3Qgc2VjcmV0cyA9IHsgLi4uKGRvY2tlckNvbmZpZy5zZWNyZXRzID8/IHt9KSwgLi4uZW52U2VjcmV0cyB9O1xuXG5cdFx0dGhpcy4jbG9nZ2VyLmluZm8oYCR7b3B0aW9ucy5kcnlSdW4gPyBcIltkcnktcnVuXSBcIiA6IFwiXCJ9QnVpbGRpbmcgJHtwcm9qZWN0Lm5hbWV9YCk7XG5cdFx0dHJ5IHtcblx0XHRcdGlmICghb3B0aW9ucy5kcnlSdW4pIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5kb2NrZXIuYnVpbGQocHJvamVjdC5wcm9qZWN0Um9vdCwge1xuXHRcdFx0XHRcdGN3ZDogcHJvamVjdC5wcm9qZWN0Um9vdCxcblx0XHRcdFx0XHRkb2NrZXJmaWxlOiBwYXRoLmpvaW4ocHJvamVjdC5wcm9qZWN0Um9vdCwgZG9ja2VyZmlsZSksXG5cdFx0XHRcdFx0dGFncyxcblx0XHRcdFx0XHRidWlsZEFyZ3MsXG5cdFx0XHRcdFx0c2VjcmV0cyxcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKG9wdGlvbnMucHVzaCB8fCBkb2NrZXJDb25maWcucHVzaCkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuZG9ja2VyLnB1c2godGFnLCB7IGN3ZDogcHJvamVjdC5wcm9qZWN0Um9vdCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cHJvamVjdE5hbWU6IHByb2plY3QubmFtZSxcblx0XHRcdFx0aW1hZ2UsXG5cdFx0XHRcdHRhZ3MsXG5cdFx0XHRcdHN1Y2NlZWRlZDogdHJ1ZSxcblx0XHRcdFx0bWVzc2FnZTogb3B0aW9ucy5kcnlSdW4gPyBcIkRyeSBydW5cIiA6IGBCdWlsdCAke2ltYWdlfWAsXG5cdFx0XHR9O1xuXHRcdH0gY2F0Y2ggKHJlYXNvbikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGZvcm1hdFVua25vd25FcnJvcihyZWFzb24pO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cHJvamVjdE5hbWU6IHByb2plY3QubmFtZSxcblx0XHRcdFx0aW1hZ2UsXG5cdFx0XHRcdHRhZ3MsXG5cdFx0XHRcdHN1Y2NlZWRlZDogZmFsc2UsXG5cdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdGVycm9yOiBgJHtwcm9qZWN0Lm5hbWV9OiAke21lc3NhZ2V9YCxcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpbnRlcnBvbGF0ZUJ1aWxkQXJncyhcblx0XHRidWlsZEFyZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQsXG5cdFx0dmVyc2lvbjogc3RyaW5nLFxuXHQpIHtcblx0XHRjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRjb25zdCB2ZXJzaW9uUGxhY2Vob2xkZXIgPSBcIiRcIiArIFwie3ZlcnNpb259XCI7XG5cdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYnVpbGRBcmdzID8/IHt9KSkge1xuXHRcdFx0cmVzdWx0W2tleV0gPSB2YWx1ZS5zcGxpdCh2ZXJzaW9uUGxhY2Vob2xkZXIpLmpvaW4odmVyc2lvbik7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcml2YXRlIGRlZmF1bHRJbWFnZU5hbWUocHJvamVjdE5hbWU6IHN0cmluZykge1xuXHRcdHJldHVybiBgJHt0aGlzLiNkZWZhdWx0UmVnaXN0cnl9LyR7dGhpcy5ub3JtYWxpemVEb2NrZXJSZXBvc2l0b3J5KHByb2plY3ROYW1lKX1gO1xuXHR9XG5cblx0cHJpdmF0ZSBub3JtYWxpemVEb2NrZXJSZXBvc2l0b3J5KG5hbWU6IHN0cmluZykge1xuXHRcdGNvbnN0IHJlcG9zaXRvcnkgPSBuYW1lXG5cdFx0XHQucmVwbGFjZSgvXkAvLCBcIlwiKVxuXHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0Lm1hcCgoc2VnbWVudCkgPT5cblx0XHRcdFx0c2VnbWVudFxuXHRcdFx0XHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdFx0LnJlcGxhY2UoL1teYS16MC05XSsvZywgXCItXCIpXG5cdFx0XHRcdFx0LnJlcGxhY2UoL14tK3wtKyQvZywgXCJcIiksXG5cdFx0XHQpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pXG5cdFx0XHQuam9pbihcIi9cIik7XG5cblx0XHRpZiAocmVwb3NpdG9yeSA9PT0gXCJcIikge1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoYENvdWxkIG5vdCBkZXJpdmUgYSBEb2NrZXIgcmVwb3NpdG9yeSBmcm9tIHByb2plY3QgbmFtZSBcIiR7bmFtZX1cImApO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXBvc2l0b3J5O1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUpzb25FbnY8VD4obmFtZTogc3RyaW5nLCBmYWxsYmFjazogVCk6IFQge1xuXHRcdGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnZbbmFtZV07XG5cdFx0aWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUudHJpbSgpID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsbGJhY2s7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBKU09OLnBhcnNlKHZhbHVlKSBhcyBUO1xuXHRcdH0gY2F0Y2ggKHJlYXNvbikge1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoYEludmFsaWQgSlNPTiBpbiAke25hbWV9OiAke2Zvcm1hdFVua25vd25FcnJvcihyZWFzb24pfWApO1xuXHRcdH1cblx0fVxufVxuIl0sIm5hbWVzIjpbInBhdGgiLCJpbmplY3RhYmxlIiwiV29ya3NwYWNlIiwiQWN0aW9uUmVzcG9uc2UiLCJEb2NrZXIiLCJEb2NrZXJJbnRlcm9wIiwiaW8iLCJzY3JpYmUiLCJGb3JnZUVycm9yIiwiZm9ybWF0VW5rbm93bkVycm9yIiwibG9nZ2VyIiwibmFtZSIsImRvY2tlciIsInByb2Nlc3MiLCJlbnYiLCJGT1JHRV9ET0NLRVJfUkVHSVNUUlkiLCJ0cmltIiwid29ya3NwYWNlIiwicnVuIiwib3B0aW9ucyIsInByb2plY3RzIiwiZ2V0RG9ja2VyUHJvamVjdHMiLCJnZXRQcm9qZWN0cyIsImNvbmZpZ3VyYXRpb24iLCJsZW5ndGgiLCJ2ZXJzaW9uIiwiZ2V0VmVyc2lvbiIsInJlc3BvbnNlcyIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJwcm9qZWN0IiwiYnVpbGRQcm9qZWN0IiwiZmFpbGVkIiwiZmlsdGVyIiwicmVzcG9uc2UiLCJzdWNjZWVkZWQiLCJFcnJvciIsIlN1Y2Nlc3MiLCJyZXN1bHQiLCJkb2NrZXJmaWxlIiwiZG9ja2VyQ29uZmlnIiwiZG9ja2VyZmlsZVBhdGgiLCJqb2luIiwicHJvamVjdFJvb3QiLCJmaWxlRXhpc3RzIiwiaW5mbyIsInB1c2giLCJlbnZCdWlsZEFyZ3MiLCJwYXJzZUpzb25FbnYiLCJlbnZTZWNyZXRzIiwiZW52VGFncyIsImltYWdlIiwiZGVmYXVsdEltYWdlTmFtZSIsInRhZ3MiLCJidWlsZEFyZ3MiLCJpbnRlcnBvbGF0ZUJ1aWxkQXJncyIsInNlY3JldHMiLCJkcnlSdW4iLCJidWlsZCIsImN3ZCIsInRhZyIsInByb2plY3ROYW1lIiwibWVzc2FnZSIsInJlYXNvbiIsImVycm9yIiwidmVyc2lvblBsYWNlaG9sZGVyIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwic3BsaXQiLCJub3JtYWxpemVEb2NrZXJSZXBvc2l0b3J5IiwicmVwb3NpdG9yeSIsInJlcGxhY2UiLCJzZWdtZW50IiwidG9Mb3dlckNhc2UiLCJCb29sZWFuIiwiZmFsbGJhY2siLCJKU09OIiwicGFyc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU9BLFVBQVUsWUFBWTtBQUM3QixTQUFTQyxVQUFVLFFBQVEsZ0NBQWdDO0FBRTNELDhDQUE4QztBQUM5QyxTQUFTQyxTQUFTLFFBQVEsaUJBQWlCO0FBRTNDLFNBQVNDLGNBQWMsUUFBUSxzQkFBc0I7QUFDckQsU0FBU0MsVUFBVUMsYUFBYSxRQUFRLDBCQUEwQjtBQUNsRSxTQUFTQyxFQUFFLFFBQVEscUJBQXFCO0FBQ3hDLFNBQVNDLE1BQU0sUUFBUSxtQkFBbUI7QUFDMUMsU0FBU0MsVUFBVSxFQUFFQyxrQkFBa0IsUUFBUSxlQUFlO0FBZ0I5RCxPQUFPLE1BQU1MOztJQUNaLENBQUEsTUFBTyxHQUFHRyxPQUFPRyxNQUFNLENBQUNOLE9BQU9PLElBQUksRUFBRTtJQUNwQkMsU0FBUyxJQUFJUCxnQkFBZ0I7SUFDckMsQ0FBQSxlQUFnQixHQUFHUSxRQUFRQyxHQUFHLENBQUNDLHFCQUFxQixFQUFFQyxVQUFVLFVBQVU7SUFFbkYsWUFBbUIsQUFBaUJDLFNBQW9CLENBQUU7YUFBdEJBLFlBQUFBO0lBQXVCO0lBRTNELE1BQWFDLElBQUlDLE9BQXNCLEVBQTJDO1FBQ2pGLE1BQU1DLFdBQVcsTUFBTSxJQUFJLENBQUNDLGlCQUFpQixDQUM1QyxJQUFJLENBQUNKLFNBQVMsQ0FBQ0ssV0FBVyxDQUFDSCxRQUFRSSxhQUFhO1FBRWpELElBQUlILFNBQVNJLE1BQU0sS0FBSyxHQUFHO1lBQzFCLE1BQU0sSUFBSWhCLFdBQVcsQ0FBQyxtQ0FBbUMsQ0FBQztRQUMzRDtRQUVBLE1BQU1pQixVQUFVLE1BQU0sSUFBSSxDQUFDUixTQUFTLENBQUNTLFVBQVU7UUFDL0MsTUFBTUMsWUFBWSxNQUFNQyxRQUFRQyxHQUFHLENBQ2xDVCxTQUFTVSxHQUFHLENBQUMsT0FBT0MsVUFBWSxNQUFNLElBQUksQ0FBQ0MsWUFBWSxDQUFDRCxTQUFTTixTQUFTTjtRQUUzRSxNQUFNYyxTQUFTTixVQUFVTyxNQUFNLENBQUMsQ0FBQ0MsV0FBYSxDQUFDQSxTQUFTQyxTQUFTO1FBQ2pFLElBQUlILE9BQU9ULE1BQU0sR0FBRyxHQUFHO1lBQ3RCLE9BQU9yQixlQUFla0MsS0FBSyxDQUFDakMsT0FBT08sSUFBSSxFQUFFZ0I7UUFDMUM7UUFDQSxPQUFPeEIsZUFBZW1DLE9BQU8sQ0FBQ2xDLE9BQU9PLElBQUksRUFBRWdCO0lBQzVDO0lBRUEsTUFBY04sa0JBQWtCRCxRQUE0QixFQUFFO1FBQzdELE1BQU1tQixTQUFvQixFQUFFO1FBQzVCLEtBQUssTUFBTVIsV0FBV1gsU0FBVTtZQUMvQixNQUFNb0IsYUFBYVQsUUFBUVUsWUFBWSxFQUFFRCxjQUFjO1lBQ3ZELE1BQU1FLGlCQUFpQjFDLEtBQUsyQyxJQUFJLENBQUNaLFFBQVFhLFdBQVcsRUFBRUo7WUFDdEQsSUFBSSxDQUFFLE1BQU1sQyxHQUFHdUMsVUFBVSxDQUFDSCxpQkFBa0I7Z0JBQzNDLElBQUksQ0FBQyxDQUFBLE1BQU8sQ0FBQ0ksSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFZixRQUFRcEIsSUFBSSxDQUFDLFVBQVUsRUFBRTZCLFlBQVk7Z0JBQ25FO1lBQ0Q7WUFFQUQsT0FBT1EsSUFBSSxDQUFDaEI7UUFDYjtRQUNBLE9BQU9RO0lBQ1I7SUFFQSxNQUFjUCxhQUNiRCxPQUFnQixFQUNoQk4sT0FBZSxFQUNmTixPQUFzQixFQUNJO1FBQzFCLE1BQU1zQixlQUFlVixRQUFRVSxZQUFZLElBQUksQ0FBQztRQUM5QyxNQUFNTyxlQUFlLElBQUksQ0FBQ0MsWUFBWSxDQUNyQyxnQ0FDQSxDQUFDO1FBRUYsTUFBTUMsYUFBYSxJQUFJLENBQUNELFlBQVksQ0FDbkMsNkJBQ0EsQ0FBQztRQUVGLE1BQU1FLFVBQVUsSUFBSSxDQUFDRixZQUFZLENBQVcsZ0NBQWdDLEVBQUU7UUFFOUUsTUFBTUcsUUFBUVgsYUFBYVcsS0FBSyxJQUFJLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUN0QixRQUFRcEIsSUFBSTtRQUN0RSxNQUFNNkIsYUFBYUMsYUFBYUQsVUFBVSxJQUFJO1FBQzlDLE1BQU1jLE9BQU87WUFBQyxHQUFHRixNQUFNLENBQUMsRUFBRTNCLFNBQVM7ZUFBTWdCLGFBQWFhLElBQUksSUFBSSxFQUFFO2VBQU1IO1NBQVE7UUFDOUUsTUFBTUksWUFBWSxJQUFJLENBQUNDLG9CQUFvQixDQUMxQztZQUFFLEdBQUlmLGFBQWFjLFNBQVMsSUFBSSxDQUFDLENBQUM7WUFBRyxHQUFHUCxZQUFZO1FBQUMsR0FDckR2QjtRQUVELE1BQU1nQyxVQUFVO1lBQUUsR0FBSWhCLGFBQWFnQixPQUFPLElBQUksQ0FBQyxDQUFDO1lBQUcsR0FBR1AsVUFBVTtRQUFDO1FBRWpFLElBQUksQ0FBQyxDQUFBLE1BQU8sQ0FBQ0osSUFBSSxDQUFDLEdBQUczQixRQUFRdUMsTUFBTSxHQUFHLGVBQWUsR0FBRyxTQUFTLEVBQUUzQixRQUFRcEIsSUFBSSxFQUFFO1FBQ2pGLElBQUk7WUFDSCxJQUFJLENBQUNRLFFBQVF1QyxNQUFNLEVBQUU7Z0JBQ3BCLE1BQU0sSUFBSSxDQUFDOUMsTUFBTSxDQUFDK0MsS0FBSyxDQUFDNUIsUUFBUWEsV0FBVyxFQUFFO29CQUM1Q2dCLEtBQUs3QixRQUFRYSxXQUFXO29CQUN4QkosWUFBWXhDLEtBQUsyQyxJQUFJLENBQUNaLFFBQVFhLFdBQVcsRUFBRUo7b0JBQzNDYztvQkFDQUM7b0JBQ0FFO2dCQUNEO2dCQUVBLElBQUl0QyxRQUFRNEIsSUFBSSxJQUFJTixhQUFhTSxJQUFJLEVBQUU7b0JBQ3RDLEtBQUssTUFBTWMsT0FBT1AsS0FBTTt3QkFDdkIsTUFBTSxJQUFJLENBQUMxQyxNQUFNLENBQUNtQyxJQUFJLENBQUNjLEtBQUs7NEJBQUVELEtBQUs3QixRQUFRYSxXQUFXO3dCQUFDO29CQUN4RDtnQkFDRDtZQUNEO1lBRUEsT0FBTztnQkFDTmtCLGFBQWEvQixRQUFRcEIsSUFBSTtnQkFDekJ5QztnQkFDQUU7Z0JBQ0FsQixXQUFXO2dCQUNYMkIsU0FBUzVDLFFBQVF1QyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRU4sT0FBTztZQUN2RDtRQUNELEVBQUUsT0FBT1ksUUFBUTtZQUNoQixNQUFNRCxVQUFVdEQsbUJBQW1CdUQ7WUFDbkMsT0FBTztnQkFDTkYsYUFBYS9CLFFBQVFwQixJQUFJO2dCQUN6QnlDO2dCQUNBRTtnQkFDQWxCLFdBQVc7Z0JBQ1gyQjtnQkFDQUUsT0FBTyxHQUFHbEMsUUFBUXBCLElBQUksQ0FBQyxFQUFFLEVBQUVvRCxTQUFTO1lBQ3JDO1FBQ0Q7SUFDRDtJQUVRUCxxQkFDUEQsU0FBNkMsRUFDN0M5QixPQUFlLEVBQ2Q7UUFDRCxNQUFNYyxTQUFpQyxDQUFDO1FBQ3hDLE1BQU0yQixxQkFBcUIsTUFBTTtRQUNqQyxLQUFLLE1BQU0sQ0FBQ0MsS0FBS0MsTUFBTSxJQUFJQyxPQUFPQyxPQUFPLENBQUNmLGFBQWEsQ0FBQyxHQUFJO1lBQzNEaEIsTUFBTSxDQUFDNEIsSUFBSSxHQUFHQyxNQUFNRyxLQUFLLENBQUNMLG9CQUFvQnZCLElBQUksQ0FBQ2xCO1FBQ3BEO1FBQ0EsT0FBT2M7SUFDUjtJQUVRYyxpQkFBaUJTLFdBQW1CLEVBQUU7UUFDN0MsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFBLGVBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ1UseUJBQXlCLENBQUNWLGNBQWM7SUFDakY7SUFFUVUsMEJBQTBCN0QsSUFBWSxFQUFFO1FBQy9DLE1BQU04RCxhQUFhOUQsS0FDakIrRCxPQUFPLENBQUMsTUFBTSxJQUNkSCxLQUFLLENBQUMsS0FDTnpDLEdBQUcsQ0FBQyxDQUFDNkMsVUFDTEEsUUFDRUMsV0FBVyxHQUNYRixPQUFPLENBQUMsZUFBZSxLQUN2QkEsT0FBTyxDQUFDLFlBQVksS0FFdEJ4QyxNQUFNLENBQUMyQyxTQUNQbEMsSUFBSSxDQUFDO1FBRVAsSUFBSThCLGVBQWUsSUFBSTtZQUN0QixNQUFNLElBQUlqRSxXQUFXLENBQUMsd0RBQXdELEVBQUVHLEtBQUssQ0FBQyxDQUFDO1FBQ3hGO1FBRUEsT0FBTzhEO0lBQ1I7SUFFUXhCLGFBQWdCdEMsSUFBWSxFQUFFbUUsUUFBVyxFQUFLO1FBQ3JELE1BQU1WLFFBQVF2RCxRQUFRQyxHQUFHLENBQUNILEtBQUs7UUFDL0IsSUFBSXlELFNBQVMsUUFBUUEsTUFBTXBELElBQUksT0FBTyxJQUFJO1lBQ3pDLE9BQU84RDtRQUNSO1FBRUEsSUFBSTtZQUNILE9BQU9DLEtBQUtDLEtBQUssQ0FBQ1o7UUFDbkIsRUFBRSxPQUFPSixRQUFRO1lBQ2hCLE1BQU0sSUFBSXhELFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRUcsS0FBSyxFQUFFLEVBQUVGLG1CQUFtQnVELFNBQVM7UUFDOUU7SUFDRDtBQUNEIn0=
@@ -4,6 +4,7 @@ export * from "./commit.action.js";
4
4
  export * from "./copy.action.js";
5
5
  export * from "./dependency-report.action.js";
6
6
  export * from "./dependency-sync.action.js";
7
+ export * from "./docker.action.js";
7
8
  export * from "./link.action.js";
8
9
  export * from "./publish.action.js";
9
10
  export * from "./sync-lock-file.action.js";
@@ -12,4 +13,4 @@ export * from "./unlink.action.js";
12
13
  export * from "./version.action.js";
13
14
  export * from "./watch.action.js";
14
15
 
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2J1aWxkLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2xlYW4uYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21taXQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb3B5LmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVwZW5kZW5jeS1yZXBvcnQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZXBlbmRlbmN5LXN5bmMuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saW5rLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHVibGlzaC5hY3Rpb24uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N5bmMtbG9jay1maWxlLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGFnLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdW5saW5rLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmVyc2lvbi5hY3Rpb24uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3dhdGNoLmFjdGlvbi5qc1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CO0FBQ2xDLGNBQWMsb0JBQW9CO0FBQ2xDLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsbUJBQW1CO0FBQ2pDLGNBQWMsZ0NBQWdDO0FBQzlDLGNBQWMsOEJBQThCO0FBQzVDLGNBQWMsbUJBQW1CO0FBQ2pDLGNBQWMsc0JBQXNCO0FBQ3BDLGNBQWMsNkJBQTZCO0FBQzNDLGNBQWMsa0JBQWtCO0FBQ2hDLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsc0JBQXNCO0FBQ3BDLGNBQWMsb0JBQW9CIn0=
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2J1aWxkLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2xlYW4uYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21taXQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb3B5LmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVwZW5kZW5jeS1yZXBvcnQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZXBlbmRlbmN5LXN5bmMuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kb2NrZXIuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saW5rLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHVibGlzaC5hY3Rpb24uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N5bmMtbG9jay1maWxlLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGFnLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdW5saW5rLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmVyc2lvbi5hY3Rpb24uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3dhdGNoLmFjdGlvbi5qc1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CO0FBQ2xDLGNBQWMsb0JBQW9CO0FBQ2xDLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsbUJBQW1CO0FBQ2pDLGNBQWMsZ0NBQWdDO0FBQzlDLGNBQWMsOEJBQThCO0FBQzVDLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsbUJBQW1CO0FBQ2pDLGNBQWMsc0JBQXNCO0FBQ3BDLGNBQWMsNkJBQTZCO0FBQzNDLGNBQWMsa0JBQWtCO0FBQ2hDLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsc0JBQXNCO0FBQ3BDLGNBQWMsb0JBQW9CIn0=
@@ -0,0 +1,18 @@
1
+ import { ConfigurationOption, DecohereCommand, DryRunOption } from "@decohere/nexus/cli";
2
+ import { Docker } from "../actions/docker.action.js";
3
+ export class DockerCommand extends DecohereCommand {
4
+ get actions() {
5
+ return [
6
+ Docker
7
+ ];
8
+ }
9
+ constructor(name){
10
+ super(name);
11
+ this.description("Build Docker images for workspace projects");
12
+ this.addOption(new ConfigurationOption("release"));
13
+ this.addOption(new DryRunOption("Run docker build without executing it"));
14
+ this.option("--push", "Push built images after a successful build", false);
15
+ }
16
+ }
17
+
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9jb21tYW5kcy9kb2NrZXIuY29tbWFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWd1cmF0aW9uT3B0aW9uLCBEZWNvaGVyZUNvbW1hbmQsIERyeVJ1bk9wdGlvbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBEb2NrZXIgfSBmcm9tIFwiLi4vYWN0aW9ucy9kb2NrZXIuYWN0aW9uLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2NrZXJDb21tYW5kIGV4dGVuZHMgRGVjb2hlcmVDb21tYW5kIHtcblx0cHVibGljIG92ZXJyaWRlIGdldCBhY3Rpb25zKCkge1xuXHRcdHJldHVybiBbRG9ja2VyXTtcblx0fVxuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcblx0XHRzdXBlcihuYW1lKTtcblx0XHR0aGlzLmRlc2NyaXB0aW9uKFwiQnVpbGQgRG9ja2VyIGltYWdlcyBmb3Igd29ya3NwYWNlIHByb2plY3RzXCIpO1xuXHRcdHRoaXMuYWRkT3B0aW9uKG5ldyBDb25maWd1cmF0aW9uT3B0aW9uKFwicmVsZWFzZVwiKSk7XG5cdFx0dGhpcy5hZGRPcHRpb24obmV3IERyeVJ1bk9wdGlvbihcIlJ1biBkb2NrZXIgYnVpbGQgd2l0aG91dCBleGVjdXRpbmcgaXRcIikpO1xuXHRcdHRoaXMub3B0aW9uKFwiLS1wdXNoXCIsIFwiUHVzaCBidWlsdCBpbWFnZXMgYWZ0ZXIgYSBzdWNjZXNzZnVsIGJ1aWxkXCIsIGZhbHNlKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkNvbmZpZ3VyYXRpb25PcHRpb24iLCJEZWNvaGVyZUNvbW1hbmQiLCJEcnlSdW5PcHRpb24iLCJEb2NrZXIiLCJEb2NrZXJDb21tYW5kIiwiYWN0aW9ucyIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImFkZE9wdGlvbiIsIm9wdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsbUJBQW1CLEVBQUVDLGVBQWUsRUFBRUMsWUFBWSxRQUFRLHNCQUFzQjtBQUN6RixTQUFTQyxNQUFNLFFBQVEsOEJBQThCO0FBRXJELE9BQU8sTUFBTUMsc0JBQXNCSDtJQUNsQyxJQUFvQkksVUFBVTtRQUM3QixPQUFPO1lBQUNGO1NBQU87SUFDaEI7SUFFQSxZQUFtQkcsSUFBWSxDQUFFO1FBQ2hDLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNDLFdBQVcsQ0FBQztRQUNqQixJQUFJLENBQUNDLFNBQVMsQ0FBQyxJQUFJUixvQkFBb0I7UUFDdkMsSUFBSSxDQUFDUSxTQUFTLENBQUMsSUFBSU4sYUFBYTtRQUNoQyxJQUFJLENBQUNPLE1BQU0sQ0FBQyxVQUFVLDhDQUE4QztJQUNyRTtBQUNEIn0=
@@ -1,9 +1,10 @@
1
1
  export * from "./build.command.js";
2
2
  export * from "./dependency.command.js";
3
+ export * from "./docker.command.js";
3
4
  export * from "./forge.command.js";
4
5
  export * from "./link.command.js";
5
6
  export * from "./publish.command.js";
6
7
  export * from "./tag.command.js";
7
8
  export * from "./version.command.js";
8
9
 
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9jb21tYW5kcy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9idWlsZC5jb21tYW5kLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZXBlbmRlbmN5LmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2ZvcmdlLmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpbmsuY29tbWFuZC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHVibGlzaC5jb21tYW5kLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90YWcuY29tbWFuZC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmVyc2lvbi5jb21tYW5kLmpzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxvQkFBb0I7QUFDbEMsY0FBYyx1QkFBdUI7QUFDckMsY0FBYyxtQkFBbUI7QUFDakMsY0FBYyx1QkFBdUIifQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9jb21tYW5kcy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9idWlsZC5jb21tYW5kLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZXBlbmRlbmN5LmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RvY2tlci5jb21tYW5kLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mb3JnZS5jb21tYW5kLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saW5rLmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3B1Ymxpc2guY29tbWFuZC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGFnLmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZlcnNpb24uY29tbWFuZC5qc1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsMEJBQTBCO0FBQ3hDLGNBQWMsc0JBQXNCO0FBQ3BDLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsb0JBQW9CO0FBQ2xDLGNBQWMsdUJBQXVCO0FBQ3JDLGNBQWMsbUJBQW1CO0FBQ2pDLGNBQWMsdUJBQXVCIn0=
@@ -14,6 +14,7 @@ export class ForgeModule extends ModuleManifest {
14
14
  actions = {
15
15
  clean: Actions.Clean,
16
16
  copy: Actions.Copy,
17
+ docker: Actions.Docker,
17
18
  build: Actions.Build,
18
19
  watch: Actions.Watch,
19
20
  publish: Actions.Publish,
@@ -30,6 +31,7 @@ export class ForgeModule extends ModuleManifest {
30
31
  build: Commands.BuildCommand,
31
32
  publish: Commands.PublishCommand,
32
33
  dependencies: Commands.DependencyCommand,
34
+ docker: Commands.DockerCommand,
33
35
  version: Commands.VersionCommand,
34
36
  tag: Commands.TagCommand,
35
37
  link: Commands.LinkCommand,
@@ -59,4 +61,4 @@ export class ForgeModule extends ModuleManifest {
59
61
  }
60
62
  }
61
63
 
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9mb3JnZS5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckNvbmZpZ0ZhY3RvcnksIFdvcmtzcGFjZUZhY3RvcnkgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlRmFjdG9yeU9wdGlvbnMgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgTW9kdWxlTWFuaWZlc3QgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXJCdWlsZGVyIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jb21wb3NpdGlvblwiO1xuaW1wb3J0ICogYXMgQWN0aW9ucyBmcm9tIFwiLi9hY3Rpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgKiBhcyBDb21tYW5kcyBmcm9tIFwiLi9jb21tYW5kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgRGVwZW5kZW5jeVJlc29sdmVyIH0gZnJvbSBcIi4vc2VydmljZXMvZGVwZW5kZW5jeS1yZXNvbHZlci5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBGaWxlV3JpdGVyU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL2ZpbGUtd3JpdGVyLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IFN3Y1RyYW5zcGlsZXIgfSBmcm9tIFwiLi9zZXJ2aWNlcy9zd2MtdHJhbnNwaWxlci5qc1wiO1xuaW1wb3J0IHsgVHlwZUVtaXR0ZXIgfSBmcm9tIFwiLi9zZXJ2aWNlcy90eXBlLWVtaXR0ZXIuanNcIjtcbmltcG9ydCB7IFRyYW5zZm9ybWVyS2V5IH0gZnJvbSBcIi4vdHlwZXMvdHJhbnNmb3JtZXIudHlwZS5qc1wiO1xuaW1wb3J0IHsgRGVmYXVsdENvbmZpZ3VyYXRpb25zLCBXb3Jrc3BhY2VEZWZhdWx0cyB9IGZyb20gXCIuL3dvcmtzcGFjZS5jb25maWcuanNcIjtcblxuZXhwb3J0IGNsYXNzIEZvcmdlTW9kdWxlIGV4dGVuZHMgTW9kdWxlTWFuaWZlc3Qge1xuXHRwdWJsaWMgcmVhZG9ubHkgaWQgPSBcImZvcmdlXCI7XG5cdHB1YmxpYyByZWFkb25seSBjb21tYW5kID0gQ29tbWFuZHMuRm9yZ2VDb21tYW5kO1xuXHRwdWJsaWMgcmVhZG9ubHkgYWN0aW9ucyA9IHtcblx0XHRjbGVhbjogQWN0aW9ucy5DbGVhbixcblx0XHRjb3B5OiBBY3Rpb25zLkNvcHksXG5cdFx0YnVpbGQ6IEFjdGlvbnMuQnVpbGQsXG5cdFx0d2F0Y2g6IEFjdGlvbnMuV2F0Y2gsXG5cdFx0cHVibGlzaDogQWN0aW9ucy5QdWJsaXNoLFxuXHRcdHN5bmNEZXBlbmRlbmNpZXM6IEFjdGlvbnMuU3luY0RlcGVuZGVuY2llcyxcblx0XHRzeW5jTG9ja0ZpbGU6IEFjdGlvbnMuU3luY0xvY2tGaWxlLFxuXHRcdHJlcG9ydERlcGVuZGVuY2llczogQWN0aW9ucy5SZXBvcnREZXBlbmRlbmNpZXMsXG5cdFx0dmVyc2lvbjogQWN0aW9ucy5WZXJzaW9uLFxuXHRcdHRhZzogQWN0aW9ucy5UYWcsXG5cdFx0Y29tbWl0RmlsZXM6IEFjdGlvbnMuQ29tbWl0RmlsZXMsXG5cdFx0bGluazogQWN0aW9ucy5MaW5rLFxuXHRcdHVubGluazogQWN0aW9ucy5VbmxpbmssXG5cdH07XG5cdHB1YmxpYyByZWFkb25seSBjb21tYW5kcyA9IHtcblx0XHRidWlsZDogQ29tbWFuZHMuQnVpbGRDb21tYW5kLFxuXHRcdHB1Ymxpc2g6IENvbW1hbmRzLlB1Ymxpc2hDb21tYW5kLFxuXHRcdGRlcGVuZGVuY2llczogQ29tbWFuZHMuRGVwZW5kZW5jeUNvbW1hbmQsXG5cdFx0dmVyc2lvbjogQ29tbWFuZHMuVmVyc2lvbkNvbW1hbmQsXG5cdFx0dGFnOiBDb21tYW5kcy5UYWdDb21tYW5kLFxuXHRcdGxpbms6IENvbW1hbmRzLkxpbmtDb21tYW5kLFxuXHRcdHVubGluazogQ29tbWFuZHMuVW5saW5rQ29tbWFuZCxcblx0fTtcblxuXHRwdWJsaWMgcmVnaXN0ZXJTZXJ2aWNlcyhidWlsZGVyOiBDb250YWluZXJCdWlsZGVyKSB7XG5cdFx0YnVpbGRlci5yZWdpc3RlclNpbmdsZXRvbihUcmFuc2Zvcm1lcktleSwgU3djVHJhbnNwaWxlcik7XG5cdFx0YnVpbGRlci5yZWdpc3RlclNpbmdsZXRvbihUcmFuc2Zvcm1lcktleSwgVHlwZUVtaXR0ZXIpO1xuXHRcdGJ1aWxkZXIucmVnaXN0ZXJTaW5nbGV0b24oRGVwZW5kZW5jeVJlc29sdmVyKTtcblx0XHRidWlsZGVyLnJlZ2lzdGVyU2luZ2xldG9uKEZpbGVXcml0ZXJTZXJ2aWNlKTtcblx0fVxuXG5cdHB1YmxpYyBvdmVycmlkZSBhc3luYyBjcmVhdGVXb3Jrc3BhY2Uob3B0aW9uczogV29ya3NwYWNlRmFjdG9yeU9wdGlvbnMpIHtcblx0XHRjb25zdCB7IGNvbmZpZ3VyYXRpb25zOiBfLCAuLi5mb3JnZURlZmF1bHRzIH0gPSBXb3Jrc3BhY2VEZWZhdWx0cztcblx0XHRjb25zdCB1c2VyQ29uZmlnID0gYXdhaXQgVXNlckNvbmZpZ0ZhY3RvcnkuZ2V0VXNlckNvbmZpZyhvcHRpb25zLmNvbmZpZ0ZpbGUpO1xuXHRcdC8vIE9ubHkgYXBwbHkgZm9yZ2UgZGVmYXVsdCBjb25maWd1cmF0aW9ucyB3aGVuIHVzZXIgY29uZmlnIGRvZXNuJ3QgcHJvdmlkZSBhbnkuXG5cdFx0Ly8gVGhpcyBlbnN1cmVzIHVzZXItZGVmaW5lZCBjb25maWd1cmF0aW9ucyB0YWtlIHByaW9yaXR5IHdoaWxlIHN0aWxsIHByb3ZpZGluZ1xuXHRcdC8vIHNlbnNpYmxlIGRlZmF1bHRzIChkZWJ1ZyArIHJlbGVhc2UpIHdoZW4gbm8gY29uZmlnIGZpbGUgaXMgcHJlc2VudC5cblx0XHRjb25zdCBjb25maWd1cmF0aW9ucyA9IHVzZXJDb25maWcuY29uZmlndXJhdGlvbnM/Lmxlbmd0aFxuXHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdDogRGVmYXVsdENvbmZpZ3VyYXRpb25zO1xuXHRcdHJldHVybiBXb3Jrc3BhY2VGYWN0b3J5LmNyZWF0ZSh7XG5cdFx0XHQuLi5mb3JnZURlZmF1bHRzLFxuXHRcdFx0Li4uKGNvbmZpZ3VyYXRpb25zID8geyBjb25maWd1cmF0aW9ucyB9IDoge30pLFxuXHRcdFx0Y29uZmlnRmlsZTogb3B0aW9ucy5jb25maWdGaWxlLFxuXHRcdFx0cm9vdERpcjogb3B0aW9ucy5yb290RGlyID8/IFdvcmtzcGFjZURlZmF1bHRzLnJvb3REaXIsXG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJVc2VyQ29uZmlnRmFjdG9yeSIsIldvcmtzcGFjZUZhY3RvcnkiLCJNb2R1bGVNYW5pZmVzdCIsIkFjdGlvbnMiLCJDb21tYW5kcyIsIkRlcGVuZGVuY3lSZXNvbHZlciIsIkZpbGVXcml0ZXJTZXJ2aWNlIiwiU3djVHJhbnNwaWxlciIsIlR5cGVFbWl0dGVyIiwiVHJhbnNmb3JtZXJLZXkiLCJEZWZhdWx0Q29uZmlndXJhdGlvbnMiLCJXb3Jrc3BhY2VEZWZhdWx0cyIsIkZvcmdlTW9kdWxlIiwiaWQiLCJjb21tYW5kIiwiRm9yZ2VDb21tYW5kIiwiYWN0aW9ucyIsImNsZWFuIiwiQ2xlYW4iLCJjb3B5IiwiQ29weSIsImJ1aWxkIiwiQnVpbGQiLCJ3YXRjaCIsIldhdGNoIiwicHVibGlzaCIsIlB1Ymxpc2giLCJzeW5jRGVwZW5kZW5jaWVzIiwiU3luY0RlcGVuZGVuY2llcyIsInN5bmNMb2NrRmlsZSIsIlN5bmNMb2NrRmlsZSIsInJlcG9ydERlcGVuZGVuY2llcyIsIlJlcG9ydERlcGVuZGVuY2llcyIsInZlcnNpb24iLCJWZXJzaW9uIiwidGFnIiwiVGFnIiwiY29tbWl0RmlsZXMiLCJDb21taXRGaWxlcyIsImxpbmsiLCJMaW5rIiwidW5saW5rIiwiVW5saW5rIiwiY29tbWFuZHMiLCJCdWlsZENvbW1hbmQiLCJQdWJsaXNoQ29tbWFuZCIsImRlcGVuZGVuY2llcyIsIkRlcGVuZGVuY3lDb21tYW5kIiwiVmVyc2lvbkNvbW1hbmQiLCJUYWdDb21tYW5kIiwiTGlua0NvbW1hbmQiLCJVbmxpbmtDb21tYW5kIiwicmVnaXN0ZXJTZXJ2aWNlcyIsImJ1aWxkZXIiLCJyZWdpc3RlclNpbmdsZXRvbiIsImNyZWF0ZVdvcmtzcGFjZSIsIm9wdGlvbnMiLCJjb25maWd1cmF0aW9ucyIsIl8iLCJmb3JnZURlZmF1bHRzIiwidXNlckNvbmZpZyIsImdldFVzZXJDb25maWciLCJjb25maWdGaWxlIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiY3JlYXRlIiwicm9vdERpciJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsaUJBQWlCLEVBQUVDLGdCQUFnQixRQUFRLGlCQUFpQjtBQUVyRSxTQUFTQyxjQUFjLFFBQVEsc0JBQXNCO0FBRXJELFlBQVlDLGFBQWEscUJBQXFCO0FBQzlDLFlBQVlDLGNBQWMsc0JBQXNCO0FBQ2hELFNBQVNDLGtCQUFrQixRQUFRLDRDQUE0QztBQUMvRSxTQUFTQyxpQkFBaUIsUUFBUSxvQ0FBb0M7QUFDdEUsU0FBU0MsYUFBYSxRQUFRLCtCQUErQjtBQUM3RCxTQUFTQyxXQUFXLFFBQVEsNkJBQTZCO0FBQ3pELFNBQVNDLGNBQWMsUUFBUSw4QkFBOEI7QUFDN0QsU0FBU0MscUJBQXFCLEVBQUVDLGlCQUFpQixRQUFRLHdCQUF3QjtBQUVqRixPQUFPLE1BQU1DLG9CQUFvQlY7SUFDaEJXLEtBQUssUUFBUTtJQUNiQyxVQUFVVixTQUFTVyxZQUFZLENBQUM7SUFDaENDLFVBQVU7UUFDekJDLE9BQU9kLFFBQVFlLEtBQUs7UUFDcEJDLE1BQU1oQixRQUFRaUIsSUFBSTtRQUNsQkMsT0FBT2xCLFFBQVFtQixLQUFLO1FBQ3BCQyxPQUFPcEIsUUFBUXFCLEtBQUs7UUFDcEJDLFNBQVN0QixRQUFRdUIsT0FBTztRQUN4QkMsa0JBQWtCeEIsUUFBUXlCLGdCQUFnQjtRQUMxQ0MsY0FBYzFCLFFBQVEyQixZQUFZO1FBQ2xDQyxvQkFBb0I1QixRQUFRNkIsa0JBQWtCO1FBQzlDQyxTQUFTOUIsUUFBUStCLE9BQU87UUFDeEJDLEtBQUtoQyxRQUFRaUMsR0FBRztRQUNoQkMsYUFBYWxDLFFBQVFtQyxXQUFXO1FBQ2hDQyxNQUFNcEMsUUFBUXFDLElBQUk7UUFDbEJDLFFBQVF0QyxRQUFRdUMsTUFBTTtJQUN2QixFQUFFO0lBQ2NDLFdBQVc7UUFDMUJ0QixPQUFPakIsU0FBU3dDLFlBQVk7UUFDNUJuQixTQUFTckIsU0FBU3lDLGNBQWM7UUFDaENDLGNBQWMxQyxTQUFTMkMsaUJBQWlCO1FBQ3hDZCxTQUFTN0IsU0FBUzRDLGNBQWM7UUFDaENiLEtBQUsvQixTQUFTNkMsVUFBVTtRQUN4QlYsTUFBTW5DLFNBQVM4QyxXQUFXO1FBQzFCVCxRQUFRckMsU0FBUytDLGFBQWE7SUFDL0IsRUFBRTtJQUVLQyxpQkFBaUJDLE9BQXlCLEVBQUU7UUFDbERBLFFBQVFDLGlCQUFpQixDQUFDN0MsZ0JBQWdCRjtRQUMxQzhDLFFBQVFDLGlCQUFpQixDQUFDN0MsZ0JBQWdCRDtRQUMxQzZDLFFBQVFDLGlCQUFpQixDQUFDakQ7UUFDMUJnRCxRQUFRQyxpQkFBaUIsQ0FBQ2hEO0lBQzNCO0lBRUEsTUFBc0JpRCxnQkFBZ0JDLE9BQWdDLEVBQUU7UUFDdkUsTUFBTSxFQUFFQyxnQkFBZ0JDLENBQUMsRUFBRSxHQUFHQyxlQUFlLEdBQUdoRDtRQUNoRCxNQUFNaUQsYUFBYSxNQUFNNUQsa0JBQWtCNkQsYUFBYSxDQUFDTCxRQUFRTSxVQUFVO1FBQzNFLGdGQUFnRjtRQUNoRiwrRUFBK0U7UUFDL0Usc0VBQXNFO1FBQ3RFLE1BQU1MLGlCQUFpQkcsV0FBV0gsY0FBYyxFQUFFTSxTQUMvQ0MsWUFDQXREO1FBQ0gsT0FBT1QsaUJBQWlCZ0UsTUFBTSxDQUFDO1lBQzlCLEdBQUdOLGFBQWE7WUFDaEIsR0FBSUYsaUJBQWlCO2dCQUFFQTtZQUFlLElBQUksQ0FBQyxDQUFDO1lBQzVDSyxZQUFZTixRQUFRTSxVQUFVO1lBQzlCSSxTQUFTVixRQUFRVSxPQUFPLElBQUl2RCxrQkFBa0J1RCxPQUFPO1FBQ3REO0lBQ0Q7QUFDRCJ9
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9mb3JnZS5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckNvbmZpZ0ZhY3RvcnksIFdvcmtzcGFjZUZhY3RvcnkgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlRmFjdG9yeU9wdGlvbnMgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgTW9kdWxlTWFuaWZlc3QgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXJCdWlsZGVyIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jb21wb3NpdGlvblwiO1xuaW1wb3J0ICogYXMgQWN0aW9ucyBmcm9tIFwiLi9hY3Rpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgKiBhcyBDb21tYW5kcyBmcm9tIFwiLi9jb21tYW5kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgRGVwZW5kZW5jeVJlc29sdmVyIH0gZnJvbSBcIi4vc2VydmljZXMvZGVwZW5kZW5jeS1yZXNvbHZlci5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBGaWxlV3JpdGVyU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL2ZpbGUtd3JpdGVyLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IFN3Y1RyYW5zcGlsZXIgfSBmcm9tIFwiLi9zZXJ2aWNlcy9zd2MtdHJhbnNwaWxlci5qc1wiO1xuaW1wb3J0IHsgVHlwZUVtaXR0ZXIgfSBmcm9tIFwiLi9zZXJ2aWNlcy90eXBlLWVtaXR0ZXIuanNcIjtcbmltcG9ydCB7IFRyYW5zZm9ybWVyS2V5IH0gZnJvbSBcIi4vdHlwZXMvdHJhbnNmb3JtZXIudHlwZS5qc1wiO1xuaW1wb3J0IHsgRGVmYXVsdENvbmZpZ3VyYXRpb25zLCBXb3Jrc3BhY2VEZWZhdWx0cyB9IGZyb20gXCIuL3dvcmtzcGFjZS5jb25maWcuanNcIjtcblxuZXhwb3J0IGNsYXNzIEZvcmdlTW9kdWxlIGV4dGVuZHMgTW9kdWxlTWFuaWZlc3Qge1xuXHRwdWJsaWMgcmVhZG9ubHkgaWQgPSBcImZvcmdlXCI7XG5cdHB1YmxpYyByZWFkb25seSBjb21tYW5kID0gQ29tbWFuZHMuRm9yZ2VDb21tYW5kO1xuXHRwdWJsaWMgcmVhZG9ubHkgYWN0aW9ucyA9IHtcblx0XHRjbGVhbjogQWN0aW9ucy5DbGVhbixcblx0XHRjb3B5OiBBY3Rpb25zLkNvcHksXG5cdFx0ZG9ja2VyOiBBY3Rpb25zLkRvY2tlcixcblx0XHRidWlsZDogQWN0aW9ucy5CdWlsZCxcblx0XHR3YXRjaDogQWN0aW9ucy5XYXRjaCxcblx0XHRwdWJsaXNoOiBBY3Rpb25zLlB1Ymxpc2gsXG5cdFx0c3luY0RlcGVuZGVuY2llczogQWN0aW9ucy5TeW5jRGVwZW5kZW5jaWVzLFxuXHRcdHN5bmNMb2NrRmlsZTogQWN0aW9ucy5TeW5jTG9ja0ZpbGUsXG5cdFx0cmVwb3J0RGVwZW5kZW5jaWVzOiBBY3Rpb25zLlJlcG9ydERlcGVuZGVuY2llcyxcblx0XHR2ZXJzaW9uOiBBY3Rpb25zLlZlcnNpb24sXG5cdFx0dGFnOiBBY3Rpb25zLlRhZyxcblx0XHRjb21taXRGaWxlczogQWN0aW9ucy5Db21taXRGaWxlcyxcblx0XHRsaW5rOiBBY3Rpb25zLkxpbmssXG5cdFx0dW5saW5rOiBBY3Rpb25zLlVubGluayxcblx0fTtcblx0cHVibGljIHJlYWRvbmx5IGNvbW1hbmRzID0ge1xuXHRcdGJ1aWxkOiBDb21tYW5kcy5CdWlsZENvbW1hbmQsXG5cdFx0cHVibGlzaDogQ29tbWFuZHMuUHVibGlzaENvbW1hbmQsXG5cdFx0ZGVwZW5kZW5jaWVzOiBDb21tYW5kcy5EZXBlbmRlbmN5Q29tbWFuZCxcblx0XHRkb2NrZXI6IENvbW1hbmRzLkRvY2tlckNvbW1hbmQsXG5cdFx0dmVyc2lvbjogQ29tbWFuZHMuVmVyc2lvbkNvbW1hbmQsXG5cdFx0dGFnOiBDb21tYW5kcy5UYWdDb21tYW5kLFxuXHRcdGxpbms6IENvbW1hbmRzLkxpbmtDb21tYW5kLFxuXHRcdHVubGluazogQ29tbWFuZHMuVW5saW5rQ29tbWFuZCxcblx0fTtcblxuXHRwdWJsaWMgcmVnaXN0ZXJTZXJ2aWNlcyhidWlsZGVyOiBDb250YWluZXJCdWlsZGVyKSB7XG5cdFx0YnVpbGRlci5yZWdpc3RlclNpbmdsZXRvbihUcmFuc2Zvcm1lcktleSwgU3djVHJhbnNwaWxlcik7XG5cdFx0YnVpbGRlci5yZWdpc3RlclNpbmdsZXRvbihUcmFuc2Zvcm1lcktleSwgVHlwZUVtaXR0ZXIpO1xuXHRcdGJ1aWxkZXIucmVnaXN0ZXJTaW5nbGV0b24oRGVwZW5kZW5jeVJlc29sdmVyKTtcblx0XHRidWlsZGVyLnJlZ2lzdGVyU2luZ2xldG9uKEZpbGVXcml0ZXJTZXJ2aWNlKTtcblx0fVxuXG5cdHB1YmxpYyBvdmVycmlkZSBhc3luYyBjcmVhdGVXb3Jrc3BhY2Uob3B0aW9uczogV29ya3NwYWNlRmFjdG9yeU9wdGlvbnMpIHtcblx0XHRjb25zdCB7IGNvbmZpZ3VyYXRpb25zOiBfLCAuLi5mb3JnZURlZmF1bHRzIH0gPSBXb3Jrc3BhY2VEZWZhdWx0cztcblx0XHRjb25zdCB1c2VyQ29uZmlnID0gYXdhaXQgVXNlckNvbmZpZ0ZhY3RvcnkuZ2V0VXNlckNvbmZpZyhvcHRpb25zLmNvbmZpZ0ZpbGUpO1xuXHRcdC8vIE9ubHkgYXBwbHkgZm9yZ2UgZGVmYXVsdCBjb25maWd1cmF0aW9ucyB3aGVuIHVzZXIgY29uZmlnIGRvZXNuJ3QgcHJvdmlkZSBhbnkuXG5cdFx0Ly8gVGhpcyBlbnN1cmVzIHVzZXItZGVmaW5lZCBjb25maWd1cmF0aW9ucyB0YWtlIHByaW9yaXR5IHdoaWxlIHN0aWxsIHByb3ZpZGluZ1xuXHRcdC8vIHNlbnNpYmxlIGRlZmF1bHRzIChkZWJ1ZyArIHJlbGVhc2UpIHdoZW4gbm8gY29uZmlnIGZpbGUgaXMgcHJlc2VudC5cblx0XHRjb25zdCBjb25maWd1cmF0aW9ucyA9IHVzZXJDb25maWcuY29uZmlndXJhdGlvbnM/Lmxlbmd0aFxuXHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdDogRGVmYXVsdENvbmZpZ3VyYXRpb25zO1xuXHRcdHJldHVybiBXb3Jrc3BhY2VGYWN0b3J5LmNyZWF0ZSh7XG5cdFx0XHQuLi5mb3JnZURlZmF1bHRzLFxuXHRcdFx0Li4uKGNvbmZpZ3VyYXRpb25zID8geyBjb25maWd1cmF0aW9ucyB9IDoge30pLFxuXHRcdFx0Y29uZmlnRmlsZTogb3B0aW9ucy5jb25maWdGaWxlLFxuXHRcdFx0cm9vdERpcjogb3B0aW9ucy5yb290RGlyID8/IFdvcmtzcGFjZURlZmF1bHRzLnJvb3REaXIsXG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJVc2VyQ29uZmlnRmFjdG9yeSIsIldvcmtzcGFjZUZhY3RvcnkiLCJNb2R1bGVNYW5pZmVzdCIsIkFjdGlvbnMiLCJDb21tYW5kcyIsIkRlcGVuZGVuY3lSZXNvbHZlciIsIkZpbGVXcml0ZXJTZXJ2aWNlIiwiU3djVHJhbnNwaWxlciIsIlR5cGVFbWl0dGVyIiwiVHJhbnNmb3JtZXJLZXkiLCJEZWZhdWx0Q29uZmlndXJhdGlvbnMiLCJXb3Jrc3BhY2VEZWZhdWx0cyIsIkZvcmdlTW9kdWxlIiwiaWQiLCJjb21tYW5kIiwiRm9yZ2VDb21tYW5kIiwiYWN0aW9ucyIsImNsZWFuIiwiQ2xlYW4iLCJjb3B5IiwiQ29weSIsImRvY2tlciIsIkRvY2tlciIsImJ1aWxkIiwiQnVpbGQiLCJ3YXRjaCIsIldhdGNoIiwicHVibGlzaCIsIlB1Ymxpc2giLCJzeW5jRGVwZW5kZW5jaWVzIiwiU3luY0RlcGVuZGVuY2llcyIsInN5bmNMb2NrRmlsZSIsIlN5bmNMb2NrRmlsZSIsInJlcG9ydERlcGVuZGVuY2llcyIsIlJlcG9ydERlcGVuZGVuY2llcyIsInZlcnNpb24iLCJWZXJzaW9uIiwidGFnIiwiVGFnIiwiY29tbWl0RmlsZXMiLCJDb21taXRGaWxlcyIsImxpbmsiLCJMaW5rIiwidW5saW5rIiwiVW5saW5rIiwiY29tbWFuZHMiLCJCdWlsZENvbW1hbmQiLCJQdWJsaXNoQ29tbWFuZCIsImRlcGVuZGVuY2llcyIsIkRlcGVuZGVuY3lDb21tYW5kIiwiRG9ja2VyQ29tbWFuZCIsIlZlcnNpb25Db21tYW5kIiwiVGFnQ29tbWFuZCIsIkxpbmtDb21tYW5kIiwiVW5saW5rQ29tbWFuZCIsInJlZ2lzdGVyU2VydmljZXMiLCJidWlsZGVyIiwicmVnaXN0ZXJTaW5nbGV0b24iLCJjcmVhdGVXb3Jrc3BhY2UiLCJvcHRpb25zIiwiY29uZmlndXJhdGlvbnMiLCJfIiwiZm9yZ2VEZWZhdWx0cyIsInVzZXJDb25maWciLCJnZXRVc2VyQ29uZmlnIiwiY29uZmlnRmlsZSIsImxlbmd0aCIsInVuZGVmaW5lZCIsImNyZWF0ZSIsInJvb3REaXIiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGlCQUFpQixFQUFFQyxnQkFBZ0IsUUFBUSxpQkFBaUI7QUFFckUsU0FBU0MsY0FBYyxRQUFRLHNCQUFzQjtBQUVyRCxZQUFZQyxhQUFhLHFCQUFxQjtBQUM5QyxZQUFZQyxjQUFjLHNCQUFzQjtBQUNoRCxTQUFTQyxrQkFBa0IsUUFBUSw0Q0FBNEM7QUFDL0UsU0FBU0MsaUJBQWlCLFFBQVEsb0NBQW9DO0FBQ3RFLFNBQVNDLGFBQWEsUUFBUSwrQkFBK0I7QUFDN0QsU0FBU0MsV0FBVyxRQUFRLDZCQUE2QjtBQUN6RCxTQUFTQyxjQUFjLFFBQVEsOEJBQThCO0FBQzdELFNBQVNDLHFCQUFxQixFQUFFQyxpQkFBaUIsUUFBUSx3QkFBd0I7QUFFakYsT0FBTyxNQUFNQyxvQkFBb0JWO0lBQ2hCVyxLQUFLLFFBQVE7SUFDYkMsVUFBVVYsU0FBU1csWUFBWSxDQUFDO0lBQ2hDQyxVQUFVO1FBQ3pCQyxPQUFPZCxRQUFRZSxLQUFLO1FBQ3BCQyxNQUFNaEIsUUFBUWlCLElBQUk7UUFDbEJDLFFBQVFsQixRQUFRbUIsTUFBTTtRQUN0QkMsT0FBT3BCLFFBQVFxQixLQUFLO1FBQ3BCQyxPQUFPdEIsUUFBUXVCLEtBQUs7UUFDcEJDLFNBQVN4QixRQUFReUIsT0FBTztRQUN4QkMsa0JBQWtCMUIsUUFBUTJCLGdCQUFnQjtRQUMxQ0MsY0FBYzVCLFFBQVE2QixZQUFZO1FBQ2xDQyxvQkFBb0I5QixRQUFRK0Isa0JBQWtCO1FBQzlDQyxTQUFTaEMsUUFBUWlDLE9BQU87UUFDeEJDLEtBQUtsQyxRQUFRbUMsR0FBRztRQUNoQkMsYUFBYXBDLFFBQVFxQyxXQUFXO1FBQ2hDQyxNQUFNdEMsUUFBUXVDLElBQUk7UUFDbEJDLFFBQVF4QyxRQUFReUMsTUFBTTtJQUN2QixFQUFFO0lBQ2NDLFdBQVc7UUFDMUJ0QixPQUFPbkIsU0FBUzBDLFlBQVk7UUFDNUJuQixTQUFTdkIsU0FBUzJDLGNBQWM7UUFDaENDLGNBQWM1QyxTQUFTNkMsaUJBQWlCO1FBQ3hDNUIsUUFBUWpCLFNBQVM4QyxhQUFhO1FBQzlCZixTQUFTL0IsU0FBUytDLGNBQWM7UUFDaENkLEtBQUtqQyxTQUFTZ0QsVUFBVTtRQUN4QlgsTUFBTXJDLFNBQVNpRCxXQUFXO1FBQzFCVixRQUFRdkMsU0FBU2tELGFBQWE7SUFDL0IsRUFBRTtJQUVLQyxpQkFBaUJDLE9BQXlCLEVBQUU7UUFDbERBLFFBQVFDLGlCQUFpQixDQUFDaEQsZ0JBQWdCRjtRQUMxQ2lELFFBQVFDLGlCQUFpQixDQUFDaEQsZ0JBQWdCRDtRQUMxQ2dELFFBQVFDLGlCQUFpQixDQUFDcEQ7UUFDMUJtRCxRQUFRQyxpQkFBaUIsQ0FBQ25EO0lBQzNCO0lBRUEsTUFBc0JvRCxnQkFBZ0JDLE9BQWdDLEVBQUU7UUFDdkUsTUFBTSxFQUFFQyxnQkFBZ0JDLENBQUMsRUFBRSxHQUFHQyxlQUFlLEdBQUduRDtRQUNoRCxNQUFNb0QsYUFBYSxNQUFNL0Qsa0JBQWtCZ0UsYUFBYSxDQUFDTCxRQUFRTSxVQUFVO1FBQzNFLGdGQUFnRjtRQUNoRiwrRUFBK0U7UUFDL0Usc0VBQXNFO1FBQ3RFLE1BQU1MLGlCQUFpQkcsV0FBV0gsY0FBYyxFQUFFTSxTQUMvQ0MsWUFDQXpEO1FBQ0gsT0FBT1QsaUJBQWlCbUUsTUFBTSxDQUFDO1lBQzlCLEdBQUdOLGFBQWE7WUFDaEIsR0FBSUYsaUJBQWlCO2dCQUFFQTtZQUFlLElBQUksQ0FBQyxDQUFDO1lBQzVDSyxZQUFZTixRQUFRTSxVQUFVO1lBQzlCSSxTQUFTVixRQUFRVSxPQUFPLElBQUkxRCxrQkFBa0IwRCxPQUFPO1FBQ3REO0lBQ0Q7QUFDRCJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decohere/forge",
3
- "version": "0.0.1-dev.19",
3
+ "version": "0.0.1-dev.21",
4
4
  "description": "TypeScript monorepo build system — zero config, fast compilation, streamlined developer workflow",
5
5
  "keywords": [
6
6
  "typescript",
@@ -29,10 +29,10 @@
29
29
  "test": "echo \"Error: no test specified\" && exit 1"
30
30
  },
31
31
  "dependencies": {
32
- "@decohere/crucible": "0.0.1-dev.19",
33
- "@decohere/mesh": "0.0.1-dev.19",
34
- "@decohere/nexus": "0.0.1-dev.19",
35
- "@decohere/scribe": "0.0.1-dev.19",
32
+ "@decohere/crucible": "0.0.1-dev.21",
33
+ "@decohere/mesh": "0.0.1-dev.21",
34
+ "@decohere/nexus": "0.0.1-dev.21",
35
+ "@decohere/scribe": "0.0.1-dev.21",
36
36
  "@swc/core": "^1.11.11",
37
37
  "async": "^3.2.6",
38
38
  "parse-imports": "^2.2.1",
@@ -0,0 +1,27 @@
1
+ import { Workspace } from "@decohere/mesh";
2
+ import type { Action, ResultStatus } from "@decohere/nexus/cli";
3
+ import { ActionResponse } from "@decohere/nexus/cli";
4
+ export type DockerOptions = {
5
+ configuration: string;
6
+ dryRun?: boolean;
7
+ push?: boolean;
8
+ };
9
+ export type DockerResponse = ResultStatus & {
10
+ projectName: string;
11
+ image: string;
12
+ tags: string[];
13
+ message: string;
14
+ };
15
+ export declare class Docker implements Action<DockerOptions> {
16
+ #private;
17
+ private readonly workspace;
18
+ private readonly docker;
19
+ constructor(workspace: Workspace);
20
+ run(options: DockerOptions): Promise<ActionResponse<DockerResponse>>;
21
+ private getDockerProjects;
22
+ private buildProject;
23
+ private interpolateBuildArgs;
24
+ private defaultImageName;
25
+ private normalizeDockerRepository;
26
+ private parseJsonEnv;
27
+ }
@@ -4,6 +4,7 @@ export * from "./commit.action.js";
4
4
  export * from "./copy.action.js";
5
5
  export * from "./dependency-report.action.js";
6
6
  export * from "./dependency-sync.action.js";
7
+ export * from "./docker.action.js";
7
8
  export * from "./link.action.js";
8
9
  export * from "./publish.action.js";
9
10
  export * from "./sync-lock-file.action.js";
@@ -0,0 +1,6 @@
1
+ import { DecohereCommand } from "@decohere/nexus/cli";
2
+ import { Docker } from "../actions/docker.action.js";
3
+ export declare class DockerCommand extends DecohereCommand {
4
+ get actions(): (typeof Docker)[];
5
+ constructor(name: string);
6
+ }
@@ -1,5 +1,6 @@
1
1
  export * from "./build.command.js";
2
2
  export * from "./dependency.command.js";
3
+ export * from "./docker.command.js";
3
4
  export * from "./forge.command.js";
4
5
  export * from "./link.command.js";
5
6
  export * from "./publish.command.js";
@@ -9,6 +9,7 @@ export declare class ForgeModule extends ModuleManifest {
9
9
  readonly actions: {
10
10
  clean: typeof Actions.Clean;
11
11
  copy: typeof Actions.Copy;
12
+ docker: typeof Actions.Docker;
12
13
  build: typeof Actions.Build;
13
14
  watch: typeof Actions.Watch;
14
15
  publish: typeof Actions.Publish;
@@ -25,6 +26,7 @@ export declare class ForgeModule extends ModuleManifest {
25
26
  build: typeof Commands.BuildCommand;
26
27
  publish: typeof Commands.PublishCommand;
27
28
  dependencies: typeof Commands.DependencyCommand;
29
+ docker: typeof Commands.DockerCommand;
28
30
  version: typeof Commands.VersionCommand;
29
31
  tag: typeof Commands.TagCommand;
30
32
  link: typeof Commands.LinkCommand;