@graphql-eslint/eslint-plugin
Version:
GraphQL plugin for ESLint
136 lines (135 loc) • 4.34 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var utils_exports = {};
__export(utils_exports, {
convertLocation: () => convertLocation,
convertToken: () => convertToken,
extractComments: () => extractComments,
extractTokens: () => extractTokens,
getBaseType: () => getBaseType,
valueFromNode: () => valueFromNode
});
module.exports = __toCommonJS(utils_exports);
var import_graphql = require("graphql");
var import_valueFromASTUntyped = require("graphql/utilities/valueFromASTUntyped.js");
const valueFromNode = (...args) => {
return (0, import_valueFromASTUntyped.valueFromASTUntyped)(...args);
};
function getBaseType(type) {
if ((0, import_graphql.isNonNullType)(type) || (0, import_graphql.isListType)(type)) {
return getBaseType(type.ofType);
}
return type;
}
function convertToken(token, type) {
const { line, column, end, start, value } = token;
return {
type,
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- TODO: remove `!` when drop support of graphql@15
value,
/*
* ESLint has 0-based column number
* https://eslint.org/docs/developer-guide/working-with-rules#contextreport
*/
loc: {
start: {
line,
column: column - 1
},
end: {
line,
column: column - 1 + (end - start)
}
},
range: [start, end]
};
}
function getLexer(source) {
const gqlLanguage = require("graphql/language");
if (gqlLanguage == null ? void 0 : gqlLanguage.createLexer) {
return gqlLanguage.createLexer(source, {});
}
const { Lexer: LexerCls } = require("graphql");
if (LexerCls && typeof LexerCls === "function") {
return new LexerCls(source);
}
throw new Error("Unsupported GraphQL version! Please make sure to use GraphQL v14 or newer!");
}
function extractTokens(filePath, code) {
const source = new import_graphql.Source(code, filePath);
const lexer = getLexer(source);
const tokens = [];
let token = lexer.advance();
while (token && token.kind !== import_graphql.TokenKind.EOF) {
const result = convertToken(token, token.kind);
tokens.push(result);
token = lexer.advance();
}
return tokens;
}
function extractComments(loc) {
if (!loc) {
return [];
}
const comments = [];
let token = loc.startToken;
while (token) {
if (token.kind === import_graphql.TokenKind.COMMENT) {
const comment = convertToken(
token,
// `eslint-disable` directive works only with `Block` type comment
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- TODO: remove `!` when drop support of graphql@15
token.value.trimStart().startsWith("eslint") ? "Block" : "Line"
);
comments.push(comment);
}
token = token.next;
}
return comments;
}
function convertLocation(location) {
const { startToken, endToken, source, start, end } = location;
const loc = {
start: {
/*
* Kind.Document has startToken: { line: 0, column: 0 }, we set line as 1 and column as 0
*/
line: startToken.line === 0 ? 1 : startToken.line,
column: startToken.column === 0 ? 0 : startToken.column - 1
},
end: {
line: endToken.line,
column: endToken.column - 1
},
source: source.body
};
if (loc.start.column === loc.end.column) {
loc.end.column += end - start;
}
return loc;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
convertLocation,
convertToken,
extractComments,
extractTokens,
getBaseType,
valueFromNode
});