This is a stats
lib that has no dependencies but needs to be initialized.
module.exports = function initializeStats(projectName, options) {
return {
isInitialized: true,
options,
metric: function metric(args) {
// code using projectName, options
}
};
}
This is a lib module that needs an already-initialized stats
module to work.
module.exports = function instrument(stats) {
// fail early
if (!stats.isInitialized) {
throw new Error('stats not initialized. see <link>');
}
// immutable operation that returns a brand new module instance
return {
instrumentedFetch: function instrumentedFetch(args) {
// code using initialized stats module
}
};
};
const stats = require('@team/corelib/lib/stats');
// some project-wide options
const projectName = 'project-name';
const projectOptions = {};
// immutable operation in the stats module
module.exports = stats(projectName, projectOptions);
const instrument = require('@team/corelib/instrument');
const stats = require('./stats'); // already initialized stats
// immutable operation in the instrument module
module.exports = instrument(stats);
const { instrumentedFetch } = require('./lib/instrument');
// already configured with an initialized stats but not need to pass it along to every call
instrumentedFetch(args);