@lakutata/entrypoint 3.0.0-beta.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 (325) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +183 -0
  3. package/THIRD_PARTY_NOTICES.md +206 -0
  4. package/dist/cjs/Entrypoint.d.ts +868 -0
  5. package/dist/cjs/Entrypoint.js +998 -0
  6. package/dist/cjs/adapter/commander/CommanderCLIEntrypoint.d.ts +192 -0
  7. package/dist/cjs/adapter/commander/CommanderCLIEntrypoint.js +439 -0
  8. package/dist/cjs/adapter/commander/Prompt.d.ts +22 -0
  9. package/dist/cjs/adapter/commander/Prompt.js +164 -0
  10. package/dist/cjs/adapter/commander/Width.d.ts +12 -0
  11. package/dist/cjs/adapter/commander/Width.js +67 -0
  12. package/dist/cjs/adapter/electron/ElectronIPCServiceEntrypoint.d.ts +203 -0
  13. package/dist/cjs/adapter/electron/ElectronIPCServiceEntrypoint.js +249 -0
  14. package/dist/cjs/adapter/express/ExpressHTTPEntrypoint.d.ts +172 -0
  15. package/dist/cjs/adapter/express/ExpressHTTPEntrypoint.js +301 -0
  16. package/dist/cjs/adapter/express/Responders.d.ts +89 -0
  17. package/dist/cjs/adapter/express/Responders.js +71 -0
  18. package/dist/cjs/adapter/express/StaticUI.d.ts +83 -0
  19. package/dist/cjs/adapter/express/StaticUI.js +104 -0
  20. package/dist/cjs/adapter/fastify/FastifyHTTPEntrypoint.d.ts +156 -0
  21. package/dist/cjs/adapter/fastify/FastifyHTTPEntrypoint.js +339 -0
  22. package/dist/cjs/adapter/fastify/Responders.d.ts +88 -0
  23. package/dist/cjs/adapter/fastify/Responders.js +77 -0
  24. package/dist/cjs/adapter/http/HTTPServiceEntrypoint.d.ts +117 -0
  25. package/dist/cjs/adapter/http/HTTPServiceEntrypoint.js +257 -0
  26. package/dist/cjs/adapter/jsonrpc/JSONRPCProtocol.d.ts +194 -0
  27. package/dist/cjs/adapter/jsonrpc/JSONRPCProtocol.js +187 -0
  28. package/dist/cjs/adapter/jsonrpc/JSONRPCServiceEntrypoint.d.ts +154 -0
  29. package/dist/cjs/adapter/jsonrpc/JSONRPCServiceEntrypoint.js +397 -0
  30. package/dist/cjs/adapter/schedule/ScheduleEntrypoint.d.ts +86 -0
  31. package/dist/cjs/adapter/schedule/ScheduleEntrypoint.js +275 -0
  32. package/dist/cjs/adapter/socket.io/SocketIOServiceEntrypoint.d.ts +138 -0
  33. package/dist/cjs/adapter/socket.io/SocketIOServiceEntrypoint.js +216 -0
  34. package/dist/cjs/channel/BuiltinChannels.d.ts +18 -0
  35. package/dist/cjs/channel/BuiltinChannels.js +128 -0
  36. package/dist/cjs/channel/Channel.d.ts +196 -0
  37. package/dist/cjs/channel/Channel.js +106 -0
  38. package/dist/cjs/channel/EntrypointAdapter.d.ts +195 -0
  39. package/dist/cjs/channel/EntrypointAdapter.js +43 -0
  40. package/dist/cjs/context/BaseContext.d.ts +75 -0
  41. package/dist/cjs/context/BaseContext.js +90 -0
  42. package/dist/cjs/context/CLIContext.d.ts +38 -0
  43. package/dist/cjs/context/CLIContext.js +53 -0
  44. package/dist/cjs/context/HTTPContext.d.ts +52 -0
  45. package/dist/cjs/context/HTTPContext.js +78 -0
  46. package/dist/cjs/context/ScheduleContext.d.ts +47 -0
  47. package/dist/cjs/context/ScheduleContext.js +65 -0
  48. package/dist/cjs/context/ServiceContext.d.ts +47 -0
  49. package/dist/cjs/context/ServiceContext.js +62 -0
  50. package/dist/cjs/decorators/CLIAction.d.ts +120 -0
  51. package/dist/cjs/decorators/CLIAction.js +13 -0
  52. package/dist/cjs/decorators/HTTPAction.d.ts +178 -0
  53. package/dist/cjs/decorators/HTTPAction.js +14 -0
  54. package/dist/cjs/decorators/Prefix.d.ts +44 -0
  55. package/dist/cjs/decorators/Prefix.js +48 -0
  56. package/dist/cjs/decorators/Schedule.d.ts +120 -0
  57. package/dist/cjs/decorators/Schedule.js +64 -0
  58. package/dist/cjs/decorators/ServiceAction.d.ts +116 -0
  59. package/dist/cjs/decorators/ServiceAction.js +12 -0
  60. package/dist/cjs/decorators/UseMiddlewares.d.ts +52 -0
  61. package/dist/cjs/decorators/UseMiddlewares.js +58 -0
  62. package/dist/cjs/decorators/http/DELETE.d.ts +87 -0
  63. package/dist/cjs/decorators/http/DELETE.js +7 -0
  64. package/dist/cjs/decorators/http/GET.d.ts +89 -0
  65. package/dist/cjs/decorators/http/GET.js +7 -0
  66. package/dist/cjs/decorators/http/HEAD.d.ts +84 -0
  67. package/dist/cjs/decorators/http/HEAD.js +7 -0
  68. package/dist/cjs/decorators/http/OPTIONS.d.ts +80 -0
  69. package/dist/cjs/decorators/http/OPTIONS.js +7 -0
  70. package/dist/cjs/decorators/http/PATCH.d.ts +90 -0
  71. package/dist/cjs/decorators/http/PATCH.js +7 -0
  72. package/dist/cjs/decorators/http/POST.d.ts +91 -0
  73. package/dist/cjs/decorators/http/POST.js +7 -0
  74. package/dist/cjs/decorators/http/PUT.d.ts +92 -0
  75. package/dist/cjs/decorators/http/PUT.js +7 -0
  76. package/dist/cjs/exceptions/AccessDeniedException.d.ts +10 -0
  77. package/dist/cjs/exceptions/AccessDeniedException.js +17 -0
  78. package/dist/cjs/exceptions/ControllerActionNotFoundException.d.ts +9 -0
  79. package/dist/cjs/exceptions/ControllerActionNotFoundException.js +16 -0
  80. package/dist/cjs/exceptions/DuplicateActionNameException.d.ts +8 -0
  81. package/dist/cjs/exceptions/DuplicateActionNameException.js +15 -0
  82. package/dist/cjs/exceptions/EntrypointStoppedException.d.ts +9 -0
  83. package/dist/cjs/exceptions/EntrypointStoppedException.js +16 -0
  84. package/dist/cjs/exceptions/InvalidActionGroupException.d.ts +4 -0
  85. package/dist/cjs/exceptions/InvalidActionGroupException.js +11 -0
  86. package/dist/cjs/exceptions/InvalidChannelException.d.ts +8 -0
  87. package/dist/cjs/exceptions/InvalidChannelException.js +15 -0
  88. package/dist/cjs/exceptions/InvalidEntrypointAdapterException.d.ts +9 -0
  89. package/dist/cjs/exceptions/InvalidEntrypointAdapterException.js +16 -0
  90. package/dist/cjs/exceptions/InvalidMiddlewareException.d.ts +8 -0
  91. package/dist/cjs/exceptions/InvalidMiddlewareException.js +15 -0
  92. package/dist/cjs/exceptions/InvalidPrefixException.d.ts +8 -0
  93. package/dist/cjs/exceptions/InvalidPrefixException.js +15 -0
  94. package/dist/cjs/exceptions/MiddlewareNextCalledException.d.ts +8 -0
  95. package/dist/cjs/exceptions/MiddlewareNextCalledException.js +15 -0
  96. package/dist/cjs/exceptions/RouteNotFoundException.d.ts +9 -0
  97. package/dist/cjs/exceptions/RouteNotFoundException.js +16 -0
  98. package/dist/cjs/exceptions/ServiceInvokeException.d.ts +11 -0
  99. package/dist/cjs/exceptions/ServiceInvokeException.js +14 -0
  100. package/dist/cjs/exports/CTRLDecorators.d.ts +13 -0
  101. package/dist/cjs/exports/CTRLDecorators.js +38 -0
  102. package/dist/cjs/exports/Channel.d.ts +14 -0
  103. package/dist/cjs/exports/Channel.js +33 -0
  104. package/dist/cjs/exports/CommanderAdapter.d.ts +1 -0
  105. package/dist/cjs/exports/CommanderAdapter.js +8 -0
  106. package/dist/cjs/exports/ElectronAdapter.d.ts +1 -0
  107. package/dist/cjs/exports/ElectronAdapter.js +9 -0
  108. package/dist/cjs/exports/Entrypoint.d.ts +24 -0
  109. package/dist/cjs/exports/Entrypoint.js +55 -0
  110. package/dist/cjs/exports/ExpressAdapter.d.ts +4 -0
  111. package/dist/cjs/exports/ExpressAdapter.js +15 -0
  112. package/dist/cjs/exports/FastifyAdapter.d.ts +4 -0
  113. package/dist/cjs/exports/FastifyAdapter.js +14 -0
  114. package/dist/cjs/exports/JSONRPCAdapter.d.ts +2 -0
  115. package/dist/cjs/exports/JSONRPCAdapter.js +11 -0
  116. package/dist/cjs/exports/SocketIOAdapter.d.ts +1 -0
  117. package/dist/cjs/exports/SocketIOAdapter.js +9 -0
  118. package/dist/cjs/lib/AccessControl.d.ts +118 -0
  119. package/dist/cjs/lib/AccessControl.js +208 -0
  120. package/dist/cjs/lib/AccessControlRule.d.ts +91 -0
  121. package/dist/cjs/lib/AccessControlRule.js +76 -0
  122. package/dist/cjs/lib/ActionOptions.d.ts +67 -0
  123. package/dist/cjs/lib/ActionOptions.js +67 -0
  124. package/dist/cjs/lib/ActionResult.d.ts +28 -0
  125. package/dist/cjs/lib/ActionResult.js +28 -0
  126. package/dist/cjs/lib/ApplicationOf.d.ts +6 -0
  127. package/dist/cjs/lib/ApplicationOf.js +14 -0
  128. package/dist/cjs/lib/Controller.d.ts +59 -0
  129. package/dist/cjs/lib/Controller.js +64 -0
  130. package/dist/cjs/lib/ControllerEntrypoint.d.ts +168 -0
  131. package/dist/cjs/lib/ControllerEntrypoint.js +239 -0
  132. package/dist/cjs/lib/GetActionDTOAndOptions.d.ts +29 -0
  133. package/dist/cjs/lib/GetActionDTOAndOptions.js +49 -0
  134. package/dist/cjs/lib/HTTPErrors.d.ts +55 -0
  135. package/dist/cjs/lib/HTTPErrors.js +52 -0
  136. package/dist/cjs/lib/Middleware.d.ts +146 -0
  137. package/dist/cjs/lib/Middleware.js +144 -0
  138. package/dist/cjs/lib/Prefix.d.ts +98 -0
  139. package/dist/cjs/lib/Prefix.js +151 -0
  140. package/dist/cjs/lib/Result.d.ts +173 -0
  141. package/dist/cjs/lib/Result.js +153 -0
  142. package/dist/cjs/lib/ServiceResponseCodec.d.ts +82 -0
  143. package/dist/cjs/lib/ServiceResponseCodec.js +117 -0
  144. package/dist/cjs/lib/StringifyPattern.d.ts +7 -0
  145. package/dist/cjs/lib/StringifyPattern.js +58 -0
  146. package/dist/cjs/lib/UnsetValue.d.ts +12 -0
  147. package/dist/cjs/lib/UnsetValue.js +216 -0
  148. package/dist/cjs/lib/pattern/GlobPattern.d.ts +34 -0
  149. package/dist/cjs/lib/pattern/GlobPattern.js +68 -0
  150. package/dist/cjs/lib/pattern/PatternManager.d.ts +103 -0
  151. package/dist/cjs/lib/pattern/PatternManager.js +233 -0
  152. package/dist/cjs/lib/schedule/Cron.d.ts +56 -0
  153. package/dist/cjs/lib/schedule/Cron.js +282 -0
  154. package/dist/cjs/package.json +1 -0
  155. package/dist/cjs/types/CLIContextParams.d.ts +14 -0
  156. package/dist/cjs/types/CLIContextParams.js +2 -0
  157. package/dist/cjs/types/ErrorDescription.d.ts +14 -0
  158. package/dist/cjs/types/ErrorDescription.js +2 -0
  159. package/dist/cjs/types/HTTPContextParams.d.ts +27 -0
  160. package/dist/cjs/types/HTTPContextParams.js +2 -0
  161. package/dist/cjs/types/ScheduleContextParams.d.ts +21 -0
  162. package/dist/cjs/types/ScheduleContextParams.js +2 -0
  163. package/dist/cjs/types/ServiceContextParams.d.ts +16 -0
  164. package/dist/cjs/types/ServiceContextParams.js +2 -0
  165. package/dist/esm/Entrypoint.js +985 -0
  166. package/dist/esm/adapter/commander/CommanderCLIEntrypoint.js +433 -0
  167. package/dist/esm/adapter/commander/Prompt.js +127 -0
  168. package/dist/esm/adapter/commander/Width.js +63 -0
  169. package/dist/esm/adapter/electron/ElectronIPCServiceEntrypoint.js +212 -0
  170. package/dist/esm/adapter/express/ExpressHTTPEntrypoint.js +295 -0
  171. package/dist/esm/adapter/express/Responders.js +66 -0
  172. package/dist/esm/adapter/express/StaticUI.js +96 -0
  173. package/dist/esm/adapter/fastify/FastifyHTTPEntrypoint.js +333 -0
  174. package/dist/esm/adapter/fastify/Responders.js +73 -0
  175. package/dist/esm/adapter/http/HTTPServiceEntrypoint.js +253 -0
  176. package/dist/esm/adapter/jsonrpc/JSONRPCProtocol.js +182 -0
  177. package/dist/esm/adapter/jsonrpc/JSONRPCServiceEntrypoint.js +361 -0
  178. package/dist/esm/adapter/schedule/ScheduleEntrypoint.js +272 -0
  179. package/dist/esm/adapter/socket.io/SocketIOServiceEntrypoint.js +212 -0
  180. package/dist/esm/channel/BuiltinChannels.js +125 -0
  181. package/dist/esm/channel/Channel.js +100 -0
  182. package/dist/esm/channel/EntrypointAdapter.js +39 -0
  183. package/dist/esm/context/BaseContext.js +87 -0
  184. package/dist/esm/context/CLIContext.js +49 -0
  185. package/dist/esm/context/HTTPContext.js +74 -0
  186. package/dist/esm/context/ScheduleContext.js +61 -0
  187. package/dist/esm/context/ServiceContext.js +58 -0
  188. package/dist/esm/decorators/CLIAction.js +10 -0
  189. package/dist/esm/decorators/HTTPAction.js +11 -0
  190. package/dist/esm/decorators/Prefix.js +45 -0
  191. package/dist/esm/decorators/Schedule.js +61 -0
  192. package/dist/esm/decorators/ServiceAction.js +9 -0
  193. package/dist/esm/decorators/UseMiddlewares.js +55 -0
  194. package/dist/esm/decorators/http/DELETE.js +4 -0
  195. package/dist/esm/decorators/http/GET.js +4 -0
  196. package/dist/esm/decorators/http/HEAD.js +4 -0
  197. package/dist/esm/decorators/http/OPTIONS.js +4 -0
  198. package/dist/esm/decorators/http/PATCH.js +4 -0
  199. package/dist/esm/decorators/http/POST.js +4 -0
  200. package/dist/esm/decorators/http/PUT.js +4 -0
  201. package/dist/esm/exceptions/AccessDeniedException.js +13 -0
  202. package/dist/esm/exceptions/ControllerActionNotFoundException.js +12 -0
  203. package/dist/esm/exceptions/DuplicateActionNameException.js +11 -0
  204. package/dist/esm/exceptions/EntrypointStoppedException.js +12 -0
  205. package/dist/esm/exceptions/InvalidActionGroupException.js +7 -0
  206. package/dist/esm/exceptions/InvalidChannelException.js +11 -0
  207. package/dist/esm/exceptions/InvalidEntrypointAdapterException.js +12 -0
  208. package/dist/esm/exceptions/InvalidMiddlewareException.js +11 -0
  209. package/dist/esm/exceptions/InvalidPrefixException.js +11 -0
  210. package/dist/esm/exceptions/MiddlewareNextCalledException.js +11 -0
  211. package/dist/esm/exceptions/RouteNotFoundException.js +12 -0
  212. package/dist/esm/exceptions/ServiceInvokeException.js +10 -0
  213. package/dist/esm/exports/CTRLDecorators.js +19 -0
  214. package/dist/esm/exports/Channel.js +11 -0
  215. package/dist/esm/exports/CommanderAdapter.js +1 -0
  216. package/dist/esm/exports/ElectronAdapter.js +1 -0
  217. package/dist/esm/exports/Entrypoint.js +22 -0
  218. package/dist/esm/exports/ExpressAdapter.js +3 -0
  219. package/dist/esm/exports/FastifyAdapter.js +3 -0
  220. package/dist/esm/exports/JSONRPCAdapter.js +2 -0
  221. package/dist/esm/exports/SocketIOAdapter.js +1 -0
  222. package/dist/esm/lib/AccessControl.js +204 -0
  223. package/dist/esm/lib/AccessControlRule.js +72 -0
  224. package/dist/esm/lib/ActionOptions.js +63 -0
  225. package/dist/esm/lib/ActionResult.js +24 -0
  226. package/dist/esm/lib/ApplicationOf.js +11 -0
  227. package/dist/esm/lib/Controller.js +61 -0
  228. package/dist/esm/lib/ControllerEntrypoint.js +229 -0
  229. package/dist/esm/lib/GetActionDTOAndOptions.js +46 -0
  230. package/dist/esm/lib/HTTPErrors.js +48 -0
  231. package/dist/esm/lib/Middleware.js +134 -0
  232. package/dist/esm/lib/Prefix.js +143 -0
  233. package/dist/esm/lib/Result.js +147 -0
  234. package/dist/esm/lib/ServiceResponseCodec.js +113 -0
  235. package/dist/esm/lib/StringifyPattern.js +55 -0
  236. package/dist/esm/lib/UnsetValue.js +213 -0
  237. package/dist/esm/lib/pattern/GlobPattern.js +64 -0
  238. package/dist/esm/lib/pattern/PatternManager.js +229 -0
  239. package/dist/esm/lib/schedule/Cron.js +277 -0
  240. package/dist/esm/types/CLIContextParams.js +1 -0
  241. package/dist/esm/types/ErrorDescription.js +1 -0
  242. package/dist/esm/types/HTTPContextParams.js +1 -0
  243. package/dist/esm/types/ScheduleContextParams.js +1 -0
  244. package/dist/esm/types/ServiceContextParams.js +1 -0
  245. package/dist/types/Entrypoint.d.ts +868 -0
  246. package/dist/types/adapter/commander/CommanderCLIEntrypoint.d.ts +192 -0
  247. package/dist/types/adapter/commander/Prompt.d.ts +22 -0
  248. package/dist/types/adapter/commander/Width.d.ts +12 -0
  249. package/dist/types/adapter/electron/ElectronIPCServiceEntrypoint.d.ts +203 -0
  250. package/dist/types/adapter/express/ExpressHTTPEntrypoint.d.ts +172 -0
  251. package/dist/types/adapter/express/Responders.d.ts +89 -0
  252. package/dist/types/adapter/express/StaticUI.d.ts +83 -0
  253. package/dist/types/adapter/fastify/FastifyHTTPEntrypoint.d.ts +156 -0
  254. package/dist/types/adapter/fastify/Responders.d.ts +88 -0
  255. package/dist/types/adapter/http/HTTPServiceEntrypoint.d.ts +117 -0
  256. package/dist/types/adapter/jsonrpc/JSONRPCProtocol.d.ts +194 -0
  257. package/dist/types/adapter/jsonrpc/JSONRPCServiceEntrypoint.d.ts +154 -0
  258. package/dist/types/adapter/schedule/ScheduleEntrypoint.d.ts +86 -0
  259. package/dist/types/adapter/socket.io/SocketIOServiceEntrypoint.d.ts +138 -0
  260. package/dist/types/channel/BuiltinChannels.d.ts +18 -0
  261. package/dist/types/channel/Channel.d.ts +196 -0
  262. package/dist/types/channel/EntrypointAdapter.d.ts +195 -0
  263. package/dist/types/context/BaseContext.d.ts +75 -0
  264. package/dist/types/context/CLIContext.d.ts +38 -0
  265. package/dist/types/context/HTTPContext.d.ts +52 -0
  266. package/dist/types/context/ScheduleContext.d.ts +47 -0
  267. package/dist/types/context/ServiceContext.d.ts +47 -0
  268. package/dist/types/decorators/CLIAction.d.ts +120 -0
  269. package/dist/types/decorators/HTTPAction.d.ts +178 -0
  270. package/dist/types/decorators/Prefix.d.ts +44 -0
  271. package/dist/types/decorators/Schedule.d.ts +120 -0
  272. package/dist/types/decorators/ServiceAction.d.ts +116 -0
  273. package/dist/types/decorators/UseMiddlewares.d.ts +52 -0
  274. package/dist/types/decorators/http/DELETE.d.ts +87 -0
  275. package/dist/types/decorators/http/GET.d.ts +89 -0
  276. package/dist/types/decorators/http/HEAD.d.ts +84 -0
  277. package/dist/types/decorators/http/OPTIONS.d.ts +80 -0
  278. package/dist/types/decorators/http/PATCH.d.ts +90 -0
  279. package/dist/types/decorators/http/POST.d.ts +91 -0
  280. package/dist/types/decorators/http/PUT.d.ts +92 -0
  281. package/dist/types/exceptions/AccessDeniedException.d.ts +10 -0
  282. package/dist/types/exceptions/ControllerActionNotFoundException.d.ts +9 -0
  283. package/dist/types/exceptions/DuplicateActionNameException.d.ts +8 -0
  284. package/dist/types/exceptions/EntrypointStoppedException.d.ts +9 -0
  285. package/dist/types/exceptions/InvalidActionGroupException.d.ts +4 -0
  286. package/dist/types/exceptions/InvalidChannelException.d.ts +8 -0
  287. package/dist/types/exceptions/InvalidEntrypointAdapterException.d.ts +9 -0
  288. package/dist/types/exceptions/InvalidMiddlewareException.d.ts +8 -0
  289. package/dist/types/exceptions/InvalidPrefixException.d.ts +8 -0
  290. package/dist/types/exceptions/MiddlewareNextCalledException.d.ts +8 -0
  291. package/dist/types/exceptions/RouteNotFoundException.d.ts +9 -0
  292. package/dist/types/exceptions/ServiceInvokeException.d.ts +11 -0
  293. package/dist/types/exports/CTRLDecorators.d.ts +13 -0
  294. package/dist/types/exports/Channel.d.ts +14 -0
  295. package/dist/types/exports/CommanderAdapter.d.ts +1 -0
  296. package/dist/types/exports/ElectronAdapter.d.ts +1 -0
  297. package/dist/types/exports/Entrypoint.d.ts +24 -0
  298. package/dist/types/exports/ExpressAdapter.d.ts +4 -0
  299. package/dist/types/exports/FastifyAdapter.d.ts +4 -0
  300. package/dist/types/exports/JSONRPCAdapter.d.ts +2 -0
  301. package/dist/types/exports/SocketIOAdapter.d.ts +1 -0
  302. package/dist/types/lib/AccessControl.d.ts +118 -0
  303. package/dist/types/lib/AccessControlRule.d.ts +91 -0
  304. package/dist/types/lib/ActionOptions.d.ts +67 -0
  305. package/dist/types/lib/ActionResult.d.ts +28 -0
  306. package/dist/types/lib/ApplicationOf.d.ts +6 -0
  307. package/dist/types/lib/Controller.d.ts +59 -0
  308. package/dist/types/lib/ControllerEntrypoint.d.ts +168 -0
  309. package/dist/types/lib/GetActionDTOAndOptions.d.ts +29 -0
  310. package/dist/types/lib/HTTPErrors.d.ts +55 -0
  311. package/dist/types/lib/Middleware.d.ts +146 -0
  312. package/dist/types/lib/Prefix.d.ts +98 -0
  313. package/dist/types/lib/Result.d.ts +173 -0
  314. package/dist/types/lib/ServiceResponseCodec.d.ts +82 -0
  315. package/dist/types/lib/StringifyPattern.d.ts +7 -0
  316. package/dist/types/lib/UnsetValue.d.ts +12 -0
  317. package/dist/types/lib/pattern/GlobPattern.d.ts +34 -0
  318. package/dist/types/lib/pattern/PatternManager.d.ts +103 -0
  319. package/dist/types/lib/schedule/Cron.d.ts +56 -0
  320. package/dist/types/types/CLIContextParams.d.ts +14 -0
  321. package/dist/types/types/ErrorDescription.d.ts +14 -0
  322. package/dist/types/types/HTTPContextParams.d.ts +27 -0
  323. package/dist/types/types/ScheduleContextParams.d.ts +21 -0
  324. package/dist/types/types/ServiceContextParams.d.ts +16 -0
  325. package/package.json +152 -0
@@ -0,0 +1,56 @@
1
+ /**
2
+ * A cron expression, as `@Schedule` uses it: `second minute hour day-of-month month day-of-week`, the second optional
3
+ * (0 when omitted). Each field accepts `*` (or `?`), values, ranges (`1-5`), steps (`*\/15`, `10/5`, `1-30/2`) and lists
4
+ * (`1,15`); the months and the days of the week also accept their English three-letter names (`jan`, `mon`), and the
5
+ * day of the week 7 is Sunday like 0. The macros `@yearly`, `@annually`, `@monthly`, `@weekly`, `@daily`, `@midnight`
6
+ * and `@hourly` are accepted. When both the day of the month and the day of the week are restricted, a day matching
7
+ * either of them matches.
8
+ * @example
9
+ * ```typescript
10
+ * import {Cron} from 'lakutata/com/entrypoint'
11
+ *
12
+ * //At 09:30 on the weekdays, in Shanghai
13
+ * const cron: Cron = new Cron('30 9 * * mon-fri', 'Asia/Shanghai')
14
+ * const next: Date | undefined = cron.next(new Date('2026-01-02T12:00:00Z'))
15
+ * console.log(next?.toISOString()) //2026-01-05T01:30:00.000Z
16
+ * console.log(new Cron('0 0 30 2 *').next()) //undefined: February has no 30th
17
+ * ```
18
+ */
19
+ export declare class Cron {
20
+ #private;
21
+ readonly expression: string;
22
+ readonly timezone?: string | undefined;
23
+ /**
24
+ * Parse a cron expression.
25
+ * @param expression The expression, 5 or 6 fields separated by spaces, or a macro (case-insensitive).
26
+ * @param timezone The IANA time zone the expression's times are in (`Asia/Shanghai`); the local time zone when
27
+ * omitted.
28
+ * @throws {SyntaxError} When the expression does not have 5 or 6 fields, or a field has a value out of its range,
29
+ * a reversed range or an invalid step.
30
+ * @throws {RangeError} When the time zone is unknown.
31
+ */
32
+ constructor(expression: string, timezone?: string | undefined);
33
+ /**
34
+ * Find the next time matching the expression, strictly after a time, to the second. When the clocks go back, the
35
+ * times of the repeated hour match once; the times skipped when the clocks go forward never match.
36
+ * @param after The time to search from, a date or milliseconds since the epoch; now by default.
37
+ * @returns The next matching time, `undefined` when none matches within eight years (such as February 30th).
38
+ */
39
+ next(after?: Date | number): Date | undefined;
40
+ }
41
+ /**
42
+ * Parse a duration into milliseconds, as `@Schedule` reads its intervals.
43
+ * @param duration A number of milliseconds, or a text of numbers with their units (`ms`, `s`, `m`, `h`, `d`), summed
44
+ * and case-insensitive: `500ms`, `30s`, `1.5h`, `1h 30m`, `1d`.
45
+ * @returns The duration in milliseconds.
46
+ * @throws {SyntaxError} When the duration is not positive (or not finite), or the text has an unknown part.
47
+ * @example
48
+ * ```typescript
49
+ * import {parseDuration} from 'lakutata/com/entrypoint'
50
+ *
51
+ * console.log(parseDuration('1h30m')) //5400000
52
+ * console.log(parseDuration('500ms')) //500
53
+ * console.log(parseDuration(2000)) //2000
54
+ * ```
55
+ */
56
+ export declare function parseDuration(duration: number | string): number;
@@ -0,0 +1,282 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Cron = void 0;
4
+ exports.parseDuration = parseDuration;
5
+ const MONTHS = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
6
+ const WEEKDAYS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
7
+ const MACROS = {
8
+ '@yearly': '0 0 0 1 1 *',
9
+ '@annually': '0 0 0 1 1 *',
10
+ '@monthly': '0 0 0 1 * *',
11
+ '@weekly': '0 0 0 * * 0',
12
+ '@daily': '0 0 0 * * *',
13
+ '@midnight': '0 0 0 * * *',
14
+ '@hourly': '0 0 * * * *'
15
+ };
16
+ /**
17
+ * The formatters of the time zones
18
+ */
19
+ const formatters = new Map();
20
+ /**
21
+ * The wall clock time of an instant, in a time zone or in the local time
22
+ * @param time
23
+ * @param timezone
24
+ */
25
+ function wallClock(time, timezone) {
26
+ if (!timezone) {
27
+ const date = new Date(time);
28
+ return {
29
+ year: date.getFullYear(),
30
+ month: date.getMonth() + 1,
31
+ day: date.getDate(),
32
+ hour: date.getHours(),
33
+ minute: date.getMinutes(),
34
+ second: date.getSeconds(),
35
+ weekday: date.getDay()
36
+ };
37
+ }
38
+ let formatter = formatters.get(timezone);
39
+ if (!formatter) {
40
+ formatter = new Intl.DateTimeFormat('en-US', {
41
+ timeZone: timezone,
42
+ hourCycle: 'h23',
43
+ year: 'numeric',
44
+ month: 'numeric',
45
+ day: 'numeric',
46
+ hour: 'numeric',
47
+ minute: 'numeric',
48
+ second: 'numeric',
49
+ weekday: 'short'
50
+ });
51
+ formatters.set(timezone, formatter);
52
+ }
53
+ const parts = {};
54
+ for (const part of formatter.formatToParts(new Date(time)))
55
+ parts[part.type] = part.value;
56
+ return {
57
+ year: Number(parts.year),
58
+ month: Number(parts.month),
59
+ day: Number(parts.day),
60
+ hour: Number(parts.hour),
61
+ minute: Number(parts.minute),
62
+ second: Number(parts.second),
63
+ weekday: WEEKDAYS.indexOf(parts.weekday.toLowerCase())
64
+ };
65
+ }
66
+ /**
67
+ * A wall clock time as a number, to compare them
68
+ * @param clock
69
+ */
70
+ function wallKey(clock) {
71
+ return Date.UTC(clock.year, clock.month - 1, clock.day, clock.hour, clock.minute, clock.second);
72
+ }
73
+ /**
74
+ * The instant of a wall clock time (the overflowing fields carry over), in a time zone or in the local time
75
+ * @param year
76
+ * @param month
77
+ * @param day
78
+ * @param hour
79
+ * @param minute
80
+ * @param second
81
+ * @param timezone
82
+ */
83
+ function instant(year, month, day, hour, minute, second, timezone) {
84
+ if (!timezone)
85
+ return new Date(year, month - 1, day, hour, minute, second).getTime();
86
+ const wall = Date.UTC(year, month - 1, day, hour, minute, second);
87
+ //The offset of the time zone at the instant, found again at the corrected instant (the offset changes with the daylight saving time)
88
+ let time = wall;
89
+ for (let pass = 0; pass < 2; pass++) {
90
+ const clock = wallClock(time, timezone);
91
+ const offset = Date.UTC(clock.year, clock.month - 1, clock.day, clock.hour, clock.minute, clock.second) - time;
92
+ time = wall - offset;
93
+ }
94
+ return time;
95
+ }
96
+ /**
97
+ * Parse a field of an expression
98
+ * @param text
99
+ * @param min
100
+ * @param max
101
+ * @param names the names of the values from min
102
+ * @param expression
103
+ */
104
+ function parseField(text, min, max, names, expression) {
105
+ const invalid = (reason) => new SyntaxError(`Invalid cron expression "${expression}": ${reason}`);
106
+ const value = (item) => {
107
+ const index = names ? names.indexOf(item.toLowerCase()) : -1;
108
+ const parsed = index >= 0 ? index + min : /^\d+$/.test(item) ? Number(item) : NaN;
109
+ if (Number.isNaN(parsed) || parsed < min || parsed > max)
110
+ throw invalid(`"${item}" is not a value from ${min} to ${max}`);
111
+ return parsed;
112
+ };
113
+ const values = new Set();
114
+ const restricted = text !== '*' && text !== '?';
115
+ for (const item of text.split(',')) {
116
+ const [range, stepText] = item.split('/');
117
+ const step = stepText === undefined ? 1 : Number(stepText);
118
+ if (!Number.isInteger(step) || step < 1)
119
+ throw invalid(`"${stepText}" is not a step`);
120
+ let start = min;
121
+ let end = max;
122
+ if (range !== '*' && range !== '?') {
123
+ const [from, to] = range.split('-');
124
+ start = value(from);
125
+ end = to === undefined ? (stepText === undefined ? start : max) : value(to);
126
+ if (end < start)
127
+ throw invalid(`the range "${range}" is reversed`);
128
+ }
129
+ for (let current = start; current <= end; current += step)
130
+ values.add(current);
131
+ }
132
+ return { values: values, restricted: restricted };
133
+ }
134
+ /**
135
+ * A cron expression, as `@Schedule` uses it: `second minute hour day-of-month month day-of-week`, the second optional
136
+ * (0 when omitted). Each field accepts `*` (or `?`), values, ranges (`1-5`), steps (`*\/15`, `10/5`, `1-30/2`) and lists
137
+ * (`1,15`); the months and the days of the week also accept their English three-letter names (`jan`, `mon`), and the
138
+ * day of the week 7 is Sunday like 0. The macros `@yearly`, `@annually`, `@monthly`, `@weekly`, `@daily`, `@midnight`
139
+ * and `@hourly` are accepted. When both the day of the month and the day of the week are restricted, a day matching
140
+ * either of them matches.
141
+ * @example
142
+ * ```typescript
143
+ * import {Cron} from 'lakutata/com/entrypoint'
144
+ *
145
+ * //At 09:30 on the weekdays, in Shanghai
146
+ * const cron: Cron = new Cron('30 9 * * mon-fri', 'Asia/Shanghai')
147
+ * const next: Date | undefined = cron.next(new Date('2026-01-02T12:00:00Z'))
148
+ * console.log(next?.toISOString()) //2026-01-05T01:30:00.000Z
149
+ * console.log(new Cron('0 0 30 2 *').next()) //undefined: February has no 30th
150
+ * ```
151
+ */
152
+ class Cron {
153
+ #second;
154
+ #minute;
155
+ #hour;
156
+ #day;
157
+ #month;
158
+ #weekday;
159
+ /**
160
+ * Parse a cron expression.
161
+ * @param expression The expression, 5 or 6 fields separated by spaces, or a macro (case-insensitive).
162
+ * @param timezone The IANA time zone the expression's times are in (`Asia/Shanghai`); the local time zone when
163
+ * omitted.
164
+ * @throws {SyntaxError} When the expression does not have 5 or 6 fields, or a field has a value out of its range,
165
+ * a reversed range or an invalid step.
166
+ * @throws {RangeError} When the time zone is unknown.
167
+ */
168
+ constructor(expression, timezone) {
169
+ this.expression = expression;
170
+ this.timezone = timezone;
171
+ if (timezone)
172
+ new Intl.DateTimeFormat('en-US', { timeZone: timezone });
173
+ const normalized = expression.trim().toLowerCase();
174
+ const fields = (MACROS[normalized] ?? normalized).split(/\s+/);
175
+ if (fields.length === 5)
176
+ fields.unshift('0');
177
+ if (fields.length !== 6)
178
+ throw new SyntaxError(`Invalid cron expression "${expression}": 5 or 6 fields are expected`);
179
+ this.#second = parseField(fields[0], 0, 59, undefined, expression);
180
+ this.#minute = parseField(fields[1], 0, 59, undefined, expression);
181
+ this.#hour = parseField(fields[2], 0, 23, undefined, expression);
182
+ this.#day = parseField(fields[3], 1, 31, undefined, expression);
183
+ this.#month = parseField(fields[4], 1, 12, MONTHS, expression);
184
+ const weekday = parseField(fields[5], 0, 7, WEEKDAYS, expression);
185
+ //7 is Sunday too
186
+ if (weekday.values.delete(7))
187
+ weekday.values.add(0);
188
+ this.#weekday = weekday;
189
+ }
190
+ /**
191
+ * Whether a day matches
192
+ * @param clock
193
+ */
194
+ #dayMatches(clock) {
195
+ const day = this.#day.values.has(clock.day);
196
+ const weekday = this.#weekday.values.has(clock.weekday);
197
+ if (this.#day.restricted && this.#weekday.restricted)
198
+ return day || weekday;
199
+ return day && weekday;
200
+ }
201
+ /**
202
+ * Find the next time matching the expression, strictly after a time, to the second. When the clocks go back, the
203
+ * times of the repeated hour match once; the times skipped when the clocks go forward never match.
204
+ * @param after The time to search from, a date or milliseconds since the epoch; now by default.
205
+ * @returns The next matching time, `undefined` when none matches within eight years (such as February 30th).
206
+ */
207
+ next(after = Date.now()) {
208
+ const timezone = this.timezone;
209
+ const start = Math.floor(new Date(after).getTime() / 1000) * 1000;
210
+ //When the clocks go back, the times of the repeated hour match once
211
+ const afterKey = wallKey(wallClock(start, timezone));
212
+ let time = start + 1000;
213
+ //Eight years of candidates at most: a leap day on a weekday comes back within them
214
+ const limit = time + 8 * 366 * 24 * 3600 * 1000;
215
+ while (time < limit) {
216
+ const clock = wallClock(time, timezone);
217
+ let candidate;
218
+ if (!this.#month.values.has(clock.month)) {
219
+ candidate = instant(clock.year, clock.month + 1, 1, 0, 0, 0, timezone);
220
+ }
221
+ else if (!this.#dayMatches(clock)) {
222
+ candidate = instant(clock.year, clock.month, clock.day + 1, 0, 0, 0, timezone);
223
+ }
224
+ else if (!this.#hour.values.has(clock.hour)) {
225
+ candidate = instant(clock.year, clock.month, clock.day, clock.hour + 1, 0, 0, timezone);
226
+ }
227
+ else if (!this.#minute.values.has(clock.minute)) {
228
+ candidate = instant(clock.year, clock.month, clock.day, clock.hour, clock.minute + 1, 0, timezone);
229
+ }
230
+ else if (!this.#second.values.has(clock.second)) {
231
+ candidate = instant(clock.year, clock.month, clock.day, clock.hour, clock.minute, clock.second + 1, timezone);
232
+ }
233
+ else if (wallKey(clock) <= afterKey) {
234
+ candidate = time + (afterKey - wallKey(clock)) + 1000;
235
+ }
236
+ else {
237
+ return new Date(time);
238
+ }
239
+ //A time skipped by the daylight saving time may map back: the search always moves forward
240
+ time = candidate > time ? candidate : time + 1000;
241
+ }
242
+ return undefined;
243
+ }
244
+ }
245
+ exports.Cron = Cron;
246
+ /**
247
+ * Parse a duration into milliseconds, as `@Schedule` reads its intervals.
248
+ * @param duration A number of milliseconds, or a text of numbers with their units (`ms`, `s`, `m`, `h`, `d`), summed
249
+ * and case-insensitive: `500ms`, `30s`, `1.5h`, `1h 30m`, `1d`.
250
+ * @returns The duration in milliseconds.
251
+ * @throws {SyntaxError} When the duration is not positive (or not finite), or the text has an unknown part.
252
+ * @example
253
+ * ```typescript
254
+ * import {parseDuration} from 'lakutata/com/entrypoint'
255
+ *
256
+ * console.log(parseDuration('1h30m')) //5400000
257
+ * console.log(parseDuration('500ms')) //500
258
+ * console.log(parseDuration(2000)) //2000
259
+ * ```
260
+ */
261
+ function parseDuration(duration) {
262
+ if (typeof duration === 'number') {
263
+ if (!Number.isFinite(duration) || duration <= 0)
264
+ throw new SyntaxError(`Invalid duration ${duration}: a positive number of milliseconds is expected`);
265
+ return duration;
266
+ }
267
+ const units = { ms: 1, s: 1000, m: 60000, h: 3600000, d: 86400000 };
268
+ const text = duration.trim().toLowerCase();
269
+ let total = 0;
270
+ let rest = text;
271
+ const part = /^(\d+(?:\.\d+)?)(ms|s|m|h|d)/;
272
+ while (rest) {
273
+ const matched = part.exec(rest);
274
+ if (!matched)
275
+ throw new SyntaxError(`Invalid duration "${duration}": such as "500ms", "30s", "5m", "1h30m" or "1d"`);
276
+ total += Number(matched[1]) * units[matched[2]];
277
+ rest = rest.slice(matched[0].length).trim();
278
+ }
279
+ if (total <= 0)
280
+ throw new SyntaxError(`Invalid duration "${duration}": it must be positive`);
281
+ return total;
282
+ }
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The parameters creating a `CLIContext`, given by the CLI adapters.
3
+ */
4
+ export type CLIContextParams = {
5
+ /**
6
+ * The command of the action as declared, its controller prefix included (`'user:get <id>'`).
7
+ */
8
+ readonly command: string;
9
+ /**
10
+ * The input of the action before its validation: the positional arguments and the options of the command, by the
11
+ * names of the DTO properties.
12
+ */
13
+ readonly data: Record<string, any>;
14
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The error number and message of an error, as `describeError()` gives them and the HTTP responders answer them
3
+ * (`{errno, errMsg}`).
4
+ */
5
+ export type ErrorDescription = {
6
+ /**
7
+ * The `errno` of the error, else its `code`, else `'E_UNKNOWN'`.
8
+ */
9
+ errno: string | number;
10
+ /**
11
+ * The `errMsg` of the error, else its `message`, else the error converted to a string.
12
+ */
13
+ errMsg: string;
14
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,27 @@
1
+ import { type IncomingMessage, type ServerResponse } from 'node:http';
2
+ /**
3
+ * The parameters creating an `HTTPContext`, given by the HTTP adapters.
4
+ */
5
+ export type HTTPContextParams = {
6
+ /**
7
+ * The route of the action as declared, its controller prefix included (`'/users/:id'`).
8
+ */
9
+ readonly route: string;
10
+ /**
11
+ * The HTTP method of the action, as declared (`'get'`).
12
+ */
13
+ readonly method: string;
14
+ /**
15
+ * The Node.js request.
16
+ */
17
+ readonly request: IncomingMessage;
18
+ /**
19
+ * The Node.js response.
20
+ */
21
+ readonly response: ServerResponse;
22
+ /**
23
+ * The input of the action before its validation: by default, the query string merged with the parsed body (the
24
+ * route parameters are given apart, to the dispatch).
25
+ */
26
+ readonly data: Record<string, any>;
27
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,21 @@
1
+ /**
2
+ * The parameters creating a `ScheduleContext`, given by the schedule adapter.
3
+ */
4
+ export type ScheduleContextParams = {
5
+ /**
6
+ * The schedule of the action, as a text (`'every 30s'`, `'cron 0 * * * *'`).
7
+ */
8
+ readonly schedule: string;
9
+ /**
10
+ * The time the run was planned for.
11
+ */
12
+ readonly scheduledAt: Date;
13
+ /**
14
+ * The number of the run, from 1.
15
+ */
16
+ readonly run: number;
17
+ /**
18
+ * The input of the run: an empty object for the schedule adapter.
19
+ */
20
+ readonly data: Record<string, any>;
21
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,16 @@
1
+ import { type ActionPattern } from '@lakutata/core';
2
+ /**
3
+ * The parameters creating a `ServiceContext`, given by the service adapters (which may add their own, such as the
4
+ * Socket.IO socket).
5
+ */
6
+ export type ServiceContextParams = {
7
+ /**
8
+ * The message received: an object, matched against the actions' patterns.
9
+ */
10
+ readonly data: ActionPattern;
11
+ /**
12
+ * The id of the client of the request, which `Entrypoint.notify()` pushes the events to; omitted for the transports
13
+ * without clients.
14
+ */
15
+ readonly clientId?: string;
16
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });