mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-09-20 06:58:39 +03:00
This commit is contained in:
parent
116d04f7fe
commit
65e568e6dd
@ -10,6 +10,7 @@
|
||||
- server: support only a bounded plan cache, with a default size of 4000 (closes #5363)
|
||||
- server: add logs for action handlers
|
||||
- server: add request/response sizes in event triggers (and scheduled trigger) logs
|
||||
- console: handle nested fragments in allowed queries (close #5137) (#5252)
|
||||
- console: update sidebar icons for different action and trigger types (#5445)
|
||||
- console: make add column UX consistent with others (#5486)
|
||||
|
||||
|
@ -14,22 +14,25 @@ export const readFile = (file, callback) => {
|
||||
reader.readAsText(file);
|
||||
};
|
||||
|
||||
const getQueryFragments = queryDef => {
|
||||
const fragments = [];
|
||||
|
||||
function recurQueryDef(queryDef, fragments, definitionHash) {
|
||||
visit(queryDef, {
|
||||
FragmentSpread(node) {
|
||||
fragments.push(node.name.value);
|
||||
fragments.add(node.name.value);
|
||||
recurQueryDef(definitionHash[node.name.value], fragments, definitionHash);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
return fragments;
|
||||
const getQueryFragments = (queryDef, definitionHash = {}) => {
|
||||
const fragments = new Set();
|
||||
recurQueryDef(queryDef, fragments, definitionHash);
|
||||
return [...fragments];
|
||||
};
|
||||
|
||||
const getQueryString = (queryDef, fragmentDefs) => {
|
||||
const getQueryString = (queryDef, fragmentDefs, definitionHash = {}) => {
|
||||
let queryString = print(queryDef);
|
||||
|
||||
const queryFragments = getQueryFragments(queryDef);
|
||||
const queryFragments = getQueryFragments(queryDef, definitionHash);
|
||||
|
||||
queryFragments.forEach(qf => {
|
||||
const fragmentDef = fragmentDefs.find(fd => fd.name.value === qf);
|
||||
@ -53,6 +56,14 @@ export const parseQueryString = queryString => {
|
||||
throw new Error('Parsing operation failed');
|
||||
}
|
||||
|
||||
const definitionHash = (parsedQueryString.definitions || []).reduce(
|
||||
(defObj, queryObj) => {
|
||||
defObj[queryObj.name.value] = queryObj;
|
||||
return defObj;
|
||||
},
|
||||
{}
|
||||
);
|
||||
|
||||
const queryDefs = parsedQueryString.definitions.filter(
|
||||
def => def.kind === 'OperationDefinition'
|
||||
);
|
||||
@ -68,7 +79,7 @@ export const parseQueryString = queryString => {
|
||||
|
||||
const query = {
|
||||
name: queryDef.name.value,
|
||||
query: getQueryString(queryDef, fragmentDefs),
|
||||
query: getQueryString(queryDef, fragmentDefs, definitionHash),
|
||||
};
|
||||
|
||||
queries.push(query);
|
||||
|
Loading…
Reference in New Issue
Block a user