@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.
- package/LICENSE.md +9 -63
- package/Testing.md +1 -1
- package/bin/test.ts +1 -12
- package/build/src/browser.d.ts +0 -15
- package/build/src/browser.d.ts.map +1 -1
- package/build/src/browser.js +0 -17
- package/build/src/browser.js.map +1 -1
- package/build/src/decorators/observed.d.ts.map +1 -1
- package/build/src/decorators/observed.js +91 -0
- package/build/src/decorators/observed.js.map +1 -1
- package/build/src/events/EventTypes.d.ts +0 -6
- package/build/src/events/EventTypes.d.ts.map +1 -1
- package/build/src/events/EventTypes.js +0 -2
- package/build/src/events/EventTypes.js.map +1 -1
- package/build/src/events/Events.d.ts +0 -2
- package/build/src/events/Events.d.ts.map +1 -1
- package/build/src/events/Events.js +0 -2
- package/build/src/events/Events.js.map +1 -1
- package/build/src/index.d.ts +0 -15
- package/build/src/index.d.ts.map +1 -1
- package/build/src/index.js +0 -17
- package/build/src/index.js.map +1 -1
- package/build/src/modeling/ApiModel.d.ts +21 -7
- package/build/src/modeling/ApiModel.d.ts.map +1 -1
- package/build/src/modeling/ApiModel.js +70 -29
- package/build/src/modeling/ApiModel.js.map +1 -1
- package/build/src/modeling/Bindings.d.ts +3 -3
- package/build/src/modeling/Bindings.d.ts.map +1 -1
- package/build/src/modeling/Bindings.js.map +1 -1
- package/build/src/modeling/DomainAssociation.d.ts +5 -5
- package/build/src/modeling/DomainAssociation.d.ts.map +1 -1
- package/build/src/modeling/DomainAssociation.js.map +1 -1
- package/build/src/modeling/DomainEntity.d.ts +2 -3
- package/build/src/modeling/DomainEntity.d.ts.map +1 -1
- package/build/src/modeling/DomainEntity.js +1 -1
- package/build/src/modeling/DomainEntity.js.map +1 -1
- package/build/src/modeling/DomainProperty.d.ts +2 -3
- package/build/src/modeling/DomainProperty.d.ts.map +1 -1
- package/build/src/modeling/DomainProperty.js +1 -1
- package/build/src/modeling/DomainProperty.js.map +1 -1
- package/build/src/modeling/DomainValidation.d.ts +1 -1
- package/build/src/modeling/DomainValidation.d.ts.map +1 -1
- package/build/src/modeling/DomainValidation.js.map +1 -1
- package/build/src/modeling/ExposedEntity.d.ts +14 -0
- package/build/src/modeling/ExposedEntity.d.ts.map +1 -1
- package/build/src/modeling/ExposedEntity.js +59 -6
- package/build/src/modeling/ExposedEntity.js.map +1 -1
- package/build/src/modeling/actions/Action.d.ts +11 -1
- package/build/src/modeling/actions/Action.d.ts.map +1 -1
- package/build/src/modeling/actions/Action.js +21 -3
- package/build/src/modeling/actions/Action.js.map +1 -1
- package/build/src/modeling/actions/CreateAction.d.ts +2 -1
- package/build/src/modeling/actions/CreateAction.d.ts.map +1 -1
- package/build/src/modeling/actions/CreateAction.js +2 -2
- package/build/src/modeling/actions/CreateAction.js.map +1 -1
- package/build/src/modeling/actions/DeleteAction.d.ts +2 -1
- package/build/src/modeling/actions/DeleteAction.d.ts.map +1 -1
- package/build/src/modeling/actions/DeleteAction.js +2 -2
- package/build/src/modeling/actions/DeleteAction.js.map +1 -1
- package/build/src/modeling/actions/ListAction.d.ts +2 -1
- package/build/src/modeling/actions/ListAction.d.ts.map +1 -1
- package/build/src/modeling/actions/ListAction.js +2 -2
- package/build/src/modeling/actions/ListAction.js.map +1 -1
- package/build/src/modeling/actions/ReadAction.d.ts +2 -1
- package/build/src/modeling/actions/ReadAction.d.ts.map +1 -1
- package/build/src/modeling/actions/ReadAction.js +2 -2
- package/build/src/modeling/actions/ReadAction.js.map +1 -1
- package/build/src/modeling/actions/SearchAction.d.ts +2 -1
- package/build/src/modeling/actions/SearchAction.d.ts.map +1 -1
- package/build/src/modeling/actions/SearchAction.js +2 -2
- package/build/src/modeling/actions/SearchAction.js.map +1 -1
- package/build/src/modeling/actions/UpdateAction.d.ts +2 -1
- package/build/src/modeling/actions/UpdateAction.d.ts.map +1 -1
- package/build/src/modeling/actions/UpdateAction.js +2 -2
- package/build/src/modeling/actions/UpdateAction.js.map +1 -1
- package/build/src/modeling/actions/index.d.ts +2 -1
- package/build/src/modeling/actions/index.d.ts.map +1 -1
- package/build/src/modeling/actions/index.js +7 -7
- package/build/src/modeling/actions/index.js.map +1 -1
- package/build/src/modeling/ai/types.d.ts +2 -2
- package/build/src/modeling/ai/types.d.ts.map +1 -1
- package/build/src/modeling/ai/types.js.map +1 -1
- package/build/src/{amf → modeling/amf}/DataValueGenerator.d.ts +1 -1
- package/build/src/modeling/amf/DataValueGenerator.d.ts.map +1 -0
- package/build/src/{amf → modeling/amf}/DataValueGenerator.js +2 -3
- package/build/src/modeling/amf/DataValueGenerator.js.map +1 -0
- package/build/src/modeling/amf/ShapeGenerator.d.ts +20 -20
- package/build/src/modeling/amf/ShapeGenerator.d.ts.map +1 -1
- package/build/src/modeling/amf/ShapeGenerator.js +16 -18
- package/build/src/modeling/amf/ShapeGenerator.js.map +1 -1
- package/build/src/modeling/amf/core_types.d.ts +9 -0
- package/build/src/modeling/amf/core_types.d.ts.map +1 -0
- package/build/src/modeling/amf/core_types.js +45 -0
- package/build/src/modeling/amf/core_types.js.map +1 -0
- package/build/src/modeling/index.d.ts +1 -0
- package/build/src/modeling/index.d.ts.map +1 -1
- package/build/src/modeling/index.js +1 -0
- package/build/src/modeling/index.js.map +1 -1
- package/build/src/modeling/types.d.ts +67 -0
- package/build/src/modeling/types.d.ts.map +1 -1
- package/build/src/modeling/types.js.map +1 -1
- package/build/src/modeling/validation/api_model_rules.d.ts +15 -0
- package/build/src/modeling/validation/api_model_rules.d.ts.map +1 -0
- package/build/src/modeling/validation/api_model_rules.js +599 -0
- package/build/src/modeling/validation/api_model_rules.js.map +1 -0
- package/build/src/modeling/validation/association_validation.d.ts.map +1 -1
- package/build/src/modeling/validation/association_validation.js +1 -3
- package/build/src/modeling/validation/association_validation.js.map +1 -1
- package/build/src/models/http-flows/LegacyTranslator.js +1 -1
- package/build/src/models/http-flows/LegacyTranslator.js.map +1 -1
- package/build/src/runtime/http-runner/HttpFlows.js +1 -1
- package/build/src/runtime/http-runner/HttpFlows.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/eslint.config.js +0 -2
- package/package.json +27 -135
- package/src/decorators/observed.ts +91 -0
- package/src/events/EventTypes.ts +0 -2
- package/src/events/Events.ts +0 -2
- package/src/modeling/ApiModel.ts +73 -33
- package/src/modeling/Bindings.ts +3 -3
- package/src/modeling/DomainAssociation.ts +5 -5
- package/src/modeling/DomainEntity.ts +3 -4
- package/src/modeling/DomainProperty.ts +3 -4
- package/src/modeling/DomainValidation.ts +1 -1
- package/src/modeling/ExposedEntity.ts +63 -9
- package/src/modeling/actions/Action.ts +25 -2
- package/src/modeling/actions/CreateAction.ts +3 -2
- package/src/modeling/actions/DeleteAction.ts +3 -2
- package/src/modeling/actions/ListAction.ts +3 -2
- package/src/modeling/actions/ReadAction.ts +3 -2
- package/src/modeling/actions/SearchAction.ts +3 -2
- package/src/modeling/actions/UpdateAction.ts +3 -2
- package/src/modeling/ai/types.ts +2 -2
- package/src/{amf → modeling/amf}/DataValueGenerator.ts +3 -4
- package/src/modeling/amf/ShapeGenerator.ts +45 -61
- package/src/modeling/amf/core_types.ts +47 -0
- package/src/modeling/types.ts +70 -0
- package/src/modeling/validation/api_model_rules.ts +640 -0
- package/src/modeling/validation/api_model_validation_rules.md +58 -0
- package/src/modeling/validation/association_validation.ts +1 -3
- package/src/models/http-flows/LegacyTranslator.ts +1 -1
- package/src/runtime/http-runner/HttpFlows.ts +1 -1
- package/tests/unit/modeling/actions/Action.spec.ts +40 -8
- package/tests/unit/modeling/actions/CreateAction.spec.ts +5 -5
- package/tests/unit/modeling/actions/DeleteAction.spec.ts +6 -6
- package/tests/unit/modeling/actions/ListAction.spec.ts +7 -7
- package/tests/unit/modeling/actions/ReadAction.spec.ts +6 -6
- package/tests/unit/modeling/actions/SearchAction.spec.ts +6 -6
- package/tests/unit/modeling/actions/UpdateAction.spec.ts +6 -6
- package/tests/unit/{amf → modeling/amf}/data_value_generator.spec.ts +2 -2
- package/tests/unit/modeling/amf/shape_generator.spec.ts +146 -167
- package/tests/unit/modeling/api_model.spec.ts +190 -13
- package/tests/unit/modeling/api_model_expose_entity.spec.ts +43 -19
- package/tests/unit/modeling/api_model_remove_entity.spec.ts +6 -6
- package/tests/unit/modeling/domain_asociation.spec.ts +13 -13
- package/tests/unit/modeling/exposed_entity.spec.ts +123 -3
- package/tests/unit/modeling/exposed_entity_actions.spec.ts +41 -18
- package/tests/unit/modeling/exposed_entity_setter_validation.spec.ts +1 -1
- package/tests/unit/modeling/rules/restoring_rules.spec.ts +9 -5
- package/tests/unit/modeling/validation/api_model_rules.spec.ts +324 -0
- package/tests/unit/runtime/runners/http_assertion_runner.spec.ts +1 -1
- package/tests/unit/runtime/runners/http_flow_runner.spec.ts +1 -1
- package/tests/unit/runtime/runners/project_runner.spec.ts +1 -1
- package/tests/unit/runtime/runners/request_runner.spec.ts +1 -1
- package/tests/unit/runtime/runners/serial_runner.spec.ts +1 -1
- package/tsconfig.browser.json +1 -1
- package/tsconfig.node.json +1 -1
- package/bin/test-web.ts +0 -6
- package/build/src/amf/AmfMixin.d.ts +0 -396
- package/build/src/amf/AmfMixin.d.ts.map +0 -1
- package/build/src/amf/AmfMixin.js +0 -1138
- package/build/src/amf/AmfMixin.js.map +0 -1
- package/build/src/amf/AmfSerializer.d.ts +0 -137
- package/build/src/amf/AmfSerializer.d.ts.map +0 -1
- package/build/src/amf/AmfSerializer.js +0 -1947
- package/build/src/amf/AmfSerializer.js.map +0 -1
- package/build/src/amf/AmfTypes.d.ts +0 -25
- package/build/src/amf/AmfTypes.d.ts.map +0 -1
- package/build/src/amf/AmfTypes.js +0 -143
- package/build/src/amf/AmfTypes.js.map +0 -1
- package/build/src/amf/ApiExampleGenerator.d.ts +0 -40
- package/build/src/amf/ApiExampleGenerator.d.ts.map +0 -1
- package/build/src/amf/ApiExampleGenerator.js +0 -112
- package/build/src/amf/ApiExampleGenerator.js.map +0 -1
- package/build/src/amf/ApiMonacoSchemaGenerator.d.ts +0 -68
- package/build/src/amf/ApiMonacoSchemaGenerator.d.ts.map +0 -1
- package/build/src/amf/ApiMonacoSchemaGenerator.js +0 -248
- package/build/src/amf/ApiMonacoSchemaGenerator.js.map +0 -1
- package/build/src/amf/ApiSchemaGenerator.d.ts +0 -56
- package/build/src/amf/ApiSchemaGenerator.d.ts.map +0 -1
- package/build/src/amf/ApiSchemaGenerator.js +0 -94
- package/build/src/amf/ApiSchemaGenerator.js.map +0 -1
- package/build/src/amf/ApiSchemaValues.d.ts +0 -111
- package/build/src/amf/ApiSchemaValues.d.ts.map +0 -1
- package/build/src/amf/ApiSchemaValues.js +0 -463
- package/build/src/amf/ApiSchemaValues.js.map +0 -1
- package/build/src/amf/DataValueGenerator.d.ts.map +0 -1
- package/build/src/amf/DataValueGenerator.js.map +0 -1
- package/build/src/amf/Parsing.d.ts +0 -48
- package/build/src/amf/Parsing.d.ts.map +0 -1
- package/build/src/amf/Parsing.js +0 -2
- package/build/src/amf/Parsing.js.map +0 -1
- package/build/src/amf/Utils.d.ts +0 -37
- package/build/src/amf/Utils.d.ts.map +0 -1
- package/build/src/amf/Utils.js +0 -169
- package/build/src/amf/Utils.js.map +0 -1
- package/build/src/amf/data-node/DataNodeBase.d.ts +0 -34
- package/build/src/amf/data-node/DataNodeBase.d.ts.map +0 -1
- package/build/src/amf/data-node/DataNodeBase.js +0 -77
- package/build/src/amf/data-node/DataNodeBase.js.map +0 -1
- package/build/src/amf/data-node/JsonDataNodeGenerator.d.ts +0 -15
- package/build/src/amf/data-node/JsonDataNodeGenerator.d.ts.map +0 -1
- package/build/src/amf/data-node/JsonDataNodeGenerator.js +0 -23
- package/build/src/amf/data-node/JsonDataNodeGenerator.js.map +0 -1
- package/build/src/amf/data-node/UrlEncodedDataNodeGenerator.d.ts +0 -14
- package/build/src/amf/data-node/UrlEncodedDataNodeGenerator.d.ts.map +0 -1
- package/build/src/amf/data-node/UrlEncodedDataNodeGenerator.js +0 -48
- package/build/src/amf/data-node/UrlEncodedDataNodeGenerator.js.map +0 -1
- package/build/src/amf/data-node/XmlDataNodeGenerator.d.ts +0 -22
- package/build/src/amf/data-node/XmlDataNodeGenerator.d.ts.map +0 -1
- package/build/src/amf/data-node/XmlDataNodeGenerator.js +0 -34
- package/build/src/amf/data-node/XmlDataNodeGenerator.js.map +0 -1
- package/build/src/amf/definitions/Amf.d.ts +0 -363
- package/build/src/amf/definitions/Amf.d.ts.map +0 -1
- package/build/src/amf/definitions/Amf.js +0 -3
- package/build/src/amf/definitions/Amf.js.map +0 -1
- package/build/src/amf/definitions/Api.d.ts +0 -383
- package/build/src/amf/definitions/Api.d.ts.map +0 -1
- package/build/src/amf/definitions/Api.js +0 -2
- package/build/src/amf/definitions/Api.js.map +0 -1
- package/build/src/amf/definitions/Base.d.ts +0 -12
- package/build/src/amf/definitions/Base.d.ts.map +0 -1
- package/build/src/amf/definitions/Base.js +0 -2
- package/build/src/amf/definitions/Base.js.map +0 -1
- package/build/src/amf/definitions/Namespace.d.ts +0 -327
- package/build/src/amf/definitions/Namespace.d.ts.map +0 -1
- package/build/src/amf/definitions/Namespace.js +0 -346
- package/build/src/amf/definitions/Namespace.js.map +0 -1
- package/build/src/amf/definitions/Shapes.d.ts +0 -312
- package/build/src/amf/definitions/Shapes.d.ts.map +0 -1
- package/build/src/amf/definitions/Shapes.js +0 -87
- package/build/src/amf/definitions/Shapes.js.map +0 -1
- package/build/src/amf/models/AmfDataNode.d.ts +0 -67
- package/build/src/amf/models/AmfDataNode.d.ts.map +0 -1
- package/build/src/amf/models/AmfDataNode.js +0 -192
- package/build/src/amf/models/AmfDataNode.js.map +0 -1
- package/build/src/amf/shape/ShapeBase.d.ts +0 -74
- package/build/src/amf/shape/ShapeBase.d.ts.map +0 -1
- package/build/src/amf/shape/ShapeBase.js +0 -93
- package/build/src/amf/shape/ShapeBase.js.map +0 -1
- package/build/src/amf/shape/ShapeJsonSchemaGenerator.d.ts +0 -47
- package/build/src/amf/shape/ShapeJsonSchemaGenerator.d.ts.map +0 -1
- package/build/src/amf/shape/ShapeJsonSchemaGenerator.js +0 -420
- package/build/src/amf/shape/ShapeJsonSchemaGenerator.js.map +0 -1
- package/build/src/amf/shape/ShapeXmlSchemaGenerator.d.ts +0 -85
- package/build/src/amf/shape/ShapeXmlSchemaGenerator.d.ts.map +0 -1
- package/build/src/amf/shape/ShapeXmlSchemaGenerator.js +0 -852
- package/build/src/amf/shape/ShapeXmlSchemaGenerator.js.map +0 -1
- package/build/src/events/amf/AmfEventTypes.d.ts +0 -7
- package/build/src/events/amf/AmfEventTypes.d.ts.map +0 -1
- package/build/src/events/amf/AmfEventTypes.js +0 -7
- package/build/src/events/amf/AmfEventTypes.js.map +0 -1
- package/build/src/events/amf/AmfEvents.d.ts +0 -34
- package/build/src/events/amf/AmfEvents.d.ts.map +0 -1
- package/build/src/events/amf/AmfEvents.js +0 -63
- package/build/src/events/amf/AmfEvents.js.map +0 -1
- package/build/src/mocking/RandExp.d.ts +0 -55
- package/build/src/mocking/RandExp.d.ts.map +0 -1
- package/build/src/mocking/RandExp.js +0 -302
- package/build/src/mocking/RandExp.js.map +0 -1
- package/build/src/mocking/lib/ret.d.ts +0 -16
- package/build/src/mocking/lib/ret.d.ts.map +0 -1
- package/build/src/mocking/lib/ret.js +0 -284
- package/build/src/mocking/lib/ret.js.map +0 -1
- package/data/apis/APIC-187/APIC-187.raml +0 -21
- package/data/apis/APIC-187/dataType.raml +0 -132
- package/data/apis/APIC-187/example.raml +0 -84
- package/data/apis/APIC-188/APIC-188.raml +0 -21
- package/data/apis/APIC-188/dataType.raml +0 -132
- package/data/apis/APIC-188/example.raml +0 -84
- package/data/apis/APIC-233/APIC-233.raml +0 -15
- package/data/apis/APIC-391/APIC-391.raml +0 -44
- package/data/apis/APIC-391/examples/post-body-request-example.raml +0 -7
- package/data/apis/APIC-483/APIC-483.raml +0 -16
- package/data/apis/APIC-483/example/list-of-bank-succ.json +0 -32
- package/data/apis/APIC-483/schema/response-retrieve-list-bank.json +0 -68
- package/data/apis/APIC-487/APIC-487.raml +0 -36
- package/data/apis/APIC-655/APIC-655.raml +0 -44
- package/data/apis/APIC-655/delivery.json +0 -12
- package/data/apis/APIC-689/APIC-689.raml +0 -20
- package/data/apis/APIC-690/APIC-690.raml +0 -17
- package/data/apis/APIC-690/datatypes/Address.raml +0 -10
- package/data/apis/APIC-690/datatypes/Customer.raml +0 -17
- package/data/apis/APIC-690/examples/CustomerExample2.raml +0 -17
- package/data/apis/APIC-690/examples/CustomersExample.raml +0 -34
- package/data/apis/SE-10469/Purchase-Order-oagis-id-dd32f9c6c01048a19e15c423c9c741ae.json +0 -1383
- package/data/apis/SE-10469/SE-10469.raml +0 -11
- package/data/apis/SE-13092/Examples/PersonExample.raml +0 -7
- package/data/apis/SE-13092/SE-13092.raml +0 -37
- package/data/apis/SE-13092/datatypes/Address.raml +0 -5
- package/data/apis/SE-13092/datatypes/InlineType.raml +0 -5
- package/data/apis/SE-13092/datatypes/Person.raml +0 -15
- package/data/apis/SE-22063/SE-22063.raml +0 -14
- package/data/apis/SE-22063/stock.raml +0 -41
- package/data/apis/amf-helper-api/amf-helper-api.raml +0 -1024
- package/data/apis/amf-helper-api/examples/comment-example.json +0 -42
- package/data/apis/amf-helper-api/examples/commentCreateRequest-example.json +0 -7
- package/data/apis/amf-helper-api/examples/commentList-example.json +0 -48
- package/data/apis/amf-helper-api/examples/person.json +0 -14
- package/data/apis/amf-helper-api/examples/person.raml +0 -13
- package/data/apis/amf-helper-api/examples/person.xml +0 -14
- package/data/apis/amf-helper-api/libraries/comment-lib.raml +0 -143
- package/data/apis/amf-helper-api/library.raml +0 -7
- package/data/apis/amf-helper-api/schemas/person.json +0 -104
- package/data/apis/amf-helper-api/schemas/person.xsd +0 -26
- package/data/apis/amf-helper-api/traits/file.raml +0 -33
- package/data/apis/amf-helper-api/traits/pagination.raml +0 -80
- package/data/apis/amf-helper-api/traits/results.raml +0 -19
- package/data/apis/amf-helper-api/traits/visibility.raml +0 -14
- package/data/apis/amf-helper-api/types/app-person.raml +0 -101
- package/data/apis/amf-helper-api/types/dimensions.raml +0 -24
- package/data/apis/amf-helper-api/types/external-type.raml +0 -7
- package/data/apis/amf-helper-api/types/image.raml +0 -23
- package/data/apis/amf-helper-api/types/product.raml +0 -52
- package/data/apis/amf-helper-api/types/resource.raml +0 -11
- package/data/apis/amf-helper-api/types/standard-request.raml +0 -50
- package/data/apis/amf-helper-api/types/user.raml +0 -37
- package/data/apis/arc-demo-api/arc-demo-api.raml +0 -468
- package/data/apis/arc-demo-api/examples/e400.xml +0 -4
- package/data/apis/arc-demo-api/examples/e401.xml +0 -4
- package/data/apis/arc-demo-api/examples/e404.xml +0 -4
- package/data/apis/arc-demo-api/examples/image.xml +0 -5
- package/data/apis/arc-demo-api/examples/messages-example.json +0 -22
- package/data/apis/arc-demo-api/examples/messages-sent-example.json +0 -15
- package/data/apis/arc-demo-api/examples/person.json +0 -14
- package/data/apis/arc-demo-api/examples/person.url.encoded +0 -1
- package/data/apis/arc-demo-api/examples/person.xml +0 -14
- package/data/apis/arc-demo-api/examples/product.xml +0 -9
- package/data/apis/arc-demo-api/library.raml +0 -36
- package/data/apis/arc-demo-api/resourceTypes/app-person.raml +0 -49
- package/data/apis/arc-demo-api/resourceTypes/example-types.raml +0 -45
- package/data/apis/arc-demo-api/resourceTypes/image.raml +0 -23
- package/data/apis/arc-demo-api/resourceTypes/message-sent-type.raml +0 -23
- package/data/apis/arc-demo-api/resourceTypes/message-type.raml +0 -33
- package/data/apis/arc-demo-api/resourceTypes/product.raml +0 -52
- package/data/apis/arc-demo-api/resourceTypes/resource.raml +0 -11
- package/data/apis/arc-demo-api/schemas/error-response.xsd +0 -11
- package/data/apis/arc-demo-api/schemas/image.xsd +0 -11
- package/data/apis/arc-demo-api/schemas/person.json +0 -104
- package/data/apis/arc-demo-api/schemas/person.xsd +0 -26
- package/data/apis/arc-demo-api/schemas/product.xsd +0 -17
- package/data/apis/arc-demo-api/securitySchemes/basic.raml +0 -5
- package/data/apis/arc-demo-api/securitySchemes/oauth_2_0.raml +0 -29
- package/data/apis/arc-demo-api/securitySchemes/x-custom.raml +0 -26
- package/data/apis/arc-demo-api/traits/adminable.raml +0 -23
- package/data/apis/arc-demo-api/traits/pagination.raml +0 -83
- package/data/apis/arc-demo-api/traits/rate-limited.raml +0 -9
- package/data/apis/async-api/async-api.yaml +0 -96
- package/data/apis/example-generator-api/contact-email-example.raml +0 -6
- package/data/apis/example-generator-api/contact-example.raml +0 -5
- package/data/apis/example-generator-api/contact-fax-example.raml +0 -5
- package/data/apis/example-generator-api/contact-website-example.raml +0 -2
- package/data/apis/example-generator-api/example-1.raml +0 -6
- package/data/apis/example-generator-api/example-2.raml +0 -9
- package/data/apis/example-generator-api/example-3.raml +0 -4
- package/data/apis/example-generator-api/example-4.raml +0 -2
- package/data/apis/example-generator-api/example-5.raml +0 -4
- package/data/apis/example-generator-api/example-6.raml +0 -2
- package/data/apis/example-generator-api/example-7.raml +0 -5
- package/data/apis/example-generator-api/example-generator-api.raml +0 -423
- package/data/apis/example-generator-api/example.json +0 -14
- package/data/apis/example-generator-api/example.xml +0 -15
- package/data/apis/example-generator-api/example.xsd +0 -26
- package/data/apis/example-generator-api/examples/employee.raml +0 -7
- package/data/apis/example-generator-api/examples/employees.raml +0 -7
- package/data/apis/example-generator-api/linked-named-example.raml +0 -21
- package/data/apis/example-generator-api/named-example-with-link.raml +0 -5
- package/data/apis/example-generator-api/named-example.raml +0 -9
- package/data/apis/example-generator-api/user-json-example.raml +0 -17
- package/data/apis/example-generator-api/user-raml-example.raml +0 -37
- package/data/apis/example-generator-api/user.json +0 -8
- package/data/apis/example-generator-api/user.raml +0 -18
- package/data/apis/example-generator-api/users-json-example.raml +0 -17
- package/data/apis/example-generator-api/users-raml-example.raml +0 -32
- package/data/apis/example-generator-api/users.json +0 -8
- package/data/apis/expanded-api/expanded-api.raml +0 -8
- package/data/apis/flattened-api/flattened-api.raml +0 -8
- package/data/apis/multiple-servers/multiple-servers.yaml +0 -112
- package/data/apis/oas-3-api/oas-3-api.yaml +0 -356
- package/data/apis/oas-date/oas-date.yaml +0 -28
- package/data/apis/oas-types/oas-types.yaml +0 -159
- package/data/apis/oas-unions/oas-unions.yaml +0 -75
- package/data/apis/petstore/petstore.yaml +0 -954
- package/data/apis/raml-date/raml-date.raml +0 -28
- package/data/apis/recursive/recursive.raml +0 -14
- package/data/apis/schema-api/examples/person.json +0 -14
- package/data/apis/schema-api/examples/person.raml +0 -14
- package/data/apis/schema-api/examples/person.url.encoded +0 -1
- package/data/apis/schema-api/examples/person.xml +0 -14
- package/data/apis/schema-api/library/demo-types.raml +0 -43
- package/data/apis/schema-api/schema-api.raml +0 -656
- package/data/apis/schema-api/schemas/person.json +0 -104
- package/data/apis/schema-api/schemas/person.xsd +0 -26
- package/data/apis/schema-api/types/DemoPerson.raml +0 -67
- package/data/apis/secured-api/oauth-2-custom-settings.raml +0 -143
- package/data/apis/secured-api/oauth2-header-delivery.raml +0 -13
- package/data/apis/secured-api/oauth2-no-delivery.raml +0 -8
- package/data/apis/secured-api/oauth2-no-grants.raml +0 -12
- package/data/apis/secured-api/oauth2-pkce.raml +0 -13
- package/data/apis/secured-api/oauth2-query-delivery.raml +0 -13
- package/data/apis/secured-api/oauth_1_0.raml +0 -8
- package/data/apis/secured-api/oauth_1_0_no-settings.raml +0 -3
- package/data/apis/secured-api/oauth_1_0_no-signature.raml +0 -7
- package/data/apis/secured-api/oauth_1_0_signature.raml +0 -8
- package/data/apis/secured-api/passthrough-querystring.raml +0 -16
- package/data/apis/secured-api/passthrough.raml +0 -24
- package/data/apis/secured-api/secured-api.raml +0 -231
- package/data/apis/secured-api/x-custom.raml +0 -33
- package/data/apis/secured-api/x-other.raml +0 -29
- package/data/apis/secured-api/x-query-string.raml +0 -16
- package/data/apis/tracked-examples/datatypes/employee.raml +0 -5
- package/data/apis/tracked-examples/examples/employee.raml +0 -4
- package/data/apis/tracked-examples/examples/employees.raml +0 -8
- package/data/apis/tracked-examples/tracked-to-linked.raml +0 -28
- package/data/model.js +0 -129
- package/data/models/APIC-187.json +0 -11416
- package/data/models/APIC-188.json +0 -11416
- package/data/models/APIC-233.json +0 -539
- package/data/models/APIC-391.json +0 -1903
- package/data/models/APIC-483.json +0 -3110
- package/data/models/APIC-487.json +0 -1225
- package/data/models/APIC-655.json +0 -3145
- package/data/models/APIC-689.json +0 -797
- package/data/models/APIC-690.json +0 -5992
- package/data/models/SE-10469.json +0 -22898
- package/data/models/SE-13092.json +0 -2769
- package/data/models/SE-22063.json +0 -2314
- package/data/models/amf-helper-api.json +0 -84457
- package/data/models/arc-demo-api.json +0 -52041
- package/data/models/async-api.json +0 -3227
- package/data/models/example-generator-api.json +0 -45209
- package/data/models/expanded-api.json +0 -251
- package/data/models/flattened-api.json +0 -251
- package/data/models/multiple-servers.json +0 -2769
- package/data/models/oas-3-api.json +0 -10590
- package/data/models/oas-date.json +0 -637
- package/data/models/oas-types.json +0 -5352
- package/data/models/oas-unions.json +0 -1935
- package/data/models/petstore.json +0 -27712
- package/data/models/raml-date.json +0 -1114
- package/data/models/recursive.json +0 -610
- package/data/models/schema-api.json +0 -35527
- package/data/models/secured-api.json +0 -21071
- package/data/models/tracked-to-linked.json +0 -1914
- package/src/amf/AmfMixin.ts +0 -1726
- package/src/amf/AmfSerializer.ts +0 -2358
- package/src/amf/AmfTypes.ts +0 -147
- package/src/amf/ApiExampleGenerator.ts +0 -122
- package/src/amf/ApiMonacoSchemaGenerator.ts +0 -332
- package/src/amf/ApiSchemaGenerator.ts +0 -115
- package/src/amf/ApiSchemaValues.ts +0 -509
- package/src/amf/Parsing.ts +0 -50
- package/src/amf/Utils.ts +0 -172
- package/src/amf/data-node/DataNodeBase.ts +0 -83
- package/src/amf/data-node/JsonDataNodeGenerator.ts +0 -24
- package/src/amf/data-node/README.md +0 -3
- package/src/amf/data-node/UrlEncodedDataNodeGenerator.ts +0 -49
- package/src/amf/data-node/XmlDataNodeGenerator.ts +0 -46
- package/src/amf/definitions/Amf.ts +0 -440
- package/src/amf/definitions/Api.ts +0 -445
- package/src/amf/definitions/Base.ts +0 -13
- package/src/amf/definitions/Namespace.ts +0 -357
- package/src/amf/definitions/Shapes.ts +0 -438
- package/src/amf/models/AmfDataNode.ts +0 -210
- package/src/amf/shape/README.md +0 -4
- package/src/amf/shape/ShapeBase.ts +0 -174
- package/src/amf/shape/ShapeJsonSchemaGenerator.ts +0 -457
- package/src/amf/shape/ShapeXmlSchemaGenerator.ts +0 -933
- package/src/events/amf/AmfEventTypes.ts +0 -6
- package/src/events/amf/AmfEvents.ts +0 -78
- package/src/mocking/RandExp.ts +0 -335
- package/src/mocking/lib/ret.ts +0 -279
- package/tests/unit/amf/APIC-187.spec.ts +0 -41
- package/tests/unit/amf/APIC-188.spec.ts +0 -30
- package/tests/unit/amf/APIC-233.spec.ts +0 -32
- package/tests/unit/amf/APIC-391.spec.ts +0 -39
- package/tests/unit/amf/APIC-487.spec.ts +0 -44
- package/tests/unit/amf/APIC-655.spec.ts +0 -41
- package/tests/unit/amf/APIC-689.spec.ts +0 -28
- package/tests/unit/amf/APIC-690.spec.ts +0 -93
- package/tests/unit/amf/AmfLoader.ts +0 -538
- package/tests/unit/amf/AmfMixin.spec.ts +0 -1707
- package/tests/unit/amf/ApiExampleGenerator.spec.ts +0 -250
- package/tests/unit/amf/ApiMonacoSchemaGenerator.spec.ts +0 -183
- package/tests/unit/amf/ApiSchemaValues.spec.ts +0 -602
- package/tests/unit/amf/Namepsace.spec.ts +0 -494
- package/tests/unit/amf/SE-10469.spec.ts +0 -35
- package/tests/unit/amf/SE-13092.spec.ts +0 -64
- package/tests/unit/amf/SE-22063.spec.ts +0 -45
- package/tests/unit/amf/raml-examples.spec.ts +0 -43
- package/tests/unit/amf/schema_gen_array.spec.ts +0 -199
- package/tests/unit/amf/schema_gen_oas.spec.ts +0 -140
- package/tests/unit/amf/schema_gen_object.spec.ts +0 -279
- package/tests/unit/amf/schema_gen_scalar.spec.ts +0 -143
- package/tests/unit/amf/schema_gen_union.spec.ts +0 -401
- package/tests/unit/amf/schema_gen_unknown.spec.ts +0 -42
- package/tests/unit/amf/schema_gen_xml.spec.ts +0 -726
- package/tests/unit/amf/serializer/APIC-483.spec.ts +0 -36
- package/tests/unit/amf/serializer/Anotations.spec.ts +0 -50
- package/tests/unit/amf/serializer/Api.spec.ts +0 -210
- package/tests/unit/amf/serializer/Documentation.spec.ts +0 -52
- package/tests/unit/amf/serializer/Endpoints.spec.ts +0 -172
- package/tests/unit/amf/serializer/Operations.spec.ts +0 -330
- package/tests/unit/amf/serializer/Parameters.spec.ts +0 -149
- package/tests/unit/amf/serializer/PayloadExamples.spec.ts +0 -152
- package/tests/unit/amf/serializer/Security.spec.ts +0 -626
- package/tests/unit/amf/serializer/Server.spec.ts +0 -78
- package/tests/unit/amf/serializer/Shapes.spec.ts +0 -304
- package/tests/unit/amf/serializer/SourceMaps.spec.ts +0 -52
- package/tests/unit/amf/shapes/ShapeXmlSchemaGenerator.spec.ts +0 -28
- package/tests/unit/amf/tracked-to-linked.spec.ts +0 -90
- package/tests/unit/amf/xml-data-processing.spec.ts +0 -217
- package/tests/unit/events/amf.spec.ts +0 -151
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from '../../../src/index.js'
|
|
14
14
|
import { AllowPublicAccessRule } from '../../../src/modeling/rules/AllowPublic.js'
|
|
15
15
|
import { RateLimitingConfiguration } from '../../../src/modeling/rules/RateLimitingConfiguration.js'
|
|
16
|
-
import {
|
|
16
|
+
import { ReadActionSchema } from '../../../src/modeling/index.js'
|
|
17
17
|
|
|
18
18
|
test.group('ApiModel.createSchema()', () => {
|
|
19
19
|
test('creates a schema with default values', ({ assert }) => {
|
|
@@ -97,7 +97,7 @@ test.group('ApiModel.constructor()', () => {
|
|
|
97
97
|
assert.typeOf(model.key, 'string')
|
|
98
98
|
assert.isNotEmpty(model.key)
|
|
99
99
|
assert.equal(model.info.name, 'Unnamed API')
|
|
100
|
-
assert.
|
|
100
|
+
assert.equal(model.exposes.size, 0)
|
|
101
101
|
assert.isUndefined(model.user)
|
|
102
102
|
assert.isUndefined(model.authentication)
|
|
103
103
|
assert.isUndefined(model.authorization)
|
|
@@ -140,8 +140,8 @@ test.group('ApiModel.constructor()', () => {
|
|
|
140
140
|
|
|
141
141
|
assert.equal(model.key, 'test-api')
|
|
142
142
|
assert.equal(model.info.name, 'Test API')
|
|
143
|
-
assert.
|
|
144
|
-
assert.equal(model.exposes[0].key, 'entity1', 'exposed entity should have correct key')
|
|
143
|
+
assert.equal(model.exposes.size, 1, 'should have one exposed entity')
|
|
144
|
+
assert.equal(Array.from(model.exposes.values())[0]!.entity.key, 'entity1', 'exposed entity should have correct key')
|
|
145
145
|
assert.deepEqual(model.user, { key: 'user-entity' })
|
|
146
146
|
assert.deepEqual(model.dependencyList, [{ key: 'domain1', version: '1.0.0' }])
|
|
147
147
|
assert.deepEqual(model.authentication, { strategy: 'UsernamePassword' })
|
|
@@ -216,7 +216,7 @@ test.group('ApiModel.constructor()', () => {
|
|
|
216
216
|
notified = true
|
|
217
217
|
})
|
|
218
218
|
|
|
219
|
-
model.exposes[0]
|
|
219
|
+
Array.from(model.exposes.values())[0]!.actions[0]!.kind = 'write'
|
|
220
220
|
await Promise.resolve()
|
|
221
221
|
assert.isTrue(notified)
|
|
222
222
|
}).tags(['@modeling', '@api', '@observed'])
|
|
@@ -290,20 +290,22 @@ test.group('ApiModel.toJSON()', () => {
|
|
|
290
290
|
|
|
291
291
|
test('actions are immutable', ({ assert }) => {
|
|
292
292
|
const model = new ApiModel()
|
|
293
|
-
const action =
|
|
293
|
+
const action: ReadActionSchema = {
|
|
294
|
+
kind: 'read',
|
|
295
|
+
}
|
|
294
296
|
const entityKey = 'get-entity'
|
|
295
297
|
const exposed: ExposedEntitySchema = {
|
|
296
298
|
key: entityKey,
|
|
297
|
-
actions: [action
|
|
299
|
+
actions: [action],
|
|
298
300
|
hasCollection: true,
|
|
299
301
|
kind: ExposedEntityKind,
|
|
300
302
|
resourcePath: '/',
|
|
301
303
|
entity: { key: entityKey },
|
|
302
304
|
}
|
|
303
|
-
model.exposes.
|
|
305
|
+
model.exposes.set(exposed.key, new ExposedEntity(model, exposed))
|
|
304
306
|
const json = model.toJSON()
|
|
305
|
-
json.exposes[0]
|
|
306
|
-
assert.equal(model.exposes[0]
|
|
307
|
+
json.exposes![0]!.actions![0]!.kind = 'write'
|
|
308
|
+
assert.equal(Array.from(model.exposes.values())[0]!.actions[0]!.kind, 'read')
|
|
307
309
|
}).tags(['@modeling', '@api', '@serialization'])
|
|
308
310
|
})
|
|
309
311
|
|
|
@@ -319,15 +321,190 @@ test.group('ApiModel.getExposedEntity()', () => {
|
|
|
319
321
|
resourcePath: '/',
|
|
320
322
|
entity: { key: entityKey },
|
|
321
323
|
}
|
|
322
|
-
model.exposes.
|
|
324
|
+
model.exposes.set(exposed.key, new ExposedEntity(model, exposed))
|
|
323
325
|
|
|
324
|
-
const retrievedEntity = model.
|
|
326
|
+
const retrievedEntity = model.exposes.get(entityKey)
|
|
325
327
|
assert.deepEqual(retrievedEntity?.toJSON(), exposed)
|
|
326
328
|
}).tags(['@modeling', '@api'])
|
|
327
329
|
|
|
328
330
|
test('returns undefined if entity is not exposed', ({ assert }) => {
|
|
329
331
|
const model = new ApiModel()
|
|
330
|
-
const retrievedEntity = model.
|
|
332
|
+
const retrievedEntity = model.exposes.get('non-exposed-entity')
|
|
331
333
|
assert.isUndefined(retrievedEntity)
|
|
332
334
|
}).tags(['@modeling', '@api'])
|
|
333
335
|
})
|
|
336
|
+
|
|
337
|
+
test.group('ApiModel.findResourcePathCollision()', () => {
|
|
338
|
+
test('returns the entity if resource path collides', ({ assert }) => {
|
|
339
|
+
const model = new ApiModel()
|
|
340
|
+
model.exposes.set(
|
|
341
|
+
'ent1',
|
|
342
|
+
new ExposedEntity(model, {
|
|
343
|
+
key: 'ent1',
|
|
344
|
+
kind: ExposedEntityKind,
|
|
345
|
+
resourcePath: '/test',
|
|
346
|
+
isRoot: true,
|
|
347
|
+
hasCollection: false,
|
|
348
|
+
actions: [],
|
|
349
|
+
entity: { key: 'domain1' },
|
|
350
|
+
})
|
|
351
|
+
)
|
|
352
|
+
|
|
353
|
+
const collision = model.findResourcePathCollision('/test')
|
|
354
|
+
assert.isDefined(collision)
|
|
355
|
+
assert.equal(collision?.key, 'ent1')
|
|
356
|
+
}).tags(['@modeling', '@api'])
|
|
357
|
+
|
|
358
|
+
test('returns undefined if no collision', ({ assert }) => {
|
|
359
|
+
const model = new ApiModel()
|
|
360
|
+
model.exposes.set(
|
|
361
|
+
'ent1',
|
|
362
|
+
new ExposedEntity(model, {
|
|
363
|
+
key: 'ent1',
|
|
364
|
+
kind: ExposedEntityKind,
|
|
365
|
+
resourcePath: '/test',
|
|
366
|
+
isRoot: true,
|
|
367
|
+
hasCollection: false,
|
|
368
|
+
actions: [],
|
|
369
|
+
entity: { key: 'domain1' },
|
|
370
|
+
})
|
|
371
|
+
)
|
|
372
|
+
|
|
373
|
+
assert.isUndefined(model.findResourcePathCollision('/other'))
|
|
374
|
+
}).tags(['@modeling', '@api'])
|
|
375
|
+
|
|
376
|
+
test('ignores the entity with the ignore key', ({ assert }) => {
|
|
377
|
+
const model = new ApiModel()
|
|
378
|
+
model.exposes.set(
|
|
379
|
+
'ent1',
|
|
380
|
+
new ExposedEntity(model, {
|
|
381
|
+
key: 'ent1',
|
|
382
|
+
kind: ExposedEntityKind,
|
|
383
|
+
resourcePath: '/test',
|
|
384
|
+
isRoot: true,
|
|
385
|
+
hasCollection: false,
|
|
386
|
+
actions: [],
|
|
387
|
+
entity: { key: 'domain1' },
|
|
388
|
+
})
|
|
389
|
+
)
|
|
390
|
+
|
|
391
|
+
assert.isUndefined(model.findResourcePathCollision('/test', 'ent1'))
|
|
392
|
+
}).tags(['@modeling', '@api'])
|
|
393
|
+
|
|
394
|
+
test('ignores non-root entities', ({ assert }) => {
|
|
395
|
+
const model = new ApiModel()
|
|
396
|
+
model.exposes.set(
|
|
397
|
+
'ent1',
|
|
398
|
+
new ExposedEntity(model, {
|
|
399
|
+
key: 'ent1',
|
|
400
|
+
kind: ExposedEntityKind,
|
|
401
|
+
resourcePath: '/test',
|
|
402
|
+
isRoot: false,
|
|
403
|
+
hasCollection: false,
|
|
404
|
+
actions: [],
|
|
405
|
+
entity: { key: 'domain1' },
|
|
406
|
+
})
|
|
407
|
+
)
|
|
408
|
+
|
|
409
|
+
assert.isUndefined(model.findResourcePathCollision('/test'))
|
|
410
|
+
}).tags(['@modeling', '@api'])
|
|
411
|
+
})
|
|
412
|
+
|
|
413
|
+
test.group('ApiModel.findCollectionPathCollision()', () => {
|
|
414
|
+
test('returns the entity if collection path collides', ({ assert }) => {
|
|
415
|
+
const model = new ApiModel()
|
|
416
|
+
model.exposes.set(
|
|
417
|
+
'ent1',
|
|
418
|
+
new ExposedEntity(model, {
|
|
419
|
+
key: 'ent1',
|
|
420
|
+
kind: ExposedEntityKind,
|
|
421
|
+
collectionPath: '/tests',
|
|
422
|
+
resourcePath: '/tests/{id}',
|
|
423
|
+
isRoot: true,
|
|
424
|
+
hasCollection: true,
|
|
425
|
+
actions: [],
|
|
426
|
+
entity: { key: 'domain1' },
|
|
427
|
+
})
|
|
428
|
+
)
|
|
429
|
+
|
|
430
|
+
const collision = model.findCollectionPathCollision('/tests')
|
|
431
|
+
assert.isDefined(collision)
|
|
432
|
+
assert.equal(collision?.key, 'ent1')
|
|
433
|
+
}).tags(['@modeling', '@api'])
|
|
434
|
+
|
|
435
|
+
test('returns undefined if no collision', ({ assert }) => {
|
|
436
|
+
const model = new ApiModel()
|
|
437
|
+
model.exposes.set(
|
|
438
|
+
'ent1',
|
|
439
|
+
new ExposedEntity(model, {
|
|
440
|
+
key: 'ent1',
|
|
441
|
+
kind: ExposedEntityKind,
|
|
442
|
+
collectionPath: '/tests',
|
|
443
|
+
resourcePath: '/tests/{id}',
|
|
444
|
+
isRoot: true,
|
|
445
|
+
hasCollection: true,
|
|
446
|
+
actions: [],
|
|
447
|
+
entity: { key: 'domain1' },
|
|
448
|
+
})
|
|
449
|
+
)
|
|
450
|
+
|
|
451
|
+
assert.isUndefined(model.findCollectionPathCollision('/other'))
|
|
452
|
+
}).tags(['@modeling', '@api'])
|
|
453
|
+
|
|
454
|
+
test('ignores the entity with the ignore key', ({ assert }) => {
|
|
455
|
+
const model = new ApiModel()
|
|
456
|
+
model.exposes.set(
|
|
457
|
+
'ent1',
|
|
458
|
+
new ExposedEntity(model, {
|
|
459
|
+
key: 'ent1',
|
|
460
|
+
kind: ExposedEntityKind,
|
|
461
|
+
collectionPath: '/tests',
|
|
462
|
+
resourcePath: '/tests/{id}',
|
|
463
|
+
isRoot: true,
|
|
464
|
+
hasCollection: true,
|
|
465
|
+
actions: [],
|
|
466
|
+
entity: { key: 'domain1' },
|
|
467
|
+
})
|
|
468
|
+
)
|
|
469
|
+
|
|
470
|
+
assert.isUndefined(model.findCollectionPathCollision('/tests', 'ent1'))
|
|
471
|
+
}).tags(['@modeling', '@api'])
|
|
472
|
+
|
|
473
|
+
test('ignores non-root entities', ({ assert }) => {
|
|
474
|
+
const model = new ApiModel()
|
|
475
|
+
model.exposes.set(
|
|
476
|
+
'ent1',
|
|
477
|
+
new ExposedEntity(model, {
|
|
478
|
+
key: 'ent1',
|
|
479
|
+
kind: ExposedEntityKind,
|
|
480
|
+
collectionPath: '/tests',
|
|
481
|
+
resourcePath: '/tests/{id}',
|
|
482
|
+
isRoot: false,
|
|
483
|
+
hasCollection: true,
|
|
484
|
+
actions: [],
|
|
485
|
+
entity: { key: 'domain1' },
|
|
486
|
+
})
|
|
487
|
+
)
|
|
488
|
+
|
|
489
|
+
assert.isUndefined(model.findCollectionPathCollision('/tests'))
|
|
490
|
+
}).tags(['@modeling', '@api'])
|
|
491
|
+
|
|
492
|
+
test('ignores entities without collections', ({ assert }) => {
|
|
493
|
+
const model = new ApiModel()
|
|
494
|
+
model.exposes.set(
|
|
495
|
+
'ent1',
|
|
496
|
+
new ExposedEntity(model, {
|
|
497
|
+
key: 'ent1',
|
|
498
|
+
kind: ExposedEntityKind,
|
|
499
|
+
resourcePath: '/tests',
|
|
500
|
+
collectionPath: '/tests',
|
|
501
|
+
isRoot: true,
|
|
502
|
+
hasCollection: false,
|
|
503
|
+
actions: [],
|
|
504
|
+
entity: { key: 'domain1' },
|
|
505
|
+
})
|
|
506
|
+
)
|
|
507
|
+
|
|
508
|
+
assert.isUndefined(model.findCollectionPathCollision('/tests'))
|
|
509
|
+
}).tags(['@modeling', '@api'])
|
|
510
|
+
})
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
import { test } from '@japa/runner'
|
|
2
|
-
import { ApiModel, DataDomain } from '../../../src/index.js'
|
|
2
|
+
import { ApiModel, DataDomain, type ExposedEntity } from '../../../src/index.js'
|
|
3
|
+
|
|
4
|
+
function findRootExposedEntity(model: ApiModel, entityKey: string) {
|
|
5
|
+
for (const e of model.exposes.values()) {
|
|
6
|
+
if (e.isRoot && e.entity.key === entityKey) {
|
|
7
|
+
return e
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
return undefined
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function findNonRootExposedEntity(model: ApiModel, entityKey: string) {
|
|
14
|
+
for (const e of model.exposes.values()) {
|
|
15
|
+
if (!e.isRoot && e.entity.key === entityKey) {
|
|
16
|
+
return e
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return undefined
|
|
20
|
+
}
|
|
3
21
|
|
|
4
22
|
test.group('ApiModel.exposeEntity()', () => {
|
|
5
23
|
test('exposes a new entity', ({ assert }) => {
|
|
@@ -28,7 +46,7 @@ test.group('ApiModel.exposeEntity()', () => {
|
|
|
28
46
|
const retrievedExposedEntity = model.exposeEntity({ key: e1.key })
|
|
29
47
|
|
|
30
48
|
assert.deepEqual(retrievedExposedEntity.toJSON(), initialExposedEntity.toJSON())
|
|
31
|
-
assert.
|
|
49
|
+
assert.equal(model.exposes.size, 1)
|
|
32
50
|
}).tags(['@modeling', '@api'])
|
|
33
51
|
|
|
34
52
|
test('notifies change when a new entity is exposed', async ({ assert }) => {
|
|
@@ -77,7 +95,7 @@ test.group('ApiModel.exposeEntity()', () => {
|
|
|
77
95
|
model.attachDataDomain(domain)
|
|
78
96
|
const exposedA = model.exposeEntity({ key: eA.key }, { followAssociations: true })
|
|
79
97
|
// Find nested exposure for B
|
|
80
|
-
const nestedB = model
|
|
98
|
+
const nestedB = findNonRootExposedEntity(model, eB.key)
|
|
81
99
|
assert.isDefined(nestedB)
|
|
82
100
|
assert.deepEqual(nestedB?.parent?.key, exposedA.key)
|
|
83
101
|
assert.strictEqual(nestedB?.collectionPath, '/entitybs')
|
|
@@ -96,15 +114,21 @@ test.group('ApiModel.exposeEntity()', () => {
|
|
|
96
114
|
model.attachDataDomain(domain)
|
|
97
115
|
model.exposeEntity({ key: eA.key }, { followAssociations: true, maxDepth: 4 })
|
|
98
116
|
|
|
99
|
-
assert.
|
|
117
|
+
assert.equal(model.exposes.size, 2, 'has only 2 exposures')
|
|
100
118
|
// Should expose A (root), B (nested under A), but not infinitely nest
|
|
101
|
-
const exposedA = model
|
|
102
|
-
const nestedB = model
|
|
119
|
+
const exposedA = findRootExposedEntity(model, eA.key)
|
|
120
|
+
const nestedB = findNonRootExposedEntity(model, eB.key)
|
|
103
121
|
// There should be only one nested exposure for B under A
|
|
104
122
|
assert.isDefined(exposedA)
|
|
105
123
|
assert.isDefined(nestedB)
|
|
106
124
|
// There should NOT be a nested exposure for A under B
|
|
107
|
-
|
|
125
|
+
let circularA: ExposedEntity | undefined
|
|
126
|
+
for (const e of model.exposes.values()) {
|
|
127
|
+
if (!e.isRoot && e.entity.key === eA.key && e.parent?.key === nestedB?.key) {
|
|
128
|
+
circularA = e
|
|
129
|
+
break
|
|
130
|
+
}
|
|
131
|
+
}
|
|
108
132
|
assert.isUndefined(circularA)
|
|
109
133
|
})
|
|
110
134
|
|
|
@@ -119,8 +143,8 @@ test.group('ApiModel.exposeEntity()', () => {
|
|
|
119
143
|
model.attachDataDomain(domain)
|
|
120
144
|
model.exposeEntity({ key: eA.key }, { followAssociations: true })
|
|
121
145
|
// Should only expose A as root, not as nested
|
|
122
|
-
const exposedA = model
|
|
123
|
-
const nestedA = model
|
|
146
|
+
const exposedA = findRootExposedEntity(model, eA.key)
|
|
147
|
+
const nestedA = findNonRootExposedEntity(model, eA.key)
|
|
124
148
|
assert.isDefined(exposedA)
|
|
125
149
|
assert.isUndefined(nestedA)
|
|
126
150
|
})
|
|
@@ -137,11 +161,11 @@ test.group('ApiModel.exposeEntity()', () => {
|
|
|
137
161
|
const model = new ApiModel()
|
|
138
162
|
model.attachDataDomain(domain)
|
|
139
163
|
model.exposeEntity({ key: eA.key }, { followAssociations: true })
|
|
140
|
-
const nestedB = model
|
|
141
|
-
const nestedC = model
|
|
164
|
+
const nestedB = findNonRootExposedEntity(model, eB.key)
|
|
165
|
+
const nestedC = findNonRootExposedEntity(model, eC.key)
|
|
142
166
|
assert.isDefined(nestedB)
|
|
143
167
|
assert.isDefined(nestedC)
|
|
144
|
-
assert.deepEqual(nestedB?.parent?.key, model
|
|
168
|
+
assert.deepEqual(nestedB?.parent?.key, findRootExposedEntity(model, eA.key)?.key)
|
|
145
169
|
assert.deepEqual(nestedC?.parent?.key, nestedB?.key)
|
|
146
170
|
})
|
|
147
171
|
|
|
@@ -157,12 +181,12 @@ test.group('ApiModel.exposeEntity()', () => {
|
|
|
157
181
|
const model = new ApiModel()
|
|
158
182
|
model.attachDataDomain(domain)
|
|
159
183
|
model.exposeEntity({ key: eA.key }, { followAssociations: true })
|
|
160
|
-
const nestedB = model
|
|
161
|
-
const nestedC = model
|
|
184
|
+
const nestedB = findNonRootExposedEntity(model, eB.key)
|
|
185
|
+
const nestedC = findNonRootExposedEntity(model, eC.key)
|
|
162
186
|
assert.isDefined(nestedB)
|
|
163
187
|
assert.isDefined(nestedC)
|
|
164
|
-
assert.deepEqual(nestedB?.parent?.key, model
|
|
165
|
-
assert.deepEqual(nestedC?.parent?.key, model
|
|
188
|
+
assert.deepEqual(nestedB?.parent?.key, findRootExposedEntity(model, eA.key)?.key)
|
|
189
|
+
assert.deepEqual(nestedC?.parent?.key, findRootExposedEntity(model, eA.key)?.key)
|
|
166
190
|
})
|
|
167
191
|
|
|
168
192
|
test('respects maxDepth option (A -> B -> C -> D, maxDepth=2)', ({ assert }) => {
|
|
@@ -179,9 +203,9 @@ test.group('ApiModel.exposeEntity()', () => {
|
|
|
179
203
|
const model = new ApiModel()
|
|
180
204
|
model.attachDataDomain(domain)
|
|
181
205
|
model.exposeEntity({ key: eA.key }, { followAssociations: true, maxDepth: 2 })
|
|
182
|
-
const nestedB = model
|
|
183
|
-
const nestedC = model
|
|
184
|
-
const nestedD = model
|
|
206
|
+
const nestedB = findNonRootExposedEntity(model, eB.key)
|
|
207
|
+
const nestedC = findNonRootExposedEntity(model, eC.key)
|
|
208
|
+
const nestedD = findNonRootExposedEntity(model, eD.key)
|
|
185
209
|
assert.isDefined(nestedB)
|
|
186
210
|
assert.isDefined(nestedC)
|
|
187
211
|
assert.isUndefined(nestedD)
|
|
@@ -10,10 +10,10 @@ test.group('ApiModel.removeEntity()', () => {
|
|
|
10
10
|
const model = new ApiModel()
|
|
11
11
|
model.attachDataDomain(domain)
|
|
12
12
|
const exposure = model.exposeEntity({ key: e1.key })
|
|
13
|
-
assert.
|
|
13
|
+
assert.equal(model.exposes.size, 1)
|
|
14
14
|
|
|
15
15
|
model.removeExposedEntity(exposure.key)
|
|
16
|
-
assert.
|
|
16
|
+
assert.equal(model.exposes.size, 0)
|
|
17
17
|
}).tags(['@modeling', '@api'])
|
|
18
18
|
|
|
19
19
|
test('removes an entity and its nested children', ({ assert }) => {
|
|
@@ -28,13 +28,13 @@ test.group('ApiModel.removeEntity()', () => {
|
|
|
28
28
|
model.attachDataDomain(domain)
|
|
29
29
|
const rootExposure = model.exposeEntity({ key: eA.key }, { followAssociations: true })
|
|
30
30
|
// Ensure nested exposure for B was created
|
|
31
|
-
const nestedB = model.exposes.find((e) => !e.isRoot && e.entity.key === eB.key)
|
|
31
|
+
const nestedB = Array.from(model.exposes.values()).find((e) => !e.isRoot && e.entity.key === eB.key)
|
|
32
32
|
assert.isDefined(nestedB)
|
|
33
|
-
assert.isAbove(model.exposes.
|
|
33
|
+
assert.isAbove(model.exposes.size, 1)
|
|
34
34
|
|
|
35
35
|
// Remove root exposure for A and expect children to be removed as well
|
|
36
36
|
model.removeExposedEntity(rootExposure.key)
|
|
37
|
-
assert.
|
|
37
|
+
assert.equal(model.exposes.size, 0)
|
|
38
38
|
}).tags(['@modeling', '@api'])
|
|
39
39
|
|
|
40
40
|
test('throws error if entity does not exist', ({ assert }) => {
|
|
@@ -50,7 +50,7 @@ test.group('ApiModel.removeEntity()', () => {
|
|
|
50
50
|
() => model.removeExposedEntity('non-existing-key'),
|
|
51
51
|
'Exposed entity with key "non-existing-key" not found.'
|
|
52
52
|
)
|
|
53
|
-
assert.
|
|
53
|
+
assert.equal(model.exposes.size, 1, 'exposes count should remain unchanged')
|
|
54
54
|
}).tags(['@modeling', '@api'])
|
|
55
55
|
|
|
56
56
|
test('notifies change when an entity is removed', async ({ assert }) => {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { test } from '@japa/runner'
|
|
2
2
|
import {
|
|
3
3
|
DomainAssociation,
|
|
4
|
-
AmfShapes,
|
|
5
4
|
DomainAssociationKind,
|
|
6
5
|
Thing,
|
|
7
6
|
AssociationBinding,
|
|
@@ -10,6 +9,7 @@ import {
|
|
|
10
9
|
SemanticType,
|
|
11
10
|
type OnDeleteRule,
|
|
12
11
|
} from '../../../src/index.js'
|
|
12
|
+
import { Shapes } from '@api-client/amf-core'
|
|
13
13
|
|
|
14
14
|
test.group('DomainAssociation.createSchema()', () => {
|
|
15
15
|
test('creates a valid schema with default values', ({ assert }) => {
|
|
@@ -58,7 +58,7 @@ test.group('DomainAssociation.createSchema()', () => {
|
|
|
58
58
|
})
|
|
59
59
|
|
|
60
60
|
test('creates a schema with provided schema', ({ assert }) => {
|
|
61
|
-
const schemaDefinition:
|
|
61
|
+
const schemaDefinition: Shapes.IApiAssociationShape = { linked: false }
|
|
62
62
|
const schema = DomainAssociation.createSchema({ schema: schemaDefinition })
|
|
63
63
|
assert.deepEqual(schema.schema, schemaDefinition)
|
|
64
64
|
})
|
|
@@ -88,7 +88,7 @@ test.group('DomainAssociation.createSchema()', () => {
|
|
|
88
88
|
test('creates a schema with all properties', ({ assert }) => {
|
|
89
89
|
const key = 'test-key'
|
|
90
90
|
const info = { name: 'Test Association', description: 'Test description' }
|
|
91
|
-
const schemaDefinition:
|
|
91
|
+
const schemaDefinition: Shapes.IApiAssociationShape = { linked: false }
|
|
92
92
|
const multiple = true
|
|
93
93
|
const required = true
|
|
94
94
|
const bindings: AssociationBinding[] = [{ type: 'web', schema: { hidden: false } }]
|
|
@@ -144,7 +144,7 @@ test.group('DomainAssociation.createSchema()', () => {
|
|
|
144
144
|
})
|
|
145
145
|
|
|
146
146
|
test('creates a schema with cloned schema', ({ assert }) => {
|
|
147
|
-
const schemaDefinition:
|
|
147
|
+
const schemaDefinition: Shapes.IApiAssociationShape = { linked: false }
|
|
148
148
|
const schema = DomainAssociation.createSchema({ schema: schemaDefinition })
|
|
149
149
|
assert.deepEqual(schema.schema, schemaDefinition)
|
|
150
150
|
assert.notStrictEqual(schema.schema, schemaDefinition)
|
|
@@ -212,7 +212,7 @@ test.group('DomainAssociation.constructor()', () => {
|
|
|
212
212
|
test('creates an instance with provided schema', ({ assert }) => {
|
|
213
213
|
const dataDomain = new DataDomain()
|
|
214
214
|
const parentKey = 'test-parent'
|
|
215
|
-
const schemaDefinition:
|
|
215
|
+
const schemaDefinition: Shapes.IApiAssociationShape = { linked: false }
|
|
216
216
|
const association = new DomainAssociation(dataDomain, parentKey, { schema: schemaDefinition })
|
|
217
217
|
assert.deepEqual(association.schema, schemaDefinition)
|
|
218
218
|
})
|
|
@@ -252,7 +252,7 @@ test.group('DomainAssociation.constructor()', () => {
|
|
|
252
252
|
const parentKey = 'test-parent'
|
|
253
253
|
const key = 'test-key'
|
|
254
254
|
const info = { name: 'Test Association', description: 'Test description' }
|
|
255
|
-
const schemaDefinition:
|
|
255
|
+
const schemaDefinition: Shapes.IApiAssociationShape = { linked: false }
|
|
256
256
|
const multiple = true
|
|
257
257
|
const required = true
|
|
258
258
|
const bindings: AssociationBinding[] = [{ type: 'web', schema: { hidden: false } }]
|
|
@@ -316,7 +316,7 @@ test.group('DomainAssociation.constructor()', () => {
|
|
|
316
316
|
test('creates an instance with cloned schema', ({ assert }) => {
|
|
317
317
|
const dataDomain = new DataDomain()
|
|
318
318
|
const parentKey = 'test-parent'
|
|
319
|
-
const schemaDefinition:
|
|
319
|
+
const schemaDefinition: Shapes.IApiAssociationShape = { linked: false }
|
|
320
320
|
const association = new DomainAssociation(dataDomain, parentKey, { schema: schemaDefinition })
|
|
321
321
|
assert.deepEqual(association.schema, schemaDefinition)
|
|
322
322
|
assert.notStrictEqual(association.schema, schemaDefinition)
|
|
@@ -390,7 +390,7 @@ test.group('DomainAssociation.toJSON()', () => {
|
|
|
390
390
|
test('returns a JSON representation with provided schema', ({ assert }) => {
|
|
391
391
|
const dataDomain = new DataDomain()
|
|
392
392
|
const parentKey = 'test-parent'
|
|
393
|
-
const schemaDefinition:
|
|
393
|
+
const schemaDefinition: Shapes.IApiAssociationShape = { linked: false }
|
|
394
394
|
const association = new DomainAssociation(dataDomain, parentKey, { schema: schemaDefinition })
|
|
395
395
|
const json = association.toJSON()
|
|
396
396
|
assert.deepEqual(json.schema, schemaDefinition)
|
|
@@ -438,7 +438,7 @@ test.group('DomainAssociation.toJSON()', () => {
|
|
|
438
438
|
const parentKey = 'test-parent'
|
|
439
439
|
const key = 'test-key'
|
|
440
440
|
const info = { name: 'Test Association', description: 'Test description' }
|
|
441
|
-
const schemaDefinition:
|
|
441
|
+
const schemaDefinition: Shapes.IApiAssociationShape = { linked: false }
|
|
442
442
|
const multiple = true
|
|
443
443
|
const required = true
|
|
444
444
|
const bindings: AssociationBinding[] = [{ type: 'web', schema: { hidden: false } }]
|
|
@@ -527,7 +527,7 @@ test.group('DomainAssociation.toJSON()', () => {
|
|
|
527
527
|
test('returns a JSON representation with cloned schema', ({ assert }) => {
|
|
528
528
|
const dataDomain = new DataDomain()
|
|
529
529
|
const parentKey = 'test-parent'
|
|
530
|
-
const schemaDefinition:
|
|
530
|
+
const schemaDefinition: Shapes.IApiAssociationShape = { linked: false }
|
|
531
531
|
const association = new DomainAssociation(dataDomain, parentKey, { schema: schemaDefinition })
|
|
532
532
|
const json = association.toJSON()
|
|
533
533
|
assert.deepEqual(json.schema, schemaDefinition)
|
|
@@ -538,7 +538,7 @@ test.group('DomainAssociation.toJSON()', () => {
|
|
|
538
538
|
const dataDomain = new DataDomain()
|
|
539
539
|
const parentKey = 'test-parent'
|
|
540
540
|
const association = new DomainAssociation(dataDomain, parentKey)
|
|
541
|
-
const schemaDefinition:
|
|
541
|
+
const schemaDefinition: Shapes.IApiAssociationShape = { linked: false }
|
|
542
542
|
association.schema = schemaDefinition
|
|
543
543
|
const json = association.toJSON()
|
|
544
544
|
assert.deepEqual(json.schema, schemaDefinition)
|
|
@@ -672,7 +672,7 @@ test.group('DomainAssociation.ensureSchema()', () => {
|
|
|
672
672
|
|
|
673
673
|
test('returns the existing schema object if it exists', ({ assert }) => {
|
|
674
674
|
const dataDomain = new DataDomain()
|
|
675
|
-
const schemaDefinition:
|
|
675
|
+
const schemaDefinition: Shapes.IApiAssociationShape = { linked: false }
|
|
676
676
|
const association = new DomainAssociation(dataDomain, 'test-parent', { schema: schemaDefinition })
|
|
677
677
|
const originalSchema = association.schema
|
|
678
678
|
const schema = association.ensureSchema()
|
|
@@ -682,7 +682,7 @@ test.group('DomainAssociation.ensureSchema()', () => {
|
|
|
682
682
|
|
|
683
683
|
test('does not modify the existing schema object', ({ assert }) => {
|
|
684
684
|
const dataDomain = new DataDomain()
|
|
685
|
-
const schemaDefinition:
|
|
685
|
+
const schemaDefinition: Shapes.IApiAssociationShape = { linked: false }
|
|
686
686
|
const association = new DomainAssociation(dataDomain, 'test-parent', { schema: schemaDefinition })
|
|
687
687
|
const originalSchema = association.schema
|
|
688
688
|
association.ensureSchema()
|