Comments (2)
Here's my hack to make deletions possible: wellth-app@886e8f3
from graffiti-mongoose.
... and then I made this middleware that I can drop into my Koa stack to grab null variables from things that look like mutations and add their paths to the deletions
argument:
function getPathsToNull(tree, parentPath) {
const nullPaths = [];
for (const key in tree) {
if (tree[key] === null) {
// add to null paths
nullPaths.push(
parentPath ?
[parentPath, key].join('.') :
key
);
} else if (tree[key] instanceof Object) {
// descend
nullPaths.push.apply(nullPaths, getPathsToNull(
tree[key],
parentPath ?
[parentPath, key].join('.') :
key
));
}
}
return nullPaths;
}
function * handleNullVariables(next) {
const body = this.request.body;
const { query, variables } = Object.assign({}, body, this.query);
// TODO: properly parse the full query AST to determine if actually an add/update mutation
if (query && /mutation[\s\S]*{\s*(update|add)[a-zA-Z_]+\s*\(/i.test(query)) {
const parsedVariables = (typeof variables === 'string' && variables.length > 0) ?
JSON.parse(variables) : variables;
for (const key in parsedVariables) {
if ({}.hasOwnProperty.call(parsedVariables, key)) {
const deletions = getPathsToNull(parsedVariables[key]);
if (deletions && parsedVariables[key] !== null) {
parsedVariables[key].deletions = deletions;
}
}
}
const correctedVariables = JSON.stringify(parsedVariables);
// set both GET and POST vars
this.request.body.variables = correctedVariables;
this.query.variables = correctedVariables;
}
yield next;
}
export default handleNullVariables;
from graffiti-mongoose.
Related Issues (20)
- Implicit dependency on babel-polyfill HOT 9
- How to make a custom field: id? HOT 10
- "TypeError: Cannot read property 'forEach' of undefined" when embedded object field is a reference HOT 6
- Custom query thunk - accepts only InputObject types HOT 3
- Question on customQueries HOT 7
- Example project doesnt work with [email protected] and [email protected] HOT 1
- Async hook support HOT 2
- How to use Express Middleware for Authentication/Authorization. HOT 4
- Get specific field validation error?
- How to mutate nested Schema? HOT 3
- What is different between id and _id HOT 1
- UNMET PEER DEPENDENCY HOT 1
- Maintainer Volunteer Thread HOT 1
- Mongoose ObjectId and GraphQL id is not the same. How to link them? HOT 5
- It is possible to add some description to schema and to be reflected in the docs?
- Does graffiti-mongoose works with react-apollo ? HOT 2
- Custom mutations?
- Custom queries/mutations HOT 1
- setTypeFields bug
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from graffiti-mongoose.