Socket
Socket
Sign inDemoInstall

tyranid-graphql

Package Overview
Dependencies
241
Maintainers
2
Versions
26
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    tyranid-graphql

GraphQL plugin for tyranid


Version published
Maintainers
2
Created

Readme

Source

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

FAQs

Last updated on 11 Jun 2020

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc