Skip to content

Releases: accordproject/concerto

Concerto v1.0.1

01 May 14:49

Choose a tag to compare

This release fixes an issue with the command line validation when using the --ergo option.

Concerto v1.0.0-alpha.10

26 Apr 18:57

Choose a tag to compare

Removes rollup bundles altogether, creating some issues in some of the downstream packages.

Concerto 1.0.0

27 Apr 13:20

Choose a tag to compare

Introduction

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

See: (#158 #157 ) ✅

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:

  1. Concepts can now be declared to be identified by an identifying field, allowing them to be used with relationships
  2. 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 v1.0.0-alpha.9

24 Apr 14:17

Choose a tag to compare

This release fixes and issue with the new rollup build process.

Concerto v1.0.0-alpha.8

23 Apr 18:53

Choose a tag to compare

This alpha release:

  1. Fixes issues with Concerto.instanceOf (#264 )
  2. Adds a new --utfOffset option to the command line
  3. Adds utcOffset configuration to the model manager and serialized
  4. Switches bundling from webpack to rollup

Concerto v1.0.0-alpha.7

19 Apr 04:02

Choose a tag to compare

This alpha release consolidates validation targeting the ergo ES6 runtime. It also includes:

  • Fixes to the ModelFile API: removing unused system file options
  • A new and more efficient loader for external models (contribution by @mttrbrts )
  • Dependency upgrades

Concerto v1.0.0-alpha.6

13 Apr 04:24

Choose a tag to compare

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

11 Apr 15:34

Choose a tag to compare

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

08 Apr 21:22

Choose a tag to compare

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

30 Mar 22:12

Choose a tag to compare

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 and Event (#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 an identified or identified by)

CLI

  • Adds --functional option to try the new validation API (#243)
  • Align with markus CLI: --ctoFiles --> --model and --sample --> --input