mongodb-dynamic-api 1.6.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/CHANGELOG.md +72 -19
  2. package/README.md +91 -67
  3. package/package.json +13 -1
  4. package/src/builders/casl/casl-ability.builder.d.ts +5 -0
  5. package/src/builders/casl/casl-ability.builder.js +14 -0
  6. package/src/builders/index.d.ts +3 -1
  7. package/src/builders/index.js +3 -1
  8. package/src/builders/route-decorators/auth-decorators.builder.d.ts +7 -0
  9. package/src/builders/route-decorators/auth-decorators.builder.js +14 -0
  10. package/src/builders/route-decorators/route-decorators.builder.d.ts +23 -0
  11. package/src/builders/route-decorators/route-decorators.builder.js +110 -0
  12. package/src/decorators/check-policies.decorator.d.ts +5 -0
  13. package/src/decorators/check-policies.decorator.js +8 -0
  14. package/src/decorators/index.d.ts +2 -0
  15. package/src/decorators/index.js +2 -0
  16. package/src/decorators/public.decorator.d.ts +3 -0
  17. package/src/decorators/public.decorator.js +8 -0
  18. package/src/dtos/delete-many-entity.query.d.ts +3 -0
  19. package/src/dtos/delete-many-entity.query.js +24 -0
  20. package/src/dtos/index.d.ts +1 -0
  21. package/src/dtos/index.js +1 -0
  22. package/src/dynamic-api.module.d.ts +6 -4
  23. package/src/dynamic-api.module.js +145 -69
  24. package/src/guards/base-policies.guard.d.ts +13 -0
  25. package/src/guards/base-policies.guard.js +32 -0
  26. package/src/guards/dynamic-api-jwt-auth.guard.d.ts +11 -0
  27. package/src/guards/dynamic-api-jwt-auth.guard.js +38 -0
  28. package/src/guards/index.d.ts +2 -0
  29. package/src/guards/index.js +18 -0
  30. package/src/helpers/controller-ability-predicates.helper.d.ts +4 -0
  31. package/src/helpers/controller-ability-predicates.helper.js +18 -0
  32. package/src/helpers/format.helper.d.ts +2 -0
  33. package/src/helpers/format.helper.js +12 -0
  34. package/src/helpers/index.d.ts +6 -1
  35. package/src/helpers/index.js +6 -1
  36. package/src/helpers/route-decorators.helper.d.ts +2 -2
  37. package/src/helpers/route-description.helper.d.ts +3 -0
  38. package/src/helpers/route-description.helper.js +34 -0
  39. package/src/helpers/schema.helper.d.ts +28 -0
  40. package/src/helpers/schema.helper.js +30 -0
  41. package/src/helpers/swagger-config.helper.d.ts +4 -0
  42. package/src/helpers/{config.helper.js → swagger-config.helper.js} +37 -21
  43. package/src/helpers/validation-config.helper.d.ts +3 -0
  44. package/src/helpers/validation-config.helper.js +8 -0
  45. package/src/helpers/versioning-config.helper.d.ts +4 -0
  46. package/src/helpers/versioning-config.helper.js +15 -0
  47. package/src/index.d.ts +3 -1
  48. package/src/index.js +3 -1
  49. package/src/interceptors/dynamic-api-cache.interceptor.d.ts +16 -0
  50. package/src/interceptors/dynamic-api-cache.interceptor.js +48 -0
  51. package/src/interceptors/index.d.ts +1 -0
  52. package/src/interceptors/index.js +17 -0
  53. package/src/interfaces/dynamic-api-cache-options.interface.d.ts +9 -0
  54. package/src/interfaces/dynamic-api-casl-ability.interface.d.ts +9 -0
  55. package/src/interfaces/dynamic-api-controller-options.interface.d.ts +12 -0
  56. package/src/interfaces/dynamic-api-decorator-builder.interface.d.ts +5 -0
  57. package/src/interfaces/dynamic-api-global-state.interface.d.ts +16 -0
  58. package/src/interfaces/dynamic-api-options.interface.d.ts +14 -11
  59. package/src/interfaces/dynamic-api-options.interface.js +3 -0
  60. package/src/interfaces/dynamic-api-policy-handler.interface.d.ts +16 -0
  61. package/src/interfaces/dynamic-api-route-config.interface.d.ts +15 -0
  62. package/src/interfaces/dynamic-api-route-dtos-bundle.type.d.ts +8 -0
  63. package/src/interfaces/dynamic-api-route-module.type.d.ts +3 -0
  64. package/src/interfaces/dynamic-api-route-type.type.d.ts +2 -0
  65. package/src/interfaces/dynamic-api-schema-options.interface.d.ts +9 -2
  66. package/src/interfaces/dynamic-api-schema-options.interface.js +14 -0
  67. package/src/interfaces/{service-provider.interface.d.ts → dynamic-api-service-provider.interface.d.ts} +2 -2
  68. package/src/{helpers/config.helper.d.ts → interfaces/dynamic-api-swagger-options.type.d.ts} +23 -15
  69. package/src/interfaces/index.d.ts +13 -4
  70. package/src/interfaces/index.js +13 -4
  71. package/src/mixins/create-policies-guard.mixin.d.ts +5 -0
  72. package/src/mixins/create-policies-guard.mixin.js +37 -0
  73. package/src/mixins/entity-presenter.mixin.d.ts +1 -1
  74. package/src/mixins/entity-presenter.mixin.js +12 -2
  75. package/src/mixins/index.d.ts +1 -0
  76. package/src/mixins/index.js +1 -0
  77. package/src/models/base-entity.model.d.ts +1 -1
  78. package/src/modules/auth/auth.helper.d.ts +10 -0
  79. package/src/modules/auth/auth.helper.js +103 -0
  80. package/src/modules/auth/auth.module.d.ts +12 -0
  81. package/src/modules/auth/auth.module.js +55 -0
  82. package/src/modules/auth/guards/index.d.ts +2 -0
  83. package/src/modules/auth/guards/index.js +18 -0
  84. package/src/modules/auth/guards/jwt-auth.guard.d.ts +4 -0
  85. package/src/modules/auth/guards/jwt-auth.guard.js +17 -0
  86. package/src/modules/auth/guards/local-auth.guard.d.ts +4 -0
  87. package/src/modules/auth/guards/local-auth.guard.js +17 -0
  88. package/src/modules/auth/index.d.ts +7 -0
  89. package/src/modules/auth/index.js +23 -0
  90. package/src/modules/auth/interfaces/auth-controller.interface.d.ts +9 -0
  91. package/src/modules/auth/interfaces/auth-options.interface.d.ts +25 -0
  92. package/src/modules/auth/interfaces/auth-service.interface.d.ts +12 -0
  93. package/src/modules/auth/interfaces/index.d.ts +3 -0
  94. package/src/modules/auth/interfaces/index.js +19 -0
  95. package/src/modules/auth/mixins/auth-controller.mixin.d.ts +5 -0
  96. package/src/modules/auth/mixins/auth-controller.mixin.js +118 -0
  97. package/src/modules/auth/mixins/auth-register-policies-guard.mixin.d.ts +6 -0
  98. package/src/modules/auth/mixins/auth-register-policies-guard.mixin.js +59 -0
  99. package/src/modules/auth/mixins/index.d.ts +2 -0
  100. package/src/modules/auth/mixins/index.js +18 -0
  101. package/src/modules/auth/services/base-auth.service.d.ts +51 -0
  102. package/src/modules/auth/services/base-auth.service.js +64 -0
  103. package/src/modules/auth/services/index.d.ts +1 -0
  104. package/src/modules/auth/services/index.js +17 -0
  105. package/src/modules/auth/strategies/index.d.ts +1 -0
  106. package/src/modules/auth/strategies/index.js +17 -0
  107. package/src/modules/auth/strategies/jwt.strategy.d.ts +8 -0
  108. package/src/modules/auth/strategies/jwt.strategy.js +35 -0
  109. package/src/modules/dynamic-api-config/dynamic-api-config.module.d.ts +5 -0
  110. package/src/modules/dynamic-api-config/dynamic-api-config.module.js +31 -0
  111. package/src/modules/dynamic-api-config/index.d.ts +1 -0
  112. package/src/modules/dynamic-api-config/index.js +17 -0
  113. package/src/modules/index.d.ts +2 -8
  114. package/src/modules/index.js +2 -8
  115. package/src/routes/create-many/create-many-controller.mixin.d.ts +6 -0
  116. package/src/{modules → routes}/create-many/create-many-controller.mixin.js +31 -9
  117. package/src/routes/create-many/create-many.helper.d.ts +7 -0
  118. package/src/{modules → routes}/create-many/create-many.helper.js +14 -11
  119. package/src/routes/create-many/create-many.module.d.ts +6 -0
  120. package/src/{modules → routes}/create-many/create-many.module.js +3 -3
  121. package/src/routes/create-one/create-one-controller.mixin.d.ts +6 -0
  122. package/src/{modules → routes}/create-one/create-one-controller.mixin.js +29 -7
  123. package/src/routes/create-one/create-one.helper.d.ts +7 -0
  124. package/src/{modules → routes}/create-one/create-one.helper.js +14 -11
  125. package/src/routes/create-one/create-one.module.d.ts +6 -0
  126. package/src/{modules → routes}/create-one/create-one.module.js +4 -4
  127. package/src/routes/delete-many/base-delete-many.service.d.ts +34 -0
  128. package/src/routes/delete-many/base-delete-many.service.js +29 -0
  129. package/src/routes/delete-many/delete-many-controller.interface.d.ts +8 -0
  130. package/src/routes/delete-many/delete-many-controller.interface.js +2 -0
  131. package/src/routes/delete-many/delete-many-controller.mixin.d.ts +6 -0
  132. package/src/routes/delete-many/delete-many-controller.mixin.js +77 -0
  133. package/src/routes/delete-many/delete-many-service.interface.d.ts +6 -0
  134. package/src/routes/delete-many/delete-many-service.interface.js +2 -0
  135. package/src/routes/delete-many/delete-many.helper.d.ts +7 -0
  136. package/src/routes/delete-many/delete-many.helper.js +71 -0
  137. package/src/routes/delete-many/delete-many.module.d.ts +6 -0
  138. package/src/routes/delete-many/delete-many.module.js +28 -0
  139. package/src/routes/delete-many/delete-many.presenter.d.ts +3 -0
  140. package/src/routes/delete-many/delete-many.presenter.js +20 -0
  141. package/src/routes/delete-many/index.d.ts +7 -0
  142. package/src/routes/delete-many/index.js +23 -0
  143. package/src/routes/delete-one/delete-one-controller.interface.js +2 -0
  144. package/src/routes/delete-one/delete-one-controller.mixin.d.ts +6 -0
  145. package/src/{modules → routes}/delete-one/delete-one-controller.mixin.js +30 -7
  146. package/src/routes/delete-one/delete-one-service.interface.js +2 -0
  147. package/src/routes/delete-one/delete-one.helper.d.ts +7 -0
  148. package/src/{modules → routes}/delete-one/delete-one.helper.js +14 -11
  149. package/src/routes/delete-one/delete-one.module.d.ts +6 -0
  150. package/src/{modules → routes}/delete-one/delete-one.module.js +4 -4
  151. package/src/routes/duplicate-many/base-duplicate-many.service.d.ts +33 -0
  152. package/src/routes/duplicate-many/base-duplicate-many.service.js +43 -0
  153. package/src/routes/duplicate-many/duplicate-many-controller.interface.d.ts +7 -0
  154. package/src/routes/duplicate-many/duplicate-many-controller.interface.js +2 -0
  155. package/src/routes/duplicate-many/duplicate-many-controller.mixin.d.ts +6 -0
  156. package/src/routes/duplicate-many/duplicate-many-controller.mixin.js +85 -0
  157. package/src/routes/duplicate-many/duplicate-many-service.interface.d.ts +5 -0
  158. package/src/routes/duplicate-many/duplicate-many-service.interface.js +2 -0
  159. package/src/routes/duplicate-many/duplicate-many.helper.d.ts +7 -0
  160. package/src/routes/duplicate-many/duplicate-many.helper.js +71 -0
  161. package/src/routes/duplicate-many/duplicate-many.module.d.ts +6 -0
  162. package/src/routes/duplicate-many/duplicate-many.module.js +28 -0
  163. package/src/routes/duplicate-many/index.d.ts +6 -0
  164. package/src/routes/duplicate-many/index.js +22 -0
  165. package/src/routes/duplicate-one/duplicate-one-controller.interface.js +2 -0
  166. package/src/routes/duplicate-one/duplicate-one-controller.mixin.d.ts +6 -0
  167. package/src/{modules → routes}/duplicate-one/duplicate-one-controller.mixin.js +30 -8
  168. package/src/routes/duplicate-one/duplicate-one-service.interface.js +2 -0
  169. package/src/routes/duplicate-one/duplicate-one.helper.d.ts +7 -0
  170. package/src/{modules → routes}/duplicate-one/duplicate-one.helper.js +14 -11
  171. package/src/routes/duplicate-one/duplicate-one.module.d.ts +6 -0
  172. package/src/{modules → routes}/duplicate-one/duplicate-one.module.js +4 -4
  173. package/src/routes/get-many/get-many-controller.interface.js +2 -0
  174. package/src/routes/get-many/get-many-controller.mixin.d.ts +6 -0
  175. package/src/{modules → routes}/get-many/get-many-controller.mixin.js +29 -7
  176. package/src/routes/get-many/get-many-service.interface.js +2 -0
  177. package/src/routes/get-many/get-many.helper.d.ts +7 -0
  178. package/src/{modules → routes}/get-many/get-many.helper.js +14 -11
  179. package/src/routes/get-many/get-many.module.d.ts +6 -0
  180. package/src/{modules → routes}/get-many/get-many.module.js +4 -4
  181. package/src/routes/get-one/get-one-controller.interface.js +2 -0
  182. package/src/routes/get-one/get-one-controller.mixin.d.ts +6 -0
  183. package/src/{modules → routes}/get-one/get-one-controller.mixin.js +30 -8
  184. package/src/routes/get-one/get-one-service.interface.js +2 -0
  185. package/src/routes/get-one/get-one.helper.d.ts +7 -0
  186. package/src/{modules → routes}/get-one/get-one.helper.js +14 -11
  187. package/src/routes/get-one/get-one.module.d.ts +6 -0
  188. package/src/{modules → routes}/get-one/get-one.module.js +4 -4
  189. package/src/routes/index.d.ts +11 -0
  190. package/src/routes/index.js +27 -0
  191. package/src/routes/replace-one/replace-one-controller.interface.js +2 -0
  192. package/src/routes/replace-one/replace-one-controller.mixin.d.ts +6 -0
  193. package/src/{modules → routes}/replace-one/replace-one-controller.mixin.js +30 -8
  194. package/src/routes/replace-one/replace-one-service.interface.js +2 -0
  195. package/src/routes/replace-one/replace-one.helper.d.ts +7 -0
  196. package/src/{modules → routes}/replace-one/replace-one.helper.js +14 -11
  197. package/src/routes/replace-one/replace-one.module.d.ts +6 -0
  198. package/src/{modules → routes}/replace-one/replace-one.module.js +4 -4
  199. package/src/routes/update-many/base-update-many.service.d.ts +33 -0
  200. package/src/routes/update-many/base-update-many.service.js +32 -0
  201. package/src/routes/update-many/index.d.ts +6 -0
  202. package/src/routes/update-many/index.js +22 -0
  203. package/src/routes/update-many/update-many-controller.interface.d.ts +7 -0
  204. package/src/routes/update-many/update-many-controller.interface.js +2 -0
  205. package/src/routes/update-many/update-many-controller.mixin.d.ts +6 -0
  206. package/src/routes/update-many/update-many-controller.mixin.js +85 -0
  207. package/src/routes/update-many/update-many-service.interface.d.ts +5 -0
  208. package/src/routes/update-many/update-many-service.interface.js +2 -0
  209. package/src/routes/update-many/update-many.helper.d.ts +7 -0
  210. package/src/routes/update-many/update-many.helper.js +71 -0
  211. package/src/routes/update-many/update-many.module.d.ts +6 -0
  212. package/src/routes/update-many/update-many.module.js +28 -0
  213. package/src/routes/update-one/update-one-controller.interface.js +2 -0
  214. package/src/routes/update-one/update-one-controller.mixin.d.ts +6 -0
  215. package/src/{modules → routes}/update-one/update-one-controller.mixin.js +30 -8
  216. package/src/routes/update-one/update-one-service.interface.js +2 -0
  217. package/src/routes/update-one/update-one.helper.d.ts +7 -0
  218. package/src/{modules → routes}/update-one/update-one.helper.js +14 -11
  219. package/src/routes/update-one/update-one.module.d.ts +6 -0
  220. package/src/{modules → routes}/update-one/update-one.module.js +4 -4
  221. package/src/services/{base.service.d.ts → base/base.service.d.ts} +1 -1
  222. package/src/services/{base.service.js → base/base.service.js} +2 -2
  223. package/src/services/bcrypt/bcrypt.service.d.ts +5 -0
  224. package/src/services/bcrypt/bcrypt.service.js +26 -0
  225. package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.d.ts +11 -0
  226. package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.js +36 -0
  227. package/src/services/index.d.ts +3 -1
  228. package/src/services/index.js +3 -1
  229. package/src/version.json +1 -1
  230. package/tsconfig.tsbuildinfo +1 -1
  231. package/src/builders/route-decorators.builder.d.ts +0 -18
  232. package/src/builders/route-decorators.builder.js +0 -76
  233. package/src/interfaces/maybe-promise.type.d.ts +0 -2
  234. package/src/interfaces/route-config.interface.d.ts +0 -17
  235. package/src/modules/create-many/create-many-controller.mixin.d.ts +0 -6
  236. package/src/modules/create-many/create-many.helper.d.ts +0 -7
  237. package/src/modules/create-many/create-many.module.d.ts +0 -6
  238. package/src/modules/create-one/create-one-controller.mixin.d.ts +0 -6
  239. package/src/modules/create-one/create-one.helper.d.ts +0 -7
  240. package/src/modules/create-one/create-one.module.d.ts +0 -6
  241. package/src/modules/delete-one/delete-one-controller.mixin.d.ts +0 -6
  242. package/src/modules/delete-one/delete-one.helper.d.ts +0 -7
  243. package/src/modules/delete-one/delete-one.module.d.ts +0 -6
  244. package/src/modules/duplicate-one/duplicate-one-controller.mixin.d.ts +0 -6
  245. package/src/modules/duplicate-one/duplicate-one.helper.d.ts +0 -7
  246. package/src/modules/duplicate-one/duplicate-one.module.d.ts +0 -6
  247. package/src/modules/get-many/get-many-controller.mixin.d.ts +0 -6
  248. package/src/modules/get-many/get-many.helper.d.ts +0 -7
  249. package/src/modules/get-many/get-many.module.d.ts +0 -6
  250. package/src/modules/get-one/get-one-controller.mixin.d.ts +0 -6
  251. package/src/modules/get-one/get-one.helper.d.ts +0 -7
  252. package/src/modules/get-one/get-one.module.d.ts +0 -6
  253. package/src/modules/replace-one/replace-one-controller.mixin.d.ts +0 -6
  254. package/src/modules/replace-one/replace-one.helper.d.ts +0 -7
  255. package/src/modules/replace-one/replace-one.module.d.ts +0 -6
  256. package/src/modules/update-one/update-one-controller.mixin.d.ts +0 -6
  257. package/src/modules/update-one/update-one.helper.d.ts +0 -7
  258. package/src/modules/update-one/update-one.module.d.ts +0 -6
  259. package/src/interfaces/{entity-mappers.interface.js → dynamic-api-cache-options.interface.js} +0 -0
  260. package/src/interfaces/{maybe-promise.type.js → dynamic-api-casl-ability.interface.js} +0 -0
  261. package/src/interfaces/{route-config.interface.js → dynamic-api-controller-options.interface.js} +0 -0
  262. package/src/interfaces/{service-provider.interface.js → dynamic-api-decorator-builder.interface.js} +0 -0
  263. package/src/interfaces/{entity-mappers.interface.d.ts → dynamic-api-entity-mappers.interface.d.ts} +0 -0
  264. package/src/{modules/create-many/create-many-controller.interface.js → interfaces/dynamic-api-entity-mappers.interface.js} +0 -0
  265. package/src/{modules/create-many/create-many-service.interface.js → interfaces/dynamic-api-global-state.interface.js} +0 -0
  266. package/src/{modules/create-one/create-one-controller.interface.js → interfaces/dynamic-api-policy-handler.interface.js} +0 -0
  267. package/src/{modules/create-one/create-one-service.interface.js → interfaces/dynamic-api-route-config.interface.js} +0 -0
  268. package/src/{modules/delete-one/delete-one-controller.interface.js → interfaces/dynamic-api-route-dtos-bundle.type.js} +0 -0
  269. package/src/{modules/delete-one/delete-one-service.interface.js → interfaces/dynamic-api-route-module.type.js} +0 -0
  270. package/src/{modules/duplicate-one/duplicate-one-controller.interface.js → interfaces/dynamic-api-route-type.type.js} +0 -0
  271. package/src/{modules/duplicate-one/duplicate-one-service.interface.js → interfaces/dynamic-api-service-provider.interface.js} +0 -0
  272. package/src/{modules/get-many/get-many-controller.interface.js → interfaces/dynamic-api-swagger-options.type.js} +0 -0
  273. package/src/modules/{get-many/get-many-service.interface.js → auth/interfaces/auth-controller.interface.js} +0 -0
  274. package/src/modules/{get-one/get-one-controller.interface.js → auth/interfaces/auth-options.interface.js} +0 -0
  275. package/src/modules/{get-one/get-one-service.interface.js → auth/interfaces/auth-service.interface.js} +0 -0
  276. package/src/{modules → routes}/create-many/base-create-many.service.d.ts +0 -0
  277. package/src/{modules → routes}/create-many/base-create-many.service.js +0 -0
  278. package/src/{modules → routes}/create-many/create-many-controller.interface.d.ts +0 -0
  279. package/src/{modules/replace-one/replace-one-controller.interface.js → routes/create-many/create-many-controller.interface.js} +0 -0
  280. package/src/{modules → routes}/create-many/create-many-service.interface.d.ts +0 -0
  281. package/src/{modules/replace-one/replace-one-service.interface.js → routes/create-many/create-many-service.interface.js} +0 -0
  282. package/src/{modules → routes}/create-many/index.d.ts +0 -0
  283. package/src/{modules → routes}/create-many/index.js +0 -0
  284. package/src/{modules → routes}/create-one/base-create-one.service.d.ts +0 -0
  285. package/src/{modules → routes}/create-one/base-create-one.service.js +0 -0
  286. package/src/{modules → routes}/create-one/create-one-controller.interface.d.ts +0 -0
  287. package/src/{modules/update-one/update-one-controller.interface.js → routes/create-one/create-one-controller.interface.js} +0 -0
  288. package/src/{modules → routes}/create-one/create-one-service.interface.d.ts +0 -0
  289. package/src/{modules/update-one/update-one-service.interface.js → routes/create-one/create-one-service.interface.js} +0 -0
  290. package/src/{modules → routes}/create-one/index.d.ts +0 -0
  291. package/src/{modules → routes}/create-one/index.js +0 -0
  292. package/src/{modules → routes}/delete-one/base-delete-one.service.d.ts +0 -0
  293. package/src/{modules → routes}/delete-one/base-delete-one.service.js +0 -0
  294. package/src/{modules → routes}/delete-one/delete-one-controller.interface.d.ts +0 -0
  295. package/src/{modules → routes}/delete-one/delete-one-service.interface.d.ts +0 -0
  296. package/src/{modules → routes}/delete-one/delete-one.presenter.d.ts +0 -0
  297. package/src/{modules → routes}/delete-one/delete-one.presenter.js +0 -0
  298. package/src/{modules → routes}/delete-one/index.d.ts +0 -0
  299. package/src/{modules → routes}/delete-one/index.js +0 -0
  300. package/src/{modules → routes}/duplicate-one/base-duplicate-one.service.d.ts +0 -0
  301. package/src/{modules → routes}/duplicate-one/base-duplicate-one.service.js +0 -0
  302. package/src/{modules → routes}/duplicate-one/duplicate-one-controller.interface.d.ts +0 -0
  303. package/src/{modules → routes}/duplicate-one/duplicate-one-service.interface.d.ts +0 -0
  304. package/src/{modules → routes}/duplicate-one/index.d.ts +0 -0
  305. package/src/{modules → routes}/duplicate-one/index.js +0 -0
  306. package/src/{modules → routes}/get-many/base-get-many.service.d.ts +0 -0
  307. package/src/{modules → routes}/get-many/base-get-many.service.js +1 -1
  308. /package/src/{modules → routes}/get-many/get-many-controller.interface.d.ts +0 -0
  309. /package/src/{modules → routes}/get-many/get-many-service.interface.d.ts +0 -0
  310. /package/src/{modules → routes}/get-many/index.d.ts +0 -0
  311. /package/src/{modules → routes}/get-many/index.js +0 -0
  312. /package/src/{modules → routes}/get-one/base-get-one.service.d.ts +0 -0
  313. /package/src/{modules → routes}/get-one/base-get-one.service.js +0 -0
  314. /package/src/{modules → routes}/get-one/get-one-controller.interface.d.ts +0 -0
  315. /package/src/{modules → routes}/get-one/get-one-service.interface.d.ts +0 -0
  316. /package/src/{modules → routes}/get-one/index.d.ts +0 -0
  317. /package/src/{modules → routes}/get-one/index.js +0 -0
  318. /package/src/{modules → routes}/replace-one/base-replace-one.service.d.ts +0 -0
  319. /package/src/{modules → routes}/replace-one/base-replace-one.service.js +0 -0
  320. /package/src/{modules → routes}/replace-one/index.d.ts +0 -0
  321. /package/src/{modules → routes}/replace-one/index.js +0 -0
  322. /package/src/{modules → routes}/replace-one/replace-one-controller.interface.d.ts +0 -0
  323. /package/src/{modules → routes}/replace-one/replace-one-service.interface.d.ts +0 -0
  324. /package/src/{modules → routes}/update-one/base-update-one.service.d.ts +0 -0
  325. /package/src/{modules → routes}/update-one/base-update-one.service.js +0 -0
  326. /package/src/{modules → routes}/update-one/index.d.ts +0 -0
  327. /package/src/{modules → routes}/update-one/index.js +0 -0
  328. /package/src/{modules → routes}/update-one/update-one-controller.interface.d.ts +0 -0
  329. /package/src/{modules → routes}/update-one/update-one-service.interface.d.ts +0 -0
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DeleteManyEntityQuery = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const class_validator_1 = require("class-validator");
15
+ class DeleteManyEntityQuery {
16
+ }
17
+ exports.DeleteManyEntityQuery = DeleteManyEntityQuery;
18
+ __decorate([
19
+ (0, swagger_1.ApiProperty)({ type: [String], minItems: 1 }),
20
+ (0, class_validator_1.IsNotEmpty)({ each: true }),
21
+ (0, class_validator_1.IsString)({ each: true }),
22
+ (0, class_validator_1.ArrayMinSize)(1),
23
+ __metadata("design:type", Array)
24
+ ], DeleteManyEntityQuery.prototype, "ids", void 0);
@@ -1,2 +1,3 @@
1
+ export * from './delete-many-entity.query';
1
2
  export * from './entity.param';
2
3
  export * from './entity.query';
package/src/dtos/index.js CHANGED
@@ -14,5 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./delete-many-entity.query"), exports);
17
18
  __exportStar(require("./entity.param"), exports);
18
19
  __exportStar(require("./entity.query"), exports);
@@ -1,8 +1,10 @@
1
1
  import { DynamicModule } from '@nestjs/common';
2
- import { DynamicApiOptions } from './interfaces';
2
+ import { DynamicApiForFeatureOptions, DynamicApiForRootOptions } from './interfaces';
3
3
  import { BaseEntity } from './models';
4
+ import { DynamicApiGlobalStateService } from './services';
4
5
  export declare class DynamicApiModule {
5
- static readonly connectionName = "dynamic-api-connection";
6
- static forRoot(uri: string): DynamicModule;
7
- static forFeature<Entity extends BaseEntity>({ entity, controllerOptions: { path, apiTag, version: controllerVersion, validationPipeOptions: controllerValidationPipeOptions, }, routes, }: DynamicApiOptions<Entity>): DynamicModule;
6
+ static readonly state: DynamicApiGlobalStateService;
7
+ static forRoot(uri: string, { useGlobalCache, cacheOptions, useAuth, }?: DynamicApiForRootOptions): DynamicModule;
8
+ static forFeature<Entity extends BaseEntity>({ entity, controllerOptions, routes, }: DynamicApiForFeatureOptions<Entity>): Promise<DynamicModule>;
9
+ private static setDefaultRoutesIfNotConfigured;
8
10
  }
@@ -8,94 +8,170 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var DynamicApiModule_1;
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.DynamicApiModule = void 0;
11
+ const cache_manager_1 = require("@nestjs/cache-manager");
11
12
  const common_1 = require("@nestjs/common");
13
+ const core_1 = require("@nestjs/core");
14
+ const http_adapter_host_1 = require("@nestjs/core/helpers/http-adapter-host");
12
15
  const mongoose_1 = require("@nestjs/mongoose");
13
- const lodash_1 = require("lodash");
14
- const decorators_1 = require("./decorators");
16
+ const rxjs_1 = require("rxjs");
17
+ const guards_1 = require("./guards");
18
+ const helpers_1 = require("./helpers");
19
+ const interceptors_1 = require("./interceptors");
20
+ const interfaces_1 = require("./interfaces");
15
21
  const modules_1 = require("./modules");
22
+ const routes_1 = require("./routes");
23
+ const services_1 = require("./services");
16
24
  let DynamicApiModule = DynamicApiModule_1 = class DynamicApiModule {
17
- static forRoot(uri) {
25
+ static forRoot(uri, { useGlobalCache = true, cacheOptions = {}, useAuth, } = {}) {
18
26
  if (!uri) {
19
27
  throw new Error('You must provide a valid mongodb uri in the forRoot method to use MongoDB Dynamic API');
20
28
  }
29
+ this.state.set([
30
+ 'partial', {
31
+ initialized: true,
32
+ isGlobalCacheEnabled: useGlobalCache,
33
+ ...(cacheOptions?.excludePaths ? { cacheExcludedPaths: cacheOptions?.excludePaths } : {}),
34
+ ...(useAuth?.user ? {
35
+ isAuthEnabled: true,
36
+ credentials: {
37
+ loginField: !useAuth.user.loginField ? 'email' : String(useAuth.user.loginField),
38
+ passwordField: !useAuth.user.passwordField ? 'password' : String(useAuth.user.passwordField),
39
+ },
40
+ jwtSecret: useAuth.jwt?.secret ?? 'dynamic-api-jwt-secret',
41
+ } : {}),
42
+ },
43
+ ]);
21
44
  return {
22
45
  module: DynamicApiModule_1,
23
46
  imports: [
24
- mongoose_1.MongooseModule.forRoot(uri, { connectionName: DynamicApiModule_1.connectionName }),
47
+ modules_1.DynamicApiConfigModule.register(this.state.get()),
48
+ cache_manager_1.CacheModule.register({ isGlobal: true, ...cacheOptions }),
49
+ mongoose_1.MongooseModule.forRoot(uri, { connectionName: this.state.get('connectionName') }),
50
+ ...(useAuth?.user ? [
51
+ modules_1.AuthModule.forRoot({
52
+ user: {
53
+ entity: useAuth.user.entity,
54
+ loginField: useAuth.user.loginField ?? 'email',
55
+ passwordField: useAuth.user.passwordField ?? 'password',
56
+ requestAdditionalFields: useAuth.user.requestAdditionalFields ?? [],
57
+ },
58
+ jwt: {
59
+ secret: useAuth.jwt?.secret ?? 'dynamic-api-jwt-secret',
60
+ expiresIn: useAuth.jwt?.expiresIn ?? '1d',
61
+ },
62
+ register: useAuth.register ?? {
63
+ protected: false,
64
+ additionalFields: [],
65
+ },
66
+ }),
67
+ ] : []),
25
68
  ],
69
+ exports: [modules_1.DynamicApiConfigModule],
26
70
  };
27
71
  }
28
- static forFeature({ entity, controllerOptions: { path, apiTag, version: controllerVersion, validationPipeOptions: controllerValidationPipeOptions, }, routes = [], }) {
29
- const { indexes, hooks } = Reflect.getOwnMetadata(decorators_1.DYNAMIC_API_SCHEMA_OPTIONS_METADATA, entity) ?? {};
30
- const schema = mongoose_1.SchemaFactory.createForClass(entity);
31
- schema.set('timestamps', true);
32
- if (indexes) {
33
- indexes.forEach(({ fields, options }) => {
34
- schema.index(fields, options);
35
- });
36
- }
37
- if (hooks?.length) {
38
- hooks.forEach(({ type, method, callback, options }) => {
39
- schema[method](type, { document: true, query: true, ...options }, callback);
40
- });
41
- }
42
- const databaseModule = mongoose_1.MongooseModule.forFeature([{ name: entity.name, schema }], DynamicApiModule_1.connectionName);
72
+ static forFeature({ entity, controllerOptions, routes = [], }) {
73
+ const databaseModule = mongoose_1.MongooseModule.forFeature([{ name: entity.name, schema: (0, helpers_1.buildSchemaFromEntity)(entity) }], this.state.get('connectionName'));
74
+ routes = this.setDefaultRoutesIfNotConfigured([...routes]);
75
+ return new Promise((resolve, reject) => {
76
+ const waitInitializedStateInterval = setInterval(async () => {
77
+ const stateInitialized = await (0, rxjs_1.firstValueFrom)(this.state.get().onInitialized());
78
+ if (!stateInitialized) {
79
+ return;
80
+ }
81
+ if (waitForState) {
82
+ clearTimeout(waitForState);
83
+ }
84
+ clearInterval(waitInitializedStateInterval);
85
+ const { version: controllerVersion, validationPipeOptions: controllerValidationPipeOptions, } = controllerOptions;
86
+ const castType = (t) => t;
87
+ const castModule = (m) => m;
88
+ const moduleByRouteType = new Map([
89
+ [castType('CreateMany'), castModule(routes_1.CreateManyModule)],
90
+ [castType('CreateOne'), castModule(routes_1.CreateOneModule)],
91
+ [castType('DeleteMany'), castModule(routes_1.DeleteManyModule)],
92
+ [castType('DeleteOne'), castModule(routes_1.DeleteOneModule)],
93
+ [castType('DuplicateMany'), castModule(routes_1.DuplicateManyModule)],
94
+ [castType('DuplicateOne'), castModule(routes_1.DuplicateOneModule)],
95
+ [castType('GetMany'), castModule(routes_1.GetManyModule)],
96
+ [castType('GetOne'), castModule(routes_1.GetOneModule)],
97
+ [castType('ReplaceOne'), castModule(routes_1.ReplaceOneModule)],
98
+ [castType('UpdateMany'), castModule(routes_1.UpdateManyModule)],
99
+ [castType('UpdateOne'), castModule(routes_1.UpdateOneModule)],
100
+ ]);
101
+ const apiModule = {
102
+ module: DynamicApiModule_1,
103
+ imports: [
104
+ ...routes.map((routeConfig) => {
105
+ const { type, description: routeDescription, version: routeVersion, validationPipeOptions: routeValidationPipeOptions, } = routeConfig;
106
+ const module = moduleByRouteType.get(type);
107
+ if (!module) {
108
+ reject(new Error(`Route module for ${type} not found`));
109
+ return;
110
+ }
111
+ const description = routeDescription ?? (0, helpers_1.getDefaultRouteDescription)(type, entity.name);
112
+ const version = routeVersion ?? controllerVersion;
113
+ if (version && !(0, helpers_1.isValidVersion)(version)) {
114
+ reject(new Error(`Invalid version ${version} for ${type} route.`
115
+ + ' Version must be a string that matches numeric format, e.g. 1, 2, 3, ..., 99.'));
116
+ return;
117
+ }
118
+ const validationPipeOptions = routeValidationPipeOptions ?? controllerValidationPipeOptions;
119
+ return module.forFeature(databaseModule, entity, controllerOptions, { ...routeConfig, description }, version, validationPipeOptions ?? { transform: true });
120
+ }),
121
+ ],
122
+ providers: [
123
+ {
124
+ provide: core_1.APP_INTERCEPTOR,
125
+ inject: [cache_manager_1.CACHE_MANAGER, core_1.Reflector, http_adapter_host_1.HttpAdapterHost, interfaces_1.DYNAMIC_API_GLOBAL_STATE],
126
+ useFactory: (cacheManager, reflector, httpAdapterHost, state) => {
127
+ return new interceptors_1.DynamicApiCacheInterceptor(cacheManager, reflector, httpAdapterHost, state);
128
+ },
129
+ },
130
+ {
131
+ provide: core_1.APP_GUARD,
132
+ inject: [core_1.Reflector, interfaces_1.DYNAMIC_API_GLOBAL_STATE],
133
+ useFactory: (reflector, state) => {
134
+ return new guards_1.DynamicApiJwtAuthGuard(reflector, state);
135
+ },
136
+ },
137
+ ],
138
+ };
139
+ resolve(apiModule);
140
+ }, 500);
141
+ const waitForState = setTimeout(() => {
142
+ clearInterval(waitInitializedStateInterval);
143
+ reject(new Error('Dynamic API state could not be initialized. Please check your configuration.'));
144
+ }, 5000);
145
+ });
146
+ }
147
+ static setDefaultRoutesIfNotConfigured(routes) {
43
148
  if (!routes.length) {
44
- const contentName = (0, lodash_1.lowerCase)(entity.name);
45
- routes = [
46
- { type: 'GetMany', description: `Get many ${contentName}` },
47
- { type: 'GetOne', description: `Get one ${contentName} by id` },
48
- { type: 'CreateMany', description: `Create many ${contentName}` },
49
- { type: 'CreateOne', description: `Create one ${contentName}` },
50
- { type: 'ReplaceOne', description: `Replace one ${contentName}` },
51
- { type: 'UpdateOne', description: `Update one ${contentName}` },
52
- { type: 'DuplicateOne', description: `Duplicate one ${contentName}` },
53
- { type: 'DeleteOne', description: `Delete one ${contentName}` },
149
+ return [
150
+ { type: 'GetMany' },
151
+ { type: 'GetOne' },
152
+ { type: 'CreateMany' },
153
+ { type: 'CreateOne' },
154
+ { type: 'UpdateMany' },
155
+ { type: 'UpdateOne' },
156
+ { type: 'ReplaceOne' },
157
+ { type: 'DuplicateMany' },
158
+ { type: 'DuplicateOne' },
159
+ { type: 'DeleteMany' },
160
+ { type: 'DeleteOne' },
54
161
  ];
55
162
  }
56
- return {
57
- module: DynamicApiModule_1,
58
- imports: [
59
- ...routes
60
- .map(({ type, description, dTOs, version: routeVersion, validationPipeOptions: routeValidationPipeOptions, }) => {
61
- let module;
62
- switch (type) {
63
- case 'CreateMany':
64
- module = modules_1.CreateManyModule;
65
- break;
66
- case 'CreateOne':
67
- module = modules_1.CreateOneModule;
68
- break;
69
- case 'DeleteOne':
70
- module = modules_1.DeleteOneModule;
71
- break;
72
- case 'DuplicateOne':
73
- module = modules_1.DuplicateOneModule;
74
- break;
75
- case 'GetMany':
76
- module = modules_1.GetManyModule;
77
- break;
78
- case 'GetOne':
79
- module = modules_1.GetOneModule;
80
- break;
81
- case 'ReplaceOne':
82
- module = modules_1.ReplaceOneModule;
83
- break;
84
- case 'UpdateOne':
85
- module = modules_1.UpdateOneModule;
86
- break;
87
- default:
88
- throw new Error(`Route for ${type} is not implemented`);
89
- }
90
- return module.forFeature(databaseModule, entity, { path, apiTag }, { description, dTOs }, routeVersion ?? controllerVersion, routeValidationPipeOptions ?? controllerValidationPipeOptions);
91
- })
92
- .filter((module) => module),
93
- ],
94
- };
163
+ return routes;
95
164
  }
96
165
  };
97
166
  exports.DynamicApiModule = DynamicApiModule;
98
- DynamicApiModule.connectionName = 'dynamic-api-connection';
167
+ DynamicApiModule.state = new services_1.DynamicApiGlobalStateService({
168
+ connectionName: 'dynamic-api-connection',
169
+ isGlobalCacheEnabled: true,
170
+ isAuthEnabled: false,
171
+ credentials: null,
172
+ jwtSecret: undefined,
173
+ cacheExcludedPaths: [],
174
+ });
99
175
  exports.DynamicApiModule = DynamicApiModule = DynamicApiModule_1 = __decorate([
100
176
  (0, common_1.Module)({})
101
177
  ], DynamicApiModule);
@@ -0,0 +1,13 @@
1
+ import { CanActivate, ExecutionContext, Type } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ import { DynamicApiRouteCaslAbilityPredicate, RouteType } from '../interfaces';
4
+ import { BaseEntity } from '../models';
5
+ export declare abstract class BasePoliciesGuard<Entity extends BaseEntity> implements CanActivate {
6
+ protected readonly reflector: Reflector;
7
+ protected routeType: RouteType;
8
+ protected entity: Type<Entity>;
9
+ protected abilityPredicate: DynamicApiRouteCaslAbilityPredicate<Entity> | undefined;
10
+ protected constructor(reflector: Reflector);
11
+ canActivate(context: ExecutionContext): boolean;
12
+ private execPolicyHandler;
13
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BasePoliciesGuard = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const builders_1 = require("../builders");
6
+ const decorators_1 = require("../decorators");
7
+ class BasePoliciesGuard {
8
+ constructor(reflector) {
9
+ this.reflector = reflector;
10
+ }
11
+ canActivate(context) {
12
+ const policyHandlers = this.reflector.get(decorators_1.CHECK_POLICIES_KEY, context.getHandler());
13
+ if (!policyHandlers || !this.abilityPredicate) {
14
+ return true;
15
+ }
16
+ let { user } = context.switchToHttp().getRequest();
17
+ if (!user) {
18
+ throw new common_1.ForbiddenException('Forbidden resource');
19
+ }
20
+ const ability = (0, builders_1.CaslAbilityBuilder)(this.entity, this.routeType, this.abilityPredicate, user);
21
+ return policyHandlers.every((handler) => {
22
+ return this.execPolicyHandler(handler, ability);
23
+ });
24
+ }
25
+ execPolicyHandler(handler, ability) {
26
+ if (typeof handler === 'function') {
27
+ return handler(ability);
28
+ }
29
+ return handler.handle(ability);
30
+ }
31
+ }
32
+ exports.BasePoliciesGuard = BasePoliciesGuard;
@@ -0,0 +1,11 @@
1
+ import { ExecutionContext } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ import { DynamicApiGlobalState } from '../interfaces';
4
+ declare const DynamicApiJwtAuthGuard_base: import("@nestjs/passport").Type<import("@nestjs/passport").IAuthGuard>;
5
+ export declare class DynamicApiJwtAuthGuard extends DynamicApiJwtAuthGuard_base {
6
+ private reflector;
7
+ private readonly state;
8
+ constructor(reflector: Reflector, state: DynamicApiGlobalState);
9
+ canActivate(context: ExecutionContext): boolean | Promise<boolean> | import("rxjs").Observable<boolean>;
10
+ }
11
+ export {};
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DynamicApiJwtAuthGuard = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const core_1 = require("@nestjs/core");
15
+ const passport_1 = require("@nestjs/passport");
16
+ const decorators_1 = require("../decorators");
17
+ let DynamicApiJwtAuthGuard = class DynamicApiJwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
18
+ constructor(reflector, state) {
19
+ super();
20
+ this.reflector = reflector;
21
+ this.state = state;
22
+ }
23
+ canActivate(context) {
24
+ const isPublic = this.reflector.getAllAndOverride(decorators_1.IS_PUBLIC_KEY, [
25
+ context.getHandler(),
26
+ context.getClass(),
27
+ ]);
28
+ if (isPublic || !this.state.isAuthEnabled) {
29
+ return true;
30
+ }
31
+ return super.canActivate(context);
32
+ }
33
+ };
34
+ exports.DynamicApiJwtAuthGuard = DynamicApiJwtAuthGuard;
35
+ exports.DynamicApiJwtAuthGuard = DynamicApiJwtAuthGuard = __decorate([
36
+ (0, common_1.Injectable)(),
37
+ __metadata("design:paramtypes", [core_1.Reflector, Object])
38
+ ], DynamicApiJwtAuthGuard);
@@ -0,0 +1,2 @@
1
+ export * from './base-policies.guard';
2
+ export * from './dynamic-api-jwt-auth.guard';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./base-policies.guard"), exports);
18
+ __exportStar(require("./dynamic-api-jwt-auth.guard"), exports);
@@ -0,0 +1,4 @@
1
+ import { DynamicApiControllerAbilityPredicate, DynamicApiRouteCaslAbilityPredicate, RouteType } from '../interfaces';
2
+ import { BaseEntity } from '../models';
3
+ declare function getPredicateFromControllerAbilityPredicates<Entity extends BaseEntity>(controllerAbilityPredicates: DynamicApiControllerAbilityPredicate<Entity>[], route: RouteType): DynamicApiRouteCaslAbilityPredicate<Entity>;
4
+ export { getPredicateFromControllerAbilityPredicates };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPredicateFromControllerAbilityPredicates = void 0;
4
+ function getPredicateFromControllerAbilityPredicates(controllerAbilityPredicates, route) {
5
+ let routePredicate;
6
+ if (!controllerAbilityPredicates?.length) {
7
+ return;
8
+ }
9
+ for (const controllerAbilityPredicate of controllerAbilityPredicates) {
10
+ const { targets, predicate } = controllerAbilityPredicate;
11
+ if (targets.includes(route)) {
12
+ routePredicate = predicate;
13
+ break;
14
+ }
15
+ }
16
+ return routePredicate;
17
+ }
18
+ exports.getPredicateFromControllerAbilityPredicates = getPredicateFromControllerAbilityPredicates;
@@ -0,0 +1,2 @@
1
+ export declare function pascalCase(str?: string): string;
2
+ export declare function isValidVersion(version: string): boolean;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isValidVersion = exports.pascalCase = void 0;
4
+ const lodash_1 = require("lodash");
5
+ function pascalCase(str) {
6
+ return str ? (0, lodash_1.upperFirst)((0, lodash_1.camelCase)(str)) : undefined;
7
+ }
8
+ exports.pascalCase = pascalCase;
9
+ function isValidVersion(version) {
10
+ return /^\d+$/.test(version);
11
+ }
12
+ exports.isValidVersion = isValidVersion;
@@ -1,2 +1,7 @@
1
- export * from './config.helper';
1
+ export * from './format.helper';
2
2
  export * from './route-decorators.helper';
3
+ export * from './route-description.helper';
4
+ export * from './schema.helper';
5
+ export * from './swagger-config.helper';
6
+ export * from './validation-config.helper';
7
+ export * from './versioning-config.helper';
@@ -14,5 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./config.helper"), exports);
17
+ __exportStar(require("./format.helper"), exports);
18
18
  __exportStar(require("./route-decorators.helper"), exports);
19
+ __exportStar(require("./route-description.helper"), exports);
20
+ __exportStar(require("./schema.helper"), exports);
21
+ __exportStar(require("./swagger-config.helper"), exports);
22
+ __exportStar(require("./validation-config.helper"), exports);
23
+ __exportStar(require("./versioning-config.helper"), exports);
@@ -1,4 +1,4 @@
1
- import { RouteDecoratorsBuilder } from '../builders';
1
+ import { DynamicApiDecoratorBuilder } from '../interfaces';
2
2
  import { BaseEntity } from '../models';
3
- declare function RouteDecoratorsHelper<Entity extends BaseEntity>(routeDecorators: RouteDecoratorsBuilder<Entity>): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
3
+ declare function RouteDecoratorsHelper<Entity extends BaseEntity>(routeDecorators: DynamicApiDecoratorBuilder<Entity>): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
4
4
  export { RouteDecoratorsHelper };
@@ -0,0 +1,3 @@
1
+ import { RouteType } from '../interfaces';
2
+ declare function getDefaultRouteDescription(routeType: RouteType, entityName: string): string;
3
+ export { getDefaultRouteDescription };
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDefaultRouteDescription = void 0;
4
+ const lodash_1 = require("lodash");
5
+ function getDefaultRouteDescription(routeType, entityName) {
6
+ const contentName = (0, lodash_1.lowerCase)(entityName);
7
+ switch (routeType) {
8
+ case 'CreateMany':
9
+ return `Create many ${contentName}`;
10
+ case 'CreateOne':
11
+ return `Create one ${contentName}`;
12
+ case 'DeleteMany':
13
+ return `Delete many ${contentName}`;
14
+ case 'DeleteOne':
15
+ return `Delete one ${contentName}`;
16
+ case 'DuplicateMany':
17
+ return `Duplicate many ${contentName}`;
18
+ case 'DuplicateOne':
19
+ return `Duplicate one ${contentName}`;
20
+ case 'GetMany':
21
+ return `Get many ${contentName}`;
22
+ case 'GetOne':
23
+ return `Get one ${contentName} by id`;
24
+ case 'ReplaceOne':
25
+ return `Replace one ${contentName}`;
26
+ case 'UpdateMany':
27
+ return `Update many ${contentName}`;
28
+ case 'UpdateOne':
29
+ return `Update one ${contentName}`;
30
+ default:
31
+ throw new Error(`Route type "${routeType}" is not supported`);
32
+ }
33
+ }
34
+ exports.getDefaultRouteDescription = getDefaultRouteDescription;
@@ -0,0 +1,28 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ import { Type } from '@nestjs/common';
26
+ import { Schema } from 'mongoose';
27
+ declare function buildSchemaFromEntity<Entity>(entity: Type<Entity>): Schema<Entity>;
28
+ export { buildSchemaFromEntity };
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildSchemaFromEntity = void 0;
4
+ const mongoose_1 = require("@nestjs/mongoose");
5
+ const decorators_1 = require("../decorators");
6
+ const interfaces_1 = require("../interfaces");
7
+ function buildSchemaFromEntity(entity) {
8
+ const { indexes, hooks, customInit } = Reflect.getOwnMetadata(decorators_1.DYNAMIC_API_SCHEMA_OPTIONS_METADATA, entity) ?? {};
9
+ const schema = mongoose_1.SchemaFactory.createForClass(entity);
10
+ if (Object.getOwnPropertyNames(schema.paths).includes('createdAt')) {
11
+ schema.set('timestamps', true);
12
+ }
13
+ if (indexes) {
14
+ indexes.forEach(({ fields, options }) => {
15
+ schema.index(fields, options);
16
+ });
17
+ }
18
+ if (hooks?.length) {
19
+ const isSoftDeletable = Object.getOwnPropertyNames(schema.paths).includes('deletedAt');
20
+ hooks.forEach(({ type, method, callback, options }) => {
21
+ const { query, softDeletableQuery } = interfaces_1.queryByRouteTypeMap.get(type);
22
+ schema[method](isSoftDeletable && softDeletableQuery ? softDeletableQuery : query, { document: true, query: true, ...options }, callback);
23
+ });
24
+ }
25
+ if (customInit) {
26
+ customInit(schema);
27
+ }
28
+ return schema;
29
+ }
30
+ exports.buildSchemaFromEntity = buildSchemaFromEntity;
@@ -0,0 +1,4 @@
1
+ import { INestApplication } from '@nestjs/common';
2
+ import { DynamicAPISwaggerOptions } from '../interfaces';
3
+ declare function enableDynamicAPISwagger(app: INestApplication, options?: DynamicAPISwaggerOptions): void;
4
+ export { enableDynamicAPISwagger };