Extends EJSON with additional types.
Supported Types
Currently, ejson-extras
adds support for the following types:
Please submit an issue if you'd like to see an addtional type.
Creating a custom type
Adding an additional type is as easy as adding a file to the /types directory.
Here is a sample type file for supporting the native Map
object:
module.exports = {
prototype: Map.prototype,
shims: {
typeName() {
return 'Map';
},
toJSONValue() {
return JSON.stringify([...this]);
},
clone() {
return new Map(this);
},
equals(other) {
if (this.size !== other.size) return false;
Array.from(other.entries()).keys(key => {
return this.get(key) == other.get(key);
});
},
},
factory(json) {
return new Map(JSON.parse(jsonStr));
},
typeName: 'Map',
};
Peer Dependancies
Many custom types will require a peer dependancy. An example of this is
jsQuantities.js
, in this case we use try-require
to import the peer library.
If the peer library isn't found, ejson-extras will skip adding support for that
particular type.