@decohere/create 0.0.1-dev.43 → 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
@@ -85,11 +85,22 @@ function runInBuilder(opts) {
85
85
  envArgs.push("-e", `HOST_UID=${hostUid}`);
86
86
  if (hostGid != null) envArgs.push("-e", `HOST_GID=${hostGid}`);
87
87
  }
88
- const commandArgs = [
88
+ const commandArgs = opts.add ? [
89
+ "webapi",
90
+ "add",
91
+ opts.names?.[0] ?? "",
92
+ "-d",
93
+ "."
94
+ ] : [
89
95
  "webapi",
90
96
  "-d",
91
97
  "."
92
98
  ];
99
+ if (!opts.add) {
100
+ for (const name of opts.names ?? []){
101
+ commandArgs.push("--name", name);
102
+ }
103
+ }
93
104
  if (opts.databaseProvider != null) {
94
105
  commandArgs.push("--database", opts.databaseProvider);
95
106
  }
@@ -130,4 +141,4 @@ function runInBuilder(opts) {
130
141
  process.exit(result.status ?? 0);
131
142
  }
132
143
 
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcnVubmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYywgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUsIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSwgQ1JFQVRFX1ZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFwaU9wdGlvbnMgfSBmcm9tIFwiLi93ZWJhcGkvY3JlYXRlLWFwaS5qc1wiO1xuXG5jb25zdCBCVUlMREVSX0lNQUdFID0gYCR7Q1JFQVRFX0lNQUdFX1JFUE9TSVRPUll9OiR7Q1JFQVRFX1ZFUlNJT059YDtcblxuLyoqXG4gKiBSdW4gdGhlIHNjYWZmb2xkIGluc2lkZSBhIHByZS1idWlsdCBEb2NrZXIgYnVpbGRlciBpbWFnZS5cbiAqXG4gKiBDYWxsZWQgd2hlbiBgREVDT0hFUkVfQlVJTERFUmAgaXMgbm90IHNldCDigJQgaS5lLiB0aGUgQ0xJIGlzIHJ1bm5pbmcgb24gdGhlXG4gKiBob3N0LCBvdXRzaWRlIHRoZSBjb250YWluZXIuIE1vdW50cyB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhcyBgL3dvcmtzcGFjZWAgc29cbiAqIHRoZSBzY2FmZm9sZGVkIGZpbGVzIGFyZSB3cml0dGVuIGJhY2sgdG8gdGhlIGhvc3QgZmlsZXN5c3RlbS5cbiAqXG4gKiBUaGUgY29udGFpbmVyIHJ1bnMgYXMgdGhlIGhvc3QgdWlkL2dpZCB3aGVuZXZlciBwb3NzaWJsZSBzbyBzY2FmZm9sZGVkIGZpbGVzXG4gKiBhcmUgbmV2ZXIgcm9vdC1vd25lZCAocG9zdC1ob2MgYGNob3duYCBpcyB1bnJlbGlhYmxlIGFjcm9zcyBEb2NrZXIgc2V0dXBzKS5cbiAqXG4gKiBIb3N0IGB+Ly5jb25maWcvYXV0aDBgIGlzIG1vdW50ZWQgd2hlbiBwcmVzZW50IHNvIHRoZSBBdXRoMCBDTEkgY2FuIHJldXNlXG4gKiBjcmVkZW50aWFscyAocmVxdWlyZWQgZm9yIFBvc3RtYW4gU1BBIC8gYXV0aDBDbGllbnRJZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5JbkJ1aWxkZXIob3B0czogQXBpT3B0aW9ucyk6IG5ldmVyIHtcblx0Y29uc3QgdGFyZ2V0RGlyID0gcmVzb2x2ZShvcHRzLmQgPz8gXCIuXCIpO1xuXHRjb25zdCBwcm9qZWN0TmFtZSA9IGJhc2VuYW1lKHRhcmdldERpcik7XG5cdG1rZGlyU3luYyh0YXJnZXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHQvLyBIb3N0LW93bmVkIHNvIGluaXRpYWxpemVDb21tYW5kIGNhbiBhbHdheXMgd3JpdGUgaGVyZSBldmVuIGlmIHNvbWV0aGluZ1xuXHQvLyBlbHNlIGluIC5kZXZjb250YWluZXIgZW5kcyB1cCBvZGRseSBvd25lZC5cblx0bWtkaXJTeW5jKHJlc29sdmUodGFyZ2V0RGlyLCBcIi5kZXZjb250YWluZXJcIiwgXCJucG0tYXV0aFwiKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0Ly8gRW5zdXJlIERvY2tlciBpcyBhdmFpbGFibGUuXG5cdHRyeSB7XG5cdFx0ZXhlY0ZpbGVTeW5jKFwiZG9ja2VyXCIsIFtcImluZm9cIl0sIHsgc3RkaW86IFwicGlwZVwiIH0pO1xuXHR9IGNhdGNoIHtcblx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XCJcXG4gIERvY2tlciBpcyByZXF1aXJlZCB0byBzY2FmZm9sZCBhIERlY29oZXJlIHByb2plY3QuXFxuXCIgK1xuXHRcdFx0XHRcIiAgSW5zdGFsbCBEb2NrZXIgRGVza3RvcDogaHR0cHM6Ly93d3cuZG9ja2VyLmNvbS9wcm9kdWN0cy9kb2NrZXItZGVza3RvcFxcblwiLFxuXHRcdCk7XG5cdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHR9XG5cblx0Y29uc3QgaG9zdFVpZCA9IHByb2Nlc3MuZ2V0dWlkPy4oKTtcblx0Y29uc3QgaG9zdEdpZCA9IHByb2Nlc3MuZ2V0Z2lkPy4oKSA/PyBob3N0VWlkO1xuXHRjb25zdCBydW5Bc0hvc3RVc2VyID0gaG9zdFVpZCAhPSBudWxsICYmIGhvc3RHaWQgIT0gbnVsbDtcblxuXHQvLyBBbm9ueW1vdXMgcm9vdC1vd25lZCB2b2x1bWVzIGFyZSBub3Qgd3JpdGFibGUgd2hlbiB3ZSBkcm9wIHByaXZpbGVnZXMuXG5cdGNvbnN0IG5wbUNhY2hlRGlyID0gcmVzb2x2ZShob21lZGlyKCksIFwiLmNhY2hlL2RlY29oZXJlLWNyZWF0ZS9ucG1cIik7XG5cdG1rZGlyU3luYyhucG1DYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0Ly8gSXNvbGF0ZWQgSE9NRSBzbyAtLXVzZXIgaG9zdC11aWQgY2FuIHdyaXRlIHdpdGhvdXQgYSBtYXRjaGluZyAvZXRjL3Bhc3N3ZCBlbnRyeS5cblx0Y29uc3QgYnVpbGRlckhvbWUgPSBcIi90bXAvZGVjb2hlcmUtY3JlYXRlLWhvbWVcIjtcblxuXHRjb25zdCB2b2x1bWVzOiBzdHJpbmdbXSA9IFtcblx0XHRcIi12XCIsXG5cdFx0YCR7dGFyZ2V0RGlyfTovd29ya3NwYWNlYCxcblx0XHRcIi12XCIsXG5cdFx0YCR7bnBtQ2FjaGVEaXJ9Oi9ucG0tY2FjaGVgLFxuXHRdO1xuXG5cdGNvbnN0IGVudkFyZ3M6IHN0cmluZ1tdID0gW1xuXHRcdFwiLWVcIixcblx0XHRcIkRFQ09IRVJFX0JVSUxERVI9MVwiLFxuXHRcdC8vIEhvc3QgZGlyIGJhc2VuYW1lIOKAlCBjb250YWluZXIgY3dkIGlzIC93b3Jrc3BhY2Ugc28gYmFzZW5hbWUgd291bGQgYmUgd3JvbmcuXG5cdFx0XCItZVwiLFxuXHRcdGBERUNPSEVSRV9QUk9KRUNUX05BTUU9JHtwcm9qZWN0TmFtZX1gLFxuXHRcdFwiLWVcIixcblx0XHRcIk5QTV9DT05GSUdfQ0FDSEU9L25wbS1jYWNoZVwiLFxuXHRcdFwiLWVcIixcblx0XHRcIk5QTV9DT05GSUdfUFJFRkVSX09GRkxJTkU9dHJ1ZVwiLFxuXHRcdFwiLWVcIixcblx0XHRgSE9NRT0ke2J1aWxkZXJIb21lfWAsXG5cdF07XG5cblx0Ly8gTW91bnQgaG9zdCAubnBtcmMgd2hlcmUgdGhlIG5vbi1yb290IHByb2Nlc3MgY2FuIHJlYWQgaXQuXG5cdGNvbnN0IG5wbXJjUGF0aCA9IHJlc29sdmUoaG9tZWRpcigpLCBcIi5ucG1yY1wiKTtcblx0aWYgKGV4aXN0c1N5bmMobnBtcmNQYXRoKSkge1xuXHRcdHZvbHVtZXMucHVzaChcIi12XCIsIGAke25wbXJjUGF0aH06L3RtcC9ob3N0LW5wbXJjOnJvYCk7XG5cdFx0ZW52QXJncy5wdXNoKFwiLWVcIiwgXCJOUE1fQ09ORklHX1VTRVJDT05GSUc9L3RtcC9ob3N0LW5wbXJjXCIpO1xuXHR9XG5cblx0Ly8gQXV0aDAgQ0xJIHJlYWRzIGNyZWRlbnRpYWxzIGZyb20gJEhPTUUvLmNvbmZpZy9hdXRoMCDigJQgd2l0aG91dCB0aGlzIG1vdW50LFxuXHQvLyBlbnN1cmVTcGFBcHAgZmFpbHMgYW5kIFBvc3RtYW4gZ2V0cyBhbiBlbXB0eSBhdXRoMENsaWVudElkLlxuXHRjb25zdCBhdXRoMENvbmZpZ0RpciA9IHJlc29sdmUoaG9tZWRpcigpLCBcIi5jb25maWcvYXV0aDBcIik7XG5cdGlmIChleGlzdHNTeW5jKGF1dGgwQ29uZmlnRGlyKSkge1xuXHRcdHZvbHVtZXMucHVzaChcIi12XCIsIGAke2F1dGgwQ29uZmlnRGlyfToke2J1aWxkZXJIb21lfS8uY29uZmlnL2F1dGgwYCk7XG5cdH1cblxuXHRjb25zdCB1c2VyQXJnczogc3RyaW5nW10gPSBbXTtcblx0aWYgKHJ1bkFzSG9zdFVzZXIpIHtcblx0XHR1c2VyQXJncy5wdXNoKFwiLS11c2VyXCIsIGAke2hvc3RVaWR9OiR7aG9zdEdpZH1gKTtcblx0fSBlbHNlIGlmIChob3N0VWlkICE9IG51bGwpIHtcblx0XHQvLyBGYWxsYmFjayBmb3IgZW52aXJvbm1lbnRzIHdpdGhvdXQgZ2V0Z2lkOiBrZWVwIGxlZ2FjeSBjaG93biBwYXRoLlxuXHRcdGVudkFyZ3MucHVzaChcIi1lXCIsIGBIT1NUX1VJRD0ke2hvc3RVaWR9YCk7XG5cdFx0aWYgKGhvc3RHaWQgIT0gbnVsbCkgZW52QXJncy5wdXNoKFwiLWVcIiwgYEhPU1RfR0lEPSR7aG9zdEdpZH1gKTtcblx0fVxuXG5cdGNvbnN0IGNvbW1hbmRBcmdzOiBzdHJpbmdbXSA9IFtcIndlYmFwaVwiLCBcIi1kXCIsIFwiLlwiXTtcblx0aWYgKG9wdHMuZGF0YWJhc2VQcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tZGF0YWJhc2VcIiwgb3B0cy5kYXRhYmFzZVByb3ZpZGVyKTtcblx0fVxuXHRpZiAob3B0cy5hdXRoUHJvdmlkZXIgIT0gbnVsbCkge1xuXHRcdGNvbW1hbmRBcmdzLnB1c2goXCItLWF1dGhcIiwgb3B0cy5hdXRoUHJvdmlkZXIpO1xuXHR9XG5cdGlmIChvcHRzLnBvc3RtYW5Qcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tcG9zdG1hblwiLCBvcHRzLnBvc3RtYW5Qcm92aWRlcik7XG5cdH1cblx0aWYgKG9wdHMuaW5zdGFsbERlcGVuZGVuY2llcyAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0taW5zdGFsbFwiLCBvcHRzLmluc3RhbGxEZXBlbmRlbmNpZXMpO1xuXHR9XG5cblx0Y29uc29sZS5sb2coXCIgIFJ1bm5pbmcgc2NhZmZvbGRpbmcgaW4gYSBzYW5kYm94ZWQgY29udGFpbmVyLi4uXFxuXCIpO1xuXG5cdC8vIE9ubHkgYWxsb2NhdGUgYSBUVFkgd2hlbiBzdGRpbiBpcyBpdHNlbGYgYSBUVFkg4oCUIGF2b2lkcyBhIGh1bmcgcHJvY2Vzc1xuXHQvLyBpbiBub24taW50ZXJhY3RpdmUgZW52aXJvbm1lbnRzIChwaXBlcywgQ0ksIHNjcmlwdHMpLlxuXHRjb25zdCB0dHlGbGFncyA9IHByb2Nlc3Muc3RkaW4uaXNUVFkgPyBbXCItaXRcIl0gOiBbXCItaVwiXTtcblxuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXG5cdFx0XCJkb2NrZXJcIixcblx0XHRbXG5cdFx0XHRcInJ1blwiLFxuXHRcdFx0XCItLXJtXCIsXG5cdFx0XHQuLi50dHlGbGFncyxcblx0XHRcdC4uLnVzZXJBcmdzLFxuXHRcdFx0Li4udm9sdW1lcyxcblx0XHRcdC4uLmVudkFyZ3MsXG5cdFx0XHRcIi13XCIsXG5cdFx0XHRcIi93b3Jrc3BhY2VcIixcblx0XHRcdEJVSUxERVJfSU1BR0UsXG5cdFx0XHQuLi5jb21tYW5kQXJncyxcblx0XHRdLFxuXHRcdHsgc3RkaW86IFwiaW5oZXJpdFwiIH0sXG5cdCk7XG5cblx0aWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcblx0XHRjb25zb2xlLmxvZyhgXFxuICBTY2FmZm9sZCBjb21wbGV0ZSFcXG5cXG4gIE9wZW4geW91ciBwcm9qZWN0OlxcblxcbiAgICBjb2RlICR7dGFyZ2V0RGlyfVxcbmApO1xuXHR9XG5cblx0cHJvY2Vzcy5leGl0KHJlc3VsdC5zdGF0dXMgPz8gMCk7XG59XG4iXSwibmFtZXMiOlsicnVuSW5CdWlsZGVyIiwiQlVJTERFUl9JTUFHRSIsIkNSRUFURV9JTUFHRV9SRVBPU0lUT1JZIiwiQ1JFQVRFX1ZFUlNJT04iLCJvcHRzIiwidGFyZ2V0RGlyIiwicmVzb2x2ZSIsImQiLCJwcm9qZWN0TmFtZSIsImJhc2VuYW1lIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwiZXhlY0ZpbGVTeW5jIiwic3RkaW8iLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsImhvc3RVaWQiLCJnZXR1aWQiLCJob3N0R2lkIiwiZ2V0Z2lkIiwicnVuQXNIb3N0VXNlciIsIm5wbUNhY2hlRGlyIiwiaG9tZWRpciIsImJ1aWxkZXJIb21lIiwidm9sdW1lcyIsImVudkFyZ3MiLCJucG1yY1BhdGgiLCJleGlzdHNTeW5jIiwicHVzaCIsImF1dGgwQ29uZmlnRGlyIiwidXNlckFyZ3MiLCJjb21tYW5kQXJncyIsImRhdGFiYXNlUHJvdmlkZXIiLCJhdXRoUHJvdmlkZXIiLCJwb3N0bWFuUHJvdmlkZXIiLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwibG9nIiwidHR5RmxhZ3MiLCJzdGRpbiIsImlzVFRZIiwicmVzdWx0Iiwic3Bhd25TeW5jIiwic3RhdHVzIl0sIm1hcHBpbmdzIjoiOzs7OytCQXNCZ0JBOzs7ZUFBQUE7OzttQ0F0QndCO3dCQUNGO3dCQUNkOzBCQUNVO3lCQUNzQjtBQUd4RCxNQUFNQyxnQkFBZ0IsR0FBR0MsZ0NBQXVCLENBQUMsQ0FBQyxFQUFFQyx1QkFBYyxFQUFFO0FBZTdELFNBQVNILGFBQWFJLElBQWdCO0lBQzVDLE1BQU1DLFlBQVlDLElBQUFBLGlCQUFPLEVBQUNGLEtBQUtHLENBQUMsSUFBSTtJQUNwQyxNQUFNQyxjQUFjQyxJQUFBQSxrQkFBUSxFQUFDSjtJQUM3QkssSUFBQUEsaUJBQVMsRUFBQ0wsV0FBVztRQUFFTSxXQUFXO0lBQUs7SUFDdkMsMEVBQTBFO0lBQzFFLDZDQUE2QztJQUM3Q0QsSUFBQUEsaUJBQVMsRUFBQ0osSUFBQUEsaUJBQU8sRUFBQ0QsV0FBVyxpQkFBaUIsYUFBYTtRQUFFTSxXQUFXO0lBQUs7SUFFN0UsOEJBQThCO0lBQzlCLElBQUk7UUFDSEMsSUFBQUEsK0JBQVksRUFBQyxVQUFVO1lBQUM7U0FBTyxFQUFFO1lBQUVDLE9BQU87UUFBTztJQUNsRCxFQUFFLE9BQU07UUFDUEMsUUFBUUMsS0FBSyxDQUNaLDZEQUNDO1FBRUZDLFFBQVFDLElBQUksQ0FBQztJQUNkO0lBRUEsTUFBTUMsVUFBVUYsUUFBUUcsTUFBTTtJQUM5QixNQUFNQyxVQUFVSixRQUFRSyxNQUFNLFFBQVFIO0lBQ3RDLE1BQU1JLGdCQUFnQkosV0FBVyxRQUFRRSxXQUFXO0lBRXBELHlFQUF5RTtJQUN6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
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcnVubmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYywgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUsIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSwgQ1JFQVRFX1ZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFwaU9wdGlvbnMgfSBmcm9tIFwiLi93ZWJhcGkvY3JlYXRlLWFwaS5qc1wiO1xuXG5jb25zdCBCVUlMREVSX0lNQUdFID0gYCR7Q1JFQVRFX0lNQUdFX1JFUE9TSVRPUll9OiR7Q1JFQVRFX1ZFUlNJT059YDtcblxuLyoqXG4gKiBSdW4gdGhlIHNjYWZmb2xkIGluc2lkZSBhIHByZS1idWlsdCBEb2NrZXIgYnVpbGRlciBpbWFnZS5cbiAqXG4gKiBDYWxsZWQgd2hlbiBgREVDT0hFUkVfQlVJTERFUmAgaXMgbm90IHNldCDigJQgaS5lLiB0aGUgQ0xJIGlzIHJ1bm5pbmcgb24gdGhlXG4gKiBob3N0LCBvdXRzaWRlIHRoZSBjb250YWluZXIuIE1vdW50cyB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhcyBgL3dvcmtzcGFjZWAgc29cbiAqIHRoZSBzY2FmZm9sZGVkIGZpbGVzIGFyZSB3cml0dGVuIGJhY2sgdG8gdGhlIGhvc3QgZmlsZXN5c3RlbS5cbiAqXG4gKiBUaGUgY29udGFpbmVyIHJ1bnMgYXMgdGhlIGhvc3QgdWlkL2dpZCB3aGVuZXZlciBwb3NzaWJsZSBzbyBzY2FmZm9sZGVkIGZpbGVzXG4gKiBhcmUgbmV2ZXIgcm9vdC1vd25lZCAocG9zdC1ob2MgYGNob3duYCBpcyB1bnJlbGlhYmxlIGFjcm9zcyBEb2NrZXIgc2V0dXBzKS5cbiAqXG4gKiBIb3N0IGB+Ly5jb25maWcvYXV0aDBgIGlzIG1vdW50ZWQgd2hlbiBwcmVzZW50IHNvIHRoZSBBdXRoMCBDTEkgY2FuIHJldXNlXG4gKiBjcmVkZW50aWFscyAocmVxdWlyZWQgZm9yIFBvc3RtYW4gU1BBIC8gYXV0aDBDbGllbnRJZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5JbkJ1aWxkZXIob3B0czogQXBpT3B0aW9ucyk6IG5ldmVyIHtcblx0Y29uc3QgdGFyZ2V0RGlyID0gcmVzb2x2ZShvcHRzLmQgPz8gXCIuXCIpO1xuXHRjb25zdCBwcm9qZWN0TmFtZSA9IGJhc2VuYW1lKHRhcmdldERpcik7XG5cdG1rZGlyU3luYyh0YXJnZXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHQvLyBIb3N0LW93bmVkIHNvIGluaXRpYWxpemVDb21tYW5kIGNhbiBhbHdheXMgd3JpdGUgaGVyZSBldmVuIGlmIHNvbWV0aGluZ1xuXHQvLyBlbHNlIGluIC5kZXZjb250YWluZXIgZW5kcyB1cCBvZGRseSBvd25lZC5cblx0bWtkaXJTeW5jKHJlc29sdmUodGFyZ2V0RGlyLCBcIi5kZXZjb250YWluZXJcIiwgXCJucG0tYXV0aFwiKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0Ly8gRW5zdXJlIERvY2tlciBpcyBhdmFpbGFibGUuXG5cdHRyeSB7XG5cdFx0ZXhlY0ZpbGVTeW5jKFwiZG9ja2VyXCIsIFtcImluZm9cIl0sIHsgc3RkaW86IFwicGlwZVwiIH0pO1xuXHR9IGNhdGNoIHtcblx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XCJcXG4gIERvY2tlciBpcyByZXF1aXJlZCB0byBzY2FmZm9sZCBhIERlY29oZXJlIHByb2plY3QuXFxuXCIgK1xuXHRcdFx0XHRcIiAgSW5zdGFsbCBEb2NrZXIgRGVza3RvcDogaHR0cHM6Ly93d3cuZG9ja2VyLmNvbS9wcm9kdWN0cy9kb2NrZXItZGVza3RvcFxcblwiLFxuXHRcdCk7XG5cdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHR9XG5cblx0Y29uc3QgaG9zdFVpZCA9IHByb2Nlc3MuZ2V0dWlkPy4oKTtcblx0Y29uc3QgaG9zdEdpZCA9IHByb2Nlc3MuZ2V0Z2lkPy4oKSA/PyBob3N0VWlkO1xuXHRjb25zdCBydW5Bc0hvc3RVc2VyID0gaG9zdFVpZCAhPSBudWxsICYmIGhvc3RHaWQgIT0gbnVsbDtcblxuXHQvLyBBbm9ueW1vdXMgcm9vdC1vd25lZCB2b2x1bWVzIGFyZSBub3Qgd3JpdGFibGUgd2hlbiB3ZSBkcm9wIHByaXZpbGVnZXMuXG5cdGNvbnN0IG5wbUNhY2hlRGlyID0gcmVzb2x2ZShob21lZGlyKCksIFwiLmNhY2hlL2RlY29oZXJlLWNyZWF0ZS9ucG1cIik7XG5cdG1rZGlyU3luYyhucG1DYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0Ly8gSXNvbGF0ZWQgSE9NRSBzbyAtLXVzZXIgaG9zdC11aWQgY2FuIHdyaXRlIHdpdGhvdXQgYSBtYXRjaGluZyAvZXRjL3Bhc3N3ZCBlbnRyeS5cblx0Y29uc3QgYnVpbGRlckhvbWUgPSBcIi90bXAvZGVjb2hlcmUtY3JlYXRlLWhvbWVcIjtcblxuXHRjb25zdCB2b2x1bWVzOiBzdHJpbmdbXSA9IFtcblx0XHRcIi12XCIsXG5cdFx0YCR7dGFyZ2V0RGlyfTovd29ya3NwYWNlYCxcblx0XHRcIi12XCIsXG5cdFx0YCR7bnBtQ2FjaGVEaXJ9Oi9ucG0tY2FjaGVgLFxuXHRdO1xuXG5cdGNvbnN0IGVudkFyZ3M6IHN0cmluZ1tdID0gW1xuXHRcdFwiLWVcIixcblx0XHRcIkRFQ09IRVJFX0JVSUxERVI9MVwiLFxuXHRcdC8vIEhvc3QgZGlyIGJhc2VuYW1lIOKAlCBjb250YWluZXIgY3dkIGlzIC93b3Jrc3BhY2Ugc28gYmFzZW5hbWUgd291bGQgYmUgd3JvbmcuXG5cdFx0XCItZVwiLFxuXHRcdGBERUNPSEVSRV9QUk9KRUNUX05BTUU9JHtwcm9qZWN0TmFtZX1gLFxuXHRcdFwiLWVcIixcblx0XHRcIk5QTV9DT05GSUdfQ0FDSEU9L25wbS1jYWNoZVwiLFxuXHRcdFwiLWVcIixcblx0XHRcIk5QTV9DT05GSUdfUFJFRkVSX09GRkxJTkU9dHJ1ZVwiLFxuXHRcdFwiLWVcIixcblx0XHRgSE9NRT0ke2J1aWxkZXJIb21lfWAsXG5cdF07XG5cblx0Ly8gTW91bnQgaG9zdCAubnBtcmMgd2hlcmUgdGhlIG5vbi1yb290IHByb2Nlc3MgY2FuIHJlYWQgaXQuXG5cdGNvbnN0IG5wbXJjUGF0aCA9IHJlc29sdmUoaG9tZWRpcigpLCBcIi5ucG1yY1wiKTtcblx0aWYgKGV4aXN0c1N5bmMobnBtcmNQYXRoKSkge1xuXHRcdHZvbHVtZXMucHVzaChcIi12XCIsIGAke25wbXJjUGF0aH06L3RtcC9ob3N0LW5wbXJjOnJvYCk7XG5cdFx0ZW52QXJncy5wdXNoKFwiLWVcIiwgXCJOUE1fQ09ORklHX1VTRVJDT05GSUc9L3RtcC9ob3N0LW5wbXJjXCIpO1xuXHR9XG5cblx0Ly8gQXV0aDAgQ0xJIHJlYWRzIGNyZWRlbnRpYWxzIGZyb20gJEhPTUUvLmNvbmZpZy9hdXRoMCDigJQgd2l0aG91dCB0aGlzIG1vdW50LFxuXHQvLyBlbnN1cmVTcGFBcHAgZmFpbHMgYW5kIFBvc3RtYW4gZ2V0cyBhbiBlbXB0eSBhdXRoMENsaWVudElkLlxuXHRjb25zdCBhdXRoMENvbmZpZ0RpciA9IHJlc29sdmUoaG9tZWRpcigpLCBcIi5jb25maWcvYXV0aDBcIik7XG5cdGlmIChleGlzdHNTeW5jKGF1dGgwQ29uZmlnRGlyKSkge1xuXHRcdHZvbHVtZXMucHVzaChcIi12XCIsIGAke2F1dGgwQ29uZmlnRGlyfToke2J1aWxkZXJIb21lfS8uY29uZmlnL2F1dGgwYCk7XG5cdH1cblxuXHRjb25zdCB1c2VyQXJnczogc3RyaW5nW10gPSBbXTtcblx0aWYgKHJ1bkFzSG9zdFVzZXIpIHtcblx0XHR1c2VyQXJncy5wdXNoKFwiLS11c2VyXCIsIGAke2hvc3RVaWR9OiR7aG9zdEdpZH1gKTtcblx0fSBlbHNlIGlmIChob3N0VWlkICE9IG51bGwpIHtcblx0XHQvLyBGYWxsYmFjayBmb3IgZW52aXJvbm1lbnRzIHdpdGhvdXQgZ2V0Z2lkOiBrZWVwIGxlZ2FjeSBjaG93biBwYXRoLlxuXHRcdGVudkFyZ3MucHVzaChcIi1lXCIsIGBIT1NUX1VJRD0ke2hvc3RVaWR9YCk7XG5cdFx0aWYgKGhvc3RHaWQgIT0gbnVsbCkgZW52QXJncy5wdXNoKFwiLWVcIiwgYEhPU1RfR0lEPSR7aG9zdEdpZH1gKTtcblx0fVxuXG5cdGNvbnN0IGNvbW1hbmRBcmdzOiBzdHJpbmdbXSA9IG9wdHMuYWRkXG5cdFx0PyBbXCJ3ZWJhcGlcIiwgXCJhZGRcIiwgb3B0cy5uYW1lcz8uWzBdID8/IFwiXCIsIFwiLWRcIiwgXCIuXCJdXG5cdFx0OiBbXCJ3ZWJhcGlcIiwgXCItZFwiLCBcIi5cIl07XG5cdGlmICghb3B0cy5hZGQpIHtcblx0XHRmb3IgKGNvbnN0IG5hbWUgb2Ygb3B0cy5uYW1lcyA/PyBbXSkge1xuXHRcdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tbmFtZVwiLCBuYW1lKTtcblx0XHR9XG5cdH1cblx0aWYgKG9wdHMuZGF0YWJhc2VQcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tZGF0YWJhc2VcIiwgb3B0cy5kYXRhYmFzZVByb3ZpZGVyKTtcblx0fVxuXHRpZiAob3B0cy5hdXRoUHJvdmlkZXIgIT0gbnVsbCkge1xuXHRcdGNvbW1hbmRBcmdzLnB1c2goXCItLWF1dGhcIiwgb3B0cy5hdXRoUHJvdmlkZXIpO1xuXHR9XG5cdGlmIChvcHRzLnBvc3RtYW5Qcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tcG9zdG1hblwiLCBvcHRzLnBvc3RtYW5Qcm92aWRlcik7XG5cdH1cblx0aWYgKG9wdHMuaW5zdGFsbERlcGVuZGVuY2llcyAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0taW5zdGFsbFwiLCBvcHRzLmluc3RhbGxEZXBlbmRlbmNpZXMpO1xuXHR9XG5cblx0Y29uc29sZS5sb2coXCIgIFJ1bm5pbmcgc2NhZmZvbGRpbmcgaW4gYSBzYW5kYm94ZWQgY29udGFpbmVyLi4uXFxuXCIpO1xuXG5cdC8vIE9ubHkgYWxsb2NhdGUgYSBUVFkgd2hlbiBzdGRpbiBpcyBpdHNlbGYgYSBUVFkg4oCUIGF2b2lkcyBhIGh1bmcgcHJvY2Vzc1xuXHQvLyBpbiBub24taW50ZXJhY3RpdmUgZW52aXJvbm1lbnRzIChwaXBlcywgQ0ksIHNjcmlwdHMpLlxuXHRjb25zdCB0dHlGbGFncyA9IHByb2Nlc3Muc3RkaW4uaXNUVFkgPyBbXCItaXRcIl0gOiBbXCItaVwiXTtcblxuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXG5cdFx0XCJkb2NrZXJcIixcblx0XHRbXG5cdFx0XHRcInJ1blwiLFxuXHRcdFx0XCItLXJtXCIsXG5cdFx0XHQuLi50dHlGbGFncyxcblx0XHRcdC4uLnVzZXJBcmdzLFxuXHRcdFx0Li4udm9sdW1lcyxcblx0XHRcdC4uLmVudkFyZ3MsXG5cdFx0XHRcIi13XCIsXG5cdFx0XHRcIi93b3Jrc3BhY2VcIixcblx0XHRcdEJVSUxERVJfSU1BR0UsXG5cdFx0XHQuLi5jb21tYW5kQXJncyxcblx0XHRdLFxuXHRcdHsgc3RkaW86IFwiaW5oZXJpdFwiIH0sXG5cdCk7XG5cblx0aWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcblx0XHRjb25zb2xlLmxvZyhgXFxuICBTY2FmZm9sZCBjb21wbGV0ZSFcXG5cXG4gIE9wZW4geW91ciBwcm9qZWN0OlxcblxcbiAgICBjb2RlICR7dGFyZ2V0RGlyfVxcbmApO1xuXHR9XG5cblx0cHJvY2Vzcy5leGl0KHJlc3VsdC5zdGF0dXMgPz8gMCk7XG59XG4iXSwibmFtZXMiOlsicnVuSW5CdWlsZGVyIiwiQlVJTERFUl9JTUFHRSIsIkNSRUFURV9JTUFHRV9SRVBPU0lUT1JZIiwiQ1JFQVRFX1ZFUlNJT04iLCJvcHRzIiwidGFyZ2V0RGlyIiwicmVzb2x2ZSIsImQiLCJwcm9qZWN0TmFtZSIsImJhc2VuYW1lIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwiZXhlY0ZpbGVTeW5jIiwic3RkaW8iLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsImhvc3RVaWQiLCJnZXR1aWQiLCJob3N0R2lkIiwiZ2V0Z2lkIiwicnVuQXNIb3N0VXNlciIsIm5wbUNhY2hlRGlyIiwiaG9tZWRpciIsImJ1aWxkZXJIb21lIiwidm9sdW1lcyIsImVudkFyZ3MiLCJucG1yY1BhdGgiLCJleGlzdHNTeW5jIiwicHVzaCIsImF1dGgwQ29uZmlnRGlyIiwidXNlckFyZ3MiLCJjb21tYW5kQXJncyIsImFkZCIsIm5hbWVzIiwibmFtZSIsImRhdGFiYXNlUHJvdmlkZXIiLCJhdXRoUHJvdmlkZXIiLCJwb3N0bWFuUHJvdmlkZXIiLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwibG9nIiwidHR5RmxhZ3MiLCJzdGRpbiIsImlzVFRZIiwicmVzdWx0Iiwic3Bhd25TeW5jIiwic3RhdHVzIl0sIm1hcHBpbmdzIjoiOzs7OytCQXNCZ0JBOzs7ZUFBQUE7OzttQ0F0QndCO3dCQUNGO3dCQUNkOzBCQUNVO3lCQUNzQjtBQUd4RCxNQUFNQyxnQkFBZ0IsR0FBR0MsZ0NBQXVCLENBQUMsQ0FBQyxFQUFFQyx1QkFBYyxFQUFFO0FBZTdELFNBQVNILGFBQWFJLElBQWdCO0lBQzVDLE1BQU1DLFlBQVlDLElBQUFBLGlCQUFPLEVBQUNGLEtBQUtHLENBQUMsSUFBSTtJQUNwQyxNQUFNQyxjQUFjQyxJQUFBQSxrQkFBUSxFQUFDSjtJQUM3QkssSUFBQUEsaUJBQVMsRUFBQ0wsV0FBVztRQUFFTSxXQUFXO0lBQUs7SUFDdkMsMEVBQTBFO0lBQzFFLDZDQUE2QztJQUM3Q0QsSUFBQUEsaUJBQVMsRUFBQ0osSUFBQUEsaUJBQU8sRUFBQ0QsV0FBVyxpQkFBaUIsYUFBYTtRQUFFTSxXQUFXO0lBQUs7SUFFN0UsOEJBQThCO0lBQzlCLElBQUk7UUFDSEMsSUFBQUEsK0JBQVksRUFB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
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get API_NAME_PATTERN () {
13
+ return API_NAME_PATTERN;
14
+ },
15
+ get CreateCliError () {
16
+ return CreateCliError;
17
+ },
18
+ get apiEnvPrefix () {
19
+ return apiEnvPrefix;
20
+ },
21
+ get apiNameFromProjectDir () {
22
+ return apiNameFromProjectDir;
23
+ },
24
+ get assertValidApiName () {
25
+ return assertValidApiName;
26
+ },
27
+ get isDecohereWorkspace () {
28
+ return isDecohereWorkspace;
29
+ },
30
+ get listExistingApiNames () {
31
+ return listExistingApiNames;
32
+ },
33
+ get parseApiNames () {
34
+ return parseApiNames;
35
+ }
36
+ });
37
+ const _nodefs = require("node:fs");
38
+ const _nodepath = require("node:path");
39
+ const _const = require("./const.js");
40
+ const API_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;
41
+ class CreateCliError extends Error {
42
+ constructor(message){
43
+ super(message);
44
+ this.name = "CreateCliError";
45
+ }
46
+ }
47
+ function assertValidApiName(name) {
48
+ if (!API_NAME_PATTERN.test(name)) {
49
+ throw new CreateCliError(`Invalid API name "${name}". Use a lowercase slug starting with a letter, then letters, digits, or hyphens (e.g. billing).`);
50
+ }
51
+ }
52
+ function parseApiNames(raw) {
53
+ const names = raw != null && raw.length > 0 ? [
54
+ ...raw
55
+ ] : [
56
+ _const.DEFAULT_WEBAPI_NAME
57
+ ];
58
+ const seen = new Set();
59
+ for (const name of names){
60
+ assertValidApiName(name);
61
+ if (seen.has(name)) {
62
+ throw new CreateCliError(`Duplicate API name "${name}".`);
63
+ }
64
+ seen.add(name);
65
+ }
66
+ return names;
67
+ }
68
+ function isDecohereWorkspace(dir) {
69
+ try {
70
+ const pkg = JSON.parse((0, _nodefs.readFileSync)((0, _nodepath.join)(dir, "package.json"), "utf8"));
71
+ const build = pkg.scripts?.build;
72
+ return typeof build === "string" && build.includes("forge");
73
+ } catch {
74
+ return false;
75
+ }
76
+ }
77
+ function listExistingApiNames(dir) {
78
+ const projectsDir = (0, _nodepath.join)(dir, "projects");
79
+ try {
80
+ return (0, _nodefs.readdirSync)(projectsDir, {
81
+ withFileTypes: true
82
+ }).filter((entry)=>entry.isDirectory() && (0, _nodefs.existsSync)((0, _nodepath.join)(projectsDir, entry.name, "package.json"))).map((entry)=>entry.name).sort();
83
+ } catch {
84
+ return [];
85
+ }
86
+ }
87
+ function apiEnvPrefix(apiName) {
88
+ return apiName.replace(/-/g, "_").toUpperCase();
89
+ }
90
+ function apiNameFromProjectDir(dir) {
91
+ const slash = dir.lastIndexOf("/");
92
+ return slash >= 0 ? dir.slice(slash + 1) : dir;
93
+ }
94
+
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2FwaS1uYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRkaXJTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IERFRkFVTFRfV0VCQVBJX05BTUUgfSBmcm9tIFwiLi9jb25zdC5qc1wiO1xuXG4vKiogTG93ZXJjYXNlIG5wbS1zYWZlIGRpcmVjdG9yeSBzbHVnOiBgYmlsbGluZ2AsIGBhZG1pbi1hcGlgLiAqL1xuZXhwb3J0IGNvbnN0IEFQSV9OQU1FX1BBVFRFUk4gPSAvXlthLXpdW2EtejAtOS1dKiQvO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlQ2xpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzLm5hbWUgPSBcIkNyZWF0ZUNsaUVycm9yXCI7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFZhbGlkQXBpTmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcblx0aWYgKCFBUElfTkFNRV9QQVRURVJOLnRlc3QobmFtZSkpIHtcblx0XHR0aHJvdyBuZXcgQ3JlYXRlQ2xpRXJyb3IoXG5cdFx0XHRgSW52YWxpZCBBUEkgbmFtZSBcIiR7bmFtZX1cIi4gVXNlIGEgbG93ZXJjYXNlIHNsdWcgc3RhcnRpbmcgd2l0aCBhIGxldHRlciwgdGhlbiBsZXR0ZXJzLCBkaWdpdHMsIG9yIGh5cGhlbnMgKGUuZy4gYmlsbGluZykuYCxcblx0XHQpO1xuXHR9XG59XG5cbi8qKiBEZWZhdWx0IGBbXCJhcGlcIl1gIHdoZW4gdGhlIGNhbGxlciBvbWl0dGVkIGAtLW5hbWVgLiBSZWplY3RzIGR1cGxpY2F0ZXMgYW5kIGludmFsaWQgc2x1Z3MuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcGlOYW1lcyhyYXc6IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuXHRjb25zdCBuYW1lcyA9IHJhdyAhPSBudWxsICYmIHJhdy5sZW5ndGggPiAwID8gWy4uLnJhd10gOiBbREVGQVVMVF9XRUJBUElfTkFNRV07XG5cdGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Zm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG5cdFx0YXNzZXJ0VmFsaWRBcGlOYW1lKG5hbWUpO1xuXHRcdGlmIChzZWVuLmhhcyhuYW1lKSkge1xuXHRcdFx0dGhyb3cgbmV3IENyZWF0ZUNsaUVycm9yKGBEdXBsaWNhdGUgQVBJIG5hbWUgXCIke25hbWV9XCIuYCk7XG5cdFx0fVxuXHRcdHNlZW4uYWRkKG5hbWUpO1xuXHR9XG5cdHJldHVybiBuYW1lcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVjb2hlcmVXb3Jrc3BhY2UoZGlyOiBzdHJpbmcpOiBib29sZWFuIHtcblx0dHJ5IHtcblx0XHRjb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhqb2luKGRpciwgXCJwYWNrYWdlLmpzb25cIiksIFwidXRmOFwiKSkgYXMge1xuXHRcdFx0c2NyaXB0cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdFx0fTtcblx0XHRjb25zdCBidWlsZCA9IHBrZy5zY3JpcHRzPy5idWlsZDtcblx0XHRyZXR1cm4gdHlwZW9mIGJ1aWxkID09PSBcInN0cmluZ1wiICYmIGJ1aWxkLmluY2x1ZGVzKFwiZm9yZ2VcIik7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG4vKiogRGlyZWN0b3J5IG5hbWVzIHVuZGVyIGBwcm9qZWN0cy9gIHRoYXQgYWxyZWFkeSBoYXZlIGEgYHBhY2thZ2UuanNvbmAuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdEV4aXN0aW5nQXBpTmFtZXMoZGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdGNvbnN0IHByb2plY3RzRGlyID0gam9pbihkaXIsIFwicHJvamVjdHNcIik7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHJlYWRkaXJTeW5jKHByb2plY3RzRGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSlcblx0XHRcdC5maWx0ZXIoXG5cdFx0XHRcdChlbnRyeSkgPT5cblx0XHRcdFx0XHRlbnRyeS5pc0RpcmVjdG9yeSgpICYmIGV4aXN0c1N5bmMoam9pbihwcm9qZWN0c0RpciwgZW50cnkubmFtZSwgXCJwYWNrYWdlLmpzb25cIikpLFxuXHRcdFx0KVxuXHRcdFx0Lm1hcCgoZW50cnkpID0+IGVudHJ5Lm5hbWUpXG5cdFx0XHQuc29ydCgpO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuLyoqIGBiaWxsaW5nYCDihpIgYEJJTExJTkdgLCBgYWRtaW4tYXBpYCDihpIgYEFETUlOX0FQSWAg4oCUIHByZWZpeCBmb3IgYHtQUkVGSVh9X0RCX0hPU1RgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaUVudlByZWZpeChhcGlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gYXBpTmFtZS5yZXBsYWNlKC8tL2csIFwiX1wiKS50b1VwcGVyQ2FzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBpTmFtZUZyb21Qcm9qZWN0RGlyKGRpcjogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3Qgc2xhc2ggPSBkaXIubGFzdEluZGV4T2YoXCIvXCIpO1xuXHRyZXR1cm4gc2xhc2ggPj0gMCA/IGRpci5zbGljZShzbGFzaCArIDEpIDogZGlyO1xufVxuIl0sIm5hbWVzIjpbIkFQSV9OQU1FX1BBVFRFUk4iLCJDcmVhdGVDbGlFcnJvciIsImFwaUVudlByZWZpeCIsImFwaU5hbWVGcm9tUHJvamVjdERpciIsImFzc2VydFZhbGlkQXBpTmFtZSIsImlzRGVjb2hlcmVXb3Jrc3BhY2UiLCJsaXN0RXhpc3RpbmdBcGlOYW1lcyIsInBhcnNlQXBpTmFtZXMiLCJFcnJvciIsIm1lc3NhZ2UiLCJuYW1lIiwidGVzdCIsInJhdyIsIm5hbWVzIiwibGVuZ3RoIiwiREVGQVVMVF9XRUJBUElfTkFNRSIsInNlZW4iLCJTZXQiLCJoYXMiLCJhZGQiLCJkaXIiLCJwa2ciLCJKU09OIiwicGFyc2UiLCJyZWFkRmlsZVN5bmMiLCJqb2luIiwiYnVpbGQiLCJzY3JpcHRzIiwiaW5jbHVkZXMiLCJwcm9qZWN0c0RpciIsInJlYWRkaXJTeW5jIiwid2l0aEZpbGVUeXBlcyIsImZpbHRlciIsImVudHJ5IiwiaXNEaXJlY3RvcnkiLCJleGlzdHNTeW5jIiwibWFwIiwic29ydCIsImFwaU5hbWUiLCJyZXBsYWNlIiwidG9VcHBlckNhc2UiLCJzbGFzaCIsImxhc3RJbmRleE9mIiwic2xpY2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBS2FBO2VBQUFBOztRQUVBQztlQUFBQTs7UUEwREdDO2VBQUFBOztRQUlBQztlQUFBQTs7UUF2REFDO2VBQUFBOztRQXNCQUM7ZUFBQUE7O1FBYUFDO2VBQUFBOztRQTFCQUM7ZUFBQUE7Ozt3QkF2QnNDOzBCQUNqQzt1QkFDZTtBQUc3QixNQUFNUCxtQkFBbUI7QUFFekIsTUFBTUMsdUJBQXVCTztJQUNuQyxZQUFtQkMsT0FBZSxDQUFFO1FBQ25DLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNDLElBQUksR0FBRztJQUNiO0FBQ0Q7QUFFTyxTQUFTTixtQkFBbUJNLElBQVk7SUFDOUMsSUFBSSxDQUFDVixpQkFBaUJXLElBQUksQ0FBQ0QsT0FBTztRQUNqQyxNQUFNLElBQUlULGVBQ1QsQ0FBQyxrQkFBa0IsRUFBRVMsS0FBSyxnR0FBZ0csQ0FBQztJQUU3SDtBQUNEO0FBR08sU0FBU0gsY0FBY0ssR0FBa0M7SUFDL0QsTUFBTUMsUUFBUUQsT0FBTyxRQUFRQSxJQUFJRSxNQUFNLEdBQUcsSUFBSTtXQUFJRjtLQUFJLEdBQUc7UUFBQ0csMEJBQW1CO0tBQUM7SUFDOUUsTUFBTUMsT0FBTyxJQUFJQztJQUNqQixLQUFLLE1BQU1QLFFBQVFHLE1BQU87UUFDekJULG1CQUFtQk07UUFDbkIsSUFBSU0sS0FBS0UsR0FBRyxDQUFDUixPQUFPO1lBQ25CLE1BQU0sSUFBSVQsZUFBZSxDQUFDLG9CQUFvQixFQUFFUyxLQUFLLEVBQUUsQ0FBQztRQUN6RDtRQUNBTSxLQUFLRyxHQUFHLENBQUNUO0lBQ1Y7SUFDQSxPQUFPRztBQUNSO0FBRU8sU0FBU1Isb0JBQW9CZSxHQUFXO0lBQzlDLElBQUk7UUFDSCxNQUFNQyxNQUFNQyxLQUFLQyxLQUFLLENBQUNDLElBQUFBLG9CQUFZLEVBQUNDLElBQUFBLGNBQUksRUFBQ0wsS0FBSyxpQkFBaUI7UUFHL0QsTUFBTU0sUUFBUUwsSUFBSU0sT0FBTyxFQUFFRDtRQUMzQixPQUFPLE9BQU9BLFVBQVUsWUFBWUEsTUFBTUUsUUFBUSxDQUFDO0lBQ3BELEVBQUUsT0FBTTtRQUNQLE9BQU87SUFDUjtBQUNEO0FBR08sU0FBU3RCLHFCQUFxQmMsR0FBVztJQUMvQyxNQUFNUyxjQUFjSixJQUFBQSxjQUFJLEVBQUNMLEtBQUs7SUFDOUIsSUFBSTtRQUNILE9BQU9VLElBQUFBLG1CQUFXLEVBQUNELGFBQWE7WUFBRUUsZUFBZTtRQUFLLEdBQ3BEQyxNQUFNLENBQ04sQ0FBQ0MsUUFDQUEsTUFBTUMsV0FBVyxNQUFNQyxJQUFBQSxrQkFBVSxFQUFDVixJQUFBQSxjQUFJLEVBQUNJLGFBQWFJLE1BQU12QixJQUFJLEVBQUUsa0JBRWpFMEIsR0FBRyxDQUFDLENBQUNILFFBQVVBLE1BQU12QixJQUFJLEVBQ3pCMkIsSUFBSTtJQUNQLEVBQUUsT0FBTTtRQUNQLE9BQU8sRUFBRTtJQUNWO0FBQ0Q7QUFHTyxTQUFTbkMsYUFBYW9DLE9BQWU7SUFDM0MsT0FBT0EsUUFBUUMsT0FBTyxDQUFDLE1BQU0sS0FBS0MsV0FBVztBQUM5QztBQUVPLFNBQVNyQyxzQkFBc0JpQixHQUFXO0lBQ2hELE1BQU1xQixRQUFRckIsSUFBSXNCLFdBQVcsQ0FBQztJQUM5QixPQUFPRCxTQUFTLElBQUlyQixJQUFJdUIsS0FBSyxDQUFDRixRQUFRLEtBQUtyQjtBQUM1QyJ9
@@ -1,4 +1,4 @@
1
- /** Relative path of the scaffolded API project inside the monorepo. */ "use strict";
1
+ /** Default API project slug when `--name` is omitted. */ "use strict";
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
@@ -9,14 +9,42 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
+ get DEFAULT_WEBAPI_NAME () {
13
+ return DEFAULT_WEBAPI_NAME;
14
+ },
12
15
  get WEBAPI_PROJECT_DIR () {
13
16
  return WEBAPI_PROJECT_DIR;
14
17
  },
15
18
  get WEBAPI_RELEASE_ENTRY () {
16
19
  return WEBAPI_RELEASE_ENTRY;
20
+ },
21
+ get webapiPackageName () {
22
+ return webapiPackageName;
23
+ },
24
+ get webapiPort () {
25
+ return webapiPort;
26
+ },
27
+ get webapiProjectDir () {
28
+ return webapiProjectDir;
29
+ },
30
+ get webapiReleaseEntry () {
31
+ return webapiReleaseEntry;
17
32
  }
18
33
  });
19
- const WEBAPI_PROJECT_DIR = "projects/api";
20
- const WEBAPI_RELEASE_ENTRY = `dist/release/${WEBAPI_PROJECT_DIR}/es6/src/main.js`;
34
+ const DEFAULT_WEBAPI_NAME = "api";
35
+ function webapiProjectDir(name) {
36
+ return `projects/${name}`;
37
+ }
38
+ function webapiReleaseEntry(name) {
39
+ return `dist/release/${webapiProjectDir(name)}/es6/src/main.js`;
40
+ }
41
+ function webapiPackageName(workspaceName, apiName) {
42
+ return `@${workspaceName}/${apiName}`;
43
+ }
44
+ function webapiPort(index) {
45
+ return 3000 + index;
46
+ }
47
+ const WEBAPI_PROJECT_DIR = webapiProjectDir(DEFAULT_WEBAPI_NAME);
48
+ const WEBAPI_RELEASE_ENTRY = webapiReleaseEntry(DEFAULT_WEBAPI_NAME);
21
49
 
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NvbnN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBSZWxhdGl2ZSBwYXRoIG9mIHRoZSBzY2FmZm9sZGVkIEFQSSBwcm9qZWN0IGluc2lkZSB0aGUgbW9ub3JlcG8uICovXG5leHBvcnQgY29uc3QgV0VCQVBJX1BST0pFQ1RfRElSID0gXCJwcm9qZWN0cy9hcGlcIjtcblxuLyoqXG4gKiBGb3JnZSByZWxlYXNlIGVudHJ5IGZvciB0aGUgc2NhZmZvbGRlZCBBUEkgKGBwYWNrOiB0cnVlYCDihpIgcGVyLXRhcmdldCBvdXREaXIpLlxuICogS2VlcCBpbiBzeW5jIHdpdGggcm9vdCBgcGFja2FnZS5qc29uYCBgXCJzdGFydFwiYCBhbmQgdGhlIHByb2R1Y3Rpb24gRG9ja2VyZmlsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFdFQkFQSV9SRUxFQVNFX0VOVFJZID0gYGRpc3QvcmVsZWFzZS8ke1dFQkFQSV9QUk9KRUNUX0RJUn0vZXM2L3NyYy9tYWluLmpzYDtcbiJdLCJuYW1lcyI6WyJXRUJBUElfUFJPSkVDVF9ESVIiLCJXRUJBUElfUkVMRUFTRV9FTlRSWSJdLCJtYXBwaW5ncyI6IkFBQUEscUVBQXFFOzs7Ozs7Ozs7OztRQUN4REE7ZUFBQUE7O1FBTUFDO2VBQUFBOzs7QUFOTixNQUFNRCxxQkFBcUI7QUFNM0IsTUFBTUMsdUJBQXVCLENBQUMsYUFBYSxFQUFFRCxtQkFBbUIsZ0JBQWdCLENBQUMifQ==
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NvbnN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBEZWZhdWx0IEFQSSBwcm9qZWN0IHNsdWcgd2hlbiBgLS1uYW1lYCBpcyBvbWl0dGVkLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0VCQVBJX05BTUUgPSBcImFwaVwiO1xuXG4vKiogUmVsYXRpdmUgcGF0aCBvZiBhbiBBUEkgcHJvamVjdCBpbnNpZGUgdGhlIG1vbm9yZXBvLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdlYmFwaVByb2plY3REaXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGBwcm9qZWN0cy8ke25hbWV9YDtcbn1cblxuLyoqXG4gKiBGb3JnZSByZWxlYXNlIGVudHJ5IGZvciBhIHNjYWZmb2xkZWQgQVBJIChgcGFjazogdHJ1ZWAg4oaSIHBlci10YXJnZXQgb3V0RGlyKS5cbiAqIEtlZXAgaW4gc3luYyB3aXRoIHJvb3QgYHBhY2thZ2UuanNvbmAgYFwic3RhcnRcImAgLyBgXCJzdGFydDo8bmFtZT5cImAgYW5kIERvY2tlcmZpbGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2ViYXBpUmVsZWFzZUVudHJ5KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBgZGlzdC9yZWxlYXNlLyR7d2ViYXBpUHJvamVjdERpcihuYW1lKX0vZXM2L3NyYy9tYWluLmpzYDtcbn1cblxuLyoqIG5wbSBwYWNrYWdlIG5hbWUgZm9yIGEgc2NhZmZvbGRlZCBBUEkgKGBmbHV4IHNlcnZlIC0tcHJvamVjdGApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdlYmFwaVBhY2thZ2VOYW1lKHdvcmtzcGFjZU5hbWU6IHN0cmluZywgYXBpTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGBAJHt3b3Jrc3BhY2VOYW1lfS8ke2FwaU5hbWV9YDtcbn1cblxuLyoqIExvY2FsIGxpc3RlbiBwb3J0IGZvciB0aGUgbnRoIEFQSSAoMC1iYXNlZCkuIFByb2R1Y3Rpb24gdXNlcyBgUE9SVGAuICovXG5leHBvcnQgZnVuY3Rpb24gd2ViYXBpUG9ydChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcblx0cmV0dXJuIDMwMDAgKyBpbmRleDtcbn1cblxuLyoqIEBkZXByZWNhdGVkIFVzZSBgd2ViYXBpUHJvamVjdERpcihuYW1lKWAuIERlZmF1bHQgcGF0aCBmb3IgdGhlIGZpcnN0IEFQSS4gKi9cbmV4cG9ydCBjb25zdCBXRUJBUElfUFJPSkVDVF9ESVIgPSB3ZWJhcGlQcm9qZWN0RGlyKERFRkFVTFRfV0VCQVBJX05BTUUpO1xuXG4vKiogQGRlcHJlY2F0ZWQgVXNlIGB3ZWJhcGlSZWxlYXNlRW50cnkobmFtZSlgLiBEZWZhdWx0IHN0YXJ0IGVudHJ5IGZvciB0aGUgZmlyc3QgQVBJLiAqL1xuZXhwb3J0IGNvbnN0IFdFQkFQSV9SRUxFQVNFX0VOVFJZID0gd2ViYXBpUmVsZWFzZUVudHJ5KERFRkFVTFRfV0VCQVBJX05BTUUpO1xuIl0sIm5hbWVzIjpbIkRFRkFVTFRfV0VCQVBJX05BTUUiLCJXRUJBUElfUFJPSkVDVF9ESVIiLCJXRUJBUElfUkVMRUFTRV9FTlRSWSIsIndlYmFwaVBhY2thZ2VOYW1lIiwid2ViYXBpUG9ydCIsIndlYmFwaVByb2plY3REaXIiLCJ3ZWJhcGlSZWxlYXNlRW50cnkiLCJuYW1lIiwid29ya3NwYWNlTmFtZSIsImFwaU5hbWUiLCJpbmRleCJdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEOzs7Ozs7Ozs7OztRQUMxQ0E7ZUFBQUE7O1FBMEJBQztlQUFBQTs7UUFHQUM7ZUFBQUE7O1FBYkdDO2VBQUFBOztRQUtBQztlQUFBQTs7UUFsQkFDO2VBQUFBOztRQVFBQztlQUFBQTs7O0FBWFQsTUFBTU4sc0JBQXNCO0FBRzVCLFNBQVNLLGlCQUFpQkUsSUFBWTtJQUM1QyxPQUFPLENBQUMsU0FBUyxFQUFFQSxNQUFNO0FBQzFCO0FBTU8sU0FBU0QsbUJBQW1CQyxJQUFZO0lBQzlDLE9BQU8sQ0FBQyxhQUFhLEVBQUVGLGlCQUFpQkUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRTtBQUdPLFNBQVNKLGtCQUFrQkssYUFBcUIsRUFBRUMsT0FBZTtJQUN2RSxPQUFPLENBQUMsQ0FBQyxFQUFFRCxjQUFjLENBQUMsRUFBRUMsU0FBUztBQUN0QztBQUdPLFNBQVNMLFdBQVdNLEtBQWE7SUFDdkMsT0FBTyxPQUFPQTtBQUNmO0FBR08sTUFBTVQscUJBQXFCSSxpQkFBaUJMO0FBRzVDLE1BQU1FLHVCQUF1QkksbUJBQW1CTiJ9
@@ -19,6 +19,7 @@ _export(exports, {
19
19
  return scaffoldApi;
20
20
  }
21
21
  });
22
+ const _nodefs = require("node:fs");
22
23
  const _nodepath = require("node:path");
23
24
  const _composemodel = require("../models/compose.model.js");
24
25
  const _configyamlmodel = require("../models/config-yaml.model.js");
@@ -32,6 +33,7 @@ const _projectmodel = require("../models/project.model.js");
32
33
  const _tsconfigmodel = require("../models/tsconfig.model.js");
33
34
  const _vscodesettingsmodel = require("../models/vscode-settings.model.js");
34
35
  const _scaffoldservice = require("../services/scaffold.service.js");
36
+ const _apiname = require("./api-name.js");
35
37
  const _const1 = require("./const.js");
36
38
  const _authfeature = require("./features/auth.feature.js");
37
39
  const _databasefeature = require("./features/database.feature.js");
@@ -53,10 +55,14 @@ const features = [
53
55
  async function scaffoldApi(cliOptions) {
54
56
  const targetDir = (0, _nodepath.resolve)(cliOptions.d ?? ".");
55
57
  const projectName = cliOptions.projectName?.trim() || process.env.DECOHERE_PROJECT_NAME?.trim() || (0, _nodepath.basename)(targetDir);
56
- const workspace = createWorkspace(targetDir, projectName);
57
- await _scaffoldservice.ScaffoldService.scaffold(workspace, cliOptions, features);
58
+ const names = (0, _apiname.parseApiNames)(cliOptions.names);
59
+ const workspace = cliOptions.add ? createAddWorkspace(targetDir, projectName, names) : createWorkspace(targetDir, projectName, names);
60
+ await _scaffoldservice.ScaffoldService.scaffold(workspace, {
61
+ ...cliOptions,
62
+ names
63
+ }, features);
58
64
  }
59
- function createWorkspace(targetDir, projectName) {
65
+ function createWorkspace(targetDir, projectName, apiNames) {
60
66
  const monoRepo = new _projectmodel.MonoRepoScaffold();
61
67
  monoRepo.targetDir = targetDir;
62
68
  monoRepo.setName(projectName);
@@ -79,21 +85,27 @@ function createWorkspace(targetDir, projectName) {
79
85
  name
80
86
  ]
81
87
  }).addVolume("webapi-node-modules");
82
- const devContainer = new _devcontainermodel.DevContainer().addExtension("biomejs.biome", "vitest.explorer").forwardPort(3000).setPortAttributes(3000, {
83
- label: "API",
84
- requireLocalPort: true
85
- }).setInitializeCommand("bash .devcontainer/initialize.sh").setPostStartCommand("bash .devcontainer/post-start.sh").useCompose();
88
+ const devContainer = new _devcontainermodel.DevContainer().addExtension("biomejs.biome", "vitest.explorer").setInitializeCommand("bash .devcontainer/initialize.sh").setPostStartCommand("bash .devcontainer/post-start.sh").useCompose();
89
+ for (const [index, apiName] of apiNames.entries()){
90
+ const port = (0, _const1.webapiPort)(index);
91
+ devContainer.forwardPort(port);
92
+ devContainer.setPortAttributes(port, {
93
+ label: apiName === _const1.DEFAULT_WEBAPI_NAME ? "API" : apiName,
94
+ requireLocalPort: true
95
+ });
96
+ }
86
97
  // Workspace-level models (repo root)
87
98
  monoRepo.addModel(compose);
88
99
  monoRepo.addModel(devContainer);
89
100
  monoRepo.addModel(new _webapiimagemodel.WebapiDevContainer());
90
- monoRepo.addModel(new _productiondockerfilemodel.WebapiProductionDockerfile());
101
+ monoRepo.addModel(new _productiondockerfilemodel.WebapiProductionDockerfile(apiNames));
91
102
  monoRepo.addModel(new _githubcimodel.GithubCiWorkflows());
92
103
  monoRepo.addModel(new _vscodesettingsmodel.VSCodeSettings(name));
93
- monoRepo.addModel(new _launchjsonmodel.LaunchJson());
104
+ monoRepo.addModel(new _launchjsonmodel.LaunchJson(apiNames));
94
105
  monoRepo.addModel(new _tsconfigmodel.TsConfig());
95
106
  monoRepo.addModel(new _packagejsonmodel.PackageJson(`${name}.api`, {
96
- startEntry: _const1.WEBAPI_RELEASE_ENTRY
107
+ apiNames,
108
+ workspaceName: name
97
109
  }));
98
110
  monoRepo.addModel(new _configyamlmodel.ConfigYaml(_const.WELL_KNOWN_FILES.CONFIG_YAML, "config/config.yaml", ""));
99
111
  monoRepo.addModel(new _configyamlmodel.ConfigYaml(_const.WELL_KNOWN_FILES.CONFIG_DEV_YAML, "config/config.dev.yaml", ""));
@@ -225,17 +237,49 @@ function createWorkspace(targetDir, projectName) {
225
237
  }
226
238
  ]
227
239
  });
228
- // Project-level models (paths relative to projects/api)
229
- const apiProject = new _projectmodel.ProjectScaffold(_const1.WEBAPI_PROJECT_DIR);
230
- apiProject.addModel(new _apipackagejsonmodel.ApiPackageJson(name));
231
- apiProject.addModel(new _mainsourcefilemodel.MainSourceFile(`${name}.api`));
240
+ for (const apiName of apiNames){
241
+ addApiProject(monoRepo, name, apiName);
242
+ }
243
+ return monoRepo;
244
+ }
245
+ function createAddWorkspace(targetDir, projectName, apiNames) {
246
+ if (!(0, _apiname.isDecohereWorkspace)(targetDir)) {
247
+ throw new _apiname.CreateCliError(`Not a Decohere workspace: ${targetDir}. Scaffold one first with \`npx @decohere/create webapi\`.`);
248
+ }
249
+ const existing = (0, _apiname.listExistingApiNames)(targetDir);
250
+ for (const apiName of apiNames){
251
+ if (existing.includes(apiName)) {
252
+ throw new _apiname.CreateCliError(`API "${apiName}" already exists at ${(0, _const1.webapiProjectDir)(apiName)}.`);
253
+ }
254
+ }
255
+ const monoRepo = new _projectmodel.MonoRepoScaffold();
256
+ monoRepo.targetDir = targetDir;
257
+ monoRepo.setName(projectName);
258
+ const name = monoRepo.name;
259
+ const pkg = _packagejsonmodel.PackageJson.fromFile((0, _nodepath.join)(targetDir, "package.json"));
260
+ monoRepo.addModel(pkg);
261
+ monoRepo.addModel((0, _nodefs.existsSync)((0, _nodepath.join)(targetDir, ".env")) ? _envfilemodel.EnvFile.fromFile((0, _nodepath.join)(targetDir, ".env")) : new _envfilemodel.EnvFile());
262
+ monoRepo.addModel((0, _nodefs.existsSync)((0, _nodepath.join)(targetDir, "config/config.yaml")) ? _configyamlmodel.ConfigYaml.fromFile(_const.WELL_KNOWN_FILES.CONFIG_YAML, "config/config.yaml", (0, _nodepath.join)(targetDir, "config/config.yaml")) : new _configyamlmodel.ConfigYaml(_const.WELL_KNOWN_FILES.CONFIG_YAML, "config/config.yaml", ""));
263
+ monoRepo.addModel((0, _nodefs.existsSync)((0, _nodepath.join)(targetDir, "config/config.dev.yaml")) ? _configyamlmodel.ConfigYaml.fromFile(_const.WELL_KNOWN_FILES.CONFIG_DEV_YAML, "config/config.dev.yaml", (0, _nodepath.join)(targetDir, "config/config.dev.yaml")) : new _configyamlmodel.ConfigYaml(_const.WELL_KNOWN_FILES.CONFIG_DEV_YAML, "config/config.dev.yaml", ""));
264
+ for (const [offset, apiName] of apiNames.entries()){
265
+ const port = (0, _const1.webapiPort)(existing.length + offset);
266
+ pkg.addScript(`start:${apiName}`, `node ${(0, _const1.webapiReleaseEntry)(apiName)}`);
267
+ pkg.addScript(`dev:${apiName}`, `PORT=${port} flux serve --project ${(0, _const1.webapiPackageName)(name, apiName)}`);
268
+ addApiProject(monoRepo, name, apiName);
269
+ }
270
+ monoRepo.addModel(new _productiondockerfilemodel.WebapiProductionDockerfile(apiNames, {
271
+ namedOnly: true
272
+ }));
273
+ return monoRepo;
274
+ }
275
+ function addApiProject(monoRepo, workspaceName, apiName) {
276
+ const apiProject = new _projectmodel.ProjectScaffold((0, _const1.webapiProjectDir)(apiName));
277
+ apiProject.addModel(new _apipackagejsonmodel.ApiPackageJson(workspaceName, apiName));
278
+ apiProject.addModel(new _mainsourcefilemodel.MainSourceFile(`${workspaceName}.${apiName}`));
232
279
  apiProject.addModel(new _controllersourcefilemodel.ControllerSourceFile());
233
- // SampleService + SampleConfig are part of the core scaffold — HelloController
234
- // injects SampleService to demonstrate config-driven behaviour out of the box.
235
280
  apiProject.addFile(new _samplefilesmodel.SampleConfigModel());
236
281
  apiProject.addFile(new _samplefilesmodel.SampleServiceModel());
237
282
  monoRepo.addProject(apiProject);
238
- return monoRepo;
239
283
  }
240
284
 
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NyZWF0ZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYmFzZW5hbWUsIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBEb2NrZXJDb21wb3NlIH0gZnJvbSBcIi4uL21vZGVscy9jb21wb3NlLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBDb25maWdZYW1sIH0gZnJvbSBcIi4uL21vZGVscy9jb25maWcteWFtbC5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuLi9tb2RlbHMvY29uc3QuanNcIjtcbmltcG9ydCB7IERldkNvbnRhaW5lciB9IGZyb20gXCIuLi9tb2RlbHMvZGV2LWNvbnRhaW5lci5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgRW52RmlsZSB9IGZyb20gXCIuLi9tb2RlbHMvZW52LWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IEdpdGlnbm9yZSB9IGZyb20gXCIuLi9tb2RlbHMvZ2l0aWdub3JlLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBMYXVuY2hKc29uIH0gZnJvbSBcIi4uL21vZGVscy9sYXVuY2gtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgUGFja2FnZUpzb24gfSBmcm9tIFwiLi4vbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTW9ub1JlcG9TY2FmZm9sZCwgUHJvamVjdFNjYWZmb2xkIH0gZnJvbSBcIi4uL21vZGVscy9wcm9qZWN0Lm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBUc0NvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvdHNjb25maWcubW9kZWwuanNcIjtcbmltcG9ydCB7IFZTQ29kZVNldHRpbmdzIH0gZnJvbSBcIi4uL21vZGVscy92c2NvZGUtc2V0dGluZ3MubW9kZWwuanNcIjtcbmltcG9ydCB7IFNjYWZmb2xkU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9zY2FmZm9sZC5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBXRUJBUElfUFJPSkVDVF9ESVIsIFdFQkFQSV9SRUxFQVNFX0VOVFJZIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB7IEF1dGhGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvYXV0aC5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBEYXRhYmFzZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9kYXRhYmFzZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBGaW5hbGl6ZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9maW5hbGl6ZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBQb3N0bWFuRmVhdHVyZSB9IGZyb20gXCIuL2ZlYXR1cmVzL3Bvc3RtYW4uZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgQXBpUGFja2FnZUpzb24gfSBmcm9tIFwiLi9tb2RlbHMvYXBpLXBhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgQ29udHJvbGxlclNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvY29udHJvbGxlci1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgR2l0aHViQ2lXb3JrZmxvd3MgfSBmcm9tIFwiLi9tb2RlbHMvZ2l0aHViLWNpLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBNYWluU291cmNlRmlsZSB9IGZyb20gXCIuL21vZGVscy9tYWluLXNvdXJjZS1maWxlLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXZWJhcGlQcm9kdWN0aW9uRG9ja2VyZmlsZSB9IGZyb20gXCIuL21vZGVscy9wcm9kdWN0aW9uLWRvY2tlcmZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IFNhbXBsZUNvbmZpZ01vZGVsLCBTYW1wbGVTZXJ2aWNlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvc2FtcGxlLWZpbGVzLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXZWJhcGlEZXZDb250YWluZXIgfSBmcm9tIFwiLi9tb2RlbHMvd2ViYXBpLWltYWdlLm1vZGVsLmpzXCI7XG5cbmV4cG9ydCB7IFdFQkFQSV9QUk9KRUNUX0RJUiwgV0VCQVBJX1JFTEVBU0VfRU5UUlkgfSBmcm9tIFwiLi9jb25zdC5qc1wiO1xuXG5leHBvcnQgdHlwZSBBcGlPcHRpb25zID0ge1xuXHRkPzogc3RyaW5nO1xuXHQvKiogSG9zdCBwcm9qZWN0IG5hbWUgKGRpcmVjdG9yeSBiYXNlbmFtZSkuIFJlcXVpcmVkIHdoZW4gc2NhZmZvbGRpbmcgaW50byBgL3dvcmtzcGFjZWAuICovXG5cdHByb2plY3ROYW1lPzogc3RyaW5nO1xuXHRhdXRoUHJvdmlkZXI/OiBcImF1dGgwXCIgfCBcIm5vbmVcIjtcblx0ZGF0YWJhc2VQcm92aWRlcj86IFwibm9uZVwiIHwgXCJwb3N0Z3Jlcy90eXBlb3JtXCI7XG5cdHBvc3RtYW5Qcm92aWRlcj86IFwiYXBpXCIgfCBcImxvY2FsXCIgfCBcIm5vbmVcIjtcblx0aW5zdGFsbERlcGVuZGVuY2llcz86IFwieWVzXCIgfCBcIm5vXCI7XG59O1xuXG5jb25zdCBmZWF0dXJlcyA9IFtEYXRhYmFzZUZlYXR1cmUsIEF1dGhGZWF0dXJlLCBQb3N0bWFuRmVhdHVyZSwgRmluYWxpemVGZWF0dXJlXTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkQXBpKGNsaU9wdGlvbnM6IEFwaU9wdGlvbnMpIHtcblx0Y29uc3QgdGFyZ2V0RGlyID0gcmVzb2x2ZShjbGlPcHRpb25zLmQgPz8gXCIuXCIpO1xuXHRjb25zdCBwcm9qZWN0TmFtZSA9XG5cdFx0Y2xpT3B0aW9ucy5wcm9qZWN0TmFtZT8udHJpbSgpIHx8XG5cdFx0cHJvY2Vzcy5lbnYuREVDT0hFUkVfUFJPSkVDVF9OQU1FPy50cmltKCkgfHxcblx0XHRiYXNlbmFtZSh0YXJnZXREaXIpO1xuXHRjb25zdCB3b3Jrc3BhY2UgPSBjcmVhdGVXb3Jrc3BhY2UodGFyZ2V0RGlyLCBwcm9qZWN0TmFtZSk7XG5cdGF3YWl0IFNjYWZmb2xkU2VydmljZS5zY2FmZm9sZCh3b3Jrc3BhY2UsIGNsaU9wdGlvbnMsIGZlYXR1cmVzKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlKHRhcmdldERpcjogc3RyaW5nLCBwcm9qZWN0TmFtZTogc3RyaW5nKTogTW9ub1JlcG9TY2FmZm9sZCB7XG5cdGNvbnN0IG1vbm9SZXBvID0gbmV3IE1vbm9SZXBvU2NhZmZvbGQoKTtcblx0bW9ub1JlcG8udGFyZ2V0RGlyID0gdGFyZ2V0RGlyO1xuXHRtb25vUmVwby5zZXROYW1lKHByb2plY3ROYW1lKTtcblx0Y29uc3QgbmFtZSA9IG1vbm9SZXBvLm5hbWU7XG5cblx0Y29uc3QgY29tcG9zZSA9IG5ldyBEb2NrZXJDb21wb3NlKClcblx0XHQuc2V0UHJvamVjdE5hbWUobmFtZSlcblx0XHQuYWRkTmV0d29yayhuYW1lLCB7IG5hbWU6IGBzYW1wbGVzLSR7bmFtZX1gIH0pXG5cdFx0LmFkZFNlcnZpY2UoXCJkZXZjb250YWluZXJcIiwge1xuXHRcdFx0YnVpbGQ6IFwiLlwiLFxuXHRcdFx0dm9sdW1lczogW1xuXHRcdFx0XHQvLyBXb3Jrc3BhY2UtbG9jYWwgKGNyZWF0ZWQgYnkgaW5pdGlhbGl6ZS5zaCBhcyB0aGUgaG9zdCB1c2VyKS5cblx0XHRcdFx0Ly8gRG8gTk9UIGJpbmQgJHtIT01FfS8ubnBtLy4uLiDigJQgRG9ja2VyIGNyZWF0ZXMgbWlzc2luZyBob3N0IHBhdGhzIGFzIHJvb3QuXG5cdFx0XHRcdFwiLi9ucG0tYXV0aDovaG9tZS9ub2RlLy5ucG0tY29uZmlnXCIsXG5cdFx0XHRcdFwid2ViYXBpLW5vZGUtbW9kdWxlczovd29ya3NwYWNlL25vZGVfbW9kdWxlc1wiLFxuXHRcdFx0XSxcblx0XHRcdGVudmlyb25tZW50OiB7IE5QTV9DT05GSUdfVVNFUkNPTkZJRzogXCIvaG9tZS9ub2RlLy5ucG0tY29uZmlnLy5ucG1yY1wiIH0sXG5cdFx0XHRjb21tYW5kOiBcInNsZWVwIGluZmluaXR5XCIsXG5cdFx0XHRuZXR3b3JrczogW25hbWVdLFxuXHRcdH0pXG5cdFx0LmFkZFZvbHVtZShcIndlYmFwaS1ub2RlLW1vZHVsZXNcIik7XG5cblx0Y29uc3QgZGV2Q29udGFpbmVyID0gbmV3IERldkNvbnRhaW5lcigpXG5cdFx0LmFkZEV4dGVuc2lvbihcImJpb21lanMuYmlvbWVcIiwgXCJ2aXRlc3QuZXhwbG9yZXJcIilcblx0XHQuZm9yd2FyZFBvcnQoMzAwMClcblx0XHQuc2V0UG9ydEF0dHJpYnV0ZXMoMzAwMCwgeyBsYWJlbDogXCJBUElcIiwgcmVxdWlyZUxvY2FsUG9ydDogdHJ1ZSB9KVxuXHRcdC5zZXRJbml0aWFsaXplQ29tbWFuZChcImJhc2ggLmRldmNvbnRhaW5lci9pbml0aWFsaXplLnNoXCIpXG5cdFx0LnNldFBvc3RTdGFydENvbW1hbmQoXCJiYXNoIC5kZXZjb250YWluZXIvcG9zdC1zdGFydC5zaFwiKVxuXHRcdC51c2VDb21wb3NlKCk7XG5cblx0Ly8gV29ya3NwYWNlLWxldmVsIG1vZGVscyAocmVwbyByb290KVxuXHRtb25vUmVwby5hZGRNb2RlbChjb21wb3NlKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwoZGV2Q29udGFpbmVyKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFdlYmFwaURldkNvbnRhaW5lcigpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFdlYmFwaVByb2R1Y3Rpb25Eb2NrZXJmaWxlKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgR2l0aHViQ2lXb3JrZmxvd3MoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBWU0NvZGVTZXR0aW5ncyhuYW1lKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBMYXVuY2hKc29uKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgVHNDb25maWcoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBQYWNrYWdlSnNvbihgJHtuYW1lfS5hcGlgLCB7IHN0YXJ0RW50cnk6IFdFQkFQSV9SRUxFQVNFX0VOVFJZIH0pKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IENvbmZpZ1lhbWwoV0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfWUFNTCwgXCJjb25maWcvY29uZmlnLnlhbWxcIiwgXCJcIikpO1xuXHRtb25vUmVwby5hZGRNb2RlbChcblx0XHRuZXcgQ29uZmlnWWFtbChXRUxMX0tOT1dOX0ZJTEVTLkNPTkZJR19ERVZfWUFNTCwgXCJjb25maWcvY29uZmlnLmRldi55YW1sXCIsIFwiXCIpLFxuXHQpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgR2l0aWdub3JlKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgRW52RmlsZSgpKTtcblxuXHQvLyBCaW9tZSBmb3JtYXR0ZXIvbGludGVyIGNvbmZpZ1xuXHRtb25vUmVwby5hZGRGaWxlKHtcblx0XHRmaWxlczogKCkgPT4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCJiaW9tZS5qc29uXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdCRzY2hlbWE6IFwiaHR0cHM6Ly9iaW9tZWpzLmRldi9zY2hlbWFzLzIuMC4wL3NjaGVtYS5qc29uXCIsXG5cdFx0XHRcdFx0XHRmaWxlczoge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlczogW1wiKiovKi50c1wiLCBcIioqLyouanNcIiwgXCIqKi8qLmpzb25cIiwgXCIqKi8qLnltbFwiLCBcIioqLyoueWFtbFwiXSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhc3Npc3Q6IHsgYWN0aW9uczogeyBzb3VyY2U6IHsgb3JnYW5pemVJbXBvcnRzOiBcIm9uXCIgfSB9IH0sXG5cdFx0XHRcdFx0XHR2Y3M6IHsgZW5hYmxlZDogdHJ1ZSwgY2xpZW50S2luZDogXCJnaXRcIiwgdXNlSWdub3JlRmlsZTogdHJ1ZSB9LFxuXHRcdFx0XHRcdFx0Zm9ybWF0dGVyOiB7XG5cdFx0XHRcdFx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFdpdGhFcnJvcnM6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluZGVudFN0eWxlOiBcInRhYlwiLFxuXHRcdFx0XHRcdFx0XHRsaW5lV2lkdGg6IDk1LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGphdmFzY3JpcHQ6IHsgcGFyc2VyOiB7IHVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkOiB0cnVlIH0gfSxcblx0XHRcdFx0XHRcdGxpbnRlcjoge1xuXHRcdFx0XHRcdFx0XHRydWxlczoge1xuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1c2VDb25zaXN0ZW50TWVtYmVyQWNjZXNzaWJpbGl0eToge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXZlbDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zOiB7IGFjY2Vzc2liaWxpdHk6IFwiZXhwbGljaXRcIiB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG92ZXJyaWRlczogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0aW5jbHVkZXM6IFtcIioqLyouanNvblwiXSxcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXR0ZXI6IHsgaW5kZW50U3R5bGU6IFwic3BhY2VcIiwgaW5kZW50V2lkdGg6IDIgfSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdDIsXG5cdFx0XHRcdCksXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdG1vbm9SZXBvLmFkZEZpbGUoe1xuXHRcdGZpbGVzOiAoKSA9PiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5kZXZjb250YWluZXIvaW5pdGlhbGl6ZS5zaFwiLFxuXHRcdFx0XHRjb250ZW50OiBbXG5cdFx0XHRcdFx0XCIjIS91c3IvYmluL2VudiBiYXNoXCIsXG5cdFx0XHRcdFx0XCIjIFJ1bnMgb24gdGhlIGhvc3QgYmVmb3JlIHRoZSBjb250YWluZXIgaXMgY3JlYXRlZCAoZGV2Y29udGFpbmVyIGluaXRpYWxpemVDb21tYW5kKS5cIixcblx0XHRcdFx0XHRcIiMgQ3JlYXRlcyBucG0tYXV0aCBhcyB0aGUgaG9zdCB1c2VyIHNvIHRoZSBiaW5kIG1vdW50IGlzIG5vdCByb290LW93bmVkLlwiLFxuXHRcdFx0XHRcdFwiIyBEbyBub3Qgc2NhZmZvbGQgbnBtLWF1dGgvIGZyb20gdGhlIGJ1aWxkZXIgKHRoYXQgcnVucyBhcyByb290KS5cIixcblx0XHRcdFx0XHRcInNldCAtZXVvIHBpcGVmYWlsXCIsXG5cdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XHQncm9vdD1cIiQoY2QgXCIkKGRpcm5hbWUgXCIke0JBU0hfU09VUkNFWzBdfVwiKS8uLlwiICYmIHB3ZClcIicsXG5cdFx0XHRcdFx0J25wbV9kaXI9XCIkcm9vdC8uZGV2Y29udGFpbmVyL25wbS1hdXRoXCInLFxuXHRcdFx0XHRcdCdpZiAhIG1rZGlyIC1wIFwiJG5wbV9kaXJcIiAyPi9kZXYvbnVsbDsgdGhlbicsXG5cdFx0XHRcdFx0J1xcdGVjaG8gXCJDYW5ub3QgY3JlYXRlICRucG1fZGlyIChwZXJtaXNzaW9uIGRlbmllZCkuXCIgPiYyJyxcblx0XHRcdFx0XHQnXFx0ZWNobyBcIlRoZSBzY2FmZm9sZCBjb250YWluZXIgbGlrZWx5IGxlZnQgLmRldmNvbnRhaW5lciByb290LW93bmVkLiBGaXggd2l0aDpcIiA+JjInLFxuXHRcdFx0XHRcdCdcXHRlY2hvIFwiICBzdWRvIGNob3duIC1SIFxcXFxcIiRVU0VSOiRVU0VSXFxcXFwiIFxcXFxcIiRyb290XFxcXFwiXCIgPiYyJyxcblx0XHRcdFx0XHRcIlxcdGV4aXQgMVwiLFxuXHRcdFx0XHRcdFwiZmlcIixcblx0XHRcdFx0XHRcIntcIixcblx0XHRcdFx0XHQnXFx0ZWNobyBcIipcIicsXG5cdFx0XHRcdFx0J1xcdGVjaG8gXCIhLmdpdGlnbm9yZVwiJyxcblx0XHRcdFx0XHQnfSA+XCIkbnBtX2Rpci8uZ2l0aWdub3JlXCInLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0J2lmIFtbICEgLWYgXCIkbnBtX2Rpci8ubnBtcmNcIiBdXTsgdGhlbicsXG5cdFx0XHRcdFx0J1xcdGlmIFtbIC1mIFwiJHtIT01FfS8ubnBtcmNcIiBdXTsgdGhlbicsXG5cdFx0XHRcdFx0J1xcdFxcdGNwIC1hIFwiJHtIT01FfS8ubnBtcmNcIiBcIiRucG1fZGlyLy5ucG1yY1wiJyxcblx0XHRcdFx0XHRcIlxcdGZpXCIsXG5cdFx0XHRcdFx0XCJmaVwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdF0uam9pbihcIlxcblwiKSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5kZXZjb250YWluZXIvcG9zdC1zdGFydC5zaFwiLFxuXHRcdFx0XHRjb250ZW50OiBbXG5cdFx0XHRcdFx0XCIjIS91c3IvYmluL2VudiBiYXNoXCIsXG5cdFx0XHRcdFx0XCIjIFJ1bnMgb24gZXZlcnkgY29udGFpbmVyIHN0YXJ0IChkZXZjb250YWluZXIgcG9zdFN0YXJ0Q29tbWFuZCkuXCIsXG5cdFx0XHRcdFx0XCJzZXQgLWV1byBwaXBlZmFpbFwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0J0FVVEhfUkVHSVNUUlk9XCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZ1wiJyxcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdCdpZiBucG0gd2hvYW1pIC0tcmVnaXN0cnkgXCIkQVVUSF9SRUdJU1RSWVwiID4vZGV2L251bGwgMj4mMTsgdGhlbicsXG5cdFx0XHRcdFx0J1xcdGVjaG8gXCJucG06IGxvZ2dlZCBpbiBhcyAkKG5wbSB3aG9hbWkgLS1yZWdpc3RyeSBcIiRBVVRIX1JFR0lTVFJZXCIpXCInLFxuXHRcdFx0XHRcdFwiXFx0ZXhpdCAwXCIsXG5cdFx0XHRcdFx0XCJmaVwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0XCJpZiBbWyAtdCAwICYmIC10IDEgXV07IHRoZW5cIixcblx0XHRcdFx0XHQnXFx0ZWNobyBcIm5wbTogbm90IGF1dGhlbnRpY2F0ZWQg4oCUIHN0YXJ0aW5nIGxvZ2luLi4uXCInLFxuXHRcdFx0XHRcdCdcXHRucG0gbG9naW4gLS1yZWdpc3RyeSBcIiRBVVRIX1JFR0lTVFJZXCInLFxuXHRcdFx0XHRcdFwiXFx0ZXhpdCAwXCIsXG5cdFx0XHRcdFx0XCJmaVwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0J2VjaG8gXCJucG06IG5vdCBhdXRoZW50aWNhdGVkLiBPcGVuIGEgdGVybWluYWwgYW5kIHJ1bjogbnBtIGxvZ2luXCIgPiYyJyxcblx0XHRcdFx0XHQnZWNobyBcIiAgICAoY3JlZHMgcGVyc2lzdCBpbiAuZGV2Y29udGFpbmVyL25wbS1hdXRoLylcIiA+JjInLFxuXHRcdFx0XHRcdFwiZXhpdCAxXCIsXG5cdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XS5qb2luKFwiXFxuXCIpLFxuXHRcdFx0fSxcblx0XHRdLFxuXHR9KTtcblxuXHQvLyBQcm9qZWN0LWxldmVsIG1vZGVscyAocGF0aHMgcmVsYXRpdmUgdG8gcHJvamVjdHMvYXBpKVxuXHRjb25zdCBhcGlQcm9qZWN0ID0gbmV3IFByb2plY3RTY2FmZm9sZChXRUJBUElfUFJPSkVDVF9ESVIpO1xuXHRhcGlQcm9qZWN0LmFkZE1vZGVsKG5ldyBBcGlQYWNrYWdlSnNvbihuYW1lKSk7XG5cdGFwaVByb2plY3QuYWRkTW9kZWwobmV3IE1haW5Tb3VyY2VGaWxlKGAke25hbWV9LmFwaWApKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgQ29udHJvbGxlclNvdXJjZUZpbGUoKSk7XG5cblx0Ly8gU2FtcGxlU2VydmljZSArIFNhbXBsZUNvbmZpZyBhcmUgcGFydCBvZiB0aGUgY29yZSBzY2FmZm9sZCDigJQgSGVsbG9Db250cm9sbGVyXG5cdC8vIGluamVjdHMgU2FtcGxlU2VydmljZSB0byBkZW1vbnN0cmF0ZSBjb25maWctZHJpdmVuIGJlaGF2aW91ciBvdXQgb2YgdGhlIGJveC5cblx0YXBpUHJvamVjdC5hZGRGaWxlKG5ldyBTYW1wbGVDb25maWdNb2RlbCgpKTtcblx0YXBpUHJvamVjdC5hZGRGaWxlKG5ldyBTYW1wbGVTZXJ2aWNlTW9kZWwoKSk7XG5cblx0bW9ub1JlcG8uYWRkUHJvamVjdChhcGlQcm9qZWN0KTtcblxuXHRyZXR1cm4gbW9ub1JlcG87XG59XG4iXSwibmFtZXMiOlsiV0VCQVBJX1BST0pFQ1RfRElSIiwiV0VCQVBJX1JFTEVBU0VfRU5UUlkiLCJzY2FmZm9sZEFwaSIsImZlYXR1cmVzIiwiRGF0YWJhc2VGZWF0dXJlIiwiQXV0aEZlYXR1cmUiLCJQb3N0bWFuRmVhdHVyZSIsIkZpbmFsaXplRmVhdHVyZSIsImNsaU9wdGlvbnMiLCJ0YXJnZXREaXIiLCJyZXNvbHZlIiwiZCIsInByb2plY3ROYW1lIiwidHJpbSIsInByb2Nlc3MiLCJlbnYiLCJERUNPSEVSRV9QUk9KRUNUX05BTUUiLCJiYXNlbmFtZSIsIndvcmtzcGFjZSIsImNyZWF0ZVdvcmtzcGFjZSIsIlNjYWZmb2xkU2VydmljZSIsInNjYWZmb2xkIiwibW9ub1JlcG8iLCJNb25vUmVwb1NjYWZmb2xkIiwic2V0TmFtZSIsIm5hbWUiLCJjb21wb3NlIiwiRG9ja2VyQ29tcG9zZSIsInNldFByb2plY3ROYW1lIiwiYWRkTmV0d29yayIsImFkZFNlcnZpY2UiLCJidWlsZCIsInZvbHVtZXMiLCJlbnZpcm9ubWVudCIsIk5QTV9DT05GSUdfVVNFUkNPTkZJRyIsImNvbW1hbmQiLCJuZXR3b3JrcyIsImFkZFZvbHVtZSIsImRldkNvbnRhaW5lciIsIkRldkNvbnRhaW5lciIsImFkZEV4dGVuc2lvbiIsImZvcndhcmRQb3J0Iiwic2V0UG9ydEF0dHJpYnV0ZXMiLCJsYWJlbCIsInJlcXVpcmVMb2NhbFBvcnQiLCJzZXRJbml0aWFsaXplQ29tbWFuZCIsInNldFBvc3RTdGFydENvbW1hbmQiLCJ1c2VDb21wb3NlIiwiYWRkTW9kZWwiLCJXZWJhcGlEZXZDb250YWluZXIiLCJXZWJhcGlQcm9kdWN0aW9uRG9ja2VyZmlsZSIsIkdpdGh1YkNpV29ya2Zsb3dzIiwiVlNDb2RlU2V0dGluZ3MiLCJMYXVuY2hKc29uIiwiVHNDb25maWciLCJQYWNrYWdlSnNvbiIsInN0YXJ0RW50cnkiLCJDb25maWdZYW1sIiwiV0VMTF9LTk9XTl9GSUxFUyIsIkNPTkZJR19ZQU1MIiwiQ09ORklHX0RFVl9ZQU1MIiwiR2l0aWdub3JlIiwiRW52RmlsZSIsImFkZEZpbGUiLCJmaWxlcyIsImZpbGVQYXRoIiwiY29udGVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCIkc2NoZW1hIiwiaW5jbHVkZXMiLCJhc3Npc3QiLCJhY3Rpb25zIiwic291cmNlIiwib3JnYW5pemVJbXBvcnRzIiwidmNzIiwiZW5hYmxlZCIsImNsaWVudEtpbmQiLCJ1c2VJZ25vcmVGaWxlIiwiZm9ybWF0dGVyIiwiZm9ybWF0V2l0aEVycm9ycyIsImluZGVudFN0eWxlIiwibGluZVdpZHRoIiwiamF2YXNjcmlwdCIsInBhcnNlciIsInVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkIiwibGludGVyIiwicnVsZXMiLCJzdHlsZSIsInVzZUNvbnNpc3RlbnRNZW1iZXJBY2Nlc3NpYmlsaXR5IiwibGV2ZWwiLCJvcHRpb25zIiwiYWNjZXNzaWJpbGl0eSIsIm92ZXJyaWRlcyIsImluZGVudFdpZHRoIiwiam9pbiIsImFwaVByb2plY3QiLCJQcm9qZWN0U2NhZmZvbGQiLCJBcGlQYWNrYWdlSnNvbiIsIk1haW5Tb3VyY2VGaWxlIiwiQ29udHJvbGxlclNvdXJjZUZpbGUiLCJTYW1wbGVDb25maWdNb2RlbCIsIlNhbXBsZVNlcnZpY2VNb2RlbCIsImFkZFByb2plY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBMEJTQTtlQUFBQSwwQkFBa0I7O1FBQUVDO2VBQUFBLDRCQUFvQjs7UUFjM0JDO2VBQUFBOzs7MEJBeENZOzhCQUNKO2lDQUNIO3VCQUNNO21DQUNKOzhCQUNMO2dDQUNFO2lDQUNDO2tD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
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NyZWF0ZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBiYXNlbmFtZSwgam9pbiwgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IERvY2tlckNvbXBvc2UgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvc2UubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbmZpZ1lhbWwgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHsgRGV2Q29udGFpbmVyIH0gZnJvbSBcIi4uL21vZGVscy9kZXYtY29udGFpbmVyLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBFbnZGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9lbnYtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgR2l0aWdub3JlIH0gZnJvbSBcIi4uL21vZGVscy9naXRpZ25vcmUubW9kZWwuanNcIjtcbmltcG9ydCB7IExhdW5jaEpzb24gfSBmcm9tIFwiLi4vbW9kZWxzL2xhdW5jaC1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBQYWNrYWdlSnNvbiB9IGZyb20gXCIuLi9tb2RlbHMvcGFja2FnZS1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBNb25vUmVwb1NjYWZmb2xkLCBQcm9qZWN0U2NhZmZvbGQgfSBmcm9tIFwiLi4vbW9kZWxzL3Byb2plY3QubW9kZWwuanNcIjtcbmltcG9ydCB7IFRzQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy90c2NvbmZpZy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgVlNDb2RlU2V0dGluZ3MgfSBmcm9tIFwiLi4vbW9kZWxzL3ZzY29kZS1zZXR0aW5ncy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgU2NhZmZvbGRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7XG5cdENyZWF0ZUNsaUVycm9yLFxuXHRpc0RlY29oZXJlV29ya3NwYWNlLFxuXHRsaXN0RXhpc3RpbmdBcGlOYW1lcyxcblx0cGFyc2VBcGlOYW1lcyxcbn0gZnJvbSBcIi4vYXBpLW5hbWUuanNcIjtcbmltcG9ydCB7XG5cdERFRkFVTFRfV0VCQVBJX05BTUUsXG5cdHdlYmFwaVBhY2thZ2VOYW1lLFxuXHR3ZWJhcGlQb3J0LFxuXHR3ZWJhcGlQcm9qZWN0RGlyLFxuXHR3ZWJhcGlSZWxlYXNlRW50cnksXG59IGZyb20gXCIuL2NvbnN0LmpzXCI7XG5pbXBvcnQgeyBBdXRoRmVhdHVyZSB9IGZyb20gXCIuL2ZlYXR1cmVzL2F1dGguZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgRGF0YWJhc2VGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvZGF0YWJhc2UuZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgRmluYWxpemVGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvZmluYWxpemUuZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgUG9zdG1hbkZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9wb3N0bWFuLmZlYXR1cmUuanNcIjtcbmltcG9ydCB7IEFwaVBhY2thZ2VKc29uIH0gZnJvbSBcIi4vbW9kZWxzL2FwaS1wYWNrYWdlLWpzb24ubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbnRyb2xsZXJTb3VyY2VGaWxlIH0gZnJvbSBcIi4vbW9kZWxzL2NvbnRyb2xsZXItc291cmNlLWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IEdpdGh1YkNpV29ya2Zsb3dzIH0gZnJvbSBcIi4vbW9kZWxzL2dpdGh1Yi1jaS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTWFpblNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvbWFpbi1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgV2ViYXBpUHJvZHVjdGlvbkRvY2tlcmZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvcHJvZHVjdGlvbi1kb2NrZXJmaWxlLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBTYW1wbGVDb25maWdNb2RlbCwgU2FtcGxlU2VydmljZU1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL3NhbXBsZS1maWxlcy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgV2ViYXBpRGV2Q29udGFpbmVyIH0gZnJvbSBcIi4vbW9kZWxzL3dlYmFwaS1pbWFnZS5tb2RlbC5qc1wiO1xuXG5leHBvcnQgeyBXRUJBUElfUFJPSkVDVF9ESVIsIFdFQkFQSV9SRUxFQVNFX0VOVFJZIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcblxuZXhwb3J0IHR5cGUgQXBpT3B0aW9ucyA9IHtcblx0ZD86IHN0cmluZztcblx0LyoqIEhvc3QgcHJvamVjdCBuYW1lIChkaXJlY3RvcnkgYmFzZW5hbWUpLiBSZXF1aXJlZCB3aGVuIHNjYWZmb2xkaW5nIGludG8gYC93b3Jrc3BhY2VgLiAqL1xuXHRwcm9qZWN0TmFtZT86IHN0cmluZztcblx0LyoqIEFQSSBzbHVncyB1bmRlciBgcHJvamVjdHMvYC4gRGVmYXVsdCBgW1wiYXBpXCJdYC4gUmVwZWF0YWJsZSBgLS1uYW1lYC4gKi9cblx0bmFtZXM/OiBzdHJpbmdbXTtcblx0LyoqIEFkZCBBUElzIHRvIGFuIGV4aXN0aW5nIERlY29oZXJlIHdvcmtzcGFjZSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZS4gKi9cblx0YWRkPzogYm9vbGVhbjtcblx0YXV0aFByb3ZpZGVyPzogXCJhdXRoMFwiIHwgXCJub25lXCI7XG5cdGRhdGFiYXNlUHJvdmlkZXI/OiBcIm5vbmVcIiB8IFwicG9zdGdyZXMvdHlwZW9ybVwiO1xuXHRwb3N0bWFuUHJvdmlkZXI/OiBcImFwaVwiIHwgXCJsb2NhbFwiIHwgXCJub25lXCI7XG5cdGluc3RhbGxEZXBlbmRlbmNpZXM/OiBcInllc1wiIHwgXCJub1wiO1xufTtcblxuY29uc3QgZmVhdHVyZXMgPSBbRGF0YWJhc2VGZWF0dXJlLCBBdXRoRmVhdHVyZSwgUG9zdG1hbkZlYXR1cmUsIEZpbmFsaXplRmVhdHVyZV07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzY2FmZm9sZEFwaShjbGlPcHRpb25zOiBBcGlPcHRpb25zKSB7XG5cdGNvbnN0IHRhcmdldERpciA9IHJlc29sdmUoY2xpT3B0aW9ucy5kID8/IFwiLlwiKTtcblx0Y29uc3QgcHJvamVjdE5hbWUgPVxuXHRcdGNsaU9wdGlvbnMucHJvamVjdE5hbWU/LnRyaW0oKSB8fFxuXHRcdHByb2Nlc3MuZW52LkRFQ09IRVJFX1BST0pFQ1RfTkFNRT8udHJpbSgpIHx8XG5cdFx0YmFzZW5hbWUodGFyZ2V0RGlyKTtcblx0Y29uc3QgbmFtZXMgPSBwYXJzZUFwaU5hbWVzKGNsaU9wdGlvbnMubmFtZXMpO1xuXHRjb25zdCB3b3Jrc3BhY2UgPSBjbGlPcHRpb25zLmFkZFxuXHRcdD8gY3JlYXRlQWRkV29ya3NwYWNlKHRhcmdldERpciwgcHJvamVjdE5hbWUsIG5hbWVzKVxuXHRcdDogY3JlYXRlV29ya3NwYWNlKHRhcmdldERpciwgcHJvamVjdE5hbWUsIG5hbWVzKTtcblx0YXdhaXQgU2NhZmZvbGRTZXJ2aWNlLnNjYWZmb2xkKHdvcmtzcGFjZSwgeyAuLi5jbGlPcHRpb25zLCBuYW1lcyB9LCBmZWF0dXJlcyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZShcblx0dGFyZ2V0RGlyOiBzdHJpbmcsXG5cdHByb2plY3ROYW1lOiBzdHJpbmcsXG5cdGFwaU5hbWVzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IE1vbm9SZXBvU2NhZmZvbGQge1xuXHRjb25zdCBtb25vUmVwbyA9IG5ldyBNb25vUmVwb1NjYWZmb2xkKCk7XG5cdG1vbm9SZXBvLnRhcmdldERpciA9IHRhcmdldERpcjtcblx0bW9ub1JlcG8uc2V0TmFtZShwcm9qZWN0TmFtZSk7XG5cdGNvbnN0IG5hbWUgPSBtb25vUmVwby5uYW1lO1xuXG5cdGNvbnN0IGNvbXBvc2UgPSBuZXcgRG9ja2VyQ29tcG9zZSgpXG5cdFx0LnNldFByb2plY3ROYW1lKG5hbWUpXG5cdFx0LmFkZE5ldHdvcmsobmFtZSwgeyBuYW1lOiBgc2FtcGxlcy0ke25hbWV9YCB9KVxuXHRcdC5hZGRTZXJ2aWNlKFwiZGV2Y29udGFpbmVyXCIsIHtcblx0XHRcdGJ1aWxkOiBcIi5cIixcblx0XHRcdHZvbHVtZXM6IFtcblx0XHRcdFx0Ly8gV29ya3NwYWNlLWxvY2FsIChjcmVhdGVkIGJ5IGluaXRpYWxpemUuc2ggYXMgdGhlIGhvc3QgdXNlcikuXG5cdFx0XHRcdC8vIERvIE5PVCBiaW5kICR7SE9NRX0vLm5wbS8uLi4g4oCUIERvY2tlciBjcmVhdGVzIG1pc3NpbmcgaG9zdCBwYXRocyBhcyByb290LlxuXHRcdFx0XHRcIi4vbnBtLWF1dGg6L2hvbWUvbm9kZS8ubnBtLWNvbmZpZ1wiLFxuXHRcdFx0XHRcIndlYmFwaS1ub2RlLW1vZHVsZXM6L3dvcmtzcGFjZS9ub2RlX21vZHVsZXNcIixcblx0XHRcdF0sXG5cdFx0XHRlbnZpcm9ubWVudDogeyBOUE1fQ09ORklHX1VTRVJDT05GSUc6IFwiL2hvbWUvbm9kZS8ubnBtLWNvbmZpZy8ubnBtcmNcIiB9LFxuXHRcdFx0Y29tbWFuZDogXCJzbGVlcCBpbmZpbml0eVwiLFxuXHRcdFx0bmV0d29ya3M6IFtuYW1lXSxcblx0XHR9KVxuXHRcdC5hZGRWb2x1bWUoXCJ3ZWJhcGktbm9kZS1tb2R1bGVzXCIpO1xuXG5cdGNvbnN0IGRldkNvbnRhaW5lciA9IG5ldyBEZXZDb250YWluZXIoKVxuXHRcdC5hZGRFeHRlbnNpb24oXCJiaW9tZWpzLmJpb21lXCIsIFwidml0ZXN0LmV4cGxvcmVyXCIpXG5cdFx0LnNldEluaXRpYWxpemVDb21tYW5kKFwiYmFzaCAuZGV2Y29udGFpbmVyL2luaXRpYWxpemUuc2hcIilcblx0XHQuc2V0UG9zdFN0YXJ0Q29tbWFuZChcImJhc2ggLmRldmNvbnRhaW5lci9wb3N0LXN0YXJ0LnNoXCIpXG5cdFx0LnVzZUNvbXBvc2UoKTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgYXBpTmFtZV0gb2YgYXBpTmFtZXMuZW50cmllcygpKSB7XG5cdFx0Y29uc3QgcG9ydCA9IHdlYmFwaVBvcnQoaW5kZXgpO1xuXHRcdGRldkNvbnRhaW5lci5mb3J3YXJkUG9ydChwb3J0KTtcblx0XHRkZXZDb250YWluZXIuc2V0UG9ydEF0dHJpYnV0ZXMocG9ydCwge1xuXHRcdFx0bGFiZWw6IGFwaU5hbWUgPT09IERFRkFVTFRfV0VCQVBJX05BTUUgPyBcIkFQSVwiIDogYXBpTmFtZSxcblx0XHRcdHJlcXVpcmVMb2NhbFBvcnQ6IHRydWUsXG5cdFx0fSk7XG5cdH1cblxuXHQvLyBXb3Jrc3BhY2UtbGV2ZWwgbW9kZWxzIChyZXBvIHJvb3QpXG5cdG1vbm9SZXBvLmFkZE1vZGVsKGNvbXBvc2UpO1xuXHRtb25vUmVwby5hZGRNb2RlbChkZXZDb250YWluZXIpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgV2ViYXBpRGV2Q29udGFpbmVyKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgV2ViYXBpUHJvZHVjdGlvbkRvY2tlcmZpbGUoYXBpTmFtZXMpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IEdpdGh1YkNpV29ya2Zsb3dzKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgVlNDb2RlU2V0dGluZ3MobmFtZSkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgTGF1bmNoSnNvbihhcGlOYW1lcykpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgVHNDb25maWcoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBQYWNrYWdlSnNvbihgJHtuYW1lfS5hcGlgLCB7IGFwaU5hbWVzLCB3b3Jrc3BhY2VOYW1lOiBuYW1lIH0pKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IENvbmZpZ1lhbWwoV0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfWUFNTCwgXCJjb25maWcvY29uZmlnLnlhbWxcIiwgXCJcIikpO1xuXHRtb25vUmVwby5hZGRNb2RlbChcblx0XHRuZXcgQ29uZmlnWWFtbChXRUxMX0tOT1dOX0ZJTEVTLkNPTkZJR19ERVZfWUFNTCwgXCJjb25maWcvY29uZmlnLmRldi55YW1sXCIsIFwiXCIpLFxuXHQpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgR2l0aWdub3JlKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgRW52RmlsZSgpKTtcblxuXHQvLyBCaW9tZSBmb3JtYXR0ZXIvbGludGVyIGNvbmZpZ1xuXHRtb25vUmVwby5hZGRGaWxlKHtcblx0XHRmaWxlczogKCkgPT4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCJiaW9tZS5qc29uXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdCRzY2hlbWE6IFwiaHR0cHM6Ly9iaW9tZWpzLmRldi9zY2hlbWFzLzIuMC4wL3NjaGVtYS5qc29uXCIsXG5cdFx0XHRcdFx0XHRmaWxlczoge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlczogW1wiKiovKi50c1wiLCBcIioqLyouanNcIiwgXCIqKi8qLmpzb25cIiwgXCIqKi8qLnltbFwiLCBcIioqLyoueWFtbFwiXSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhc3Npc3Q6IHsgYWN0aW9uczogeyBzb3VyY2U6IHsgb3JnYW5pemVJbXBvcnRzOiBcIm9uXCIgfSB9IH0sXG5cdFx0XHRcdFx0XHR2Y3M6IHsgZW5hYmxlZDogdHJ1ZSwgY2xpZW50S2luZDogXCJnaXRcIiwgdXNlSWdub3JlRmlsZTogdHJ1ZSB9LFxuXHRcdFx0XHRcdFx0Zm9ybWF0dGVyOiB7XG5cdFx0XHRcdFx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFdpdGhFcnJvcnM6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluZGVudFN0eWxlOiBcInRhYlwiLFxuXHRcdFx0XHRcdFx0XHRsaW5lV2lkdGg6IDk1LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGphdmFzY3JpcHQ6IHsgcGFyc2VyOiB7IHVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkOiB0cnVlIH0gfSxcblx0XHRcdFx0XHRcdGxpbnRlcjoge1xuXHRcdFx0XHRcdFx0XHRydWxlczoge1xuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1c2VDb25zaXN0ZW50TWVtYmVyQWNjZXNzaWJpbGl0eToge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXZlbDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zOiB7IGFjY2Vzc2liaWxpdHk6IFwiZXhwbGljaXRcIiB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG92ZXJyaWRlczogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0aW5jbHVkZXM6IFtcIioqLyouanNvblwiXSxcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXR0ZXI6IHsgaW5kZW50U3R5bGU6IFwic3BhY2VcIiwgaW5kZW50V2lkdGg6IDIgfSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdDIsXG5cdFx0XHRcdCksXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdG1vbm9SZXBvLmFkZEZpbGUoe1xuXHRcdGZpbGVzOiAoKSA9PiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5kZXZjb250YWluZXIvaW5pdGlhbGl6ZS5zaFwiLFxuXHRcdFx0XHRjb250ZW50OiBbXG5cdFx0XHRcdFx0XCIjIS91c3IvYmluL2VudiBiYXNoXCIsXG5cdFx0XHRcdFx0XCIjIFJ1bnMgb24gdGhlIGhvc3QgYmVmb3JlIHRoZSBjb250YWluZXIgaXMgY3JlYXRlZCAoZGV2Y29udGFpbmVyIGluaXRpYWxpemVDb21tYW5kKS5cIixcblx0XHRcdFx0XHRcIiMgQ3JlYXRlcyBucG0tYXV0aCBhcyB0aGUgaG9zdCB1c2VyIHNvIHRoZSBiaW5kIG1vdW50IGlzIG5vdCByb290LW93bmVkLlwiLFxuXHRcdFx0XHRcdFwiIyBEbyBub3Qgc2NhZmZvbGQgbnBtLWF1dGgvIGZyb20gdGhlIGJ1aWxkZXIgKHRoYXQgcnVucyBhcyByb290KS5cIixcblx0XHRcdFx0XHRcInNldCAtZXVvIHBpcGVmYWlsXCIsXG5cdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XHQncm9vdD1cIiQoY2QgXCIkKGRpcm5hbWUgXCIke0JBU0hfU09VUkNFWzBdfVwiKS8uLlwiICYmIHB3ZClcIicsXG5cdFx0XHRcdFx0J25wbV9kaXI9XCIkcm9vdC8uZGV2Y29udGFpbmVyL25wbS1hdXRoXCInLFxuXHRcdFx0XHRcdCdpZiAhIG1rZGlyIC1wIFwiJG5wbV9kaXJcIiAyPi9kZXYvbnVsbDsgdGhlbicsXG5cdFx0XHRcdFx0J1xcdGVjaG8gXCJDYW5ub3QgY3JlYXRlICRucG1fZGlyIChwZXJtaXNzaW9uIGRlbmllZCkuXCIgPiYyJyxcblx0XHRcdFx0XHQnXFx0ZWNobyBcIlRoZSBzY2FmZm9sZCBjb250YWluZXIgbGlrZWx5IGxlZnQgLmRldmNvbnRhaW5lciByb290LW93bmVkLiBGaXggd2l0aDpcIiA+JjInLFxuXHRcdFx0XHRcdCdcXHRlY2hvIFwiICBzdWRvIGNob3duIC1SIFxcXFxcIiRVU0VSOiRVU0VSXFxcXFwiIFxcXFxcIiRyb290XFxcXFwiXCIgPiYyJyxcblx0XHRcdFx0XHRcIlxcdGV4aXQgMVwiLFxuXHRcdFx0XHRcdFwiZmlcIixcblx0XHRcdFx0XHRcIntcIixcblx0XHRcdFx0XHQnXFx0ZWNobyBcIipcIicsXG5cdFx0XHRcdFx0J1xcdGVjaG8gXCIhLmdpdGlnbm9yZVwiJyxcblx0XHRcdFx0XHQnfSA+XCIkbnBtX2Rpci8uZ2l0aWdub3JlXCInLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0J2lmIFtbICEgLWYgXCIkbnBtX2Rpci8ubnBtcmNcIiBdXTsgdGhlbicsXG5cdFx0XHRcdFx0J1xcdGlmIFtbIC1mIFwiJHtIT01FfS8ubnBtcmNcIiBdXTsgdGhlbicsXG5cdFx0XHRcdFx0J1xcdFxcdGNwIC1hIFwiJHtIT01FfS8ubnBtcmNcIiBcIiRucG1fZGlyLy5ucG1yY1wiJyxcblx0XHRcdFx0XHRcIlxcdGZpXCIsXG5cdFx0XHRcdFx0XCJmaVwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdF0uam9pbihcIlxcblwiKSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5kZXZjb250YWluZXIvcG9zdC1zdGFydC5zaFwiLFxuXHRcdFx0XHRjb250ZW50OiBbXG5cdFx0XHRcdFx0XCIjIS91c3IvYmluL2VudiBiYXNoXCIsXG5cdFx0XHRcdFx0XCIjIFJ1bnMgb24gZXZlcnkgY29udGFpbmVyIHN0YXJ0IChkZXZjb250YWluZXIgcG9zdFN0YXJ0Q29tbWFuZCkuXCIsXG5cdFx0XHRcdFx0XCJzZXQgLWV1byBwaXBlZmFpbFwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0J0FVVEhfUkVHSVNUUlk9XCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZ1wiJyxcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdCdpZiBucG0gd2hvYW1pIC0tcmVnaXN0cnkgXCIkQVVUSF9SRUdJU1RSWVwiID4vZGV2L251bGwgMj4mMTsgdGhlbicsXG5cdFx0XHRcdFx0J1xcdGVjaG8gXCJucG06IGxvZ2dlZCBpbiBhcyAkKG5wbSB3aG9hbWkgLS1yZWdpc3RyeSBcIiRBVVRIX1JFR0lTVFJZXCIpXCInLFxuXHRcdFx0XHRcdFwiXFx0ZXhpdCAwXCIsXG5cdFx0XHRcdFx0XCJmaVwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0XCJpZiBbWyAtdCAwICYmIC10IDEgXV07IHRoZW5cIixcblx0XHRcdFx0XHQnXFx0ZWNobyBcIm5wbTogbm90IGF1dGhlbnRpY2F0ZWQg4oCUIHN0YXJ0aW5nIGxvZ2luLi4uXCInLFxuXHRcdFx0XHRcdCdcXHRucG0gbG9naW4gLS1yZWdpc3RyeSBcIiRBVVRIX1JFR0lTVFJZXCInLFxuXHRcdFx0XHRcdFwiXFx0ZXhpdCAwXCIsXG5cdFx0XHRcdFx0XCJmaVwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0J2VjaG8gXCJucG06IG5vdCBhdXRoZW50aWNhdGVkLiBPcGVuIGEgdGVybWluYWwgYW5kIHJ1bjogbnBtIGxvZ2luXCIgPiYyJyxcblx0XHRcdFx0XHQnZWNobyBcIiAgICAoY3JlZHMgcGVyc2lzdCBpbiAuZGV2Y29udGFpbmVyL25wbS1hdXRoLylcIiA+JjInLFxuXHRcdFx0XHRcdFwiZXhpdCAxXCIsXG5cdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XS5qb2luKFwiXFxuXCIpLFxuXHRcdFx0fSxcblx0XHRdLFxuXHR9KTtcblxuXHRmb3IgKGNvbnN0IGFwaU5hbWUgb2YgYXBpTmFtZXMpIHtcblx0XHRhZGRBcGlQcm9qZWN0KG1vbm9SZXBvLCBuYW1lLCBhcGlOYW1lKTtcblx0fVxuXG5cdHJldHVybiBtb25vUmVwbztcbn1cblxuZnVuY3Rpb24gY3JlYXRlQWRkV29ya3NwYWNlKFxuXHR0YXJnZXREaXI6IHN0cmluZyxcblx0cHJvamVjdE5hbWU6IHN0cmluZyxcblx0YXBpTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogTW9ub1JlcG9TY2FmZm9sZCB7XG5cdGlmICghaXNEZWNvaGVyZVdvcmtzcGFjZSh0YXJnZXREaXIpKSB7XG5cdFx0dGhyb3cgbmV3IENyZWF0ZUNsaUVycm9yKFxuXHRcdFx0YE5vdCBhIERlY29oZXJlIHdvcmtzcGFjZTogJHt0YXJnZXREaXJ9LiBTY2FmZm9sZCBvbmUgZmlyc3Qgd2l0aCBcXGBucHggQGRlY29oZXJlL2NyZWF0ZSB3ZWJhcGlcXGAuYCxcblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgZXhpc3RpbmcgPSBsaXN0RXhpc3RpbmdBcGlOYW1lcyh0YXJnZXREaXIpO1xuXHRmb3IgKGNvbnN0IGFwaU5hbWUgb2YgYXBpTmFtZXMpIHtcblx0XHRpZiAoZXhpc3RpbmcuaW5jbHVkZXMoYXBpTmFtZSkpIHtcblx0XHRcdHRocm93IG5ldyBDcmVhdGVDbGlFcnJvcihcblx0XHRcdFx0YEFQSSBcIiR7YXBpTmFtZX1cIiBhbHJlYWR5IGV4aXN0cyBhdCAke3dlYmFwaVByb2plY3REaXIoYXBpTmFtZSl9LmAsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG1vbm9SZXBvID0gbmV3IE1vbm9SZXBvU2NhZmZvbGQoKTtcblx0bW9ub1JlcG8udGFyZ2V0RGlyID0gdGFyZ2V0RGlyO1xuXHRtb25vUmVwby5zZXROYW1lKHByb2plY3ROYW1lKTtcblx0Y29uc3QgbmFtZSA9IG1vbm9SZXBvLm5hbWU7XG5cblx0Y29uc3QgcGtnID0gUGFja2FnZUpzb24uZnJvbUZpbGUoam9pbih0YXJnZXREaXIsIFwicGFja2FnZS5qc29uXCIpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwocGtnKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwoXG5cdFx0ZXhpc3RzU3luYyhqb2luKHRhcmdldERpciwgXCIuZW52XCIpKVxuXHRcdFx0PyBFbnZGaWxlLmZyb21GaWxlKGpvaW4odGFyZ2V0RGlyLCBcIi5lbnZcIikpXG5cdFx0XHQ6IG5ldyBFbnZGaWxlKCksXG5cdCk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKFxuXHRcdGV4aXN0c1N5bmMoam9pbih0YXJnZXREaXIsIFwiY29uZmlnL2NvbmZpZy55YW1sXCIpKVxuXHRcdFx0PyBDb25maWdZYW1sLmZyb21GaWxlKFxuXHRcdFx0XHRcdFdFTExfS05PV05fRklMRVMuQ09ORklHX1lBTUwsXG5cdFx0XHRcdFx0XCJjb25maWcvY29uZmlnLnlhbWxcIixcblx0XHRcdFx0XHRqb2luKHRhcmdldERpciwgXCJjb25maWcvY29uZmlnLnlhbWxcIiksXG5cdFx0XHRcdClcblx0XHRcdDogbmV3IENvbmZpZ1lhbWwoV0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfWUFNTCwgXCJjb25maWcvY29uZmlnLnlhbWxcIiwgXCJcIiksXG5cdCk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKFxuXHRcdGV4aXN0c1N5bmMoam9pbih0YXJnZXREaXIsIFwiY29uZmlnL2NvbmZpZy5kZXYueWFtbFwiKSlcblx0XHRcdD8gQ29uZmlnWWFtbC5mcm9tRmlsZShcblx0XHRcdFx0XHRXRUxMX0tOT1dOX0ZJTEVTLkNPTkZJR19ERVZfWUFNTCxcblx0XHRcdFx0XHRcImNvbmZpZy9jb25maWcuZGV2LnlhbWxcIixcblx0XHRcdFx0XHRqb2luKHRhcmdldERpciwgXCJjb25maWcvY29uZmlnLmRldi55YW1sXCIpLFxuXHRcdFx0XHQpXG5cdFx0XHQ6IG5ldyBDb25maWdZYW1sKFdFTExfS05PV05fRklMRVMuQ09ORklHX0RFVl9ZQU1MLCBcImNvbmZpZy9jb25maWcuZGV2LnlhbWxcIiwgXCJcIiksXG5cdCk7XG5cblx0Zm9yIChjb25zdCBbb2Zmc2V0LCBhcGlOYW1lXSBvZiBhcGlOYW1lcy5lbnRyaWVzKCkpIHtcblx0XHRjb25zdCBwb3J0ID0gd2ViYXBpUG9ydChleGlzdGluZy5sZW5ndGggKyBvZmZzZXQpO1xuXHRcdHBrZy5hZGRTY3JpcHQoYHN0YXJ0OiR7YXBpTmFtZX1gLCBgbm9kZSAke3dlYmFwaVJlbGVhc2VFbnRyeShhcGlOYW1lKX1gKTtcblx0XHRwa2cuYWRkU2NyaXB0KFxuXHRcdFx0YGRldjoke2FwaU5hbWV9YCxcblx0XHRcdGBQT1JUPSR7cG9ydH0gZmx1eCBzZXJ2ZSAtLXByb2plY3QgJHt3ZWJhcGlQYWNrYWdlTmFtZShuYW1lLCBhcGlOYW1lKX1gLFxuXHRcdCk7XG5cdFx0YWRkQXBpUHJvamVjdChtb25vUmVwbywgbmFtZSwgYXBpTmFtZSk7XG5cdH1cblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFdlYmFwaVByb2R1Y3Rpb25Eb2NrZXJmaWxlKGFwaU5hbWVzLCB7IG5hbWVkT25seTogdHJ1ZSB9KSk7XG5cblx0cmV0dXJuIG1vbm9SZXBvO1xufVxuXG5mdW5jdGlvbiBhZGRBcGlQcm9qZWN0KFxuXHRtb25vUmVwbzogTW9ub1JlcG9TY2FmZm9sZCxcblx0d29ya3NwYWNlTmFtZTogc3RyaW5nLFxuXHRhcGlOYW1lOiBzdHJpbmcsXG4pOiB2b2lkIHtcblx0Y29uc3QgYXBpUHJvamVjdCA9IG5ldyBQcm9qZWN0U2NhZmZvbGQod2ViYXBpUHJvamVjdERpcihhcGlOYW1lKSk7XG5cdGFwaVByb2plY3QuYWRkTW9kZWwobmV3IEFwaVBhY2thZ2VKc29uKHdvcmtzcGFjZU5hbWUsIGFwaU5hbWUpKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgTWFpblNvdXJjZUZpbGUoYCR7d29ya3NwYWNlTmFtZX0uJHthcGlOYW1lfWApKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgQ29udHJvbGxlclNvdXJjZUZpbGUoKSk7XG5cdGFwaVByb2plY3QuYWRkRmlsZShuZXcgU2FtcGxlQ29uZmlnTW9kZWwoKSk7XG5cdGFwaVByb2plY3QuYWRkRmlsZShuZXcgU2FtcGxlU2VydmljZU1vZGVsKCkpO1xuXHRtb25vUmVwby5hZGRQcm9qZWN0KGFwaVByb2plY3QpO1xufVxuIl0sIm5hbWVzIjpbIldFQkFQSV9QUk9KRUNUX0RJUiIsIldFQkFQSV9SRUxFQVNFX0VOVFJZIiwic2NhZmZvbGRBcGkiLCJmZWF0dXJlcyIsIkRhdGFiYXNlRmVhdHVyZSIsIkF1dGhGZWF0dXJlIiwiUG9zdG1hbkZlYXR1cmUiLCJGaW5hbGl6ZUZlYXR1cmUiLCJjbGlPcHRpb25zIiwidGFyZ2V0RGlyIiwicmVzb2x2ZSIsImQiLCJwcm9qZWN0TmFtZSIsInRyaW0iLCJwcm9jZXNzIiwiZW52IiwiREVDT0hFUkVfUFJPSkVDVF9OQU1FIiwiYmFzZW5hbWUiLCJuYW1lcyIsInBhcnNlQXBpTmFtZXMiLCJ3b3Jrc3BhY2UiLCJhZGQiLCJjcmVhdGVBZGRXb3Jrc3BhY2UiLCJjcmVhdGVXb3Jrc3BhY2UiLCJTY2FmZm9sZFNlcnZpY2UiLCJzY2FmZm9sZCIsImFwaU5hbWVzIiwibW9ub1JlcG8iLCJNb25vUmVwb1NjYWZmb2xkIiwic2V0TmFtZSIsIm5hbWUiLCJjb21wb3NlIiwiRG9ja2VyQ29tcG9zZSIsInNldFByb2plY3ROYW1lIiwiYWRkTmV0d29yayIsImFkZFNlcnZpY2UiLCJidWlsZCIsInZvbHVtZXMiLCJlbnZpcm9ubWVudCIsIk5QTV9DT05GSUdfVVNFUkNPTkZJRyIsImNvbW1hbmQiLCJuZXR3b3JrcyIsImFkZFZvbHVtZSIsImRldkNvbnRhaW5lciIsIkRldkNvbnRhaW5lciIsImFkZEV4dGVuc2lvbiIsInNldEluaXRpYWxpemVDb21tYW5kIiwic2V0UG9zdFN0YXJ0Q29tbWFuZCIsInVzZUNvbXBvc2UiLCJpbmRleCIsImFwaU5hbWUiLCJlbnRyaWVzIiwicG9ydCIsIndlYmFwaVBvcnQiLCJmb3J3YXJkUG9ydCIsInNldFBvcnRBdHRyaWJ1dGVzIiwibGFiZWwiLCJERUZBVUxUX1dFQkFQSV9OQU1FIiwicmVxdWlyZUxvY2FsUG9ydCIsImFkZE1vZGVsIiwiV2ViYXBpRGV2Q29udGFpbmVyIiwiV2ViYXBpUHJvZHVjdGlvbkRvY2tlcmZpbGUiLCJHaXRodWJDaVdvcmtmbG93cyIsIlZTQ29kZVNldHRpbmdzIiwiTGF1bmNoSnNvbiIsIlRzQ29uZmlnIiwiUGFja2FnZUpzb24iLCJ3b3Jrc3BhY2VOYW1lIiwiQ29uZmlnWWFtbCIsIldFTExfS05PV05fRklMRVMiLCJDT05GSUdfWUFNTCIsIkNPTkZJR19ERVZfWUFNTCIsIkdpdGlnbm9yZSIsIkVudkZpbGUiLCJhZGRGaWxlIiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiJHNjaGVtYSIsImluY2x1ZGVzIiwiYXNzaXN0IiwiYWN0aW9ucyIsInNvdXJjZSIsIm9yZ2FuaXplSW1wb3J0cyIsInZjcyIsImVuYWJsZWQiLCJjbGllbnRLaW5kIiwidXNlSWdub3JlRmlsZSIsImZvcm1hdHRlciIsImZvcm1hdFdpdGhFcnJvcnMiLCJpbmRlbnRTdHlsZSIsImxpbmVXaWR0aCIsImphdmFzY3JpcHQiLCJwYXJzZXIiLCJ1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZCIsImxpbnRlciIsInJ1bGVzIiwic3R5bGUiLCJ1c2VDb25zaXN0ZW50TWVtYmVyQWNjZXNzaWJpbGl0eSIsImxldmVsIiwib3B0aW9ucyIsImFjY2Vzc2liaWxpdHkiLCJvdmVycmlkZXMiLCJpbmRlbnRXaWR0aCIsImpvaW4iLCJhZGRBcGlQcm9qZWN0IiwiaXNEZWNvaGVyZVdvcmtzcGFjZSIsIkNyZWF0ZUNsaUVycm9yIiwiZXhpc3RpbmciLCJsaXN0RXhpc3RpbmdBcGlOYW1lcyIsIndlYmFwaVByb2plY3REaXIiLCJwa2ciLCJmcm9tRmlsZSIsImV4aXN0c1N5bmMiLCJvZmZzZXQiLCJsZW5ndGgiLCJhZGRTY3JpcHQiLCJ3ZWJhcGlSZWxlYXNlRW50cnkiLCJ3ZWJhcGlQYWNrYWdlTmFtZSIsIm5hbWVkT25seSIsImFwaVByb2plY3QiLCJQcm9qZWN0U2NhZmZvbGQiLCJBcGlQYWNrYWdlSnNvbiIsIk1haW5Tb3VyY2VGaWxlIiwiQ29udHJvbGxlclNvdXJjZUZpbGUiLCJTYW1wbGVDb25maWdNb2RlbCIsIlNhbXBsZVNlcnZpY2VNb2RlbCIsImFkZFByb2plY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBdUNTQTtlQUFBQSwwQkFBa0I7O1FBQUVDO2VBQUFBLDRCQUFvQjs7UUFrQjNCQztlQUFBQTs7O3dCQXpESzswQkFDYTs4QkFDVjtpQ0FDSDt1QkFDTTttQ0FDSjs4QkFDTDtnQ0FDRTtpQ0FDQztrQ0FDQzs4QkFDc0I7K0JBQ3pCO3FDQUNNO2lDQUNDO3lCQU16Qjt3QkFPQTs2QkFDcUI7aUNBQ0k7aUNBQ0E7Z0NBQ0Q7cUNBQ0E7MkNBQ007K0JBQ0g7cUNBQ0g7MkNBQ1k7a0NBQ1c7a0NBQ25CO0FBa0JuQyxNQUFNQyxXQUFXO0lBQUNDLGdDQUFlO0lBQUVDLHdCQUFXO0lBQUVDLDhCQUFjO0lBQUVDLGdDQUFlO0NBQUM7QUFFekUsZUFBZUwsWUFBWU0sVUFBc0I7SUFDdkQs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