Composable parser combinators for JavaScript