sonamu 0.8.26 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (684) hide show
  1. package/bin/cli.js +60 -13
  2. package/dist/_virtual/rolldown_runtime.js +39 -0
  3. package/dist/ai/agents/agent.d.ts +3 -3
  4. package/dist/ai/agents/agent.d.ts.map +1 -1
  5. package/dist/ai/agents/agent.js +76 -73
  6. package/dist/ai/agents/index.js +3 -3
  7. package/dist/ai/agents/types.d.ts +3 -3
  8. package/dist/ai/agents/types.d.ts.map +1 -1
  9. package/dist/ai/agents/types.js +1 -3
  10. package/dist/ai/index.js +3 -2
  11. package/dist/ai/providers/rtzr/api.js +25 -25
  12. package/dist/ai/providers/rtzr/error.js +25 -26
  13. package/dist/ai/providers/rtzr/index.js +5 -5
  14. package/dist/ai/providers/rtzr/model.d.ts +1 -1
  15. package/dist/ai/providers/rtzr/model.d.ts.map +1 -1
  16. package/dist/ai/providers/rtzr/model.js +117 -133
  17. package/dist/ai/providers/rtzr/options.d.ts.map +1 -1
  18. package/dist/ai/providers/rtzr/options.js +35 -41
  19. package/dist/ai/providers/rtzr/provider.d.ts +1 -1
  20. package/dist/ai/providers/rtzr/provider.d.ts.map +1 -1
  21. package/dist/ai/providers/rtzr/provider.js +53 -51
  22. package/dist/ai/providers/rtzr/utils.d.ts.map +1 -1
  23. package/dist/ai/providers/rtzr/utils.js +84 -84
  24. package/dist/api/base-frame.d.ts +2 -2
  25. package/dist/api/base-frame.d.ts.map +1 -1
  26. package/dist/api/base-frame.js +29 -19
  27. package/dist/api/caster.d.ts +1 -1
  28. package/dist/api/caster.d.ts.map +1 -1
  29. package/dist/api/caster.js +51 -61
  30. package/dist/api/code-converters.d.ts +4 -3
  31. package/dist/api/code-converters.d.ts.map +1 -1
  32. package/dist/api/code-converters.js +226 -249
  33. package/dist/api/config.d.ts +17 -17
  34. package/dist/api/config.d.ts.map +1 -1
  35. package/dist/api/config.js +37 -30
  36. package/dist/api/context.d.ts +10 -10
  37. package/dist/api/context.d.ts.map +1 -1
  38. package/dist/api/context.js +8 -2
  39. package/dist/api/decorators.d.ts +8 -8
  40. package/dist/api/decorators.d.ts.map +1 -1
  41. package/dist/api/decorators.js +245 -268
  42. package/dist/api/index.js +39 -7
  43. package/dist/api/secret.js +22 -15
  44. package/dist/api/sonamu.d.ts +15 -15
  45. package/dist/api/sonamu.d.ts.map +1 -1
  46. package/dist/api/sonamu.js +1012 -1131
  47. package/dist/api/validator.js +88 -79
  48. package/dist/auth/auth-generator.d.ts.map +1 -1
  49. package/dist/auth/auth-generator.js +203 -200
  50. package/dist/auth/better-auth-entities.d.ts +2 -2
  51. package/dist/auth/better-auth-entities.d.ts.map +1 -1
  52. package/dist/auth/better-auth-entities.js +369 -429
  53. package/dist/auth/index.js +21 -6
  54. package/dist/auth/knex-adapter.d.ts +2 -2
  55. package/dist/auth/knex-adapter.d.ts.map +1 -1
  56. package/dist/auth/knex-adapter.js +153 -157
  57. package/dist/auth/plugins/entity-definitions/admin.d.ts +1 -1
  58. package/dist/auth/plugins/entity-definitions/admin.d.ts.map +1 -1
  59. package/dist/auth/plugins/entity-definitions/admin.js +58 -56
  60. package/dist/auth/plugins/entity-definitions/anonymous.d.ts +1 -1
  61. package/dist/auth/plugins/entity-definitions/anonymous.d.ts.map +1 -1
  62. package/dist/auth/plugins/entity-definitions/anonymous.js +20 -20
  63. package/dist/auth/plugins/entity-definitions/api-key.d.ts +1 -1
  64. package/dist/auth/plugins/entity-definitions/api-key.d.ts.map +1 -1
  65. package/dist/auth/plugins/entity-definitions/api-key.js +185 -196
  66. package/dist/auth/plugins/entity-definitions/index.d.ts +1 -1
  67. package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
  68. package/dist/auth/plugins/entity-definitions/index.js +26 -29
  69. package/dist/auth/plugins/entity-definitions/jwt.d.ts +1 -1
  70. package/dist/auth/plugins/entity-definitions/jwt.d.ts.map +1 -1
  71. package/dist/auth/plugins/entity-definitions/jwt.js +62 -64
  72. package/dist/auth/plugins/entity-definitions/organization.d.ts +1 -1
  73. package/dist/auth/plugins/entity-definitions/organization.d.ts.map +1 -1
  74. package/dist/auth/plugins/entity-definitions/organization.js +362 -421
  75. package/dist/auth/plugins/entity-definitions/passkey.d.ts +1 -1
  76. package/dist/auth/plugins/entity-definitions/passkey.d.ts.map +1 -1
  77. package/dist/auth/plugins/entity-definitions/passkey.js +115 -126
  78. package/dist/auth/plugins/entity-definitions/phone-number.d.ts +1 -1
  79. package/dist/auth/plugins/entity-definitions/phone-number.d.ts.map +1 -1
  80. package/dist/auth/plugins/entity-definitions/phone-number.js +31 -40
  81. package/dist/auth/plugins/entity-definitions/sso.d.ts +1 -1
  82. package/dist/auth/plugins/entity-definitions/sso.d.ts.map +1 -1
  83. package/dist/auth/plugins/entity-definitions/sso.js +94 -107
  84. package/dist/auth/plugins/entity-definitions/two-factor.d.ts +1 -1
  85. package/dist/auth/plugins/entity-definitions/two-factor.d.ts.map +1 -1
  86. package/dist/auth/plugins/entity-definitions/two-factor.js +78 -92
  87. package/dist/auth/plugins/entity-definitions/types.d.ts +1 -1
  88. package/dist/auth/plugins/entity-definitions/types.d.ts.map +1 -1
  89. package/dist/auth/plugins/entity-definitions/types.js +1 -10
  90. package/dist/auth/plugins/entity-definitions/username.d.ts +1 -1
  91. package/dist/auth/plugins/entity-definitions/username.d.ts.map +1 -1
  92. package/dist/auth/plugins/entity-definitions/username.js +31 -40
  93. package/dist/auth/plugins/index.js +12 -3
  94. package/dist/auth/plugins/wrappers/admin.d.ts +2 -2
  95. package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
  96. package/dist/auth/plugins/wrappers/admin.js +28 -29
  97. package/dist/auth/plugins/wrappers/anonymous.d.ts +2 -1
  98. package/dist/auth/plugins/wrappers/anonymous.d.ts.map +1 -1
  99. package/dist/auth/plugins/wrappers/anonymous.js +23 -22
  100. package/dist/auth/plugins/wrappers/api-key.d.ts +2 -1
  101. package/dist/auth/plugins/wrappers/api-key.d.ts.map +1 -1
  102. package/dist/auth/plugins/wrappers/api-key.js +39 -34
  103. package/dist/auth/plugins/wrappers/index.js +11 -11
  104. package/dist/auth/plugins/wrappers/jwt.d.ts +2 -1
  105. package/dist/auth/plugins/wrappers/jwt.d.ts.map +1 -1
  106. package/dist/auth/plugins/wrappers/jwt.js +31 -26
  107. package/dist/auth/plugins/wrappers/organization.d.ts +2 -1
  108. package/dist/auth/plugins/wrappers/organization.d.ts.map +1 -1
  109. package/dist/auth/plugins/wrappers/organization.js +65 -62
  110. package/dist/auth/plugins/wrappers/passkey.d.ts +2 -1
  111. package/dist/auth/plugins/wrappers/passkey.d.ts.map +1 -1
  112. package/dist/auth/plugins/wrappers/passkey.js +33 -28
  113. package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
  114. package/dist/auth/plugins/wrappers/phone-number.js +26 -23
  115. package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
  116. package/dist/auth/plugins/wrappers/sso.js +37 -31
  117. package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
  118. package/dist/auth/plugins/wrappers/two-factor.js +31 -28
  119. package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
  120. package/dist/auth/plugins/wrappers/username.js +23 -23
  121. package/dist/bin/build-config.js +31 -31
  122. package/dist/bin/cli.js +1063 -1204
  123. package/dist/bin/fixture.d.ts.map +1 -1
  124. package/dist/bin/fixture.js +266 -259
  125. package/dist/bin/hmr-hook-register.d.ts.map +1 -1
  126. package/dist/bin/hmr-hook-register.js +19 -18
  127. package/dist/bin/test-command.d.ts.map +1 -1
  128. package/dist/bin/test-command.js +180 -177
  129. package/dist/bin/ts-loader-register.js +13 -6
  130. package/dist/bin/ts-loader-registration.d.ts.map +1 -1
  131. package/dist/bin/ts-loader-registration.js +28 -38
  132. package/dist/cache/cache-manager.d.ts +1 -1
  133. package/dist/cache/cache-manager.d.ts.map +1 -1
  134. package/dist/cache/cache-manager.js +20 -15
  135. package/dist/cache/decorator.d.ts +1 -1
  136. package/dist/cache/decorator.d.ts.map +1 -1
  137. package/dist/cache/decorator.js +84 -76
  138. package/dist/cache/drivers.js +21 -34
  139. package/dist/cache/index.js +10 -7
  140. package/dist/cache/types.d.ts +2 -2
  141. package/dist/cache/types.d.ts.map +1 -1
  142. package/dist/cache/types.js +1 -6
  143. package/dist/cache-control/cache-control.d.ts +2 -2
  144. package/dist/cache-control/cache-control.d.ts.map +1 -1
  145. package/dist/cache-control/cache-control.js +106 -122
  146. package/dist/cache-control/types.d.ts +2 -2
  147. package/dist/cache-control/types.d.ts.map +1 -1
  148. package/dist/cache-control/types.js +1 -19
  149. package/dist/compress/compress.d.ts +1 -1
  150. package/dist/compress/compress.d.ts.map +1 -1
  151. package/dist/compress/compress.js +58 -56
  152. package/dist/compress/index.js +7 -2
  153. package/dist/compress/types.js +1 -11
  154. package/dist/cone/cone-generator.d.ts +1 -1
  155. package/dist/cone/cone-generator.d.ts.map +1 -1
  156. package/dist/cone/cone-generator.js +216 -219
  157. package/dist/database/_batch_update.d.ts +1 -1
  158. package/dist/database/_batch_update.d.ts.map +1 -1
  159. package/dist/database/_batch_update.js +107 -102
  160. package/dist/database/base-model.d.ts +8 -9
  161. package/dist/database/base-model.d.ts.map +1 -1
  162. package/dist/database/base-model.js +371 -392
  163. package/dist/database/base-model.types.d.ts +5 -5
  164. package/dist/database/base-model.types.d.ts.map +1 -1
  165. package/dist/database/base-model.types.js +1 -20
  166. package/dist/database/db.d.ts +5 -2
  167. package/dist/database/db.d.ts.map +1 -1
  168. package/dist/database/db.js +185 -171
  169. package/dist/database/knex.d.ts +1 -1
  170. package/dist/database/knex.d.ts.map +1 -1
  171. package/dist/database/knex.js +48 -42
  172. package/dist/database/puri-subset.types.d.ts +6 -7
  173. package/dist/database/puri-subset.types.d.ts.map +1 -1
  174. package/dist/database/puri-subset.types.js +1 -16
  175. package/dist/database/puri-wrapper.d.ts +6 -6
  176. package/dist/database/puri-wrapper.d.ts.map +1 -1
  177. package/dist/database/puri-wrapper.js +99 -101
  178. package/dist/database/puri.d.ts +4 -5
  179. package/dist/database/puri.d.ts.map +1 -1
  180. package/dist/database/puri.js +1021 -1227
  181. package/dist/database/puri.types.d.ts +6 -6
  182. package/dist/database/puri.types.d.ts.map +1 -1
  183. package/dist/database/puri.types.js +15 -6
  184. package/dist/database/transaction-context.d.ts +2 -2
  185. package/dist/database/transaction-context.d.ts.map +1 -1
  186. package/dist/database/transaction-context.js +22 -13
  187. package/dist/database/upsert-builder.d.ts +3 -3
  188. package/dist/database/upsert-builder.d.ts.map +1 -1
  189. package/dist/database/upsert-builder.js +405 -465
  190. package/dist/dict/en.js +72 -74
  191. package/dist/dict/index.js +13 -13
  192. package/dist/dict/ko.js +72 -74
  193. package/dist/dict/rc-keys.js +150 -168
  194. package/dist/dict/sd.d.ts +3 -1
  195. package/dist/dict/sd.d.ts.map +1 -1
  196. package/dist/dict/sd.js +54 -40
  197. package/dist/dict/sonamu-dictionary.d.ts +1 -1
  198. package/dist/dict/sonamu-dictionary.d.ts.map +1 -1
  199. package/dist/dict/sonamu-dictionary.js +887 -955
  200. package/dist/dict/types.js +1 -7
  201. package/dist/dict/utils.js +26 -24
  202. package/dist/entity/entity-manager.d.ts +9 -9
  203. package/dist/entity/entity-manager.d.ts.map +1 -1
  204. package/dist/entity/entity-manager.js +226 -223
  205. package/dist/entity/entity-template-cone.d.ts +1 -1
  206. package/dist/entity/entity-template-cone.d.ts.map +1 -1
  207. package/dist/entity/entity-template-cone.js +152 -151
  208. package/dist/entity/entity.d.ts.map +1 -1
  209. package/dist/entity/entity.js +952 -1089
  210. package/dist/exceptions/error-handler.d.ts +1 -1
  211. package/dist/exceptions/error-handler.d.ts.map +1 -1
  212. package/dist/exceptions/error-handler.js +32 -27
  213. package/dist/exceptions/so-exceptions.d.ts +1 -1
  214. package/dist/exceptions/so-exceptions.d.ts.map +1 -1
  215. package/dist/exceptions/so-exceptions.js +61 -68
  216. package/dist/filter/index.js +9 -3
  217. package/dist/filter/types.js +92 -88
  218. package/dist/filter/utils.d.ts +1 -1
  219. package/dist/filter/utils.d.ts.map +1 -1
  220. package/dist/filter/utils.js +147 -161
  221. package/dist/index.js +87 -40
  222. package/dist/logger/category.d.ts.map +1 -1
  223. package/dist/logger/category.js +30 -29
  224. package/dist/logger/configure.d.ts.map +1 -1
  225. package/dist/logger/configure.js +83 -107
  226. package/dist/migration/code-generation.d.ts +2 -2
  227. package/dist/migration/code-generation.d.ts.map +1 -1
  228. package/dist/migration/code-generation.js +1385 -1578
  229. package/dist/migration/migration-set.d.ts +1 -1
  230. package/dist/migration/migration-set.d.ts.map +1 -1
  231. package/dist/migration/migration-set.js +177 -227
  232. package/dist/migration/migrator.d.ts +4 -3
  233. package/dist/migration/migrator.d.ts.map +1 -1
  234. package/dist/migration/migrator.js +340 -345
  235. package/dist/migration/postgresql-schema-reader.d.ts +2 -2
  236. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  237. package/dist/migration/postgresql-schema-reader.js +506 -564
  238. package/dist/migration/slack-confirm.d.ts +2 -2
  239. package/dist/migration/slack-confirm.d.ts.map +1 -1
  240. package/dist/migration/slack-confirm.js +205 -193
  241. package/dist/migration/types.d.ts +2 -2
  242. package/dist/migration/types.d.ts.map +1 -1
  243. package/dist/migration/types.js +1 -3
  244. package/dist/naite/messaging-types.d.ts +1 -0
  245. package/dist/naite/messaging-types.d.ts.map +1 -1
  246. package/dist/naite/messaging-types.js +1 -7
  247. package/dist/naite/naite-reporter.d.ts +2 -2
  248. package/dist/naite/naite-reporter.d.ts.map +1 -1
  249. package/dist/naite/naite-reporter.js +127 -120
  250. package/dist/naite/naite.d.ts +3 -2
  251. package/dist/naite/naite.d.ts.map +1 -1
  252. package/dist/naite/naite.js +266 -300
  253. package/dist/ssr/index.d.ts +2 -2
  254. package/dist/ssr/index.d.ts.map +1 -1
  255. package/dist/ssr/index.js +13 -3
  256. package/dist/ssr/registry.d.ts +1 -1
  257. package/dist/ssr/registry.d.ts.map +1 -1
  258. package/dist/ssr/registry.js +45 -37
  259. package/dist/ssr/renderer.d.ts +4 -4
  260. package/dist/ssr/renderer.d.ts.map +1 -1
  261. package/dist/ssr/renderer.js +84 -91
  262. package/dist/ssr/types.d.ts +2 -2
  263. package/dist/ssr/types.d.ts.map +1 -1
  264. package/dist/ssr/types.js +1 -3
  265. package/dist/storage/base-file.js +54 -41
  266. package/dist/storage/buffered-file.d.ts +2 -2
  267. package/dist/storage/buffered-file.d.ts.map +1 -1
  268. package/dist/storage/buffered-file.js +51 -44
  269. package/dist/storage/drivers.d.ts +2 -2
  270. package/dist/storage/drivers.d.ts.map +1 -1
  271. package/dist/storage/drivers.js +12 -7
  272. package/dist/storage/index.js +14 -7
  273. package/dist/storage/s3-driver.d.ts +2 -2
  274. package/dist/storage/s3-driver.d.ts.map +1 -1
  275. package/dist/storage/s3-driver.js +52 -48
  276. package/dist/storage/storage-manager.d.ts +2 -2
  277. package/dist/storage/storage-manager.d.ts.map +1 -1
  278. package/dist/storage/storage-manager.js +33 -25
  279. package/dist/storage/types.d.ts +2 -2
  280. package/dist/storage/types.d.ts.map +1 -1
  281. package/dist/storage/types.js +1 -5
  282. package/dist/storage/uploaded-file.d.ts +1 -1
  283. package/dist/storage/uploaded-file.d.ts.map +1 -1
  284. package/dist/storage/uploaded-file.js +45 -35
  285. package/dist/stream/index.js +7 -2
  286. package/dist/stream/sse.d.ts +2 -2
  287. package/dist/stream/sse.d.ts.map +1 -1
  288. package/dist/stream/sse.js +72 -67
  289. package/dist/syncer/api-parser.d.ts +1 -1
  290. package/dist/syncer/api-parser.d.ts.map +1 -1
  291. package/dist/syncer/api-parser.js +224 -245
  292. package/dist/syncer/checksum.d.ts +1 -1
  293. package/dist/syncer/checksum.d.ts.map +1 -1
  294. package/dist/syncer/checksum.js +86 -72
  295. package/dist/syncer/code-generator.d.ts +2 -2
  296. package/dist/syncer/code-generator.d.ts.map +1 -1
  297. package/dist/syncer/code-generator.js +154 -160
  298. package/dist/syncer/entity-operations.d.ts +1 -1
  299. package/dist/syncer/entity-operations.d.ts.map +1 -1
  300. package/dist/syncer/entity-operations.js +63 -54
  301. package/dist/syncer/file-patterns.d.ts +1 -1
  302. package/dist/syncer/file-patterns.d.ts.map +1 -1
  303. package/dist/syncer/file-patterns.js +38 -38
  304. package/dist/syncer/index.js +19 -8
  305. package/dist/syncer/module-loader.d.ts +5 -5
  306. package/dist/syncer/module-loader.d.ts.map +1 -1
  307. package/dist/syncer/module-loader.js +83 -78
  308. package/dist/syncer/syncer-actions.d.ts +2 -2
  309. package/dist/syncer/syncer-actions.d.ts.map +1 -1
  310. package/dist/syncer/syncer-actions.js +76 -91
  311. package/dist/syncer/syncer.d.ts +7 -6
  312. package/dist/syncer/syncer.d.ts.map +1 -1
  313. package/dist/syncer/syncer.js +426 -492
  314. package/dist/tasks/decorator.d.ts +3 -3
  315. package/dist/tasks/decorator.d.ts.map +1 -1
  316. package/dist/tasks/decorator.js +32 -28
  317. package/dist/tasks/step-wrapper.d.ts +1 -1
  318. package/dist/tasks/step-wrapper.d.ts.map +1 -1
  319. package/dist/tasks/step-wrapper.js +42 -41
  320. package/dist/tasks/workflow-manager.d.ts +2 -2
  321. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  322. package/dist/tasks/workflow-manager.js +192 -221
  323. package/dist/template/entity-converter.d.ts +1 -1
  324. package/dist/template/entity-converter.d.ts.map +1 -1
  325. package/dist/template/entity-converter.js +103 -103
  326. package/dist/template/helpers.d.ts.map +1 -1
  327. package/dist/template/helpers.js +163 -163
  328. package/dist/template/implementations/entity.template.d.ts +1 -1
  329. package/dist/template/implementations/entity.template.d.ts.map +1 -1
  330. package/dist/template/implementations/entity.template.js +76 -85
  331. package/dist/template/implementations/entry-server.template.d.ts +1 -1
  332. package/dist/template/implementations/entry-server.template.d.ts.map +1 -1
  333. package/dist/template/implementations/entry-server.template.js +32 -27
  334. package/dist/template/implementations/generated.template.d.ts +1 -1
  335. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  336. package/dist/template/implementations/generated.template.js +254 -275
  337. package/dist/template/implementations/generated_http.template.d.ts +2 -2
  338. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  339. package/dist/template/implementations/generated_http.template.js +114 -133
  340. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  341. package/dist/template/implementations/generated_sso.template.js +249 -275
  342. package/dist/template/implementations/init_types.template.d.ts +1 -1
  343. package/dist/template/implementations/init_types.template.d.ts.map +1 -1
  344. package/dist/template/implementations/init_types.template.js +40 -34
  345. package/dist/template/implementations/model.template.d.ts +1 -1
  346. package/dist/template/implementations/model.template.d.ts.map +1 -1
  347. package/dist/template/implementations/model.template.js +56 -53
  348. package/dist/template/implementations/model_test.template.d.ts +1 -1
  349. package/dist/template/implementations/model_test.template.d.ts.map +1 -1
  350. package/dist/template/implementations/model_test.template.js +32 -24
  351. package/dist/template/implementations/queries.template.d.ts +1 -1
  352. package/dist/template/implementations/queries.template.d.ts.map +1 -1
  353. package/dist/template/implementations/queries.template.js +84 -89
  354. package/dist/template/implementations/sd.template.d.ts +1 -1
  355. package/dist/template/implementations/sd.template.d.ts.map +1 -1
  356. package/dist/template/implementations/sd.template.js +137 -144
  357. package/dist/template/implementations/services.template.d.ts +1 -1
  358. package/dist/template/implementations/services.template.d.ts.map +1 -1
  359. package/dist/template/implementations/services.template.js +164 -189
  360. package/dist/template/implementations/view_form.template.d.ts +1 -1
  361. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  362. package/dist/template/implementations/view_form.template.js +258 -285
  363. package/dist/template/implementations/view_id_all_select.template.d.ts +1 -1
  364. package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -1
  365. package/dist/template/implementations/view_id_all_select.template.js +31 -25
  366. package/dist/template/implementations/view_list.template.d.ts +1 -1
  367. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  368. package/dist/template/implementations/view_list.template.js +304 -355
  369. package/dist/template/implementations/view_search_input.template.d.ts +1 -1
  370. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
  371. package/dist/template/implementations/view_search_input.template.js +31 -27
  372. package/dist/template/index.js +21 -7
  373. package/dist/template/template-manager.d.ts +1 -1
  374. package/dist/template/template-manager.d.ts.map +1 -1
  375. package/dist/template/template-manager.js +132 -123
  376. package/dist/template/template-types.js +8 -6
  377. package/dist/template/template.d.ts +2 -2
  378. package/dist/template/template.d.ts.map +1 -1
  379. package/dist/template/template.js +73 -68
  380. package/dist/template/zod-converter.d.ts.map +1 -1
  381. package/dist/template/zod-converter.js +603 -657
  382. package/dist/testing/_relation-graph.d.ts +1 -1
  383. package/dist/testing/_relation-graph.d.ts.map +1 -1
  384. package/dist/testing/_relation-graph.js +93 -88
  385. package/dist/testing/bootstrap.d.ts +22 -13
  386. package/dist/testing/bootstrap.d.ts.map +1 -1
  387. package/dist/testing/bootstrap.js +114 -114
  388. package/dist/testing/data-explorer.d.ts +3 -3
  389. package/dist/testing/data-explorer.d.ts.map +1 -1
  390. package/dist/testing/data-explorer.js +237 -265
  391. package/dist/testing/dev-test-routes.d.ts +2 -2
  392. package/dist/testing/dev-test-routes.d.ts.map +1 -1
  393. package/dist/testing/dev-test-routes.js +258 -249
  394. package/dist/testing/dev-vitest-manager.d.ts +1 -1
  395. package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
  396. package/dist/testing/dev-vitest-manager.js +514 -539
  397. package/dist/testing/faker-mappings.js +422 -420
  398. package/dist/testing/fixture-generator.d.ts +3 -3
  399. package/dist/testing/fixture-generator.d.ts.map +1 -1
  400. package/dist/testing/fixture-generator.js +1216 -1346
  401. package/dist/testing/fixture-loader.js +26 -25
  402. package/dist/testing/fixture-manager.d.ts +3 -3
  403. package/dist/testing/fixture-manager.d.ts.map +1 -1
  404. package/dist/testing/fixture-manager.js +706 -776
  405. package/dist/testing/global-setup.js +53 -49
  406. package/dist/testing/index.js +19 -11
  407. package/dist/testing/naite-vitest-reporter.js +18 -13
  408. package/dist/testing/parallel-db-manager.d.ts +1 -1
  409. package/dist/testing/parallel-db-manager.d.ts.map +1 -1
  410. package/dist/testing/parallel-db-manager.js +63 -78
  411. package/dist/testing/vitest-helpers.d.ts +1 -1
  412. package/dist/testing/vitest-helpers.d.ts.map +1 -1
  413. package/dist/testing/vitest-helpers.js +37 -33
  414. package/dist/types/types.d.ts +28 -28
  415. package/dist/types/types.d.ts.map +1 -1
  416. package/dist/types/types.js +764 -890
  417. package/dist/ui/ai-api.d.ts +1 -1
  418. package/dist/ui/ai-api.d.ts.map +1 -1
  419. package/dist/ui/ai-api.js +52 -42
  420. package/dist/ui/ai-client.d.ts +1 -2
  421. package/dist/ui/ai-client.d.ts.map +1 -1
  422. package/dist/ui/ai-client.js +353 -388
  423. package/dist/ui/api.d.ts +1 -1
  424. package/dist/ui/api.d.ts.map +1 -1
  425. package/dist/ui/api.js +903 -1145
  426. package/dist/ui/cdd-service.d.ts +1 -1
  427. package/dist/ui/cdd-service.d.ts.map +1 -1
  428. package/dist/ui/cdd-service.js +406 -407
  429. package/dist/ui/cdd-types.js +1 -3
  430. package/dist/ui-web/assets/index-C-Zz-wYg.css +1 -0
  431. package/dist/ui-web/assets/index-DejDON8K.js +238 -0
  432. package/dist/ui-web/index.html +3 -3
  433. package/dist/utils/async-utils.js +57 -45
  434. package/dist/utils/console-util.d.ts.map +1 -1
  435. package/dist/utils/console-util.js +104 -87
  436. package/dist/utils/controller.js +26 -19
  437. package/dist/utils/esm-utils.js +49 -38
  438. package/dist/utils/formatter.d.ts +1 -2
  439. package/dist/utils/formatter.d.ts.map +1 -1
  440. package/dist/utils/formatter.js +89 -115
  441. package/dist/utils/fs-utils.d.ts.map +1 -1
  442. package/dist/utils/fs-utils.js +68 -65
  443. package/dist/utils/lodash-able.js +11 -4
  444. package/dist/utils/model.d.ts +1 -1
  445. package/dist/utils/model.d.ts.map +1 -1
  446. package/dist/utils/model.js +21 -19
  447. package/dist/utils/object-utils.js +148 -186
  448. package/dist/utils/path-utils.js +67 -57
  449. package/dist/utils/process-utils.d.ts.map +1 -1
  450. package/dist/utils/process-utils.js +37 -31
  451. package/dist/utils/sql-parser.d.ts +1 -1
  452. package/dist/utils/sql-parser.d.ts.map +1 -1
  453. package/dist/utils/sql-parser.js +40 -40
  454. package/dist/utils/type-utils.js +44 -43
  455. package/dist/utils/utils.d.ts +2 -3
  456. package/dist/utils/utils.d.ts.map +1 -1
  457. package/dist/utils/utils.js +81 -93
  458. package/dist/utils/zod-error.d.ts +1 -1
  459. package/dist/utils/zod-error.d.ts.map +1 -1
  460. package/dist/utils/zod-error.js +24 -17
  461. package/dist/vector/chunking.d.ts +1 -1
  462. package/dist/vector/chunking.d.ts.map +1 -1
  463. package/dist/vector/chunking.js +100 -94
  464. package/dist/vector/config.d.ts +1 -1
  465. package/dist/vector/config.d.ts.map +1 -1
  466. package/dist/vector/config.js +76 -78
  467. package/dist/vector/embedding.d.ts +1 -1
  468. package/dist/vector/embedding.d.ts.map +1 -1
  469. package/dist/vector/embedding.js +128 -125
  470. package/dist/vector/index.js +5 -5
  471. package/dist/vector/types.js +1 -5
  472. package/package.json +31 -36
  473. package/src/ai/agents/agent.ts +12 -5
  474. package/src/ai/agents/types.ts +5 -5
  475. package/src/ai/providers/rtzr/model.ts +8 -10
  476. package/src/ai/providers/rtzr/options.ts +2 -1
  477. package/src/ai/providers/rtzr/provider.ts +5 -3
  478. package/src/ai/providers/rtzr/utils.ts +2 -7
  479. package/src/api/__tests__/config.test.ts +15 -8
  480. package/src/api/base-frame.ts +5 -3
  481. package/src/api/caster.ts +7 -6
  482. package/src/api/code-converters.ts +23 -26
  483. package/src/api/config.ts +23 -17
  484. package/src/api/context.ts +18 -11
  485. package/src/api/decorators.ts +17 -18
  486. package/src/api/sonamu.ts +44 -49
  487. package/src/auth/auth-generator.ts +4 -6
  488. package/src/auth/better-auth-entities.ts +3 -2
  489. package/src/auth/knex-adapter.ts +6 -5
  490. package/src/auth/plugins/entity-definitions/admin.ts +1 -1
  491. package/src/auth/plugins/entity-definitions/anonymous.ts +1 -1
  492. package/src/auth/plugins/entity-definitions/api-key.ts +1 -1
  493. package/src/auth/plugins/entity-definitions/index.ts +1 -1
  494. package/src/auth/plugins/entity-definitions/jwt.ts +1 -1
  495. package/src/auth/plugins/entity-definitions/organization.ts +1 -1
  496. package/src/auth/plugins/entity-definitions/passkey.ts +1 -1
  497. package/src/auth/plugins/entity-definitions/phone-number.ts +1 -1
  498. package/src/auth/plugins/entity-definitions/sso.ts +1 -1
  499. package/src/auth/plugins/entity-definitions/two-factor.ts +1 -1
  500. package/src/auth/plugins/entity-definitions/types.ts +1 -1
  501. package/src/auth/plugins/entity-definitions/username.ts +1 -1
  502. package/src/auth/plugins/wrappers/admin.ts +3 -1
  503. package/src/auth/plugins/wrappers/anonymous.ts +3 -1
  504. package/src/auth/plugins/wrappers/api-key.ts +3 -1
  505. package/src/auth/plugins/wrappers/jwt.ts +3 -1
  506. package/src/auth/plugins/wrappers/organization.ts +3 -1
  507. package/src/auth/plugins/wrappers/passkey.ts +3 -1
  508. package/src/auth/plugins/wrappers/phone-number.ts +3 -1
  509. package/src/auth/plugins/wrappers/sso.ts +2 -1
  510. package/src/auth/plugins/wrappers/two-factor.ts +3 -1
  511. package/src/auth/plugins/wrappers/username.ts +3 -1
  512. package/src/bin/__tests__/ts-loader-register.test.ts +7 -12
  513. package/src/bin/build-config.ts +3 -3
  514. package/src/bin/cli.ts +27 -25
  515. package/src/bin/fixture.ts +4 -2
  516. package/src/bin/hmr-hook-register.ts +1 -0
  517. package/src/bin/test-command.ts +4 -2
  518. package/src/bin/ts-loader-registration.ts +6 -22
  519. package/src/cache/cache-manager.ts +2 -1
  520. package/src/cache/decorator.ts +2 -2
  521. package/src/cache/types.ts +3 -3
  522. package/src/cache-control/cache-control.ts +3 -2
  523. package/src/cache-control/types.ts +2 -2
  524. package/src/compress/compress.ts +1 -1
  525. package/src/cone/cone-generator.ts +5 -3
  526. package/src/database/_batch_update.ts +1 -1
  527. package/src/database/base-model.ts +20 -14
  528. package/src/database/base-model.types.ts +12 -11
  529. package/src/database/db.ts +56 -21
  530. package/src/database/knex.ts +2 -2
  531. package/src/database/puri-subset.test-d.ts +33 -32
  532. package/src/database/puri-subset.types.ts +6 -7
  533. package/src/database/puri-wrapper.ts +29 -26
  534. package/src/database/puri.ts +36 -34
  535. package/src/database/puri.types.test-d.ts +6 -5
  536. package/src/database/puri.types.ts +9 -12
  537. package/src/database/transaction-context.ts +2 -2
  538. package/src/database/upsert-builder.ts +17 -10
  539. package/src/dict/sd.ts +17 -4
  540. package/src/dict/sonamu-dictionary.ts +23 -17
  541. package/src/entity/entity-manager.ts +9 -7
  542. package/src/entity/entity-template-cone.ts +10 -3
  543. package/src/entity/entity.ts +20 -16
  544. package/src/exceptions/error-handler.ts +2 -1
  545. package/src/exceptions/so-exceptions.ts +1 -1
  546. package/src/filter/utils.ts +3 -2
  547. package/src/logger/category.ts +1 -0
  548. package/src/logger/configure.ts +5 -5
  549. package/src/migration/__tests__/code-generation.search-text.test.ts +2 -3
  550. package/src/migration/code-generation.ts +26 -25
  551. package/src/migration/migration-set.ts +16 -18
  552. package/src/migration/migrator.ts +38 -33
  553. package/src/migration/postgresql-schema-reader.ts +12 -12
  554. package/src/migration/slack-confirm.ts +5 -4
  555. package/src/migration/types.ts +2 -2
  556. package/src/naite/messaging-types.ts +1 -1
  557. package/src/naite/naite-reporter.ts +5 -3
  558. package/src/naite/naite.ts +12 -7
  559. package/src/shared/app.shared.ts.txt +2 -2
  560. package/src/shared/web.shared.ts.txt +2 -2
  561. package/src/skills/AGENTS.md +19 -18
  562. package/src/skills/commands/sonamu-skills.md +9 -9
  563. package/src/skills/sonamu/SKILL.md +111 -104
  564. package/src/skills/sonamu/ai-agents.md +27 -26
  565. package/src/skills/sonamu/api.md +81 -69
  566. package/src/skills/sonamu/auth-migration.md +13 -27
  567. package/src/skills/sonamu/auth-plugins.md +41 -31
  568. package/src/skills/sonamu/auth.md +30 -24
  569. package/src/skills/sonamu/cdd.md +26 -17
  570. package/src/skills/sonamu/cone.md +50 -50
  571. package/src/skills/sonamu/config.md +74 -51
  572. package/src/skills/sonamu/create-sonamu.md +31 -19
  573. package/src/skills/sonamu/database.md +43 -26
  574. package/src/skills/sonamu/entity-basic.md +61 -61
  575. package/src/skills/sonamu/entity-relations.md +84 -80
  576. package/src/skills/sonamu/entity-validation-checklist.md +19 -15
  577. package/src/skills/sonamu/fixture-cli.md +52 -30
  578. package/src/skills/sonamu/framework-change.md +9 -7
  579. package/src/skills/sonamu/frontend.md +64 -82
  580. package/src/skills/sonamu/i18n.md +45 -37
  581. package/src/skills/sonamu/migration.md +54 -31
  582. package/src/skills/sonamu/model.md +98 -66
  583. package/src/skills/sonamu/naite.md +34 -32
  584. package/src/skills/sonamu/project-init.md +28 -8
  585. package/src/skills/sonamu/puri.md +82 -91
  586. package/src/skills/sonamu/scaffolding.md +44 -32
  587. package/src/skills/sonamu/skill-contribution.md +50 -45
  588. package/src/skills/sonamu/subset.md +13 -13
  589. package/src/skills/sonamu/tasks.md +73 -58
  590. package/src/skills/sonamu/testing-devrunner.md +56 -36
  591. package/src/skills/sonamu/testing.md +23 -58
  592. package/src/skills/sonamu/upsert.md +32 -31
  593. package/src/skills/sonamu/vector.md +37 -36
  594. package/src/ssr/index.ts +2 -12
  595. package/src/ssr/registry.ts +1 -1
  596. package/src/ssr/renderer.ts +7 -5
  597. package/src/ssr/types.ts +2 -2
  598. package/src/storage/buffered-file.ts +4 -2
  599. package/src/storage/drivers.ts +3 -2
  600. package/src/storage/s3-driver.ts +7 -4
  601. package/src/storage/storage-manager.ts +3 -2
  602. package/src/storage/types.ts +3 -2
  603. package/src/storage/uploaded-file.ts +1 -1
  604. package/src/stream/sse.ts +2 -2
  605. package/src/syncer/api-parser.ts +8 -5
  606. package/src/syncer/checksum.ts +9 -5
  607. package/src/syncer/code-generator.ts +16 -8
  608. package/src/syncer/entity-operations.ts +5 -3
  609. package/src/syncer/file-patterns.ts +2 -1
  610. package/src/syncer/module-loader.ts +9 -6
  611. package/src/syncer/syncer-actions.ts +5 -3
  612. package/src/syncer/syncer.ts +18 -24
  613. package/src/tasks/decorator.ts +10 -8
  614. package/src/tasks/step-wrapper.ts +1 -1
  615. package/src/tasks/workflow-manager.ts +18 -15
  616. package/src/template/__tests__/generated.template.search-text.test.ts +1 -0
  617. package/src/template/entity-converter.ts +4 -2
  618. package/src/template/generated.template.test-d.ts +2 -1
  619. package/src/template/helpers.ts +5 -2
  620. package/src/template/implementations/entity.template.ts +9 -8
  621. package/src/template/implementations/entry-server.template.ts +1 -1
  622. package/src/template/implementations/generated.template.ts +21 -29
  623. package/src/template/implementations/generated_http.template.ts +9 -6
  624. package/src/template/implementations/generated_sso.template.ts +6 -4
  625. package/src/template/implementations/init_types.template.ts +3 -2
  626. package/src/template/implementations/model.template.ts +4 -2
  627. package/src/template/implementations/model_test.template.ts +3 -2
  628. package/src/template/implementations/queries.template.ts +6 -14
  629. package/src/template/implementations/sd.template.ts +4 -2
  630. package/src/template/implementations/services.template.ts +7 -11
  631. package/src/template/implementations/view_form.template.ts +5 -3
  632. package/src/template/implementations/view_id_all_select.template.ts +3 -2
  633. package/src/template/implementations/view_list.template.ts +7 -5
  634. package/src/template/implementations/view_search_input.template.ts +3 -2
  635. package/src/template/template-manager.ts +4 -3
  636. package/src/template/template.ts +4 -3
  637. package/src/template/zod-converter.ts +10 -7
  638. package/src/testing/__tests__/dev-test-routes.test.ts +3 -2
  639. package/src/testing/__tests__/dev-vitest-manager.test.ts +1 -0
  640. package/src/testing/_relation-graph.ts +2 -2
  641. package/src/testing/bootstrap.ts +55 -27
  642. package/src/testing/data-explorer.ts +5 -4
  643. package/src/testing/dev-test-routes.ts +8 -5
  644. package/src/testing/dev-vitest-manager.ts +13 -12
  645. package/src/testing/fixture-generator.ts +11 -17
  646. package/src/testing/fixture-manager.ts +21 -17
  647. package/src/testing/parallel-db-manager.ts +2 -1
  648. package/src/testing/vitest-helpers.ts +2 -1
  649. package/src/types/__tests__/entity-json-schema-search-text.test.ts +1 -0
  650. package/src/types/types.ts +8 -8
  651. package/src/typings/knex.d.ts +4 -4
  652. package/src/ui/ai-api.ts +5 -3
  653. package/src/ui/ai-client.ts +6 -5
  654. package/src/ui/api.ts +25 -23
  655. package/src/ui/cdd-service.ts +12 -11
  656. package/src/utils/console-util.ts +3 -1
  657. package/src/utils/formatter.ts +94 -102
  658. package/src/utils/fs-utils.ts +2 -1
  659. package/src/utils/model.ts +2 -2
  660. package/src/utils/object-utils.ts +3 -3
  661. package/src/utils/process-utils.ts +2 -1
  662. package/src/utils/sql-parser.ts +10 -1
  663. package/src/utils/type-utils.ts +3 -3
  664. package/src/utils/utils.ts +9 -7
  665. package/src/utils/zod-error.ts +1 -1
  666. package/src/vector/chunking.ts +1 -1
  667. package/src/vector/config.ts +1 -1
  668. package/src/vector/embedding.ts +11 -9
  669. package/tsdown.api.config.ts +50 -0
  670. package/.swcrc.project-default +0 -18
  671. package/dist/api/__tests__/config.test.js +0 -189
  672. package/dist/bin/__tests__/test-command.test.js +0 -112
  673. package/dist/bin/__tests__/ts-loader-register.test.js +0 -45
  674. package/dist/database/puri-subset.test-d.js +0 -89
  675. package/dist/database/puri.types.test-d.js +0 -129
  676. package/dist/migration/__tests__/code-generation.search-text.test.js +0 -435
  677. package/dist/template/__tests__/generated.template.search-text.test.js +0 -99
  678. package/dist/template/generated.template.test-d.js +0 -24
  679. package/dist/testing/__tests__/dev-test-routes.test.js +0 -144
  680. package/dist/testing/__tests__/dev-vitest-manager.test.js +0 -152
  681. package/dist/types/__tests__/entity-json-schema-search-text.test.js +0 -256
  682. package/dist/typings/knex.d.js +0 -3
  683. package/dist/ui-web/assets/index-CKo0Z2Iu.css +0 -1
  684. package/dist/ui-web/assets/index-DK-2aacv.js +0 -257
@@ -1,225 +1,196 @@
1
+ import { __esmMin } from "../_virtual/rolldown_runtime.js";
2
+ import { convertDomainToCategory, init_category } from "../logger/category.js";
3
+ import { createMockSSEFactory, init_sse } from "../stream/sse.js";
4
+ import { Sonamu, init_sonamu } from "../api/sonamu.js";
5
+ import { Naite, init_naite } from "../naite/naite.js";
6
+ import { StepWrapper, init_step_wrapper } from "./step-wrapper.js";
1
7
  import { getLogger } from "@logtape/logtape";
8
+ import assert from "assert";
2
9
  import { BackendPostgres, OpenWorkflow } from "@sonamu-kit/tasks";
3
10
  import { serializeRetryPolicy } from "@sonamu-kit/tasks/internal";
4
- import assert from "assert";
5
- import { schedule as cronSchedule } from "node-cron";
6
- import { Sonamu } from "../api/sonamu.js";
7
- import { convertDomainToCategory } from "../logger/category.js";
8
- import { Naite } from "../naite/naite.js";
9
- import { createMockSSEFactory } from "../stream/sse.js";
10
- import { StepWrapper } from "./step-wrapper.js";
11
- export class WorkflowManager {
12
- // backend 인스턴스
13
- #backend;
14
- // OpenWorkflow 인스턴스
15
- #ow;
16
- // Worker 인스턴스 (없을 수 있으며, 이 때는 분산된 서버 환경에서 DB에 publish만 한다고 가정함)
17
- #worker;
18
- // 파일 경로 -> 파일에 정의된 워크플로우 메타데이터 목록
19
- #workflowsMap;
20
- // Task 이름 -> Task 정보 및 Input 값, Workflow ID
21
- #scheduledTasks;
22
- // BackendPostgres에서 처리하는 것들이 있어서 Knex 커넥션이 아니라 설정값을 넣어줘야함.
23
- constructor(dbConf, runMigrations = true){
24
- const backend = new BackendPostgres(dbConf, {
25
- runMigrations
26
- });
27
- this.#backend = backend;
28
- this.#ow = new OpenWorkflow({
29
- backend
30
- });
31
- this.#worker = null;
32
- this.#workflowsMap = new Map();
33
- this.#scheduledTasks = new Map();
34
- }
35
- // Sonamu UI API에서 워크플로우 실행 목록 조회, 취소 등에 사용합니다.
36
- get backend() {
37
- return this.#backend;
38
- }
39
- get workflowDefinitions() {
40
- return Array.from(this.#workflowsMap.values()).flat().map((wf)=>({
41
- id: wf.id,
42
- name: wf.name,
43
- version: wf.version,
44
- schedules: wf.schedules.map((s)=>({
45
- name: s.name,
46
- expression: s.expression
47
- })),
48
- retryPolicy: wf.retryPolicy ? serializeRetryPolicy(wf.retryPolicy) : undefined
49
- }));
50
- }
51
- /**
52
- * 정의된 워크플로우 및 워크플로우에 대한 scheduled tasks를 동기화합니다.
53
- */ async synchronize(workflowMap) {
54
- // 1. 삭제된 파일은 일괄 삭제
55
- await Promise.allSettled(Array.from(this.#workflowsMap.entries()).filter(([key])=>!workflowMap.has(key)).flatMap(([_, workflows])=>workflows.map((workflow)=>{
56
- return Promise.allSettled([
57
- ...workflow.schedules.map((schedule)=>this.unscheduleTask(schedule.name)),
58
- this.unregisterWorkflow(workflow)
59
- ]);
60
- })));
61
- // 2. 새로 추가된 파일은 일괄 등록
62
- await Promise.allSettled(Array.from(workflowMap.entries()).filter(([key])=>!this.#workflowsMap.has(key)).flatMap(([_, workflows])=>workflows.map((workflow)=>{
63
- this.registerWorkflow({
64
- id: workflow.id,
65
- name: workflow.name,
66
- version: workflow.version ?? null,
67
- schema: workflow.schema,
68
- function: workflow.fn,
69
- retryPolicy: workflow.retryPolicy
70
- });
71
- return Promise.allSettled(workflow.schedules.map((schedule)=>this.scheduleTask(workflow, schedule)));
72
- })));
73
- // 3. 기존과 다른 것을 diff친 다음, 삭제 후 재등록
74
- await Promise.allSettled(Array.from(workflowMap.entries()).filter(([key])=>this.#workflowsMap.has(key)).map(([key, newWorkflows])=>{
75
- const previousWorkflows = this.#workflowsMap.get(key);
76
- assert(previousWorkflows, "previous workflows not found");
77
- return [
78
- key,
79
- [
80
- previousWorkflows,
81
- newWorkflows
82
- ]
83
- ];
84
- }).map(async ([_, [previousWorkflows, newWorkflows]])=>{
85
- // 기존 것들을 삭제부터 해야함.
86
- await Promise.allSettled(previousWorkflows.filter((prevItem)=>!newWorkflows.some((newItem)=>newItem.id === prevItem.id)).map((prevItem)=>{
87
- return Promise.allSettled([
88
- ...prevItem.schedules.map((schedule)=>this.unscheduleTask(schedule.name)),
89
- this.unregisterWorkflow(prevItem)
90
- ]);
91
- }));
92
- // 새로 추가된 것들을 등록
93
- await Promise.allSettled(newWorkflows.filter((newItem)=>!previousWorkflows.some((prevItem)=>prevItem.id === newItem.id)).map(async (newItem)=>{
94
- this.registerWorkflow({
95
- id: newItem.id,
96
- name: newItem.name,
97
- version: newItem.version ?? null,
98
- schema: newItem.schema,
99
- function: newItem.fn,
100
- retryPolicy: newItem.retryPolicy
101
- });
102
- return Promise.allSettled(newItem.schedules.map((schedule)=>this.scheduleTask(newItem, schedule)));
103
- }));
104
- }));
105
- this.#workflowsMap = workflowMap;
106
- }
107
- // 워크플로우를 실행
108
- run(options, input) {
109
- return this.#ow.runWorkflow({
110
- name: options.name,
111
- version: options.version ?? undefined
112
- }, input);
113
- }
114
- // cron task를 등록
115
- async scheduleTask(workflow, schedule) {
116
- // Worker가 활성화된 노드에서만 처리
117
- if (!this.#worker) {
118
- return;
119
- }
120
- const task = cronSchedule(schedule.expression, (async ({ name, version }, { input })=>{
121
- const inputData = await (typeof input === "function" ? Promise.resolve(input()) : Promise.resolve(input));
122
- return this.run({
123
- name,
124
- version: version ?? null
125
- }, inputData);
126
- }).bind(this, workflow, schedule), {
127
- name: schedule.name,
128
- timezone: Sonamu.config.api.timezone,
129
- noOverlap: false
130
- });
131
- this.#scheduledTasks.set(schedule.name, {
132
- task,
133
- inputFn: schedule.input,
134
- workflowId: workflow.id
135
- });
136
- await task.start();
137
- }
138
- // cron task를 중지
139
- async unscheduleTask(name) {
140
- // Worker가 활성화된 노드에서만 처리
141
- if (!this.#worker) {
142
- return;
143
- }
144
- const taskItem = this.#scheduledTasks.get(name);
145
- if (!taskItem) {
146
- console.error("scheduled task not found", name);
147
- return;
148
- }
149
- this.#scheduledTasks.delete(name);
150
- await taskItem.task.stop();
151
- await taskItem.task.destroy();
152
- }
153
- // 워크플로우를 등록, 관련된 스케줄은 별도로 등록해야 함.
154
- registerWorkflow(options) {
155
- const fn = async (params)=>{
156
- const baseContext = {
157
- request: null,
158
- reply: null,
159
- headers: {},
160
- createSSE: (schema)=>createMockSSEFactory(schema),
161
- naiteStore: Naite.createStore(),
162
- user: null,
163
- passport: {
164
- login: async ()=>{},
165
- logout: ()=>{}
166
- }
167
- };
168
- const contextProvider = Sonamu.config.tasks?.contextProvider;
169
- const context = contextProvider ? await Promise.resolve(contextProvider(baseContext)) : baseContext;
170
- const step = new StepWrapper(params.step);
171
- return Sonamu.asyncLocalStorage.run({
172
- context
173
- }, ()=>options.function({
174
- input: params.input,
175
- step,
176
- version: params.version,
177
- logger: getLogger(convertDomainToCategory(options.name, "workflow"))
178
- }));
179
- };
180
- const workflow = this.#ow.defineWorkflow({
181
- name: options.name,
182
- version: options.version ?? undefined,
183
- schema: options.schema,
184
- retryPolicy: options.retryPolicy
185
- }, fn);
186
- return workflow;
187
- }
188
- // 워크플로우를 등록 해제, 관련된 스케줄은 별도로 해제해야 함.
189
- async unregisterWorkflow(workflow) {
190
- this.#ow.unregisterWorkflow(workflow.name, workflow.version ?? null);
191
- }
192
- // Worker를 설정 후 시작
193
- setupWorker(options) {
194
- this.#worker = this.#ow.newWorker(options);
195
- }
196
- // Worker가 있으면 Worker까지 초기화, 아니면 백엔드만 초기화
197
- async startWorker() {
198
- await this.#backend.initialize();
199
- await this.#worker?.start();
200
- }
201
- // Worker를 중지
202
- async stopWorker() {
203
- await this.#worker?.stop();
204
- }
205
- // cron task들을 모두 중지
206
- async stopSchedules() {
207
- await Promise.allSettled(Array.from(this.#scheduledTasks.values()).map(({ task })=>Promise.resolve(task.stop())));
208
- }
209
- // cron task들을 모두 정리
210
- async destroySchedules() {
211
- await Promise.allSettled(Array.from(this.#scheduledTasks.values()).map(({ task })=>Promise.resolve(task.destroy())));
212
- this.#scheduledTasks.clear();
213
- }
214
- async destroy() {
215
- await this.stopSchedules();
216
- await this.stopWorker();
217
- await this.destroySchedules();
218
- await this.#backend.stop();
219
- }
220
- [Symbol.asyncDispose]() {
221
- return this.destroy();
222
- }
223
- }
11
+ import { schedule } from "node-cron";
12
+
13
+ //#region src/tasks/workflow-manager.ts
14
+ var WorkflowManager;
15
+ var init_workflow_manager = __esmMin((() => {
16
+ init_sonamu();
17
+ init_category();
18
+ init_naite();
19
+ init_sse();
20
+ init_step_wrapper();
21
+ WorkflowManager = class {
22
+ #backend;
23
+ #ow;
24
+ #worker;
25
+ #workflowsMap;
26
+ #scheduledTasks;
27
+ constructor(dbConf, runMigrations = true) {
28
+ const backend = new BackendPostgres(dbConf, { runMigrations });
29
+ this.#backend = backend;
30
+ this.#ow = new OpenWorkflow({ backend });
31
+ this.#worker = null;
32
+ this.#workflowsMap = new Map();
33
+ this.#scheduledTasks = new Map();
34
+ }
35
+ get backend() {
36
+ return this.#backend;
37
+ }
38
+ get workflowDefinitions() {
39
+ return Array.from(this.#workflowsMap.values()).flat().map((wf) => ({
40
+ id: wf.id,
41
+ name: wf.name,
42
+ version: wf.version,
43
+ schedules: wf.schedules.map((s) => ({
44
+ name: s.name,
45
+ expression: s.expression
46
+ })),
47
+ retryPolicy: wf.retryPolicy ? serializeRetryPolicy(wf.retryPolicy) : undefined
48
+ }));
49
+ }
50
+ /**
51
+ * 정의된 워크플로우 및 워크플로우에 대한 scheduled tasks를 동기화합니다.
52
+ */
53
+ async synchronize(workflowMap) {
54
+ await Promise.allSettled(Array.from(this.#workflowsMap.entries()).filter(([key]) => !workflowMap.has(key)).flatMap(([_, workflows]) => workflows.map((workflow) => {
55
+ return Promise.allSettled([...workflow.schedules.map((schedule$1) => this.unscheduleTask(schedule$1.name)), this.unregisterWorkflow(workflow)]);
56
+ })));
57
+ await Promise.allSettled(Array.from(workflowMap.entries()).filter(([key]) => !this.#workflowsMap.has(key)).flatMap(([_, workflows]) => workflows.map((workflow) => {
58
+ this.registerWorkflow({
59
+ id: workflow.id,
60
+ name: workflow.name,
61
+ version: workflow.version ?? null,
62
+ schema: workflow.schema,
63
+ function: workflow.fn,
64
+ retryPolicy: workflow.retryPolicy
65
+ });
66
+ return Promise.allSettled(workflow.schedules.map((schedule$1) => this.scheduleTask(workflow, schedule$1)));
67
+ })));
68
+ await Promise.allSettled(Array.from(workflowMap.entries()).filter(([key]) => this.#workflowsMap.has(key)).map(([key, newWorkflows]) => {
69
+ const previousWorkflows = this.#workflowsMap.get(key);
70
+ assert(previousWorkflows, "previous workflows not found");
71
+ return [key, [previousWorkflows, newWorkflows]];
72
+ }).map(async ([_, [previousWorkflows, newWorkflows]]) => {
73
+ await Promise.allSettled(previousWorkflows.filter((prevItem) => !newWorkflows.some((newItem) => newItem.id === prevItem.id)).map((prevItem) => {
74
+ return Promise.allSettled([...prevItem.schedules.map((schedule$1) => this.unscheduleTask(schedule$1.name)), this.unregisterWorkflow(prevItem)]);
75
+ }));
76
+ await Promise.allSettled(newWorkflows.filter((newItem) => !previousWorkflows.some((prevItem) => prevItem.id === newItem.id)).map(async (newItem) => {
77
+ this.registerWorkflow({
78
+ id: newItem.id,
79
+ name: newItem.name,
80
+ version: newItem.version ?? null,
81
+ schema: newItem.schema,
82
+ function: newItem.fn,
83
+ retryPolicy: newItem.retryPolicy
84
+ });
85
+ return Promise.allSettled(newItem.schedules.map((schedule$1) => this.scheduleTask(newItem, schedule$1)));
86
+ }));
87
+ }));
88
+ this.#workflowsMap = workflowMap;
89
+ }
90
+ run(options, input) {
91
+ return this.#ow.runWorkflow({
92
+ name: options.name,
93
+ version: options.version ?? undefined
94
+ }, input);
95
+ }
96
+ async scheduleTask(workflow, schedule$1) {
97
+ if (!this.#worker) {
98
+ return;
99
+ }
100
+ const task = schedule(schedule$1.expression, (async ({ name, version }, { input }) => {
101
+ const inputData = await (typeof input === "function" ? Promise.resolve(input()) : Promise.resolve(input));
102
+ return this.run({
103
+ name,
104
+ version: version ?? null
105
+ }, inputData);
106
+ }).bind(this, workflow, schedule$1), {
107
+ name: schedule$1.name,
108
+ timezone: Sonamu.config.api.timezone,
109
+ noOverlap: false
110
+ });
111
+ this.#scheduledTasks.set(schedule$1.name, {
112
+ task,
113
+ inputFn: schedule$1.input,
114
+ workflowId: workflow.id
115
+ });
116
+ await task.start();
117
+ }
118
+ async unscheduleTask(name) {
119
+ if (!this.#worker) {
120
+ return;
121
+ }
122
+ const taskItem = this.#scheduledTasks.get(name);
123
+ if (!taskItem) {
124
+ console.error("scheduled task not found", name);
125
+ return;
126
+ }
127
+ this.#scheduledTasks.delete(name);
128
+ await taskItem.task.stop();
129
+ await taskItem.task.destroy();
130
+ }
131
+ registerWorkflow(options) {
132
+ const fn = async (params) => {
133
+ const baseContext = {
134
+ request: null,
135
+ reply: null,
136
+ headers: {},
137
+ createSSE: (schema) => createMockSSEFactory(schema),
138
+ naiteStore: Naite.createStore(),
139
+ locale: "",
140
+ user: null,
141
+ session: null
142
+ };
143
+ const contextProvider = Sonamu.config.tasks?.contextProvider;
144
+ const context = contextProvider ? await Promise.resolve(contextProvider(baseContext)) : baseContext;
145
+ const step = new StepWrapper(params.step);
146
+ return Sonamu.asyncLocalStorage.run({ context }, () => options.function({
147
+ input: params.input,
148
+ step,
149
+ version: params.version,
150
+ logger: getLogger(convertDomainToCategory(options.name, "workflow"))
151
+ }));
152
+ };
153
+ const workflow = this.#ow.defineWorkflow({
154
+ name: options.name,
155
+ version: options.version ?? undefined,
156
+ schema: options.schema,
157
+ retryPolicy: options.retryPolicy
158
+ }, fn);
159
+ return workflow;
160
+ }
161
+ async unregisterWorkflow(workflow) {
162
+ this.#ow.unregisterWorkflow(workflow.name, workflow.version ?? null);
163
+ }
164
+ setupWorker(options) {
165
+ this.#worker = this.#ow.newWorker(options);
166
+ }
167
+ async startWorker() {
168
+ await this.#backend.initialize();
169
+ await this.#worker?.start();
170
+ }
171
+ async stopWorker() {
172
+ await this.#worker?.stop();
173
+ }
174
+ async stopSchedules() {
175
+ await Promise.allSettled(Array.from(this.#scheduledTasks.values()).map(({ task }) => Promise.resolve(task.stop())));
176
+ }
177
+ async destroySchedules() {
178
+ await Promise.allSettled(Array.from(this.#scheduledTasks.values()).map(({ task }) => Promise.resolve(task.destroy())));
179
+ this.#scheduledTasks.clear();
180
+ }
181
+ async destroy() {
182
+ await this.stopSchedules();
183
+ await this.stopWorker();
184
+ await this.destroySchedules();
185
+ await this.#backend.stop();
186
+ }
187
+ [Symbol.asyncDispose]() {
188
+ return this.destroy();
189
+ }
190
+ };
191
+ }));
224
192
 
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrcy93b3JrZmxvdy1tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldExvZ2dlciwgdHlwZSBMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgQmFja2VuZFBvc3RncmVzLCBPcGVuV29ya2Zsb3csIHR5cGUgV29ya2VyIH0gZnJvbSBcIkBzb25hbXUta2l0L3Rhc2tzXCI7XG5pbXBvcnQge1xuICB0eXBlIFJ1bm5hYmxlV29ya2Zsb3csXG4gIHR5cGUgU2NoZW1hSW5wdXQsXG4gIHR5cGUgU2NoZW1hT3V0cHV0LFxuICB0eXBlIFN0YW5kYXJkU2NoZW1hVjEsXG4gIHR5cGUgU3RlcEFwaSxcbiAgc2VyaWFsaXplUmV0cnlQb2xpY3ksXG4gIHR5cGUgV29ya2Zsb3dSdW5IYW5kbGUsXG4gIHR5cGUgV29ya2Zsb3dTcGVjLFxufSBmcm9tIFwiQHNvbmFtdS1raXQvdGFza3MvaW50ZXJuYWxcIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IHNjaGVkdWxlIGFzIGNyb25TY2hlZHVsZSwgdHlwZSBTY2hlZHVsZWRUYXNrIH0gZnJvbSBcIm5vZGUtY3JvblwiO1xuaW1wb3J0IHR5cGUgeyBab2RPYmplY3QgfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQgfSBmcm9tIFwiLi4vYXBpL2NvbnRleHRcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSB9IGZyb20gXCIuLi9sb2dnZXIvY2F0ZWdvcnlcIjtcbmltcG9ydCB7IE5haXRlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5pbXBvcnQgeyBjcmVhdGVNb2NrU1NFRmFjdG9yeSB9IGZyb20gXCIuLi9zdHJlYW0vc3NlXCI7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGFibGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dNZXRhZGF0YSB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuaW1wb3J0IHsgU3RlcFdyYXBwZXIgfSBmcm9tIFwiLi9zdGVwLXdyYXBwZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd09wdGlvbnMge1xuICAvLyB3b3JrZXLsl5DshJwg64+Z7IucIOyLpO2Wie2VoCDtg5zsiqTtgawg7IiYLCDquLDrs7jsnYAgQ1BVIOy9lOyWtCDsiJggLSAx6rCcXG4gIGNvbmN1cnJlbmN5PzogbnVtYmVyO1xuXG4gIC8vIHdvcmtlcuyXkOyEnCDsgqzsmqntlaAgcHViL3N1YiDsl6zrtoAsIOq4sOuzuOydgCB0cnVlXG4gIHVzZVB1YlN1Yj86IGJvb2xlYW47XG5cbiAgLy8gcHViL3N1YuycvOuhnCDtg5zsiqTtgazrpbwg7IiY7Iug7ZaI7J2EIOuVjCDsm4ztgaztlIzroZzsmrAg7Iuk7ZaJ6rmM7KeAIOyngOyXsCDsi5zqsIQsIOq4sOuzuOydgCA1MDBtc1xuICBsaXN0ZW5EZWxheT86IG51bWJlcjtcbn1cblxuLy8gV29ya2Zsb3cg7ZWo7IiY7J2YIO2DgOyehSwgQHNvbmFtdS1raXQvdGFza3PsmYAg64uk66W4IOygkOydgCBzdGVw7J2EIO2VnOuyiCDqsJDsi7wg7ZiV7YOcLlxuZXhwb3J0IHR5cGUgV29ya2Zsb3dGdW5jdGlvbjxJbnB1dCwgT3V0cHV0PiA9IChcbiAgcGFyYW1zOiBSZWFkb25seTx7XG4gICAgbG9nZ2VyOiBMb2dnZXI7XG4gICAgaW5wdXQ6IElucHV0O1xuICAgIHN0ZXA6IFN0ZXBXcmFwcGVyO1xuICAgIHZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gIH0+LFxuKSA9PiBQcm9taXNlPE91dHB1dD4gfCBPdXRwdXQ7XG5cbi8vIFdvcmtmbG9366W8IOuTseuhne2VoCDrlYzrpbwg7JyE7ZWcIO2DgOyehVxuZXhwb3J0IHR5cGUgV29ya2Zsb3dDcmVhdGVPcHRpb25zPFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbj4gPSBPbWl0PFxuICBXb3JrZmxvd1NwZWM8U2NoZW1hT3V0cHV0PFRTY2hlbWEsIElucHV0PiwgT3V0cHV0LCBTY2hlbWFJbnB1dDxUU2NoZW1hLCBJbnB1dD4+LFxuICBcInZlcnNpb25cIlxuPiAmIHtcbiAgaWQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgZnVuY3Rpb246IFdvcmtmbG93RnVuY3Rpb248U2NoZW1hT3V0cHV0PFRTY2hlbWEsIElucHV0PiwgT3V0cHV0Pjtcbn07XG5cbmV4cG9ydCBjbGFzcyBXb3JrZmxvd01hbmFnZXIge1xuICAvLyBiYWNrZW5kIOyduOyKpO2EtOyKpFxuICByZWFkb25seSAjYmFja2VuZDogQmFja2VuZFBvc3RncmVzO1xuXG4gIC8vIE9wZW5Xb3JrZmxvdyDsnbjsiqTthLTsiqRcbiAgcmVhZG9ubHkgI293OiBPcGVuV29ya2Zsb3c7XG5cbiAgLy8gV29ya2VyIOyduOyKpO2EtOyKpCAo7JeG7J2EIOyImCDsnojsnLzrqbAsIOydtCDrlYzripQg67aE7IKw65CcIOyEnOuyhCDtmZjqsr3sl5DshJwgRELsl5AgcHVibGlzaOunjCDtlZzri6Tqs6Ag6rCA7KCV7ZWoKVxuICAjd29ya2VyOiBXb3JrZXIgfCBudWxsO1xuXG4gIC8vIO2MjOydvCDqsr3roZwgLT4g7YyM7J287JeQIOygleydmOuQnCDsm4ztgaztlIzroZzsmrAg66mU7YOA642w7J207YSwIOuqqeuhnVxuICAjd29ya2Zsb3dzTWFwOiBNYXA8c3RyaW5nLCBXb3JrZmxvd01ldGFkYXRhW10+O1xuXG4gIC8vIFRhc2sg7J2066aEIC0+IFRhc2sg7KCV67O0IOuwjyBJbnB1dCDqsJIsIFdvcmtmbG93IElEXG4gICNzY2hlZHVsZWRUYXNrczogTWFwPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICB0YXNrOiBTY2hlZHVsZWRUYXNrO1xuICAgICAgaW5wdXRGbjogRXhlY3V0YWJsZTxTY2hlbWFJbnB1dDx1bmtub3duLCB1bmtub3duPj47XG4gICAgICB3b3JrZmxvd0lkOiBzdHJpbmc7XG4gICAgfVxuICA+O1xuXG4gIC8vIEJhY2tlbmRQb3N0Z3Jlc+yXkOyEnCDsspjrpqztlZjripQg6rKD65Ok7J20IOyeiOyWtOyEnCBLbmV4IOy7pOuEpeyFmOydtCDslYTri4jrnbwg7ISk7KCV6rCS7J2EIOuEo+yWtOykmOyVvO2VqC5cbiAgY29uc3RydWN0b3IoZGJDb25mOiBLbmV4LkNvbmZpZywgcnVuTWlncmF0aW9uczogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBiYWNrZW5kID0gbmV3IEJhY2tlbmRQb3N0Z3JlcyhkYkNvbmYsIHsgcnVuTWlncmF0aW9ucyB9KTtcblxuICAgIHRoaXMuI2JhY2tlbmQgPSBiYWNrZW5kO1xuICAgIHRoaXMuI293ID0gbmV3IE9wZW5Xb3JrZmxvdyh7IGJhY2tlbmQgfSk7XG4gICAgdGhpcy4jd29ya2VyID0gbnVsbDtcblxuICAgIHRoaXMuI3dvcmtmbG93c01hcCA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLiNzY2hlZHVsZWRUYXNrcyA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIC8vIFNvbmFtdSBVSSBBUEnsl5DshJwg7JuM7YGs7ZSM66Gc7JqwIOyLpO2WiSDrqqnroZ0g7KGw7ZqMLCDst6jshowg65Ox7JeQIOyCrOyaqe2VqeuLiOuLpC5cbiAgZ2V0IGJhY2tlbmQoKTogQmFja2VuZFBvc3RncmVzIHtcbiAgICByZXR1cm4gdGhpcy4jYmFja2VuZDtcbiAgfVxuXG4gIGdldCB3b3JrZmxvd0RlZmluaXRpb25zKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuI3dvcmtmbG93c01hcC52YWx1ZXMoKSlcbiAgICAgIC5mbGF0KClcbiAgICAgIC5tYXAoKHdmKSA9PiAoe1xuICAgICAgICBpZDogd2YuaWQsXG4gICAgICAgIG5hbWU6IHdmLm5hbWUsXG4gICAgICAgIHZlcnNpb246IHdmLnZlcnNpb24sXG4gICAgICAgIHNjaGVkdWxlczogd2Yuc2NoZWR1bGVzLm1hcCgocykgPT4gKHtcbiAgICAgICAgICBuYW1lOiBzLm5hbWUsXG4gICAgICAgICAgZXhwcmVzc2lvbjogcy5leHByZXNzaW9uLFxuICAgICAgICB9KSksXG4gICAgICAgIHJldHJ5UG9saWN5OiB3Zi5yZXRyeVBvbGljeSA/IHNlcmlhbGl6ZVJldHJ5UG9saWN5KHdmLnJldHJ5UG9saWN5KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDsoJXsnZjrkJwg7JuM7YGs7ZSM66Gc7JqwIOuwjyDsm4ztgaztlIzroZzsmrDsl5Ag64yA7ZWcIHNjaGVkdWxlZCB0YXNrc+ulvCDrj5nquLDtmZTtlanri4jri6QuXG4gICAqL1xuICBhc3luYyBzeW5jaHJvbml6ZSh3b3JrZmxvd01hcDogTWFwPHN0cmluZywgV29ya2Zsb3dNZXRhZGF0YVtdPikge1xuICAgIC8vIDEuIOyCreygnOuQnCDtjIzsnbzsnYAg7J286rSEIOyCreygnFxuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIEFycmF5LmZyb20odGhpcy4jd29ya2Zsb3dzTWFwLmVudHJpZXMoKSlcbiAgICAgICAgLmZpbHRlcigoW2tleV0pID0+ICF3b3JrZmxvd01hcC5oYXMoa2V5KSlcbiAgICAgICAgLmZsYXRNYXAoKFtfLCB3b3JrZmxvd3NdKSA9PlxuICAgICAgICAgIHdvcmtmbG93cy5tYXAoKHdvcmtmbG93KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgICAgICAgICAgLi4ud29ya2Zsb3cuc2NoZWR1bGVzLm1hcCgoc2NoZWR1bGUpID0+IHRoaXMudW5zY2hlZHVsZVRhc2soc2NoZWR1bGUubmFtZSkpLFxuICAgICAgICAgICAgICB0aGlzLnVucmVnaXN0ZXJXb3JrZmxvdyh3b3JrZmxvdyksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICApO1xuXG4gICAgLy8gMi4g7IOI66GcIOy2lOqwgOuQnCDtjIzsnbzsnYAg7J286rSEIOuTseuhnVxuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIEFycmF5LmZyb20od29ya2Zsb3dNYXAuZW50cmllcygpKVxuICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4gIXRoaXMuI3dvcmtmbG93c01hcC5oYXMoa2V5KSlcbiAgICAgICAgLmZsYXRNYXAoKFtfLCB3b3JrZmxvd3NdKSA9PlxuICAgICAgICAgIHdvcmtmbG93cy5tYXAoKHdvcmtmbG93KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyV29ya2Zsb3coe1xuICAgICAgICAgICAgICBpZDogd29ya2Zsb3cuaWQsXG4gICAgICAgICAgICAgIG5hbWU6IHdvcmtmbG93Lm5hbWUsXG4gICAgICAgICAgICAgIHZlcnNpb246IHdvcmtmbG93LnZlcnNpb24gPz8gbnVsbCxcbiAgICAgICAgICAgICAgc2NoZW1hOiB3b3JrZmxvdy5zY2hlbWEsXG4gICAgICAgICAgICAgIGZ1bmN0aW9uOiB3b3JrZmxvdy5mbixcbiAgICAgICAgICAgICAgcmV0cnlQb2xpY3k6IHdvcmtmbG93LnJldHJ5UG9saWN5LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgICAgIHdvcmtmbG93LnNjaGVkdWxlcy5tYXAoKHNjaGVkdWxlKSA9PiB0aGlzLnNjaGVkdWxlVGFzayh3b3JrZmxvdywgc2NoZWR1bGUpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIC8vIDMuIOq4sOyhtOqzvCDri6Trpbgg6rKD7J2EIGRpZmbsuZwg64uk7J2MLCDsgq3soJwg7ZuEIOyerOuTseuhnVxuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIEFycmF5LmZyb20od29ya2Zsb3dNYXAuZW50cmllcygpKVxuICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4gdGhpcy4jd29ya2Zsb3dzTWFwLmhhcyhrZXkpKVxuICAgICAgICAubWFwPFtzdHJpbmcsIFtXb3JrZmxvd01ldGFkYXRhW10sIFdvcmtmbG93TWV0YWRhdGFbXV1dPigoW2tleSwgbmV3V29ya2Zsb3dzXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzV29ya2Zsb3dzID0gdGhpcy4jd29ya2Zsb3dzTWFwLmdldChrZXkpO1xuICAgICAgICAgIGFzc2VydChwcmV2aW91c1dvcmtmbG93cywgXCJwcmV2aW91cyB3b3JrZmxvd3Mgbm90IGZvdW5kXCIpO1xuICAgICAgICAgIHJldHVybiBba2V5LCBbcHJldmlvdXNXb3JrZmxvd3MsIG5ld1dvcmtmbG93c11dO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKGFzeW5jIChbXywgW3ByZXZpb3VzV29ya2Zsb3dzLCBuZXdXb3JrZmxvd3NdXSkgPT4ge1xuICAgICAgICAgIC8vIOq4sOyhtCDqsoPrk6TsnYQg7IKt7KCc67aA7YSwIO2VtOyVvO2VqC5cbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgICBwcmV2aW91c1dvcmtmbG93c1xuICAgICAgICAgICAgICAuZmlsdGVyKChwcmV2SXRlbSkgPT4gIW5ld1dvcmtmbG93cy5zb21lKChuZXdJdGVtKSA9PiBuZXdJdGVtLmlkID09PSBwcmV2SXRlbS5pZCkpXG4gICAgICAgICAgICAgIC5tYXAoKHByZXZJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICAgICAgICAgICAgICAuLi5wcmV2SXRlbS5zY2hlZHVsZXMubWFwKChzY2hlZHVsZSkgPT4gdGhpcy51bnNjaGVkdWxlVGFzayhzY2hlZHVsZS5uYW1lKSksXG4gICAgICAgICAgICAgICAgICB0aGlzLnVucmVnaXN0ZXJXb3JrZmxvdyhwcmV2SXRlbSksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyDsg4jroZwg7LaU6rCA65CcIOqyg+uTpOydhCDrk7HroZ1cbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgICBuZXdXb3JrZmxvd3NcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAobmV3SXRlbSkgPT4gIXByZXZpb3VzV29ya2Zsb3dzLnNvbWUoKHByZXZJdGVtKSA9PiBwcmV2SXRlbS5pZCA9PT0gbmV3SXRlbS5pZCksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLm1hcChhc3luYyAobmV3SXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJXb3JrZmxvdyh7XG4gICAgICAgICAgICAgICAgICBpZDogbmV3SXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IG5ld0l0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgIHZlcnNpb246IG5ld0l0ZW0udmVyc2lvbiA/PyBudWxsLFxuICAgICAgICAgICAgICAgICAgc2NoZW1hOiBuZXdJdGVtLnNjaGVtYSxcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uOiBuZXdJdGVtLmZuLFxuICAgICAgICAgICAgICAgICAgcmV0cnlQb2xpY3k6IG5ld0l0ZW0ucmV0cnlQb2xpY3ksXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgICAgICAgICAgICAgbmV3SXRlbS5zY2hlZHVsZXMubWFwKChzY2hlZHVsZSkgPT4gdGhpcy5zY2hlZHVsZVRhc2sobmV3SXRlbSwgc2NoZWR1bGUpKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICApO1xuXG4gICAgdGhpcy4jd29ya2Zsb3dzTWFwID0gd29ya2Zsb3dNYXA7XG4gIH1cblxuICAvLyDsm4ztgaztlIzroZzsmrDrpbwg7Iuk7ZaJXG4gIHJ1bjxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgb3B0aW9uczogT21pdDxXb3JrZmxvd0NyZWF0ZU9wdGlvbnM8SW5wdXQsIE91dHB1dCwgVFNjaGVtYT4sIFwiZnVuY3Rpb25cIiB8IFwic2NoZW1hXCIgfCBcImlkXCI+LFxuICAgIGlucHV0OiBTY2hlbWFJbnB1dDxUU2NoZW1hLCBJbnB1dD4sXG4gICk6IFByb21pc2U8V29ya2Zsb3dSdW5IYW5kbGU8T3V0cHV0Pj4ge1xuICAgIHJldHVybiB0aGlzLiNvdy5ydW5Xb3JrZmxvdyhcbiAgICAgIHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIGlucHV0LFxuICAgICk7XG4gIH1cblxuICAvLyBjcm9uIHRhc2vrpbwg65Ox66GdXG4gIGFzeW5jIHNjaGVkdWxlVGFzayhcbiAgICB3b3JrZmxvdzogUGljazxXb3JrZmxvd01ldGFkYXRhLCBcImlkXCIgfCBcIm5hbWVcIiB8IFwidmVyc2lvblwiPixcbiAgICBzY2hlZHVsZTogV29ya2Zsb3dNZXRhZGF0YVtcInNjaGVkdWxlc1wiXVtudW1iZXJdLFxuICApIHtcbiAgICAvLyBXb3JrZXLqsIAg7Zmc7ISx7ZmU65CcIOuFuOuTnOyXkOyEnOunjCDsspjrpqxcbiAgICBpZiAoIXRoaXMuI3dvcmtlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhc2sgPSBjcm9uU2NoZWR1bGUoXG4gICAgICBzY2hlZHVsZS5leHByZXNzaW9uLFxuICAgICAgKGFzeW5jIChcbiAgICAgICAgeyBuYW1lLCB2ZXJzaW9uIH06IFBpY2s8V29ya2Zsb3dNZXRhZGF0YSwgXCJuYW1lXCIgfCBcInZlcnNpb25cIj4sXG4gICAgICAgIHsgaW5wdXQgfTogV29ya2Zsb3dNZXRhZGF0YVtcInNjaGVkdWxlc1wiXVtudW1iZXJdLFxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0RGF0YSA9IGF3YWl0ICh0eXBlb2YgaW5wdXQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKGlucHV0KCkpXG4gICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoaW5wdXQpKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5ydW4oeyBuYW1lLCB2ZXJzaW9uOiB2ZXJzaW9uID8/IG51bGwgfSwgaW5wdXREYXRhKTtcbiAgICAgIH0pLmJpbmQodGhpcywgd29ya2Zsb3csIHNjaGVkdWxlKSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogc2NoZWR1bGUubmFtZSxcbiAgICAgICAgdGltZXpvbmU6IFNvbmFtdS5jb25maWcuYXBpLnRpbWV6b25lLFxuICAgICAgICBub092ZXJsYXA6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy4jc2NoZWR1bGVkVGFza3Muc2V0KHNjaGVkdWxlLm5hbWUsIHtcbiAgICAgIHRhc2ssXG4gICAgICBpbnB1dEZuOiBzY2hlZHVsZS5pbnB1dCxcbiAgICAgIHdvcmtmbG93SWQ6IHdvcmtmbG93LmlkLFxuICAgIH0pO1xuICAgIGF3YWl0IHRhc2suc3RhcnQoKTtcbiAgfVxuXG4gIC8vIGNyb24gdGFza+ulvCDspJHsp4BcbiAgYXN5bmMgdW5zY2hlZHVsZVRhc2sobmFtZTogc3RyaW5nKSB7XG4gICAgLy8gV29ya2Vy6rCAIO2ZnOyEse2ZlOuQnCDrhbjrk5zsl5DshJzrp4wg7LKY66asXG4gICAgaWYgKCF0aGlzLiN3b3JrZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0YXNrSXRlbSA9IHRoaXMuI3NjaGVkdWxlZFRhc2tzLmdldChuYW1lKTtcbiAgICBpZiAoIXRhc2tJdGVtKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwic2NoZWR1bGVkIHRhc2sgbm90IGZvdW5kXCIsIG5hbWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuI3NjaGVkdWxlZFRhc2tzLmRlbGV0ZShuYW1lKTtcbiAgICBhd2FpdCB0YXNrSXRlbS50YXNrLnN0b3AoKTtcbiAgICBhd2FpdCB0YXNrSXRlbS50YXNrLmRlc3Ryb3koKTtcbiAgfVxuXG4gIC8vIOybjO2BrO2UjOuhnOyasOulvCDrk7HroZ0sIOq0gOugqOuQnCDsiqTsvIDspITsnYAg67OE64+E66GcIOuTseuhne2VtOyVvCDtlaguXG4gIHJlZ2lzdGVyV29ya2Zsb3c8SW5wdXQsIE91dHB1dCwgVFNjaGVtYSBleHRlbmRzIFN0YW5kYXJkU2NoZW1hVjEgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICAgIG9wdGlvbnM6IFdvcmtmbG93Q3JlYXRlT3B0aW9uczxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hPixcbiAgKTogUnVubmFibGVXb3JrZmxvdzxTY2hlbWFPdXRwdXQ8VFNjaGVtYSwgSW5wdXQ+LCBPdXRwdXQsIFNjaGVtYUlucHV0PFRTY2hlbWEsIElucHV0Pj4ge1xuICAgIGNvbnN0IGZuID0gYXN5bmMgKFxuICAgICAgcGFyYW1zOiBSZWFkb25seTx7XG4gICAgICAgIGlucHV0OiBTY2hlbWFPdXRwdXQ8VFNjaGVtYSwgSW5wdXQ+O1xuICAgICAgICBzdGVwOiBTdGVwQXBpO1xuICAgICAgICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICAgICAgfT4sXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBiYXNlQ29udGV4dCA9IHtcbiAgICAgICAgcmVxdWVzdDogbnVsbCxcbiAgICAgICAgcmVwbHk6IG51bGwsXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBjcmVhdGVTU0U6IChzY2hlbWE6IFpvZE9iamVjdCkgPT4gY3JlYXRlTW9ja1NTRUZhY3Rvcnkoc2NoZW1hKSxcbiAgICAgICAgbmFpdGVTdG9yZTogTmFpdGUuY3JlYXRlU3RvcmUoKSxcbiAgICAgICAgdXNlcjogbnVsbCxcbiAgICAgICAgcGFzc3BvcnQ6IHtcbiAgICAgICAgICBsb2dpbjogYXN5bmMgKCkgPT4ge30sXG4gICAgICAgICAgbG9nb3V0OiAoKSA9PiB7fSxcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBDb250ZXh0O1xuXG4gICAgICBjb25zdCBjb250ZXh0UHJvdmlkZXIgPSBTb25hbXUuY29uZmlnLnRhc2tzPy5jb250ZXh0UHJvdmlkZXI7XG4gICAgICBjb25zdCBjb250ZXh0OiBDb250ZXh0ID0gY29udGV4dFByb3ZpZGVyXG4gICAgICAgID8gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGNvbnRleHRQcm92aWRlcihiYXNlQ29udGV4dCkpXG4gICAgICAgIDogYmFzZUNvbnRleHQ7XG5cbiAgICAgIGNvbnN0IHN0ZXAgPSBuZXcgU3RlcFdyYXBwZXIocGFyYW1zLnN0ZXApO1xuICAgICAgcmV0dXJuIFNvbmFtdS5hc3luY0xvY2FsU3RvcmFnZS5ydW4oeyBjb250ZXh0IH0sICgpID0+XG4gICAgICAgIG9wdGlvbnMuZnVuY3Rpb24oe1xuICAgICAgICAgIGlucHV0OiBwYXJhbXMuaW5wdXQsXG4gICAgICAgICAgc3RlcCxcbiAgICAgICAgICB2ZXJzaW9uOiBwYXJhbXMudmVyc2lvbixcbiAgICAgICAgICBsb2dnZXI6IGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeShvcHRpb25zLm5hbWUsIFwid29ya2Zsb3dcIikpLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IHdvcmtmbG93ID0gdGhpcy4jb3cuZGVmaW5lV29ya2Zsb3coXG4gICAgICB7XG4gICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IHVuZGVmaW5lZCxcbiAgICAgICAgc2NoZW1hOiBvcHRpb25zLnNjaGVtYSxcbiAgICAgICAgcmV0cnlQb2xpY3k6IG9wdGlvbnMucmV0cnlQb2xpY3ksXG4gICAgICB9LFxuICAgICAgZm4sXG4gICAgKTtcbiAgICByZXR1cm4gd29ya2Zsb3c7XG4gIH1cblxuICAvLyDsm4ztgaztlIzroZzsmrDrpbwg65Ox66GdIO2VtOygnCwg6rSA66Co65CcIOyKpOy8gOykhOydgCDrs4Trj4TroZwg7ZW07KCc7ZW07JW8IO2VqC5cbiAgYXN5bmMgdW5yZWdpc3RlcldvcmtmbG93KHdvcmtmbG93OiBQaWNrPFdvcmtmbG93TWV0YWRhdGEsIFwibmFtZVwiIHwgXCJ2ZXJzaW9uXCIgfCBcImlkXCI+KSB7XG4gICAgdGhpcy4jb3cudW5yZWdpc3RlcldvcmtmbG93KHdvcmtmbG93Lm5hbWUsIHdvcmtmbG93LnZlcnNpb24gPz8gbnVsbCk7XG4gIH1cblxuICAvLyBXb3JrZXLrpbwg7ISk7KCVIO2bhCDsi5zsnpFcbiAgc2V0dXBXb3JrZXIob3B0aW9uczogV29ya2Zsb3dPcHRpb25zKSB7XG4gICAgdGhpcy4jd29ya2VyID0gdGhpcy4jb3cubmV3V29ya2VyKG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gV29ya2Vy6rCAIOyeiOycvOuptCBXb3JrZXLquYzsp4Ag7LSI6riw7ZmULCDslYTri4jrqbQg67Cx7JeU65Oc66eMIOy0iOq4sO2ZlFxuICBhc3luYyBzdGFydFdvcmtlcigpIHtcbiAgICBhd2FpdCB0aGlzLiNiYWNrZW5kLmluaXRpYWxpemUoKTtcbiAgICBhd2FpdCB0aGlzLiN3b3JrZXI/LnN0YXJ0KCk7XG4gIH1cblxuICAvLyBXb3JrZXLrpbwg7KSR7KeAXG4gIGFzeW5jIHN0b3BXb3JrZXIoKSB7XG4gICAgYXdhaXQgdGhpcy4jd29ya2VyPy5zdG9wKCk7XG4gIH1cblxuICAvLyBjcm9uIHRhc2vrk6TsnYQg66qo65GQIOykkeyngFxuICBhc3luYyBzdG9wU2NoZWR1bGVzKCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIEFycmF5LmZyb20odGhpcy4jc2NoZWR1bGVkVGFza3MudmFsdWVzKCkpLm1hcCgoeyB0YXNrIH0pID0+IFByb21pc2UucmVzb2x2ZSh0YXNrLnN0b3AoKSkpLFxuICAgICk7XG4gIH1cblxuICAvLyBjcm9uIHRhc2vrk6TsnYQg66qo65GQIOygleumrFxuICBhc3luYyBkZXN0cm95U2NoZWR1bGVzKCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIEFycmF5LmZyb20odGhpcy4jc2NoZWR1bGVkVGFza3MudmFsdWVzKCkpLm1hcCgoeyB0YXNrIH0pID0+IFByb21pc2UucmVzb2x2ZSh0YXNrLmRlc3Ryb3koKSkpLFxuICAgICk7XG4gICAgdGhpcy4jc2NoZWR1bGVkVGFza3MuY2xlYXIoKTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3koKSB7XG4gICAgYXdhaXQgdGhpcy5zdG9wU2NoZWR1bGVzKCk7XG4gICAgYXdhaXQgdGhpcy5zdG9wV29ya2VyKCk7XG4gICAgYXdhaXQgdGhpcy5kZXN0cm95U2NoZWR1bGVzKCk7XG4gICAgYXdhaXQgdGhpcy4jYmFja2VuZC5zdG9wKCk7XG4gIH1cblxuICBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVzdHJveSgpO1xuICB9XG59XG4iXSwibmFtZXMiOlsiZ2V0TG9nZ2VyIiwiQmFja2VuZFBvc3RncmVzIiwiT3BlbldvcmtmbG93Iiwic2VyaWFsaXplUmV0cnlQb2xpY3kiLCJhc3NlcnQiLCJzY2hlZHVsZSIsImNyb25TY2hlZHVsZSIsIlNvbmFtdSIsImNvbnZlcnREb21haW5Ub0NhdGVnb3J5IiwiTmFpdGUiLCJjcmVhdGVNb2NrU1NFRmFjdG9yeSIsIlN0ZXBXcmFwcGVyIiwiV29ya2Zsb3dNYW5hZ2VyIiwiZGJDb25mIiwicnVuTWlncmF0aW9ucyIsImJhY2tlbmQiLCJNYXAiLCJ3b3JrZmxvd0RlZmluaXRpb25zIiwiQXJyYXkiLCJmcm9tIiwidmFsdWVzIiwiZmxhdCIsIm1hcCIsIndmIiwiaWQiLCJuYW1lIiwidmVyc2lvbiIsInNjaGVkdWxlcyIsInMiLCJleHByZXNzaW9uIiwicmV0cnlQb2xpY3kiLCJ1bmRlZmluZWQiLCJzeW5jaHJvbml6ZSIsIndvcmtmbG93TWFwIiwiUHJvbWlzZSIsImFsbFNldHRsZWQiLCJlbnRyaWVzIiwiZmlsdGVyIiwia2V5IiwiaGFzIiwiZmxhdE1hcCIsIl8iLCJ3b3JrZmxvd3MiLCJ3b3JrZmxvdyIsInVuc2NoZWR1bGVUYXNrIiwidW5yZWdpc3RlcldvcmtmbG93IiwicmVnaXN0ZXJXb3JrZmxvdyIsInNjaGVtYSIsImZ1bmN0aW9uIiwiZm4iLCJzY2hlZHVsZVRhc2siLCJuZXdXb3JrZmxvd3MiLCJwcmV2aW91c1dvcmtmbG93cyIsImdldCIsInByZXZJdGVtIiwic29tZSIsIm5ld0l0ZW0iLCJydW4iLCJvcHRpb25zIiwiaW5wdXQiLCJydW5Xb3JrZmxvdyIsInRhc2siLCJpbnB1dERhdGEiLCJyZXNvbHZlIiwiYmluZCIsInRpbWV6b25lIiwiY29uZmlnIiwiYXBpIiwibm9PdmVybGFwIiwic2V0IiwiaW5wdXRGbiIsIndvcmtmbG93SWQiLCJzdGFydCIsInRhc2tJdGVtIiwiY29uc29sZSIsImVycm9yIiwiZGVsZXRlIiwic3RvcCIsImRlc3Ryb3kiLCJwYXJhbXMiLCJiYXNlQ29udGV4dCIsInJlcXVlc3QiLCJyZXBseSIsImhlYWRlcnMiLCJjcmVhdGVTU0UiLCJuYWl0ZVN0b3JlIiwiY3JlYXRlU3RvcmUiLCJ1c2VyIiwicGFzc3BvcnQiLCJsb2dpbiIsImxvZ291dCIsImNvbnRleHRQcm92aWRlciIsInRhc2tzIiwiY29udGV4dCIsInN0ZXAiLCJhc3luY0xvY2FsU3RvcmFnZSIsImxvZ2dlciIsImRlZmluZVdvcmtmbG93Iiwic2V0dXBXb3JrZXIiLCJuZXdXb3JrZXIiLCJzdGFydFdvcmtlciIsImluaXRpYWxpemUiLCJzdG9wV29ya2VyIiwic3RvcFNjaGVkdWxlcyIsImRlc3Ryb3lTY2hlZHVsZXMiLCJjbGVhciIsIlN5bWJvbCIsImFzeW5jRGlzcG9zZSJdLCJtYXBw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
193
+ //#endregion
194
+ init_workflow_manager();
195
+ export { WorkflowManager };
196
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbWFuYWdlci5qcyIsIm5hbWVzIjpbIiNiYWNrZW5kIiwiI293IiwiI3dvcmtlciIsIiN3b3JrZmxvd3NNYXAiLCIjc2NoZWR1bGVkVGFza3MiLCJzY2hlZHVsZSIsImNyb25TY2hlZHVsZSIsImNvbnRleHQ6IENvbnRleHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFza3Mvd29ya2Zsb3ctbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IHR5cGUgTG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IEJhY2tlbmRQb3N0Z3JlcywgT3BlbldvcmtmbG93IH0gZnJvbSBcIkBzb25hbXUta2l0L3Rhc2tzXCI7XG5pbXBvcnQgeyB0eXBlIFdvcmtlciB9IGZyb20gXCJAc29uYW11LWtpdC90YXNrc1wiO1xuaW1wb3J0IHsgc2VyaWFsaXplUmV0cnlQb2xpY3kgfSBmcm9tIFwiQHNvbmFtdS1raXQvdGFza3MvaW50ZXJuYWxcIjtcbmltcG9ydCB7XG4gIHR5cGUgUnVubmFibGVXb3JrZmxvdyxcbiAgdHlwZSBTY2hlbWFJbnB1dCxcbiAgdHlwZSBTY2hlbWFPdXRwdXQsXG4gIHR5cGUgU3RhbmRhcmRTY2hlbWFWMSxcbiAgdHlwZSBTdGVwQXBpLFxuICB0eXBlIFdvcmtmbG93UnVuSGFuZGxlLFxuICB0eXBlIFdvcmtmbG93U3BlYyxcbn0gZnJvbSBcIkBzb25hbXUta2l0L3Rhc2tzL2ludGVybmFsXCI7XG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgc2NoZWR1bGUgYXMgY3JvblNjaGVkdWxlIH0gZnJvbSBcIm5vZGUtY3JvblwiO1xuaW1wb3J0IHsgdHlwZSBTY2hlZHVsZWRUYXNrIH0gZnJvbSBcIm5vZGUtY3JvblwiO1xuaW1wb3J0IHsgdHlwZSBab2RPYmplY3QgfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IHR5cGUgQ29udGV4dCB9IGZyb20gXCIuLi9hcGkvY29udGV4dFwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IGNvbnZlcnREb21haW5Ub0NhdGVnb3J5IH0gZnJvbSBcIi4uL2xvZ2dlci9jYXRlZ29yeVwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IGNyZWF0ZU1vY2tTU0VGYWN0b3J5IH0gZnJvbSBcIi4uL3N0cmVhbS9zc2VcIjtcbmltcG9ydCB7IHR5cGUgRXhlY3V0YWJsZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBXb3JrZmxvd01ldGFkYXRhIH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdGVwV3JhcHBlciB9IGZyb20gXCIuL3N0ZXAtd3JhcHBlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93T3B0aW9ucyB7XG4gIC8vIHdvcmtlcuyXkOyEnCDrj5nsi5wg7Iuk7ZaJ7ZWgIO2DnOyKpO2BrCDsiJgsIOq4sOuzuOydgCAxXG4gIGNvbmN1cnJlbmN5PzogbnVtYmVyO1xuXG4gIC8vIHdvcmtlcuyXkOyEnCDsgqzsmqntlaAgcHViL3N1YiDsl6zrtoAsIOq4sOuzuOydgCB0cnVlXG4gIHVzZVB1YlN1Yj86IGJvb2xlYW47XG5cbiAgLy8gcHViL3N1YuycvOuhnCDtg5zsiqTtgazrpbwg7IiY7Iug7ZaI7J2EIOuVjCDsm4ztgaztlIzroZzsmrAg7Iuk7ZaJ6rmM7KeAIOyngOyXsCDsi5zqsIQsIOq4sOuzuOydgCA1MDBtc1xuICBsaXN0ZW5EZWxheT86IG51bWJlcjtcbn1cblxuLy8gV29ya2Zsb3cg7ZWo7IiY7J2YIO2DgOyehSwgQHNvbmFtdS1raXQvdGFza3PsmYAg64uk66W4IOygkOydgCBzdGVw7J2EIO2VnOuyiCDqsJDsi7wg7ZiV7YOcLlxuZXhwb3J0IHR5cGUgV29ya2Zsb3dGdW5jdGlvbjxJbnB1dCwgT3V0cHV0PiA9IChcbiAgcGFyYW1zOiBSZWFkb25seTx7XG4gICAgbG9nZ2VyOiBMb2dnZXI7XG4gICAgaW5wdXQ6IElucHV0O1xuICAgIHN0ZXA6IFN0ZXBXcmFwcGVyO1xuICAgIHZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gIH0+LFxuKSA9PiBQcm9taXNlPE91dHB1dD4gfCBPdXRwdXQ7XG5cbi8vIFdvcmtmbG9366W8IOuTseuhne2VoCDrlYzrpbwg7JyE7ZWcIO2DgOyehVxuZXhwb3J0IHR5cGUgV29ya2Zsb3dDcmVhdGVPcHRpb25zPFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbj4gPSBPbWl0PFxuICBXb3JrZmxvd1NwZWM8U2NoZW1hT3V0cHV0PFRTY2hlbWEsIElucHV0PiwgT3V0cHV0LCBTY2hlbWFJbnB1dDxUU2NoZW1hLCBJbnB1dD4+LFxuICBcInZlcnNpb25cIlxuPiAmIHtcbiAgaWQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgZnVuY3Rpb246IFdvcmtmbG93RnVuY3Rpb248U2NoZW1hT3V0cHV0PFRTY2hlbWEsIElucHV0PiwgT3V0cHV0Pjtcbn07XG5cbmV4cG9ydCBjbGFzcyBXb3JrZmxvd01hbmFnZXIge1xuICAvLyBiYWNrZW5kIOyduOyKpO2EtOyKpFxuICByZWFkb25seSAjYmFja2VuZDogQmFja2VuZFBvc3RncmVzO1xuXG4gIC8vIE9wZW5Xb3JrZmxvdyDsnbjsiqTthLTsiqRcbiAgcmVhZG9ubHkgI293OiBPcGVuV29ya2Zsb3c7XG5cbiAgLy8gV29ya2VyIOyduOyKpO2EtOyKpCAo7JeG7J2EIOyImCDsnojsnLzrqbAsIOydtCDrlYzripQg67aE7IKw65CcIOyEnOuyhCDtmZjqsr3sl5DshJwgRELsl5AgcHVibGlzaOunjCDtlZzri6Tqs6Ag6rCA7KCV7ZWoKVxuICAjd29ya2VyOiBXb3JrZXIgfCBudWxsO1xuXG4gIC8vIO2MjOydvCDqsr3roZwgLT4g7YyM7J287JeQIOygleydmOuQnCDsm4ztgaztlIzroZzsmrAg66mU7YOA642w7J207YSwIOuqqeuhnVxuICAjd29ya2Zsb3dzTWFwOiBNYXA8c3RyaW5nLCBXb3JrZmxvd01ldGFkYXRhW10+O1xuXG4gIC8vIFRhc2sg7J2066aEIC0+IFRhc2sg7KCV67O0IOuwjyBJbnB1dCDqsJIsIFdvcmtmbG93IElEXG4gICNzY2hlZHVsZWRUYXNrczogTWFwPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICB0YXNrOiBTY2hlZHVsZWRUYXNrO1xuICAgICAgaW5wdXRGbjogRXhlY3V0YWJsZTxTY2hlbWFJbnB1dDx1bmtub3duLCB1bmtub3duPj47XG4gICAgICB3b3JrZmxvd0lkOiBzdHJpbmc7XG4gICAgfVxuICA+O1xuXG4gIC8vIEJhY2tlbmRQb3N0Z3Jlc+yXkOyEnCDsspjrpqztlZjripQg6rKD65Ok7J20IOyeiOyWtOyEnCBLbmV4IOy7pOuEpeyFmOydtCDslYTri4jrnbwg7ISk7KCV6rCS7J2EIOuEo+yWtOykmOyVvO2VqC5cbiAgY29uc3RydWN0b3IoZGJDb25mOiBLbmV4LkNvbmZpZywgcnVuTWlncmF0aW9uczogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBiYWNrZW5kID0gbmV3IEJhY2tlbmRQb3N0Z3JlcyhkYkNvbmYsIHsgcnVuTWlncmF0aW9ucyB9KTtcblxuICAgIHRoaXMuI2JhY2tlbmQgPSBiYWNrZW5kO1xuICAgIHRoaXMuI293ID0gbmV3IE9wZW5Xb3JrZmxvdyh7IGJhY2tlbmQgfSk7XG4gICAgdGhpcy4jd29ya2VyID0gbnVsbDtcblxuICAgIHRoaXMuI3dvcmtmbG93c01hcCA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLiNzY2hlZHVsZWRUYXNrcyA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIC8vIFNvbmFtdSBVSSBBUEnsl5DshJwg7JuM7YGs7ZSM66Gc7JqwIOyLpO2WiSDrqqnroZ0g7KGw7ZqMLCDst6jshowg65Ox7JeQIOyCrOyaqe2VqeuLiOuLpC5cbiAgZ2V0IGJhY2tlbmQoKTogQmFja2VuZFBvc3RncmVzIHtcbiAgICByZXR1cm4gdGhpcy4jYmFja2VuZDtcbiAgfVxuXG4gIGdldCB3b3JrZmxvd0RlZmluaXRpb25zKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuI3dvcmtmbG93c01hcC52YWx1ZXMoKSlcbiAgICAgIC5mbGF0KClcbiAgICAgIC5tYXAoKHdmKSA9PiAoe1xuICAgICAgICBpZDogd2YuaWQsXG4gICAgICAgIG5hbWU6IHdmLm5hbWUsXG4gICAgICAgIHZlcnNpb246IHdmLnZlcnNpb24sXG4gICAgICAgIHNjaGVkdWxlczogd2Yuc2NoZWR1bGVzLm1hcCgocykgPT4gKHtcbiAgICAgICAgICBuYW1lOiBzLm5hbWUsXG4gICAgICAgICAgZXhwcmVzc2lvbjogcy5leHByZXNzaW9uLFxuICAgICAgICB9KSksXG4gICAgICAgIHJldHJ5UG9saWN5OiB3Zi5yZXRyeVBvbGljeSA/IHNlcmlhbGl6ZVJldHJ5UG9saWN5KHdmLnJldHJ5UG9saWN5KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDsoJXsnZjrkJwg7JuM7YGs7ZSM66Gc7JqwIOuwjyDsm4ztgaztlIzroZzsmrDsl5Ag64yA7ZWcIHNjaGVkdWxlZCB0YXNrc+ulvCDrj5nquLDtmZTtlanri4jri6QuXG4gICAqL1xuICBhc3luYyBzeW5jaHJvbml6ZSh3b3JrZmxvd01hcDogTWFwPHN0cmluZywgV29ya2Zsb3dNZXRhZGF0YVtdPikge1xuICAgIC8vIDEuIOyCreygnOuQnCDtjIzsnbzsnYAg7J286rSEIOyCreygnFxuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIEFycmF5LmZyb20odGhpcy4jd29ya2Zsb3dzTWFwLmVudHJpZXMoKSlcbiAgICAgICAgLmZpbHRlcigoW2tleV0pID0+ICF3b3JrZmxvd01hcC5oYXMoa2V5KSlcbiAgICAgICAgLmZsYXRNYXAoKFtfLCB3b3JrZmxvd3NdKSA9PlxuICAgICAgICAgIHdvcmtmbG93cy5tYXAoKHdvcmtmbG93KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgICAgICAgICAgLi4ud29ya2Zsb3cuc2NoZWR1bGVzLm1hcCgoc2NoZWR1bGUpID0+IHRoaXMudW5zY2hlZHVsZVRhc2soc2NoZWR1bGUubmFtZSkpLFxuICAgICAgICAgICAgICB0aGlzLnVucmVnaXN0ZXJXb3JrZmxvdyh3b3JrZmxvdyksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICApO1xuXG4gICAgLy8gMi4g7IOI66GcIOy2lOqwgOuQnCDtjIzsnbzsnYAg7J286rSEIOuTseuhnVxuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIEFycmF5LmZyb20od29ya2Zsb3dNYXAuZW50cmllcygpKVxuICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4gIXRoaXMuI3dvcmtmbG93c01hcC5oYXMoa2V5KSlcbiAgICAgICAgLmZsYXRNYXAoKFtfLCB3b3JrZmxvd3NdKSA9PlxuICAgICAgICAgIHdvcmtmbG93cy5tYXAoKHdvcmtmbG93KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyV29ya2Zsb3coe1xuICAgICAgICAgICAgICBpZDogd29ya2Zsb3cuaWQsXG4gICAgICAgICAgICAgIG5hbWU6IHdvcmtmbG93Lm5hbWUsXG4gICAgICAgICAgICAgIHZlcnNpb246IHdvcmtmbG93LnZlcnNpb24gPz8gbnVsbCxcbiAgICAgICAgICAgICAgc2NoZW1hOiB3b3JrZmxvdy5zY2hlbWEsXG4gICAgICAgICAgICAgIGZ1bmN0aW9uOiB3b3JrZmxvdy5mbixcbiAgICAgICAgICAgICAgcmV0cnlQb2xpY3k6IHdvcmtmbG93LnJldHJ5UG9saWN5LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgICAgIHdvcmtmbG93LnNjaGVkdWxlcy5tYXAoKHNjaGVkdWxlKSA9PiB0aGlzLnNjaGVkdWxlVGFzayh3b3JrZmxvdywgc2NoZWR1bGUpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIC8vIDMuIOq4sOyhtOqzvCDri6Trpbgg6rKD7J2EIGRpZmbsuZwg64uk7J2MLCDsgq3soJwg7ZuEIOyerOuTseuhnVxuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIEFycmF5LmZyb20od29ya2Zsb3dNYXAuZW50cmllcygpKVxuICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4gdGhpcy4jd29ya2Zsb3dzTWFwLmhhcyhrZXkpKVxuICAgICAgICAubWFwPFtzdHJpbmcsIFtXb3JrZmxvd01ldGFkYXRhW10sIFdvcmtmbG93TWV0YWRhdGFbXV1dPigoW2tleSwgbmV3V29ya2Zsb3dzXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzV29ya2Zsb3dzID0gdGhpcy4jd29ya2Zsb3dzTWFwLmdldChrZXkpO1xuICAgICAgICAgIGFzc2VydChwcmV2aW91c1dvcmtmbG93cywgXCJwcmV2aW91cyB3b3JrZmxvd3Mgbm90IGZvdW5kXCIpO1xuICAgICAgICAgIHJldHVybiBba2V5LCBbcHJldmlvdXNXb3JrZmxvd3MsIG5ld1dvcmtmbG93c11dO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKGFzeW5jIChbXywgW3ByZXZpb3VzV29ya2Zsb3dzLCBuZXdXb3JrZmxvd3NdXSkgPT4ge1xuICAgICAgICAgIC8vIOq4sOyhtCDqsoPrk6TsnYQg7IKt7KCc67aA7YSwIO2VtOyVvO2VqC5cbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgICBwcmV2aW91c1dvcmtmbG93c1xuICAgICAgICAgICAgICAuZmlsdGVyKChwcmV2SXRlbSkgPT4gIW5ld1dvcmtmbG93cy5zb21lKChuZXdJdGVtKSA9PiBuZXdJdGVtLmlkID09PSBwcmV2SXRlbS5pZCkpXG4gICAgICAgICAgICAgIC5tYXAoKHByZXZJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICAgICAgICAgICAgICAuLi5wcmV2SXRlbS5zY2hlZHVsZXMubWFwKChzY2hlZHVsZSkgPT4gdGhpcy51bnNjaGVkdWxlVGFzayhzY2hlZHVsZS5uYW1lKSksXG4gICAgICAgICAgICAgICAgICB0aGlzLnVucmVnaXN0ZXJXb3JrZmxvdyhwcmV2SXRlbSksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyDsg4jroZwg7LaU6rCA65CcIOqyg+uTpOydhCDrk7HroZ1cbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgICBuZXdXb3JrZmxvd3NcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAobmV3SXRlbSkgPT4gIXByZXZpb3VzV29ya2Zsb3dzLnNvbWUoKHByZXZJdGVtKSA9PiBwcmV2SXRlbS5pZCA9PT0gbmV3SXRlbS5pZCksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLm1hcChhc3luYyAobmV3SXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJXb3JrZmxvdyh7XG4gICAgICAgICAgICAgICAgICBpZDogbmV3SXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IG5ld0l0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgIHZlcnNpb246IG5ld0l0ZW0udmVyc2lvbiA/PyBudWxsLFxuICAgICAgICAgICAgICAgICAgc2NoZW1hOiBuZXdJdGVtLnNjaGVtYSxcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uOiBuZXdJdGVtLmZuLFxuICAgICAgICAgICAgICAgICAgcmV0cnlQb2xpY3k6IG5ld0l0ZW0ucmV0cnlQb2xpY3ksXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgICAgICAgICAgICAgbmV3SXRlbS5zY2hlZHVsZXMubWFwKChzY2hlZHVsZSkgPT4gdGhpcy5zY2hlZHVsZVRhc2sobmV3SXRlbSwgc2NoZWR1bGUpKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICApO1xuXG4gICAgdGhpcy4jd29ya2Zsb3dzTWFwID0gd29ya2Zsb3dNYXA7XG4gIH1cblxuICAvLyDsm4ztgaztlIzroZzsmrDrpbwg7Iuk7ZaJXG4gIHJ1bjxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgb3B0aW9uczogT21pdDxXb3JrZmxvd0NyZWF0ZU9wdGlvbnM8SW5wdXQsIE91dHB1dCwgVFNjaGVtYT4sIFwiZnVuY3Rpb25cIiB8IFwic2NoZW1hXCIgfCBcImlkXCI+LFxuICAgIGlucHV0OiBTY2hlbWFJbnB1dDxUU2NoZW1hLCBJbnB1dD4sXG4gICk6IFByb21pc2U8V29ya2Zsb3dSdW5IYW5kbGU8T3V0cHV0Pj4ge1xuICAgIHJldHVybiB0aGlzLiNvdy5ydW5Xb3JrZmxvdyhcbiAgICAgIHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIGlucHV0LFxuICAgICk7XG4gIH1cblxuICAvLyBjcm9uIHRhc2vrpbwg65Ox66GdXG4gIGFzeW5jIHNjaGVkdWxlVGFzayhcbiAgICB3b3JrZmxvdzogUGljazxXb3JrZmxvd01ldGFkYXRhLCBcImlkXCIgfCBcIm5hbWVcIiB8IFwidmVyc2lvblwiPixcbiAgICBzY2hlZHVsZTogV29ya2Zsb3dNZXRhZGF0YVtcInNjaGVkdWxlc1wiXVtudW1iZXJdLFxuICApIHtcbiAgICAvLyBXb3JrZXLqsIAg7Zmc7ISx7ZmU65CcIOuFuOuTnOyXkOyEnOunjCDsspjrpqxcbiAgICBpZiAoIXRoaXMuI3dvcmtlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhc2sgPSBjcm9uU2NoZWR1bGUoXG4gICAgICBzY2hlZHVsZS5leHByZXNzaW9uLFxuICAgICAgKGFzeW5jIChcbiAgICAgICAgeyBuYW1lLCB2ZXJzaW9uIH06IFBpY2s8V29ya2Zsb3dNZXRhZGF0YSwgXCJuYW1lXCIgfCBcInZlcnNpb25cIj4sXG4gICAgICAgIHsgaW5wdXQgfTogV29ya2Zsb3dNZXRhZGF0YVtcInNjaGVkdWxlc1wiXVtudW1iZXJdLFxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0RGF0YSA9IGF3YWl0ICh0eXBlb2YgaW5wdXQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKGlucHV0KCkpXG4gICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoaW5wdXQpKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5ydW4oeyBuYW1lLCB2ZXJzaW9uOiB2ZXJzaW9uID8/IG51bGwgfSwgaW5wdXREYXRhKTtcbiAgICAgIH0pLmJpbmQodGhpcywgd29ya2Zsb3csIHNjaGVkdWxlKSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogc2NoZWR1bGUubmFtZSxcbiAgICAgICAgdGltZXpvbmU6IFNvbmFtdS5jb25maWcuYXBpLnRpbWV6b25lLFxuICAgICAgICBub092ZXJsYXA6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy4jc2NoZWR1bGVkVGFza3Muc2V0KHNjaGVkdWxlLm5hbWUsIHtcbiAgICAgIHRhc2ssXG4gICAgICBpbnB1dEZuOiBzY2hlZHVsZS5pbnB1dCxcbiAgICAgIHdvcmtmbG93SWQ6IHdvcmtmbG93LmlkLFxuICAgIH0pO1xuICAgIGF3YWl0IHRhc2suc3RhcnQoKTtcbiAgfVxuXG4gIC8vIGNyb24gdGFza+ulvCDspJHsp4BcbiAgYXN5bmMgdW5zY2hlZHVsZVRhc2sobmFtZTogc3RyaW5nKSB7XG4gICAgLy8gV29ya2Vy6rCAIO2ZnOyEse2ZlOuQnCDrhbjrk5zsl5DshJzrp4wg7LKY66asXG4gICAgaWYgKCF0aGlzLiN3b3JrZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0YXNrSXRlbSA9IHRoaXMuI3NjaGVkdWxlZFRhc2tzLmdldChuYW1lKTtcbiAgICBpZiAoIXRhc2tJdGVtKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwic2NoZWR1bGVkIHRhc2sgbm90IGZvdW5kXCIsIG5hbWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuI3NjaGVkdWxlZFRhc2tzLmRlbGV0ZShuYW1lKTtcbiAgICBhd2FpdCB0YXNrSXRlbS50YXNrLnN0b3AoKTtcbiAgICBhd2FpdCB0YXNrSXRlbS50YXNrLmRlc3Ryb3koKTtcbiAgfVxuXG4gIC8vIOybjO2BrO2UjOuhnOyasOulvCDrk7HroZ0sIOq0gOugqOuQnCDsiqTsvIDspITsnYAg67OE64+E66GcIOuTseuhne2VtOyVvCDtlaguXG4gIHJlZ2lzdGVyV29ya2Zsb3c8SW5wdXQsIE91dHB1dCwgVFNjaGVtYSBleHRlbmRzIFN0YW5kYXJkU2NoZW1hVjEgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICAgIG9wdGlvbnM6IFdvcmtmbG93Q3JlYXRlT3B0aW9uczxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hPixcbiAgKTogUnVubmFibGVXb3JrZmxvdzxTY2hlbWFPdXRwdXQ8VFNjaGVtYSwgSW5wdXQ+LCBPdXRwdXQsIFNjaGVtYUlucHV0PFRTY2hlbWEsIElucHV0Pj4ge1xuICAgIGNvbnN0IGZuID0gYXN5bmMgKFxuICAgICAgcGFyYW1zOiBSZWFkb25seTx7XG4gICAgICAgIGlucHV0OiBTY2hlbWFPdXRwdXQ8VFNjaGVtYSwgSW5wdXQ+O1xuICAgICAgICBzdGVwOiBTdGVwQXBpO1xuICAgICAgICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICAgICAgfT4sXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBiYXNlQ29udGV4dCA9IHtcbiAgICAgICAgcmVxdWVzdDogbnVsbCxcbiAgICAgICAgcmVwbHk6IG51bGwsXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBjcmVhdGVTU0U6IChzY2hlbWE6IFpvZE9iamVjdCkgPT4gY3JlYXRlTW9ja1NTRUZhY3Rvcnkoc2NoZW1hKSxcbiAgICAgICAgbmFpdGVTdG9yZTogTmFpdGUuY3JlYXRlU3RvcmUoKSxcbiAgICAgICAgbG9jYWxlOiBcIlwiLFxuICAgICAgICB1c2VyOiBudWxsLFxuICAgICAgICBzZXNzaW9uOiBudWxsLFxuICAgICAgfSBhcyB1bmtub3duIGFzIENvbnRleHQ7XG5cbiAgICAgIGNvbnN0IGNvbnRleHRQcm92aWRlciA9IFNvbmFtdS5jb25maWcudGFza3M/LmNvbnRleHRQcm92aWRlcjtcbiAgICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSBjb250ZXh0UHJvdmlkZXJcbiAgICAgICAgPyBhd2FpdCBQcm9taXNlLnJlc29sdmUoY29udGV4dFByb3ZpZGVyKGJhc2VDb250ZXh0KSlcbiAgICAgICAgOiBiYXNlQ29udGV4dDtcblxuICAgICAgY29uc3Qgc3RlcCA9IG5ldyBTdGVwV3JhcHBlcihwYXJhbXMuc3RlcCk7XG4gICAgICByZXR1cm4gU29uYW11LmFzeW5jTG9jYWxTdG9yYWdlLnJ1bih7IGNvbnRleHQgfSwgKCkgPT5cbiAgICAgICAgb3B0aW9ucy5mdW5jdGlvbih7XG4gICAgICAgICAgaW5wdXQ6IHBhcmFtcy5pbnB1dCxcbiAgICAgICAgICBzdGVwLFxuICAgICAgICAgIHZlcnNpb246IHBhcmFtcy52ZXJzaW9uLFxuICAgICAgICAgIGxvZ2dlcjogZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KG9wdGlvbnMubmFtZSwgXCJ3b3JrZmxvd1wiKSksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgd29ya2Zsb3cgPSB0aGlzLiNvdy5kZWZpbmVXb3JrZmxvdyhcbiAgICAgIHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICBzY2hlbWE6IG9wdGlvbnMuc2NoZW1hLFxuICAgICAgICByZXRyeVBvbGljeTogb3B0aW9ucy5yZXRyeVBvbGljeSxcbiAgICAgIH0sXG4gICAgICBmbixcbiAgICApO1xuICAgIHJldHVybiB3b3JrZmxvdztcbiAgfVxuXG4gIC8vIOybjO2BrO2UjOuhnOyasOulvCDrk7HroZ0g7ZW07KCcLCDqtIDroKjrkJwg7Iqk7LyA7KSE7J2AIOuzhOuPhOuhnCDtlbTsoJztlbTslbwg7ZWoLlxuICBhc3luYyB1bnJlZ2lzdGVyV29ya2Zsb3cod29ya2Zsb3c6IFBpY2s8V29ya2Zsb3dNZXRhZGF0YSwgXCJuYW1lXCIgfCBcInZlcnNpb25cIiB8IFwiaWRcIj4pIHtcbiAgICB0aGlzLiNvdy51bnJlZ2lzdGVyV29ya2Zsb3cod29ya2Zsb3cubmFtZSwgd29ya2Zsb3cudmVyc2lvbiA/PyBudWxsKTtcbiAgfVxuXG4gIC8vIFdvcmtlcuulvCDshKTsoJUg7ZuEIOyLnOyekVxuICBzZXR1cFdvcmtlcihvcHRpb25zOiBXb3JrZmxvd09wdGlvbnMpIHtcbiAgICB0aGlzLiN3b3JrZXIgPSB0aGlzLiNvdy5uZXdXb3JrZXIob3B0aW9ucyk7XG4gIH1cblxuICAvLyBXb3JrZXLqsIAg7J6I7Jy866m0IFdvcmtlcuq5jOyngCDstIjquLDtmZQsIOyVhOuLiOuptCDrsLHsl5Trk5zrp4wg7LSI6riw7ZmUXG4gIGFzeW5jIHN0YXJ0V29ya2VyKCkge1xuICAgIGF3YWl0IHRoaXMuI2JhY2tlbmQuaW5pdGlhbGl6ZSgpO1xuICAgIGF3YWl0IHRoaXMuI3dvcmtlcj8uc3RhcnQoKTtcbiAgfVxuXG4gIC8vIFdvcmtlcuulvCDspJHsp4BcbiAgYXN5bmMgc3RvcFdvcmtlcigpIHtcbiAgICBhd2FpdCB0aGlzLiN3b3JrZXI/LnN0b3AoKTtcbiAgfVxuXG4gIC8vIGNyb24gdGFza+uTpOydhCDrqqjrkZAg7KSR7KeAXG4gIGFzeW5jIHN0b3BTY2hlZHVsZXMoKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh0aGlzLiNzY2hlZHVsZWRUYXNrcy52YWx1ZXMoKSkubWFwKCh7IHRhc2sgfSkgPT4gUHJvbWlzZS5yZXNvbHZlKHRhc2suc3RvcCgpKSksXG4gICAgKTtcbiAgfVxuXG4gIC8vIGNyb24gdGFza+uTpOydhCDrqqjrkZAg7KCV66asXG4gIGFzeW5jIGRlc3Ryb3lTY2hlZHVsZXMoKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh0aGlzLiNzY2hlZHVsZWRUYXNrcy52YWx1ZXMoKSkubWFwKCh7IHRhc2sgfSkgPT4gUHJvbWlzZS5yZXNvbHZlKHRhc2suZGVzdHJveSgpKSksXG4gICAgKTtcbiAgICB0aGlzLiNzY2hlZHVsZWRUYXNrcy5jbGVhcigpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpIHtcbiAgICBhd2FpdCB0aGlzLnN0b3BTY2hlZHVsZXMoKTtcbiAgICBhd2FpdCB0aGlzLnN0b3BXb3JrZXIoKTtcbiAgICBhd2FpdCB0aGlzLmRlc3Ryb3lTY2hlZHVsZXMoKTtcbiAgICBhd2FpdCB0aGlzLiNiYWNrZW5kLnN0b3AoKTtcbiAgfVxuXG4gIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXN0cm95KCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O2NBc0J1QztnQkFDc0I7YUFDdEI7V0FDYztvQkFHUjtDQXFDaEMsa0JBQWIsTUFBNkI7RUFFM0IsQ0FBU0E7RUFHVCxDQUFTQztFQUdUO0VBR0E7RUFHQTtFQVVBLFlBQVksUUFBcUIsZ0JBQXlCLE1BQU07R0FDOUQsTUFBTSxVQUFVLElBQUksZ0JBQWdCLFFBQVEsRUFBRSxlQUFlLENBQUM7QUFFOUQsU0FBS0QsVUFBVztBQUNoQixTQUFLQyxLQUFNLElBQUksYUFBYSxFQUFFLFNBQVMsQ0FBQztBQUN4QyxTQUFLQyxTQUFVO0FBRWYsU0FBS0MsZUFBZ0IsSUFBSSxLQUFLO0FBQzlCLFNBQUtDLGlCQUFrQixJQUFJLEtBQUs7O0VBSWxDLElBQUksVUFBMkI7QUFDN0IsVUFBTyxNQUFLSjs7RUFHZCxJQUFJLHNCQUFzQjtBQUN4QixVQUFPLE1BQU0sS0FBSyxNQUFLRyxhQUFjLFFBQVEsQ0FBQyxDQUMzQyxNQUFNLENBQ04sS0FBSyxRQUFRO0lBQ1osSUFBSSxHQUFHO0lBQ1AsTUFBTSxHQUFHO0lBQ1QsU0FBUyxHQUFHO0lBQ1osV0FBVyxHQUFHLFVBQVUsS0FBSyxPQUFPO0tBQ2xDLE1BQU0sRUFBRTtLQUNSLFlBQVksRUFBRTtLQUNmLEVBQUU7SUFDSCxhQUFhLEdBQUcsY0FBYyxxQkFBcUIsR0FBRyxZQUFZLEdBQUc7SUFDdEUsRUFBRTs7Ozs7RUFNUCxNQUFNLFlBQVksYUFBOEM7QUFFOUQsU0FBTSxRQUFRLFdBQ1osTUFBTSxLQUFLLE1BQUtBLGFBQWMsU0FBUyxDQUFDLENBQ3JDLFFBQVEsQ0FBQyxTQUFTLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUN4QyxTQUFTLENBQUMsR0FBRyxlQUNaLFVBQVUsS0FBSyxhQUFhO0FBQzFCLFdBQU8sUUFBUSxXQUFXLENBQ3hCLEdBQUcsU0FBUyxVQUFVLEtBQUssZUFBYSxLQUFLLGVBQWVFLFdBQVMsS0FBSyxDQUFDLEVBQzNFLEtBQUssbUJBQW1CLFNBQVMsQ0FDbEMsQ0FBQztLQUNGLENBQ0gsQ0FDSjtBQUdELFNBQU0sUUFBUSxXQUNaLE1BQU0sS0FBSyxZQUFZLFNBQVMsQ0FBQyxDQUM5QixRQUFRLENBQUMsU0FBUyxDQUFDLE1BQUtGLGFBQWMsSUFBSSxJQUFJLENBQUMsQ0FDL0MsU0FBUyxDQUFDLEdBQUcsZUFDWixVQUFVLEtBQUssYUFBYTtBQUMxQixTQUFLLGlCQUFpQjtLQUNwQixJQUFJLFNBQVM7S0FDYixNQUFNLFNBQVM7S0FDZixTQUFTLFNBQVMsV0FBVztLQUM3QixRQUFRLFNBQVM7S0FDakIsVUFBVSxTQUFTO0tBQ25CLGFBQWEsU0FBUztLQUN2QixDQUFDO0FBRUYsV0FBTyxRQUFRLFdBQ2IsU0FBUyxVQUFVLEtBQUssZUFBYSxLQUFLLGFBQWEsVUFBVUUsV0FBUyxDQUFDLENBQzVFO0tBQ0QsQ0FDSCxDQUNKO0FBR0QsU0FBTSxRQUFRLFdBQ1osTUFBTSxLQUFLLFlBQVksU0FBUyxDQUFDLENBQzlCLFFBQVEsQ0FBQyxTQUFTLE1BQUtGLGFBQWMsSUFBSSxJQUFJLENBQUMsQ0FDOUMsS0FBeUQsQ0FBQyxLQUFLLGtCQUFrQjtJQUNoRixNQUFNLG9CQUFvQixNQUFLQSxhQUFjLElBQUksSUFBSTtBQUNyRCxXQUFPLG1CQUFtQiwrQkFBK0I7QUFDekQsV0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsYUFBYSxDQUFDO0tBQy9DLENBQ0QsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixtQkFBbUI7QUFFckQsVUFBTSxRQUFRLFdBQ1osa0JBQ0csUUFBUSxhQUFhLENBQUMsYUFBYSxNQUFNLFlBQVksUUFBUSxPQUFPLFNBQVMsR0FBRyxDQUFDLENBQ2pGLEtBQUssYUFBYTtBQUNqQixZQUFPLFFBQVEsV0FBVyxDQUN4QixHQUFHLFNBQVMsVUFBVSxLQUFLLGVBQWEsS0FBSyxlQUFlRSxXQUFTLEtBQUssQ0FBQyxFQUMzRSxLQUFLLG1CQUFtQixTQUFTLENBQ2xDLENBQUM7TUFDRixDQUNMO0FBR0QsVUFBTSxRQUFRLFdBQ1osYUFDRyxRQUNFLFlBQVksQ0FBQyxrQkFBa0IsTUFBTSxhQUFhLFNBQVMsT0FBTyxRQUFRLEdBQUcsQ0FDL0UsQ0FDQSxJQUFJLE9BQU8sWUFBWTtBQUN0QixVQUFLLGlCQUFpQjtNQUNwQixJQUFJLFFBQVE7TUFDWixNQUFNLFFBQVE7TUFDZCxTQUFTLFFBQVEsV0FBVztNQUM1QixRQUFRLFFBQVE7TUFDaEIsVUFBVSxRQUFRO01BQ2xCLGFBQWEsUUFBUTtNQUN0QixDQUFDO0FBRUYsWUFBTyxRQUFRLFdBQ2IsUUFBUSxVQUFVLEtBQUssZUFBYSxLQUFLLGFBQWEsU0FBU0EsV0FBUyxDQUFDLENBQzFFO01BQ0QsQ0FDTDtLQUNELENBQ0w7QUFFRCxTQUFLRixlQUFnQjs7RUFJdkIsSUFDRSxTQUNBLE9BQ29DO0FBQ3BDLFVBQU8sTUFBS0YsR0FBSSxZQUNkO0lBQ0UsTUFBTSxRQUFRO0lBQ2QsU0FBUyxRQUFRLFdBQVc7SUFDN0IsRUFDRCxNQUNEOztFQUlILE1BQU0sYUFDSixVQUNBLFlBQ0E7QUFFQSxPQUFJLENBQUMsTUFBS0MsUUFBUztBQUNqQjs7R0FHRixNQUFNLE9BQU9JLFNBQ1hELFdBQVMsYUFDUixPQUNDLEVBQUUsTUFBTSxXQUNSLEVBQUUsWUFDQztJQUNILE1BQU0sWUFBWSxPQUFPLE9BQU8sVUFBVSxhQUN0QyxRQUFRLFFBQVEsT0FBTyxDQUFDLEdBQ3hCLFFBQVEsUUFBUSxNQUFNO0FBRTFCLFdBQU8sS0FBSyxJQUFJO0tBQUU7S0FBTSxTQUFTLFdBQVc7S0FBTSxFQUFFLFVBQVU7TUFDN0QsS0FBSyxNQUFNLFVBQVVBLFdBQVMsRUFDakM7SUFDRSxNQUFNQSxXQUFTO0lBQ2YsVUFBVSxPQUFPLE9BQU8sSUFBSTtJQUM1QixXQUFXO0lBQ1osQ0FDRjtBQUVELFNBQUtELGVBQWdCLElBQUlDLFdBQVMsTUFBTTtJQUN0QztJQUNBLFNBQVNBLFdBQVM7SUFDbEIsWUFBWSxTQUFTO0lBQ3RCLENBQUM7QUFDRixTQUFNLEtBQUssT0FBTzs7RUFJcEIsTUFBTSxlQUFlLE1BQWM7QUFFakMsT0FBSSxDQUFDLE1BQUtILFFBQVM7QUFDakI7O0dBR0YsTUFBTSxXQUFXLE1BQUtFLGVBQWdCLElBQUksS0FBSztBQUMvQyxPQUFJLENBQUMsVUFBVTtBQUNiLFlBQVEsTUFBTSw0QkFBNEIsS0FBSztBQUMvQzs7QUFHRixTQUFLQSxlQUFnQixPQUFPLEtBQUs7QUFDakMsU0FBTSxTQUFTLEtBQUssTUFBTTtBQUMxQixTQUFNLFNBQVMsS0FBSyxTQUFTOztFQUkvQixpQkFDRSxTQUNxRjtHQUNyRixNQUFNLEtBQUssT0FDVCxXQUtHO0lBQ0gsTUFBTSxjQUFjO0tBQ2xCLFNBQVM7S0FDVCxPQUFPO0tBQ1AsU0FBUyxFQUFFO0tBQ1gsWUFBWSxXQUFzQixxQkFBcUIsT0FBTztLQUM5RCxZQUFZLE1BQU0sYUFBYTtLQUMvQixRQUFRO0tBQ1IsTUFBTTtLQUNOLFNBQVM7S0FDVjtJQUVELE1BQU0sa0JBQWtCLE9BQU8sT0FBTyxPQUFPO0lBQzdDLE1BQU1HLFVBQW1CLGtCQUNyQixNQUFNLFFBQVEsUUFBUSxnQkFBZ0IsWUFBWSxDQUFDLEdBQ25EO0lBRUosTUFBTSxPQUFPLElBQUksWUFBWSxPQUFPLEtBQUs7QUFDekMsV0FBTyxPQUFPLGtCQUFrQixJQUFJLEVBQUUsU0FBUyxRQUM3QyxRQUFRLFNBQVM7S0FDZixPQUFPLE9BQU87S0FDZDtLQUNBLFNBQVMsT0FBTztLQUNoQixRQUFRLFVBQVUsd0JBQXdCLFFBQVEsTUFBTSxXQUFXLENBQUM7S0FDckUsQ0FBQyxDQUNIOztHQUdILE1BQU0sV0FBVyxNQUFLTixHQUFJLGVBQ3hCO0lBQ0UsTUFBTSxRQUFRO0lBQ2QsU0FBUyxRQUFRLFdBQVc7SUFDNUIsUUFBUSxRQUFRO0lBQ2hCLGFBQWEsUUFBUTtJQUN0QixFQUNELEdBQ0Q7QUFDRCxVQUFPOztFQUlULE1BQU0sbUJBQW1CLFVBQTZEO0FBQ3BGLFNBQUtBLEdBQUksbUJBQW1CLFNBQVMsTUFBTSxTQUFTLFdBQVcsS0FBSzs7RUFJdEUsWUFBWSxTQUEwQjtBQUNwQyxTQUFLQyxTQUFVLE1BQUtELEdBQUksVUFBVSxRQUFROztFQUk1QyxNQUFNLGNBQWM7QUFDbEIsU0FBTSxNQUFLRCxRQUFTLFlBQVk7QUFDaEMsU0FBTSxNQUFLRSxRQUFTLE9BQU87O0VBSTdCLE1BQU0sYUFBYTtBQUNqQixTQUFNLE1BQUtBLFFBQVMsTUFBTTs7RUFJNUIsTUFBTSxnQkFBZ0I7QUFDcEIsU0FBTSxRQUFRLFdBQ1osTUFBTSxLQUFLLE1BQUtFLGVBQWdCLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLFFBQVEsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQzFGOztFQUlILE1BQU0sbUJBQW1CO0FBQ3ZCLFNBQU0sUUFBUSxXQUNaLE1BQU0sS0FBSyxNQUFLQSxlQUFnQixRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxRQUFRLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUM3RjtBQUNELFNBQUtBLGVBQWdCLE9BQU87O0VBRzlCLE1BQU0sVUFBVTtBQUNkLFNBQU0sS0FBSyxlQUFlO0FBQzFCLFNBQU0sS0FBSyxZQUFZO0FBQ3ZCLFNBQU0sS0FBSyxrQkFBa0I7QUFDN0IsU0FBTSxNQUFLSixRQUFTLE1BQU07O0VBRzVCLENBQUMsT0FBTyxnQkFBZ0I7QUFDdEIsVUFBTyxLQUFLLFNBQVMifQ==
@@ -1,5 +1,5 @@
1
1
  import z from "zod";
2
- import type { EntityPropNode, RenderingNode } from "../types/types";
2
+ import { type EntityPropNode, type RenderingNode } from "../types/types";
3
3
  /**
4
4
  * 엔티티의 특정 subset을 RenderingNode로 변환합니다.
5
5
  * subset의 필드들을 Zod 타입으로 변환한 후 UI 렌더링용 노드로 만듭니다.
@@ -1 +1 @@
1
- {"version":3,"file":"entity-converter.d.ts","sourceRoot":"","sources":["../../src/template/entity-converter.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,KAAK,CAAC;AAIpB,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpE;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAyDhG;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAsCvF"}
1
+ {"version":3,"file":"entity-converter.d.ts","sourceRoot":"","sources":["../../src/template/entity-converter.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,KAAK,CAAC;AAKpB,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGzE;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAyDhG;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAsCvF"}