sonamu 0.12.0 → 0.13.0

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 (275) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +1 -2
  2. package/dist/ai/agents/agent.js +2 -3
  3. package/dist/ai/agents/index.js +1 -2
  4. package/dist/ai/index.js +1 -2
  5. package/dist/ai/providers/rtzr/api.js +1 -2
  6. package/dist/ai/providers/rtzr/error.js +2 -3
  7. package/dist/ai/providers/rtzr/model.js +1 -2
  8. package/dist/ai/providers/rtzr/options.js +1 -2
  9. package/dist/ai/providers/rtzr/provider.js +1 -2
  10. package/dist/ai/providers/rtzr/utils.js +1 -2
  11. package/dist/api/base-frame.js +4 -4
  12. package/dist/api/caster.d.ts +1 -1
  13. package/dist/api/caster.d.ts.map +1 -1
  14. package/dist/api/caster.js +9 -9
  15. package/dist/api/code-converters.js +6 -5
  16. package/dist/api/config.d.ts +1 -1
  17. package/dist/api/config.d.ts.map +1 -1
  18. package/dist/api/config.js +2 -3
  19. package/dist/api/context.d.ts +2 -3
  20. package/dist/api/context.d.ts.map +1 -1
  21. package/dist/api/context.js +2 -3
  22. package/dist/api/decorators.js +2 -3
  23. package/dist/api/http-validator.js +2 -3
  24. package/dist/api/index.js +8 -3
  25. package/dist/api/secret.js +1 -2
  26. package/dist/api/sonamu.d.ts +3 -5
  27. package/dist/api/sonamu.d.ts.map +1 -1
  28. package/dist/api/sonamu.js +19 -18
  29. package/dist/api/validator.js +1 -2
  30. package/dist/api/websocket-helpers.js +2 -3
  31. package/dist/auth/audit-log/builders.js +1 -2
  32. package/dist/auth/audit-log/client-ip.js +2 -3
  33. package/dist/auth/audit-log/events.js +1 -2
  34. package/dist/auth/audit-log/plugin.d.ts.map +1 -1
  35. package/dist/auth/audit-log/plugin.js +2 -3
  36. package/dist/auth/audit-log-ingestor.js +2 -3
  37. package/dist/auth/auth-generator.js +2 -3
  38. package/dist/auth/better-auth-entities.js +1 -2
  39. package/dist/auth/better-auth-request.js +2 -3
  40. package/dist/auth/index.js +2 -3
  41. package/dist/auth/knex-adapter.js +2 -3
  42. package/dist/auth/plugins/entity-definitions/admin.js +1 -2
  43. package/dist/auth/plugins/entity-definitions/anonymous.js +1 -2
  44. package/dist/auth/plugins/entity-definitions/api-key.js +1 -2
  45. package/dist/auth/plugins/entity-definitions/audit-log.js +1 -2
  46. package/dist/auth/plugins/entity-definitions/index.js +1 -2
  47. package/dist/auth/plugins/entity-definitions/jwt.js +1 -2
  48. package/dist/auth/plugins/entity-definitions/organization.js +1 -2
  49. package/dist/auth/plugins/entity-definitions/passkey.js +1 -2
  50. package/dist/auth/plugins/entity-definitions/phone-number.js +1 -2
  51. package/dist/auth/plugins/entity-definitions/sso.js +1 -2
  52. package/dist/auth/plugins/entity-definitions/two-factor.js +1 -2
  53. package/dist/auth/plugins/entity-definitions/username.js +1 -2
  54. package/dist/auth/plugins/wrappers/admin.d.ts +33 -32
  55. package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
  56. package/dist/auth/plugins/wrappers/admin.js +2 -3
  57. package/dist/auth/plugins/wrappers/anonymous.js +2 -3
  58. package/dist/auth/plugins/wrappers/api-key.js +2 -3
  59. package/dist/auth/plugins/wrappers/jwt.js +2 -3
  60. package/dist/auth/plugins/wrappers/organization.js +2 -3
  61. package/dist/auth/plugins/wrappers/passkey.js +2 -3
  62. package/dist/auth/plugins/wrappers/phone-number.d.ts +43 -1
  63. package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
  64. package/dist/auth/plugins/wrappers/phone-number.js +2 -3
  65. package/dist/auth/plugins/wrappers/sso.d.ts +138 -187
  66. package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
  67. package/dist/auth/plugins/wrappers/sso.js +1 -2
  68. package/dist/auth/plugins/wrappers/two-factor.d.ts +51 -10
  69. package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
  70. package/dist/auth/plugins/wrappers/two-factor.js +2 -3
  71. package/dist/auth/plugins/wrappers/username.d.ts +39 -5
  72. package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
  73. package/dist/auth/plugins/wrappers/username.js +2 -3
  74. package/dist/bin/build-config.js +5 -5
  75. package/dist/bin/compiler-policy.js +2 -3
  76. package/dist/bin/fixture.js +7 -5
  77. package/dist/bin/hmr-hook-register.js +1 -2
  78. package/dist/bin/migrate-targets.js +2 -3
  79. package/dist/bin/test-command.js +2 -3
  80. package/dist/bin/ts-loader-register.js +2 -3
  81. package/dist/bin/ts-loader-registration.js +2 -3
  82. package/dist/bin/typecheck-web.js +2 -3
  83. package/dist/cache/cache-manager.js +1 -2
  84. package/dist/cache/decorator.js +2 -3
  85. package/dist/cache/drivers.js +1 -2
  86. package/dist/cache/index.js +2 -3
  87. package/dist/cache-control/cache-control.js +1 -2
  88. package/dist/code-formatting/index.js +2 -3
  89. package/dist/code-formatting/oxfmt.js +2 -3
  90. package/dist/code-formatting/oxlint.js +2 -3
  91. package/dist/compress/compress.js +1 -2
  92. package/dist/compress/index.js +2 -2
  93. package/dist/compress/types.d.ts +1 -1
  94. package/dist/compress/types.d.ts.map +1 -1
  95. package/dist/cone/cone-generator.js +2 -3
  96. package/dist/database/_batch_update.js +1 -2
  97. package/dist/database/base-model.js +4 -4
  98. package/dist/database/db.js +4 -4
  99. package/dist/database/knex.js +2 -3
  100. package/dist/database/puri-wrapper.js +2 -3
  101. package/dist/database/puri.js +23 -22
  102. package/dist/database/puri.types.js +1 -2
  103. package/dist/database/transaction-context.js +1 -2
  104. package/dist/database/upsert-builder.js +2 -3
  105. package/dist/dict/en.js +2 -3
  106. package/dist/dict/index.js +3 -3
  107. package/dist/dict/ko.js +2 -3
  108. package/dist/dict/rc-keys.js +1 -2
  109. package/dist/dict/sd.js +2 -3
  110. package/dist/dict/sonamu-dictionary.js +7 -6
  111. package/dist/dict/utils.js +2 -3
  112. package/dist/entity/entity-manager.d.ts +66 -66
  113. package/dist/entity/entity-manager.js +4 -4
  114. package/dist/entity/entity-template-cone.js +2 -3
  115. package/dist/entity/entity.js +21 -18
  116. package/dist/env.js +1 -2
  117. package/dist/exceptions/error-handler.d.ts.map +1 -1
  118. package/dist/exceptions/error-handler.js +2 -3
  119. package/dist/exceptions/so-exceptions.js +2 -3
  120. package/dist/filter/index.js +3 -2
  121. package/dist/filter/types.js +1 -2
  122. package/dist/filter/utils.js +7 -6
  123. package/dist/index.js +39 -5
  124. package/dist/logger/category.js +2 -3
  125. package/dist/logger/configure.js +5 -5
  126. package/dist/migration/code-generation.js +23 -16
  127. package/dist/migration/index-where-predicate.js +2 -3
  128. package/dist/migration/migration-set.js +2 -3
  129. package/dist/migration/migrator.js +2 -3
  130. package/dist/migration/postgresql-schema-reader.js +6 -9
  131. package/dist/migration/slack-confirm.js +2 -3
  132. package/dist/naite/naite-reporter.js +2 -3
  133. package/dist/naite/naite.js +10 -8
  134. package/dist/runtime-type.js +2 -3
  135. package/dist/ssr/hmr-opt-out.js +1 -2
  136. package/dist/ssr/index.js +7 -4
  137. package/dist/ssr/registry.js +1 -2
  138. package/dist/ssr/renderer.js +2 -3
  139. package/dist/storage/base-file.js +1 -2
  140. package/dist/storage/buffered-file.js +2 -3
  141. package/dist/storage/drivers.js +1 -2
  142. package/dist/storage/index.js +2 -3
  143. package/dist/storage/s3-driver.js +1 -2
  144. package/dist/storage/storage-manager.js +2 -3
  145. package/dist/storage/uploaded-file.js +2 -3
  146. package/dist/stream/__tests__/ws-test-helpers.js +2 -3
  147. package/dist/stream/index.js +11 -2
  148. package/dist/stream/sse.js +1 -2
  149. package/dist/stream/ws-audience-resolver.js +2 -3
  150. package/dist/stream/ws-audience.js +1 -2
  151. package/dist/stream/ws-cluster-bus.js +1 -2
  152. package/dist/stream/ws-delivery.js +2 -3
  153. package/dist/stream/ws-frame.js +1 -2
  154. package/dist/stream/ws-local-connection-store.js +2 -3
  155. package/dist/stream/ws-presence-index.js +1 -2
  156. package/dist/stream/ws-presence-store.js +2 -3
  157. package/dist/stream/ws-registry.js +2 -3
  158. package/dist/stream/ws-session-id.js +1 -2
  159. package/dist/stream/ws-telemetry-memory.js +3 -4
  160. package/dist/stream/ws-telemetry-trace.js +1 -2
  161. package/dist/stream/ws-telemetry.js +2 -3
  162. package/dist/stream/ws.js +2 -3
  163. package/dist/syncer/api-parser.js +2 -3
  164. package/dist/syncer/checksum.js +4 -4
  165. package/dist/syncer/code-generator.js +4 -4
  166. package/dist/syncer/entity-operations.js +2 -3
  167. package/dist/syncer/event-batcher.js +1 -2
  168. package/dist/syncer/file-copy.js +2 -3
  169. package/dist/syncer/file-patterns.js +2 -3
  170. package/dist/syncer/file-tracking.js +2 -3
  171. package/dist/syncer/filesystem-dependencies.js +1 -2
  172. package/dist/syncer/index.js +8 -2
  173. package/dist/syncer/module-loader.js +8 -6
  174. package/dist/syncer/syncer-actions.js +8 -7
  175. package/dist/syncer/syncer.js +13 -8
  176. package/dist/syncer/watcher.js +2 -3
  177. package/dist/tasks/decorator.js +1 -2
  178. package/dist/tasks/step-wrapper.js +2 -3
  179. package/dist/tasks/workflow-manager.js +2 -3
  180. package/dist/template/entity-converter.js +17 -16
  181. package/dist/template/helpers.js +2 -3
  182. package/dist/template/implementations/entity.template.js +2 -3
  183. package/dist/template/implementations/entry-server.template.js +2 -3
  184. package/dist/template/implementations/generated.template.js +2 -3
  185. package/dist/template/implementations/generated_http.template.js +6 -6
  186. package/dist/template/implementations/generated_sso.template.js +2 -3
  187. package/dist/template/implementations/http_validators.template.js +2 -3
  188. package/dist/template/implementations/init_types.template.js +2 -3
  189. package/dist/template/implementations/model.template.js +4 -4
  190. package/dist/template/implementations/model_test.template.js +2 -3
  191. package/dist/template/implementations/queries.template.js +2 -3
  192. package/dist/template/implementations/sd.template.js +2 -3
  193. package/dist/template/implementations/services.template.js +2 -3
  194. package/dist/template/implementations/view_form.template.js +12 -9
  195. package/dist/template/implementations/view_id_all_select.template.js +2 -3
  196. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  197. package/dist/template/implementations/view_list.template.js +19 -17
  198. package/dist/template/implementations/view_search_input.template.js +2 -3
  199. package/dist/template/index.js +9 -3
  200. package/dist/template/template-manager.js +2 -3
  201. package/dist/template/template-types.js +1 -2
  202. package/dist/template/template.js +2 -3
  203. package/dist/template/zod-converter.js +54 -47
  204. package/dist/testing/_relation-graph.js +2 -3
  205. package/dist/testing/bootstrap.js +2 -3
  206. package/dist/testing/data-explorer.js +2 -3
  207. package/dist/testing/dev-test-routes.js +2 -3
  208. package/dist/testing/dev-vitest-manager.js +15 -12
  209. package/dist/testing/faker-mappings.js +1 -2
  210. package/dist/testing/filesystem.js +2 -3
  211. package/dist/testing/fixture-generator.js +2 -3
  212. package/dist/testing/fixture-loader.js +1 -2
  213. package/dist/testing/fixture-manager.js +12 -9
  214. package/dist/testing/global-setup.js +5 -5
  215. package/dist/testing/index.js +6 -3
  216. package/dist/testing/naite-vitest-reporter.js +1 -2
  217. package/dist/testing/parallel-db-manager.js +2 -3
  218. package/dist/testing/vitest-helpers.js +2 -3
  219. package/dist/tooling/__tests__/helpers/sonamu-test-root.js +2 -3
  220. package/dist/tooling/cdd-service.js +1 -2
  221. package/dist/tooling/cli-tooling.js +1 -2
  222. package/dist/tooling/fixture-service.js +1 -2
  223. package/dist/tooling/index.js +1 -2
  224. package/dist/tooling/test-run-client.js +2 -3
  225. package/dist/tsdown.api.config.js +1 -2
  226. package/dist/types/types.js +2 -3
  227. package/dist/ui/ai-api.d.ts.map +1 -1
  228. package/dist/ui/ai-api.js +4 -5
  229. package/dist/ui/ai-client.d.ts +2 -2
  230. package/dist/ui/ai-client.d.ts.map +1 -1
  231. package/dist/ui/ai-client.js +9 -8
  232. package/dist/ui/api.d.ts.map +1 -1
  233. package/dist/ui/api.js +11 -8
  234. package/dist/ui/async-route.js +1 -2
  235. package/dist/ui/cdd-service.js +22 -21
  236. package/dist/ui/migrations-api.js +6 -5
  237. package/dist/ui-web/assets/index-QDMyy31K.js +180 -0
  238. package/dist/ui-web/assets/index-dV7akMFB.css +1 -0
  239. package/dist/ui-web/index.html +2 -2
  240. package/dist/utils/async-utils.js +1 -2
  241. package/dist/utils/class-name.js +1 -2
  242. package/dist/utils/console-util.js +1 -2
  243. package/dist/utils/controller.js +2 -3
  244. package/dist/utils/esm-utils.js +1 -2
  245. package/dist/utils/fs-utils.js +2 -3
  246. package/dist/utils/lodash-able.js +1 -2
  247. package/dist/utils/model.js +1 -2
  248. package/dist/utils/object-utils.js +2 -3
  249. package/dist/utils/path-utils.js +2 -3
  250. package/dist/utils/process-utils.js +2 -3
  251. package/dist/utils/runtime-value.js +1 -2
  252. package/dist/utils/sql-parser.js +2 -3
  253. package/dist/utils/type-utils.js +8 -8
  254. package/dist/utils/utils.js +2 -3
  255. package/dist/utils/zod-error.js +2 -3
  256. package/dist/vector/chunking.js +1 -2
  257. package/dist/vector/config.js +1 -2
  258. package/dist/vector/embedding.js +4 -4
  259. package/package.json +63 -63
  260. package/src/ai/agents/agent.ts +1 -1
  261. package/src/api/__tests__/sonamu.plugins.test.ts +11 -1
  262. package/src/api/__tests__/sonamu.websocket.test.ts +6 -10
  263. package/src/api/config.ts +1 -1
  264. package/src/api/context.ts +2 -8
  265. package/src/api/sonamu.ts +26 -21
  266. package/src/auth/audit-log/plugin.ts +2 -0
  267. package/src/compress/types.ts +1 -1
  268. package/src/exceptions/error-handler.ts +3 -2
  269. package/src/template/implementations/model.template.ts +3 -3
  270. package/src/template/implementations/view_list.template.ts +12 -13
  271. package/src/ui/ai-api.ts +4 -2
  272. package/src/ui/ai-client.ts +2 -2
  273. package/src/ui/api.ts +58 -62
  274. package/dist/ui-web/assets/index-BMdIyKXS.css +0 -1
  275. package/dist/ui-web/assets/index-LpE8u19O.js +0 -178
@@ -22,12 +22,20 @@ export declare const twoFactor: (options?: TwoFactorOptions) => {
22
22
  method: "POST";
23
23
  body: import("zod").ZodObject<{
24
24
  password: import("zod").ZodOptional<import("zod").ZodString>;
25
+ method: import("zod").ZodDefault<import("zod").ZodEnum<{
26
+ otp: "otp";
27
+ totp: "totp";
28
+ }>>;
25
29
  issuer: import("zod").ZodOptional<import("zod").ZodString>;
26
30
  }, import("zod/v4/core").$strip> | import("zod").ZodObject<{
27
31
  password: import("zod").ZodString;
32
+ method: import("zod").ZodDefault<import("zod").ZodEnum<{
33
+ otp: "otp";
34
+ totp: "totp";
35
+ }>>;
28
36
  issuer: import("zod").ZodOptional<import("zod").ZodString>;
29
37
  }, import("zod/v4/core").$strip>;
30
- use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
38
+ use: import("better-auth").Middleware<import("better-auth").MiddlewareOptions, (inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
31
39
  session: {
32
40
  session: Record<string, any> & {
33
41
  id: string;
@@ -49,7 +57,7 @@ export declare const twoFactor: (options?: TwoFactorOptions) => {
49
57
  image?: string | null | undefined;
50
58
  };
51
59
  };
52
- }>)[];
60
+ }>>[];
53
61
  metadata: {
54
62
  openapi: {
55
63
  summary: string;
@@ -62,6 +70,11 @@ export declare const twoFactor: (options?: TwoFactorOptions) => {
62
70
  schema: {
63
71
  type: "object";
64
72
  properties: {
73
+ method: {
74
+ type: string;
75
+ enum: string[];
76
+ description: string;
77
+ };
65
78
  totpURI: {
66
79
  type: string;
67
80
  description: string;
@@ -74,6 +87,7 @@ export declare const twoFactor: (options?: TwoFactorOptions) => {
74
87
  description: string;
75
88
  };
76
89
  };
90
+ required: string[];
77
91
  };
78
92
  };
79
93
  };
@@ -82,6 +96,9 @@ export declare const twoFactor: (options?: TwoFactorOptions) => {
82
96
  };
83
97
  };
84
98
  }, {
99
+ method: "otp";
100
+ } | {
101
+ method: "totp";
85
102
  totpURI: string;
86
103
  backupCodes: string[];
87
104
  }>;
@@ -92,7 +109,7 @@ export declare const twoFactor: (options?: TwoFactorOptions) => {
92
109
  }, import("zod/v4/core").$strip> | import("zod").ZodObject<{
93
110
  password: import("zod").ZodString;
94
111
  }, import("zod/v4/core").$strip>;
95
- use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
112
+ use: import("better-auth").Middleware<import("better-auth").MiddlewareOptions, (inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
96
113
  session: {
97
114
  session: Record<string, any> & {
98
115
  id: string;
@@ -114,7 +131,7 @@ export declare const twoFactor: (options?: TwoFactorOptions) => {
114
131
  image?: string | null | undefined;
115
132
  };
116
133
  };
117
- }>)[];
134
+ }>>[];
118
135
  metadata: {
119
136
  openapi: {
120
137
  summary: string;
@@ -259,7 +276,7 @@ export declare const twoFactor: (options?: TwoFactorOptions) => {
259
276
  }, import("zod/v4/core").$strip> | import("zod").ZodObject<{
260
277
  password: import("zod").ZodString;
261
278
  }, import("zod/v4/core").$strip>;
262
- use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
279
+ use: import("better-auth").Middleware<import("better-auth").MiddlewareOptions, (inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
263
280
  session: {
264
281
  session: Record<string, any> & {
265
282
  id: string;
@@ -281,7 +298,7 @@ export declare const twoFactor: (options?: TwoFactorOptions) => {
281
298
  image?: string | null | undefined;
282
299
  };
283
300
  };
284
- }>)[];
301
+ }>>[];
285
302
  metadata: {
286
303
  openapi: {
287
304
  description: string;
@@ -480,7 +497,7 @@ export declare const twoFactor: (options?: TwoFactorOptions) => {
480
497
  }>;
481
498
  getTOTPURI: import("better-auth").StrictEndpoint<"/two-factor/get-totp-uri", {
482
499
  method: "POST";
483
- use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
500
+ use: import("better-auth").Middleware<import("better-auth").MiddlewareOptions, (inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
484
501
  session: {
485
502
  session: Record<string, any> & {
486
503
  id: string;
@@ -502,7 +519,7 @@ export declare const twoFactor: (options?: TwoFactorOptions) => {
502
519
  image?: string | null | undefined;
503
520
  };
504
521
  };
505
- }>)[];
522
+ }>>[];
506
523
  body: import("zod").ZodObject<{
507
524
  password: import("zod").ZodOptional<import("zod").ZodString>;
508
525
  }, import("zod/v4/core").$strip> | import("zod").ZodObject<{
@@ -583,9 +600,10 @@ export declare const twoFactor: (options?: TwoFactorOptions) => {
583
600
  hooks: {
584
601
  after: {
585
602
  matcher(context: import("better-auth").HookEndpointContext): boolean;
586
- handler: (inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
603
+ handler: import("better-auth").Middleware<import("better-auth").MiddlewareOptions, (inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
587
604
  twoFactorRedirect: boolean;
588
- } | undefined>;
605
+ twoFactorMethods: string[];
606
+ } | undefined>>;
589
607
  }[];
590
608
  };
591
609
  schema: {
@@ -622,6 +640,25 @@ export declare const twoFactor: (options?: TwoFactorOptions) => {
622
640
  };
623
641
  index: true;
624
642
  };
643
+ verified: {
644
+ type: "boolean";
645
+ required: false;
646
+ defaultValue: true;
647
+ input: false;
648
+ };
649
+ failedVerificationCount: {
650
+ type: "number";
651
+ required: false;
652
+ defaultValue: number;
653
+ input: false;
654
+ returned: false;
655
+ };
656
+ lockedUntil: {
657
+ type: "date";
658
+ required: false;
659
+ input: false;
660
+ returned: false;
661
+ };
625
662
  };
626
663
  };
627
664
  };
@@ -632,13 +669,17 @@ export declare const twoFactor: (options?: TwoFactorOptions) => {
632
669
  }[];
633
670
  $ERROR_CODES: {
634
671
  OTP_NOT_ENABLED: import("better-auth").RawError<"OTP_NOT_ENABLED">;
672
+ OTP_NOT_CONFIGURED: import("better-auth").RawError<"OTP_NOT_CONFIGURED">;
635
673
  OTP_HAS_EXPIRED: import("better-auth").RawError<"OTP_HAS_EXPIRED">;
636
674
  TOTP_NOT_ENABLED: import("better-auth").RawError<"TOTP_NOT_ENABLED">;
675
+ TOTP_ALREADY_ENABLED: import("better-auth").RawError<"TOTP_ALREADY_ENABLED">;
676
+ TOTP_NOT_CONFIGURED: import("better-auth").RawError<"TOTP_NOT_CONFIGURED">;
637
677
  TWO_FACTOR_NOT_ENABLED: import("better-auth").RawError<"TWO_FACTOR_NOT_ENABLED">;
638
678
  BACKUP_CODES_NOT_ENABLED: import("better-auth").RawError<"BACKUP_CODES_NOT_ENABLED">;
639
679
  INVALID_BACKUP_CODE: import("better-auth").RawError<"INVALID_BACKUP_CODE">;
640
680
  INVALID_CODE: import("better-auth").RawError<"INVALID_CODE">;
641
681
  TOO_MANY_ATTEMPTS_REQUEST_NEW_CODE: import("better-auth").RawError<"TOO_MANY_ATTEMPTS_REQUEST_NEW_CODE">;
682
+ ACCOUNT_TEMPORARILY_LOCKED: import("better-auth").RawError<"ACCOUNT_TEMPORARILY_LOCKED">;
642
683
  INVALID_TWO_FACTOR_COOKIE: import("better-auth").RawError<"INVALID_TWO_FACTOR_COOKIE">;
643
684
  };
644
685
  };
@@ -1 +1 @@
1
- {"version":3,"file":"two-factor.d.ts","sourceRoot":"","sources":["../../../../src/auth/plugins/wrappers/two-factor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAI5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,CAAC,QAAQ,CAaxD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,aAAa,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGlD,CAAC"}
1
+ {"version":3,"file":"two-factor.d.ts","sourceRoot":"","sources":["../../../../src/auth/plugins/wrappers/two-factor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAI5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,CAAC,QAAQ,CAaxD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,aAAa,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGlD,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { init_utils, merge } from "../../../utils/utils.js";
2
2
  import { twoFactor as twoFactor$1 } from "better-auth/plugins";
3
- //#region src/auth/plugins/wrappers/two-factor.ts
3
+ // src/auth/plugins/wrappers/two-factor.ts
4
4
  init_utils();
5
5
  /**
6
6
  * Two-Factor 플러그인 스키마
@@ -29,7 +29,6 @@ const twoFactor = (options = {}) => {
29
29
  options.schema = merge(TWO_FACTOR_SCHEMA, options.schema ?? {});
30
30
  return twoFactor$1(options);
31
31
  };
32
- //#endregion
33
32
  export { TWO_FACTOR_SCHEMA, twoFactor };
34
33
 
35
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdvLWZhY3Rvci5qcyIsIm5hbWVzIjpbIl90d29GYWN0b3IiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXV0aC9wbHVnaW5zL3dyYXBwZXJzL3R3by1mYWN0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHdvRmFjdG9yIGFzIF90d29GYWN0b3IgfSBmcm9tIFwiYmV0dGVyLWF1dGgvcGx1Z2luc1wiO1xuaW1wb3J0IHsgdHlwZSBUd29GYWN0b3JPcHRpb25zIH0gZnJvbSBcImJldHRlci1hdXRoL3BsdWdpbnNcIjtcblxuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvdXRpbHNcIjtcblxuZXhwb3J0IHR5cGUgeyBUd29GYWN0b3JPcHRpb25zIH0gZnJvbSBcImJldHRlci1hdXRoL3BsdWdpbnNcIjtcblxuLyoqXG4gKiBUd28tRmFjdG9yIO2UjOufrOq3uOyduCDsiqTtgqTrp4hcbiAqXG4gKiBiZXR0ZXItYXV0aCB0d29GYWN0b3Ig7ZSM65+s6re47J24IO2YuOy2nCDsi5wg7KCE64us7ZWp64uI64ukOlxuICogYGBgdHlwZXNjcmlwdFxuICogdHdvRmFjdG9yKHsgc2NoZW1hOiBUV09fRkFDVE9SX1NDSEVNQSB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBUV09fRkFDVE9SX1NDSEVNQTogVHdvRmFjdG9yT3B0aW9uc1tcInNjaGVtYVwiXSA9IHtcbiAgdXNlcjoge1xuICAgIGZpZWxkczoge1xuICAgICAgdHdvRmFjdG9yRW5hYmxlZDogXCJ0d29fZmFjdG9yX2VuYWJsZWRcIixcbiAgICB9LFxuICB9LFxuICB0d29GYWN0b3I6IHtcbiAgICBtb2RlbE5hbWU6IFwidHdvX2ZhY3RvcnNcIixcbiAgICBmaWVsZHM6IHtcbiAgICAgIHVzZXJJZDogXCJ1c2VyX2lkXCIsXG4gICAgICBiYWNrdXBDb2RlczogXCJiYWNrdXBfY29kZXNcIixcbiAgICB9LFxuICB9LFxufTtcblxuLyoqXG4gKiB0d29GYWN0b3Ig7ZSM65+s6re47J24IOuemO2NvFxuICpcbiAqIFNvbmFtdeydmCDsiqTtgqTrp4gg66ek7ZWR7J2EIOyekOuPmeycvOuhnCDrs5Htlantlanri4jri6QuXG4gKi9cbmV4cG9ydCBjb25zdCB0d29GYWN0b3IgPSAob3B0aW9uczogVHdvRmFjdG9yT3B0aW9ucyA9IHt9KSA9PiB7XG4gIG9wdGlvbnMuc2NoZW1hID0gbWVyZ2UoVFdPX0ZBQ1RPUl9TQ0hFTUEsIG9wdGlvbnMuc2NoZW1hID8/IHt9KTtcbiAgcmV0dXJuIF90d29GYWN0b3Iob3B0aW9ucyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7V0FHNEM7Ozs7Ozs7OztBQVk1QyxNQUFhLG9CQUFnRDtDQUMzRCxNQUFNLEVBQ0osUUFBUSxFQUNOLGtCQUFrQixxQkFDcEIsRUFDRjtDQUNBLFdBQVc7RUFDVCxXQUFXO0VBQ1gsUUFBUTtHQUNOLFFBQVE7R0FDUixhQUFhO0VBQ2Y7Q0FDRjtBQUNGOzs7Ozs7QUFPQSxNQUFhLGFBQWEsVUFBNEIsQ0FBQyxNQUFNO0NBQzNELFFBQVEsU0FBUyxNQUFNLG1CQUFtQixRQUFRLFVBQVUsQ0FBQyxDQUFDO0NBQzlELE9BQU9BLFlBQVcsT0FBTztBQUMzQiJ9
34
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdvLWZhY3Rvci5qcyIsIm5hbWVzIjpbIl90d29GYWN0b3IiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXV0aC9wbHVnaW5zL3dyYXBwZXJzL3R3by1mYWN0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHdvRmFjdG9yIGFzIF90d29GYWN0b3IgfSBmcm9tIFwiYmV0dGVyLWF1dGgvcGx1Z2luc1wiO1xuaW1wb3J0IHsgdHlwZSBUd29GYWN0b3JPcHRpb25zIH0gZnJvbSBcImJldHRlci1hdXRoL3BsdWdpbnNcIjtcblxuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvdXRpbHNcIjtcblxuZXhwb3J0IHR5cGUgeyBUd29GYWN0b3JPcHRpb25zIH0gZnJvbSBcImJldHRlci1hdXRoL3BsdWdpbnNcIjtcblxuLyoqXG4gKiBUd28tRmFjdG9yIO2UjOufrOq3uOyduCDsiqTtgqTrp4hcbiAqXG4gKiBiZXR0ZXItYXV0aCB0d29GYWN0b3Ig7ZSM65+s6re47J24IO2YuOy2nCDsi5wg7KCE64us7ZWp64uI64ukOlxuICogYGBgdHlwZXNjcmlwdFxuICogdHdvRmFjdG9yKHsgc2NoZW1hOiBUV09fRkFDVE9SX1NDSEVNQSB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBUV09fRkFDVE9SX1NDSEVNQTogVHdvRmFjdG9yT3B0aW9uc1tcInNjaGVtYVwiXSA9IHtcbiAgdXNlcjoge1xuICAgIGZpZWxkczoge1xuICAgICAgdHdvRmFjdG9yRW5hYmxlZDogXCJ0d29fZmFjdG9yX2VuYWJsZWRcIixcbiAgICB9LFxuICB9LFxuICB0d29GYWN0b3I6IHtcbiAgICBtb2RlbE5hbWU6IFwidHdvX2ZhY3RvcnNcIixcbiAgICBmaWVsZHM6IHtcbiAgICAgIHVzZXJJZDogXCJ1c2VyX2lkXCIsXG4gICAgICBiYWNrdXBDb2RlczogXCJiYWNrdXBfY29kZXNcIixcbiAgICB9LFxuICB9LFxufTtcblxuLyoqXG4gKiB0d29GYWN0b3Ig7ZSM65+s6re47J24IOuemO2NvFxuICpcbiAqIFNvbmFtdeydmCDsiqTtgqTrp4gg66ek7ZWR7J2EIOyekOuPmeycvOuhnCDrs5Htlantlanri4jri6QuXG4gKi9cbmV4cG9ydCBjb25zdCB0d29GYWN0b3IgPSAob3B0aW9uczogVHdvRmFjdG9yT3B0aW9ucyA9IHt9KSA9PiB7XG4gIG9wdGlvbnMuc2NoZW1hID0gbWVyZ2UoVFdPX0ZBQ1RPUl9TQ0hFTUEsIG9wdGlvbnMuc2NoZW1hID8/IHt9KTtcbiAgcmV0dXJuIF90d29GYWN0b3Iob3B0aW9ucyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFHNEMsV0FBQTs7Ozs7Ozs7O0FBWTVDLE1BQWEsb0JBQWdEO0NBQzNELE1BQU0sRUFDSixRQUFRLEVBQ04sa0JBQWtCLHFCQUNwQixFQUNGO0NBQ0EsV0FBVztFQUNULFdBQVc7RUFDWCxRQUFRO0dBQ04sUUFBUTtHQUNSLGFBQWE7RUFDZjtDQUNGO0FBQ0Y7Ozs7OztBQU9BLE1BQWEsYUFBYSxVQUE0QixDQUFDLE1BQU07Q0FDM0QsUUFBUSxTQUFTLE1BQU0sbUJBQW1CLFFBQVEsVUFBVSxDQUFDLENBQUM7Q0FDOUQsT0FBT0EsWUFBVyxPQUFPO0FBQzNCIn0=
@@ -33,7 +33,18 @@ export declare const username: (options?: UsernameOptions) => {
33
33
  } & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null): Promise<{
34
34
  data: {
35
35
  displayUsername?: string | undefined;
36
- username?: string | undefined;
36
+ username: string;
37
+ id: string;
38
+ createdAt: Date;
39
+ updatedAt: Date;
40
+ email: string;
41
+ emailVerified: boolean;
42
+ name: string;
43
+ image?: string | null | undefined;
44
+ };
45
+ } | {
46
+ data: {
47
+ displayUsername?: string | undefined;
37
48
  id: string;
38
49
  createdAt: Date;
39
50
  updatedAt: Date;
@@ -56,7 +67,18 @@ export declare const username: (options?: UsernameOptions) => {
56
67
  }> & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null): Promise<{
57
68
  data: {
58
69
  displayUsername?: string | undefined;
59
- username?: string | undefined;
70
+ username: string;
71
+ id?: string | undefined;
72
+ createdAt?: Date | undefined;
73
+ updatedAt?: Date | undefined;
74
+ email?: string | undefined;
75
+ emailVerified?: boolean | undefined;
76
+ name?: string | undefined;
77
+ image?: string | null | undefined;
78
+ };
79
+ } | {
80
+ data: {
81
+ displayUsername?: string | undefined;
60
82
  id?: string | undefined;
61
83
  createdAt?: Date | undefined;
62
84
  updatedAt?: Date | undefined;
@@ -92,10 +114,19 @@ export declare const username: (options?: UsernameOptions) => {
92
114
  schema: {
93
115
  type: "object";
94
116
  properties: {
117
+ redirect: {
118
+ type: string;
119
+ description: string;
120
+ };
95
121
  token: {
96
122
  type: string;
97
123
  description: string;
98
124
  };
125
+ url: {
126
+ type: string;
127
+ nullable: boolean;
128
+ description: string;
129
+ };
99
130
  user: {
100
131
  $ref: string;
101
132
  };
@@ -124,7 +155,9 @@ export declare const username: (options?: UsernameOptions) => {
124
155
  };
125
156
  };
126
157
  }, {
158
+ redirect: boolean;
127
159
  token: string;
160
+ url: string | undefined;
128
161
  user: {
129
162
  id: string;
130
163
  createdAt: Date;
@@ -157,14 +190,14 @@ export declare const username: (options?: UsernameOptions) => {
157
190
  unique: true;
158
191
  returned: true;
159
192
  transform: {
160
- input(value: import("better-auth").DBPrimitive): string | number | boolean | Date | Record<string, unknown> | unknown[] | null | undefined;
193
+ input(value: import("better-auth").DBPrimitive): string | number | boolean | Date | unknown[] | Record<string, unknown> | null | undefined;
161
194
  };
162
195
  };
163
196
  displayUsername: {
164
197
  type: "string";
165
198
  required: false;
166
199
  transform: {
167
- input(value: import("better-auth").DBPrimitive): string | number | boolean | Date | Record<string, unknown> | unknown[] | null | undefined;
200
+ input(value: import("better-auth").DBPrimitive): string | number | boolean | Date | unknown[] | Record<string, unknown> | null | undefined;
168
201
  };
169
202
  };
170
203
  };
@@ -173,7 +206,7 @@ export declare const username: (options?: UsernameOptions) => {
173
206
  hooks: {
174
207
  before: {
175
208
  matcher(context: import("better-auth").HookEndpointContext): boolean;
176
- handler: (inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<void>;
209
+ handler: import("better-auth").Middleware<import("better-auth").MiddlewareOptions, (inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<void>>;
177
210
  }[];
178
211
  };
179
212
  options: UsernameOptions | undefined;
@@ -186,6 +219,7 @@ export declare const username: (options?: UsernameOptions) => {
186
219
  USERNAME_TOO_LONG: import("better-auth").RawError<"USERNAME_TOO_LONG">;
187
220
  INVALID_USERNAME: import("better-auth").RawError<"INVALID_USERNAME">;
188
221
  INVALID_DISPLAY_USERNAME: import("better-auth").RawError<"INVALID_DISPLAY_USERNAME">;
222
+ USERNAME_IS_IMMUTABLE: import("better-auth").RawError<"USERNAME_IS_IMMUTABLE">;
189
223
  };
190
224
  };
191
225
  //# sourceMappingURL=username.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"username.d.ts","sourceRoot":"","sources":["../../../../src/auth/plugins/wrappers/username.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAI3D,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,QAAQ,CAOrD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,aAAa,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGhD,CAAC"}
1
+ {"version":3,"file":"username.d.ts","sourceRoot":"","sources":["../../../../src/auth/plugins/wrappers/username.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAI3D,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,QAAQ,CAOrD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,aAAa,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGhD,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { init_utils, merge } from "../../../utils/utils.js";
2
2
  import { username as username$1 } from "better-auth/plugins";
3
- //#region src/auth/plugins/wrappers/username.ts
3
+ // src/auth/plugins/wrappers/username.ts
4
4
  init_utils();
5
5
  /**
6
6
  * Username 플러그인 스키마
@@ -20,7 +20,6 @@ const username = (options = {}) => {
20
20
  options.schema = merge(USERNAME_SCHEMA, options.schema ?? {});
21
21
  return username$1(options);
22
22
  };
23
- //#endregion
24
23
  export { USERNAME_SCHEMA, username };
25
24
 
26
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcm5hbWUuanMiLCJuYW1lcyI6WyJfdXNlcm5hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXV0aC9wbHVnaW5zL3dyYXBwZXJzL3VzZXJuYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZXJuYW1lIGFzIF91c2VybmFtZSB9IGZyb20gXCJiZXR0ZXItYXV0aC9wbHVnaW5zXCI7XG5pbXBvcnQgeyB0eXBlIFVzZXJuYW1lT3B0aW9ucyB9IGZyb20gXCJiZXR0ZXItYXV0aC9wbHVnaW5zXCI7XG5cbmltcG9ydCB7IG1lcmdlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3V0aWxzXCI7XG5cbmV4cG9ydCB0eXBlIHsgVXNlcm5hbWVPcHRpb25zIH0gZnJvbSBcImJldHRlci1hdXRoL3BsdWdpbnNcIjtcblxuLyoqXG4gKiBVc2VybmFtZSDtlIzrn6zqt7jsnbgg7Iqk7YKk66eIXG4gKlxuICogYmV0dGVyLWF1dGggdXNlcm5hbWUg7ZSM65+s6re47J24IO2YuOy2nCDsi5wg7KCE64us7ZWp64uI64ukOlxuICogYGBgdHlwZXNjcmlwdFxuICogdXNlcm5hbWUoeyBzY2hlbWE6IFVTRVJOQU1FX1NDSEVNQSB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBVU0VSTkFNRV9TQ0hFTUE6IFVzZXJuYW1lT3B0aW9uc1tcInNjaGVtYVwiXSA9IHtcbiAgdXNlcjoge1xuICAgIGZpZWxkczoge1xuICAgICAgLy8gdXNlcm5hbWU6IFwidXNlcm5hbWVcIixcbiAgICAgIGRpc3BsYXlVc2VybmFtZTogXCJkaXNwbGF5X3VzZXJuYW1lXCIsXG4gICAgfSxcbiAgfSxcbn07XG5cbi8qKlxuICogdXNlcm5hbWUg7ZSM65+s6re47J24IOuemO2NvFxuICpcbiAqIFNvbmFtdeydmCDsiqTtgqTrp4gg66ek7ZWR7J2EIOyekOuPmeycvOuhnCDrs5Htlantlanri4jri6QuXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VybmFtZSA9IChvcHRpb25zOiBVc2VybmFtZU9wdGlvbnMgPSB7fSkgPT4ge1xuICBvcHRpb25zLnNjaGVtYSA9IG1lcmdlKFVTRVJOQU1FX1NDSEVNQSwgb3B0aW9ucy5zY2hlbWEgPz8ge30pO1xuICByZXR1cm4gX3VzZXJuYW1lKG9wdGlvbnMpO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7O1dBRzRDOzs7Ozs7Ozs7QUFZNUMsTUFBYSxrQkFBNkMsRUFDeEQsTUFBTSxFQUNKLFFBQVEsRUFFTixpQkFBaUIsbUJBQ25CLEVBQ0YsRUFDRjs7Ozs7O0FBT0EsTUFBYSxZQUFZLFVBQTJCLENBQUMsTUFBTTtDQUN6RCxRQUFRLFNBQVMsTUFBTSxpQkFBaUIsUUFBUSxVQUFVLENBQUMsQ0FBQztDQUM1RCxPQUFPQSxXQUFVLE9BQU87QUFDMUIifQ==
25
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcm5hbWUuanMiLCJuYW1lcyI6WyJfdXNlcm5hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXV0aC9wbHVnaW5zL3dyYXBwZXJzL3VzZXJuYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZXJuYW1lIGFzIF91c2VybmFtZSB9IGZyb20gXCJiZXR0ZXItYXV0aC9wbHVnaW5zXCI7XG5pbXBvcnQgeyB0eXBlIFVzZXJuYW1lT3B0aW9ucyB9IGZyb20gXCJiZXR0ZXItYXV0aC9wbHVnaW5zXCI7XG5cbmltcG9ydCB7IG1lcmdlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3V0aWxzXCI7XG5cbmV4cG9ydCB0eXBlIHsgVXNlcm5hbWVPcHRpb25zIH0gZnJvbSBcImJldHRlci1hdXRoL3BsdWdpbnNcIjtcblxuLyoqXG4gKiBVc2VybmFtZSDtlIzrn6zqt7jsnbgg7Iqk7YKk66eIXG4gKlxuICogYmV0dGVyLWF1dGggdXNlcm5hbWUg7ZSM65+s6re47J24IO2YuOy2nCDsi5wg7KCE64us7ZWp64uI64ukOlxuICogYGBgdHlwZXNjcmlwdFxuICogdXNlcm5hbWUoeyBzY2hlbWE6IFVTRVJOQU1FX1NDSEVNQSB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBVU0VSTkFNRV9TQ0hFTUE6IFVzZXJuYW1lT3B0aW9uc1tcInNjaGVtYVwiXSA9IHtcbiAgdXNlcjoge1xuICAgIGZpZWxkczoge1xuICAgICAgLy8gdXNlcm5hbWU6IFwidXNlcm5hbWVcIixcbiAgICAgIGRpc3BsYXlVc2VybmFtZTogXCJkaXNwbGF5X3VzZXJuYW1lXCIsXG4gICAgfSxcbiAgfSxcbn07XG5cbi8qKlxuICogdXNlcm5hbWUg7ZSM65+s6re47J24IOuemO2NvFxuICpcbiAqIFNvbmFtdeydmCDsiqTtgqTrp4gg66ek7ZWR7J2EIOyekOuPmeycvOuhnCDrs5Htlantlanri4jri6QuXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VybmFtZSA9IChvcHRpb25zOiBVc2VybmFtZU9wdGlvbnMgPSB7fSkgPT4ge1xuICBvcHRpb25zLnNjaGVtYSA9IG1lcmdlKFVTRVJOQU1FX1NDSEVNQSwgb3B0aW9ucy5zY2hlbWEgPz8ge30pO1xuICByZXR1cm4gX3VzZXJuYW1lKG9wdGlvbnMpO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBRzRDLFdBQUE7Ozs7Ozs7OztBQVk1QyxNQUFhLGtCQUE2QyxFQUN4RCxNQUFNLEVBQ0osUUFBUSxFQUVOLGlCQUFpQixtQkFDbkIsRUFDRixFQUNGOzs7Ozs7QUFPQSxNQUFhLFlBQVksVUFBMkIsQ0FBQyxNQUFNO0NBQ3pELFFBQVEsU0FBUyxNQUFNLGlCQUFpQixRQUFRLFVBQVUsQ0FBQyxDQUFDO0NBQzVELE9BQU9BLFdBQVUsT0FBTztBQUMxQiJ9
@@ -7,7 +7,7 @@ import { readFile, rm, writeFile } from "node:fs/promises";
7
7
  import path from "node:path";
8
8
  import assert from "node:assert";
9
9
  import { pathToFileURL } from "node:url";
10
- //#region src/bin/build-config.ts
10
+ // src/bin/build-config.ts
11
11
  init_console_util();
12
12
  init_fs_utils();
13
13
  init_utils();
@@ -59,7 +59,7 @@ async function createApiZodCompilerBuildWrapper(options) {
59
59
  await assertApiZodCompilerSourceRegistry(options.registryPath);
60
60
  const wrapperPath = path.join(options.apiRootPath, `.sonamu-zod-compiler-${process.pid}-${Date.now()}.mjs`);
61
61
  const baseConfigUrl = pathToFileURL(options.baseConfigPath).href;
62
- await writeFile(wrapperPath, [
62
+ const source = [
63
63
  `import path from "node:path";`,
64
64
  `import baseConfig from ${JSON.stringify(baseConfigUrl)};`,
65
65
  `import zodCompiler from "zod-compiler/rolldown";`,
@@ -114,7 +114,8 @@ async function createApiZodCompilerBuildWrapper(options) {
114
114
  " return appendToResolvedConfig(resolved);",
115
115
  "};",
116
116
  ""
117
- ].join("\n"), "utf8");
117
+ ].join("\n");
118
+ await writeFile(wrapperPath, source, "utf8");
118
119
  return wrapperPath;
119
120
  }
120
121
  /**
@@ -262,7 +263,6 @@ async function buildWebCommand({ skipIfMissing = false, exec = execWithLinePrefi
262
263
  throw error;
263
264
  }
264
265
  }
265
- //#endregion
266
266
  export { API_ARTIFACTS, HTTP_VALIDATOR_REGISTRY_BUILD_PATH, HTTP_VALIDATOR_REGISTRY_SOURCE_PATH, WEB_ARTIFACTS, assertApiZodCompilerBuildOutput, assertApiZodCompilerSourceRegistry, buildApiCommand, buildWebCommand, composeApiZodCompilerBuildConfig, createApiZodCompilerBuildWrapper, createWebTypecheckCommand, quoteShellArgument, resolveApiBuildConfigPath };
267
267
 
268
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtY29uZmlnLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vYnVpbGQtY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQgeyByZWFkRmlsZSwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IHR5cGUgVXNlckNvbmZpZyB9IGZyb20gXCJ0c2Rvd25cIjtcblxuaW1wb3J0IHsgdHlwZSBOb3JtYWxpemVkWm9kQ29tcGlsZXJQb2xpY3kgfSBmcm9tIFwiLi4vYXBpL2NvbmZpZ1wiO1xuaW1wb3J0IHtcbiAgZXhlY1dpdGhMaW5lUHJlZml4LFxuICBwcmludEJ1aWxkU3VtbWFyeSxcbiAgcHJpbnRUYXNrRmFpbGVkLFxuICBwcmludFRhc2tIZWFkZXIsXG4gIHByaW50VGFza1N0YXJ0LFxuICBwcmludFRhc2tTdWNjZXNzLFxufSBmcm9tIFwiLi4vdXRpbHMvY29uc29sZS11dGlsXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IGZpbmRBcGlSb290UGF0aCwgZmluZEFwcFJvb3RQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBsb2FkQnVpbGRDb21waWxlclBvbGljeSB9IGZyb20gXCIuL2NvbXBpbGVyLXBvbGljeVwiO1xuXG5leHBvcnQgdHlwZSBCdWlsZEFydGlmYWN0PEJ1aWxkQ29tbWFuZEFyZ3MgPSB7fT4gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgcHJvamVjdFBhdGg6IHN0cmluZztcbiAgcHJlQnVpbGRDb21tYW5kPzogKCkgPT4gc3RyaW5nO1xuICBidWlsZENvbW1hbmQ6IChhcmdzOiBCdWlsZENvbW1hbmRBcmdzKSA9PiBzdHJpbmc7XG4gIHBvc3RCdWlsZENvbW1hbmQ/OiAoKSA9PiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBcGlUc2Rvd25CdWlsZENvbmZpZyA9IFBpY2s8VXNlckNvbmZpZywgXCJlbnRyeVwiIHwgXCJwbHVnaW5zXCI+O1xuXG5leHBvcnQgZnVuY3Rpb24gcXVvdGVTaGVsbEFyZ3VtZW50KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyDsnpHsnYDrlLDsmLTtkZwg7J6Q7LK066eMIOyFuCDqsr3qs4Trpbwg64ur7KeAIOuqu+2VmOuPhOuhnSDrtoTrpqztlbQg66as7YSw65+0IOyduOyImOulvCDrs7TsobTtlanri4jri6QuXG4gIHJldHVybiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgYCdcIidcIidgKX0nYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYlR5cGVjaGVja0NvbW1hbmQoKTogc3RyaW5nIHtcbiAgY29uc3QgaXNTb3VyY2VNb2R1bGUgPSBwYXRoLmV4dG5hbWUoaW1wb3J0Lm1ldGEuZmlsZW5hbWUpID09PSBcIi50c1wiO1xuICBjb25zdCBzY3JpcHRQYXRoID0gcGF0aC5qb2luKFxuICAgIGltcG9ydC5tZXRhLmRpcm5hbWUsXG4gICAgYHR5cGVjaGVjay13ZWIuJHtpc1NvdXJjZU1vZHVsZSA/IFwidHNcIiA6IFwianNcIn1gLFxuICApO1xuICBjb25zdCBydW5uZXIgPSBpc1NvdXJjZU1vZHVsZSA/IFwicG5wbSBleGVjIHRzeFwiIDogcXVvdGVTaGVsbEFyZ3VtZW50KHByb2Nlc3MuZXhlY1BhdGgpO1xuICByZXR1cm4gYCR7cnVubmVyfSAke3F1b3RlU2hlbGxBcmd1bWVudChzY3JpcHRQYXRoKX1gO1xufVxuXG50eXBlIFpvZENvbXBpbGVyUGx1Z2luRmFjdG9yeSA9ICh0eXBlb2YgaW1wb3J0KFwiem9kLWNvbXBpbGVyL3JvbGxkb3duXCIpKVtcImRlZmF1bHRcIl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpWm9kQ29tcGlsZXJCdWlsZERlcGVuZGVuY2llcyB7XG4gIGxvYWRDb21waWxlclBsdWdpbjogKCkgPT4gUHJvbWlzZTxab2RDb21waWxlclBsdWdpbkZhY3Rvcnk+O1xufVxuXG5jb25zdCBhcGlab2RDb21waWxlckJ1aWxkRGVwZW5kZW5jaWVzOiBBcGlab2RDb21waWxlckJ1aWxkRGVwZW5kZW5jaWVzID0ge1xuICBhc3luYyBsb2FkQ29tcGlsZXJQbHVnaW4oKSB7XG4gICAgcmV0dXJuIChhd2FpdCBpbXBvcnQoXCJ6b2QtY29tcGlsZXIvcm9sbGRvd25cIikpLmRlZmF1bHQ7XG4gIH0sXG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tcG9zZUFwaVpvZENvbXBpbGVyQnVpbGRDb25maWc8VCBleHRlbmRzIEFwaVRzZG93bkJ1aWxkQ29uZmlnPihcbiAgYmFzZUNvbmZpZzogVCxcbiAgb3B0aW9uczoge1xuICAgIHBvbGljeTogTm9ybWFsaXplZFpvZENvbXBpbGVyUG9saWN5O1xuICAgIHJlZ2lzdHJ5UGF0aD86IHN0cmluZztcbiAgfSxcbiAgZGVwZW5kZW5jaWVzOiBBcGlab2RDb21waWxlckJ1aWxkRGVwZW5kZW5jaWVzID0gYXBpWm9kQ29tcGlsZXJCdWlsZERlcGVuZGVuY2llcyxcbik6IFByb21pc2U8VCAmIEFwaVRzZG93bkJ1aWxkQ29uZmlnPiB7XG4gIGlmIChvcHRpb25zLnBvbGljeS5hcGkgIT09IFwiYW90XCIpIHtcbiAgICByZXR1cm4gYmFzZUNvbmZpZztcbiAgfVxuICBpZiAob3B0aW9ucy5yZWdpc3RyeVBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInZhbGlkYXRpb24uem9kQ29tcGlsZXIuYXBpIHJlcXVpcmVzIHRoZSBnZW5lcmF0ZWQgSFRUUCB2YWxpZGF0b3IgcmVnaXN0cnlcIik7XG4gIH1cblxuICBjb25zdCB6b2RDb21waWxlciA9IGF3YWl0IGRlcGVuZGVuY2llcy5sb2FkQ29tcGlsZXJQbHVnaW4oKTtcbiAgY29uc3QgY29tcGlsZXJQbHVnaW4gPSB6b2RDb21waWxlcih7XG4gICAgY29kZWdlbk1vZGU6IFwiaW5saW5lXCIsXG4gICAgaW5jbHVkZTogW29wdGlvbnMucmVnaXN0cnlQYXRoXSxcbiAgICBvdXRwdXQ6IFwiY29tcGFjdFwiLFxuICAgIHNjaGVtYXM6IFwiZXhwbGljaXRcIixcbiAgfSk7XG5cbiAgbGV0IGNvbmZpZ3VyZWRQbHVnaW5zOiBFeGNsdWRlPFVzZXJDb25maWdbXCJwbHVnaW5zXCJdLCB1bmRlZmluZWQ+W107XG4gIGlmIChBcnJheS5pc0FycmF5KGJhc2VDb25maWcucGx1Z2lucykpIHtcbiAgICBjb25maWd1cmVkUGx1Z2lucyA9IGJhc2VDb25maWcucGx1Z2lucztcbiAgfSBlbHNlIGlmIChiYXNlQ29uZmlnLnBsdWdpbnMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZ3VyZWRQbHVnaW5zID0gW107XG4gIH0gZWxzZSB7XG4gICAgY29uZmlndXJlZFBsdWdpbnMgPSBbYmFzZUNvbmZpZy5wbHVnaW5zXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uYmFzZUNvbmZpZyxcbiAgICBwbHVnaW5zOiBbLi4uY29uZmlndXJlZFBsdWdpbnMsIGNvbXBpbGVyUGx1Z2luXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEFwaVpvZENvbXBpbGVyQnVpbGRPdXRwdXQoXG4gIG91dHB1dHM6IHJlYWRvbmx5IHsgY29kZTogc3RyaW5nOyBwYXRoOiBzdHJpbmcgfVtdLFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3Qgb3V0cHV0IG9mIG91dHB1dHMpIHtcbiAgICBpZiAoL1xcYmNvbXBpbGVcXHMqXFwoLy50ZXN0KG91dHB1dC5jb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB6b2QtY29tcGlsZXIgY29tcGlsZSBib3VuZGFyeSByZW1haW5zIGluICR7b3V0cHV0LnBhdGh9YCk7XG4gICAgfVxuICAgIGlmIChvdXRwdXQuY29kZS5pbmNsdWRlcyhcInZpcnR1YWw6em9kLWNvbXBpbGVyL3J1bnRpbWVcIikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgem9kLWNvbXBpbGVyIHZpcnR1YWwgcnVudGltZSBpbXBvcnQgcmVtYWlucyBpbiAke291dHB1dC5wYXRofWApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgSFRUUF9WQUxJREFUT1JfUkVHSVNUUllfU09VUkNFX1BBVEggPSBcInNyYy9hcHBsaWNhdGlvbi9zb25hbXUudmFsaWRhdG9ycy5nZW5lcmF0ZWQudHNcIjtcbmV4cG9ydCBjb25zdCBIVFRQX1ZBTElEQVRPUl9SRUdJU1RSWV9CVUlMRF9QQVRIID0gXCJkaXN0L2FwcGxpY2F0aW9uL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZC5qc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXJ0QXBpWm9kQ29tcGlsZXJTb3VyY2VSZWdpc3RyeShyZWdpc3RyeVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIShhd2FpdCBleGlzdHMocmVnaXN0cnlQYXRoKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdlbmVyYXRlZCBIVFRQIHZhbGlkYXRvciByZWdpc3RyeSBub3QgZm91bmQ6ICR7cmVnaXN0cnlQYXRofWApO1xuICB9XG4gIGNvbnN0IHNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKHJlZ2lzdHJ5UGF0aCwgXCJ1dGY4XCIpO1xuICBpZiAoIS9maW5nZXJwcmludFxccyo9XFxzKltcIiddW2EtZjAtOV17NjR9W1wiJ10vLnRlc3Qoc291cmNlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgR2VuZXJhdGVkIEhUVFAgdmFsaWRhdG9yIHJlZ2lzdHJ5IGZpbmdlcnByaW50IGlzIGludmFsaWQ6ICR7cmVnaXN0cnlQYXRofWApO1xuICB9XG4gIGNvbnN0IGRlY2xhcmVzWmVyb1JvdXRlcyA9IC9cXGJyb3V0ZUlkc1xccyo9XFxzKlxce1xccypcXH1cXHMqOy8udGVzdChzb3VyY2UpO1xuICBpZiAoIWRlY2xhcmVzWmVyb1JvdXRlcyAmJiAhL1xcYmNvbXBpbGVcXHMqXFwoLy50ZXN0KHNvdXJjZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdlbmVyYXRlZCBIVFRQIHZhbGlkYXRvciByZWdpc3RyeSBoYXMgbm8gY29tcGlsZSBib3VuZGFyeTogJHtyZWdpc3RyeVBhdGh9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwaVpvZENvbXBpbGVyQnVpbGRXcmFwcGVyKG9wdGlvbnM6IHtcbiAgYXBpUm9vdFBhdGg6IHN0cmluZztcbiAgYmFzZUNvbmZpZ1BhdGg6IHN0cmluZztcbiAgcG9saWN5OiBOb3JtYWxpemVkWm9kQ29tcGlsZXJQb2xpY3k7XG4gIHJlZ2lzdHJ5UGF0aDogc3RyaW5nO1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChvcHRpb25zLnBvbGljeS5hcGkgIT09IFwiYW90XCIpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5iYXNlQ29uZmlnUGF0aDtcbiAgfVxuXG4gIGF3YWl0IGFzc2VydEFwaVpvZENvbXBpbGVyU291cmNlUmVnaXN0cnkob3B0aW9ucy5yZWdpc3RyeVBhdGgpO1xuICBjb25zdCB3cmFwcGVyUGF0aCA9IHBhdGguam9pbihcbiAgICBvcHRpb25zLmFwaVJvb3RQYXRoLFxuICAgIGAuc29uYW11LXpvZC1jb21waWxlci0ke3Byb2Nlc3MucGlkfS0ke0RhdGUubm93KCl9Lm1qc2AsXG4gICk7XG4gIGNvbnN0IGJhc2VDb25maWdVcmwgPSBwYXRoVG9GaWxlVVJMKG9wdGlvbnMuYmFzZUNvbmZpZ1BhdGgpLmhyZWY7XG4gIGNvbnN0IHNvdXJjZSA9IFtcbiAgICBgaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO2AsXG4gICAgYGltcG9ydCBiYXNlQ29uZmlnIGZyb20gJHtKU09OLnN0cmluZ2lmeShiYXNlQ29uZmlnVXJsKX07YCxcbiAgICBgaW1wb3J0IHpvZENvbXBpbGVyIGZyb20gXCJ6b2QtY29tcGlsZXIvcm9sbGRvd25cIjtgLFxuICAgIFwiXCIsXG4gICAgYGNvbnN0IGNvbXBpbGVyUGx1Z2luID0gem9kQ29tcGlsZXIoJHtKU09OLnN0cmluZ2lmeSh7XG4gICAgICBjb2RlZ2VuTW9kZTogXCJpbmxpbmVcIixcbiAgICAgIGluY2x1ZGU6IFtvcHRpb25zLnJlZ2lzdHJ5UGF0aF0sXG4gICAgICBvdXRwdXQ6IFwiY29tcGFjdFwiLFxuICAgICAgc2NoZW1hczogXCJleHBsaWNpdFwiLFxuICAgIH0pfSk7YCxcbiAgICBgY29uc3QgcmVnaXN0cnlQYXRoID0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zLnJlZ2lzdHJ5UGF0aCl9O2AsXG4gICAgYGNvbnN0IGFwaVJvb3RQYXRoID0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zLmFwaVJvb3RQYXRoKX07YCxcbiAgICBgY29uc3QgY2Fub25pY2FsT3V0RGlyID0gcGF0aC5qb2luKGFwaVJvb3RQYXRoLCBcImRpc3RcIik7YCxcbiAgICBgY29uc3QgcmVnaXN0cnlFbnRyeU5hbWUgPSBcImFwcGxpY2F0aW9uL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZFwiO2AsXG4gICAgYGNvbnN0IGRlZmF1bHRFbnRyeSA9IHsgaW5kZXg6IFwic3JjL2luZGV4LnRzXCIgfTtgLFxuICAgIFwiY29uc3QgcmVzb2x2ZXNUb1JlZ2lzdHJ5ID0gKGVudHJ5KSA9PlwiLFxuICAgICcgIHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIiAmJiBwYXRoLnJlc29sdmUoYXBpUm9vdFBhdGgsIGVudHJ5KSA9PT0gcmVnaXN0cnlQYXRoOycsXG4gICAgXCJjb25zdCBhcHBlbmRSZWdpc3RyeUVudHJ5ID0gKGVudHJ5KSA9PiB7XCIsXG4gICAgXCIgIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSkge1wiLFxuICAgIFwiICAgIHJldHVybiBlbnRyeS5zb21lKHJlc29sdmVzVG9SZWdpc3RyeSkgPyBlbnRyeSA6IFsuLi5lbnRyeSwgcmVnaXN0cnlQYXRoXTtcIixcbiAgICBcIiAgfVwiLFxuICAgICcgIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpIHsnLFxuICAgIFwiICAgIHJldHVybiByZXNvbHZlc1RvUmVnaXN0cnkoZW50cnkpID8gZW50cnkgOiBbZW50cnksIHJlZ2lzdHJ5UGF0aF07XCIsXG4gICAgXCIgIH1cIixcbiAgICAnICBpZiAodHlwZW9mIGVudHJ5ID09PSBcIm9iamVjdFwiICYmIGVudHJ5ICE9PSBudWxsKSB7JyxcbiAgICBcIiAgICBpZiAoT2JqZWN0LnZhbHVlcyhlbnRyeSkuc29tZShyZXNvbHZlc1RvUmVnaXN0cnkpKSByZXR1cm4gZW50cnk7XCIsXG4gICAgXCIgICAgaWYgKHJlZ2lzdHJ5RW50cnlOYW1lIGluIGVudHJ5KSB7XCIsXG4gICAgXCIgICAgICB0aHJvdyBuZXcgRXJyb3IoYHRzZG93biBlbnRyeSBjb2xsaXNpb246ICR7cmVnaXN0cnlFbnRyeU5hbWV9YCk7XCIsXG4gICAgXCIgICAgfVwiLFxuICAgIFwiICAgIHJldHVybiB7IC4uLmVudHJ5LCBbcmVnaXN0cnlFbnRyeU5hbWVdOiByZWdpc3RyeVBhdGggfTtcIixcbiAgICBcIiAgfVwiLFxuICAgIFwiICBpZiAoZW50cnkgPT09IHVuZGVmaW5lZCkge1wiLFxuICAgIFwiICAgIHJldHVybiB7IC4uLmRlZmF1bHRFbnRyeSwgW3JlZ2lzdHJ5RW50cnlOYW1lXTogcmVnaXN0cnlQYXRoIH07XCIsXG4gICAgXCIgIH1cIixcbiAgICBcIiAgcmV0dXJuIHsgW3JlZ2lzdHJ5RW50cnlOYW1lXTogcmVnaXN0cnlQYXRoIH07XCIsXG4gICAgXCJ9O1wiLFxuICAgIFwiY29uc3QgYXBwZW5kUGx1Z2luID0gKGNvbmZpZykgPT4gKHtcIixcbiAgICBcIiAgLi4uY29uZmlnLFwiLFxuICAgIFwiICAvLyDrn7Dtg4DsnoQgbG9hZGVy6rCAIOywuOyhsO2VmOuKlCByZWdpc3RyeSDqsr3roZzrpbwg67mM65OcIOyEpOygleqzvCDsnbzsuZjsi5ztgrXri4jri6QuXCIsXG4gICAgXCIgIG91dERpcjogY2Fub25pY2FsT3V0RGlyLFwiLFxuICAgIFwiICBmaXhlZEV4dGVuc2lvbjogZmFsc2UsXCIsXG4gICAgXCIgIGVudHJ5OiBhcHBlbmRSZWdpc3RyeUVudHJ5KGNvbmZpZy5lbnRyeSksXCIsXG4gICAgXCIgIHBsdWdpbnM6IFsuLi4oY29uZmlnLnBsdWdpbnMgPz8gW10pLCBjb21waWxlclBsdWdpbl0sXCIsXG4gICAgXCJ9KTtcIixcbiAgICBcImNvbnN0IGFwcGVuZFRvUmVzb2x2ZWRDb25maWcgPSAoY29uZmlnKSA9PlwiLFxuICAgIFwiICBBcnJheS5pc0FycmF5KGNvbmZpZykgPyBjb25maWcubWFwKGFwcGVuZFBsdWdpbikgOiBhcHBlbmRQbHVnaW4oY29uZmlnKTtcIixcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGRlZmF1bHQgYXN5bmMgKC4uLmFyZ3MpID0+IHtcIixcbiAgICAnICBjb25zdCByZXNvbHZlZCA9IHR5cGVvZiBiYXNlQ29uZmlnID09PSBcImZ1bmN0aW9uXCInLFxuICAgIFwiICAgID8gYXdhaXQgYmFzZUNvbmZpZyguLi5hcmdzKVwiLFxuICAgIFwiICAgIDogYXdhaXQgYmFzZUNvbmZpZztcIixcbiAgICBcIiAgcmV0dXJuIGFwcGVuZFRvUmVzb2x2ZWRDb25maWcocmVzb2x2ZWQpO1wiLFxuICAgIFwifTtcIixcbiAgICBcIlwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG4gIGF3YWl0IHdyaXRlRmlsZSh3cmFwcGVyUGF0aCwgc291cmNlLCBcInV0ZjhcIik7XG4gIHJldHVybiB3cmFwcGVyUGF0aDtcbn1cblxuLyoqXG4gKiBBUEkg7ZSE66Gc7KCd7Yq4IOu5jOuTnCDsgrDstpzrrLzsl5Ag64yA7ZWcIOq3nOy5meuTpC5cbiAqIGNsaS50c+ydmCBidWlsZF9hcGkg7ZWo7IiY6rCAIOydtOqyg+ydhCDrs7Tqs6Ag6re464yA66GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFQSV9BUlRJRkFDVFM6IEJ1aWxkQXJ0aWZhY3Q8eyBjb25maWdGaWxlUGF0aDogc3RyaW5nIH0+W10gPSBbXG4gIHtcbiAgICBuYW1lOiBcIkFQSVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkFQSSDtlITroZzsoJ3tirgg67mM65OcIOyCsOy2nOusvFwiLFxuICAgIHByb2plY3RQYXRoOiBcImFwaVwiLFxuICAgIHByZUJ1aWxkQ29tbWFuZDogKCkgPT4gXCJybSAtcmYgZGlzdFwiLFxuICAgIGJ1aWxkQ29tbWFuZDogKHsgY29uZmlnRmlsZVBhdGggfSkgPT5cbiAgICAgIGB0c2MgLS1ub0VtaXQgJiYgcG5wbSBleGVjIHRzZG93biAtLWNvbmZpZyAke0pTT04uc3RyaW5naWZ5KGNvbmZpZ0ZpbGVQYXRoKX1gLFxuICB9LFxuXTtcblxuLyoqXG4gKiDsm7kg7ZSE66Gc7KCd7Yq4IOu5jOuTnCDsgrDstpzrrLzsl5Ag64yA7ZWcIOq3nOy5meuTpC5cbiAqIGNsaS50c+ydmCBidWlsZF93ZWIg7ZWo7IiY6rCAIOydtOqyg+ydhCDrs7Tqs6Ag6re464yA66GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNvbnN0IFdFQl9BUlRJRkFDVFM6IEJ1aWxkQXJ0aWZhY3RbXSA9IFtcbiAge1xuICAgIG5hbWU6IFwiV2ViIENsaWVudFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIldlYiDtlITroZzsoJ3tirgg7YG065287J207Ja47Yq4IOu5jOuTnCDsgrDstpzrrLxcIixcbiAgICBwcm9qZWN0UGF0aDogXCJ3ZWJcIixcbiAgICBwcmVCdWlsZENvbW1hbmQ6ICgpID0+IFwicm0gLXJmIGRpc3QvY2xpZW50XCIsXG4gICAgYnVpbGRDb21tYW5kOiAoKSA9PiBcInZpdGUgYnVpbGQgLS1jb25maWcgdml0ZS5jb25maWcudHMgLS1vdXREaXIgZGlzdC9jbGllbnRcIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiV2ViIFNlcnZlclwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIldlYiDtlITroZzsoJ3tirgg7ISc67KEIOu5jOuTnCDsgrDstpzrrLxcIixcbiAgICBwcm9qZWN0UGF0aDogXCJ3ZWJcIixcbiAgICBwcmVCdWlsZENvbW1hbmQ6ICgpID0+IFwicm0gLXJmIGRpc3Qvc2VydmVyXCIsXG4gICAgYnVpbGRDb21tYW5kOiAoKSA9PlxuICAgICAgXCJ2aXRlIGJ1aWxkIC0tY29uZmlnIHZpdGUuY29uZmlnLnRzIC0tc3NyIHNyYy9lbnRyeS1zZXJ2ZXIuZ2VuZXJhdGVkLnRzeCAtLW91dERpciBkaXN0L3NlcnZlclwiLFxuICAgIHBvc3RCdWlsZENvbW1hbmQ6ICgpID0+XG4gICAgICBcInJtIC1yZiAuLi9hcGkvd2ViLWRpc3QgJiYgbWtkaXIgLXAgLi4vYXBpL3dlYi1kaXN0ICYmIGNwIC1yIGRpc3QvKiAuLi9hcGkvd2ViLWRpc3RcIixcbiAgfSxcbl07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlQXBpQnVpbGRDb25maWdQYXRoKFxuICBhcGlSb290UGF0aDogc3RyaW5nLFxuICBkZXBlbmRlbmNpZXM6IHtcbiAgICBleGlzdHM6IChjYW5kaWRhdGVQYXRoOiBzdHJpbmcpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gICAgbW9kdWxlRGlyOiBzdHJpbmc7XG4gIH0gPSB7XG4gICAgZXhpc3RzLFxuICAgIG1vZHVsZURpcjogaW1wb3J0Lm1ldGEuZGlybmFtZSxcbiAgfSxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGxvY2FsQ29uZmlnUGF0aCA9IHBhdGguam9pbihhcGlSb290UGF0aCwgXCJ0c2Rvd24uY29uZmlnLnRzXCIpO1xuICBpZiAoYXdhaXQgZGVwZW5kZW5jaWVzLmV4aXN0cyhsb2NhbENvbmZpZ1BhdGgpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiVXNpbmcgdHNkb3duLmNvbmZpZy50cyBmcm9tIHByb2plY3Qgcm9vdC4uLlwiKSk7XG4gICAgcmV0dXJuIGxvY2FsQ29uZmlnUGF0aDtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcIlVzaW5nIGRlZmF1bHQgdHNkb3duIEFQSSBjb25maWcgZnJvbSBzb25hbXUgcGFja2FnZS4uLlwiKSk7XG4gIGNvbnN0IGNvbXBpbGVkQ29uZmlnUGF0aCA9IHBhdGguam9pbihkZXBlbmRlbmNpZXMubW9kdWxlRGlyLCBcIi4uXCIsIFwidHNkb3duLmFwaS5jb25maWcuanNcIik7XG4gIGlmIChhd2FpdCBkZXBlbmRlbmNpZXMuZXhpc3RzKGNvbXBpbGVkQ29uZmlnUGF0aCkpIHtcbiAgICByZXR1cm4gY29tcGlsZWRDb25maWdQYXRoO1xuICB9XG4gIHJldHVybiBwYXRoLmpvaW4oZGVwZW5kZW5jaWVzLm1vZHVsZURpciwgXCIuLlwiLCBcIi4uXCIsIFwidHNkb3duLmFwaS5jb25maWcudHNcIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bkJ1aWxkU3RlcHM8VD4oXG4gIGFydGlmYWN0OiBCdWlsZEFydGlmYWN0PFQ+LFxuICBvcHRpb25zOiB7IGN3ZDogc3RyaW5nOyBidWlsZENvbW1hbmRBcmdzOiBUOyBleGVjPzogdHlwZW9mIGV4ZWNXaXRoTGluZVByZWZpeCB9LFxuKSB7XG4gIGNvbnN0IHN0ZXBzID0gW1xuICAgIHsgbmFtZTogXCJwcmUtYnVpbGRcIiwgY21kOiBhcnRpZmFjdC5wcmVCdWlsZENvbW1hbmQ/LigpIH0sXG4gICAgeyBuYW1lOiBcImJ1aWxkXCIsIGNtZDogYXJ0aWZhY3QuYnVpbGRDb21tYW5kKG9wdGlvbnMuYnVpbGRDb21tYW5kQXJncykgfSxcbiAgICB7IG5hbWU6IFwicG9zdC1idWlsZFwiLCBjbWQ6IGFydGlmYWN0LnBvc3RCdWlsZENvbW1hbmQ/LigpIH0sXG4gIF0uZmlsdGVyKChzdGVwKSA9PiBzdGVwLmNtZCAhPT0gdW5kZWZpbmVkKTtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3RlcHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3Qgc3RlcCA9IHN0ZXBzW2luZGV4XTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA9PT0gc3RlcHMubGVuZ3RoIC0gMTtcbiAgICB0cnkge1xuICAgICAgYXNzZXJ0KHN0ZXAuY21kKTtcbiAgICAgIHByaW50VGFza1N0YXJ0KHN0ZXAubmFtZSwgc3RlcC5jbWQsIGlzTGFzdCk7XG4gICAgICBhd2FpdCAob3B0aW9ucy5leGVjID8/IGV4ZWNXaXRoTGluZVByZWZpeCkoc3RlcC5jbWQsIHsgY3dkOiBvcHRpb25zLmN3ZCB9KTtcbiAgICAgIHByaW50VGFza1N1Y2Nlc3Moc3RlcC5uYW1lLCBpc0xhc3QpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwcmludFRhc2tGYWlsZWQoc3RlcC5uYW1lLCBpc0xhc3QpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3N0ZXAubmFtZX0gZmFpbGVkYCwgeyBjYXVzZTogZXJyb3IgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZEFwaUNvbW1hbmQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGFwaVJvb3RQYXRoID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGJhc2VDb25maWdQYXRoID0gYXdhaXQgcmVzb2x2ZUFwaUJ1aWxkQ29uZmlnUGF0aChhcGlSb290UGF0aCk7XG4gIGNvbnN0IHBvbGljeSA9IGF3YWl0IGxvYWRCdWlsZENvbXBpbGVyUG9saWN5KGFwaVJvb3RQYXRoKTtcbiAgY29uc3QgcmVnaXN0cnlQYXRoID0gcGF0aC5qb2luKGFwaVJvb3RQYXRoLCBIVFRQX1ZBTElEQVRPUl9SRUdJU1RSWV9TT1VSQ0VfUEFUSCk7XG4gIGNvbnN0IGNvbmZpZ0ZpbGVQYXRoID0gYXdhaXQgY3JlYXRlQXBpWm9kQ29tcGlsZXJCdWlsZFdyYXBwZXIoe1xuICAgIGFwaVJvb3RQYXRoLFxuICAgIGJhc2VDb25maWdQYXRoLFxuICAgIHBvbGljeSxcbiAgICByZWdpc3RyeVBhdGgsXG4gIH0pO1xuICBjb25zdCB0ZW1wb3JhcnlDb25maWdQYXRoID0gY29uZmlnRmlsZVBhdGggPT09IGJhc2VDb25maWdQYXRoID8gdW5kZWZpbmVkIDogY29uZmlnRmlsZVBhdGg7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIEFQSV9BUlRJRkFDVFMpIHtcbiAgICAgIHByaW50VGFza0hlYWRlcihhcnRpZmFjdC5uYW1lLCBhcnRpZmFjdC5kZXNjcmlwdGlvbiwgYXBpUm9vdFBhdGgpO1xuICAgICAgYXdhaXQgcnVuQnVpbGRTdGVwcyhhcnRpZmFjdCwge1xuICAgICAgICBjd2Q6IGFwaVJvb3RQYXRoLFxuICAgICAgICBidWlsZENvbW1hbmRBcmdzOiB7IGNvbmZpZ0ZpbGVQYXRoIH0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHBvbGljeS5hcGkgPT09IFwiYW90XCIpIHtcbiAgICAgIGNvbnN0IG91dHB1dFBhdGggPSBwYXRoLmpvaW4oYXBpUm9vdFBhdGgsIEhUVFBfVkFMSURBVE9SX1JFR0lTVFJZX0JVSUxEX1BBVEgpO1xuICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKG91dHB1dFBhdGgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJ1aWx0IEhUVFAgdmFsaWRhdG9yIHJlZ2lzdHJ5IG5vdCBmb3VuZDogJHtvdXRwdXRQYXRofWApO1xuICAgICAgfVxuICAgICAgYXNzZXJ0QXBpWm9kQ29tcGlsZXJCdWlsZE91dHB1dChbXG4gICAgICAgIHsgY29kZTogYXdhaXQgcmVhZEZpbGUob3V0cHV0UGF0aCwgXCJ1dGY4XCIpLCBwYXRoOiBvdXRwdXRQYXRoIH0sXG4gICAgICBdKTtcbiAgICB9XG4gICAgcHJpbnRCdWlsZFN1bW1hcnkoXCJBUElcIiwgdHJ1ZSwgRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcHJpbnRCdWlsZFN1bW1hcnkoXCJBUElcIiwgZmFsc2UsIERhdGUubm93KCkgLSBzdGFydGVkQXQpO1xuICAgIHRocm93IGVycm9yO1xuICB9IGZpbmFsbHkge1xuICAgIGlmICh0ZW1wb3JhcnlDb25maWdQYXRoICE9PSB1bmRlZmluZWQpIGF3YWl0IHJtKHRlbXBvcmFyeUNvbmZpZ1BhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkV2ViQ29tbWFuZCh7XG4gIHNraXBJZk1pc3NpbmcgPSBmYWxzZSxcbiAgZXhlYyA9IGV4ZWNXaXRoTGluZVByZWZpeCxcbn06IHsgc2tpcElmTWlzc2luZz86IGJvb2xlYW47IGV4ZWM/OiB0eXBlb2YgZXhlY1dpdGhMaW5lUHJlZml4IH0gPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhcHBSb290UGF0aCA9IGZpbmRBcHBSb290UGF0aCgpO1xuICBjb25zdCB3ZWJQYXRoID0gcGF0aC5qb2luKGFwcFJvb3RQYXRoLCBcIndlYlwiKTtcbiAgaWYgKCEoYXdhaXQgZXhpc3RzKHdlYlBhdGgpKSkge1xuICAgIGlmIChza2lwSWZNaXNzaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KFwiV2ViIOuUlOugie2GoOumrOqwgCDsl4bsnLzrr4DroZwgV2ViIOu5jOuTnOulvCDqsbTrhIjrnIHri4jri6QuXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGB3ZWIg65SU66CJ7Yag66as66W8IOywvuydhCDsiJgg7JeG7Iq164uI64ukOiAke3dlYlBhdGh9YCk7XG4gIH1cblxuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICB0cnkge1xuICAgIC8vIO2BtOudvOydtOyWuO2KuC9TU1Ig67mM65Oc6rCAIOqwmeydgCDtg4DsnoXssrTtgazrpbwg67CY67O17ZWY7KeAIOyViuuPhOuhnSB2aXRlIOu5jOuTnCDsoITsl5Ag7ZWcIOuyiOunjCDsi6TtlontlZzri6QuXG4gICAgY29uc3QgdHlwZWNoZWNrQ29tbWFuZCA9IGNyZWF0ZVdlYlR5cGVjaGVja0NvbW1hbmQoKTtcbiAgICBwcmludFRhc2tIZWFkZXIoXCJXZWIgVHlwZWNoZWNrXCIsIFwiV2ViIO2UhOuhnOygne2KuCDtg4DsnoUg6rKA7IKsXCIsIHdlYlBhdGgpO1xuICAgIHByaW50VGFza1N0YXJ0KFwidHlwZWNoZWNrXCIsIHR5cGVjaGVja0NvbW1hbmQsIHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKHR5cGVjaGVja0NvbW1hbmQsIHsgY3dkOiB3ZWJQYXRoIH0pO1xuICAgICAgcHJpbnRUYXNrU3VjY2VzcyhcInR5cGVjaGVja1wiLCB0cnVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJpbnRUYXNrRmFpbGVkKFwidHlwZWNoZWNrXCIsIHRydWUpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZWNoZWNrIGZhaWxlZFwiLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIFdFQl9BUlRJRkFDVFMpIHtcbiAgICAgIGNvbnN0IGN3ZCA9IHBhdGguam9pbihhcHBSb290UGF0aCwgYXJ0aWZhY3QucHJvamVjdFBhdGgpO1xuICAgICAgcHJpbnRUYXNrSGVhZGVyKGFydGlmYWN0Lm5hbWUsIGFydGlmYWN0LmRlc2NyaXB0aW9uLCBjd2QpO1xuICAgICAgYXdhaXQgcnVuQnVpbGRTdGVwcyhhcnRpZmFjdCwgeyBjd2QsIGJ1aWxkQ29tbWFuZEFyZ3M6IHt9LCBleGVjIH0pO1xuICAgIH1cbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIldlYlwiLCB0cnVlLCBEYXRlLm5vdygpIC0gc3RhcnRlZEF0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIldlYlwiLCBmYWxzZSwgRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztrQkFnQjhCO2NBQ1k7V0FDdUI7QUFjakUsU0FBZ0IsbUJBQW1CLE9BQXVC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
268
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtY29uZmlnLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vYnVpbGQtY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQgeyByZWFkRmlsZSwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IHR5cGUgVXNlckNvbmZpZyB9IGZyb20gXCJ0c2Rvd25cIjtcblxuaW1wb3J0IHsgdHlwZSBOb3JtYWxpemVkWm9kQ29tcGlsZXJQb2xpY3kgfSBmcm9tIFwiLi4vYXBpL2NvbmZpZ1wiO1xuaW1wb3J0IHtcbiAgZXhlY1dpdGhMaW5lUHJlZml4LFxuICBwcmludEJ1aWxkU3VtbWFyeSxcbiAgcHJpbnRUYXNrRmFpbGVkLFxuICBwcmludFRhc2tIZWFkZXIsXG4gIHByaW50VGFza1N0YXJ0LFxuICBwcmludFRhc2tTdWNjZXNzLFxufSBmcm9tIFwiLi4vdXRpbHMvY29uc29sZS11dGlsXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IGZpbmRBcGlSb290UGF0aCwgZmluZEFwcFJvb3RQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBsb2FkQnVpbGRDb21waWxlclBvbGljeSB9IGZyb20gXCIuL2NvbXBpbGVyLXBvbGljeVwiO1xuXG5leHBvcnQgdHlwZSBCdWlsZEFydGlmYWN0PEJ1aWxkQ29tbWFuZEFyZ3MgPSB7fT4gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgcHJvamVjdFBhdGg6IHN0cmluZztcbiAgcHJlQnVpbGRDb21tYW5kPzogKCkgPT4gc3RyaW5nO1xuICBidWlsZENvbW1hbmQ6IChhcmdzOiBCdWlsZENvbW1hbmRBcmdzKSA9PiBzdHJpbmc7XG4gIHBvc3RCdWlsZENvbW1hbmQ/OiAoKSA9PiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBcGlUc2Rvd25CdWlsZENvbmZpZyA9IFBpY2s8VXNlckNvbmZpZywgXCJlbnRyeVwiIHwgXCJwbHVnaW5zXCI+O1xuXG5leHBvcnQgZnVuY3Rpb24gcXVvdGVTaGVsbEFyZ3VtZW50KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyDsnpHsnYDrlLDsmLTtkZwg7J6Q7LK066eMIOyFuCDqsr3qs4Trpbwg64ur7KeAIOuqu+2VmOuPhOuhnSDrtoTrpqztlbQg66as7YSw65+0IOyduOyImOulvCDrs7TsobTtlanri4jri6QuXG4gIHJldHVybiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgYCdcIidcIidgKX0nYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYlR5cGVjaGVja0NvbW1hbmQoKTogc3RyaW5nIHtcbiAgY29uc3QgaXNTb3VyY2VNb2R1bGUgPSBwYXRoLmV4dG5hbWUoaW1wb3J0Lm1ldGEuZmlsZW5hbWUpID09PSBcIi50c1wiO1xuICBjb25zdCBzY3JpcHRQYXRoID0gcGF0aC5qb2luKFxuICAgIGltcG9ydC5tZXRhLmRpcm5hbWUsXG4gICAgYHR5cGVjaGVjay13ZWIuJHtpc1NvdXJjZU1vZHVsZSA/IFwidHNcIiA6IFwianNcIn1gLFxuICApO1xuICBjb25zdCBydW5uZXIgPSBpc1NvdXJjZU1vZHVsZSA/IFwicG5wbSBleGVjIHRzeFwiIDogcXVvdGVTaGVsbEFyZ3VtZW50KHByb2Nlc3MuZXhlY1BhdGgpO1xuICByZXR1cm4gYCR7cnVubmVyfSAke3F1b3RlU2hlbGxBcmd1bWVudChzY3JpcHRQYXRoKX1gO1xufVxuXG50eXBlIFpvZENvbXBpbGVyUGx1Z2luRmFjdG9yeSA9ICh0eXBlb2YgaW1wb3J0KFwiem9kLWNvbXBpbGVyL3JvbGxkb3duXCIpKVtcImRlZmF1bHRcIl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpWm9kQ29tcGlsZXJCdWlsZERlcGVuZGVuY2llcyB7XG4gIGxvYWRDb21waWxlclBsdWdpbjogKCkgPT4gUHJvbWlzZTxab2RDb21waWxlclBsdWdpbkZhY3Rvcnk+O1xufVxuXG5jb25zdCBhcGlab2RDb21waWxlckJ1aWxkRGVwZW5kZW5jaWVzOiBBcGlab2RDb21waWxlckJ1aWxkRGVwZW5kZW5jaWVzID0ge1xuICBhc3luYyBsb2FkQ29tcGlsZXJQbHVnaW4oKSB7XG4gICAgcmV0dXJuIChhd2FpdCBpbXBvcnQoXCJ6b2QtY29tcGlsZXIvcm9sbGRvd25cIikpLmRlZmF1bHQ7XG4gIH0sXG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tcG9zZUFwaVpvZENvbXBpbGVyQnVpbGRDb25maWc8VCBleHRlbmRzIEFwaVRzZG93bkJ1aWxkQ29uZmlnPihcbiAgYmFzZUNvbmZpZzogVCxcbiAgb3B0aW9uczoge1xuICAgIHBvbGljeTogTm9ybWFsaXplZFpvZENvbXBpbGVyUG9saWN5O1xuICAgIHJlZ2lzdHJ5UGF0aD86IHN0cmluZztcbiAgfSxcbiAgZGVwZW5kZW5jaWVzOiBBcGlab2RDb21waWxlckJ1aWxkRGVwZW5kZW5jaWVzID0gYXBpWm9kQ29tcGlsZXJCdWlsZERlcGVuZGVuY2llcyxcbik6IFByb21pc2U8VCAmIEFwaVRzZG93bkJ1aWxkQ29uZmlnPiB7XG4gIGlmIChvcHRpb25zLnBvbGljeS5hcGkgIT09IFwiYW90XCIpIHtcbiAgICByZXR1cm4gYmFzZUNvbmZpZztcbiAgfVxuICBpZiAob3B0aW9ucy5yZWdpc3RyeVBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInZhbGlkYXRpb24uem9kQ29tcGlsZXIuYXBpIHJlcXVpcmVzIHRoZSBnZW5lcmF0ZWQgSFRUUCB2YWxpZGF0b3IgcmVnaXN0cnlcIik7XG4gIH1cblxuICBjb25zdCB6b2RDb21waWxlciA9IGF3YWl0IGRlcGVuZGVuY2llcy5sb2FkQ29tcGlsZXJQbHVnaW4oKTtcbiAgY29uc3QgY29tcGlsZXJQbHVnaW4gPSB6b2RDb21waWxlcih7XG4gICAgY29kZWdlbk1vZGU6IFwiaW5saW5lXCIsXG4gICAgaW5jbHVkZTogW29wdGlvbnMucmVnaXN0cnlQYXRoXSxcbiAgICBvdXRwdXQ6IFwiY29tcGFjdFwiLFxuICAgIHNjaGVtYXM6IFwiZXhwbGljaXRcIixcbiAgfSk7XG5cbiAgbGV0IGNvbmZpZ3VyZWRQbHVnaW5zOiBFeGNsdWRlPFVzZXJDb25maWdbXCJwbHVnaW5zXCJdLCB1bmRlZmluZWQ+W107XG4gIGlmIChBcnJheS5pc0FycmF5KGJhc2VDb25maWcucGx1Z2lucykpIHtcbiAgICBjb25maWd1cmVkUGx1Z2lucyA9IGJhc2VDb25maWcucGx1Z2lucztcbiAgfSBlbHNlIGlmIChiYXNlQ29uZmlnLnBsdWdpbnMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZ3VyZWRQbHVnaW5zID0gW107XG4gIH0gZWxzZSB7XG4gICAgY29uZmlndXJlZFBsdWdpbnMgPSBbYmFzZUNvbmZpZy5wbHVnaW5zXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uYmFzZUNvbmZpZyxcbiAgICBwbHVnaW5zOiBbLi4uY29uZmlndXJlZFBsdWdpbnMsIGNvbXBpbGVyUGx1Z2luXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEFwaVpvZENvbXBpbGVyQnVpbGRPdXRwdXQoXG4gIG91dHB1dHM6IHJlYWRvbmx5IHsgY29kZTogc3RyaW5nOyBwYXRoOiBzdHJpbmcgfVtdLFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3Qgb3V0cHV0IG9mIG91dHB1dHMpIHtcbiAgICBpZiAoL1xcYmNvbXBpbGVcXHMqXFwoLy50ZXN0KG91dHB1dC5jb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB6b2QtY29tcGlsZXIgY29tcGlsZSBib3VuZGFyeSByZW1haW5zIGluICR7b3V0cHV0LnBhdGh9YCk7XG4gICAgfVxuICAgIGlmIChvdXRwdXQuY29kZS5pbmNsdWRlcyhcInZpcnR1YWw6em9kLWNvbXBpbGVyL3J1bnRpbWVcIikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgem9kLWNvbXBpbGVyIHZpcnR1YWwgcnVudGltZSBpbXBvcnQgcmVtYWlucyBpbiAke291dHB1dC5wYXRofWApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgSFRUUF9WQUxJREFUT1JfUkVHSVNUUllfU09VUkNFX1BBVEggPSBcInNyYy9hcHBsaWNhdGlvbi9zb25hbXUudmFsaWRhdG9ycy5nZW5lcmF0ZWQudHNcIjtcbmV4cG9ydCBjb25zdCBIVFRQX1ZBTElEQVRPUl9SRUdJU1RSWV9CVUlMRF9QQVRIID0gXCJkaXN0L2FwcGxpY2F0aW9uL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZC5qc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXJ0QXBpWm9kQ29tcGlsZXJTb3VyY2VSZWdpc3RyeShyZWdpc3RyeVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIShhd2FpdCBleGlzdHMocmVnaXN0cnlQYXRoKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdlbmVyYXRlZCBIVFRQIHZhbGlkYXRvciByZWdpc3RyeSBub3QgZm91bmQ6ICR7cmVnaXN0cnlQYXRofWApO1xuICB9XG4gIGNvbnN0IHNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKHJlZ2lzdHJ5UGF0aCwgXCJ1dGY4XCIpO1xuICBpZiAoIS9maW5nZXJwcmludFxccyo9XFxzKltcIiddW2EtZjAtOV17NjR9W1wiJ10vLnRlc3Qoc291cmNlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgR2VuZXJhdGVkIEhUVFAgdmFsaWRhdG9yIHJlZ2lzdHJ5IGZpbmdlcnByaW50IGlzIGludmFsaWQ6ICR7cmVnaXN0cnlQYXRofWApO1xuICB9XG4gIGNvbnN0IGRlY2xhcmVzWmVyb1JvdXRlcyA9IC9cXGJyb3V0ZUlkc1xccyo9XFxzKlxce1xccypcXH1cXHMqOy8udGVzdChzb3VyY2UpO1xuICBpZiAoIWRlY2xhcmVzWmVyb1JvdXRlcyAmJiAhL1xcYmNvbXBpbGVcXHMqXFwoLy50ZXN0KHNvdXJjZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdlbmVyYXRlZCBIVFRQIHZhbGlkYXRvciByZWdpc3RyeSBoYXMgbm8gY29tcGlsZSBib3VuZGFyeTogJHtyZWdpc3RyeVBhdGh9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwaVpvZENvbXBpbGVyQnVpbGRXcmFwcGVyKG9wdGlvbnM6IHtcbiAgYXBpUm9vdFBhdGg6IHN0cmluZztcbiAgYmFzZUNvbmZpZ1BhdGg6IHN0cmluZztcbiAgcG9saWN5OiBOb3JtYWxpemVkWm9kQ29tcGlsZXJQb2xpY3k7XG4gIHJlZ2lzdHJ5UGF0aDogc3RyaW5nO1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChvcHRpb25zLnBvbGljeS5hcGkgIT09IFwiYW90XCIpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5iYXNlQ29uZmlnUGF0aDtcbiAgfVxuXG4gIGF3YWl0IGFzc2VydEFwaVpvZENvbXBpbGVyU291cmNlUmVnaXN0cnkob3B0aW9ucy5yZWdpc3RyeVBhdGgpO1xuICBjb25zdCB3cmFwcGVyUGF0aCA9IHBhdGguam9pbihcbiAgICBvcHRpb25zLmFwaVJvb3RQYXRoLFxuICAgIGAuc29uYW11LXpvZC1jb21waWxlci0ke3Byb2Nlc3MucGlkfS0ke0RhdGUubm93KCl9Lm1qc2AsXG4gICk7XG4gIGNvbnN0IGJhc2VDb25maWdVcmwgPSBwYXRoVG9GaWxlVVJMKG9wdGlvbnMuYmFzZUNvbmZpZ1BhdGgpLmhyZWY7XG4gIGNvbnN0IHNvdXJjZSA9IFtcbiAgICBgaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO2AsXG4gICAgYGltcG9ydCBiYXNlQ29uZmlnIGZyb20gJHtKU09OLnN0cmluZ2lmeShiYXNlQ29uZmlnVXJsKX07YCxcbiAgICBgaW1wb3J0IHpvZENvbXBpbGVyIGZyb20gXCJ6b2QtY29tcGlsZXIvcm9sbGRvd25cIjtgLFxuICAgIFwiXCIsXG4gICAgYGNvbnN0IGNvbXBpbGVyUGx1Z2luID0gem9kQ29tcGlsZXIoJHtKU09OLnN0cmluZ2lmeSh7XG4gICAgICBjb2RlZ2VuTW9kZTogXCJpbmxpbmVcIixcbiAgICAgIGluY2x1ZGU6IFtvcHRpb25zLnJlZ2lzdHJ5UGF0aF0sXG4gICAgICBvdXRwdXQ6IFwiY29tcGFjdFwiLFxuICAgICAgc2NoZW1hczogXCJleHBsaWNpdFwiLFxuICAgIH0pfSk7YCxcbiAgICBgY29uc3QgcmVnaXN0cnlQYXRoID0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zLnJlZ2lzdHJ5UGF0aCl9O2AsXG4gICAgYGNvbnN0IGFwaVJvb3RQYXRoID0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zLmFwaVJvb3RQYXRoKX07YCxcbiAgICBgY29uc3QgY2Fub25pY2FsT3V0RGlyID0gcGF0aC5qb2luKGFwaVJvb3RQYXRoLCBcImRpc3RcIik7YCxcbiAgICBgY29uc3QgcmVnaXN0cnlFbnRyeU5hbWUgPSBcImFwcGxpY2F0aW9uL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZFwiO2AsXG4gICAgYGNvbnN0IGRlZmF1bHRFbnRyeSA9IHsgaW5kZXg6IFwic3JjL2luZGV4LnRzXCIgfTtgLFxuICAgIFwiY29uc3QgcmVzb2x2ZXNUb1JlZ2lzdHJ5ID0gKGVudHJ5KSA9PlwiLFxuICAgICcgIHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIiAmJiBwYXRoLnJlc29sdmUoYXBpUm9vdFBhdGgsIGVudHJ5KSA9PT0gcmVnaXN0cnlQYXRoOycsXG4gICAgXCJjb25zdCBhcHBlbmRSZWdpc3RyeUVudHJ5ID0gKGVudHJ5KSA9PiB7XCIsXG4gICAgXCIgIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSkge1wiLFxuICAgIFwiICAgIHJldHVybiBlbnRyeS5zb21lKHJlc29sdmVzVG9SZWdpc3RyeSkgPyBlbnRyeSA6IFsuLi5lbnRyeSwgcmVnaXN0cnlQYXRoXTtcIixcbiAgICBcIiAgfVwiLFxuICAgICcgIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpIHsnLFxuICAgIFwiICAgIHJldHVybiByZXNvbHZlc1RvUmVnaXN0cnkoZW50cnkpID8gZW50cnkgOiBbZW50cnksIHJlZ2lzdHJ5UGF0aF07XCIsXG4gICAgXCIgIH1cIixcbiAgICAnICBpZiAodHlwZW9mIGVudHJ5ID09PSBcIm9iamVjdFwiICYmIGVudHJ5ICE9PSBudWxsKSB7JyxcbiAgICBcIiAgICBpZiAoT2JqZWN0LnZhbHVlcyhlbnRyeSkuc29tZShyZXNvbHZlc1RvUmVnaXN0cnkpKSByZXR1cm4gZW50cnk7XCIsXG4gICAgXCIgICAgaWYgKHJlZ2lzdHJ5RW50cnlOYW1lIGluIGVudHJ5KSB7XCIsXG4gICAgXCIgICAgICB0aHJvdyBuZXcgRXJyb3IoYHRzZG93biBlbnRyeSBjb2xsaXNpb246ICR7cmVnaXN0cnlFbnRyeU5hbWV9YCk7XCIsXG4gICAgXCIgICAgfVwiLFxuICAgIFwiICAgIHJldHVybiB7IC4uLmVudHJ5LCBbcmVnaXN0cnlFbnRyeU5hbWVdOiByZWdpc3RyeVBhdGggfTtcIixcbiAgICBcIiAgfVwiLFxuICAgIFwiICBpZiAoZW50cnkgPT09IHVuZGVmaW5lZCkge1wiLFxuICAgIFwiICAgIHJldHVybiB7IC4uLmRlZmF1bHRFbnRyeSwgW3JlZ2lzdHJ5RW50cnlOYW1lXTogcmVnaXN0cnlQYXRoIH07XCIsXG4gICAgXCIgIH1cIixcbiAgICBcIiAgcmV0dXJuIHsgW3JlZ2lzdHJ5RW50cnlOYW1lXTogcmVnaXN0cnlQYXRoIH07XCIsXG4gICAgXCJ9O1wiLFxuICAgIFwiY29uc3QgYXBwZW5kUGx1Z2luID0gKGNvbmZpZykgPT4gKHtcIixcbiAgICBcIiAgLi4uY29uZmlnLFwiLFxuICAgIFwiICAvLyDrn7Dtg4DsnoQgbG9hZGVy6rCAIOywuOyhsO2VmOuKlCByZWdpc3RyeSDqsr3roZzrpbwg67mM65OcIOyEpOygleqzvCDsnbzsuZjsi5ztgrXri4jri6QuXCIsXG4gICAgXCIgIG91dERpcjogY2Fub25pY2FsT3V0RGlyLFwiLFxuICAgIFwiICBmaXhlZEV4dGVuc2lvbjogZmFsc2UsXCIsXG4gICAgXCIgIGVudHJ5OiBhcHBlbmRSZWdpc3RyeUVudHJ5KGNvbmZpZy5lbnRyeSksXCIsXG4gICAgXCIgIHBsdWdpbnM6IFsuLi4oY29uZmlnLnBsdWdpbnMgPz8gW10pLCBjb21waWxlclBsdWdpbl0sXCIsXG4gICAgXCJ9KTtcIixcbiAgICBcImNvbnN0IGFwcGVuZFRvUmVzb2x2ZWRDb25maWcgPSAoY29uZmlnKSA9PlwiLFxuICAgIFwiICBBcnJheS5pc0FycmF5KGNvbmZpZykgPyBjb25maWcubWFwKGFwcGVuZFBsdWdpbikgOiBhcHBlbmRQbHVnaW4oY29uZmlnKTtcIixcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGRlZmF1bHQgYXN5bmMgKC4uLmFyZ3MpID0+IHtcIixcbiAgICAnICBjb25zdCByZXNvbHZlZCA9IHR5cGVvZiBiYXNlQ29uZmlnID09PSBcImZ1bmN0aW9uXCInLFxuICAgIFwiICAgID8gYXdhaXQgYmFzZUNvbmZpZyguLi5hcmdzKVwiLFxuICAgIFwiICAgIDogYXdhaXQgYmFzZUNvbmZpZztcIixcbiAgICBcIiAgcmV0dXJuIGFwcGVuZFRvUmVzb2x2ZWRDb25maWcocmVzb2x2ZWQpO1wiLFxuICAgIFwifTtcIixcbiAgICBcIlwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG4gIGF3YWl0IHdyaXRlRmlsZSh3cmFwcGVyUGF0aCwgc291cmNlLCBcInV0ZjhcIik7XG4gIHJldHVybiB3cmFwcGVyUGF0aDtcbn1cblxuLyoqXG4gKiBBUEkg7ZSE66Gc7KCd7Yq4IOu5jOuTnCDsgrDstpzrrLzsl5Ag64yA7ZWcIOq3nOy5meuTpC5cbiAqIGNsaS50c+ydmCBidWlsZF9hcGkg7ZWo7IiY6rCAIOydtOqyg+ydhCDrs7Tqs6Ag6re464yA66GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFQSV9BUlRJRkFDVFM6IEJ1aWxkQXJ0aWZhY3Q8eyBjb25maWdGaWxlUGF0aDogc3RyaW5nIH0+W10gPSBbXG4gIHtcbiAgICBuYW1lOiBcIkFQSVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkFQSSDtlITroZzsoJ3tirgg67mM65OcIOyCsOy2nOusvFwiLFxuICAgIHByb2plY3RQYXRoOiBcImFwaVwiLFxuICAgIHByZUJ1aWxkQ29tbWFuZDogKCkgPT4gXCJybSAtcmYgZGlzdFwiLFxuICAgIGJ1aWxkQ29tbWFuZDogKHsgY29uZmlnRmlsZVBhdGggfSkgPT5cbiAgICAgIGB0c2MgLS1ub0VtaXQgJiYgcG5wbSBleGVjIHRzZG93biAtLWNvbmZpZyAke0pTT04uc3RyaW5naWZ5KGNvbmZpZ0ZpbGVQYXRoKX1gLFxuICB9LFxuXTtcblxuLyoqXG4gKiDsm7kg7ZSE66Gc7KCd7Yq4IOu5jOuTnCDsgrDstpzrrLzsl5Ag64yA7ZWcIOq3nOy5meuTpC5cbiAqIGNsaS50c+ydmCBidWlsZF93ZWIg7ZWo7IiY6rCAIOydtOqyg+ydhCDrs7Tqs6Ag6re464yA66GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNvbnN0IFdFQl9BUlRJRkFDVFM6IEJ1aWxkQXJ0aWZhY3RbXSA9IFtcbiAge1xuICAgIG5hbWU6IFwiV2ViIENsaWVudFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIldlYiDtlITroZzsoJ3tirgg7YG065287J207Ja47Yq4IOu5jOuTnCDsgrDstpzrrLxcIixcbiAgICBwcm9qZWN0UGF0aDogXCJ3ZWJcIixcbiAgICBwcmVCdWlsZENvbW1hbmQ6ICgpID0+IFwicm0gLXJmIGRpc3QvY2xpZW50XCIsXG4gICAgYnVpbGRDb21tYW5kOiAoKSA9PiBcInZpdGUgYnVpbGQgLS1jb25maWcgdml0ZS5jb25maWcudHMgLS1vdXREaXIgZGlzdC9jbGllbnRcIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiV2ViIFNlcnZlclwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIldlYiDtlITroZzsoJ3tirgg7ISc67KEIOu5jOuTnCDsgrDstpzrrLxcIixcbiAgICBwcm9qZWN0UGF0aDogXCJ3ZWJcIixcbiAgICBwcmVCdWlsZENvbW1hbmQ6ICgpID0+IFwicm0gLXJmIGRpc3Qvc2VydmVyXCIsXG4gICAgYnVpbGRDb21tYW5kOiAoKSA9PlxuICAgICAgXCJ2aXRlIGJ1aWxkIC0tY29uZmlnIHZpdGUuY29uZmlnLnRzIC0tc3NyIHNyYy9lbnRyeS1zZXJ2ZXIuZ2VuZXJhdGVkLnRzeCAtLW91dERpciBkaXN0L3NlcnZlclwiLFxuICAgIHBvc3RCdWlsZENvbW1hbmQ6ICgpID0+XG4gICAgICBcInJtIC1yZiAuLi9hcGkvd2ViLWRpc3QgJiYgbWtkaXIgLXAgLi4vYXBpL3dlYi1kaXN0ICYmIGNwIC1yIGRpc3QvKiAuLi9hcGkvd2ViLWRpc3RcIixcbiAgfSxcbl07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlQXBpQnVpbGRDb25maWdQYXRoKFxuICBhcGlSb290UGF0aDogc3RyaW5nLFxuICBkZXBlbmRlbmNpZXM6IHtcbiAgICBleGlzdHM6IChjYW5kaWRhdGVQYXRoOiBzdHJpbmcpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gICAgbW9kdWxlRGlyOiBzdHJpbmc7XG4gIH0gPSB7XG4gICAgZXhpc3RzLFxuICAgIG1vZHVsZURpcjogaW1wb3J0Lm1ldGEuZGlybmFtZSxcbiAgfSxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGxvY2FsQ29uZmlnUGF0aCA9IHBhdGguam9pbihhcGlSb290UGF0aCwgXCJ0c2Rvd24uY29uZmlnLnRzXCIpO1xuICBpZiAoYXdhaXQgZGVwZW5kZW5jaWVzLmV4aXN0cyhsb2NhbENvbmZpZ1BhdGgpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiVXNpbmcgdHNkb3duLmNvbmZpZy50cyBmcm9tIHByb2plY3Qgcm9vdC4uLlwiKSk7XG4gICAgcmV0dXJuIGxvY2FsQ29uZmlnUGF0aDtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcIlVzaW5nIGRlZmF1bHQgdHNkb3duIEFQSSBjb25maWcgZnJvbSBzb25hbXUgcGFja2FnZS4uLlwiKSk7XG4gIGNvbnN0IGNvbXBpbGVkQ29uZmlnUGF0aCA9IHBhdGguam9pbihkZXBlbmRlbmNpZXMubW9kdWxlRGlyLCBcIi4uXCIsIFwidHNkb3duLmFwaS5jb25maWcuanNcIik7XG4gIGlmIChhd2FpdCBkZXBlbmRlbmNpZXMuZXhpc3RzKGNvbXBpbGVkQ29uZmlnUGF0aCkpIHtcbiAgICByZXR1cm4gY29tcGlsZWRDb25maWdQYXRoO1xuICB9XG4gIHJldHVybiBwYXRoLmpvaW4oZGVwZW5kZW5jaWVzLm1vZHVsZURpciwgXCIuLlwiLCBcIi4uXCIsIFwidHNkb3duLmFwaS5jb25maWcudHNcIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bkJ1aWxkU3RlcHM8VD4oXG4gIGFydGlmYWN0OiBCdWlsZEFydGlmYWN0PFQ+LFxuICBvcHRpb25zOiB7IGN3ZDogc3RyaW5nOyBidWlsZENvbW1hbmRBcmdzOiBUOyBleGVjPzogdHlwZW9mIGV4ZWNXaXRoTGluZVByZWZpeCB9LFxuKSB7XG4gIGNvbnN0IHN0ZXBzID0gW1xuICAgIHsgbmFtZTogXCJwcmUtYnVpbGRcIiwgY21kOiBhcnRpZmFjdC5wcmVCdWlsZENvbW1hbmQ/LigpIH0sXG4gICAgeyBuYW1lOiBcImJ1aWxkXCIsIGNtZDogYXJ0aWZhY3QuYnVpbGRDb21tYW5kKG9wdGlvbnMuYnVpbGRDb21tYW5kQXJncykgfSxcbiAgICB7IG5hbWU6IFwicG9zdC1idWlsZFwiLCBjbWQ6IGFydGlmYWN0LnBvc3RCdWlsZENvbW1hbmQ/LigpIH0sXG4gIF0uZmlsdGVyKChzdGVwKSA9PiBzdGVwLmNtZCAhPT0gdW5kZWZpbmVkKTtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3RlcHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3Qgc3RlcCA9IHN0ZXBzW2luZGV4XTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA9PT0gc3RlcHMubGVuZ3RoIC0gMTtcbiAgICB0cnkge1xuICAgICAgYXNzZXJ0KHN0ZXAuY21kKTtcbiAgICAgIHByaW50VGFza1N0YXJ0KHN0ZXAubmFtZSwgc3RlcC5jbWQsIGlzTGFzdCk7XG4gICAgICBhd2FpdCAob3B0aW9ucy5leGVjID8/IGV4ZWNXaXRoTGluZVByZWZpeCkoc3RlcC5jbWQsIHsgY3dkOiBvcHRpb25zLmN3ZCB9KTtcbiAgICAgIHByaW50VGFza1N1Y2Nlc3Moc3RlcC5uYW1lLCBpc0xhc3QpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwcmludFRhc2tGYWlsZWQoc3RlcC5uYW1lLCBpc0xhc3QpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3N0ZXAubmFtZX0gZmFpbGVkYCwgeyBjYXVzZTogZXJyb3IgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZEFwaUNvbW1hbmQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGFwaVJvb3RQYXRoID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGJhc2VDb25maWdQYXRoID0gYXdhaXQgcmVzb2x2ZUFwaUJ1aWxkQ29uZmlnUGF0aChhcGlSb290UGF0aCk7XG4gIGNvbnN0IHBvbGljeSA9IGF3YWl0IGxvYWRCdWlsZENvbXBpbGVyUG9saWN5KGFwaVJvb3RQYXRoKTtcbiAgY29uc3QgcmVnaXN0cnlQYXRoID0gcGF0aC5qb2luKGFwaVJvb3RQYXRoLCBIVFRQX1ZBTElEQVRPUl9SRUdJU1RSWV9TT1VSQ0VfUEFUSCk7XG4gIGNvbnN0IGNvbmZpZ0ZpbGVQYXRoID0gYXdhaXQgY3JlYXRlQXBpWm9kQ29tcGlsZXJCdWlsZFdyYXBwZXIoe1xuICAgIGFwaVJvb3RQYXRoLFxuICAgIGJhc2VDb25maWdQYXRoLFxuICAgIHBvbGljeSxcbiAgICByZWdpc3RyeVBhdGgsXG4gIH0pO1xuICBjb25zdCB0ZW1wb3JhcnlDb25maWdQYXRoID0gY29uZmlnRmlsZVBhdGggPT09IGJhc2VDb25maWdQYXRoID8gdW5kZWZpbmVkIDogY29uZmlnRmlsZVBhdGg7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIEFQSV9BUlRJRkFDVFMpIHtcbiAgICAgIHByaW50VGFza0hlYWRlcihhcnRpZmFjdC5uYW1lLCBhcnRpZmFjdC5kZXNjcmlwdGlvbiwgYXBpUm9vdFBhdGgpO1xuICAgICAgYXdhaXQgcnVuQnVpbGRTdGVwcyhhcnRpZmFjdCwge1xuICAgICAgICBjd2Q6IGFwaVJvb3RQYXRoLFxuICAgICAgICBidWlsZENvbW1hbmRBcmdzOiB7IGNvbmZpZ0ZpbGVQYXRoIH0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHBvbGljeS5hcGkgPT09IFwiYW90XCIpIHtcbiAgICAgIGNvbnN0IG91dHB1dFBhdGggPSBwYXRoLmpvaW4oYXBpUm9vdFBhdGgsIEhUVFBfVkFMSURBVE9SX1JFR0lTVFJZX0JVSUxEX1BBVEgpO1xuICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKG91dHB1dFBhdGgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJ1aWx0IEhUVFAgdmFsaWRhdG9yIHJlZ2lzdHJ5IG5vdCBmb3VuZDogJHtvdXRwdXRQYXRofWApO1xuICAgICAgfVxuICAgICAgYXNzZXJ0QXBpWm9kQ29tcGlsZXJCdWlsZE91dHB1dChbXG4gICAgICAgIHsgY29kZTogYXdhaXQgcmVhZEZpbGUob3V0cHV0UGF0aCwgXCJ1dGY4XCIpLCBwYXRoOiBvdXRwdXRQYXRoIH0sXG4gICAgICBdKTtcbiAgICB9XG4gICAgcHJpbnRCdWlsZFN1bW1hcnkoXCJBUElcIiwgdHJ1ZSwgRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcHJpbnRCdWlsZFN1bW1hcnkoXCJBUElcIiwgZmFsc2UsIERhdGUubm93KCkgLSBzdGFydGVkQXQpO1xuICAgIHRocm93IGVycm9yO1xuICB9IGZpbmFsbHkge1xuICAgIGlmICh0ZW1wb3JhcnlDb25maWdQYXRoICE9PSB1bmRlZmluZWQpIGF3YWl0IHJtKHRlbXBvcmFyeUNvbmZpZ1BhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkV2ViQ29tbWFuZCh7XG4gIHNraXBJZk1pc3NpbmcgPSBmYWxzZSxcbiAgZXhlYyA9IGV4ZWNXaXRoTGluZVByZWZpeCxcbn06IHsgc2tpcElmTWlzc2luZz86IGJvb2xlYW47IGV4ZWM/OiB0eXBlb2YgZXhlY1dpdGhMaW5lUHJlZml4IH0gPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhcHBSb290UGF0aCA9IGZpbmRBcHBSb290UGF0aCgpO1xuICBjb25zdCB3ZWJQYXRoID0gcGF0aC5qb2luKGFwcFJvb3RQYXRoLCBcIndlYlwiKTtcbiAgaWYgKCEoYXdhaXQgZXhpc3RzKHdlYlBhdGgpKSkge1xuICAgIGlmIChza2lwSWZNaXNzaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KFwiV2ViIOuUlOugie2GoOumrOqwgCDsl4bsnLzrr4DroZwgV2ViIOu5jOuTnOulvCDqsbTrhIjrnIHri4jri6QuXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGB3ZWIg65SU66CJ7Yag66as66W8IOywvuydhCDsiJgg7JeG7Iq164uI64ukOiAke3dlYlBhdGh9YCk7XG4gIH1cblxuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICB0cnkge1xuICAgIC8vIO2BtOudvOydtOyWuO2KuC9TU1Ig67mM65Oc6rCAIOqwmeydgCDtg4DsnoXssrTtgazrpbwg67CY67O17ZWY7KeAIOyViuuPhOuhnSB2aXRlIOu5jOuTnCDsoITsl5Ag7ZWcIOuyiOunjCDsi6TtlontlZzri6QuXG4gICAgY29uc3QgdHlwZWNoZWNrQ29tbWFuZCA9IGNyZWF0ZVdlYlR5cGVjaGVja0NvbW1hbmQoKTtcbiAgICBwcmludFRhc2tIZWFkZXIoXCJXZWIgVHlwZWNoZWNrXCIsIFwiV2ViIO2UhOuhnOygne2KuCDtg4DsnoUg6rKA7IKsXCIsIHdlYlBhdGgpO1xuICAgIHByaW50VGFza1N0YXJ0KFwidHlwZWNoZWNrXCIsIHR5cGVjaGVja0NvbW1hbmQsIHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKHR5cGVjaGVja0NvbW1hbmQsIHsgY3dkOiB3ZWJQYXRoIH0pO1xuICAgICAgcHJpbnRUYXNrU3VjY2VzcyhcInR5cGVjaGVja1wiLCB0cnVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJpbnRUYXNrRmFpbGVkKFwidHlwZWNoZWNrXCIsIHRydWUpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZWNoZWNrIGZhaWxlZFwiLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIFdFQl9BUlRJRkFDVFMpIHtcbiAgICAgIGNvbnN0IGN3ZCA9IHBhdGguam9pbihhcHBSb290UGF0aCwgYXJ0aWZhY3QucHJvamVjdFBhdGgpO1xuICAgICAgcHJpbnRUYXNrSGVhZGVyKGFydGlmYWN0Lm5hbWUsIGFydGlmYWN0LmRlc2NyaXB0aW9uLCBjd2QpO1xuICAgICAgYXdhaXQgcnVuQnVpbGRTdGVwcyhhcnRpZmFjdCwgeyBjd2QsIGJ1aWxkQ29tbWFuZEFyZ3M6IHt9LCBleGVjIH0pO1xuICAgIH1cbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIldlYlwiLCB0cnVlLCBEYXRlLm5vdygpIC0gc3RhcnRlZEF0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIldlYlwiLCBmYWxzZSwgRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQWdCOEIsa0JBQUE7QUFDWSxjQUFBO0FBQ3VCLFdBQUE7QUFjakUsU0FB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
@@ -3,7 +3,7 @@ import { applyCurrentSnapshotToProcessEnv, init_env } from "../env.js";
3
3
  import { init_config, normalizeZodCompilerPolicy } from "../api/config.js";
4
4
  import { ensureTsLoaderRegistered, init_ts_loader_registration } from "./ts-loader-registration.js";
5
5
  import { pathToFileURL } from "node:url";
6
- //#region src/bin/compiler-policy.ts
6
+ // src/bin/compiler-policy.ts
7
7
  init_config();
8
8
  init_env();
9
9
  init_runtime_value();
@@ -18,7 +18,6 @@ async function loadBuildCompilerPolicy(apiRootPath) {
18
18
  if (!isObjectValue(configured) || configured === null || Array.isArray(configured)) throw new Error("sonamu.config.ts must export a configuration object");
19
19
  return normalizeZodCompilerPolicy(configured.validation?.zodCompiler);
20
20
  }
21
- //#endregion
22
21
  export { loadBuildCompilerPolicy };
23
22
 
24
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXItcG9saWN5LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY29tcGlsZXItcG9saWN5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcblxuaW1wb3J0IHsgbm9ybWFsaXplWm9kQ29tcGlsZXJQb2xpY3ksIHR5cGUgTm9ybWFsaXplZFpvZENvbXBpbGVyUG9saWN5IH0gZnJvbSBcIi4uL2FwaS9jb25maWdcIjtcbmltcG9ydCB7IGFwcGx5Q3VycmVudFNuYXBzaG90VG9Qcm9jZXNzRW52IH0gZnJvbSBcIi4uL2VudlwiO1xuaW1wb3J0IHsgaXNGdW5jdGlvblZhbHVlLCBpc09iamVjdFZhbHVlIH0gZnJvbSBcIi4uL3V0aWxzL3J1bnRpbWUtdmFsdWVcIjtcbmltcG9ydCB7IGVuc3VyZVRzTG9hZGVyUmVnaXN0ZXJlZCB9IGZyb20gXCIuL3RzLWxvYWRlci1yZWdpc3RyYXRpb25cIjtcblxudHlwZSBCdWlsZFNvdXJjZUNvbmZpZyA9IHtcbiAgdmFsaWRhdGlvbj86IHtcbiAgICB6b2RDb21waWxlcj86IHVua25vd247XG4gIH07XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEJ1aWxkQ29tcGlsZXJQb2xpY3koXG4gIGFwaVJvb3RQYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPE5vcm1hbGl6ZWRab2RDb21waWxlclBvbGljeT4ge1xuICBhcHBseUN1cnJlbnRTbmFwc2hvdFRvUHJvY2Vzc0VudihhcGlSb290UGF0aCk7XG4gIGF3YWl0IGVuc3VyZVRzTG9hZGVyUmVnaXN0ZXJlZChhcGlSb290UGF0aCk7XG5cbiAgY29uc3QgY29uZmlnVXJsID0gcGF0aFRvRmlsZVVSTChgJHthcGlSb290UGF0aH0vc3JjL3NvbmFtdS5jb25maWcudHNgKTtcbiAgY29uZmlnVXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJzb25hbXUtYnVpbGRcIiwgYCR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpfWApO1xuICBjb25zdCBpbXBvcnRlZCA9XG4gICAgLyogU0FGRVRZOiBDTEkg7YyM7ISc7JmAIOu5jOuTnCDrj4Tqtawg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChhd2FpdCBpbXBvcnQoXG4gICAgICBjb25maWdVcmwuaHJlZlxuICAgICkpIGFzIHsgZGVmYXVsdDogdW5rbm93biB9O1xuICBjb25zdCBjb25maWd1cmVkID0gaXNGdW5jdGlvblZhbHVlKGltcG9ydGVkLmRlZmF1bHQpXG4gICAgPyBhd2FpdCBQcm9taXNlLnJlc29sdmUoaW1wb3J0ZWQuZGVmYXVsdCgpKVxuICAgIDogYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGltcG9ydGVkLmRlZmF1bHQpO1xuICBpZiAoIWlzT2JqZWN0VmFsdWUoY29uZmlndXJlZCkgfHwgY29uZmlndXJlZCA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KGNvbmZpZ3VyZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic29uYW11LmNvbmZpZy50cyBtdXN0IGV4cG9ydCBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0XCIpO1xuICB9XG5cbiAgY29uc3QgY29uZmlnOiBCdWlsZFNvdXJjZUNvbmZpZyA9IGNvbmZpZ3VyZWQ7XG4gIHJldHVybiBub3JtYWxpemVab2RDb21waWxlclBvbGljeShjb25maWcudmFsaWRhdGlvbj8uem9kQ29tcGlsZXIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7WUFFNEY7U0FDbkM7bUJBQ2M7NEJBQ0o7QUFRbkUsZUFBc0Isd0JBQ3BCLGFBQ3NDO0NBQ3RDLGlDQUFpQyxXQUFXO0NBQzVDLE1BQU0seUJBQXlCLFdBQVc7Q0FFMUMsTUFBTSxZQUFZLGNBQWMsR0FBRyxZQUFZLHNCQUFzQjtDQUNyRSxVQUFVLGFBQWEsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssT0FBTyxHQUFHO0NBQzNFLE1BQU0sV0FDK0MsTUFBTSxPQUN2RCxVQUFVO0NBRWQsTUFBTSxhQUFhLGdCQUFnQixTQUFTLE9BQU8sSUFDL0MsTUFBTSxRQUFRLFFBQVEsU0FBUyxRQUFRLENBQUMsSUFDeEMsTUFBTSxRQUFRLFFBQVEsU0FBUyxPQUFPO0NBQzFDLElBQUksQ0FBQyxjQUFjLFVBQVUsS0FBSyxlQUFlLFFBQVEsTUFBTSxRQUFRLFVBQVUsR0FDL0UsTUFBTSxJQUFJLE1BQU0scURBQXFEO0NBSXZFLE9BQU8sMkJBQTJCLFdBQU8sWUFBWSxXQUFXO0FBQ2xFIn0=
23
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXItcG9saWN5LmpzIiwibmFtZXMiOlsiY29uZmlnIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9jb21waWxlci1wb2xpY3kudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG5pbXBvcnQgeyBub3JtYWxpemVab2RDb21waWxlclBvbGljeSwgdHlwZSBOb3JtYWxpemVkWm9kQ29tcGlsZXJQb2xpY3kgfSBmcm9tIFwiLi4vYXBpL2NvbmZpZ1wiO1xuaW1wb3J0IHsgYXBwbHlDdXJyZW50U25hcHNob3RUb1Byb2Nlc3NFbnYgfSBmcm9tIFwiLi4vZW52XCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uVmFsdWUsIGlzT2JqZWN0VmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgZW5zdXJlVHNMb2FkZXJSZWdpc3RlcmVkIH0gZnJvbSBcIi4vdHMtbG9hZGVyLXJlZ2lzdHJhdGlvblwiO1xuXG50eXBlIEJ1aWxkU291cmNlQ29uZmlnID0ge1xuICB2YWxpZGF0aW9uPzoge1xuICAgIHpvZENvbXBpbGVyPzogdW5rbm93bjtcbiAgfTtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQnVpbGRDb21waWxlclBvbGljeShcbiAgYXBpUm9vdFBhdGg6IHN0cmluZyxcbik6IFByb21pc2U8Tm9ybWFsaXplZFpvZENvbXBpbGVyUG9saWN5PiB7XG4gIGFwcGx5Q3VycmVudFNuYXBzaG90VG9Qcm9jZXNzRW52KGFwaVJvb3RQYXRoKTtcbiAgYXdhaXQgZW5zdXJlVHNMb2FkZXJSZWdpc3RlcmVkKGFwaVJvb3RQYXRoKTtcblxuICBjb25zdCBjb25maWdVcmwgPSBwYXRoVG9GaWxlVVJMKGAke2FwaVJvb3RQYXRofS9zcmMvc29uYW11LmNvbmZpZy50c2ApO1xuICBjb25maWdVcmwuc2VhcmNoUGFyYW1zLnNldChcInNvbmFtdS1idWlsZFwiLCBgJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCl9YCk7XG4gIGNvbnN0IGltcG9ydGVkID1cbiAgICAvKiBTQUZFVFk6IENMSSDtjIzshJzsmYAg67mM65OcIOuPhOq1rCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKGF3YWl0IGltcG9ydChcbiAgICAgIGNvbmZpZ1VybC5ocmVmXG4gICAgKSkgYXMgeyBkZWZhdWx0OiB1bmtub3duIH07XG4gIGNvbnN0IGNvbmZpZ3VyZWQgPSBpc0Z1bmN0aW9uVmFsdWUoaW1wb3J0ZWQuZGVmYXVsdClcbiAgICA/IGF3YWl0IFByb21pc2UucmVzb2x2ZShpbXBvcnRlZC5kZWZhdWx0KCkpXG4gICAgOiBhd2FpdCBQcm9taXNlLnJlc29sdmUoaW1wb3J0ZWQuZGVmYXVsdCk7XG4gIGlmICghaXNPYmplY3RWYWx1ZShjb25maWd1cmVkKSB8fCBjb25maWd1cmVkID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkoY29uZmlndXJlZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJzb25hbXUuY29uZmlnLnRzIG11c3QgZXhwb3J0IGEgY29uZmlndXJhdGlvbiBvYmplY3RcIik7XG4gIH1cblxuICBjb25zdCBjb25maWc6IEJ1aWxkU291cmNlQ29uZmlnID0gY29uZmlndXJlZDtcbiAgcmV0dXJuIG5vcm1hbGl6ZVpvZENvbXBpbGVyUG9saWN5KGNvbmZpZy52YWxpZGF0aW9uPy56b2RDb21waWxlcik7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUU0RixZQUFBO0FBQ25DLFNBQUE7QUFDYyxtQkFBQTtBQUNKLDRCQUFBO0FBUW5FLGVBQXNCLHdCQUNwQixhQUNzQztDQUN0QyxpQ0FBaUMsV0FBVztDQUM1QyxNQUFNLHlCQUF5QixXQUFXO0NBRTFDLE1BQU0sWUFBWSxjQUFjLEdBQUcsWUFBWSxzQkFBc0I7Q0FDckUsVUFBVSxhQUFhLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxJQUFJLEVBQUUsR0FBRyxLQUFLLE9BQU8sR0FBRztDQUMzRSxNQUFNLFdBQytDLE1BQU0sT0FDdkQsVUFBVTtDQUVkLE1BQU0sYUFBYSxnQkFBZ0IsU0FBUyxPQUFPLElBQy9DLE1BQU0sUUFBUSxRQUFRLFNBQVMsUUFBUSxDQUFDLElBQ3hDLE1BQU0sUUFBUSxRQUFRLFNBQVMsT0FBTztDQUMxQyxJQUFJLENBQUMsY0FBYyxVQUFVLEtBQUssZUFBZSxRQUFRLE1BQU0sUUFBUSxVQUFVLEdBQy9FLE1BQU0sSUFBSSxNQUFNLHFEQUFxRDtDQUl2RSxPQUFPLDJCQUEyQkEsV0FBTyxZQUFZLFdBQVc7QUFDbEUifQ==