Comment on page
Static deep properties
The static deep properties are properties attached to stamp itself. But unlike regular (shallow) static properties these are deeply merged together by stamp deep merging algorithm.
const SchemaTypes = stampit.deepStatics({
Types: {
String,
Number,
Array
}
})
const ObjectIdSchemaType = stampit.deepStatics({
Types: {
ID: String,
ObjectId: require('./object-id')
}
})
const Schema = stampit(SchemaTypes, ObjectIdSchemaType, { // stamp deep merging kicks in this line
init(data, { stamp }) {
// stamp.Types.String, stamp.Types.ID, ...
}
})
// Schema.Types.String
// Schema.Types.Number
// Schema.Types.Array
// as well as
// Schema.Types.ID
// Schema.Types.ObjectId
The staticDeepProperties are deeply merged using stamp deep merging algorithm. See below - the
Types
value is always a new object.SchemaTypes.Types !== Schema.Types // NEVER EQUAL! NO MATTER WHAT!
Sometimes a regular (shallow) static property has the same name as a deep static property. The shallow static property always wins.
const NullTypes = stampit.statics({
Types: null
})
const NoTypesSchema = Schema.compose(NullTypes)
NoTypesSchema.Types === null // the regular property overwrites deep property
Exactly the same stamp can be created in few ways. Here they all are.
const myTypes = { String, ID: String, Number, Array }
const AuthServiceToken = stampit({
deepStatics: {
Types: myTypes
}
})
const HasLog = stampit({
staticDeepProperties: {
Types: myTypes
}
})
const HasLog = stampit.deepStatics({
Types: myTypes
})
const HasLog = stampit.staticDeepProperties({
Types: myTypes
})
const HasLog = stampit().deepStatics({
Types: myTypes
})
const HasLog = stampit().staticDeepProperties({
Types: myTypes
})
Last modified 5yr ago