@contember/graphql-builder 1.3.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/development/GraphQlQueryPrinter.cjs +139 -0
  2. package/dist/development/GraphQlQueryPrinter.cjs.map +1 -0
  3. package/dist/development/GraphQlQueryPrinter.js +139 -0
  4. package/dist/development/GraphQlQueryPrinter.js.map +1 -0
  5. package/dist/development/index.cjs +13 -0
  6. package/dist/development/index.cjs.map +1 -0
  7. package/dist/development/index.js +13 -0
  8. package/dist/development/index.js.map +1 -0
  9. package/dist/development/nodes/GraphQlField.cjs +12 -0
  10. package/dist/development/nodes/GraphQlField.cjs.map +1 -0
  11. package/dist/development/nodes/GraphQlField.js +12 -0
  12. package/dist/development/nodes/GraphQlField.js.map +1 -0
  13. package/dist/development/nodes/GraphQlFragment.cjs +11 -0
  14. package/dist/development/nodes/GraphQlFragment.cjs.map +1 -0
  15. package/dist/development/nodes/GraphQlFragment.js +11 -0
  16. package/dist/development/nodes/GraphQlFragment.js.map +1 -0
  17. package/dist/development/nodes/GraphQlFragmentSpread.cjs +9 -0
  18. package/dist/development/nodes/GraphQlFragmentSpread.cjs.map +1 -0
  19. package/dist/development/nodes/GraphQlFragmentSpread.js +9 -0
  20. package/dist/development/nodes/GraphQlFragmentSpread.js.map +1 -0
  21. package/dist/development/nodes/GraphQlInlineFragment.cjs +10 -0
  22. package/dist/development/nodes/GraphQlInlineFragment.cjs.map +1 -0
  23. package/dist/development/nodes/GraphQlInlineFragment.js +10 -0
  24. package/dist/development/nodes/GraphQlInlineFragment.js.map +1 -0
  25. package/dist/production/GraphQlQueryPrinter.cjs +139 -0
  26. package/dist/production/GraphQlQueryPrinter.cjs.map +1 -0
  27. package/dist/production/GraphQlQueryPrinter.js +139 -0
  28. package/dist/production/GraphQlQueryPrinter.js.map +1 -0
  29. package/dist/production/index.cjs +13 -0
  30. package/dist/production/index.cjs.map +1 -0
  31. package/dist/production/index.js +13 -0
  32. package/dist/production/index.js.map +1 -0
  33. package/dist/production/nodes/GraphQlField.cjs +12 -0
  34. package/dist/production/nodes/GraphQlField.cjs.map +1 -0
  35. package/dist/production/nodes/GraphQlField.js +12 -0
  36. package/dist/production/nodes/GraphQlField.js.map +1 -0
  37. package/dist/production/nodes/GraphQlFragment.cjs +11 -0
  38. package/dist/production/nodes/GraphQlFragment.cjs.map +1 -0
  39. package/dist/production/nodes/GraphQlFragment.js +11 -0
  40. package/dist/production/nodes/GraphQlFragment.js.map +1 -0
  41. package/dist/production/nodes/GraphQlFragmentSpread.cjs +9 -0
  42. package/dist/production/nodes/GraphQlFragmentSpread.cjs.map +1 -0
  43. package/dist/production/nodes/GraphQlFragmentSpread.js +9 -0
  44. package/dist/production/nodes/GraphQlFragmentSpread.js.map +1 -0
  45. package/dist/production/nodes/GraphQlInlineFragment.cjs +10 -0
  46. package/dist/production/nodes/GraphQlInlineFragment.cjs.map +1 -0
  47. package/dist/production/nodes/GraphQlInlineFragment.js +10 -0
  48. package/dist/production/nodes/GraphQlInlineFragment.js.map +1 -0
  49. package/dist/types/GraphQlQueryPrinter.d.ts +23 -0
  50. package/dist/types/GraphQlQueryPrinter.d.ts.map +1 -0
  51. package/dist/types/index.d.ts +3 -0
  52. package/dist/types/index.d.ts.map +1 -0
  53. package/dist/types/nodes/GraphQlField.d.ts +17 -0
  54. package/dist/types/nodes/GraphQlField.d.ts.map +1 -0
  55. package/dist/types/nodes/GraphQlFragment.d.ts +8 -0
  56. package/dist/types/nodes/GraphQlFragment.d.ts.map +1 -0
  57. package/dist/types/nodes/GraphQlFragmentSpread.d.ts +5 -0
  58. package/dist/types/nodes/GraphQlFragmentSpread.d.ts.map +1 -0
  59. package/dist/types/nodes/GraphQlInlineFragment.d.ts +7 -0
  60. package/dist/types/nodes/GraphQlInlineFragment.d.ts.map +1 -0
  61. package/dist/types/nodes/index.d.ts +5 -0
  62. package/dist/types/nodes/index.d.ts.map +1 -0
  63. package/dist/types/tsconfig.tsbuildinfo +1 -0
  64. package/package.json +46 -0
  65. package/src/GraphQlQueryPrinter.ts +146 -0
  66. package/src/index.ts +2 -0
  67. package/src/nodes/GraphQlField.ts +22 -0
  68. package/src/nodes/GraphQlFragment.ts +10 -0
  69. package/src/nodes/GraphQlFragmentSpread.ts +6 -0
  70. package/src/nodes/GraphQlInlineFragment.ts +9 -0
  71. package/src/nodes/index.ts +4 -0
  72. package/src/tsconfig.json +6 -0
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __publicField = (obj, key, value) => {
5
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
+ return value;
7
+ };
8
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
9
+ const GraphQlField = require("./nodes/GraphQlField.cjs");
10
+ const GraphQlFragmentSpread = require("./nodes/GraphQlFragmentSpread.cjs");
11
+ const GraphQlInlineFragment = require("./nodes/GraphQlInlineFragment.cjs");
12
+ class GraphQlQueryPrinter {
13
+ constructor() {
14
+ __publicField(this, "indentString", " ");
15
+ __publicField(this, "variableCounter", 0);
16
+ __publicField(this, "variables", {});
17
+ __publicField(this, "variableValueToName", {});
18
+ __publicField(this, "usedFragments", /* @__PURE__ */ new Set());
19
+ __publicField(this, "body", "");
20
+ }
21
+ printDocument(operation, select, fragments) {
22
+ this.cleanState();
23
+ this.processSelectionSet(select, 1);
24
+ const body = this.body;
25
+ this.body = "";
26
+ this.processUsedFragments(fragments);
27
+ const fragmentsStr = this.body;
28
+ const variablesString = this.printVariables();
29
+ const query = `${operation}${variablesString} {
30
+ ${body}}${fragmentsStr}
31
+ `;
32
+ return {
33
+ query,
34
+ variables: Object.fromEntries(Object.entries(this.variables).map(([key, value]) => [key, value.value]))
35
+ };
36
+ }
37
+ processUsedFragments(fragments) {
38
+ const printed = /* @__PURE__ */ new Set();
39
+ while (this.usedFragments.size > 0) {
40
+ const fragmentName = this.usedFragments.values().next().value;
41
+ this.usedFragments.delete(fragmentName);
42
+ if (printed.has(fragmentName)) {
43
+ continue;
44
+ }
45
+ printed.add(fragmentName);
46
+ if (!fragments[fragmentName]) {
47
+ throw new Error(`Unknown fragment ${fragmentName}`);
48
+ }
49
+ this.processFragment(fragments[fragmentName]);
50
+ }
51
+ }
52
+ processFragment(fragment) {
53
+ this.body += `
54
+ fragment ${fragment.name} on ${fragment.type} {
55
+ `;
56
+ this.processSelectionSet(fragment.selectionSet, 1);
57
+ this.body += "}";
58
+ }
59
+ printVariables() {
60
+ let variablesString = "";
61
+ let i = 0;
62
+ for (const [variableName, variable] of Object.entries(this.variables)) {
63
+ if (i++ === 0) {
64
+ variablesString += "(";
65
+ } else {
66
+ variablesString += ", ";
67
+ }
68
+ variablesString += `$${variableName}: ${variable.type}`;
69
+ }
70
+ if (i > 0) {
71
+ variablesString += ")";
72
+ }
73
+ return variablesString;
74
+ }
75
+ processSelectionSet(selectionSet, indent) {
76
+ for (const node of selectionSet) {
77
+ if (node instanceof GraphQlField.GraphQlField) {
78
+ this.processField(node, indent);
79
+ } else if (node instanceof GraphQlFragmentSpread.GraphQlFragmentSpread) {
80
+ this.body += this.indentString.repeat(indent) + "... " + node.name + "\n";
81
+ this.usedFragments.add(node.name);
82
+ } else if (node instanceof GraphQlInlineFragment.GraphQlInlineFragment) {
83
+ this.body += this.indentString.repeat(indent) + "... on " + node.type + " {\n";
84
+ this.processSelectionSet(node.selectionSet, indent + 1);
85
+ this.body += this.indentString.repeat(indent) + "}\n";
86
+ }
87
+ }
88
+ }
89
+ processField(field, indent) {
90
+ const indentString = this.indentString.repeat(indent);
91
+ this.body += indentString + (field.alias && field.alias !== field.name ? field.alias + ": " + field.name : field.name);
92
+ let i = 0;
93
+ for (const [argName, arg] of Object.entries(field.args)) {
94
+ if (arg.value === void 0) {
95
+ continue;
96
+ }
97
+ const variableName = this.resolveVariableName(arg.graphQlType, arg.value);
98
+ if (i++ === 0) {
99
+ this.body += "(";
100
+ } else {
101
+ this.body += ", ";
102
+ }
103
+ this.body += `${argName}: $${variableName}`;
104
+ }
105
+ if (i > 0) {
106
+ this.body += ")";
107
+ }
108
+ if (field.selectionSet) {
109
+ this.body += " {\n";
110
+ this.processSelectionSet(field.selectionSet, indent + 1);
111
+ this.body += this.indentString.repeat(indent) + "}";
112
+ }
113
+ this.body += "\n";
114
+ }
115
+ resolveVariableName(graphQlType, value) {
116
+ const variableName = this.variableValueToName[graphQlType]?.get(value);
117
+ if (variableName) {
118
+ return variableName;
119
+ }
120
+ const newVariableName = `${graphQlType.replace(/[\W]/g, "")}_${this.variableCounter++}`;
121
+ this.variables[newVariableName] = {
122
+ type: graphQlType,
123
+ value
124
+ };
125
+ if (!this.variableValueToName[graphQlType]) {
126
+ this.variableValueToName[graphQlType] = /* @__PURE__ */ new Map();
127
+ }
128
+ this.variableValueToName[graphQlType].set(value, newVariableName);
129
+ return newVariableName;
130
+ }
131
+ cleanState() {
132
+ this.body = "";
133
+ this.variableCounter = 0;
134
+ this.variables = {};
135
+ this.usedFragments = /* @__PURE__ */ new Set();
136
+ }
137
+ }
138
+ exports.GraphQlQueryPrinter = GraphQlQueryPrinter;
139
+ //# sourceMappingURL=GraphQlQueryPrinter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphQlQueryPrinter.cjs","sources":["../../src/GraphQlQueryPrinter.ts"],"sourcesContent":["import { JSONValue } from '@contember/schema'\nimport { GraphQlField, GraphQlFragment, GraphQlFragmentSpread, GraphQlInlineFragment, GraphQlSelectionSet } from './nodes'\n\nexport type GraphQlPrintResult = { query: string; variables: Record<string, JSONValue> }\n\nexport class GraphQlQueryPrinter {\n\tprivate indentString = '\\t'\n\n\tprivate variableCounter = 0\n\tprivate variables: Record<string, {\n\t\ttype: string\n\t\tvalue: JSONValue\n\t}> = {}\n\n\tprivate variableValueToName: Record<string, Map<JSONValue, string>> = {}\n\n\tprivate usedFragments = new Set<string>()\n\n\tprivate body = ''\n\n\n\tpublic printDocument(\n\t\toperation: 'query' | 'mutation',\n\t\tselect: GraphQlSelectionSet,\n\t\tfragments: Record<string, GraphQlFragment>,\n\t): GraphQlPrintResult {\n\t\tthis.cleanState()\n\t\tthis.processSelectionSet(select, 1)\n\t\tconst body = this.body\n\t\tthis.body = ''\n\t\tthis.processUsedFragments(fragments)\n\t\tconst fragmentsStr = this.body\n\t\tconst variablesString = this.printVariables()\n\t\tconst query = `${operation}${variablesString} {\\n${body}}${fragmentsStr}\\n`\n\t\treturn {\n\t\t\tquery: query,\n\t\t\tvariables: Object.fromEntries(Object.entries(this.variables).map(([key, value]) => [key, value.value])),\n\t\t}\n\t}\n\n\n\tprivate processUsedFragments(fragments: Record<string, GraphQlFragment>): void {\n\t\tconst printed = new Set()\n\t\twhile (this.usedFragments.size > 0) {\n\t\t\tconst fragmentName = this.usedFragments.values().next().value\n\t\t\tthis.usedFragments.delete(fragmentName)\n\t\t\tif (printed.has(fragmentName)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprinted.add(fragmentName)\n\t\t\tif (!fragments[fragmentName]) {\n\t\t\t\tthrow new Error(`Unknown fragment ${fragmentName}`)\n\t\t\t}\n\t\t\tthis.processFragment(fragments[fragmentName])\n\t\t}\n\t}\n\n\tprivate processFragment(fragment: GraphQlFragment): void {\n\t\tthis.body += `\\nfragment ${fragment.name} on ${fragment.type} {\\n`\n\t\tthis.processSelectionSet(fragment.selectionSet, 1)\n\t\tthis.body += '}'\n\t}\n\n\tprivate printVariables(): string {\n\t\tlet variablesString = ''\n\t\tlet i = 0\n\t\tfor (const [variableName, variable] of Object.entries(this.variables)) {\n\t\t\tif (i++ === 0) {\n\t\t\t\tvariablesString += '('\n\t\t\t} else {\n\t\t\t\tvariablesString += ', '\n\t\t\t}\n\t\t\tvariablesString += `$${variableName}: ${variable.type}`\n\t\t}\n\t\tif (i > 0) {\n\t\t\tvariablesString += ')'\n\t\t}\n\t\treturn variablesString\n\t}\n\n\tprivate processSelectionSet(selectionSet: GraphQlSelectionSet, indent: number): void {\n\t\tfor (const node of selectionSet) {\n\t\t\tif (node instanceof GraphQlField) {\n\t\t\t\tthis.processField(node, indent)\n\t\t\t} else if (node instanceof GraphQlFragmentSpread) {\n\t\t\t\tthis.body += this.indentString.repeat(indent) + '... ' + node.name + '\\n'\n\t\t\t\tthis.usedFragments.add(node.name)\n\t\t\t} else if (node instanceof GraphQlInlineFragment) {\n\t\t\t\tthis.body += this.indentString.repeat(indent) + '... on ' + node.type + ' {\\n'\n\t\t\t\tthis.processSelectionSet(node.selectionSet, indent + 1)\n\t\t\t\tthis.body += this.indentString.repeat(indent) + '}\\n'\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate processField(field: GraphQlField, indent: number): void {\n\t\tconst indentString = this.indentString.repeat(indent)\n\t\tthis.body += indentString + (field.alias && field.alias !== field.name ? (field.alias + ': ' + field.name) : field.name)\n\t\tlet i = 0\n\t\tfor (const [argName, arg] of Object.entries(field.args)) {\n\t\t\tif (arg.value === undefined) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst variableName = this.resolveVariableName(arg.graphQlType, arg.value)\n\t\t\tif (i++ === 0) {\n\t\t\t\tthis.body += '('\n\t\t\t} else {\n\t\t\t\tthis.body += ', '\n\t\t\t}\n\t\t\tthis.body += `${argName}: $${variableName}`\n\t\t}\n\t\tif (i > 0) {\n\t\t\tthis.body += ')'\n\t\t}\n\t\tif (field.selectionSet) {\n\t\t\tthis.body += ' {\\n'\n\t\t\tthis.processSelectionSet(field.selectionSet, indent + 1)\n\t\t\tthis.body += this.indentString.repeat(indent) + '}'\n\t\t}\n\t\tthis.body += '\\n'\n\t}\n\n\tprivate resolveVariableName(graphQlType: string, value: JSONValue): string {\n\t\tconst variableName = this.variableValueToName[graphQlType]?.get(value)\n\t\tif (variableName) {\n\t\t\treturn variableName\n\t\t}\n\t\tconst newVariableName = `${graphQlType.replace(/[\\W]/g, '')}_${this.variableCounter++}`\n\t\tthis.variables[newVariableName] = {\n\t\t\ttype: graphQlType,\n\t\t\tvalue: value,\n\t\t}\n\t\tif (!this.variableValueToName[graphQlType]) {\n\t\t\tthis.variableValueToName[graphQlType] = new Map()\n\t\t}\n\t\tthis.variableValueToName[graphQlType].set(value, newVariableName)\n\t\treturn newVariableName\n\t}\n\n\tprivate cleanState(): void {\n\t\tthis.body = ''\n\t\tthis.variableCounter = 0\n\t\tthis.variables = {}\n\t\tthis.usedFragments = new Set<string>()\n\t}\n}\n"],"names":["GraphQlField","GraphQlFragmentSpread","GraphQlInlineFragment"],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => {
4
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+ return value;
6
+ };
7
+ import { GraphQlField } from "./nodes/GraphQlField.js";
8
+ import { GraphQlFragmentSpread } from "./nodes/GraphQlFragmentSpread.js";
9
+ import { GraphQlInlineFragment } from "./nodes/GraphQlInlineFragment.js";
10
+ class GraphQlQueryPrinter {
11
+ constructor() {
12
+ __publicField(this, "indentString", " ");
13
+ __publicField(this, "variableCounter", 0);
14
+ __publicField(this, "variables", {});
15
+ __publicField(this, "variableValueToName", {});
16
+ __publicField(this, "usedFragments", /* @__PURE__ */ new Set());
17
+ __publicField(this, "body", "");
18
+ }
19
+ printDocument(operation, select, fragments) {
20
+ this.cleanState();
21
+ this.processSelectionSet(select, 1);
22
+ const body = this.body;
23
+ this.body = "";
24
+ this.processUsedFragments(fragments);
25
+ const fragmentsStr = this.body;
26
+ const variablesString = this.printVariables();
27
+ const query = `${operation}${variablesString} {
28
+ ${body}}${fragmentsStr}
29
+ `;
30
+ return {
31
+ query,
32
+ variables: Object.fromEntries(Object.entries(this.variables).map(([key, value]) => [key, value.value]))
33
+ };
34
+ }
35
+ processUsedFragments(fragments) {
36
+ const printed = /* @__PURE__ */ new Set();
37
+ while (this.usedFragments.size > 0) {
38
+ const fragmentName = this.usedFragments.values().next().value;
39
+ this.usedFragments.delete(fragmentName);
40
+ if (printed.has(fragmentName)) {
41
+ continue;
42
+ }
43
+ printed.add(fragmentName);
44
+ if (!fragments[fragmentName]) {
45
+ throw new Error(`Unknown fragment ${fragmentName}`);
46
+ }
47
+ this.processFragment(fragments[fragmentName]);
48
+ }
49
+ }
50
+ processFragment(fragment) {
51
+ this.body += `
52
+ fragment ${fragment.name} on ${fragment.type} {
53
+ `;
54
+ this.processSelectionSet(fragment.selectionSet, 1);
55
+ this.body += "}";
56
+ }
57
+ printVariables() {
58
+ let variablesString = "";
59
+ let i = 0;
60
+ for (const [variableName, variable] of Object.entries(this.variables)) {
61
+ if (i++ === 0) {
62
+ variablesString += "(";
63
+ } else {
64
+ variablesString += ", ";
65
+ }
66
+ variablesString += `$${variableName}: ${variable.type}`;
67
+ }
68
+ if (i > 0) {
69
+ variablesString += ")";
70
+ }
71
+ return variablesString;
72
+ }
73
+ processSelectionSet(selectionSet, indent) {
74
+ for (const node of selectionSet) {
75
+ if (node instanceof GraphQlField) {
76
+ this.processField(node, indent);
77
+ } else if (node instanceof GraphQlFragmentSpread) {
78
+ this.body += this.indentString.repeat(indent) + "... " + node.name + "\n";
79
+ this.usedFragments.add(node.name);
80
+ } else if (node instanceof GraphQlInlineFragment) {
81
+ this.body += this.indentString.repeat(indent) + "... on " + node.type + " {\n";
82
+ this.processSelectionSet(node.selectionSet, indent + 1);
83
+ this.body += this.indentString.repeat(indent) + "}\n";
84
+ }
85
+ }
86
+ }
87
+ processField(field, indent) {
88
+ const indentString = this.indentString.repeat(indent);
89
+ this.body += indentString + (field.alias && field.alias !== field.name ? field.alias + ": " + field.name : field.name);
90
+ let i = 0;
91
+ for (const [argName, arg] of Object.entries(field.args)) {
92
+ if (arg.value === void 0) {
93
+ continue;
94
+ }
95
+ const variableName = this.resolveVariableName(arg.graphQlType, arg.value);
96
+ if (i++ === 0) {
97
+ this.body += "(";
98
+ } else {
99
+ this.body += ", ";
100
+ }
101
+ this.body += `${argName}: $${variableName}`;
102
+ }
103
+ if (i > 0) {
104
+ this.body += ")";
105
+ }
106
+ if (field.selectionSet) {
107
+ this.body += " {\n";
108
+ this.processSelectionSet(field.selectionSet, indent + 1);
109
+ this.body += this.indentString.repeat(indent) + "}";
110
+ }
111
+ this.body += "\n";
112
+ }
113
+ resolveVariableName(graphQlType, value) {
114
+ const variableName = this.variableValueToName[graphQlType]?.get(value);
115
+ if (variableName) {
116
+ return variableName;
117
+ }
118
+ const newVariableName = `${graphQlType.replace(/[\W]/g, "")}_${this.variableCounter++}`;
119
+ this.variables[newVariableName] = {
120
+ type: graphQlType,
121
+ value
122
+ };
123
+ if (!this.variableValueToName[graphQlType]) {
124
+ this.variableValueToName[graphQlType] = /* @__PURE__ */ new Map();
125
+ }
126
+ this.variableValueToName[graphQlType].set(value, newVariableName);
127
+ return newVariableName;
128
+ }
129
+ cleanState() {
130
+ this.body = "";
131
+ this.variableCounter = 0;
132
+ this.variables = {};
133
+ this.usedFragments = /* @__PURE__ */ new Set();
134
+ }
135
+ }
136
+ export {
137
+ GraphQlQueryPrinter
138
+ };
139
+ //# sourceMappingURL=GraphQlQueryPrinter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphQlQueryPrinter.js","sources":["../../src/GraphQlQueryPrinter.ts"],"sourcesContent":["import { JSONValue } from '@contember/schema'\nimport { GraphQlField, GraphQlFragment, GraphQlFragmentSpread, GraphQlInlineFragment, GraphQlSelectionSet } from './nodes'\n\nexport type GraphQlPrintResult = { query: string; variables: Record<string, JSONValue> }\n\nexport class GraphQlQueryPrinter {\n\tprivate indentString = '\\t'\n\n\tprivate variableCounter = 0\n\tprivate variables: Record<string, {\n\t\ttype: string\n\t\tvalue: JSONValue\n\t}> = {}\n\n\tprivate variableValueToName: Record<string, Map<JSONValue, string>> = {}\n\n\tprivate usedFragments = new Set<string>()\n\n\tprivate body = ''\n\n\n\tpublic printDocument(\n\t\toperation: 'query' | 'mutation',\n\t\tselect: GraphQlSelectionSet,\n\t\tfragments: Record<string, GraphQlFragment>,\n\t): GraphQlPrintResult {\n\t\tthis.cleanState()\n\t\tthis.processSelectionSet(select, 1)\n\t\tconst body = this.body\n\t\tthis.body = ''\n\t\tthis.processUsedFragments(fragments)\n\t\tconst fragmentsStr = this.body\n\t\tconst variablesString = this.printVariables()\n\t\tconst query = `${operation}${variablesString} {\\n${body}}${fragmentsStr}\\n`\n\t\treturn {\n\t\t\tquery: query,\n\t\t\tvariables: Object.fromEntries(Object.entries(this.variables).map(([key, value]) => [key, value.value])),\n\t\t}\n\t}\n\n\n\tprivate processUsedFragments(fragments: Record<string, GraphQlFragment>): void {\n\t\tconst printed = new Set()\n\t\twhile (this.usedFragments.size > 0) {\n\t\t\tconst fragmentName = this.usedFragments.values().next().value\n\t\t\tthis.usedFragments.delete(fragmentName)\n\t\t\tif (printed.has(fragmentName)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprinted.add(fragmentName)\n\t\t\tif (!fragments[fragmentName]) {\n\t\t\t\tthrow new Error(`Unknown fragment ${fragmentName}`)\n\t\t\t}\n\t\t\tthis.processFragment(fragments[fragmentName])\n\t\t}\n\t}\n\n\tprivate processFragment(fragment: GraphQlFragment): void {\n\t\tthis.body += `\\nfragment ${fragment.name} on ${fragment.type} {\\n`\n\t\tthis.processSelectionSet(fragment.selectionSet, 1)\n\t\tthis.body += '}'\n\t}\n\n\tprivate printVariables(): string {\n\t\tlet variablesString = ''\n\t\tlet i = 0\n\t\tfor (const [variableName, variable] of Object.entries(this.variables)) {\n\t\t\tif (i++ === 0) {\n\t\t\t\tvariablesString += '('\n\t\t\t} else {\n\t\t\t\tvariablesString += ', '\n\t\t\t}\n\t\t\tvariablesString += `$${variableName}: ${variable.type}`\n\t\t}\n\t\tif (i > 0) {\n\t\t\tvariablesString += ')'\n\t\t}\n\t\treturn variablesString\n\t}\n\n\tprivate processSelectionSet(selectionSet: GraphQlSelectionSet, indent: number): void {\n\t\tfor (const node of selectionSet) {\n\t\t\tif (node instanceof GraphQlField) {\n\t\t\t\tthis.processField(node, indent)\n\t\t\t} else if (node instanceof GraphQlFragmentSpread) {\n\t\t\t\tthis.body += this.indentString.repeat(indent) + '... ' + node.name + '\\n'\n\t\t\t\tthis.usedFragments.add(node.name)\n\t\t\t} else if (node instanceof GraphQlInlineFragment) {\n\t\t\t\tthis.body += this.indentString.repeat(indent) + '... on ' + node.type + ' {\\n'\n\t\t\t\tthis.processSelectionSet(node.selectionSet, indent + 1)\n\t\t\t\tthis.body += this.indentString.repeat(indent) + '}\\n'\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate processField(field: GraphQlField, indent: number): void {\n\t\tconst indentString = this.indentString.repeat(indent)\n\t\tthis.body += indentString + (field.alias && field.alias !== field.name ? (field.alias + ': ' + field.name) : field.name)\n\t\tlet i = 0\n\t\tfor (const [argName, arg] of Object.entries(field.args)) {\n\t\t\tif (arg.value === undefined) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst variableName = this.resolveVariableName(arg.graphQlType, arg.value)\n\t\t\tif (i++ === 0) {\n\t\t\t\tthis.body += '('\n\t\t\t} else {\n\t\t\t\tthis.body += ', '\n\t\t\t}\n\t\t\tthis.body += `${argName}: $${variableName}`\n\t\t}\n\t\tif (i > 0) {\n\t\t\tthis.body += ')'\n\t\t}\n\t\tif (field.selectionSet) {\n\t\t\tthis.body += ' {\\n'\n\t\t\tthis.processSelectionSet(field.selectionSet, indent + 1)\n\t\t\tthis.body += this.indentString.repeat(indent) + '}'\n\t\t}\n\t\tthis.body += '\\n'\n\t}\n\n\tprivate resolveVariableName(graphQlType: string, value: JSONValue): string {\n\t\tconst variableName = this.variableValueToName[graphQlType]?.get(value)\n\t\tif (variableName) {\n\t\t\treturn variableName\n\t\t}\n\t\tconst newVariableName = `${graphQlType.replace(/[\\W]/g, '')}_${this.variableCounter++}`\n\t\tthis.variables[newVariableName] = {\n\t\t\ttype: graphQlType,\n\t\t\tvalue: value,\n\t\t}\n\t\tif (!this.variableValueToName[graphQlType]) {\n\t\t\tthis.variableValueToName[graphQlType] = new Map()\n\t\t}\n\t\tthis.variableValueToName[graphQlType].set(value, newVariableName)\n\t\treturn newVariableName\n\t}\n\n\tprivate cleanState(): void {\n\t\tthis.body = ''\n\t\tthis.variableCounter = 0\n\t\tthis.variables = {}\n\t\tthis.usedFragments = new Set<string>()\n\t}\n}\n"],"names":[],"mappings":";;;;;;;;;AAKO,MAAM,oBAAoB;AAAA,EAA1B;AACE,wCAAe;AAEf,2CAAkB;AAClB,qCAGH,CAAA;AAEG,+CAA8D,CAAA;AAE9D,6DAAoB;AAEpB,gCAAO;AAAA;AAAA,EAGR,cACN,WACA,QACA,WACqB;AACrB,SAAK,WAAW;AACX,SAAA,oBAAoB,QAAQ,CAAC;AAClC,UAAM,OAAO,KAAK;AAClB,SAAK,OAAO;AACZ,SAAK,qBAAqB,SAAS;AACnC,UAAM,eAAe,KAAK;AACpB,UAAA,kBAAkB,KAAK;AAC7B,UAAM,QAAQ,GAAG,SAAS,GAAG,eAAe;AAAA,EAAO,IAAI,IAAI,YAAY;AAAA;AAChE,WAAA;AAAA,MACN;AAAA,MACA,WAAW,OAAO,YAAY,OAAO,QAAQ,KAAK,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,MAAM,KAAK,CAAC,CAAC;AAAA,IAAA;AAAA,EAExG;AAAA,EAGQ,qBAAqB,WAAkD;AACxE,UAAA,8BAAc;AACb,WAAA,KAAK,cAAc,OAAO,GAAG;AACnC,YAAM,eAAe,KAAK,cAAc,OAAO,EAAE,KAAO,EAAA;AACnD,WAAA,cAAc,OAAO,YAAY;AAClC,UAAA,QAAQ,IAAI,YAAY,GAAG;AAC9B;AAAA,MACD;AACA,cAAQ,IAAI,YAAY;AACpB,UAAA,CAAC,UAAU,YAAY,GAAG;AAC7B,cAAM,IAAI,MAAM,oBAAoB,YAAY,EAAE;AAAA,MACnD;AACK,WAAA,gBAAgB,UAAU,YAAY,CAAC;AAAA,IAC7C;AAAA,EACD;AAAA,EAEQ,gBAAgB,UAAiC;AACxD,SAAK,QAAQ;AAAA,WAAc,SAAS,IAAI,OAAO,SAAS,IAAI;AAAA;AACvD,SAAA,oBAAoB,SAAS,cAAc,CAAC;AACjD,SAAK,QAAQ;AAAA,EACd;AAAA,EAEQ,iBAAyB;AAChC,QAAI,kBAAkB;AACtB,QAAI,IAAI;AACG,eAAA,CAAC,cAAc,QAAQ,KAAK,OAAO,QAAQ,KAAK,SAAS,GAAG;AACtE,UAAI,QAAQ,GAAG;AACK,2BAAA;AAAA,MAAA,OACb;AACa,2BAAA;AAAA,MACpB;AACA,yBAAmB,IAAI,YAAY,KAAK,SAAS,IAAI;AAAA,IACtD;AACA,QAAI,IAAI,GAAG;AACS,yBAAA;AAAA,IACpB;AACO,WAAA;AAAA,EACR;AAAA,EAEQ,oBAAoB,cAAmC,QAAsB;AACpF,eAAW,QAAQ,cAAc;AAChC,UAAI,gBAAgB,cAAc;AAC5B,aAAA,aAAa,MAAM,MAAM;AAAA,MAAA,WACpB,gBAAgB,uBAAuB;AAC5C,aAAA,QAAQ,KAAK,aAAa,OAAO,MAAM,IAAI,SAAS,KAAK,OAAO;AAChE,aAAA,cAAc,IAAI,KAAK,IAAI;AAAA,MAAA,WACtB,gBAAgB,uBAAuB;AAC5C,aAAA,QAAQ,KAAK,aAAa,OAAO,MAAM,IAAI,YAAY,KAAK,OAAO;AACxE,aAAK,oBAAoB,KAAK,cAAc,SAAS,CAAC;AACtD,aAAK,QAAQ,KAAK,aAAa,OAAO,MAAM,IAAI;AAAA,MACjD;AAAA,IACD;AAAA,EACD;AAAA,EAEQ,aAAa,OAAqB,QAAsB;AAC/D,UAAM,eAAe,KAAK,aAAa,OAAO,MAAM;AACpD,SAAK,QAAQ,gBAAgB,MAAM,SAAS,MAAM,UAAU,MAAM,OAAQ,MAAM,QAAQ,OAAO,MAAM,OAAQ,MAAM;AACnH,QAAI,IAAI;AACG,eAAA,CAAC,SAAS,GAAG,KAAK,OAAO,QAAQ,MAAM,IAAI,GAAG;AACpD,UAAA,IAAI,UAAU,QAAW;AAC5B;AAAA,MACD;AACA,YAAM,eAAe,KAAK,oBAAoB,IAAI,aAAa,IAAI,KAAK;AACxE,UAAI,QAAQ,GAAG;AACd,aAAK,QAAQ;AAAA,MAAA,OACP;AACN,aAAK,QAAQ;AAAA,MACd;AACA,WAAK,QAAQ,GAAG,OAAO,MAAM,YAAY;AAAA,IAC1C;AACA,QAAI,IAAI,GAAG;AACV,WAAK,QAAQ;AAAA,IACd;AACA,QAAI,MAAM,cAAc;AACvB,WAAK,QAAQ;AACb,WAAK,oBAAoB,MAAM,cAAc,SAAS,CAAC;AACvD,WAAK,QAAQ,KAAK,aAAa,OAAO,MAAM,IAAI;AAAA,IACjD;AACA,SAAK,QAAQ;AAAA,EACd;AAAA,EAEQ,oBAAoB,aAAqB,OAA0B;AAC1E,UAAM,eAAe,KAAK,oBAAoB,WAAW,GAAG,IAAI,KAAK;AACrE,QAAI,cAAc;AACV,aAAA;AAAA,IACR;AACM,UAAA,kBAAkB,GAAG,YAAY,QAAQ,SAAS,EAAE,CAAC,IAAI,KAAK,iBAAiB;AAChF,SAAA,UAAU,eAAe,IAAI;AAAA,MACjC,MAAM;AAAA,MACN;AAAA,IAAA;AAED,QAAI,CAAC,KAAK,oBAAoB,WAAW,GAAG;AAC3C,WAAK,oBAAoB,WAAW,IAAI,oBAAI,IAAI;AAAA,IACjD;AACA,SAAK,oBAAoB,WAAW,EAAE,IAAI,OAAO,eAAe;AACzD,WAAA;AAAA,EACR;AAAA,EAEQ,aAAmB;AAC1B,SAAK,OAAO;AACZ,SAAK,kBAAkB;AACvB,SAAK,YAAY;AACZ,SAAA,oCAAoB;EAC1B;AACD;"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const GraphQlQueryPrinter = require("./GraphQlQueryPrinter.cjs");
4
+ const GraphQlField = require("./nodes/GraphQlField.cjs");
5
+ const GraphQlFragmentSpread = require("./nodes/GraphQlFragmentSpread.cjs");
6
+ const GraphQlFragment = require("./nodes/GraphQlFragment.cjs");
7
+ const GraphQlInlineFragment = require("./nodes/GraphQlInlineFragment.cjs");
8
+ exports.GraphQlQueryPrinter = GraphQlQueryPrinter.GraphQlQueryPrinter;
9
+ exports.GraphQlField = GraphQlField.GraphQlField;
10
+ exports.GraphQlFragmentSpread = GraphQlFragmentSpread.GraphQlFragmentSpread;
11
+ exports.GraphQlFragment = GraphQlFragment.GraphQlFragment;
12
+ exports.GraphQlInlineFragment = GraphQlInlineFragment.GraphQlInlineFragment;
13
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
@@ -0,0 +1,13 @@
1
+ import { GraphQlQueryPrinter } from "./GraphQlQueryPrinter.js";
2
+ import { GraphQlField } from "./nodes/GraphQlField.js";
3
+ import { GraphQlFragmentSpread } from "./nodes/GraphQlFragmentSpread.js";
4
+ import { GraphQlFragment } from "./nodes/GraphQlFragment.js";
5
+ import { GraphQlInlineFragment } from "./nodes/GraphQlInlineFragment.js";
6
+ export {
7
+ GraphQlField,
8
+ GraphQlFragment,
9
+ GraphQlFragmentSpread,
10
+ GraphQlInlineFragment,
11
+ GraphQlQueryPrinter
12
+ };
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ class GraphQlField {
4
+ constructor(alias, name, args = {}, selectionSet) {
5
+ this.alias = alias;
6
+ this.name = name;
7
+ this.args = args;
8
+ this.selectionSet = selectionSet;
9
+ }
10
+ }
11
+ exports.GraphQlField = GraphQlField;
12
+ //# sourceMappingURL=GraphQlField.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphQlField.cjs","sources":["../../../src/nodes/GraphQlField.ts"],"sourcesContent":["import { GraphQlFragmentSpread } from './GraphQlFragmentSpread'\nimport { GraphQlInlineFragment } from './GraphQlInlineFragment'\nimport { JSONValue } from '@contember/schema'\n\nexport class GraphQlField {\n\tconstructor(\n\t\tpublic readonly alias: string | null,\n\t\tpublic readonly name: string,\n\t\tpublic readonly args: GraphQlFieldTypedArgs = {},\n\t\tpublic readonly selectionSet?: GraphQlSelectionSet,\n\t) {\n\t}\n}\n\nexport type GraphQlFieldTypedArgs = Record<string, {\n\tgraphQlType: string\n\tvalue?: JSONValue\n}>\n\nexport type GraphQlSelectionSetItem = GraphQlField | GraphQlFragmentSpread | GraphQlInlineFragment\n\nexport type GraphQlSelectionSet = GraphQlSelectionSetItem[]\n"],"names":[],"mappings":";;AAIO,MAAM,aAAa;AAAA,EACzB,YACiB,OACA,MACA,OAA8B,CAAA,GAC9B,cACf;AAJe,SAAA,QAAA;AACA,SAAA,OAAA;AACA,SAAA,OAAA;AACA,SAAA,eAAA;AAAA,EAEjB;AACD;;"}
@@ -0,0 +1,12 @@
1
+ class GraphQlField {
2
+ constructor(alias, name, args = {}, selectionSet) {
3
+ this.alias = alias;
4
+ this.name = name;
5
+ this.args = args;
6
+ this.selectionSet = selectionSet;
7
+ }
8
+ }
9
+ export {
10
+ GraphQlField
11
+ };
12
+ //# sourceMappingURL=GraphQlField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphQlField.js","sources":["../../../src/nodes/GraphQlField.ts"],"sourcesContent":["import { GraphQlFragmentSpread } from './GraphQlFragmentSpread'\nimport { GraphQlInlineFragment } from './GraphQlInlineFragment'\nimport { JSONValue } from '@contember/schema'\n\nexport class GraphQlField {\n\tconstructor(\n\t\tpublic readonly alias: string | null,\n\t\tpublic readonly name: string,\n\t\tpublic readonly args: GraphQlFieldTypedArgs = {},\n\t\tpublic readonly selectionSet?: GraphQlSelectionSet,\n\t) {\n\t}\n}\n\nexport type GraphQlFieldTypedArgs = Record<string, {\n\tgraphQlType: string\n\tvalue?: JSONValue\n}>\n\nexport type GraphQlSelectionSetItem = GraphQlField | GraphQlFragmentSpread | GraphQlInlineFragment\n\nexport type GraphQlSelectionSet = GraphQlSelectionSetItem[]\n"],"names":[],"mappings":"AAIO,MAAM,aAAa;AAAA,EACzB,YACiB,OACA,MACA,OAA8B,CAAA,GAC9B,cACf;AAJe,SAAA,QAAA;AACA,SAAA,OAAA;AACA,SAAA,OAAA;AACA,SAAA,eAAA;AAAA,EAEjB;AACD;"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ class GraphQlFragment {
4
+ constructor(name, type, selectionSet) {
5
+ this.name = name;
6
+ this.type = type;
7
+ this.selectionSet = selectionSet;
8
+ }
9
+ }
10
+ exports.GraphQlFragment = GraphQlFragment;
11
+ //# sourceMappingURL=GraphQlFragment.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphQlFragment.cjs","sources":["../../../src/nodes/GraphQlFragment.ts"],"sourcesContent":["import { GraphQlSelectionSet } from './GraphQlField'\n\nexport class GraphQlFragment {\n\tconstructor(\n\t\tpublic readonly name: string,\n\t\tpublic readonly type: string,\n\t\tpublic readonly selectionSet: GraphQlSelectionSet,\n\t) {\n\t}\n}\n"],"names":[],"mappings":";;AAEO,MAAM,gBAAgB;AAAA,EAC5B,YACiB,MACA,MACA,cACf;AAHe,SAAA,OAAA;AACA,SAAA,OAAA;AACA,SAAA,eAAA;AAAA,EAEjB;AACD;;"}
@@ -0,0 +1,11 @@
1
+ class GraphQlFragment {
2
+ constructor(name, type, selectionSet) {
3
+ this.name = name;
4
+ this.type = type;
5
+ this.selectionSet = selectionSet;
6
+ }
7
+ }
8
+ export {
9
+ GraphQlFragment
10
+ };
11
+ //# sourceMappingURL=GraphQlFragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphQlFragment.js","sources":["../../../src/nodes/GraphQlFragment.ts"],"sourcesContent":["import { GraphQlSelectionSet } from './GraphQlField'\n\nexport class GraphQlFragment {\n\tconstructor(\n\t\tpublic readonly name: string,\n\t\tpublic readonly type: string,\n\t\tpublic readonly selectionSet: GraphQlSelectionSet,\n\t) {\n\t}\n}\n"],"names":[],"mappings":"AAEO,MAAM,gBAAgB;AAAA,EAC5B,YACiB,MACA,MACA,cACf;AAHe,SAAA,OAAA;AACA,SAAA,OAAA;AACA,SAAA,eAAA;AAAA,EAEjB;AACD;"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ class GraphQlFragmentSpread {
4
+ constructor(name) {
5
+ this.name = name;
6
+ }
7
+ }
8
+ exports.GraphQlFragmentSpread = GraphQlFragmentSpread;
9
+ //# sourceMappingURL=GraphQlFragmentSpread.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphQlFragmentSpread.cjs","sources":["../../../src/nodes/GraphQlFragmentSpread.ts"],"sourcesContent":["export class GraphQlFragmentSpread {\n\tconstructor(\n\t\tpublic readonly name: string,\n\t) {\n\t}\n}\n"],"names":[],"mappings":";;AAAO,MAAM,sBAAsB;AAAA,EAClC,YACiB,MACf;AADe,SAAA,OAAA;AAAA,EAEjB;AACD;;"}
@@ -0,0 +1,9 @@
1
+ class GraphQlFragmentSpread {
2
+ constructor(name) {
3
+ this.name = name;
4
+ }
5
+ }
6
+ export {
7
+ GraphQlFragmentSpread
8
+ };
9
+ //# sourceMappingURL=GraphQlFragmentSpread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphQlFragmentSpread.js","sources":["../../../src/nodes/GraphQlFragmentSpread.ts"],"sourcesContent":["export class GraphQlFragmentSpread {\n\tconstructor(\n\t\tpublic readonly name: string,\n\t) {\n\t}\n}\n"],"names":[],"mappings":"AAAO,MAAM,sBAAsB;AAAA,EAClC,YACiB,MACf;AADe,SAAA,OAAA;AAAA,EAEjB;AACD;"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ class GraphQlInlineFragment {
4
+ constructor(type, selectionSet) {
5
+ this.type = type;
6
+ this.selectionSet = selectionSet;
7
+ }
8
+ }
9
+ exports.GraphQlInlineFragment = GraphQlInlineFragment;
10
+ //# sourceMappingURL=GraphQlInlineFragment.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphQlInlineFragment.cjs","sources":["../../../src/nodes/GraphQlInlineFragment.ts"],"sourcesContent":["import { GraphQlSelectionSet } from './GraphQlField'\n\nexport class GraphQlInlineFragment {\n\tconstructor(\n\t\tpublic readonly type: string,\n\t\tpublic readonly selectionSet: GraphQlSelectionSet,\n\t) {\n\t}\n}\n"],"names":[],"mappings":";;AAEO,MAAM,sBAAsB;AAAA,EAClC,YACiB,MACA,cACf;AAFe,SAAA,OAAA;AACA,SAAA,eAAA;AAAA,EAEjB;AACD;;"}
@@ -0,0 +1,10 @@
1
+ class GraphQlInlineFragment {
2
+ constructor(type, selectionSet) {
3
+ this.type = type;
4
+ this.selectionSet = selectionSet;
5
+ }
6
+ }
7
+ export {
8
+ GraphQlInlineFragment
9
+ };
10
+ //# sourceMappingURL=GraphQlInlineFragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphQlInlineFragment.js","sources":["../../../src/nodes/GraphQlInlineFragment.ts"],"sourcesContent":["import { GraphQlSelectionSet } from './GraphQlField'\n\nexport class GraphQlInlineFragment {\n\tconstructor(\n\t\tpublic readonly type: string,\n\t\tpublic readonly selectionSet: GraphQlSelectionSet,\n\t) {\n\t}\n}\n"],"names":[],"mappings":"AAEO,MAAM,sBAAsB;AAAA,EAClC,YACiB,MACA,cACf;AAFe,SAAA,OAAA;AACA,SAAA,eAAA;AAAA,EAEjB;AACD;"}
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __publicField = (obj, key, value) => {
5
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
+ return value;
7
+ };
8
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
9
+ const GraphQlField = require("./nodes/GraphQlField.cjs");
10
+ const GraphQlFragmentSpread = require("./nodes/GraphQlFragmentSpread.cjs");
11
+ const GraphQlInlineFragment = require("./nodes/GraphQlInlineFragment.cjs");
12
+ class GraphQlQueryPrinter {
13
+ constructor() {
14
+ __publicField(this, "indentString", " ");
15
+ __publicField(this, "variableCounter", 0);
16
+ __publicField(this, "variables", {});
17
+ __publicField(this, "variableValueToName", {});
18
+ __publicField(this, "usedFragments", /* @__PURE__ */ new Set());
19
+ __publicField(this, "body", "");
20
+ }
21
+ printDocument(operation, select, fragments) {
22
+ this.cleanState();
23
+ this.processSelectionSet(select, 1);
24
+ const body = this.body;
25
+ this.body = "";
26
+ this.processUsedFragments(fragments);
27
+ const fragmentsStr = this.body;
28
+ const variablesString = this.printVariables();
29
+ const query = `${operation}${variablesString} {
30
+ ${body}}${fragmentsStr}
31
+ `;
32
+ return {
33
+ query,
34
+ variables: Object.fromEntries(Object.entries(this.variables).map(([key, value]) => [key, value.value]))
35
+ };
36
+ }
37
+ processUsedFragments(fragments) {
38
+ const printed = /* @__PURE__ */ new Set();
39
+ while (this.usedFragments.size > 0) {
40
+ const fragmentName = this.usedFragments.values().next().value;
41
+ this.usedFragments.delete(fragmentName);
42
+ if (printed.has(fragmentName)) {
43
+ continue;
44
+ }
45
+ printed.add(fragmentName);
46
+ if (!fragments[fragmentName]) {
47
+ throw new Error(`Unknown fragment ${fragmentName}`);
48
+ }
49
+ this.processFragment(fragments[fragmentName]);
50
+ }
51
+ }
52
+ processFragment(fragment) {
53
+ this.body += `
54
+ fragment ${fragment.name} on ${fragment.type} {
55
+ `;
56
+ this.processSelectionSet(fragment.selectionSet, 1);
57
+ this.body += "}";
58
+ }
59
+ printVariables() {
60
+ let variablesString = "";
61
+ let i = 0;
62
+ for (const [variableName, variable] of Object.entries(this.variables)) {
63
+ if (i++ === 0) {
64
+ variablesString += "(";
65
+ } else {
66
+ variablesString += ", ";
67
+ }
68
+ variablesString += `$${variableName}: ${variable.type}`;
69
+ }
70
+ if (i > 0) {
71
+ variablesString += ")";
72
+ }
73
+ return variablesString;
74
+ }
75
+ processSelectionSet(selectionSet, indent) {
76
+ for (const node of selectionSet) {
77
+ if (node instanceof GraphQlField.GraphQlField) {
78
+ this.processField(node, indent);
79
+ } else if (node instanceof GraphQlFragmentSpread.GraphQlFragmentSpread) {
80
+ this.body += this.indentString.repeat(indent) + "... " + node.name + "\n";
81
+ this.usedFragments.add(node.name);
82
+ } else if (node instanceof GraphQlInlineFragment.GraphQlInlineFragment) {
83
+ this.body += this.indentString.repeat(indent) + "... on " + node.type + " {\n";
84
+ this.processSelectionSet(node.selectionSet, indent + 1);
85
+ this.body += this.indentString.repeat(indent) + "}\n";
86
+ }
87
+ }
88
+ }
89
+ processField(field, indent) {
90
+ const indentString = this.indentString.repeat(indent);
91
+ this.body += indentString + (field.alias && field.alias !== field.name ? field.alias + ": " + field.name : field.name);
92
+ let i = 0;
93
+ for (const [argName, arg] of Object.entries(field.args)) {
94
+ if (arg.value === void 0) {
95
+ continue;
96
+ }
97
+ const variableName = this.resolveVariableName(arg.graphQlType, arg.value);
98
+ if (i++ === 0) {
99
+ this.body += "(";
100
+ } else {
101
+ this.body += ", ";
102
+ }
103
+ this.body += `${argName}: $${variableName}`;
104
+ }
105
+ if (i > 0) {
106
+ this.body += ")";
107
+ }
108
+ if (field.selectionSet) {
109
+ this.body += " {\n";
110
+ this.processSelectionSet(field.selectionSet, indent + 1);
111
+ this.body += this.indentString.repeat(indent) + "}";
112
+ }
113
+ this.body += "\n";
114
+ }
115
+ resolveVariableName(graphQlType, value) {
116
+ const variableName = this.variableValueToName[graphQlType]?.get(value);
117
+ if (variableName) {
118
+ return variableName;
119
+ }
120
+ const newVariableName = `${graphQlType.replace(/[\W]/g, "")}_${this.variableCounter++}`;
121
+ this.variables[newVariableName] = {
122
+ type: graphQlType,
123
+ value
124
+ };
125
+ if (!this.variableValueToName[graphQlType]) {
126
+ this.variableValueToName[graphQlType] = /* @__PURE__ */ new Map();
127
+ }
128
+ this.variableValueToName[graphQlType].set(value, newVariableName);
129
+ return newVariableName;
130
+ }
131
+ cleanState() {
132
+ this.body = "";
133
+ this.variableCounter = 0;
134
+ this.variables = {};
135
+ this.usedFragments = /* @__PURE__ */ new Set();
136
+ }
137
+ }
138
+ exports.GraphQlQueryPrinter = GraphQlQueryPrinter;
139
+ //# sourceMappingURL=GraphQlQueryPrinter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphQlQueryPrinter.cjs","sources":["../../src/GraphQlQueryPrinter.ts"],"sourcesContent":["import { JSONValue } from '@contember/schema'\nimport { GraphQlField, GraphQlFragment, GraphQlFragmentSpread, GraphQlInlineFragment, GraphQlSelectionSet } from './nodes'\n\nexport type GraphQlPrintResult = { query: string; variables: Record<string, JSONValue> }\n\nexport class GraphQlQueryPrinter {\n\tprivate indentString = '\\t'\n\n\tprivate variableCounter = 0\n\tprivate variables: Record<string, {\n\t\ttype: string\n\t\tvalue: JSONValue\n\t}> = {}\n\n\tprivate variableValueToName: Record<string, Map<JSONValue, string>> = {}\n\n\tprivate usedFragments = new Set<string>()\n\n\tprivate body = ''\n\n\n\tpublic printDocument(\n\t\toperation: 'query' | 'mutation',\n\t\tselect: GraphQlSelectionSet,\n\t\tfragments: Record<string, GraphQlFragment>,\n\t): GraphQlPrintResult {\n\t\tthis.cleanState()\n\t\tthis.processSelectionSet(select, 1)\n\t\tconst body = this.body\n\t\tthis.body = ''\n\t\tthis.processUsedFragments(fragments)\n\t\tconst fragmentsStr = this.body\n\t\tconst variablesString = this.printVariables()\n\t\tconst query = `${operation}${variablesString} {\\n${body}}${fragmentsStr}\\n`\n\t\treturn {\n\t\t\tquery: query,\n\t\t\tvariables: Object.fromEntries(Object.entries(this.variables).map(([key, value]) => [key, value.value])),\n\t\t}\n\t}\n\n\n\tprivate processUsedFragments(fragments: Record<string, GraphQlFragment>): void {\n\t\tconst printed = new Set()\n\t\twhile (this.usedFragments.size > 0) {\n\t\t\tconst fragmentName = this.usedFragments.values().next().value\n\t\t\tthis.usedFragments.delete(fragmentName)\n\t\t\tif (printed.has(fragmentName)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprinted.add(fragmentName)\n\t\t\tif (!fragments[fragmentName]) {\n\t\t\t\tthrow new Error(`Unknown fragment ${fragmentName}`)\n\t\t\t}\n\t\t\tthis.processFragment(fragments[fragmentName])\n\t\t}\n\t}\n\n\tprivate processFragment(fragment: GraphQlFragment): void {\n\t\tthis.body += `\\nfragment ${fragment.name} on ${fragment.type} {\\n`\n\t\tthis.processSelectionSet(fragment.selectionSet, 1)\n\t\tthis.body += '}'\n\t}\n\n\tprivate printVariables(): string {\n\t\tlet variablesString = ''\n\t\tlet i = 0\n\t\tfor (const [variableName, variable] of Object.entries(this.variables)) {\n\t\t\tif (i++ === 0) {\n\t\t\t\tvariablesString += '('\n\t\t\t} else {\n\t\t\t\tvariablesString += ', '\n\t\t\t}\n\t\t\tvariablesString += `$${variableName}: ${variable.type}`\n\t\t}\n\t\tif (i > 0) {\n\t\t\tvariablesString += ')'\n\t\t}\n\t\treturn variablesString\n\t}\n\n\tprivate processSelectionSet(selectionSet: GraphQlSelectionSet, indent: number): void {\n\t\tfor (const node of selectionSet) {\n\t\t\tif (node instanceof GraphQlField) {\n\t\t\t\tthis.processField(node, indent)\n\t\t\t} else if (node instanceof GraphQlFragmentSpread) {\n\t\t\t\tthis.body += this.indentString.repeat(indent) + '... ' + node.name + '\\n'\n\t\t\t\tthis.usedFragments.add(node.name)\n\t\t\t} else if (node instanceof GraphQlInlineFragment) {\n\t\t\t\tthis.body += this.indentString.repeat(indent) + '... on ' + node.type + ' {\\n'\n\t\t\t\tthis.processSelectionSet(node.selectionSet, indent + 1)\n\t\t\t\tthis.body += this.indentString.repeat(indent) + '}\\n'\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate processField(field: GraphQlField, indent: number): void {\n\t\tconst indentString = this.indentString.repeat(indent)\n\t\tthis.body += indentString + (field.alias && field.alias !== field.name ? (field.alias + ': ' + field.name) : field.name)\n\t\tlet i = 0\n\t\tfor (const [argName, arg] of Object.entries(field.args)) {\n\t\t\tif (arg.value === undefined) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst variableName = this.resolveVariableName(arg.graphQlType, arg.value)\n\t\t\tif (i++ === 0) {\n\t\t\t\tthis.body += '('\n\t\t\t} else {\n\t\t\t\tthis.body += ', '\n\t\t\t}\n\t\t\tthis.body += `${argName}: $${variableName}`\n\t\t}\n\t\tif (i > 0) {\n\t\t\tthis.body += ')'\n\t\t}\n\t\tif (field.selectionSet) {\n\t\t\tthis.body += ' {\\n'\n\t\t\tthis.processSelectionSet(field.selectionSet, indent + 1)\n\t\t\tthis.body += this.indentString.repeat(indent) + '}'\n\t\t}\n\t\tthis.body += '\\n'\n\t}\n\n\tprivate resolveVariableName(graphQlType: string, value: JSONValue): string {\n\t\tconst variableName = this.variableValueToName[graphQlType]?.get(value)\n\t\tif (variableName) {\n\t\t\treturn variableName\n\t\t}\n\t\tconst newVariableName = `${graphQlType.replace(/[\\W]/g, '')}_${this.variableCounter++}`\n\t\tthis.variables[newVariableName] = {\n\t\t\ttype: graphQlType,\n\t\t\tvalue: value,\n\t\t}\n\t\tif (!this.variableValueToName[graphQlType]) {\n\t\t\tthis.variableValueToName[graphQlType] = new Map()\n\t\t}\n\t\tthis.variableValueToName[graphQlType].set(value, newVariableName)\n\t\treturn newVariableName\n\t}\n\n\tprivate cleanState(): void {\n\t\tthis.body = ''\n\t\tthis.variableCounter = 0\n\t\tthis.variables = {}\n\t\tthis.usedFragments = new Set<string>()\n\t}\n}\n"],"names":["GraphQlField","GraphQlFragmentSpread","GraphQlInlineFragment"],"mappings":"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"}