@decohere/create 0.0.1-dev.23 → 0.0.1-dev.24

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 (36) hide show
  1. package/commonjs/src/models/compose.model.js +56 -4
  2. package/commonjs/src/models/dev-container.model.js +29 -2
  3. package/commonjs/src/models/package-json.model.js +11 -6
  4. package/commonjs/src/runner.js +18 -2
  5. package/commonjs/src/webapi/create-api.js +65 -5
  6. package/commonjs/src/webapi/features/auth.feature.js +287 -7
  7. package/commonjs/src/webapi/features/auth0-cli.js +140 -9
  8. package/commonjs/src/webapi/features/database.feature.js +56 -24
  9. package/commonjs/src/webapi/features/postman.feature.js +335 -46
  10. package/commonjs/src/webapi/models/api-package-json.model.js +4 -1
  11. package/commonjs/src/webapi/models/auth-config.model.js +4 -1
  12. package/commonjs/src/webapi/models/controller-source-file.model.js +15 -7
  13. package/commonjs/src/webapi/models/main-source-file.model.js +28 -4
  14. package/es6/src/models/compose.model.js +57 -6
  15. package/es6/src/models/dev-container.model.js +30 -8
  16. package/es6/src/models/package-json.model.js +11 -6
  17. package/es6/src/runner.js +19 -3
  18. package/es6/src/webapi/create-api.js +65 -5
  19. package/es6/src/webapi/features/auth.feature.js +287 -7
  20. package/es6/src/webapi/features/auth0-cli.js +122 -9
  21. package/es6/src/webapi/features/database.feature.js +56 -24
  22. package/es6/src/webapi/features/postman.feature.js +322 -43
  23. package/es6/src/webapi/models/api-package-json.model.js +4 -1
  24. package/es6/src/webapi/models/auth-config.model.js +4 -1
  25. package/es6/src/webapi/models/controller-source-file.model.js +15 -7
  26. package/es6/src/webapi/models/main-source-file.model.js +28 -4
  27. package/package.json +2 -2
  28. package/types/src/models/compose.model.d.ts +27 -2
  29. package/types/src/models/dev-container.model.d.ts +12 -0
  30. package/types/src/models/package-json.model.d.ts +2 -0
  31. package/types/src/webapi/features/auth.feature.d.ts +3 -0
  32. package/types/src/webapi/features/auth0-cli.d.ts +25 -3
  33. package/types/src/webapi/features/postman.feature.d.ts +5 -0
  34. package/types/src/webapi/models/auth-config.model.d.ts +8 -0
  35. package/types/src/webapi/models/controller-source-file.model.d.ts +6 -3
  36. package/types/src/webapi/models/main-source-file.model.d.ts +12 -0
@@ -15,9 +15,12 @@ class AuthConfigModel {
15
15
  constructor(config){
16
16
  this.config = config;
17
17
  }
18
+ setAdminUser(adminUser) {
19
+ this.config.adminUser = adminUser;
20
+ }
18
21
  files() {
19
22
  return [];
20
23
  }
21
24
  }
22
25
 
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL21vZGVscy9hdXRoLWNvbmZpZy5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXllZE1vZGVsLCBTb3VyY2VGaWxlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zb3VyY2UtZmlsZS5qc1wiO1xuXG5leHBvcnQgdHlwZSBBdXRoQ29uZmlnID0ge1xuXHRpc3N1ZXJCYXNlVXJsOiBzdHJpbmc7XG5cdGF1ZGllbmNlOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIERhdGEtY2FycmllciBtb2RlbCBmb3IgYXV0aCBjb25maWd1cmF0aW9uLlxuICpcbiAqIFJlZ2lzdGVyZWQgYnkgQXV0aEZlYXR1cmUgd2hlbiBhdXRoMCBpcyBjb25maWd1cmVkLiBPdGhlciBmZWF0dXJlcyAoZS5nLlxuICogUG9zdG1hbkZlYXR1cmUpIHJldHJpZXZlIGl0IHZpYSB3b3Jrc3BhY2UuZ2V0TW9kZWwoV0VMTF9LTk9XTl9GSUxFUy5BVVRIX0NPTkZJRykuXG4gKiBQcm9kdWNlcyBubyBmaWxlcyDigJQgZXhpc3RzIHNvbGVseSBzbyBmZWF0dXJlcyBjYW4gY29tbXVuaWNhdGUgYXV0aCBkZXRhaWxzLlxuICovXG5leHBvcnQgY2xhc3MgQXV0aENvbmZpZ01vZGVsIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLkFVVEhfQ09ORklHO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgY29uZmlnOiBBdXRoQ29uZmlnKSB7fVxuXG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdHJldHVybiBbXTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkF1dGhDb25maWdNb2RlbCIsImtleSIsIldFTExfS05PV05fRklMRVMiLCJBVVRIX0NPTkZJRyIsImNvbmZpZyIsImZpbGVzIl0sIm1hcHBpbmdzIjoiOzs7OytCQWVhQTs7O2VBQUFBOzs7dUJBZm9CO0FBZTFCLE1BQU1BOztJQUNJQyxNQUFNQyx1QkFBZ0IsQ0FBQ0MsV0FBVyxDQUFDO0lBRW5ELFlBQW1CLEFBQWdCQyxNQUFrQixDQUFFO2FBQXBCQSxTQUFBQTtJQUFxQjtJQUVqREMsUUFBc0I7UUFDNUIsT0FBTyxFQUFFO0lBQ1Y7QUFDRCJ9
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL21vZGVscy9hdXRoLWNvbmZpZy5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXllZE1vZGVsLCBTb3VyY2VGaWxlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zb3VyY2UtZmlsZS5qc1wiO1xuXG5leHBvcnQgdHlwZSBBZG1pblVzZXJDb25maWcgPSB7XG5cdHN1Yjogc3RyaW5nO1xuXHRlbWFpbDogc3RyaW5nO1xuXHRwYXNzd29yZDogc3RyaW5nO1xuXHR1c2VybmFtZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQXV0aENvbmZpZyA9IHtcblx0aXNzdWVyQmFzZVVybDogc3RyaW5nO1xuXHRhdWRpZW5jZTogc3RyaW5nO1xuXHRhZG1pblVzZXI/OiBBZG1pblVzZXJDb25maWc7XG59O1xuXG4vKipcbiAqIERhdGEtY2FycmllciBtb2RlbCBmb3IgYXV0aCBjb25maWd1cmF0aW9uLlxuICpcbiAqIFJlZ2lzdGVyZWQgYnkgQXV0aEZlYXR1cmUgd2hlbiBhdXRoMCBpcyBjb25maWd1cmVkLiBPdGhlciBmZWF0dXJlcyAoZS5nLlxuICogUG9zdG1hbkZlYXR1cmUpIHJldHJpZXZlIGl0IHZpYSB3b3Jrc3BhY2UuZ2V0TW9kZWwoV0VMTF9LTk9XTl9GSUxFUy5BVVRIX0NPTkZJRykuXG4gKiBQcm9kdWNlcyBubyBmaWxlcyDigJQgZXhpc3RzIHNvbGVseSBzbyBmZWF0dXJlcyBjYW4gY29tbXVuaWNhdGUgYXV0aCBkZXRhaWxzLlxuICovXG5leHBvcnQgY2xhc3MgQXV0aENvbmZpZ01vZGVsIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLkFVVEhfQ09ORklHO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgY29uZmlnOiBBdXRoQ29uZmlnKSB7fVxuXG5cdHB1YmxpYyBzZXRBZG1pblVzZXIoYWRtaW5Vc2VyOiBBZG1pblVzZXJDb25maWcpOiB2b2lkIHtcblx0XHR0aGlzLmNvbmZpZy5hZG1pblVzZXIgPSBhZG1pblVzZXI7XG5cdH1cblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJBdXRoQ29uZmlnTW9kZWwiLCJrZXkiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiQVVUSF9DT05GSUciLCJjb25maWciLCJzZXRBZG1pblVzZXIiLCJhZG1pblVzZXIiLCJmaWxlcyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkF1QmFBOzs7ZUFBQUE7Ozt1QkF2Qm9CO0FBdUIxQixNQUFNQTs7SUFDSUMsTUFBTUMsdUJBQWdCLENBQUNDLFdBQVcsQ0FBQztJQUVuRCxZQUFtQixBQUFnQkMsTUFBa0IsQ0FBRTthQUFwQkEsU0FBQUE7SUFBcUI7SUFFakRDLGFBQWFDLFNBQTBCLEVBQVE7UUFDckQsSUFBSSxDQUFDRixNQUFNLENBQUNFLFNBQVMsR0FBR0E7SUFDekI7SUFFT0MsUUFBc0I7UUFDNUIsT0FBTyxFQUFFO0lBQ1Y7QUFDRCJ9
@@ -51,20 +51,28 @@ class ControllerMethod {
51
51
  name;
52
52
  _httpDecorator;
53
53
  _params;
54
- _isAsync;
55
- _body;
56
54
  _extraDecorators = [];
57
- constructor(name, _httpDecorator, _params, _isAsync, _body){
55
+ _body;
56
+ _isAsync;
57
+ constructor(name, _httpDecorator, _params, isAsync, body){
58
58
  this.name = name;
59
59
  this._httpDecorator = _httpDecorator;
60
60
  this._params = _params;
61
- this._isAsync = _isAsync;
62
- this._body = _body;
61
+ this._isAsync = isAsync;
62
+ this._body = body;
63
63
  }
64
64
  addDecorator(decorator) {
65
65
  this._extraDecorators.push(decorator);
66
66
  return this;
67
67
  }
68
+ /** Replace the method body lines (used by features that extend generated behaviour). */ setBody(body) {
69
+ this._body = body;
70
+ return this;
71
+ }
72
+ setAsync(isAsync = true) {
73
+ this._isAsync = isAsync;
74
+ return this;
75
+ }
68
76
  render() {
69
77
  const lines = [];
70
78
  for (const d of this._extraDecorators){
@@ -148,7 +156,7 @@ class ControllerSourceFile {
148
156
  files() {
149
157
  const lines = [
150
158
  this._cortexImports.render("@decohere/cortex"),
151
- 'import { SampleService } from "../sample.service.js";'
159
+ 'import { SampleService } from "../services/sample.service.js";'
152
160
  ];
153
161
  for (const [from, group] of this._extraImportGroups){
154
162
  lines.push(group.render(from));
@@ -177,4 +185,4 @@ class ControllerSourceFile {
177
185
  }
178
186
  }
179
187
 
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL21vZGVscy9jb250cm9sbGVyLXNvdXJjZS1maWxlLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwsIFNvdXJjZUZpbGUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NvdXJjZS1maWxlLmpzXCI7XG5cbi8qKiBUcmFja3MgbmFtZWQgaW1wb3J0cyBmcm9tIGEgc2luZ2xlIG1vZHVsZSBwYXRoLCBzcGxpdCBpbnRvIHZhbHVlcyBhbmQgdHlwZXMuICovXG5jbGFzcyBJbXBvcnRHcm91cCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3ZhbHVlczogc3RyaW5nW10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBfdHlwZXM6IHN0cmluZ1tdID0gW107XG5cblx0cHVibGljIGFkZChuYW1lOiBzdHJpbmcsIHR5cGVPbmx5ID0gZmFsc2UpOiB0aGlzIHtcblx0XHRpZiAodHlwZU9ubHkpIHtcblx0XHRcdC8vIFZhbHVlIGltcG9ydCBhbHJlYWR5IHByZXNlbnQg4oCUIHZhbHVlIHdpbnMsIHNraXBcblx0XHRcdGlmICghdGhpcy5fdmFsdWVzLmluY2x1ZGVzKG5hbWUpICYmICF0aGlzLl90eXBlcy5pbmNsdWRlcyhuYW1lKSkge1xuXHRcdFx0XHR0aGlzLl90eXBlcy5wdXNoKG5hbWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBQcm9tb3RlOiByZW1vdmUgZnJvbSB0eXBlcyBpZiBpdCB3YXMgcHJldmlvdXNseSB0eXBlLW9ubHlcblx0XHRcdGNvbnN0IHR5cGVJZHggPSB0aGlzLl90eXBlcy5pbmRleE9mKG5hbWUpO1xuXHRcdFx0aWYgKHR5cGVJZHggIT09IC0xKSB0aGlzLl90eXBlcy5zcGxpY2UodHlwZUlkeCwgMSk7XG5cdFx0XHRpZiAoIXRoaXMuX3ZhbHVlcy5pbmNsdWRlcyhuYW1lKSkgdGhpcy5fdmFsdWVzLnB1c2gobmFtZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHJlbmRlcihmcm9tOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHZhbHVlcyA9IFsuLi50aGlzLl92YWx1ZXNdLnNvcnQoKTtcblx0XHRjb25zdCB0eXBlcyA9IFsuLi50aGlzLl90eXBlc10uc29ydCgpLm1hcCgobikgPT4gYHR5cGUgJHtufWApO1xuXHRcdHJldHVybiBgaW1wb3J0IHsgJHtbLi4udmFsdWVzLCAuLi50eXBlc10uam9pbihcIiwgXCIpfSB9IGZyb20gXCIke2Zyb219XCI7YDtcblx0fVxufVxuXG4vKipcbiAqIEEgY29udHJvbGxlciBtZXRob2QuIEZlYXR1cmVzIGNhbGwgYGFkZERlY29yYXRvcigpYCB0byBwcmVwZW5kIGRlY29yYXRvcnNcbiAqIGJlZm9yZSB0aGUgSFRUUCB2ZXJiIGRlY29yYXRvciAoZS5nLiBgQEFsbG93QW5vbnltb3VzYCBiZWZvcmUgYEBHZXQoKWApLlxuICovXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlck1ldGhvZCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2V4dHJhRGVjb3JhdG9yczogc3RyaW5nW10gPSBbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoXG5cdFx0cHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZyxcblx0XHRwcml2YXRlIHJlYWRvbmx5IF9odHRwRGVjb3JhdG9yOiBzdHJpbmcsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBfcGFyYW1zOiBzdHJpbmcsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBfaXNBc3luYzogYm9vbGVhbixcblx0XHRwcml2YXRlIHJlYWRvbmx5IF9ib2R5OiBzdHJpbmdbXSxcblx0KSB7fVxuXG5cdHB1YmxpYyBhZGREZWNvcmF0b3IoZGVjb3JhdG9yOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9leHRyYURlY29yYXRvcnMucHVzaChkZWNvcmF0b3IpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHJlbmRlcigpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cdFx0Zm9yIChjb25zdCBkIG9mIHRoaXMuX2V4dHJhRGVjb3JhdG9ycykge1xuXHRcdFx0bGluZXMucHVzaChgXFx0JHtkfWApO1xuXHRcdH1cblx0XHRsaW5lcy5wdXNoKGBcXHQke3RoaXMuX2h0dHBEZWNvcmF0b3J9YCk7XG5cdFx0Y29uc3QgYXN5bmNLdyA9IHRoaXMuX2lzQXN5bmMgPyBcImFzeW5jIFwiIDogXCJcIjtcblx0XHRsaW5lcy5wdXNoKGBcXHRwdWJsaWMgJHthc3luY0t3fSR7dGhpcy5uYW1lfSgke3RoaXMuX3BhcmFtc30pIHtgKTtcblx0XHRmb3IgKGNvbnN0IGxpbmUgb2YgdGhpcy5fYm9keSkge1xuXHRcdFx0bGluZXMucHVzaChgXFx0XFx0JHtsaW5lfWApO1xuXHRcdH1cblx0XHRsaW5lcy5wdXNoKFwiXFx0fVwiKTtcblx0XHRyZXR1cm4gbGluZXM7XG5cdH1cbn1cblxuLyoqXG4gKiBNb2RlbCBmb3IgYHByb2plY3RzL2FwaS9zcmMvY29udHJvbGxlcnMvaGVsbG8uY29udHJvbGxlci50c2AuXG4gKlxuICogUHJlLWluaXRpYWxpc2VkIHdpdGggYWxsIHJvdXRlcyBhbmQgdGhlaXIgSFRUUCBkZWNvcmF0b3JzLiBGZWF0dXJlcyBtdXRhdGVcbiAqIHRoZSBtb2RlbCB2aWEgYGdldE1ldGhvZChuYW1lKS5hZGREZWNvcmF0b3IoLi4uKWAsIGBhZGREZWNvcmF0b3IoLi4uKWAgKGNsYXNzXG4gKiBsZXZlbCksIGBhZGRDb3J0ZXhJbXBvcnQoLi4uKWAsIGBhZGRJbXBvcnQoLi4uKWAsIGFuZCBgYWRkQ29uc3RydWN0b3JQYXJhbSguLi4pYC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRyb2xsZXJTb3VyY2VGaWxlIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLkNPTlRST0xMRVJfVFM7XG5cblx0cHJpdmF0ZSByZWFkb25seSBfY29ydGV4SW1wb3J0cyA9IG5ldyBJbXBvcnRHcm91cCgpXG5cdFx0LmFkZChcIkNvbnRyb2xsZXJcIilcblx0XHQuYWRkKFwiRGVsZXRlXCIpXG5cdFx0LmFkZChcIkZpZWxkXCIpXG5cdFx0LmFkZChcIkdldFwiKVxuXHRcdC5hZGQoXCJQYXJhbVwiKVxuXHRcdC5hZGQoXCJQb3N0XCIpXG5cdFx0LmFkZChcIlB1dFwiKVxuXHRcdC5hZGQoXCJRdWVyeVwiKTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9leHRyYUltcG9ydEdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBJbXBvcnRHcm91cD4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfY2xhc3NEZWNvcmF0b3JzOiBzdHJpbmdbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9jdG9yUGFyYW1zOiBzdHJpbmdbXSA9IFtcInByaXZhdGUgcmVhZG9ubHkgc2FtcGxlOiBTYW1wbGVTZXJ2aWNlXCJdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgX21ldGhvZHMgPSBuZXcgTWFwPHN0cmluZywgQ29udHJvbGxlck1ldGhvZD4oW1xuXHRcdFtcblx0XHRcdFwiZ2V0QWxsXCIsXG5cdFx0XHRuZXcgQ29udHJvbGxlck1ldGhvZChcImdldEFsbFwiLCBcIkBHZXQoKVwiLCAnQFF1ZXJ5KFwiZmlsdGVyXCIpIGZpbHRlcjogc3RyaW5nJywgdHJ1ZSwgW1xuXHRcdFx0XHRcImNvbnN0IGdyZWV0aW5nID0gYXdhaXQgdGhpcy5zYW1wbGUuZ2V0R3JlZXRpbmcoKTtcIixcblx0XHRcdFx0XCJyZXR1cm4geyBmaWx0ZXIsIG1lc3NhZ2U6IGdyZWV0aW5nIH07XCIsXG5cdFx0XHRdKSxcblx0XHRdLFxuXHRcdFtcblx0XHRcdFwiZ2V0T25lXCIsXG5cdFx0XHRuZXcgQ29udHJvbGxlck1ldGhvZChcblx0XHRcdFx0XCJnZXRPbmVcIixcblx0XHRcdFx0J0BHZXQoXCIvOmlkXCIpJyxcblx0XHRcdFx0J0BQYXJhbShcImlkXCIpIGlkOiBzdHJpbmcnLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1RlbXBsYXRlQ3VybHlJblN0cmluZzogdGVtcGxhdGUgbGl0ZXJhbCBpbiBnZW5lcmF0ZWQgY29kZVxuXHRcdFx0XHRbXCJyZXR1cm4geyBpZCwgbWVzc2FnZTogYEhlbGxvICR7aWR9IWAgfTtcIl0sXG5cdFx0XHQpLFxuXHRcdF0sXG5cdFx0W1xuXHRcdFx0XCJjcmVhdGVcIixcblx0XHRcdG5ldyBDb250cm9sbGVyTWV0aG9kKFwiY3JlYXRlXCIsICdAUG9zdChcIi9cIiknLCBcImJvZHk6IEhlbGxvQm9keVwiLCBmYWxzZSwgW1xuXHRcdFx0XHRcInJldHVybiB7IG1lc3NhZ2U6IGJvZHkubWVzc2FnZSB9O1wiLFxuXHRcdFx0XSksXG5cdFx0XSxcblx0XHRbXG5cdFx0XHRcInVwZGF0ZVwiLFxuXHRcdFx0bmV3IENvbnRyb2xsZXJNZXRob2QoXG5cdFx0XHRcdFwidXBkYXRlXCIsXG5cdFx0XHRcdCdAUHV0KFwiLzppZFwiKScsXG5cdFx0XHRcdCdAUGFyYW0oXCJpZFwiKSBpZDogc3RyaW5nLCBib2R5OiBIZWxsb0JvZHknLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0W1wicmV0dXJuIHsgaWQsIG1lc3NhZ2U6IGJvZHkubWVzc2FnZSB9O1wiXSxcblx0XHRcdCksXG5cdFx0XSxcblx0XHRbXG5cdFx0XHRcInJlbW92ZVwiLFxuXHRcdFx0bmV3IENvbnRyb2xsZXJNZXRob2QoXCJyZW1vdmVcIiwgJ0BEZWxldGUoXCIvOmlkXCIpJywgJ0BQYXJhbShcImlkXCIpIGlkOiBzdHJpbmcnLCBmYWxzZSwgW1xuXHRcdFx0XHRcInJldHVybiB7IGlkLCBkZWxldGVkOiB0cnVlIH07XCIsXG5cdFx0XHRdKSxcblx0XHRdLFxuXHRdKTtcblxuXHQvKiogUmV0cmlldmUgYSBtZXRob2QgYnkgbmFtZSB0byBtdXRhdGUgaXRzIGRlY29yYXRvcnMuICovXG5cdHB1YmxpYyBnZXRNZXRob2QobmFtZTogc3RyaW5nKTogQ29udHJvbGxlck1ldGhvZCB7XG5cdFx0Y29uc3QgbSA9IHRoaXMuX21ldGhvZHMuZ2V0KG5hbWUpO1xuXHRcdGlmIChtID09IG51bGwpIHRocm93IG5ldyBFcnJvcihgTm8gbWV0aG9kICcke25hbWV9JyBvbiBDb250cm9sbGVyU291cmNlRmlsZWApO1xuXHRcdHJldHVybiBtO1xuXHR9XG5cblx0LyoqIEFkZCBhIGNsYXNzLWxldmVsIGRlY29yYXRvciAoZS5nLiBgQEF1dGhvcml6ZWApLiAqL1xuXHRwdWJsaWMgYWRkRGVjb3JhdG9yKGRlY29yYXRvcjogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fY2xhc3NEZWNvcmF0b3JzLnB1c2goZGVjb3JhdG9yKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBBZGQgYSBuYW1lZCBpbXBvcnQgZnJvbSBgQGRlY29oZXJlL2NvcnRleGAuICovXG5cdHB1YmxpYyBhZGRDb3J0ZXhJbXBvcnQobmFtZTogc3RyaW5nLCB0eXBlT25seSA9IGZhbHNlKTogdGhpcyB7XG5cdFx0dGhpcy5fY29ydGV4SW1wb3J0cy5hZGQobmFtZSwgdHlwZU9ubHkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZCBhIG5hbWVkIGltcG9ydCBmcm9tIGFueSBvdGhlciBtb2R1bGUuICovXG5cdHB1YmxpYyBhZGRJbXBvcnQobmFtZTogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHR5cGVPbmx5ID0gZmFsc2UpOiB0aGlzIHtcblx0XHRjb25zdCBncm91cCA9IHRoaXMuX2V4dHJhSW1wb3J0R3JvdXBzLmdldChmcm9tKSA/PyBuZXcgSW1wb3J0R3JvdXAoKTtcblx0XHRncm91cC5hZGQobmFtZSwgdHlwZU9ubHkpO1xuXHRcdHRoaXMuX2V4dHJhSW1wb3J0R3JvdXBzLnNldChmcm9tLCBncm91cCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKiogQWRkIGEgY29uc3RydWN0b3IgcGFyYW1ldGVyIChlLmcuIGFuIGluamVjdGVkIGRlcGVuZGVuY3kpLiAqL1xuXHRwdWJsaWMgYWRkQ29uc3RydWN0b3JQYXJhbShwYXJhbTogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fY3RvclBhcmFtcy5wdXNoKHBhcmFtKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcblx0XHRcdHRoaXMuX2NvcnRleEltcG9ydHMucmVuZGVyKFwiQGRlY29oZXJlL2NvcnRleFwiKSxcblx0XHRcdCdpbXBvcnQgeyBTYW1wbGVTZXJ2aWNlIH0gZnJvbSBcIi4uL3NhbXBsZS5zZXJ2aWNlLmpzXCI7Jyxcblx0XHRdO1xuXG5cdFx0Zm9yIChjb25zdCBbZnJvbSwgZ3JvdXBdIG9mIHRoaXMuX2V4dHJhSW1wb3J0R3JvdXBzKSB7XG5cdFx0XHRsaW5lcy5wdXNoKGdyb3VwLnJlbmRlcihmcm9tKSk7XG5cdFx0fVxuXG5cdFx0bGluZXMucHVzaChcblx0XHRcdFwiXCIsXG5cdFx0XHRcImNsYXNzIEhlbGxvQm9keSB7XCIsXG5cdFx0XHQnXFx0QEZpZWxkKFwiYm9keVwiLCBcIm1lc3NhZ2VcIiknLFxuXHRcdFx0XCJcXHRwdWJsaWMgbWVzc2FnZSE6IHN0cmluZztcIixcblx0XHRcdFwifVwiLFxuXHRcdFx0XCJcIixcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBkIG9mIHRoaXMuX2NsYXNzRGVjb3JhdG9ycykge1xuXHRcdFx0bGluZXMucHVzaChkKTtcblx0XHR9XG5cdFx0bGluZXMucHVzaCgnQENvbnRyb2xsZXIoeyBwcmVmaXg6IFwiL2hlbGxvXCIgfSknLCBcImV4cG9ydCBjbGFzcyBIZWxsb0NvbnRyb2xsZXIge1wiLCBcIlwiKTtcblxuXHRcdGxpbmVzLnB1c2goXCJcXHRwdWJsaWMgY29uc3RydWN0b3IoXCIpO1xuXHRcdGZvciAoY29uc3QgcCBvZiB0aGlzLl9jdG9yUGFyYW1zKSB7XG5cdFx0XHRsaW5lcy5wdXNoKGBcXHRcXHQke3B9LGApO1xuXHRcdH1cblx0XHRsaW5lcy5wdXNoKFwiXFx0KSB7fVwiKTtcblx0XHRsaW5lcy5wdXNoKFwiXCIpO1xuXG5cdFx0Zm9yIChjb25zdCBtZXRob2Qgb2YgdGhpcy5fbWV0aG9kcy52YWx1ZXMoKSkge1xuXHRcdFx0bGluZXMucHVzaCguLi5tZXRob2QucmVuZGVyKCksIFwiXCIpO1xuXHRcdH1cblxuXHRcdGxpbmVzLnB1c2goXCJ9XCIsIFwiXCIpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwic3JjL2NvbnRyb2xsZXJzL2hlbGxvLmNvbnRyb2xsZXIudHNcIixcblx0XHRcdFx0Y29udGVudDogbGluZXMuam9pbihcIlxcblwiKSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkNvbnRyb2xsZXJNZXRob2QiLCJDb250cm9sbGVyU291cmNlRmlsZSIsIkltcG9ydEdyb3VwIiwiX3ZhbHVlcyIsIl90eXBlcyIsImFkZCIsIm5hbWUiLCJ0eXBlT25seSIsImluY2x1ZGVzIiwicHVzaCIsInR5cGVJZHgiLCJpbmRleE9mIiwic3BsaWNlIiwicmVuZGVyIiwiZnJvbSIsInZhbHVlcyIsInNvcnQiLCJ0eXBlcyIsIm1hcCIsIm4iLCJqb2luIiwiX2V4dHJhRGVjb3JhdG9ycyIsIl9odHRwRGVjb3JhdG9yIiwiX3BhcmFtcyIsIl9pc0FzeW5jIiwiX2JvZHkiLCJhZGREZWNvcmF0b3IiLCJkZWNvcmF0b3IiLCJsaW5lcyIsImQiLCJhc3luY0t3IiwibGluZSIsImtleSIsIldFTExfS05PV05fRklMRVMiLCJDT05UUk9MTEVSX1RTIiwiX2NvcnRleEltcG9ydHMiLCJfZXh0cmFJbXBvcnRHcm91cHMiLCJNYXAiLCJfY2xhc3NEZWNvcmF0b3JzIiwiX2N0b3JQYXJhbXMiLCJfbWV0aG9kcyIsImdldE1ldGhvZCIsIm0iLCJnZXQiLCJFcnJvciIsImFkZENvcnRleEltcG9ydCIsImFkZEltcG9ydCIsImdyb3VwIiwic2V0IiwiYWRkQ29uc3RydWN0b3JQYXJhbSIsInBhcmFtIiwiZmlsZXMiLCJwIiwibWV0aG9kIiwiZmlsZVBhdGgiLCJjb250ZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQWtDYUE7ZUFBQUE7O1FBdUNBQztlQUFBQTs7O3VCQXpFb0I7QUFHakMsaUZBQWlGLEdBQ2pGLE1BQU1DO0lBQ1lDLFVBQW9CLEVBQUUsQ0FBQztJQUN2QkMsU0FBbUIsRUFBRSxDQUFDO0lBRWhDQyxJQUFJQyxJQUFZLEVBQUVDLFdBQVcsS0FBSyxFQUFRO1FBQ2hELElBQUlBLFVBQVU7WUFDYixrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQ0osT0FBTyxDQUFDSyxRQUFRLENBQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUNGLE1BQU0sQ0FBQ0ksUUFBUSxDQUFDRixPQUFPO2dCQUNoRSxJQUFJLENBQUNGLE1BQU0sQ0FBQ0ssSUFBSSxDQUFDSDtZQUNsQjtRQUNELE9BQU87WUFDTiw0REFBNEQ7WUFDNUQsTUFBTUksVUFBVSxJQUFJLENBQUNOLE1BQU0sQ0FBQ08sT0FBTyxDQUFDTDtZQUNwQyxJQUFJSSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUNOLE1BQU0sQ0FBQ1EsTUFBTSxDQUFDRixTQUFTO1lBQ2hELElBQUksQ0FBQyxJQUFJLENBQUNQLE9BQU8sQ0FBQ0ssUUFBUSxDQUFDRixPQUFPLElBQUksQ0FBQ0gsT0FBTyxDQUFDTSxJQUFJLENBQUNIO1FBQ3JEO1FBQ0EsT0FBTyxJQUFJO0lBQ1o7SUFFT08sT0FBT0MsSUFBWSxFQUFVO1FBQ25DLE1BQU1DLFNBQVM7ZUFBSSxJQUFJLENBQUNaLE9BQU87U0FBQyxDQUFDYSxJQUFJO1FBQ3JDLE1BQU1DLFFBQVE7ZUFBSSxJQUFJLENBQUNiLE1BQU07U0FBQyxDQUFDWSxJQUFJLEdBQUdFLEdBQUcsQ0FBQyxD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
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL21vZGVscy9jb250cm9sbGVyLXNvdXJjZS1maWxlLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwsIFNvdXJjZUZpbGUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NvdXJjZS1maWxlLmpzXCI7XG5cbi8qKiBUcmFja3MgbmFtZWQgaW1wb3J0cyBmcm9tIGEgc2luZ2xlIG1vZHVsZSBwYXRoLCBzcGxpdCBpbnRvIHZhbHVlcyBhbmQgdHlwZXMuICovXG5jbGFzcyBJbXBvcnRHcm91cCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3ZhbHVlczogc3RyaW5nW10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBfdHlwZXM6IHN0cmluZ1tdID0gW107XG5cblx0cHVibGljIGFkZChuYW1lOiBzdHJpbmcsIHR5cGVPbmx5ID0gZmFsc2UpOiB0aGlzIHtcblx0XHRpZiAodHlwZU9ubHkpIHtcblx0XHRcdC8vIFZhbHVlIGltcG9ydCBhbHJlYWR5IHByZXNlbnQg4oCUIHZhbHVlIHdpbnMsIHNraXBcblx0XHRcdGlmICghdGhpcy5fdmFsdWVzLmluY2x1ZGVzKG5hbWUpICYmICF0aGlzLl90eXBlcy5pbmNsdWRlcyhuYW1lKSkge1xuXHRcdFx0XHR0aGlzLl90eXBlcy5wdXNoKG5hbWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBQcm9tb3RlOiByZW1vdmUgZnJvbSB0eXBlcyBpZiBpdCB3YXMgcHJldmlvdXNseSB0eXBlLW9ubHlcblx0XHRcdGNvbnN0IHR5cGVJZHggPSB0aGlzLl90eXBlcy5pbmRleE9mKG5hbWUpO1xuXHRcdFx0aWYgKHR5cGVJZHggIT09IC0xKSB0aGlzLl90eXBlcy5zcGxpY2UodHlwZUlkeCwgMSk7XG5cdFx0XHRpZiAoIXRoaXMuX3ZhbHVlcy5pbmNsdWRlcyhuYW1lKSkgdGhpcy5fdmFsdWVzLnB1c2gobmFtZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHJlbmRlcihmcm9tOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHZhbHVlcyA9IFsuLi50aGlzLl92YWx1ZXNdLnNvcnQoKTtcblx0XHRjb25zdCB0eXBlcyA9IFsuLi50aGlzLl90eXBlc10uc29ydCgpLm1hcCgobikgPT4gYHR5cGUgJHtufWApO1xuXHRcdHJldHVybiBgaW1wb3J0IHsgJHtbLi4udmFsdWVzLCAuLi50eXBlc10uam9pbihcIiwgXCIpfSB9IGZyb20gXCIke2Zyb219XCI7YDtcblx0fVxufVxuXG4vKipcbiAqIEEgY29udHJvbGxlciBtZXRob2QuIEZlYXR1cmVzIGNhbGwgYGFkZERlY29yYXRvcigpYCB0byBwcmVwZW5kIGRlY29yYXRvcnNcbiAqIGJlZm9yZSB0aGUgSFRUUCB2ZXJiIGRlY29yYXRvciAoZS5nLiBgQEFsbG93QW5vbnltb3VzYCBiZWZvcmUgYEBHZXQoKWApLlxuICovXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlck1ldGhvZCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2V4dHJhRGVjb3JhdG9yczogc3RyaW5nW10gPSBbXTtcblx0cHJpdmF0ZSBfYm9keTogc3RyaW5nW107XG5cdHByaXZhdGUgX2lzQXN5bmM6IGJvb2xlYW47XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKFxuXHRcdHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBfaHR0cERlY29yYXRvcjogc3RyaW5nLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgX3BhcmFtczogc3RyaW5nLFxuXHRcdGlzQXN5bmM6IGJvb2xlYW4sXG5cdFx0Ym9keTogc3RyaW5nW10sXG5cdCkge1xuXHRcdHRoaXMuX2lzQXN5bmMgPSBpc0FzeW5jO1xuXHRcdHRoaXMuX2JvZHkgPSBib2R5O1xuXHR9XG5cblx0cHVibGljIGFkZERlY29yYXRvcihkZWNvcmF0b3I6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX2V4dHJhRGVjb3JhdG9ycy5wdXNoKGRlY29yYXRvcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKiogUmVwbGFjZSB0aGUgbWV0aG9kIGJvZHkgbGluZXMgKHVzZWQgYnkgZmVhdHVyZXMgdGhhdCBleHRlbmQgZ2VuZXJhdGVkIGJlaGF2aW91cikuICovXG5cdHB1YmxpYyBzZXRCb2R5KGJvZHk6IHN0cmluZ1tdKTogdGhpcyB7XG5cdFx0dGhpcy5fYm9keSA9IGJvZHk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgc2V0QXN5bmMoaXNBc3luYyA9IHRydWUpOiB0aGlzIHtcblx0XHR0aGlzLl9pc0FzeW5jID0gaXNBc3luYztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyByZW5kZXIoKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGZvciAoY29uc3QgZCBvZiB0aGlzLl9leHRyYURlY29yYXRvcnMpIHtcblx0XHRcdGxpbmVzLnB1c2goYFxcdCR7ZH1gKTtcblx0XHR9XG5cdFx0bGluZXMucHVzaChgXFx0JHt0aGlzLl9odHRwRGVjb3JhdG9yfWApO1xuXHRcdGNvbnN0IGFzeW5jS3cgPSB0aGlzLl9pc0FzeW5jID8gXCJhc3luYyBcIiA6IFwiXCI7XG5cdFx0bGluZXMucHVzaChgXFx0cHVibGljICR7YXN5bmNLd30ke3RoaXMubmFtZX0oJHt0aGlzLl9wYXJhbXN9KSB7YCk7XG5cdFx0Zm9yIChjb25zdCBsaW5lIG9mIHRoaXMuX2JvZHkpIHtcblx0XHRcdGxpbmVzLnB1c2goYFxcdFxcdCR7bGluZX1gKTtcblx0XHR9XG5cdFx0bGluZXMucHVzaChcIlxcdH1cIik7XG5cdFx0cmV0dXJuIGxpbmVzO1xuXHR9XG59XG5cbi8qKlxuICogTW9kZWwgZm9yIGBwcm9qZWN0cy9hcGkvc3JjL2NvbnRyb2xsZXJzL2hlbGxvLmNvbnRyb2xsZXIudHNgLlxuICpcbiAqIFByZS1pbml0aWFsaXNlZCB3aXRoIGFsbCByb3V0ZXMgYW5kIHRoZWlyIEhUVFAgZGVjb3JhdG9ycy4gRmVhdHVyZXMgbXV0YXRlXG4gKiB0aGUgbW9kZWwgdmlhIGBnZXRNZXRob2QobmFtZSkuYWRkRGVjb3JhdG9yKC4uLilgLCBgYWRkRGVjb3JhdG9yKC4uLilgIChjbGFzc1xuICogbGV2ZWwpLCBgYWRkQ29ydGV4SW1wb3J0KC4uLilgLCBgYWRkSW1wb3J0KC4uLilgLCBhbmQgYGFkZENvbnN0cnVjdG9yUGFyYW0oLi4uKWAuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb250cm9sbGVyU291cmNlRmlsZSBpbXBsZW1lbnRzIEtleWVkTW9kZWwge1xuXHRwdWJsaWMgcmVhZG9ubHkga2V5ID0gV0VMTF9LTk9XTl9GSUxFUy5DT05UUk9MTEVSX1RTO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgX2NvcnRleEltcG9ydHMgPSBuZXcgSW1wb3J0R3JvdXAoKVxuXHRcdC5hZGQoXCJDb250cm9sbGVyXCIpXG5cdFx0LmFkZChcIkRlbGV0ZVwiKVxuXHRcdC5hZGQoXCJGaWVsZFwiKVxuXHRcdC5hZGQoXCJHZXRcIilcblx0XHQuYWRkKFwiUGFyYW1cIilcblx0XHQuYWRkKFwiUG9zdFwiKVxuXHRcdC5hZGQoXCJQdXRcIilcblx0XHQuYWRkKFwiUXVlcnlcIik7XG5cblx0cHJpdmF0ZSByZWFkb25seSBfZXh0cmFJbXBvcnRHcm91cHMgPSBuZXcgTWFwPHN0cmluZywgSW1wb3J0R3JvdXA+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2NsYXNzRGVjb3JhdG9yczogc3RyaW5nW10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBfY3RvclBhcmFtczogc3RyaW5nW10gPSBbXCJwcml2YXRlIHJlYWRvbmx5IHNhbXBsZTogU2FtcGxlU2VydmljZVwiXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9tZXRob2RzID0gbmV3IE1hcDxzdHJpbmcsIENvbnRyb2xsZXJNZXRob2Q+KFtcblx0XHRbXG5cdFx0XHRcImdldEFsbFwiLFxuXHRcdFx0bmV3IENvbnRyb2xsZXJNZXRob2QoXCJnZXRBbGxcIiwgXCJAR2V0KClcIiwgJ0BRdWVyeShcImZpbHRlclwiKSBmaWx0ZXI6IHN0cmluZycsIHRydWUsIFtcblx0XHRcdFx0XCJjb25zdCBncmVldGluZyA9IGF3YWl0IHRoaXMuc2FtcGxlLmdldEdyZWV0aW5nKCk7XCIsXG5cdFx0XHRcdFwicmV0dXJuIHsgZmlsdGVyLCBtZXNzYWdlOiBncmVldGluZyB9O1wiLFxuXHRcdFx0XSksXG5cdFx0XSxcblx0XHRbXG5cdFx0XHRcImdldE9uZVwiLFxuXHRcdFx0bmV3IENvbnRyb2xsZXJNZXRob2QoXG5cdFx0XHRcdFwiZ2V0T25lXCIsXG5cdFx0XHRcdCdAR2V0KFwiLzppZFwiKScsXG5cdFx0XHRcdCdAUGFyYW0oXCJpZFwiKSBpZDogc3RyaW5nJyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UZW1wbGF0ZUN1cmx5SW5TdHJpbmc6IHRlbXBsYXRlIGxpdGVyYWwgaW4gZ2VuZXJhdGVkIGNvZGVcblx0XHRcdFx0W1wicmV0dXJuIHsgaWQsIG1lc3NhZ2U6IGBIZWxsbyAke2lkfSFgIH07XCJdLFxuXHRcdFx0KSxcblx0XHRdLFxuXHRcdFtcblx0XHRcdFwiY3JlYXRlXCIsXG5cdFx0XHRuZXcgQ29udHJvbGxlck1ldGhvZChcImNyZWF0ZVwiLCAnQFBvc3QoXCIvXCIpJywgXCJib2R5OiBIZWxsb0JvZHlcIiwgZmFsc2UsIFtcblx0XHRcdFx0XCJyZXR1cm4geyBtZXNzYWdlOiBib2R5Lm1lc3NhZ2UgfTtcIixcblx0XHRcdF0pLFxuXHRcdF0sXG5cdFx0W1xuXHRcdFx0XCJ1cGRhdGVcIixcblx0XHRcdG5ldyBDb250cm9sbGVyTWV0aG9kKFxuXHRcdFx0XHRcInVwZGF0ZVwiLFxuXHRcdFx0XHQnQFB1dChcIi86aWRcIiknLFxuXHRcdFx0XHQnQFBhcmFtKFwiaWRcIikgaWQ6IHN0cmluZywgYm9keTogSGVsbG9Cb2R5Jyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFtcInJldHVybiB7IGlkLCBtZXNzYWdlOiBib2R5Lm1lc3NhZ2UgfTtcIl0sXG5cdFx0XHQpLFxuXHRcdF0sXG5cdFx0W1xuXHRcdFx0XCJyZW1vdmVcIixcblx0XHRcdG5ldyBDb250cm9sbGVyTWV0aG9kKFwicmVtb3ZlXCIsICdARGVsZXRlKFwiLzppZFwiKScsICdAUGFyYW0oXCJpZFwiKSBpZDogc3RyaW5nJywgZmFsc2UsIFtcblx0XHRcdFx0XCJyZXR1cm4geyBpZCwgZGVsZXRlZDogdHJ1ZSB9O1wiLFxuXHRcdFx0XSksXG5cdFx0XSxcblx0XSk7XG5cblx0LyoqIFJldHJpZXZlIGEgbWV0aG9kIGJ5IG5hbWUgdG8gbXV0YXRlIGl0cyBkZWNvcmF0b3JzLiAqL1xuXHRwdWJsaWMgZ2V0TWV0aG9kKG5hbWU6IHN0cmluZyk6IENvbnRyb2xsZXJNZXRob2Qge1xuXHRcdGNvbnN0IG0gPSB0aGlzLl9tZXRob2RzLmdldChuYW1lKTtcblx0XHRpZiAobSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoYE5vIG1ldGhvZCAnJHtuYW1lfScgb24gQ29udHJvbGxlclNvdXJjZUZpbGVgKTtcblx0XHRyZXR1cm4gbTtcblx0fVxuXG5cdC8qKiBBZGQgYSBjbGFzcy1sZXZlbCBkZWNvcmF0b3IgKGUuZy4gYEBBdXRob3JpemVgKS4gKi9cblx0cHVibGljIGFkZERlY29yYXRvcihkZWNvcmF0b3I6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX2NsYXNzRGVjb3JhdG9ycy5wdXNoKGRlY29yYXRvcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKiogQWRkIGEgbmFtZWQgaW1wb3J0IGZyb20gYEBkZWNvaGVyZS9jb3J0ZXhgLiAqL1xuXHRwdWJsaWMgYWRkQ29ydGV4SW1wb3J0KG5hbWU6IHN0cmluZywgdHlwZU9ubHkgPSBmYWxzZSk6IHRoaXMge1xuXHRcdHRoaXMuX2NvcnRleEltcG9ydHMuYWRkKG5hbWUsIHR5cGVPbmx5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBBZGQgYSBuYW1lZCBpbXBvcnQgZnJvbSBhbnkgb3RoZXIgbW9kdWxlLiAqL1xuXHRwdWJsaWMgYWRkSW1wb3J0KG5hbWU6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0eXBlT25seSA9IGZhbHNlKTogdGhpcyB7XG5cdFx0Y29uc3QgZ3JvdXAgPSB0aGlzLl9leHRyYUltcG9ydEdyb3Vwcy5nZXQoZnJvbSkgPz8gbmV3IEltcG9ydEdyb3VwKCk7XG5cdFx0Z3JvdXAuYWRkKG5hbWUsIHR5cGVPbmx5KTtcblx0XHR0aGlzLl9leHRyYUltcG9ydEdyb3Vwcy5zZXQoZnJvbSwgZ3JvdXApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZCBhIGNvbnN0cnVjdG9yIHBhcmFtZXRlciAoZS5nLiBhbiBpbmplY3RlZCBkZXBlbmRlbmN5KS4gKi9cblx0cHVibGljIGFkZENvbnN0cnVjdG9yUGFyYW0ocGFyYW06IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX2N0b3JQYXJhbXMucHVzaChwYXJhbSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG5cdFx0XHR0aGlzLl9jb3J0ZXhJbXBvcnRzLnJlbmRlcihcIkBkZWNvaGVyZS9jb3J0ZXhcIiksXG5cdFx0XHQnaW1wb3J0IHsgU2FtcGxlU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9zYW1wbGUuc2VydmljZS5qc1wiOycsXG5cdFx0XTtcblxuXHRcdGZvciAoY29uc3QgW2Zyb20sIGdyb3VwXSBvZiB0aGlzLl9leHRyYUltcG9ydEdyb3Vwcykge1xuXHRcdFx0bGluZXMucHVzaChncm91cC5yZW5kZXIoZnJvbSkpO1xuXHRcdH1cblxuXHRcdGxpbmVzLnB1c2goXG5cdFx0XHRcIlwiLFxuXHRcdFx0XCJjbGFzcyBIZWxsb0JvZHkge1wiLFxuXHRcdFx0J1xcdEBGaWVsZChcImJvZHlcIiwgXCJtZXNzYWdlXCIpJyxcblx0XHRcdFwiXFx0cHVibGljIG1lc3NhZ2UhOiBzdHJpbmc7XCIsXG5cdFx0XHRcIn1cIixcblx0XHRcdFwiXCIsXG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3QgZCBvZiB0aGlzLl9jbGFzc0RlY29yYXRvcnMpIHtcblx0XHRcdGxpbmVzLnB1c2goZCk7XG5cdFx0fVxuXHRcdGxpbmVzLnB1c2goJ0BDb250cm9sbGVyKHsgcHJlZml4OiBcIi9oZWxsb1wiIH0pJywgXCJleHBvcnQgY2xhc3MgSGVsbG9Db250cm9sbGVyIHtcIiwgXCJcIik7XG5cblx0XHRsaW5lcy5wdXNoKFwiXFx0cHVibGljIGNvbnN0cnVjdG9yKFwiKTtcblx0XHRmb3IgKGNvbnN0IHAgb2YgdGhpcy5fY3RvclBhcmFtcykge1xuXHRcdFx0bGluZXMucHVzaChgXFx0XFx0JHtwfSxgKTtcblx0XHR9XG5cdFx0bGluZXMucHVzaChcIlxcdCkge31cIik7XG5cdFx0bGluZXMucHVzaChcIlwiKTtcblxuXHRcdGZvciAoY29uc3QgbWV0aG9kIG9mIHRoaXMuX21ldGhvZHMudmFsdWVzKCkpIHtcblx0XHRcdGxpbmVzLnB1c2goLi4ubWV0aG9kLnJlbmRlcigpLCBcIlwiKTtcblx0XHR9XG5cblx0XHRsaW5lcy5wdXNoKFwifVwiLCBcIlwiKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInNyYy9jb250cm9sbGVycy9oZWxsby5jb250cm9sbGVyLnRzXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IGxpbmVzLmpvaW4oXCJcXG5cIiksXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJDb250cm9sbGVyTWV0aG9kIiwiQ29udHJvbGxlclNvdXJjZUZpbGUiLCJJbXBvcnRHcm91cCIsIl92YWx1ZXMiLCJfdHlwZXMiLCJhZGQiLCJuYW1lIiwidHlwZU9ubHkiLCJpbmNsdWRlcyIsInB1c2giLCJ0eXBlSWR4IiwiaW5kZXhPZiIsInNwbGljZSIsInJlbmRlciIsImZyb20iLCJ2YWx1ZXMiLCJzb3J0IiwidHlwZXMiLCJtYXAiLCJuIiwiam9pbiIsIl9leHRyYURlY29yYXRvcnMiLCJfYm9keSIsIl9pc0FzeW5jIiwiX2h0dHBEZWNvcmF0b3IiLCJfcGFyYW1zIiwiaXNBc3luYyIsImJvZHkiLCJhZGREZWNvcmF0b3IiLCJkZWNvcmF0b3IiLCJzZXRCb2R5Iiwic2V0QXN5bmMiLCJsaW5lcyIsImQiLCJhc3luY0t3IiwibGluZSIsImtleSIsIldFTExfS05PV05fRklMRVMiLCJDT05UUk9MTEVSX1RTIiwiX2NvcnRleEltcG9ydHMiLCJfZXh0cmFJbXBvcnRHcm91cHMiLCJNYXAiLCJfY2xhc3NEZWNvcmF0b3JzIiwiX2N0b3JQYXJhbXMiLCJfbWV0aG9kcyIsImdldE1ldGhvZCIsIm0iLCJnZXQiLCJFcnJvciIsImFkZENvcnRleEltcG9ydCIsImFkZEltcG9ydCIsImdyb3VwIiwic2V0IiwiYWRkQ29uc3RydWN0b3JQYXJhbSIsInBhcmFtIiwiZmlsZXMiLCJwIiwibWV0aG9kIiwiZmlsZVBhdGgiLCJjb250ZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQWtDYUE7ZUFBQUE7O1FBdURBQztlQUFBQTs7O3VCQXpGb0I7QUFHakMsaUZBQWlGLEdBQ2pGLE1BQU1DO0lBQ1lDLFVBQW9CLEVBQUUsQ0FBQztJQUN2QkMsU0FBbUIsRUFBRSxDQUFDO0lBRWhDQyxJQUFJQyxJQUFZLEVBQUVDLFdBQVcsS0FBSyxFQUFRO1FBQ2hELElBQUlBLFVBQVU7WUFDYixrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQ0osT0FBTyxDQUFDSyxRQUFRLENBQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUNGLE1BQU0sQ0FBQ0ksUUFBUSxDQUFDRixPQUFPO2dCQUNoRSxJQUFJLENBQUNGLE1BQU0sQ0FBQ0ssSUFBSSxD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
@@ -47,6 +47,8 @@ class MainSourceFile {
47
47
  _builderCalls = [];
48
48
  _entities = [];
49
49
  _repositories = [];
50
+ _services = [];
51
+ _typeOrmSeed;
50
52
  constructor(appName){
51
53
  this.appName = appName;
52
54
  }
@@ -75,6 +77,17 @@ class MainSourceFile {
75
77
  this._repositories.push(repo);
76
78
  return this;
77
79
  }
80
+ /** Adds a service registered in `.withServices()`. */ addService(service) {
81
+ this._services.push(service);
82
+ return this;
83
+ }
84
+ /**
85
+ * Inline seed callback body for `withTypeOrm({ seed })`.
86
+ * Receives `dataSource` in scope. Example: `await dataSource.getRepository(User).save(...)`.
87
+ */ setTypeOrmSeed(seedBody) {
88
+ this._typeOrmSeed = seedBody;
89
+ return this;
90
+ }
78
91
  files() {
79
92
  const imports = [
80
93
  'import "@decohere/scribe-pino";',
@@ -90,20 +103,31 @@ class MainSourceFile {
90
103
  for (const r of this._repositories){
91
104
  imports.push(`import { ${r.className} } from "${r.importPath}";`);
92
105
  }
106
+ for (const s of this._services){
107
+ imports.push(`import { ${s.className} } from "${s.importPath}";`);
108
+ }
93
109
  for (const [from, group] of this._extraImports){
94
110
  imports.push(group.render(from));
95
111
  }
96
112
  imports.push('import { HelloController } from "./controllers/hello.controller.js";');
113
+ const serviceRegs = [
114
+ "cb.registerSingleton(SampleService);",
115
+ ...this._services.map((s)=>s.scope === "request" ? `cb.registerRequestScoped(${s.className});` : `cb.registerSingleton(${s.className});`)
116
+ ].join(" ");
97
117
  const builderCalls = [
98
118
  `\t.withHttpProvider(FastifyProvider)`,
99
119
  `\t.withConfiguration(YamlDataSource)`,
100
120
  ...this._builderCalls.map((c)=>`\t${c}`),
101
- `\t.withServices((cb) => { cb.registerSingleton(SampleService); })`
121
+ `\t.withServices((cb) => { ${serviceRegs} })`
102
122
  ];
103
123
  if (this._entities.length > 0) {
104
124
  const entities = this._entities.map((e)=>e.className).join(", ");
105
125
  const repos = this._repositories.map((r)=>r.className).join(", ");
106
- builderCalls.push(`\t.withTypeOrm({ entities: [${entities}], repositories: [${repos}] })`);
126
+ if (this._typeOrmSeed) {
127
+ builderCalls.push(`\t.withTypeOrm({ entities: [${entities}], repositories: [${repos}], seed: async (dataSource) => { ${this._typeOrmSeed} } })`);
128
+ } else {
129
+ builderCalls.push(`\t.withTypeOrm({ entities: [${entities}], repositories: [${repos}] })`);
130
+ }
107
131
  }
108
132
  builderCalls.push(`\t.withControllers(HelloController)`);
109
133
  const content = [
@@ -115,7 +139,7 @@ class MainSourceFile {
115
139
  ...builderCalls,
116
140
  `\t.build();`,
117
141
  "",
118
- "await app.start({ port: 3000 });",
142
+ "await app.start({ port: Number(process.env.PORT) || 3000 });",
119
143
  "",
120
144
  "export default app;",
121
145
  ""
@@ -129,4 +153,4 @@ class MainSourceFile {
129
153
  }
130
154
  }
131
155
 
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL21vZGVscy9tYWluLXNvdXJjZS1maWxlLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwsIFNvdXJjZUZpbGUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFR5cGVPcm1JbXBvcnQgPSB7IGNsYXNzTmFtZTogc3RyaW5nOyBpbXBvcnRQYXRoOiBzdHJpbmcgfTtcblxuLyoqIFRyYWNrcyBuYW1lZCBpbXBvcnRzIGZyb20gYSBzaW5nbGUgbW9kdWxlIHBhdGgsIHNwbGl0IGludG8gdmFsdWVzIGFuZCB0eXBlcy4gKi9cbmNsYXNzIEltcG9ydEdyb3VwIHtcblx0cHJpdmF0ZSByZWFkb25seSBfdmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF90eXBlczogc3RyaW5nW10gPSBbXTtcblxuXHRwdWJsaWMgYWRkKG5hbWU6IHN0cmluZywgdHlwZU9ubHkgPSBmYWxzZSk6IHRoaXMge1xuXHRcdGlmICh0eXBlT25seSkge1xuXHRcdFx0Ly8gVmFsdWUgaW1wb3J0IGFscmVhZHkgcHJlc2VudCDigJQgdmFsdWUgd2lucywgc2tpcFxuXHRcdFx0aWYgKCF0aGlzLl92YWx1ZXMuaW5jbHVkZXMobmFtZSkgJiYgIXRoaXMuX3R5cGVzLmluY2x1ZGVzKG5hbWUpKSB7XG5cdFx0XHRcdHRoaXMuX3R5cGVzLnB1c2gobmFtZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFByb21vdGU6IHJlbW92ZSBmcm9tIHR5cGVzIGlmIGl0IHdhcyBwcmV2aW91c2x5IHR5cGUtb25seVxuXHRcdFx0Y29uc3QgdHlwZUlkeCA9IHRoaXMuX3R5cGVzLmluZGV4T2YobmFtZSk7XG5cdFx0XHRpZiAodHlwZUlkeCAhPT0gLTEpIHRoaXMuX3R5cGVzLnNwbGljZSh0eXBlSWR4LCAxKTtcblx0XHRcdGlmICghdGhpcy5fdmFsdWVzLmluY2x1ZGVzKG5hbWUpKSB0aGlzLl92YWx1ZXMucHVzaChuYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgcmVuZGVyKGZyb206IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdmFsdWVzID0gWy4uLnRoaXMuX3ZhbHVlc10uc29ydCgpO1xuXHRcdGNvbnN0IHR5cGVzID0gWy4uLnRoaXMuX3R5cGVzXS5zb3J0KCkubWFwKChuKSA9PiBgdHlwZSAke259YCk7XG5cdFx0cmV0dXJuIGBpbXBvcnQgeyAke1suLi52YWx1ZXMsIC4uLnR5cGVzXS5qb2luKFwiLCBcIil9IH0gZnJvbSBcIiR7ZnJvbX1cIjtgO1xuXHR9XG59XG5cbi8qKlxuICogTW9kZWwgZm9yIGBwcm9qZWN0cy9hcGkvc3JjL21haW4udHNgLlxuICpcbiAqIFN0YXJ0cyB3aXRoIHRoZSBtaW5pbWFsIEhUVFAgKyBZQU1MIGNvbmZpZyBzZXR1cC4gRmVhdHVyZXMgbXV0YXRlIHRoZSBtb2RlbFxuICogYnkgY2FsbGluZyBhZGRTaWRlRWZmZWN0SW1wb3J0IC8gYWRkSW1wb3J0IC8gYWRkQnVpbGRlckNhbGwgLyBhZGRFbnRpdHkgL1xuICogYWRkUmVwb3NpdG9yeS4gZmlsZXMoKSByZW5kZXJzIHdoYXRldmVyIGhhcyBiZWVuIGFjY3VtdWxhdGVkLlxuICovXG5leHBvcnQgY2xhc3MgTWFpblNvdXJjZUZpbGUgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuTUFJTl9UUztcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9zaWRlRWZmZWN0SW1wb3J0czogc3RyaW5nW10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBfZXh0cmFJbXBvcnRzID0gbmV3IE1hcDxzdHJpbmcsIEltcG9ydEdyb3VwPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9idWlsZGVyQ2FsbHM6IHN0cmluZ1tdID0gW107XG5cdHByaXZhdGUgcmVhZG9ubHkgX2VudGl0aWVzOiBUeXBlT3JtSW1wb3J0W10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBfcmVwb3NpdG9yaWVzOiBUeXBlT3JtSW1wb3J0W10gPSBbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhcHBOYW1lOiBzdHJpbmcpIHt9XG5cblx0LyoqIEFkZHMgYSBiYXJlIHNpZGUtZWZmZWN0IGltcG9ydCwgZS5nLiBgQGRlY29oZXJlL2NvcnRleC9hdXRoYC4gKi9cblx0cHVibGljIGFkZFNpZGVFZmZlY3RJbXBvcnQocGF0aDogc3RyaW5nKTogdGhpcyB7XG5cdFx0aWYgKCF0aGlzLl9zaWRlRWZmZWN0SW1wb3J0cy5pbmNsdWRlcyhwYXRoKSkgdGhpcy5fc2lkZUVmZmVjdEltcG9ydHMucHVzaChwYXRoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBBZGRzIGEgbmFtZWQgaW1wb3J0LCBlLmcuIGBpbXBvcnQgeyBGb28gfSBmcm9tIFwiYmFyXCJgLiAqL1xuXHRwdWJsaWMgYWRkSW1wb3J0KG5hbWU6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0eXBlT25seSA9IGZhbHNlKTogdGhpcyB7XG5cdFx0Y29uc3QgZ3JvdXAgPSB0aGlzLl9leHRyYUltcG9ydHMuZ2V0KGZyb20pID8/IG5ldyBJbXBvcnRHcm91cCgpO1xuXHRcdGdyb3VwLmFkZChuYW1lLCB0eXBlT25seSk7XG5cdFx0dGhpcy5fZXh0cmFJbXBvcnRzLnNldChmcm9tLCBncm91cCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIGJ1aWxkZXIgY2FsbCBpbnNlcnRlZCBhZnRlciBgLndpdGhDb25maWd1cmF0aW9uKClgIGFuZCBiZWZvcmVcblx0ICogYC53aXRoU2VydmljZXMoKWAuIFBhc3MgdGhlIGNhbGwgd2l0aG91dCBsZWFkaW5nIGRvdCwgZS5nLiBgLndpdGhBdXRoKClgLlxuXHQgKi9cblx0cHVibGljIGFkZEJ1aWxkZXJDYWxsKGNhbGw6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX2J1aWxkZXJDYWxscy5wdXNoKGNhbGwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZHMgYSBUeXBlT1JNIGVudGl0eSDigJQgaW1wb3J0IGFuZCBlbnRyeSBpbiBgd2l0aFR5cGVPcm0oeyBlbnRpdGllcyB9KWAuICovXG5cdHB1YmxpYyBhZGRFbnRpdHkoZW50aXR5OiBUeXBlT3JtSW1wb3J0KTogdGhpcyB7XG5cdFx0dGhpcy5fZW50aXRpZXMucHVzaChlbnRpdHkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZHMgYSBUeXBlT1JNIHJlcG9zaXRvcnkg4oCUIGltcG9ydCBhbmQgZW50cnkgaW4gYHdpdGhUeXBlT3JtKHsgcmVwb3NpdG9yaWVzIH0pYC4gKi9cblx0cHVibGljIGFkZFJlcG9zaXRvcnkocmVwbzogVHlwZU9ybUltcG9ydCk6IHRoaXMge1xuXHRcdHRoaXMuX3JlcG9zaXRvcmllcy5wdXNoKHJlcG8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgaW1wb3J0czogc3RyaW5nW10gPSBbXG5cdFx0XHQnaW1wb3J0IFwiQGRlY29oZXJlL3NjcmliZS1waW5vXCI7Jyxcblx0XHRcdCdpbXBvcnQgXCJAZGVjb2hlcmUvY29ydGV4L2h0dHBcIjsnLFxuXHRcdF07XG5cblx0XHRmb3IgKGNvbnN0IHBhdGggb2YgdGhpcy5fc2lkZUVmZmVjdEltcG9ydHMpIHtcblx0XHRcdGltcG9ydHMucHVzaChgaW1wb3J0IFwiJHtwYXRofVwiO2ApO1xuXHRcdH1cblxuXHRcdGltcG9ydHMucHVzaChcblx0XHRcdCdpbXBvcnQgXCJAZGVjb2hlcmUvcHJvdG9jb2xcIjsnLFxuXHRcdFx0J2ltcG9ydCB7IFlhbWxEYXRhU291cmNlIH0gZnJvbSBcIkBkZWNvaGVyZS9wcm90b2NvbFwiOycsXG5cdFx0XHQnaW1wb3J0IHsgQnVpbGRlciB9IGZyb20gXCJAZGVjb2hlcmUvY29ydGV4XCI7Jyxcblx0XHRcdCdpbXBvcnQgeyBGYXN0aWZ5UHJvdmlkZXIgfSBmcm9tIFwiQGRlY29oZXJlL2NvcnRleC9wcm92aWRlcnNcIjsnLFxuXHRcdFx0J2ltcG9ydCB7IHNjcmliZSB9IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7Jyxcblx0XHRcdCdpbXBvcnQgeyBTYW1wbGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvc2FtcGxlLnNlcnZpY2UuanNcIjsnLFxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGUgb2YgdGhpcy5fZW50aXRpZXMpIHtcblx0XHRcdGltcG9ydHMucHVzaChgaW1wb3J0IHsgJHtlLmNsYXNzTmFtZX0gfSBmcm9tIFwiJHtlLmltcG9ydFBhdGh9XCI7YCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCByIG9mIHRoaXMuX3JlcG9zaXRvcmllcykge1xuXHRcdFx0aW1wb3J0cy5wdXNoKGBpbXBvcnQgeyAke3IuY2xhc3NOYW1lfSB9IGZyb20gXCIke3IuaW1wb3J0UGF0aH1cIjtgKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFtmcm9tLCBncm91cF0gb2YgdGhpcy5fZXh0cmFJbXBvcnRzKSB7XG5cdFx0XHRpbXBvcnRzLnB1c2goZ3JvdXAucmVuZGVyKGZyb20pKTtcblx0XHR9XG5cblx0XHRpbXBvcnRzLnB1c2goJ2ltcG9ydCB7IEhlbGxvQ29udHJvbGxlciB9IGZyb20gXCIuL2NvbnRyb2xsZXJzL2hlbGxvLmNvbnRyb2xsZXIuanNcIjsnKTtcblxuXHRcdGNvbnN0IGJ1aWxkZXJDYWxsczogc3RyaW5nW10gPSBbXG5cdFx0XHRgXFx0LndpdGhIdHRwUHJvdmlkZXIoRmFzdGlmeVByb3ZpZGVyKWAsXG5cdFx0XHRgXFx0LndpdGhDb25maWd1cmF0aW9uKFlhbWxEYXRhU291cmNlKWAsXG5cdFx0XHQuLi50aGlzLl9idWlsZGVyQ2FsbHMubWFwKChjKSA9PiBgXFx0JHtjfWApLFxuXHRcdFx0YFxcdC53aXRoU2VydmljZXMoKGNiKSA9PiB7IGNiLnJlZ2lzdGVyU2luZ2xldG9uKFNhbXBsZVNlcnZpY2UpOyB9KWAsXG5cdFx0XTtcblxuXHRcdGlmICh0aGlzLl9lbnRpdGllcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBlbnRpdGllcyA9IHRoaXMuX2VudGl0aWVzLm1hcCgoZSkgPT4gZS5jbGFzc05hbWUpLmpvaW4oXCIsIFwiKTtcblx0XHRcdGNvbnN0IHJlcG9zID0gdGhpcy5fcmVwb3NpdG9yaWVzLm1hcCgocikgPT4gci5jbGFzc05hbWUpLmpvaW4oXCIsIFwiKTtcblx0XHRcdGJ1aWxkZXJDYWxscy5wdXNoKFxuXHRcdFx0XHRgXFx0LndpdGhUeXBlT3JtKHsgZW50aXRpZXM6IFske2VudGl0aWVzfV0sIHJlcG9zaXRvcmllczogWyR7cmVwb3N9XSB9KWAsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGJ1aWxkZXJDYWxscy5wdXNoKGBcXHQud2l0aENvbnRyb2xsZXJzKEhlbGxvQ29udHJvbGxlcilgKTtcblxuXHRcdGNvbnN0IGNvbnRlbnQgPSBbXG5cdFx0XHQuLi5pbXBvcnRzLFxuXHRcdFx0XCJcIixcblx0XHRcdFwic2NyaWJlLmV4dGVuZC53aXRoUGlub1ByZXR0eSgpO1wiLFxuXHRcdFx0XCJcIixcblx0XHRcdGBjb25zdCBhcHAgPSBhd2FpdCBCdWlsZGVyLmNyZWF0ZSh7IGFwcGxpY2F0aW9uTmFtZTogXCIke3RoaXMuYXBwTmFtZX1cIiB9KWAsXG5cdFx0XHQuLi5idWlsZGVyQ2FsbHMsXG5cdFx0XHRgXFx0LmJ1aWxkKCk7YCxcblx0XHRcdFwiXCIsXG5cdFx0XHRcImF3YWl0IGFwcC5zdGFydCh7IHBvcnQ6IDMwMDAgfSk7XCIsXG5cdFx0XHRcIlwiLFxuXHRcdFx0XCJleHBvcnQgZGVmYXVsdCBhcHA7XCIsXG5cdFx0XHRcIlwiLFxuXHRcdF0uam9pbihcIlxcblwiKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInNyYy9tYWluLnRzXCIsXG5cdFx0XHRcdGNvbnRlbnQsXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJNYWluU291cmNlRmlsZSIsIkltcG9ydEdyb3VwIiwiX3ZhbHVlcyIsIl90eXBlcyIsImFkZCIsIm5hbWUiLCJ0eXBlT25seSIsImluY2x1ZGVzIiwicHVzaCIsInR5cGVJZHgiLCJpbmRleE9mIiwic3BsaWNlIiwicmVuZGVyIiwiZnJvbSIsInZhbHVlcyIsInNvcnQiLCJ0eXBlcyIsIm1hcCIsIm4iLCJqb2luIiwia2V5IiwiV0VMTF9LTk9XTl9GSUxFUyIsIk1BSU5fVFMiLCJfc2lkZUVmZmVjdEltcG9ydHMiLCJfZXh0cmFJbXBvcnRzIiwiTWFwIiwiX2J1aWxkZXJDYWxscyIsIl9lbnRpdGllcyIsIl9yZXBvc2l0b3JpZXMiLCJhcHBOYW1lIiwiYWRkU2lkZUVmZmVjdEltcG9ydCIsInBhdGgiLCJhZGRJbXBvcnQiLCJncm91cCIsImdldCIsInNldCIsImFkZEJ1aWxkZXJDYWxsIiwiY2FsbCIsImFkZEVudGl0eSIsImVudGl0eSIsImFkZFJlcG9zaXRvcnkiLCJyZXBvIiwiZmlsZXMiLCJpbXBvcnRzIiwiZSIsImNsYXNzTmFtZSIsImltcG9ydFBhdGgiLCJyIiwiYnVpbGRlckNhbGxzIiwiYyIsImxlbmd0aCIsImVudGl0aWVzIiwicmVwb3MiLCJjb250ZW50IiwiZmlsZVBhdGgiXSwibWFwcGluZ3MiOiI7Ozs7K0JBdUNhQTs7O2VBQUFBOzs7dUJBdkNvQjtBQUtqQyxpRkFBaUYsR0FDakYsTUFBTUM7SUFDWUMsVUFBb0IsRUFBRSxDQUFDO0lBQ3ZCQyxTQUFtQixFQUFFLENBQUM7SUFFaENDLElBQUlDLElBQVksRUFBRUMsV0FBVyxLQUFLLEVBQVE7UUFDaEQsSUFBSUEsVUFBVTtZQUNiLGtEQUFrRDtZQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDSixPQUFPLENBQUNLLFFBQVEsQ0FBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQ0YsTUFBTSxDQUFDSSxRQUFRLENBQUNGLE9BQU87Z0JBQ2hFLElBQUksQ0FBQ0YsTUFBTSxDQUFDSyxJQUFJLENBQUNIO1lBQ2xCO1FBQ0QsT0FBTztZQUNOLDREQUE0RDtZQUM1RCxNQUFNSSxVQUFVLElBQUksQ0FBQ04sTUFBTSxDQUFDTyxPQUFPLENBQUNMO1lBQ3BDLElBQUlJLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQ04sTUFBTSxDQUFDUSxNQUFNLENBQUNGLFNBQVM7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQ1AsT0FBTyxDQUFDSyxRQUFRLENBQUNGLE9BQU8sSUFBSSxDQUFDSCxPQUFPLENBQUNNLElBQUksQ0FBQ0g7UUFDckQ7UUFDQSxPQUFPLElBQUk7SUFDWjtJQUVPTyxPQUFPQyxJQUFZLEVBQVU7UUFDbkMsTUFBTUMsU0FBUztlQUFJLElBQUksQ0FBQ1osT0FBTztTQUFDLENBQUNhLElBQUk7UUFDckMsTUFBTUMsUUFBUTtlQUFJLElBQUksQ0FBQ2IsTUFBTTtTQUFDLENBQUNZLElBQUksR0FBR0UsR0FBRyxDQUFDLENBQUNDLElBQU0sQ0FBQyxLQUFLLEVBQUVBLEdBQUc7UUFDNUQsT0FBTyxDQUFDLFNBQVMsRUFBRTtlQUFJSjtlQUFXRTtTQUFNLENBQUNHLElBQUksQ0FBQyxNQUFNLFNBQVMsRUFBRU4sS0FBSyxFQUFFLENBQUM7SUFDeEU7QUFDRDtBQVNPLE1BQU1iOztJQUNJb0IsTUFBTUMsdUJBQWdCLENBQUNDLE9BQU8sQ0FBQztJQUU5QkMscUJBQStCLEVBQUUsQ0FBQztJQUNsQ0MsZ0JBQWdCLElBQUlDLE1BQTJCO0lBQy9DQyxnQkFBMEIsRUFBRSxDQUFDO0lBQzdCQyxZQUE2QixFQUFFLENBQUM7SUFDaENDLGdCQUFpQyxFQUFFLENBQUM7SUFFckQsWUFBbUIsQUFBaUJDLE9BQWUsQ0FBRTthQUFqQkEsVUFBQUE7SUFBa0I7SUFFdEQsa0VBQWtFLEdBQ2xFLEFBQU9DLG9CQUFvQkMsSUFBWSxFQUFRO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUNSLGtCQUFrQixDQUFDaEIsUUFBUSxDQUFDd0IsT0FBTyxJQUFJLENBQUNSLGtCQUFrQixDQUFDZixJQUFJLENBQUN1QjtRQUMxRSxPQUFPLElBQUk7SUFDWjtJQUVBLDJEQUEyRCxHQUMzRCxBQUFPQyxVQUFVM0IsSUFBWSxFQUFFUSxJQUFZLEVBQUVQLFdBQVcsS0FBSyxFQUFRO1FBQ3BFLE1BQU0yQixRQUFRLElBQUksQ0FBQ1QsYUFBYSxDQUFDVSxHQUFHLENBQUNyQixTQUFTLElBQUlaO1FBQ2xEZ0MsTUFBTTdCLEdBQUcsQ0FBQ0MsTUFBTUM7UUFDaEIsSUFBSSxDQUFDa0IsYUFBYSxDQUFDVyxHQUFHLENBQUN0QixNQUFNb0I7UUFDN0IsT0FBTyxJQUFJO0lBQ1o7SUFFQTs7O0VBR0MsR0FDRCxBQUFPRyxlQUFlQyxJQUFZLEVBQVE7UUFDekMsSUFBSSxDQUFDWCxhQUFhLENBQUNsQixJQUFJLENBQUM2QjtRQUN4QixPQUFPLElBQUk7SUFDWjtJQUVBLDZFQUE2RSxHQUM3RSxBQUFPQyxVQUFVQyxNQUFxQixFQUFRO1FBQzdDLElBQUksQ0FBQ1osU0FBUyxDQUFDbkIsSUFBSSxDQUFDK0I7UUFDcEIsT0FBTyxJQUFJO0lBQ1o7SUFFQSxxRkFBcUYsR0FDckYsQUFBT0MsY0FBY0MsSUFBbUIsRUFBUTtRQUMvQyxJQUFJLENBQUNiLGFBQWEsQ0FBQ3BCLElBQUksQ0FBQ2lDO1FBQ3hCLE9BQU8sSUFBSTtJQUNaO0lBRU9DLFFBQXNCO1FBQzVCLE1BQU1DLFVBQW9CO1lBQ3pCO1lBQ0E7U0FDQTtRQUVELEtBQUssTUFBTVosUUFBUSxJQUFJLENBQUNSLGtCQUFrQixDQUFFO1lBQzNDb0IsUUFBUW5DLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRXVCLEtBQUssRUFBRSxDQUFDO1FBQ2pDO1FBRUFZLFFBQVFuQyxJQUFJLENBQ1gsZ0NBQ0Esd0RBQ0EsK0NBQ0EsaUVBQ0EsOENBQ0E7UUFHRCxLQUFLLE1BQU1vQyxLQUFLLElBQUksQ0FBQ2pCLFNBQVMsQ0FBRTtZQUMvQmdCLFFBQVFuQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUVvQyxFQUFFQyxTQUFTLENBQUMsU0FBUyxFQUFFRCxFQUFFRSxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2pFO1FBRUEsS0FBSyxNQUFNQyxLQUFLLElBQUksQ0FBQ25CLGFBQWEsQ0FBRTtZQUNuQ2UsUUFBUW5DLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRXVDLEVBQUVGLFNBQVMsQ0FBQyxTQUFTLEVBQUVFLEVBQUVELFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDakU7UUFFQSxLQUFLLE1BQU0sQ0FBQ2pDLE1BQU1vQixNQUFNLElBQUksSUFBSSxDQUFDVCxhQUFhLENBQUU7WUFDL0NtQixRQUFRbkMsSUFBSSxDQUFDeUIsTUFBTXJCLE1BQU0sQ0FBQ0M7UUFDM0I7UUFFQThCLFFBQVFuQyxJQUFJLENBQUM7UUFFYixNQUFNd0MsZUFBeUI7WUFDOUIsQ0FBQyxvQ0FBb0MsQ0FBQztZQUN0QyxDQUFDLG9DQUFvQyxDQUFDO2VBQ25DLElBQUksQ0FBQ3RCLGFBQWEsQ0FBQ1QsR0FBRyxDQUFDLENBQUNnQyxJQUFNLENBQUMsRUFBRSxFQUFFQSxHQUFHO1lBQ3pDLENBQUMsaUVBQWlFLENBQUM7U0FDbkU7UUFFRCxJQUFJLElBQUksQ0FBQ3RCLFNBQVMsQ0FBQ3VCLE1BQU0sR0FBRyxHQUFHO1lBQzlCLE1BQU1DLFdBQVcsSUFBSSxDQUFDeEIsU0FBUyxDQUFDVixHQUFHLENBQUMsQ0FBQzJCLElBQU1BLEVBQUVDLFNBQVMsRUFBRTFCLElBQUksQ0FBQztZQUM3RCxNQUFNaUMsUUFBUSxJQUFJLENBQUN4QixhQUFhLENBQUNYLEdBQUcsQ0FBQyxDQUFDOEIsSUFBTUEsRUFBRUYsU0FBUyxFQUFFMUIsSUFBSSxDQUFDO1lBQzlENkIsYUFBYXhDLElBQUksQ0FDaEIsQ0FBQyw0QkFBNEIsRUFBRTJDLFNBQVMsa0JBQWtCLEVBQUVDLE1BQU0sSUFBSSxDQUFDO1FBRXpFO1FBRUFKLGFBQWF4QyxJQUFJLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQztRQUV2RCxNQUFNNkMsVUFBVTtlQUNaVjtZQUNIO1lBQ0E7WUFDQTtZQUNBLENBQUMscURBQXFELEVBQUUsSUFBSSxDQUFDZCxPQUFPLENBQUMsSUFBSSxDQUFDO2VBQ3ZFbUI7WUFDSCxDQUFDLFdBQVcsQ0FBQztZQUNiO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7U0FDQSxDQUFDN0IsSUFBSSxDQUFDO1FBRVAsT0FBTztZQUNOO2dCQUNDbUMsVUFBVTtnQkFDVkQ7WUFDRDtTQUNBO0lBQ0Y7QUFDRCJ9
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL21vZGVscy9tYWluLXNvdXJjZS1maWxlLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwsIFNvdXJjZUZpbGUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFR5cGVPcm1JbXBvcnQgPSB7IGNsYXNzTmFtZTogc3RyaW5nOyBpbXBvcnRQYXRoOiBzdHJpbmcgfTtcbmV4cG9ydCB0eXBlIFNlcnZpY2VJbXBvcnQgPSBUeXBlT3JtSW1wb3J0ICYgeyBzY29wZT86IFwic2luZ2xldG9uXCIgfCBcInJlcXVlc3RcIiB9O1xuXG4vKiogVHJhY2tzIG5hbWVkIGltcG9ydHMgZnJvbSBhIHNpbmdsZSBtb2R1bGUgcGF0aCwgc3BsaXQgaW50byB2YWx1ZXMgYW5kIHR5cGVzLiAqL1xuY2xhc3MgSW1wb3J0R3JvdXAge1xuXHRwcml2YXRlIHJlYWRvbmx5IF92YWx1ZXM6IHN0cmluZ1tdID0gW107XG5cdHByaXZhdGUgcmVhZG9ubHkgX3R5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdHB1YmxpYyBhZGQobmFtZTogc3RyaW5nLCB0eXBlT25seSA9IGZhbHNlKTogdGhpcyB7XG5cdFx0aWYgKHR5cGVPbmx5KSB7XG5cdFx0XHQvLyBWYWx1ZSBpbXBvcnQgYWxyZWFkeSBwcmVzZW50IOKAlCB2YWx1ZSB3aW5zLCBza2lwXG5cdFx0XHRpZiAoIXRoaXMuX3ZhbHVlcy5pbmNsdWRlcyhuYW1lKSAmJiAhdGhpcy5fdHlwZXMuaW5jbHVkZXMobmFtZSkpIHtcblx0XHRcdFx0dGhpcy5fdHlwZXMucHVzaChuYW1lKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gUHJvbW90ZTogcmVtb3ZlIGZyb20gdHlwZXMgaWYgaXQgd2FzIHByZXZpb3VzbHkgdHlwZS1vbmx5XG5cdFx0XHRjb25zdCB0eXBlSWR4ID0gdGhpcy5fdHlwZXMuaW5kZXhPZihuYW1lKTtcblx0XHRcdGlmICh0eXBlSWR4ICE9PSAtMSkgdGhpcy5fdHlwZXMuc3BsaWNlKHR5cGVJZHgsIDEpO1xuXHRcdFx0aWYgKCF0aGlzLl92YWx1ZXMuaW5jbHVkZXMobmFtZSkpIHRoaXMuX3ZhbHVlcy5wdXNoKG5hbWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyByZW5kZXIoZnJvbTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCB2YWx1ZXMgPSBbLi4udGhpcy5fdmFsdWVzXS5zb3J0KCk7XG5cdFx0Y29uc3QgdHlwZXMgPSBbLi4udGhpcy5fdHlwZXNdLnNvcnQoKS5tYXAoKG4pID0+IGB0eXBlICR7bn1gKTtcblx0XHRyZXR1cm4gYGltcG9ydCB7ICR7Wy4uLnZhbHVlcywgLi4udHlwZXNdLmpvaW4oXCIsIFwiKX0gfSBmcm9tIFwiJHtmcm9tfVwiO2A7XG5cdH1cbn1cblxuLyoqXG4gKiBNb2RlbCBmb3IgYHByb2plY3RzL2FwaS9zcmMvbWFpbi50c2AuXG4gKlxuICogU3RhcnRzIHdpdGggdGhlIG1pbmltYWwgSFRUUCArIFlBTUwgY29uZmlnIHNldHVwLiBGZWF0dXJlcyBtdXRhdGUgdGhlIG1vZGVsXG4gKiBieSBjYWxsaW5nIGFkZFNpZGVFZmZlY3RJbXBvcnQgLyBhZGRJbXBvcnQgLyBhZGRCdWlsZGVyQ2FsbCAvIGFkZEVudGl0eSAvXG4gKiBhZGRSZXBvc2l0b3J5LiBmaWxlcygpIHJlbmRlcnMgd2hhdGV2ZXIgaGFzIGJlZW4gYWNjdW11bGF0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBNYWluU291cmNlRmlsZSBpbXBsZW1lbnRzIEtleWVkTW9kZWwge1xuXHRwdWJsaWMgcmVhZG9ubHkga2V5ID0gV0VMTF9LTk9XTl9GSUxFUy5NQUlOX1RTO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgX3NpZGVFZmZlY3RJbXBvcnRzOiBzdHJpbmdbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9leHRyYUltcG9ydHMgPSBuZXcgTWFwPHN0cmluZywgSW1wb3J0R3JvdXA+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2J1aWxkZXJDYWxsczogc3RyaW5nW10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBfZW50aXRpZXM6IFR5cGVPcm1JbXBvcnRbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9yZXBvc2l0b3JpZXM6IFR5cGVPcm1JbXBvcnRbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9zZXJ2aWNlczogU2VydmljZUltcG9ydFtdID0gW107XG5cdHByaXZhdGUgX3R5cGVPcm1TZWVkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXBwTmFtZTogc3RyaW5nKSB7fVxuXG5cdC8qKiBBZGRzIGEgYmFyZSBzaWRlLWVmZmVjdCBpbXBvcnQsIGUuZy4gYEBkZWNvaGVyZS9jb3J0ZXgvYXV0aGAuICovXG5cdHB1YmxpYyBhZGRTaWRlRWZmZWN0SW1wb3J0KHBhdGg6IHN0cmluZyk6IHRoaXMge1xuXHRcdGlmICghdGhpcy5fc2lkZUVmZmVjdEltcG9ydHMuaW5jbHVkZXMocGF0aCkpIHRoaXMuX3NpZGVFZmZlY3RJbXBvcnRzLnB1c2gocGF0aCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKiogQWRkcyBhIG5hbWVkIGltcG9ydCwgZS5nLiBgaW1wb3J0IHsgRm9vIH0gZnJvbSBcImJhclwiYC4gKi9cblx0cHVibGljIGFkZEltcG9ydChuYW1lOiBzdHJpbmcsIGZyb206IHN0cmluZywgdHlwZU9ubHkgPSBmYWxzZSk6IHRoaXMge1xuXHRcdGNvbnN0IGdyb3VwID0gdGhpcy5fZXh0cmFJbXBvcnRzLmdldChmcm9tKSA/PyBuZXcgSW1wb3J0R3JvdXAoKTtcblx0XHRncm91cC5hZGQobmFtZSwgdHlwZU9ubHkpO1xuXHRcdHRoaXMuX2V4dHJhSW1wb3J0cy5zZXQoZnJvbSwgZ3JvdXApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBidWlsZGVyIGNhbGwgaW5zZXJ0ZWQgYWZ0ZXIgYC53aXRoQ29uZmlndXJhdGlvbigpYCBhbmQgYmVmb3JlXG5cdCAqIGAud2l0aFNlcnZpY2VzKClgLiBQYXNzIHRoZSBjYWxsIHdpdGhvdXQgbGVhZGluZyBkb3QsIGUuZy4gYC53aXRoQXV0aCgpYC5cblx0ICovXG5cdHB1YmxpYyBhZGRCdWlsZGVyQ2FsbChjYWxsOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9idWlsZGVyQ2FsbHMucHVzaChjYWxsKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBBZGRzIGEgVHlwZU9STSBlbnRpdHkg4oCUIGltcG9ydCBhbmQgZW50cnkgaW4gYHdpdGhUeXBlT3JtKHsgZW50aXRpZXMgfSlgLiAqL1xuXHRwdWJsaWMgYWRkRW50aXR5KGVudGl0eTogVHlwZU9ybUltcG9ydCk6IHRoaXMge1xuXHRcdHRoaXMuX2VudGl0aWVzLnB1c2goZW50aXR5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBBZGRzIGEgVHlwZU9STSByZXBvc2l0b3J5IOKAlCBpbXBvcnQgYW5kIGVudHJ5IGluIGB3aXRoVHlwZU9ybSh7IHJlcG9zaXRvcmllcyB9KWAuICovXG5cdHB1YmxpYyBhZGRSZXBvc2l0b3J5KHJlcG86IFR5cGVPcm1JbXBvcnQpOiB0aGlzIHtcblx0XHR0aGlzLl9yZXBvc2l0b3JpZXMucHVzaChyZXBvKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBBZGRzIGEgc2VydmljZSByZWdpc3RlcmVkIGluIGAud2l0aFNlcnZpY2VzKClgLiAqL1xuXHRwdWJsaWMgYWRkU2VydmljZShzZXJ2aWNlOiBTZXJ2aWNlSW1wb3J0KTogdGhpcyB7XG5cdFx0dGhpcy5fc2VydmljZXMucHVzaChzZXJ2aWNlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmxpbmUgc2VlZCBjYWxsYmFjayBib2R5IGZvciBgd2l0aFR5cGVPcm0oeyBzZWVkIH0pYC5cblx0ICogUmVjZWl2ZXMgYGRhdGFTb3VyY2VgIGluIHNjb3BlLiBFeGFtcGxlOiBgYXdhaXQgZGF0YVNvdXJjZS5nZXRSZXBvc2l0b3J5KFVzZXIpLnNhdmUoLi4uKWAuXG5cdCAqL1xuXHRwdWJsaWMgc2V0VHlwZU9ybVNlZWQoc2VlZEJvZHk6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX3R5cGVPcm1TZWVkID0gc2VlZEJvZHk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRjb25zdCBpbXBvcnRzOiBzdHJpbmdbXSA9IFtcblx0XHRcdCdpbXBvcnQgXCJAZGVjb2hlcmUvc2NyaWJlLXBpbm9cIjsnLFxuXHRcdFx0J2ltcG9ydCBcIkBkZWNvaGVyZS9jb3J0ZXgvaHR0cFwiOycsXG5cdFx0XTtcblxuXHRcdGZvciAoY29uc3QgcGF0aCBvZiB0aGlzLl9zaWRlRWZmZWN0SW1wb3J0cykge1xuXHRcdFx0aW1wb3J0cy5wdXNoKGBpbXBvcnQgXCIke3BhdGh9XCI7YCk7XG5cdFx0fVxuXG5cdFx0aW1wb3J0cy5wdXNoKFxuXHRcdFx0J2ltcG9ydCBcIkBkZWNvaGVyZS9wcm90b2NvbFwiOycsXG5cdFx0XHQnaW1wb3J0IHsgWWFtbERhdGFTb3VyY2UgfSBmcm9tIFwiQGRlY29oZXJlL3Byb3RvY29sXCI7Jyxcblx0XHRcdCdpbXBvcnQgeyBCdWlsZGVyIH0gZnJvbSBcIkBkZWNvaGVyZS9jb3J0ZXhcIjsnLFxuXHRcdFx0J2ltcG9ydCB7IEZhc3RpZnlQcm92aWRlciB9IGZyb20gXCJAZGVjb2hlcmUvY29ydGV4L3Byb3ZpZGVyc1wiOycsXG5cdFx0XHQnaW1wb3J0IHsgc2NyaWJlIH0gZnJvbSBcIkBkZWNvaGVyZS9zY3JpYmVcIjsnLFxuXHRcdFx0J2ltcG9ydCB7IFNhbXBsZVNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9zYW1wbGUuc2VydmljZS5qc1wiOycsXG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3QgZSBvZiB0aGlzLl9lbnRpdGllcykge1xuXHRcdFx0aW1wb3J0cy5wdXNoKGBpbXBvcnQgeyAke2UuY2xhc3NOYW1lfSB9IGZyb20gXCIke2UuaW1wb3J0UGF0aH1cIjtgKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IHIgb2YgdGhpcy5fcmVwb3NpdG9yaWVzKSB7XG5cdFx0XHRpbXBvcnRzLnB1c2goYGltcG9ydCB7ICR7ci5jbGFzc05hbWV9IH0gZnJvbSBcIiR7ci5pbXBvcnRQYXRofVwiO2ApO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zZXJ2aWNlcykge1xuXHRcdFx0aW1wb3J0cy5wdXNoKGBpbXBvcnQgeyAke3MuY2xhc3NOYW1lfSB9IGZyb20gXCIke3MuaW1wb3J0UGF0aH1cIjtgKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFtmcm9tLCBncm91cF0gb2YgdGhpcy5fZXh0cmFJbXBvcnRzKSB7XG5cdFx0XHRpbXBvcnRzLnB1c2goZ3JvdXAucmVuZGVyKGZyb20pKTtcblx0XHR9XG5cblx0XHRpbXBvcnRzLnB1c2goJ2ltcG9ydCB7IEhlbGxvQ29udHJvbGxlciB9IGZyb20gXCIuL2NvbnRyb2xsZXJzL2hlbGxvLmNvbnRyb2xsZXIuanNcIjsnKTtcblxuXHRcdGNvbnN0IHNlcnZpY2VSZWdzID0gW1xuXHRcdFx0XCJjYi5yZWdpc3RlclNpbmdsZXRvbihTYW1wbGVTZXJ2aWNlKTtcIixcblx0XHRcdC4uLnRoaXMuX3NlcnZpY2VzLm1hcCgocykgPT5cblx0XHRcdFx0cy5zY29wZSA9PT0gXCJyZXF1ZXN0XCJcblx0XHRcdFx0XHQ/IGBjYi5yZWdpc3RlclJlcXVlc3RTY29wZWQoJHtzLmNsYXNzTmFtZX0pO2Bcblx0XHRcdFx0XHQ6IGBjYi5yZWdpc3RlclNpbmdsZXRvbigke3MuY2xhc3NOYW1lfSk7YCxcblx0XHRcdCksXG5cdFx0XS5qb2luKFwiIFwiKTtcblxuXHRcdGNvbnN0IGJ1aWxkZXJDYWxsczogc3RyaW5nW10gPSBbXG5cdFx0XHRgXFx0LndpdGhIdHRwUHJvdmlkZXIoRmFzdGlmeVByb3ZpZGVyKWAsXG5cdFx0XHRgXFx0LndpdGhDb25maWd1cmF0aW9uKFlhbWxEYXRhU291cmNlKWAsXG5cdFx0XHQuLi50aGlzLl9idWlsZGVyQ2FsbHMubWFwKChjKSA9PiBgXFx0JHtjfWApLFxuXHRcdFx0YFxcdC53aXRoU2VydmljZXMoKGNiKSA9PiB7ICR7c2VydmljZVJlZ3N9IH0pYCxcblx0XHRdO1xuXG5cdFx0aWYgKHRoaXMuX2VudGl0aWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGVudGl0aWVzID0gdGhpcy5fZW50aXRpZXMubWFwKChlKSA9PiBlLmNsYXNzTmFtZSkuam9pbihcIiwgXCIpO1xuXHRcdFx0Y29uc3QgcmVwb3MgPSB0aGlzLl9yZXBvc2l0b3JpZXMubWFwKChyKSA9PiByLmNsYXNzTmFtZSkuam9pbihcIiwgXCIpO1xuXHRcdFx0aWYgKHRoaXMuX3R5cGVPcm1TZWVkKSB7XG5cdFx0XHRcdGJ1aWxkZXJDYWxscy5wdXNoKFxuXHRcdFx0XHRcdGBcXHQud2l0aFR5cGVPcm0oeyBlbnRpdGllczogWyR7ZW50aXRpZXN9XSwgcmVwb3NpdG9yaWVzOiBbJHtyZXBvc31dLCBzZWVkOiBhc3luYyAoZGF0YVNvdXJjZSkgPT4geyAke3RoaXMuX3R5cGVPcm1TZWVkfSB9IH0pYCxcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1aWxkZXJDYWxscy5wdXNoKFxuXHRcdFx0XHRcdGBcXHQud2l0aFR5cGVPcm0oeyBlbnRpdGllczogWyR7ZW50aXRpZXN9XSwgcmVwb3NpdG9yaWVzOiBbJHtyZXBvc31dIH0pYCxcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRidWlsZGVyQ2FsbHMucHVzaChgXFx0LndpdGhDb250cm9sbGVycyhIZWxsb0NvbnRyb2xsZXIpYCk7XG5cblx0XHRjb25zdCBjb250ZW50ID0gW1xuXHRcdFx0Li4uaW1wb3J0cyxcblx0XHRcdFwiXCIsXG5cdFx0XHRcInNjcmliZS5leHRlbmQud2l0aFBpbm9QcmV0dHkoKTtcIixcblx0XHRcdFwiXCIsXG5cdFx0XHRgY29uc3QgYXBwID0gYXdhaXQgQnVpbGRlci5jcmVhdGUoeyBhcHBsaWNhdGlvbk5hbWU6IFwiJHt0aGlzLmFwcE5hbWV9XCIgfSlgLFxuXHRcdFx0Li4uYnVpbGRlckNhbGxzLFxuXHRcdFx0YFxcdC5idWlsZCgpO2AsXG5cdFx0XHRcIlwiLFxuXHRcdFx0XCJhd2FpdCBhcHAuc3RhcnQoeyBwb3J0OiBOdW1iZXIocHJvY2Vzcy5lbnYuUE9SVCkgfHwgMzAwMCB9KTtcIixcblx0XHRcdFwiXCIsXG5cdFx0XHRcImV4cG9ydCBkZWZhdWx0IGFwcDtcIixcblx0XHRcdFwiXCIsXG5cdFx0XS5qb2luKFwiXFxuXCIpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwic3JjL21haW4udHNcIixcblx0XHRcdFx0Y29udGVudCxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIk1haW5Tb3VyY2VGaWxlIiwiSW1wb3J0R3JvdXAiLCJfdmFsdWVzIiwiX3R5cGVzIiwiYWRkIiwibmFtZSIsInR5cGVPbmx5IiwiaW5jbHVkZXMiLCJwdXNoIiwidHlwZUlkeCIsImluZGV4T2YiLCJzcGxpY2UiLCJyZW5kZXIiLCJmcm9tIiwidmFsdWVzIiwic29ydCIsInR5cGVzIiwibWFwIiwibiIsImpvaW4iLCJrZXkiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiTUFJTl9UUyIsIl9zaWRlRWZmZWN0SW1wb3J0cyIsIl9leHRyYUltcG9ydHMiLCJNYXAiLCJfYnVpbGRlckNhbGxzIiwiX2VudGl0aWVzIiwiX3JlcG9zaXRvcmllcyIsIl9zZXJ2aWNlcyIsIl90eXBlT3JtU2VlZCIsImFwcE5hbWUiLCJhZGRTaWRlRWZmZWN0SW1wb3J0IiwicGF0aCIsImFkZEltcG9ydCIsImdyb3VwIiwiZ2V0Iiwic2V0IiwiYWRkQnVpbGRlckNhbGwiLCJjYWxsIiwiYWRkRW50aXR5IiwiZW50aXR5IiwiYWRkUmVwb3NpdG9yeSIsInJlcG8iLCJhZGRTZXJ2aWNlIiwic2VydmljZSIsInNldFR5cGVPcm1TZWVkIiwic2VlZEJvZHkiLCJmaWxlcyIsImltcG9ydHMiLCJlIiwiY2xhc3NOYW1lIiwiaW1wb3J0UGF0aCIsInIiLCJzIiwic2VydmljZVJlZ3MiLCJzY29wZSIsImJ1aWxkZXJDYWxscyIsImMiLCJsZW5ndGgiLCJlbnRpdGllcyIsInJlcG9zIiwiY29udGVudCIsImZpbGVQYXRoIl0sIm1hcHBpbmdzIjoiOzs7OytCQXdDYUE7OztlQUFBQTs7O3VCQXhDb0I7QUFNakMsaUZBQWlGLEdBQ2pGLE1BQU1DO0lBQ1lDLFVBQW9CLEVBQUUsQ0FBQztJQUN2QkMsU0FBbUIsRUFBRSxDQUFDO0lBRWhDQyxJQUFJQyxJQUFZLEVBQUVDLFdBQVcsS0FBSyxFQUFRO1FBQ2hELElBQUlBLFVBQVU7WUFDYixrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQ0osT0FBTyxDQUFDSyxRQUFRLENBQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUNGLE1BQU0sQ0FBQ0ksUUFBUSxDQUFDRixPQUFPO2dCQUNoRSxJQUFJLENBQUNGLE1BQU0sQ0FBQ0ssSUFBSSxDQUFDSDtZQUNsQjtRQUNELE9BQU87WUFDTiw0REFBNEQ7WUFDNUQsTUFBTUksVUFBVSxJQUFJLENBQUNOLE1BQU0sQ0FBQ08sT0FBTyxDQUFDTDtZQUNwQyxJQUFJSSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUNOLE1BQU0sQ0FBQ1EsTUFBTSxDQUFDRixTQUFTO1lBQ2hELElBQUksQ0FBQyxJQUFJLENBQUNQLE9BQU8sQ0FBQ0ssUUFBUSxDQUFDRixPQUFPLElBQUksQ0FBQ0gsT0FBTyxDQUFDTSxJQUFJLENBQUNIO1FBQ3JEO1FBQ0EsT0FBTyxJQUFJO0lBQ1o7SUFFT08sT0FBT0MsSUFBWSxFQUFVO1FBQ25DLE1BQU1DLFNBQVM7ZUFBSSxJQUFJLENBQUNaLE9BQU87U0FBQyxDQUFDYSxJQUFJO1FBQ3JDLE1BQU1DLFFBQVE7ZUFBSSxJQUFJLENBQUNiLE1BQU07U0FBQyxDQUFDWSxJQUFJLEdBQUdFLEdBQUcsQ0FBQyxDQUFDQyxJQUFNLENBQUMsS0FBSyxFQUFFQSxHQUFHO1FBQzVELE9BQU8sQ0FBQyxTQUFTLEVBQUU7ZUFBSUo7ZUFBV0U7U0FBTSxDQUFDRyxJQUFJLENBQUMsTUFBTSxTQUFTLEVBQUVOLEtBQUssRUFBRSxDQUFDO0lBQ3hFO0FBQ0Q7QUFTTyxNQUFNYjs7SUFDSW9CLE1BQU1DLHVCQUFnQixDQUFDQyxPQUFPLENBQUM7SUFFOUJDLHFCQUErQixFQUFFLENBQUM7SUFDbENDLGdCQUFnQixJQUFJQyxNQUEyQjtJQUMvQ0MsZ0JBQTBCLEVBQUUsQ0FBQztJQUM3QkMsWUFBNkIsRUFBRSxDQUFDO0lBQ2hDQyxnQkFBaUMsRUFBRSxDQUFDO0lBQ3BDQyxZQUE2QixFQUFFLENBQUM7SUFDekNDLGFBQWlDO0lBRXpDLFlBQW1CLEFBQWlCQyxPQUFlLENBQUU7YUFBakJBLFVBQUFBO0lBQWtCO0lBRXRELGtFQUFrRSxHQUNsRSxBQUFPQyxvQkFBb0JDLElBQVksRUFBUTtRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDVixrQkFBa0IsQ0FBQ2hCLFFBQVEsQ0FBQzBCLE9BQU8sSUFBSSxDQUFDVixrQkFBa0IsQ0FBQ2YsSUFBSSxDQUFDeUI7UUFDMUUsT0FBTyxJQUFJO0lBQ1o7SUFFQSwyREFBMkQsR0FDM0QsQUFBT0MsVUFBVTdCLElBQVksRUFBRVEsSUFBWSxFQUFFUCxXQUFXLEtBQUssRUFBUTtRQUNwRSxNQUFNNkIsUUFBUSxJQUFJLENBQUNYLGFBQWEsQ0FBQ1ksR0FBRyxDQUFDdkIsU0FBUyxJQUFJWjtRQUNsRGtDLE1BQU0vQixHQUFHLENBQUNDLE1BQU1DO1FBQ2hCLElBQUksQ0FBQ2tCLGFBQWEsQ0FBQ2EsR0FBRyxDQUFDeEIsTUFBTXNCO1FBQzdCLE9BQU8sSUFBSTtJQUNaO0lBRUE7OztFQUdDLEdBQ0QsQUFBT0csZUFBZUMsSUFBWSxFQUFRO1FBQ3pDLElBQUksQ0FBQ2IsYUFBYSxDQUFDbEIsSUFBSSxDQUFDK0I7UUFDeEIsT0FBTyxJQUFJO0lBQ1o7SUFFQSw2RUFBNkUsR0FDN0UsQUFBT0MsVUFBVUMsTUFBcUIsRUFBUTtRQUM3QyxJQUFJLENBQUNkLFNBQVMsQ0FBQ25CLElBQUksQ0FBQ2lDO1FBQ3BCLE9BQU8sSUFBSTtJQUNaO0lBRUEscUZBQXFGLEdBQ3JGLEFBQU9DLGNBQWNDLElBQW1CLEVBQVE7UUFDL0MsSUFBSSxDQUFDZixhQUFhLENBQUNwQixJQUFJLENBQUNtQztRQUN4QixPQUFPLElBQUk7SUFDWjtJQUVBLG9EQUFvRCxHQUNwRCxBQUFPQyxXQUFXQyxPQUFzQixFQUFRO1FBQy9DLElBQUksQ0FBQ2hCLFNBQVMsQ0FBQ3JCLElBQUksQ0FBQ3FDO1FBQ3BCLE9BQU8sSUFBSTtJQUNaO0lBRUE7OztFQUdDLEdBQ0QsQUFBT0MsZUFBZUMsUUFBZ0IsRUFBUTtRQUM3QyxJQUFJLENBQUNqQixZQUFZLEdBQUdpQjtRQUNwQixPQUFPLElBQUk7SUFDWjtJQUVPQyxRQUFzQjtRQUM1QixNQUFNQyxVQUFvQjtZQUN6QjtZQUNBO1NBQ0E7UUFFRCxLQUFLLE1BQU1oQixRQUFRLElBQUksQ0FBQ1Ysa0JBQWtCLENBQUU7WUFDM0MwQixRQUFRekMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFeUIsS0FBSyxFQUFFLENBQUM7UUFDakM7UUFFQWdCLFFBQVF6QyxJQUFJLENBQ1gsZ0NBQ0Esd0RBQ0EsK0NBQ0EsaUVBQ0EsOENBQ0E7UUFHRCxLQUFLLE1BQU0wQyxLQUFLLElBQUksQ0FBQ3ZCLFNBQVMsQ0FBRTtZQUMvQnNCLFFBQVF6QyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUwQyxFQUFFQyxTQUFTLENBQUMsU0FBUyxFQUFFRCxFQUFFRSxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2pFO1FBRUEsS0FBSyxNQUFNQyxLQUFLLElBQUksQ0FBQ3pCLGFBQWEsQ0FBRTtZQUNuQ3FCLFFBQVF6QyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUU2QyxFQUFFRixTQUFTLENBQUMsU0FBUyxFQUFFRSxFQUFFRCxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2pFO1FBRUEsS0FBSyxNQUFNRSxLQUFLLElBQUksQ0FBQ3pCLFNBQVMsQ0FBRTtZQUMvQm9CLFFBQVF6QyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUU4QyxFQUFFSCxTQUFTLENBQUMsU0FBUyxFQUFFRyxFQUFFRixVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2pFO1FBRUEsS0FBSyxNQUFNLENBQUN2QyxNQUFNc0IsTUFBTSxJQUFJLElBQUksQ0FBQ1gsYUFBYSxDQUFFO1lBQy9DeUIsUUFBUXpDLElBQUksQ0FBQzJCLE1BQU12QixNQUFNLENBQUNDO1FBQzNCO1FBRUFvQyxRQUFRekMsSUFBSSxDQUFDO1FBRWIsTUFBTStDLGNBQWM7WUFDbkI7ZUFDRyxJQUFJLENBQUMxQixTQUFTLENBQUNaLEdBQUcsQ0FBQyxDQUFDcUMsSUFDdEJBLEVBQUVFLEtBQUssS0FBSyxZQUNULENBQUMseUJBQXlCLEVBQUVGLEVBQUVILFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FDM0MsQ0FBQyxxQkFBcUIsRUFBRUcsRUFBRUgsU0FBUyxDQUFDLEVBQUUsQ0FBQztTQUUzQyxDQUFDaEMsSUFBSSxDQUFDO1FBRVAsTUFBTXNDLGVBQXlCO1lBQzlCLENBQUMsb0NBQW9DLENBQUM7WUFDdEMsQ0FBQyxvQ0FBb0MsQ0FBQztlQUNuQyxJQUFJLENBQUMvQixhQUFhLENBQUNULEdBQUcsQ0FBQyxDQUFDeUMsSUFBTSxDQUFDLEVBQUUsRUFBRUEsR0FBRztZQUN6QyxDQUFDLDBCQUEwQixFQUFFSCxZQUFZLEdBQUcsQ0FBQztTQUM3QztRQUVELElBQUksSUFBSSxDQUFDNUIsU0FBUyxDQUFDZ0MsTUFBTSxHQUFHLEdBQUc7WUFDOUIsTUFBTUMsV0FBVyxJQUFJLENBQUNqQyxTQUFTLENBQUNWLEdBQUcsQ0FBQyxDQUFDaUMsSUFBTUEsRUFBRUMsU0FBUyxFQUFFaEMsSUFBSSxDQUFDO1lBQzdELE1BQU0wQyxRQUFRLElBQUksQ0FBQ2pDLGFBQWEsQ0FBQ1gsR0FBRyxDQUFDLENBQUNvQyxJQUFNQSxFQUFFRixTQUFTLEVBQUVoQyxJQUFJLENBQUM7WUFDOUQsSUFBSSxJQUFJLENBQUNXLFlBQVksRUFBRTtnQkFDdEIyQixhQUFhakQsSUFBSSxDQUNoQixDQUFDLDRCQUE0QixFQUFFb0QsU0FBUyxrQkFBa0IsRUFBRUMsTUFBTSxpQ0FBaUMsRUFBRSxJQUFJLENBQUMvQixZQUFZLENBQUMsS0FBSyxDQUFDO1lBRS9ILE9BQU87Z0JBQ04yQixhQUFhakQsSUFBSSxDQUNoQixDQUFDLDRCQUE0QixFQUFFb0QsU0FBUyxrQkFBa0IsRUFBRUMsTUFBTSxJQUFJLENBQUM7WUFFekU7UUFDRDtRQUVBSixhQUFhakQsSUFBSSxDQUFDLENBQUMsbUNBQW1DLENBQUM7UUFFdkQsTUFBTXNELFVBQVU7ZUFDWmI7WUFDSDtZQUNBO1lBQ0E7WUFDQSxDQUFDLHFEQUFxRCxFQUFFLElBQUksQ0FBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUM7ZUFDdkUwQjtZQUNILENBQUMsV0FBVyxDQUFDO1lBQ2I7WUFDQTtZQUNBO1lBQ0E7WUFDQTtTQUNBLENBQUN0QyxJQUFJLENBQUM7UUFFUCxPQUFPO1lBQ047Z0JBQ0M0QyxVQUFVO2dCQUNWRDtZQUNEO1NBQ0E7SUFDRjtBQUNEIn0=
@@ -2,12 +2,17 @@ import { WELL_KNOWN_FILES } from "./const.js";
2
2
  /**
3
3
  * Live builder for `docker-compose.yml`.
4
4
  *
5
- * Features call `addService` / `addVolume` in their `configure` phases.
6
- * The devcontainer `render` phase calls `render()` and writes the file.
5
+ * Features call `addService` / `addVolume` / `addNetwork` in their scaffold phases.
7
6
  */ export class DockerCompose {
8
7
  key = WELL_KNOWN_FILES.DOCKER_COMPOSE;
8
+ _projectName;
9
9
  _services = new Map();
10
10
  _volumes = new Set();
11
+ _networks = new Map();
12
+ /** Compose project name (`name:` top-level) — isolates containers/volumes. */ setProjectName(name) {
13
+ this._projectName = name;
14
+ return this;
15
+ }
11
16
  addService(name, config) {
12
17
  this._services.set(name, config);
13
18
  return this;
@@ -24,6 +29,10 @@ import { WELL_KNOWN_FILES } from "./const.js";
24
29
  this._volumes.add(name);
25
30
  return this;
26
31
  }
32
+ addNetwork(key, network) {
33
+ this._networks.set(key, network);
34
+ return this;
35
+ }
27
36
  /** Append an env_file path to an existing service. */ addEnvFile(serviceName, filePath) {
28
37
  const svc = this._services.get(serviceName);
29
38
  if (svc) svc.env_file = [
@@ -33,13 +42,16 @@ import { WELL_KNOWN_FILES } from "./const.js";
33
42
  return this;
34
43
  }
35
44
  getContent() {
36
- const lines = [
37
- "services:"
38
- ];
45
+ const lines = [];
46
+ if (this._projectName) {
47
+ lines.push(`name: ${this._projectName}`, "");
48
+ }
49
+ lines.push("services:");
39
50
  for (const [name, svc] of this._services){
40
51
  lines.push(` ${name}:`);
41
52
  if (svc.build) lines.push(` build: ${svc.build}`);
42
53
  if (svc.image) lines.push(` image: ${svc.image}`);
54
+ if (svc.container_name) lines.push(` container_name: ${svc.container_name}`);
43
55
  if (svc.command) lines.push(` command: ${svc.command}`);
44
56
  if (svc.restart) lines.push(` restart: ${svc.restart}`);
45
57
  if (svc.env_file && svc.env_file.length > 0) {
@@ -60,10 +72,49 @@ import { WELL_KNOWN_FILES } from "./const.js";
60
72
  lines.push(" volumes:");
61
73
  for (const v of svc.volumes)lines.push(` - ${v}`);
62
74
  }
75
+ if (svc.networks && svc.networks.length > 0) {
76
+ const onlyStrings = svc.networks.every((n)=>typeof n === "string");
77
+ if (onlyStrings) {
78
+ lines.push(" networks:");
79
+ for (const n of svc.networks)lines.push(` - ${n}`);
80
+ } else {
81
+ lines.push(" networks:");
82
+ for (const n of svc.networks){
83
+ if (typeof n === "string") {
84
+ lines.push(` ${n}:`);
85
+ } else {
86
+ for (const [netKey, cfg] of Object.entries(n)){
87
+ lines.push(` ${netKey}:`);
88
+ if (cfg.aliases && cfg.aliases.length > 0) {
89
+ lines.push(" aliases:");
90
+ for (const a of cfg.aliases)lines.push(` - ${a}`);
91
+ }
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
63
97
  if (svc.depends_on && svc.depends_on.length > 0) {
64
98
  lines.push(" depends_on:");
65
99
  for (const d of svc.depends_on)lines.push(` - ${d}`);
66
100
  }
101
+ if (svc.healthcheck) {
102
+ const hc = svc.healthcheck;
103
+ lines.push(" healthcheck:");
104
+ lines.push(` test: ${JSON.stringify(hc.test)}`);
105
+ if (hc.interval) lines.push(` interval: ${hc.interval}`);
106
+ if (hc.timeout) lines.push(` timeout: ${hc.timeout}`);
107
+ if (hc.retries != null) lines.push(` retries: ${hc.retries}`);
108
+ }
109
+ }
110
+ if (this._networks.size > 0) {
111
+ lines.push("");
112
+ lines.push("networks:");
113
+ for (const [key, net] of this._networks){
114
+ lines.push(` ${key}:`);
115
+ lines.push(` name: ${net.name}`);
116
+ if (net.external) lines.push(" external: true");
117
+ }
67
118
  }
68
119
  if (this._volumes.size > 0) {
69
120
  lines.push("");
@@ -74,4 +125,4 @@ import { WELL_KNOWN_FILES } from "./const.js";
74
125
  }
75
126
  }
76
127
 
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2NvbXBvc2UubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwgfSBmcm9tIFwiLi9zb3VyY2UtZmlsZS5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvc2VTZXJ2aWNlIHtcblx0YnVpbGQ/OiBzdHJpbmc7XG5cdGltYWdlPzogc3RyaW5nO1xuXHRlbnZfZmlsZT86IHN0cmluZ1tdO1xuXHRlbnZpcm9ubWVudD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdHBvcnRzPzogc3RyaW5nW107XG5cdHZvbHVtZXM/OiBzdHJpbmdbXTtcblx0Y29tbWFuZD86IHN0cmluZztcblx0cmVzdGFydD86IHN0cmluZztcblx0ZGVwZW5kc19vbj86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIExpdmUgYnVpbGRlciBmb3IgYGRvY2tlci1jb21wb3NlLnltbGAuXG4gKlxuICogRmVhdHVyZXMgY2FsbCBgYWRkU2VydmljZWAgLyBgYWRkVm9sdW1lYCBpbiB0aGVpciBgY29uZmlndXJlYCBwaGFzZXMuXG4gKiBUaGUgZGV2Y29udGFpbmVyIGByZW5kZXJgIHBoYXNlIGNhbGxzIGByZW5kZXIoKWAgYW5kIHdyaXRlcyB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERvY2tlckNvbXBvc2UgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuRE9DS0VSX0NPTVBPU0U7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3NlcnZpY2VzOiBNYXA8c3RyaW5nLCBDb21wb3NlU2VydmljZT4gPSBuZXcgTWFwKCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3ZvbHVtZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG5cdHB1YmxpYyBhZGRTZXJ2aWNlKG5hbWU6IHN0cmluZywgY29uZmlnOiBDb21wb3NlU2VydmljZSk6IHRoaXMge1xuXHRcdHRoaXMuX3NlcnZpY2VzLnNldChuYW1lLCBjb25maWcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCkge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5kZXZjb250YWluZXIvZG9ja2VyLWNvbXBvc2UueW1sXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IHRoaXMuZ2V0Q29udGVudCgpLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG5cblx0cHVibGljIGFkZFZvbHVtZShuYW1lOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl92b2x1bWVzLmFkZChuYW1lKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBBcHBlbmQgYW4gZW52X2ZpbGUgcGF0aCB0byBhbiBleGlzdGluZyBzZXJ2aWNlLiAqL1xuXHRwdWJsaWMgYWRkRW52RmlsZShzZXJ2aWNlTmFtZTogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogdGhpcyB7XG5cdFx0Y29uc3Qgc3ZjID0gdGhpcy5fc2VydmljZXMuZ2V0KHNlcnZpY2VOYW1lKTtcblx0XHRpZiAoc3ZjKSBzdmMuZW52X2ZpbGUgPSBbLi4uKHN2Yy5lbnZfZmlsZSA/PyBbXSksIGZpbGVQYXRoXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBnZXRDb250ZW50KCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1wic2VydmljZXM6XCJdO1xuXG5cdFx0Zm9yIChjb25zdCBbbmFtZSwgc3ZjXSBvZiB0aGlzLl9zZXJ2aWNlcykge1xuXHRcdFx0bGluZXMucHVzaChgICAke25hbWV9OmApO1xuXHRcdFx0aWYgKHN2Yy5idWlsZCkgbGluZXMucHVzaChgICAgIGJ1aWxkOiAke3N2Yy5idWlsZH1gKTtcblx0XHRcdGlmIChzdmMuaW1hZ2UpIGxpbmVzLnB1c2goYCAgICBpbWFnZTogJHtzdmMuaW1hZ2V9YCk7XG5cdFx0XHRpZiAoc3ZjLmNvbW1hbmQpIGxpbmVzLnB1c2goYCAgICBjb21tYW5kOiAke3N2Yy5jb21tYW5kfWApO1xuXHRcdFx0aWYgKHN2Yy5yZXN0YXJ0KSBsaW5lcy5wdXNoKGAgICAgcmVzdGFydDogJHtzdmMucmVzdGFydH1gKTtcblxuXHRcdFx0aWYgKHN2Yy5lbnZfZmlsZSAmJiBzdmMuZW52X2ZpbGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRsaW5lcy5wdXNoKFwiICAgIGVudl9maWxlOlwiKTtcblx0XHRcdFx0Zm9yIChjb25zdCBmIG9mIHN2Yy5lbnZfZmlsZSkgbGluZXMucHVzaChgICAgICAgLSAke2Z9YCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdmMuZW52aXJvbm1lbnQgJiYgT2JqZWN0LmtleXMoc3ZjLmVudmlyb25tZW50KS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgZW52aXJvbm1lbnQ6XCIpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhzdmMuZW52aXJvbm1lbnQpKSB7XG5cdFx0XHRcdFx0bGluZXMucHVzaChgICAgICAgJHtrfTogJHt2fWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdmMucG9ydHMgJiYgc3ZjLnBvcnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGluZXMucHVzaChcIiAgICBwb3J0czpcIik7XG5cdFx0XHRcdGZvciAoY29uc3QgcCBvZiBzdmMucG9ydHMpIGxpbmVzLnB1c2goYCAgICAgIC0gXCIke3B9XCJgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN2Yy52b2x1bWVzICYmIHN2Yy52b2x1bWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGluZXMucHVzaChcIiAgICB2b2x1bWVzOlwiKTtcblx0XHRcdFx0Zm9yIChjb25zdCB2IG9mIHN2Yy52b2x1bWVzKSBsaW5lcy5wdXNoKGAgICAgICAtICR7dn1gKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN2Yy5kZXBlbmRzX29uICYmIHN2Yy5kZXBlbmRzX29uLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGluZXMucHVzaChcIiAgICBkZXBlbmRzX29uOlwiKTtcblx0XHRcdFx0Zm9yIChjb25zdCBkIG9mIHN2Yy5kZXBlbmRzX29uKSBsaW5lcy5wdXNoKGAgICAgICAtICR7ZH1gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5fdm9sdW1lcy5zaXplID4gMCkge1xuXHRcdFx0bGluZXMucHVzaChcIlwiKTtcblx0XHRcdGxpbmVzLnB1c2goXCJ2b2x1bWVzOlwiKTtcblx0XHRcdGZvciAoY29uc3QgdiBvZiB0aGlzLl92b2x1bWVzKSBsaW5lcy5wdXNoKGAgICR7dn06YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAke2xpbmVzLmpvaW4oXCJcXG5cIil9XFxuYDtcblx0fVxufVxuIl0sIm5hbWVzIjpbIldFTExfS05PV05fRklMRVMiLCJEb2NrZXJDb21wb3NlIiwia2V5IiwiRE9DS0VSX0NPTVBPU0UiLCJfc2VydmljZXMiLCJNYXAiLCJfdm9sdW1lcyIsIlNldCIsImFkZFNlcnZpY2UiLCJuYW1lIiwiY29uZmlnIiwic2V0IiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJnZXRDb250ZW50IiwiYWRkVm9sdW1lIiwiYWRkIiwiYWRkRW52RmlsZSIsInNlcnZpY2VOYW1lIiwic3ZjIiwiZ2V0IiwiZW52X2ZpbGUiLCJsaW5lcyIsInB1c2giLCJidWlsZCIsImltYWdlIiwiY29tbWFuZCIsInJlc3RhcnQiLCJsZW5ndGgiLCJmIiwiZW52aXJvbm1lbnQiLCJPYmplY3QiLCJrZXlzIiwiayIsInYiLCJlbnRyaWVzIiwicG9ydHMiLCJwIiwidm9sdW1lcyIsImRlcGVuZHNfb24iLCJkIiwic2l6ZSIsImpvaW4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGdCQUFnQixRQUFRLGFBQWE7QUFlOUM7Ozs7O0NBS0MsR0FDRCxPQUFPLE1BQU1DO0lBQ0lDLE1BQU1GLGlCQUFpQkcsY0FBYyxDQUFDO0lBQ3JDQyxZQUF5QyxJQUFJQyxNQUFNO0lBQ25EQyxXQUF3QixJQUFJQyxNQUFNO0lBRTVDQyxXQUFXQyxJQUFZLEVBQUVDLE1BQXNCLEVBQVE7UUFDN0QsSUFBSSxDQUFDTixTQUFTLENBQUNPLEdBQUcsQ0FBQ0YsTUFBTUM7UUFDekIsT0FBTyxJQUFJO0lBQ1o7SUFFT0UsUUFBUTtRQUNkLE9BQU87WUFDTjtnQkFDQ0MsVUFBVTtnQkFDVkMsU0FBUyxJQUFJLENBQUNDLFVBQVU7WUFDekI7U0FDQTtJQUNGO0lBRU9DLFVBQVVQLElBQVksRUFBUTtRQUNwQyxJQUFJLENBQUNILFFBQVEsQ0FBQ1csR0FBRyxDQUFDUjtRQUNsQixPQUFPLElBQUk7SUFDWjtJQUVBLG9EQUFvRCxHQUNwRCxBQUFPUyxXQUFXQyxXQUFtQixFQUFFTixRQUFnQixFQUFRO1FBQzlELE1BQU1PLE1BQU0sSUFBSSxDQUFDaEIsU0FBUyxDQUFDaUIsR0FBRyxDQUFDRjtRQUMvQixJQUFJQyxLQUFLQSxJQUFJRSxRQUFRLEdBQUc7ZUFBS0YsSUFBSUUsUUFBUSxJQUFJLEVBQUU7WUFBR1Q7U0FBUztRQUMzRCxPQUFPLElBQUk7SUFDWjtJQUVPRSxhQUFxQjtRQUMzQixNQUFNUSxRQUFrQjtZQUFDO1NBQVk7UUFFckMsS0FBSyxNQUFNLENBQUNkLE1BQU1XLElBQUksSUFBSSxJQUFJLENBQUNoQixTQUFTLENBQUU7WUFDekNtQixNQUFNQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUVmLEtBQUssQ0FBQyxDQUFDO1lBQ3ZCLElBQUlXLElBQUlLLEtBQUssRUFBRUYsTUFBTUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFSixJQUFJSyxLQUFLLEVBQUU7WUFDbkQsSUFBSUwsSUFBSU0sS0FBSyxFQUFFSCxNQUFNQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUVKLElBQUlNLEtBQUssRUFBRTtZQUNuRCxJQUFJTixJQUFJTyxPQUFPLEVBQUVKLE1BQU1DLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRUosSUFBSU8sT0FBTyxFQUFFO1lBQ3pELElBQUlQLElBQUlRLE9BQU8sRUFBRUwsTUFBTUMsSUFBSSxDQUFDLENBQUMsYUFBYSxFQUFFSixJQUFJUSxPQUFPLEVBQUU7WUFFekQsSUFBSVIsSUFBSUUsUUFBUSxJQUFJRixJQUFJRSxRQUFRLENBQUNPLE1BQU0sR0FBRyxHQUFHO2dCQUM1Q04sTUFBTUMsSUFBSSxDQUFDO2dCQUNYLEtBQUssTUFBTU0sS0FBS1YsSUFBSUUsUUFBUSxDQUFFQyxNQUFNQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUVNLEdBQUc7WUFDeEQ7WUFFQSxJQUFJVixJQUFJVyxXQUFXLElBQUlDLE9BQU9DLElBQUksQ0FBQ2IsSUFBSVcsV0FBVyxFQUFFRixNQUFNLEdBQUcsR0FBRztnQkFDL0ROLE1BQU1DLElBQUksQ0FBQztnQkFDWCxLQUFLLE1BQU0sQ0FBQ1UsR0FBR0MsRUFBRSxJQUFJSCxPQUFPSSxPQUFPLENBQUNoQixJQUFJVyxXQUFXLEVBQUc7b0JBQ3JEUixNQUFNQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUVVLEVBQUUsRUFBRSxFQUFFQyxHQUFHO2dCQUM5QjtZQUNEO1lBRUEsSUFBSWYsSUFBSWlCLEtBQUssSUFBSWpCLElBQUlpQixLQUFLLENBQUNSLE1BQU0sR0FBRyxHQUFHO2dCQUN0Q04sTUFBTUMsSUFBSSxDQUFDO2dCQUNYLEtBQUssTUFBTWMsS0FBS2xCLElBQUlpQixLQUFLLENBQUVkLE1BQU1DLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRWMsRUFBRSxDQUFDLENBQUM7WUFDdkQ7WUFFQSxJQUFJbEIsSUFBSW1CLE9BQU8sSUFBSW5CLElBQUltQixPQUFPLENBQUNWLE1BQU0sR0FBRyxHQUFHO2dCQUMxQ04sTUFBTUMsSUFBSSxDQUFDO2dCQUNYLEtBQUssTUFBTVcsS0FBS2YsSUFBSW1CLE9BQU8sQ0FBRWhCLE1BQU1DLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRVcsR0FBRztZQUN2RDtZQUVBLElBQUlmLElBQUlvQixVQUFVLElBQUlwQixJQUFJb0IsVUFBVSxDQUFDWCxNQUFNLEdBQUcsR0FBRztnQkFDaEROLE1BQU1DLElBQUksQ0FBQztnQkFDWCxLQUFLLE1BQU1pQixLQUFLckIsSUFBSW9CLFVBQVUsQ0FBRWpCLE1BQU1DLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRWlCLEdBQUc7WUFDMUQ7UUFDRDtRQUVBLElBQUksSUFBSSxDQUFDbkMsUUFBUSxDQUFDb0MsSUFBSSxHQUFHLEdBQUc7WUFDM0JuQixNQUFNQyxJQUFJLENBQUM7WUFDWEQsTUFBTUMsSUFBSSxDQUFDO1lBQ1gsS0FBSyxNQUFNVyxLQUFLLElBQUksQ0FBQzdCLFFBQVEsQ0FBRWlCLE1BQU1DLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRVcsRUFBRSxDQUFDLENBQUM7UUFDcEQ7UUFFQSxPQUFPLEdBQUdaLE1BQU1vQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0I7QUFDRCJ9
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2NvbXBvc2UubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwgfSBmcm9tIFwiLi9zb3VyY2UtZmlsZS5qc1wiO1xuXG5leHBvcnQgdHlwZSBDb21wb3NlTmV0d29ya1JlZiA9XG5cdHwgc3RyaW5nXG5cdHwge1xuXHRcdFx0LyoqIE5ldHdvcmsga2V5IHVuZGVyIGBuZXR3b3JrczpgIG9uIHRoaXMgc2VydmljZSAqL1xuXHRcdFx0W25ldHdvcmtLZXk6IHN0cmluZ106IHsgYWxpYXNlcz86IHN0cmluZ1tdIH07XG5cdCAgfTtcblxuZXhwb3J0IGludGVyZmFjZSBDb21wb3NlSGVhbHRoY2hlY2sge1xuXHR0ZXN0OiBzdHJpbmdbXTtcblx0aW50ZXJ2YWw/OiBzdHJpbmc7XG5cdHRpbWVvdXQ/OiBzdHJpbmc7XG5cdHJldHJpZXM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9zZVNlcnZpY2Uge1xuXHRidWlsZD86IHN0cmluZztcblx0aW1hZ2U/OiBzdHJpbmc7XG5cdGNvbnRhaW5lcl9uYW1lPzogc3RyaW5nO1xuXHRlbnZfZmlsZT86IHN0cmluZ1tdO1xuXHRlbnZpcm9ubWVudD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdHBvcnRzPzogc3RyaW5nW107XG5cdHZvbHVtZXM/OiBzdHJpbmdbXTtcblx0Y29tbWFuZD86IHN0cmluZztcblx0cmVzdGFydD86IHN0cmluZztcblx0ZGVwZW5kc19vbj86IHN0cmluZ1tdO1xuXHQvKiogQXR0YWNoIHRvIGNvbXBvc2UgbmV0d29ya3MgKHN0cmluZyBuYW1lIG9yIG1hcCB3aXRoIGFsaWFzZXMpLiAqL1xuXHRuZXR3b3Jrcz86IENvbXBvc2VOZXR3b3JrUmVmW107XG5cdGhlYWx0aGNoZWNrPzogQ29tcG9zZUhlYWx0aGNoZWNrO1xufVxuXG5leHBvcnQgdHlwZSBDb21wb3NlTmV0d29yayA9IHtcblx0LyoqIEZpeGVkIERvY2tlciBuZXR3b3JrIG5hbWUgKHNoYXJlYWJsZSBhY3Jvc3MgY29tcG9zZSBwcm9qZWN0cykuICovXG5cdG5hbWU6IHN0cmluZztcblx0ZXh0ZXJuYWw/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBMaXZlIGJ1aWxkZXIgZm9yIGBkb2NrZXItY29tcG9zZS55bWxgLlxuICpcbiAqIEZlYXR1cmVzIGNhbGwgYGFkZFNlcnZpY2VgIC8gYGFkZFZvbHVtZWAgLyBgYWRkTmV0d29ya2AgaW4gdGhlaXIgc2NhZmZvbGQgcGhhc2VzLlxuICovXG5leHBvcnQgY2xhc3MgRG9ja2VyQ29tcG9zZSBpbXBsZW1lbnRzIEtleWVkTW9kZWwge1xuXHRwdWJsaWMgcmVhZG9ubHkga2V5ID0gV0VMTF9LTk9XTl9GSUxFUy5ET0NLRVJfQ09NUE9TRTtcblx0cHJpdmF0ZSBfcHJvamVjdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0cHJpdmF0ZSByZWFkb25seSBfc2VydmljZXM6IE1hcDxzdHJpbmcsIENvbXBvc2VTZXJ2aWNlPiA9IG5ldyBNYXAoKTtcblx0cHJpdmF0ZSByZWFkb25seSBfdm9sdW1lczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX25ldHdvcmtzOiBNYXA8c3RyaW5nLCBDb21wb3NlTmV0d29yaz4gPSBuZXcgTWFwKCk7XG5cblx0LyoqIENvbXBvc2UgcHJvamVjdCBuYW1lIChgbmFtZTpgIHRvcC1sZXZlbCkg4oCUIGlzb2xhdGVzIGNvbnRhaW5lcnMvdm9sdW1lcy4gKi9cblx0cHVibGljIHNldFByb2plY3ROYW1lKG5hbWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX3Byb2plY3ROYW1lID0gbmFtZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBhZGRTZXJ2aWNlKG5hbWU6IHN0cmluZywgY29uZmlnOiBDb21wb3NlU2VydmljZSk6IHRoaXMge1xuXHRcdHRoaXMuX3NlcnZpY2VzLnNldChuYW1lLCBjb25maWcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCkge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5kZXZjb250YWluZXIvZG9ja2VyLWNvbXBvc2UueW1sXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IHRoaXMuZ2V0Q29udGVudCgpLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG5cblx0cHVibGljIGFkZFZvbHVtZShuYW1lOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl92b2x1bWVzLmFkZChuYW1lKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBhZGROZXR3b3JrKGtleTogc3RyaW5nLCBuZXR3b3JrOiBDb21wb3NlTmV0d29yayk6IHRoaXMge1xuXHRcdHRoaXMuX25ldHdvcmtzLnNldChrZXksIG5ldHdvcmspO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFwcGVuZCBhbiBlbnZfZmlsZSBwYXRoIHRvIGFuIGV4aXN0aW5nIHNlcnZpY2UuICovXG5cdHB1YmxpYyBhZGRFbnZGaWxlKHNlcnZpY2VOYW1lOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpOiB0aGlzIHtcblx0XHRjb25zdCBzdmMgPSB0aGlzLl9zZXJ2aWNlcy5nZXQoc2VydmljZU5hbWUpO1xuXHRcdGlmIChzdmMpIHN2Yy5lbnZfZmlsZSA9IFsuLi4oc3ZjLmVudl9maWxlID8/IFtdKSwgZmlsZVBhdGhdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGdldENvbnRlbnQoKTogc3RyaW5nIHtcblx0XHRjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcblx0XHRpZiAodGhpcy5fcHJvamVjdE5hbWUpIHtcblx0XHRcdGxpbmVzLnB1c2goYG5hbWU6ICR7dGhpcy5fcHJvamVjdE5hbWV9YCwgXCJcIik7XG5cdFx0fVxuXHRcdGxpbmVzLnB1c2goXCJzZXJ2aWNlczpcIik7XG5cblx0XHRmb3IgKGNvbnN0IFtuYW1lLCBzdmNdIG9mIHRoaXMuX3NlcnZpY2VzKSB7XG5cdFx0XHRsaW5lcy5wdXNoKGAgICR7bmFtZX06YCk7XG5cdFx0XHRpZiAoc3ZjLmJ1aWxkKSBsaW5lcy5wdXNoKGAgICAgYnVpbGQ6ICR7c3ZjLmJ1aWxkfWApO1xuXHRcdFx0aWYgKHN2Yy5pbWFnZSkgbGluZXMucHVzaChgICAgIGltYWdlOiAke3N2Yy5pbWFnZX1gKTtcblx0XHRcdGlmIChzdmMuY29udGFpbmVyX25hbWUpIGxpbmVzLnB1c2goYCAgICBjb250YWluZXJfbmFtZTogJHtzdmMuY29udGFpbmVyX25hbWV9YCk7XG5cdFx0XHRpZiAoc3ZjLmNvbW1hbmQpIGxpbmVzLnB1c2goYCAgICBjb21tYW5kOiAke3N2Yy5jb21tYW5kfWApO1xuXHRcdFx0aWYgKHN2Yy5yZXN0YXJ0KSBsaW5lcy5wdXNoKGAgICAgcmVzdGFydDogJHtzdmMucmVzdGFydH1gKTtcblxuXHRcdFx0aWYgKHN2Yy5lbnZfZmlsZSAmJiBzdmMuZW52X2ZpbGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRsaW5lcy5wdXNoKFwiICAgIGVudl9maWxlOlwiKTtcblx0XHRcdFx0Zm9yIChjb25zdCBmIG9mIHN2Yy5lbnZfZmlsZSkgbGluZXMucHVzaChgICAgICAgLSAke2Z9YCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdmMuZW52aXJvbm1lbnQgJiYgT2JqZWN0LmtleXMoc3ZjLmVudmlyb25tZW50KS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgZW52aXJvbm1lbnQ6XCIpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhzdmMuZW52aXJvbm1lbnQpKSB7XG5cdFx0XHRcdFx0bGluZXMucHVzaChgICAgICAgJHtrfTogJHt2fWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdmMucG9ydHMgJiYgc3ZjLnBvcnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGluZXMucHVzaChcIiAgICBwb3J0czpcIik7XG5cdFx0XHRcdGZvciAoY29uc3QgcCBvZiBzdmMucG9ydHMpIGxpbmVzLnB1c2goYCAgICAgIC0gXCIke3B9XCJgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN2Yy52b2x1bWVzICYmIHN2Yy52b2x1bWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGluZXMucHVzaChcIiAgICB2b2x1bWVzOlwiKTtcblx0XHRcdFx0Zm9yIChjb25zdCB2IG9mIHN2Yy52b2x1bWVzKSBsaW5lcy5wdXNoKGAgICAgICAtICR7dn1gKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN2Yy5uZXR3b3JrcyAmJiBzdmMubmV0d29ya3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBvbmx5U3RyaW5ncyA9IHN2Yy5uZXR3b3Jrcy5ldmVyeSgobikgPT4gdHlwZW9mIG4gPT09IFwic3RyaW5nXCIpO1xuXHRcdFx0XHRpZiAob25seVN0cmluZ3MpIHtcblx0XHRcdFx0XHRsaW5lcy5wdXNoKFwiICAgIG5ldHdvcmtzOlwiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IG4gb2Ygc3ZjLm5ldHdvcmtzKSBsaW5lcy5wdXNoKGAgICAgICAtICR7biBhcyBzdHJpbmd9YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGluZXMucHVzaChcIiAgICBuZXR3b3JrczpcIik7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBuIG9mIHN2Yy5uZXR3b3Jrcykge1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBuID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRcdGxpbmVzLnB1c2goYCAgICAgICR7bn06YCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IFtuZXRLZXksIGNmZ10gb2YgT2JqZWN0LmVudHJpZXMobikpIHtcblx0XHRcdFx0XHRcdFx0XHRsaW5lcy5wdXNoKGAgICAgICAke25ldEtleX06YCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNmZy5hbGlhc2VzICYmIGNmZy5hbGlhc2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgICAgIGFsaWFzZXM6XCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBhIG9mIGNmZy5hbGlhc2VzKSBsaW5lcy5wdXNoKGAgICAgICAgICAgLSAke2F9YCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdmMuZGVwZW5kc19vbiAmJiBzdmMuZGVwZW5kc19vbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgZGVwZW5kc19vbjpcIik7XG5cdFx0XHRcdGZvciAoY29uc3QgZCBvZiBzdmMuZGVwZW5kc19vbikgbGluZXMucHVzaChgICAgICAgLSAke2R9YCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdmMuaGVhbHRoY2hlY2spIHtcblx0XHRcdFx0Y29uc3QgaGMgPSBzdmMuaGVhbHRoY2hlY2s7XG5cdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgaGVhbHRoY2hlY2s6XCIpO1xuXHRcdFx0XHRsaW5lcy5wdXNoKGAgICAgICB0ZXN0OiAke0pTT04uc3RyaW5naWZ5KGhjLnRlc3QpfWApO1xuXHRcdFx0XHRpZiAoaGMuaW50ZXJ2YWwpIGxpbmVzLnB1c2goYCAgICAgIGludGVydmFsOiAke2hjLmludGVydmFsfWApO1xuXHRcdFx0XHRpZiAoaGMudGltZW91dCkgbGluZXMucHVzaChgICAgICAgdGltZW91dDogJHtoYy50aW1lb3V0fWApO1xuXHRcdFx0XHRpZiAoaGMucmV0cmllcyAhPSBudWxsKSBsaW5lcy5wdXNoKGAgICAgICByZXRyaWVzOiAke2hjLnJldHJpZXN9YCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX25ldHdvcmtzLnNpemUgPiAwKSB7XG5cdFx0XHRsaW5lcy5wdXNoKFwiXCIpO1xuXHRcdFx0bGluZXMucHVzaChcIm5ldHdvcmtzOlwiKTtcblx0XHRcdGZvciAoY29uc3QgW2tleSwgbmV0XSBvZiB0aGlzLl9uZXR3b3Jrcykge1xuXHRcdFx0XHRsaW5lcy5wdXNoKGAgICR7a2V5fTpgKTtcblx0XHRcdFx0bGluZXMucHVzaChgICAgIG5hbWU6ICR7bmV0Lm5hbWV9YCk7XG5cdFx0XHRcdGlmIChuZXQuZXh0ZXJuYWwpIGxpbmVzLnB1c2goXCIgICAgZXh0ZXJuYWw6IHRydWVcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX3ZvbHVtZXMuc2l6ZSA+IDApIHtcblx0XHRcdGxpbmVzLnB1c2goXCJcIik7XG5cdFx0XHRsaW5lcy5wdXNoKFwidm9sdW1lczpcIik7XG5cdFx0XHRmb3IgKGNvbnN0IHYgb2YgdGhpcy5fdm9sdW1lcykgbGluZXMucHVzaChgICAke3Z9OmApO1xuXHRcdH1cblxuXHRcdHJldHVybiBgJHtsaW5lcy5qb2luKFwiXFxuXCIpfVxcbmA7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJXRUxMX0tOT1dOX0ZJTEVTIiwiRG9ja2VyQ29tcG9zZSIsImtleSIsIkRPQ0tFUl9DT01QT1NFIiwiX3Byb2plY3ROYW1lIiwiX3NlcnZpY2VzIiwiTWFwIiwiX3ZvbHVtZXMiLCJTZXQiLCJfbmV0d29ya3MiLCJzZXRQcm9qZWN0TmFtZSIsIm5hbWUiLCJhZGRTZXJ2aWNlIiwiY29uZmlnIiwic2V0IiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJnZXRDb250ZW50IiwiYWRkVm9sdW1lIiwiYWRkIiwiYWRkTmV0d29yayIsIm5ldHdvcmsiLCJhZGRFbnZGaWxlIiwic2VydmljZU5hbWUiLCJzdmMiLCJnZXQiLCJlbnZfZmlsZSIsImxpbmVzIiwicHVzaCIsImJ1aWxkIiwiaW1hZ2UiLCJjb250YWluZXJfbmFtZSIsImNvbW1hbmQiLCJyZXN0YXJ0IiwibGVuZ3RoIiwiZiIsImVudmlyb25tZW50IiwiT2JqZWN0Iiwia2V5cyIsImsiLCJ2IiwiZW50cmllcyIsInBvcnRzIiwicCIsInZvbHVtZXMiLCJuZXR3b3JrcyIsIm9ubHlTdHJpbmdzIiwiZXZlcnkiLCJuIiwibmV0S2V5IiwiY2ZnIiwiYWxpYXNlcyIsImEiLCJkZXBlbmRzX29uIiwiZCIsImhlYWx0aGNoZWNrIiwiaGMiLCJKU09OIiwic3RyaW5naWZ5IiwidGVzdCIsImludGVydmFsIiwidGltZW91dCIsInJldHJpZXMiLCJzaXplIiwibmV0IiwiZXh0ZXJuYWwiLCJqb2luIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxnQkFBZ0IsUUFBUSxhQUFhO0FBdUM5Qzs7OztDQUlDLEdBQ0QsT0FBTyxNQUFNQztJQUNJQyxNQUFNRixpQkFBaUJHLGNBQWMsQ0FBQztJQUM5Q0MsYUFBaUM7SUFDeEJDLFlBQXlDLElBQUlDLE1BQU07SUFDbkRDLFdBQXdCLElBQUlDLE1BQU07SUFDbENDLFlBQXlDLElBQUlILE1BQU07SUFFcEUsNEVBQTRFLEdBQzVFLEFBQU9JLGVBQWVDLElBQVksRUFBUTtRQUN6QyxJQUFJLENBQUNQLFlBQVksR0FBR087UUFDcEIsT0FBTyxJQUFJO0lBQ1o7SUFFT0MsV0FBV0QsSUFBWSxFQUFFRSxNQUFzQixFQUFRO1FBQzdELElBQUksQ0FBQ1IsU0FBUyxDQUFDUyxHQUFHLENBQUNILE1BQU1FO1FBQ3pCLE9BQU8sSUFBSTtJQUNaO0lBRU9FLFFBQVE7UUFDZCxPQUFPO1lBQ047Z0JBQ0NDLFVBQVU7Z0JBQ1ZDLFNBQVMsSUFBSSxDQUFDQyxVQUFVO1lBQ3pCO1NBQ0E7SUFDRjtJQUVPQyxVQUFVUixJQUFZLEVBQVE7UUFDcEMsSUFBSSxDQUFDSixRQUFRLENBQUNhLEdBQUcsQ0FBQ1Q7UUFDbEIsT0FBTyxJQUFJO0lBQ1o7SUFFT1UsV0FBV25CLEdBQVcsRUFBRW9CLE9BQXVCLEVBQVE7UUFDN0QsSUFBSSxD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
@@ -1,21 +1,18 @@
1
1
  import { WELL_KNOWN_FILES } from "./const.js";
2
- /**
3
- * Model for `.devcontainer/devcontainer.json`.
4
- *
5
- * Features call builder methods (`addExtension`, `forwardPort`, etc.) during
6
- * their configure phase. `MonoRepoScaffold` calls `files()` at render time.
7
- */ export class DevContainer {
2
+ export class DevContainer {
8
3
  key = WELL_KNOWN_FILES.DEVCONTAINER_JSON;
9
4
  _extensions = [];
10
5
  _ports = [];
6
+ _portAttributes = new Map();
11
7
  _mounts;
12
8
  _postStartCommand;
9
+ _initializeCommand;
10
+ _remoteUser = "node";
13
11
  _useCompose = false;
14
12
  constructor(){
15
13
  this._mounts = [
16
14
  "source=..,target=/workspace,type=bind,consistency=cached"
17
15
  ];
18
- this.forwardPort(3000);
19
16
  }
20
17
  addExtension(...ids) {
21
18
  this._extensions.push(...ids);
@@ -25,10 +22,22 @@ import { WELL_KNOWN_FILES } from "./const.js";
25
22
  this._ports.push(...ports);
26
23
  return this;
27
24
  }
25
+ setPortAttributes(port, attrs) {
26
+ this._portAttributes.set(port, attrs);
27
+ return this;
28
+ }
28
29
  setPostStartCommand(cmd) {
29
30
  this._postStartCommand = cmd;
30
31
  return this;
31
32
  }
33
+ setInitializeCommand(cmd) {
34
+ this._initializeCommand = cmd;
35
+ return this;
36
+ }
37
+ setRemoteUser(user) {
38
+ this._remoteUser = user;
39
+ return this;
40
+ }
32
41
  useCompose() {
33
42
  this._useCompose = true;
34
43
  return this;
@@ -40,6 +49,9 @@ import { WELL_KNOWN_FILES } from "./const.js";
40
49
  config.service = "devcontainer";
41
50
  config.workspaceFolder = "/workspace";
42
51
  }
52
+ if (this._initializeCommand) {
53
+ config.initializeCommand = this._initializeCommand;
54
+ }
43
55
  if (this._mounts) {
44
56
  config.mounts = this._mounts;
45
57
  }
@@ -53,9 +65,19 @@ import { WELL_KNOWN_FILES } from "./const.js";
53
65
  if (this._ports.length > 0) {
54
66
  config.forwardPorts = this._ports;
55
67
  }
68
+ if (this._portAttributes.size > 0) {
69
+ const portsAttributes = {};
70
+ for (const [port, attrs] of this._portAttributes){
71
+ portsAttributes[String(port)] = attrs;
72
+ }
73
+ config.portsAttributes = portsAttributes;
74
+ }
56
75
  if (this._postStartCommand) {
57
76
  config.postStartCommand = this._postStartCommand;
58
77
  }
78
+ if (this._remoteUser) {
79
+ config.remoteUser = this._remoteUser;
80
+ }
59
81
  return [
60
82
  {
61
83
  filePath: ".devcontainer/devcontainer.json",
@@ -65,4 +87,4 @@ import { WELL_KNOWN_FILES } from "./const.js";
65
87
  }
66
88
  }
67
89
 
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2Rldi1jb250YWluZXIubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwsIFNvdXJjZUZpbGUgfSBmcm9tIFwiLi9zb3VyY2UtZmlsZS5qc1wiO1xuXG4vKipcbiAqIE1vZGVsIGZvciBgLmRldmNvbnRhaW5lci9kZXZjb250YWluZXIuanNvbmAuXG4gKlxuICogRmVhdHVyZXMgY2FsbCBidWlsZGVyIG1ldGhvZHMgKGBhZGRFeHRlbnNpb25gLCBgZm9yd2FyZFBvcnRgLCBldGMuKSBkdXJpbmdcbiAqIHRoZWlyIGNvbmZpZ3VyZSBwaGFzZS4gYE1vbm9SZXBvU2NhZmZvbGRgIGNhbGxzIGBmaWxlcygpYCBhdCByZW5kZXIgdGltZS5cbiAqL1xuXG5leHBvcnQgY2xhc3MgRGV2Q29udGFpbmVyIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLkRFVkNPTlRBSU5FUl9KU09OO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9leHRlbnNpb25zOiBzdHJpbmdbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9wb3J0czogbnVtYmVyW10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBfbW91bnRzOiBzdHJpbmdbXTtcblx0cHJpdmF0ZSBfcG9zdFN0YXJ0Q29tbWFuZD86IHN0cmluZztcblx0cHJpdmF0ZSBfdXNlQ29tcG9zZSA9IGZhbHNlO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl9tb3VudHMgPSBbXCJzb3VyY2U9Li4sdGFyZ2V0PS93b3Jrc3BhY2UsdHlwZT1iaW5kLGNvbnNpc3RlbmN5PWNhY2hlZFwiXTtcblx0XHR0aGlzLmZvcndhcmRQb3J0KDMwMDApO1xuXHR9XG5cblx0cHVibGljIGFkZEV4dGVuc2lvbiguLi5pZHM6IHN0cmluZ1tdKTogdGhpcyB7XG5cdFx0dGhpcy5fZXh0ZW5zaW9ucy5wdXNoKC4uLmlkcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZm9yd2FyZFBvcnQoLi4ucG9ydHM6IG51bWJlcltdKTogdGhpcyB7XG5cdFx0dGhpcy5fcG9ydHMucHVzaCguLi5wb3J0cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgc2V0UG9zdFN0YXJ0Q29tbWFuZChjbWQ6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX3Bvc3RTdGFydENvbW1hbmQgPSBjbWQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgdXNlQ29tcG9zZSgpOiB0aGlzIHtcblx0XHR0aGlzLl91c2VDb21wb3NlID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdGNvbnN0IGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuXHRcdGlmICh0aGlzLl91c2VDb21wb3NlKSB7XG5cdFx0XHRjb25maWcuZG9ja2VyQ29tcG9zZUZpbGUgPSBcImRvY2tlci1jb21wb3NlLnltbFwiO1xuXHRcdFx0Y29uZmlnLnNlcnZpY2UgPSBcImRldmNvbnRhaW5lclwiO1xuXHRcdFx0Y29uZmlnLndvcmtzcGFjZUZvbGRlciA9IFwiL3dvcmtzcGFjZVwiO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9tb3VudHMpIHtcblx0XHRcdGNvbmZpZy5tb3VudHMgPSB0aGlzLl9tb3VudHM7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2V4dGVuc2lvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uZmlnLmN1c3RvbWl6YXRpb25zID0geyB2c2NvZGU6IHsgZXh0ZW5zaW9uczogdGhpcy5fZXh0ZW5zaW9ucyB9IH07XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX3BvcnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbmZpZy5mb3J3YXJkUG9ydHMgPSB0aGlzLl9wb3J0cztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fcG9zdFN0YXJ0Q29tbWFuZCkge1xuXHRcdFx0Y29uZmlnLnBvc3RTdGFydENvbW1hbmQgPSB0aGlzLl9wb3N0U3RhcnRDb21tYW5kO1xuXHRcdH1cblxuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5kZXZjb250YWluZXIvZGV2Y29udGFpbmVyLmpzb25cIixcblx0XHRcdFx0Y29udGVudDogSlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIldFTExfS05PV05fRklMRVMiLCJEZXZDb250YWluZXIiLCJrZXkiLCJERVZDT05UQUlORVJfSlNPTiIsIl9leHRlbnNpb25zIiwiX3BvcnRzIiwiX21vdW50cyIsIl9wb3N0U3RhcnRDb21tYW5kIiwiX3VzZUNvbXBvc2UiLCJmb3J3YXJkUG9ydCIsImFkZEV4dGVuc2lvbiIsImlkcyIsInB1c2giLCJwb3J0cyIsInNldFBvc3RTdGFydENvbW1hbmQiLCJjbWQiLCJ1c2VDb21wb3NlIiwiZmlsZXMiLCJjb25maWciLCJkb2NrZXJDb21wb3NlRmlsZSIsInNlcnZpY2UiLCJ3b3Jrc3BhY2VGb2xkZXIiLCJtb3VudHMiLCJsZW5ndGgiLCJjdXN0b21pemF0aW9ucyIsInZzY29kZSIsImV4dGVuc2lvbnMiLCJmb3J3YXJkUG9ydHMiLCJwb3N0U3RhcnRDb21tYW5kIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiSlNPTiIsInN0cmluZ2lmeSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsZ0JBQWdCLFFBQVEsYUFBYTtBQUc5Qzs7Ozs7Q0FLQyxHQUVELE9BQU8sTUFBTUM7SUFDSUMsTUFBTUYsaUJBQWlCRyxpQkFBaUIsQ0FBQztJQUN4Q0MsY0FBd0IsRUFBRSxDQUFDO0lBQzNCQyxTQUFtQixFQUFFLENBQUM7SUFDdEJDLFFBQWtCO0lBQzNCQyxrQkFBMkI7SUFDM0JDLGNBQWMsTUFBTTtJQUU1QixhQUFxQjtRQUNwQixJQUFJLENBQUNGLE9BQU8sR0FBRztZQUFDO1NBQTJEO1FBQzNFLElBQUksQ0FBQ0csV0FBVyxDQUFDO0lBQ2xCO0lBRU9DLGFBQWEsR0FBR0MsR0FBYSxFQUFRO1FBQzNDLElBQUksQ0FBQ1AsV0FBVyxDQUFDUSxJQUFJLElBQUlEO1FBQ3pCLE9BQU8sSUFBSTtJQUNaO0lBRU9GLFlBQVksR0FBR0ksS0FBZSxFQUFRO1FBQzVDLElBQUksQ0FBQ1IsTUFBTSxDQUFDTyxJQUFJLElBQUlDO1FBQ3BCLE9BQU8sSUFBSTtJQUNaO0lBRU9DLG9CQUFvQkMsR0FBVyxFQUFRO1FBQzdDLElBQUksQ0FBQ1IsaUJBQWlCLEdBQUdRO1FBQ3pCLE9BQU8sSUFBSTtJQUNaO0lBRU9DLGFBQW1CO1FBQ3pCLElBQUksQ0FBQ1IsV0FBVyxHQUFHO1FBQ25CLE9BQU8sSUFBSTtJQUNaO0lBRU9TLFFBQXNCO1FBQzVCLE1BQU1DLFNBQWtDLENBQUM7UUFFekMsSUFBSSxJQUFJLENBQUNWLFdBQVcsRUFBRTtZQUNyQlUsT0FBT0MsaUJBQWlCLEdBQUc7WUFDM0JELE9BQU9FLE9BQU8sR0FBRztZQUNqQkYsT0FBT0csZUFBZSxHQUFHO1FBQzFCO1FBRUEsSUFBSSxJQUFJLENBQUNmLE9BQU8sRUFBRTtZQUNqQlksT0FBT0ksTUFBTSxHQUFHLElBQUksQ0FBQ2hCLE9BQU87UUFDN0I7UUFFQSxJQUFJLElBQUksQ0FBQ0YsV0FBVyxDQUFDbUIsTUFBTSxHQUFHLEdBQUc7WUFDaENMLE9BQU9NLGNBQWMsR0FBRztnQkFBRUMsUUFBUTtvQkFBRUMsWUFBWSxJQUFJLENBQUN0QixXQUFXO2dCQUFDO1lBQUU7UUFDcEU7UUFFQSxJQUFJLElBQUksQ0FBQ0MsTUFBTSxDQUFDa0IsTUFBTSxHQUFHLEdBQUc7WUFDM0JMLE9BQU9TLFlBQVksR0FBRyxJQUFJLENBQUN0QixNQUFNO1FBQ2xDO1FBRUEsSUFBSSxJQUFJLENBQUNFLGlCQUFpQixFQUFFO1lBQzNCVyxPQUFPVSxnQkFBZ0IsR0FBRyxJQUFJLENBQUNyQixpQkFBaUI7UUFDakQ7UUFFQSxPQUFPO1lBQ047Z0JBQ0NzQixVQUFVO2dCQUNWQyxTQUFTQyxLQUFLQyxTQUFTLENBQUNkLFFBQVEsTUFBTTtZQUN2QztTQUNBO0lBQ0Y7QUFDRCJ9
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2Rldi1jb250YWluZXIubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwsIFNvdXJjZUZpbGUgfSBmcm9tIFwiLi9zb3VyY2UtZmlsZS5qc1wiO1xuXG4vKipcbiAqIE1vZGVsIGZvciBgLmRldmNvbnRhaW5lci9kZXZjb250YWluZXIuanNvbmAuXG4gKlxuICogRmVhdHVyZXMgY2FsbCBidWlsZGVyIG1ldGhvZHMgKGBhZGRFeHRlbnNpb25gLCBgZm9yd2FyZFBvcnRgLCBldGMuKSBkdXJpbmdcbiAqIHRoZWlyIGNvbmZpZ3VyZSBwaGFzZS4gYE1vbm9SZXBvU2NhZmZvbGRgIGNhbGxzIGBmaWxlcygpYCBhdCByZW5kZXIgdGltZS5cbiAqL1xuXG5leHBvcnQgdHlwZSBQb3J0QXR0cmlidXRlcyA9IHtcblx0bGFiZWw/OiBzdHJpbmc7XG5cdC8qKiBXaGVuIHRydWUsIGhvc3QgcG9ydCBtdXN0IG1hdGNoIHRoZSBjb250YWluZXIgcG9ydCAobm8gcmFuZG9tIHJlbWFwKS4gKi9cblx0cmVxdWlyZUxvY2FsUG9ydD86IGJvb2xlYW47XG5cdG9uQXV0b0ZvcndhcmQ/OiBcIm5vdGlmeVwiIHwgXCJvcGVuQnJvd3NlclwiIHwgXCJvcGVuUHJldmlld1wiIHwgXCJzaWxlbnRcIiB8IFwiaWdub3JlXCI7XG59O1xuXG5leHBvcnQgY2xhc3MgRGV2Q29udGFpbmVyIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLkRFVkNPTlRBSU5FUl9KU09OO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9leHRlbnNpb25zOiBzdHJpbmdbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9wb3J0czogbnVtYmVyW10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBfcG9ydEF0dHJpYnV0ZXMgPSBuZXcgTWFwPG51bWJlciwgUG9ydEF0dHJpYnV0ZXM+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX21vdW50czogc3RyaW5nW107XG5cdHByaXZhdGUgX3Bvc3RTdGFydENvbW1hbmQ/OiBzdHJpbmc7XG5cdHByaXZhdGUgX2luaXRpYWxpemVDb21tYW5kPzogc3RyaW5nO1xuXHRwcml2YXRlIF9yZW1vdGVVc2VyID0gXCJub2RlXCI7XG5cdHByaXZhdGUgX3VzZUNvbXBvc2UgPSBmYWxzZTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5fbW91bnRzID0gW1wic291cmNlPS4uLHRhcmdldD0vd29ya3NwYWNlLHR5cGU9YmluZCxjb25zaXN0ZW5jeT1jYWNoZWRcIl07XG5cdH1cblxuXHRwdWJsaWMgYWRkRXh0ZW5zaW9uKC4uLmlkczogc3RyaW5nW10pOiB0aGlzIHtcblx0XHR0aGlzLl9leHRlbnNpb25zLnB1c2goLi4uaWRzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBmb3J3YXJkUG9ydCguLi5wb3J0czogbnVtYmVyW10pOiB0aGlzIHtcblx0XHR0aGlzLl9wb3J0cy5wdXNoKC4uLnBvcnRzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBzZXRQb3J0QXR0cmlidXRlcyhwb3J0OiBudW1iZXIsIGF0dHJzOiBQb3J0QXR0cmlidXRlcyk6IHRoaXMge1xuXHRcdHRoaXMuX3BvcnRBdHRyaWJ1dGVzLnNldChwb3J0LCBhdHRycyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgc2V0UG9zdFN0YXJ0Q29tbWFuZChjbWQ6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX3Bvc3RTdGFydENvbW1hbmQgPSBjbWQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgc2V0SW5pdGlhbGl6ZUNvbW1hbmQoY21kOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9pbml0aWFsaXplQ29tbWFuZCA9IGNtZDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBzZXRSZW1vdGVVc2VyKHVzZXI6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX3JlbW90ZVVzZXIgPSB1c2VyO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHVzZUNvbXBvc2UoKTogdGhpcyB7XG5cdFx0dGhpcy5fdXNlQ29tcG9zZSA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRjb25zdCBjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cblx0XHRpZiAodGhpcy5fdXNlQ29tcG9zZSkge1xuXHRcdFx0Y29uZmlnLmRvY2tlckNvbXBvc2VGaWxlID0gXCJkb2NrZXItY29tcG9zZS55bWxcIjtcblx0XHRcdGNvbmZpZy5zZXJ2aWNlID0gXCJkZXZjb250YWluZXJcIjtcblx0XHRcdGNvbmZpZy53b3Jrc3BhY2VGb2xkZXIgPSBcIi93b3Jrc3BhY2VcIjtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5faW5pdGlhbGl6ZUNvbW1hbmQpIHtcblx0XHRcdGNvbmZpZy5pbml0aWFsaXplQ29tbWFuZCA9IHRoaXMuX2luaXRpYWxpemVDb21tYW5kO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9tb3VudHMpIHtcblx0XHRcdGNvbmZpZy5tb3VudHMgPSB0aGlzLl9tb3VudHM7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2V4dGVuc2lvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uZmlnLmN1c3RvbWl6YXRpb25zID0geyB2c2NvZGU6IHsgZXh0ZW5zaW9uczogdGhpcy5fZXh0ZW5zaW9ucyB9IH07XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX3BvcnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbmZpZy5mb3J3YXJkUG9ydHMgPSB0aGlzLl9wb3J0cztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fcG9ydEF0dHJpYnV0ZXMuc2l6ZSA+IDApIHtcblx0XHRcdGNvbnN0IHBvcnRzQXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgUG9ydEF0dHJpYnV0ZXM+ID0ge307XG5cdFx0XHRmb3IgKGNvbnN0IFtwb3J0LCBhdHRyc10gb2YgdGhpcy5fcG9ydEF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0cG9ydHNBdHRyaWJ1dGVzW1N0cmluZyhwb3J0KV0gPSBhdHRycztcblx0XHRcdH1cblx0XHRcdGNvbmZpZy5wb3J0c0F0dHJpYnV0ZXMgPSBwb3J0c0F0dHJpYnV0ZXM7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX3Bvc3RTdGFydENvbW1hbmQpIHtcblx0XHRcdGNvbmZpZy5wb3N0U3RhcnRDb21tYW5kID0gdGhpcy5fcG9zdFN0YXJ0Q29tbWFuZDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fcmVtb3RlVXNlcikge1xuXHRcdFx0Y29uZmlnLnJlbW90ZVVzZXIgPSB0aGlzLl9yZW1vdGVVc2VyO1xuXHRcdH1cblxuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5kZXZjb250YWluZXIvZGV2Y29udGFpbmVyLmpzb25cIixcblx0XHRcdFx0Y29udGVudDogSlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIldFTExfS05PV05fRklMRVMiLCJEZXZDb250YWluZXIiLCJrZXkiLCJERVZDT05UQUlORVJfSlNPTiIsIl9leHRlbnNpb25zIiwiX3BvcnRzIiwiX3BvcnRBdHRyaWJ1dGVzIiwiTWFwIiwiX21vdW50cyIsIl9wb3N0U3RhcnRDb21tYW5kIiwiX2luaXRpYWxpemVDb21tYW5kIiwiX3JlbW90ZVVzZXIiLCJfdXNlQ29tcG9zZSIsImFkZEV4dGVuc2lvbiIsImlkcyIsInB1c2giLCJmb3J3YXJkUG9ydCIsInBvcnRzIiwic2V0UG9ydEF0dHJpYnV0ZXMiLCJwb3J0IiwiYXR0cnMiLCJzZXQiLCJzZXRQb3N0U3RhcnRDb21tYW5kIiwiY21kIiwic2V0SW5pdGlhbGl6ZUNvbW1hbmQiLCJzZXRSZW1vdGVVc2VyIiwidXNlciIsInVzZUNvbXBvc2UiLCJmaWxlcyIsImNvbmZpZyIsImRvY2tlckNvbXBvc2VGaWxlIiwic2VydmljZSIsIndvcmtzcGFjZUZvbGRlciIsImluaXRpYWxpemVDb21tYW5kIiwibW91bnRzIiwibGVuZ3RoIiwiY3VzdG9taXphdGlvbnMiLCJ2c2NvZGUiLCJleHRlbnNpb25zIiwiZm9yd2FyZFBvcnRzIiwic2l6ZSIsInBvcnRzQXR0cmlidXRlcyIsIlN0cmluZyIsInBvc3RTdGFydENvbW1hbmQiLCJyZW1vdGVVc2VyIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiSlNPTiIsInN0cmluZ2lmeSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsZ0JBQWdCLFFBQVEsYUFBYTtBQWlCOUMsT0FBTyxNQUFNQztJQUNJQyxNQUFNRixpQkFBaUJHLGlCQUFpQixDQUFDO0lBQ3hDQyxjQUF3QixFQUFFLENBQUM7SUFDM0JDLFNBQW1CLEVBQUUsQ0FBQztJQUN0QkMsa0JBQWtCLElBQUlDLE1BQThCO0lBQ3BEQyxRQUFrQjtJQUMzQkMsa0JBQTJCO0lBQzNCQyxtQkFBNEI7SUFDNUJDLGNBQWMsT0FBTztJQUNyQkMsY0FBYyxNQUFNO0lBRTVCLGFBQXFCO1FBQ3BCLElBQUksQ0FBQ0osT0FBTyxHQUFHO1lBQUM7U0FBMkQ7SUFDNUU7SUFFT0ssYUFBYSxHQUFHQyxHQUFhLEVBQVE7UUFDM0MsSUFBSSxDQUFDVixXQUFXLENBQUNXLElBQUksSUFBSUQ7UUFDekIsT0FBTyxJQUFJO0lBQ1o7SUFFT0UsWUFBWSxHQUFHQyxLQUFlLEVBQVE7UUFDNUMsSUFBSSxDQUFDWixNQUFNLENBQUNVLElBQUksSUFBSUU7UUFDcEIsT0FBTyxJQUFJO0lBQ1o7SUFFT0Msa0JBQWtCQyxJQUFZLEVBQUVDLEtBQXFCLEVBQVE7UUFDbkUsSUFBSSxDQUFDZCxlQUFlLENBQUNlLEdBQUcsQ0FBQ0YsTUFBTUM7UUFDL0IsT0FBTyxJQUFJO0lBQ1o7SUFFT0Usb0JBQW9CQyxHQUFXLEVBQVE7UUFDN0MsSUFBSSxDQUFDZCxpQkFBaUIsR0FBR2M7UUFDekIsT0FBTyxJQUFJO0lBQ1o7SUFFT0MscUJBQXFCRCxHQUFXLEVBQVE7UUFDOUMsSUFBSSxDQUFDYixrQkFBa0IsR0FBR2E7UUFDMUIsT0FBTyxJQUFJO0lBQ1o7SUFFT0UsY0FBY0MsSUFBWSxFQUFRO1FBQ3hDLElBQUksQ0FBQ2YsV0FBVyxHQUFHZTtRQUNuQixPQUFPLElBQUk7SUFDWjtJQUVPQyxhQUFtQjtRQUN6QixJQUFJLENBQUNmLFdBQVcsR0FBRztRQUNuQixPQUFPLElBQUk7SUFDWjtJQUVPZ0IsUUFBc0I7UUFDNUIsTUFBTUMsU0FBa0MsQ0FBQztRQUV6QyxJQUFJLElBQUksQ0FBQ2pCLFdBQVcsRUFBRTtZQUNyQmlCLE9BQU9DLGlCQUFpQixHQUFHO1lBQzNCRCxPQUFPRSxPQUFPLEdBQUc7WUFDakJGLE9BQU9HLGVBQWUsR0FBRztRQUMxQjtRQUVBLElBQUksSUFBSSxDQUFDdEIsa0JBQWtCLEVBQUU7WUFDNUJtQixPQUFPSSxpQkFBaUIsR0FBRyxJQUFJLENBQUN2QixrQkFBa0I7UUFDbkQ7UUFFQSxJQUFJLElBQUksQ0FBQ0YsT0FBTyxFQUFFO1lBQ2pCcUIsT0FBT0ssTUFBTSxHQUFHLElBQUksQ0FBQzFCLE9BQU87UUFDN0I7UUFFQSxJQUFJLElBQUksQ0FBQ0osV0FBVyxDQUFDK0IsTUFBTSxHQUFHLEdBQUc7WUFDaENOLE9BQU9PLGNBQWMsR0FBRztnQkFBRUMsUUFBUTtvQkFBRUMsWUFBWSxJQUFJLENBQUNsQyxXQUFXO2dCQUFDO1lBQUU7UUFDcEU7UUFFQSxJQUFJLElBQUksQ0FBQ0MsTUFBTSxDQUFDOEIsTUFBTSxHQUFHLEdBQUc7WUFDM0JOLE9BQU9VLFlBQVksR0FBRyxJQUFJLENBQUNsQyxNQUFNO1FBQ2xDO1FBRUEsSUFBSSxJQUFJLENBQUNDLGVBQWUsQ0FBQ2tDLElBQUksR0FBRyxHQUFHO1lBQ2xDLE1BQU1DLGtCQUFrRCxDQUFDO1lBQ3pELEtBQUssTUFBTSxDQUFDdEIsTUFBTUMsTUFBTSxJQUFJLElBQUksQ0FBQ2QsZUFBZSxDQUFFO2dCQUNqRG1DLGVBQWUsQ0FBQ0MsT0FBT3ZCLE1BQU0sR0FBR0M7WUFDakM7WUFDQVMsT0FBT1ksZUFBZSxHQUFHQTtRQUMxQjtRQUVBLElBQUksSUFBSSxDQUFDaEMsaUJBQWlCLEVBQUU7WUFDM0JvQixPQUFPYyxnQkFBZ0IsR0FBRyxJQUFJLENBQUNsQyxpQkFBaUI7UUFDakQ7UUFFQSxJQUFJLElBQUksQ0FBQ0UsV0FBVyxFQUFFO1lBQ3JCa0IsT0FBT2UsVUFBVSxHQUFHLElBQUksQ0FBQ2pDLFdBQVc7UUFDckM7UUFFQSxPQUFPO1lBQ047Z0JBQ0NrQyxVQUFVO2dCQUNWQyxTQUFTQyxLQUFLQyxTQUFTLENBQUNuQixRQUFRLE1BQU07WUFDdkM7U0FDQTtJQUNGO0FBQ0QifQ==
@@ -11,6 +11,11 @@ import { WELL_KNOWN_FILES } from "./const.js";
11
11
  key = WELL_KNOWN_FILES.PACKAGE_JSON;
12
12
  _dependencies;
13
13
  _devDependencies;
14
+ _scripts = {
15
+ build: "forge build",
16
+ "build:watch": "forge build --watch",
17
+ dev: "flux serve"
18
+ };
14
19
  constructor(name){
15
20
  this.name = name;
16
21
  this._dependencies = {
@@ -36,6 +41,10 @@ import { WELL_KNOWN_FILES } from "./const.js";
36
41
  this._devDependencies[name] = version;
37
42
  return this;
38
43
  }
44
+ addScript(name, command) {
45
+ this._scripts[name] = command;
46
+ return this;
47
+ }
39
48
  files() {
40
49
  return [
41
50
  {
@@ -44,11 +53,7 @@ import { WELL_KNOWN_FILES } from "./const.js";
44
53
  name: this.name,
45
54
  version: "0.0.1",
46
55
  type: "module",
47
- scripts: {
48
- build: "forge build",
49
- "build:watch": "forge build --watch",
50
- dev: "flux serve"
51
- },
56
+ scripts: this._scripts,
52
57
  dependencies: this._dependencies,
53
58
  devDependencies: this._devDependencies
54
59
  }, null, 2)
@@ -57,4 +62,4 @@ import { WELL_KNOWN_FILES } from "./const.js";
57
62
  }
58
63
  }
59
64
 
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDUkVBVEVfVkVSU0lPTiB9IGZyb20gXCIuLi92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbi8qKlxuICogQnVpbGRlciBmb3IgdGhlIHJvb3QgYHBhY2thZ2UuanNvbmAuXG4gKlxuICogU3RhcnRzIHdpdGggdGhlIGNvcmUgQVBJIGRlcGVuZGVuY2llcy4gRmVhdHVyZXMgY2FsbCBgYWRkRGVwZW5kZW5jeWAgL1xuICogYGFkZERldkRlcGVuZGVuY3lgIGR1cmluZyB0aGVpciBzY2FmZm9sZCBwaGFzZSB0byBpbmplY3QgdGhlaXIgb3duIGRlcHNcbiAqIGJlZm9yZSBgZmlsZXMoKWAgaXMgY2FsbGVkIGF0IHJlbmRlciB0aW1lLlxuICovXG5leHBvcnQgY2xhc3MgUGFja2FnZUpzb24gaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuUEFDS0FHRV9KU09OO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgX2RlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0cHJpdmF0ZSByZWFkb25seSBfZGV2RGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZykge1xuXHRcdHRoaXMuX2RlcGVuZGVuY2llcyA9IHtcblx0XHRcdFwiQGRlY29oZXJlL2NvcnRleFwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFwiQGRlY29oZXJlL2NydWNpYmxlXCI6IENSRUFURV9WRVJTSU9OLFxuXHRcdFx0XCJAZGVjb2hlcmUvbmV4dXNcIjogQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcIkBkZWNvaGVyZS9wcm90b2NvbFwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFwiQGRlY29oZXJlL3NjcmliZVwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFwiQGRlY29oZXJlL3NjcmliZS1waW5vXCI6IENSRUFURV9WRVJTSU9OLFxuXHRcdFx0XCJwaW5vLXByZXR0eVwiOiBcIl4xMy4wLjBcIixcblx0XHR9O1xuXHRcdHRoaXMuX2RldkRlcGVuZGVuY2llcyA9IHtcblx0XHRcdFwiQGRlY29oZXJlL3Rlcm1pbmFsXCI6IENSRUFURV9WRVJTSU9OLFxuXHRcdFx0dHlwZXNjcmlwdDogXCJeNi4wLjNcIixcblx0XHRcdFwiQGJpb21lanMvYmlvbWVcIjogXCJeMi4wLjBcIixcblx0XHR9O1xuXHR9XG5cblx0cHVibGljIGFkZERlcGVuZGVuY3kobmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9kZXBlbmRlbmNpZXNbbmFtZV0gPSB2ZXJzaW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZERldkRlcGVuZGVuY3kobmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9kZXZEZXBlbmRlbmNpZXNbbmFtZV0gPSB2ZXJzaW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwicGFja2FnZS5qc29uXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6IHRoaXMubmFtZSxcblx0XHRcdFx0XHRcdHZlcnNpb246IFwiMC4wLjFcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwibW9kdWxlXCIsXG5cdFx0XHRcdFx0XHRzY3JpcHRzOiB7XG5cdFx0XHRcdFx0XHRcdGJ1aWxkOiBcImZvcmdlIGJ1aWxkXCIsXG5cdFx0XHRcdFx0XHRcdFwiYnVpbGQ6d2F0Y2hcIjogXCJmb3JnZSBidWlsZCAtLXdhdGNoXCIsXG5cdFx0XHRcdFx0XHRcdGRldjogXCJmbHV4IHNlcnZlXCIsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGVwZW5kZW5jaWVzOiB0aGlzLl9kZXBlbmRlbmNpZXMsXG5cdFx0XHRcdFx0XHRkZXZEZXBlbmRlbmNpZXM6IHRoaXMuX2RldkRlcGVuZGVuY2llcyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0Mixcblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkNSRUFURV9WRVJTSU9OIiwiV0VMTF9LTk9XTl9GSUxFUyIsIlBhY2thZ2VKc29uIiwia2V5IiwiUEFDS0FHRV9KU09OIiwiX2RlcGVuZGVuY2llcyIsIl9kZXZEZXBlbmRlbmNpZXMiLCJuYW1lIiwidHlwZXNjcmlwdCIsImFkZERlcGVuZGVuY3kiLCJ2ZXJzaW9uIiwiYWRkRGV2RGVwZW5kZW5jeSIsImZpbGVzIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsInR5cGUiLCJzY3JpcHRzIiwiYnVpbGQiLCJkZXYiLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBlbmRlbmNpZXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGNBQWMsUUFBUSxnQkFBZ0I7QUFDL0MsU0FBU0MsZ0JBQWdCLFFBQVEsYUFBYTtBQUc5Qzs7Ozs7O0NBTUMsR0FDRCxPQUFPLE1BQU1DOztJQUNJQyxNQUFNRixpQkFBaUJHLFlBQVksQ0FBQztJQUVuQ0MsY0FBc0M7SUFDdENDLGlCQUF5QztJQUUxRCxZQUFtQixBQUFpQkMsSUFBWSxDQUFFO2FBQWRBLE9BQUFBO1FBQ25DLElBQUksQ0FBQ0YsYUFBYSxHQUFHO1lBQ3BCLG9CQUFvQkw7WUFDcEIsc0JBQXNCQTtZQUN0QixtQkFBbUJBO1lBQ25CLHNCQUFzQkE7WUFDdEIsb0JBQW9CQTtZQUNwQix5QkFBeUJBO1lBQ3pCLGVBQWU7UUFDaEI7UUFDQSxJQUFJLENBQUNNLGdCQUFnQixHQUFHO1lBQ3ZCLHNCQUFzQk47WUFDdEJRLFlBQVk7WUFDWixrQkFBa0I7UUFDbkI7SUFDRDtJQUVPQyxjQUFjRixJQUFZLEVBQUVHLE9BQWUsRUFBUTtRQUN6RCxJQUFJLENBQUNMLGFBQWEsQ0FBQ0UsS0FBSyxHQUFHRztRQUMzQixPQUFPLElBQUk7SUFDWjtJQUVPQyxpQkFBaUJKLElBQVksRUFBRUcsT0FBZSxFQUFRO1FBQzVELElBQUksQ0FBQ0osZ0JBQWdCLENBQUNDLEtBQUssR0FBR0c7UUFDOUIsT0FBTyxJQUFJO0lBQ1o7SUFFT0UsUUFBc0I7UUFDNUIsT0FBTztZQUNOO2dCQUNDQyxVQUFVO2dCQUNWQyxTQUFTQyxLQUFLQyxTQUFTLENBQ3RCO29CQUNDVCxNQUFNLElBQUksQ0FBQ0EsSUFBSTtvQkFDZkcsU0FBUztvQkFDVE8sTUFBTTtvQkFDTkMsU0FBUzt3QkFDUkMsT0FBTzt3QkFDUCxlQUFlO3dCQUNmQyxLQUFLO29CQUNOO29CQUNBQyxjQUFjLElBQUksQ0FBQ2hCLGFBQWE7b0JBQ2hDaUIsaUJBQWlCLElBQUksQ0FBQ2hCLGdCQUFnQjtnQkFDdkMsR0FDQSxNQUNBO1lBRUY7U0FDQTtJQUNGO0FBQ0QifQ==
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDUkVBVEVfVkVSU0lPTiB9IGZyb20gXCIuLi92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbi8qKlxuICogQnVpbGRlciBmb3IgdGhlIHJvb3QgYHBhY2thZ2UuanNvbmAuXG4gKlxuICogU3RhcnRzIHdpdGggdGhlIGNvcmUgQVBJIGRlcGVuZGVuY2llcy4gRmVhdHVyZXMgY2FsbCBgYWRkRGVwZW5kZW5jeWAgL1xuICogYGFkZERldkRlcGVuZGVuY3lgIGR1cmluZyB0aGVpciBzY2FmZm9sZCBwaGFzZSB0byBpbmplY3QgdGhlaXIgb3duIGRlcHNcbiAqIGJlZm9yZSBgZmlsZXMoKWAgaXMgY2FsbGVkIGF0IHJlbmRlciB0aW1lLlxuICovXG5leHBvcnQgY2xhc3MgUGFja2FnZUpzb24gaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuUEFDS0FHRV9KU09OO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgX2RlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0cHJpdmF0ZSByZWFkb25seSBfZGV2RGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHRwcml2YXRlIHJlYWRvbmx5IF9zY3JpcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRcdGJ1aWxkOiBcImZvcmdlIGJ1aWxkXCIsXG5cdFx0XCJidWlsZDp3YXRjaFwiOiBcImZvcmdlIGJ1aWxkIC0td2F0Y2hcIixcblx0XHRkZXY6IFwiZmx1eCBzZXJ2ZVwiLFxuXHR9O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZykge1xuXHRcdHRoaXMuX2RlcGVuZGVuY2llcyA9IHtcblx0XHRcdFwiQGRlY29oZXJlL2NvcnRleFwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFwiQGRlY29oZXJlL2NydWNpYmxlXCI6IENSRUFURV9WRVJTSU9OLFxuXHRcdFx0XCJAZGVjb2hlcmUvbmV4dXNcIjogQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcIkBkZWNvaGVyZS9wcm90b2NvbFwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFwiQGRlY29oZXJlL3NjcmliZVwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFwiQGRlY29oZXJlL3NjcmliZS1waW5vXCI6IENSRUFURV9WRVJTSU9OLFxuXHRcdFx0XCJwaW5vLXByZXR0eVwiOiBcIl4xMy4wLjBcIixcblx0XHR9O1xuXHRcdHRoaXMuX2RldkRlcGVuZGVuY2llcyA9IHtcblx0XHRcdFwiQGRlY29oZXJlL3Rlcm1pbmFsXCI6IENSRUFURV9WRVJTSU9OLFxuXHRcdFx0dHlwZXNjcmlwdDogXCJeNi4wLjNcIixcblx0XHRcdFwiQGJpb21lanMvYmlvbWVcIjogXCJeMi4wLjBcIixcblx0XHR9O1xuXHR9XG5cblx0cHVibGljIGFkZERlcGVuZGVuY3kobmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9kZXBlbmRlbmNpZXNbbmFtZV0gPSB2ZXJzaW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZERldkRlcGVuZGVuY3kobmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9kZXZEZXBlbmRlbmNpZXNbbmFtZV0gPSB2ZXJzaW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZFNjcmlwdChuYW1lOiBzdHJpbmcsIGNvbW1hbmQ6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX3NjcmlwdHNbbmFtZV0gPSBjb21tYW5kO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwicGFja2FnZS5qc29uXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6IHRoaXMubmFtZSxcblx0XHRcdFx0XHRcdHZlcnNpb246IFwiMC4wLjFcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwibW9kdWxlXCIsXG5cdFx0XHRcdFx0XHRzY3JpcHRzOiB0aGlzLl9zY3JpcHRzLFxuXHRcdFx0XHRcdFx0ZGVwZW5kZW5jaWVzOiB0aGlzLl9kZXBlbmRlbmNpZXMsXG5cdFx0XHRcdFx0XHRkZXZEZXBlbmRlbmNpZXM6IHRoaXMuX2RldkRlcGVuZGVuY2llcyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0Mixcblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkNSRUFURV9WRVJTSU9OIiwiV0VMTF9LTk9XTl9GSUxFUyIsIlBhY2thZ2VKc29uIiwia2V5IiwiUEFDS0FHRV9KU09OIiwiX2RlcGVuZGVuY2llcyIsIl9kZXZEZXBlbmRlbmNpZXMiLCJfc2NyaXB0cyIsImJ1aWxkIiwiZGV2IiwibmFtZSIsInR5cGVzY3JpcHQiLCJhZGREZXBlbmRlbmN5IiwidmVyc2lvbiIsImFkZERldkRlcGVuZGVuY3kiLCJhZGRTY3JpcHQiLCJjb21tYW5kIiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJKU09OIiwic3RyaW5naWZ5IiwidHlwZSIsInNjcmlwdHMiLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBlbmRlbmNpZXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGNBQWMsUUFBUSxnQkFBZ0I7QUFDL0MsU0FBU0MsZ0JBQWdCLFFBQVEsYUFBYTtBQUc5Qzs7Ozs7O0NBTUMsR0FDRCxPQUFPLE1BQU1DOztJQUNJQyxNQUFNRixpQkFBaUJHLFlBQVksQ0FBQztJQUVuQ0MsY0FBc0M7SUFDdENDLGlCQUF5QztJQUN6Q0MsV0FBbUM7UUFDbkRDLE9BQU87UUFDUCxlQUFlO1FBQ2ZDLEtBQUs7SUFDTixFQUFFO0lBRUYsWUFBbUIsQUFBaUJDLElBQVksQ0FBRTthQUFkQSxPQUFBQTtRQUNuQyxJQUFJLENBQUNMLGFBQWEsR0FBRztZQUNwQixvQkFBb0JMO1lBQ3BCLHNCQUFzQkE7WUFDdEIsbUJBQW1CQTtZQUNuQixzQkFBc0JBO1lBQ3RCLG9CQUFvQkE7WUFDcEIseUJBQXlCQTtZQUN6QixlQUFlO1FBQ2hCO1FBQ0EsSUFBSSxDQUFDTSxnQkFBZ0IsR0FBRztZQUN2QixzQkFBc0JOO1lBQ3RCVyxZQUFZO1lBQ1osa0JBQWtCO1FBQ25CO0lBQ0Q7SUFFT0MsY0FBY0YsSUFBWSxFQUFFRyxPQUFlLEVBQVE7UUFDekQsSUFBSSxDQUFDUixhQUFhLENBQUNLLEtBQUssR0FBR0c7UUFDM0IsT0FBTyxJQUFJO0lBQ1o7SUFFT0MsaUJBQWlCSixJQUFZLEVBQUVHLE9BQWUsRUFBUTtRQUM1RCxJQUFJLENBQUNQLGdCQUFnQixDQUFDSSxLQUFLLEdBQUdHO1FBQzlCLE9BQU8sSUFBSTtJQUNaO0lBRU9FLFVBQVVMLElBQVksRUFBRU0sT0FBZSxFQUFRO1FBQ3JELElBQUksQ0FBQ1QsUUFBUSxDQUFDRyxLQUFLLEdBQUdNO1FBQ3RCLE9BQU8sSUFBSTtJQUNaO0lBRU9DLFFBQXNCO1FBQzVCLE9BQU87WUFDTjtnQkFDQ0MsVUFBVTtnQkFDVkMsU0FBU0MsS0FBS0MsU0FBUyxDQUN0QjtvQkFDQ1gsTUFBTSxJQUFJLENBQUNBLElBQUk7b0JBQ2ZHLFNBQVM7b0JBQ1RTLE1BQU07b0JBQ05DLFNBQVMsSUFBSSxDQUFDaEIsUUFBUTtvQkFDdEJpQixjQUFjLElBQUksQ0FBQ25CLGFBQWE7b0JBQ2hDb0IsaUJBQWlCLElBQUksQ0FBQ25CLGdCQUFnQjtnQkFDdkMsR0FDQSxNQUNBO1lBRUY7U0FDQTtJQUNGO0FBQ0QifQ==