Package Exports
- manageable
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (manageable) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Manageable

A minimal implementation of a manageable object.
What?
A manageable object is any object that can initialize and destroy itself along with its dependencies.
It does so by responding to initialize
and destroy
messages.
Why?
I often find myself writing code like this:
const myService = {
initialized: false,
initialize(options) {
if (initialized) // throw already initialized.
return Promise.all(
this.dependencies.map(d => d.initialize(options))
);
},
destroy(options) {
if (!initialized) // throw not initialized.
return Promise.all(
this.dependencies.map(d => d.destroy(options))
);
}
};
So I decided to abstract it into a factory use it like this:
const createManageable = require('./');
const myServiceDependencies
const myService = Object.assign(
{},
createManageable({ dependencies: myServiceDependencies })
);
// Alternatively
const destroyMyService = function* () {};
const initializeMyService = function* () {};
const myService = Object.assign(
{},
createManageable({ initialize: initializeMyService, destroy: destroyMyService })
);
If it sounds like over-kill to you, this real world example might show how its useful:
const mongodb = require('mongodb');
function createMongoDbClient(options) {
const { connectionUri } = options;
let db;
const client = Object.assign({
// Just a test method.
getDbStats() {
return db.stats();
}
}, createManageable({ initialize: initializeClient, destroy: destroyClient }));
function initializeClient() {
return mongodb.MongoClient.connect(connectionUri);
}
function destroyClient() {
return db.close();
}
}
const myMongoDbClient = createMongoDbClient({
connectionUri: 'mongodb://localhost/test',
});
// Usage with promises
myMongoDbClient
.initialize()
.then(myMongoDbClient.getDbStats())
.then(dbStats => console.log(dbStats))
.then(myMongoDbClient.destroy());
// Usage with generators
// assuming `const coroutine = require('co')`;
coroutine(function* () {
yield myMongoDbClient.intialize();
const dbStats = yield myMongoDbClient.getDbStats();
console.log(dbStats);
yield myMongoDbClient.destroy();
});