UNPKG

@0no-co/graphqlsp

Version:

TypeScript LSP plugin that finds GraphQL documents in your code and provides hints and auto-generates types.

1,952 lines (1,828 loc) 113 kB
var e = require("graphql"); var t = require("crypto"); exports.ts = void 0; class CharacterStream { constructor(e) { this._start = 0; this._pos = 0; this.getStartOfToken = () => this._start; this.getCurrentPosition = () => this._pos; this.eol = () => this._sourceText.length === this._pos; this.sol = () => 0 === this._pos; this.peek = () => this._sourceText.charAt(this._pos) || null; this.next = () => { var e = this._sourceText.charAt(this._pos); this._pos++; return e; }; this.eat = e => { if (this._testNextCharacter(e)) { this._start = this._pos; this._pos++; return this._sourceText.charAt(this._pos - 1); } return; }; this.eatWhile = e => { var t = this._testNextCharacter(e); var i = !1; if (t) { i = t; this._start = this._pos; } while (t) { this._pos++; t = this._testNextCharacter(e); i = !0; } return i; }; this.eatSpace = () => this.eatWhile(/[\s\u00a0]/); this.skipToEnd = () => { this._pos = this._sourceText.length; }; this.skipTo = e => { this._pos = e; }; this.match = (e, t = !0, i = !1) => { var r = null; var s = null; if ("string" == typeof e) { s = new RegExp(e, i ? "i" : "g").test(this._sourceText.slice(this._pos, this._pos + e.length)); r = e; } else if (e instanceof RegExp) { r = null == (s = this._sourceText.slice(this._pos).match(e)) ? void 0 : s[0]; } if (null != s && ("string" == typeof e || s instanceof Array && this._sourceText.startsWith(s[0], this._pos))) { if (t) { this._start = this._pos; if (r && r.length) { this._pos += r.length; } } return s; } return !1; }; this.backUp = e => { this._pos -= e; }; this.column = () => this._pos; this.indentation = () => { var e = this._sourceText.match(/\s*/); var t = 0; if (e && 0 !== e.length) { var i = e[0]; var r = 0; while (i.length > r) { if (9 === i.charCodeAt(r)) { t += 2; } else { t++; } r++; } } return t; }; this.current = () => this._sourceText.slice(this._start, this._pos); this._sourceText = e; } _testNextCharacter(e) { var t = this._sourceText.charAt(this._pos); var i = !1; if ("string" == typeof e) { i = t === e; } else { i = e instanceof RegExp ? e.test(t) : e(t); } return i; } } function opt(e) { return { ofRule: e }; } function list(e, t) { return { ofRule: e, isList: !0, separator: t }; } function t$1(e, t) { return { style: t, match: t => t.kind === e }; } function p$1(e, t) { return { style: t || "punctuation", match: t => "Punctuation" === t.kind && t.value === e }; } var isIgnored = e => " " === e || "\t" === e || "," === e || "\n" === e || "\r" === e || "\ufeff" === e || " " === e; var i = { Name: /^[_A-Za-z][_0-9A-Za-z]*/, Punctuation: /^(?:!|\$|\(|\)|\.\.\.|:|=|&|@|\[|]|\{|\||\})/, Number: /^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/, String: /^(?:"""(?:\\"""|[^"]|"[^"]|""[^"])*(?:""")?|"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?)/, Comment: /^#.*/ }; var r = { Document: [ list("Definition") ], Definition(t) { switch (t.value) { case "{": return "ShortQuery"; case "query": return "Query"; case "mutation": return "Mutation"; case "subscription": return "Subscription"; case "fragment": return e.Kind.FRAGMENT_DEFINITION; case "schema": return "SchemaDef"; case "scalar": return "ScalarDef"; case "type": return "ObjectTypeDef"; case "interface": return "InterfaceDef"; case "union": return "UnionDef"; case "enum": return "EnumDef"; case "input": return "InputDef"; case "extend": return "ExtendDef"; case "directive": return "DirectiveDef"; } }, ShortQuery: [ "SelectionSet" ], Query: [ word("query"), opt(name$1("def")), opt("VariableDefinitions"), list("Directive"), "SelectionSet" ], Mutation: [ word("mutation"), opt(name$1("def")), opt("VariableDefinitions"), list("Directive"), "SelectionSet" ], Subscription: [ word("subscription"), opt(name$1("def")), opt("VariableDefinitions"), list("Directive"), "SelectionSet" ], VariableDefinitions: [ p$1("("), list("VariableDefinition"), p$1(")") ], VariableDefinition: [ "Variable", p$1(":"), "Type", opt("DefaultValue") ], Variable: [ p$1("$", "variable"), name$1("variable") ], DefaultValue: [ p$1("="), "Value" ], SelectionSet: [ p$1("{"), list("Selection"), p$1("}") ], Selection: (e, t) => "..." === e.value ? t.match(/[\s\u00a0,]*(on\b|@|{)/, !1) ? "InlineFragment" : "FragmentSpread" : t.match(/[\s\u00a0,]*:/, !1) ? "AliasedField" : "Field", AliasedField: [ name$1("property"), p$1(":"), name$1("qualifier"), opt("Arguments"), list("Directive"), opt("SelectionSet") ], Field: [ name$1("property"), opt("Arguments"), list("Directive"), opt("SelectionSet") ], Arguments: [ p$1("("), list("Argument"), p$1(")") ], Argument: [ name$1("attribute"), p$1(":"), "Value" ], FragmentSpread: [ p$1("..."), name$1("def"), list("Directive") ], InlineFragment: [ p$1("..."), opt("TypeCondition"), list("Directive"), "SelectionSet" ], FragmentDefinition: [ word("fragment"), opt(function butNot(e, t) { var i = e.match; e.match = e => { var r = !1; if (i) { r = i(e); } return r && t.every(t => t.match && !t.match(e)); }; return e; }(name$1("def"), [ word("on") ])), "TypeCondition", list("Directive"), "SelectionSet" ], TypeCondition: [ word("on"), "NamedType" ], Value(e) { switch (e.kind) { case "Number": return "NumberValue"; case "String": return "StringValue"; case "Punctuation": switch (e.value) { case "[": return "ListValue"; case "{": return "ObjectValue"; case "$": return "Variable"; case "&": return "NamedType"; } return null; case "Name": switch (e.value) { case "true": case "false": return "BooleanValue"; } if ("null" === e.value) { return "NullValue"; } return "EnumValue"; } }, NumberValue: [ t$1("Number", "number") ], StringValue: [ { style: "string", match: e => "String" === e.kind, update(e, t) { if (t.value.startsWith('"""')) { e.inBlockstring = !t.value.slice(3).endsWith('"""'); } } } ], BooleanValue: [ t$1("Name", "builtin") ], NullValue: [ t$1("Name", "keyword") ], EnumValue: [ name$1("string-2") ], ListValue: [ p$1("["), list("Value"), p$1("]") ], ObjectValue: [ p$1("{"), list("ObjectField"), p$1("}") ], ObjectField: [ name$1("attribute"), p$1(":"), "Value" ], Type: e => "[" === e.value ? "ListType" : "NonNullType", ListType: [ p$1("["), "Type", p$1("]"), opt(p$1("!")) ], NonNullType: [ "NamedType", opt(p$1("!")) ], NamedType: [ function type$1(e) { return { style: e, match: e => "Name" === e.kind, update(e, t) { var i; if (null === (i = e.prevState) || void 0 === i ? void 0 : i.prevState) { e.name = t.value; e.prevState.prevState.type = t.value; } } }; }("atom") ], Directive: [ p$1("@", "meta"), name$1("meta"), opt("Arguments") ], DirectiveDef: [ word("directive"), p$1("@", "meta"), name$1("meta"), opt("ArgumentsDef"), word("on"), list("DirectiveLocation", p$1("|")) ], InterfaceDef: [ word("interface"), name$1("atom"), opt("Implements"), list("Directive"), p$1("{"), list("FieldDef"), p$1("}") ], Implements: [ word("implements"), list("NamedType", p$1("&")) ], DirectiveLocation: [ name$1("string-2") ], SchemaDef: [ word("schema"), list("Directive"), p$1("{"), list("OperationTypeDef"), p$1("}") ], OperationTypeDef: [ name$1("keyword"), p$1(":"), name$1("atom") ], ScalarDef: [ word("scalar"), name$1("atom"), list("Directive") ], ObjectTypeDef: [ word("type"), name$1("atom"), opt("Implements"), list("Directive"), p$1("{"), list("FieldDef"), p$1("}") ], FieldDef: [ name$1("property"), opt("ArgumentsDef"), p$1(":"), "Type", list("Directive") ], ArgumentsDef: [ p$1("("), list("InputValueDef"), p$1(")") ], InputValueDef: [ name$1("attribute"), p$1(":"), "Type", opt("DefaultValue"), list("Directive") ], UnionDef: [ word("union"), name$1("atom"), list("Directive"), p$1("="), list("UnionMember", p$1("|")) ], UnionMember: [ "NamedType" ], EnumDef: [ word("enum"), name$1("atom"), list("Directive"), p$1("{"), list("EnumValueDef"), p$1("}") ], EnumValueDef: [ name$1("string-2"), list("Directive") ], InputDef: [ word("input"), name$1("atom"), list("Directive"), p$1("{"), list("InputValueDef"), p$1("}") ], ExtendDef: [ word("extend"), "ExtensionDefinition" ], ExtensionDefinition(t) { switch (t.value) { case "schema": return e.Kind.SCHEMA_EXTENSION; case "scalar": return e.Kind.SCALAR_TYPE_EXTENSION; case "type": return e.Kind.OBJECT_TYPE_EXTENSION; case "interface": return e.Kind.INTERFACE_TYPE_EXTENSION; case "union": return e.Kind.UNION_TYPE_EXTENSION; case "enum": return e.Kind.ENUM_TYPE_EXTENSION; case "input": return e.Kind.INPUT_OBJECT_TYPE_EXTENSION; } }, [e.Kind.SCHEMA_EXTENSION]: [ "SchemaDef" ], [e.Kind.SCALAR_TYPE_EXTENSION]: [ "ScalarDef" ], [e.Kind.OBJECT_TYPE_EXTENSION]: [ "ObjectTypeDef" ], [e.Kind.INTERFACE_TYPE_EXTENSION]: [ "InterfaceDef" ], [e.Kind.UNION_TYPE_EXTENSION]: [ "UnionDef" ], [e.Kind.ENUM_TYPE_EXTENSION]: [ "EnumDef" ], [e.Kind.INPUT_OBJECT_TYPE_EXTENSION]: [ "InputDef" ] }; function word(e) { return { style: "keyword", match: t => "Name" === t.kind && t.value === e }; } function name$1(e) { return { style: e, match: e => "Name" === e.kind, update(e, t) { e.name = t.value; } }; } function onlineParser(t = { eatWhitespace: e => e.eatWhile(isIgnored), lexRules: i, parseRules: r, editorConfig: {} }) { return { startState() { var i = { level: 0, step: 0, name: null, kind: null, type: null, rule: null, needsSeparator: !1, prevState: null }; pushRule(t.parseRules, i, e.Kind.DOCUMENT); return i; }, token: (e, i) => function getToken(e, t, i) { var r; if (t.inBlockstring) { if (e.match(/.*"""/)) { t.inBlockstring = !1; return "string"; } e.skipToEnd(); return "string"; } var {lexRules: a, parseRules: n, eatWhitespace: o, editorConfig: l} = i; if (t.rule && 0 === t.rule.length) { popRule(t); } else if (t.needsAdvance) { t.needsAdvance = !1; advanceRule(t, !0); } if (e.sol()) { var u = (null == l ? void 0 : l.tabSize) || 2; t.indentLevel = Math.floor(e.indentation() / u); } if (o(e)) { return "ws"; } var p = function lex(e, t) { var i = Object.keys(e); for (var r = 0; r < i.length; r++) { var s = t.match(e[i[r]]); if (s && s instanceof Array) { return { kind: i[r], value: s[0] }; } } }(a, e); if (!p) { if (!e.match(/\S+/)) { e.match(/\s/); } pushRule(s, t, "Invalid"); return "invalidchar"; } if ("Comment" === p.kind) { pushRule(s, t, "Comment"); return "comment"; } var f = assign({}, t); if ("Punctuation" === p.kind) { if (/^[{([]/.test(p.value)) { if (void 0 !== t.indentLevel) { t.levels = (t.levels || []).concat(t.indentLevel + 1); } } else if (/^[})\]]/.test(p.value)) { var c = t.levels = (t.levels || []).slice(0, -1); if (t.indentLevel && c.length > 0 && c.at(-1) < t.indentLevel) { t.indentLevel = c.at(-1); } } } while (t.rule) { var h = "function" == typeof t.rule ? 0 === t.step ? t.rule(p, e) : null : t.rule[t.step]; if (t.needsSeparator) { h = null == h ? void 0 : h.separator; } if (h) { if (h.ofRule) { h = h.ofRule; } if ("string" == typeof h) { pushRule(n, t, h); continue; } if (null === (r = h.match) || void 0 === r ? void 0 : r.call(h, p)) { if (h.update) { h.update(t, p); } if ("Punctuation" === p.kind) { advanceRule(t, !0); } else { t.needsAdvance = !0; } return h.style; } } unsuccessful(t); } assign(t, f); pushRule(s, t, "Invalid"); return "invalidchar"; }(e, i, t) }; } function assign(e, t) { var i = Object.keys(t); for (var r = 0; r < i.length; r++) { e[i[r]] = t[i[r]]; } return e; } var s = { Invalid: [], Comment: [] }; function pushRule(e, t, i) { if (!e[i]) { throw new TypeError("Unknown rule: " + i); } t.prevState = Object.assign({}, t); t.kind = i; t.name = null; t.type = null; t.rule = e[i]; t.step = 0; t.needsSeparator = !1; } function popRule(e) { if (!e.prevState) { return; } e.kind = e.prevState.kind; e.name = e.prevState.name; e.type = e.prevState.type; e.rule = e.prevState.rule; e.step = e.prevState.step; e.needsSeparator = e.prevState.needsSeparator; e.prevState = e.prevState.prevState; } function advanceRule(e, t) { var i; if (isList(e) && e.rule) { var r = e.rule[e.step]; if (r.separator) { var {separator: s} = r; e.needsSeparator = !e.needsSeparator; if (!e.needsSeparator && s.ofRule) { return; } } if (t) { return; } } e.needsSeparator = !1; e.step++; while (e.rule && !(Array.isArray(e.rule) && e.step < e.rule.length)) { popRule(e); if (e.rule) { if (isList(e)) { if (null === (i = e.rule) || void 0 === i ? void 0 : i[e.step].separator) { e.needsSeparator = !e.needsSeparator; } } else { e.needsSeparator = !1; e.step++; } } } } function isList(e) { var t = Array.isArray(e.rule) && "string" != typeof e.rule[e.step] && e.rule[e.step]; return t && t.isList; } function unsuccessful(e) { while (e.rule && (!Array.isArray(e.rule) || !e.rule[e.step].ofRule)) { popRule(e); } if (e.rule) { advanceRule(e, !1); } } function getDefaultExportFromCjs(e) { return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e; } class Range { constructor(e, t) { this.containsPosition = e => { if (this.start.line === e.line) { return this.start.character <= e.character; } if (this.end.line === e.line) { return this.end.character >= e.character; } return this.start.line <= e.line && this.end.line >= e.line; }; this.start = e; this.end = t; } setStart(e, t) { this.start = new Position(e, t); } setEnd(e, t) { this.end = new Position(e, t); } } class Position { constructor(e, t) { this.lessThanOrEqualTo = e => this.line < e.line || this.line === e.line && this.character <= e.character; this.line = e; this.character = t; } setLine(e) { this.line = e; } setCharacter(e) { this.character = e; } } var a = [ e.LoneSchemaDefinitionRule, e.UniqueOperationTypesRule, e.UniqueTypeNamesRule, e.UniqueEnumValueNamesRule, e.UniqueFieldDefinitionNamesRule, e.UniqueDirectiveNamesRule, e.KnownTypeNamesRule, e.KnownDirectivesRule, e.UniqueDirectivesPerLocationRule, e.PossibleTypeExtensionsRule, e.UniqueArgumentNamesRule, e.UniqueInputFieldNamesRule ]; var n = "Error", o = "Warning", l = "Information", u = "Hint"; var p = { [n]: 1, [o]: 2, [l]: 3, [u]: 4 }; var invariant = (e, t) => { if (!e) { throw new Error(t); } }; function getDiagnostics(t, i = null, r, s, n) { var o, l; var u = null; var f = ""; if (n) { f = "string" == typeof n ? n : n.reduce((t, i) => t + e.print(i) + "\n\n", ""); } var c = f ? `${t}\n\n${f}` : t; try { u = e.parse(c); } catch (t) { if (t instanceof e.GraphQLError) { var h = function getRange(e, t) { var i = onlineParser(); var r = i.startState(); var s = t.split("\n"); invariant(s.length >= e.line, "Query text must have more lines than where the error happened"); var a = null; for (var n = 0; n < e.line; n++) { a = new CharacterStream(s[n]); while (!a.eol()) { if ("invalidchar" === i.token(a, r)) { break; } } } invariant(a, "Expected Parser stream to be available."); var o = e.line - 1; var l = a.getStartOfToken(); var u = a.getCurrentPosition(); return new Range(new Position(o, l), new Position(o, u)); }(null !== (l = null === (o = t.locations) || void 0 === o ? void 0 : o[0]) && void 0 !== l ? l : { line: 0, column: 0 }, c); return [ { severity: p.Error, message: t.message, source: "GraphQL: Syntax", range: h } ]; } throw t; } return function validateQuery(t, i = null, r, s) { if (!i) { return []; } var n = function validateWithCustomRules(t, i, r, s, n) { var o = e.specifiedRules.filter(t => { if (t === e.NoUnusedFragmentsRule || t === e.ExecutableDefinitionsRule) { return !1; } if (s && t === e.KnownFragmentNamesRule) { return !1; } return !0; }); if (r) { Array.prototype.push.apply(o, r); } if (n) { Array.prototype.push.apply(o, a); } return e.validate(t, i, o).filter(t => { if (t.message.includes("Unknown directive") && t.nodes) { var i = t.nodes[0]; if (i && i.kind === e.Kind.DIRECTIVE) { var r = i.name.value; if ("arguments" === r || "argumentDefinitions" === r) { return !1; } } } return !0; }); }(i, t, r, s).flatMap(e => annotations(e, p.Error, "Validation")); var o = e.validate(i, t, [ e.NoDeprecatedCustomRule ]).flatMap(e => annotations(e, p.Warning, "Deprecation")); return n.concat(o); }(u, i, r, s); } function annotations(e, t, i) { if (!e.nodes) { return []; } var r = []; for (var [s, a] of e.nodes.entries()) { var n = "Variable" !== a.kind && "name" in a && void 0 !== a.name ? a.name : "variable" in a && void 0 !== a.variable ? a.variable : a; if (n) { invariant(e.locations, "GraphQL validation error requires locations."); var o = e.locations[s]; var l = getLocation(n); var u = o.column + (l.end - l.start); r.push({ source: `GraphQL: ${i}`, message: e.message, severity: t, range: new Range(new Position(o.line - 1, o.column - 1), new Position(o.line - 1, u)) }); } } return r; } function getLocation(e) { var t = e.loc; invariant(t, "Expected ASTNode to have a location."); return t; } var f = "FragmentDefinition"; class GraphQLError extends Error { constructor(e, t, i, r, s, a, n) { super(e); this.name = "GraphQLError"; this.message = e; if (s) { this.path = s; } if (t) { this.nodes = Array.isArray(t) ? t : [ t ]; } if (i) { this.source = i; } if (r) { this.positions = r; } if (a) { this.originalError = a; } var o = n; if (!o && a) { var l = a.extensions; if (l && "object" == typeof l) { o = l; } } this.extensions = o || {}; } toJSON() { return { ...this, message: this.message }; } toString() { return this.message; } get [Symbol.toStringTag]() { return "GraphQLError"; } } var c; var h; function error(e) { return new GraphQLError(`Syntax Error: Unexpected token at ${h} in ${e}`); } function advance(e) { e.lastIndex = h; if (e.test(c)) { return c.slice(h, h = e.lastIndex); } } var d = / +(?=[^\s])/y; function blockString(e) { var t = e.split("\n"); var i = ""; var r = 0; var s = 0; var a = t.length - 1; for (var n = 0; n < t.length; n++) { d.lastIndex = 0; if (d.test(t[n])) { if (n && (!r || d.lastIndex < r)) { r = d.lastIndex; } s = s || n; a = n; } } for (var o = s; o <= a; o++) { if (o !== s) { i += "\n"; } i += t[o].slice(r).replace(/\\"""/g, '"""'); } return i; } function ignored() { for (var e = 0 | c.charCodeAt(h++); 9 === e || 10 === e || 13 === e || 32 === e || 35 === e || 44 === e || 65279 === e; e = 0 | c.charCodeAt(h++)) { if (35 === e) { while (10 !== (e = c.charCodeAt(h++)) && 13 !== e) {} } } h--; } var v = /[_A-Za-z]\w*/y; function name() { var e; if (e = advance(v)) { return { kind: "Name", value: e }; } } var g = /(?:null|true|false)/y; var m = /\$[_A-Za-z]\w*/y; var x = /-?\d+/y; var S = /(?:\.\d+)?[eE][+-]?\d+|\.\d+/y; var y = /\\/g; var T = /"""(?:"""|(?:[\s\S]*?[^\\])""")/y; var E = /"(?:"|[^\r\n]*?[^\\]")/y; function value(e) { var t; var i; if (i = advance(g)) { t = "null" === i ? { kind: "NullValue" } : { kind: "BooleanValue", value: "true" === i }; } else if (!e && (i = advance(m))) { t = { kind: "Variable", name: { kind: "Name", value: i.slice(1) } }; } else if (i = advance(x)) { var r = i; if (i = advance(S)) { t = { kind: "FloatValue", value: r + i }; } else { t = { kind: "IntValue", value: r }; } } else if (i = advance(v)) { t = { kind: "EnumValue", value: i }; } else if (i = advance(T)) { t = { kind: "StringValue", value: blockString(i.slice(3, -3)), block: !0 }; } else if (i = advance(E)) { t = { kind: "StringValue", value: y.test(i) ? JSON.parse(i) : i.slice(1, -1), block: !1 }; } else if (t = function list(e) { var t; if (91 === c.charCodeAt(h)) { h++; ignored(); var i = []; while (t = value(e)) { i.push(t); } if (93 !== c.charCodeAt(h++)) { throw error("ListValue"); } ignored(); return { kind: "ListValue", values: i }; } }(e) || function object(e) { if (123 === c.charCodeAt(h)) { h++; ignored(); var t = []; var i; while (i = name()) { ignored(); if (58 !== c.charCodeAt(h++)) { throw error("ObjectField"); } ignored(); var r = value(e); if (!r) { throw error("ObjectField"); } t.push({ kind: "ObjectField", name: i, value: r }); } if (125 !== c.charCodeAt(h++)) { throw error("ObjectValue"); } ignored(); return { kind: "ObjectValue", fields: t }; } }(e)) { return t; } ignored(); return t; } function arguments_(e) { var t = []; ignored(); if (40 === c.charCodeAt(h)) { h++; ignored(); var i; while (i = name()) { ignored(); if (58 !== c.charCodeAt(h++)) { throw error("Argument"); } ignored(); var r = value(e); if (!r) { throw error("Argument"); } t.push({ kind: "Argument", name: i, value: r }); } if (!t.length || 41 !== c.charCodeAt(h++)) { throw error("Argument"); } ignored(); } return t; } function directives(e) { var t = []; ignored(); while (64 === c.charCodeAt(h)) { h++; var i = name(); if (!i) { throw error("Directive"); } ignored(); t.push({ kind: "Directive", name: i, arguments: arguments_(e) }); } return t; } function field() { var e = name(); if (e) { ignored(); var t; if (58 === c.charCodeAt(h)) { h++; ignored(); t = e; if (!(e = name())) { throw error("Field"); } ignored(); } return { kind: "Field", alias: t, name: e, arguments: arguments_(!1), directives: directives(!1), selectionSet: selectionSet() }; } } function type() { var e; ignored(); if (91 === c.charCodeAt(h)) { h++; ignored(); var t = type(); if (!t || 93 !== c.charCodeAt(h++)) { throw error("ListType"); } e = { kind: "ListType", type: t }; } else if (e = name()) { e = { kind: "NamedType", name: e }; } else { throw error("NamedType"); } ignored(); if (33 === c.charCodeAt(h)) { h++; ignored(); return { kind: "NonNullType", type: e }; } else { return e; } } var A = /on/y; function typeCondition() { if (advance(A)) { ignored(); var e = name(); if (!e) { throw error("NamedType"); } ignored(); return { kind: "NamedType", name: e }; } } var b = /\.\.\./y; function fragmentSpread() { if (advance(b)) { ignored(); var e = h; var t; if ((t = name()) && "on" !== t.value) { return { kind: "FragmentSpread", name: t, directives: directives(!1) }; } else { h = e; var i = typeCondition(); var r = directives(!1); var s = selectionSet(); if (!s) { throw error("InlineFragment"); } return { kind: "InlineFragment", typeCondition: i, directives: r, selectionSet: s }; } } } function selectionSet() { var e; ignored(); if (123 === c.charCodeAt(h)) { h++; ignored(); var t = []; while (e = fragmentSpread() || field()) { t.push(e); } if (!t.length || 125 !== c.charCodeAt(h++)) { throw error("SelectionSet"); } ignored(); return { kind: "SelectionSet", selections: t }; } } var D = /fragment/y; function fragmentDefinition() { if (advance(D)) { ignored(); var e = name(); if (!e) { throw error("FragmentDefinition"); } ignored(); var t = typeCondition(); if (!t) { throw error("FragmentDefinition"); } var i = directives(!1); var r = selectionSet(); if (!r) { throw error("FragmentDefinition"); } return { kind: "FragmentDefinition", name: e, typeCondition: t, directives: i, selectionSet: r }; } } var w = /(?:query|mutation|subscription)/y; function operationDefinition() { var e; var t; var i = []; var r = []; if (e = advance(w)) { ignored(); t = name(); i = function variableDefinitions() { var e; var t = []; ignored(); if (40 === c.charCodeAt(h)) { h++; ignored(); while (e = advance(m)) { ignored(); if (58 !== c.charCodeAt(h++)) { throw error("VariableDefinition"); } var i = type(); var r = void 0; if (61 === c.charCodeAt(h)) { h++; ignored(); if (!(r = value(!0))) { throw error("VariableDefinition"); } } ignored(); t.push({ kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: e.slice(1) } }, type: i, defaultValue: r, directives: directives(!0) }); } if (41 !== c.charCodeAt(h++)) { throw error("VariableDefinition"); } ignored(); } return t; }(); r = directives(!1); } var s = selectionSet(); if (s) { return { kind: "OperationDefinition", operation: e || "query", name: t, variableDefinitions: i, directives: r, selectionSet: s }; } } function parse(e, t) { c = "string" == typeof e.body ? e.body : e; h = 0; return function document() { var e; ignored(); var t = []; while (e = fragmentDefinition() || operationDefinition()) { t.push(e); } return { kind: "Document", definitions: t }; }(); } var k = {}; function visit(e, t) { var i = []; var r = []; try { var s = function traverse(e, s, a) { var n = !1; var o = t[e.kind] && t[e.kind].enter || t[e.kind] || t.enter; var l = o && o.call(t, e, s, a, r, i); if (!1 === l) { return e; } else if (null === l) { return null; } else if (l === k) { throw k; } else if (l && "string" == typeof l.kind) { n = l !== e; e = l; } if (a) { i.push(a); } var u; var p = { ...e }; for (var f in e) { r.push(f); var c = e[f]; if (Array.isArray(c)) { var h = []; for (var d = 0; d < c.length; d++) { if (null != c[d] && "string" == typeof c[d].kind) { i.push(e); r.push(d); u = traverse(c[d], d, c); r.pop(); i.pop(); if (null == u) { n = !0; } else { n = n || u !== c[d]; h.push(u); } } } c = h; } else if (null != c && "string" == typeof c.kind) { if (void 0 !== (u = traverse(c, f, e))) { n = n || c !== u; c = u; } } r.pop(); if (n) { p[f] = c; } } if (a) { i.pop(); } var v = t[e.kind] && t[e.kind].leave || t.leave; var g = v && v.call(t, e, s, a, r, i); if (g === k) { throw k; } else if (void 0 !== g) { return g; } else if (void 0 !== l) { return n ? p : l; } else { return n ? p : e; } }(e); return void 0 !== s && !1 !== s ? s : e; } catch (t) { if (t !== k) { throw t; } return e; } } var hasItems = e => !(!e || !e.length); var F = { OperationDefinition(e) { if ("query" === e.operation && !e.name && !hasItems(e.variableDefinitions) && !hasItems(e.directives)) { return F.SelectionSet(e.selectionSet); } var t = e.operation; if (e.name) { t += " " + e.name.value; } if (hasItems(e.variableDefinitions)) { if (!e.name) { t += " "; } t += "(" + e.variableDefinitions.map(F.VariableDefinition).join(", ") + ")"; } if (hasItems(e.directives)) { t += " " + e.directives.map(F.Directive).join(" "); } return t + " " + F.SelectionSet(e.selectionSet); }, VariableDefinition(e) { var t = F.Variable(e.variable) + ": " + print(e.type); if (e.defaultValue) { t += " = " + print(e.defaultValue); } if (hasItems(e.directives)) { t += " " + e.directives.map(F.Directive).join(" "); } return t; }, Field(e) { var t = (e.alias ? e.alias.value + ": " : "") + e.name.value; if (hasItems(e.arguments)) { var i = e.arguments.map(F.Argument); var r = t + "(" + i.join(", ") + ")"; t = r.length > 80 ? t + "(\n " + i.join("\n").replace(/\n/g, "\n ") + "\n)" : r; } if (hasItems(e.directives)) { t += " " + e.directives.map(F.Directive).join(" "); } return e.selectionSet ? t + " " + F.SelectionSet(e.selectionSet) : t; }, StringValue: e => e.block ? function printBlockString(e) { return '"""\n' + e.replace(/"""/g, '\\"""') + '\n"""'; }(e.value) : function printString(e) { return JSON.stringify(e); }(e.value), BooleanValue: e => "" + e.value, NullValue: e => "null", IntValue: e => e.value, FloatValue: e => e.value, EnumValue: e => e.value, Name: e => e.value, Variable: e => "$" + e.name.value, ListValue: e => "[" + e.values.map(print).join(", ") + "]", ObjectValue: e => "{" + e.fields.map(F.ObjectField).join(", ") + "}", ObjectField: e => e.name.value + ": " + print(e.value), Document: e => hasItems(e.definitions) ? e.definitions.map(print).join("\n\n") : "", SelectionSet: e => "{\n " + e.selections.map(print).join("\n").replace(/\n/g, "\n ") + "\n}", Argument: e => e.name.value + ": " + print(e.value), FragmentSpread(e) { var t = "..." + e.name.value; if (hasItems(e.directives)) { t += " " + e.directives.map(F.Directive).join(" "); } return t; }, InlineFragment(e) { var t = "..."; if (e.typeCondition) { t += " on " + e.typeCondition.name.value; } if (hasItems(e.directives)) { t += " " + e.directives.map(F.Directive).join(" "); } return t + " " + print(e.selectionSet); }, FragmentDefinition(e) { var t = "fragment " + e.name.value; t += " on " + e.typeCondition.name.value; if (hasItems(e.directives)) { t += " " + e.directives.map(F.Directive).join(" "); } return t + " " + print(e.selectionSet); }, Directive(e) { var t = "@" + e.name.value; if (hasItems(e.arguments)) { t += "(" + e.arguments.map(F.Argument).join(", ") + ")"; } return t; }, NamedType: e => e.name.value, ListType: e => "[" + print(e.type) + "]", NonNullType: e => print(e.type) + "!" }; function print(e) { return F[e.kind] ? F[e.kind](e) : ""; } var C = new Set([ "gql", "graphql" ]); var isIIFE = e => exports.ts.isCallExpression(e) && 0 === e.arguments.length && (exports.ts.isFunctionExpression(e.expression) || exports.ts.isArrowFunction(e.expression)) && !e.expression.asteriskToken && !e.expression.modifiers?.length; var isGraphQLFunctionIdentifier = e => exports.ts.isIdentifier(e) && C.has(e.escapedText); var isTadaGraphQLFunction = (e, t) => { if (!exports.ts.isLeftHandSideExpression(e)) { return !1; } var i = t?.getTypeAtLocation(e); return null != i && null != i.getProperty("scalar") && null != i.getProperty("persisted"); }; var isTadaGraphQLCall = (e, t) => { if (!exports.ts.isCallExpression(e)) { return !1; } else if (e.arguments.length < 1 || e.arguments.length > 2) { return !1; } else if (!exports.ts.isStringLiteralLike(e.arguments[0])) { return !1; } return t ? isTadaGraphQLFunction(e.expression, t) : !1; }; var isTadaPersistedCall = (e, t) => { if (!e) { return !1; } else if (!exports.ts.isCallExpression(e)) { return !1; } else if (!exports.ts.isPropertyAccessExpression(e.expression)) { return !1; } else if (!exports.ts.isIdentifier(e.expression.name) || "persisted" !== e.expression.name.escapedText) { return !1; } else if (isGraphQLFunctionIdentifier(e.expression.expression)) { return !0; } else { return isTadaGraphQLFunction(e.expression.expression, t); } }; var isGraphQLCall = (e, t) => exports.ts.isCallExpression(e) && e.arguments.length >= 1 && e.arguments.length <= 2 && (isGraphQLFunctionIdentifier(e.expression) || isTadaGraphQLCall(e, t)); var isGraphQLTag = e => exports.ts.isTaggedTemplateExpression(e) && isGraphQLFunctionIdentifier(e.tag); var getSchemaName = (e, t, i = !1) => { if (!t) { return null; } var r = t.getTypeAtLocation(i ? e.getChildAt(0).getChildAt(0) : e.expression); if (r) { var s = r.getProperty("__name"); if (s) { var a = t.getTypeOfSymbol(s); if (a.isUnionOrIntersection()) { var n = a.types.find(e => e.isStringLiteral()); return n && n.isStringLiteral() ? n.value : null; } else if (a.isStringLiteral()) { return a.value; } } } return null; }; function isValueDeclaration(e) { switch (e.kind) { case exports.ts.SyntaxKind.BinaryExpression: case exports.ts.SyntaxKind.ArrowFunction: case exports.ts.SyntaxKind.BindingElement: case exports.ts.SyntaxKind.ClassDeclaration: case exports.ts.SyntaxKind.ClassExpression: case exports.ts.SyntaxKind.ClassStaticBlockDeclaration: case exports.ts.SyntaxKind.Constructor: case exports.ts.SyntaxKind.EnumDeclaration: case exports.ts.SyntaxKind.EnumMember: case exports.ts.SyntaxKind.ExportAssignment: case exports.ts.SyntaxKind.FunctionDeclaration: case exports.ts.SyntaxKind.FunctionExpression: case exports.ts.SyntaxKind.GetAccessor: case exports.ts.SyntaxKind.JsxAttribute: case exports.ts.SyntaxKind.MethodDeclaration: case exports.ts.SyntaxKind.Parameter: case exports.ts.SyntaxKind.PropertyAssignment: case exports.ts.SyntaxKind.PropertyDeclaration: case exports.ts.SyntaxKind.SetAccessor: case exports.ts.SyntaxKind.ShorthandPropertyAssignment: case exports.ts.SyntaxKind.VariableDeclaration: return !0; default: return !1; } } function getValueOfValueDeclaration(e) { switch (e.kind) { case exports.ts.SyntaxKind.ClassExpression: case exports.ts.SyntaxKind.ClassDeclaration: case exports.ts.SyntaxKind.ArrowFunction: case exports.ts.SyntaxKind.ClassStaticBlockDeclaration: case exports.ts.SyntaxKind.Constructor: case exports.ts.SyntaxKind.EnumDeclaration: case exports.ts.SyntaxKind.FunctionDeclaration: case exports.ts.SyntaxKind.FunctionExpression: case exports.ts.SyntaxKind.GetAccessor: case exports.ts.SyntaxKind.SetAccessor: case exports.ts.SyntaxKind.MethodDeclaration: return e; case exports.ts.SyntaxKind.BindingElement: case exports.ts.SyntaxKind.EnumMember: case exports.ts.SyntaxKind.JsxAttribute: case exports.ts.SyntaxKind.Parameter: case exports.ts.SyntaxKind.PropertyAssignment: case exports.ts.SyntaxKind.PropertyDeclaration: case exports.ts.SyntaxKind.VariableDeclaration: return e.initializer; case exports.ts.SyntaxKind.ExportAssignment: return e.expression; case exports.ts.SyntaxKind.BinaryExpression: return function isAssignmentOperator(e) { switch (e.kind) { case exports.ts.SyntaxKind.EqualsToken: case exports.ts.SyntaxKind.BarBarEqualsToken: case exports.ts.SyntaxKind.AmpersandAmpersandEqualsToken: case exports.ts.SyntaxKind.QuestionQuestionEqualsToken: return !0; default: return !1; } }(e.operatorToken) ? e.right : void 0; case exports.ts.SyntaxKind.ShorthandPropertyAssignment: return e.objectAssignmentInitializer; default: return; } } function climbPastPropertyOrElementAccess(e) { if (e.parent && exports.ts.isPropertyAccessExpression(e.parent) && e.parent.name === e) { return e.parent; } else if (e.parent && exports.ts.isElementAccessExpression(e.parent) && e.parent.argumentExpression === e) { return e.parent; } else { return e; } } function getNameFromPropertyName(e) { if (exports.ts.isComputedPropertyName(e)) { return exports.ts.isStringLiteralLike(e.expression) || exports.ts.isNumericLiteral(e.expression) ? e.expression.text : void 0; } else if (exports.ts.isPrivateIdentifier(e) || exports.ts.isMemberName(e)) { return exports.ts.idText(e); } else { return e.text; } } function getDeclarationOfIdentifier(e, t) { var i = t.getSymbolAtLocation(e); if (i?.declarations?.[0] && i.flags & exports.ts.SymbolFlags.Alias && (e.parent === i?.declarations?.[0] || !exports.ts.isNamespaceImport(i.declarations[0]))) { var r = t.getAliasedSymbol(i); if (r.declarations) { i = r; } } if (i && exports.ts.isShorthandPropertyAssignment(e.parent)) { var s = t.getShorthandAssignmentValueSymbol(i.valueDeclaration); if (s) { i = s; } } else if (exports.ts.isBindingElement(e.parent) && exports.ts.isObjectBindingPattern(e.parent.parent) && e === (e.parent.propertyName || e.parent.name)) { var a = getNameFromPropertyName(e); var n = a ? t.getTypeAtLocation(e.parent.parent).getProperty(a) : void 0; if (n) { i = n; } } else if (exports.ts.isObjectLiteralElement(e.parent) && (exports.ts.isObjectLiteralExpression(e.parent.parent) || exports.ts.isJsxAttributes(e.parent.parent)) && e.parent.name === e) { var o = getNameFromPropertyName(e); var l = o ? t.getContextualType(e.parent.parent)?.getProperty(o) : void 0; if (l) { i = l; } } if (i && i.declarations?.length) { if (i.flags & exports.ts.SymbolFlags.Class && !(i.flags & (exports.ts.SymbolFlags.Function | exports.ts.SymbolFlags.Variable)) && function isNewExpressionTarget(e) { var t = climbPastPropertyOrElementAccess(e).parent; return exports.ts.isNewExpression(t) && t.expression === e; }(e)) { for (var u of i.declarations) { if (exports.ts.isClassLike(u)) { return u; } } } else if (function isCallOrNewExpressionTarget(e) { var t = climbPastPropertyOrElementAccess(e).parent; return exports.ts.isCallOrNewExpression(t) && t.expression === e; }(e) || function isNameOfFunctionDeclaration(e) { return exports.ts.isIdentifier(e) && e.parent && exports.ts.isFunctionLike(e.parent) && e.parent.name === e; }(e)) { for (var p of i.declarations) { if (exports.ts.isFunctionLike(p) && p.body && isValueDeclaration(p)) { return p; } } } if (i.valueDeclaration && exports.ts.isPropertyAccessExpression(i.valueDeclaration)) { var f = i.valueDeclaration.parent; if (f && exports.ts.isBinaryExpression(f) && f.left === i.valueDeclaration) { return f; } } if (i.valueDeclaration && isValueDeclaration(i.valueDeclaration)) { return i.valueDeclaration; } for (var c of i.declarations) { if (isValueDeclaration(c)) { return c; } } } return; } function getValueOfIdentifier(e, t) { while (exports.ts.isIdentifier(e)) { var i = getDeclarationOfIdentifier(e, t); if (!i) { return; } else { var r = getValueOfValueDeclaration(i); if (r && exports.ts.isIdentifier(r) && r !== e) { e = r; } else { return r; } } } } function resolveTemplate(e, t, i) { if (exports.ts.isStringLiteralLike(e)) { return { combinedText: e.getText().slice(1, -1), resolvedSpans: [] }; } var r = e.template.getText().slice(1, -1); if (exports.ts.isNoSubstitutionTemplateLiteral(e.template) || 0 === e.template.templateSpans.length) { return { combinedText: r, resolvedSpans: [] }; } var s = 0; var a = e.template.templateSpans.map(e => { if (exports.ts.isIdentifier(e.expression)) { var t = i.languageService.getProgram()?.getTypeChecker(); if (!t) { return; } var a = getDeclarationOfIdentifier(e.expression, t); if (!a) { return; } var n = a; if (exports.ts.isVariableDeclaration(n)) { var o = e.expression.escapedText; var l = getValueOfValueDeclaration(n); if (!l) { return; } var u = e.expression.getStart() - 2; var p = { start: u, length: e.expression.end - u + 1 }; if (exports.ts.isTaggedTemplateExpression(l)) { var f = resolveTemplate(l, n.getSourceFile().fileName, i); r = r.replace("${" + e.expression.escapedText + "}", f.combinedText); var c = { lines: f.combinedText.split("\n").length, identifier: o, original: p, new: { start: p.start + s, length: f.combinedText.length } }; s += f.combinedText.length - p.length; return c; } else if (exports.ts.isAsExpression(l) && exports.ts.isTaggedTemplateExpression(l.expression)) { var h = resolveTemplate(l.expression, n.getSourceFile().fileName, i); r = r.replace("${" + e.expression.escapedText + "}", h.combinedText); var d = { lines: h.combinedText.split("\n").length, identifier: o, original: p, new: { start: p.start + s, length: h.combinedText.length } }; s += h.combinedText.length - p.length; return d; } else if (exports.ts.isAsExpression(l) && exports.ts.isAsExpression(l.expression) && exports.ts.isObjectLiteralExpression(l.expression.expression)) { var v = print(JSON.parse(l.expression.expression.getText())); r = r.replace("${" + e.expression.escapedText + "}", v); var g = { lines: v.split("\n").length, identifier: o, original: p, new: { start: p.start + s, length: v.length } }; s += v.length - p.length; return g; } return; } } return; }).filter(Boolean); return { combinedText: r, resolvedSpans: a }; } var resolveTadaFragmentArray = e => { if (!e) { return; } while (exports.ts.isAsExpression(e)) { e = e.expression; } if (!exports.ts.isArrayLiteralExpression(e)) { return; } if (e.elements.every(exports.ts.isIdentifier)) { return e.elements; } var t = []; for (var i of e.elements) { while (exports.ts.isPropertyAccessExpression(i)) { i = i.name; } if (exports.ts.isIdentifier(i)) { t.push(i); } } return t; }; function getSource(e, t) { var i = e.languageService.getProgram(); if (!i) { return; } var r = i.getSourceFile(t); if (!r) { return; } return r; } function findNode(e, t) { return function find(e) { if (t >= e.getStart() && t < e.getEnd()) { return exports.ts.forEachChild(e, find) || e; } }(e); } function unrollFragment(t, i, r) { var s = []; var a = [ t ]; var n = new WeakSet; var _unrollElement = t => { if (n.has(t)) { return; } n.add(t); var i = function resolveIdentifierToGraphQLCall(e, t, i) { if (!i) { return null; } var r = getValueOfIdentifier(e, i); if (!r) { return null; } return isGraphQLCall(r, i) ? r : null; }(t, 0, r); if (!i) { return; } var o = resolveTadaFragmentArray(i.arguments[1]); if (o) { a.push(...o); } try { e.parse(i.arguments[0].getText().slice(1, -1), { noLocation: !0 }).definitions.forEach(e => { if ("FragmentDefinition" === e.kind) { s.push(e); } }); } catch (e) {} }; var o; while (void 0 !== (o = a.shift())) { _unrollElement(o); } return s; } function unrollTadaFragments(e, t, i) { var r = i.languageService.getProgram()?.getTypeChecker(); e.elements.forEach(e => { if (exports.ts.isIdentifier(e)) { t.push(...unrollFragment(e, 0, r)); } else if (exports.ts.isPropertyAccessExpression(e)) { var i = e; while (exports.ts.isPropertyAccessExpression(i.expression)) { i = i.expression; } if (exports.ts.isIdentifier(i.name)) { t.push(...unrollFragment(i.name, 0, r)); } } }); return t; } function findAllCallExpressions(e, t, i = !0) { var r = t.languageService.getProgram()?.getTypeChecker(); var s = []; var a = []; var n = i ? !1 : !0; !function find(e) { if (!exports.ts.isCallExpression(e) || isIIFE(e)) { return exports.ts.forEachChild(e, find); } if (!isGraphQLCall(e, r)) { return exports.ts.forEachChild(e, find); } var i = getSchemaName(e, r); var o = e.arguments[0]; var l = resolveTadaFragmentArray(e.arguments[1]); var u = isTadaGraphQLCall(e, r); if (!n && !l) { if (!u) { n = !0; a.push(...getAllFragments(e, t)); } } else if (l) { for (var p of l) { a.push(...unrollFragment(p, 0, r)); } } if (o && exports.ts.isStringLiteralLike(o)) { s.push({ node: o, schema: i, tadaFragmentRefs: u ? void 0 === l ? [] : l : void 0 }); } }(e); return { nodes: s, fragments: a }; } function findAllPersistedCallExpressions(e, t) { var i = []; var r = t?.languageService.getProgram()?.getTypeChecker(); !function find(e) { if (!exports.ts.isCallExpression(e) || isIIFE(e)) { return exports.ts.forEachChild(e, find); } if (!isTadaPersistedCall(e, r)) { return; } else if (t) { var s = getSchemaName(e, r, !0); i.push({ node: e, schema: s }); } else { i.push(e); } }(e); return i; } function getAllFragments(t, i) { var r = []; var s = i.languageService.getProgram()?.getTypeChecker(); if (!exports.ts.isCallExpression(t)) { return r; } var a = resolveTadaFragmentArray(t.arguments[1]); if (a) { var n = i.languageService.getProgram()?.getTypeChecker(); for (var o of a) { r.push(...unrollFragment(o, 0, n)); } return r; } else if (isTadaGraphQLCall(t, s)) { return r; } if (!s) { return r; } var l =