@zintrust/core 0.1.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 (494) hide show
  1. package/bin/z.d.ts +7 -0
  2. package/bin/z.d.ts.map +1 -0
  3. package/bin/z.js +6 -0
  4. package/bin/zin.d.ts +7 -0
  5. package/bin/zin.d.ts.map +1 -0
  6. package/bin/zin.js +6 -0
  7. package/bin/zintrust-microservices.d.ts +7 -0
  8. package/bin/zintrust-microservices.d.ts.map +1 -0
  9. package/bin/zintrust-microservices.js +165 -0
  10. package/bin/zintrust.d.ts +9 -0
  11. package/bin/zintrust.d.ts.map +1 -0
  12. package/bin/zintrust.js +51 -0
  13. package/bin/zt.d.ts +7 -0
  14. package/bin/zt.d.ts.map +1 -0
  15. package/bin/zt.js +6 -0
  16. package/package.json +80 -0
  17. package/src/boot/Application.d.ts +31 -0
  18. package/src/boot/Application.d.ts.map +1 -0
  19. package/src/boot/Application.js +159 -0
  20. package/src/boot/Server.d.ts +23 -0
  21. package/src/boot/Server.d.ts.map +1 -0
  22. package/src/boot/Server.js +236 -0
  23. package/src/boot/bootstrap.d.ts +7 -0
  24. package/src/boot/bootstrap.d.ts.map +1 -0
  25. package/src/boot/bootstrap.js +64 -0
  26. package/src/builder/BundleOptimizer.d.ts +42 -0
  27. package/src/builder/BundleOptimizer.d.ts.map +1 -0
  28. package/src/builder/BundleOptimizer.js +356 -0
  29. package/src/cache/Cache.d.ts +26 -0
  30. package/src/cache/Cache.d.ts.map +1 -0
  31. package/src/cache/Cache.js +89 -0
  32. package/src/cache/CacheDriver.d.ts +28 -0
  33. package/src/cache/CacheDriver.d.ts.map +1 -0
  34. package/src/cache/CacheDriver.js +6 -0
  35. package/src/cache/drivers/KVDriver.d.ts +12 -0
  36. package/src/cache/drivers/KVDriver.d.ts.map +1 -0
  37. package/src/cache/drivers/KVDriver.js +54 -0
  38. package/src/cache/drivers/MemoryDriver.d.ts +12 -0
  39. package/src/cache/drivers/MemoryDriver.d.ts.map +1 -0
  40. package/src/cache/drivers/MemoryDriver.js +50 -0
  41. package/src/cache/drivers/MongoDriver.d.ts +17 -0
  42. package/src/cache/drivers/MongoDriver.d.ts.map +1 -0
  43. package/src/cache/drivers/MongoDriver.js +80 -0
  44. package/src/cache/drivers/RedisDriver.d.ts +12 -0
  45. package/src/cache/drivers/RedisDriver.d.ts.map +1 -0
  46. package/src/cache/drivers/RedisDriver.js +79 -0
  47. package/src/cli/BaseCommand.d.ts +39 -0
  48. package/src/cli/BaseCommand.d.ts.map +1 -0
  49. package/src/cli/BaseCommand.js +58 -0
  50. package/src/cli/CLI.d.ts +21 -0
  51. package/src/cli/CLI.d.ts.map +1 -0
  52. package/src/cli/CLI.js +203 -0
  53. package/src/cli/ErrorHandler.d.ts +23 -0
  54. package/src/cli/ErrorHandler.d.ts.map +1 -0
  55. package/src/cli/ErrorHandler.js +95 -0
  56. package/src/cli/PromptHelper.d.ts +47 -0
  57. package/src/cli/PromptHelper.d.ts.map +1 -0
  58. package/src/cli/PromptHelper.js +155 -0
  59. package/src/cli/commands/AddCommand.d.ts +15 -0
  60. package/src/cli/commands/AddCommand.d.ts.map +1 -0
  61. package/src/cli/commands/AddCommand.js +817 -0
  62. package/src/cli/commands/ConfigCommand.d.ts +15 -0
  63. package/src/cli/commands/ConfigCommand.d.ts.map +1 -0
  64. package/src/cli/commands/ConfigCommand.js +273 -0
  65. package/src/cli/commands/D1MigrateCommand.d.ts +15 -0
  66. package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -0
  67. package/src/cli/commands/D1MigrateCommand.js +73 -0
  68. package/src/cli/commands/DebugCommand.d.ts +15 -0
  69. package/src/cli/commands/DebugCommand.d.ts.map +1 -0
  70. package/src/cli/commands/DebugCommand.js +52 -0
  71. package/src/cli/commands/FixCommand.d.ts +15 -0
  72. package/src/cli/commands/FixCommand.d.ts.map +1 -0
  73. package/src/cli/commands/FixCommand.js +80 -0
  74. package/src/cli/commands/KeyGenerateCommand.d.ts +9 -0
  75. package/src/cli/commands/KeyGenerateCommand.d.ts.map +1 -0
  76. package/src/cli/commands/KeyGenerateCommand.js +76 -0
  77. package/src/cli/commands/LogsCommand.d.ts +19 -0
  78. package/src/cli/commands/LogsCommand.d.ts.map +1 -0
  79. package/src/cli/commands/LogsCommand.js +185 -0
  80. package/src/cli/commands/MigrateCommand.d.ts +15 -0
  81. package/src/cli/commands/MigrateCommand.d.ts.map +1 -0
  82. package/src/cli/commands/MigrateCommand.js +56 -0
  83. package/src/cli/commands/NewCommand.d.ts +32 -0
  84. package/src/cli/commands/NewCommand.d.ts.map +1 -0
  85. package/src/cli/commands/NewCommand.js +280 -0
  86. package/src/cli/commands/PluginCommand.d.ts +9 -0
  87. package/src/cli/commands/PluginCommand.d.ts.map +1 -0
  88. package/src/cli/commands/PluginCommand.js +94 -0
  89. package/src/cli/commands/PrepareCommand.d.ts +8 -0
  90. package/src/cli/commands/PrepareCommand.d.ts.map +1 -0
  91. package/src/cli/commands/PrepareCommand.js +51 -0
  92. package/src/cli/commands/QACommand.d.ts +33 -0
  93. package/src/cli/commands/QACommand.d.ts.map +1 -0
  94. package/src/cli/commands/QACommand.js +490 -0
  95. package/src/cli/commands/SimulateCommand.d.ts +12 -0
  96. package/src/cli/commands/SimulateCommand.d.ts.map +1 -0
  97. package/src/cli/commands/SimulateCommand.js +79 -0
  98. package/src/cli/commands/StartCommand.d.ts +5 -0
  99. package/src/cli/commands/StartCommand.d.ts.map +1 -0
  100. package/src/cli/commands/StartCommand.js +227 -0
  101. package/src/cli/commands/index.d.ts +11 -0
  102. package/src/cli/commands/index.d.ts.map +1 -0
  103. package/src/cli/commands/index.js +10 -0
  104. package/src/cli/config/ConfigManager.d.ts +42 -0
  105. package/src/cli/config/ConfigManager.d.ts.map +1 -0
  106. package/src/cli/config/ConfigManager.js +175 -0
  107. package/src/cli/config/ConfigSchema.d.ts +195 -0
  108. package/src/cli/config/ConfigSchema.d.ts.map +1 -0
  109. package/src/cli/config/ConfigSchema.js +171 -0
  110. package/src/cli/config/ConfigValidator.d.ts +41 -0
  111. package/src/cli/config/ConfigValidator.d.ts.map +1 -0
  112. package/src/cli/config/ConfigValidator.js +200 -0
  113. package/src/cli/config/index.d.ts +8 -0
  114. package/src/cli/config/index.d.ts.map +1 -0
  115. package/src/cli/config/index.js +7 -0
  116. package/src/cli/debug/Dashboard.d.ts +34 -0
  117. package/src/cli/debug/Dashboard.d.ts.map +1 -0
  118. package/src/cli/debug/Dashboard.js +152 -0
  119. package/src/cli/index.d.ts +14 -0
  120. package/src/cli/index.d.ts.map +1 -0
  121. package/src/cli/index.js +14 -0
  122. package/src/cli/logger/Logger.d.ts +43 -0
  123. package/src/cli/logger/Logger.d.ts.map +1 -0
  124. package/src/cli/logger/Logger.js +137 -0
  125. package/src/cli/scaffolding/ControllerGenerator.d.ts +44 -0
  126. package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -0
  127. package/src/cli/scaffolding/ControllerGenerator.js +540 -0
  128. package/src/cli/scaffolding/FactoryGenerator.d.ts +47 -0
  129. package/src/cli/scaffolding/FactoryGenerator.d.ts.map +1 -0
  130. package/src/cli/scaffolding/FactoryGenerator.js +356 -0
  131. package/src/cli/scaffolding/FeatureScaffolder.d.ts +40 -0
  132. package/src/cli/scaffolding/FeatureScaffolder.d.ts.map +1 -0
  133. package/src/cli/scaffolding/FeatureScaffolder.js +747 -0
  134. package/src/cli/scaffolding/FileGenerator.d.ts +31 -0
  135. package/src/cli/scaffolding/FileGenerator.d.ts.map +1 -0
  136. package/src/cli/scaffolding/FileGenerator.js +222 -0
  137. package/src/cli/scaffolding/MigrationGenerator.d.ts +35 -0
  138. package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -0
  139. package/src/cli/scaffolding/MigrationGenerator.js +257 -0
  140. package/src/cli/scaffolding/ModelGenerator.d.ts +81 -0
  141. package/src/cli/scaffolding/ModelGenerator.d.ts.map +1 -0
  142. package/src/cli/scaffolding/ModelGenerator.js +249 -0
  143. package/src/cli/scaffolding/ProjectScaffolder.d.ts +66 -0
  144. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -0
  145. package/src/cli/scaffolding/ProjectScaffolder.js +439 -0
  146. package/src/cli/scaffolding/RequestFactoryGenerator.d.ts +50 -0
  147. package/src/cli/scaffolding/RequestFactoryGenerator.d.ts.map +1 -0
  148. package/src/cli/scaffolding/RequestFactoryGenerator.js +465 -0
  149. package/src/cli/scaffolding/ResponseFactoryGenerator.d.ts +43 -0
  150. package/src/cli/scaffolding/ResponseFactoryGenerator.d.ts.map +1 -0
  151. package/src/cli/scaffolding/ResponseFactoryGenerator.js +321 -0
  152. package/src/cli/scaffolding/RouteGenerator.d.ts +66 -0
  153. package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -0
  154. package/src/cli/scaffolding/RouteGenerator.js +306 -0
  155. package/src/cli/scaffolding/SeederGenerator.d.ts +47 -0
  156. package/src/cli/scaffolding/SeederGenerator.d.ts.map +1 -0
  157. package/src/cli/scaffolding/SeederGenerator.js +286 -0
  158. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.d.ts +40 -0
  159. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.d.ts.map +1 -0
  160. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.js +267 -0
  161. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts +45 -0
  162. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts.map +1 -0
  163. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.js +397 -0
  164. package/src/cli/scaffolding/ServiceScaffolder.d.ts +45 -0
  165. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -0
  166. package/src/cli/scaffolding/ServiceScaffolder.js +367 -0
  167. package/src/cli/scaffolding/TemplateEngine.d.ts +35 -0
  168. package/src/cli/scaffolding/TemplateEngine.d.ts.map +1 -0
  169. package/src/cli/scaffolding/TemplateEngine.js +379 -0
  170. package/src/cli/scaffolding/WorkflowGenerator.d.ts +31 -0
  171. package/src/cli/scaffolding/WorkflowGenerator.d.ts.map +1 -0
  172. package/src/cli/scaffolding/WorkflowGenerator.js +193 -0
  173. package/src/cli/scaffolding/index.d.ts +34 -0
  174. package/src/cli/scaffolding/index.d.ts.map +1 -0
  175. package/src/cli/scaffolding/index.js +18 -0
  176. package/src/cli/utils/DistPackager.d.ts +8 -0
  177. package/src/cli/utils/DistPackager.d.ts.map +1 -0
  178. package/src/cli/utils/DistPackager.js +94 -0
  179. package/src/cli/utils/EnvFileLoader.d.ts +21 -0
  180. package/src/cli/utils/EnvFileLoader.d.ts.map +1 -0
  181. package/src/cli/utils/EnvFileLoader.js +166 -0
  182. package/src/cli/utils/spawn.d.ts +11 -0
  183. package/src/cli/utils/spawn.d.ts.map +1 -0
  184. package/src/cli/utils/spawn.js +81 -0
  185. package/src/common/index.d.ts +87 -0
  186. package/src/common/index.d.ts.map +1 -0
  187. package/src/common/index.js +207 -0
  188. package/src/config/SecretsManager.d.ts +122 -0
  189. package/src/config/SecretsManager.d.ts.map +1 -0
  190. package/src/config/SecretsManager.js +328 -0
  191. package/src/config/app.d.ts +56 -0
  192. package/src/config/app.d.ts.map +1 -0
  193. package/src/config/app.js +77 -0
  194. package/src/config/cache.d.ts +76 -0
  195. package/src/config/cache.d.ts.map +1 -0
  196. package/src/config/cache.js +62 -0
  197. package/src/config/constants.d.ts +108 -0
  198. package/src/config/constants.d.ts.map +1 -0
  199. package/src/config/constants.js +64 -0
  200. package/src/config/database.d.ts +122 -0
  201. package/src/config/database.d.ts.map +1 -0
  202. package/src/config/database.js +89 -0
  203. package/src/config/env.d.ts +56 -0
  204. package/src/config/env.d.ts.map +1 -0
  205. package/src/config/env.js +133 -0
  206. package/src/config/features.d.ts +27 -0
  207. package/src/config/features.d.ts.map +1 -0
  208. package/src/config/features.js +49 -0
  209. package/src/config/index.d.ts +554 -0
  210. package/src/config/index.d.ts.map +1 -0
  211. package/src/config/index.js +31 -0
  212. package/src/config/logger.d.ts +17 -0
  213. package/src/config/logger.d.ts.map +1 -0
  214. package/src/config/logger.js +77 -0
  215. package/src/config/microservices.d.ts +88 -0
  216. package/src/config/microservices.d.ts.map +1 -0
  217. package/src/config/microservices.js +90 -0
  218. package/src/config/queue.d.ts +107 -0
  219. package/src/config/queue.d.ts.map +1 -0
  220. package/src/config/queue.js +74 -0
  221. package/src/config/security.d.ts +108 -0
  222. package/src/config/security.d.ts.map +1 -0
  223. package/src/config/security.js +134 -0
  224. package/src/config/storage.d.ts +105 -0
  225. package/src/config/storage.d.ts.map +1 -0
  226. package/src/config/storage.js +79 -0
  227. package/src/container/ServiceContainer.d.ts +25 -0
  228. package/src/container/ServiceContainer.d.ts.map +1 -0
  229. package/src/container/ServiceContainer.js +75 -0
  230. package/src/database/migrations/index.d.ts +2 -0
  231. package/src/database/migrations/index.d.ts.map +1 -0
  232. package/src/database/migrations/index.js +1 -0
  233. package/src/exceptions/ZintrustError.d.ts +88 -0
  234. package/src/exceptions/ZintrustError.d.ts.map +1 -0
  235. package/src/exceptions/ZintrustError.js +110 -0
  236. package/src/features/Auth.d.ts +20 -0
  237. package/src/features/Auth.d.ts.map +1 -0
  238. package/src/features/Auth.js +32 -0
  239. package/src/features/Queue.d.ts +21 -0
  240. package/src/features/Queue.d.ts.map +1 -0
  241. package/src/features/Queue.js +59 -0
  242. package/src/functions/cloudflare.d.ts +5 -0
  243. package/src/functions/cloudflare.d.ts.map +1 -0
  244. package/src/functions/cloudflare.js +34 -0
  245. package/src/functions/deno.d.ts +3 -0
  246. package/src/functions/deno.d.ts.map +1 -0
  247. package/src/functions/deno.js +31 -0
  248. package/src/functions/lambda.d.ts +2 -0
  249. package/src/functions/lambda.d.ts.map +1 -0
  250. package/src/functions/lambda.js +32 -0
  251. package/src/http/Controller.d.ts +20 -0
  252. package/src/http/Controller.d.ts.map +1 -0
  253. package/src/http/Controller.js +46 -0
  254. package/src/http/Kernel.d.ts +24 -0
  255. package/src/http/Kernel.d.ts.map +1 -0
  256. package/src/http/Kernel.js +72 -0
  257. package/src/http/Request.d.ts +36 -0
  258. package/src/http/Request.d.ts.map +1 -0
  259. package/src/http/Request.js +142 -0
  260. package/src/http/Response.d.ts +32 -0
  261. package/src/http/Response.d.ts.map +1 -0
  262. package/src/http/Response.js +70 -0
  263. package/src/index.d.ts +43 -0
  264. package/src/index.d.ts.map +1 -0
  265. package/src/index.js +37 -0
  266. package/src/microservices/MicroserviceBootstrap.d.ts +75 -0
  267. package/src/microservices/MicroserviceBootstrap.d.ts.map +1 -0
  268. package/src/microservices/MicroserviceBootstrap.js +285 -0
  269. package/src/microservices/MicroserviceGenerator.d.ts +27 -0
  270. package/src/microservices/MicroserviceGenerator.d.ts.map +1 -0
  271. package/src/microservices/MicroserviceGenerator.js +436 -0
  272. package/src/microservices/MicroserviceManager.d.ts +68 -0
  273. package/src/microservices/MicroserviceManager.d.ts.map +1 -0
  274. package/src/microservices/MicroserviceManager.js +266 -0
  275. package/src/microservices/PostgresAdapter.d.ts +90 -0
  276. package/src/microservices/PostgresAdapter.d.ts.map +1 -0
  277. package/src/microservices/PostgresAdapter.js +286 -0
  278. package/src/microservices/RequestTracingMiddleware.d.ts +41 -0
  279. package/src/microservices/RequestTracingMiddleware.d.ts.map +1 -0
  280. package/src/microservices/RequestTracingMiddleware.js +122 -0
  281. package/src/microservices/ServiceAuthMiddleware.d.ts +58 -0
  282. package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -0
  283. package/src/microservices/ServiceAuthMiddleware.js +240 -0
  284. package/src/microservices/ServiceBundler.d.ts +45 -0
  285. package/src/microservices/ServiceBundler.d.ts.map +1 -0
  286. package/src/microservices/ServiceBundler.js +297 -0
  287. package/src/microservices/ServiceHealthMonitor.d.ts +96 -0
  288. package/src/microservices/ServiceHealthMonitor.d.ts.map +1 -0
  289. package/src/microservices/ServiceHealthMonitor.js +379 -0
  290. package/src/middleware/CsrfMiddleware.d.ts +19 -0
  291. package/src/middleware/CsrfMiddleware.d.ts.map +1 -0
  292. package/src/middleware/CsrfMiddleware.js +121 -0
  293. package/src/middleware/MiddlewareStack.d.ts +27 -0
  294. package/src/middleware/MiddlewareStack.d.ts.map +1 -0
  295. package/src/middleware/MiddlewareStack.js +43 -0
  296. package/src/middleware/RateLimiter.d.ts +22 -0
  297. package/src/middleware/RateLimiter.d.ts.map +1 -0
  298. package/src/middleware/RateLimiter.js +72 -0
  299. package/src/middleware/SecurityMiddleware.d.ts +33 -0
  300. package/src/middleware/SecurityMiddleware.d.ts.map +1 -0
  301. package/src/middleware/SecurityMiddleware.js +106 -0
  302. package/src/middleware/index.d.ts +9 -0
  303. package/src/middleware/index.d.ts.map +1 -0
  304. package/src/middleware/index.js +8 -0
  305. package/src/node-singletons/child-process.d.ts +7 -0
  306. package/src/node-singletons/child-process.d.ts.map +1 -0
  307. package/src/node-singletons/child-process.js +6 -0
  308. package/src/node-singletons/crypto.d.ts +7 -0
  309. package/src/node-singletons/crypto.d.ts.map +1 -0
  310. package/src/node-singletons/crypto.js +6 -0
  311. package/src/node-singletons/events.d.ts +7 -0
  312. package/src/node-singletons/events.d.ts.map +1 -0
  313. package/src/node-singletons/events.js +6 -0
  314. package/src/node-singletons/fs.d.ts +12 -0
  315. package/src/node-singletons/fs.d.ts.map +1 -0
  316. package/src/node-singletons/fs.js +14 -0
  317. package/src/node-singletons/http.d.ts +8 -0
  318. package/src/node-singletons/http.d.ts.map +1 -0
  319. package/src/node-singletons/http.js +6 -0
  320. package/src/node-singletons/index.d.ts +30 -0
  321. package/src/node-singletons/index.d.ts.map +1 -0
  322. package/src/node-singletons/index.js +31 -0
  323. package/src/node-singletons/os.d.ts +9 -0
  324. package/src/node-singletons/os.d.ts.map +1 -0
  325. package/src/node-singletons/os.js +9 -0
  326. package/src/node-singletons/path.d.ts +7 -0
  327. package/src/node-singletons/path.d.ts.map +1 -0
  328. package/src/node-singletons/path.js +6 -0
  329. package/src/node-singletons/perf-hooks.d.ts +7 -0
  330. package/src/node-singletons/perf-hooks.d.ts.map +1 -0
  331. package/src/node-singletons/perf-hooks.js +6 -0
  332. package/src/node-singletons/readline.d.ts +10 -0
  333. package/src/node-singletons/readline.d.ts.map +1 -0
  334. package/src/node-singletons/readline.js +9 -0
  335. package/src/node-singletons/url.d.ts +7 -0
  336. package/src/node-singletons/url.d.ts.map +1 -0
  337. package/src/node-singletons/url.js +6 -0
  338. package/src/orm/ConnectionManager.d.ts +118 -0
  339. package/src/orm/ConnectionManager.d.ts.map +1 -0
  340. package/src/orm/ConnectionManager.js +401 -0
  341. package/src/orm/Database.d.ts +31 -0
  342. package/src/orm/Database.d.ts.map +1 -0
  343. package/src/orm/Database.js +163 -0
  344. package/src/orm/DatabaseAdapter.d.ts +96 -0
  345. package/src/orm/DatabaseAdapter.d.ts.map +1 -0
  346. package/src/orm/DatabaseAdapter.js +40 -0
  347. package/src/orm/Model.d.ts +91 -0
  348. package/src/orm/Model.d.ts.map +1 -0
  349. package/src/orm/Model.js +206 -0
  350. package/src/orm/QueryBuilder.d.ts +52 -0
  351. package/src/orm/QueryBuilder.d.ts.map +1 -0
  352. package/src/orm/QueryBuilder.js +134 -0
  353. package/src/orm/Relationships.d.ts +53 -0
  354. package/src/orm/Relationships.d.ts.map +1 -0
  355. package/src/orm/Relationships.js +98 -0
  356. package/src/orm/Schema.d.ts +123 -0
  357. package/src/orm/Schema.d.ts.map +1 -0
  358. package/src/orm/Schema.js +169 -0
  359. package/src/orm/adapters/D1Adapter.d.ts +15 -0
  360. package/src/orm/adapters/D1Adapter.d.ts.map +1 -0
  361. package/src/orm/adapters/D1Adapter.js +125 -0
  362. package/src/orm/adapters/MySQLAdapter.d.ts +16 -0
  363. package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -0
  364. package/src/orm/adapters/MySQLAdapter.js +87 -0
  365. package/src/orm/adapters/PostgreSQLAdapter.d.ts +16 -0
  366. package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  367. package/src/orm/adapters/PostgreSQLAdapter.js +87 -0
  368. package/src/orm/adapters/SQLServerAdapter.d.ts +16 -0
  369. package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -0
  370. package/src/orm/adapters/SQLServerAdapter.js +81 -0
  371. package/src/orm/adapters/SQLiteAdapter.d.ts +11 -0
  372. package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -0
  373. package/src/orm/adapters/SQLiteAdapter.js +131 -0
  374. package/src/performance/Benchmark.d.ts +87 -0
  375. package/src/performance/Benchmark.d.ts.map +1 -0
  376. package/src/performance/Benchmark.js +304 -0
  377. package/src/performance/CodeGenerationBenchmark.d.ts +23 -0
  378. package/src/performance/CodeGenerationBenchmark.d.ts.map +1 -0
  379. package/src/performance/CodeGenerationBenchmark.js +249 -0
  380. package/src/performance/Optimizer.d.ts +99 -0
  381. package/src/performance/Optimizer.d.ts.map +1 -0
  382. package/src/performance/Optimizer.js +396 -0
  383. package/src/performance/establish-baseline.d.ts +9 -0
  384. package/src/performance/establish-baseline.d.ts.map +1 -0
  385. package/src/performance/establish-baseline.js +55 -0
  386. package/src/profiling/MemoryProfiler.d.ts +32 -0
  387. package/src/profiling/MemoryProfiler.d.ts.map +1 -0
  388. package/src/profiling/MemoryProfiler.js +84 -0
  389. package/src/profiling/N1Detector.d.ts +16 -0
  390. package/src/profiling/N1Detector.d.ts.map +1 -0
  391. package/src/profiling/N1Detector.js +120 -0
  392. package/src/profiling/QueryLogger.d.ts +107 -0
  393. package/src/profiling/QueryLogger.d.ts.map +1 -0
  394. package/src/profiling/QueryLogger.js +148 -0
  395. package/src/profiling/RequestProfiler.d.ts +30 -0
  396. package/src/profiling/RequestProfiler.d.ts.map +1 -0
  397. package/src/profiling/RequestProfiler.js +94 -0
  398. package/src/profiling/types.d.ts +77 -0
  399. package/src/profiling/types.d.ts.map +1 -0
  400. package/src/profiling/types.js +5 -0
  401. package/src/routing/Router.d.ts +52 -0
  402. package/src/routing/Router.d.ts.map +1 -0
  403. package/src/routing/Router.js +191 -0
  404. package/src/runtime/PluginManager.d.ts +30 -0
  405. package/src/runtime/PluginManager.d.ts.map +1 -0
  406. package/src/runtime/PluginManager.js +197 -0
  407. package/src/runtime/PluginRegistry.d.ts +22 -0
  408. package/src/runtime/PluginRegistry.d.ts.map +1 -0
  409. package/src/runtime/PluginRegistry.js +93 -0
  410. package/src/runtime/RuntimeAdapter.d.ts +126 -0
  411. package/src/runtime/RuntimeAdapter.d.ts.map +1 -0
  412. package/src/runtime/RuntimeAdapter.js +127 -0
  413. package/src/runtime/RuntimeDetector.d.ts +15 -0
  414. package/src/runtime/RuntimeDetector.d.ts.map +1 -0
  415. package/src/runtime/RuntimeDetector.js +219 -0
  416. package/src/runtime/adapters/CloudflareAdapter.d.ts +43 -0
  417. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -0
  418. package/src/runtime/adapters/CloudflareAdapter.js +175 -0
  419. package/src/runtime/adapters/DenoAdapter.d.ts +30 -0
  420. package/src/runtime/adapters/DenoAdapter.d.ts.map +1 -0
  421. package/src/runtime/adapters/DenoAdapter.js +191 -0
  422. package/src/runtime/adapters/FargateAdapter.d.ts +40 -0
  423. package/src/runtime/adapters/FargateAdapter.d.ts.map +1 -0
  424. package/src/runtime/adapters/FargateAdapter.js +156 -0
  425. package/src/runtime/adapters/LambdaAdapter.d.ts +13 -0
  426. package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -0
  427. package/src/runtime/adapters/LambdaAdapter.js +302 -0
  428. package/src/runtime/adapters/NodeServerAdapter.d.ts +16 -0
  429. package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -0
  430. package/src/runtime/adapters/NodeServerAdapter.js +199 -0
  431. package/src/scripts/TemplateSync.d.ts +7 -0
  432. package/src/scripts/TemplateSync.d.ts.map +1 -0
  433. package/src/scripts/TemplateSync.js +234 -0
  434. package/src/security/CsrfTokenManager.d.ts +28 -0
  435. package/src/security/CsrfTokenManager.d.ts.map +1 -0
  436. package/src/security/CsrfTokenManager.js +78 -0
  437. package/src/security/Encryptor.d.ts +15 -0
  438. package/src/security/Encryptor.d.ts.map +1 -0
  439. package/src/security/Encryptor.js +142 -0
  440. package/src/security/JwtManager.d.ts +41 -0
  441. package/src/security/JwtManager.d.ts.map +1 -0
  442. package/src/security/JwtManager.js +229 -0
  443. package/src/security/UrlValidator.d.ts +21 -0
  444. package/src/security/UrlValidator.d.ts.map +1 -0
  445. package/src/security/UrlValidator.js +42 -0
  446. package/src/security/XssProtection.d.ts +24 -0
  447. package/src/security/XssProtection.d.ts.map +1 -0
  448. package/src/security/XssProtection.js +133 -0
  449. package/src/templates/TemplateRegistry.d.ts +40 -0
  450. package/src/templates/TemplateRegistry.d.ts.map +1 -0
  451. package/src/templates/TemplateRegistry.js +78 -0
  452. package/src/templates/TemplateRegistry.ts +91 -0
  453. package/src/templates/adapters/MySQLAdapter.ts.tpl +97 -0
  454. package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +101 -0
  455. package/src/templates/adapters/SQLServerAdapter.ts.tpl +95 -0
  456. package/src/templates/adapters/SQLiteAdapter.ts.tpl +189 -0
  457. package/src/templates/features/Auth.ts.tpl +40 -0
  458. package/src/templates/features/Queue.ts.tpl +75 -0
  459. package/src/templates/project/basic/.env.example.tpl +26 -0
  460. package/src/templates/project/basic/.env.tpl +164 -0
  461. package/src/templates/project/basic/README.md.tpl +13 -0
  462. package/src/templates/project/basic/app/Controllers/UserController.ts.tpl +155 -0
  463. package/src/templates/project/basic/app/Middleware/ProfilerMiddleware.ts.tpl +55 -0
  464. package/src/templates/project/basic/app/Middleware/index.ts.tpl +304 -0
  465. package/src/templates/project/basic/app/Models/Post.ts.tpl +30 -0
  466. package/src/templates/project/basic/app/Models/User.ts.tpl +53 -0
  467. package/src/templates/project/basic/config/SecretsManager.ts.tpl +453 -0
  468. package/src/templates/project/basic/config/app.ts.tpl +97 -0
  469. package/src/templates/project/basic/config/cache.ts.tpl +117 -0
  470. package/src/templates/project/basic/config/constants.ts.tpl +70 -0
  471. package/src/templates/project/basic/config/database.ts.tpl +152 -0
  472. package/src/templates/project/basic/config/env.ts.tpl +148 -0
  473. package/src/templates/project/basic/config/features.ts.tpl +57 -0
  474. package/src/templates/project/basic/config/index.ts.tpl +36 -0
  475. package/src/templates/project/basic/config/logger.ts.tpl +95 -0
  476. package/src/templates/project/basic/config/microservices.ts.tpl +104 -0
  477. package/src/templates/project/basic/config/queue.ts.tpl +134 -0
  478. package/src/templates/project/basic/config/security.ts.tpl +149 -0
  479. package/src/templates/project/basic/config/storage.ts.tpl +136 -0
  480. package/src/templates/project/basic/database/factories/.gitkeep.tpl +0 -0
  481. package/src/templates/project/basic/database/migrations/.gitkeep.tpl +0 -0
  482. package/src/templates/project/basic/database/migrations/index.ts.tpl +2 -0
  483. package/src/templates/project/basic/database/seeders/.gitkeep.tpl +0 -0
  484. package/src/templates/project/basic/package.json.tpl +22 -0
  485. package/src/templates/project/basic/routes/api.ts.tpl +135 -0
  486. package/src/templates/project/basic/src/index.ts.tpl +49 -0
  487. package/src/templates/project/basic/template.json +17 -0
  488. package/src/templates/project/basic/tsconfig.json.tpl +20 -0
  489. package/src/validation/ValidationError.d.ts +42 -0
  490. package/src/validation/ValidationError.d.ts.map +1 -0
  491. package/src/validation/ValidationError.js +53 -0
  492. package/src/validation/Validator.d.ts +60 -0
  493. package/src/validation/Validator.d.ts.map +1 -0
  494. package/src/validation/Validator.js +190 -0
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Database Adapter Interface
3
+ * Defines contract for different database implementations
4
+ */
5
+ /**
6
+ * Minimal D1 Database interface for type safety
7
+ */
8
+ export interface ID1Database {
9
+ prepare(sql: string): {
10
+ bind(...values: unknown[]): {
11
+ all<T = unknown>(): Promise<{
12
+ results?: T[];
13
+ success: boolean;
14
+ error?: string;
15
+ }>;
16
+ first<T = unknown>(): Promise<T | null>;
17
+ run(): Promise<{
18
+ success: boolean;
19
+ error?: string;
20
+ }>;
21
+ };
22
+ };
23
+ }
24
+ export interface DatabaseConfig {
25
+ d1?: ID1Database;
26
+ driver: 'sqlite' | 'postgresql' | 'mysql' | 'sqlserver' | 'd1';
27
+ database?: string;
28
+ host?: string;
29
+ port?: number;
30
+ username?: string;
31
+ password?: string;
32
+ synchronize?: boolean;
33
+ logging?: boolean;
34
+ readHosts?: string[];
35
+ }
36
+ export interface QueryResult {
37
+ rows: Record<string, unknown>[];
38
+ rowCount: number;
39
+ }
40
+ export interface IDatabaseAdapter {
41
+ /**
42
+ * Connect to database
43
+ */
44
+ connect(): Promise<void>;
45
+ /**
46
+ * Disconnect from database
47
+ */
48
+ disconnect(): Promise<void>;
49
+ /**
50
+ * Execute a query
51
+ */
52
+ query(sql: string, parameters: unknown[]): Promise<QueryResult>;
53
+ /**
54
+ * Execute a query and return first result
55
+ */
56
+ queryOne(sql: string, parameters: unknown[]): Promise<Record<string, unknown> | null>;
57
+ /**
58
+ * Execute multiple queries in transaction
59
+ */
60
+ transaction<T>(callback: (adapter: IDatabaseAdapter) => Promise<T>): Promise<T>;
61
+ /**
62
+ * Execute raw SQL query (only available when USE_RAW_QRY=true)
63
+ * WARNING: Bypasses QueryBuilder safety. Use parameterized queries.
64
+ */
65
+ rawQuery<T = unknown>(sql: string, parameters?: unknown[]): Promise<T[]>;
66
+ /**
67
+ * Get database type
68
+ */
69
+ getType(): string;
70
+ /**
71
+ * Check connection status
72
+ */
73
+ isConnected(): boolean;
74
+ /**
75
+ * Get placeholder for parameterized query
76
+ */
77
+ getPlaceholder(index: number): string;
78
+ }
79
+ /**
80
+ * Base Adapter Utilities
81
+ * Refactored to Functional Object pattern
82
+ */
83
+ export declare const BaseAdapter: Readonly<{
84
+ /**
85
+ * Sanitize parameter value
86
+ */
87
+ sanitize(value: unknown): string;
88
+ /**
89
+ * Build parameterized query (for adapters that need it)
90
+ */
91
+ buildParameterizedQuery(sql: string, parameters: unknown[], getPlaceholder?: (index: number) => string): {
92
+ sql: string;
93
+ parameters: unknown[];
94
+ };
95
+ }>;
96
+ //# sourceMappingURL=DatabaseAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabaseAdapter.d.ts","sourceRoot":"","sources":["../../../src/orm/DatabaseAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG;QACpB,IAAI,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG;YAC1B,GAAG,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC;gBAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBAAC,OAAO,EAAE,OAAO,CAAC;gBAAC,KAAK,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;YACjF,KAAK,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACxC,GAAG,IAAI,OAAO,CAAC;gBAAE,OAAO,EAAE,OAAO,CAAC;gBAAC,KAAK,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;SACtD,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,QAAQ,GAAG,YAAY,GAAG,OAAO,GAAG,WAAW,GAAG,IAAI,CAAC;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEhE;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAEtF;;OAEG;IACH,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEhF;;;OAGG;IACH,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAEzE;;OAEG;IACH,OAAO,IAAI,MAAM,CAAC;IAElB;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC;IAEvB;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACvC;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;oBACa,OAAO,GAAG,MAAM;IAiBhC;;OAEG;iCAEI,MAAM,cACC,OAAO,EAAE,mBACL,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GACxC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,EAAE,CAAA;KAAE;EASzC,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Database Adapter Interface
3
+ * Defines contract for different database implementations
4
+ */
5
+ /**
6
+ * Base Adapter Utilities
7
+ * Refactored to Functional Object pattern
8
+ */
9
+ export const BaseAdapter = Object.freeze({
10
+ /**
11
+ * Sanitize parameter value
12
+ */
13
+ sanitize(value) {
14
+ if (value === null || value === undefined) {
15
+ return 'NULL';
16
+ }
17
+ if (typeof value === 'string') {
18
+ return `'${value.replaceAll("'", "''")}'`;
19
+ }
20
+ if (typeof value === 'boolean') {
21
+ return value ? '1' : '0';
22
+ }
23
+ if (typeof value === 'number') {
24
+ return String(value);
25
+ }
26
+ // For objects, convert to JSON string representation
27
+ return `'${JSON.stringify(value).replaceAll("'", "''")}'`;
28
+ },
29
+ /**
30
+ * Build parameterized query (for adapters that need it)
31
+ */
32
+ buildParameterizedQuery(sql, parameters, getPlaceholder = () => '?') {
33
+ let paramIndex = 0;
34
+ const processedSql = sql.replaceAll('?', () => {
35
+ paramIndex++;
36
+ return getPlaceholder(paramIndex);
37
+ });
38
+ return { sql: processedSql, parameters };
39
+ },
40
+ });
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Enhanced Model with Relationships
3
+ * Full ORM capabilities with eager/lazy loading
4
+ */
5
+ import { IQueryBuilder } from './QueryBuilder';
6
+ import { IRelationship } from './Relationships';
7
+ export interface ModelConfig {
8
+ table: string;
9
+ fillable: string[];
10
+ hidden: string[];
11
+ timestamps: boolean;
12
+ casts: Record<string, string>;
13
+ }
14
+ export interface ModelConfig {
15
+ table: string;
16
+ fillable: string[];
17
+ hidden: string[];
18
+ timestamps: boolean;
19
+ casts: Record<string, string>;
20
+ connection?: string;
21
+ }
22
+ export interface ModelStatic {
23
+ query(): IQueryBuilder;
24
+ getTable?(): string;
25
+ name?: string;
26
+ }
27
+ export interface IModel {
28
+ fill(attributes: Record<string, unknown>): IModel;
29
+ setAttribute(key: string, value: unknown): IModel;
30
+ getAttribute(key: string): unknown;
31
+ getAttributes(): Record<string, unknown>;
32
+ save(): Promise<boolean>;
33
+ delete(): Promise<boolean>;
34
+ toJSON(): Record<string, unknown>;
35
+ isDirty(key?: string): boolean;
36
+ getTable(): string;
37
+ exists(): boolean;
38
+ setExists(exists: boolean): void;
39
+ hasOne(relatedModel: ModelStatic, foreignKey?: string): IRelationship;
40
+ hasMany(relatedModel: ModelStatic, foreignKey?: string): IRelationship;
41
+ belongsTo(relatedModel: ModelStatic, foreignKey?: string): IRelationship;
42
+ belongsToMany(relatedModel: ModelStatic, throughTable?: string, foreignKey?: string, relatedKey?: string): IRelationship;
43
+ }
44
+ /**
45
+ * Create a new model instance
46
+ */
47
+ export declare const createModel: (config: ModelConfig, attributes?: Record<string, unknown>) => IModel;
48
+ /**
49
+ * Get a query builder for a table
50
+ */
51
+ export declare const query: (table: string, connection?: string) => IQueryBuilder;
52
+ /**
53
+ * Find a model by ID
54
+ */
55
+ export declare const find: (config: ModelConfig, id: unknown) => Promise<IModel | null>;
56
+ /**
57
+ * Get all records for a model
58
+ */
59
+ export declare const all: (config: ModelConfig) => Promise<IModel[]>;
60
+ type UnboundModelMethods = Record<string, (m: IModel, ...args: unknown[]) => unknown>;
61
+ type BoundModelMethods = Record<string, (...args: never[]) => unknown>;
62
+ type BoundFromUnbound<T extends UnboundModelMethods> = {
63
+ [K in keyof T]: T[K] extends (m: IModel, ...args: infer A) => infer R ? (...args: A) => R : never;
64
+ };
65
+ type DefinedModel<T extends BoundModelMethods> = {
66
+ create: (attributes?: Record<string, unknown>) => IModel & T;
67
+ find: (id: unknown) => Promise<(IModel & T) | null>;
68
+ all: () => Promise<Array<IModel & T>>;
69
+ query: () => IQueryBuilder;
70
+ getTable: () => string;
71
+ };
72
+ /**
73
+ * Define a new model type
74
+ */
75
+ export declare function define<const T extends UnboundModelMethods>(config: ModelConfig, methods?: T): DefinedModel<BoundFromUnbound<T>>;
76
+ export declare function define<const T extends BoundModelMethods>(config: ModelConfig, plan: (model: IModel) => T): DefinedModel<T>;
77
+ /**
78
+ * Model namespace - sealed namespace object grouping all model operations
79
+ * Frozen to prevent accidental mutation
80
+ *
81
+ * @see FRAMEWORK_REFACTOR_FUNCTION_PATTERN.md for Pattern 2 details
82
+ */
83
+ export declare const Model: Readonly<{
84
+ create: (config: ModelConfig, attributes?: Record<string, unknown>) => IModel;
85
+ query: (table: string, connection?: string) => IQueryBuilder;
86
+ find: (config: ModelConfig, id: unknown) => Promise<IModel | null>;
87
+ all: (config: ModelConfig) => Promise<IModel[]>;
88
+ define: typeof define;
89
+ }>;
90
+ export {};
91
+ //# sourceMappingURL=Model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../../src/orm/Model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Enhanced Model with Relationships
3
+ * Full ORM capabilities with eager/lazy loading
4
+ */
5
+ import { DEFAULTS } from '../config/constants';
6
+ import { ErrorFactory } from '../exceptions/ZintrustError';
7
+ import { useDatabase } from './Database';
8
+ import { QueryBuilder } from './QueryBuilder';
9
+ import { BelongsTo, BelongsToMany, HasMany, HasOne } from './Relationships';
10
+ const getRelatedTableName = (relatedModel) => {
11
+ if (typeof relatedModel.getTable === 'function') {
12
+ return relatedModel.getTable();
13
+ }
14
+ throw ErrorFactory.createConfigError('Related model does not provide a table name');
15
+ };
16
+ /**
17
+ * Cast attribute value based on config
18
+ */
19
+ const castAttribute = (config, key, value) => {
20
+ const castType = config.casts[key];
21
+ if (castType === undefined)
22
+ return value;
23
+ switch (castType) {
24
+ case 'boolean':
25
+ return value === true || value === 1 || value === '1';
26
+ case 'integer':
27
+ return Number.parseInt(String(value), 10);
28
+ case 'float':
29
+ return Number.parseFloat(String(value));
30
+ case 'date':
31
+ return new Date(String(value)).toISOString().split('T')[0];
32
+ case 'datetime':
33
+ return new Date(String(value)).toISOString();
34
+ case 'json':
35
+ return typeof value === 'string' ? JSON.parse(value) : value;
36
+ default:
37
+ return value;
38
+ }
39
+ };
40
+ /**
41
+ * Fill attributes based on fillable config
42
+ */
43
+ const fillAttributes = (config, attrs, newAttrs) => {
44
+ for (const [key, value] of Object.entries(newAttrs)) {
45
+ if (config.fillable.length === 0 || config.fillable.includes(key)) {
46
+ attrs[key] = castAttribute(config, key, value);
47
+ }
48
+ }
49
+ };
50
+ const createModelJSON = (config, attrs) => {
51
+ const json = {};
52
+ for (const [key, value] of Object.entries(attrs)) {
53
+ if (!config.hidden.includes(key))
54
+ json[key] = value;
55
+ }
56
+ return json;
57
+ };
58
+ const createModelRelationships = (config) => ({
59
+ hasOne: (relatedModel, foreignKey) => HasOne.create(relatedModel, foreignKey ?? `${config.table.slice(0, -1)}_id`, 'id'),
60
+ hasMany: (relatedModel, foreignKey) => HasMany.create(relatedModel, foreignKey ?? `${config.table.slice(0, -1)}_id`, 'id'),
61
+ belongsTo: (relatedModel, foreignKey) => {
62
+ const relatedTable = getRelatedTableName(relatedModel);
63
+ return BelongsTo.create(relatedModel, foreignKey ?? `${relatedTable.slice(0, -1)}_id`, 'id');
64
+ },
65
+ belongsToMany: (relatedModel, throughTable, foreignKey, relatedKey) => {
66
+ const relatedTable = getRelatedTableName(relatedModel);
67
+ const table = throughTable ?? [config.table, relatedTable].sort((a, b) => a.localeCompare(b)).join('_');
68
+ return BelongsToMany.create(relatedModel, table, foreignKey ?? `${config.table.slice(0, -1)}_id`, relatedKey ?? `${relatedTable.slice(0, -1)}_id`);
69
+ },
70
+ });
71
+ /**
72
+ * Create a new model instance
73
+ */
74
+ export const createModel = (config, attributes = {}) => {
75
+ const connection = config.connection ?? DEFAULTS.CONNECTION;
76
+ const db = useDatabase(undefined, connection);
77
+ const attrs = {};
78
+ let original = {};
79
+ let isExists = false;
80
+ fillAttributes(config, attrs, attributes);
81
+ original = { ...attrs };
82
+ const model = {
83
+ fill: (newAttrs) => {
84
+ fillAttributes(config, attrs, newAttrs);
85
+ return model;
86
+ },
87
+ setAttribute: (key, value) => {
88
+ attrs[key] = castAttribute(config, key, value);
89
+ return model;
90
+ },
91
+ getAttribute: (key) => attrs[key],
92
+ getAttributes: () => ({ ...attrs }),
93
+ // remove in production - use saveChanges pattern
94
+ // eslint-disable-next-line @typescript-eslint/require-await
95
+ async save() {
96
+ if (db === undefined)
97
+ throw ErrorFactory.createDatabaseError('Database not initialized');
98
+ if (config.timestamps) {
99
+ attrs['created_at'] = attrs['created_at'] ?? new Date().toISOString();
100
+ attrs['updated_at'] = new Date().toISOString();
101
+ }
102
+ isExists = true;
103
+ original = { ...attrs };
104
+ return true;
105
+ },
106
+ // remove in production - use delete pattern
107
+ // eslint-disable-next-line @typescript-eslint/require-await
108
+ async delete() {
109
+ if (!isExists || db === undefined)
110
+ return false;
111
+ return true;
112
+ },
113
+ toJSON: () => createModelJSON(config, attrs),
114
+ isDirty: (key) => key === undefined
115
+ ? JSON.stringify(attrs) !== JSON.stringify(original)
116
+ : attrs[key] !== original[key],
117
+ getTable: () => config.table,
118
+ exists: () => isExists,
119
+ setExists: (exists) => {
120
+ isExists = exists;
121
+ },
122
+ ...createModelRelationships(config),
123
+ };
124
+ return model;
125
+ };
126
+ /**
127
+ * Get a query builder for a table
128
+ */
129
+ export const query = (table, connection) => {
130
+ const db = useDatabase(undefined, connection ?? DEFAULTS.CONNECTION);
131
+ return QueryBuilder.create(table, db);
132
+ };
133
+ /**
134
+ * Find a model by ID
135
+ */
136
+ export const find = async (config, id) => {
137
+ const builder = query(config.table, config.connection);
138
+ builder.where('id', '=', String(id)).limit(1);
139
+ const result = await builder.first();
140
+ if (result === null)
141
+ return null;
142
+ const model = createModel(config, result);
143
+ model.setExists(true);
144
+ return model;
145
+ };
146
+ /**
147
+ * Get all records for a model
148
+ */
149
+ export const all = async (config) => {
150
+ const builder = query(config.table, config.connection);
151
+ const results = await builder.get();
152
+ return results.map((result) => {
153
+ const model = createModel(config, result);
154
+ model.setExists(true);
155
+ return model;
156
+ });
157
+ };
158
+ const bindUnboundMethods = (model, methods) => {
159
+ const bound = {};
160
+ for (const [name, method] of Object.entries(methods)) {
161
+ bound[name] = (...args) => method(model, ...args);
162
+ }
163
+ return bound;
164
+ };
165
+ const extendModel = (model, methods) => {
166
+ const extended = { ...model };
167
+ for (const [name, method] of Object.entries(methods)) {
168
+ extended[name] = method;
169
+ }
170
+ return extended;
171
+ };
172
+ export function define(config, methodsOrPlan) {
173
+ const isPlan = typeof methodsOrPlan === 'function';
174
+ const attach = (model) => {
175
+ const methods = isPlan
176
+ ? methodsOrPlan(model)
177
+ : bindUnboundMethods(model, methodsOrPlan ?? {});
178
+ return extendModel(model, methods);
179
+ };
180
+ return {
181
+ create: (attributes = {}) => attach(createModel(config, attributes)),
182
+ find: async (id) => {
183
+ const model = await find(config, id);
184
+ return model === null ? null : attach(model);
185
+ },
186
+ all: async () => {
187
+ const models = await all(config);
188
+ return models.map((m) => attach(m));
189
+ },
190
+ query: () => query(config.table, config.connection),
191
+ getTable: () => config.table,
192
+ };
193
+ }
194
+ /**
195
+ * Model namespace - sealed namespace object grouping all model operations
196
+ * Frozen to prevent accidental mutation
197
+ *
198
+ * @see FRAMEWORK_REFACTOR_FUNCTION_PATTERN.md for Pattern 2 details
199
+ */
200
+ export const Model = Object.freeze({
201
+ create: createModel,
202
+ query,
203
+ find,
204
+ all,
205
+ define,
206
+ });
@@ -0,0 +1,52 @@
1
+ /**
2
+ * QueryBuilder - Type-Safe Query Builder
3
+ * Build queries without raw SQL
4
+ */
5
+ import { IDatabase } from './Database';
6
+ export interface WhereClause {
7
+ column: string;
8
+ operator: string;
9
+ value: unknown;
10
+ }
11
+ export interface IQueryBuilder {
12
+ select(...columns: string[]): IQueryBuilder;
13
+ where(column: string, operator: string | number | boolean | null, value?: unknown): IQueryBuilder;
14
+ andWhere(column: string, operator: string, value?: unknown): IQueryBuilder;
15
+ orWhere(column: string, operator: string, value?: unknown): IQueryBuilder;
16
+ join(table: string, on: string): IQueryBuilder;
17
+ leftJoin(table: string, on: string): IQueryBuilder;
18
+ orderBy(column: string, direction?: 'ASC' | 'DESC'): IQueryBuilder;
19
+ limit(count: number): IQueryBuilder;
20
+ offset(count: number): IQueryBuilder;
21
+ getWhereClauses(): WhereClause[];
22
+ getSelectColumns(): string[];
23
+ getTable(): string;
24
+ getLimit(): number | undefined;
25
+ getOffset(): number | undefined;
26
+ getOrderBy(): {
27
+ column: string;
28
+ direction: 'ASC' | 'DESC';
29
+ } | undefined;
30
+ getJoins(): Array<{
31
+ table: string;
32
+ on: string;
33
+ }>;
34
+ isReadOperation(): boolean;
35
+ toSQL(): string;
36
+ getParameters(): unknown[];
37
+ first<T>(): Promise<T | null>;
38
+ get<T>(): Promise<T[]>;
39
+ }
40
+ /**
41
+ * QueryBuilder - Type-Safe Query Builder
42
+ * Sealed namespace object following Pattern 2
43
+ *
44
+ * @see FRAMEWORK_REFACTOR_FUNCTION_PATTERN.md for Pattern 2 details
45
+ */
46
+ export declare const QueryBuilder: Readonly<{
47
+ /**
48
+ * Create a new query builder instance
49
+ */
50
+ create(table: string, db?: IDatabase): IQueryBuilder;
51
+ }>;
52
+ //# sourceMappingURL=QueryBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["../../../src/orm/QueryBuilder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC;IAC5C,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;IAClG,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;IAC3E,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;IAC1E,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,aAAa,CAAC;IACnD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,aAAa,CAAC;IACnE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC;IACpC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC;IACrC,eAAe,IAAI,WAAW,EAAE,CAAC;IACjC,gBAAgB,IAAI,MAAM,EAAE,CAAC;IAC7B,QAAQ,IAAI,MAAM,CAAC;IACnB,QAAQ,IAAI,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,IAAI,MAAM,GAAG,SAAS,CAAC;IAChC,UAAU,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACxE,QAAQ,IAAI,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,eAAe,IAAI,OAAO,CAAC;IAC3B,KAAK,IAAI,MAAM,CAAC;IAChB,aAAa,IAAI,OAAO,EAAE,CAAC;IAC3B,KAAK,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;CACxB;AA2ID;;;;;GAKG;AACH,eAAO,MAAM,YAAY;IACvB;;OAEG;kBACW,MAAM,OAAO,SAAS,GAAG,aAAa;EAUpD,CAAC"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * QueryBuilder - Type-Safe Query Builder
3
+ * Build queries without raw SQL
4
+ */
5
+ import { ErrorFactory } from '../exceptions/ZintrustError';
6
+ /**
7
+ * Escape SQL identifier
8
+ */
9
+ const escapeIdentifier = (id) => `"${id.replaceAll('"', '""')}"`;
10
+ /**
11
+ * Build SELECT clause
12
+ */
13
+ const buildSelectClause = (columns) => columns.map((c) => (c === '*' ? c : escapeIdentifier(c))).join(', ');
14
+ /**
15
+ * Build WHERE clause
16
+ */
17
+ const buildWhereClause = (conditions) => {
18
+ if (conditions.length === 0)
19
+ return '';
20
+ const sql = conditions
21
+ .map((clause) => `${escapeIdentifier(clause.column)} ${clause.operator} ?`)
22
+ .join(' AND ');
23
+ return ` WHERE ${sql}`;
24
+ };
25
+ /**
26
+ * Build ORDER BY clause
27
+ */
28
+ const buildOrderByClause = (orderBy) => {
29
+ if (!orderBy)
30
+ return '';
31
+ return ` ORDER BY ${orderBy.column} ${orderBy.direction}`;
32
+ };
33
+ /**
34
+ * Build LIMIT and OFFSET clause
35
+ */
36
+ const buildLimitOffsetClause = (limit, offset) => {
37
+ let sql = '';
38
+ if (limit !== undefined && limit !== null)
39
+ sql += ` LIMIT ${limit}`;
40
+ if (offset !== undefined && offset !== null)
41
+ sql += ` OFFSET ${offset}`;
42
+ return sql;
43
+ };
44
+ /**
45
+ * Execute query and return first result
46
+ */
47
+ async function executeFirst(builder, db) {
48
+ if (!db)
49
+ throw ErrorFactory.createDatabaseError('Database instance not provided to QueryBuilder');
50
+ builder.limit(1);
51
+ const results = (await db.query(builder.toSQL(), builder.getParameters(), builder.isReadOperation()));
52
+ return results[0] ?? null;
53
+ }
54
+ /**
55
+ * Execute query and return all results
56
+ */
57
+ async function executeGet(builder, db) {
58
+ if (!db)
59
+ throw ErrorFactory.createDatabaseError('Database instance not provided to QueryBuilder');
60
+ return (await db.query(builder.toSQL(), builder.getParameters(), builder.isReadOperation()));
61
+ }
62
+ /**
63
+ * Create the builder object
64
+ */
65
+ function createBuilder(state, db) {
66
+ const builder = {
67
+ select: (...columns) => {
68
+ state.selectColumns = columns.length > 0 ? columns : ['*'];
69
+ return builder;
70
+ },
71
+ where: (column, operator, value) => {
72
+ const finalOperator = value === undefined ? '=' : operator;
73
+ const finalValue = value === undefined ? operator : value;
74
+ state.whereConditions.push({ column, operator: finalOperator, value: finalValue });
75
+ return builder;
76
+ },
77
+ andWhere: (column, operator, value) => builder.where(column, operator, value),
78
+ orWhere: (column, operator, value) => builder.where(column, operator, value),
79
+ join: (tableJoin, on) => {
80
+ state.joins.push({ table: tableJoin, on });
81
+ return builder;
82
+ },
83
+ leftJoin: (tableJoin, on) => builder.join(tableJoin, on),
84
+ orderBy: (column, direction = 'ASC') => {
85
+ state.orderByClause = { column, direction };
86
+ return builder;
87
+ },
88
+ limit: (count) => {
89
+ state.limitValue = count;
90
+ return builder;
91
+ },
92
+ offset: (count) => {
93
+ state.offsetValue = count;
94
+ return builder;
95
+ },
96
+ getWhereClauses: () => state.whereConditions,
97
+ getSelectColumns: () => state.selectColumns,
98
+ getTable: () => state.tableName,
99
+ getLimit: () => state.limitValue,
100
+ getOffset: () => state.offsetValue,
101
+ getOrderBy: () => state.orderByClause,
102
+ getJoins: () => state.joins,
103
+ isReadOperation: () => true,
104
+ toSQL: () => {
105
+ const columns = buildSelectClause(state.selectColumns);
106
+ const tableEscaped = escapeIdentifier(state.tableName);
107
+ return `SELECT ${columns} FROM ${tableEscaped}${buildWhereClause(state.whereConditions)}${buildOrderByClause(state.orderByClause)}${buildLimitOffsetClause(state.limitValue, state.offsetValue)}`;
108
+ },
109
+ getParameters: () => state.whereConditions.map((clause) => clause.value),
110
+ first: async () => executeFirst(builder, db),
111
+ get: async () => executeGet(builder, db),
112
+ };
113
+ return builder;
114
+ }
115
+ /**
116
+ * QueryBuilder - Type-Safe Query Builder
117
+ * Sealed namespace object following Pattern 2
118
+ *
119
+ * @see FRAMEWORK_REFACTOR_FUNCTION_PATTERN.md for Pattern 2 details
120
+ */
121
+ export const QueryBuilder = Object.freeze({
122
+ /**
123
+ * Create a new query builder instance
124
+ */
125
+ create(table, db) {
126
+ const state = {
127
+ tableName: table,
128
+ whereConditions: [],
129
+ selectColumns: ['*'],
130
+ joins: [],
131
+ };
132
+ return createBuilder(state, db);
133
+ },
134
+ });