@decohere/forge 0.0.1-dev.20 → 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 +83 -36
- package/commonjs/src/actions/index.js +3 -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 +2 -4
- package/commonjs/src/commands/forge.command.js +1 -3
- package/commonjs/src/commands/index.js +3 -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 +15 -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 +82 -36
- package/es6/src/actions/index.js +3 -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 +2 -4
- package/es6/src/commands/forge.command.js +1 -3
- package/es6/src/commands/index.js +3 -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 +15 -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 +14 -3
- package/types/src/actions/index.d.ts +3 -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 +1 -1
- package/types/src/commands/forge.command.d.ts +2 -2
- package/types/src/commands/index.d.ts +3 -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 +10 -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
|
@@ -10,12 +10,13 @@ Object.defineProperty(exports, "Docker", {
|
|
|
10
10
|
});
|
|
11
11
|
const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
|
|
12
12
|
const _decorators = require("@decohere/crucible/decorators");
|
|
13
|
-
const
|
|
14
|
-
const _cli = require("@decohere/
|
|
15
|
-
const _interop = require("@decohere/
|
|
16
|
-
const _io = require("@decohere/
|
|
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
17
|
const _scribe = require("@decohere/scribe");
|
|
18
18
|
const _errors = require("../errors.js");
|
|
19
|
+
const _deployable = require("../packaging/deployable.js");
|
|
19
20
|
function _interop_require_default(obj) {
|
|
20
21
|
return obj && obj.__esModule ? obj : {
|
|
21
22
|
default: obj
|
|
@@ -41,10 +42,12 @@ class Docker {
|
|
|
41
42
|
async run(options) {
|
|
42
43
|
const projects = await this.getDockerProjects(this.workspace.getProjects(options.configuration));
|
|
43
44
|
if (projects.length === 0) {
|
|
44
|
-
|
|
45
|
+
this.#logger.info("No projects found with a Dockerfile — nothing to dockerize");
|
|
46
|
+
return _cli.ActionResponse.Success(Docker.name, []);
|
|
45
47
|
}
|
|
48
|
+
const workspacePackageJson = await this.workspace.getPackageJson();
|
|
46
49
|
const version = await this.workspace.getVersion();
|
|
47
|
-
const responses = await Promise.all(projects.map(async (project)=>await this.buildProject(project, version, options)));
|
|
50
|
+
const responses = await Promise.all(projects.map(async (project)=>await this.buildProject(project, workspacePackageJson, version, options)));
|
|
48
51
|
const failed = responses.filter((response)=>!response.succeeded);
|
|
49
52
|
if (failed.length > 0) {
|
|
50
53
|
return _cli.ActionResponse.Error(Docker.name, responses);
|
|
@@ -54,60 +57,76 @@ class Docker {
|
|
|
54
57
|
async getDockerProjects(projects) {
|
|
55
58
|
const result = [];
|
|
56
59
|
for (const project of projects){
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
if (!await _io.io.fileExists(dockerfilePath)) {
|
|
60
|
-
this.#logger.info(`Skipping ${project.name}: missing ${dockerfile}`);
|
|
60
|
+
if (!await _deployable.deployable.isDeployable(project)) {
|
|
61
|
+
this.#logger.info(`Skipping ${project.name}: missing ${_deployable.deployable.dockerfileName(project)}`);
|
|
61
62
|
continue;
|
|
62
63
|
}
|
|
63
64
|
result.push(project);
|
|
64
65
|
}
|
|
65
66
|
return result;
|
|
66
67
|
}
|
|
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) {
|
|
68
82
|
const dockerConfig = project.dockerConfig ?? {};
|
|
69
83
|
const envBuildArgs = this.parseJsonEnv("FORGE_DOCKER_BUILD_ARGS_JSON", {});
|
|
70
84
|
const envSecrets = this.parseJsonEnv("FORGE_DOCKER_SECRETS_JSON", {});
|
|
71
85
|
const envTags = this.parseJsonEnv("FORGE_DOCKER_EXTRA_TAGS_JSON", []);
|
|
72
|
-
const image = dockerConfig.image ?? this.defaultImageName(project.name);
|
|
86
|
+
const image = dockerConfig.image ?? this.defaultImageName(project.name, workspacePackageJson);
|
|
73
87
|
const dockerfile = dockerConfig.dockerfile ?? "Dockerfile";
|
|
74
|
-
const
|
|
75
|
-
`${image}:${version}`,
|
|
88
|
+
const extraTags = this.extraTagsForImage(image, [
|
|
76
89
|
...dockerConfig.tags ?? [],
|
|
77
90
|
...envTags
|
|
91
|
+
]);
|
|
92
|
+
const tags = [
|
|
93
|
+
`${image}:${version}`,
|
|
94
|
+
...extraTags
|
|
78
95
|
];
|
|
79
96
|
const buildArgs = this.interpolateBuildArgs({
|
|
80
|
-
...dockerConfig.buildArgs
|
|
97
|
+
...dockerConfig.buildArgs,
|
|
81
98
|
...envBuildArgs
|
|
82
99
|
}, version);
|
|
83
100
|
const secrets = {
|
|
84
|
-
...dockerConfig.secrets
|
|
101
|
+
...dockerConfig.secrets,
|
|
85
102
|
...envSecrets
|
|
86
103
|
};
|
|
87
104
|
this.#logger.info(`${options.dryRun ? "[dry-run] " : ""}Building ${project.name}`);
|
|
88
105
|
try {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
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
|
+
});
|
|
103
120
|
}
|
|
121
|
+
} else if (shouldPush && options.dryRun) {
|
|
122
|
+
this.#logger.info(`[dry-run] Skipping push for ${project.name}`);
|
|
104
123
|
}
|
|
105
124
|
return {
|
|
106
125
|
projectName: project.name,
|
|
107
126
|
image,
|
|
108
127
|
tags,
|
|
109
128
|
succeeded: true,
|
|
110
|
-
message: options.dryRun ?
|
|
129
|
+
message: options.dryRun ? `Built ${image} (not pushed)` : `Built ${image}`
|
|
111
130
|
};
|
|
112
131
|
} catch (reason) {
|
|
113
132
|
const message = (0, _errors.formatUnknownError)(reason);
|
|
@@ -129,8 +148,30 @@ class Docker {
|
|
|
129
148
|
}
|
|
130
149
|
return result;
|
|
131
150
|
}
|
|
132
|
-
|
|
133
|
-
|
|
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}`;
|
|
134
175
|
}
|
|
135
176
|
normalizeDockerRepository(name) {
|
|
136
177
|
const repository = name.replace(/^@/, "").split("/").map((segment)=>segment.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "")).filter(Boolean).join("/");
|
|
@@ -139,6 +180,14 @@ class Docker {
|
|
|
139
180
|
}
|
|
140
181
|
return repository;
|
|
141
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
|
+
}
|
|
142
191
|
parseJsonEnv(name, fallback) {
|
|
143
192
|
const value = process.env[name];
|
|
144
193
|
if (value == null || value.trim() === "") {
|
|
@@ -155,8 +204,6 @@ Docker = _ts_decorate([
|
|
|
155
204
|
(0, _decorators.injectable)(),
|
|
156
205
|
_ts_metadata("design:type", Function),
|
|
157
206
|
_ts_metadata("design:paramtypes", [
|
|
158
|
-
typeof
|
|
207
|
+
typeof _workspace.Workspace === "undefined" ? Object : _workspace.Workspace
|
|
159
208
|
])
|
|
160
209
|
], Docker);
|
|
161
|
-
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2RvY2tlci5hY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uLCBSZXN1bHRTdGF0dXMgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgQWN0aW9uUmVzcG9uc2UgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgRG9ja2VyIGFzIERvY2tlckludGVyb3AgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2ludGVyb3BcIjtcbmltcG9ydCB7IGlvIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pb1wiO1xuaW1wb3J0IHsgc2NyaWJlIH0gZnJvbSBcIkBkZWNvaGVyZS9zY3JpYmVcIjtcbmltcG9ydCB7IEZvcmdlRXJyb3IsIGZvcm1hdFVua25vd25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnMuanNcIjtcblxuZXhwb3J0IHR5cGUgRG9ja2VyT3B0aW9ucyA9IHtcblx0Y29uZmlndXJhdGlvbjogc3RyaW5nO1xuXHRkcnlSdW4/OiBib29sZWFuO1xuXHRwdXNoPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIERvY2tlclJlc3BvbnNlID0gUmVzdWx0U3RhdHVzICYge1xuXHRwcm9qZWN0TmFtZTogc3RyaW5nO1xuXHRpbWFnZTogc3RyaW5nO1xuXHR0YWdzOiBzdHJpbmdbXTtcblx0bWVzc2FnZTogc3RyaW5nO1xufTtcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERvY2tlciBpbXBsZW1lbnRzIEFjdGlvbjxEb2NrZXJPcHRpb25zPiB7XG5cdCNsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKERvY2tlci5uYW1lKTtcblx0cHJpdmF0ZSByZWFkb25seSBkb2NrZXIgPSBuZXcgRG9ja2VySW50ZXJvcCgpO1xuXHRyZWFkb25seSAjZGVmYXVsdFJlZ2lzdHJ5ID0gcHJvY2Vzcy5lbnYuRk9SR0VfRE9DS0VSX1JFR0lTVFJZPy50cmltKCkgfHwgXCJnaGNyLmlvXCI7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgd29ya3NwYWNlOiBXb3Jrc3BhY2UpIHt9XG5cblx0cHVibGljIGFzeW5jIHJ1bihvcHRpb25zOiBEb2NrZXJPcHRpb25zKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZTxEb2NrZXJSZXNwb25zZT4+IHtcblx0XHRjb25zdCBwcm9qZWN0cyA9IGF3YWl0IHRoaXMuZ2V0RG9ja2VyUHJvamVjdHMoXG5cdFx0XHR0aGlzLndvcmtzcGFjZS5nZXRQcm9qZWN0cyhvcHRpb25zLmNvbmZpZ3VyYXRpb24pLFxuXHRcdCk7XG5cdFx0aWYgKHByb2plY3RzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoYE5vIHByb2plY3RzIGZvdW5kIHdpdGggYSBEb2NrZXJmaWxlYCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmVyc2lvbiA9IGF3YWl0IHRoaXMud29ya3NwYWNlLmdldFZlcnNpb24oKTtcblx0XHRjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdHByb2plY3RzLm1hcChhc3luYyAocHJvamVjdCkgPT4gYXdhaXQgdGhpcy5idWlsZFByb2plY3QocHJvamVjdCwgdmVyc2lvbiwgb3B0aW9ucykpLFxuXHRcdCk7XG5cdFx0Y29uc3QgZmFpbGVkID0gcmVzcG9uc2VzLmZpbHRlcigocmVzcG9uc2UpID0+ICFyZXNwb25zZS5zdWNjZWVkZWQpO1xuXHRcdGlmIChmYWlsZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLkVycm9yKERvY2tlci5uYW1lLCByZXNwb25zZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gQWN0aW9uUmVzcG9uc2UuU3VjY2VzcyhEb2NrZXIubmFtZSwgcmVzcG9uc2VzKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZ2V0RG9ja2VyUHJvamVjdHMocHJvamVjdHM6IHJlYWRvbmx5IFByb2plY3RbXSkge1xuXHRcdGNvbnN0IHJlc3VsdDogUHJvamVjdFtdID0gW107XG5cdFx0Zm9yIChjb25zdCBwcm9qZWN0IG9mIHByb2plY3RzKSB7XG5cdFx0XHRjb25zdCBkb2NrZXJmaWxlID0gcHJvamVjdC5kb2NrZXJDb25maWc/LmRvY2tlcmZpbGUgPz8gXCJEb2NrZXJmaWxlXCI7XG5cdFx0XHRjb25zdCBkb2NrZXJmaWxlUGF0aCA9IHBhdGguam9pbihwcm9qZWN0LnByb2plY3RSb290LCBkb2NrZXJmaWxlKTtcblx0XHRcdGlmICghKGF3YWl0IGlvLmZpbGVFeGlzdHMoZG9ja2VyZmlsZVBhdGgpKSkge1xuXHRcdFx0XHR0aGlzLiNsb2dnZXIuaW5mbyhgU2tpcHBpbmcgJHtwcm9qZWN0Lm5hbWV9OiBtaXNzaW5nICR7ZG9ja2VyZmlsZX1gKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdC5wdXNoKHByb2plY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBidWlsZFByb2plY3QoXG5cdFx0cHJvamVjdDogUHJvamVjdCxcblx0XHR2ZXJzaW9uOiBzdHJpbmcsXG5cdFx0b3B0aW9uczogRG9ja2VyT3B0aW9ucyxcblx0KTogUHJvbWlzZTxEb2NrZXJSZXNwb25zZT4ge1xuXHRcdGNvbnN0IGRvY2tlckNvbmZpZyA9IHByb2plY3QuZG9ja2VyQ29uZmlnID8/IHt9O1xuXHRcdGNvbnN0IGVudkJ1aWxkQXJncyA9IHRoaXMucGFyc2VKc29uRW52PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KFxuXHRcdFx0XCJGT1JHRV9ET0NLRVJfQlVJTERfQVJHU19KU09OXCIsXG5cdFx0XHR7fSxcblx0XHQpO1xuXHRcdGNvbnN0IGVudlNlY3JldHMgPSB0aGlzLnBhcnNlSnNvbkVudjxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pihcblx0XHRcdFwiRk9SR0VfRE9DS0VSX1NFQ1JFVFNfSlNPTlwiLFxuXHRcdFx0e30sXG5cdFx0KTtcblx0XHRjb25zdCBlbnZUYWdzID0gdGhpcy5wYXJzZUpzb25FbnY8c3RyaW5nW10+KFwiRk9SR0VfRE9DS0VSX0VYVFJBX1RBR1NfSlNPTlwiLCBbXSk7XG5cblx0XHRjb25zdCBpbWFnZSA9IGRvY2tlckNvbmZpZy5pbWFnZSA/PyB0aGlzLmRlZmF1bHRJbWFnZU5hbWUocHJvamVjdC5uYW1lKTtcblx0XHRjb25zdCBkb2NrZXJmaWxlID0gZG9ja2VyQ29uZmlnLmRvY2tlcmZpbGUgPz8gXCJEb2NrZXJmaWxlXCI7XG5cdFx0Y29uc3QgdGFncyA9IFtgJHtpbWFnZX06JHt2ZXJzaW9ufWAsIC4uLihkb2NrZXJDb25maWcudGFncyA/PyBbXSksIC4uLmVudlRhZ3NdO1xuXHRcdGNvbnN0IGJ1aWxkQXJncyA9IHRoaXMuaW50ZXJwb2xhdGVCdWlsZEFyZ3MoXG5cdFx0XHR7IC4uLihkb2NrZXJDb25maWcuYnVpbGRBcmdzID8/IHt9KSwgLi4uZW52QnVpbGRBcmdzIH0sXG5cdFx0XHR2ZXJzaW9uLFxuXHRcdCk7XG5cdFx0Y29uc3Qgc2VjcmV0cyA9IHsgLi4uKGRvY2tlckNvbmZpZy5zZWNyZXRzID8/IHt9KSwgLi4uZW52U2VjcmV0cyB9O1xuXG5cdFx0dGhpcy4jbG9nZ2VyLmluZm8oYCR7b3B0aW9ucy5kcnlSdW4gPyBcIltkcnktcnVuXSBcIiA6IFwiXCJ9QnVpbGRpbmcgJHtwcm9qZWN0Lm5hbWV9YCk7XG5cdFx0dHJ5IHtcblx0XHRcdGlmICghb3B0aW9ucy5kcnlSdW4pIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5kb2NrZXIuYnVpbGQocHJvamVjdC5wcm9qZWN0Um9vdCwge1xuXHRcdFx0XHRcdGN3ZDogcHJvamVjdC5wcm9qZWN0Um9vdCxcblx0XHRcdFx0XHRkb2NrZXJmaWxlOiBwYXRoLmpvaW4ocHJvamVjdC5wcm9qZWN0Um9vdCwgZG9ja2VyZmlsZSksXG5cdFx0XHRcdFx0dGFncyxcblx0XHRcdFx0XHRidWlsZEFyZ3MsXG5cdFx0XHRcdFx0c2VjcmV0cyxcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKG9wdGlvbnMucHVzaCB8fCBkb2NrZXJDb25maWcucHVzaCkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuZG9ja2VyLnB1c2godGFnLCB7IGN3ZDogcHJvamVjdC5wcm9qZWN0Um9vdCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cHJvamVjdE5hbWU6IHByb2plY3QubmFtZSxcblx0XHRcdFx0aW1hZ2UsXG5cdFx0XHRcdHRhZ3MsXG5cdFx0XHRcdHN1Y2NlZWRlZDogdHJ1ZSxcblx0XHRcdFx0bWVzc2FnZTogb3B0aW9ucy5kcnlSdW4gPyBcIkRyeSBydW5cIiA6IGBCdWlsdCAke2ltYWdlfWAsXG5cdFx0XHR9O1xuXHRcdH0gY2F0Y2ggKHJlYXNvbikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGZvcm1hdFVua25vd25FcnJvcihyZWFzb24pO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cHJvamVjdE5hbWU6IHByb2plY3QubmFtZSxcblx0XHRcdFx0aW1hZ2UsXG5cdFx0XHRcdHRhZ3MsXG5cdFx0XHRcdHN1Y2NlZWRlZDogZmFsc2UsXG5cdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdGVycm9yOiBgJHtwcm9qZWN0Lm5hbWV9OiAke21lc3NhZ2V9YCxcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpbnRlcnBvbGF0ZUJ1aWxkQXJncyhcblx0XHRidWlsZEFyZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQsXG5cdFx0dmVyc2lvbjogc3RyaW5nLFxuXHQpIHtcblx0XHRjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRjb25zdCB2ZXJzaW9uUGxhY2Vob2xkZXIgPSBcIiRcIiArIFwie3ZlcnNpb259XCI7XG5cdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYnVpbGRBcmdzID8/IHt9KSkge1xuXHRcdFx0cmVzdWx0W2tleV0gPSB2YWx1ZS5zcGxpdCh2ZXJzaW9uUGxhY2Vob2xkZXIpLmpvaW4odmVyc2lvbik7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcml2YXRlIGRlZmF1bHRJbWFnZU5hbWUocHJvamVjdE5hbWU6IHN0cmluZykge1xuXHRcdHJldHVybiBgJHt0aGlzLiNkZWZhdWx0UmVnaXN0cnl9LyR7dGhpcy5ub3JtYWxpemVEb2NrZXJSZXBvc2l0b3J5KHByb2plY3ROYW1lKX1gO1xuXHR9XG5cblx0cHJpdmF0ZSBub3JtYWxpemVEb2NrZXJSZXBvc2l0b3J5KG5hbWU6IHN0cmluZykge1xuXHRcdGNvbnN0IHJlcG9zaXRvcnkgPSBuYW1lXG5cdFx0XHQucmVwbGFjZSgvXkAvLCBcIlwiKVxuXHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0Lm1hcCgoc2VnbWVudCkgPT5cblx0XHRcdFx0c2VnbWVudFxuXHRcdFx0XHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdFx0LnJlcGxhY2UoL1teYS16MC05XSsvZywgXCItXCIpXG5cdFx0XHRcdFx0LnJlcGxhY2UoL14tK3wtKyQvZywgXCJcIiksXG5cdFx0XHQpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pXG5cdFx0XHQuam9pbihcIi9cIik7XG5cblx0XHRpZiAocmVwb3NpdG9yeSA9PT0gXCJcIikge1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoYENvdWxkIG5vdCBkZXJpdmUgYSBEb2NrZXIgcmVwb3NpdG9yeSBmcm9tIHByb2plY3QgbmFtZSBcIiR7bmFtZX1cImApO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXBvc2l0b3J5O1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUpzb25FbnY8VD4obmFtZTogc3RyaW5nLCBmYWxsYmFjazogVCk6IFQge1xuXHRcdGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnZbbmFtZV07XG5cdFx0aWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUudHJpbSgpID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsbGJhY2s7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBKU09OLnBhcnNlKHZhbHVlKSBhcyBUO1xuXHRcdH0gY2F0Y2ggKHJlYXNvbikge1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoYEludmFsaWQgSlNPTiBpbiAke25hbWV9OiAke2Zvcm1hdFVua25vd25FcnJvcihyZWFzb24pfWApO1xuXHRcdH1cblx0fVxufVxuIl0sIm5hbWVzIjpbIkRvY2tlciIsInNjcmliZSIsImxvZ2dlciIsIm5hbWUiLCJkb2NrZXIiLCJEb2NrZXJJbnRlcm9wIiwicHJvY2VzcyIsImVudiIsIkZPUkdFX0RPQ0tFUl9SRUdJU1RSWSIsInRyaW0iLCJ3b3Jrc3BhY2UiLCJydW4iLCJvcHRpb25zIiwicHJvamVjdHMiLCJnZXREb2NrZXJQcm9qZWN0cyIsImdldFByb2plY3RzIiwiY29uZmlndXJhdGlvbiIsImxlbmd0aCIsIkZvcmdlRXJyb3IiLCJ2ZXJzaW9uIiwiZ2V0VmVyc2lvbiIsInJlc3BvbnNlcyIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJwcm9qZWN0IiwiYnVpbGRQcm9qZWN0IiwiZmFpbGVkIiwiZmlsdGVyIiwicmVzcG9uc2UiLCJzdWNjZWVkZWQiLCJBY3Rpb25SZXNwb25zZSIsIkVycm9yIiwiU3VjY2VzcyIsInJlc3VsdCIsImRvY2tlcmZpbGUiLCJkb2NrZXJDb25maWciLCJkb2NrZXJmaWxlUGF0aCIsInBhdGgiLCJqb2luIiwicHJvamVjdFJvb3QiLCJpbyIsImZpbGVFeGlzdHMiLCJpbmZvIiwicHVzaCIsImVudkJ1aWxkQXJncyIsInBhcnNlSnNvbkVudiIsImVudlNlY3JldHMiLCJlbnZUYWdzIiwiaW1hZ2UiLCJkZWZhdWx0SW1hZ2VOYW1lIiwidGFncyIsImJ1aWxkQXJncyIsImludGVycG9sYXRlQnVpbGRBcmdzIiwic2VjcmV0cyIsImRyeVJ1biIsImJ1aWxkIiwiY3dkIiwidGFnIiwicHJvamVjdE5hbWUiLCJtZXNzYWdlIiwicmVhc29uIiwiZm9ybWF0VW5rbm93bkVycm9yIiwiZXJyb3IiLCJ2ZXJzaW9uUGxhY2Vob2xkZXIiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJzcGxpdCIsIm5vcm1hbGl6ZURvY2tlclJlcG9zaXRvcnkiLCJyZXBvc2l0b3J5IiwicmVwbGFjZSIsInNlZ21lbnQiLCJ0b0xvd2VyQ2FzZSIsIkJvb2xlYW4iLCJmYWxsYmFjayIsIkpTT04iLCJwYXJzZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkEwQmFBOzs7ZUFBQUE7OztpRUExQkk7NEJBQ1U7c0JBR0Q7cUJBRUs7eUJBQ1M7b0JBQ3JCO3dCQUNJO3dCQUN3Qjs7Ozs7Ozs7Ozs7Ozs7O0FBZ0J4QyxNQUFNQTs7SUFDWixDQUFBLE1BQU8sR0FBR0MsY0FBTSxDQUFDQyxNQUFNLENBQUNGLE9BQU9HLElBQUksRUFBRTtJQUNwQkMsU0FBUyxJQUFJQyxlQUFhLEdBQUc7SUFDckMsQ0FBQSxlQUFnQixHQUFHQyxRQUFRQyxHQUFHLENBQUNDLHFCQUFxQixFQUFFQyxVQUFVLFVBQVU7SUFFbkYsWUFBbUIsQUFBaUJDLFNBQW9CLENBQUU7YUFBdEJBLFlBQUFBO0lBQXVCO0lBRTNELE1BQWFDLElBQUlDLE9BQXNCLEVBQTJDO1FBQ2pGLE1BQU1DLFdBQVcsTUFBTSxJ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
|
|
@@ -10,9 +10,12 @@ _export_star(require("./dependency-report.action.js"), exports);
|
|
|
10
10
|
_export_star(require("./dependency-sync.action.js"), exports);
|
|
11
11
|
_export_star(require("./docker.action.js"), exports);
|
|
12
12
|
_export_star(require("./link.action.js"), exports);
|
|
13
|
+
_export_star(require("./package.action.js"), exports);
|
|
14
|
+
_export_star(require("./paths.action.js"), exports);
|
|
13
15
|
_export_star(require("./publish.action.js"), exports);
|
|
14
16
|
_export_star(require("./sync-lock-file.action.js"), exports);
|
|
15
17
|
_export_star(require("./tag.action.js"), exports);
|
|
18
|
+
_export_star(require("./typecheck.action.js"), exports);
|
|
16
19
|
_export_star(require("./unlink.action.js"), exports);
|
|
17
20
|
_export_star(require("./version.action.js"), exports);
|
|
18
21
|
_export_star(require("./watch.action.js"), exports);
|
|
@@ -29,5 +32,3 @@ function _export_star(from, to) {
|
|
|
29
32
|
});
|
|
30
33
|
return from;
|
|
31
34
|
}
|
|
32
|
-
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2J1aWxkLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2xlYW4uYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21taXQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb3B5LmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVwZW5kZW5jeS1yZXBvcnQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZXBlbmRlbmN5LXN5bmMuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kb2NrZXIuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saW5rLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHVibGlzaC5hY3Rpb24uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N5bmMtbG9jay1maWxlLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGFnLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdW5saW5rLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmVyc2lvbi5hY3Rpb24uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3dhdGNoLmFjdGlvbi5qc1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWM7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0EifQ==
|
|
@@ -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);
|