You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
3.3 KiB
89 lines
3.3 KiB
4 months ago
|
import { invariant, newInvariantError } from "../globals/index.js";
|
||
|
import { valueToObjectRepresentation } from "./storeUtils.js";
|
||
|
// Checks the document for errors and throws an exception if there is an error.
|
||
|
export function checkDocument(doc) {
|
||
|
invariant(doc && doc.kind === "Document", 74);
|
||
|
var operations = doc.definitions
|
||
|
.filter(function (d) { return d.kind !== "FragmentDefinition"; })
|
||
|
.map(function (definition) {
|
||
|
if (definition.kind !== "OperationDefinition") {
|
||
|
throw newInvariantError(75, definition.kind);
|
||
|
}
|
||
|
return definition;
|
||
|
});
|
||
|
invariant(operations.length <= 1, 76, operations.length);
|
||
|
return doc;
|
||
|
}
|
||
|
export function getOperationDefinition(doc) {
|
||
|
checkDocument(doc);
|
||
|
return doc.definitions.filter(function (definition) {
|
||
|
return definition.kind === "OperationDefinition";
|
||
|
})[0];
|
||
|
}
|
||
|
export function getOperationName(doc) {
|
||
|
return (doc.definitions
|
||
|
.filter(function (definition) {
|
||
|
return definition.kind === "OperationDefinition" && !!definition.name;
|
||
|
})
|
||
|
.map(function (x) { return x.name.value; })[0] || null);
|
||
|
}
|
||
|
// Returns the FragmentDefinitions from a particular document as an array
|
||
|
export function getFragmentDefinitions(doc) {
|
||
|
return doc.definitions.filter(function (definition) {
|
||
|
return definition.kind === "FragmentDefinition";
|
||
|
});
|
||
|
}
|
||
|
export function getQueryDefinition(doc) {
|
||
|
var queryDef = getOperationDefinition(doc);
|
||
|
invariant(queryDef && queryDef.operation === "query", 77);
|
||
|
return queryDef;
|
||
|
}
|
||
|
export function getFragmentDefinition(doc) {
|
||
|
invariant(doc.kind === "Document", 78);
|
||
|
invariant(doc.definitions.length <= 1, 79);
|
||
|
var fragmentDef = doc.definitions[0];
|
||
|
invariant(fragmentDef.kind === "FragmentDefinition", 80);
|
||
|
return fragmentDef;
|
||
|
}
|
||
|
/**
|
||
|
* Returns the first operation definition found in this document.
|
||
|
* If no operation definition is found, the first fragment definition will be returned.
|
||
|
* If no definitions are found, an error will be thrown.
|
||
|
*/
|
||
|
export function getMainDefinition(queryDoc) {
|
||
|
checkDocument(queryDoc);
|
||
|
var fragmentDefinition;
|
||
|
for (var _i = 0, _a = queryDoc.definitions; _i < _a.length; _i++) {
|
||
|
var definition = _a[_i];
|
||
|
if (definition.kind === "OperationDefinition") {
|
||
|
var operation = definition.operation;
|
||
|
if (operation === "query" ||
|
||
|
operation === "mutation" ||
|
||
|
operation === "subscription") {
|
||
|
return definition;
|
||
|
}
|
||
|
}
|
||
|
if (definition.kind === "FragmentDefinition" && !fragmentDefinition) {
|
||
|
// we do this because we want to allow multiple fragment definitions
|
||
|
// to precede an operation definition.
|
||
|
fragmentDefinition = definition;
|
||
|
}
|
||
|
}
|
||
|
if (fragmentDefinition) {
|
||
|
return fragmentDefinition;
|
||
|
}
|
||
|
throw newInvariantError(81);
|
||
|
}
|
||
|
export function getDefaultValues(definition) {
|
||
|
var defaultValues = Object.create(null);
|
||
|
var defs = definition && definition.variableDefinitions;
|
||
|
if (defs && defs.length) {
|
||
|
defs.forEach(function (def) {
|
||
|
if (def.defaultValue) {
|
||
|
valueToObjectRepresentation(defaultValues, def.variable.name, def.defaultValue);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
return defaultValues;
|
||
|
}
|
||
|
//# sourceMappingURL=getFromAST.js.map
|