Skip to content

Commit dcb0901

Browse files
Added code formatting & linting
1 parent 57a4960 commit dcb0901

File tree

6 files changed

+140
-114
lines changed

6 files changed

+140
-114
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ on:
1313
jobs:
1414
build:
1515
runs-on: ubuntu-latest
16+
timeout-minutes: 20
1617
steps:
1718
- name: Git checkout
1819
uses: actions/checkout@v4
@@ -43,6 +44,8 @@ jobs:
4344
- name: Run tests
4445
run: |
4546
npm i
47+
npx quick-lint-js ./*.js
48+
npm run formatCheck
4649
node ./index.test.js
4750
if: ${{ env.TAG_NAME == '' }}
4851

.github/workflows/ci_bun.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,17 @@ jobs:
2020
- name: Setup Bun
2121
uses: oven-sh/setup-bun@v1
2222
with:
23-
bun-version: "1.0.1"
23+
bun-version: "1.2.0"
2424

2525
- name: Cache Dependencies
2626
uses: actions/cache@v4
2727
with:
2828
path: |
2929
~/.bun/install/cache
3030
~/work/better-sqlite3-wrapper/better-sqlite3-wrapper/bun.lockb
31-
key: ${{ runner.os }}-bun-cache-v1-${{ hashFiles('package.json') }}
31+
key: ${{ runner.os }}-bun-cache-v2-${{ hashFiles('package.json') }}
3232
restore-keys: |
33-
${{ runner.os }}-bun-cache-v1-
33+
${{ runner.os }}-bun-cache-v2-
3434
3535
- name: Run tests
3636
run: |

index.d.ts

Lines changed: 48 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -5,58 +5,64 @@
55
/// <reference types="node" />
66

77
type VariableArgFunction = (...params: any[]) => any;
8-
type ArgumentTypes<F extends VariableArgFunction> = F extends (...args: infer A) => any ? A : never;
8+
type ArgumentTypes<F extends VariableArgFunction> = F extends (
9+
...args: infer A
10+
) => any
11+
? A
12+
: never;
913

1014
declare namespace BetterSqlite3 {
15+
interface Statement<BindParameters extends any[]> {
16+
run(...params: BindParameters): undefined;
17+
get(...params: BindParameters): any;
18+
all(...params: BindParameters): any[];
19+
}
1120

12-
interface Statement<BindParameters extends any[]> {
13-
run(...params: BindParameters): undefined;
14-
get(...params: BindParameters): any;
15-
all(...params: BindParameters): any[];
16-
}
17-
18-
interface Transaction<F extends VariableArgFunction> {
19-
(...params: ArgumentTypes<F>): ReturnType<F>;
20-
deferred(...params: ArgumentTypes<F>): ReturnType<F>;
21-
immediate(...params: ArgumentTypes<F>): ReturnType<F>;
22-
exclusive(...params: ArgumentTypes<F>): ReturnType<F>;
23-
}
24-
25-
interface Database {
26-
prepare<BindParameters extends any[] | {} = any[]>(
27-
source: string,
28-
): BindParameters extends any[] ? Statement<BindParameters> : Statement<[BindParameters]>;
29-
transaction<F extends VariableArgFunction>(fn: F): Transaction<F>;
30-
close(): this;
31-
}
32-
33-
interface DatabaseConstructor {
34-
new (filename: string, options?: Database.Options): Database;
35-
prototype: Database;
36-
37-
SqliteError: typeof SqliteError;
38-
}
21+
interface Transaction<F extends VariableArgFunction> {
22+
(...params: ArgumentTypes<F>): ReturnType<F>;
23+
deferred(...params: ArgumentTypes<F>): ReturnType<F>;
24+
immediate(...params: ArgumentTypes<F>): ReturnType<F>;
25+
exclusive(...params: ArgumentTypes<F>): ReturnType<F>;
26+
}
27+
28+
interface Database {
29+
prepare<BindParameters extends any[] | {} = any[]>(
30+
source: string
31+
): BindParameters extends any[]
32+
? Statement<BindParameters>
33+
: Statement<[BindParameters]>;
34+
transaction<F extends VariableArgFunction>(fn: F): Transaction<F>;
35+
close(): this;
36+
}
37+
38+
interface DatabaseConstructor {
39+
new (filename: string, options?: Database.Options): Database;
40+
prototype: Database;
41+
42+
SqliteError: typeof SqliteError;
43+
}
3944
}
4045

4146
declare class SqliteError extends Error {
42-
name: string;
43-
message: string;
44-
code: string;
45-
constructor(message: string, code: string);
47+
name: string;
48+
message: string;
49+
code: string;
50+
constructor(message: string, code: string);
4651
}
4752

4853
declare namespace Database {
54+
interface Options {
55+
readonly?: boolean | undefined;
56+
}
4957

50-
interface Options {
51-
readonly?: boolean | undefined;
52-
}
53-
54-
type SqliteError = typeof SqliteError;
55-
type Statement<BindParameters extends any[] | {} = any[]> = BindParameters extends any[]
56-
? BetterSqlite3.Statement<BindParameters>
57-
: BetterSqlite3.Statement<[BindParameters]>;
58-
type Transaction<T extends VariableArgFunction = VariableArgFunction> = BetterSqlite3.Transaction<T>;
59-
type Database = BetterSqlite3.Database;
58+
type SqliteError = typeof SqliteError;
59+
type Statement<BindParameters extends any[] | {} = any[]> =
60+
BindParameters extends any[]
61+
? BetterSqlite3.Statement<BindParameters>
62+
: BetterSqlite3.Statement<[BindParameters]>;
63+
type Transaction<T extends VariableArgFunction = VariableArgFunction> =
64+
BetterSqlite3.Transaction<T>;
65+
type Database = BetterSqlite3.Database;
6066
}
6167

6268
declare const Database: BetterSqlite3.DatabaseConstructor;

index.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
const wrapper = function() {
2-
if (process['isBun']) {
3-
return require("bun:sqlite").Database
4-
}
1+
const wrapper = function () {
2+
if (process["isBun"]) {
3+
return require("bun:sqlite").Database;
4+
}
55

6-
return require("better-sqlite3")
7-
}
6+
return require("better-sqlite3");
7+
};
88

9-
module.exports = wrapper()
9+
module.exports = wrapper();

index.test.js

Lines changed: 69 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,80 @@
1-
const Database = require('./index')
2-
const os = require('os')
3-
const fs = require('fs')
4-
const path = require('path')
1+
const Database = require("./index");
2+
const os = require("os");
3+
const fs = require("fs");
4+
const path = require("path");
55

6-
const assert = require('assert').strict
7-
const it = function() {
8-
return process['isBun'] ? test : require('node:test').it
9-
}()
6+
const assert = require("assert").strict;
7+
const it = (function () {
8+
return process["isBun"] ? test : require("node:test").it;
9+
})();
1010

11-
it('should open in-memory database', () => {
12-
//when
13-
const db = new Database(":memory:")
14-
const query = db.prepare("select 'Hello world' as message;")
11+
it("should open in-memory database", () => {
12+
//when
13+
const db = new Database(":memory:");
14+
const query = db.prepare("select 'Hello world' as message;");
1515

16-
//then
17-
assert.deepEqual(query.get(), {message: 'Hello world'})
16+
//then
17+
assert.deepEqual(query.get(), { message: "Hello world" });
1818

19-
//when & then
20-
const results = query.all()
21-
assert.deepEqual(Array.isArray(results), true);
22-
assert.deepEqual(results, [{message: 'Hello world'}])
19+
//when & then
20+
const results = query.all();
21+
assert.deepEqual(Array.isArray(results), true);
22+
assert.deepEqual(results, [{ message: "Hello world" }]);
2323

24-
//when & then
25-
db.close()
26-
})
24+
//when & then
25+
db.close();
26+
});
2727

28-
it('should create file-based database', () => {
29-
//given
30-
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "better-sqlite3-wrapper-"))
31-
const file = path.join(tmpDir, "test.db")
32-
let db = new Database(file)
33-
const changesQuery = db.prepare("SELECT changes() AS changes;")
34-
const lastInsertRowIdQuery = db.prepare("SELECT last_insert_rowid() AS id;")
28+
it("should create file-based database", () => {
29+
//given
30+
const tmpDir = fs.mkdtempSync(
31+
path.join(os.tmpdir(), "better-sqlite3-wrapper-")
32+
);
33+
const file = path.join(tmpDir, "test.db");
34+
let db = new Database(file);
35+
const changesQuery = db.prepare("SELECT changes() AS changes;");
36+
const lastInsertRowIdQuery = db.prepare("SELECT last_insert_rowid() AS id;");
3537

36-
//when
37-
const [changes, lastInsertRowId] = db.transaction(() => {
38-
db.prepare(`
38+
//when
39+
const [changes, lastInsertRowId] = db.transaction(() => {
40+
db.prepare(
41+
`
3942
create table test(
4043
id integer primary key,
4144
name text not null
4245
);
43-
`).run()
44-
const insert = db.prepare("insert into test (name) values (?);")
45-
insert.run("test1")
46-
insert.run("test2")
47-
return [changesQuery.get().changes, lastInsertRowIdQuery.get().id]
48-
})()
49-
50-
//then
51-
assert.deepEqual(changes, 1)
52-
assert.deepEqual(lastInsertRowId, 2)
53-
db.close()
54-
assert.deepEqual(fs.existsSync(file), true)
55-
56-
//when
57-
db = new Database(file, { readonly: true })
58-
const results = db.prepare("select * from test order by id;").all()
59-
60-
//then
61-
assert.deepEqual(results, [{
62-
id: 1,
63-
name: "test1"
64-
}, {
65-
id: 2,
66-
name: "test2"
67-
}])
68-
69-
//cleanup
70-
db.close()
71-
fs.unlinkSync(file)
72-
fs.rmdirSync(tmpDir)
73-
})
46+
`
47+
).run();
48+
const insert = db.prepare("insert into test (name) values (?);");
49+
insert.run("test1");
50+
insert.run("test2");
51+
return [changesQuery.get().changes, lastInsertRowIdQuery.get().id];
52+
})();
53+
54+
//then
55+
assert.deepEqual(changes, 1);
56+
assert.deepEqual(lastInsertRowId, 2);
57+
db.close();
58+
assert.deepEqual(fs.existsSync(file), true);
59+
60+
//when
61+
db = new Database(file, { readonly: true });
62+
const results = db.prepare("select * from test order by id;").all();
63+
64+
//then
65+
assert.deepEqual(results, [
66+
{
67+
id: 1,
68+
name: "test1",
69+
},
70+
{
71+
id: 2,
72+
name: "test2",
73+
},
74+
]);
75+
76+
//cleanup
77+
db.close();
78+
fs.unlinkSync(file);
79+
fs.rmdirSync(tmpDir);
80+
});

package.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
},
88
"author": "viktor-podzigun",
99
"description": "Thin api wrapper around better-sqlite3 and bun:sqlite to allow cross- runtime/engine usage",
10+
"scripts": {
11+
"lint": "quick-lint-js ./*.js",
12+
"test": "bun test && node ./index.test.js",
13+
"format": "prettier **/*.js --write",
14+
"formatCheck": "prettier **/*.js --check"
15+
},
1016
"license": "MIT",
1117
"bugs": {
1218
"url": "https://github.com/farjs/better-sqlite3-wrapper/issues"
@@ -37,5 +43,9 @@
3743
},
3844
"optionalDependencies": {
3945
"better-sqlite3": "^11.5.0"
46+
},
47+
"devDependencies": {
48+
"prettier": "^2.8.8",
49+
"quick-lint-js": "^3.0.0"
4050
}
4151
}

0 commit comments

Comments
 (0)