@alpha.consultings/eloquent-orm.js 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/README.md +215 -0
  3. package/dist/Model.d.ts +2 -0
  4. package/dist/Model.d.ts.map +1 -0
  5. package/dist/Model.js +7 -0
  6. package/dist/Model.js.map +1 -0
  7. package/dist/cli/commands/cacheClear.d.ts +2 -0
  8. package/dist/cli/commands/cacheClear.d.ts.map +1 -0
  9. package/dist/cli/commands/cacheClear.js +69 -0
  10. package/dist/cli/commands/cacheClear.js.map +1 -0
  11. package/dist/cli/commands/cacheStats.d.ts +2 -0
  12. package/dist/cli/commands/cacheStats.d.ts.map +1 -0
  13. package/dist/cli/commands/cacheStats.js +55 -0
  14. package/dist/cli/commands/cacheStats.js.map +1 -0
  15. package/dist/cli/commands/dbSeed.d.ts +16 -0
  16. package/dist/cli/commands/dbSeed.d.ts.map +1 -0
  17. package/dist/cli/commands/dbSeed.js +201 -0
  18. package/dist/cli/commands/dbSeed.js.map +1 -0
  19. package/dist/cli/commands/dbSeedBootstrapPrecheck.d.ts +3 -0
  20. package/dist/cli/commands/dbSeedBootstrapPrecheck.d.ts.map +1 -0
  21. package/dist/cli/commands/dbSeedBootstrapPrecheck.js +8 -0
  22. package/dist/cli/commands/dbSeedBootstrapPrecheck.js.map +1 -0
  23. package/dist/cli/commands/dbSeedFresh.d.ts +14 -0
  24. package/dist/cli/commands/dbSeedFresh.d.ts.map +1 -0
  25. package/dist/cli/commands/dbSeedFresh.js +81 -0
  26. package/dist/cli/commands/dbSeedFresh.js.map +1 -0
  27. package/dist/cli/commands/demoScenario.d.ts +9 -0
  28. package/dist/cli/commands/demoScenario.d.ts.map +1 -0
  29. package/dist/cli/commands/demoScenario.js +185 -0
  30. package/dist/cli/commands/demoScenario.js.map +1 -0
  31. package/dist/cli/commands/factoryStatus.d.ts +9 -0
  32. package/dist/cli/commands/factoryStatus.d.ts.map +1 -0
  33. package/dist/cli/commands/factoryStatus.js +103 -0
  34. package/dist/cli/commands/factoryStatus.js.map +1 -0
  35. package/dist/cli/commands/makeController.d.ts +11 -0
  36. package/dist/cli/commands/makeController.d.ts.map +1 -0
  37. package/dist/cli/commands/makeController.js +61 -0
  38. package/dist/cli/commands/makeController.js.map +1 -0
  39. package/dist/cli/commands/makeFactory.d.ts +14 -0
  40. package/dist/cli/commands/makeFactory.d.ts.map +1 -0
  41. package/dist/cli/commands/makeFactory.js +183 -0
  42. package/dist/cli/commands/makeFactory.js.map +1 -0
  43. package/dist/cli/commands/makeMigration.d.ts +18 -0
  44. package/dist/cli/commands/makeMigration.d.ts.map +1 -0
  45. package/dist/cli/commands/makeMigration.js +496 -0
  46. package/dist/cli/commands/makeMigration.js.map +1 -0
  47. package/dist/cli/commands/makeModel.d.ts +20 -0
  48. package/dist/cli/commands/makeModel.d.ts.map +1 -0
  49. package/dist/cli/commands/makeModel.js +360 -0
  50. package/dist/cli/commands/makeModel.js.map +1 -0
  51. package/dist/cli/commands/makeRegistry.d.ts +7 -0
  52. package/dist/cli/commands/makeRegistry.d.ts.map +1 -0
  53. package/dist/cli/commands/makeRegistry.js +88 -0
  54. package/dist/cli/commands/makeRegistry.js.map +1 -0
  55. package/dist/cli/commands/makeScenario.d.ts +12 -0
  56. package/dist/cli/commands/makeScenario.d.ts.map +1 -0
  57. package/dist/cli/commands/makeScenario.js +639 -0
  58. package/dist/cli/commands/makeScenario.js.map +1 -0
  59. package/dist/cli/commands/makeSeed.d.ts +11 -0
  60. package/dist/cli/commands/makeSeed.d.ts.map +1 -0
  61. package/dist/cli/commands/makeSeed.js +47 -0
  62. package/dist/cli/commands/makeSeed.js.map +1 -0
  63. package/dist/cli/commands/makeService.d.ts +5 -0
  64. package/dist/cli/commands/makeService.d.ts.map +1 -0
  65. package/dist/cli/commands/makeService.js +31 -0
  66. package/dist/cli/commands/makeService.js.map +1 -0
  67. package/dist/cli/commands/migrateFresh.d.ts +14 -0
  68. package/dist/cli/commands/migrateFresh.d.ts.map +1 -0
  69. package/dist/cli/commands/migrateFresh.js +150 -0
  70. package/dist/cli/commands/migrateFresh.js.map +1 -0
  71. package/dist/cli/commands/migrateReset.d.ts +12 -0
  72. package/dist/cli/commands/migrateReset.d.ts.map +1 -0
  73. package/dist/cli/commands/migrateReset.js +28 -0
  74. package/dist/cli/commands/migrateReset.js.map +1 -0
  75. package/dist/cli/commands/migrateRollback.d.ts +10 -0
  76. package/dist/cli/commands/migrateRollback.d.ts.map +1 -0
  77. package/dist/cli/commands/migrateRollback.js +303 -0
  78. package/dist/cli/commands/migrateRollback.js.map +1 -0
  79. package/dist/cli/commands/migrateRun.d.ts +10 -0
  80. package/dist/cli/commands/migrateRun.d.ts.map +1 -0
  81. package/dist/cli/commands/migrateRun.js +301 -0
  82. package/dist/cli/commands/migrateRun.js.map +1 -0
  83. package/dist/cli/commands/migrateStatus.d.ts +8 -0
  84. package/dist/cli/commands/migrateStatus.d.ts.map +1 -0
  85. package/dist/cli/commands/migrateStatus.js +118 -0
  86. package/dist/cli/commands/migrateStatus.js.map +1 -0
  87. package/dist/cli/eloquent.d.ts +18 -0
  88. package/dist/cli/eloquent.d.ts.map +1 -0
  89. package/dist/cli/eloquent.js +187 -0
  90. package/dist/cli/eloquent.js.map +1 -0
  91. package/dist/cli/utils/ArtifactCompatibility.d.ts +10 -0
  92. package/dist/cli/utils/ArtifactCompatibility.d.ts.map +1 -0
  93. package/dist/cli/utils/ArtifactCompatibility.js +60 -0
  94. package/dist/cli/utils/ArtifactCompatibility.js.map +1 -0
  95. package/dist/cli/utils/ArtifactRoutingReport.d.ts +10 -0
  96. package/dist/cli/utils/ArtifactRoutingReport.d.ts.map +1 -0
  97. package/dist/cli/utils/ArtifactRoutingReport.js +25 -0
  98. package/dist/cli/utils/ArtifactRoutingReport.js.map +1 -0
  99. package/dist/cli/utils/ArtifactStorage.d.ts +10 -0
  100. package/dist/cli/utils/ArtifactStorage.d.ts.map +1 -0
  101. package/dist/cli/utils/ArtifactStorage.js +193 -0
  102. package/dist/cli/utils/ArtifactStorage.js.map +1 -0
  103. package/dist/cli/utils/AuditTrail.d.ts +25 -0
  104. package/dist/cli/utils/AuditTrail.d.ts.map +1 -0
  105. package/dist/cli/utils/AuditTrail.js +74 -0
  106. package/dist/cli/utils/AuditTrail.js.map +1 -0
  107. package/dist/cli/utils/CliActionRuntime.d.ts +5 -0
  108. package/dist/cli/utils/CliActionRuntime.d.ts.map +1 -0
  109. package/dist/cli/utils/CliActionRuntime.js +22 -0
  110. package/dist/cli/utils/CliActionRuntime.js.map +1 -0
  111. package/dist/cli/utils/CliBootstrapSupport.d.ts +13 -0
  112. package/dist/cli/utils/CliBootstrapSupport.d.ts.map +1 -0
  113. package/dist/cli/utils/CliBootstrapSupport.js +55 -0
  114. package/dist/cli/utils/CliBootstrapSupport.js.map +1 -0
  115. package/dist/cli/utils/CliCommandCatalog.d.ts +6 -0
  116. package/dist/cli/utils/CliCommandCatalog.d.ts.map +1 -0
  117. package/dist/cli/utils/CliCommandCatalog.js +78 -0
  118. package/dist/cli/utils/CliCommandCatalog.js.map +1 -0
  119. package/dist/cli/utils/CliCommandTargets.d.ts +8 -0
  120. package/dist/cli/utils/CliCommandTargets.d.ts.map +1 -0
  121. package/dist/cli/utils/CliCommandTargets.js +19 -0
  122. package/dist/cli/utils/CliCommandTargets.js.map +1 -0
  123. package/dist/cli/utils/CliMakeArtifactCommandRegistration.d.ts +3 -0
  124. package/dist/cli/utils/CliMakeArtifactCommandRegistration.d.ts.map +1 -0
  125. package/dist/cli/utils/CliMakeArtifactCommandRegistration.js +94 -0
  126. package/dist/cli/utils/CliMakeArtifactCommandRegistration.js.map +1 -0
  127. package/dist/cli/utils/CliMigrationCommandRegistration.d.ts +3 -0
  128. package/dist/cli/utils/CliMigrationCommandRegistration.d.ts.map +1 -0
  129. package/dist/cli/utils/CliMigrationCommandRegistration.js +195 -0
  130. package/dist/cli/utils/CliMigrationCommandRegistration.js.map +1 -0
  131. package/dist/cli/utils/CliPresentation.d.ts +2 -0
  132. package/dist/cli/utils/CliPresentation.d.ts.map +1 -0
  133. package/dist/cli/utils/CliPresentation.js +13 -0
  134. package/dist/cli/utils/CliPresentation.js.map +1 -0
  135. package/dist/cli/utils/CliProductionGuards.d.ts +11 -0
  136. package/dist/cli/utils/CliProductionGuards.d.ts.map +1 -0
  137. package/dist/cli/utils/CliProductionGuards.js +34 -0
  138. package/dist/cli/utils/CliProductionGuards.js.map +1 -0
  139. package/dist/cli/utils/CliScaffoldCommandRegistration.d.ts +3 -0
  140. package/dist/cli/utils/CliScaffoldCommandRegistration.d.ts.map +1 -0
  141. package/dist/cli/utils/CliScaffoldCommandRegistration.js +89 -0
  142. package/dist/cli/utils/CliScaffoldCommandRegistration.js.map +1 -0
  143. package/dist/cli/utils/CliSeedScenarioCommandRegistration.d.ts +3 -0
  144. package/dist/cli/utils/CliSeedScenarioCommandRegistration.d.ts.map +1 -0
  145. package/dist/cli/utils/CliSeedScenarioCommandRegistration.js +123 -0
  146. package/dist/cli/utils/CliSeedScenarioCommandRegistration.js.map +1 -0
  147. package/dist/cli/utils/CliSupportCommandRegistration.d.ts +3 -0
  148. package/dist/cli/utils/CliSupportCommandRegistration.d.ts.map +1 -0
  149. package/dist/cli/utils/CliSupportCommandRegistration.js +44 -0
  150. package/dist/cli/utils/CliSupportCommandRegistration.js.map +1 -0
  151. package/dist/cli/utils/ConsoleSilencer.d.ts +6 -0
  152. package/dist/cli/utils/ConsoleSilencer.d.ts.map +1 -0
  153. package/dist/cli/utils/ConsoleSilencer.js +25 -0
  154. package/dist/cli/utils/ConsoleSilencer.js.map +1 -0
  155. package/dist/cli/utils/ImportResolver.d.ts +16 -0
  156. package/dist/cli/utils/ImportResolver.d.ts.map +1 -0
  157. package/dist/cli/utils/ImportResolver.js +57 -0
  158. package/dist/cli/utils/ImportResolver.js.map +1 -0
  159. package/dist/cli/utils/ModelIntrospector.d.ts +33 -0
  160. package/dist/cli/utils/ModelIntrospector.d.ts.map +1 -0
  161. package/dist/cli/utils/ModelIntrospector.js +76 -0
  162. package/dist/cli/utils/ModelIntrospector.js.map +1 -0
  163. package/dist/cli/utils/PathMap.d.ts +58 -0
  164. package/dist/cli/utils/PathMap.d.ts.map +1 -0
  165. package/dist/cli/utils/PathMap.js +132 -0
  166. package/dist/cli/utils/PathMap.js.map +1 -0
  167. package/dist/cli/utils/ProductionSafety.d.ts +25 -0
  168. package/dist/cli/utils/ProductionSafety.d.ts.map +1 -0
  169. package/dist/cli/utils/ProductionSafety.js +61 -0
  170. package/dist/cli/utils/ProductionSafety.js.map +1 -0
  171. package/dist/cli/utils/ScaffoldGeneratorSupport.d.ts +16 -0
  172. package/dist/cli/utils/ScaffoldGeneratorSupport.d.ts.map +1 -0
  173. package/dist/cli/utils/ScaffoldGeneratorSupport.js +66 -0
  174. package/dist/cli/utils/ScaffoldGeneratorSupport.js.map +1 -0
  175. package/dist/cli/utils/ScenarioMorphAliasRouting.d.ts +14 -0
  176. package/dist/cli/utils/ScenarioMorphAliasRouting.d.ts.map +1 -0
  177. package/dist/cli/utils/ScenarioMorphAliasRouting.js +62 -0
  178. package/dist/cli/utils/ScenarioMorphAliasRouting.js.map +1 -0
  179. package/dist/cli/utils/SeedBootstrapPrecheck.d.ts +20 -0
  180. package/dist/cli/utils/SeedBootstrapPrecheck.d.ts.map +1 -0
  181. package/dist/cli/utils/SeedBootstrapPrecheck.js +133 -0
  182. package/dist/cli/utils/SeedBootstrapPrecheck.js.map +1 -0
  183. package/dist/cli/utils/StructuredLogger.d.ts +11 -0
  184. package/dist/cli/utils/StructuredLogger.d.ts.map +1 -0
  185. package/dist/cli/utils/StructuredLogger.js +53 -0
  186. package/dist/cli/utils/StructuredLogger.js.map +1 -0
  187. package/dist/cli/utils/TemplateEngine.d.ts +30 -0
  188. package/dist/cli/utils/TemplateEngine.d.ts.map +1 -0
  189. package/dist/cli/utils/TemplateEngine.js +165 -0
  190. package/dist/cli/utils/TemplateEngine.js.map +1 -0
  191. package/dist/cli/utils/factories/Factory.d.ts +61 -0
  192. package/dist/cli/utils/factories/Factory.d.ts.map +1 -0
  193. package/dist/cli/utils/factories/Factory.js +140 -0
  194. package/dist/cli/utils/factories/Factory.js.map +1 -0
  195. package/dist/cli/utils/factories/FactoryDisplay.d.ts +6 -0
  196. package/dist/cli/utils/factories/FactoryDisplay.d.ts.map +1 -0
  197. package/dist/cli/utils/factories/FactoryDisplay.js +26 -0
  198. package/dist/cli/utils/factories/FactoryDisplay.js.map +1 -0
  199. package/dist/cli/utils/factories/FactoryGraph.d.ts +6 -0
  200. package/dist/cli/utils/factories/FactoryGraph.d.ts.map +1 -0
  201. package/dist/cli/utils/factories/FactoryGraph.js +72 -0
  202. package/dist/cli/utils/factories/FactoryGraph.js.map +1 -0
  203. package/dist/cli/utils/factories/FactoryLoader.d.ts +16 -0
  204. package/dist/cli/utils/factories/FactoryLoader.d.ts.map +1 -0
  205. package/dist/cli/utils/factories/FactoryLoader.js +35 -0
  206. package/dist/cli/utils/factories/FactoryLoader.js.map +1 -0
  207. package/dist/cli/utils/factories/FactoryRegistry.d.ts +16 -0
  208. package/dist/cli/utils/factories/FactoryRegistry.d.ts.map +1 -0
  209. package/dist/cli/utils/factories/FactoryRegistry.js +87 -0
  210. package/dist/cli/utils/factories/FactoryRegistry.js.map +1 -0
  211. package/dist/cli/utils/fileWriter.d.ts +7 -0
  212. package/dist/cli/utils/fileWriter.d.ts.map +1 -0
  213. package/dist/cli/utils/fileWriter.js +61 -0
  214. package/dist/cli/utils/fileWriter.js.map +1 -0
  215. package/dist/cli/utils/migrations/MigrationLockStrategy.d.ts +21 -0
  216. package/dist/cli/utils/migrations/MigrationLockStrategy.d.ts.map +1 -0
  217. package/dist/cli/utils/migrations/MigrationLockStrategy.js +129 -0
  218. package/dist/cli/utils/migrations/MigrationLockStrategy.js.map +1 -0
  219. package/dist/cli/utils/migrations/MigrationTracker.d.ts +25 -0
  220. package/dist/cli/utils/migrations/MigrationTracker.d.ts.map +1 -0
  221. package/dist/cli/utils/migrations/MigrationTracker.js +279 -0
  222. package/dist/cli/utils/migrations/MigrationTracker.js.map +1 -0
  223. package/dist/cli/utils/migrations/MongoMigrationTracker.d.ts +18 -0
  224. package/dist/cli/utils/migrations/MongoMigrationTracker.d.ts.map +1 -0
  225. package/dist/cli/utils/migrations/MongoMigrationTracker.js +276 -0
  226. package/dist/cli/utils/migrations/MongoMigrationTracker.js.map +1 -0
  227. package/dist/cli/utils/resolveConnectionFlags.d.ts +14 -0
  228. package/dist/cli/utils/resolveConnectionFlags.d.ts.map +1 -0
  229. package/dist/cli/utils/resolveConnectionFlags.js +42 -0
  230. package/dist/cli/utils/resolveConnectionFlags.js.map +1 -0
  231. package/dist/cli/utils/resolveSqlConnectionFlags.d.ts +9 -0
  232. package/dist/cli/utils/resolveSqlConnectionFlags.d.ts.map +1 -0
  233. package/dist/cli/utils/resolveSqlConnectionFlags.js +23 -0
  234. package/dist/cli/utils/resolveSqlConnectionFlags.js.map +1 -0
  235. package/dist/cli/utils/typescript/BaseCommand.d.ts +15 -0
  236. package/dist/cli/utils/typescript/BaseCommand.d.ts.map +1 -0
  237. package/dist/cli/utils/typescript/BaseCommand.js +36 -0
  238. package/dist/cli/utils/typescript/BaseCommand.js.map +1 -0
  239. package/dist/cli/utils/typescript/RuntimeDetector.d.ts +16 -0
  240. package/dist/cli/utils/typescript/RuntimeDetector.d.ts.map +1 -0
  241. package/dist/cli/utils/typescript/RuntimeDetector.js +45 -0
  242. package/dist/cli/utils/typescript/RuntimeDetector.js.map +1 -0
  243. package/dist/cli/utils/typescript/TypeScriptCompiler.d.ts +25 -0
  244. package/dist/cli/utils/typescript/TypeScriptCompiler.d.ts.map +1 -0
  245. package/dist/cli/utils/typescript/TypeScriptCompiler.js +109 -0
  246. package/dist/cli/utils/typescript/TypeScriptCompiler.js.map +1 -0
  247. package/dist/cli/utils/typescript/tsRuntime.d.ts +12 -0
  248. package/dist/cli/utils/typescript/tsRuntime.d.ts.map +1 -0
  249. package/dist/cli/utils/typescript/tsRuntime.js +189 -0
  250. package/dist/cli/utils/typescript/tsRuntime.js.map +1 -0
  251. package/dist/config/database.d.ts +58 -0
  252. package/dist/config/database.d.ts.map +1 -0
  253. package/dist/config/database.js +106 -0
  254. package/dist/config/database.js.map +1 -0
  255. package/dist/config/dbRoleEnv.d.ts +31 -0
  256. package/dist/config/dbRoleEnv.d.ts.map +1 -0
  257. package/dist/config/dbRoleEnv.js +171 -0
  258. package/dist/config/dbRoleEnv.js.map +1 -0
  259. package/dist/core/cache/CacheAnalytics.d.ts +47 -0
  260. package/dist/core/cache/CacheAnalytics.d.ts.map +1 -0
  261. package/dist/core/cache/CacheAnalytics.js +113 -0
  262. package/dist/core/cache/CacheAnalytics.js.map +1 -0
  263. package/dist/core/cache/CacheDriver.d.ts +19 -0
  264. package/dist/core/cache/CacheDriver.d.ts.map +1 -0
  265. package/dist/core/cache/CacheDriver.js +8 -0
  266. package/dist/core/cache/CacheDriver.js.map +1 -0
  267. package/dist/core/cache/CacheFallbackManager.d.ts +35 -0
  268. package/dist/core/cache/CacheFallbackManager.d.ts.map +1 -0
  269. package/dist/core/cache/CacheFallbackManager.js +118 -0
  270. package/dist/core/cache/CacheFallbackManager.js.map +1 -0
  271. package/dist/core/cache/CacheManager.d.ts +11 -0
  272. package/dist/core/cache/CacheManager.d.ts.map +1 -0
  273. package/dist/core/cache/CacheManager.js +27 -0
  274. package/dist/core/cache/CacheManager.js.map +1 -0
  275. package/dist/core/cache/CacheRegistry.d.ts +49 -0
  276. package/dist/core/cache/CacheRegistry.d.ts.map +1 -0
  277. package/dist/core/cache/CacheRegistry.js +117 -0
  278. package/dist/core/cache/CacheRegistry.js.map +1 -0
  279. package/dist/core/cache/drivers/FileCacheDriver.d.ts +11 -0
  280. package/dist/core/cache/drivers/FileCacheDriver.d.ts.map +1 -0
  281. package/dist/core/cache/drivers/FileCacheDriver.js +54 -0
  282. package/dist/core/cache/drivers/FileCacheDriver.js.map +1 -0
  283. package/dist/core/cache/drivers/MemcachedCacheDriver.d.ts +15 -0
  284. package/dist/core/cache/drivers/MemcachedCacheDriver.d.ts.map +1 -0
  285. package/dist/core/cache/drivers/MemcachedCacheDriver.js +60 -0
  286. package/dist/core/cache/drivers/MemcachedCacheDriver.js.map +1 -0
  287. package/dist/core/cache/drivers/MemoryCacheDriver.d.ts +9 -0
  288. package/dist/core/cache/drivers/MemoryCacheDriver.d.ts.map +1 -0
  289. package/dist/core/cache/drivers/MemoryCacheDriver.js +33 -0
  290. package/dist/core/cache/drivers/MemoryCacheDriver.js.map +1 -0
  291. package/dist/core/cache/setupCache.d.ts +2 -0
  292. package/dist/core/cache/setupCache.d.ts.map +1 -0
  293. package/dist/core/cache/setupCache.js +38 -0
  294. package/dist/core/cache/setupCache.js.map +1 -0
  295. package/dist/core/connection/BetterSqliteConnection.d.ts +23 -0
  296. package/dist/core/connection/BetterSqliteConnection.d.ts.map +1 -0
  297. package/dist/core/connection/BetterSqliteConnection.js +33 -0
  298. package/dist/core/connection/BetterSqliteConnection.js.map +1 -0
  299. package/dist/core/connection/ConnectionFactory.d.ts +18 -0
  300. package/dist/core/connection/ConnectionFactory.d.ts.map +1 -0
  301. package/dist/core/connection/ConnectionFactory.js +111 -0
  302. package/dist/core/connection/ConnectionFactory.js.map +1 -0
  303. package/dist/core/connection/DatabaseConnection.d.ts +49 -0
  304. package/dist/core/connection/DatabaseConnection.d.ts.map +1 -0
  305. package/dist/core/connection/DatabaseConnection.js +120 -0
  306. package/dist/core/connection/DatabaseConnection.js.map +1 -0
  307. package/dist/core/connection/DriverAdapter.d.ts +23 -0
  308. package/dist/core/connection/DriverAdapter.d.ts.map +1 -0
  309. package/dist/core/connection/DriverAdapter.js +145 -0
  310. package/dist/core/connection/DriverAdapter.js.map +1 -0
  311. package/dist/core/connection/resolveConnectionName.d.ts +17 -0
  312. package/dist/core/connection/resolveConnectionName.d.ts.map +1 -0
  313. package/dist/core/connection/resolveConnectionName.js +47 -0
  314. package/dist/core/connection/resolveConnectionName.js.map +1 -0
  315. package/dist/core/model/BaseModel.d.ts +247 -0
  316. package/dist/core/model/BaseModel.d.ts.map +1 -0
  317. package/dist/core/model/BaseModel.js +165 -0
  318. package/dist/core/model/BaseModel.js.map +1 -0
  319. package/dist/core/model/BaseModelSafeFinderStatics.d.ts +33 -0
  320. package/dist/core/model/BaseModelSafeFinderStatics.d.ts.map +1 -0
  321. package/dist/core/model/BaseModelSafeFinderStatics.js +87 -0
  322. package/dist/core/model/BaseModelSafeFinderStatics.js.map +1 -0
  323. package/dist/core/model/CoreModel.d.ts +134 -0
  324. package/dist/core/model/CoreModel.d.ts.map +1 -0
  325. package/dist/core/model/CoreModel.js +541 -0
  326. package/dist/core/model/CoreModel.js.map +1 -0
  327. package/dist/core/model/CoreModelPersistenceState.d.ts +36 -0
  328. package/dist/core/model/CoreModelPersistenceState.d.ts.map +1 -0
  329. package/dist/core/model/CoreModelPersistenceState.js +141 -0
  330. package/dist/core/model/CoreModelPersistenceState.js.map +1 -0
  331. package/dist/core/model/CoreModelSafeFinderSupport.d.ts +5 -0
  332. package/dist/core/model/CoreModelSafeFinderSupport.d.ts.map +1 -0
  333. package/dist/core/model/CoreModelSafeFinderSupport.js +15 -0
  334. package/dist/core/model/CoreModelSafeFinderSupport.js.map +1 -0
  335. package/dist/core/model/CoreModelValidationEvents.d.ts +24 -0
  336. package/dist/core/model/CoreModelValidationEvents.d.ts.map +1 -0
  337. package/dist/core/model/CoreModelValidationEvents.js +45 -0
  338. package/dist/core/model/CoreModelValidationEvents.js.map +1 -0
  339. package/dist/core/model/SafeFinder.d.ts +46 -0
  340. package/dist/core/model/SafeFinder.d.ts.map +1 -0
  341. package/dist/core/model/SafeFinder.js +223 -0
  342. package/dist/core/model/SafeFinder.js.map +1 -0
  343. package/dist/core/orm/Relation.d.ts +47 -0
  344. package/dist/core/orm/Relation.d.ts.map +1 -0
  345. package/dist/core/orm/Relation.js +62 -0
  346. package/dist/core/orm/Relation.js.map +1 -0
  347. package/dist/core/orm/mixins/CastsMixin.d.ts +18 -0
  348. package/dist/core/orm/mixins/CastsMixin.d.ts.map +1 -0
  349. package/dist/core/orm/mixins/CastsMixin.js +125 -0
  350. package/dist/core/orm/mixins/CastsMixin.js.map +1 -0
  351. package/dist/core/orm/mixins/EagerLoadingMixin.d.ts +19 -0
  352. package/dist/core/orm/mixins/EagerLoadingMixin.d.ts.map +1 -0
  353. package/dist/core/orm/mixins/EagerLoadingMixin.js +137 -0
  354. package/dist/core/orm/mixins/EagerLoadingMixin.js.map +1 -0
  355. package/dist/core/orm/mixins/HooksMixin.d.ts +16 -0
  356. package/dist/core/orm/mixins/HooksMixin.d.ts.map +1 -0
  357. package/dist/core/orm/mixins/HooksMixin.js +95 -0
  358. package/dist/core/orm/mixins/HooksMixin.js.map +1 -0
  359. package/dist/core/orm/mixins/MorphRegistry.d.ts +47 -0
  360. package/dist/core/orm/mixins/MorphRegistry.d.ts.map +1 -0
  361. package/dist/core/orm/mixins/MorphRegistry.js +67 -0
  362. package/dist/core/orm/mixins/MorphRegistry.js.map +1 -0
  363. package/dist/core/orm/mixins/MorphableMixin.d.ts +29 -0
  364. package/dist/core/orm/mixins/MorphableMixin.d.ts.map +1 -0
  365. package/dist/core/orm/mixins/MorphableMixin.js +93 -0
  366. package/dist/core/orm/mixins/MorphableMixin.js.map +1 -0
  367. package/dist/core/orm/mixins/PivotHelperMixin.d.ts +26 -0
  368. package/dist/core/orm/mixins/PivotHelperMixin.d.ts.map +1 -0
  369. package/dist/core/orm/mixins/PivotHelperMixin.js +102 -0
  370. package/dist/core/orm/mixins/PivotHelperMixin.js.map +1 -0
  371. package/dist/core/orm/mixins/QueryCacheMixin.d.ts +23 -0
  372. package/dist/core/orm/mixins/QueryCacheMixin.d.ts.map +1 -0
  373. package/dist/core/orm/mixins/QueryCacheMixin.js +172 -0
  374. package/dist/core/orm/mixins/QueryCacheMixin.js.map +1 -0
  375. package/dist/core/orm/mixins/ScopeMixin.d.ts +20 -0
  376. package/dist/core/orm/mixins/ScopeMixin.d.ts.map +1 -0
  377. package/dist/core/orm/mixins/ScopeMixin.js +72 -0
  378. package/dist/core/orm/mixins/ScopeMixin.js.map +1 -0
  379. package/dist/core/orm/mixins/SerializeMixin.d.ts +44 -0
  380. package/dist/core/orm/mixins/SerializeMixin.d.ts.map +1 -0
  381. package/dist/core/orm/mixins/SerializeMixin.js +80 -0
  382. package/dist/core/orm/mixins/SerializeMixin.js.map +1 -0
  383. package/dist/core/orm/mixins/SoftDeletesMixin.d.ts +22 -0
  384. package/dist/core/orm/mixins/SoftDeletesMixin.d.ts.map +1 -0
  385. package/dist/core/orm/mixins/SoftDeletesMixin.js +146 -0
  386. package/dist/core/orm/mixins/SoftDeletesMixin.js.map +1 -0
  387. package/dist/core/orm/mixins/utils/BaseMethodResolver.d.ts +8 -0
  388. package/dist/core/orm/mixins/utils/BaseMethodResolver.d.ts.map +1 -0
  389. package/dist/core/orm/mixins/utils/BaseMethodResolver.js +26 -0
  390. package/dist/core/orm/mixins/utils/BaseMethodResolver.js.map +1 -0
  391. package/dist/core/orm/mixins/utils/HookStore.d.ts +26 -0
  392. package/dist/core/orm/mixins/utils/HookStore.d.ts.map +1 -0
  393. package/dist/core/orm/mixins/utils/HookStore.js +78 -0
  394. package/dist/core/orm/mixins/utils/HookStore.js.map +1 -0
  395. package/dist/core/orm/mixins/utils/ModelRegistry.d.ts +33 -0
  396. package/dist/core/orm/mixins/utils/ModelRegistry.d.ts.map +1 -0
  397. package/dist/core/orm/mixins/utils/ModelRegistry.js +87 -0
  398. package/dist/core/orm/mixins/utils/ModelRegistry.js.map +1 -0
  399. package/dist/core/orm/mixins/utils/modelRegistration.d.ts +9 -0
  400. package/dist/core/orm/mixins/utils/modelRegistration.d.ts.map +1 -0
  401. package/dist/core/orm/mixins/utils/modelRegistration.js +26 -0
  402. package/dist/core/orm/mixins/utils/modelRegistration.js.map +1 -0
  403. package/dist/core/orm/relations/BelongsTo.d.ts +6 -0
  404. package/dist/core/orm/relations/BelongsTo.d.ts.map +1 -0
  405. package/dist/core/orm/relations/BelongsTo.js +70 -0
  406. package/dist/core/orm/relations/BelongsTo.js.map +1 -0
  407. package/dist/core/orm/relations/BelongsToMany.d.ts +14 -0
  408. package/dist/core/orm/relations/BelongsToMany.d.ts.map +1 -0
  409. package/dist/core/orm/relations/BelongsToMany.js +245 -0
  410. package/dist/core/orm/relations/BelongsToMany.js.map +1 -0
  411. package/dist/core/orm/relations/HasMany.d.ts +6 -0
  412. package/dist/core/orm/relations/HasMany.d.ts.map +1 -0
  413. package/dist/core/orm/relations/HasMany.js +75 -0
  414. package/dist/core/orm/relations/HasMany.js.map +1 -0
  415. package/dist/core/orm/relations/HasOne.d.ts +6 -0
  416. package/dist/core/orm/relations/HasOne.d.ts.map +1 -0
  417. package/dist/core/orm/relations/HasOne.js +71 -0
  418. package/dist/core/orm/relations/HasOne.js.map +1 -0
  419. package/dist/core/orm/relations/MorphMany.d.ts +9 -0
  420. package/dist/core/orm/relations/MorphMany.d.ts.map +1 -0
  421. package/dist/core/orm/relations/MorphMany.js +107 -0
  422. package/dist/core/orm/relations/MorphMany.js.map +1 -0
  423. package/dist/core/orm/relations/MorphOne.d.ts +9 -0
  424. package/dist/core/orm/relations/MorphOne.d.ts.map +1 -0
  425. package/dist/core/orm/relations/MorphOne.js +101 -0
  426. package/dist/core/orm/relations/MorphOne.js.map +1 -0
  427. package/dist/core/orm/relations/MorphTo.d.ts +9 -0
  428. package/dist/core/orm/relations/MorphTo.d.ts.map +1 -0
  429. package/dist/core/orm/relations/MorphTo.js +85 -0
  430. package/dist/core/orm/relations/MorphTo.js.map +1 -0
  431. package/dist/core/schema/SQLDialect.d.ts +22 -0
  432. package/dist/core/schema/SQLDialect.d.ts.map +1 -0
  433. package/dist/core/schema/SQLDialect.js +38 -0
  434. package/dist/core/schema/SQLDialect.js.map +1 -0
  435. package/dist/core/schema/SchemaBlueprint.d.ts +61 -0
  436. package/dist/core/schema/SchemaBlueprint.d.ts.map +1 -0
  437. package/dist/core/schema/SchemaBlueprint.js +62 -0
  438. package/dist/core/schema/SchemaBlueprint.js.map +1 -0
  439. package/dist/core/schema/SchemaBuilder.d.ts +29 -0
  440. package/dist/core/schema/SchemaBuilder.d.ts.map +1 -0
  441. package/dist/core/schema/SchemaBuilder.js +661 -0
  442. package/dist/core/schema/SchemaBuilder.js.map +1 -0
  443. package/dist/core/schema/SchemaValidator.d.ts +23 -0
  444. package/dist/core/schema/SchemaValidator.d.ts.map +1 -0
  445. package/dist/core/schema/SchemaValidator.js +75 -0
  446. package/dist/core/schema/SchemaValidator.js.map +1 -0
  447. package/dist/core/security/AbstractSecurity.d.ts +24 -0
  448. package/dist/core/security/AbstractSecurity.d.ts.map +1 -0
  449. package/dist/core/security/AbstractSecurity.js +58 -0
  450. package/dist/core/security/AbstractSecurity.js.map +1 -0
  451. package/dist/core/security/EnvKeySecurity.d.ts +11 -0
  452. package/dist/core/security/EnvKeySecurity.d.ts.map +1 -0
  453. package/dist/core/security/EnvKeySecurity.js +46 -0
  454. package/dist/core/security/EnvKeySecurity.js.map +1 -0
  455. package/dist/core/security/NoSecurity.d.ts +10 -0
  456. package/dist/core/security/NoSecurity.d.ts.map +1 -0
  457. package/dist/core/security/NoSecurity.js +18 -0
  458. package/dist/core/security/NoSecurity.js.map +1 -0
  459. package/dist/core/security/SecretRedactor.d.ts +4 -0
  460. package/dist/core/security/SecretRedactor.d.ts.map +1 -0
  461. package/dist/core/security/SecretRedactor.js +60 -0
  462. package/dist/core/security/SecretRedactor.js.map +1 -0
  463. package/dist/core/security/SecurityContract.d.ts +13 -0
  464. package/dist/core/security/SecurityContract.d.ts.map +1 -0
  465. package/dist/core/security/SecurityContract.js +3 -0
  466. package/dist/core/security/SecurityContract.js.map +1 -0
  467. package/dist/core/security/SecurityFactory.d.ts +9 -0
  468. package/dist/core/security/SecurityFactory.d.ts.map +1 -0
  469. package/dist/core/security/SecurityFactory.js +29 -0
  470. package/dist/core/security/SecurityFactory.js.map +1 -0
  471. package/dist/core/security/index.d.ts +6 -0
  472. package/dist/core/security/index.d.ts.map +1 -0
  473. package/dist/core/security/index.js +22 -0
  474. package/dist/core/security/index.js.map +1 -0
  475. package/dist/index.d.ts +16 -0
  476. package/dist/index.d.ts.map +1 -0
  477. package/dist/index.js +40 -0
  478. package/dist/index.js.map +1 -0
  479. package/package.json +104 -0
  480. package/src/cli/templates/controller.tpl +80 -0
  481. package/src/cli/templates/factory.tpl +14 -0
  482. package/src/cli/templates/migration.tpl +36 -0
  483. package/src/cli/templates/model-registry.tpl +16 -0
  484. package/src/cli/templates/model.tpl +95 -0
  485. package/src/cli/templates/pivot-factory.tpl +85 -0
  486. package/src/cli/templates/seed.tpl +20 -0
  487. package/src/cli/templates/service.tpl +40 -0
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Relation = void 0;
4
+ /**
5
+ * ู‹ฺบยงยฉ Base Relation
6
+ * Handles relation definition + auto-detected name from caller method.
7
+ */
8
+ class Relation {
9
+ constructor(relatedModel, foreignKey, localKey, name) {
10
+ this.relatedModel = relatedModel;
11
+ this.foreignKey = foreignKey;
12
+ this.localKey = localKey;
13
+ this.name = name ?? this.detectRelationName();
14
+ }
15
+ /**
16
+ * ู‹ฺบยงย  Auto-detect relation name (e.g., "posts" from user.posts())
17
+ */
18
+ detectRelationName() {
19
+ try {
20
+ const err = new Error();
21
+ const stack = err.stack?.split("\n") || [];
22
+ const callerLine = stack.find((line) => line.includes("."));
23
+ if (!callerLine)
24
+ return undefined;
25
+ const match = callerLine.match(/\.([a-zA-Z0-9_]+)\s*\(/);
26
+ return match ? match[1] : undefined;
27
+ }
28
+ catch {
29
+ return undefined;
30
+ }
31
+ }
32
+ isMongoDatabase(db) {
33
+ return !!db && typeof db.collection === "function";
34
+ }
35
+ buildMongoEqualityFilter(field, value) {
36
+ if (field === "id") {
37
+ return { $or: [{ id: value }, { _id: value }] };
38
+ }
39
+ if (field === "_id") {
40
+ return { $or: [{ _id: value }, { id: value }] };
41
+ }
42
+ return { [field]: value };
43
+ }
44
+ buildMongoInFilter(field, values) {
45
+ if (field === "id") {
46
+ return { $or: [{ id: { $in: values } }, { _id: { $in: values } }] };
47
+ }
48
+ if (field === "_id") {
49
+ return { $or: [{ _id: { $in: values } }, { id: { $in: values } }] };
50
+ }
51
+ return { [field]: { $in: values } };
52
+ }
53
+ getMongoComparableValues(record, field) {
54
+ if (field === "id" || field === "_id") {
55
+ return [record.id, record._id].filter((value) => value !== undefined);
56
+ }
57
+ const value = record[field];
58
+ return value === undefined ? [] : [value];
59
+ }
60
+ }
61
+ exports.Relation = Relation;
62
+ //# sourceMappingURL=Relation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Relation.js","sourceRoot":"","sources":["../../../src/core/orm/Relation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * ๐ŸŽญ CastsMixin
3
+ * Adds attribute type casting (dates, numbers, booleans, JSON)
4
+ * โœ… No abstract overload errors
5
+ * โœ… Clean ESLint/TS-compatible super calls
6
+ */
7
+ export interface Castable {
8
+ find(id: number | string, pk?: string): Promise<this | null>;
9
+ all(): Promise<this[]>;
10
+ create(data: Record<string, unknown>): Promise<this>;
11
+ update(data: Record<string, unknown>, pk?: string): this;
12
+ update(id: number | string, data: Record<string, unknown>, pk?: string): Promise<void>;
13
+ }
14
+ /** Generic constructor helper */
15
+ type Constructor<T = object> = abstract new (...args: any[]) => T;
16
+ export declare function CastsMixin<TBase extends Constructor>(Base: TBase): TBase & (abstract new (...args: any[]) => Castable);
17
+ export {};
18
+ //# sourceMappingURL=CastsMixin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CastsMixin.d.ts","sourceRoot":"","sources":["../../../../src/core/orm/mixins/CastsMixin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAC7D,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACvB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxF;AAED,iCAAiC;AACjC,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAElE,wBAAgB,UAAU,CAAC,KAAK,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK,GAmI5B,KAAK,GAAG,CAAC,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,QAAQ,CAAC,CACvF"}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ /**
3
+ * ๐ŸŽญ CastsMixin
4
+ * Adds attribute type casting (dates, numbers, booleans, JSON)
5
+ * โœ… No abstract overload errors
6
+ * โœ… Clean ESLint/TS-compatible super calls
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CastsMixin = CastsMixin;
10
+ const BaseMethodResolver_1 = require("./utils/BaseMethodResolver");
11
+ function CastsMixin(Base) {
12
+ const resolveBaseMethod = (0, BaseMethodResolver_1.createBaseMethodResolver)(Base);
13
+ class CastableModel extends Base {
14
+ constructor(...args) {
15
+ super(...args);
16
+ // โš™๏ธ Define attribute casting configuration
17
+ this.casts = {};
18
+ }
19
+ /**
20
+ * โš™๏ธ Convert a single attribute value based on type.
21
+ */
22
+ castValue(type, value) {
23
+ if (value === null || value === undefined)
24
+ return value;
25
+ switch (type) {
26
+ case "number":
27
+ return Number(value);
28
+ case "boolean":
29
+ if (typeof value === "string")
30
+ return value === "true" || value === "1";
31
+ if (typeof value === "number")
32
+ return value === 1;
33
+ return Boolean(value);
34
+ case "date":
35
+ return new Date(value);
36
+ case "json":
37
+ try {
38
+ return typeof value === "string" ? JSON.parse(value) : value;
39
+ }
40
+ catch {
41
+ return value;
42
+ }
43
+ default:
44
+ return value;
45
+ }
46
+ }
47
+ /**
48
+ * ๐Ÿงฉ Cast all attributes of a record.
49
+ * Ensures immutability (does not mutate original).
50
+ */
51
+ castRecord(record) {
52
+ const result = { ...record };
53
+ for (const [key, type] of Object.entries(this.casts)) {
54
+ if (key in result) {
55
+ result[key] = this.castValue(type, result[key]);
56
+ }
57
+ }
58
+ return result;
59
+ }
60
+ /**
61
+ * ๐Ÿ” Cast single record after find().
62
+ */
63
+ async find(id, pk = "id") {
64
+ const baseFind = resolveBaseMethod(this, "find");
65
+ if (typeof baseFind !== "function") {
66
+ throw new Error("Base 'find' method not found in CastsMixin chain.");
67
+ }
68
+ const record = (await baseFind(id, pk));
69
+ if (!record)
70
+ return null;
71
+ const casted = this.castRecord(record);
72
+ Object.assign(record, casted);
73
+ return record;
74
+ }
75
+ /**
76
+ * ๐Ÿ“‹ Cast all records returned by all().
77
+ */
78
+ async all() {
79
+ const baseAll = resolveBaseMethod(this, "all");
80
+ if (typeof baseAll !== "function") {
81
+ throw new Error("Base 'all' method not found in CastsMixin chain.");
82
+ }
83
+ const records = (await baseAll());
84
+ return records.map((r) => {
85
+ const casted = this.castRecord(r);
86
+ Object.assign(r, casted);
87
+ return r;
88
+ });
89
+ }
90
+ /**
91
+ * ๐Ÿ” Optional: Revert data before saving (future DB driver use)
92
+ */
93
+ uncastData(data) {
94
+ return { ...data };
95
+ }
96
+ /**
97
+ * โœ๏ธ Dummy methods for interface satisfaction (not abstract to avoid overload conflict)
98
+ */
99
+ async create(data) {
100
+ const baseCreate = resolveBaseMethod(this, "create");
101
+ if (typeof baseCreate !== "function") {
102
+ throw new Error("Base 'create' method not found in CastsMixin chain.");
103
+ }
104
+ const record = (await baseCreate(data));
105
+ if (!record)
106
+ return record;
107
+ const casted = this.castRecord(record);
108
+ Object.assign(record, casted);
109
+ return record;
110
+ }
111
+ update(idOrData, dataOrPk, pk = "id") {
112
+ const baseUpdate = resolveBaseMethod(this, "update");
113
+ if (typeof baseUpdate !== "function") {
114
+ throw new Error("Base 'update' method not found in CastsMixin chain.");
115
+ }
116
+ if (typeof idOrData === "object" && idOrData !== null && !Array.isArray(idOrData)) {
117
+ return baseUpdate(idOrData, dataOrPk);
118
+ }
119
+ return baseUpdate(idOrData, dataOrPk, pk);
120
+ }
121
+ }
122
+ // ๐Ÿ‘‡ Return merged type for proper inference
123
+ return CastableModel;
124
+ }
125
+ //# sourceMappingURL=CastsMixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CastsMixin.js","sourceRoot":"","sources":["../../../../src/core/orm/mixins/CastsMixin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ๐Ÿง  EagerLoadingMixin
3
+ * Adds support for eager loading relations (like Laravel's with()).
4
+ * โœ… Deterministic, type-safe, and recursion-proof by searching from the captured Base.prototype.
5
+ */
6
+ export interface EagerLoadable {
7
+ find(id: number | string, pk?: string): Promise<this | null>;
8
+ all(): Promise<this[]>;
9
+ getRelation?(name: string): RelationDefinition<this>;
10
+ }
11
+ export interface RelationDefinition<TParent> {
12
+ name?: string;
13
+ getResults(parent: TParent): Promise<unknown>;
14
+ match(records: TParent[]): Promise<void>;
15
+ }
16
+ type Constructor<T = object> = abstract new (...args: any[]) => T;
17
+ export declare function EagerLoadingMixin<TBase extends Constructor>(Base: TBase): TBase & (abstract new (...args: unknown[]) => EagerLoadable);
18
+ export {};
19
+ //# sourceMappingURL=EagerLoadingMixin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EagerLoadingMixin.d.ts","sourceRoot":"","sources":["../../../../src/core/orm/mixins/EagerLoadingMixin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAC7D,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACvB,WAAW,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,kBAAkB,CAAC,OAAO;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAElE,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK,GAgK9B,KAAK,GAAG,CAAC,QAAQ,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,aAAa,CAAC,CACrG"}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ /**
3
+ * ๐Ÿง  EagerLoadingMixin
4
+ * Adds support for eager loading relations (like Laravel's with()).
5
+ * โœ… Deterministic, type-safe, and recursion-proof by searching from the captured Base.prototype.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.EagerLoadingMixin = EagerLoadingMixin;
9
+ function EagerLoadingMixin(Base) {
10
+ // Capture the prototype of the base class *at definition time*.
11
+ const basePrototype = Base.prototype;
12
+ class EagerLoadableModel extends Base {
13
+ constructor(...args) {
14
+ super(...args);
15
+ this.eagerRelations = [];
16
+ }
17
+ with(...relations) {
18
+ this.eagerRelations.push(...relations);
19
+ return this;
20
+ }
21
+ async load(...relations) {
22
+ const rels = relations.length ? relations : this.eagerRelations;
23
+ for (const relName of rels) {
24
+ const relation = this.getRelationStrict(relName);
25
+ const result = await relation.getResults(this);
26
+ this[relation.name ?? relName] = result;
27
+ }
28
+ return this;
29
+ }
30
+ getRelationStrict(name) {
31
+ const relationFn = this[name];
32
+ if (typeof relationFn !== "function") {
33
+ throw new Error(`Relation '${name}' is not defined on ${this.constructor.name}`);
34
+ }
35
+ const relation = relationFn.call(this);
36
+ relation.name = name;
37
+ return relation;
38
+ }
39
+ async eagerLoadRelations(records) {
40
+ if (!this.eagerRelations.length || records.length === 0)
41
+ return records;
42
+ const loadedTopLevels = new Set();
43
+ for (const relName of this.eagerRelations) {
44
+ const [topLevel, ...nested] = relName.split(".");
45
+ const relation = this.getRelationStrict(topLevel);
46
+ if (nested.length > 0) {
47
+ await this.loadNestedRelations(records, relation, nested.join("."), loadedTopLevels.has(topLevel));
48
+ loadedTopLevels.add(topLevel);
49
+ }
50
+ else {
51
+ await relation.match(records);
52
+ loadedTopLevels.add(topLevel);
53
+ }
54
+ }
55
+ return records;
56
+ }
57
+ async loadNestedRelations(records, relation, nestedPath, skipCurrentMatch = false) {
58
+ if (!skipCurrentMatch) {
59
+ await relation.match(records);
60
+ }
61
+ if (!nestedPath) {
62
+ return;
63
+ }
64
+ const allRelated = [];
65
+ for (const parent of records) {
66
+ const related = parent[relation.name ?? "relation"];
67
+ if (Array.isArray(related)) {
68
+ allRelated.push(...related);
69
+ }
70
+ else if (related && typeof related === "object") {
71
+ allRelated.push(related);
72
+ }
73
+ }
74
+ if (allRelated.length > 0) {
75
+ const [next, ...rest] = nestedPath.split(".");
76
+ const firstRelated = allRelated[0];
77
+ if (typeof firstRelated.getRelation === "function") {
78
+ const nextRelation = firstRelated.getRelation(next);
79
+ if (nextRelation) {
80
+ await this.loadNestedRelations(allRelated, nextRelation, rest.join("."));
81
+ }
82
+ }
83
+ }
84
+ }
85
+ /**
86
+ * Walk prototypes starting from captured `basePrototype`.
87
+ * This guarantees we only inspect layers *below* this mixin.
88
+ */
89
+ getBaseMethod(method) {
90
+ let proto = basePrototype;
91
+ const visited = new WeakSet();
92
+ while (proto && typeof proto === "object") {
93
+ if (visited.has(proto))
94
+ break;
95
+ visited.add(proto);
96
+ const fn = proto[method];
97
+ if (typeof fn === "function") {
98
+ // bind to current instance so `this` inside base method still works
99
+ return fn.bind(this);
100
+ }
101
+ proto = Object.getPrototypeOf(proto);
102
+ }
103
+ // Test-mode fallback: return an empty-array implementation when no DB layer is present
104
+ if (process.env.NODE_ENV === "test") {
105
+ if (method === "all") {
106
+ return (async () => []);
107
+ }
108
+ if (method === "find") {
109
+ return (async () => null);
110
+ }
111
+ }
112
+ return null;
113
+ }
114
+ async all() {
115
+ const baseAll = this.getBaseMethod("all");
116
+ if (!baseAll)
117
+ throw new Error("Base 'all' method not found in EagerLoadingMixin chain.");
118
+ const records = (await baseAll());
119
+ return this.eagerLoadRelations(records);
120
+ }
121
+ async find(id, pk = "id") {
122
+ const baseFind = this.getBaseMethod("find");
123
+ if (!baseFind)
124
+ throw new Error("Base 'find' method not found in EagerLoadingMixin chain.");
125
+ const record = (await baseFind(id, pk));
126
+ if (!record)
127
+ return null;
128
+ await this.eagerLoadRelations([record]);
129
+ return record;
130
+ }
131
+ getRelation(name) {
132
+ return this.getRelationStrict(name);
133
+ }
134
+ }
135
+ return EagerLoadableModel;
136
+ }
137
+ //# sourceMappingURL=EagerLoadingMixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EagerLoadingMixin.js","sourceRoot":"","sources":["../../../../src/core/orm/mixins/EagerLoadingMixin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export type LifecycleEvent = "creating" | "created" | "updating" | "updated" | "deleting" | "deleted";
2
+ export type HookHandler<TPayload> = (payload: TPayload) => Promise<void> | void;
3
+ /**
4
+ * Base interface for hookable models.
5
+ */
6
+ export interface HookableModel {
7
+ create(data: Record<string, unknown>): Promise<unknown>;
8
+ update(data: Record<string, unknown>, pk?: string): unknown;
9
+ update(id: number | string, data: Record<string, unknown>, pk?: string): Promise<void>;
10
+ delete(): Promise<void>;
11
+ delete(id: number | string, pk?: string): Promise<void>;
12
+ }
13
+ type Constructor<T = object> = abstract new (...args: any[]) => T;
14
+ export declare function HooksMixin<TBase extends Constructor>(Base: TBase): TBase & (abstract new (...args: any[]) => HookableModel);
15
+ export {};
16
+ //# sourceMappingURL=HooksMixin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HooksMixin.d.ts","sourceRoot":"","sources":["../../../../src/core/orm/mixins/HooksMixin.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GACtB,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,MAAM,WAAW,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvF,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAED,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAElE,wBAAgB,UAAU,CAAC,KAAK,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK,GAyHjC,KAAK,GAAG,CAAC,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,aAAa,CAAC,CACvF"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HooksMixin = HooksMixin;
4
+ const BaseMethodResolver_1 = require("./utils/BaseMethodResolver");
5
+ const HookStore_1 = require("./utils/HookStore");
6
+ const ModelRegistry_1 = require("./utils/ModelRegistry");
7
+ function HooksMixin(Base) {
8
+ const resolveBaseMethod = (0, BaseMethodResolver_1.createBaseMethodResolver)(Base);
9
+ const deprecationWarnings = new WeakMap();
10
+ function warnDeprecatedApi(modelCtor, api) {
11
+ const seen = deprecationWarnings.get(modelCtor) ?? new Set();
12
+ if (seen.has(api))
13
+ return;
14
+ const modelName = modelCtor.name || "AnonymousModel";
15
+ console.warn(`[DEPRECATION] ${modelName}.${api}() is deprecated. Prefer static modelEvents and registerModels([...]).`);
16
+ seen.add(api);
17
+ deprecationWarnings.set(modelCtor, seen);
18
+ }
19
+ class Hookable extends Base {
20
+ constructor(...args) {
21
+ super(...args);
22
+ }
23
+ /**
24
+ * Register a class-level lifecycle hook.
25
+ * Model must be granted via ModelRegistry before registration.
26
+ */
27
+ static on(event, callback) {
28
+ const modelCtor = this;
29
+ warnDeprecatedApi(modelCtor, "on");
30
+ HookStore_1.HookStore.add(modelCtor, event, callback);
31
+ }
32
+ /**
33
+ * Internal helper to trigger all hooks for an event.
34
+ */
35
+ async fire(event, payload) {
36
+ const hooksDisabled = process.env.ELOQUENT_DISABLE_MODEL_HOOKS;
37
+ if (hooksDisabled === "true" || hooksDisabled === "1") {
38
+ return;
39
+ }
40
+ const modelCtor = this.constructor;
41
+ ModelRegistry_1.ModelRegistry.ensureGranted(modelCtor, "lifecycle");
42
+ const listeners = HookStore_1.HookStore.get(modelCtor, event);
43
+ for (const cb of listeners) {
44
+ await cb(payload);
45
+ }
46
+ }
47
+ async create(data) {
48
+ const baseCreate = resolveBaseMethod(this, "create");
49
+ if (typeof baseCreate !== "function") {
50
+ throw new Error("Base 'create' method not found for HooksMixin.");
51
+ }
52
+ await this.fire("creating", data);
53
+ const record = await baseCreate(data);
54
+ await this.fire("created", record);
55
+ return record;
56
+ }
57
+ update(idOrData, dataOrPk, pk = "id") {
58
+ const baseUpdate = resolveBaseMethod(this, "update");
59
+ if (typeof baseUpdate !== "function") {
60
+ throw new Error("Base 'update' method not found for HooksMixin.");
61
+ }
62
+ if (typeof idOrData === "object" && idOrData !== null && !Array.isArray(idOrData)) {
63
+ return baseUpdate(idOrData, dataOrPk);
64
+ }
65
+ const id = idOrData;
66
+ const data = dataOrPk;
67
+ return this.performHookedPersistedUpdate(baseUpdate, id, data, pk);
68
+ }
69
+ async performHookedPersistedUpdate(baseUpdate, id, data, pk) {
70
+ await this.fire("updating", { id, data });
71
+ await baseUpdate(id, data, pk);
72
+ await this.fire("updated", { id, data });
73
+ }
74
+ async delete(id, pk = "id") {
75
+ const baseDelete = resolveBaseMethod(this, "delete");
76
+ if (typeof baseDelete !== "function") {
77
+ throw new Error("Base 'delete' method not found for HooksMixin.");
78
+ }
79
+ await this.fire("deleting", { id });
80
+ await baseDelete(id, pk);
81
+ await this.fire("deleted", { id });
82
+ }
83
+ /**
84
+ * Register an instance-level hook on the model constructor bucket.
85
+ * Model must be granted via ModelRegistry before registration.
86
+ */
87
+ registerHook(event, callback) {
88
+ const modelCtor = this.constructor;
89
+ warnDeprecatedApi(modelCtor, "registerHook");
90
+ HookStore_1.HookStore.add(modelCtor, event, callback);
91
+ }
92
+ }
93
+ return Hookable;
94
+ }
95
+ //# sourceMappingURL=HooksMixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HooksMixin.js","sourceRoot":"","sources":["../../../../src/core/orm/mixins/HooksMixin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * ๐Ÿงฉ MorphRegistry
3
+ * Central lookup for morphable model types.
4
+ * Mirrors Laravel's Relation::morphMap() behavior.
5
+ * โœ… Fully typed, safe for ES modules and mixins.
6
+ */
7
+ export interface MorphableConstructor<T> extends Function {
8
+ new (...args: any[]): T;
9
+ name: string;
10
+ }
11
+ /**
12
+ * ๐Ÿง  MorphRegistry โ€” global polymorphic type registry
13
+ * Enables morphTo, morphOne, morphMany relationships.
14
+ */
15
+ export declare class MorphRegistry {
16
+ private static registry;
17
+ /**
18
+ * ๐Ÿ”— Register a single model alias (like Relation::morphMap entry)
19
+ */
20
+ static register<T>(alias: string, modelClass: MorphableConstructor<T>): void;
21
+ /**
22
+ * ๐Ÿ”— Register multiple aliases at once (Laravel-like syntax)
23
+ * Example: MorphRegistry.registerMap({ posts: Post, comments: Comment })
24
+ */
25
+ static registerMap(map: Record<string, MorphableConstructor<unknown>>): void;
26
+ /**
27
+ * ๐Ÿงญ Resolve a morph type name into a model constructor
28
+ */
29
+ static resolve<T>(type: string): MorphableConstructor<T>;
30
+ /**
31
+ * ๐Ÿชž Alias for resolve() โ€” Laravel-like syntax
32
+ */
33
+ static getMorphedModel<T>(alias: string): MorphableConstructor<T>;
34
+ /**
35
+ * ๐Ÿงพ Return current morph map for debugging/logging
36
+ */
37
+ static list(): Record<string, string>;
38
+ /**
39
+ * โœ… Check if a morph alias is already registered
40
+ */
41
+ static has(alias: string): boolean;
42
+ /**
43
+ * โ™ป๏ธ Clear all registered morphs (for testing or reloading)
44
+ */
45
+ static clear(): void;
46
+ }
47
+ //# sourceMappingURL=MorphRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MorphRegistry.d.ts","sourceRoot":"","sources":["../../../../src/core/orm/mixins/MorphRegistry.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,MAAM,WAAW,oBAAoB,CAAC,CAAC,CAAE,SAAQ,QAAQ;IACvD,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoD;IAE3E;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAK5E;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI;IAM5E;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAAC,CAAC,CAAC;IAOxD;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,oBAAoB,CAAC,CAAC,CAAC;IAIjE;;OAEG;IACH,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQrC;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,IAAI;CAGrB"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ // src/orm/mixins/MorphRegistry.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.MorphRegistry = void 0;
5
+ /**
6
+ * ๐Ÿง  MorphRegistry โ€” global polymorphic type registry
7
+ * Enables morphTo, morphOne, morphMany relationships.
8
+ */
9
+ class MorphRegistry {
10
+ /**
11
+ * ๐Ÿ”— Register a single model alias (like Relation::morphMap entry)
12
+ */
13
+ static register(alias, modelClass) {
14
+ if (!alias || !modelClass)
15
+ throw new Error("โŒ Invalid morph registration.");
16
+ this.registry.set(alias, modelClass);
17
+ }
18
+ /**
19
+ * ๐Ÿ”— Register multiple aliases at once (Laravel-like syntax)
20
+ * Example: MorphRegistry.registerMap({ posts: Post, comments: Comment })
21
+ */
22
+ static registerMap(map) {
23
+ for (const [alias, modelClass] of Object.entries(map)) {
24
+ this.register(alias, modelClass);
25
+ }
26
+ }
27
+ /**
28
+ * ๐Ÿงญ Resolve a morph type name into a model constructor
29
+ */
30
+ static resolve(type) {
31
+ const model = this.registry.get(type);
32
+ if (model)
33
+ return model;
34
+ throw new Error(`โŒ Morph type '${type}' not found in MorphRegistry.`);
35
+ }
36
+ /**
37
+ * ๐Ÿชž Alias for resolve() โ€” Laravel-like syntax
38
+ */
39
+ static getMorphedModel(alias) {
40
+ return this.resolve(alias);
41
+ }
42
+ /**
43
+ * ๐Ÿงพ Return current morph map for debugging/logging
44
+ */
45
+ static list() {
46
+ const entries = {};
47
+ for (const [alias, model] of this.registry.entries()) {
48
+ entries[alias] = model.name;
49
+ }
50
+ return entries;
51
+ }
52
+ /**
53
+ * โœ… Check if a morph alias is already registered
54
+ */
55
+ static has(alias) {
56
+ return this.registry.has(alias);
57
+ }
58
+ /**
59
+ * โ™ป๏ธ Clear all registered morphs (for testing or reloading)
60
+ */
61
+ static clear() {
62
+ this.registry.clear();
63
+ }
64
+ }
65
+ exports.MorphRegistry = MorphRegistry;
66
+ MorphRegistry.registry = new Map();
67
+ //# sourceMappingURL=MorphRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MorphRegistry.js","sourceRoot":"","sources":["../../../../src/core/orm/mixins/MorphRegistry.ts"],"names":[],"mappings":";AAAA,kCAAkC;;;AAclC;;;GAGG;AACH,MAAa,aAAa;IAGxB;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAI,KAAa,EAAE,UAAmC;QACnE,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,GAAkD;QACnE,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,CAAI,IAAY;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,KAAK;YAAE,OAAO,KAAgC,CAAC;QAEnD,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,+BAA+B,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAI,KAAa;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI;QACT,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;QAC9B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK;QACV,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;;AA7DH,sCA8DC;AA7DgB,sBAAQ,GAAG,IAAI,GAAG,EAAyC,CAAC"}