@decohere/create 0.0.1-dev.42 → 0.0.1-dev.44

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 (47) hide show
  1. package/commonjs/src/models/config-yaml.model.js +58 -4
  2. package/commonjs/src/models/env-file.model.js +14 -1
  3. package/commonjs/src/models/launch-json.model.js +49 -27
  4. package/commonjs/src/models/package-json.model.js +64 -7
  5. package/commonjs/src/models/project.model.js +4 -1
  6. package/commonjs/src/program.js +52 -21
  7. package/commonjs/src/runner.js +13 -2
  8. package/commonjs/src/webapi/api-name.js +95 -0
  9. package/commonjs/src/webapi/const.js +32 -4
  10. package/commonjs/src/webapi/create-api.js +62 -18
  11. package/commonjs/src/webapi/features/auth.feature.js +56 -51
  12. package/commonjs/src/webapi/features/biome-format.js +6 -4
  13. package/commonjs/src/webapi/features/database.feature.js +125 -98
  14. package/commonjs/src/webapi/features/finalize.feature.js +19 -7
  15. package/commonjs/src/webapi/models/api-package-json.model.js +7 -5
  16. package/commonjs/src/webapi/models/main-source-file.model.js +12 -3
  17. package/commonjs/src/webapi/models/production-dockerfile.model.js +76 -36
  18. package/es6/src/models/config-yaml.model.js +47 -1
  19. package/es6/src/models/env-file.model.js +14 -1
  20. package/es6/src/models/launch-json.model.js +49 -27
  21. package/es6/src/models/package-json.model.js +62 -5
  22. package/es6/src/models/project.model.js +4 -1
  23. package/es6/src/program.js +52 -21
  24. package/es6/src/runner.js +13 -2
  25. package/es6/src/webapi/api-name.js +59 -0
  26. package/es6/src/webapi/const.js +18 -5
  27. package/es6/src/webapi/create-api.js +64 -20
  28. package/es6/src/webapi/features/auth.feature.js +56 -51
  29. package/es6/src/webapi/features/biome-format.js +6 -4
  30. package/es6/src/webapi/features/database.feature.js +125 -98
  31. package/es6/src/webapi/features/finalize.feature.js +19 -7
  32. package/es6/src/webapi/models/api-package-json.model.js +8 -6
  33. package/es6/src/webapi/models/main-source-file.model.js +12 -3
  34. package/es6/src/webapi/models/production-dockerfile.model.js +71 -36
  35. package/package.json +2 -2
  36. package/types/src/models/config-yaml.model.d.ts +11 -0
  37. package/types/src/models/env-file.model.d.ts +1 -0
  38. package/types/src/models/launch-json.model.d.ts +2 -0
  39. package/types/src/models/package-json.model.d.ts +16 -6
  40. package/types/src/models/project.model.d.ts +3 -0
  41. package/types/src/webapi/api-name.d.ts +14 -0
  42. package/types/src/webapi/const.d.ts +15 -5
  43. package/types/src/webapi/create-api.d.ts +4 -0
  44. package/types/src/webapi/features/biome-format.d.ts +1 -1
  45. package/types/src/webapi/models/api-package-json.model.d.ts +4 -3
  46. package/types/src/webapi/models/main-source-file.model.d.ts +6 -0
  47. package/types/src/webapi/models/production-dockerfile.model.d.ts +13 -2
@@ -1,4 +1,6 @@
1
+ import { readFileSync } from "node:fs";
1
2
  import { CREATE_VERSION } from "../version.js";
3
+ import { DEFAULT_WEBAPI_NAME, webapiPackageName, webapiPort, webapiReleaseEntry } from "../webapi/const.js";
2
4
  import { WELL_KNOWN_FILES } from "./const.js";
3
5
  /**
4
6
  * Builder for the root `package.json`.
@@ -12,18 +14,31 @@ import { WELL_KNOWN_FILES } from "./const.js";
12
14
  _dependencies;
13
15
  _devDependencies;
14
16
  _scripts;
17
+ _version = "0.0.1";
18
+ _type = "module";
19
+ _rest = {};
15
20
  constructor(name, options){
16
21
  this.name = name;
17
- const startEntry = options?.startEntry ?? "dist/release/projects/api/es6/src/main.js";
22
+ const apiNames = options?.apiNames ?? [
23
+ DEFAULT_WEBAPI_NAME
24
+ ];
25
+ const first = apiNames[0] ?? DEFAULT_WEBAPI_NAME;
26
+ const startEntry = options?.startEntry ?? webapiReleaseEntry(first);
27
+ const workspaceName = options?.workspaceName ?? stripApiSuffix(name);
28
+ const namedOrMany = apiNames.length > 1 || first !== DEFAULT_WEBAPI_NAME;
18
29
  this._scripts = {
19
30
  build: "forge build --configuration release",
20
31
  "build:watch": "forge build --watch",
21
32
  start: `node ${startEntry}`,
22
- dev: "flux serve",
33
+ dev: namedOrMany ? fluxDevScript(workspaceName, first, webapiPort(0)) : "flux serve",
23
34
  "lint:check": "biome check .",
24
35
  typecheck: "tsc --noEmit",
25
36
  test: "vitest run --passWithNoTests"
26
37
  };
38
+ for (const [index, apiName] of apiNames.entries()){
39
+ this._scripts[`start:${apiName}`] = `node ${webapiReleaseEntry(apiName)}`;
40
+ this._scripts[`dev:${apiName}`] = fluxDevScript(workspaceName, apiName, webapiPort(index));
41
+ }
27
42
  this._dependencies = {
28
43
  "@decohere/cortex": CREATE_VERSION,
29
44
  "@decohere/crucible": CREATE_VERSION,
@@ -40,6 +55,33 @@ import { WELL_KNOWN_FILES } from "./const.js";
40
55
  vitest: "^3.2.4"
41
56
  };
42
57
  }
58
+ /** Load an existing root package.json so `webapi add` can merge scripts/deps. */ static fromFile(filePath) {
59
+ const raw = JSON.parse(readFileSync(filePath, "utf8"));
60
+ const pkg = new PackageJson(typeof raw.name === "string" ? raw.name : "app", {
61
+ apiNames: []
62
+ });
63
+ pkg._version = typeof raw.version === "string" ? raw.version : "0.0.1";
64
+ pkg._type = typeof raw.type === "string" ? raw.type : "module";
65
+ pkg._scripts = {
66
+ ...asStringMap(raw.scripts)
67
+ };
68
+ pkg._dependencies = {
69
+ ...asStringMap(raw.dependencies)
70
+ };
71
+ pkg._devDependencies = {
72
+ ...asStringMap(raw.devDependencies)
73
+ };
74
+ const reserved = new Set([
75
+ "name",
76
+ "version",
77
+ "type",
78
+ "scripts",
79
+ "dependencies",
80
+ "devDependencies"
81
+ ]);
82
+ pkg._rest = Object.fromEntries(Object.entries(raw).filter(([key])=>!reserved.has(key)));
83
+ return pkg;
84
+ }
43
85
  addDependency(name, version) {
44
86
  this._dependencies[name] = version;
45
87
  return this;
@@ -58,8 +100,9 @@ import { WELL_KNOWN_FILES } from "./const.js";
58
100
  filePath: "package.json",
59
101
  content: JSON.stringify({
60
102
  name: this.name,
61
- version: "0.0.1",
62
- type: "module",
103
+ version: this._version,
104
+ type: this._type,
105
+ ...this._rest,
63
106
  scripts: this._scripts,
64
107
  dependencies: this._dependencies,
65
108
  devDependencies: this._devDependencies
@@ -68,5 +111,19 @@ import { WELL_KNOWN_FILES } from "./const.js";
68
111
  ];
69
112
  }
70
113
  }
114
+ function stripApiSuffix(name) {
115
+ return name.endsWith(".api") ? name.slice(0, -".api".length) : name;
116
+ }
117
+ function asStringMap(value) {
118
+ if (value == null || typeof value !== "object") return {};
119
+ const result = {};
120
+ for (const [key, entry] of Object.entries(value)){
121
+ if (typeof entry === "string") result[key] = entry;
122
+ }
123
+ return result;
124
+ }
125
+ function fluxDevScript(workspaceName, apiName, port) {
126
+ return `PORT=${port} flux serve --project ${webapiPackageName(workspaceName, apiName)}`;
127
+ }
71
128
 
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDUkVBVEVfVkVSU0lPTiB9IGZyb20gXCIuLi92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbi8qKlxuICogQnVpbGRlciBmb3IgdGhlIHJvb3QgYHBhY2thZ2UuanNvbmAuXG4gKlxuICogU3RhcnRzIHdpdGggdGhlIGNvcmUgQVBJIGRlcGVuZGVuY2llcy4gRmVhdHVyZXMgY2FsbCBgYWRkRGVwZW5kZW5jeWAgL1xuICogYGFkZERldkRlcGVuZGVuY3lgIGR1cmluZyB0aGVpciBzY2FmZm9sZCBwaGFzZSB0byBpbmplY3QgdGhlaXIgb3duIGRlcHNcbiAqIGJlZm9yZSBgZmlsZXMoKWAgaXMgY2FsbGVkIGF0IHJlbmRlciB0aW1lLlxuICovXG5leHBvcnQgY2xhc3MgUGFja2FnZUpzb24gaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuUEFDS0FHRV9KU09OO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgX2RlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0cHJpdmF0ZSByZWFkb25seSBfZGV2RGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHRwcml2YXRlIHJlYWRvbmx5IF9zY3JpcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZyxcblx0XHRvcHRpb25zPzogeyBzdGFydEVudHJ5Pzogc3RyaW5nIH0sXG5cdCkge1xuXHRcdGNvbnN0IHN0YXJ0RW50cnkgPSBvcHRpb25zPy5zdGFydEVudHJ5ID8/IFwiZGlzdC9yZWxlYXNlL3Byb2plY3RzL2FwaS9lczYvc3JjL21haW4uanNcIjtcblx0XHR0aGlzLl9zY3JpcHRzID0ge1xuXHRcdFx0YnVpbGQ6IFwiZm9yZ2UgYnVpbGQgLS1jb25maWd1cmF0aW9uIHJlbGVhc2VcIixcblx0XHRcdFwiYnVpbGQ6d2F0Y2hcIjogXCJmb3JnZSBidWlsZCAtLXdhdGNoXCIsXG5cdFx0XHRzdGFydDogYG5vZGUgJHtzdGFydEVudHJ5fWAsXG5cdFx0XHRkZXY6IFwiZmx1eCBzZXJ2ZVwiLFxuXHRcdFx0XCJsaW50OmNoZWNrXCI6IFwiYmlvbWUgY2hlY2sgLlwiLFxuXHRcdFx0dHlwZWNoZWNrOiBcInRzYyAtLW5vRW1pdFwiLFxuXHRcdFx0dGVzdDogXCJ2aXRlc3QgcnVuIC0tcGFzc1dpdGhOb1Rlc3RzXCIsXG5cdFx0fTtcblx0XHR0aGlzLl9kZXBlbmRlbmNpZXMgPSB7XG5cdFx0XHRcIkBkZWNvaGVyZS9jb3J0ZXhcIjogQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcIkBkZWNvaGVyZS9jcnVjaWJsZVwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFwiQGRlY29oZXJlL25leHVzXCI6IENSRUFURV9WRVJTSU9OLFxuXHRcdFx0XCJAZGVjb2hlcmUvcHJvdG9jb2xcIjogQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcIkBkZWNvaGVyZS9zY3JpYmVcIjogQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcIkBkZWNvaGVyZS9zY3JpYmUtcGlub1wiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFwicGluby1wcmV0dHlcIjogXCJeMTMuMC4wXCIsXG5cdFx0fTtcblx0XHR0aGlzLl9kZXZEZXBlbmRlbmNpZXMgPSB7XG5cdFx0XHRcIkBkZWNvaGVyZS90ZXJtaW5hbFwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdHR5cGVzY3JpcHQ6IFwiXjYuMC4zXCIsXG5cdFx0XHRcIkBiaW9tZWpzL2Jpb21lXCI6IFwiXjIuMC4wXCIsXG5cdFx0XHR2aXRlc3Q6IFwiXjMuMi40XCIsXG5cdFx0fTtcblx0fVxuXG5cdHB1YmxpYyBhZGREZXBlbmRlbmN5KG5hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fZGVwZW5kZW5jaWVzW25hbWVdID0gdmVyc2lvbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBhZGREZXZEZXBlbmRlbmN5KG5hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fZGV2RGVwZW5kZW5jaWVzW25hbWVdID0gdmVyc2lvbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBhZGRTY3JpcHQobmFtZTogc3RyaW5nLCBjb21tYW5kOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9zY3JpcHRzW25hbWVdID0gY29tbWFuZDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInBhY2thZ2UuanNvblwiLFxuXHRcdFx0XHRjb250ZW50OiBKU09OLnN0cmluZ2lmeShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiB0aGlzLm5hbWUsXG5cdFx0XHRcdFx0XHR2ZXJzaW9uOiBcIjAuMC4xXCIsXG5cdFx0XHRcdFx0XHR0eXBlOiBcIm1vZHVsZVwiLFxuXHRcdFx0XHRcdFx0c2NyaXB0czogdGhpcy5fc2NyaXB0cyxcblx0XHRcdFx0XHRcdGRlcGVuZGVuY2llczogdGhpcy5fZGVwZW5kZW5jaWVzLFxuXHRcdFx0XHRcdFx0ZGV2RGVwZW5kZW5jaWVzOiB0aGlzLl9kZXZEZXBlbmRlbmNpZXMsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdDIsXG5cdFx0XHRcdCksXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJDUkVBVEVfVkVSU0lPTiIsIldFTExfS05PV05fRklMRVMiLCJQYWNrYWdlSnNvbiIsImtleSIsIlBBQ0tBR0VfSlNPTiIsIl9kZXBlbmRlbmNpZXMiLCJfZGV2RGVwZW5kZW5jaWVzIiwiX3NjcmlwdHMiLCJuYW1lIiwib3B0aW9ucyIsInN0YXJ0RW50cnkiLCJidWlsZCIsInN0YXJ0IiwiZGV2IiwidHlwZWNoZWNrIiwidGVzdCIsInR5cGVzY3JpcHQiLCJ2aXRlc3QiLCJhZGREZXBlbmRlbmN5IiwidmVyc2lvbiIsImFkZERldkRlcGVuZGVuY3kiLCJhZGRTY3JpcHQiLCJjb21tYW5kIiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJKU09OIiwic3RyaW5naWZ5IiwidHlwZSIsInNjcmlwdHMiLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBlbmRlbmNpZXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGNBQWMsUUFBUSxnQkFBZ0I7QUFDL0MsU0FBU0MsZ0JBQWdCLFFBQVEsYUFBYTtBQUc5Qzs7Ozs7O0NBTUMsR0FDRCxPQUFPLE1BQU1DOztJQUNJQyxNQUFNRixpQkFBaUJHLFlBQVksQ0FBQztJQUVuQ0MsY0FBc0M7SUFDdENDLGlCQUF5QztJQUN6Q0MsU0FBaUM7SUFFbEQsWUFDQyxBQUFpQkMsSUFBWSxFQUM3QkMsT0FBaUMsQ0FDaEM7YUFGZ0JELE9BQUFBO1FBR2pCLE1BQU1FLGFBQWFELFNBQVNDLGNBQWM7UUFDMUMsSUFBSSxDQUFDSCxRQUFRLEdBQUc7WUFDZkksT0FBTztZQUNQLGVBQWU7WUFDZkMsT0FBTyxDQUFDLEtBQUssRUFBRUYsWUFBWTtZQUMzQkcsS0FBSztZQUNMLGNBQWM7WUFDZEMsV0FBVztZQUNYQyxNQUFNO1FBQ1A7UUFDQSxJQUFJLENBQUNWLGFBQWEsR0FBRztZQUNwQixvQkFBb0JMO1lBQ3BCLHNCQUFzQkE7WUFDdEIsbUJBQW1CQTtZQUNuQixzQkFBc0JBO1lBQ3RCLG9CQUFvQkE7WUFDcEIseUJBQXlCQTtZQUN6QixlQUFlO1FBQ2hCO1FBQ0EsSUFBSSxDQUFDTSxnQkFBZ0IsR0FBRztZQUN2QixzQkFBc0JOO1lBQ3RCZ0IsWUFBWTtZQUNaLGtCQUFrQjtZQUNsQkMsUUFBUTtRQUNUO0lBQ0Q7SUFFT0MsY0FBY1YsSUFBWSxFQUFFVyxPQUFlLEVBQVE7UUFDekQsSUFBSSxDQUFDZCxhQUFhLENBQUNHLEtBQUssR0FBR1c7UUFDM0IsT0FBTyxJQUFJO0lBQ1o7SUFFT0MsaUJBQWlCWixJQUFZLEVBQUVXLE9BQWUsRUFBUTtRQUM1RCxJQUFJLENBQUNiLGdCQUFnQixDQUFDRSxLQUFLLEdBQUdXO1FBQzlCLE9BQU8sSUFBSTtJQUNaO0lBRU9FLFVBQVViLElBQVksRUFBRWMsT0FBZSxFQUFRO1FBQ3JELElBQUksQ0FBQ2YsUUFBUSxDQUFDQyxLQUFLLEdBQUdjO1FBQ3RCLE9BQU8sSUFBSTtJQUNaO0lBRU9DLFFBQXNCO1FBQzVCLE9BQU87WUFDTjtnQkFDQ0MsVUFBVTtnQkFDVkMsU0FBU0MsS0FBS0MsU0FBUyxDQUN0QjtvQkFDQ25CLE1BQU0sSUFBSSxDQUFDQSxJQUFJO29CQUNmVyxTQUFTO29CQUNUUyxNQUFNO29CQUNOQyxTQUFTLElBQUksQ0FBQ3RCLFFBQVE7b0JBQ3RCdUIsY0FBYyxJQUFJLENBQUN6QixhQUFhO29CQUNoQzBCLGlCQUFpQixJQUFJLENBQUN6QixnQkFBZ0I7Z0JBQ3ZDLEdBQ0EsTUFDQTtZQUVGO1NBQ0E7SUFDRjtBQUNEIn0=
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgQ1JFQVRFX1ZFUlNJT04gfSBmcm9tIFwiLi4vdmVyc2lvbi5qc1wiO1xuaW1wb3J0IHtcblx0REVGQVVMVF9XRUJBUElfTkFNRSxcblx0d2ViYXBpUGFja2FnZU5hbWUsXG5cdHdlYmFwaVBvcnQsXG5cdHdlYmFwaVJlbGVhc2VFbnRyeSxcbn0gZnJvbSBcIi4uL3dlYmFwaS9jb25zdC5qc1wiO1xuaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwsIFNvdXJjZUZpbGUgfSBmcm9tIFwiLi9zb3VyY2UtZmlsZS5qc1wiO1xuXG5leHBvcnQgdHlwZSBQYWNrYWdlSnNvbk9wdGlvbnMgPSB7XG5cdHN0YXJ0RW50cnk/OiBzdHJpbmc7XG5cdC8qKiBBUEkgc2x1Z3MgaW4gdGhpcyB3b3Jrc3BhY2UuIERyaXZlcyBgc3RhcnQ6PG5hbWU+YCAvIGBkZXY6PG5hbWU+YC4gKi9cblx0YXBpTmFtZXM/OiByZWFkb25seSBzdHJpbmdbXTtcblx0LyoqIEhvc3Qgd29ya3NwYWNlIG5hbWUgdXNlZCBpbiBgQDx3b3Jrc3BhY2U+LzxhcGk+YCBmb3IgZmx1eCBgLS1wcm9qZWN0YC4gKi9cblx0d29ya3NwYWNlTmFtZT86IHN0cmluZztcbn07XG5cbi8qKlxuICogQnVpbGRlciBmb3IgdGhlIHJvb3QgYHBhY2thZ2UuanNvbmAuXG4gKlxuICogU3RhcnRzIHdpdGggdGhlIGNvcmUgQVBJIGRlcGVuZGVuY2llcy4gRmVhdHVyZXMgY2FsbCBgYWRkRGVwZW5kZW5jeWAgL1xuICogYGFkZERldkRlcGVuZGVuY3lgIGR1cmluZyB0aGVpciBzY2FmZm9sZCBwaGFzZSB0byBpbmplY3QgdGhlaXIgb3duIGRlcHNcbiAqIGJlZm9yZSBgZmlsZXMoKWAgaXMgY2FsbGVkIGF0IHJlbmRlciB0aW1lLlxuICovXG5leHBvcnQgY2xhc3MgUGFja2FnZUpzb24gaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuUEFDS0FHRV9KU09OO1xuXG5cdHByaXZhdGUgX2RlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0cHJpdmF0ZSBfZGV2RGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHRwcml2YXRlIF9zY3JpcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHRwcml2YXRlIF92ZXJzaW9uID0gXCIwLjAuMVwiO1xuXHRwcml2YXRlIF90eXBlID0gXCJtb2R1bGVcIjtcblx0cHJpdmF0ZSBfcmVzdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmcsXG5cdFx0b3B0aW9ucz86IFBhY2thZ2VKc29uT3B0aW9ucyxcblx0KSB7XG5cdFx0Y29uc3QgYXBpTmFtZXMgPSBvcHRpb25zPy5hcGlOYW1lcyA/PyBbREVGQVVMVF9XRUJBUElfTkFNRV07XG5cdFx0Y29uc3QgZmlyc3QgPSBhcGlOYW1lc1swXSA/PyBERUZBVUxUX1dFQkFQSV9OQU1FO1xuXHRcdGNvbnN0IHN0YXJ0RW50cnkgPSBvcHRpb25zPy5zdGFydEVudHJ5ID8/IHdlYmFwaVJlbGVhc2VFbnRyeShmaXJzdCk7XG5cdFx0Y29uc3Qgd29ya3NwYWNlTmFtZSA9IG9wdGlvbnM/LndvcmtzcGFjZU5hbWUgPz8gc3RyaXBBcGlTdWZmaXgobmFtZSk7XG5cdFx0Y29uc3QgbmFtZWRPck1hbnkgPSBhcGlOYW1lcy5sZW5ndGggPiAxIHx8IGZpcnN0ICE9PSBERUZBVUxUX1dFQkFQSV9OQU1FO1xuXG5cdFx0dGhpcy5fc2NyaXB0cyA9IHtcblx0XHRcdGJ1aWxkOiBcImZvcmdlIGJ1aWxkIC0tY29uZmlndXJhdGlvbiByZWxlYXNlXCIsXG5cdFx0XHRcImJ1aWxkOndhdGNoXCI6IFwiZm9yZ2UgYnVpbGQgLS13YXRjaFwiLFxuXHRcdFx0c3RhcnQ6IGBub2RlICR7c3RhcnRFbnRyeX1gLFxuXHRcdFx0ZGV2OiBuYW1lZE9yTWFueSA/IGZsdXhEZXZTY3JpcHQod29ya3NwYWNlTmFtZSwgZmlyc3QsIHdlYmFwaVBvcnQoMCkpIDogXCJmbHV4IHNlcnZlXCIsXG5cdFx0XHRcImxpbnQ6Y2hlY2tcIjogXCJiaW9tZSBjaGVjayAuXCIsXG5cdFx0XHR0eXBlY2hlY2s6IFwidHNjIC0tbm9FbWl0XCIsXG5cdFx0XHR0ZXN0OiBcInZpdGVzdCBydW4gLS1wYXNzV2l0aE5vVGVzdHNcIixcblx0XHR9O1xuXHRcdGZvciAoY29uc3QgW2luZGV4LCBhcGlOYW1lXSBvZiBhcGlOYW1lcy5lbnRyaWVzKCkpIHtcblx0XHRcdHRoaXMuX3NjcmlwdHNbYHN0YXJ0OiR7YXBpTmFtZX1gXSA9IGBub2RlICR7d2ViYXBpUmVsZWFzZUVudHJ5KGFwaU5hbWUpfWA7XG5cdFx0XHR0aGlzLl9zY3JpcHRzW2BkZXY6JHthcGlOYW1lfWBdID0gZmx1eERldlNjcmlwdChcblx0XHRcdFx0d29ya3NwYWNlTmFtZSxcblx0XHRcdFx0YXBpTmFtZSxcblx0XHRcdFx0d2ViYXBpUG9ydChpbmRleCksXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR0aGlzLl9kZXBlbmRlbmNpZXMgPSB7XG5cdFx0XHRcIkBkZWNvaGVyZS9jb3J0ZXhcIjogQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcIkBkZWNvaGVyZS9jcnVjaWJsZVwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFwiQGRlY29oZXJlL25leHVzXCI6IENSRUFURV9WRVJTSU9OLFxuXHRcdFx0XCJAZGVjb2hlcmUvcHJvdG9jb2xcIjogQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcIkBkZWNvaGVyZS9zY3JpYmVcIjogQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcIkBkZWNvaGVyZS9zY3JpYmUtcGlub1wiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFwicGluby1wcmV0dHlcIjogXCJeMTMuMC4wXCIsXG5cdFx0fTtcblx0XHR0aGlzLl9kZXZEZXBlbmRlbmNpZXMgPSB7XG5cdFx0XHRcIkBkZWNvaGVyZS90ZXJtaW5hbFwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdHR5cGVzY3JpcHQ6IFwiXjYuMC4zXCIsXG5cdFx0XHRcIkBiaW9tZWpzL2Jpb21lXCI6IFwiXjIuMC4wXCIsXG5cdFx0XHR2aXRlc3Q6IFwiXjMuMi40XCIsXG5cdFx0fTtcblx0fVxuXG5cdC8qKiBMb2FkIGFuIGV4aXN0aW5nIHJvb3QgcGFja2FnZS5qc29uIHNvIGB3ZWJhcGkgYWRkYCBjYW4gbWVyZ2Ugc2NyaXB0cy9kZXBzLiAqL1xuXHRwdWJsaWMgc3RhdGljIGZyb21GaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBQYWNrYWdlSnNvbiB7XG5cdFx0Y29uc3QgcmF3ID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoZmlsZVBhdGgsIFwidXRmOFwiKSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0Y29uc3QgcGtnID0gbmV3IFBhY2thZ2VKc29uKHR5cGVvZiByYXcubmFtZSA9PT0gXCJzdHJpbmdcIiA/IHJhdy5uYW1lIDogXCJhcHBcIiwge1xuXHRcdFx0YXBpTmFtZXM6IFtdLFxuXHRcdH0pO1xuXHRcdHBrZy5fdmVyc2lvbiA9IHR5cGVvZiByYXcudmVyc2lvbiA9PT0gXCJzdHJpbmdcIiA/IHJhdy52ZXJzaW9uIDogXCIwLjAuMVwiO1xuXHRcdHBrZy5fdHlwZSA9IHR5cGVvZiByYXcudHlwZSA9PT0gXCJzdHJpbmdcIiA/IHJhdy50eXBlIDogXCJtb2R1bGVcIjtcblx0XHRwa2cuX3NjcmlwdHMgPSB7IC4uLmFzU3RyaW5nTWFwKHJhdy5zY3JpcHRzKSB9O1xuXHRcdHBrZy5fZGVwZW5kZW5jaWVzID0geyAuLi5hc1N0cmluZ01hcChyYXcuZGVwZW5kZW5jaWVzKSB9O1xuXHRcdHBrZy5fZGV2RGVwZW5kZW5jaWVzID0geyAuLi5hc1N0cmluZ01hcChyYXcuZGV2RGVwZW5kZW5jaWVzKSB9O1xuXHRcdGNvbnN0IHJlc2VydmVkID0gbmV3IFNldChbXG5cdFx0XHRcIm5hbWVcIixcblx0XHRcdFwidmVyc2lvblwiLFxuXHRcdFx0XCJ0eXBlXCIsXG5cdFx0XHRcInNjcmlwdHNcIixcblx0XHRcdFwiZGVwZW5kZW5jaWVzXCIsXG5cdFx0XHRcImRldkRlcGVuZGVuY2llc1wiLFxuXHRcdF0pO1xuXHRcdHBrZy5fcmVzdCA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhyYXcpLmZpbHRlcigoW2tleV0pID0+ICFyZXNlcnZlZC5oYXMoa2V5KSkpO1xuXHRcdHJldHVybiBwa2c7XG5cdH1cblxuXHRwdWJsaWMgYWRkRGVwZW5kZW5jeShuYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX2RlcGVuZGVuY2llc1tuYW1lXSA9IHZlcnNpb247XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgYWRkRGV2RGVwZW5kZW5jeShuYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX2RldkRlcGVuZGVuY2llc1tuYW1lXSA9IHZlcnNpb247XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgYWRkU2NyaXB0KG5hbWU6IHN0cmluZywgY29tbWFuZDogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fc2NyaXB0c1tuYW1lXSA9IGNvbW1hbmQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCJwYWNrYWdlLmpzb25cIixcblx0XHRcdFx0Y29udGVudDogSlNPTi5zdHJpbmdpZnkoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bmFtZTogdGhpcy5uYW1lLFxuXHRcdFx0XHRcdFx0dmVyc2lvbjogdGhpcy5fdmVyc2lvbixcblx0XHRcdFx0XHRcdHR5cGU6IHRoaXMuX3R5cGUsXG5cdFx0XHRcdFx0XHQuLi50aGlzLl9yZXN0LFxuXHRcdFx0XHRcdFx0c2NyaXB0czogdGhpcy5fc2NyaXB0cyxcblx0XHRcdFx0XHRcdGRlcGVuZGVuY2llczogdGhpcy5fZGVwZW5kZW5jaWVzLFxuXHRcdFx0XHRcdFx0ZGV2RGVwZW5kZW5jaWVzOiB0aGlzLl9kZXZEZXBlbmRlbmNpZXMsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdDIsXG5cdFx0XHRcdCksXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cblxuZnVuY3Rpb24gc3RyaXBBcGlTdWZmaXgobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIG5hbWUuZW5kc1dpdGgoXCIuYXBpXCIpID8gbmFtZS5zbGljZSgwLCAtXCIuYXBpXCIubGVuZ3RoKSA6IG5hbWU7XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nTWFwKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG5cdGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHt9O1xuXHRjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0Zm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG5cdFx0aWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIikgcmVzdWx0W2tleV0gPSBlbnRyeTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmbHV4RGV2U2NyaXB0KHdvcmtzcGFjZU5hbWU6IHN0cmluZywgYXBpTmFtZTogc3RyaW5nLCBwb3J0OiBudW1iZXIpOiBzdHJpbmcge1xuXHRyZXR1cm4gYFBPUlQ9JHtwb3J0fSBmbHV4IHNlcnZlIC0tcHJvamVjdCAke3dlYmFwaVBhY2thZ2VOYW1lKHdvcmtzcGFjZU5hbWUsIGFwaU5hbWUpfWA7XG59XG4iXSwibmFtZXMiOlsicmVhZEZpbGVTeW5jIiwiQ1JFQVRFX1ZFUlNJT04iLCJERUZBVUxUX1dFQkFQSV9OQU1FIiwid2ViYXBpUGFja2FnZU5hbWUiLCJ3ZWJhcGlQb3J0Iiwid2ViYXBpUmVsZWFzZUVudHJ5IiwiV0VMTF9LTk9XTl9GSUxFUyIsIlBhY2thZ2VKc29uIiwia2V5IiwiUEFDS0FHRV9KU09OIiwiX2RlcGVuZGVuY2llcyIsIl9kZXZEZXBlbmRlbmNpZXMiLCJfc2NyaXB0cyIsIl92ZXJzaW9uIiwiX3R5cGUiLCJfcmVzdCIsIm5hbWUiLCJvcHRpb25zIiwiYXBpTmFtZXMiLCJmaXJzdCIsInN0YXJ0RW50cnkiLCJ3b3Jrc3BhY2VOYW1lIiwic3RyaXBBcGlTdWZmaXgiLCJuYW1lZE9yTWFueSIsImxlbmd0aCIsImJ1aWxkIiwic3RhcnQiLCJkZXYiLCJmbHV4RGV2U2NyaXB0IiwidHlwZWNoZWNrIiwidGVzdCIsImluZGV4IiwiYXBpTmFtZSIsImVudHJpZXMiLCJ0eXBlc2NyaXB0Iiwidml0ZXN0IiwiZnJvbUZpbGUiLCJmaWxlUGF0aCIsInJhdyIsIkpTT04iLCJwYXJzZSIsInBrZyIsInZlcnNpb24iLCJ0eXBlIiwiYXNTdHJpbmdNYXAiLCJzY3JpcHRzIiwiZGVwZW5kZW5jaWVzIiwiZGV2RGVwZW5kZW5jaWVzIiwicmVzZXJ2ZWQiLCJTZXQiLCJPYmplY3QiLCJmcm9tRW50cmllcyIsImZpbHRlciIsImhhcyIsImFkZERlcGVuZGVuY3kiLCJhZGREZXZEZXBlbmRlbmN5IiwiYWRkU2NyaXB0IiwiY29tbWFuZCIsImZpbGVzIiwiY29udGVudCIsInN0cmluZ2lmeSIsImVuZHNXaXRoIiwic2xpY2UiLCJ2YWx1ZSIsInJlc3VsdCIsImVudHJ5IiwicG9ydCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsWUFBWSxRQUFRLFVBQVU7QUFDdkMsU0FBU0MsY0FBYyxRQUFRLGdCQUFnQjtBQUMvQyxTQUNDQyxtQkFBbUIsRUFDbkJDLGlCQUFpQixFQUNqQkMsVUFBVSxFQUNWQyxrQkFBa0IsUUFDWixxQkFBcUI7QUFDNUIsU0FBU0MsZ0JBQWdCLFFBQVEsYUFBYTtBQVc5Qzs7Ozs7O0NBTUMsR0FDRCxPQUFPLE1BQU1DOztJQUNJQyxNQUFNRixpQkFBaUJHLFlBQVksQ0FBQztJQUU1Q0MsY0FBc0M7SUFDdENDLGlCQUF5QztJQUN6Q0MsU0FBaUM7SUFDakNDLFdBQVcsUUFBUTtJQUNuQkMsUUFBUSxTQUFTO0lBQ2pCQyxRQUFpQyxDQUFDLEVBQUU7SUFFNUMsWUFDQyxBQUFpQkMsSUFBWSxFQUM3QkMsT0FBNEIsQ0FDM0I7YUFGZ0JELE9BQUFBO1FBR2pCLE1BQU1FLFdBQVdELFNBQVNDLFlBQVk7WUFBQ2hCO1NBQW9CO1FBQzNELE1BQU1pQixRQUFRRCxRQUFRLENBQUMsRUFBRSxJQUFJaEI7UUFDN0IsTUFBTWtCLGFBQWFILFNBQVNHLGNBQWNmLG1CQUFtQmM7UUFDN0QsTUFBTUUsZ0JBQWdCSixTQUFTSSxpQkFBaUJDLGVBQWVOO1FBQy9ELE1BQU1PLGNBQWNMLFNBQVNNLE1BQU0sR0FBRyxLQUFLTCxVQUFVakI7UUFFckQsSUFBSSxDQUFDVSxRQUFRLEdBQUc7WUFDZmEsT0FBTztZQUNQLGVBQWU7WUFDZkMsT0FBTyxDQUFDLEtBQUssRUFBRU4sWUFBWTtZQUMzQk8sS0FBS0osY0FBY0ssY0FBY1AsZUFBZUYsT0FBT2YsV0FBVyxNQUFNO1lBQ3hFLGNBQWM7WUFDZHlCLFdBQVc7WUFDWEMsTUFBTTtRQUNQO1FBQ0EsS0FBSyxNQUFNLENBQUNDLE9BQU9DLFFBQVEsSUFBSWQsU0FBU2UsT0FBTyxHQUFJO1lBQ2xELElBQUksQ0FBQ3JCLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRW9CLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFM0IsbUJBQW1CMkIsVUFBVTtZQUN6RSxJQUFJLENBQUNwQixRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUVvQixTQUFTLENBQUMsR0FBR0osY0FDakNQLGVBQ0FXLFNBQ0E1QixXQUFXMkI7UUFFYjtRQUNBLElBQUksQ0FBQ3JCLGFBQWEsR0FBRztZQUNwQixvQkFBb0JUO1lBQ3BCLHNCQUFzQkE7WUFDdEIsbUJBQW1CQTtZQUNuQixzQkFBc0JBO1lBQ3RCLG9CQUFvQkE7WUFDcEIseUJBQXlCQTtZQUN6QixlQUFlO1FBQ2hCO1FBQ0EsSUFBSSxDQUFDVSxnQkFBZ0IsR0FBRztZQUN2QixzQkFBc0JWO1lBQ3RCaUMsWUFBWTtZQUNaLGtCQUFrQjtZQUNsQkMsUUFBUTtRQUNUO0lBQ0Q7SUFFQSwrRUFBK0UsR0FDL0UsT0FBY0MsU0FBU0MsUUFBZ0IsRUFBZTtRQUNyRCxNQUFNQyxNQUFNQyxLQUFLQyxLQUFLLENBQUN4QyxhQUFhcUMsVUFBVTtRQUM5QyxNQUFNSSxNQUFNLElBQUlsQyxZQUFZLE9BQU8rQixJQUFJdEIsSUFBSSxLQUFLLFdBQVdzQixJQUFJdEIsSUFBSSxHQUFHLE9BQU87WUFDNUVFLFVBQVUsRUFBRTtRQUNiO1FBQ0F1QixJQUFJNUIsUUFBUSxHQUFHLE9BQU95QixJQUFJSSxPQUFPLEtBQUssV0FBV0osSUFBSUksT0FBTyxHQUFHO1FBQy9ERCxJQUFJM0IsS0FBSyxHQUFHLE9BQU93QixJQUFJSyxJQUFJLEtBQUssV0FBV0wsSUFBSUssSUFBSSxHQUFHO1FBQ3RERixJQUFJN0IsUUFBUSxHQUFHO1lBQUUsR0FBR2dDLFlBQVlOLElBQUlPLE9BQU8sQ0FBQztRQUFDO1FBQzdDSixJQUFJL0IsYUFBYSxHQUFHO1lBQUUsR0FBR2tDLFlBQVlOLElBQUlRLFlBQVksQ0FBQztRQUFDO1FBQ3ZETCxJQUFJOUIsZ0JBQWdCLEdBQUc7WUFBRSxHQUFHaUMsWUFBWU4sSUFBSVMsZUFBZSxDQUFDO1FBQUM7UUFDN0QsTUFBTUMsV0FBVyxJQUFJQyxJQUFJO1lBQ3hCO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtTQUNBO1FBQ0RSLElBQUkxQixLQUFLLEdBQUdtQyxPQUFPQyxXQUFXLENBQUNELE9BQU9qQixPQUFPLENBQUNLLEtBQUtjLE1BQU0sQ0FBQyxDQUFDLENBQUM1QyxJQUFJLEdBQUssQ0FBQ3dDLFNBQVNLLEdBQUcsQ0FBQzdDO1FBQ25GLE9BQU9pQztJQUNSO0lBRU9hLGNBQWN0QyxJQUFZLEVBQUUwQixPQUFlLEVBQVE7UUFDekQsSUFBSSxDQUFDaEMsYUFBYSxDQUFDTSxLQUFLLEdBQUcwQjtRQUMzQixPQUFPLElBQUk7SUFDWjtJQUVPYSxpQkFBaUJ2QyxJQUFZLEVBQUUwQixPQUFlLEVBQVE7UUFDNUQsSUFBSSxDQUFDL0IsZ0JBQWdCLENBQUNLLEtBQUssR0FBRzBCO1FBQzlCLE9BQU8sSUFBSTtJQUNaO0lBRU9jLFVBQVV4QyxJQUFZLEVBQUV5QyxPQUFlLEVBQVE7UUFDckQsSUFBSSxDQUFDN0MsUUFBUSxDQUFDSSxLQUFLLEdBQUd5QztRQUN0QixPQUFPLElBQUk7SUFDWjtJQUVPQyxRQUFzQjtRQUM1QixPQUFPO1lBQ047Z0JBQ0NyQixVQUFVO2dCQUNWc0IsU0FBU3BCLEtBQUtxQixTQUFTLENBQ3RCO29CQUNDNUMsTUFBTSxJQUFJLENBQUNBLElBQUk7b0JBQ2YwQixTQUFTLElBQUksQ0FBQzdCLFFBQVE7b0JBQ3RCOEIsTUFBTSxJQUFJLENBQUM3QixLQUFLO29CQUNoQixHQUFHLElBQUksQ0FBQ0MsS0FBSztvQkFDYjhCLFNBQVMsSUFBSSxDQUFDakMsUUFBUTtvQkFDdEJrQyxjQUFjLElBQUksQ0FBQ3BDLGFBQWE7b0JBQ2hDcUMsaUJBQWlCLElBQUksQ0FBQ3BDLGdCQUFnQjtnQkFDdkMsR0FDQSxNQUNBO1lBRUY7U0FDQTtJQUNGO0FBQ0Q7QUFFQSxTQUFTVyxlQUFlTixJQUFZO0lBQ25DLE9BQU9BLEtBQUs2QyxRQUFRLENBQUMsVUFBVTdDLEtBQUs4QyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU90QyxNQUFNLElBQUlSO0FBQ2hFO0FBRUEsU0FBUzRCLFlBQVltQixLQUFjO0lBQ2xDLElBQUlBLFNBQVMsUUFBUSxPQUFPQSxVQUFVLFVBQVUsT0FBTyxDQUFDO0lBQ3hELE1BQU1DLFNBQWlDLENBQUM7SUFDeEMsS0FBSyxNQUFNLENBQUN4RCxLQUFLeUQsTUFBTSxJQUFJZixPQUFPakIsT0FBTyxDQUFDOEIsT0FBUTtRQUNqRCxJQUFJLE9BQU9FLFVBQVUsVUFBVUQsTUFBTSxDQUFDeEQsSUFBSSxHQUFHeUQ7SUFDOUM7SUFDQSxPQUFPRDtBQUNSO0FBRUEsU0FBU3BDLGNBQWNQLGFBQXFCLEVBQUVXLE9BQWUsRUFBRWtDLElBQVk7SUFDMUUsT0FBTyxDQUFDLEtBQUssRUFBRUEsS0FBSyxzQkFBc0IsRUFBRS9ELGtCQUFrQmtCLGVBQWVXLFVBQVU7QUFDeEYifQ==
@@ -68,6 +68,9 @@ export class MonoRepoScaffold extends WorkspaceScaffold {
68
68
  /** Retrieve a previously-registered project by its directory path. */ getProject(dir) {
69
69
  return this._projects.find((p)=>p.dir === dir);
70
70
  }
71
+ /** All registered projects, in registration order. */ getProjects() {
72
+ return this._projects;
73
+ }
71
74
  /** Register a named model at workspace level. */ addModel(model) {
72
75
  this._models.set(model.key, model);
73
76
  return model;
@@ -113,4 +116,4 @@ export class MonoRepoScaffold extends WorkspaceScaffold {
113
116
  }
114
117
  }
115
118
 
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL3Byb2plY3QubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSwgU291cmNlRmlsZVByb3ZpZGVyIH0gZnJvbSBcIi4vc291cmNlLWZpbGUuanNcIjtcblxuLyoqXG4gKiBBIHN1Yi11bml0IG9mIHRoZSBtb25vcmVwbyAoZS5nLiBgcHJvamVjdHMvYXBpYCkuXG4gKlxuICogTW9kZWxzIGFuZCBmaWxlcyByZWdpc3RlcmVkIGhlcmUgcHJvZHVjZSBwYXRocyByZWxhdGl2ZSB0byBgZGlyYC4gVGhlIHBhcmVudFxuICogYE1vbm9SZXBvU2NhZmZvbGRgIGNhbGxzIGBmaWxlcygpYCBhbmQgcHJlcGVuZHMgYGRpci9gIHRvIGV2ZXJ5IHBhdGgsIHNvXG4gKiBtb2RlbHMgcmVtYWluIHVuYXdhcmUgb2Ygd2hlcmUgdGhleSBsaXZlIGluIHRoZSByZXBvLlxuICovXG5leHBvcnQgY2xhc3MgUHJvamVjdFNjYWZmb2xkIHtcblx0cHJpdmF0ZSByZWFkb25seSBfbW9kZWxzID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZUZpbGVQcm92aWRlcj4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfZmlsZXM6IFNvdXJjZUZpbGVbXSA9IFtdO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZGlyOiBzdHJpbmcpIHt9XG5cblx0cHVibGljIGFkZE1vZGVsPFQgZXh0ZW5kcyBLZXllZE1vZGVsPihtb2RlbDogVCk6IFQge1xuXHRcdHRoaXMuX21vZGVscy5zZXQobW9kZWwua2V5LCBtb2RlbCk7XG5cdFx0cmV0dXJuIG1vZGVsO1xuXHR9XG5cblx0cHVibGljIGFkZEZpbGUocHJvdmlkZXI6IFNvdXJjZUZpbGVQcm92aWRlcik6IHRoaXMge1xuXHRcdHRoaXMuX2ZpbGVzLnB1c2goLi4ucHJvdmlkZXIuZmlsZXMoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TW9kZWw8VCBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlcj4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fbW9kZWxzLmdldChrZXkpIGFzIFQgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TW9kZWxzPFQgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXI+KGN0b3I6IG5ldyAoLi4uYXJnczogbmV2ZXJbXSkgPT4gVCk6IFRbXSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLl9tb2RlbHMudmFsdWVzKCldLmZpbHRlcigobSk6IG0gaXMgVCA9PiBtIGluc3RhbmNlb2YgY3Rvcik7XG5cdH1cblxuXHQvKiogUmV0dXJucyBhbGwgZmlsZXMgd2l0aCBgZGlyL2AgcHJlcGVuZGVkIHRvIGVhY2ggcGF0aC4gKi9cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgYWxsID0gWy4uLnRoaXMuX2ZpbGVzLCAuLi5bLi4udGhpcy5fbW9kZWxzLnZhbHVlcygpXS5mbGF0TWFwKChtKSA9PiBtLmZpbGVzKCkpXTtcblx0XHRyZXR1cm4gYWxsLm1hcCgoZikgPT4gKHsgZmlsZVBhdGg6IGAke3RoaXMuZGlyfS8ke2YuZmlsZVBhdGh9YCwgY29udGVudDogZi5jb250ZW50IH0pKTtcblx0fVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV29ya3NwYWNlU2NhZmZvbGQge1xuXHRwdWJsaWMgcmVhZG9ubHkgZmlsZXM6IFNvdXJjZUZpbGVbXSA9IFtdO1xuXHRwdWJsaWMgdGFyZ2V0RGlyOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpO1xuXHRwcml2YXRlIF9uYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0LyoqIFByb2plY3QgbmFtZSDigJQgaG9zdCBkaXJlY3RvcnkgYmFzZW5hbWUsIG5vdCB0aGUgaW4tY29udGFpbmVyIG1vdW50IHBhdGguICovXG5cdHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9uYW1lID8/IGJhc2VuYW1lKHRoaXMudGFyZ2V0RGlyKTtcblx0fVxuXG5cdHB1YmxpYyBzZXROYW1lKG5hbWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX25hbWUgPSBuYW1lO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZCBhbiBhZC1ob2MgZmlsZSBwcm92aWRlciB3aG9zZSBvdXRwdXQgaXMgaW5jbHVkZWQgYXQgcmVuZGVyIHRpbWUuICovXG5cdHB1YmxpYyBhZGRGaWxlKHByb3ZpZGVyOiBTb3VyY2VGaWxlUHJvdmlkZXIpOiB0aGlzIHtcblx0XHR0aGlzLmZpbGVzLnB1c2goLi4ucHJvdmlkZXIuZmlsZXMoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgYWJzdHJhY3QgYWRkTW9kZWw8VCBleHRlbmRzIEtleWVkTW9kZWw+KG1vZGVsOiBUKTogVDtcblx0cHVibGljIGFic3RyYWN0IGdldE1vZGVsPFQgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXI+KGtleTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZDtcblx0cHVibGljIGFic3RyYWN0IGdldE1vZGVsczxUIGV4dGVuZHMgU291cmNlRmlsZVByb3ZpZGVyPihcblx0XHRjdG9yOiBuZXcgKC4uLmFyZ3M6IG5ldmVyW10pID0+IFQsXG5cdCk6IFRbXTtcblx0cHVibGljIGFic3RyYWN0IGdldFByb2plY3QoZGlyOiBzdHJpbmcpOiBQcm9qZWN0U2NhZmZvbGQgfCB1bmRlZmluZWQ7XG5cdHB1YmxpYyBhYnN0cmFjdCBzY2FmZm9sZCgpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIE1vbm9SZXBvU2NhZmZvbGQgZXh0ZW5kcyBXb3Jrc3BhY2VTY2FmZm9sZCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX21vZGVscyA9IG5ldyBNYXA8c3RyaW5nLCBTb3VyY2VGaWxlUHJvdmlkZXI+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3Byb2plY3RzOiBQcm9qZWN0U2NhZmZvbGRbXSA9IFtdO1xuXG5cdC8qKiBSZWdpc3RlciBhIG5hbWVkIHByb2plY3QuICovXG5cdHB1YmxpYyBhZGRQcm9qZWN0KHByb2plY3Q6IFByb2plY3RTY2FmZm9sZCk6IFByb2plY3RTY2FmZm9sZCB7XG5cdFx0dGhpcy5fcHJvamVjdHMucHVzaChwcm9qZWN0KTtcblx0XHRyZXR1cm4gcHJvamVjdDtcblx0fVxuXG5cdC8qKiBSZXRyaWV2ZSBhIHByZXZpb3VzbHktcmVnaXN0ZXJlZCBwcm9qZWN0IGJ5IGl0cyBkaXJlY3RvcnkgcGF0aC4gKi9cblx0cHVibGljIGdldFByb2plY3QoZGlyOiBzdHJpbmcpOiBQcm9qZWN0U2NhZmZvbGQgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLl9wcm9qZWN0cy5maW5kKChwKSA9PiBwLmRpciA9PT0gZGlyKTtcblx0fVxuXG5cdC8qKiBSZWdpc3RlciBhIG5hbWVkIG1vZGVsIGF0IHdvcmtzcGFjZSBsZXZlbC4gKi9cblx0cHVibGljIGFkZE1vZGVsPFQgZXh0ZW5kcyBLZXllZE1vZGVsPihtb2RlbDogVCk6IFQge1xuXHRcdHRoaXMuX21vZGVscy5zZXQobW9kZWwua2V5LCBtb2RlbCk7XG5cdFx0cmV0dXJuIG1vZGVsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIGEgbW9kZWwgYnkga2V5LiBTZWFyY2hlcyB3b3Jrc3BhY2UgbW9kZWxzIGZpcnN0LCB0aGVuIGFsbFxuXHQgKiByZWdpc3RlcmVkIHByb2plY3RzIGluIG9yZGVyLlxuXHQgKi9cblx0cHVibGljIGdldE1vZGVsPFQgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXI+KGtleTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbSA9IHRoaXMuX21vZGVscy5nZXQoa2V5KSBhcyBUIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChtICE9PSB1bmRlZmluZWQpIHJldHVybiBtO1xuXHRcdGZvciAoY29uc3QgcHJvamVjdCBvZiB0aGlzLl9wcm9qZWN0cykge1xuXHRcdFx0Y29uc3QgcG0gPSBwcm9qZWN0LmdldE1vZGVsPFQ+KGtleSk7XG5cdFx0XHRpZiAocG0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIHBtO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIGFsbCBtb2RlbHMgb2YgYSBnaXZlbiB0eXBlLiBTZWFyY2hlcyB3b3Jrc3BhY2UgbW9kZWxzIGFuZCBhbGxcblx0ICogcHJvamVjdHMsIHNvIGZlYXR1cmVzIGNhbiBkaXNjb3ZlciBjb250cm9sbGVycyBhY3Jvc3MgbXVsdGlwbGUgcHJvamVjdHMuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TW9kZWxzPFQgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXI+KGN0b3I6IG5ldyAoLi4uYXJnczogbmV2ZXJbXSkgPT4gVCk6IFRbXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdC4uLlsuLi50aGlzLl9tb2RlbHMudmFsdWVzKCldLmZpbHRlcigobSk6IG0gaXMgVCA9PiBtIGluc3RhbmNlb2YgY3RvciksXG5cdFx0XHQuLi50aGlzLl9wcm9qZWN0cy5mbGF0TWFwKChwKSA9PiBwLmdldE1vZGVscyhjdG9yKSksXG5cdFx0XTtcblx0fVxuXG5cdC8qKiBSZW5kZXIgYWxsIG1vZGVscyBhbmQgcHJvamVjdHMgaW50byBmaWxlcywgdGhlbiB3cml0ZSBldmVyeXRoaW5nIHRvIGRpc2suICovXG5cdHB1YmxpYyBhc3luYyBzY2FmZm9sZCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhbGxGaWxlcyA9IFtcblx0XHRcdC4uLnRoaXMuZmlsZXMsXG5cdFx0XHQuLi5bLi4udGhpcy5fbW9kZWxzLnZhbHVlcygpXS5mbGF0TWFwKChtKSA9PiBtLmZpbGVzKCkpLFxuXHRcdFx0Li4udGhpcy5fcHJvamVjdHMuZmxhdE1hcCgocCkgPT4gcC5maWxlcygpKSxcblx0XHRdO1xuXG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRhbGxGaWxlcy5tYXAoYXN5bmMgKGZpbGUpID0+IHtcblx0XHRcdFx0Y29uc3QgZnVsbFBhdGggPSBqb2luKHRoaXMudGFyZ2V0RGlyLCBmaWxlLmZpbGVQYXRoKTtcblx0XHRcdFx0YXdhaXQgbWtkaXIoZGlybmFtZShmdWxsUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHRcdFx0XHRhd2FpdCB3cml0ZUZpbGUoZnVsbFBhdGgsIGZpbGUuY29udGVudCk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsibWtkaXIiLCJ3cml0ZUZpbGUiLCJiYXNlbmFtZSIsImRpcm5hbWUiLCJqb2luIiwiUHJvamVjdFNjYWZmb2xkIiwiX21vZGVscyIsIk1hcCIsIl9maWxlcyIsImRpciIsImFkZE1vZGVsIiwibW9kZWwiLCJzZXQiLCJrZXkiLCJhZGRGaWxlIiwicHJvdmlkZXIiLCJwdXNoIiwiZmlsZXMiLCJnZXRNb2RlbCIsImdldCIsImdldE1vZGVscyIsImN0b3IiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJtIiwiYWxsIiwiZmxhdE1hcCIsIm1hcCIsImYiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJXb3Jrc3BhY2VTY2FmZm9sZCIsInRhcmdldERpciIsInByb2Nlc3MiLCJjd2QiLCJfbmFtZSIsIm5hbWUiLCJzZXROYW1lIiwiTW9ub1JlcG9TY2FmZm9sZCIsIl9wcm9qZWN0cyIsImFkZFByb2plY3QiLCJwcm9qZWN0IiwiZ2V0UHJvamVjdCIsImZpbmQiLCJwIiwidW5kZWZpbmVkIiwicG0iLCJzY2FmZm9sZCIsImFsbEZpbGVzIiwiUHJvbWlzZSIsImZpbGUiLCJmdWxsUGF0aCIsInJlY3Vyc2l2ZSJd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
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL3Byb2plY3QubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSwgU291cmNlRmlsZVByb3ZpZGVyIH0gZnJvbSBcIi4vc291cmNlLWZpbGUuanNcIjtcblxuLyoqXG4gKiBBIHN1Yi11bml0IG9mIHRoZSBtb25vcmVwbyAoZS5nLiBgcHJvamVjdHMvYXBpYCkuXG4gKlxuICogTW9kZWxzIGFuZCBmaWxlcyByZWdpc3RlcmVkIGhlcmUgcHJvZHVjZSBwYXRocyByZWxhdGl2ZSB0byBgZGlyYC4gVGhlIHBhcmVudFxuICogYE1vbm9SZXBvU2NhZmZvbGRgIGNhbGxzIGBmaWxlcygpYCBhbmQgcHJlcGVuZHMgYGRpci9gIHRvIGV2ZXJ5IHBhdGgsIHNvXG4gKiBtb2RlbHMgcmVtYWluIHVuYXdhcmUgb2Ygd2hlcmUgdGhleSBsaXZlIGluIHRoZSByZXBvLlxuICovXG5leHBvcnQgY2xhc3MgUHJvamVjdFNjYWZmb2xkIHtcblx0cHJpdmF0ZSByZWFkb25seSBfbW9kZWxzID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZUZpbGVQcm92aWRlcj4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfZmlsZXM6IFNvdXJjZUZpbGVbXSA9IFtdO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZGlyOiBzdHJpbmcpIHt9XG5cblx0cHVibGljIGFkZE1vZGVsPFQgZXh0ZW5kcyBLZXllZE1vZGVsPihtb2RlbDogVCk6IFQge1xuXHRcdHRoaXMuX21vZGVscy5zZXQobW9kZWwua2V5LCBtb2RlbCk7XG5cdFx0cmV0dXJuIG1vZGVsO1xuXHR9XG5cblx0cHVibGljIGFkZEZpbGUocHJvdmlkZXI6IFNvdXJjZUZpbGVQcm92aWRlcik6IHRoaXMge1xuXHRcdHRoaXMuX2ZpbGVzLnB1c2goLi4ucHJvdmlkZXIuZmlsZXMoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TW9kZWw8VCBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlcj4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fbW9kZWxzLmdldChrZXkpIGFzIFQgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TW9kZWxzPFQgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXI+KGN0b3I6IG5ldyAoLi4uYXJnczogbmV2ZXJbXSkgPT4gVCk6IFRbXSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLl9tb2RlbHMudmFsdWVzKCldLmZpbHRlcigobSk6IG0gaXMgVCA9PiBtIGluc3RhbmNlb2YgY3Rvcik7XG5cdH1cblxuXHQvKiogUmV0dXJucyBhbGwgZmlsZXMgd2l0aCBgZGlyL2AgcHJlcGVuZGVkIHRvIGVhY2ggcGF0aC4gKi9cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgYWxsID0gWy4uLnRoaXMuX2ZpbGVzLCAuLi5bLi4udGhpcy5fbW9kZWxzLnZhbHVlcygpXS5mbGF0TWFwKChtKSA9PiBtLmZpbGVzKCkpXTtcblx0XHRyZXR1cm4gYWxsLm1hcCgoZikgPT4gKHsgZmlsZVBhdGg6IGAke3RoaXMuZGlyfS8ke2YuZmlsZVBhdGh9YCwgY29udGVudDogZi5jb250ZW50IH0pKTtcblx0fVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV29ya3NwYWNlU2NhZmZvbGQge1xuXHRwdWJsaWMgcmVhZG9ubHkgZmlsZXM6IFNvdXJjZUZpbGVbXSA9IFtdO1xuXHRwdWJsaWMgdGFyZ2V0RGlyOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpO1xuXHRwcml2YXRlIF9uYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0LyoqIFByb2plY3QgbmFtZSDigJQgaG9zdCBkaXJlY3RvcnkgYmFzZW5hbWUsIG5vdCB0aGUgaW4tY29udGFpbmVyIG1vdW50IHBhdGguICovXG5cdHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9uYW1lID8/IGJhc2VuYW1lKHRoaXMudGFyZ2V0RGlyKTtcblx0fVxuXG5cdHB1YmxpYyBzZXROYW1lKG5hbWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX25hbWUgPSBuYW1lO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZCBhbiBhZC1ob2MgZmlsZSBwcm92aWRlciB3aG9zZSBvdXRwdXQgaXMgaW5jbHVkZWQgYXQgcmVuZGVyIHRpbWUuICovXG5cdHB1YmxpYyBhZGRGaWxlKHByb3ZpZGVyOiBTb3VyY2VGaWxlUHJvdmlkZXIpOiB0aGlzIHtcblx0XHR0aGlzLmZpbGVzLnB1c2goLi4ucHJvdmlkZXIuZmlsZXMoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgYWJzdHJhY3QgYWRkTW9kZWw8VCBleHRlbmRzIEtleWVkTW9kZWw+KG1vZGVsOiBUKTogVDtcblx0cHVibGljIGFic3RyYWN0IGdldE1vZGVsPFQgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXI+KGtleTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZDtcblx0cHVibGljIGFic3RyYWN0IGdldE1vZGVsczxUIGV4dGVuZHMgU291cmNlRmlsZVByb3ZpZGVyPihcblx0XHRjdG9yOiBuZXcgKC4uLmFyZ3M6IG5ldmVyW10pID0+IFQsXG5cdCk6IFRbXTtcblx0cHVibGljIGFic3RyYWN0IGdldFByb2plY3QoZGlyOiBzdHJpbmcpOiBQcm9qZWN0U2NhZmZvbGQgfCB1bmRlZmluZWQ7XG5cdHB1YmxpYyBhYnN0cmFjdCBnZXRQcm9qZWN0cygpOiByZWFkb25seSBQcm9qZWN0U2NhZmZvbGRbXTtcblx0cHVibGljIGFic3RyYWN0IHNjYWZmb2xkKCk6IFByb21pc2U8dm9pZD4gfCB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ub1JlcG9TY2FmZm9sZCBleHRlbmRzIFdvcmtzcGFjZVNjYWZmb2xkIHtcblx0cHJpdmF0ZSByZWFkb25seSBfbW9kZWxzID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZUZpbGVQcm92aWRlcj4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfcHJvamVjdHM6IFByb2plY3RTY2FmZm9sZFtdID0gW107XG5cblx0LyoqIFJlZ2lzdGVyIGEgbmFtZWQgcHJvamVjdC4gKi9cblx0cHVibGljIGFkZFByb2plY3QocHJvamVjdDogUHJvamVjdFNjYWZmb2xkKTogUHJvamVjdFNjYWZmb2xkIHtcblx0XHR0aGlzLl9wcm9qZWN0cy5wdXNoKHByb2plY3QpO1xuXHRcdHJldHVybiBwcm9qZWN0O1xuXHR9XG5cblx0LyoqIFJldHJpZXZlIGEgcHJldmlvdXNseS1yZWdpc3RlcmVkIHByb2plY3QgYnkgaXRzIGRpcmVjdG9yeSBwYXRoLiAqL1xuXHRwdWJsaWMgZ2V0UHJvamVjdChkaXI6IHN0cmluZyk6IFByb2plY3RTY2FmZm9sZCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX3Byb2plY3RzLmZpbmQoKHApID0+IHAuZGlyID09PSBkaXIpO1xuXHR9XG5cblx0LyoqIEFsbCByZWdpc3RlcmVkIHByb2plY3RzLCBpbiByZWdpc3RyYXRpb24gb3JkZXIuICovXG5cdHB1YmxpYyBnZXRQcm9qZWN0cygpOiByZWFkb25seSBQcm9qZWN0U2NhZmZvbGRbXSB7XG5cdFx0cmV0dXJuIHRoaXMuX3Byb2plY3RzO1xuXHR9XG5cblx0LyoqIFJlZ2lzdGVyIGEgbmFtZWQgbW9kZWwgYXQgd29ya3NwYWNlIGxldmVsLiAqL1xuXHRwdWJsaWMgYWRkTW9kZWw8VCBleHRlbmRzIEtleWVkTW9kZWw+KG1vZGVsOiBUKTogVCB7XG5cdFx0dGhpcy5fbW9kZWxzLnNldChtb2RlbC5rZXksIG1vZGVsKTtcblx0XHRyZXR1cm4gbW9kZWw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgYSBtb2RlbCBieSBrZXkuIFNlYXJjaGVzIHdvcmtzcGFjZSBtb2RlbHMgZmlyc3QsIHRoZW4gYWxsXG5cdCAqIHJlZ2lzdGVyZWQgcHJvamVjdHMgaW4gb3JkZXIuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TW9kZWw8VCBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlcj4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtID0gdGhpcy5fbW9kZWxzLmdldChrZXkpIGFzIFQgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKG0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIG07XG5cdFx0Zm9yIChjb25zdCBwcm9qZWN0IG9mIHRoaXMuX3Byb2plY3RzKSB7XG5cdFx0XHRjb25zdCBwbSA9IHByb2plY3QuZ2V0TW9kZWw8VD4oa2V5KTtcblx0XHRcdGlmIChwbSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcG07XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgYWxsIG1vZGVscyBvZiBhIGdpdmVuIHR5cGUuIFNlYXJjaGVzIHdvcmtzcGFjZSBtb2RlbHMgYW5kIGFsbFxuXHQgKiBwcm9qZWN0cywgc28gZmVhdHVyZXMgY2FuIGRpc2NvdmVyIGNvbnRyb2xsZXJzIGFjcm9zcyBtdWx0aXBsZSBwcm9qZWN0cy5cblx0ICovXG5cdHB1YmxpYyBnZXRNb2RlbHM8VCBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlcj4oY3RvcjogbmV3ICguLi5hcmdzOiBuZXZlcltdKSA9PiBUKTogVFtdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0Li4uWy4uLnRoaXMuX21vZGVscy52YWx1ZXMoKV0uZmlsdGVyKChtKTogbSBpcyBUID0+IG0gaW5zdGFuY2VvZiBjdG9yKSxcblx0XHRcdC4uLnRoaXMuX3Byb2plY3RzLmZsYXRNYXAoKHApID0+IHAuZ2V0TW9kZWxzKGN0b3IpKSxcblx0XHRdO1xuXHR9XG5cblx0LyoqIFJlbmRlciBhbGwgbW9kZWxzIGFuZCBwcm9qZWN0cyBpbnRvIGZpbGVzLCB0aGVuIHdyaXRlIGV2ZXJ5dGhpbmcgdG8gZGlzay4gKi9cblx0cHVibGljIGFzeW5jIHNjYWZmb2xkKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGFsbEZpbGVzID0gW1xuXHRcdFx0Li4udGhpcy5maWxlcyxcblx0XHRcdC4uLlsuLi50aGlzLl9tb2RlbHMudmFsdWVzKCldLmZsYXRNYXAoKG0pID0+IG0uZmlsZXMoKSksXG5cdFx0XHQuLi50aGlzLl9wcm9qZWN0cy5mbGF0TWFwKChwKSA9PiBwLmZpbGVzKCkpLFxuXHRcdF07XG5cblx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdGFsbEZpbGVzLm1hcChhc3luYyAoZmlsZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBmdWxsUGF0aCA9IGpvaW4odGhpcy50YXJnZXREaXIsIGZpbGUuZmlsZVBhdGgpO1xuXHRcdFx0XHRhd2FpdCBta2RpcihkaXJuYW1lKGZ1bGxQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cdFx0XHRcdGF3YWl0IHdyaXRlRmlsZShmdWxsUGF0aCwgZmlsZS5jb250ZW50KTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJta2RpciIsIndyaXRlRmlsZSIsImJhc2VuYW1lIiwiZGlybmFtZSIsImpvaW4iLCJQcm9qZWN0U2NhZmZvbGQiLCJfbW9kZWxzIiwiTWFwIiwiX2ZpbGVzIiwiZGlyIiwiYWRkTW9kZWwiLCJtb2RlbCIsInNldCIsImtleSIsImFkZEZpbGUiLCJwcm92aWRlciIsInB1c2giLCJmaWxlcyIsImdldE1vZGVsIiwiZ2V0IiwiZ2V0TW9kZWxzIiwiY3RvciIsInZhbHVlcyIsImZpbHRlciIsIm0iLCJhbGwiLCJmbGF0TWFwIiwibWFwIiwiZiIsImZpbGVQYXRoIiwiY29udGVudCIsIldvcmtzcGFjZVNjYWZmb2xkIiwidGFyZ2V0RGlyIiwicHJvY2VzcyIsImN3ZCIsIl9uYW1lIiwibmFtZSIsInNldE5hbWUiLCJNb25vUmVwb1NjYWZmb2xkIiwiX3Byb2plY3RzIiwiYWRkUHJvamVjdCIsInByb2plY3QiLCJnZXRQcm9qZWN0IiwiZmluZCIsInAiLCJnZXRQcm9qZWN0cyIsInVuZGVmaW5lZCIsInBtIiwic2NhZmZvbGQiLCJhbGxGaWxlcyIsIlByb21pc2UiLCJmaWxlIiwiZnVsbFBhdGgiLCJyZWN1cnNpdmUiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLEtBQUssRUFBRUMsU0FBUyxRQUFRLG1CQUFtQjtBQUNwRCxTQUFTQyxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxRQUFRLFlBQVk7QUFHcEQ7Ozs7OztDQU1DLEdBQ0QsT0FBTyxNQUFNQzs7SUFDS0MsVUFBVSxJQUFJQyxNQUFrQztJQUNoREMsU0FBdUIsRUFBRSxDQUFDO0lBRTNDLFlBQW1CLEFBQWdCQyxHQUFXLENBQUU7YUFBYkEsTUFBQUE7SUFBYztJQUUxQ0MsU0FBK0JDLEtBQVEsRUFBSztRQUNsRCxJQUFJLENBQUNMLE9BQU8sQ0FBQ00sR0FBRyxDQUFDRCxNQUFNRSxHQUFHLEVBQUVGO1FBQzVCLE9BQU9BO0lBQ1I7SUFFT0csUUFBUUMsUUFBNEIsRUFBUTtRQUNsRCxJQUFJLENBQUNQLE1BQU0sQ0FBQ1EsSUFBSSxJQUFJRCxTQUFTRSxLQUFLO1FBQ2xDLE9BQU8sSUFBSTtJQUNaO0lBRU9DLFNBQXVDTCxHQUFXLEVBQWlCO1FBQ3pFLE9BQU8sSUFBSSxDQUFDUCxPQUFPLENBQUNhLEdBQUcsQ0FBQ047SUFDekI7SUFFT08sVUFBd0NDLElBQWlDLEVBQU87UUFDdEYsT0FBTztlQUFJLElBQUksQ0FBQ2YsT0FBTyxDQUFDZ0IsTUFBTTtTQUFHLENBQUNDLE1BQU0sQ0FBQyxDQUFDQyxJQUFjQSxhQUFhSDtJQUN0RTtJQUVBLDBEQUEwRCxHQUMxRCxBQUFPSixRQUFzQjtRQUM1QixNQUFNUSxNQUFNO2VBQUksSUFBSSxDQUFDakIsTUFBTTtlQUFLO21CQUFJLElBQUksQ0FBQ0YsT0FBTyxDQUFDZ0IsTUFBTTthQUFHLENBQUNJLE9BQU8sQ0FBQyxDQUFDRixJQUFNQSxFQUFFUCxLQUFLO1NBQUk7UUFDckYsT0FBT1EsSUFBSUUsR0FBRyxDQUFDLENBQUNDLElBQU8sQ0FBQTtnQkFBRUMsVUFBVSxHQUFHLElBQUksQ0FBQ3BCLEdBQUcsQ0FBQyxDQUFDLEVBQUVtQixFQUFFQyxRQUFRLEVBQUU7Z0JBQUVDLFNBQVNGLEVBQUVFLE9BQU87WUFBQyxDQUFBO0lBQ3BGO0FBQ0Q7QUFFQSxPQUFPLE1BQWVDO0lBQ0xkLFFBQXNCLEVBQUUsQ0FBQztJQUNsQ2UsWUFBb0JDLFFBQVFDLEdBQUcsR0FBRztJQUNqQ0MsTUFBMEI7SUFFbEMsNkVBQTZFLEdBQzdFLElBQVdDLE9BQWU7UUFDekIsT0FBTyxJQUFJLENBQUNELEtBQUssSUFBSWpDLFNBQVMsSUFBSSxDQUFDOEIsU0FBUztJQUM3QztJQUVPSyxRQUFRRCxJQUFZLEVBQVE7UUFDbEMsSUFBSSxDQUFDRCxLQUFLLEdBQUdDO1FBQ2IsT0FBTyxJQUFJO0lBQ1o7SUFFQSx5RUFBeUUsR0FDekUsQUFBT3RCLFFBQVFDLFFBQTRCLEVBQVE7UUFDbEQsSUFBSSxDQUFDRSxLQUFLLENBQUNELElBQUksSUFBSUQsU0FBU0UsS0FBSztRQUNqQyxPQUFPLElBQUk7SUFDWjtBQVVEO0FBRUEsT0FBTyxNQUFNcUIseUJBQXlCUDtJQUNwQnpCLFVBQVUsSUFBSUMsTUFBa0M7SUFDaERnQyxZQUErQixFQUFFLENBQUM7SUFFbkQsOEJBQThCLEdBQzlCLEFBQU9DLFdBQVdDLE9BQXdCLEVBQW1CO1FBQzVELElBQUksQ0FBQ0YsU0FBUyxDQUFDdkIsSUFBSSxDQUFDeUI7UUFDcEIsT0FBT0E7SUFDUjtJQUVBLG9FQUFvRSxHQUNwRSxBQUFPQyxXQUFXakMsR0FBVyxFQUErQjtRQUMzRCxPQUFPLElBQUksQ0FBQzhCLFNBQVMsQ0FBQ0ksSUFBSSxDQUFDLENBQUNDLElBQU1BLEVBQUVuQyxHQUFHLEtBQUtBO0lBQzdDO0lBRUEsb0RBQW9ELEdBQ3BELEFBQU9vQyxjQUEwQztRQUNoRCxPQUFPLElBQUksQ0FBQ04sU0FBUztJQUN0QjtJQUVBLCtDQUErQyxHQUMvQyxBQUFPN0IsU0FBK0JDLEtBQVEsRUFBSztRQUNsRCxJQUFJLENBQUNMLE9BQU8sQ0FBQ00sR0FBRyxDQUFDRCxNQUFNRSxHQUFHLEVBQUVGO1FBQzVCLE9BQU9BO0lBQ1I7SUFFQTs7O0VBR0MsR0FDRCxBQUFPTyxTQUF1Q0wsR0FBVyxFQUFpQjtRQUN6RSxNQUFNVyxJQUFJLElBQUksQ0FBQ2xCLE9BQU8sQ0FBQ2EsR0FBRyxDQUFDTjtRQUMzQixJQUFJVyxNQUFNc0IsV0FBVyxPQUFPdEI7UUFDNUIsS0FBSyxNQUFNaUIsV0FBVyxJQUFJLENBQUNGLFNBQVMsQ0FBRTtZQUNyQyxNQUFNUSxLQUFLTixRQUFRdkIsUUFBUSxDQUFJTDtZQUMvQixJQUFJa0MsT0FBT0QsV0FBVyxPQUFPQztRQUM5QjtRQUNBLE9BQU9EO0lBQ1I7SUFFQTs7O0VBR0MsR0FDRCxBQUFPMUIsVUFBd0NDLElBQWlDLEVBQU87UUFDdEYsT0FBTztlQUNIO21CQUFJLElBQUksQ0FBQ2YsT0FBTyxDQUFDZ0IsTUFBTTthQUFHLENBQUNDLE1BQU0sQ0FBQyxDQUFDQyxJQUFjQSxhQUFhSDtlQUM5RCxJQUFJLENBQUNrQixTQUFTLENBQUNiLE9BQU8sQ0FBQyxDQUFDa0IsSUFBTUEsRUFBRXhCLFNBQVMsQ0FBQ0M7U0FDN0M7SUFDRjtJQUVBLDhFQUE4RSxHQUM5RSxNQUFhMkIsV0FBMEI7UUFDdEMsTUFBTUMsV0FBVztlQUNiLElBQUksQ0FBQ2hDLEtBQUs7ZUFDVjttQkFBSSxJQUFJLENBQUNYLE9BQU8sQ0FBQ2dCLE1BQU07YUFBRyxDQUFDSSxPQUFPLENBQUMsQ0FBQ0YsSUFBTUEsRUFBRVAsS0FBSztlQUNqRCxJQUFJLENBQUNzQixTQUFTLENBQUNiLE9BQU8sQ0FBQyxDQUFDa0IsSUFBTUEsRUFBRTNCLEtBQUs7U0FDeEM7UUFFRCxNQUFNaUMsUUFBUXpCLEdBQUcsQ0FDaEJ3QixTQUFTdEIsR0FBRyxDQUFDLE9BQU93QjtZQUNuQixNQUFNQyxXQUFXaEQsS0FBSyxJQUFJLENBQUM0QixTQUFTLEVBQUVtQixLQUFLdEIsUUFBUTtZQUNuRCxNQUFNN0IsTUFBTUcsUUFBUWlELFdBQVc7Z0JBQUVDLFdBQVc7WUFBSztZQUNqRCxNQUFNcEQsVUFBVW1ELFVBQVVELEtBQUtyQixPQUFPO1FBQ3ZDO0lBRUY7QUFDRCJ9
@@ -1,31 +1,58 @@
1
1
  import { Command, CommanderError } from "commander";
2
2
  import { resolveTargetDir } from "./resolve-target-dir.js";
3
3
  import { runInBuilder } from "./runner.js";
4
+ import { CreateCliError, parseApiNames } from "./webapi/api-name.js";
4
5
  import { scaffoldApi } from "./webapi/create-api.js";
6
+ function collectName(value, previous) {
7
+ previous.push(value);
8
+ return previous;
9
+ }
10
+ function addWebapiFeatureOptions(cmd) {
11
+ return cmd.option("--database <provider>", "Database provider: none | postgres/typeorm").option("--auth <provider>", "Auth provider: none | auth0").option("--postman <provider>", "Postman provider: none | local | api").option("-y, --yes", "Install dependencies without prompting").option("--install <mode>", "Dependency install mode: ask | yes | no", "ask");
12
+ }
13
+ function toApiOptions(directory, opts, extra = {}) {
14
+ const installMode = String(opts.install ?? "ask").toLowerCase();
15
+ const names = Array.isArray(opts.name) ? opts.name : typeof opts.name === "string" ? [
16
+ opts.name
17
+ ] : extra.names;
18
+ return {
19
+ d: resolveTargetDir(directory, typeof opts.d === "string" ? opts.d : undefined),
20
+ databaseProvider: opts.database,
21
+ authProvider: opts.auth,
22
+ postmanProvider: opts.postman,
23
+ installDependencies: opts.yes === true ? "yes" : installMode === "yes" || installMode === "no" ? installMode : undefined,
24
+ names,
25
+ ...extra
26
+ };
27
+ }
28
+ async function runWebapi(normalized) {
29
+ parseApiNames(normalized.names);
30
+ if (process.env.DECOHERE_BUILDER !== "1") {
31
+ runInBuilder(normalized);
32
+ return;
33
+ }
34
+ const { closePrompt } = await import("./domain/prompt.js");
35
+ try {
36
+ await scaffoldApi(normalized);
37
+ } finally{
38
+ closePrompt();
39
+ }
40
+ }
5
41
  export function createProgram() {
6
42
  const program = new Command();
7
43
  program.exitOverride();
8
44
  program.name("decohere").description("Scaffold a new Decohere project").option("-d <directory>", "Target directory (default: current directory)", ".");
9
- program.command("webapi").argument("[directory]", "Target directory (default: -d or current directory)").option("--database <provider>", "Database provider: none | postgres/typeorm").option("--auth <provider>", "Auth provider: none | auth0").option("--postman <provider>", "Postman provider: none | local | api").option("-y, --yes", "Install dependencies without prompting").option("--install <mode>", "Dependency install mode: ask | yes | no", "ask").action(async (directory, _opts, cmd)=>{
10
- const opts = cmd.optsWithGlobals();
11
- const installMode = String(opts.install ?? "ask").toLowerCase();
12
- const normalized = {
13
- d: resolveTargetDir(directory, typeof opts.d === "string" ? opts.d : undefined),
14
- databaseProvider: opts.database,
15
- authProvider: opts.auth,
16
- postmanProvider: opts.postman,
17
- installDependencies: opts.yes === true ? "yes" : installMode === "yes" || installMode === "no" ? installMode : undefined
18
- };
19
- if (process.env.DECOHERE_BUILDER !== "1") {
20
- runInBuilder(normalized);
21
- return;
22
- }
23
- const { closePrompt } = await import("./domain/prompt.js");
24
- try {
25
- await scaffoldApi(normalized);
26
- } finally{
27
- closePrompt();
28
- }
45
+ const webapi = addWebapiFeatureOptions(program.command("webapi").argument("[directory]", "Target directory (default: -d or current directory)").option("--name <slug>", "API name under projects/ (repeatable; default: api)", collectName, []));
46
+ webapi.action(async (directory, _opts, cmd)=>{
47
+ await runWebapi(toApiOptions(directory, cmd.optsWithGlobals()));
48
+ });
49
+ addWebapiFeatureOptions(webapi.command("add").argument("<name>", "API name under projects/")).action(async (name, _opts, cmd)=>{
50
+ await runWebapi(toApiOptions(undefined, cmd.optsWithGlobals(), {
51
+ names: [
52
+ name
53
+ ],
54
+ add: true
55
+ }));
29
56
  });
30
57
  return program;
31
58
  }
@@ -36,10 +63,14 @@ export async function runCli(argv = process.argv) {
36
63
  if (err instanceof CommanderError) {
37
64
  process.exit(err.exitCode);
38
65
  }
66
+ if (err instanceof CreateCliError) {
67
+ console.error(`\n ${err.message}\n`);
68
+ process.exit(1);
69
+ }
39
70
  console.error(err);
40
71
  process.exit(1);
41
72
  }
42
73
  process.exit(process.exitCode ?? 0);
43
74
  }
44
75
 
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcHJvZ3JhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kLCBDb21tYW5kZXJFcnJvciB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IHJlc29sdmVUYXJnZXREaXIgfSBmcm9tIFwiLi9yZXNvbHZlLXRhcmdldC1kaXIuanNcIjtcbmltcG9ydCB7IHJ1bkluQnVpbGRlciB9IGZyb20gXCIuL3J1bm5lci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBcGlPcHRpb25zIH0gZnJvbSBcIi4vd2ViYXBpL2NyZWF0ZS1hcGkuanNcIjtcbmltcG9ydCB7IHNjYWZmb2xkQXBpIH0gZnJvbSBcIi4vd2ViYXBpL2NyZWF0ZS1hcGkuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb2dyYW0oKTogQ29tbWFuZCB7XG5cdGNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXHRwcm9ncmFtLmV4aXRPdmVycmlkZSgpO1xuXHRwcm9ncmFtXG5cdFx0Lm5hbWUoXCJkZWNvaGVyZVwiKVxuXHRcdC5kZXNjcmlwdGlvbihcIlNjYWZmb2xkIGEgbmV3IERlY29oZXJlIHByb2plY3RcIilcblx0XHQub3B0aW9uKFwiLWQgPGRpcmVjdG9yeT5cIiwgXCJUYXJnZXQgZGlyZWN0b3J5IChkZWZhdWx0OiBjdXJyZW50IGRpcmVjdG9yeSlcIiwgXCIuXCIpO1xuXG5cdHByb2dyYW1cblx0XHQuY29tbWFuZChcIndlYmFwaVwiKVxuXHRcdC5hcmd1bWVudChcIltkaXJlY3RvcnldXCIsIFwiVGFyZ2V0IGRpcmVjdG9yeSAoZGVmYXVsdDogLWQgb3IgY3VycmVudCBkaXJlY3RvcnkpXCIpXG5cdFx0Lm9wdGlvbihcIi0tZGF0YWJhc2UgPHByb3ZpZGVyPlwiLCBcIkRhdGFiYXNlIHByb3ZpZGVyOiBub25lIHwgcG9zdGdyZXMvdHlwZW9ybVwiKVxuXHRcdC5vcHRpb24oXCItLWF1dGggPHByb3ZpZGVyPlwiLCBcIkF1dGggcHJvdmlkZXI6IG5vbmUgfCBhdXRoMFwiKVxuXHRcdC5vcHRpb24oXCItLXBvc3RtYW4gPHByb3ZpZGVyPlwiLCBcIlBvc3RtYW4gcHJvdmlkZXI6IG5vbmUgfCBsb2NhbCB8IGFwaVwiKVxuXHRcdC5vcHRpb24oXCIteSwgLS15ZXNcIiwgXCJJbnN0YWxsIGRlcGVuZGVuY2llcyB3aXRob3V0IHByb21wdGluZ1wiKVxuXHRcdC5vcHRpb24oXCItLWluc3RhbGwgPG1vZGU+XCIsIFwiRGVwZW5kZW5jeSBpbnN0YWxsIG1vZGU6IGFzayB8IHllcyB8IG5vXCIsIFwiYXNrXCIpXG5cdFx0LmFjdGlvbihhc3luYyAoZGlyZWN0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQsIF9vcHRzOiB1bmtub3duLCBjbWQ6IENvbW1hbmQpID0+IHtcblx0XHRcdGNvbnN0IG9wdHMgPSBjbWQub3B0c1dpdGhHbG9iYWxzKCk7XG5cdFx0XHRjb25zdCBpbnN0YWxsTW9kZSA9IFN0cmluZyhvcHRzLmluc3RhbGwgPz8gXCJhc2tcIikudG9Mb3dlckNhc2UoKTtcblx0XHRcdGNvbnN0IG5vcm1hbGl6ZWQ6IEFwaU9wdGlvbnMgPSB7XG5cdFx0XHRcdGQ6IHJlc29sdmVUYXJnZXREaXIoZGlyZWN0b3J5LCB0eXBlb2Ygb3B0cy5kID09PSBcInN0cmluZ1wiID8gb3B0cy5kIDogdW5kZWZpbmVkKSxcblx0XHRcdFx0ZGF0YWJhc2VQcm92aWRlcjogb3B0cy5kYXRhYmFzZSxcblx0XHRcdFx0YXV0aFByb3ZpZGVyOiBvcHRzLmF1dGgsXG5cdFx0XHRcdHBvc3RtYW5Qcm92aWRlcjogb3B0cy5wb3N0bWFuLFxuXHRcdFx0XHRpbnN0YWxsRGVwZW5kZW5jaWVzOlxuXHRcdFx0XHRcdG9wdHMueWVzID09PSB0cnVlXG5cdFx0XHRcdFx0XHQ/IFwieWVzXCJcblx0XHRcdFx0XHRcdDogaW5zdGFsbE1vZGUgPT09IFwieWVzXCIgfHwgaW5zdGFsbE1vZGUgPT09IFwibm9cIlxuXHRcdFx0XHRcdFx0XHQ/IGluc3RhbGxNb2RlXG5cdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHByb2Nlc3MuZW52LkRFQ09IRVJFX0JVSUxERVIgIT09IFwiMVwiKSB7XG5cdFx0XHRcdHJ1bkluQnVpbGRlcihub3JtYWxpemVkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB7IGNsb3NlUHJvbXB0IH0gPSBhd2FpdCBpbXBvcnQoXCIuL2RvbWFpbi9wcm9tcHQuanNcIik7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBzY2FmZm9sZEFwaShub3JtYWxpemVkKTtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGNsb3NlUHJvbXB0KCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmV0dXJuIHByb2dyYW07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5DbGkoYXJndjogc3RyaW5nW10gPSBwcm9jZXNzLmFyZ3YpOiBQcm9taXNlPHZvaWQ+IHtcblx0dHJ5IHtcblx0XHRhd2FpdCBjcmVhdGVQcm9ncmFtKCkucGFyc2VBc3luYyhhcmd2KTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKGVyciBpbnN0YW5jZW9mIENvbW1hbmRlckVycm9yKSB7XG5cdFx0XHRwcm9jZXNzLmV4aXQoZXJyLmV4aXRDb2RlKTtcblx0XHR9XG5cdFx0Y29uc29sZS5lcnJvcihlcnIpO1xuXHRcdHByb2Nlc3MuZXhpdCgxKTtcblx0fVxuXHRwcm9jZXNzLmV4aXQocHJvY2Vzcy5leGl0Q29kZSA/PyAwKTtcbn1cbiJdLCJuYW1lcyI6WyJDb21tYW5kIiwiQ29tbWFuZGVyRXJyb3IiLCJyZXNvbHZlVGFyZ2V0RGlyIiwicnVuSW5CdWlsZGVyIiwic2NhZmZvbGRBcGkiLCJjcmVhdGVQcm9ncmFtIiwicHJvZ3JhbSIsImV4aXRPdmVycmlkZSIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsIm9wdGlvbiIsImNvbW1hbmQiLCJhcmd1bWVudCIsImFjdGlvbiIsImRpcmVjdG9yeSIsIl9vcHRzIiwiY21kIiwib3B0cyIsIm9wdHNXaXRoR2xvYmFscyIsImluc3RhbGxNb2RlIiwiU3RyaW5nIiwiaW5zdGFsbCIsInRvTG93ZXJDYXNlIiwibm9ybWFsaXplZCIsImQiLCJ1bmRlZmluZWQiLCJkYXRhYmFzZVByb3ZpZGVyIiwiZGF0YWJhc2UiLCJhdXRoUHJvdmlkZXIiLCJhdXRoIiwicG9zdG1hblByb3ZpZGVyIiwicG9zdG1hbiIsImluc3RhbGxEZXBlbmRlbmNpZXMiLCJ5ZXMiLCJwcm9jZXNzIiwiZW52IiwiREVDT0hFUkVfQlVJTERFUiIsImNsb3NlUHJvbXB0IiwicnVuQ2xpIiwiYXJndiIsInBhcnNlQXN5bmMiLCJlcnIiLCJleGl0IiwiZXhpdENvZGUiLCJjb25zb2xlIiwiZXJyb3IiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQU8sRUFBRUMsY0FBYyxRQUFRLFlBQVk7QUFDcEQsU0FBU0MsZ0JBQWdCLFFBQVEsMEJBQTBCO0FBQzNELFNBQVNDLFlBQVksUUFBUSxjQUFjO0FBRTNDLFNBQVNDLFdBQVcsUUFBUSx5QkFBeUI7QUFFckQsT0FBTyxTQUFTQztJQUNmLE1BQU1DLFVBQVUsSUFBSU47SUFDcEJNLFFBQVFDLFlBQVk7SUFDcEJELFFBQ0VFLElBQUksQ0FBQyxZQUNMQyxXQUFXLENBQUMsbUNBQ1pDLE1BQU0sQ0FBQyxrQkFBa0IsaURBQWlEO0lBRTVFSixRQUNFSyxPQUFPLENBQUMsVUFDUkMsUUFBUSxDQUFDLGVBQWUsdURBQ3hCRixNQUFNLENBQUMseUJBQXlCLDhDQUNoQ0EsTUFBTSxDQUFDLHFCQUFxQiwrQkFDNUJBLE1BQU0sQ0FBQyx3QkFBd0Isd0NBQy9CQSxNQUFNLENBQUMsYUFBYSwwQ0FDcEJBLE1BQU0sQ0FBQyxvQkFBb0IsMkNBQTJDLE9BQ3RFRyxNQUFNLENBQUMsT0FBT0MsV0FBK0JDLE9BQWdCQztRQUM3RCxNQUFNQyxPQUFPRCxJQUFJRSxlQUFlO1FBQ2hDLE1BQU1DLGNBQWNDLE9BQU9ILEtBQUtJLE9BQU8sSUFBSSxPQUFPQyxXQUFXO1FBQzdELE1BQU1DLGFBQXlCO1lBQzlCQyxHQUFHdEIsaUJBQWlCWSxXQUFXLE9BQU9HLEtBQUtPLENBQUMsS0FBSyxXQUFXUCxLQUFLTyxDQUFDLEdBQUdDO1lBQ3JFQyxrQkFBa0JULEtBQUtVLFFBQVE7WUFDL0JDLGNBQWNYLEtBQUtZLElBQUk7WUFDdkJDLGlCQUFpQmIsS0FBS2MsT0FBTztZQUM3QkMscUJBQ0NmLEtBQUtnQixHQUFHLEtBQUssT0FDVixRQUNBZCxnQkFBZ0IsU0FBU0EsZ0JBQWdCLE9BQ3hDQSxjQUNBTTtRQUNOO1FBRUEsSUFBSVMsUUFBUUMsR0FBRyxDQUFDQyxnQkFBZ0IsS0FBSyxLQUFLO1lBQ3pDakMsYUFBYW9CO1lBQ2I7UUFDRDtRQUVBLE1BQU0sRUFBRWMsV0FBVyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUM7UUFDckMsSUFBSTtZQUNILE1BQU1qQyxZQUFZbUI7UUFDbkIsU0FBVTtZQUNUYztRQUNEO0lBQ0Q7SUFFRCxPQUFPL0I7QUFDUjtBQUVBLE9BQU8sZUFBZWdDLE9BQU9DLE9BQWlCTCxRQUFRSyxJQUFJO0lBQ3pELElBQUk7UUFDSCxNQUFNbEMsZ0JBQWdCbUMsVUFBVSxDQUFDRDtJQUNsQyxFQUFFLE9BQU9FLEtBQUs7UUFDYixJQUFJQSxlQUFleEMsZ0JBQWdCO1lBQ2xDaUMsUUFBUVEsSUFBSSxDQUFDRCxJQUFJRSxRQUFRO1FBQzFCO1FBQ0FDLFFBQVFDLEtBQUssQ0FBQ0o7UUFDZFAsUUFBUVEsSUFBSSxDQUFDO0lBQ2Q7SUFDQVIsUUFBUVEsSUFBSSxDQUFDUixRQUFRUyxRQUFRLElBQUk7QUFDbEMifQ==
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcHJvZ3JhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kLCBDb21tYW5kZXJFcnJvciB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IHJlc29sdmVUYXJnZXREaXIgfSBmcm9tIFwiLi9yZXNvbHZlLXRhcmdldC1kaXIuanNcIjtcbmltcG9ydCB7IHJ1bkluQnVpbGRlciB9IGZyb20gXCIuL3J1bm5lci5qc1wiO1xuaW1wb3J0IHsgQ3JlYXRlQ2xpRXJyb3IsIHBhcnNlQXBpTmFtZXMgfSBmcm9tIFwiLi93ZWJhcGkvYXBpLW5hbWUuanNcIjtcbmltcG9ydCB0eXBlIHsgQXBpT3B0aW9ucyB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5pbXBvcnQgeyBzY2FmZm9sZEFwaSB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5cbmZ1bmN0aW9uIGNvbGxlY3ROYW1lKHZhbHVlOiBzdHJpbmcsIHByZXZpb3VzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcblx0cHJldmlvdXMucHVzaCh2YWx1ZSk7XG5cdHJldHVybiBwcmV2aW91cztcbn1cblxuZnVuY3Rpb24gYWRkV2ViYXBpRmVhdHVyZU9wdGlvbnMoY21kOiBDb21tYW5kKTogQ29tbWFuZCB7XG5cdHJldHVybiBjbWRcblx0XHQub3B0aW9uKFwiLS1kYXRhYmFzZSA8cHJvdmlkZXI+XCIsIFwiRGF0YWJhc2UgcHJvdmlkZXI6IG5vbmUgfCBwb3N0Z3Jlcy90eXBlb3JtXCIpXG5cdFx0Lm9wdGlvbihcIi0tYXV0aCA8cHJvdmlkZXI+XCIsIFwiQXV0aCBwcm92aWRlcjogbm9uZSB8IGF1dGgwXCIpXG5cdFx0Lm9wdGlvbihcIi0tcG9zdG1hbiA8cHJvdmlkZXI+XCIsIFwiUG9zdG1hbiBwcm92aWRlcjogbm9uZSB8IGxvY2FsIHwgYXBpXCIpXG5cdFx0Lm9wdGlvbihcIi15LCAtLXllc1wiLCBcIkluc3RhbGwgZGVwZW5kZW5jaWVzIHdpdGhvdXQgcHJvbXB0aW5nXCIpXG5cdFx0Lm9wdGlvbihcIi0taW5zdGFsbCA8bW9kZT5cIiwgXCJEZXBlbmRlbmN5IGluc3RhbGwgbW9kZTogYXNrIHwgeWVzIHwgbm9cIiwgXCJhc2tcIik7XG59XG5cbmZ1bmN0aW9uIHRvQXBpT3B0aW9ucyhcblx0ZGlyZWN0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG9wdHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRleHRyYTogUGFydGlhbDxBcGlPcHRpb25zPiA9IHt9LFxuKTogQXBpT3B0aW9ucyB7XG5cdGNvbnN0IGluc3RhbGxNb2RlID0gU3RyaW5nKG9wdHMuaW5zdGFsbCA/PyBcImFza1wiKS50b0xvd2VyQ2FzZSgpO1xuXHRjb25zdCBuYW1lcyA9IEFycmF5LmlzQXJyYXkob3B0cy5uYW1lKVxuXHRcdD8gKG9wdHMubmFtZSBhcyBzdHJpbmdbXSlcblx0XHQ6IHR5cGVvZiBvcHRzLm5hbWUgPT09IFwic3RyaW5nXCJcblx0XHRcdD8gW29wdHMubmFtZV1cblx0XHRcdDogZXh0cmEubmFtZXM7XG5cdHJldHVybiB7XG5cdFx0ZDogcmVzb2x2ZVRhcmdldERpcihkaXJlY3RvcnksIHR5cGVvZiBvcHRzLmQgPT09IFwic3RyaW5nXCIgPyBvcHRzLmQgOiB1bmRlZmluZWQpLFxuXHRcdGRhdGFiYXNlUHJvdmlkZXI6IG9wdHMuZGF0YWJhc2UgYXMgQXBpT3B0aW9uc1tcImRhdGFiYXNlUHJvdmlkZXJcIl0sXG5cdFx0YXV0aFByb3ZpZGVyOiBvcHRzLmF1dGggYXMgQXBpT3B0aW9uc1tcImF1dGhQcm92aWRlclwiXSxcblx0XHRwb3N0bWFuUHJvdmlkZXI6IG9wdHMucG9zdG1hbiBhcyBBcGlPcHRpb25zW1wicG9zdG1hblByb3ZpZGVyXCJdLFxuXHRcdGluc3RhbGxEZXBlbmRlbmNpZXM6XG5cdFx0XHRvcHRzLnllcyA9PT0gdHJ1ZVxuXHRcdFx0XHQ/IFwieWVzXCJcblx0XHRcdFx0OiBpbnN0YWxsTW9kZSA9PT0gXCJ5ZXNcIiB8fCBpbnN0YWxsTW9kZSA9PT0gXCJub1wiXG5cdFx0XHRcdFx0PyBpbnN0YWxsTW9kZVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdG5hbWVzLFxuXHRcdC4uLmV4dHJhLFxuXHR9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5XZWJhcGkobm9ybWFsaXplZDogQXBpT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRwYXJzZUFwaU5hbWVzKG5vcm1hbGl6ZWQubmFtZXMpO1xuXHRpZiAocHJvY2Vzcy5lbnYuREVDT0hFUkVfQlVJTERFUiAhPT0gXCIxXCIpIHtcblx0XHRydW5JbkJ1aWxkZXIobm9ybWFsaXplZCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgeyBjbG9zZVByb21wdCB9ID0gYXdhaXQgaW1wb3J0KFwiLi9kb21haW4vcHJvbXB0LmpzXCIpO1xuXHR0cnkge1xuXHRcdGF3YWl0IHNjYWZmb2xkQXBpKG5vcm1hbGl6ZWQpO1xuXHR9IGZpbmFsbHkge1xuXHRcdGNsb3NlUHJvbXB0KCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb2dyYW0oKTogQ29tbWFuZCB7XG5cdGNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXHRwcm9ncmFtLmV4aXRPdmVycmlkZSgpO1xuXHRwcm9ncmFtXG5cdFx0Lm5hbWUoXCJkZWNvaGVyZVwiKVxuXHRcdC5kZXNjcmlwdGlvbihcIlNjYWZmb2xkIGEgbmV3IERlY29oZXJlIHByb2plY3RcIilcblx0XHQub3B0aW9uKFwiLWQgPGRpcmVjdG9yeT5cIiwgXCJUYXJnZXQgZGlyZWN0b3J5IChkZWZhdWx0OiBjdXJyZW50IGRpcmVjdG9yeSlcIiwgXCIuXCIpO1xuXG5cdGNvbnN0IHdlYmFwaSA9IGFkZFdlYmFwaUZlYXR1cmVPcHRpb25zKFxuXHRcdHByb2dyYW1cblx0XHRcdC5jb21tYW5kKFwid2ViYXBpXCIpXG5cdFx0XHQuYXJndW1lbnQoXCJbZGlyZWN0b3J5XVwiLCBcIlRhcmdldCBkaXJlY3RvcnkgKGRlZmF1bHQ6IC1kIG9yIGN1cnJlbnQgZGlyZWN0b3J5KVwiKVxuXHRcdFx0Lm9wdGlvbihcblx0XHRcdFx0XCItLW5hbWUgPHNsdWc+XCIsXG5cdFx0XHRcdFwiQVBJIG5hbWUgdW5kZXIgcHJvamVjdHMvIChyZXBlYXRhYmxlOyBkZWZhdWx0OiBhcGkpXCIsXG5cdFx0XHRcdGNvbGxlY3ROYW1lLFxuXHRcdFx0XHRbXSBhcyBzdHJpbmdbXSxcblx0XHRcdCksXG5cdCk7XG5cdHdlYmFwaS5hY3Rpb24oYXN5bmMgKGRpcmVjdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkLCBfb3B0czogdW5rbm93biwgY21kOiBDb21tYW5kKSA9PiB7XG5cdFx0YXdhaXQgcnVuV2ViYXBpKHRvQXBpT3B0aW9ucyhkaXJlY3RvcnksIGNtZC5vcHRzV2l0aEdsb2JhbHMoKSkpO1xuXHR9KTtcblxuXHRhZGRXZWJhcGlGZWF0dXJlT3B0aW9ucyhcblx0XHR3ZWJhcGkuY29tbWFuZChcImFkZFwiKS5hcmd1bWVudChcIjxuYW1lPlwiLCBcIkFQSSBuYW1lIHVuZGVyIHByb2plY3RzL1wiKSxcblx0KS5hY3Rpb24oYXN5bmMgKG5hbWU6IHN0cmluZywgX29wdHM6IHVua25vd24sIGNtZDogQ29tbWFuZCkgPT4ge1xuXHRcdGF3YWl0IHJ1bldlYmFwaShcblx0XHRcdHRvQXBpT3B0aW9ucyh1bmRlZmluZWQsIGNtZC5vcHRzV2l0aEdsb2JhbHMoKSwgeyBuYW1lczogW25hbWVdLCBhZGQ6IHRydWUgfSksXG5cdFx0KTtcblx0fSk7XG5cblx0cmV0dXJuIHByb2dyYW07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5DbGkoYXJndjogc3RyaW5nW10gPSBwcm9jZXNzLmFyZ3YpOiBQcm9taXNlPHZvaWQ+IHtcblx0dHJ5IHtcblx0XHRhd2FpdCBjcmVhdGVQcm9ncmFtKCkucGFyc2VBc3luYyhhcmd2KTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKGVyciBpbnN0YW5jZW9mIENvbW1hbmRlckVycm9yKSB7XG5cdFx0XHRwcm9jZXNzLmV4aXQoZXJyLmV4aXRDb2RlKTtcblx0XHR9XG5cdFx0aWYgKGVyciBpbnN0YW5jZW9mIENyZWF0ZUNsaUVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGBcXG4gICR7ZXJyLm1lc3NhZ2V9XFxuYCk7XG5cdFx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdFx0fVxuXHRcdGNvbnNvbGUuZXJyb3IoZXJyKTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblx0cHJvY2Vzcy5leGl0KHByb2Nlc3MuZXhpdENvZGUgPz8gMCk7XG59XG4iXSwibmFtZXMiOlsiQ29tbWFuZCIsIkNvbW1hbmRlckVycm9yIiwicmVzb2x2ZVRhcmdldERpciIsInJ1bkluQnVpbGRlciIsIkNyZWF0ZUNsaUVycm9yIiwicGFyc2VBcGlOYW1lcyIsInNjYWZmb2xkQXBpIiwiY29sbGVjdE5hbWUiLCJ2YWx1ZSIsInByZXZpb3VzIiwicHVzaCIsImFkZFdlYmFwaUZlYXR1cmVPcHRpb25zIiwiY21kIiwib3B0aW9uIiwidG9BcGlPcHRpb25zIiwiZGlyZWN0b3J5Iiwib3B0cyIsImV4dHJhIiwiaW5zdGFsbE1vZGUiLCJTdHJpbmciLCJpbnN0YWxsIiwidG9Mb3dlckNhc2UiLCJuYW1lcyIsIkFycmF5IiwiaXNBcnJheSIsIm5hbWUiLCJkIiwidW5kZWZpbmVkIiwiZGF0YWJhc2VQcm92aWRlciIsImRhdGFiYXNlIiwiYXV0aFByb3ZpZGVyIiwiYXV0aCIsInBvc3RtYW5Qcm92aWRlciIsInBvc3RtYW4iLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwieWVzIiwicnVuV2ViYXBpIiwibm9ybWFsaXplZCIsInByb2Nlc3MiLCJlbnYiLCJERUNPSEVSRV9CVUlMREVSIiwiY2xvc2VQcm9tcHQiLCJjcmVhdGVQcm9ncmFtIiwicHJvZ3JhbSIsImV4aXRPdmVycmlkZSIsImRlc2NyaXB0aW9uIiwid2ViYXBpIiwiY29tbWFuZCIsImFyZ3VtZW50IiwiYWN0aW9uIiwiX29wdHMiLCJvcHRzV2l0aEdsb2JhbHMiLCJhZGQiLCJydW5DbGkiLCJhcmd2IiwicGFyc2VBc3luYyIsImVyciIsImV4aXQiLCJleGl0Q29kZSIsImNvbnNvbGUiLCJlcnJvciIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQU8sRUFBRUMsY0FBYyxRQUFRLFlBQVk7QUFDcEQsU0FBU0MsZ0JBQWdCLFFBQVEsMEJBQTBCO0FBQzNELFNBQVNDLFlBQVksUUFBUSxjQUFjO0FBQzNDLFNBQVNDLGNBQWMsRUFBRUMsYUFBYSxRQUFRLHVCQUF1QjtBQUVyRSxTQUFTQyxXQUFXLFFBQVEseUJBQXlCO0FBRXJELFNBQVNDLFlBQVlDLEtBQWEsRUFBRUMsUUFBa0I7SUFDckRBLFNBQVNDLElBQUksQ0FBQ0Y7SUFDZCxPQUFPQztBQUNSO0FBRUEsU0FBU0Usd0JBQXdCQyxHQUFZO0lBQzVDLE9BQU9BLElBQ0xDLE1BQU0sQ0FBQyx5QkFBeUIsOENBQ2hDQSxNQUFNLENBQUMscUJBQXFCLCtCQUM1QkEsTUFBTSxDQUFDLHdCQUF3Qix3Q0FDL0JBLE1BQU0sQ0FBQyxhQUFhLDBDQUNwQkEsTUFBTSxDQUFDLG9CQUFvQiwyQ0FBMkM7QUFDekU7QUFFQSxTQUFTQyxhQUNSQyxTQUE2QixFQUM3QkMsSUFBNkIsRUFDN0JDLFFBQTZCLENBQUMsQ0FBQztJQUUvQixNQUFNQyxjQUFjQyxPQUFPSCxLQUFLSSxPQUFPLElBQUksT0FBT0MsV0FBVztJQUM3RCxNQUFNQyxRQUFRQyxNQUFNQyxPQUFPLENBQUNSLEtBQUtTLElBQUksSUFDakNULEtBQUtTLElBQUksR0FDVixPQUFPVCxLQUFLUyxJQUFJLEtBQUssV0FDcEI7UUFBQ1QsS0FBS1MsSUFBSTtLQUFDLEdBQ1hSLE1BQU1LLEtBQUs7SUFDZixPQUFPO1FBQ05JLEdBQUd4QixpQkFBaUJhLFdBQVcsT0FBT0MsS0FBS1UsQ0FBQyxLQUFLLFdBQVdWLEtBQUtVLENBQUMsR0FBR0M7UUFDckVDLGtCQUFrQlosS0FBS2EsUUFBUTtRQUMvQkMsY0FBY2QsS0FBS2UsSUFBSTtRQUN2QkMsaUJBQWlCaEIsS0FBS2lCLE9BQU87UUFDN0JDLHFCQUNDbEIsS0FBS21CLEdBQUcsS0FBSyxPQUNWLFFBQ0FqQixnQkFBZ0IsU0FBU0EsZ0JBQWdCLE9BQ3hDQSxjQUNBUztRQUNMTDtRQUNBLEdBQUdMLEtBQUs7SUFDVDtBQUNEO0FBRUEsZUFBZW1CLFVBQVVDLFVBQXNCO0lBQzlDaEMsY0FBY2dDLFdBQVdmLEtBQUs7SUFDOUIsSUFBSWdCLFFBQVFDLEdBQUcsQ0FBQ0MsZ0JBQWdCLEtBQUssS0FBSztRQUN6Q3JDLGFBQWFrQztRQUNiO0lBQ0Q7SUFFQSxNQUFNLEVBQUVJLFdBQVcsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDO0lBQ3JDLElBQUk7UUFDSCxNQUFNbkMsWUFBWStCO0lBQ25CLFNBQVU7UUFDVEk7SUFDRDtBQUNEO0FBRUEsT0FBTyxTQUFTQztJQUNmLE1BQU1DLFVBQVUsSUFBSTNDO0lBQ3BCMkMsUUFBUUMsWUFBWTtJQUNwQkQsUUFDRWxCLElBQUksQ0FBQyxZQUNMb0IsV0FBVyxDQUFDLG1DQUNaaEMsTUFBTSxDQUFDLGtCQUFrQixpREFBaUQ7SUFFNUUsTUFBTWlDLFNBQVNuQyx3QkFDZGdDLFFBQ0VJLE9BQU8sQ0FBQyxVQUNSQyxRQUFRLENBQUMsZUFBZSx1REFDeEJuQyxNQUFNLENBQ04saUJBQ0EsdURBQ0FOLGFBQ0EsRUFBRTtJQUdMdUMsT0FBT0csTUFBTSxDQUFDLE9BQU9sQyxXQUErQm1DLE9BQWdCdEM7UUFDbkUsTUFBTXdCLFVBQVV0QixhQUFhQyxXQUFXSCxJQUFJdUMsZUFBZTtJQUM1RDtJQUVBeEMsd0JBQ0NtQyxPQUFPQyxPQUFPLENBQUMsT0FBT0MsUUFBUSxDQUFDLFVBQVUsNkJBQ3hDQyxNQUFNLENBQUMsT0FBT3hCLE1BQWN5QixPQUFnQnRDO1FBQzdDLE1BQU13QixVQUNMdEIsYUFBYWEsV0FBV2YsSUFBSXVDLGVBQWUsSUFBSTtZQUFFN0IsT0FBTztnQkFBQ0c7YUFBSztZQUFFMkIsS0FBSztRQUFLO0lBRTVFO0lBRUEsT0FBT1Q7QUFDUjtBQUVBLE9BQU8sZUFBZVUsT0FBT0MsT0FBaUJoQixRQUFRZ0IsSUFBSTtJQUN6RCxJQUFJO1FBQ0gsTUFBTVosZ0JBQWdCYSxVQUFVLENBQUNEO0lBQ2xDLEVBQUUsT0FBT0UsS0FBSztRQUNiLElBQUlBLGVBQWV2RCxnQkFBZ0I7WUFDbENxQyxRQUFRbUIsSUFBSSxDQUFDRCxJQUFJRSxRQUFRO1FBQzFCO1FBQ0EsSUFBSUYsZUFBZXBELGdCQUFnQjtZQUNsQ3VELFFBQVFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRUosSUFBSUssT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNwQ3ZCLFFBQVFtQixJQUFJLENBQUM7UUFDZDtRQUNBRSxRQUFRQyxLQUFLLENBQUNKO1FBQ2RsQixRQUFRbUIsSUFBSSxDQUFDO0lBQ2Q7SUFDQW5CLFFBQVFtQixJQUFJLENBQUNuQixRQUFRb0IsUUFBUSxJQUFJO0FBQ2xDIn0=
package/es6/src/runner.js CHANGED
@@ -87,11 +87,22 @@ const BUILDER_IMAGE = `${CREATE_IMAGE_REPOSITORY}:${CREATE_VERSION}`;
87
87
  envArgs.push("-e", `HOST_UID=${hostUid}`);
88
88
  if (hostGid != null) envArgs.push("-e", `HOST_GID=${hostGid}`);
89
89
  }
90
- const commandArgs = [
90
+ const commandArgs = opts.add ? [
91
+ "webapi",
92
+ "add",
93
+ opts.names?.[0] ?? "",
94
+ "-d",
95
+ "."
96
+ ] : [
91
97
  "webapi",
92
98
  "-d",
93
99
  "."
94
100
  ];
101
+ if (!opts.add) {
102
+ for (const name of opts.names ?? []){
103
+ commandArgs.push("--name", name);
104
+ }
105
+ }
95
106
  if (opts.databaseProvider != null) {
96
107
  commandArgs.push("--database", opts.databaseProvider);
97
108
  }
@@ -132,4 +143,4 @@ const BUILDER_IMAGE = `${CREATE_IMAGE_REPOSITORY}:${CREATE_VERSION}`;
132
143
  process.exit(result.status ?? 0);
133
144
  }
134
145
 
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcnVubmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYywgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUsIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSwgQ1JFQVRFX1ZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFwaU9wdGlvbnMgfSBmcm9tIFwiLi93ZWJhcGkvY3JlYXRlLWFwaS5qc1wiO1xuXG5jb25zdCBCVUlMREVSX0lNQUdFID0gYCR7Q1JFQVRFX0lNQUdFX1JFUE9TSVRPUll9OiR7Q1JFQVRFX1ZFUlNJT059YDtcblxuLyoqXG4gKiBSdW4gdGhlIHNjYWZmb2xkIGluc2lkZSBhIHByZS1idWlsdCBEb2NrZXIgYnVpbGRlciBpbWFnZS5cbiAqXG4gKiBDYWxsZWQgd2hlbiBgREVDT0hFUkVfQlVJTERFUmAgaXMgbm90IHNldCDigJQgaS5lLiB0aGUgQ0xJIGlzIHJ1bm5pbmcgb24gdGhlXG4gKiBob3N0LCBvdXRzaWRlIHRoZSBjb250YWluZXIuIE1vdW50cyB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhcyBgL3dvcmtzcGFjZWAgc29cbiAqIHRoZSBzY2FmZm9sZGVkIGZpbGVzIGFyZSB3cml0dGVuIGJhY2sgdG8gdGhlIGhvc3QgZmlsZXN5c3RlbS5cbiAqXG4gKiBUaGUgY29udGFpbmVyIHJ1bnMgYXMgdGhlIGhvc3QgdWlkL2dpZCB3aGVuZXZlciBwb3NzaWJsZSBzbyBzY2FmZm9sZGVkIGZpbGVzXG4gKiBhcmUgbmV2ZXIgcm9vdC1vd25lZCAocG9zdC1ob2MgYGNob3duYCBpcyB1bnJlbGlhYmxlIGFjcm9zcyBEb2NrZXIgc2V0dXBzKS5cbiAqXG4gKiBIb3N0IGB+Ly5jb25maWcvYXV0aDBgIGlzIG1vdW50ZWQgd2hlbiBwcmVzZW50IHNvIHRoZSBBdXRoMCBDTEkgY2FuIHJldXNlXG4gKiBjcmVkZW50aWFscyAocmVxdWlyZWQgZm9yIFBvc3RtYW4gU1BBIC8gYXV0aDBDbGllbnRJZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5JbkJ1aWxkZXIob3B0czogQXBpT3B0aW9ucyk6IG5ldmVyIHtcblx0Y29uc3QgdGFyZ2V0RGlyID0gcmVzb2x2ZShvcHRzLmQgPz8gXCIuXCIpO1xuXHRjb25zdCBwcm9qZWN0TmFtZSA9IGJhc2VuYW1lKHRhcmdldERpcik7XG5cdG1rZGlyU3luYyh0YXJnZXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHQvLyBIb3N0LW93bmVkIHNvIGluaXRpYWxpemVDb21tYW5kIGNhbiBhbHdheXMgd3JpdGUgaGVyZSBldmVuIGlmIHNvbWV0aGluZ1xuXHQvLyBlbHNlIGluIC5kZXZjb250YWluZXIgZW5kcyB1cCBvZGRseSBvd25lZC5cblx0bWtkaXJTeW5jKHJlc29sdmUodGFyZ2V0RGlyLCBcIi5kZXZjb250YWluZXJcIiwgXCJucG0tYXV0aFwiKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0Ly8gRW5zdXJlIERvY2tlciBpcyBhdmFpbGFibGUuXG5cdHRyeSB7XG5cdFx0ZXhlY0ZpbGVTeW5jKFwiZG9ja2VyXCIsIFtcImluZm9cIl0sIHsgc3RkaW86IFwicGlwZVwiIH0pO1xuXHR9IGNhdGNoIHtcblx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XCJcXG4gIERvY2tlciBpcyByZXF1aXJlZCB0byBzY2FmZm9sZCBhIERlY29oZXJlIHByb2plY3QuXFxuXCIgK1xuXHRcdFx0XHRcIiAgSW5zdGFsbCBEb2NrZXIgRGVza3RvcDogaHR0cHM6Ly93d3cuZG9ja2VyLmNvbS9wcm9kdWN0cy9kb2NrZXItZGVza3RvcFxcblwiLFxuXHRcdCk7XG5cdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHR9XG5cblx0Y29uc3QgaG9zdFVpZCA9IHByb2Nlc3MuZ2V0dWlkPy4oKTtcblx0Y29uc3QgaG9zdEdpZCA9IHByb2Nlc3MuZ2V0Z2lkPy4oKSA/PyBob3N0VWlkO1xuXHRjb25zdCBydW5Bc0hvc3RVc2VyID0gaG9zdFVpZCAhPSBudWxsICYmIGhvc3RHaWQgIT0gbnVsbDtcblxuXHQvLyBBbm9ueW1vdXMgcm9vdC1vd25lZCB2b2x1bWVzIGFyZSBub3Qgd3JpdGFibGUgd2hlbiB3ZSBkcm9wIHByaXZpbGVnZXMuXG5cdGNvbnN0IG5wbUNhY2hlRGlyID0gcmVzb2x2ZShob21lZGlyKCksIFwiLmNhY2hlL2RlY29oZXJlLWNyZWF0ZS9ucG1cIik7XG5cdG1rZGlyU3luYyhucG1DYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0Ly8gSXNvbGF0ZWQgSE9NRSBzbyAtLXVzZXIgaG9zdC11aWQgY2FuIHdyaXRlIHdpdGhvdXQgYSBtYXRjaGluZyAvZXRjL3Bhc3N3ZCBlbnRyeS5cblx0Y29uc3QgYnVpbGRlckhvbWUgPSBcIi90bXAvZGVjb2hlcmUtY3JlYXRlLWhvbWVcIjtcblxuXHRjb25zdCB2b2x1bWVzOiBzdHJpbmdbXSA9IFtcblx0XHRcIi12XCIsXG5cdFx0YCR7dGFyZ2V0RGlyfTovd29ya3NwYWNlYCxcblx0XHRcIi12XCIsXG5cdFx0YCR7bnBtQ2FjaGVEaXJ9Oi9ucG0tY2FjaGVgLFxuXHRdO1xuXG5cdGNvbnN0IGVudkFyZ3M6IHN0cmluZ1tdID0gW1xuXHRcdFwiLWVcIixcblx0XHRcIkRFQ09IRVJFX0JVSUxERVI9MVwiLFxuXHRcdC8vIEhvc3QgZGlyIGJhc2VuYW1lIOKAlCBjb250YWluZXIgY3dkIGlzIC93b3Jrc3BhY2Ugc28gYmFzZW5hbWUgd291bGQgYmUgd3JvbmcuXG5cdFx0XCItZVwiLFxuXHRcdGBERUNPSEVSRV9QUk9KRUNUX05BTUU9JHtwcm9qZWN0TmFtZX1gLFxuXHRcdFwiLWVcIixcblx0XHRcIk5QTV9DT05GSUdfQ0FDSEU9L25wbS1jYWNoZVwiLFxuXHRcdFwiLWVcIixcblx0XHRcIk5QTV9DT05GSUdfUFJFRkVSX09GRkxJTkU9dHJ1ZVwiLFxuXHRcdFwiLWVcIixcblx0XHRgSE9NRT0ke2J1aWxkZXJIb21lfWAsXG5cdF07XG5cblx0Ly8gTW91bnQgaG9zdCAubnBtcmMgd2hlcmUgdGhlIG5vbi1yb290IHByb2Nlc3MgY2FuIHJlYWQgaXQuXG5cdGNvbnN0IG5wbXJjUGF0aCA9IHJlc29sdmUoaG9tZWRpcigpLCBcIi5ucG1yY1wiKTtcblx0aWYgKGV4aXN0c1N5bmMobnBtcmNQYXRoKSkge1xuXHRcdHZvbHVtZXMucHVzaChcIi12XCIsIGAke25wbXJjUGF0aH06L3RtcC9ob3N0LW5wbXJjOnJvYCk7XG5cdFx0ZW52QXJncy5wdXNoKFwiLWVcIiwgXCJOUE1fQ09ORklHX1VTRVJDT05GSUc9L3RtcC9ob3N0LW5wbXJjXCIpO1xuXHR9XG5cblx0Ly8gQXV0aDAgQ0xJIHJlYWRzIGNyZWRlbnRpYWxzIGZyb20gJEhPTUUvLmNvbmZpZy9hdXRoMCDigJQgd2l0aG91dCB0aGlzIG1vdW50LFxuXHQvLyBlbnN1cmVTcGFBcHAgZmFpbHMgYW5kIFBvc3RtYW4gZ2V0cyBhbiBlbXB0eSBhdXRoMENsaWVudElkLlxuXHRjb25zdCBhdXRoMENvbmZpZ0RpciA9IHJlc29sdmUoaG9tZWRpcigpLCBcIi5jb25maWcvYXV0aDBcIik7XG5cdGlmIChleGlzdHNTeW5jKGF1dGgwQ29uZmlnRGlyKSkge1xuXHRcdHZvbHVtZXMucHVzaChcIi12XCIsIGAke2F1dGgwQ29uZmlnRGlyfToke2J1aWxkZXJIb21lfS8uY29uZmlnL2F1dGgwYCk7XG5cdH1cblxuXHRjb25zdCB1c2VyQXJnczogc3RyaW5nW10gPSBbXTtcblx0aWYgKHJ1bkFzSG9zdFVzZXIpIHtcblx0XHR1c2VyQXJncy5wdXNoKFwiLS11c2VyXCIsIGAke2hvc3RVaWR9OiR7aG9zdEdpZH1gKTtcblx0fSBlbHNlIGlmIChob3N0VWlkICE9IG51bGwpIHtcblx0XHQvLyBGYWxsYmFjayBmb3IgZW52aXJvbm1lbnRzIHdpdGhvdXQgZ2V0Z2lkOiBrZWVwIGxlZ2FjeSBjaG93biBwYXRoLlxuXHRcdGVudkFyZ3MucHVzaChcIi1lXCIsIGBIT1NUX1VJRD0ke2hvc3RVaWR9YCk7XG5cdFx0aWYgKGhvc3RHaWQgIT0gbnVsbCkgZW52QXJncy5wdXNoKFwiLWVcIiwgYEhPU1RfR0lEPSR7aG9zdEdpZH1gKTtcblx0fVxuXG5cdGNvbnN0IGNvbW1hbmRBcmdzOiBzdHJpbmdbXSA9IFtcIndlYmFwaVwiLCBcIi1kXCIsIFwiLlwiXTtcblx0aWYgKG9wdHMuZGF0YWJhc2VQcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tZGF0YWJhc2VcIiwgb3B0cy5kYXRhYmFzZVByb3ZpZGVyKTtcblx0fVxuXHRpZiAob3B0cy5hdXRoUHJvdmlkZXIgIT0gbnVsbCkge1xuXHRcdGNvbW1hbmRBcmdzLnB1c2goXCItLWF1dGhcIiwgb3B0cy5hdXRoUHJvdmlkZXIpO1xuXHR9XG5cdGlmIChvcHRzLnBvc3RtYW5Qcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tcG9zdG1hblwiLCBvcHRzLnBvc3RtYW5Qcm92aWRlcik7XG5cdH1cblx0aWYgKG9wdHMuaW5zdGFsbERlcGVuZGVuY2llcyAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0taW5zdGFsbFwiLCBvcHRzLmluc3RhbGxEZXBlbmRlbmNpZXMpO1xuXHR9XG5cblx0Y29uc29sZS5sb2coXCIgIFJ1bm5pbmcgc2NhZmZvbGRpbmcgaW4gYSBzYW5kYm94ZWQgY29udGFpbmVyLi4uXFxuXCIpO1xuXG5cdC8vIE9ubHkgYWxsb2NhdGUgYSBUVFkgd2hlbiBzdGRpbiBpcyBpdHNlbGYgYSBUVFkg4oCUIGF2b2lkcyBhIGh1bmcgcHJvY2Vzc1xuXHQvLyBpbiBub24taW50ZXJhY3RpdmUgZW52aXJvbm1lbnRzIChwaXBlcywgQ0ksIHNjcmlwdHMpLlxuXHRjb25zdCB0dHlGbGFncyA9IHByb2Nlc3Muc3RkaW4uaXNUVFkgPyBbXCItaXRcIl0gOiBbXCItaVwiXTtcblxuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXG5cdFx0XCJkb2NrZXJcIixcblx0XHRbXG5cdFx0XHRcInJ1blwiLFxuXHRcdFx0XCItLXJtXCIsXG5cdFx0XHQuLi50dHlGbGFncyxcblx0XHRcdC4uLnVzZXJBcmdzLFxuXHRcdFx0Li4udm9sdW1lcyxcblx0XHRcdC4uLmVudkFyZ3MsXG5cdFx0XHRcIi13XCIsXG5cdFx0XHRcIi93b3Jrc3BhY2VcIixcblx0XHRcdEJVSUxERVJfSU1BR0UsXG5cdFx0XHQuLi5jb21tYW5kQXJncyxcblx0XHRdLFxuXHRcdHsgc3RkaW86IFwiaW5oZXJpdFwiIH0sXG5cdCk7XG5cblx0aWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcblx0XHRjb25zb2xlLmxvZyhgXFxuICBTY2FmZm9sZCBjb21wbGV0ZSFcXG5cXG4gIE9wZW4geW91ciBwcm9qZWN0OlxcblxcbiAgICBjb2RlICR7dGFyZ2V0RGlyfVxcbmApO1xuXHR9XG5cblx0cHJvY2Vzcy5leGl0KHJlc3VsdC5zdGF0dXMgPz8gMCk7XG59XG4iXSwibmFtZXMiOlsiZXhlY0ZpbGVTeW5jIiwic3Bhd25TeW5jIiwiZXhpc3RzU3luYyIsIm1rZGlyU3luYyIsImhvbWVkaXIiLCJiYXNlbmFtZSIsInJlc29sdmUiLCJDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSIsIkNSRUFURV9WRVJTSU9OIiwiQlVJTERFUl9JTUFHRSIsInJ1bkluQnVpbGRlciIsIm9wdHMiLCJ0YXJnZXREaXIiLCJkIiwicHJvamVjdE5hbWUiLCJyZWN1cnNpdmUiLCJzdGRpbyIsImNvbnNvbGUiLCJlcnJvciIsInByb2Nlc3MiLCJleGl0IiwiaG9zdFVpZCIsImdldHVpZCIsImhvc3RHaWQiLCJnZXRnaWQiLCJydW5Bc0hvc3RVc2VyIiwibnBtQ2FjaGVEaXIiLCJidWlsZGVySG9tZSIsInZvbHVtZXMiLCJlbnZBcmdzIiwibnBtcmNQYXRoIiwicHVzaCIsImF1dGgwQ29uZmlnRGlyIiwidXNlckFyZ3MiLCJjb21tYW5kQXJncyIsImRhdGFiYXNlUHJvdmlkZXIiLCJhdXRoUHJvdmlkZXIiLCJwb3N0bWFuUHJvdmlkZXIiLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwibG9nIiwidHR5RmxhZ3MiLCJzdGRpbiIsImlzVFRZIiwicmVzdWx0Iiwic3RhdHVzIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxZQUFZLEVBQUVDLFNBQVMsUUFBUSxxQkFBcUI7QUFDN0QsU0FBU0MsVUFBVSxFQUFFQyxTQUFTLFFBQVEsVUFBVTtBQUNoRCxTQUFTQyxPQUFPLFFBQVEsVUFBVTtBQUNsQyxTQUFTQyxRQUFRLEVBQUVDLE9BQU8sUUFBUSxZQUFZO0FBQzlDLFNBQVNDLHVCQUF1QixFQUFFQyxjQUFjLFFBQVEsZUFBZTtBQUd2RSxNQUFNQyxnQkFBZ0IsR0FBR0Ysd0JBQXdCLENBQUMsRUFBRUMsZ0JBQWdCO0FBRXBFOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBU0UsYUFBYUMsSUFBZ0I7SUFDNUMsTUFBTUMsWUFBWU4sUUFBUUssS0FBS0UsQ0FBQyxJQUFJO0lBQ3BDLE1BQU1DLGNBQWNULFNBQVNPO0lBQzdCVCxVQUFVUyxXQUFXO1FBQUVHLFdBQVc7SUFBSztJQUN2QywwRUFBMEU7SUFDMUUsNkNBQTZDO0lBQzdDWixVQUFVRyxRQUFRTSxXQUFXLGlCQUFpQixhQUFhO1FBQUVHLFdBQVc7SUFBSztJQUU3RSw4QkFBOEI7SUFDOUIsSUFBSTtRQUNIZixhQUFhLFVBQVU7WUFBQztTQUFPLEVBQUU7WUFBRWdCLE9BQU87UUFBTztJQUNsRCxFQUFFLE9BQU07UUFDUEMsUUFBUUMsS0FBSyxDQUNaLDZEQUNDO1FBRUZDLFFBQVFDLElBQUksQ0FBQztJQUNkO0lBRUEsTUFBTUMsVUFBVUYsUUFBUUcsTUFBTTtJQUM5QixNQUFNQyxVQUFV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
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcnVubmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYywgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUsIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSwgQ1JFQVRFX1ZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFwaU9wdGlvbnMgfSBmcm9tIFwiLi93ZWJhcGkvY3JlYXRlLWFwaS5qc1wiO1xuXG5jb25zdCBCVUlMREVSX0lNQUdFID0gYCR7Q1JFQVRFX0lNQUdFX1JFUE9TSVRPUll9OiR7Q1JFQVRFX1ZFUlNJT059YDtcblxuLyoqXG4gKiBSdW4gdGhlIHNjYWZmb2xkIGluc2lkZSBhIHByZS1idWlsdCBEb2NrZXIgYnVpbGRlciBpbWFnZS5cbiAqXG4gKiBDYWxsZWQgd2hlbiBgREVDT0hFUkVfQlVJTERFUmAgaXMgbm90IHNldCDigJQgaS5lLiB0aGUgQ0xJIGlzIHJ1bm5pbmcgb24gdGhlXG4gKiBob3N0LCBvdXRzaWRlIHRoZSBjb250YWluZXIuIE1vdW50cyB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhcyBgL3dvcmtzcGFjZWAgc29cbiAqIHRoZSBzY2FmZm9sZGVkIGZpbGVzIGFyZSB3cml0dGVuIGJhY2sgdG8gdGhlIGhvc3QgZmlsZXN5c3RlbS5cbiAqXG4gKiBUaGUgY29udGFpbmVyIHJ1bnMgYXMgdGhlIGhvc3QgdWlkL2dpZCB3aGVuZXZlciBwb3NzaWJsZSBzbyBzY2FmZm9sZGVkIGZpbGVzXG4gKiBhcmUgbmV2ZXIgcm9vdC1vd25lZCAocG9zdC1ob2MgYGNob3duYCBpcyB1bnJlbGlhYmxlIGFjcm9zcyBEb2NrZXIgc2V0dXBzKS5cbiAqXG4gKiBIb3N0IGB+Ly5jb25maWcvYXV0aDBgIGlzIG1vdW50ZWQgd2hlbiBwcmVzZW50IHNvIHRoZSBBdXRoMCBDTEkgY2FuIHJldXNlXG4gKiBjcmVkZW50aWFscyAocmVxdWlyZWQgZm9yIFBvc3RtYW4gU1BBIC8gYXV0aDBDbGllbnRJZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5JbkJ1aWxkZXIob3B0czogQXBpT3B0aW9ucyk6IG5ldmVyIHtcblx0Y29uc3QgdGFyZ2V0RGlyID0gcmVzb2x2ZShvcHRzLmQgPz8gXCIuXCIpO1xuXHRjb25zdCBwcm9qZWN0TmFtZSA9IGJhc2VuYW1lKHRhcmdldERpcik7XG5cdG1rZGlyU3luYyh0YXJnZXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHQvLyBIb3N0LW93bmVkIHNvIGluaXRpYWxpemVDb21tYW5kIGNhbiBhbHdheXMgd3JpdGUgaGVyZSBldmVuIGlmIHNvbWV0aGluZ1xuXHQvLyBlbHNlIGluIC5kZXZjb250YWluZXIgZW5kcyB1cCBvZGRseSBvd25lZC5cblx0bWtkaXJTeW5jKHJlc29sdmUodGFyZ2V0RGlyLCBcIi5kZXZjb250YWluZXJcIiwgXCJucG0tYXV0aFwiKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0Ly8gRW5zdXJlIERvY2tlciBpcyBhdmFpbGFibGUuXG5cdHRyeSB7XG5cdFx0ZXhlY0ZpbGVTeW5jKFwiZG9ja2VyXCIsIFtcImluZm9cIl0sIHsgc3RkaW86IFwicGlwZVwiIH0pO1xuXHR9IGNhdGNoIHtcblx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XCJcXG4gIERvY2tlciBpcyByZXF1aXJlZCB0byBzY2FmZm9sZCBhIERlY29oZXJlIHByb2plY3QuXFxuXCIgK1xuXHRcdFx0XHRcIiAgSW5zdGFsbCBEb2NrZXIgRGVza3RvcDogaHR0cHM6Ly93d3cuZG9ja2VyLmNvbS9wcm9kdWN0cy9kb2NrZXItZGVza3RvcFxcblwiLFxuXHRcdCk7XG5cdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHR9XG5cblx0Y29uc3QgaG9zdFVpZCA9IHByb2Nlc3MuZ2V0dWlkPy4oKTtcblx0Y29uc3QgaG9zdEdpZCA9IHByb2Nlc3MuZ2V0Z2lkPy4oKSA/PyBob3N0VWlkO1xuXHRjb25zdCBydW5Bc0hvc3RVc2VyID0gaG9zdFVpZCAhPSBudWxsICYmIGhvc3RHaWQgIT0gbnVsbDtcblxuXHQvLyBBbm9ueW1vdXMgcm9vdC1vd25lZCB2b2x1bWVzIGFyZSBub3Qgd3JpdGFibGUgd2hlbiB3ZSBkcm9wIHByaXZpbGVnZXMuXG5cdGNvbnN0IG5wbUNhY2hlRGlyID0gcmVzb2x2ZShob21lZGlyKCksIFwiLmNhY2hlL2RlY29oZXJlLWNyZWF0ZS9ucG1cIik7XG5cdG1rZGlyU3luYyhucG1DYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0Ly8gSXNvbGF0ZWQgSE9NRSBzbyAtLXVzZXIgaG9zdC11aWQgY2FuIHdyaXRlIHdpdGhvdXQgYSBtYXRjaGluZyAvZXRjL3Bhc3N3ZCBlbnRyeS5cblx0Y29uc3QgYnVpbGRlckhvbWUgPSBcIi90bXAvZGVjb2hlcmUtY3JlYXRlLWhvbWVcIjtcblxuXHRjb25zdCB2b2x1bWVzOiBzdHJpbmdbXSA9IFtcblx0XHRcIi12XCIsXG5cdFx0YCR7dGFyZ2V0RGlyfTovd29ya3NwYWNlYCxcblx0XHRcIi12XCIsXG5cdFx0YCR7bnBtQ2FjaGVEaXJ9Oi9ucG0tY2FjaGVgLFxuXHRdO1xuXG5cdGNvbnN0IGVudkFyZ3M6IHN0cmluZ1tdID0gW1xuXHRcdFwiLWVcIixcblx0XHRcIkRFQ09IRVJFX0JVSUxERVI9MVwiLFxuXHRcdC8vIEhvc3QgZGlyIGJhc2VuYW1lIOKAlCBjb250YWluZXIgY3dkIGlzIC93b3Jrc3BhY2Ugc28gYmFzZW5hbWUgd291bGQgYmUgd3JvbmcuXG5cdFx0XCItZVwiLFxuXHRcdGBERUNPSEVSRV9QUk9KRUNUX05BTUU9JHtwcm9qZWN0TmFtZX1gLFxuXHRcdFwiLWVcIixcblx0XHRcIk5QTV9DT05GSUdfQ0FDSEU9L25wbS1jYWNoZVwiLFxuXHRcdFwiLWVcIixcblx0XHRcIk5QTV9DT05GSUdfUFJFRkVSX09GRkxJTkU9dHJ1ZVwiLFxuXHRcdFwiLWVcIixcblx0XHRgSE9NRT0ke2J1aWxkZXJIb21lfWAsXG5cdF07XG5cblx0Ly8gTW91bnQgaG9zdCAubnBtcmMgd2hlcmUgdGhlIG5vbi1yb290IHByb2Nlc3MgY2FuIHJlYWQgaXQuXG5cdGNvbnN0IG5wbXJjUGF0aCA9IHJlc29sdmUoaG9tZWRpcigpLCBcIi5ucG1yY1wiKTtcblx0aWYgKGV4aXN0c1N5bmMobnBtcmNQYXRoKSkge1xuXHRcdHZvbHVtZXMucHVzaChcIi12XCIsIGAke25wbXJjUGF0aH06L3RtcC9ob3N0LW5wbXJjOnJvYCk7XG5cdFx0ZW52QXJncy5wdXNoKFwiLWVcIiwgXCJOUE1fQ09ORklHX1VTRVJDT05GSUc9L3RtcC9ob3N0LW5wbXJjXCIpO1xuXHR9XG5cblx0Ly8gQXV0aDAgQ0xJIHJlYWRzIGNyZWRlbnRpYWxzIGZyb20gJEhPTUUvLmNvbmZpZy9hdXRoMCDigJQgd2l0aG91dCB0aGlzIG1vdW50LFxuXHQvLyBlbnN1cmVTcGFBcHAgZmFpbHMgYW5kIFBvc3RtYW4gZ2V0cyBhbiBlbXB0eSBhdXRoMENsaWVudElkLlxuXHRjb25zdCBhdXRoMENvbmZpZ0RpciA9IHJlc29sdmUoaG9tZWRpcigpLCBcIi5jb25maWcvYXV0aDBcIik7XG5cdGlmIChleGlzdHNTeW5jKGF1dGgwQ29uZmlnRGlyKSkge1xuXHRcdHZvbHVtZXMucHVzaChcIi12XCIsIGAke2F1dGgwQ29uZmlnRGlyfToke2J1aWxkZXJIb21lfS8uY29uZmlnL2F1dGgwYCk7XG5cdH1cblxuXHRjb25zdCB1c2VyQXJnczogc3RyaW5nW10gPSBbXTtcblx0aWYgKHJ1bkFzSG9zdFVzZXIpIHtcblx0XHR1c2VyQXJncy5wdXNoKFwiLS11c2VyXCIsIGAke2hvc3RVaWR9OiR7aG9zdEdpZH1gKTtcblx0fSBlbHNlIGlmIChob3N0VWlkICE9IG51bGwpIHtcblx0XHQvLyBGYWxsYmFjayBmb3IgZW52aXJvbm1lbnRzIHdpdGhvdXQgZ2V0Z2lkOiBrZWVwIGxlZ2FjeSBjaG93biBwYXRoLlxuXHRcdGVudkFyZ3MucHVzaChcIi1lXCIsIGBIT1NUX1VJRD0ke2hvc3RVaWR9YCk7XG5cdFx0aWYgKGhvc3RHaWQgIT0gbnVsbCkgZW52QXJncy5wdXNoKFwiLWVcIiwgYEhPU1RfR0lEPSR7aG9zdEdpZH1gKTtcblx0fVxuXG5cdGNvbnN0IGNvbW1hbmRBcmdzOiBzdHJpbmdbXSA9IG9wdHMuYWRkXG5cdFx0PyBbXCJ3ZWJhcGlcIiwgXCJhZGRcIiwgb3B0cy5uYW1lcz8uWzBdID8/IFwiXCIsIFwiLWRcIiwgXCIuXCJdXG5cdFx0OiBbXCJ3ZWJhcGlcIiwgXCItZFwiLCBcIi5cIl07XG5cdGlmICghb3B0cy5hZGQpIHtcblx0XHRmb3IgKGNvbnN0IG5hbWUgb2Ygb3B0cy5uYW1lcyA/PyBbXSkge1xuXHRcdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tbmFtZVwiLCBuYW1lKTtcblx0XHR9XG5cdH1cblx0aWYgKG9wdHMuZGF0YWJhc2VQcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tZGF0YWJhc2VcIiwgb3B0cy5kYXRhYmFzZVByb3ZpZGVyKTtcblx0fVxuXHRpZiAob3B0cy5hdXRoUHJvdmlkZXIgIT0gbnVsbCkge1xuXHRcdGNvbW1hbmRBcmdzLnB1c2goXCItLWF1dGhcIiwgb3B0cy5hdXRoUHJvdmlkZXIpO1xuXHR9XG5cdGlmIChvcHRzLnBvc3RtYW5Qcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tcG9zdG1hblwiLCBvcHRzLnBvc3RtYW5Qcm92aWRlcik7XG5cdH1cblx0aWYgKG9wdHMuaW5zdGFsbERlcGVuZGVuY2llcyAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0taW5zdGFsbFwiLCBvcHRzLmluc3RhbGxEZXBlbmRlbmNpZXMpO1xuXHR9XG5cblx0Y29uc29sZS5sb2coXCIgIFJ1bm5pbmcgc2NhZmZvbGRpbmcgaW4gYSBzYW5kYm94ZWQgY29udGFpbmVyLi4uXFxuXCIpO1xuXG5cdC8vIE9ubHkgYWxsb2NhdGUgYSBUVFkgd2hlbiBzdGRpbiBpcyBpdHNlbGYgYSBUVFkg4oCUIGF2b2lkcyBhIGh1bmcgcHJvY2Vzc1xuXHQvLyBpbiBub24taW50ZXJhY3RpdmUgZW52aXJvbm1lbnRzIChwaXBlcywgQ0ksIHNjcmlwdHMpLlxuXHRjb25zdCB0dHlGbGFncyA9IHByb2Nlc3Muc3RkaW4uaXNUVFkgPyBbXCItaXRcIl0gOiBbXCItaVwiXTtcblxuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXG5cdFx0XCJkb2NrZXJcIixcblx0XHRbXG5cdFx0XHRcInJ1blwiLFxuXHRcdFx0XCItLXJtXCIsXG5cdFx0XHQuLi50dHlGbGFncyxcblx0XHRcdC4uLnVzZXJBcmdzLFxuXHRcdFx0Li4udm9sdW1lcyxcblx0XHRcdC4uLmVudkFyZ3MsXG5cdFx0XHRcIi13XCIsXG5cdFx0XHRcIi93b3Jrc3BhY2VcIixcblx0XHRcdEJVSUxERVJfSU1BR0UsXG5cdFx0XHQuLi5jb21tYW5kQXJncyxcblx0XHRdLFxuXHRcdHsgc3RkaW86IFwiaW5oZXJpdFwiIH0sXG5cdCk7XG5cblx0aWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcblx0XHRjb25zb2xlLmxvZyhgXFxuICBTY2FmZm9sZCBjb21wbGV0ZSFcXG5cXG4gIE9wZW4geW91ciBwcm9qZWN0OlxcblxcbiAgICBjb2RlICR7dGFyZ2V0RGlyfVxcbmApO1xuXHR9XG5cblx0cHJvY2Vzcy5leGl0KHJlc3VsdC5zdGF0dXMgPz8gMCk7XG59XG4iXSwibmFtZXMiOlsiZXhlY0ZpbGVTeW5jIiwic3Bhd25TeW5jIiwiZXhpc3RzU3luYyIsIm1rZGlyU3luYyIsImhvbWVkaXIiLCJiYXNlbmFtZSIsInJlc29sdmUiLCJDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSIsIkNSRUFURV9WRVJTSU9OIiwiQlVJTERFUl9JTUFHRSIsInJ1bkluQnVpbGRlciIsIm9wdHMiLCJ0YXJnZXREaXIiLCJkIiwicHJvamVjdE5hbWUiLCJyZWN1cnNpdmUiLCJzdGRpbyIsImNvbnNvbGUiLCJlcnJvciIsInByb2Nlc3MiLCJleGl0IiwiaG9zdFVpZCIsImdldHVpZCIsImhvc3RHaWQiLCJnZXRnaWQiLCJydW5Bc0hvc3RVc2VyIiwibnBtQ2FjaGVEaXIiLCJidWlsZGVySG9tZSIsInZvbHVtZXMiLCJlbnZBcmdzIiwibnBtcmNQYXRoIiwicHVzaCIsImF1dGgwQ29uZmlnRGlyIiwidXNlckFyZ3MiLCJjb21tYW5kQXJncyIsImFkZCIsIm5hbWVzIiwibmFtZSIsImRhdGFiYXNlUHJvdmlkZXIiLCJhdXRoUHJvdmlkZXIiLCJwb3N0bWFuUHJvdmlkZXIiLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwibG9nIiwidHR5RmxhZ3MiLCJzdGRpbiIsImlzVFRZIiwicmVzdWx0Iiwic3RhdHVzIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxZQUFZLEVBQUVDLFNBQVMsUUFBUSxxQkFBcUI7QUFDN0QsU0FBU0MsVUFBVSxFQUFFQyxTQUFTLFFBQVEsVUFBVTtBQUNoRCxTQUFTQyxPQUFPLFFBQVEsVUFBVTtBQUNsQyxTQUFTQyxRQUFRLEVBQUVDLE9BQU8sUUFBUSxZQUFZO0FBQzlDLFNBQVNDLHVCQUF1QixFQUFFQyxjQUFjLFFBQVEsZUFBZTtBQUd2RSxNQUFNQyxnQkFBZ0IsR0FBR0Ysd0JBQXdCLENBQUMsRUFBRUMsZ0JBQWdCO0FBRXBFOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBU0UsYUFBYUMsSUFBZ0I7SUFDNUMsTUFBTUMsWUFBWU4sUUFBUUssS0FBS0UsQ0FBQyxJQUFJO0lBQ3BDLE1BQU1DLGNBQWNULFNBQVNPO0lBQzdCVCxVQUFVUyxXQUFXO1FBQUVHLFdBQVc7SUFBSztJQUN2QywwRUFBMEU7SUFDMUUsNkNBQTZDO0lBQzdDWixVQUFVRyxR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
@@ -0,0 +1,59 @@
1
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { DEFAULT_WEBAPI_NAME } from "./const.js";
4
+ /** Lowercase npm-safe directory slug: `billing`, `admin-api`. */ export const API_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;
5
+ export class CreateCliError extends Error {
6
+ constructor(message){
7
+ super(message);
8
+ this.name = "CreateCliError";
9
+ }
10
+ }
11
+ export function assertValidApiName(name) {
12
+ if (!API_NAME_PATTERN.test(name)) {
13
+ throw new CreateCliError(`Invalid API name "${name}". Use a lowercase slug starting with a letter, then letters, digits, or hyphens (e.g. billing).`);
14
+ }
15
+ }
16
+ /** Default `["api"]` when the caller omitted `--name`. Rejects duplicates and invalid slugs. */ export function parseApiNames(raw) {
17
+ const names = raw != null && raw.length > 0 ? [
18
+ ...raw
19
+ ] : [
20
+ DEFAULT_WEBAPI_NAME
21
+ ];
22
+ const seen = new Set();
23
+ for (const name of names){
24
+ assertValidApiName(name);
25
+ if (seen.has(name)) {
26
+ throw new CreateCliError(`Duplicate API name "${name}".`);
27
+ }
28
+ seen.add(name);
29
+ }
30
+ return names;
31
+ }
32
+ export function isDecohereWorkspace(dir) {
33
+ try {
34
+ const pkg = JSON.parse(readFileSync(join(dir, "package.json"), "utf8"));
35
+ const build = pkg.scripts?.build;
36
+ return typeof build === "string" && build.includes("forge");
37
+ } catch {
38
+ return false;
39
+ }
40
+ }
41
+ /** Directory names under `projects/` that already have a `package.json`. */ export function listExistingApiNames(dir) {
42
+ const projectsDir = join(dir, "projects");
43
+ try {
44
+ return readdirSync(projectsDir, {
45
+ withFileTypes: true
46
+ }).filter((entry)=>entry.isDirectory() && existsSync(join(projectsDir, entry.name, "package.json"))).map((entry)=>entry.name).sort();
47
+ } catch {
48
+ return [];
49
+ }
50
+ }
51
+ /** `billing` → `BILLING`, `admin-api` → `ADMIN_API` — prefix for `{PREFIX}_DB_HOST`. */ export function apiEnvPrefix(apiName) {
52
+ return apiName.replace(/-/g, "_").toUpperCase();
53
+ }
54
+ export function apiNameFromProjectDir(dir) {
55
+ const slash = dir.lastIndexOf("/");
56
+ return slash >= 0 ? dir.slice(slash + 1) : dir;
57
+ }
58
+
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2FwaS1uYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRkaXJTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IERFRkFVTFRfV0VCQVBJX05BTUUgfSBmcm9tIFwiLi9jb25zdC5qc1wiO1xuXG4vKiogTG93ZXJjYXNlIG5wbS1zYWZlIGRpcmVjdG9yeSBzbHVnOiBgYmlsbGluZ2AsIGBhZG1pbi1hcGlgLiAqL1xuZXhwb3J0IGNvbnN0IEFQSV9OQU1FX1BBVFRFUk4gPSAvXlthLXpdW2EtejAtOS1dKiQvO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlQ2xpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzLm5hbWUgPSBcIkNyZWF0ZUNsaUVycm9yXCI7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFZhbGlkQXBpTmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcblx0aWYgKCFBUElfTkFNRV9QQVRURVJOLnRlc3QobmFtZSkpIHtcblx0XHR0aHJvdyBuZXcgQ3JlYXRlQ2xpRXJyb3IoXG5cdFx0XHRgSW52YWxpZCBBUEkgbmFtZSBcIiR7bmFtZX1cIi4gVXNlIGEgbG93ZXJjYXNlIHNsdWcgc3RhcnRpbmcgd2l0aCBhIGxldHRlciwgdGhlbiBsZXR0ZXJzLCBkaWdpdHMsIG9yIGh5cGhlbnMgKGUuZy4gYmlsbGluZykuYCxcblx0XHQpO1xuXHR9XG59XG5cbi8qKiBEZWZhdWx0IGBbXCJhcGlcIl1gIHdoZW4gdGhlIGNhbGxlciBvbWl0dGVkIGAtLW5hbWVgLiBSZWplY3RzIGR1cGxpY2F0ZXMgYW5kIGludmFsaWQgc2x1Z3MuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcGlOYW1lcyhyYXc6IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuXHRjb25zdCBuYW1lcyA9IHJhdyAhPSBudWxsICYmIHJhdy5sZW5ndGggPiAwID8gWy4uLnJhd10gOiBbREVGQVVMVF9XRUJBUElfTkFNRV07XG5cdGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Zm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG5cdFx0YXNzZXJ0VmFsaWRBcGlOYW1lKG5hbWUpO1xuXHRcdGlmIChzZWVuLmhhcyhuYW1lKSkge1xuXHRcdFx0dGhyb3cgbmV3IENyZWF0ZUNsaUVycm9yKGBEdXBsaWNhdGUgQVBJIG5hbWUgXCIke25hbWV9XCIuYCk7XG5cdFx0fVxuXHRcdHNlZW4uYWRkKG5hbWUpO1xuXHR9XG5cdHJldHVybiBuYW1lcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVjb2hlcmVXb3Jrc3BhY2UoZGlyOiBzdHJpbmcpOiBib29sZWFuIHtcblx0dHJ5IHtcblx0XHRjb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhqb2luKGRpciwgXCJwYWNrYWdlLmpzb25cIiksIFwidXRmOFwiKSkgYXMge1xuXHRcdFx0c2NyaXB0cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdFx0fTtcblx0XHRjb25zdCBidWlsZCA9IHBrZy5zY3JpcHRzPy5idWlsZDtcblx0XHRyZXR1cm4gdHlwZW9mIGJ1aWxkID09PSBcInN0cmluZ1wiICYmIGJ1aWxkLmluY2x1ZGVzKFwiZm9yZ2VcIik7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG4vKiogRGlyZWN0b3J5IG5hbWVzIHVuZGVyIGBwcm9qZWN0cy9gIHRoYXQgYWxyZWFkeSBoYXZlIGEgYHBhY2thZ2UuanNvbmAuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdEV4aXN0aW5nQXBpTmFtZXMoZGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdGNvbnN0IHByb2plY3RzRGlyID0gam9pbihkaXIsIFwicHJvamVjdHNcIik7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHJlYWRkaXJTeW5jKHByb2plY3RzRGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSlcblx0XHRcdC5maWx0ZXIoXG5cdFx0XHRcdChlbnRyeSkgPT5cblx0XHRcdFx0XHRlbnRyeS5pc0RpcmVjdG9yeSgpICYmIGV4aXN0c1N5bmMoam9pbihwcm9qZWN0c0RpciwgZW50cnkubmFtZSwgXCJwYWNrYWdlLmpzb25cIikpLFxuXHRcdFx0KVxuXHRcdFx0Lm1hcCgoZW50cnkpID0+IGVudHJ5Lm5hbWUpXG5cdFx0XHQuc29ydCgpO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuLyoqIGBiaWxsaW5nYCDihpIgYEJJTExJTkdgLCBgYWRtaW4tYXBpYCDihpIgYEFETUlOX0FQSWAg4oCUIHByZWZpeCBmb3IgYHtQUkVGSVh9X0RCX0hPU1RgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaUVudlByZWZpeChhcGlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gYXBpTmFtZS5yZXBsYWNlKC8tL2csIFwiX1wiKS50b1VwcGVyQ2FzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBpTmFtZUZyb21Qcm9qZWN0RGlyKGRpcjogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3Qgc2xhc2ggPSBkaXIubGFzdEluZGV4T2YoXCIvXCIpO1xuXHRyZXR1cm4gc2xhc2ggPj0gMCA/IGRpci5zbGljZShzbGFzaCArIDEpIDogZGlyO1xufVxuIl0sIm5hbWVzIjpbImV4aXN0c1N5bmMiLCJyZWFkZGlyU3luYyIsInJlYWRGaWxlU3luYyIsImpvaW4iLCJERUZBVUxUX1dFQkFQSV9OQU1FIiwiQVBJX05BTUVfUEFUVEVSTiIsIkNyZWF0ZUNsaUVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsImFzc2VydFZhbGlkQXBpTmFtZSIsInRlc3QiLCJwYXJzZUFwaU5hbWVzIiwicmF3IiwibmFtZXMiLCJsZW5ndGgiLCJzZWVuIiwiU2V0IiwiaGFzIiwiYWRkIiwiaXNEZWNvaGVyZVdvcmtzcGFjZSIsImRpciIsInBrZyIsIkpTT04iLCJwYXJzZSIsImJ1aWxkIiwic2NyaXB0cyIsImluY2x1ZGVzIiwibGlzdEV4aXN0aW5nQXBpTmFtZXMiLCJwcm9qZWN0c0RpciIsIndpdGhGaWxlVHlwZXMiLCJmaWx0ZXIiLCJlbnRyeSIsImlzRGlyZWN0b3J5IiwibWFwIiwic29ydCIsImFwaUVudlByZWZpeCIsImFwaU5hbWUiLCJyZXBsYWNlIiwidG9VcHBlckNhc2UiLCJhcGlOYW1lRnJvbVByb2plY3REaXIiLCJzbGFzaCIsImxhc3RJbmRleE9mIiwic2xpY2UiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFVBQVUsRUFBRUMsV0FBVyxFQUFFQyxZQUFZLFFBQVEsVUFBVTtBQUNoRSxTQUFTQyxJQUFJLFFBQVEsWUFBWTtBQUNqQyxTQUFTQyxtQkFBbUIsUUFBUSxhQUFhO0FBRWpELCtEQUErRCxHQUMvRCxPQUFPLE1BQU1DLG1CQUFtQixvQkFBb0I7QUFFcEQsT0FBTyxNQUFNQyx1QkFBdUJDO0lBQ25DLFlBQW1CQyxPQUFlLENBQUU7UUFDbkMsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ0MsSUFBSSxHQUFHO0lBQ2I7QUFDRDtBQUVBLE9BQU8sU0FBU0MsbUJBQW1CRCxJQUFZO0lBQzlDLElBQUksQ0FBQ0osaUJBQWlCTSxJQUFJLENBQUNGLE9BQU87UUFDakMsTUFBTSxJQUFJSCxlQUNULENBQUMsa0JBQWtCLEVBQUVHLEtBQUssZ0dBQWdHLENBQUM7SUFFN0g7QUFDRDtBQUVBLDhGQUE4RixHQUM5RixPQUFPLFNBQVNHLGNBQWNDLEdBQWtDO0lBQy9ELE1BQU1DLFFBQVFELE9BQU8sUUFBUUEsSUFBSUUsTUFBTSxHQUFHLElBQUk7V0FBSUY7S0FBSSxHQUFHO1FBQUNUO0tBQW9CO0lBQzlFLE1BQU1ZLE9BQU8sSUFBSUM7SUFDakIsS0FBSyxNQUFNUixRQUFRSyxNQUFPO1FBQ3pCSixtQkFBbUJEO1FBQ25CLElBQUlPLEtBQUtFLEdBQUcsQ0FBQ1QsT0FBTztZQUNuQixNQUFNLElBQUlILGVBQWUsQ0FBQyxvQkFBb0IsRUFBRUcsS0FBSyxFQUFFLENBQUM7UUFDekQ7UUFDQU8sS0FBS0csR0FBRyxDQUFDVjtJQUNWO0lBQ0EsT0FBT0s7QUFDUjtBQUVBLE9BQU8sU0FBU00sb0JBQW9CQyxHQUFXO0lBQzlDLElBQUk7UUFDSCxNQUFNQyxNQUFNQyxLQUFLQyxLQUFLLENBQUN0QixhQUFhQyxLQUFLa0IsS0FBSyxpQkFBaUI7UUFHL0QsTUFBTUksUUFBUUgsSUFBSUksT0FBTyxFQUFFRDtRQUMzQixPQUFPLE9BQU9BLFVBQVUsWUFBWUEsTUFBTUUsUUFBUSxDQUFDO0lBQ3BELEVBQUUsT0FBTTtRQUNQLE9BQU87SUFDUjtBQUNEO0FBRUEsMEVBQTBFLEdBQzFFLE9BQU8sU0FBU0MscUJBQXFCUCxHQUFXO0lBQy9DLE1BQU1RLGNBQWMxQixLQUFLa0IsS0FBSztJQUM5QixJQUFJO1FBQ0gsT0FBT3BCLFlBQVk0QixhQUFhO1lBQUVDLGVBQWU7UUFBSyxHQUNwREMsTUFBTSxDQUNOLENBQUNDLFFBQ0FBLE1BQU1DLFdBQVcsTUFBTWpDLFdBQVdHLEtBQUswQixhQUFhRyxNQUFNdkIsSUFBSSxFQUFFLGtCQUVqRXlCLEdBQUcsQ0FBQyxDQUFDRixRQUFVQSxNQUFNdkIsSUFBSSxFQUN6QjBCLElBQUk7SUFDUCxFQUFFLE9BQU07UUFDUCxPQUFPLEVBQUU7SUFDVjtBQUNEO0FBRUEsc0ZBQXNGLEdBQ3RGLE9BQU8sU0FBU0MsYUFBYUMsT0FBZTtJQUMzQyxPQUFPQSxRQUFRQyxPQUFPLENBQUMsTUFBTSxLQUFLQyxXQUFXO0FBQzlDO0FBRUEsT0FBTyxTQUFTQyxzQkFBc0JuQixHQUFXO0lBQ2hELE1BQU1vQixRQUFRcEIsSUFBSXFCLFdBQVcsQ0FBQztJQUM5QixPQUFPRCxTQUFTLElBQUlwQixJQUFJc0IsS0FBSyxDQUFDRixRQUFRLEtBQUtwQjtBQUM1QyJ9
@@ -1,7 +1,20 @@
1
- /** Relative path of the scaffolded API project inside the monorepo. */ export const WEBAPI_PROJECT_DIR = "projects/api";
1
+ /** Default API project slug when `--name` is omitted. */ export const DEFAULT_WEBAPI_NAME = "api";
2
+ /** Relative path of an API project inside the monorepo. */ export function webapiProjectDir(name) {
3
+ return `projects/${name}`;
4
+ }
2
5
  /**
3
- * Forge release entry for the scaffolded API (`pack: true` → per-target outDir).
4
- * Keep in sync with root `package.json` `"start"` and the production Dockerfile.
5
- */ export const WEBAPI_RELEASE_ENTRY = `dist/release/${WEBAPI_PROJECT_DIR}/es6/src/main.js`;
6
+ * Forge release entry for a scaffolded API (`pack: true` → per-target outDir).
7
+ * Keep in sync with root `package.json` `"start"` / `"start:<name>"` and Dockerfiles.
8
+ */ export function webapiReleaseEntry(name) {
9
+ return `dist/release/${webapiProjectDir(name)}/es6/src/main.js`;
10
+ }
11
+ /** npm package name for a scaffolded API (`flux serve --project`). */ export function webapiPackageName(workspaceName, apiName) {
12
+ return `@${workspaceName}/${apiName}`;
13
+ }
14
+ /** Local listen port for the nth API (0-based). Production uses `PORT`. */ export function webapiPort(index) {
15
+ return 3000 + index;
16
+ }
17
+ /** @deprecated Use `webapiProjectDir(name)`. Default path for the first API. */ export const WEBAPI_PROJECT_DIR = webapiProjectDir(DEFAULT_WEBAPI_NAME);
18
+ /** @deprecated Use `webapiReleaseEntry(name)`. Default start entry for the first API. */ export const WEBAPI_RELEASE_ENTRY = webapiReleaseEntry(DEFAULT_WEBAPI_NAME);
6
19
 
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NvbnN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBSZWxhdGl2ZSBwYXRoIG9mIHRoZSBzY2FmZm9sZGVkIEFQSSBwcm9qZWN0IGluc2lkZSB0aGUgbW9ub3JlcG8uICovXG5leHBvcnQgY29uc3QgV0VCQVBJX1BST0pFQ1RfRElSID0gXCJwcm9qZWN0cy9hcGlcIjtcblxuLyoqXG4gKiBGb3JnZSByZWxlYXNlIGVudHJ5IGZvciB0aGUgc2NhZmZvbGRlZCBBUEkgKGBwYWNrOiB0cnVlYCDihpIgcGVyLXRhcmdldCBvdXREaXIpLlxuICogS2VlcCBpbiBzeW5jIHdpdGggcm9vdCBgcGFja2FnZS5qc29uYCBgXCJzdGFydFwiYCBhbmQgdGhlIHByb2R1Y3Rpb24gRG9ja2VyZmlsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFdFQkFQSV9SRUxFQVNFX0VOVFJZID0gYGRpc3QvcmVsZWFzZS8ke1dFQkFQSV9QUk9KRUNUX0RJUn0vZXM2L3NyYy9tYWluLmpzYDtcbiJdLCJuYW1lcyI6WyJXRUJBUElfUFJPSkVDVF9ESVIiLCJXRUJBUElfUkVMRUFTRV9FTlRSWSJdLCJtYXBwaW5ncyI6IkFBQUEscUVBQXFFLEdBQ3JFLE9BQU8sTUFBTUEscUJBQXFCLGVBQWU7QUFFakQ7OztDQUdDLEdBQ0QsT0FBTyxNQUFNQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUVELG1CQUFtQixnQkFBZ0IsQ0FBQyxDQUFDIn0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NvbnN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBEZWZhdWx0IEFQSSBwcm9qZWN0IHNsdWcgd2hlbiBgLS1uYW1lYCBpcyBvbWl0dGVkLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0VCQVBJX05BTUUgPSBcImFwaVwiO1xuXG4vKiogUmVsYXRpdmUgcGF0aCBvZiBhbiBBUEkgcHJvamVjdCBpbnNpZGUgdGhlIG1vbm9yZXBvLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdlYmFwaVByb2plY3REaXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGBwcm9qZWN0cy8ke25hbWV9YDtcbn1cblxuLyoqXG4gKiBGb3JnZSByZWxlYXNlIGVudHJ5IGZvciBhIHNjYWZmb2xkZWQgQVBJIChgcGFjazogdHJ1ZWAg4oaSIHBlci10YXJnZXQgb3V0RGlyKS5cbiAqIEtlZXAgaW4gc3luYyB3aXRoIHJvb3QgYHBhY2thZ2UuanNvbmAgYFwic3RhcnRcImAgLyBgXCJzdGFydDo8bmFtZT5cImAgYW5kIERvY2tlcmZpbGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2ViYXBpUmVsZWFzZUVudHJ5KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBgZGlzdC9yZWxlYXNlLyR7d2ViYXBpUHJvamVjdERpcihuYW1lKX0vZXM2L3NyYy9tYWluLmpzYDtcbn1cblxuLyoqIG5wbSBwYWNrYWdlIG5hbWUgZm9yIGEgc2NhZmZvbGRlZCBBUEkgKGBmbHV4IHNlcnZlIC0tcHJvamVjdGApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdlYmFwaVBhY2thZ2VOYW1lKHdvcmtzcGFjZU5hbWU6IHN0cmluZywgYXBpTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGBAJHt3b3Jrc3BhY2VOYW1lfS8ke2FwaU5hbWV9YDtcbn1cblxuLyoqIExvY2FsIGxpc3RlbiBwb3J0IGZvciB0aGUgbnRoIEFQSSAoMC1iYXNlZCkuIFByb2R1Y3Rpb24gdXNlcyBgUE9SVGAuICovXG5leHBvcnQgZnVuY3Rpb24gd2ViYXBpUG9ydChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcblx0cmV0dXJuIDMwMDAgKyBpbmRleDtcbn1cblxuLyoqIEBkZXByZWNhdGVkIFVzZSBgd2ViYXBpUHJvamVjdERpcihuYW1lKWAuIERlZmF1bHQgcGF0aCBmb3IgdGhlIGZpcnN0IEFQSS4gKi9cbmV4cG9ydCBjb25zdCBXRUJBUElfUFJPSkVDVF9ESVIgPSB3ZWJhcGlQcm9qZWN0RGlyKERFRkFVTFRfV0VCQVBJX05BTUUpO1xuXG4vKiogQGRlcHJlY2F0ZWQgVXNlIGB3ZWJhcGlSZWxlYXNlRW50cnkobmFtZSlgLiBEZWZhdWx0IHN0YXJ0IGVudHJ5IGZvciB0aGUgZmlyc3QgQVBJLiAqL1xuZXhwb3J0IGNvbnN0IFdFQkFQSV9SRUxFQVNFX0VOVFJZID0gd2ViYXBpUmVsZWFzZUVudHJ5KERFRkFVTFRfV0VCQVBJX05BTUUpO1xuIl0sIm5hbWVzIjpbIkRFRkFVTFRfV0VCQVBJX05BTUUiLCJ3ZWJhcGlQcm9qZWN0RGlyIiwibmFtZSIsIndlYmFwaVJlbGVhc2VFbnRyeSIsIndlYmFwaVBhY2thZ2VOYW1lIiwid29ya3NwYWNlTmFtZSIsImFwaU5hbWUiLCJ3ZWJhcGlQb3J0IiwiaW5kZXgiLCJXRUJBUElfUFJPSkVDVF9ESVIiLCJXRUJBUElfUkVMRUFTRV9FTlRSWSJdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVELEdBQ3ZELE9BQU8sTUFBTUEsc0JBQXNCLE1BQU07QUFFekMseURBQXlELEdBQ3pELE9BQU8sU0FBU0MsaUJBQWlCQyxJQUFZO0lBQzVDLE9BQU8sQ0FBQyxTQUFTLEVBQUVBLE1BQU07QUFDMUI7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVNDLG1CQUFtQkQsSUFBWTtJQUM5QyxPQUFPLENBQUMsYUFBYSxFQUFFRCxpQkFBaUJDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEU7QUFFQSxvRUFBb0UsR0FDcEUsT0FBTyxTQUFTRSxrQkFBa0JDLGFBQXFCLEVBQUVDLE9BQWU7SUFDdkUsT0FBTyxDQUFDLENBQUMsRUFBRUQsY0FBYyxDQUFDLEVBQUVDLFNBQVM7QUFDdEM7QUFFQSx5RUFBeUUsR0FDekUsT0FBTyxTQUFTQyxXQUFXQyxLQUFhO0lBQ3ZDLE9BQU8sT0FBT0E7QUFDZjtBQUVBLDhFQUE4RSxHQUM5RSxPQUFPLE1BQU1DLHFCQUFxQlIsaUJBQWlCRCxxQkFBcUI7QUFFeEUsdUZBQXVGLEdBQ3ZGLE9BQU8sTUFBTVUsdUJBQXVCUCxtQkFBbUJILHFCQUFxQiJ9