Build and batch-execute GraphQL queries simply
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
dist
docs
flow-typed/npm
src
.babelrc
.flowconfig
.gitignore
.travis.yml
package-lock.json
package.json
project.graphcool
readme.md

readme.md

GraphQL Query Batcher

CI Build Status Bar

Note: "Query" is used broadly to mean both query and mutation

Overview

  • build GraphQL queries
  • batch execute those queries

Need quick batching? factory function is the answer Need to split the query build and query batching process? Checkout builder and batcher


Sample project: graphql-query-factory-test

Status

  • factory included as of 1.0.20 (shim around builder and batcher)
  • batcher included as of 1.0.20 (executes array of queries)
  • builder updated (this builds query strings from query/mutation and variables)

Action Items

You can see TODOs and release plans in todo.md

Getting Started

Installation

npm install graphql-query-factory -S

Configuration (Environment Variables)

When using factory or batcher you must include two environment variables:

  • GQL_SIMPLE_ENDPOINT
  • GQL_AUTH_TOKEN

Examples

All of these examples can be seen at graphql-query-factory-test

All mock variables (e.g. "mock.template", "mock.variables") can be viewed here: .../tests/_mock.js


builder

const { builder } = require('graphql-query-factory');

let queries = builder(mock.template, mock.variables);
log(`builder(mock.template, mock.variables): ${queries}`);

NOTE: async version has been replaced here with sync version. Will be adding async version of builder in future along with a stream. See todo.md for details.


factory

const { factory } = require('graphql-query-factory');

factory(mock.template, mock.variables)
  .then(data =>
    log(
      `factory(mock.template, mock.variables): ${JSON.stringify(data, null, 4)}`
    )
  )
  .catch(err => log(`factory(mock.template, mock.variables): ${err}`));

batcher

const { batcher } = require('graphql-query-factory');

batcher
  .batch(mock.batchQuery)
  .then(data =>
    log(`batcher.batch(mock.batchQuery): ${JSON.stringify(data, null, 4)}`)
  )
  .catch(err => log(`batcher.batch(mock.batchQuery): ${err}`));

Output

The following output is generated by the example project, graphql-query-factory-test

Data being saved to Graph.cool

graphcool

builder

mutation {
  createContent(
    markup: "markupA"
    raw: "rawA"
  ) {
    markup
    raw
  }
},mutation {
  createContent(
    markup: "markupB"
    raw: "rawB"
  ) {
    markup
    raw
  }
},mutation {
  createContent(
    markup: "markupC"
    raw: "rawC"
  ) {
    markup
    raw
  }
},mutation {
  createContent(
    markup: "markupD"
    raw: "rawD"
  ) {
    markup
    raw
  }
},mutation {
  createContent(
    markup: "markupE"
    raw: "rawE"
  ) {
    markup
    raw
  }
},mutation {
  createContent(
    markup: "markupF"
    raw: "rawF"
  ) {
    markup
    raw
  }
},mutation {
  createContent(
    markup: "markupG"
    raw: "rawG"
  ) {
    markup
    raw
  }
}

batcher

[
    {
        "createContent": {
            "markup": "markupA",
            "raw": "rawA"
        }
    },
    {
        "createContent": {
            "markup": "markupB",
            "raw": "rawB"
        }
    },
    {
        "createContent": {
            "markup": "markupC",
            "raw": "rawC"
        }
    },
    {
        "createContent": {
            "markup": "markupD",
            "raw": "rawD"
        }
    },
    {
        "createContent": {
            "markup": "markupE",
            "raw": "rawE"
        }
    },
    {
        "createContent": {
            "markup": "markupF",
            "raw": "rawF"
        }
    },
    {
        "createContent": {
            "markup": "markupG",
            "raw": "rawG"
        }
    }
]

factory

[
    {
        "createContent": {
            "markup": "markupA",
            "raw": "rawA"
        }
    },
    {
        "createContent": {
            "markup": "markupB",
            "raw": "rawB"
        }
    },
    {
        "createContent": {
            "markup": "markupC",
            "raw": "rawC"
        }
    },
    {
        "createContent": {
            "markup": "markupD",
            "raw": "rawD"
        }
    },
    {
        "createContent": {
            "markup": "markupE",
            "raw": "rawE"
        }
    },
    {
        "createContent": {
            "markup": "markupF",
            "raw": "rawF"
        }
    },
    {
        "createContent": {
            "markup": "markupG",
            "raw": "rawG"
        }
    }
]