UNPKG

@0no-co/graphqlsp

Version:

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

2,009 lines (1,884 loc) 104 kB
import { Kind as e, specifiedRules as t, NoUnusedFragmentsRule as i, ExecutableDefinitionsRule as r, KnownFragmentNamesRule as a, validate as n, LoneSchemaDefinitionRule as s, UniqueOperationTypesRule as o, UniqueTypeNamesRule as l, UniqueEnumValueNamesRule as u, UniqueFieldDefinitionNamesRule as h, UniqueDirectiveNamesRule as f, KnownTypeNamesRule as c, KnownDirectivesRule as p, UniqueDirectivesPerLocationRule as v, PossibleTypeExtensionsRule as d, UniqueArgumentNamesRule as g, UniqueInputFieldNamesRule as m, print as S, parse as y, GraphQLError as x, NoDeprecatedCustomRule as T, visit as E } from "graphql"; import { createHash as A } from "crypto"; var b; function init(e) { b = e.typescript; } 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 a = null; if ("string" == typeof e) { a = 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 == (a = this._sourceText.slice(this._pos).match(e)) ? void 0 : a[0]; } if (null != a && ("string" == typeof e || a instanceof Array && this._sourceText.startsWith(a[0], this._pos))) { if (t) { this._start = this._pos; if (r && r.length) { this._pos += r.length; } } return a; } 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 w = { 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 k = { 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.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.SCHEMA_EXTENSION; case "scalar": return e.SCALAR_TYPE_EXTENSION; case "type": return e.OBJECT_TYPE_EXTENSION; case "interface": return e.INTERFACE_TYPE_EXTENSION; case "union": return e.UNION_TYPE_EXTENSION; case "enum": return e.ENUM_TYPE_EXTENSION; case "input": return e.INPUT_OBJECT_TYPE_EXTENSION; } }, [e.SCHEMA_EXTENSION]: [ "SchemaDef" ], [e.SCALAR_TYPE_EXTENSION]: [ "ScalarDef" ], [e.OBJECT_TYPE_EXTENSION]: [ "ObjectTypeDef" ], [e.INTERFACE_TYPE_EXTENSION]: [ "InterfaceDef" ], [e.UNION_TYPE_EXTENSION]: [ "UnionDef" ], [e.ENUM_TYPE_EXTENSION]: [ "EnumDef" ], [e.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: w, parseRules: k, 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.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: s, editorConfig: o} = i; if (t.rule && 0 === t.rule.length) { popRule(t); } else if (t.needsAdvance) { t.needsAdvance = !1; advanceRule(t, !0); } if (e.sol()) { var l = (null == o ? void 0 : o.tabSize) || 2; t.indentLevel = Math.floor(e.indentation() / l); } if (s(e)) { return "ws"; } var u = function lex(e, t) { var i = Object.keys(e); for (var r = 0; r < i.length; r++) { var a = t.match(e[i[r]]); if (a && a instanceof Array) { return { kind: i[r], value: a[0] }; } } }(a, e); if (!u) { if (!e.match(/\S+/)) { e.match(/\s/); } pushRule(D, t, "Invalid"); return "invalidchar"; } if ("Comment" === u.kind) { pushRule(D, t, "Comment"); return "comment"; } var h = assign({}, t); if ("Punctuation" === u.kind) { if (/^[{([]/.test(u.value)) { if (void 0 !== t.indentLevel) { t.levels = (t.levels || []).concat(t.indentLevel + 1); } } else if (/^[})\]]/.test(u.value)) { var f = t.levels = (t.levels || []).slice(0, -1); if (t.indentLevel && f.length > 0 && f.at(-1) < t.indentLevel) { t.indentLevel = f.at(-1); } } } while (t.rule) { var c = "function" == typeof t.rule ? 0 === t.step ? t.rule(u, e) : null : t.rule[t.step]; if (t.needsSeparator) { c = null == c ? void 0 : c.separator; } if (c) { if (c.ofRule) { c = c.ofRule; } if ("string" == typeof c) { pushRule(n, t, c); continue; } if (null === (r = c.match) || void 0 === r ? void 0 : r.call(c, u)) { if (c.update) { c.update(t, u); } if ("Punctuation" === u.kind) { advanceRule(t, !0); } else { t.needsAdvance = !0; } return c.style; } } unsuccessful(t); } assign(t, h); pushRule(D, 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 D = { 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: a} = r; e.needsSeparator = !e.needsSeparator; if (!e.needsSeparator && a.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 L = [ s, o, l, u, h, f, c, p, v, d, g, m ]; var _ = { ["Error"]: 1, ["Warning"]: 2, ["Information"]: 3, ["Hint"]: 4 }; var invariant = (e, t) => { if (!e) { throw new Error(t); } }; function getDiagnostics(s, o = null, l, u, h) { var f, c; var p = null; var v = ""; if (h) { v = "string" == typeof h ? h : h.reduce(((e, t) => e + S(t) + "\n\n"), ""); } var d = v ? `${s}\n\n${v}` : s; try { p = y(d); } catch (e) { if (e instanceof x) { var g = function getRange(e, t) { var i = onlineParser(); var r = i.startState(); var a = t.split("\n"); invariant(a.length >= e.line, "Query text must have more lines than where the error happened"); var n = null; for (var s = 0; s < e.line; s++) { n = new CharacterStream(a[s]); while (!n.eol()) { if ("invalidchar" === i.token(n, r)) { break; } } } invariant(n, "Expected Parser stream to be available."); var o = e.line - 1; var l = n.getStartOfToken(); var u = n.getCurrentPosition(); return new Range(new Position(o, l), new Position(o, u)); }(null !== (c = null === (f = e.locations) || void 0 === f ? void 0 : f[0]) && void 0 !== c ? c : { line: 0, column: 0 }, d); return [ { severity: _.Error, message: e.message, source: "GraphQL: Syntax", range: g } ]; } throw e; } return function validateQuery(s, o = null, l, u) { if (!o) { return []; } var h = function validateWithCustomRules(s, o, l, u, h) { var f = t.filter((e => { if (e === i || e === r) { return !1; } if (u && e === a) { return !1; } return !0; })); if (l) { Array.prototype.push.apply(f, l); } if (h) { Array.prototype.push.apply(f, L); } return n(s, o, f).filter((t => { if (t.message.includes("Unknown directive") && t.nodes) { var i = t.nodes[0]; if (i && i.kind === e.DIRECTIVE) { var r = i.name.value; if ("arguments" === r || "argumentDefinitions" === r) { return !1; } } } return !0; })); }(o, s, l, u).flatMap((e => annotations(e, _.Error, "Validation"))); var f = n(o, s, [ T ]).flatMap((e => annotations(e, _.Warning, "Deprecation"))); return h.concat(f); }(p, o, l, u); } function annotations(e, t, i) { if (!e.nodes) { return []; } var r = []; for (var [a, n] of e.nodes.entries()) { var s = "Variable" !== n.kind && "name" in n && void 0 !== n.name ? n.name : "variable" in n && void 0 !== n.variable ? n.variable : n; if (s) { invariant(e.locations, "GraphQL validation error requires locations."); var o = e.locations[a]; var l = getLocation(s); 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 C = "FragmentDefinition"; class GraphQLError extends Error { constructor(e, t, i, r, a, n, s) { super(e); this.name = "GraphQLError"; this.message = e; if (a) { this.path = a; } if (t) { this.nodes = Array.isArray(t) ? t : [ t ]; } if (i) { this.source = i; } if (r) { this.positions = r; } if (n) { this.originalError = n; } var o = s; if (!o && n) { var l = n.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 F; var N; function error(e) { return new GraphQLError(`Syntax Error: Unexpected token at ${N} in ${e}`); } function advance(e) { e.lastIndex = N; if (e.test(F)) { return F.slice(N, N = e.lastIndex); } } var z = / +(?=[^\s])/y; function blockString(e) { var t = e.split("\n"); var i = ""; var r = 0; var a = 0; var n = t.length - 1; for (var s = 0; s < t.length; s++) { z.lastIndex = 0; if (z.test(t[s])) { if (s && (!r || z.lastIndex < r)) { r = z.lastIndex; } a = a || s; n = s; } } for (var o = a; o <= n; o++) { if (o !== a) { i += "\n"; } i += t[o].slice(r).replace(/\\"""/g, '"""'); } return i; } function ignored() { for (var e = 0 | F.charCodeAt(N++); 9 === e || 10 === e || 13 === e || 32 === e || 35 === e || 44 === e || 65279 === e; e = 0 | F.charCodeAt(N++)) { if (35 === e) { while (10 !== (e = F.charCodeAt(N++)) && 13 !== e) {} } } N--; } var O = /[_A-Za-z]\w*/y; function name() { var e; if (e = advance(O)) { return { kind: "Name", value: e }; } } var I = /(?:null|true|false)/y; var $ = /\$[_A-Za-z]\w*/y; var P = /-?\d+/y; var R = /(?:\.\d+)?[eE][+-]?\d+|\.\d+/y; var V = /\\/g; var j = /"""(?:"""|(?:[\s\S]*?[^\\])""")/y; var W = /"(?:"|[^\r\n]*?[^\\]")/y; function value(e) { var t; var i; if (i = advance(I)) { t = "null" === i ? { kind: "NullValue" } : { kind: "BooleanValue", value: "true" === i }; } else if (!e && (i = advance($))) { t = { kind: "Variable", name: { kind: "Name", value: i.slice(1) } }; } else if (i = advance(P)) { var r = i; if (i = advance(R)) { t = { kind: "FloatValue", value: r + i }; } else { t = { kind: "IntValue", value: r }; } } else if (i = advance(O)) { t = { kind: "EnumValue", value: i }; } else if (i = advance(j)) { t = { kind: "StringValue", value: blockString(i.slice(3, -3)), block: !0 }; } else if (i = advance(W)) { t = { kind: "StringValue", value: V.test(i) ? JSON.parse(i) : i.slice(1, -1), block: !1 }; } else if (t = function list(e) { var t; if (91 === F.charCodeAt(N)) { N++; ignored(); var i = []; while (t = value(e)) { i.push(t); } if (93 !== F.charCodeAt(N++)) { throw error("ListValue"); } ignored(); return { kind: "ListValue", values: i }; } }(e) || function object(e) { if (123 === F.charCodeAt(N)) { N++; ignored(); var t = []; var i; while (i = name()) { ignored(); if (58 !== F.charCodeAt(N++)) { throw error("ObjectField"); } ignored(); var r = value(e); if (!r) { throw error("ObjectField"); } t.push({ kind: "ObjectField", name: i, value: r }); } if (125 !== F.charCodeAt(N++)) { throw error("ObjectValue"); } ignored(); return { kind: "ObjectValue", fields: t }; } }(e)) { return t; } ignored(); return t; } function arguments_(e) { var t = []; ignored(); if (40 === F.charCodeAt(N)) { N++; ignored(); var i; while (i = name()) { ignored(); if (58 !== F.charCodeAt(N++)) { 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 !== F.charCodeAt(N++)) { throw error("Argument"); } ignored(); } return t; } function directives(e) { var t = []; ignored(); while (64 === F.charCodeAt(N)) { N++; 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 === F.charCodeAt(N)) { N++; 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 === F.charCodeAt(N)) { N++; ignored(); var t = type(); if (!t || 93 !== F.charCodeAt(N++)) { throw error("ListType"); } e = { kind: "ListType", type: t }; } else if (e = name()) { e = { kind: "NamedType", name: e }; } else { throw error("NamedType"); } ignored(); if (33 === F.charCodeAt(N)) { N++; ignored(); return { kind: "NonNullType", type: e }; } else { return e; } } var M = /on/y; function typeCondition() { if (advance(M)) { 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 = N; var t; if ((t = name()) && "on" !== t.value) { return { kind: "FragmentSpread", name: t, directives: directives(!1) }; } else { N = e; var i = typeCondition(); var r = directives(!1); var a = selectionSet(); if (!a) { throw error("InlineFragment"); } return { kind: "InlineFragment", typeCondition: i, directives: r, selectionSet: a }; } } } function selectionSet() { var e; ignored(); if (123 === F.charCodeAt(N)) { N++; ignored(); var t = []; while (e = fragmentSpread() || field()) { t.push(e); } if (!t.length || 125 !== F.charCodeAt(N++)) { throw error("SelectionSet"); } ignored(); return { kind: "SelectionSet", selections: t }; } } var U = /fragment/y; function fragmentDefinition() { if (advance(U)) { 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 G = /(?:query|mutation|subscription)/y; function operationDefinition() { var e; var t; var i = []; var r = []; if (e = advance(G)) { ignored(); t = name(); i = function variableDefinitions() { var e; var t = []; ignored(); if (40 === F.charCodeAt(N)) { N++; ignored(); while (e = advance($)) { ignored(); if (58 !== F.charCodeAt(N++)) { throw error("VariableDefinition"); } var i = type(); var r = void 0; if (61 === F.charCodeAt(N)) { N++; 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 !== F.charCodeAt(N++)) { throw error("VariableDefinition"); } ignored(); } return t; }(); r = directives(!1); } var a = selectionSet(); if (a) { return { kind: "OperationDefinition", operation: e || "query", name: t, variableDefinitions: i, directives: r, selectionSet: a }; } } function parse(e, t) { F = "string" == typeof e.body ? e.body : e; N = 0; return function document() { var e; ignored(); var t = []; while (e = fragmentDefinition() || operationDefinition()) { t.push(e); } return { kind: "Document", definitions: t }; }(); } var Q = {}; function visit(e, t) { var i = []; var r = []; try { var a = function traverse(e, a, n) { var s = !1; var o = t[e.kind] && t[e.kind].enter || t[e.kind] || t.enter; var l = o && o.call(t, e, a, n, r, i); if (!1 === l) { return e; } else if (null === l) { return null; } else if (l === Q) { throw Q; } else if (l && "string" == typeof l.kind) { s = l !== e; e = l; } if (n) { i.push(n); } var u; var h = { ...e }; for (var f in e) { r.push(f); var c = e[f]; if (Array.isArray(c)) { var p = []; for (var v = 0; v < c.length; v++) { if (null != c[v] && "string" == typeof c[v].kind) { i.push(e); r.push(v); u = traverse(c[v], v, c); r.pop(); i.pop(); if (null == u) { s = !0; } else { s = s || u !== c[v]; p.push(u); } } } c = p; } else if (null != c && "string" == typeof c.kind) { if (void 0 !== (u = traverse(c, f, e))) { s = s || c !== u; c = u; } } r.pop(); if (s) { h[f] = c; } } if (n) { i.pop(); } var d = t[e.kind] && t[e.kind].leave || t.leave; var g = d && d.call(t, e, a, n, r, i); if (g === Q) { throw Q; } else if (void 0 !== g) { return g; } else if (void 0 !== l) { return s ? h : l; } else { return s ? h : e; } }(e); return void 0 !== a && !1 !== a ? a : e; } catch (t) { if (t !== Q) { throw t; } return e; } } var hasItems = e => !(!e || !e.length); var q = { OperationDefinition(e) { if ("query" === e.operation && !e.name && !hasItems(e.variableDefinitions) && !hasItems(e.directives)) { return q.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(q.VariableDefinition).join(", ") + ")"; } if (hasItems(e.directives)) { t += " " + e.directives.map(q.Directive).join(" "); } return t + " " + q.SelectionSet(e.selectionSet); }, VariableDefinition(e) { var t = q.Variable(e.variable) + ": " + print(e.type); if (e.defaultValue) { t += " = " + print(e.defaultValue); } if (hasItems(e.directives)) { t += " " + e.directives.map(q.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(q.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(q.Directive).join(" "); } return e.selectionSet ? t + " " + q.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(q.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(q.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(q.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(q.Directive).join(" "); } return t + " " + print(e.selectionSet); }, Directive(e) { var t = "@" + e.name.value; if (hasItems(e.arguments)) { t += "(" + e.arguments.map(q.Argument).join(", ") + ")"; } return t; }, NamedType: e => e.name.value, ListType: e => "[" + print(e.type) + "]", NonNullType: e => print(e.type) + "!" }; function print(e) { return q[e.kind] ? q[e.kind](e) : ""; } var H = new Set([ "gql", "graphql" ]); var isIIFE = e => b.isCallExpression(e) && 0 === e.arguments.length && (b.isFunctionExpression(e.expression) || b.isArrowFunction(e.expression)) && !e.expression.asteriskToken && !e.expression.modifiers?.length; var isGraphQLFunctionIdentifier = e => b.isIdentifier(e) && H.has(e.escapedText); var isTadaGraphQLFunction = (e, t) => { if (!b.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 (!b.isCallExpression(e)) { return !1; } else if (e.arguments.length < 1 || e.arguments.length > 2) { return !1; } else if (!b.isStringLiteralLike(e.arguments[0])) { return !1; } return t ? isTadaGraphQLFunction(e.expression, t) : !1; }; var isTadaPersistedCall = (e, t) => { if (!e) { return !1; } else if (!b.isCallExpression(e)) { return !1; } else if (!b.isPropertyAccessExpression(e.expression)) { return !1; } else if (!b.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) => b.isCallExpression(e) && e.arguments.length >= 1 && e.arguments.length <= 2 && (isGraphQLFunctionIdentifier(e.expression) || isTadaGraphQLCall(e, t)); var isGraphQLTag = e => b.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 a = r.getProperty("__name"); if (a) { var n = t.getTypeOfSymbol(a); if (n.isUnionOrIntersection()) { var s = n.types.find((e => e.isStringLiteral())); return s && s.isStringLiteral() ? s.value : null; } else if (n.isStringLiteral()) { return n.value; } } } return null; }; function resolveTemplate(e, t, i) { if (b.isStringLiteralLike(e)) { return { combinedText: e.getText().slice(1, -1), resolvedSpans: [] }; } var r = e.template.getText().slice(1, -1); if (b.isNoSubstitutionTemplateLiteral(e.template) || 0 === e.template.templateSpans.length) { return { combinedText: r, resolvedSpans: [] }; } var a = 0; var n = e.template.templateSpans.map((e => { if (b.isIdentifier(e.expression)) { var n = i.languageService.getDefinitionAtPosition(t, e.expression.getStart()); var s = n && n[0]; if (!s) { return; } var o = getSource(i, s.fileName); if (!o) { return; } var l = findNode(o, s.textSpan.start); if (!l || !l.parent) { return; } var u = l.parent; if (b.isVariableDeclaration(u)) { var h = e.expression.escapedText; var f = e.expression.getStart() - 2; var c = { start: f, length: e.expression.end - f + 1 }; if (u.initializer && b.isTaggedTemplateExpression(u.initializer)) { var p = resolveTemplate(u.initializer, s.fileName, i); r = r.replace("${" + e.expression.escapedText + "}", p.combinedText); var v = { lines: p.combinedText.split("\n").length, identifier: h, original: c, new: { start: c.start + a, length: p.combinedText.length } }; a += p.combinedText.length - c.length; return v; } else if (u.initializer && b.isAsExpression(u.initializer) && b.isTaggedTemplateExpression(u.initializer.expression)) { var d = resolveTemplate(u.initializer.expression, s.fileName, i); r = r.replace("${" + e.expression.escapedText + "}", d.combinedText); var g = { lines: d.combinedText.split("\n").length, identifier: h, original: c, new: { start: c.start + a, length: d.combinedText.length } }; a += d.combinedText.length - c.length; return g; } else if (u.initializer && b.isAsExpression(u.initializer) && b.isAsExpression(u.initializer.expression) && b.isObjectLiteralExpression(u.initializer.expression.expression)) { var m = print(JSON.parse(u.initializer.expression.expression.getText())); r = r.replace("${" + e.expression.escapedText + "}", m); var S = { lines: m.split("\n").length, identifier: h, original: c, new: { start: c.start + a, length: m.length } }; a += m.length - c.length; return S; } return; } } return; })).filter(Boolean); return { combinedText: r, resolvedSpans: n }; } var resolveTadaFragmentArray = e => { if (!e) { return; } while (b.isAsExpression(e)) { e = e.expression; } if (!b.isArrayLiteralExpression(e)) { return; } if (e.elements.every(b.isIdentifier)) { return e.elements; } var t = []; for (var i of e.elements) { while (b.isPropertyAccessExpression(i)) { i = i.name; } if (b.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 b.forEachChild(e, find) || e; } }(e); } function unrollFragment(e, t, i) { var r = []; var a = [ e ]; var n = new WeakSet; var _unrollElement = e => { if (n.has(e)) { return; } n.add(e); var s = function resolveIdentifierToGraphQLCall(e, t, i) { var r; var a = e; while (b.isIdentifier(a) && a !== r) { r = a; var n = t.languageService.getDefinitionAtPosition(a.getSourceFile().fileName, a.getStart()); var s = n && n[0]; var o = s && getSource(t, s.fileName); if (!s || !o) { return null; } if (!(a = findNode(o, s.textSpan.start))) { return null; } while (b.isPropertyAccessExpression(a.parent)) { a = a.parent; } if (b.isVariableDeclaration(a.parent) && a.parent.initializer && b.isCallExpression(a.parent.initializer)) { a = a.parent.initializer; } else if (b.isPropertyAssignment(a.parent)) { a = a.parent.initializer; } else if (b.isBinaryExpression(a.parent)) { a = b.isPropertyAccessExpression(a.parent.right) ? a.parent.right.name : a.parent.right; } } return isGraphQLCall(a, i) ? a : null; }(e, t, i); if (!s) { return; } var o = resolveTadaFragmentArray(s.arguments[1]); if (o) { a.push(...o); } try { y(s.arguments[0].getText().slice(1, -1), { noLocation: !0 }).definitions.forEach((e => { if ("FragmentDefinition" === e.kind) { r.push(e); } })); } catch (e) {} }; var s; while (void 0 !== (s = a.shift())) { _unrollElement(s); } return r; } function unrollTadaFragments(e, t, i) { var r = i.languageService.getProgram()?.getTypeChecker(); e.elements.forEach((e => { if (b.isIdentifier(e)) { t.push(...unrollFragment(e, i, r)); } else if (b.isPropertyAccessExpression(e)) { var a = e; while (b.isPropertyAccessExpression(a.expression)) { a = a.expression; } if (b.isIdentifier(a.name)) { t.push(...unrollFragment(a.name, i, r)); } } })); return t; } function findAllCallExpressions(e, t, i = !0) { var r = t.languageService.getProgram()?.getTypeChecker(); var a = []; var n = []; var s = i ? !1 : !0; !function find(i) { if (!b.isCallExpression(i) || isIIFE(i)) { return b.forEachChild(i, find); } if (!isGraphQLCall(i, r)) { return b.forEachChild(i, find); } var o = getSchemaName(i, r); var l = i.arguments[0]; var u = resolveTadaFragmentArray(i.arguments[1]); if (!s && !u) { s = !0; n.push(...getAllFragments(e.fileName, i, t)); } else if (u) { for (var h of u) { n.push(...unrollFragment(h, t, r)); } } if (l && b.isStringLiteralLike(l)) { a.push({ node: l, schema: o }); } }(e); return { nodes: a, fragments: n }; } function findAllPersistedCallExpressions(e, t) { var i = []; var r = t?.languageService.getProgram()?.getTypeChecker(); !function find(e) { if (!b.isCallExpression(e) || isIIFE(e)) { return b.forEachChild(e, find); } if (!isTadaPersistedCall(e, r)) { return; } else if (t) { var a = getSchemaName(e, r, !0); i.push({ node: e, schema: a }); } else { i.push(e); } }(e); return i; } function getAllFragments(e, t, i) { var r = []; var a = i.languageService.getProgram()?.getTypeChecker(); if (!b.isCallExpression(t)) { return r; } var n = resolveTadaFragmentArray(t.arguments[1]); if (n) { var s = i.languageService.getProgram()?.getTypeChecker(); for (var o of n) { r.push(...unrollFragment(o, i, s)); } return r; } else if (isTadaGraphQLCall(t, a)) { return r; } var l = i.languageService.getDefinitionAtPosition(e, t.expression.getStart()); if (!l || !l.length) { return r; } var u = l[0]; if (!u) { return r; } var h = getSource(i, u.fileName); if (!h) { return r; } b.forEachChild(h, (e => { if (b.isVariableStatement(e) && e.declarationList && e.declarationList.declarations[0] && "documents" === e.declarationList.declarations[0].name.getText()) { var [t] = e.declarationList.declarations; if (t.initializer && b.isObjectLiteralExpression(t.initializer)) { t.initializer.properties.forEach((e => { if (b.isPropertyAssignment(e) && b.isStringLiteral(e.name)) { try { var t = JSON.parse(`${e.name.getText().replace(/'/g, '"')}`); if (t.includes("fragment ") && t.includes(" on ")) { y(t, { noLocation: !0 }).definitions.forEach((e => { if ("FragmentDefinition" === e.kind) { r.push(e); } })); } } catch (e) {} } })); } } })); return r; } function bubbleUpTemplate(e) { while (b.isNoSubstitutionTemplateLiteral(e) || b.isToken(e) || b.isTemplateExpression(e) || b.isTemplateSpan(e)) { e = e.parent; } return e; } function bubbleUpCallExpression(e) { while (b.isStringLiteralLike(e) || b.isToken(e) || b.isTemplateExpression(e) || b.isTemplateSpan(e)) { e = e.parent; } return e; } var X = "object" == typeof performance && performance && "function" == typeof performance.now ? performance : Date; var Y = new Set; var J = "object" == typeof process && process ? process : {}; var emitWarning = (e, t, i, r) => { "function" == typeof J.emitWarning ? J.emitWarning(e, t, i, r) : console.error(`[${i}] ${t}: ${e}`); }; var Z = globalThis.AbortController; var K = globalThis.AbortSignal; if (void 0 === Z) { K = class AbortSignal { _onabort=[]; aborted=!1; addEventListener(e, t) { this._onabort.push(t); } }; Z = class AbortController { constructor() { warnACPolyfill(); } signal=new K; abort(e) { if (this.signal.aborted) { return; } this.signal.reason = e; this.signal.aborted = !0; for (var t of this.signal._onabort) { t(e); } this.signal.onabort?.(e); } }; var ee = "1" !== J.env?.LRU_CACHE_IGNORE_AC_WARNING; var warnACPolyfill = () => { if (!ee) { return; } ee = !1; emitWarning("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.", "NO_ABORT_CONTROLLER", "ENOTSUP", warnACPolyfill); }; } var isPosInt = e => e && e === Math.floor(e) && e > 0 && isFinite(e); var getUintArray = e => !isPosInt(e) ? null : e <= Math.pow(2, 8) ? Uint8Array : e <= Math.pow(2, 16) ? Uint16Array : e <= Math.pow(2, 32) ? Uint32Array : e <= Number.MAX_SAFE_INTEGER ? ZeroArray : null; class ZeroArray extends Array { constructor(e) { super(e); this.fill(0); } } class Stack { static #e=!1; static create(e) { var t = getUintArray(e); if (!t) { return []; } Stack.#e = !0; var i = new Stack(e, t); Stack.#e = !1; return i; } constructor(e, t) { if (!Stack.#e) { throw new TypeError("instantiate Stack using Stack.create(n)"); } this.heap = new t(e); this.length = 0; } push(e) { this.heap[this.length++] = e; } pop() { return this.heap[--this.length]; } } class LRUCache { #t; #i; #r; #a; #n; #s; #o; #l; #u; #h; #f; #c; #p; #v; #d; #g; #m; #S; #y; #x; #T; #E; static unsafeExposeInternals(e) { return { starts: e.#S, ttls: e.#y, sizes: e.#m, keyMap: e.#l, keyList: e.#u, valList: e.#h, next: e.#f, prev: e.#c, get head() { return e.#p; }, get tail() { return e.#v; }, free: e.#d, isBackgroundFetch: t => e.#A(t), backgroundFetch: (t, i, r, a) => e.#b(t, i, r, a), moveToTail: t => e.#w(t), indexes: t => e.#k(t), rindexes: t => e.#D(t), isStale: t => e.#L(t) }; } get max() { return this.#t; } get maxSize() { return this.#i; } get calculatedSize() { return this.#o; } get size() { return this.#s; } get fetchMethod() { return this.#n; } get dispose() { return this.#r; } get disposeAfter() { return this.#a; } constructor(e) { var {max: t = 0, ttl: i, ttlResolution: r = 1, ttlAutopurge: a, updateAgeOnGet: n, updateAgeOnHas: s, allowStale: o, dispose: l, disposeAfter: u, noDisposeOnSet: h, noUpdateTTL: f, maxSize: c = 0, maxEntrySize: p = 0, sizeCalculation: v, fetchMethod: d, noDeleteOnFetchRejection: g, noDeleteOnStaleGet: m, allowStaleOnFetchRejection: S, allowStaleOnFetchAbort: y, ignoreFetchAbort: x} = e; if (0 !== t && !isPosInt(t)) { throw new TypeError("max option must be a nonnegative integer"); } var T = t ? getUintArray(t) : Array; if (!T) { throw new Error("invalid max value: " + t); } this.#t = t; this.#i = c; this.maxEntrySize = p || this.#i; this.sizeCalculation = v; if (this.sizeCalculation) { if (!this.#i && !this.maxEntrySize) { throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize"); } if ("functio