Composable data stores for node.js and the browser