@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.
- package/commonjs/src/actions/build.action.js +9 -1
- package/commonjs/src/actions/clean.action.js +3 -3
- package/commonjs/src/actions/copy.action.js +38 -6
- package/commonjs/src/actions/docker.action.js +198 -0
- package/commonjs/src/actions/index.js +5 -1
- package/commonjs/src/actions/link.action.js +156 -0
- package/commonjs/src/actions/tag.action.js +3 -4
- package/commonjs/src/actions/typecheck.action.js +69 -0
- package/commonjs/src/actions/unlink.action.js +76 -0
- package/commonjs/src/actions/watch.action.js +2 -1
- package/commonjs/src/commands/docker.command.js +28 -0
- package/commonjs/src/commands/index.js +4 -1
- package/commonjs/src/commands/link.command.js +89 -0
- package/commonjs/src/commands/typecheck.command.js +26 -0
- package/commonjs/src/factories/swc-config.factory.js +14 -4
- package/commonjs/src/forge.module.js +12 -3
- package/commonjs/src/index.js +4 -1
- package/commonjs/src/mixins/caches-outputs.mixin.js +8 -6
- package/commonjs/src/services/swc-transpiler.js +27 -7
- package/commonjs/src/services/ts-program-host.js +3 -3
- package/commonjs/src/services/type-emission-program.js +24 -7
- package/commonjs/src/services/type-emitter.js +34 -4
- package/commonjs/src/types/swc-config.type.js +1 -1
- package/commonjs/src/types/transform-response.model.js +2 -1
- package/commonjs/src/vitest/forge-build.plugin.js +3 -2
- package/commonjs/src/workspace.config.js +29 -2
- package/es6/src/actions/build.action.js +9 -1
- package/es6/src/actions/clean.action.js +3 -3
- package/es6/src/actions/copy.action.js +38 -6
- package/es6/src/actions/docker.action.js +184 -0
- package/es6/src/actions/index.js +5 -1
- package/es6/src/actions/link.action.js +131 -0
- package/es6/src/actions/tag.action.js +3 -4
- package/es6/src/actions/typecheck.action.js +56 -0
- package/es6/src/actions/unlink.action.js +61 -0
- package/es6/src/actions/watch.action.js +2 -1
- package/es6/src/commands/docker.command.js +18 -0
- package/es6/src/commands/index.js +4 -1
- package/es6/src/commands/link.command.js +66 -0
- package/es6/src/commands/typecheck.command.js +16 -0
- package/es6/src/factories/swc-config.factory.js +14 -4
- package/es6/src/forge.module.js +12 -3
- package/es6/src/index.js +2 -2
- package/es6/src/mixins/caches-outputs.mixin.js +8 -6
- package/es6/src/services/swc-transpiler.js +27 -7
- package/es6/src/services/ts-program-host.js +3 -3
- package/es6/src/services/type-emission-program.js +24 -7
- package/es6/src/services/type-emitter.js +31 -4
- package/es6/src/types/swc-config.type.js +1 -1
- package/es6/src/types/transform-response.model.js +2 -1
- package/es6/src/vitest/forge-build.plugin.js +3 -2
- package/es6/src/workspace.config.js +30 -2
- package/package.json +5 -5
- package/types/src/actions/build.action.d.ts +1 -0
- package/types/src/actions/copy.action.d.ts +10 -0
- package/types/src/actions/docker.action.d.ts +33 -0
- package/types/src/actions/index.d.ts +4 -0
- package/types/src/actions/link.action.d.ts +25 -0
- package/types/src/actions/typecheck.action.d.ts +14 -0
- package/types/src/actions/unlink.action.d.ts +9 -0
- package/types/src/commands/docker.command.d.ts +6 -0
- package/types/src/commands/index.d.ts +3 -0
- package/types/src/commands/link.command.d.ts +28 -0
- package/types/src/commands/typecheck.command.d.ts +6 -0
- package/types/src/factories/swc-config.factory.d.ts +1 -0
- package/types/src/forge.module.d.ts +8 -0
- package/types/src/index.d.ts +1 -1
- package/types/src/services/swc-transpiler.d.ts +5 -2
- package/types/src/services/ts-program-host.d.ts +1 -1
- package/types/src/services/type-emission-program.d.ts +6 -1
- package/types/src/services/type-emitter.d.ts +14 -0
- package/types/src/types/swc-config.type.d.ts +5 -1
- package/types/src/types/transform-response.model.d.ts +2 -0
- package/types/src/workspace.config.d.ts +6 -0
|
@@ -44,6 +44,10 @@ class Build {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
run = async (options)=>{
|
|
47
|
+
if (options.build === false) {
|
|
48
|
+
this.#logger.info("Skipping build");
|
|
49
|
+
return _cli.ActionResponse.Skipped(Build.name);
|
|
50
|
+
}
|
|
47
51
|
const { configuration: buildConfig } = options;
|
|
48
52
|
const projects = this.workspace.getProjects(buildConfig);
|
|
49
53
|
void this.fileWriter.warmup([
|
|
@@ -61,6 +65,10 @@ class Build {
|
|
|
61
65
|
transformer.incrementalTransform$.subscribe((responses)=>{
|
|
62
66
|
this.fileWriter.enqueueOutputs(responses);
|
|
63
67
|
void this.writeOutput();
|
|
68
|
+
const succeeded = responses.some((r)=>r.outcome === "success");
|
|
69
|
+
if (succeeded) {
|
|
70
|
+
this.#logger.info(`Transpiled ${responses[0].file.fullPath}`);
|
|
71
|
+
}
|
|
64
72
|
});
|
|
65
73
|
}
|
|
66
74
|
}
|
|
@@ -105,4 +113,4 @@ Build = _ts_decorate([
|
|
|
105
113
|
])
|
|
106
114
|
], Build);
|
|
107
115
|
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2J1aWxkLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tIFwiQGRlY29oZXJlL2NydWNpYmxlL2RlY29yYXRvcnNcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvdXNlSW1wb3J0VHlwZTogPERJPlxuaW1wb3J0IHsgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBUcmFjZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvZGlhZ25vc3RpY3NcIjtcbmltcG9ydCB0eXBlIHsgRmlsZUV4IH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pb1wiO1xuaW1wb3J0IHsgc2NyaWJlIH0gZnJvbSBcIkBkZWNvaGVyZS9zY3JpYmVcIjtcbmltcG9ydCB7IEZvcmdlRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzLmpzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2J1aWxkLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tIFwiQGRlY29oZXJlL2NydWNpYmxlL2RlY29yYXRvcnNcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvdXNlSW1wb3J0VHlwZTogPERJPlxuaW1wb3J0IHsgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBUcmFjZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvZGlhZ25vc3RpY3NcIjtcbmltcG9ydCB0eXBlIHsgRmlsZUV4IH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pb1wiO1xuaW1wb3J0IHsgc2NyaWJlIH0gZnJvbSBcIkBkZWNvaGVyZS9zY3JpYmVcIjtcbmltcG9ydCB7IEZvcmdlRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzLmpzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBGaWxlV3JpdGVyU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9maWxlLXdyaXRlci5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFRyYW5zZm9ybVJlc3BvbnNlIH0gZnJvbSBcIi4uL3R5cGVzL3RyYW5zZm9ybS1yZXNwb25zZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgdHlwZSBUcmFuc2Zvcm1lciwgVHJhbnNmb3JtZXJLZXkgfSBmcm9tIFwiLi4vdHlwZXMvdHJhbnNmb3JtZXIudHlwZS5qc1wiO1xuXG5leHBvcnQgdHlwZSBCdWlsZE9wdGlvbnMgPSB7XG5cdGJ1aWxkPzogYm9vbGVhbjtcblx0Y29uZmlndXJhdGlvbjogc3RyaW5nO1xuXHRmaWxlOiBzdHJpbmc7XG59O1xuXG5AVHJhY2VcbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCdWlsZCBpbXBsZW1lbnRzIEFjdGlvbjxCdWlsZE9wdGlvbnM+IHtcblx0I2xvZ2dlciA9IHNjcmliZS5sb2dnZXIoQnVpbGQubmFtZSk7XG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IHdvcmtzcGFjZTogV29ya3NwYWNlLFxuXHRcdEBpbmplY3QoVHJhbnNmb3JtZXJLZXkpIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNmb3JtZXJzOiBUcmFuc2Zvcm1lcltdLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgZmlsZVdyaXRlcjogRmlsZVdyaXRlclNlcnZpY2UsXG5cdCkge1xuXHRcdGlmICghdHJhbnNmb3JtZXJzIHx8IHRyYW5zZm9ybWVycy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRocm93IG5ldyBGb3JnZUVycm9yKFwiQXQgbGVhc3Qgb25lIHRyYW5zZm9ybWVyIGlzIHJlcXVpcmVkXCIpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBydW4gPSBhc3luYyAob3B0aW9uczogQnVpbGRPcHRpb25zKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZTxUcmFuc2Zvcm1SZXNwb25zZT4+ID0+IHtcblx0XHRpZiAob3B0aW9ucy5idWlsZCA9PT0gZmFsc2UpIHtcblx0XHRcdHRoaXMuI2xvZ2dlci5pbmZvKFwiU2tpcHBpbmcgYnVpbGRcIik7XG5cdFx0XHRyZXR1cm4gQWN0aW9uUmVzcG9uc2UuU2tpcHBlZChCdWlsZC5uYW1lKSBhcyBBY3Rpb25SZXNwb25zZTxUcmFuc2Zvcm1SZXNwb25zZT47XG5cdFx0fVxuXHRcdGNvbnN0IHsgY29uZmlndXJhdGlvbjogYnVpbGRDb25maWcgfSA9IG9wdGlvbnM7XG5cdFx0Y29uc3QgcHJvamVjdHMgPSB0aGlzLndvcmtzcGFjZS5nZXRQcm9qZWN0cyhidWlsZENvbmZpZyk7XG5cdFx0dm9pZCB0aGlzLmZpbGVXcml0ZXIud2FybXVwKFsuLi5wcm9qZWN0c10pO1xuXHRcdGNvbnN0IHRyYW5zZm9ybVJlc3VsdHMgPSBhd2FpdCB0aGlzLmJ1aWxkKHByb2plY3RzKTtcblxuXHRcdGNvbnN0IGVycm9ycyA9IHRyYW5zZm9ybVJlc3VsdHMuZmlsdGVyKChyZXNwb25zZSkgPT4gcmVzcG9uc2Uub3V0Y29tZSA9PT0gXCJmYWlsdXJlXCIpO1xuXHRcdGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZXMgPSB0cmFuc2Zvcm1SZXN1bHRzLm1hcCgocmVzcG9uc2VzKSA9PiByZXNwb25zZXMubWVzc2FnZXMpLmpvaW4oXCJcXG5cIik7XG5cdFx0XHR0aHJvdyBuZXcgRm9yZ2VFcnJvcihgRXJyb3IgYnVpbGRpbmc6ICR7bWVzc2FnZXN9YCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCB0cmFuc2Zvcm1lciBvZiB0aGlzLnRyYW5zZm9ybWVycykge1xuXHRcdFx0aWYgKHRyYW5zZm9ybWVyLndhdGNoICYmIHRyYW5zZm9ybWVyLmluY3JlbWVudGFsVHJhbnNmb3JtJCkge1xuXHRcdFx0XHR0cmFuc2Zvcm1lci53YXRjaCh0aGlzLndvcmtzcGFjZSk7XG5cdFx0XHRcdHRyYW5zZm9ybWVyLmluY3JlbWVudGFsVHJhbnNmb3JtJC5zdWJzY3JpYmUoKHJlc3BvbnNlcykgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZmlsZVdyaXRlci5lbnF1ZXVlT3V0cHV0cyhyZXNwb25zZXMpO1xuXHRcdFx0XHRcdHZvaWQgdGhpcy53cml0ZU91dHB1dCgpO1xuXHRcdFx0XHRcdGNvbnN0IHN1Y2NlZWRlZCA9IHJlc3BvbnNlcy5zb21lKChyKSA9PiByLm91dGNvbWUgPT09IFwic3VjY2Vzc1wiKTtcblx0XHRcdFx0XHRpZiAoc3VjY2VlZGVkKSB7XG5cdFx0XHRcdFx0XHR0aGlzLiNsb2dnZXIuaW5mbyhgVHJhbnNwaWxlZCAke3Jlc3BvbnNlc1swXS5maWxlLmZ1bGxQYXRofWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlN1Y2Nlc3MoQnVpbGQubmFtZSwgdHJhbnNmb3JtUmVzdWx0cyk7XG5cdH07XG5cblx0cHVibGljIGFzeW5jIGJ1aWxkKFxuXHRcdHByb2plY3RBcnJheUxpa2U6IHJlYWRvbmx5IFByb2plY3RbXSB8IFByb2plY3QsXG5cdCk6IFByb21pc2U8VHJhbnNmb3JtUmVzcG9uc2VbXT4ge1xuXHRcdGNvbnN0IHByb2plY3RzOiBQcm9qZWN0W10gPSBBcnJheS5pc0FycmF5KHByb2plY3RBcnJheUxpa2UpXG5cdFx0XHQ/IHByb2plY3RBcnJheUxpa2Vcblx0XHRcdDogW3Byb2plY3RBcnJheUxpa2VdO1xuXHRcdGZvciAoY29uc3QgcHJvamVjdCBvZiBwcm9qZWN0cykge1xuXHRcdFx0dGhpcy4jbG9nZ2VyLmluZm8oYEJ1aWxkaW5nICR7cHJvamVjdC5uYW1lfWApO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5ydW5UcmFuc2Zvcm1lcnMocHJvamVjdHMpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBydW5UcmFuc2Zvcm1lcnMoXG5cdFx0cHJvamVjdHM6IFByb2plY3QgfCBQcm9qZWN0W10sXG5cdFx0ZmlsZUZpbHRlcj86IChwcm9qZWN0OiBQcm9qZWN0KSA9PiBQcm9taXNlPEZpbGVFeFtdPixcblx0KSB7XG5cdFx0Ly8gUGhhc2UgMTogc2VxdWVudGlhbCBpbml0IOKAlCBydW5zIGV4cGVuc2l2ZSBzZXR1cCAoZS5nLiBUeXBlU2NyaXB0IGNyZWF0ZVByb2dyYW0pXG5cdFx0Ly8gYmVmb3JlIGFueSB0cmFuc2Zvcm1lcidzIHBhcmFsbGVsIHdvcmtsb2FkIChlLmcuIFNXQy9SYXlvbikgc3RhcnRzLlxuXHRcdGZvciAoY29uc3QgdHJhbnNmb3JtZXIgb2YgdGhpcy50cmFuc2Zvcm1lcnMpIHtcblx0XHRcdGF3YWl0IHRyYW5zZm9ybWVyLmluaXQ/Lihwcm9qZWN0cywgZmlsZUZpbHRlcik7XG5cdFx0fVxuXHRcdC8vIFBoYXNlIDI6IHBhcmFsbGVsIHRyYW5zZm9ybSDigJQgYWxsIHRyYW5zZm9ybWVycyBydW4gY29uY3VycmVudGx5IG5vdyB0aGF0XG5cdFx0Ly8gQ1BVLWhlYXZ5IGluaXQgaXMgY29tcGxldGUuXG5cdFx0Y29uc3QgYWxsUmVzcG9uc2VzID0gKFxuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdHRoaXMudHJhbnNmb3JtZXJzLm1hcCgodCkgPT5cblx0XHRcdFx0XHR0LnRyYW5zZm9ybVByb2plY3QocHJvamVjdHMsIGZpbGVGaWx0ZXIsIChyZXNwb25zZSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5maWxlV3JpdGVyLmVucXVldWVPdXRwdXQocmVzcG9uc2UpO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHQpLFxuXHRcdFx0KVxuXHRcdCkuZmxhdCgpO1xuXHRcdGF3YWl0IHRoaXMud3JpdGVPdXRwdXQoKTtcblx0XHRyZXR1cm4gYWxsUmVzcG9uc2VzO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyB3cml0ZU91dHB1dCgpIHtcblx0XHRhd2FpdCB0aGlzLmZpbGVXcml0ZXIuZmx1c2goKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkJ1aWxkIiwic2NyaWJlIiwibG9nZ2VyIiwibmFtZSIsIndvcmtzcGFjZSIsInRyYW5zZm9ybWVycyIsImZpbGVXcml0ZXIiLCJsZW5ndGgiLCJGb3JnZUVycm9yIiwicnVuIiwib3B0aW9ucyIsImJ1aWxkIiwiaW5mbyIsIkFjdGlvblJlc3BvbnNlIiwiU2tpcHBlZCIsImNvbmZpZ3VyYXRpb24iLCJidWlsZENvbmZpZyIsInByb2plY3RzIiwiZ2V0UHJvamVjdHMiLCJ3YXJtdXAiLCJ0cmFuc2Zvcm1SZXN1bHRzIiwiZXJyb3JzIiwiZmlsdGVyIiwicmVzcG9uc2UiLCJvdXRjb21lIiwibWVzc2FnZXMiLCJtYXAiLCJyZXNwb25zZXMiLCJqb2luIiwidHJhbnNmb3JtZXIiLCJ3YXRjaCIsImluY3JlbWVudGFsVHJhbnNmb3JtJCIsInN1YnNjcmliZSIsImVucXVldWVPdXRwdXRzIiwid3JpdGVPdXRwdXQiLCJzdWNjZWVkZWQiLCJzb21lIiwiciIsImZpbGUiLCJmdWxsUGF0aCIsIlN1Y2Nlc3MiLCJwcm9qZWN0QXJyYXlMaWtlIiwiQXJyYXkiLCJpc0FycmF5IiwicHJvamVjdCIsInJ1blRyYW5zZm9ybWVycyIsImZpbGVGaWx0ZXIiLCJpbml0IiwiYWxsUmVzcG9uc2VzIiwiUHJvbWlzZSIsImFsbCIsInQiLCJ0cmFuc2Zvcm1Qcm9qZWN0IiwiZW5xdWV1ZU91dHB1dCIsImZsYXQiLCJmbHVzaCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkF1QmFBOzs7ZUFBQUE7Ozs0QkF2QnNCO3NCQUdUO3FCQUVLOzZCQUNUO3dCQUVDO3dCQUNJO21DQUVPO2lDQUVlOzs7Ozs7Ozs7Ozs7Ozs7QUFVMUMsTUFBTUE7Ozs7SUFDWixDQUFBLE1BQU8sR0FBR0MsY0FBTSxDQUFDQyxNQUFNLENBQUNGLE1BQU1HLElBQUksRUFBRTtJQUNwQyxZQUNDLEFBQWlCQyxTQUFvQixFQUNyQyxBQUF5Q0MsWUFBMkIsRUFDcEUsQUFBaUJDLFVBQTZCLENBQzdDO2FBSGdCRixZQUFBQTthQUN3QkMsZUFBQUE7YUFDeEJDLGFBQUFBO1FBRWpCLElBQUksQ0FBQ0QsZ0JBQWdCQSxhQUFhRSxNQUFNLEtBQUssR0FBRztZQUMvQyxNQUFNLElBQUlDLGtCQUFVLENBQUM7UUFDdEI7SUFDRDtJQUVPQyxNQUFNLE9BQU9DO1FBQ25CLElBQUlBLFFBQVFDLEtBQUssS0FBSyxPQUFPO1lBQzVCLElBQUksQ0FBQyxDQUFBLE1BQU8sQ0FBQ0MsSUFBSSxDQUFDO1lBQ2xCLE9BQU9DLG1CQUFjLENBQUNDLE9BQU8sQ0FBQ2QsTUFBTUcsSUFBSTtRQUN6QztRQUNBLE1BQU0sRUFBRVksZUFBZUMs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
|
|
@@ -33,8 +33,8 @@ class Clean {
|
|
|
33
33
|
this.#logger.info("Skipping clean");
|
|
34
34
|
return _cli.ActionResponse.Skipped(Clean.name);
|
|
35
35
|
}
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
const outDirs = this.workspace.getProjects(options.configuration).map((proj)=>proj.getRootOut()).filter((dir, i, arr)=>arr.indexOf(dir) === i); // dedupe
|
|
37
|
+
await Promise.all(outDirs.map(async (outDir)=>{
|
|
38
38
|
await _io.io.removeDir(outDir, {
|
|
39
39
|
force: true,
|
|
40
40
|
recursive: true
|
|
@@ -52,4 +52,4 @@ Clean = _ts_decorate([
|
|
|
52
52
|
])
|
|
53
53
|
], Clean);
|
|
54
54
|
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2NsZWFuLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2NsZWFuLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IEFjdGlvblJlc3BvbnNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IGlvIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pb1wiO1xuaW1wb3J0IHsgc2NyaWJlIH0gZnJvbSBcIkBkZWNvaGVyZS9zY3JpYmVcIjtcblxuZXhwb3J0IHR5cGUgQ2xlYW5PcHRpb25zID0ge1xuXHRjbGVhbjogYm9vbGVhbjtcblx0Y29uZmlndXJhdGlvbjogc3RyaW5nO1xufTtcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENsZWFuIGltcGxlbWVudHMgQWN0aW9uPENsZWFuT3B0aW9ucz4ge1xuXHQjbG9nZ2VyID0gc2NyaWJlLmxvZ2dlcihDbGVhbi5uYW1lKTtcblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgd29ya3NwYWNlOiBXb3Jrc3BhY2UpIHt9XG5cblx0cHVibGljIHJ1biA9IGFzeW5jIChvcHRpb25zOiBDbGVhbk9wdGlvbnMpOiBQcm9taXNlPEFjdGlvblJlc3BvbnNlPiA9PiB7XG5cdFx0aWYgKCFvcHRpb25zLmNsZWFuKSB7XG5cdFx0XHR0aGlzLiNsb2dnZXIuaW5mbyhcIlNraXBwaW5nIGNsZWFuXCIpO1xuXHRcdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlNraXBwZWQoQ2xlYW4ubmFtZSk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb3V0RGlycyA9IHRoaXMud29ya3NwYWNlXG5cdFx0XHQuZ2V0UHJvamVjdHMob3B0aW9ucy5jb25maWd1cmF0aW9uKVxuXHRcdFx0Lm1hcCgocHJvaikgPT4gcHJvai5nZXRSb290T3V0KCkpXG5cdFx0XHQuZmlsdGVyKChkaXIsIGksIGFycikgPT4gYXJyLmluZGV4T2YoZGlyKSA9PT0gaSk7IC8vIGRlZHVwZVxuXG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRvdXREaXJzLm1hcChhc3luYyAob3V0RGlyKSA9PiB7XG5cdFx0XHRcdGF3YWl0IGlvLnJlbW92ZURpcihvdXREaXIsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblx0XHRcdFx0dGhpcy4jbG9nZ2VyLnRyYWNlKGBDbGVhbmVkICR7b3V0RGlyfWApO1xuXHRcdFx0fSksXG5cdFx0KTtcblxuXHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5TdWNjZXNzKENsZWFuLm5hbWUpO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbIkNsZWFuIiwic2NyaWJlIiwibG9nZ2VyIiwibmFtZSIsIndvcmtzcGFjZSIsInJ1biIsIm9wdGlvbnMiLCJjbGVhbiIsImluZm8iLCJBY3Rpb25SZXNwb25zZSIsIlNraXBwZWQiLCJvdXREaXJzIiwiZ2V0UHJvamVjdHMiLCJjb25maWd1cmF0aW9uIiwibWFwIiwicHJvaiIsImdldFJvb3RPdXQiLCJmaWx0ZXIiLCJkaXIiLCJpIiwiYXJyIiwiaW5kZXhPZiIsIlByb21pc2UiLCJhbGwiLCJvdXREaXIiLCJpbyIsInJlbW92ZURpciIsImZvcmNlIiwicmVjdXJzaXZlIiwidHJhY2UiLCJTdWNjZXNzIl0sIm1hcHBpbmdzIjoiOzs7OytCQWNhQTs7O2VBQUFBOzs7NEJBZGM7c0JBRUQ7cUJBRUs7b0JBQ1o7d0JBQ0k7Ozs7Ozs7Ozs7QUFRaEIsTUFBTUE7O0lBQ1osQ0FBQSxNQUFPLEdBQUdDLGNBQU0sQ0FBQ0MsTUFBTSxDQUFDRixNQUFNRyxJQUFJLEVBQUU7SUFDcEMsWUFBbUIsQUFBaUJDLFNBQW9CLENBQUU7YUFBdEJBLFlBQUFBO0lBQXVCO0lBRXBEQyxNQUFNLE9BQU9DO1FBQ25CLElBQUksQ0FBQ0EsUUFBUUMsS0FBSyxFQUFFO1lBQ25CLElBQUksQ0FBQyxDQUFBLE1BQU8sQ0FBQ0MsSUFBSSxDQUFDO1lBQ2xCLE9BQU9DLG1CQUFjLENBQUNDLE9BQU8sQ0FBQ1YsTUFBTUcsSUFBSTtRQUN6QztRQUVBLE1BQU1RLFVBQVUsSUFBSSxDQUFDUCxTQUFTLENBQzVCUSxXQUFXLENBQUNOLFFBQVFPLGFBQWEsRUFDakNDLEdBQUcsQ0FBQyxDQUFDQyxPQUFTQSxLQUFLQyxVQUFVLElBQzdCQyxNQUFNLENBQUMsQ0FBQ0MsS0FBS0MsR0FBR0MsTUFBUUEsSUFBSUMsT0FBTyxDQUFDSCxTQUFTQyxJQUFJLFNBQVM7UUFFNUQsTUFBTUcsUUFBUUMsR0FBRyxDQUNoQlosUUFBUUcsR0FBRyxDQUFDLE9BQU9VO1lBQ2xCLE1BQU1DLE1BQUUsQ0FBQ0MsU0FBUyxDQUFDRixRQUFRO2dCQUFFRyxPQUFPO2dCQUFNQyxXQUFXO1lBQUs7WUFDMUQsSUFBSSxDQUFDLENBQUEsTUFBTyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUVMLFFBQVE7UUFDdkM7UUFHRCxPQUFPZixtQkFBYyxDQUFDcUIsT0FBTyxDQUFDOUIsTUFBTUcsSUFBSTtJQUN6QyxFQUFFO0FBQ0gifQ==
|
|
@@ -43,15 +43,47 @@ class Copy {
|
|
|
43
43
|
return _cli.ActionResponse.Skipped(Copy.name);
|
|
44
44
|
}
|
|
45
45
|
await Promise.all(this.workspace.getProjects(options.configuration).map(async (proj)=>{
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
const cwd = proj.projectDirectory;
|
|
47
|
+
const root = proj.getOutDir();
|
|
48
|
+
// Workspace + configuration copyFiles → package root (historic behaviour).
|
|
49
|
+
const rootFiles = await _io.io.findFiles(proj.copyFiles, {
|
|
50
|
+
cwd
|
|
50
51
|
});
|
|
51
|
-
await Promise.all(
|
|
52
|
+
await Promise.all(rootFiles.map((file)=>this.copyFileToOut(file, root)));
|
|
53
|
+
// Configuration-only globs → each pack target outDir (next to emitted JS).
|
|
54
|
+
await this.copyColocatedPackAssets(proj, cwd);
|
|
52
55
|
}));
|
|
53
56
|
return _cli.ActionResponse.Success(Copy.name);
|
|
54
57
|
};
|
|
58
|
+
/**
|
|
59
|
+
* Packed builds emit JS under `<out>/<target>/` (e.g. `es6/`). Assets listed on
|
|
60
|
+
* the *configuration* `copyFiles` (not the workspace defaults) are also copied
|
|
61
|
+
* into each target so `import.meta.url` resolves them beside that JS.
|
|
62
|
+
*
|
|
63
|
+
* Workspace `copyFiles` (e.g. `package.json`) stay root-only — nesting a
|
|
64
|
+
* package manifest under `es6/` makes `npm install --install-links` drop the
|
|
65
|
+
* parent's `es6/` tree when packing `file:` deps.
|
|
66
|
+
*/ async copyColocatedPackAssets(proj, cwd) {
|
|
67
|
+
const colocatedPatterns = proj.configuration.copyFiles ?? [];
|
|
68
|
+
if (colocatedPatterns.length === 0) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const config = proj.configuration;
|
|
72
|
+
if (!config.pack) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const targets = config.targets ?? [];
|
|
76
|
+
if (targets.length === 0) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const files = await _io.io.findFiles(colocatedPatterns, {
|
|
80
|
+
cwd
|
|
81
|
+
});
|
|
82
|
+
const targetDirs = [
|
|
83
|
+
...new Set(targets.map((target)=>proj.getOutDir(target)))
|
|
84
|
+
];
|
|
85
|
+
await Promise.all(targetDirs.flatMap((outDir)=>files.map((file)=>this.copyFileToOut(file, outDir))));
|
|
86
|
+
}
|
|
55
87
|
async copyFileToOut(file, outDir) {
|
|
56
88
|
const dest = _nodepath.default.join(outDir, file.relativePath);
|
|
57
89
|
await _io.io.copyFile(file.fullPath, dest, {
|
|
@@ -80,4 +112,4 @@ Copy = _ts_decorate([
|
|
|
80
112
|
])
|
|
81
113
|
], Copy);
|
|
82
114
|
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2NvcHkuYWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tIFwiQGRlY29oZXJlL2NydWNpYmxlL2RlY29yYXRvcnNcIjtcbi8vIGJpb21lLWlnbm9yZSBsaW50L3N0eWxlL3VzZUltcG9ydFR5cGU6IDxEST5cbmltcG9ydCB7IHR5cGUgUHJvamVjdCwgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyB0eXBlIEZpbGVFeCwgaW8gfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2lvXCI7XG5pbXBvcnQgeyByZXRyeSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvc3lzdGVtXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHR5cGUgeyBGb3JnZUNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vdHlwZXMvY29uZmlndXJhdGlvbi50eXBlLmpzXCI7XG5cbmNvbnN0IENPUFlfUkVUUllfQVRURU1QVFMgPSAzO1xuY29uc3QgQ09QWV9SRVRSWV9ERUxBWV9NUyA9IDI1O1xuXG5leHBvcnQgdHlwZSBDb3B5T3B0aW9ucyA9IHtcblx0Y29weTogYm9vbGVhbjtcblx0Y29uZmlndXJhdGlvbjogc3RyaW5nO1xufTtcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvcHkgaW1wbGVtZW50cyBBY3Rpb248Q29weU9wdGlvbnM+IHtcblx0I2xvZ2dlciA9IHNjcmliZS5sb2dnZXIoQ29weS5uYW1lKTtcblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgd29ya3NwYWNlOiBXb3Jrc3BhY2UpIHt9XG5cblx0cHVibGljIHJ1biA9IGFzeW5jIChvcHRpb25zOiBDb3B5T3B0aW9ucyk6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+ID0+IHtcblx0XHRpZiAoIW9wdGlvbnMuY29weSkge1xuXHRcdFx0dGhpcy4jbG9nZ2VyLmluZm8oXCJTa2lwcGluZyBjb3B5XCIpO1xuXHRcdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlNraXBwZWQoQ29weS5uYW1lKTtcblx0XHR9XG5cblx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdHRoaXMud29ya3NwYWNlLmdldFByb2plY3RzKG9wdGlvbnMuY29uZmlndXJhdGlvbikubWFwKGFzeW5jIChwcm9qKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGN3ZCA9IHByb2oucHJvamVjdERpcmVjdG9yeTtcblx0XHRcdFx0Y29uc3Qgcm9vdCA9IHByb2ouZ2V0T3V0RGlyKCk7XG5cblx0XHRcdFx0Ly8gV29ya3NwYWNlICsgY29uZmlndXJhdGlvbiBjb3B5RmlsZXMg4oaSIHBhY2thZ2Ugcm9vdCAoaGlzdG9yaWMgYmVoYXZpb3VyKS5cblx0XHRcdFx0Y29uc3Qgcm9vdEZpbGVzID0gYXdhaXQgaW8uZmluZEZpbGVzKHByb2ouY29weUZpbGVzLCB7IGN3ZCB9KTtcblx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwocm9vdEZpbGVzLm1hcCgoZmlsZSkgPT4gdGhpcy5jb3B5RmlsZVRvT3V0KGZpbGUsIHJvb3QpKSk7XG5cblx0XHRcdFx0Ly8gQ29uZmlndXJhdGlvbi1vbmx5IGdsb2JzIOKGkiBlYWNoIHBhY2sgdGFyZ2V0IG91dERpciAobmV4dCB0byBlbWl0dGVkIEpTKS5cblx0XHRcdFx0YXdhaXQgdGhpcy5jb3B5Q29sb2NhdGVkUGFja0Fzc2V0cyhwcm9qLCBjd2QpO1xuXHRcdFx0fSksXG5cdFx0KTtcblxuXHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5TdWNjZXNzKENvcHkubmFtZSk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFBhY2tlZCBidWlsZHMgZW1pdCBKUyB1bmRlciBgPG91dD4vPHRhcmdldD4vYCAoZS5nLiBgZXM2L2ApLiBBc3NldHMgbGlzdGVkIG9uXG5cdCAqIHRoZSAqY29uZmlndXJhdGlvbiogYGNvcHlGaWxlc2AgKG5vdCB0aGUgd29ya3NwYWNlIGRlZmF1bHRzKSBhcmUgYWxzbyBjb3BpZWRcblx0ICogaW50byBlYWNoIHRhcmdldCBzbyBgaW1wb3J0Lm1ldGEudXJsYCByZXNvbHZlcyB0aGVtIGJlc2lkZSB0aGF0IEpTLlxuXHQgKlxuXHQgKiBXb3Jrc3BhY2UgYGNvcHlGaWxlc2AgKGUuZy4gYHBhY2thZ2UuanNvbmApIHN0YXkgcm9vdC1vbmx5IOKAlCBuZXN0aW5nIGFcblx0ICogcGFja2FnZSBtYW5pZmVzdCB1bmRlciBgZXM2L2AgbWFrZXMgYG5wbSBpbnN0YWxsIC0taW5zdGFsbC1saW5rc2AgZHJvcCB0aGVcblx0ICogcGFyZW50J3MgYGVzNi9gIHRyZWUgd2hlbiBwYWNraW5nIGBmaWxlOmAgZGVwcy5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY29weUNvbG9jYXRlZFBhY2tBc3NldHMocHJvajogUHJvamVjdCwgY3dkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb2xvY2F0ZWRQYXR0ZXJucyA9IHByb2ouY29uZmlndXJhdGlvbi5jb3B5RmlsZXMgPz8gW107XG5cdFx0aWYgKGNvbG9jYXRlZFBhdHRlcm5zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbmZpZyA9IHByb2ouY29uZmlndXJhdGlvbiBhcyBGb3JnZUNvbmZpZ3VyYXRpb247XG5cdFx0aWYgKCFjb25maWcucGFjaykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldHMgPSBjb25maWcudGFyZ2V0cyA/PyBbXTtcblx0XHRpZiAodGFyZ2V0cy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBmaWxlcyA9IGF3YWl0IGlvLmZpbmRGaWxlcyhjb2xvY2F0ZWRQYXR0ZXJucywgeyBjd2QgfSk7XG5cdFx0Y29uc3QgdGFyZ2V0RGlycyA9IFsuLi5uZXcgU2V0KHRhcmdldHMubWFwKCh0YXJnZXQpID0+IHByb2ouZ2V0T3V0RGlyKHRhcmdldCkpKV07XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHR0YXJnZXREaXJzLmZsYXRNYXAoKG91dERpcikgPT4gZmlsZXMubWFwKChmaWxlKSA9PiB0aGlzLmNvcHlGaWxlVG9PdXQoZmlsZSwgb3V0RGlyKSkpLFxuXHRcdCk7XG5cdH1cblxuXHRAcmV0cnkoeyBhdHRlbXB0czogQ09QWV9SRVRSWV9BVFRFTVBUUywgZGVsYXlNczogQ09QWV9SRVRSWV9ERUxBWV9NUyB9KVxuXHRwcml2YXRlIGFzeW5jIGNvcHlGaWxlVG9PdXQoZmlsZTogRmlsZUV4LCBvdXREaXI6IHN0cmluZykge1xuXHRcdGNvbnN0IGRlc3QgPSBwYXRoLmpvaW4ob3V0RGlyLCBmaWxlLnJlbGF0aXZlUGF0aCk7XG5cdFx0YXdhaXQgaW8uY29weUZpbGUoZmlsZS5mdWxsUGF0aCwgZGVzdCwgeyBta2RpcjogdHJ1ZSB9KTtcblx0XHR0aGlzLiNsb2dnZXIudHJhY2UoYENvcGllZCAke2ZpbGUuZnVsbFBhdGh9IC0+ICR7ZGVzdH1gKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkNvcHkiLCJDT1BZX1JFVFJZX0FUVEVNUFRTIiwiQ09QWV9SRVRSWV9ERUxBWV9NUyIsInNjcmliZSIsImxvZ2dlciIsIm5hbWUiLCJ3b3Jrc3BhY2UiLCJydW4iLCJvcHRpb25zIiwiY29weSIsImluZm8iLCJBY3Rpb25SZXNwb25zZSIsIlNraXBwZWQiLCJQcm9taXNlIiwiYWxsIiwiZ2V0UHJvamVjdHMiLCJjb25maWd1cmF0aW9uIiwibWFwIiwicHJvaiIsImN3ZCIsInByb2plY3REaXJlY3RvcnkiLCJyb290IiwiZ2V0T3V0RGlyIiwicm9vdEZpbGVzIiwiaW8iLCJmaW5kRmlsZXMiLCJjb3B5RmlsZXMiLCJmaWxlIiwiY29weUZpbGVUb091dCIsImNvcHlDb2xvY2F0ZWRQYWNrQXNzZXRzIiwiU3VjY2VzcyIsImNvbG9jYXRlZFBhdHRlcm5zIiwibGVuZ3RoIiwiY29uZmlnIiwicGFjayIsInRhcmdldHMiLCJmaWxlcyIsInRhcmdldERpcnMiLCJTZXQiLCJ0YXJnZXQiLCJmbGF0TWFwIiwib3V0RGlyIiwiZGVzdCIsInBhdGgiLCJqb2luIiwicmVsYXRpdmVQYXRoIiwiY29weUZpbGUiLCJmdWxsUGF0aCIsIm1rZGlyIiwidHJhY2UiLCJhdHRlbXB0cyIsImRlbGF5TXMiXSwibWFwcGluZ3MiOiI7Ozs7K0JBb0JhQTs7O2VBQUFBOzs7aUVBcEJJOzRCQUNVO3NCQUVhO3FCQUVUO29CQUNDO3dCQUNWO3dCQUNDOzs7Ozs7Ozs7Ozs7Ozs7QUFHdkIsTUFBTUMsc0JBQXNCO0FBQzVCLE1BQU1DLHNCQUFzQjtBQVFyQixNQUFNRjs7SUFDWixDQUFBLE1BQU8sR0FBR0csY0FBTSxDQUFDQyxNQUFNLENBQUNKLEtBQUtLLElBQUksRUFBRTtJQUNuQyxZQUFtQixBQUFpQkMsU0FBb0IsQ0FBRTthQUF0QkEsWUFBQUE7SUFBdUI7SUFFcERDLE1BQU0sT0FBT0M7UUFDbkIsSUFBSSxDQUFDQSxRQUFRQyxJQUFJLEVBQUU7WUFDbEIsSUFBSSxDQUFDLENBQUEsTUFBTyxDQUFDQyxJQUFJLENBQUM7WUFDbEIsT0FBT0MsbUJBQWMsQ0FBQ0MsT0FBTyxDQUFDWixLQUFLSyxJQUFJO1FBQ3hDO1FBRUEsTUFBTVEsUUFBUUMsR0FBRyxDQUNoQixJQUFJLENBQUNSLFNBQVMsQ0FBQ1MsV0FBVyxDQUFDUCxRQUFRUSxhQUFhLEVBQUVDLEdBQUcsQ0FBQyxPQUFPQztZQUM1RCxNQUFNQyxNQUFNRCxLQUFLRSxnQkFBZ0I7WUFDakMsTUFBTUMsT0FBT0gsS0FBS0ksU0FBUztZQUUzQiwyRUFBMkU7WUFDM0UsTUFBTUMsWUFBWSxNQUFNQyxNQUFFLENBQUNDLFNBQVMsQ0FBQ1AsS0FBS1EsU0FBUyxFQUFFO2dCQUFFUDtZQUFJO1lBQzNELE1BQU1OLFFBQVFDLEdBQUcsQ0FBQ1MsVUFBVU4sR0FBRyxDQUFDLENBQUNVLE9BQVMsSUFBSSxDQUFDQyxhQUFhLENBQUNELE1BQU1OO1lBRW5FLDJFQUEyRTtZQUMzRSxNQUFNLElBQUksQ0FBQ1EsdUJBQXVCLENBQUNYLE1BQU1DO1FBQzFDO1FBR0QsT0FBT1IsbUJBQWMsQ0FBQ21CLE9BQU8sQ0FBQzlCLEtBQUtLLElBQUk7SUFDeEMsRUFBRTtJQUVGOzs7Ozs7OztFQVFDLEdBQ0QsTUFBY3dCLHdCQUF3QlgsSUFBYSxFQUFFQyxHQUFXLEVBQWlCO1FBQ2hGLE1BQU1ZLG9CQUFvQmIsS0FBS0YsYUFBYSxDQUFDVSxTQUFTLElBQUksRUFBRTtRQUM1RCxJQUFJSyxrQkFBa0JDLE1BQU0sS0FBSyxHQUFHO1lBQ25DO1FBQ0Q7UUFFQSxNQUFNQyxTQUFTZixLQUFLRixhQUFhO1FBQ2pDLElBQUksQ0FBQ2lCLE9BQU9DLElBQUksRUFBRTtZQUNqQjtRQUNEO1FBRUEsTUFBTUMsVUFBVUYsT0FBT0UsT0FBTyxJQUFJLEVBQUU7UUFDcEMsSUFBSUEsUUFBUUgsTUFBTSxLQUFLLEdBQUc7WUFDekI7UUFDRDtRQUVBLE1BQU1JLFFBQVEsTUFBTVosTUFBRSxDQUFDQyxTQUFTLENBQUNNLG1CQUFtQjtZQUFFWjtRQUFJO1FBQzFELE1BQU1rQixhQUFhO2VBQUksSUFBSUMsSUFBSUgsUUFBUWxCLEdBQUcsQ0FBQyxDQUFDc0IsU0FBV3JCLEtBQUtJLFNBQVMsQ0FBQ2lCO1NBQVU7UUFDaEYsTUFBTTFCLFFBQVFDLEdBQUcsQ0FDaEJ1QixXQUFXRyxPQUFPLENBQUMsQ0FBQ0MsU0FBV0wsTUFBTW5CLEdBQUcsQ0FBQyxDQUFDVSxPQUFTLElBQUksQ0FBQ0MsYUFBYSxDQUFDRCxNQUFNYztJQUU5RTtJQUVBLE1BQ2NiLGNBQWNELElBQVksRUFBRWMsTUFBYyxFQUFFO1FBQ3pELE1BQU1DLE9BQU9DLGlCQUFJLENBQUNDLElBQUksQ0FBQ0gsUUFBUWQsS0FBS2tCLFlBQVk7UUFDaEQsTUFBTXJCLE1BQUUsQ0FBQ3NCLFFBQVEsQ0FBQ25CLEtBQUtvQixRQUFRLEVBQUVMLE1BQU07WUFBRU0sT0FBTztRQUFLO1FBQ3JELElBQUksQ0FBQyxDQUFBLE1BQU8sQ0FBQ0MsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFdEIsS0FBS29CLFFBQVEsQ0FBQyxJQUFJLEVBQUVMLE1BQU07SUFDeEQ7QUFDRDs7O1FBTlVRLFVBQVVqRDtRQUFxQmtELFNBQVNqRCJ9
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "Docker", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return Docker;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
|
|
12
|
+
const _decorators = require("@decohere/crucible/decorators");
|
|
13
|
+
const _mesh = require("@decohere/mesh");
|
|
14
|
+
const _cli = require("@decohere/nexus/cli");
|
|
15
|
+
const _interop = require("@decohere/nexus/interop");
|
|
16
|
+
const _io = require("@decohere/nexus/io");
|
|
17
|
+
const _scribe = require("@decohere/scribe");
|
|
18
|
+
const _errors = require("../errors.js");
|
|
19
|
+
function _interop_require_default(obj) {
|
|
20
|
+
return obj && obj.__esModule ? obj : {
|
|
21
|
+
default: obj
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
25
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
26
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
27
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
28
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
29
|
+
}
|
|
30
|
+
function _ts_metadata(k, v) {
|
|
31
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
32
|
+
}
|
|
33
|
+
class Docker {
|
|
34
|
+
workspace;
|
|
35
|
+
#logger = _scribe.scribe.logger(Docker.name);
|
|
36
|
+
docker = new _interop.Docker();
|
|
37
|
+
#defaultRegistry = process.env.FORGE_DOCKER_REGISTRY?.trim() || "ghcr.io";
|
|
38
|
+
constructor(workspace){
|
|
39
|
+
this.workspace = workspace;
|
|
40
|
+
}
|
|
41
|
+
async run(options) {
|
|
42
|
+
const projects = await this.getDockerProjects(this.workspace.getProjects(options.configuration));
|
|
43
|
+
if (projects.length === 0) {
|
|
44
|
+
this.#logger.info("No projects found with a Dockerfile — nothing to dockerize");
|
|
45
|
+
return _cli.ActionResponse.Success(Docker.name, []);
|
|
46
|
+
}
|
|
47
|
+
const workspacePackageJson = await this.workspace.getPackageJson();
|
|
48
|
+
const version = await this.workspace.getVersion();
|
|
49
|
+
const responses = await Promise.all(projects.map(async (project)=>await this.buildProject(project, workspacePackageJson, version, options)));
|
|
50
|
+
const failed = responses.filter((response)=>!response.succeeded);
|
|
51
|
+
if (failed.length > 0) {
|
|
52
|
+
return _cli.ActionResponse.Error(Docker.name, responses);
|
|
53
|
+
}
|
|
54
|
+
return _cli.ActionResponse.Success(Docker.name, responses);
|
|
55
|
+
}
|
|
56
|
+
async getDockerProjects(projects) {
|
|
57
|
+
const result = [];
|
|
58
|
+
for (const project of projects){
|
|
59
|
+
const dockerfile = project.dockerConfig?.dockerfile ?? "Dockerfile";
|
|
60
|
+
const dockerfilePath = _nodepath.default.join(project.projectRoot, dockerfile);
|
|
61
|
+
if (!await _io.io.fileExists(dockerfilePath)) {
|
|
62
|
+
this.#logger.info(`Skipping ${project.name}: missing ${dockerfile}`);
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
result.push(project);
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
async buildProject(project, workspacePackageJson, version, options) {
|
|
70
|
+
const dockerConfig = project.dockerConfig ?? {};
|
|
71
|
+
const envBuildArgs = this.parseJsonEnv("FORGE_DOCKER_BUILD_ARGS_JSON", {});
|
|
72
|
+
const envSecrets = this.parseJsonEnv("FORGE_DOCKER_SECRETS_JSON", {});
|
|
73
|
+
const envTags = this.parseJsonEnv("FORGE_DOCKER_EXTRA_TAGS_JSON", []);
|
|
74
|
+
const image = dockerConfig.image ?? this.defaultImageName(project.name, workspacePackageJson);
|
|
75
|
+
const dockerfile = dockerConfig.dockerfile ?? "Dockerfile";
|
|
76
|
+
const extraTags = this.extraTagsForImage(image, [
|
|
77
|
+
...dockerConfig.tags ?? [],
|
|
78
|
+
...envTags
|
|
79
|
+
]);
|
|
80
|
+
const tags = [
|
|
81
|
+
`${image}:${version}`,
|
|
82
|
+
...extraTags
|
|
83
|
+
];
|
|
84
|
+
const buildArgs = this.interpolateBuildArgs({
|
|
85
|
+
...dockerConfig.buildArgs ?? {},
|
|
86
|
+
...envBuildArgs
|
|
87
|
+
}, version);
|
|
88
|
+
const secrets = {
|
|
89
|
+
...dockerConfig.secrets ?? {},
|
|
90
|
+
...envSecrets
|
|
91
|
+
};
|
|
92
|
+
this.#logger.info(`${options.dryRun ? "[dry-run] " : ""}Building ${project.name}`);
|
|
93
|
+
try {
|
|
94
|
+
await this.docker.build(project.projectRoot, {
|
|
95
|
+
cwd: project.projectRoot,
|
|
96
|
+
dockerfile: _nodepath.default.join(project.projectRoot, dockerfile),
|
|
97
|
+
tags,
|
|
98
|
+
buildArgs,
|
|
99
|
+
secrets
|
|
100
|
+
});
|
|
101
|
+
const shouldPush = options.push || dockerConfig.push;
|
|
102
|
+
if (shouldPush && !options.dryRun) {
|
|
103
|
+
for (const tag of tags){
|
|
104
|
+
await this.docker.push(tag, {
|
|
105
|
+
cwd: project.projectRoot
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
} else if (shouldPush && options.dryRun) {
|
|
109
|
+
this.#logger.info(`[dry-run] Skipping push for ${project.name}`);
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
projectName: project.name,
|
|
113
|
+
image,
|
|
114
|
+
tags,
|
|
115
|
+
succeeded: true,
|
|
116
|
+
message: options.dryRun ? `Built ${image} (not pushed)` : `Built ${image}`
|
|
117
|
+
};
|
|
118
|
+
} catch (reason) {
|
|
119
|
+
const message = (0, _errors.formatUnknownError)(reason);
|
|
120
|
+
return {
|
|
121
|
+
projectName: project.name,
|
|
122
|
+
image,
|
|
123
|
+
tags,
|
|
124
|
+
succeeded: false,
|
|
125
|
+
message,
|
|
126
|
+
error: `${project.name}: ${message}`
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
interpolateBuildArgs(buildArgs, version) {
|
|
131
|
+
const result = {};
|
|
132
|
+
const versionPlaceholder = "$" + "{version}";
|
|
133
|
+
for (const [key, value] of Object.entries(buildArgs ?? {})){
|
|
134
|
+
result[key] = value.split(versionPlaceholder).join(version);
|
|
135
|
+
}
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Keep FORGE_DOCKER_EXTRA_TAGS_JSON scoped to this image so multi-image
|
|
140
|
+
* publishes do not stamp create:latest onto the app Dev Container (and vice versa).
|
|
141
|
+
*/ extraTagsForImage(image, tags) {
|
|
142
|
+
const prefix = `${image}:`;
|
|
143
|
+
const seen = new Set();
|
|
144
|
+
const result = [];
|
|
145
|
+
for (const tag of tags){
|
|
146
|
+
if (tag === image || tag.startsWith(prefix)) {
|
|
147
|
+
if (!seen.has(tag)) {
|
|
148
|
+
seen.add(tag);
|
|
149
|
+
result.push(tag);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
155
|
+
defaultImageName(projectName, workspacePackageJson) {
|
|
156
|
+
const repositoryPath = process.env.FORGE_DOCKER_NAMESPACE?.trim() || workspacePackageJson.getRepositoryFullName() || this.normalizeDockerRepository(projectName);
|
|
157
|
+
const projectSlug = this.normalizeProjectSlug(projectName);
|
|
158
|
+
if (repositoryPath.includes("/") && projectSlug !== "") {
|
|
159
|
+
return `${this.#defaultRegistry}/${repositoryPath}/${projectSlug}`;
|
|
160
|
+
}
|
|
161
|
+
return `${this.#defaultRegistry}/${repositoryPath}`;
|
|
162
|
+
}
|
|
163
|
+
normalizeDockerRepository(name) {
|
|
164
|
+
const repository = name.replace(/^@/, "").split("/").map((segment)=>segment.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "")).filter(Boolean).join("/");
|
|
165
|
+
if (repository === "") {
|
|
166
|
+
throw new _errors.ForgeError(`Could not derive a Docker repository from project name "${name}"`);
|
|
167
|
+
}
|
|
168
|
+
return repository;
|
|
169
|
+
}
|
|
170
|
+
normalizeProjectSlug(name) {
|
|
171
|
+
const unscoped = name.includes("/") ? name.split("/").at(-1) ?? name : name;
|
|
172
|
+
const slug = unscoped.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
173
|
+
if (slug === "") {
|
|
174
|
+
throw new _errors.ForgeError(`Could not derive a Docker project slug from project name "${name}"`);
|
|
175
|
+
}
|
|
176
|
+
return slug;
|
|
177
|
+
}
|
|
178
|
+
parseJsonEnv(name, fallback) {
|
|
179
|
+
const value = process.env[name];
|
|
180
|
+
if (value == null || value.trim() === "") {
|
|
181
|
+
return fallback;
|
|
182
|
+
}
|
|
183
|
+
try {
|
|
184
|
+
return JSON.parse(value);
|
|
185
|
+
} catch (reason) {
|
|
186
|
+
throw new _errors.ForgeError(`Invalid JSON in ${name}: ${(0, _errors.formatUnknownError)(reason)}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
Docker = _ts_decorate([
|
|
191
|
+
(0, _decorators.injectable)(),
|
|
192
|
+
_ts_metadata("design:type", Function),
|
|
193
|
+
_ts_metadata("design:paramtypes", [
|
|
194
|
+
typeof _mesh.Workspace === "undefined" ? Object : _mesh.Workspace
|
|
195
|
+
])
|
|
196
|
+
], Docker);
|
|
197
|
+
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2RvY2tlci5hY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWNrYWdlSnNvbiwgUHJvamVjdCB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvdXNlSW1wb3J0VHlwZTogPERJPlxuaW1wb3J0IHsgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiwgUmVzdWx0U3RhdHVzIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IEFjdGlvblJlc3BvbnNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IERvY2tlciBhcyBEb2NrZXJJbnRlcm9wIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pbnRlcm9wXCI7XG5pbXBvcnQgeyBpbyB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW9cIjtcbmltcG9ydCB7IHNjcmliZSB9IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgeyBGb3JnZUVycm9yLCBmb3JtYXRVbmtub3duRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIERvY2tlck9wdGlvbnMgPSB7XG5cdGNvbmZpZ3VyYXRpb246IHN0cmluZztcblx0ZHJ5UnVuPzogYm9vbGVhbjtcblx0cHVzaD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBEb2NrZXJSZXNwb25zZSA9IFJlc3VsdFN0YXR1cyAmIHtcblx0cHJvamVjdE5hbWU6IHN0cmluZztcblx0aW1hZ2U6IHN0cmluZztcblx0dGFnczogc3RyaW5nW107XG5cdG1lc3NhZ2U6IHN0cmluZztcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEb2NrZXIgaW1wbGVtZW50cyBBY3Rpb248RG9ja2VyT3B0aW9ucz4ge1xuXHQjbG9nZ2VyID0gc2NyaWJlLmxvZ2dlcihEb2NrZXIubmFtZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgZG9ja2VyID0gbmV3IERvY2tlckludGVyb3AoKTtcblx0cmVhZG9ubHkgI2RlZmF1bHRSZWdpc3RyeSA9IHByb2Nlc3MuZW52LkZPUkdFX0RPQ0tFUl9SRUdJU1RSWT8udHJpbSgpIHx8IFwiZ2hjci5pb1wiO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHdvcmtzcGFjZTogV29ya3NwYWNlKSB7fVxuXG5cdHB1YmxpYyBhc3luYyBydW4ob3B0aW9uczogRG9ja2VyT3B0aW9ucyk6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U8RG9ja2VyUmVzcG9uc2U+PiB7XG5cdFx0Y29uc3QgcHJvamVjdHMgPSBhd2FpdCB0aGlzLmdldERvY2tlclByb2plY3RzKFxuXHRcdFx0dGhpcy53b3Jrc3BhY2UuZ2V0UHJvamVjdHMob3B0aW9ucy5jb25maWd1cmF0aW9uKSxcblx0XHQpO1xuXHRcdGlmIChwcm9qZWN0cy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuI2xvZ2dlci5pbmZvKFwiTm8gcHJvamVjdHMgZm91bmQgd2l0aCBhIERvY2tlcmZpbGUg4oCUIG5vdGhpbmcgdG8gZG9ja2VyaXplXCIpO1xuXHRcdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlN1Y2Nlc3MoRG9ja2VyLm5hbWUsIFtdKTtcblx0XHR9XG5cblx0XHRjb25zdCB3b3Jrc3BhY2VQYWNrYWdlSnNvbiA9IGF3YWl0IHRoaXMud29ya3NwYWNlLmdldFBhY2thZ2VKc29uKCk7XG5cdFx0Y29uc3QgdmVyc2lvbiA9IGF3YWl0IHRoaXMud29ya3NwYWNlLmdldFZlcnNpb24oKTtcblx0XHRjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdHByb2plY3RzLm1hcChcblx0XHRcdFx0YXN5bmMgKHByb2plY3QpID0+XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5idWlsZFByb2plY3QocHJvamVjdCwgd29ya3NwYWNlUGFja2FnZUpzb24sIHZlcnNpb24sIG9wdGlvbnMpLFxuXHRcdFx0KSxcblx0XHQpO1xuXHRcdGNvbnN0IGZhaWxlZCA9IHJlc3BvbnNlcy5maWx0ZXIoKHJlc3BvbnNlKSA9PiAhcmVzcG9uc2Uuc3VjY2VlZGVkKTtcblx0XHRpZiAoZmFpbGVkLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5FcnJvcihEb2NrZXIubmFtZSwgcmVzcG9uc2VzKTtcblx0XHR9XG5cdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlN1Y2Nlc3MoRG9ja2VyLm5hbWUsIHJlc3BvbnNlcyk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGdldERvY2tlclByb2plY3RzKHByb2plY3RzOiByZWFkb25seSBQcm9qZWN0W10pIHtcblx0XHRjb25zdCByZXN1bHQ6IFByb2plY3RbXSA9IFtdO1xuXHRcdGZvciAoY29uc3QgcHJvamVjdCBvZiBwcm9qZWN0cykge1xuXHRcdFx0Y29uc3QgZG9ja2VyZmlsZSA9IHByb2plY3QuZG9ja2VyQ29uZmlnPy5kb2NrZXJmaWxlID8/IFwiRG9ja2VyZmlsZVwiO1xuXHRcdFx0Y29uc3QgZG9ja2VyZmlsZVBhdGggPSBwYXRoLmpvaW4ocHJvamVjdC5wcm9qZWN0Um9vdCwgZG9ja2VyZmlsZSk7XG5cdFx0XHRpZiAoIShhd2FpdCBpby5maWxlRXhpc3RzKGRvY2tlcmZpbGVQYXRoKSkpIHtcblx0XHRcdFx0dGhpcy4jbG9nZ2VyLmluZm8oYFNraXBwaW5nICR7cHJvamVjdC5uYW1lfTogbWlzc2luZyAke2RvY2tlcmZpbGV9YCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXN1bHQucHVzaChwcm9qZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgYnVpbGRQcm9qZWN0KFxuXHRcdHByb2plY3Q6IFByb2plY3QsXG5cdFx0d29ya3NwYWNlUGFja2FnZUpzb246IFBhY2thZ2VKc29uLFxuXHRcdHZlcnNpb246IHN0cmluZyxcblx0XHRvcHRpb25zOiBEb2NrZXJPcHRpb25zLFxuXHQpOiBQcm9taXNlPERvY2tlclJlc3BvbnNlPiB7XG5cdFx0Y29uc3QgZG9ja2VyQ29uZmlnID0gcHJvamVjdC5kb2NrZXJDb25maWcgPz8ge307XG5cdFx0Y29uc3QgZW52QnVpbGRBcmdzID0gdGhpcy5wYXJzZUpzb25FbnY8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oXG5cdFx0XHRcIkZPUkdFX0RPQ0tFUl9CVUlMRF9BUkdTX0pTT05cIixcblx0XHRcdHt9LFxuXHRcdCk7XG5cdFx0Y29uc3QgZW52U2VjcmV0cyA9IHRoaXMucGFyc2VKc29uRW52PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KFxuXHRcdFx0XCJGT1JHRV9ET0NLRVJfU0VDUkVUU19KU09OXCIsXG5cdFx0XHR7fSxcblx0XHQpO1xuXHRcdGNvbnN0IGVudlRhZ3MgPSB0aGlzLnBhcnNlSnNvbkVudjxzdHJpbmdbXT4oXCJGT1JHRV9ET0NLRVJfRVhUUkFfVEFHU19KU09OXCIsIFtdKTtcblxuXHRcdGNvbnN0IGltYWdlID1cblx0XHRcdGRvY2tlckNvbmZpZy5pbWFnZSA/PyB0aGlzLmRlZmF1bHRJbWFnZU5hbWUocHJvamVjdC5uYW1lLCB3b3Jrc3BhY2VQYWNrYWdlSnNvbik7XG5cdFx0Y29uc3QgZG9ja2VyZmlsZSA9IGRvY2tlckNvbmZpZy5kb2NrZXJmaWxlID8/IFwiRG9ja2VyZmlsZVwiO1xuXHRcdGNvbnN0IGV4dHJhVGFncyA9IHRoaXMuZXh0cmFUYWdzRm9ySW1hZ2UoaW1hZ2UsIFtcblx0XHRcdC4uLihkb2NrZXJDb25maWcudGFncyA/PyBbXSksXG5cdFx0XHQuLi5lbnZUYWdzLFxuXHRcdF0pO1xuXHRcdGNvbnN0IHRhZ3MgPSBbYCR7aW1hZ2V9OiR7dmVyc2lvbn1gLCAuLi5leHRyYVRhZ3NdO1xuXHRcdGNvbnN0IGJ1aWxkQXJncyA9IHRoaXMuaW50ZXJwb2xhdGVCdWlsZEFyZ3MoXG5cdFx0XHR7IC4uLihkb2NrZXJDb25maWcuYnVpbGRBcmdzID8/IHt9KSwgLi4uZW52QnVpbGRBcmdzIH0sXG5cdFx0XHR2ZXJzaW9uLFxuXHRcdCk7XG5cdFx0Y29uc3Qgc2VjcmV0cyA9IHsgLi4uKGRvY2tlckNvbmZpZy5zZWNyZXRzID8/IHt9KSwgLi4uZW52U2VjcmV0cyB9O1xuXG5cdFx0dGhpcy4jbG9nZ2VyLmluZm8oYCR7b3B0aW9ucy5kcnlSdW4gPyBcIltkcnktcnVuXSBcIiA6IFwiXCJ9QnVpbGRpbmcgJHtwcm9qZWN0Lm5hbWV9YCk7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHRoaXMuZG9ja2VyLmJ1aWxkKHByb2plY3QucHJvamVjdFJvb3QsIHtcblx0XHRcdFx0Y3dkOiBwcm9qZWN0LnByb2plY3RSb290LFxuXHRcdFx0XHRkb2NrZXJmaWxlOiBwYXRoLmpvaW4ocHJvamVjdC5wcm9qZWN0Um9vdCwgZG9ja2VyZmlsZSksXG5cdFx0XHRcdHRhZ3MsXG5cdFx0XHRcdGJ1aWxkQXJncyxcblx0XHRcdFx0c2VjcmV0cyxcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBzaG91bGRQdXNoID0gb3B0aW9ucy5wdXNoIHx8IGRvY2tlckNvbmZpZy5wdXNoO1xuXHRcdFx0aWYgKHNob3VsZFB1c2ggJiYgIW9wdGlvbnMuZHJ5UnVuKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmRvY2tlci5wdXNoKHRhZywgeyBjd2Q6IHByb2plY3QucHJvamVjdFJvb3QgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoc2hvdWxkUHVzaCAmJiBvcHRpb25zLmRyeVJ1bikge1xuXHRcdFx0XHR0aGlzLiNsb2dnZXIuaW5mbyhgW2RyeS1ydW5dIFNraXBwaW5nIHB1c2ggZm9yICR7cHJvamVjdC5uYW1lfWApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRwcm9qZWN0TmFtZTogcHJvamVjdC5uYW1lLFxuXHRcdFx0XHRpbWFnZSxcblx0XHRcdFx0dGFncyxcblx0XHRcdFx0c3VjY2VlZGVkOiB0cnVlLFxuXHRcdFx0XHRtZXNzYWdlOiBvcHRpb25zLmRyeVJ1biA/IGBCdWlsdCAke2ltYWdlfSAobm90IHB1c2hlZClgIDogYEJ1aWx0ICR7aW1hZ2V9YCxcblx0XHRcdH07XG5cdFx0fSBjYXRjaCAocmVhc29uKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZm9ybWF0VW5rbm93bkVycm9yKHJlYXNvbik7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRwcm9qZWN0TmFtZTogcHJvamVjdC5uYW1lLFxuXHRcdFx0XHRpbWFnZSxcblx0XHRcdFx0dGFncyxcblx0XHRcdFx0c3VjY2VlZGVkOiBmYWxzZSxcblx0XHRcdFx0bWVzc2FnZSxcblx0XHRcdFx0ZXJyb3I6IGAke3Byb2plY3QubmFtZX06ICR7bWVzc2FnZX1gLFxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGludGVycG9sYXRlQnVpbGRBcmdzKFxuXHRcdGJ1aWxkQXJnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0XHR2ZXJzaW9uOiBzdHJpbmcsXG5cdCkge1xuXHRcdGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdGNvbnN0IHZlcnNpb25QbGFjZWhvbGRlciA9IFwiJFwiICsgXCJ7dmVyc2lvbn1cIjtcblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhidWlsZEFyZ3MgPz8ge30pKSB7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHZhbHVlLnNwbGl0KHZlcnNpb25QbGFjZWhvbGRlcikuam9pbih2ZXJzaW9uKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBLZWVwIEZPUkdFX0RPQ0tFUl9FWFRSQV9UQUdTX0pTT04gc2NvcGVkIHRvIHRoaXMgaW1hZ2Ugc28gbXVsdGktaW1hZ2Vcblx0ICogcHVibGlzaGVzIGRvIG5vdCBzdGFtcCBjcmVhdGU6bGF0ZXN0IG9udG8gdGhlIGFwcCBEZXYgQ29udGFpbmVyIChhbmQgdmljZSB2ZXJzYSkuXG5cdCAqL1xuXHRwcml2YXRlIGV4dHJhVGFnc0ZvckltYWdlKGltYWdlOiBzdHJpbmcsIHRhZ3M6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IHByZWZpeCA9IGAke2ltYWdlfTpgO1xuXHRcdGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG5cdFx0Zm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuXHRcdFx0aWYgKHRhZyA9PT0gaW1hZ2UgfHwgdGFnLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuXHRcdFx0XHRpZiAoIXNlZW4uaGFzKHRhZykpIHtcblx0XHRcdFx0XHRzZWVuLmFkZCh0YWcpO1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKHRhZyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgZGVmYXVsdEltYWdlTmFtZShwcm9qZWN0TmFtZTogc3RyaW5nLCB3b3Jrc3BhY2VQYWNrYWdlSnNvbjogUGFja2FnZUpzb24pIHtcblx0XHRjb25zdCByZXBvc2l0b3J5UGF0aCA9XG5cdFx0XHRwcm9jZXNzLmVudi5GT1JHRV9ET0NLRVJfTkFNRVNQQUNFPy50cmltKCkgfHxcblx0XHRcdHdvcmtzcGFjZVBhY2thZ2VKc29uLmdldFJlcG9zaXRvcnlGdWxsTmFtZSgpIHx8XG5cdFx0XHR0aGlzLm5vcm1hbGl6ZURvY2tlclJlcG9zaXRvcnkocHJvamVjdE5hbWUpO1xuXHRcdGNvbnN0IHByb2plY3RTbHVnID0gdGhpcy5ub3JtYWxpemVQcm9qZWN0U2x1Zyhwcm9qZWN0TmFtZSk7XG5cdFx0aWYgKHJlcG9zaXRvcnlQYXRoLmluY2x1ZGVzKFwiL1wiKSAmJiBwcm9qZWN0U2x1ZyAhPT0gXCJcIikge1xuXHRcdFx0cmV0dXJuIGAke3RoaXMuI2RlZmF1bHRSZWdpc3RyeX0vJHtyZXBvc2l0b3J5UGF0aH0vJHtwcm9qZWN0U2x1Z31gO1xuXHRcdH1cblx0XHRyZXR1cm4gYCR7dGhpcy4jZGVmYXVsdFJlZ2lzdHJ5fS8ke3JlcG9zaXRvcnlQYXRofWA7XG5cdH1cblxuXHRwcml2YXRlIG5vcm1hbGl6ZURvY2tlclJlcG9zaXRvcnkobmFtZTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgcmVwb3NpdG9yeSA9IG5hbWVcblx0XHRcdC5yZXBsYWNlKC9eQC8sIFwiXCIpXG5cdFx0XHQuc3BsaXQoXCIvXCIpXG5cdFx0XHQubWFwKChzZWdtZW50KSA9PlxuXHRcdFx0XHRzZWdtZW50XG5cdFx0XHRcdFx0LnRvTG93ZXJDYXNlKClcblx0XHRcdFx0XHQucmVwbGFjZSgvW15hLXowLTldKy9nLCBcIi1cIilcblx0XHRcdFx0XHQucmVwbGFjZSgvXi0rfC0rJC9nLCBcIlwiKSxcblx0XHRcdClcblx0XHRcdC5maWx0ZXIoQm9vbGVhbilcblx0XHRcdC5qb2luKFwiL1wiKTtcblxuXHRcdGlmIChyZXBvc2l0b3J5ID09PSBcIlwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRm9yZ2VFcnJvcihgQ291bGQgbm90IGRlcml2ZSBhIERvY2tlciByZXBvc2l0b3J5IGZyb20gcHJvamVjdCBuYW1lIFwiJHtuYW1lfVwiYCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlcG9zaXRvcnk7XG5cdH1cblxuXHRwcml2YXRlIG5vcm1hbGl6ZVByb2plY3RTbHVnKG5hbWU6IHN0cmluZykge1xuXHRcdGNvbnN0IHVuc2NvcGVkID0gbmFtZS5pbmNsdWRlcyhcIi9cIikgPyAobmFtZS5zcGxpdChcIi9cIikuYXQoLTEpID8/IG5hbWUpIDogbmFtZTtcblx0XHRjb25zdCBzbHVnID0gdW5zY29wZWRcblx0XHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0XHQucmVwbGFjZSgvW15hLXowLTldKy9nLCBcIi1cIilcblx0XHRcdC5yZXBsYWNlKC9eLSt8LSskL2csIFwiXCIpO1xuXHRcdGlmIChzbHVnID09PSBcIlwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRm9yZ2VFcnJvcihcblx0XHRcdFx0YENvdWxkIG5vdCBkZXJpdmUgYSBEb2NrZXIgcHJvamVjdCBzbHVnIGZyb20gcHJvamVjdCBuYW1lIFwiJHtuYW1lfVwiYCxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBzbHVnO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUpzb25FbnY8VD4obmFtZTogc3RyaW5nLCBmYWxsYmFjazogVCk6IFQge1xuXHRcdGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnZbbmFtZV07XG5cdFx0aWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUudHJpbSgpID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsbGJhY2s7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBKU09OLnBhcnNlKHZhbHVlKSBhcyBUO1xuXHRcdH0gY2F0Y2ggKHJlYXNvbikge1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoYEludmFsaWQgSlNPTiBpbiAke25hbWV9OiAke2Zvcm1hdFVua25vd25FcnJvcihyZWFzb24pfWApO1xuXHRcdH1cblx0fVxufVxuIl0sIm5hbWVzIjpbIkRvY2tlciIsInNjcmliZSIsImxvZ2dlciIsIm5hbWUiLCJkb2NrZXIiLCJEb2NrZXJJbnRlcm9wIiwicHJvY2VzcyIsImVudiIsIkZPUkdFX0RPQ0tFUl9SRUdJU1RSWSIsInRyaW0iLCJ3b3Jrc3BhY2UiLCJydW4iLCJvcHRpb25zIiwicHJvamVjdHMiLCJnZXREb2NrZXJQcm9qZWN0cyIsImdldFByb2plY3RzIiwiY29uZmlndXJhdGlvbiIsImxlbmd0aCIsImluZm8iLCJBY3Rpb25SZXNwb25zZSIsIlN1Y2Nlc3MiLCJ3b3Jrc3BhY2VQYWNrYWdlSnNvbiIsImdldFBhY2thZ2VKc29uIiwidmVyc2lvbiIsImdldFZlcnNpb24iLCJyZXNwb25zZXMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwicHJvamVjdCIsImJ1aWxkUHJvamVjdCIsImZhaWxlZCIsImZpbHRlciIsInJlc3BvbnNlIiwic3VjY2VlZGVkIiwiRXJyb3IiLCJyZXN1bHQiLCJkb2NrZXJmaWxlIiwiZG9ja2VyQ29uZmlnIiwiZG9ja2VyZmlsZVBhdGgiLCJwYXRoIiwiam9pbiIsInByb2plY3RSb290IiwiaW8iLCJmaWxlRXhpc3RzIiwicHVzaCIsImVudkJ1aWxkQXJncyIsInBhcnNlSnNvbkVudiIsImVudlNlY3JldHMiLCJlbnZUYWdzIiwiaW1hZ2UiLCJkZWZhdWx0SW1hZ2VOYW1lIiwiZXh0cmFUYWdzIiwiZXh0cmFUYWdzRm9ySW1hZ2UiLCJ0YWdzIiwiYnVpbGRBcmdzIiwiaW50ZXJwb2xhdGVCdWlsZEFyZ3MiLCJzZWNyZXRzIiwiZHJ5UnVuIiwiYnVpbGQiLCJjd2QiLCJzaG91bGRQdXNoIiwidGFnIiwicHJvamVjdE5hbWUiLCJtZXNzYWdlIiwicmVhc29uIiwiZm9ybWF0VW5rbm93bkVycm9yIiwiZXJyb3IiLCJ2ZXJzaW9uUGxhY2Vob2xkZXIiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJzcGxpdCIsInByZWZpeCIsInNlZW4iLCJTZXQiLCJzdGFydHNXaXRoIiwiaGFzIiwiYWRkIiwicmVwb3NpdG9yeVBhdGgiLCJGT1JHRV9ET0NLRVJfTkFNRVNQQUNFIiwiZ2V0UmVwb3NpdG9yeUZ1bGxOYW1lIiwibm9ybWFsaXplRG9ja2VyUmVwb3NpdG9yeSIsInByb2plY3RTbHVnIiwibm9ybWFsaXplUHJvamVjdFNsdWciLCJpbmNsdWRlcyIsInJlcG9zaXRvcnkiLCJyZXBsYWNlIiwic2VnbWVudCIsInRvTG93ZXJDYXNlIiwiQm9vbGVhbiIsIkZvcmdlRXJyb3Ii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
|
|
@@ -8,9 +8,13 @@ _export_star(require("./commit.action.js"), exports);
|
|
|
8
8
|
_export_star(require("./copy.action.js"), exports);
|
|
9
9
|
_export_star(require("./dependency-report.action.js"), exports);
|
|
10
10
|
_export_star(require("./dependency-sync.action.js"), exports);
|
|
11
|
+
_export_star(require("./docker.action.js"), exports);
|
|
12
|
+
_export_star(require("./link.action.js"), exports);
|
|
11
13
|
_export_star(require("./publish.action.js"), exports);
|
|
12
14
|
_export_star(require("./sync-lock-file.action.js"), exports);
|
|
13
15
|
_export_star(require("./tag.action.js"), exports);
|
|
16
|
+
_export_star(require("./typecheck.action.js"), exports);
|
|
17
|
+
_export_star(require("./unlink.action.js"), exports);
|
|
14
18
|
_export_star(require("./version.action.js"), exports);
|
|
15
19
|
_export_star(require("./watch.action.js"), exports);
|
|
16
20
|
function _export_star(from, to) {
|
|
@@ -27,4 +31,4 @@ function _export_star(from, to) {
|
|
|
27
31
|
return from;
|
|
28
32
|
}
|
|
29
33
|
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2J1aWxkLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2xlYW4uYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21taXQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb3B5LmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVwZW5kZW5jeS1yZXBvcnQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZXBlbmRlbmN5LXN5bmMuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kb2NrZXIuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saW5rLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHVibGlzaC5hY3Rpb24uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N5bmMtbG9jay1maWxlLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGFnLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZWNoZWNrLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdW5saW5rLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmVyc2lvbi5hY3Rpb24uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3dhdGNoLmFjdGlvbi5qc1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWM7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0E7cUJBQ0EifQ==
|
|
@@ -0,0 +1,156 @@
|
|
|
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 DEFAULT_LINK_CONFIGURATION () {
|
|
13
|
+
return DEFAULT_LINK_CONFIGURATION;
|
|
14
|
+
},
|
|
15
|
+
get LINK_MANIFEST () {
|
|
16
|
+
return LINK_MANIFEST;
|
|
17
|
+
},
|
|
18
|
+
get Link () {
|
|
19
|
+
return Link;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
const _promises = /*#__PURE__*/ _interop_require_default(require("node:fs/promises"));
|
|
23
|
+
const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
|
|
24
|
+
const _decorators = require("@decohere/crucible/decorators");
|
|
25
|
+
const _mesh = require("@decohere/mesh");
|
|
26
|
+
const _cli = require("@decohere/nexus/cli");
|
|
27
|
+
const _scribe = require("@decohere/scribe");
|
|
28
|
+
require("../extensions/project.extensions.js");
|
|
29
|
+
const _errors = require("../errors.js");
|
|
30
|
+
function _interop_require_default(obj) {
|
|
31
|
+
return obj && obj.__esModule ? obj : {
|
|
32
|
+
default: obj
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
36
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
37
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
38
|
+
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;
|
|
39
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
40
|
+
}
|
|
41
|
+
function _ts_metadata(k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
}
|
|
44
|
+
const LINK_MANIFEST = ".forge-link.json";
|
|
45
|
+
const DEFAULT_LINK_CONFIGURATION = "link";
|
|
46
|
+
class Link {
|
|
47
|
+
workspace;
|
|
48
|
+
#logger = _scribe.scribe.logger(Link.name);
|
|
49
|
+
constructor(workspace){
|
|
50
|
+
this.workspace = workspace;
|
|
51
|
+
}
|
|
52
|
+
run = async (options)=>{
|
|
53
|
+
const targetDir = _nodepath.default.resolve(options.targetDir);
|
|
54
|
+
const nodeModulesDir = _nodepath.default.join(targetDir, "node_modules");
|
|
55
|
+
const stat = await _promises.default.stat(nodeModulesDir).catch(()=>null);
|
|
56
|
+
if (stat == null) {
|
|
57
|
+
throw new _errors.ForgeError(`node_modules not found in "${targetDir}". Run pnpm install first.`);
|
|
58
|
+
}
|
|
59
|
+
const projects = this.workspace.getProjects(options.configuration);
|
|
60
|
+
if (projects.length === 0) {
|
|
61
|
+
throw new _errors.ForgeError(`No projects found for configuration "${options.configuration}"`);
|
|
62
|
+
}
|
|
63
|
+
// Load any existing manifest so originalPath values are preserved on re-link
|
|
64
|
+
const manifestPath = _nodepath.default.join(targetDir, LINK_MANIFEST);
|
|
65
|
+
const existingManifestText = await _promises.default.readFile(manifestPath, "utf8").catch(()=>null);
|
|
66
|
+
const existingManifest = existingManifestText != null ? JSON.parse(existingManifestText) : null;
|
|
67
|
+
const manifest = {
|
|
68
|
+
workspaceRoot: this.workspace.rootDir,
|
|
69
|
+
links: []
|
|
70
|
+
};
|
|
71
|
+
for (const project of projects){
|
|
72
|
+
const pkg = await project.getPackageJson();
|
|
73
|
+
const packageName = pkg.name;
|
|
74
|
+
if (!packageName) {
|
|
75
|
+
this.#logger.trace(`Skipping project "${project.name}" — no package name`);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
// Resolve the build output directory (no target arg — debug config is not packed)
|
|
79
|
+
const outDir = project.getOutDir();
|
|
80
|
+
const absoluteOutDir = _nodepath.default.resolve(outDir);
|
|
81
|
+
// Pre-create the output dir so the symlink is valid even before a build completes.
|
|
82
|
+
await _promises.default.mkdir(absoluteOutDir, {
|
|
83
|
+
recursive: true
|
|
84
|
+
});
|
|
85
|
+
// Compute symlink path inside target node_modules
|
|
86
|
+
const symlinkPath = _nodepath.default.join(nodeModulesDir, ...packageName.split("/"));
|
|
87
|
+
const symlinkParent = _nodepath.default.dirname(symlinkPath);
|
|
88
|
+
// Capture any existing entry so we can restore it on unlink.
|
|
89
|
+
// If a manifest already exists for this package, preserve its originalPath —
|
|
90
|
+
// the current symlink is our own and must not be treated as the original.
|
|
91
|
+
let originalPath = null;
|
|
92
|
+
const existingStat = await _promises.default.lstat(symlinkPath).catch(()=>null);
|
|
93
|
+
if (existingStat != null) {
|
|
94
|
+
const existingEntry = existingManifest?.links.find((l)=>l.packageName === packageName);
|
|
95
|
+
if (existingEntry != null) {
|
|
96
|
+
// Already linked — preserve the recorded originalPath and replace the symlink
|
|
97
|
+
originalPath = existingEntry.originalPath;
|
|
98
|
+
if (existingStat.isSymbolicLink()) {
|
|
99
|
+
await _promises.default.unlink(symlinkPath);
|
|
100
|
+
}
|
|
101
|
+
} else if (existingStat.isSymbolicLink()) {
|
|
102
|
+
originalPath = await _promises.default.readlink(symlinkPath);
|
|
103
|
+
await _promises.default.unlink(symlinkPath);
|
|
104
|
+
} else {
|
|
105
|
+
// Real directory — back it up by renaming
|
|
106
|
+
originalPath = `${symlinkPath}.__forge_backup__`;
|
|
107
|
+
await _promises.default.rename(symlinkPath, originalPath);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
await _promises.default.mkdir(symlinkParent, {
|
|
111
|
+
recursive: true
|
|
112
|
+
});
|
|
113
|
+
await _promises.default.symlink(absoluteOutDir, symlinkPath, "dir");
|
|
114
|
+
manifest.links.push({
|
|
115
|
+
packageName,
|
|
116
|
+
symlinkPath,
|
|
117
|
+
originalPath
|
|
118
|
+
});
|
|
119
|
+
this.#logger.info(`Linked ${packageName} → ${absoluteOutDir}`);
|
|
120
|
+
}
|
|
121
|
+
// Create a peer node_modules at the build output root so Node can resolve
|
|
122
|
+
// bare specifiers from the real (non-symlink) paths of linked packages.
|
|
123
|
+
if (manifest.links.length > 0) {
|
|
124
|
+
const buildRoot = _nodepath.default.resolve(projects[0].getRootOut());
|
|
125
|
+
const peerNodeModulesDir = _nodepath.default.join(buildRoot, "node_modules");
|
|
126
|
+
await _promises.default.rm(peerNodeModulesDir, {
|
|
127
|
+
recursive: true,
|
|
128
|
+
force: true
|
|
129
|
+
});
|
|
130
|
+
for (const project of projects){
|
|
131
|
+
const pkg = await project.getPackageJson();
|
|
132
|
+
if (!pkg.name) continue;
|
|
133
|
+
const outDir = _nodepath.default.resolve(project.getOutDir());
|
|
134
|
+
const peerSymlink = _nodepath.default.join(peerNodeModulesDir, ...pkg.name.split("/"));
|
|
135
|
+
await _promises.default.mkdir(_nodepath.default.dirname(peerSymlink), {
|
|
136
|
+
recursive: true
|
|
137
|
+
});
|
|
138
|
+
await _promises.default.symlink(outDir, peerSymlink, "dir");
|
|
139
|
+
this.#logger.trace(`Peer-linked ${pkg.name} → ${outDir}`);
|
|
140
|
+
}
|
|
141
|
+
manifest.peerNodeModulesDir = peerNodeModulesDir;
|
|
142
|
+
this.#logger.info(`Created peer node_modules at ${peerNodeModulesDir}`);
|
|
143
|
+
}
|
|
144
|
+
await _promises.default.writeFile(_nodepath.default.join(targetDir, LINK_MANIFEST), JSON.stringify(manifest, null, 2));
|
|
145
|
+
return _cli.ActionResponse.Success(Link.name);
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
Link = _ts_decorate([
|
|
149
|
+
(0, _decorators.injectable)(),
|
|
150
|
+
_ts_metadata("design:type", Function),
|
|
151
|
+
_ts_metadata("design:paramtypes", [
|
|
152
|
+
typeof _mesh.Workspace === "undefined" ? Object : _mesh.Workspace
|
|
153
|
+
])
|
|
154
|
+
], Link);
|
|
155
|
+
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2xpbmsuYWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvdXNlSW1wb3J0VHlwZTogPERJPlxuaW1wb3J0IHsgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IFwiLi4vZXh0ZW5zaW9ucy9wcm9qZWN0LmV4dGVuc2lvbnMuanNcIjtcbmltcG9ydCB7IEZvcmdlRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBMSU5LX01BTklGRVNUID0gXCIuZm9yZ2UtbGluay5qc29uXCI7XG5cbmV4cG9ydCB0eXBlIExpbmtPcHRpb25zID0ge1xuXHRjb25maWd1cmF0aW9uOiBzdHJpbmc7XG5cdHRhcmdldERpcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElOS19DT05GSUdVUkFUSU9OID0gXCJsaW5rXCI7XG5cbmV4cG9ydCB0eXBlIExpbmtNYW5pZmVzdCA9IHtcblx0d29ya3NwYWNlUm9vdDogc3RyaW5nO1xuXHRwZWVyTm9kZU1vZHVsZXNEaXI/OiBzdHJpbmc7XG5cdGxpbmtzOiBBcnJheTx7IHBhY2thZ2VOYW1lOiBzdHJpbmc7IHN5bWxpbmtQYXRoOiBzdHJpbmc7IG9yaWdpbmFsUGF0aDogc3RyaW5nIHwgbnVsbCB9Pjtcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMaW5rIGltcGxlbWVudHMgQWN0aW9uPExpbmtPcHRpb25zPiB7XG5cdCNsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKExpbmsubmFtZSk7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgd29ya3NwYWNlOiBXb3Jrc3BhY2UpIHt9XG5cblx0cHVibGljIHJ1biA9IGFzeW5jIChvcHRpb25zOiBMaW5rT3B0aW9ucyk6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+ID0+IHtcblx0XHRjb25zdCB0YXJnZXREaXIgPSBwYXRoLnJlc29sdmUob3B0aW9ucy50YXJnZXREaXIpO1xuXHRcdGNvbnN0IG5vZGVNb2R1bGVzRGlyID0gcGF0aC5qb2luKHRhcmdldERpciwgXCJub2RlX21vZHVsZXNcIik7XG5cblx0XHRjb25zdCBzdGF0ID0gYXdhaXQgZnMuc3RhdChub2RlTW9kdWxlc0RpcikuY2F0Y2goKCkgPT4gbnVsbCk7XG5cdFx0aWYgKHN0YXQgPT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoXG5cdFx0XHRcdGBub2RlX21vZHVsZXMgbm90IGZvdW5kIGluIFwiJHt0YXJnZXREaXJ9XCIuIFJ1biBwbnBtIGluc3RhbGwgZmlyc3QuYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcHJvamVjdHMgPSB0aGlzLndvcmtzcGFjZS5nZXRQcm9qZWN0cyhvcHRpb25zLmNvbmZpZ3VyYXRpb24pO1xuXHRcdGlmIChwcm9qZWN0cy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRocm93IG5ldyBGb3JnZUVycm9yKGBObyBwcm9qZWN0cyBmb3VuZCBmb3IgY29uZmlndXJhdGlvbiBcIiR7b3B0aW9ucy5jb25maWd1cmF0aW9ufVwiYCk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9hZCBhbnkgZXhpc3RpbmcgbWFuaWZlc3Qgc28gb3JpZ2luYWxQYXRoIHZhbHVlcyBhcmUgcHJlc2VydmVkIG9uIHJlLWxpbmtcblx0XHRjb25zdCBtYW5pZmVzdFBhdGggPSBwYXRoLmpvaW4odGFyZ2V0RGlyLCBMSU5LX01BTklGRVNUKTtcblx0XHRjb25zdCBleGlzdGluZ01hbmlmZXN0VGV4dCA9IGF3YWl0IGZzLnJlYWRGaWxlKG1hbmlmZXN0UGF0aCwgXCJ1dGY4XCIpLmNhdGNoKCgpID0+IG51bGwpO1xuXHRcdGNvbnN0IGV4aXN0aW5nTWFuaWZlc3Q6IExpbmtNYW5pZmVzdCB8IG51bGwgPVxuXHRcdFx0ZXhpc3RpbmdNYW5pZmVzdFRleHQgIT0gbnVsbCA/IEpTT04ucGFyc2UoZXhpc3RpbmdNYW5pZmVzdFRleHQpIDogbnVsbDtcblxuXHRcdGNvbnN0IG1hbmlmZXN0OiBMaW5rTWFuaWZlc3QgPSB7XG5cdFx0XHR3b3Jrc3BhY2VSb290OiB0aGlzLndvcmtzcGFjZS5yb290RGlyLFxuXHRcdFx0bGlua3M6IFtdLFxuXHRcdH07XG5cblx0XHRmb3IgKGNvbnN0IHByb2plY3Qgb2YgcHJvamVjdHMpIHtcblx0XHRcdGNvbnN0IHBrZyA9IGF3YWl0IHByb2plY3QuZ2V0UGFja2FnZUpzb24oKTtcblx0XHRcdGNvbnN0IHBhY2thZ2VOYW1lID0gcGtnLm5hbWU7XG5cdFx0XHRpZiAoIXBhY2thZ2VOYW1lKSB7XG5cdFx0XHRcdHRoaXMuI2xvZ2dlci50cmFjZShgU2tpcHBpbmcgcHJvamVjdCBcIiR7cHJvamVjdC5uYW1lfVwiIOKAlCBubyBwYWNrYWdlIG5hbWVgKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlc29sdmUgdGhlIGJ1aWxkIG91dHB1dCBkaXJlY3RvcnkgKG5vIHRhcmdldCBhcmcg4oCUIGRlYnVnIGNvbmZpZyBpcyBub3QgcGFja2VkKVxuXHRcdFx0Y29uc3Qgb3V0RGlyID0gcHJvamVjdC5nZXRPdXREaXIoKTtcblx0XHRcdGNvbnN0IGFic29sdXRlT3V0RGlyID0gcGF0aC5yZXNvbHZlKG91dERpcik7XG5cblx0XHRcdC8vIFByZS1jcmVhdGUgdGhlIG91dHB1dCBkaXIgc28gdGhlIHN5bWxpbmsgaXMgdmFsaWQgZXZlbiBiZWZvcmUgYSBidWlsZCBjb21wbGV0ZXMuXG5cdFx0XHRhd2FpdCBmcy5ta2RpcihhYnNvbHV0ZU91dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0XHRcdC8vIENvbXB1dGUgc3ltbGluayBwYXRoIGluc2lkZSB0YXJnZXQgbm9kZV9tb2R1bGVzXG5cdFx0XHRjb25zdCBzeW1saW5rUGF0aCA9IHBhdGguam9pbihub2RlTW9kdWxlc0RpciwgLi4ucGFja2FnZU5hbWUuc3BsaXQoXCIvXCIpKTtcblx0XHRcdGNvbnN0IHN5bWxpbmtQYXJlbnQgPSBwYXRoLmRpcm5hbWUoc3ltbGlua1BhdGgpO1xuXG5cdFx0XHQvLyBDYXB0dXJlIGFueSBleGlzdGluZyBlbnRyeSBzbyB3ZSBjYW4gcmVzdG9yZSBpdCBvbiB1bmxpbmsuXG5cdFx0XHQvLyBJZiBhIG1hbmlmZXN0IGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIHBhY2thZ2UsIHByZXNlcnZlIGl0cyBvcmlnaW5hbFBhdGgg4oCUXG5cdFx0XHQvLyB0aGUgY3VycmVudCBzeW1saW5rIGlzIG91ciBvd24gYW5kIG11c3Qgbm90IGJlIHRyZWF0ZWQgYXMgdGhlIG9yaWdpbmFsLlxuXHRcdFx0bGV0IG9yaWdpbmFsUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRjb25zdCBleGlzdGluZ1N0YXQgPSBhd2FpdCBmcy5sc3RhdChzeW1saW5rUGF0aCkuY2F0Y2goKCkgPT4gbnVsbCk7XG5cdFx0XHRpZiAoZXhpc3RpbmdTdGF0ICE9IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdFbnRyeSA9IGV4aXN0aW5nTWFuaWZlc3Q/LmxpbmtzLmZpbmQoXG5cdFx0XHRcdFx0KGwpID0+IGwucGFja2FnZU5hbWUgPT09IHBhY2thZ2VOYW1lLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoZXhpc3RpbmdFbnRyeSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Ly8gQWxyZWFkeSBsaW5rZWQg4oCUIHByZXNlcnZlIHRoZSByZWNvcmRlZCBvcmlnaW5hbFBhdGggYW5kIHJlcGxhY2UgdGhlIHN5bWxpbmtcblx0XHRcdFx0XHRvcmlnaW5hbFBhdGggPSBleGlzdGluZ0VudHJ5Lm9yaWdpbmFsUGF0aDtcblx0XHRcdFx0XHRpZiAoZXhpc3RpbmdTdGF0LmlzU3ltYm9saWNMaW5rKCkpIHtcblx0XHRcdFx0XHRcdGF3YWl0IGZzLnVubGluayhzeW1saW5rUGF0aCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGV4aXN0aW5nU3RhdC5pc1N5bWJvbGljTGluaygpKSB7XG5cdFx0XHRcdFx0b3JpZ2luYWxQYXRoID0gYXdhaXQgZnMucmVhZGxpbmsoc3ltbGlua1BhdGgpO1xuXHRcdFx0XHRcdGF3YWl0IGZzLnVubGluayhzeW1saW5rUGF0aCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gUmVhbCBkaXJlY3Rvcnkg4oCUIGJhY2sgaXQgdXAgYnkgcmVuYW1pbmdcblx0XHRcdFx0XHRvcmlnaW5hbFBhdGggPSBgJHtzeW1saW5rUGF0aH0uX19mb3JnZV9iYWNrdXBfX2A7XG5cdFx0XHRcdFx0YXdhaXQgZnMucmVuYW1lKHN5bWxpbmtQYXRoLCBvcmlnaW5hbFBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IGZzLm1rZGlyKHN5bWxpbmtQYXJlbnQsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHRcdFx0YXdhaXQgZnMuc3ltbGluayhhYnNvbHV0ZU91dERpciwgc3ltbGlua1BhdGgsIFwiZGlyXCIpO1xuXG5cdFx0XHRtYW5pZmVzdC5saW5rcy5wdXNoKHsgcGFja2FnZU5hbWUsIHN5bWxpbmtQYXRoLCBvcmlnaW5hbFBhdGggfSk7XG5cdFx0XHR0aGlzLiNsb2dnZXIuaW5mbyhgTGlua2VkICR7cGFja2FnZU5hbWV9IOKGkiAke2Fic29sdXRlT3V0RGlyfWApO1xuXHRcdH1cblxuXHRcdC8vIENyZWF0ZSBhIHBlZXIgbm9kZV9tb2R1bGVzIGF0IHRoZSBidWlsZCBvdXRwdXQgcm9vdCBzbyBOb2RlIGNhbiByZXNvbHZlXG5cdFx0Ly8gYmFyZSBzcGVjaWZpZXJzIGZyb20gdGhlIHJlYWwgKG5vbi1zeW1saW5rKSBwYXRocyBvZiBsaW5rZWQgcGFja2FnZXMuXG5cdFx0aWYgKG1hbmlmZXN0LmxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGJ1aWxkUm9vdCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0c1swXS5nZXRSb290T3V0KCkpO1xuXHRcdFx0Y29uc3QgcGVlck5vZGVNb2R1bGVzRGlyID0gcGF0aC5qb2luKGJ1aWxkUm9vdCwgXCJub2RlX21vZHVsZXNcIik7XG5cdFx0XHRhd2FpdCBmcy5ybShwZWVyTm9kZU1vZHVsZXNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcblx0XHRcdGZvciAoY29uc3QgcHJvamVjdCBvZiBwcm9qZWN0cykge1xuXHRcdFx0XHRjb25zdCBwa2cgPSBhd2FpdCBwcm9qZWN0LmdldFBhY2thZ2VKc29uKCk7XG5cdFx0XHRcdGlmICghcGtnLm5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRjb25zdCBvdXREaXIgPSBwYXRoLnJlc29sdmUocHJvamVjdC5nZXRPdXREaXIoKSk7XG5cdFx0XHRcdGNvbnN0IHBlZXJTeW1saW5rID0gcGF0aC5qb2luKHBlZXJOb2RlTW9kdWxlc0RpciwgLi4ucGtnLm5hbWUuc3BsaXQoXCIvXCIpKTtcblx0XHRcdFx0YXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKHBlZXJTeW1saW5rKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cdFx0XHRcdGF3YWl0IGZzLnN5bWxpbmsob3V0RGlyLCBwZWVyU3ltbGluaywgXCJkaXJcIik7XG5cdFx0XHRcdHRoaXMuI2xvZ2dlci50cmFjZShgUGVlci1saW5rZWQgJHtwa2cubmFtZX0g4oaSICR7b3V0RGlyfWApO1xuXHRcdFx0fVxuXHRcdFx0bWFuaWZlc3QucGVlck5vZGVNb2R1bGVzRGlyID0gcGVlck5vZGVNb2R1bGVzRGlyO1xuXHRcdFx0dGhpcy4jbG9nZ2VyLmluZm8oYENyZWF0ZWQgcGVlciBub2RlX21vZHVsZXMgYXQgJHtwZWVyTm9kZU1vZHVsZXNEaXJ9YCk7XG5cdFx0fVxuXG5cdFx0YXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbih0YXJnZXREaXIsIExJTktfTUFOSUZFU1QpLCBKU09OLnN0cmluZ2lmeShtYW5pZmVzdCwgbnVsbCwgMikpO1xuXG5cdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlN1Y2Nlc3MoTGluay5uYW1lKTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6WyJERUZBVUxUX0xJTktfQ09ORklHVVJBVElPTiIsIkxJTktfTUFOSUZFU1QiLCJMaW5rIiwic2NyaWJlIiwibG9nZ2VyIiwibmFtZSIsIndvcmtzcGFjZSIsInJ1biIsIm9wdGlvbnMiLCJ0YXJnZXREaXIiLCJwYXRoIiwicmVzb2x2ZSIsIm5vZGVNb2R1bGVzRGlyIiwiam9pbiIsInN0YXQiLCJmcyIsImNhdGNoIiwiRm9yZ2VFcnJvciIsInByb2plY3RzIiwiZ2V0UHJvamVjdHMiLCJjb25maWd1cmF0aW9uIiwibGVuZ3RoIiwibWFuaWZlc3RQYXRoIiwiZXhpc3RpbmdNYW5pZmVzdFRleHQiLCJyZWFkRmlsZSIsImV4aXN0aW5nTWFuaWZlc3QiLCJKU09OIiwicGFyc2UiLCJtYW5pZmVzdCIsIndvcmtzcGFjZVJvb3QiLCJyb290RGlyIiwibGlua3MiLCJwcm9qZWN0IiwicGtnIiwiZ2V0UGFja2FnZUpzb24iLCJwYWNrYWdlTmFtZSIsInRyYWNlIiwib3V0RGlyIiwiZ2V0T3V0RGlyIiwiYWJzb2x1dGVPdXREaXIiLCJta2RpciIsInJlY3Vyc2l2ZSIsInN5bWxpbmtQYXRoIiwic3BsaXQiLCJzeW1saW5rUGFyZW50IiwiZGlybmFtZSIsIm9yaWdpbmFsUGF0aCIsImV4aXN0aW5nU3RhdCIsImxzdGF0IiwiZXhpc3RpbmdFbnRyeSIsImZpbmQiLCJsIiwiaXNTeW1ib2xpY0xpbmsiLCJ1bmxpbmsiLCJyZWFkbGluayIsInJlbmFtZSIsInN5bWxpbmsiLCJwdXNoIiwiaW5mbyIsImJ1aWxkUm9vdCIsImdldFJvb3RPdXQiLCJwZWVyTm9kZU1vZHVsZXNEaXIiLCJybSIsImZvcmNlIiwicGVlclN5bWxpbmsiLCJ3cml0ZUZpbGUiLCJzdHJpbmdpZnkiLCJBY3Rpb25SZXNwb25zZSIsIlN1Y2Nlc3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBa0JhQTtlQUFBQTs7UUFQQUM7ZUFBQUE7O1FBZ0JBQztlQUFBQTs7O2lFQTNCRTtpRUFDRTs0QkFDVTtzQkFFRDtxQkFFSzt3QkFDUjtRQUNoQjt3QkFDb0I7Ozs7Ozs7Ozs7Ozs7OztBQUVwQixNQUFNRCxnQkFBZ0I7QUFPdEIsTUFBTUQsNkJBQTZCO0FBU25DLE1BQU1FOztJQUNaLENBQUEsTUFBTyxHQUFHQyxjQUFNLENBQUNDLE1BQU0sQ0FBQ0YsS0FBS0csSUFBSSxFQUFFO0lBRW5DLFlBQW1CLEFBQWlCQyxTQUFvQixDQUFFO2FBQXRCQSxZQUFBQTtJQUF1QjtJQUVwREMsTUFBTSxPQUFPQztRQUNuQixNQUFNQyxZQUFZQyxpQkFBSSxDQUFDQyxPQUFPLENBQUNILFFBQVFDLFNBQVM7UUFDaEQsTUFBTUcsaUJBQWlCRixpQkFBSSxDQUFDRyxJQUFJLENBQUNKLFdBQVc7UUFFNUMsTUFBTUssT0FBTyxNQUFNQyxpQkFBRSxDQUFDRCxJQUFJLENBQUNGLGdCQUFnQkksS0FBSyxDQUFDLElBQU07UUFDdkQsSUFBSUYsUUFBUSxNQUFNO1lBQ2pCLE1BQU0sSUFBSUcsa0JBQVUsQ0FDbkIsQ0FBQywyQkFBMkIsRUFBRVIsVUFBVSwwQkFBMEIsQ0FBQztRQUVyRTtRQUVBLE1BQU1TLFdBQVcsSUFBSSxDQUFDWixTQUFTLENBQUNhLFdBQVcsQ0FBQ1gsUUFBUVksYUFBYTtRQUNqRSxJQUFJRixTQUFTRyxNQUFNLEtBQUssR0FBRztZQUMxQixN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
|