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

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
@@ -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+XG5pbXBvcnQgeyBGaWxlV3JpdGVyU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9maWxlLXdyaXRlci5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFRyYW5zZm9ybVJlc3BvbnNlIH0gZnJvbSBcIi4uL3R5cGVzL3RyYW5zZm9ybS1yZXNwb25zZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgdHlwZSBUcmFuc2Zvcm1lciwgVHJhbnNmb3JtZXJLZXkgfSBmcm9tIFwiLi4vdHlwZXMvdHJhbnNmb3JtZXIudHlwZS5qc1wiO1xuXG5leHBvcnQgdHlwZSBCdWlsZE9wdGlvbnMgPSB7XG5cdGNvbmZpZ3VyYXRpb246IHN0cmluZztcblx0ZmlsZTogc3RyaW5nO1xufTtcblxuQFRyYWNlXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQnVpbGQgaW1wbGVtZW50cyBBY3Rpb248QnVpbGRPcHRpb25zPiB7XG5cdCNsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKEJ1aWxkLm5hbWUpO1xuXHRwdWJsaWMgY29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2U6IFdvcmtzcGFjZSxcblx0XHRAaW5qZWN0KFRyYW5zZm9ybWVyS2V5KSBwcml2YXRlIHJlYWRvbmx5IHRyYW5zZm9ybWVyczogVHJhbnNmb3JtZXJbXSxcblx0XHRwcml2YXRlIHJlYWRvbmx5IGZpbGVXcml0ZXI6IEZpbGVXcml0ZXJTZXJ2aWNlLFxuXHQpIHtcblx0XHRpZiAoIXRyYW5zZm9ybWVycyB8fCB0cmFuc2Zvcm1lcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRm9yZ2VFcnJvcihcIkF0IGxlYXN0IG9uZSB0cmFuc2Zvcm1lciBpcyByZXF1aXJlZFwiKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgcnVuID0gYXN5bmMgKG9wdGlvbnM6IEJ1aWxkT3B0aW9ucyk6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U8VHJhbnNmb3JtUmVzcG9uc2U+PiA9PiB7XG5cdFx0Y29uc3QgeyBjb25maWd1cmF0aW9uOiBidWlsZENvbmZpZyB9ID0gb3B0aW9ucztcblx0XHRjb25zdCBwcm9qZWN0cyA9IHRoaXMud29ya3NwYWNlLmdldFByb2plY3RzKGJ1aWxkQ29uZmlnKTtcblx0XHR2b2lkIHRoaXMuZmlsZVdyaXRlci53YXJtdXAoWy4uLnByb2plY3RzXSk7XG5cdFx0Y29uc3QgdHJhbnNmb3JtUmVzdWx0cyA9IGF3YWl0IHRoaXMuYnVpbGQocHJvamVjdHMpO1xuXG5cdFx0Y29uc3QgZXJyb3JzID0gdHJhbnNmb3JtUmVzdWx0cy5maWx0ZXIoKHJlc3BvbnNlKSA9PiByZXNwb25zZS5vdXRjb21lID09PSBcImZhaWx1cmVcIik7XG5cdFx0aWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlcyA9IHRyYW5zZm9ybVJlc3VsdHMubWFwKChyZXNwb25zZXMpID0+IHJlc3BvbnNlcy5tZXNzYWdlcykuam9pbihcIlxcblwiKTtcblx0XHRcdHRocm93IG5ldyBGb3JnZUVycm9yKGBFcnJvciBidWlsZGluZzogJHttZXNzYWdlc31gKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IHRyYW5zZm9ybWVyIG9mIHRoaXMudHJhbnNmb3JtZXJzKSB7XG5cdFx0XHRpZiAodHJhbnNmb3JtZXIud2F0Y2ggJiYgdHJhbnNmb3JtZXIuaW5jcmVtZW50YWxUcmFuc2Zvcm0kKSB7XG5cdFx0XHRcdHRyYW5zZm9ybWVyLndhdGNoKHRoaXMud29ya3NwYWNlKTtcblx0XHRcdFx0dHJhbnNmb3JtZXIuaW5jcmVtZW50YWxUcmFuc2Zvcm0kLnN1YnNjcmliZSgocmVzcG9uc2VzKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5maWxlV3JpdGVyLmVucXVldWVPdXRwdXRzKHJlc3BvbnNlcyk7XG5cdFx0XHRcdFx0dm9pZCB0aGlzLndyaXRlT3V0cHV0KCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5TdWNjZXNzKEJ1aWxkLm5hbWUsIHRyYW5zZm9ybVJlc3VsdHMpO1xuXHR9O1xuXG5cdHB1YmxpYyBhc3luYyBidWlsZChcblx0XHRwcm9qZWN0QXJyYXlMaWtlOiByZWFkb25seSBQcm9qZWN0W10gfCBQcm9qZWN0LFxuXHQpOiBQcm9taXNlPFRyYW5zZm9ybVJlc3BvbnNlW10+IHtcblx0XHRjb25zdCBwcm9qZWN0czogUHJvamVjdFtdID0gQXJyYXkuaXNBcnJheShwcm9qZWN0QXJyYXlMaWtlKVxuXHRcdFx0PyBwcm9qZWN0QXJyYXlMaWtlXG5cdFx0XHQ6IFtwcm9qZWN0QXJyYXlMaWtlXTtcblx0XHRmb3IgKGNvbnN0IHByb2plY3Qgb2YgcHJvamVjdHMpIHtcblx0XHRcdHRoaXMuI2xvZ2dlci5pbmZvKGBCdWlsZGluZyAke3Byb2plY3QubmFtZX1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMucnVuVHJhbnNmb3JtZXJzKHByb2plY3RzKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgcnVuVHJhbnNmb3JtZXJzKFxuXHRcdHByb2plY3RzOiBQcm9qZWN0IHwgUHJvamVjdFtdLFxuXHRcdGZpbGVGaWx0ZXI/OiAocHJvamVjdDogUHJvamVjdCkgPT4gUHJvbWlzZTxGaWxlRXhbXT4sXG5cdCkge1xuXHRcdC8vIFBoYXNlIDE6IHNlcXVlbnRpYWwgaW5pdCDigJQgcnVucyBleHBlbnNpdmUgc2V0dXAgKGUuZy4gVHlwZVNjcmlwdCBjcmVhdGVQcm9ncmFtKVxuXHRcdC8vIGJlZm9yZSBhbnkgdHJhbnNmb3JtZXIncyBwYXJhbGxlbCB3b3JrbG9hZCAoZS5nLiBTV0MvUmF5b24pIHN0YXJ0cy5cblx0XHRmb3IgKGNvbnN0IHRyYW5zZm9ybWVyIG9mIHRoaXMudHJhbnNmb3JtZXJzKSB7XG5cdFx0XHRhd2FpdCB0cmFuc2Zvcm1lci5pbml0Py4ocHJvamVjdHMsIGZpbGVGaWx0ZXIpO1xuXHRcdH1cblx0XHQvLyBQaGFzZSAyOiBwYXJhbGxlbCB0cmFuc2Zvcm0g4oCUIGFsbCB0cmFuc2Zvcm1lcnMgcnVuIGNvbmN1cnJlbnRseSBub3cgdGhhdFxuXHRcdC8vIENQVS1oZWF2eSBpbml0IGlzIGNvbXBsZXRlLlxuXHRcdGNvbnN0IGFsbFJlc3BvbnNlcyA9IChcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHR0aGlzLnRyYW5zZm9ybWVycy5tYXAoKHQpID0+XG5cdFx0XHRcdFx0dC50cmFuc2Zvcm1Qcm9qZWN0KHByb2plY3RzLCBmaWxlRmlsdGVyLCAocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuZmlsZVdyaXRlci5lbnF1ZXVlT3V0cHV0KHJlc3BvbnNlKTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0KSxcblx0XHRcdClcblx0XHQpLmZsYXQoKTtcblx0XHRhd2FpdCB0aGlzLndyaXRlT3V0cHV0KCk7XG5cdFx0cmV0dXJuIGFsbFJlc3BvbnNlcztcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgd3JpdGVPdXRwdXQoKSB7XG5cdFx0YXdhaXQgdGhpcy5maWxlV3JpdGVyLmZsdXNoKCk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJCdWlsZCIsInNjcmliZSIsImxvZ2dlciIsIm5hbWUiLCJ3b3Jrc3BhY2UiLCJ0cmFuc2Zvcm1lcnMiLCJmaWxlV3JpdGVyIiwibGVuZ3RoIiwiRm9yZ2VFcnJvciIsInJ1biIsIm9wdGlvbnMiLCJjb25maWd1cmF0aW9uIiwiYnVpbGRDb25maWciLCJwcm9qZWN0cyIsImdldFByb2plY3RzIiwid2FybXVwIiwidHJhbnNmb3JtUmVzdWx0cyIsImJ1aWxkIiwiZXJyb3JzIiwiZmlsdGVyIiwicmVzcG9uc2UiLCJvdXRjb21lIiwibWVzc2FnZXMiLCJtYXAiLCJyZXNwb25zZXMiLCJqb2luIiwidHJhbnNmb3JtZXIiLCJ3YXRjaCIsImluY3JlbWVudGFsVHJhbnNmb3JtJCIsInN1YnNjcmliZSIsImVucXVldWVPdXRwdXRzIiwid3JpdGVPdXRwdXQiLCJBY3Rpb25SZXNwb25zZSIsIlN1Y2Nlc3MiLCJwcm9qZWN0QXJyYXlMaWtlIiwiQXJyYXkiLCJpc0FycmF5IiwicHJvamVjdCIsImluZm8iLCJydW5UcmFuc2Zvcm1lcnMiLCJmaWxlRmlsdGVyIiwiaW5pdCIsImFsbFJlc3BvbnNlcyIsIlByb21pc2UiLCJhbGwiLCJ0IiwidHJhbnNmb3JtUHJvamVjdCIsImVucXVldWVPdXRwdXQiLCJmbGF0IiwiZmx1c2giXSwibWFwcGluZ3MiOiI7Ozs7K0JBc0JhQTs7O2VBQUFBOzs7NEJBdEJzQjtzQkFHVDtxQkFFSzs2QkFDVDt3QkFFQzt3QkFDSTttQ0FFTztpQ0FFZTs7Ozs7Ozs7Ozs7Ozs7O0FBUzFDLE1BQU1BOzs7O0lBQ1osQ0FBQSxNQUFPLEdBQUdDLGNBQU0sQ0FBQ0MsTUFBTSxDQUFDRixNQUFNRyxJQUFJLEVBQUU7SUFDcEMsWUFDQyxBQUFpQkMsU0FBb0IsRUFDckMsQUFBeUNDLFlBQTJCLEVBQ3BFLEFBQWlCQyxVQUE2QixDQUM3QzthQUhnQkYsWUFBQUE7YUFDd0JDLGVBQUFBO2FBQ3hCQyxhQUFBQTtRQUVqQixJQUFJLENBQUNELGdCQUFnQkEsYUFBYUUsTUFBTSxLQUFLLEdBQUc7WUFDL0MsTUFBTSxJQUFJQyxrQkFBVSxDQUFDO1FBQ3RCO0lBQ0Q7SUFFT0MsTUFBTSxPQUFPQztRQUNuQixNQUFNLEVBQUVDLGVBQWVDLFdBQVcsRUFBRSxHQUFHRjtRQUN2QyxNQUFNRyxXQUFXLElBQUksQ0FBQ1QsU0FBUyxDQUFDVSxXQUFXLENBQUNGO1FBQzVDLEtBQUssSUFBSSxDQUFDTixVQUFVLENBQUNTLE1BQU0sQ0FBQztlQUFJRjtTQUFTO1FBQ3pDLE1BQU1HLG1CQUFtQixNQUFNLElBQUksQ0FBQ0MsS0FBSyxDQUFDSjtRQUUxQyxNQUFNSyxTQUFTRixpQkFBaUJHLE1BQU0sQ0FBQyxDQUFDQyxXQUFhQSxTQUFTQyxPQUFPLEtBQUs7UUFDMUUsSUFBSUgsT0FBT1gsTUFBTSxHQUFHLEdBQUc7WUFDdEIsTUFBTWUsV0FBV04saUJBQWlCTyxHQUFHLENBQUMsQ0FBQ0MsWUFBY0EsVUFBVUYsUUFBUSxFQUFFRyxJQUFJLENBQUM7WUFDOUUsTUFBTSxJQUFJakIsa0JBQVUsQ0FBQyxDQUFDLGdCQUFnQixFQUFFYyxVQUFVO1FBQ25EO1FBRUEsS0FBSyxNQUFNSSxlQUFlLElBQUksQ0FBQ3JCLFlBQVksQ0FBRTtZQUM1QyxJQUFJcUIsWUFBWUMsS0FBSyxJQUFJRCxZQUFZRSxxQkFBcUIsRUFBRTtnQkFDM0RGLFlBQVlDLEtBQUssQ0FBQyxJQUFJLENBQUN2QixTQUFTO2dCQUNoQ3NCLFlBQVlFLHFCQUFxQixDQUFDQyxTQUFTLENBQUMsQ0FBQ0w7b0JBQzVDLElBQUksQ0FBQ2xCLFVBQVUsQ0FBQ3dCLGNBQWMsQ0FBQ047b0JBQy9CLEtBQUssSUFBSSxDQUFDTyxXQUFXO2dCQUN0QjtZQUNEO1FBQ0Q7UUFFQSxPQUFPQyxtQkFBYyxDQUFDQyxPQUFPLENBQUNqQyxNQUFNRyxJQUFJLEVBQUVhO0lBQzNDLEVBQUU7SUFFRixNQUFhQyxNQUNaaUIsZ0JBQThDLEVBQ2Y7UUFDL0IsTUFBTXJCLFdBQXNCc0IsTUFBTUMsT0FBTyxDQUFDRixvQkFDdkNBLG1CQUNBO1lBQUNBO1NBQWlCO1FBQ3JCLEtBQUssTUFBTUcsV0FBV3hCLFNBQVU7WUFDL0IsSUFBSSxDQUFDLENBQUEsTUFBTyxDQUFDeUIsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFRCxRQUFRbEMsSUFBSSxFQUFFO1FBQzdDO1FBQ0EsT0FBTyxJQUFJLENBQUNvQyxlQUFlLENBQUMxQjtJQUM3QjtJQUVBLE1BQWMwQixnQkFDYjFCLFFBQTZCLEVBQzdCMkIsVUFBb0QsRUFDbkQ7UUFDRCxrRkFBa0Y7UUFDbEYsc0VBQXNFO1FBQ3RFLEtBQUssTUFBTWQsZUFBZSxJQUFJLENBQUNyQixZQUFZLENBQUU7WUFDNUMsTUFBTXFCLFlBQVllLElBQUksR0FBRzVCLFVBQVUyQjtRQUNwQztRQUNBLDJFQUEyRTtRQUMzRSw4QkFBOEI7UUFDOUIsTUFBTUUsZUFBZSxBQUNwQixDQUFBLE1BQU1DLFFBQVFDLEdBQUcsQ0FDaEIsSUFBSSxDQUFDdkMsWUFBWSxDQUFDa0IsR0FBRyxDQUFDLENBQUNzQixJQUN0QkEsRUFBRUMsZ0JBQWdCLENBQUNqQyxVQUFVMkIsWUFBWSxDQUFDcEI7Z0JBQ3pDLElBQUksQ0FBQ2QsVUFBVSxDQUFDeUMsYUFBYSxDQUFDM0I7WUFDL0IsSUFFRixFQUNDNEIsSUFBSTtRQUNOLE1BQU0sSUFBSSxDQUFDakIsV0FBVztRQUN0QixPQUFPVztJQUNSO0lBRUEsTUFBY1gsY0FBYztRQUMzQixNQUFNLElBQUksQ0FBQ3pCLFVBQVUsQ0FBQzJDLEtBQUs7SUFDNUI7QUFDRCJ9
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
- await Promise.all(this.workspace.getProjects(options.configuration).map(async (proj)=>{
37
- const outDir = proj.getRootOut();
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+XG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IEFjdGlvblJlc3BvbnNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IGlvIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pb1wiO1xuaW1wb3J0IHsgc2NyaWJlIH0gZnJvbSBcIkBkZWNvaGVyZS9zY3JpYmVcIjtcblxuZXhwb3J0IHR5cGUgQ2xlYW5PcHRpb25zID0ge1xuXHRjbGVhbjogYm9vbGVhbjtcblx0Y29uZmlndXJhdGlvbjogc3RyaW5nO1xufTtcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENsZWFuIGltcGxlbWVudHMgQWN0aW9uPENsZWFuT3B0aW9ucz4ge1xuXHQjbG9nZ2VyID0gc2NyaWJlLmxvZ2dlcihDbGVhbi5uYW1lKTtcblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgd29ya3NwYWNlOiBXb3Jrc3BhY2UpIHt9XG5cblx0cHVibGljIHJ1biA9IGFzeW5jIChvcHRpb25zOiBDbGVhbk9wdGlvbnMpOiBQcm9taXNlPEFjdGlvblJlc3BvbnNlPiA9PiB7XG5cdFx0aWYgKCFvcHRpb25zLmNsZWFuKSB7XG5cdFx0XHR0aGlzLiNsb2dnZXIuaW5mbyhcIlNraXBwaW5nIGNsZWFuXCIpO1xuXHRcdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlNraXBwZWQoQ2xlYW4ubmFtZSk7XG5cdFx0fVxuXG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHR0aGlzLndvcmtzcGFjZS5nZXRQcm9qZWN0cyhvcHRpb25zLmNvbmZpZ3VyYXRpb24pLm1hcChhc3luYyAocHJvaikgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXREaXIgPSBwcm9qLmdldFJvb3RPdXQoKTtcblx0XHRcdFx0YXdhaXQgaW8ucmVtb3ZlRGlyKG91dERpciwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHRcdFx0XHR0aGlzLiNsb2dnZXIudHJhY2UoYENsZWFuZWQgJHtvdXREaXJ9YCk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlN1Y2Nlc3MoQ2xlYW4ubmFtZSk7XG5cdH07XG59XG4iXSwibmFtZXMiOlsiQ2xlYW4iLCJzY3JpYmUiLCJsb2dnZXIiLCJuYW1lIiwid29ya3NwYWNlIiwicnVuIiwib3B0aW9ucyIsImNsZWFuIiwiaW5mbyIsIkFjdGlvblJlc3BvbnNlIiwiU2tpcHBlZCIsIlByb21pc2UiLCJhbGwiLCJnZXRQcm9qZWN0cyIsImNvbmZpZ3VyYXRpb24iLCJtYXAiLCJwcm9qIiwib3V0RGlyIiwiZ2V0Um9vdE91dCIsImlvIiwicmVtb3ZlRGlyIiwiZm9yY2UiLCJyZWN1cnNpdmUiLCJ0cmFjZSIsIlN1Y2Nlc3MiXSwibWFwcGluZ3MiOiI7Ozs7K0JBY2FBOzs7ZUFBQUE7Ozs0QkFkYztzQkFFRDtxQkFFSztvQkFDWjt3QkFDSTs7Ozs7Ozs7OztBQVFoQixNQUFNQTs7SUFDWixDQUFBLE1BQU8sR0FBR0MsY0FBTSxDQUFDQyxNQUFNLENBQUNGLE1BQU1HLElBQUksRUFBRTtJQUNwQyxZQUFtQixBQUFpQkMsU0FBb0IsQ0FBRTthQUF0QkEsWUFBQUE7SUFBdUI7SUFFcERDLE1BQU0sT0FBT0M7UUFDbkIsSUFBSSxDQUFDQSxRQUFRQyxLQUFLLEVBQUU7WUFDbkIsSUFBSSxDQUFDLENBQUEsTUFBTyxDQUFDQyxJQUFJLENBQUM7WUFDbEIsT0FBT0MsbUJBQWMsQ0FBQ0MsT0FBTyxDQUFDVixNQUFNRyxJQUFJO1FBQ3pDO1FBRUEsTUFBTVEsUUFBUUMsR0FBRyxDQUNoQixJQUFJLENBQUNSLFNBQVMsQ0FBQ1MsV0FBVyxDQUFDUCxRQUFRUSxhQUFhLEVBQUVDLEdBQUcsQ0FBQyxPQUFPQztZQUM1RCxNQUFNQyxTQUFTRCxLQUFLRSxVQUFVO1lBQzlCLE1BQU1DLE1BQUUsQ0FBQ0MsU0FBUyxDQUFDSCxRQUFRO2dCQUFFSSxPQUFPO2dCQUFNQyxXQUFXO1lBQUs7WUFDMUQsSUFBSSxDQUFDLENBQUEsTUFBTyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUVOLFFBQVE7UUFDdkM7UUFHRCxPQUFPUixtQkFBYyxDQUFDZSxPQUFPLENBQUN4QixNQUFNRyxJQUFJO0lBQ3pDLEVBQUU7QUFDSCJ9
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 outDir = proj.getOutDir();
47
- const pattern = proj.copyFiles;
48
- const files = await _io.io.findFiles(pattern, {
49
- cwd: proj.projectDirectory
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(files.map((file)=>this.copyFileToOut(file, outDir)));
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2NvcHkuYWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tIFwiQGRlY29oZXJlL2NydWNpYmxlL2RlY29yYXRvcnNcIjtcbi8vIGJpb21lLWlnbm9yZSBsaW50L3N0eWxlL3VzZUltcG9ydFR5cGU6IDxEST5cbmltcG9ydCB7IFdvcmtzcGFjZSB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgQWN0aW9uUmVzcG9uc2UgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgdHlwZSBGaWxlRXgsIGlvIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pb1wiO1xuaW1wb3J0IHsgcmV0cnkgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL3N5c3RlbVwiO1xuaW1wb3J0IHsgc2NyaWJlIH0gZnJvbSBcIkBkZWNvaGVyZS9zY3JpYmVcIjtcblxuY29uc3QgQ09QWV9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBDT1BZX1JFVFJZX0RFTEFZX01TID0gMjU7XG5cbmV4cG9ydCB0eXBlIENvcHlPcHRpb25zID0ge1xuXHRjb3B5OiBib29sZWFuO1xuXHRjb25maWd1cmF0aW9uOiBzdHJpbmc7XG59O1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29weSBpbXBsZW1lbnRzIEFjdGlvbjxDb3B5T3B0aW9ucz4ge1xuXHQjbG9nZ2VyID0gc2NyaWJlLmxvZ2dlcihDb3B5Lm5hbWUpO1xuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2U6IFdvcmtzcGFjZSkge31cblxuXHRwdWJsaWMgcnVuID0gYXN5bmMgKG9wdGlvbnM6IENvcHlPcHRpb25zKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4gPT4ge1xuXHRcdGlmICghb3B0aW9ucy5jb3B5KSB7XG5cdFx0XHR0aGlzLiNsb2dnZXIuaW5mbyhcIlNraXBwaW5nIGNvcHlcIik7XG5cdFx0XHRyZXR1cm4gQWN0aW9uUmVzcG9uc2UuU2tpcHBlZChDb3B5Lm5hbWUpO1xuXHRcdH1cblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0dGhpcy53b3Jrc3BhY2UuZ2V0UHJvamVjdHMob3B0aW9ucy5jb25maWd1cmF0aW9uKS5tYXAoYXN5bmMgKHByb2opID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0RGlyID0gcHJvai5nZXRPdXREaXIoKTtcblx0XHRcdFx0Y29uc3QgcGF0dGVybiA9IHByb2ouY29weUZpbGVzO1xuXHRcdFx0XHRjb25zdCBmaWxlcyA9IGF3YWl0IGlvLmZpbmRGaWxlcyhwYXR0ZXJuLCB7IGN3ZDogcHJvai5wcm9qZWN0RGlyZWN0b3J5IH0pO1xuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChmaWxlcy5tYXAoKGZpbGUpID0+IHRoaXMuY29weUZpbGVUb091dChmaWxlLCBvdXREaXIpKSk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlN1Y2Nlc3MoQ29weS5uYW1lKTtcblx0fTtcblxuXHRAcmV0cnkoeyBhdHRlbXB0czogQ09QWV9SRVRSWV9BVFRFTVBUUywgZGVsYXlNczogQ09QWV9SRVRSWV9ERUxBWV9NUyB9KVxuXHRwcml2YXRlIGFzeW5jIGNvcHlGaWxlVG9PdXQoZmlsZTogRmlsZUV4LCBvdXREaXI6IHN0cmluZykge1xuXHRcdGNvbnN0IGRlc3QgPSBwYXRoLmpvaW4ob3V0RGlyLCBmaWxlLnJlbGF0aXZlUGF0aCk7XG5cdFx0YXdhaXQgaW8uY29weUZpbGUoZmlsZS5mdWxsUGF0aCwgZGVzdCwgeyBta2RpcjogdHJ1ZSB9KTtcblx0XHR0aGlzLiNsb2dnZXIudHJhY2UoYENvcGllZCAke2ZpbGUuZnVsbFBhdGh9IC0+ICR7ZGVzdH1gKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkNvcHkiLCJDT1BZX1JFVFJZX0FUVEVNUFRTIiwiQ09QWV9SRVRSWV9ERUxBWV9NUyIsInNjcmliZSIsImxvZ2dlciIsIm5hbWUiLCJ3b3Jrc3BhY2UiLCJydW4iLCJvcHRpb25zIiwiY29weSIsImluZm8iLCJBY3Rpb25SZXNwb25zZSIsIlNraXBwZWQiLCJQcm9taXNlIiwiYWxsIiwiZ2V0UHJvamVjdHMiLCJjb25maWd1cmF0aW9uIiwibWFwIiwicHJvaiIsIm91dERpciIsImdldE91dERpciIsInBhdHRlcm4iLCJjb3B5RmlsZXMiLCJmaWxlcyIsImlvIiwiZmluZEZpbGVzIiwiY3dkIiwicHJvamVjdERpcmVjdG9yeSIsImZpbGUiLCJjb3B5RmlsZVRvT3V0IiwiU3VjY2VzcyIsImRlc3QiLCJwYXRoIiwiam9pbiIsInJlbGF0aXZlUGF0aCIsImNvcHlGaWxlIiwiZnVsbFBhdGgiLCJta2RpciIsInRyYWNlIiwiYXR0ZW1wdHMiLCJkZWxheU1zIl0sIm1hcHBpbmdzIjoiOzs7OytCQW1CYUE7OztlQUFBQTs7O2lFQW5CSTs0QkFDVTtzQkFFRDtxQkFFSztvQkFDQzt3QkFDVjt3QkFDQzs7Ozs7Ozs7Ozs7Ozs7O0FBRXZCLE1BQU1DLHNCQUFzQjtBQUM1QixNQUFNQyxzQkFBc0I7QUFRckIsTUFBTUY7O0lBQ1osQ0FBQSxNQUFPLEdBQUdHLGNBQU0sQ0FBQ0MsTUFBTSxDQUFDSixLQUFLSyxJQUFJLEVBQUU7SUFDbkMsWUFBbUIsQUFBaUJDLFNBQW9CLENBQUU7YUFBdEJBLFlBQUFBO0lBQXVCO0lBRXBEQyxNQUFNLE9BQU9DO1FBQ25CLElBQUksQ0FBQ0EsUUFBUUMsSUFBSSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxDQUFBLE1BQU8sQ0FBQ0MsSUFBSSxDQUFDO1lBQ2xCLE9BQU9DLG1CQUFjLENBQUNDLE9BQU8sQ0FBQ1osS0FBS0ssSUFBSTtRQUN4QztRQUVBLE1BQU1RLFFBQVFDLEdBQUcsQ0FDaEIsSUFBSSxDQUFDUixTQUFTLENBQUNTLFdBQVcsQ0FBQ1AsUUFBUVEsYUFBYSxFQUFFQyxHQUFHLENBQUMsT0FBT0M7WUFDNUQsTUFBTUMsU0FBU0QsS0FBS0UsU0FBUztZQUM3QixNQUFNQyxVQUFVSCxLQUFLSSxTQUFTO1lBQzlCLE1BQU1DLFFBQVEsTUFBTUMsTUFBRSxDQUFDQyxTQUFTLENBQUNKLFNBQVM7Z0JBQUVLLEtBQUtSLEtBQUtTLGdCQUFnQjtZQUFDO1lBQ3ZFLE1BQU1kLFFBQVFDLEdBQUcsQ0FBQ1MsTUFBTU4sR0FBRyxDQUFDLENBQUNXLE9BQVMsSUFBSSxDQUFDQyxhQUFhLENBQUNELE1BQU1UO1FBQ2hFO1FBR0QsT0FBT1IsbUJBQWMsQ0FBQ21CLE9BQU8sQ0FBQzlCLEtBQUtLLElBQUk7SUFDeEMsRUFBRTtJQUVGLE1BQ2N3QixjQUFjRCxJQUFZLEVBQUVULE1BQWMsRUFBRTtRQUN6RCxNQUFNWSxPQUFPQyxpQkFBSSxDQUFDQyxJQUFJLENBQUNkLFFBQVFTLEtBQUtNLFlBQVk7UUFDaEQsTUFBTVYsTUFBRSxDQUFDVyxRQUFRLENBQUNQLEtBQUtRLFFBQVEsRUFBRUwsTUFBTTtZQUFFTSxPQUFPO1FBQUs7UUFDckQsSUFBSSxDQUFDLENBQUEsTUFBTyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUVWLEtBQUtRLFFBQVEsQ0FBQyxJQUFJLEVBQUVMLE1BQU07SUFDeEQ7QUFDRDs7O1FBTlVRLFVBQVV0QztRQUFxQnVDLFNBQVN0QyJ9
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9hY3Rpb25zL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2J1aWxkLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2xlYW4uYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21taXQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb3B5LmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVwZW5kZW5jeS1yZXBvcnQuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZXBlbmRlbmN5LXN5bmMuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wdWJsaXNoLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3luYy1sb2NrLWZpbGUuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90YWcuYWN0aW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92ZXJzaW9uLmFjdGlvbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vd2F0Y2guYWN0aW9uLmpzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBYztxQkFDQTtxQkFDQTtxQkFDQTtxQkFDQTtxQkFDQTtxQkFDQTtxQkFDQTtxQkFDQTtxQkFDQTtxQkFDQSJ9
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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