You can add properties to the objects created from your stamps. These are default properties of your objects.
constHasLog=stampit({ props: { log:require('bunyan').createLogger({ name:'my logger' }) }})constloggerObject=HasLog()loggerObject.log.debug('I can log')
If you compose the stamp above with any other stamp, then object instances created from it will also have the .log property.
constRequestHandler=stampit(HasLog) // composing with HasLog.methods({handle(req, res, next) {this.log.info({ originalUrl:req.originalUrl },'handling request') // using the .logres.sendStatus(200) }})consthandler=RequestHandler()handler.log.debug('Created a handler')
Descriptor merging algorithm
The properties are copied by assignment. In other words - by reference using Object.assign.
HasLog().log ===RequestHandler().log
In case of conflicts the last composed property wins.
Other ways to add properties
Exactly the same stamp can be created in few ways. Here they all are.