sonamu 0.8.25 → 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 (687) 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 -153
  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 +7 -8
  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 +15 -18
  427. package/dist/ui/cdd-service.d.ts.map +1 -1
  428. package/dist/ui/cdd-service.js +406 -383
  429. package/dist/ui/cdd-types.d.ts +41 -68
  430. package/dist/ui/cdd-types.d.ts.map +1 -1
  431. package/dist/ui/cdd-types.js +1 -3
  432. package/dist/ui-web/assets/index-C-Zz-wYg.css +1 -0
  433. package/dist/ui-web/assets/index-DejDON8K.js +238 -0
  434. package/dist/ui-web/index.html +3 -3
  435. package/dist/utils/async-utils.js +57 -45
  436. package/dist/utils/console-util.d.ts.map +1 -1
  437. package/dist/utils/console-util.js +104 -87
  438. package/dist/utils/controller.js +26 -19
  439. package/dist/utils/esm-utils.js +49 -38
  440. package/dist/utils/formatter.d.ts +1 -2
  441. package/dist/utils/formatter.d.ts.map +1 -1
  442. package/dist/utils/formatter.js +89 -115
  443. package/dist/utils/fs-utils.d.ts.map +1 -1
  444. package/dist/utils/fs-utils.js +68 -65
  445. package/dist/utils/lodash-able.js +11 -4
  446. package/dist/utils/model.d.ts +1 -1
  447. package/dist/utils/model.d.ts.map +1 -1
  448. package/dist/utils/model.js +21 -19
  449. package/dist/utils/object-utils.js +148 -186
  450. package/dist/utils/path-utils.js +67 -57
  451. package/dist/utils/process-utils.d.ts.map +1 -1
  452. package/dist/utils/process-utils.js +37 -31
  453. package/dist/utils/sql-parser.d.ts +1 -1
  454. package/dist/utils/sql-parser.d.ts.map +1 -1
  455. package/dist/utils/sql-parser.js +40 -40
  456. package/dist/utils/type-utils.js +44 -43
  457. package/dist/utils/utils.d.ts +2 -3
  458. package/dist/utils/utils.d.ts.map +1 -1
  459. package/dist/utils/utils.js +81 -93
  460. package/dist/utils/zod-error.d.ts +1 -1
  461. package/dist/utils/zod-error.d.ts.map +1 -1
  462. package/dist/utils/zod-error.js +24 -17
  463. package/dist/vector/chunking.d.ts +1 -1
  464. package/dist/vector/chunking.d.ts.map +1 -1
  465. package/dist/vector/chunking.js +100 -94
  466. package/dist/vector/config.d.ts +1 -1
  467. package/dist/vector/config.d.ts.map +1 -1
  468. package/dist/vector/config.js +76 -78
  469. package/dist/vector/embedding.d.ts +1 -1
  470. package/dist/vector/embedding.d.ts.map +1 -1
  471. package/dist/vector/embedding.js +128 -125
  472. package/dist/vector/index.js +5 -5
  473. package/dist/vector/types.js +1 -5
  474. package/package.json +35 -36
  475. package/src/ai/agents/agent.ts +12 -5
  476. package/src/ai/agents/types.ts +5 -5
  477. package/src/ai/providers/rtzr/model.ts +8 -10
  478. package/src/ai/providers/rtzr/options.ts +2 -1
  479. package/src/ai/providers/rtzr/provider.ts +5 -3
  480. package/src/ai/providers/rtzr/utils.ts +2 -7
  481. package/src/api/__tests__/config.test.ts +15 -8
  482. package/src/api/base-frame.ts +5 -3
  483. package/src/api/caster.ts +7 -6
  484. package/src/api/code-converters.ts +23 -26
  485. package/src/api/config.ts +23 -17
  486. package/src/api/context.ts +18 -11
  487. package/src/api/decorators.ts +17 -18
  488. package/src/api/sonamu.ts +44 -49
  489. package/src/auth/auth-generator.ts +4 -6
  490. package/src/auth/better-auth-entities.ts +3 -2
  491. package/src/auth/knex-adapter.ts +9 -7
  492. package/src/auth/plugins/entity-definitions/admin.ts +1 -1
  493. package/src/auth/plugins/entity-definitions/anonymous.ts +1 -1
  494. package/src/auth/plugins/entity-definitions/api-key.ts +1 -1
  495. package/src/auth/plugins/entity-definitions/index.ts +1 -1
  496. package/src/auth/plugins/entity-definitions/jwt.ts +1 -1
  497. package/src/auth/plugins/entity-definitions/organization.ts +1 -1
  498. package/src/auth/plugins/entity-definitions/passkey.ts +1 -1
  499. package/src/auth/plugins/entity-definitions/phone-number.ts +1 -1
  500. package/src/auth/plugins/entity-definitions/sso.ts +1 -1
  501. package/src/auth/plugins/entity-definitions/two-factor.ts +1 -1
  502. package/src/auth/plugins/entity-definitions/types.ts +1 -1
  503. package/src/auth/plugins/entity-definitions/username.ts +1 -1
  504. package/src/auth/plugins/wrappers/admin.ts +3 -1
  505. package/src/auth/plugins/wrappers/anonymous.ts +3 -1
  506. package/src/auth/plugins/wrappers/api-key.ts +3 -1
  507. package/src/auth/plugins/wrappers/jwt.ts +3 -1
  508. package/src/auth/plugins/wrappers/organization.ts +3 -1
  509. package/src/auth/plugins/wrappers/passkey.ts +3 -1
  510. package/src/auth/plugins/wrappers/phone-number.ts +3 -1
  511. package/src/auth/plugins/wrappers/sso.ts +2 -1
  512. package/src/auth/plugins/wrappers/two-factor.ts +3 -1
  513. package/src/auth/plugins/wrappers/username.ts +3 -1
  514. package/src/bin/__tests__/ts-loader-register.test.ts +7 -12
  515. package/src/bin/build-config.ts +3 -3
  516. package/src/bin/cli.ts +27 -25
  517. package/src/bin/fixture.ts +4 -2
  518. package/src/bin/hmr-hook-register.ts +1 -0
  519. package/src/bin/test-command.ts +4 -2
  520. package/src/bin/ts-loader-registration.ts +6 -22
  521. package/src/cache/cache-manager.ts +2 -1
  522. package/src/cache/decorator.ts +2 -2
  523. package/src/cache/types.ts +3 -3
  524. package/src/cache-control/cache-control.ts +3 -2
  525. package/src/cache-control/types.ts +2 -2
  526. package/src/compress/compress.ts +1 -1
  527. package/src/cone/cone-generator.ts +7 -5
  528. package/src/database/_batch_update.ts +1 -1
  529. package/src/database/base-model.ts +20 -14
  530. package/src/database/base-model.types.ts +12 -11
  531. package/src/database/db.ts +56 -21
  532. package/src/database/knex.ts +2 -2
  533. package/src/database/puri-subset.test-d.ts +130 -27
  534. package/src/database/puri-subset.types.ts +7 -8
  535. package/src/database/puri-wrapper.ts +29 -26
  536. package/src/database/puri.ts +36 -34
  537. package/src/database/puri.types.test-d.ts +6 -5
  538. package/src/database/puri.types.ts +9 -12
  539. package/src/database/transaction-context.ts +2 -2
  540. package/src/database/upsert-builder.ts +17 -10
  541. package/src/dict/sd.ts +17 -4
  542. package/src/dict/sonamu-dictionary.ts +23 -17
  543. package/src/entity/entity-manager.ts +9 -7
  544. package/src/entity/entity-template-cone.ts +10 -3
  545. package/src/entity/entity.ts +20 -16
  546. package/src/exceptions/error-handler.ts +2 -1
  547. package/src/exceptions/so-exceptions.ts +1 -1
  548. package/src/filter/utils.ts +3 -2
  549. package/src/logger/category.ts +1 -0
  550. package/src/logger/configure.ts +5 -5
  551. package/src/migration/__tests__/code-generation.search-text.test.ts +2 -3
  552. package/src/migration/code-generation.ts +26 -25
  553. package/src/migration/migration-set.ts +16 -18
  554. package/src/migration/migrator.ts +38 -33
  555. package/src/migration/postgresql-schema-reader.ts +12 -12
  556. package/src/migration/slack-confirm.ts +5 -4
  557. package/src/migration/types.ts +2 -2
  558. package/src/naite/messaging-types.ts +1 -1
  559. package/src/naite/naite-reporter.ts +5 -3
  560. package/src/naite/naite.ts +12 -7
  561. package/src/shared/app.shared.ts.txt +2 -2
  562. package/src/shared/web.shared.ts.txt +2 -2
  563. package/src/skills/AGENTS.md +19 -18
  564. package/src/skills/commands/sonamu-skills.md +9 -9
  565. package/src/skills/sonamu/SKILL.md +126 -76
  566. package/src/skills/sonamu/ai-agents.md +27 -26
  567. package/src/skills/sonamu/api.md +81 -69
  568. package/src/skills/sonamu/auth-migration.md +13 -27
  569. package/src/skills/sonamu/auth-plugins.md +41 -31
  570. package/src/skills/sonamu/auth.md +30 -24
  571. package/src/skills/sonamu/cdd.md +26 -17
  572. package/src/skills/sonamu/cone.md +50 -50
  573. package/src/skills/sonamu/config.md +74 -51
  574. package/src/skills/sonamu/create-sonamu.md +31 -19
  575. package/src/skills/sonamu/database.md +43 -26
  576. package/src/skills/sonamu/entity-basic.md +61 -61
  577. package/src/skills/sonamu/entity-relations.md +84 -80
  578. package/src/skills/sonamu/entity-validation-checklist.md +19 -15
  579. package/src/skills/sonamu/fixture-cli.md +52 -30
  580. package/src/skills/sonamu/framework-change.md +9 -7
  581. package/src/skills/sonamu/frontend.md +64 -82
  582. package/src/skills/sonamu/i18n.md +45 -37
  583. package/src/skills/sonamu/migration.md +54 -31
  584. package/src/skills/sonamu/model.md +98 -66
  585. package/src/skills/sonamu/naite.md +34 -32
  586. package/src/skills/sonamu/project-init.md +28 -8
  587. package/src/skills/sonamu/puri.md +82 -91
  588. package/src/skills/sonamu/scaffolding.md +44 -32
  589. package/src/skills/sonamu/skill-contribution.md +50 -45
  590. package/src/skills/sonamu/subset.md +13 -13
  591. package/src/skills/sonamu/tasks.md +73 -58
  592. package/src/skills/sonamu/testing-devrunner.md +56 -36
  593. package/src/skills/sonamu/testing.md +23 -58
  594. package/src/skills/sonamu/upsert.md +32 -31
  595. package/src/skills/sonamu/vector.md +37 -36
  596. package/src/ssr/index.ts +2 -12
  597. package/src/ssr/registry.ts +1 -1
  598. package/src/ssr/renderer.ts +7 -5
  599. package/src/ssr/types.ts +2 -2
  600. package/src/storage/buffered-file.ts +4 -2
  601. package/src/storage/drivers.ts +3 -2
  602. package/src/storage/s3-driver.ts +7 -4
  603. package/src/storage/storage-manager.ts +3 -2
  604. package/src/storage/types.ts +3 -2
  605. package/src/storage/uploaded-file.ts +1 -1
  606. package/src/stream/sse.ts +2 -2
  607. package/src/syncer/api-parser.ts +8 -5
  608. package/src/syncer/checksum.ts +9 -5
  609. package/src/syncer/code-generator.ts +16 -8
  610. package/src/syncer/entity-operations.ts +5 -3
  611. package/src/syncer/file-patterns.ts +2 -1
  612. package/src/syncer/module-loader.ts +9 -6
  613. package/src/syncer/syncer-actions.ts +5 -3
  614. package/src/syncer/syncer.ts +18 -24
  615. package/src/tasks/decorator.ts +10 -8
  616. package/src/tasks/step-wrapper.ts +1 -1
  617. package/src/tasks/workflow-manager.ts +18 -15
  618. package/src/template/__tests__/generated.template.search-text.test.ts +1 -0
  619. package/src/template/entity-converter.ts +4 -2
  620. package/src/template/generated.template.test-d.ts +2 -1
  621. package/src/template/helpers.ts +5 -2
  622. package/src/template/implementations/entity.template.ts +9 -8
  623. package/src/template/implementations/entry-server.template.ts +1 -1
  624. package/src/template/implementations/generated.template.ts +21 -29
  625. package/src/template/implementations/generated_http.template.ts +9 -6
  626. package/src/template/implementations/generated_sso.template.ts +6 -4
  627. package/src/template/implementations/init_types.template.ts +3 -2
  628. package/src/template/implementations/model.template.ts +4 -2
  629. package/src/template/implementations/model_test.template.ts +3 -2
  630. package/src/template/implementations/queries.template.ts +6 -14
  631. package/src/template/implementations/sd.template.ts +4 -2
  632. package/src/template/implementations/services.template.ts +7 -11
  633. package/src/template/implementations/view_form.template.ts +5 -3
  634. package/src/template/implementations/view_id_all_select.template.ts +3 -2
  635. package/src/template/implementations/view_list.template.ts +7 -5
  636. package/src/template/implementations/view_search_input.template.ts +3 -2
  637. package/src/template/template-manager.ts +4 -3
  638. package/src/template/template.ts +4 -3
  639. package/src/template/zod-converter.ts +10 -7
  640. package/src/testing/__tests__/dev-test-routes.test.ts +3 -2
  641. package/src/testing/__tests__/dev-vitest-manager.test.ts +1 -0
  642. package/src/testing/_relation-graph.ts +2 -2
  643. package/src/testing/bootstrap.ts +55 -27
  644. package/src/testing/data-explorer.ts +5 -4
  645. package/src/testing/dev-test-routes.ts +8 -5
  646. package/src/testing/dev-vitest-manager.ts +13 -12
  647. package/src/testing/fixture-generator.ts +15 -21
  648. package/src/testing/fixture-manager.ts +21 -17
  649. package/src/testing/parallel-db-manager.ts +2 -1
  650. package/src/testing/vitest-helpers.ts +2 -1
  651. package/src/types/__tests__/entity-json-schema-search-text.test.ts +1 -0
  652. package/src/types/types.ts +8 -8
  653. package/src/typings/knex.d.ts +4 -4
  654. package/src/ui/ai-api.ts +5 -3
  655. package/src/ui/ai-client.ts +7 -6
  656. package/src/ui/api.ts +42 -39
  657. package/src/ui/cdd-service.ts +268 -257
  658. package/src/ui/cdd-types.ts +40 -75
  659. package/src/utils/console-util.ts +3 -1
  660. package/src/utils/formatter.ts +94 -102
  661. package/src/utils/fs-utils.ts +2 -1
  662. package/src/utils/model.ts +2 -2
  663. package/src/utils/object-utils.ts +3 -3
  664. package/src/utils/process-utils.ts +2 -1
  665. package/src/utils/sql-parser.ts +10 -1
  666. package/src/utils/type-utils.ts +3 -3
  667. package/src/utils/utils.ts +9 -7
  668. package/src/utils/zod-error.ts +1 -1
  669. package/src/vector/chunking.ts +1 -1
  670. package/src/vector/config.ts +1 -1
  671. package/src/vector/embedding.ts +11 -9
  672. package/tsdown.api.config.ts +50 -0
  673. package/.swcrc.project-default +0 -18
  674. package/dist/api/__tests__/config.test.js +0 -189
  675. package/dist/bin/__tests__/test-command.test.js +0 -112
  676. package/dist/bin/__tests__/ts-loader-register.test.js +0 -45
  677. package/dist/database/puri-subset.test-d.js +0 -81
  678. package/dist/database/puri.types.test-d.js +0 -129
  679. package/dist/migration/__tests__/code-generation.search-text.test.js +0 -435
  680. package/dist/template/__tests__/generated.template.search-text.test.js +0 -99
  681. package/dist/template/generated.template.test-d.js +0 -24
  682. package/dist/testing/__tests__/dev-test-routes.test.js +0 -144
  683. package/dist/testing/__tests__/dev-vitest-manager.test.js +0 -152
  684. package/dist/types/__tests__/entity-json-schema-search-text.test.js +0 -256
  685. package/dist/typings/knex.d.js +0 -3
  686. package/dist/ui-web/assets/index-BrQKU3j9.css +0 -1
  687. package/dist/ui-web/assets/index-CxiydzeC.js +0 -257
@@ -1,226 +1,229 @@
1
- import assert from "assert";
2
- import chalk from "chalk";
3
- import { glob, readFile } from "node:fs/promises";
1
+ import { __esmMin } from "../_virtual/rolldown_runtime.js";
2
+ import { Sonamu, init_sonamu } from "../api/sonamu.js";
3
+ import { EntityJsonSchema, SonamuFileArraySchema, SonamuFileSchema, init_types, isSearchTextJsonSourceZodType, isSearchTextProp } from "../types/types.js";
4
+ import { globAsync, init_async_utils } from "../utils/async-utils.js";
5
+ import { importMembers, init_esm_utils } from "../utils/esm-utils.js";
6
+ import { init_path_utils, runtimePath } from "../utils/path-utils.js";
4
7
  import inflection from "inflection";
8
+ import { prettifyError, z as z$1 } from "zod";
9
+ import assert from "assert";
10
+ import { glob, readFile } from "fs/promises";
5
11
  import path from "path";
6
- import { prettifyError, z } from "zod";
7
- import { Sonamu } from "../api/sonamu.js";
8
- import { EntityJsonSchema, isSearchTextJsonSourceZodType, isSearchTextProp, SonamuFileArraySchema, SonamuFileSchema } from "../types/types.js";
9
- import { globAsync } from "../utils/async-utils.js";
10
- import { importMembers } from "../utils/esm-utils.js";
11
- import { runtimePath } from "../utils/path-utils.js";
12
- import { Entity } from "./entity.js";
13
- class EntityManagerClass {
14
- entities = new Map();
15
- modulePaths = new Map();
16
- tableSpecs = new Map();
17
- isAutoloaded = false;
18
- // 경로 전달받아 모든 entity.json 파일 로드
19
- async autoload(_ = false) {
20
- if (this.isAutoloaded) {
21
- return;
22
- }
23
- const pathPattern = path.join(Sonamu.apiRootPath, "/src/application/**/*.entity.json");
24
- for await (const file of glob(path.resolve(pathPattern))){
25
- const json = JSON.parse((await readFile(file)).toString());
26
- // entity.json 스키마 검증
27
- const error = this.schemaValidate(json);
28
- if (error) {
29
- const relativePath = path.relative(Sonamu.apiRootPath, file);
30
- const errorMessage = prettifyError(error);
31
- console.error(chalk.red(`Invalid entity.json schema: ${relativePath}\n${chalk.yellow(errorMessage)}`));
32
- }
33
- await this.register(json, {
34
- deferSearchTextJsonSourceValidation: true
35
- });
36
- }
37
- await this.registerNonEntityTypeModulePaths();
38
- await this.validateAllRegisteredSearchTextJsonSources();
39
- this.isAutoloaded = true;
40
- }
41
- schemaValidate(json) {
42
- const result = EntityJsonSchema.safeParse(json);
43
- return result.success ? null : result.error;
44
- }
45
- async reload(doSilent = false) {
46
- this.entities.clear();
47
- this.modulePaths.clear();
48
- this.tableSpecs.clear();
49
- this.isAutoloaded = false;
50
- return await this.autoload(doSilent);
51
- }
52
- async register(json, options = {}) {
53
- const entity = new Entity(json);
54
- await entity.registerModulePaths();
55
- if (!options.deferSearchTextJsonSourceValidation) {
56
- await this.validateSearchTextJsonSources(entity);
57
- }
58
- entity.registerTableSpecs();
59
- this.entities.set(json.id, entity);
60
- }
61
- async validateAllRegisteredSearchTextJsonSources() {
62
- for (const entity of this.entities.values()){
63
- await this.validateSearchTextJsonSources(entity);
64
- }
65
- }
66
- async validateSearchTextJsonSources(entity) {
67
- const propsByName = new Map(entity.props.map((prop)=>[
68
- prop.name,
69
- prop
70
- ]));
71
- for (const prop of entity.props){
72
- if (!isSearchTextProp(prop)) {
73
- continue;
74
- }
75
- for (const source of prop.sourceColumns){
76
- const sourceProp = propsByName.get(source.name);
77
- if (!sourceProp || sourceProp.type !== "json") {
78
- continue;
79
- }
80
- const zodType = await this.resolveSearchTextJsonSourceType(entity, sourceProp.id);
81
- if (!zodType) {
82
- throw new Error(`searchText source "${source.name}"의 json 타입 "${sourceProp.id}"() 로드할 없습니다.`);
83
- }
84
- if (!isSearchTextJsonSourceZodType(zodType)) {
85
- throw new Error(`searchText source "${source.name}"의 json 타입 "${sourceProp.id}"은(는) unwrap 후 z.array(z.string()) 이어야 합니다.`);
86
- }
87
- }
88
- }
89
- }
90
- async resolveSearchTextJsonSourceType(entity, typeId) {
91
- const localType = entity.types[typeId];
92
- if (localType instanceof z.ZodType) {
93
- return localType;
94
- }
95
- for (const registeredEntity of this.entities.values()){
96
- const registeredType = registeredEntity.types[typeId];
97
- if (registeredType instanceof z.ZodType) {
98
- return registeredType;
99
- }
100
- }
101
- if (typeId === "SonamuFile") {
102
- return SonamuFileSchema;
103
- }
104
- if (typeId === "SonamuFile[]") {
105
- return SonamuFileArraySchema;
106
- }
107
- const modulePath = this.modulePaths.get(typeId);
108
- if (!modulePath) {
109
- return null;
110
- }
111
- const moduleFilePath = path.join(Sonamu.apiRootPath, runtimePath(`dist/application/${modulePath}.js`));
112
- const importedMembers = await importMembers(moduleFilePath);
113
- const matched = importedMembers.find(({ name })=>name === typeId);
114
- if (!matched || !(matched.value instanceof z.ZodType)) {
115
- return null;
116
- }
117
- return matched.value;
118
- }
119
- get(entityId) {
120
- const entity = this.entities.get(entityId);
121
- if (entity === undefined) {
122
- throw new Error(`존재하지 않는 Entity 요청 ${entityId}`);
123
- }
124
- return entity;
125
- }
126
- getByTable(table) {
127
- const entity = Array.from(this.entities.values()).find((entity)=>entity.table === table);
128
- if (entity === undefined) {
129
- throw new Error(`존재하지 않는 Entity 요청 ${table}`);
130
- }
131
- return entity;
132
- }
133
- exists(entityId) {
134
- const entity = this.entities.get(entityId);
135
- return entity !== undefined;
136
- }
137
- getAllIds() {
138
- return Array.from(EntityManager.entities.keys()).sort();
139
- }
140
- getAllEntities() {
141
- return Array.from(this.entities.values());
142
- }
143
- getAllParentIds() {
144
- return this.getAllIds().filter((entityId)=>{
145
- const entity = this.get(entityId);
146
- return entity.parentId === undefined;
147
- });
148
- }
149
- getChildrenIds(parentId) {
150
- return this.getAllIds().filter((entityId)=>{
151
- const entity = this.get(entityId);
152
- return entity.parentId === parentId;
153
- });
154
- }
155
- setModulePath(key, modulePath) {
156
- // console.debug(chalk.cyan(`setModulePath :: ${key} :: ${modulePath}`));
157
- this.modulePaths.set(key, modulePath);
158
- }
159
- getModulePath(key) {
160
- const modulePath = this.modulePaths.get(key);
161
- if (modulePath === undefined) {
162
- throw new Error(`존재하지 않는 모듈 패스 요청 ${key}`);
163
- }
164
- return modulePath;
165
- }
166
- setTableSpec(tableSpec) {
167
- this.tableSpecs.set(tableSpec.name, tableSpec);
168
- }
169
- getTableSpec(key) {
170
- const tableSpec = this.tableSpecs.get(key);
171
- if (tableSpec === undefined) {
172
- throw new Error(`존재하지 않는 테이블 스펙 요청 ${key}`);
173
- }
174
- return tableSpec;
175
- }
176
- getNamesFromId(entityId) {
177
- // entityId 단복수 동형 단어인 경우 List 붙여서 생성
178
- const pluralized = inflection.pluralize(entityId) === entityId ? `${entityId}List` : inflection.pluralize(entityId);
179
- return {
180
- fs: inflection.dasherize(inflection.underscore(entityId)).toLowerCase(),
181
- fsPlural: inflection.dasherize(inflection.underscore(pluralized)).toLowerCase(),
182
- camel: inflection.camelize(entityId, true),
183
- camelPlural: inflection.camelize(pluralized, true),
184
- capital: entityId,
185
- capitalPlural: pluralized,
186
- upper: entityId.toUpperCase(),
187
- constant: inflection.underscore(entityId).toUpperCase()
188
- };
189
- }
190
- /**
191
- * EntityId는 Model을 제외한 PascalCase 이름입니다. (ex. "User")
192
- * @param filePath
193
- * @returns
194
- */ getEntityIdFromPath(filePath) {
195
- const matched = filePath.match(/application\/(.+)\//);
196
- assert(matched?.[1]);
197
- return inflection.camelize(matched[1].replace(/-/g, "_"));
198
- }
199
- async registerNonEntityTypeModulePaths() {
200
- const typePathsPatterns = [
201
- path.join(Sonamu.apiRootPath, runtimePath("src/application/**/*.types.ts")),
202
- path.join(Sonamu.apiRootPath, runtimePath("src/application/**/*.generated.ts"))
203
- ];
204
- const typePaths = (await Promise.all(typePathsPatterns.map((pattern)=>globAsync(pattern)))).flat();
205
- for (const filePath of typePaths){
206
- const modulePath = this.getModulePathFromTypeFilePath(filePath);
207
- const importedMembers = await importMembers(filePath);
208
- for (const { name, value } of importedMembers){
209
- if (value instanceof z.ZodType) {
210
- this.setModulePath(name, modulePath);
211
- }
212
- }
213
- }
214
- }
215
- getModulePathFromTypeFilePath(filePath) {
216
- const normalizedPath = filePath.replaceAll("\\", "/");
217
- const matched = normalizedPath.match(/\/(?:src|dist)\/application\/(.+)\.(?:ts|js)$/);
218
- if (!matched?.[1]) {
219
- throw new Error(`타입 파일의 모듈 경로를 계산할 수 없습니다: ${filePath}`);
220
- }
221
- return matched[1];
222
- }
223
- }
224
- export const EntityManager = new EntityManagerClass();
12
+ import chalk from "chalk";
13
+
14
+ //#region src/entity/entity-manager.ts
15
+ var EntityManagerClass, EntityManager;
16
+ var init_entity_manager = __esmMin((() => {
17
+ init_sonamu();
18
+ init_types();
19
+ init_async_utils();
20
+ init_esm_utils();
21
+ init_path_utils();
22
+ EntityManagerClass = class {
23
+ entities = new Map();
24
+ modulePaths = new Map();
25
+ tableSpecs = new Map();
26
+ isAutoloaded = false;
27
+ async autoload(_ = false) {
28
+ if (this.isAutoloaded) {
29
+ return;
30
+ }
31
+ const pathPattern = path.join(Sonamu.apiRootPath, "/src/application/**/*.entity.json");
32
+ for await (const file of glob(path.resolve(pathPattern))) {
33
+ const json = JSON.parse((await readFile(file)).toString());
34
+ const error = this.schemaValidate(json);
35
+ if (error) {
36
+ const relativePath = path.relative(Sonamu.apiRootPath, file);
37
+ const errorMessage = prettifyError(error);
38
+ console.error(chalk.red(`Invalid entity.json schema: ${relativePath}\n${chalk.yellow(errorMessage)}`));
39
+ }
40
+ await this.register(json, { deferSearchTextJsonSourceValidation: true });
41
+ }
42
+ await this.registerNonEntityTypeModulePaths();
43
+ await this.validateAllRegisteredSearchTextJsonSources();
44
+ this.isAutoloaded = true;
45
+ }
46
+ schemaValidate(json) {
47
+ const result = EntityJsonSchema.safeParse(json);
48
+ return result.success ? null : result.error;
49
+ }
50
+ async reload(doSilent = false) {
51
+ this.entities.clear();
52
+ this.modulePaths.clear();
53
+ this.tableSpecs.clear();
54
+ this.isAutoloaded = false;
55
+ return await this.autoload(doSilent);
56
+ }
57
+ async register(json, options = {}) {
58
+ const { Entity } = await import("./entity.js");
59
+ const entity = new Entity(json);
60
+ await entity.registerModulePaths();
61
+ if (!options.deferSearchTextJsonSourceValidation) {
62
+ await this.validateSearchTextJsonSources(entity);
63
+ }
64
+ entity.registerTableSpecs();
65
+ this.entities.set(json.id, entity);
66
+ }
67
+ async validateAllRegisteredSearchTextJsonSources() {
68
+ for (const entity of this.entities.values()) {
69
+ await this.validateSearchTextJsonSources(entity);
70
+ }
71
+ }
72
+ async validateSearchTextJsonSources(entity) {
73
+ const propsByName = new Map(entity.props.map((prop) => [prop.name, prop]));
74
+ for (const prop of entity.props) {
75
+ if (!isSearchTextProp(prop)) {
76
+ continue;
77
+ }
78
+ for (const source of prop.sourceColumns) {
79
+ const sourceProp = propsByName.get(source.name);
80
+ if (!sourceProp || sourceProp.type !== "json") {
81
+ continue;
82
+ }
83
+ const zodType = await this.resolveSearchTextJsonSourceType(entity, sourceProp.id);
84
+ if (!zodType) {
85
+ throw new Error(`searchText source "${source.name}"의 json 타입 "${sourceProp.id}"을(를) 로드할 수 없습니다.`);
86
+ }
87
+ if (!isSearchTextJsonSourceZodType(zodType)) {
88
+ throw new Error(`searchText source "${source.name}"의 json 타입 "${sourceProp.id}"() unwrap z.array(z.string()) 이어야 합니다.`);
89
+ }
90
+ }
91
+ }
92
+ }
93
+ async resolveSearchTextJsonSourceType(entity, typeId) {
94
+ const localType = entity.types[typeId];
95
+ if (localType instanceof z$1.ZodType) {
96
+ return localType;
97
+ }
98
+ for (const registeredEntity of this.entities.values()) {
99
+ const registeredType = registeredEntity.types[typeId];
100
+ if (registeredType instanceof z$1.ZodType) {
101
+ return registeredType;
102
+ }
103
+ }
104
+ if (typeId === "SonamuFile") {
105
+ return SonamuFileSchema;
106
+ }
107
+ if (typeId === "SonamuFile[]") {
108
+ return SonamuFileArraySchema;
109
+ }
110
+ const modulePath = this.modulePaths.get(typeId);
111
+ if (!modulePath) {
112
+ return null;
113
+ }
114
+ const moduleFilePath = path.join(Sonamu.apiRootPath, runtimePath(`dist/application/${modulePath}.js`));
115
+ const importedMembers = await importMembers(moduleFilePath);
116
+ const matched = importedMembers.find(({ name }) => name === typeId);
117
+ if (!matched || !(matched.value instanceof z$1.ZodType)) {
118
+ return null;
119
+ }
120
+ return matched.value;
121
+ }
122
+ get(entityId) {
123
+ const entity = this.entities.get(entityId);
124
+ if (entity === undefined) {
125
+ throw new Error(`존재하지 않는 Entity 요청 ${entityId}`);
126
+ }
127
+ return entity;
128
+ }
129
+ getByTable(table) {
130
+ const entity = Array.from(this.entities.values()).find((entity$1) => entity$1.table === table);
131
+ if (entity === undefined) {
132
+ throw new Error(`존재하지 않는 Entity 요청 ${table}`);
133
+ }
134
+ return entity;
135
+ }
136
+ exists(entityId) {
137
+ const entity = this.entities.get(entityId);
138
+ return entity !== undefined;
139
+ }
140
+ getAllIds() {
141
+ return Array.from(EntityManager.entities.keys()).toSorted();
142
+ }
143
+ getAllEntities() {
144
+ return Array.from(this.entities.values());
145
+ }
146
+ getAllParentIds() {
147
+ return this.getAllIds().filter((entityId) => {
148
+ const entity = this.get(entityId);
149
+ return entity.parentId === undefined;
150
+ });
151
+ }
152
+ getChildrenIds(parentId) {
153
+ return this.getAllIds().filter((entityId) => {
154
+ const entity = this.get(entityId);
155
+ return entity.parentId === parentId;
156
+ });
157
+ }
158
+ setModulePath(key, modulePath) {
159
+ this.modulePaths.set(key, modulePath);
160
+ }
161
+ getModulePath(key) {
162
+ const modulePath = this.modulePaths.get(key);
163
+ if (modulePath === undefined) {
164
+ throw new Error(`존재하지 않는 모듈 패스 요청 ${key}`);
165
+ }
166
+ return modulePath;
167
+ }
168
+ setTableSpec(tableSpec) {
169
+ this.tableSpecs.set(tableSpec.name, tableSpec);
170
+ }
171
+ getTableSpec(key) {
172
+ const tableSpec = this.tableSpecs.get(key);
173
+ if (tableSpec === undefined) {
174
+ throw new Error(`존재하지 않는 테이블 스펙 요청 ${key}`);
175
+ }
176
+ return tableSpec;
177
+ }
178
+ getNamesFromId(entityId) {
179
+ const pluralized = inflection.pluralize(entityId) === entityId ? `${entityId}List` : inflection.pluralize(entityId);
180
+ return {
181
+ fs: inflection.dasherize(inflection.underscore(entityId)).toLowerCase(),
182
+ fsPlural: inflection.dasherize(inflection.underscore(pluralized)).toLowerCase(),
183
+ camel: inflection.camelize(entityId, true),
184
+ camelPlural: inflection.camelize(pluralized, true),
185
+ capital: entityId,
186
+ capitalPlural: pluralized,
187
+ upper: entityId.toUpperCase(),
188
+ constant: inflection.underscore(entityId).toUpperCase()
189
+ };
190
+ }
191
+ /**
192
+ * EntityId는 Model을 제외한 PascalCase 이름입니다. (ex. "User")
193
+ * @param filePath
194
+ * @returns
195
+ */
196
+ getEntityIdFromPath(filePath) {
197
+ const matched = filePath.match(/application\/(.+)\//);
198
+ assert(matched?.[1]);
199
+ return inflection.camelize(matched[1].replace(/-/g, "_"));
200
+ }
201
+ async registerNonEntityTypeModulePaths() {
202
+ const typePathsPatterns = [path.join(Sonamu.apiRootPath, runtimePath("src/application/**/*.types.ts")), path.join(Sonamu.apiRootPath, runtimePath("src/application/**/*.generated.ts"))];
203
+ const typePaths = (await Promise.all(typePathsPatterns.map((pattern) => globAsync(pattern)))).flat();
204
+ for (const filePath of typePaths) {
205
+ const modulePath = this.getModulePathFromTypeFilePath(filePath);
206
+ const importedMembers = await importMembers(filePath);
207
+ for (const { name, value } of importedMembers) {
208
+ if (value instanceof z$1.ZodType) {
209
+ this.setModulePath(name, modulePath);
210
+ }
211
+ }
212
+ }
213
+ }
214
+ getModulePathFromTypeFilePath(filePath) {
215
+ const normalizedPath = filePath.replaceAll("\\", "/");
216
+ const matched = normalizedPath.match(/\/(?:src|dist)\/application\/(.+)\.(?:ts|js)$/);
217
+ if (!matched?.[1]) {
218
+ throw new Error(`타입 파일의 모듈 경로를 계산할 수 없습니다: ${filePath}`);
219
+ }
220
+ return matched[1];
221
+ }
222
+ };
223
+ EntityManager = new EntityManagerClass();
224
+ }));
225
225
 
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnRpdHkvZW50aXR5LW1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBnbG9iLCByZWFkRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwcmV0dGlmeUVycm9yLCB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7XG4gIHR5cGUgRW50aXR5SW5kZXgsXG4gIHR5cGUgRW50aXR5SnNvbixcbiAgRW50aXR5SnNvblNjaGVtYSxcbiAgaXNTZWFyY2hUZXh0SnNvblNvdXJjZVpvZFR5cGUsXG4gIGlzU2VhcmNoVGV4dFByb3AsXG4gIFNvbmFtdUZpbGVBcnJheVNjaGVtYSxcbiAgU29uYW11RmlsZVNjaGVtYSxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnbG9iQXN5bmMgfSBmcm9tIFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIjtcbmltcG9ydCB7IGltcG9ydE1lbWJlcnMgfSBmcm9tIFwiLi4vdXRpbHMvZXNtLXV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyBydW50aW1lUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiLi9lbnRpdHlcIjtcblxuZXhwb3J0IHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgPSBSZWNvcmQ8XG4gIFwiZnNcIiB8IFwiZnNQbHVyYWxcIiB8IFwiY2FtZWxcIiB8IFwiY2FtZWxQbHVyYWxcIiB8IFwiY2FwaXRhbFwiIHwgXCJjYXBpdGFsUGx1cmFsXCIgfCBcInVwcGVyXCIgfCBcImNvbnN0YW50XCIsXG4gIHN0cmluZ1xuPjtcbmV4cG9ydCB0eXBlIFRhYmxlU3BlYyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB1bmlxdWVJbmRleGVzOiBFbnRpdHlJbmRleFtdO1xuICBqc29uQ29sdW1uczogc3RyaW5nW107XG59O1xuY2xhc3MgRW50aXR5TWFuYWdlckNsYXNzIHtcbiAgcHJpdmF0ZSBlbnRpdGllczogTWFwPHN0cmluZywgRW50aXR5PiA9IG5ldyBNYXAoKTtcbiAgcHVibGljIG1vZHVsZVBhdGhzOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIHRhYmxlU3BlY3M6IE1hcDxzdHJpbmcsIFRhYmxlU3BlYz4gPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBpc0F1dG9sb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyDqsr3roZwg7KCE64us67Cb7JWEIOuqqOuToCBlbnRpdHkuanNvbiDtjIzsnbwg66Gc65OcXG4gIGFzeW5jIGF1dG9sb2FkKF86IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLmlzQXV0b2xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXRoUGF0dGVybiA9IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwiL3NyYy9hcHBsaWNhdGlvbi8qKi8qLmVudGl0eS5qc29uXCIpO1xuXG4gICAgZm9yIGF3YWl0IChjb25zdCBmaWxlIG9mIGdsb2IocGF0aC5yZXNvbHZlKHBhdGhQYXR0ZXJuKSkpIHtcbiAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKChhd2FpdCByZWFkRmlsZShmaWxlKSkudG9TdHJpbmcoKSk7XG5cbiAgICAgIC8vIGVudGl0eS5qc29uIOyKpO2CpOuniCDqsoDspp1cbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5zY2hlbWFWYWxpZGF0ZShqc29uKTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcGlSb290UGF0aCwgZmlsZSk7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHByZXR0aWZ5RXJyb3IoZXJyb3IpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGNoYWxrLnJlZChgSW52YWxpZCBlbnRpdHkuanNvbiBzY2hlbWE6ICR7cmVsYXRpdmVQYXRofVxcbiR7Y2hhbGsueWVsbG93KGVycm9yTWVzc2FnZSl9YCksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMucmVnaXN0ZXIoanNvbiwgeyBkZWZlclNlYXJjaFRleHRKc29uU291cmNlVmFsaWRhdGlvbjogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnJlZ2lzdGVyTm9uRW50aXR5VHlwZU1vZHVsZVBhdGhzKCk7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZUFsbFJlZ2lzdGVyZWRTZWFyY2hUZXh0SnNvblNvdXJjZXMoKTtcblxuICAgIHRoaXMuaXNBdXRvbG9hZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHNjaGVtYVZhbGlkYXRlKGpzb246IHVua25vd24pIHtcbiAgICBjb25zdCByZXN1bHQgPSBFbnRpdHlKc29uU2NoZW1hLnNhZmVQYXJzZShqc29uKTtcbiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3MgPyBudWxsIDogcmVzdWx0LmVycm9yO1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkKGRvU2lsZW50OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmVudGl0aWVzLmNsZWFyKCk7XG4gICAgdGhpcy5tb2R1bGVQYXRocy5jbGVhcigpO1xuICAgIHRoaXMudGFibGVTcGVjcy5jbGVhcigpO1xuICAgIHRoaXMuaXNBdXRvbG9hZGVkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hdXRvbG9hZChkb1NpbGVudCk7XG4gIH1cblxuICBhc3luYyByZWdpc3RlcihcbiAgICBqc29uOiBFbnRpdHlKc29uLFxuICAgIG9wdGlvbnM6IHsgZGVmZXJTZWFyY2hUZXh0SnNvblNvdXJjZVZhbGlkYXRpb24/OiBib29sZWFuIH0gPSB7fSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW50aXR5ID0gbmV3IEVudGl0eShqc29uKTtcbiAgICBhd2FpdCBlbnRpdHkucmVnaXN0ZXJNb2R1bGVQYXRocygpO1xuICAgIGlmICghb3B0aW9ucy5kZWZlclNlYXJjaFRleHRKc29uU291cmNlVmFsaWRhdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZVNlYXJjaFRleHRKc29uU291cmNlcyhlbnRpdHkpO1xuICAgIH1cbiAgICBlbnRpdHkucmVnaXN0ZXJUYWJsZVNwZWNzKCk7XG4gICAgdGhpcy5lbnRpdGllcy5zZXQoanNvbi5pZCwgZW50aXR5KTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlQWxsUmVnaXN0ZXJlZFNlYXJjaFRleHRKc29uU291cmNlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiB0aGlzLmVudGl0aWVzLnZhbHVlcygpKSB7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlU2VhcmNoVGV4dEpzb25Tb3VyY2VzKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVNlYXJjaFRleHRKc29uU291cmNlcyhlbnRpdHk6IEVudGl0eSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByb3BzQnlOYW1lID0gbmV3IE1hcChlbnRpdHkucHJvcHMubWFwKChwcm9wKSA9PiBbcHJvcC5uYW1lLCBwcm9wXSkpO1xuXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIGVudGl0eS5wcm9wcykge1xuICAgICAgaWYgKCFpc1NlYXJjaFRleHRQcm9wKHByb3ApKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBwcm9wLnNvdXJjZUNvbHVtbnMpIHtcbiAgICAgICAgY29uc3Qgc291cmNlUHJvcCA9IHByb3BzQnlOYW1lLmdldChzb3VyY2UubmFtZSk7XG4gICAgICAgIGlmICghc291cmNlUHJvcCB8fCBzb3VyY2VQcm9wLnR5cGUgIT09IFwianNvblwiKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB6b2RUeXBlID0gYXdhaXQgdGhpcy5yZXNvbHZlU2VhcmNoVGV4dEpzb25Tb3VyY2VUeXBlKGVudGl0eSwgc291cmNlUHJvcC5pZCk7XG4gICAgICAgIGlmICghem9kVHlwZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBzZWFyY2hUZXh0IHNvdXJjZSBcIiR7c291cmNlLm5hbWV9XCLsnZgganNvbiDtg4DsnoUgXCIke3NvdXJjZVByb3AuaWR9XCLsnYQo66W8KSDroZzrk5ztlaAg7IiYIOyXhuyKteuLiOuLpC5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlKHpvZFR5cGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYHNlYXJjaFRleHQgc291cmNlIFwiJHtzb3VyY2UubmFtZX1cIuydmCBqc29uIO2DgOyehSBcIiR7c291cmNlUHJvcC5pZH1cIuydgCjripQpIHVud3JhcCDtm4Qgei5hcnJheSh6LnN0cmluZygpKSDsnbTslrTslbwg7ZWp64uI64ukLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZVNlYXJjaFRleHRKc29uU291cmNlVHlwZShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICB0eXBlSWQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx6LlpvZFR5cGVBbnkgfCBudWxsPiB7XG4gICAgY29uc3QgbG9jYWxUeXBlID0gZW50aXR5LnR5cGVzW3R5cGVJZF07XG4gICAgaWYgKGxvY2FsVHlwZSBpbnN0YW5jZW9mIHouWm9kVHlwZSkge1xuICAgICAgcmV0dXJuIGxvY2FsVHlwZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlZ2lzdGVyZWRFbnRpdHkgb2YgdGhpcy5lbnRpdGllcy52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgcmVnaXN0ZXJlZFR5cGUgPSByZWdpc3RlcmVkRW50aXR5LnR5cGVzW3R5cGVJZF07XG4gICAgICBpZiAocmVnaXN0ZXJlZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRUeXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlSWQgPT09IFwiU29uYW11RmlsZVwiKSB7XG4gICAgICByZXR1cm4gU29uYW11RmlsZVNjaGVtYTtcbiAgICB9XG4gICAgaWYgKHR5cGVJZCA9PT0gXCJTb25hbXVGaWxlW11cIikge1xuICAgICAgcmV0dXJuIFNvbmFtdUZpbGVBcnJheVNjaGVtYTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2R1bGVQYXRoID0gdGhpcy5tb2R1bGVQYXRocy5nZXQodHlwZUlkKTtcbiAgICBpZiAoIW1vZHVsZVBhdGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZHVsZUZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgICAgcnVudGltZVBhdGgoYGRpc3QvYXBwbGljYXRpb24vJHttb2R1bGVQYXRofS5qc2ApLFxuICAgICk7XG4gICAgY29uc3QgaW1wb3J0ZWRNZW1iZXJzID0gYXdhaXQgaW1wb3J0TWVtYmVyczx1bmtub3duPihtb2R1bGVGaWxlUGF0aCk7XG4gICAgY29uc3QgbWF0Y2hlZCA9IGltcG9ydGVkTWVtYmVycy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gdHlwZUlkKTtcbiAgICBpZiAoIW1hdGNoZWQgfHwgIShtYXRjaGVkLnZhbHVlIGluc3RhbmNlb2Ygei5ab2RUeXBlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWQudmFsdWU7XG4gIH1cblxuICBnZXQoZW50aXR5SWQ6IHN0cmluZyk6IEVudGl0eSB7XG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5lbnRpdGllcy5nZXQoZW50aXR5SWQpO1xuICAgIGlmIChlbnRpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIEVudGl0eSDsmpTssq0gJHtlbnRpdHlJZH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgZ2V0QnlUYWJsZSh0YWJsZTogc3RyaW5nKTogRW50aXR5IHtcbiAgICBjb25zdCBlbnRpdHkgPSBBcnJheS5mcm9tKHRoaXMuZW50aXRpZXMudmFsdWVzKCkpLmZpbmQoKGVudGl0eSkgPT4gZW50aXR5LnRhYmxlID09PSB0YWJsZSk7XG4gICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgRW50aXR5IOyalOyyrSAke3RhYmxlfWApO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBleGlzdHMoZW50aXR5SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXRpZXMuZ2V0KGVudGl0eUlkKTtcbiAgICByZXR1cm4gZW50aXR5ICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRBbGxJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKEVudGl0eU1hbmFnZXIuZW50aXRpZXMua2V5cygpKS5zb3J0KCk7XG4gIH1cblxuICBnZXRBbGxFbnRpdGllcygpOiBFbnRpdHlbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRpdGllcy52YWx1ZXMoKSk7XG4gIH1cblxuICBnZXRBbGxQYXJlbnRJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbElkcygpLmZpbHRlcigoZW50aXR5SWQpID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZ2V0KGVudGl0eUlkKTtcbiAgICAgIHJldHVybiBlbnRpdHkucGFyZW50SWQgPT09IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENoaWxkcmVuSWRzKHBhcmVudElkOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsSWRzKCkuZmlsdGVyKChlbnRpdHlJZCkgPT4ge1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5nZXQoZW50aXR5SWQpO1xuICAgICAgcmV0dXJuIGVudGl0eS5wYXJlbnRJZCA9PT0gcGFyZW50SWQ7XG4gICAgfSk7XG4gIH1cblxuICBzZXRNb2R1bGVQYXRoKGtleTogc3RyaW5nLCBtb2R1bGVQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBjb25zb2xlLmRlYnVnKGNoYWxrLmN5YW4oYHNldE1vZHVsZVBhdGggOjogJHtrZXl9IDo6ICR7bW9kdWxlUGF0aH1gKSk7XG4gICAgdGhpcy5tb2R1bGVQYXRocy5zZXQoa2V5LCBtb2R1bGVQYXRoKTtcbiAgfVxuXG4gIGdldE1vZHVsZVBhdGgoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1vZHVsZVBhdGggPSB0aGlzLm1vZHVsZVBhdGhzLmdldChrZXkpO1xuICAgIGlmIChtb2R1bGVQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCDrqqjrk4gg7Yyo7IqkIOyalOyyrSAke2tleX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbW9kdWxlUGF0aDtcbiAgfVxuXG4gIHNldFRhYmxlU3BlYyh0YWJsZVNwZWM6IFRhYmxlU3BlYykge1xuICAgIHRoaXMudGFibGVTcGVjcy5zZXQodGFibGVTcGVjLm5hbWUsIHRhYmxlU3BlYyk7XG4gIH1cblxuICBnZXRUYWJsZVNwZWMoa2V5OiBzdHJpbmcpOiBUYWJsZVNwZWMge1xuICAgIGNvbnN0IHRhYmxlU3BlYyA9IHRoaXMudGFibGVTcGVjcy5nZXQoa2V5KTtcbiAgICBpZiAodGFibGVTcGVjID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCDthYzsnbTruJQg7Iqk7Y6ZIOyalOyyrSAke2tleX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFibGVTcGVjO1xuICB9XG5cbiAgZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQ6IHN0cmluZyk6IEVudGl0eU5hbWVzUmVjb3JkIHtcbiAgICAvLyBlbnRpdHlJZOqwgCDri6jrs7XsiJgg64+Z7ZiVIOuLqOyWtOyduCDqsr3smrAgTGlzdCDrtpnsl6zshJwg7IOd7ISxXG4gICAgY29uc3QgcGx1cmFsaXplZCA9XG4gICAgICBpbmZsZWN0aW9uLnBsdXJhbGl6ZShlbnRpdHlJZCkgPT09IGVudGl0eUlkXG4gICAgICAgID8gYCR7ZW50aXR5SWR9TGlzdGBcbiAgICAgICAgOiBpbmZsZWN0aW9uLnBsdXJhbGl6ZShlbnRpdHlJZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZnM6IGluZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShlbnRpdHlJZCkpLnRvTG93ZXJDYXNlKCksXG4gICAgICBmc1BsdXJhbDogaW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKHBsdXJhbGl6ZWQpKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgY2FtZWw6IGluZmxlY3Rpb24uY2FtZWxpemUoZW50aXR5SWQsIHRydWUpLFxuICAgICAgY2FtZWxQbHVyYWw6IGluZmxlY3Rpb24uY2FtZWxpemUocGx1cmFsaXplZCwgdHJ1ZSksXG4gICAgICBjYXBpdGFsOiBlbnRpdHlJZCxcbiAgICAgIGNhcGl0YWxQbHVyYWw6IHBsdXJhbGl6ZWQsXG4gICAgICB1cHBlcjogZW50aXR5SWQudG9VcHBlckNhc2UoKSxcbiAgICAgIGNvbnN0YW50OiBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpLnRvVXBwZXJDYXNlKCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnRpdHlJZOuKlCBNb2RlbOydhCDsoJzsmbjtlZwgUGFzY2FsQ2FzZSDsnbTrpoTsnoXri4jri6QuIChleC4gXCJVc2VyXCIpXG4gICAqIEBwYXJhbSBmaWxlUGF0aFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0RW50aXR5SWRGcm9tUGF0aChmaWxlUGF0aDogQWJzb2x1dGVQYXRoKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXRjaGVkID0gZmlsZVBhdGgubWF0Y2goL2FwcGxpY2F0aW9uXFwvKC4rKVxcLy8pO1xuICAgIGFzc2VydChtYXRjaGVkPy5bMV0pO1xuICAgIHJldHVybiBpbmZsZWN0aW9uLmNhbWVsaXplKG1hdGNoZWRbMV0ucmVwbGFjZSgvLS9nLCBcIl9cIikpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWdpc3Rlck5vbkVudGl0eVR5cGVNb2R1bGVQYXRocygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0eXBlUGF0aHNQYXR0ZXJucyA9IFtcbiAgICAgIHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIHJ1bnRpbWVQYXRoKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoudHlwZXMudHNcIikpLFxuICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi5nZW5lcmF0ZWQudHNcIikpLFxuICAgIF07XG4gICAgY29uc3QgdHlwZVBhdGhzID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodHlwZVBhdGhzUGF0dGVybnMubWFwKChwYXR0ZXJuKSA9PiBnbG9iQXN5bmMocGF0dGVybikpKVxuICAgICkuZmxhdCgpO1xuXG4gICAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiB0eXBlUGF0aHMpIHtcbiAgICAgIGNvbnN0IG1vZHVsZVBhdGggPSB0aGlzLmdldE1vZHVsZVBhdGhGcm9tVHlwZUZpbGVQYXRoKGZpbGVQYXRoKTtcbiAgICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8dW5rbm93bj4oZmlsZVBhdGgpO1xuICAgICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgaW1wb3J0ZWRNZW1iZXJzKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHouWm9kVHlwZSkge1xuICAgICAgICAgIHRoaXMuc2V0TW9kdWxlUGF0aChuYW1lLCBtb2R1bGVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9kdWxlUGF0aEZyb21UeXBlRmlsZVBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBmaWxlUGF0aC5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIik7XG4gICAgY29uc3QgbWF0Y2hlZCA9IG5vcm1hbGl6ZWRQYXRoLm1hdGNoKC9cXC8oPzpzcmN8ZGlzdClcXC9hcHBsaWNhdGlvblxcLyguKylcXC4oPzp0c3xqcykkLyk7XG5cbiAgICBpZiAoIW1hdGNoZWQ/LlsxXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDtg4DsnoUg7YyM7J287J2YIOuqqOuTiCDqsr3roZzrpbwg6rOE7IKw7ZWgIOyImCDsl4bsirXri4jri6Q6ICR7ZmlsZVBhdGh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWRbMV07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEVudGl0eU1hbmFnZXIgPSBuZXcgRW50aXR5TWFuYWdlckNsYXNzKCk7XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwiY2hhbGsiLCJnbG9iIiwicmVhZEZpbGUiLCJpbmZsZWN0aW9uIiwicGF0aCIsInByZXR0aWZ5RXJyb3IiLCJ6IiwiU29uYW11IiwiRW50aXR5SnNvblNjaGVtYSIsImlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlIiwiaXNTZWFyY2hUZXh0UHJvcCIsIlNvbmFtdUZpbGVBcnJheVNjaGVtYSIsIlNvbmFtdUZpbGVTY2hlbWEiLCJnbG9iQXN5bmMiLCJpbXBvcnRNZW1iZXJzIiwicnVudGltZVBhdGgiLCJFbnRpdHkiLCJFbnRpdHlNYW5hZ2VyQ2xhc3MiLCJlbnRpdGllcyIsIk1hcCIsIm1vZHVsZVBhdGhzIiwidGFibGVTcGVjcyIsImlzQXV0b2xvYWRlZCIsImF1dG9sb2FkIiwiXyIsInBhdGhQYXR0ZXJuIiwiam9pbiIsImFwaVJvb3RQYXRoIiwiZmlsZSIsInJlc29sdmUiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwidG9TdHJpbmciLCJlcnJvciIsInNjaGVtYVZhbGlkYXRlIiwicmVsYXRpdmVQYXRoIiwicmVsYXRpdmUiLCJlcnJvck1lc3NhZ2UiLCJjb25zb2xlIiwicmVkIiwieWVsbG93IiwicmVnaXN0ZXIiLCJkZWZlclNlYXJjaFRleHRKc29uU291cmNlVmFsaWRhdGlvbiIsInJlZ2lzdGVyTm9uRW50aXR5VHlwZU1vZHVsZVBhdGhzIiwidmFsaWRhdGVBbGxSZWdpc3RlcmVkU2VhcmNoVGV4dEpzb25Tb3VyY2VzIiwicmVzdWx0Iiwic2FmZVBhcnNlIiwic3VjY2VzcyIsInJlbG9hZCIsImRvU2lsZW50IiwiY2xlYXIiLCJvcHRpb25zIiwiZW50aXR5IiwicmVnaXN0ZXJNb2R1bGVQYXRocyIsInZhbGlkYXRlU2VhcmNoVGV4dEpzb25Tb3VyY2VzIiwicmVnaXN0ZXJUYWJsZVNwZWNzIiwic2V0IiwiaWQiLCJ2YWx1ZXMiLCJwcm9wc0J5TmFtZSIsInByb3BzIiwibWFwIiwicHJvcCIsIm5hbWUiLCJzb3VyY2UiLCJzb3VyY2VDb2x1bW5zIiwic291cmNlUHJvcCIsImdldCIsInR5cGUiLCJ6b2RUeXBlIiwicmVzb2x2ZVNlYXJjaFRleHRKc29uU291cmNlVHlwZSIsIkVycm9yIiwidHlwZUlkIiwibG9jYWxUeXBlIiwidHlwZXMiLCJab2RUeXBlIiwicmVnaXN0ZXJlZEVudGl0eSIsInJlZ2lzdGVyZWRUeXBlIiwibW9kdWxlUGF0aCIsIm1vZHVsZUZpbGVQYXRoIiwiaW1wb3J0ZWRNZW1iZXJzIiwibWF0Y2hlZCIsImZpbmQiLCJ2YWx1ZSIsImVudGl0eUlkIiwidW5kZWZpbmVkIiwiZ2V0QnlUYWJsZSIsInRhYmxlIiwiQXJyYXkiLCJmcm9tIiwiZXhpc3RzIiwiZ2V0QWxsSWRzIiwiRW50aXR5TWFuYWdlciIsImtleXMiLCJzb3J0IiwiZ2V0QWxsRW50aXRpZXMiLCJnZXRBbGxQYXJlbnRJZHMiLCJmaWx0ZXIiLCJwYXJlbnRJZCIsImdldENoaWxkcmVuSWRzIiwic2V0TW9kdWxlUGF0aCIsImtleSIsImdldE1vZHVsZVBhdGgiLCJzZXRUYWJsZVNwZWMiLCJ0YWJsZVNwZWMiLCJnZXRUYWJsZVNwZWMiLCJnZXROYW1lc0Zyb21JZCIsInBsdXJhbGl6ZWQiLCJwbHVyYWxpemUiLCJmcyIsImRhc2hlcml6ZSIsInVuZGVyc2NvcmUiLCJ0b0xvd2VyQ2FzZSIsImZzUGx1cmFsIiwiY2FtZWwiLCJjYW1lbGl6ZSIsImNhbWVsUGx1cmFsIiwiY2FwaXRhbCIsImNhcGl0YWxQbHVyYWwiLCJ1cHBlciIsInRvVXBwZXJDYXNlIiwiY29uc3RhbnQiLCJnZXRFbnRpdHlJZEZyb21QYXRoIiwiZmlsZVBhdGgiLCJtYXRjaCIsInJlcGxhY2UiLCJ0eXBlUGF0aHNQYXR0ZXJucyIsInR5cGVQYXRocyIsIlByb21pc2UiLCJhbGwiLCJwYXR0ZXJuIiwiZmxhdCIsImdldE1vZHVsZVBhdGhGcm9tVHlwZUZpbGVQYXRoIiwibm9ybWFsaXplZFBhdGgiLCJyZXBsYWNlQWxsIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxZQUFZLFNBQVM7QUFDNUIsT0FBT0MsV0FBVyxRQUFRO0FBQzFCLFNBQVNDLElBQUksRUFBRUMsUUFBUSxRQUFRLG1CQUFjO0FBQzdDLE9BQU9DLGdCQUFnQixhQUFhO0FBQ3BD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
226
+ //#endregion
227
+ init_entity_manager();
228
+ export { EntityManager, init_entity_manager };
229
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW1hbmFnZXIuanMiLCJuYW1lcyI6WyJ6IiwiZW50aXR5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VudGl0eS9lbnRpdHktbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IGdsb2IsIHJlYWRGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHsgcHJldHRpZnlFcnJvciwgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7XG4gIEVudGl0eUpzb25TY2hlbWEsXG4gIGlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlLFxuICBpc1NlYXJjaFRleHRQcm9wLFxuICBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gIFNvbmFtdUZpbGVTY2hlbWEsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlJbmRleCwgdHlwZSBFbnRpdHlKc29uIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnbG9iQXN5bmMgfSBmcm9tIFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIjtcbmltcG9ydCB7IGltcG9ydE1lbWJlcnMgfSBmcm9tIFwiLi4vdXRpbHMvZXNtLXV0aWxzXCI7XG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyBydW50aW1lUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eSB9IGZyb20gXCIuL2VudGl0eVwiO1xuXG5leHBvcnQgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCA9IFJlY29yZDxcbiAgXCJmc1wiIHwgXCJmc1BsdXJhbFwiIHwgXCJjYW1lbFwiIHwgXCJjYW1lbFBsdXJhbFwiIHwgXCJjYXBpdGFsXCIgfCBcImNhcGl0YWxQbHVyYWxcIiB8IFwidXBwZXJcIiB8IFwiY29uc3RhbnRcIixcbiAgc3RyaW5nXG4+O1xuZXhwb3J0IHR5cGUgVGFibGVTcGVjID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHVuaXF1ZUluZGV4ZXM6IEVudGl0eUluZGV4W107XG4gIGpzb25Db2x1bW5zOiBzdHJpbmdbXTtcbn07XG5jbGFzcyBFbnRpdHlNYW5hZ2VyQ2xhc3Mge1xuICBwcml2YXRlIGVudGl0aWVzOiBNYXA8c3RyaW5nLCBFbnRpdHk+ID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgbW9kdWxlUGF0aHM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgdGFibGVTcGVjczogTWFwPHN0cmluZywgVGFibGVTcGVjPiA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGlzQXV0b2xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIOqyveuhnCDsoITri6zrsJvslYQg66qo65OgIGVudGl0eS5qc29uIO2MjOydvCDroZzrk5xcbiAgYXN5bmMgYXV0b2xvYWQoXzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuaXNBdXRvbG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBhdGhQYXR0ZXJuID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCIvc3JjL2FwcGxpY2F0aW9uLyoqLyouZW50aXR5Lmpzb25cIik7XG5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGZpbGUgb2YgZ2xvYihwYXRoLnJlc29sdmUocGF0aFBhdHRlcm4pKSkge1xuICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoKGF3YWl0IHJlYWRGaWxlKGZpbGUpKS50b1N0cmluZygpKTtcblxuICAgICAgLy8gZW50aXR5Lmpzb24g7Iqk7YKk66eIIOqygOymnVxuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLnNjaGVtYVZhbGlkYXRlKGpzb24pO1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoU29uYW11LmFwaVJvb3RQYXRoLCBmaWxlKTtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gcHJldHRpZnlFcnJvcihlcnJvcik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgY2hhbGsucmVkKGBJbnZhbGlkIGVudGl0eS5qc29uIHNjaGVtYTogJHtyZWxhdGl2ZVBhdGh9XFxuJHtjaGFsay55ZWxsb3coZXJyb3JNZXNzYWdlKX1gKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5yZWdpc3Rlcihqc29uLCB7IGRlZmVyU2VhcmNoVGV4dEpzb25Tb3VyY2VWYWxpZGF0aW9uOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucmVnaXN0ZXJOb25FbnRpdHlUeXBlTW9kdWxlUGF0aHMoKTtcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlQWxsUmVnaXN0ZXJlZFNlYXJjaFRleHRKc29uU291cmNlcygpO1xuXG4gICAgdGhpcy5pc0F1dG9sb2FkZWQgPSB0cnVlO1xuICB9XG5cbiAgc2NoZW1hVmFsaWRhdGUoanNvbjogdW5rbm93bikge1xuICAgIGNvbnN0IHJlc3VsdCA9IEVudGl0eUpzb25TY2hlbWEuc2FmZVBhcnNlKGpzb24pO1xuICAgIHJldHVybiByZXN1bHQuc3VjY2VzcyA/IG51bGwgOiByZXN1bHQuZXJyb3I7XG4gIH1cblxuICBhc3luYyByZWxvYWQoZG9TaWxlbnQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuZW50aXRpZXMuY2xlYXIoKTtcbiAgICB0aGlzLm1vZHVsZVBhdGhzLmNsZWFyKCk7XG4gICAgdGhpcy50YWJsZVNwZWNzLmNsZWFyKCk7XG4gICAgdGhpcy5pc0F1dG9sb2FkZWQgPSBmYWxzZTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmF1dG9sb2FkKGRvU2lsZW50KTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyKFxuICAgIGpzb246IEVudGl0eUpzb24sXG4gICAgb3B0aW9uczogeyBkZWZlclNlYXJjaFRleHRKc29uU291cmNlVmFsaWRhdGlvbj86IGJvb2xlYW4gfSA9IHt9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IEVudGl0eSB9ID0gYXdhaXQgaW1wb3J0KFwiLi9lbnRpdHlcIik7XG4gICAgY29uc3QgZW50aXR5ID0gbmV3IEVudGl0eShqc29uKTtcbiAgICBhd2FpdCBlbnRpdHkucmVnaXN0ZXJNb2R1bGVQYXRocygpO1xuICAgIGlmICghb3B0aW9ucy5kZWZlclNlYXJjaFRleHRKc29uU291cmNlVmFsaWRhdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZVNlYXJjaFRleHRKc29uU291cmNlcyhlbnRpdHkpO1xuICAgIH1cbiAgICBlbnRpdHkucmVnaXN0ZXJUYWJsZVNwZWNzKCk7XG4gICAgdGhpcy5lbnRpdGllcy5zZXQoanNvbi5pZCwgZW50aXR5KTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlQWxsUmVnaXN0ZXJlZFNlYXJjaFRleHRKc29uU291cmNlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiB0aGlzLmVudGl0aWVzLnZhbHVlcygpKSB7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlU2VhcmNoVGV4dEpzb25Tb3VyY2VzKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVNlYXJjaFRleHRKc29uU291cmNlcyhlbnRpdHk6IEVudGl0eSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByb3BzQnlOYW1lID0gbmV3IE1hcChlbnRpdHkucHJvcHMubWFwKChwcm9wKSA9PiBbcHJvcC5uYW1lLCBwcm9wXSkpO1xuXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIGVudGl0eS5wcm9wcykge1xuICAgICAgaWYgKCFpc1NlYXJjaFRleHRQcm9wKHByb3ApKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBwcm9wLnNvdXJjZUNvbHVtbnMpIHtcbiAgICAgICAgY29uc3Qgc291cmNlUHJvcCA9IHByb3BzQnlOYW1lLmdldChzb3VyY2UubmFtZSk7XG4gICAgICAgIGlmICghc291cmNlUHJvcCB8fCBzb3VyY2VQcm9wLnR5cGUgIT09IFwianNvblwiKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB6b2RUeXBlID0gYXdhaXQgdGhpcy5yZXNvbHZlU2VhcmNoVGV4dEpzb25Tb3VyY2VUeXBlKGVudGl0eSwgc291cmNlUHJvcC5pZCk7XG4gICAgICAgIGlmICghem9kVHlwZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBzZWFyY2hUZXh0IHNvdXJjZSBcIiR7c291cmNlLm5hbWV9XCLsnZgganNvbiDtg4DsnoUgXCIke3NvdXJjZVByb3AuaWR9XCLsnYQo66W8KSDroZzrk5ztlaAg7IiYIOyXhuyKteuLiOuLpC5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlKHpvZFR5cGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYHNlYXJjaFRleHQgc291cmNlIFwiJHtzb3VyY2UubmFtZX1cIuydmCBqc29uIO2DgOyehSBcIiR7c291cmNlUHJvcC5pZH1cIuydgCjripQpIHVud3JhcCDtm4Qgei5hcnJheSh6LnN0cmluZygpKSDsnbTslrTslbwg7ZWp64uI64ukLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZVNlYXJjaFRleHRKc29uU291cmNlVHlwZShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICB0eXBlSWQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx6LlpvZFR5cGVBbnkgfCBudWxsPiB7XG4gICAgY29uc3QgbG9jYWxUeXBlID0gZW50aXR5LnR5cGVzW3R5cGVJZF07XG4gICAgaWYgKGxvY2FsVHlwZSBpbnN0YW5jZW9mIHouWm9kVHlwZSkge1xuICAgICAgcmV0dXJuIGxvY2FsVHlwZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlZ2lzdGVyZWRFbnRpdHkgb2YgdGhpcy5lbnRpdGllcy52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgcmVnaXN0ZXJlZFR5cGUgPSByZWdpc3RlcmVkRW50aXR5LnR5cGVzW3R5cGVJZF07XG4gICAgICBpZiAocmVnaXN0ZXJlZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRUeXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlSWQgPT09IFwiU29uYW11RmlsZVwiKSB7XG4gICAgICByZXR1cm4gU29uYW11RmlsZVNjaGVtYTtcbiAgICB9XG4gICAgaWYgKHR5cGVJZCA9PT0gXCJTb25hbXVGaWxlW11cIikge1xuICAgICAgcmV0dXJuIFNvbmFtdUZpbGVBcnJheVNjaGVtYTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2R1bGVQYXRoID0gdGhpcy5tb2R1bGVQYXRocy5nZXQodHlwZUlkKTtcbiAgICBpZiAoIW1vZHVsZVBhdGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZHVsZUZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgICAgcnVudGltZVBhdGgoYGRpc3QvYXBwbGljYXRpb24vJHttb2R1bGVQYXRofS5qc2ApLFxuICAgICk7XG4gICAgY29uc3QgaW1wb3J0ZWRNZW1iZXJzID0gYXdhaXQgaW1wb3J0TWVtYmVyczx1bmtub3duPihtb2R1bGVGaWxlUGF0aCk7XG4gICAgY29uc3QgbWF0Y2hlZCA9IGltcG9ydGVkTWVtYmVycy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gdHlwZUlkKTtcbiAgICBpZiAoIW1hdGNoZWQgfHwgIShtYXRjaGVkLnZhbHVlIGluc3RhbmNlb2Ygei5ab2RUeXBlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWQudmFsdWU7XG4gIH1cblxuICBnZXQoZW50aXR5SWQ6IHN0cmluZyk6IEVudGl0eSB7XG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5lbnRpdGllcy5nZXQoZW50aXR5SWQpO1xuICAgIGlmIChlbnRpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIEVudGl0eSDsmpTssq0gJHtlbnRpdHlJZH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgZ2V0QnlUYWJsZSh0YWJsZTogc3RyaW5nKTogRW50aXR5IHtcbiAgICBjb25zdCBlbnRpdHkgPSBBcnJheS5mcm9tKHRoaXMuZW50aXRpZXMudmFsdWVzKCkpLmZpbmQoKGVudGl0eSkgPT4gZW50aXR5LnRhYmxlID09PSB0YWJsZSk7XG4gICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgRW50aXR5IOyalOyyrSAke3RhYmxlfWApO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBleGlzdHMoZW50aXR5SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXRpZXMuZ2V0KGVudGl0eUlkKTtcbiAgICByZXR1cm4gZW50aXR5ICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRBbGxJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKEVudGl0eU1hbmFnZXIuZW50aXRpZXMua2V5cygpKS50b1NvcnRlZCgpO1xuICB9XG5cbiAgZ2V0QWxsRW50aXRpZXMoKTogRW50aXR5W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50aXRpZXMudmFsdWVzKCkpO1xuICB9XG5cbiAgZ2V0QWxsUGFyZW50SWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxJZHMoKS5maWx0ZXIoKGVudGl0eUlkKSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmdldChlbnRpdHlJZCk7XG4gICAgICByZXR1cm4gZW50aXR5LnBhcmVudElkID09PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDaGlsZHJlbklkcyhwYXJlbnRJZDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbElkcygpLmZpbHRlcigoZW50aXR5SWQpID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZ2V0KGVudGl0eUlkKTtcbiAgICAgIHJldHVybiBlbnRpdHkucGFyZW50SWQgPT09IHBhcmVudElkO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0TW9kdWxlUGF0aChrZXk6IHN0cmluZywgbW9kdWxlUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gY29uc29sZS5kZWJ1ZyhjaGFsay5jeWFuKGBzZXRNb2R1bGVQYXRoIDo6ICR7a2V5fSA6OiAke21vZHVsZVBhdGh9YCkpO1xuICAgIHRoaXMubW9kdWxlUGF0aHMuc2V0KGtleSwgbW9kdWxlUGF0aCk7XG4gIH1cblxuICBnZXRNb2R1bGVQYXRoKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtb2R1bGVQYXRoID0gdGhpcy5tb2R1bGVQYXRocy5nZXQoa2V5KTtcbiAgICBpZiAobW9kdWxlUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQg66qo65OIIO2MqOyKpCDsmpTssq0gJHtrZXl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZHVsZVBhdGg7XG4gIH1cblxuICBzZXRUYWJsZVNwZWModGFibGVTcGVjOiBUYWJsZVNwZWMpIHtcbiAgICB0aGlzLnRhYmxlU3BlY3Muc2V0KHRhYmxlU3BlYy5uYW1lLCB0YWJsZVNwZWMpO1xuICB9XG5cbiAgZ2V0VGFibGVTcGVjKGtleTogc3RyaW5nKTogVGFibGVTcGVjIHtcbiAgICBjb25zdCB0YWJsZVNwZWMgPSB0aGlzLnRhYmxlU3BlY3MuZ2V0KGtleSk7XG4gICAgaWYgKHRhYmxlU3BlYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQg7YWM7J2067iUIOyKpO2OmSDsmpTssq0gJHtrZXl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlU3BlYztcbiAgfVxuXG4gIGdldE5hbWVzRnJvbUlkKGVudGl0eUlkOiBzdHJpbmcpOiBFbnRpdHlOYW1lc1JlY29yZCB7XG4gICAgLy8gZW50aXR5SWTqsIAg64uo67O17IiYIOuPme2YlSDri6jslrTsnbgg6rK97JqwIExpc3Qg67aZ7Jes7IScIOyDneyEsVxuICAgIGNvbnN0IHBsdXJhbGl6ZWQgPVxuICAgICAgaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5SWQpID09PSBlbnRpdHlJZFxuICAgICAgICA/IGAke2VudGl0eUlkfUxpc3RgXG4gICAgICAgIDogaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5SWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZzOiBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgZnNQbHVyYWw6IGluZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShwbHVyYWxpemVkKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgIGNhbWVsOiBpbmZsZWN0aW9uLmNhbWVsaXplKGVudGl0eUlkLCB0cnVlKSxcbiAgICAgIGNhbWVsUGx1cmFsOiBpbmZsZWN0aW9uLmNhbWVsaXplKHBsdXJhbGl6ZWQsIHRydWUpLFxuICAgICAgY2FwaXRhbDogZW50aXR5SWQsXG4gICAgICBjYXBpdGFsUGx1cmFsOiBwbHVyYWxpemVkLFxuICAgICAgdXBwZXI6IGVudGl0eUlkLnRvVXBwZXJDYXNlKCksXG4gICAgICBjb25zdGFudDogaW5mbGVjdGlvbi51bmRlcnNjb3JlKGVudGl0eUlkKS50b1VwcGVyQ2FzZSgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRW50aXR5SWTripQgTW9kZWzsnYQg7KCc7Jm47ZWcIFBhc2NhbENhc2Ug7J2066aE7J6F64uI64ukLiAoZXguIFwiVXNlclwiKVxuICAgKiBAcGFyYW0gZmlsZVBhdGhcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldEVudGl0eUlkRnJvbVBhdGgoZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IHN0cmluZyB7XG4gICAgY29uc3QgbWF0Y2hlZCA9IGZpbGVQYXRoLm1hdGNoKC9hcHBsaWNhdGlvblxcLyguKylcXC8vKTtcbiAgICBhc3NlcnQobWF0Y2hlZD8uWzFdKTtcbiAgICByZXR1cm4gaW5mbGVjdGlvbi5jYW1lbGl6ZShtYXRjaGVkWzFdLnJlcGxhY2UoLy0vZywgXCJfXCIpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVnaXN0ZXJOb25FbnRpdHlUeXBlTW9kdWxlUGF0aHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdHlwZVBhdGhzUGF0dGVybnMgPSBbXG4gICAgICBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLnR5cGVzLnRzXCIpKSxcbiAgICAgIHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIHJ1bnRpbWVQYXRoKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZ2VuZXJhdGVkLnRzXCIpKSxcbiAgICBdO1xuICAgIGNvbnN0IHR5cGVQYXRocyA9IChcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHR5cGVQYXRoc1BhdHRlcm5zLm1hcCgocGF0dGVybikgPT4gZ2xvYkFzeW5jKHBhdHRlcm4pKSlcbiAgICApLmZsYXQoKTtcblxuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgdHlwZVBhdGhzKSB7XG4gICAgICBjb25zdCBtb2R1bGVQYXRoID0gdGhpcy5nZXRNb2R1bGVQYXRoRnJvbVR5cGVGaWxlUGF0aChmaWxlUGF0aCk7XG4gICAgICBjb25zdCBpbXBvcnRlZE1lbWJlcnMgPSBhd2FpdCBpbXBvcnRNZW1iZXJzPHVua25vd24+KGZpbGVQYXRoKTtcbiAgICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIGltcG9ydGVkTWVtYmVycykge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiB6LlpvZFR5cGUpIHtcbiAgICAgICAgICB0aGlzLnNldE1vZHVsZVBhdGgobmFtZSwgbW9kdWxlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE1vZHVsZVBhdGhGcm9tVHlwZUZpbGVQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gZmlsZVBhdGgucmVwbGFjZUFsbChcIlxcXFxcIiwgXCIvXCIpO1xuICAgIGNvbnN0IG1hdGNoZWQgPSBub3JtYWxpemVkUGF0aC5tYXRjaCgvXFwvKD86c3JjfGRpc3QpXFwvYXBwbGljYXRpb25cXC8oLispXFwuKD86dHN8anMpJC8pO1xuXG4gICAgaWYgKCFtYXRjaGVkPy5bMV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7YOA7J6FIO2MjOydvOydmCDrqqjrk4gg6rK966Gc66W8IOqzhOyCsO2VoCDsiJgg7JeG7Iq164uI64ukOiAke2ZpbGVQYXRofWApO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVkWzFdO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBFbnRpdHlNYW5hZ2VyID0gbmV3IEVudGl0eU1hbmFnZXJDbGFzcygpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O2NBUXVDO2FBT2Y7bUJBRXlCO2lCQUNFO2tCQUVEO0NBWTVDLHFCQUFOLE1BQXlCO0VBQ3ZCLEFBQVEsV0FBZ0MsSUFBSSxLQUFLO0VBQ2pELEFBQU8sY0FBbUMsSUFBSSxLQUFLO0VBQ25ELEFBQVEsYUFBcUMsSUFBSSxLQUFLO0VBQ3RELEFBQU8sZUFBd0I7RUFHL0IsTUFBTSxTQUFTLElBQWEsT0FBTztBQUNqQyxPQUFJLEtBQUssY0FBYztBQUNyQjs7R0FFRixNQUFNLGNBQWMsS0FBSyxLQUFLLE9BQU8sYUFBYSxvQ0FBb0M7QUFFdEYsY0FBVyxNQUFNLFFBQVEsS0FBSyxLQUFLLFFBQVEsWUFBWSxDQUFDLEVBQUU7SUFDeEQsTUFBTSxPQUFPLEtBQUssT0FBTyxNQUFNLFNBQVMsS0FBSyxFQUFFLFVBQVUsQ0FBQztJQUcxRCxNQUFNLFFBQVEsS0FBSyxlQUFlLEtBQUs7QUFDdkMsUUFBSSxPQUFPO0tBQ1QsTUFBTSxlQUFlLEtBQUssU0FBUyxPQUFPLGFBQWEsS0FBSztLQUM1RCxNQUFNLGVBQWUsY0FBYyxNQUFNO0FBQ3pDLGFBQVEsTUFDTixNQUFNLElBQUksK0JBQStCLGFBQWEsSUFBSSxNQUFNLE9BQU8sYUFBYSxHQUFHLENBQ3hGOztBQUdILFVBQU0sS0FBSyxTQUFTLE1BQU0sRUFBRSxxQ0FBcUMsTUFBTSxDQUFDOztBQUcxRSxTQUFNLEtBQUssa0NBQWtDO0FBQzdDLFNBQU0sS0FBSyw0Q0FBNEM7QUFFdkQsUUFBSyxlQUFlOztFQUd0QixlQUFlLE1BQWU7R0FDNUIsTUFBTSxTQUFTLGlCQUFpQixVQUFVLEtBQUs7QUFDL0MsVUFBTyxPQUFPLFVBQVUsT0FBTyxPQUFPOztFQUd4QyxNQUFNLE9BQU8sV0FBb0IsT0FBTztBQUN0QyxRQUFLLFNBQVMsT0FBTztBQUNyQixRQUFLLFlBQVksT0FBTztBQUN4QixRQUFLLFdBQVcsT0FBTztBQUN2QixRQUFLLGVBQWU7QUFFcEIsVUFBTyxNQUFNLEtBQUssU0FBUyxTQUFTOztFQUd0QyxNQUFNLFNBQ0osTUFDQSxVQUE2RCxFQUFFLEVBQ2hEO0dBQ2YsTUFBTSxFQUFFLFdBQVcsTUFBTSxPQUFPO0dBQ2hDLE1BQU0sU0FBUyxJQUFJLE9BQU8sS0FBSztBQUMvQixTQUFNLE9BQU8scUJBQXFCO0FBQ2xDLE9BQUksQ0FBQyxRQUFRLHFDQUFxQztBQUNoRCxVQUFNLEtBQUssOEJBQThCLE9BQU87O0FBRWxELFVBQU8sb0JBQW9CO0FBQzNCLFFBQUssU0FBUyxJQUFJLEtBQUssSUFBSSxPQUFPOztFQUdwQyxNQUFNLDZDQUE0RDtBQUNoRSxRQUFLLE1BQU0sVUFBVSxLQUFLLFNBQVMsUUFBUSxFQUFFO0FBQzNDLFVBQU0sS0FBSyw4QkFBOEIsT0FBTzs7O0VBSXBELE1BQWMsOEJBQThCLFFBQStCO0dBQ3pFLE1BQU0sY0FBYyxJQUFJLElBQUksT0FBTyxNQUFNLEtBQUssU0FBUyxDQUFDLEtBQUssTUFBTSxLQUFLLENBQUMsQ0FBQztBQUUxRSxRQUFLLE1BQU0sUUFBUSxPQUFPLE9BQU87QUFDL0IsUUFBSSxDQUFDLGlCQUFpQixLQUFLLEVBQUU7QUFDM0I7O0FBR0YsU0FBSyxNQUFNLFVBQVUsS0FBSyxlQUFlO0tBQ3ZDLE1BQU0sYUFBYSxZQUFZLElBQUksT0FBTyxLQUFLO0FBQy9DLFNBQUksQ0FBQyxjQUFjLFdBQVcsU0FBUyxRQUFRO0FBQzdDOztLQUdGLE1BQU0sVUFBVSxNQUFNLEtBQUssZ0NBQWdDLFFBQVEsV0FBVyxHQUFHO0FBQ2pGLFNBQUksQ0FBQyxTQUFTO0FBQ1osWUFBTSxJQUFJLE1BQ1Isc0JBQXNCLE9BQU8sS0FBSyxjQUFjLFdBQVcsR0FBRyxtQkFDL0Q7O0FBR0gsU0FBSSxDQUFDLDhCQUE4QixRQUFRLEVBQUU7QUFDM0MsWUFBTSxJQUFJLE1BQ1Isc0JBQXNCLE9BQU8sS0FBSyxjQUFjLFdBQVcsR0FBRyw2Q0FDL0Q7Ozs7O0VBTVQsTUFBYyxnQ0FDWixRQUNBLFFBQzhCO0dBQzlCLE1BQU0sWUFBWSxPQUFPLE1BQU07QUFDL0IsT0FBSSxxQkFBcUJBLElBQUUsU0FBUztBQUNsQyxXQUFPOztBQUdULFFBQUssTUFBTSxvQkFBb0IsS0FBSyxTQUFTLFFBQVEsRUFBRTtJQUNyRCxNQUFNLGlCQUFpQixpQkFBaUIsTUFBTTtBQUM5QyxRQUFJLDBCQUEwQkEsSUFBRSxTQUFTO0FBQ3ZDLFlBQU87OztBQUlYLE9BQUksV0FBVyxjQUFjO0FBQzNCLFdBQU87O0FBRVQsT0FBSSxXQUFXLGdCQUFnQjtBQUM3QixXQUFPOztHQUdULE1BQU0sYUFBYSxLQUFLLFlBQVksSUFBSSxPQUFPO0FBQy9DLE9BQUksQ0FBQyxZQUFZO0FBQ2YsV0FBTzs7R0FHVCxNQUFNLGlCQUFpQixLQUFLLEtBQzFCLE9BQU8sYUFDUCxZQUFZLG9CQUFvQixXQUFXLEtBQUssQ0FDakQ7R0FDRCxNQUFNLGtCQUFrQixNQUFNLGNBQXVCLGVBQWU7R0FDcEUsTUFBTSxVQUFVLGdCQUFnQixNQUFNLEVBQUUsV0FBVyxTQUFTLE9BQU87QUFDbkUsT0FBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLGlCQUFpQkEsSUFBRSxVQUFVO0FBQ3JELFdBQU87O0FBR1QsVUFBTyxRQUFROztFQUdqQixJQUFJLFVBQTBCO0dBQzVCLE1BQU0sU0FBUyxLQUFLLFNBQVMsSUFBSSxTQUFTO0FBQzFDLE9BQUksV0FBVyxXQUFXO0FBQ3hCLFVBQU0sSUFBSSxNQUFNLHFCQUFxQixXQUFXOztBQUdsRCxVQUFPOztFQUdULFdBQVcsT0FBdUI7R0FDaEMsTUFBTSxTQUFTLE1BQU0sS0FBSyxLQUFLLFNBQVMsUUFBUSxDQUFDLENBQUMsTUFBTSxhQUFXQyxTQUFPLFVBQVUsTUFBTTtBQUMxRixPQUFJLFdBQVcsV0FBVztBQUN4QixVQUFNLElBQUksTUFBTSxxQkFBcUIsUUFBUTs7QUFHL0MsVUFBTzs7RUFHVCxPQUFPLFVBQTJCO0dBQ2hDLE1BQU0sU0FBUyxLQUFLLFNBQVMsSUFBSSxTQUFTO0FBQzFDLFVBQU8sV0FBVzs7RUFHcEIsWUFBc0I7QUFDcEIsVUFBTyxNQUFNLEtBQUssY0FBYyxTQUFTLE1BQU0sQ0FBQyxDQUFDLFVBQVU7O0VBRzdELGlCQUEyQjtBQUN6QixVQUFPLE1BQU0sS0FBSyxLQUFLLFNBQVMsUUFBUSxDQUFDOztFQUczQyxrQkFBNEI7QUFDMUIsVUFBTyxLQUFLLFdBQVcsQ0FBQyxRQUFRLGFBQWE7SUFDM0MsTUFBTSxTQUFTLEtBQUssSUFBSSxTQUFTO0FBQ2pDLFdBQU8sT0FBTyxhQUFhO0tBQzNCOztFQUdKLGVBQWUsVUFBNEI7QUFDekMsVUFBTyxLQUFLLFdBQVcsQ0FBQyxRQUFRLGFBQWE7SUFDM0MsTUFBTSxTQUFTLEtBQUssSUFBSSxTQUFTO0FBQ2pDLFdBQU8sT0FBTyxhQUFhO0tBQzNCOztFQUdKLGNBQWMsS0FBYSxZQUEwQjtBQUVuRCxRQUFLLFlBQVksSUFBSSxLQUFLLFdBQVc7O0VBR3ZDLGNBQWMsS0FBcUI7R0FDakMsTUFBTSxhQUFhLEtBQUssWUFBWSxJQUFJLElBQUk7QUFDNUMsT0FBSSxlQUFlLFdBQVc7QUFDNUIsVUFBTSxJQUFJLE1BQU0sb0JBQW9CLE1BQU07O0FBRzVDLFVBQU87O0VBR1QsYUFBYSxXQUFzQjtBQUNqQyxRQUFLLFdBQVcsSUFBSSxVQUFVLE1BQU0sVUFBVTs7RUFHaEQsYUFBYSxLQUF3QjtHQUNuQyxNQUFNLFlBQVksS0FBSyxXQUFXLElBQUksSUFBSTtBQUMxQyxPQUFJLGNBQWMsV0FBVztBQUMzQixVQUFNLElBQUksTUFBTSxxQkFBcUIsTUFBTTs7QUFHN0MsVUFBTzs7RUFHVCxlQUFlLFVBQXFDO0dBRWxELE1BQU0sYUFDSixXQUFXLFVBQVUsU0FBUyxLQUFLLFdBQy9CLEdBQUcsU0FBUyxRQUNaLFdBQVcsVUFBVSxTQUFTO0FBRXBDLFVBQU87SUFDTCxJQUFJLFdBQVcsVUFBVSxXQUFXLFdBQVcsU0FBUyxDQUFDLENBQUMsYUFBYTtJQUN2RSxVQUFVLFdBQVcsVUFBVSxXQUFXLFdBQVcsV0FBVyxDQUFDLENBQUMsYUFBYTtJQUMvRSxPQUFPLFdBQVcsU0FBUyxVQUFVLEtBQUs7SUFDMUMsYUFBYSxXQUFXLFNBQVMsWUFBWSxLQUFLO0lBQ2xELFNBQVM7SUFDVCxlQUFlO0lBQ2YsT0FBTyxTQUFTLGFBQWE7SUFDN0IsVUFBVSxXQUFXLFdBQVcsU0FBUyxDQUFDLGFBQWE7SUFDeEQ7Ozs7Ozs7RUFRSCxvQkFBb0IsVUFBZ0M7R0FDbEQsTUFBTSxVQUFVLFNBQVMsTUFBTSxzQkFBc0I7QUFDckQsVUFBTyxVQUFVLEdBQUc7QUFDcEIsVUFBTyxXQUFXLFNBQVMsUUFBUSxHQUFHLFFBQVEsTUFBTSxJQUFJLENBQUM7O0VBRzNELE1BQWMsbUNBQWtEO0dBQzlELE1BQU0sb0JBQW9CLENBQ3hCLEtBQUssS0FBSyxPQUFPLGFBQWEsWUFBWSxnQ0FBZ0MsQ0FBQyxFQUMzRSxLQUFLLEtBQUssT0FBTyxhQUFhLFlBQVksb0NBQW9DLENBQUMsQ0FDaEY7R0FDRCxNQUFNLGFBQ0osTUFBTSxRQUFRLElBQUksa0JBQWtCLEtBQUssWUFBWSxVQUFVLFFBQVEsQ0FBQyxDQUFDLEVBQ3pFLE1BQU07QUFFUixRQUFLLE1BQU0sWUFBWSxXQUFXO0lBQ2hDLE1BQU0sYUFBYSxLQUFLLDhCQUE4QixTQUFTO0lBQy9ELE1BQU0sa0JBQWtCLE1BQU0sY0FBdUIsU0FBUztBQUM5RCxTQUFLLE1BQU0sRUFBRSxNQUFNLFdBQVcsaUJBQWlCO0FBQzdDLFNBQUksaUJBQWlCRCxJQUFFLFNBQVM7QUFDOUIsV0FBSyxjQUFjLE1BQU0sV0FBVzs7Ozs7RUFNNUMsQUFBUSw4QkFBOEIsVUFBMEI7R0FDOUQsTUFBTSxpQkFBaUIsU0FBUyxXQUFXLE1BQU0sSUFBSTtHQUNyRCxNQUFNLFVBQVUsZUFBZSxNQUFNLGdEQUFnRDtBQUVyRixPQUFJLENBQUMsVUFBVSxJQUFJO0FBQ2pCLFVBQU0sSUFBSSxNQUFNLDZCQUE2QixXQUFXOztBQUcxRCxVQUFPLFFBQVE7OztDQUlOLGdCQUFnQixJQUFJLG9CQUFvQiJ9
@@ -1,4 +1,4 @@
1
- import type { Cone, EntityJson } from "../types/types";
1
+ import { type Cone, type EntityJson } from "../types/types";
2
2
  /**
3
3
  * Entity의 템플릿 cone을 생성합니다.
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"entity-template-cone.d.ts","sourceRoot":"","sources":["../../src/entity/entity-template-cone.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAA+C,MAAM,gBAAgB,CAAC;AASpG;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,MAAM,GAAE,IAAI,GAAG,IAAI,GAAG,IAAW,GAChC;IACD,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CACjC,CAsDA"}
1
+ {"version":3,"file":"entity-template-cone.d.ts","sourceRoot":"","sources":["../../src/entity/entity-template-cone.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,IAAI,EACT,KAAK,UAAU,EAIhB,MAAM,gBAAgB,CAAC;AASxB;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,MAAM,GAAE,IAAI,GAAG,IAAI,GAAG,IAAW,GAChC;IACD,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CACjC,CAsDA"}