@engjts/nexus 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 (843) hide show
  1. package/README.md +164 -0
  2. package/dist/advanced/cache/InMemoryCacheStore.d.ts +18 -0
  3. package/dist/advanced/cache/InMemoryCacheStore.d.ts.map +1 -0
  4. package/dist/advanced/cache/InMemoryCacheStore.js +60 -0
  5. package/dist/advanced/cache/InMemoryCacheStore.js.map +1 -0
  6. package/dist/advanced/cache/MultiTierCache.d.ts +55 -0
  7. package/dist/advanced/cache/MultiTierCache.d.ts.map +1 -0
  8. package/dist/advanced/cache/MultiTierCache.js +159 -0
  9. package/dist/advanced/cache/MultiTierCache.js.map +1 -0
  10. package/dist/advanced/cache/RedisCacheStore.d.ts +153 -0
  11. package/dist/advanced/cache/RedisCacheStore.d.ts.map +1 -0
  12. package/dist/advanced/cache/RedisCacheStore.js +247 -0
  13. package/dist/advanced/cache/RedisCacheStore.js.map +1 -0
  14. package/dist/advanced/cache/index.d.ts +6 -0
  15. package/dist/advanced/cache/index.d.ts.map +1 -0
  16. package/dist/advanced/cache/index.js +26 -0
  17. package/dist/advanced/cache/index.js.map +1 -0
  18. package/dist/advanced/cache/types.d.ts +35 -0
  19. package/dist/advanced/cache/types.d.ts.map +1 -0
  20. package/dist/advanced/cache/types.js +3 -0
  21. package/dist/advanced/cache/types.js.map +1 -0
  22. package/dist/advanced/graphql/SimpleDataLoader.d.ts +8 -0
  23. package/dist/advanced/graphql/SimpleDataLoader.d.ts.map +1 -0
  24. package/dist/advanced/graphql/SimpleDataLoader.js +43 -0
  25. package/dist/advanced/graphql/SimpleDataLoader.js.map +1 -0
  26. package/dist/advanced/graphql/index.d.ts +15 -0
  27. package/dist/advanced/graphql/index.d.ts.map +1 -0
  28. package/dist/advanced/graphql/index.js +19 -0
  29. package/dist/advanced/graphql/index.js.map +1 -0
  30. package/dist/advanced/graphql/server.d.ts +23 -0
  31. package/dist/advanced/graphql/server.d.ts.map +1 -0
  32. package/dist/advanced/graphql/server.js +208 -0
  33. package/dist/advanced/graphql/server.js.map +1 -0
  34. package/dist/advanced/graphql/types.d.ts +45 -0
  35. package/dist/advanced/graphql/types.d.ts.map +1 -0
  36. package/dist/advanced/graphql/types.js +3 -0
  37. package/dist/advanced/graphql/types.js.map +1 -0
  38. package/dist/advanced/jobs/InMemoryQueueStore.d.ts +14 -0
  39. package/dist/advanced/jobs/InMemoryQueueStore.d.ts.map +1 -0
  40. package/dist/advanced/jobs/InMemoryQueueStore.js +59 -0
  41. package/dist/advanced/jobs/InMemoryQueueStore.js.map +1 -0
  42. package/dist/advanced/jobs/JobQueue.d.ts +178 -0
  43. package/dist/advanced/jobs/JobQueue.d.ts.map +1 -0
  44. package/dist/advanced/jobs/JobQueue.js +440 -0
  45. package/dist/advanced/jobs/JobQueue.js.map +1 -0
  46. package/dist/advanced/jobs/RedisQueueStore.d.ts +157 -0
  47. package/dist/advanced/jobs/RedisQueueStore.d.ts.map +1 -0
  48. package/dist/advanced/jobs/RedisQueueStore.js +264 -0
  49. package/dist/advanced/jobs/RedisQueueStore.js.map +1 -0
  50. package/dist/advanced/jobs/index.d.ts +6 -0
  51. package/dist/advanced/jobs/index.d.ts.map +1 -0
  52. package/dist/advanced/jobs/index.js +26 -0
  53. package/dist/advanced/jobs/index.js.map +1 -0
  54. package/dist/advanced/jobs/types.d.ts +64 -0
  55. package/dist/advanced/jobs/types.d.ts.map +1 -0
  56. package/dist/advanced/jobs/types.js +3 -0
  57. package/dist/advanced/jobs/types.js.map +1 -0
  58. package/dist/advanced/observability/APMManager.d.ts +64 -0
  59. package/dist/advanced/observability/APMManager.d.ts.map +1 -0
  60. package/dist/advanced/observability/APMManager.js +150 -0
  61. package/dist/advanced/observability/APMManager.js.map +1 -0
  62. package/dist/advanced/observability/AlertManager.d.ts +30 -0
  63. package/dist/advanced/observability/AlertManager.d.ts.map +1 -0
  64. package/dist/advanced/observability/AlertManager.js +98 -0
  65. package/dist/advanced/observability/AlertManager.js.map +1 -0
  66. package/dist/advanced/observability/MetricRegistry.d.ts +37 -0
  67. package/dist/advanced/observability/MetricRegistry.d.ts.map +1 -0
  68. package/dist/advanced/observability/MetricRegistry.js +129 -0
  69. package/dist/advanced/observability/MetricRegistry.js.map +1 -0
  70. package/dist/advanced/observability/ObservabilityCenter.d.ts +113 -0
  71. package/dist/advanced/observability/ObservabilityCenter.d.ts.map +1 -0
  72. package/dist/advanced/observability/ObservabilityCenter.js +266 -0
  73. package/dist/advanced/observability/ObservabilityCenter.js.map +1 -0
  74. package/dist/advanced/observability/StructuredLogger.d.ts +25 -0
  75. package/dist/advanced/observability/StructuredLogger.d.ts.map +1 -0
  76. package/dist/advanced/observability/StructuredLogger.js +137 -0
  77. package/dist/advanced/observability/StructuredLogger.js.map +1 -0
  78. package/dist/advanced/observability/TracingManager.d.ts +31 -0
  79. package/dist/advanced/observability/TracingManager.d.ts.map +1 -0
  80. package/dist/advanced/observability/TracingManager.js +105 -0
  81. package/dist/advanced/observability/TracingManager.js.map +1 -0
  82. package/dist/advanced/observability/adapters.d.ts +134 -0
  83. package/dist/advanced/observability/adapters.d.ts.map +1 -0
  84. package/dist/advanced/observability/adapters.js +257 -0
  85. package/dist/advanced/observability/adapters.js.map +1 -0
  86. package/dist/advanced/observability/createObservabilityMiddleware.d.ts +8 -0
  87. package/dist/advanced/observability/createObservabilityMiddleware.d.ts.map +1 -0
  88. package/dist/advanced/observability/createObservabilityMiddleware.js +46 -0
  89. package/dist/advanced/observability/createObservabilityMiddleware.js.map +1 -0
  90. package/dist/advanced/observability/index.d.ts +2 -0
  91. package/dist/advanced/observability/index.d.ts.map +1 -0
  92. package/dist/advanced/observability/index.js +13 -0
  93. package/dist/advanced/observability/index.js.map +1 -0
  94. package/dist/advanced/observability/types.d.ts +182 -0
  95. package/dist/advanced/observability/types.d.ts.map +1 -0
  96. package/dist/advanced/observability/types.js +3 -0
  97. package/dist/advanced/observability/types.js.map +1 -0
  98. package/dist/advanced/playground/extractPathParams.d.ts +4 -0
  99. package/dist/advanced/playground/extractPathParams.d.ts.map +1 -0
  100. package/dist/advanced/playground/extractPathParams.js +8 -0
  101. package/dist/advanced/playground/extractPathParams.js.map +1 -0
  102. package/dist/advanced/playground/generateFieldExample.d.ts +2 -0
  103. package/dist/advanced/playground/generateFieldExample.d.ts.map +1 -0
  104. package/dist/advanced/playground/generateFieldExample.js +40 -0
  105. package/dist/advanced/playground/generateFieldExample.js.map +1 -0
  106. package/dist/advanced/playground/generatePlaygroundHTML.d.ts +3 -0
  107. package/dist/advanced/playground/generatePlaygroundHTML.d.ts.map +1 -0
  108. package/dist/advanced/playground/generatePlaygroundHTML.js +1848 -0
  109. package/dist/advanced/playground/generatePlaygroundHTML.js.map +1 -0
  110. package/dist/advanced/playground/generateSummary.d.ts +3 -0
  111. package/dist/advanced/playground/generateSummary.d.ts.map +1 -0
  112. package/dist/advanced/playground/generateSummary.js +19 -0
  113. package/dist/advanced/playground/generateSummary.js.map +1 -0
  114. package/dist/advanced/playground/getTagFromPath.d.ts +2 -0
  115. package/dist/advanced/playground/getTagFromPath.d.ts.map +1 -0
  116. package/dist/advanced/playground/getTagFromPath.js +11 -0
  117. package/dist/advanced/playground/getTagFromPath.js.map +1 -0
  118. package/dist/advanced/playground/index.d.ts +7 -0
  119. package/dist/advanced/playground/index.d.ts.map +1 -0
  120. package/dist/advanced/playground/index.js +10 -0
  121. package/dist/advanced/playground/index.js.map +1 -0
  122. package/dist/advanced/playground/playground.d.ts +4 -0
  123. package/dist/advanced/playground/playground.d.ts.map +1 -0
  124. package/dist/advanced/playground/playground.js +139 -0
  125. package/dist/advanced/playground/playground.js.map +1 -0
  126. package/dist/advanced/playground/types.d.ts +18 -0
  127. package/dist/advanced/playground/types.d.ts.map +1 -0
  128. package/dist/advanced/playground/types.js +3 -0
  129. package/dist/advanced/playground/types.js.map +1 -0
  130. package/dist/advanced/playground/zodToExample.d.ts +2 -0
  131. package/dist/advanced/playground/zodToExample.d.ts.map +1 -0
  132. package/dist/advanced/playground/zodToExample.js +22 -0
  133. package/dist/advanced/playground/zodToExample.js.map +1 -0
  134. package/dist/advanced/playground/zodToParams.d.ts +5 -0
  135. package/dist/advanced/playground/zodToParams.d.ts.map +1 -0
  136. package/dist/advanced/playground/zodToParams.js +18 -0
  137. package/dist/advanced/playground/zodToParams.js.map +1 -0
  138. package/dist/advanced/postman/buildAuth.d.ts +3 -0
  139. package/dist/advanced/postman/buildAuth.d.ts.map +1 -0
  140. package/dist/advanced/postman/buildAuth.js +32 -0
  141. package/dist/advanced/postman/buildAuth.js.map +1 -0
  142. package/dist/advanced/postman/buildBody.d.ts +3 -0
  143. package/dist/advanced/postman/buildBody.d.ts.map +1 -0
  144. package/dist/advanced/postman/buildBody.js +15 -0
  145. package/dist/advanced/postman/buildBody.js.map +1 -0
  146. package/dist/advanced/postman/buildQueryParams.d.ts +3 -0
  147. package/dist/advanced/postman/buildQueryParams.d.ts.map +1 -0
  148. package/dist/advanced/postman/buildQueryParams.js +26 -0
  149. package/dist/advanced/postman/buildQueryParams.js.map +1 -0
  150. package/dist/advanced/postman/buildRequestItem.d.ts +3 -0
  151. package/dist/advanced/postman/buildRequestItem.d.ts.map +1 -0
  152. package/dist/advanced/postman/buildRequestItem.js +33 -0
  153. package/dist/advanced/postman/buildRequestItem.js.map +1 -0
  154. package/dist/advanced/postman/buildResponses.d.ts +3 -0
  155. package/dist/advanced/postman/buildResponses.d.ts.map +1 -0
  156. package/dist/advanced/postman/buildResponses.js +12 -0
  157. package/dist/advanced/postman/buildResponses.js.map +1 -0
  158. package/dist/advanced/postman/buildUrl.d.ts +3 -0
  159. package/dist/advanced/postman/buildUrl.d.ts.map +1 -0
  160. package/dist/advanced/postman/buildUrl.js +30 -0
  161. package/dist/advanced/postman/buildUrl.js.map +1 -0
  162. package/dist/advanced/postman/capitalize.d.ts +2 -0
  163. package/dist/advanced/postman/capitalize.d.ts.map +1 -0
  164. package/dist/advanced/postman/capitalize.js +7 -0
  165. package/dist/advanced/postman/capitalize.js.map +1 -0
  166. package/dist/advanced/postman/generateCollection.d.ts +3 -0
  167. package/dist/advanced/postman/generateCollection.d.ts.map +1 -0
  168. package/dist/advanced/postman/generateCollection.js +50 -0
  169. package/dist/advanced/postman/generateCollection.js.map +1 -0
  170. package/dist/advanced/postman/generateEnvironment.d.ts +3 -0
  171. package/dist/advanced/postman/generateEnvironment.d.ts.map +1 -0
  172. package/dist/advanced/postman/generateEnvironment.js +33 -0
  173. package/dist/advanced/postman/generateEnvironment.js.map +1 -0
  174. package/dist/advanced/postman/generateExampleFromZod.d.ts +2 -0
  175. package/dist/advanced/postman/generateExampleFromZod.d.ts.map +1 -0
  176. package/dist/advanced/postman/generateExampleFromZod.js +22 -0
  177. package/dist/advanced/postman/generateExampleFromZod.js.map +1 -0
  178. package/dist/advanced/postman/generateFieldExample.d.ts +2 -0
  179. package/dist/advanced/postman/generateFieldExample.d.ts.map +1 -0
  180. package/dist/advanced/postman/generateFieldExample.js +55 -0
  181. package/dist/advanced/postman/generateFieldExample.js.map +1 -0
  182. package/dist/advanced/postman/generateName.d.ts +3 -0
  183. package/dist/advanced/postman/generateName.d.ts.map +1 -0
  184. package/dist/advanced/postman/generateName.js +19 -0
  185. package/dist/advanced/postman/generateName.js.map +1 -0
  186. package/dist/advanced/postman/generateUUID.d.ts +2 -0
  187. package/dist/advanced/postman/generateUUID.d.ts.map +1 -0
  188. package/dist/advanced/postman/generateUUID.js +14 -0
  189. package/dist/advanced/postman/generateUUID.js.map +1 -0
  190. package/dist/advanced/postman/getTagFromPath.d.ts +2 -0
  191. package/dist/advanced/postman/getTagFromPath.d.ts.map +1 -0
  192. package/dist/advanced/postman/getTagFromPath.js +12 -0
  193. package/dist/advanced/postman/getTagFromPath.js.map +1 -0
  194. package/dist/advanced/postman/index.d.ts +28 -0
  195. package/dist/advanced/postman/index.d.ts.map +1 -0
  196. package/dist/advanced/postman/index.js +30 -0
  197. package/dist/advanced/postman/index.js.map +1 -0
  198. package/dist/advanced/postman/postman.d.ts +7 -0
  199. package/dist/advanced/postman/postman.d.ts.map +1 -0
  200. package/dist/advanced/postman/postman.js +138 -0
  201. package/dist/advanced/postman/postman.js.map +1 -0
  202. package/dist/advanced/postman/slugify.d.ts +2 -0
  203. package/dist/advanced/postman/slugify.d.ts.map +1 -0
  204. package/dist/advanced/postman/slugify.js +10 -0
  205. package/dist/advanced/postman/slugify.js.map +1 -0
  206. package/dist/advanced/postman/types.d.ts +133 -0
  207. package/dist/advanced/postman/types.d.ts.map +1 -0
  208. package/dist/advanced/postman/types.js +3 -0
  209. package/dist/advanced/postman/types.js.map +1 -0
  210. package/dist/advanced/realtime/index.d.ts +13 -0
  211. package/dist/advanced/realtime/index.d.ts.map +1 -0
  212. package/dist/advanced/realtime/index.js +17 -0
  213. package/dist/advanced/realtime/index.js.map +1 -0
  214. package/dist/advanced/realtime/websocket.d.ts +60 -0
  215. package/dist/advanced/realtime/websocket.d.ts.map +1 -0
  216. package/dist/advanced/realtime/websocket.js +197 -0
  217. package/dist/advanced/realtime/websocket.js.map +1 -0
  218. package/dist/advanced/sentry/index.d.ts +287 -0
  219. package/dist/advanced/sentry/index.d.ts.map +1 -0
  220. package/dist/advanced/sentry/index.js +1002 -0
  221. package/dist/advanced/sentry/index.js.map +1 -0
  222. package/dist/advanced/sentry/types.d.ts +298 -0
  223. package/dist/advanced/sentry/types.d.ts.map +1 -0
  224. package/dist/advanced/sentry/types.js +6 -0
  225. package/dist/advanced/sentry/types.js.map +1 -0
  226. package/dist/advanced/static/generateDirectoryListing.d.ts +5 -0
  227. package/dist/advanced/static/generateDirectoryListing.d.ts.map +1 -0
  228. package/dist/advanced/static/generateDirectoryListing.js +44 -0
  229. package/dist/advanced/static/generateDirectoryListing.js.map +1 -0
  230. package/dist/advanced/static/generateETag.d.ts +8 -0
  231. package/dist/advanced/static/generateETag.d.ts.map +1 -0
  232. package/dist/advanced/static/generateETag.js +10 -0
  233. package/dist/advanced/static/generateETag.js.map +1 -0
  234. package/dist/advanced/static/getMimeType.d.ts +5 -0
  235. package/dist/advanced/static/getMimeType.d.ts.map +1 -0
  236. package/dist/advanced/static/getMimeType.js +11 -0
  237. package/dist/advanced/static/getMimeType.js.map +1 -0
  238. package/dist/advanced/static/index.d.ts +30 -0
  239. package/dist/advanced/static/index.d.ts.map +1 -0
  240. package/dist/advanced/static/index.js +33 -0
  241. package/dist/advanced/static/index.js.map +1 -0
  242. package/dist/advanced/static/isSafePath.d.ts +5 -0
  243. package/dist/advanced/static/isSafePath.d.ts.map +1 -0
  244. package/dist/advanced/static/isSafePath.js +14 -0
  245. package/dist/advanced/static/isSafePath.js.map +1 -0
  246. package/dist/advanced/static/publicDir.d.ts +12 -0
  247. package/dist/advanced/static/publicDir.d.ts.map +1 -0
  248. package/dist/advanced/static/publicDir.js +22 -0
  249. package/dist/advanced/static/publicDir.js.map +1 -0
  250. package/dist/advanced/static/serveStatic.d.ts +7 -0
  251. package/dist/advanced/static/serveStatic.d.ts.map +1 -0
  252. package/dist/advanced/static/serveStatic.js +198 -0
  253. package/dist/advanced/static/serveStatic.js.map +1 -0
  254. package/dist/advanced/static/spa.d.ts +14 -0
  255. package/dist/advanced/static/spa.d.ts.map +1 -0
  256. package/dist/advanced/static/spa.js +23 -0
  257. package/dist/advanced/static/spa.js.map +1 -0
  258. package/dist/advanced/static/types.d.ts +78 -0
  259. package/dist/advanced/static/types.d.ts.map +1 -0
  260. package/dist/advanced/static/types.js +67 -0
  261. package/dist/advanced/static/types.js.map +1 -0
  262. package/dist/advanced/swagger/SwaggerGenerator.d.ts +19 -0
  263. package/dist/advanced/swagger/SwaggerGenerator.d.ts.map +1 -0
  264. package/dist/advanced/swagger/SwaggerGenerator.js +59 -0
  265. package/dist/advanced/swagger/SwaggerGenerator.js.map +1 -0
  266. package/dist/advanced/swagger/buildOperation.d.ts +6 -0
  267. package/dist/advanced/swagger/buildOperation.d.ts.map +1 -0
  268. package/dist/advanced/swagger/buildOperation.js +54 -0
  269. package/dist/advanced/swagger/buildOperation.js.map +1 -0
  270. package/dist/advanced/swagger/buildParameters.d.ts +6 -0
  271. package/dist/advanced/swagger/buildParameters.d.ts.map +1 -0
  272. package/dist/advanced/swagger/buildParameters.js +57 -0
  273. package/dist/advanced/swagger/buildParameters.js.map +1 -0
  274. package/dist/advanced/swagger/buildRequestBody.d.ts +7 -0
  275. package/dist/advanced/swagger/buildRequestBody.d.ts.map +1 -0
  276. package/dist/advanced/swagger/buildRequestBody.js +19 -0
  277. package/dist/advanced/swagger/buildRequestBody.js.map +1 -0
  278. package/dist/advanced/swagger/buildResponses.d.ts +7 -0
  279. package/dist/advanced/swagger/buildResponses.d.ts.map +1 -0
  280. package/dist/advanced/swagger/buildResponses.js +48 -0
  281. package/dist/advanced/swagger/buildResponses.js.map +1 -0
  282. package/dist/advanced/swagger/capitalize.d.ts +2 -0
  283. package/dist/advanced/swagger/capitalize.d.ts.map +1 -0
  284. package/dist/advanced/swagger/capitalize.js +7 -0
  285. package/dist/advanced/swagger/capitalize.js.map +1 -0
  286. package/dist/advanced/swagger/convertPath.d.ts +6 -0
  287. package/dist/advanced/swagger/convertPath.d.ts.map +1 -0
  288. package/dist/advanced/swagger/convertPath.js +11 -0
  289. package/dist/advanced/swagger/convertPath.js.map +1 -0
  290. package/dist/advanced/swagger/createSwagger.d.ts +8 -0
  291. package/dist/advanced/swagger/createSwagger.d.ts.map +1 -0
  292. package/dist/advanced/swagger/createSwagger.js +12 -0
  293. package/dist/advanced/swagger/createSwagger.js.map +1 -0
  294. package/dist/advanced/swagger/generateOperationId.d.ts +6 -0
  295. package/dist/advanced/swagger/generateOperationId.d.ts.map +1 -0
  296. package/dist/advanced/swagger/generateOperationId.js +20 -0
  297. package/dist/advanced/swagger/generateOperationId.js.map +1 -0
  298. package/dist/advanced/swagger/generateSpec.d.ts +6 -0
  299. package/dist/advanced/swagger/generateSpec.d.ts.map +1 -0
  300. package/dist/advanced/swagger/generateSpec.js +85 -0
  301. package/dist/advanced/swagger/generateSpec.js.map +1 -0
  302. package/dist/advanced/swagger/generateSummary.d.ts +6 -0
  303. package/dist/advanced/swagger/generateSummary.d.ts.map +1 -0
  304. package/dist/advanced/swagger/generateSummary.js +22 -0
  305. package/dist/advanced/swagger/generateSummary.js.map +1 -0
  306. package/dist/advanced/swagger/generateSwaggerUI.d.ts +6 -0
  307. package/dist/advanced/swagger/generateSwaggerUI.d.ts.map +1 -0
  308. package/dist/advanced/swagger/generateSwaggerUI.js +69 -0
  309. package/dist/advanced/swagger/generateSwaggerUI.js.map +1 -0
  310. package/dist/advanced/swagger/generateThemeCss.d.ts +6 -0
  311. package/dist/advanced/swagger/generateThemeCss.d.ts.map +1 -0
  312. package/dist/advanced/swagger/generateThemeCss.js +53 -0
  313. package/dist/advanced/swagger/generateThemeCss.js.map +1 -0
  314. package/dist/advanced/swagger/index.d.ts +23 -0
  315. package/dist/advanced/swagger/index.d.ts.map +1 -0
  316. package/dist/advanced/swagger/index.js +26 -0
  317. package/dist/advanced/swagger/index.js.map +1 -0
  318. package/dist/advanced/swagger/swagger.d.ts +36 -0
  319. package/dist/advanced/swagger/swagger.d.ts.map +1 -0
  320. package/dist/advanced/swagger/swagger.js +198 -0
  321. package/dist/advanced/swagger/swagger.js.map +1 -0
  322. package/dist/advanced/swagger/types.d.ts +210 -0
  323. package/dist/advanced/swagger/types.d.ts.map +1 -0
  324. package/dist/advanced/swagger/types.js +3 -0
  325. package/dist/advanced/swagger/types.js.map +1 -0
  326. package/dist/advanced/swagger/zodFieldToOpenAPI.d.ts +6 -0
  327. package/dist/advanced/swagger/zodFieldToOpenAPI.d.ts.map +1 -0
  328. package/dist/advanced/swagger/zodFieldToOpenAPI.js +86 -0
  329. package/dist/advanced/swagger/zodFieldToOpenAPI.js.map +1 -0
  330. package/dist/advanced/swagger/zodSchemaToOpenAPI.d.ts +6 -0
  331. package/dist/advanced/swagger/zodSchemaToOpenAPI.d.ts.map +1 -0
  332. package/dist/advanced/swagger/zodSchemaToOpenAPI.js +44 -0
  333. package/dist/advanced/swagger/zodSchemaToOpenAPI.js.map +1 -0
  334. package/dist/advanced/swagger/zodToOpenAPI.d.ts +6 -0
  335. package/dist/advanced/swagger/zodToOpenAPI.d.ts.map +1 -0
  336. package/dist/advanced/swagger/zodToOpenAPI.js +22 -0
  337. package/dist/advanced/swagger/zodToOpenAPI.js.map +1 -0
  338. package/dist/advanced/testing/factory.d.ts +206 -0
  339. package/dist/advanced/testing/factory.d.ts.map +1 -0
  340. package/dist/advanced/testing/factory.js +433 -0
  341. package/dist/advanced/testing/factory.js.map +1 -0
  342. package/dist/advanced/testing/harness.d.ts +181 -0
  343. package/dist/advanced/testing/harness.d.ts.map +1 -0
  344. package/dist/advanced/testing/harness.js +481 -0
  345. package/dist/advanced/testing/harness.js.map +1 -0
  346. package/dist/advanced/testing/index.d.ts +235 -0
  347. package/dist/advanced/testing/index.d.ts.map +1 -0
  348. package/dist/advanced/testing/index.js +306 -0
  349. package/dist/advanced/testing/index.js.map +1 -0
  350. package/dist/advanced/testing/load-test.d.ts +148 -0
  351. package/dist/advanced/testing/load-test.d.ts.map +1 -0
  352. package/dist/advanced/testing/load-test.js +490 -0
  353. package/dist/advanced/testing/load-test.js.map +1 -0
  354. package/dist/advanced/testing/mock-server.d.ts +166 -0
  355. package/dist/advanced/testing/mock-server.d.ts.map +1 -0
  356. package/dist/advanced/testing/mock-server.js +424 -0
  357. package/dist/advanced/testing/mock-server.js.map +1 -0
  358. package/dist/advanced/testing/mock.d.ts +248 -0
  359. package/dist/advanced/testing/mock.d.ts.map +1 -0
  360. package/dist/advanced/testing/mock.js +549 -0
  361. package/dist/advanced/testing/mock.js.map +1 -0
  362. package/dist/cli/bin.d.ts +3 -0
  363. package/dist/cli/bin.d.ts.map +1 -0
  364. package/dist/cli/bin.js +10 -0
  365. package/dist/cli/bin.js.map +1 -0
  366. package/dist/cli/cli.d.ts +24 -0
  367. package/dist/cli/cli.d.ts.map +1 -0
  368. package/dist/cli/cli.js +131 -0
  369. package/dist/cli/cli.js.map +1 -0
  370. package/dist/cli/commands/build.d.ts +20 -0
  371. package/dist/cli/commands/build.d.ts.map +1 -0
  372. package/dist/cli/commands/build.js +63 -0
  373. package/dist/cli/commands/build.js.map +1 -0
  374. package/dist/cli/commands/create.d.ts +13 -0
  375. package/dist/cli/commands/create.d.ts.map +1 -0
  376. package/dist/cli/commands/create.js +142 -0
  377. package/dist/cli/commands/create.js.map +1 -0
  378. package/dist/cli/commands/dev.d.ts +15 -0
  379. package/dist/cli/commands/dev.d.ts.map +1 -0
  380. package/dist/cli/commands/dev.js +77 -0
  381. package/dist/cli/commands/dev.js.map +1 -0
  382. package/dist/cli/commands/generate.d.ts +13 -0
  383. package/dist/cli/commands/generate.d.ts.map +1 -0
  384. package/dist/cli/commands/generate.js +80 -0
  385. package/dist/cli/commands/generate.js.map +1 -0
  386. package/dist/cli/commands/help.d.ts +13 -0
  387. package/dist/cli/commands/help.d.ts.map +1 -0
  388. package/dist/cli/commands/help.js +83 -0
  389. package/dist/cli/commands/help.js.map +1 -0
  390. package/dist/cli/commands/init.d.ts +11 -0
  391. package/dist/cli/commands/init.d.ts.map +1 -0
  392. package/dist/cli/commands/init.js +76 -0
  393. package/dist/cli/commands/init.js.map +1 -0
  394. package/dist/cli/commands/version.d.ts +9 -0
  395. package/dist/cli/commands/version.d.ts.map +1 -0
  396. package/dist/cli/commands/version.js +35 -0
  397. package/dist/cli/commands/version.js.map +1 -0
  398. package/dist/cli/index.d.ts +3 -0
  399. package/dist/cli/index.d.ts.map +1 -0
  400. package/dist/cli/index.js +7 -0
  401. package/dist/cli/index.js.map +1 -0
  402. package/dist/cli/templates/generators.d.ts +22 -0
  403. package/dist/cli/templates/generators.d.ts.map +1 -0
  404. package/dist/cli/templates/generators.js +282 -0
  405. package/dist/cli/templates/generators.js.map +1 -0
  406. package/dist/cli/templates/index.d.ts +27 -0
  407. package/dist/cli/templates/index.d.ts.map +1 -0
  408. package/dist/cli/templates/index.js +651 -0
  409. package/dist/cli/templates/index.js.map +1 -0
  410. package/dist/cli/utils/exec.d.ts +12 -0
  411. package/dist/cli/utils/exec.d.ts.map +1 -0
  412. package/dist/cli/utils/exec.js +37 -0
  413. package/dist/cli/utils/exec.js.map +1 -0
  414. package/dist/cli/utils/file-system.d.ts +15 -0
  415. package/dist/cli/utils/file-system.d.ts.map +1 -0
  416. package/dist/cli/utils/file-system.js +105 -0
  417. package/dist/cli/utils/file-system.js.map +1 -0
  418. package/dist/cli/utils/logger.d.ts +40 -0
  419. package/dist/cli/utils/logger.d.ts.map +1 -0
  420. package/dist/cli/utils/logger.js +100 -0
  421. package/dist/cli/utils/logger.js.map +1 -0
  422. package/dist/core/adapter.d.ts +73 -0
  423. package/dist/core/adapter.d.ts.map +1 -0
  424. package/dist/core/adapter.js +27 -0
  425. package/dist/core/adapter.js.map +1 -0
  426. package/dist/core/application.d.ts +540 -0
  427. package/dist/core/application.d.ts.map +1 -0
  428. package/dist/core/application.js +1111 -0
  429. package/dist/core/application.js.map +1 -0
  430. package/dist/core/context-pool.d.ts +52 -0
  431. package/dist/core/context-pool.d.ts.map +1 -0
  432. package/dist/core/context-pool.js +111 -0
  433. package/dist/core/context-pool.js.map +1 -0
  434. package/dist/core/context.d.ts +148 -0
  435. package/dist/core/context.d.ts.map +1 -0
  436. package/dist/core/context.js +367 -0
  437. package/dist/core/context.js.map +1 -0
  438. package/dist/core/index.d.ts +23 -0
  439. package/dist/core/index.d.ts.map +1 -0
  440. package/dist/core/index.js +77 -0
  441. package/dist/core/index.js.map +1 -0
  442. package/dist/core/middleware.d.ts +49 -0
  443. package/dist/core/middleware.d.ts.map +1 -0
  444. package/dist/core/middleware.js +215 -0
  445. package/dist/core/middleware.js.map +1 -0
  446. package/dist/core/performance/buffer-pool.d.ts +47 -0
  447. package/dist/core/performance/buffer-pool.d.ts.map +1 -0
  448. package/dist/core/performance/buffer-pool.js +97 -0
  449. package/dist/core/performance/buffer-pool.js.map +1 -0
  450. package/dist/core/performance/jit-compiler.d.ts +73 -0
  451. package/dist/core/performance/jit-compiler.d.ts.map +1 -0
  452. package/dist/core/performance/jit-compiler.js +145 -0
  453. package/dist/core/performance/jit-compiler.js.map +1 -0
  454. package/dist/core/performance/middleware-optimizer.d.ts +73 -0
  455. package/dist/core/performance/middleware-optimizer.d.ts.map +1 -0
  456. package/dist/core/performance/middleware-optimizer.js +138 -0
  457. package/dist/core/performance/middleware-optimizer.js.map +1 -0
  458. package/dist/core/plugin/PluginManager.d.ts +93 -0
  459. package/dist/core/plugin/PluginManager.d.ts.map +1 -0
  460. package/dist/core/plugin/PluginManager.js +351 -0
  461. package/dist/core/plugin/PluginManager.js.map +1 -0
  462. package/dist/core/plugin/builder.d.ts +192 -0
  463. package/dist/core/plugin/builder.d.ts.map +1 -0
  464. package/dist/core/plugin/builder.js +319 -0
  465. package/dist/core/plugin/builder.js.map +1 -0
  466. package/dist/core/plugin/index.d.ts +31 -0
  467. package/dist/core/plugin/index.d.ts.map +1 -0
  468. package/dist/core/plugin/index.js +41 -0
  469. package/dist/core/plugin/index.js.map +1 -0
  470. package/dist/core/plugin/types.d.ts +184 -0
  471. package/dist/core/plugin/types.d.ts.map +1 -0
  472. package/dist/core/plugin/types.js +17 -0
  473. package/dist/core/plugin/types.js.map +1 -0
  474. package/dist/core/router/file-router.d.ts +173 -0
  475. package/dist/core/router/file-router.d.ts.map +1 -0
  476. package/dist/core/router/file-router.js +498 -0
  477. package/dist/core/router/file-router.js.map +1 -0
  478. package/dist/core/router/index.d.ts +44 -0
  479. package/dist/core/router/index.d.ts.map +1 -0
  480. package/dist/core/router/index.js +145 -0
  481. package/dist/core/router/index.js.map +1 -0
  482. package/dist/core/router/radix-tree.d.ts +69 -0
  483. package/dist/core/router/radix-tree.d.ts.map +1 -0
  484. package/dist/core/router/radix-tree.js +196 -0
  485. package/dist/core/router/radix-tree.js.map +1 -0
  486. package/dist/core/store/index.d.ts +15 -0
  487. package/dist/core/store/index.d.ts.map +1 -0
  488. package/dist/core/store/index.js +23 -0
  489. package/dist/core/store/index.js.map +1 -0
  490. package/dist/core/store/registry.d.ts +80 -0
  491. package/dist/core/store/registry.d.ts.map +1 -0
  492. package/dist/core/store/registry.js +156 -0
  493. package/dist/core/store/registry.js.map +1 -0
  494. package/dist/core/store/request-store.d.ts +138 -0
  495. package/dist/core/store/request-store.d.ts.map +1 -0
  496. package/dist/core/store/request-store.js +209 -0
  497. package/dist/core/store/request-store.js.map +1 -0
  498. package/dist/core/store/types.d.ts +140 -0
  499. package/dist/core/store/types.d.ts.map +1 -0
  500. package/dist/core/store/types.js +176 -0
  501. package/dist/core/store/types.js.map +1 -0
  502. package/dist/core/types.d.ts +470 -0
  503. package/dist/core/types.d.ts.map +1 -0
  504. package/dist/core/types.js +106 -0
  505. package/dist/core/types.js.map +1 -0
  506. package/dist/database/adapter.d.ts +32 -0
  507. package/dist/database/adapter.d.ts.map +1 -0
  508. package/dist/database/adapter.js +3 -0
  509. package/dist/database/adapter.js.map +1 -0
  510. package/dist/database/adapters/index.d.ts +2 -0
  511. package/dist/database/adapters/index.d.ts.map +1 -0
  512. package/dist/database/adapters/index.js +18 -0
  513. package/dist/database/adapters/index.js.map +1 -0
  514. package/dist/database/adapters/mysql.d.ts +160 -0
  515. package/dist/database/adapters/mysql.d.ts.map +1 -0
  516. package/dist/database/adapters/mysql.js +501 -0
  517. package/dist/database/adapters/mysql.js.map +1 -0
  518. package/dist/database/database.d.ts +27 -0
  519. package/dist/database/database.d.ts.map +1 -0
  520. package/dist/database/database.js +59 -0
  521. package/dist/database/database.js.map +1 -0
  522. package/dist/database/dialect.d.ts +110 -0
  523. package/dist/database/dialect.d.ts.map +1 -0
  524. package/dist/database/dialect.js +269 -0
  525. package/dist/database/dialect.js.map +1 -0
  526. package/dist/database/index.d.ts +12 -0
  527. package/dist/database/index.d.ts.map +1 -0
  528. package/dist/database/index.js +28 -0
  529. package/dist/database/index.js.map +1 -0
  530. package/dist/database/migrations.d.ts +22 -0
  531. package/dist/database/migrations.d.ts.map +1 -0
  532. package/dist/database/migrations.js +73 -0
  533. package/dist/database/migrations.js.map +1 -0
  534. package/dist/database/optimizer.d.ts +25 -0
  535. package/dist/database/optimizer.d.ts.map +1 -0
  536. package/dist/database/optimizer.js +97 -0
  537. package/dist/database/optimizer.js.map +1 -0
  538. package/dist/database/query-builder.d.ts +49 -0
  539. package/dist/database/query-builder.d.ts.map +1 -0
  540. package/dist/database/query-builder.js +319 -0
  541. package/dist/database/query-builder.js.map +1 -0
  542. package/dist/database/realtime.d.ts +24 -0
  543. package/dist/database/realtime.d.ts.map +1 -0
  544. package/dist/database/realtime.js +38 -0
  545. package/dist/database/realtime.js.map +1 -0
  546. package/dist/database/schema.d.ts +27 -0
  547. package/dist/database/schema.d.ts.map +1 -0
  548. package/dist/database/schema.js +47 -0
  549. package/dist/database/schema.js.map +1 -0
  550. package/dist/database/transactions.d.ts +13 -0
  551. package/dist/database/transactions.d.ts.map +1 -0
  552. package/dist/database/transactions.js +51 -0
  553. package/dist/database/transactions.js.map +1 -0
  554. package/dist/database/types.d.ts +68 -0
  555. package/dist/database/types.d.ts.map +1 -0
  556. package/dist/database/types.js +3 -0
  557. package/dist/database/types.js.map +1 -0
  558. package/dist/deployment/cluster.d.ts +161 -0
  559. package/dist/deployment/cluster.d.ts.map +1 -0
  560. package/dist/deployment/cluster.js +336 -0
  561. package/dist/deployment/cluster.js.map +1 -0
  562. package/dist/deployment/config.d.ts +209 -0
  563. package/dist/deployment/config.d.ts.map +1 -0
  564. package/dist/deployment/config.js +263 -0
  565. package/dist/deployment/config.js.map +1 -0
  566. package/dist/deployment/docker.d.ts +168 -0
  567. package/dist/deployment/docker.d.ts.map +1 -0
  568. package/dist/deployment/docker.js +437 -0
  569. package/dist/deployment/docker.js.map +1 -0
  570. package/dist/deployment/graceful-shutdown.d.ts +130 -0
  571. package/dist/deployment/graceful-shutdown.d.ts.map +1 -0
  572. package/dist/deployment/graceful-shutdown.js +271 -0
  573. package/dist/deployment/graceful-shutdown.js.map +1 -0
  574. package/dist/deployment/index.d.ts +14 -0
  575. package/dist/deployment/index.d.ts.map +1 -0
  576. package/dist/deployment/index.js +33 -0
  577. package/dist/deployment/index.js.map +1 -0
  578. package/dist/index.d.ts +39 -0
  579. package/dist/index.d.ts.map +1 -0
  580. package/dist/index.js +174 -0
  581. package/dist/index.js.map +1 -0
  582. package/dist/security/adapter.d.ts +144 -0
  583. package/dist/security/adapter.d.ts.map +1 -0
  584. package/dist/security/adapter.js +159 -0
  585. package/dist/security/adapter.js.map +1 -0
  586. package/dist/security/auth/JWTPlugin.d.ts +105 -0
  587. package/dist/security/auth/JWTPlugin.d.ts.map +1 -0
  588. package/dist/security/auth/JWTPlugin.js +146 -0
  589. package/dist/security/auth/JWTPlugin.js.map +1 -0
  590. package/dist/security/auth/JWTProvider.d.ts +104 -0
  591. package/dist/security/auth/JWTProvider.d.ts.map +1 -0
  592. package/dist/security/auth/JWTProvider.js +288 -0
  593. package/dist/security/auth/JWTProvider.js.map +1 -0
  594. package/dist/security/auth/adapter.d.ts +8 -0
  595. package/dist/security/auth/adapter.d.ts.map +1 -0
  596. package/dist/security/auth/adapter.js +29 -0
  597. package/dist/security/auth/adapter.js.map +1 -0
  598. package/dist/security/auth/jwt.d.ts +55 -0
  599. package/dist/security/auth/jwt.d.ts.map +1 -0
  600. package/dist/security/auth/jwt.js +198 -0
  601. package/dist/security/auth/jwt.js.map +1 -0
  602. package/dist/security/auth/middleware.d.ts +64 -0
  603. package/dist/security/auth/middleware.d.ts.map +1 -0
  604. package/dist/security/auth/middleware.js +161 -0
  605. package/dist/security/auth/middleware.js.map +1 -0
  606. package/dist/security/csrf.d.ts +41 -0
  607. package/dist/security/csrf.d.ts.map +1 -0
  608. package/dist/security/csrf.js +185 -0
  609. package/dist/security/csrf.js.map +1 -0
  610. package/dist/security/headers.d.ts +34 -0
  611. package/dist/security/headers.d.ts.map +1 -0
  612. package/dist/security/headers.js +95 -0
  613. package/dist/security/headers.js.map +1 -0
  614. package/dist/security/index.d.ts +19 -0
  615. package/dist/security/index.d.ts.map +1 -0
  616. package/dist/security/index.js +65 -0
  617. package/dist/security/index.js.map +1 -0
  618. package/dist/security/rate-limit/adapter.d.ts +7 -0
  619. package/dist/security/rate-limit/adapter.d.ts.map +1 -0
  620. package/dist/security/rate-limit/adapter.js +8 -0
  621. package/dist/security/rate-limit/adapter.js.map +1 -0
  622. package/dist/security/rate-limit/memory.d.ts +28 -0
  623. package/dist/security/rate-limit/memory.d.ts.map +1 -0
  624. package/dist/security/rate-limit/memory.js +85 -0
  625. package/dist/security/rate-limit/memory.js.map +1 -0
  626. package/dist/security/rate-limit/middleware.d.ts +32 -0
  627. package/dist/security/rate-limit/middleware.d.ts.map +1 -0
  628. package/dist/security/rate-limit/middleware.js +159 -0
  629. package/dist/security/rate-limit/middleware.js.map +1 -0
  630. package/dist/security/sanitization.d.ts +29 -0
  631. package/dist/security/sanitization.d.ts.map +1 -0
  632. package/dist/security/sanitization.js +66 -0
  633. package/dist/security/sanitization.js.map +1 -0
  634. package/dist/security/types.d.ts +205 -0
  635. package/dist/security/types.d.ts.map +1 -0
  636. package/dist/security/types.js +8 -0
  637. package/dist/security/types.js.map +1 -0
  638. package/dist/security/utils.d.ts +19 -0
  639. package/dist/security/utils.d.ts.map +1 -0
  640. package/dist/security/utils.js +43 -0
  641. package/dist/security/utils.js.map +1 -0
  642. package/documentation/01-getting-started.md +240 -0
  643. package/documentation/02-context.md +335 -0
  644. package/documentation/03-routing.md +397 -0
  645. package/documentation/04-middleware.md +483 -0
  646. package/documentation/05-validation.md +514 -0
  647. package/documentation/06-error-handling.md +465 -0
  648. package/documentation/07-performance.md +364 -0
  649. package/documentation/08-adapters.md +470 -0
  650. package/documentation/09-api-reference.md +548 -0
  651. package/documentation/10-examples.md +582 -0
  652. package/documentation/11-deployment.md +477 -0
  653. package/documentation/12-sentry.md +620 -0
  654. package/documentation/13-sentry-data-storage.md +996 -0
  655. package/documentation/14-sentry-data-reference.md +457 -0
  656. package/documentation/15-sentry-summary.md +409 -0
  657. package/documentation/16-alerts-system.md +745 -0
  658. package/documentation/17-alert-adapters.md +696 -0
  659. package/documentation/18-alerts-implementation-summary.md +385 -0
  660. package/documentation/19-class-based-routing.md +840 -0
  661. package/documentation/20-websocket-realtime.md +813 -0
  662. package/documentation/21-cache-system.md +510 -0
  663. package/documentation/22-job-queue.md +772 -0
  664. package/documentation/23-sentry-plugin.md +551 -0
  665. package/documentation/24-testing-utilities.md +1287 -0
  666. package/documentation/25-api-versioning.md +533 -0
  667. package/documentation/26-context-store.md +607 -0
  668. package/documentation/27-dependency-injection.md +329 -0
  669. package/documentation/28-lifecycle-hooks.md +521 -0
  670. package/documentation/29-package-structure.md +196 -0
  671. package/documentation/30-plugin-system.md +414 -0
  672. package/documentation/31-jwt-authentication.md +597 -0
  673. package/documentation/32-cli.md +268 -0
  674. package/documentation/ALERTS-COMPLETE-SUMMARY.md +429 -0
  675. package/documentation/ALERTS-INDEX.md +330 -0
  676. package/documentation/ALERTS-QUICK-REFERENCE.md +286 -0
  677. package/documentation/README.md +178 -0
  678. package/documentation/index.html +34 -0
  679. package/modern_framework_paper.md +1870 -0
  680. package/package.json +178 -0
  681. package/public/css/style.css +87 -0
  682. package/public/index.html +34 -0
  683. package/public/js/app.js +27 -0
  684. package/src/advanced/cache/InMemoryCacheStore.ts +68 -0
  685. package/src/advanced/cache/MultiTierCache.ts +194 -0
  686. package/src/advanced/cache/RedisCacheStore.ts +341 -0
  687. package/src/advanced/cache/index.ts +5 -0
  688. package/src/advanced/cache/types.ts +40 -0
  689. package/src/advanced/graphql/SimpleDataLoader.ts +42 -0
  690. package/src/advanced/graphql/index.ts +22 -0
  691. package/src/advanced/graphql/server.ts +252 -0
  692. package/src/advanced/graphql/types.ts +42 -0
  693. package/src/advanced/jobs/InMemoryQueueStore.ts +68 -0
  694. package/src/advanced/jobs/JobQueue.ts +556 -0
  695. package/src/advanced/jobs/RedisQueueStore.ts +367 -0
  696. package/src/advanced/jobs/index.ts +5 -0
  697. package/src/advanced/jobs/types.ts +70 -0
  698. package/src/advanced/observability/APMManager.ts +163 -0
  699. package/src/advanced/observability/AlertManager.ts +109 -0
  700. package/src/advanced/observability/MetricRegistry.ts +151 -0
  701. package/src/advanced/observability/ObservabilityCenter.ts +304 -0
  702. package/src/advanced/observability/StructuredLogger.ts +154 -0
  703. package/src/advanced/observability/TracingManager.ts +117 -0
  704. package/src/advanced/observability/adapters.ts +304 -0
  705. package/src/advanced/observability/createObservabilityMiddleware.ts +63 -0
  706. package/src/advanced/observability/index.ts +11 -0
  707. package/src/advanced/observability/types.ts +174 -0
  708. package/src/advanced/playground/extractPathParams.ts +6 -0
  709. package/src/advanced/playground/generateFieldExample.ts +31 -0
  710. package/src/advanced/playground/generatePlaygroundHTML.ts +1849 -0
  711. package/src/advanced/playground/generateSummary.ts +19 -0
  712. package/src/advanced/playground/getTagFromPath.ts +9 -0
  713. package/src/advanced/playground/index.ts +8 -0
  714. package/src/advanced/playground/playground.ts +170 -0
  715. package/src/advanced/playground/types.ts +20 -0
  716. package/src/advanced/playground/zodToExample.ts +16 -0
  717. package/src/advanced/playground/zodToParams.ts +15 -0
  718. package/src/advanced/postman/buildAuth.ts +31 -0
  719. package/src/advanced/postman/buildBody.ts +15 -0
  720. package/src/advanced/postman/buildQueryParams.ts +27 -0
  721. package/src/advanced/postman/buildRequestItem.ts +36 -0
  722. package/src/advanced/postman/buildResponses.ts +11 -0
  723. package/src/advanced/postman/buildUrl.ts +33 -0
  724. package/src/advanced/postman/capitalize.ts +4 -0
  725. package/src/advanced/postman/generateCollection.ts +59 -0
  726. package/src/advanced/postman/generateEnvironment.ts +34 -0
  727. package/src/advanced/postman/generateExampleFromZod.ts +21 -0
  728. package/src/advanced/postman/generateFieldExample.ts +45 -0
  729. package/src/advanced/postman/generateName.ts +20 -0
  730. package/src/advanced/postman/generateUUID.ts +11 -0
  731. package/src/advanced/postman/getTagFromPath.ts +10 -0
  732. package/src/advanced/postman/index.ts +28 -0
  733. package/src/advanced/postman/postman.ts +156 -0
  734. package/src/advanced/postman/slugify.ts +7 -0
  735. package/src/advanced/postman/types.ts +140 -0
  736. package/src/advanced/realtime/index.ts +18 -0
  737. package/src/advanced/realtime/websocket.ts +211 -0
  738. package/src/advanced/sentry/index.ts +1236 -0
  739. package/src/advanced/sentry/types.ts +355 -0
  740. package/src/advanced/static/generateDirectoryListing.ts +47 -0
  741. package/src/advanced/static/generateETag.ts +7 -0
  742. package/src/advanced/static/getMimeType.ts +9 -0
  743. package/src/advanced/static/index.ts +32 -0
  744. package/src/advanced/static/isSafePath.ts +13 -0
  745. package/src/advanced/static/publicDir.ts +21 -0
  746. package/src/advanced/static/serveStatic.ts +225 -0
  747. package/src/advanced/static/spa.ts +24 -0
  748. package/src/advanced/static/types.ts +159 -0
  749. package/src/advanced/swagger/SwaggerGenerator.ts +66 -0
  750. package/src/advanced/swagger/buildOperation.ts +61 -0
  751. package/src/advanced/swagger/buildParameters.ts +61 -0
  752. package/src/advanced/swagger/buildRequestBody.ts +21 -0
  753. package/src/advanced/swagger/buildResponses.ts +54 -0
  754. package/src/advanced/swagger/capitalize.ts +5 -0
  755. package/src/advanced/swagger/convertPath.ts +9 -0
  756. package/src/advanced/swagger/createSwagger.ts +12 -0
  757. package/src/advanced/swagger/generateOperationId.ts +21 -0
  758. package/src/advanced/swagger/generateSpec.ts +105 -0
  759. package/src/advanced/swagger/generateSummary.ts +24 -0
  760. package/src/advanced/swagger/generateSwaggerUI.ts +70 -0
  761. package/src/advanced/swagger/generateThemeCss.ts +53 -0
  762. package/src/advanced/swagger/index.ts +25 -0
  763. package/src/advanced/swagger/swagger.ts +237 -0
  764. package/src/advanced/swagger/types.ts +206 -0
  765. package/src/advanced/swagger/zodFieldToOpenAPI.ts +94 -0
  766. package/src/advanced/swagger/zodSchemaToOpenAPI.ts +50 -0
  767. package/src/advanced/swagger/zodToOpenAPI.ts +22 -0
  768. package/src/advanced/testing/factory.ts +509 -0
  769. package/src/advanced/testing/harness.ts +612 -0
  770. package/src/advanced/testing/index.ts +430 -0
  771. package/src/advanced/testing/load-test.ts +618 -0
  772. package/src/advanced/testing/mock-server.ts +498 -0
  773. package/src/advanced/testing/mock.ts +670 -0
  774. package/src/cli/bin.ts +9 -0
  775. package/src/cli/cli.ts +155 -0
  776. package/src/cli/commands/build.ts +73 -0
  777. package/src/cli/commands/create.ts +166 -0
  778. package/src/cli/commands/dev.ts +85 -0
  779. package/src/cli/commands/generate.ts +97 -0
  780. package/src/cli/commands/help.ts +95 -0
  781. package/src/cli/commands/init.ts +91 -0
  782. package/src/cli/commands/version.ts +38 -0
  783. package/src/cli/index.ts +6 -0
  784. package/src/cli/templates/generators.ts +309 -0
  785. package/src/cli/templates/index.ts +679 -0
  786. package/src/cli/utils/exec.ts +52 -0
  787. package/src/cli/utils/file-system.ts +78 -0
  788. package/src/cli/utils/logger.ts +111 -0
  789. package/src/core/adapter.ts +88 -0
  790. package/src/core/application.ts +1283 -0
  791. package/src/core/context-pool.ts +127 -0
  792. package/src/core/context.ts +412 -0
  793. package/src/core/index.ts +80 -0
  794. package/src/core/middleware.ts +262 -0
  795. package/src/core/performance/buffer-pool.ts +108 -0
  796. package/src/core/performance/middleware-optimizer.ts +162 -0
  797. package/src/core/plugin/PluginManager.ts +435 -0
  798. package/src/core/plugin/builder.ts +358 -0
  799. package/src/core/plugin/index.ts +50 -0
  800. package/src/core/plugin/types.ts +214 -0
  801. package/src/core/router/file-router.ts +594 -0
  802. package/src/core/router/index.ts +182 -0
  803. package/src/core/router/radix-tree.ts +226 -0
  804. package/src/core/store/index.ts +30 -0
  805. package/src/core/store/registry.ts +178 -0
  806. package/src/core/store/request-store.ts +240 -0
  807. package/src/core/store/types.ts +233 -0
  808. package/src/core/types.ts +574 -0
  809. package/src/database/adapter.ts +35 -0
  810. package/src/database/adapters/index.ts +1 -0
  811. package/src/database/adapters/mysql.ts +669 -0
  812. package/src/database/database.ts +70 -0
  813. package/src/database/dialect.ts +388 -0
  814. package/src/database/index.ts +12 -0
  815. package/src/database/migrations.ts +86 -0
  816. package/src/database/optimizer.ts +125 -0
  817. package/src/database/query-builder.ts +404 -0
  818. package/src/database/realtime.ts +53 -0
  819. package/src/database/schema.ts +71 -0
  820. package/src/database/transactions.ts +56 -0
  821. package/src/database/types.ts +87 -0
  822. package/src/deployment/cluster.ts +471 -0
  823. package/src/deployment/config.ts +454 -0
  824. package/src/deployment/docker.ts +599 -0
  825. package/src/deployment/graceful-shutdown.ts +373 -0
  826. package/src/deployment/index.ts +56 -0
  827. package/src/index.ts +264 -0
  828. package/src/security/adapter.ts +318 -0
  829. package/src/security/auth/JWTPlugin.ts +234 -0
  830. package/src/security/auth/JWTProvider.ts +316 -0
  831. package/src/security/auth/adapter.ts +12 -0
  832. package/src/security/auth/jwt.ts +234 -0
  833. package/src/security/auth/middleware.ts +188 -0
  834. package/src/security/csrf.ts +220 -0
  835. package/src/security/headers.ts +108 -0
  836. package/src/security/index.ts +60 -0
  837. package/src/security/rate-limit/adapter.ts +7 -0
  838. package/src/security/rate-limit/memory.ts +108 -0
  839. package/src/security/rate-limit/middleware.ts +181 -0
  840. package/src/security/sanitization.ts +75 -0
  841. package/src/security/types.ts +240 -0
  842. package/src/security/utils.ts +52 -0
  843. package/tsconfig.json +39 -0
@@ -0,0 +1,1287 @@
1
+ # Testing Utilities
2
+
3
+ Nexus framework menyediakan comprehensive testing toolkit untuk memudahkan testing aplikasi. Toolkit ini mencakup test client, mock utilities, data factory, mock server, dan load testing capabilities.
4
+
5
+ ## Table of Contents
6
+
7
+ 1. [Overview](#overview)
8
+ 2. [Test Client](#test-client)
9
+ 3. [Data Factory](#data-factory)
10
+ 4. [Mock Utilities](#mock-utilities)
11
+ 5. [Mock Server](#mock-server)
12
+ 6. [Load Testing](#load-testing)
13
+ 7. [Test Suite Setup](#test-suite-setup)
14
+ 8. [Database Seeding](#database-seeding)
15
+ 9. [Examples](#examples)
16
+
17
+ ---
18
+
19
+ ## Overview
20
+
21
+ Testing utilities tersedia di `src/advanced/testing/` dan terdiri dari:
22
+
23
+ - **`harness.ts`** - Test client, suite, dan assertion helpers
24
+ - **`factory.ts`** - Data factory dengan built-in generators
25
+ - **`mock.ts`** - Mock functions, database, fetch, timers
26
+ - **`mock-server.ts`** - Mock HTTP server untuk testing external APIs
27
+ - **`load-test.ts`** - Load testing dan stress testing utilities
28
+
29
+ ### Import
30
+
31
+ ```typescript
32
+ import {
33
+ TestClient,
34
+ createTestSuite,
35
+ TestSeeder,
36
+ expectDuration,
37
+ expectSnapshot,
38
+ waitFor,
39
+ retry,
40
+ spyOn,
41
+ // Factory
42
+ defineFactory,
43
+ generators,
44
+ // Mock
45
+ createMockFn,
46
+ MockDatabase,
47
+ MockFetch,
48
+ MockTimers,
49
+ EventSpy,
50
+ // Mock Server
51
+ createMockServer,
52
+ mockResponses,
53
+ // Load Test
54
+ createLoadTest,
55
+ formatLoadTestResults
56
+ } from '../advanced/testing';
57
+ ```
58
+
59
+ ---
60
+
61
+ ## Test Client
62
+
63
+ `TestClient` adalah HTTP client untuk testing API endpoints dengan support untuk authentication, headers, dan various HTTP methods.
64
+
65
+ ### Basic Usage
66
+
67
+ ```typescript
68
+ import { TestClient } from '../advanced/testing';
69
+ import { app } from './app';
70
+
71
+ const client = new TestClient(app);
72
+
73
+ // GET request
74
+ const response = await client.get('/api/users');
75
+ console.log(response.status); // 200
76
+ console.log(response.json()); // parsed JSON
77
+
78
+ // POST request
79
+ const createResponse = await client.post('/api/users', {
80
+ body: { name: 'John', email: 'john@example.com' }
81
+ });
82
+
83
+ // PUT request
84
+ const updateResponse = await client.put('/api/users/1', {
85
+ body: { name: 'Jane' }
86
+ });
87
+
88
+ // DELETE request
89
+ const deleteResponse = await client.delete('/api/users/1');
90
+
91
+ // PATCH request
92
+ const patchResponse = await client.patch('/api/users/1', {
93
+ body: { active: true }
94
+ });
95
+ ```
96
+
97
+ ### Query Parameters
98
+
99
+ ```typescript
100
+ const response = await client.get('/api/users', {
101
+ query: {
102
+ page: 1,
103
+ limit: 10,
104
+ search: 'john'
105
+ }
106
+ });
107
+ ```
108
+
109
+ ### Custom Headers
110
+
111
+ ```typescript
112
+ // Set default headers for all requests
113
+ client.setDefaultHeaders({
114
+ 'X-API-Key': 'secret-key',
115
+ 'Accept-Language': 'en-US'
116
+ });
117
+
118
+ // Or set headers per request
119
+ const response = await client.get('/api/data', {
120
+ headers: {
121
+ 'X-Request-ID': 'req-123'
122
+ }
123
+ });
124
+ ```
125
+
126
+ ### Authentication
127
+
128
+ ```typescript
129
+ // Authenticate with token
130
+ client.authenticate('eyJhbGc...');
131
+
132
+ // Authenticate dengan user object
133
+ client.authenticate({
134
+ token: 'eyJhbGc...',
135
+ id: 1,
136
+ email: 'user@example.com'
137
+ });
138
+
139
+ // Get authenticated user
140
+ const user = client.getAuthUser();
141
+
142
+ // Clear authentication
143
+ client.clearAuth();
144
+ ```
145
+
146
+ ### Response Object
147
+
148
+ ```typescript
149
+ interface TestResponse<T = any> {
150
+ status: number;
151
+ headers: Record<string, string | string[]>;
152
+ body: string;
153
+ duration: number;
154
+ json(): T;
155
+ }
156
+
157
+ const response = await client.get('/api/users/1');
158
+ console.log(response.status); // 200
159
+ console.log(response.duration); // milliseconds
160
+ console.log(response.json()); // parsed body
161
+ ```
162
+
163
+ ### Client Lifecycle
164
+
165
+ ```typescript
166
+ const client = new TestClient(app);
167
+
168
+ // Start server (automatic, tapi bisa explicit)
169
+ await client.start();
170
+
171
+ // Use client...
172
+ const response = await client.get('/api/users');
173
+
174
+ // Stop server
175
+ await client.stop();
176
+ ```
177
+
178
+ ---
179
+
180
+ ## Data Factory
181
+
182
+ Data factory untuk generate realistic test data dengan support untuk traits, sequences, dan custom generators.
183
+
184
+ ### Defining a Factory
185
+
186
+ ```typescript
187
+ import { defineFactory, generators } from '../advanced/testing';
188
+
189
+ const userFactory = defineFactory({
190
+ id: generators.uuid(),
191
+ email: generators.email(),
192
+ firstName: generators.firstName(),
193
+ lastName: generators.lastName(),
194
+ username: generators.username(),
195
+ password: generators.password(),
196
+ phone: generators.phone(),
197
+ createdAt: generators.pastDate(365)
198
+ });
199
+
200
+ // Build a single record (in-memory, tidak disimpan)
201
+ const user = userFactory.build();
202
+ // {
203
+ // id: 'uuid-123',
204
+ // email: 'user_1@example.com',
205
+ // firstName: 'John',
206
+ // ...
207
+ // }
208
+
209
+ // Build banyak records
210
+ const users = userFactory.buildMany(5);
211
+
212
+ // Build dengan overrides
213
+ const adminUser = userFactory.build({
214
+ overrides: {
215
+ email: 'admin@example.com',
216
+ role: 'admin'
217
+ }
218
+ });
219
+ ```
220
+
221
+ ### Traits
222
+
223
+ Traits adalah variations dari factory yang bisa di-apply:
224
+
225
+ ```typescript
226
+ const userFactory = defineFactory({
227
+ id: generators.uuid(),
228
+ email: generators.email(),
229
+ role: 'user',
230
+ active: true
231
+ });
232
+
233
+ userFactory.trait('admin', {
234
+ role: 'admin'
235
+ });
236
+
237
+ userFactory.trait('inactive', {
238
+ active: false
239
+ });
240
+
241
+ // Use traits
242
+ const admin = userFactory.build({ traits: ['admin'] });
243
+ const inactiveUser = userFactory.build({ traits: ['inactive'] });
244
+ const inactiveAdmin = userFactory.build({ traits: ['admin', 'inactive'] });
245
+ ```
246
+
247
+ ### Persistence
248
+
249
+ ```typescript
250
+ // Set persist function untuk save ke database
251
+ userFactory.setPersist(async (user) => {
252
+ return db.users.create(user);
253
+ });
254
+
255
+ // Create dengan persistence
256
+ const savedUser = await userFactory.create();
257
+
258
+ // Create banyak dengan persistence
259
+ const savedUsers = await userFactory.createMany(10);
260
+ ```
261
+
262
+ ### After Create Hooks
263
+
264
+ ```typescript
265
+ userFactory.afterCreate(async (user) => {
266
+ // Create related data
267
+ await db.profiles.create({
268
+ userId: user.id,
269
+ bio: 'New user'
270
+ });
271
+ });
272
+
273
+ const user = await userFactory.create();
274
+ // User dan profile akan dibuat
275
+ ```
276
+
277
+ ### Built-in Generators
278
+
279
+ #### UUID dan ID
280
+
281
+ ```typescript
282
+ generators.uuid() // Random UUID
283
+ generators.sequence('USER_') // USER_1, USER_2, ...
284
+ ```
285
+
286
+ #### Numbers
287
+
288
+ ```typescript
289
+ generators.integer(0, 100) // Random integer
290
+ generators.float(0, 100, 2) // Random float with decimals
291
+ generators.boolean(0.7) // 70% chance true
292
+ ```
293
+
294
+ #### Text
295
+
296
+ ```typescript
297
+ generators.string(10) // Random string (10 chars)
298
+ generators.lorem(10) // 10 random lorem words
299
+ generators.paragraph(3) // 3 sentences
300
+ generators.slug() // url-slug-123-abc
301
+ ```
302
+
303
+ #### Person Data
304
+
305
+ ```typescript
306
+ generators.firstName() // 'John'
307
+ generators.lastName() // 'Smith'
308
+ generators.fullName() // 'John Smith'
309
+ generators.email() // 'user_1@example.com'
310
+ generators.username() // 'user_1_abc'
311
+ generators.phone() // '123-456-7890'
312
+ ```
313
+
314
+ #### Company Data
315
+
316
+ ```typescript
317
+ generators.company() // 'TechCorp Solutions'
318
+ generators.jobTitle() // 'Senior Developer'
319
+ ```
320
+
321
+ #### Dates
322
+
323
+ ```typescript
324
+ generators.date(start, end) // Random date between start and end
325
+ generators.pastDate(365) // Date up to 365 days ago
326
+ generators.futureDate(365) // Date up to 365 days in future
327
+ ```
328
+
329
+ #### Web/Network
330
+
331
+ ```typescript
332
+ generators.url() // 'https://example.com/abc123'
333
+ generators.ipv4() // '192.168.1.1'
334
+ generators.slug() // 'slug-1-abc'
335
+ ```
336
+
337
+ #### Commerce
338
+
339
+ ```typescript
340
+ generators.price(1, 1000) // Random price
341
+ generators.currency() // 'USD'
342
+ generators.countryCode() // 'US'
343
+ generators.address() // { street, city, state, zip }
344
+ ```
345
+
346
+ #### Media
347
+
348
+ ```typescript
349
+ generators.hexColor() // '#a1b2c3'
350
+ generators.filePath() // '/documents/abc.pdf'
351
+ generators.mimeType() // 'application/json'
352
+ generators.creditCard() // '1234-5678-9012-3456'
353
+ ```
354
+
355
+ #### Collections
356
+
357
+ ```typescript
358
+ generators.oneOf(['a', 'b', 'c']) // Pick one random
359
+ generators.someOf(['a', 'b', 'c'], 1, 2) // Pick 1-2 items
360
+ ```
361
+
362
+ ---
363
+
364
+ ## Mock Utilities
365
+
366
+ Utilities untuk mock functions, database, fetch, timers, dan events.
367
+
368
+ ### Mock Functions
369
+
370
+ ```typescript
371
+ import { createMockFn } from '../advanced/testing';
372
+
373
+ const mockFn = createMockFn();
374
+
375
+ // Set return value
376
+ mockFn.mockReturnValue('hello');
377
+ mockFn(); // 'hello'
378
+
379
+ // Set return value for one call
380
+ mockFn.mockReturnValueOnce('first');
381
+ mockFn.mockReturnValue('second');
382
+ mockFn(); // 'first'
383
+ mockFn(); // 'second'
384
+
385
+ // Async mocking
386
+ mockFn.mockResolvedValue({ id: 1 });
387
+ await mockFn(); // { id: 1 }
388
+
389
+ // Async reject
390
+ mockFn.mockRejectedValue(new Error('Failed'));
391
+ try {
392
+ await mockFn();
393
+ } catch (error) {
394
+ console.log(error.message); // 'Failed'
395
+ }
396
+
397
+ // Custom implementation
398
+ mockFn.mockImplementation((x) => x * 2);
399
+ mockFn(5); // 10
400
+
401
+ // Assertions
402
+ if (mockFn.toHaveBeenCalled()) {
403
+ console.log('Function was called');
404
+ }
405
+
406
+ if (mockFn.toHaveBeenCalledWith(5)) {
407
+ console.log('Called with 5');
408
+ }
409
+
410
+ console.log(mockFn.calls); // Array of all calls
411
+ console.log(mockFn.results); // Array of all results
412
+ ```
413
+
414
+ ### Mock Database
415
+
416
+ ```typescript
417
+ import { MockDatabase } from '../advanced/testing';
418
+
419
+ const mockDb = new MockDatabase();
420
+ const users = mockDb.table('users');
421
+
422
+ // Insert
423
+ const user = await users.insert({ name: 'John', email: 'john@example.com' });
424
+
425
+ // Find
426
+ const found = await users.find(user.id);
427
+
428
+ // Find many
429
+ const all = await users.findMany();
430
+ const filtered = await users.findMany({ name: 'John' });
431
+
432
+ // Update
433
+ const updated = await users.update(user.id, { name: 'Jane' });
434
+
435
+ // Delete
436
+ const deleted = await users.delete(user.id);
437
+
438
+ // Seed data
439
+ users.seed([
440
+ { id: 1, name: 'John', email: 'john@example.com' },
441
+ { id: 2, name: 'Jane', email: 'jane@example.com' }
442
+ ]);
443
+
444
+ // Get all records
445
+ const records = users.getAll();
446
+
447
+ // Clear data
448
+ users.clear();
449
+
450
+ // Reset (clear data + reset mocks)
451
+ users.reset();
452
+
453
+ // Assertions on mock calls
454
+ console.log(users.insert.calls); // Semua calls ke insert()
455
+ console.log(users.update.calls); // Semua calls ke update()
456
+ ```
457
+
458
+ ### Mock Fetch
459
+
460
+ ```typescript
461
+ import { mockFetch } from '../advanced/testing';
462
+
463
+ // Register mock routes
464
+ mockFetch
465
+ .get('/api/users')
466
+ .reply(200, [{ id: 1, name: 'John' }]);
467
+
468
+ mockFetch
469
+ .post('/api/users')
470
+ .reply(201, { id: 2, name: 'Jane' });
471
+
472
+ mockFetch
473
+ .delete('/api/users/:id')
474
+ .reply(204);
475
+
476
+ // Install globally
477
+ mockFetch.install();
478
+
479
+ // Use fetch normally
480
+ const response = await fetch('/api/users');
481
+ const data = await response.json();
482
+
483
+ // Restore original fetch
484
+ mockFetch.restore();
485
+
486
+ // Assertions
487
+ if (mockFetch.wasCalled('/api/users', 'GET')) {
488
+ console.log('GET /api/users was called');
489
+ }
490
+
491
+ console.log(mockFetch.getCalls()); // All fetch calls
492
+ ```
493
+
494
+ ### Mock Fetch dengan Custom Handler
495
+
496
+ ```typescript
497
+ mockFetch
498
+ .post('/api/users')
499
+ .replyWith(async (url, options) => {
500
+ const body = JSON.parse(options?.body || '{}');
501
+ return {
502
+ status: 201,
503
+ body: { id: Math.random(), ...body }
504
+ };
505
+ });
506
+
507
+ // Simulate errors
508
+ mockFetch
509
+ .get('/api/error')
510
+ .networkError('Connection refused');
511
+
512
+ mockFetch
513
+ .get('/api/timeout')
514
+ .timeout(5000);
515
+ ```
516
+
517
+ ### Mock Timers
518
+
519
+ ```typescript
520
+ import { mockTimers } from '../advanced/testing';
521
+
522
+ // Install mock timers
523
+ mockTimers.install();
524
+
525
+ // Set current time
526
+ mockTimers.setTime(Date.now());
527
+
528
+ // Use setTimeout normally
529
+ let called = false;
530
+ setTimeout(() => { called = true; }, 1000);
531
+
532
+ // Advance time
533
+ await mockTimers.tick(1000);
534
+ console.log(called); // true
535
+
536
+ // Run all pending timers
537
+ await mockTimers.runAll();
538
+
539
+ // Get current mocked time
540
+ console.log(mockTimers.now());
541
+
542
+ // Restore
543
+ mockTimers.restore();
544
+ ```
545
+
546
+ ### Event Spy
547
+
548
+ ```typescript
549
+ import { EventSpy } from '../advanced/testing';
550
+ import { EventEmitter } from 'events';
551
+
552
+ const emitter = new EventEmitter();
553
+ const spy = new EventSpy(emitter);
554
+
555
+ // Spy on events
556
+ spy.on('data').on('error').on('complete');
557
+
558
+ // Emit events
559
+ emitter.emit('data', { id: 1 });
560
+ emitter.emit('data', { id: 2 });
561
+ emitter.emit('complete');
562
+
563
+ // Assertions
564
+ if (spy.wasEmitted('data')) {
565
+ console.log('Data event was emitted');
566
+ }
567
+
568
+ console.log(spy.count('data')); // 2
569
+ console.log(spy.getCalls('data')); // [[{ id: 1 }], [{ id: 2 }]]
570
+
571
+ // Clear
572
+ spy.clear();
573
+ ```
574
+
575
+ ---
576
+
577
+ ## Mock Server
578
+
579
+ Mock HTTP server untuk testing external API calls.
580
+
581
+ ### Basic Setup
582
+
583
+ ```typescript
584
+ import { createMockServer } from '../advanced/testing';
585
+
586
+ const mockServer = createMockServer();
587
+
588
+ // Register routes
589
+ mockServer.get('/api/users', (req) => ({
590
+ status: 200,
591
+ body: [{ id: 1, name: 'John' }]
592
+ }));
593
+
594
+ mockServer.post('/api/users', (req) => ({
595
+ status: 201,
596
+ body: { id: 2, ...req.body }
597
+ }));
598
+
599
+ // Start server
600
+ const url = await mockServer.start(3001);
601
+ console.log(url); // 'http://127.0.0.1:3001'
602
+
603
+ // Use it...
604
+ const response = await fetch(`${url}/api/users`);
605
+
606
+ // Stop server
607
+ await mockServer.stop();
608
+ ```
609
+
610
+ ### Route Patterns
611
+
612
+ ```typescript
613
+ // Exact path
614
+ mockServer.get('/api/users', handler);
615
+
616
+ // Path parameters
617
+ mockServer.get('/api/users/:id', (req) => {
618
+ console.log(req.params.id); // '123'
619
+ return { status: 200, body: { id: req.params.id } };
620
+ });
621
+
622
+ // Regex pattern
623
+ mockServer.get(/^\/api\/v\d+\/users/, handler);
624
+
625
+ // Any method
626
+ mockServer.any('/webhook', handler);
627
+ ```
628
+
629
+ ### Request Object
630
+
631
+ ```typescript
632
+ mockServer.post('/api/data', (req) => {
633
+ console.log(req.method); // 'POST'
634
+ console.log(req.path); // '/api/data'
635
+ console.log(req.query); // { page: '1', limit: '10' }
636
+ console.log(req.headers); // { 'content-type': 'application/json' }
637
+ console.log(req.body); // Parsed JSON atau raw string
638
+ console.log(req.params); // URL parameters dari path pattern
639
+
640
+ return { status: 200 };
641
+ });
642
+ ```
643
+
644
+ ### Response Helpers
645
+
646
+ ```typescript
647
+ import { mockResponses } from '../advanced/testing';
648
+
649
+ mockServer.get('/ok', mockResponses.ok());
650
+ mockServer.post('/created', mockResponses.created({ id: 1 }));
651
+ mockServer.get('/no-content', mockResponses.noContent());
652
+ mockServer.get('/error', mockResponses.badRequest('Invalid input'));
653
+ mockServer.get('/unauthorized', mockResponses.unauthorized());
654
+ mockServer.get('/forbidden', mockResponses.forbidden());
655
+ mockServer.get('/not-found', mockResponses.notFound());
656
+ mockServer.get('/error', mockResponses.serverError());
657
+
658
+ // Echo request back
659
+ mockServer.get('/echo', mockResponses.echo());
660
+
661
+ // Paginated response
662
+ const items = Array.from({ length: 50 }, (_, i) => ({ id: i + 1 }));
663
+ mockServer.get('/items', mockResponses.paginated(items, 10));
664
+ ```
665
+
666
+ ### Route Configuration
667
+
668
+ ```typescript
669
+ mockServer
670
+ .get('/api/data')
671
+ .delay(500) // Delay 500ms before response
672
+ .times(1) // Respond only once
673
+ .reply(200, { data: 'value' });
674
+
675
+ // Handler for dynamic responses
676
+ mockServer
677
+ .post('/api/users')
678
+ .replyWith(async (req) => {
679
+ if (!req.body.email) {
680
+ return { status: 400, body: { error: 'Email required' } };
681
+ }
682
+ return { status: 201, body: { id: 1, ...req.body } };
683
+ });
684
+ ```
685
+
686
+ ### Assertions
687
+
688
+ ```typescript
689
+ const mockServer = createMockServer();
690
+
691
+ // ... register routes and use them
692
+
693
+ // Check if path was called
694
+ if (mockServer.wasCalled('/api/users', 'GET')) {
695
+ console.log('GET /api/users was called');
696
+ }
697
+
698
+ // Get call count
699
+ const count = mockServer.callCount('/api/users', 'GET');
700
+ console.log(`Called ${count} times`);
701
+
702
+ // Get all requests
703
+ const requests = mockServer.getRequests();
704
+ requests.forEach(req => {
705
+ console.log(`${req.method} ${req.path}`);
706
+ });
707
+
708
+ // Clear request history
709
+ mockServer.clearRequests();
710
+
711
+ // Reset everything
712
+ mockServer.reset();
713
+ ```
714
+
715
+ ---
716
+
717
+ ## Load Testing
718
+
719
+ Utilities untuk load testing dan stress testing APIs.
720
+
721
+ ### Basic Load Test
722
+
723
+ ```typescript
724
+ import { createLoadTest, formatLoadTestResults } from '../advanced/testing';
725
+
726
+ const loadTest = createLoadTest({
727
+ baseUrl: 'http://localhost:3000',
728
+ vus: 10, // 10 virtual users
729
+ duration: '30s' // 30 seconds
730
+ });
731
+
732
+ // Register test function
733
+ loadTest.test('default', async (vu, http) => {
734
+ const response = await http.get('/api/users');
735
+ if (response.status !== 200) {
736
+ throw new Error(`Expected 200, got ${response.status}`);
737
+ }
738
+ });
739
+
740
+ // Run test
741
+ const results = await loadTest.run();
742
+
743
+ // Format and print results
744
+ console.log(formatLoadTestResults(results));
745
+ ```
746
+
747
+ ### Scenarios
748
+
749
+ ```typescript
750
+ const loadTest = createLoadTest({
751
+ baseUrl: 'http://localhost:3000',
752
+ scenarios: {
753
+ 'ramp-up': {
754
+ name: 'Ramping up',
755
+ executor: 'ramping-vus',
756
+ startVUs: 0,
757
+ stages: [
758
+ { duration: '10s', target: 10 },
759
+ { duration: '20s', target: 50 },
760
+ { duration: '10s', target: 0 }
761
+ ],
762
+ exec: 'load-test'
763
+ },
764
+ 'spike': {
765
+ name: 'Spike test',
766
+ executor: 'constant-vus',
767
+ vus: 100,
768
+ duration: '5s',
769
+ exec: 'load-test'
770
+ }
771
+ }
772
+ });
773
+
774
+ loadTest.test('load-test', async (vu, http) => {
775
+ await http.get('/api/users');
776
+ });
777
+
778
+ const results = await loadTest.run();
779
+ ```
780
+
781
+ ### Thresholds
782
+
783
+ ```typescript
784
+ const loadTest = createLoadTest({
785
+ baseUrl: 'http://localhost:3000',
786
+ vus: 10,
787
+ duration: '30s',
788
+ thresholds: {
789
+ 'http_req_duration': [
790
+ 'p(95) < 500', // 95% requests under 500ms
791
+ 'p(99) < 1000', // 99% requests under 1000ms
792
+ 'avg < 200' // average under 200ms
793
+ ],
794
+ 'http_req_failed': [
795
+ 'rate < 0.01' // Less than 1% error rate
796
+ ],
797
+ 'http_reqs': [
798
+ 'rate > 100' // At least 100 requests per second
799
+ ]
800
+ }
801
+ });
802
+
803
+ loadTest.test('load-test', async (vu, http) => {
804
+ await http.get('/api/users');
805
+ });
806
+
807
+ const results = await loadTest.run();
808
+ console.log(results.thresholdsPassed); // true or false
809
+ ```
810
+
811
+ ### HTTP Client
812
+
813
+ ```typescript
814
+ loadTest.test('api-test', async (vu, http) => {
815
+ // GET request
816
+ const getResp = await http.get('/api/users', {
817
+ timeout: 5000
818
+ });
819
+
820
+ // POST request
821
+ const postResp = await http.post('/api/users', {
822
+ name: `User ${vu.id}`,
823
+ email: `user${vu.id}@example.com`
824
+ });
825
+
826
+ // PUT/DELETE requests
827
+ await http.put('/api/users/1', { name: 'Updated' });
828
+ await http.delete('/api/users/1');
829
+
830
+ // Set headers
831
+ http.setHeader('Authorization', `Bearer ${vu.data.token}`);
832
+
833
+ // Store data per VU
834
+ vu.data.userId = postResp.json().id;
835
+ });
836
+ ```
837
+
838
+ ### Response Object
839
+
840
+ ```typescript
841
+ interface HttpResponse {
842
+ status: number;
843
+ headers: Record<string, string | string[]>;
844
+ body: string;
845
+ latency: number; // milliseconds
846
+ }
847
+
848
+ loadTest.test('api-test', async (vu, http) => {
849
+ const response = await http.get('/api/data');
850
+ console.log(response.status); // HTTP status
851
+ console.log(response.latency); // Response time in ms
852
+ console.log(response.body); // Response body
853
+ console.log(response.headers); // Response headers
854
+ });
855
+ ```
856
+
857
+ ### Results
858
+
859
+ ```typescript
860
+ interface LoadTestResult {
861
+ totalRequests: number;
862
+ successfulRequests: number;
863
+ failedRequests: number;
864
+ duration: number; // milliseconds
865
+ requestsPerSecond: number;
866
+ latency: {
867
+ min: number;
868
+ max: number;
869
+ avg: number;
870
+ p50: number;
871
+ p90: number;
872
+ p95: number;
873
+ p99: number;
874
+ };
875
+ errorRate: number; // 0-1
876
+ thresholdsPassed: boolean;
877
+ thresholdResults: Record<string, any>;
878
+ errors: Array<{ message: string; count: number }>;
879
+ }
880
+ ```
881
+
882
+ ---
883
+
884
+ ## Test Suite Setup
885
+
886
+ Helper untuk setup test suite dengan automatic lifecycle management.
887
+
888
+ ### Basic Test Suite
889
+
890
+ ```typescript
891
+ import { createTestSuite } from '../advanced/testing';
892
+ import { app } from './app';
893
+
894
+ const suite = createTestSuite({
895
+ app,
896
+ beforeAll: async () => {
897
+ // Setup: init database, seed data, etc
898
+ await db.migrate();
899
+ },
900
+ afterAll: async () => {
901
+ // Teardown: cleanup database, close connections, etc
902
+ await db.close();
903
+ },
904
+ beforeEach: async () => {
905
+ // Before each test: seed fresh data
906
+ await seedTestData();
907
+ },
908
+ afterEach: async () => {
909
+ // After each test: cleanup data
910
+ await db.truncate('users');
911
+ }
912
+ });
913
+
914
+ // In your test
915
+ const ctx = await suite.setup();
916
+ const response = await ctx.client.get('/api/users');
917
+ await suite.teardown();
918
+ ```
919
+
920
+ ---
921
+
922
+ ## Database Seeding
923
+
924
+ Helper untuk seed database dengan test data.
925
+
926
+ ### Test Seeder
927
+
928
+ ```typescript
929
+ import { TestSeeder } from '../advanced/testing';
930
+
931
+ const seeder = new TestSeeder();
932
+
933
+ // Configure database functions
934
+ seeder.configure({
935
+ insert: async (table, data) => {
936
+ return db[table].insertMany(data);
937
+ },
938
+ truncate: async (table) => {
939
+ return db[table].truncate();
940
+ }
941
+ });
942
+
943
+ // Define seed data
944
+ seeder.define('users', [
945
+ { id: 1, name: 'John', email: 'john@example.com' },
946
+ { id: 2, name: 'Jane', email: 'jane@example.com' }
947
+ ]);
948
+
949
+ seeder.define('posts', [
950
+ { id: 1, userId: 1, title: 'Post 1' },
951
+ { id: 2, userId: 2, title: 'Post 2' }
952
+ ]);
953
+
954
+ // Seed specific table
955
+ await seeder.seed('users');
956
+
957
+ // Seed all defined tables
958
+ await seeder.seedAll();
959
+
960
+ // Seed dengan custom data
961
+ await seeder.seed('users', [
962
+ { id: 3, name: 'Bob', email: 'bob@example.com' }
963
+ ]);
964
+
965
+ // Truncate tables
966
+ await seeder.truncateAll();
967
+ ```
968
+
969
+ ---
970
+
971
+ ## Assertion Helpers
972
+
973
+ ### Performance Assertions
974
+
975
+ ```typescript
976
+ import { expectDuration } from '../advanced/testing';
977
+
978
+ const response = await client.get('/api/data');
979
+
980
+ expectDuration(response).toBeLessThan(500); // < 500ms
981
+ expectDuration(response).toBeGreaterThan(10); // > 10ms
982
+ expectDuration(response).toBeBetween(50, 500); // 50-500ms
983
+ ```
984
+
985
+ ### Snapshot Testing
986
+
987
+ ```typescript
988
+ import { expectSnapshot, updateSnapshots } from '../advanced/testing';
989
+
990
+ // Capture snapshot (first run)
991
+ const response = await client.get('/api/users');
992
+ expectSnapshot('users-list', response.json()).toMatchSnapshot();
993
+
994
+ // Update snapshots when needed
995
+ updateSnapshots(true);
996
+ expectSnapshot('users-list', newData).toMatchSnapshot();
997
+ updateSnapshots(false);
998
+ ```
999
+
1000
+ ### Utility Functions
1001
+
1002
+ ```typescript
1003
+ import { waitFor, retry, spyOn } from '../advanced/testing';
1004
+
1005
+ // Wait for condition
1006
+ await waitFor(() => someCondition, {
1007
+ timeout: 5000,
1008
+ interval: 100
1009
+ });
1010
+
1011
+ // Retry operation
1012
+ const result = await retry(
1013
+ async () => await unreliableOperation(),
1014
+ {
1015
+ attempts: 3,
1016
+ delay: 100,
1017
+ backoff: true
1018
+ }
1019
+ );
1020
+
1021
+ // Spy on method
1022
+ const obj = { method: () => 'result' };
1023
+ const spy = spyOn(obj, 'method');
1024
+ obj.method();
1025
+ obj.method();
1026
+ console.log(spy.calls); // [[],[]]
1027
+ spy.restore();
1028
+ ```
1029
+
1030
+ ---
1031
+
1032
+ ## Examples
1033
+
1034
+ ### Example 1: API Testing
1035
+
1036
+ ```typescript
1037
+ import { TestClient, defineFactory, generators } from '../advanced/testing';
1038
+ import { app } from './app';
1039
+
1040
+ describe('Users API', () => {
1041
+ let client: TestClient;
1042
+
1043
+ beforeAll(async () => {
1044
+ client = new TestClient(app);
1045
+ await client.start();
1046
+ });
1047
+
1048
+ afterAll(async () => {
1049
+ await client.stop();
1050
+ });
1051
+
1052
+ it('should get all users', async () => {
1053
+ const response = await client.get('/api/users');
1054
+ expect(response.status).toBe(200);
1055
+ expect(Array.isArray(response.json())).toBe(true);
1056
+ });
1057
+
1058
+ it('should create user', async () => {
1059
+ const response = await client.post('/api/users', {
1060
+ body: {
1061
+ name: 'John Doe',
1062
+ email: 'john@example.com'
1063
+ }
1064
+ });
1065
+ expect(response.status).toBe(201);
1066
+ expect(response.json().id).toBeDefined();
1067
+ });
1068
+
1069
+ it('should authenticate user', async () => {
1070
+ const loginResp = await client.post('/api/auth/login', {
1071
+ body: { email: 'john@example.com', password: 'password' }
1072
+ });
1073
+
1074
+ client.authenticate(loginResp.json().token);
1075
+
1076
+ const userResp = await client.get('/api/me');
1077
+ expect(userResp.status).toBe(200);
1078
+
1079
+ client.clearAuth();
1080
+ });
1081
+ });
1082
+ ```
1083
+
1084
+ ### Example 2: Data Factory
1085
+
1086
+ ```typescript
1087
+ import { defineFactory, generators } from '../advanced/testing';
1088
+
1089
+ const userFactory = defineFactory({
1090
+ id: generators.uuid(),
1091
+ email: generators.email(),
1092
+ firstName: generators.firstName(),
1093
+ lastName: generators.lastName(),
1094
+ phone: generators.phone(),
1095
+ country: generators.countryCode(),
1096
+ createdAt: generators.pastDate(365)
1097
+ });
1098
+
1099
+ userFactory.trait('admin', {
1100
+ role: 'admin',
1101
+ permissions: ['read', 'write', 'delete']
1102
+ });
1103
+
1104
+ userFactory.trait('inactive', {
1105
+ active: false
1106
+ });
1107
+
1108
+ // Usage
1109
+ const user = userFactory.build();
1110
+ const admin = userFactory.build({ traits: ['admin'] });
1111
+ const inactiveUsers = userFactory.buildMany(10, { traits: ['inactive'] });
1112
+ ```
1113
+
1114
+ ### Example 3: Mock Server
1115
+
1116
+ ```typescript
1117
+ import { createMockServer } from '../advanced/testing';
1118
+ import axios from 'axios';
1119
+
1120
+ describe('External API Integration', () => {
1121
+ let mockServer;
1122
+ let serverUrl;
1123
+
1124
+ beforeAll(async () => {
1125
+ mockServer = createMockServer();
1126
+
1127
+ mockServer.get('/api/users', (req) => ({
1128
+ status: 200,
1129
+ body: [{ id: 1, name: 'John' }]
1130
+ }));
1131
+
1132
+ mockServer.post('/api/users', (req) => ({
1133
+ status: 201,
1134
+ body: { id: 2, ...req.body }
1135
+ }));
1136
+
1137
+ serverUrl = await mockServer.start();
1138
+ });
1139
+
1140
+ afterAll(async () => {
1141
+ await mockServer.stop();
1142
+ });
1143
+
1144
+ it('should call external API', async () => {
1145
+ const response = await axios.get(`${serverUrl}/api/users`);
1146
+ expect(response.status).toBe(200);
1147
+ expect(response.data).toHaveLength(1);
1148
+ });
1149
+
1150
+ it('should track API calls', () => {
1151
+ expect(mockServer.wasCalled('/api/users', 'GET')).toBe(true);
1152
+ expect(mockServer.callCount('/api/users', 'GET')).toBe(1);
1153
+ });
1154
+ });
1155
+ ```
1156
+
1157
+ ### Example 4: Load Testing
1158
+
1159
+ ```typescript
1160
+ import { createLoadTest, formatLoadTestResults } from '../advanced/testing';
1161
+
1162
+ describe('Load Testing', () => {
1163
+ it('should handle concurrent requests', async () => {
1164
+ const loadTest = createLoadTest({
1165
+ baseUrl: 'http://localhost:3000',
1166
+ vus: 50,
1167
+ duration: '60s',
1168
+ thresholds: {
1169
+ 'http_req_duration': ['p(95) < 500', 'p(99) < 1000'],
1170
+ 'http_req_failed': ['rate < 0.01']
1171
+ }
1172
+ });
1173
+
1174
+ loadTest.test('default', async (vu, http) => {
1175
+ const response = await http.get('/api/users');
1176
+ if (response.status !== 200) {
1177
+ throw new Error(`Expected 200, got ${response.status}`);
1178
+ }
1179
+ });
1180
+
1181
+ const results = await loadTest.run();
1182
+
1183
+ console.log(formatLoadTestResults(results));
1184
+ expect(results.thresholdsPassed).toBe(true);
1185
+ });
1186
+ });
1187
+ ```
1188
+
1189
+ ### Example 5: Complete Integration Test
1190
+
1191
+ ```typescript
1192
+ import {
1193
+ TestClient,
1194
+ createTestSuite,
1195
+ defineFactory,
1196
+ generators,
1197
+ MockDatabase
1198
+ } from '../advanced/testing';
1199
+ import { app } from './app';
1200
+
1201
+ describe('Complete User Flow', () => {
1202
+ const suite = createTestSuite({
1203
+ app,
1204
+ beforeAll: async () => {
1205
+ await db.connect();
1206
+ },
1207
+ afterAll: async () => {
1208
+ await db.disconnect();
1209
+ },
1210
+ beforeEach: async () => {
1211
+ await db.truncate('users');
1212
+ }
1213
+ });
1214
+
1215
+ const userFactory = defineFactory({
1216
+ id: generators.uuid(),
1217
+ email: generators.email(),
1218
+ password: generators.password(),
1219
+ name: generators.fullName()
1220
+ });
1221
+
1222
+ userFactory.setPersist(async (user) => {
1223
+ return db.users.create(user);
1224
+ });
1225
+
1226
+ it('should complete user lifecycle', async () => {
1227
+ const ctx = await suite.setup();
1228
+
1229
+ // Create user
1230
+ const created = await userFactory.create();
1231
+ expect(created.id).toBeDefined();
1232
+
1233
+ // Get user
1234
+ const response = await ctx.client.get(`/api/users/${created.id}`);
1235
+ expect(response.status).toBe(200);
1236
+ expect(response.json().email).toBe(created.email);
1237
+
1238
+ // Update user
1239
+ const updateResp = await ctx.client.put(`/api/users/${created.id}`, {
1240
+ body: { name: 'Updated Name' }
1241
+ });
1242
+ expect(updateResp.status).toBe(200);
1243
+
1244
+ // Delete user
1245
+ const deleteResp = await ctx.client.delete(`/api/users/${created.id}`);
1246
+ expect(deleteResp.status).toBe(204);
1247
+
1248
+ await suite.teardown();
1249
+ });
1250
+ });
1251
+ ```
1252
+
1253
+ ---
1254
+
1255
+ ## Best Practices
1256
+
1257
+ 1. **Use Factories for Complex Data**
1258
+ - Lebih maintainable daripada manual object creation
1259
+ - Traits untuk variations yang berbeda
1260
+
1261
+ 2. **Isolate Tests**
1262
+ - Gunakan `beforeEach` untuk clean state
1263
+ - Truncate tables sebelum setiap test
1264
+
1265
+ 3. **Mock External Dependencies**
1266
+ - Gunakan MockServer untuk external APIs
1267
+ - MockFetch untuk fetch calls
1268
+ - MockDatabase untuk database operations
1269
+
1270
+ 4. **Performance Testing**
1271
+ - Monitor p95 dan p99 latencies
1272
+ - Set realistic thresholds
1273
+ - Test dengan realistic load scenarios
1274
+
1275
+ 5. **Error Scenarios**
1276
+ - Test error paths dengan mock servers
1277
+ - Test timeouts dan network errors
1278
+ - Test retry logic dengan MockTimers
1279
+
1280
+ ---
1281
+
1282
+ ## See Also
1283
+
1284
+ - [01 - Getting Started](./01-getting-started.md)
1285
+ - [05 - Validation](./05-validation.md)
1286
+ - [06 - Error Handling](./06-error-handling.md)
1287
+ - [10 - Examples](./10-examples.md)