eslint-plugin-sql
Version:
SQL linting rules for ESLint.
506 lines (504 loc) • 11.8 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const createRuleTester_1 = require("../factories/createRuleTester");
const format_1 = require("./format");
const multiline_ts_1 = __importDefault(require("multiline-ts"));
exports.default = (0, createRuleTester_1.createRuleTester)('format', format_1.rule, {}, {
invalid: [
{
code: (0, multiline_ts_1.default) `
sql.fragment\`
SELECT
m1.ID
FROM
message m1
WHERE
m1.ID = \${message.id}
\`
`,
errors: [
{
messageId: 'format',
},
],
name: 'identifierCase:lower',
options: [
{},
{
identifierCase: 'lower',
},
],
output: (0, multiline_ts_1.default) `
sql.fragment\`
SELECT
m1.id
FROM
message m1
WHERE
m1.id = \${message.id}
\`
`,
},
{
code: (0, multiline_ts_1.default) `
sql.fragment\`
SELECT id::NUMERIC
\`
`,
errors: [
{
messageId: 'format',
},
],
name: 'dataTypeCase:lower',
options: [
{},
{
dataTypeCase: 'lower',
language: 'postgresql',
},
],
output: (0, multiline_ts_1.default) `
sql.fragment\`
SELECT
id::numeric
\`
`,
},
{
code: (0, multiline_ts_1.default) `
sql.fragment\`
SELECT
COUNT(*)
FROM
message
WHERE
id = \${message.id}
\`
`,
errors: [
{
messageId: 'format',
},
],
name: 'keywordCase:lower',
options: [
{},
{
keywordCase: 'lower',
},
],
output: (0, multiline_ts_1.default) `
sql.fragment\`
select
COUNT(*)
from
message
where
id = \${message.id}
\`
`,
},
{
code: (0, multiline_ts_1.default) `
sql.fragment\`
select
COUNT(*)
from
message
where
id = \${message.id}
\`
`,
errors: [
{
messageId: 'format',
},
],
name: 'keywordCase:upper',
options: [
{},
{
keywordCase: 'upper',
},
],
output: (0, multiline_ts_1.default) `
sql.fragment\`
SELECT
COUNT(*)
FROM
message
WHERE
id = \${message.id}
\`
`,
},
{
code: (0, multiline_ts_1.default) `
sql.fragment\`
\${null}
UPDATE message
SET
messages = \${sql.jsonb(messages as unknown as SerializableValue[])}
WHERE id = \${message.id}
\`;
`,
errors: [
{
messageId: 'format',
},
],
options: [
{},
{
tabWidth: 4,
},
],
output: (0, multiline_ts_1.default) `
sql.fragment\`
\${null}
UPDATE message
SET
messages = \${sql.jsonb(messages as unknown as SerializableValue[])}
WHERE
id = \${message.id}
\`;
`,
},
{
code: (0, multiline_ts_1.default) `
await pool.query(sql.typeAlias('void')\`
UPDATE message
SET
messages = \${sql.jsonb(messages as unknown as SerializableValue[])}
WHERE id = \${message.id}
\`);
`,
errors: [
{
messageId: 'format',
},
],
options: [
{},
{
tabWidth: 4,
},
],
output: (0, multiline_ts_1.default) `
await pool.query(sql.typeAlias('void')\`
UPDATE message
SET
messages = \${sql.jsonb(messages as unknown as SerializableValue[])}
WHERE
id = \${message.id}
\`);
`,
},
{
code: (0, multiline_ts_1.default) `
sql\`
SELECT
1
\`
`,
errors: [
{
messageId: 'format',
},
],
options: [
{},
{
tabWidth: 4,
},
],
output: (0, multiline_ts_1.default) `
sql\`
SELECT
1
\`
`,
},
{
code: (0, multiline_ts_1.default) `
sql.type({ id: z.number() })\`
SELECT
1
\`
`,
errors: [
{
messageId: 'format',
},
],
options: [
{},
{
tabWidth: 4,
},
],
output: (0, multiline_ts_1.default) `
sql.type({ id: z.number() })\`
SELECT
1
\`
`,
},
{
code: (0, multiline_ts_1.default) `
sql.typeAlias('void')\`
SELECT
1
\`
`,
errors: [
{
messageId: 'format',
},
],
options: [
{},
{
tabWidth: 4,
},
],
output: (0, multiline_ts_1.default) `
sql.typeAlias('void')\`
SELECT
1
\`
`,
},
{
code: '`SELECT 1`',
errors: [
{
messageId: 'format',
},
],
options: [
{
ignoreInline: false,
ignoreTagless: false,
},
{},
],
output: (0, multiline_ts_1.default) `
\`
SELECT
1
\`
`,
},
{
code: '`SELECT 2`',
errors: [
{
messageId: 'format',
},
],
options: [
{
ignoreInline: false,
ignoreTagless: false,
},
{
tabWidth: 2,
},
],
output: (0, multiline_ts_1.default) `
\`
SELECT
2
\`
`,
},
{
code: 'sql.unsafe`SELECT 3`',
errors: [
{
messageId: 'format',
},
],
options: [
{
ignoreInline: false,
},
{},
],
output: (0, multiline_ts_1.default) `
sql.unsafe\`
SELECT
3
\`
`,
},
{
code: 'sql.type()`SELECT 3`',
errors: [
{
messageId: 'format',
},
],
options: [
{
ignoreInline: false,
},
{},
],
output: (0, multiline_ts_1.default) `
sql.type()\`
SELECT
3
\`
`,
},
{
code: "`SELECT ${'foo'} FROM ${'bar'}`",
errors: [
{
messageId: 'format',
},
],
options: [
{
ignoreInline: false,
ignoreTagless: false,
},
{},
],
output: (0, multiline_ts_1.default) `
\`
SELECT
\${'foo'}
FROM
\${'bar'}
\`
`,
},
{
code: (0, multiline_ts_1.default) `
const code = sql\`
SELECT
${'foo'}
FROM
${'bar'}
\`
`,
errors: [
{
messageId: 'format',
},
],
options: [{}, {}],
output: (0, multiline_ts_1.default) `
const code = sql\`
SELECT
${'foo'}
FROM
${'bar'}
\`
`,
},
{
code: 'SQL`SELECT 1`',
errors: [
{
messageId: 'format',
},
],
options: [
{
ignoreInline: false,
sqlTag: 'SQL',
},
{},
],
output: (0, multiline_ts_1.default) `
SQL\`
SELECT
1
\`
`,
},
],
valid: [
{
code: (0, multiline_ts_1.default) `
\`
# A
## B
### C
\`
`,
},
{
code: 'sql`SELECT 1`',
options: [
{
ignoreInline: true,
},
{},
],
},
{
code: '`SELECT 2`',
options: [
{
ignoreTagless: true,
},
{},
],
},
{
code: (0, multiline_ts_1.default) `
const code = sql\`
SELECT
\${'foo'}
FROM
\${'bar'}
\`
`,
options: [
{
ignoreExpressions: true,
ignoreInline: false,
ignoreTagless: false,
},
{},
],
},
{
code: (0, multiline_ts_1.default) `
const code = sql\`
SELECT
\${'foo'}
FROM
\${'bar'}
\`
`,
options: [{}, {}],
},
{
code: (0, multiline_ts_1.default) `
const code = sql\`
DROP TABLE foo
\`
`,
options: [{}, {}],
},
{
code: (0, multiline_ts_1.default) `
const code = sql\`
DROP TABLE foo;
DROP TABLE foo;
\`
`,
options: [{}, {}],
},
],
});