Releases: aml-org/amf
Changes in 5.0.10
What's Changed
- W-11208538 - Added tests for SemEx transformation changes in AML by @looseale in #1415
- W-11210133: test fix in semex lexicals by @arielmirra in #1419
- W 10674627: parse GraphQL type extensions by @nschejtman in #1416
- W-10671740: Directive applications parsing by @arielmirra in #1427
- Use JDK 11 in docker by @looseale in #1432
- Update JDK to 11 by @looseale in #1433
- chore: changed sonarqube properties config and coverage generation because of a broken integration with sonarqube scala by @tomsfernandez in #1436
- W-10671740: fix null ids in query payloads by @arielmirra in #1431
- some fixes by @nschejtman in #1437
- W-11172918: Fix OAS annotations not being parsed by @hghianni in #1430
- W-11046870: chore: remove profile arguments from validate by @arielmirra in #1438
- chore: updated base image with amf's custom image by @tomsfernandez in #1439
- W-11172094: Fix unresolved reference to parameter by @hghianni in #1441
- final id graphql by @nschejtman in #1442
- W-11147578: Add hasExplicitName method for Shapes by @hghianni in #1444
- jenkins: updated triggers and did a little cleanup by @tomsfernandez in #1445
- W-11210878/jenkins-triggers-fix by @tomsfernandez in #1446
- W-11172465 - Added break condition for SemanticJSONSchema according t… by @looseale in #1448
- W 11048457 by @nschejtman in #1447
- W-11332855 & W-11046870 by @arielmirra in #1449
- W-11235868: update typings by @arielmirra in #1456
Full Changelog: 5.0.9...5.0.10
Changes in 5.0.9
What's Changed
- W-11075212: add inferred annotation to Encodes field in RAML fragments by @arielmirra in #1394
- W 10867566 by @nschejtman in #1393
- W-11019701: update typings with graphql models by @arielmirra in #1396
- W-10868643: add argument default value parsing by @arielmirra in #1401
- W-10984948 - Added long datatype as default type convertion for integ… by @looseale in #1402
- W-10548016: Fix traits not being applied to some operations of an extension by @hghianni in #1403
- W-11085513: set correct ID for null wraper union shapes in GraphQL by @nschejtman in #1409
- W-11155271: Add allowList for rendering annotations by @hghianni in #1410
- W-11105504: some fixes by @nschejtman in #1412
- W-11187481 - Added default shape to SemEx CustomDomainProperty by @looseale in #1413
- W-11155117 - Typings and publish RC.2 by @looseale in #1420
Full Changelog: 5.0.8...5.0.9
Changes in 5.0.8
What's Changed
- W-10881268 - Changed transformer to use allOf and oneOf instead of inh… by @looseale in #1360
- W 10881268 extended schemas refactor by @looseale in #1364
- publish: 5.1.0-snapshot by @tomsfernandez in #1369
- jenkinsfile-fix by @tomsfernandez in #1370
- Added GraphQL TCK, Dataset, sanitization & linting script by @nschejtman in #1346
- W10881317: uncommented tests thanks to support in amf-aml by @tomsfernandez in #1373
- W-10924481 - Refactor of vocabulary generator to detect term collisio… by @looseale in #1371
- Add validation of schema for api-extensions by @pope1838 in #1372
- W-10737835: export content.url, add annotations to xml parsed shapes, fix typings by @arielmirra in #1354
- W-10882348: (fix) allow only letters and numbers in a semschema name. Capped the name to 60 chars by @tomsfernandez in #1374
- W 10935376/number to double semschema by @looseale in #1376
- W-10858693: (test) adopted change in syaml to be able to emit dashes as scalars in YAML by @tomsfernandez in #1375
- W-10868059 by @hghianni in #1377
- Update tippings by @looseale in #1378
- W 10671678 by @nschejtman in #1380
- W-10974844 - Changes SemJsonSchema conversion for arrays by @looseale in #1381
- W-10671849: update GraphQL TCK by @nschejtman in #1384
- W 10868609 by @nschejtman in #1385
- W-10547488: Fixed exceptions thrown in Emitters by @hghianni in #1388
- W-11017124 - Fix error in generated vocab with multiple semantics in … by @looseale in #1389
- W 10674610 by @nschejtman in #1387
- W-10823352: Fix unresolved second level references by @hghianni in #1386
- W-10671730: add graphql directives parsing by @arielmirra in #1390
- W-10671678: change display names of abstract & shape operation models by @nschejtman in #1391
Full Changelog: 5.0.6...5.0.8
Changes in AMF 5.0.6
Validation changes:
Fixed invalid validation issues:
- When declaring a security scheme in a RAML library, using it an API and then converting that API to OAS, the generated OAS was invalid for AMF as the security scheme was not in declarations.
- When including an URI parameter from resourceTypes in endPoints's path, transformation of model resulted in duplicate parameters.
Behavioral changes:
- In OAS, a new parsing warning has been added for cases in which API defines a new type with pattern and format. This relates to the fact that not custom formats already define a standard pattern.
What's Changed
- APIMF-3678: Fix loosing referenced request annotations by @hghianni in #1326
- Add graphql source spec at graphql document parser by @pope1838 in #1333
- Release 5.0.5 to develop by @looseale in #1337
- W-10737157: Add warning for format and pattern combination by @hghianni in #1330
- W-10548827/jenkinsfile-js-publish by @tomsfernandez in #1341
- W-10803434/additional-properties-semschema by @tomsfernandez in #1339
- W-10823102 - Implement little changes related with if/then/else issue by @looseale in #1345
- W 10784090: Add external security schemes to declares when converting raml to oas by @hghianni in #1348
- W-10663809 - Added in conversion support to extended schemas and if/then/else by @looseale in #1347
- W-10858047 - Added transformation support to if without else by @looseale in #1349
- W-10547555: adopted amf-aml changes for non-string literal enum support in Dialects by @tomsfernandez in #1350
- W-10858591 - Added test of schema object without properties. This was… by @looseale in #1351
- W-108575050: added small fix to avoid duplicate semantics in extended if then example by @tomsfernandez in #1352
- W-10881227 - Added new AML model to doc test by @looseale in #1356
- W-10815397: Fix: Parameters with default annotation were not remove from endpoints by @hghianni in #1357
- Support aliased semex through companion libs by @pope1838 in #1343
- publish 5.0.6-RC.0 by @arielmirra in #1359
- (publish): Publish RC.1 because JS package was published wrong. by @tomsfernandez in #1363
- Update typings by @hghianni in #1365
- publish-setup: 5.0.6 by @tomsfernandez in #1366
- publish-setup: 5.0.6 part 2 by @tomsfernandez in #1367
- publish: 5.0.6 by @tomsfernandez in #1368
Full Changelog: 5.0.5...5.0.6
5.0.5
Assets
What's Changed
- APIMF-3678: Fix Request annotations and change expects field to be inferred by @hghianni in #1294
- Interfaces: added client interfaces for GRPC config and GRAPHQL config by @tomsfernandez in #1296
- Adopt validation profile & report artifacts on ad-hoc cli by @nschejtman in #1295
- publish 5.1.0 snapshot by @nschejtman in #1300
- Semantic JSON Schema by @looseale in #1302
- W-10663499: fix adhoc cli parsing using dialects for jar artifact by @AgustinBettati in #1308
- W-10683015: added method to add a list of requests by @looseale in #1310
- W-10667975: changed applies of plugin to process unidentified JSONs a… by @looseale in #1309
- Added missing ModelDoc to root fields of SemJson by @looseale in #1311
- APIMF-2698: Add boolean schemas by @hghianni in #1313
- Silence sbt warning for unused apiContractModelVersion key by @nschejtman in #1315
- non breaking refactors by @nschejtman in #1314
- Changed field name from 'null' to 'nulled' to avoid possible problems by @looseale in #1316
- Add interface to parse from content to SemanticBaseUnitClient by @looseale in #1317
- Remove allowCycleClasses from ShapeTraversalRegistry by @nschejtman in #1318
- Change unnaply of result by @looseale in #1319
- APIMF-3679: Fix: Shape's lexical only included the referenced type by @hghianni in #1321
- APIMF-3026: Fix: Security scheme don't use global mediaType by @hghianni in #1322
- W-10547493: added test of conversion cycle with multiple operations w… by @looseale in #1323
- W-10736116: fix transformation for array with any type items by @looseale in #1324
- Fix test due model version change by @looseale in #1327
- Add release/* publish by @nschejtman in #1328
- Update typings by @nschejtman in #1331
- publish 5.0.5 rc.1 by @nschejtman in #1332
- Add graphql source spec at graphql document parser by @pope1838 in #1334
- Publish 5.0.5 by @looseale in #1335
- Release 5.0.5 by @looseale in #1336
Full Changelog: 5.0.4...5.0.5
Changes in 5.0.4
New Features
Semantic Extensions
This release contains the official support of "Semantic Extensions". To know more about this feature you can see the docs and the examples
Relevant changes:
Unified path normalization behaviour for JS distribution
The implementation used to normalize paths in AMF was adjusted in JS to align its implementation with JVM. Both now rely on java.net.URI
, which has a native implementation provided by scala.js for JS.
This change was relevant for solving APIMF-3517.
AMF Fixed issues
- APIMF-3680: Fix static initialization of wrappers to be done only one time
- APIMF-3666: Update SBT, sbt plugins and available libs
- APIMF-3649: Verify path normalization fix does not break js/windows functionality
- APIMF-3386: RAML 1.0 examples on trait duplicated by usages of trait
- APIMF-3606: Wrong lexical in complex API (Async2)
- APIMF-3603: Unhandled syaml exception in Parsing
GitHub issues fixed
Changes in 5.0.3
Relevant changes:
Simple inheritance and examples
A simple inheritance is when a type is a child of a parent type, and it defines no properties, or only properties that are documentation related and don't change the behavior or the schema.
These are some examples of simple inheritance in RAML:
BaseTypeString: # base type
displayName: base type
description: description of base type
type: string
example: "base example"
# simplest single inheritance
inline-string: BaseTypeString
# similar to inline but more verbose
simple-inheritance-string:
type: BaseTypeString
# fields like description, displayName, or example don't change the schema, thus this type is still a simple inheritance
simple-inheritance-with-doc-string:
type: BaseTypeString
description: Description of the simple inheritance type
# this type defines a `maxLength`, this is not a simple inheritance
complex-inheritance-string:
type: BaseTypeString
description: Description of the complex inheritance type
maxLength: 3
Previously, the example of the parent type was put into the child type only if it was an inline simple inheritance, now they propagate in any kind of simple inheritance, as we are sure that they will still be valid.
Furthermore, in RAML 0.8 when an example was an invalid reference, the example field and it's metadata was not parsed into the model. Now it's created with an empty example list as it's done in the other specs.
AMF Fixed issues
- APIMF-3213: Incorrect parsing of a RAML property ending with
?
- APIMF-3594: RAML 0.8 examples field has changed it's behavior
- APIMF-3503: Simple inheritance deletes examples field
- APIMF-3387: JSON schema of scalar type causes java.RuntimeException when defined with 'type' facet and used in response body
- APIMF-3302: Validation profile not being used in AMF 4 examples
- APIMF-3341: Custom domain property 'tags' disappears from the model
- APIMF-3592: WebApi platform interface does not have getter/setter for tags
GitHub issues fixed
Changes in 5.0.2
Changes in AMF 5.0.1
Interface changes:
A new render option has been added to RenderOptions
class with the method withSourceInformation
that lets you acquire the URI location from where it was originally parsed of any element in the base unit. This only affects the rendering in JSON-LD, and has been added in the issue APIMF-3319.
GitHub fixed issues
- #1084: Unable to track JSON schema (the raw value) from a payload
AMF Fixed issues
Changes in AMF 5.0.0
Summary
This new mayor version includes changes focused in the client interfaces and internal structure of AMF with the intention of providing a simplified and clean usage. These changes DO NOT modify underlying functionality with regards to the previous version 4.7.8
.
Complementary to these release notes, make sure to see our updated documentation with its migration guide, as well as our examples repository.
Interface Changes
Unify all configuration in a single instance removing static behaviour
Why? In AMF 4 functionality was partially pluggable through a static registry. That is why clients had to invoke asynchronous AMF.init()
or similar initialization methods in order for AMFs functionality to work correctly. This initialization was not transparent to the end user, and lead to issues which were difficult to reproduce and debug.
This behaviour has been completely removed in favor of immutable configuration instances. These instances are the single point through which a user defines the functionality is wishes to use (support for a certain API Spec as an example), and other parameters such as parsing/render options, or resource loaders. Users can now create multiple AMF configurations and have a clear sense of the capabilities each one has.
More details here.
Functionality is exposed through clients
Why? In AMF 4 functionality was exposed through a variety of classes, and configurable parameters had to be passed on each invocation.
All of our functionality has now been unified into 2 client interfaces. These client classes are obtained directly from a configuration instance, meaning that all of their configurable parameters are used for the operations invoked by the client. This has also allowed us to move functionality that was exposed through methods defined in model classes making their interface more simple.
More details here.
Explicit result feedback for each operation
Why? In AMF 4 operations such as parsing and resolution did not return any validation results, only returning the resulting BaseUnit. If validation results where to occur, these where collected statically and returned when the validation operation was called. This lead to a static collection that stored all validations and could cause potential memory problems in long executions. This also did not give transparency to users that where only interested in parsing or resolution.
Each operation now returns a specific instance of AMFResult, which not only contains the result BaseUnit, but also a list of all the validation result that where collected.
New Functionality
New specification agnostic parsing functionality through composite configurations
Composite configurations such as APIConfiguration.API()
which contain capabilities for more that one specification can only be used for parsing. We have maintained this functionality as it offers AMF users the possibility of parsing any content without knowing the specification type beforehand. Any other operation that is invoked when using composite configuration will result in errors, such as rendering, transformation, or validation as they must apply for a particular specification.
New interfaces for scala adopters
In AMF 4 client interfaces where only available for javascript and java, without support for native scala types such as Future or Option. This has now been included giving classes for clients in java, scala, and javascript. More details as to how our package structure is handled can be found in Transparent packet structure
heading.
New EventListeners which replace static ExecutionLog
A new AMFEventListener
interface has been defined which can be plugged into any configuration. This listener provides additional insights over the execution of AMF through a set of events. Each event has a name, and a set of additional values according to each type.
New id adoption functionality available for BaseUnit
A new functionality was implemented allowing the possibility of adopting the ids of all the elements of a BaseUnit given a certain base uri. This is used internally by AMF after parsing a BaseUnit to make sure all ids are correctly defined. This functionality has been exposed to the end user if there is a need to modify ids from a parsed or created model in a deterministic manner.
An example of this use case can be found here.
Additional Changes
Restructured modules and artifacts
AMF 5 artifacts are now domain scoped. What used to be the amf-client
module in AMF 4 is now broken into multiple
modules. The new AMF ecosystem modules are the following:
amf-cli
: CLI client classesamf-api-contract
: API domain classesamf-shapes
: Schema domain classesamf-aml
: AML domain classesamf-validation
: Validation domain classesamf-core
: Core domain classesamf-rdf
: External RDF interface classes
Transparent package structure
AMF 5 is organized in packages according to their visibility and target platform. These are:
amf.[module].internal
: internal unsafe interfaceamf.[module].client
: client exposed interfacesamf.[module].client.platform
: platform (JVM & JS) interface classesamf.[module].client.scala
: native scala interface classes
Removed jena-shacl dependency and extracted RDF related functionality in separate artifact
AMF 5 now provides native SHACL validation without the need for jena-shacl
. Jena is no longer a standard dependency in
AMF. The new amf-rdf
artifact contains the Jena dependency as well as the necessary classes to interface the AMF
model with external RDF models like the Jena. amf-rdf
must be explicitly imported. JAR size decreased around 40%
Discontinued support of custom validation functionality
AMF 5 no longer includes functionality for custom validation. We are working on a new separate project solely focused on this regard allowing us to incorporate more features and enhanced performance.