Iridium v8.0.0 Release Notes
Release Date: 2018-03-30 // almost 7 years ago-
๐ This release makes a number of improvements to Iridium's core to make it more intuitive to use and easier to reason about. Unfortunately this does involve changing aspects of how the core behaves when compared to
v8.0.0-alpha.12
, however this behaviour was unspec'ed and resulted in a poor user experience.๐ Changes
- ๐ Making modifications to transformed object properties (or array properties) will now be reflected when calling
.save()
on an instance - even if you have not assigned a new value to the field - see #118 for more information. - โฌ๏ธ The
TDocument
type is now strictly treated as a representation of the DB data structure rather than the pseudo "post-transform" format it used to represent. Previously it would sometimes represent post-transform documents and other times it would represent pre-transform documents, making it difficult to understand its purpose or reason about its behaviour. This change affects the way.insert()
and.create()
behave, please see the Upgrading section for more information. - ๐ Support for using Instance-like objects within instance fields. The introduction of the new
TransformClass
andTransformClassList
field decorators and the fixes for #118 make it possible to easily use class based objects to represent your collections (User { friends: Friend[] }
). - โก๏ธ Updated README.md file with a comprehensive example of how to leverage a number of the tools Iridium provides you with (and up-to-date code).
- โก๏ธ Updated MongoDB client library definitions: improved query type hints
โก๏ธ Updating
1.
TDocument
changesAs a result of the specification of
TDocument
(the first type parameter on yourInstance
andModel
types) as the "type representation of the database's stored document", it is now no longer correct to represent the types ofTDocument
fields as the types that result from running transforms against them.Pre v8.0.0-alpha.13
interface MyDoc { \_id?: string name: string}class MyInstance extends Instance\<MyDoc, MyInstance\> implements MyDoc { @ObjectID \_id: string @Property(String) name: string}
Post v8.0.0-alpha.13
๐ Notice that the
MyDoc._id
field is now amongodb.ObjectId
type and thatMyInstance
no longer
implementsMyDoc
.import {ObjectId} from "mongodb"interface MyDoc { \_id?: ObjectId name: string}class MyInstance extends Instance\<MyDoc, MyInstance\> { @ObjectID \_id: string @Property(String) name: string}
2.
.insert()
and.create()
changesIn addition to the changes you should make to your
Instance
objects andTDocument
interfaces,
you should also curate your use of.insert()
and.create()
to replace instances where you pass
untransformed data to them for insertion in raw document form.๐ For the time being Iridium will provide backward support for the legacy way of inserting and creating
๐ documents, however in future this will be removed and you will need to either provide "DB ready" documents
or utilize a (to be designed and implemented) API to transform an intermediary representation into a "DB ready"
object.Pre v8.0.0-alpha.13
db.User.insert({ // Will be normalized by lowercasing and trimming email: "[email protected] "})
Post v8.0.0-alpha.13
Inserting a "DB-ready" object db.User.insert({ email: "[email protected]"})
Using an instance to generate the object const user = new db.User.Instance({})user.email = "[email protected] "db.User.insert(user)
โก๏ธ 3. Updated
Conditions
interfaceโก๏ธ With the MongoDB client driver's types now including their own implementation of this interface with support for schemas (and the standardization of
TDocument
as the DB schema) we have updated theConditions
type to point to the officialmongodb.FilterQuery
interface.โก๏ธ For all intents and purposes it should behave as it used to, however if you have been referencing
Conditions
in your code you will need to update it toConditions<TDocument>
to take advantage of the new schema support. - ๐ Making modifications to transformed object properties (or array properties) will now be reflected when calling
Previous changes from v8.0.0-alpha.9
-
โก๏ธ This update adds support for TypeScript 2.6 with strict function signatures enabled.