0.5.25 • Published 4 years ago

tyranid-graphql v0.5.25

Weekly downloads
1
License
Apache-2.0
Repository
github
Last release
4 years ago

GraphQL frontend for Tyranid

npm version codecov

This library adds a graphql query interpreter for the tyranid mongodb ORM. The graphql schema is created from tyranid collection schemas using graphql-js.

Quick Example

After calling graphqlize(Tyr) on tyranid, use graphql queries for complex populations...

import { Tyr } from 'tyranid';
import { graphqlize } from 'tyranid-graphql';

// ...
graphqlize(Tyr); // (synchronous)
// ...

// template tag syntax
const results = await Tyr.graphql`
  query userTeams {
    users {
      name
      teamIds {
        name,
        organizationId {
          name
        }
      }
    }
  }
`;

console.log(users[1].teamIds[2].organizationId.name); // => "Chipotle"

Interactive graphql server Example

Apollo server example

To see an example of apollo-server (http://dev.apollodata.com/core/) being used with a generated schema from tyranid, clone the repo, install deps...

npm install

and run the example server

npm start

Detailed Code Example

Say we have the following tyranid collections...

import { Tyr } from 'tyranid';

export const User = new Tyr.Collection({
  id: 'u00',
  name: 'user',
  dbName: 'users',
  fields: {
    _id: { is: 'mongoid' },
    name: { is: 'string' },
    teamIds: {
      is: 'array',
      of: {
        link: 'team'
      }
    },
    organizationId: { link: 'organization' }
  }
});

export const Team = new Tyr.Collection({
  id: 't00',
  name: 'team',
  dbName: 'teams',
  fields: {
    _id: { is: 'mongoid' },
    name: { is: 'string' },
    organizationId: { link: 'organization' }
  }
});

export const Organization = new Tyr.Collection({
  id: 'o00',
  name: 'organization',
  dbName: 'organizations',
  fields: {
    _id: { is: 'mongoid' },
    name: { is: 'string' }
  }
});

We then can add graphql functionality to tyranid as follows

import { Tyr } from 'tyranid';
import { graphqlize } from 'tyranid-graphql';


(async() => {
  const db = await mongodb
    .MongoClient
    .connect('mongodb://127.0.0.1:27017/tyranid_gracl_test');

  Tyr.config({
    db: db,
    validate: [
      { dir: __dirname,
        fileMatch: 'models.js' }
    ]
  });

  graphqlize(Tyr);
})();

Then, elsewhere in the app, we can use graphql queries for complex population of linked collections.

Additionally, if a Tyr.secure plugin like tyranid-gracl is being utilized, we can provide auth and perm parameters to have properties / documents filtered by user permissions.

const results = await Tyr.graphql({
  query: `
    query userTeams {
      users {
        name
        teamIds {
          name,
          organizationId {
            name
          }
        }
      }
    }
  `
  auth: req.user,
  perm: 'view'
});


// result === {
//     'data': {
//       'users': [
//         {
//           'name': 'ben',
//           'teamIds': [
//             {
//               'name': 'burritoMakers',
//               'organizationId': {
//                 'name': 'Chipotle'
//               }
//             },
//             {
//               'name': 'chipotleMarketing',
//               'organizationId': {
//                 'name': 'Chipotle'
//               }
//             }
//           ]
//         },
//         {
//           'name': 'ted',
//           'teamIds': [
//             {
//               'name': 'cavaEngineers',
//               'organizationId': {
//                 'name': 'Cava'
//               }
//             }
//           ]
//         },
//         {
//           'name': 'noTeams',
//           'teamIds': []
//         }
//       ]
//     }
//   };

Installation

npm install tyranid-graphql

License

MIT

0.5.25

4 years ago

0.5.24

4 years ago

0.5.23

4 years ago

0.5.20

4 years ago

0.5.19

4 years ago

0.5.18

4 years ago

0.5.9

4 years ago

0.5.8

5 years ago

0.5.7

5 years ago

0.5.6

6 years ago

0.5.4

6 years ago

0.5.2

6 years ago

0.5.1

6 years ago

0.5.0

6 years ago

0.0.12

6 years ago

0.0.11

6 years ago

0.0.10

6 years ago

0.0.9

6 years ago

0.0.8

6 years ago

0.0.7

8 years ago

0.0.6

8 years ago

0.0.5

8 years ago

0.0.4

8 years ago

0.0.3

8 years ago

0.0.2

8 years ago

0.0.1

8 years ago