Configuration is a storage of an arbitrary data in the .configuration
metadata of stamp's descriptor.
let HaveApiKey = stampit({
conf: {
apiKey: process.env.API_KEY
}
})
HaveApiKey.compose.configuration.apiKey === process.env.API_KEY
You can set configuration in static methods:
HaveApiKey = HaveApiKey.statics({
setApiKey(key) {
return this.conf({ apiKey: key }) // create new stamp by composing parent stamp with some configuration
}
})
HaveApiKey = HaveApiKey.setApiKey('abcd1234')
HaveApiKey.compose.configuration.apiKey === 'abcd1234'
You can access the configuration in stamp initializers (aka constructors).
const ApiKeyPrinter = HaveApiKey.init(function (opts, { stamp }) {
const configuration = stamp.compose.configuration
console.log(configuration.apiKey) // It is perfectly safe to log secret API keys. Right?
})
HaveApiKey() // this will execute the initializer, and will print "abcd1234" to the console
The configuration properties are copied by assignment. In other words - by reference using Object.assign
.
HaveApiKey.compose.configuration.apiKey === ApiKeyPrinter.compose.configuration.apiKey
In case of conflicts the last composed property wins.
Exactly the same stamp can be created in few ways. Here they all are.
const HasLog = stampit({
conf: {
apiKey: process.env.API_KEY
}
})
const HasLog = stampit({
configuration: {
apiKey: process.env.API_KEY
}
})
const HasLog = stampit.conf({
apiKey: process.env.API_KEY
})
const HasLog = stampit.configuration({
apiKey: process.env.API_KEY
})
const HasLog = stampit().conf({
apiKey: process.env.API_KEY
})
const HasLog = stampit().configuration({
apiKey: process.env.API_KEY
})