UNPKG

eslint-plugin-sql

Version:
96 lines (95 loc) 4.09 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.rule = void 0; const createRule_1 = require("../factories/createRule"); const isSqlQuery_1 = require("../utilities/isSqlQuery"); const debug_1 = __importDefault(require("debug")); const debug = (0, debug_1.default)('eslint-plugin-sql:rule:no-unsafe-query'); const defaultOptions = { allowLiteral: false, sqlTag: 'sql', }; exports.rule = (0, createRule_1.createRule)({ create: (context) => { var _a, _b, _c, _d, _e; // @ts-expect-error I am ont clear how to type this const placeholderRule = (_b = (_a = context.settings) === null || _a === void 0 ? void 0 : _a.sql) === null || _b === void 0 ? void 0 : _b.placeholderRule; const pluginOptions = ((_c = context.options) === null || _c === void 0 ? void 0 : _c[0]) || {}; const sqlTag = (_d = pluginOptions.sqlTag) !== null && _d !== void 0 ? _d : defaultOptions.sqlTag; const allowLiteral = (_e = pluginOptions.allowLiteral) !== null && _e !== void 0 ? _e : defaultOptions.allowLiteral; return { TemplateLiteral(node) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; if (allowLiteral && node.quasis.length === 1) { return; } const literal = node.quasis .map((quasi) => { return quasi.value.raw; }) .join('foo'); debug('input', literal); const recognizedAsQuery = (0, isSqlQuery_1.isSqlQuery)(literal, placeholderRule); debug('recognized as a query', recognizedAsQuery); if (!recognizedAsQuery) { return; } const tagName = // @ts-expect-error TODO (_e = (_b = (_a = node.parent.tag) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : // @ts-expect-error TODO (_d = (_c = node.parent.tag) === null || _c === void 0 ? void 0 : _c.object) === null || _d === void 0 ? void 0 : _d.name) !== null && _e !== void 0 ? _e : // @ts-expect-error TODO (_h = (_g = (_f = node.parent.tag) === null || _f === void 0 ? void 0 : _f.callee) === null || _g === void 0 ? void 0 : _g.object) === null || _h === void 0 ? void 0 : _h.name; // @ts-expect-error TODO const legacyTagName = (_k = (_j = node.parent) === null || _j === void 0 ? void 0 : _j.name) === null || _k === void 0 ? void 0 : _k.toLowerCase(); if (legacyTagName !== sqlTag && tagName !== sqlTag) { context.report({ data: { sqlTag, }, messageId: 'noUnsafeQuery', node, }); } }, }; }, defaultOptions: [ { allowLiteral: false, sqlTag: 'sql', }, ], meta: { docs: { description: 'Disallows use of SQL inside of template literals without the `sql` tag.', url: 'https://github.com/gajus/eslint-plugin-sql#no-unsafe-query', }, fixable: 'code', messages: { noUnsafeQuery: 'Use "{{sqlTag}}" tag', }, schema: [ { additionalProperties: false, properties: { allowLiteral: { default: false, type: 'boolean', }, sqlTag: { default: 'sql', type: 'string', }, }, type: 'object', }, ], type: 'problem', }, name: 'no-unsafe-query', });