sonamu 0.10.12 → 0.10.13

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 (513) hide show
  1. package/dist/ai/agents/agent.d.ts +1 -1
  2. package/dist/ai/agents/agent.d.ts.map +1 -1
  3. package/dist/ai/agents/agent.js +5 -6
  4. package/dist/ai/agents/types.d.ts +1 -1
  5. package/dist/ai/agents/types.d.ts.map +1 -1
  6. package/dist/ai/providers/rtzr/api.js +18 -18
  7. package/dist/ai/providers/rtzr/error.d.ts.map +1 -1
  8. package/dist/ai/providers/rtzr/error.js +17 -15
  9. package/dist/ai/providers/rtzr/model.d.ts.map +1 -1
  10. package/dist/ai/providers/rtzr/model.js +3 -2
  11. package/dist/ai/providers/rtzr/options.d.ts.map +1 -1
  12. package/dist/ai/providers/rtzr/options.js +16 -16
  13. package/dist/ai/providers/rtzr/provider.d.ts.map +1 -1
  14. package/dist/ai/providers/rtzr/provider.js +9 -9
  15. package/dist/ai/providers/rtzr/utils.d.ts.map +1 -1
  16. package/dist/ai/providers/rtzr/utils.js +1 -1
  17. package/dist/api/caster.d.ts.map +1 -1
  18. package/dist/api/caster.js +17 -17
  19. package/dist/api/code-converters.d.ts +4 -2
  20. package/dist/api/code-converters.d.ts.map +1 -1
  21. package/dist/api/code-converters.js +100 -19
  22. package/dist/api/config.d.ts +16 -1
  23. package/dist/api/config.d.ts.map +1 -1
  24. package/dist/api/config.js +28 -21
  25. package/dist/api/context.d.ts +2 -2
  26. package/dist/api/context.d.ts.map +1 -1
  27. package/dist/api/context.js +1 -1
  28. package/dist/api/decorators.d.ts.map +1 -1
  29. package/dist/api/decorators.js +18 -11
  30. package/dist/api/http-validator.d.ts +36 -0
  31. package/dist/api/http-validator.d.ts.map +1 -0
  32. package/dist/api/http-validator.js +72 -0
  33. package/dist/api/index.js +6 -4
  34. package/dist/api/sonamu.d.ts +59 -20
  35. package/dist/api/sonamu.d.ts.map +1 -1
  36. package/dist/api/sonamu.js +250 -106
  37. package/dist/api/websocket-helpers.d.ts +7 -5
  38. package/dist/api/websocket-helpers.d.ts.map +1 -1
  39. package/dist/api/websocket-helpers.js +6 -6
  40. package/dist/auth/audit-log/builders.d.ts.map +1 -1
  41. package/dist/auth/audit-log/builders.js +1 -1
  42. package/dist/auth/audit-log/client-ip.d.ts +1 -1
  43. package/dist/auth/audit-log/client-ip.d.ts.map +1 -1
  44. package/dist/auth/audit-log/client-ip.js +4 -2
  45. package/dist/auth/audit-log/events.d.ts +5 -1
  46. package/dist/auth/audit-log/events.d.ts.map +1 -1
  47. package/dist/auth/audit-log/events.js +1 -1
  48. package/dist/auth/audit-log/plugin.d.ts +0 -8
  49. package/dist/auth/audit-log/plugin.d.ts.map +1 -1
  50. package/dist/auth/audit-log/plugin.js +48 -52
  51. package/dist/auth/audit-log-ingestor.d.ts.map +1 -1
  52. package/dist/auth/audit-log-ingestor.js +16 -12
  53. package/dist/auth/auth-generator.d.ts.map +1 -1
  54. package/dist/auth/auth-generator.js +1 -1
  55. package/dist/auth/better-auth-request.d.ts.map +1 -1
  56. package/dist/auth/better-auth-request.js +6 -5
  57. package/dist/auth/knex-adapter.js +1 -1
  58. package/dist/auth/plugins/entity-definitions/index.d.ts +13 -1
  59. package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
  60. package/dist/auth/plugins/entity-definitions/index.js +1 -1
  61. package/dist/auth/plugins/wrappers/admin.d.ts +1 -1
  62. package/dist/bin/build-config.d.ts +25 -0
  63. package/dist/bin/build-config.d.ts.map +1 -1
  64. package/dist/bin/build-config.js +105 -2
  65. package/dist/bin/cli.js +131 -27
  66. package/dist/bin/compiler-policy.d.ts +3 -0
  67. package/dist/bin/compiler-policy.d.ts.map +1 -0
  68. package/dist/bin/compiler-policy.js +24 -0
  69. package/dist/bin/fixture.d.ts.map +1 -1
  70. package/dist/bin/fixture.js +5 -3
  71. package/dist/bin/test-command.d.ts +22 -1
  72. package/dist/bin/test-command.d.ts.map +1 -1
  73. package/dist/bin/test-command.js +18 -10
  74. package/dist/bin/ts-loader-registration.d.ts +7 -1
  75. package/dist/bin/ts-loader-registration.d.ts.map +1 -1
  76. package/dist/bin/ts-loader-registration.js +13 -4
  77. package/dist/cache/decorator.d.ts.map +1 -1
  78. package/dist/cache/decorator.js +11 -4
  79. package/dist/compress/compress.d.ts.map +1 -1
  80. package/dist/compress/compress.js +1 -1
  81. package/dist/cone/cone-generator.d.ts +14 -1
  82. package/dist/cone/cone-generator.d.ts.map +1 -1
  83. package/dist/cone/cone-generator.js +13 -9
  84. package/dist/database/_batch_update.js +1 -1
  85. package/dist/database/base-model.d.ts +22 -10
  86. package/dist/database/base-model.d.ts.map +1 -1
  87. package/dist/database/base-model.js +26 -16
  88. package/dist/database/base-model.types.d.ts +15 -3
  89. package/dist/database/base-model.types.d.ts.map +1 -1
  90. package/dist/database/db.d.ts +12 -2
  91. package/dist/database/db.d.ts.map +1 -1
  92. package/dist/database/db.js +10 -7
  93. package/dist/database/knex.d.ts.map +1 -1
  94. package/dist/database/knex.js +17 -14
  95. package/dist/database/puri.d.ts +11 -9
  96. package/dist/database/puri.d.ts.map +1 -1
  97. package/dist/database/puri.js +93 -79
  98. package/dist/database/puri.types.d.ts +21 -21
  99. package/dist/database/puri.types.d.ts.map +1 -1
  100. package/dist/database/puri.types.js +1 -1
  101. package/dist/database/upsert-builder.d.ts +12 -10
  102. package/dist/database/upsert-builder.d.ts.map +1 -1
  103. package/dist/database/upsert-builder.js +20 -12
  104. package/dist/dict/sd.d.ts.map +1 -1
  105. package/dist/dict/sd.js +1 -1
  106. package/dist/dict/sonamu-dictionary.d.ts.map +1 -1
  107. package/dist/dict/sonamu-dictionary.js +1 -1
  108. package/dist/dict/utils.d.ts.map +1 -1
  109. package/dist/dict/utils.js +7 -2
  110. package/dist/entity/entity-manager.d.ts +13 -4
  111. package/dist/entity/entity-manager.d.ts.map +1 -1
  112. package/dist/entity/entity-manager.js +19 -11
  113. package/dist/entity/entity-template-cone.d.ts +73 -5
  114. package/dist/entity/entity-template-cone.d.ts.map +1 -1
  115. package/dist/entity/entity-template-cone.js +4 -2
  116. package/dist/entity/entity.d.ts +6 -2
  117. package/dist/entity/entity.d.ts.map +1 -1
  118. package/dist/entity/entity.js +30 -28
  119. package/dist/env.d.ts +3 -1
  120. package/dist/env.d.ts.map +1 -1
  121. package/dist/env.js +1 -1
  122. package/dist/exceptions/error-handler.d.ts.map +1 -1
  123. package/dist/exceptions/error-handler.js +7 -2
  124. package/dist/exceptions/so-exceptions.d.ts +24 -20
  125. package/dist/exceptions/so-exceptions.d.ts.map +1 -1
  126. package/dist/exceptions/so-exceptions.js +4 -2
  127. package/dist/filter/utils.d.ts +7 -2
  128. package/dist/filter/utils.d.ts.map +1 -1
  129. package/dist/filter/utils.js +8 -6
  130. package/dist/index.d.ts +3 -0
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +12 -6
  133. package/dist/logger/configure.d.ts.map +1 -1
  134. package/dist/logger/configure.js +10 -10
  135. package/dist/migration/code-generation.d.ts.map +1 -1
  136. package/dist/migration/code-generation.js +50 -46
  137. package/dist/migration/index-where-predicate.d.ts.map +1 -1
  138. package/dist/migration/index-where-predicate.js +22 -8
  139. package/dist/migration/migration-set.d.ts.map +1 -1
  140. package/dist/migration/migration-set.js +1 -1
  141. package/dist/migration/migrator.d.ts +3 -2
  142. package/dist/migration/migrator.d.ts.map +1 -1
  143. package/dist/migration/migrator.js +27 -21
  144. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  145. package/dist/migration/postgresql-schema-reader.js +51 -36
  146. package/dist/migration/slack-confirm.d.ts.map +1 -1
  147. package/dist/migration/slack-confirm.js +1 -1
  148. package/dist/naite/naite-reporter.js +2 -2
  149. package/dist/naite/naite.d.ts +74 -15
  150. package/dist/naite/naite.d.ts.map +1 -1
  151. package/dist/naite/naite.js +5 -19
  152. package/dist/runtime-type.d.ts +6 -0
  153. package/dist/runtime-type.d.ts.map +1 -0
  154. package/dist/runtime-type.js +26 -0
  155. package/dist/ssr/hmr-opt-out.d.ts +26 -0
  156. package/dist/ssr/hmr-opt-out.d.ts.map +1 -0
  157. package/dist/ssr/hmr-opt-out.js +59 -0
  158. package/dist/ssr/renderer.d.ts.map +1 -1
  159. package/dist/ssr/renderer.js +4 -1
  160. package/dist/storage/base-file.js +14 -14
  161. package/dist/storage/buffered-file.d.ts +2 -2
  162. package/dist/storage/buffered-file.d.ts.map +1 -1
  163. package/dist/storage/buffered-file.js +12 -12
  164. package/dist/storage/s3-driver.d.ts.map +1 -1
  165. package/dist/storage/s3-driver.js +1 -1
  166. package/dist/storage/uploaded-file.d.ts +2 -2
  167. package/dist/storage/uploaded-file.d.ts.map +1 -1
  168. package/dist/storage/uploaded-file.js +8 -8
  169. package/dist/stream/sse.js +11 -11
  170. package/dist/stream/ws-core.d.ts +1 -1
  171. package/dist/stream/ws-core.d.ts.map +1 -1
  172. package/dist/stream/ws-delivery.d.ts +1 -1
  173. package/dist/stream/ws-delivery.d.ts.map +1 -1
  174. package/dist/stream/ws-delivery.js +6 -4
  175. package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
  176. package/dist/stream/ws-local-connection-store.js +4 -2
  177. package/dist/stream/ws-presence-store.js +1 -1
  178. package/dist/stream/ws-registry.d.ts +4 -4
  179. package/dist/stream/ws-registry.d.ts.map +1 -1
  180. package/dist/stream/ws-registry.js +4 -2
  181. package/dist/stream/ws-telemetry.d.ts +16 -12
  182. package/dist/stream/ws-telemetry.d.ts.map +1 -1
  183. package/dist/stream/ws-telemetry.js +22 -18
  184. package/dist/stream/ws.d.ts +18 -12
  185. package/dist/stream/ws.d.ts.map +1 -1
  186. package/dist/stream/ws.js +26 -22
  187. package/dist/syncer/api-parser.js +1 -1
  188. package/dist/syncer/checksum.d.ts.map +1 -1
  189. package/dist/syncer/checksum.js +7 -8
  190. package/dist/syncer/code-generator.d.ts.map +1 -1
  191. package/dist/syncer/code-generator.js +13 -14
  192. package/dist/syncer/entity-operations.d.ts.map +1 -1
  193. package/dist/syncer/entity-operations.js +5 -6
  194. package/dist/syncer/file-copy.d.ts +5 -0
  195. package/dist/syncer/file-copy.d.ts.map +1 -0
  196. package/dist/syncer/file-copy.js +36 -0
  197. package/dist/syncer/file-patterns.d.ts +1 -0
  198. package/dist/syncer/file-patterns.d.ts.map +1 -1
  199. package/dist/syncer/file-patterns.js +5 -2
  200. package/dist/syncer/file-tracking.d.ts.map +1 -1
  201. package/dist/syncer/file-tracking.js +5 -4
  202. package/dist/syncer/filesystem-dependencies.d.ts +15 -0
  203. package/dist/syncer/filesystem-dependencies.d.ts.map +1 -0
  204. package/dist/syncer/filesystem-dependencies.js +53 -0
  205. package/dist/syncer/module-loader.d.ts +1 -1
  206. package/dist/syncer/module-loader.d.ts.map +1 -1
  207. package/dist/syncer/module-loader.js +6 -4
  208. package/dist/syncer/syncer-actions.d.ts +4 -0
  209. package/dist/syncer/syncer-actions.d.ts.map +1 -1
  210. package/dist/syncer/syncer-actions.js +34 -17
  211. package/dist/syncer/syncer.d.ts +17 -6
  212. package/dist/syncer/syncer.d.ts.map +1 -1
  213. package/dist/syncer/syncer.js +71 -29
  214. package/dist/syncer/watcher.d.ts.map +1 -1
  215. package/dist/syncer/watcher.js +3 -3
  216. package/dist/tasks/decorator.d.ts +6 -6
  217. package/dist/tasks/decorator.d.ts.map +1 -1
  218. package/dist/tasks/decorator.js +4 -4
  219. package/dist/tasks/step-wrapper.d.ts +6 -4
  220. package/dist/tasks/step-wrapper.d.ts.map +1 -1
  221. package/dist/tasks/step-wrapper.js +5 -5
  222. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  223. package/dist/tasks/workflow-manager.js +13 -7
  224. package/dist/template/entity-converter.d.ts +1 -1
  225. package/dist/template/entity-converter.d.ts.map +1 -1
  226. package/dist/template/entity-converter.js +2 -2
  227. package/dist/template/helpers.d.ts +8 -6
  228. package/dist/template/helpers.d.ts.map +1 -1
  229. package/dist/template/helpers.js +1 -1
  230. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  231. package/dist/template/implementations/generated.template.js +4 -4
  232. package/dist/template/implementations/generated_http.template.d.ts +7 -4
  233. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  234. package/dist/template/implementations/generated_http.template.js +21 -21
  235. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  236. package/dist/template/implementations/generated_sso.template.js +6 -3
  237. package/dist/template/implementations/http_validators.template.d.ts +18 -0
  238. package/dist/template/implementations/http_validators.template.d.ts.map +1 -0
  239. package/dist/template/implementations/http_validators.template.js +127 -0
  240. package/dist/template/implementations/model.template.d.ts.map +1 -1
  241. package/dist/template/implementations/model.template.js +1 -1
  242. package/dist/template/implementations/queries.template.js +1 -1
  243. package/dist/template/implementations/sd.template.d.ts.map +1 -1
  244. package/dist/template/implementations/sd.template.js +79 -39
  245. package/dist/template/implementations/services.template.d.ts.map +1 -1
  246. package/dist/template/implementations/services.template.js +6 -4
  247. package/dist/template/implementations/view_form.template.d.ts +6 -1
  248. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  249. package/dist/template/implementations/view_form.template.js +23 -15
  250. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  251. package/dist/template/implementations/view_list.template.js +11 -6
  252. package/dist/template/template-manager.d.ts.map +1 -1
  253. package/dist/template/template-manager.js +9 -7
  254. package/dist/template/template-types.d.ts +12 -5
  255. package/dist/template/template-types.d.ts.map +1 -1
  256. package/dist/template/template-types.js +1 -1
  257. package/dist/template/template.d.ts +2 -2
  258. package/dist/template/template.d.ts.map +1 -1
  259. package/dist/template/template.js +6 -4
  260. package/dist/template/zod-converter.d.ts +0 -19
  261. package/dist/template/zod-converter.d.ts.map +1 -1
  262. package/dist/template/zod-converter.js +100 -84
  263. package/dist/testing/_relation-graph.d.ts.map +1 -1
  264. package/dist/testing/_relation-graph.js +2 -1
  265. package/dist/testing/bootstrap.d.ts.map +1 -1
  266. package/dist/testing/bootstrap.js +9 -6
  267. package/dist/testing/data-explorer.d.ts +32 -7
  268. package/dist/testing/data-explorer.d.ts.map +1 -1
  269. package/dist/testing/data-explorer.js +77 -31
  270. package/dist/testing/dev-test-routes.d.ts +8 -1
  271. package/dist/testing/dev-test-routes.d.ts.map +1 -1
  272. package/dist/testing/dev-test-routes.js +125 -108
  273. package/dist/testing/dev-vitest-manager.d.ts +54 -8
  274. package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
  275. package/dist/testing/dev-vitest-manager.js +24 -9
  276. package/dist/testing/faker-mappings.d.ts +412 -1
  277. package/dist/testing/faker-mappings.d.ts.map +1 -1
  278. package/dist/testing/faker-mappings.js +1 -1
  279. package/dist/testing/filesystem.d.ts +2 -0
  280. package/dist/testing/filesystem.d.ts.map +1 -0
  281. package/dist/testing/filesystem.js +7 -0
  282. package/dist/testing/fixture-generator.d.ts +25 -8
  283. package/dist/testing/fixture-generator.d.ts.map +1 -1
  284. package/dist/testing/fixture-generator.js +132 -73
  285. package/dist/testing/fixture-loader.d.ts +3 -1
  286. package/dist/testing/fixture-loader.d.ts.map +1 -1
  287. package/dist/testing/fixture-loader.js +1 -20
  288. package/dist/testing/fixture-manager.d.ts +8 -7
  289. package/dist/testing/fixture-manager.d.ts.map +1 -1
  290. package/dist/testing/fixture-manager.js +91 -59
  291. package/dist/testing/global-setup.d.ts.map +1 -1
  292. package/dist/testing/global-setup.js +5 -2
  293. package/dist/testing/index.d.ts +2 -0
  294. package/dist/testing/index.d.ts.map +1 -1
  295. package/dist/testing/index.js +6 -3
  296. package/dist/types/types.d.ts +101 -99
  297. package/dist/types/types.d.ts.map +1 -1
  298. package/dist/types/types.js +234 -225
  299. package/dist/ui/ai-api.d.ts.map +1 -1
  300. package/dist/ui/ai-api.js +1 -1
  301. package/dist/ui/ai-client.d.ts.map +1 -1
  302. package/dist/ui/ai-client.js +28 -18
  303. package/dist/ui/api.d.ts.map +1 -1
  304. package/dist/ui/api.js +135 -128
  305. package/dist/ui/async-route.d.ts +3 -0
  306. package/dist/ui/async-route.d.ts.map +1 -0
  307. package/dist/ui/async-route.js +12 -0
  308. package/dist/ui/cdd-service.d.ts +9 -7
  309. package/dist/ui/cdd-service.d.ts.map +1 -1
  310. package/dist/ui/cdd-service.js +7 -5
  311. package/dist/ui/migrations-api.d.ts.map +1 -1
  312. package/dist/ui/migrations-api.js +17 -15
  313. package/dist/ui-web/assets/index-DV1AAq6W.js +178 -0
  314. package/dist/ui-web/index.html +1 -1
  315. package/dist/utils/formatter.d.ts.map +1 -1
  316. package/dist/utils/formatter.js +7 -5
  317. package/dist/utils/fs-utils.d.ts +3 -3
  318. package/dist/utils/fs-utils.d.ts.map +1 -1
  319. package/dist/utils/fs-utils.js +6 -6
  320. package/dist/utils/model.d.ts +3 -5
  321. package/dist/utils/model.d.ts.map +1 -1
  322. package/dist/utils/model.js +1 -1
  323. package/dist/utils/object-utils.d.ts +1 -1
  324. package/dist/utils/object-utils.d.ts.map +1 -1
  325. package/dist/utils/object-utils.js +17 -16
  326. package/dist/utils/process-utils.d.ts.map +1 -1
  327. package/dist/utils/process-utils.js +4 -2
  328. package/dist/utils/runtime-value.d.ts +13 -0
  329. package/dist/utils/runtime-value.d.ts.map +1 -0
  330. package/dist/utils/runtime-value.js +40 -0
  331. package/dist/utils/sql-parser.d.ts +8 -1
  332. package/dist/utils/sql-parser.d.ts.map +1 -1
  333. package/dist/utils/sql-parser.js +6 -3
  334. package/dist/utils/type-utils.d.ts.map +1 -1
  335. package/dist/utils/type-utils.js +10 -8
  336. package/dist/utils/utils.d.ts +2 -2
  337. package/dist/utils/utils.d.ts.map +1 -1
  338. package/dist/utils/utils.js +11 -8
  339. package/dist/utils/zod-error.d.ts.map +1 -1
  340. package/dist/utils/zod-error.js +7 -4
  341. package/dist/vector/chunking.d.ts.map +1 -1
  342. package/dist/vector/chunking.js +1 -1
  343. package/dist/vector/embedding.d.ts.map +1 -1
  344. package/dist/vector/embedding.js +1 -1
  345. package/dist/vector/types.d.ts +3 -2
  346. package/dist/vector/types.d.ts.map +1 -1
  347. package/package.json +5 -3
  348. package/src/ai/agents/agent.ts +5 -5
  349. package/src/ai/agents/types.ts +1 -1
  350. package/src/ai/providers/rtzr/__tests__/model.test.ts +2 -2
  351. package/src/ai/providers/rtzr/error.ts +5 -3
  352. package/src/ai/providers/rtzr/model.ts +3 -2
  353. package/src/ai/providers/rtzr/options.ts +10 -5
  354. package/src/ai/providers/rtzr/provider.ts +10 -10
  355. package/src/ai/providers/rtzr/utils.ts +3 -1
  356. package/src/api/__tests__/config.test.ts +11 -21
  357. package/src/api/__tests__/sonamu.http-validator.test.ts +512 -0
  358. package/src/api/__tests__/sonamu.websocket.test.ts +51 -41
  359. package/src/api/__tests__/zod-compiler-policy.test.ts +95 -0
  360. package/src/api/caster.ts +6 -8
  361. package/src/api/code-converters.ts +136 -36
  362. package/src/api/config.ts +62 -4
  363. package/src/api/context.ts +3 -3
  364. package/src/api/decorators.ts +28 -17
  365. package/src/api/http-validator.ts +149 -0
  366. package/src/api/sonamu.ts +459 -152
  367. package/src/api/websocket-helpers.ts +24 -17
  368. package/src/auth/audit-log/builders.ts +3 -2
  369. package/src/auth/audit-log/client-ip.ts +4 -2
  370. package/src/auth/audit-log/events.ts +15 -1
  371. package/src/auth/audit-log/plugin.ts +129 -200
  372. package/src/auth/audit-log-ingestor.ts +19 -15
  373. package/src/auth/auth-generator.ts +10 -5
  374. package/src/auth/better-auth-request.ts +4 -3
  375. package/src/auth/knex-adapter.ts +8 -2
  376. package/src/auth/plugins/entity-definitions/index.ts +6 -5
  377. package/src/bin/__tests__/http-validator-benchmark.test.ts +94 -0
  378. package/src/bin/__tests__/test-command.test.ts +9 -15
  379. package/src/bin/__tests__/ts-loader-register.test.ts +15 -17
  380. package/src/bin/__tests__/zod-compiler-build.test.ts +307 -0
  381. package/src/bin/build-config.ts +167 -0
  382. package/src/bin/cli.ts +153 -36
  383. package/src/bin/compiler-policy.ts +35 -0
  384. package/src/bin/fixture.ts +14 -3
  385. package/src/bin/test-command.ts +74 -29
  386. package/src/bin/ts-loader-registration.ts +22 -4
  387. package/src/cache/decorator.ts +10 -3
  388. package/src/compress/compress.ts +17 -4
  389. package/src/cone/cone-generator.ts +34 -6
  390. package/src/database/__tests__/db.test.ts +1 -0
  391. package/src/database/__tests__/puri.test.ts +16 -15
  392. package/src/database/__tests__/transaction-scope.test.ts +5 -0
  393. package/src/database/_batch_update.ts +1 -0
  394. package/src/database/base-model.ts +81 -50
  395. package/src/database/base-model.types.ts +6 -6
  396. package/src/database/db.ts +29 -19
  397. package/src/database/knex.ts +30 -17
  398. package/src/database/puri-subset.test-d.ts +17 -0
  399. package/src/database/puri.ts +181 -143
  400. package/src/database/puri.types.test-d.ts +31 -1
  401. package/src/database/puri.types.ts +23 -21
  402. package/src/database/upsert-builder.ts +75 -53
  403. package/src/dict/sd.ts +15 -5
  404. package/src/dict/sonamu-dictionary.ts +6 -6
  405. package/src/dict/utils.ts +9 -1
  406. package/src/entity/entity-manager.ts +26 -9
  407. package/src/entity/entity-template-cone.ts +5 -10
  408. package/src/entity/entity.ts +50 -34
  409. package/src/env.ts +7 -3
  410. package/src/exceptions/error-handler.ts +17 -2
  411. package/src/exceptions/so-exceptions.ts +26 -20
  412. package/src/filter/utils.ts +21 -11
  413. package/src/index.ts +3 -0
  414. package/src/logger/configure.ts +26 -18
  415. package/src/migration/__tests__/migrator.test.ts +50 -57
  416. package/src/migration/code-generation.ts +132 -104
  417. package/src/migration/index-where-predicate.ts +51 -24
  418. package/src/migration/migration-set.ts +11 -5
  419. package/src/migration/migrator.ts +68 -41
  420. package/src/migration/postgresql-schema-reader.ts +52 -47
  421. package/src/migration/slack-confirm.ts +17 -15
  422. package/src/naite/naite-reporter.ts +1 -1
  423. package/src/naite/naite.ts +97 -24
  424. package/src/runtime-type.ts +34 -0
  425. package/src/ssr/hmr-opt-out.ts +78 -0
  426. package/src/ssr/renderer.ts +6 -0
  427. package/src/storage/base-file.ts +13 -13
  428. package/src/storage/buffered-file.ts +11 -11
  429. package/src/storage/s3-driver.ts +4 -1
  430. package/src/storage/uploaded-file.ts +8 -8
  431. package/src/stream/__tests__/ws-contracts.test.ts +4 -2
  432. package/src/stream/__tests__/ws-telemetry.test.ts +1 -1
  433. package/src/stream/__tests__/ws.test.ts +30 -6
  434. package/src/stream/sse.ts +12 -11
  435. package/src/stream/ws-core.ts +1 -1
  436. package/src/stream/ws-delivery.ts +16 -7
  437. package/src/stream/ws-local-connection-store.ts +2 -3
  438. package/src/stream/ws-presence-store.ts +6 -1
  439. package/src/stream/ws-registry.ts +16 -7
  440. package/src/stream/ws-telemetry.ts +66 -43
  441. package/src/stream/ws.ts +73 -39
  442. package/src/syncer/__tests__/api-parser.websocket-type-ref.test.ts +3 -2
  443. package/src/syncer/__tests__/http-validator-registry.test.ts +137 -0
  444. package/src/syncer/api-parser.ts +67 -27
  445. package/src/syncer/checksum.ts +17 -11
  446. package/src/syncer/code-generator.ts +25 -17
  447. package/src/syncer/entity-operations.ts +3 -5
  448. package/src/syncer/file-copy.ts +46 -0
  449. package/src/syncer/file-patterns.ts +11 -8
  450. package/src/syncer/file-tracking.ts +3 -4
  451. package/src/syncer/filesystem-dependencies.ts +73 -0
  452. package/src/syncer/module-loader.ts +8 -4
  453. package/src/syncer/syncer-actions.ts +56 -18
  454. package/src/syncer/syncer.ts +116 -43
  455. package/src/syncer/watcher.ts +8 -4
  456. package/src/tasks/decorator.ts +20 -12
  457. package/src/tasks/step-wrapper.ts +19 -9
  458. package/src/tasks/workflow-manager.ts +15 -9
  459. package/src/template/__tests__/http_validators.template.test.ts +160 -0
  460. package/src/template/__tests__/services.template.mutation.test.ts +24 -23
  461. package/src/template/__tests__/services.template.websocket.test.ts +21 -25
  462. package/src/template/entity-converter.ts +5 -2
  463. package/src/template/helpers.ts +8 -9
  464. package/src/template/implementations/generated.template.ts +5 -4
  465. package/src/template/implementations/generated_http.template.ts +61 -15
  466. package/src/template/implementations/generated_sso.template.ts +15 -4
  467. package/src/template/implementations/http_validators.template.ts +175 -0
  468. package/src/template/implementations/model.template.ts +3 -1
  469. package/src/template/implementations/sd.template.ts +81 -41
  470. package/src/template/implementations/services.template.ts +2 -2
  471. package/src/template/implementations/view_form.template.ts +56 -39
  472. package/src/template/implementations/view_list.template.ts +31 -23
  473. package/src/template/template-manager.ts +15 -13
  474. package/src/template/template-types.ts +13 -5
  475. package/src/template/template.ts +4 -3
  476. package/src/template/zod-converter.ts +206 -91
  477. package/src/testing/__tests__/dev-test-routes.test.ts +85 -25
  478. package/src/testing/__tests__/dev-vitest-manager.test.ts +15 -15
  479. package/src/testing/_relation-graph.ts +4 -1
  480. package/src/testing/bootstrap.ts +12 -5
  481. package/src/testing/data-explorer.ts +102 -53
  482. package/src/testing/dev-test-routes.ts +87 -50
  483. package/src/testing/dev-vitest-manager.ts +88 -32
  484. package/src/testing/faker-mappings.ts +2 -2
  485. package/src/testing/filesystem.ts +1 -0
  486. package/src/testing/fixture-generator.ts +191 -131
  487. package/src/testing/fixture-loader.ts +5 -1
  488. package/src/testing/fixture-manager.ts +129 -90
  489. package/src/testing/global-setup.ts +7 -3
  490. package/src/testing/index.ts +5 -0
  491. package/src/types/__tests__/entity-json-schema-search-text.test.ts +9 -3
  492. package/src/types/types.ts +184 -158
  493. package/src/ui/ai-api.ts +9 -7
  494. package/src/ui/ai-client.ts +61 -56
  495. package/src/ui/api.ts +727 -616
  496. package/src/ui/async-route.ts +4 -0
  497. package/src/ui/cdd-service.ts +35 -12
  498. package/src/ui/migrations-api.ts +63 -51
  499. package/src/utils/formatter.ts +7 -3
  500. package/src/utils/fs-utils.ts +5 -5
  501. package/src/utils/model.ts +4 -5
  502. package/src/utils/object-utils.ts +32 -22
  503. package/src/utils/process-utils.ts +4 -1
  504. package/src/utils/runtime-value.ts +43 -0
  505. package/src/utils/sql-parser.ts +13 -6
  506. package/src/utils/type-utils.ts +9 -7
  507. package/src/utils/utils.ts +19 -21
  508. package/src/utils/zod-error.ts +4 -2
  509. package/src/vector/chunking.ts +6 -1
  510. package/src/vector/embedding.ts +2 -1
  511. package/src/vector/types.ts +4 -2
  512. package/tsdown.api.config.ts +5 -2
  513. package/dist/ui-web/assets/index-C0m1pk6K.js +0 -177
@@ -1,12 +1,13 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
- import { z as z$1 } from "zod";
2
+ import { init_runtime_value, isObjectValue, isStringValue } from "../utils/runtime-value.js";
3
+ import { z } from "zod";
3
4
  import assert from "assert";
4
5
  //#region src/api/caster.ts
5
6
  function isNumberType(zodType) {
6
- return zodType instanceof z$1.ZodNumber;
7
+ return zodType instanceof z.ZodNumber;
7
8
  }
8
9
  function isNullOrOptional(zodType) {
9
- return zodType instanceof z$1.ZodNullable || zodType instanceof z$1.ZodOptional;
10
+ return zodType instanceof z.ZodNullable || zodType instanceof z.ZodOptional;
10
11
  }
11
12
  function isZodNumberAnyway(zodType) {
12
13
  if (isNumberType(zodType)) return true;
@@ -14,31 +15,30 @@ function isZodNumberAnyway(zodType) {
14
15
  return false;
15
16
  }
16
17
  function caster(zodType, raw) {
17
- if (isZodNumberAnyway(zodType) && typeof raw === "string") return Number(raw);
18
- else if (zodType instanceof z$1.ZodUnion && zodType.options.some((opt) => isZodNumberAnyway(opt))) if (Array.isArray(raw)) {
18
+ if (isZodNumberAnyway(zodType) && isStringValue(raw)) return Number(raw);
19
+ else if (zodType instanceof z.ZodUnion && zodType.options.some((opt) => isZodNumberAnyway(opt))) if (Array.isArray(raw)) {
19
20
  const numType = zodType.options.find((opt) => isNumberType(opt));
20
21
  assert(numType !== void 0);
21
22
  return raw.map((elem) => caster(numType, elem));
22
23
  } else return Number(raw);
23
- else if (zodType instanceof z$1.ZodBoolean && (raw === "true" || raw === "false")) return raw === "true";
24
- else if (raw !== null && Array.isArray(raw) && zodType instanceof z$1.ZodArray) return raw.map((elem) => caster(zodType.element, elem));
25
- else if (zodType instanceof z$1.ZodObject && typeof raw === "object" && raw !== null) return Object.keys(raw).reduce((r, rawKey) => {
26
- r[rawKey] = caster(zodType.shape[rawKey], raw[rawKey]);
27
- return r;
28
- }, {});
29
- else if (zodType instanceof z$1.ZodOptional) return caster(zodType.def.innerType, raw);
30
- else if (zodType instanceof z$1.ZodNullable) return caster(zodType.def.innerType, raw);
31
- else if (zodType instanceof z$1.ZodDate && raw !== null && raw !== void 0 && new Date(raw).toString() !== "Invalid Date") return new Date(raw);
24
+ else if (zodType instanceof z.ZodBoolean && (raw === "true" || raw === "false")) return raw === "true";
25
+ else if (raw !== null && Array.isArray(raw) && zodType instanceof z.ZodArray) return raw.map((elem) => caster(zodType.element, elem));
26
+ else if (zodType instanceof z.ZodObject && isObjectValue(raw) && raw !== null) return Object.fromEntries(Object.keys(raw).map((rawKey) => [rawKey, caster(zodType["shape"][rawKey], raw[rawKey])]));
27
+ else if (zodType instanceof z.ZodOptional) return caster(zodType.def.innerType, raw);
28
+ else if (zodType instanceof z.ZodNullable) return caster(zodType.def.innerType, raw);
29
+ else if (zodType instanceof z.ZodDate && raw !== null && raw !== void 0 && new Date(raw).toString() !== "Invalid Date") return new Date(raw);
32
30
  else return raw;
33
31
  }
34
32
  function fastifyCaster(schema) {
35
- return z$1.preprocess((raw) => {
33
+ return z.preprocess((raw) => {
36
34
  return caster(schema, raw);
37
35
  }, schema);
38
36
  }
39
- var init_caster = __esmMin((() => {}));
37
+ var init_caster = __esmMin((() => {
38
+ init_runtime_value();
39
+ }));
40
40
  //#endregion
41
41
  init_caster();
42
42
  export { caster, fastifyCaster, init_caster };
43
43
 
44
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzdGVyLmpzIiwibmFtZXMiOlsieiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY2FzdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgdHlwZSAkWm9kVHlwZSB9IGZyb20gXCJ6b2QvdjQvY29yZVwiO1xuXG5mdW5jdGlvbiBpc051bWJlclR5cGUoem9kVHlwZTogJFpvZFR5cGUpOiB6b2RUeXBlIGlzIHouWm9kTnVtYmVyIHtcbiAgcmV0dXJuIHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlcjtcbn1cblxuZnVuY3Rpb24gaXNOdWxsT3JPcHRpb25hbCh6b2RUeXBlOiAkWm9kVHlwZSk6IHpvZFR5cGUgaXMgei5ab2ROdWxsYWJsZSB8IHouWm9kT3B0aW9uYWwge1xuICByZXR1cm4gem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVsbGFibGUgfHwgem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT3B0aW9uYWw7XG59XG5cbi8vIG9wdGlvbmFsLCBudWxsYWJsZSDrrLTqtIDtlZjqsowgWm9kTnVtYmVyIOyytO2BrFxuZnVuY3Rpb24gaXNab2ROdW1iZXJBbnl3YXkoem9kVHlwZTogJFpvZFR5cGUpIHtcbiAgaWYgKGlzTnVtYmVyVHlwZSh6b2RUeXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gWm9kTnVsbGFibGUg65iQ64qUIFpvZE9wdGlvbmFs7J28IOuVjFxuICBpZiAoaXNOdWxsT3JPcHRpb25hbCh6b2RUeXBlKSAmJiBpc051bWJlclR5cGUoem9kVHlwZS5kZWYuaW5uZXJUeXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBab2RUeXBl7J2EIOydtOyaqe2VtCByYXfrpbwgVHlwZSBDb2VyY2luZ1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g7LqQ7Iqk7YyF7JeQ64qUIGFueeqwgCDtlYTsmpTtlaguXG5leHBvcnQgZnVuY3Rpb24gY2FzdGVyKHpvZFR5cGU6ICRab2RUeXBlLCByYXc6IGFueSk6IGFueSB7XG4gIGlmIChpc1pvZE51bWJlckFueXdheSh6b2RUeXBlKSAmJiB0eXBlb2YgcmF3ID09PSBcInN0cmluZ1wiKSB7XG4gICAgLy8gbnVtYmVyXG4gICAgcmV0dXJuIE51bWJlcihyYXcpO1xuICB9IGVsc2UgaWYgKFxuICAgIHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uICYmXG4gICAgem9kVHlwZS5vcHRpb25zLnNvbWUoKG9wdCkgPT4gaXNab2ROdW1iZXJBbnl3YXkob3B0KSlcbiAgKSB7XG4gICAgLy8gekFycmF5YWJsZSBOdW1iZXIg7LyA7J207IqkIOyymOumrFxuICAgIGlmIChBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICAgIGNvbnN0IG51bVR5cGUgPSB6b2RUeXBlLm9wdGlvbnMuZmluZCgob3B0KSA9PiBpc051bWJlclR5cGUob3B0KSk7XG4gICAgICBhc3NlcnQobnVtVHlwZSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOy6kOyKpO2MheyXkOuKlCBhbnnqsIAg7ZWE7JqU7ZWoLlxuICAgICAgcmV0dXJuIHJhdy5tYXAoKGVsZW06IGFueSkgPT4gY2FzdGVyKG51bVR5cGUsIGVsZW0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE51bWJlcihyYXcpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuICYmIChyYXcgPT09IFwidHJ1ZVwiIHx8IHJhdyA9PT0gXCJmYWxzZVwiKSkge1xuICAgIC8vIGJvb2xlYW5cbiAgICByZXR1cm4gcmF3ID09PSBcInRydWVcIjtcbiAgfSBlbHNlIGlmIChyYXcgIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShyYXcpICYmIHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgLy8gYXJyYXlcbiAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDsupDsiqTtjIXsl5DripQgYW556rCAIO2VhOyalO2VqC5cbiAgICByZXR1cm4gcmF3Lm1hcCgoZWxlbTogYW55KSA9PiBjYXN0ZXIoem9kVHlwZS5lbGVtZW50LCBlbGVtKSk7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0ICYmIHR5cGVvZiByYXcgPT09IFwib2JqZWN0XCIgJiYgcmF3ICE9PSBudWxsKSB7XG4gICAgLy8gb2JqZWN0XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHJhdykucmVkdWNlKFxuICAgICAgKHIsIHJhd0tleSkgPT4ge1xuICAgICAgICByW3Jhd0tleV0gPSBjYXN0ZXIoem9kVHlwZS5zaGFwZVtyYXdLZXldLCByYXdbcmF3S2V5XSk7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICk7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT3B0aW9uYWwpIHtcbiAgICAvLyBvcHRpb25hbFxuICAgIHJldHVybiBjYXN0ZXIoem9kVHlwZS5kZWYuaW5uZXJUeXBlLCByYXcpO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlKSB7XG4gICAgLy8gbnVsbGFibGVcbiAgICByZXR1cm4gY2FzdGVyKHpvZFR5cGUuZGVmLmlubmVyVHlwZSwgcmF3KTtcbiAgfSBlbHNlIGlmIChcbiAgICB6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2REYXRlICYmXG4gICAgcmF3ICE9PSBudWxsICYmXG4gICAgcmF3ICE9PSB1bmRlZmluZWQgJiZcbiAgICBuZXcgRGF0ZShyYXcpLnRvU3RyaW5nKCkgIT09IFwiSW52YWxpZCBEYXRlXCJcbiAgKSB7XG4gICAgLy8gZGF0ZVxuICAgIHJldHVybiBuZXcgRGF0ZShyYXcpO1xuICB9IGVsc2Uge1xuICAgIC8vIOuCmOuouOyngOuKlCDsspjrpqwg7JWI7ZWoXG4gICAgcmV0dXJuIHJhdztcbiAgfVxufVxuXG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDsupDsiqTtjIXsl5DripQgYW556rCAIO2VhOyalO2VqC5cbmV4cG9ydCBmdW5jdGlvbiBmYXN0aWZ5Q2FzdGVyKHNjaGVtYTogei5ab2RPYmplY3Q8YW55Pikge1xuICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDsupDsiqTtjIXsl5DripQgYW556rCAIO2VhOyalO2VqC5cbiAgcmV0dXJuIHoucHJlcHJvY2VzcygocmF3OiBhbnkpID0+IHtcbiAgICByZXR1cm4gY2FzdGVyKHNjaGVtYSwgcmF3KTtcbiAgfSwgc2NoZW1hKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUtBLFNBQVMsYUFBYSxTQUEyQztDQUMvRCxPQUFPLG1CQUFtQkEsSUFBRTtBQUM5QjtBQUVBLFNBQVMsaUJBQWlCLFNBQTZEO0NBQ3JGLE9BQU8sbUJBQW1CQSxJQUFFLGVBQWUsbUJBQW1CQSxJQUFFO0FBQ2xFO0FBR0EsU0FBUyxrQkFBa0IsU0FBbUI7Q0FDNUMsSUFBSSxhQUFhLE9BQU8sR0FDdEIsT0FBTztDQUlULElBQUksaUJBQWlCLE9BQU8sS0FBSyxhQUFhLFFBQVEsSUFBSSxTQUFTLEdBQ2pFLE9BQU87Q0FHVCxPQUFPO0FBQ1Q7QUFJQSxTQUFnQixPQUFPLFNBQW1CLEtBQWU7Q0FDdkQsSUFBSSxrQkFBa0IsT0FBTyxLQUFLLE9BQU8sUUFBUSxVQUUvQyxPQUFPLE9BQU8sR0FBRztNQUNaLElBQ0wsbUJBQW1CQSxJQUFFLFlBQ3JCLFFBQVEsUUFBUSxNQUFNLFFBQVEsa0JBQWtCLEdBQUcsQ0FBQyxHQUdwRCxJQUFJLE1BQU0sUUFBUSxHQUFHLEdBQUc7RUFDdEIsTUFBTSxVQUFVLFFBQVEsUUFBUSxNQUFNLFFBQVEsYUFBYSxHQUFHLENBQUM7RUFDL0QsT0FBTyxZQUFZLE1BQVM7RUFFNUIsT0FBTyxJQUFJLEtBQUssU0FBYyxPQUFPLFNBQVMsSUFBSSxDQUFDO0NBQ3JELE9BQ0UsT0FBTyxPQUFPLEdBQUc7TUFFZCxJQUFJLG1CQUFtQkEsSUFBRSxlQUFlLFFBQVEsVUFBVSxRQUFRLFVBRXZFLE9BQU8sUUFBUTtNQUNWLElBQUksUUFBUSxRQUFRLE1BQU0sUUFBUSxHQUFHLEtBQUssbUJBQW1CQSxJQUFFLFVBR3BFLE9BQU8sSUFBSSxLQUFLLFNBQWMsT0FBTyxRQUFRLFNBQVMsSUFBSSxDQUFDO01BQ3RELElBQUksbUJBQW1CQSxJQUFFLGFBQWEsT0FBTyxRQUFRLFlBQVksUUFBUSxNQUU5RSxPQUFPLE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQyxRQUNyQixHQUFHLFdBQVc7RUFDYixFQUFFLFVBQVUsT0FBTyxRQUFRLE1BQU0sU0FBUyxJQUFJLE9BQU87RUFDckQsT0FBTztDQUNULEdBQ0EsQ0FBQyxDQUNIO01BQ0ssSUFBSSxtQkFBbUJBLElBQUUsYUFFOUIsT0FBTyxPQUFPLFFBQVEsSUFBSSxXQUFXLEdBQUc7TUFDbkMsSUFBSSxtQkFBbUJBLElBQUUsYUFFOUIsT0FBTyxPQUFPLFFBQVEsSUFBSSxXQUFXLEdBQUc7TUFDbkMsSUFDTCxtQkFBbUJBLElBQUUsV0FDckIsUUFBUSxRQUNSLFFBQVEsVUFDUixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxNQUFNLGdCQUc3QixPQUFPLElBQUksS0FBSyxHQUFHO01BR25CLE9BQU87QUFFWDtBQUdBLFNBQWdCLGNBQWMsUUFBMEI7Q0FFdEQsT0FBT0EsSUFBRSxZQUFZLFFBQWE7RUFDaEMsT0FBTyxPQUFPLFFBQVEsR0FBRztDQUMzQixHQUFHLE1BQU07QUFDWCJ9
44
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzdGVyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY2FzdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgdHlwZSAkWm9kVHlwZSB9IGZyb20gXCJ6b2QvdjQvY29yZVwiO1xuXG5pbXBvcnQgeyBpc09iamVjdFZhbHVlLCBpc1N0cmluZ1ZhbHVlIH0gZnJvbSBcIi4uL3V0aWxzL3J1bnRpbWUtdmFsdWVcIjtcblxuZnVuY3Rpb24gaXNOdW1iZXJUeXBlKHpvZFR5cGU6ICRab2RUeXBlKTogem9kVHlwZSBpcyB6LlpvZE51bWJlciB7XG4gIHJldHVybiB6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXI7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbE9yT3B0aW9uYWwoem9kVHlwZTogJFpvZFR5cGUpOiB6b2RUeXBlIGlzIHouWm9kTnVsbGFibGUgfCB6LlpvZE9wdGlvbmFsIHtcbiAgcmV0dXJuIHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlIHx8IHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9wdGlvbmFsO1xufVxuXG4vLyBvcHRpb25hbCwgbnVsbGFibGUg66y06rSA7ZWY6rKMIFpvZE51bWJlciDssrTtgaxcbmZ1bmN0aW9uIGlzWm9kTnVtYmVyQW55d2F5KHpvZFR5cGU6ICRab2RUeXBlKSB7XG4gIGlmIChpc051bWJlclR5cGUoem9kVHlwZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIFpvZE51bGxhYmxlIOuYkOuKlCBab2RPcHRpb25hbOydvCDrlYxcbiAgaWYgKGlzTnVsbE9yT3B0aW9uYWwoem9kVHlwZSkgJiYgaXNOdW1iZXJUeXBlKHpvZFR5cGUuZGVmLmlubmVyVHlwZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gWm9kVHlwZeydhCDsnbTsmqntlbQgcmF366W8IFR5cGUgQ29lcmNpbmdcbi8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOy6kOyKpO2MheyXkOuKlCBhbnnqsIAg7ZWE7JqU7ZWoLlxuZXhwb3J0IGZ1bmN0aW9uIGNhc3Rlcih6b2RUeXBlOiAkWm9kVHlwZSwgcmF3OiBhbnkpOiBhbnkge1xuICBpZiAoaXNab2ROdW1iZXJBbnl3YXkoem9kVHlwZSkgJiYgaXNTdHJpbmdWYWx1ZShyYXcpKSB7XG4gICAgLy8gbnVtYmVyXG4gICAgcmV0dXJuIE51bWJlcihyYXcpO1xuICB9IGVsc2UgaWYgKFxuICAgIHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uICYmXG4gICAgem9kVHlwZS5vcHRpb25zLnNvbWUoKG9wdCkgPT4gaXNab2ROdW1iZXJBbnl3YXkob3B0KSlcbiAgKSB7XG4gICAgLy8gekFycmF5YWJsZSBOdW1iZXIg7LyA7J207IqkIOyymOumrFxuICAgIGlmIChBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICAgIGNvbnN0IG51bVR5cGUgPSB6b2RUeXBlLm9wdGlvbnMuZmluZCgob3B0KSA9PiBpc051bWJlclR5cGUob3B0KSk7XG4gICAgICBhc3NlcnQobnVtVHlwZSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOy6kOyKpO2MheyXkOuKlCBhbnnqsIAg7ZWE7JqU7ZWoLlxuICAgICAgcmV0dXJuIHJhdy5tYXAoKGVsZW06IGFueSkgPT4gY2FzdGVyKG51bVR5cGUsIGVsZW0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE51bWJlcihyYXcpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuICYmIChyYXcgPT09IFwidHJ1ZVwiIHx8IHJhdyA9PT0gXCJmYWxzZVwiKSkge1xuICAgIC8vIGJvb2xlYW5cbiAgICByZXR1cm4gcmF3ID09PSBcInRydWVcIjtcbiAgfSBlbHNlIGlmIChyYXcgIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShyYXcpICYmIHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgLy8gYXJyYXlcbiAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDsupDsiqTtjIXsl5DripQgYW556rCAIO2VhOyalO2VqC5cbiAgICByZXR1cm4gcmF3Lm1hcCgoZWxlbTogYW55KSA9PiBjYXN0ZXIoem9kVHlwZS5lbGVtZW50LCBlbGVtKSk7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0ICYmIGlzT2JqZWN0VmFsdWUocmF3KSAmJiByYXcgIT09IG51bGwpIHtcbiAgICAvLyBvYmplY3RcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmtleXMocmF3KS5tYXAoKHJhd0tleSkgPT4gW3Jhd0tleSwgY2FzdGVyKHpvZFR5cGVbXCJzaGFwZVwiXVtyYXdLZXldLCByYXdbcmF3S2V5XSldKSxcbiAgICApO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9wdGlvbmFsKSB7XG4gICAgLy8gb3B0aW9uYWxcbiAgICByZXR1cm4gY2FzdGVyKHpvZFR5cGUuZGVmLmlubmVyVHlwZSwgcmF3KTtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdWxsYWJsZSkge1xuICAgIC8vIG51bGxhYmxlXG4gICAgcmV0dXJuIGNhc3Rlcih6b2RUeXBlLmRlZi5pbm5lclR5cGUsIHJhdyk7XG4gIH0gZWxzZSBpZiAoXG4gICAgem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRGF0ZSAmJlxuICAgIHJhdyAhPT0gbnVsbCAmJlxuICAgIHJhdyAhPT0gdW5kZWZpbmVkICYmXG4gICAgbmV3IERhdGUocmF3KS50b1N0cmluZygpICE9PSBcIkludmFsaWQgRGF0ZVwiXG4gICkge1xuICAgIC8vIGRhdGVcbiAgICByZXR1cm4gbmV3IERhdGUocmF3KTtcbiAgfSBlbHNlIHtcbiAgICAvLyDrgpjrqLjsp4DripQg7LKY66asIOyViO2VqFxuICAgIHJldHVybiByYXc7XG4gIH1cbn1cblxuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g7LqQ7Iqk7YyF7JeQ64qUIGFueeqwgCDtlYTsmpTtlaguXG5leHBvcnQgZnVuY3Rpb24gZmFzdGlmeUNhc3RlcihzY2hlbWE6IHouWm9kT2JqZWN0PGFueT4pIHtcbiAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g7LqQ7Iqk7YyF7JeQ64qUIGFueeqwgCDtlYTsmpTtlaguXG4gIHJldHVybiB6LnByZXByb2Nlc3MoKHJhdzogYW55KSA9PiB7XG4gICAgcmV0dXJuIGNhc3RlcihzY2hlbWEsIHJhdyk7XG4gIH0sIHNjaGVtYSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBT0EsU0FBUyxhQUFhLFNBQTJDO0NBQy9ELE9BQU8sbUJBQW1CLEVBQUU7QUFDOUI7QUFFQSxTQUFTLGlCQUFpQixTQUE2RDtDQUNyRixPQUFPLG1CQUFtQixFQUFFLGVBQWUsbUJBQW1CLEVBQUU7QUFDbEU7QUFHQSxTQUFTLGtCQUFrQixTQUFtQjtDQUM1QyxJQUFJLGFBQWEsT0FBTyxHQUN0QixPQUFPO0NBSVQsSUFBSSxpQkFBaUIsT0FBTyxLQUFLLGFBQWEsUUFBUSxJQUFJLFNBQVMsR0FDakUsT0FBTztDQUdULE9BQU87QUFDVDtBQUlBLFNBQWdCLE9BQU8sU0FBbUIsS0FBZTtDQUN2RCxJQUFJLGtCQUFrQixPQUFPLEtBQUssY0FBYyxHQUFHLEdBRWpELE9BQU8sT0FBTyxHQUFHO01BQ1osSUFDTCxtQkFBbUIsRUFBRSxZQUNyQixRQUFRLFFBQVEsTUFBTSxRQUFRLGtCQUFrQixHQUFHLENBQUMsR0FHcEQsSUFBSSxNQUFNLFFBQVEsR0FBRyxHQUFHO0VBQ3RCLE1BQU0sVUFBVSxRQUFRLFFBQVEsTUFBTSxRQUFRLGFBQWEsR0FBRyxDQUFDO0VBQy9ELE9BQU8sWUFBWSxNQUFTO0VBRTVCLE9BQU8sSUFBSSxLQUFLLFNBQWMsT0FBTyxTQUFTLElBQUksQ0FBQztDQUNyRCxPQUNFLE9BQU8sT0FBTyxHQUFHO01BRWQsSUFBSSxtQkFBbUIsRUFBRSxlQUFlLFFBQVEsVUFBVSxRQUFRLFVBRXZFLE9BQU8sUUFBUTtNQUNWLElBQUksUUFBUSxRQUFRLE1BQU0sUUFBUSxHQUFHLEtBQUssbUJBQW1CLEVBQUUsVUFHcEUsT0FBTyxJQUFJLEtBQUssU0FBYyxPQUFPLFFBQVEsU0FBUyxJQUFJLENBQUM7TUFDdEQsSUFBSSxtQkFBbUIsRUFBRSxhQUFhLGNBQWMsR0FBRyxLQUFLLFFBQVEsTUFFekUsT0FBTyxPQUFPLFlBQ1osT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDLFFBQVEsT0FBTyxRQUFRLFFBQVEsQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLENBQUMsQ0FDMUY7TUFDSyxJQUFJLG1CQUFtQixFQUFFLGFBRTlCLE9BQU8sT0FBTyxRQUFRLElBQUksV0FBVyxHQUFHO01BQ25DLElBQUksbUJBQW1CLEVBQUUsYUFFOUIsT0FBTyxPQUFPLFFBQVEsSUFBSSxXQUFXLEdBQUc7TUFDbkMsSUFDTCxtQkFBbUIsRUFBRSxXQUNyQixRQUFRLFFBQ1IsUUFBUSxVQUNSLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLE1BQU0sZ0JBRzdCLE9BQU8sSUFBSSxLQUFLLEdBQUc7TUFHbkIsT0FBTztBQUVYO0FBR0EsU0FBZ0IsY0FBYyxRQUEwQjtDQUV0RCxPQUFPLEVBQUUsWUFBWSxRQUFhO0VBQ2hDLE9BQU8sT0FBTyxRQUFRLEdBQUc7Q0FDM0IsR0FBRyxNQUFNO0FBQ1g7O29CQWpGcUUifQ==
@@ -21,6 +21,8 @@ import { z } from "zod";
21
21
  import { ApiParamType } from "../types/types";
22
22
  import { type ApiParam } from "../types/types";
23
23
  import { type ExtendedApi } from "./decorators";
24
+ /** 신뢰할 수 없는 값을 ApiParamType 경계에서 검증합니다. */
25
+ export declare function parseApiParamType<Input>(input: Input): ApiParamType;
24
26
  /**
25
27
  * Promise 타입을 한 번 언래핑하여 내부 타입을 반환합니다.
26
28
  * Promise가 아닌 경우 원본 타입을 그대로 반환합니다.
@@ -31,7 +33,7 @@ export declare function unwrapPromiseOnce(paramType: ApiParamType): ApiParamType
31
33
  * string, number, array, union 등 모든 ApiParamType을 처리하며,
32
34
  * 순환참조가 발생하는 경우 z.unknown()으로 fallback합니다.
33
35
  */
34
- export declare function getZodTypeFromApiParamType(paramType: ApiParamType, references: {
36
+ export declare function getZodTypeFromApiParamType<Input>(input: Input, references: {
35
37
  [id: string]: z.ZodType;
36
38
  }): z.ZodType;
37
39
  /**
@@ -54,7 +56,7 @@ export declare function getZodObjectFromApi(api: ExtendedApi, references?: {
54
56
  * union, intersection, array, ref 등 모든 타입을 TS 문법으로 표현하며,
55
57
  * import가 필요한 타입 ID는 injectImportKeys에 수집합니다.
56
58
  */
57
- export declare function apiParamTypeToTsType(paramType: ApiParamType, injectImportKeys: string[]): string;
59
+ export declare function apiParamTypeToTsType<Input>(input: Input, injectImportKeys: string[]): string;
58
60
  /**
59
61
  * ApiParam 배열을 TypeScript 함수 파라미터 코드로 변환합니다.
60
62
  * 예: "name: string, age?: number, active: boolean = true"
@@ -1 +1 @@
1
- {"version":3,"file":"code-converters.d.ts","sourceRoot":"","sources":["../../src/api/code-converters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,YAAY,4BAMxD;AAMD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,YAAY,EACvB,UAAU,EAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;CACzB,GACA,CAAC,CAAC,OAAO,CA4HX;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,QAAQ,EAAE,EACrB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;CACpB,GACL,CAAC,CAAC,SAAS,CAYb;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;CACpB,qDAwBP;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CA6DhG;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAUvF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAU/F"}
1
+ {"version":3,"file":"code-converters.d.ts","sourceRoot":"","sources":["../../src/api/code-converters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAmEhD,2CAA2C;AAC3C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,YAAY,CAMnE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,YAAY,4BAMxD;AAMD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAC9C,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;CACzB,GACA,CAAC,CAAC,OAAO,CAqJX;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,QAAQ,EAAE,EACrB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;CACpB,GACL,CAAC,CAAC,SAAS,CAYb;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;CACpB,qDA0BP;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAgE5F;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAUvF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAU/F"}
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
2
  import { ApiParamType, init_types } from "../types/types.js";
3
- import { z as z$1 } from "zod";
3
+ import { z } from "zod";
4
4
  //#region src/api/code-converters.ts
5
5
  /**
6
6
  * code-converters는 API 타입 정의들을 Zod 객체나 TypeScript 코드로 변환하는 함수들을 제공합니다.
@@ -21,6 +21,12 @@ import { z as z$1 } from "zod";
21
21
  * - ZodTypeDef 생성 (Zod 코드 문자열): zod-converter.ts의 zodTypeToZodCode 사용
22
22
  * - EntityProp 변환: zod-converter.ts 참조
23
23
  */
24
+ /** 신뢰할 수 없는 값을 ApiParamType 경계에서 검증합니다. */
25
+ function parseApiParamType(input) {
26
+ const result = ApiParamTypeSchema.safeParse(input);
27
+ if (!result.success) throw new Error(`resolve 불가 ApiParamType: ${z.prettifyError(result.error)}`);
28
+ return result.data;
29
+ }
24
30
  /**
25
31
  * Promise 타입을 한 번 언래핑하여 내부 타입을 반환합니다.
26
32
  * Promise가 아닌 경우 원본 타입을 그대로 반환합니다.
@@ -34,29 +40,30 @@ function unwrapPromiseOnce(paramType) {
34
40
  * string, number, array, union 등 모든 ApiParamType을 처리하며,
35
41
  * 순환참조가 발생하는 경우 z.unknown()으로 fallback합니다.
36
42
  */
37
- function getZodTypeFromApiParamType(paramType, references) {
43
+ function getZodTypeFromApiParamType(input, references) {
44
+ const paramType = parseApiParamType(input);
38
45
  switch (paramType) {
39
- case "string": return z$1.string();
40
- case "number": return z$1.number();
41
- case "boolean": return z$1.boolean();
46
+ case "string": return z.string();
47
+ case "number": return z.number();
48
+ case "boolean": return z.boolean();
42
49
  default: {
43
50
  const advType = paramType;
44
51
  switch (advType.t) {
45
52
  case "string-literal":
46
- case "numeric-literal": return z$1.literal(advType.value);
53
+ case "numeric-literal": return z.literal(advType.value);
47
54
  case "object": return getZodObjectFromApiParams(paramType.props);
48
55
  case "array": {
49
56
  const arrType = paramType;
50
- return z$1.array(getZodTypeFromApiParamType(arrType.elementsType, references));
57
+ return z.array(getZodTypeFromApiParamType(arrType.elementsType, references));
51
58
  }
52
59
  case "ref": {
53
60
  const refType = paramType;
54
- if (refType.id === "Date") return z$1.date();
61
+ if (refType.id === "Date") return z.date();
55
62
  if (["Pick", "Omit"].includes(refType.id)) {
56
63
  if (refType.args?.length !== 2) throw new Error(`잘못된 ${refType.id}`);
57
64
  const [obj, literalOrUnion] = refType.args.map((arg) => getZodTypeFromApiParamType(arg, references));
58
65
  let keys = [];
59
- if (literalOrUnion instanceof z$1.ZodUnion) keys = literalOrUnion.def.options.map((option) => option.def.values[0]);
66
+ if (literalOrUnion instanceof z.ZodUnion) keys = literalOrUnion.def.options.map((option) => option.def.values[0]);
60
67
  else keys = literalOrUnion.def.values;
61
68
  const keyRecord = Object.fromEntries(keys.map((key) => [key, true]));
62
69
  if (refType.id === "Pick") {
@@ -68,26 +75,26 @@ function getZodTypeFromApiParamType(paramType, references) {
68
75
  return getZodTypeFromApiParamType(refType.args[0], references).partial();
69
76
  }
70
77
  const reference = references[refType.id];
71
- if (reference === void 0) return z$1.unknown();
78
+ if (reference === void 0) return z.unknown();
72
79
  return reference;
73
80
  }
74
81
  case "union": {
75
82
  const unionType = paramType;
76
83
  if (unionType.types.length === 2 && unionType.types.some((type) => type === "null")) if (unionType.types[0] === "null") return getZodTypeFromApiParamType(unionType.types[1], references).nullable();
77
84
  else return getZodTypeFromApiParamType(unionType.types[0], references).nullable();
78
- return z$1.union(unionType.types.map((type) => getZodTypeFromApiParamType(type, references)));
85
+ return z.union(unionType.types.map((type) => getZodTypeFromApiParamType(type, references)));
79
86
  }
80
87
  case "intersection": return paramType.types.reduce((result, type, index) => {
81
88
  const resolvedType = getZodTypeFromApiParamType(type, references);
82
89
  if (index === 0) return resolvedType;
83
- else return z$1.intersection(result, resolvedType);
84
- }, z$1.unknown());
90
+ else return z.intersection(result, resolvedType);
91
+ }, z.unknown());
85
92
  case "tuple-type": {
86
93
  const tupleType = paramType;
87
- return z$1.tuple(tupleType.elements.map((elem) => getZodTypeFromApiParamType(elem, references)));
94
+ return z.tuple(tupleType.elements.map((elem) => getZodTypeFromApiParamType(elem, references)));
88
95
  }
89
96
  }
90
- return z$1.unknown();
97
+ return z.unknown();
91
98
  }
92
99
  }
93
100
  }
@@ -96,7 +103,7 @@ function getZodTypeFromApiParamType(paramType, references) {
96
103
  * 각 파라미터의 optional 여부를 반영하여 Zod 스키마를 생성합니다.
97
104
  */
98
105
  function getZodObjectFromApiParams(apiParams, references = {}) {
99
- return z$1.object(Object.fromEntries(apiParams.map((param) => {
106
+ return z.object(Object.fromEntries(apiParams.map((param) => {
100
107
  let zodType = getZodTypeFromApiParamType(param.type, references);
101
108
  if (param.optional) zodType = zodType.optional();
102
109
  return [param.name, zodType];
@@ -121,7 +128,8 @@ function getZodObjectFromApi(api, references = {}) {
121
128
  * union, intersection, array, ref 등 모든 타입을 TS 문법으로 표현하며,
122
129
  * import가 필요한 타입 ID는 injectImportKeys에 수집합니다.
123
130
  */
124
- function apiParamTypeToTsType(paramType, injectImportKeys) {
131
+ function apiParamTypeToTsType(input, injectImportKeys) {
132
+ const paramType = parseApiParamType(input);
125
133
  if ([
126
134
  "string",
127
135
  "number",
@@ -173,11 +181,84 @@ function apiParamToTsCode(params, injectImportKeys) {
173
181
  function apiParamToTsCodeAsObject(params, injectImportKeys) {
174
182
  return `{ ${params.map((param) => `${param.name}${param.optional ? "?" : ""}: ${apiParamTypeToTsType(param.type, injectImportKeys)}${param.defaultDef ? `= ${param.defaultDef}` : ""}`).join(", ")} }`;
175
183
  }
184
+ var ApiParamTypeSchema;
176
185
  var init_code_converters = __esmMin((() => {
177
186
  init_types();
187
+ ApiParamTypeSchema = z.lazy(() => z.union([
188
+ z.enum([
189
+ "string",
190
+ "number",
191
+ "boolean",
192
+ "null",
193
+ "undefined",
194
+ "void",
195
+ "any",
196
+ "unknown",
197
+ "true",
198
+ "false"
199
+ ]),
200
+ z.object({
201
+ t: z.literal("string-literal"),
202
+ value: z.string()
203
+ }),
204
+ z.object({
205
+ t: z.literal("numeric-literal"),
206
+ value: z.number()
207
+ }),
208
+ z.object({
209
+ t: z.literal("object"),
210
+ props: z.array(z.object({
211
+ name: z.string(),
212
+ type: ApiParamTypeSchema,
213
+ optional: z.boolean(),
214
+ defaultDef: z.string().optional()
215
+ }))
216
+ }),
217
+ z.object({
218
+ t: z.literal("union"),
219
+ types: z.array(ApiParamTypeSchema)
220
+ }),
221
+ z.object({
222
+ t: z.literal("intersection"),
223
+ types: z.array(ApiParamTypeSchema)
224
+ }),
225
+ z.object({
226
+ t: z.literal("array"),
227
+ elementsType: ApiParamTypeSchema
228
+ }),
229
+ z.object({
230
+ t: z.literal("ref"),
231
+ id: z.string(),
232
+ args: z.array(ApiParamTypeSchema).optional()
233
+ }),
234
+ z.object({
235
+ t: z.literal("indexed-access"),
236
+ object: ApiParamTypeSchema,
237
+ index: ApiParamTypeSchema
238
+ }),
239
+ z.object({
240
+ t: z.literal("type-param"),
241
+ id: z.string(),
242
+ constraint: ApiParamTypeSchema.optional()
243
+ }),
244
+ z.object({
245
+ t: z.literal("tuple-type"),
246
+ elements: z.array(ApiParamTypeSchema)
247
+ }),
248
+ z.object({
249
+ t: z.literal("function"),
250
+ parameters: z.array(z.object({
251
+ name: z.string(),
252
+ type: ApiParamTypeSchema,
253
+ optional: z.boolean(),
254
+ defaultDef: z.string().optional()
255
+ })),
256
+ returnType: ApiParamTypeSchema
257
+ })
258
+ ]));
178
259
  }));
179
260
  //#endregion
180
261
  init_code_converters();
181
- export { apiParamToTsCode, apiParamToTsCodeAsObject, apiParamTypeToTsType, getZodObjectFromApi, getZodObjectFromApiParams, getZodTypeFromApiParamType, init_code_converters, unwrapPromiseOnce };
262
+ export { apiParamToTsCode, apiParamToTsCodeAsObject, apiParamTypeToTsType, getZodObjectFromApi, getZodObjectFromApiParams, getZodTypeFromApiParamType, init_code_converters, parseApiParamType, unwrapPromiseOnce };
182
263
 
183
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1jb252ZXJ0ZXJzLmpzIiwibmFtZXMiOlsieiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29kZS1jb252ZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY29kZS1jb252ZXJ0ZXJz64qUIEFQSSDtg4DsnoUg7KCV7J2Y65Ok7J2EIFpvZCDqsJ3ssrTrgpggVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmY7ZWY64qUIO2VqOyImOuTpOydhCDsoJzqs7Xtlanri4jri6QuXG4gKlxuICogMS4gQVBJIOyLnOumrOymiOuTpDpcbiAqIC0gRXh0ZW5kZWRBcGksIEFwaVBhcmFtLCBBcGlQYXJhbVR5cGVcbiAqIC0gQVBJIOuplO2DgOuNsOydtO2EsOulvCDtkZztmITtlZjripQg7YOA7J6FIOygleydmOuTpFxuICpcbiAqIDIuIFpvZE9iamVjdCDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFpvZCDtg4DsnoUg7J247Iqk7YS07IqkICjrn7Dtg4DsnoQg67C466as642w7J207IWY7JqpKVxuICogLSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVxuICpcbiAqIDMuIFRzVHlwZURlZiDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFR5cGVTY3JpcHQg7YOA7J6FIOy9lOuTnCDrrLjsnpDsl7QgKOy9lOuTnCDsg53shLHsmqkpXG4gKiAtIGFwaVBhcmFtVHlwZVRvVHNUeXBlIOKGkiBhcGlQYXJhbVRvVHNDb2RlLCBhcGlQYXJhbVRvVHNDb2RlQXNPYmplY3RcbiAqXG4gKiDssLjqs6A6XG4gKiAtIFpvZFR5cGVEZWYg7IOd7ISxIChab2Qg7L2U65OcIOusuOyekOyXtCk6IHpvZC1jb252ZXJ0ZXIudHPsnZggem9kVHlwZVRvWm9kQ29kZSDsgqzsmqlcbiAqIC0gRW50aXR5UHJvcCDrs4DtmZg6IHpvZC1jb252ZXJ0ZXIudHMg7LC47KGwXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEFwaVBhcmFtIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuXG4vLyA8YW55PuulvCDsnpDsoJztlZjqs6AsIFpvZOyXkOyEnCDsoJzslb3tlZjripQg6riw67O47KCB7J24IEdlbmVyaWMgVHlwZSBQYXJhbWV0ZXLrpbwg7IKs7Jqp7ZWoLlxudHlwZSBBbnlab2RPYmplY3QgPSB6LlpvZE9iamVjdDtcbnR5cGUgQW55Wm9kTGl0ZXJhbCA9IHouWm9kTGl0ZXJhbDtcblxuLyoqXG4gKiBQcm9taXNlIO2DgOyeheydhCDtlZwg67KIIOyWuOuemO2Vke2VmOyXrCDrgrTrtoAg7YOA7J6F7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAqIFByb21pc2XqsIAg7JWE64uMIOqyveyasCDsm5Drs7gg7YOA7J6F7J2EIOq3uOuMgOuhnCDrsJjtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBQcm9taXNlT25jZShwYXJhbVR5cGU6IEFwaVBhcmFtVHlwZSkge1xuICBpZiAoQXBpUGFyYW1UeXBlLmlzUHJvbWlzZShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZS5hcmdzPy5bMF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZTtcbiAgfVxufVxuXG4vKlxuICogQVBJ66W8IOq1rOyEse2VmOuKlCDsmpTshozrk6TsnYQgWm9kT2JqZWN066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHN0cmluZywgbnVtYmVyLCBhcnJheSwgdW5pb24g65OxIOuqqOuToCBBcGlQYXJhbVR5cGXsnYQg7LKY66as7ZWY66mwLFxuICog7Iic7ZmY7LC47KGw6rCAIOuwnOyDne2VmOuKlCDqsr3smrAgei51bmtub3duKCnsnLzroZwgZmFsbGJhY2vtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShcbiAgcGFyYW1UeXBlOiBBcGlQYXJhbVR5cGUsXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IHouWm9kVHlwZTtcbiAgfSxcbik6IHouWm9kVHlwZSB7XG4gIHN3aXRjaCAocGFyYW1UeXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIHouc3RyaW5nKCk7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHoubnVtYmVyKCk7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB6LmJvb2xlYW4oKTtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCBhZHZUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyB2YWx1ZT86IHN0cmluZyB8IG51bWJlciB9O1xuICAgICAgc3dpdGNoIChhZHZUeXBlLnQpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZy1saXRlcmFsXCI6XG4gICAgICAgIGNhc2UgXCJudW1lcmljLWxpdGVyYWxcIjpcbiAgICAgICAgICByZXR1cm4gei5saXRlcmFsKGFkdlR5cGUudmFsdWUpO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICBjb25zdCBvYmpUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyBwcm9wczogQXBpUGFyYW1bXSB9O1xuICAgICAgICAgIHJldHVybiBnZXRab2RPYmplY3RGcm9tQXBpUGFyYW1zKG9ialR5cGUucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOiB7XG4gICAgICAgICAgY29uc3QgYXJyVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBlbGVtZW50c1R5cGU6IEFwaVBhcmFtVHlwZTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB6LmFycmF5KGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyclR5cGUuZWxlbWVudHNUeXBlLCByZWZlcmVuY2VzKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlZlwiOiB7XG4gICAgICAgICAgY29uc3QgcmVmVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgYXJncz86IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gRGF0ZSDtg4DsnoUg7LKY66asXG4gICAgICAgICAgaWYgKHJlZlR5cGUuaWQgPT09IFwiRGF0ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gei5kYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOqwneyytCDtgqQg6rSA66asIOycoO2LuOumrO2LsFxuICAgICAgICAgIGlmIChbXCJQaWNrXCIsIFwiT21pdFwiXS5pbmNsdWRlcyhyZWZUeXBlLmlkKSkge1xuICAgICAgICAgICAgaWYgKHJlZlR5cGUuYXJncz8ubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7J6Y66q765CcICR7cmVmVHlwZS5pZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtvYmosIGxpdGVyYWxPclVuaW9uXSA9IHJlZlR5cGUuYXJncy5tYXAoXG4gICAgICAgICAgICAgIChhcmcpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyZywgcmVmZXJlbmNlcyksXG4gICAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOyDneyEseuQmOuKlCBab2RVbmlvbuydmCDtg4DsnoXsnYQg7LaU7KCB7ZWY6riwIOyWtOugpOybgFxuICAgICAgICAgICAgKSBhcyBbQW55Wm9kT2JqZWN0LCB6LlpvZFVuaW9uPGFueT4gfCBBbnlab2RMaXRlcmFsXTtcblxuICAgICAgICAgICAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICBpZiAobGl0ZXJhbE9yVW5pb24gaW5zdGFuY2VvZiB6LlpvZFVuaW9uKSB7XG4gICAgICAgICAgICAgIGtleXMgPSBsaXRlcmFsT3JVbmlvbi5kZWYub3B0aW9ucy5tYXAoXG4gICAgICAgICAgICAgICAgKG9wdGlvbjogeyBkZWY6IHsgdmFsdWVzOiBzdHJpbmdbXSB9IH0pID0+IG9wdGlvbi5kZWYudmFsdWVzWzBdLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAga2V5cyA9IChsaXRlcmFsT3JVbmlvbiBhcyB6LlpvZExpdGVyYWw8c3RyaW5nPikuZGVmLnZhbHVlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGtleVJlY29yZCA9IE9iamVjdC5mcm9tRW50cmllcyhrZXlzLm1hcCgoa2V5KSA9PiBba2V5LCB0cnVlIGFzIGNvbnN0XSkpO1xuICAgICAgICAgICAgaWYgKHJlZlR5cGUuaWQgPT09IFwiUGlja1wiKSB7XG4gICAgICAgICAgICAgIGlmIChvYmoucGljaykge1xuICAgICAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIFpvZCA0LjMuNiBwaWNrIO2DgOyehSDtmLjtmZjshLFcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqLnBpY2soa2V5UmVjb3JkIGFzIGFueSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChvYmoub21pdCkge1xuICAgICAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIFpvZCA0LjMuNiBvbWl0IO2DgOyehSDtmLjtmZjshLFcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqLm9taXQoa2V5UmVjb3JkIGFzIGFueSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFtcIlBhcnRpYWxcIl0uaW5jbHVkZXMocmVmVHlwZS5pZCkpIHtcbiAgICAgICAgICAgIGlmIChyZWZUeXBlLmFyZ3M/Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOyemOuqu+uQnCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvYmogPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShyZWZUeXBlLmFyZ3NbMF0sIHJlZmVyZW5jZXMpO1xuICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gUGFydGlhbCDsnbjsiJgg7YOA7J6FIOy6kOyKpO2MhVxuICAgICAgICAgICAgcmV0dXJuIChvYmogYXMgei5ab2RPYmplY3Q8YW55PikucGFydGlhbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWZlcmVuY2UgPSByZWZlcmVuY2VzW3JlZlR5cGUuaWRdO1xuICAgICAgICAgIGlmIChyZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHoudW5rbm93bigpO1xuICAgICAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKGByZWYg7LC47KGwIOu2iOqwgCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInVuaW9uXCI6IHtcbiAgICAgICAgICBjb25zdCB1bmlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gbnVsbGFibGUg7Jyg64uI7JioXG4gICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlcy5sZW5ndGggPT09IDIgJiYgdW5pb25UeXBlLnR5cGVzLnNvbWUoKHR5cGUpID0+IHR5cGUgPT09IFwibnVsbFwiKSkge1xuICAgICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlc1swXSA9PT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHVuaW9uVHlwZS50eXBlc1sxXSwgcmVmZXJlbmNlcykubnVsbGFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh1bmlvblR5cGUudHlwZXNbMF0sIHJlZmVyZW5jZXMpLm51bGxhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOydvOuwmCDsnKDri4jsmKhcbiAgICAgICAgICByZXR1cm4gei51bmlvbihcbiAgICAgICAgICAgIHVuaW9uVHlwZS50eXBlcy5tYXAoKHR5cGUpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGUsIHJlZmVyZW5jZXMpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJpbnRlcnNlY3Rpb25cIjoge1xuICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvblR5cGUudHlwZXMucmVkdWNlKChyZXN1bHQsIHR5cGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFR5cGUgPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh0eXBlLCByZWZlcmVuY2VzKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRUeXBlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHouaW50ZXJzZWN0aW9uKHJlc3VsdCwgcmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCB6LnVua25vd24oKSBhcyB6LlpvZFR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJ0dXBsZS10eXBlXCI6IHtcbiAgICAgICAgICBjb25zdCB0dXBsZVR5cGUgPSBwYXJhbVR5cGUgYXMgQXBpUGFyYW1UeXBlLlR1cGxlVHlwZTtcbiAgICAgICAgICByZXR1cm4gei50dXBsZShcbiAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOyDneyEseuQmOuKlCBab2RUdXBsZeydmCDtg4DsnoXsnYQg7LaU7KCB7ZWY6riwIOyWtOugpOybgFxuICAgICAgICAgICAgdHVwbGVUeXBlLmVsZW1lbnRzLm1hcCgoZWxlbSkgPT4gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUoZWxlbSwgcmVmZXJlbmNlcykpIGFzIGFueSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gei51bmtub3duKCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQXBpUGFyYW0g67Cw7Je07J2EIFpvZE9iamVjdOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiDqsIEg7YyM652866+47YSw7J2YIG9wdGlvbmFsIOyXrOu2gOulvCDrsJjsmIHtlZjsl6wgWm9kIOyKpO2CpOuniOulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRab2RPYmplY3RGcm9tQXBpUGFyYW1zKFxuICBhcGlQYXJhbXM6IEFwaVBhcmFtW10sXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IHouWm9kVHlwZTtcbiAgfSA9IHt9LFxuKTogei5ab2RPYmplY3Qge1xuICByZXR1cm4gei5vYmplY3QoXG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXBpUGFyYW1zLm1hcCgocGFyYW0pID0+IHtcbiAgICAgICAgbGV0IHpvZFR5cGUgPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShwYXJhbS50eXBlLCByZWZlcmVuY2VzKTtcbiAgICAgICAgaWYgKHBhcmFtLm9wdGlvbmFsKSB7XG4gICAgICAgICAgem9kVHlwZSA9IHpvZFR5cGUub3B0aW9uYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3BhcmFtLm5hbWUsIHpvZFR5cGVdO1xuICAgICAgfSksXG4gICAgKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZEFwaeulvCBab2RPYmplY3TroZwg67OA7ZmY7ZWp64uI64ukLlxuICogVHlwZVBhcmFtZXRlcuyZgCDsnbzrsJgg7YyM652866+47YSw66W8IOyymOumrO2VmOupsCxcbiAqIENvbnRleHQsIFJlZktuZXgsIF/roZwg7Iuc7J6R7ZWY64qUIG9wdGlvbmFsIO2MjOudvOuvuO2EsOuKlCDsoJzsmbjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRab2RPYmplY3RGcm9tQXBpKFxuICBhcGk6IEV4dGVuZGVkQXBpLFxuICByZWZlcmVuY2VzOiB7XG4gICAgW2lkOiBzdHJpbmddOiB6LlpvZFR5cGU7XG4gIH0gPSB7fSxcbikge1xuICBpZiAoYXBpLnR5cGVQYXJhbWV0ZXJzPy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChjb25zdCB0eXBlUGFyYW0gb2YgYXBpLnR5cGVQYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAodHlwZVBhcmFtLmNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3Qgem9kVHlwZSA9IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGVQYXJhbS5jb25zdHJhaW50LCByZWZlcmVuY2VzKTtcblxuICAgICAgICAvLyBGSVhNRTogcmVmZXJlbmNlc+uKlCDquIDroZzrsowg7Jik67iM7KCd7Yq466GcLCB0eXBlUGFyYW0uaWQoXCJUXCIg65OxKeulvCBrZXnroZwg7J2066CH6rKMIOuNruyWtOyUjOybjOuyhOumrOuptCBsb2FkZWRUeXBlc+qwgCDsmKTsl7zrkKguXG4gICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOugiO2NvOufsOyKpCDtg4DsnoUg7LqQ7Iqk7YyFXG4gICAgICAgIChyZWZlcmVuY2VzW3R5cGVQYXJhbS5pZF0gYXMgei5ab2RUeXBlPGFueT4pID0gem9kVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgUmVxVHlwZSA9IGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gICAgLy8gYXBpIHBhcnNpbmftlZwg6rKw6rO86rCAIGFwaSBwYXJhbXNcbiAgICBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAocGFyYW0pID0+XG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksIC8vIF/roZwg7Iuc7J6R7ZWY64qUIO2MjOudvOuvuO2EsOuKlCDsoJzsmbhcbiAgICApLFxuICAgIHJlZmVyZW5jZXMsXG4gICk7XG4gIHJldHVybiBSZXFUeXBlO1xufVxuXG4vKlxuICogQVBJIO2DgOyehSDsoJXsnZjrpbwgVHlwZVNjcmlwdCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiB1bmlvbiwgaW50ZXJzZWN0aW9uLCBhcnJheSwgcmVmIOuTsSDrqqjrk6Ag7YOA7J6F7J2EIFRTIOusuOuyleycvOuhnCDtkZztmITtlZjrqbAsXG4gKiBpbXBvcnTqsIAg7ZWE7JqU7ZWcIO2DgOyehSBJROuKlCBpbmplY3RJbXBvcnRLZXlz7JeQIOyImOynke2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZTogQXBpUGFyYW1UeXBlLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmIChcbiAgICBbXG4gICAgICBcInN0cmluZ1wiLFxuICAgICAgXCJudW1iZXJcIixcbiAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgXCJ0cnVlXCIsXG4gICAgICBcImZhbHNlXCIsXG4gICAgICBcIm51bGxcIixcbiAgICAgIFwidW5kZWZpbmVkXCIsXG4gICAgICBcInZvaWRcIixcbiAgICAgIFwiYW55XCIsXG4gICAgICBcInVua25vd25cIixcbiAgICBdLmluY2x1ZGVzKHBhcmFtVHlwZSBhcyBzdHJpbmcpXG4gICkge1xuICAgIHJldHVybiBwYXJhbVR5cGUgYXMgc3RyaW5nO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc09iamVjdChwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGB7ICR7YXBpUGFyYW1Ub1RzQ29kZShwYXJhbVR5cGUucHJvcHMsIGluamVjdEltcG9ydEtleXMpfSB9YDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNTdHJpbmdMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFwiJHtwYXJhbVR5cGUudmFsdWV9XCJgO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc051bWVyaWNMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHBhcmFtVHlwZS52YWx1ZSk7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiB8IFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbnRlcnNlY3Rpb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiAmIFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNBcnJheShwYXJhbVR5cGUpKSB7XG4gICAgLy8gaW50ZXJzZWN0aW9u7J2064KYIHVuaW9u7J24IOqyveyasCDqtITtmLjroZwg6rCQ7Iu46riwXG4gICAgY29uc3QgZWxlbWVudHNUeXBlID0gYXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSwgaW5qZWN0SW1wb3J0S2V5cyk7XG4gICAgcmV0dXJuIEFwaVBhcmFtVHlwZS5pc0ludGVyc2VjdGlvbihwYXJhbVR5cGUuZWxlbWVudHNUeXBlKSB8fFxuICAgICAgQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSlcbiAgICAgID8gYCgke2VsZW1lbnRzVHlwZX0pW11gXG4gICAgICA6IGAke2VsZW1lbnRzVHlwZX1bXWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzUmVmKHBhcmFtVHlwZSkpIHtcbiAgICBpZiAoIVtcIlBpY2tcIiwgXCJPbWl0XCIsIFwiUHJvbWlzZVwiLCBcIlBhcnRpYWxcIiwgXCJEYXRlXCJdLmluY2x1ZGVzKHBhcmFtVHlwZS5pZCkpIHtcbiAgICAgIC8vIGltcG9ydEtleXMg7J247KCd7IWYXG4gICAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocGFyYW1UeXBlLmlkKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtVHlwZS5hcmdzID09PSB1bmRlZmluZWQgfHwgcGFyYW1UeXBlLmFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcGFyYW1UeXBlLmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7cGFyYW1UeXBlLmlkfTwke3BhcmFtVHlwZS5hcmdzXG4gICAgICAgIC5tYXAoKGFyZykgPT4gYXBpUGFyYW1UeXBlVG9Uc1R5cGUoYXJnLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCIsXCIpfT5gO1xuICAgIH1cbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbmRleGVkQWNjZXNzKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYCR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUoXG4gICAgICBwYXJhbVR5cGUub2JqZWN0LFxuICAgICAgaW5qZWN0SW1wb3J0S2V5cyxcbiAgICApfVske2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZS5pbmRleCwgaW5qZWN0SW1wb3J0S2V5cyl9XWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVHVwbGVUeXBlKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFsgJHtwYXJhbVR5cGUuZWxlbWVudHMubWFwKChlbGVtKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZShlbGVtLCBpbmplY3RJbXBvcnRLZXlzKSl9IF1gO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc1R5cGVQYXJhbShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGAke3BhcmFtVHlwZS5pZH0ke1xuICAgICAgcGFyYW1UeXBlLmNvbnN0cmFpbnRcbiAgICAgICAgPyBgIGV4dGVuZHMgJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwYXJhbVR5cGUuY29uc3RyYWludCwgaW5qZWN0SW1wb3J0S2V5cyl9YFxuICAgICAgICA6IFwiXCJcbiAgICB9YDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlc29sdmUg67aI6rCAIEFwaVBhcmFtVHlwZSAke3BhcmFtVHlwZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwaVBhcmFtIOuwsOyXtOydhCBUeXBlU2NyaXB0IO2VqOyImCDtjIzrnbzrr7jthLAg7L2U65Oc66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyYiDogXCJuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZVwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtczogQXBpUGFyYW1bXSwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gcGFyYW1zXG4gICAgLm1hcCgocGFyYW0pID0+IHtcbiAgICAgIHJldHVybiBgJHtwYXJhbS5uYW1lfSR7XG4gICAgICAgIHBhcmFtLm9wdGlvbmFsICYmICFwYXJhbS5kZWZhdWx0RGVmID8gXCI/XCIgOiBcIlwiXG4gICAgICB9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtLnR5cGUsIGluamVjdEltcG9ydEtleXMpfSR7XG4gICAgICAgIHBhcmFtLmRlZmF1bHREZWYgPyBgPSAke3BhcmFtLmRlZmF1bHREZWZ9YCA6IFwiXCJcbiAgICAgIH1gO1xuICAgIH0pXG4gICAgLmpvaW4oXCIsIFwiKTtcbn1cblxuLyoqXG4gKiBBcGlQYXJhbSDrsLDsl7TsnYQgVHlwZVNjcmlwdCDqsJ3ssrQg7YOA7J6FIOy9lOuTnOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiDsmIg6IFwieyBuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZSB9XCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVG9Uc0NvZGVBc09iamVjdChwYXJhbXM6IEFwaVBhcmFtW10sIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB7ICR7cGFyYW1zXG4gICAgLm1hcChcbiAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgYCR7cGFyYW0ubmFtZX0ke3BhcmFtLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwifTogJHthcGlQYXJhbVR5cGVUb1RzVHlwZShcbiAgICAgICAgICBwYXJhbS50eXBlLFxuICAgICAgICAgIGluamVjdEltcG9ydEtleXMsXG4gICAgICAgICl9JHtwYXJhbS5kZWZhdWx0RGVmID8gYD0gJHtwYXJhbS5kZWZhdWx0RGVmfWAgOiBcIlwifWAsXG4gICAgKVxuICAgIC5qb2luKFwiLCBcIil9IH1gO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQ0EsU0FBZ0Isa0JBQWtCLFdBQXlCO0NBQ3pELElBQUksYUFBYSxVQUFVLFNBQVMsR0FDbEMsT0FBTyxVQUFVLE9BQU87TUFFeEIsT0FBTztBQUVYOzs7Ozs7QUFXQSxTQUFnQiwyQkFDZCxXQUNBLFlBR1c7Q0FDWCxRQUFRLFdBQVI7RUFDRSxLQUFLLFVBQ0gsT0FBT0EsSUFBRSxPQUFPO0VBQ2xCLEtBQUssVUFDSCxPQUFPQSxJQUFFLE9BQU87RUFDbEIsS0FBSyxXQUNILE9BQU9BLElBQUUsUUFBUTtFQUNuQixTQUFTO0dBQ1AsTUFBTSxVQUFVO0dBQ2hCLFFBQVEsUUFBUSxHQUFoQjtJQUNFLEtBQUs7SUFDTCxLQUFLLG1CQUNILE9BQU9BLElBQUUsUUFBUSxRQUFRLEtBQUs7SUFDaEMsS0FBSyxVQUVILE9BQU8sMEJBQTBCLFVBQVEsS0FBSztJQUVoRCxLQUFLLFNBQVM7S0FDWixNQUFNLFVBQVU7S0FJaEIsT0FBT0EsSUFBRSxNQUFNLDJCQUEyQixRQUFRLGNBQWMsVUFBVSxDQUFDO0lBQzdFO0lBQ0Es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
264
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1jb252ZXJ0ZXJzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29kZS1jb252ZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY29kZS1jb252ZXJ0ZXJz64qUIEFQSSDtg4DsnoUg7KCV7J2Y65Ok7J2EIFpvZCDqsJ3ssrTrgpggVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmY7ZWY64qUIO2VqOyImOuTpOydhCDsoJzqs7Xtlanri4jri6QuXG4gKlxuICogMS4gQVBJIOyLnOumrOymiOuTpDpcbiAqIC0gRXh0ZW5kZWRBcGksIEFwaVBhcmFtLCBBcGlQYXJhbVR5cGVcbiAqIC0gQVBJIOuplO2DgOuNsOydtO2EsOulvCDtkZztmITtlZjripQg7YOA7J6FIOygleydmOuTpFxuICpcbiAqIDIuIFpvZE9iamVjdCDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFpvZCDtg4DsnoUg7J247Iqk7YS07IqkICjrn7Dtg4DsnoQg67C466as642w7J207IWY7JqpKVxuICogLSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVxuICpcbiAqIDMuIFRzVHlwZURlZiDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFR5cGVTY3JpcHQg7YOA7J6FIOy9lOuTnCDrrLjsnpDsl7QgKOy9lOuTnCDsg53shLHsmqkpXG4gKiAtIGFwaVBhcmFtVHlwZVRvVHNUeXBlIOKGkiBhcGlQYXJhbVRvVHNDb2RlLCBhcGlQYXJhbVRvVHNDb2RlQXNPYmplY3RcbiAqXG4gKiDssLjqs6A6XG4gKiAtIFpvZFR5cGVEZWYg7IOd7ISxIChab2Qg7L2U65OcIOusuOyekOyXtCk6IHpvZC1jb252ZXJ0ZXIudHPsnZggem9kVHlwZVRvWm9kQ29kZSDsgqzsmqlcbiAqIC0gRW50aXR5UHJvcCDrs4DtmZg6IHpvZC1jb252ZXJ0ZXIudHMg7LC47KGwXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEFwaVBhcmFtIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuXG4vLyA8YW55PuulvCDsnpDsoJztlZjqs6AsIFpvZOyXkOyEnCDsoJzslb3tlZjripQg6riw67O47KCB7J24IEdlbmVyaWMgVHlwZSBQYXJhbWV0ZXLrpbwg7IKs7Jqp7ZWoLlxudHlwZSBBbnlab2RPYmplY3QgPSB6LlpvZE9iamVjdDtcbnR5cGUgQW55Wm9kTGl0ZXJhbCA9IHouWm9kTGl0ZXJhbDtcblxuY29uc3QgQXBpUGFyYW1UeXBlU2NoZW1hOiB6LlpvZFR5cGU8QXBpUGFyYW1UeXBlPiA9IHoubGF6eSgoKSA9PlxuICB6LnVuaW9uKFtcbiAgICB6LmVudW0oW1xuICAgICAgXCJzdHJpbmdcIixcbiAgICAgIFwibnVtYmVyXCIsXG4gICAgICBcImJvb2xlYW5cIixcbiAgICAgIFwibnVsbFwiLFxuICAgICAgXCJ1bmRlZmluZWRcIixcbiAgICAgIFwidm9pZFwiLFxuICAgICAgXCJhbnlcIixcbiAgICAgIFwidW5rbm93blwiLFxuICAgICAgXCJ0cnVlXCIsXG4gICAgICBcImZhbHNlXCIsXG4gICAgXSksXG4gICAgei5vYmplY3QoeyB0OiB6LmxpdGVyYWwoXCJzdHJpbmctbGl0ZXJhbFwiKSwgdmFsdWU6IHouc3RyaW5nKCkgfSksXG4gICAgei5vYmplY3QoeyB0OiB6LmxpdGVyYWwoXCJudW1lcmljLWxpdGVyYWxcIiksIHZhbHVlOiB6Lm51bWJlcigpIH0pLFxuICAgIHoub2JqZWN0KHtcbiAgICAgIHQ6IHoubGl0ZXJhbChcIm9iamVjdFwiKSxcbiAgICAgIHByb3BzOiB6LmFycmF5KFxuICAgICAgICB6Lm9iamVjdCh7XG4gICAgICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgICB0eXBlOiBBcGlQYXJhbVR5cGVTY2hlbWEsXG4gICAgICAgICAgb3B0aW9uYWw6IHouYm9vbGVhbigpLFxuICAgICAgICAgIGRlZmF1bHREZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgIH0pLFxuICAgIHoub2JqZWN0KHsgdDogei5saXRlcmFsKFwidW5pb25cIiksIHR5cGVzOiB6LmFycmF5KEFwaVBhcmFtVHlwZVNjaGVtYSkgfSksXG4gICAgei5vYmplY3QoeyB0OiB6LmxpdGVyYWwoXCJpbnRlcnNlY3Rpb25cIiksIHR5cGVzOiB6LmFycmF5KEFwaVBhcmFtVHlwZVNjaGVtYSkgfSksXG4gICAgei5vYmplY3QoeyB0OiB6LmxpdGVyYWwoXCJhcnJheVwiKSwgZWxlbWVudHNUeXBlOiBBcGlQYXJhbVR5cGVTY2hlbWEgfSksXG4gICAgei5vYmplY3Qoe1xuICAgICAgdDogei5saXRlcmFsKFwicmVmXCIpLFxuICAgICAgaWQ6IHouc3RyaW5nKCksXG4gICAgICBhcmdzOiB6LmFycmF5KEFwaVBhcmFtVHlwZVNjaGVtYSkub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgICB6Lm9iamVjdCh7XG4gICAgICB0OiB6LmxpdGVyYWwoXCJpbmRleGVkLWFjY2Vzc1wiKSxcbiAgICAgIG9iamVjdDogQXBpUGFyYW1UeXBlU2NoZW1hLFxuICAgICAgaW5kZXg6IEFwaVBhcmFtVHlwZVNjaGVtYSxcbiAgICB9KSxcbiAgICB6Lm9iamVjdCh7XG4gICAgICB0OiB6LmxpdGVyYWwoXCJ0eXBlLXBhcmFtXCIpLFxuICAgICAgaWQ6IHouc3RyaW5nKCksXG4gICAgICBjb25zdHJhaW50OiBBcGlQYXJhbVR5cGVTY2hlbWEub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgICB6Lm9iamVjdCh7IHQ6IHoubGl0ZXJhbChcInR1cGxlLXR5cGVcIiksIGVsZW1lbnRzOiB6LmFycmF5KEFwaVBhcmFtVHlwZVNjaGVtYSkgfSksXG4gICAgei5vYmplY3Qoe1xuICAgICAgdDogei5saXRlcmFsKFwiZnVuY3Rpb25cIiksXG4gICAgICBwYXJhbWV0ZXJzOiB6LmFycmF5KFxuICAgICAgICB6Lm9iamVjdCh7XG4gICAgICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgICB0eXBlOiBBcGlQYXJhbVR5cGVTY2hlbWEsXG4gICAgICAgICAgb3B0aW9uYWw6IHouYm9vbGVhbigpLFxuICAgICAgICAgIGRlZmF1bHREZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICAgcmV0dXJuVHlwZTogQXBpUGFyYW1UeXBlU2NoZW1hLFxuICAgIH0pLFxuICBdKSxcbik7XG5cbi8qKiDsi6DrorDtlaAg7IiYIOyXhuuKlCDqsJLsnYQgQXBpUGFyYW1UeXBlIOqyveqzhOyXkOyEnCDqsoDspp3tlanri4jri6QuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcGlQYXJhbVR5cGU8SW5wdXQ+KGlucHV0OiBJbnB1dCk6IEFwaVBhcmFtVHlwZSB7XG4gIGNvbnN0IHJlc3VsdCA9IEFwaVBhcmFtVHlwZVNjaGVtYS5zYWZlUGFyc2UoaW5wdXQpO1xuICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGByZXNvbHZlIOu2iOqwgCBBcGlQYXJhbVR5cGU6ICR7ei5wcmV0dGlmeUVycm9yKHJlc3VsdC5lcnJvcil9YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5kYXRhO1xufVxuXG4vKipcbiAqIFByb21pc2Ug7YOA7J6F7J2EIO2VnCDrsogg7Ja4656Y7ZWR7ZWY7JesIOuCtOu2gCDtg4DsnoXsnYQg67CY7ZmY7ZWp64uI64ukLlxuICogUHJvbWlzZeqwgCDslYTri4wg6rK97JqwIOybkOuzuCDtg4DsnoXsnYQg6re464yA66GcIOuwmO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcFByb21pc2VPbmNlKHBhcmFtVHlwZTogQXBpUGFyYW1UeXBlKSB7XG4gIGlmIChBcGlQYXJhbVR5cGUuaXNQcm9taXNlKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gcGFyYW1UeXBlLmFyZ3M/LlswXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyYW1UeXBlO1xuICB9XG59XG5cbi8qXG4gKiBBUEnrpbwg6rWs7ISx7ZWY64qUIOyalOyGjOuTpOydhCBab2RPYmplY3TroZwg67OA7ZmY7ZWY6riwIOychO2VnCDtlajsiJjrk6TsnoXri4jri6QuXG4gKi9cblxuLyoqXG4gKiBBcGlQYXJhbVR5cGXsnYQgWm9kIO2DgOyehSDsnbjsiqTthLTsiqTroZwg67OA7ZmY7ZWp64uI64ukLlxuICogc3RyaW5nLCBudW1iZXIsIGFycmF5LCB1bmlvbiDrk7Eg66qo65OgIEFwaVBhcmFtVHlwZeydhCDsspjrpqztlZjrqbAsXG4gKiDsiJztmZjssLjsobDqsIAg67Cc7IOd7ZWY64qUIOqyveyasCB6LnVua25vd24oKeycvOuhnCBmYWxsYmFja+2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlPElucHV0PihcbiAgaW5wdXQ6IElucHV0LFxuICByZWZlcmVuY2VzOiB7XG4gICAgW2lkOiBzdHJpbmddOiB6LlpvZFR5cGU7XG4gIH0sXG4pOiB6LlpvZFR5cGUge1xuICBjb25zdCBwYXJhbVR5cGUgPSBwYXJzZUFwaVBhcmFtVHlwZShpbnB1dCk7XG4gIHN3aXRjaCAocGFyYW1UeXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIHouc3RyaW5nKCk7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHoubnVtYmVyKCk7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB6LmJvb2xlYW4oKTtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCBhZHZUeXBlID1cbiAgICAgICAgLyogU0FGRVRZOiBBUEkg642w7L2U66CI7J207YSw7JmAIFpvZCDqsoDspp3quLAg65Ox66GdIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgc3dpdGNoIChhZHZUeXBlLnQpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZy1saXRlcmFsXCI6XG4gICAgICAgIGNhc2UgXCJudW1lcmljLWxpdGVyYWxcIjpcbiAgICAgICAgICByZXR1cm4gei5saXRlcmFsKGFkdlR5cGUudmFsdWUpO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICBjb25zdCBvYmpUeXBlID1cbiAgICAgICAgICAgIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICAgIHByb3BzOiBBcGlQYXJhbVtdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyhvYmpUeXBlLnByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiYXJyYXlcIjoge1xuICAgICAgICAgIGNvbnN0IGFyclR5cGUgPVxuICAgICAgICAgICAgLyogU0FGRVRZOiBBUEkg642w7L2U66CI7J207YSw7JmAIFpvZCDqsoDspp3quLAg65Ox66GdIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICAgIHQ6IHN0cmluZztcbiAgICAgICAgICAgICAgZWxlbWVudHNUeXBlOiBBcGlQYXJhbVR5cGU7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB6LmFycmF5KGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyclR5cGUuZWxlbWVudHNUeXBlLCByZWZlcmVuY2VzKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlZlwiOiB7XG4gICAgICAgICAgY29uc3QgcmVmVHlwZSA9XG4gICAgICAgICAgICAvKiBTQUZFVFk6IEFQSSDrjbDsvZTroIjsnbTthLDsmYAgWm9kIOqygOymneq4sCDrk7HroZ0g6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcGFyYW1UeXBlIGFzIHtcbiAgICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgICBhcmdzPzogQXBpUGFyYW1UeXBlW107XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIC8vIERhdGUg7YOA7J6FIOyymOumrFxuICAgICAgICAgIGlmIChyZWZUeXBlLmlkID09PSBcIkRhdGVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHouZGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyDqsJ3ssrQg7YKkIOq0gOumrCDsnKDti7jrpqzti7BcbiAgICAgICAgICBpZiAoW1wiUGlja1wiLCBcIk9taXRcIl0uaW5jbHVkZXMocmVmVHlwZS5pZCkpIHtcbiAgICAgICAgICAgIGlmIChyZWZUeXBlLmFyZ3M/Lmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOyemOuqu+uQnCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBbb2JqLCBsaXRlcmFsT3JVbmlvbl0gPVxuICAgICAgICAgICAgICAvKiBTQUZFVFk6IEFQSSDrjbDsvZTroIjsnbTthLDsmYAgWm9kIOqygOymneq4sCDrk7HroZ0g6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcmVmVHlwZS5hcmdzLm1hcChcbiAgICAgICAgICAgICAgICAoYXJnKSA9PiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShhcmcsIHJlZmVyZW5jZXMpLFxuICAgICAgICAgICAgICApIGFzIFtBbnlab2RPYmplY3QsIHouWm9kVW5pb248YW55PiB8IEFueVpvZExpdGVyYWxdO1xuXG4gICAgICAgICAgICBsZXQga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGlmIChsaXRlcmFsT3JVbmlvbiBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICAgICAgICAgICAga2V5cyA9IGxpdGVyYWxPclVuaW9uLmRlZi5vcHRpb25zLm1hcChcbiAgICAgICAgICAgICAgICAob3B0aW9uOiB7IGRlZjogeyB2YWx1ZXM6IHN0cmluZ1tdIH0gfSkgPT4gb3B0aW9uLmRlZi52YWx1ZXNbMF0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBrZXlzID1cbiAgICAgICAgICAgICAgICAvKiBTQUZFVFk6IEFQSSDrjbDsvZTroIjsnbTthLDsmYAgWm9kIOqygOymneq4sCDrk7HroZ0g6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgICAgICAgICAgbGl0ZXJhbE9yVW5pb24gYXMgei5ab2RMaXRlcmFsPHN0cmluZz5cbiAgICAgICAgICAgICAgICApLmRlZi52YWx1ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBrZXlSZWNvcmQgPSBPYmplY3QuZnJvbUVudHJpZXMoa2V5cy5tYXAoKGtleSkgPT4gW2tleSwgdHJ1ZSBhcyBjb25zdF0pKTtcbiAgICAgICAgICAgIGlmIChyZWZUeXBlLmlkID09PSBcIlBpY2tcIikge1xuICAgICAgICAgICAgICBpZiAob2JqLnBpY2spIHtcbiAgICAgICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBab2QgNC4zLjYgcGljayDtg4DsnoUg7Zi47ZmY7ISxXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iai5waWNrKFxuICAgICAgICAgICAgICAgICAgLyogU0FGRVRZOiBBUEkg642w7L2U66CI7J207YSw7JmAIFpvZCDqsoDspp3quLAg65Ox66GdIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIGtleVJlY29yZCBhcyBhbnksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKG9iai5vbWl0KSB7XG4gICAgICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gWm9kIDQuMy42IG9taXQg7YOA7J6FIO2YuO2ZmOyEsVxuICAgICAgICAgICAgICAgIHJldHVybiBvYmoub21pdChcbiAgICAgICAgICAgICAgICAgIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBrZXlSZWNvcmQgYXMgYW55LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFtcIlBhcnRpYWxcIl0uaW5jbHVkZXMocmVmVHlwZS5pZCkpIHtcbiAgICAgICAgICAgIGlmIChyZWZUeXBlLmFyZ3M/Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOyemOuqu+uQnCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvYmogPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShyZWZUeXBlLmFyZ3NbMF0sIHJlZmVyZW5jZXMpO1xuICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gUGFydGlhbCDsnbjsiJgg7YOA7J6FIOy6kOyKpO2MhVxuICAgICAgICAgICAgcmV0dXJuIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgICAgIG9iaiBhcyB6LlpvZE9iamVjdDxhbnk+XG4gICAgICAgICAgICApLnBhcnRpYWwoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVmZXJlbmNlID0gcmVmZXJlbmNlc1tyZWZUeXBlLmlkXTtcbiAgICAgICAgICBpZiAocmVmZXJlbmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB6LnVua25vd24oKTtcbiAgICAgICAgICAgIC8vIHRocm93IG5ldyBFcnJvcihgcmVmIOywuOyhsCDrtojqsIAgJHtyZWZUeXBlLmlkfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJ1bmlvblwiOiB7XG4gICAgICAgICAgY29uc3QgdW5pb25UeXBlID1cbiAgICAgICAgICAgIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICAgIHR5cGVzOiBBcGlQYXJhbVR5cGVbXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgLy8gbnVsbGFibGUg7Jyg64uI7JioXG4gICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlcy5sZW5ndGggPT09IDIgJiYgdW5pb25UeXBlLnR5cGVzLnNvbWUoKHR5cGUpID0+IHR5cGUgPT09IFwibnVsbFwiKSkge1xuICAgICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlc1swXSA9PT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHVuaW9uVHlwZS50eXBlc1sxXSwgcmVmZXJlbmNlcykubnVsbGFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh1bmlvblR5cGUudHlwZXNbMF0sIHJlZmVyZW5jZXMpLm51bGxhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOydvOuwmCDsnKDri4jsmKhcbiAgICAgICAgICByZXR1cm4gei51bmlvbihcbiAgICAgICAgICAgIHVuaW9uVHlwZS50eXBlcy5tYXAoKHR5cGUpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGUsIHJlZmVyZW5jZXMpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJpbnRlcnNlY3Rpb25cIjoge1xuICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvblR5cGUgPVxuICAgICAgICAgICAgLyogU0FGRVRZOiBBUEkg642w7L2U66CI7J207YSw7JmAIFpvZCDqsoDspp3quLAg65Ox66GdIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICAgIHQ6IHN0cmluZztcbiAgICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gaW50ZXJzZWN0aW9uVHlwZS50eXBlcy5yZWR1Y2UoKHJlc3VsdCwgdHlwZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkVHlwZSA9IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGUsIHJlZmVyZW5jZXMpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlZFR5cGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gei5pbnRlcnNlY3Rpb24ocmVzdWx0LCByZXNvbHZlZFR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyB6LnVua25vd24oKSBhcyB6LlpvZFR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJ0dXBsZS10eXBlXCI6IHtcbiAgICAgICAgICBjb25zdCB0dXBsZVR5cGUgPVxuICAgICAgICAgICAgLyogU0FGRVRZOiBBUEkg642w7L2U66CI7J207YSw7JmAIFpvZCDqsoDspp3quLAg65Ox66GdIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhcmFtVHlwZSBhcyBBcGlQYXJhbVR5cGUuVHVwbGVUeXBlO1xuICAgICAgICAgIHJldHVybiB6LnR1cGxlKFxuICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g7IOd7ISx65CY64qUIFpvZFR1cGxl7J2YIO2DgOyeheydhCDstpTsoIHtlZjquLAg7Ja066Ck7JuAXG4gICAgICAgICAgICAvKiBTQUZFVFk6IEFQSSDrjbDsvZTroIjsnbTthLDsmYAgWm9kIOqygOymneq4sCDrk7HroZ0g6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gdHVwbGVUeXBlLmVsZW1lbnRzLm1hcChcbiAgICAgICAgICAgICAgKGVsZW0pID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGVsZW0sIHJlZmVyZW5jZXMpLFxuICAgICAgICAgICAgKSBhcyBhbnksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHoudW5rbm93bigpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFwaVBhcmFtIOuwsOyXtOydhCBab2RPYmplY3TroZwg67OA7ZmY7ZWp64uI64ukLlxuICog6rCBIO2MjOudvOuvuO2EsOydmCBvcHRpb25hbCDsl6zrtoDrpbwg67CY7JiB7ZWY7JesIFpvZCDsiqTtgqTrp4jrpbwg7IOd7ISx7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyhcbiAgYXBpUGFyYW1zOiBBcGlQYXJhbVtdLFxuICByZWZlcmVuY2VzOiB7XG4gICAgW2lkOiBzdHJpbmddOiB6LlpvZFR5cGU7XG4gIH0gPSB7fSxcbik6IHouWm9kT2JqZWN0IHtcbiAgcmV0dXJuIHoub2JqZWN0KFxuICAgIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGFwaVBhcmFtcy5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICAgIGxldCB6b2RUeXBlID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUocGFyYW0udHlwZSwgcmVmZXJlbmNlcyk7XG4gICAgICAgIGlmIChwYXJhbS5vcHRpb25hbCkge1xuICAgICAgICAgIHpvZFR5cGUgPSB6b2RUeXBlLm9wdGlvbmFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtwYXJhbS5uYW1lLCB6b2RUeXBlXTtcbiAgICAgIH0pLFxuICAgICksXG4gICk7XG59XG5cbi8qKlxuICogRXh0ZW5kZWRBcGnrpbwgWm9kT2JqZWN066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIFR5cGVQYXJhbWV0ZXLsmYAg7J2867CYIO2MjOudvOuvuO2EsOulvCDsspjrpqztlZjrqbAsXG4gKiBDb250ZXh0LCBSZWZLbmV4LCBf66GcIOyLnOyeke2VmOuKlCBvcHRpb25hbCDtjIzrnbzrr7jthLDripQg7KCc7Jm47ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Wm9kT2JqZWN0RnJvbUFwaShcbiAgYXBpOiBFeHRlbmRlZEFwaSxcbiAgcmVmZXJlbmNlczoge1xuICAgIFtpZDogc3RyaW5nXTogei5ab2RUeXBlO1xuICB9ID0ge30sXG4pIHtcbiAgaWYgKGFwaS50eXBlUGFyYW1ldGVycz8ubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgdHlwZVBhcmFtIG9mIGFwaS50eXBlUGFyYW1ldGVycykge1xuICAgICAgaWYgKHR5cGVQYXJhbS5jb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IHpvZFR5cGUgPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh0eXBlUGFyYW0uY29uc3RyYWludCwgcmVmZXJlbmNlcyk7XG5cbiAgICAgICAgLy8gRklYTUU6IHJlZmVyZW5jZXPripQg6riA66Gc67KMIOyYpOu4jOygne2KuOuhnCwgdHlwZVBhcmFtLmlkKFwiVFwiIOuTsSnrpbwga2V566GcIOydtOugh+qyjCDrja7slrTslIzsm4zrsoTrpqzrqbQgbG9hZGVkVHlwZXPqsIAg7Jik7Je865CoLlxuICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDroIjtjbzrn7DsiqQg7YOA7J6FIOy6kOyKpO2MhVxuICAgICAgICAvKiBTQUZFVFk6IEFQSSDrjbDsvZTroIjsnbTthLDsmYAgWm9kIOqygOymneq4sCDrk7HroZ0g6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKHJlZmVyZW5jZXNbXG4gICAgICAgICAgdHlwZVBhcmFtLmlkXG4gICAgICAgIF0gYXMgei5ab2RUeXBlPGFueT4pID0gem9kVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgUmVxVHlwZSA9IGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gICAgLy8gYXBpIHBhcnNpbmftlZwg6rKw6rO86rCAIGFwaSBwYXJhbXNcbiAgICBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAocGFyYW0pID0+XG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksIC8vIF/roZwg7Iuc7J6R7ZWY64qUIO2MjOudvOuvuO2EsOuKlCDsoJzsmbhcbiAgICApLFxuICAgIHJlZmVyZW5jZXMsXG4gICk7XG4gIHJldHVybiBSZXFUeXBlO1xufVxuXG4vKlxuICogQVBJIO2DgOyehSDsoJXsnZjrpbwgVHlwZVNjcmlwdCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiB1bmlvbiwgaW50ZXJzZWN0aW9uLCBhcnJheSwgcmVmIOuTsSDrqqjrk6Ag7YOA7J6F7J2EIFRTIOusuOuyleycvOuhnCDtkZztmITtlZjrqbAsXG4gKiBpbXBvcnTqsIAg7ZWE7JqU7ZWcIO2DgOyehSBJROuKlCBpbmplY3RJbXBvcnRLZXlz7JeQIOyImOynke2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVHlwZVRvVHNUeXBlPElucHV0PihpbnB1dDogSW5wdXQsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgcGFyYW1UeXBlID0gcGFyc2VBcGlQYXJhbVR5cGUoaW5wdXQpO1xuICBpZiAoXG4gICAgW1xuICAgICAgXCJzdHJpbmdcIixcbiAgICAgIFwibnVtYmVyXCIsXG4gICAgICBcImJvb2xlYW5cIixcbiAgICAgIFwidHJ1ZVwiLFxuICAgICAgXCJmYWxzZVwiLFxuICAgICAgXCJudWxsXCIsXG4gICAgICBcInVuZGVmaW5lZFwiLFxuICAgICAgXCJ2b2lkXCIsXG4gICAgICBcImFueVwiLFxuICAgICAgXCJ1bmtub3duXCIsXG4gICAgXS5pbmNsdWRlcyhcbiAgICAgIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBwYXJhbVR5cGUgYXMgc3RyaW5nLFxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBwYXJhbVR5cGUgYXMgc3RyaW5nO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc09iamVjdChwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGB7ICR7YXBpUGFyYW1Ub1RzQ29kZShwYXJhbVR5cGUucHJvcHMsIGluamVjdEltcG9ydEtleXMpfSB9YDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNTdHJpbmdMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFwiJHtwYXJhbVR5cGUudmFsdWV9XCJgO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc051bWVyaWNMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHBhcmFtVHlwZS52YWx1ZSk7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiB8IFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbnRlcnNlY3Rpb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiAmIFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNBcnJheShwYXJhbVR5cGUpKSB7XG4gICAgLy8gaW50ZXJzZWN0aW9u7J2064KYIHVuaW9u7J24IOqyveyasCDqtITtmLjroZwg6rCQ7Iu46riwXG4gICAgY29uc3QgZWxlbWVudHNUeXBlID0gYXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSwgaW5qZWN0SW1wb3J0S2V5cyk7XG4gICAgcmV0dXJuIEFwaVBhcmFtVHlwZS5pc0ludGVyc2VjdGlvbihwYXJhbVR5cGUuZWxlbWVudHNUeXBlKSB8fFxuICAgICAgQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSlcbiAgICAgID8gYCgke2VsZW1lbnRzVHlwZX0pW11gXG4gICAgICA6IGAke2VsZW1lbnRzVHlwZX1bXWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzUmVmKHBhcmFtVHlwZSkpIHtcbiAgICBpZiAoIVtcIlBpY2tcIiwgXCJPbWl0XCIsIFwiUHJvbWlzZVwiLCBcIlBhcnRpYWxcIiwgXCJEYXRlXCJdLmluY2x1ZGVzKHBhcmFtVHlwZS5pZCkpIHtcbiAgICAgIC8vIGltcG9ydEtleXMg7J247KCd7IWYXG4gICAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocGFyYW1UeXBlLmlkKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtVHlwZS5hcmdzID09PSB1bmRlZmluZWQgfHwgcGFyYW1UeXBlLmFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcGFyYW1UeXBlLmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7cGFyYW1UeXBlLmlkfTwke3BhcmFtVHlwZS5hcmdzXG4gICAgICAgIC5tYXAoKGFyZykgPT4gYXBpUGFyYW1UeXBlVG9Uc1R5cGUoYXJnLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCIsXCIpfT5gO1xuICAgIH1cbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbmRleGVkQWNjZXNzKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYCR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUoXG4gICAgICBwYXJhbVR5cGUub2JqZWN0LFxuICAgICAgaW5qZWN0SW1wb3J0S2V5cyxcbiAgICApfVske2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZS5pbmRleCwgaW5qZWN0SW1wb3J0S2V5cyl9XWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVHVwbGVUeXBlKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFsgJHtwYXJhbVR5cGUuZWxlbWVudHMubWFwKChlbGVtKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZShlbGVtLCBpbmplY3RJbXBvcnRLZXlzKSl9IF1gO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc1R5cGVQYXJhbShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGAke3BhcmFtVHlwZS5pZH0ke1xuICAgICAgcGFyYW1UeXBlLmNvbnN0cmFpbnRcbiAgICAgICAgPyBgIGV4dGVuZHMgJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwYXJhbVR5cGUuY29uc3RyYWludCwgaW5qZWN0SW1wb3J0S2V5cyl9YFxuICAgICAgICA6IFwiXCJcbiAgICB9YDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlc29sdmUg67aI6rCAIEFwaVBhcmFtVHlwZSAke3BhcmFtVHlwZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwaVBhcmFtIOuwsOyXtOydhCBUeXBlU2NyaXB0IO2VqOyImCDtjIzrnbzrr7jthLAg7L2U65Oc66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyYiDogXCJuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZVwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtczogQXBpUGFyYW1bXSwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gcGFyYW1zXG4gICAgLm1hcCgocGFyYW0pID0+IHtcbiAgICAgIHJldHVybiBgJHtwYXJhbS5uYW1lfSR7XG4gICAgICAgIHBhcmFtLm9wdGlvbmFsICYmICFwYXJhbS5kZWZhdWx0RGVmID8gXCI/XCIgOiBcIlwiXG4gICAgICB9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtLnR5cGUsIGluamVjdEltcG9ydEtleXMpfSR7XG4gICAgICAgIHBhcmFtLmRlZmF1bHREZWYgPyBgPSAke3BhcmFtLmRlZmF1bHREZWZ9YCA6IFwiXCJcbiAgICAgIH1gO1xuICAgIH0pXG4gICAgLmpvaW4oXCIsIFwiKTtcbn1cblxuLyoqXG4gKiBBcGlQYXJhbSDrsLDsl7TsnYQgVHlwZVNjcmlwdCDqsJ3ssrQg7YOA7J6FIOy9lOuTnOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiDsmIg6IFwieyBuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZSB9XCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVG9Uc0NvZGVBc09iamVjdChwYXJhbXM6IEFwaVBhcmFtW10sIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB7ICR7cGFyYW1zXG4gICAgLm1hcChcbiAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgYCR7cGFyYW0ubmFtZX0ke3BhcmFtLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwifTogJHthcGlQYXJhbVR5cGVUb1RzVHlwZShcbiAgICAgICAgICBwYXJhbS50eXBlLFxuICAgICAgICAgIGluamVjdEltcG9ydEtleXMsXG4gICAgICAgICl9JHtwYXJhbS5kZWZhdWx0RGVmID8gYD0gJHtwYXJhbS5kZWZhdWx0RGVmfWAgOiBcIlwifWAsXG4gICAgKVxuICAgIC5qb2luKFwiLCBcIil9IH1gO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0RkEsU0FBZ0Isa0JBQXlCLE9BQTRCO0NBQ25FLE1BQU0sU0FBUyxtQkFBbUIsVUFBVSxLQUFLO0NBQ2pELElBQUksQ0FBQyxPQUFPLFNBQ1YsTUFBTSxJQUFJLE1BQU0sNEJBQTRCLEVBQUUsY0FBYyxPQUFPLEtBQUssR0FBRztDQUU3RSxPQUFPLE9BQU87QUFDaEI7Ozs7O0FBTUEsU0FBZ0Isa0JBQWtCLFdBQXlCO0NBQ3pELElBQUksYUFBYSxVQUFVLFNBQVMsR0FDbEMsT0FBTyxVQUFVLE9BQU87TUFFeEIsT0FBTztBQUVYOzs7Ozs7QUFXQSxTQUFnQiwyQkFDZCxPQUNBLFlBR1c7Q0FDWCxNQUFNLFlBQVksa0JBQWtCLEtBQUs7Q0FDekMsUUFBUSxXQUFSO0VBQ0UsS0FBSyxVQUNILE9BQU8sRUFBRSxPQUFPO0VBQ2xCLEtBQUssVUFDSCxPQUFPLEVBQUUsT0FBTztFQUNsQixLQUFLLFdBQ0gsT0FBTyxFQUFFLFFBQVE7RUFDbkIsU0FBUztHQUNQLE1BQU0sVUFDbUQ7R0FJekQsUUFBUSxRQUFRLEdBQWhCO0lBQ0UsS0FBSztJQUNMLEtBQUssbUJBQ0gsT0FBTyxFQUFFLFFBQVEsUUFBUSxLQUFLO0lBQ2hDLEtBQUssVUFNSCxPQUFPLDBCQUEwQixVQUFRLEtBQUs7SUFFaEQsS0FBSyxTQUFTO0tBQ1osTUFBTSxVQUNtRDtLQUl6RCxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsUUFBUSxjQUFjLFVBQVUsQ0FBQztJQUM3RTtJQUNBLEtBQUssT0FBTztLQUNWLE1BQU0sVUFDbUQ7S0FNekQsSUFBSSxRQUFRLE9BQU8sUUFDakIsT0FBTyxFQUFFLEtBQUs7S0FH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
@@ -52,6 +52,15 @@ export type SonamuTestConfig = {
52
52
  /** Dev 서버 내 Vitest 상주 인스턴스 설정 */
53
53
  devRunner?: SonamuDevRunnerConfig;
54
54
  };
55
+ export type ZodCompilerApiMode = false | "jit" | "aot";
56
+ export type ZodCompilerConfig = false | {
57
+ api?: ZodCompilerApiMode;
58
+ };
59
+ export type NormalizedZodCompilerPolicy = {
60
+ api: ZodCompilerApiMode;
61
+ targets: Record<string, never>;
62
+ };
63
+ export declare function normalizeZodCompilerPolicy<Value>(value: Value, _syncTargets?: readonly string[]): NormalizedZodCompilerPolicy;
55
64
  export type SonamuConfig<TSinkId extends string = string, TFilterId extends string = string> = {
56
65
  projectName?: string;
57
66
  api: {
@@ -76,6 +85,9 @@ export type SonamuConfig<TSinkId extends string = string, TFilterId extends stri
76
85
  sync: {
77
86
  targets: string[];
78
87
  };
88
+ validation?: {
89
+ zodCompiler?: ZodCompilerConfig;
90
+ };
79
91
  database: {
80
92
  database?: "pg" | "pgnative";
81
93
  defaultOptions?: DatabaseConfig;
@@ -240,5 +252,8 @@ export declare function defineConfig(config: Executable<SonamuConfig>): Promise<
240
252
  * @param rootPath
241
253
  * @returns
242
254
  */
243
- export declare function loadConfig(rootPath: string): Promise<SonamuConfig>;
255
+ export interface ConfigLoaderDependencies {
256
+ ensureTsLoaderRegistered(rootPath: string): Promise<void>;
257
+ }
258
+ export declare function loadConfig(rootPath: string, dependencies?: ConfigLoaderDependencies): Promise<SonamuConfig>;
244
259
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}