1 | import { __assign } from "tslib";
|
2 | import { parse } from 'graphql';
|
3 | var docCache = new Map();
|
4 | var fragmentSourceMap = new Map();
|
5 | var printFragmentWarnings = true;
|
6 | var experimentalFragmentVariables = false;
|
7 | function normalize(string) {
|
8 | return string.replace(/[\s,]+/g, ' ').trim();
|
9 | }
|
10 | function cacheKeyFromLoc(loc) {
|
11 | return normalize(loc.source.body.substring(loc.start, loc.end));
|
12 | }
|
13 | function 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 | }
|
43 | function 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 | }
|
62 | function 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 | }
|
75 | export 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 | }
|
95 | export function resetCaches() {
|
96 | docCache.clear();
|
97 | fragmentSourceMap.clear();
|
98 | }
|
99 | export function disableFragmentWarnings() {
|
100 | printFragmentWarnings = false;
|
101 | }
|
102 | export function enableExperimentalFragmentVariables() {
|
103 | experimentalFragmentVariables = true;
|
104 | }
|
105 | export function disableExperimentalFragmentVariables() {
|
106 | experimentalFragmentVariables = false;
|
107 | }
|
108 | var 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 = {}));
|
118 | gql["default"] = gql;
|
119 | export default gql;
|
120 |
|
\ | No newline at end of file |