UNPKG

4.31 kBJavaScriptView Raw
1import { __assign } from "tslib";
2import { parse } from 'graphql';
3var docCache = new Map();
4var fragmentSourceMap = new Map();
5var printFragmentWarnings = true;
6var experimentalFragmentVariables = false;
7function normalize(string) {
8 return string.replace(/[\s,]+/g, ' ').trim();
9}
10function cacheKeyFromLoc(loc) {
11 return normalize(loc.source.body.substring(loc.start, loc.end));
12}
13function processFragments(ast) {
14 var seenKeys = new Set();
15 var definitions = [];
16 ast.definitions.forEach(function (fragmentDefinition) {
17 if (fragmentDefinition.kind === 'FragmentDefinition') {
18 var fragmentName = fragmentDefinition.name.value;
19 var sourceKey = cacheKeyFromLoc(fragmentDefinition.loc);
20 var sourceKeySet = fragmentSourceMap.get(fragmentName);
21 if (sourceKeySet && !sourceKeySet.has(sourceKey)) {
22 if (printFragmentWarnings) {
23 console.warn("Warning: fragment with name " + fragmentName + " already exists.\n"
24 + "graphql-tag enforces all fragment names across your application to be unique; read more about\n"
25 + "this in the docs: http://dev.apollodata.com/core/fragments.html#unique-names");
26 }
27 }
28 else if (!sourceKeySet) {
29 fragmentSourceMap.set(fragmentName, sourceKeySet = new Set);
30 }
31 sourceKeySet.add(sourceKey);
32 if (!seenKeys.has(sourceKey)) {
33 seenKeys.add(sourceKey);
34 definitions.push(fragmentDefinition);
35 }
36 }
37 else {
38 definitions.push(fragmentDefinition);
39 }
40 });
41 return __assign(__assign({}, ast), { definitions: definitions });
42}
43function stripLoc(doc) {
44 var workSet = new Set(doc.definitions);
45 workSet.forEach(function (node) {
46 if (node.loc)
47 delete node.loc;
48 Object.keys(node).forEach(function (key) {
49 var value = node[key];
50 if (value && typeof value === 'object') {
51 workSet.add(value);
52 }
53 });
54 });
55 var loc = doc.loc;
56 if (loc) {
57 delete loc.startToken;
58 delete loc.endToken;
59 }
60 return doc;
61}
62function parseDocument(source) {
63 var cacheKey = normalize(source);
64 if (!docCache.has(cacheKey)) {
65 var parsed = parse(source, {
66 experimentalFragmentVariables: experimentalFragmentVariables
67 });
68 if (!parsed || parsed.kind !== 'Document') {
69 throw new Error('Not a valid GraphQL document.');
70 }
71 docCache.set(cacheKey, stripLoc(processFragments(parsed)));
72 }
73 return docCache.get(cacheKey);
74}
75export function gql(literals) {
76 var args = [];
77 for (var _i = 1; _i < arguments.length; _i++) {
78 args[_i - 1] = arguments[_i];
79 }
80 if (typeof literals === 'string') {
81 literals = [literals];
82 }
83 var result = literals[0];
84 args.forEach(function (arg, i) {
85 if (arg && arg.kind === 'Document') {
86 result += arg.loc.source.body;
87 }
88 else {
89 result += arg;
90 }
91 result += literals[i + 1];
92 });
93 return parseDocument(result);
94}
95export function resetCaches() {
96 docCache.clear();
97 fragmentSourceMap.clear();
98}
99export function disableFragmentWarnings() {
100 printFragmentWarnings = false;
101}
102export function enableExperimentalFragmentVariables() {
103 experimentalFragmentVariables = true;
104}
105export function disableExperimentalFragmentVariables() {
106 experimentalFragmentVariables = false;
107}
108var extras = {
109 gql: gql,
110 resetCaches: resetCaches,
111 disableFragmentWarnings: disableFragmentWarnings,
112 enableExperimentalFragmentVariables: enableExperimentalFragmentVariables,
113 disableExperimentalFragmentVariables: disableExperimentalFragmentVariables
114};
115(function (gql_1) {
116 gql_1.gql = extras.gql, gql_1.resetCaches = extras.resetCaches, gql_1.disableFragmentWarnings = extras.disableFragmentWarnings, gql_1.enableExperimentalFragmentVariables = extras.enableExperimentalFragmentVariables, gql_1.disableExperimentalFragmentVariables = extras.disableExperimentalFragmentVariables;
117})(gql || (gql = {}));
118gql["default"] = gql;
119export default gql;
120//# sourceMappingURL=index.js.map
\No newline at end of file