@elsikora/nestjs-crud-automator 3.0.2 → 4.0.0-dev.2

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 (762) hide show
  1. package/README.md +113 -11
  2. package/dist/cjs/class/api/authorization/guard.class.d.ts +1 -0
  3. package/dist/cjs/class/api/authorization/guard.class.js +39 -3
  4. package/dist/cjs/class/api/authorization/guard.class.js.map +1 -1
  5. package/dist/cjs/class/api/authorization/iam/engine.class.d.ts +3 -2
  6. package/dist/cjs/class/api/authorization/iam/engine.class.js.map +1 -1
  7. package/dist/cjs/class/api/authorization/iam/query-planner.class.d.ts +3 -2
  8. package/dist/cjs/class/api/authorization/iam/query-planner.class.js.map +1 -1
  9. package/dist/cjs/class/api/authorization/policy/base.class.js +1 -0
  10. package/dist/cjs/class/api/authorization/policy/base.class.js.map +1 -1
  11. package/dist/cjs/class/api/authorization/policy/executor.class.d.ts +2 -1
  12. package/dist/cjs/class/api/authorization/policy/executor.class.js.map +1 -1
  13. package/dist/cjs/class/api/authorization/policy/registry.class.d.ts +3 -2
  14. package/dist/cjs/class/api/authorization/policy/registry.class.js.map +1 -1
  15. package/dist/cjs/class/api/authorization/runtime.class.d.ts +3 -2
  16. package/dist/cjs/class/api/authorization/runtime.class.js +2 -1
  17. package/dist/cjs/class/api/authorization/runtime.class.js.map +1 -1
  18. package/dist/cjs/class/api/authorization/simulator.class.d.ts +3 -3
  19. package/dist/cjs/class/api/authorization/simulator.class.js.map +1 -1
  20. package/dist/cjs/class/api/controller/generated/function-capability.class.d.ts +12 -0
  21. package/dist/cjs/class/api/controller/generated/function-capability.class.js +47 -0
  22. package/dist/cjs/class/api/controller/generated/function-capability.class.js.map +1 -0
  23. package/dist/cjs/class/api/controller/generated/get-many-contract.class.d.ts +25 -0
  24. package/dist/cjs/class/api/controller/generated/get-many-contract.class.js +250 -0
  25. package/dist/cjs/class/api/controller/generated/get-many-contract.class.js.map +1 -0
  26. package/dist/cjs/class/api/controller/generated/index.d.ts +3 -0
  27. package/dist/cjs/class/api/controller/generated/read-scope-storage.class.d.ts +19 -0
  28. package/dist/cjs/class/api/controller/generated/read-scope-storage.class.js +120 -0
  29. package/dist/cjs/class/api/controller/generated/read-scope-storage.class.js.map +1 -0
  30. package/dist/cjs/class/api/controller/generated/relation-cache-contract.class.d.ts +11 -0
  31. package/dist/cjs/class/api/controller/generated/relation-cache-contract.class.js +70 -0
  32. package/dist/cjs/class/api/controller/generated/relation-cache-contract.class.js.map +1 -0
  33. package/dist/cjs/class/api/controller/generated/scope-where-contract.class.d.ts +14 -0
  34. package/dist/cjs/class/api/controller/generated/scope-where-contract.class.js +68 -0
  35. package/dist/cjs/class/api/controller/generated/scope-where-contract.class.js.map +1 -0
  36. package/dist/cjs/class/api/controller/generated/security-snapshot.class.d.ts +14 -0
  37. package/dist/cjs/class/api/controller/generated/security-snapshot.class.js +165 -0
  38. package/dist/cjs/class/api/controller/generated/security-snapshot.class.js.map +1 -0
  39. package/dist/cjs/class/api/controller/generated/write-hydration-contract.class.d.ts +9 -0
  40. package/dist/cjs/class/api/controller/generated/write-hydration-contract.class.js +69 -0
  41. package/dist/cjs/class/api/controller/generated/write-hydration-contract.class.js.map +1 -0
  42. package/dist/cjs/class/api/controller/get-list/cursor/data-source-contract.class.d.ts +32 -0
  43. package/dist/cjs/class/api/controller/get-list/cursor/data-source-contract.class.js +424 -0
  44. package/dist/cjs/class/api/controller/get-list/cursor/data-source-contract.class.js.map +1 -0
  45. package/dist/cjs/class/api/controller/get-list/cursor/index.d.ts +2 -0
  46. package/dist/cjs/class/api/controller/get-list/cursor/runtime.class.d.ts +28 -0
  47. package/dist/cjs/class/api/controller/get-list/cursor/runtime.class.js +371 -0
  48. package/dist/cjs/class/api/controller/get-list/cursor/runtime.class.js.map +1 -0
  49. package/dist/cjs/class/api/controller/get-list/query/plan-compiler.class.d.ts +20 -0
  50. package/dist/cjs/class/api/controller/get-list/query/plan-compiler.class.js +479 -41
  51. package/dist/cjs/class/api/controller/get-list/query/plan-compiler.class.js.map +1 -1
  52. package/dist/cjs/class/api/controller/get-list/query/runtime.class.d.ts +2 -0
  53. package/dist/cjs/class/api/controller/get-list/query/runtime.class.js +45 -2
  54. package/dist/cjs/class/api/controller/get-list/query/runtime.class.js.map +1 -1
  55. package/dist/cjs/class/api/controller/identity-plan-compiler.class.d.ts +14 -0
  56. package/dist/cjs/class/api/controller/identity-plan-compiler.class.js +150 -0
  57. package/dist/cjs/class/api/controller/identity-plan-compiler.class.js.map +1 -0
  58. package/dist/cjs/class/api/controller/index.d.ts +1 -0
  59. package/dist/cjs/class/api/controller/read-plan-compiler.class.d.ts +17 -0
  60. package/dist/cjs/class/api/controller/read-plan-compiler.class.js +240 -0
  61. package/dist/cjs/class/api/controller/read-plan-compiler.class.js.map +1 -0
  62. package/dist/cjs/class/api/function/context-storage.class.js +1 -0
  63. package/dist/cjs/class/api/function/context-storage.class.js.map +1 -1
  64. package/dist/cjs/class/api/function/custom-runtime.class.js +1 -0
  65. package/dist/cjs/class/api/function/custom-runtime.class.js.map +1 -1
  66. package/dist/cjs/class/api/function/step-runtime.class.js +1 -0
  67. package/dist/cjs/class/api/function/step-runtime.class.js.map +1 -1
  68. package/dist/cjs/class/api/function/transaction/exception/commit-unknown-outcome.class.js +1 -0
  69. package/dist/cjs/class/api/function/transaction/exception/commit-unknown-outcome.class.js.map +1 -1
  70. package/dist/cjs/class/api/function/transaction/exception/post-commit.class.js +1 -0
  71. package/dist/cjs/class/api/function/transaction/exception/post-commit.class.js.map +1 -1
  72. package/dist/cjs/class/api/function/transaction/exception/rollback.class.js +1 -0
  73. package/dist/cjs/class/api/function/transaction/exception/rollback.class.js.map +1 -1
  74. package/dist/cjs/class/api/function/transaction/lifecycle.class.js +1 -0
  75. package/dist/cjs/class/api/function/transaction/lifecycle.class.js.map +1 -1
  76. package/dist/cjs/class/api/function/transaction/registry.class.js +1 -0
  77. package/dist/cjs/class/api/function/transaction/registry.class.js.map +1 -1
  78. package/dist/cjs/class/api/function/transaction/runtime.class.js +1 -0
  79. package/dist/cjs/class/api/function/transaction/runtime.class.js.map +1 -1
  80. package/dist/cjs/class/api/function/transaction/scope.class.js +1 -0
  81. package/dist/cjs/class/api/function/transaction/scope.class.js.map +1 -1
  82. package/dist/cjs/class/api/route-runtime.class.d.ts +2 -0
  83. package/dist/cjs/class/api/route-runtime.class.js +202 -60
  84. package/dist/cjs/class/api/route-runtime.class.js.map +1 -1
  85. package/dist/cjs/class/api/subscriber/executor.class.js +1 -0
  86. package/dist/cjs/class/api/subscriber/executor.class.js.map +1 -1
  87. package/dist/cjs/class/api/subscriber/registry.class.d.ts +3 -3
  88. package/dist/cjs/class/api/subscriber/registry.class.js +3 -1
  89. package/dist/cjs/class/api/subscriber/registry.class.js.map +1 -1
  90. package/dist/cjs/class/api/subscriber/route-base.class.d.ts +2 -2
  91. package/dist/cjs/class/api/subscriber/route-base.class.js.map +1 -1
  92. package/dist/cjs/class/utility/dto/exception/details/foreign-key-violation.class.js +1 -0
  93. package/dist/cjs/class/utility/dto/exception/details/foreign-key-violation.class.js.map +1 -1
  94. package/dist/cjs/class/utility/dto/exception/details/unique-violation.class.js +1 -0
  95. package/dist/cjs/class/utility/dto/exception/details/unique-violation.class.js.map +1 -1
  96. package/dist/cjs/class/utility/dto/property/factory/number.class.js +1 -0
  97. package/dist/cjs/class/utility/dto/property/factory/number.class.js.map +1 -1
  98. package/dist/cjs/class/utility/dto/property/factory/relation.class.js +1 -0
  99. package/dist/cjs/class/utility/dto/property/factory/relation.class.js.map +1 -1
  100. package/dist/cjs/class/utility/dto/strategy/body.class.js +1 -0
  101. package/dist/cjs/class/utility/dto/strategy/body.class.js.map +1 -1
  102. package/dist/cjs/class/utility/dto/strategy/query.class.js +1 -0
  103. package/dist/cjs/class/utility/dto/strategy/query.class.js.map +1 -1
  104. package/dist/cjs/class/utility/dto/strategy/request.class.js +1 -0
  105. package/dist/cjs/class/utility/dto/strategy/request.class.js.map +1 -1
  106. package/dist/cjs/class/utility/dto/strategy/response.class.js +1 -0
  107. package/dist/cjs/class/utility/dto/strategy/response.class.js.map +1 -1
  108. package/dist/cjs/constant/api-controller-cursor.constant.d.ts +1 -0
  109. package/dist/cjs/constant/api-controller-cursor.constant.js +6 -0
  110. package/dist/cjs/constant/api-controller-cursor.constant.js.map +1 -0
  111. package/dist/cjs/constant/filter/operator-registry.constant.js +1 -0
  112. package/dist/cjs/constant/filter/operator-registry.constant.js.map +1 -1
  113. package/dist/cjs/constant/safe-object-property-names.constant.d.ts +1 -0
  114. package/dist/cjs/constant/safe-object-property-names.constant.js +6 -0
  115. package/dist/cjs/constant/safe-object-property-names.constant.js.map +1 -0
  116. package/dist/cjs/constant/utility/api/get-default-string-format-properties/customizer-map.constant.js +1 -0
  117. package/dist/cjs/constant/utility/api/get-default-string-format-properties/customizer-map.constant.js.map +1 -1
  118. package/dist/cjs/constant/utility/dto/constant.js +1 -0
  119. package/dist/cjs/constant/utility/dto/constant.js.map +1 -1
  120. package/dist/cjs/decorator/api/controller/decorator.js.map +1 -1
  121. package/dist/cjs/decorator/api/function/create.decorator.js +1 -0
  122. package/dist/cjs/decorator/api/function/create.decorator.js.map +1 -1
  123. package/dist/cjs/decorator/api/function/custom.decorator.js +1 -0
  124. package/dist/cjs/decorator/api/function/custom.decorator.js.map +1 -1
  125. package/dist/cjs/decorator/api/function/decorator.js +5 -0
  126. package/dist/cjs/decorator/api/function/decorator.js.map +1 -1
  127. package/dist/cjs/decorator/api/function/delete.decorator.js +19 -7
  128. package/dist/cjs/decorator/api/function/delete.decorator.js.map +1 -1
  129. package/dist/cjs/decorator/api/function/get/decorator.js +53 -19
  130. package/dist/cjs/decorator/api/function/get/decorator.js.map +1 -1
  131. package/dist/cjs/decorator/api/function/get/list.decorator.js +41 -27
  132. package/dist/cjs/decorator/api/function/get/list.decorator.js.map +1 -1
  133. package/dist/cjs/decorator/api/function/get/many.decorator.js +70 -19
  134. package/dist/cjs/decorator/api/function/get/many.decorator.js.map +1 -1
  135. package/dist/cjs/decorator/api/function/step.decorator.js +1 -0
  136. package/dist/cjs/decorator/api/function/step.decorator.js.map +1 -1
  137. package/dist/cjs/decorator/api/function/update.decorator.js +20 -1
  138. package/dist/cjs/decorator/api/function/update.decorator.js.map +1 -1
  139. package/dist/cjs/decorator/api/method.decorator.js +1 -0
  140. package/dist/cjs/decorator/api/method.decorator.js.map +1 -1
  141. package/dist/cjs/decorator/api/property/boolean.decorator.js +1 -0
  142. package/dist/cjs/decorator/api/property/boolean.decorator.js.map +1 -1
  143. package/dist/cjs/decorator/api/property/date.decorator.js +1 -0
  144. package/dist/cjs/decorator/api/property/date.decorator.js.map +1 -1
  145. package/dist/cjs/decorator/api/property/number.decorator.js +1 -0
  146. package/dist/cjs/decorator/api/property/number.decorator.js.map +1 -1
  147. package/dist/cjs/decorator/api/property/string.decorator.js +1 -0
  148. package/dist/cjs/decorator/api/property/string.decorator.js.map +1 -1
  149. package/dist/cjs/decorator/api/property/uuid.decorator.js +1 -0
  150. package/dist/cjs/decorator/api/property/uuid.decorator.js.map +1 -1
  151. package/dist/cjs/decorator/api/route-custom.decorator.js +1 -0
  152. package/dist/cjs/decorator/api/route-custom.decorator.js.map +1 -1
  153. package/dist/cjs/decorator/api/service/decorator.js +16 -0
  154. package/dist/cjs/decorator/api/service/decorator.js.map +1 -1
  155. package/dist/cjs/enum/decorator/api/controller/get-list/query/index.d.ts +1 -0
  156. package/dist/cjs/enum/decorator/api/controller/get-list/query/pagination-mode.enum.d.ts +4 -0
  157. package/dist/cjs/enum/decorator/api/controller/get-list/query/pagination-mode.enum.js +8 -0
  158. package/dist/cjs/enum/decorator/api/controller/get-list/query/pagination-mode.enum.js.map +1 -0
  159. package/dist/cjs/factory/api-controller.factory.d.ts +4 -4
  160. package/dist/cjs/factory/api-controller.factory.js +37 -11
  161. package/dist/cjs/factory/api-controller.factory.js.map +1 -1
  162. package/dist/cjs/index.js +15 -8
  163. package/dist/cjs/index.js.map +1 -1
  164. package/dist/cjs/interface/api/request-validator.interface.d.ts +3 -2
  165. package/dist/cjs/interface/class/api/authorization/policy/build-options.interface.d.ts +3 -2
  166. package/dist/cjs/interface/class/api/authorization/policy/registry.interface.d.ts +3 -2
  167. package/dist/cjs/interface/class/api/authorization/policy/subscriber/context/data.interface.d.ts +2 -1
  168. package/dist/cjs/interface/class/api/authorization/policy/subscriber/context/interface.d.ts +3 -2
  169. package/dist/cjs/interface/class/api/authorization/policy/subscriber/interface.d.ts +9 -8
  170. package/dist/cjs/interface/class/api/authorization/policy/subscriber/registration.interface.d.ts +3 -2
  171. package/dist/cjs/interface/class/api/authorization/request-metadata.interface.d.ts +3 -2
  172. package/dist/cjs/interface/class/api/controller/generated/get-many-session.interface.d.ts +11 -0
  173. package/dist/cjs/interface/class/api/controller/generated/index.d.ts +2 -0
  174. package/dist/cjs/interface/class/api/controller/generated/read-scope-entry.interface.d.ts +10 -0
  175. package/dist/cjs/interface/class/api/controller/get-list/query/plan/order/entry.interface.d.ts +5 -0
  176. package/dist/cjs/interface/class/api/controller/get-list/query/plan/order/index.d.ts +1 -0
  177. package/dist/cjs/interface/class/api/controller/get-list/query/plan/order/interface.d.ts +3 -0
  178. package/dist/cjs/interface/class/api/controller/get-list/query/plan/pagination.interface.d.ts +4 -0
  179. package/dist/cjs/interface/class/api/controller/get-list/query/runtime-result.interface.d.ts +2 -0
  180. package/dist/cjs/interface/class/api/controller/identity-plan.interface.d.ts +7 -0
  181. package/dist/cjs/interface/class/api/controller/index.d.ts +1 -0
  182. package/dist/cjs/interface/class/api/controller/read/index.d.ts +1 -0
  183. package/dist/cjs/interface/class/api/controller/read/plan/index.d.ts +2 -0
  184. package/dist/cjs/interface/class/api/controller/read/plan/interface.d.ts +7 -0
  185. package/dist/cjs/interface/class/api/controller/read/plan/parameter.interface.d.ts +4 -0
  186. package/dist/cjs/interface/class/api/route/runtime/generated/targets.interface.d.ts +2 -1
  187. package/dist/cjs/interface/class/api/subscriber/route/execution/context/data/extended.interface.d.ts +3 -2
  188. package/dist/cjs/interface/class/api/subscriber/route.interface.d.ts +7 -7
  189. package/dist/cjs/interface/decorator/api/controller/properties/route/base/index.d.ts +1 -0
  190. package/dist/cjs/interface/decorator/api/controller/properties/route/base/read/index.d.ts +3 -0
  191. package/dist/cjs/interface/decorator/api/controller/properties/route/base/read/interface.d.ts +4 -0
  192. package/dist/cjs/interface/decorator/api/controller/properties/route/base/read/scope-parameter.interface.d.ts +5 -0
  193. package/dist/cjs/interface/decorator/api/controller/properties/route/base/read/scope.interface.d.ts +4 -0
  194. package/dist/cjs/interface/decorator/api/controller/properties/route/base/request/index.d.ts +1 -0
  195. package/dist/cjs/interface/decorator/api/controller/properties/route/base/request/interface.d.ts +2 -2
  196. package/dist/cjs/interface/decorator/api/controller/properties/route/base/request/query/index.d.ts +1 -0
  197. package/dist/cjs/interface/decorator/api/controller/properties/route/base/request/query/interface.d.ts +4 -1
  198. package/dist/cjs/interface/decorator/api/controller/properties/route/base/request/query/order/entry.interface.d.ts +6 -0
  199. package/dist/cjs/interface/decorator/api/controller/properties/route/base/request/query/order/index.d.ts +1 -0
  200. package/dist/cjs/interface/decorator/api/controller/properties/route/base/request/query/order/interface.d.ts +3 -0
  201. package/dist/cjs/interface/decorator/api/controller/properties/route/base/request/query/pagination.interface.d.ts +4 -0
  202. package/dist/cjs/interface/decorator/api/controller/properties/route/base/request/read-parameters-target.interface.d.ts +5 -0
  203. package/dist/cjs/interface/decorator/api/controller/properties/route/base/request/target.interface.d.ts +3 -2
  204. package/dist/cjs/interface/decorator/api/controller/properties/route/identity.interface.d.ts +3 -0
  205. package/dist/cjs/interface/decorator/api/controller/properties/route/index.d.ts +1 -0
  206. package/dist/cjs/interface/decorator/api/get-list/cursor-response-result.interface.d.ts +5 -0
  207. package/dist/cjs/interface/decorator/api/get-list/index.d.ts +2 -0
  208. package/dist/cjs/interface/decorator/api/index.d.ts +1 -1
  209. package/dist/cjs/module/api/authorization.module.js +2 -1
  210. package/dist/cjs/module/api/authorization.module.js.map +1 -1
  211. package/dist/cjs/package.json +1 -0
  212. package/dist/cjs/type/api-request-transformer.type.d.ts +4 -2
  213. package/dist/cjs/type/class/api/authorization/policy/before/get/list-result.type.d.ts +2 -1
  214. package/dist/cjs/type/class/api/authorization/policy/context/before/get/list-context.type.d.ts +4 -3
  215. package/dist/cjs/type/class/api/authorization/policy/context/with-request-metadata.type.d.ts +4 -3
  216. package/dist/cjs/type/class/api/authorization/policy/hook/execution-result.type.d.ts +5 -0
  217. package/dist/cjs/type/class/api/authorization/policy/hook/result.type.d.ts +3 -2
  218. package/dist/cjs/type/class/api/authorization/policy/hook/type.d.ts +2 -1
  219. package/dist/cjs/type/class/api/authorization/rule/transform-payload.type.d.ts +2 -2
  220. package/dist/cjs/type/class/api/controller/generated/function.type.d.ts +1 -0
  221. package/dist/cjs/type/class/api/controller/generated/index.d.ts +2 -0
  222. package/dist/cjs/type/class/api/controller/generated/scope-function-type.type.d.ts +2 -0
  223. package/dist/cjs/type/class/api/controller/get-list/compiled/index.d.ts +3 -0
  224. package/dist/cjs/type/class/api/controller/get-list/compiled/order-field.type.d.ts +16 -0
  225. package/dist/cjs/type/class/api/controller/get-list/compiled/order.type.d.ts +6 -0
  226. package/dist/cjs/type/class/api/controller/get-list/compiled/plan.type.d.ts +8 -0
  227. package/dist/cjs/type/class/api/controller/get-list/cursor/execution-options.type.d.ts +18 -0
  228. package/dist/cjs/type/class/api/controller/get-list/cursor/index.d.ts +2 -0
  229. package/dist/cjs/type/class/api/controller/get-list/cursor/query-runtime-result.type.d.ts +8 -0
  230. package/dist/cjs/type/class/api/controller/get-list/index.d.ts +2 -0
  231. package/dist/cjs/type/class/api/controller/index.d.ts +1 -0
  232. package/dist/cjs/type/class/api/subscriber/route/after/get/list-context.type.d.ts +3 -2
  233. package/dist/cjs/type/class/api/subscriber/route/before/get/list-context.type.d.ts +5 -6
  234. package/dist/cjs/type/decorator/api/controller/get-list/index.d.ts +1 -0
  235. package/dist/cjs/type/decorator/api/controller/get-list/query/dto-contract.type.d.ts +1 -0
  236. package/dist/cjs/type/decorator/api/controller/get-list/query/request-target.type.d.ts +7 -0
  237. package/dist/cjs/type/decorator/api/controller/get-list/query/type.d.ts +22 -2
  238. package/dist/cjs/type/decorator/api/controller/get-list/response.type.d.ts +3 -0
  239. package/dist/cjs/type/decorator/api/controller/index.d.ts +1 -0
  240. package/dist/cjs/type/decorator/api/controller/properties/route/contract.type.d.ts +5 -0
  241. package/dist/cjs/type/decorator/api/controller/properties/route/identity/index.d.ts +2 -0
  242. package/dist/cjs/type/decorator/api/controller/properties/route/identity/with.type.d.ts +11 -0
  243. package/dist/cjs/type/decorator/api/controller/properties/route/identity/without.type.d.ts +3 -0
  244. package/dist/cjs/type/decorator/api/controller/properties/route/read/dto.type.d.ts +10 -0
  245. package/dist/cjs/type/decorator/api/controller/properties/route/read/index.d.ts +3 -0
  246. package/dist/cjs/type/decorator/api/controller/properties/route/read/with.type.d.ts +11 -0
  247. package/dist/cjs/type/decorator/api/controller/properties/route/read/without.type.d.ts +3 -0
  248. package/dist/cjs/type/decorator/api/controller/properties/route/without-parameters-dto.type.d.ts +4 -0
  249. package/dist/cjs/type/decorator/api/controller/properties-route.type.d.ts +3 -3
  250. package/dist/cjs/type/decorator/api/controller/read/direct-scalar-field.type.d.ts +2 -0
  251. package/dist/cjs/type/decorator/api/controller/read/index.d.ts +2 -0
  252. package/dist/cjs/type/decorator/api/controller/read/parameter-transformer/index.d.ts +1 -0
  253. package/dist/cjs/type/decorator/api/controller/read/parameter-transformer/type.d.ts +3 -0
  254. package/dist/cjs/type/decorator/api/controller/read/parameter-transformer/with-string-key.type.d.ts +5 -0
  255. package/dist/cjs/type/decorator/api/property/describe/properties/base/properties.type.d.ts +1 -1
  256. package/dist/cjs/type/factory/api/controller/method/map.type.d.ts +4 -5
  257. package/dist/cjs/type/factory/api/controller/target-methods.type.d.ts +3 -3
  258. package/dist/cjs/type/utility/api/controller/transform-data/is-validation-properties.type.d.ts +3 -2
  259. package/dist/cjs/type/utility/api/controller/transform-data/object-to-transform.type.d.ts +4 -3
  260. package/dist/cjs/type/utility/api/controller/transform-data/runtime-transformer.type.d.ts +3 -0
  261. package/dist/cjs/type/utility/api/controller/transform-data/targets.type.d.ts +17 -0
  262. package/dist/cjs/type/utility/dto/generate/allowed-combination.type.d.ts +1 -1
  263. package/dist/cjs/utility/api/controller/apply/decorators.utility.d.ts +18 -2
  264. package/dist/cjs/utility/api/controller/apply/decorators.utility.js +24 -2
  265. package/dist/cjs/utility/api/controller/apply/decorators.utility.js.map +1 -1
  266. package/dist/cjs/utility/api/controller/apply/metadata.utility.d.ts +18 -0
  267. package/dist/cjs/utility/api/controller/apply/metadata.utility.js +23 -3
  268. package/dist/cjs/utility/api/controller/apply/metadata.utility.js.map +1 -1
  269. package/dist/cjs/utility/api/controller/build-route-documentation.utility.js +1 -0
  270. package/dist/cjs/utility/api/controller/build-route-documentation.utility.js.map +1 -1
  271. package/dist/cjs/utility/api/controller/get/dto.utility.d.ts +17 -0
  272. package/dist/cjs/utility/api/controller/get/dto.utility.js +90 -11
  273. package/dist/cjs/utility/api/controller/get/dto.utility.js.map +1 -1
  274. package/dist/cjs/utility/api/controller/get-list/query/get-pagination-mode.utility.d.ts +8 -0
  275. package/dist/cjs/utility/api/controller/get-list/query/get-pagination-mode.utility.js +43 -0
  276. package/dist/cjs/utility/api/controller/get-list/query/get-pagination-mode.utility.js.map +1 -0
  277. package/dist/cjs/utility/api/controller/get-list/query/open-api/decorators.utility.js +1 -0
  278. package/dist/cjs/utility/api/controller/get-list/query/open-api/decorators.utility.js.map +1 -1
  279. package/dist/cjs/utility/api/controller/get-list/query/open-api/value-schema.utility.js +1 -0
  280. package/dist/cjs/utility/api/controller/get-list/query/open-api/value-schema.utility.js.map +1 -1
  281. package/dist/cjs/utility/api/controller/get-list/query/resolve-cursor-order-fields.utility.d.ts +7 -0
  282. package/dist/cjs/utility/api/controller/get-list/query/resolve-cursor-order-fields.utility.js +26 -0
  283. package/dist/cjs/utility/api/controller/get-list/query/resolve-cursor-order-fields.utility.js.map +1 -0
  284. package/dist/cjs/utility/api/controller/get-list/transform/filter.utility.js +1 -0
  285. package/dist/cjs/utility/api/controller/get-list/transform/filter.utility.js.map +1 -1
  286. package/dist/cjs/utility/api/controller/handle-request-relations.utility.d.ts +2 -1
  287. package/dist/cjs/utility/api/controller/handle-request-relations.utility.js +1 -0
  288. package/dist/cjs/utility/api/controller/handle-request-relations.utility.js.map +1 -1
  289. package/dist/cjs/utility/api/controller/identity/assert-plan.utility.d.ts +8 -0
  290. package/dist/cjs/utility/api/controller/identity/assert-plan.utility.js +18 -0
  291. package/dist/cjs/utility/api/controller/identity/assert-plan.utility.js.map +1 -0
  292. package/dist/cjs/utility/api/controller/identity/index.d.ts +2 -0
  293. package/dist/cjs/utility/api/controller/identity/plan/get.utility.d.ts +7 -0
  294. package/dist/cjs/utility/api/controller/identity/plan/get.utility.js +15 -0
  295. package/dist/cjs/utility/api/controller/identity/plan/get.utility.js.map +1 -0
  296. package/dist/cjs/utility/api/controller/identity/plan/index.d.ts +2 -0
  297. package/dist/cjs/utility/api/controller/identity/plan/metadata-key.constant.d.ts +1 -0
  298. package/dist/cjs/utility/api/controller/identity/plan/metadata-key.constant.js +6 -0
  299. package/dist/cjs/utility/api/controller/identity/plan/metadata-key.constant.js.map +1 -0
  300. package/dist/cjs/utility/api/controller/identity/plan/set.utility.d.ts +8 -0
  301. package/dist/cjs/utility/api/controller/identity/plan/set.utility.js +16 -0
  302. package/dist/cjs/utility/api/controller/identity/plan/set.utility.js.map +1 -0
  303. package/dist/cjs/utility/api/controller/read/assert-plan.utility.d.ts +8 -0
  304. package/dist/cjs/utility/api/controller/read/assert-plan.utility.js +18 -0
  305. package/dist/cjs/utility/api/controller/read/assert-plan.utility.js.map +1 -0
  306. package/dist/cjs/utility/api/controller/read/index.d.ts +3 -0
  307. package/dist/cjs/utility/api/controller/read/plan/get.utility.d.ts +8 -0
  308. package/dist/cjs/utility/api/controller/read/plan/get.utility.js +16 -0
  309. package/dist/cjs/utility/api/controller/read/plan/get.utility.js.map +1 -0
  310. package/dist/cjs/utility/api/controller/read/plan/index.d.ts +2 -0
  311. package/dist/cjs/utility/api/controller/read/plan/metadata-key.constant.d.ts +1 -0
  312. package/dist/cjs/utility/api/controller/read/plan/metadata-key.constant.js +6 -0
  313. package/dist/cjs/utility/api/controller/read/plan/metadata-key.constant.js.map +1 -0
  314. package/dist/cjs/utility/api/controller/read/plan/set.utility.d.ts +9 -0
  315. package/dist/cjs/utility/api/controller/read/plan/set.utility.js +17 -0
  316. package/dist/cjs/utility/api/controller/read/plan/set.utility.js.map +1 -0
  317. package/dist/cjs/utility/api/controller/read/scope.utility.d.ts +12 -0
  318. package/dist/cjs/utility/api/controller/read/scope.utility.js +38 -0
  319. package/dist/cjs/utility/api/controller/read/scope.utility.js.map +1 -0
  320. package/dist/cjs/utility/api/controller/transform-data.utility.js +13 -11
  321. package/dist/cjs/utility/api/controller/transform-data.utility.js.map +1 -1
  322. package/dist/cjs/utility/api/controller/validate-request.utility.d.ts +2 -1
  323. package/dist/cjs/utility/api/controller/validate-request.utility.js.map +1 -1
  324. package/dist/cjs/utility/api/controller/write/dto-swagger.utility.d.ts +17 -0
  325. package/dist/cjs/utility/api/controller/write/dto-swagger.utility.js +23 -4
  326. package/dist/cjs/utility/api/controller/write/dto-swagger.utility.js.map +1 -1
  327. package/dist/cjs/utility/api/function-transaction.utility.js +1 -0
  328. package/dist/cjs/utility/api/function-transaction.utility.js.map +1 -1
  329. package/dist/cjs/utility/api/route/apply-dto-metadata.utility.js +1 -0
  330. package/dist/cjs/utility/api/route/apply-dto-metadata.utility.js.map +1 -1
  331. package/dist/cjs/utility/api/route/response/project-relation.utility.js +1 -0
  332. package/dist/cjs/utility/api/route/response/project-relation.utility.js.map +1 -1
  333. package/dist/cjs/utility/authorization/scope-merge-where.utility.js +247 -130
  334. package/dist/cjs/utility/authorization/scope-merge-where.utility.js.map +1 -1
  335. package/dist/cjs/utility/dto/build-decorator.utility.js +1 -0
  336. package/dist/cjs/utility/dto/build-decorator.utility.js.map +1 -1
  337. package/dist/cjs/utility/dto/generate/core.utility.js +19 -7
  338. package/dist/cjs/utility/dto/generate/core.utility.js.map +1 -1
  339. package/dist/cjs/utility/dto/generate/dynamic.utility.js +1 -0
  340. package/dist/cjs/utility/dto/generate/dynamic.utility.js.map +1 -1
  341. package/dist/cjs/utility/dto/generate/exception.utility.js +1 -0
  342. package/dist/cjs/utility/dto/generate/exception.utility.js.map +1 -1
  343. package/dist/cjs/utility/dto/generate/filter-decorator.utility.js +1 -0
  344. package/dist/cjs/utility/dto/generate/filter-decorator.utility.js.map +1 -1
  345. package/dist/cjs/utility/dto/generate/get-list/cursor-response.utility.d.ts +10 -0
  346. package/dist/cjs/utility/dto/generate/get-list/cursor-response.utility.js +100 -0
  347. package/dist/cjs/utility/dto/generate/get-list/cursor-response.utility.js.map +1 -0
  348. package/dist/cjs/utility/dto/generate/get-list/index.d.ts +3 -0
  349. package/dist/cjs/utility/dto/generate/{get-list-query-properties.utility.d.ts → get-list/query-properties.utility.d.ts} +4 -4
  350. package/dist/cjs/utility/dto/generate/{get-list-query-properties.utility.js → get-list/query-properties.utility.js} +35 -34
  351. package/dist/cjs/utility/dto/generate/get-list/query-properties.utility.js.map +1 -0
  352. package/dist/cjs/utility/dto/generate/{get-list-response.utility.d.ts → get-list/response.utility.d.ts} +1 -1
  353. package/dist/cjs/utility/dto/generate/{get-list-response.utility.js → get-list/response.utility.js} +33 -32
  354. package/dist/cjs/utility/dto/generate/get-list/response.utility.js.map +1 -0
  355. package/dist/cjs/utility/dto/generate/identity-read-parameters.utility.d.ts +17 -0
  356. package/dist/cjs/utility/dto/generate/identity-read-parameters.utility.js +113 -0
  357. package/dist/cjs/utility/dto/generate/identity-read-parameters.utility.js.map +1 -0
  358. package/dist/cjs/utility/dto/generate/index.d.ts +1 -1
  359. package/dist/cjs/utility/dto/generate/read-parameters.utility.d.ts +17 -0
  360. package/dist/cjs/utility/dto/generate/read-parameters.utility.js +111 -0
  361. package/dist/cjs/utility/dto/generate/read-parameters.utility.js.map +1 -0
  362. package/dist/cjs/utility/dto/get/get-list-query-base-class.utility.d.ts +3 -2
  363. package/dist/cjs/utility/dto/get/get-list-query-base-class.utility.js +48 -15
  364. package/dist/cjs/utility/dto/get/get-list-query-base-class.utility.js.map +1 -1
  365. package/dist/cjs/utility/dto/handle-date-property.utility.js +1 -0
  366. package/dist/cjs/utility/dto/handle-date-property.utility.js.map +1 -1
  367. package/dist/cjs/utility/dto/is/property/infrastructure-timestamp.utility.js +1 -0
  368. package/dist/cjs/utility/dto/is/property/infrastructure-timestamp.utility.js.map +1 -1
  369. package/dist/cjs/utility/dto/is/property/should-be-marked.utility.js +1 -0
  370. package/dist/cjs/utility/dto/is/property/should-be-marked.utility.js.map +1 -1
  371. package/dist/cjs/utility/dto/is/should-be-generated.utility.js +1 -0
  372. package/dist/cjs/utility/dto/is/should-be-generated.utility.js.map +1 -1
  373. package/dist/cjs/utility/object-find-property-descriptor.utility.d.ts +7 -0
  374. package/dist/cjs/utility/object-find-property-descriptor.utility.js +22 -0
  375. package/dist/cjs/utility/object-find-property-descriptor.utility.js.map +1 -0
  376. package/dist/cjs/validator/at-most-one-of-listed-properties.validator.d.ts +5 -0
  377. package/dist/cjs/validator/at-most-one-of-listed-properties.validator.js +21 -0
  378. package/dist/cjs/validator/at-most-one-of-listed-properties.validator.js.map +1 -0
  379. package/dist/esm/class/api/authorization/guard.class.d.ts +1 -0
  380. package/dist/esm/class/api/authorization/guard.class.js +39 -3
  381. package/dist/esm/class/api/authorization/guard.class.js.map +1 -1
  382. package/dist/esm/class/api/authorization/iam/engine.class.d.ts +3 -2
  383. package/dist/esm/class/api/authorization/iam/engine.class.js.map +1 -1
  384. package/dist/esm/class/api/authorization/iam/query-planner.class.d.ts +3 -2
  385. package/dist/esm/class/api/authorization/iam/query-planner.class.js.map +1 -1
  386. package/dist/esm/class/api/authorization/policy/base.class.js +1 -0
  387. package/dist/esm/class/api/authorization/policy/base.class.js.map +1 -1
  388. package/dist/esm/class/api/authorization/policy/executor.class.d.ts +2 -1
  389. package/dist/esm/class/api/authorization/policy/executor.class.js.map +1 -1
  390. package/dist/esm/class/api/authorization/policy/registry.class.d.ts +3 -2
  391. package/dist/esm/class/api/authorization/policy/registry.class.js.map +1 -1
  392. package/dist/esm/class/api/authorization/runtime.class.d.ts +3 -2
  393. package/dist/esm/class/api/authorization/runtime.class.js +2 -1
  394. package/dist/esm/class/api/authorization/runtime.class.js.map +1 -1
  395. package/dist/esm/class/api/authorization/simulator.class.d.ts +3 -3
  396. package/dist/esm/class/api/authorization/simulator.class.js.map +1 -1
  397. package/dist/esm/class/api/controller/generated/function-capability.class.d.ts +12 -0
  398. package/dist/esm/class/api/controller/generated/function-capability.class.js +45 -0
  399. package/dist/esm/class/api/controller/generated/function-capability.class.js.map +1 -0
  400. package/dist/esm/class/api/controller/generated/get-many-contract.class.d.ts +25 -0
  401. package/dist/esm/class/api/controller/generated/get-many-contract.class.js +248 -0
  402. package/dist/esm/class/api/controller/generated/get-many-contract.class.js.map +1 -0
  403. package/dist/esm/class/api/controller/generated/index.d.ts +3 -0
  404. package/dist/esm/class/api/controller/generated/read-scope-storage.class.d.ts +19 -0
  405. package/dist/esm/class/api/controller/generated/read-scope-storage.class.js +118 -0
  406. package/dist/esm/class/api/controller/generated/read-scope-storage.class.js.map +1 -0
  407. package/dist/esm/class/api/controller/generated/relation-cache-contract.class.d.ts +11 -0
  408. package/dist/esm/class/api/controller/generated/relation-cache-contract.class.js +68 -0
  409. package/dist/esm/class/api/controller/generated/relation-cache-contract.class.js.map +1 -0
  410. package/dist/esm/class/api/controller/generated/scope-where-contract.class.d.ts +14 -0
  411. package/dist/esm/class/api/controller/generated/scope-where-contract.class.js +66 -0
  412. package/dist/esm/class/api/controller/generated/scope-where-contract.class.js.map +1 -0
  413. package/dist/esm/class/api/controller/generated/security-snapshot.class.d.ts +14 -0
  414. package/dist/esm/class/api/controller/generated/security-snapshot.class.js +163 -0
  415. package/dist/esm/class/api/controller/generated/security-snapshot.class.js.map +1 -0
  416. package/dist/esm/class/api/controller/generated/write-hydration-contract.class.d.ts +9 -0
  417. package/dist/esm/class/api/controller/generated/write-hydration-contract.class.js +67 -0
  418. package/dist/esm/class/api/controller/generated/write-hydration-contract.class.js.map +1 -0
  419. package/dist/esm/class/api/controller/get-list/cursor/data-source-contract.class.d.ts +32 -0
  420. package/dist/esm/class/api/controller/get-list/cursor/data-source-contract.class.js +422 -0
  421. package/dist/esm/class/api/controller/get-list/cursor/data-source-contract.class.js.map +1 -0
  422. package/dist/esm/class/api/controller/get-list/cursor/index.d.ts +2 -0
  423. package/dist/esm/class/api/controller/get-list/cursor/runtime.class.d.ts +28 -0
  424. package/dist/esm/class/api/controller/get-list/cursor/runtime.class.js +369 -0
  425. package/dist/esm/class/api/controller/get-list/cursor/runtime.class.js.map +1 -0
  426. package/dist/esm/class/api/controller/get-list/query/plan-compiler.class.d.ts +20 -0
  427. package/dist/esm/class/api/controller/get-list/query/plan-compiler.class.js +479 -41
  428. package/dist/esm/class/api/controller/get-list/query/plan-compiler.class.js.map +1 -1
  429. package/dist/esm/class/api/controller/get-list/query/runtime.class.d.ts +2 -0
  430. package/dist/esm/class/api/controller/get-list/query/runtime.class.js +45 -2
  431. package/dist/esm/class/api/controller/get-list/query/runtime.class.js.map +1 -1
  432. package/dist/esm/class/api/controller/identity-plan-compiler.class.d.ts +14 -0
  433. package/dist/esm/class/api/controller/identity-plan-compiler.class.js +148 -0
  434. package/dist/esm/class/api/controller/identity-plan-compiler.class.js.map +1 -0
  435. package/dist/esm/class/api/controller/index.d.ts +1 -0
  436. package/dist/esm/class/api/controller/read-plan-compiler.class.d.ts +17 -0
  437. package/dist/esm/class/api/controller/read-plan-compiler.class.js +238 -0
  438. package/dist/esm/class/api/controller/read-plan-compiler.class.js.map +1 -0
  439. package/dist/esm/class/api/function/context-storage.class.js +1 -0
  440. package/dist/esm/class/api/function/context-storage.class.js.map +1 -1
  441. package/dist/esm/class/api/function/custom-runtime.class.js +1 -0
  442. package/dist/esm/class/api/function/custom-runtime.class.js.map +1 -1
  443. package/dist/esm/class/api/function/step-runtime.class.js +1 -0
  444. package/dist/esm/class/api/function/step-runtime.class.js.map +1 -1
  445. package/dist/esm/class/api/function/transaction/exception/commit-unknown-outcome.class.js +1 -0
  446. package/dist/esm/class/api/function/transaction/exception/commit-unknown-outcome.class.js.map +1 -1
  447. package/dist/esm/class/api/function/transaction/exception/post-commit.class.js +1 -0
  448. package/dist/esm/class/api/function/transaction/exception/post-commit.class.js.map +1 -1
  449. package/dist/esm/class/api/function/transaction/exception/rollback.class.js +1 -0
  450. package/dist/esm/class/api/function/transaction/exception/rollback.class.js.map +1 -1
  451. package/dist/esm/class/api/function/transaction/lifecycle.class.js +1 -0
  452. package/dist/esm/class/api/function/transaction/lifecycle.class.js.map +1 -1
  453. package/dist/esm/class/api/function/transaction/registry.class.js +1 -0
  454. package/dist/esm/class/api/function/transaction/registry.class.js.map +1 -1
  455. package/dist/esm/class/api/function/transaction/runtime.class.js +1 -0
  456. package/dist/esm/class/api/function/transaction/runtime.class.js.map +1 -1
  457. package/dist/esm/class/api/function/transaction/scope.class.js +1 -0
  458. package/dist/esm/class/api/function/transaction/scope.class.js.map +1 -1
  459. package/dist/esm/class/api/route-runtime.class.d.ts +2 -0
  460. package/dist/esm/class/api/route-runtime.class.js +201 -59
  461. package/dist/esm/class/api/route-runtime.class.js.map +1 -1
  462. package/dist/esm/class/api/subscriber/executor.class.js +1 -0
  463. package/dist/esm/class/api/subscriber/executor.class.js.map +1 -1
  464. package/dist/esm/class/api/subscriber/registry.class.d.ts +3 -3
  465. package/dist/esm/class/api/subscriber/registry.class.js +3 -1
  466. package/dist/esm/class/api/subscriber/registry.class.js.map +1 -1
  467. package/dist/esm/class/api/subscriber/route-base.class.d.ts +2 -2
  468. package/dist/esm/class/api/subscriber/route-base.class.js.map +1 -1
  469. package/dist/esm/class/utility/dto/exception/details/foreign-key-violation.class.js +1 -0
  470. package/dist/esm/class/utility/dto/exception/details/foreign-key-violation.class.js.map +1 -1
  471. package/dist/esm/class/utility/dto/exception/details/unique-violation.class.js +1 -0
  472. package/dist/esm/class/utility/dto/exception/details/unique-violation.class.js.map +1 -1
  473. package/dist/esm/class/utility/dto/property/factory/number.class.js +1 -0
  474. package/dist/esm/class/utility/dto/property/factory/number.class.js.map +1 -1
  475. package/dist/esm/class/utility/dto/property/factory/relation.class.js +1 -0
  476. package/dist/esm/class/utility/dto/property/factory/relation.class.js.map +1 -1
  477. package/dist/esm/class/utility/dto/strategy/body.class.js +1 -0
  478. package/dist/esm/class/utility/dto/strategy/body.class.js.map +1 -1
  479. package/dist/esm/class/utility/dto/strategy/query.class.js +1 -0
  480. package/dist/esm/class/utility/dto/strategy/query.class.js.map +1 -1
  481. package/dist/esm/class/utility/dto/strategy/request.class.js +1 -0
  482. package/dist/esm/class/utility/dto/strategy/request.class.js.map +1 -1
  483. package/dist/esm/class/utility/dto/strategy/response.class.js +1 -0
  484. package/dist/esm/class/utility/dto/strategy/response.class.js.map +1 -1
  485. package/dist/esm/constant/api-controller-cursor.constant.d.ts +1 -0
  486. package/dist/esm/constant/api-controller-cursor.constant.js +4 -0
  487. package/dist/esm/constant/api-controller-cursor.constant.js.map +1 -0
  488. package/dist/esm/constant/filter/operator-registry.constant.js +1 -0
  489. package/dist/esm/constant/filter/operator-registry.constant.js.map +1 -1
  490. package/dist/esm/constant/safe-object-property-names.constant.d.ts +1 -0
  491. package/dist/esm/constant/safe-object-property-names.constant.js +4 -0
  492. package/dist/esm/constant/safe-object-property-names.constant.js.map +1 -0
  493. package/dist/esm/constant/utility/api/get-default-string-format-properties/customizer-map.constant.js +1 -0
  494. package/dist/esm/constant/utility/api/get-default-string-format-properties/customizer-map.constant.js.map +1 -1
  495. package/dist/esm/constant/utility/dto/constant.js +1 -0
  496. package/dist/esm/constant/utility/dto/constant.js.map +1 -1
  497. package/dist/esm/decorator/api/controller/decorator.js.map +1 -1
  498. package/dist/esm/decorator/api/function/create.decorator.js +1 -0
  499. package/dist/esm/decorator/api/function/create.decorator.js.map +1 -1
  500. package/dist/esm/decorator/api/function/custom.decorator.js +1 -0
  501. package/dist/esm/decorator/api/function/custom.decorator.js.map +1 -1
  502. package/dist/esm/decorator/api/function/decorator.js +5 -0
  503. package/dist/esm/decorator/api/function/decorator.js.map +1 -1
  504. package/dist/esm/decorator/api/function/delete.decorator.js +19 -7
  505. package/dist/esm/decorator/api/function/delete.decorator.js.map +1 -1
  506. package/dist/esm/decorator/api/function/get/decorator.js +53 -19
  507. package/dist/esm/decorator/api/function/get/decorator.js.map +1 -1
  508. package/dist/esm/decorator/api/function/get/list.decorator.js +41 -27
  509. package/dist/esm/decorator/api/function/get/list.decorator.js.map +1 -1
  510. package/dist/esm/decorator/api/function/get/many.decorator.js +70 -19
  511. package/dist/esm/decorator/api/function/get/many.decorator.js.map +1 -1
  512. package/dist/esm/decorator/api/function/step.decorator.js +1 -0
  513. package/dist/esm/decorator/api/function/step.decorator.js.map +1 -1
  514. package/dist/esm/decorator/api/function/update.decorator.js +20 -1
  515. package/dist/esm/decorator/api/function/update.decorator.js.map +1 -1
  516. package/dist/esm/decorator/api/method.decorator.js +1 -0
  517. package/dist/esm/decorator/api/method.decorator.js.map +1 -1
  518. package/dist/esm/decorator/api/property/boolean.decorator.js +1 -0
  519. package/dist/esm/decorator/api/property/boolean.decorator.js.map +1 -1
  520. package/dist/esm/decorator/api/property/date.decorator.js +1 -0
  521. package/dist/esm/decorator/api/property/date.decorator.js.map +1 -1
  522. package/dist/esm/decorator/api/property/number.decorator.js +1 -0
  523. package/dist/esm/decorator/api/property/number.decorator.js.map +1 -1
  524. package/dist/esm/decorator/api/property/string.decorator.js +1 -0
  525. package/dist/esm/decorator/api/property/string.decorator.js.map +1 -1
  526. package/dist/esm/decorator/api/property/uuid.decorator.js +1 -0
  527. package/dist/esm/decorator/api/property/uuid.decorator.js.map +1 -1
  528. package/dist/esm/decorator/api/route-custom.decorator.js +1 -0
  529. package/dist/esm/decorator/api/route-custom.decorator.js.map +1 -1
  530. package/dist/esm/decorator/api/service/decorator.js +16 -0
  531. package/dist/esm/decorator/api/service/decorator.js.map +1 -1
  532. package/dist/esm/enum/decorator/api/controller/get-list/query/index.d.ts +1 -0
  533. package/dist/esm/enum/decorator/api/controller/get-list/query/pagination-mode.enum.d.ts +4 -0
  534. package/dist/esm/enum/decorator/api/controller/get-list/query/pagination-mode.enum.js +8 -0
  535. package/dist/esm/enum/decorator/api/controller/get-list/query/pagination-mode.enum.js.map +1 -0
  536. package/dist/esm/factory/api-controller.factory.d.ts +4 -4
  537. package/dist/esm/factory/api-controller.factory.js +36 -10
  538. package/dist/esm/factory/api-controller.factory.js.map +1 -1
  539. package/dist/esm/index.js +7 -4
  540. package/dist/esm/index.js.map +1 -1
  541. package/dist/esm/interface/api/request-validator.interface.d.ts +3 -2
  542. package/dist/esm/interface/class/api/authorization/policy/build-options.interface.d.ts +3 -2
  543. package/dist/esm/interface/class/api/authorization/policy/registry.interface.d.ts +3 -2
  544. package/dist/esm/interface/class/api/authorization/policy/subscriber/context/data.interface.d.ts +2 -1
  545. package/dist/esm/interface/class/api/authorization/policy/subscriber/context/interface.d.ts +3 -2
  546. package/dist/esm/interface/class/api/authorization/policy/subscriber/interface.d.ts +9 -8
  547. package/dist/esm/interface/class/api/authorization/policy/subscriber/registration.interface.d.ts +3 -2
  548. package/dist/esm/interface/class/api/authorization/request-metadata.interface.d.ts +3 -2
  549. package/dist/esm/interface/class/api/controller/generated/get-many-session.interface.d.ts +11 -0
  550. package/dist/esm/interface/class/api/controller/generated/index.d.ts +2 -0
  551. package/dist/esm/interface/class/api/controller/generated/read-scope-entry.interface.d.ts +10 -0
  552. package/dist/esm/interface/class/api/controller/get-list/query/plan/order/entry.interface.d.ts +5 -0
  553. package/dist/esm/interface/class/api/controller/get-list/query/plan/order/index.d.ts +1 -0
  554. package/dist/esm/interface/class/api/controller/get-list/query/plan/order/interface.d.ts +3 -0
  555. package/dist/esm/interface/class/api/controller/get-list/query/plan/pagination.interface.d.ts +4 -0
  556. package/dist/esm/interface/class/api/controller/get-list/query/runtime-result.interface.d.ts +2 -0
  557. package/dist/esm/interface/class/api/controller/identity-plan.interface.d.ts +7 -0
  558. package/dist/esm/interface/class/api/controller/index.d.ts +1 -0
  559. package/dist/esm/interface/class/api/controller/read/index.d.ts +1 -0
  560. package/dist/esm/interface/class/api/controller/read/plan/index.d.ts +2 -0
  561. package/dist/esm/interface/class/api/controller/read/plan/interface.d.ts +7 -0
  562. package/dist/esm/interface/class/api/controller/read/plan/parameter.interface.d.ts +4 -0
  563. package/dist/esm/interface/class/api/route/runtime/generated/targets.interface.d.ts +2 -1
  564. package/dist/esm/interface/class/api/subscriber/route/execution/context/data/extended.interface.d.ts +3 -2
  565. package/dist/esm/interface/class/api/subscriber/route.interface.d.ts +7 -7
  566. package/dist/esm/interface/decorator/api/controller/properties/route/base/index.d.ts +1 -0
  567. package/dist/esm/interface/decorator/api/controller/properties/route/base/read/index.d.ts +3 -0
  568. package/dist/esm/interface/decorator/api/controller/properties/route/base/read/interface.d.ts +4 -0
  569. package/dist/esm/interface/decorator/api/controller/properties/route/base/read/scope-parameter.interface.d.ts +5 -0
  570. package/dist/esm/interface/decorator/api/controller/properties/route/base/read/scope.interface.d.ts +4 -0
  571. package/dist/esm/interface/decorator/api/controller/properties/route/base/request/index.d.ts +1 -0
  572. package/dist/esm/interface/decorator/api/controller/properties/route/base/request/interface.d.ts +2 -2
  573. package/dist/esm/interface/decorator/api/controller/properties/route/base/request/query/index.d.ts +1 -0
  574. package/dist/esm/interface/decorator/api/controller/properties/route/base/request/query/interface.d.ts +4 -1
  575. package/dist/esm/interface/decorator/api/controller/properties/route/base/request/query/order/entry.interface.d.ts +6 -0
  576. package/dist/esm/interface/decorator/api/controller/properties/route/base/request/query/order/index.d.ts +1 -0
  577. package/dist/esm/interface/decorator/api/controller/properties/route/base/request/query/order/interface.d.ts +3 -0
  578. package/dist/esm/interface/decorator/api/controller/properties/route/base/request/query/pagination.interface.d.ts +4 -0
  579. package/dist/esm/interface/decorator/api/controller/properties/route/base/request/read-parameters-target.interface.d.ts +5 -0
  580. package/dist/esm/interface/decorator/api/controller/properties/route/base/request/target.interface.d.ts +3 -2
  581. package/dist/esm/interface/decorator/api/controller/properties/route/identity.interface.d.ts +3 -0
  582. package/dist/esm/interface/decorator/api/controller/properties/route/index.d.ts +1 -0
  583. package/dist/esm/interface/decorator/api/get-list/cursor-response-result.interface.d.ts +5 -0
  584. package/dist/esm/interface/decorator/api/get-list/index.d.ts +2 -0
  585. package/dist/esm/interface/decorator/api/index.d.ts +1 -1
  586. package/dist/esm/module/api/authorization.module.js +2 -1
  587. package/dist/esm/module/api/authorization.module.js.map +1 -1
  588. package/dist/esm/package.json +1 -0
  589. package/dist/esm/type/api-request-transformer.type.d.ts +4 -2
  590. package/dist/esm/type/class/api/authorization/policy/before/get/list-result.type.d.ts +2 -1
  591. package/dist/esm/type/class/api/authorization/policy/context/before/get/list-context.type.d.ts +4 -3
  592. package/dist/esm/type/class/api/authorization/policy/context/with-request-metadata.type.d.ts +4 -3
  593. package/dist/esm/type/class/api/authorization/policy/hook/execution-result.type.d.ts +5 -0
  594. package/dist/esm/type/class/api/authorization/policy/hook/result.type.d.ts +3 -2
  595. package/dist/esm/type/class/api/authorization/policy/hook/type.d.ts +2 -1
  596. package/dist/esm/type/class/api/authorization/rule/transform-payload.type.d.ts +2 -2
  597. package/dist/esm/type/class/api/controller/generated/function.type.d.ts +1 -0
  598. package/dist/esm/type/class/api/controller/generated/index.d.ts +2 -0
  599. package/dist/esm/type/class/api/controller/generated/scope-function-type.type.d.ts +2 -0
  600. package/dist/esm/type/class/api/controller/get-list/compiled/index.d.ts +3 -0
  601. package/dist/esm/type/class/api/controller/get-list/compiled/order-field.type.d.ts +16 -0
  602. package/dist/esm/type/class/api/controller/get-list/compiled/order.type.d.ts +6 -0
  603. package/dist/esm/type/class/api/controller/get-list/compiled/plan.type.d.ts +8 -0
  604. package/dist/esm/type/class/api/controller/get-list/cursor/execution-options.type.d.ts +18 -0
  605. package/dist/esm/type/class/api/controller/get-list/cursor/index.d.ts +2 -0
  606. package/dist/esm/type/class/api/controller/get-list/cursor/query-runtime-result.type.d.ts +8 -0
  607. package/dist/esm/type/class/api/controller/get-list/index.d.ts +2 -0
  608. package/dist/esm/type/class/api/controller/index.d.ts +1 -0
  609. package/dist/esm/type/class/api/subscriber/route/after/get/list-context.type.d.ts +3 -2
  610. package/dist/esm/type/class/api/subscriber/route/before/get/list-context.type.d.ts +5 -6
  611. package/dist/esm/type/decorator/api/controller/get-list/index.d.ts +1 -0
  612. package/dist/esm/type/decorator/api/controller/get-list/query/dto-contract.type.d.ts +1 -0
  613. package/dist/esm/type/decorator/api/controller/get-list/query/request-target.type.d.ts +7 -0
  614. package/dist/esm/type/decorator/api/controller/get-list/query/type.d.ts +22 -2
  615. package/dist/esm/type/decorator/api/controller/get-list/response.type.d.ts +3 -0
  616. package/dist/esm/type/decorator/api/controller/index.d.ts +1 -0
  617. package/dist/esm/type/decorator/api/controller/properties/route/contract.type.d.ts +5 -0
  618. package/dist/esm/type/decorator/api/controller/properties/route/identity/index.d.ts +2 -0
  619. package/dist/esm/type/decorator/api/controller/properties/route/identity/with.type.d.ts +11 -0
  620. package/dist/esm/type/decorator/api/controller/properties/route/identity/without.type.d.ts +3 -0
  621. package/dist/esm/type/decorator/api/controller/properties/route/read/dto.type.d.ts +10 -0
  622. package/dist/esm/type/decorator/api/controller/properties/route/read/index.d.ts +3 -0
  623. package/dist/esm/type/decorator/api/controller/properties/route/read/with.type.d.ts +11 -0
  624. package/dist/esm/type/decorator/api/controller/properties/route/read/without.type.d.ts +3 -0
  625. package/dist/esm/type/decorator/api/controller/properties/route/without-parameters-dto.type.d.ts +4 -0
  626. package/dist/esm/type/decorator/api/controller/properties-route.type.d.ts +3 -3
  627. package/dist/esm/type/decorator/api/controller/read/direct-scalar-field.type.d.ts +2 -0
  628. package/dist/esm/type/decorator/api/controller/read/index.d.ts +2 -0
  629. package/dist/esm/type/decorator/api/controller/read/parameter-transformer/index.d.ts +1 -0
  630. package/dist/esm/type/decorator/api/controller/read/parameter-transformer/type.d.ts +3 -0
  631. package/dist/esm/type/decorator/api/controller/read/parameter-transformer/with-string-key.type.d.ts +5 -0
  632. package/dist/esm/type/decorator/api/property/describe/properties/base/properties.type.d.ts +1 -1
  633. package/dist/esm/type/factory/api/controller/method/map.type.d.ts +4 -5
  634. package/dist/esm/type/factory/api/controller/target-methods.type.d.ts +3 -3
  635. package/dist/esm/type/utility/api/controller/transform-data/is-validation-properties.type.d.ts +3 -2
  636. package/dist/esm/type/utility/api/controller/transform-data/object-to-transform.type.d.ts +4 -3
  637. package/dist/esm/type/utility/api/controller/transform-data/runtime-transformer.type.d.ts +3 -0
  638. package/dist/esm/type/utility/api/controller/transform-data/targets.type.d.ts +17 -0
  639. package/dist/esm/type/utility/dto/generate/allowed-combination.type.d.ts +1 -1
  640. package/dist/esm/utility/api/controller/apply/decorators.utility.d.ts +18 -2
  641. package/dist/esm/utility/api/controller/apply/decorators.utility.js +25 -4
  642. package/dist/esm/utility/api/controller/apply/decorators.utility.js.map +1 -1
  643. package/dist/esm/utility/api/controller/apply/metadata.utility.d.ts +18 -0
  644. package/dist/esm/utility/api/controller/apply/metadata.utility.js +24 -5
  645. package/dist/esm/utility/api/controller/apply/metadata.utility.js.map +1 -1
  646. package/dist/esm/utility/api/controller/build-route-documentation.utility.js +1 -0
  647. package/dist/esm/utility/api/controller/build-route-documentation.utility.js.map +1 -1
  648. package/dist/esm/utility/api/controller/get/dto.utility.d.ts +17 -0
  649. package/dist/esm/utility/api/controller/get/dto.utility.js +90 -12
  650. package/dist/esm/utility/api/controller/get/dto.utility.js.map +1 -1
  651. package/dist/esm/utility/api/controller/get-list/query/get-pagination-mode.utility.d.ts +8 -0
  652. package/dist/esm/utility/api/controller/get-list/query/get-pagination-mode.utility.js +41 -0
  653. package/dist/esm/utility/api/controller/get-list/query/get-pagination-mode.utility.js.map +1 -0
  654. package/dist/esm/utility/api/controller/get-list/query/open-api/decorators.utility.js +1 -0
  655. package/dist/esm/utility/api/controller/get-list/query/open-api/decorators.utility.js.map +1 -1
  656. package/dist/esm/utility/api/controller/get-list/query/open-api/value-schema.utility.js +1 -0
  657. package/dist/esm/utility/api/controller/get-list/query/open-api/value-schema.utility.js.map +1 -1
  658. package/dist/esm/utility/api/controller/get-list/query/resolve-cursor-order-fields.utility.d.ts +7 -0
  659. package/dist/esm/utility/api/controller/get-list/query/resolve-cursor-order-fields.utility.js +24 -0
  660. package/dist/esm/utility/api/controller/get-list/query/resolve-cursor-order-fields.utility.js.map +1 -0
  661. package/dist/esm/utility/api/controller/get-list/transform/filter.utility.js +1 -0
  662. package/dist/esm/utility/api/controller/get-list/transform/filter.utility.js.map +1 -1
  663. package/dist/esm/utility/api/controller/handle-request-relations.utility.d.ts +2 -1
  664. package/dist/esm/utility/api/controller/handle-request-relations.utility.js +1 -0
  665. package/dist/esm/utility/api/controller/handle-request-relations.utility.js.map +1 -1
  666. package/dist/esm/utility/api/controller/identity/assert-plan.utility.d.ts +8 -0
  667. package/dist/esm/utility/api/controller/identity/assert-plan.utility.js +16 -0
  668. package/dist/esm/utility/api/controller/identity/assert-plan.utility.js.map +1 -0
  669. package/dist/esm/utility/api/controller/identity/index.d.ts +2 -0
  670. package/dist/esm/utility/api/controller/identity/plan/get.utility.d.ts +7 -0
  671. package/dist/esm/utility/api/controller/identity/plan/get.utility.js +13 -0
  672. package/dist/esm/utility/api/controller/identity/plan/get.utility.js.map +1 -0
  673. package/dist/esm/utility/api/controller/identity/plan/index.d.ts +2 -0
  674. package/dist/esm/utility/api/controller/identity/plan/metadata-key.constant.d.ts +1 -0
  675. package/dist/esm/utility/api/controller/identity/plan/metadata-key.constant.js +4 -0
  676. package/dist/esm/utility/api/controller/identity/plan/metadata-key.constant.js.map +1 -0
  677. package/dist/esm/utility/api/controller/identity/plan/set.utility.d.ts +8 -0
  678. package/dist/esm/utility/api/controller/identity/plan/set.utility.js +14 -0
  679. package/dist/esm/utility/api/controller/identity/plan/set.utility.js.map +1 -0
  680. package/dist/esm/utility/api/controller/read/assert-plan.utility.d.ts +8 -0
  681. package/dist/esm/utility/api/controller/read/assert-plan.utility.js +16 -0
  682. package/dist/esm/utility/api/controller/read/assert-plan.utility.js.map +1 -0
  683. package/dist/esm/utility/api/controller/read/index.d.ts +3 -0
  684. package/dist/esm/utility/api/controller/read/plan/get.utility.d.ts +8 -0
  685. package/dist/esm/utility/api/controller/read/plan/get.utility.js +14 -0
  686. package/dist/esm/utility/api/controller/read/plan/get.utility.js.map +1 -0
  687. package/dist/esm/utility/api/controller/read/plan/index.d.ts +2 -0
  688. package/dist/esm/utility/api/controller/read/plan/metadata-key.constant.d.ts +1 -0
  689. package/dist/esm/utility/api/controller/read/plan/metadata-key.constant.js +4 -0
  690. package/dist/esm/utility/api/controller/read/plan/metadata-key.constant.js.map +1 -0
  691. package/dist/esm/utility/api/controller/read/plan/set.utility.d.ts +9 -0
  692. package/dist/esm/utility/api/controller/read/plan/set.utility.js +15 -0
  693. package/dist/esm/utility/api/controller/read/plan/set.utility.js.map +1 -0
  694. package/dist/esm/utility/api/controller/read/scope.utility.d.ts +12 -0
  695. package/dist/esm/utility/api/controller/read/scope.utility.js +36 -0
  696. package/dist/esm/utility/api/controller/read/scope.utility.js.map +1 -0
  697. package/dist/esm/utility/api/controller/transform-data.utility.js +13 -11
  698. package/dist/esm/utility/api/controller/transform-data.utility.js.map +1 -1
  699. package/dist/esm/utility/api/controller/validate-request.utility.d.ts +2 -1
  700. package/dist/esm/utility/api/controller/validate-request.utility.js.map +1 -1
  701. package/dist/esm/utility/api/controller/write/dto-swagger.utility.d.ts +17 -0
  702. package/dist/esm/utility/api/controller/write/dto-swagger.utility.js +24 -6
  703. package/dist/esm/utility/api/controller/write/dto-swagger.utility.js.map +1 -1
  704. package/dist/esm/utility/api/function-transaction.utility.js +1 -0
  705. package/dist/esm/utility/api/function-transaction.utility.js.map +1 -1
  706. package/dist/esm/utility/api/route/apply-dto-metadata.utility.js +1 -0
  707. package/dist/esm/utility/api/route/apply-dto-metadata.utility.js.map +1 -1
  708. package/dist/esm/utility/api/route/response/project-relation.utility.js +1 -0
  709. package/dist/esm/utility/api/route/response/project-relation.utility.js.map +1 -1
  710. package/dist/esm/utility/authorization/scope-merge-where.utility.js +248 -131
  711. package/dist/esm/utility/authorization/scope-merge-where.utility.js.map +1 -1
  712. package/dist/esm/utility/dto/build-decorator.utility.js +1 -0
  713. package/dist/esm/utility/dto/build-decorator.utility.js.map +1 -1
  714. package/dist/esm/utility/dto/generate/core.utility.js +18 -6
  715. package/dist/esm/utility/dto/generate/core.utility.js.map +1 -1
  716. package/dist/esm/utility/dto/generate/dynamic.utility.js +1 -0
  717. package/dist/esm/utility/dto/generate/dynamic.utility.js.map +1 -1
  718. package/dist/esm/utility/dto/generate/exception.utility.js +1 -0
  719. package/dist/esm/utility/dto/generate/exception.utility.js.map +1 -1
  720. package/dist/esm/utility/dto/generate/filter-decorator.utility.js +1 -0
  721. package/dist/esm/utility/dto/generate/filter-decorator.utility.js.map +1 -1
  722. package/dist/esm/utility/dto/generate/get-list/cursor-response.utility.d.ts +10 -0
  723. package/dist/esm/utility/dto/generate/get-list/cursor-response.utility.js +98 -0
  724. package/dist/esm/utility/dto/generate/get-list/cursor-response.utility.js.map +1 -0
  725. package/dist/esm/utility/dto/generate/get-list/index.d.ts +3 -0
  726. package/dist/esm/utility/dto/generate/{get-list-query-properties.utility.d.ts → get-list/query-properties.utility.d.ts} +4 -4
  727. package/dist/esm/utility/dto/generate/{get-list-query-properties.utility.js → get-list/query-properties.utility.js} +35 -34
  728. package/dist/esm/utility/dto/generate/get-list/query-properties.utility.js.map +1 -0
  729. package/dist/esm/utility/dto/generate/{get-list-response.utility.d.ts → get-list/response.utility.d.ts} +1 -1
  730. package/dist/esm/utility/dto/generate/{get-list-response.utility.js → get-list/response.utility.js} +33 -32
  731. package/dist/esm/utility/dto/generate/get-list/response.utility.js.map +1 -0
  732. package/dist/esm/utility/dto/generate/identity-read-parameters.utility.d.ts +17 -0
  733. package/dist/esm/utility/dto/generate/identity-read-parameters.utility.js +111 -0
  734. package/dist/esm/utility/dto/generate/identity-read-parameters.utility.js.map +1 -0
  735. package/dist/esm/utility/dto/generate/index.d.ts +1 -1
  736. package/dist/esm/utility/dto/generate/read-parameters.utility.d.ts +17 -0
  737. package/dist/esm/utility/dto/generate/read-parameters.utility.js +109 -0
  738. package/dist/esm/utility/dto/generate/read-parameters.utility.js.map +1 -0
  739. package/dist/esm/utility/dto/get/get-list-query-base-class.utility.d.ts +3 -2
  740. package/dist/esm/utility/dto/get/get-list-query-base-class.utility.js +48 -15
  741. package/dist/esm/utility/dto/get/get-list-query-base-class.utility.js.map +1 -1
  742. package/dist/esm/utility/dto/handle-date-property.utility.js +1 -0
  743. package/dist/esm/utility/dto/handle-date-property.utility.js.map +1 -1
  744. package/dist/esm/utility/dto/is/property/infrastructure-timestamp.utility.js +1 -0
  745. package/dist/esm/utility/dto/is/property/infrastructure-timestamp.utility.js.map +1 -1
  746. package/dist/esm/utility/dto/is/property/should-be-marked.utility.js +1 -0
  747. package/dist/esm/utility/dto/is/property/should-be-marked.utility.js.map +1 -1
  748. package/dist/esm/utility/dto/is/should-be-generated.utility.js +1 -0
  749. package/dist/esm/utility/dto/is/should-be-generated.utility.js.map +1 -1
  750. package/dist/esm/utility/object-find-property-descriptor.utility.d.ts +7 -0
  751. package/dist/esm/utility/object-find-property-descriptor.utility.js +20 -0
  752. package/dist/esm/utility/object-find-property-descriptor.utility.js.map +1 -0
  753. package/dist/esm/validator/at-most-one-of-listed-properties.validator.d.ts +5 -0
  754. package/dist/esm/validator/at-most-one-of-listed-properties.validator.js +21 -0
  755. package/dist/esm/validator/at-most-one-of-listed-properties.validator.js.map +1 -0
  756. package/package.json +2 -1
  757. package/dist/cjs/utility/dto/generate/get-list-query-properties.utility.js.map +0 -1
  758. package/dist/cjs/utility/dto/generate/get-list-response.utility.js.map +0 -1
  759. package/dist/esm/utility/dto/generate/get-list-query-properties.utility.js.map +0 -1
  760. package/dist/esm/utility/dto/generate/get-list-response.utility.js.map +0 -1
  761. /package/dist/cjs/interface/decorator/api/{get-list-response-result.interface.d.ts → get-list/response-result.interface.d.ts} +0 -0
  762. /package/dist/esm/interface/decorator/api/{get-list-response-result.interface.d.ts → get-list/response-result.interface.d.ts} +0 -0
@@ -1,13 +1,16 @@
1
1
  'use strict';
2
2
 
3
3
  var node_crypto = require('node:crypto');
4
+ var apiControllerCursor_constant = require('../../../../../constant/api-controller-cursor.constant.js');
4
5
  require('../../../../../constant/decorator/api/function.constant.js');
5
6
  var propertyDescribe_constant = require('../../../../../constant/decorator/api/property-describe.constant.js');
6
7
  var operatorRegistry_constant = require('../../../../../constant/filter/operator-registry.constant.js');
8
+ var safeObjectPropertyNames_constant = require('../../../../../constant/safe-object-property-names.constant.js');
7
9
  var generate_constant = require('../../../../../constant/utility/dto/generate.constant.js');
8
10
  require('../../../../../enum/decorator/api/action.enum.js');
9
11
  require('../../../../../enum/decorator/api/authentication-type.enum.js');
10
12
  var missingBehavior_enum = require('../../../../../enum/decorator/api/controller/get-list/query/filter/missing-behavior.enum.js');
13
+ var paginationMode_enum = require('../../../../../enum/decorator/api/controller/get-list/query/pagination-mode.enum.js');
11
14
  var unlistedFields_enum = require('../../../../../enum/decorator/api/controller/get-list/query/unlisted-fields.enum.js');
12
15
  require('../../../../../enum/decorator/api/controller/relation-reference-shape.enum.js');
13
16
  var target_enum = require('../../../../../enum/decorator/api/controller/request/target.enum.js');
@@ -29,64 +32,133 @@ require('../../../../../enum/decorator/api/property/date/identifier.enum.js');
29
32
  require('../../../../../enum/decorator/api/property/date/type.enum.js');
30
33
  var desribeType_enum = require('../../../../../enum/decorator/api/property/desribe-type.enum.js');
31
34
  var numberType_enum = require('../../../../../enum/decorator/api/property/number-type.enum.js');
32
- require('../../../../../enum/decorator/api/property/string-type.enum.js');
35
+ var stringType_enum = require('../../../../../enum/decorator/api/property/string-type.enum.js');
33
36
  require('../../../../../enum/decorator/api/route/subscriber-authorization-expectation.enum.js');
34
37
  var type_enum = require('../../../../../enum/decorator/api/route/type.enum.js');
35
38
  var operand_enum = require('../../../../../enum/filter/operand.enum.js');
36
39
  var operation_enum = require('../../../../../enum/filter/operation.enum.js');
37
- require('../../../../../enum/filter/order-direction.enum.js');
40
+ var orderDirection_enum = require('../../../../../enum/filter/order-direction.enum.js');
41
+ var manualDtoPropertyMetadataDecorator_enum = require('../../../../../enum/utility/manual-dto-property-metadata-decorator.enum.js');
38
42
  var enumValues_utility = require('../../../../../utility/api/controller/get-list/query/enum-values.utility.js');
43
+ var resolveCursorOrderFields_utility = require('../../../../../utility/api/controller/get-list/query/resolve-cursor-order-fields.utility.js');
39
44
  var filterOrderByFromEntity_utility = require('../../../../../utility/api/filter-order-by-from-entity.utility.js');
45
+ var decoratorConfig_utility = require('../../../../../utility/dto/get/decorator-config.utility.js');
40
46
  var shouldBeMarked_utility = require('../../../../../utility/dto/is/property/should-be-marked.utility.js');
47
+ var get_utility = require('../../../../../utility/dto/manual/property-metadata/get.utility.js');
41
48
  var exception_utility = require('../../../../../utility/error/exception.utility.js');
42
49
  var generateEntityInformation_utility = require('../../../../../utility/generate-entity-information.utility.js');
43
50
  var typeorm = require('typeorm');
44
51
 
52
+ const CURSOR_RESPONSE_PROPERTY_COUNT = 3;
53
+ const CURSOR_MAXIMUM_ARRAY_INDEX_PROPERTY = 4_294_967_294;
54
+ const CURSOR_BIGINT_COLUMN_TYPES = new Set(["bigint", "int8"]);
55
+ const CURSOR_BOOLEAN_COLUMN_TYPES = new Set(["bool", "boolean", "boolean-constructor"]);
56
+ const CURSOR_ENUM_INTEGER_COLUMN_TYPES = new Set(["int", "int2", "int4", "integer", "smallint"]);
57
+ const CURSOR_INTEGER_COLUMN_TYPES = new Set([...CURSOR_ENUM_INTEGER_COLUMN_TYPES, "number-constructor"]);
58
+ const CURSOR_NON_PERSISTED_COLUMN_MODES = new Set(["array", "treeChildrenCount", "virtual", "virtual-property"]);
59
+ const CURSOR_UUID_COLUMN_TYPES = new Set(["uuid"]);
45
60
  class ApiControllerGetListQueryPlanCompiler {
46
61
  static compile(controller, entity, entityMetadata, routeConfig) {
47
62
  const queryTarget = routeConfig.request?.[target_enum.EApiControllerRequestTarget.QUERY];
48
- if (!queryTarget?.filter && !queryTarget?.order) {
63
+ if (!queryTarget?.filter && !queryTarget?.order && !queryTarget?.pagination) {
49
64
  return undefined;
50
65
  }
51
66
  if (routeConfig.dto?.[dtoType_enum.EApiDtoType.QUERY]) {
52
67
  throw exception_utility.ErrorException("Generated GET_LIST query configuration cannot be combined with a manual QUERY DTO");
53
68
  }
54
69
  const currentGuard = routeConfig.security?.authentication?.guard;
55
- const filterBaseline = this.buildFilterBaseline(entityMetadata, currentGuard);
56
- const orderBaseline = this.buildOrderBaseline(entity, entityMetadata);
57
- const filter = queryTarget.filter ? this.compileFilter(queryTarget.filter, filterBaseline) : Object.freeze({ fields: filterBaseline, isLegacy: true });
58
- const order = queryTarget.order ? this.compileOrder(queryTarget.order, orderBaseline) : Object.freeze({ fields: orderBaseline, isLegacy: true });
70
+ const pagination = this.compilePagination(queryTarget.pagination);
71
+ const isCursor = pagination.mode === paginationMode_enum.EApiControllerGetListQueryPaginationMode.CURSOR;
72
+ const filterBaseline = this.buildFilterBaseline(entity, entityMetadata, currentGuard, isCursor);
73
+ const serverOrderBaseline = this.buildServerOrderBaseline(entity, entityMetadata, isCursor);
74
+ const orderBaseline = this.buildOrderBaseline(entity, entityMetadata, serverOrderBaseline, isCursor);
75
+ const filter = queryTarget.filter ? this.compileFilter(queryTarget.filter, filterBaseline, isCursor) : Object.freeze({ fields: filterBaseline, isLegacy: !isCursor, ...(isCursor ? { unlistedFields: unlistedFields_enum.EApiControllerGetListQueryUnlistedFields.INHERIT } : {}) });
76
+ const order = queryTarget.order ? this.compileOrder(queryTarget.order, orderBaseline, serverOrderBaseline, isCursor) : Object.freeze({ fields: orderBaseline, isLegacy: true, serverFields: serverOrderBaseline });
77
+ const cursorFields = isCursor ? resolveCursorOrderFields_utility.ApiControllerGetListQueryResolveCursorOrderFields(order) : Object.freeze([]);
78
+ if (isCursor) {
79
+ this.validateCursorPlan(entity, entityMetadata, order, cursorFields, routeConfig);
80
+ }
81
+ const normalizedOrder = {
82
+ fields: Object.values(order.fields).map((field) => ({
83
+ isEnabled: field.isEnabled,
84
+ ...(isCursor ? { metadata: this.createCursorOrderFieldFingerprint(field) } : {}),
85
+ path: field.path,
86
+ })),
87
+ isLegacy: order.isLegacy,
88
+ unlistedFields: order.unlistedFields,
89
+ };
90
+ if (queryTarget.order?.defaultOrder !== undefined) {
91
+ normalizedOrder.defaultOrder = order.defaultOrder;
92
+ }
93
+ if (queryTarget.order?.tieBreakers !== undefined) {
94
+ normalizedOrder.tieBreakers = order.tieBreakers;
95
+ }
96
+ if (isCursor) {
97
+ normalizedOrder.effectiveFields = cursorFields.map((path) => {
98
+ const field = order.serverFields[path];
99
+ if (!field) {
100
+ throw exception_utility.ErrorException(`CURSOR GET_LIST order field "${path}" is unavailable`);
101
+ }
102
+ return {
103
+ metadata: this.createCursorOrderFieldFingerprint(field),
104
+ path,
105
+ storage: {
106
+ hasTransformer: field.hasTransformer,
107
+ isArray: field.isColumnArray,
108
+ isSelected: field.isSelected,
109
+ isUnsigned: field.isUnsigned,
110
+ mode: field.columnMode,
111
+ precision: field.precision,
112
+ scale: field.scale,
113
+ type: field.columnType,
114
+ },
115
+ };
116
+ });
117
+ }
59
118
  const normalizedPlan = {
60
119
  filter: {
61
120
  fields: Object.values(filter.fields).map((field) => ({
62
121
  allowedOperations: field.allowedOperations,
63
122
  defaultCondition: field.defaultCondition,
64
123
  isEnabled: field.isEnabled,
124
+ ...(isCursor ? { metadata: this.createFieldFingerprint(field) } : {}),
65
125
  missingBehavior: field.missingBehavior,
66
126
  path: field.path,
67
127
  })),
68
128
  isLegacy: filter.isLegacy,
69
129
  unlistedFields: filter.unlistedFields,
70
130
  },
71
- order: {
72
- fields: Object.values(order.fields).map((field) => ({
73
- isEnabled: field.isEnabled,
74
- path: field.path,
75
- })),
76
- isLegacy: order.isLegacy,
77
- unlistedFields: order.unlistedFields,
78
- },
131
+ order: normalizedOrder,
79
132
  };
133
+ if (isCursor) {
134
+ normalizedPlan.pagination = pagination;
135
+ }
80
136
  const signature = node_crypto.createHash("sha256").update(JSON.stringify(normalizedPlan)).digest("hex");
81
- return Object.freeze({
82
- controllerName: controller.name || "AnonymousController",
137
+ const controllerName = controller.name || "AnonymousController";
138
+ const schemaName = `${controllerName}${entityMetadata.name ?? "UnknownResource"}GetListQuery${signature}DTO`;
139
+ if (!isCursor) {
140
+ const pageFields = Object.freeze(Object.fromEntries(Object.entries(order.fields).map(([path, field]) => [path, Object.freeze({ isEnabled: field.isEnabled, path: field.path })])));
141
+ const pageOrderProperties = {};
142
+ for (const [key, value] of Object.entries(order)) {
143
+ if (key === "serverFields") {
144
+ continue;
145
+ }
146
+ pageOrderProperties[key] = key === "fields" ? pageFields : value;
147
+ }
148
+ const pageOrder = Object.freeze(pageOrderProperties);
149
+ return Object.freeze({ controllerName, filter, order: pageOrder, schemaName, signature });
150
+ }
151
+ const plan = Object.freeze({
152
+ controllerName,
83
153
  filter,
84
154
  order,
85
- schemaName: `${controller.name || "AnonymousController"}${entityMetadata.name ?? "UnknownResource"}GetListQuery${signature}DTO`,
155
+ pagination: pagination,
156
+ schemaName,
86
157
  signature,
87
158
  });
159
+ return plan;
88
160
  }
89
- static buildFilterBaseline(entityMetadata, currentGuard) {
161
+ static buildFilterBaseline(entity, entityMetadata, currentGuard, isCursor) {
90
162
  const fields = {};
91
163
  for (const column of entityMetadata.columns) {
92
164
  const metadata = this.getPropertyMetadata(column);
@@ -98,7 +170,7 @@ class ApiControllerGetListQueryPlanCompiler {
98
170
  if (!shouldBeMarked_utility.DtoIsPropertyShouldBeMarked(type_enum.EApiRouteType.GET_LIST, dtoType_enum.EApiDtoType.QUERY, path, metadata, column.isPrimary, currentGuard)) {
99
171
  continue;
100
172
  }
101
- fields[path] = this.createFilterField(path, metadata, this.isColumnNullable(entityMetadata.name, path, metadata));
173
+ fields[path] = this.createFilterField(path, metadata, this.isColumnNullable(entity, entityMetadata.name, path, metadata, isCursor));
102
174
  continue;
103
175
  }
104
176
  if (!column.relation?.target || !this.isToOneRelation(column) || !shouldBeMarked_utility.DtoIsPropertyShouldBeMarked(type_enum.EApiRouteType.GET_LIST, dtoType_enum.EApiDtoType.QUERY, path, metadata, column.isPrimary, currentGuard)) {
@@ -121,22 +193,46 @@ class ApiControllerGetListQueryPlanCompiler {
121
193
  continue;
122
194
  }
123
195
  const nestedPath = `${path}.${nestedName}`;
124
- fields[nestedPath] = this.createFilterField(nestedPath, nestedMetadata, this.isColumnNullable(relationMetadata.name, nestedName, nestedMetadata));
196
+ fields[nestedPath] = this.createFilterField(nestedPath, nestedMetadata, this.isColumnNullable(column.relation.target, relationMetadata.name, nestedName, nestedMetadata, isCursor));
125
197
  }
126
198
  }
127
- return Object.freeze(this.sortRecord(fields));
199
+ return Object.freeze(this.sortRecord(fields, isCursor));
128
200
  }
129
- static buildOrderBaseline(entity, entityMetadata) {
201
+ static buildOrderBaseline(entity, entityMetadata, serverBaseline, isCursor) {
130
202
  const fields = {};
131
203
  const orderFields = filterOrderByFromEntity_utility.FilterOrderByFromEntity(entity, entityMetadata, type_enum.EApiRouteType.GET_LIST, dtoType_enum.EApiDtoType.QUERY);
132
204
  for (const path of Object.values(orderFields)
133
205
  .map(String)
134
- .toSorted((left, right) => left.localeCompare(right))) {
135
- fields[path] = Object.freeze({ isEnabled: true, path });
206
+ .toSorted((left, right) => this.compareStrings(left, right, isCursor))) {
207
+ const field = serverBaseline[path];
208
+ if (field) {
209
+ fields[path] = field;
210
+ }
136
211
  }
137
212
  return Object.freeze(fields);
138
213
  }
139
- static compileAllowedOperations(rawOperations, field) {
214
+ static buildServerOrderBaseline(entity, entityMetadata, isCursor) {
215
+ const fields = {};
216
+ for (const column of entityMetadata.columns) {
217
+ const metadata = this.getPropertyMetadata(column);
218
+ if (!column.relation && metadata && metadata.type !== desribeType_enum.EApiPropertyDescribeType.OBJECT && metadata.type !== desribeType_enum.EApiPropertyDescribeType.RELATION) {
219
+ const path = String(column.name);
220
+ const columnMetadata = this.findColumnMetadata(entity, entityMetadata.name, path);
221
+ fields[path] = this.createOrderField(path, metadata, this.isColumnNullable(entity, entityMetadata.name, path, metadata, isCursor), columnMetadata);
222
+ }
223
+ }
224
+ return Object.freeze(this.sortRecord(fields, isCursor));
225
+ }
226
+ static compareStrings(left, right, isCursor) {
227
+ if (!isCursor) {
228
+ return left.localeCompare(right);
229
+ }
230
+ if (left < right) {
231
+ return -1;
232
+ }
233
+ return left > right ? 1 : 0;
234
+ }
235
+ static compileAllowedOperations(rawOperations, field, isCursor) {
140
236
  if (!Array.isArray(rawOperations) || rawOperations.length === 0) {
141
237
  throw exception_utility.ErrorException(`Enabled GET_LIST filter field "${field.path}" requires non-empty allowedOperations`);
142
238
  }
@@ -154,7 +250,7 @@ class ApiControllerGetListQueryPlanCompiler {
154
250
  operations.push(operation);
155
251
  }
156
252
  }
157
- return Object.freeze(operations.toSorted((left, right) => left.localeCompare(right)));
253
+ return Object.freeze(operations.toSorted((left, right) => this.compareStrings(left, right, isCursor)));
158
254
  }
159
255
  static compileDefaultCondition(rawCondition, field, allowedOperations) {
160
256
  const condition = this.requireRecord(rawCondition, `GET_LIST filter defaultCondition for "${field.path}"`);
@@ -183,13 +279,13 @@ class ApiControllerGetListQueryPlanCompiler {
183
279
  }
184
280
  return Object.freeze({ operation, values: Object.freeze([...conditionValues]) });
185
281
  }
186
- static compileFilter(config, baseline) {
282
+ static compileFilter(config, baseline, isCursor) {
187
283
  const rawConfig = this.requireRecord(config, "GET_LIST filter");
188
284
  this.requireExactKeys(rawConfig, ["fields", "unlistedFields"], "GET_LIST filter");
189
285
  this.validateUnlistedFields(config.unlistedFields, "filter");
190
286
  const configuredFields = this.requireRecord(config.fields, "GET_LIST filter fields");
191
287
  const fields = config.unlistedFields === unlistedFields_enum.EApiControllerGetListQueryUnlistedFields.INHERIT ? { ...baseline } : {};
192
- for (const [path, rawField] of Object.entries(configuredFields).toSorted(([left], [right]) => left.localeCompare(right))) {
288
+ for (const [path, rawField] of Object.entries(configuredFields).toSorted(([left], [right]) => this.compareStrings(left, right, isCursor))) {
193
289
  const baselineField = baseline[path];
194
290
  if (!baselineField) {
195
291
  throw exception_utility.ErrorException(`GET_LIST filter field "${path}" is not an enabled direct scalar or one-hop to-one scalar path`);
@@ -205,7 +301,7 @@ class ApiControllerGetListQueryPlanCompiler {
205
301
  throw exception_utility.ErrorException(`GET_LIST filter field "${path}" must declare isEnabled`);
206
302
  }
207
303
  this.requireAllowedKeys(field, ["allowedOperations", "defaultCondition", "isEnabled", "missingBehavior"], `GET_LIST filter field "${path}"`);
208
- const allowedOperations = this.compileAllowedOperations(field.allowedOperations, baselineField);
304
+ const allowedOperations = this.compileAllowedOperations(field.allowedOperations, baselineField, isCursor);
209
305
  const missingBehavior = field.missingBehavior ?? missingBehavior_enum.EApiControllerGetListQueryFilterMissingBehavior.OMIT;
210
306
  if (!Object.values(missingBehavior_enum.EApiControllerGetListQueryFilterMissingBehavior).includes(missingBehavior)) {
211
307
  throw exception_utility.ErrorException(`GET_LIST filter field "${path}" has an invalid missingBehavior`);
@@ -226,18 +322,18 @@ class ApiControllerGetListQueryPlanCompiler {
226
322
  });
227
323
  }
228
324
  return Object.freeze({
229
- fields: Object.freeze(this.sortRecord(fields)),
325
+ fields: Object.freeze(this.sortRecord(fields, isCursor)),
230
326
  isLegacy: false,
231
327
  unlistedFields: config.unlistedFields,
232
328
  });
233
329
  }
234
- static compileOrder(config, baseline) {
330
+ static compileOrder(config, baseline, serverBaseline, isCursor) {
235
331
  const rawConfig = this.requireRecord(config, "GET_LIST order");
236
- this.requireExactKeys(rawConfig, ["fields", "unlistedFields"], "GET_LIST order");
332
+ this.requireAllowedKeys(rawConfig, ["defaultOrder", "fields", "tieBreakers", "unlistedFields"], "GET_LIST order");
237
333
  this.validateUnlistedFields(config.unlistedFields, "order");
238
334
  const configuredFields = this.requireRecord(config.fields, "GET_LIST order fields");
239
335
  const fields = config.unlistedFields === unlistedFields_enum.EApiControllerGetListQueryUnlistedFields.INHERIT ? { ...baseline } : {};
240
- for (const [path, rawField] of Object.entries(configuredFields).toSorted(([left], [right]) => left.localeCompare(right))) {
336
+ for (const [path, rawField] of Object.entries(configuredFields).toSorted(([left], [right]) => this.compareStrings(left, right, isCursor))) {
241
337
  const baselineField = baseline[path];
242
338
  if (!baselineField) {
243
339
  throw exception_utility.ErrorException(`GET_LIST order field "${path}" is not an enabled direct scalar path`);
@@ -249,41 +345,236 @@ class ApiControllerGetListQueryPlanCompiler {
249
345
  }
250
346
  fields[path] = Object.freeze({ ...baselineField, isEnabled: field.isEnabled });
251
347
  }
348
+ const defaultOrder = this.compileOrderEntries(config.defaultOrder, serverBaseline, "defaultOrder");
349
+ const tieBreakers = this.compileOrderEntries(config.tieBreakers, serverBaseline, "tieBreakers");
350
+ for (const defaultEntry of defaultOrder) {
351
+ const tieBreaker = tieBreakers.find((entry) => entry.field === defaultEntry.field);
352
+ if (tieBreaker && tieBreaker.direction !== defaultEntry.direction) {
353
+ throw exception_utility.ErrorException(`GET_LIST order field "${defaultEntry.field}" has conflicting directions across defaultOrder and tieBreakers`);
354
+ }
355
+ }
252
356
  return Object.freeze({
253
- fields: Object.freeze(this.sortRecord(fields)),
357
+ ...(config.defaultOrder === undefined ? {} : { defaultOrder }),
358
+ fields: Object.freeze(this.sortRecord(fields, isCursor)),
254
359
  isLegacy: false,
360
+ serverFields: serverBaseline,
361
+ ...(config.tieBreakers === undefined ? {} : { tieBreakers }),
255
362
  unlistedFields: config.unlistedFields,
256
363
  });
257
364
  }
365
+ static compileOrderEntries(rawEntries, baseline, context) {
366
+ if (rawEntries === undefined) {
367
+ return Object.freeze([]);
368
+ }
369
+ if (!Array.isArray(rawEntries)) {
370
+ throw exception_utility.ErrorException(`GET_LIST order ${context} must be an array`);
371
+ }
372
+ const entries = [];
373
+ const seenFields = new Set();
374
+ for (const [index, rawEntry] of rawEntries.entries()) {
375
+ const entry = this.requireRecord(rawEntry, `GET_LIST order ${context}[${index}]`);
376
+ this.requireExactKeys(entry, ["direction", "field"], `GET_LIST order ${context}[${index}]`);
377
+ const field = entry.field;
378
+ const direction = entry.direction;
379
+ if (typeof field !== "string" || !baseline[field]) {
380
+ throw exception_utility.ErrorException(`GET_LIST order ${context}[${index}] must target a described direct scalar entity field`);
381
+ }
382
+ if (direction !== orderDirection_enum.EFilterOrderDirection.ASC && direction !== orderDirection_enum.EFilterOrderDirection.DESC) {
383
+ throw exception_utility.ErrorException(`GET_LIST order ${context}[${index}] has an invalid direction`);
384
+ }
385
+ if (seenFields.has(field)) {
386
+ throw exception_utility.ErrorException(`GET_LIST order ${context} contains duplicate field "${field}"`);
387
+ }
388
+ seenFields.add(field);
389
+ entries.push(Object.freeze({ direction, field }));
390
+ }
391
+ return Object.freeze(entries);
392
+ }
393
+ static compilePagination(config) {
394
+ if (config === undefined) {
395
+ return Object.freeze({ mode: paginationMode_enum.EApiControllerGetListQueryPaginationMode.PAGE });
396
+ }
397
+ const rawConfig = this.requireRecord(config, "GET_LIST pagination");
398
+ this.requireExactKeys(rawConfig, ["mode"], "GET_LIST pagination");
399
+ if (!Object.values(paginationMode_enum.EApiControllerGetListQueryPaginationMode).includes(config.mode)) {
400
+ throw exception_utility.ErrorException("GET_LIST pagination mode must be PAGE or CURSOR");
401
+ }
402
+ return Object.freeze({ mode: config.mode });
403
+ }
404
+ static createCursorOrderFieldFingerprint(field) {
405
+ const fingerprint = { type: field.type };
406
+ if ("format" in field.metadata) {
407
+ fingerprint.format = field.metadata.format;
408
+ }
409
+ if ("enum" in field.metadata) {
410
+ const values = enumValues_utility.ApiControllerGetListQueryEnumValues(field.metadata.enum);
411
+ let enumKind = "mixed";
412
+ if (values.every((value) => typeof value === "number")) {
413
+ enumKind = "number";
414
+ }
415
+ else if (values.every((value) => typeof value === "string")) {
416
+ enumKind = "string";
417
+ }
418
+ fingerprint.enumKind = enumKind;
419
+ }
420
+ return fingerprint;
421
+ }
422
+ static createFieldFingerprint(field) {
423
+ const metadata = field.metadata;
424
+ const fingerprint = {
425
+ isNullable: field.isNullable,
426
+ type: field.type,
427
+ };
428
+ for (const key of ["format", "identifier", "isArray", "maximum", "maxLength", "minimum", "minLength", "multipleOf", "pattern"]) {
429
+ if (key in metadata) {
430
+ fingerprint[key] = metadata[key];
431
+ }
432
+ }
433
+ if ("enum" in field.metadata) {
434
+ fingerprint.enum = enumValues_utility.ApiControllerGetListQueryEnumValues(field.metadata.enum);
435
+ }
436
+ return fingerprint;
437
+ }
258
438
  static createFilterField(path, metadata, isNullable) {
259
439
  const allowedOperations = Object.freeze(Object.values(operation_enum.EFilterOperation).filter((operation) => {
260
440
  const descriptor = operatorRegistry_constant.FILTER_OPERATOR_REGISTRY_CONSTANT.OPERATORS[operation];
261
441
  return descriptor.kinds.includes(metadata.type) && (descriptor.operand !== operand_enum.EFilterOperand.NONE || isNullable);
262
442
  }));
263
- const planMetadata = "enum" in metadata ? { ...metadata, enum: Object.freeze({ ...metadata.enum }) } : { ...metadata };
443
+ const planMetadata = this.createPlanMetadata(metadata);
264
444
  return Object.freeze({
265
445
  allowedOperations,
266
446
  isEnabled: true,
267
447
  isNullable,
268
- metadata: Object.freeze(planMetadata),
448
+ metadata: planMetadata,
269
449
  missingBehavior: missingBehavior_enum.EApiControllerGetListQueryFilterMissingBehavior.OMIT,
270
450
  path,
271
451
  type: metadata.type,
272
452
  });
273
453
  }
454
+ static createOrderField(path, metadata, isNullable, columnMetadata) {
455
+ return Object.freeze({
456
+ columnMode: columnMetadata?.mode ?? "unknown",
457
+ columnType: this.normalizeColumnType(columnMetadata),
458
+ hasTransformer: columnMetadata?.options.transformer !== undefined,
459
+ isColumnArray: columnMetadata?.options.array === true,
460
+ isEnabled: true,
461
+ isNullable,
462
+ isSelected: columnMetadata?.options.select !== false,
463
+ isUnsigned: columnMetadata?.options.unsigned === true,
464
+ metadata: this.createPlanMetadata(metadata),
465
+ path,
466
+ ...(columnMetadata?.options.precision === undefined ? {} : { precision: columnMetadata.options.precision }),
467
+ ...(columnMetadata?.options.scale === undefined ? {} : { scale: columnMetadata.options.scale }),
468
+ type: metadata.type,
469
+ });
470
+ }
471
+ static createPlanMetadata(metadata) {
472
+ const planMetadata = "enum" in metadata ? { ...metadata, enum: Object.freeze({ ...metadata.enum }) } : { ...metadata };
473
+ return Object.freeze(planMetadata);
474
+ }
475
+ static findColumnMetadata(entity, entityName, propertyName) {
476
+ const targets = [];
477
+ if (typeof entity === "function") {
478
+ let current = entity;
479
+ while (typeof current === "function" && current !== Object) {
480
+ targets.push(current, current.name);
481
+ current = Object.getPrototypeOf(current);
482
+ }
483
+ }
484
+ else if (typeof entity.name === "string") {
485
+ targets.push(entity.name);
486
+ }
487
+ if (entityName && !targets.includes(entityName)) {
488
+ targets.push(entityName);
489
+ }
490
+ for (const expectedTarget of targets) {
491
+ const column = typeorm.getMetadataArgsStorage().columns.find(({ propertyName: currentPropertyName, target }) => currentPropertyName === propertyName && (target === expectedTarget || (typeof expectedTarget === "string" && typeof target !== "string" && target.name === expectedTarget)));
492
+ if (column) {
493
+ return column;
494
+ }
495
+ }
496
+ return undefined;
497
+ }
274
498
  static getPropertyMetadata(column) {
275
499
  return column.metadata?.[propertyDescribe_constant.PROPERTY_DESCRIBE_DECORATOR_API_CONSTANT.METADATA_KEY];
276
500
  }
277
- static isColumnNullable(entityName, propertyName, metadata) {
278
- const column = typeorm.getMetadataArgsStorage().columns.find(({ propertyName: currentPropertyName, target }) => currentPropertyName === propertyName && (typeof target === "string" ? target === entityName : target.name === entityName));
501
+ static hasAfterLoadListener(entity) {
502
+ if (typeof entity !== "function") {
503
+ return false;
504
+ }
505
+ const targets = new Set();
506
+ let current = entity;
507
+ while (typeof current === "function" && current !== Object) {
508
+ targets.add(current);
509
+ current = Object.getPrototypeOf(current);
510
+ }
511
+ return typeorm.getMetadataArgsStorage().entityListeners.some((listener) => listener.type === "after-load" && targets.has(listener.target));
512
+ }
513
+ static hasPropertyAccessor(entity, propertyName) {
514
+ if (typeof entity === "function") {
515
+ try {
516
+ const instance = Reflect.construct(entity, []);
517
+ const ownDescriptor = Object.getOwnPropertyDescriptor(instance, propertyName);
518
+ if (ownDescriptor && !("value" in ownDescriptor)) {
519
+ return true;
520
+ }
521
+ }
522
+ catch {
523
+ return true;
524
+ }
525
+ }
526
+ let current = typeof entity === "function" ? Reflect.get(entity, "prototype") : undefined;
527
+ while (current && typeof current === "object" && current !== Object.prototype) {
528
+ const descriptor = Object.getOwnPropertyDescriptor(current, propertyName);
529
+ if (descriptor && !("value" in descriptor)) {
530
+ return true;
531
+ }
532
+ current = Object.getPrototypeOf(current);
533
+ }
534
+ return false;
535
+ }
536
+ static isColumnNullable(entity, entityName, propertyName, metadata, isCursor) {
537
+ const column = isCursor ? this.findColumnMetadata(entity, entityName, propertyName) : typeorm.getMetadataArgsStorage().columns.find(({ propertyName: currentPropertyName, target }) => currentPropertyName === propertyName && (typeof target === "string" ? target === entityName : target.name === entityName));
279
538
  return column?.options.nullable === true || metadata.isNullable === true;
280
539
  }
540
+ static isCursorEnvelopeStringMetadata(metadata) {
541
+ if (metadata.decorator !== manualDtoPropertyMetadataDecorator_enum.EManualDtoPropertyMetadataDecorator.STRING || !this.isManualRawResponseProperty(metadata, false, true)) {
542
+ return false;
543
+ }
544
+ return metadata.properties.format === stringType_enum.EApiPropertyStringType.STRING && metadata.properties.minLength === 1 && metadata.properties.maxLength === apiControllerCursor_constant.API_CONTROLLER_CURSOR_TOKEN_MAX_LENGTH && metadata.properties.pattern === "/^[A-Za-z0-9_-]+$/";
545
+ }
281
546
  static isGloballyDisabled(metadata) {
282
547
  return metadata.properties?.[type_enum.EApiRouteType.GET_LIST]?.[dtoType_enum.EApiDtoType.QUERY]?.isEnabled === false;
283
548
  }
549
+ static isManualRawResponseProperty(metadata, isArray, isNullable) {
550
+ const properties = metadata.properties;
551
+ const hasExpectedArrayShape = isArray ? properties.isArray === true : properties.isArray !== true;
552
+ const hasExpectedNullability = isNullable ? properties.isNullable === true : properties.isNullable !== true;
553
+ return hasExpectedArrayShape && hasExpectedNullability && properties.isRequired === true && properties.isResponse === true && properties.isExpose !== false;
554
+ }
284
555
  static isToOneRelation(column) {
285
556
  return column.type === "many-to-one" || column.type === "one-to-one";
286
557
  }
558
+ static isUnsafeCursorFieldName(fieldName) {
559
+ const numericName = Number(fieldName);
560
+ return safeObjectPropertyNames_constant.UNSAFE_OBJECT_PROPERTY_NAMES_CONSTANT.has(fieldName) || (Number.isInteger(numericName) && numericName >= 0 && numericName <= CURSOR_MAXIMUM_ARRAY_INDEX_PROPERTY && String(numericName) === fieldName);
561
+ }
562
+ static normalizeColumnType(column) {
563
+ const columnType = column?.options.type;
564
+ if (columnType === Boolean) {
565
+ return "boolean-constructor";
566
+ }
567
+ if (columnType === Date) {
568
+ return "date-constructor";
569
+ }
570
+ if (columnType === Number) {
571
+ return "number-constructor";
572
+ }
573
+ if (columnType === String) {
574
+ return "string-constructor";
575
+ }
576
+ return typeof columnType === "string" ? columnType.trim().toLowerCase() : "unknown";
577
+ }
287
578
  static requireAllowedKeys(value, allowedKeys, context) {
288
579
  const invalidKey = Object.keys(value).find((key) => !allowedKeys.includes(key));
289
580
  if (invalidKey) {
@@ -303,8 +594,155 @@ class ApiControllerGetListQueryPlanCompiler {
303
594
  }
304
595
  return value;
305
596
  }
306
- static sortRecord(record) {
307
- return Object.fromEntries(Object.entries(record).toSorted(([left], [right]) => left.localeCompare(right)));
597
+ static sortRecord(record, isCursor) {
598
+ return Object.fromEntries(Object.entries(record).toSorted(([left], [right]) => this.compareStrings(left, right, isCursor)));
599
+ }
600
+ static validateCursorCustomResponseDto(routeConfig, fields, order) {
601
+ const responseDto = routeConfig.dto?.[dtoType_enum.EApiDtoType.RESPONSE];
602
+ if (!responseDto) {
603
+ return;
604
+ }
605
+ let itemType;
606
+ if (typeof responseDto === "function") {
607
+ const wrapperMetadata = get_utility.GetManualDtoPropertyMetadata(Reflect.get(responseDto, "prototype"));
608
+ const itemsMetadata = wrapperMetadata.get("items");
609
+ const nextCursorMetadata = wrapperMetadata.get("nextCursor");
610
+ const previousCursorMetadata = wrapperMetadata.get("previousCursor");
611
+ if (wrapperMetadata.size !== CURSOR_RESPONSE_PROPERTY_COUNT ||
612
+ itemsMetadata?.decorator !== manualDtoPropertyMetadataDecorator_enum.EManualDtoPropertyMetadataDecorator.OBJECT ||
613
+ nextCursorMetadata?.decorator !== manualDtoPropertyMetadataDecorator_enum.EManualDtoPropertyMetadataDecorator.STRING ||
614
+ previousCursorMetadata?.decorator !== manualDtoPropertyMetadataDecorator_enum.EManualDtoPropertyMetadataDecorator.STRING ||
615
+ !this.isManualRawResponseProperty(itemsMetadata, true, false) ||
616
+ Array.isArray(itemsMetadata.properties.type) ||
617
+ typeof itemsMetadata.properties.type !== "function" ||
618
+ itemsMetadata.properties.type === Object ||
619
+ !this.isCursorEnvelopeStringMetadata(nextCursorMetadata) ||
620
+ !this.isCursorEnvelopeStringMetadata(previousCursorMetadata) ||
621
+ this.hasPropertyAccessor(responseDto, "items") ||
622
+ this.hasPropertyAccessor(responseDto, "nextCursor") ||
623
+ this.hasPropertyAccessor(responseDto, "previousCursor")) {
624
+ throw exception_utility.ErrorException("CURSOR GET_LIST custom response DTO must prove the flat raw cursor envelope through Automator property metadata");
625
+ }
626
+ itemType = itemsMetadata.properties.type;
627
+ }
628
+ else if (typeof responseDto === "object" && "itemType" in responseDto && typeof responseDto.itemType === "function") {
629
+ itemType = responseDto.itemType;
630
+ }
631
+ if (!itemType) {
632
+ throw exception_utility.ErrorException("CURSOR GET_LIST custom response DTO must expose a statically provable item type");
633
+ }
634
+ this.validateCursorItemDto(itemType, fields, order);
635
+ }
636
+ static validateCursorItemDto(itemType, fields, order) {
637
+ const itemMetadata = get_utility.GetManualDtoPropertyMetadata(Reflect.get(itemType, "prototype"));
638
+ for (const fieldName of fields) {
639
+ const field = order.serverFields[fieldName];
640
+ const metadata = itemMetadata.get(fieldName);
641
+ const expectedDecorator = field && field.type !== desribeType_enum.EApiPropertyDescribeType.OBJECT && field.type !== desribeType_enum.EApiPropertyDescribeType.RELATION ? field.type : undefined;
642
+ const expectedFormat = field && "format" in field.metadata ? field.metadata.format : undefined;
643
+ const actualFormat = metadata && "format" in metadata.properties ? metadata.properties.format : undefined;
644
+ if (!field || !metadata || metadata.decorator !== expectedDecorator || !this.isManualRawResponseProperty(metadata, false, false) || actualFormat !== expectedFormat || this.hasPropertyAccessor(itemType, fieldName)) {
645
+ throw exception_utility.ErrorException(`CURSOR GET_LIST custom item DTO must raw-expose protected field "${fieldName}" through compatible Automator property metadata`);
646
+ }
647
+ }
648
+ }
649
+ static validateCursorPlan(entity, entityMetadata, order, cursorFields, routeConfig) {
650
+ const primaryColumns = entityMetadata.columns.filter((column) => column.isPrimary);
651
+ if (primaryColumns.length !== 1) {
652
+ throw exception_utility.ErrorException("CURSOR GET_LIST requires exactly one primary column");
653
+ }
654
+ if (order.isLegacy) {
655
+ throw exception_utility.ErrorException("CURSOR GET_LIST requires explicit order configuration");
656
+ }
657
+ if (this.hasAfterLoadListener(entity)) {
658
+ throw exception_utility.ErrorException("CURSOR GET_LIST entity cannot declare TypeORM after-load listeners");
659
+ }
660
+ const primaryField = String(primaryColumns[0]?.name);
661
+ const tieBreakers = order.tieBreakers ?? [];
662
+ const finalTieBreaker = tieBreakers.at(-1);
663
+ if (finalTieBreaker?.field !== primaryField) {
664
+ throw exception_utility.ErrorException(`CURSOR GET_LIST requires the sole primary field "${primaryField}" as the final explicit tie-breaker`);
665
+ }
666
+ if ((order.defaultOrder ?? []).some((entry) => entry.field === primaryField) || tieBreakers.slice(0, -1).some((entry) => entry.field === primaryField) || order.fields[primaryField]?.isEnabled === true) {
667
+ throw exception_utility.ErrorException(`CURSOR GET_LIST primary field "${primaryField}" may appear only as the final tie-breaker`);
668
+ }
669
+ const potentialFields = new Set(cursorFields);
670
+ for (const fieldName of potentialFields) {
671
+ const field = order.serverFields[fieldName];
672
+ if (this.isUnsafeCursorFieldName(fieldName)) {
673
+ throw exception_utility.ErrorException(`CURSOR GET_LIST order field "${fieldName}" is not a safe stable object property name`);
674
+ }
675
+ if (!field || field.isNullable || ("isArray" in field.metadata && field.metadata.isArray === true)) {
676
+ throw exception_utility.ErrorException(`CURSOR GET_LIST order field "${fieldName}" must be a described non-null direct scalar field`);
677
+ }
678
+ this.validateCursorStorageField(field);
679
+ if (this.hasPropertyAccessor(entity, fieldName)) {
680
+ throw exception_utility.ErrorException(`CURSOR GET_LIST order field "${fieldName}" must be a raw data property, not an accessor`);
681
+ }
682
+ this.validateCursorResponseExposure(entityMetadata, fieldName);
683
+ }
684
+ this.validateCursorCustomResponseDto(routeConfig, potentialFields, order);
685
+ }
686
+ static validateCursorResponseExposure(entityMetadata, fieldName) {
687
+ const column = entityMetadata.columns.find((candidate) => String(candidate.name) === fieldName);
688
+ const metadata = column ? this.getPropertyMetadata(column) : undefined;
689
+ if (!column || !metadata) {
690
+ throw exception_utility.ErrorException(`CURSOR GET_LIST order field "${fieldName}" must be raw-exposed in the generated response`);
691
+ }
692
+ const effectiveResponse = decoratorConfig_utility.DtoGetDecoratorConfig(type_enum.EApiRouteType.GET_LIST, metadata, dtoType_enum.EApiDtoType.RESPONSE);
693
+ if (effectiveResponse.guard || !shouldBeMarked_utility.DtoIsPropertyShouldBeMarked(type_enum.EApiRouteType.GET_LIST, dtoType_enum.EApiDtoType.RESPONSE, fieldName, metadata, column.isPrimary) || effectiveResponse.isEnabled === false || effectiveResponse.isResponse !== true || effectiveResponse.isExpose !== true) {
694
+ throw exception_utility.ErrorException(`CURSOR GET_LIST order field "${fieldName}" must be unconditionally raw-exposed in the generated response`);
695
+ }
696
+ }
697
+ static validateCursorStorageField(field) {
698
+ if (field.columnType === "unknown" || CURSOR_NON_PERSISTED_COLUMN_MODES.has(field.columnMode) || field.hasTransformer || field.isColumnArray || !field.isSelected) {
699
+ throw exception_utility.ErrorException(`CURSOR GET_LIST order field "${field.path}" must be a selected persisted column without a transformer`);
700
+ }
701
+ if (field.isUnsigned) {
702
+ throw exception_utility.ErrorException(`CURSOR GET_LIST order field "${field.path}" cannot use unsigned storage in PostgreSQL v1`);
703
+ }
704
+ if (field.type === desribeType_enum.EApiPropertyDescribeType.BOOLEAN) {
705
+ if (!CURSOR_BOOLEAN_COLUMN_TYPES.has(field.columnType)) {
706
+ throw exception_utility.ErrorException(`CURSOR GET_LIST boolean order field "${field.path}" requires PostgreSQL boolean storage`);
707
+ }
708
+ return;
709
+ }
710
+ if (field.type === desribeType_enum.EApiPropertyDescribeType.NUMBER) {
711
+ if (!("format" in field.metadata) || field.metadata.format !== numberType_enum.EApiPropertyNumberType.INTEGER) {
712
+ throw exception_utility.ErrorException(`CURSOR GET_LIST numeric order field "${field.path}" supports only INTEGER metadata in PostgreSQL v1`);
713
+ }
714
+ if (!CURSOR_INTEGER_COLUMN_TYPES.has(field.columnType)) {
715
+ throw exception_utility.ErrorException(`CURSOR GET_LIST integer order field "${field.path}" requires signed PostgreSQL int2/int4 storage`);
716
+ }
717
+ return;
718
+ }
719
+ if (field.type === desribeType_enum.EApiPropertyDescribeType.STRING) {
720
+ const format = "format" in field.metadata ? field.metadata.format : undefined;
721
+ if (format !== stringType_enum.EApiPropertyStringType.BIGINT_STRING) {
722
+ throw exception_utility.ErrorException(`CURSOR GET_LIST string order field "${field.path}" supports only BIGINT_STRING metadata in PostgreSQL v1`);
723
+ }
724
+ if (!CURSOR_BIGINT_COLUMN_TYPES.has(field.columnType)) {
725
+ throw exception_utility.ErrorException(`CURSOR GET_LIST bigint-string order field "${field.path}" requires signed PostgreSQL int8 storage`);
726
+ }
727
+ return;
728
+ }
729
+ if (field.type === desribeType_enum.EApiPropertyDescribeType.ENUM) {
730
+ const enumValues = enumValues_utility.ApiControllerGetListQueryEnumValues("enum" in field.metadata ? field.metadata.enum : {});
731
+ if (enumValues.length === 0 || !enumValues.every((value) => typeof value === "number" && Number.isSafeInteger(value))) {
732
+ throw exception_utility.ErrorException(`CURSOR GET_LIST enum order field "${field.path}" requires safe numeric values in PostgreSQL v1`);
733
+ }
734
+ if (!CURSOR_ENUM_INTEGER_COLUMN_TYPES.has(field.columnType)) {
735
+ throw exception_utility.ErrorException(`CURSOR GET_LIST enum order field "${field.path}" requires signed PostgreSQL int2/int4 storage`);
736
+ }
737
+ return;
738
+ }
739
+ if (field.type === desribeType_enum.EApiPropertyDescribeType.UUID) {
740
+ if (!CURSOR_UUID_COLUMN_TYPES.has(field.columnType)) {
741
+ throw exception_utility.ErrorException(`CURSOR GET_LIST UUID order field "${field.path}" requires native PostgreSQL UUID storage`);
742
+ }
743
+ return;
744
+ }
745
+ throw exception_utility.ErrorException(`CURSOR GET_LIST order field "${field.path}" is not supported by PostgreSQL CURSOR v1`);
308
746
  }
309
747
  static validateStaticValue(value, field) {
310
748
  let isValid;