@decohere/forge 0.0.1-dev.9 → 0.0.1-dev.90

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.
Files changed (74) hide show
  1. package/commonjs/src/actions/build.action.js +9 -1
  2. package/commonjs/src/actions/clean.action.js +3 -3
  3. package/commonjs/src/actions/copy.action.js +38 -6
  4. package/commonjs/src/actions/docker.action.js +198 -0
  5. package/commonjs/src/actions/index.js +5 -1
  6. package/commonjs/src/actions/link.action.js +156 -0
  7. package/commonjs/src/actions/tag.action.js +3 -4
  8. package/commonjs/src/actions/typecheck.action.js +69 -0
  9. package/commonjs/src/actions/unlink.action.js +76 -0
  10. package/commonjs/src/actions/watch.action.js +2 -1
  11. package/commonjs/src/commands/docker.command.js +28 -0
  12. package/commonjs/src/commands/index.js +4 -1
  13. package/commonjs/src/commands/link.command.js +89 -0
  14. package/commonjs/src/commands/typecheck.command.js +26 -0
  15. package/commonjs/src/factories/swc-config.factory.js +14 -4
  16. package/commonjs/src/forge.module.js +12 -3
  17. package/commonjs/src/index.js +4 -1
  18. package/commonjs/src/mixins/caches-outputs.mixin.js +8 -6
  19. package/commonjs/src/services/swc-transpiler.js +27 -7
  20. package/commonjs/src/services/ts-program-host.js +3 -3
  21. package/commonjs/src/services/type-emission-program.js +24 -7
  22. package/commonjs/src/services/type-emitter.js +34 -4
  23. package/commonjs/src/types/swc-config.type.js +1 -1
  24. package/commonjs/src/types/transform-response.model.js +2 -1
  25. package/commonjs/src/vitest/forge-build.plugin.js +3 -2
  26. package/commonjs/src/workspace.config.js +29 -2
  27. package/es6/src/actions/build.action.js +9 -1
  28. package/es6/src/actions/clean.action.js +3 -3
  29. package/es6/src/actions/copy.action.js +38 -6
  30. package/es6/src/actions/docker.action.js +184 -0
  31. package/es6/src/actions/index.js +5 -1
  32. package/es6/src/actions/link.action.js +131 -0
  33. package/es6/src/actions/tag.action.js +3 -4
  34. package/es6/src/actions/typecheck.action.js +56 -0
  35. package/es6/src/actions/unlink.action.js +61 -0
  36. package/es6/src/actions/watch.action.js +2 -1
  37. package/es6/src/commands/docker.command.js +18 -0
  38. package/es6/src/commands/index.js +4 -1
  39. package/es6/src/commands/link.command.js +66 -0
  40. package/es6/src/commands/typecheck.command.js +16 -0
  41. package/es6/src/factories/swc-config.factory.js +14 -4
  42. package/es6/src/forge.module.js +12 -3
  43. package/es6/src/index.js +2 -2
  44. package/es6/src/mixins/caches-outputs.mixin.js +8 -6
  45. package/es6/src/services/swc-transpiler.js +27 -7
  46. package/es6/src/services/ts-program-host.js +3 -3
  47. package/es6/src/services/type-emission-program.js +24 -7
  48. package/es6/src/services/type-emitter.js +31 -4
  49. package/es6/src/types/swc-config.type.js +1 -1
  50. package/es6/src/types/transform-response.model.js +2 -1
  51. package/es6/src/vitest/forge-build.plugin.js +3 -2
  52. package/es6/src/workspace.config.js +30 -2
  53. package/package.json +5 -5
  54. package/types/src/actions/build.action.d.ts +1 -0
  55. package/types/src/actions/copy.action.d.ts +10 -0
  56. package/types/src/actions/docker.action.d.ts +33 -0
  57. package/types/src/actions/index.d.ts +4 -0
  58. package/types/src/actions/link.action.d.ts +25 -0
  59. package/types/src/actions/typecheck.action.d.ts +14 -0
  60. package/types/src/actions/unlink.action.d.ts +9 -0
  61. package/types/src/commands/docker.command.d.ts +6 -0
  62. package/types/src/commands/index.d.ts +3 -0
  63. package/types/src/commands/link.command.d.ts +28 -0
  64. package/types/src/commands/typecheck.command.d.ts +6 -0
  65. package/types/src/factories/swc-config.factory.d.ts +1 -0
  66. package/types/src/forge.module.d.ts +8 -0
  67. package/types/src/index.d.ts +1 -1
  68. package/types/src/services/swc-transpiler.d.ts +5 -2
  69. package/types/src/services/ts-program-host.d.ts +1 -1
  70. package/types/src/services/type-emission-program.d.ts +6 -1
  71. package/types/src/services/type-emitter.d.ts +14 -0
  72. package/types/src/types/swc-config.type.d.ts +5 -1
  73. package/types/src/types/transform-response.model.d.ts +2 -0
  74. package/types/src/workspace.config.d.ts +6 -0
@@ -0,0 +1,131 @@
1
+ function _ts_decorate(decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ }
7
+ function _ts_metadata(k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ }
10
+ import fs from "node:fs/promises";
11
+ import path from "node:path";
12
+ import { injectable } from "@decohere/crucible/decorators";
13
+ // biome-ignore lint/style/useImportType: <DI>
14
+ import { Workspace } from "@decohere/mesh";
15
+ import { ActionResponse } from "@decohere/nexus/cli";
16
+ import { scribe } from "@decohere/scribe";
17
+ import "../extensions/project.extensions.js";
18
+ import { ForgeError } from "../errors.js";
19
+ export const LINK_MANIFEST = ".forge-link.json";
20
+ export const DEFAULT_LINK_CONFIGURATION = "link";
21
+ export class Link {
22
+ workspace;
23
+ #logger = scribe.logger(Link.name);
24
+ constructor(workspace){
25
+ this.workspace = workspace;
26
+ }
27
+ run = async (options)=>{
28
+ const targetDir = path.resolve(options.targetDir);
29
+ const nodeModulesDir = path.join(targetDir, "node_modules");
30
+ const stat = await fs.stat(nodeModulesDir).catch(()=>null);
31
+ if (stat == null) {
32
+ throw new ForgeError(`node_modules not found in "${targetDir}". Run pnpm install first.`);
33
+ }
34
+ const projects = this.workspace.getProjects(options.configuration);
35
+ if (projects.length === 0) {
36
+ throw new ForgeError(`No projects found for configuration "${options.configuration}"`);
37
+ }
38
+ // Load any existing manifest so originalPath values are preserved on re-link
39
+ const manifestPath = path.join(targetDir, LINK_MANIFEST);
40
+ const existingManifestText = await fs.readFile(manifestPath, "utf8").catch(()=>null);
41
+ const existingManifest = existingManifestText != null ? JSON.parse(existingManifestText) : null;
42
+ const manifest = {
43
+ workspaceRoot: this.workspace.rootDir,
44
+ links: []
45
+ };
46
+ for (const project of projects){
47
+ const pkg = await project.getPackageJson();
48
+ const packageName = pkg.name;
49
+ if (!packageName) {
50
+ this.#logger.trace(`Skipping project "${project.name}" — no package name`);
51
+ continue;
52
+ }
53
+ // Resolve the build output directory (no target arg — debug config is not packed)
54
+ const outDir = project.getOutDir();
55
+ const absoluteOutDir = path.resolve(outDir);
56
+ // Pre-create the output dir so the symlink is valid even before a build completes.
57
+ await fs.mkdir(absoluteOutDir, {
58
+ recursive: true
59
+ });
60
+ // Compute symlink path inside target node_modules
61
+ const symlinkPath = path.join(nodeModulesDir, ...packageName.split("/"));
62
+ const symlinkParent = path.dirname(symlinkPath);
63
+ // Capture any existing entry so we can restore it on unlink.
64
+ // If a manifest already exists for this package, preserve its originalPath —
65
+ // the current symlink is our own and must not be treated as the original.
66
+ let originalPath = null;
67
+ const existingStat = await fs.lstat(symlinkPath).catch(()=>null);
68
+ if (existingStat != null) {
69
+ const existingEntry = existingManifest?.links.find((l)=>l.packageName === packageName);
70
+ if (existingEntry != null) {
71
+ // Already linked — preserve the recorded originalPath and replace the symlink
72
+ originalPath = existingEntry.originalPath;
73
+ if (existingStat.isSymbolicLink()) {
74
+ await fs.unlink(symlinkPath);
75
+ }
76
+ } else if (existingStat.isSymbolicLink()) {
77
+ originalPath = await fs.readlink(symlinkPath);
78
+ await fs.unlink(symlinkPath);
79
+ } else {
80
+ // Real directory — back it up by renaming
81
+ originalPath = `${symlinkPath}.__forge_backup__`;
82
+ await fs.rename(symlinkPath, originalPath);
83
+ }
84
+ }
85
+ await fs.mkdir(symlinkParent, {
86
+ recursive: true
87
+ });
88
+ await fs.symlink(absoluteOutDir, symlinkPath, "dir");
89
+ manifest.links.push({
90
+ packageName,
91
+ symlinkPath,
92
+ originalPath
93
+ });
94
+ this.#logger.info(`Linked ${packageName} → ${absoluteOutDir}`);
95
+ }
96
+ // Create a peer node_modules at the build output root so Node can resolve
97
+ // bare specifiers from the real (non-symlink) paths of linked packages.
98
+ if (manifest.links.length > 0) {
99
+ const buildRoot = path.resolve(projects[0].getRootOut());
100
+ const peerNodeModulesDir = path.join(buildRoot, "node_modules");
101
+ await fs.rm(peerNodeModulesDir, {
102
+ recursive: true,
103
+ force: true
104
+ });
105
+ for (const project of projects){
106
+ const pkg = await project.getPackageJson();
107
+ if (!pkg.name) continue;
108
+ const outDir = path.resolve(project.getOutDir());
109
+ const peerSymlink = path.join(peerNodeModulesDir, ...pkg.name.split("/"));
110
+ await fs.mkdir(path.dirname(peerSymlink), {
111
+ recursive: true
112
+ });
113
+ await fs.symlink(outDir, peerSymlink, "dir");
114
+ this.#logger.trace(`Peer-linked ${pkg.name} → ${outDir}`);
115
+ }
116
+ manifest.peerNodeModulesDir = peerNodeModulesDir;
117
+ this.#logger.info(`Created peer node_modules at ${peerNodeModulesDir}`);
118
+ }
119
+ await fs.writeFile(path.join(targetDir, LINK_MANIFEST), JSON.stringify(manifest, null, 2));
120
+ return ActionResponse.Success(Link.name);
121
+ };
122
+ }
123
+ Link = _ts_decorate([
124
+ injectable(),
125
+ _ts_metadata("design:type", Function),
126
+ _ts_metadata("design:paramtypes", [
127
+ typeof Workspace === "undefined" ? Object : Workspace
128
+ ])
129
+ ], Link);
130
+
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2xpbmsuYWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvdXNlSW1wb3J0VHlwZTogPERJPlxuaW1wb3J0IHsgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IFwiLi4vZXh0ZW5zaW9ucy9wcm9qZWN0LmV4dGVuc2lvbnMuanNcIjtcbmltcG9ydCB7IEZvcmdlRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBMSU5LX01BTklGRVNUID0gXCIuZm9yZ2UtbGluay5qc29uXCI7XG5cbmV4cG9ydCB0eXBlIExpbmtPcHRpb25zID0ge1xuXHRjb25maWd1cmF0aW9uOiBzdHJpbmc7XG5cdHRhcmdldERpcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElOS19DT05GSUdVUkFUSU9OID0gXCJsaW5rXCI7XG5cbmV4cG9ydCB0eXBlIExpbmtNYW5pZmVzdCA9IHtcblx0d29ya3NwYWNlUm9vdDogc3RyaW5nO1xuXHRwZWVyTm9kZU1vZHVsZXNEaXI/OiBzdHJpbmc7XG5cdGxpbmtzOiBBcnJheTx7IHBhY2thZ2VOYW1lOiBzdHJpbmc7IHN5bWxpbmtQYXRoOiBzdHJpbmc7IG9yaWdpbmFsUGF0aDogc3RyaW5nIHwgbnVsbCB9Pjtcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMaW5rIGltcGxlbWVudHMgQWN0aW9uPExpbmtPcHRpb25zPiB7XG5cdCNsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKExpbmsubmFtZSk7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgd29ya3NwYWNlOiBXb3Jrc3BhY2UpIHt9XG5cblx0cHVibGljIHJ1biA9IGFzeW5jIChvcHRpb25zOiBMaW5rT3B0aW9ucyk6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+ID0+IHtcblx0XHRjb25zdCB0YXJnZXREaXIgPSBwYXRoLnJlc29sdmUob3B0aW9ucy50YXJnZXREaXIpO1xuXHRcdGNvbnN0IG5vZGVNb2R1bGVzRGlyID0gcGF0aC5qb2luKHRhcmdldERpciwgXCJub2RlX21vZHVsZXNcIik7XG5cblx0XHRjb25zdCBzdGF0ID0gYXdhaXQgZnMuc3RhdChub2RlTW9kdWxlc0RpcikuY2F0Y2goKCkgPT4gbnVsbCk7XG5cdFx0aWYgKHN0YXQgPT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoXG5cdFx0XHRcdGBub2RlX21vZHVsZXMgbm90IGZvdW5kIGluIFwiJHt0YXJnZXREaXJ9XCIuIFJ1biBwbnBtIGluc3RhbGwgZmlyc3QuYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcHJvamVjdHMgPSB0aGlzLndvcmtzcGFjZS5nZXRQcm9qZWN0cyhvcHRpb25zLmNvbmZpZ3VyYXRpb24pO1xuXHRcdGlmIChwcm9qZWN0cy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRocm93IG5ldyBGb3JnZUVycm9yKGBObyBwcm9qZWN0cyBmb3VuZCBmb3IgY29uZmlndXJhdGlvbiBcIiR7b3B0aW9ucy5jb25maWd1cmF0aW9ufVwiYCk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9hZCBhbnkgZXhpc3RpbmcgbWFuaWZlc3Qgc28gb3JpZ2luYWxQYXRoIHZhbHVlcyBhcmUgcHJlc2VydmVkIG9uIHJlLWxpbmtcblx0XHRjb25zdCBtYW5pZmVzdFBhdGggPSBwYXRoLmpvaW4odGFyZ2V0RGlyLCBMSU5LX01BTklGRVNUKTtcblx0XHRjb25zdCBleGlzdGluZ01hbmlmZXN0VGV4dCA9IGF3YWl0IGZzLnJlYWRGaWxlKG1hbmlmZXN0UGF0aCwgXCJ1dGY4XCIpLmNhdGNoKCgpID0+IG51bGwpO1xuXHRcdGNvbnN0IGV4aXN0aW5nTWFuaWZlc3Q6IExpbmtNYW5pZmVzdCB8IG51bGwgPVxuXHRcdFx0ZXhpc3RpbmdNYW5pZmVzdFRleHQgIT0gbnVsbCA/IEpTT04ucGFyc2UoZXhpc3RpbmdNYW5pZmVzdFRleHQpIDogbnVsbDtcblxuXHRcdGNvbnN0IG1hbmlmZXN0OiBMaW5rTWFuaWZlc3QgPSB7XG5cdFx0XHR3b3Jrc3BhY2VSb290OiB0aGlzLndvcmtzcGFjZS5yb290RGlyLFxuXHRcdFx0bGlua3M6IFtdLFxuXHRcdH07XG5cblx0XHRmb3IgKGNvbnN0IHByb2plY3Qgb2YgcHJvamVjdHMpIHtcblx0XHRcdGNvbnN0IHBrZyA9IGF3YWl0IHByb2plY3QuZ2V0UGFja2FnZUpzb24oKTtcblx0XHRcdGNvbnN0IHBhY2thZ2VOYW1lID0gcGtnLm5hbWU7XG5cdFx0XHRpZiAoIXBhY2thZ2VOYW1lKSB7XG5cdFx0XHRcdHRoaXMuI2xvZ2dlci50cmFjZShgU2tpcHBpbmcgcHJvamVjdCBcIiR7cHJvamVjdC5uYW1lfVwiIOKAlCBubyBwYWNrYWdlIG5hbWVgKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlc29sdmUgdGhlIGJ1aWxkIG91dHB1dCBkaXJlY3RvcnkgKG5vIHRhcmdldCBhcmcg4oCUIGRlYnVnIGNvbmZpZyBpcyBub3QgcGFja2VkKVxuXHRcdFx0Y29uc3Qgb3V0RGlyID0gcHJvamVjdC5nZXRPdXREaXIoKTtcblx0XHRcdGNvbnN0IGFic29sdXRlT3V0RGlyID0gcGF0aC5yZXNvbHZlKG91dERpcik7XG5cblx0XHRcdC8vIFByZS1jcmVhdGUgdGhlIG91dHB1dCBkaXIgc28gdGhlIHN5bWxpbmsgaXMgdmFsaWQgZXZlbiBiZWZvcmUgYSBidWlsZCBjb21wbGV0ZXMuXG5cdFx0XHRhd2FpdCBmcy5ta2RpcihhYnNvbHV0ZU91dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0XHRcdC8vIENvbXB1dGUgc3ltbGluayBwYXRoIGluc2lkZSB0YXJnZXQgbm9kZV9tb2R1bGVzXG5cdFx0XHRjb25zdCBzeW1saW5rUGF0aCA9IHBhdGguam9pbihub2RlTW9kdWxlc0RpciwgLi4ucGFja2FnZU5hbWUuc3BsaXQoXCIvXCIpKTtcblx0XHRcdGNvbnN0IHN5bWxpbmtQYXJlbnQgPSBwYXRoLmRpcm5hbWUoc3ltbGlua1BhdGgpO1xuXG5cdFx0XHQvLyBDYXB0dXJlIGFueSBleGlzdGluZyBlbnRyeSBzbyB3ZSBjYW4gcmVzdG9yZSBpdCBvbiB1bmxpbmsuXG5cdFx0XHQvLyBJZiBhIG1hbmlmZXN0IGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIHBhY2thZ2UsIHByZXNlcnZlIGl0cyBvcmlnaW5hbFBhdGgg4oCUXG5cdFx0XHQvLyB0aGUgY3VycmVudCBzeW1saW5rIGlzIG91ciBvd24gYW5kIG11c3Qgbm90IGJlIHRyZWF0ZWQgYXMgdGhlIG9yaWdpbmFsLlxuXHRcdFx0bGV0IG9yaWdpbmFsUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRjb25zdCBleGlzdGluZ1N0YXQgPSBhd2FpdCBmcy5sc3RhdChzeW1saW5rUGF0aCkuY2F0Y2goKCkgPT4gbnVsbCk7XG5cdFx0XHRpZiAoZXhpc3RpbmdTdGF0ICE9IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdFbnRyeSA9IGV4aXN0aW5nTWFuaWZlc3Q/LmxpbmtzLmZpbmQoXG5cdFx0XHRcdFx0KGwpID0+IGwucGFja2FnZU5hbWUgPT09IHBhY2thZ2VOYW1lLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoZXhpc3RpbmdFbnRyeSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Ly8gQWxyZWFkeSBsaW5rZWQg4oCUIHByZXNlcnZlIHRoZSByZWNvcmRlZCBvcmlnaW5hbFBhdGggYW5kIHJlcGxhY2UgdGhlIHN5bWxpbmtcblx0XHRcdFx0XHRvcmlnaW5hbFBhdGggPSBleGlzdGluZ0VudHJ5Lm9yaWdpbmFsUGF0aDtcblx0XHRcdFx0XHRpZiAoZXhpc3RpbmdTdGF0LmlzU3ltYm9saWNMaW5rKCkpIHtcblx0XHRcdFx0XHRcdGF3YWl0IGZzLnVubGluayhzeW1saW5rUGF0aCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGV4aXN0aW5nU3RhdC5pc1N5bWJvbGljTGluaygpKSB7XG5cdFx0XHRcdFx0b3JpZ2luYWxQYXRoID0gYXdhaXQgZnMucmVhZGxpbmsoc3ltbGlua1BhdGgpO1xuXHRcdFx0XHRcdGF3YWl0IGZzLnVubGluayhzeW1saW5rUGF0aCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gUmVhbCBkaXJlY3Rvcnkg4oCUIGJhY2sgaXQgdXAgYnkgcmVuYW1pbmdcblx0XHRcdFx0XHRvcmlnaW5hbFBhdGggPSBgJHtzeW1saW5rUGF0aH0uX19mb3JnZV9iYWNrdXBfX2A7XG5cdFx0XHRcdFx0YXdhaXQgZnMucmVuYW1lKHN5bWxpbmtQYXRoLCBvcmlnaW5hbFBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IGZzLm1rZGlyKHN5bWxpbmtQYXJlbnQsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHRcdFx0YXdhaXQgZnMuc3ltbGluayhhYnNvbHV0ZU91dERpciwgc3ltbGlua1BhdGgsIFwiZGlyXCIpO1xuXG5cdFx0XHRtYW5pZmVzdC5saW5rcy5wdXNoKHsgcGFja2FnZU5hbWUsIHN5bWxpbmtQYXRoLCBvcmlnaW5hbFBhdGggfSk7XG5cdFx0XHR0aGlzLiNsb2dnZXIuaW5mbyhgTGlua2VkICR7cGFja2FnZU5hbWV9IOKGkiAke2Fic29sdXRlT3V0RGlyfWApO1xuXHRcdH1cblxuXHRcdC8vIENyZWF0ZSBhIHBlZXIgbm9kZV9tb2R1bGVzIGF0IHRoZSBidWlsZCBvdXRwdXQgcm9vdCBzbyBOb2RlIGNhbiByZXNvbHZlXG5cdFx0Ly8gYmFyZSBzcGVjaWZpZXJzIGZyb20gdGhlIHJlYWwgKG5vbi1zeW1saW5rKSBwYXRocyBvZiBsaW5rZWQgcGFja2FnZXMuXG5cdFx0aWYgKG1hbmlmZXN0LmxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGJ1aWxkUm9vdCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0c1swXS5nZXRSb290T3V0KCkpO1xuXHRcdFx0Y29uc3QgcGVlck5vZGVNb2R1bGVzRGlyID0gcGF0aC5qb2luKGJ1aWxkUm9vdCwgXCJub2RlX21vZHVsZXNcIik7XG5cdFx0XHRhd2FpdCBmcy5ybShwZWVyTm9kZU1vZHVsZXNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcblx0XHRcdGZvciAoY29uc3QgcHJvamVjdCBvZiBwcm9qZWN0cykge1xuXHRcdFx0XHRjb25zdCBwa2cgPSBhd2FpdCBwcm9qZWN0LmdldFBhY2thZ2VKc29uKCk7XG5cdFx0XHRcdGlmICghcGtnLm5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRjb25zdCBvdXREaXIgPSBwYXRoLnJlc29sdmUocHJvamVjdC5nZXRPdXREaXIoKSk7XG5cdFx0XHRcdGNvbnN0IHBlZXJTeW1saW5rID0gcGF0aC5qb2luKHBlZXJOb2RlTW9kdWxlc0RpciwgLi4ucGtnLm5hbWUuc3BsaXQoXCIvXCIpKTtcblx0XHRcdFx0YXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKHBlZXJTeW1saW5rKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cdFx0XHRcdGF3YWl0IGZzLnN5bWxpbmsob3V0RGlyLCBwZWVyU3ltbGluaywgXCJkaXJcIik7XG5cdFx0XHRcdHRoaXMuI2xvZ2dlci50cmFjZShgUGVlci1saW5rZWQgJHtwa2cubmFtZX0g4oaSICR7b3V0RGlyfWApO1xuXHRcdFx0fVxuXHRcdFx0bWFuaWZlc3QucGVlck5vZGVNb2R1bGVzRGlyID0gcGVlck5vZGVNb2R1bGVzRGlyO1xuXHRcdFx0dGhpcy4jbG9nZ2VyLmluZm8oYENyZWF0ZWQgcGVlciBub2RlX21vZHVsZXMgYXQgJHtwZWVyTm9kZU1vZHVsZXNEaXJ9YCk7XG5cdFx0fVxuXG5cdFx0YXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbih0YXJnZXREaXIsIExJTktfTUFOSUZFU1QpLCBKU09OLnN0cmluZ2lmeShtYW5pZmVzdCwgbnVsbCwgMikpO1xuXG5cdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlN1Y2Nlc3MoTGluay5uYW1lKTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6WyJmcyIsInBhdGgiLCJpbmplY3RhYmxlIiwiV29ya3NwYWNlIiwiQWN0aW9uUmVzcG9uc2UiLCJzY3JpYmUiLCJGb3JnZUVycm9yIiwiTElOS19NQU5JRkVTVCIsIkRFRkFVTFRfTElOS19DT05GSUdVUkFUSU9OIiwiTGluayIsImxvZ2dlciIsIm5hbWUiLCJ3b3Jrc3BhY2UiLCJydW4iLCJvcHRpb25zIiwidGFyZ2V0RGlyIiwicmVzb2x2ZSIsIm5vZGVNb2R1bGVzRGlyIiwiam9pbiIsInN0YXQiLCJjYXRjaCIsInByb2plY3RzIiwiZ2V0UHJvamVjdHMiLCJjb25maWd1cmF0aW9uIiwibGVuZ3RoIiwibWFuaWZlc3RQYXRoIiwiZXhpc3RpbmdNYW5pZmVzdFRleHQiLCJyZWFkRmlsZSIsImV4aXN0aW5nTWFuaWZlc3QiLCJKU09OIiwicGFyc2UiLCJtYW5pZmVzdCIsIndvcmtzcGFjZVJvb3QiLCJyb290RGlyIiwibGlua3MiLCJwcm9qZWN0IiwicGtnIiwiZ2V0UGFja2FnZUpzb24iLCJwYWNrYWdlTmFtZSIsInRyYWNlIiwib3V0RGlyIiwiZ2V0T3V0RGlyIiwiYWJzb2x1dGVPdXREaXIiLCJta2RpciIsInJlY3Vyc2l2ZSIsInN5bWxpbmtQYXRoIiwic3BsaXQiLCJzeW1saW5rUGFyZW50IiwiZGlybmFtZSIsIm9yaWdpbmFsUGF0aCIsImV4aXN0aW5nU3RhdCIsImxzdGF0IiwiZXhpc3RpbmdFbnRyeSIsImZpbmQiLCJsIiwiaXNTeW1ib2xpY0xpbmsiLCJ1bmxpbmsiLCJyZWFkbGluayIsInJlbmFtZSIsInN5bWxpbmsiLCJwdXNoIiwiaW5mbyIsImJ1aWxkUm9vdCIsImdldFJvb3RPdXQiLCJwZWVyTm9kZU1vZHVsZXNEaXIiLCJybSIsImZvcmNlIiwicGVlclN5bWxpbmsiLCJ3cml0ZUZpbGUiLCJzdHJpbmdpZnkiLCJTdWNjZXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPQSxRQUFRLG1CQUFtQjtBQUNsQyxPQUFPQyxVQUFVLFlBQVk7QUFDN0IsU0FBU0MsVUFBVSxRQUFRLGdDQUFnQztBQUMzRCw4Q0FBOEM7QUFDOUMsU0FBU0MsU0FBUyxRQUFRLGlCQUFpQjtBQUUzQyxTQUFTQyxjQUFjLFFBQVEsc0JBQXNCO0FBQ3JELFNBQVNDLE1BQU0sUUFBUSxtQkFBbUI7QUFDMUMsT0FBTyxzQ0FBc0M7QUFDN0MsU0FBU0MsVUFBVSxRQUFRLGVBQWU7QUFFMUMsT0FBTyxNQUFNQyxnQkFBZ0IsbUJBQW1CO0FBT2hELE9BQU8sTUFBTUMsNkJBQTZCLE9BQU87QUFTakQsT0FBTyxNQUFNQzs7SUFDWixDQUFBLE1BQU8sR0FBR0osT0FBT0ssTUFBTSxDQUFDRCxLQUFLRSxJQUFJLEVBQUU7SUFFbkMsWUFBbUIsQUFBaUJDLFNBQW9CLENBQUU7YUFBdEJBLFlBQUFBO0lBQXVCO0lBRXBEQyxNQUFNLE9BQU9DO1FBQ25CLE1BQU1DLFlBQVlkLEtBQUtlLE9BQU8sQ0FBQ0YsUUFBUUMsU0FBUztRQUNoRCxNQUFNRSxpQkFBaUJoQixLQUFLaUIsSUFBSSxDQUFDSCxXQUFXO1FBRTVDLE1BQU1JLE9BQU8sTUFBTW5CLEdBQUdtQixJQUFJLENBQUNGLGdCQUFnQkcsS0FBSyxDQUFDLElBQU07UUFDdkQsSUFBSUQsUUFBUSxNQUFNO1lBQ2pCLE1BQU0sSUFBSWIsV0FDVCxDQUFD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
@@ -38,9 +38,8 @@ export class Tag {
38
38
  const git = new Git();
39
39
  await git.tag(tag);
40
40
  if (options.push) {
41
- const branch = await git.getBranchName();
42
- this.#logger.info(`Pushing branch: ${branch}`);
43
- await git.push(branch);
41
+ // Tag-only: Publish checks out a commit SHA (detached HEAD). Pushing a
42
+ // branch name is wrong there and unnecessary — the version label is the tag.
44
43
  this.#logger.info(`Pushing tag: ${tag}`);
45
44
  await git.pushTag(tag);
46
45
  }
@@ -64,4 +63,4 @@ Tag = _ts_decorate([
64
63
  ])
65
64
  ], Tag);
66
65
 
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL3RhZy5hY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvdXNlSW1wb3J0VHlwZTogPERJPlxuaW1wb3J0IHsgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBHaXQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2ludGVyb3BcIjtcbmltcG9ydCB7IHNjcmliZSB9IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgeyBGb3JnZUVycm9yLCBmb3JtYXRVbmtub3duRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFRhZ09wdGlvbnMgPSB7XG5cdHByZWZpeD86IHN0cmluZztcblx0ZHJ5UnVuPzogYm9vbGVhbjtcblx0cHVzaD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWdSZXNwb25zZSA9IHtcblx0dGFnOiBzdHJpbmc7XG5cdHN1Y2NlZWRlZDogYm9vbGVhbjtcblx0ZXJyb3I/OiBzdHJpbmc7XG59O1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGFnIGltcGxlbWVudHMgQWN0aW9uPFRhZ09wdGlvbnM+IHtcblx0I2xvZ2dlciA9IHNjcmliZS5sb2dnZXIoVGFnLm5hbWUpO1xuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2U6IFdvcmtzcGFjZSkge31cblxuXHRwdWJsaWMgYXN5bmMgcnVuKG9wdGlvbnM6IFRhZ09wdGlvbnMpOiBQcm9taXNlPEFjdGlvblJlc3BvbnNlPFRhZ1Jlc3BvbnNlPj4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB2ZXJzaW9uID0gYXdhaXQgdGhpcy53b3Jrc3BhY2UuZ2V0VmVyc2lvbigpO1xuXHRcdFx0Y29uc3QgcHJlZml4ID0gb3B0aW9ucy5wcmVmaXggPz8gXCJ2XCI7XG5cdFx0XHRjb25zdCB0YWcgPSBgJHtwcmVmaXh9JHt2ZXJzaW9ufWA7XG5cblx0XHRcdGlmIChvcHRpb25zLmRyeVJ1bikge1xuXHRcdFx0XHR0aGlzLiNsb2dnZXIuaW5mbyhgW2RyeS1ydW5dICR7dGFnfWApO1xuXHRcdFx0XHRyZXR1cm4gQWN0aW9uUmVzcG9uc2UuU3VjY2VzczxUYWdSZXNwb25zZT4oVGFnLm5hbWUsIFt7IHRhZywgc3VjY2VlZGVkOiB0cnVlIH1dKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy4jbG9nZ2VyLmluZm8oYENyZWF0aW5nIHRhZzogJHt0YWd9YCk7XG5cdFx0XHRjb25zdCBnaXQgPSBuZXcgR2l0KCk7XG5cdFx0XHRhd2FpdCBnaXQudGFnKHRhZyk7XG5cblx0XHRcdGlmIChvcHRpb25zLnB1c2gpIHtcblx0XHRcdFx0Y29uc3QgYnJhbmNoID0gYXdhaXQgZ2l0LmdldEJyYW5jaE5hbWUoKTtcblx0XHRcdFx0dGhpcy4jbG9nZ2VyLmluZm8oYFB1c2hpbmcgYnJhbmNoOiAke2JyYW5jaH1gKTtcblx0XHRcdFx0YXdhaXQgZ2l0LnB1c2goYnJhbmNoKTtcblx0XHRcdFx0dGhpcy4jbG9nZ2VyLmluZm8oYFB1c2hpbmcgdGFnOiAke3RhZ31gKTtcblx0XHRcdFx0YXdhaXQgZ2l0LnB1c2hUYWcodGFnKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlN1Y2Nlc3M8VGFnUmVzcG9uc2U+KFRhZy5uYW1lLCBbeyB0YWcsIHN1Y2NlZWRlZDogdHJ1ZSB9XSk7XG5cdFx0fSBjYXRjaCAocmVhc29uKSB7XG5cdFx0XHRjb25zdCBlcnJvciA9IGZvcm1hdFVua25vd25FcnJvcihyZWFzb24pO1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgdGFnOiAke2Vycm9yfWApO1xuXHRcdH1cblx0fVxufVxuIl0sIm5hbWVzIjpbImluamVjdGFibGUiLCJXb3Jrc3BhY2UiLCJBY3Rpb25SZXNwb25zZSIsIkdpdCIsInNjcmliZSIsIkZvcmdlRXJyb3IiLCJmb3JtYXRVbmtub3duRXJyb3IiLCJUYWciLCJsb2dnZXIiLCJuYW1lIiwid29ya3NwYWNlIiwicnVuIiwib3B0aW9ucyIsInZlcnNpb24iLCJnZXRWZXJzaW9uIiwicHJlZml4IiwidGFnIiwiZHJ5UnVuIiwiaW5mbyIsIlN1Y2Nlc3MiLCJzdWNjZWVkZWQiLCJnaXQiLCJwdXNoIiwiYnJhbmNoIiwiZ2V0QnJhbmNoTmFtZSIsInB1c2hUYWciLCJyZWFzb24iLCJlcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsU0FBU0EsVUFBVSxRQUFRLGdDQUFnQztBQUMzRCw4Q0FBOEM7QUFDOUMsU0FBU0MsU0FBUyxRQUFRLGlCQUFpQjtBQUUzQyxTQUFTQyxjQUFjLFFBQVEsc0JBQXNCO0FBQ3JELFNBQVNDLEdBQUcsUUFBUSwwQkFBMEI7QUFDOUMsU0FBU0MsTUFBTSxRQUFRLG1CQUFtQjtBQUMxQyxTQUFTQyxVQUFVLEVBQUVDLGtCQUFrQixRQUFRLGVBQWU7QUFlOUQsT0FBTyxNQUFNQzs7SUFDWixDQUFBLE1BQU8sR0FBR0gsT0FBT0ksTUFBTSxDQUFDRCxJQUFJRSxJQUFJLEVBQUU7SUFDbEMsWUFBbUIsQUFBaUJDLFNBQW9CLENBQUU7YUFBdEJBLFlBQUFBO0lBQXVCO0lBRTNELE1BQWFDLElBQUlDLE9BQW1CLEVBQXdDO1FBQzNFLElBQUk7WUFDSCxNQUFNQyxVQUFVLE1BQU0sSUFBSSxDQUFDSCxTQUFTLENBQUNJLFVBQVU7WUFDL0MsTUFBTUMsU0FBU0gsUUFBUUcsTUFBTSxJQUFJO1lBQ2pDLE1BQU1DLE1BQU0sR0FBR0QsU0FBU0YsU0FBUztZQUVqQyxJQUFJRCxRQUFRSyxNQUFNLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxDQUFBLE1BQU8sQ0FBQ0MsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFRixLQUFLO2dCQUNwQyxPQUFPZCxlQUFlaUIsT0FBTyxDQUFjWixJQUFJRSxJQUFJLEVBQUU7b0JBQUM7d0JBQUVPO3dCQUFLSSxXQUFXO29CQUFLO2lCQUFFO1lBQ2hGO1lBRUEsSUFBSSxDQUFDLENBQUEsTUFBTyxDQUFDRixJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUVGLEtBQUs7WUFDeEMsTUFBTUssTUFBTSxJQUFJbEI7WUFDaEIsTUFBTWtCLElBQUlMLEdBQUcsQ0FBQ0E7WUFFZCxJQUFJSixRQUFRVSxJQUFJLEVBQUU7Z0JBQ2pCLE1BQU1DLFNBQVMsTUFBTUYsSUFBSUcsYUFBYTtnQkFDdEMsSUFBSSxDQUFDLENBQUEsTUFBTyxDQUFDTixJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUssUUFBUTtnQkFDN0MsTUFBTUYsSUFBSUMsSUFBSSxDQUFDQztnQkFDZixJQUFJLENBQUMsQ0FBQSxNQUFPLENBQUNMLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRUYsS0FBSztnQkFDdkMsTUFBTUssSUFBSUksT0FBTyxDQUFDVDtZQUNuQjtZQUVBLE9BQU9kLGVBQWVpQixPQUFPLENBQWNaLElBQUlFLElBQUksRUFBRTtnQkFBQztvQkFBRU87b0JBQUtJLFdBQVc7Z0JBQUs7YUFBRTtRQUNoRixFQUFFLE9BQU9NLFFBQVE7WUFDaEIsTUFBTUMsUUFBUXJCLG1CQUFtQm9CO1lBQ2pDLE1BQU0sSUFBSXJCLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRXNCLE9BQU87UUFDdEQ7SUFDRDtBQUNEIn0=
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL3RhZy5hY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvdXNlSW1wb3J0VHlwZTogPERJPlxuaW1wb3J0IHsgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBHaXQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2ludGVyb3BcIjtcbmltcG9ydCB7IHNjcmliZSB9IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgeyBGb3JnZUVycm9yLCBmb3JtYXRVbmtub3duRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFRhZ09wdGlvbnMgPSB7XG5cdHByZWZpeD86IHN0cmluZztcblx0ZHJ5UnVuPzogYm9vbGVhbjtcblx0cHVzaD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWdSZXNwb25zZSA9IHtcblx0dGFnOiBzdHJpbmc7XG5cdHN1Y2NlZWRlZDogYm9vbGVhbjtcblx0ZXJyb3I/OiBzdHJpbmc7XG59O1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGFnIGltcGxlbWVudHMgQWN0aW9uPFRhZ09wdGlvbnM+IHtcblx0I2xvZ2dlciA9IHNjcmliZS5sb2dnZXIoVGFnLm5hbWUpO1xuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2U6IFdvcmtzcGFjZSkge31cblxuXHRwdWJsaWMgYXN5bmMgcnVuKG9wdGlvbnM6IFRhZ09wdGlvbnMpOiBQcm9taXNlPEFjdGlvblJlc3BvbnNlPFRhZ1Jlc3BvbnNlPj4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB2ZXJzaW9uID0gYXdhaXQgdGhpcy53b3Jrc3BhY2UuZ2V0VmVyc2lvbigpO1xuXHRcdFx0Y29uc3QgcHJlZml4ID0gb3B0aW9ucy5wcmVmaXggPz8gXCJ2XCI7XG5cdFx0XHRjb25zdCB0YWcgPSBgJHtwcmVmaXh9JHt2ZXJzaW9ufWA7XG5cblx0XHRcdGlmIChvcHRpb25zLmRyeVJ1bikge1xuXHRcdFx0XHR0aGlzLiNsb2dnZXIuaW5mbyhgW2RyeS1ydW5dICR7dGFnfWApO1xuXHRcdFx0XHRyZXR1cm4gQWN0aW9uUmVzcG9uc2UuU3VjY2VzczxUYWdSZXNwb25zZT4oVGFnLm5hbWUsIFt7IHRhZywgc3VjY2VlZGVkOiB0cnVlIH1dKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy4jbG9nZ2VyLmluZm8oYENyZWF0aW5nIHRhZzogJHt0YWd9YCk7XG5cdFx0XHRjb25zdCBnaXQgPSBuZXcgR2l0KCk7XG5cdFx0XHRhd2FpdCBnaXQudGFnKHRhZyk7XG5cblx0XHRcdGlmIChvcHRpb25zLnB1c2gpIHtcblx0XHRcdFx0Ly8gVGFnLW9ubHk6IFB1Ymxpc2ggY2hlY2tzIG91dCBhIGNvbW1pdCBTSEEgKGRldGFjaGVkIEhFQUQpLiBQdXNoaW5nIGFcblx0XHRcdFx0Ly8gYnJhbmNoIG5hbWUgaXMgd3JvbmcgdGhlcmUgYW5kIHVubmVjZXNzYXJ5IOKAlCB0aGUgdmVyc2lvbiBsYWJlbCBpcyB0aGUgdGFnLlxuXHRcdFx0XHR0aGlzLiNsb2dnZXIuaW5mbyhgUHVzaGluZyB0YWc6ICR7dGFnfWApO1xuXHRcdFx0XHRhd2FpdCBnaXQucHVzaFRhZyh0YWcpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gQWN0aW9uUmVzcG9uc2UuU3VjY2VzczxUYWdSZXNwb25zZT4oVGFnLm5hbWUsIFt7IHRhZywgc3VjY2VlZGVkOiB0cnVlIH1dKTtcblx0XHR9IGNhdGNoIChyZWFzb24pIHtcblx0XHRcdGNvbnN0IGVycm9yID0gZm9ybWF0VW5rbm93bkVycm9yKHJlYXNvbik7XG5cdFx0XHR0aHJvdyBuZXcgRm9yZ2VFcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSB0YWc6ICR7ZXJyb3J9YCk7XG5cdFx0fVxuXHR9XG59XG4iXSwibmFtZXMiOlsiaW5qZWN0YWJsZSIsIldvcmtzcGFjZSIsIkFjdGlvblJlc3BvbnNlIiwiR2l0Iiwic2NyaWJlIiwiRm9yZ2VFcnJvciIsImZvcm1hdFVua25vd25FcnJvciIsIlRhZyIsImxvZ2dlciIsIm5hbWUiLCJ3b3Jrc3BhY2UiLCJydW4iLCJvcHRpb25zIiwidmVyc2lvbiIsImdldFZlcnNpb24iLCJwcmVmaXgiLCJ0YWciLCJkcnlSdW4iLCJpbmZvIiwiU3VjY2VzcyIsInN1Y2NlZWRlZCIsImdpdCIsInB1c2giLCJwdXNoVGFnIiwicmVhc29uIiwiZXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLFNBQVNBLFVBQVUsUUFBUSxnQ0FBZ0M7QUFDM0QsOENBQThDO0FBQzlDLFNBQVNDLFNBQVMsUUFBUSxpQkFBaUI7QUFFM0MsU0FBU0MsY0FBYyxRQUFRLHNCQUFzQjtBQUNyRCxTQUFTQyxHQUFHLFFBQVEsMEJBQTBCO0FBQzlDLFNBQVNDLE1BQU0sUUFBUSxtQkFBbUI7QUFDMUMsU0FBU0MsVUFBVSxFQUFFQyxrQkFBa0IsUUFBUSxlQUFlO0FBZTlELE9BQU8sTUFBTUM7O0lBQ1osQ0FBQSxNQUFPLEdBQUdILE9BQU9JLE1BQU0sQ0FBQ0QsSUFBSUUsSUFBSSxFQUFFO0lBQ2xDLFlBQW1CLEFBQWlCQyxTQUFvQixDQUFFO2FBQXRCQSxZQUFBQTtJQUF1QjtJQUUzRCxNQUFhQyxJQUFJQyxPQUFtQixFQUF3QztRQUMzRSxJQUFJO1lBQ0gsTUFBTUMsVUFBVSxNQUFNLElBQUksQ0FBQ0gsU0FBUyxDQUFDSSxVQUFVO1lBQy9DLE1BQU1DLFNBQVNILFFBQVFHLE1BQU0sSUFBSTtZQUNqQyxNQUFNQyxNQUFNLEdBQUdELFNBQVNGLFNBQVM7WUFFakMsSUFBSUQsUUFBUUssTUFBTSxFQUFFO2dCQUNuQixJQUFJLENBQUMsQ0FBQSxNQUFPLENBQUNDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRUYsS0FBSztnQkFDcEMsT0FBT2QsZUFBZWlCLE9BQU8sQ0FBY1osSUFBSUUsSUFBSSxFQUFFO29CQUFDO3dCQUFFTzt3QkFBS0ksV0FBVztvQkFBSztpQkFBRTtZQUNoRjtZQUVBLElBQUksQ0FBQyxDQUFBLE1BQU8sQ0FBQ0YsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFRixLQUFLO1lBQ3hDLE1BQU1LLE1BQU0sSUFBSWxCO1lBQ2hCLE1BQU1rQixJQUFJTCxHQUFHLENBQUNBO1lBRWQsSUFBSUosUUFBUVUsSUFBSSxFQUFFO2dCQUNqQix1RUFBdUU7Z0JBQ3ZFLDZFQUE2RTtnQkFDN0UsSUFBSSxDQUFDLENBQUEsTUFBTyxDQUFDSixJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUVGLEtBQUs7Z0JBQ3ZDLE1BQU1LLElBQUlFLE9BQU8sQ0FBQ1A7WUFDbkI7WUFFQSxPQUFPZCxlQUFlaUIsT0FBTyxDQUFjWixJQUFJRSxJQUFJLEVBQUU7Z0JBQUM7b0JBQUVPO29CQUFLSSxXQUFXO2dCQUFLO2FBQUU7UUFDaEYsRUFBRSxPQUFPSSxRQUFRO1lBQ2hCLE1BQU1DLFFBQVFuQixtQkFBbUJrQjtZQUNqQyxNQUFNLElBQUluQixXQUFXLENBQUMsc0JBQXNCLEVBQUVvQixPQUFPO1FBQ3REO0lBQ0Q7QUFDRCJ9
@@ -0,0 +1,56 @@
1
+ function _ts_decorate(decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ }
7
+ function _ts_metadata(k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ }
10
+ import { injectable } from "@decohere/crucible/decorators";
11
+ // biome-ignore lint/style/useImportType: <DI>
12
+ import { Workspace } from "@decohere/mesh";
13
+ import { ActionResponse } from "@decohere/nexus/cli";
14
+ import { Trace } from "@decohere/nexus/diagnostics";
15
+ import { scribe } from "@decohere/scribe";
16
+ import ts from "typescript";
17
+ import { ForgeError } from "../errors.js";
18
+ // biome-ignore lint/style/useImportType: <DI>
19
+ import { TypeEmitter } from "../services/type-emitter.js";
20
+ export class TypeCheck {
21
+ workspace;
22
+ typeEmitter;
23
+ #logger = scribe.logger(TypeCheck.name);
24
+ constructor(workspace, typeEmitter){
25
+ this.workspace = workspace;
26
+ this.typeEmitter = typeEmitter;
27
+ }
28
+ run = async (options)=>{
29
+ const projects = this.workspace.getProjects(options.configuration);
30
+ for (const project of projects){
31
+ this.#logger.info(`Type-checking ${project.name}`);
32
+ }
33
+ const { diagnostics, formatted } = await this.typeEmitter.checkProject([
34
+ ...projects
35
+ ]);
36
+ const errors = diagnostics.filter((diagnostic)=>diagnostic.category === ts.DiagnosticCategory.Error);
37
+ if (errors.length > 0) {
38
+ throw new ForgeError(formatted || "Type check failed");
39
+ }
40
+ if (formatted.length > 0) {
41
+ this.#logger.info(formatted);
42
+ }
43
+ return ActionResponse.Success(TypeCheck.name);
44
+ };
45
+ }
46
+ TypeCheck = _ts_decorate([
47
+ Trace,
48
+ injectable(),
49
+ _ts_metadata("design:type", Function),
50
+ _ts_metadata("design:paramtypes", [
51
+ typeof Workspace === "undefined" ? Object : Workspace,
52
+ typeof TypeEmitter === "undefined" ? Object : TypeEmitter
53
+ ])
54
+ ], TypeCheck);
55
+
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL3R5cGVjaGVjay5hY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvdXNlSW1wb3J0VHlwZTogPERJPlxuaW1wb3J0IHsgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBUcmFjZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvZGlhZ25vc3RpY3NcIjtcbmltcG9ydCB7IHNjcmliZSB9IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcbmltcG9ydCB7IEZvcmdlRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzLmpzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBUeXBlRW1pdHRlciB9IGZyb20gXCIuLi9zZXJ2aWNlcy90eXBlLWVtaXR0ZXIuanNcIjtcblxuZXhwb3J0IHR5cGUgVHlwZUNoZWNrT3B0aW9ucyA9IHtcblx0Y29uZmlndXJhdGlvbjogc3RyaW5nO1xufTtcblxuQFRyYWNlXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVHlwZUNoZWNrIGltcGxlbWVudHMgQWN0aW9uPFR5cGVDaGVja09wdGlvbnM+IHtcblx0I2xvZ2dlciA9IHNjcmliZS5sb2dnZXIoVHlwZUNoZWNrLm5hbWUpO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IHdvcmtzcGFjZTogV29ya3NwYWNlLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgdHlwZUVtaXR0ZXI6IFR5cGVFbWl0dGVyLFxuXHQpIHt9XG5cblx0cHVibGljIHJ1biA9IGFzeW5jIChvcHRpb25zOiBUeXBlQ2hlY2tPcHRpb25zKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4gPT4ge1xuXHRcdGNvbnN0IHByb2plY3RzID0gdGhpcy53b3Jrc3BhY2UuZ2V0UHJvamVjdHMob3B0aW9ucy5jb25maWd1cmF0aW9uKTtcblx0XHRmb3IgKGNvbnN0IHByb2plY3Qgb2YgcHJvamVjdHMpIHtcblx0XHRcdHRoaXMuI2xvZ2dlci5pbmZvKGBUeXBlLWNoZWNraW5nICR7cHJvamVjdC5uYW1lfWApO1xuXHRcdH1cblxuXHRcdGNvbnN0IHsgZGlhZ25vc3RpY3MsIGZvcm1hdHRlZCB9ID0gYXdhaXQgdGhpcy50eXBlRW1pdHRlci5jaGVja1Byb2plY3QoWy4uLnByb2plY3RzXSk7XG5cdFx0Y29uc3QgZXJyb3JzID0gZGlhZ25vc3RpY3MuZmlsdGVyKFxuXHRcdFx0KGRpYWdub3N0aWMpID0+IGRpYWdub3N0aWMuY2F0ZWdvcnkgPT09IHRzLkRpYWdub3N0aWNDYXRlZ29yeS5FcnJvcixcblx0XHQpO1xuXG5cdFx0aWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRm9yZ2VFcnJvcihmb3JtYXR0ZWQgfHwgXCJUeXBlIGNoZWNrIGZhaWxlZFwiKTtcblx0XHR9XG5cblx0XHRpZiAoZm9ybWF0dGVkLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuI2xvZ2dlci5pbmZvKGZvcm1hdHRlZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlN1Y2Nlc3MoVHlwZUNoZWNrLm5hbWUpO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbImluamVjdGFibGUiLCJXb3Jrc3BhY2UiLCJBY3Rpb25SZXNwb25zZSIsIlRyYWNlIiwic2NyaWJlIiwidHMiLCJGb3JnZUVycm9yIiwiVHlwZUVtaXR0ZXIiLCJUeXBlQ2hlY2siLCJsb2dnZXIiLCJuYW1lIiwid29ya3NwYWNlIiwidHlwZUVtaXR0ZXIiLCJydW4iLCJvcHRpb25zIiwicHJvamVjdHMiLCJnZXRQcm9qZWN0cyIsImNvbmZpZ3VyYXRpb24iLCJwcm9qZWN0IiwiaW5mbyIsImRpYWdub3N0aWNzIiwiZm9ybWF0dGVkIiwiY2hlY2tQcm9qZWN0IiwiZXJyb3JzIiwiZmlsdGVyIiwiZGlhZ25vc3RpYyIsImNhdGVnb3J5IiwiRGlhZ25vc3RpY0NhdGVnb3J5IiwiRXJyb3IiLCJsZW5ndGgiLCJTdWNjZXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxTQUFTQSxVQUFVLFFBQVEsZ0NBQWdDO0FBQzNELDhDQUE4QztBQUM5QyxTQUFTQyxTQUFTLFFBQVEsaUJBQWlCO0FBRTNDLFNBQVNDLGNBQWMsUUFBUSxzQkFBc0I7QUFDckQsU0FBU0MsS0FBSyxRQUFRLDhCQUE4QjtBQUNwRCxTQUFTQyxNQUFNLFFBQVEsbUJBQW1CO0FBQzFDLE9BQU9DLFFBQVEsYUFBYTtBQUM1QixTQUFTQyxVQUFVLFFBQVEsZUFBZTtBQUMxQyw4Q0FBOEM7QUFDOUMsU0FBU0MsV0FBVyxRQUFRLDhCQUE4QjtBQVExRCxPQUFPLE1BQU1DOzs7SUFDWixDQUFBLE1BQU8sR0FBR0osT0FBT0ssTUFBTSxDQUFDRCxVQUFVRSxJQUFJLEVBQUU7SUFFeEMsWUFDQyxBQUFpQkMsU0FBb0IsRUFDckMsQUFBaUJDLFdBQXdCLENBQ3hDO2FBRmdCRCxZQUFBQTthQUNBQyxjQUFBQTtJQUNmO0lBRUlDLE1BQU0sT0FBT0M7UUFDbkIsTUFBTUMsV0FBVyxJQUFJLENBQUNKLFNBQVMsQ0FBQ0ssV0FBVyxDQUFDRixRQUFRRyxhQUFhO1FBQ2pFLEtBQUssTUFBTUMsV0FBV0gsU0FBVTtZQUMvQixJQUFJLENBQUMsQ0FBQSxNQUFPLENBQUNJLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRUQsUUFBUVIsSUFBSSxFQUFFO1FBQ2xEO1FBRUEsTUFBTSxFQUFFVSxXQUFXLEVBQUVDLFNBQVMsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDVCxXQUFXLENBQUNVLFlBQVksQ0FBQztlQUFJUDtTQUFTO1FBQ3BGLE1BQU1RLFNBQVNILFlBQVlJLE1BQU0sQ0FDaEMsQ0FBQ0MsYUFBZUEsV0FBV0MsUUFBUSxLQUFLckIsR0FBR3NCLGtCQUFrQixDQUFDQyxLQUFLO1FBR3BFLElBQUlMLE9BQU9NLE1BQU0sR0FBRyxHQUFHO1lBQ3RCLE1BQU0sSUFBSXZCLFdBQVdlLGFBQWE7UUFDbkM7UUFFQSxJQUFJQSxVQUFVUSxNQUFNLEdBQUcsR0FBRztZQUN6QixJQUFJLENBQUMsQ0FBQSxNQUFPLENBQUNWLElBQUksQ0FBQ0U7UUFDbkI7UUFFQSxPQUFPbkIsZUFBZTRCLE9BQU8sQ0FBQ3RCLFVBQVVFLElBQUk7SUFDN0MsRUFBRTtBQUNIIn0=
@@ -0,0 +1,61 @@
1
+ function _ts_decorate(decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ }
7
+ import fs from "node:fs/promises";
8
+ import path from "node:path";
9
+ import { injectable } from "@decohere/crucible/decorators";
10
+ import { ActionResponse } from "@decohere/nexus/cli";
11
+ import { scribe } from "@decohere/scribe";
12
+ import { ForgeError } from "../errors.js";
13
+ import { LINK_MANIFEST } from "./link.action.js";
14
+ export class Unlink {
15
+ #logger = scribe.logger(Unlink.name);
16
+ run = async (options)=>{
17
+ const targetDir = path.resolve(options.targetDir);
18
+ const manifestPath = path.join(targetDir, LINK_MANIFEST);
19
+ const manifestStat = await fs.stat(manifestPath).catch(()=>null);
20
+ if (manifestStat == null) {
21
+ throw new ForgeError(`No link manifest found at "${manifestPath}". Nothing to unlink.`);
22
+ }
23
+ const manifest = JSON.parse(await fs.readFile(manifestPath, "utf8"));
24
+ for (const { packageName, symlinkPath, originalPath } of manifest.links){
25
+ const stat = await fs.lstat(symlinkPath).catch(()=>null);
26
+ if (stat?.isSymbolicLink()) {
27
+ await fs.unlink(symlinkPath);
28
+ this.#logger.trace(`Removed symlink for ${packageName}`);
29
+ }
30
+ if (originalPath != null) {
31
+ const backupStat = await fs.stat(originalPath).catch(()=>null);
32
+ if (backupStat != null) {
33
+ await fs.rename(originalPath, symlinkPath);
34
+ this.#logger.trace(`Restored original dir for ${packageName}`);
35
+ } else {
36
+ // originalPath is a symlink target string — recreate the symlink
37
+ await fs.mkdir(path.dirname(symlinkPath), {
38
+ recursive: true
39
+ });
40
+ await fs.symlink(originalPath, symlinkPath, "dir");
41
+ this.#logger.trace(`Restored original symlink for ${packageName}`);
42
+ }
43
+ }
44
+ this.#logger.info(`Unlinked ${packageName}`);
45
+ }
46
+ await fs.unlink(manifestPath);
47
+ if (manifest.peerNodeModulesDir != null) {
48
+ await fs.rm(manifest.peerNodeModulesDir, {
49
+ recursive: true,
50
+ force: true
51
+ });
52
+ this.#logger.info(`Removed peer node_modules at ${manifest.peerNodeModulesDir}`);
53
+ }
54
+ return ActionResponse.Success(Unlink.name);
55
+ };
56
+ }
57
+ Unlink = _ts_decorate([
58
+ injectable()
59
+ ], Unlink);
60
+
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL3VubGluay5hY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHsgRm9yZ2VFcnJvciB9IGZyb20gXCIuLi9lcnJvcnMuanNcIjtcbmltcG9ydCB7IExJTktfTUFOSUZFU1QsIHR5cGUgTGlua01hbmlmZXN0IH0gZnJvbSBcIi4vbGluay5hY3Rpb24uanNcIjtcblxuZXhwb3J0IHR5cGUgVW5saW5rT3B0aW9ucyA9IHtcblx0dGFyZ2V0RGlyOiBzdHJpbmc7XG59O1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVW5saW5rIGltcGxlbWVudHMgQWN0aW9uPFVubGlua09wdGlvbnM+IHtcblx0I2xvZ2dlciA9IHNjcmliZS5sb2dnZXIoVW5saW5rLm5hbWUpO1xuXG5cdHB1YmxpYyBydW4gPSBhc3luYyAob3B0aW9uczogVW5saW5rT3B0aW9ucyk6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+ID0+IHtcblx0XHRjb25zdCB0YXJnZXREaXIgPSBwYXRoLnJlc29sdmUob3B0aW9ucy50YXJnZXREaXIpO1xuXHRcdGNvbnN0IG1hbmlmZXN0UGF0aCA9IHBhdGguam9pbih0YXJnZXREaXIsIExJTktfTUFOSUZFU1QpO1xuXG5cdFx0Y29uc3QgbWFuaWZlc3RTdGF0ID0gYXdhaXQgZnMuc3RhdChtYW5pZmVzdFBhdGgpLmNhdGNoKCgpID0+IG51bGwpO1xuXHRcdGlmIChtYW5pZmVzdFN0YXQgPT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoYE5vIGxpbmsgbWFuaWZlc3QgZm91bmQgYXQgXCIke21hbmlmZXN0UGF0aH1cIi4gTm90aGluZyB0byB1bmxpbmsuYCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbWFuaWZlc3Q6IExpbmtNYW5pZmVzdCA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUobWFuaWZlc3RQYXRoLCBcInV0ZjhcIikpO1xuXG5cdFx0Zm9yIChjb25zdCB7IHBhY2thZ2VOYW1lLCBzeW1saW5rUGF0aCwgb3JpZ2luYWxQYXRoIH0gb2YgbWFuaWZlc3QubGlua3MpIHtcblx0XHRcdGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5sc3RhdChzeW1saW5rUGF0aCkuY2F0Y2goKCkgPT4gbnVsbCk7XG5cdFx0XHRpZiAoc3RhdD8uaXNTeW1ib2xpY0xpbmsoKSkge1xuXHRcdFx0XHRhd2FpdCBmcy51bmxpbmsoc3ltbGlua1BhdGgpO1xuXHRcdFx0XHR0aGlzLiNsb2dnZXIudHJhY2UoYFJlbW92ZWQgc3ltbGluayBmb3IgJHtwYWNrYWdlTmFtZX1gKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9yaWdpbmFsUGF0aCAhPSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IGJhY2t1cFN0YXQgPSBhd2FpdCBmcy5zdGF0KG9yaWdpbmFsUGF0aCkuY2F0Y2goKCkgPT4gbnVsbCk7XG5cdFx0XHRcdGlmIChiYWNrdXBTdGF0ICE9IG51bGwpIHtcblx0XHRcdFx0XHRhd2FpdCBmcy5yZW5hbWUob3JpZ2luYWxQYXRoLCBzeW1saW5rUGF0aCk7XG5cdFx0XHRcdFx0dGhpcy4jbG9nZ2VyLnRyYWNlKGBSZXN0b3JlZCBvcmlnaW5hbCBkaXIgZm9yICR7cGFja2FnZU5hbWV9YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gb3JpZ2luYWxQYXRoIGlzIGEgc3ltbGluayB0YXJnZXQgc3RyaW5nIOKAlCByZWNyZWF0ZSB0aGUgc3ltbGlua1xuXHRcdFx0XHRcdGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShzeW1saW5rUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHRcdFx0XHRcdGF3YWl0IGZzLnN5bWxpbmsob3JpZ2luYWxQYXRoLCBzeW1saW5rUGF0aCwgXCJkaXJcIik7XG5cdFx0XHRcdFx0dGhpcy4jbG9nZ2VyLnRyYWNlKGBSZXN0b3JlZCBvcmlnaW5hbCBzeW1saW5rIGZvciAke3BhY2thZ2VOYW1lfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuI2xvZ2dlci5pbmZvKGBVbmxpbmtlZCAke3BhY2thZ2VOYW1lfWApO1xuXHRcdH1cblxuXHRcdGF3YWl0IGZzLnVubGluayhtYW5pZmVzdFBhdGgpO1xuXG5cdFx0aWYgKG1hbmlmZXN0LnBlZXJOb2RlTW9kdWxlc0RpciAhPSBudWxsKSB7XG5cdFx0XHRhd2FpdCBmcy5ybShtYW5pZmVzdC5wZWVyTm9kZU1vZHVsZXNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcblx0XHRcdHRoaXMuI2xvZ2dlci5pbmZvKGBSZW1vdmVkIHBlZXIgbm9kZV9tb2R1bGVzIGF0ICR7bWFuaWZlc3QucGVlck5vZGVNb2R1bGVzRGlyfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5TdWNjZXNzKFVubGluay5uYW1lKTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6WyJmcyIsInBhdGgiLCJpbmplY3RhYmxlIiwiQWN0aW9uUmVzcG9uc2UiLCJzY3JpYmUiLCJGb3JnZUVycm9yIiwiTElOS19NQU5JRkVTVCIsIlVubGluayIsImxvZ2dlciIsIm5hbWUiLCJydW4iLCJvcHRpb25zIiwidGFyZ2V0RGlyIiwicmVzb2x2ZSIsIm1hbmlmZXN0UGF0aCIsImpvaW4iLCJtYW5pZmVzdFN0YXQiLCJzdGF0IiwiY2F0Y2giLCJtYW5pZmVzdCIsIkpTT04iLCJwYXJzZSIsInJlYWRGaWxlIiwicGFja2FnZU5hbWUiLCJzeW1saW5rUGF0aCIsIm9yaWdpbmFsUGF0aCIsImxpbmtzIiwibHN0YXQiLCJpc1N5bWJvbGljTGluayIsInVubGluayIsInRyYWNlIiwiYmFja3VwU3RhdCIsInJlbmFtZSIsIm1rZGlyIiwiZGlybmFtZSIsInJlY3Vyc2l2ZSIsInN5bWxpbmsiLCJpbmZvIiwicGVlck5vZGVNb2R1bGVzRGlyIiwicm0iLCJmb3JjZSIsIlN1Y2Nlc3MiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU9BLFFBQVEsbUJBQW1CO0FBQ2xDLE9BQU9DLFVBQVUsWUFBWTtBQUM3QixTQUFTQyxVQUFVLFFBQVEsZ0NBQWdDO0FBRTNELFNBQVNDLGNBQWMsUUFBUSxzQkFBc0I7QUFDckQsU0FBU0MsTUFBTSxRQUFRLG1CQUFtQjtBQUMxQyxTQUFTQyxVQUFVLFFBQVEsZUFBZTtBQUMxQyxTQUFTQyxhQUFhLFFBQTJCLG1CQUFtQjtBQU9wRSxPQUFPLE1BQU1DO0lBQ1osQ0FBQSxNQUFPLEdBQUdILE9BQU9JLE1BQU0sQ0FBQ0QsT0FBT0UsSUFBSSxFQUFFO0lBRTlCQyxNQUFNLE9BQU9DO1FBQ25CLE1BQU1DLFlBQVlYLEtBQUtZLE9BQU8sQ0FBQ0YsUUFBUUMsU0FBUztRQUNoRCxNQUFNRSxlQUFlYixLQUFLYyxJQUFJLENBQUNILFdBQVdOO1FBRTFDLE1BQU1VLGVBQWUsTUFBTWhCLEdBQUdpQixJQUFJLENBQUNILGNBQWNJLEtBQUssQ0FBQyxJQUFNO1FBQzdELElBQUlGLGdCQUFnQixNQUFNO1lBQ3pCLE1BQU0sSUFBSVgsV0FBVyxDQUFDLDJCQUEyQixFQUFFUyxhQUFhLHFCQUFxQixDQUFDO1FBQ3ZGO1FBRUEsTUFBTUssV0FBeUJDLEtBQUtDLEtBQUssQ0FBQyxNQUFNckIsR0FBR3NCLFFBQVEsQ0FBQ1IsY0FBYztRQUUxRSxLQUFLLE1BQU0sRUFBRVMsV0FBVyxFQUFFQyxXQUFXLEVBQUVDLFlBQVksRUFBRSxJQUFJTixTQUFTTyxLQUFLLENBQUU7WUFDeEUsTUFBTVQsT0FBTyxNQUFNakIsR0FBRzJCLEtBQUssQ0FBQ0gsYUFBYU4sS0FBSyxDQUFDLElBQU07WUFDckQsSUFBSUQsTUFBTVcsa0JBQWtCO2dCQUMzQixNQUFNNUIsR0FBRzZCLE1BQU0sQ0FBQ0w7Z0JBQ2hCLElBQUksQ0FBQyxDQUFBLE1BQU8sQ0FBQ00sS0FBSyxDQUFDLENBQUMsb0JBQW9CLEVBQUVQLGFBQWE7WUFDeEQ7WUFFQSxJQUFJRSxnQkFBZ0IsTUFBTTtnQkFDekIsTUFBTU0sYUFBYSxNQUFNL0IsR0FBR2lCLElBQUksQ0FBQ1EsY0FBY1AsS0FBSyxDQUFDLElBQU07Z0JBQzNELElBQUlhLGNBQWMsTUFBTTtvQkFDdkIsTUFBTS9CLEdBQUdnQyxNQUFNLENBQUNQLGNBQWNEO29CQUM5QixJQUFJLENBQUMsQ0FBQSxNQUFPLENBQUNNLEtBQUssQ0FBQyxDQUFDLDBCQUEwQixFQUFFUCxhQUFhO2dCQUM5RCxPQUFPO29CQUNOLGlFQUFpRTtvQkFDakUsTUFBTXZCLEdBQUdpQyxLQUFLLENBQUNoQyxLQUFLaUMsT0FBTyxDQUFDVixjQUFjO3dCQUFFVyxXQUFXO29CQUFLO29CQUM1RCxNQUFNbkMsR0FBR29DLE9BQU8sQ0FBQ1gsY0FBY0QsYUFBYTtvQkFDNUMsSUFBSSxDQUFDLENBQUEsTUFBTyxDQUFDTSxLQUFLLENBQUMsQ0FBQyw4QkFBOEIsRUFBRVAsYUFBYTtnQkFDbEU7WUFDRDtZQUVBLElBQUksQ0FBQyxDQUFBLE1BQU8sQ0FBQ2MsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFZCxhQUFhO1FBQzVDO1FBRUEsTUFBTXZCLEdBQUc2QixNQUFNLENBQUNmO1FBRWhCLElBQUlLLFNBQVNtQixrQkFBa0IsSUFBSSxNQUFNO1lBQ3hDLE1BQU10QyxHQUFHdUMsRUFBRSxDQUFDcEIsU0FBU21CLGtCQUFrQixFQUFFO2dCQUFFSCxXQUFXO2dCQUFNSyxPQUFPO1lBQUs7WUFDeEUsSUFBSSxDQUFDLENBQUEsTUFBTyxDQUFDSCxJQUFJLENBQUMsQ0FBQyw2QkFBNkIsRUFBRWxCLFNBQVNtQixrQkFBa0IsRUFBRTtRQUNoRjtRQUVBLE9BQU9uQyxlQUFlc0MsT0FBTyxDQUFDbEMsT0FBT0UsSUFBSTtJQUMxQyxFQUFFO0FBQ0gifQ==
@@ -24,6 +24,7 @@ export class Watch {
24
24
  return ActionResponse.Skipped(Watch.name);
25
25
  }
26
26
  await this.workspace.watch(options.configuration);
27
+ this.#logger.info(`Starting watch`);
27
28
  return ActionResponse.Blocking(Watch.name);
28
29
  };
29
30
  [Symbol.dispose]() {
@@ -38,4 +39,4 @@ Watch = _ts_decorate([
38
39
  ])
39
40
  ], Watch);
40
41
 
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL3dhdGNoLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IEFjdGlvblJlc3BvbnNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IHNjcmliZSB9IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5cbmV4cG9ydCB0eXBlIFdhdGNoT3B0aW9ucyA9IHtcblx0d2F0Y2g6IGJvb2xlYW47XG5cdGNvbmZpZ3VyYXRpb246IHN0cmluZztcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBXYXRjaCBpbXBsZW1lbnRzIEFjdGlvbjxXYXRjaE9wdGlvbnM+IHtcblx0I2xvZ2dlciA9IHNjcmliZS5sb2dnZXIoV2F0Y2gubmFtZSk7XG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHdvcmtzcGFjZTogV29ya3NwYWNlKSB7fVxuXG5cdHB1YmxpYyBydW4gPSBhc3luYyAob3B0aW9uczogV2F0Y2hPcHRpb25zKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4gPT4ge1xuXHRcdGlmICghb3B0aW9ucy53YXRjaCkge1xuXHRcdFx0dGhpcy4jbG9nZ2VyLmluZm8oYFNraXBwaW5nICR7V2F0Y2gubmFtZX1gKTtcblx0XHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5Ta2lwcGVkKFdhdGNoLm5hbWUpO1xuXHRcdH1cblxuXHRcdGF3YWl0IHRoaXMud29ya3NwYWNlLndhdGNoKG9wdGlvbnMuY29uZmlndXJhdGlvbik7XG5cdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLkJsb2NraW5nKFdhdGNoLm5hbWUpO1xuXHR9O1xuXG5cdHB1YmxpYyBbU3ltYm9sLmRpc3Bvc2VdKCkge1xuXHRcdHRoaXMud29ya3NwYWNlLnN0b3BXYXRjaGluZygpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiaW5qZWN0YWJsZSIsIldvcmtzcGFjZSIsIkFjdGlvblJlc3BvbnNlIiwic2NyaWJlIiwiV2F0Y2giLCJsb2dnZXIiLCJuYW1lIiwid29ya3NwYWNlIiwicnVuIiwib3B0aW9ucyIsIndhdGNoIiwiaW5mbyIsIlNraXBwZWQiLCJjb25maWd1cmF0aW9uIiwiQmxvY2tpbmciLCJTeW1ib2wiLCJkaXNwb3NlIiwic3RvcFdhdGNoaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxTQUFTQSxVQUFVLFFBQVEsZ0NBQWdDO0FBQzNELDhDQUE4QztBQUM5QyxTQUFTQyxTQUFTLFFBQVEsaUJBQWlCO0FBRTNDLFNBQVNDLGNBQWMsUUFBUSxzQkFBc0I7QUFDckQsU0FBU0MsTUFBTSxRQUFRLG1CQUFtQjtBQVExQyxPQUFPLE1BQU1DOztJQUNaLENBQUEsTUFBTyxHQUFHRCxPQUFPRSxNQUFNLENBQUNELE1BQU1FLElBQUksRUFBRTtJQUNwQyxZQUFtQixBQUFpQkMsU0FBb0IsQ0FBRTthQUF0QkEsWUFBQUE7SUFBdUI7SUFFcERDLE1BQU0sT0FBT0M7UUFDbkIsSUFBSSxDQUFDQSxRQUFRQyxLQUFLLEVBQUU7WUFDbkIsSUFBSSxDQUFDLENBQUEsTUFBTyxDQUFDQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUVQLE1BQU1FLElBQUksRUFBRTtZQUMxQyxPQUFPSixlQUFlVSxPQUFPLENBQUNSLE1BQU1FLElBQUk7UUFDekM7UUFFQSxNQUFNLElBQUksQ0FBQ0MsU0FBUyxDQUFDRyxLQUFLLENBQUNELFFBQVFJLGFBQWE7UUFDaEQsT0FBT1gsZUFBZVksUUFBUSxDQUFDVixNQUFNRSxJQUFJO0lBQzFDLEVBQUU7SUFFSyxDQUFDUyxPQUFPQyxPQUFPLENBQUMsR0FBRztRQUN6QixJQUFJLENBQUNULFNBQVMsQ0FBQ1UsWUFBWTtJQUM1QjtBQUNEIn0=
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL3dhdGNoLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IEFjdGlvblJlc3BvbnNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IHNjcmliZSB9IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5cbmV4cG9ydCB0eXBlIFdhdGNoT3B0aW9ucyA9IHtcblx0d2F0Y2g6IGJvb2xlYW47XG5cdGNvbmZpZ3VyYXRpb246IHN0cmluZztcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBXYXRjaCBpbXBsZW1lbnRzIEFjdGlvbjxXYXRjaE9wdGlvbnM+IHtcblx0I2xvZ2dlciA9IHNjcmliZS5sb2dnZXIoV2F0Y2gubmFtZSk7XG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHdvcmtzcGFjZTogV29ya3NwYWNlKSB7fVxuXG5cdHB1YmxpYyBydW4gPSBhc3luYyAob3B0aW9uczogV2F0Y2hPcHRpb25zKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4gPT4ge1xuXHRcdGlmICghb3B0aW9ucy53YXRjaCkge1xuXHRcdFx0dGhpcy4jbG9nZ2VyLmluZm8oYFNraXBwaW5nICR7V2F0Y2gubmFtZX1gKTtcblx0XHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5Ta2lwcGVkKFdhdGNoLm5hbWUpO1xuXHRcdH1cblxuXHRcdGF3YWl0IHRoaXMud29ya3NwYWNlLndhdGNoKG9wdGlvbnMuY29uZmlndXJhdGlvbik7XG5cdFx0dGhpcy4jbG9nZ2VyLmluZm8oYFN0YXJ0aW5nIHdhdGNoYCk7XG5cdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLkJsb2NraW5nKFdhdGNoLm5hbWUpO1xuXHR9O1xuXG5cdHB1YmxpYyBbU3ltYm9sLmRpc3Bvc2VdKCkge1xuXHRcdHRoaXMud29ya3NwYWNlLnN0b3BXYXRjaGluZygpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiaW5qZWN0YWJsZSIsIldvcmtzcGFjZSIsIkFjdGlvblJlc3BvbnNlIiwic2NyaWJlIiwiV2F0Y2giLCJsb2dnZXIiLCJuYW1lIiwid29ya3NwYWNlIiwicnVuIiwib3B0aW9ucyIsIndhdGNoIiwiaW5mbyIsIlNraXBwZWQiLCJjb25maWd1cmF0aW9uIiwiQmxvY2tpbmciLCJTeW1ib2wiLCJkaXNwb3NlIiwic3RvcFdhdGNoaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxTQUFTQSxVQUFVLFFBQVEsZ0NBQWdDO0FBQzNELDhDQUE4QztBQUM5QyxTQUFTQyxTQUFTLFFBQVEsaUJBQWlCO0FBRTNDLFNBQVNDLGNBQWMsUUFBUSxzQkFBc0I7QUFDckQsU0FBU0MsTUFBTSxRQUFRLG1CQUFtQjtBQVExQyxPQUFPLE1BQU1DOztJQUNaLENBQUEsTUFBTyxHQUFHRCxPQUFPRSxNQUFNLENBQUNELE1BQU1FLElBQUksRUFBRTtJQUNwQyxZQUFtQixBQUFpQkMsU0FBb0IsQ0FBRTthQUF0QkEsWUFBQUE7SUFBdUI7SUFFcERDLE1BQU0sT0FBT0M7UUFDbkIsSUFBSSxDQUFDQSxRQUFRQyxLQUFLLEVBQUU7WUFDbkIsSUFBSSxDQUFDLENBQUEsTUFBTyxDQUFDQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUVQLE1BQU1FLElBQUksRUFBRTtZQUMxQyxPQUFPSixlQUFlVSxPQUFPLENBQUNSLE1BQU1FLElBQUk7UUFDekM7UUFFQSxNQUFNLElBQUksQ0FBQ0MsU0FBUyxDQUFDRyxLQUFLLENBQUNELFFBQVFJLGFBQWE7UUFDaEQsSUFBSSxDQUFDLENBQUEsTUFBTyxDQUFDRixJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDbEMsT0FBT1QsZUFBZVksUUFBUSxDQUFDVixNQUFNRSxJQUFJO0lBQzFDLEVBQUU7SUFFSyxDQUFDUyxPQUFPQyxPQUFPLENBQUMsR0FBRztRQUN6QixJQUFJLENBQUNULFNBQVMsQ0FBQ1UsWUFBWTtJQUM1QjtBQUNEIn0=
@@ -0,0 +1,18 @@
1
+ import { ConfigurationOption, DecohereCommand, DryRunOption } from "@decohere/nexus/cli";
2
+ import { Docker } from "../actions/docker.action.js";
3
+ export class DockerCommand extends DecohereCommand {
4
+ get actions() {
5
+ return [
6
+ Docker
7
+ ];
8
+ }
9
+ constructor(name){
10
+ super(name);
11
+ this.description("Build Docker images for workspace projects");
12
+ this.addOption(new ConfigurationOption("release"));
13
+ this.addOption(new DryRunOption("Build images without pushing to a registry"));
14
+ this.option("--push", "Push built images after a successful build", false);
15
+ }
16
+ }
17
+
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9jb21tYW5kcy9kb2NrZXIuY29tbWFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWd1cmF0aW9uT3B0aW9uLCBEZWNvaGVyZUNvbW1hbmQsIERyeVJ1bk9wdGlvbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBEb2NrZXIgfSBmcm9tIFwiLi4vYWN0aW9ucy9kb2NrZXIuYWN0aW9uLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2NrZXJDb21tYW5kIGV4dGVuZHMgRGVjb2hlcmVDb21tYW5kIHtcblx0cHVibGljIG92ZXJyaWRlIGdldCBhY3Rpb25zKCkge1xuXHRcdHJldHVybiBbRG9ja2VyXTtcblx0fVxuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcblx0XHRzdXBlcihuYW1lKTtcblx0XHR0aGlzLmRlc2NyaXB0aW9uKFwiQnVpbGQgRG9ja2VyIGltYWdlcyBmb3Igd29ya3NwYWNlIHByb2plY3RzXCIpO1xuXHRcdHRoaXMuYWRkT3B0aW9uKG5ldyBDb25maWd1cmF0aW9uT3B0aW9uKFwicmVsZWFzZVwiKSk7XG5cdFx0dGhpcy5hZGRPcHRpb24obmV3IERyeVJ1bk9wdGlvbihcIkJ1aWxkIGltYWdlcyB3aXRob3V0IHB1c2hpbmcgdG8gYSByZWdpc3RyeVwiKSk7XG5cdFx0dGhpcy5vcHRpb24oXCItLXB1c2hcIiwgXCJQdXNoIGJ1aWx0IGltYWdlcyBhZnRlciBhIHN1Y2Nlc3NmdWwgYnVpbGRcIiwgZmFsc2UpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiQ29uZmlndXJhdGlvbk9wdGlvbiIsIkRlY29oZXJlQ29tbWFuZCIsIkRyeVJ1bk9wdGlvbiIsIkRvY2tlciIsIkRvY2tlckNvbW1hbmQiLCJhY3Rpb25zIiwibmFtZSIsImRlc2NyaXB0aW9uIiwiYWRkT3B0aW9uIiwib3B0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxtQkFBbUIsRUFBRUMsZUFBZSxFQUFFQyxZQUFZLFFBQVEsc0JBQXNCO0FBQ3pGLFNBQVNDLE1BQU0sUUFBUSw4QkFBOEI7QUFFckQsT0FBTyxNQUFNQyxzQkFBc0JIO0lBQ2xDLElBQW9CSSxVQUFVO1FBQzdCLE9BQU87WUFBQ0Y7U0FBTztJQUNoQjtJQUVBLFlBQW1CRyxJQUFZLENBQUU7UUFDaEMsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ0MsV0FBVyxDQUFDO1FBQ2pCLElBQUksQ0FBQ0MsU0FBUyxDQUFDLElBQUlSLG9CQUFvQjtRQUN2QyxJQUFJLENBQUNRLFNBQVMsQ0FBQyxJQUFJTixhQUFhO1FBQ2hDLElBQUksQ0FBQ08sTUFBTSxDQUFDLFVBQVUsOENBQThDO0lBQ3JFO0FBQ0QifQ==
@@ -1,8 +1,11 @@
1
1
  export * from "./build.command.js";
2
2
  export * from "./dependency.command.js";
3
+ export * from "./docker.command.js";
3
4
  export * from "./forge.command.js";
5
+ export * from "./link.command.js";
4
6
  export * from "./publish.command.js";
5
7
  export * from "./tag.command.js";
8
+ export * from "./typecheck.command.js";
6
9
  export * from "./version.command.js";
7
10
 
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9jb21tYW5kcy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9idWlsZC5jb21tYW5kLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZXBlbmRlbmN5LmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2ZvcmdlLmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3B1Ymxpc2guY29tbWFuZC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGFnLmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZlcnNpb24uY29tbWFuZC5qc1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsMEJBQTBCO0FBQ3hDLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsdUJBQXVCO0FBQ3JDLGNBQWMsbUJBQW1CO0FBQ2pDLGNBQWMsdUJBQXVCIn0=
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9jb21tYW5kcy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9idWlsZC5jb21tYW5kLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZXBlbmRlbmN5LmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RvY2tlci5jb21tYW5kLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mb3JnZS5jb21tYW5kLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saW5rLmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3B1Ymxpc2guY29tbWFuZC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGFnLmNvbW1hbmQuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVjaGVjay5jb21tYW5kLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92ZXJzaW9uLmNvbW1hbmQuanNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLDBCQUEwQjtBQUN4QyxjQUFjLHNCQUFzQjtBQUNwQyxjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLG9CQUFvQjtBQUNsQyxjQUFjLHVCQUF1QjtBQUNyQyxjQUFjLG1CQUFtQjtBQUNqQyxjQUFjLHlCQUF5QjtBQUN2QyxjQUFjLHVCQUF1QiJ9
@@ -0,0 +1,66 @@
1
+ import { CommandResponse, ConfigurationOption, DecohereCommand, NoCleanOptions } from "@decohere/nexus/cli";
2
+ import auto from "async/auto.js";
3
+ import { Build } from "../actions/build.action.js";
4
+ import { Clean } from "../actions/clean.action.js";
5
+ import { Copy } from "../actions/copy.action.js";
6
+ import { Link } from "../actions/link.action.js";
7
+ import { Unlink } from "../actions/unlink.action.js";
8
+ import { Watch } from "../actions/watch.action.js";
9
+ export class LinkCommand extends DecohereCommand {
10
+ get actions() {
11
+ return [
12
+ Clean,
13
+ Build,
14
+ Copy,
15
+ Link,
16
+ Watch
17
+ ];
18
+ }
19
+ constructor(name){
20
+ super(name ?? "link");
21
+ this.description("Symlink workspace build outputs into a consumer project's node_modules");
22
+ this.addOption(new ConfigurationOption("link"));
23
+ this.addOption(new NoCleanOptions(true));
24
+ this.option("--build", "Run forge build concurrently after linking", false);
25
+ this.option("--no-copy", "Will not copy files like package.json to outdir", true);
26
+ this.option("--target-dir <dir>", "Path to the consumer project root");
27
+ this.option("--watch", "Watch for changes after linking", false);
28
+ }
29
+ run = async (actions, options)=>{
30
+ const responses = await auto({
31
+ clean: async ()=>await actions.clean.run(options),
32
+ link: [
33
+ "clean",
34
+ async ()=>await actions.link.run(options)
35
+ ],
36
+ build: [
37
+ "link",
38
+ async ()=>await actions.build.run(options)
39
+ ],
40
+ copy: [
41
+ "link",
42
+ async ()=>await actions.copy.run(options)
43
+ ],
44
+ watch: [
45
+ "link",
46
+ async ()=>await actions.watch.run(options)
47
+ ]
48
+ });
49
+ return CommandResponse.success(options, responses);
50
+ };
51
+ }
52
+ export class UnlinkCommand extends DecohereCommand {
53
+ get actions() {
54
+ return [
55
+ Unlink
56
+ ];
57
+ }
58
+ constructor(name, handler){
59
+ super(name ?? "unlink");
60
+ this.description("Remove workspace symlinks from a consumer project's node_modules");
61
+ this.option("--target-dir <dir>", "Path to the consumer project root");
62
+ if (handler) this.action(handler);
63
+ }
64
+ }
65
+
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9jb21tYW5kcy9saW5rLmNvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb21tYW5kSGFuZGxlciwgTWVyZ2VPcHRpb25zIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7XG5cdENvbW1hbmRSZXNwb25zZSxcblx0Q29uZmlndXJhdGlvbk9wdGlvbixcblx0RGVjb2hlcmVDb21tYW5kLFxuXHROb0NsZWFuT3B0aW9ucyxcbn0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCBhdXRvIGZyb20gXCJhc3luYy9hdXRvLmpzXCI7XG5pbXBvcnQgeyBCdWlsZCB9IGZyb20gXCIuLi9hY3Rpb25zL2J1aWxkLmFjdGlvbi5qc1wiO1xuaW1wb3J0IHsgQ2xlYW4gfSBmcm9tIFwiLi4vYWN0aW9ucy9jbGVhbi5hY3Rpb24uanNcIjtcbmltcG9ydCB7IENvcHkgfSBmcm9tIFwiLi4vYWN0aW9ucy9jb3B5LmFjdGlvbi5qc1wiO1xuaW1wb3J0IHsgTGluayB9IGZyb20gXCIuLi9hY3Rpb25zL2xpbmsuYWN0aW9uLmpzXCI7XG5pbXBvcnQgeyBVbmxpbmsgfSBmcm9tIFwiLi4vYWN0aW9ucy91bmxpbmsuYWN0aW9uLmpzXCI7XG5pbXBvcnQgeyBXYXRjaCB9IGZyb20gXCIuLi9hY3Rpb25zL3dhdGNoLmFjdGlvbi5qc1wiO1xuXG5leHBvcnQgdHlwZSBMaW5rQWN0aW9ucyA9IHsgY2xlYW46IENsZWFuOyBidWlsZDogQnVpbGQ7IGNvcHk6IENvcHk7IGxpbms6IExpbms7IHdhdGNoOiBXYXRjaCB9O1xudHlwZSBVbmxpbmtBY3Rpb25zID0geyB1bmxpbms6IFVubGluayB9O1xuXG5leHBvcnQgY2xhc3MgTGlua0NvbW1hbmQgZXh0ZW5kcyBEZWNvaGVyZUNvbW1hbmQ8TGlua0FjdGlvbnM+IHtcblx0cHVibGljIG92ZXJyaWRlIGdldCBhY3Rpb25zKCkge1xuXHRcdHJldHVybiBbQ2xlYW4sIEJ1aWxkLCBDb3B5LCBMaW5rLCBXYXRjaF07XG5cdH1cblxuXHRwdWJsaWMgY29uc3RydWN0b3IobmFtZT86IHN0cmluZykge1xuXHRcdHN1cGVyKG5hbWUgPz8gXCJsaW5rXCIpO1xuXHRcdHRoaXMuZGVzY3JpcHRpb24oXCJTeW1saW5rIHdvcmtzcGFjZSBidWlsZCBvdXRwdXRzIGludG8gYSBjb25zdW1lciBwcm9qZWN0J3Mgbm9kZV9tb2R1bGVzXCIpO1xuXHRcdHRoaXMuYWRkT3B0aW9uKG5ldyBDb25maWd1cmF0aW9uT3B0aW9uKFwibGlua1wiKSk7XG5cdFx0dGhpcy5hZGRPcHRpb24obmV3IE5vQ2xlYW5PcHRpb25zKHRydWUpKTtcblx0XHR0aGlzLm9wdGlvbihcIi0tYnVpbGRcIiwgXCJSdW4gZm9yZ2UgYnVpbGQgY29uY3VycmVudGx5IGFmdGVyIGxpbmtpbmdcIiwgZmFsc2UpO1xuXHRcdHRoaXMub3B0aW9uKFwiLS1uby1jb3B5XCIsIFwiV2lsbCBub3QgY29weSBmaWxlcyBsaWtlIHBhY2thZ2UuanNvbiB0byBvdXRkaXJcIiwgdHJ1ZSk7XG5cdFx0dGhpcy5vcHRpb24oXCItLXRhcmdldC1kaXIgPGRpcj5cIiwgXCJQYXRoIHRvIHRoZSBjb25zdW1lciBwcm9qZWN0IHJvb3RcIik7XG5cdFx0dGhpcy5vcHRpb24oXCItLXdhdGNoXCIsIFwiV2F0Y2ggZm9yIGNoYW5nZXMgYWZ0ZXIgbGlua2luZ1wiLCBmYWxzZSk7XG5cdH1cblxuXHRwdWJsaWMgcnVuID0gYXN5bmMgKFxuXHRcdGFjdGlvbnM6IExpbmtBY3Rpb25zLFxuXHRcdG9wdGlvbnM6IE1lcmdlT3B0aW9uczxMaW5rQWN0aW9ucz4sXG5cdCk6IFByb21pc2U8Q29tbWFuZFJlc3BvbnNlPExpbmtBY3Rpb25zPj4gPT4ge1xuXHRcdGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IGF1dG88TGlua0FjdGlvbnM+KHtcblx0XHRcdGNsZWFuOiBhc3luYyAoKSA9PiBhd2FpdCBhY3Rpb25zLmNsZWFuLnJ1bihvcHRpb25zKSxcblx0XHRcdGxpbms6IFtcImNsZWFuXCIsIGFzeW5jICgpID0+IGF3YWl0IGFjdGlvbnMubGluay5ydW4ob3B0aW9ucyldLFxuXHRcdFx0YnVpbGQ6IFtcImxpbmtcIiwgYXN5bmMgKCkgPT4gYXdhaXQgYWN0aW9ucy5idWlsZC5ydW4ob3B0aW9ucyldLFxuXHRcdFx0Y29weTogW1wibGlua1wiLCBhc3luYyAoKSA9PiBhd2FpdCBhY3Rpb25zLmNvcHkucnVuKG9wdGlvbnMpXSxcblx0XHRcdHdhdGNoOiBbXCJsaW5rXCIsIGFzeW5jICgpID0+IGF3YWl0IGFjdGlvbnMud2F0Y2gucnVuKG9wdGlvbnMpXSxcblx0XHR9KTtcblxuXHRcdHJldHVybiBDb21tYW5kUmVzcG9uc2Uuc3VjY2VzcyhvcHRpb25zLCByZXNwb25zZXMpO1xuXHR9O1xufVxuXG5leHBvcnQgY2xhc3MgVW5saW5rQ29tbWFuZCBleHRlbmRzIERlY29oZXJlQ29tbWFuZDxVbmxpbmtBY3Rpb25zPiB7XG5cdHB1YmxpYyBvdmVycmlkZSBnZXQgYWN0aW9ucygpIHtcblx0XHRyZXR1cm4gW1VubGlua107XG5cdH1cblxuXHRwdWJsaWMgY29uc3RydWN0b3IobmFtZT86IHN0cmluZywgaGFuZGxlcj86IENvbW1hbmRIYW5kbGVyKSB7XG5cdFx0c3VwZXIobmFtZSA/PyBcInVubGlua1wiKTtcblx0XHR0aGlzLmRlc2NyaXB0aW9uKFwiUmVtb3ZlIHdvcmtzcGFjZSBzeW1saW5rcyBmcm9tIGEgY29uc3VtZXIgcHJvamVjdCdzIG5vZGVfbW9kdWxlc1wiKTtcblx0XHR0aGlzLm9wdGlvbihcIi0tdGFyZ2V0LWRpciA8ZGlyPlwiLCBcIlBhdGggdG8gdGhlIGNvbnN1bWVyIHByb2plY3Qgcm9vdFwiKTtcblx0XHRpZiAoaGFuZGxlcikgdGhpcy5hY3Rpb24oaGFuZGxlcik7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJDb21tYW5kUmVzcG9uc2UiLCJDb25maWd1cmF0aW9uT3B0aW9uIiwiRGVjb2hlcmVDb21tYW5kIiwiTm9DbGVhbk9wdGlvbnMiLCJhdXRvIiwiQnVpbGQiLCJDbGVhbiIsIkNvcHkiLCJMaW5rIiwiVW5saW5rIiwiV2F0Y2giLCJMaW5rQ29tbWFuZCIsImFjdGlvbnMiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJhZGRPcHRpb24iLCJvcHRpb24iLCJydW4iLCJvcHRpb25zIiwicmVzcG9uc2VzIiwiY2xlYW4iLCJsaW5rIiwiYnVpbGQiLCJjb3B5Iiwid2F0Y2giLCJzdWNjZXNzIiwiVW5saW5rQ29tbWFuZCIsImhhbmRsZXIiLCJhY3Rpb24iXSwibWFwcGluZ3MiOiJBQUNBLFNBQ0NBLGVBQWUsRUFDZkMsbUJBQW1CLEVBQ25CQyxlQUFlLEVBQ2ZDLGNBQWMsUUFDUixzQkFBc0I7QUFDN0IsT0FBT0MsVUFBVSxnQkFBZ0I7QUFDakMsU0FBU0MsS0FBSyxRQUFRLDZCQUE2QjtBQUNuRCxTQUFTQyxLQUFLLFFBQVEsNkJBQTZCO0FBQ25ELFNBQVNDLElBQUksUUFBUSw0QkFBNEI7QUFDakQsU0FBU0MsSUFBSSxRQUFRLDRCQUE0QjtBQUNqRCxTQUFTQyxNQUFNLFFBQVEsOEJBQThCO0FBQ3JELFNBQVNDLEtBQUssUUFBUSw2QkFBNkI7QUFLbkQsT0FBTyxNQUFNQyxvQkFBb0JUO0lBQ2hDLElBQW9CVSxVQUFVO1FBQzdCLE9BQU87WUFBQ047WUFBT0Q7WUFBT0U7WUFBTUM7WUFBTUU7U0FBTTtJQUN6QztJQUVBLFlBQW1CRyxJQUFhLENBQUU7UUFDakMsS0FBSyxDQUFDQSxRQUFRO1FBQ2QsSUFBSSxDQUFDQyxXQUFXLENBQUM7UUFDakIsSUFBSSxDQUFDQyxTQUFTLENBQUMsSUFBSWQsb0JBQW9CO1FBQ3ZDLElBQUksQ0FBQ2MsU0FBUyxDQUFDLElBQUlaLGVBQWU7UUFDbEMsSUFBSSxDQUFDYSxNQUFNLENBQUMsV0FBVyw4Q0FBOEM7UUFDckUsSUFBSSxDQUFDQSxNQUFNLENBQUMsYUFBYSxtREFBbUQ7UUFDNUUsSUFBSSxDQUFDQSxNQUFNLENBQUMsc0JBQXNCO1FBQ2xDLElBQUksQ0FBQ0EsTUFBTSxDQUFDLFdBQVcsbUNBQW1DO0lBQzNEO0lBRU9DLE1BQU0sT0FDWkwsU0FDQU07UUFFQSxNQUFNQyxZQUFZLE1BQU1mLEtBQWtCO1lBQ3pDZ0IsT0FBTyxVQUFZLE1BQU1SLFFBQVFRLEtBQUssQ0FBQ0gsR0FBRyxDQUFDQztZQUMzQ0csTUFBTTtnQkFBQztnQkFBUyxVQUFZLE1BQU1ULFFBQVFTLElBQUksQ0FBQ0osR0FBRyxDQUFDQzthQUFTO1lBQzVESSxPQUFPO2dCQUFDO2dCQUFRLFVBQVksTUFBTVYsUUFBUVUsS0FBSyxDQUFDTCxHQUFHLENBQUNDO2FBQVM7WUFDN0RLLE1BQU07Z0JBQUM7Z0JBQVEsVUFBWSxNQUFNWCxRQUFRVyxJQUFJLENBQUNOLEdBQUcsQ0FBQ0M7YUFBUztZQUMzRE0sT0FBTztnQkFBQztnQkFBUSxVQUFZLE1BQU1aLFFBQVFZLEtBQUssQ0FBQ1AsR0FBRyxDQUFDQzthQUFTO1FBQzlEO1FBRUEsT0FBT2xCLGdCQUFnQnlCLE9BQU8sQ0FBQ1AsU0FBU0M7SUFDekMsRUFBRTtBQUNIO0FBRUEsT0FBTyxNQUFNTyxzQkFBc0J4QjtJQUNsQyxJQUFvQlUsVUFBVTtRQUM3QixPQUFPO1lBQUNIO1NBQU87SUFDaEI7SUFFQSxZQUFtQkksSUFBYSxFQUFFYyxPQUF3QixDQUFFO1FBQzNELEtBQUssQ0FBQ2QsUUFBUTtRQUNkLElBQUksQ0FBQ0MsV0FBVyxDQUFDO1FBQ2pCLElBQUksQ0FBQ0UsTUFBTSxDQUFDLHNCQUFzQjtRQUNsQyxJQUFJVyxTQUFTLElBQUksQ0FBQ0MsTUFBTSxDQUFDRDtJQUMxQjtBQUNEIn0=
@@ -0,0 +1,16 @@
1
+ import { ConfigurationOption, DecohereCommand } from "@decohere/nexus/cli";
2
+ import { TypeCheck } from "../actions/typecheck.action.js";
3
+ export class TypeCheckCommand extends DecohereCommand {
4
+ get actions() {
5
+ return [
6
+ TypeCheck
7
+ ];
8
+ }
9
+ constructor(name){
10
+ super(name);
11
+ this.description("Type-check workspace projects without emitting files");
12
+ this.addOption(new ConfigurationOption("debug"));
13
+ }
14
+ }
15
+
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9jb21tYW5kcy90eXBlY2hlY2suY29tbWFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWd1cmF0aW9uT3B0aW9uLCBEZWNvaGVyZUNvbW1hbmQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgVHlwZUNoZWNrIH0gZnJvbSBcIi4uL2FjdGlvbnMvdHlwZWNoZWNrLmFjdGlvbi5qc1wiO1xuXG5leHBvcnQgY2xhc3MgVHlwZUNoZWNrQ29tbWFuZCBleHRlbmRzIERlY29oZXJlQ29tbWFuZCB7XG5cdHB1YmxpYyBvdmVycmlkZSBnZXQgYWN0aW9ucygpIHtcblx0XHRyZXR1cm4gW1R5cGVDaGVja107XG5cdH1cblxuXHRwdWJsaWMgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIobmFtZSk7XG5cdFx0dGhpcy5kZXNjcmlwdGlvbihcIlR5cGUtY2hlY2sgd29ya3NwYWNlIHByb2plY3RzIHdpdGhvdXQgZW1pdHRpbmcgZmlsZXNcIik7XG5cdFx0dGhpcy5hZGRPcHRpb24obmV3IENvbmZpZ3VyYXRpb25PcHRpb24oXCJkZWJ1Z1wiKSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJDb25maWd1cmF0aW9uT3B0aW9uIiwiRGVjb2hlcmVDb21tYW5kIiwiVHlwZUNoZWNrIiwiVHlwZUNoZWNrQ29tbWFuZCIsImFjdGlvbnMiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJhZGRPcHRpb24iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLG1CQUFtQixFQUFFQyxlQUFlLFFBQVEsc0JBQXNCO0FBQzNFLFNBQVNDLFNBQVMsUUFBUSxpQ0FBaUM7QUFFM0QsT0FBTyxNQUFNQyx5QkFBeUJGO0lBQ3JDLElBQW9CRyxVQUFVO1FBQzdCLE9BQU87WUFBQ0Y7U0FBVTtJQUNuQjtJQUVBLFlBQW1CRyxJQUFZLENBQUU7UUFDaEMsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ0MsV0FBVyxDQUFDO1FBQ2pCLElBQUksQ0FBQ0MsU0FBUyxDQUFDLElBQUlQLG9CQUFvQjtJQUN4QztBQUNEIn0=
@@ -5,6 +5,7 @@ function _ts_decorate(decorators, target, key, desc) {
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  }
7
7
  import path from "node:path";
8
+ import { packageAliases } from "@decohere/mesh";
8
9
  import { Trace } from "@decohere/nexus/diagnostics";
9
10
  import { merge } from "@decohere/nexus/objects";
10
11
  import { ForgeError } from "../errors.js";
@@ -32,10 +33,15 @@ export class SwcConfigFactory {
32
33
  * Creates a base config for a project+target combination, without a filename.
33
34
  * Call once per (project, target) and then use createFileConfig() per file.
34
35
  */ createBaseConfig(buildTarget, configOptions) {
35
- const { userConfig, tsConfig, aliasPaths } = configOptions;
36
+ const { userConfig, tsConfig, aliasPaths, workspace, projects } = configOptions;
36
37
  const { compilerOptions } = tsConfig ?? {};
37
- const paths = aliasPaths ? compilerOptions?.paths : undefined;
38
- const baseUrl = SwcConfigFactory.getBaseUrl(tsConfig) ?? (paths != null ? path.resolve(".") : undefined);
38
+ const aliases = aliasPaths ? workspace != null ? workspace.getPackageAliases(projects?.[0]?.configuration.name ?? "debug") : projects != null && projects.length > 0 ? packageAliases.build(projects, {
39
+ baseUrl: SwcConfigFactory.getBaseUrl(tsConfig) ?? path.resolve(projects[0].rootDir),
40
+ tsconfigPaths: compilerOptions?.paths
41
+ }) : undefined : undefined;
42
+ const tsconfigOnlyPaths = aliasPaths && aliases == null ? compilerOptions?.paths : undefined;
43
+ const paths = SwcConfigFactory.nonemptyPaths(aliases?.paths ?? tsconfigOnlyPaths);
44
+ const baseUrl = aliases?.baseUrl ?? SwcConfigFactory.getBaseUrl(tsConfig) ?? (workspace != null ? path.resolve(workspace.rootDir) : undefined) ?? (paths != null ? path.resolve(".") : undefined);
39
45
  const options = {
40
46
  jsc: {
41
47
  baseUrl,
@@ -57,6 +63,10 @@ export class SwcConfigFactory {
57
63
  this.validate(config);
58
64
  return config;
59
65
  }
66
+ static nonemptyPaths(paths) {
67
+ if (paths == null || Object.keys(paths).length === 0) return undefined;
68
+ return paths;
69
+ }
60
70
  /**
61
71
  * Validates SWC options against known causes of Rust/NAPI process crashes.
62
72
  * Throws a ForgeError with a descriptive message instead of letting the
@@ -80,4 +90,4 @@ SwcConfigFactory = _ts_decorate([
80
90
  Trace
81
91
  ], SwcConfigFactory);
82
92
 
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9mYWN0b3JpZXMvc3djLWNvbmZpZy5mYWN0b3J5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgVHNjb25maWcgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB7IFRyYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9kaWFnbm9zdGljc1wiO1xuaW1wb3J0IHR5cGUgeyBGaWxlRXggfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2lvXCI7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvb2JqZWN0c1wiO1xuaW1wb3J0IHR5cGUgeyBPcHRpb25zIH0gZnJvbSBcIkBzd2MvY29yZVwiO1xuaW1wb3J0IHsgRm9yZ2VFcnJvciB9IGZyb20gXCIuLi9lcnJvcnMuanNcIjtcbmltcG9ydCB0eXBlIHsgVHJhbnNwaWxlVGFyZ2V0IH0gZnJvbSBcIi4uL3R5cGVzL2J1aWxkLXRhcmdldC50eXBlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN3Y0NvbmZpZ09wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvc3djLWNvbmZpZy50eXBlLmpzXCI7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuXHRqc2M6IHtcblx0XHRwYXJzZXI6IHtcblx0XHRcdHN5bnRheDogXCJ0eXBlc2NyaXB0XCIsXG5cdFx0XHRkZWNvcmF0b3JzOiB0cnVlLFxuXHRcdH0sXG5cdFx0dGFyZ2V0OiBcImVzbmV4dFwiLFxuXHRcdHRyYW5zZm9ybToge1xuXHRcdFx0ZGVjb3JhdG9yTWV0YWRhdGE6IHRydWUsXG5cdFx0fSxcblx0XHRleHBlcmltZW50YWw6IHsga2VlcEltcG9ydEF0dHJpYnV0ZXM6IHRydWUgfSxcblx0fSxcblx0bW9kdWxlOiB7XG5cdFx0cmVzb2x2ZUZ1bGx5OiB0cnVlLFxuXHR9LFxuXHRzb3VyY2VNYXBzOiBcImlubGluZVwiLFxufTtcblxuQFRyYWNlXG5leHBvcnQgY2xhc3MgU3djQ29uZmlnRmFjdG9yeSB7XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgYmFzZSBjb25maWcgZm9yIGEgcHJvamVjdCt0YXJnZXQgY29tYmluYXRpb24sIHdpdGhvdXQgYSBmaWxlbmFtZS5cblx0ICogQ2FsbCBvbmNlIHBlciAocHJvamVjdCwgdGFyZ2V0KSBhbmQgdGhlbiB1c2UgY3JlYXRlRmlsZUNvbmZpZygpIHBlciBmaWxlLlxuXHQgKi9cblx0cHVibGljIGNyZWF0ZUJhc2VDb25maWcoXG5cdFx0YnVpbGRUYXJnZXQ6IFRyYW5zcGlsZVRhcmdldCxcblx0XHRjb25maWdPcHRpb25zOiBTd2NDb25maWdPcHRpb25zLFxuXHQpOiBPcHRpb25zIHtcblx0XHRjb25zdCB7IHVzZXJDb25maWcsIHRzQ29uZmlnLCBhbGlhc1BhdGhzIH0gPSBjb25maWdPcHRpb25zO1xuXHRcdGNvbnN0IHsgY29tcGlsZXJPcHRpb25zIH0gPSB0c0NvbmZpZyA/PyB7fTtcblx0XHRjb25zdCBwYXRocyA9IGFsaWFzUGF0aHMgPyBjb21waWxlck9wdGlvbnM/LnBhdGhzIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGJhc2VVcmwgPVxuXHRcdFx0U3djQ29uZmlnRmFjdG9yeS5nZXRCYXNlVXJsKHRzQ29uZmlnKSA/PyAocGF0aHMgIT0gbnVsbCA/IHBhdGgucmVzb2x2ZShcIi5cIikgOiB1bmRlZmluZWQpO1xuXG5cdFx0Y29uc3Qgb3B0aW9uczogT3B0aW9ucyA9IHtcblx0XHRcdGpzYzoge1xuXHRcdFx0XHRiYXNlVXJsLFxuXHRcdFx0XHRwYXRocyxcblx0XHRcdH0sXG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0dHlwZTogYnVpbGRUYXJnZXQsXG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHRyZXR1cm4gbWVyZ2Uud2l0aE9wdGlvbnM8T3B0aW9ucz4oXG5cdFx0XHR7IG1lcmdlQXJyYXlzOiBmYWxzZSB9LFxuXHRcdFx0ZGVmYXVsdE9wdGlvbnMsXG5cdFx0XHRvcHRpb25zLFxuXHRcdFx0dXNlckNvbmZpZyA/PyB7fSxcblx0XHQpO1xuXHR9XG5cblx0LyoqIFN0YW1wcyBhIHBlci1maWxlIGZpbGVuYW1lIG9udG8gYSBwcmUtYnVpbHQgYmFzZSBjb25maWcuICovXG5cdHB1YmxpYyBjcmVhdGVGaWxlQ29uZmlnKGZpbGU6IEZpbGVFeCwgYmFzZUNvbmZpZzogT3B0aW9ucyk6IE9wdGlvbnMge1xuXHRcdGNvbnN0IGNvbmZpZyA9IHsgLi4uYmFzZUNvbmZpZywgZmlsZW5hbWU6IGZpbGUuZnVsbFBhdGggfTtcblx0XHR0aGlzLnZhbGlkYXRlKGNvbmZpZyk7XG5cdFx0cmV0dXJuIGNvbmZpZztcblx0fVxuXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZXMgU1dDIG9wdGlvbnMgYWdhaW5zdCBrbm93biBjYXVzZXMgb2YgUnVzdC9OQVBJIHByb2Nlc3MgY3Jhc2hlcy5cblx0ICogVGhyb3dzIGEgRm9yZ2VFcnJvciB3aXRoIGEgZGVzY3JpcHRpdmUgbWVzc2FnZSBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlXG5cdCAqIE5BUEkgbGF5ZXIgYWJvcnQgdGhlIHByb2Nlc3MuXG5cdCAqXG5cdCAqIEtub3duIGNyYXNoIGNhdXNlczpcblx0ICogLSBganNjLmJhc2VVcmxgIHNldCB0byBhIHJlbGF0aXZlIHBhdGggKFNXQyByZXF1aXJlcyBhbiBhYnNvbHV0ZSBwYXRoKVxuXHQgKi9cblx0cHVibGljIHZhbGlkYXRlKG9wdGlvbnM6IE9wdGlvbnMpOiB2b2lkIHtcblx0XHRjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5qc2M/LmJhc2VVcmw7XG5cdFx0aWYgKGJhc2VVcmwgIT0gbnVsbCAmJiAhcGF0aC5pc0Fic29sdXRlKGJhc2VVcmwpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRm9yZ2VFcnJvcihcblx0XHRcdFx0YFNXQyBjb25maWc6IGpzYy5iYXNlVXJsIG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aCB0byBhdm9pZCBhIHByb2Nlc3MgY3Jhc2gsIGdvdDogXCIke2Jhc2VVcmx9XCIuIFVzZSBwYXRoLnJlc29sdmUoKSB0byBjb252ZXJ0IGl0LmAsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKiBSZXNvbHZlcyB0c2NvbmZpZyBiYXNlVXJsIHRvIGFuIGFic29sdXRlIHBhdGguIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vdCBzZXQuICovXG5cdHByaXZhdGUgc3RhdGljIGdldEJhc2VVcmwodHNDb25maWc6IFRzY29uZmlnIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBiYXNlVXJsID0gdHNDb25maWc/LmNvbXBpbGVyT3B0aW9ucz8uYmFzZVVybDtcblx0XHRpZiAoYmFzZVVybCA9PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRcdHJldHVybiBwYXRoLnJlc29sdmUoYmFzZVVybCk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJwYXRoIiwiVHJhY2UiLCJtZXJnZSIsIkZvcmdlRXJyb3IiLCJkZWZhdWx0T3B0aW9ucyIsImpzYyIsInBhcnNlciIsInN5bnRheCIsImRlY29yYXRvcnMiLCJ0YXJnZXQiLCJ0cmFuc2Zvcm0iLCJkZWNvcmF0b3JNZXRhZGF0YSIsImV4cGVyaW1lbnRhbCIsImtlZXBJbXBvcnRBdHRyaWJ1dGVzIiwibW9kdWxlIiwicmVzb2x2ZUZ1bGx5Iiwic291cmNlTWFwcyIsIlN3Y0NvbmZpZ0ZhY3RvcnkiLCJjcmVhdGVCYXNlQ29uZmlnIiwiYnVpbGRUYXJnZXQiLCJjb25maWdPcHRpb25zIiwidXNlckNvbmZpZyIsInRzQ29uZmlnIiwiYWxpYXNQYXRocyIsImNvbXBpbGVyT3B0aW9ucyIsInBhdGhzIiwidW5kZWZpbmVkIiwiYmFzZVVybCIsImdldEJhc2VVcmwiLCJyZXNvbHZlIiwib3B0aW9ucyIsInR5cGUiLCJ3aXRoT3B0aW9ucyIsIm1lcmdlQXJyYXlzIiwiY3JlYXRlRmlsZUNvbmZpZyIsImZpbGUiLCJiYXNlQ29uZmlnIiwiY29uZmlnIiwiZmlsZW5hbWUiLCJmdWxsUGF0aCIsInZhbGlkYXRlIiwiaXNBYnNvbHV0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBT0EsVUFBVSxZQUFZO0FBRTdCLFNBQVNDLEtBQUssUUFBUSw4QkFBOEI7QUFFcEQsU0FBU0MsS0FBSyxRQUFRLDBCQUEwQjtBQUVoRCxTQUFTQyxVQUFVLFFBQVEsZUFBZTtBQUkxQyxNQUFNQyxpQkFBaUI7SUFDdEJDLEtBQUs7UUFDSkMsUUFBUTtZQUNQQyxRQUFRO1lBQ1JDLFlBQVk7UUFDYjtRQUNBQyxRQUFRO1FBQ1JDLFdBQVc7WUFDVkMsbUJBQW1CO1FBQ3BCO1FBQ0FDLGNBQWM7WUFBRUMsc0JBQXNCO1FBQUs7SUFDNUM7SUFDQUMsUUFBUTtRQUNQQyxjQUFjO0lBQ2Y7SUFDQUMsWUFBWTtBQUNiO0FBR0EsT0FBTyxNQUFNQztJQUNaOzs7RUFHQyxHQUNELEFBQU9DLGlCQUNOQyxXQUE0QixFQUM1QkMsYUFBK0IsRUFDckI7UUFDVixNQUFNLEVBQUVDLFVBQVUsRUFBRUMsUUFBUSxFQUFFQyxVQUFVLEVBQUUsR0FBR0g7UUFDN0MsTUFBTSxFQUFFSSxlQUFlLEVBQUUsR0FBR0YsWUFBWSxDQUFDO1FBQ3pDLE1BQU1HLFFBQVFGLGFBQWFDLGlCQUFpQkMsUUFBUUM7UUFDcEQsTUFBTUMsVUFDTFYsaUJBQWlCVyxVQUFVLENBQUNOLGFBQWNHLENBQUFBLFNBQVMsT0FBT3pCLEtBQUs2QixPQUFPLENBQUMsT0FBT0gsU0FBUTtRQUV2RixNQUFNSSxVQUFtQjtZQUN4QnpCLEtBQUs7Z0JBQ0pzQjtnQkFDQUY7WUFDRDtZQUNBWCxRQUFRO2dCQUNQaUIsTUFBTVo7WUFDUDtRQUNEO1FBRUEsT0FBT2pCLE1BQU04QixXQUFXLENBQ3ZCO1lBQUVDLGFBQWE7UUFBTSxHQUNyQjdCLGdCQUNBMEIsU0FDQVQsY0FBYyxDQUFDO0lBRWpCO0lBRUEsNkRBQTZELEdBQzdELEFBQU9hLGlCQUFpQkMsSUFBWSxFQUFFQyxVQUFtQixFQUFXO1FBQ25FLE1BQU1DLFNBQVM7WUFBRSxHQUFHRCxVQUFVO1lBQUVFLFVBQVVILEtBQUtJLFFBQVE7UUFBQztRQUN4RCxJQUFJLENBQUNDLFFBQVEsQ0FBQ0g7UUFDZCxPQUFPQTtJQUNSO0lBRUE7Ozs7Ozs7RUFPQyxHQUNELEFBQU9HLFNBQVNWLE9BQWdCLEVBQVE7UUFDdkMsTUFBTUgsVUFBVUcsUUFBUXpCLEdBQUcsRUFBRXNCO1FBQzdCLElBQUlBLFdBQVcsUUFBUSxDQUFDM0IsS0FBS3lDLFVBQVUsQ0FBQ2QsVUFBVTtZQUNqRCxNQUFNLElBQUl4QixXQUNULENBQUMsaUZBQWlGLEVBQUV3QixRQUFRLG9DQUFvQyxDQUFDO1FBRW5JO0lBQ0Q7SUFFQSxpRkFBaUYsR0FDakYsT0FBZUMsV0FBV04sUUFBOEIsRUFBc0I7UUFDN0UsTUFBTUssVUFBVUwsVUFBVUUsaUJBQWlCRztRQUMzQyxJQUFJQSxXQUFXLE1BQU0sT0FBT0Q7UUFDNUIsT0FBTzFCLEtBQUs2QixPQUFPLENBQUNGO0lBQ3JCO0FBQ0QifQ==
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9mYWN0b3JpZXMvc3djLWNvbmZpZy5mYWN0b3J5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHBhY2thZ2VBbGlhc2VzLCB0eXBlIFRzY29uZmlnIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgeyBUcmFjZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvZGlhZ25vc3RpY3NcIjtcbmltcG9ydCB0eXBlIHsgRmlsZUV4IH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pb1wiO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL29iamVjdHNcIjtcbmltcG9ydCB0eXBlIHsgT3B0aW9ucyB9IGZyb20gXCJAc3djL2NvcmVcIjtcbmltcG9ydCB7IEZvcmdlRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFRyYW5zcGlsZVRhcmdldCB9IGZyb20gXCIuLi90eXBlcy9idWlsZC10YXJnZXQudHlwZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTd2NDb25maWdPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL3N3Yy1jb25maWcudHlwZS5qc1wiO1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcblx0anNjOiB7XG5cdFx0cGFyc2VyOiB7XG5cdFx0XHRzeW50YXg6IFwidHlwZXNjcmlwdFwiLFxuXHRcdFx0ZGVjb3JhdG9yczogdHJ1ZSxcblx0XHR9LFxuXHRcdHRhcmdldDogXCJlc25leHRcIixcblx0XHR0cmFuc2Zvcm06IHtcblx0XHRcdGRlY29yYXRvck1ldGFkYXRhOiB0cnVlLFxuXHRcdH0sXG5cdFx0ZXhwZXJpbWVudGFsOiB7IGtlZXBJbXBvcnRBdHRyaWJ1dGVzOiB0cnVlIH0sXG5cdH0sXG5cdG1vZHVsZToge1xuXHRcdHJlc29sdmVGdWxseTogdHJ1ZSxcblx0fSxcblx0c291cmNlTWFwczogXCJpbmxpbmVcIixcbn07XG5cbkBUcmFjZVxuZXhwb3J0IGNsYXNzIFN3Y0NvbmZpZ0ZhY3Rvcnkge1xuXHQvKipcblx0ICogQ3JlYXRlcyBhIGJhc2UgY29uZmlnIGZvciBhIHByb2plY3QrdGFyZ2V0IGNvbWJpbmF0aW9uLCB3aXRob3V0IGEgZmlsZW5hbWUuXG5cdCAqIENhbGwgb25jZSBwZXIgKHByb2plY3QsIHRhcmdldCkgYW5kIHRoZW4gdXNlIGNyZWF0ZUZpbGVDb25maWcoKSBwZXIgZmlsZS5cblx0ICovXG5cdHB1YmxpYyBjcmVhdGVCYXNlQ29uZmlnKFxuXHRcdGJ1aWxkVGFyZ2V0OiBUcmFuc3BpbGVUYXJnZXQsXG5cdFx0Y29uZmlnT3B0aW9uczogU3djQ29uZmlnT3B0aW9ucyxcblx0KTogT3B0aW9ucyB7XG5cdFx0Y29uc3QgeyB1c2VyQ29uZmlnLCB0c0NvbmZpZywgYWxpYXNQYXRocywgd29ya3NwYWNlLCBwcm9qZWN0cyB9ID0gY29uZmlnT3B0aW9ucztcblx0XHRjb25zdCB7IGNvbXBpbGVyT3B0aW9ucyB9ID0gdHNDb25maWcgPz8ge307XG5cdFx0Y29uc3QgYWxpYXNlcyA9IGFsaWFzUGF0aHNcblx0XHRcdD8gd29ya3NwYWNlICE9IG51bGxcblx0XHRcdFx0PyB3b3Jrc3BhY2UuZ2V0UGFja2FnZUFsaWFzZXMocHJvamVjdHM/LlswXT8uY29uZmlndXJhdGlvbi5uYW1lID8/IFwiZGVidWdcIilcblx0XHRcdFx0OiBwcm9qZWN0cyAhPSBudWxsICYmIHByb2plY3RzLmxlbmd0aCA+IDBcblx0XHRcdFx0XHQ/IHBhY2thZ2VBbGlhc2VzLmJ1aWxkKHByb2plY3RzLCB7XG5cdFx0XHRcdFx0XHRcdGJhc2VVcmw6XG5cdFx0XHRcdFx0XHRcdFx0U3djQ29uZmlnRmFjdG9yeS5nZXRCYXNlVXJsKHRzQ29uZmlnKSA/PyBwYXRoLnJlc29sdmUocHJvamVjdHNbMF0ucm9vdERpciksXG5cdFx0XHRcdFx0XHRcdHRzY29uZmlnUGF0aHM6IGNvbXBpbGVyT3B0aW9ucz8ucGF0aHMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdHNjb25maWdPbmx5UGF0aHMgPVxuXHRcdFx0YWxpYXNQYXRocyAmJiBhbGlhc2VzID09IG51bGxcblx0XHRcdFx0PyAoY29tcGlsZXJPcHRpb25zPy5wYXRocyBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gfCB1bmRlZmluZWQpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBhdGhzID0gU3djQ29uZmlnRmFjdG9yeS5ub25lbXB0eVBhdGhzKGFsaWFzZXM/LnBhdGhzID8/IHRzY29uZmlnT25seVBhdGhzKTtcblx0XHRjb25zdCBiYXNlVXJsID1cblx0XHRcdGFsaWFzZXM/LmJhc2VVcmwgPz9cblx0XHRcdFN3Y0NvbmZpZ0ZhY3RvcnkuZ2V0QmFzZVVybCh0c0NvbmZpZykgPz9cblx0XHRcdCh3b3Jrc3BhY2UgIT0gbnVsbCA/IHBhdGgucmVzb2x2ZSh3b3Jrc3BhY2Uucm9vdERpcikgOiB1bmRlZmluZWQpID8/XG5cdFx0XHQocGF0aHMgIT0gbnVsbCA/IHBhdGgucmVzb2x2ZShcIi5cIikgOiB1bmRlZmluZWQpO1xuXG5cdFx0Y29uc3Qgb3B0aW9uczogT3B0aW9ucyA9IHtcblx0XHRcdGpzYzoge1xuXHRcdFx0XHRiYXNlVXJsLFxuXHRcdFx0XHRwYXRocyxcblx0XHRcdH0sXG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0dHlwZTogYnVpbGRUYXJnZXQsXG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHRyZXR1cm4gbWVyZ2Uud2l0aE9wdGlvbnM8T3B0aW9ucz4oXG5cdFx0XHR7IG1lcmdlQXJyYXlzOiBmYWxzZSB9LFxuXHRcdFx0ZGVmYXVsdE9wdGlvbnMsXG5cdFx0XHRvcHRpb25zLFxuXHRcdFx0dXNlckNvbmZpZyA/PyB7fSxcblx0XHQpO1xuXHR9XG5cblx0LyoqIFN0YW1wcyBhIHBlci1maWxlIGZpbGVuYW1lIG9udG8gYSBwcmUtYnVpbHQgYmFzZSBjb25maWcuICovXG5cdHB1YmxpYyBjcmVhdGVGaWxlQ29uZmlnKGZpbGU6IEZpbGVFeCwgYmFzZUNvbmZpZzogT3B0aW9ucyk6IE9wdGlvbnMge1xuXHRcdGNvbnN0IGNvbmZpZyA9IHsgLi4uYmFzZUNvbmZpZywgZmlsZW5hbWU6IGZpbGUuZnVsbFBhdGggfTtcblx0XHR0aGlzLnZhbGlkYXRlKGNvbmZpZyk7XG5cdFx0cmV0dXJuIGNvbmZpZztcblx0fVxuXG5cdHByaXZhdGUgc3RhdGljIG5vbmVtcHR5UGF0aHMoXG5cdFx0cGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiB8IHVuZGVmaW5lZCxcblx0KTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAocGF0aHMgPT0gbnVsbCB8fCBPYmplY3Qua2V5cyhwYXRocykubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRcdHJldHVybiBwYXRocztcblx0fVxuXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZXMgU1dDIG9wdGlvbnMgYWdhaW5zdCBrbm93biBjYXVzZXMgb2YgUnVzdC9OQVBJIHByb2Nlc3MgY3Jhc2hlcy5cblx0ICogVGhyb3dzIGEgRm9yZ2VFcnJvciB3aXRoIGEgZGVzY3JpcHRpdmUgbWVzc2FnZSBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlXG5cdCAqIE5BUEkgbGF5ZXIgYWJvcnQgdGhlIHByb2Nlc3MuXG5cdCAqXG5cdCAqIEtub3duIGNyYXNoIGNhdXNlczpcblx0ICogLSBganNjLmJhc2VVcmxgIHNldCB0byBhIHJlbGF0aXZlIHBhdGggKFNXQyByZXF1aXJlcyBhbiBhYnNvbHV0ZSBwYXRoKVxuXHQgKi9cblx0cHVibGljIHZhbGlkYXRlKG9wdGlvbnM6IE9wdGlvbnMpOiB2b2lkIHtcblx0XHRjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5qc2M/LmJhc2VVcmw7XG5cdFx0aWYgKGJhc2VVcmwgIT0gbnVsbCAmJiAhcGF0aC5pc0Fic29sdXRlKGJhc2VVcmwpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRm9yZ2VFcnJvcihcblx0XHRcdFx0YFNXQyBjb25maWc6IGpzYy5iYXNlVXJsIG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aCB0byBhdm9pZCBhIHByb2Nlc3MgY3Jhc2gsIGdvdDogXCIke2Jhc2VVcmx9XCIuIFVzZSBwYXRoLnJlc29sdmUoKSB0byBjb252ZXJ0IGl0LmAsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKiBSZXNvbHZlcyB0c2NvbmZpZyBiYXNlVXJsIHRvIGFuIGFic29sdXRlIHBhdGguIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vdCBzZXQuICovXG5cdHByaXZhdGUgc3RhdGljIGdldEJhc2VVcmwodHNDb25maWc6IFRzY29uZmlnIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBiYXNlVXJsID0gdHNDb25maWc/LmNvbXBpbGVyT3B0aW9ucz8uYmFzZVVybDtcblx0XHRpZiAoYmFzZVVybCA9PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRcdHJldHVybiBwYXRoLnJlc29sdmUoYmFzZVVybCk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJwYXRoIiwicGFja2FnZUFsaWFzZXMiLCJUcmFjZSIsIm1lcmdlIiwiRm9yZ2VFcnJvciIsImRlZmF1bHRPcHRpb25zIiwianNjIiwicGFyc2VyIiwic3ludGF4IiwiZGVjb3JhdG9ycyIsInRhcmdldCIsInRyYW5zZm9ybSIsImRlY29yYXRvck1ldGFkYXRhIiwiZXhwZXJpbWVudGFsIiwia2VlcEltcG9ydEF0dHJpYnV0ZXMiLCJtb2R1bGUiLCJyZXNvbHZlRnVsbHkiLCJzb3VyY2VNYXBzIiwiU3djQ29uZmlnRmFjdG9yeSIsImNyZWF0ZUJhc2VDb25maWciLCJidWlsZFRhcmdldCIsImNvbmZpZ09wdGlvbnMiLCJ1c2VyQ29uZmlnIiwidHNDb25maWciLCJhbGlhc1BhdGhzIiwid29ya3NwYWNlIiwicHJvamVjdHMiLCJjb21waWxlck9wdGlvbnMiLCJhbGlhc2VzIiwiZ2V0UGFja2FnZUFsaWFzZXMiLCJjb25maWd1cmF0aW9uIiwibmFtZSIsImxlbmd0aCIsImJ1aWxkIiwiYmFzZVVybCIsImdldEJhc2VVcmwiLCJyZXNvbHZlIiwicm9vdERpciIsInRzY29uZmlnUGF0aHMiLCJwYXRocyIsInVuZGVmaW5lZCIsInRzY29uZmlnT25seVBhdGhzIiwibm9uZW1wdHlQYXRocyIsIm9wdGlvbnMiLCJ0eXBlIiwid2l0aE9wdGlvbnMiLCJtZXJnZUFycmF5cyIsImNyZWF0ZUZpbGVDb25maWciLCJmaWxlIiwiYmFzZUNvbmZpZyIsImNvbmZpZyIsImZpbGVuYW1lIiwiZnVsbFBhdGgiLCJ2YWxpZGF0ZSIsIk9iamVjdCIsImtleXMiLCJpc0Fic29sdXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPQSxVQUFVLFlBQVk7QUFDN0IsU0FBU0MsY0FBYyxRQUF1QixpQkFBaUI7QUFDL0QsU0FBU0MsS0FBSyxRQUFRLDhCQUE4QjtBQUVwRCxTQUFTQyxLQUFLLFFBQVEsMEJBQTBCO0FBRWhELFNBQVNDLFVBQVUsUUFBUSxlQUFlO0FBSTFDLE1BQU1DLGlCQUFpQjtJQUN0QkMsS0FBSztRQUNKQyxRQUFRO1lBQ1BDLFFBQVE7WUFDUkMsWUFBWTtRQUNiO1FBQ0FDLFFBQVE7UUFDUkMsV0FBVztZQUNWQyxtQkFBbUI7UUFDcEI7UUFDQUMsY0FBYztZQUFFQyxzQkFBc0I7UUFBSztJQUM1QztJQUNBQyxRQUFRO1FBQ1BDLGNBQWM7SUFDZjtJQUNBQyxZQUFZO0FBQ2I7QUFHQSxPQUFPLE1BQU1DO0lBQ1o7OztFQUdDLEdBQ0QsQUFBT0MsaUJBQ05DLFdBQTRCLEVBQzVCQyxhQUErQixFQUNyQjtRQUNWLE1BQU0sRUFBRUMsVUFBVSxFQUFFQyxRQUFRLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxRQUFRLEVBQUUsR0FBR0w7UUFDbEUsTUFBTSxFQUFFTSxlQUFlLEVBQUUsR0FBR0osWUFBWSxDQUFDO1FBQ3pDLE1BQU1LLFVBQVVKLGFBQ2JDLGFBQWEsT0FDWkEsVUFBVUksaUJBQWlCLENBQUNILFVBQVUsQ0FBQyxFQUFFLEVBQUVJLGNBQWNDLFFBQVEsV0FDakVMLFlBQVksUUFBUUEsU0FBU00sTUFBTSxHQUFHLElBQ3JDL0IsZUFBZWdDLEtBQUssQ0FBQ1AsVUFBVTtZQUMvQlEsU0FDQ2hCLGlCQUFpQmlCLFVBQVUsQ0FBQ1osYUFBYXZCLEtBQUtvQyxPQUFPLENBQUNWLFFBQVEsQ0FBQyxFQUFFLENBQUNXLE9BQU87WUFDMUVDLGVBQWVYLGlCQUFpQlk7UUFDakMsS0FDQ0MsWUFDRkE7UUFDSCxNQUFNQyxvQkFDTGpCLGNBQWNJLFdBQVcsT0FDckJELGlCQUFpQlksUUFDbEJDO1FBQ0osTUFBTUQsUUFBUXJCLGlCQUFpQndCLGFBQWEsQ0FBQ2QsU0FBU1csU0FBU0U7UUFDL0QsTUFBTVAsVUFDTE4sU0FBU00sV0FDVGhCLGlCQUFpQmlCLFVBQVUsQ0FBQ1osYUFDM0JFLENBQUFBLGFBQWEsT0FBT3pCLEtBQUtvQyxPQUFPLENBQUNYLFVBQVVZLE9BQU8sSUFBSUcsU0FBUSxLQUM5REQsQ0FBQUEsU0FBUyxPQUFPdkMsS0FBS29DLE9BQU8sQ0FBQyxPQUFPSSxTQUFRO1FBRTlDLE1BQU1HLFVBQW1CO1lBQ3hCckMsS0FBSztnQkFDSjRCO2dCQUNBSztZQUNEO1lBQ0F4QixRQUFRO2dCQUNQNkIsTUFBTXhCO1lBQ1A7UUFDRDtRQUVBLE9BQU9qQixNQUFNMEMsV0FBVyxDQUN2QjtZQUFFQyxhQUFhO1FBQU0sR0FDckJ6QyxnQkFDQXNDLFNBQ0FyQixjQUFjLENBQUM7SUFFakI7SUFFQSw2REFBNkQsR0FDN0QsQUFBT3lCLGlCQUFpQkMsSUFBWSxFQUFFQyxVQUFtQixFQUFXO1FBQ25FLE1BQU1DLFNBQVM7WUFBRSxHQUFHRCxVQUFVO1lBQUVFLFVBQVVILEtBQUtJLFFBQVE7UUFBQztRQUN4RCxJQUFJLENBQUNDLFFBQVEsQ0FBQ0g7UUFDZCxPQUFPQTtJQUNSO0lBRUEsT0FBZVIsY0FDZEgsS0FBMkMsRUFDSjtRQUN2QyxJQUFJQSxTQUFTLFFBQVFlLE9BQU9DLElBQUksQ0FBQ2hCLE9BQU9QLE1BQU0sS0FBSyxHQUFHLE9BQU9RO1FBQzdELE9BQU9EO0lBQ1I7SUFFQTs7Ozs7OztFQU9DLEdBQ0QsQUFBT2MsU0FBU1YsT0FBZ0IsRUFBUTtRQUN2QyxNQUFNVCxVQUFVUyxRQUFRckMsR0FBRyxFQUFFNEI7UUFDN0IsSUFBSUEsV0FBVyxRQUFRLENBQUNsQyxLQUFLd0QsVUFBVSxDQUFDdEIsVUFBVTtZQUNqRCxNQUFNLElBQUk5QixXQUNULENBQUMsaUZBQWlGLEVBQUU4QixRQUFRLG9DQUFvQyxDQUFDO1FBRW5JO0lBQ0Q7SUFFQSxpRkFBaUYsR0FDakYsT0FBZUMsV0FBV1osUUFBOEIsRUFBc0I7UUFDN0UsTUFBTVcsVUFBVVgsVUFBVUksaUJBQWlCTztRQUMzQyxJQUFJQSxXQUFXLE1BQU0sT0FBT007UUFDNUIsT0FBT3hDLEtBQUtvQyxPQUFPLENBQUNGO0lBQ3JCO0FBQ0QifQ==