<commit_before>Dart Crossbow
=============

Crossbow is a library for building applications as a series of pipelines.

Crossbow principles:

  * Functions should never block
  * Code should be terse
  * Futures should be hidden
  * Defaults should be sensible
  * Prefer streams over lists

Example:

    (
        Http.get('/user/{username}/trips')
        | DB.select(from: [Trip, User], 
                    where: (query, message) =>
                        query.where('user.username').equals(message.headers.path('username'))
                            .orderBy('date').descending()
                            .list())
        | Convert.toJson()
        | Stream.join(by: (headers, body) => headers['request'],
                as: JsonArray)
    ).start();

The example above will accept HTTP connections on port 8080 on the specified URL with placeholders 'username' and 'date'. It will
then perform a query for the type Trip using the path parameters. The results of the query will be streamed and
converted to JSON as they come in. Then the results will be joined again by the request and streamed to the response
as a JSON array.<commit_msg>Corrected and updated documentation<commit_after>Dart Crossbow
=============

Crossbow is a library for building applications as a series of pipelines.

Crossbow principles:

  * Functions should never block
  * Code should be terse
  * Futures should be hidden
  * Defaults should be sensible
  * Prefer streams over lists

Example:

    (
        Http.get('/user/{username}/trips')
        | DB.select(from: table(Trip).join(User), 
            where: (query, headers) =>
                query.path('user.username').equals(headers.path('username'))
                    .orderBy('trip.date').descending()
                    .list())
        | Convert.toJson()
        | Stream.join(by: (headers, body) => headers['request'],
                as: JsonArray)
    ).start();

The example above will accept HTTP connections on port 8080 on the specified URL with placeholders 'username' and 'date'.
It will then perform a query for the type Trip using the path parameters.
The results of the query will be streamed and converted to JSON as they come in.
Then the results will be joined again by the request and streamed to the response as a JSON array.
{'fraction_non_alphanumeric': 0.09556907037358818, 'fraction_numerical': 0.0034752389226759338, 'mean_word_length': 2.667197452229299, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2159834', 'n_tokens_mistral': 597, 'n_tokens_neox': 567, 'n_words': 247}