@api-client/core 0.19.9 → 0.19.11

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 (523) hide show
  1. package/LICENSE.md +9 -63
  2. package/Testing.md +1 -1
  3. package/bin/test.ts +1 -12
  4. package/build/src/browser.d.ts +0 -15
  5. package/build/src/browser.d.ts.map +1 -1
  6. package/build/src/browser.js +0 -17
  7. package/build/src/browser.js.map +1 -1
  8. package/build/src/decorators/observed.d.ts.map +1 -1
  9. package/build/src/decorators/observed.js +91 -0
  10. package/build/src/decorators/observed.js.map +1 -1
  11. package/build/src/events/EventTypes.d.ts +0 -6
  12. package/build/src/events/EventTypes.d.ts.map +1 -1
  13. package/build/src/events/EventTypes.js +0 -2
  14. package/build/src/events/EventTypes.js.map +1 -1
  15. package/build/src/events/Events.d.ts +0 -2
  16. package/build/src/events/Events.d.ts.map +1 -1
  17. package/build/src/events/Events.js +0 -2
  18. package/build/src/events/Events.js.map +1 -1
  19. package/build/src/index.d.ts +0 -15
  20. package/build/src/index.d.ts.map +1 -1
  21. package/build/src/index.js +0 -17
  22. package/build/src/index.js.map +1 -1
  23. package/build/src/modeling/ApiModel.d.ts +21 -7
  24. package/build/src/modeling/ApiModel.d.ts.map +1 -1
  25. package/build/src/modeling/ApiModel.js +70 -29
  26. package/build/src/modeling/ApiModel.js.map +1 -1
  27. package/build/src/modeling/Bindings.d.ts +3 -3
  28. package/build/src/modeling/Bindings.d.ts.map +1 -1
  29. package/build/src/modeling/Bindings.js.map +1 -1
  30. package/build/src/modeling/DomainAssociation.d.ts +5 -5
  31. package/build/src/modeling/DomainAssociation.d.ts.map +1 -1
  32. package/build/src/modeling/DomainAssociation.js.map +1 -1
  33. package/build/src/modeling/DomainEntity.d.ts +2 -3
  34. package/build/src/modeling/DomainEntity.d.ts.map +1 -1
  35. package/build/src/modeling/DomainEntity.js +1 -1
  36. package/build/src/modeling/DomainEntity.js.map +1 -1
  37. package/build/src/modeling/DomainProperty.d.ts +2 -3
  38. package/build/src/modeling/DomainProperty.d.ts.map +1 -1
  39. package/build/src/modeling/DomainProperty.js +1 -1
  40. package/build/src/modeling/DomainProperty.js.map +1 -1
  41. package/build/src/modeling/DomainValidation.d.ts +1 -1
  42. package/build/src/modeling/DomainValidation.d.ts.map +1 -1
  43. package/build/src/modeling/DomainValidation.js.map +1 -1
  44. package/build/src/modeling/ExposedEntity.d.ts +14 -0
  45. package/build/src/modeling/ExposedEntity.d.ts.map +1 -1
  46. package/build/src/modeling/ExposedEntity.js +59 -6
  47. package/build/src/modeling/ExposedEntity.js.map +1 -1
  48. package/build/src/modeling/actions/Action.d.ts +11 -1
  49. package/build/src/modeling/actions/Action.d.ts.map +1 -1
  50. package/build/src/modeling/actions/Action.js +21 -3
  51. package/build/src/modeling/actions/Action.js.map +1 -1
  52. package/build/src/modeling/actions/CreateAction.d.ts +2 -1
  53. package/build/src/modeling/actions/CreateAction.d.ts.map +1 -1
  54. package/build/src/modeling/actions/CreateAction.js +2 -2
  55. package/build/src/modeling/actions/CreateAction.js.map +1 -1
  56. package/build/src/modeling/actions/DeleteAction.d.ts +2 -1
  57. package/build/src/modeling/actions/DeleteAction.d.ts.map +1 -1
  58. package/build/src/modeling/actions/DeleteAction.js +2 -2
  59. package/build/src/modeling/actions/DeleteAction.js.map +1 -1
  60. package/build/src/modeling/actions/ListAction.d.ts +2 -1
  61. package/build/src/modeling/actions/ListAction.d.ts.map +1 -1
  62. package/build/src/modeling/actions/ListAction.js +2 -2
  63. package/build/src/modeling/actions/ListAction.js.map +1 -1
  64. package/build/src/modeling/actions/ReadAction.d.ts +2 -1
  65. package/build/src/modeling/actions/ReadAction.d.ts.map +1 -1
  66. package/build/src/modeling/actions/ReadAction.js +2 -2
  67. package/build/src/modeling/actions/ReadAction.js.map +1 -1
  68. package/build/src/modeling/actions/SearchAction.d.ts +2 -1
  69. package/build/src/modeling/actions/SearchAction.d.ts.map +1 -1
  70. package/build/src/modeling/actions/SearchAction.js +2 -2
  71. package/build/src/modeling/actions/SearchAction.js.map +1 -1
  72. package/build/src/modeling/actions/UpdateAction.d.ts +2 -1
  73. package/build/src/modeling/actions/UpdateAction.d.ts.map +1 -1
  74. package/build/src/modeling/actions/UpdateAction.js +2 -2
  75. package/build/src/modeling/actions/UpdateAction.js.map +1 -1
  76. package/build/src/modeling/actions/index.d.ts +2 -1
  77. package/build/src/modeling/actions/index.d.ts.map +1 -1
  78. package/build/src/modeling/actions/index.js +7 -7
  79. package/build/src/modeling/actions/index.js.map +1 -1
  80. package/build/src/modeling/ai/types.d.ts +2 -2
  81. package/build/src/modeling/ai/types.d.ts.map +1 -1
  82. package/build/src/modeling/ai/types.js.map +1 -1
  83. package/build/src/{amf → modeling/amf}/DataValueGenerator.d.ts +1 -1
  84. package/build/src/modeling/amf/DataValueGenerator.d.ts.map +1 -0
  85. package/build/src/{amf → modeling/amf}/DataValueGenerator.js +2 -3
  86. package/build/src/modeling/amf/DataValueGenerator.js.map +1 -0
  87. package/build/src/modeling/amf/ShapeGenerator.d.ts +20 -20
  88. package/build/src/modeling/amf/ShapeGenerator.d.ts.map +1 -1
  89. package/build/src/modeling/amf/ShapeGenerator.js +16 -18
  90. package/build/src/modeling/amf/ShapeGenerator.js.map +1 -1
  91. package/build/src/modeling/amf/core_types.d.ts +9 -0
  92. package/build/src/modeling/amf/core_types.d.ts.map +1 -0
  93. package/build/src/modeling/amf/core_types.js +45 -0
  94. package/build/src/modeling/amf/core_types.js.map +1 -0
  95. package/build/src/modeling/index.d.ts +1 -0
  96. package/build/src/modeling/index.d.ts.map +1 -1
  97. package/build/src/modeling/index.js +1 -0
  98. package/build/src/modeling/index.js.map +1 -1
  99. package/build/src/modeling/types.d.ts +67 -0
  100. package/build/src/modeling/types.d.ts.map +1 -1
  101. package/build/src/modeling/types.js.map +1 -1
  102. package/build/src/modeling/validation/api_model_rules.d.ts +15 -0
  103. package/build/src/modeling/validation/api_model_rules.d.ts.map +1 -0
  104. package/build/src/modeling/validation/api_model_rules.js +599 -0
  105. package/build/src/modeling/validation/api_model_rules.js.map +1 -0
  106. package/build/src/modeling/validation/association_validation.d.ts.map +1 -1
  107. package/build/src/modeling/validation/association_validation.js +1 -3
  108. package/build/src/modeling/validation/association_validation.js.map +1 -1
  109. package/build/src/models/http-flows/LegacyTranslator.js +1 -1
  110. package/build/src/models/http-flows/LegacyTranslator.js.map +1 -1
  111. package/build/src/runtime/http-runner/HttpFlows.js +1 -1
  112. package/build/src/runtime/http-runner/HttpFlows.js.map +1 -1
  113. package/build/tsconfig.tsbuildinfo +1 -1
  114. package/eslint.config.js +0 -2
  115. package/package.json +27 -135
  116. package/src/decorators/observed.ts +91 -0
  117. package/src/events/EventTypes.ts +0 -2
  118. package/src/events/Events.ts +0 -2
  119. package/src/modeling/ApiModel.ts +73 -33
  120. package/src/modeling/Bindings.ts +3 -3
  121. package/src/modeling/DomainAssociation.ts +5 -5
  122. package/src/modeling/DomainEntity.ts +3 -4
  123. package/src/modeling/DomainProperty.ts +3 -4
  124. package/src/modeling/DomainValidation.ts +1 -1
  125. package/src/modeling/ExposedEntity.ts +63 -9
  126. package/src/modeling/actions/Action.ts +25 -2
  127. package/src/modeling/actions/CreateAction.ts +3 -2
  128. package/src/modeling/actions/DeleteAction.ts +3 -2
  129. package/src/modeling/actions/ListAction.ts +3 -2
  130. package/src/modeling/actions/ReadAction.ts +3 -2
  131. package/src/modeling/actions/SearchAction.ts +3 -2
  132. package/src/modeling/actions/UpdateAction.ts +3 -2
  133. package/src/modeling/ai/types.ts +2 -2
  134. package/src/{amf → modeling/amf}/DataValueGenerator.ts +3 -4
  135. package/src/modeling/amf/ShapeGenerator.ts +45 -61
  136. package/src/modeling/amf/core_types.ts +47 -0
  137. package/src/modeling/types.ts +70 -0
  138. package/src/modeling/validation/api_model_rules.ts +640 -0
  139. package/src/modeling/validation/api_model_validation_rules.md +58 -0
  140. package/src/modeling/validation/association_validation.ts +1 -3
  141. package/src/models/http-flows/LegacyTranslator.ts +1 -1
  142. package/src/runtime/http-runner/HttpFlows.ts +1 -1
  143. package/tests/unit/modeling/actions/Action.spec.ts +40 -8
  144. package/tests/unit/modeling/actions/CreateAction.spec.ts +5 -5
  145. package/tests/unit/modeling/actions/DeleteAction.spec.ts +6 -6
  146. package/tests/unit/modeling/actions/ListAction.spec.ts +7 -7
  147. package/tests/unit/modeling/actions/ReadAction.spec.ts +6 -6
  148. package/tests/unit/modeling/actions/SearchAction.spec.ts +6 -6
  149. package/tests/unit/modeling/actions/UpdateAction.spec.ts +6 -6
  150. package/tests/unit/{amf → modeling/amf}/data_value_generator.spec.ts +2 -2
  151. package/tests/unit/modeling/amf/shape_generator.spec.ts +146 -167
  152. package/tests/unit/modeling/api_model.spec.ts +190 -13
  153. package/tests/unit/modeling/api_model_expose_entity.spec.ts +43 -19
  154. package/tests/unit/modeling/api_model_remove_entity.spec.ts +6 -6
  155. package/tests/unit/modeling/domain_asociation.spec.ts +13 -13
  156. package/tests/unit/modeling/exposed_entity.spec.ts +123 -3
  157. package/tests/unit/modeling/exposed_entity_actions.spec.ts +41 -18
  158. package/tests/unit/modeling/exposed_entity_setter_validation.spec.ts +1 -1
  159. package/tests/unit/modeling/rules/restoring_rules.spec.ts +9 -5
  160. package/tests/unit/modeling/validation/api_model_rules.spec.ts +324 -0
  161. package/tests/unit/runtime/runners/http_assertion_runner.spec.ts +1 -1
  162. package/tests/unit/runtime/runners/http_flow_runner.spec.ts +1 -1
  163. package/tests/unit/runtime/runners/project_runner.spec.ts +1 -1
  164. package/tests/unit/runtime/runners/request_runner.spec.ts +1 -1
  165. package/tests/unit/runtime/runners/serial_runner.spec.ts +1 -1
  166. package/tsconfig.browser.json +1 -1
  167. package/tsconfig.node.json +1 -1
  168. package/bin/test-web.ts +0 -6
  169. package/build/src/amf/AmfMixin.d.ts +0 -396
  170. package/build/src/amf/AmfMixin.d.ts.map +0 -1
  171. package/build/src/amf/AmfMixin.js +0 -1138
  172. package/build/src/amf/AmfMixin.js.map +0 -1
  173. package/build/src/amf/AmfSerializer.d.ts +0 -137
  174. package/build/src/amf/AmfSerializer.d.ts.map +0 -1
  175. package/build/src/amf/AmfSerializer.js +0 -1947
  176. package/build/src/amf/AmfSerializer.js.map +0 -1
  177. package/build/src/amf/AmfTypes.d.ts +0 -25
  178. package/build/src/amf/AmfTypes.d.ts.map +0 -1
  179. package/build/src/amf/AmfTypes.js +0 -143
  180. package/build/src/amf/AmfTypes.js.map +0 -1
  181. package/build/src/amf/ApiExampleGenerator.d.ts +0 -40
  182. package/build/src/amf/ApiExampleGenerator.d.ts.map +0 -1
  183. package/build/src/amf/ApiExampleGenerator.js +0 -112
  184. package/build/src/amf/ApiExampleGenerator.js.map +0 -1
  185. package/build/src/amf/ApiMonacoSchemaGenerator.d.ts +0 -68
  186. package/build/src/amf/ApiMonacoSchemaGenerator.d.ts.map +0 -1
  187. package/build/src/amf/ApiMonacoSchemaGenerator.js +0 -248
  188. package/build/src/amf/ApiMonacoSchemaGenerator.js.map +0 -1
  189. package/build/src/amf/ApiSchemaGenerator.d.ts +0 -56
  190. package/build/src/amf/ApiSchemaGenerator.d.ts.map +0 -1
  191. package/build/src/amf/ApiSchemaGenerator.js +0 -94
  192. package/build/src/amf/ApiSchemaGenerator.js.map +0 -1
  193. package/build/src/amf/ApiSchemaValues.d.ts +0 -111
  194. package/build/src/amf/ApiSchemaValues.d.ts.map +0 -1
  195. package/build/src/amf/ApiSchemaValues.js +0 -463
  196. package/build/src/amf/ApiSchemaValues.js.map +0 -1
  197. package/build/src/amf/DataValueGenerator.d.ts.map +0 -1
  198. package/build/src/amf/DataValueGenerator.js.map +0 -1
  199. package/build/src/amf/Parsing.d.ts +0 -48
  200. package/build/src/amf/Parsing.d.ts.map +0 -1
  201. package/build/src/amf/Parsing.js +0 -2
  202. package/build/src/amf/Parsing.js.map +0 -1
  203. package/build/src/amf/Utils.d.ts +0 -37
  204. package/build/src/amf/Utils.d.ts.map +0 -1
  205. package/build/src/amf/Utils.js +0 -169
  206. package/build/src/amf/Utils.js.map +0 -1
  207. package/build/src/amf/data-node/DataNodeBase.d.ts +0 -34
  208. package/build/src/amf/data-node/DataNodeBase.d.ts.map +0 -1
  209. package/build/src/amf/data-node/DataNodeBase.js +0 -77
  210. package/build/src/amf/data-node/DataNodeBase.js.map +0 -1
  211. package/build/src/amf/data-node/JsonDataNodeGenerator.d.ts +0 -15
  212. package/build/src/amf/data-node/JsonDataNodeGenerator.d.ts.map +0 -1
  213. package/build/src/amf/data-node/JsonDataNodeGenerator.js +0 -23
  214. package/build/src/amf/data-node/JsonDataNodeGenerator.js.map +0 -1
  215. package/build/src/amf/data-node/UrlEncodedDataNodeGenerator.d.ts +0 -14
  216. package/build/src/amf/data-node/UrlEncodedDataNodeGenerator.d.ts.map +0 -1
  217. package/build/src/amf/data-node/UrlEncodedDataNodeGenerator.js +0 -48
  218. package/build/src/amf/data-node/UrlEncodedDataNodeGenerator.js.map +0 -1
  219. package/build/src/amf/data-node/XmlDataNodeGenerator.d.ts +0 -22
  220. package/build/src/amf/data-node/XmlDataNodeGenerator.d.ts.map +0 -1
  221. package/build/src/amf/data-node/XmlDataNodeGenerator.js +0 -34
  222. package/build/src/amf/data-node/XmlDataNodeGenerator.js.map +0 -1
  223. package/build/src/amf/definitions/Amf.d.ts +0 -363
  224. package/build/src/amf/definitions/Amf.d.ts.map +0 -1
  225. package/build/src/amf/definitions/Amf.js +0 -3
  226. package/build/src/amf/definitions/Amf.js.map +0 -1
  227. package/build/src/amf/definitions/Api.d.ts +0 -383
  228. package/build/src/amf/definitions/Api.d.ts.map +0 -1
  229. package/build/src/amf/definitions/Api.js +0 -2
  230. package/build/src/amf/definitions/Api.js.map +0 -1
  231. package/build/src/amf/definitions/Base.d.ts +0 -12
  232. package/build/src/amf/definitions/Base.d.ts.map +0 -1
  233. package/build/src/amf/definitions/Base.js +0 -2
  234. package/build/src/amf/definitions/Base.js.map +0 -1
  235. package/build/src/amf/definitions/Namespace.d.ts +0 -327
  236. package/build/src/amf/definitions/Namespace.d.ts.map +0 -1
  237. package/build/src/amf/definitions/Namespace.js +0 -346
  238. package/build/src/amf/definitions/Namespace.js.map +0 -1
  239. package/build/src/amf/definitions/Shapes.d.ts +0 -312
  240. package/build/src/amf/definitions/Shapes.d.ts.map +0 -1
  241. package/build/src/amf/definitions/Shapes.js +0 -87
  242. package/build/src/amf/definitions/Shapes.js.map +0 -1
  243. package/build/src/amf/models/AmfDataNode.d.ts +0 -67
  244. package/build/src/amf/models/AmfDataNode.d.ts.map +0 -1
  245. package/build/src/amf/models/AmfDataNode.js +0 -192
  246. package/build/src/amf/models/AmfDataNode.js.map +0 -1
  247. package/build/src/amf/shape/ShapeBase.d.ts +0 -74
  248. package/build/src/amf/shape/ShapeBase.d.ts.map +0 -1
  249. package/build/src/amf/shape/ShapeBase.js +0 -93
  250. package/build/src/amf/shape/ShapeBase.js.map +0 -1
  251. package/build/src/amf/shape/ShapeJsonSchemaGenerator.d.ts +0 -47
  252. package/build/src/amf/shape/ShapeJsonSchemaGenerator.d.ts.map +0 -1
  253. package/build/src/amf/shape/ShapeJsonSchemaGenerator.js +0 -420
  254. package/build/src/amf/shape/ShapeJsonSchemaGenerator.js.map +0 -1
  255. package/build/src/amf/shape/ShapeXmlSchemaGenerator.d.ts +0 -85
  256. package/build/src/amf/shape/ShapeXmlSchemaGenerator.d.ts.map +0 -1
  257. package/build/src/amf/shape/ShapeXmlSchemaGenerator.js +0 -852
  258. package/build/src/amf/shape/ShapeXmlSchemaGenerator.js.map +0 -1
  259. package/build/src/events/amf/AmfEventTypes.d.ts +0 -7
  260. package/build/src/events/amf/AmfEventTypes.d.ts.map +0 -1
  261. package/build/src/events/amf/AmfEventTypes.js +0 -7
  262. package/build/src/events/amf/AmfEventTypes.js.map +0 -1
  263. package/build/src/events/amf/AmfEvents.d.ts +0 -34
  264. package/build/src/events/amf/AmfEvents.d.ts.map +0 -1
  265. package/build/src/events/amf/AmfEvents.js +0 -63
  266. package/build/src/events/amf/AmfEvents.js.map +0 -1
  267. package/build/src/mocking/RandExp.d.ts +0 -55
  268. package/build/src/mocking/RandExp.d.ts.map +0 -1
  269. package/build/src/mocking/RandExp.js +0 -302
  270. package/build/src/mocking/RandExp.js.map +0 -1
  271. package/build/src/mocking/lib/ret.d.ts +0 -16
  272. package/build/src/mocking/lib/ret.d.ts.map +0 -1
  273. package/build/src/mocking/lib/ret.js +0 -284
  274. package/build/src/mocking/lib/ret.js.map +0 -1
  275. package/data/apis/APIC-187/APIC-187.raml +0 -21
  276. package/data/apis/APIC-187/dataType.raml +0 -132
  277. package/data/apis/APIC-187/example.raml +0 -84
  278. package/data/apis/APIC-188/APIC-188.raml +0 -21
  279. package/data/apis/APIC-188/dataType.raml +0 -132
  280. package/data/apis/APIC-188/example.raml +0 -84
  281. package/data/apis/APIC-233/APIC-233.raml +0 -15
  282. package/data/apis/APIC-391/APIC-391.raml +0 -44
  283. package/data/apis/APIC-391/examples/post-body-request-example.raml +0 -7
  284. package/data/apis/APIC-483/APIC-483.raml +0 -16
  285. package/data/apis/APIC-483/example/list-of-bank-succ.json +0 -32
  286. package/data/apis/APIC-483/schema/response-retrieve-list-bank.json +0 -68
  287. package/data/apis/APIC-487/APIC-487.raml +0 -36
  288. package/data/apis/APIC-655/APIC-655.raml +0 -44
  289. package/data/apis/APIC-655/delivery.json +0 -12
  290. package/data/apis/APIC-689/APIC-689.raml +0 -20
  291. package/data/apis/APIC-690/APIC-690.raml +0 -17
  292. package/data/apis/APIC-690/datatypes/Address.raml +0 -10
  293. package/data/apis/APIC-690/datatypes/Customer.raml +0 -17
  294. package/data/apis/APIC-690/examples/CustomerExample2.raml +0 -17
  295. package/data/apis/APIC-690/examples/CustomersExample.raml +0 -34
  296. package/data/apis/SE-10469/Purchase-Order-oagis-id-dd32f9c6c01048a19e15c423c9c741ae.json +0 -1383
  297. package/data/apis/SE-10469/SE-10469.raml +0 -11
  298. package/data/apis/SE-13092/Examples/PersonExample.raml +0 -7
  299. package/data/apis/SE-13092/SE-13092.raml +0 -37
  300. package/data/apis/SE-13092/datatypes/Address.raml +0 -5
  301. package/data/apis/SE-13092/datatypes/InlineType.raml +0 -5
  302. package/data/apis/SE-13092/datatypes/Person.raml +0 -15
  303. package/data/apis/SE-22063/SE-22063.raml +0 -14
  304. package/data/apis/SE-22063/stock.raml +0 -41
  305. package/data/apis/amf-helper-api/amf-helper-api.raml +0 -1024
  306. package/data/apis/amf-helper-api/examples/comment-example.json +0 -42
  307. package/data/apis/amf-helper-api/examples/commentCreateRequest-example.json +0 -7
  308. package/data/apis/amf-helper-api/examples/commentList-example.json +0 -48
  309. package/data/apis/amf-helper-api/examples/person.json +0 -14
  310. package/data/apis/amf-helper-api/examples/person.raml +0 -13
  311. package/data/apis/amf-helper-api/examples/person.xml +0 -14
  312. package/data/apis/amf-helper-api/libraries/comment-lib.raml +0 -143
  313. package/data/apis/amf-helper-api/library.raml +0 -7
  314. package/data/apis/amf-helper-api/schemas/person.json +0 -104
  315. package/data/apis/amf-helper-api/schemas/person.xsd +0 -26
  316. package/data/apis/amf-helper-api/traits/file.raml +0 -33
  317. package/data/apis/amf-helper-api/traits/pagination.raml +0 -80
  318. package/data/apis/amf-helper-api/traits/results.raml +0 -19
  319. package/data/apis/amf-helper-api/traits/visibility.raml +0 -14
  320. package/data/apis/amf-helper-api/types/app-person.raml +0 -101
  321. package/data/apis/amf-helper-api/types/dimensions.raml +0 -24
  322. package/data/apis/amf-helper-api/types/external-type.raml +0 -7
  323. package/data/apis/amf-helper-api/types/image.raml +0 -23
  324. package/data/apis/amf-helper-api/types/product.raml +0 -52
  325. package/data/apis/amf-helper-api/types/resource.raml +0 -11
  326. package/data/apis/amf-helper-api/types/standard-request.raml +0 -50
  327. package/data/apis/amf-helper-api/types/user.raml +0 -37
  328. package/data/apis/arc-demo-api/arc-demo-api.raml +0 -468
  329. package/data/apis/arc-demo-api/examples/e400.xml +0 -4
  330. package/data/apis/arc-demo-api/examples/e401.xml +0 -4
  331. package/data/apis/arc-demo-api/examples/e404.xml +0 -4
  332. package/data/apis/arc-demo-api/examples/image.xml +0 -5
  333. package/data/apis/arc-demo-api/examples/messages-example.json +0 -22
  334. package/data/apis/arc-demo-api/examples/messages-sent-example.json +0 -15
  335. package/data/apis/arc-demo-api/examples/person.json +0 -14
  336. package/data/apis/arc-demo-api/examples/person.url.encoded +0 -1
  337. package/data/apis/arc-demo-api/examples/person.xml +0 -14
  338. package/data/apis/arc-demo-api/examples/product.xml +0 -9
  339. package/data/apis/arc-demo-api/library.raml +0 -36
  340. package/data/apis/arc-demo-api/resourceTypes/app-person.raml +0 -49
  341. package/data/apis/arc-demo-api/resourceTypes/example-types.raml +0 -45
  342. package/data/apis/arc-demo-api/resourceTypes/image.raml +0 -23
  343. package/data/apis/arc-demo-api/resourceTypes/message-sent-type.raml +0 -23
  344. package/data/apis/arc-demo-api/resourceTypes/message-type.raml +0 -33
  345. package/data/apis/arc-demo-api/resourceTypes/product.raml +0 -52
  346. package/data/apis/arc-demo-api/resourceTypes/resource.raml +0 -11
  347. package/data/apis/arc-demo-api/schemas/error-response.xsd +0 -11
  348. package/data/apis/arc-demo-api/schemas/image.xsd +0 -11
  349. package/data/apis/arc-demo-api/schemas/person.json +0 -104
  350. package/data/apis/arc-demo-api/schemas/person.xsd +0 -26
  351. package/data/apis/arc-demo-api/schemas/product.xsd +0 -17
  352. package/data/apis/arc-demo-api/securitySchemes/basic.raml +0 -5
  353. package/data/apis/arc-demo-api/securitySchemes/oauth_2_0.raml +0 -29
  354. package/data/apis/arc-demo-api/securitySchemes/x-custom.raml +0 -26
  355. package/data/apis/arc-demo-api/traits/adminable.raml +0 -23
  356. package/data/apis/arc-demo-api/traits/pagination.raml +0 -83
  357. package/data/apis/arc-demo-api/traits/rate-limited.raml +0 -9
  358. package/data/apis/async-api/async-api.yaml +0 -96
  359. package/data/apis/example-generator-api/contact-email-example.raml +0 -6
  360. package/data/apis/example-generator-api/contact-example.raml +0 -5
  361. package/data/apis/example-generator-api/contact-fax-example.raml +0 -5
  362. package/data/apis/example-generator-api/contact-website-example.raml +0 -2
  363. package/data/apis/example-generator-api/example-1.raml +0 -6
  364. package/data/apis/example-generator-api/example-2.raml +0 -9
  365. package/data/apis/example-generator-api/example-3.raml +0 -4
  366. package/data/apis/example-generator-api/example-4.raml +0 -2
  367. package/data/apis/example-generator-api/example-5.raml +0 -4
  368. package/data/apis/example-generator-api/example-6.raml +0 -2
  369. package/data/apis/example-generator-api/example-7.raml +0 -5
  370. package/data/apis/example-generator-api/example-generator-api.raml +0 -423
  371. package/data/apis/example-generator-api/example.json +0 -14
  372. package/data/apis/example-generator-api/example.xml +0 -15
  373. package/data/apis/example-generator-api/example.xsd +0 -26
  374. package/data/apis/example-generator-api/examples/employee.raml +0 -7
  375. package/data/apis/example-generator-api/examples/employees.raml +0 -7
  376. package/data/apis/example-generator-api/linked-named-example.raml +0 -21
  377. package/data/apis/example-generator-api/named-example-with-link.raml +0 -5
  378. package/data/apis/example-generator-api/named-example.raml +0 -9
  379. package/data/apis/example-generator-api/user-json-example.raml +0 -17
  380. package/data/apis/example-generator-api/user-raml-example.raml +0 -37
  381. package/data/apis/example-generator-api/user.json +0 -8
  382. package/data/apis/example-generator-api/user.raml +0 -18
  383. package/data/apis/example-generator-api/users-json-example.raml +0 -17
  384. package/data/apis/example-generator-api/users-raml-example.raml +0 -32
  385. package/data/apis/example-generator-api/users.json +0 -8
  386. package/data/apis/expanded-api/expanded-api.raml +0 -8
  387. package/data/apis/flattened-api/flattened-api.raml +0 -8
  388. package/data/apis/multiple-servers/multiple-servers.yaml +0 -112
  389. package/data/apis/oas-3-api/oas-3-api.yaml +0 -356
  390. package/data/apis/oas-date/oas-date.yaml +0 -28
  391. package/data/apis/oas-types/oas-types.yaml +0 -159
  392. package/data/apis/oas-unions/oas-unions.yaml +0 -75
  393. package/data/apis/petstore/petstore.yaml +0 -954
  394. package/data/apis/raml-date/raml-date.raml +0 -28
  395. package/data/apis/recursive/recursive.raml +0 -14
  396. package/data/apis/schema-api/examples/person.json +0 -14
  397. package/data/apis/schema-api/examples/person.raml +0 -14
  398. package/data/apis/schema-api/examples/person.url.encoded +0 -1
  399. package/data/apis/schema-api/examples/person.xml +0 -14
  400. package/data/apis/schema-api/library/demo-types.raml +0 -43
  401. package/data/apis/schema-api/schema-api.raml +0 -656
  402. package/data/apis/schema-api/schemas/person.json +0 -104
  403. package/data/apis/schema-api/schemas/person.xsd +0 -26
  404. package/data/apis/schema-api/types/DemoPerson.raml +0 -67
  405. package/data/apis/secured-api/oauth-2-custom-settings.raml +0 -143
  406. package/data/apis/secured-api/oauth2-header-delivery.raml +0 -13
  407. package/data/apis/secured-api/oauth2-no-delivery.raml +0 -8
  408. package/data/apis/secured-api/oauth2-no-grants.raml +0 -12
  409. package/data/apis/secured-api/oauth2-pkce.raml +0 -13
  410. package/data/apis/secured-api/oauth2-query-delivery.raml +0 -13
  411. package/data/apis/secured-api/oauth_1_0.raml +0 -8
  412. package/data/apis/secured-api/oauth_1_0_no-settings.raml +0 -3
  413. package/data/apis/secured-api/oauth_1_0_no-signature.raml +0 -7
  414. package/data/apis/secured-api/oauth_1_0_signature.raml +0 -8
  415. package/data/apis/secured-api/passthrough-querystring.raml +0 -16
  416. package/data/apis/secured-api/passthrough.raml +0 -24
  417. package/data/apis/secured-api/secured-api.raml +0 -231
  418. package/data/apis/secured-api/x-custom.raml +0 -33
  419. package/data/apis/secured-api/x-other.raml +0 -29
  420. package/data/apis/secured-api/x-query-string.raml +0 -16
  421. package/data/apis/tracked-examples/datatypes/employee.raml +0 -5
  422. package/data/apis/tracked-examples/examples/employee.raml +0 -4
  423. package/data/apis/tracked-examples/examples/employees.raml +0 -8
  424. package/data/apis/tracked-examples/tracked-to-linked.raml +0 -28
  425. package/data/model.js +0 -129
  426. package/data/models/APIC-187.json +0 -11416
  427. package/data/models/APIC-188.json +0 -11416
  428. package/data/models/APIC-233.json +0 -539
  429. package/data/models/APIC-391.json +0 -1903
  430. package/data/models/APIC-483.json +0 -3110
  431. package/data/models/APIC-487.json +0 -1225
  432. package/data/models/APIC-655.json +0 -3145
  433. package/data/models/APIC-689.json +0 -797
  434. package/data/models/APIC-690.json +0 -5992
  435. package/data/models/SE-10469.json +0 -22898
  436. package/data/models/SE-13092.json +0 -2769
  437. package/data/models/SE-22063.json +0 -2314
  438. package/data/models/amf-helper-api.json +0 -84457
  439. package/data/models/arc-demo-api.json +0 -52041
  440. package/data/models/async-api.json +0 -3227
  441. package/data/models/example-generator-api.json +0 -45209
  442. package/data/models/expanded-api.json +0 -251
  443. package/data/models/flattened-api.json +0 -251
  444. package/data/models/multiple-servers.json +0 -2769
  445. package/data/models/oas-3-api.json +0 -10590
  446. package/data/models/oas-date.json +0 -637
  447. package/data/models/oas-types.json +0 -5352
  448. package/data/models/oas-unions.json +0 -1935
  449. package/data/models/petstore.json +0 -27712
  450. package/data/models/raml-date.json +0 -1114
  451. package/data/models/recursive.json +0 -610
  452. package/data/models/schema-api.json +0 -35527
  453. package/data/models/secured-api.json +0 -21071
  454. package/data/models/tracked-to-linked.json +0 -1914
  455. package/src/amf/AmfMixin.ts +0 -1726
  456. package/src/amf/AmfSerializer.ts +0 -2358
  457. package/src/amf/AmfTypes.ts +0 -147
  458. package/src/amf/ApiExampleGenerator.ts +0 -122
  459. package/src/amf/ApiMonacoSchemaGenerator.ts +0 -332
  460. package/src/amf/ApiSchemaGenerator.ts +0 -115
  461. package/src/amf/ApiSchemaValues.ts +0 -509
  462. package/src/amf/Parsing.ts +0 -50
  463. package/src/amf/Utils.ts +0 -172
  464. package/src/amf/data-node/DataNodeBase.ts +0 -83
  465. package/src/amf/data-node/JsonDataNodeGenerator.ts +0 -24
  466. package/src/amf/data-node/README.md +0 -3
  467. package/src/amf/data-node/UrlEncodedDataNodeGenerator.ts +0 -49
  468. package/src/amf/data-node/XmlDataNodeGenerator.ts +0 -46
  469. package/src/amf/definitions/Amf.ts +0 -440
  470. package/src/amf/definitions/Api.ts +0 -445
  471. package/src/amf/definitions/Base.ts +0 -13
  472. package/src/amf/definitions/Namespace.ts +0 -357
  473. package/src/amf/definitions/Shapes.ts +0 -438
  474. package/src/amf/models/AmfDataNode.ts +0 -210
  475. package/src/amf/shape/README.md +0 -4
  476. package/src/amf/shape/ShapeBase.ts +0 -174
  477. package/src/amf/shape/ShapeJsonSchemaGenerator.ts +0 -457
  478. package/src/amf/shape/ShapeXmlSchemaGenerator.ts +0 -933
  479. package/src/events/amf/AmfEventTypes.ts +0 -6
  480. package/src/events/amf/AmfEvents.ts +0 -78
  481. package/src/mocking/RandExp.ts +0 -335
  482. package/src/mocking/lib/ret.ts +0 -279
  483. package/tests/unit/amf/APIC-187.spec.ts +0 -41
  484. package/tests/unit/amf/APIC-188.spec.ts +0 -30
  485. package/tests/unit/amf/APIC-233.spec.ts +0 -32
  486. package/tests/unit/amf/APIC-391.spec.ts +0 -39
  487. package/tests/unit/amf/APIC-487.spec.ts +0 -44
  488. package/tests/unit/amf/APIC-655.spec.ts +0 -41
  489. package/tests/unit/amf/APIC-689.spec.ts +0 -28
  490. package/tests/unit/amf/APIC-690.spec.ts +0 -93
  491. package/tests/unit/amf/AmfLoader.ts +0 -538
  492. package/tests/unit/amf/AmfMixin.spec.ts +0 -1707
  493. package/tests/unit/amf/ApiExampleGenerator.spec.ts +0 -250
  494. package/tests/unit/amf/ApiMonacoSchemaGenerator.spec.ts +0 -183
  495. package/tests/unit/amf/ApiSchemaValues.spec.ts +0 -602
  496. package/tests/unit/amf/Namepsace.spec.ts +0 -494
  497. package/tests/unit/amf/SE-10469.spec.ts +0 -35
  498. package/tests/unit/amf/SE-13092.spec.ts +0 -64
  499. package/tests/unit/amf/SE-22063.spec.ts +0 -45
  500. package/tests/unit/amf/raml-examples.spec.ts +0 -43
  501. package/tests/unit/amf/schema_gen_array.spec.ts +0 -199
  502. package/tests/unit/amf/schema_gen_oas.spec.ts +0 -140
  503. package/tests/unit/amf/schema_gen_object.spec.ts +0 -279
  504. package/tests/unit/amf/schema_gen_scalar.spec.ts +0 -143
  505. package/tests/unit/amf/schema_gen_union.spec.ts +0 -401
  506. package/tests/unit/amf/schema_gen_unknown.spec.ts +0 -42
  507. package/tests/unit/amf/schema_gen_xml.spec.ts +0 -726
  508. package/tests/unit/amf/serializer/APIC-483.spec.ts +0 -36
  509. package/tests/unit/amf/serializer/Anotations.spec.ts +0 -50
  510. package/tests/unit/amf/serializer/Api.spec.ts +0 -210
  511. package/tests/unit/amf/serializer/Documentation.spec.ts +0 -52
  512. package/tests/unit/amf/serializer/Endpoints.spec.ts +0 -172
  513. package/tests/unit/amf/serializer/Operations.spec.ts +0 -330
  514. package/tests/unit/amf/serializer/Parameters.spec.ts +0 -149
  515. package/tests/unit/amf/serializer/PayloadExamples.spec.ts +0 -152
  516. package/tests/unit/amf/serializer/Security.spec.ts +0 -626
  517. package/tests/unit/amf/serializer/Server.spec.ts +0 -78
  518. package/tests/unit/amf/serializer/Shapes.spec.ts +0 -304
  519. package/tests/unit/amf/serializer/SourceMaps.spec.ts +0 -52
  520. package/tests/unit/amf/shapes/ShapeXmlSchemaGenerator.spec.ts +0 -28
  521. package/tests/unit/amf/tracked-to-linked.spec.ts +0 -90
  522. package/tests/unit/amf/xml-data-processing.spec.ts +0 -217
  523. package/tests/unit/events/amf.spec.ts +0 -151
@@ -0,0 +1,58 @@
1
+ # ApiModel Validation Rules
2
+
3
+ This document outlines the validation rules for the `ApiModel` schema. These rules ensure that an API model is structurally sound, secure, and ready for use or publication.
4
+
5
+ Validations are evaluated with one of three severity levels:
6
+ - **Error**: A blocker that makes the model invalid and must be resolved (e.g., missing required configurations or broken references).
7
+ - **Warning**: A non-blocker, typically indicating missing optional but recommended properties, or non-optimal configurations.
8
+ - **Info**: Informational messages about the model's status or suggestions for improvement.
9
+
10
+ ## 1. Core Properties
11
+ - **`kind`** [Error]: Must be exactly the value defined by `ApiModelKind`.
12
+ - **`key`** [Error]: Must be a defined, non-empty string.
13
+ - **`info.name`** [Error]: The `info` property must be a valid structure with at least a `name` defined.
14
+ - **`info.description`** [Warning]: It is highly recommended to provide a description for the API model.
15
+
16
+ ## 2. Domain Dependency
17
+ - **Domain Attachment** [Error]: The API model must have an attached `DataDomain`.
18
+ - **Domain Versioning** [Error]: The attached Data Domain must have a `version` defined (`domain.info.version`).
19
+
20
+ ## 3. Security & Access Control
21
+ - **Authentication** [Error]: The `authentication` configuration is required.
22
+ - If the strategy is `UsernamePassword`, the `passwordKey` must be defined.
23
+ - **Authorization** [Error]: The `authorization` configuration is required.
24
+ - If the strategy is `RBAC`, the `roleKey` must be defined.
25
+ - **Session Configuration** [Error]: The `session` configuration is required and must meet the following criteria:
26
+ - **Secret**: A session encryption token (`secret`) is required.
27
+ - **Properties**: The `session.properties` array must have at least one property set (e.g. to identify the User ID).
28
+ - **RBAC Role Property**: If the authorization strategy is `RBAC`, the `session.properties` must also map the role property into the session payload.
29
+ - **Transports**: At least one session transport (such as `cookie` or `jwt`) must be configured and marked as `enabled`.
30
+ - **User Entity** [Error]: A designated `user` entity reference is required. This reference must point to a Data Entity that is appropriately annotated with the `User` semantic.
31
+ - **Action Access Rules** [Error]: Each configured operation (Action) must have at least one access rule defined that applies to it. This can be inherited from the API Model level, the Exposed Entity level, any parent Exposed Entity, or explicitly defined on the Action itself.
32
+
33
+ ## 4. Exposures
34
+ - **Path Integrity** [Error]:
35
+ - If an exposure `hasCollection` is true, it MUST have a `collectionPath` defined.
36
+ - The `collectionPath` (if present) must contain exactly one segment starting with `/`.
37
+ - The `resourcePath` MUST be defined. If it has a collection, the resource path must be exactly the collection path plus a single parameter segment (e.g., `/products/{productId}`). If it does not have a collection, it must be exactly two segments (e.g. `/profile/{id}`).
38
+ - **Path Collisions** [Error]: For root exposures (`isRoot: true`), the `collectionPath` (if present) and `resourcePath` must be unique across the API model to prevent routing conflicts.
39
+ - **Valid Entity Reference** [Error]: Each exposed entity must reference a valid entity `key` that exists within the attached `DataDomain`.
40
+ - **Exposures Exist** [Warning]: If no entities are exposed, the API model will not generate any endpoints.
41
+
42
+ ## 5. API Actions
43
+ - **Minimum Actions** [Error]: Each exposed entity must have at least one action added to it in the `actions` array.
44
+ - **Rate Limiting** [Warning]: It is recommended to set up rate limiting for exposed entities and individual actions to protect the API.
45
+ - **List Action** [Error/Warning]:
46
+ - **Pagination** [Error]: The `List` action strictly requires a pagination definition (`pagination.kind` must be defined as `offset` or `cursor`).
47
+ - **Filtering/Sorting** [Warning]: It is recommended to define `filterableFields` and `sortableFields`, but it is up to the user.
48
+ - **Search Action** [Error]: The `Search` action requires the user to define at least one indexable field in the `fields` array to perform the search on.
49
+ - **Delete Action** [Error/Info]:
50
+ - **Strategy** [Error]: The `Delete` action must define a deletion strategy (`soft` or `hard`).
51
+ - **Hard Delete Warning** [Info]: When the `hard` delete strategy is selected, print an info message that there will be no way to restore data.
52
+ - **Update Action** [Error]: The `Update` action must have at least one update method chosen in the `allowedMethods` array (e.g., `PUT` or `PATCH`).
53
+
54
+ ## 6. Metadata
55
+ - **Contact Email** [Error]: If `contact.email` is provided, it MUST be in the format of a valid email address.
56
+ - **Contact URL** [Error]: If `contact.url` is provided, it MUST be in the format of a valid URL.
57
+ - **License URL** [Error]: If `license.url` is provided, it MUST be in the format of a valid URL.
58
+ - **Terms of Service / Contact / License info** [Info]: It's good practice to provide contact information, a license, and terms of service for a published API.
@@ -86,9 +86,7 @@ export class AssociationValidation {
86
86
  return results
87
87
  }
88
88
  for (const target of association.targets) {
89
- const entity = target.domain
90
- ? this.domain.findForeignEntity(target.key, target.domain)
91
- : this.domain.findEntity(target.key)
89
+ const entity = this.domain.findEntity(target.key, target.domain)
92
90
  if (!entity) {
93
91
  const message = `The "${label}" association has an invalid target "${target.key}".`
94
92
  const help = `The target must be defined in the domain.`
@@ -10,7 +10,7 @@ import {
10
10
  DataSourceConfiguration,
11
11
  } from '../../models/legacy/actions/Actions.js'
12
12
  import { IHttpFlow, IHttpAction, FlowSourceEnum, FlowRequestDataEnum, FlowResponseDataEnum } from './HttpFlows.js'
13
- import { AmfNamespace } from '../../amf/definitions/Namespace.js'
13
+ import { AmfNamespace } from '@api-client/amf-core'
14
14
  import { IHttpStep } from './HttpStep.js'
15
15
  import { IReadDataStep, ReadDataStep, ReadDataStepKind } from './steps/data/ReadDataStep.js'
16
16
  import { ISetDataStep, SetDataStepKind } from './steps/data/SetDataStep.js'
@@ -27,7 +27,7 @@ import { ISubstringStep, SubstringStepKind } from '../../models/http-flows/steps
27
27
  import { TrimStepKind } from '../../models/http-flows/steps/transformation/TrimStep.js'
28
28
  import { EqualAssertionKind, IEqualAssertion } from '../../models/http-flows/steps/assertion/EqualAssertion.js'
29
29
  import { INotEqualAssertion, NotEqualAssertionKind } from '../../models/http-flows/steps/assertion/NotEqualAssertion.js'
30
- import { ApiSchemaValues } from '../../amf/ApiSchemaValues.js'
30
+ import { ApiSchemaValues } from '@api-client/amf-core'
31
31
  import {
32
32
  GreaterThanAssertionKind,
33
33
  IGreaterThanAssertion,
@@ -1,10 +1,11 @@
1
1
  import { test } from '@japa/runner'
2
2
  import { Action, AccessRule, RateLimitingConfiguration } from '../../../../src/modeling/index.js'
3
3
  import { type ActionSchema } from '../../../../src/modeling/actions/Action.js'
4
+ import { type ExposedEntity } from '../../../../src/modeling/ExposedEntity.js'
4
5
 
5
6
  test.group('Action', () => {
6
7
  test('initializes with default values', ({ assert }) => {
7
- const action = new Action()
8
+ const action = new Action({} as unknown as ExposedEntity)
8
9
  assert.equal(action.kind, '')
9
10
  assert.deepEqual(action.accessRule, [])
10
11
  assert.isUndefined(action.rateLimiting)
@@ -16,7 +17,7 @@ test.group('Action', () => {
16
17
  accessRule: [{ type: 'allowPublic' }],
17
18
  rateLimiting: { rules: [] },
18
19
  }
19
- const action = new Action(schema)
20
+ const action = new Action({} as unknown as ExposedEntity, schema)
20
21
  assert.equal(action.kind, 'read')
21
22
  assert.lengthOf(action.accessRule, 1)
22
23
  assert.instanceOf(action.accessRule[0], AccessRule)
@@ -25,7 +26,7 @@ test.group('Action', () => {
25
26
  }).tags(['@modeling', '@action'])
26
27
 
27
28
  test('serializes to JSON', ({ assert }) => {
28
- const action = new Action({
29
+ const action = new Action({} as unknown as ExposedEntity, {
29
30
  kind: 'write',
30
31
  accessRule: [{ type: 'allowPublic' }],
31
32
  rateLimiting: { rules: [] },
@@ -38,7 +39,7 @@ test.group('Action', () => {
38
39
  }).tags(['@modeling', '@action'])
39
40
 
40
41
  test('notifies change when kind changes', async ({ assert }) => {
41
- const action = new Action({ kind: 'read' })
42
+ const action = new Action({} as unknown as ExposedEntity, { kind: 'read' })
42
43
  let notified = false
43
44
  action.addEventListener('change', () => {
44
45
  notified = true
@@ -52,7 +53,7 @@ test.group('Action', () => {
52
53
  }).tags(['@modeling', '@action', '@observed'])
53
54
 
54
55
  test('notifies change when accessRule array is replaced', async ({ assert }) => {
55
- const action = new Action()
56
+ const action = new Action({} as unknown as ExposedEntity)
56
57
  let notified = false
57
58
  action.addEventListener('change', () => {
58
59
  notified = true
@@ -64,7 +65,7 @@ test.group('Action', () => {
64
65
  }).tags(['@modeling', '@action', '@observed'])
65
66
 
66
67
  test('notifies change when rateLimiting is replaced', async ({ assert }) => {
67
- const action = new Action()
68
+ const action = new Action({} as unknown as ExposedEntity)
68
69
  let notified = false
69
70
  action.addEventListener('change', () => {
70
71
  notified = true
@@ -77,7 +78,7 @@ test.group('Action', () => {
77
78
 
78
79
  test('constructor copies accessRule array (immutability)', ({ assert }) => {
79
80
  const rules = [{ type: 'allowPublic' }]
80
- const action = new Action({ kind: 'read', accessRule: rules })
81
+ const action = new Action({} as unknown as ExposedEntity, { kind: 'read', accessRule: rules })
81
82
 
82
83
  // Modify original array
83
84
  rules.push({ type: 'other' })
@@ -88,7 +89,7 @@ test.group('Action', () => {
88
89
  }).tags(['@modeling', '@action', '@immutability'])
89
90
 
90
91
  test('toJSON returns safe copy', ({ assert }) => {
91
- const action = new Action({
92
+ const action = new Action({} as unknown as ExposedEntity, {
92
93
  kind: 'read',
93
94
  accessRule: [{ type: 'allowPublic' }],
94
95
  rateLimiting: { rules: [] },
@@ -106,4 +107,35 @@ test.group('Action', () => {
106
107
  assert.lengthOf(action.accessRule, 1)
107
108
  assert.equal(action.accessRule[0].type, 'allowPublic')
108
109
  }).tags(['@modeling', '@action', '@immutability'])
110
+
111
+ test('getAllRules() aggregates rules from action and parent', ({ assert }) => {
112
+ const parent = {
113
+ getAllRules: () => [new AccessRule({ type: 'allowPublic' })],
114
+ } as unknown as ExposedEntity
115
+
116
+ const action = new Action(parent, {
117
+ accessRule: [{ type: 'allowAuthenticated' }],
118
+ })
119
+
120
+ const rules = action.getAllRules()
121
+ assert.lengthOf(rules, 2)
122
+ assert.equal(rules[0].type, 'allowPublic')
123
+ assert.equal(rules[1].type, 'allowAuthenticated')
124
+ }).tags(['@modeling', '@action', '@rules'])
125
+
126
+ test('getAllRateLimiters() aggregates rate limiters from action and parent', ({ assert }) => {
127
+ const parentLimiter = new RateLimitingConfiguration({ rules: [{ rate: 10, interval: 'second' }] })
128
+ const parent = {
129
+ getAllRateLimiters: () => [parentLimiter],
130
+ } as unknown as ExposedEntity
131
+
132
+ const action = new Action(parent, {
133
+ rateLimiting: { rules: [{ rate: 20, interval: 'minute' }] },
134
+ })
135
+
136
+ const limiters = action.getAllRateLimiters()
137
+ assert.lengthOf(limiters, 2)
138
+ assert.equal(limiters[0].rules[0].rate, 10)
139
+ assert.equal(limiters[1].rules[0].rate, 20)
140
+ }).tags(['@modeling', '@action', '@rate-limiting'])
109
141
  })
@@ -4,13 +4,13 @@ import { AccessRule } from '../../../../src/modeling/rules/index.js'
4
4
 
5
5
  test.group('CreateAction', () => {
6
6
  test('initializes with default values', ({ assert }) => {
7
- const action = new CreateAction()
7
+ const action = new CreateAction({} as any)
8
8
  assert.equal(action.kind, 'create')
9
9
  assert.isEmpty(action.accessRule) // Inherited from Action
10
10
  }).tags(['@modeling', '@action', '@create-action'])
11
11
 
12
12
  test('initializes with inherited values', ({ assert }) => {
13
- const action = new CreateAction({
13
+ const action = new CreateAction({} as any, {
14
14
  accessRule: [{ type: 'allowPublic' }],
15
15
  })
16
16
 
@@ -22,7 +22,7 @@ test.group('CreateAction', () => {
22
22
  test('constructor copies arrays (immutability)', ({ assert }) => {
23
23
  const rules = [{ type: 'allowPublic' }]
24
24
 
25
- const action = new CreateAction({
25
+ const action = new CreateAction({} as any, {
26
26
  accessRule: rules,
27
27
  })
28
28
 
@@ -35,7 +35,7 @@ test.group('CreateAction', () => {
35
35
  }).tags(['@modeling', '@action', '@create-action', '@immutability'])
36
36
 
37
37
  test('toJSON returns valid schema', ({ assert }) => {
38
- const action = new CreateAction({
38
+ const action = new CreateAction({} as any, {
39
39
  accessRule: [{ type: 'allowPublic' }],
40
40
  })
41
41
 
@@ -51,7 +51,7 @@ test.group('CreateAction', () => {
51
51
  }).tags(['@modeling', '@action', '@create-action', '@serialization'])
52
52
 
53
53
  test('notifies change when inherited property changes', async ({ assert }) => {
54
- const action = new CreateAction()
54
+ const action = new CreateAction({} as any)
55
55
  let notified = false
56
56
  action.addEventListener('change', () => {
57
57
  notified = true
@@ -3,7 +3,7 @@ import { DeleteAction } from '../../../../src/modeling/actions/DeleteAction.js'
3
3
 
4
4
  test.group('DeleteAction', () => {
5
5
  test('initializes with default values', ({ assert }) => {
6
- const action = new DeleteAction()
6
+ const action = new DeleteAction({} as any)
7
7
  assert.equal(action.kind, 'delete')
8
8
  assert.equal(action.strategy, 'soft')
9
9
  assert.equal(action.retentionPeriod, 30)
@@ -11,7 +11,7 @@ test.group('DeleteAction', () => {
11
11
  }).tags(['@modeling', '@action', '@delete-action'])
12
12
 
13
13
  test('initializes with provided values', ({ assert }) => {
14
- const action = new DeleteAction({
14
+ const action = new DeleteAction({} as any, {
15
15
  strategy: 'hard',
16
16
  retentionPeriod: 0,
17
17
  accessRule: [{ type: 'allowPublic' }],
@@ -27,7 +27,7 @@ test.group('DeleteAction', () => {
27
27
  test('constructor copies arrays (immutability)', ({ assert }) => {
28
28
  const rules = [{ type: 'allowPublic' }]
29
29
 
30
- const action = new DeleteAction({
30
+ const action = new DeleteAction({} as any, {
31
31
  accessRule: rules,
32
32
  })
33
33
 
@@ -40,7 +40,7 @@ test.group('DeleteAction', () => {
40
40
  }).tags(['@modeling', '@action', '@delete-action', '@immutability'])
41
41
 
42
42
  test('toJSON returns valid schema', ({ assert }) => {
43
- const action = new DeleteAction({
43
+ const action = new DeleteAction({} as any, {
44
44
  strategy: 'hard',
45
45
  retentionPeriod: 0,
46
46
  })
@@ -53,7 +53,7 @@ test.group('DeleteAction', () => {
53
53
  }).tags(['@modeling', '@action', '@delete-action', '@serialization'])
54
54
 
55
55
  test('notifies change when strategy changes', async ({ assert }) => {
56
- const action = new DeleteAction()
56
+ const action = new DeleteAction({} as any)
57
57
  let notified = false
58
58
  action.addEventListener('change', () => {
59
59
  notified = true
@@ -65,7 +65,7 @@ test.group('DeleteAction', () => {
65
65
  }).tags(['@modeling', '@action', '@delete-action', '@observed'])
66
66
 
67
67
  test('notifies change when retentionPeriod changes', async ({ assert }) => {
68
- const action = new DeleteAction()
68
+ const action = new DeleteAction({} as any)
69
69
  let notified = false
70
70
  action.addEventListener('change', () => {
71
71
  notified = true
@@ -4,7 +4,7 @@ import { PaginationStrategy } from '../../../../src/modeling/types.js'
4
4
 
5
5
  test.group('ListAction', () => {
6
6
  test('initializes with default values', ({ assert }) => {
7
- const action = new ListAction()
7
+ const action = new ListAction({} as any)
8
8
  assert.equal(action.kind, 'list')
9
9
  assert.deepEqual(action.pagination, { kind: 'offset' })
10
10
  assert.deepEqual(action.filterableFields, [])
@@ -17,7 +17,7 @@ test.group('ListAction', () => {
17
17
  const filterableFields = ['name', 'status']
18
18
  const sortableFields = ['createdAt']
19
19
 
20
- const action = new ListAction({
20
+ const action = new ListAction({} as any, {
21
21
  pagination,
22
22
  filterableFields,
23
23
  sortableFields,
@@ -33,7 +33,7 @@ test.group('ListAction', () => {
33
33
  const filterableFields = ['name']
34
34
  const sortableFields = ['name']
35
35
 
36
- const action = new ListAction({
36
+ const action = new ListAction({} as any, {
37
37
  pagination,
38
38
  filterableFields,
39
39
  sortableFields,
@@ -50,7 +50,7 @@ test.group('ListAction', () => {
50
50
  }).tags(['@modeling', '@action', '@list-action', '@immutability'])
51
51
 
52
52
  test('toJSON returns safe copy', ({ assert }) => {
53
- const action = new ListAction({
53
+ const action = new ListAction({} as any, {
54
54
  pagination: { kind: 'offset' },
55
55
  filterableFields: ['name'],
56
56
  sortableFields: ['name'],
@@ -69,7 +69,7 @@ test.group('ListAction', () => {
69
69
  }).tags(['@modeling', '@action', '@list-action', '@immutability'])
70
70
 
71
71
  test('notifies change when pagination changes', async ({ assert }) => {
72
- const action = new ListAction()
72
+ const action = new ListAction({} as any)
73
73
  let notified = false
74
74
  action.addEventListener('change', () => {
75
75
  notified = true
@@ -81,7 +81,7 @@ test.group('ListAction', () => {
81
81
  }).tags(['@modeling', '@action', '@list-action', '@observed'])
82
82
 
83
83
  test('notifies change when filterableFields changes', async ({ assert }) => {
84
- const action = new ListAction()
84
+ const action = new ListAction({} as any)
85
85
  let notified = false
86
86
  action.addEventListener('change', () => {
87
87
  notified = true
@@ -93,7 +93,7 @@ test.group('ListAction', () => {
93
93
  }).tags(['@modeling', '@action', '@list-action', '@observed'])
94
94
 
95
95
  test('notifies change when sortableFields changes', async ({ assert }) => {
96
- const action = new ListAction()
96
+ const action = new ListAction({} as any)
97
97
  let notified = false
98
98
  action.addEventListener('change', () => {
99
99
  notified = true
@@ -4,13 +4,13 @@ import { AccessRule } from '../../../../src/modeling/rules/index.js'
4
4
 
5
5
  test.group('ReadAction', () => {
6
6
  test('initializes with default values', ({ assert }) => {
7
- const action = new ReadAction()
7
+ const action = new ReadAction({} as any)
8
8
  assert.equal(action.kind, 'read')
9
9
  assert.isEmpty(action.accessRule) // Inherited from Action
10
10
  }).tags(['@modeling', '@action', '@read-action'])
11
11
 
12
12
  test('initializes with inherited values', ({ assert }) => {
13
- const action = new ReadAction({
13
+ const action = new ReadAction({} as any, {
14
14
  accessRule: [{ type: 'allowPublic' }],
15
15
  })
16
16
 
@@ -22,7 +22,7 @@ test.group('ReadAction', () => {
22
22
  test('constructor copies arrays (immutability)', ({ assert }) => {
23
23
  const rules = [{ type: 'allowPublic' }]
24
24
 
25
- const action = new ReadAction({
25
+ const action = new ReadAction({} as any, {
26
26
  accessRule: rules,
27
27
  })
28
28
 
@@ -35,7 +35,7 @@ test.group('ReadAction', () => {
35
35
  }).tags(['@modeling', '@action', '@read-action', '@immutability'])
36
36
 
37
37
  test('toJSON returns valid schema', ({ assert }) => {
38
- const action = new ReadAction({
38
+ const action = new ReadAction({} as any, {
39
39
  accessRule: [{ type: 'allowPublic' }],
40
40
  })
41
41
 
@@ -51,7 +51,7 @@ test.group('ReadAction', () => {
51
51
  }).tags(['@modeling', '@action', '@read-action', '@serialization'])
52
52
 
53
53
  test('notifies change when inherited property changes', async ({ assert }) => {
54
- const action = new ReadAction()
54
+ const action = new ReadAction({} as any)
55
55
  let notified = false
56
56
  action.addEventListener('change', () => {
57
57
  notified = true
@@ -64,7 +64,7 @@ test.group('ReadAction', () => {
64
64
  }).tags(['@modeling', '@action', '@read-action', '@observed'])
65
65
 
66
66
  test('notifies change when accessRule value change', async ({ assert }) => {
67
- const action = new ReadAction()
67
+ const action = new ReadAction({} as any)
68
68
  let notified = false
69
69
  action.addEventListener('change', () => {
70
70
  notified = true
@@ -3,7 +3,7 @@ import { SearchAction } from '../../../../src/modeling/actions/SearchAction.js'
3
3
 
4
4
  test.group('SearchAction', () => {
5
5
  test('initializes with default values', ({ assert }) => {
6
- const action = new SearchAction()
6
+ const action = new SearchAction({} as any)
7
7
  assert.equal(action.kind, 'search')
8
8
  assert.deepEqual(action.fields, [])
9
9
  assert.isEmpty(action.accessRule)
@@ -11,7 +11,7 @@ test.group('SearchAction', () => {
11
11
 
12
12
  test('initializes with provided values', ({ assert }) => {
13
13
  const fields = ['name', 'description']
14
- const action = new SearchAction({
14
+ const action = new SearchAction({} as any, {
15
15
  fields,
16
16
  })
17
17
 
@@ -22,7 +22,7 @@ test.group('SearchAction', () => {
22
22
  test('constructor copies arrays (immutability)', ({ assert }) => {
23
23
  const fields = ['name']
24
24
 
25
- const action = new SearchAction({
25
+ const action = new SearchAction({} as any, {
26
26
  fields,
27
27
  })
28
28
 
@@ -33,7 +33,7 @@ test.group('SearchAction', () => {
33
33
  }).tags(['@modeling', '@action', '@search-action', '@immutability'])
34
34
 
35
35
  test('toJSON returns valid schema', ({ assert }) => {
36
- const action = new SearchAction({
36
+ const action = new SearchAction({} as any, {
37
37
  fields: ['name'],
38
38
  })
39
39
 
@@ -48,7 +48,7 @@ test.group('SearchAction', () => {
48
48
  }).tags(['@modeling', '@action', '@search-action', '@serialization', '@immutability'])
49
49
 
50
50
  test('notifies change when fields changes', async ({ assert }) => {
51
- const action = new SearchAction()
51
+ const action = new SearchAction({} as any)
52
52
  let notified = false
53
53
  action.addEventListener('change', () => {
54
54
  notified = true
@@ -60,7 +60,7 @@ test.group('SearchAction', () => {
60
60
  }).tags(['@modeling', '@action', '@search-action', '@observed'])
61
61
 
62
62
  test('notifies change when fields value change', async ({ assert }) => {
63
- const action = new SearchAction()
63
+ const action = new SearchAction({} as any)
64
64
  let notified = false
65
65
  action.addEventListener('change', () => {
66
66
  notified = true
@@ -3,7 +3,7 @@ import { UpdateAction } from '../../../../src/modeling/actions/UpdateAction.js'
3
3
 
4
4
  test.group('UpdateAction', () => {
5
5
  test('initializes with default values', ({ assert }) => {
6
- const action = new UpdateAction()
6
+ const action = new UpdateAction({} as any)
7
7
  assert.equal(action.kind, 'update')
8
8
  assert.deepEqual(action.allowedMethods, ['PATCH'])
9
9
  assert.isEmpty(action.accessRule)
@@ -11,7 +11,7 @@ test.group('UpdateAction', () => {
11
11
 
12
12
  test('initializes with provided values', ({ assert }) => {
13
13
  const methods: ('PUT' | 'PATCH')[] = ['PUT', 'PATCH']
14
- const action = new UpdateAction({
14
+ const action = new UpdateAction({} as any, {
15
15
  allowedMethods: methods,
16
16
  })
17
17
 
@@ -22,7 +22,7 @@ test.group('UpdateAction', () => {
22
22
  test('constructor copies arrays (immutability)', ({ assert }) => {
23
23
  const methods: ('PUT' | 'PATCH')[] = ['PUT']
24
24
 
25
- const action = new UpdateAction({
25
+ const action = new UpdateAction({} as any, {
26
26
  allowedMethods: methods,
27
27
  })
28
28
 
@@ -33,7 +33,7 @@ test.group('UpdateAction', () => {
33
33
  }).tags(['@modeling', '@action', '@update-action', '@immutability'])
34
34
 
35
35
  test('toJSON returns valid schema', ({ assert }) => {
36
- const action = new UpdateAction({
36
+ const action = new UpdateAction({} as any, {
37
37
  allowedMethods: ['PUT'],
38
38
  })
39
39
 
@@ -48,7 +48,7 @@ test.group('UpdateAction', () => {
48
48
  }).tags(['@modeling', '@action', '@update-action', '@serialization', '@immutability'])
49
49
 
50
50
  test('notifies change when allowedMethods changes', async ({ assert }) => {
51
- const action = new UpdateAction()
51
+ const action = new UpdateAction({} as any)
52
52
  let notified = false
53
53
  action.addEventListener('change', () => {
54
54
  notified = true
@@ -60,7 +60,7 @@ test.group('UpdateAction', () => {
60
60
  }).tags(['@modeling', '@action', '@update-action', '@observed'])
61
61
 
62
62
  test('notifies change when allowedMethods value change', async ({ assert }) => {
63
- const action = new UpdateAction()
63
+ const action = new UpdateAction({} as any)
64
64
  let notified = false
65
65
  action.addEventListener('change', () => {
66
66
  notified = true
@@ -1,6 +1,6 @@
1
1
  import { test } from '@japa/runner'
2
- import { DataValueGenerator, noValue } from '../../../src/amf/DataValueGenerator.js'
3
- import type { DomainPropertyType } from '../../../src/modeling/DataFormat.js'
2
+ import { DataValueGenerator, noValue } from '../../../../src/modeling/amf/DataValueGenerator.js'
3
+ import type { DomainPropertyType } from '../../../../src/modeling/DataFormat.js'
4
4
 
5
5
  test.group('DataValueGenerator', (group) => {
6
6
  let generator: DataValueGenerator