@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,747 @@
1
+ /**
2
+ * FeatureScaffolder - Generate features within a service
3
+ * Features like authentication, payments, logging, API docs, etc.
4
+ */
5
+ import { FileGenerator } from '../scaffolding/FileGenerator';
6
+ import { Logger } from '../../config/logger';
7
+ import * as path from 'node:path';
8
+ /**
9
+ * FeatureScaffolder adds features to services
10
+ */
11
+ const FEATURE_TEMPLATES = {
12
+ auth: () => generateAuthFeature(),
13
+ logging: () => generateLoggingFeature(),
14
+ payments: () => generatePaymentsFeature(),
15
+ 'api-docs': () => generateApiDocsFeature(),
16
+ email: () => generateEmailFeature(),
17
+ cache: () => generateCacheFeature(),
18
+ queue: () => generateQueueFeature(),
19
+ websocket: () => generateWebSocketFeature(),
20
+ };
21
+ /**
22
+ * Validate feature options
23
+ */
24
+ export function validateOptions(options) {
25
+ const errors = [];
26
+ if (!Object.keys(FEATURE_TEMPLATES).includes(options.name)) {
27
+ errors.push(`Unknown feature '${options.name}'. Supported: ${Object.keys(FEATURE_TEMPLATES).join(', ')}`);
28
+ }
29
+ if (options.servicePath === '' || !FileGenerator.directoryExists(options.servicePath)) {
30
+ errors.push(`Service path does not exist: ${options.servicePath}`);
31
+ }
32
+ return {
33
+ valid: errors.length === 0,
34
+ errors,
35
+ };
36
+ }
37
+ /**
38
+ * Get available features
39
+ */
40
+ export function getAvailableFeatures() {
41
+ return Object.keys(FEATURE_TEMPLATES);
42
+ }
43
+ /**
44
+ * Add feature to service
45
+ */
46
+ export function addFeature(options) {
47
+ try {
48
+ const validation = validateOptions(options);
49
+ if (validation.valid === false) {
50
+ return {
51
+ success: false,
52
+ featureName: options.name,
53
+ filesCreated: [],
54
+ message: `Validation failed: ${validation.errors.join(', ')}`,
55
+ };
56
+ }
57
+ const featureDir = prepareFeatureDirectory(options);
58
+ if (typeof featureDir === 'string' && featureDir.startsWith('Error:')) {
59
+ return {
60
+ success: false,
61
+ featureName: options.name,
62
+ filesCreated: [],
63
+ message: featureDir.replace('Error: ', ''),
64
+ };
65
+ }
66
+ const filesCreated = generateFeatureFiles(options, featureDir);
67
+ Logger.info(`✅ Added feature '${options.name}' with ${filesCreated.length} files`);
68
+ return {
69
+ success: true,
70
+ featureName: options.name,
71
+ filesCreated,
72
+ message: `Feature '${options.name}' added successfully`,
73
+ };
74
+ }
75
+ catch (error) {
76
+ Logger.error('Feature scaffolding error', error);
77
+ const errorMsg = error instanceof Error ? error.message : String(error);
78
+ return {
79
+ success: false,
80
+ featureName: options.name,
81
+ filesCreated: [],
82
+ message: `Failed to add feature: ${errorMsg}`,
83
+ };
84
+ }
85
+ }
86
+ /**
87
+ * Prepare feature directory
88
+ */
89
+ function prepareFeatureDirectory(options) {
90
+ const featuresDir = path.join(options.servicePath, 'src', 'features');
91
+ FileGenerator.createDirectory(featuresDir);
92
+ const featureDir = path.join(featuresDir, options.name);
93
+ if (FileGenerator.directoryExists(featureDir)) {
94
+ return `Error: Feature '${options.name}' already exists at ${featureDir}`;
95
+ }
96
+ FileGenerator.createDirectory(featureDir);
97
+ return featureDir;
98
+ }
99
+ /**
100
+ * Generate feature files
101
+ */
102
+ function generateFeatureFiles(options, featureDir) {
103
+ const filesCreated = [];
104
+ const generator = FEATURE_TEMPLATES[options.name];
105
+ if (generator === undefined) {
106
+ return [];
107
+ }
108
+ const featureContent = generator();
109
+ const featurePath = path.join(featureDir, 'index.ts');
110
+ FileGenerator.writeFile(featurePath, featureContent);
111
+ filesCreated.push(featurePath);
112
+ if (options.withTest === true) {
113
+ const testPath = path.join(featureDir, `${options.name}.test.ts`);
114
+ FileGenerator.writeFile(testPath, generateFeatureTest(options.name));
115
+ filesCreated.push(testPath);
116
+ }
117
+ const readmePath = path.join(featureDir, 'README.md');
118
+ FileGenerator.writeFile(readmePath, generateFeatureReadme(options.name));
119
+ filesCreated.push(readmePath);
120
+ return filesCreated;
121
+ }
122
+ // Feature generators
123
+ function generateAuthFeature() {
124
+ return AUTH_TEMPLATE;
125
+ }
126
+ function generatePaymentsFeature() {
127
+ return PAYMENTS_TEMPLATE;
128
+ }
129
+ function generateLoggingFeature() {
130
+ return LOGGING_TEMPLATE;
131
+ }
132
+ function generateApiDocsFeature() {
133
+ return API_DOCS_TEMPLATE;
134
+ }
135
+ function generateEmailFeature() {
136
+ return EMAIL_TEMPLATE;
137
+ }
138
+ function generateCacheFeature() {
139
+ return CACHE_TEMPLATE;
140
+ }
141
+ function generateQueueFeature() {
142
+ return QUEUE_TEMPLATE;
143
+ }
144
+ function generateWebSocketFeature() {
145
+ return WEBSOCKET_TEMPLATE;
146
+ }
147
+ const AUTH_TEMPLATE = `/**
148
+ * Authentication Feature
149
+ * Provides JWT and session management
150
+ */
151
+
152
+ import jwt from 'jsonwebtoken';
153
+
154
+ export interface AuthConfig {
155
+ secret: string;
156
+ expiresIn: string;
157
+ algorithm: 'HS256' | 'HS512';
158
+ }
159
+
160
+ /**
161
+ * AuthService - Pure Functional Object
162
+ */
163
+ export const AuthService = {
164
+ /**
165
+ * Create a new auth service instance
166
+ */
167
+ create(config: AuthConfig) {
168
+ return {
169
+ /**
170
+ * Generate JWT token
171
+ */
172
+ generateToken(payload: Record<string, unknown>): string {
173
+ return jwt.sign(payload, config.secret, {
174
+ expiresIn: config.expiresIn,
175
+ algorithm: config.algorithm,
176
+ });
177
+ },
178
+
179
+ /**
180
+ * Verify JWT token
181
+ */
182
+ verifyToken(token: string): Record<string, unknown> | null {
183
+ try {
184
+ return jwt.verify(token, config.secret) as Record<string, unknown>;
185
+ } catch {
186
+ return null;
187
+ }
188
+ },
189
+
190
+ /**
191
+ * Decode token (without verification)
192
+ */
193
+ decodeToken(token: string): Record<string, unknown> | null {
194
+ try {
195
+ return jwt.decode(token) as Record<string, unknown> | null;
196
+ } catch {
197
+ return null;
198
+ }
199
+ }
200
+ };
201
+ }
202
+ };
203
+
204
+ export default AuthService;
205
+ `;
206
+ const PAYMENTS_TEMPLATE = `/**
207
+ * Payments Feature
208
+ * Handles payment processing and transactions
209
+ */
210
+
211
+ import { randomBytes } from 'node:crypto';
212
+
213
+ export interface PaymentConfig {
214
+ provider: 'stripe' | 'paypal' | 'square';
215
+ apiKey: string;
216
+ webhookSecret?: string;
217
+ }
218
+
219
+ export interface Payment {
220
+ id: string;
221
+ amount: number;
222
+ currency: string;
223
+ status: 'pending' | 'completed' | 'failed' | 'refunded';
224
+ method: string;
225
+ createdAt: Date;
226
+ }
227
+
228
+ /**
229
+ * PaymentService - Pure Functional Object
230
+ */
231
+ export const PaymentService = {
232
+ /**
233
+ * Create a new payment service instance
234
+ */
235
+ create(config: PaymentConfig) {
236
+ return {
237
+ /**
238
+ * Process payment
239
+ */
240
+ async processPayment(payment: Payment): Promise<{ success: boolean; transactionId?: string }> {
241
+ // Implementation depends on provider
242
+ return { success: true, transactionId: 'txn_' + randomBytes(8).toString('hex') };
243
+ },
244
+
245
+ /**
246
+ * Refund payment
247
+ */
248
+ async refundPayment(transactionId: string): Promise<{ success: boolean }> {
249
+ return { success: true };
250
+ },
251
+
252
+ /**
253
+ * Get payment status
254
+ */
255
+ async getStatus(transactionId: string): Promise<Payment | null> {
256
+ return null;
257
+ }
258
+ };
259
+ }
260
+ };
261
+
262
+ export default PaymentService;
263
+ `;
264
+ const LOGGING_TEMPLATE = `/**
265
+ * Logging Feature
266
+ * Structured logging with multiple transports
267
+ */
268
+
269
+ import { Logger } from '../../config/logger';
270
+
271
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
272
+
273
+ export interface LogEntry {
274
+ timestamp: Date;
275
+ level: LogLevel;
276
+ message: string;
277
+ context?: Record<string, unknown>;
278
+ }
279
+
280
+ /**
281
+ * LoggingService - Pure Functional Object
282
+ */
283
+ export const LoggingService = {
284
+ /**
285
+ * Create a new logging service instance
286
+ */
287
+ create() {
288
+ let logs: LogEntry[] = [];
289
+
290
+ return {
291
+ /**
292
+ * Log message
293
+ */
294
+ log(level: LogLevel, message: string, context?: Record<string, unknown>): void {
295
+ const entry: LogEntry = {
296
+ timestamp: new Date(),
297
+ level,
298
+ message,
299
+ context,
300
+ };
301
+
302
+ logs.push(entry);
303
+
304
+ if (level === 'error') {
305
+ Logger.error(message, context);
306
+ } else if (level === 'warn') {
307
+ Logger.warn(message, context);
308
+ } else {
309
+ Logger.info(message, context);
310
+ }
311
+ },
312
+
313
+ /**
314
+ * Get logs
315
+ */
316
+ getLogs(level?: LogLevel, limit: number = 100): LogEntry[] {
317
+ let filtered = logs;
318
+ if (level !== undefined) {
319
+ filtered = filtered.filter((log) => log.level === level);
320
+ }
321
+ return filtered.slice(-limit);
322
+ },
323
+
324
+ /**
325
+ * Clear logs
326
+ */
327
+ clear(): void {
328
+ logs = [];
329
+ }
330
+ };
331
+ }
332
+ };
333
+
334
+ export default LoggingService;
335
+ `;
336
+ const API_DOCS_TEMPLATE = `/**
337
+ * API Documentation Feature
338
+ * Generates OpenAPI/Swagger documentation
339
+ */
340
+
341
+ export interface ApiEndpoint {
342
+ path: string;
343
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
344
+ description: string;
345
+ parameters?: Record<string, unknown>;
346
+ requestBody?: Record<string, unknown>;
347
+ responses: Record<string, unknown>;
348
+ tags?: string[];
349
+ }
350
+
351
+ /**
352
+ * ApiDocService - Pure Functional Object
353
+ */
354
+ export const ApiDocService = {
355
+ /**
356
+ * Create a new API doc service instance
357
+ */
358
+ create() {
359
+ let endpoints: ApiEndpoint[] = [];
360
+
361
+ const service = {
362
+ /**
363
+ * Register endpoint
364
+ */
365
+ registerEndpoint(endpoint: ApiEndpoint): void {
366
+ endpoints.push(endpoint);
367
+ },
368
+
369
+ /**
370
+ * Generate OpenAPI spec
371
+ */
372
+ generateOpenApiSpec(): Record<string, unknown> {
373
+ return {
374
+ openapi: '3.0.0',
375
+ info: {
376
+ title: 'Service API',
377
+ version: '1.0.0',
378
+ },
379
+ paths: service.groupByPath(),
380
+ };
381
+ },
382
+
383
+ /**
384
+ * Generate Swagger/OpenAPI HTML
385
+ */
386
+ generateSwaggerHtml(): string {
387
+ const spec = service.generateOpenApiSpec();
388
+ return \`<html>
389
+ <body>
390
+ <div id="swagger-ui"></div>
391
+ <script>
392
+ window.onload = function() {
393
+ window.ui = SwaggerUIBundle({
394
+ spec: \${JSON.stringify(spec)},
395
+ dom_id: '#swagger-ui',
396
+ });
397
+ };
398
+ </script>
399
+ </body>
400
+ </html>\`;
401
+ },
402
+
403
+ groupByPath(): Record<string, unknown> {
404
+ const grouped: Record<string, unknown> = {};
405
+ for (const endpoint of endpoints) {
406
+ if (grouped[endpoint.path] === undefined) {
407
+ grouped[endpoint.path] = {};
408
+ }
409
+ grouped[endpoint.path][endpoint.method.toLowerCase()] = {
410
+ description: endpoint.description,
411
+ parameters: endpoint.parameters,
412
+ requestBody: endpoint.requestBody,
413
+ responses: endpoint.responses,
414
+ tags: endpoint.tags,
415
+ };
416
+ }
417
+ return grouped;
418
+ }
419
+ };
420
+
421
+ return service;
422
+ }
423
+ };
424
+
425
+ export default ApiDocService;
426
+ `;
427
+ const EMAIL_TEMPLATE = `/**
428
+ * Email Feature
429
+ * Handles email sending
430
+ */
431
+
432
+ import { randomBytes } from 'node:crypto';
433
+
434
+ export interface EmailConfig {
435
+ provider: 'sendgrid' | 'mailgun' | 'nodemailer';
436
+ apiKey?: string;
437
+ fromAddress: string;
438
+ }
439
+
440
+ export interface EmailMessage {
441
+ to: string | string[];
442
+ subject: string;
443
+ html: string;
444
+ text?: string;
445
+ attachments?: Array<{ filename: string; content: string }>;
446
+ }
447
+
448
+ /**
449
+ * EmailService - Pure Functional Object
450
+ */
451
+ export const EmailService = {
452
+ /**
453
+ * Create a new email service instance
454
+ */
455
+ create(config: EmailConfig) {
456
+ return {
457
+ /**
458
+ * Send email
459
+ */
460
+ async send(message: EmailMessage): Promise<{ success: boolean; messageId?: string }> {
461
+ // Implementation depends on provider
462
+ return { success: true, messageId: 'msg_' + randomBytes(8).toString('hex') };
463
+ },
464
+
465
+ /**
466
+ * Send template email
467
+ */
468
+ async sendTemplate(
469
+ to: string,
470
+ template: string,
471
+ data: Record<string, unknown>
472
+ ): Promise<{ success: boolean }> {
473
+ return { success: true };
474
+ }
475
+ };
476
+ }
477
+ };
478
+
479
+ export default EmailService;
480
+ `;
481
+ const CACHE_TEMPLATE = `/**
482
+ * Cache Feature
483
+ * In-memory and distributed caching
484
+ */
485
+
486
+ export interface CacheConfig {
487
+ ttl: number; // Time to live in seconds
488
+ maxSize?: number; // Max cache entries
489
+ backend?: 'memory' | 'redis';
490
+ }
491
+
492
+ /**
493
+ * CacheService - Pure Functional Object
494
+ */
495
+ export const CacheService = {
496
+ /**
497
+ * Create a new cache service instance
498
+ */
499
+ create(config: CacheConfig) {
500
+ let cache = new Map<string, { value: unknown; expiresAt: number }>();
501
+
502
+ return {
503
+ /**
504
+ * Get cached value
505
+ */
506
+ get<T>(key: string): T | null {
507
+ const entry = cache.get(key);
508
+ if (entry === undefined) return null;
509
+
510
+ if (Date.now() > entry.expiresAt) {
511
+ cache.delete(key);
512
+ return null;
513
+ }
514
+
515
+ return entry.value as T;
516
+ },
517
+
518
+ /**
519
+ * Set cache value
520
+ */
521
+ set<T>(key: string, value: T): void {
522
+ const expiresAt = Date.now() + config.ttl * 1000;
523
+ cache.set(key, { value, expiresAt });
524
+ },
525
+
526
+ /**
527
+ * Delete cache entry
528
+ */
529
+ delete(key: string): boolean {
530
+ return cache.delete(key);
531
+ },
532
+
533
+ /**
534
+ * Clear all cache
535
+ */
536
+ clear(): void {
537
+ cache.clear();
538
+ }
539
+ };
540
+ }
541
+ };
542
+
543
+ export default CacheService;
544
+ `;
545
+ const QUEUE_TEMPLATE = `/**
546
+ * Queue Feature
547
+ * Job queue processing
548
+ */
549
+
550
+ import { randomBytes } from 'node:crypto';
551
+
552
+ export interface Job {
553
+ id: string;
554
+ name: string;
555
+ data: Record<string, unknown>;
556
+ status: 'pending' | 'processing' | 'completed' | 'failed';
557
+ createdAt: Date;
558
+ processedAt?: Date;
559
+ }
560
+
561
+ export interface QueueConfig {
562
+ backend: 'memory' | 'redis' | 'rabbitmq';
563
+ concurrency?: number;
564
+ }
565
+
566
+ /**
567
+ * QueueService - Pure Functional Object
568
+ */
569
+ export const QueueService = {
570
+ /**
571
+ * Create a new queue service instance
572
+ */
573
+ create(config: QueueConfig) {
574
+ let jobs: Job[] = [];
575
+ let processing = false;
576
+
577
+ const service = {
578
+ /**
579
+ * Add job to queue
580
+ */
581
+ async enqueue(name: string, data: Record<string, unknown>): Promise<Job> {
582
+ const job: Job = {
583
+ id: 'job_' + randomBytes(8).toString('hex'),
584
+ name,
585
+ data,
586
+ status: 'pending',
587
+ createdAt: new Date(),
588
+ };
589
+
590
+ jobs.push(job);
591
+ service.processQueue();
592
+ return job;
593
+ },
594
+
595
+ /**
596
+ * Get job status
597
+ */
598
+ getJob(id: string): Job | undefined {
599
+ return jobs.find((job) => job.id === id);
600
+ },
601
+
602
+ processQueue(): void {
603
+ if (processing === true) return;
604
+ processing = true;
605
+
606
+ // Process queue
607
+ const pendingJobs = jobs.filter((job) => job.status === 'pending');
608
+ for (const job of pendingJobs) {
609
+ job.status = 'completed';
610
+ job.processedAt = new Date();
611
+ }
612
+
613
+ processing = false;
614
+ }
615
+ };
616
+
617
+ return service;
618
+ }
619
+ };
620
+
621
+ export default QueueService;
622
+ `;
623
+ const WEBSOCKET_TEMPLATE = `/**
624
+ * WebSocket Feature
625
+ * Real-time communication
626
+ */
627
+
628
+ export interface WebSocketConfig {
629
+ port?: number;
630
+ cors?: { origin: string | string[] };
631
+ }
632
+
633
+ export interface SocketMessage {
634
+ event: string;
635
+ data: unknown;
636
+ timestamp: Date;
637
+ }
638
+
639
+ /**
640
+ * WebSocketService - Pure Functional Object
641
+ */
642
+ export const WebSocketService = {
643
+ /**
644
+ * Create a new websocket service instance
645
+ */
646
+ create() {
647
+ let listeners: Map<string, Set<(data: unknown) => void>> = new Map();
648
+
649
+ return {
650
+ /**
651
+ * Listen for event
652
+ */
653
+ on(event: string, callback: (data: unknown) => void): void {
654
+ if (listeners.has(event) === false) {
655
+ listeners.set(event, new Set());
656
+ }
657
+ listeners.get(event)?.add(callback);
658
+ },
659
+
660
+ /**
661
+ * Emit event
662
+ */
663
+ emit(event: string, data: unknown): void {
664
+ const callbacks = listeners.get(event);
665
+ if (callbacks !== undefined) {
666
+ for (const callback of callbacks) {
667
+ callback(data);
668
+ }
669
+ }
670
+ },
671
+
672
+ /**
673
+ * Stop listening
674
+ */
675
+ off(event: string, callback: (data: unknown) => void): void {
676
+ const callbacks = listeners.get(event);
677
+ if (callbacks !== undefined) {
678
+ callbacks.delete(callback);
679
+ }
680
+ }
681
+ };
682
+ }
683
+ };
684
+
685
+ export default WebSocketService;
686
+ `;
687
+ /**
688
+ * Generate feature test
689
+ */
690
+ function generateFeatureTest(_name) {
691
+ return `/**
692
+ * \${name} Feature Tests
693
+ */
694
+
695
+ import { describe, it, expect, beforeEach } from 'vitest';
696
+
697
+ describe('\${name} Feature', () => {
698
+ beforeEach(() => {
699
+ // Setup
700
+ });
701
+
702
+ it('should initialize successfully', () => {
703
+ expect(true).toBe(true);
704
+ });
705
+
706
+ it('should perform core functionality', () => {
707
+ expect(true).toBe(true);
708
+ });
709
+ });
710
+ `;
711
+ }
712
+ /**
713
+ * Generate feature README
714
+ */
715
+ function generateFeatureReadme(_name) {
716
+ return `# \${name.charAt(0).toUpperCase()}\${name.slice(1)} Feature
717
+
718
+ This feature provides \${name} functionality for the service.
719
+
720
+ ## Usage
721
+
722
+ \`\`\`typescript
723
+ import \${name}Service from './index';
724
+
725
+ const service = \${name}Service.create(config);
726
+ // Use service...
727
+ \`\`\`
728
+
729
+ ## Configuration
730
+
731
+ See service configuration for settings related to this feature.
732
+
733
+ ## Testing
734
+
735
+ \`\`\`bash
736
+ npm test -- \${name}.test.ts
737
+ \`\`\`
738
+ `;
739
+ }
740
+ /**
741
+ * FeatureScaffolder adds features to services
742
+ */
743
+ export const FeatureScaffolder = Object.freeze({
744
+ validateOptions,
745
+ getAvailableFeatures,
746
+ addFeature,
747
+ });