Skip to content

Commit fd3ea6d

Browse files
committed
fix: handle this.prepare and super.prepare
1 parent 1dd7a64 commit fd3ea6d

File tree

4 files changed

+54
-0
lines changed

4 files changed

+54
-0
lines changed

src/utils.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ export function stringifyNode(
44
node: TSESTree.Expression | TSESTree.PrivateIdentifier,
55
): string | null {
66
switch (node.type) {
7+
case TSESTree.AST_NODE_TYPES.Super: {
8+
return "super";
9+
}
10+
case TSESTree.AST_NODE_TYPES.ThisExpression: {
11+
return "this";
12+
}
713
case TSESTree.AST_NODE_TYPES.Identifier: {
814
return node.name;
915
}

tests/rules/typed-input.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ ruleTester.run("typed-input", typedInputRule, {
2929
'db.prepare<[unknown, {"userID": string}]>("SELECT * FROM users WHERE id = :userID or name = ?")',
3030
'db.prepare<{"userID": string}>("SELECT * FROM users WHERE id = :userID")',
3131
'db.prepare<[unknown]>(`SELECT * FROM users WHERE id IN (${foo.map(() => "?").join(",")})`)',
32+
'this.prepare<[unknown]>("SELECT * FROM users WHERE id = ?")',
33+
'super.prepare<[unknown]>("SELECT * FROM users WHERE id = ?")',
3234
],
3335
invalid: [
3436
// No parameters
@@ -139,5 +141,15 @@ ruleTester.run("typed-input", typedInputRule, {
139141
'db.prepare<[unknown]>(`SELECT * FROM users WHERE id IN (${foo.map(() => "?").join(",")})`)',
140142
errors: [{ messageId: "missingInputType" }],
141143
},
144+
{
145+
code: 'this.prepare("SELECT * FROM users WHERE id = ?")',
146+
output: 'this.prepare<[unknown]>("SELECT * FROM users WHERE id = ?")',
147+
errors: [{ messageId: "missingInputType" }],
148+
},
149+
{
150+
code: 'super.prepare("SELECT * FROM users WHERE id = ?")',
151+
output: 'super.prepare<[unknown]>("SELECT * FROM users WHERE id = ?")',
152+
errors: [{ messageId: "missingInputType" }],
153+
},
142154
],
143155
});

tests/rules/typed-result.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ ruleTester.run("typed-result", rule, {
6161
`db.prepare<[]>("DELETE FROM foo")`,
6262
`db.prepare<[], {"random()": (foo | number), "id": number}>("SELECT random(), id FROM users")`,
6363
'db.prepare<[], {"name": string}>(`SELECT name FROM users WHERE id IN (${foo.map(() => "?").join(",")})`)',
64+
'this.prepare<[], {"name": string}>(`SELECT name FROM users`)',
65+
'super.prepare<[], {"name": string}>(`SELECT name FROM users`)',
6466
],
6567
invalid: [
6668
// Query as string Literal
@@ -190,5 +192,15 @@ ruleTester.run("typed-result", rule, {
190192
'db.prepare<[], {"name": string}>(`SELECT name FROM users WHERE id IN (${foo.map(() => "?").join(",")})`)',
191193
errors: [{ messageId: "missingResultType" }],
192194
},
195+
{
196+
code: "this.prepare(`SELECT name FROM users`)",
197+
output: 'this.prepare<[], {"name": string}>(`SELECT name FROM users`)',
198+
errors: [{ messageId: "missingResultType" }],
199+
},
200+
{
201+
code: "super.prepare(`SELECT name FROM users`)",
202+
output: 'super.prepare<[], {"name": string}>(`SELECT name FROM users`)',
203+
errors: [{ messageId: "missingResultType" }],
204+
},
193205
],
194206
});

tests/rules/valid-query.test.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ ruleTester.run("valid-query", rule, {
3232
"db_users.prepare(`SELECT * FROM users WHERE ${ids.map(() => 'NAME LIKE ? || \\'%\\'').join(' OR ')}`);",
3333
"const query = `SELECT * FROM users WHERE ${ids.map(() => 'NAME LIKE ? || \\'%\\'').join(' OR ')}`;db_users.prepare(query);",
3434
"db_users.prepare(`SELECT * FROM users WHERE id IN (${ids.map(() => '?').join()})`);",
35+
'this.prepare("SELECT * FROM foo")',
36+
'super.prepare("SELECT * FROM foo")',
3537
],
3638
invalid: [
3739
{
@@ -116,5 +118,27 @@ ruleTester.run("valid-query", rule, {
116118
},
117119
],
118120
},
121+
{
122+
code: "this.prepare('SELECT * FROM user')",
123+
errors: [
124+
{
125+
messageId: "invalidQuery",
126+
data: {
127+
message: `no such table: user`,
128+
},
129+
},
130+
],
131+
},
132+
{
133+
code: "super.prepare('SELECT * FROM user')",
134+
errors: [
135+
{
136+
messageId: "invalidQuery",
137+
data: {
138+
message: `no such table: user`,
139+
},
140+
},
141+
],
142+
},
119143
],
120144
});

0 commit comments

Comments
 (0)