@decohere/forge 0.0.1-dev.19 → 0.0.1-dev.20261105.46
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.
- package/LICENSE +15 -0
- package/README.md +152 -0
- package/commonjs/src/actions/build.action.js +4 -6
- package/commonjs/src/actions/clean.action.js +4 -6
- package/commonjs/src/actions/commit.action.js +4 -6
- package/commonjs/src/actions/copy.action.js +62 -12
- package/commonjs/src/actions/dependency-report.action.js +8 -6
- package/commonjs/src/actions/dependency-sync.action.js +9 -5
- package/commonjs/src/actions/docker.action.js +209 -0
- package/commonjs/src/actions/index.js +4 -2
- package/commonjs/src/actions/link.action.js +3 -5
- package/commonjs/src/actions/package.action.js +234 -0
- package/commonjs/src/actions/paths.action.js +120 -0
- package/commonjs/src/actions/publish.action.js +4 -6
- package/commonjs/src/actions/sync-lock-file.action.js +2 -4
- package/commonjs/src/actions/tag.action.js +6 -9
- package/commonjs/src/actions/typecheck.action.js +67 -0
- package/commonjs/src/actions/unlink.action.js +1 -3
- package/commonjs/src/actions/version.action.js +74 -21
- package/commonjs/src/actions/watch.action.js +3 -5
- package/commonjs/src/commands/build.command.js +4 -3
- package/commonjs/src/commands/dependency.command.js +1 -3
- package/commonjs/src/commands/docker.command.js +26 -0
- package/commonjs/src/commands/forge.command.js +1 -3
- package/commonjs/src/commands/index.js +4 -2
- package/commonjs/src/commands/link.command.js +4 -3
- package/commonjs/src/commands/package.command.js +36 -0
- package/commonjs/src/commands/paths.command.js +24 -0
- package/commonjs/src/commands/publish.command.js +1 -3
- package/commonjs/src/commands/tag.command.js +1 -3
- package/commonjs/src/commands/typecheck.command.js +24 -0
- package/commonjs/src/commands/version.command.js +3 -3
- package/commonjs/src/const.js +0 -2
- package/commonjs/src/create-workspace.js +38 -0
- package/commonjs/src/errors.js +2 -4
- package/commonjs/src/extensions/project.extensions.js +11 -13
- package/commonjs/src/factories/swc-config.factory.js +29 -9
- package/commonjs/src/forge.module.js +17 -20
- package/commonjs/src/index.js +8 -2
- package/commonjs/src/packaging/dependency-pinner.service.js +118 -0
- package/commonjs/src/packaging/deployable.js +44 -0
- package/commonjs/src/packaging/import-graph.service.js +137 -0
- package/commonjs/src/packaging/release-exports.js +90 -0
- package/commonjs/src/packaging/ui-assets.js +75 -0
- package/commonjs/src/semver/index.js +18 -0
- package/commonjs/src/semver/semver.js +96 -0
- package/commonjs/src/services/dependency-resolver.service.js +70 -26
- package/commonjs/src/services/file-writer.service.js +2 -11
- package/commonjs/src/services/incremental-watch.js +24 -0
- package/commonjs/src/services/output-cache.js +39 -0
- package/commonjs/src/services/swc-transpiler.js +85 -99
- package/commonjs/src/services/transpile-cache.js +44 -0
- package/commonjs/src/services/ts-compiler-options.js +50 -0
- package/commonjs/src/services/ts-program-host.js +4 -6
- package/commonjs/src/services/type-emission-program.js +25 -10
- package/commonjs/src/services/type-emitter.js +60 -20
- package/commonjs/src/transpile/index.js +30 -0
- package/commonjs/src/types/build-target.type.js +0 -2
- package/commonjs/src/types/configuration.type.js +0 -2
- package/commonjs/src/types/dependency.types.js +0 -2
- package/commonjs/src/types/swc-config.type.js +0 -2
- package/commonjs/src/types/transform-response.model.js +3 -18
- package/commonjs/src/types/transformer.type.js +0 -2
- package/commonjs/src/types/workspace-config.type.js +0 -2
- package/commonjs/src/vitest/forge-build.plugin.js +28 -44
- package/commonjs/src/vitest/index.js +0 -2
- package/commonjs/src/workspace.config.js +27 -6
- package/es6/src/actions/build.action.js +3 -7
- package/es6/src/actions/clean.action.js +3 -6
- package/es6/src/actions/commit.action.js +3 -6
- package/es6/src/actions/copy.action.js +61 -12
- package/es6/src/actions/dependency-report.action.js +7 -7
- package/es6/src/actions/dependency-sync.action.js +8 -6
- package/es6/src/actions/docker.action.js +194 -0
- package/es6/src/actions/index.js +4 -2
- package/es6/src/actions/link.action.js +2 -5
- package/es6/src/actions/package.action.js +219 -0
- package/es6/src/actions/paths.action.js +97 -0
- package/es6/src/actions/publish.action.js +3 -6
- package/es6/src/actions/sync-lock-file.action.js +2 -4
- package/es6/src/actions/tag.action.js +5 -9
- package/es6/src/actions/typecheck.action.js +52 -0
- package/es6/src/actions/unlink.action.js +1 -3
- package/es6/src/actions/version.action.js +69 -17
- package/es6/src/actions/watch.action.js +2 -5
- package/es6/src/commands/build.command.js +4 -3
- package/es6/src/commands/dependency.command.js +1 -3
- package/es6/src/commands/docker.command.js +16 -0
- package/es6/src/commands/forge.command.js +1 -3
- package/es6/src/commands/index.js +4 -2
- package/es6/src/commands/link.command.js +4 -3
- package/es6/src/commands/package.command.js +26 -0
- package/es6/src/commands/paths.command.js +14 -0
- package/es6/src/commands/publish.command.js +1 -3
- package/es6/src/commands/tag.command.js +1 -3
- package/es6/src/commands/typecheck.command.js +14 -0
- package/es6/src/commands/version.command.js +3 -3
- package/es6/src/const.js +0 -2
- package/es6/src/create-workspace.js +26 -0
- package/es6/src/errors.js +1 -3
- package/es6/src/extensions/project.extensions.js +5 -7
- package/es6/src/factories/swc-config.factory.js +29 -9
- package/es6/src/forge.module.js +17 -20
- package/es6/src/index.js +2 -2
- package/es6/src/packaging/dependency-pinner.service.js +103 -0
- package/es6/src/packaging/deployable.js +21 -0
- package/es6/src/packaging/import-graph.service.js +122 -0
- package/es6/src/packaging/release-exports.js +80 -0
- package/es6/src/packaging/ui-assets.js +49 -0
- package/es6/src/semver/index.js +1 -0
- package/es6/src/semver/semver.js +75 -0
- package/es6/src/services/dependency-resolver.service.js +70 -26
- package/es6/src/services/file-writer.service.js +2 -11
- package/es6/src/services/incremental-watch.js +18 -0
- package/es6/src/services/output-cache.js +29 -0
- package/es6/src/services/swc-transpiler.js +85 -99
- package/es6/src/services/transpile-cache.js +29 -0
- package/es6/src/services/ts-compiler-options.js +39 -0
- package/es6/src/services/ts-program-host.js +4 -6
- package/es6/src/services/type-emission-program.js +25 -10
- package/es6/src/services/type-emitter.js +57 -20
- package/es6/src/transpile/index.js +6 -0
- package/es6/src/types/build-target.type.js +0 -2
- package/es6/src/types/configuration.type.js +0 -2
- package/es6/src/types/dependency.types.js +0 -2
- package/es6/src/types/swc-config.type.js +0 -2
- package/es6/src/types/transform-response.model.js +0 -7
- package/es6/src/types/transformer.type.js +0 -2
- package/es6/src/types/workspace-config.type.js +0 -2
- package/es6/src/vitest/forge-build.plugin.js +27 -43
- package/es6/src/vitest/index.js +0 -2
- package/es6/src/workspace.config.js +26 -5
- package/package.json +20 -6
- package/types/src/actions/build.action.d.ts +4 -4
- package/types/src/actions/clean.action.d.ts +3 -3
- package/types/src/actions/commit.action.d.ts +3 -3
- package/types/src/actions/copy.action.d.ts +18 -3
- package/types/src/actions/dependency-report.action.d.ts +3 -3
- package/types/src/actions/dependency-sync.action.d.ts +3 -3
- package/types/src/actions/docker.action.d.ts +38 -0
- package/types/src/actions/index.d.ts +4 -0
- package/types/src/actions/link.action.d.ts +3 -3
- package/types/src/actions/package.action.d.ts +38 -0
- package/types/src/actions/paths.action.d.ts +28 -0
- package/types/src/actions/publish.action.d.ts +4 -4
- package/types/src/actions/sync-lock-file.action.d.ts +2 -2
- package/types/src/actions/tag.action.d.ts +3 -3
- package/types/src/actions/typecheck.action.d.ts +14 -0
- package/types/src/actions/unlink.action.d.ts +2 -2
- package/types/src/actions/version.action.d.ts +14 -4
- package/types/src/actions/watch.action.d.ts +3 -3
- package/types/src/commands/build.command.d.ts +3 -2
- package/types/src/commands/dependency.command.d.ts +2 -2
- package/types/src/commands/docker.command.d.ts +6 -0
- package/types/src/commands/forge.command.d.ts +2 -2
- package/types/src/commands/index.d.ts +4 -0
- package/types/src/commands/link.command.d.ts +3 -2
- package/types/src/commands/package.command.d.ts +11 -0
- package/types/src/commands/paths.command.d.ts +6 -0
- package/types/src/commands/publish.command.d.ts +1 -1
- package/types/src/commands/tag.command.d.ts +1 -1
- package/types/src/commands/typecheck.command.d.ts +6 -0
- package/types/src/commands/version.command.d.ts +1 -1
- package/types/src/create-workspace.d.ts +7 -0
- package/types/src/errors.d.ts +1 -1
- package/types/src/extensions/project.extensions.d.ts +2 -2
- package/types/src/factories/swc-config.factory.d.ts +3 -2
- package/types/src/forge.module.d.ts +12 -4
- package/types/src/index.d.ts +2 -0
- package/types/src/packaging/dependency-pinner.service.d.ts +20 -0
- package/types/src/packaging/deployable.d.ts +17 -0
- package/types/src/packaging/import-graph.service.d.ts +33 -0
- package/types/src/packaging/release-exports.d.ts +18 -0
- package/types/src/packaging/ui-assets.d.ts +21 -0
- package/types/src/semver/index.d.ts +1 -0
- package/types/src/semver/semver.d.ts +20 -0
- package/types/src/services/dependency-resolver.service.d.ts +8 -1
- package/types/src/services/file-writer.service.d.ts +1 -2
- package/types/src/services/incremental-watch.d.ts +13 -0
- package/types/src/services/output-cache.d.ts +10 -0
- package/types/src/services/swc-transpiler.d.ts +28 -15
- package/types/src/services/transpile-cache.d.ts +17 -0
- package/types/src/services/ts-compiler-options.d.ts +8 -0
- package/types/src/services/ts-program-host.d.ts +2 -2
- package/types/src/services/type-emission-program.d.ts +10 -3
- package/types/src/services/type-emitter.d.ts +21 -8
- package/types/src/transpile/index.d.ts +6 -0
- package/types/src/types/configuration.type.d.ts +6 -1
- package/types/src/types/dependency.types.d.ts +8 -9
- package/types/src/types/swc-config.type.d.ts +7 -1
- package/types/src/types/transform-response.model.d.ts +2 -7
- package/types/src/types/transformer.type.d.ts +3 -12
- package/types/src/types/workspace-config.type.d.ts +3 -3
- package/types/src/vitest/forge-build.plugin.d.ts +0 -2
- package/commonjs/src/mixins/caches-outputs.mixin.js +0 -44
- package/commonjs/src/mixins/incremental-transform.mixin.js +0 -36
- package/es6/src/mixins/caches-outputs.mixin.js +0 -34
- package/es6/src/mixins/incremental-transform.mixin.js +0 -26
- package/types/src/mixins/caches-outputs.mixin.d.ts +0 -7
- package/types/src/mixins/incremental-transform.mixin.d.ts +0 -13
|
@@ -0,0 +1,209 @@
|
|
|
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 _workspace = require("@decohere/workspace");
|
|
14
|
+
const _cli = require("@decohere/devkit/cli");
|
|
15
|
+
const _interop = require("@decohere/devkit/interop");
|
|
16
|
+
const _io = require("@decohere/core/io");
|
|
17
|
+
const _scribe = require("@decohere/scribe");
|
|
18
|
+
const _errors = require("../errors.js");
|
|
19
|
+
const _deployable = require("../packaging/deployable.js");
|
|
20
|
+
function _interop_require_default(obj) {
|
|
21
|
+
return obj && obj.__esModule ? obj : {
|
|
22
|
+
default: obj
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
26
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
27
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
28
|
+
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;
|
|
29
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
30
|
+
}
|
|
31
|
+
function _ts_metadata(k, v) {
|
|
32
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
33
|
+
}
|
|
34
|
+
class Docker {
|
|
35
|
+
workspace;
|
|
36
|
+
#logger = _scribe.scribe.logger(Docker.name);
|
|
37
|
+
docker = new _interop.Docker();
|
|
38
|
+
#defaultRegistry = process.env.FORGE_DOCKER_REGISTRY?.trim() || "ghcr.io";
|
|
39
|
+
constructor(workspace){
|
|
40
|
+
this.workspace = workspace;
|
|
41
|
+
}
|
|
42
|
+
async run(options) {
|
|
43
|
+
const projects = await this.getDockerProjects(this.workspace.getProjects(options.configuration));
|
|
44
|
+
if (projects.length === 0) {
|
|
45
|
+
this.#logger.info("No projects found with a Dockerfile — nothing to dockerize");
|
|
46
|
+
return _cli.ActionResponse.Success(Docker.name, []);
|
|
47
|
+
}
|
|
48
|
+
const workspacePackageJson = await this.workspace.getPackageJson();
|
|
49
|
+
const version = await this.workspace.getVersion();
|
|
50
|
+
const responses = await Promise.all(projects.map(async (project)=>await this.buildProject(project, workspacePackageJson, version, options)));
|
|
51
|
+
const failed = responses.filter((response)=>!response.succeeded);
|
|
52
|
+
if (failed.length > 0) {
|
|
53
|
+
return _cli.ActionResponse.Error(Docker.name, responses);
|
|
54
|
+
}
|
|
55
|
+
return _cli.ActionResponse.Success(Docker.name, responses);
|
|
56
|
+
}
|
|
57
|
+
async getDockerProjects(projects) {
|
|
58
|
+
const result = [];
|
|
59
|
+
for (const project of projects){
|
|
60
|
+
if (!await _deployable.deployable.isDeployable(project)) {
|
|
61
|
+
this.#logger.info(`Skipping ${project.name}: missing ${_deployable.deployable.dockerfileName(project)}`);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
result.push(project);
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A Dockerfile that copies `.package/` needs `forge package` to have run. Fail before the
|
|
70
|
+
* build with that instruction rather than with Docker's "not found" from deep in a layer.
|
|
71
|
+
*/ async assertPackaged(project) {
|
|
72
|
+
const dockerfile = await _io.io.readFile(_deployable.deployable.dockerfilePath(project)).catch(()=>"");
|
|
73
|
+
if (!dockerfile.includes(_deployable.PACKAGE_DIR)) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const packaged = _nodepath.default.join(project.projectRoot, _deployable.PACKAGE_DIR, "package.json");
|
|
77
|
+
if (!await _io.io.fileExists(packaged)) {
|
|
78
|
+
throw new _errors.ForgeError(`${project.name}: its Dockerfile copies ${_deployable.PACKAGE_DIR}/, which does not exist. ` + `Run \`forge build --configuration release\` and \`forge package ${project.name}\` first.`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async buildProject(project, workspacePackageJson, version, options) {
|
|
82
|
+
const dockerConfig = project.dockerConfig ?? {};
|
|
83
|
+
const envBuildArgs = this.parseJsonEnv("FORGE_DOCKER_BUILD_ARGS_JSON", {});
|
|
84
|
+
const envSecrets = this.parseJsonEnv("FORGE_DOCKER_SECRETS_JSON", {});
|
|
85
|
+
const envTags = this.parseJsonEnv("FORGE_DOCKER_EXTRA_TAGS_JSON", []);
|
|
86
|
+
const image = dockerConfig.image ?? this.defaultImageName(project.name, workspacePackageJson);
|
|
87
|
+
const dockerfile = dockerConfig.dockerfile ?? "Dockerfile";
|
|
88
|
+
const extraTags = this.extraTagsForImage(image, [
|
|
89
|
+
...dockerConfig.tags ?? [],
|
|
90
|
+
...envTags
|
|
91
|
+
]);
|
|
92
|
+
const tags = [
|
|
93
|
+
`${image}:${version}`,
|
|
94
|
+
...extraTags
|
|
95
|
+
];
|
|
96
|
+
const buildArgs = this.interpolateBuildArgs({
|
|
97
|
+
...dockerConfig.buildArgs,
|
|
98
|
+
...envBuildArgs
|
|
99
|
+
}, version);
|
|
100
|
+
const secrets = {
|
|
101
|
+
...dockerConfig.secrets,
|
|
102
|
+
...envSecrets
|
|
103
|
+
};
|
|
104
|
+
this.#logger.info(`${options.dryRun ? "[dry-run] " : ""}Building ${project.name}`);
|
|
105
|
+
try {
|
|
106
|
+
await this.assertPackaged(project);
|
|
107
|
+
await this.docker.build(project.projectRoot, {
|
|
108
|
+
cwd: project.projectRoot,
|
|
109
|
+
dockerfile: _nodepath.default.join(project.projectRoot, dockerfile),
|
|
110
|
+
tags,
|
|
111
|
+
buildArgs,
|
|
112
|
+
secrets
|
|
113
|
+
});
|
|
114
|
+
const shouldPush = options.push || dockerConfig.push;
|
|
115
|
+
if (shouldPush && !options.dryRun) {
|
|
116
|
+
for (const tag of tags){
|
|
117
|
+
await this.docker.push(tag, {
|
|
118
|
+
cwd: project.projectRoot
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
} else if (shouldPush && options.dryRun) {
|
|
122
|
+
this.#logger.info(`[dry-run] Skipping push for ${project.name}`);
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
projectName: project.name,
|
|
126
|
+
image,
|
|
127
|
+
tags,
|
|
128
|
+
succeeded: true,
|
|
129
|
+
message: options.dryRun ? `Built ${image} (not pushed)` : `Built ${image}`
|
|
130
|
+
};
|
|
131
|
+
} catch (reason) {
|
|
132
|
+
const message = (0, _errors.formatUnknownError)(reason);
|
|
133
|
+
return {
|
|
134
|
+
projectName: project.name,
|
|
135
|
+
image,
|
|
136
|
+
tags,
|
|
137
|
+
succeeded: false,
|
|
138
|
+
message,
|
|
139
|
+
error: `${project.name}: ${message}`
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
interpolateBuildArgs(buildArgs, version) {
|
|
144
|
+
const result = {};
|
|
145
|
+
const versionPlaceholder = "$" + "{version}";
|
|
146
|
+
for (const [key, value] of Object.entries(buildArgs ?? {})){
|
|
147
|
+
result[key] = value.split(versionPlaceholder).join(version);
|
|
148
|
+
}
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Keep FORGE_DOCKER_EXTRA_TAGS_JSON scoped to this image so multi-image
|
|
153
|
+
* publishes do not stamp create:latest onto the app Dev Container (and vice versa).
|
|
154
|
+
*/ extraTagsForImage(image, tags) {
|
|
155
|
+
const prefix = `${image}:`;
|
|
156
|
+
const seen = new Set();
|
|
157
|
+
const result = [];
|
|
158
|
+
for (const tag of tags){
|
|
159
|
+
if (tag === image || tag.startsWith(prefix)) {
|
|
160
|
+
if (!seen.has(tag)) {
|
|
161
|
+
seen.add(tag);
|
|
162
|
+
result.push(tag);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
defaultImageName(projectName, workspacePackageJson) {
|
|
169
|
+
const repositoryPath = process.env.FORGE_DOCKER_NAMESPACE?.trim() || workspacePackageJson.getRepositoryFullName() || this.normalizeDockerRepository(projectName);
|
|
170
|
+
const projectSlug = this.normalizeProjectSlug(projectName);
|
|
171
|
+
if (repositoryPath.includes("/") && projectSlug !== "") {
|
|
172
|
+
return `${this.#defaultRegistry}/${repositoryPath}/${projectSlug}`;
|
|
173
|
+
}
|
|
174
|
+
return `${this.#defaultRegistry}/${repositoryPath}`;
|
|
175
|
+
}
|
|
176
|
+
normalizeDockerRepository(name) {
|
|
177
|
+
const repository = name.replace(/^@/, "").split("/").map((segment)=>segment.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "")).filter(Boolean).join("/");
|
|
178
|
+
if (repository === "") {
|
|
179
|
+
throw new _errors.ForgeError(`Could not derive a Docker repository from project name "${name}"`);
|
|
180
|
+
}
|
|
181
|
+
return repository;
|
|
182
|
+
}
|
|
183
|
+
normalizeProjectSlug(name) {
|
|
184
|
+
const unscoped = name.includes("/") ? name.split("/").at(-1) ?? name : name;
|
|
185
|
+
const slug = unscoped.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
186
|
+
if (slug === "") {
|
|
187
|
+
throw new _errors.ForgeError(`Could not derive a Docker project slug from project name "${name}"`);
|
|
188
|
+
}
|
|
189
|
+
return slug;
|
|
190
|
+
}
|
|
191
|
+
parseJsonEnv(name, fallback) {
|
|
192
|
+
const value = process.env[name];
|
|
193
|
+
if (value == null || value.trim() === "") {
|
|
194
|
+
return fallback;
|
|
195
|
+
}
|
|
196
|
+
try {
|
|
197
|
+
return JSON.parse(value);
|
|
198
|
+
} catch (reason) {
|
|
199
|
+
throw new _errors.ForgeError(`Invalid JSON in ${name}: ${(0, _errors.formatUnknownError)(reason)}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
Docker = _ts_decorate([
|
|
204
|
+
(0, _decorators.injectable)(),
|
|
205
|
+
_ts_metadata("design:type", Function),
|
|
206
|
+
_ts_metadata("design:paramtypes", [
|
|
207
|
+
typeof _workspace.Workspace === "undefined" ? Object : _workspace.Workspace
|
|
208
|
+
])
|
|
209
|
+
], Docker);
|
|
@@ -8,10 +8,14 @@ _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);
|
|
13
|
+
_export_star(require("./package.action.js"), exports);
|
|
14
|
+
_export_star(require("./paths.action.js"), exports);
|
|
12
15
|
_export_star(require("./publish.action.js"), exports);
|
|
13
16
|
_export_star(require("./sync-lock-file.action.js"), exports);
|
|
14
17
|
_export_star(require("./tag.action.js"), exports);
|
|
18
|
+
_export_star(require("./typecheck.action.js"), exports);
|
|
15
19
|
_export_star(require("./unlink.action.js"), exports);
|
|
16
20
|
_export_star(require("./version.action.js"), exports);
|
|
17
21
|
_export_star(require("./watch.action.js"), exports);
|
|
@@ -28,5 +32,3 @@ function _export_star(from, to) {
|
|
|
28
32
|
});
|
|
29
33
|
return from;
|
|
30
34
|
}
|
|
31
|
-
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2J1aWxkLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2xlYW4uYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21taXQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb3B5LmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVwZW5kZW5jeS1yZXBvcnQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZXBlbmRlbmN5LXN5bmMuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saW5rLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHVibGlzaC5hY3Rpb24uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N5bmMtbG9jay1maWxlLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGFnLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdW5saW5rLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmVyc2lvbi5hY3Rpb24uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3dhdGNoLmFjdGlvbi5qc1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWM7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0EifQ==
|
|
@@ -22,8 +22,8 @@ _export(exports, {
|
|
|
22
22
|
const _promises = /*#__PURE__*/ _interop_require_default(require("node:fs/promises"));
|
|
23
23
|
const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
|
|
24
24
|
const _decorators = require("@decohere/crucible/decorators");
|
|
25
|
-
const
|
|
26
|
-
const _cli = require("@decohere/
|
|
25
|
+
const _workspace = require("@decohere/workspace");
|
|
26
|
+
const _cli = require("@decohere/devkit/cli");
|
|
27
27
|
const _scribe = require("@decohere/scribe");
|
|
28
28
|
require("../extensions/project.extensions.js");
|
|
29
29
|
const _errors = require("../errors.js");
|
|
@@ -149,8 +149,6 @@ Link = _ts_decorate([
|
|
|
149
149
|
(0, _decorators.injectable)(),
|
|
150
150
|
_ts_metadata("design:type", Function),
|
|
151
151
|
_ts_metadata("design:paramtypes", [
|
|
152
|
-
typeof
|
|
152
|
+
typeof _workspace.Workspace === "undefined" ? Object : _workspace.Workspace
|
|
153
153
|
])
|
|
154
154
|
], Link);
|
|
155
|
-
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2xpbmsuYWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvdXNlSW1wb3J0VHlwZTogPERJPlxuaW1wb3J0IHsgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IFwiLi4vZXh0ZW5zaW9ucy9wcm9qZWN0LmV4dGVuc2lvbnMuanNcIjtcbmltcG9ydCB7IEZvcmdlRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBMSU5LX01BTklGRVNUID0gXCIuZm9yZ2UtbGluay5qc29uXCI7XG5cbmV4cG9ydCB0eXBlIExpbmtPcHRpb25zID0ge1xuXHRjb25maWd1cmF0aW9uOiBzdHJpbmc7XG5cdHRhcmdldERpcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElOS19DT05GSUdVUkFUSU9OID0gXCJsaW5rXCI7XG5cbmV4cG9ydCB0eXBlIExpbmtNYW5pZmVzdCA9IHtcblx0d29ya3NwYWNlUm9vdDogc3RyaW5nO1xuXHRwZWVyTm9kZU1vZHVsZXNEaXI/OiBzdHJpbmc7XG5cdGxpbmtzOiBBcnJheTx7IHBhY2thZ2VOYW1lOiBzdHJpbmc7IHN5bWxpbmtQYXRoOiBzdHJpbmc7IG9yaWdpbmFsUGF0aDogc3RyaW5nIHwgbnVsbCB9Pjtcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMaW5rIGltcGxlbWVudHMgQWN0aW9uPExpbmtPcHRpb25zPiB7XG5cdCNsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKExpbmsubmFtZSk7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgd29ya3NwYWNlOiBXb3Jrc3BhY2UpIHt9XG5cblx0cHVibGljIHJ1biA9IGFzeW5jIChvcHRpb25zOiBMaW5rT3B0aW9ucyk6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+ID0+IHtcblx0XHRjb25zdCB0YXJnZXREaXIgPSBwYXRoLnJlc29sdmUob3B0aW9ucy50YXJnZXREaXIpO1xuXHRcdGNvbnN0IG5vZGVNb2R1bGVzRGlyID0gcGF0aC5qb2luKHRhcmdldERpciwgXCJub2RlX21vZHVsZXNcIik7XG5cblx0XHRjb25zdCBzdGF0ID0gYXdhaXQgZnMuc3RhdChub2RlTW9kdWxlc0RpcikuY2F0Y2goKCkgPT4gbnVsbCk7XG5cdFx0aWYgKHN0YXQgPT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoXG5cdFx0XHRcdGBub2RlX21vZHVsZXMgbm90IGZvdW5kIGluIFwiJHt0YXJnZXREaXJ9XCIuIFJ1biBwbnBtIGluc3RhbGwgZmlyc3QuYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcHJvamVjdHMgPSB0aGlzLndvcmtzcGFjZS5nZXRQcm9qZWN0cyhvcHRpb25zLmNvbmZpZ3VyYXRpb24pO1xuXHRcdGlmIChwcm9qZWN0cy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRocm93IG5ldyBGb3JnZUVycm9yKGBObyBwcm9qZWN0cyBmb3VuZCBmb3IgY29uZmlndXJhdGlvbiBcIiR7b3B0aW9ucy5jb25maWd1cmF0aW9ufVwiYCk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9hZCBhbnkgZXhpc3RpbmcgbWFuaWZlc3Qgc28gb3JpZ2luYWxQYXRoIHZhbHVlcyBhcmUgcHJlc2VydmVkIG9uIHJlLWxpbmtcblx0XHRjb25zdCBtYW5pZmVzdFBhdGggPSBwYXRoLmpvaW4odGFyZ2V0RGlyLCBMSU5LX01BTklGRVNUKTtcblx0XHRjb25zdCBleGlzdGluZ01hbmlmZXN0VGV4dCA9IGF3YWl0IGZzLnJlYWRGaWxlKG1hbmlmZXN0UGF0aCwgXCJ1dGY4XCIpLmNhdGNoKCgpID0+IG51bGwpO1xuXHRcdGNvbnN0IGV4aXN0aW5nTWFuaWZlc3Q6IExpbmtNYW5pZmVzdCB8IG51bGwgPVxuXHRcdFx0ZXhpc3RpbmdNYW5pZmVzdFRleHQgIT0gbnVsbCA/IEpTT04ucGFyc2UoZXhpc3RpbmdNYW5pZmVzdFRleHQpIDogbnVsbDtcblxuXHRcdGNvbnN0IG1hbmlmZXN0OiBMaW5rTWFuaWZlc3QgPSB7XG5cdFx0XHR3b3Jrc3BhY2VSb290OiB0aGlzLndvcmtzcGFjZS5yb290RGlyLFxuXHRcdFx0bGlua3M6IFtdLFxuXHRcdH07XG5cblx0XHRmb3IgKGNvbnN0IHByb2plY3Qgb2YgcHJvamVjdHMpIHtcblx0XHRcdGNvbnN0IHBrZyA9IGF3YWl0IHByb2plY3QuZ2V0UGFja2FnZUpzb24oKTtcblx0XHRcdGNvbnN0IHBhY2thZ2VOYW1lID0gcGtnLm5hbWU7XG5cdFx0XHRpZiAoIXBhY2thZ2VOYW1lKSB7XG5cdFx0XHRcdHRoaXMuI2xvZ2dlci50cmFjZShgU2tpcHBpbmcgcHJvamVjdCBcIiR7cHJvamVjdC5uYW1lfVwiIOKAlCBubyBwYWNrYWdlIG5hbWVgKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlc29sdmUgdGhlIGJ1aWxkIG91dHB1dCBkaXJlY3RvcnkgKG5vIHRhcmdldCBhcmcg4oCUIGRlYnVnIGNvbmZpZyBpcyBub3QgcGFja2VkKVxuXHRcdFx0Y29uc3Qgb3V0RGlyID0gcHJvamVjdC5nZXRPdXREaXIoKTtcblx0XHRcdGNvbnN0IGFic29sdXRlT3V0RGlyID0gcGF0aC5yZXNvbHZlKG91dERpcik7XG5cblx0XHRcdC8vIFByZS1jcmVhdGUgdGhlIG91dHB1dCBkaXIgc28gdGhlIHN5bWxpbmsgaXMgdmFsaWQgZXZlbiBiZWZvcmUgYSBidWlsZCBjb21wbGV0ZXMuXG5cdFx0XHRhd2FpdCBmcy5ta2RpcihhYnNvbHV0ZU91dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0XHRcdC8vIENvbXB1dGUgc3ltbGluayBwYXRoIGluc2lkZSB0YXJnZXQgbm9kZV9tb2R1bGVzXG5cdFx0XHRjb25zdCBzeW1saW5rUGF0aCA9IHBhdGguam9pbihub2RlTW9kdWxlc0RpciwgLi4ucGFja2FnZU5hbWUuc3BsaXQoXCIvXCIpKTtcblx0XHRcdGNvbnN0IHN5bWxpbmtQYXJlbnQgPSBwYXRoLmRpcm5hbWUoc3ltbGlua1BhdGgpO1xuXG5cdFx0XHQvLyBDYXB0dXJlIGFueSBleGlzdGluZyBlbnRyeSBzbyB3ZSBjYW4gcmVzdG9yZSBpdCBvbiB1bmxpbmsuXG5cdFx0XHQvLyBJZiBhIG1hbmlmZXN0IGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIHBhY2thZ2UsIHByZXNlcnZlIGl0cyBvcmlnaW5hbFBhdGgg4oCUXG5cdFx0XHQvLyB0aGUgY3VycmVudCBzeW1saW5rIGlzIG91ciBvd24gYW5kIG11c3Qgbm90IGJlIHRyZWF0ZWQgYXMgdGhlIG9yaWdpbmFsLlxuXHRcdFx0bGV0IG9yaWdpbmFsUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRjb25zdCBleGlzdGluZ1N0YXQgPSBhd2FpdCBmcy5sc3RhdChzeW1saW5rUGF0aCkuY2F0Y2goKCkgPT4gbnVsbCk7XG5cdFx0XHRpZiAoZXhpc3RpbmdTdGF0ICE9IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdFbnRyeSA9IGV4aXN0aW5nTWFuaWZlc3Q/LmxpbmtzLmZpbmQoXG5cdFx0XHRcdFx0KGwpID0+IGwucGFja2FnZU5hbWUgPT09IHBhY2thZ2VOYW1lLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoZXhpc3RpbmdFbnRyeSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Ly8gQWxyZWFkeSBsaW5rZWQg4oCUIHByZXNlcnZlIHRoZSByZWNvcmRlZCBvcmlnaW5hbFBhdGggYW5kIHJlcGxhY2UgdGhlIHN5bWxpbmtcblx0XHRcdFx0XHRvcmlnaW5hbFBhdGggPSBleGlzdGluZ0VudHJ5Lm9yaWdpbmFsUGF0aDtcblx0XHRcdFx0XHRpZiAoZXhpc3RpbmdTdGF0LmlzU3ltYm9saWNMaW5rKCkpIHtcblx0XHRcdFx0XHRcdGF3YWl0IGZzLnVubGluayhzeW1saW5rUGF0aCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGV4aXN0aW5nU3RhdC5pc1N5bWJvbGljTGluaygpKSB7XG5cdFx0XHRcdFx0b3JpZ2luYWxQYXRoID0gYXdhaXQgZnMucmVhZGxpbmsoc3ltbGlua1BhdGgpO1xuXHRcdFx0XHRcdGF3YWl0IGZzLnVubGluayhzeW1saW5rUGF0aCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gUmVhbCBkaXJlY3Rvcnkg4oCUIGJhY2sgaXQgdXAgYnkgcmVuYW1pbmdcblx0XHRcdFx0XHRvcmlnaW5hbFBhdGggPSBgJHtzeW1saW5rUGF0aH0uX19mb3JnZV9iYWNrdXBfX2A7XG5cdFx0XHRcdFx0YXdhaXQgZnMucmVuYW1lKHN5bWxpbmtQYXRoLCBvcmlnaW5hbFBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IGZzLm1rZGlyKHN5bWxpbmtQYXJlbnQsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHRcdFx0YXdhaXQgZnMuc3ltbGluayhhYnNvbHV0ZU91dERpciwgc3ltbGlua1BhdGgsIFwiZGlyXCIpO1xuXG5cdFx0XHRtYW5pZmVzdC5saW5rcy5wdXNoKHsgcGFja2FnZU5hbWUsIHN5bWxpbmtQYXRoLCBvcmlnaW5hbFBhdGggfSk7XG5cdFx0XHR0aGlzLiNsb2dnZXIuaW5mbyhgTGlua2VkICR7cGFja2FnZU5hbWV9IOKGkiAke2Fic29sdXRlT3V0RGlyfWApO1xuXHRcdH1cblxuXHRcdC8vIENyZWF0ZSBhIHBlZXIgbm9kZV9tb2R1bGVzIGF0IHRoZSBidWlsZCBvdXRwdXQgcm9vdCBzbyBOb2RlIGNhbiByZXNvbHZlXG5cdFx0Ly8gYmFyZSBzcGVjaWZpZXJzIGZyb20gdGhlIHJlYWwgKG5vbi1zeW1saW5rKSBwYXRocyBvZiBsaW5rZWQgcGFja2FnZXMuXG5cdFx0aWYgKG1hbmlmZXN0LmxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGJ1aWxkUm9vdCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0c1swXS5nZXRSb290T3V0KCkpO1xuXHRcdFx0Y29uc3QgcGVlck5vZGVNb2R1bGVzRGlyID0gcGF0aC5qb2luKGJ1aWxkUm9vdCwgXCJub2RlX21vZHVsZXNcIik7XG5cdFx0XHRhd2FpdCBmcy5ybShwZWVyTm9kZU1vZHVsZXNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcblx0XHRcdGZvciAoY29uc3QgcHJvamVjdCBvZiBwcm9qZWN0cykge1xuXHRcdFx0XHRjb25zdCBwa2cgPSBhd2FpdCBwcm9qZWN0LmdldFBhY2thZ2VKc29uKCk7XG5cdFx0XHRcdGlmICghcGtnLm5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRjb25zdCBvdXREaXIgPSBwYXRoLnJlc29sdmUocHJvamVjdC5nZXRPdXREaXIoKSk7XG5cdFx0XHRcdGNvbnN0IHBlZXJTeW1saW5rID0gcGF0aC5qb2luKHBlZXJOb2RlTW9kdWxlc0RpciwgLi4ucGtnLm5hbWUuc3BsaXQoXCIvXCIpKTtcblx0XHRcdFx0YXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKHBlZXJTeW1saW5rKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cdFx0XHRcdGF3YWl0IGZzLnN5bWxpbmsob3V0RGlyLCBwZWVyU3ltbGluaywgXCJkaXJcIik7XG5cdFx0XHRcdHRoaXMuI2xvZ2dlci50cmFjZShgUGVlci1saW5rZWQgJHtwa2cubmFtZX0g4oaSICR7b3V0RGlyfWApO1xuXHRcdFx0fVxuXHRcdFx0bWFuaWZlc3QucGVlck5vZGVNb2R1bGVzRGlyID0gcGVlck5vZGVNb2R1bGVzRGlyO1xuXHRcdFx0dGhpcy4jbG9nZ2VyLmluZm8oYENyZWF0ZWQgcGVlciBub2RlX21vZHVsZXMgYXQgJHtwZWVyTm9kZU1vZHVsZXNEaXJ9YCk7XG5cdFx0fVxuXG5cdFx0YXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbih0YXJnZXREaXIsIExJTktfTUFOSUZFU1QpLCBKU09OLnN0cmluZ2lmeShtYW5pZmVzdCwgbnVsbCwgMikpO1xuXG5cdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlN1Y2Nlc3MoTGluay5uYW1lKTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6WyJERUZBVUxUX0xJTktfQ09ORklHVVJBVElPTiIsIkxJTktfTUFOSUZFU1QiLCJMaW5rIiwic2NyaWJlIiwibG9nZ2VyIiwibmFtZSIsIndvcmtzcGFjZSIsInJ1biIsIm9wdGlvbnMiLCJ0YXJnZXREaXIiLCJwYXRoIiwicmVzb2x2ZSIsIm5vZGVNb2R1bGVzRGlyIiwiam9pbiIsInN0YXQiLCJmcyIsImNhdGNoIiwiRm9yZ2VFcnJvciIsInByb2plY3RzIiwiZ2V0UHJvamVjdHMiLCJjb25maWd1cmF0aW9uIiwibGVuZ3RoIiwibWFuaWZlc3RQYXRoIiwiZXhpc3RpbmdNYW5pZmVzdFRleHQiLCJyZWFkRmlsZSIsImV4aXN0aW5nTWFuaWZlc3QiLCJKU09OIiwicGFyc2UiLCJtYW5pZmVzdCIsIndvcmtzcGFjZVJvb3QiLCJyb290RGlyIiwibGlua3MiLCJwcm9qZWN0IiwicGtnIiwiZ2V0UGFja2FnZUpzb24iLCJwYWNrYWdlTmFtZSIsInRyYWNlIiwib3V0RGlyIiwiZ2V0T3V0RGlyIiwiYWJzb2x1dGVPdXREaXIiLCJta2RpciIsInJlY3Vyc2l2ZSIsInN5bWxpbmtQYXRoIiwic3BsaXQiLCJzeW1saW5rUGFyZW50IiwiZGlybmFtZSIsIm9yaWdpbmFsUGF0aCIsImV4aXN0aW5nU3RhdCIsImxzdGF0IiwiZXhpc3RpbmdFbnRyeSIsImZpbmQiLCJsIiwiaXNTeW1ib2xpY0xpbmsiLCJ1bmxpbmsiLCJyZWFkbGluayIsInJlbmFtZSIsInN5bWxpbmsiLCJwdXNoIiwiaW5mbyIsImJ1aWxkUm9vdCIsImdldFJvb3RPdXQiLCJwZWVyTm9kZU1vZHVsZXNEaXIiLCJybSIsImZvcmNlIiwicGVlclN5bWxpbmsiLCJ3cml0ZUZpbGUiLCJzdHJpbmdpZnkiLCJBY3Rpb25SZXNwb25zZSIsIlN1Y2Nlc3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBa0JhQTtlQUFBQTs7UUFQQUM7ZUFBQUE7O1FBZ0JBQztlQUFBQTs7O2lFQTNCRTtpRUFDRTs0QkFDVTtzQkFFRDtxQkFFSzt3QkFDUjtRQUNoQjt3QkFDb0I7Ozs7Ozs7Ozs7Ozs7OztBQUVwQixNQUFNRCxnQkFBZ0I7QUFPdEIsTUFBTUQsNkJBQTZCO0FBU25DLE1BQU1FOztJQUNaLENBQUEsTUFBTyxHQUFHQyxjQUFNLENBQUNDLE1BQU0sQ0FBQ0YsS0FBS0csSUFBSSxFQUFFO0lBRW5DLFlBQW1CLEFBQWlCQyxTQUFvQixDQUFFO2FBQXRCQSxZQUFBQTtJQUF1QjtJQUVwREMsTUFBTSxPQUFPQztRQUNuQixNQUFNQyxZQUFZQyxpQkFBSSxDQUFDQyxPQUFPLENBQUNILFFBQVFDLFNBQVM7UUFDaEQsTUFBTUcsaUJBQWlCRixpQkFBSSxDQUFDRyxJQUFJLENBQUNKLFdBQVc7UUFFNUMsTUFBTUssT0FBTyxNQUFNQyxpQkFBRSxDQUFDRCxJQUFJLENBQUNGLGdCQUFnQkksS0FBSyxDQUFDLElBQU07UUFDdkQsSUFBSUYsUUFBUSxNQUFNO1lBQ2pCLE1BQU0sSUFBSUcsa0JBQVUsQ0FDbkIsQ0FBQywyQkFBMkIsRUFBRVIsVUFBVSwwQkFBMEIsQ0FBQztRQUVyRTtRQUVBLE1BQU1TLFdBQVcsSUFBSSxDQUFDWixTQUFTLENBQUNhLFdBQVcsQ0FBQ1gsUUFBUVksYUFBYTtRQUNqRSxJQUFJRixTQUFTRyxNQUFNLEtBQUssR0FBRztZQUMxQixN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
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "PackageDeployable", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return PackageDeployable;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _promises = /*#__PURE__*/ _interop_require_default(require("node:fs/promises"));
|
|
12
|
+
const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
|
|
13
|
+
const _decorators = require("@decohere/crucible/decorators");
|
|
14
|
+
const _workspace = require("@decohere/workspace");
|
|
15
|
+
const _cli = require("@decohere/devkit/cli");
|
|
16
|
+
const _interop = require("@decohere/devkit/interop");
|
|
17
|
+
const _io = require("@decohere/core/io");
|
|
18
|
+
const _scribe = require("@decohere/scribe");
|
|
19
|
+
const _errors = require("../errors.js");
|
|
20
|
+
const _dependencypinnerservice = require("../packaging/dependency-pinner.service.js");
|
|
21
|
+
const _deployable = require("../packaging/deployable.js");
|
|
22
|
+
const _importgraphservice = require("../packaging/import-graph.service.js");
|
|
23
|
+
const _releaseexports = require("../packaging/release-exports.js");
|
|
24
|
+
const _uiassets = require("../packaging/ui-assets.js");
|
|
25
|
+
const _workspaceconfig = require("../workspace.config.js");
|
|
26
|
+
function _interop_require_default(obj) {
|
|
27
|
+
return obj && obj.__esModule ? obj : {
|
|
28
|
+
default: obj
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
32
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
33
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
34
|
+
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;
|
|
35
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
36
|
+
}
|
|
37
|
+
function _ts_metadata(k, v) {
|
|
38
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
39
|
+
}
|
|
40
|
+
class PackageDeployable {
|
|
41
|
+
workspace;
|
|
42
|
+
importGraph;
|
|
43
|
+
pinner;
|
|
44
|
+
#logger = _scribe.scribe.logger(PackageDeployable.name);
|
|
45
|
+
npm = new _interop.Npm();
|
|
46
|
+
constructor(workspace, importGraph, pinner){
|
|
47
|
+
this.workspace = workspace;
|
|
48
|
+
this.importGraph = importGraph;
|
|
49
|
+
this.pinner = pinner;
|
|
50
|
+
}
|
|
51
|
+
async run(options) {
|
|
52
|
+
const projects = this.workspace.getProjects(_workspaceconfig.Release.name);
|
|
53
|
+
const selected = await this.select(projects, options.project);
|
|
54
|
+
if (typeof selected === "string") {
|
|
55
|
+
return _cli.ActionResponse.Error(PackageDeployable.name, selected);
|
|
56
|
+
}
|
|
57
|
+
if (selected.length === 0) {
|
|
58
|
+
this.#logger.info("No projects found with a Dockerfile — nothing to package");
|
|
59
|
+
return _cli.ActionResponse.Success(PackageDeployable.name, []);
|
|
60
|
+
}
|
|
61
|
+
const releaseProjects = await this.releaseProjects(projects);
|
|
62
|
+
const responses = [];
|
|
63
|
+
for (const project of selected){
|
|
64
|
+
responses.push(await this.packageProject(project, releaseProjects, projects));
|
|
65
|
+
}
|
|
66
|
+
return responses.some((response)=>!response.succeeded) ? _cli.ActionResponse.Error(PackageDeployable.name, responses) : _cli.ActionResponse.Success(PackageDeployable.name, responses);
|
|
67
|
+
}
|
|
68
|
+
/** The deployables to package, or the reason a named project cannot be one. */ async select(projects, requested) {
|
|
69
|
+
if (requested == null || requested === "") {
|
|
70
|
+
const found = [];
|
|
71
|
+
for (const project of projects){
|
|
72
|
+
if (await _deployable.deployable.isDeployable(project)) {
|
|
73
|
+
found.push(project);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return found;
|
|
77
|
+
}
|
|
78
|
+
const project = projects.find((candidate)=>candidate.name === requested);
|
|
79
|
+
if (project == null) {
|
|
80
|
+
return `${requested} is not a workspace project. Known projects: ${projects.map((p)=>p.name).join(", ")}`;
|
|
81
|
+
}
|
|
82
|
+
if (!await _deployable.deployable.isDeployable(project)) {
|
|
83
|
+
return `${requested} has no ${_deployable.deployable.dockerfileName(project)}, so it is a library, not a deployable. ` + "Libraries are packaged into the deployables that import them.";
|
|
84
|
+
}
|
|
85
|
+
return [
|
|
86
|
+
project
|
|
87
|
+
];
|
|
88
|
+
}
|
|
89
|
+
async releaseProjects(projects) {
|
|
90
|
+
const entries = await Promise.all(projects.map(async (project)=>{
|
|
91
|
+
const pkg = await project.getPackageJson();
|
|
92
|
+
return [
|
|
93
|
+
project.name,
|
|
94
|
+
{
|
|
95
|
+
name: project.name,
|
|
96
|
+
pkg,
|
|
97
|
+
projectRoot: _nodepath.default.resolve(project.projectRoot),
|
|
98
|
+
releaseDir: _nodepath.default.resolve(project.getOutDir())
|
|
99
|
+
}
|
|
100
|
+
];
|
|
101
|
+
}));
|
|
102
|
+
return new Map(entries);
|
|
103
|
+
}
|
|
104
|
+
async packageProject(project, releaseProjects, projects) {
|
|
105
|
+
const outDir = _nodepath.default.join(_nodepath.default.resolve(project.projectRoot), _deployable.PACKAGE_DIR);
|
|
106
|
+
const base = {
|
|
107
|
+
projectName: project.name,
|
|
108
|
+
outDir,
|
|
109
|
+
workspacePackages: [],
|
|
110
|
+
dependencies: {}
|
|
111
|
+
};
|
|
112
|
+
try {
|
|
113
|
+
const entry = releaseProjects.get(project.name);
|
|
114
|
+
if (!await _io.io.directoryExists(_nodepath.default.join(entry.releaseDir, "es6"))) {
|
|
115
|
+
throw new _errors.ForgeError(`No release build for ${project.name}. Run \`forge build --configuration release\` first.`);
|
|
116
|
+
}
|
|
117
|
+
const ui = await _uiassets.uiAssets.resolve(project, projects);
|
|
118
|
+
const reached = await this.importGraph.walk(entry, releaseProjects);
|
|
119
|
+
const libraries = [
|
|
120
|
+
...reached.workspace
|
|
121
|
+
].filter((name)=>name !== project.name).sort().map((name)=>releaseProjects.get(name));
|
|
122
|
+
const dependencies = await this.pinner.pin(reached.thirdParty, [
|
|
123
|
+
entry,
|
|
124
|
+
...libraries
|
|
125
|
+
], releaseProjects, {
|
|
126
|
+
dir: _nodepath.default.resolve(this.workspace.rootDir),
|
|
127
|
+
pkg: await this.workspace.getPackageJson()
|
|
128
|
+
});
|
|
129
|
+
await this.write(entry, libraries, dependencies, outDir, ui);
|
|
130
|
+
const workspacePackages = [
|
|
131
|
+
...reached.workspace
|
|
132
|
+
].sort();
|
|
133
|
+
this.#logger.info(`Packaged ${project.name} to ${outDir}`, {
|
|
134
|
+
workspace: workspacePackages,
|
|
135
|
+
thirdParty: Object.keys(dependencies)
|
|
136
|
+
});
|
|
137
|
+
return {
|
|
138
|
+
projectName: project.name,
|
|
139
|
+
outDir,
|
|
140
|
+
workspacePackages,
|
|
141
|
+
dependencies,
|
|
142
|
+
succeeded: true,
|
|
143
|
+
message: `Packaged ${project.name} to ${outDir}`
|
|
144
|
+
};
|
|
145
|
+
} catch (reason) {
|
|
146
|
+
const message = (0, _errors.formatUnknownError)(reason);
|
|
147
|
+
return {
|
|
148
|
+
...base,
|
|
149
|
+
succeeded: false,
|
|
150
|
+
message,
|
|
151
|
+
error: `${project.name}: ${message}`
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async write(entry, libraries, dependencies, outDir, ui) {
|
|
156
|
+
await _promises.default.rm(outDir, {
|
|
157
|
+
recursive: true,
|
|
158
|
+
force: true
|
|
159
|
+
});
|
|
160
|
+
await _promises.default.mkdir(outDir, {
|
|
161
|
+
recursive: true
|
|
162
|
+
});
|
|
163
|
+
await this.writeJson(_nodepath.default.join(outDir, "package.json"), {
|
|
164
|
+
name: entry.name.replace(/^@/, "").replace("/", "-"),
|
|
165
|
+
version: entry.pkg.version,
|
|
166
|
+
private: true,
|
|
167
|
+
type: "module",
|
|
168
|
+
scripts: {
|
|
169
|
+
start: `node es6/${_releaseexports.releaseExports.toJs(entry.pkg.main ?? "src/index.ts")}`
|
|
170
|
+
},
|
|
171
|
+
dependencies
|
|
172
|
+
});
|
|
173
|
+
// npm writes real folders. It also removes anything in node_modules it does not know,
|
|
174
|
+
// so the workspace libraries are copied in only after it has run.
|
|
175
|
+
if (Object.keys(dependencies).length > 0) {
|
|
176
|
+
await this.npm.installProduction({
|
|
177
|
+
cwd: outDir
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
await this.copyTree(_nodepath.default.join(entry.releaseDir, "es6"), _nodepath.default.join(outDir, "es6"));
|
|
181
|
+
const config = _nodepath.default.join(_nodepath.default.resolve(this.workspace.rootDir), "config");
|
|
182
|
+
if (await _io.io.directoryExists(config)) {
|
|
183
|
+
await this.copyTree(config, _nodepath.default.join(outDir, "config"));
|
|
184
|
+
}
|
|
185
|
+
if (ui != null) {
|
|
186
|
+
await this.copyTree(ui.from, _nodepath.default.join(outDir, ui.to));
|
|
187
|
+
}
|
|
188
|
+
for (const library of libraries){
|
|
189
|
+
const target = _nodepath.default.join(outDir, "node_modules", ...library.name.split("/"));
|
|
190
|
+
await this.copyTree(_nodepath.default.join(library.releaseDir, "es6"), _nodepath.default.join(target, "es6"));
|
|
191
|
+
await this.writeJson(_nodepath.default.join(target, "package.json"), {
|
|
192
|
+
name: library.name,
|
|
193
|
+
version: library.pkg.version,
|
|
194
|
+
type: "module",
|
|
195
|
+
exports: _releaseexports.releaseExports.build(library.pkg)
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
await this.assertNoSymlinks(outDir);
|
|
199
|
+
}
|
|
200
|
+
/** Copies file contents, never links: a symlink in the output would break outside the image. */ async copyTree(from, to) {
|
|
201
|
+
await _promises.default.cp(from, to, {
|
|
202
|
+
recursive: true,
|
|
203
|
+
dereference: true
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
async writeJson(filePath, value) {
|
|
207
|
+
await _io.io.writeFile(filePath, `${JSON.stringify(value, null, "\t")}\n`, {
|
|
208
|
+
mkdir: true,
|
|
209
|
+
encoding: "utf8"
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
async assertNoSymlinks(dir) {
|
|
213
|
+
for (const entry of (await _promises.default.readdir(dir, {
|
|
214
|
+
withFileTypes: true
|
|
215
|
+
}))){
|
|
216
|
+
const entryPath = _nodepath.default.join(dir, entry.name);
|
|
217
|
+
if (entry.isSymbolicLink()) {
|
|
218
|
+
throw new _errors.ForgeError(`The packaged output must hold no symlinks, but found ${entryPath}`);
|
|
219
|
+
}
|
|
220
|
+
if (entry.isDirectory()) {
|
|
221
|
+
await this.assertNoSymlinks(entryPath);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
PackageDeployable = _ts_decorate([
|
|
227
|
+
(0, _decorators.injectable)(),
|
|
228
|
+
_ts_metadata("design:type", Function),
|
|
229
|
+
_ts_metadata("design:paramtypes", [
|
|
230
|
+
typeof _workspace.Workspace === "undefined" ? Object : _workspace.Workspace,
|
|
231
|
+
typeof _importgraphservice.ImportGraph === "undefined" ? Object : _importgraphservice.ImportGraph,
|
|
232
|
+
typeof _dependencypinnerservice.DependencyPinner === "undefined" ? Object : _dependencypinnerservice.DependencyPinner
|
|
233
|
+
])
|
|
234
|
+
], PackageDeployable);
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get PATHS_FILE () {
|
|
13
|
+
return PATHS_FILE;
|
|
14
|
+
},
|
|
15
|
+
get Paths () {
|
|
16
|
+
return Paths;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _nodefs = require("node:fs");
|
|
20
|
+
const _promises = require("node:fs/promises");
|
|
21
|
+
const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
|
|
22
|
+
const _decorators = require("@decohere/crucible/decorators");
|
|
23
|
+
const _workspace = require("@decohere/workspace");
|
|
24
|
+
const _cli = require("@decohere/devkit/cli");
|
|
25
|
+
const _scribe = require("@decohere/scribe");
|
|
26
|
+
function _interop_require_default(obj) {
|
|
27
|
+
return obj && obj.__esModule ? obj : {
|
|
28
|
+
default: obj
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
32
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
33
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
34
|
+
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;
|
|
35
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
36
|
+
}
|
|
37
|
+
function _ts_metadata(k, v) {
|
|
38
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
39
|
+
}
|
|
40
|
+
const PATHS_FILE = "tsconfig.paths.json";
|
|
41
|
+
class Paths {
|
|
42
|
+
workspace;
|
|
43
|
+
#logger = _scribe.scribe.logger(Paths.name);
|
|
44
|
+
constructor(workspace){
|
|
45
|
+
this.workspace = workspace;
|
|
46
|
+
}
|
|
47
|
+
async run(options) {
|
|
48
|
+
const file = _nodepath.default.join(this.workspace.rootDir, PATHS_FILE);
|
|
49
|
+
if (this.workspace.isStandalone) {
|
|
50
|
+
// One project has no other projects to import from source.
|
|
51
|
+
this.#logger.info(`Standalone project: no ${PATHS_FILE} needed`);
|
|
52
|
+
return _cli.ActionResponse.Success(Paths.name, [
|
|
53
|
+
{
|
|
54
|
+
file,
|
|
55
|
+
changed: false,
|
|
56
|
+
succeeded: true
|
|
57
|
+
}
|
|
58
|
+
]);
|
|
59
|
+
}
|
|
60
|
+
const content = Paths.render(this.workspace);
|
|
61
|
+
const current = (0, _nodefs.existsSync)(file) ? await (0, _promises.readFile)(file, "utf8") : null;
|
|
62
|
+
const changed = current !== content;
|
|
63
|
+
if (options.check) {
|
|
64
|
+
if (!changed) {
|
|
65
|
+
return _cli.ActionResponse.Success(Paths.name, [
|
|
66
|
+
{
|
|
67
|
+
file,
|
|
68
|
+
changed,
|
|
69
|
+
succeeded: true
|
|
70
|
+
}
|
|
71
|
+
]);
|
|
72
|
+
}
|
|
73
|
+
const error = `${PATHS_FILE} is out of date. Run \`forge paths\` to update it.`;
|
|
74
|
+
this.#logger.error(error);
|
|
75
|
+
return _cli.ActionResponse.Error(Paths.name, [
|
|
76
|
+
{
|
|
77
|
+
file,
|
|
78
|
+
changed,
|
|
79
|
+
succeeded: false,
|
|
80
|
+
error
|
|
81
|
+
}
|
|
82
|
+
]);
|
|
83
|
+
}
|
|
84
|
+
if (changed) {
|
|
85
|
+
await (0, _promises.writeFile)(file, content);
|
|
86
|
+
this.#logger.info(`Wrote ${PATHS_FILE}`);
|
|
87
|
+
}
|
|
88
|
+
return _cli.ActionResponse.Success(Paths.name, [
|
|
89
|
+
{
|
|
90
|
+
file,
|
|
91
|
+
changed,
|
|
92
|
+
succeeded: true
|
|
93
|
+
}
|
|
94
|
+
]);
|
|
95
|
+
}
|
|
96
|
+
/** The file's content: convention and exported subpaths only, never the tsconfig's own paths. */ static render(workspace) {
|
|
97
|
+
const rootDir = _nodepath.default.resolve(workspace.rootDir);
|
|
98
|
+
const { paths } = _workspace.packageAliases.build(workspace.getProjects("debug"), {
|
|
99
|
+
baseUrl: rootDir
|
|
100
|
+
});
|
|
101
|
+
const sorted = Object.fromEntries(Object.keys(paths).sort().map((key)=>[
|
|
102
|
+
key,
|
|
103
|
+
(paths[key] ?? []).map((target)=>`./${target}`)
|
|
104
|
+
]));
|
|
105
|
+
const json = {
|
|
106
|
+
$comment: "Generated by `forge paths` from the workspace packages. Do not edit.",
|
|
107
|
+
compilerOptions: {
|
|
108
|
+
paths: sorted
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
return `${JSON.stringify(json, null, 2)}\n`;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
Paths = _ts_decorate([
|
|
115
|
+
(0, _decorators.injectable)(),
|
|
116
|
+
_ts_metadata("design:type", Function),
|
|
117
|
+
_ts_metadata("design:paramtypes", [
|
|
118
|
+
typeof _workspace.Workspace === "undefined" ? Object : _workspace.Workspace
|
|
119
|
+
])
|
|
120
|
+
], Paths);
|