sonamu 0.10.13 → 0.11.1

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 (233) hide show
  1. package/dist/ai/agents/agent.d.ts.map +1 -1
  2. package/dist/ai/providers/rtzr/error.d.ts.map +1 -1
  3. package/dist/ai/providers/rtzr/model.d.ts.map +1 -1
  4. package/dist/ai/providers/rtzr/utils.d.ts.map +1 -1
  5. package/dist/api/base-frame.d.ts.map +1 -1
  6. package/dist/api/decorators.d.ts.map +1 -1
  7. package/dist/api/sonamu.d.ts.map +1 -1
  8. package/dist/api/sonamu.js +3 -2
  9. package/dist/api/validator.d.ts.map +1 -1
  10. package/dist/auth/audit-log/events.d.ts.map +1 -1
  11. package/dist/auth/index.d.ts +1 -1
  12. package/dist/auth/index.d.ts.map +1 -1
  13. package/dist/auth/index.js +3 -3
  14. package/dist/auth/knex-adapter.d.ts.map +1 -1
  15. package/dist/auth/plugins/wrappers/admin.d.ts +4 -4
  16. package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
  17. package/dist/auth/plugins/wrappers/anonymous.d.ts.map +1 -1
  18. package/dist/auth/plugins/wrappers/api-key.d.ts.map +1 -1
  19. package/dist/auth/plugins/wrappers/jwt.d.ts.map +1 -1
  20. package/dist/auth/plugins/wrappers/organization.d.ts.map +1 -1
  21. package/dist/auth/plugins/wrappers/passkey.d.ts.map +1 -1
  22. package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
  23. package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
  24. package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
  25. package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
  26. package/dist/bin/build-config.d.ts +10 -0
  27. package/dist/bin/build-config.d.ts.map +1 -1
  28. package/dist/bin/build-config.js +130 -6
  29. package/dist/bin/fixture.d.ts +7 -4
  30. package/dist/bin/fixture.d.ts.map +1 -1
  31. package/dist/bin/fixture.js +161 -13
  32. package/dist/bin/test-command.d.ts +7 -0
  33. package/dist/bin/test-command.d.ts.map +1 -1
  34. package/dist/bin/test-command.js +18 -4
  35. package/dist/bin/typecheck-web.d.ts +2 -0
  36. package/dist/bin/typecheck-web.d.ts.map +1 -0
  37. package/dist/bin/typecheck-web.js +36 -0
  38. package/dist/cache/decorator.d.ts.map +1 -1
  39. package/dist/cache/drivers.d.ts.map +1 -1
  40. package/dist/cache-control/cache-control.d.ts.map +1 -1
  41. package/dist/compress/compress.d.ts.map +1 -1
  42. package/dist/cone/cone-generator.js +1 -1
  43. package/dist/database/base-model.d.ts.map +1 -1
  44. package/dist/database/base-model.types.d.ts +0 -1
  45. package/dist/database/base-model.types.d.ts.map +1 -1
  46. package/dist/database/db.d.ts.map +1 -1
  47. package/dist/database/puri-subset.types.d.ts +0 -1
  48. package/dist/database/puri-subset.types.d.ts.map +1 -1
  49. package/dist/database/puri-wrapper.d.ts +0 -1
  50. package/dist/database/puri-wrapper.d.ts.map +1 -1
  51. package/dist/database/puri.d.ts +0 -1
  52. package/dist/database/puri.d.ts.map +1 -1
  53. package/dist/database/puri.types.d.ts +0 -1
  54. package/dist/database/puri.types.d.ts.map +1 -1
  55. package/dist/database/transaction-context.d.ts.map +1 -1
  56. package/dist/database/upsert-builder.d.ts.map +1 -1
  57. package/dist/dict/en.d.ts +58 -58
  58. package/dist/dict/en.d.ts.map +1 -1
  59. package/dist/dict/ko.d.ts +58 -58
  60. package/dist/dict/ko.d.ts.map +1 -1
  61. package/dist/dict/rc-keys.d.ts.map +1 -1
  62. package/dist/dict/sonamu-dictionary.d.ts.map +1 -1
  63. package/dist/dict/sonamu-dictionary.js +2 -2
  64. package/dist/dict/utils.d.ts.map +1 -1
  65. package/dist/entity/entity-manager.d.ts +115 -113
  66. package/dist/entity/entity-manager.d.ts.map +1 -1
  67. package/dist/entity/entity-manager.js +25 -19
  68. package/dist/entity/entity-template-cone.d.ts +4 -4
  69. package/dist/entity/entity.d.ts +6 -1
  70. package/dist/entity/entity.d.ts.map +1 -1
  71. package/dist/entity/entity.js +8 -3
  72. package/dist/env.d.ts.map +1 -1
  73. package/dist/exceptions/so-exceptions.d.ts.map +1 -1
  74. package/dist/filter/types.d.ts.map +1 -1
  75. package/dist/index.js +6 -6
  76. package/dist/logger/configure.d.ts +10 -1
  77. package/dist/logger/configure.d.ts.map +1 -1
  78. package/dist/logger/configure.js +30 -5
  79. package/dist/migration/migration-set.d.ts.map +1 -1
  80. package/dist/migration/migration-set.js +17 -6
  81. package/dist/migration/migrator.d.ts +12 -1
  82. package/dist/migration/migrator.d.ts.map +1 -1
  83. package/dist/migration/migrator.js +77 -30
  84. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  85. package/dist/migration/slack-confirm.d.ts.map +1 -1
  86. package/dist/naite/messaging-types.d.ts +0 -1
  87. package/dist/naite/messaging-types.d.ts.map +1 -1
  88. package/dist/naite/naite-reporter.d.ts +0 -1
  89. package/dist/naite/naite-reporter.d.ts.map +1 -1
  90. package/dist/naite/naite.d.ts.map +1 -1
  91. package/dist/storage/base-file.d.ts.map +1 -1
  92. package/dist/storage/buffered-file.d.ts.map +1 -1
  93. package/dist/storage/drivers.d.ts.map +1 -1
  94. package/dist/storage/s3-driver.d.ts.map +1 -1
  95. package/dist/storage/storage-manager.d.ts.map +1 -1
  96. package/dist/storage/uploaded-file.d.ts.map +1 -1
  97. package/dist/stream/ws-audience-resolver.d.ts.map +1 -1
  98. package/dist/stream/ws-audience.d.ts.map +1 -1
  99. package/dist/stream/ws-cluster-bus.d.ts.map +1 -1
  100. package/dist/stream/ws-delivery.d.ts.map +1 -1
  101. package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
  102. package/dist/stream/ws-presence-store.d.ts.map +1 -1
  103. package/dist/stream/ws-registry.d.ts.map +1 -1
  104. package/dist/stream/ws-telemetry-memory.d.ts.map +1 -1
  105. package/dist/stream/ws-telemetry.d.ts.map +1 -1
  106. package/dist/stream/ws.d.ts.map +1 -1
  107. package/dist/syncer/api-parser.js +2 -2
  108. package/dist/syncer/file-patterns.d.ts +17 -17
  109. package/dist/syncer/filesystem-dependencies.js +1 -1
  110. package/dist/syncer/syncer.d.ts.map +1 -1
  111. package/dist/tasks/step-wrapper.d.ts.map +1 -1
  112. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  113. package/dist/template/implementations/entity.template.d.ts +2 -2
  114. package/dist/template/implementations/entity.template.d.ts.map +1 -1
  115. package/dist/template/implementations/entry-server.template.d.ts +2 -2
  116. package/dist/template/implementations/entry-server.template.d.ts.map +1 -1
  117. package/dist/template/implementations/generated.template.d.ts +2 -2
  118. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  119. package/dist/template/implementations/generated_http.template.d.ts +2 -2
  120. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  121. package/dist/template/implementations/generated_sso.template.d.ts +2 -2
  122. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  123. package/dist/template/implementations/http_validators.template.d.ts +2 -2
  124. package/dist/template/implementations/http_validators.template.d.ts.map +1 -1
  125. package/dist/template/implementations/init_types.template.d.ts +2 -2
  126. package/dist/template/implementations/init_types.template.d.ts.map +1 -1
  127. package/dist/template/implementations/model.template.d.ts +2 -2
  128. package/dist/template/implementations/model.template.d.ts.map +1 -1
  129. package/dist/template/implementations/model_test.template.d.ts +2 -2
  130. package/dist/template/implementations/model_test.template.d.ts.map +1 -1
  131. package/dist/template/implementations/queries.template.d.ts +2 -2
  132. package/dist/template/implementations/queries.template.d.ts.map +1 -1
  133. package/dist/template/implementations/sd.template.d.ts +2 -2
  134. package/dist/template/implementations/sd.template.d.ts.map +1 -1
  135. package/dist/template/implementations/sd.template.js +1 -1
  136. package/dist/template/implementations/services.template.d.ts +2 -2
  137. package/dist/template/implementations/services.template.d.ts.map +1 -1
  138. package/dist/template/implementations/view_form.template.d.ts +3 -3
  139. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  140. package/dist/template/implementations/view_id_all_select.template.d.ts +2 -2
  141. package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -1
  142. package/dist/template/implementations/view_list.template.d.ts +2 -2
  143. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  144. package/dist/template/implementations/view_search_input.template.d.ts +2 -2
  145. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
  146. package/dist/template/template-manager.d.ts.map +1 -1
  147. package/dist/template/template.d.ts.map +1 -1
  148. package/dist/template/zod-converter.d.ts.map +1 -1
  149. package/dist/testing/_relation-graph.d.ts.map +1 -1
  150. package/dist/testing/data-explorer.d.ts +2 -2
  151. package/dist/testing/data-explorer.d.ts.map +1 -1
  152. package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
  153. package/dist/testing/faker-mappings.d.ts.map +1 -1
  154. package/dist/testing/fixture-generator.d.ts.map +1 -1
  155. package/dist/testing/fixture-generator.js +1 -1
  156. package/dist/testing/fixture-loader.d.ts.map +1 -1
  157. package/dist/testing/fixture-manager.d.ts +4 -0
  158. package/dist/testing/fixture-manager.d.ts.map +1 -1
  159. package/dist/testing/fixture-manager.js +99 -25
  160. package/dist/testing/naite-vitest-reporter.d.ts.map +1 -1
  161. package/dist/testing/parallel-db-manager.d.ts.map +1 -1
  162. package/dist/tooling/__tests__/helpers/sonamu-test-root.d.ts +10 -0
  163. package/dist/tooling/__tests__/helpers/sonamu-test-root.d.ts.map +1 -0
  164. package/dist/tooling/__tests__/helpers/sonamu-test-root.js +42 -0
  165. package/dist/tooling/cdd-service.d.ts +87 -0
  166. package/dist/tooling/cdd-service.d.ts.map +1 -0
  167. package/dist/tooling/cdd-service.js +215 -0
  168. package/dist/tooling/cli-tooling.d.ts +11 -0
  169. package/dist/tooling/cli-tooling.d.ts.map +1 -0
  170. package/dist/tooling/cli-tooling.js +901 -0
  171. package/dist/tooling/fixture-service.d.ts +29 -0
  172. package/dist/tooling/fixture-service.d.ts.map +1 -0
  173. package/dist/tooling/fixture-service.js +53 -0
  174. package/dist/tooling/index.d.ts +2 -0
  175. package/dist/tooling/index.d.ts.map +1 -0
  176. package/dist/tooling/index.js +2 -0
  177. package/dist/tooling/test-run-client.d.ts +27 -0
  178. package/dist/tooling/test-run-client.d.ts.map +1 -0
  179. package/dist/tooling/test-run-client.js +120 -0
  180. package/dist/tsdown.api.config.js +48 -0
  181. package/dist/types/types.d.ts +527 -527
  182. package/dist/types/types.d.ts.map +1 -1
  183. package/dist/ui/ai-client.d.ts.map +1 -1
  184. package/dist/utils/formatter.d.ts +6 -0
  185. package/dist/utils/formatter.d.ts.map +1 -1
  186. package/dist/utils/formatter.js +42 -11
  187. package/dist/utils/model.d.ts +1 -1
  188. package/dist/vector/chunking.d.ts.map +1 -1
  189. package/dist/vector/embedding.d.ts.map +1 -1
  190. package/package.json +13 -12
  191. package/src/api/sonamu.ts +2 -1
  192. package/src/auth/index.ts +1 -1
  193. package/src/bin/__tests__/zod-compiler-build.test.ts +67 -0
  194. package/src/bin/build-config.ts +151 -5
  195. package/src/bin/fixture.ts +204 -21
  196. package/src/bin/test-command.ts +27 -4
  197. package/src/bin/typecheck-web.ts +56 -0
  198. package/src/dict/sonamu-dictionary.ts +1 -1
  199. package/src/entity/__tests__/entity-manager-autoload.contract.test.ts +55 -0
  200. package/src/entity/__tests__/entity-manager-explicit-root-registration.contract.test.ts +107 -0
  201. package/src/entity/entity-manager.ts +31 -19
  202. package/src/entity/entity.ts +7 -2
  203. package/src/logger/__tests__/configure.test.ts +33 -0
  204. package/src/logger/configure.ts +45 -3
  205. package/src/migration/__tests__/migrator.test.ts +51 -0
  206. package/src/migration/migration-set.ts +22 -5
  207. package/src/migration/migrator.ts +103 -34
  208. package/src/syncer/api-parser.ts +1 -1
  209. package/src/testing/fixture-manager.ts +124 -32
  210. package/src/tooling/__tests__/cdd-rule-bootstrap.contract.test.ts +118 -0
  211. package/src/tooling/__tests__/cli-tooling-auth.contract.test.ts +72 -0
  212. package/src/tooling/__tests__/cli-tooling-cone-locale.contract.test.ts +150 -0
  213. package/src/tooling/__tests__/cli-tooling-entity-patch.contract.test.ts +131 -0
  214. package/src/tooling/__tests__/cli-tooling-fixture-transfer.contract.test.ts +255 -0
  215. package/src/tooling/__tests__/cli-tooling-i18n-update.contract.test.ts +104 -0
  216. package/src/tooling/__tests__/cli-tooling-scaffold.contract.test.ts +86 -0
  217. package/src/tooling/__tests__/cli-tooling-stub-practice.contract.test.ts +147 -0
  218. package/src/tooling/__tests__/default-cdd-adapter.contract.test.ts +73 -0
  219. package/src/tooling/__tests__/helpers/sonamu-test-root.ts +42 -0
  220. package/src/tooling/__tests__/test-run-client-config.contract.test.ts +154 -0
  221. package/src/tooling/cdd-service.ts +256 -0
  222. package/src/tooling/cli-tooling.ts +937 -0
  223. package/src/tooling/fixture-service.ts +72 -0
  224. package/src/tooling/index.ts +1 -0
  225. package/src/tooling/test-run-client.ts +196 -0
  226. package/src/utils/__tests__/formatter-bin.test.ts +99 -0
  227. package/src/utils/formatter.ts +74 -10
  228. package/tsdown.api.config.ts +8 -10
  229. package/bin/cli.js +0 -75
  230. package/dist/bin/cli.d.ts +0 -2
  231. package/dist/bin/cli.d.ts.map +0 -1
  232. package/dist/bin/cli.js +0 -956
  233. package/src/bin/cli.ts +0 -1166
@@ -3,6 +3,12 @@ import { init_category, isSameCategory } from "./category.js";
3
3
  import { configure, getConsoleSink } from "@logtape/logtape";
4
4
  import { getPrettyFormatter } from "@logtape/pretty";
5
5
  //#region src/logger/configure.ts
6
+ function getExternalLogTapeConfiguration() {
7
+ return globalThis.sonamuKitCliLogTapeOverride;
8
+ }
9
+ function hasExternalLogTapeConfiguration() {
10
+ return getExternalLogTapeConfiguration() !== void 0;
11
+ }
6
12
  function defaultFastifySink(fastifyCategory) {
7
13
  return getConsoleSink({ formatter: ((formatRecord, record) => {
8
14
  const filterFastify = (request, requestRecord, responseCode) => {
@@ -44,16 +50,34 @@ function defaultFastifyFilter(fastifyCategory) {
44
50
  };
45
51
  }
46
52
  async function configureLogTape(options) {
53
+ const external = getExternalLogTapeConfiguration();
47
54
  const fastifyCategory = options.fastifyCategory ?? ["fastify"];
48
- const sinks = {
55
+ const projectSinks = {
49
56
  "fastify-console": defaultFastifySink(fastifyCategory),
50
57
  ...options.sinks
51
58
  };
59
+ const externalSinkIds = /* @__PURE__ */ new Map();
60
+ const externalSinks = {};
61
+ for (const [sinkId, sink] of Object.entries(external?.config.sinks ?? {})) {
62
+ let namespacedId = `sonamu-cli:${sinkId}`;
63
+ while (Object.hasOwn(projectSinks, namespacedId) || Object.hasOwn(externalSinks, namespacedId)) namespacedId = `${namespacedId}-`;
64
+ externalSinkIds.set(sinkId, namespacedId);
65
+ externalSinks[namespacedId] = sink;
66
+ }
67
+ const sinks = {
68
+ ...projectSinks,
69
+ ...externalSinks
70
+ };
52
71
  const filters = {
53
72
  "fastify-console": defaultFastifyFilter(fastifyCategory),
54
- ...options.filters
73
+ ...options.filters,
74
+ ...external?.config.filters
55
75
  };
56
- const loggers = new Set(options.loggers ?? []);
76
+ const externalLoggers = (external?.config.loggers ?? []).map((logger) => ({
77
+ ...logger,
78
+ sinks: logger.sinks?.map((sinkId) => externalSinkIds.get(sinkId) ?? sinkId)
79
+ }));
80
+ const loggers = /* @__PURE__ */ new Set([...externalLoggers, ...options.loggers ?? []]);
57
81
  loggers.add({
58
82
  category: ["logtape", "meta"],
59
83
  lowestLevel: "fatal"
@@ -64,6 +88,7 @@ async function configureLogTape(options) {
64
88
  lowestLevel: "info",
65
89
  filters: ["fastify-console"]
66
90
  });
91
+ if (external !== void 0) external.applied = true;
67
92
  return configure({
68
93
  sinks,
69
94
  filters,
@@ -75,6 +100,6 @@ async function configureLogTape(options) {
75
100
  __esmMin((() => {
76
101
  init_category();
77
102
  }))();
78
- export { configureLogTape };
103
+ export { configureLogTape, hasExternalLogTapeConfiguration };
79
104
 
80
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb2dnZXIvY29uZmlndXJlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbmZpZ3VyZSwgZ2V0Q29uc29sZVNpbmsgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBGaWx0ZXIsXG4gIHR5cGUgRmlsdGVyTGlrZSxcbiAgdHlwZSBMb2dnZXJDb25maWcsXG4gIHR5cGUgTG9nUmVjb3JkLFxuICB0eXBlIFNpbmssXG4gIHR5cGUgVGV4dEZvcm1hdHRlcixcbn0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IGdldFByZXR0eUZvcm1hdHRlciB9IGZyb20gXCJAbG9ndGFwZS9wcmV0dHlcIjtcbmltcG9ydCB7IHR5cGUgRmFzdGlmeVJlcGx5LCB0eXBlIEZhc3RpZnlSZXF1ZXN0IH0gZnJvbSBcImZhc3RpZnlcIjtcblxuaW1wb3J0IHsgaXNTYW1lQ2F0ZWdvcnkgfSBmcm9tIFwiLi9jYXRlZ29yeVwiO1xuXG5leHBvcnQgdHlwZSBTb25hbXVMb2dnaW5nT3B0aW9uczxUU2lua0lkIGV4dGVuZHMgc3RyaW5nLCBURmlsdGVySWQgZXh0ZW5kcyBzdHJpbmc+ID0ge1xuICAvLyBmYXN0aWZ5IOuhnOq5hSDsubTthYzqs6DrpqwgKGEuYi5j7J2YIO2Yle2DnOuhnCDrhKPsnLzrqbQgW2EsIGIsIGNd66GcIOuTpOyWtOqwkeuLiOuLpC4pXG4gIC8vIOq4sOuzuOqwkuydgCBbXCJmYXN0aWZ5XCJdIOyeheuLiOuLpC5cbiAgZmFzdGlmeUNhdGVnb3J5PzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLy8g6rCBIO2VreuqqeuTpOydhCDshKTsoJXtlaAg65WMIFwiZmFzdGlmeS1jb25zb2xlXCLsnbQg65Ok7Ja06rCIIOqyveyasCwg642u7Ja07JSM7JuM7KeR64uI64ukLlxuICBzaW5rcz86IFJlY29yZDxUU2lua0lkLCBTaW5rPjtcbiAgZmlsdGVycz86IFJlY29yZDxURmlsdGVySWQsIEZpbHRlckxpa2U+O1xuXG4gIC8vIOqwgSDtla3rqqnsnYQg7ISk7KCV7ZWgIOuVjCBmYXN0aWZ5Q2F0ZWdvcnnsl5Ag7ISk7KCV65CcIOy5tO2FjOqzoOumrOqwgCDsnojsnYQg6rK97JqwLCDquLDrs7ggbG9nZ2VyIOyEpOygleydgCDstpTqsIDrkJjsp4Ag7JWK7Iq164uI64ukLlxuICBsb2dnZXJzPzogTG9nZ2VyQ29uZmlnPFRTaW5rSWQsIFRGaWx0ZXJJZD5bXTtcbn07XG5cbi8vIGZhc3RpZnnsl5Ag64yA7ZWcIOq4sOuzuCBzaW5rIOyEpOyglVxuZnVuY3Rpb24gZGVmYXVsdEZhc3RpZnlTaW5rKGZhc3RpZnlDYXRlZ29yeTogcmVhZG9ubHkgc3RyaW5nW10pOiBTaW5rIHtcbiAgY29uc3QgZmFzdGlmeUZvcm1hdHRlciA9ICgoZm9ybWF0UmVjb3JkOiBUZXh0Rm9ybWF0dGVyLCByZWNvcmQ6IExvZ1JlY29yZCkgPT4ge1xuICAgIC8vIEZhc3RpZnkgQVBJIFJvdXRl7JeQIOuMgO2VnCBMb2dnZXLsnZgg6rK97JqwLCDsnZHri7Ug7L2U65Oc7JmAIOyalOyyrSBVUkzsnYQg7LaU6rCAXG4gICAgY29uc3QgZmlsdGVyRmFzdGlmeSA9IChcbiAgICAgIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LFxuICAgICAgcmVxdWVzdFJlY29yZDogTG9nUmVjb3JkLFxuICAgICAgcmVzcG9uc2VDb2RlPzogbnVtYmVyLFxuICAgICkgPT4ge1xuICAgICAgaWYgKCFyZXF1ZXN0LnVybC5zdGFydHNXaXRoKFwiL2FwaVwiKSkge1xuICAgICAgICByZXR1cm4gZm9ybWF0UmVjb3JkKHJlcXVlc3RSZWNvcmQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYXN0SXRlbSA9IC8qIFNBRkVUWTogTG9nVGFwZSDqtazshLEg7Iqk7YKk66eI6rCAIOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcmVxdWVzdFJlY29yZFxuICAgICAgICAubWVzc2FnZVtyZXF1ZXN0UmVjb3JkLm1lc3NhZ2UubGVuZ3RoIC0gMV0gYXMgc3RyaW5nO1xuICAgICAgcmV0dXJuIGZvcm1hdFJlY29yZCh7XG4gICAgICAgIC4uLnJlcXVlc3RSZWNvcmQsXG4gICAgICAgIG1lc3NhZ2U6IFtcbiAgICAgICAgICAuLi5yZXF1ZXN0UmVjb3JkLm1lc3NhZ2Uuc2xpY2UoMCwgLTEpLFxuICAgICAgICAgIGBbJHtyZXF1ZXN0Lm1ldGhvZH0ke3Jlc3BvbnNlQ29kZSA/IGA6JHtyZXNwb25zZUNvZGV9YCA6IFwiXCJ9XSAke3JlcXVlc3Qub3JpZ2luYWxVcmx9IC0gJHtsYXN0SXRlbX1gLFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmICghaXNTYW1lQ2F0ZWdvcnkoZmFzdGlmeUNhdGVnb3J5LCBbLi4ucmVjb3JkLmNhdGVnb3J5XSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRSZWNvcmQocmVjb3JkKTtcbiAgICB9XG5cbiAgICBpZiAoXCJyZXFcIiBpbiByZWNvcmQucHJvcGVydGllcyAmJiByZWNvcmQucHJvcGVydGllcy5yZXEgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSAvKiBTQUZFVFk6IExvZ1RhcGUg6rWs7ISxIOyKpO2CpOuniOqwgCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJlY29yZC5wcm9wZXJ0aWVzXG4gICAgICAgIC5yZXEgYXMgRmFzdGlmeVJlcXVlc3Q7XG4gICAgICByZXR1cm4gZmlsdGVyRmFzdGlmeShyZXF1ZXN0LCByZWNvcmQpO1xuICAgIH1cblxuICAgIGlmIChcInJlc1wiIGluIHJlY29yZC5wcm9wZXJ0aWVzICYmIHJlY29yZC5wcm9wZXJ0aWVzLnJlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcmVwbHkgPSAvKiBTQUZFVFk6IExvZ1RhcGUg6rWs7ISxIOyKpO2CpOuniOqwgCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJlY29yZC5wcm9wZXJ0aWVzXG4gICAgICAgIC5yZXMgYXMgRmFzdGlmeVJlcGx5O1xuICAgICAgcmV0dXJuIGZpbHRlckZhc3RpZnkocmVwbHkucmVxdWVzdCwgcmVjb3JkLCByZXBseS5zdGF0dXNDb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0UmVjb3JkKHJlY29yZCk7XG4gIH0pLmJpbmQoXG4gICAgbnVsbCxcbiAgICBnZXRQcmV0dHlGb3JtYXR0ZXIoe1xuICAgICAgdGltZXN0YW1wOiBcInRpbWVcIixcbiAgICAgIGNhdGVnb3J5V2lkdGg6IDIwLFxuICAgICAgY2F0ZWdvcnlUcnVuY2F0ZTogXCJtaWRkbGVcIixcbiAgICB9KSxcbiAgKTtcblxuICByZXR1cm4gZ2V0Q29uc29sZVNpbmsoe1xuICAgIGZvcm1hdHRlcjogZmFzdGlmeUZvcm1hdHRlcixcbiAgfSk7XG59XG5cbi8vIGZhc3RpZnnsl5Ag64yA7ZWcIOq4sOuzuCBmaWx0ZXIg7ISk7KCVICgvYXBpIOqyveuhnOydmCDsmpTssq3rp4wg66Gc6rmFKVxuZnVuY3Rpb24gZGVmYXVsdEZhc3RpZnlGaWx0ZXIoZmFzdGlmeUNhdGVnb3J5OiByZWFkb25seSBzdHJpbmdbXSk6IEZpbHRlciB7XG4gIHJldHVybiAocmVjb3JkOiBMb2dSZWNvcmQpID0+IHtcbiAgICBpZiAoIWlzU2FtZUNhdGVnb3J5KFsuLi5mYXN0aWZ5Q2F0ZWdvcnldLCBbLi4ucmVjb3JkLmNhdGVnb3J5XSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXCJyZXFcIiBpbiByZWNvcmQucHJvcGVydGllcyAmJiByZWNvcmQucHJvcGVydGllcy5yZXEgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSAvKiBTQUZFVFk6IExvZ1RhcGUg6rWs7ISxIOyKpO2CpOuniOqwgCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJlY29yZC5wcm9wZXJ0aWVzXG4gICAgICAgIC5yZXEgYXMgRmFzdGlmeVJlcXVlc3Q7XG4gICAgICByZXR1cm4gcmVxdWVzdC51cmwuc3RhcnRzV2l0aChcIi9hcGlcIikgJiYgcmVxdWVzdC51cmwgIT09IFwiL2FwaS9oZWFsdGhjaGVja1wiO1xuICAgIH1cblxuICAgIGlmIChcInJlc1wiIGluIHJlY29yZC5wcm9wZXJ0aWVzICYmIHJlY29yZC5wcm9wZXJ0aWVzLnJlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcmVwbHkgPSAvKiBTQUZFVFk6IExvZ1RhcGUg6rWs7ISxIOyKpO2CpOuniOqwgCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJlY29yZC5wcm9wZXJ0aWVzXG4gICAgICAgIC5yZXMgYXMgRmFzdGlmeVJlcGx5O1xuICAgICAgcmV0dXJuIHJlcGx5LnJlcXVlc3QudXJsLnN0YXJ0c1dpdGgoXCIvYXBpXCIpICYmIHJlcGx5LnJlcXVlc3QudXJsICE9PSBcIi9hcGkvaGVhbHRoY2hlY2tcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxuLy8g7KCE7LK0IGxvZ3RhcGUg7ISk7KCVXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29uZmlndXJlTG9nVGFwZTxUU2lua0lkIGV4dGVuZHMgc3RyaW5nLCBURmlsdGVySWQgZXh0ZW5kcyBzdHJpbmc+KFxuICBvcHRpb25zOiBTb25hbXVMb2dnaW5nT3B0aW9uczxUU2lua0lkLCBURmlsdGVySWQ+LFxuKSB7XG4gIGNvbnN0IGZhc3RpZnlDYXRlZ29yeSA9IG9wdGlvbnMuZmFzdGlmeUNhdGVnb3J5ID8/IFtcImZhc3RpZnlcIl07XG5cbiAgY29uc3Qgc2lua3MgPSB7XG4gICAgXCJmYXN0aWZ5LWNvbnNvbGVcIjogZGVmYXVsdEZhc3RpZnlTaW5rKGZhc3RpZnlDYXRlZ29yeSksXG4gICAgLi4ub3B0aW9ucy5zaW5rcyxcbiAgfTtcblxuICBjb25zdCBmaWx0ZXJzID0ge1xuICAgIFwiZmFzdGlmeS1jb25zb2xlXCI6IGRlZmF1bHRGYXN0aWZ5RmlsdGVyKGZhc3RpZnlDYXRlZ29yeSksXG4gICAgLi4ub3B0aW9ucy5maWx0ZXJzLFxuICB9O1xuXG4gIGNvbnN0IGxvZ2dlcnMgPSBuZXcgU2V0PExvZ2dlckNvbmZpZzxzdHJpbmcsIHN0cmluZz4+KG9wdGlvbnMubG9nZ2VycyA/PyBbXSk7XG5cbiAgLy8gbG9ndGFwZeydmCBtZXRhIGxvZ2dlciDtkZzsi5zrpbwg67mE7Zmc7ISx7ZmUXG4gIGxvZ2dlcnMuYWRkKHtcbiAgICBjYXRlZ29yeTogW1wibG9ndGFwZVwiLCBcIm1ldGFcIl0sXG4gICAgbG93ZXN0TGV2ZWw6IFwiZmF0YWxcIixcbiAgfSk7XG5cbiAgaWYgKFsuLi5sb2dnZXJzXS5ldmVyeSgobG9nZ2VyKSA9PiAhaXNTYW1lQ2F0ZWdvcnkoWy4uLmZhc3RpZnlDYXRlZ29yeV0sIGxvZ2dlci5jYXRlZ29yeSkpKSB7XG4gICAgbG9nZ2Vycy5hZGQoe1xuICAgICAgY2F0ZWdvcnk6IFsuLi5mYXN0aWZ5Q2F0ZWdvcnldLFxuICAgICAgc2lua3M6IFtcImZhc3RpZnktY29uc29sZVwiXSxcbiAgICAgIGxvd2VzdExldmVsOiBcImluZm9cIixcbiAgICAgIGZpbHRlcnM6IFtcImZhc3RpZnktY29uc29sZVwiXSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBjb25maWd1cmUoeyBzaW5rcywgZmlsdGVycywgbG9nZ2VyczogWy4uLmxvZ2dlcnNdLCByZXNldDogdHJ1ZSB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE0QkEsU0FBUyxtQkFBbUIsaUJBQTBDO0NBaURwRSxPQUFPLGVBQWUsRUFDcEIsYUFqRHlCLGNBQTZCLFdBQXNCO0VBRTVFLE1BQU0saUJBQ0osU0FDQSxlQUNBLGlCQUNHO0dBQ0gsSUFBSSxDQUFDLFFBQVEsSUFBSSxXQUFXLE1BQU0sR0FDaEMsT0FBTyxhQUFhLGFBQWE7R0FHbkMsTUFBTSxXQUF3RCxjQUMzRCxRQUFRLGNBQWMsUUFBUSxTQUFTO0dBQzFDLE9BQU8sYUFBYTtJQUNsQixHQUFHO0lBQ0gsU0FBUyxDQUNQLEdBQUcsY0FBYyxRQUFRLE1BQU0sR0FBRyxFQUFFLEdBQ3BDLElBQUksUUFBUSxTQUFTLGVBQWUsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLFFBQVEsWUFBWSxLQUFLLFVBQzNGO0dBQ0YsQ0FBQztFQUNIO0VBRUEsSUFBSSxDQUFDLGVBQWUsaUJBQWlCLENBQUMsR0FBRyxPQUFPLFFBQVEsQ0FBQyxHQUN2RCxPQUFPLGFBQWEsTUFBTTtFQUc1QixJQUFJLFNBQVMsT0FBTyxjQUFjLE9BQU8sV0FBVyxRQUFRLE1BQU07R0FDaEUsTUFBTSxVQUF1RCxPQUFPLFdBQ2pFO0dBQ0gsT0FBTyxjQUFjLFNBQVMsTUFBTTtFQUN0QztFQUVBLElBQUksU0FBUyxPQUFPLGNBQWMsT0FBTyxXQUFXLFFBQVEsTUFBTTtHQUNoRSxNQUFNLFFBQXFELE9BQU8sV0FDL0Q7R0FDSCxPQUFPLGNBQWMsTUFBTSxTQUFTLFFBQVEsTUFBTSxVQUFVO0VBQzlEO0VBRUEsT0FBTyxhQUFhLE1BQU07Q0FDNUIsRUFBQSxDQUFHLEtBQ0QsTUFDQSxtQkFBbUI7RUFDakIsV0FBVztFQUNYLGVBQWU7RUFDZixrQkFBa0I7Q0FDcEIsQ0FBQyxDQUlVLEVBQ2IsQ0FBQztBQUNIO0FBR0EsU0FBUyxxQkFBcUIsaUJBQTRDO0NBQ3hFLFFBQVEsV0FBc0I7RUFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLGVBQWUsR0FBRyxDQUFDLEdBQUcsT0FBTyxRQUFRLENBQUMsR0FDNUQsT0FBTztFQUdULElBQUksU0FBUyxPQUFPLGNBQWMsT0FBTyxXQUFXLFFBQVEsTUFBTTtHQUNoRSxNQUFNLFVBQXVELE9BQU8sV0FDakU7R0FDSCxPQUFPLFFBQVEsSUFBSSxXQUFXLE1BQU0sS0FBSyxRQUFRLFFBQVE7RUFDM0Q7RUFFQSxJQUFJLFNBQVMsT0FBTyxjQUFjLE9BQU8sV0FBVyxRQUFRLE1BQU07R0FDaEUsTUFBTSxRQUFxRCxPQUFPLFdBQy9EO0dBQ0gsT0FBTyxNQUFNLFFBQVEsSUFBSSxXQUFXLE1BQU0sS0FBSyxNQUFNLFFBQVEsUUFBUTtFQUN2RTtFQUVBLE9BQU87Q0FDVDtBQUNGO0FBR0EsZUFBc0IsaUJBQ3BCLFNBQ0E7Q0FDQSxNQUFNLGtCQUFrQixRQUFRLG1CQUFtQixDQUFDLFNBQVM7Q0FFN0QsTUFBTSxRQUFRO0VBQ1osbUJBQW1CLG1CQUFtQixlQUFlO0VBQ3JELEdBQUcsUUFBUTtDQUNiO0NBRUEsTUFBTSxVQUFVO0VBQ2QsbUJBQW1CLHFCQUFxQixlQUFlO0VBQ3ZELEdBQUcsUUFBUTtDQUNiO0NBRUEsTUFBTSxVQUFVLElBQUksSUFBa0MsUUFBUSxXQUFXLENBQUMsQ0FBQztDQUczRSxRQUFRLElBQUk7RUFDVixVQUFVLENBQUMsV0FBVyxNQUFNO0VBQzVCLGFBQWE7Q0FDZixDQUFDO0NBRUQsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsT0FBTyxXQUFXLENBQUMsZUFBZSxDQUFDLEdBQUcsZUFBZSxHQUFHLE9BQU8sUUFBUSxDQUFDLEdBQ3ZGLFFBQVEsSUFBSTtFQUNWLFVBQVUsQ0FBQyxHQUFHLGVBQWU7RUFDN0IsT0FBTyxDQUFDLGlCQUFpQjtFQUN6QixhQUFhO0VBQ2IsU0FBUyxDQUFDLGlCQUFpQjtDQUM3QixDQUFDO0NBR0gsT0FBTyxVQUFVO0VBQUU7RUFBTztFQUFTLFNBQVMsQ0FBQyxHQUFHLE9BQU87RUFBRyxPQUFPO0NBQUssQ0FBQztBQUN6RTs7O2VBL0gyQyJ9
105
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb2dnZXIvY29uZmlndXJlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbmZpZ3VyZSwgZ2V0Q29uc29sZVNpbmsgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBDb25maWcsXG4gIHR5cGUgRmlsdGVyLFxuICB0eXBlIEZpbHRlckxpa2UsXG4gIHR5cGUgTG9nZ2VyQ29uZmlnLFxuICB0eXBlIExvZ1JlY29yZCxcbiAgdHlwZSBTaW5rLFxuICB0eXBlIFRleHRGb3JtYXR0ZXIsXG59IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyBnZXRQcmV0dHlGb3JtYXR0ZXIgfSBmcm9tIFwiQGxvZ3RhcGUvcHJldHR5XCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlSZXBseSwgdHlwZSBGYXN0aWZ5UmVxdWVzdCB9IGZyb20gXCJmYXN0aWZ5XCI7XG5cbmltcG9ydCB7IGlzU2FtZUNhdGVnb3J5IH0gZnJvbSBcIi4vY2F0ZWdvcnlcIjtcblxuaW50ZXJmYWNlIEV4dGVybmFsTG9nVGFwZUNvbmZpZ3VyYXRpb24ge1xuICByZWFkb25seSBjb25maWc6IENvbmZpZzxzdHJpbmcsIHN0cmluZz47XG4gIGFwcGxpZWQ6IGJvb2xlYW47XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgdmFyIHNvbmFtdUtpdENsaUxvZ1RhcGVPdmVycmlkZTogRXh0ZXJuYWxMb2dUYXBlQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0RXh0ZXJuYWxMb2dUYXBlQ29uZmlndXJhdGlvbigpOiBFeHRlcm5hbExvZ1RhcGVDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXMuc29uYW11S2l0Q2xpTG9nVGFwZU92ZXJyaWRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRXh0ZXJuYWxMb2dUYXBlQ29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldEV4dGVybmFsTG9nVGFwZUNvbmZpZ3VyYXRpb24oKSAhPT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgdHlwZSBTb25hbXVMb2dnaW5nT3B0aW9uczxUU2lua0lkIGV4dGVuZHMgc3RyaW5nLCBURmlsdGVySWQgZXh0ZW5kcyBzdHJpbmc+ID0ge1xuICAvLyBmYXN0aWZ5IOuhnOq5hSDsubTthYzqs6DrpqwgKGEuYi5j7J2YIO2Yle2DnOuhnCDrhKPsnLzrqbQgW2EsIGIsIGNd66GcIOuTpOyWtOqwkeuLiOuLpC4pXG4gIC8vIOq4sOuzuOqwkuydgCBbXCJmYXN0aWZ5XCJdIOyeheuLiOuLpC5cbiAgZmFzdGlmeUNhdGVnb3J5PzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLy8g6rCBIO2VreuqqeuTpOydhCDshKTsoJXtlaAg65WMIFwiZmFzdGlmeS1jb25zb2xlXCLsnbQg65Ok7Ja06rCIIOqyveyasCwg642u7Ja07JSM7JuM7KeR64uI64ukLlxuICBzaW5rcz86IFJlY29yZDxUU2lua0lkLCBTaW5rPjtcbiAgZmlsdGVycz86IFJlY29yZDxURmlsdGVySWQsIEZpbHRlckxpa2U+O1xuXG4gIC8vIOqwgSDtla3rqqnsnYQg7ISk7KCV7ZWgIOuVjCBmYXN0aWZ5Q2F0ZWdvcnnsl5Ag7ISk7KCV65CcIOy5tO2FjOqzoOumrOqwgCDsnojsnYQg6rK97JqwLCDquLDrs7ggbG9nZ2VyIOyEpOygleydgCDstpTqsIDrkJjsp4Ag7JWK7Iq164uI64ukLlxuICBsb2dnZXJzPzogTG9nZ2VyQ29uZmlnPFRTaW5rSWQsIFRGaWx0ZXJJZD5bXTtcbn07XG5cbi8vIGZhc3RpZnnsl5Ag64yA7ZWcIOq4sOuzuCBzaW5rIOyEpOyglVxuZnVuY3Rpb24gZGVmYXVsdEZhc3RpZnlTaW5rKGZhc3RpZnlDYXRlZ29yeTogcmVhZG9ubHkgc3RyaW5nW10pOiBTaW5rIHtcbiAgY29uc3QgZmFzdGlmeUZvcm1hdHRlciA9ICgoZm9ybWF0UmVjb3JkOiBUZXh0Rm9ybWF0dGVyLCByZWNvcmQ6IExvZ1JlY29yZCkgPT4ge1xuICAgIC8vIEZhc3RpZnkgQVBJIFJvdXRl7JeQIOuMgO2VnCBMb2dnZXLsnZgg6rK97JqwLCDsnZHri7Ug7L2U65Oc7JmAIOyalOyyrSBVUkzsnYQg7LaU6rCAXG4gICAgY29uc3QgZmlsdGVyRmFzdGlmeSA9IChcbiAgICAgIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LFxuICAgICAgcmVxdWVzdFJlY29yZDogTG9nUmVjb3JkLFxuICAgICAgcmVzcG9uc2VDb2RlPzogbnVtYmVyLFxuICAgICkgPT4ge1xuICAgICAgaWYgKCFyZXF1ZXN0LnVybC5zdGFydHNXaXRoKFwiL2FwaVwiKSkge1xuICAgICAgICByZXR1cm4gZm9ybWF0UmVjb3JkKHJlcXVlc3RSZWNvcmQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYXN0SXRlbSA9IC8qIFNBRkVUWTogTG9nVGFwZSDqtazshLEg7Iqk7YKk66eI6rCAIOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcmVxdWVzdFJlY29yZFxuICAgICAgICAubWVzc2FnZVtyZXF1ZXN0UmVjb3JkLm1lc3NhZ2UubGVuZ3RoIC0gMV0gYXMgc3RyaW5nO1xuICAgICAgcmV0dXJuIGZvcm1hdFJlY29yZCh7XG4gICAgICAgIC4uLnJlcXVlc3RSZWNvcmQsXG4gICAgICAgIG1lc3NhZ2U6IFtcbiAgICAgICAgICAuLi5yZXF1ZXN0UmVjb3JkLm1lc3NhZ2Uuc2xpY2UoMCwgLTEpLFxuICAgICAgICAgIGBbJHtyZXF1ZXN0Lm1ldGhvZH0ke3Jlc3BvbnNlQ29kZSA/IGA6JHtyZXNwb25zZUNvZGV9YCA6IFwiXCJ9XSAke3JlcXVlc3Qub3JpZ2luYWxVcmx9IC0gJHtsYXN0SXRlbX1gLFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmICghaXNTYW1lQ2F0ZWdvcnkoZmFzdGlmeUNhdGVnb3J5LCBbLi4ucmVjb3JkLmNhdGVnb3J5XSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRSZWNvcmQocmVjb3JkKTtcbiAgICB9XG5cbiAgICBpZiAoXCJyZXFcIiBpbiByZWNvcmQucHJvcGVydGllcyAmJiByZWNvcmQucHJvcGVydGllcy5yZXEgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSAvKiBTQUZFVFk6IExvZ1RhcGUg6rWs7ISxIOyKpO2CpOuniOqwgCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJlY29yZC5wcm9wZXJ0aWVzXG4gICAgICAgIC5yZXEgYXMgRmFzdGlmeVJlcXVlc3Q7XG4gICAgICByZXR1cm4gZmlsdGVyRmFzdGlmeShyZXF1ZXN0LCByZWNvcmQpO1xuICAgIH1cblxuICAgIGlmIChcInJlc1wiIGluIHJlY29yZC5wcm9wZXJ0aWVzICYmIHJlY29yZC5wcm9wZXJ0aWVzLnJlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcmVwbHkgPSAvKiBTQUZFVFk6IExvZ1RhcGUg6rWs7ISxIOyKpO2CpOuniOqwgCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJlY29yZC5wcm9wZXJ0aWVzXG4gICAgICAgIC5yZXMgYXMgRmFzdGlmeVJlcGx5O1xuICAgICAgcmV0dXJuIGZpbHRlckZhc3RpZnkocmVwbHkucmVxdWVzdCwgcmVjb3JkLCByZXBseS5zdGF0dXNDb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0UmVjb3JkKHJlY29yZCk7XG4gIH0pLmJpbmQoXG4gICAgbnVsbCxcbiAgICBnZXRQcmV0dHlGb3JtYXR0ZXIoe1xuICAgICAgdGltZXN0YW1wOiBcInRpbWVcIixcbiAgICAgIGNhdGVnb3J5V2lkdGg6IDIwLFxuICAgICAgY2F0ZWdvcnlUcnVuY2F0ZTogXCJtaWRkbGVcIixcbiAgICB9KSxcbiAgKTtcblxuICByZXR1cm4gZ2V0Q29uc29sZVNpbmsoe1xuICAgIGZvcm1hdHRlcjogZmFzdGlmeUZvcm1hdHRlcixcbiAgfSk7XG59XG5cbi8vIGZhc3RpZnnsl5Ag64yA7ZWcIOq4sOuzuCBmaWx0ZXIg7ISk7KCVICgvYXBpIOqyveuhnOydmCDsmpTssq3rp4wg66Gc6rmFKVxuZnVuY3Rpb24gZGVmYXVsdEZhc3RpZnlGaWx0ZXIoZmFzdGlmeUNhdGVnb3J5OiByZWFkb25seSBzdHJpbmdbXSk6IEZpbHRlciB7XG4gIHJldHVybiAocmVjb3JkOiBMb2dSZWNvcmQpID0+IHtcbiAgICBpZiAoIWlzU2FtZUNhdGVnb3J5KFsuLi5mYXN0aWZ5Q2F0ZWdvcnldLCBbLi4ucmVjb3JkLmNhdGVnb3J5XSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXCJyZXFcIiBpbiByZWNvcmQucHJvcGVydGllcyAmJiByZWNvcmQucHJvcGVydGllcy5yZXEgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSAvKiBTQUZFVFk6IExvZ1RhcGUg6rWs7ISxIOyKpO2CpOuniOqwgCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJlY29yZC5wcm9wZXJ0aWVzXG4gICAgICAgIC5yZXEgYXMgRmFzdGlmeVJlcXVlc3Q7XG4gICAgICByZXR1cm4gcmVxdWVzdC51cmwuc3RhcnRzV2l0aChcIi9hcGlcIikgJiYgcmVxdWVzdC51cmwgIT09IFwiL2FwaS9oZWFsdGhjaGVja1wiO1xuICAgIH1cblxuICAgIGlmIChcInJlc1wiIGluIHJlY29yZC5wcm9wZXJ0aWVzICYmIHJlY29yZC5wcm9wZXJ0aWVzLnJlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcmVwbHkgPSAvKiBTQUZFVFk6IExvZ1RhcGUg6rWs7ISxIOyKpO2CpOuniOqwgCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJlY29yZC5wcm9wZXJ0aWVzXG4gICAgICAgIC5yZXMgYXMgRmFzdGlmeVJlcGx5O1xuICAgICAgcmV0dXJuIHJlcGx5LnJlcXVlc3QudXJsLnN0YXJ0c1dpdGgoXCIvYXBpXCIpICYmIHJlcGx5LnJlcXVlc3QudXJsICE9PSBcIi9hcGkvaGVhbHRoY2hlY2tcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxuLy8g7KCE7LK0IGxvZ3RhcGUg7ISk7KCVXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29uZmlndXJlTG9nVGFwZTxUU2lua0lkIGV4dGVuZHMgc3RyaW5nLCBURmlsdGVySWQgZXh0ZW5kcyBzdHJpbmc+KFxuICBvcHRpb25zOiBTb25hbXVMb2dnaW5nT3B0aW9uczxUU2lua0lkLCBURmlsdGVySWQ+LFxuKSB7XG4gIGNvbnN0IGV4dGVybmFsID0gZ2V0RXh0ZXJuYWxMb2dUYXBlQ29uZmlndXJhdGlvbigpO1xuICBjb25zdCBmYXN0aWZ5Q2F0ZWdvcnkgPSBvcHRpb25zLmZhc3RpZnlDYXRlZ29yeSA/PyBbXCJmYXN0aWZ5XCJdO1xuXG4gIGNvbnN0IHByb2plY3RTaW5rcyA9IHtcbiAgICBcImZhc3RpZnktY29uc29sZVwiOiBkZWZhdWx0RmFzdGlmeVNpbmsoZmFzdGlmeUNhdGVnb3J5KSxcbiAgICAuLi5vcHRpb25zLnNpbmtzLFxuICB9IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBTaW5rPjtcbiAgY29uc3QgZXh0ZXJuYWxTaW5rSWRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgY29uc3QgZXh0ZXJuYWxTaW5rczogUmVjb3JkPHN0cmluZywgU2luaz4gPSB7fTtcbiAgZm9yIChjb25zdCBbc2lua0lkLCBzaW5rXSBvZiBPYmplY3QuZW50cmllcyhleHRlcm5hbD8uY29uZmlnLnNpbmtzID8/IHt9KSkge1xuICAgIGxldCBuYW1lc3BhY2VkSWQgPSBgc29uYW11LWNsaToke3NpbmtJZH1gO1xuICAgIHdoaWxlIChcbiAgICAgIE9iamVjdC5oYXNPd24ocHJvamVjdFNpbmtzLCBuYW1lc3BhY2VkSWQpIHx8XG4gICAgICBPYmplY3QuaGFzT3duKGV4dGVybmFsU2lua3MsIG5hbWVzcGFjZWRJZClcbiAgICApIHtcbiAgICAgIG5hbWVzcGFjZWRJZCA9IGAke25hbWVzcGFjZWRJZH0tYDtcbiAgICB9XG4gICAgZXh0ZXJuYWxTaW5rSWRzLnNldChzaW5rSWQsIG5hbWVzcGFjZWRJZCk7XG4gICAgZXh0ZXJuYWxTaW5rc1tuYW1lc3BhY2VkSWRdID0gc2luaztcbiAgfVxuICBjb25zdCBzaW5rcyA9IHsgLi4ucHJvamVjdFNpbmtzLCAuLi5leHRlcm5hbFNpbmtzIH07XG5cbiAgY29uc3QgZmlsdGVycyA9IHtcbiAgICBcImZhc3RpZnktY29uc29sZVwiOiBkZWZhdWx0RmFzdGlmeUZpbHRlcihmYXN0aWZ5Q2F0ZWdvcnkpLFxuICAgIC4uLm9wdGlvbnMuZmlsdGVycyxcbiAgICAuLi5leHRlcm5hbD8uY29uZmlnLmZpbHRlcnMsXG4gIH07XG5cbiAgY29uc3QgZXh0ZXJuYWxMb2dnZXJzID0gKGV4dGVybmFsPy5jb25maWcubG9nZ2VycyA/PyBbXSkubWFwKChsb2dnZXIpID0+ICh7XG4gICAgLi4ubG9nZ2VyLFxuICAgIHNpbmtzOiBsb2dnZXIuc2lua3M/Lm1hcCgoc2lua0lkKSA9PiBleHRlcm5hbFNpbmtJZHMuZ2V0KHNpbmtJZCkgPz8gc2lua0lkKSxcbiAgfSkpO1xuICBjb25zdCBsb2dnZXJzID0gbmV3IFNldDxMb2dnZXJDb25maWc8c3RyaW5nLCBzdHJpbmc+PihbXG4gICAgLi4uZXh0ZXJuYWxMb2dnZXJzLFxuICAgIC4uLihvcHRpb25zLmxvZ2dlcnMgPz8gW10pLFxuICBdKTtcblxuICAvLyBsb2d0YXBl7J2YIG1ldGEgbG9nZ2VyIO2RnOyLnOulvCDruYTtmZzshLHtmZRcbiAgbG9nZ2Vycy5hZGQoe1xuICAgIGNhdGVnb3J5OiBbXCJsb2d0YXBlXCIsIFwibWV0YVwiXSxcbiAgICBsb3dlc3RMZXZlbDogXCJmYXRhbFwiLFxuICB9KTtcblxuICBpZiAoWy4uLmxvZ2dlcnNdLmV2ZXJ5KChsb2dnZXIpID0+ICFpc1NhbWVDYXRlZ29yeShbLi4uZmFzdGlmeUNhdGVnb3J5XSwgbG9nZ2VyLmNhdGVnb3J5KSkpIHtcbiAgICBsb2dnZXJzLmFkZCh7XG4gICAgICBjYXRlZ29yeTogWy4uLmZhc3RpZnlDYXRlZ29yeV0sXG4gICAgICBzaW5rczogW1wiZmFzdGlmeS1jb25zb2xlXCJdLFxuICAgICAgbG93ZXN0TGV2ZWw6IFwiaW5mb1wiLFxuICAgICAgZmlsdGVyczogW1wiZmFzdGlmeS1jb25zb2xlXCJdLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGV4dGVybmFsICE9PSB1bmRlZmluZWQpIGV4dGVybmFsLmFwcGxpZWQgPSB0cnVlO1xuICByZXR1cm4gY29uZmlndXJlKHsgc2lua3MsIGZpbHRlcnMsIGxvZ2dlcnM6IFsuLi5sb2dnZXJzXSwgcmVzZXQ6IHRydWUgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBd0JBLFNBQVMsa0NBQTRFO0NBQ25GLE9BQU8sV0FBVztBQUNwQjtBQUVBLFNBQWdCLGtDQUEyQztDQUN6RCxPQUFPLGdDQUFnQyxNQUFNO0FBQy9DO0FBZ0JBLFNBQVMsbUJBQW1CLGlCQUEwQztDQWlEcEUsT0FBTyxlQUFlLEVBQ3BCLGFBakR5QixjQUE2QixXQUFzQjtFQUU1RSxNQUFNLGlCQUNKLFNBQ0EsZUFDQSxpQkFDRztHQUNILElBQUksQ0FBQyxRQUFRLElBQUksV0FBVyxNQUFNLEdBQ2hDLE9BQU8sYUFBYSxhQUFhO0dBR25DLE1BQU0sV0FBd0QsY0FDM0QsUUFBUSxjQUFjLFFBQVEsU0FBUztHQUMxQyxPQUFPLGFBQWE7SUFDbEIsR0FBRztJQUNILFNBQVMsQ0FDUCxHQUFHLGNBQWMsUUFBUSxNQUFNLEdBQUcsRUFBRSxHQUNwQyxJQUFJLFFBQVEsU0FBUyxlQUFlLElBQUksaUJBQWlCLEdBQUcsSUFBSSxRQUFRLFlBQVksS0FBSyxVQUMzRjtHQUNGLENBQUM7RUFDSDtFQUVBLElBQUksQ0FBQyxlQUFlLGlCQUFpQixDQUFDLEdBQUcsT0FBTyxRQUFRLENBQUMsR0FDdkQsT0FBTyxhQUFhLE1BQU07RUFHNUIsSUFBSSxTQUFTLE9BQU8sY0FBYyxPQUFPLFdBQVcsUUFBUSxNQUFNO0dBQ2hFLE1BQU0sVUFBdUQsT0FB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
@@ -1 +1 @@
1
- {"version":3,"file":"migration-set.d.ts","sourceRoot":"","sources":["../../src/migration/migration-set.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAc/C,OAAO,EAOL,KAAK,wBAAwB,EAC9B,MAAM,gBAAgB,CAAC;AAGxB;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,wBAAwB,CA0LlF"}
1
+ {"version":3,"file":"migration-set.d.ts","sourceRoot":"","sources":["../../src/migration/migration-set.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAc/C,OAAO,EAOL,KAAK,wBAAwB,EAC9B,MAAM,gBAAgB,CAAC;AAOxB;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,wBAAwB,CAuMlF"}
@@ -23,11 +23,19 @@ function getMigrationSetFromEntity(entity) {
23
23
  return {};
24
24
  })(),
25
25
  ...isStringProp(prop) && prop.length !== void 0 && { length: prop.length },
26
- ...(isNumberProp(prop) || isNumericProp(prop)) && {
27
- precision: prop.precision,
28
- scale: prop.scale,
29
- numberType: isNumberProp(prop) ? prop.numberType ?? "numeric" : "numeric"
30
- },
26
+ ...(isNumberProp(prop) || isNumericProp(prop)) && (() => {
27
+ const numberType = isNumberProp(prop) ? prop.numberType ?? "numeric" : "numeric";
28
+ if (numberType === "numeric") return {
29
+ numberType,
30
+ precision: prop.precision ?? NUMERIC_DEFAULT_PRECISION,
31
+ scale: prop.scale ?? NUMERIC_DEFAULT_SCALE
32
+ };
33
+ return {
34
+ numberType,
35
+ precision: prop.precision,
36
+ scale: prop.scale
37
+ };
38
+ })(),
31
39
  ...isVectorProp(prop) && { dimensions: prop.dimensions },
32
40
  ...prop.generated && { generated: prop.generated }
33
41
  };
@@ -157,13 +165,16 @@ function resolveEntityPropTypeToMigrationColumnType(prop) {
157
165
  throw new Error(`Unknown entity prop type: ${prop.type}`);
158
166
  }
159
167
  }
168
+ var NUMERIC_DEFAULT_PRECISION, NUMERIC_DEFAULT_SCALE;
160
169
  var init_migration_set = __esmMin((() => {
161
170
  init_entity_manager();
162
171
  init_types();
163
172
  init_utils();
173
+ NUMERIC_DEFAULT_PRECISION = 8;
174
+ NUMERIC_DEFAULT_SCALE = 2;
164
175
  }));
165
176
  //#endregion
166
177
  init_migration_set();
167
178
  export { getMigrationSetFromEntity, init_migration_set };
168
179
 
169
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0aW9uLXNldC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlncmF0aW9uL21pZ3JhdGlvbi1zZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcblxuaW1wb3J0IHsgdHlwZSBFbnRpdHkgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eVwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wLFxuICBpc0hhc01hbnlSZWxhdGlvblByb3AsXG4gIGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcCxcbiAgaXNOdW1iZXJQcm9wLFxuICBpc051bWVyaWNQcm9wLFxuICBpc09uZVRvT25lUmVsYXRpb25Qcm9wLFxuICBpc1JlbGF0aW9uUHJvcCxcbiAgaXNTdHJpbmdQcm9wLFxuICBpc1ZlY3RvclByb3AsXG4gIGlzVmlydHVhbFByb3AsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbnRpdHlQcm9wLFxuICB0eXBlIE1pZ3JhdGlvbkNvbHVtbixcbiAgdHlwZSBNaWdyYXRpb25Db2x1bW5UeXBlLFxuICB0eXBlIE1pZ3JhdGlvbkZvcmVpZ24sXG4gIHR5cGUgTWlncmF0aW9uSW5kZXgsXG4gIHR5cGUgTWlncmF0aW9uSm9pblRhYmxlLFxuICB0eXBlIE1pZ3JhdGlvblNldEFuZEpvaW5UYWJsZSxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBleGhhdXN0aXZlIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5cbi8qKlxuICogRW50aXR566W8IOydveyWtOyEnCBNaWdyYXRpb25TZXRBbmRKb2luVGFibGXsnYQg66eM65Ok7Ja07Ji164uI64ukLlxuICogQHBhcmFtIGVudGl0eSBFbnRpdHkg6rCd7LK0XG4gKiBAcmV0dXJucyBNaWdyYXRpb25TZXRBbmRKb2luVGFibGUg6rCd7LK0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaWdyYXRpb25TZXRGcm9tRW50aXR5KGVudGl0eTogRW50aXR5KTogTWlncmF0aW9uU2V0QW5kSm9pblRhYmxlIHtcbiAgY29uc3QgbWlncmF0aW9uU2V0OiBNaWdyYXRpb25TZXRBbmRKb2luVGFibGUgPSBlbnRpdHkucHJvcHMucmVkdWNlKFxuICAgIChyLCBwcm9wKSA9PiB7XG4gICAgICAvLyB2aXJ0dWFsIO2VhOuTnCDsoJzsmbhcbiAgICAgIGlmIChpc1ZpcnR1YWxQcm9wKHByb3ApKSB7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfVxuICAgICAgLy8gSGFzTWFueSDsvIDsnbTsiqTripQg7JWE66y0IOyymOumrOuPhCDtlZjsp4Ag7JWK7J2MXG4gICAgICBpZiAoaXNIYXNNYW55UmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfVxuXG4gICAgICAvLyDsnbzrsJgg7Lus65+8XG4gICAgICBpZiAoIWlzUmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHtcbiAgICAgICAgICBuYW1lOiBwcm9wLm5hbWUsXG4gICAgICAgICAgdHlwZTogcmVzb2x2ZUVudGl0eVByb3BUeXBlVG9NaWdyYXRpb25Db2x1bW5UeXBlKHByb3ApLFxuICAgICAgICAgIG51bGxhYmxlOiBwcm9wLm51bGxhYmxlID09PSB0cnVlLFxuICAgICAgICAgIC4uLigoKSA9PiB7XG4gICAgICAgICAgICBpZiAocHJvcC5kYkRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRUbzogcHJvcC5kYkRlZmF1bHQsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgfSkoKSxcbiAgICAgICAgICAvLyBTdHJpbmcg7YOA7J6F7JeQIGxlbmd0aCDsnojripQg6rK97JqwIOy2lOqwgFxuICAgICAgICAgIC4uLihpc1N0cmluZ1Byb3AocHJvcCkgJiZcbiAgICAgICAgICAgIHByb3AubGVuZ3RoICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICAgICAgICBsZW5ndGg6IHByb3AubGVuZ3RoLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgLy8gTnVtYmVyL051bWVyaWMg7YOA7J6F7J2YIOqyveyasCBwcmVjaXNpb24sIHNjYWxlIOy2lOqwgFxuICAgICAgICAgIC4uLigoaXNOdW1iZXJQcm9wKHByb3ApIHx8IGlzTnVtZXJpY1Byb3AocHJvcCkpICYmIHtcbiAgICAgICAgICAgIHByZWNpc2lvbjogcHJvcC5wcmVjaXNpb24sXG4gICAgICAgICAgICBzY2FsZTogcHJvcC5zY2FsZSxcbiAgICAgICAgICAgIG51bWJlclR5cGU6IGlzTnVtYmVyUHJvcChwcm9wKSA/IChwcm9wLm51bWJlclR5cGUgPz8gXCJudW1lcmljXCIpIDogXCJudW1lcmljXCIsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLy8gVmVjdG9yIO2DgOyeheydmCDqsr3smrAgZGltZW5zaW9ucyDstpTqsIBcbiAgICAgICAgICAuLi4oaXNWZWN0b3JQcm9wKHByb3ApICYmIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHByb3AuZGltZW5zaW9ucyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAvLyBHZW5lcmF0ZWQgQ29sdW1uIOygleuztCDstpTqsIBcbiAgICAgICAgICAuLi4ocHJvcC5nZW5lcmF0ZWQgJiYge1xuICAgICAgICAgICAgZ2VuZXJhdGVkOiBwcm9wLmdlbmVyYXRlZCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcblxuICAgICAgICByLmNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgICAgIC8vIE1hbnlUb01hbnkg7LyA7J207IqkXG4gICAgICAgIGNvbnN0IHJlbE1kID0gRW50aXR5TWFuYWdlci5nZXQocHJvcC53aXRoKTtcbiAgICAgICAgY29uc3QgdGFibGUxID0gZW50aXR5LnRhYmxlO1xuICAgICAgICBjb25zdCB0YWJsZTIgPSByZWxNZC50YWJsZTtcblxuICAgICAgICAvLyDqsIEg7JeU7Yuw7Yuw7J2YIFBLIO2DgOyehSDsoJXrs7Qg6rCA7KC47Jik6riwXG4gICAgICAgIGNvbnN0IHRoaXNQa1R5cGUgPSBlbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgICAgIGNvbnN0IHRoaXNQa1Byb3AgPSBlbnRpdHkuZ2V0UGtQcm9wKCk7XG4gICAgICAgIGNvbnN0IHJlbFBrVHlwZSA9IHJlbE1kLmdldFBrVHlwZSgpO1xuICAgICAgICBjb25zdCByZWxQa1Byb3AgPSByZWxNZC5nZXRQa1Byb3AoKTtcblxuICAgICAgICBjb25zdCBqb2luID0ge1xuICAgICAgICAgIGZyb206IGAke2VudGl0eS50YWJsZX0uaWRgLFxuICAgICAgICAgIHRocm91Z2g6IHtcbiAgICAgICAgICAgIGZyb206IGAke3Byb3Auam9pblRhYmxlfS4ke2luZmxlY3Rpb24uc2luZ3VsYXJpemUodGFibGUxKX1faWRgLFxuICAgICAgICAgICAgdG86IGAke3Byb3Auam9pblRhYmxlfS4ke2luZmxlY3Rpb24uc2luZ3VsYXJpemUodGFibGUyKX1faWRgLFxuICAgICAgICAgICAgb25VcGRhdGU6IHByb3Aub25VcGRhdGUsXG4gICAgICAgICAgICBvbkRlbGV0ZTogcHJvcC5vbkRlbGV0ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRvOiBgJHtyZWxNZC50YWJsZX0uaWRgLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0aHJvdWdoID0gam9pbi50aHJvdWdoO1xuICAgICAgICBjb25zdCBmaWVsZHMgPSBbdGhyb3VnaC5mcm9tLCB0aHJvdWdoLnRvXTtcbiAgICAgICAgci5qb2luVGFibGVzLnB1c2goe1xuICAgICAgICAgIHRhYmxlOiB0aHJvdWdoLmZyb20uc3BsaXQoXCIuXCIpWzBdLFxuICAgICAgICAgIGluZGV4ZXM6IGVudGl0eS5pbmRleGVzXG4gICAgICAgICAgICAuZmlsdGVyKChpbmRleCkgPT4gaW5kZXguY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5uYW1lLmluY2x1ZGVzKGAke3Byb3Auam9pblRhYmxlfS5gKSkpXG4gICAgICAgICAgICAubWFwKChpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uaW5kZXgsXG4gICAgICAgICAgICAgIGNvbHVtbnM6IGluZGV4LmNvbHVtbnMubWFwKChjb2wpID0+ICh7XG4gICAgICAgICAgICAgICAgbmFtZTogY29sLm5hbWUucmVwbGFjZShgJHtwcm9wLmpvaW5UYWJsZX0uYCwgXCJcIiksXG4gICAgICAgICAgICAgICAgbnVsbHNGaXJzdDogY29sLm51bGxzRmlyc3QsXG4gICAgICAgICAgICAgICAgc29ydE9yZGVyOiBjb2wuc29ydE9yZGVyLFxuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgY29sdW1uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8g7ZiE7J6sIOyXlO2LsO2LsOydmCBGS1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBgJHtpbmZsZWN0aW9uLnNpbmd1bGFyaXplKHRhYmxlMSl9X2lkYCxcbiAgICAgICAgICAgICAgdHlwZTogdGhpc1BrVHlwZSxcbiAgICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAuLi4odGhpc1BrVHlwZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIHRoaXNQa1Byb3AudHlwZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIHRoaXNQa1Byb3AubGVuZ3RoICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICAgICAgICAgICAgbGVuZ3RoOiB0aGlzUGtQcm9wLmxlbmd0aCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyDssLjsobAg7JeU7Yuw7Yuw7J2YIEZLXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IGAke2luZmxlY3Rpb24uc2luZ3VsYXJpemUodGFibGUyKX1faWRgLFxuICAgICAgICAgICAgICB0eXBlOiByZWxQa1R5cGUsXG4gICAgICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgLi4uKHJlbFBrVHlwZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIHJlbFBrUHJvcC50eXBlID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgcmVsUGtQcm9wLmxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgICAgICAgICAgIGxlbmd0aDogcmVsUGtQcm9wLmxlbmd0aCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBmb3JlaWduczogZmllbGRzLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIC8vIO2YhOyerCDtlYTrk5zqsIAg7Ja065akIO2FjOydtOu4lOyXkCDsho3tlZjripTsp4Ag7YyQ64uoXG4gICAgICAgICAgICBjb25zdCBjb2wgPSBmaWVsZC5zcGxpdChcIi5cIilbMV07XG4gICAgICAgICAgICBjb25zdCB0byA9ICgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChgJHtpbmZsZWN0aW9uLnNpbmd1bGFyaXplKGpvaW4udG8uc3BsaXQoXCIuXCIpWzBdKX1faWRgID09PSBjb2wpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gam9pbi50bztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gam9pbi5mcm9tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29sdW1uczogW2NvbF0sXG4gICAgICAgICAgICAgIHRvLFxuICAgICAgICAgICAgICBvblVwZGF0ZTogdGhyb3VnaC5vblVwZGF0ZSxcbiAgICAgICAgICAgICAgb25EZWxldGU6IHRocm91Z2gub25EZWxldGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fFxuICAgICAgICAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pXG4gICAgICApIHtcbiAgICAgICAgLy8gLU9uZVJlbGF0aW9uIOy8gOydtOyKpFxuICAgICAgICBjb25zdCByZWxFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChwcm9wLndpdGgpO1xuICAgICAgICBjb25zdCBwa1R5cGUgPSByZWxFbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgICAgIGNvbnN0IHBrUHJvcCA9IHJlbEVudGl0eS5nZXRQa1Byb3AoKTtcblxuICAgICAgICBjb25zdCBpZENvbHVtbk5hbWUgPSBgJHtwcm9wLm5hbWV9X2lkYDtcbiAgICAgICAgci5jb2x1bW5zLnB1c2goe1xuICAgICAgICAgIG5hbWU6IGlkQ29sdW1uTmFtZSxcbiAgICAgICAgICB0eXBlOiBwa1R5cGUsXG4gICAgICAgICAgbnVsbGFibGU6IHByb3AubnVsbGFibGUgPz8gZmFsc2UsXG4gICAgICAgICAgLy8gc3RyaW5nIEZL7J24IOqyveyasCBsZW5ndGjrj4Qg7KCE64usXG4gICAgICAgICAgLi4uKHBrVHlwZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgcGtQcm9wLnR5cGUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIHBrUHJvcC5sZW5ndGggIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgICAgICAgIGxlbmd0aDogcGtQcm9wLmxlbmd0aCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByb3AudXNlQ29uc3RyYWludCA/PyB0cnVlKSB7XG4gICAgICAgICAgci5mb3JlaWducy5wdXNoKHtcbiAgICAgICAgICAgIGNvbHVtbnM6IFtpZENvbHVtbk5hbWVdLFxuICAgICAgICAgICAgdG86IGAke2luZmxlY3Rpb24udW5kZXJzY29yZShpbmZsZWN0aW9uLnBsdXJhbGl6ZShwcm9wLndpdGgpKS50b0xvd2VyQ2FzZSgpfS5pZGAsXG4gICAgICAgICAgICBvblVwZGF0ZTogcHJvcC5vblVwZGF0ZSA/PyBcIlJFU1RSSUNUXCIsXG4gICAgICAgICAgICBvbkRlbGV0ZTogcHJvcC5vbkRlbGV0ZSA/PyBcIlJFU1RSSUNUXCIsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHI7XG4gICAgfSxcbiAgICB7XG4gICAgICB0YWJsZTogZW50aXR5LnRhYmxlLFxuICAgICAgY29sdW1uczpcbiAgICAgICAgLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBNaWdyYXRpb25Db2x1bW5bXSxcbiAgICAgIGluZGV4ZXM6XG4gICAgICAgIC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgTWlncmF0aW9uSW5kZXhbXSxcbiAgICAgIGZvcmVpZ25zOlxuICAgICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgICAgIGpvaW5UYWJsZXM6XG4gICAgICAgIC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgTWlncmF0aW9uSm9pblRhYmxlW10sXG4gICAgfSxcbiAgKTtcblxuICAvLyBpbmRleGVzXG4gIG1pZ3JhdGlvblNldC5pbmRleGVzID0gZW50aXR5LmluZGV4ZXMuZmlsdGVyKChpbmRleCkgPT5cbiAgICBpbmRleC5jb2x1bW5zLmZpbmQoKGNvbCkgPT4gIWNvbC5uYW1lLmluY2x1ZGVzKFwiLlwiKSksXG4gICk7XG5cbiAgcmV0dXJuIG1pZ3JhdGlvblNldDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUVudGl0eVByb3BUeXBlVG9NaWdyYXRpb25Db2x1bW5UeXBlKHByb3A6IEVudGl0eVByb3ApOiBNaWdyYXRpb25Db2x1bW5UeXBlIHtcbiAgaWYgKHByb3AudHlwZSA9PT0gXCJyZWxhdGlvblwiIHx8IHByb3AudHlwZSA9PT0gXCJ2aXJ0dWFsXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVzb2x2ZWQgY29sdW1uIHR5cGU6ICR7cHJvcC50eXBlfWApO1xuICB9XG5cbiAgc3dpdGNoIChwcm9wLnR5cGUpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICBjYXNlIFwic3RyaW5nW11cIjpcbiAgICAgIHJldHVybiBcInN0cmluZ1tdXCI7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIGNhc2UgXCJlbnVtW11cIjpcbiAgICAgIHJldHVybiBcInN0cmluZ1tdXCI7XG4gICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgIHJldHVybiBcImludGVnZXJcIjtcbiAgICBjYXNlIFwiaW50ZWdlcltdXCI6XG4gICAgICByZXR1cm4gXCJpbnRlZ2VyW11cIjtcbiAgICBjYXNlIFwiYmlnSW50ZWdlclwiOlxuICAgICAgcmV0dXJuIFwiYmlnSW50ZWdlclwiO1xuICAgIGNhc2UgXCJiaWdJbnRlZ2VyW11cIjpcbiAgICAgIHJldHVybiBcImJpZ0ludGVnZXJbXVwiO1xuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIHJldHVybiBcIm51bWJlck9yTnVtZXJpY1wiO1xuICAgIGNhc2UgXCJudW1iZXJbXVwiOlxuICAgICAgcmV0dXJuIFwibnVtYmVyT3JOdW1lcmljW11cIjtcbiAgICBjYXNlIFwibnVtZXJpY1wiOlxuICAgICAgcmV0dXJuIFwibnVtYmVyT3JOdW1lcmljXCI7XG4gICAgY2FzZSBcIm51bWVyaWNbXVwiOlxuICAgICAgcmV0dXJuIFwibnVtYmVyT3JOdW1lcmljW11cIjtcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgIGNhc2UgXCJib29sZWFuW11cIjpcbiAgICAgIHJldHVybiBcImJvb2xlYW5bXVwiO1xuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgY2FzZSBcImRhdGVbXVwiOlxuICAgICAgcmV0dXJuIFwiZGF0ZVtdXCI7XG4gICAgY2FzZSBcInV1aWRcIjpcbiAgICAgIHJldHVybiBcInV1aWRcIjtcbiAgICBjYXNlIFwidXVpZFtdXCI6XG4gICAgICByZXR1cm4gXCJ1dWlkW11cIjtcbiAgICBjYXNlIFwianNvblwiOlxuICAgICAgcmV0dXJuIFwianNvblwiO1xuICAgIGNhc2UgXCJzZWFyY2hUZXh0XCI6XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICBjYXNlIFwidmVjdG9yXCI6XG4gICAgICByZXR1cm4gXCJ2ZWN0b3JcIjtcbiAgICBjYXNlIFwidmVjdG9yW11cIjpcbiAgICAgIHJldHVybiBcInZlY3RvcltdXCI7XG4gICAgY2FzZSBcInRzdmVjdG9yXCI6XG4gICAgICByZXR1cm4gXCJ0c3ZlY3RvclwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICBleGhhdXN0aXZlKHByb3ApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVW5rbm93biBlbnRpdHkgcHJvcCB0eXBlOiAkey8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKHByb3AgYXMgeyB0eXBlOiBzdHJpbmcgfSkudHlwZX1gLFxuICAgICAgKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQWdDQSxTQUFnQiwwQkFBMEIsUUFBMEM7Q0FDbEYsTUFBTSxlQUF5QyxPQUFPLE1BQU0sUUFDekQsR0FBRyxTQUFTO0VBRVgsSUFBSSxjQUFjLElBQUksR0FDcEIsT0FBTztFQUdULElBQUksc0JBQXNCLElBQUksR0FDNUIsT0FBTztFQUlULElBQUksQ0FBQyxlQUFlLElBQUksR0FBRztHQUN6QixNQUFNLFNBQVM7SUFDYixNQUFNLEtBQUs7SUFDWCxNQUFNLDJDQUEyQyxJQUFJO0lBQ3JELFVBQVUsS0FBSyxhQUFhO0lBQzVCLFVBQVU7S0FDUixJQUFJLEtBQUssY0FBYyxRQUNyQixPQUFPLEVBQ0wsV0FBVyxLQUFLLFVBQ2xCO0tBRUYsT0FBTyxDQUFDO0lBQ1YsRUFBQSxDQUFHO0lBRUgsR0FBSSxhQUFhLElBQUksS0FDbkIsS0FBSyxXQUFXLFVBQWEsRUFDM0IsUUFBUSxLQUFLLE9BQ2Y7SUFFRixJQUFLLGFBQWEsSUFBSSxLQUFLLGNBQWMsSUFBSSxNQUFNO0tBQ2pELFdBQVcsS0FBSztLQUNoQixPQUFPLEtBQUs7S0FDWixZQUFZLGFBQWEsSUFBSSxJQUFLLEtBQUssY0FBYyxZQUFhO0lBQ3BFO0lBRUEsR0FBSSxh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
180
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0aW9uLXNldC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlncmF0aW9uL21pZ3JhdGlvbi1zZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcblxuaW1wb3J0IHsgdHlwZSBFbnRpdHkgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eVwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wLFxuICBpc0hhc01hbnlSZWxhdGlvblByb3AsXG4gIGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcCxcbiAgaXNOdW1iZXJQcm9wLFxuICBpc051bWVyaWNQcm9wLFxuICBpc09uZVRvT25lUmVsYXRpb25Qcm9wLFxuICBpc1JlbGF0aW9uUHJvcCxcbiAgaXNTdHJpbmdQcm9wLFxuICBpc1ZlY3RvclByb3AsXG4gIGlzVmlydHVhbFByb3AsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbnRpdHlQcm9wLFxuICB0eXBlIE1pZ3JhdGlvbkNvbHVtbixcbiAgdHlwZSBNaWdyYXRpb25Db2x1bW5UeXBlLFxuICB0eXBlIE1pZ3JhdGlvbkZvcmVpZ24sXG4gIHR5cGUgTWlncmF0aW9uSW5kZXgsXG4gIHR5cGUgTWlncmF0aW9uSm9pblRhYmxlLFxuICB0eXBlIE1pZ3JhdGlvblNldEFuZEpvaW5UYWJsZSxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBleGhhdXN0aXZlIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5cbi8vIG51bWVyaWMg7Lus65+87JeQ7IScIHByZWNpc2lvbi9zY2FsZeydhCDsg53rnrXtlojsnYQg65WMIOyLpOygnOuhnCDsg53shLHrkJjripQg6rCSKGtuZXggZGVjaW1hbOydmCDquLDrs7jqsJIp7J2064ukLlxuY29uc3QgTlVNRVJJQ19ERUZBVUxUX1BSRUNJU0lPTiA9IDg7XG5jb25zdCBOVU1FUklDX0RFRkFVTFRfU0NBTEUgPSAyO1xuXG4vKipcbiAqIEVudGl0eeulvCDsnb3slrTshJwgTWlncmF0aW9uU2V0QW5kSm9pblRhYmxl7J2EIOunjOuTpOyWtOyYteuLiOuLpC5cbiAqIEBwYXJhbSBlbnRpdHkgRW50aXR5IOqwneyytFxuICogQHJldHVybnMgTWlncmF0aW9uU2V0QW5kSm9pblRhYmxlIOqwneyytFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWlncmF0aW9uU2V0RnJvbUVudGl0eShlbnRpdHk6IEVudGl0eSk6IE1pZ3JhdGlvblNldEFuZEpvaW5UYWJsZSB7XG4gIGNvbnN0IG1pZ3JhdGlvblNldDogTWlncmF0aW9uU2V0QW5kSm9pblRhYmxlID0gZW50aXR5LnByb3BzLnJlZHVjZShcbiAgICAociwgcHJvcCkgPT4ge1xuICAgICAgLy8gdmlydHVhbCDtlYTrk5wg7KCc7Jm4XG4gICAgICBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH1cbiAgICAgIC8vIEhhc01hbnkg7LyA7J207Iqk64qUIOyVhOustCDsspjrpqzrj4Qg7ZWY7KeAIOyViuydjFxuICAgICAgaWYgKGlzSGFzTWFueVJlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH1cblxuICAgICAgLy8g7J2867CYIOy7rOufvFxuICAgICAgaWYgKCFpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB7XG4gICAgICAgICAgbmFtZTogcHJvcC5uYW1lLFxuICAgICAgICAgIHR5cGU6IHJlc29sdmVFbnRpdHlQcm9wVHlwZVRvTWlncmF0aW9uQ29sdW1uVHlwZShwcm9wKSxcbiAgICAgICAgICBudWxsYWJsZTogcHJvcC5udWxsYWJsZSA9PT0gdHJ1ZSxcbiAgICAgICAgICAuLi4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb3AuZGJEZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0VG86IHByb3AuZGJEZWZhdWx0LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH0pKCksXG4gICAgICAgICAgLy8gU3RyaW5nIO2DgOyeheyXkCBsZW5ndGgg7J6I64qUIOqyveyasCDstpTqsIBcbiAgICAgICAgICAuLi4oaXNTdHJpbmdQcm9wKHByb3ApICYmXG4gICAgICAgICAgICBwcm9wLmxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgICAgICAgbGVuZ3RoOiBwcm9wLmxlbmd0aCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIC8vIE51bWJlci9OdW1lcmljIO2DgOyeheydmCDqsr3smrAgcHJlY2lzaW9uLCBzY2FsZSDstpTqsIBcbiAgICAgICAgICAuLi4oKGlzTnVtYmVyUHJvcChwcm9wKSB8fCBpc051bWVyaWNQcm9wKHByb3ApKSAmJlxuICAgICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbnVtYmVyVHlwZSA9IGlzTnVtYmVyUHJvcChwcm9wKSA/IChwcm9wLm51bWJlclR5cGUgPz8gXCJudW1lcmljXCIpIDogXCJudW1lcmljXCI7XG5cbiAgICAgICAgICAgICAgLy8gbnVtZXJpY+yXkOyEnCBwcmVjaXNpb24vc2NhbGXsnYQg7IOd65617ZWY66m0IGtuZXggZGVjaW1hbOydmCDquLDrs7jqsJIoOCwgMinsnLzroZwg7Lus65+87J20XG4gICAgICAgICAgICAgIC8vIOunjOuTpOyWtOyngOuKlOuNsCwgRELsl5DshJzripQg6re4IOqwkuydtCDqt7jrjIDroZwg7J297Z6I66+A66GcIOyXlO2LsO2LsCDsqr3snYQgdW5kZWZpbmVk66GcIOuRkOuptFxuICAgICAgICAgICAgICAvLyDrp6Trsogg67aI7J287LmY66GcIOyeoe2ejOuLpC4g67mE6rWQIOyghOyXkCDqsJnsnYAg6riw67O46rCS7J2EIOyxhOybjCDsi6TsoJwg7Iqk7YKk66eI7JmAIOunnuy2mOuLpC5cbiAgICAgICAgICAgICAgaWYgKG51bWJlclR5cGUgPT09IFwibnVtZXJpY1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIG51bWJlclR5cGUsXG4gICAgICAgICAgICAgICAgICBwcmVjaXNpb246IHByb3AucHJlY2lzaW9uID8/IE5VTUVSSUNfREVGQVVMVF9QUkVDSVNJT04sXG4gICAgICAgICAgICAgICAgICBzY2FsZTogcHJvcC5zY2FsZSA/PyBOVU1FUklDX0RFRkFVTFRfU0NBTEUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIHJlYWwvZG91YmxlIHByZWNpc2lvbuydgCBwcmVjaXNpb24vc2NhbGXsnYQg7JOw7KeAIOyViuuKlOuLpChEQiDrpqzrjZTrj4Qg67CY7ZmY7ZWY7KeAIOyViuydjCkuXG4gICAgICAgICAgICAgIHJldHVybiB7IG51bWJlclR5cGUsIHByZWNpc2lvbjogcHJvcC5wcmVjaXNpb24sIHNjYWxlOiBwcm9wLnNjYWxlIH07XG4gICAgICAgICAgICB9KSgpKSxcbiAgICAgICAgICAvLyBWZWN0b3Ig7YOA7J6F7J2YIOqyveyasCBkaW1lbnNpb25zIOy2lOqwgFxuICAgICAgICAgIC4uLihpc1ZlY3RvclByb3AocHJvcCkgJiYge1xuICAgICAgICAgICAgZGltZW5zaW9uczogcHJvcC5kaW1lbnNpb25zLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC8vIEdlbmVyYXRlZCBDb2x1bW4g7KCV67O0IOy2lOqwgFxuICAgICAgICAgIC4uLihwcm9wLmdlbmVyYXRlZCAmJiB7XG4gICAgICAgICAgICBnZW5lcmF0ZWQ6IHByb3AuZ2VuZXJhdGVkLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuXG4gICAgICAgIHIuY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc01hbnlUb01hbnlSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICAgICAgLy8gTWFueVRvTWFueSDsvIDsnbTsiqRcbiAgICAgICAgY29uc3QgcmVsTWQgPSBFbnRpdHlNYW5hZ2VyLmdldChwcm9wLndpdGgpO1xuICAgICAgICBjb25zdCB0YWJsZTEgPSBlbnRpdHkudGFibGU7XG4gICAgICAgIGNvbnN0IHRhYmxlMiA9IHJlbE1kLnRhYmxlO1xuXG4gICAgICAgIC8vIOqwgSDsl5Tti7Dti7DsnZggUEsg7YOA7J6FIOygleuztCDqsIDsoLjsmKTquLBcbiAgICAgICAgY29uc3QgdGhpc1BrVHlwZSA9IGVudGl0eS5nZXRQa1R5cGUoKTtcbiAgICAgICAgY29uc3QgdGhpc1BrUHJvcCA9IGVudGl0eS5nZXRQa1Byb3AoKTtcbiAgICAgICAgY29uc3QgcmVsUGtUeXBlID0gcmVsTWQuZ2V0UGtUeXBlKCk7XG4gICAgICAgIGNvbnN0IHJlbFBrUHJvcCA9IHJlbE1kLmdldFBrUHJvcCgpO1xuXG4gICAgICAgIGNvbnN0IGpvaW4gPSB7XG4gICAgICAgICAgZnJvbTogYCR7ZW50aXR5LnRhYmxlfS5pZGAsXG4gICAgICAgICAgdGhyb3VnaDoge1xuICAgICAgICAgICAgZnJvbTogYCR7cHJvcC5qb2luVGFibGV9LiR7aW5mbGVjdGlvbi5zaW5ndWxhcml6ZSh0YWJsZTEpfV9pZGAsXG4gICAgICAgICAgICB0bzogYCR7cHJvcC5qb2luVGFibGV9LiR7aW5mbGVjdGlvbi5zaW5ndWxhcml6ZSh0YWJsZTIpfV9pZGAsXG4gICAgICAgICAgICBvblVwZGF0ZTogcHJvcC5vblVwZGF0ZSxcbiAgICAgICAgICAgIG9uRGVsZXRlOiBwcm9wLm9uRGVsZXRlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdG86IGAke3JlbE1kLnRhYmxlfS5pZGAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRocm91Z2ggPSBqb2luLnRocm91Z2g7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IFt0aHJvdWdoLmZyb20sIHRocm91Z2gudG9dO1xuICAgICAgICByLmpvaW5UYWJsZXMucHVzaCh7XG4gICAgICAgICAgdGFibGU6IHRocm91Z2guZnJvbS5zcGxpdChcIi5cIilbMF0sXG4gICAgICAgICAgaW5kZXhlczogZW50aXR5LmluZGV4ZXNcbiAgICAgICAgICAgIC5maWx0ZXIoKGluZGV4KSA9PiBpbmRleC5jb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLm5hbWUuaW5jbHVkZXMoYCR7cHJvcC5qb2luVGFibGV9LmApKSlcbiAgICAgICAgICAgIC5tYXAoKGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5pbmRleCxcbiAgICAgICAgICAgICAgY29sdW1uczogaW5kZXguY29sdW1ucy5tYXAoKGNvbCkgPT4gKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBjb2wubmFtZS5yZXBsYWNlKGAke3Byb3Auam9pblRhYmxlfS5gLCBcIlwiKSxcbiAgICAgICAgICAgICAgICBudWxsc0ZpcnN0OiBjb2wubnVsbHNGaXJzdCxcbiAgICAgICAgICAgICAgICBzb3J0T3JkZXI6IGNvbC5zb3J0T3JkZXIsXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICBjb2x1bW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyDtmITsnqwg7JeU7Yuw7Yuw7J2YIEZLXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IGAke2luZmxlY3Rpb24uc2luZ3VsYXJpemUodGFibGUxKX1faWRgLFxuICAgICAgICAgICAgICB0eXBlOiB0aGlzUGtUeXBlLFxuICAgICAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIC4uLih0aGlzUGtUeXBlID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgdGhpc1BrUHJvcC50eXBlID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgdGhpc1BrUHJvcC5sZW5ndGggIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgICAgICAgICAgICBsZW5ndGg6IHRoaXNQa1Byb3AubGVuZ3RoLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIOywuOyhsCDsl5Tti7Dti7DsnZggRktcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogYCR7aW5mbGVjdGlvbi5zaW5ndWxhcml6ZSh0YWJsZTIpfV9pZGAsXG4gICAgICAgICAgICAgIHR5cGU6IHJlbFBrVHlwZSxcbiAgICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAuLi4ocmVsUGtUeXBlID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgcmVsUGtQcm9wLnR5cGUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICByZWxQa1Byb3AubGVuZ3RoICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICAgICAgICAgICAgbGVuZ3RoOiByZWxQa1Byb3AubGVuZ3RoLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGZvcmVpZ25zOiBmaWVsZHMubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgLy8g7ZiE7J6sIO2VhOuTnOqwgCDslrTrlqQg7YWM7J2067iU7JeQIOyGje2VmOuKlOyngCDtjJDri6hcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGZpZWxkLnNwbGl0KFwiLlwiKVsxXTtcbiAgICAgICAgICAgIGNvbnN0IHRvID0gKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGAke2luZmxlY3Rpb24uc2luZ3VsYXJpemUoam9pbi50by5zcGxpdChcIi5cIilbMF0pfV9pZGAgPT09IGNvbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBqb2luLnRvO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBqb2luLmZyb207XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb2x1bW5zOiBbY29sXSxcbiAgICAgICAgICAgICAgdG8sXG4gICAgICAgICAgICAgIG9uVXBkYXRlOiB0aHJvdWdoLm9uVXBkYXRlLFxuICAgICAgICAgICAgICBvbkRlbGV0ZTogdGhyb3VnaC5vbkRlbGV0ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKHByb3ApIHx8XG4gICAgICAgIChpc09uZVRvT25lUmVsYXRpb25Qcm9wKHByb3ApICYmIHByb3AuaGFzSm9pbkNvbHVtbilcbiAgICAgICkge1xuICAgICAgICAvLyAtT25lUmVsYXRpb24g7LyA7J207IqkXG4gICAgICAgIGNvbnN0IHJlbEVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHByb3Aud2l0aCk7XG4gICAgICAgIGNvbnN0IHBrVHlwZSA9IHJlbEVudGl0eS5nZXRQa1R5cGUoKTtcbiAgICAgICAgY29uc3QgcGtQcm9wID0gcmVsRW50aXR5LmdldFBrUHJvcCgpO1xuXG4gICAgICAgIGNvbnN0IGlkQ29sdW1uTmFtZSA9IGAke3Byb3AubmFtZX1faWRgO1xuICAgICAgICByLmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgbmFtZTogaWRDb2x1bW5OYW1lLFxuICAgICAgICAgIHR5cGU6IHBrVHlwZSxcbiAgICAgICAgICBudWxsYWJsZTogcHJvcC5udWxsYWJsZSA/PyBmYWxzZSxcbiAgICAgICAgICAvLyBzdHJpbmcgRkvsnbgg6rK97JqwIGxlbmd0aOuPhCDsoITri6xcbiAgICAgICAgICAuLi4ocGtUeXBlID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBwa1Byb3AudHlwZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgcGtQcm9wLmxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgICAgICAgbGVuZ3RoOiBwa1Byb3AubGVuZ3RoLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocHJvcC51c2VDb25zdHJhaW50ID8/IHRydWUpIHtcbiAgICAgICAgICByLmZvcmVpZ25zLnB1c2goe1xuICAgICAgICAgICAgY29sdW1uczogW2lkQ29sdW1uTmFtZV0sXG4gICAgICAgICAgICB0bzogYCR7aW5mbGVjdGlvbi51bmRlcnNjb3JlKGluZmxlY3Rpb24ucGx1cmFsaXplKHByb3Aud2l0aCkpLnRvTG93ZXJDYXNlKCl9LmlkYCxcbiAgICAgICAgICAgIG9uVXBkYXRlOiBwcm9wLm9uVXBkYXRlID8/IFwiUkVTVFJJQ1RcIixcbiAgICAgICAgICAgIG9uRGVsZXRlOiBwcm9wLm9uRGVsZXRlID8/IFwiUkVTVFJJQ1RcIixcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcjtcbiAgICB9LFxuICAgIHtcbiAgICAgIHRhYmxlOiBlbnRpdHkudGFibGUsXG4gICAgICBjb2x1bW5zOlxuICAgICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIE1pZ3JhdGlvbkNvbHVtbltdLFxuICAgICAgaW5kZXhlczpcbiAgICAgICAgLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBNaWdyYXRpb25JbmRleFtdLFxuICAgICAgZm9yZWlnbnM6XG4gICAgICAgIC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgTWlncmF0aW9uRm9yZWlnbltdLFxuICAgICAgam9pblRhYmxlczpcbiAgICAgICAgLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBNaWdyYXRpb25Kb2luVGFibGVbXSxcbiAgICB9LFxuICApO1xuXG4gIC8vIGluZGV4ZXNcbiAgbWlncmF0aW9uU2V0LmluZGV4ZXMgPSBlbnRpdHkuaW5kZXhlcy5maWx0ZXIoKGluZGV4KSA9PlxuICAgIGluZGV4LmNvbHVtbnMuZmluZCgoY29sKSA9PiAhY29sLm5hbWUuaW5jbHVkZXMoXCIuXCIpKSxcbiAgKTtcblxuICByZXR1cm4gbWlncmF0aW9uU2V0O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRW50aXR5UHJvcFR5cGVUb01pZ3JhdGlvbkNvbHVtblR5cGUocHJvcDogRW50aXR5UHJvcCk6IE1pZ3JhdGlvbkNvbHVtblR5cGUge1xuICBpZiAocHJvcC50eXBlID09PSBcInJlbGF0aW9uXCIgfHwgcHJvcC50eXBlID09PSBcInZpcnR1YWxcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5yZXNvbHZlZCBjb2x1bW4gdHlwZTogJHtwcm9wLnR5cGV9YCk7XG4gIH1cblxuICBzd2l0Y2ggKHByb3AudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIGNhc2UgXCJzdHJpbmdbXVwiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nW11cIjtcbiAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgY2FzZSBcImVudW1bXVwiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nW11cIjtcbiAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgcmV0dXJuIFwiaW50ZWdlclwiO1xuICAgIGNhc2UgXCJpbnRlZ2VyW11cIjpcbiAgICAgIHJldHVybiBcImludGVnZXJbXVwiO1xuICAgIGNhc2UgXCJiaWdJbnRlZ2VyXCI6XG4gICAgICByZXR1cm4gXCJiaWdJbnRlZ2VyXCI7XG4gICAgY2FzZSBcImJpZ0ludGVnZXJbXVwiOlxuICAgICAgcmV0dXJuIFwiYmlnSW50ZWdlcltdXCI7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIFwibnVtYmVyT3JOdW1lcmljXCI7XG4gICAgY2FzZSBcIm51bWJlcltdXCI6XG4gICAgICByZXR1cm4gXCJudW1iZXJPck51bWVyaWNbXVwiO1xuICAgIGNhc2UgXCJudW1lcmljXCI6XG4gICAgICByZXR1cm4gXCJudW1iZXJPck51bWVyaWNcIjtcbiAgICBjYXNlIFwibnVtZXJpY1tdXCI6XG4gICAgICByZXR1cm4gXCJudW1iZXJPck51bWVyaWNbXVwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgY2FzZSBcImJvb2xlYW5bXVwiOlxuICAgICAgcmV0dXJuIFwiYm9vbGVhbltdXCI7XG4gICAgY2FzZSBcImRhdGVcIjpcbiAgICAgIHJldHVybiBcImRhdGVcIjtcbiAgICBjYXNlIFwiZGF0ZVtdXCI6XG4gICAgICByZXR1cm4gXCJkYXRlW11cIjtcbiAgICBjYXNlIFwidXVpZFwiOlxuICAgICAgcmV0dXJuIFwidXVpZFwiO1xuICAgIGNhc2UgXCJ1dWlkW11cIjpcbiAgICAgIHJldHVybiBcInV1aWRbXVwiO1xuICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICByZXR1cm4gXCJqc29uXCI7XG4gICAgY2FzZSBcInNlYXJjaFRleHRcIjpcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIGNhc2UgXCJ2ZWN0b3JcIjpcbiAgICAgIHJldHVybiBcInZlY3RvclwiO1xuICAgIGNhc2UgXCJ2ZWN0b3JbXVwiOlxuICAgICAgcmV0dXJuIFwidmVjdG9yW11cIjtcbiAgICBjYXNlIFwidHN2ZWN0b3JcIjpcbiAgICAgIHJldHVybiBcInRzdmVjdG9yXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIGV4aGF1c3RpdmUocHJvcCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVbmtub3duIGVudGl0eSBwcm9wIHR5cGU6ICR7LyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAocHJvcCBhcyB7IHR5cGU6IHN0cmluZyB9KS50eXBlfWAsXG4gICAgICApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBb0NBLFNBQWdCLDBCQUEwQixRQUEwQztDQUNsRixNQUFNLGVBQXlDLE9BQU8sTUFBTSxRQUN6RCxHQUFHLFNBQVM7RUFFWCxJQUFJLGNBQWMsSUFBSSxHQUNwQixPQUFPO0VBR1QsSUFBSSxzQkFBc0IsSUFBSSxHQUM1QixPQUFPO0VBSVQsSUFBSSxDQUFDLGVBQWUsSUFBSSxHQUFHO0dBQ3pCLE1BQU0sU0FBUztJQUNiLE1BQU0sS0FBSztJQUNYLE1BQU0sMkNBQTJDLElBQUk7SUFDckQsVUFBVSxLQUFLLGFBQWE7SUFDNUIsVUFBVTtLQUNSLElBQUksS0FBSyxjQUFjLFFBQ3JCLE9BQU8sRUFDTCxXQUFXLEtBQUssVUFDbEI7S0FFRixPQUFPLENBQUM7SUFDVixFQUFBLENBQUc7SUFFSCxHQUFJLGFBQWEsSUFBSSxLQUNuQixLQUFLLFdBQVcsVUFBYSxFQUMzQixRQUFRLEtBQUssT0FDZjtJQUVGLElBQUssYUFBYSxJQUFJLEtBQUssY0FBYyxJQUFJ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
@@ -45,6 +45,15 @@ export declare class Migrator {
45
45
  * @category 분리형 마이그레이션 API
46
46
  */
47
47
  getConnectionStatus(connKey: MigrationTarget): Promise<MigrationConnectionStatus>;
48
+ /**
49
+ * 대상 DB에서 가장 최근에 적용된 migration batch를 반환합니다.
50
+ *
51
+ * @category 분리형 마이그레이션 API
52
+ */
53
+ getLatestAppliedBatch(connKey: MigrationTarget): Promise<{
54
+ batchNo: number;
55
+ files: string[];
56
+ }>;
48
57
  /**
49
58
  * 최신 상태인 기준 DB와 엔티티 정의를 비교해 생성 예정 코드를 반환합니다.
50
59
  *
@@ -95,6 +104,8 @@ export declare class Migrator {
95
104
  *
96
105
  * @category 분리형 마이그레이션 API
97
106
  */
98
- runShadowTest(options?: MigrationRunOptions): Promise<MigrationResult>;
107
+ runShadowTest(options?: MigrationRunOptions & {
108
+ target?: MigrationTarget;
109
+ }): Promise<MigrationResult>;
99
110
  }
100
111
  //# sourceMappingURL=migrator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../src/migration/migrator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAKjC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAOrD,OAAO,EAAE,KAAK,gBAAgB,EAAqB,MAAM,gBAAgB,CAAC;AAQ1E,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAE9B,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,eAAe,EACrB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,EAAE,CAAC;AAMJ,qBAAa,6BAA8B,SAAQ,KAAK;aAEpC,OAAO,EAAE,eAAe,GAAG,QAAQ;gBAAnC,OAAO,EAAE,eAAe,GAAG,QAAQ,EACnD,KAAK,EAAE,OAAO;CAKjB;AA4BD;;;;GAIG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,4BAA4B;IAiBpC,yCAAyC;IACzC,sBAAsB,IAAI,eAAe,EAAE;YAc7B,yBAAyB;IAsCvC,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,mBAAmB;IAiC3B,OAAO,CAAC,qBAAqB;IAQ7B;;;;;OAKG;IACH,cAAc,IAAI,uBAAuB,EAAE;IAoB3C;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAqBnD;;;;;OAKG;IACG,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,yBAAyB,CAAC;IA0FvF;;;;OAIG;IACG,gBAAgB,CAAC,cAAc,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAWtE,qBAAqB;IASnC;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;IA4C3C;;;;;OAKG;IACG,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;IAIhG;;;;;OAKG;IACG,QAAQ,CACZ,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,eAAe,CAAC;IAI3B;;;;OAIG;IACG,SAAS,CACb,MAAM,EAAE,OAAO,GAAG,UAAU,EAC5B,OAAO,EAAE,CAAC,MAAM,cAAc,CAAC,EAAE,GAChC,OAAO,CAAC,eAAe,CAAC;YAIb,qBAAqB;IAuDnC,OAAO,CAAC,UAAU;IAYlB;;;;;;OAMG;IACG,qBAAqB,CAAC,cAAc,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BxE,iBAAiB,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAqErE;;;;;OAKG;IACG,aAAa,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;CA2F7E"}
1
+ {"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../src/migration/migrator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAKjC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAOrD,OAAO,EAAE,KAAK,gBAAgB,EAAqB,MAAM,gBAAgB,CAAC;AAQ1E,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAE9B,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,eAAe,EACrB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,EAAE,CAAC;AAQJ,qBAAa,6BAA8B,SAAQ,KAAK;aAEpC,OAAO,EAAE,eAAe,GAAG,QAAQ;IADrD,YACkB,OAAO,EAAE,eAAe,GAAG,QAAQ,EACnD,KAAK,EAAE,OAAO,EAIf;CACF;AA4BD;;;;GAIG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,4BAA4B;IAapC,yCAAyC;IACzC,sBAAsB,IAAI,eAAe,EAAE,CAY1C;YAEa,yBAAyB;IAsCvC,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,mBAAmB;IAiC3B,OAAO,CAAC,qBAAqB;IAQ7B;;;;;OAKG;IACH,cAAc,IAAI,uBAAuB,EAAE,CAkB1C;IAED;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAmBlD;IAED;;;;;OAKG;IACG,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAwFtF;IAED;;;;OAIG;IACG,qBAAqB,CACzB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CA8C/C;IAED;;;;OAIG;IACG,gBAAgB,CAAC,cAAc,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CASnF;YAEa,qBAAqB;IASnC;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC,CA0C1C;IAED;;;;;OAKG;IACG,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAE/F;IAED;;;;;OAKG;IACG,QAAQ,CACZ,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAE1B;IAED;;;;OAIG;IACG,SAAS,CACb,MAAM,EAAE,OAAO,GAAG,UAAU,EAC5B,OAAO,EAAE,CAAC,MAAM,cAAc,CAAC,EAAE,GAChC,OAAO,CAAC,eAAe,CAAC,CAE1B;YAEa,qBAAqB;IAuDnC,OAAO,CAAC,UAAU;IAYlB;;;;;;OAMG;IACG,qBAAqB,CAAC,cAAc,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB7E;IAEK,iBAAiB,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAmEpE;IAED;;;;;OAKG;IACG,aAAa,CACjB,OAAO,CAAC,EAAE,mBAAmB,GAAG;QAAE,MAAM,CAAC,EAAE,eAAe,CAAA;KAAE,GAC3D,OAAO,CAAC,eAAe,CAAC,CAwG1B;CACF"}