@kravc/dos 1.12.6 → 2.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. package/README.md +31 -994
  2. package/dist/Component/Component.d.ts +43 -0
  3. package/dist/Component/Component.d.ts.map +1 -0
  4. package/dist/Component/Component.js +99 -0
  5. package/dist/Component/Component.js.map +1 -0
  6. package/dist/Component/index.d.ts +4 -0
  7. package/dist/Component/index.d.ts.map +1 -0
  8. package/dist/Component/index.js +10 -0
  9. package/dist/Component/index.js.map +1 -0
  10. package/dist/Context/Context.d.ts +86 -0
  11. package/dist/Context/Context.d.ts.map +1 -0
  12. package/dist/Context/Context.js +148 -0
  13. package/dist/Context/Context.js.map +1 -0
  14. package/dist/Context/Request.d.ts +35 -0
  15. package/dist/Context/Request.d.ts.map +1 -0
  16. package/dist/Context/Request.js +3 -0
  17. package/dist/Context/Request.js.map +1 -0
  18. package/dist/Context/__tests__/__helpers.d.ts +14 -0
  19. package/dist/Context/__tests__/__helpers.d.ts.map +1 -0
  20. package/dist/Context/__tests__/__helpers.js +69 -0
  21. package/dist/Context/__tests__/__helpers.js.map +1 -0
  22. package/dist/Context/getHttpMethod.d.ts +6 -0
  23. package/dist/Context/getHttpMethod.d.ts.map +1 -0
  24. package/dist/Context/getHttpMethod.js +16 -0
  25. package/dist/Context/getHttpMethod.js.map +1 -0
  26. package/dist/Context/getHttpPath.d.ts +6 -0
  27. package/dist/Context/getHttpPath.d.ts.map +1 -0
  28. package/dist/Context/getHttpPath.js +25 -0
  29. package/dist/Context/getHttpPath.js.map +1 -0
  30. package/dist/Context/getMutationParameters.d.ts +8 -0
  31. package/dist/Context/getMutationParameters.d.ts.map +1 -0
  32. package/dist/Context/getMutationParameters.js +25 -0
  33. package/dist/Context/getMutationParameters.js.map +1 -0
  34. package/dist/Context/getOperationId.d.ts +6 -0
  35. package/dist/Context/getOperationId.d.ts.map +1 -0
  36. package/dist/Context/getOperationId.js +21 -0
  37. package/dist/Context/getOperationId.js.map +1 -0
  38. package/dist/Context/getQueryParameters.d.ts +5 -0
  39. package/dist/Context/getQueryParameters.d.ts.map +1 -0
  40. package/dist/Context/getQueryParameters.js +33 -0
  41. package/dist/Context/getQueryParameters.js.map +1 -0
  42. package/dist/Context/index.d.ts +7 -0
  43. package/dist/Context/index.d.ts.map +1 -0
  44. package/dist/Context/index.js +12 -0
  45. package/dist/Context/index.js.map +1 -0
  46. package/dist/Context/withSafeAttributes.d.ts +23 -0
  47. package/dist/Context/withSafeAttributes.d.ts.map +1 -0
  48. package/dist/Context/withSafeAttributes.js +39 -0
  49. package/dist/Context/withSafeAttributes.js.map +1 -0
  50. package/dist/Document/Document.d.ts +114 -0
  51. package/dist/Document/Document.d.ts.map +1 -0
  52. package/dist/Document/Document.js +285 -0
  53. package/dist/Document/Document.js.map +1 -0
  54. package/dist/Document/MemoryDocument.d.ts +34 -0
  55. package/dist/Document/MemoryDocument.d.ts.map +1 -0
  56. package/dist/Document/MemoryDocument.js +103 -0
  57. package/dist/Document/MemoryDocument.js.map +1 -0
  58. package/dist/Document/__tests__/__helpers.d.ts +18 -0
  59. package/dist/Document/__tests__/__helpers.d.ts.map +1 -0
  60. package/dist/Document/__tests__/__helpers.js +28 -0
  61. package/dist/Document/__tests__/__helpers.js.map +1 -0
  62. package/dist/Document/index.d.ts +5 -0
  63. package/dist/Document/index.d.ts.map +1 -0
  64. package/dist/Document/index.js +11 -0
  65. package/dist/Document/index.js.map +1 -0
  66. package/dist/Operation/Operation.d.ts +95 -0
  67. package/dist/Operation/Operation.d.ts.map +1 -0
  68. package/dist/Operation/Operation.js +301 -0
  69. package/dist/Operation/Operation.js.map +1 -0
  70. package/dist/Operation/errors/AccessDeniedError.d.ts +22 -0
  71. package/dist/Operation/errors/AccessDeniedError.d.ts.map +1 -0
  72. package/dist/Operation/errors/AccessDeniedError.js +29 -0
  73. package/dist/Operation/errors/AccessDeniedError.js.map +1 -0
  74. package/dist/Operation/errors/CommonError.d.ts +30 -0
  75. package/dist/Operation/errors/CommonError.d.ts.map +1 -0
  76. package/dist/Operation/errors/CommonError.js +39 -0
  77. package/dist/Operation/errors/CommonError.js.map +1 -0
  78. package/dist/Operation/errors/DocumentExistsError.d.ts +27 -0
  79. package/dist/Operation/errors/DocumentExistsError.d.ts.map +1 -0
  80. package/dist/Operation/errors/DocumentExistsError.js +35 -0
  81. package/dist/Operation/errors/DocumentExistsError.js.map +1 -0
  82. package/dist/Operation/errors/DocumentNotFoundError.d.ts +28 -0
  83. package/dist/Operation/errors/DocumentNotFoundError.d.ts.map +1 -0
  84. package/dist/Operation/errors/DocumentNotFoundError.js +36 -0
  85. package/dist/Operation/errors/DocumentNotFoundError.js.map +1 -0
  86. package/dist/Operation/errors/InvalidParametersError.d.ts +27 -0
  87. package/dist/Operation/errors/InvalidParametersError.d.ts.map +1 -0
  88. package/dist/Operation/errors/InvalidParametersError.js +34 -0
  89. package/dist/Operation/errors/InvalidParametersError.js.map +1 -0
  90. package/dist/Operation/errors/UnauthorizedError.d.ts +25 -0
  91. package/dist/Operation/errors/UnauthorizedError.d.ts.map +1 -0
  92. package/dist/Operation/errors/UnauthorizedError.js +32 -0
  93. package/dist/Operation/errors/UnauthorizedError.js.map +1 -0
  94. package/dist/Operation/errors/UnprocessibleConditionError.d.ts +29 -0
  95. package/dist/Operation/errors/UnprocessibleConditionError.d.ts.map +1 -0
  96. package/dist/Operation/errors/UnprocessibleConditionError.js +36 -0
  97. package/dist/Operation/errors/UnprocessibleConditionError.js.map +1 -0
  98. package/dist/Operation/errors/index.d.ts +9 -0
  99. package/dist/Operation/errors/index.d.ts.map +1 -0
  100. package/dist/Operation/errors/index.js +21 -0
  101. package/dist/Operation/errors/index.js.map +1 -0
  102. package/dist/Operation/helpers/index.d.ts +4 -0
  103. package/dist/Operation/helpers/index.d.ts.map +1 -0
  104. package/dist/Operation/helpers/index.js +9 -0
  105. package/dist/Operation/helpers/index.js.map +1 -0
  106. package/dist/Operation/helpers/withActivity.d.ts +16 -0
  107. package/dist/Operation/helpers/withActivity.d.ts.map +1 -0
  108. package/dist/Operation/helpers/withActivity.js +23 -0
  109. package/dist/Operation/helpers/withActivity.js.map +1 -0
  110. package/dist/Operation/index.d.ts +14 -0
  111. package/dist/Operation/index.d.ts.map +1 -0
  112. package/dist/Operation/index.js +40 -0
  113. package/dist/Operation/index.js.map +1 -0
  114. package/dist/Operation/operations/Create.d.ts +5 -0
  115. package/dist/Operation/operations/Create.d.ts.map +1 -0
  116. package/dist/Operation/operations/Create.js +44 -0
  117. package/dist/Operation/operations/Create.js.map +1 -0
  118. package/dist/Operation/operations/Delete.d.ts +5 -0
  119. package/dist/Operation/operations/Delete.d.ts.map +1 -0
  120. package/dist/Operation/operations/Delete.js +58 -0
  121. package/dist/Operation/operations/Delete.js.map +1 -0
  122. package/dist/Operation/operations/Index.d.ts +11 -0
  123. package/dist/Operation/operations/Index.d.ts.map +1 -0
  124. package/dist/Operation/operations/Index.js +128 -0
  125. package/dist/Operation/operations/Index.js.map +1 -0
  126. package/dist/Operation/operations/List.d.ts +5 -0
  127. package/dist/Operation/operations/List.d.ts.map +1 -0
  128. package/dist/Operation/operations/List.js +48 -0
  129. package/dist/Operation/operations/List.js.map +1 -0
  130. package/dist/Operation/operations/Read.d.ts +5 -0
  131. package/dist/Operation/operations/Read.d.ts.map +1 -0
  132. package/dist/Operation/operations/Read.js +50 -0
  133. package/dist/Operation/operations/Read.js.map +1 -0
  134. package/dist/Operation/operations/Update.d.ts +5 -0
  135. package/dist/Operation/operations/Update.d.ts.map +1 -0
  136. package/dist/Operation/operations/Update.js +54 -0
  137. package/dist/Operation/operations/Update.js.map +1 -0
  138. package/dist/Operation/security/JwtAuthorization.d.ts +67 -0
  139. package/dist/Operation/security/JwtAuthorization.d.ts.map +1 -0
  140. package/dist/Operation/security/JwtAuthorization.js +148 -0
  141. package/dist/Operation/security/JwtAuthorization.js.map +1 -0
  142. package/dist/Operation/security/LambdaAuthorization.d.ts +30 -0
  143. package/dist/Operation/security/LambdaAuthorization.d.ts.map +1 -0
  144. package/dist/Operation/security/LambdaAuthorization.js +77 -0
  145. package/dist/Operation/security/LambdaAuthorization.js.map +1 -0
  146. package/dist/Operation/security/index.d.ts +8 -0
  147. package/dist/Operation/security/index.d.ts.map +1 -0
  148. package/dist/Operation/security/index.js +17 -0
  149. package/dist/Operation/security/index.js.map +1 -0
  150. package/dist/Operation/security/systemAuthorization.d.ts +5 -0
  151. package/dist/Operation/security/systemAuthorization.d.ts.map +1 -0
  152. package/dist/Operation/security/systemAuthorization.js +24 -0
  153. package/dist/Operation/security/systemAuthorization.js.map +1 -0
  154. package/dist/Operation/security/userAuthorization.d.ts +11 -0
  155. package/dist/Operation/security/userAuthorization.d.ts.map +1 -0
  156. package/dist/Operation/security/userAuthorization.js +36 -0
  157. package/dist/Operation/security/userAuthorization.js.map +1 -0
  158. package/dist/Operation/security/verifyToken.d.ts +6 -0
  159. package/dist/Operation/security/verifyToken.d.ts.map +1 -0
  160. package/dist/Operation/security/verifyToken.js +15 -0
  161. package/dist/Operation/security/verifyToken.js.map +1 -0
  162. package/dist/Service/Service.d.ts +62 -0
  163. package/dist/Service/Service.d.ts.map +1 -0
  164. package/dist/Service/Service.js +213 -0
  165. package/dist/Service/Service.js.map +1 -0
  166. package/dist/Service/authorize.d.ts +26 -0
  167. package/dist/Service/authorize.d.ts.map +1 -0
  168. package/dist/Service/authorize.js +40 -0
  169. package/dist/Service/authorize.js.map +1 -0
  170. package/dist/Service/errors/InvalidInputError.d.ts +29 -0
  171. package/dist/Service/errors/InvalidInputError.d.ts.map +1 -0
  172. package/dist/Service/errors/InvalidInputError.js +36 -0
  173. package/dist/Service/errors/InvalidInputError.js.map +1 -0
  174. package/dist/Service/errors/InvalidOutputError.d.ts +29 -0
  175. package/dist/Service/errors/InvalidOutputError.d.ts.map +1 -0
  176. package/dist/Service/errors/InvalidOutputError.js +36 -0
  177. package/dist/Service/errors/InvalidOutputError.js.map +1 -0
  178. package/dist/Service/errors/OperationError.d.ts +30 -0
  179. package/dist/Service/errors/OperationError.d.ts.map +1 -0
  180. package/dist/Service/errors/OperationError.js +61 -0
  181. package/dist/Service/errors/OperationError.js.map +1 -0
  182. package/dist/Service/errors/OperationNotFoundError.d.ts +38 -0
  183. package/dist/Service/errors/OperationNotFoundError.d.ts.map +1 -0
  184. package/dist/Service/errors/OperationNotFoundError.js +45 -0
  185. package/dist/Service/errors/OperationNotFoundError.js.map +1 -0
  186. package/dist/Service/errors/index.d.ts +8 -0
  187. package/dist/Service/errors/index.d.ts.map +1 -0
  188. package/dist/Service/errors/index.js +15 -0
  189. package/dist/Service/errors/index.js.map +1 -0
  190. package/dist/Service/errors/logOperationError.d.ts +35 -0
  191. package/dist/Service/errors/logOperationError.d.ts.map +1 -0
  192. package/dist/Service/errors/logOperationError.js +47 -0
  193. package/dist/Service/errors/logOperationError.js.map +1 -0
  194. package/dist/Service/errors/maskSecrets.d.ts +13 -0
  195. package/dist/Service/errors/maskSecrets.d.ts.map +1 -0
  196. package/dist/Service/errors/maskSecrets.js +57 -0
  197. package/dist/Service/errors/maskSecrets.js.map +1 -0
  198. package/dist/Service/index.d.ts +5 -0
  199. package/dist/Service/index.d.ts.map +1 -0
  200. package/dist/Service/index.js +25 -0
  201. package/dist/Service/index.js.map +1 -0
  202. package/dist/Service/logRequest.d.ts +5 -0
  203. package/dist/Service/logRequest.d.ts.map +1 -0
  204. package/dist/Service/logRequest.js +26 -0
  205. package/dist/Service/logRequest.js.map +1 -0
  206. package/dist/Service/spec/createSpec.d.ts +7 -0
  207. package/dist/Service/spec/createSpec.d.ts.map +1 -0
  208. package/dist/Service/spec/createSpec.js +56 -0
  209. package/dist/Service/spec/createSpec.js.map +1 -0
  210. package/dist/Service/spec/getErrorResponseDescription.d.ts +8 -0
  211. package/dist/Service/spec/getErrorResponseDescription.d.ts.map +1 -0
  212. package/dist/Service/spec/getErrorResponseDescription.js +15 -0
  213. package/dist/Service/spec/getErrorResponseDescription.js.map +1 -0
  214. package/dist/Service/spec/getHttpMethod.d.ts +4 -0
  215. package/dist/Service/spec/getHttpMethod.d.ts.map +1 -0
  216. package/dist/Service/spec/getHttpMethod.js +21 -0
  217. package/dist/Service/spec/getHttpMethod.js.map +1 -0
  218. package/dist/Service/spec/getOperation.d.ts +6 -0
  219. package/dist/Service/spec/getOperation.d.ts.map +1 -0
  220. package/dist/Service/spec/getOperation.js +71 -0
  221. package/dist/Service/spec/getOperation.js.map +1 -0
  222. package/dist/Service/spec/getOperationParameters.d.ts +6 -0
  223. package/dist/Service/spec/getOperationParameters.d.ts.map +1 -0
  224. package/dist/Service/spec/getOperationParameters.js +32 -0
  225. package/dist/Service/spec/getOperationParameters.js.map +1 -0
  226. package/dist/Service/spec/getServiceDefinitions.d.ts +6 -0
  227. package/dist/Service/spec/getServiceDefinitions.d.ts.map +1 -0
  228. package/dist/Service/spec/getServiceDefinitions.js +18 -0
  229. package/dist/Service/spec/getServiceDefinitions.js.map +1 -0
  230. package/dist/Service/spec/getServiceInfo.d.ts +7 -0
  231. package/dist/Service/spec/getServiceInfo.d.ts.map +1 -0
  232. package/dist/Service/spec/getServiceInfo.js +15 -0
  233. package/dist/Service/spec/getServiceInfo.js.map +1 -0
  234. package/dist/Service/spec/getServiceSecurityDefinitions.d.ts +6 -0
  235. package/dist/Service/spec/getServiceSecurityDefinitions.d.ts.map +1 -0
  236. package/dist/Service/spec/getServiceSecurityDefinitions.js +21 -0
  237. package/dist/Service/spec/getServiceSecurityDefinitions.js.map +1 -0
  238. package/dist/Service/spec/getServiceTags.d.ts +7 -0
  239. package/dist/Service/spec/getServiceTags.d.ts.map +1 -0
  240. package/dist/Service/spec/getServiceTags.js +19 -0
  241. package/dist/Service/spec/getServiceTags.js.map +1 -0
  242. package/dist/Service/spec/getSuccessStatusCode.d.ts +4 -0
  243. package/dist/Service/spec/getSuccessStatusCode.d.ts.map +1 -0
  244. package/dist/Service/spec/getSuccessStatusCode.js +14 -0
  245. package/dist/Service/spec/getSuccessStatusCode.js.map +1 -0
  246. package/dist/Service/spec/index.d.ts +3 -0
  247. package/dist/Service/spec/index.d.ts.map +1 -0
  248. package/dist/Service/spec/index.js +9 -0
  249. package/dist/Service/spec/index.js.map +1 -0
  250. package/dist/Service/spec/validateSpec.d.ts +5 -0
  251. package/dist/Service/spec/validateSpec.d.ts.map +1 -0
  252. package/dist/Service/spec/validateSpec.js +21 -0
  253. package/dist/Service/spec/validateSpec.js.map +1 -0
  254. package/dist/Service/test/createAccessToken.d.ts +9 -0
  255. package/dist/Service/test/createAccessToken.d.ts.map +1 -0
  256. package/dist/Service/test/createAccessToken.js +16 -0
  257. package/dist/Service/test/createAccessToken.js.map +1 -0
  258. package/dist/Service/test/ensureItem.d.ts +5 -0
  259. package/dist/Service/test/ensureItem.d.ts.map +1 -0
  260. package/dist/Service/test/ensureItem.js +13 -0
  261. package/dist/Service/test/ensureItem.js.map +1 -0
  262. package/dist/Service/test/ensureNoItem.d.ts +5 -0
  263. package/dist/Service/test/ensureNoItem.d.ts.map +1 -0
  264. package/dist/Service/test/ensureNoItem.js +13 -0
  265. package/dist/Service/test/ensureNoItem.js.map +1 -0
  266. package/dist/Service/test/execute.d.ts +44 -0
  267. package/dist/Service/test/execute.d.ts.map +1 -0
  268. package/dist/Service/test/execute.js +65 -0
  269. package/dist/Service/test/execute.js.map +1 -0
  270. package/dist/Service/test/findItem.d.ts +7 -0
  271. package/dist/Service/test/findItem.d.ts.map +1 -0
  272. package/dist/Service/test/findItem.js +16 -0
  273. package/dist/Service/test/findItem.js.map +1 -0
  274. package/dist/Service/test/firstItemGet.d.ts +5 -0
  275. package/dist/Service/test/firstItemGet.d.ts.map +1 -0
  276. package/dist/Service/test/firstItemGet.js +15 -0
  277. package/dist/Service/test/firstItemGet.js.map +1 -0
  278. package/dist/Service/test/index.d.ts +10 -0
  279. package/dist/Service/test/index.d.ts.map +1 -0
  280. package/dist/Service/test/index.js +36 -0
  281. package/dist/Service/test/index.js.map +1 -0
  282. package/dist/Service/test/keys.d.ts +5 -0
  283. package/dist/Service/test/keys.d.ts.map +1 -0
  284. package/dist/Service/test/keys.js +74 -0
  285. package/dist/Service/test/keys.js.map +1 -0
  286. package/dist/Service/test/wait.d.ts +4 -0
  287. package/dist/Service/test/wait.d.ts.map +1 -0
  288. package/dist/Service/test/wait.js +6 -0
  289. package/dist/Service/test/wait.js.map +1 -0
  290. package/dist/Service/useComposerMiddleware.d.ts +11 -0
  291. package/dist/Service/useComposerMiddleware.d.ts.map +1 -0
  292. package/dist/Service/useComposerMiddleware.js +41 -0
  293. package/dist/Service/useComposerMiddleware.js.map +1 -0
  294. package/dist/Service/useOasMiddleware.d.ts +16 -0
  295. package/dist/Service/useOasMiddleware.d.ts.map +1 -0
  296. package/dist/Service/useOasMiddleware.js +53 -0
  297. package/dist/Service/useOasMiddleware.js.map +1 -0
  298. package/dist/index.d.ts +11 -0
  299. package/dist/index.d.ts.map +1 -0
  300. package/dist/index.js +25 -0
  301. package/dist/index.js.map +1 -0
  302. package/eslint.config.mjs +32 -52
  303. package/example/documents/Profile/Profile.ts +8 -0
  304. package/example/documents/Profile/Profile.yaml +6 -0
  305. package/example/documents/Profile/ProfileAttributes.d.ts +5 -0
  306. package/example/documents/Profile/index.ts +3 -0
  307. package/example/documents/index.ts +5 -0
  308. package/example/index.ts +38 -0
  309. package/example/lib/createActivity.ts +28 -0
  310. package/example/lib/index.ts +24 -0
  311. package/example/operations/Profile/CreateProfile.ts +9 -0
  312. package/example/operations/Profile/DeleteProfile.ts +9 -0
  313. package/example/operations/Profile/IndexProfiles.ts +9 -0
  314. package/example/operations/Profile/ReadProfile.ts +9 -0
  315. package/example/operations/Profile/ReadProfileSystem.ts +9 -0
  316. package/example/operations/Profile/UpdateProfile.ts +9 -0
  317. package/example/operations/Service/Health.ts +11 -0
  318. package/example/operations/index.ts +22 -0
  319. package/example/security/index.ts +25 -0
  320. package/jest.config.mjs +7 -0
  321. package/package.json +34 -24
  322. package/src/Component/Component.ts +120 -0
  323. package/src/Component/__tests__/Component.test.ts +161 -0
  324. package/src/Component/index.ts +7 -0
  325. package/src/Context/Context.ts +217 -0
  326. package/src/Context/Request.ts +41 -0
  327. package/src/Context/__tests__/Context.test.ts +271 -0
  328. package/src/Context/__tests__/__helpers.ts +86 -0
  329. package/src/Context/getHttpMethod.ts +21 -0
  330. package/src/Context/getHttpPath.ts +34 -0
  331. package/src/Context/getMutationParameters.ts +35 -0
  332. package/src/Context/getOperationId.ts +23 -0
  333. package/src/Context/getQueryParameters.ts +45 -0
  334. package/src/Context/index.ts +12 -0
  335. package/src/Context/withSafeAttributes.ts +39 -0
  336. package/src/Document/Document.ts +448 -0
  337. package/src/Document/MemoryDocument.ts +152 -0
  338. package/src/Document/__tests__/MemoryDocument.test.ts +406 -0
  339. package/src/Document/__tests__/__helpers.ts +40 -0
  340. package/src/Document/index.ts +11 -0
  341. package/src/Operation/Operation.ts +401 -0
  342. package/src/Operation/__tests__/Operation.test.ts +142 -0
  343. package/src/Operation/errors/AccessDeniedError.ts +25 -0
  344. package/src/Operation/errors/CommonError.ts +41 -0
  345. package/src/Operation/errors/DocumentExistsError.ts +33 -0
  346. package/src/Operation/errors/DocumentNotFoundError.ts +34 -0
  347. package/src/Operation/errors/InvalidParametersError.ts +30 -0
  348. package/src/Operation/errors/UnauthorizedError.ts +28 -0
  349. package/src/Operation/errors/UnprocessibleConditionError.ts +32 -0
  350. package/src/Operation/errors/__tests__/InvalidParametersError.test.ts +20 -0
  351. package/src/Operation/errors/__tests__/UnprocessibleConditionError.test.ts +20 -0
  352. package/src/Operation/errors/index.ts +17 -0
  353. package/src/Operation/helpers/index.ts +9 -0
  354. package/src/Operation/helpers/withActivity.ts +43 -0
  355. package/src/Operation/index.ts +29 -0
  356. package/src/Operation/operations/Create.ts +49 -0
  357. package/src/Operation/operations/Delete.ts +65 -0
  358. package/src/Operation/operations/Index.ts +164 -0
  359. package/src/Operation/operations/List.ts +62 -0
  360. package/src/Operation/operations/Read.ts +55 -0
  361. package/src/Operation/operations/Update.ts +60 -0
  362. package/src/Operation/operations/__tests__/Create.test.ts +153 -0
  363. package/src/Operation/operations/__tests__/Delete.test.ts +163 -0
  364. package/src/Operation/operations/__tests__/Index.test.ts +209 -0
  365. package/src/Operation/operations/__tests__/List.test.ts +146 -0
  366. package/src/Operation/operations/__tests__/Read.test.ts +152 -0
  367. package/src/Operation/operations/__tests__/Update.test.ts +158 -0
  368. package/src/Operation/security/JwtAuthorization.ts +247 -0
  369. package/src/Operation/security/LambdaAuthorization.ts +103 -0
  370. package/src/Operation/security/__tests__/JwtAuthorization.test.ts +230 -0
  371. package/src/Operation/security/__tests__/LambdaAuthorization.test.ts +63 -0
  372. package/src/Operation/security/__tests__/userAuthorization.test.ts +42 -0
  373. package/src/Operation/security/index.ts +15 -0
  374. package/src/Operation/security/systemAuthorization.ts +23 -0
  375. package/src/Operation/security/userAuthorization.ts +47 -0
  376. package/src/Operation/security/verifyToken.ts +22 -0
  377. package/src/Service/Service.ts +317 -0
  378. package/src/Service/__tests__/Service.test.ts +229 -0
  379. package/src/Service/authorize.ts +80 -0
  380. package/src/Service/errors/InvalidInputError.ts +40 -0
  381. package/src/Service/errors/InvalidOutputError.ts +40 -0
  382. package/src/Service/errors/OperationError.ts +74 -0
  383. package/src/{errors → Service/errors}/OperationError.yaml +7 -10
  384. package/src/Service/errors/OperationErrorAttributes.d.ts +12 -0
  385. package/src/Service/errors/OperationNotFoundError.ts +45 -0
  386. package/src/Service/errors/__tests__/OperationError.test.ts +17 -0
  387. package/src/Service/errors/__tests__/maskSecrets.test.ts +92 -0
  388. package/src/Service/errors/index.ts +18 -0
  389. package/src/Service/errors/logOperationError.ts +72 -0
  390. package/src/Service/errors/maskSecrets.ts +65 -0
  391. package/src/Service/index.ts +9 -0
  392. package/src/Service/logRequest.ts +50 -0
  393. package/src/Service/spec/__tests__/validateSpec.test.ts +10 -0
  394. package/src/Service/spec/createSpec.ts +68 -0
  395. package/src/Service/spec/getErrorResponseDescription.ts +20 -0
  396. package/src/Service/spec/getHttpMethod.ts +20 -0
  397. package/src/Service/spec/getOperation.ts +99 -0
  398. package/src/Service/spec/getOperationParameters.ts +43 -0
  399. package/src/Service/spec/getServiceDefinitions.ts +23 -0
  400. package/src/Service/spec/getServiceInfo.ts +18 -0
  401. package/src/Service/spec/getServiceSecurityDefinitions.ts +26 -0
  402. package/src/Service/spec/getServiceTags.ts +23 -0
  403. package/src/Service/spec/getSuccessStatusCode.ts +15 -0
  404. package/src/Service/spec/index.ts +5 -0
  405. package/src/Service/spec/validateSpec.ts +22 -0
  406. package/src/Service/test/__tests__/createAccessToken.test.ts +104 -0
  407. package/src/Service/test/__tests__/ensureItem.test.ts +41 -0
  408. package/src/Service/test/__tests__/ensureNoItem.test.ts +49 -0
  409. package/src/Service/test/__tests__/execute.test.ts +125 -0
  410. package/src/Service/test/__tests__/findItem.test.ts +45 -0
  411. package/src/Service/test/__tests__/firstItemGet.test.ts +50 -0
  412. package/src/Service/test/__tests__/wait.test.ts +66 -0
  413. package/src/Service/test/createAccessToken.ts +28 -0
  414. package/src/Service/test/ensureItem.ts +9 -0
  415. package/src/Service/test/ensureNoItem.ts +9 -0
  416. package/src/Service/test/execute.ts +112 -0
  417. package/src/Service/test/findItem.ts +22 -0
  418. package/src/Service/test/firstItemGet.ts +18 -0
  419. package/src/Service/test/index.ts +19 -0
  420. package/src/Service/test/keys.ts +75 -0
  421. package/src/Service/test/wait.ts +5 -0
  422. package/src/Service/useComposerMiddleware.ts +56 -0
  423. package/src/Service/useOasMiddleware.ts +69 -0
  424. package/src/index.ts +12 -0
  425. package/tsconfig.json +26 -0
  426. package/examples/CreateProfile.js +0 -40
  427. package/examples/DeleteProfile.js +0 -6
  428. package/examples/Health.js +0 -8
  429. package/examples/IndexProfiles.js +0 -6
  430. package/examples/Profile.js +0 -8
  431. package/examples/Profile.yaml +0 -4
  432. package/examples/ReadProfile.js +0 -18
  433. package/examples/UpdateProfile.js +0 -25
  434. package/examples/index.js +0 -29
  435. package/src/Component.js +0 -59
  436. package/src/Component.spec.js +0 -65
  437. package/src/Document.js +0 -310
  438. package/src/Document.spec.js +0 -331
  439. package/src/Operation.js +0 -258
  440. package/src/Operation.spec.js +0 -474
  441. package/src/Service.js +0 -207
  442. package/src/Service.spec.js +0 -388
  443. package/src/errors/AccessDeniedError.js +0 -11
  444. package/src/errors/CommonError.js +0 -19
  445. package/src/errors/DocumentExistsError.js +0 -15
  446. package/src/errors/DocumentNotFoundError.js +0 -15
  447. package/src/errors/InvalidInputError.js +0 -19
  448. package/src/errors/InvalidOutputError.js +0 -20
  449. package/src/errors/InvalidParametersError.js +0 -11
  450. package/src/errors/OperationError.js +0 -44
  451. package/src/errors/OperationNotFoundError.js +0 -16
  452. package/src/errors/UnauthorizedError.js +0 -11
  453. package/src/errors/UnprocessibleConditionError.js +0 -11
  454. package/src/errors/index.js +0 -11
  455. package/src/helpers/asSafeClass.js +0 -22
  456. package/src/helpers/authorize.js +0 -44
  457. package/src/helpers/createContext.js +0 -96
  458. package/src/helpers/createSchemasMap.js +0 -37
  459. package/src/helpers/createSpec.js +0 -196
  460. package/src/helpers/defaultId.js +0 -30
  461. package/src/helpers/defaultSummary.js +0 -15
  462. package/src/helpers/defaultTags.js +0 -16
  463. package/src/helpers/getComponentTitle.js +0 -22
  464. package/src/helpers/getDefaultSchemaAttributes.js +0 -32
  465. package/src/helpers/getHttpMethod.js +0 -19
  466. package/src/helpers/getIdPrefix.js +0 -7
  467. package/src/helpers/getOrFail.js +0 -24
  468. package/src/helpers/getOrFail.spec.js +0 -17
  469. package/src/helpers/getSuccessStatusCode.js +0 -15
  470. package/src/helpers/handler.js +0 -21
  471. package/src/helpers/loadSync.js +0 -14
  472. package/src/helpers/logError.js +0 -33
  473. package/src/helpers/logRequest.js +0 -36
  474. package/src/helpers/maskSecrets.js +0 -42
  475. package/src/helpers/specMiddleware.js +0 -81
  476. package/src/index.d.ts +0 -352
  477. package/src/index.js +0 -35
  478. package/src/operations/Create.js +0 -39
  479. package/src/operations/Delete.js +0 -54
  480. package/src/operations/Index.js +0 -107
  481. package/src/operations/Read.js +0 -46
  482. package/src/operations/Update.js +0 -50
  483. package/src/security/JwtAuthorization.js +0 -125
  484. package/src/security/SystemAuthorization.js +0 -73
  485. package/src/security/index.js +0 -9
  486. package/src/security/verifyToken.js +0 -17
  487. package/src/test/createAccessToken.js +0 -23
  488. package/src/test/execute.js +0 -84
  489. package/src/test/index.js +0 -11
  490. package/src/test/keys.js +0 -39
  491. package/src/test/wait.js +0 -5
  492. /package/{specs → .composer}/Documents.yaml +0 -0
  493. /package/{specs → .composer}/Enums.yaml +0 -0
  494. /package/{specs → .composer}/Operations.yaml +0 -0
  495. /package/{specs → .composer}/Parameters.yaml +0 -0
  496. /package/{specs → .composer}/Scenarios.yaml +0 -0
  497. /package/{specs → .composer}/Schemas.yaml +0 -0
@@ -0,0 +1,30 @@
1
+ import CommonError from './CommonError';
2
+
3
+ /**
4
+ * Invalid Parameters Error
5
+ *
6
+ * `InvalidParametersError` represents a **400 Bad Request** error that occurs when operation
7
+ * parameters are syntactically correct (pass schema validation) but are semantically invalid or
8
+ * not processible by the operation logic. This is distinct from `InvalidInputError`, which
9
+ * indicates schema validation failures.
10
+ *
11
+ * This error signals that:
12
+ *
13
+ * - The input structure and types are valid according to the schema
14
+ * - However, the parameter values are invalid for the specific operation context
15
+ * - The operation cannot proceed with the provided parameters
16
+ *
17
+ * This error is typically thrown manually by operation implementations when they detect
18
+ * invalid parameter combinations or values that cannot be validated by the schema alone.
19
+ * For example, an operation might accept a date range where the start date must be before
20
+ * the end date—this business rule cannot be expressed in JSON Schema, so the operation
21
+ * would throw `InvalidParametersError` if violated.
22
+ */
23
+ class InvalidParametersError extends CommonError {
24
+ /** Creates an instance of invalid parameters error. */
25
+ constructor(message: string = 'Invalid parameters') {
26
+ super('InvalidParametersError', message);
27
+ }
28
+ }
29
+
30
+ export default InvalidParametersError;
@@ -0,0 +1,28 @@
1
+ import CommonError from './CommonError';
2
+
3
+ /**
4
+ * Unauthorized Error
5
+ *
6
+ * `UnauthorizedError` represents a **401 Unauthorized** error that occurs when authentication
7
+ * fails—the request lacks valid credentials or the provided credentials are invalid. This is
8
+ * distinct from `AccessDeniedError` (403), which indicates that authentication succeeded but
9
+ * authorization failed (the user lacks permissions).
10
+ *
11
+ * This error signals that:
12
+ *
13
+ * - The request is missing required authentication credentials (e.g., Authorization header, token)
14
+ * - The provided credentials are invalid, expired, or malformed
15
+ * - The client must provide valid authentication before the request can proceed
16
+ *
17
+ * This error is thrown by security authorization classes (`JwtAuthorization`, `SystemAuthorization`)
18
+ * during the authentication phase, before any operation logic executes. The framework automatically
19
+ * returns this error with a 401 status code, indicating that the client needs to authenticate.
20
+ */
21
+ class UnauthorizedError extends CommonError {
22
+ /** Creates an instance of unauthorized error. */
23
+ constructor(message: string) {
24
+ super('UnauthorizedError', message);
25
+ }
26
+ }
27
+
28
+ export default UnauthorizedError;
@@ -0,0 +1,32 @@
1
+ import CommonError from './CommonError';
2
+
3
+ /**
4
+ * Unprocessible Condition Error
5
+ *
6
+ * `UnprocessibleConditionError` represents a **422 Unprocessable Entity** error that occurs
7
+ * when an operation encounters an expected exit condition that prevents it from processing
8
+ * the request. This error indicates that the request is well-formed and valid, but the
9
+ * operation cannot proceed due to business logic constraints or state conditions.
10
+ *
11
+ * This error signals that:
12
+ *
13
+ * - The request syntax and structure are valid (input passes schema validation)
14
+ * - The operation cannot be completed due to business rules or state constraints
15
+ * - The condition is expected and part of normal operation flow (not a bug)
16
+ *
17
+ * This is distinct from other error types:
18
+ * - **400 (InvalidInputError/InvalidParametersError)**: Input validation failures
19
+ * - **404 (DocumentNotFoundError)**: Resource doesn't exist
20
+ * - **500 (InvalidOutputError)**: Internal bugs
21
+ *
22
+ * The 422 status code indicates that the server understands the request but cannot process
23
+ * it due to semantic errors or business logic constraints.
24
+ */
25
+ class UnprocessibleConditionError extends CommonError {
26
+ /** Creates an instance of unprocessible condition error. */
27
+ constructor(message: string = 'Unprocessible condition') {
28
+ super('UnprocessibleConditionError', message);
29
+ }
30
+ }
31
+
32
+ export default UnprocessibleConditionError;
@@ -0,0 +1,20 @@
1
+ import InvalidParametersError from '../InvalidParametersError';
2
+
3
+ describe('InvalidParametersError', () => {
4
+ describe('InvalidParametersError.constructor(message)', () => {
5
+ it('creates an instance with default message when no message is provided', () => {
6
+ const err = new InvalidParametersError();
7
+
8
+ expect(err.code).toBe('InvalidParametersError');
9
+ expect(err.message).toBe('Invalid parameters');
10
+ });
11
+
12
+ it('creates an instance with custom message when provided', () => {
13
+ const customMessage = 'Start date must be before end date';
14
+ const err = new InvalidParametersError(customMessage);
15
+
16
+ expect(err.code).toBe('InvalidParametersError');
17
+ expect(err.message).toBe(customMessage);
18
+ });
19
+ });
20
+ });
@@ -0,0 +1,20 @@
1
+ import UnprocessibleConditionError from '../UnprocessibleConditionError';
2
+
3
+ describe('UnprocessibleConditionError', () => {
4
+ describe('UnprocessibleConditionError.constructor(message)', () => {
5
+ it('creates an instance with default message when no message is provided', () => {
6
+ const err = new UnprocessibleConditionError();
7
+
8
+ expect(err.code).toBe('UnprocessibleConditionError');
9
+ expect(err.message).toBe('Unprocessible condition');
10
+ });
11
+
12
+ it('creates an instance with custom message when provided', () => {
13
+ const customMessage = 'Order is already cancelled';
14
+ const err = new UnprocessibleConditionError(customMessage);
15
+
16
+ expect(err.code).toBe('UnprocessibleConditionError');
17
+ expect(err.message).toBe(customMessage);
18
+ });
19
+ });
20
+ });
@@ -0,0 +1,17 @@
1
+ import CommonError from './CommonError';
2
+ import UnauthorizedError from './UnauthorizedError';
3
+ import AccessDeniedError from './AccessDeniedError';
4
+ import DocumentExistsError from './DocumentExistsError';
5
+ import DocumentNotFoundError from './DocumentNotFoundError';
6
+ import InvalidParametersError from './InvalidParametersError';
7
+ import UnprocessibleConditionError from './UnprocessibleConditionError';
8
+
9
+ export {
10
+ CommonError,
11
+ UnauthorizedError,
12
+ AccessDeniedError,
13
+ DocumentExistsError,
14
+ DocumentNotFoundError,
15
+ InvalidParametersError,
16
+ UnprocessibleConditionError,
17
+ };
@@ -0,0 +1,9 @@
1
+ import withActivity, { type CreateActivityProps } from './withActivity';
2
+
3
+ export {
4
+ withActivity
5
+ };
6
+
7
+ export type {
8
+ CreateActivityProps
9
+ };
@@ -0,0 +1,43 @@
1
+ import Create from '../operations/Create';
2
+ import Update from '../operations/Update';
3
+ import Delete from '../operations/Delete';
4
+ import Context from '../../Context';
5
+ import Operation, { type Result } from '../Operation';
6
+
7
+ type BaseAction = typeof Create | typeof Update | typeof Delete;
8
+
9
+ export type CreateActivityProps = {
10
+ result?: Result;
11
+ context: Context;
12
+ parameters: Record<string, unknown>;
13
+ componentName?: string;
14
+ }
15
+
16
+ /** Extends operation with a custom create activity method. */
17
+ const withActivity = (
18
+ baseAction: BaseAction,
19
+ createActivity: (props: CreateActivityProps) => Promise<void>
20
+ ): (ComponentClass: unknown, componentAction?: string) => typeof Operation => {
21
+ return (ComponentClass, componentAction) => {
22
+ /** Operation class with create activity method. */
23
+ return class extends baseAction(ComponentClass, componentAction) {
24
+ /** Creates activity after default exec is done */
25
+ async createActivity(
26
+ parameters: Record<string, unknown>,
27
+ result?: Result
28
+ ): Promise<void> {
29
+ const context = this.context;
30
+ const { componentName } = this.constructor as typeof Operation;
31
+
32
+ await createActivity({
33
+ result,
34
+ context,
35
+ parameters,
36
+ componentName,
37
+ });
38
+ }
39
+ };
40
+ };
41
+ };
42
+
43
+ export default withActivity;
@@ -0,0 +1,29 @@
1
+ import Operation from './Operation';
2
+
3
+ import Read from './operations/Read';
4
+ import List from './operations/List';
5
+ import Index from './operations/Index';
6
+ import Create from './operations/Create';
7
+ import Update from './operations/Update';
8
+ import Delete from './operations/Delete';
9
+ import { withActivity, type CreateActivityProps } from './helpers';
10
+
11
+ export default Operation;
12
+
13
+ export {
14
+ Read,
15
+ List,
16
+ Index,
17
+ Create,
18
+ Update,
19
+ Delete,
20
+ Operation,
21
+ withActivity,
22
+ };
23
+
24
+ export * from './errors';
25
+ export * from './security';
26
+
27
+ export type {
28
+ CreateActivityProps
29
+ };
@@ -0,0 +1,49 @@
1
+ import Operation from '../Operation';
2
+ import Component from '../../Component';
3
+
4
+ /** Returns class for a create operation. */
5
+ const Create = (
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ ComponentClass: any,
8
+ componentAction: string = Operation.types.CREATE
9
+ ): typeof Operation => {
10
+ if (!ComponentClass?.isComponent) {
11
+ throw new Error('Argument "ComponentClass" is undefined for "Create" operation' +
12
+ ' function');
13
+ }
14
+
15
+ ComponentClass = ComponentClass as unknown as typeof Component;
16
+
17
+ const componentTitle = ComponentClass.getTitle();
18
+
19
+ /** Create operation class */
20
+ return class extends Operation {
21
+ /** Returns component class for a create operation. */
22
+ static get Component() {
23
+ return ComponentClass;
24
+ }
25
+
26
+ /** Returns component action name for a create operation. */
27
+ static get componentAction() {
28
+ return componentAction;
29
+ }
30
+
31
+ /** Returns create operation type. */
32
+ static get type() {
33
+ return Operation.types.CREATE;
34
+ }
35
+
36
+ /** Returns possible errors for a create operation. */
37
+ static get errors() {
38
+ return {
39
+ ...super.errors,
40
+ DocumentExistsError: {
41
+ statusCode: 422,
42
+ description: `${componentTitle} could not be created, it already exists`
43
+ }
44
+ };
45
+ }
46
+ };
47
+ };
48
+
49
+ export default Create;
@@ -0,0 +1,65 @@
1
+ import Operation from '../Operation';
2
+ import Component from '../../Component';
3
+
4
+ /** Returns class for a delete operation. */
5
+ const Delete = (
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ ComponentClass: any,
8
+ componentAction: string = Operation.types.DELETE
9
+ ): typeof Operation => {
10
+ if (!ComponentClass?.isComponent) {
11
+ throw new Error('Argument "ComponentClass" is undefined for "Delete" operation' +
12
+ ' function');
13
+ }
14
+
15
+ ComponentClass = ComponentClass as unknown as typeof Component;
16
+
17
+ const componentTitle = ComponentClass.getTitle();
18
+ const componentTitleLower = componentTitle.toLowerCase();
19
+
20
+ /** Delete operation class */
21
+ return class extends Operation {
22
+ /** Returns component class for a delete operation. */
23
+ static get Component() {
24
+ return ComponentClass;
25
+ }
26
+
27
+ /** Returns component action name for a delete operation. */
28
+ static get componentAction() {
29
+ return componentAction;
30
+ }
31
+
32
+ /** Returns delete operation type. */
33
+ static get type() {
34
+ return Operation.types.DELETE;
35
+ }
36
+
37
+ /** Returns possible errors for a delete operation. */
38
+ static get errors() {
39
+ return {
40
+ ...super.errors,
41
+ DocumentNotFoundError: {
42
+ statusCode: 404,
43
+ description: `${componentTitle} is not found`
44
+ }
45
+ };
46
+ }
47
+
48
+ /** Returns query schema with a component ID. */
49
+ static get query() {
50
+ return {
51
+ id: {
52
+ description: `ID of ${componentTitleLower} to be deleted`,
53
+ required: true
54
+ }
55
+ };
56
+ }
57
+
58
+ /** No output for a delete operation. */
59
+ static get output() {
60
+ return null;
61
+ }
62
+ };
63
+ };
64
+
65
+ export default Delete;
@@ -0,0 +1,164 @@
1
+ import Component from '../../Component';
2
+ import { capitalize } from 'lodash';
3
+ import Operation, { type Result } from '../Operation';
4
+ import { type PropertiesSchemaSource } from '@kravc/schema';
5
+
6
+ const SORT_ORDER = {
7
+ ASC: 'asc',
8
+ DESC: 'desc',
9
+ };
10
+
11
+ const DEFAULT_LIMIT = 20;
12
+ const DEFAULT_LIMIT_MAX = 999;
13
+ const DEFAULT_SORT_ORDER = SORT_ORDER.DESC;
14
+
15
+ export type PageInfo = {
16
+ sort: 'asc' | 'desc';
17
+ count: number;
18
+ limit: number;
19
+ lastEvaluatedKey?: string;
20
+ }
21
+
22
+ /** Returns class for an index operation. */
23
+ const Index = (
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+ ComponentClass: any,
26
+ componentAction: string = 'index'
27
+ ): typeof Operation => {
28
+ if (!ComponentClass?.isComponent) {
29
+ throw new Error('Argument "ComponentClass" is undefined for "Index"' +
30
+ ' operation function');
31
+ }
32
+
33
+ ComponentClass = ComponentClass as unknown as typeof Component;
34
+
35
+ const documentTitle = ComponentClass.getTitle(false, true);
36
+
37
+ /** Index operation class */
38
+ return class extends Operation {
39
+ /** Returns summary for an index operation. */
40
+ static get summary() {
41
+ return capitalize(`${componentAction} ${documentTitle}`);
42
+ }
43
+
44
+ /** Returns component class for an index operation. */
45
+ static get Component() {
46
+ return ComponentClass;
47
+ }
48
+
49
+ /** Returns component action name for an index operation. */
50
+ static get componentAction() {
51
+ return componentAction;
52
+ }
53
+
54
+ /** Returns default value for a limit parameter. */
55
+ static get defaultLimit() {
56
+ return DEFAULT_LIMIT;
57
+ }
58
+
59
+ /** Returns maximum number for a limit parameter. */
60
+ static get limitMax() {
61
+ return DEFAULT_LIMIT_MAX;
62
+ }
63
+
64
+ /** Returns default value for a sort parameter. */
65
+ static get defaultSort() {
66
+ return DEFAULT_SORT_ORDER;
67
+ }
68
+
69
+ /** Returns query schema for pagination parameters. */
70
+ static get query() {
71
+ return {
72
+ limit: {
73
+ type: 'integer',
74
+ example: this.defaultLimit,
75
+ default: this.defaultLimit,
76
+ minimum: 1,
77
+ maximum: this.limitMax,
78
+ description: `Limit number of ${documentTitle} to be returned`,
79
+ },
80
+ sort: {
81
+ enum: Object.values(SORT_ORDER),
82
+ default: this.defaultSort,
83
+ description: 'Sort direction',
84
+ },
85
+ exclusiveStartKey: {
86
+ description: `Exclusive start key to return next batch of ${documentTitle}`,
87
+ }
88
+ } as PropertiesSchemaSource;
89
+ }
90
+
91
+ /** Returns schema source for the operation output with pagination. */
92
+ static get output() {
93
+ return {
94
+ data: {
95
+ items: {
96
+ $ref: ComponentClass.schema!.id
97
+ },
98
+ required: true,
99
+ },
100
+ pageInfo: {
101
+ required: true,
102
+ properties: {
103
+ sort: {
104
+ enum: Object.values(SORT_ORDER),
105
+ description: 'Sort direction',
106
+ },
107
+ count: {
108
+ type: 'integer',
109
+ example: 0,
110
+ description: `Number of ${documentTitle}`,
111
+ },
112
+ limit: {
113
+ type: 'integer',
114
+ example: 100,
115
+ description: `Limit number of ${documentTitle} to be returned`,
116
+ },
117
+ lastEvaluatedKey: {
118
+ description: `Last evaluated key to get next batch of ${documentTitle}`,
119
+ },
120
+ }
121
+ }
122
+ };
123
+ }
124
+
125
+ /** Executes components index action. */
126
+ async action(parameters: Record<string, unknown>) {
127
+ const {
128
+ sort,
129
+ limit,
130
+ index,
131
+ exclusiveStartKey,
132
+ ...query
133
+ } = parameters;
134
+
135
+ const options = {
136
+ sort,
137
+ limit,
138
+ index,
139
+ exclusiveStartKey,
140
+ };
141
+
142
+ const { componentActionMethod } = this.constructor as typeof Operation;
143
+
144
+ const result = await componentActionMethod(this.context, query, options);
145
+
146
+ const {
147
+ objects: data,
148
+ count,
149
+ lastEvaluatedKey,
150
+ } = result;
151
+
152
+ const pageInfo = {
153
+ sort,
154
+ count,
155
+ limit,
156
+ lastEvaluatedKey,
157
+ } as PageInfo;
158
+
159
+ return { data, pageInfo } as { data: Result, pageInfo: PageInfo };
160
+ }
161
+ };
162
+ };
163
+
164
+ export default Index;
@@ -0,0 +1,62 @@
1
+ import Component from '../../Component';
2
+ import { capitalize } from 'lodash';
3
+ import Operation, { type Result } from '../Operation';
4
+
5
+ /** Returns class for an list operation. */
6
+ const List = (
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ ComponentClass: any,
9
+ componentAction: string = 'indexAll'
10
+ ): typeof Operation => {
11
+ if (!ComponentClass?.isComponent) {
12
+ throw new Error('Argument "ComponentClass" is undefined for "List"' +
13
+ ' operation function');
14
+ }
15
+
16
+ ComponentClass = ComponentClass as unknown as typeof Component;
17
+
18
+ const documentTitle = ComponentClass.getTitle(false, true);
19
+
20
+ /** List operation class */
21
+ return class extends Operation {
22
+ /** Returns summary for an index operation. */
23
+ static get summary() {
24
+ const action = componentAction.replace('indexAll', 'list');
25
+ return capitalize(`${action} ${documentTitle}`);
26
+ }
27
+
28
+ /** Returns component class for an index operation. */
29
+ static get Component() {
30
+ return ComponentClass;
31
+ }
32
+
33
+ /** Returns component action name for an index operation. */
34
+ static get componentAction() {
35
+ return componentAction;
36
+ }
37
+
38
+ /** Executes components list action. */
39
+ async action(parameters: Record<string, unknown>) {
40
+ const {
41
+ sort,
42
+ index,
43
+ ...query
44
+ } = parameters;
45
+
46
+ const options = {
47
+ sort,
48
+ index,
49
+ };
50
+
51
+ const { componentActionMethod } = this.constructor as typeof Operation;
52
+
53
+ const result = await componentActionMethod(this.context, query, options);
54
+
55
+ const { objects } = result;
56
+
57
+ return { data: objects } as { data: Result };
58
+ }
59
+ };
60
+ };
61
+
62
+ export default List;
@@ -0,0 +1,55 @@
1
+ import Operation from '../Operation';
2
+ import Component from '../../Component';
3
+
4
+ /** Returns class for a read operation. */
5
+ const Read = (
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ ComponentClass: any,
8
+ componentAction: string = Operation.types.READ
9
+ ): typeof Operation => {
10
+ if (!ComponentClass?.isComponent) {
11
+ throw new Error('Argument "ComponentClass" is undefined for "Read" operation' +
12
+ ' function');
13
+ }
14
+
15
+ ComponentClass = ComponentClass as unknown as typeof Component;
16
+
17
+ const componentTitle = ComponentClass.getTitle();
18
+ const componentTitleLower = componentTitle.toLowerCase();
19
+
20
+ /** Read operation class */
21
+ return class extends Operation {
22
+ /** Returns component class for a read operation. */
23
+ static get Component() {
24
+ return ComponentClass;
25
+ }
26
+
27
+ /** Returns component action name for a read operation. */
28
+ static get componentAction() {
29
+ return componentAction;
30
+ }
31
+
32
+ /** Returns possible errors for a read operation. */
33
+ static get errors() {
34
+ return {
35
+ ...super.errors,
36
+ DocumentNotFoundError: {
37
+ statusCode: 404,
38
+ description: `${componentTitle} is not found`
39
+ }
40
+ };
41
+ }
42
+
43
+ /** Returns query schema with a component ID. */
44
+ static get query() {
45
+ return {
46
+ id: {
47
+ description: `ID of ${componentTitleLower} to be returned`,
48
+ required: true
49
+ }
50
+ };
51
+ }
52
+ };
53
+ };
54
+
55
+ export default Read;