Security News
RubyGems.org Adds New Maintainer Role
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
ember-cli-mirage-graphql
Advanced tools
This addon is for mocking GraphQL with Ember CLI Mirage.
This addon is very early in its development and the code currently supports limited use cases. If you would like to contribute, don't be afraid to trample any existing code. It's quite trampleable.
ember install ember-cli-mirage
ember install ember-cli-mirage-graphql
This addon creates a request handler for use with Mirage that takes your GraphQL schema and creates mocks accordingly. In its simplest form, the mocks query data from Mirage's database, by type, and optionally filter records by matching query variables.
See the dummy app in this addon's tests folder for a complete example. Open the Mirage folder and notice the added handlers
folder. This is where we created the GraphQL request handler callback. It can be imported in the Mirage config for use with your GraphQL request handler.
Note: There is no need to create a separate module for your handler, as we did, but we think it's nice to keep all the handler options out of the Mirage config.
If you're like us, you'll want to create your handler aside from your Mirage config:
// /mirage/handlers/graphql.js or wherever you like
import createGraphQLHandler from 'ember-cli-mirage-graphql/handler';
import schema from 'app-name/path-to-your-schema';
export default createGraphQLHandler(schema, /* options = {} */);
Note: We use a simple command line tool to download our schema: get-graphql-schema.
Then import your handler for use in your Mirage config:
// /mirage/config.js
import graphQLHandler from './handlers/graphql';
export default function() {
this.post('/path-to-graphql', graphQLHandler);
}
You may pass in options when creating a request handler. The options take the form of a hash and may contain the following:
{
/*
`fieldsMap` is used if you need to map a field defined in your
GraphQL schema to a different field for a record in your Mirage
database.
This can happen if, for example, you are migrating from a JSON
API backend to GraphQL and there are model name conflicts.
In this example the mapping is for a relationship; however, you
may map any field type.
String values will be used to map field names from your query to
match those in your Mirage database.
Method values will be used to filter records and will run after
any variable filtering and related data fetching. This allows for
complex record filtering that can't be done with variables alone.
The methods receive 3 arguments:
1. The resolved records, if any.
2. Mirage's database.
3. Its parent record, if any.
*/
fieldsMap: {
Person: { // fields are mapped on a per-type basis
pets: 'animals'
}
},
/*
`mutations` is an object used to mock mutation functionality you
might expect from the server. Each method maps directly to a
named mutation from your schema and receives 3 arguments:
1. The table from Mirage's database that corresponds to the return
type of the mutation.
2. The mutation arguments. These will be mapped per the argsMap
option, by the return type, if appropriate.
3. Mirage's database.
For now, this is the only way to mock mutations with this addon;
however, we will try to implement some form of default mutation
functionality, if feasible.
*/
mutations: {
updatePerson: (people, args, db) => {
let { id, personAttributes } = args;
return [ people.update(id, personAttributes) ];
}
},
/*
argsMap is used if you need to map arguments defined in your GraphQL
queries to something other than the corresponding field name on the
Mirage record. The value you specify in the map can be a string or a
function.
The addon uses the arguments to filter records of the given
type from Mirage's database.
String values will be used to map argument names to field names
in case the argument name differs.
Function values will be used to filter records. The function
will be passed an array of records, the argument name (key)
and the argument value.
*/
argsMap: {
Person: { // arguments are mapped on a per-type basis
pageSize: (records, _, pageSize) => records.slice(0, pageSize)
}
}
}
Any contributors are most welcome!
Please file issues, as appropriate. Feature requests would be nice in the form of use cases. Knowing how you are using GraphQL should help contributors make the addon more capable.
PRs are also welcome, provided they relate to an issue or add functionality for a certain use case, and should generally follow the same coding style as the rest of the addon.
See the Contributing guide for details.
v0.2.0 (November 9th, 2019)
FAQs
A library for mocking GraphQL with Ember CLI Mirage
The npm package ember-cli-mirage-graphql receives a total of 8 weekly downloads. As such, ember-cli-mirage-graphql popularity was classified as not popular.
We found that ember-cli-mirage-graphql demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
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.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.
Security News
Research
Socket's threat research team has detected five malicious npm packages targeting Roblox developers, deploying malware to steal credentials and personal data.