PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@0no-co/graphqlsp/dist/chunks
Просмотр файла: api-chunk.mjs.map
{"version":3,"file":"api-chunk.mjs","sources":["../../src/ts/index.js","../../../../node_modules/.pnpm/graphql-language-service@5.2.0_graphql@16.8.1/node_modules/graphql-language-service/esm/parser/CharacterStream.js","../../../../node_modules/.pnpm/graphql-language-service@5.2.0_graphql@16.8.1/node_modules/graphql-language-service/esm/parser/RuleHelpers.js","../../../../node_modules/.pnpm/graphql-language-service@5.2.0_graphql@16.8.1/node_modules/graphql-language-service/esm/parser/Rules.js","../../../../node_modules/.pnpm/graphql-language-service@5.2.0_graphql@16.8.1/node_modules/graphql-language-service/esm/parser/onlineParser.js","../../../../node_modules/.pnpm/graphql-language-service@5.2.0_graphql@16.8.1/node_modules/graphql-language-service/esm/utils/Range.js","../../../../node_modules/.pnpm/graphql-language-service@5.2.0_graphql@16.8.1/node_modules/graphql-language-service/esm/utils/validateWithCustomRules.js","../../../../node_modules/.pnpm/graphql-language-service@5.2.0_graphql@16.8.1/node_modules/graphql-language-service/esm/interface/getDiagnostics.js","../../../../node_modules/.pnpm/@0no-co+graphql.web@1.0.4_graphql@16.8.1/node_modules/@0no-co/graphql.web/dist/graphql.web.mjs","../../src/ast/templates.ts","../../src/ast/checks.ts","../../src/ast/declaration.ts","../../src/ast/resolve.ts","../../src/ast/index.ts","../../../../node_modules/.pnpm/lru-cache@10.0.1/node_modules/lru-cache/dist/mjs/index.js","../../../../node_modules/.pnpm/@sindresorhus+fnv1a@2.0.1/node_modules/@sindresorhus/fnv1a/index.js","../../src/fieldUsage.ts","../../src/checkImports.ts","../../src/persisted.ts","../../src/diagnostics.ts"],"sourcesContent":["export var ts;\nexport function init(modules) {\n ts = modules.typescript;\n}\n","export default class CharacterStream {\n constructor(sourceText) {\n this._start = 0;\n this._pos = 0;\n this.getStartOfToken = () => this._start;\n this.getCurrentPosition = () => this._pos;\n this.eol = () => this._sourceText.length === this._pos;\n this.sol = () => this._pos === 0;\n this.peek = () => {\n return this._sourceText.charAt(this._pos) || null;\n };\n this.next = () => {\n const char = this._sourceText.charAt(this._pos);\n this._pos++;\n return char;\n };\n this.eat = (pattern) => {\n const isMatched = this._testNextCharacter(pattern);\n if (isMatched) {\n this._start = this._pos;\n this._pos++;\n return this._sourceText.charAt(this._pos - 1);\n }\n return undefined;\n };\n this.eatWhile = (match) => {\n let isMatched = this._testNextCharacter(match);\n let didEat = false;\n if (isMatched) {\n didEat = isMatched;\n this._start = this._pos;\n }\n while (isMatched) {\n this._pos++;\n isMatched = this._testNextCharacter(match);\n didEat = true;\n }\n return didEat;\n };\n this.eatSpace = () => this.eatWhile(/[\\s\\u00a0]/);\n this.skipToEnd = () => {\n this._pos = this._sourceText.length;\n };\n this.skipTo = (position) => {\n this._pos = position;\n };\n this.match = (pattern, consume = true, caseFold = false) => {\n let token = null;\n let match = null;\n if (typeof pattern === 'string') {\n const regex = new RegExp(pattern, caseFold ? 'i' : 'g');\n match = regex.test(this._sourceText.slice(this._pos, this._pos + pattern.length));\n token = pattern;\n }\n else if (pattern instanceof RegExp) {\n match = this._sourceText.slice(this._pos).match(pattern);\n token = match === null || match === void 0 ? void 0 : match[0];\n }\n if (match != null &&\n (typeof pattern === 'string' ||\n (match instanceof Array &&\n this._sourceText.startsWith(match[0], this._pos)))) {\n if (consume) {\n this._start = this._pos;\n if (token && token.length) {\n this._pos += token.length;\n }\n }\n return match;\n }\n return false;\n };\n this.backUp = (num) => {\n this._pos -= num;\n };\n this.column = () => this._pos;\n this.indentation = () => {\n const match = this._sourceText.match(/\\s*/);\n let indent = 0;\n if (match && match.length !== 0) {\n const whiteSpaces = match[0];\n let pos = 0;\n while (whiteSpaces.length > pos) {\n if (whiteSpaces.charCodeAt(pos) === 9) {\n indent += 2;\n }\n else {\n indent++;\n }\n pos++;\n }\n }\n return indent;\n };\n this.current = () => this._sourceText.slice(this._start, this._pos);\n this._sourceText = sourceText;\n }\n _testNextCharacter(pattern) {\n const character = this._sourceText.charAt(this._pos);\n let isMatched = false;\n if (typeof pattern === 'string') {\n isMatched = character === pattern;\n }\n else {\n isMatched =\n pattern instanceof RegExp\n ? pattern.test(character)\n : pattern(character);\n }\n return isMatched;\n }\n}\n//# sourceMappingURL=CharacterStream.js.map","export function opt(ofRule) {\n return { ofRule };\n}\nexport function list(ofRule, separator) {\n return { ofRule, isList: true, separator };\n}\nexport function butNot(rule, exclusions) {\n const ruleMatch = rule.match;\n rule.match = token => {\n let check = false;\n if (ruleMatch) {\n check = ruleMatch(token);\n }\n return (check &&\n exclusions.every(exclusion => exclusion.match && !exclusion.match(token)));\n };\n return rule;\n}\nexport function t(kind, style) {\n return { style, match: (token) => token.kind === kind };\n}\nexport function p(value, style) {\n return {\n style: style || 'punctuation',\n match: (token) => token.kind === 'Punctuation' && token.value === value,\n };\n}\n//# sourceMappingURL=RuleHelpers.js.map","import { opt, list, butNot, t, p } from './RuleHelpers';\nimport { Kind } from 'graphql';\nexport const isIgnored = (ch) => ch === ' ' ||\n ch === '\\t' ||\n ch === ',' ||\n ch === '\\n' ||\n ch === '\\r' ||\n ch === '\\uFEFF' ||\n ch === '\\u00A0';\nexport const LexRules = {\n Name: /^[_A-Za-z][_0-9A-Za-z]*/,\n Punctuation: /^(?:!|\\$|\\(|\\)|\\.\\.\\.|:|=|&|@|\\[|]|\\{|\\||\\})/,\n Number: /^-?(?:0|(?:[1-9][0-9]*))(?:\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/,\n String: /^(?:\"\"\"(?:\\\\\"\"\"|[^\"]|\"[^\"]|\"\"[^\"])*(?:\"\"\")?|\"(?:[^\"\\\\]|\\\\(?:\"|\\/|\\\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*\"?)/,\n Comment: /^#.*/,\n};\nexport const ParseRules = {\n Document: [list('Definition')],\n Definition(token) {\n switch (token.value) {\n case '{':\n return 'ShortQuery';\n case 'query':\n return 'Query';\n case 'mutation':\n return 'Mutation';\n case 'subscription':\n return 'Subscription';\n case 'fragment':\n return Kind.FRAGMENT_DEFINITION;\n case 'schema':\n return 'SchemaDef';\n case 'scalar':\n return 'ScalarDef';\n case 'type':\n return 'ObjectTypeDef';\n case 'interface':\n return 'InterfaceDef';\n case 'union':\n return 'UnionDef';\n case 'enum':\n return 'EnumDef';\n case 'input':\n return 'InputDef';\n case 'extend':\n return 'ExtendDef';\n case 'directive':\n return 'DirectiveDef';\n }\n },\n ShortQuery: ['SelectionSet'],\n Query: [\n word('query'),\n opt(name('def')),\n opt('VariableDefinitions'),\n list('Directive'),\n 'SelectionSet',\n ],\n Mutation: [\n word('mutation'),\n opt(name('def')),\n opt('VariableDefinitions'),\n list('Directive'),\n 'SelectionSet',\n ],\n Subscription: [\n word('subscription'),\n opt(name('def')),\n opt('VariableDefinitions'),\n list('Directive'),\n 'SelectionSet',\n ],\n VariableDefinitions: [p('('), list('VariableDefinition'), p(')')],\n VariableDefinition: ['Variable', p(':'), 'Type', opt('DefaultValue')],\n Variable: [p('$', 'variable'), name('variable')],\n DefaultValue: [p('='), 'Value'],\n SelectionSet: [p('{'), list('Selection'), p('}')],\n Selection(token, stream) {\n return token.value === '...'\n ? stream.match(/[\\s\\u00a0,]*(on\\b|@|{)/, false)\n ? 'InlineFragment'\n : 'FragmentSpread'\n : stream.match(/[\\s\\u00a0,]*:/, false)\n ? 'AliasedField'\n : 'Field';\n },\n AliasedField: [\n name('property'),\n p(':'),\n name('qualifier'),\n opt('Arguments'),\n list('Directive'),\n opt('SelectionSet'),\n ],\n Field: [\n name('property'),\n opt('Arguments'),\n list('Directive'),\n opt('SelectionSet'),\n ],\n Arguments: [p('('), list('Argument'), p(')')],\n Argument: [name('attribute'), p(':'), 'Value'],\n FragmentSpread: [p('...'), name('def'), list('Directive')],\n InlineFragment: [\n p('...'),\n opt('TypeCondition'),\n list('Directive'),\n 'SelectionSet',\n ],\n FragmentDefinition: [\n word('fragment'),\n opt(butNot(name('def'), [word('on')])),\n 'TypeCondition',\n list('Directive'),\n 'SelectionSet',\n ],\n TypeCondition: [word('on'), 'NamedType'],\n Value(token) {\n switch (token.kind) {\n case 'Number':\n return 'NumberValue';\n case 'String':\n return 'StringValue';\n case 'Punctuation':\n switch (token.value) {\n case '[':\n return 'ListValue';\n case '{':\n return 'ObjectValue';\n case '$':\n return 'Variable';\n case '&':\n return 'NamedType';\n }\n return null;\n case 'Name':\n switch (token.value) {\n case 'true':\n case 'false':\n return 'BooleanValue';\n }\n if (token.value === 'null') {\n return 'NullValue';\n }\n return 'EnumValue';\n }\n },\n NumberValue: [t('Number', 'number')],\n StringValue: [\n {\n style: 'string',\n match: (token) => token.kind === 'String',\n update(state, token) {\n if (token.value.startsWith('\"\"\"')) {\n state.inBlockstring = !token.value.slice(3).endsWith('\"\"\"');\n }\n },\n },\n ],\n BooleanValue: [t('Name', 'builtin')],\n NullValue: [t('Name', 'keyword')],\n EnumValue: [name('string-2')],\n ListValue: [p('['), list('Value'), p(']')],\n ObjectValue: [p('{'), list('ObjectField'), p('}')],\n ObjectField: [name('attribute'), p(':'), 'Value'],\n Type(token) {\n return token.value === '[' ? 'ListType' : 'NonNullType';\n },\n ListType: [p('['), 'Type', p(']'), opt(p('!'))],\n NonNullType: ['NamedType', opt(p('!'))],\n NamedType: [type('atom')],\n Directive: [p('@', 'meta'), name('meta'), opt('Arguments')],\n DirectiveDef: [\n word('directive'),\n p('@', 'meta'),\n name('meta'),\n opt('ArgumentsDef'),\n word('on'),\n list('DirectiveLocation', p('|')),\n ],\n InterfaceDef: [\n word('interface'),\n name('atom'),\n opt('Implements'),\n list('Directive'),\n p('{'),\n list('FieldDef'),\n p('}'),\n ],\n Implements: [word('implements'), list('NamedType', p('&'))],\n DirectiveLocation: [name('string-2')],\n SchemaDef: [\n word('schema'),\n list('Directive'),\n p('{'),\n list('OperationTypeDef'),\n p('}'),\n ],\n OperationTypeDef: [name('keyword'), p(':'), name('atom')],\n ScalarDef: [word('scalar'), name('atom'), list('Directive')],\n ObjectTypeDef: [\n word('type'),\n name('atom'),\n opt('Implements'),\n list('Directive'),\n p('{'),\n list('FieldDef'),\n p('}'),\n ],\n FieldDef: [\n name('property'),\n opt('ArgumentsDef'),\n p(':'),\n 'Type',\n list('Directive'),\n ],\n ArgumentsDef: [p('('), list('InputValueDef'), p(')')],\n InputValueDef: [\n name('attribute'),\n p(':'),\n 'Type',\n opt('DefaultValue'),\n list('Directive'),\n ],\n UnionDef: [\n word('union'),\n name('atom'),\n list('Directive'),\n p('='),\n list('UnionMember', p('|')),\n ],\n UnionMember: ['NamedType'],\n EnumDef: [\n word('enum'),\n name('atom'),\n list('Directive'),\n p('{'),\n list('EnumValueDef'),\n p('}'),\n ],\n EnumValueDef: [name('string-2'), list('Directive')],\n InputDef: [\n word('input'),\n name('atom'),\n list('Directive'),\n p('{'),\n list('InputValueDef'),\n p('}'),\n ],\n ExtendDef: [word('extend'), 'ExtensionDefinition'],\n ExtensionDefinition(token) {\n switch (token.value) {\n case 'schema':\n return Kind.SCHEMA_EXTENSION;\n case 'scalar':\n return Kind.SCALAR_TYPE_EXTENSION;\n case 'type':\n return Kind.OBJECT_TYPE_EXTENSION;\n case 'interface':\n return Kind.INTERFACE_TYPE_EXTENSION;\n case 'union':\n return Kind.UNION_TYPE_EXTENSION;\n case 'enum':\n return Kind.ENUM_TYPE_EXTENSION;\n case 'input':\n return Kind.INPUT_OBJECT_TYPE_EXTENSION;\n }\n },\n [Kind.SCHEMA_EXTENSION]: ['SchemaDef'],\n [Kind.SCALAR_TYPE_EXTENSION]: ['ScalarDef'],\n [Kind.OBJECT_TYPE_EXTENSION]: ['ObjectTypeDef'],\n [Kind.INTERFACE_TYPE_EXTENSION]: ['InterfaceDef'],\n [Kind.UNION_TYPE_EXTENSION]: ['UnionDef'],\n [Kind.ENUM_TYPE_EXTENSION]: ['EnumDef'],\n [Kind.INPUT_OBJECT_TYPE_EXTENSION]: ['InputDef'],\n};\nfunction word(value) {\n return {\n style: 'keyword',\n match: (token) => token.kind === 'Name' && token.value === value,\n };\n}\nfunction name(style) {\n return {\n style,\n match: (token) => token.kind === 'Name',\n update(state, token) {\n state.name = token.value;\n },\n };\n}\nfunction type(style) {\n return {\n style,\n match: (token) => token.kind === 'Name',\n update(state, token) {\n var _a;\n if ((_a = state.prevState) === null || _a === void 0 ? void 0 : _a.prevState) {\n state.name = token.value;\n state.prevState.prevState.type = token.value;\n }\n },\n };\n}\n//# sourceMappingURL=Rules.js.map","import { LexRules, ParseRules, isIgnored } from './Rules';\nimport { Kind } from 'graphql';\nexport default function onlineParser(options = {\n eatWhitespace: stream => stream.eatWhile(isIgnored),\n lexRules: LexRules,\n parseRules: ParseRules,\n editorConfig: {},\n}) {\n return {\n startState() {\n const initialState = {\n level: 0,\n step: 0,\n name: null,\n kind: null,\n type: null,\n rule: null,\n needsSeparator: false,\n prevState: null,\n };\n pushRule(options.parseRules, initialState, Kind.DOCUMENT);\n return initialState;\n },\n token(stream, state) {\n return getToken(stream, state, options);\n },\n };\n}\nfunction getToken(stream, state, options) {\n var _a;\n if (state.inBlockstring) {\n if (stream.match(/.*\"\"\"/)) {\n state.inBlockstring = false;\n return 'string';\n }\n stream.skipToEnd();\n return 'string';\n }\n const { lexRules, parseRules, eatWhitespace, editorConfig } = options;\n if (state.rule && state.rule.length === 0) {\n popRule(state);\n }\n else if (state.needsAdvance) {\n state.needsAdvance = false;\n advanceRule(state, true);\n }\n if (stream.sol()) {\n const tabSize = (editorConfig === null || editorConfig === void 0 ? void 0 : editorConfig.tabSize) || 2;\n state.indentLevel = Math.floor(stream.indentation() / tabSize);\n }\n if (eatWhitespace(stream)) {\n return 'ws';\n }\n const token = lex(lexRules, stream);\n if (!token) {\n const matchedSomething = stream.match(/\\S+/);\n if (!matchedSomething) {\n stream.match(/\\s/);\n }\n pushRule(SpecialParseRules, state, 'Invalid');\n return 'invalidchar';\n }\n if (token.kind === 'Comment') {\n pushRule(SpecialParseRules, state, 'Comment');\n return 'comment';\n }\n const backupState = assign({}, state);\n if (token.kind === 'Punctuation') {\n if (/^[{([]/.test(token.value)) {\n if (state.indentLevel !== undefined) {\n state.levels = (state.levels || []).concat(state.indentLevel + 1);\n }\n }\n else if (/^[})\\]]/.test(token.value)) {\n const levels = (state.levels = (state.levels || []).slice(0, -1));\n if (state.indentLevel &&\n levels.length > 0 &&\n levels.at(-1) < state.indentLevel) {\n state.indentLevel = levels.at(-1);\n }\n }\n }\n while (state.rule) {\n let expected = typeof state.rule === 'function'\n ? state.step === 0\n ? state.rule(token, stream)\n : null\n : state.rule[state.step];\n if (state.needsSeparator) {\n expected = expected === null || expected === void 0 ? void 0 : expected.separator;\n }\n if (expected) {\n if (expected.ofRule) {\n expected = expected.ofRule;\n }\n if (typeof expected === 'string') {\n pushRule(parseRules, state, expected);\n continue;\n }\n if ((_a = expected.match) === null || _a === void 0 ? void 0 : _a.call(expected, token)) {\n if (expected.update) {\n expected.update(state, token);\n }\n if (token.kind === 'Punctuation') {\n advanceRule(state, true);\n }\n else {\n state.needsAdvance = true;\n }\n return expected.style;\n }\n }\n unsuccessful(state);\n }\n assign(state, backupState);\n pushRule(SpecialParseRules, state, 'Invalid');\n return 'invalidchar';\n}\nfunction assign(to, from) {\n const keys = Object.keys(from);\n for (let i = 0; i < keys.length; i++) {\n to[keys[i]] = from[keys[i]];\n }\n return to;\n}\nconst SpecialParseRules = {\n Invalid: [],\n Comment: [],\n};\nfunction pushRule(rules, state, ruleKind) {\n if (!rules[ruleKind]) {\n throw new TypeError('Unknown rule: ' + ruleKind);\n }\n state.prevState = Object.assign({}, state);\n state.kind = ruleKind;\n state.name = null;\n state.type = null;\n state.rule = rules[ruleKind];\n state.step = 0;\n state.needsSeparator = false;\n}\nfunction popRule(state) {\n if (!state.prevState) {\n return;\n }\n state.kind = state.prevState.kind;\n state.name = state.prevState.name;\n state.type = state.prevState.type;\n state.rule = state.prevState.rule;\n state.step = state.prevState.step;\n state.needsSeparator = state.prevState.needsSeparator;\n state.prevState = state.prevState.prevState;\n}\nfunction advanceRule(state, successful) {\n var _a;\n if (isList(state) && state.rule) {\n const step = state.rule[state.step];\n if (step.separator) {\n const { separator } = step;\n state.needsSeparator = !state.needsSeparator;\n if (!state.needsSeparator && separator.ofRule) {\n return;\n }\n }\n if (successful) {\n return;\n }\n }\n state.needsSeparator = false;\n state.step++;\n while (state.rule &&\n !(Array.isArray(state.rule) && state.step < state.rule.length)) {\n popRule(state);\n if (state.rule) {\n if (isList(state)) {\n if ((_a = state.rule) === null || _a === void 0 ? void 0 : _a[state.step].separator) {\n state.needsSeparator = !state.needsSeparator;\n }\n }\n else {\n state.needsSeparator = false;\n state.step++;\n }\n }\n }\n}\nfunction isList(state) {\n const step = Array.isArray(state.rule) &&\n typeof state.rule[state.step] !== 'string' &&\n state.rule[state.step];\n return step && step.isList;\n}\nfunction unsuccessful(state) {\n while (state.rule &&\n !(Array.isArray(state.rule) && state.rule[state.step].ofRule)) {\n popRule(state);\n }\n if (state.rule) {\n advanceRule(state, false);\n }\n}\nfunction lex(lexRules, stream) {\n const kinds = Object.keys(lexRules);\n for (let i = 0; i < kinds.length; i++) {\n const match = stream.match(lexRules[kinds[i]]);\n if (match && match instanceof Array) {\n return { kind: kinds[i], value: match[0] };\n }\n }\n}\n//# sourceMappingURL=onlineParser.js.map","export class Range {\n constructor(start, end) {\n this.containsPosition = (position) => {\n if (this.start.line === position.line) {\n return this.start.character <= position.character;\n }\n if (this.end.line === position.line) {\n return this.end.character >= position.character;\n }\n return this.start.line <= position.line && this.end.line >= position.line;\n };\n this.start = start;\n this.end = end;\n }\n setStart(line, character) {\n this.start = new Position(line, character);\n }\n setEnd(line, character) {\n this.end = new Position(line, character);\n }\n}\nexport class Position {\n constructor(line, character) {\n this.lessThanOrEqualTo = (position) => this.line < position.line ||\n (this.line === position.line && this.character <= position.character);\n this.line = line;\n this.character = character;\n }\n setLine(line) {\n this.line = line;\n }\n setCharacter(character) {\n this.character = character;\n }\n}\nexport function offsetToPosition(text, loc) {\n const EOL = '\\n';\n const buf = text.slice(0, loc);\n const lines = buf.split(EOL).length - 1;\n const lastLineIndex = buf.lastIndexOf(EOL);\n return new Position(lines, loc - lastLineIndex - 1);\n}\nexport function locToRange(text, loc) {\n const start = offsetToPosition(text, loc.start);\n const end = offsetToPosition(text, loc.end);\n return new Range(start, end);\n}\n//# sourceMappingURL=Range.js.map","import { specifiedRules, validate, NoUnusedFragmentsRule, KnownFragmentNamesRule, Kind, ExecutableDefinitionsRule, LoneSchemaDefinitionRule, UniqueOperationTypesRule, UniqueTypeNamesRule, UniqueEnumValueNamesRule, UniqueFieldDefinitionNamesRule, UniqueDirectiveNamesRule, KnownTypeNamesRule, KnownDirectivesRule, UniqueDirectivesPerLocationRule, PossibleTypeExtensionsRule, UniqueArgumentNamesRule, UniqueInputFieldNamesRule, } from 'graphql';\nconst specifiedSDLRules = [\n LoneSchemaDefinitionRule,\n UniqueOperationTypesRule,\n UniqueTypeNamesRule,\n UniqueEnumValueNamesRule,\n UniqueFieldDefinitionNamesRule,\n UniqueDirectiveNamesRule,\n KnownTypeNamesRule,\n KnownDirectivesRule,\n UniqueDirectivesPerLocationRule,\n PossibleTypeExtensionsRule,\n UniqueArgumentNamesRule,\n UniqueInputFieldNamesRule,\n];\nexport function validateWithCustomRules(schema, ast, customRules, isRelayCompatMode, isSchemaDocument) {\n const rules = specifiedRules.filter(rule => {\n if (rule === NoUnusedFragmentsRule || rule === ExecutableDefinitionsRule) {\n return false;\n }\n if (isRelayCompatMode && rule === KnownFragmentNamesRule) {\n return false;\n }\n return true;\n });\n if (customRules) {\n Array.prototype.push.apply(rules, customRules);\n }\n if (isSchemaDocument) {\n Array.prototype.push.apply(rules, specifiedSDLRules);\n }\n const errors = validate(schema, ast, rules);\n return errors.filter(error => {\n if (error.message.includes('Unknown directive') && error.nodes) {\n const node = error.nodes[0];\n if (node && node.kind === Kind.DIRECTIVE) {\n const name = node.name.value;\n if (name === 'arguments' || name === 'argumentDefinitions') {\n return false;\n }\n }\n }\n return true;\n });\n}\n//# sourceMappingURL=validateWithCustomRules.js.map","import { GraphQLError, print, validate, NoDeprecatedCustomRule, parse, } from 'graphql';\nimport { CharacterStream, onlineParser } from '../parser';\nimport { Range, validateWithCustomRules, Position } from '../utils';\nexport const SEVERITY = {\n Error: 'Error',\n Warning: 'Warning',\n Information: 'Information',\n Hint: 'Hint',\n};\nexport const DIAGNOSTIC_SEVERITY = {\n [SEVERITY.Error]: 1,\n [SEVERITY.Warning]: 2,\n [SEVERITY.Information]: 3,\n [SEVERITY.Hint]: 4,\n};\nconst invariant = (condition, message) => {\n if (!condition) {\n throw new Error(message);\n }\n};\nexport function getDiagnostics(query, schema = null, customRules, isRelayCompatMode, externalFragments) {\n var _a, _b;\n let ast = null;\n let fragments = '';\n if (externalFragments) {\n fragments =\n typeof externalFragments === 'string'\n ? externalFragments\n : externalFragments.reduce((acc, node) => acc + print(node) + '\\n\\n', '');\n }\n const enhancedQuery = fragments ? `${query}\\n\\n${fragments}` : query;\n try {\n ast = parse(enhancedQuery);\n }\n catch (error) {\n if (error instanceof GraphQLError) {\n const range = getRange((_b = (_a = error.locations) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : { line: 0, column: 0 }, enhancedQuery);\n return [\n {\n severity: DIAGNOSTIC_SEVERITY.Error,\n message: error.message,\n source: 'GraphQL: Syntax',\n range,\n },\n ];\n }\n throw error;\n }\n return validateQuery(ast, schema, customRules, isRelayCompatMode);\n}\nexport function validateQuery(ast, schema = null, customRules, isRelayCompatMode) {\n if (!schema) {\n return [];\n }\n const validationErrorAnnotations = validateWithCustomRules(schema, ast, customRules, isRelayCompatMode).flatMap(error => annotations(error, DIAGNOSTIC_SEVERITY.Error, 'Validation'));\n const deprecationWarningAnnotations = validate(schema, ast, [\n NoDeprecatedCustomRule,\n ]).flatMap(error => annotations(error, DIAGNOSTIC_SEVERITY.Warning, 'Deprecation'));\n return validationErrorAnnotations.concat(deprecationWarningAnnotations);\n}\nfunction annotations(error, severity, type) {\n if (!error.nodes) {\n return [];\n }\n const highlightedNodes = [];\n for (const [i, node] of error.nodes.entries()) {\n const highlightNode = node.kind !== 'Variable' && 'name' in node && node.name !== undefined\n ? node.name\n : 'variable' in node && node.variable !== undefined\n ? node.variable\n : node;\n if (highlightNode) {\n invariant(error.locations, 'GraphQL validation error requires locations.');\n const loc = error.locations[i];\n const highlightLoc = getLocation(highlightNode);\n const end = loc.column + (highlightLoc.end - highlightLoc.start);\n highlightedNodes.push({\n source: `GraphQL: ${type}`,\n message: error.message,\n severity,\n range: new Range(new Position(loc.line - 1, loc.column - 1), new Position(loc.line - 1, end)),\n });\n }\n }\n return highlightedNodes;\n}\nexport function getRange(location, queryText) {\n const parser = onlineParser();\n const state = parser.startState();\n const lines = queryText.split('\\n');\n invariant(lines.length >= location.line, 'Query text must have more lines than where the error happened');\n let stream = null;\n for (let i = 0; i < location.line; i++) {\n stream = new CharacterStream(lines[i]);\n while (!stream.eol()) {\n const style = parser.token(stream, state);\n if (style === 'invalidchar') {\n break;\n }\n }\n }\n invariant(stream, 'Expected Parser stream to be available.');\n const line = location.line - 1;\n const start = stream.getStartOfToken();\n const end = stream.getCurrentPosition();\n return new Range(new Position(line, start), new Position(line, end));\n}\nfunction getLocation(node) {\n const typeCastedNode = node;\n const location = typeCastedNode.loc;\n invariant(location, 'Expected ASTNode to have a location.');\n return location;\n}\n//# sourceMappingURL=getDiagnostics.js.map","var e = {\n NAME: \"Name\",\n DOCUMENT: \"Document\",\n OPERATION_DEFINITION: \"OperationDefinition\",\n VARIABLE_DEFINITION: \"VariableDefinition\",\n SELECTION_SET: \"SelectionSet\",\n FIELD: \"Field\",\n ARGUMENT: \"Argument\",\n FRAGMENT_SPREAD: \"FragmentSpread\",\n INLINE_FRAGMENT: \"InlineFragment\",\n FRAGMENT_DEFINITION: \"FragmentDefinition\",\n VARIABLE: \"Variable\",\n INT: \"IntValue\",\n FLOAT: \"FloatValue\",\n STRING: \"StringValue\",\n BOOLEAN: \"BooleanValue\",\n NULL: \"NullValue\",\n ENUM: \"EnumValue\",\n LIST: \"ListValue\",\n OBJECT: \"ObjectValue\",\n OBJECT_FIELD: \"ObjectField\",\n DIRECTIVE: \"Directive\",\n NAMED_TYPE: \"NamedType\",\n LIST_TYPE: \"ListType\",\n NON_NULL_TYPE: \"NonNullType\"\n};\n\nvar r = {\n QUERY: \"query\",\n MUTATION: \"mutation\",\n SUBSCRIPTION: \"subscription\"\n};\n\nclass GraphQLError extends Error {\n constructor(e, r, i, n, a, t, o) {\n super(e);\n this.name = \"GraphQLError\";\n this.message = e;\n if (a) {\n this.path = a;\n }\n if (r) {\n this.nodes = Array.isArray(r) ? r : [ r ];\n }\n if (i) {\n this.source = i;\n }\n if (n) {\n this.positions = n;\n }\n if (t) {\n this.originalError = t;\n }\n var l = o;\n if (!l && t) {\n var u = t.extensions;\n if (u && \"object\" == typeof u) {\n l = u;\n }\n }\n this.extensions = l || {};\n }\n toJSON() {\n return {\n ...this,\n message: this.message\n };\n }\n toString() {\n return this.message;\n }\n get [Symbol.toStringTag]() {\n return \"GraphQLError\";\n }\n}\n\nvar i;\n\nvar n;\n\nfunction error(e) {\n return new GraphQLError(`Syntax Error: Unexpected token at ${n} in ${e}`);\n}\n\nfunction advance(e) {\n e.lastIndex = n;\n if (e.test(i)) {\n return i.slice(n, n = e.lastIndex);\n }\n}\n\nvar a = / +(?=[^\\s])/y;\n\nfunction blockString(e) {\n var r = e.split(\"\\n\");\n var i = \"\";\n var n = 0;\n var t = 0;\n var o = r.length - 1;\n for (var l = 0; l < r.length; l++) {\n a.lastIndex = 0;\n if (a.test(r[l])) {\n if (l && (!n || a.lastIndex < n)) {\n n = a.lastIndex;\n }\n t = t || l;\n o = l;\n }\n }\n for (var u = t; u <= o; u++) {\n if (u !== t) {\n i += \"\\n\";\n }\n i += r[u].slice(n).replace(/\\\\\"\"\"/g, '\"\"\"');\n }\n return i;\n}\n\nfunction ignored() {\n for (var e = 0 | i.charCodeAt(n++); 9 === e || 10 === e || 13 === e || 32 === e || 35 === e || 44 === e || 65279 === e; e = 0 | i.charCodeAt(n++)) {\n if (35 === e) {\n while (10 !== (e = i.charCodeAt(n++)) && 13 !== e) {}\n }\n }\n n--;\n}\n\nvar t = /[_A-Za-z]\\w*/y;\n\nfunction name() {\n var e;\n if (e = advance(t)) {\n return {\n kind: \"Name\",\n value: e\n };\n }\n}\n\nvar o = /(?:null|true|false)/y;\n\nvar l = /\\$[_A-Za-z]\\w*/y;\n\nvar u = /-?\\d+/y;\n\nvar v = /(?:\\.\\d+)?[eE][+-]?\\d+|\\.\\d+/y;\n\nvar d = /\\\\/g;\n\nvar s = /\"\"\"(?:\"\"\"|(?:[\\s\\S]*?[^\\\\])\"\"\")/y;\n\nvar c = /\"(?:\"|[^\\r\\n]*?[^\\\\]\")/y;\n\nfunction value(e) {\n var r;\n var a;\n if (a = advance(o)) {\n r = \"null\" === a ? {\n kind: \"NullValue\"\n } : {\n kind: \"BooleanValue\",\n value: \"true\" === a\n };\n } else if (!e && (a = advance(l))) {\n r = {\n kind: \"Variable\",\n name: {\n kind: \"Name\",\n value: a.slice(1)\n }\n };\n } else if (a = advance(u)) {\n var f = a;\n if (a = advance(v)) {\n r = {\n kind: \"FloatValue\",\n value: f + a\n };\n } else {\n r = {\n kind: \"IntValue\",\n value: f\n };\n }\n } else if (a = advance(t)) {\n r = {\n kind: \"EnumValue\",\n value: a\n };\n } else if (a = advance(s)) {\n r = {\n kind: \"StringValue\",\n value: blockString(a.slice(3, -3)),\n block: !0\n };\n } else if (a = advance(c)) {\n r = {\n kind: \"StringValue\",\n value: d.test(a) ? JSON.parse(a) : a.slice(1, -1),\n block: !1\n };\n } else if (r = function list(e) {\n var r;\n if (91 === i.charCodeAt(n)) {\n n++;\n ignored();\n var a = [];\n while (r = value(e)) {\n a.push(r);\n }\n if (93 !== i.charCodeAt(n++)) {\n throw error(\"ListValue\");\n }\n ignored();\n return {\n kind: \"ListValue\",\n values: a\n };\n }\n }(e) || function object(e) {\n if (123 === i.charCodeAt(n)) {\n n++;\n ignored();\n var r = [];\n var a;\n while (a = name()) {\n ignored();\n if (58 !== i.charCodeAt(n++)) {\n throw error(\"ObjectField\");\n }\n ignored();\n var t = value(e);\n if (!t) {\n throw error(\"ObjectField\");\n }\n r.push({\n kind: \"ObjectField\",\n name: a,\n value: t\n });\n }\n if (125 !== i.charCodeAt(n++)) {\n throw error(\"ObjectValue\");\n }\n ignored();\n return {\n kind: \"ObjectValue\",\n fields: r\n };\n }\n }(e)) {\n return r;\n }\n ignored();\n return r;\n}\n\nfunction arguments_(e) {\n var r = [];\n ignored();\n if (40 === i.charCodeAt(n)) {\n n++;\n ignored();\n var a;\n while (a = name()) {\n ignored();\n if (58 !== i.charCodeAt(n++)) {\n throw error(\"Argument\");\n }\n ignored();\n var t = value(e);\n if (!t) {\n throw error(\"Argument\");\n }\n r.push({\n kind: \"Argument\",\n name: a,\n value: t\n });\n }\n if (!r.length || 41 !== i.charCodeAt(n++)) {\n throw error(\"Argument\");\n }\n ignored();\n }\n return r;\n}\n\nfunction directives(e) {\n var r = [];\n ignored();\n while (64 === i.charCodeAt(n)) {\n n++;\n var a = name();\n if (!a) {\n throw error(\"Directive\");\n }\n ignored();\n r.push({\n kind: \"Directive\",\n name: a,\n arguments: arguments_(e)\n });\n }\n return r;\n}\n\nfunction field() {\n var e = name();\n if (e) {\n ignored();\n var r;\n if (58 === i.charCodeAt(n)) {\n n++;\n ignored();\n r = e;\n if (!(e = name())) {\n throw error(\"Field\");\n }\n ignored();\n }\n return {\n kind: \"Field\",\n alias: r,\n name: e,\n arguments: arguments_(!1),\n directives: directives(!1),\n selectionSet: selectionSet()\n };\n }\n}\n\nfunction type() {\n var e;\n ignored();\n if (91 === i.charCodeAt(n)) {\n n++;\n ignored();\n var r = type();\n if (!r || 93 !== i.charCodeAt(n++)) {\n throw error(\"ListType\");\n }\n e = {\n kind: \"ListType\",\n type: r\n };\n } else if (e = name()) {\n e = {\n kind: \"NamedType\",\n name: e\n };\n } else {\n throw error(\"NamedType\");\n }\n ignored();\n if (33 === i.charCodeAt(n)) {\n n++;\n ignored();\n return {\n kind: \"NonNullType\",\n type: e\n };\n } else {\n return e;\n }\n}\n\nvar f = /on/y;\n\nfunction typeCondition() {\n if (advance(f)) {\n ignored();\n var e = name();\n if (!e) {\n throw error(\"NamedType\");\n }\n ignored();\n return {\n kind: \"NamedType\",\n name: e\n };\n }\n}\n\nvar p = /\\.\\.\\./y;\n\nfunction fragmentSpread() {\n if (advance(p)) {\n ignored();\n var e = n;\n var r;\n if ((r = name()) && \"on\" !== r.value) {\n return {\n kind: \"FragmentSpread\",\n name: r,\n directives: directives(!1)\n };\n } else {\n n = e;\n var i = typeCondition();\n var a = directives(!1);\n var t = selectionSet();\n if (!t) {\n throw error(\"InlineFragment\");\n }\n return {\n kind: \"InlineFragment\",\n typeCondition: i,\n directives: a,\n selectionSet: t\n };\n }\n }\n}\n\nfunction selectionSet() {\n var e;\n ignored();\n if (123 === i.charCodeAt(n)) {\n n++;\n ignored();\n var r = [];\n while (e = fragmentSpread() || field()) {\n r.push(e);\n }\n if (!r.length || 125 !== i.charCodeAt(n++)) {\n throw error(\"SelectionSet\");\n }\n ignored();\n return {\n kind: \"SelectionSet\",\n selections: r\n };\n }\n}\n\nvar m = /fragment/y;\n\nfunction fragmentDefinition() {\n if (advance(m)) {\n ignored();\n var e = name();\n if (!e) {\n throw error(\"FragmentDefinition\");\n }\n ignored();\n var r = typeCondition();\n if (!r) {\n throw error(\"FragmentDefinition\");\n }\n var i = directives(!1);\n var n = selectionSet();\n if (!n) {\n throw error(\"FragmentDefinition\");\n }\n return {\n kind: \"FragmentDefinition\",\n name: e,\n typeCondition: r,\n directives: i,\n selectionSet: n\n };\n }\n}\n\nvar g = /(?:query|mutation|subscription)/y;\n\nfunction operationDefinition() {\n var e;\n var r;\n var a = [];\n var t = [];\n if (e = advance(g)) {\n ignored();\n r = name();\n a = function variableDefinitions() {\n var e;\n var r = [];\n ignored();\n if (40 === i.charCodeAt(n)) {\n n++;\n ignored();\n while (e = advance(l)) {\n ignored();\n if (58 !== i.charCodeAt(n++)) {\n throw error(\"VariableDefinition\");\n }\n var a = type();\n var t = void 0;\n if (61 === i.charCodeAt(n)) {\n n++;\n ignored();\n if (!(t = value(!0))) {\n throw error(\"VariableDefinition\");\n }\n }\n ignored();\n r.push({\n kind: \"VariableDefinition\",\n variable: {\n kind: \"Variable\",\n name: {\n kind: \"Name\",\n value: e.slice(1)\n }\n },\n type: a,\n defaultValue: t,\n directives: directives(!0)\n });\n }\n if (41 !== i.charCodeAt(n++)) {\n throw error(\"VariableDefinition\");\n }\n ignored();\n }\n return r;\n }();\n t = directives(!1);\n }\n var o = selectionSet();\n if (o) {\n return {\n kind: \"OperationDefinition\",\n operation: e || \"query\",\n name: r,\n variableDefinitions: a,\n directives: t,\n selectionSet: o\n };\n }\n}\n\nfunction parse(e, r) {\n i = \"string\" == typeof e.body ? e.body : e;\n n = 0;\n return function document() {\n var e;\n ignored();\n var r = [];\n while (e = fragmentDefinition() || operationDefinition()) {\n r.push(e);\n }\n return {\n kind: \"Document\",\n definitions: r\n };\n }();\n}\n\nfunction parseValue(e, r) {\n i = \"string\" == typeof e.body ? e.body : e;\n n = 0;\n ignored();\n var a = value(!1);\n if (!a) {\n throw error(\"ValueNode\");\n }\n return a;\n}\n\nfunction parseType(e, r) {\n i = \"string\" == typeof e.body ? e.body : e;\n n = 0;\n return type();\n}\n\nvar h = {};\n\nfunction visit(e, r) {\n var i = [];\n var n = [];\n try {\n var a = function traverse(e, a, t) {\n var o = !1;\n var l = r[e.kind] && r[e.kind].enter || r[e.kind] || r.enter;\n var u = l && l.call(r, e, a, t, n, i);\n if (!1 === u) {\n return e;\n } else if (null === u) {\n return null;\n } else if (u === h) {\n throw h;\n } else if (u && \"string\" == typeof u.kind) {\n o = u !== e;\n e = u;\n }\n if (t) {\n i.push(t);\n }\n var v;\n var d = {\n ...e\n };\n for (var s in e) {\n n.push(s);\n var c = e[s];\n if (Array.isArray(c)) {\n var f = [];\n for (var p = 0; p < c.length; p++) {\n if (null != c[p] && \"string\" == typeof c[p].kind) {\n i.push(e);\n n.push(p);\n v = traverse(c[p], p, c);\n n.pop();\n i.pop();\n if (null == v) {\n o = !0;\n } else {\n o = o || v !== c[p];\n f.push(v);\n }\n }\n }\n c = f;\n } else if (null != c && \"string\" == typeof c.kind) {\n if (void 0 !== (v = traverse(c, s, e))) {\n o = o || c !== v;\n c = v;\n }\n }\n n.pop();\n if (o) {\n d[s] = c;\n }\n }\n if (t) {\n i.pop();\n }\n var m = r[e.kind] && r[e.kind].leave || r.leave;\n var g = m && m.call(r, e, a, t, n, i);\n if (g === h) {\n throw h;\n } else if (void 0 !== g) {\n return g;\n } else if (void 0 !== u) {\n return o ? d : u;\n } else {\n return o ? d : e;\n }\n }(e);\n return void 0 !== a && !1 !== a ? a : e;\n } catch (r) {\n if (r !== h) {\n throw r;\n }\n return e;\n }\n}\n\nfunction printString(e) {\n return JSON.stringify(e);\n}\n\nfunction printBlockString(e) {\n return '\"\"\"\\n' + e.replace(/\"\"\"/g, '\\\\\"\"\"') + '\\n\"\"\"';\n}\n\nvar hasItems = e => !(!e || !e.length);\n\nvar y = {\n OperationDefinition(e) {\n if (\"query\" === e.operation && !e.name && !hasItems(e.variableDefinitions) && !hasItems(e.directives)) {\n return y.SelectionSet(e.selectionSet);\n }\n var r = e.operation;\n if (e.name) {\n r += \" \" + e.name.value;\n }\n if (hasItems(e.variableDefinitions)) {\n if (!e.name) {\n r += \" \";\n }\n r += \"(\" + e.variableDefinitions.map(y.VariableDefinition).join(\", \") + \")\";\n }\n if (hasItems(e.directives)) {\n r += \" \" + e.directives.map(y.Directive).join(\" \");\n }\n return r + \" \" + y.SelectionSet(e.selectionSet);\n },\n VariableDefinition(e) {\n var r = y.Variable(e.variable) + \": \" + print(e.type);\n if (e.defaultValue) {\n r += \" = \" + print(e.defaultValue);\n }\n if (hasItems(e.directives)) {\n r += \" \" + e.directives.map(y.Directive).join(\" \");\n }\n return r;\n },\n Field(e) {\n var r = (e.alias ? e.alias.value + \": \" : \"\") + e.name.value;\n if (hasItems(e.arguments)) {\n var i = e.arguments.map(y.Argument);\n var n = r + \"(\" + i.join(\", \") + \")\";\n r = n.length > 80 ? r + \"(\\n \" + i.join(\"\\n\").replace(/\\n/g, \"\\n \") + \"\\n)\" : n;\n }\n if (hasItems(e.directives)) {\n r += \" \" + e.directives.map(y.Directive).join(\" \");\n }\n return e.selectionSet ? r + \" \" + y.SelectionSet(e.selectionSet) : r;\n },\n StringValue: e => e.block ? printBlockString(e.value) : printString(e.value),\n BooleanValue: e => \"\" + e.value,\n NullValue: e => \"null\",\n IntValue: e => e.value,\n FloatValue: e => e.value,\n EnumValue: e => e.value,\n Name: e => e.value,\n Variable: e => \"$\" + e.name.value,\n ListValue: e => \"[\" + e.values.map(print).join(\", \") + \"]\",\n ObjectValue: e => \"{\" + e.fields.map(y.ObjectField).join(\", \") + \"}\",\n ObjectField: e => e.name.value + \": \" + print(e.value),\n Document: e => hasItems(e.definitions) ? e.definitions.map(print).join(\"\\n\\n\") : \"\",\n SelectionSet: e => \"{\\n \" + e.selections.map(print).join(\"\\n\").replace(/\\n/g, \"\\n \") + \"\\n}\",\n Argument: e => e.name.value + \": \" + print(e.value),\n FragmentSpread(e) {\n var r = \"...\" + e.name.value;\n if (hasItems(e.directives)) {\n r += \" \" + e.directives.map(y.Directive).join(\" \");\n }\n return r;\n },\n InlineFragment(e) {\n var r = \"...\";\n if (e.typeCondition) {\n r += \" on \" + e.typeCondition.name.value;\n }\n if (hasItems(e.directives)) {\n r += \" \" + e.directives.map(y.Directive).join(\" \");\n }\n return r + \" \" + print(e.selectionSet);\n },\n FragmentDefinition(e) {\n var r = \"fragment \" + e.name.value;\n r += \" on \" + e.typeCondition.name.value;\n if (hasItems(e.directives)) {\n r += \" \" + e.directives.map(y.Directive).join(\" \");\n }\n return r + \" \" + print(e.selectionSet);\n },\n Directive(e) {\n var r = \"@\" + e.name.value;\n if (hasItems(e.arguments)) {\n r += \"(\" + e.arguments.map(y.Argument).join(\", \") + \")\";\n }\n return r;\n },\n NamedType: e => e.name.value,\n ListType: e => \"[\" + print(e.type) + \"]\",\n NonNullType: e => print(e.type) + \"!\"\n};\n\nfunction print(e) {\n return y[e.kind] ? y[e.kind](e) : \"\";\n}\n\nfunction valueFromASTUntyped(e, r) {\n switch (e.kind) {\n case \"NullValue\":\n return null;\n\n case \"IntValue\":\n return parseInt(e.value, 10);\n\n case \"FloatValue\":\n return parseFloat(e.value);\n\n case \"StringValue\":\n case \"EnumValue\":\n case \"BooleanValue\":\n return e.value;\n\n case \"ListValue\":\n var i = [];\n for (var n = 0, a = e.values; n < a.length; n += 1) {\n i.push(valueFromASTUntyped(a[n], r));\n }\n return i;\n\n case \"ObjectValue\":\n var t = Object.create(null);\n for (var o = 0, l = e.fields; o < l.length; o += 1) {\n var u = l[o];\n t[u.name.value] = valueFromASTUntyped(u.value, r);\n }\n return t;\n\n case \"Variable\":\n return r && r[e.name.value];\n }\n}\n\nfunction valueFromTypeNode(e, r, i) {\n if (\"Variable\" === e.kind) {\n return i ? valueFromTypeNode(i[e.name.value], r, i) : void 0;\n } else if (\"NonNullType\" === r.kind) {\n return \"NullValue\" !== e.kind ? valueFromTypeNode(e, r, i) : void 0;\n } else if (\"NullValue\" === e.kind) {\n return null;\n } else if (\"ListType\" === r.kind) {\n if (\"ListValue\" === e.kind) {\n var n = [];\n for (var a = 0, t = e.values; a < t.length; a += 1) {\n var o = valueFromTypeNode(t[a], r.type, i);\n if (void 0 === o) {\n return;\n } else {\n n.push(o);\n }\n }\n return n;\n }\n } else if (\"NamedType\" === r.kind) {\n switch (r.name.value) {\n case \"Int\":\n case \"Float\":\n case \"String\":\n case \"Bool\":\n return r.name.value + \"Value\" === e.kind ? valueFromASTUntyped(e, i) : void 0;\n\n default:\n return valueFromASTUntyped(e, i);\n }\n }\n}\n\nexport { h as BREAK, GraphQLError, e as Kind, r as OperationTypeNode, parse, parseType, parseValue, print, printBlockString, printString, valueFromASTUntyped, valueFromTypeNode, visit };\n//# sourceMappingURL=graphql.web.mjs.map\n","export const templates = new Set(['gql', 'graphql']);\n","import { ts } from '../ts';\nimport { templates } from './templates';\n\n/** Checks for an immediately-invoked function expression */\nexport const isIIFE = (node: ts.Node): boolean =>\n ts.isCallExpression(node) &&\n node.arguments.length === 0 &&\n (ts.isFunctionExpression(node.expression) ||\n ts.isArrowFunction(node.expression)) &&\n !node.expression.asteriskToken &&\n !node.expression.modifiers?.length;\n\n/** Checks if node is a known identifier of graphql functions ('graphql' or 'gql') */\nexport const isGraphQLFunctionIdentifier = (\n node: ts.Node\n): node is ts.Identifier =>\n ts.isIdentifier(node) && templates.has(node.escapedText as string);\n\n/** If `checker` is passed, checks if node (as identifier/expression) is a gql.tada graphql() function */\nexport const isTadaGraphQLFunction = (\n node: ts.Node,\n checker: ts.TypeChecker | undefined\n): node is ts.LeftHandSideExpression => {\n if (!ts.isLeftHandSideExpression(node)) return false;\n const type = checker?.getTypeAtLocation(node);\n // Any function that has both a `scalar` and `persisted` property\n // is automatically considered a gql.tada graphql() function.\n return (\n type != null &&\n type.getProperty('scalar') != null &&\n type.getProperty('persisted') != null\n );\n};\n\n/** If `checker` is passed, checks if node is a gql.tada graphql() call */\nexport const isTadaGraphQLCall = (\n node: ts.CallExpression,\n checker: ts.TypeChecker | undefined\n): boolean => {\n // We expect graphql() to be called with either a string literal\n // or a string literal and an array of fragments\n if (!ts.isCallExpression(node)) {\n return false;\n } else if (node.arguments.length < 1 || node.arguments.length > 2) {\n return false;\n } else if (!ts.isStringLiteralLike(node.arguments[0]!)) {\n return false;\n }\n return checker ? isTadaGraphQLFunction(node.expression, checker) : false;\n};\n\n/** Checks if node is a gql.tada graphql.persisted() call */\nexport const isTadaPersistedCall = (\n node: ts.Node | undefined,\n checker: ts.TypeChecker | undefined\n): node is ts.CallExpression => {\n if (!node) {\n return false;\n } else if (!ts.isCallExpression(node)) {\n return false;\n } else if (!ts.isPropertyAccessExpression(node.expression)) {\n return false; // rejecting non property access calls: <expression>.<name>()\n } else if (\n !ts.isIdentifier(node.expression.name) ||\n node.expression.name.escapedText !== 'persisted'\n ) {\n return false; // rejecting calls on anyting but 'persisted': <expression>.persisted()\n } else if (isGraphQLFunctionIdentifier(node.expression.expression)) {\n return true;\n } else {\n return isTadaGraphQLFunction(node.expression.expression, checker);\n }\n};\n\n// As per check in `isGraphQLCall()` below, enforces arguments length\nexport type GraphQLCallNode = ts.CallExpression & {\n arguments: [ts.Expression] | [ts.Expression, ts.Expression];\n};\n\n/** Checks if node is a gql.tada or regular graphql() call */\nexport const isGraphQLCall = (\n node: ts.Node,\n checker: ts.TypeChecker | undefined\n): node is GraphQLCallNode => {\n return (\n ts.isCallExpression(node) &&\n node.arguments.length >= 1 &&\n node.arguments.length <= 2 &&\n (isGraphQLFunctionIdentifier(node.expression) ||\n isTadaGraphQLCall(node, checker))\n );\n};\n\n/** Checks if node is a gql/graphql tagged template literal */\nexport const isGraphQLTag = (\n node: ts.Node\n): node is ts.TaggedTemplateExpression =>\n ts.isTaggedTemplateExpression(node) && isGraphQLFunctionIdentifier(node.tag);\n\n/** Retrieves the `__name` branded tag from gql.tada `graphql()` or `graphql.persisted()` calls */\nexport const getSchemaName = (\n node: ts.CallExpression,\n typeChecker: ts.TypeChecker | undefined,\n isTadaPersistedCall = false\n): string | null => {\n if (!typeChecker) return null;\n const type = typeChecker.getTypeAtLocation(\n // When calling `graphql.persisted`, we need to access the `graphql` part of\n // the expression; `node.expression` is the `.persisted` part\n isTadaPersistedCall ? node.getChildAt(0).getChildAt(0) : node.expression\n );\n if (type) {\n const brandTypeSymbol = type.getProperty('__name');\n if (brandTypeSymbol) {\n const brand = typeChecker.getTypeOfSymbol(brandTypeSymbol);\n if (brand.isUnionOrIntersection()) {\n const found = brand.types.find(x => x.isStringLiteral());\n return found && found.isStringLiteral() ? found.value : null;\n } else if (brand.isStringLiteral()) {\n return brand.value;\n }\n }\n }\n return null;\n};\n","import { ts } from '../ts';\n\nexport type ValueDeclaration =\n | ts.BinaryExpression\n | ts.ArrowFunction\n | ts.BindingElement\n | ts.ClassDeclaration\n | ts.ClassExpression\n | ts.ClassStaticBlockDeclaration\n | ts.ConstructorDeclaration\n | ts.EnumDeclaration\n | ts.EnumMember\n | ts.ExportAssignment\n | ts.ExportSpecifier\n | ts.FunctionDeclaration\n | ts.FunctionExpression\n | ts.GetAccessorDeclaration\n | ts.JsxAttribute\n | ts.MethodDeclaration\n | ts.ModuleDeclaration\n | ts.ParameterDeclaration\n | ts.PropertyAssignment\n | ts.PropertyDeclaration\n | ts.SetAccessorDeclaration\n | ts.ShorthandPropertyAssignment\n | ts.VariableDeclaration;\n\nexport type ValueOfDeclaration =\n | ts.ClassExpression\n | ts.ClassDeclaration\n | ts.ArrowFunction\n | ts.ClassStaticBlockDeclaration\n | ts.ConstructorDeclaration\n | ts.EnumDeclaration\n | ts.FunctionDeclaration\n | ts.GetAccessorDeclaration\n | ts.SetAccessorDeclaration\n | ts.MethodDeclaration\n | ts.Expression;\n\n/** Checks if a node is a `ts.Declaration` and a value.\n * @remarks\n * This checks if a given node is a value declaration only,\n * excluding import/export specifiers, type declarations, and\n * ambient declarations.\n * All declarations that aren't JS(x) nodes will be discarded.\n * This is based on `ts.isDeclarationKind`.\n */\nexport function isValueDeclaration(node: ts.Node): node is ValueDeclaration {\n switch (node.kind) {\n case ts.SyntaxKind.BinaryExpression:\n case ts.SyntaxKind.ArrowFunction:\n case ts.SyntaxKind.BindingElement:\n case ts.SyntaxKind.ClassDeclaration:\n case ts.SyntaxKind.ClassExpression:\n case ts.SyntaxKind.ClassStaticBlockDeclaration:\n case ts.SyntaxKind.Constructor:\n case ts.SyntaxKind.EnumDeclaration:\n case ts.SyntaxKind.EnumMember:\n case ts.SyntaxKind.ExportAssignment:\n case ts.SyntaxKind.FunctionDeclaration:\n case ts.SyntaxKind.FunctionExpression:\n case ts.SyntaxKind.GetAccessor:\n case ts.SyntaxKind.JsxAttribute:\n case ts.SyntaxKind.MethodDeclaration:\n case ts.SyntaxKind.Parameter:\n case ts.SyntaxKind.PropertyAssignment:\n case ts.SyntaxKind.PropertyDeclaration:\n case ts.SyntaxKind.SetAccessor:\n case ts.SyntaxKind.ShorthandPropertyAssignment:\n case ts.SyntaxKind.VariableDeclaration:\n return true;\n default:\n return false;\n }\n}\n\n/** Returns true if operator assigns a value unchanged */\nfunction isAssignmentOperator(token: ts.BinaryOperatorToken): boolean {\n switch (token.kind) {\n case ts.SyntaxKind.EqualsToken:\n case ts.SyntaxKind.BarBarEqualsToken:\n case ts.SyntaxKind.AmpersandAmpersandEqualsToken:\n case ts.SyntaxKind.QuestionQuestionEqualsToken:\n return true;\n default:\n return false;\n }\n}\n\n/** Evaluates to the declaration's value initializer or itself if it declares a value */\nexport function getValueOfValueDeclaration(\n node: ValueDeclaration\n): ValueOfDeclaration | undefined {\n switch (node.kind) {\n case ts.SyntaxKind.ClassExpression:\n case ts.SyntaxKind.ClassDeclaration:\n case ts.SyntaxKind.ArrowFunction:\n case ts.SyntaxKind.ClassStaticBlockDeclaration:\n case ts.SyntaxKind.Constructor:\n case ts.SyntaxKind.EnumDeclaration:\n case ts.SyntaxKind.FunctionDeclaration:\n case ts.SyntaxKind.FunctionExpression:\n case ts.SyntaxKind.GetAccessor:\n case ts.SyntaxKind.SetAccessor:\n case ts.SyntaxKind.MethodDeclaration:\n return node;\n case ts.SyntaxKind.BindingElement:\n case ts.SyntaxKind.EnumMember:\n case ts.SyntaxKind.JsxAttribute:\n case ts.SyntaxKind.Parameter:\n case ts.SyntaxKind.PropertyAssignment:\n case ts.SyntaxKind.PropertyDeclaration:\n case ts.SyntaxKind.VariableDeclaration:\n return node.initializer;\n case ts.SyntaxKind.ExportAssignment:\n return node.expression;\n case ts.SyntaxKind.BinaryExpression:\n return isAssignmentOperator(node.operatorToken) ? node.right : undefined;\n case ts.SyntaxKind.ShorthandPropertyAssignment:\n return node.objectAssignmentInitializer;\n default:\n return undefined;\n }\n}\n\n// See: https://github.com/microsoft/TypeScript/blob/a5eec24/src/services/utilities.ts#L652-L654\nfunction climbPastPropertyOrElementAccess(node: ts.Node): ts.Node {\n if (\n node.parent &&\n ts.isPropertyAccessExpression(node.parent) &&\n node.parent.name === node\n ) {\n return node.parent;\n } else if (\n node.parent &&\n ts.isElementAccessExpression(node.parent) &&\n node.parent.argumentExpression === node\n ) {\n return node.parent;\n } else {\n return node;\n }\n}\n\n// See: https://github.com/microsoft/TypeScript/blob/a5eec24/src/services/utilities.ts#L602-L605\nfunction isNewExpressionTarget(node: ts.Node): node is ts.NewExpression {\n const target = climbPastPropertyOrElementAccess(node).parent;\n return ts.isNewExpression(target) && target.expression === node;\n}\n\n// See: https://github.com/microsoft/TypeScript/blob/a5eec24/src/services/utilities.ts#L607-L610\nfunction isCallOrNewExpressionTarget(\n node: ts.Node\n): node is ts.CallExpression | ts.NewExpression {\n const target = climbPastPropertyOrElementAccess(node).parent;\n return ts.isCallOrNewExpression(target) && target.expression === node;\n}\n\n// See: https://github.com/microsoft/TypeScript/blob/a5eec24/src/services/utilities.ts#L716-L719\nfunction isNameOfFunctionDeclaration(node: ts.Node): boolean {\n return (\n ts.isIdentifier(node) &&\n node.parent &&\n ts.isFunctionLike(node.parent) &&\n node.parent.name === node\n );\n}\n\n// See: https://github.com/microsoft/TypeScript/blob/a5eec24/src/services/utilities.ts#L2441-L2447\nfunction getNameFromPropertyName(name: ts.PropertyName): string | undefined {\n if (ts.isComputedPropertyName(name)) {\n return ts.isStringLiteralLike(name.expression) ||\n ts.isNumericLiteral(name.expression)\n ? name.expression.text\n : undefined;\n } else if (ts.isPrivateIdentifier(name) || ts.isMemberName(name)) {\n return ts.idText(name);\n } else {\n return name.text;\n }\n}\n\n/** Resolves the declaration of an identifier.\n * @remarks\n * This returns the declaration node first found for an identifier by resolving an identifier's\n * symbol via the type checker.\n * @privateRemarks\n * This mirrors the implementation of `getDefinitionAtPosition` in TS' language service. However,\n * it removes all cases that aren't applicable to identifiers and removes the intermediary positional\n * data structure, instead returning raw AST nodes.\n */\nexport function getDeclarationOfIdentifier(\n node: ts.Identifier,\n checker: ts.TypeChecker\n): ValueDeclaration | undefined {\n // See: https://github.com/microsoft/TypeScript/blob/a5eec24/src/services/goToDefinition.ts#L523-L540\n let symbol = checker.getSymbolAtLocation(node);\n if (\n symbol?.declarations?.[0] &&\n symbol.flags & ts.SymbolFlags.Alias &&\n (node.parent === symbol?.declarations?.[0] ||\n !ts.isNamespaceImport(symbol.declarations[0]))\n ) {\n // Resolve alias symbols, excluding self-referential symbols\n const aliased = checker.getAliasedSymbol(symbol);\n if (aliased.declarations) symbol = aliased;\n }\n\n if (symbol && ts.isShorthandPropertyAssignment(node.parent)) {\n // See: https://github.com/microsoft/TypeScript/blob/a5eec24/src/services/goToDefinition.ts#L248-L257\n // Resolve shorthand property assignments\n const shorthandSymbol = checker.getShorthandAssignmentValueSymbol(\n symbol.valueDeclaration\n );\n if (shorthandSymbol) symbol = shorthandSymbol;\n } else if (\n ts.isBindingElement(node.parent) &&\n ts.isObjectBindingPattern(node.parent.parent) &&\n node === (node.parent.propertyName || node.parent.name)\n ) {\n // See: https://github.com/microsoft/TypeScript/blob/a5eec24/src/services/goToDefinition.ts#L259-L280\n // Resolve symbol of property in shorthand assignments\n const name = getNameFromPropertyName(node);\n const prop = name\n ? checker.getTypeAtLocation(node.parent.parent).getProperty(name)\n : undefined;\n if (prop) symbol = prop;\n } else if (\n ts.isObjectLiteralElement(node.parent) &&\n (ts.isObjectLiteralExpression(node.parent.parent) ||\n ts.isJsxAttributes(node.parent.parent)) &&\n node.parent.name === node\n ) {\n // See: https://github.com/microsoft/TypeScript/blob/a5eec24/src/services/goToDefinition.ts#L298-L316\n // Resolve symbol of property in object literal destructre expressions\n const name = getNameFromPropertyName(node);\n const prop = name\n ? checker.getContextualType(node.parent.parent)?.getProperty(name)\n : undefined;\n if (prop) symbol = prop;\n }\n\n if (symbol && symbol.declarations?.length) {\n if (\n symbol.flags & ts.SymbolFlags.Class &&\n !(symbol.flags & (ts.SymbolFlags.Function | ts.SymbolFlags.Variable)) &&\n isNewExpressionTarget(node)\n ) {\n // See: https://github.com/microsoft/TypeScript/blob/a5eec24/src/services/goToDefinition.ts#L603-L610\n // Resolve first class-like declaration for new expressions\n for (const declaration of symbol.declarations) {\n if (ts.isClassLike(declaration)) return declaration;\n }\n } else if (\n isCallOrNewExpressionTarget(node) ||\n isNameOfFunctionDeclaration(node)\n ) {\n // See: https://github.com/microsoft/TypeScript/blob/a5eec24/src/services/goToDefinition.ts#L612-L616\n // Resolve first function-like declaration for call expressions or named functions\n for (const declaration of symbol.declarations) {\n if (\n ts.isFunctionLike(declaration) &&\n !!(declaration as ts.FunctionLikeDeclaration).body &&\n isValueDeclaration(declaration)\n ) {\n return declaration;\n }\n }\n }\n\n // Account for assignments to property access expressions\n // This resolves property access expressions to binding element parents\n if (\n symbol.valueDeclaration &&\n ts.isPropertyAccessExpression(symbol.valueDeclaration)\n ) {\n const parent = symbol.valueDeclaration.parent;\n if (\n parent &&\n ts.isBinaryExpression(parent) &&\n parent.left === symbol.valueDeclaration\n ) {\n return parent;\n }\n }\n\n if (\n symbol.valueDeclaration &&\n isValueDeclaration(symbol.valueDeclaration)\n ) {\n // NOTE: We prefer value declarations, since the checker may have already applied conditions\n // similar to `isValueDeclaration` and selected it beforehand\n // Only use value declarations if they're not type/ambient declarations or imports/exports\n return symbol.valueDeclaration;\n }\n\n // Selecting the first available result, if any\n // NOTE: We left out `!isExpandoDeclaration` as a condition, since `valueDeclaration` above\n // should handle some of these cases, and we don't have to care about this subtlety as much for identifiers\n // See: https://github.com/microsoft/TypeScript/blob/a5eec24/src/services/goToDefinition.ts#L582-L590\n for (const declaration of symbol.declarations) {\n // Only use declarations if they're not type/ambient declarations or imports/exports\n if (isValueDeclaration(declaration)) return declaration;\n }\n }\n\n return undefined;\n}\n\n/** Loops {@link getDeclarationOfIdentifier} until a value of the identifier is found */\nexport function getValueOfIdentifier(\n node: ts.Identifier,\n checker: ts.TypeChecker\n): ValueOfDeclaration | undefined {\n while (ts.isIdentifier(node)) {\n const declaration = getDeclarationOfIdentifier(node, checker);\n if (!declaration) {\n return undefined;\n } else {\n const value = getValueOfValueDeclaration(declaration);\n if (value && ts.isIdentifier(value) && value !== node) {\n // If the resolved value is another identifiers, we continue searching, if the\n // identifier isn't self-referential\n node = value;\n } else {\n return value;\n }\n }\n }\n}\n\n/** Resolves exressions that might not influence the target identifier */\nexport function getIdentifierOfChainExpression(\n node: ts.Expression\n): ts.Identifier | undefined {\n let target: ts.Expression | undefined = node;\n while (target) {\n if (ts.isPropertyAccessExpression(target)) {\n target = target.name;\n } else if (\n ts.isAsExpression(target) ||\n ts.isSatisfiesExpression(target) ||\n ts.isNonNullExpression(target) ||\n ts.isParenthesizedExpression(target) ||\n ts.isExpressionWithTypeArguments(target)\n ) {\n target = target.expression;\n } else if (ts.isCommaListExpression(target)) {\n target = target.elements[target.elements.length - 1];\n } else if (ts.isIdentifier(target)) {\n return target;\n } else {\n return;\n }\n }\n}\n","import { print } from '@0no-co/graphql.web';\nimport { ts } from '../ts';\nimport {\n getDeclarationOfIdentifier,\n getValueOfValueDeclaration,\n} from './declaration';\n\ntype TemplateResult = {\n combinedText: string;\n resolvedSpans: Array<{\n lines: number;\n identifier: string;\n original: { start: number; length: number };\n new: { start: number; length: number };\n }>;\n};\n\nexport function resolveTemplate(\n node: ts.TaggedTemplateExpression | ts.StringLiteralLike,\n filename: string,\n info: ts.server.PluginCreateInfo\n): TemplateResult {\n if (ts.isStringLiteralLike(node)) {\n return { combinedText: node.getText().slice(1, -1), resolvedSpans: [] };\n }\n\n let templateText = node.template.getText().slice(1, -1);\n if (\n ts.isNoSubstitutionTemplateLiteral(node.template) ||\n node.template.templateSpans.length === 0\n ) {\n return { combinedText: templateText, resolvedSpans: [] };\n }\n\n let addedCharacters = 0;\n const resolvedSpans = node.template.templateSpans\n .map(span => {\n if (ts.isIdentifier(span.expression)) {\n const typeChecker = info.languageService.getProgram()?.getTypeChecker();\n if (!typeChecker) return;\n\n const declaration = getDeclarationOfIdentifier(\n span.expression,\n typeChecker\n );\n if (!declaration) return;\n\n const parent = declaration;\n if (ts.isVariableDeclaration(parent)) {\n const identifierName = span.expression.escapedText;\n const value = getValueOfValueDeclaration(parent);\n if (!value) return;\n\n // we reduce by two to account for the \"${\"\n const originalStart = span.expression.getStart() - 2;\n const originalRange = {\n start: originalStart,\n // we add 1 to account for the \"}\"\n length: span.expression.end - originalStart + 1,\n };\n\n if (ts.isTaggedTemplateExpression(value)) {\n const text = resolveTemplate(\n value,\n parent.getSourceFile().fileName,\n info\n );\n templateText = templateText.replace(\n '${' + span.expression.escapedText + '}',\n text.combinedText\n );\n\n const alteredSpan = {\n lines: text.combinedText.split('\\n').length,\n identifier: identifierName,\n original: originalRange,\n new: {\n start: originalRange.start + addedCharacters,\n length: text.combinedText.length,\n },\n };\n addedCharacters += text.combinedText.length - originalRange.length;\n return alteredSpan;\n } else if (\n ts.isAsExpression(value) &&\n ts.isTaggedTemplateExpression(value.expression)\n ) {\n const text = resolveTemplate(\n value.expression,\n parent.getSourceFile().fileName,\n info\n );\n templateText = templateText.replace(\n '${' + span.expression.escapedText + '}',\n text.combinedText\n );\n const alteredSpan = {\n lines: text.combinedText.split('\\n').length,\n identifier: identifierName,\n original: originalRange,\n new: {\n start: originalRange.start + addedCharacters,\n length: text.combinedText.length,\n },\n };\n addedCharacters += text.combinedText.length - originalRange.length;\n return alteredSpan;\n } else if (\n ts.isAsExpression(value) &&\n ts.isAsExpression(value.expression) &&\n ts.isObjectLiteralExpression(value.expression.expression)\n ) {\n const astObject = JSON.parse(value.expression.expression.getText());\n const resolvedTemplate = print(astObject);\n templateText = templateText.replace(\n '${' + span.expression.escapedText + '}',\n resolvedTemplate\n );\n const alteredSpan = {\n lines: resolvedTemplate.split('\\n').length,\n identifier: identifierName,\n original: originalRange,\n new: {\n start: originalRange.start + addedCharacters,\n length: resolvedTemplate.length,\n },\n };\n addedCharacters += resolvedTemplate.length - originalRange.length;\n return alteredSpan;\n }\n\n return undefined;\n }\n }\n\n return undefined;\n })\n .filter(Boolean) as TemplateResult['resolvedSpans'];\n\n return { combinedText: templateText, resolvedSpans };\n}\n\nexport const resolveTadaFragmentArray = (\n node: ts.Expression | undefined\n): undefined | readonly ts.Identifier[] => {\n if (!node) return undefined;\n // NOTE: Remove `as T`, users may commonly use `as const` for no reason\n while (ts.isAsExpression(node)) node = node.expression;\n if (!ts.isArrayLiteralExpression(node)) return undefined;\n // NOTE: Let's avoid the allocation of another array here if we can\n if (node.elements.every(ts.isIdentifier)) return node.elements;\n const identifiers: ts.Identifier[] = [];\n for (let element of node.elements) {\n while (ts.isPropertyAccessExpression(element)) element = element.name;\n if (ts.isIdentifier(element)) identifiers.push(element);\n }\n return identifiers;\n};\n","import { ts } from '../ts';\nimport { FragmentDefinitionNode, parse } from 'graphql';\nimport * as checks from './checks';\nimport { resolveTadaFragmentArray } from './resolve';\nimport {\n getDeclarationOfIdentifier,\n getValueOfIdentifier,\n getIdentifierOfChainExpression,\n} from './declaration';\n\nexport { getSchemaName } from './checks';\n\nexport function getSource(info: ts.server.PluginCreateInfo, filename: string) {\n const program = info.languageService.getProgram();\n if (!program) return undefined;\n\n const source = program.getSourceFile(filename);\n if (!source) return undefined;\n\n return source;\n}\n\nexport function findNode(\n sourceFile: ts.SourceFile,\n position: number\n): ts.Node | undefined {\n function find(node: ts.Node): ts.Node | undefined {\n if (position >= node.getStart() && position < node.getEnd()) {\n return ts.forEachChild(node, find) || node;\n }\n }\n return find(sourceFile);\n}\n\nexport function findAllTaggedTemplateNodes(\n sourceFile: ts.SourceFile | ts.Node\n): Array<ts.TaggedTemplateExpression | ts.NoSubstitutionTemplateLiteral> {\n const result: Array<\n ts.TaggedTemplateExpression | ts.NoSubstitutionTemplateLiteral\n > = [];\n function find(node: ts.Node) {\n if (\n checks.isGraphQLTag(node) ||\n (ts.isNoSubstitutionTemplateLiteral(node) &&\n checks.isGraphQLTag(node.parent))\n ) {\n result.push(node);\n return;\n } else {\n ts.forEachChild(node, find);\n }\n }\n find(sourceFile);\n return result;\n}\n\nfunction resolveIdentifierToGraphQLCall(\n input: ts.Identifier,\n info: ts.server.PluginCreateInfo,\n checker: ts.TypeChecker | undefined\n): checks.GraphQLCallNode | null {\n if (!checker) return null;\n\n const value = getValueOfIdentifier(input, checker);\n if (!value) return null;\n\n // Check whether we've got a `graphql()` or `gql()` call\n return checks.isGraphQLCall(value, checker) ? value : null;\n}\n\nfunction unrollFragment(\n element: ts.Identifier,\n info: ts.server.PluginCreateInfo,\n checker: ts.TypeChecker | undefined\n): Array<FragmentDefinitionNode> {\n const fragments: FragmentDefinitionNode[] = [];\n const elements: ts.Identifier[] = [element];\n const seen = new WeakSet<ts.Identifier>();\n\n const _unrollElement = (element: ts.Identifier): void => {\n if (seen.has(element)) return;\n seen.add(element);\n\n const node = resolveIdentifierToGraphQLCall(element, info, checker);\n if (!node) return;\n\n const fragmentRefs = resolveTadaFragmentArray(node.arguments[1]);\n if (fragmentRefs) elements.push(...fragmentRefs);\n\n try {\n const text = node.arguments[0];\n const parsed = parse(text.getText().slice(1, -1), { noLocation: true });\n parsed.definitions.forEach(definition => {\n if (definition.kind === 'FragmentDefinition') {\n fragments.push(definition);\n }\n });\n } catch (_error) {\n // NOTE: Assume graphql.parse errors can be ignored\n }\n };\n\n let nextElement: ts.Identifier | undefined;\n while ((nextElement = elements.shift()) !== undefined)\n _unrollElement(nextElement);\n return fragments;\n}\n\nexport function unrollTadaFragments(\n fragmentsArray: ts.ArrayLiteralExpression,\n wip: FragmentDefinitionNode[],\n info: ts.server.PluginCreateInfo\n): FragmentDefinitionNode[] {\n const typeChecker = info.languageService.getProgram()?.getTypeChecker();\n fragmentsArray.elements.forEach(element => {\n if (ts.isIdentifier(element)) {\n wip.push(...unrollFragment(element, info, typeChecker));\n } else if (ts.isPropertyAccessExpression(element)) {\n let el = element;\n while (ts.isPropertyAccessExpression(el.expression)) el = el.expression;\n if (ts.isIdentifier(el.name)) {\n wip.push(...unrollFragment(el.name, info, typeChecker));\n }\n }\n });\n\n return wip;\n}\n\nexport function findAllCallExpressions(\n sourceFile: ts.SourceFile,\n info: ts.server.PluginCreateInfo,\n shouldSearchFragments: boolean = true\n): {\n nodes: Array<{\n node: ts.StringLiteralLike;\n schema: string | null;\n }>;\n fragments: Array<FragmentDefinitionNode>;\n} {\n const typeChecker = info.languageService.getProgram()?.getTypeChecker();\n const result: Array<{\n node: ts.StringLiteralLike;\n schema: string | null;\n }> = [];\n let fragments: Array<FragmentDefinitionNode> = [];\n let hasTriedToFindFragments = shouldSearchFragments ? false : true;\n\n function find(node: ts.Node): void {\n if (!ts.isCallExpression(node) || checks.isIIFE(node)) {\n return ts.forEachChild(node, find);\n }\n\n // Check whether we've got a `graphql()` or `gql()` call, by the\n // call expression's identifier\n if (!checks.isGraphQLCall(node, typeChecker)) {\n return ts.forEachChild(node, find);\n }\n\n const name = checks.getSchemaName(node, typeChecker);\n const text = node.arguments[0];\n const fragmentRefs = resolveTadaFragmentArray(node.arguments[1]);\n\n if (!hasTriedToFindFragments && !fragmentRefs) {\n hasTriedToFindFragments = true;\n fragments.push(...getAllFragments(sourceFile.fileName, node, info));\n } else if (fragmentRefs) {\n for (const identifier of fragmentRefs) {\n fragments.push(...unrollFragment(identifier, info, typeChecker));\n }\n }\n\n if (text && ts.isStringLiteralLike(text)) {\n result.push({ node: text, schema: name });\n }\n }\n find(sourceFile);\n return { nodes: result, fragments };\n}\n\nexport function findAllPersistedCallExpressions(\n sourceFile: ts.SourceFile\n): Array<ts.CallExpression>;\nexport function findAllPersistedCallExpressions(\n sourceFile: ts.SourceFile,\n info: ts.server.PluginCreateInfo\n): Array<{ node: ts.CallExpression; schema: string | null }>;\n\nexport function findAllPersistedCallExpressions(\n sourceFile: ts.SourceFile,\n info?: ts.server.PluginCreateInfo\n) {\n const result: Array<\n ts.CallExpression | { node: ts.CallExpression; schema: string | null }\n > = [];\n const typeChecker = info?.languageService.getProgram()?.getTypeChecker();\n function find(node: ts.Node): void {\n if (!ts.isCallExpression(node) || checks.isIIFE(node)) {\n return ts.forEachChild(node, find);\n }\n\n if (!checks.isTadaPersistedCall(node, typeChecker)) {\n return;\n } else if (info) {\n const name = checks.getSchemaName(node, typeChecker, true);\n result.push({ node, schema: name });\n } else {\n result.push(node);\n }\n }\n find(sourceFile);\n return result;\n}\n\nexport function getAllFragments(\n fileName: string,\n node: ts.Node,\n info: ts.server.PluginCreateInfo\n) {\n let fragments: Array<FragmentDefinitionNode> = [];\n\n const typeChecker = info.languageService.getProgram()?.getTypeChecker();\n if (!ts.isCallExpression(node)) {\n return fragments;\n }\n\n const fragmentRefs = resolveTadaFragmentArray(node.arguments[1]);\n if (fragmentRefs) {\n const typeChecker = info.languageService.getProgram()?.getTypeChecker();\n for (const identifier of fragmentRefs) {\n fragments.push(...unrollFragment(identifier, info, typeChecker));\n }\n return fragments;\n } else if (checks.isTadaGraphQLCall(node, typeChecker)) {\n return fragments;\n }\n\n if (!typeChecker) return fragments;\n\n const identifier = getIdentifierOfChainExpression(node.expression);\n if (!identifier) return fragments;\n\n const declaration = getDeclarationOfIdentifier(identifier, typeChecker);\n if (!declaration) return fragments;\n\n const sourceFile = declaration.getSourceFile();\n if (!sourceFile) return fragments;\n\n const definitions = [\n {\n fileName: sourceFile.fileName,\n textSpan: {\n start: declaration.getStart(),\n length: declaration.getWidth(),\n },\n },\n ];\n if (!definitions || !definitions.length) return fragments;\n\n const def = definitions[0];\n if (!def) return fragments;\n const src = getSource(info, def.fileName);\n if (!src) return fragments;\n\n ts.forEachChild(src, node => {\n if (\n ts.isVariableStatement(node) &&\n node.declarationList &&\n node.declarationList.declarations[0] &&\n node.declarationList.declarations[0].name.getText() === 'documents'\n ) {\n const [declaration] = node.declarationList.declarations;\n if (\n declaration.initializer &&\n ts.isObjectLiteralExpression(declaration.initializer)\n ) {\n declaration.initializer.properties.forEach(property => {\n if (\n ts.isPropertyAssignment(property) &&\n ts.isStringLiteral(property.name)\n ) {\n try {\n const possibleFragment = JSON.parse(\n `${property.name.getText().replace(/'/g, '\"')}`\n );\n\n if (\n possibleFragment.includes('fragment ') &&\n possibleFragment.includes(' on ')\n ) {\n const parsed = parse(possibleFragment, {\n noLocation: true,\n });\n parsed.definitions.forEach(definition => {\n if (definition.kind === 'FragmentDefinition') {\n fragments.push(definition);\n }\n });\n }\n } catch (e: any) {}\n }\n });\n }\n }\n });\n\n return fragments;\n}\n\nexport function findAllImports(\n sourceFile: ts.SourceFile\n): Array<ts.ImportDeclaration> {\n return sourceFile.statements.filter(ts.isImportDeclaration);\n}\n\nexport function bubbleUpTemplate(node: ts.Node): ts.Node {\n while (\n ts.isNoSubstitutionTemplateLiteral(node) ||\n ts.isToken(node) ||\n ts.isTemplateExpression(node) ||\n ts.isTemplateSpan(node)\n ) {\n node = node.parent;\n }\n\n return node;\n}\n\nexport function bubbleUpCallExpression(node: ts.Node): ts.Node {\n while (\n ts.isStringLiteralLike(node) ||\n ts.isToken(node) ||\n ts.isTemplateExpression(node) ||\n ts.isTemplateSpan(node)\n ) {\n node = node.parent;\n }\n\n return node;\n}\n","/**\n * @module LRUCache\n */\nconst perf = typeof performance === 'object' &&\n performance &&\n typeof performance.now === 'function'\n ? performance\n : Date;\nconst warned = new Set();\n/* c8 ignore start */\nconst PROCESS = (typeof process === 'object' && !!process ? process : {});\n/* c8 ignore start */\nconst emitWarning = (msg, type, code, fn) => {\n typeof PROCESS.emitWarning === 'function'\n ? PROCESS.emitWarning(msg, type, code, fn)\n : console.error(`[${code}] ${type}: ${msg}`);\n};\nlet AC = globalThis.AbortController;\nlet AS = globalThis.AbortSignal;\n/* c8 ignore start */\nif (typeof AC === 'undefined') {\n //@ts-ignore\n AS = class AbortSignal {\n onabort;\n _onabort = [];\n reason;\n aborted = false;\n addEventListener(_, fn) {\n this._onabort.push(fn);\n }\n };\n //@ts-ignore\n AC = class AbortController {\n constructor() {\n warnACPolyfill();\n }\n signal = new AS();\n abort(reason) {\n if (this.signal.aborted)\n return;\n //@ts-ignore\n this.signal.reason = reason;\n //@ts-ignore\n this.signal.aborted = true;\n //@ts-ignore\n for (const fn of this.signal._onabort) {\n fn(reason);\n }\n this.signal.onabort?.(reason);\n }\n };\n let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1';\n const warnACPolyfill = () => {\n if (!printACPolyfillWarning)\n return;\n printACPolyfillWarning = false;\n emitWarning('AbortController is not defined. If using lru-cache in ' +\n 'node 14, load an AbortController polyfill from the ' +\n '`node-abort-controller` package. A minimal polyfill is ' +\n 'provided for use by LRUCache.fetch(), but it should not be ' +\n 'relied upon in other contexts (eg, passing it to other APIs that ' +\n 'use AbortController/AbortSignal might have undesirable effects). ' +\n 'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.', 'NO_ABORT_CONTROLLER', 'ENOTSUP', warnACPolyfill);\n };\n}\n/* c8 ignore stop */\nconst shouldWarn = (code) => !warned.has(code);\nconst TYPE = Symbol('type');\nconst isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n);\n/* c8 ignore start */\n// This is a little bit ridiculous, tbh.\n// The maximum array length is 2^32-1 or thereabouts on most JS impls.\n// And well before that point, you're caching the entire world, I mean,\n// that's ~32GB of just integers for the next/prev links, plus whatever\n// else to hold that many keys and values. Just filling the memory with\n// zeroes at init time is brutal when you get that big.\n// But why not be complete?\n// Maybe in the future, these limits will have expanded.\nconst getUintArray = (max) => !isPosInt(max)\n ? null\n : max <= Math.pow(2, 8)\n ? Uint8Array\n : max <= Math.pow(2, 16)\n ? Uint16Array\n : max <= Math.pow(2, 32)\n ? Uint32Array\n : max <= Number.MAX_SAFE_INTEGER\n ? ZeroArray\n : null;\n/* c8 ignore stop */\nclass ZeroArray extends Array {\n constructor(size) {\n super(size);\n this.fill(0);\n }\n}\nclass Stack {\n heap;\n length;\n // private constructor\n static #constructing = false;\n static create(max) {\n const HeapCls = getUintArray(max);\n if (!HeapCls)\n return [];\n Stack.#constructing = true;\n const s = new Stack(max, HeapCls);\n Stack.#constructing = false;\n return s;\n }\n constructor(max, HeapCls) {\n /* c8 ignore start */\n if (!Stack.#constructing) {\n throw new TypeError('instantiate Stack using Stack.create(n)');\n }\n /* c8 ignore stop */\n this.heap = new HeapCls(max);\n this.length = 0;\n }\n push(n) {\n this.heap[this.length++] = n;\n }\n pop() {\n return this.heap[--this.length];\n }\n}\n/**\n * Default export, the thing you're using this module to get.\n *\n * All properties from the options object (with the exception of\n * {@link OptionsBase.max} and {@link OptionsBase.maxSize}) are added as\n * normal public members. (`max` and `maxBase` are read-only getters.)\n * Changing any of these will alter the defaults for subsequent method calls,\n * but is otherwise safe.\n */\nexport class LRUCache {\n // properties coming in from the options of these, only max and maxSize\n // really *need* to be protected. The rest can be modified, as they just\n // set defaults for various methods.\n #max;\n #maxSize;\n #dispose;\n #disposeAfter;\n #fetchMethod;\n /**\n * {@link LRUCache.OptionsBase.ttl}\n */\n ttl;\n /**\n * {@link LRUCache.OptionsBase.ttlResolution}\n */\n ttlResolution;\n /**\n * {@link LRUCache.OptionsBase.ttlAutopurge}\n */\n ttlAutopurge;\n /**\n * {@link LRUCache.OptionsBase.updateAgeOnGet}\n */\n updateAgeOnGet;\n /**\n * {@link LRUCache.OptionsBase.updateAgeOnHas}\n */\n updateAgeOnHas;\n /**\n * {@link LRUCache.OptionsBase.allowStale}\n */\n allowStale;\n /**\n * {@link LRUCache.OptionsBase.noDisposeOnSet}\n */\n noDisposeOnSet;\n /**\n * {@link LRUCache.OptionsBase.noUpdateTTL}\n */\n noUpdateTTL;\n /**\n * {@link LRUCache.OptionsBase.maxEntrySize}\n */\n maxEntrySize;\n /**\n * {@link LRUCache.OptionsBase.sizeCalculation}\n */\n sizeCalculation;\n /**\n * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n */\n noDeleteOnFetchRejection;\n /**\n * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n */\n noDeleteOnStaleGet;\n /**\n * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n */\n allowStaleOnFetchAbort;\n /**\n * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n */\n allowStaleOnFetchRejection;\n /**\n * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n */\n ignoreFetchAbort;\n // computed properties\n #size;\n #calculatedSize;\n #keyMap;\n #keyList;\n #valList;\n #next;\n #prev;\n #head;\n #tail;\n #free;\n #disposed;\n #sizes;\n #starts;\n #ttls;\n #hasDispose;\n #hasFetchMethod;\n #hasDisposeAfter;\n /**\n * Do not call this method unless you need to inspect the\n * inner workings of the cache. If anything returned by this\n * object is modified in any way, strange breakage may occur.\n *\n * These fields are private for a reason!\n *\n * @internal\n */\n static unsafeExposeInternals(c) {\n return {\n // properties\n starts: c.#starts,\n ttls: c.#ttls,\n sizes: c.#sizes,\n keyMap: c.#keyMap,\n keyList: c.#keyList,\n valList: c.#valList,\n next: c.#next,\n prev: c.#prev,\n get head() {\n return c.#head;\n },\n get tail() {\n return c.#tail;\n },\n free: c.#free,\n // methods\n isBackgroundFetch: (p) => c.#isBackgroundFetch(p),\n backgroundFetch: (k, index, options, context) => c.#backgroundFetch(k, index, options, context),\n moveToTail: (index) => c.#moveToTail(index),\n indexes: (options) => c.#indexes(options),\n rindexes: (options) => c.#rindexes(options),\n isStale: (index) => c.#isStale(index),\n };\n }\n // Protected read-only members\n /**\n * {@link LRUCache.OptionsBase.max} (read-only)\n */\n get max() {\n return this.#max;\n }\n /**\n * {@link LRUCache.OptionsBase.maxSize} (read-only)\n */\n get maxSize() {\n return this.#maxSize;\n }\n /**\n * The total computed size of items in the cache (read-only)\n */\n get calculatedSize() {\n return this.#calculatedSize;\n }\n /**\n * The number of items stored in the cache (read-only)\n */\n get size() {\n return this.#size;\n }\n /**\n * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n */\n get fetchMethod() {\n return this.#fetchMethod;\n }\n /**\n * {@link LRUCache.OptionsBase.dispose} (read-only)\n */\n get dispose() {\n return this.#dispose;\n }\n /**\n * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n */\n get disposeAfter() {\n return this.#disposeAfter;\n }\n constructor(options) {\n const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, } = options;\n if (max !== 0 && !isPosInt(max)) {\n throw new TypeError('max option must be a nonnegative integer');\n }\n const UintArray = max ? getUintArray(max) : Array;\n if (!UintArray) {\n throw new Error('invalid max value: ' + max);\n }\n this.#max = max;\n this.#maxSize = maxSize;\n this.maxEntrySize = maxEntrySize || this.#maxSize;\n this.sizeCalculation = sizeCalculation;\n if (this.sizeCalculation) {\n if (!this.#maxSize && !this.maxEntrySize) {\n throw new TypeError('cannot set sizeCalculation without setting maxSize or maxEntrySize');\n }\n if (typeof this.sizeCalculation !== 'function') {\n throw new TypeError('sizeCalculation set to non-function');\n }\n }\n if (fetchMethod !== undefined &&\n typeof fetchMethod !== 'function') {\n throw new TypeError('fetchMethod must be a function if specified');\n }\n this.#fetchMethod = fetchMethod;\n this.#hasFetchMethod = !!fetchMethod;\n this.#keyMap = new Map();\n this.#keyList = new Array(max).fill(undefined);\n this.#valList = new Array(max).fill(undefined);\n this.#next = new UintArray(max);\n this.#prev = new UintArray(max);\n this.#head = 0;\n this.#tail = 0;\n this.#free = Stack.create(max);\n this.#size = 0;\n this.#calculatedSize = 0;\n if (typeof dispose === 'function') {\n this.#dispose = dispose;\n }\n if (typeof disposeAfter === 'function') {\n this.#disposeAfter = disposeAfter;\n this.#disposed = [];\n }\n else {\n this.#disposeAfter = undefined;\n this.#disposed = undefined;\n }\n this.#hasDispose = !!this.#dispose;\n this.#hasDisposeAfter = !!this.#disposeAfter;\n this.noDisposeOnSet = !!noDisposeOnSet;\n this.noUpdateTTL = !!noUpdateTTL;\n this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection;\n this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection;\n this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort;\n this.ignoreFetchAbort = !!ignoreFetchAbort;\n // NB: maxEntrySize is set to maxSize if it's set\n if (this.maxEntrySize !== 0) {\n if (this.#maxSize !== 0) {\n if (!isPosInt(this.#maxSize)) {\n throw new TypeError('maxSize must be a positive integer if specified');\n }\n }\n if (!isPosInt(this.maxEntrySize)) {\n throw new TypeError('maxEntrySize must be a positive integer if specified');\n }\n this.#initializeSizeTracking();\n }\n this.allowStale = !!allowStale;\n this.noDeleteOnStaleGet = !!noDeleteOnStaleGet;\n this.updateAgeOnGet = !!updateAgeOnGet;\n this.updateAgeOnHas = !!updateAgeOnHas;\n this.ttlResolution =\n isPosInt(ttlResolution) || ttlResolution === 0\n ? ttlResolution\n : 1;\n this.ttlAutopurge = !!ttlAutopurge;\n this.ttl = ttl || 0;\n if (this.ttl) {\n if (!isPosInt(this.ttl)) {\n throw new TypeError('ttl must be a positive integer if specified');\n }\n this.#initializeTTLTracking();\n }\n // do not allow completely unbounded caches\n if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n throw new TypeError('At least one of max, maxSize, or ttl is required');\n }\n if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n const code = 'LRU_CACHE_UNBOUNDED';\n if (shouldWarn(code)) {\n warned.add(code);\n const msg = 'TTL caching without ttlAutopurge, max, or maxSize can ' +\n 'result in unbounded memory consumption.';\n emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache);\n }\n }\n }\n /**\n * Return the remaining TTL time for a given entry key\n */\n getRemainingTTL(key) {\n return this.#keyMap.has(key) ? Infinity : 0;\n }\n #initializeTTLTracking() {\n const ttls = new ZeroArray(this.#max);\n const starts = new ZeroArray(this.#max);\n this.#ttls = ttls;\n this.#starts = starts;\n this.#setItemTTL = (index, ttl, start = perf.now()) => {\n starts[index] = ttl !== 0 ? start : 0;\n ttls[index] = ttl;\n if (ttl !== 0 && this.ttlAutopurge) {\n const t = setTimeout(() => {\n if (this.#isStale(index)) {\n this.delete(this.#keyList[index]);\n }\n }, ttl + 1);\n // unref() not supported on all platforms\n /* c8 ignore start */\n if (t.unref) {\n t.unref();\n }\n /* c8 ignore stop */\n }\n };\n this.#updateItemAge = index => {\n starts[index] = ttls[index] !== 0 ? perf.now() : 0;\n };\n this.#statusTTL = (status, index) => {\n if (ttls[index]) {\n const ttl = ttls[index];\n const start = starts[index];\n status.ttl = ttl;\n status.start = start;\n status.now = cachedNow || getNow();\n const age = status.now - start;\n status.remainingTTL = ttl - age;\n }\n };\n // debounce calls to perf.now() to 1s so we're not hitting\n // that costly call repeatedly.\n let cachedNow = 0;\n const getNow = () => {\n const n = perf.now();\n if (this.ttlResolution > 0) {\n cachedNow = n;\n const t = setTimeout(() => (cachedNow = 0), this.ttlResolution);\n // not available on all platforms\n /* c8 ignore start */\n if (t.unref) {\n t.unref();\n }\n /* c8 ignore stop */\n }\n return n;\n };\n this.getRemainingTTL = key => {\n const index = this.#keyMap.get(key);\n if (index === undefined) {\n return 0;\n }\n const ttl = ttls[index];\n const start = starts[index];\n if (ttl === 0 || start === 0) {\n return Infinity;\n }\n const age = (cachedNow || getNow()) - start;\n return ttl - age;\n };\n this.#isStale = index => {\n return (ttls[index] !== 0 &&\n starts[index] !== 0 &&\n (cachedNow || getNow()) - starts[index] > ttls[index]);\n };\n }\n // conditionally set private methods related to TTL\n #updateItemAge = () => { };\n #statusTTL = () => { };\n #setItemTTL = () => { };\n /* c8 ignore stop */\n #isStale = () => false;\n #initializeSizeTracking() {\n const sizes = new ZeroArray(this.#max);\n this.#calculatedSize = 0;\n this.#sizes = sizes;\n this.#removeItemSize = index => {\n this.#calculatedSize -= sizes[index];\n sizes[index] = 0;\n };\n this.#requireSize = (k, v, size, sizeCalculation) => {\n // provisionally accept background fetches.\n // actual value size will be checked when they return.\n if (this.#isBackgroundFetch(v)) {\n return 0;\n }\n if (!isPosInt(size)) {\n if (sizeCalculation) {\n if (typeof sizeCalculation !== 'function') {\n throw new TypeError('sizeCalculation must be a function');\n }\n size = sizeCalculation(v, k);\n if (!isPosInt(size)) {\n throw new TypeError('sizeCalculation return invalid (expect positive integer)');\n }\n }\n else {\n throw new TypeError('invalid size value (must be positive integer). ' +\n 'When maxSize or maxEntrySize is used, sizeCalculation ' +\n 'or size must be set.');\n }\n }\n return size;\n };\n this.#addItemSize = (index, size, status) => {\n sizes[index] = size;\n if (this.#maxSize) {\n const maxSize = this.#maxSize - sizes[index];\n while (this.#calculatedSize > maxSize) {\n this.#evict(true);\n }\n }\n this.#calculatedSize += sizes[index];\n if (status) {\n status.entrySize = size;\n status.totalCalculatedSize = this.#calculatedSize;\n }\n };\n }\n #removeItemSize = _i => { };\n #addItemSize = (_i, _s, _st) => { };\n #requireSize = (_k, _v, size, sizeCalculation) => {\n if (size || sizeCalculation) {\n throw new TypeError('cannot set size without setting maxSize or maxEntrySize on cache');\n }\n return 0;\n };\n *#indexes({ allowStale = this.allowStale } = {}) {\n if (this.#size) {\n for (let i = this.#tail; true;) {\n if (!this.#isValidIndex(i)) {\n break;\n }\n if (allowStale || !this.#isStale(i)) {\n yield i;\n }\n if (i === this.#head) {\n break;\n }\n else {\n i = this.#prev[i];\n }\n }\n }\n }\n *#rindexes({ allowStale = this.allowStale } = {}) {\n if (this.#size) {\n for (let i = this.#head; true;) {\n if (!this.#isValidIndex(i)) {\n break;\n }\n if (allowStale || !this.#isStale(i)) {\n yield i;\n }\n if (i === this.#tail) {\n break;\n }\n else {\n i = this.#next[i];\n }\n }\n }\n }\n #isValidIndex(index) {\n return (index !== undefined &&\n this.#keyMap.get(this.#keyList[index]) === index);\n }\n /**\n * Return a generator yielding `[key, value]` pairs,\n * in order from most recently used to least recently used.\n */\n *entries() {\n for (const i of this.#indexes()) {\n if (this.#valList[i] !== undefined &&\n this.#keyList[i] !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield [this.#keyList[i], this.#valList[i]];\n }\n }\n }\n /**\n * Inverse order version of {@link LRUCache.entries}\n *\n * Return a generator yielding `[key, value]` pairs,\n * in order from least recently used to most recently used.\n */\n *rentries() {\n for (const i of this.#rindexes()) {\n if (this.#valList[i] !== undefined &&\n this.#keyList[i] !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield [this.#keyList[i], this.#valList[i]];\n }\n }\n }\n /**\n * Return a generator yielding the keys in the cache,\n * in order from most recently used to least recently used.\n */\n *keys() {\n for (const i of this.#indexes()) {\n const k = this.#keyList[i];\n if (k !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield k;\n }\n }\n }\n /**\n * Inverse order version of {@link LRUCache.keys}\n *\n * Return a generator yielding the keys in the cache,\n * in order from least recently used to most recently used.\n */\n *rkeys() {\n for (const i of this.#rindexes()) {\n const k = this.#keyList[i];\n if (k !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield k;\n }\n }\n }\n /**\n * Return a generator yielding the values in the cache,\n * in order from most recently used to least recently used.\n */\n *values() {\n for (const i of this.#indexes()) {\n const v = this.#valList[i];\n if (v !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield this.#valList[i];\n }\n }\n }\n /**\n * Inverse order version of {@link LRUCache.values}\n *\n * Return a generator yielding the values in the cache,\n * in order from least recently used to most recently used.\n */\n *rvalues() {\n for (const i of this.#rindexes()) {\n const v = this.#valList[i];\n if (v !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield this.#valList[i];\n }\n }\n }\n /**\n * Iterating over the cache itself yields the same results as\n * {@link LRUCache.entries}\n */\n [Symbol.iterator]() {\n return this.entries();\n }\n /**\n * Find a value for which the supplied fn method returns a truthy value,\n * similar to Array.find(). fn is called as fn(value, key, cache).\n */\n find(fn, getOptions = {}) {\n for (const i of this.#indexes()) {\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v;\n if (value === undefined)\n continue;\n if (fn(value, this.#keyList[i], this)) {\n return this.get(this.#keyList[i], getOptions);\n }\n }\n }\n /**\n * Call the supplied function on each item in the cache, in order from\n * most recently used to least recently used. fn is called as\n * fn(value, key, cache). Does not update age or recenty of use.\n * Does not iterate over stale values.\n */\n forEach(fn, thisp = this) {\n for (const i of this.#indexes()) {\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v;\n if (value === undefined)\n continue;\n fn.call(thisp, value, this.#keyList[i], this);\n }\n }\n /**\n * The same as {@link LRUCache.forEach} but items are iterated over in\n * reverse order. (ie, less recently used items are iterated over first.)\n */\n rforEach(fn, thisp = this) {\n for (const i of this.#rindexes()) {\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v;\n if (value === undefined)\n continue;\n fn.call(thisp, value, this.#keyList[i], this);\n }\n }\n /**\n * Delete any stale entries. Returns true if anything was removed,\n * false otherwise.\n */\n purgeStale() {\n let deleted = false;\n for (const i of this.#rindexes({ allowStale: true })) {\n if (this.#isStale(i)) {\n this.delete(this.#keyList[i]);\n deleted = true;\n }\n }\n return deleted;\n }\n /**\n * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n * passed to cache.load()\n */\n dump() {\n const arr = [];\n for (const i of this.#indexes({ allowStale: true })) {\n const key = this.#keyList[i];\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v;\n if (value === undefined || key === undefined)\n continue;\n const entry = { value };\n if (this.#ttls && this.#starts) {\n entry.ttl = this.#ttls[i];\n // always dump the start relative to a portable timestamp\n // it's ok for this to be a bit slow, it's a rare operation.\n const age = perf.now() - this.#starts[i];\n entry.start = Math.floor(Date.now() - age);\n }\n if (this.#sizes) {\n entry.size = this.#sizes[i];\n }\n arr.unshift([key, entry]);\n }\n return arr;\n }\n /**\n * Reset the cache and load in the items in entries in the order listed.\n * Note that the shape of the resulting cache may be different if the\n * same options are not used in both caches.\n */\n load(arr) {\n this.clear();\n for (const [key, entry] of arr) {\n if (entry.start) {\n // entry.start is a portable timestamp, but we may be using\n // node's performance.now(), so calculate the offset, so that\n // we get the intended remaining TTL, no matter how long it's\n // been on ice.\n //\n // it's ok for this to be a bit slow, it's a rare operation.\n const age = Date.now() - entry.start;\n entry.start = perf.now() - age;\n }\n this.set(key, entry.value, entry);\n }\n }\n /**\n * Add a value to the cache.\n *\n * Note: if `undefined` is specified as a value, this is an alias for\n * {@link LRUCache#delete}\n */\n set(k, v, setOptions = {}) {\n if (v === undefined) {\n this.delete(k);\n return this;\n }\n const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status, } = setOptions;\n let { noUpdateTTL = this.noUpdateTTL } = setOptions;\n const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation);\n // if the item doesn't fit, don't do anything\n // NB: maxEntrySize set to maxSize by default\n if (this.maxEntrySize && size > this.maxEntrySize) {\n if (status) {\n status.set = 'miss';\n status.maxEntrySizeExceeded = true;\n }\n // have to delete, in case something is there already.\n this.delete(k);\n return this;\n }\n let index = this.#size === 0 ? undefined : this.#keyMap.get(k);\n if (index === undefined) {\n // addition\n index = (this.#size === 0\n ? this.#tail\n : this.#free.length !== 0\n ? this.#free.pop()\n : this.#size === this.#max\n ? this.#evict(false)\n : this.#size);\n this.#keyList[index] = k;\n this.#valList[index] = v;\n this.#keyMap.set(k, index);\n this.#next[this.#tail] = index;\n this.#prev[index] = this.#tail;\n this.#tail = index;\n this.#size++;\n this.#addItemSize(index, size, status);\n if (status)\n status.set = 'add';\n noUpdateTTL = false;\n }\n else {\n // update\n this.#moveToTail(index);\n const oldVal = this.#valList[index];\n if (v !== oldVal) {\n if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n oldVal.__abortController.abort(new Error('replaced'));\n const { __staleWhileFetching: s } = oldVal;\n if (s !== undefined && !noDisposeOnSet) {\n if (this.#hasDispose) {\n this.#dispose?.(s, k, 'set');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([s, k, 'set']);\n }\n }\n }\n else if (!noDisposeOnSet) {\n if (this.#hasDispose) {\n this.#dispose?.(oldVal, k, 'set');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([oldVal, k, 'set']);\n }\n }\n this.#removeItemSize(index);\n this.#addItemSize(index, size, status);\n this.#valList[index] = v;\n if (status) {\n status.set = 'replace';\n const oldValue = oldVal && this.#isBackgroundFetch(oldVal)\n ? oldVal.__staleWhileFetching\n : oldVal;\n if (oldValue !== undefined)\n status.oldValue = oldValue;\n }\n }\n else if (status) {\n status.set = 'update';\n }\n }\n if (ttl !== 0 && !this.#ttls) {\n this.#initializeTTLTracking();\n }\n if (this.#ttls) {\n if (!noUpdateTTL) {\n this.#setItemTTL(index, ttl, start);\n }\n if (status)\n this.#statusTTL(status, index);\n }\n if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n return this;\n }\n /**\n * Evict the least recently used item, returning its value or\n * `undefined` if cache is empty.\n */\n pop() {\n try {\n while (this.#size) {\n const val = this.#valList[this.#head];\n this.#evict(true);\n if (this.#isBackgroundFetch(val)) {\n if (val.__staleWhileFetching) {\n return val.__staleWhileFetching;\n }\n }\n else if (val !== undefined) {\n return val;\n }\n }\n }\n finally {\n if (this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n }\n }\n #evict(free) {\n const head = this.#head;\n const k = this.#keyList[head];\n const v = this.#valList[head];\n if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('evicted'));\n }\n else if (this.#hasDispose || this.#hasDisposeAfter) {\n if (this.#hasDispose) {\n this.#dispose?.(v, k, 'evict');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, 'evict']);\n }\n }\n this.#removeItemSize(head);\n // if we aren't about to use the index, then null these out\n if (free) {\n this.#keyList[head] = undefined;\n this.#valList[head] = undefined;\n this.#free.push(head);\n }\n if (this.#size === 1) {\n this.#head = this.#tail = 0;\n this.#free.length = 0;\n }\n else {\n this.#head = this.#next[head];\n }\n this.#keyMap.delete(k);\n this.#size--;\n return head;\n }\n /**\n * Check if a key is in the cache, without updating the recency of use.\n * Will return false if the item is stale, even though it is technically\n * in the cache.\n *\n * Will not update item age unless\n * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n */\n has(k, hasOptions = {}) {\n const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions;\n const index = this.#keyMap.get(k);\n if (index !== undefined) {\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v) &&\n v.__staleWhileFetching === undefined) {\n return false;\n }\n if (!this.#isStale(index)) {\n if (updateAgeOnHas) {\n this.#updateItemAge(index);\n }\n if (status) {\n status.has = 'hit';\n this.#statusTTL(status, index);\n }\n return true;\n }\n else if (status) {\n status.has = 'stale';\n this.#statusTTL(status, index);\n }\n }\n else if (status) {\n status.has = 'miss';\n }\n return false;\n }\n /**\n * Like {@link LRUCache#get} but doesn't update recency or delete stale\n * items.\n *\n * Returns `undefined` if the item is stale, unless\n * {@link LRUCache.OptionsBase.allowStale} is set.\n */\n peek(k, peekOptions = {}) {\n const { allowStale = this.allowStale } = peekOptions;\n const index = this.#keyMap.get(k);\n if (index !== undefined &&\n (allowStale || !this.#isStale(index))) {\n const v = this.#valList[index];\n // either stale and allowed, or forcing a refresh of non-stale value\n return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n }\n }\n #backgroundFetch(k, index, options, context) {\n const v = index === undefined ? undefined : this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n return v;\n }\n const ac = new AC();\n const { signal } = options;\n // when/if our AC signals, then stop listening to theirs.\n signal?.addEventListener('abort', () => ac.abort(signal.reason), {\n signal: ac.signal,\n });\n const fetchOpts = {\n signal: ac.signal,\n options,\n context,\n };\n const cb = (v, updateCache = false) => {\n const { aborted } = ac.signal;\n const ignoreAbort = options.ignoreFetchAbort && v !== undefined;\n if (options.status) {\n if (aborted && !updateCache) {\n options.status.fetchAborted = true;\n options.status.fetchError = ac.signal.reason;\n if (ignoreAbort)\n options.status.fetchAbortIgnored = true;\n }\n else {\n options.status.fetchResolved = true;\n }\n }\n if (aborted && !ignoreAbort && !updateCache) {\n return fetchFail(ac.signal.reason);\n }\n // either we didn't abort, and are still here, or we did, and ignored\n const bf = p;\n if (this.#valList[index] === p) {\n if (v === undefined) {\n if (bf.__staleWhileFetching) {\n this.#valList[index] = bf.__staleWhileFetching;\n }\n else {\n this.delete(k);\n }\n }\n else {\n if (options.status)\n options.status.fetchUpdated = true;\n this.set(k, v, fetchOpts.options);\n }\n }\n return v;\n };\n const eb = (er) => {\n if (options.status) {\n options.status.fetchRejected = true;\n options.status.fetchError = er;\n }\n return fetchFail(er);\n };\n const fetchFail = (er) => {\n const { aborted } = ac.signal;\n const allowStaleAborted = aborted && options.allowStaleOnFetchAbort;\n const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection;\n const noDelete = allowStale || options.noDeleteOnFetchRejection;\n const bf = p;\n if (this.#valList[index] === p) {\n // if we allow stale on fetch rejections, then we need to ensure that\n // the stale value is not removed from the cache when the fetch fails.\n const del = !noDelete || bf.__staleWhileFetching === undefined;\n if (del) {\n this.delete(k);\n }\n else if (!allowStaleAborted) {\n // still replace the *promise* with the stale value,\n // since we are done with the promise at this point.\n // leave it untouched if we're still waiting for an\n // aborted background fetch that hasn't yet returned.\n this.#valList[index] = bf.__staleWhileFetching;\n }\n }\n if (allowStale) {\n if (options.status && bf.__staleWhileFetching !== undefined) {\n options.status.returnedStale = true;\n }\n return bf.__staleWhileFetching;\n }\n else if (bf.__returned === bf) {\n throw er;\n }\n };\n const pcall = (res, rej) => {\n const fmp = this.#fetchMethod?.(k, v, fetchOpts);\n if (fmp && fmp instanceof Promise) {\n fmp.then(v => res(v === undefined ? undefined : v), rej);\n }\n // ignored, we go until we finish, regardless.\n // defer check until we are actually aborting,\n // so fetchMethod can override.\n ac.signal.addEventListener('abort', () => {\n if (!options.ignoreFetchAbort ||\n options.allowStaleOnFetchAbort) {\n res(undefined);\n // when it eventually resolves, update the cache.\n if (options.allowStaleOnFetchAbort) {\n res = v => cb(v, true);\n }\n }\n });\n };\n if (options.status)\n options.status.fetchDispatched = true;\n const p = new Promise(pcall).then(cb, eb);\n const bf = Object.assign(p, {\n __abortController: ac,\n __staleWhileFetching: v,\n __returned: undefined,\n });\n if (index === undefined) {\n // internal, don't expose status.\n this.set(k, bf, { ...fetchOpts.options, status: undefined });\n index = this.#keyMap.get(k);\n }\n else {\n this.#valList[index] = bf;\n }\n return bf;\n }\n #isBackgroundFetch(p) {\n if (!this.#hasFetchMethod)\n return false;\n const b = p;\n return (!!b &&\n b instanceof Promise &&\n b.hasOwnProperty('__staleWhileFetching') &&\n b.__abortController instanceof AC);\n }\n async fetch(k, fetchOptions = {}) {\n const { \n // get options\n allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, \n // set options\n ttl = this.ttl, noDisposeOnSet = this.noDisposeOnSet, size = 0, sizeCalculation = this.sizeCalculation, noUpdateTTL = this.noUpdateTTL, \n // fetch exclusive options\n noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, ignoreFetchAbort = this.ignoreFetchAbort, allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, context, forceRefresh = false, status, signal, } = fetchOptions;\n if (!this.#hasFetchMethod) {\n if (status)\n status.fetch = 'get';\n return this.get(k, {\n allowStale,\n updateAgeOnGet,\n noDeleteOnStaleGet,\n status,\n });\n }\n const options = {\n allowStale,\n updateAgeOnGet,\n noDeleteOnStaleGet,\n ttl,\n noDisposeOnSet,\n size,\n sizeCalculation,\n noUpdateTTL,\n noDeleteOnFetchRejection,\n allowStaleOnFetchRejection,\n allowStaleOnFetchAbort,\n ignoreFetchAbort,\n status,\n signal,\n };\n let index = this.#keyMap.get(k);\n if (index === undefined) {\n if (status)\n status.fetch = 'miss';\n const p = this.#backgroundFetch(k, index, options, context);\n return (p.__returned = p);\n }\n else {\n // in cache, maybe already fetching\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n const stale = allowStale && v.__staleWhileFetching !== undefined;\n if (status) {\n status.fetch = 'inflight';\n if (stale)\n status.returnedStale = true;\n }\n return stale ? v.__staleWhileFetching : (v.__returned = v);\n }\n // if we force a refresh, that means do NOT serve the cached value,\n // unless we are already in the process of refreshing the cache.\n const isStale = this.#isStale(index);\n if (!forceRefresh && !isStale) {\n if (status)\n status.fetch = 'hit';\n this.#moveToTail(index);\n if (updateAgeOnGet) {\n this.#updateItemAge(index);\n }\n if (status)\n this.#statusTTL(status, index);\n return v;\n }\n // ok, it is stale or a forced refresh, and not already fetching.\n // refresh the cache.\n const p = this.#backgroundFetch(k, index, options, context);\n const hasStale = p.__staleWhileFetching !== undefined;\n const staleVal = hasStale && allowStale;\n if (status) {\n status.fetch = isStale ? 'stale' : 'refresh';\n if (staleVal && isStale)\n status.returnedStale = true;\n }\n return staleVal ? p.__staleWhileFetching : (p.__returned = p);\n }\n }\n /**\n * Return a value from the cache. Will update the recency of the cache\n * entry found.\n *\n * If the key is not found, get() will return `undefined`.\n */\n get(k, getOptions = {}) {\n const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status, } = getOptions;\n const index = this.#keyMap.get(k);\n if (index !== undefined) {\n const value = this.#valList[index];\n const fetching = this.#isBackgroundFetch(value);\n if (status)\n this.#statusTTL(status, index);\n if (this.#isStale(index)) {\n if (status)\n status.get = 'stale';\n // delete only if not an in-flight background fetch\n if (!fetching) {\n if (!noDeleteOnStaleGet) {\n this.delete(k);\n }\n if (status && allowStale)\n status.returnedStale = true;\n return allowStale ? value : undefined;\n }\n else {\n if (status &&\n allowStale &&\n value.__staleWhileFetching !== undefined) {\n status.returnedStale = true;\n }\n return allowStale ? value.__staleWhileFetching : undefined;\n }\n }\n else {\n if (status)\n status.get = 'hit';\n // if we're currently fetching it, we don't actually have it yet\n // it's not stale, which means this isn't a staleWhileRefetching.\n // If it's not stale, and fetching, AND has a __staleWhileFetching\n // value, then that means the user fetched with {forceRefresh:true},\n // so it's safe to return that value.\n if (fetching) {\n return value.__staleWhileFetching;\n }\n this.#moveToTail(index);\n if (updateAgeOnGet) {\n this.#updateItemAge(index);\n }\n return value;\n }\n }\n else if (status) {\n status.get = 'miss';\n }\n }\n #connect(p, n) {\n this.#prev[n] = p;\n this.#next[p] = n;\n }\n #moveToTail(index) {\n // if tail already, nothing to do\n // if head, move head to next[index]\n // else\n // move next[prev[index]] to next[index] (head has no prev)\n // move prev[next[index]] to prev[index]\n // prev[index] = tail\n // next[tail] = index\n // tail = index\n if (index !== this.#tail) {\n if (index === this.#head) {\n this.#head = this.#next[index];\n }\n else {\n this.#connect(this.#prev[index], this.#next[index]);\n }\n this.#connect(this.#tail, index);\n this.#tail = index;\n }\n }\n /**\n * Deletes a key out of the cache.\n * Returns true if the key was deleted, false otherwise.\n */\n delete(k) {\n let deleted = false;\n if (this.#size !== 0) {\n const index = this.#keyMap.get(k);\n if (index !== undefined) {\n deleted = true;\n if (this.#size === 1) {\n this.clear();\n }\n else {\n this.#removeItemSize(index);\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('deleted'));\n }\n else if (this.#hasDispose || this.#hasDisposeAfter) {\n if (this.#hasDispose) {\n this.#dispose?.(v, k, 'delete');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, 'delete']);\n }\n }\n this.#keyMap.delete(k);\n this.#keyList[index] = undefined;\n this.#valList[index] = undefined;\n if (index === this.#tail) {\n this.#tail = this.#prev[index];\n }\n else if (index === this.#head) {\n this.#head = this.#next[index];\n }\n else {\n this.#next[this.#prev[index]] = this.#next[index];\n this.#prev[this.#next[index]] = this.#prev[index];\n }\n this.#size--;\n this.#free.push(index);\n }\n }\n }\n if (this.#hasDisposeAfter && this.#disposed?.length) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n return deleted;\n }\n /**\n * Clear the cache entirely, throwing away all values.\n */\n clear() {\n for (const index of this.#rindexes({ allowStale: true })) {\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('deleted'));\n }\n else {\n const k = this.#keyList[index];\n if (this.#hasDispose) {\n this.#dispose?.(v, k, 'delete');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, 'delete']);\n }\n }\n }\n this.#keyMap.clear();\n this.#valList.fill(undefined);\n this.#keyList.fill(undefined);\n if (this.#ttls && this.#starts) {\n this.#ttls.fill(0);\n this.#starts.fill(0);\n }\n if (this.#sizes) {\n this.#sizes.fill(0);\n }\n this.#head = 0;\n this.#tail = 0;\n this.#free.length = 0;\n this.#calculatedSize = 0;\n this.#size = 0;\n if (this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n }\n}\n//# sourceMappingURL=index.js.map","'use strict';\n\n// FNV_PRIMES and FNV_OFFSETS from\n// http://www.isthe.com/chongo/tech/comp/fnv/index.html#FNV-param\n\nconst FNV_PRIMES = {\n\t32: 16777619n,\n\t64: 1099511628211n,\n\t128: 309485009821345068724781371n,\n\t256: 374144419156711147060143317175368453031918731002211n,\n\t512: 35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,\n\t1024: 5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n\n};\n\nconst FNV_OFFSETS = {\n\t32: 2166136261n,\n\t64: 14695981039346656037n,\n\t128: 144066263297769815596495629667062367629n,\n\t256: 100029257958052580907070968620625704837092796014241193945225284501741471925557n,\n\t512: 9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,\n\t1024: 14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n\n};\n\n// Legacy implementation for 32-bit + number types\nfunction fnv1a(string) {\n\t// Handle Unicode code points > 0x7f\n\tlet hash = Number(FNV_OFFSETS[32]);\n\tlet isUnicoded = false;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tlet characterCode = string.charCodeAt(i);\n\n\t\t// Non-ASCII characters trigger the Unicode escape logic\n\t\tif (characterCode > 0x7F && !isUnicoded) {\n\t\t\tstring = unescape(encodeURIComponent(string));\n\t\t\tcharacterCode = string.charCodeAt(i);\n\t\t\tisUnicoded = true;\n\t\t}\n\n\t\thash ^= characterCode;\n\t\thash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n\t}\n\n\treturn hash >>> 0;\n}\n\nfunction bigInt(string, {size = 32} = {}) {\n\tif (!FNV_PRIMES[size]) {\n\t\tthrow new Error('The `size` option must be one of 32, 64, 128, 256, 512, or 1024');\n\t}\n\n\tlet hash = FNV_OFFSETS[size];\n\tconst fnvPrime = FNV_PRIMES[size];\n\n\t// Handle Unicode code points > 0x7f\n\tlet isUnicoded = false;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tlet characterCode = string.charCodeAt(i);\n\n\t\t// Non-ASCII characters trigger the Unicode escape logic\n\t\tif (characterCode > 0x7F && !isUnicoded) {\n\t\t\tstring = unescape(encodeURIComponent(string));\n\t\t\tcharacterCode = string.charCodeAt(i);\n\t\t\tisUnicoded = true;\n\t\t}\n\n\t\thash ^= BigInt(characterCode);\n\t\thash = BigInt.asUintN(size, hash * fnvPrime);\n\t}\n\n\treturn hash;\n}\n\nmodule.exports = fnv1a;\nmodule.exports.bigInt = bigInt;\n","import { ts } from './ts';\nimport { parse, visit } from 'graphql';\n\nimport { findNode } from './ast';\nimport { getValueOfIdentifier } from './ast/declaration';\n\nexport const UNUSED_FIELD_CODE = 52005;\n\nconst unwrapAbstractType = (type: ts.Type) => {\n return type.isUnionOrIntersection()\n ? type.types.find(type => type.flags & ts.TypeFlags.Object) || type\n : type;\n};\n\nconst getVariableDeclaration = (\n start: ts.Node\n): ts.VariableDeclaration | undefined => {\n let node: ts.Node = start;\n const seen = new Set();\n while (node.parent && !seen.has(node)) {\n seen.add(node);\n if (ts.isBlock(node)) {\n return; // NOTE: We never want to traverse up into a new function/module block\n } else if (ts.isVariableDeclaration((node = node.parent))) {\n return node;\n }\n }\n};\n\nconst traverseArrayDestructuring = (\n node: ts.ArrayBindingPattern,\n originalWip: Array<string>,\n allFields: Array<string>,\n source: ts.SourceFile,\n info: ts.server.PluginCreateInfo\n): Array<string> => {\n return node.elements.flatMap(element => {\n if (ts.isOmittedExpression(element)) return [];\n\n const wip = [...originalWip];\n return ts.isIdentifier(element.name)\n ? crawlScope(element.name, wip, allFields, source, info, false)\n : ts.isObjectBindingPattern(element.name)\n ? traverseDestructuring(element.name, wip, allFields, source, info)\n : traverseArrayDestructuring(element.name, wip, allFields, source, info);\n });\n};\n\nconst traverseDestructuring = (\n node: ts.ObjectBindingPattern,\n originalWip: Array<string>,\n allFields: Array<string>,\n source: ts.SourceFile,\n info: ts.server.PluginCreateInfo\n): Array<string> => {\n const results = [];\n for (const binding of node.elements) {\n if (ts.isObjectBindingPattern(binding.name)) {\n const wip = [...originalWip];\n if (\n binding.propertyName &&\n !originalWip.includes(binding.propertyName.getText())\n ) {\n const joined = [...wip, binding.propertyName.getText()].join('.');\n if (allFields.find(x => x.startsWith(joined))) {\n wip.push(binding.propertyName.getText());\n }\n }\n const traverseResult = traverseDestructuring(\n binding.name,\n wip,\n allFields,\n source,\n info\n );\n\n results.push(...traverseResult);\n } else if (ts.isIdentifier(binding.name)) {\n const wip = [...originalWip];\n if (\n binding.propertyName &&\n !originalWip.includes(binding.propertyName.getText())\n ) {\n const joined = [...wip, binding.propertyName.getText()].join('.');\n if (allFields.find(x => x.startsWith(joined))) {\n wip.push(binding.propertyName.getText());\n }\n } else {\n const joined = [...wip, binding.name.getText()].join('.');\n if (allFields.find(x => x.startsWith(joined))) {\n wip.push(binding.name.getText());\n }\n }\n\n const crawlResult = crawlScope(\n binding.name,\n wip,\n allFields,\n source,\n info,\n false\n );\n\n results.push(...crawlResult);\n }\n }\n\n return results;\n};\n\nconst arrayMethods = new Set([\n 'map',\n 'filter',\n 'forEach',\n 'reduce',\n 'every',\n 'some',\n 'find',\n 'flatMap',\n 'sort',\n]);\n\nconst crawlChainedExpressions = (\n ref: ts.CallExpression,\n pathParts: string[],\n allFields: string[],\n source: ts.SourceFile,\n info: ts.server.PluginCreateInfo\n): string[] => {\n const isChained =\n ts.isPropertyAccessExpression(ref.expression) &&\n arrayMethods.has(ref.expression.name.text);\n if (isChained) {\n const foundRef = ref.expression;\n const isReduce = foundRef.name.text === 'reduce';\n let func: ts.Expression | ts.FunctionDeclaration | undefined =\n ref.arguments[0];\n\n const res = [];\n if (ts.isCallExpression(ref.parent.parent)) {\n const nestedResult = crawlChainedExpressions(\n ref.parent.parent,\n pathParts,\n allFields,\n source,\n info\n );\n if (nestedResult.length) {\n res.push(...nestedResult);\n }\n }\n\n if (func && ts.isIdentifier(func)) {\n // TODO: Scope utilities in checkFieldUsageInFile to deduplicate\n const checker = info.languageService.getProgram()!.getTypeChecker();\n\n const value = getValueOfIdentifier(func, checker);\n if (\n value &&\n (ts.isFunctionDeclaration(value) ||\n ts.isFunctionExpression(value) ||\n ts.isArrowFunction(value))\n ) {\n func = value;\n }\n }\n\n if (\n func &&\n (ts.isFunctionDeclaration(func) ||\n ts.isFunctionExpression(func) ||\n ts.isArrowFunction(func))\n ) {\n const param = func.parameters[isReduce ? 1 : 0];\n if (param) {\n const scopedResult = crawlScope(\n param.name,\n pathParts,\n allFields,\n source,\n info,\n true\n );\n\n if (scopedResult.length) {\n res.push(...scopedResult);\n }\n }\n }\n\n return res;\n }\n\n return [];\n};\n\nconst crawlScope = (\n node: ts.BindingName,\n originalWip: Array<string>,\n allFields: Array<string>,\n source: ts.SourceFile,\n info: ts.server.PluginCreateInfo,\n inArrayMethod: boolean\n): Array<string> => {\n if (ts.isObjectBindingPattern(node)) {\n return traverseDestructuring(node, originalWip, allFields, source, info);\n } else if (ts.isArrayBindingPattern(node)) {\n return traverseArrayDestructuring(\n node,\n originalWip,\n allFields,\n source,\n info\n );\n }\n\n let results: string[] = [];\n\n const references = info.languageService.getReferencesAtPosition(\n source.fileName,\n node.getStart()\n );\n\n if (!references) return results;\n\n // Go over all the references tied to the result of\n // accessing our equery and collect them as fully\n // qualified paths (ideally ending in a leaf-node)\n results = references.flatMap(ref => {\n // If we get a reference to a different file we can bail\n if (ref.fileName !== source.fileName) return [];\n // We don't want to end back at our document so we narrow\n // the scope.\n if (\n node.getStart() <= ref.textSpan.start &&\n node.getEnd() >= ref.textSpan.start + ref.textSpan.length\n )\n return [];\n\n let foundRef = findNode(source, ref.textSpan.start);\n if (!foundRef) return [];\n\n const pathParts = [...originalWip];\n // In here we'll start crawling all the accessors of result\n // and try to determine the total path\n // - result.data.pokemon.name --> pokemon.name this is the easy route and never accesses\n // any of the recursive functions\n // - const pokemon = result.data.pokemon --> this initiates a new crawl with a renewed scope\n // - const { pokemon } = result.data --> this initiates a destructuring traversal which will\n // either end up in more destructuring traversals or a scope crawl\n while (\n ts.isIdentifier(foundRef) ||\n ts.isPropertyAccessExpression(foundRef) ||\n ts.isElementAccessExpression(foundRef) ||\n ts.isVariableDeclaration(foundRef) ||\n ts.isBinaryExpression(foundRef) ||\n ts.isReturnStatement(foundRef) ||\n ts.isArrowFunction(foundRef)\n ) {\n if (\n !inArrayMethod &&\n (ts.isReturnStatement(foundRef) || ts.isArrowFunction(foundRef))\n ) {\n // When we are returning the ref or we are dealing with an implicit return\n // we mark all its children as used (bail scenario)\n const joined = pathParts.join('.');\n const bailedFields = allFields.filter(x => x.startsWith(joined + '.'));\n return bailedFields;\n } else if (ts.isVariableDeclaration(foundRef)) {\n return crawlScope(\n foundRef.name,\n pathParts,\n allFields,\n source,\n info,\n false\n );\n } else if (\n ts.isIdentifier(foundRef) &&\n !pathParts.includes(foundRef.text)\n ) {\n const joined = [...pathParts, foundRef.text].join('.');\n if (allFields.find(x => x.startsWith(joined + '.'))) {\n pathParts.push(foundRef.text);\n }\n\n // When we encounter an external function where we use this identifier\n // we'll mark all of the sub-fields as used as we consider this a bail\n // scenario.\n if (ts.isCallExpression(foundRef.parent)) {\n const callExpression = foundRef.parent;\n return callExpression.arguments.flatMap(arg => {\n let parts = [...pathParts];\n let reference = arg;\n\n while (ts.isPropertyAccessExpression(reference)) {\n const joined = [...parts, reference.name.text].join('.');\n if (allFields.find(x => x.startsWith(joined + '.'))) {\n parts.push(reference.name.text);\n }\n reference = reference.expression;\n }\n\n if (ts.isIdentifier(reference)) {\n const joined = [...parts, reference.getText()].join('.');\n if (allFields.find(x => x.startsWith(joined + '.'))) {\n parts.push(reference.getText());\n }\n }\n\n const joined = parts.join('.');\n return allFields.filter(x => x.startsWith(joined + '.'));\n });\n }\n } else if (\n ts.isPropertyAccessExpression(foundRef) &&\n foundRef.name.text === 'at' &&\n ts.isCallExpression(foundRef.parent)\n ) {\n foundRef = foundRef.parent;\n } else if (\n ts.isPropertyAccessExpression(foundRef) &&\n arrayMethods.has(foundRef.name.text) &&\n ts.isCallExpression(foundRef.parent)\n ) {\n const callExpression = foundRef.parent;\n const res = [];\n const isSomeOrEvery =\n foundRef.name.text === 'some' || foundRef.name.text === 'every';\n const chainedResults = crawlChainedExpressions(\n callExpression,\n pathParts,\n allFields,\n source,\n info\n );\n if (chainedResults.length) {\n res.push(...chainedResults);\n }\n\n if (ts.isVariableDeclaration(callExpression.parent) && !isSomeOrEvery) {\n const varRes = crawlScope(\n callExpression.parent.name,\n pathParts,\n allFields,\n source,\n info,\n true\n );\n res.push(...varRes);\n }\n\n return res;\n } else if (\n ts.isPropertyAccessExpression(foundRef) &&\n !pathParts.includes(foundRef.name.text)\n ) {\n const joined = [...pathParts, foundRef.name.text].join('.');\n if (allFields.find(x => x.startsWith(joined))) {\n pathParts.push(foundRef.name.text);\n }\n } else if (\n ts.isElementAccessExpression(foundRef) &&\n ts.isStringLiteral(foundRef.argumentExpression) &&\n !pathParts.includes(foundRef.argumentExpression.text)\n ) {\n const joined = [...pathParts, foundRef.argumentExpression.text].join(\n '.'\n );\n if (allFields.find(x => x.startsWith(joined))) {\n pathParts.push(foundRef.argumentExpression.text);\n }\n }\n\n if (ts.isNonNullExpression(foundRef.parent)) {\n foundRef = foundRef.parent.parent;\n } else {\n foundRef = foundRef.parent;\n }\n }\n\n return pathParts.join('.');\n });\n\n return results;\n};\n\nexport const checkFieldUsageInFile = (\n source: ts.SourceFile,\n nodes: ts.NoSubstitutionTemplateLiteral[],\n info: ts.server.PluginCreateInfo\n) => {\n const diagnostics: ts.Diagnostic[] = [];\n const shouldTrackFieldUsage = info.config.trackFieldUsage ?? true;\n if (!shouldTrackFieldUsage) return diagnostics;\n\n const defaultReservedKeys = ['id', '_id', '__typename'];\n const additionalKeys = info.config.reservedKeys ?? [];\n const reservedKeys = new Set([...defaultReservedKeys, ...additionalKeys]);\n const checker = info.languageService.getProgram()?.getTypeChecker();\n if (!checker) return;\n\n try {\n nodes.forEach(node => {\n const nodeText = node.getText();\n // Bailing for mutations/subscriptions as these could have small details\n // for normalised cache interactions\n if (nodeText.includes('mutation') || nodeText.includes('subscription'))\n return;\n\n const variableDeclaration = getVariableDeclaration(node);\n if (!variableDeclaration) return;\n\n let dataType: ts.Type | undefined;\n\n const type = checker.getTypeAtLocation(node.parent) as\n | ts.TypeReference\n | ts.Type;\n // Attempt to retrieve type from internally resolve type arguments\n if ('target' in type) {\n const typeArguments = (type as any)\n .resolvedTypeArguments as readonly ts.Type[];\n dataType =\n typeArguments && typeArguments.length > 1\n ? typeArguments[0]\n : undefined;\n }\n // Fallback to resolving the type from scratch\n if (!dataType) {\n const apiTypeSymbol = type.getProperty('__apiType');\n if (apiTypeSymbol) {\n let apiType = checker.getTypeOfSymbol(apiTypeSymbol);\n let callSignature: ts.Signature | undefined =\n type.getCallSignatures()[0];\n if (apiType.isUnionOrIntersection()) {\n for (const type of apiType.types) {\n callSignature = type.getCallSignatures()[0];\n if (callSignature) {\n dataType = callSignature.getReturnType();\n break;\n }\n }\n }\n dataType = callSignature && callSignature.getReturnType();\n }\n }\n\n const references = info.languageService.getReferencesAtPosition(\n source.fileName,\n variableDeclaration.name.getStart()\n );\n\n if (!references) return;\n\n const allAccess: string[] = [];\n const inProgress: string[] = [];\n const allPaths: string[] = [];\n const fieldToLoc = new Map<string, { start: number; length: number }>();\n // This visitor gets all the leaf-paths in the document\n // as well as all fields that are part of the document\n // We need the leaf-paths to check usage and we need the\n // fields to validate whether an access on a given reference\n // is valid given the current document...\n visit(parse(node.getText().slice(1, -1)), {\n Field: {\n enter(node) {\n const alias = node.alias ? node.alias.value : node.name.value;\n const path = inProgress.length\n ? `${inProgress.join('.')}.${alias}`\n : alias;\n\n if (!node.selectionSet && !reservedKeys.has(node.name.value)) {\n allPaths.push(path);\n fieldToLoc.set(path, {\n start: node.name.loc!.start,\n length: node.name.loc!.end - node.name.loc!.start,\n });\n } else if (node.selectionSet) {\n inProgress.push(alias);\n fieldToLoc.set(path, {\n start: node.name.loc!.start,\n length: node.name.loc!.end - node.name.loc!.start,\n });\n }\n },\n leave(node) {\n if (node.selectionSet) {\n inProgress.pop();\n }\n },\n },\n });\n\n references.forEach(ref => {\n if (ref.fileName !== source.fileName) return;\n\n const targetNode = findNode(source, ref.textSpan.start);\n if (!targetNode) return;\n // Skip declaration as reference of itself\n if (targetNode.parent === variableDeclaration) return;\n\n const scopeSymbols = checker.getSymbolsInScope(\n targetNode,\n ts.SymbolFlags.BlockScopedVariable\n );\n\n let scopeDataSymbol: ts.Symbol | undefined;\n for (let scopeSymbol of scopeSymbols) {\n if (!scopeSymbol.valueDeclaration) continue;\n let typeOfScopeSymbol = unwrapAbstractType(\n checker.getTypeOfSymbol(scopeSymbol)\n );\n if (dataType === typeOfScopeSymbol) {\n scopeDataSymbol = scopeSymbol;\n break;\n }\n\n // NOTE: This is an aggressive fallback for hooks where the return value isn't destructured\n // This is a last resort solution for patterns like react-query, where the fallback that\n // would otherwise happen below isn't sufficient\n if (typeOfScopeSymbol.flags & ts.TypeFlags.Object) {\n const tuplePropertySymbol = typeOfScopeSymbol.getProperty('0');\n if (tuplePropertySymbol) {\n typeOfScopeSymbol = checker.getTypeOfSymbol(tuplePropertySymbol);\n if (dataType === typeOfScopeSymbol) {\n scopeDataSymbol = scopeSymbol;\n break;\n }\n }\n\n const dataPropertySymbol = typeOfScopeSymbol.getProperty('data');\n if (dataPropertySymbol) {\n typeOfScopeSymbol = unwrapAbstractType(\n checker.getTypeOfSymbol(dataPropertySymbol)\n );\n if (dataType === typeOfScopeSymbol) {\n scopeDataSymbol = scopeSymbol;\n break;\n }\n }\n }\n }\n\n const valueDeclaration = scopeDataSymbol?.valueDeclaration;\n let name: ts.BindingName | undefined;\n if (\n valueDeclaration &&\n 'name' in valueDeclaration &&\n !!valueDeclaration.name &&\n (ts.isIdentifier(valueDeclaration.name as any) ||\n ts.isBindingName(valueDeclaration.name as any))\n ) {\n name = valueDeclaration.name as ts.BindingName;\n } else {\n // Fall back to looking at the variable declaration directly,\n // if we are on one.\n const variableDeclaration = getVariableDeclaration(targetNode);\n if (variableDeclaration) name = variableDeclaration.name;\n }\n\n if (name) {\n const result = crawlScope(name, [], allPaths, source, info, false);\n allAccess.push(...result);\n }\n });\n\n if (!allAccess.length) {\n return;\n }\n\n const unused = allPaths.filter(x => !allAccess.includes(x));\n const aggregatedUnusedFields = new Set<string>();\n const unusedChildren: { [key: string]: Set<string> } = {};\n const unusedFragmentLeaf = new Set<string>();\n unused.forEach(unusedField => {\n const split = unusedField.split('.');\n split.pop();\n const parentField = split.join('.');\n const loc = fieldToLoc.get(parentField);\n\n if (loc) {\n aggregatedUnusedFields.add(parentField);\n if (unusedChildren[parentField]) {\n unusedChildren[parentField]!.add(unusedField);\n } else {\n unusedChildren[parentField] = new Set([unusedField]);\n }\n } else {\n unusedFragmentLeaf.add(unusedField);\n }\n });\n\n aggregatedUnusedFields.forEach(field => {\n const loc = fieldToLoc.get(field)!;\n const unusedFields = unusedChildren[field]!;\n diagnostics.push({\n file: source,\n length: loc.length,\n start: node.getStart() + loc.start + 1,\n category: ts.DiagnosticCategory.Warning,\n code: UNUSED_FIELD_CODE,\n messageText: `Field(s) ${[...unusedFields]\n .map(x => `'${x}'`)\n .join(', ')} are not used.`,\n });\n });\n\n unusedFragmentLeaf.forEach(field => {\n const loc = fieldToLoc.get(field)!;\n diagnostics.push({\n file: source,\n length: loc.length,\n start: node.getStart() + loc.start + 1,\n category: ts.DiagnosticCategory.Warning,\n code: UNUSED_FIELD_CODE,\n messageText: `Field ${field} is not used.`,\n });\n });\n });\n } catch (e: any) {\n console.error('[GraphQLSP]: ', e.message, e.stack);\n }\n\n return diagnostics;\n};\n","import { ts } from './ts';\nimport { FragmentDefinitionNode, Kind, parse } from 'graphql';\n\nimport { findAllCallExpressions, findAllImports } from './ast';\nimport { resolveTemplate } from './ast/resolve';\nimport { getDeclarationOfIdentifier } from './ast/declaration';\n\nexport const MISSING_FRAGMENT_CODE = 52003;\n\nexport const getColocatedFragmentNames = (\n source: ts.SourceFile,\n info: ts.server.PluginCreateInfo\n): Record<\n string,\n { start: number; length: number; fragments: Array<string> }\n> => {\n const imports = findAllImports(source);\n const typeChecker = info.languageService.getProgram()?.getTypeChecker();\n\n const importSpecifierToFragments: Record<\n string,\n { start: number; length: number; fragments: Array<string> }\n > = {};\n\n if (!typeChecker) return importSpecifierToFragments;\n\n if (imports.length) {\n imports.forEach(imp => {\n if (!imp.importClause) return;\n\n if (imp.importClause.name) {\n const declaration = getDeclarationOfIdentifier(\n imp.importClause.name,\n typeChecker\n );\n if (declaration) {\n const sourceFile = declaration.getSourceFile();\n if (sourceFile.fileName.includes('node_modules')) return;\n\n const externalSource = sourceFile;\n if (!externalSource) return;\n\n const fragmentsForImport = getFragmentsInSource(\n externalSource,\n typeChecker,\n info\n );\n\n const names = fragmentsForImport.map(fragment => fragment.name.value);\n const key = imp.moduleSpecifier.getText();\n let fragmentsEntry = importSpecifierToFragments[key];\n if (names.length && fragmentsEntry) {\n fragmentsEntry.fragments = fragmentsEntry.fragments.concat(names);\n } else if (names.length && !fragmentsEntry) {\n importSpecifierToFragments[key] = fragmentsEntry = {\n start: imp.moduleSpecifier.getStart(),\n length: imp.moduleSpecifier.getText().length,\n fragments: names,\n };\n }\n }\n }\n\n if (\n imp.importClause.namedBindings &&\n ts.isNamespaceImport(imp.importClause.namedBindings)\n ) {\n const declaration = getDeclarationOfIdentifier(\n imp.importClause.namedBindings.name,\n typeChecker\n );\n if (declaration) {\n const sourceFile = declaration.getSourceFile();\n if (sourceFile.fileName.includes('node_modules')) return;\n\n const externalSource = sourceFile;\n if (!externalSource) return;\n\n const fragmentsForImport = getFragmentsInSource(\n externalSource,\n typeChecker,\n info\n );\n const names = fragmentsForImport.map(fragment => fragment.name.value);\n const key = imp.moduleSpecifier.getText();\n let fragmentsEntry = importSpecifierToFragments[key];\n if (names.length && fragmentsEntry) {\n fragmentsEntry.fragments = fragmentsEntry.fragments.concat(names);\n } else if (names.length && !fragmentsEntry) {\n importSpecifierToFragments[key] = fragmentsEntry = {\n start: imp.moduleSpecifier.getStart(),\n length: imp.moduleSpecifier.getText().length,\n fragments: names,\n };\n }\n }\n } else if (\n imp.importClause.namedBindings &&\n ts.isNamedImportBindings(imp.importClause.namedBindings)\n ) {\n imp.importClause.namedBindings.elements.forEach(el => {\n const identifier = el.name || el.propertyName;\n if (!identifier) return;\n\n const declaration = getDeclarationOfIdentifier(\n identifier,\n typeChecker\n );\n if (declaration) {\n const sourceFile = declaration.getSourceFile();\n if (sourceFile.fileName.includes('node_modules')) return;\n\n const externalSource = sourceFile;\n if (!externalSource) return;\n\n const fragmentsForImport = getFragmentsInSource(\n externalSource,\n typeChecker,\n info\n );\n const names = fragmentsForImport.map(\n fragment => fragment.name.value\n );\n const key = imp.moduleSpecifier.getText();\n let fragmentsEntry = importSpecifierToFragments[key];\n if (names.length && fragmentsEntry) {\n fragmentsEntry.fragments = fragmentsEntry.fragments.concat(names);\n } else if (names.length && !fragmentsEntry) {\n importSpecifierToFragments[key] = fragmentsEntry = {\n start: imp.moduleSpecifier.getStart(),\n length: imp.moduleSpecifier.getText().length,\n fragments: names,\n };\n }\n }\n });\n }\n });\n }\n\n return importSpecifierToFragments;\n};\n\nfunction getFragmentsInSource(\n src: ts.SourceFile,\n typeChecker: ts.TypeChecker,\n info: ts.server.PluginCreateInfo\n): Array<FragmentDefinitionNode> {\n let fragments: Array<FragmentDefinitionNode> = [];\n const callExpressions = findAllCallExpressions(src, info, false);\n\n const symbol = typeChecker.getSymbolAtLocation(src);\n if (!symbol) return [];\n\n const exports = typeChecker.getExportsOfModule(symbol);\n const exportedNames = exports.map(symb => symb.name);\n const nodes = callExpressions.nodes.filter(x => {\n let parent = x.node.parent;\n while (\n parent &&\n !ts.isSourceFile(parent) &&\n !ts.isVariableDeclaration(parent)\n ) {\n parent = parent.parent;\n }\n\n if (ts.isVariableDeclaration(parent)) {\n return exportedNames.includes(parent.name.getText());\n } else {\n return false;\n }\n });\n\n nodes.forEach(node => {\n const text = resolveTemplate(node.node, src.fileName, info).combinedText;\n try {\n const parsed = parse(text, { noLocation: true });\n if (parsed.definitions.every(x => x.kind === Kind.FRAGMENT_DEFINITION)) {\n fragments = fragments.concat(parsed.definitions as any);\n }\n } catch (e) {\n return;\n }\n });\n\n return fragments;\n}\n","import { ts } from './ts';\n\nimport { createHash } from 'crypto';\n\nimport * as checks from './ast/checks';\nimport {\n findAllCallExpressions,\n findNode,\n getSource,\n unrollTadaFragments,\n} from './ast';\nimport { resolveTemplate } from './ast/resolve';\nimport {\n FragmentDefinitionNode,\n Kind,\n parse,\n print,\n visit,\n} from '@0no-co/graphql.web';\nimport {\n getDeclarationOfIdentifier,\n getValueOfIdentifier,\n} from './ast/declaration';\n\ntype PersistedAction = {\n span: {\n start: number;\n length: number;\n };\n replacement: string;\n};\n\nexport function getPersistedCodeFixAtPosition(\n filename: string,\n position: number,\n info: ts.server.PluginCreateInfo\n): PersistedAction | undefined {\n const isCallExpression = info.config.templateIsCallExpression ?? true;\n const typeChecker = info.languageService.getProgram()?.getTypeChecker();\n if (!isCallExpression) return undefined;\n\n let source = getSource(info, filename);\n if (!source) return undefined;\n\n const node = findNode(source, position);\n if (!node) return undefined;\n\n let callExpression: ts.Node = node;\n // We found a node and need to check where on the path we are\n // we expect this to look a little bit like\n // const persistedDoc = graphql.persisted<typeof x>()\n // When we are on the left half of this statement we bubble down\n // looking for the correct call-expression and on the right hand\n // we bubble up.\n if (ts.isVariableStatement(callExpression)) {\n callExpression =\n callExpression.declarationList.declarations.find(declaration => {\n return (\n ts.isVariableDeclaration(declaration) &&\n declaration.initializer &&\n ts.isCallExpression(declaration.initializer)\n );\n }) || node;\n } else if (ts.isVariableDeclarationList(callExpression)) {\n callExpression =\n callExpression.declarations.find(declaration => {\n return (\n ts.isVariableDeclaration(declaration) &&\n declaration.initializer &&\n ts.isCallExpression(declaration.initializer)\n );\n }) || node;\n } else if (\n ts.isVariableDeclaration(callExpression) &&\n callExpression.initializer &&\n ts.isCallExpression(callExpression.initializer)\n ) {\n callExpression = callExpression.initializer;\n } else {\n while (callExpression && !ts.isCallExpression(callExpression)) {\n callExpression = callExpression.parent;\n }\n }\n\n // We want to ensure that we found a call-expression and that it looks\n // like \"graphql.persisted\", in a future iteration when the API surface\n // is more defined we will need to use the ts.Symbol to support re-exporting\n // this function by means of \"export const peristed = graphql.persisted\".\n if (!checks.isTadaPersistedCall(callExpression, typeChecker)) {\n return undefined;\n }\n\n let foundNode,\n foundFilename = filename;\n if (callExpression.typeArguments) {\n const [typeQuery] = callExpression.typeArguments;\n if (!typeQuery || !ts.isTypeQueryNode(typeQuery)) return undefined;\n const { node: found, filename: fileName } =\n getDocumentReferenceFromTypeQuery(typeQuery, filename, info);\n foundNode = found;\n foundFilename = fileName;\n } else if (callExpression.arguments[1]) {\n if (\n !ts.isIdentifier(callExpression.arguments[1]) &&\n !ts.isCallExpression(callExpression.arguments[1])\n )\n return undefined;\n const { node: found, filename: fileName } =\n getDocumentReferenceFromDocumentNode(\n callExpression.arguments[1],\n filename,\n info\n );\n foundNode = found;\n foundFilename = fileName;\n }\n\n if (!foundNode) return undefined;\n\n const initializer = foundNode;\n if (\n !initializer ||\n !ts.isCallExpression(initializer) ||\n !initializer.arguments[0] ||\n !ts.isStringLiteralLike(initializer.arguments[0])\n ) {\n return undefined;\n }\n\n const hash = generateHashForDocument(\n info,\n initializer.arguments[0],\n foundFilename,\n initializer.arguments[1] &&\n ts.isArrayLiteralExpression(initializer.arguments[1])\n ? initializer.arguments[1]\n : undefined\n );\n const existingHash = callExpression.arguments[0];\n // We assume for now that this is either undefined or an existing string literal\n if (!existingHash) {\n // We have no persisted-identifier yet, suggest adding in a new one\n return {\n span: {\n start: callExpression.arguments.pos,\n length: 1,\n },\n replacement: `\"sha256:${hash}\")`,\n };\n } else if (\n ts.isStringLiteral(existingHash) &&\n existingHash.getText() !== `\"sha256:${hash}\"`\n ) {\n // We are out of sync, suggest replacing this with the updated hash\n return {\n span: {\n start: existingHash.getStart(),\n length: existingHash.end - existingHash.getStart(),\n },\n replacement: `\"sha256:${hash}\"`,\n };\n } else if (ts.isIdentifier(existingHash)) {\n // Suggest replacing a reference with a static one\n // this to make these easier to statically analyze\n return {\n span: {\n start: existingHash.getStart(),\n length: existingHash.end - existingHash.getStart(),\n },\n replacement: `\"sha256:${hash}\"`,\n };\n } else {\n return undefined;\n }\n}\n\nexport const generateHashForDocument = (\n info: ts.server.PluginCreateInfo,\n templateLiteral: ts.StringLiteralLike | ts.TaggedTemplateExpression,\n foundFilename: string,\n referencedFragments: ts.ArrayLiteralExpression | undefined\n): string | undefined => {\n if (referencedFragments) {\n const fragments: Array<FragmentDefinitionNode> = [];\n unrollTadaFragments(referencedFragments, fragments, info);\n let text = resolveTemplate(\n templateLiteral,\n foundFilename,\n info\n ).combinedText;\n const parsed = parse(text);\n const seen = new Set<unknown>();\n for (const definition of parsed.definitions) {\n if (\n definition.kind === Kind.FRAGMENT_DEFINITION &&\n !seen.has(definition)\n ) {\n stripUnmaskDirectivesFromDefinition(definition);\n }\n }\n\n const deduplicatedFragments = fragments\n .map(fragment => {\n stripUnmaskDirectivesFromDefinition(fragment);\n return print(fragment);\n })\n .filter((fragment, index, array) => array.indexOf(fragment) === index);\n\n deduplicatedFragments.forEach(fragmentDefinition => {\n text = `${text}\\n\\n${fragmentDefinition}`;\n });\n const fullText = print(parse(text));\n return createHash('sha256').update(fullText).digest('hex');\n } else {\n const externalSource = getSource(info, foundFilename)!;\n const { fragments } = findAllCallExpressions(externalSource, info);\n\n const text = resolveTemplate(\n templateLiteral,\n foundFilename,\n info\n ).combinedText;\n\n const parsed = parse(text);\n const seen = new Set<unknown>();\n for (const definition of parsed.definitions) {\n if (\n definition.kind === Kind.FRAGMENT_DEFINITION &&\n !seen.has(definition)\n ) {\n stripUnmaskDirectivesFromDefinition(definition);\n }\n }\n\n const spreads = new Set<string>();\n visit(parsed, {\n FragmentDefinition: node => {\n fragments.push(node);\n },\n FragmentSpread: node => {\n spreads.add(node.name.value);\n },\n });\n\n let resolvedText = text;\n const visited = new Set();\n const traversedSpreads = [...spreads];\n\n let spreadName: string | undefined;\n while ((spreadName = traversedSpreads.shift())) {\n visited.add(spreadName);\n const fragmentDefinition = fragments.find(\n x => x.name.value === spreadName\n );\n if (!fragmentDefinition) {\n info.project.projectService.logger.info(\n `[GraphQLSP] could not find fragment for spread ${spreadName}!`\n );\n return;\n }\n\n stripUnmaskDirectivesFromDefinition(fragmentDefinition);\n\n visit(fragmentDefinition, {\n FragmentSpread: node => {\n if (!visited.has(node.name.value))\n traversedSpreads.push(node.name.value);\n },\n });\n\n resolvedText = `${resolvedText}\\n\\n${print(fragmentDefinition)}`;\n }\n\n return createHash('sha256')\n .update(print(parse(resolvedText)))\n .digest('hex');\n }\n};\n\nexport const getDocumentReferenceFromTypeQuery = (\n typeQuery: ts.TypeQueryNode,\n filename: string,\n info: ts.server.PluginCreateInfo\n): { node: ts.CallExpression | null; filename: string } => {\n const typeChecker = info.languageService.getProgram()?.getTypeChecker();\n if (!typeChecker) return { node: null, filename };\n\n // Handle EntityName (Identifier | QualifiedName)\n let identifier: ts.Identifier | undefined;\n if (ts.isIdentifier(typeQuery.exprName)) {\n identifier = typeQuery.exprName;\n } else if (ts.isQualifiedName(typeQuery.exprName)) {\n // For qualified names like 'module.identifier', get the right-most identifier\n identifier = typeQuery.exprName.right;\n }\n\n if (!identifier) return { node: null, filename };\n\n const value = getValueOfIdentifier(identifier, typeChecker);\n if (!value || !checks.isGraphQLCall(value, typeChecker)) {\n return { node: null, filename };\n }\n\n return {\n node: value as ts.CallExpression,\n filename: value.getSourceFile().fileName,\n };\n};\n\nexport const getDocumentReferenceFromDocumentNode = (\n documentNodeArgument: ts.Identifier | ts.CallExpression,\n filename: string,\n info: ts.server.PluginCreateInfo\n): { node: ts.CallExpression | null; filename: string } => {\n if (ts.isIdentifier(documentNodeArgument)) {\n const typeChecker = info.languageService.getProgram()?.getTypeChecker();\n if (!typeChecker) return { node: null, filename };\n\n const value = getValueOfIdentifier(documentNodeArgument, typeChecker);\n if (!value || !checks.isGraphQLCall(value, typeChecker)) {\n return { node: null, filename };\n }\n\n return {\n node: value as ts.CallExpression,\n filename: value.getSourceFile().fileName,\n };\n } else {\n return { node: documentNodeArgument, filename };\n }\n};\n\ntype writable<T> = { -readonly [K in keyof T]: T[K] };\n\nconst stripUnmaskDirectivesFromDefinition = (\n definition: FragmentDefinitionNode\n) => {\n (definition as writable<FragmentDefinitionNode>).directives =\n definition.directives?.filter(\n directive => directive.name.value !== '_unmask'\n );\n};\n","import { ts } from './ts';\nimport { Diagnostic, getDiagnostics } from 'graphql-language-service';\nimport {\n FragmentDefinitionNode,\n Kind,\n OperationDefinitionNode,\n parse,\n visit,\n} from 'graphql';\nimport { LRUCache } from 'lru-cache';\nimport fnv1a from '@sindresorhus/fnv1a';\nimport { print } from '@0no-co/graphql.web';\n\nimport {\n findAllCallExpressions,\n findAllPersistedCallExpressions,\n findAllTaggedTemplateNodes,\n getSource,\n} from './ast';\nimport { resolveTemplate } from './ast/resolve';\nimport { UNUSED_FIELD_CODE, checkFieldUsageInFile } from './fieldUsage';\nimport {\n MISSING_FRAGMENT_CODE,\n getColocatedFragmentNames,\n} from './checkImports';\nimport {\n generateHashForDocument,\n getDocumentReferenceFromDocumentNode,\n getDocumentReferenceFromTypeQuery,\n} from './persisted';\nimport { SchemaRef } from './graphql/getSchema';\n\nconst BASE_CLIENT_DIRECTIVES = new Set([\n 'populate',\n 'client',\n 'unmask',\n '_unmask',\n '_optional',\n '_relayPagination',\n '_simplePagination',\n '_required',\n 'optional',\n 'required',\n 'arguments',\n 'argumentDefinitions',\n 'connection',\n 'refetchable',\n 'relay',\n 'required',\n 'inline',\n]);\n\nexport const SEMANTIC_DIAGNOSTIC_CODE = 52001;\nexport const USING_DEPRECATED_FIELD_CODE = 52004;\nexport const MISSING_PERSISTED_TYPE_ARG = 520100;\nexport const MISSING_PERSISTED_CODE_ARG = 520101;\nexport const MISSING_PERSISTED_DOCUMENT = 520102;\nexport const MISSMATCH_HASH_TO_DOCUMENT = 520103;\nexport const ALL_DIAGNOSTICS = [\n SEMANTIC_DIAGNOSTIC_CODE,\n USING_DEPRECATED_FIELD_CODE,\n MISSING_FRAGMENT_CODE,\n UNUSED_FIELD_CODE,\n MISSING_PERSISTED_TYPE_ARG,\n MISSING_PERSISTED_CODE_ARG,\n MISSING_PERSISTED_DOCUMENT,\n MISSMATCH_HASH_TO_DOCUMENT,\n];\n\nconst cache = new LRUCache<number, ts.Diagnostic[]>({\n // how long to live in ms\n ttl: 1000 * 60 * 15,\n max: 5000,\n});\n\nexport function getGraphQLDiagnostics(\n filename: string,\n schema: SchemaRef,\n info: ts.server.PluginCreateInfo\n): ts.Diagnostic[] | undefined {\n const isCallExpression = info.config.templateIsCallExpression ?? true;\n\n let source = getSource(info, filename);\n if (!source) return undefined;\n\n let fragments: Array<FragmentDefinitionNode> = [],\n nodes: {\n node: ts.StringLiteralLike | ts.TaggedTemplateExpression;\n schema: string | null;\n }[];\n if (isCallExpression) {\n const result = findAllCallExpressions(source, info);\n fragments = result.fragments;\n nodes = result.nodes;\n } else {\n nodes = findAllTaggedTemplateNodes(source).map(x => ({\n node: x,\n schema: null,\n }));\n }\n\n const texts = nodes.map(({ node }) => {\n if (\n (ts.isNoSubstitutionTemplateLiteral(node) ||\n ts.isTemplateExpression(node)) &&\n !isCallExpression\n ) {\n if (ts.isTaggedTemplateExpression(node.parent)) {\n node = node.parent;\n } else {\n return undefined;\n }\n }\n\n return resolveTemplate(node, filename, info).combinedText;\n });\n\n const cacheKey = fnv1a(\n isCallExpression\n ? source.getText() +\n fragments.map(x => print(x)).join('-') +\n schema.version\n : texts.join('-') + schema.version\n );\n\n let tsDiagnostics: ts.Diagnostic[];\n if (cache.has(cacheKey)) {\n tsDiagnostics = cache.get(cacheKey)!;\n } else {\n tsDiagnostics = runDiagnostics(source, { nodes, fragments }, schema, info);\n cache.set(cacheKey, tsDiagnostics);\n }\n\n const shouldCheckForColocatedFragments =\n info.config.shouldCheckForColocatedFragments ?? true;\n let fragmentDiagnostics: ts.Diagnostic[] = [];\n\n if (isCallExpression) {\n const persistedCalls = findAllPersistedCallExpressions(source, info);\n // We need to check whether the user has correctly inserted a hash,\n // by means of providing an argument to the function and that they\n // are establishing a reference to the document by means of the generic.\n const persistedDiagnostics = persistedCalls\n .map<ts.Diagnostic | null>(found => {\n const { node: callExpression } = found;\n if (!callExpression.typeArguments && !callExpression.arguments[1]) {\n return {\n category: ts.DiagnosticCategory.Warning,\n code: MISSING_PERSISTED_TYPE_ARG,\n file: source,\n messageText: 'Missing generic pointing at the GraphQL document.',\n start: callExpression.getStart(),\n length: callExpression.getEnd() - callExpression.getStart(),\n };\n }\n\n let foundNode,\n foundFilename = filename,\n ref,\n start,\n length;\n const typeQuery =\n callExpression.typeArguments && callExpression.typeArguments[0];\n if (typeQuery) {\n start = typeQuery.getStart();\n length = typeQuery.getEnd() - typeQuery.getStart();\n\n if (!ts.isTypeQueryNode(typeQuery)) {\n return {\n category: ts.DiagnosticCategory.Warning,\n code: MISSING_PERSISTED_TYPE_ARG,\n file: source,\n messageText:\n 'Provided generic should be a typeQueryNode in the shape of graphql.persisted<typeof document>.',\n start,\n length,\n };\n }\n const { node: found, filename: fileName } =\n getDocumentReferenceFromTypeQuery(typeQuery, filename, info);\n foundNode = found;\n foundFilename = fileName;\n ref = typeQuery.getText();\n } else if (callExpression.arguments[1]) {\n start = callExpression.arguments[1].getStart();\n length =\n callExpression.arguments[1].getEnd() -\n callExpression.arguments[1].getStart();\n if (\n !ts.isIdentifier(callExpression.arguments[1]) &&\n !ts.isCallExpression(callExpression.arguments[1])\n ) {\n return {\n category: ts.DiagnosticCategory.Warning,\n code: MISSING_PERSISTED_TYPE_ARG,\n file: source,\n messageText:\n 'Provided argument should be an identifier or invocation of \"graphql\" in the shape of graphql.persisted(hash, document).',\n start,\n length,\n };\n }\n\n const { node: found, filename: fileName } =\n getDocumentReferenceFromDocumentNode(\n callExpression.arguments[1],\n filename,\n info\n );\n foundNode = found;\n foundFilename = fileName;\n ref = callExpression.arguments[1].getText();\n }\n\n if (!foundNode) {\n return {\n category: ts.DiagnosticCategory.Warning,\n code: MISSING_PERSISTED_DOCUMENT,\n file: source,\n messageText: `Can't find reference to \"${ref}\".`,\n start,\n length,\n };\n }\n\n const initializer = foundNode;\n if (\n !initializer ||\n !ts.isCallExpression(initializer) ||\n !initializer.arguments[0] ||\n !ts.isStringLiteralLike(initializer.arguments[0])\n ) {\n // TODO: we can make this check more stringent where we also parse and resolve\n // the accompanying template.\n return {\n category: ts.DiagnosticCategory.Warning,\n code: MISSING_PERSISTED_DOCUMENT,\n file: source,\n messageText: `Referenced type \"${ref}\" is not a GraphQL document.`,\n start,\n length,\n };\n }\n\n if (!callExpression.arguments[0]) {\n // TODO: this might be covered by the API enforcing the first\n // argument so can possibly be removed.\n return {\n category: ts.DiagnosticCategory.Warning,\n code: MISSING_PERSISTED_CODE_ARG,\n file: source,\n messageText: `The call-expression is missing a hash for the persisted argument.`,\n start: callExpression.arguments.pos,\n length: callExpression.arguments.end - callExpression.arguments.pos,\n };\n }\n\n const hash = callExpression.arguments[0].getText().slice(1, -1);\n if (hash.startsWith('sha256:')) {\n const generatedHash = generateHashForDocument(\n info,\n initializer.arguments[0],\n foundFilename,\n initializer.arguments[1] &&\n ts.isArrayLiteralExpression(initializer.arguments[1])\n ? initializer.arguments[1]\n : undefined\n );\n if (!generatedHash) return null;\n\n const upToDateHash = `sha256:${generatedHash}`;\n if (upToDateHash !== hash) {\n return {\n category: ts.DiagnosticCategory.Warning,\n code: MISSMATCH_HASH_TO_DOCUMENT,\n file: source,\n messageText: `The persisted document's hash is outdated`,\n start: callExpression.arguments.pos,\n length:\n callExpression.arguments.end - callExpression.arguments.pos,\n };\n }\n }\n\n return null;\n })\n .filter(Boolean);\n\n tsDiagnostics.push(...(persistedDiagnostics as ts.Diagnostic[]));\n }\n\n if (isCallExpression && shouldCheckForColocatedFragments) {\n const moduleSpecifierToFragments = getColocatedFragmentNames(source, info);\n\n const usedFragments = new Set();\n nodes.forEach(({ node }) => {\n try {\n const parsed = parse(node.getText().slice(1, -1), {\n noLocation: true,\n });\n visit(parsed, {\n FragmentSpread: node => {\n usedFragments.add(node.name.value);\n },\n });\n } catch (e) {}\n });\n\n Object.keys(moduleSpecifierToFragments).forEach(moduleSpecifier => {\n const {\n fragments: fragmentNames,\n start,\n length,\n } = moduleSpecifierToFragments[moduleSpecifier]!;\n const missingFragments = Array.from(\n new Set(fragmentNames.filter(x => !usedFragments.has(x)))\n );\n if (missingFragments.length) {\n fragmentDiagnostics.push({\n file: source,\n length,\n start,\n category: ts.DiagnosticCategory.Warning,\n code: MISSING_FRAGMENT_CODE,\n messageText: `Unused co-located fragment definition(s) \"${missingFragments.join(\n ', '\n )}\" in ${moduleSpecifier}`,\n });\n }\n });\n\n return [...tsDiagnostics, ...fragmentDiagnostics];\n } else {\n return tsDiagnostics;\n }\n}\n\nconst runDiagnostics = (\n source: ts.SourceFile,\n {\n nodes,\n fragments,\n }: {\n nodes: {\n node: ts.TaggedTemplateExpression | ts.StringLiteralLike;\n schema: string | null;\n }[];\n fragments: FragmentDefinitionNode[];\n },\n schema: SchemaRef,\n info: ts.server.PluginCreateInfo\n): ts.Diagnostic[] => {\n const filename = source.fileName;\n const isCallExpression = info.config.templateIsCallExpression ?? true;\n\n const diagnostics = nodes\n .map(originalNode => {\n let node = originalNode.node;\n if (\n !isCallExpression &&\n (ts.isNoSubstitutionTemplateLiteral(node) ||\n ts.isTemplateExpression(node))\n ) {\n if (ts.isTaggedTemplateExpression(node.parent)) {\n node = node.parent;\n } else {\n return undefined;\n }\n }\n\n const { combinedText: text, resolvedSpans } = resolveTemplate(\n node,\n filename,\n info\n );\n const lines = text.split('\\n');\n\n let isExpression = false;\n if (ts.isAsExpression(node.parent)) {\n if (ts.isExpressionStatement(node.parent.parent)) {\n isExpression = true;\n }\n } else if (ts.isExpressionStatement(node.parent)) {\n isExpression = true;\n }\n // When we are dealing with a plain gql statement we have to add two these can be recognised\n // by the fact that the parent is an expressionStatement\n\n let startingPosition =\n node.getStart() +\n (isCallExpression\n ? 0\n : (node as ts.TaggedTemplateExpression).tag.getText().length +\n (isExpression ? 2 : 0));\n const endPosition = startingPosition + node.getText().length;\n let docFragments = [...fragments];\n if (isCallExpression) {\n try {\n const documentFragments = parse(text, {\n noLocation: true,\n }).definitions.filter(x => x.kind === Kind.FRAGMENT_DEFINITION);\n docFragments = docFragments.filter(\n x =>\n !documentFragments.some(\n y =>\n y.kind === Kind.FRAGMENT_DEFINITION &&\n y.name.value === x.name.value\n )\n );\n } catch (e) {}\n }\n\n const schemaToUse =\n originalNode.schema && schema.multi[originalNode.schema]\n ? schema.multi[originalNode.schema]?.schema\n : schema.current?.schema;\n\n if (!schemaToUse) {\n return undefined;\n }\n\n const clientDirectives = new Set([\n ...BASE_CLIENT_DIRECTIVES,\n ...(info.config.clientDirectives || []),\n ]);\n\n const graphQLDiagnostics = getDiagnostics(\n text,\n schemaToUse,\n undefined,\n undefined,\n docFragments\n )\n .filter(diag => {\n if (!diag.message.includes('Unknown directive')) return true;\n\n const [message] = diag.message.split('(');\n const matches =\n message && /Unknown directive \"@([^)]+)\"/g.exec(message);\n if (!matches) return true;\n const directiveName = matches[1];\n return directiveName && !clientDirectives.has(directiveName);\n })\n .map(x => {\n const { start, end } = x.range;\n\n // We add the start.line to account for newline characters which are\n // split out\n let startChar = startingPosition + start.line;\n for (let i = 0; i <= start.line && i < lines.length; i++) {\n if (i === start.line) startChar += start.character;\n else if (lines[i]) startChar += lines[i]!.length;\n }\n\n let endChar = startingPosition + end.line;\n for (let i = 0; i <= end.line && i < lines.length; i++) {\n if (i === end.line) endChar += end.character;\n else if (lines[i]) endChar += lines[i]!.length;\n }\n\n const locatedInFragment = resolvedSpans.find(x => {\n const newEnd = x.new.start + x.new.length;\n return startChar >= x.new.start && endChar <= newEnd;\n });\n\n if (!!locatedInFragment) {\n return {\n ...x,\n start: locatedInFragment.original.start,\n length: locatedInFragment.original.length,\n };\n } else {\n if (startChar > endPosition) {\n // we have to calculate the added length and fix this\n const addedCharacters = resolvedSpans\n .filter(x => x.new.start + x.new.length < startChar)\n .reduce(\n (acc, span) => acc + (span.new.length - span.original.length),\n 0\n );\n startChar = startChar - addedCharacters;\n endChar = endChar - addedCharacters;\n return {\n ...x,\n start: startChar + 1,\n length: endChar - startChar,\n };\n } else {\n return {\n ...x,\n start: startChar + 1,\n length: endChar - startChar,\n };\n }\n }\n })\n .filter(x => x.start + x.length <= endPosition);\n\n return graphQLDiagnostics;\n })\n .flat()\n .filter(Boolean) as Array<Diagnostic & { length: number; start: number }>;\n\n const tsDiagnostics = diagnostics.map(\n diag =>\n ({\n file: source,\n length: diag.length,\n start: diag.start,\n category:\n diag.severity === 2\n ? ts.DiagnosticCategory.Warning\n : ts.DiagnosticCategory.Error,\n code:\n typeof diag.code === 'number'\n ? diag.code\n : diag.severity === 2\n ? USING_DEPRECATED_FIELD_CODE\n : SEMANTIC_DIAGNOSTIC_CODE,\n messageText: diag.message.split('\\n')[0],\n } as ts.Diagnostic)\n );\n\n if (isCallExpression) {\n const usageDiagnostics =\n checkFieldUsageInFile(\n source,\n nodes.map(x => x.node) as ts.NoSubstitutionTemplateLiteral[],\n info\n ) || [];\n\n if (!usageDiagnostics) return tsDiagnostics;\n\n return [...tsDiagnostics, ...usageDiagnostics];\n } else {\n return tsDiagnostics;\n }\n};\n"],"names":["ts","init","modules","typescript","CharacterStream","constructor","sourceText","this","_start","_pos","getStartOfToken","getCurrentPosition","eol","_sourceText","length","sol","peek","charAt","next","char","eat","pattern","_testNextCharacter","eatWhile","match","isMatched","didEat","eatSpace","skipToEnd","skipTo","position","consume","caseFold","token","RegExp","test","slice","Array","startsWith","backUp","num","column","indentation","indent","whiteSpaces","pos","charCodeAt","current","character","opt","ofRule","list","separator","isList","t","kind","style","p","value","isIgnored","ch","LexRules","Name","Punctuation","Number","String","Comment","ParseRules","Document","Definition","Kind","FRAGMENT_DEFINITION","ShortQuery","Query","word","name","Mutation","Subscription","VariableDefinitions","VariableDefinition","Variable","DefaultValue","SelectionSet","Selection","stream","AliasedField","Field","Arguments","Argument","FragmentSpread","InlineFragment","FragmentDefinition","butNot","rule","exclusions","ruleMatch","check","every","exclusion","TypeCondition","Value","NumberValue","StringValue","update","state","inBlockstring","endsWith","BooleanValue","NullValue","EnumValue","ListValue","ObjectValue","ObjectField","Type","ListType","NonNullType","NamedType","type","_a","prevState","Directive","DirectiveDef","InterfaceDef","Implements","DirectiveLocation","SchemaDef","OperationTypeDef","ScalarDef","ObjectTypeDef","FieldDef","ArgumentsDef","InputValueDef","UnionDef","UnionMember","EnumDef","EnumValueDef","InputDef","ExtendDef","ExtensionDefinition","SCHEMA_EXTENSION","SCALAR_TYPE_EXTENSION","OBJECT_TYPE_EXTENSION","INTERFACE_TYPE_EXTENSION","UNION_TYPE_EXTENSION","ENUM_TYPE_EXTENSION","INPUT_OBJECT_TYPE_EXTENSION","onlineParser","options","eatWhitespace","lexRules","parseRules","editorConfig","startState","initialState","level","step","needsSeparator","pushRule","DOCUMENT","getToken","popRule","needsAdvance","advanceRule","tabSize","indentLevel","Math","floor","lex","kinds","Object","keys","i","SpecialParseRules","backupState","assign","undefined","levels","concat","at","expected","call","unsuccessful","to","from","Invalid","rules","ruleKind","TypeError","successful","isArray","Range","start","end","containsPosition","line","setStart","Position","setEnd","lessThanOrEqualTo","setLine","setCharacter","specifiedSDLRules","LoneSchemaDefinitionRule","UniqueOperationTypesRule","UniqueTypeNamesRule","UniqueEnumValueNamesRule","UniqueFieldDefinitionNamesRule","UniqueDirectiveNamesRule","KnownTypeNamesRule","KnownDirectivesRule","UniqueDirectivesPerLocationRule","PossibleTypeExtensionsRule","UniqueArgumentNamesRule","UniqueInputFieldNamesRule","DIAGNOSTIC_SEVERITY","invariant","condition","message","Error","getDiagnostics","query","schema","customRules","isRelayCompatMode","externalFragments","ast","fragments","reduce","acc","node","print","enhancedQuery","parse","error","GraphQLError","range","getRange","location","queryText","parser","lines","split","_b","locations","severity","source","validateQuery","validationErrorAnnotations","validateWithCustomRules","isSchemaDocument","specifiedRules","filter","NoUnusedFragmentsRule","ExecutableDefinitionsRule","KnownFragmentNamesRule","prototype","push","apply","validate","includes","nodes","DIRECTIVE","flatMap","annotations","deprecationWarningAnnotations","NoDeprecatedCustomRule","Warning","highlightedNodes","entries","highlightNode","variable","loc","highlightLoc","getLocation","e","templates","Set","isIIFE","isCallExpression","arguments","isFunctionExpression","expression","isArrowFunction","asteriskToken","modifiers","isGraphQLFunctionIdentifier","isIdentifier","has","escapedText","isTadaGraphQLFunction","checker","isLeftHandSideExpression","getTypeAtLocation","getProperty","isTadaGraphQLCall","isStringLiteralLike","isTadaPersistedCall","isPropertyAccessExpression","isGraphQLCall","isGraphQLTag","isTaggedTemplateExpression","tag","getSchemaName","typeChecker","getChildAt","brandTypeSymbol","brand","getTypeOfSymbol","isUnionOrIntersection","found","types","find","x","isStringLiteral","isValueDeclaration","SyntaxKind","BinaryExpression","ArrowFunction","BindingElement","ClassDeclaration","ClassExpression","ClassStaticBlockDeclaration","Constructor","EnumDeclaration","EnumMember","ExportAssignment","FunctionDeclaration","FunctionExpression","GetAccessor","JsxAttribute","MethodDeclaration","Parameter","PropertyAssignment","PropertyDeclaration","SetAccessor","ShorthandPropertyAssignment","VariableDeclaration","getValueOfValueDeclaration","initializer","isAssignmentOperator","EqualsToken","BarBarEqualsToken","AmpersandAmpersandEqualsToken","QuestionQuestionEqualsToken","operatorToken","right","objectAssignmentInitializer","climbPastPropertyOrElementAccess","parent","isElementAccessExpression","argumentExpression","getNameFromPropertyName","isComputedPropertyName","isNumericLiteral","text","isPrivateIdentifier","isMemberName","idText","getDeclarationOfIdentifier","symbol","getSymbolAtLocation","declarations","flags","SymbolFlags","Alias","isNamespaceImport","aliased","getAliasedSymbol","isShorthandPropertyAssignment","shorthandSymbol","getShorthandAssignmentValueSymbol","valueDeclaration","isBindingElement","isObjectBindingPattern","propertyName","prop","isObjectLiteralElement","isObjectLiteralExpression","isJsxAttributes","getContextualType","Class","Function","isNewExpressionTarget","target","isNewExpression","declaration","isClassLike","isCallOrNewExpressionTarget","isCallOrNewExpression","isNameOfFunctionDeclaration","isFunctionLike","body","isBinaryExpression","left","getValueOfIdentifier","resolveTemplate","filename","info","combinedText","getText","resolvedSpans","templateText","template","isNoSubstitutionTemplateLiteral","templateSpans","addedCharacters","map","span","languageService","getProgram","getTypeChecker","isVariableDeclaration","identifierName","originalStart","getStart","originalRange","getSourceFile","fileName","replace","alteredSpan","identifier","original","new","isAsExpression","resolvedTemplate","JSON","Boolean","resolveTadaFragmentArray","isArrayLiteralExpression","elements","identifiers","element","getSource","program","findNode","sourceFile","getEnd","forEachChild","unrollFragment","seen","WeakSet","_unrollElement","add","resolveIdentifierToGraphQLCall","input","checks","fragmentRefs","noLocation","definitions","forEach","definition","_error","nextElement","shift","unrollTadaFragments","fragmentsArray","wip","el","findAllCallExpressions","shouldSearchFragments","result","hasTriedToFindFragments","getAllFragments","findAllPersistedCallExpressions","getIdentifierOfChainExpression","isSatisfiesExpression","isNonNullExpression","isParenthesizedExpression","isExpressionWithTypeArguments","isCommaListExpression","textSpan","getWidth","def","src","isVariableStatement","declarationList","properties","property","isPropertyAssignment","possibleFragment","bubbleUpTemplate","isToken","isTemplateExpression","isTemplateSpan","bubbleUpCallExpression","perf","performance","now","Date","warned","PROCESS","process","emitWarning","msg","code","fn","console","AC","globalThis","AbortController","AS","AbortSignal","_onabort","aborted","addEventListener","_","warnACPolyfill","signal","abort","reason","onabort","printACPolyfillWarning","env","LRU_CACHE_IGNORE_AC_WARNING","isPosInt","n","isFinite","getUintArray","max","pow","Uint8Array","Uint16Array","Uint32Array","MAX_SAFE_INTEGER","ZeroArray","size","super","fill","Stack","static","create","HeapCls","constructing","s","heap","pop","LRUCache","maxSize","dispose","disposeAfter","fetchMethod","calculatedSize","keyMap","keyList","valList","prev","head","tail","free","disposed","sizes","starts","ttls","hasDispose","hasFetchMethod","hasDisposeAfter","unsafeExposeInternals","c","isBackgroundFetch","backgroundFetch","k","index","context","moveToTail","indexes","rindexes","isStale","ttl","ttlResolution","ttlAutopurge","updateAgeOnGet","updateAgeOnHas","allowStale","noDisposeOnSet","noUpdateTTL","maxEntrySize","sizeCalculation","noDeleteOnFetchRejection","noDeleteOnStaleGet","allowStaleOnFetchRejection","allowStaleOnFetchAbort","ignoreFetchAbort","UintArray","Map","initializeSizeTracking","initializeTTLTracking","shouldWarn","getRemainingTTL","key","Infinity","setItemTTL","setTimeout","delete","unref","updateItemAge","statusTTL","status","cachedNow","getNow","remainingTTL","get","#updateItemAge","#statusTTL","#setItemTTL","#isStale","removeItemSize","requireSize","v","addItemSize","evict","entrySize","totalCalculatedSize","_i","#addItemSize","_s","_st","#requireSize","_k","_v","isValidIndex","rentries","rkeys","values","rvalues","Symbol","iterator","getOptions","__staleWhileFetching","thisp","rforEach","purgeStale","deleted","dump","arr","entry","age","unshift","load","clear","set","setOptions","maxEntrySizeExceeded","oldVal","__abortController","oldValue","dt","task","val","hasOptions","peekOptions","ac","fetchOpts","cb","updateCache","ignoreAbort","fetchAborted","fetchError","fetchAbortIgnored","fetchResolved","fetchFail","fetchUpdated","er","allowStaleAborted","bf","returnedStale","__returned","fetchDispatched","Promise","pcall","res","rej","fmp","then","fetchRejected","b","hasOwnProperty","fetch","fetchOptions","forceRefresh","stale","staleVal","fetching","connect","FNV_PRIMES","FNV_OFFSETS","fnv1aModule","exports","fnv1a","string","hash","isUnicoded","characterCode","unescape","encodeURIComponent","bigInt","fnvPrime","BigInt","asUintN","UNUSED_FIELD_CODE","unwrapAbstractType","TypeFlags","getVariableDeclaration","isBlock","traverseArrayDestructuring","originalWip","allFields","isOmittedExpression","crawlScope","traverseDestructuring","results","_loop","binding","joined","join","traverseResult","crawlResult","arrayMethods","crawlChainedExpressions","ref","pathParts","isReduce","func","nestedResult","isFunctionDeclaration","param","parameters","scopedResult","inArrayMethod","isArrayBindingPattern","references","getReferencesAtPosition","foundRef","_ret","_loop2","isReturnStatement","arg","parts","reference","_loop3","callExpression","isSomeOrEvery","chainedResults","varRes","getColocatedFragmentNames","imports","findAllImports","statements","isImportDeclaration","importSpecifierToFragments","imp","importClause","names","getFragmentsInSource","fragment","moduleSpecifier","fragmentsEntry","namedBindings","isNamedImportBindings","callExpressions","exportedNames","getExportsOfModule","symb","isSourceFile","parsed","getPersistedCodeFixAtPosition","config","templateIsCallExpression","isVariableDeclarationList","foundNode","foundFilename","typeArguments","typeQuery","isTypeQueryNode","getDocumentReferenceFromTypeQuery","getDocumentReferenceFromDocumentNode","generateHashForDocument","existingHash","replacement","templateLiteral","referencedFragments","stripUnmaskDirectivesFromDefinition","array","indexOf","fragmentDefinition","fullText","createHash","digest","externalSource","spreads","visit","resolvedText","visited","traversedSpreads","spreadName","project","projectService","logger","exprName","isQualifiedName","documentNodeArgument","directives","directive","BASE_CLIENT_DIRECTIVES","MISSING_PERSISTED_TYPE_ARG","MISSING_PERSISTED_CODE_ARG","MISSING_PERSISTED_DOCUMENT","MISSMATCH_HASH_TO_DOCUMENT","ALL_DIAGNOSTICS","cache","getGraphQLDiagnostics","findAllTaggedTemplateNodes","texts","cacheKey","version","tsDiagnostics","runDiagnostics","shouldCheckForColocatedFragments","fragmentDiagnostics","persistedDiagnostics","category","DiagnosticCategory","file","messageText","generatedHash","moduleSpecifierToFragments","usedFragments","fragmentNames","missingFragments","diagnostics","originalNode","isExpression","isExpressionStatement","startingPosition","endPosition","docFragments","documentFragments","some","y","schemaToUse","multi","clientDirectives","graphQLDiagnostics","diag","matches","exec","directiveName","startChar","endChar","locatedInFragment","flat","usageDiagnostics","checkFieldUsageInFile","trackFieldUsage","reservedKeys","nodeText","variableDeclaration","dataType","resolvedTypeArguments","apiTypeSymbol","apiType","callSignature","getCallSignatures","getReturnType","allAccess","inProgress","allPaths","fieldToLoc","enter","alias","path","selectionSet","leave","targetNode","scopeSymbols","getSymbolsInScope","BlockScopedVariable","scopeDataSymbol","scopeSymbol","typeOfScopeSymbol","tuplePropertySymbol","dataPropertySymbol","isBindingName","unused","aggregatedUnusedFields","unusedChildren","unusedFragmentLeaf","unusedField","parentField","field","unusedFields","stack"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,14,15]}Выполнить команду
Для локальной разработки. Не используйте в интернете!