@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
@@ -1 +1 @@
1
- {"version":3,"file":"ShapeGenerator.js","sourceRoot":"","sources":["../../../../src/modeling/amf/ShapeGenerator.ts"],"names":[],"mappings":"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","sourcesContent":["import { type AssociationBindings, type PropertyWebBindings } from '../Bindings.js'\nimport type { DomainAssociation } from '../DomainAssociation.js'\nimport type { DomainProperty } from '../DomainProperty.js'\nimport type { DomainEntity } from '../DomainEntity.js'\nimport { IAmfExampleTypes, modelTypeToAmfDataType } from '../../amf/AmfTypes.js'\nimport { AmfNamespace } from '../../amf/definitions/Namespace.js'\nimport {\n anyShape,\n arrayShape,\n fileShape,\n IApiAnyShape,\n IApiArrayShape,\n IApiDataExample,\n IApiFileShape,\n IApiNodeShape,\n IApiPropertyShape,\n IApiRecursiveShape,\n IApiScalarShape,\n IApiShape,\n IApiUnionShape,\n IShapeUnion,\n nodeShape,\n propertyShape,\n recursiveShape,\n scalarShape,\n unionShape,\n} from '../../amf/definitions/Shapes.js'\nimport { AmfDataNode } from '../../amf/models/AmfDataNode.js'\nimport { DataValueGenerator } from '../../amf/DataValueGenerator.js'\nimport { nanoid } from '../../nanoid.js'\nimport { DomainEntityKind, DomainPropertyKind } from '../../models/kinds.js'\nimport type { PropertySchema } from '../types.js'\n\nconst UNION_TYPE_ANY_OF = 'anyOf'\nconst UNION_TYPE_ALL_OF = 'allOf'\nconst UNION_TYPE_ONE_OF = 'oneOf'\nconst UNION_TYPE_NOT = 'not'\nconst DATA_TYPE_STRING = 'string'\nconst DATA_TYPE_BINARY = 'binary'\n\n/**\n * Serializes Data Domain elements (DomainEntity, DomainProperty, DomainAssociation)\n * to AMF shapes.\n *\n * This class provides a mechanism to translate a data domain model, defined using\n * custom classes like `DomainEntity`, `DomainProperty`, and `DomainAssociation`,\n * into AMF (API Modeling Framework) shapes. AMF shapes are a standardized way\n * to represent API structures and data models, enabling interoperability and tooling.\n *\n * This is particularly useful when you have a custom data model and need to\n * generate API definitions (e.g., RAML or OAS) from it.\n *\n * **Key Features:**\n *\n * - **Data Domain to AMF Translation:** Converts data domain elements into\n * their corresponding AMF shape representations.\n * - **Recursive Shape Handling:** Detects and handles recursive relationships\n * within the data model to prevent infinite loops during shape generation.\n * - **Union Type Support:** Supports the creation of union types in AMF\n * to represent associations that can point to multiple different entity types.\n * - **Binding Integration:** Leverages binding information (e.g., web bindings)\n * to customize the generated AMF shapes based on the target API format.\n * - **Example and Default Value Generation:** Integrates with a `DataValueGenerator`\n * to automatically generate example values and default values for properties\n * within the AMF shapes.\n *\n * **Usage:**\n *\n * 1. Create an instance of the `ShapeGenerator`.\n * 2. Call the appropriate method (e.g., `entity()`, `property()`, `associationShape()`)\n * to generate the AMF shape for a specific data domain element.\n * 3. The returned AMF shape can then be used with other AMF tools to generate\n * API definitions or perform other API-related tasks.\n */\nexport class ShapeGenerator {\n #valueGenerator?: DataValueGenerator\n\n /**\n * Used with data domain value generation for entity properties.\n * Lazily loaded class only when functions are used.\n * This needs to be a class instances because some functions are incremental\n */\n get valueGenerator(): DataValueGenerator {\n // we need a new instance of the generator for each shape generation\n // as the generator is stateful and we need to reset it for each shape.\n if (!this.#valueGenerator) {\n this.#valueGenerator = new DataValueGenerator()\n }\n return this.#valueGenerator\n }\n\n /**\n * Serializes a `DomainEntity` to an AMF node shape.\n *\n * This method is the entry point for converting a `DomainEntity` into its\n * AMF representation. It handles recursive relationships, property serialization,\n * and inheritance from parent entities.\n *\n * @param input The `DomainEntity` to serialize.\n * @param visited A `Set` of keys of already generated entities. This prevents\n * recursive shape generation and avoids infinite loops. Defaults to a new empty `Set`.\n * @returns An `IApiNodeShape` or `IApiRecursiveShape` representing the entity in AMF.\n * Returns a `IApiRecursiveShape` if a recursive loop is detected.\n * @example\n * ```typescript\n * const generator = new ShapeGenerator();\n * const amfShape = generator.entity(myDomainEntity);\n * ```\n */\n entity(input: DomainEntity, visited = new Set<string>()): IApiNodeShape | IApiRecursiveShape {\n if (visited.has(input.key)) {\n // create a recursive shape.\n return this.createRecursiveShape(input)\n }\n visited.add(input.key)\n const result = nodeShape(input.key)\n result.id = input.key\n this.updateBaseProperties(input, result)\n result.properties = []\n for (const item of input.listProperties()) {\n // we check whether the property is hidden.\n // This is not happening when calling the `property()` because this method\n // always returns the AMF shape.\n const wb = item.readBinding('web') as PropertyWebBindings | undefined\n if (wb && wb.hidden) {\n continue\n }\n const shape = this.property(item)\n result.properties.push(shape)\n }\n for (const assoc of input.listAssociations()) {\n const wb = assoc.readBinding('web') as AssociationBindings | undefined\n if (wb && wb.hidden) {\n continue\n }\n const prop = this.associationProperty(assoc, visited)\n result.properties.push(prop)\n }\n for (const parent of input.listParents()) {\n const shape = this.entity(parent, visited)\n result.inherits.push(shape)\n }\n return result\n }\n\n /**\n * Serializes a `DomainProperty` to an AMF property shape.\n *\n * This method converts a `DomainProperty` into an `IApiPropertyShape`,\n * defining its characteristics such as data type, required status, and\n * range (the shape of the property's value).\n *\n * @param input The `DomainProperty` to serialize.\n * @returns An `IApiPropertyShape` representing the property in AMF.\n * @example\n * ```typescript\n * const generator = new ShapeGenerator();\n * const amfShape = generator.property(myDomainProperty);\n * ```\n */\n property(input: DomainProperty): IApiPropertyShape {\n const { required, key } = input\n const result = propertyShape(key)\n result.path = `${AmfNamespace.aml.vocabularies.data.key}${input.info.name}`\n if (required) {\n result.minCount = 1\n }\n result.range = this.getRange(input)\n\n // for example, Example generator needs to know the name of the property\n // as it does not look into the \"range\" object.\n this.updateBaseProperties(input, result)\n\n // sync the name of the property shape with the range, in case it was changed by the bindings\n if (result.range.name) {\n result.name = result.range.name\n }\n return result\n }\n\n /**\n * Serializes a `DomainAssociation` to an AMF property shape, handling the\n * association's target entity or entities.\n *\n * This method is similar to `property()`, but it specifically handles\n * associations between entities. It determines the range of the property\n * based on the association's target(s) and generates the appropriate\n * AMF shape (e.g., a scalar shape for a linked schema, a union shape for\n * multiple targets).\n *\n * @param input The `DomainAssociation` to serialize.\n * @param visited A `Set` of keys of already generated entities. This prevents\n * recursive shape generation and avoids infinite loops. Defaults to a new empty `Set`.\n * @returns An `IApiPropertyShape` representing the association in AMF.\n * @example\n * ```typescript\n * const generator = new ShapeGenerator();\n * const amfShape = generator.associationProperty(myDomainAssociation);\n * ```\n */\n associationProperty(input: DomainAssociation, visited: Set<string> = new Set<string>()): IApiPropertyShape {\n const { required, key } = input\n const result = propertyShape(key)\n result.path = `${AmfNamespace.aml.vocabularies.data.key}${input.info.name}`\n if (required) {\n result.minCount = 1\n }\n result.range = this.associationShape(input, visited)\n\n this.updateBaseProperties(input, result)\n return result\n }\n\n /**\n * Generates a shape for an association. Most likely you want to use the `associationProperty()` method instead.\n *\n * @param input The data association instance.\n * @param visited A `Set` of keys of already generated entities. This prevents\n * recursive shape generation and avoids infinite loops. Defaults to a new empty `Set`.\n * @returns The range value for the PropertyShape.\n */\n associationShape(input: DomainAssociation, visited: Set<string> = new Set<string>()): IShapeUnion | undefined {\n const schema = input.schema\n if (schema && schema.linked) {\n return this.createLinkedShape(input)\n }\n const items = this.associationUnion(input, visited)\n if (!items) {\n return\n }\n if (Array.isArray(items)) {\n return this.createUnionShape(input, items)\n }\n const unionType = (schema && schema.unionType) || UNION_TYPE_ANY_OF\n if (unionType === UNION_TYPE_NOT) {\n // Need to investigate more about \"not\" union type.\n // AMF supports it, but I am not sure how to handle it.\n const wrapper = anyShape(input.key)\n wrapper.id = `not-shape-${input.key}`\n wrapper.not = items\n return wrapper\n }\n if (input.multiple) {\n return this.refactorShapeToArray(input.key, items)\n }\n return items\n }\n\n /**\n * @param input The data association instance.\n * @returns An AMF API scalar shape with the link to the schema.\n */\n protected createLinkedShape(input: DomainAssociation): IApiScalarShape {\n // This is a link to the schema. In an API that would be the id\n // of a resource to request the data from.\n const range = scalarShape(input.key)\n range.id = `link-${input.key}`\n range.dataType = modelTypeToAmfDataType(DATA_TYPE_STRING)\n return range\n }\n\n protected createUnionShape(input: DomainAssociation, items: IShapeUnion[]): IApiUnionShape | IApiArrayShape {\n const range = unionShape(input.key)\n this.updateBaseProperties(input, range)\n range.anyOf = []\n const unionType = (input.schema && input.schema.unionType) || UNION_TYPE_ANY_OF\n if (unionType === UNION_TYPE_ANY_OF) {\n range.anyOf = items\n } else if (unionType === UNION_TYPE_ALL_OF) {\n range.and = items\n } else if (unionType === UNION_TYPE_ONE_OF) {\n range.xone = items\n } else {\n // the \"not\" union type only supports a single schema.\n // I am not sure how this should be handled. Will take the first one\n // for now.\n range.not = items[0]\n }\n if (input.multiple) {\n return this.refactorShapeToArray(input.key, range)\n }\n return range\n }\n\n /**\n * Generates a shape list for an union. Most likely you want to use the `associationProperty()` method instead.\n *\n * @param input The data association instance.\n * @returns The range value for the PropertyShape.\n */\n associationUnion(\n input: DomainAssociation,\n visited: Set<string> = new Set<string>()\n ): IShapeUnion | IShapeUnion[] | undefined {\n const result: IShapeUnion[] = []\n for (const item of input.listTargets()) {\n result.push(this.entity(item, visited))\n }\n if (!result.length) {\n return undefined\n }\n if (result.length > 1) {\n return result\n }\n return result[0]\n }\n\n /**\n * The DomainProperty may have both the `schema` and the `bindings`. For AMF shape we read `schema` for\n * default value, examples, and enum values. We also look for the `web`\n * bindings for more detailed definition of a shape.\n *\n * @param input\n */\n protected getRange(input: DomainProperty): IApiArrayShape | IApiFileShape | IApiScalarShape {\n const bindings = input.readBinding('web') as PropertyWebBindings | undefined\n let schema: PropertySchema | undefined\n if (input.schema) {\n schema = input.schema\n }\n const { multiple, type } = input\n if (multiple) {\n return this.createArrayShape(input, schema, bindings)\n }\n if (type === DATA_TYPE_BINARY) {\n return this.createFileShape(input, bindings)\n }\n return this.createScalarShape(input, schema, bindings)\n }\n\n /**\n * Normally this would be part of generating a scalar schema but the the property is an array this\n * is generated on the array and not on the range.\n *\n * @param result The scalar or array shape.\n * @param schema The property schema\n * @param type The data type of the parent property as set on the `range`\n * @param isArray Whether the DomainProperty is multiple\n */\n protected setShapeSchema(\n input: DomainProperty,\n result: IApiAnyShape,\n schema: PropertySchema,\n type: string,\n isArray?: boolean\n ): void {\n if (schema.defaultValue) {\n const { type: dfFormat } = schema.defaultValue\n const { value } = schema.defaultValue\n if (dfFormat === 'function') {\n const tmp = this.valueGenerator.generate(value, input.type)\n if (tmp !== DataValueGenerator.noValue) {\n const dt = AmfDataNode.scalar(tmp as string, dfFormat)\n result.defaultValue = dt.toJSON()\n }\n } else {\n const dt = AmfDataNode.scalar(value, type)\n result.defaultValue = dt.toJSON()\n }\n }\n if (Array.isArray(schema.enum)) {\n result.values = schema.enum.map((i) => AmfDataNode.scalar(i, type).toJSON())\n }\n if (Array.isArray(schema.examples)) {\n if (isArray) {\n result.examples = this.createArrayExamples(schema.examples, type)\n } else {\n result.examples = this.createExamples(schema.examples, type)\n }\n }\n }\n\n protected createArrayShape(\n input: DomainProperty,\n schema?: PropertySchema,\n bindings?: PropertyWebBindings\n ): IApiArrayShape {\n const result = arrayShape(input.key)\n const { type } = input\n if (type === DATA_TYPE_BINARY) {\n // we do not pass schema to the range generator as we set schema's properties on the array shape.\n result.items = this.createFileShape(input, bindings)\n } else {\n result.items = this.createScalarShape(input, undefined, bindings)\n }\n if (schema) {\n const type = (result.items as IApiScalarShape).dataType as string\n this.setShapeSchema(input, result, schema, type, input.multiple)\n }\n return result\n }\n\n protected createScalarShape(\n input: DomainProperty,\n schema?: PropertySchema,\n bindings?: PropertyWebBindings\n ): IApiScalarShape {\n const result = scalarShape(input.key)\n this.updateBaseProperties(input, result)\n this.setScalarCommonProperties(result, input, bindings)\n if (!result.dataType) {\n result.dataType = modelTypeToAmfDataType(input.type, bindings)\n }\n if (schema) {\n this.setShapeSchema(input, result, schema, result.dataType as string, input.multiple)\n }\n return result\n }\n\n protected createExamples(examples: string[], type: string): IApiDataExample[] {\n const result: IApiDataExample[] = []\n for (const current of examples) {\n const item: IApiDataExample = {\n id: nanoid(),\n customDomainProperties: [],\n strict: true,\n types: IAmfExampleTypes,\n structuredValue: AmfDataNode.scalar(current, type).toJSON(),\n }\n result.push(item)\n }\n return result\n }\n\n protected createArrayExamples(examples: string[], type: string): IApiDataExample[] {\n const item: IApiDataExample = {\n id: nanoid(),\n customDomainProperties: [],\n strict: true,\n types: IAmfExampleTypes,\n }\n const value = new AmfDataNode('array')\n for (const item of examples) {\n const member = AmfDataNode.scalar(item, type)\n value.addMember(member)\n }\n item.structuredValue = value.toJSON()\n return [item]\n }\n\n protected createFileShape(input: DomainProperty, bindings?: PropertyWebBindings): IApiFileShape {\n const result = fileShape(input.key)\n this.updateBaseProperties(input, result)\n if (bindings) {\n if (Array.isArray(bindings.fileTypes)) {\n result.fileTypes = bindings.fileTypes\n }\n this.setScalarCommonProperties(result, input, bindings)\n if (bindings.format === 'base64') {\n result.format = AmfNamespace.w3.xmlSchema.base64Binary\n }\n }\n return result\n }\n\n protected setScalarCommonProperties(\n result: IApiFileShape | IApiScalarShape,\n input: DomainProperty,\n bindings?: PropertyWebBindings\n ): void {\n if (bindings?.name) {\n result.name = bindings.name\n }\n if (bindings?.xml) {\n result.xmlSerialization = bindings.xml\n }\n const { schema, type } = input\n if (schema) {\n if (schema.pattern) {\n result.pattern = schema.pattern\n }\n if (typeof schema.multipleOf === 'number') {\n result.multipleOf = schema.multipleOf\n }\n if (typeof schema.minimum === 'number') {\n if (type === DATA_TYPE_STRING) {\n result.minLength = schema.minimum\n } else {\n result.minimum = schema.minimum\n }\n }\n if (typeof schema.maximum === 'number') {\n if (type === DATA_TYPE_STRING) {\n result.maxLength = schema.maximum\n } else {\n result.maximum = schema.maximum\n }\n }\n if (typeof schema.exclusiveMinimum === 'boolean') {\n result.exclusiveMinimum = schema.exclusiveMinimum\n }\n if (typeof schema.exclusiveMaximum === 'boolean') {\n result.exclusiveMaximum = schema.exclusiveMaximum\n }\n }\n if (bindings?.format) {\n switch (bindings.format) {\n case 'base64':\n result.format = AmfNamespace.w3.xmlSchema.base64Binary\n break\n case 'double':\n result.format = AmfNamespace.w3.xmlSchema.double\n break\n case 'float':\n result.format = AmfNamespace.w3.xmlSchema.float\n break\n case 'int32':\n result.format = AmfNamespace.w3.xmlSchema.integer\n break\n case 'int64':\n result.format = AmfNamespace.w3.xmlSchema.integer\n break\n }\n // result.format = bindings.format\n }\n if (typeof input.readOnly === 'boolean') {\n result.readOnly = input.readOnly\n }\n if (typeof input.writeOnly === 'boolean') {\n result.writeOnly = input.writeOnly\n }\n }\n\n protected updateBaseProperties(input: DomainProperty | DomainAssociation | DomainEntity, target: IApiShape): void {\n target.name = input.info.name\n target.displayName = input.info.displayName\n target.description = input.info.description\n if (input.kind === DomainPropertyKind) {\n target.deprecated = (input as DomainProperty).deprecated\n } else if (input.kind === DomainEntityKind) {\n target.deprecated = (input as DomainEntity).deprecated\n }\n }\n\n protected createRecursiveShape(input: DomainEntity): IApiRecursiveShape {\n return recursiveShape(input.key, input.key)\n }\n\n /**\n * Translates the shape to an array shape. This happens when data model property\n * is changed from 'multiple' to not-multiple and back.\n *\n * @param id The key of the parameter or an association\n * @param shape The shape to wrap as an array.\n * @returns Array shape.\n */\n protected refactorShapeToArray(id: string, shape: IShapeUnion): IApiArrayShape {\n const result = arrayShape(id)\n result.items = shape\n return result\n }\n}\n"]}
1
+ {"version":3,"file":"ShapeGenerator.js","sourceRoot":"","sources":["../../../../src/modeling/amf/ShapeGenerator.ts"],"names":[],"mappings":"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","sourcesContent":["import { type AssociationBindings, type PropertyWebBindings } from '../Bindings.js'\nimport type { DomainAssociation } from '../DomainAssociation.js'\nimport type { DomainProperty } from '../DomainProperty.js'\nimport type { DomainEntity } from '../DomainEntity.js'\nimport { modelTypeToAmfDataType } from './core_types.js'\nimport { AmfNamespace, type Shapes, AmfDataNode, AmfTypes, ShapeHelpers } from '@api-client/amf-core'\nimport { DataValueGenerator } from './DataValueGenerator.js'\nimport { nanoid } from '../../nanoid.js'\nimport { DomainEntityKind, DomainPropertyKind } from '../../models/kinds.js'\nimport type { PropertySchema } from '../types.js'\n\nconst UNION_TYPE_ANY_OF = 'anyOf'\nconst UNION_TYPE_ALL_OF = 'allOf'\nconst UNION_TYPE_ONE_OF = 'oneOf'\nconst UNION_TYPE_NOT = 'not'\nconst DATA_TYPE_STRING = 'string'\nconst DATA_TYPE_BINARY = 'binary'\n\n/**\n * Serializes Data Domain elements (DomainEntity, DomainProperty, DomainAssociation)\n * to AMF shapes.\n *\n * This class provides a mechanism to translate a data domain model, defined using\n * custom classes like `DomainEntity`, `DomainProperty`, and `DomainAssociation`,\n * into AMF (API Modeling Framework) shapes. AMF shapes are a standardized way\n * to represent API structures and data models, enabling interoperability and tooling.\n *\n * This is particularly useful when you have a custom data model and need to\n * generate API definitions (e.g., RAML or OAS) from it.\n *\n * **Key Features:**\n *\n * - **Data Domain to AMF Translation:** Converts data domain elements into\n * their corresponding AMF shape representations.\n * - **Recursive Shape Handling:** Detects and handles recursive relationships\n * within the data model to prevent infinite loops during shape generation.\n * - **Union Type Support:** Supports the creation of union types in AMF\n * to represent associations that can point to multiple different entity types.\n * - **Binding Integration:** Leverages binding information (e.g., web bindings)\n * to customize the generated AMF shapes based on the target API format.\n * - **Example and Default Value Generation:** Integrates with a `DataValueGenerator`\n * to automatically generate example values and default values for properties\n * within the AMF shapes.\n *\n * **Usage:**\n *\n * 1. Create an instance of the `ShapeGenerator`.\n * 2. Call the appropriate method (e.g., `entity()`, `property()`, `associationShape()`)\n * to generate the AMF shape for a specific data domain element.\n * 3. The returned AMF shape can then be used with other AMF tools to generate\n * API definitions or perform other API-related tasks.\n */\nexport class ShapeGenerator {\n #valueGenerator?: DataValueGenerator\n\n /**\n * Used with data domain value generation for entity properties.\n * Lazily loaded class only when functions are used.\n * This needs to be a class instances because some functions are incremental\n */\n get valueGenerator(): DataValueGenerator {\n // we need a new instance of the generator for each shape generation\n // as the generator is stateful and we need to reset it for each shape.\n if (!this.#valueGenerator) {\n this.#valueGenerator = new DataValueGenerator()\n }\n return this.#valueGenerator\n }\n\n /**\n * Serializes a `DomainEntity` to an AMF node shape.\n *\n * This method is the entry point for converting a `DomainEntity` into its\n * AMF representation. It handles recursive relationships, property serialization,\n * and inheritance from parent entities.\n *\n * @param input The `DomainEntity` to serialize.\n * @param visited A `Set` of keys of already generated entities. This prevents\n * recursive shape generation and avoids infinite loops. Defaults to a new empty `Set`.\n * @returns An `IApiNodeShape` or `IApiRecursiveShape` representing the entity in AMF.\n * Returns a `IApiRecursiveShape` if a recursive loop is detected.\n * @example\n * ```typescript\n * const generator = new ShapeGenerator();\n * const amfShape = generator.entity(myDomainEntity);\n * ```\n */\n entity(input: DomainEntity, visited = new Set<string>()): Shapes.IApiNodeShape | Shapes.IApiRecursiveShape {\n if (visited.has(input.key)) {\n // create a recursive shape.\n return this.createRecursiveShape(input)\n }\n visited.add(input.key)\n const result = ShapeHelpers.nodeShape(input.key)\n result.id = input.key\n this.updateBaseProperties(input, result)\n result.properties = []\n for (const item of input.listProperties()) {\n // we check whether the property is hidden.\n // This is not happening when calling the `property()` because this method\n // always returns the AMF shape.\n const wb = item.readBinding('web') as PropertyWebBindings | undefined\n if (wb && wb.hidden) {\n continue\n }\n const shape = this.property(item)\n result.properties.push(shape)\n }\n for (const assoc of input.listAssociations()) {\n const wb = assoc.readBinding('web') as AssociationBindings | undefined\n if (wb && wb.hidden) {\n continue\n }\n const prop = this.associationProperty(assoc, visited)\n result.properties.push(prop)\n }\n for (const parent of input.listParents()) {\n const shape = this.entity(parent, visited)\n result.inherits.push(shape)\n }\n return result\n }\n\n /**\n * Serializes a `DomainProperty` to an AMF property shape.\n *\n * This method converts a `DomainProperty` into an `IApiPropertyShape`,\n * defining its characteristics such as data type, required status, and\n * range (the shape of the property's value).\n *\n * @param input The `DomainProperty` to serialize.\n * @returns An `IApiPropertyShape` representing the property in AMF.\n * @example\n * ```typescript\n * const generator = new ShapeGenerator();\n * const amfShape = generator.property(myDomainProperty);\n * ```\n */\n property(input: DomainProperty): Shapes.IApiPropertyShape {\n const { required, key } = input\n const result = ShapeHelpers.propertyShape(key)\n result.path = `${AmfNamespace.aml.vocabularies.data.key}${input.info.name}`\n if (required) {\n result.minCount = 1\n }\n result.range = this.getRange(input)\n\n // for example, Example generator needs to know the name of the property\n // as it does not look into the \"range\" object.\n this.updateBaseProperties(input, result)\n\n // sync the name of the property shape with the range, in case it was changed by the bindings\n if (result.range.name) {\n result.name = result.range.name\n }\n return result\n }\n\n /**\n * Serializes a `DomainAssociation` to an AMF property shape, handling the\n * association's target entity or entities.\n *\n * This method is similar to `property()`, but it specifically handles\n * associations between entities. It determines the range of the property\n * based on the association's target(s) and generates the appropriate\n * AMF shape (e.g., a scalar shape for a linked schema, a union shape for\n * multiple targets).\n *\n * @param input The `DomainAssociation` to serialize.\n * @param visited A `Set` of keys of already generated entities. This prevents\n * recursive shape generation and avoids infinite loops. Defaults to a new empty `Set`.\n * @returns An `IApiPropertyShape` representing the association in AMF.\n * @example\n * ```typescript\n * const generator = new ShapeGenerator();\n * const amfShape = generator.associationProperty(myDomainAssociation);\n * ```\n */\n associationProperty(input: DomainAssociation, visited: Set<string> = new Set<string>()): Shapes.IApiPropertyShape {\n const { required, key } = input\n const result = ShapeHelpers.propertyShape(key)\n result.path = `${AmfNamespace.aml.vocabularies.data.key}${input.info.name}`\n if (required) {\n result.minCount = 1\n }\n result.range = this.associationShape(input, visited)\n\n this.updateBaseProperties(input, result)\n return result\n }\n\n /**\n * Generates a shape for an association. Most likely you want to use the `associationProperty()` method instead.\n *\n * @param input The data association instance.\n * @param visited A `Set` of keys of already generated entities. This prevents\n * recursive shape generation and avoids infinite loops. Defaults to a new empty `Set`.\n * @returns The range value for the PropertyShape.\n */\n associationShape(input: DomainAssociation, visited: Set<string> = new Set<string>()): Shapes.IShapeUnion | undefined {\n const schema = input.schema\n if (schema && schema.linked) {\n return this.createLinkedShape(input)\n }\n const items = this.associationUnion(input, visited)\n if (!items) {\n return\n }\n if (Array.isArray(items)) {\n return this.createUnionShape(input, items)\n }\n const unionType = (schema && schema.unionType) || UNION_TYPE_ANY_OF\n if (unionType === UNION_TYPE_NOT) {\n // Need to investigate more about \"not\" union type.\n // AMF supports it, but I am not sure how to handle it.\n const wrapper = ShapeHelpers.anyShape(input.key)\n wrapper.id = `not-shape-${input.key}`\n wrapper.not = items\n return wrapper\n }\n if (input.multiple) {\n return this.refactorShapeToArray(input.key, items)\n }\n return items\n }\n\n /**\n * @param input The data association instance.\n * @returns An AMF API scalar shape with the link to the schema.\n */\n protected createLinkedShape(input: DomainAssociation): Shapes.IApiScalarShape {\n // This is a link to the schema. In an API that would be the id\n // of a resource to request the data from.\n const range = ShapeHelpers.scalarShape(input.key)\n range.id = `link-${input.key}`\n range.dataType = modelTypeToAmfDataType(DATA_TYPE_STRING)\n return range\n }\n\n protected createUnionShape(\n input: DomainAssociation,\n items: Shapes.IShapeUnion[]\n ): Shapes.IApiUnionShape | Shapes.IApiArrayShape {\n const range = ShapeHelpers.unionShape(input.key)\n this.updateBaseProperties(input, range)\n range.anyOf = []\n const unionType = (input.schema && input.schema.unionType) || UNION_TYPE_ANY_OF\n if (unionType === UNION_TYPE_ANY_OF) {\n range.anyOf = items\n } else if (unionType === UNION_TYPE_ALL_OF) {\n range.and = items\n } else if (unionType === UNION_TYPE_ONE_OF) {\n range.xone = items\n } else {\n // the \"not\" union type only supports a single schema.\n // I am not sure how this should be handled. Will take the first one\n // for now.\n range.not = items[0]\n }\n if (input.multiple) {\n return this.refactorShapeToArray(input.key, range)\n }\n return range\n }\n\n /**\n * Generates a shape list for an union. Most likely you want to use the `associationProperty()` method instead.\n *\n * @param input The data association instance.\n * @returns The range value for the PropertyShape.\n */\n associationUnion(\n input: DomainAssociation,\n visited: Set<string> = new Set<string>()\n ): Shapes.IShapeUnion | Shapes.IShapeUnion[] | undefined {\n const result: Shapes.IShapeUnion[] = []\n for (const item of input.listTargets()) {\n result.push(this.entity(item, visited))\n }\n if (!result.length) {\n return undefined\n }\n if (result.length > 1) {\n return result\n }\n return result[0]\n }\n\n /**\n * The DomainProperty may have both the `schema` and the `bindings`. For AMF shape we read `schema` for\n * default value, examples, and enum values. We also look for the `web`\n * bindings for more detailed definition of a shape.\n *\n * @param input\n */\n protected getRange(input: DomainProperty): Shapes.IApiArrayShape | Shapes.IApiFileShape | Shapes.IApiScalarShape {\n const bindings = input.readBinding('web') as PropertyWebBindings | undefined\n let schema: PropertySchema | undefined\n if (input.schema) {\n schema = input.schema\n }\n const { multiple, type } = input\n if (multiple) {\n return this.createArrayShape(input, schema, bindings)\n }\n if (type === DATA_TYPE_BINARY) {\n return this.createFileShape(input, bindings)\n }\n return this.createScalarShape(input, schema, bindings)\n }\n\n /**\n * Normally this would be part of generating a scalar schema but the the property is an array this\n * is generated on the array and not on the range.\n *\n * @param result The scalar or array shape.\n * @param schema The property schema\n * @param type The data type of the parent property as set on the `range`\n * @param isArray Whether the DomainProperty is multiple\n */\n protected setShapeSchema(\n input: DomainProperty,\n result: Shapes.IApiAnyShape,\n schema: PropertySchema,\n type: string,\n isArray?: boolean\n ): void {\n if (schema.defaultValue) {\n const { type: dfFormat } = schema.defaultValue\n const { value } = schema.defaultValue\n if (dfFormat === 'function') {\n const tmp = this.valueGenerator.generate(value, input.type)\n if (tmp !== DataValueGenerator.noValue) {\n const dt = AmfDataNode.scalar(tmp as string, dfFormat)\n result.defaultValue = dt.toJSON()\n }\n } else {\n const dt = AmfDataNode.scalar(value, type)\n result.defaultValue = dt.toJSON()\n }\n }\n if (Array.isArray(schema.enum)) {\n result.values = schema.enum.map((i) => AmfDataNode.scalar(i, type).toJSON())\n }\n if (Array.isArray(schema.examples)) {\n if (isArray) {\n result.examples = this.createArrayExamples(schema.examples, type)\n } else {\n result.examples = this.createExamples(schema.examples, type)\n }\n }\n }\n\n protected createArrayShape(\n input: DomainProperty,\n schema?: PropertySchema,\n bindings?: PropertyWebBindings\n ): Shapes.IApiArrayShape {\n const result = ShapeHelpers.arrayShape(input.key)\n const { type } = input\n if (type === DATA_TYPE_BINARY) {\n // we do not pass schema to the range generator as we set schema's properties on the array shape.\n result.items = this.createFileShape(input, bindings)\n } else {\n result.items = this.createScalarShape(input, undefined, bindings)\n }\n if (schema) {\n const type = (result.items as Shapes.IApiScalarShape).dataType as string\n this.setShapeSchema(input, result, schema, type, input.multiple)\n }\n return result\n }\n\n protected createScalarShape(\n input: DomainProperty,\n schema?: PropertySchema,\n bindings?: PropertyWebBindings\n ): Shapes.IApiScalarShape {\n const result = ShapeHelpers.scalarShape(input.key)\n this.updateBaseProperties(input, result)\n this.setScalarCommonProperties(result, input, bindings)\n if (!result.dataType) {\n result.dataType = modelTypeToAmfDataType(input.type, bindings)\n }\n if (schema) {\n this.setShapeSchema(input, result, schema, result.dataType as string, input.multiple)\n }\n return result\n }\n\n protected createExamples(examples: string[], type: string): Shapes.IApiDataExample[] {\n const result: Shapes.IApiDataExample[] = []\n for (const current of examples) {\n const item: Shapes.IApiDataExample = {\n id: nanoid(),\n customDomainProperties: [],\n strict: true,\n types: [...AmfTypes.IAmfExampleTypes],\n structuredValue: AmfDataNode.scalar(current, type).toJSON(),\n }\n result.push(item)\n }\n return result\n }\n\n protected createArrayExamples(examples: string[], type: string): Shapes.IApiDataExample[] {\n const item: Shapes.IApiDataExample = {\n id: nanoid(),\n customDomainProperties: [],\n strict: true,\n types: [...AmfTypes.IAmfExampleTypes],\n }\n const value = new AmfDataNode('array')\n for (const item of examples) {\n const member = AmfDataNode.scalar(item, type)\n value.addMember(member)\n }\n item.structuredValue = value.toJSON()\n return [item]\n }\n\n protected createFileShape(input: DomainProperty, bindings?: PropertyWebBindings): Shapes.IApiFileShape {\n const result = ShapeHelpers.fileShape(input.key)\n this.updateBaseProperties(input, result)\n if (bindings) {\n if (Array.isArray(bindings.fileTypes)) {\n result.fileTypes = bindings.fileTypes\n }\n this.setScalarCommonProperties(result, input, bindings)\n if (bindings.format === 'base64') {\n result.format = AmfNamespace.w3.xmlSchema.base64Binary\n }\n }\n return result\n }\n\n protected setScalarCommonProperties(\n result: Shapes.IApiFileShape | Shapes.IApiScalarShape,\n input: DomainProperty,\n bindings?: PropertyWebBindings\n ): void {\n if (bindings?.name) {\n result.name = bindings.name\n }\n if (bindings?.xml) {\n result.xmlSerialization = bindings.xml\n }\n const { schema, type } = input\n if (schema) {\n if (schema.pattern) {\n result.pattern = schema.pattern\n }\n if (typeof schema.multipleOf === 'number') {\n result.multipleOf = schema.multipleOf\n }\n if (typeof schema.minimum === 'number') {\n if (type === DATA_TYPE_STRING) {\n result.minLength = schema.minimum\n } else {\n result.minimum = schema.minimum\n }\n }\n if (typeof schema.maximum === 'number') {\n if (type === DATA_TYPE_STRING) {\n result.maxLength = schema.maximum\n } else {\n result.maximum = schema.maximum\n }\n }\n if (typeof schema.exclusiveMinimum === 'boolean') {\n result.exclusiveMinimum = schema.exclusiveMinimum\n }\n if (typeof schema.exclusiveMaximum === 'boolean') {\n result.exclusiveMaximum = schema.exclusiveMaximum\n }\n }\n if (bindings?.format) {\n switch (bindings.format) {\n case 'base64':\n result.format = AmfNamespace.w3.xmlSchema.base64Binary\n break\n case 'double':\n result.format = AmfNamespace.w3.xmlSchema.double\n break\n case 'float':\n result.format = AmfNamespace.w3.xmlSchema.float\n break\n case 'int32':\n result.format = AmfNamespace.w3.xmlSchema.integer\n break\n case 'int64':\n result.format = AmfNamespace.w3.xmlSchema.integer\n break\n }\n // result.format = bindings.format\n }\n if (typeof input.readOnly === 'boolean') {\n result.readOnly = input.readOnly\n }\n if (typeof input.writeOnly === 'boolean') {\n result.writeOnly = input.writeOnly\n }\n }\n\n protected updateBaseProperties(\n input: DomainProperty | DomainAssociation | DomainEntity,\n target: Shapes.IApiShape\n ): void {\n target.name = input.info.name\n target.displayName = input.info.displayName\n target.description = input.info.description\n if (input.kind === DomainPropertyKind) {\n target.deprecated = (input as DomainProperty).deprecated\n } else if (input.kind === DomainEntityKind) {\n target.deprecated = (input as DomainEntity).deprecated\n }\n }\n\n protected createRecursiveShape(input: DomainEntity): Shapes.IApiRecursiveShape {\n return ShapeHelpers.recursiveShape(input.key, input.key)\n }\n\n /**\n * Translates the shape to an array shape. This happens when data model property\n * is changed from 'multiple' to not-multiple and back.\n *\n * @param id The key of the parameter or an association\n * @param shape The shape to wrap as an array.\n * @returns Array shape.\n */\n protected refactorShapeToArray(id: string, shape: Shapes.IShapeUnion): Shapes.IApiArrayShape {\n const result = ShapeHelpers.arrayShape(id)\n result.items = shape\n return result\n }\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import { PropertyWebBindings } from '../Bindings.js';
2
+ import { DomainPropertyType } from '../DataFormat.js';
3
+ /**
4
+ * Translates the DomainProperty type to an AMF data type.
5
+ * @param type The property data type
6
+ * @returns AMF shape dataType
7
+ */
8
+ export declare function modelTypeToAmfDataType(type: DomainPropertyType, bindings?: PropertyWebBindings): string;
9
+ //# sourceMappingURL=core_types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core_types.d.ts","sourceRoot":"","sources":["../../../../src/modeling/amf/core_types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAGrD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAqCvG"}
@@ -0,0 +1,45 @@
1
+ import { AmfNamespace } from '@api-client/amf-core';
2
+ /**
3
+ * Translates the DomainProperty type to an AMF data type.
4
+ * @param type The property data type
5
+ * @returns AMF shape dataType
6
+ */
7
+ export function modelTypeToAmfDataType(type, bindings) {
8
+ if (type === 'number') {
9
+ if (bindings?.format === 'int32' || bindings?.format === 'int64') {
10
+ return AmfNamespace.w3.xmlSchema.integer;
11
+ }
12
+ return AmfNamespace.w3.xmlSchema.number;
13
+ }
14
+ if (type === 'boolean') {
15
+ return AmfNamespace.aml.vocabularies.shapes.boolean;
16
+ }
17
+ if (type === 'date') {
18
+ return AmfNamespace.w3.xmlSchema.date;
19
+ }
20
+ if (type === 'datetime') {
21
+ return AmfNamespace.w3.xmlSchema.dateTime;
22
+ }
23
+ if (type === 'time') {
24
+ return AmfNamespace.aml.vocabularies.shapes.dateTimeOnly;
25
+ }
26
+ if (type === 'binary' && bindings && bindings.format === 'base64') {
27
+ return AmfNamespace.w3.xmlSchema.base64Binary;
28
+ }
29
+ return AmfNamespace.w3.xmlSchema.string;
30
+ // switch (type) {
31
+ // // case 'nil':
32
+ // // return AmfNamespace.aml.vocabularies.shapes.nil
33
+ // // case 'any':
34
+ // // return AmfNamespace.aml.vocabularies.shapes.AnyShape
35
+ // default:
36
+ // if (type === 'binary' && bindings && bindings.format === 'base64') {
37
+ // return AmfNamespace.w3.xmlSchema.base64Binary
38
+ // }
39
+ // // if (bindings && bindings.format === 'binary') {
40
+ // // return AmfNamespace.w3.xmlSchema.base64Binary
41
+ // // }
42
+ // return AmfNamespace.w3.xmlSchema.string
43
+ // }
44
+ }
45
+ //# sourceMappingURL=core_types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core_types.js","sourceRoot":"","sources":["../../../../src/modeling/amf/core_types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAwB,EAAE,QAA8B;IAC7F,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,IAAI,QAAQ,EAAE,MAAM,KAAK,OAAO,IAAI,QAAQ,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;YACjE,OAAO,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAA;QAC1C,CAAC;QACD,OAAO,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAA;IACzC,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAA;IACrD,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAA;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,OAAO,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAA;IAC3C,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAA;IAC1D,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAClE,OAAO,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC,YAAY,CAAA;IAC/C,CAAC;IACD,OAAO,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAA;IACvC,kBAAkB;IAClB,mBAAmB;IACnB,yDAAyD;IACzD,mBAAmB;IACnB,8DAA8D;IAC9D,aAAa;IACb,2EAA2E;IAC3E,sDAAsD;IACtD,QAAQ;IACR,yDAAyD;IACzD,yDAAyD;IACzD,WAAW;IACX,8CAA8C;IAC9C,IAAI;AACN,CAAC","sourcesContent":["import { PropertyWebBindings } from '../Bindings.js'\nimport { DomainPropertyType } from '../DataFormat.js'\nimport { AmfNamespace } from '@api-client/amf-core'\n\n/**\n * Translates the DomainProperty type to an AMF data type.\n * @param type The property data type\n * @returns AMF shape dataType\n */\nexport function modelTypeToAmfDataType(type: DomainPropertyType, bindings?: PropertyWebBindings): string {\n if (type === 'number') {\n if (bindings?.format === 'int32' || bindings?.format === 'int64') {\n return AmfNamespace.w3.xmlSchema.integer\n }\n return AmfNamespace.w3.xmlSchema.number\n }\n if (type === 'boolean') {\n return AmfNamespace.aml.vocabularies.shapes.boolean\n }\n if (type === 'date') {\n return AmfNamespace.w3.xmlSchema.date\n }\n if (type === 'datetime') {\n return AmfNamespace.w3.xmlSchema.dateTime\n }\n if (type === 'time') {\n return AmfNamespace.aml.vocabularies.shapes.dateTimeOnly\n }\n if (type === 'binary' && bindings && bindings.format === 'base64') {\n return AmfNamespace.w3.xmlSchema.base64Binary\n }\n return AmfNamespace.w3.xmlSchema.string\n // switch (type) {\n // // case 'nil':\n // // return AmfNamespace.aml.vocabularies.shapes.nil\n // // case 'any':\n // // return AmfNamespace.aml.vocabularies.shapes.AnyShape\n // default:\n // if (type === 'binary' && bindings && bindings.format === 'base64') {\n // return AmfNamespace.w3.xmlSchema.base64Binary\n // }\n // // if (bindings && bindings.format === 'binary') {\n // // return AmfNamespace.w3.xmlSchema.base64Binary\n // // }\n // return AmfNamespace.w3.xmlSchema.string\n // }\n}\n"]}
@@ -9,4 +9,5 @@ export { DomainModel, type DomainModelSchema, type ModelOrderedItem } from './Do
9
9
  export { DomainNamespace, type DomainNamespaceSchema, type NamespaceOrderedItem } from './DomainNamespace.js';
10
10
  export { DomainProperty, type DomainPropertySchema } from './DomainProperty.js';
11
11
  export { ExposedEntity } from './ExposedEntity.js';
12
+ export * as ApiModelValidation from './validation/api_model_rules.js';
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modeling/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/F,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC3G,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACjG,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC7G,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modeling/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/F,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC3G,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACjG,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC7G,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,kBAAkB,MAAM,iCAAiC,CAAA"}
@@ -9,4 +9,5 @@ export { DomainModel } from './DomainModel.js';
9
9
  export { DomainNamespace } from './DomainNamespace.js';
10
10
  export { DomainProperty } from './DomainProperty.js';
11
11
  export { ExposedEntity } from './ExposedEntity.js';
12
+ export * as ApiModelValidation from './validation/api_model_rules.js';
12
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modeling/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAyD,MAAM,eAAe,CAAA;AAC/F,OAAO,EAAE,UAAU,EAAyB,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAmD,MAAM,wBAAwB,CAAA;AAC3G,OAAO,EAAE,YAAY,EAAmD,MAAM,mBAAmB,CAAA;AACjG,OAAO,EAAE,WAAW,EAAiD,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAE,eAAe,EAAyD,MAAM,sBAAsB,CAAA;AAC7G,OAAO,EAAE,cAAc,EAA6B,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA","sourcesContent":["export * from './actions/index.js'\nexport * from './rules/index.js'\nexport * from './types.js'\nexport { ApiModel, type ApiModelSchema, type ApiContact, type ApiLicense } from './ApiModel.js'\nexport { DataDomain, type DataDomainSchema } from './DataDomain.js'\nexport { DomainAssociation, type DomainAssociationSchema, type OnDeleteRule } from './DomainAssociation.js'\nexport { DomainEntity, type DomainEntitySchema, type EntityOrderedItem } from './DomainEntity.js'\nexport { DomainModel, type DomainModelSchema, type ModelOrderedItem } from './DomainModel.js'\nexport { DomainNamespace, type DomainNamespaceSchema, type NamespaceOrderedItem } from './DomainNamespace.js'\nexport { DomainProperty, type DomainPropertySchema } from './DomainProperty.js'\nexport { ExposedEntity } from './ExposedEntity.js'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modeling/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAyD,MAAM,eAAe,CAAA;AAC/F,OAAO,EAAE,UAAU,EAAyB,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAmD,MAAM,wBAAwB,CAAA;AAC3G,OAAO,EAAE,YAAY,EAAmD,MAAM,mBAAmB,CAAA;AACjG,OAAO,EAAE,WAAW,EAAiD,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAE,eAAe,EAAyD,MAAM,sBAAsB,CAAA;AAC7G,OAAO,EAAE,cAAc,EAA6B,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,kBAAkB,MAAM,iCAAiC,CAAA","sourcesContent":["export * from './actions/index.js'\nexport * from './rules/index.js'\nexport * from './types.js'\nexport { ApiModel, type ApiModelSchema, type ApiContact, type ApiLicense } from './ApiModel.js'\nexport { DataDomain, type DataDomainSchema } from './DataDomain.js'\nexport { DomainAssociation, type DomainAssociationSchema, type OnDeleteRule } from './DomainAssociation.js'\nexport { DomainEntity, type DomainEntitySchema, type EntityOrderedItem } from './DomainEntity.js'\nexport { DomainModel, type DomainModelSchema, type ModelOrderedItem } from './DomainModel.js'\nexport { DomainNamespace, type DomainNamespaceSchema, type NamespaceOrderedItem } from './DomainNamespace.js'\nexport { DomainProperty, type DomainPropertySchema } from './DomainProperty.js'\nexport { ExposedEntity } from './ExposedEntity.js'\nexport * as ApiModelValidation from './validation/api_model_rules.js'\n"]}
@@ -682,5 +682,72 @@ export interface DomainSearchResult {
682
682
  */
683
683
  isForeign: boolean;
684
684
  }
685
+ /**
686
+ * Contextual information about where the API Model validation issue occurred.
687
+ * This allows the UI to trace back a validation error to a specific module or component.
688
+ */
689
+ export interface ApiModelValidationContext {
690
+ /**
691
+ * The key of the ApiModel itself.
692
+ */
693
+ apiModelKey: string;
694
+ /**
695
+ * The kind of the affected component (e.g., 'ApiModel', 'ExposedEntity', 'Action').
696
+ */
697
+ kind: string;
698
+ /**
699
+ * The key of the specific entity or action where the issue occurred.
700
+ * If the error is at the root API model, this might be the ApiModel's key.
701
+ */
702
+ key: string;
703
+ /**
704
+ * The specific property being validated, if applicable.
705
+ */
706
+ property?: string;
707
+ /**
708
+ * The key of the parent ExposedEntity, if this issue occurred on a nested entity or an action.
709
+ */
710
+ parentExposedEntityKey?: string;
711
+ }
712
+ /**
713
+ * Represents a single validation issue found within an ApiModel.
714
+ */
715
+ export interface ApiModelValidationItem {
716
+ /**
717
+ * A unique code identifying the type of validation error. This enables
718
+ * programmatic handling or auto-fixing in the UI (e.g., 'API_MISSING_NAME', 'LIST_ACTION_MISSING_PAGINATION').
719
+ */
720
+ code: string;
721
+ /**
722
+ * A human-readable description of the problem.
723
+ */
724
+ message: string;
725
+ /**
726
+ * A human-readable suggestion on how to fix the issue.
727
+ */
728
+ suggestion: string;
729
+ /**
730
+ * The severity of the validation issue.
731
+ */
732
+ severity: 'error' | 'warning' | 'info';
733
+ /**
734
+ * Contextual information to trace the issue back to its source component.
735
+ */
736
+ context: ApiModelValidationContext;
737
+ }
738
+ /**
739
+ * The consolidated result of validating an entire ApiModel or a subset of it.
740
+ */
741
+ export interface ApiModelValidationResult {
742
+ /**
743
+ * A boolean indicating whether the model is structurally sound and ready for publication.
744
+ * Typically true if there are no 'error' severity issues.
745
+ */
746
+ isValid: boolean;
747
+ /**
748
+ * The aggregated list of all validation issues found.
749
+ */
750
+ issues: ApiModelValidationItem[];
751
+ }
685
752
  export {};
686
753
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modeling/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modeling/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modeling/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { GraphJson } from '@api-client/graph/graph/types.js'\nimport type { Graph } from '@api-client/graph/graph/Graph.js'\nimport type { DomainAssociation } from './DomainAssociation.js'\nimport type { DomainEntity } from './DomainEntity.js'\nimport type { DomainModel } from './DomainModel.js'\nimport type { DomainNamespace } from './DomainNamespace.js'\nimport type { DomainProperty } from './DomainProperty.js'\nimport type {\n DomainNamespaceKind,\n DomainEntityKind,\n DomainModelKind,\n DomainPropertyKind,\n DomainAssociationKind,\n DataDomainKind,\n ExposedEntityKind,\n} from '../models/kinds.js'\nimport type { DataDomain } from './DataDomain.js'\nimport { AccessRuleSchema } from './rules/AccessRule.js'\nimport { RateLimitingConfigurationSchema } from './rules/RateLimitingConfiguration.js'\nimport { ActionSchema } from './actions/Action.js'\n\nexport interface DataDomainRemoveOptions {\n /**\n * When true, the object will be forcibly removed.\n * The resolution defined in the `ImpactResolution` class will be applied.\n *\n * For example, when removing an entity that is a parent to another entity, it will\n * removed itself as a parent from the child entity.\n *\n * Note, this option should only be used when the DomainImpactAnalysis has been performed\n * and the user was informed of the impact.\n */\n force?: boolean\n}\n\nexport interface DomainGraphEdge {\n /**\n * Indicates that the edge is to or from a foreign domain.\n */\n foreign?: boolean\n /**\n * The key of the foreign domain. Always set with the `foreign` property.\n */\n domain?: string\n /**\n * The type of the edge.\n * - `association` The edge is to an association object.\n * - When coming **from** an entity (the `v` property), that entity owns the association.\n * - When coming **to** an entity (the `w` property), that entity is the target of the association.\n * An association can have multiple targets.\n * - `property` The edge is to a property object. Can only be created between an entity and a property.\n * - The **from** (`v`) is the entity.\n * - The **to** (`w`) is the property.\n * - `parent` The edge is to a parent object.\n * - The **from** (`v`) is the child entity.\n * - The **to** (`w`) is the parent entity.\n */\n type: 'association' | 'property' | 'parent'\n}\n\nexport type DomainGraphNodeType = DomainNamespace | DomainModel | DomainEntity | DomainProperty | DomainAssociation\n\n/**\n * An interface that describes the data domain dependency.\n */\nexport interface ForeignDomainDependency {\n /**\n * The system registered key of the foreign domain.\n */\n key: string\n /**\n * The version of the foreign domain used in this domain.\n */\n version: string\n}\n\nexport interface AssociationTarget {\n /**\n * The key of the target entity.\n */\n key: string\n /**\n * The key of the target data domain.\n * This is only set when the target is in a different data domain.\n */\n domain?: string\n}\n\n/**\n * Describes the default value set on a property schema.\n */\nexport interface SchemaDefaultValue {\n /**\n * The type of the default value.\n *\n * - `literal` The `value` should be used as-is.\n * - `function` The value represents the name of the function to be used.\n */\n type: 'literal' | 'function'\n /**\n * The actual value type depends on the `type`.\n * It is always a string and it has to be casted to the property's data type.\n */\n value: string\n}\n\n/**\n * A general schema definition for a property.\n * This is propagated to all bindings (when they support these properties).\n */\nexport interface PropertySchema {\n /**\n * The minimum value of the property.\n *\n * By default it is inclusive value. Use the `exclusiveMinimum` property to make it exclusive.\n *\n * Used with:\n * - string\n * - number\n * - date\n * - time\n * - datetime\n */\n minimum?: number\n /**\n * The maximum value of the property.\n *\n * By default it is inclusive value. Use the `exclusiveMaximum` property to make it exclusive.\n *\n * Used with:\n * - string\n * - number\n * - date\n * - time\n * - datetime\n */\n maximum?: number\n /**\n * When set, the minimum value is exclusive.\n *\n * - When `false`: value ≥ minimum.\n * - When `true`: value > minimum.\n */\n exclusiveMinimum?: boolean\n /**\n * When set, the exclusiveMaximum value is exclusive.\n *\n * - When `false`: value ≤ maximum.\n * - When `true`: value < minimum.\n */\n exclusiveMaximum?: boolean\n /**\n * The multiplier value for a number scalar.\n *\n * Examples:\n * - if `1` then every integer is allowed\n * - if `2` than every even number is allowed\n * - if `0.5` than every number dividable by `0.5` is allowed\n */\n multipleOf?: number\n /**\n * The enum values for the property.\n * They are always encoded as strings. The actual type is defined in the `dataType` property.\n */\n enum?: string[]\n /**\n * The default value for the property.\n * This is always encoded as a string. The actual type is defined in the `dataType` property.\n */\n defaultValue?: SchemaDefaultValue\n /**\n * The example values for the property.\n * They are always encoded as strings. The actual type is defined in the `dataType` property.\n */\n examples?: string[]\n /**\n * The pattern to use with a string scalar.\n */\n pattern?: string\n}\n\n/**\n * The shortcut type for the data domain graph.\n */\nexport type DataDomainGraph = Graph<unknown, DomainGraphNodeType, DomainGraphEdge>\n/**\n * The serialized version of the data domain graph.\n */\nexport type SerializedGraph = GraphJson<unknown, object, DomainGraphEdge>\n\n/**\n * Represents a standardized, machine-readable error response body\n * as defined by RFC 7807 for HTTP APIs.\n */\nexport interface ProblemDetails {\n /**\n * A URI that identifies the specific problem type. Should resolve to human-readable docs.\n * e.g., \"https://docs.apinow.app/errors/validation-failed\"\n */\n type: string\n\n /**\n * A short, human-readable summary of the problem type.\n * e.g., \"Validation Error\"\n */\n title: string\n\n /**\n * The HTTP status code generated by the origin server for this problem.\n */\n status?: number\n\n /**\n * A human-readable explanation specific to this occurrence of the problem.\n */\n detail?: string\n\n /**\n * A URI that identifies the specific occurrence of the problem.\n * Can be the API request path that caused the error.\n */\n instance: string\n}\n\n/**\n * The set of supported filter operators for the List action.\n * These are used in query parameters, e.g., ?price[gte]=100\n *\n * - eq: Equal\n * - nq: Not Equal\n * - lt: Less Than\n * - lte: Less Than or Equal\n * - gt: Greater Than\n * - gte: Greater Than or Equal\n * - ex: Checks if the field exists\n * - re: Regular expression match\n * - bf: Date before a specific value\n * - af: Date after a specific value\n * - cn: String contains substring / Array contains element\n * - st: String starts with\n * - end: String ends with\n * - in: Value is one of the elements in the provided array\n * - nin: Value is not one of the elements in the provided array\n */\nexport type ResourceFilterOperator =\n | 'eq' // Equal\n | 'nq' // Not equal\n | 'lt' // Less than\n | 'lte' // Less than or equal\n | 'gt' // Greater than\n | 'gte' // Greater than or equal\n | 'ex' // Checks if the field exists\n | 're' // Regular expression match\n | 'bf' // Date before a specific value\n | 'af' // Date after a specific value\n | 'cn' // String contains substring / Array contains element\n | 'st' // String starts with\n | 'end' // String ends with\n | 'in' // Value is one of the elements in the provided array\n | 'nin' // Value is not one of the elements in the provided array\n\n/**\n * The session transport configuration interface.\n * This defines the properties that are common to all session transports.\n */\ninterface SessionTransport {\n /**\n * Whether the session transport is enabled.\n */\n enabled: boolean\n /**\n * The kind of session transport. Each interface defines its own kind.\n */\n kind: string\n}\n\n/**\n * Configuration for cookie-based session transport.\n */\nexport interface CookieConfiguration extends SessionTransport {\n kind: 'cookie'\n /**\n * The lifetime of the cookie session.\n * This is a string representing the duration, e.g., \"7d\" for 7 days or \"24h\" for 24 hours.\n *\n * @default \"7d\"\n */\n lifetime: string\n /**\n * Whether the cookie can only be accessed by the server.\n * This is a security feature to prevent client-side scripts from accessing the cookie.\n * If set to false, the cookie can be accessed by client-side scripts.\n * @default true\n */\n httpOnly: boolean // Defaults to true\n /**\n * Whether the cookie should only be sent over secure connections (HTTPS).\n * This is a security feature to prevent the cookie from being sent over unencrypted connections.\n * @default true\n */\n secure: boolean\n /**\n * The SameSite attribute of the cookie.\n * This attribute controls whether the cookie is sent with cross-site requests.\n * - 'none' means the cookie is sent with cross-site requests.\n * - 'lax' means the cookie is sent with top-level navigations and will be sent along with GET\n * requests initiated by third-party websites.\n * @default 'none'\n */\n sameSite: 'none' | 'lax'\n /**\n * The name of the cookie.\n * This is the key under which the session data will be stored in the cookie.\n * @default 'as' - 'as' stands for \"api session\"\n */\n name: string\n}\n\n/**\n * Configuration for JWT-based session transport.\n */\nexport interface JwtConfiguration extends SessionTransport {\n kind: 'jwt'\n /**\n * The lifetime of the JWT token.\n * This is a string representing the duration, e.g., \"7d\" for 7 days or \"15m\" for 15 minutes.\n *\n * @default \"7d\"\n */\n lifetime: string\n}\n\nexport interface SessionConfiguration {\n /**\n * The secret used to sign the JWT and cookies. Should be handled securely.\n * Not visible in the UI after being set.\n */\n secret: string\n /**\n * The properties from the `User` entity to be encoded into the session payload (JWT/cookie).\n * These properties become available in the `request.auth` object at runtime.\n *\n * In practice, these are the ids of the properties in the `User` entity.\n */\n properties: string[]\n /**\n * The cookie-based session transport configuration.\n */\n cookie?: CookieConfiguration\n\n /**\n * The JWT-based session transport configuration.\n */\n jwt?: JwtConfiguration\n}\n\n/**\n * Defines the authorization strategy for the API.\n * It is a base interface that can be extended for different strategies.\n * For MVP, we will start with Roles-Based Access Control (RBAC).\n */\nexport interface AuthorizationConfiguration {\n /**\n * The authorization strategy. For MVP, we will start with RBAC.\n * Post-MVP will include Permission-Based Access Control (PBAC).\n * The strategy determines how users are granted access to resources.\n *\n * - RBAC (Roles-Based Access Control): Users are assigned roles, and permissions are granted to those roles.\n * - PBAC (Permission-Based Access Control): Users are granted permissions directly, allowing for more\n * granular control.\n */\n strategy: string\n}\n\nexport interface RolesBasedAccessControl extends AuthorizationConfiguration {\n strategy: 'RBAC'\n /**\n * The property within the designated \"User\" entity that defines the user's role.\n * This field is used in access rules to grant permissions.\n *\n * This property must be marked with the \"Role\" data semantic in the Data Modeler.\n * It is required to publish the API.\n */\n roleKey: string\n}\n\n/**\n * Configures the strategy for authenticating end-users.\n * An API can only support one authentication strategy at a time.\n * This is a base interface that can be extended for different strategies.\n */\nexport interface AuthenticationConfiguration {\n /**\n * The authentication method. For MVP, this is focused on username/password.\n * This can be extended in the future to include 'SSO'.\n */\n strategy: string\n}\n\n/**\n * Configuration for username/password authentication.\n * This is the primary authentication method for the API (MVP).\n */\nexport interface UsernamePasswordConfiguration extends AuthenticationConfiguration {\n strategy: 'UsernamePassword'\n /**\n * The specific property within the User entity that holds the password.\n * This property must be marked with the \"Password\" data semantic in the Data Modeler.\n *\n * This property is required to publish the API.\n */\n passwordKey?: string\n}\n\n/**\n * Represents a Data Entity from the Data Domain that the API will expose and operate upon.\n */\nexport interface ExposedEntitySchema {\n kind: typeof ExposedEntityKind\n /**\n * The unique identifier for this exposure instance.\n * In the exposure model, we need to uniquely identify each exposure instance, because\n * an entity can be exposed multiple times in different contexts. Consider the following structure:\n *\n * ```\n * /categories/{categoryId}\n * /products/{productId}/categories\n * /products/{productId}/categories/{categoryId}\n * /promotions/{promotionId}/categories\n * /promotions/{promotionId}/categories/{categoryId}\n * ```\n *\n * The `category` entity would be exposed multiple times (as root and nested under products and promotions).\n * We need a way to distinguish between these different exposure instances.\n */\n key: string\n /**\n * A pointer to a Data Entity from the Data Domain.\n */\n entity: AssociationTarget\n /**\n * Indicates whether this exposure has a collection endpoint.\n * A collection endpoint is optional for nested exposures where the association is 1:1\n * and the schema is embedded directly under the parent resource.\n */\n hasCollection: boolean\n /**\n * A path to the collection endpoint for this exposure.\n * Starts with '/'. Not set for 1:1 nested exposures where collection does not exist.\n */\n collectionPath?: string\n\n /**\n * A path to the resource endpoint for this exposure.\n * Starts with '/'. For 1:1 nested exposures the resource path typically does not include an id segment.\n */\n resourcePath: string\n\n /**\n * Whether this exposure is a root exposure (top-level collection).\n * If this is set then the `parent` reference must be populated.\n */\n isRoot?: boolean\n\n /**\n * Parent reference when this exposure was created via following an association.\n */\n parent?: ExposeParentRef\n\n /**\n * Expose-time config used to create this exposure (persisted for auditing/UI).\n * This is only populated for the root exposure. All children exposures inherit this config.\n */\n exposeOptions?: ExposeOptions\n\n /**\n * The list of enabled API actions for this exposure (List/Read/Create/etc.)\n */\n actions: ActionSchema[]\n\n /**\n * Optional array of access rules that define the access control policies for this exposure.\n */\n accessRule?: AccessRuleSchema[]\n\n /**\n * Optional configuration for rate limiting for this exposure.\n */\n rateLimiting?: RateLimitingConfigurationSchema\n\n /**\n * When true, generation for this exposure hit configured limits\n */\n truncated?: boolean\n}\n\n/**\n * Parent reference stored on a nested exposure\n */\nexport interface ExposeParentRef {\n /**\n * The key of the parent exposed entity. This references the `ExposedEntity.key` property.\n */\n key: string\n /**\n * The association from the parent that produced this exposure.\n * A sub-entity must always have a parent association.\n */\n association: AssociationTarget\n /**\n * The numeric depth from the root exposure (root = 0)\n */\n depth?: number\n}\n\n/**\n * Options passed when creating a new exposure\n */\nexport interface ExposeOptions {\n /**\n * Whether to follow associations when creating the exposure.\n * When not set, it only exposes the passed entity.\n */\n followAssociations?: boolean\n /**\n * The maximum depth to follow associations when creating the exposure.\n */\n maxDepth?: number\n}\n\n/**\n * Represents a pagination strategy for API actions that return collections of resources.\n * This is a base interface that can be extended for different pagination strategies.\n */\nexport interface PaginationStrategy {\n /**\n * The kind of pagination strategy. This is used to identify the specific pagination method.\n * For example, 'cursor' for cursor-based pagination or 'offset' for offset-based pagination.\n */\n kind: string\n /**\n * The default page size for the pagination strategy.\n * This is the number of items returned per page when no specific page size is requested.\n */\n pageSize?: number\n}\n\n/**\n * Represents the cursor-based pagination strategy.\n */\nexport interface CursorPaginationStrategy extends PaginationStrategy {\n kind: 'cursor'\n}\n\n/**\n * Represents the offset-based pagination strategy.\n */\nexport interface OffsetPaginationStrategy extends PaginationStrategy {\n kind: 'offset'\n}\n\nexport type DomainImpactKinds =\n | typeof DomainNamespaceKind\n | typeof DomainEntityKind\n | typeof DomainModelKind\n | typeof DomainPropertyKind\n | typeof DomainAssociationKind\n | typeof DataDomainKind\n\n/**\n * The impact analysis report\n */\nexport interface DomainImpactReport {\n /**\n * The key of the impacted data object.\n * This is the key of the object that is being changed.\n */\n key: string\n /**\n * The kind of the impacted data object.\n * This is the kind of the object that is being changed.\n */\n kind: DomainImpactKinds\n /**\n * The list of impacted data objects.\n */\n impact: DomainImpactItem[]\n /**\n * Whether it is possible to proceed with the change.\n * If the change is not possible, the reason will be in the impact list.\n */\n canProceed: boolean\n}\n\nexport interface DomainImpactItem {\n /**\n * The key of the impacted data object.\n */\n key: string\n /**\n * The kind of the impacted data object.\n */\n kind: string\n /**\n * The type of the impact.\n *\n * - `delete` - The data object would be deleted.\n */\n type: 'delete' | 'publish'\n /**\n * The impact description.\n * Explains what will happen to the impacted data object.\n * This is a human-readable description of the impact.\n * It should be clear and concise.\n */\n impact: string\n /**\n * The severity of the impact.\n *\n * - `info` - The impact is informational.\n * - `warning` - The impact can potentially cause problems but is not a blocker.\n * - `error` - The impact is a blocker and needs to be resolved before proceeding.\n */\n severity: 'info' | 'warning' | 'error'\n /**\n * The type of the relationship between two impacted objects.\n */\n relationship?: 'child'\n /**\n * The resolution of the conflict if the change will be forced.\n */\n resolution?: string\n /**\n * The optional parent of the impacted data object.\n * For example, if the impacted item is a property, this will be the entity it belongs to.\n */\n parent?: string\n}\n\nexport interface DeserializeOptions {\n /**\n * The mode to use for deserialization.\n */\n mode?: DeserializationMode\n /**\n * The serialized graph to deserialize.\n * This is the JSON representation of the graph.\n */\n json?: SerializedGraph\n /**\n * The list of foreign domains that this domain depends on.\n */\n dependencies?: DataDomain[]\n}\n\n/**\n * Describes the mode for deserializing a domain graph.\n */\nexport type DeserializationMode = 'strict' | 'lenient'\n\n/**\n * Describes an issue found during deserialization.\n */\nexport interface DeserializationIssue {\n /**\n * The type of issue encountered.\n */\n type: 'missing_node' | 'missing_edge' | 'invalid_parent' | 'missing_dependency' | 'malformed_entry' | 'unknown_kind'\n /**\n * The severity of the issue.\n */\n severity: 'error' | 'warning' | 'info'\n /**\n * A human-readable description of the issue.\n */\n message: string\n /**\n * The key of the affected node, edge, or entity if applicable.\n */\n affectedKey?: string\n /**\n * Additional context about the issue.\n */\n context?: Record<string, unknown>\n /**\n * The action taken to handle this issue in lenient mode.\n */\n resolution?: string\n}\n\n/**\n * The result of a deserialization operation.\n */\nexport interface DeserializationResult {\n /**\n * The deserialized graph.\n */\n graph: DataDomainGraph\n /**\n * Issues encountered during deserialization.\n */\n issues: DeserializationIssue[]\n /**\n * Whether the deserialization was successful.\n * This is set to true when a critical failures occurred.\n */\n success: boolean\n}\n\n/**\n * Available node types for search filtering.\n */\nexport type SearchableNodeType =\n | typeof DomainNamespaceKind\n | typeof DomainModelKind\n | typeof DomainEntityKind\n | typeof DomainPropertyKind\n | typeof DomainAssociationKind\n\n/**\n * Search criteria for filtering domain nodes.\n */\nexport interface DomainSearchCriteria {\n /**\n * Text query to search for in name, displayName, and description fields.\n * Can be a string for exact match or RegExp for pattern matching.\n */\n query?: string | RegExp\n\n /**\n * Filter by specific node types. If not provided, all node types are included.\n */\n nodeTypes?: SearchableNodeType[]\n\n /**\n * Whether to include nodes from foreign domains in the search results.\n * Defaults to false.\n */\n includeForeignDomains?: boolean\n\n /**\n * Case-sensitive search when using string query.\n * Defaults to false (case-insensitive).\n */\n caseSensitive?: boolean\n}\n\n/**\n * A search result containing a matching domain node and metadata.\n */\nexport interface DomainSearchResult {\n /**\n * The matching domain node.\n */\n node: DomainGraphNodeType\n\n /**\n * The field(s) that matched the search query.\n */\n matchedFields: ('name' | 'displayName' | 'description')[]\n\n /**\n * The key used to identify this node in the graph.\n */\n key: string\n\n /**\n * Whether this node belongs to a foreign domain.\n */\n isForeign: boolean\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modeling/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { GraphJson } from '@api-client/graph/graph/types.js'\nimport type { Graph } from '@api-client/graph/graph/Graph.js'\nimport type { DomainAssociation } from './DomainAssociation.js'\nimport type { DomainEntity } from './DomainEntity.js'\nimport type { DomainModel } from './DomainModel.js'\nimport type { DomainNamespace } from './DomainNamespace.js'\nimport type { DomainProperty } from './DomainProperty.js'\nimport type {\n DomainNamespaceKind,\n DomainEntityKind,\n DomainModelKind,\n DomainPropertyKind,\n DomainAssociationKind,\n DataDomainKind,\n ExposedEntityKind,\n} from '../models/kinds.js'\nimport type { DataDomain } from './DataDomain.js'\nimport { AccessRuleSchema } from './rules/AccessRule.js'\nimport { RateLimitingConfigurationSchema } from './rules/RateLimitingConfiguration.js'\nimport { ActionSchema } from './actions/Action.js'\n\nexport interface DataDomainRemoveOptions {\n /**\n * When true, the object will be forcibly removed.\n * The resolution defined in the `ImpactResolution` class will be applied.\n *\n * For example, when removing an entity that is a parent to another entity, it will\n * removed itself as a parent from the child entity.\n *\n * Note, this option should only be used when the DomainImpactAnalysis has been performed\n * and the user was informed of the impact.\n */\n force?: boolean\n}\n\nexport interface DomainGraphEdge {\n /**\n * Indicates that the edge is to or from a foreign domain.\n */\n foreign?: boolean\n /**\n * The key of the foreign domain. Always set with the `foreign` property.\n */\n domain?: string\n /**\n * The type of the edge.\n * - `association` The edge is to an association object.\n * - When coming **from** an entity (the `v` property), that entity owns the association.\n * - When coming **to** an entity (the `w` property), that entity is the target of the association.\n * An association can have multiple targets.\n * - `property` The edge is to a property object. Can only be created between an entity and a property.\n * - The **from** (`v`) is the entity.\n * - The **to** (`w`) is the property.\n * - `parent` The edge is to a parent object.\n * - The **from** (`v`) is the child entity.\n * - The **to** (`w`) is the parent entity.\n */\n type: 'association' | 'property' | 'parent'\n}\n\nexport type DomainGraphNodeType = DomainNamespace | DomainModel | DomainEntity | DomainProperty | DomainAssociation\n\n/**\n * An interface that describes the data domain dependency.\n */\nexport interface ForeignDomainDependency {\n /**\n * The system registered key of the foreign domain.\n */\n key: string\n /**\n * The version of the foreign domain used in this domain.\n */\n version: string\n}\n\nexport interface AssociationTarget {\n /**\n * The key of the target entity.\n */\n key: string\n /**\n * The key of the target data domain.\n * This is only set when the target is in a different data domain.\n */\n domain?: string\n}\n\n/**\n * Describes the default value set on a property schema.\n */\nexport interface SchemaDefaultValue {\n /**\n * The type of the default value.\n *\n * - `literal` The `value` should be used as-is.\n * - `function` The value represents the name of the function to be used.\n */\n type: 'literal' | 'function'\n /**\n * The actual value type depends on the `type`.\n * It is always a string and it has to be casted to the property's data type.\n */\n value: string\n}\n\n/**\n * A general schema definition for a property.\n * This is propagated to all bindings (when they support these properties).\n */\nexport interface PropertySchema {\n /**\n * The minimum value of the property.\n *\n * By default it is inclusive value. Use the `exclusiveMinimum` property to make it exclusive.\n *\n * Used with:\n * - string\n * - number\n * - date\n * - time\n * - datetime\n */\n minimum?: number\n /**\n * The maximum value of the property.\n *\n * By default it is inclusive value. Use the `exclusiveMaximum` property to make it exclusive.\n *\n * Used with:\n * - string\n * - number\n * - date\n * - time\n * - datetime\n */\n maximum?: number\n /**\n * When set, the minimum value is exclusive.\n *\n * - When `false`: value ≥ minimum.\n * - When `true`: value > minimum.\n */\n exclusiveMinimum?: boolean\n /**\n * When set, the exclusiveMaximum value is exclusive.\n *\n * - When `false`: value ≤ maximum.\n * - When `true`: value < minimum.\n */\n exclusiveMaximum?: boolean\n /**\n * The multiplier value for a number scalar.\n *\n * Examples:\n * - if `1` then every integer is allowed\n * - if `2` than every even number is allowed\n * - if `0.5` than every number dividable by `0.5` is allowed\n */\n multipleOf?: number\n /**\n * The enum values for the property.\n * They are always encoded as strings. The actual type is defined in the `dataType` property.\n */\n enum?: string[]\n /**\n * The default value for the property.\n * This is always encoded as a string. The actual type is defined in the `dataType` property.\n */\n defaultValue?: SchemaDefaultValue\n /**\n * The example values for the property.\n * They are always encoded as strings. The actual type is defined in the `dataType` property.\n */\n examples?: string[]\n /**\n * The pattern to use with a string scalar.\n */\n pattern?: string\n}\n\n/**\n * The shortcut type for the data domain graph.\n */\nexport type DataDomainGraph = Graph<unknown, DomainGraphNodeType, DomainGraphEdge>\n/**\n * The serialized version of the data domain graph.\n */\nexport type SerializedGraph = GraphJson<unknown, object, DomainGraphEdge>\n\n/**\n * Represents a standardized, machine-readable error response body\n * as defined by RFC 7807 for HTTP APIs.\n */\nexport interface ProblemDetails {\n /**\n * A URI that identifies the specific problem type. Should resolve to human-readable docs.\n * e.g., \"https://docs.apinow.app/errors/validation-failed\"\n */\n type: string\n\n /**\n * A short, human-readable summary of the problem type.\n * e.g., \"Validation Error\"\n */\n title: string\n\n /**\n * The HTTP status code generated by the origin server for this problem.\n */\n status?: number\n\n /**\n * A human-readable explanation specific to this occurrence of the problem.\n */\n detail?: string\n\n /**\n * A URI that identifies the specific occurrence of the problem.\n * Can be the API request path that caused the error.\n */\n instance: string\n}\n\n/**\n * The set of supported filter operators for the List action.\n * These are used in query parameters, e.g., ?price[gte]=100\n *\n * - eq: Equal\n * - nq: Not Equal\n * - lt: Less Than\n * - lte: Less Than or Equal\n * - gt: Greater Than\n * - gte: Greater Than or Equal\n * - ex: Checks if the field exists\n * - re: Regular expression match\n * - bf: Date before a specific value\n * - af: Date after a specific value\n * - cn: String contains substring / Array contains element\n * - st: String starts with\n * - end: String ends with\n * - in: Value is one of the elements in the provided array\n * - nin: Value is not one of the elements in the provided array\n */\nexport type ResourceFilterOperator =\n | 'eq' // Equal\n | 'nq' // Not equal\n | 'lt' // Less than\n | 'lte' // Less than or equal\n | 'gt' // Greater than\n | 'gte' // Greater than or equal\n | 'ex' // Checks if the field exists\n | 're' // Regular expression match\n | 'bf' // Date before a specific value\n | 'af' // Date after a specific value\n | 'cn' // String contains substring / Array contains element\n | 'st' // String starts with\n | 'end' // String ends with\n | 'in' // Value is one of the elements in the provided array\n | 'nin' // Value is not one of the elements in the provided array\n\n/**\n * The session transport configuration interface.\n * This defines the properties that are common to all session transports.\n */\ninterface SessionTransport {\n /**\n * Whether the session transport is enabled.\n */\n enabled: boolean\n /**\n * The kind of session transport. Each interface defines its own kind.\n */\n kind: string\n}\n\n/**\n * Configuration for cookie-based session transport.\n */\nexport interface CookieConfiguration extends SessionTransport {\n kind: 'cookie'\n /**\n * The lifetime of the cookie session.\n * This is a string representing the duration, e.g., \"7d\" for 7 days or \"24h\" for 24 hours.\n *\n * @default \"7d\"\n */\n lifetime: string\n /**\n * Whether the cookie can only be accessed by the server.\n * This is a security feature to prevent client-side scripts from accessing the cookie.\n * If set to false, the cookie can be accessed by client-side scripts.\n * @default true\n */\n httpOnly: boolean // Defaults to true\n /**\n * Whether the cookie should only be sent over secure connections (HTTPS).\n * This is a security feature to prevent the cookie from being sent over unencrypted connections.\n * @default true\n */\n secure: boolean\n /**\n * The SameSite attribute of the cookie.\n * This attribute controls whether the cookie is sent with cross-site requests.\n * - 'none' means the cookie is sent with cross-site requests.\n * - 'lax' means the cookie is sent with top-level navigations and will be sent along with GET\n * requests initiated by third-party websites.\n * @default 'none'\n */\n sameSite: 'none' | 'lax'\n /**\n * The name of the cookie.\n * This is the key under which the session data will be stored in the cookie.\n * @default 'as' - 'as' stands for \"api session\"\n */\n name: string\n}\n\n/**\n * Configuration for JWT-based session transport.\n */\nexport interface JwtConfiguration extends SessionTransport {\n kind: 'jwt'\n /**\n * The lifetime of the JWT token.\n * This is a string representing the duration, e.g., \"7d\" for 7 days or \"15m\" for 15 minutes.\n *\n * @default \"7d\"\n */\n lifetime: string\n}\n\nexport interface SessionConfiguration {\n /**\n * The secret used to sign the JWT and cookies. Should be handled securely.\n * Not visible in the UI after being set.\n */\n secret: string\n /**\n * The properties from the `User` entity to be encoded into the session payload (JWT/cookie).\n * These properties become available in the `request.auth` object at runtime.\n *\n * In practice, these are the ids of the properties in the `User` entity.\n */\n properties: string[]\n /**\n * The cookie-based session transport configuration.\n */\n cookie?: CookieConfiguration\n\n /**\n * The JWT-based session transport configuration.\n */\n jwt?: JwtConfiguration\n}\n\n/**\n * Defines the authorization strategy for the API.\n * It is a base interface that can be extended for different strategies.\n * For MVP, we will start with Roles-Based Access Control (RBAC).\n */\nexport interface AuthorizationConfiguration {\n /**\n * The authorization strategy. For MVP, we will start with RBAC.\n * Post-MVP will include Permission-Based Access Control (PBAC).\n * The strategy determines how users are granted access to resources.\n *\n * - RBAC (Roles-Based Access Control): Users are assigned roles, and permissions are granted to those roles.\n * - PBAC (Permission-Based Access Control): Users are granted permissions directly, allowing for more\n * granular control.\n */\n strategy: string\n}\n\nexport interface RolesBasedAccessControl extends AuthorizationConfiguration {\n strategy: 'RBAC'\n /**\n * The property within the designated \"User\" entity that defines the user's role.\n * This field is used in access rules to grant permissions.\n *\n * This property must be marked with the \"Role\" data semantic in the Data Modeler.\n * It is required to publish the API.\n */\n roleKey: string\n}\n\n/**\n * Configures the strategy for authenticating end-users.\n * An API can only support one authentication strategy at a time.\n * This is a base interface that can be extended for different strategies.\n */\nexport interface AuthenticationConfiguration {\n /**\n * The authentication method. For MVP, this is focused on username/password.\n * This can be extended in the future to include 'SSO'.\n */\n strategy: string\n}\n\n/**\n * Configuration for username/password authentication.\n * This is the primary authentication method for the API (MVP).\n */\nexport interface UsernamePasswordConfiguration extends AuthenticationConfiguration {\n strategy: 'UsernamePassword'\n /**\n * The specific property within the User entity that holds the password.\n * This property must be marked with the \"Password\" data semantic in the Data Modeler.\n *\n * This property is required to publish the API.\n */\n passwordKey?: string\n}\n\n/**\n * Represents a Data Entity from the Data Domain that the API will expose and operate upon.\n */\nexport interface ExposedEntitySchema {\n kind: typeof ExposedEntityKind\n /**\n * The unique identifier for this exposure instance.\n * In the exposure model, we need to uniquely identify each exposure instance, because\n * an entity can be exposed multiple times in different contexts. Consider the following structure:\n *\n * ```\n * /categories/{categoryId}\n * /products/{productId}/categories\n * /products/{productId}/categories/{categoryId}\n * /promotions/{promotionId}/categories\n * /promotions/{promotionId}/categories/{categoryId}\n * ```\n *\n * The `category` entity would be exposed multiple times (as root and nested under products and promotions).\n * We need a way to distinguish between these different exposure instances.\n */\n key: string\n /**\n * A pointer to a Data Entity from the Data Domain.\n */\n entity: AssociationTarget\n /**\n * Indicates whether this exposure has a collection endpoint.\n * A collection endpoint is optional for nested exposures where the association is 1:1\n * and the schema is embedded directly under the parent resource.\n */\n hasCollection: boolean\n /**\n * A path to the collection endpoint for this exposure.\n * Starts with '/'. Not set for 1:1 nested exposures where collection does not exist.\n */\n collectionPath?: string\n\n /**\n * A path to the resource endpoint for this exposure.\n * Starts with '/'. For 1:1 nested exposures the resource path typically does not include an id segment.\n */\n resourcePath: string\n\n /**\n * Whether this exposure is a root exposure (top-level collection).\n * If this is set then the `parent` reference must be populated.\n */\n isRoot?: boolean\n\n /**\n * Parent reference when this exposure was created via following an association.\n */\n parent?: ExposeParentRef\n\n /**\n * Expose-time config used to create this exposure (persisted for auditing/UI).\n * This is only populated for the root exposure. All children exposures inherit this config.\n */\n exposeOptions?: ExposeOptions\n\n /**\n * The list of enabled API actions for this exposure (List/Read/Create/etc.)\n */\n actions: ActionSchema[]\n\n /**\n * Optional array of access rules that define the access control policies for this exposure.\n */\n accessRule?: AccessRuleSchema[]\n\n /**\n * Optional configuration for rate limiting for this exposure.\n */\n rateLimiting?: RateLimitingConfigurationSchema\n\n /**\n * When true, generation for this exposure hit configured limits\n */\n truncated?: boolean\n}\n\n/**\n * Parent reference stored on a nested exposure\n */\nexport interface ExposeParentRef {\n /**\n * The key of the parent exposed entity. This references the `ExposedEntity.key` property.\n */\n key: string\n /**\n * The association from the parent that produced this exposure.\n * A sub-entity must always have a parent association.\n */\n association: AssociationTarget\n /**\n * The numeric depth from the root exposure (root = 0)\n */\n depth?: number\n}\n\n/**\n * Options passed when creating a new exposure\n */\nexport interface ExposeOptions {\n /**\n * Whether to follow associations when creating the exposure.\n * When not set, it only exposes the passed entity.\n */\n followAssociations?: boolean\n /**\n * The maximum depth to follow associations when creating the exposure.\n */\n maxDepth?: number\n}\n\n/**\n * Represents a pagination strategy for API actions that return collections of resources.\n * This is a base interface that can be extended for different pagination strategies.\n */\nexport interface PaginationStrategy {\n /**\n * The kind of pagination strategy. This is used to identify the specific pagination method.\n * For example, 'cursor' for cursor-based pagination or 'offset' for offset-based pagination.\n */\n kind: string\n /**\n * The default page size for the pagination strategy.\n * This is the number of items returned per page when no specific page size is requested.\n */\n pageSize?: number\n}\n\n/**\n * Represents the cursor-based pagination strategy.\n */\nexport interface CursorPaginationStrategy extends PaginationStrategy {\n kind: 'cursor'\n}\n\n/**\n * Represents the offset-based pagination strategy.\n */\nexport interface OffsetPaginationStrategy extends PaginationStrategy {\n kind: 'offset'\n}\n\nexport type DomainImpactKinds =\n | typeof DomainNamespaceKind\n | typeof DomainEntityKind\n | typeof DomainModelKind\n | typeof DomainPropertyKind\n | typeof DomainAssociationKind\n | typeof DataDomainKind\n\n/**\n * The impact analysis report\n */\nexport interface DomainImpactReport {\n /**\n * The key of the impacted data object.\n * This is the key of the object that is being changed.\n */\n key: string\n /**\n * The kind of the impacted data object.\n * This is the kind of the object that is being changed.\n */\n kind: DomainImpactKinds\n /**\n * The list of impacted data objects.\n */\n impact: DomainImpactItem[]\n /**\n * Whether it is possible to proceed with the change.\n * If the change is not possible, the reason will be in the impact list.\n */\n canProceed: boolean\n}\n\nexport interface DomainImpactItem {\n /**\n * The key of the impacted data object.\n */\n key: string\n /**\n * The kind of the impacted data object.\n */\n kind: string\n /**\n * The type of the impact.\n *\n * - `delete` - The data object would be deleted.\n */\n type: 'delete' | 'publish'\n /**\n * The impact description.\n * Explains what will happen to the impacted data object.\n * This is a human-readable description of the impact.\n * It should be clear and concise.\n */\n impact: string\n /**\n * The severity of the impact.\n *\n * - `info` - The impact is informational.\n * - `warning` - The impact can potentially cause problems but is not a blocker.\n * - `error` - The impact is a blocker and needs to be resolved before proceeding.\n */\n severity: 'info' | 'warning' | 'error'\n /**\n * The type of the relationship between two impacted objects.\n */\n relationship?: 'child'\n /**\n * The resolution of the conflict if the change will be forced.\n */\n resolution?: string\n /**\n * The optional parent of the impacted data object.\n * For example, if the impacted item is a property, this will be the entity it belongs to.\n */\n parent?: string\n}\n\nexport interface DeserializeOptions {\n /**\n * The mode to use for deserialization.\n */\n mode?: DeserializationMode\n /**\n * The serialized graph to deserialize.\n * This is the JSON representation of the graph.\n */\n json?: SerializedGraph\n /**\n * The list of foreign domains that this domain depends on.\n */\n dependencies?: DataDomain[]\n}\n\n/**\n * Describes the mode for deserializing a domain graph.\n */\nexport type DeserializationMode = 'strict' | 'lenient'\n\n/**\n * Describes an issue found during deserialization.\n */\nexport interface DeserializationIssue {\n /**\n * The type of issue encountered.\n */\n type: 'missing_node' | 'missing_edge' | 'invalid_parent' | 'missing_dependency' | 'malformed_entry' | 'unknown_kind'\n /**\n * The severity of the issue.\n */\n severity: 'error' | 'warning' | 'info'\n /**\n * A human-readable description of the issue.\n */\n message: string\n /**\n * The key of the affected node, edge, or entity if applicable.\n */\n affectedKey?: string\n /**\n * Additional context about the issue.\n */\n context?: Record<string, unknown>\n /**\n * The action taken to handle this issue in lenient mode.\n */\n resolution?: string\n}\n\n/**\n * The result of a deserialization operation.\n */\nexport interface DeserializationResult {\n /**\n * The deserialized graph.\n */\n graph: DataDomainGraph\n /**\n * Issues encountered during deserialization.\n */\n issues: DeserializationIssue[]\n /**\n * Whether the deserialization was successful.\n * This is set to true when a critical failures occurred.\n */\n success: boolean\n}\n\n/**\n * Available node types for search filtering.\n */\nexport type SearchableNodeType =\n | typeof DomainNamespaceKind\n | typeof DomainModelKind\n | typeof DomainEntityKind\n | typeof DomainPropertyKind\n | typeof DomainAssociationKind\n\n/**\n * Search criteria for filtering domain nodes.\n */\nexport interface DomainSearchCriteria {\n /**\n * Text query to search for in name, displayName, and description fields.\n * Can be a string for exact match or RegExp for pattern matching.\n */\n query?: string | RegExp\n\n /**\n * Filter by specific node types. If not provided, all node types are included.\n */\n nodeTypes?: SearchableNodeType[]\n\n /**\n * Whether to include nodes from foreign domains in the search results.\n * Defaults to false.\n */\n includeForeignDomains?: boolean\n\n /**\n * Case-sensitive search when using string query.\n * Defaults to false (case-insensitive).\n */\n caseSensitive?: boolean\n}\n\n/**\n * A search result containing a matching domain node and metadata.\n */\nexport interface DomainSearchResult {\n /**\n * The matching domain node.\n */\n node: DomainGraphNodeType\n\n /**\n * The field(s) that matched the search query.\n */\n matchedFields: ('name' | 'displayName' | 'description')[]\n\n /**\n * The key used to identify this node in the graph.\n */\n key: string\n\n /**\n * Whether this node belongs to a foreign domain.\n */\n isForeign: boolean\n}\n\n/**\n * Contextual information about where the API Model validation issue occurred.\n * This allows the UI to trace back a validation error to a specific module or component.\n */\nexport interface ApiModelValidationContext {\n /**\n * The key of the ApiModel itself.\n */\n apiModelKey: string\n /**\n * The kind of the affected component (e.g., 'ApiModel', 'ExposedEntity', 'Action').\n */\n kind: string\n /**\n * The key of the specific entity or action where the issue occurred.\n * If the error is at the root API model, this might be the ApiModel's key.\n */\n key: string\n /**\n * The specific property being validated, if applicable.\n */\n property?: string\n /**\n * The key of the parent ExposedEntity, if this issue occurred on a nested entity or an action.\n */\n parentExposedEntityKey?: string\n}\n\n/**\n * Represents a single validation issue found within an ApiModel.\n */\nexport interface ApiModelValidationItem {\n /**\n * A unique code identifying the type of validation error. This enables\n * programmatic handling or auto-fixing in the UI (e.g., 'API_MISSING_NAME', 'LIST_ACTION_MISSING_PAGINATION').\n */\n code: string\n /**\n * A human-readable description of the problem.\n */\n message: string\n /**\n * A human-readable suggestion on how to fix the issue.\n */\n suggestion: string\n /**\n * The severity of the validation issue.\n */\n severity: 'error' | 'warning' | 'info'\n /**\n * Contextual information to trace the issue back to its source component.\n */\n context: ApiModelValidationContext\n}\n\n/**\n * The consolidated result of validating an entire ApiModel or a subset of it.\n */\nexport interface ApiModelValidationResult {\n /**\n * A boolean indicating whether the model is structurally sound and ready for publication.\n * Typically true if there are no 'error' severity issues.\n */\n isValid: boolean\n /**\n * The aggregated list of all validation issues found.\n */\n issues: ApiModelValidationItem[]\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import type { ApiModel } from '../ApiModel.js';
2
+ import type { ExposedEntity } from '../ExposedEntity.js';
3
+ import type { Action } from '../actions/Action.js';
4
+ import type { ApiModelValidationItem, ApiModelValidationResult } from '../types.js';
5
+ /**
6
+ * Validates the core properties and metadata of an ApiModel.
7
+ */
8
+ export declare function validateApiModelInfo(model: ApiModel): ApiModelValidationItem[];
9
+ export declare function validateApiModelDependency(model: ApiModel): ApiModelValidationItem[];
10
+ export declare function validateApiModelSecurity(model: ApiModel): ApiModelValidationItem[];
11
+ export declare function validateApiModelMetadata(model: ApiModel): ApiModelValidationItem[];
12
+ export declare function validateAction(action: Action, parent: ExposedEntity, apiModelKey: string): ApiModelValidationItem[];
13
+ export declare function validateExposedEntity(entity: ExposedEntity, apiModel: ApiModel): ApiModelValidationItem[];
14
+ export declare function validateApiModel(model: ApiModel): ApiModelValidationResult;
15
+ //# sourceMappingURL=api_model_rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api_model_rules.d.ts","sourceRoot":"","sources":["../../../../src/modeling/validation/api_model_rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAMlD,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB,EAA6B,MAAM,aAAa,CAAA;AAa9G;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,GAAG,sBAAsB,EAAE,CAiD9E;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,QAAQ,GAAG,sBAAsB,EAAE,CA+BpF;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,GAAG,sBAAsB,EAAE,CAuKlF;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,GAAG,sBAAsB,EAAE,CAuElF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,sBAAsB,EAAE,CA2FnH;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAG,sBAAsB,EAAE,CAsKzG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,GAAG,wBAAwB,CA4B1E"}