@ductape/sdk 0.0.4-v5 → 0.0.4-v51

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 (338) hide show
  1. package/README.md +1 -1
  2. package/dist/api/services/appApi.service.d.ts +48 -2
  3. package/dist/api/services/appApi.service.js +101 -2
  4. package/dist/api/services/appApi.service.js.map +1 -1
  5. package/dist/api/services/pricingApi.service.d.ts +10 -0
  6. package/dist/api/services/pricingApi.service.js +34 -0
  7. package/dist/api/services/pricingApi.service.js.map +1 -0
  8. package/dist/api/services/processorApi.service.d.ts +12 -2
  9. package/dist/api/services/processorApi.service.js +12 -2
  10. package/dist/api/services/processorApi.service.js.map +1 -1
  11. package/dist/api/services/productsApi.service.d.ts +40 -1
  12. package/dist/api/services/productsApi.service.js +105 -1
  13. package/dist/api/services/productsApi.service.js.map +1 -1
  14. package/dist/api/services/userApi.service.js +1 -0
  15. package/dist/api/services/userApi.service.js.map +1 -1
  16. package/dist/api/services/workspaceApi.service.js +1 -0
  17. package/dist/api/services/workspaceApi.service.js.map +1 -1
  18. package/dist/api/services/workspaceSecretsApi.service.d.ts +75 -0
  19. package/dist/api/services/workspaceSecretsApi.service.js +62 -0
  20. package/dist/api/services/workspaceSecretsApi.service.js.map +1 -0
  21. package/dist/api/urls.d.ts +6 -1
  22. package/dist/api/urls.js +12 -2
  23. package/dist/api/urls.js.map +1 -1
  24. package/dist/api/utils/cache.utils.d.ts +1 -1
  25. package/dist/api/utils/cache.utils.js +10 -4
  26. package/dist/api/utils/cache.utils.js.map +1 -1
  27. package/dist/api/utils/strings.utils.d.ts +2 -0
  28. package/dist/api/utils/strings.utils.js +14 -0
  29. package/dist/api/utils/strings.utils.js.map +1 -1
  30. package/dist/apps/services/app.service.d.ts +51 -33
  31. package/dist/apps/services/app.service.js +488 -244
  32. package/dist/apps/services/app.service.js.map +1 -1
  33. package/dist/apps/validators/joi-validators/create.appAction.validator.d.ts +1 -2
  34. package/dist/apps/validators/joi-validators/create.appAction.validator.js +21 -2
  35. package/dist/apps/validators/joi-validators/create.appAction.validator.js.map +1 -1
  36. package/dist/apps/validators/joi-validators/create.appWebhook.validator.d.ts +1 -2
  37. package/dist/apps/validators/joi-validators/create.appWebhook.validator.js +2 -15
  38. package/dist/apps/validators/joi-validators/create.appWebhook.validator.js.map +1 -1
  39. package/dist/apps/validators/joi-validators/update.appAction.validator.js +11 -1
  40. package/dist/apps/validators/joi-validators/update.appAction.validator.js.map +1 -1
  41. package/dist/apps/validators/joi-validators/update.appActionResponse.validator.d.ts +1 -1
  42. package/dist/apps/validators/joi-validators/update.appActionResponse.validator.js +34 -1
  43. package/dist/apps/validators/joi-validators/update.appActionResponse.validator.js.map +1 -1
  44. package/dist/apps/validators/joi-validators/update.appWebhook.validator.d.ts +1 -2
  45. package/dist/apps/validators/joi-validators/update.appWebhook.validator.js +2 -14
  46. package/dist/apps/validators/joi-validators/update.appWebhook.validator.js.map +1 -1
  47. package/dist/clients/pricing.client.d.ts +3 -0
  48. package/dist/clients/pricing.client.js +33 -0
  49. package/dist/clients/pricing.client.js.map +1 -0
  50. package/dist/database/adapters/base.adapter.d.ts +176 -0
  51. package/dist/database/adapters/base.adapter.js +31 -0
  52. package/dist/database/adapters/base.adapter.js.map +1 -0
  53. package/dist/database/adapters/dynamodb.adapter.d.ts +91 -0
  54. package/dist/database/adapters/dynamodb.adapter.js +1608 -0
  55. package/dist/database/adapters/dynamodb.adapter.js.map +1 -0
  56. package/dist/database/adapters/mongodb.adapter.d.ts +71 -0
  57. package/dist/database/adapters/mongodb.adapter.js +1072 -0
  58. package/dist/database/adapters/mongodb.adapter.js.map +1 -0
  59. package/dist/database/adapters/mysql.adapter.d.ts +146 -0
  60. package/dist/database/adapters/mysql.adapter.js +1492 -0
  61. package/dist/database/adapters/mysql.adapter.js.map +1 -0
  62. package/dist/database/adapters/postgresql.adapter.d.ts +147 -0
  63. package/dist/database/adapters/postgresql.adapter.js +1603 -0
  64. package/dist/database/adapters/postgresql.adapter.js.map +1 -0
  65. package/dist/database/database.service.d.ts +232 -0
  66. package/dist/database/database.service.js +802 -0
  67. package/dist/database/database.service.js.map +1 -0
  68. package/dist/database/index.d.ts +18 -0
  69. package/dist/database/index.js +98 -0
  70. package/dist/database/index.js.map +1 -0
  71. package/dist/database/types/aggregation.types.d.ts +261 -0
  72. package/dist/database/types/aggregation.types.js +21 -0
  73. package/dist/database/types/aggregation.types.js.map +1 -0
  74. package/dist/database/types/connection.types.d.ts +132 -0
  75. package/dist/database/types/connection.types.js +6 -0
  76. package/dist/database/types/connection.types.js.map +1 -0
  77. package/dist/database/types/database.types.d.ts +175 -0
  78. package/dist/database/types/database.types.js +75 -0
  79. package/dist/database/types/database.types.js.map +1 -0
  80. package/dist/database/types/index.d.ts +12 -0
  81. package/dist/database/types/index.js +37 -0
  82. package/dist/database/types/index.js.map +1 -0
  83. package/dist/database/types/index.types.d.ts +220 -0
  84. package/dist/database/types/index.types.js +27 -0
  85. package/dist/database/types/index.types.js.map +1 -0
  86. package/dist/database/types/migration.types.d.ts +205 -0
  87. package/dist/database/types/migration.types.js +44 -0
  88. package/dist/database/types/migration.types.js.map +1 -0
  89. package/dist/database/types/query.types.d.ts +305 -0
  90. package/dist/database/types/query.types.js +57 -0
  91. package/dist/database/types/query.types.js.map +1 -0
  92. package/dist/database/types/result.types.d.ts +220 -0
  93. package/dist/database/types/result.types.js +6 -0
  94. package/dist/database/types/result.types.js.map +1 -0
  95. package/dist/database/types/schema.types.d.ts +190 -0
  96. package/dist/database/types/schema.types.js +69 -0
  97. package/dist/database/types/schema.types.js.map +1 -0
  98. package/dist/database/utils/helpers.d.ts +66 -0
  99. package/dist/database/utils/helpers.js +501 -0
  100. package/dist/database/utils/helpers.js.map +1 -0
  101. package/dist/database/utils/migration.utils.d.ts +151 -0
  102. package/dist/database/utils/migration.utils.js +476 -0
  103. package/dist/database/utils/migration.utils.js.map +1 -0
  104. package/dist/database/utils/transaction.d.ts +64 -0
  105. package/dist/database/utils/transaction.js +130 -0
  106. package/dist/database/utils/transaction.js.map +1 -0
  107. package/dist/database/validators/connection.validator.d.ts +20 -0
  108. package/dist/database/validators/connection.validator.js +267 -0
  109. package/dist/database/validators/connection.validator.js.map +1 -0
  110. package/dist/database/validators/query.validator.d.ts +31 -0
  111. package/dist/database/validators/query.validator.js +305 -0
  112. package/dist/database/validators/query.validator.js.map +1 -0
  113. package/dist/database/validators/schema.validator.d.ts +31 -0
  114. package/dist/database/validators/schema.validator.js +334 -0
  115. package/dist/database/validators/schema.validator.js.map +1 -0
  116. package/dist/graph/adapters/arangodb.adapter.d.ts +80 -0
  117. package/dist/graph/adapters/arangodb.adapter.js +1393 -0
  118. package/dist/graph/adapters/arangodb.adapter.js.map +1 -0
  119. package/dist/graph/adapters/base.adapter.d.ts +228 -0
  120. package/dist/graph/adapters/base.adapter.js +38 -0
  121. package/dist/graph/adapters/base.adapter.js.map +1 -0
  122. package/dist/graph/adapters/index.d.ts +10 -0
  123. package/dist/graph/adapters/index.js +23 -0
  124. package/dist/graph/adapters/index.js.map +1 -0
  125. package/dist/graph/adapters/memgraph.adapter.d.ts +85 -0
  126. package/dist/graph/adapters/memgraph.adapter.js +1491 -0
  127. package/dist/graph/adapters/memgraph.adapter.js.map +1 -0
  128. package/dist/graph/adapters/neo4j.adapter.d.ts +88 -0
  129. package/dist/graph/adapters/neo4j.adapter.js +1861 -0
  130. package/dist/graph/adapters/neo4j.adapter.js.map +1 -0
  131. package/dist/graph/adapters/neptune.adapter.d.ts +87 -0
  132. package/dist/graph/adapters/neptune.adapter.js +1430 -0
  133. package/dist/graph/adapters/neptune.adapter.js.map +1 -0
  134. package/dist/graph/graph.service.d.ts +278 -0
  135. package/dist/graph/graph.service.js +687 -0
  136. package/dist/graph/graph.service.js.map +1 -0
  137. package/dist/graph/index.d.ts +11 -0
  138. package/dist/graph/index.js +42 -0
  139. package/dist/graph/index.js.map +1 -0
  140. package/dist/graph/types/connection.types.d.ts +158 -0
  141. package/dist/graph/types/connection.types.js +43 -0
  142. package/dist/graph/types/connection.types.js.map +1 -0
  143. package/dist/graph/types/graph.types.d.ts +144 -0
  144. package/dist/graph/types/graph.types.js +84 -0
  145. package/dist/graph/types/graph.types.js.map +1 -0
  146. package/dist/graph/types/index.d.ts +11 -0
  147. package/dist/graph/types/index.js +35 -0
  148. package/dist/graph/types/index.js.map +1 -0
  149. package/dist/graph/types/node.types.d.ts +193 -0
  150. package/dist/graph/types/node.types.js +49 -0
  151. package/dist/graph/types/node.types.js.map +1 -0
  152. package/dist/graph/types/path.types.d.ts +224 -0
  153. package/dist/graph/types/path.types.js +38 -0
  154. package/dist/graph/types/path.types.js.map +1 -0
  155. package/dist/graph/types/query.types.d.ts +247 -0
  156. package/dist/graph/types/query.types.js +23 -0
  157. package/dist/graph/types/query.types.js.map +1 -0
  158. package/dist/graph/types/relationship.types.d.ts +224 -0
  159. package/dist/graph/types/relationship.types.js +35 -0
  160. package/dist/graph/types/relationship.types.js.map +1 -0
  161. package/dist/graph/types/result.types.d.ts +237 -0
  162. package/dist/graph/types/result.types.js +7 -0
  163. package/dist/graph/types/result.types.js.map +1 -0
  164. package/dist/graph/validators/index.d.ts +81 -0
  165. package/dist/graph/validators/index.js +243 -0
  166. package/dist/graph/validators/index.js.map +1 -0
  167. package/dist/imports/imports.service.d.ts +3 -3
  168. package/dist/imports/imports.service.js +7 -7
  169. package/dist/imports/imports.service.js.map +1 -1
  170. package/dist/imports/imports.types.d.ts +8 -0
  171. package/dist/imports/repos/postmanV21.repo.d.ts +1 -1
  172. package/dist/imports/repos/postmanV21.repo.js +29 -2
  173. package/dist/imports/repos/postmanV21.repo.js.map +1 -1
  174. package/dist/index.d.ts +1244 -150
  175. package/dist/index.js +1309 -209
  176. package/dist/index.js.map +1 -1
  177. package/dist/inputs/inputs.service.js +2 -2
  178. package/dist/inputs/inputs.service.js.map +1 -1
  179. package/dist/inputs/utils/inputs.utils.create.js +1 -1
  180. package/dist/inputs/utils/inputs.utils.create.js.map +1 -1
  181. package/dist/logs/logs.types.d.ts +5 -0
  182. package/dist/logs/logs.types.js +1 -0
  183. package/dist/logs/logs.types.js.map +1 -1
  184. package/dist/parsers/index.d.ts +3 -0
  185. package/dist/parsers/index.js +27 -0
  186. package/dist/parsers/index.js.map +1 -0
  187. package/dist/parsers/pipelines/postman.pipelines.d.ts +15 -0
  188. package/dist/parsers/pipelines/postman.pipelines.js +103 -0
  189. package/dist/parsers/pipelines/postman.pipelines.js.map +1 -0
  190. package/dist/parsers/types/postman.types.d.ts +200 -0
  191. package/dist/parsers/types/postman.types.js +3 -0
  192. package/dist/parsers/types/postman.types.js.map +1 -0
  193. package/dist/parsers/utils/postman.utils.d.ts +12 -0
  194. package/dist/parsers/utils/postman.utils.js +116 -0
  195. package/dist/parsers/utils/postman.utils.js.map +1 -0
  196. package/dist/parsers/validators/postman-auth.validators.d.ts +10 -0
  197. package/dist/parsers/validators/postman-auth.validators.js +127 -0
  198. package/dist/parsers/validators/postman-auth.validators.js.map +1 -0
  199. package/dist/parsers/validators/postman-request.validators.d.ts +13 -0
  200. package/dist/parsers/validators/postman-request.validators.js +139 -0
  201. package/dist/parsers/validators/postman-request.validators.js.map +1 -0
  202. package/dist/parsers/validators/postman-response.validators.d.ts +13 -0
  203. package/dist/parsers/validators/postman-response.validators.js +150 -0
  204. package/dist/parsers/validators/postman-response.validators.js.map +1 -0
  205. package/dist/parsers/validators/postman-variable.validators.d.ts +14 -0
  206. package/dist/parsers/validators/postman-variable.validators.js +163 -0
  207. package/dist/parsers/validators/postman-variable.validators.js.map +1 -0
  208. package/dist/pricing/pricing.repo.d.ts +0 -0
  209. package/dist/pricing/pricing.repo.js +1 -0
  210. package/dist/pricing/pricing.repo.js.map +1 -0
  211. package/dist/pricing/pricing.service.d.ts +24 -0
  212. package/dist/pricing/pricing.service.js +51 -0
  213. package/dist/pricing/pricing.service.js.map +1 -0
  214. package/dist/pricing/pricing.types.d.ts +76 -0
  215. package/dist/pricing/pricing.types.js +21 -0
  216. package/dist/pricing/pricing.types.js.map +1 -0
  217. package/dist/pricing/utils/string.utils.d.ts +1 -0
  218. package/dist/pricing/utils/string.utils.js +9 -0
  219. package/dist/pricing/utils/string.utils.js.map +1 -0
  220. package/dist/processor/repos/sms.repo.d.ts +4 -4
  221. package/dist/processor/repos/sms.repo.js +23 -10
  222. package/dist/processor/repos/sms.repo.js.map +1 -1
  223. package/dist/processor/services/messagebrokers/kafka.service.js +0 -2
  224. package/dist/processor/services/messagebrokers/kafka.service.js.map +1 -1
  225. package/dist/processor/services/messagebrokers/rabbitmq.service.d.ts +9 -1
  226. package/dist/processor/services/messagebrokers/rabbitmq.service.js +40 -11
  227. package/dist/processor/services/messagebrokers/rabbitmq.service.js.map +1 -1
  228. package/dist/processor/services/processor.service.d.ts +38 -10
  229. package/dist/processor/services/processor.service.js +533 -248
  230. package/dist/processor/services/processor.service.js.map +1 -1
  231. package/dist/processor/services/request.service.d.ts +36 -0
  232. package/dist/processor/services/request.service.js +304 -0
  233. package/dist/processor/services/request.service.js.map +1 -0
  234. package/dist/processor/types/request.types.d.ts +14 -0
  235. package/dist/processor/types/request.types.js +3 -0
  236. package/dist/processor/types/request.types.js.map +1 -0
  237. package/dist/processor/utils/processor.utils.d.ts +3 -0
  238. package/dist/processor/utils/processor.utils.js +84 -22
  239. package/dist/processor/utils/processor.utils.js.map +1 -1
  240. package/dist/processor/utils/request.utils.d.ts +20 -0
  241. package/dist/processor/utils/request.utils.js +113 -0
  242. package/dist/processor/utils/request.utils.js.map +1 -0
  243. package/dist/products/services/products.service.d.ts +114 -77
  244. package/dist/products/services/products.service.js +805 -362
  245. package/dist/products/services/products.service.js.map +1 -1
  246. package/dist/products/services/utils/crypt.utils.d.ts +1 -0
  247. package/dist/products/services/utils/crypt.utils.js +17 -0
  248. package/dist/products/services/utils/crypt.utils.js.map +1 -0
  249. package/dist/products/services/utils/functions.utils.d.ts +13 -0
  250. package/dist/products/services/utils/functions.utils.js +289 -0
  251. package/dist/products/services/utils/functions.utils.js.map +1 -0
  252. package/dist/products/services/utils/objects.utils.d.ts +13 -0
  253. package/dist/products/services/utils/objects.utils.js +89 -0
  254. package/dist/products/services/utils/objects.utils.js.map +1 -0
  255. package/dist/products/services/utils/string.utils.d.ts +12 -0
  256. package/dist/products/services/utils/string.utils.js +168 -0
  257. package/dist/products/services/utils/string.utils.js.map +1 -0
  258. package/dist/products/utils/string.utils.d.ts +1 -1
  259. package/dist/products/utils/string.utils.js +14 -2
  260. package/dist/products/utils/string.utils.js.map +1 -1
  261. package/dist/products/validators/index.d.ts +4 -1
  262. package/dist/products/validators/index.js +7 -1
  263. package/dist/products/validators/index.js.map +1 -1
  264. package/dist/products/validators/joi-validators/create.productDatabaseAction.validator.d.ts +15 -4
  265. package/dist/products/validators/joi-validators/create.productDatabaseAction.validator.js +501 -109
  266. package/dist/products/validators/joi-validators/create.productDatabaseAction.validator.js.map +1 -1
  267. package/dist/products/validators/joi-validators/create.productEnv.validator.js +1 -0
  268. package/dist/products/validators/joi-validators/create.productEnv.validator.js.map +1 -1
  269. package/dist/products/validators/joi-validators/create.productGraph.validator.d.ts +3 -0
  270. package/dist/products/validators/joi-validators/create.productGraph.validator.js +82 -0
  271. package/dist/products/validators/joi-validators/create.productGraph.validator.js.map +1 -0
  272. package/dist/products/validators/joi-validators/create.productGraphAction.validator.d.ts +14 -0
  273. package/dist/products/validators/joi-validators/create.productGraphAction.validator.js +696 -0
  274. package/dist/products/validators/joi-validators/create.productGraphAction.validator.js.map +1 -0
  275. package/dist/products/validators/joi-validators/create.productHealthcheck.validator.d.ts +4 -0
  276. package/dist/products/validators/joi-validators/create.productHealthcheck.validator.js +58 -0
  277. package/dist/products/validators/joi-validators/create.productHealthcheck.validator.js.map +1 -0
  278. package/dist/products/validators/joi-validators/create.productMessageBrokerTopic.validator.js +1 -0
  279. package/dist/products/validators/joi-validators/create.productMessageBrokerTopic.validator.js.map +1 -1
  280. package/dist/products/validators/joi-validators/create.productMessageBrokers.validator.js +9 -4
  281. package/dist/products/validators/joi-validators/create.productMessageBrokers.validator.js.map +1 -1
  282. package/dist/products/validators/joi-validators/create.productNotification.validator.js +5 -2
  283. package/dist/products/validators/joi-validators/create.productNotification.validator.js.map +1 -1
  284. package/dist/products/validators/joi-validators/create.userAuth.validator.js +1 -0
  285. package/dist/products/validators/joi-validators/create.userAuth.validator.js.map +1 -1
  286. package/dist/products/validators/joi-validators/update.dataValue.validator.js +1 -0
  287. package/dist/products/validators/joi-validators/update.dataValue.validator.js.map +1 -1
  288. package/dist/products/validators/joi-validators/update.productDatabaseAction.validator.d.ts +6 -0
  289. package/dist/products/validators/joi-validators/update.productDatabaseAction.validator.js +28 -26
  290. package/dist/products/validators/joi-validators/update.productDatabaseAction.validator.js.map +1 -1
  291. package/dist/products/validators/joi-validators/update.productEnv.validator.js +3 -0
  292. package/dist/products/validators/joi-validators/update.productEnv.validator.js.map +1 -1
  293. package/dist/products/validators/joi-validators/update.productGraph.validator.d.ts +3 -0
  294. package/dist/products/validators/joi-validators/update.productGraph.validator.js +87 -0
  295. package/dist/products/validators/joi-validators/update.productGraph.validator.js.map +1 -0
  296. package/dist/products/validators/joi-validators/update.productGraphAction.validator.d.ts +7 -0
  297. package/dist/products/validators/joi-validators/update.productGraphAction.validator.js +72 -0
  298. package/dist/products/validators/joi-validators/update.productGraphAction.validator.js.map +1 -0
  299. package/dist/products/validators/joi-validators/update.productMessageBrokerTopic.validator.js +1 -0
  300. package/dist/products/validators/joi-validators/update.productMessageBrokerTopic.validator.js.map +1 -1
  301. package/dist/products/validators/joi-validators/update.userAuth.validator.js +1 -0
  302. package/dist/products/validators/joi-validators/update.userAuth.validator.js.map +1 -1
  303. package/dist/test/test.health.d.ts +1 -0
  304. package/dist/test/test.health.js +49 -0
  305. package/dist/test/test.health.js.map +1 -0
  306. package/dist/test/test.import.js +51 -4
  307. package/dist/test/test.import.js.map +1 -1
  308. package/dist/test/test.imports.js +22 -7
  309. package/dist/test/test.imports.js.map +1 -1
  310. package/dist/test/test.notifiers.d.ts +1 -0
  311. package/dist/test/test.notifiers.js +85 -0
  312. package/dist/test/test.notifiers.js.map +1 -0
  313. package/dist/test/test.processor.js +30 -115
  314. package/dist/test/test.processor.js.map +1 -1
  315. package/dist/test/test.products.d.ts +1 -0
  316. package/dist/test/test.products.js +49 -0
  317. package/dist/test/test.products.js.map +1 -0
  318. package/dist/tsconfig.tsbuildinfo +1 -0
  319. package/dist/types/appBuilder.types.d.ts +5 -12
  320. package/dist/types/enums.d.ts +4 -1
  321. package/dist/types/enums.js +3 -0
  322. package/dist/types/enums.js.map +1 -1
  323. package/dist/types/index.types.d.ts +4 -0
  324. package/dist/types/pricing.types.d.ts +4 -0
  325. package/dist/types/pricing.types.js +3 -0
  326. package/dist/types/pricing.types.js.map +1 -0
  327. package/dist/types/processor.types.d.ts +67 -11
  328. package/dist/types/processor.types.js.map +1 -1
  329. package/dist/types/productsBuilder.types.d.ts +132 -14
  330. package/dist/types/productsBuilder.types.js +69 -4
  331. package/dist/types/productsBuilder.types.js.map +1 -1
  332. package/dist/types/request-tracker.interface.d.ts +0 -0
  333. package/dist/types/request-tracker.interface.js +1 -0
  334. package/dist/types/request-tracker.interface.js.map +1 -0
  335. package/dist/utils/constants.d.ts +1 -0
  336. package/dist/utils/constants.js +5 -0
  337. package/dist/utils/constants.js.map +1 -0
  338. package/package.json +17 -3
@@ -33,162 +33,554 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.NOSQLDatabaseActionsSchema = exports.validateMongoFilterTemplate = exports.validateMongoTemplate = exports.mongoValidTypeMap = exports.SQLDatabaseActionSchema = exports.validateSQLWithPlaceholders = void 0;
36
+ exports.NOSQLDatabaseActionsSchema = exports.SQLDatabaseActionSchema = exports.DatabaseActionSchema = exports.validateDatabaseFilterTemplate = exports.validateDatabaseTemplate = void 0;
37
37
  const Joi = __importStar(require("joi"));
38
38
  const inputs_types_1 = require("../../../types/inputs.types");
39
39
  const productsBuilder_types_1 = require("../../../types/productsBuilder.types");
40
- //import { MySQL } from 'dt-sql-parser';
41
40
  const placeholderPattern = /\{\{[^}]+\}\}/g;
42
- function extractSqlKeywords(sql) {
43
- const keywords = [];
44
- const lowered = sql.toLowerCase();
45
- const regex = /\b(insert|select|update|delete)\b/g;
46
- let match;
47
- while ((match = regex.exec(lowered)) !== null) {
48
- keywords.push(match[1]);
49
- }
50
- return keywords;
51
- }
52
- const validateSQLWithPlaceholders = (value, helpers) => {
53
- var _a;
54
- if (typeof value !== 'string') {
55
- return helpers.error('any.invalid', { message: 'Template must be a string.' });
56
- }
57
- try {
58
- const actionType = (_a = helpers.state.ancestors[0]) === null || _a === void 0 ? void 0 : _a.type;
59
- const validTypeMap = {
60
- read: 'select',
61
- create: 'insert',
62
- update: 'update',
63
- delete: 'delete',
64
- aggregate: 'select',
65
- };
66
- const expectedKeyword = validTypeMap[actionType];
67
- const sqlKeywords = extractSqlKeywords(value);
68
- if (!sqlKeywords.length) {
69
- return helpers.error('any.invalid', {
70
- message: 'Template must contain a valid SQL operation like INSERT, SELECT, UPDATE, or DELETE.',
71
- });
41
+ /**
42
+ * Helper to check if a value has a valid value or contains placeholders
43
+ */
44
+ const hasValidValue = (value) => {
45
+ if (value === undefined || value === null)
46
+ return false;
47
+ if (typeof value === 'string') {
48
+ return value.length > 0;
49
+ }
50
+ if (typeof value === 'object') {
51
+ return Object.keys(value).length > 0 || JSON.stringify(value).match(placeholderPattern) !== null;
52
+ }
53
+ return true;
54
+ };
55
+ /**
56
+ * Valid comparison operators
57
+ */
58
+ const validComparisonOperators = [
59
+ '=', '!=', '>', '>=', '<', '<=',
60
+ 'like', 'not_like', 'in', 'not_in',
61
+ 'between', 'not_between', 'is_null', 'is_not_null',
62
+ 'contains', 'not_contains',
63
+ ];
64
+ /**
65
+ * Valid join types
66
+ */
67
+ const validJoinTypes = ['inner', 'left', 'right', 'full', 'cross'];
68
+ /**
69
+ * Valid sort orders
70
+ */
71
+ const validSortOrders = ['asc', 'desc'];
72
+ /**
73
+ * Validates where clause structure
74
+ * Supports: object notation, IWhereCondition, IWhereGroup, or arrays
75
+ */
76
+ const validateWhereClause = (where, fieldName) => {
77
+ if (!where || typeof where !== 'object') {
78
+ return `${fieldName} must be a valid object.`;
79
+ }
80
+ // If it's a simple object notation (Record<string, any>), it's valid
81
+ const hasColumn = hasValidValue(where.column);
82
+ const hasOperator = hasValidValue(where.operator);
83
+ const hasConditions = Array.isArray(where.conditions);
84
+ // IWhereCondition structure
85
+ if (hasColumn) {
86
+ if (!hasOperator) {
87
+ return `${fieldName} with column must also have operator.`;
72
88
  }
73
- // Check that at least one SQL operation matches the expected type
74
- const matches = sqlKeywords.some(kw => kw === expectedKeyword);
75
- if (!matches) {
76
- return helpers.error('any.invalid', {
77
- message: `Template SQL must match the action type: ${actionType}`,
78
- });
89
+ // Validate operator if it's not a placeholder
90
+ if (typeof where.operator === 'string' && !where.operator.match(placeholderPattern)) {
91
+ if (!validComparisonOperators.includes(where.operator.toLowerCase())) {
92
+ return `${fieldName} operator must be one of: ${validComparisonOperators.join(', ')}.`;
93
+ }
79
94
  }
80
- // Check for placeholders
81
- const placeholders = value.match(placeholderPattern);
82
- if (!placeholders || placeholders.length === 0) {
83
- return helpers.error('any.invalid', {
84
- message: 'Template must include placeholders in the format {{valueName}}.',
85
- });
95
+ }
96
+ // IWhereGroup structure
97
+ if (hasConditions) {
98
+ const validLogicalOps = ['and', 'or', 'not'];
99
+ if (where.operator && !validLogicalOps.includes(where.operator.toLowerCase())) {
100
+ return `${fieldName} group operator must be one of: ${validLogicalOps.join(', ')}.`;
86
101
  }
87
102
  }
88
- catch (err) {
89
- return helpers.error('any.invalid', {
90
- message: 'Template must contain valid SQL syntax, match the type, and include valid placeholders.',
91
- });
103
+ return null;
104
+ };
105
+ /**
106
+ * Validates orderBy structure
107
+ */
108
+ const validateOrderBy = (orderBy) => {
109
+ if (!orderBy)
110
+ return null;
111
+ const validateSingle = (item) => {
112
+ if (!hasValidValue(item.column)) {
113
+ return 'orderBy must have column.';
114
+ }
115
+ if (item.order && typeof item.order === 'string' && !item.order.match(placeholderPattern)) {
116
+ if (!validSortOrders.includes(item.order.toLowerCase())) {
117
+ return `orderBy order must be one of: ${validSortOrders.join(', ')}.`;
118
+ }
119
+ }
120
+ return null;
121
+ };
122
+ if (Array.isArray(orderBy)) {
123
+ for (const item of orderBy) {
124
+ const error = validateSingle(item);
125
+ if (error)
126
+ return error;
127
+ }
92
128
  }
93
- return value;
129
+ else if (typeof orderBy === 'object') {
130
+ return validateSingle(orderBy);
131
+ }
132
+ return null;
94
133
  };
95
- exports.validateSQLWithPlaceholders = validateSQLWithPlaceholders;
96
- // Define schema
97
- exports.SQLDatabaseActionSchema = Joi.object({
98
- name: Joi.string().required(),
99
- tag: Joi.string()
100
- .pattern(inputs_types_1.tagPattern)
101
- .messages(inputs_types_1.tagMessage)
102
- .required(),
103
- description: Joi.string().optional(),
104
- tableName: Joi.string()
105
- .pattern(inputs_types_1.tagPattern)
106
- .messages(inputs_types_1.tableMessage)
107
- .required(),
108
- type: Joi.string().valid(...Object.values(productsBuilder_types_1.DatabaseActionTypes)).required(),
109
- template: Joi.custom(exports.validateSQLWithPlaceholders).required().messages({
110
- 'any.invalid': 'Template must contain valid SQL syntax, match the type, and include valid placeholders.',
111
- }),
112
- });
113
- exports.mongoValidTypeMap = {
114
- read: ['find', 'findOne'],
115
- count: ['countDocuments', 'estimatedDocumentCount'],
116
- create: ['insertOne', 'insertMany'],
117
- update: ['updateOne', 'updateMany'],
118
- delete: ['deleteOne', 'deleteMany'],
119
- aggregate: ['aggregate'],
120
- };
121
- const validateMongoTemplate = (value, helpers) => {
134
+ /**
135
+ * Validates join clause structure
136
+ */
137
+ const validateJoinClause = (join) => {
138
+ if (!join.type || !validJoinTypes.includes(join.type.toLowerCase())) {
139
+ return `Join type must be one of: ${validJoinTypes.join(', ')}.`;
140
+ }
141
+ if (!hasValidValue(join.table)) {
142
+ return 'Join must have table.';
143
+ }
144
+ if (!hasValidValue(join.leftColumn)) {
145
+ return 'Join must have leftColumn.';
146
+ }
147
+ if (!hasValidValue(join.rightColumn)) {
148
+ return 'Join must have rightColumn.';
149
+ }
150
+ return null;
151
+ };
152
+ /**
153
+ * Validates QUERY action template (IQueryOptions)
154
+ * Expected: table (required), select?, where?, orderBy?, limit?, offset?, joins?, include?, groupBy?, having?, distinct?
155
+ */
156
+ const validateQueryOptions = (options) => {
157
+ if (!hasValidValue(options.table)) {
158
+ return 'QUERY action requires table.';
159
+ }
160
+ // Validate where clause if present
161
+ if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
162
+ const whereError = validateWhereClause(options.where, 'where');
163
+ if (whereError)
164
+ return whereError;
165
+ }
166
+ // Validate orderBy if present
167
+ if (options.orderBy) {
168
+ const orderByError = validateOrderBy(options.orderBy);
169
+ if (orderByError)
170
+ return orderByError;
171
+ }
172
+ // Validate joins if present
173
+ if (options.joins && Array.isArray(options.joins)) {
174
+ for (const join of options.joins) {
175
+ const joinError = validateJoinClause(join);
176
+ if (joinError)
177
+ return joinError;
178
+ }
179
+ }
180
+ // Validate groupBy if present
181
+ if (options.groupBy && !Array.isArray(options.groupBy)) {
182
+ return 'groupBy must be an array of column names.';
183
+ }
184
+ return null;
185
+ };
186
+ /**
187
+ * Validates INSERT action template (IInsertOptions)
188
+ * Expected: table (required), data (required), returning?, ignoreErrors?, onConflict?
189
+ */
190
+ const validateInsertOptions = (options) => {
191
+ if (!hasValidValue(options.table)) {
192
+ return 'INSERT action requires table.';
193
+ }
194
+ if (!hasValidValue(options.data)) {
195
+ return 'INSERT action requires data (record or array of records to insert).';
196
+ }
197
+ // Validate onConflict if present
198
+ if (options.onConflict) {
199
+ if (!Array.isArray(options.onConflict.columns) || options.onConflict.columns.length === 0) {
200
+ return 'onConflict must have columns array.';
201
+ }
202
+ if (options.onConflict.action && !['ignore', 'update'].includes(options.onConflict.action)) {
203
+ return 'onConflict action must be one of: ignore, update.';
204
+ }
205
+ }
206
+ return null;
207
+ };
208
+ /**
209
+ * Validates UPDATE action template (IUpdateOptions)
210
+ * Expected: table (required), data (required), where (required), returning?, limit?
211
+ */
212
+ const validateUpdateOptions = (options) => {
213
+ if (!hasValidValue(options.table)) {
214
+ return 'UPDATE action requires table.';
215
+ }
216
+ if (!hasValidValue(options.data)) {
217
+ return 'UPDATE action requires data (fields to update).';
218
+ }
219
+ if (!hasValidValue(options.where)) {
220
+ return 'UPDATE action requires where clause to identify records.';
221
+ }
222
+ // Validate where clause
223
+ if (typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
224
+ const whereError = validateWhereClause(options.where, 'where');
225
+ if (whereError)
226
+ return whereError;
227
+ }
228
+ return null;
229
+ };
230
+ /**
231
+ * Validates DELETE action template (IDeleteOptions)
232
+ * Expected: table (required), where (required), returning?, limit?
233
+ */
234
+ const validateDeleteOptions = (options) => {
235
+ if (!hasValidValue(options.table)) {
236
+ return 'DELETE action requires table.';
237
+ }
238
+ if (!hasValidValue(options.where)) {
239
+ return 'DELETE action requires where clause to identify records.';
240
+ }
241
+ // Validate where clause
242
+ if (typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
243
+ const whereError = validateWhereClause(options.where, 'where');
244
+ if (whereError)
245
+ return whereError;
246
+ }
247
+ return null;
248
+ };
249
+ /**
250
+ * Validates UPSERT action template (IUpsertOptions)
251
+ * Expected: table (required), data (required), uniqueColumns (required), updateColumns?, returning?
252
+ */
253
+ const validateUpsertOptions = (options) => {
254
+ if (!hasValidValue(options.table)) {
255
+ return 'UPSERT action requires table.';
256
+ }
257
+ if (!hasValidValue(options.data)) {
258
+ return 'UPSERT action requires data (record or array of records).';
259
+ }
260
+ if (!hasValidValue(options.uniqueColumns) || !Array.isArray(options.uniqueColumns) || options.uniqueColumns.length === 0) {
261
+ return 'UPSERT action requires uniqueColumns array to define conflict columns.';
262
+ }
263
+ return null;
264
+ };
265
+ /**
266
+ * Validates COUNT action template
267
+ * Expected: table (required), where?, column?
268
+ */
269
+ const validateCountOptions = (options) => {
270
+ if (!hasValidValue(options.table)) {
271
+ return 'COUNT action requires table.';
272
+ }
273
+ // Validate where clause if present
274
+ if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
275
+ const whereError = validateWhereClause(options.where, 'where');
276
+ if (whereError)
277
+ return whereError;
278
+ }
279
+ return null;
280
+ };
281
+ /**
282
+ * Validates SUM action template
283
+ * Expected: table (required), column (required), where?
284
+ */
285
+ const validateSumOptions = (options) => {
286
+ if (!hasValidValue(options.table)) {
287
+ return 'SUM action requires table.';
288
+ }
289
+ if (!hasValidValue(options.column)) {
290
+ return 'SUM action requires column to sum.';
291
+ }
292
+ // Validate where clause if present
293
+ if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
294
+ const whereError = validateWhereClause(options.where, 'where');
295
+ if (whereError)
296
+ return whereError;
297
+ }
298
+ return null;
299
+ };
300
+ /**
301
+ * Validates AVERAGE action template
302
+ * Expected: table (required), column (required), where?
303
+ */
304
+ const validateAverageOptions = (options) => {
305
+ if (!hasValidValue(options.table)) {
306
+ return 'AVERAGE action requires table.';
307
+ }
308
+ if (!hasValidValue(options.column)) {
309
+ return 'AVERAGE action requires column to average.';
310
+ }
311
+ // Validate where clause if present
312
+ if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
313
+ const whereError = validateWhereClause(options.where, 'where');
314
+ if (whereError)
315
+ return whereError;
316
+ }
317
+ return null;
318
+ };
319
+ /**
320
+ * Validates MINIMUM action template
321
+ * Expected: table (required), column (required), where?
322
+ */
323
+ const validateMinimumOptions = (options) => {
324
+ if (!hasValidValue(options.table)) {
325
+ return 'MINIMUM action requires table.';
326
+ }
327
+ if (!hasValidValue(options.column)) {
328
+ return 'MINIMUM action requires column to find minimum.';
329
+ }
330
+ // Validate where clause if present
331
+ if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
332
+ const whereError = validateWhereClause(options.where, 'where');
333
+ if (whereError)
334
+ return whereError;
335
+ }
336
+ return null;
337
+ };
338
+ /**
339
+ * Validates MAXIMUM action template
340
+ * Expected: table (required), column (required), where?
341
+ */
342
+ const validateMaximumOptions = (options) => {
343
+ if (!hasValidValue(options.table)) {
344
+ return 'MAXIMUM action requires table.';
345
+ }
346
+ if (!hasValidValue(options.column)) {
347
+ return 'MAXIMUM action requires column to find maximum.';
348
+ }
349
+ // Validate where clause if present
350
+ if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
351
+ const whereError = validateWhereClause(options.where, 'where');
352
+ if (whereError)
353
+ return whereError;
354
+ }
355
+ return null;
356
+ };
357
+ /**
358
+ * Validates GROUP_BY action template
359
+ * Expected: table (required), groupBy (required), select?, where?, having?, orderBy?, limit?
360
+ */
361
+ const validateGroupByOptions = (options) => {
362
+ if (!hasValidValue(options.table)) {
363
+ return 'GROUP_BY action requires table.';
364
+ }
365
+ if (!hasValidValue(options.groupBy) || !Array.isArray(options.groupBy) || options.groupBy.length === 0) {
366
+ return 'GROUP_BY action requires groupBy array of column names.';
367
+ }
368
+ // Validate where clause if present
369
+ if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
370
+ const whereError = validateWhereClause(options.where, 'where');
371
+ if (whereError)
372
+ return whereError;
373
+ }
374
+ // Validate having clause if present
375
+ if (options.having && typeof options.having === 'object' && !JSON.stringify(options.having).match(placeholderPattern)) {
376
+ const havingError = validateWhereClause(options.having, 'having');
377
+ if (havingError)
378
+ return havingError;
379
+ }
380
+ // Validate orderBy if present
381
+ if (options.orderBy) {
382
+ const orderByError = validateOrderBy(options.orderBy);
383
+ if (orderByError)
384
+ return orderByError;
385
+ }
386
+ return null;
387
+ };
388
+ /**
389
+ * Validates AGGREGATE action template (complex aggregation query)
390
+ * Expected: table (required), select?, where?, groupBy?, having?, orderBy?, limit?
391
+ */
392
+ const validateAggregateOptions = (options) => {
393
+ if (!hasValidValue(options.table)) {
394
+ return 'AGGREGATE action requires table.';
395
+ }
396
+ // Validate where clause if present
397
+ if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
398
+ const whereError = validateWhereClause(options.where, 'where');
399
+ if (whereError)
400
+ return whereError;
401
+ }
402
+ // Validate groupBy if present
403
+ if (options.groupBy && !Array.isArray(options.groupBy)) {
404
+ return 'groupBy must be an array of column names.';
405
+ }
406
+ // Validate having clause if present
407
+ if (options.having && typeof options.having === 'object' && !JSON.stringify(options.having).match(placeholderPattern)) {
408
+ const havingError = validateWhereClause(options.having, 'having');
409
+ if (havingError)
410
+ return havingError;
411
+ }
412
+ // Validate orderBy if present
413
+ if (options.orderBy) {
414
+ const orderByError = validateOrderBy(options.orderBy);
415
+ if (orderByError)
416
+ return orderByError;
417
+ }
418
+ return null;
419
+ };
420
+ /**
421
+ * Validates RAW_SQL action template
422
+ * Expected: query (required), params?
423
+ */
424
+ const validateRawSqlOptions = (options) => {
425
+ if (!hasValidValue(options.query)) {
426
+ return 'RAW_SQL action requires query string.';
427
+ }
428
+ return null;
429
+ };
430
+ /**
431
+ * Validates database action template based on action type
432
+ * Uses the new structured query interface (IQueryOptions, IInsertOptions, IUpdateOptions, IDeleteOptions)
433
+ */
434
+ const validateDatabaseTemplate = (value, helpers) => {
122
435
  var _a;
123
436
  if (typeof value !== 'object' || value === null) {
124
437
  return helpers.error('any.invalid', {
125
- message: 'Template must be a valid MongoDB query object.',
126
- });
127
- }
128
- const actionType = (_a = helpers.state.ancestors[0]) === null || _a === void 0 ? void 0 : _a.type; // Get the action type from the parent object
129
- const validOperations = exports.mongoValidTypeMap[actionType] || [];
130
- // Validate the template operation
131
- if (!validOperations.some((op) => op in value)) {
132
- return helpers.error('any.invalid', {
133
- message: `Template must include a valid MongoDB operation for the action type: ${actionType}. Valid operations: ${validOperations.join(', ')}.`,
438
+ message: 'Template must be a valid query options object.',
134
439
  });
135
440
  }
441
+ const actionType = (_a = helpers.state.ancestors[0]) === null || _a === void 0 ? void 0 : _a.type;
136
442
  // Check for placeholders in the template
137
443
  const templateStr = JSON.stringify(value);
138
444
  const placeholders = templateStr.match(placeholderPattern);
139
- if (!placeholders) {
445
+ if (!placeholders || placeholders.length === 0) {
140
446
  return helpers.error('any.invalid', {
141
447
  message: 'Template must include placeholders in the format {{valueName}}.',
142
448
  });
143
449
  }
450
+ let validationError = null;
451
+ // Type-specific validations based on the expected interface for each action type
452
+ switch (actionType) {
453
+ // Basic CRUD operations
454
+ case productsBuilder_types_1.DatabaseActionTypes.QUERY:
455
+ case productsBuilder_types_1.DatabaseActionTypes.READ: // Legacy alias
456
+ validationError = validateQueryOptions(value);
457
+ break;
458
+ case productsBuilder_types_1.DatabaseActionTypes.INSERT:
459
+ case productsBuilder_types_1.DatabaseActionTypes.CREATE: // Legacy alias
460
+ validationError = validateInsertOptions(value);
461
+ break;
462
+ case productsBuilder_types_1.DatabaseActionTypes.UPDATE:
463
+ validationError = validateUpdateOptions(value);
464
+ break;
465
+ case productsBuilder_types_1.DatabaseActionTypes.DELETE:
466
+ validationError = validateDeleteOptions(value);
467
+ break;
468
+ case productsBuilder_types_1.DatabaseActionTypes.UPSERT:
469
+ validationError = validateUpsertOptions(value);
470
+ break;
471
+ // Aggregation operations
472
+ case productsBuilder_types_1.DatabaseActionTypes.COUNT:
473
+ validationError = validateCountOptions(value);
474
+ break;
475
+ case productsBuilder_types_1.DatabaseActionTypes.SUM:
476
+ validationError = validateSumOptions(value);
477
+ break;
478
+ case productsBuilder_types_1.DatabaseActionTypes.AVERAGE:
479
+ validationError = validateAverageOptions(value);
480
+ break;
481
+ case productsBuilder_types_1.DatabaseActionTypes.MINIMUM:
482
+ validationError = validateMinimumOptions(value);
483
+ break;
484
+ case productsBuilder_types_1.DatabaseActionTypes.MAXIMUM:
485
+ validationError = validateMaximumOptions(value);
486
+ break;
487
+ case productsBuilder_types_1.DatabaseActionTypes.GROUP_BY:
488
+ validationError = validateGroupByOptions(value);
489
+ break;
490
+ case productsBuilder_types_1.DatabaseActionTypes.AGGREGATE:
491
+ validationError = validateAggregateOptions(value);
492
+ break;
493
+ // Raw query
494
+ case productsBuilder_types_1.DatabaseActionTypes.RAW_SQL:
495
+ validationError = validateRawSqlOptions(value);
496
+ break;
497
+ default:
498
+ validationError = `Unknown action type: ${actionType}`;
499
+ break;
500
+ }
501
+ if (validationError) {
502
+ return helpers.error('any.invalid', {
503
+ message: validationError,
504
+ });
505
+ }
144
506
  return value;
145
507
  };
146
- exports.validateMongoTemplate = validateMongoTemplate;
147
- const validateMongoFilterTemplate = (value, helpers) => {
508
+ exports.validateDatabaseTemplate = validateDatabaseTemplate;
509
+ /**
510
+ * Validates the filter template for update/delete operations
511
+ * FilterTemplate should be a where clause structure
512
+ */
513
+ const validateDatabaseFilterTemplate = (value, helpers) => {
514
+ var _a;
148
515
  if (typeof value !== 'object' || value === null) {
149
516
  return helpers.error('any.invalid', {
150
- message: 'FilterTemplate must be a valid MongoDB filter object.',
517
+ message: 'FilterTemplate must be a valid filter object.',
151
518
  });
152
519
  }
153
- // Ensure the top-level key is `where` and it contains a sub-object
154
- const keys = Object.keys(value);
155
- if (keys.length !== 1 || keys[0] !== 'where' || typeof value.where !== 'object' || value.where === null) {
520
+ const actionType = (_a = helpers.state.ancestors[0]) === null || _a === void 0 ? void 0 : _a.type;
521
+ // Filter templates are typically used for update/delete operations
522
+ if (![productsBuilder_types_1.DatabaseActionTypes.UPDATE, productsBuilder_types_1.DatabaseActionTypes.DELETE].includes(actionType)) {
156
523
  return helpers.error('any.invalid', {
157
- message: 'FilterTemplate must contain a single key "where" with a sub-object as its value.',
524
+ message: `FilterTemplate is not applicable for action type "${actionType}".`,
158
525
  });
159
526
  }
160
- // Check for placeholders in the `where` sub-object
161
- const whereStr = JSON.stringify(value.where);
162
- const placeholderPattern = /{{\s*[\w.]+\s*}}/g; // Match placeholders in the format {{valueName}}
163
- const placeholders = whereStr.match(placeholderPattern);
164
- if (!placeholders) {
527
+ // Check for placeholders in the filter template
528
+ const filterStr = JSON.stringify(value);
529
+ const placeholders = filterStr.match(placeholderPattern);
530
+ if (!placeholders || placeholders.length === 0) {
165
531
  return helpers.error('any.invalid', {
166
- message: 'FilterTemplate "where" sub-object must include placeholders in the format {{valueName}}.',
532
+ message: 'FilterTemplate must include placeholders in the format {{valueName}}.',
167
533
  });
168
534
  }
535
+ // Validate where clause structure if it has a where key
536
+ if (value.where && typeof value.where === 'object' && !JSON.stringify(value.where).match(placeholderPattern)) {
537
+ const whereError = validateWhereClause(value.where, 'where');
538
+ if (whereError) {
539
+ return helpers.error('any.invalid', { message: whereError });
540
+ }
541
+ }
169
542
  return value;
170
543
  };
171
- exports.validateMongoFilterTemplate = validateMongoFilterTemplate;
172
- // MongoDB Schema
173
- exports.NOSQLDatabaseActionsSchema = Joi.object({
174
- name: Joi.string().required(),
175
- description: Joi.string().required(),
544
+ exports.validateDatabaseFilterTemplate = validateDatabaseFilterTemplate;
545
+ /**
546
+ * Schema for creating database actions using the structured query interface
547
+ */
548
+ exports.DatabaseActionSchema = Joi.object({
549
+ name: Joi.string().required().messages({
550
+ 'any.required': 'name is required',
551
+ }),
176
552
  tag: Joi.string()
177
553
  .pattern(inputs_types_1.tagPattern)
178
554
  .messages(inputs_types_1.tagMessage)
179
555
  .required(),
556
+ description: Joi.string().optional(),
180
557
  tableName: Joi.string()
181
558
  .pattern(inputs_types_1.tagPattern)
182
559
  .messages(inputs_types_1.tableMessage)
183
560
  .required(),
184
561
  type: Joi.string()
185
562
  .valid(...Object.values(productsBuilder_types_1.DatabaseActionTypes))
186
- .required(),
563
+ .required()
564
+ .messages({
565
+ 'any.only': `type must be one of: ${Object.values(productsBuilder_types_1.DatabaseActionTypes).join(', ')}`,
566
+ }),
187
567
  template: Joi.object()
188
- .custom(exports.validateMongoTemplate, 'MongoDB template validation')
189
- .required(),
568
+ .custom(exports.validateDatabaseTemplate, 'Database template validation')
569
+ .required()
570
+ .messages({
571
+ 'any.invalid': 'Template must be a valid query options object with placeholders.',
572
+ }),
190
573
  filterTemplate: Joi.object()
191
- .custom(exports.validateMongoFilterTemplate, 'MongoDB filter template validation')
192
- .optional(), // Filter template is optional, depending on the operation
574
+ .custom(exports.validateDatabaseFilterTemplate, 'Database filter template validation')
575
+ .optional()
576
+ .messages({
577
+ 'any.invalid': 'FilterTemplate must be a valid filter object with placeholders.',
578
+ }),
193
579
  });
580
+ // Legacy schemas for backwards compatibility - these are deprecated
581
+ // @deprecated Use DatabaseActionSchema instead
582
+ exports.SQLDatabaseActionSchema = exports.DatabaseActionSchema;
583
+ // @deprecated Use DatabaseActionSchema instead
584
+ exports.NOSQLDatabaseActionsSchema = exports.DatabaseActionSchema;
585
+ exports.default = exports.DatabaseActionSchema;
194
586
  //# sourceMappingURL=create.productDatabaseAction.validator.js.map