@webda/core 4.0.0-beta.2 → 4.0.0-beta.4

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 (793) hide show
  1. package/README.md +252 -0
  2. package/lib/application/application.d.ts +468 -0
  3. package/lib/application/application.d.ts.map +1 -0
  4. package/lib/application/application.js +845 -0
  5. package/lib/application/application.js.map +1 -0
  6. package/lib/application/deployment.d.ts +93 -0
  7. package/lib/application/deployment.d.ts.map +1 -0
  8. package/lib/application/deployment.js +99 -0
  9. package/lib/application/deployment.js.map +1 -0
  10. package/lib/application/hooks.d.ts +34 -0
  11. package/lib/application/hooks.d.ts.map +1 -0
  12. package/lib/application/hooks.js +57 -0
  13. package/lib/application/hooks.js.map +1 -0
  14. package/lib/application/iapplication.d.ts +43 -0
  15. package/lib/application/iapplication.d.ts.map +1 -0
  16. package/lib/application/iapplication.js +2 -0
  17. package/lib/application/iapplication.js.map +1 -0
  18. package/lib/application/iconfiguration.d.ts +176 -0
  19. package/lib/application/iconfiguration.d.ts.map +1 -0
  20. package/lib/application/iconfiguration.js +8 -0
  21. package/lib/application/iconfiguration.js.map +1 -0
  22. package/lib/application/runner.d.ts +8 -0
  23. package/lib/application/runner.d.ts.map +1 -0
  24. package/lib/application/runner.js +26 -0
  25. package/lib/application/runner.js.map +1 -0
  26. package/lib/{unpackedapplication.d.ts → application/unpackedapplication.d.ts} +43 -23
  27. package/lib/application/unpackedapplication.d.ts.map +1 -0
  28. package/lib/application/unpackedapplication.js +500 -0
  29. package/lib/application/unpackedapplication.js.map +1 -0
  30. package/lib/bin/cli-phase.d.ts +28 -0
  31. package/lib/bin/cli-phase.d.ts.map +1 -0
  32. package/lib/bin/cli-phase.js +44 -0
  33. package/lib/bin/cli-phase.js.map +1 -0
  34. package/lib/bin/cli.d.ts +196 -0
  35. package/lib/bin/cli.d.ts.map +1 -0
  36. package/lib/bin/cli.js +934 -0
  37. package/lib/bin/cli.js.map +1 -0
  38. package/lib/bin/launcher.d.ts +3 -0
  39. package/lib/bin/launcher.d.ts.map +1 -0
  40. package/lib/bin/launcher.js +50 -0
  41. package/lib/bin/launcher.js.map +1 -0
  42. package/lib/cache/cache.d.ts +33 -0
  43. package/lib/cache/cache.d.ts.map +1 -0
  44. package/lib/cache/cache.js +8 -0
  45. package/lib/cache/cache.js.map +1 -0
  46. package/lib/{services/configuration.d.ts → configurations/configuration.service.d.ts} +58 -58
  47. package/lib/configurations/configuration.service.d.ts.map +1 -0
  48. package/lib/configurations/configuration.service.js +248 -0
  49. package/lib/configurations/configuration.service.js.map +1 -0
  50. package/lib/configurations/fileconfiguration.service.d.ts +30 -0
  51. package/lib/configurations/fileconfiguration.service.d.ts.map +1 -0
  52. package/lib/configurations/fileconfiguration.service.js +65 -0
  53. package/lib/configurations/fileconfiguration.service.js.map +1 -0
  54. package/lib/configurations/kubernetesconfiguration.service.d.ts +43 -0
  55. package/lib/configurations/kubernetesconfiguration.service.d.ts.map +1 -0
  56. package/lib/configurations/kubernetesconfiguration.service.js +83 -0
  57. package/lib/configurations/kubernetesconfiguration.service.js.map +1 -0
  58. package/lib/contexts/execution.d.ts +33 -0
  59. package/lib/contexts/execution.d.ts.map +1 -0
  60. package/lib/contexts/execution.js +73 -0
  61. package/lib/contexts/execution.js.map +1 -0
  62. package/lib/contexts/globalcontext.d.ts +29 -0
  63. package/lib/contexts/globalcontext.d.ts.map +1 -0
  64. package/lib/contexts/globalcontext.js +38 -0
  65. package/lib/contexts/globalcontext.js.map +1 -0
  66. package/lib/{utils → contexts}/httpcontext.d.ts +44 -19
  67. package/lib/contexts/httpcontext.d.ts.map +1 -0
  68. package/lib/{utils → contexts}/httpcontext.js +95 -27
  69. package/lib/contexts/httpcontext.js.map +1 -0
  70. package/lib/contexts/icontext.d.ts +236 -0
  71. package/lib/contexts/icontext.d.ts.map +1 -0
  72. package/lib/contexts/icontext.js +230 -0
  73. package/lib/contexts/icontext.js.map +1 -0
  74. package/lib/contexts/operationcontext.d.ts +182 -0
  75. package/lib/contexts/operationcontext.d.ts.map +1 -0
  76. package/lib/contexts/operationcontext.js +361 -0
  77. package/lib/contexts/operationcontext.js.map +1 -0
  78. package/lib/contexts/simplecontext.d.ts +31 -0
  79. package/lib/contexts/simplecontext.d.ts.map +1 -0
  80. package/lib/contexts/simplecontext.js +45 -0
  81. package/lib/contexts/simplecontext.js.map +1 -0
  82. package/lib/contexts/webcontext.d.ts +218 -0
  83. package/lib/contexts/webcontext.d.ts.map +1 -0
  84. package/lib/contexts/webcontext.js +389 -0
  85. package/lib/contexts/webcontext.js.map +1 -0
  86. package/lib/core/authorizer.d.ts +23 -0
  87. package/lib/core/authorizer.d.ts.map +1 -0
  88. package/lib/core/authorizer.js +17 -0
  89. package/lib/core/authorizer.js.map +1 -0
  90. package/lib/core/core.d.ts +225 -0
  91. package/lib/core/core.d.ts.map +1 -0
  92. package/lib/core/core.js +576 -0
  93. package/lib/core/core.js.map +1 -0
  94. package/lib/core/hooks.d.ts +94 -0
  95. package/lib/core/hooks.d.ts.map +1 -0
  96. package/lib/core/hooks.js +97 -0
  97. package/lib/core/hooks.js.map +1 -0
  98. package/lib/core/icore.d.ts +249 -0
  99. package/lib/core/icore.d.ts.map +1 -0
  100. package/lib/core/icore.js +15 -0
  101. package/lib/core/icore.js.map +1 -0
  102. package/lib/core/instancestorage.d.ts +61 -0
  103. package/lib/core/instancestorage.d.ts.map +1 -0
  104. package/lib/core/instancestorage.js +75 -0
  105. package/lib/core/instancestorage.js.map +1 -0
  106. package/lib/core/operations.d.ts +181 -0
  107. package/lib/core/operations.d.ts.map +1 -0
  108. package/lib/core/operations.js +559 -0
  109. package/lib/core/operations.js.map +1 -0
  110. package/lib/deployers/deployer.d.ts +157 -0
  111. package/lib/deployers/deployer.d.ts.map +1 -0
  112. package/lib/deployers/deployer.js +81 -0
  113. package/lib/deployers/deployer.js.map +1 -0
  114. package/lib/deployers/git.d.ts +27 -0
  115. package/lib/deployers/git.d.ts.map +1 -0
  116. package/lib/deployers/git.js +66 -0
  117. package/lib/deployers/git.js.map +1 -0
  118. package/lib/deployers/packager.d.ts +85 -0
  119. package/lib/deployers/packager.d.ts.map +1 -0
  120. package/lib/deployers/packager.js +259 -0
  121. package/lib/deployers/packager.js.map +1 -0
  122. package/lib/errors/errors.d.ts +126 -0
  123. package/lib/errors/errors.d.ts.map +1 -0
  124. package/lib/errors/errors.js +165 -0
  125. package/lib/errors/errors.js.map +1 -0
  126. package/lib/events/asynceventemitter.d.ts +159 -0
  127. package/lib/events/asynceventemitter.d.ts.map +1 -0
  128. package/lib/events/asynceventemitter.js +152 -0
  129. package/lib/events/asynceventemitter.js.map +1 -0
  130. package/lib/events/events.d.ts +112 -0
  131. package/lib/events/events.d.ts.map +1 -0
  132. package/lib/events/events.js +45 -0
  133. package/lib/events/events.js.map +1 -0
  134. package/lib/index.d.ts +88 -54
  135. package/lib/index.d.ts.map +1 -1
  136. package/lib/index.js +88 -64
  137. package/lib/index.js.map +1 -1
  138. package/lib/loggers/console.service.d.ts +24 -0
  139. package/lib/loggers/console.service.d.ts.map +1 -0
  140. package/lib/loggers/console.service.js +30 -0
  141. package/lib/loggers/console.service.js.map +1 -0
  142. package/lib/loggers/file.service.d.ts +25 -0
  143. package/lib/loggers/file.service.d.ts.map +1 -0
  144. package/lib/loggers/file.service.js +33 -0
  145. package/lib/loggers/file.service.js.map +1 -0
  146. package/lib/loggers/hooks.d.ts +20 -0
  147. package/lib/loggers/hooks.d.ts.map +1 -0
  148. package/lib/loggers/hooks.js +40 -0
  149. package/lib/loggers/hooks.js.map +1 -0
  150. package/lib/loggers/ilogger.d.ts +76 -0
  151. package/lib/loggers/ilogger.d.ts.map +1 -0
  152. package/lib/loggers/ilogger.js +108 -0
  153. package/lib/loggers/ilogger.js.map +1 -0
  154. package/lib/loggers/logger.d.ts +13 -0
  155. package/lib/loggers/logger.d.ts.map +1 -0
  156. package/lib/loggers/logger.js +18 -0
  157. package/lib/loggers/logger.js.map +1 -0
  158. package/lib/loggers/memory.service.d.ts +18 -0
  159. package/lib/loggers/memory.service.d.ts.map +1 -0
  160. package/lib/loggers/memory.service.js +21 -0
  161. package/lib/loggers/memory.service.js.map +1 -0
  162. package/lib/loggers/params.d.ts +47 -0
  163. package/lib/loggers/params.d.ts.map +1 -0
  164. package/lib/loggers/params.js +56 -0
  165. package/lib/loggers/params.js.map +1 -0
  166. package/lib/metrics/metrics.d.ts +25 -0
  167. package/lib/metrics/metrics.d.ts.map +1 -0
  168. package/lib/metrics/metrics.js +51 -0
  169. package/lib/metrics/metrics.js.map +1 -0
  170. package/lib/models/aclmodel.d.ts +20 -76
  171. package/lib/models/aclmodel.d.ts.map +1 -1
  172. package/lib/models/aclmodel.js +27 -203
  173. package/lib/models/aclmodel.js.map +1 -1
  174. package/lib/models/coremodel.model.d.ts +5 -0
  175. package/lib/models/coremodel.model.d.ts.map +1 -0
  176. package/lib/models/coremodel.model.js +5 -0
  177. package/lib/models/coremodel.model.js.map +1 -0
  178. package/lib/models/decorator.d.ts +67 -0
  179. package/lib/models/decorator.d.ts.map +1 -0
  180. package/lib/models/decorator.js +67 -0
  181. package/lib/models/decorator.js.map +1 -0
  182. package/lib/models/deployment.d.ts +2 -21
  183. package/lib/models/deployment.d.ts.map +1 -1
  184. package/lib/models/encrypted.model.d.ts +46 -0
  185. package/lib/models/encrypted.model.d.ts.map +1 -0
  186. package/lib/models/encrypted.model.js +87 -0
  187. package/lib/models/encrypted.model.js.map +1 -0
  188. package/lib/models/ident.model.d.ts +128 -0
  189. package/lib/models/ident.model.d.ts.map +1 -0
  190. package/lib/models/ident.model.js +207 -0
  191. package/lib/models/ident.model.js.map +1 -0
  192. package/lib/models/ownermodel.model.d.ts +68 -0
  193. package/lib/models/ownermodel.model.d.ts.map +1 -0
  194. package/lib/models/ownermodel.model.js +113 -0
  195. package/lib/models/ownermodel.model.js.map +1 -0
  196. package/lib/models/password.model.d.ts +78 -0
  197. package/lib/models/password.model.d.ts.map +1 -0
  198. package/lib/models/password.model.js +171 -0
  199. package/lib/models/password.model.js.map +1 -0
  200. package/lib/models/refreshtoken.model.d.ts +30 -0
  201. package/lib/models/refreshtoken.model.d.ts.map +1 -0
  202. package/lib/models/refreshtoken.model.js +29 -0
  203. package/lib/models/refreshtoken.model.js.map +1 -0
  204. package/lib/models/registry.model.d.ts +76 -0
  205. package/lib/models/registry.model.d.ts.map +1 -0
  206. package/lib/models/registry.model.js +104 -0
  207. package/lib/models/registry.model.js.map +1 -0
  208. package/lib/models/rolemodel.model.d.ts +28 -0
  209. package/lib/models/rolemodel.model.d.ts.map +1 -0
  210. package/lib/models/{rolemodel.js → rolemodel.model.js} +23 -5
  211. package/lib/models/rolemodel.model.js.map +1 -0
  212. package/lib/models/simpleuser.model.d.ts +78 -0
  213. package/lib/models/simpleuser.model.d.ts.map +1 -0
  214. package/lib/models/simpleuser.model.js +124 -0
  215. package/lib/models/simpleuser.model.js.map +1 -0
  216. package/lib/models/types.d.ts +113 -0
  217. package/lib/models/types.d.ts.map +1 -0
  218. package/lib/models/types.js +2 -0
  219. package/lib/models/types.js.map +1 -0
  220. package/lib/models/user.model.d.ts +103 -0
  221. package/lib/models/user.model.d.ts.map +1 -0
  222. package/lib/models/user.model.js +164 -0
  223. package/lib/models/user.model.js.map +1 -0
  224. package/lib/queues/{memoryqueue.d.ts → memoryqueue.service.d.ts} +26 -13
  225. package/lib/queues/memoryqueue.service.d.ts.map +1 -0
  226. package/lib/queues/{memoryqueue.js → memoryqueue.service.js} +55 -31
  227. package/lib/queues/memoryqueue.service.js.map +1 -0
  228. package/lib/queues/pubsubservice.d.ts +8 -6
  229. package/lib/queues/pubsubservice.d.ts.map +1 -1
  230. package/lib/queues/pubsubservice.js +5 -4
  231. package/lib/queues/pubsubservice.js.map +1 -1
  232. package/lib/queues/queueservice.d.ts +9 -11
  233. package/lib/queues/queueservice.d.ts.map +1 -1
  234. package/lib/queues/queueservice.js +41 -13
  235. package/lib/queues/queueservice.js.map +1 -1
  236. package/lib/rest/hooks.d.ts +8 -0
  237. package/lib/rest/hooks.d.ts.map +1 -0
  238. package/lib/rest/hooks.js +10 -0
  239. package/lib/rest/hooks.js.map +1 -0
  240. package/lib/rest/irest.d.ts +212 -0
  241. package/lib/rest/irest.d.ts.map +1 -0
  242. package/lib/rest/irest.js +39 -0
  243. package/lib/rest/irest.js.map +1 -0
  244. package/lib/rest/originfilter.d.ts +38 -0
  245. package/lib/rest/originfilter.d.ts.map +1 -0
  246. package/lib/rest/originfilter.js +61 -0
  247. package/lib/rest/originfilter.js.map +1 -0
  248. package/lib/rest/restoperationstransport.service.d.ts +193 -0
  249. package/lib/rest/restoperationstransport.service.d.ts.map +1 -0
  250. package/lib/rest/restoperationstransport.service.js +780 -0
  251. package/lib/rest/restoperationstransport.service.js.map +1 -0
  252. package/lib/rest/router.service.d.ts +244 -0
  253. package/lib/rest/router.service.d.ts.map +1 -0
  254. package/lib/rest/router.service.js +843 -0
  255. package/lib/rest/router.service.js.map +1 -0
  256. package/lib/schemas/hooks.d.ts +48 -0
  257. package/lib/schemas/hooks.d.ts.map +1 -0
  258. package/lib/schemas/hooks.js +152 -0
  259. package/lib/schemas/hooks.js.map +1 -0
  260. package/lib/services/audit.model.d.ts +208 -0
  261. package/lib/services/audit.model.d.ts.map +1 -0
  262. package/lib/services/audit.model.js +432 -0
  263. package/lib/services/audit.model.js.map +1 -0
  264. package/lib/services/binary.service.d.ts +808 -0
  265. package/lib/services/binary.service.d.ts.map +1 -0
  266. package/lib/services/binary.service.js +1365 -0
  267. package/lib/services/binary.service.js.map +1 -0
  268. package/lib/services/cloudbinary.d.ts +17 -12
  269. package/lib/services/cloudbinary.d.ts.map +1 -1
  270. package/lib/services/cloudbinary.js +23 -17
  271. package/lib/services/cloudbinary.js.map +1 -1
  272. package/lib/services/command.d.ts +118 -0
  273. package/lib/services/command.d.ts.map +1 -0
  274. package/lib/services/command.js +97 -0
  275. package/lib/services/command.js.map +1 -0
  276. package/lib/services/cron.service.d.ts +142 -0
  277. package/lib/services/cron.service.d.ts.map +1 -0
  278. package/lib/services/cron.service.js +291 -0
  279. package/lib/services/cron.service.js.map +1 -0
  280. package/lib/services/{cryptoservice.d.ts → cryptoservice.service.d.ts} +75 -141
  281. package/lib/services/cryptoservice.service.d.ts.map +1 -0
  282. package/lib/services/cryptoservice.service.js +527 -0
  283. package/lib/services/cryptoservice.service.js.map +1 -0
  284. package/lib/services/debugmailer.service.d.ts +49 -0
  285. package/lib/services/debugmailer.service.d.ts.map +1 -0
  286. package/lib/services/{debugmailer.js → debugmailer.service.js} +25 -10
  287. package/lib/services/debugmailer.service.js.map +1 -0
  288. package/lib/services/domainservice.service.d.ts +242 -0
  289. package/lib/services/domainservice.service.d.ts.map +1 -0
  290. package/lib/services/domainservice.service.js +676 -0
  291. package/lib/services/domainservice.service.js.map +1 -0
  292. package/lib/services/httpserver.service.d.ts +248 -0
  293. package/lib/services/httpserver.service.d.ts.map +1 -0
  294. package/lib/services/httpserver.service.js +673 -0
  295. package/lib/services/httpserver.service.js.map +1 -0
  296. package/lib/services/iauthentication.d.ts +202 -0
  297. package/lib/services/iauthentication.d.ts.map +1 -0
  298. package/lib/services/iauthentication.js +2 -0
  299. package/lib/services/iauthentication.js.map +1 -0
  300. package/lib/services/icryptoservice.d.ts +127 -0
  301. package/lib/services/icryptoservice.d.ts.map +1 -0
  302. package/lib/services/icryptoservice.js +68 -0
  303. package/lib/services/icryptoservice.js.map +1 -0
  304. package/lib/services/imailer.d.ts +17 -0
  305. package/lib/services/imailer.d.ts.map +1 -0
  306. package/lib/services/imailer.js +2 -0
  307. package/lib/services/imailer.js.map +1 -0
  308. package/lib/services/iservice.d.ts +104 -0
  309. package/lib/services/iservice.d.ts.map +1 -0
  310. package/lib/services/iservice.js +63 -0
  311. package/lib/services/iservice.js.map +1 -0
  312. package/lib/services/mailer.service.d.ts +220 -0
  313. package/lib/services/mailer.service.d.ts.map +1 -0
  314. package/lib/services/mailer.service.js +251 -0
  315. package/lib/services/mailer.service.js.map +1 -0
  316. package/lib/services/{notificationservice.d.ts → notificationservice.service.d.ts} +10 -11
  317. package/lib/services/notificationservice.service.d.ts.map +1 -0
  318. package/lib/services/{notificationservice.js → notificationservice.service.js} +24 -12
  319. package/lib/services/notificationservice.service.js.map +1 -0
  320. package/lib/services/operationstransport.d.ts +65 -0
  321. package/lib/services/operationstransport.d.ts.map +1 -0
  322. package/lib/services/operationstransport.js +103 -0
  323. package/lib/services/operationstransport.js.map +1 -0
  324. package/lib/services/{prometheus.d.ts → prometheus.service.d.ts} +13 -12
  325. package/lib/services/prometheus.service.d.ts.map +1 -0
  326. package/lib/services/prometheus.service.js +203 -0
  327. package/lib/services/prometheus.service.js.map +1 -0
  328. package/lib/services/{resource.d.ts → resource.service.d.ts} +34 -15
  329. package/lib/services/resource.service.d.ts.map +1 -0
  330. package/lib/services/resource.service.js +301 -0
  331. package/lib/services/resource.service.js.map +1 -0
  332. package/lib/services/service.d.ts +87 -188
  333. package/lib/services/service.d.ts.map +1 -1
  334. package/lib/services/service.js +407 -422
  335. package/lib/services/service.js.map +1 -1
  336. package/lib/services/servicecommands.d.ts +99 -0
  337. package/lib/services/servicecommands.d.ts.map +1 -0
  338. package/lib/services/servicecommands.js +171 -0
  339. package/lib/services/servicecommands.js.map +1 -0
  340. package/lib/services/serviceparameters.d.ts +33 -0
  341. package/lib/services/serviceparameters.d.ts.map +1 -0
  342. package/lib/services/serviceparameters.js +79 -0
  343. package/lib/services/serviceparameters.js.map +1 -0
  344. package/lib/services/token.service.d.ts +95 -0
  345. package/lib/services/token.service.d.ts.map +1 -0
  346. package/lib/services/token.service.js +182 -0
  347. package/lib/services/token.service.js.map +1 -0
  348. package/lib/{utils → session}/cookie.d.ts +32 -19
  349. package/lib/session/cookie.d.ts.map +1 -0
  350. package/lib/{utils → session}/cookie.js +76 -23
  351. package/lib/session/cookie.js.map +1 -0
  352. package/lib/session/manager.model.d.ts +87 -0
  353. package/lib/session/manager.model.d.ts.map +1 -0
  354. package/lib/session/manager.model.js +212 -0
  355. package/lib/session/manager.model.js.map +1 -0
  356. package/lib/session/session.d.ts +100 -0
  357. package/lib/session/session.d.ts.map +1 -0
  358. package/lib/session/session.js +175 -0
  359. package/lib/session/session.js.map +1 -0
  360. package/lib/stores/istore.d.ts +99 -0
  361. package/lib/stores/istore.d.ts.map +1 -0
  362. package/lib/stores/istore.js +26 -0
  363. package/lib/stores/istore.js.map +1 -0
  364. package/lib/stores/memory.service.d.ts +114 -0
  365. package/lib/stores/memory.service.d.ts.map +1 -0
  366. package/lib/stores/memory.service.js +344 -0
  367. package/lib/stores/memory.service.js.map +1 -0
  368. package/lib/stores/store.d.ts +126 -626
  369. package/lib/stores/store.d.ts.map +1 -1
  370. package/lib/stores/store.js +257 -1117
  371. package/lib/stores/store.js.map +1 -1
  372. package/lib/templates/templates.d.ts +47 -0
  373. package/lib/templates/templates.d.ts.map +1 -0
  374. package/lib/templates/templates.js +101 -0
  375. package/lib/templates/templates.js.map +1 -0
  376. package/lib/test/application.d.ts +174 -0
  377. package/lib/test/application.d.ts.map +1 -0
  378. package/lib/test/application.js +288 -0
  379. package/lib/test/application.js.map +1 -0
  380. package/lib/test/asyncstorage.d.ts +16 -0
  381. package/lib/test/asyncstorage.d.ts.map +1 -0
  382. package/lib/test/asyncstorage.js +32 -0
  383. package/lib/test/asyncstorage.js.map +1 -0
  384. package/lib/test/behavior-fixture.model.d.ts +30 -0
  385. package/lib/test/behavior-fixture.model.d.ts.map +1 -0
  386. package/lib/test/behavior-fixture.model.js +63 -0
  387. package/lib/test/behavior-fixture.model.js.map +1 -0
  388. package/lib/test/core.d.ts +63 -0
  389. package/lib/test/core.d.ts.map +1 -0
  390. package/lib/test/core.js +190 -0
  391. package/lib/test/core.js.map +1 -0
  392. package/lib/test/index.d.ts +7 -0
  393. package/lib/test/index.d.ts.map +1 -0
  394. package/lib/test/index.js +8 -0
  395. package/lib/test/index.js.map +1 -0
  396. package/lib/test/internal.d.ts +34 -0
  397. package/lib/test/internal.d.ts.map +1 -0
  398. package/lib/test/internal.js +156 -0
  399. package/lib/test/internal.js.map +1 -0
  400. package/lib/test/legacyident.fixture.model.d.ts +98 -0
  401. package/lib/test/legacyident.fixture.model.d.ts.map +1 -0
  402. package/lib/test/legacyident.fixture.model.js +125 -0
  403. package/lib/test/legacyident.fixture.model.js.map +1 -0
  404. package/lib/test/objects.d.ts +318 -0
  405. package/lib/test/objects.d.ts.map +1 -0
  406. package/lib/test/objects.js +443 -0
  407. package/lib/test/objects.js.map +1 -0
  408. package/lib/utils/abstractdeployer.d.ts +4 -2
  409. package/lib/utils/abstractdeployer.d.ts.map +1 -1
  410. package/lib/utils/abstractdeployer.js +3 -0
  411. package/lib/utils/abstractdeployer.js.map +1 -1
  412. package/package.json +102 -60
  413. package/test/cachedapp/webda.config.json +1 -5
  414. package/test/config-cached.json +3 -6
  415. package/test/config.json +3 -10
  416. package/test/my-cnf.json +9 -0
  417. package/webda.module.json +3755 -2496
  418. package/lib/application.d.ts +0 -888
  419. package/lib/application.d.ts.map +0 -1
  420. package/lib/application.js +0 -768
  421. package/lib/application.js.map +0 -1
  422. package/lib/application.spec.d.ts +0 -2
  423. package/lib/application.spec.d.ts.map +0 -1
  424. package/lib/application.spec.js +0 -248
  425. package/lib/application.spec.js.map +0 -1
  426. package/lib/core.d.ts +0 -743
  427. package/lib/core.d.ts.map +0 -1
  428. package/lib/core.js +0 -1334
  429. package/lib/core.js.map +0 -1
  430. package/lib/core.spec.d.ts +0 -2
  431. package/lib/core.spec.d.ts.map +0 -1
  432. package/lib/core.spec.js +0 -790
  433. package/lib/core.spec.js.map +0 -1
  434. package/lib/errors.d.ts +0 -64
  435. package/lib/errors.d.ts.map +0 -1
  436. package/lib/errors.js +0 -97
  437. package/lib/errors.js.map +0 -1
  438. package/lib/errors.spec.d.ts +0 -2
  439. package/lib/errors.spec.d.ts.map +0 -1
  440. package/lib/errors.spec.js +0 -33
  441. package/lib/errors.spec.js.map +0 -1
  442. package/lib/models/aclmodel.spec.d.ts +0 -2
  443. package/lib/models/aclmodel.spec.d.ts.map +0 -1
  444. package/lib/models/aclmodel.spec.js +0 -187
  445. package/lib/models/aclmodel.spec.js.map +0 -1
  446. package/lib/models/coremodel.d.ts +0 -896
  447. package/lib/models/coremodel.d.ts.map +0 -1
  448. package/lib/models/coremodel.js +0 -1214
  449. package/lib/models/coremodel.js.map +0 -1
  450. package/lib/models/coremodel.spec.d.ts +0 -2
  451. package/lib/models/coremodel.spec.d.ts.map +0 -1
  452. package/lib/models/coremodel.spec.js +0 -464
  453. package/lib/models/coremodel.spec.js.map +0 -1
  454. package/lib/models/ident.d.ts +0 -68
  455. package/lib/models/ident.d.ts.map +0 -1
  456. package/lib/models/ident.js +0 -26
  457. package/lib/models/ident.js.map +0 -1
  458. package/lib/models/ident.spec.d.ts +0 -2
  459. package/lib/models/ident.spec.d.ts.map +0 -1
  460. package/lib/models/ident.spec.js +0 -24
  461. package/lib/models/ident.spec.js.map +0 -1
  462. package/lib/models/ownermodel.d.ts +0 -51
  463. package/lib/models/ownermodel.d.ts.map +0 -1
  464. package/lib/models/ownermodel.js +0 -65
  465. package/lib/models/ownermodel.js.map +0 -1
  466. package/lib/models/ownermodel.spec.d.ts +0 -2
  467. package/lib/models/ownermodel.spec.d.ts.map +0 -1
  468. package/lib/models/ownermodel.spec.js +0 -215
  469. package/lib/models/ownermodel.spec.js.map +0 -1
  470. package/lib/models/relations.d.ts +0 -182
  471. package/lib/models/relations.d.ts.map +0 -1
  472. package/lib/models/relations.js +0 -157
  473. package/lib/models/relations.js.map +0 -1
  474. package/lib/models/relations.spec.d.ts +0 -14
  475. package/lib/models/relations.spec.d.ts.map +0 -1
  476. package/lib/models/relations.spec.js +0 -217
  477. package/lib/models/relations.spec.js.map +0 -1
  478. package/lib/models/rolemodel.d.ts +0 -11
  479. package/lib/models/rolemodel.d.ts.map +0 -1
  480. package/lib/models/rolemodel.js.map +0 -1
  481. package/lib/models/rolemodel.spec.d.ts +0 -2
  482. package/lib/models/rolemodel.spec.d.ts.map +0 -1
  483. package/lib/models/rolemodel.spec.js +0 -90
  484. package/lib/models/rolemodel.spec.js.map +0 -1
  485. package/lib/models/simpleuser.d.ts +0 -47
  486. package/lib/models/simpleuser.d.ts.map +0 -1
  487. package/lib/models/simpleuser.js +0 -84
  488. package/lib/models/simpleuser.js.map +0 -1
  489. package/lib/models/test.d.ts +0 -11
  490. package/lib/models/test.d.ts.map +0 -1
  491. package/lib/models/test.js +0 -7
  492. package/lib/models/test.js.map +0 -1
  493. package/lib/models/user.d.ts +0 -67
  494. package/lib/models/user.d.ts.map +0 -1
  495. package/lib/models/user.js +0 -86
  496. package/lib/models/user.js.map +0 -1
  497. package/lib/models/user.spec.d.ts +0 -2
  498. package/lib/models/user.spec.d.ts.map +0 -1
  499. package/lib/models/user.spec.js +0 -89
  500. package/lib/models/user.spec.js.map +0 -1
  501. package/lib/queues/filequeue.d.ts +0 -59
  502. package/lib/queues/filequeue.d.ts.map +0 -1
  503. package/lib/queues/filequeue.js +0 -131
  504. package/lib/queues/filequeue.js.map +0 -1
  505. package/lib/queues/filequeue.spec.d.ts +0 -2
  506. package/lib/queues/filequeue.spec.d.ts.map +0 -1
  507. package/lib/queues/filequeue.spec.js +0 -84
  508. package/lib/queues/filequeue.spec.js.map +0 -1
  509. package/lib/queues/memoryqueue.d.ts.map +0 -1
  510. package/lib/queues/memoryqueue.js.map +0 -1
  511. package/lib/queues/memoryqueue.spec.d.ts +0 -2
  512. package/lib/queues/memoryqueue.spec.d.ts.map +0 -1
  513. package/lib/queues/memoryqueue.spec.js +0 -203
  514. package/lib/queues/memoryqueue.spec.js.map +0 -1
  515. package/lib/queues/queue.spec.d.ts +0 -6
  516. package/lib/queues/queue.spec.d.ts.map +0 -1
  517. package/lib/queues/queue.spec.js +0 -55
  518. package/lib/queues/queue.spec.js.map +0 -1
  519. package/lib/rest/restdomainservice.d.ts +0 -63
  520. package/lib/rest/restdomainservice.d.ts.map +0 -1
  521. package/lib/rest/restdomainservice.js +0 -687
  522. package/lib/rest/restdomainservice.js.map +0 -1
  523. package/lib/rest/restdomainservice.spec.d.ts +0 -2
  524. package/lib/rest/restdomainservice.spec.d.ts.map +0 -1
  525. package/lib/rest/restdomainservice.spec.js +0 -124
  526. package/lib/rest/restdomainservice.spec.js.map +0 -1
  527. package/lib/rest/router.d.ts +0 -174
  528. package/lib/rest/router.d.ts.map +0 -1
  529. package/lib/rest/router.js +0 -429
  530. package/lib/rest/router.js.map +0 -1
  531. package/lib/rest/router.spec.d.ts +0 -2
  532. package/lib/rest/router.spec.d.ts.map +0 -1
  533. package/lib/rest/router.spec.js +0 -255
  534. package/lib/rest/router.spec.js.map +0 -1
  535. package/lib/services/asyncevents.d.ts +0 -152
  536. package/lib/services/asyncevents.d.ts.map +0 -1
  537. package/lib/services/asyncevents.js +0 -217
  538. package/lib/services/asyncevents.js.map +0 -1
  539. package/lib/services/asyncevents.spec.d.ts +0 -2
  540. package/lib/services/asyncevents.spec.d.ts.map +0 -1
  541. package/lib/services/asyncevents.spec.js +0 -118
  542. package/lib/services/asyncevents.spec.js.map +0 -1
  543. package/lib/services/authentication.d.ts +0 -361
  544. package/lib/services/authentication.d.ts.map +0 -1
  545. package/lib/services/authentication.js +0 -773
  546. package/lib/services/authentication.js.map +0 -1
  547. package/lib/services/authentication.spec.d.ts +0 -2
  548. package/lib/services/authentication.spec.d.ts.map +0 -1
  549. package/lib/services/authentication.spec.js +0 -458
  550. package/lib/services/authentication.spec.js.map +0 -1
  551. package/lib/services/binary.d.ts +0 -477
  552. package/lib/services/binary.d.ts.map +0 -1
  553. package/lib/services/binary.js +0 -617
  554. package/lib/services/binary.js.map +0 -1
  555. package/lib/services/binary.spec.d.ts +0 -41
  556. package/lib/services/binary.spec.d.ts.map +0 -1
  557. package/lib/services/binary.spec.js +0 -151
  558. package/lib/services/binary.spec.js.map +0 -1
  559. package/lib/services/cloudbinary.spec.d.ts +0 -6
  560. package/lib/services/cloudbinary.spec.d.ts.map +0 -1
  561. package/lib/services/cloudbinary.spec.js +0 -66
  562. package/lib/services/cloudbinary.spec.js.map +0 -1
  563. package/lib/services/configuration.d.ts.map +0 -1
  564. package/lib/services/configuration.js +0 -193
  565. package/lib/services/configuration.js.map +0 -1
  566. package/lib/services/configuration.spec.d.ts +0 -2
  567. package/lib/services/configuration.spec.d.ts.map +0 -1
  568. package/lib/services/configuration.spec.js +0 -130
  569. package/lib/services/configuration.spec.js.map +0 -1
  570. package/lib/services/cron.d.ts +0 -74
  571. package/lib/services/cron.d.ts.map +0 -1
  572. package/lib/services/cron.js +0 -141
  573. package/lib/services/cron.js.map +0 -1
  574. package/lib/services/cron.spec.d.ts +0 -2
  575. package/lib/services/cron.spec.d.ts.map +0 -1
  576. package/lib/services/cron.spec.js +0 -76
  577. package/lib/services/cron.spec.js.map +0 -1
  578. package/lib/services/cryptoservice.d.ts.map +0 -1
  579. package/lib/services/cryptoservice.js +0 -433
  580. package/lib/services/cryptoservice.js.map +0 -1
  581. package/lib/services/cryptoservice.spec.d.ts +0 -2
  582. package/lib/services/cryptoservice.spec.d.ts.map +0 -1
  583. package/lib/services/cryptoservice.spec.js +0 -177
  584. package/lib/services/cryptoservice.spec.js.map +0 -1
  585. package/lib/services/debugmailer.d.ts +0 -36
  586. package/lib/services/debugmailer.d.ts.map +0 -1
  587. package/lib/services/debugmailer.js.map +0 -1
  588. package/lib/services/debugmailer.spec.d.ts +0 -2
  589. package/lib/services/debugmailer.spec.d.ts.map +0 -1
  590. package/lib/services/debugmailer.spec.js +0 -32
  591. package/lib/services/debugmailer.spec.js.map +0 -1
  592. package/lib/services/domainservice.d.ts +0 -272
  593. package/lib/services/domainservice.d.ts.map +0 -1
  594. package/lib/services/domainservice.js +0 -651
  595. package/lib/services/domainservice.js.map +0 -1
  596. package/lib/services/domainservice.spec.d.ts +0 -2
  597. package/lib/services/domainservice.spec.d.ts.map +0 -1
  598. package/lib/services/domainservice.spec.js +0 -592
  599. package/lib/services/domainservice.spec.js.map +0 -1
  600. package/lib/services/filebinary.d.ts +0 -136
  601. package/lib/services/filebinary.d.ts.map +0 -1
  602. package/lib/services/filebinary.js +0 -373
  603. package/lib/services/filebinary.js.map +0 -1
  604. package/lib/services/filebinary.spec.d.ts +0 -25
  605. package/lib/services/filebinary.spec.d.ts.map +0 -1
  606. package/lib/services/filebinary.spec.js +0 -428
  607. package/lib/services/filebinary.spec.js.map +0 -1
  608. package/lib/services/fileconfiguration.d.ts +0 -23
  609. package/lib/services/fileconfiguration.d.ts.map +0 -1
  610. package/lib/services/fileconfiguration.js +0 -48
  611. package/lib/services/fileconfiguration.js.map +0 -1
  612. package/lib/services/fileconfiguration.spec.d.ts +0 -2
  613. package/lib/services/fileconfiguration.spec.d.ts.map +0 -1
  614. package/lib/services/fileconfiguration.spec.js +0 -215
  615. package/lib/services/fileconfiguration.spec.js.map +0 -1
  616. package/lib/services/invitationservice.d.ts +0 -223
  617. package/lib/services/invitationservice.d.ts.map +0 -1
  618. package/lib/services/invitationservice.js +0 -529
  619. package/lib/services/invitationservice.js.map +0 -1
  620. package/lib/services/invitationservice.spec.d.ts +0 -2
  621. package/lib/services/invitationservice.spec.d.ts.map +0 -1
  622. package/lib/services/invitationservice.spec.js +0 -567
  623. package/lib/services/invitationservice.spec.js.map +0 -1
  624. package/lib/services/kubernetesconfiguration.d.ts +0 -27
  625. package/lib/services/kubernetesconfiguration.d.ts.map +0 -1
  626. package/lib/services/kubernetesconfiguration.js +0 -52
  627. package/lib/services/kubernetesconfiguration.js.map +0 -1
  628. package/lib/services/kubernetesconfiguration.spec.d.ts +0 -2
  629. package/lib/services/kubernetesconfiguration.spec.d.ts.map +0 -1
  630. package/lib/services/kubernetesconfiguration.spec.js +0 -206
  631. package/lib/services/kubernetesconfiguration.spec.js.map +0 -1
  632. package/lib/services/mailer.d.ts +0 -166
  633. package/lib/services/mailer.d.ts.map +0 -1
  634. package/lib/services/mailer.js +0 -176
  635. package/lib/services/mailer.js.map +0 -1
  636. package/lib/services/mailer.spec.d.ts +0 -2
  637. package/lib/services/mailer.spec.d.ts.map +0 -1
  638. package/lib/services/mailer.spec.js +0 -158
  639. package/lib/services/mailer.spec.js.map +0 -1
  640. package/lib/services/notificationservice.d.ts.map +0 -1
  641. package/lib/services/notificationservice.js.map +0 -1
  642. package/lib/services/notificationservice.spec.d.ts +0 -2
  643. package/lib/services/notificationservice.spec.d.ts.map +0 -1
  644. package/lib/services/notificationservice.spec.js +0 -83
  645. package/lib/services/notificationservice.spec.js.map +0 -1
  646. package/lib/services/oauth.d.ts +0 -226
  647. package/lib/services/oauth.d.ts.map +0 -1
  648. package/lib/services/oauth.js +0 -294
  649. package/lib/services/oauth.js.map +0 -1
  650. package/lib/services/oauth.spec.d.ts +0 -2
  651. package/lib/services/oauth.spec.d.ts.map +0 -1
  652. package/lib/services/oauth.spec.js +0 -208
  653. package/lib/services/oauth.spec.js.map +0 -1
  654. package/lib/services/prometheus.d.ts.map +0 -1
  655. package/lib/services/prometheus.js +0 -160
  656. package/lib/services/prometheus.js.map +0 -1
  657. package/lib/services/prometheus.spec.d.ts +0 -2
  658. package/lib/services/prometheus.spec.d.ts.map +0 -1
  659. package/lib/services/prometheus.spec.js +0 -76
  660. package/lib/services/prometheus.spec.js.map +0 -1
  661. package/lib/services/resource.d.ts.map +0 -1
  662. package/lib/services/resource.js +0 -170
  663. package/lib/services/resource.js.map +0 -1
  664. package/lib/services/resource.spec.d.ts +0 -2
  665. package/lib/services/resource.spec.d.ts.map +0 -1
  666. package/lib/services/resource.spec.js +0 -140
  667. package/lib/services/resource.spec.js.map +0 -1
  668. package/lib/services/service.spec.d.ts +0 -2
  669. package/lib/services/service.spec.d.ts.map +0 -1
  670. package/lib/services/service.spec.js +0 -286
  671. package/lib/services/service.spec.js.map +0 -1
  672. package/lib/stores/aggregator.d.ts +0 -48
  673. package/lib/stores/aggregator.d.ts.map +0 -1
  674. package/lib/stores/aggregator.js +0 -80
  675. package/lib/stores/aggregator.js.map +0 -1
  676. package/lib/stores/file.d.ts +0 -108
  677. package/lib/stores/file.d.ts.map +0 -1
  678. package/lib/stores/file.js +0 -188
  679. package/lib/stores/file.js.map +0 -1
  680. package/lib/stores/file.spec.d.ts +0 -13
  681. package/lib/stores/file.spec.d.ts.map +0 -1
  682. package/lib/stores/file.spec.js +0 -138
  683. package/lib/stores/file.spec.js.map +0 -1
  684. package/lib/stores/mapper.d.ts +0 -150
  685. package/lib/stores/mapper.d.ts.map +0 -1
  686. package/lib/stores/mapper.js +0 -293
  687. package/lib/stores/mapper.js.map +0 -1
  688. package/lib/stores/mapper.spec.d.ts +0 -2
  689. package/lib/stores/mapper.spec.d.ts.map +0 -1
  690. package/lib/stores/mapper.spec.js +0 -167
  691. package/lib/stores/mapper.spec.js.map +0 -1
  692. package/lib/stores/memory.d.ts +0 -152
  693. package/lib/stores/memory.d.ts.map +0 -1
  694. package/lib/stores/memory.js +0 -371
  695. package/lib/stores/memory.js.map +0 -1
  696. package/lib/stores/memory.spec.d.ts +0 -14
  697. package/lib/stores/memory.spec.d.ts.map +0 -1
  698. package/lib/stores/memory.spec.js +0 -263
  699. package/lib/stores/memory.spec.js.map +0 -1
  700. package/lib/stores/modelmapper.d.ts +0 -62
  701. package/lib/stores/modelmapper.d.ts.map +0 -1
  702. package/lib/stores/modelmapper.js +0 -197
  703. package/lib/stores/modelmapper.js.map +0 -1
  704. package/lib/stores/store.spec.d.ts +0 -57
  705. package/lib/stores/store.spec.d.ts.map +0 -1
  706. package/lib/stores/store.spec.js +0 -737
  707. package/lib/stores/store.spec.js.map +0 -1
  708. package/lib/test.d.ts +0 -265
  709. package/lib/test.d.ts.map +0 -1
  710. package/lib/test.js +0 -622
  711. package/lib/test.js.map +0 -1
  712. package/lib/unpackedapplication.d.ts.map +0 -1
  713. package/lib/unpackedapplication.js +0 -350
  714. package/lib/unpackedapplication.js.map +0 -1
  715. package/lib/utils/abstractdeployer.spec.d.ts +0 -2
  716. package/lib/utils/abstractdeployer.spec.d.ts.map +0 -1
  717. package/lib/utils/abstractdeployer.spec.js +0 -21
  718. package/lib/utils/abstractdeployer.spec.js.map +0 -1
  719. package/lib/utils/case.d.ts +0 -8
  720. package/lib/utils/case.d.ts.map +0 -1
  721. package/lib/utils/case.js +0 -43
  722. package/lib/utils/case.js.map +0 -1
  723. package/lib/utils/case.spec.d.ts +0 -2
  724. package/lib/utils/case.spec.d.ts.map +0 -1
  725. package/lib/utils/case.spec.js +0 -50
  726. package/lib/utils/case.spec.js.map +0 -1
  727. package/lib/utils/context.d.ts +0 -482
  728. package/lib/utils/context.d.ts.map +0 -1
  729. package/lib/utils/context.js +0 -739
  730. package/lib/utils/context.js.map +0 -1
  731. package/lib/utils/context.spec.d.ts +0 -10
  732. package/lib/utils/context.spec.d.ts.map +0 -1
  733. package/lib/utils/context.spec.js +0 -383
  734. package/lib/utils/context.spec.js.map +0 -1
  735. package/lib/utils/cookie.d.ts.map +0 -1
  736. package/lib/utils/cookie.js.map +0 -1
  737. package/lib/utils/cookie.spec.d.ts +0 -2
  738. package/lib/utils/cookie.spec.d.ts.map +0 -1
  739. package/lib/utils/cookie.spec.js +0 -88
  740. package/lib/utils/cookie.spec.js.map +0 -1
  741. package/lib/utils/esm.d.ts +0 -14
  742. package/lib/utils/esm.d.ts.map +0 -1
  743. package/lib/utils/esm.js +0 -19
  744. package/lib/utils/esm.js.map +0 -1
  745. package/lib/utils/httpcontext.d.ts.map +0 -1
  746. package/lib/utils/httpcontext.js.map +0 -1
  747. package/lib/utils/httpcontext.spec.d.ts +0 -5
  748. package/lib/utils/httpcontext.spec.d.ts.map +0 -1
  749. package/lib/utils/httpcontext.spec.js +0 -77
  750. package/lib/utils/httpcontext.spec.js.map +0 -1
  751. package/lib/utils/logger.d.ts +0 -92
  752. package/lib/utils/logger.d.ts.map +0 -1
  753. package/lib/utils/logger.js +0 -121
  754. package/lib/utils/logger.js.map +0 -1
  755. package/lib/utils/logger.spec.d.ts +0 -2
  756. package/lib/utils/logger.spec.d.ts.map +0 -1
  757. package/lib/utils/logger.spec.js +0 -48
  758. package/lib/utils/logger.spec.js.map +0 -1
  759. package/lib/utils/serializers.d.ts +0 -162
  760. package/lib/utils/serializers.d.ts.map +0 -1
  761. package/lib/utils/serializers.js +0 -420
  762. package/lib/utils/serializers.js.map +0 -1
  763. package/lib/utils/serializers.spec.d.ts +0 -2
  764. package/lib/utils/serializers.spec.d.ts.map +0 -1
  765. package/lib/utils/serializers.spec.js +0 -311
  766. package/lib/utils/serializers.spec.js.map +0 -1
  767. package/lib/utils/session.d.ts +0 -123
  768. package/lib/utils/session.d.ts.map +0 -1
  769. package/lib/utils/session.js +0 -156
  770. package/lib/utils/session.js.map +0 -1
  771. package/lib/utils/session.spec.d.ts +0 -2
  772. package/lib/utils/session.spec.d.ts.map +0 -1
  773. package/lib/utils/session.spec.js +0 -81
  774. package/lib/utils/session.spec.js.map +0 -1
  775. package/lib/utils/throttler.d.ts +0 -99
  776. package/lib/utils/throttler.d.ts.map +0 -1
  777. package/lib/utils/throttler.js +0 -160
  778. package/lib/utils/throttler.js.map +0 -1
  779. package/lib/utils/throttler.spec.d.ts +0 -2
  780. package/lib/utils/throttler.spec.d.ts.map +0 -1
  781. package/lib/utils/throttler.spec.js +0 -53
  782. package/lib/utils/throttler.spec.js.map +0 -1
  783. package/lib/utils/waiter.d.ts +0 -94
  784. package/lib/utils/waiter.d.ts.map +0 -1
  785. package/lib/utils/waiter.js +0 -148
  786. package/lib/utils/waiter.js.map +0 -1
  787. package/lib/utils/waiter.spec.d.ts +0 -2
  788. package/lib/utils/waiter.spec.d.ts.map +0 -1
  789. package/lib/utils/waiter.spec.js +0 -98
  790. package/lib/utils/waiter.spec.js.map +0 -1
  791. package/test/jsonutils/mdocs.yaml +0 -56
  792. package/test/jsonutils/test.json +0 -3
  793. package/test/jsonutils/test.yml +0 -5
package/lib/bin/cli.js ADDED
@@ -0,0 +1,934 @@
1
+ #!/usr/bin/env node
2
+ import yargs from "yargs";
3
+ import { readFileSync, existsSync } from "node:fs";
4
+ import { resolve, join } from "node:path";
5
+ import { isMainModule } from "@webda/tsc-esm";
6
+ import { Application, installConfigurationFactories } from "../application/application.js";
7
+ import { UnpackedApplication } from "../application/unpackedapplication.js";
8
+ import { collectServiceCommands, executeServiceCommand } from "../services/servicecommands.js";
9
+ import { getDeploymentUnitServices, mergeDeploymentUnits } from "../application/deployment.js";
10
+ import { DEPLOYER_CAPABILITY } from "../deployers/deployer.js";
11
+ import * as WebdaError from "../errors/errors.js";
12
+ import { Core } from "../core/core.js";
13
+ import { bootCoreForCommand } from "./cli-phase.js";
14
+ import { runWithInstanceStorage, useInstanceStorage } from "../core/instancestorage.js";
15
+ import { CancelablePromise } from "@webda/utils";
16
+ import { ConsoleLogger, patchConsole, useLog, useLogLevel, useOutput, useWorkerOutput } from "@webda/workout";
17
+ import { createInterface } from "node:readline";
18
+ import { createRequire } from "node:module";
19
+ /**
20
+ * Well-known parameter schemas mapped to yargs positionals/options
21
+ */
22
+ const KNOWN_PARAMS = {
23
+ uuidRequest: {
24
+ positional: "uuid"
25
+ },
26
+ searchRequest: {
27
+ options: {
28
+ query: { type: "string", alias: "q", describe: "Search query (WebdaQL)" }
29
+ }
30
+ },
31
+ };
32
+ /**
33
+ * Convert a JSON Schema's properties into yargs option definitions.
34
+ *
35
+ * @param schema - JSON Schema describing an object with properties
36
+ * @param skipRequired - When true, all options are marked optional (useful when input can also come from --json/--file)
37
+ * @returns Map of property names to yargs {@link Options} definitions
38
+ */
39
+ function schemaToOptions(schema, skipRequired) {
40
+ if (schema.type !== "object" || !schema.properties)
41
+ return {};
42
+ const opts = {};
43
+ const required = new Set(schema.required || []);
44
+ for (const [name, prop] of Object.entries(schema.properties)) {
45
+ if (typeof prop === "boolean")
46
+ continue;
47
+ const o = { describe: prop.description || name, demandOption: skipRequired ? false : required.has(name) };
48
+ if (prop.type === "number" || prop.type === "integer")
49
+ o.type = "number";
50
+ else if (prop.type === "boolean")
51
+ o.type = "boolean";
52
+ else if (prop.type === "array")
53
+ o.type = "array";
54
+ else
55
+ o.type = "string";
56
+ if (prop.enum)
57
+ o.choices = prop.enum;
58
+ if (prop.default !== undefined)
59
+ o.default = prop.default;
60
+ opts[name] = o;
61
+ }
62
+ return opts;
63
+ }
64
+ /**
65
+ * Load .webda/operations.json from an application directory
66
+ * @param appPath - the application path
67
+ * @returns the result
68
+ */
69
+ export function loadOperations(appPath = ".") {
70
+ const filePath = join(resolve(appPath), ".webda", "operations.json");
71
+ if (!existsSync(filePath)) {
72
+ throw new Error(`Operations not found: ${filePath}\nRun 'webdac build' to generate it.`);
73
+ }
74
+ return JSON.parse(readFileSync(filePath, "utf-8"));
75
+ }
76
+ /**
77
+ * Group operations by their prefix before the first dot (e.g., "Task.Create" belongs to group "Task").
78
+ *
79
+ * @param operations - Map of operation IDs to their entries
80
+ * @returns Map of group names to their operation entries
81
+ */
82
+ function groupOperations(operations) {
83
+ const groups = new Map();
84
+ for (const op of Object.values(operations)) {
85
+ const dot = op.id.indexOf(".");
86
+ const group = dot >= 0 ? op.id.substring(0, dot) : op.id;
87
+ if (!groups.has(group))
88
+ groups.set(group, []);
89
+ groups.get(group).push(op);
90
+ }
91
+ return groups;
92
+ }
93
+ /**
94
+ * Add parameter and input options to a yargs command
95
+ * @param y - the yargs instance
96
+ * @param op - the operation
97
+ * @param ops - the operations list
98
+ * @returns the result
99
+ */
100
+ function addOperationOptions(y, op, ops) {
101
+ const hasInput = op.input && op.input !== "void";
102
+ const paramDef = hasInput ? KNOWN_PARAMS[op.input] : undefined;
103
+ // Add well-known parameter options (e.g., uuidRequest -> positional uuid)
104
+ if (paramDef?.options) {
105
+ for (const [name, opt] of Object.entries(paramDef.options)) {
106
+ y.option(name, opt);
107
+ }
108
+ }
109
+ // Add custom input options from schema
110
+ if (hasInput && !paramDef && ops.schemas[op.input]) {
111
+ // Offer both raw JSON/file and per-property CLI options
112
+ y.option("json", { type: "string", describe: "JSON input (inline)" });
113
+ y.option("file", { type: "string", alias: "f", describe: "JSON input from file" });
114
+ for (const [name, opt] of Object.entries(schemaToOptions(ops.schemas[op.input], true))) {
115
+ y.option(name, opt);
116
+ }
117
+ }
118
+ return y;
119
+ }
120
+ /**
121
+ * Extract operation parameters from parsed CLI args using well-known param defs or custom schemas.
122
+ *
123
+ * @param args - Parsed yargs arguments
124
+ * @param op - The operation entry defining which parameters to extract
125
+ * @param ops - The full operations file (for resolving custom parameter schemas)
126
+ * @returns Object containing only the recognized parameter values
127
+ */
128
+ function extractParameters(args, op, ops) {
129
+ const params = {};
130
+ const hasInput = op.input && op.input !== "void";
131
+ const paramDef = hasInput ? KNOWN_PARAMS[op.input] : undefined;
132
+ if (paramDef?.positional && args[paramDef.positional] !== undefined) {
133
+ params[paramDef.positional] = args[paramDef.positional];
134
+ }
135
+ if (paramDef?.options) {
136
+ for (const name of Object.keys(paramDef.options)) {
137
+ if (args[name] !== undefined)
138
+ params[name] = args[name];
139
+ }
140
+ }
141
+ return params;
142
+ }
143
+ /**
144
+ * Extract operation input body from parsed CLI args (via --json, --file, or individual schema properties).
145
+ *
146
+ * @param args - Parsed yargs arguments
147
+ * @param op - The operation entry defining the input schema
148
+ * @param ops - The full operations file (for resolving input schemas)
149
+ * @returns Parsed input object, or undefined if no input was provided
150
+ */
151
+ function extractInput(args, op, ops) {
152
+ const hasInput = op.input && op.input !== "void";
153
+ // When input is a well-known param schema (e.g., uuidRequest), it is handled
154
+ // via extractParameters and positional args, not as body input.
155
+ if (hasInput && KNOWN_PARAMS[op.input]) {
156
+ return undefined;
157
+ }
158
+ if (args.json) {
159
+ return JSON.parse(args.json);
160
+ }
161
+ if (args.file) {
162
+ return JSON.parse(readFileSync(args.file, "utf-8"));
163
+ }
164
+ // Build input from individual CLI options matching the input schema properties
165
+ if (hasInput && ops.schemas[op.input]?.properties) {
166
+ const input = {};
167
+ for (const name of Object.keys(ops.schemas[op.input].properties)) {
168
+ if (args[name] !== undefined)
169
+ input[name] = args[name];
170
+ }
171
+ if (Object.keys(input).length > 0)
172
+ return input;
173
+ }
174
+ return undefined;
175
+ }
176
+ /**
177
+ * Build a yargs CLI from an operations.json file
178
+ *
179
+ * Groups operations by their prefix (e.g., "Task") and creates nested
180
+ * subcommands for each action (e.g., "create", "get", "delete").
181
+ *
182
+ * Usage examples (given Task CRUD operations):
183
+ * webda task create --json '{"title":"My Task"}'
184
+ * webda task get <uuid>
185
+ * webda task delete <uuid>
186
+ * webda tasks query --query "status = 'active'"
187
+ *
188
+ * @param ops Loaded operations file
189
+ * @param handler Called when an operation command is invoked
190
+ * @param argv Command-line arguments (defaults to process.argv.slice(2))
191
+ * @returns the result
192
+ */
193
+ export function buildCli(ops, handler, argv) {
194
+ const groups = groupOperations(ops.operations);
195
+ // Lowercase command/subcommand args for case-insensitive matching
196
+ // Stop lowercasing at the first flag (--option) or positional value after commands
197
+ const rawArgv = argv ?? process.argv.slice(2);
198
+ const normalizedArgv = rawArgv.map((arg, i) => {
199
+ // Once we hit a flag, stop lowercasing
200
+ if (arg.startsWith("-"))
201
+ return arg;
202
+ // Stop lowercasing after the first two positional words (command + action)
203
+ const positionalIndex = rawArgv.slice(0, i).filter(a => !a.startsWith("-")).length;
204
+ return positionalIndex < 2 ? arg.toLowerCase() : arg;
205
+ });
206
+ const cli = yargs(normalizedArgv).scriptName("webda").usage("$0 <command> <action> [options]");
207
+ for (const [group, operations] of groups) {
208
+ cli.command(group.toLowerCase(), `${group} operations`, groupY => {
209
+ for (const op of operations) {
210
+ const action = op.id.substring(op.id.indexOf(".") + 1).toLowerCase();
211
+ const hasInput = op.input && op.input !== "void";
212
+ const paramDef = hasInput ? KNOWN_PARAMS[op.input] : undefined;
213
+ // Build command string with positional if needed
214
+ const cmd = paramDef?.positional ? `${action} <${paramDef.positional}>` : action;
215
+ groupY.command(cmd, op.id, y => addOperationOptions(y, op, ops), async (args) => {
216
+ await handler({
217
+ id: op.id,
218
+ parameters: extractParameters(args, op, ops),
219
+ input: hasInput ? extractInput(args, op, ops) : undefined
220
+ });
221
+ });
222
+ }
223
+ return groupY.demandCommand(1, `Specify an action for ${group.toLowerCase()}`);
224
+ });
225
+ }
226
+ return cli.completion("completion", false).demandCommand(1, "Specify a command").help();
227
+ }
228
+ /**
229
+ * Add service commands (from `@Command` decorators) to a yargs CLI instance.
230
+ *
231
+ * Reads commands from `webda.module.json` via the Application and registers
232
+ * them as yargs commands. Subcommands (space-separated names like `"aws s3"`)
233
+ * are nested as yargs subcommand groups.
234
+ *
235
+ * A global `--service` option is added to filter which services handle a command
236
+ * when multiple services declare the same command name.
237
+ *
238
+ * @param cli - The yargs CLI instance to add commands to
239
+ * @param serviceCommands - Command map from {@link collectServiceCommands}
240
+ * @param handler - Called when a service command is invoked, receives command name and parsed args
241
+ *
242
+ * @example
243
+ * ```typescript
244
+ * import { collectServiceCommands, addServiceCommandsToCli } from "@webda/core";
245
+ *
246
+ * const cmds = collectServiceCommands(app);
247
+ * const cli = yargs().scriptName("webda");
248
+ * addServiceCommandsToCli(cli, cmds, async (cmdName, args) => {
249
+ * await executeServiceCommand(cmdName, cmds[cmdName], args, core.getServices(), args.service?.split(","));
250
+ * });
251
+ * ```
252
+ * @returns the result
253
+ */
254
+ export function addServiceCommandsToCli(cli, serviceCommands, handler) {
255
+ // Add global --service filter
256
+ cli.option("service", {
257
+ type: "string",
258
+ description: "Filter command to specific service(s), comma-separated",
259
+ global: true
260
+ });
261
+ // Group commands by top-level name for subcommand support
262
+ const topLevel = new Map();
263
+ for (const [cmdName, cmdInfo] of Object.entries(serviceCommands)) {
264
+ const parts = cmdName.split(" ");
265
+ const top = parts[0];
266
+ if (!topLevel.has(top))
267
+ topLevel.set(top, []);
268
+ topLevel.get(top).push({ name: cmdName, info: cmdInfo });
269
+ }
270
+ for (const [top, commands] of topLevel) {
271
+ if (commands.length === 1 && commands[0].name === top) {
272
+ // Simple command (no subcommands)
273
+ const { name, info } = commands[0];
274
+ cli.command(top, info.description, y => addCommandArgs(y, info.args), async (args) => handler(name, args));
275
+ }
276
+ else {
277
+ // Command group with subcommands
278
+ cli.command(top, `${top} commands`, groupY => {
279
+ for (const { name, info } of commands) {
280
+ const sub = name.substring(top.length + 1) || top;
281
+ groupY.command(sub, info.description, y => addCommandArgs(y, info.args), async (args) => handler(name, args));
282
+ }
283
+ return groupY.demandCommand(1, `Specify a subcommand for ${top}`);
284
+ });
285
+ }
286
+ }
287
+ return cli;
288
+ }
289
+ /**
290
+ * Add command argument definitions to a yargs builder.
291
+ * @param y - the yargs instance
292
+ * @returns the result
293
+ */
294
+ function addCommandArgs(y, args) {
295
+ for (const [argName, argDef] of Object.entries(args)) {
296
+ y.option(argName, {
297
+ type: argDef.type,
298
+ default: argDef.default,
299
+ alias: argDef.alias,
300
+ description: argDef.description,
301
+ demandOption: argDef.required
302
+ });
303
+ }
304
+ return y;
305
+ }
306
+ /**
307
+ * Prompt the user interactively for missing input properties.
308
+ * If stdin is not a TTY, returns the input as-is (validation will fail later).
309
+ *
310
+ * @param input - Partially filled input object
311
+ * @param schema - JSON Schema describing expected input properties (used to determine what is missing)
312
+ * @returns The input object augmented with user-provided values, coerced to the expected types
313
+ */
314
+ async function promptForMissingInput(input, schema) {
315
+ if (schema.type !== "object" || !schema.properties)
316
+ return input;
317
+ // Collect missing properties
318
+ const missing = [];
319
+ for (const [name, prop] of Object.entries(schema.properties)) {
320
+ if (typeof prop === "boolean" || input[name] !== undefined)
321
+ continue;
322
+ missing.push([name, prop]);
323
+ }
324
+ if (missing.length === 0)
325
+ return input;
326
+ // Non-interactive: return as-is, let validation report the error
327
+ if (!process.stdin.isTTY)
328
+ return input;
329
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
330
+ const ask = (question) => new Promise(resolve => rl.question(question, resolve));
331
+ try {
332
+ for (const [name, prop] of missing) {
333
+ const typeHint = prop.type ? ` (${prop.type})` : "";
334
+ const description = prop.description || name;
335
+ const answer = await ask(`${description}${typeHint}: `);
336
+ if (answer === "")
337
+ continue;
338
+ // Coerce to the expected type
339
+ if (prop.type === "number" || prop.type === "integer") {
340
+ input[name] = Number(answer);
341
+ }
342
+ else if (prop.type === "boolean") {
343
+ input[name] = answer.toLowerCase() === "true" || answer === "1";
344
+ }
345
+ else {
346
+ input[name] = answer;
347
+ }
348
+ }
349
+ }
350
+ finally {
351
+ rl.close();
352
+ }
353
+ return input;
354
+ }
355
+ /**
356
+ * Ensure a service is available in the app configuration, injecting it if necessary.
357
+ * For beans that aren't registered as moddas, this dynamically imports and registers them.
358
+ *
359
+ * @param app - The application instance whose configuration may be modified
360
+ * @param serviceName - Name (or namespace-qualified name) of the service to ensure
361
+ */
362
+ async function ensureServiceInConfig(app, serviceName) {
363
+ const appConfig = app.getConfiguration();
364
+ appConfig.services ??= {};
365
+ if (appConfig.services[serviceName])
366
+ return;
367
+ const modules = app.getModules();
368
+ for (const section of ["beans", "moddas"]) {
369
+ for (const fullName of Object.keys(modules[section] || {})) {
370
+ if (fullName === serviceName || fullName.endsWith(`/${serviceName}`)) {
371
+ appConfig.services[serviceName] = { type: fullName };
372
+ // Beans aren't loaded as moddas by default — register them so Core can find the type
373
+ if (!app.getModdas()[fullName]) {
374
+ const meta = modules[section][fullName];
375
+ const importPath = join(resolve(app.getPath()), meta.Import);
376
+ const [importFilename, importName = "default"] = importPath.split(":");
377
+ const mod = await import(importFilename.endsWith(".js") ? importFilename : importFilename + ".js");
378
+ const constructor = mod[importName];
379
+ if (constructor) {
380
+ app.getModdas()[fullName] = constructor;
381
+ // Set up filterParameters and createConfiguration like sectionLoader does
382
+ const { ServiceParameters: DefaultParams } = await import("../services/serviceparameters.js");
383
+ let configClass = DefaultParams;
384
+ if (meta.Configuration) {
385
+ const configPath = join(resolve(app.getPath()), meta.Configuration);
386
+ const [cfgFile, cfgName = "default"] = configPath.split(":");
387
+ const cfgMod = await import(cfgFile.endsWith(".js") ? cfgFile : cfgFile + ".js");
388
+ configClass = cfgMod[cfgName] || DefaultParams;
389
+ }
390
+ installConfigurationFactories(constructor, configClass, meta.Schema);
391
+ }
392
+ }
393
+ return;
394
+ }
395
+ }
396
+ }
397
+ }
398
+ /**
399
+ * Default handler: prints the operation call as JSON
400
+ * @param call - the function to call
401
+ */
402
+ async function defaultHandler(call) {
403
+ useOutput(JSON.stringify(call, undefined, 2));
404
+ }
405
+ /** Values accepted by the `--log-stream` option */
406
+ const LOG_STREAM_CHOICES = ["auto", "stdout", "stderr"];
407
+ /**
408
+ * Resolve where log lines go, from the raw CLI arguments
409
+ *
410
+ * `--log-stream=auto` (the default) sends logs to stderr when stdout is not a
411
+ * TTY, so a piped command result stays clean; `stdout` or `stderr` force it.
412
+ * Read from raw argv because the logger is created before yargs parses.
413
+ * @param argv - the raw CLI arguments
414
+ * @param stdoutIsTTY - whether stdout is a terminal
415
+ * @returns the stream for log lines
416
+ */
417
+ export function resolveLogStream(argv, stdoutIsTTY) {
418
+ let value;
419
+ for (let i = 0; i < argv.length; i++) {
420
+ if (argv[i].startsWith("--log-stream=")) {
421
+ value = argv[i].substring("--log-stream=".length);
422
+ }
423
+ else if (argv[i] === "--log-stream") {
424
+ value = argv[i + 1];
425
+ }
426
+ }
427
+ if (value === "stdout" || value === "stderr") {
428
+ return value;
429
+ }
430
+ return stdoutIsTTY ? "stdout" : "stderr";
431
+ }
432
+ /**
433
+ * Whether to route `console.*` calls to the logger, from the raw CLI arguments
434
+ * @param argv - the raw CLI arguments
435
+ * @returns false when `--no-console-patch` is given
436
+ */
437
+ export function shouldPatchConsole(argv) {
438
+ return !argv.includes("--no-console-patch") && !argv.includes("--console-patch=false");
439
+ }
440
+ /**
441
+ * Load the Application from a path, choosing packaged or unpacked mode based on the presence of `.webda/packaged.json`.
442
+ *
443
+ * @param appPath - Absolute or relative path to the application root directory
444
+ * @returns An {@link Application} (packaged) or {@link UnpackedApplication} instance
445
+ */
446
+ function loadApplication(appPath) {
447
+ if (!existsSync(join(appPath, ".webda", "packaged.json"))) {
448
+ return new UnpackedApplication(appPath);
449
+ }
450
+ return new Application(appPath);
451
+ }
452
+ /**
453
+ * Ensure services that declare a command exist in the app configuration.
454
+ * If a service type is not already configured, it is injected with a generated name.
455
+ *
456
+ * @param app - The loaded Application
457
+ * @param services - Service targets from the command metadata
458
+ */
459
+ export function ensureCommandServices(app, services) {
460
+ const appConfig = app.getConfiguration();
461
+ appConfig.services ??= {};
462
+ for (const svc of services) {
463
+ // Deployers only come from the units of the selected deployment
464
+ if (isDeployerType(app, svc.type)) {
465
+ continue;
466
+ }
467
+ const hasProvider = Object.values(appConfig.services).some((cfg) => cfg.type === svc.type || cfg.type === svc.type.split("/").pop()) || appConfig.services[svc.name];
468
+ if (!hasProvider) {
469
+ appConfig.services[svc.name] = { type: svc.type };
470
+ }
471
+ }
472
+ }
473
+ /**
474
+ * Whether a service type is a deployer, from its compiled capabilities
475
+ *
476
+ * @param app - the loaded Application
477
+ * @param type - the service type
478
+ * @returns true if the type declares the deployer capability
479
+ */
480
+ export function isDeployerType(app, type) {
481
+ const modules = app.getModules?.();
482
+ const entry = modules?.moddas?.[type] ?? modules?.beans?.[type];
483
+ return (entry?.capabilities ?? []).includes(DEPLOYER_CAPABILITY);
484
+ }
485
+ /**
486
+ * Global options taking a separate value, used to find the command name in the raw arguments
487
+ */
488
+ const GLOBAL_OPTIONS_WITH_VALUE = ["--log-stream", "--service"];
489
+ /**
490
+ * Extract the deployment selection from the raw CLI arguments
491
+ *
492
+ * `-d <name>` (or `-d<name>`) selects the deployment when it comes before the command name, so a
493
+ * command keeps its own `-d` alias; `--deployment <name>` (or `--deployment=<name>`) is accepted anywhere.
494
+ *
495
+ * @param argv - the raw CLI arguments
496
+ * @returns the deployment name and the arguments without the deployment option
497
+ */
498
+ export function extractDeploymentArgument(argv) {
499
+ const remaining = [];
500
+ let deployment;
501
+ let commandSeen = false;
502
+ const valueOf = (option, index) => {
503
+ const value = argv[index + 1];
504
+ if (value === undefined || value.startsWith("-")) {
505
+ throw new WebdaError.CodeError("DEPLOYMENT_REQUIRED", `Option ${option} requires a deployment name`);
506
+ }
507
+ return value;
508
+ };
509
+ for (let i = 0; i < argv.length; i++) {
510
+ const arg = argv[i];
511
+ if (arg === "--") {
512
+ remaining.push(...argv.slice(i));
513
+ break;
514
+ }
515
+ if (arg === "--deployment" || (!commandSeen && arg === "-d")) {
516
+ deployment = valueOf(arg, i++);
517
+ }
518
+ else if (arg.startsWith("--deployment=")) {
519
+ deployment = arg.substring("--deployment=".length);
520
+ }
521
+ else if (!commandSeen && arg.startsWith("-d") && !arg.startsWith("--") && arg.length > 2) {
522
+ deployment = arg.substring(2);
523
+ }
524
+ else {
525
+ // A bare word is the command, unless it is the value of a global option
526
+ if (!arg.startsWith("-") && !GLOBAL_OPTIONS_WITH_VALUE.includes(remaining[remaining.length - 1])) {
527
+ commandSeen = true;
528
+ }
529
+ remaining.push(arg);
530
+ }
531
+ }
532
+ return { deployment, argv: remaining };
533
+ }
534
+ /**
535
+ * Add the units of the selected deployment that run a command as services
536
+ *
537
+ * Only the units whose type provides the command are added: the deployers are never
538
+ * instantiated for the application commands (serve, debug, ...).
539
+ *
540
+ * @param app - the loaded Application
541
+ * @param cmdName - the command name
542
+ * @param cmdInfo - the command metadata
543
+ * @returns the names of the units added
544
+ * @throws CodeError DEPLOYMENT_REQUIRED if only deployers run the command and no unit does
545
+ */
546
+ export function prepareDeploymentUnits(app, cmdName, cmdInfo) {
547
+ const types = cmdInfo.services.map(svc => svc.type);
548
+ const deployment = app.getDeployment();
549
+ const units = deployment ? getDeploymentUnitServices(deployment, type => app.completeNamespace(type)) : {};
550
+ const selected = Object.fromEntries(Object.entries(units).filter(([, unit]) => types.includes(unit.type)));
551
+ mergeDeploymentUnits(app.getConfiguration(), selected);
552
+ const deployerTypes = types.filter(type => isDeployerType(app, type));
553
+ if (Object.keys(selected).length === 0 && deployerTypes.length > 0 && deployerTypes.length === types.length) {
554
+ if (!deployment) {
555
+ throw new WebdaError.CodeError("DEPLOYMENT_REQUIRED", `Command '${cmdName}' is run by deployers: select a deployment with -d <name>`);
556
+ }
557
+ throw new WebdaError.CodeError("DEPLOYMENT_REQUIRED", `Deployment '${app.getCurrentDeployment()}' has no unit of type ${deployerTypes.join(", ")} for command '${cmdName}'`);
558
+ }
559
+ return Object.keys(selected);
560
+ }
561
+ /**
562
+ * Resolve required capabilities for a command, auto-injecting default providers
563
+ * into the app config if not already configured.
564
+ *
565
+ * @param app - The loaded Application
566
+ * @param requires - Capability names required by the command
567
+ */
568
+ export function resolveCapabilities(app, requires) {
569
+ if (!requires || requires.length === 0)
570
+ return;
571
+ const modules = app.getModules();
572
+ const capabilities = modules.capabilities || {};
573
+ const appConfig = app.getConfiguration();
574
+ appConfig.services ??= {};
575
+ for (const cap of requires) {
576
+ const serviceType = capabilities[cap];
577
+ if (!serviceType) {
578
+ useLog("WARN", `No provider found for capability '${cap}'`);
579
+ continue;
580
+ }
581
+ // Check if a service with this type is already configured
582
+ const shortName = serviceType.split("/").pop();
583
+ const hasProvider = Object.values(appConfig.services).some((cfg) => cfg.type === serviceType || cfg.type === shortName) || appConfig.services[shortName];
584
+ if (!hasProvider) {
585
+ appConfig.services[shortName] = { type: serviceType };
586
+ }
587
+ }
588
+ }
589
+ /**
590
+ * Shutdown sequence of a CLI command: stop Core once, then exit
591
+ *
592
+ * The command finishing and a signal can both trigger it: only the first call counts.
593
+ *
594
+ * @param core - the Core to stop
595
+ * @param core.stop - stop every service
596
+ * @param exit - process exit, replaceable for tests
597
+ * @returns `shutdown(code)` to stop then exit with the code, and `interrupt()` for SIGINT/SIGTERM
598
+ */
599
+ export function createCommandShutdown(core, exit = code => process.exit(code)) {
600
+ let stopping;
601
+ const shutdown = (code) => {
602
+ stopping ??= (async () => {
603
+ try {
604
+ await core.stop();
605
+ }
606
+ catch (err) {
607
+ useLog("ERROR", "Cannot stop the application", err);
608
+ code ||= 1;
609
+ }
610
+ exit(code);
611
+ })();
612
+ return stopping;
613
+ };
614
+ const interrupt = async () => {
615
+ // Settle the long-running commands (serve, worker) before stopping Core
616
+ try {
617
+ await CancelablePromise.cancelAll();
618
+ }
619
+ catch (err) {
620
+ useLog("WARN", "Cannot cancel running processes", err);
621
+ }
622
+ await shutdown(0);
623
+ };
624
+ return { shutdown, interrupt };
625
+ }
626
+ /**
627
+ * Run `interrupt` once on SIGINT or SIGTERM (Kubernetes stops pods with SIGTERM)
628
+ *
629
+ * Later signals are ignored while shutting down: on a terminal, Ctrl+C reaches both
630
+ * the launcher (which forwards it) and the CLI.
631
+ *
632
+ * @param interrupt - the interruption handler
633
+ */
634
+ export function onInterrupt(interrupt) {
635
+ let interrupted = false;
636
+ const handler = () => {
637
+ if (interrupted)
638
+ return;
639
+ interrupted = true;
640
+ void interrupt();
641
+ };
642
+ process.on("SIGINT", handler);
643
+ process.on("SIGTERM", handler);
644
+ }
645
+ /**
646
+ * Run a service command until it settles, then shut down with its exit code
647
+ *
648
+ * A command that throws exits with code 1.
649
+ *
650
+ * @param cmdName - the command name, for logs
651
+ * @param execute - run the command and resolve with its exit code
652
+ * @param shutdown - stop Core then exit with the code
653
+ */
654
+ export async function settleServiceCommand(cmdName, execute, shutdown) {
655
+ let exitCode;
656
+ try {
657
+ exitCode = await execute();
658
+ }
659
+ catch (err) {
660
+ useLog("ERROR", `Command '${cmdName}' failed`, err);
661
+ exitCode = 1;
662
+ }
663
+ await shutdown(exitCode);
664
+ }
665
+ /**
666
+ * Log the outcome of a service command started without waiting for it (watch mode)
667
+ *
668
+ * @param cmdName - the command name, for logs
669
+ * @param execution - the running command, resolving with its exit code
670
+ */
671
+ export function reportServiceCommand(cmdName, execution) {
672
+ execution.then(exitCode => {
673
+ if (exitCode !== 0) {
674
+ useLog("ERROR", `Command '${cmdName}' exited with code ${exitCode}`);
675
+ }
676
+ }, err => useLog("ERROR", `Command '${cmdName}' failed`, err));
677
+ }
678
+ /**
679
+ * Run a service command with file watching: compiles first, then restarts on changes.
680
+ *
681
+ * @param appPath - application root path
682
+ * @param app - the loaded Application instance
683
+ * @param cmdName - the service command name
684
+ * @param cmdInfo - the command metadata
685
+ * @param args - parsed CLI arguments
686
+ * @param serviceFilter - optional service name filter
687
+ */
688
+ async function runWithWatch(appPath, app, cmdName, cmdInfo, args, serviceFilter) {
689
+ const { Compiler, WebdaProject } = await import("@webda/compiler");
690
+ const project = new WebdaProject(resolve(appPath), useWorkerOutput());
691
+ let core;
692
+ let restarting = false;
693
+ const bootCore = async () => {
694
+ // Reload application to pick up regenerated webda.module.json
695
+ await app.load();
696
+ core = new Core(app);
697
+ await bootCoreForCommand(core, cmdName, cmdInfo);
698
+ // Long-running commands (serve, worker) stay pending until a restart stops Core: do not wait for them
699
+ reportServiceCommand(cmdName, executeServiceCommand(cmdName, cmdInfo, args, core.getServices(), serviceFilter));
700
+ };
701
+ const restart = async () => {
702
+ if (restarting)
703
+ return;
704
+ restarting = true;
705
+ await useLogLevel("INFO", async () => {
706
+ try {
707
+ if (core) {
708
+ useLog("INFO", "Restarting...");
709
+ await core.stop();
710
+ core = undefined;
711
+ }
712
+ await bootCore();
713
+ }
714
+ catch (err) {
715
+ useLog("ERROR", "Failed to restart", err.message);
716
+ }
717
+ finally {
718
+ restarting = false;
719
+ }
720
+ });
721
+ };
722
+ // Subscribe to compiler events
723
+ project.on("compiling", () => {
724
+ useLogLevel("INFO", () => useLog("INFO", "Changes detected, recompiling..."));
725
+ });
726
+ project.on("compilationError", () => {
727
+ useLog("ERROR", "Compilation failed, keeping current server running");
728
+ });
729
+ // On successful compilation + module generation, restart
730
+ let firstBuild = true;
731
+ const firstBuildReady = new Promise(resolveReady => {
732
+ project.on("done", async () => {
733
+ if (firstBuild) {
734
+ firstBuild = false;
735
+ resolveReady();
736
+ }
737
+ else {
738
+ await restart();
739
+ }
740
+ });
741
+ });
742
+ // Start the compiler in watch mode with reduced log verbosity
743
+ const compiler = new Compiler(project);
744
+ useLogLevel("WARN", () => compiler.watch(() => { }));
745
+ // Wait for initial compilation before booting
746
+ await firstBuildReady;
747
+ await bootCore();
748
+ // Handle SIGINT and SIGTERM
749
+ const { interrupt } = createCommandShutdown({ stop: async () => core?.stop() });
750
+ onInterrupt(async () => {
751
+ compiler.stopWatch();
752
+ await interrupt();
753
+ });
754
+ // Keep process alive
755
+ await new Promise(() => { });
756
+ }
757
+ // Main entry point when run directly
758
+ const isMain = isMainModule(import.meta);
759
+ if (isMain) {
760
+ const appPath = resolve(process.env.WEBDA_APP_PATH || ".");
761
+ await runWithInstanceStorage({}, async () => {
762
+ // Ensure console output is available before anything else
763
+ const rawArgv = process.argv.slice(2);
764
+ new ConsoleLogger(useWorkerOutput(), undefined, undefined, resolveLogStream(rawArgv, !!process.stdout.isTTY));
765
+ if (shouldPatchConsole(rawArgv)) {
766
+ patchConsole();
767
+ }
768
+ try {
769
+ // The deployment is applied when loading the application
770
+ const { deployment, argv: cliArgv } = extractDeploymentArgument(rawArgv);
771
+ const app = loadApplication(appPath);
772
+ if (deployment) {
773
+ app.setCurrentDeployment(deployment);
774
+ }
775
+ useInstanceStorage().application = app;
776
+ await app.load();
777
+ // Collect service commands from webda.module.json
778
+ const serviceCommands = collectServiceCommands(app);
779
+ // Track which command was matched so we know whether to boot Core
780
+ let matchedCommand;
781
+ // Detect if @webda/compiler is available for --watch support
782
+ let hasCompiler = false;
783
+ try {
784
+ createRequire(join(resolve(appPath), "package.json")).resolve("@webda/compiler");
785
+ hasCompiler = true;
786
+ }
787
+ catch {
788
+ // @webda/compiler not installed
789
+ }
790
+ // Build the CLI with operations (if available) and service commands
791
+ const cli = yargs(cliArgv).scriptName("webda").usage("$0 <command> [options]");
792
+ // Extracted from raw argv before loading the application; declared here for --help
793
+ cli.option("deployment", {
794
+ type: "string",
795
+ description: "Deployment to apply (deployments/<name>), also -d <name> before the command or WEBDA_DEPLOYMENT"
796
+ });
797
+ // Logging options are applied from raw argv before parsing; declared here for --help and validation
798
+ cli.option("log-stream", {
799
+ choices: LOG_STREAM_CHOICES,
800
+ default: "auto",
801
+ description: "Where logs go: auto sends them to stderr when stdout is not a TTY"
802
+ });
803
+ cli.option("console-patch", {
804
+ type: "boolean",
805
+ default: true,
806
+ description: "Route console.log/info/warn/error/debug/trace to the logger"
807
+ });
808
+ // Add --watch flag only if compiler is available
809
+ if (hasCompiler) {
810
+ cli.option("watch", {
811
+ alias: "w",
812
+ type: "boolean",
813
+ description: "Watch for changes, recompile and restart (requires @webda/compiler)",
814
+ default: false
815
+ });
816
+ }
817
+ // Add service commands (serve, build, etc. from @Command decorators)
818
+ addServiceCommandsToCli(cli, serviceCommands, async (cmdName, args) => {
819
+ matchedCommand = { type: "service", name: cmdName, args };
820
+ });
821
+ // Add operation commands if operations.json exists
822
+ const opsPath = join(resolve(appPath), ".webda", "operations.json");
823
+ let ops;
824
+ if (existsSync(opsPath)) {
825
+ ops = JSON.parse(readFileSync(opsPath, "utf-8"));
826
+ const groups = groupOperations(ops.operations);
827
+ for (const [group, operations] of groups) {
828
+ cli.command(group.toLowerCase(), `${group} operations`, groupY => {
829
+ for (const op of operations) {
830
+ const action = op.id.substring(op.id.indexOf(".") + 1).toLowerCase();
831
+ const hasInput = op.input && op.input !== "void";
832
+ const paramDef = hasInput ? KNOWN_PARAMS[op.input] : undefined;
833
+ const cmd = paramDef?.positional ? `${action} <${paramDef.positional}>` : action;
834
+ groupY.command(cmd, op.id, y => addOperationOptions(y, op, ops), async (args) => {
835
+ matchedCommand = {
836
+ type: "operation",
837
+ call: {
838
+ id: op.id,
839
+ parameters: extractParameters(args, op, ops),
840
+ input: hasInput ? extractInput(args, op, ops) : undefined
841
+ }
842
+ };
843
+ });
844
+ }
845
+ return groupY.demandCommand(1, `Specify an action for ${group.toLowerCase()}`);
846
+ });
847
+ }
848
+ }
849
+ cli.completion("completion", false).demandCommand(1, "Specify a command").help();
850
+ await cli.parseAsync();
851
+ if (!matchedCommand) {
852
+ // No command matched, yargs already showed help or error
853
+ process.exit(1);
854
+ }
855
+ if (matchedCommand.type === "operation") {
856
+ // Execute the operation through Core
857
+ const call = matchedCommand.call;
858
+ // Derive service name and method from the operation ID (e.g. "TestBean.TestOperation")
859
+ const dot = call.id.indexOf(".");
860
+ const serviceName = call.id.substring(0, dot);
861
+ const methodName = call.id.substring(dot + 1, dot + 2).toLowerCase() + call.id.substring(dot + 2);
862
+ // Ensure the operation's service exists in the configuration
863
+ await ensureServiceInConfig(app, serviceName);
864
+ const core = new Core(app);
865
+ onInterrupt(createCommandShutdown(core).interrupt);
866
+ await core.init();
867
+ // Find the service
868
+ const services = core.getServices();
869
+ let service = services[serviceName];
870
+ if (!service) {
871
+ for (const [name, svc] of Object.entries(services)) {
872
+ if (svc?.constructor?.name === serviceName || name.endsWith(`/${serviceName}`)) {
873
+ service = svc;
874
+ break;
875
+ }
876
+ }
877
+ }
878
+ if (!service) {
879
+ useLog("ERROR", `Service '${serviceName}' not found for operation '${call.id}'`);
880
+ process.exit(1);
881
+ }
882
+ if (typeof service[methodName] !== "function") {
883
+ useLog("ERROR", `Method '${methodName}' not found on service '${serviceName}'`);
884
+ process.exit(1);
885
+ }
886
+ // Validate input against JSON schema if the operation defines one
887
+ // If interactive and missing properties, prompt the user
888
+ const opEntry = ops?.operations[call.id];
889
+ if (opEntry?.input && ops.schemas[opEntry.input]) {
890
+ const inputSchema = ops.schemas[opEntry.input];
891
+ call.input = await promptForMissingInput(call.input ?? {}, inputSchema);
892
+ const { registerSchema, validateSchema } = await import("../schemas/hooks.js");
893
+ registerSchema(opEntry.input, inputSchema);
894
+ validateSchema(opEntry.input, call.input);
895
+ }
896
+ // Call the method with input properties as positional arguments
897
+ const inputArgs = call.input ? Object.values(call.input) : [];
898
+ const result = await service[methodName](...inputArgs);
899
+ if (result !== undefined) {
900
+ useOutput(typeof result === "string" ? result : JSON.stringify(result, undefined, 2));
901
+ }
902
+ await core.stop();
903
+ process.exit(0);
904
+ }
905
+ else {
906
+ // Service command: boot Core and execute
907
+ const cmdInfo = serviceCommands[matchedCommand.name];
908
+ const serviceFilter = matchedCommand.args.service?.split(",");
909
+ // Add the deployment units running this command, then the services required by it
910
+ prepareDeploymentUnits(app, matchedCommand.name, cmdInfo);
911
+ ensureCommandServices(app, cmdInfo.services);
912
+ // Auto-inject capability providers required by this command
913
+ resolveCapabilities(app, cmdInfo.requires);
914
+ if (matchedCommand.args.watch && hasCompiler) {
915
+ await runWithWatch(appPath, app, matchedCommand.name, cmdInfo, matchedCommand.args, serviceFilter);
916
+ }
917
+ else {
918
+ const core = new Core(app);
919
+ const { shutdown, interrupt } = createCommandShutdown(core);
920
+ onInterrupt(interrupt);
921
+ await bootCoreForCommand(core, matchedCommand.name, cmdInfo);
922
+ // Long-running commands (serve, worker) only settle once stopped or interrupted
923
+ const { name: commandName, args: commandArgs } = matchedCommand;
924
+ await settleServiceCommand(commandName, () => executeServiceCommand(commandName, cmdInfo, commandArgs, core.getServices(), serviceFilter), shutdown);
925
+ }
926
+ }
927
+ }
928
+ catch (err) {
929
+ console.error(err.message);
930
+ process.exit(1);
931
+ }
932
+ });
933
+ }
934
+ //# sourceMappingURL=cli.js.map