Releases: accordproject/concerto
Concerto v1.0.0-alpha.6
This release improves support for data validation for the new Ergo runtime.
Changes
- Adds
--ergo
option to command line, which validates for Ergo - Fixes bug with Ergo validation of optional fields, not handling missing or null values properly
Concerto v1.0.0-alpha.5
This release adds an optional pragma to specify compatible Concerto versions on model files.
Changes
- Adds optional new syntax
concerto version "<SEMVER RANGE>"
on model, specifying compatible Concerto versions for a model (#255 ) - Remove unused
allowEmptyId
option on factory API
Concerto v1.0.0-alpha.4
This release adds the ability to specify a UTC offset when validating DateTime values.
Core
Validation:
- Add an optional
utcOffset
parameter to the validation API, which is used to set a UTC offset on DateTime values
Concerto v1.0.0-alpha.3
This release addresses several critical issues in version v1.0.0-alpha.2
. It also adds support in the Concerto command line for the new functional validation API (experimental).
Core
Several critical fixes to Concerto 1.0.0-alpha.2
:
- Do not automatically generate identifiers when they are meant to be user-provided (#244)
- Adds back root types for
Participant
Asset
Transaction
andEvent
(#228) - System types in the
concerto.*
namespace are now automatically imported - Fixes inconsistent identifiers handling when used in conjunction with the type hierarchy (#240)
timestamp
is now$timestamp
and only system-generated (#242)- Fixed functional API validation for classes with a system identifier (#249)
API
- model classes (
Resource
,Identifiable
, etc) now take an (optional)timestamp
parameter ClassDeclaration
methods for identifiers are now semantic (is the class is identifiable) rather than syntactic (does the class declaration have anidentified
oridentified by
)
CLI
- Adds
--functional
option to try the new validation API (#243) - Align with
markus
CLI:--ctoFiles --> --model
and--sample --> --input
Concerto v1.0.0-alpha.2
Introduction
This is a pre release of Concerto 1.0.
Concerto 1.0 delivers some fundamental improvements, whilst maintaining a high-degree (though not total!) of backwards compatibility.
Breaking Changes
- Systems models are no longer supported
- DateTime values do not preserve the timezone offset and are always converted to UTC
- Validation has been made stricter, which means some previously allowed instances will now fail validation
- The syntax and semantic of relationships has been changed
Removal of System Models
See: (#62) ✅
An advanced feature of prior versions of Concerto was the ability to add a system model to the ModelManager
, which functioned as an implicit set of base types for concepts, assets, participants etc within the scope of the ModelManager
. This feature complicated the APIs considerably, and it had the effect of making CTO models non-portable, in as far as they could only be loaded into a ModelManager
that used the same set of system models.
System models have therefore been removed from Concerto v1 — any base types should now be imported and referenced explicitly into model files.
Strict Validation
Prior to Concerto v1 validation suffered from some side-effects of JavaScript type-coercion. For example, "NaN"
would be a valid value for a Double
field. These edge cases have now been tightened up, so some instances that were valid prior to v1 may now fail validation.
Identifiers and Relationships
See: (#181) ✅
Prior to v1 a relationship could only be declared to an asset, participant, transaction or event (as these must be identified by
). In v1 two new capabilities have been added:
- Concepts can now be declared to be
identified by
an identifying field, allowing them to be used with relationships - Any type can be declared as
identified
— to automatically create a system$identifier
field.
The model below is valid with Concerto v1.
namespace org.accordproject
concept Address {
o String country
}
concept Product identified by sku {
o String sku
}
concept Order identified {
o Double ammount
o Address address
--> Product product
}
Root of Type Hierarchy
See: (#180) ✅
All declared types now have concerto.Concept
as their super type, and the concerto
namespace is reserved. Note that the super type for concerto.Concept
is null.
Functional API (experimental)
See: (#188) ✅
A new streamlined Concerto
API has been added, to replace some of the existing runtime APIs. Existing runtime APIs have been preserved, but will be progressively removed.
The Concerto
API is much more functional in nature, and allows plain-old-JavaScript objects to be validated using a ModelManager
— removing the need to use the Factory
API to create JS objects prior to validation, or to use the Serializer
to convert them back to plain-old-JavaScript objects. This should reduce the learning-curve for the library and improve performance.
const { ModelManager, Concerto } = require('@accordproject/concerto-core');
const modelManager = new ModelManager();
modelManager.addModelFile( `namespace org.acme.address
concept PostalAddress {
o String streetAddress optional
o String postalCode optional
o String postOfficeBoxNumber optional
o String addressRegion optional
o String addressLocality optional
o String addressCountry optional
}`, 'model.cto');
const postalAddress = {
$class : 'org.acme.address.PostalAddress',
streetAddress : '1 Maine Street'
};
const concerto = new Concerto(modelManager);
concerto.validate(postalAddress);
Concerto v0.82.11
🐛 This release fixes and issue with the new JSONSchema compilation target, when dealing with multiple model files.
Concerto v0.82.10
🗺️ This release includes a rewrite of the JSONSchemaVisitor
class, used to convert a Concerto model to a JSON Schema.
It addresses the following:
- Bug fix for Concerto models that contain recursive relationships #206
- Concerto decorators are added to the JSON Schema #207
- Concerto Integer, Double and Long fields now have their
range
validation expressions added to the JSON Schema - Concerto String fields now that their
regex
validation expressions added to the JSON Schema - Enforce correct
$class
names in the JSON Schema
By default the new code generates JSON Schema definitions for all types in a ModelManager
and adds them to a top-level definitions
attribute, and uses $ref
to reference them. To expand non-recursive types inline you can use the inlineTypes
parameter.
Use the rootType
parameter to optionally expand a single class definition into the root of the generated schema document.
Concerto v0.82.9
This is a patch release, which allows users to control whether to resolve external models or not ("offline" mode) from the command line, and improves the build / testing process.
🏖️ Work offline with the CLI and ModelLoader class (#202)
- Concerto CLI now supports an option
--offline
which can be used to disable external models resolution. This can be used when all models are local. - New
offline
option for theModelLoader
class, which disables external models resolution. This can improve performances when external model resolution is not needed.
🏗️ Build
- Version checking for the changelog and API documentation generation does not fail anymore for the next available version (#204)
Concerto v0.82.8
🏗️ This is a patch release, with a more flexible configuration of the log directory for AWS lambda and a more robust handling of log directory creation failure. (Contribution: @frbrkoala and @dselman).
Concerto v0.82.7
🏠 This is a minor release, fixing an inconsistency in the model manager and adding a convenience function to the model loader.
Bug Fixes
- Addresses inconsistency in API documentation for the model manager #170
API
- Add
ModelLoader.loadModelManagerFromModelFiles
convenience function