donobu 5.6.1 → 5.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/persistence/DonobuSqliteDb.d.ts +7 -0
- package/dist/esm/persistence/DonobuSqliteDb.d.ts.map +1 -1
- package/dist/esm/persistence/DonobuSqliteDb.js +40 -16
- package/dist/esm/persistence/DonobuSqliteDb.js.map +1 -1
- package/dist/persistence/DonobuSqliteDb.d.ts +7 -0
- package/dist/persistence/DonobuSqliteDb.d.ts.map +1 -1
- package/dist/persistence/DonobuSqliteDb.js +40 -16
- package/dist/persistence/DonobuSqliteDb.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,6 +2,13 @@ import Database from 'better-sqlite3';
|
|
|
2
2
|
/**
|
|
3
3
|
* Returns the singleton SQLite database instance.
|
|
4
4
|
* Creates the database on first call and initializes it with proper settings.
|
|
5
|
+
*
|
|
6
|
+
* When multiple processes (e.g. Playwright workers) start concurrently, they
|
|
7
|
+
* can all race into this function at the same time. SQLite's built-in busy
|
|
8
|
+
* timeout is insufficient here because `PRAGMA journal_mode = WAL` requires
|
|
9
|
+
* an exclusive file lock that is not retryable via the busy handler. We use
|
|
10
|
+
* a cross-process file lock (`proper-lockfile`) to serialize initialization
|
|
11
|
+
* so only one process creates/configures the database at a time.
|
|
5
12
|
*/
|
|
6
13
|
export declare function getDonobuSqliteDatabase(): Promise<Database.Database>;
|
|
7
14
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DonobuSqliteDb.d.ts","sourceRoot":"","sources":["../../../src/persistence/DonobuSqliteDb.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"DonobuSqliteDb.d.ts","sourceRoot":"","sources":["../../../src/persistence/DonobuSqliteDb.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAictC;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CA6C1E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAKhD"}
|
|
@@ -41,6 +41,7 @@ exports.closeDonobuSqliteDatabase = closeDonobuSqliteDatabase;
|
|
|
41
41
|
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
42
42
|
const fs = __importStar(require("fs/promises"));
|
|
43
43
|
const path_1 = __importDefault(require("path"));
|
|
44
|
+
const LockFile = __importStar(require("proper-lockfile"));
|
|
44
45
|
const Logger_1 = require("../utils/Logger");
|
|
45
46
|
const MiscUtils_1 = require("../utils/MiscUtils");
|
|
46
47
|
let instance = null;
|
|
@@ -418,6 +419,13 @@ function applyMigrations(db) {
|
|
|
418
419
|
/**
|
|
419
420
|
* Returns the singleton SQLite database instance.
|
|
420
421
|
* Creates the database on first call and initializes it with proper settings.
|
|
422
|
+
*
|
|
423
|
+
* When multiple processes (e.g. Playwright workers) start concurrently, they
|
|
424
|
+
* can all race into this function at the same time. SQLite's built-in busy
|
|
425
|
+
* timeout is insufficient here because `PRAGMA journal_mode = WAL` requires
|
|
426
|
+
* an exclusive file lock that is not retryable via the busy handler. We use
|
|
427
|
+
* a cross-process file lock (`proper-lockfile`) to serialize initialization
|
|
428
|
+
* so only one process creates/configures the database at a time.
|
|
421
429
|
*/
|
|
422
430
|
async function getDonobuSqliteDatabase() {
|
|
423
431
|
if (instance) {
|
|
@@ -426,22 +434,38 @@ async function getDonobuSqliteDatabase() {
|
|
|
426
434
|
const dbDirectory = MiscUtils_1.MiscUtils.baseWorkingDirectory();
|
|
427
435
|
await fs.mkdir(dbDirectory, { recursive: true });
|
|
428
436
|
const dbFilepath = path_1.default.join(dbDirectory, 'database.sqlite');
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
//
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
437
|
+
const lockFilepath = path_1.default.join(dbDirectory, 'database.sqlite.init');
|
|
438
|
+
// Create the lock target file if it doesn't exist — proper-lockfile requires
|
|
439
|
+
// the file to exist before locking.
|
|
440
|
+
await fs.writeFile(lockFilepath, '', { flag: 'a' });
|
|
441
|
+
const release = await LockFile.lock(lockFilepath, {
|
|
442
|
+
retries: {
|
|
443
|
+
retries: 10,
|
|
444
|
+
minTimeout: 100,
|
|
445
|
+
maxTimeout: 2000,
|
|
446
|
+
},
|
|
447
|
+
});
|
|
448
|
+
try {
|
|
449
|
+
// Another process may have completed initialization while we waited for
|
|
450
|
+
// the lock, so re-check the singleton.
|
|
451
|
+
if (instance) {
|
|
452
|
+
return instance;
|
|
453
|
+
}
|
|
454
|
+
// Initialize database.
|
|
455
|
+
const donobuSqliteDb = new better_sqlite3_1.default(dbFilepath);
|
|
456
|
+
// Set up database configuration.
|
|
457
|
+
donobuSqliteDb.pragma('journal_mode = WAL');
|
|
458
|
+
donobuSqliteDb.pragma('foreign_keys = ON');
|
|
459
|
+
// Set up tables.
|
|
460
|
+
initMigrationsTable(donobuSqliteDb);
|
|
461
|
+
applyMigrations(donobuSqliteDb);
|
|
462
|
+
// Update global database handle.
|
|
463
|
+
instance = donobuSqliteDb;
|
|
464
|
+
return instance;
|
|
465
|
+
}
|
|
466
|
+
finally {
|
|
467
|
+
await release();
|
|
468
|
+
}
|
|
445
469
|
}
|
|
446
470
|
/**
|
|
447
471
|
* Closes the database connection. Should be called during application shutdown.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DonobuSqliteDb.js","sourceRoot":"","sources":["../../../src/persistence/DonobuSqliteDb.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"DonobuSqliteDb.js","sourceRoot":"","sources":["../../../src/persistence/DonobuSqliteDb.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,13 @@ import Database from 'better-sqlite3';
|
|
|
2
2
|
/**
|
|
3
3
|
* Returns the singleton SQLite database instance.
|
|
4
4
|
* Creates the database on first call and initializes it with proper settings.
|
|
5
|
+
*
|
|
6
|
+
* When multiple processes (e.g. Playwright workers) start concurrently, they
|
|
7
|
+
* can all race into this function at the same time. SQLite's built-in busy
|
|
8
|
+
* timeout is insufficient here because `PRAGMA journal_mode = WAL` requires
|
|
9
|
+
* an exclusive file lock that is not retryable via the busy handler. We use
|
|
10
|
+
* a cross-process file lock (`proper-lockfile`) to serialize initialization
|
|
11
|
+
* so only one process creates/configures the database at a time.
|
|
5
12
|
*/
|
|
6
13
|
export declare function getDonobuSqliteDatabase(): Promise<Database.Database>;
|
|
7
14
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DonobuSqliteDb.d.ts","sourceRoot":"","sources":["../../src/persistence/DonobuSqliteDb.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"DonobuSqliteDb.d.ts","sourceRoot":"","sources":["../../src/persistence/DonobuSqliteDb.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAictC;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CA6C1E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAKhD"}
|
|
@@ -41,6 +41,7 @@ exports.closeDonobuSqliteDatabase = closeDonobuSqliteDatabase;
|
|
|
41
41
|
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
42
42
|
const fs = __importStar(require("fs/promises"));
|
|
43
43
|
const path_1 = __importDefault(require("path"));
|
|
44
|
+
const LockFile = __importStar(require("proper-lockfile"));
|
|
44
45
|
const Logger_1 = require("../utils/Logger");
|
|
45
46
|
const MiscUtils_1 = require("../utils/MiscUtils");
|
|
46
47
|
let instance = null;
|
|
@@ -418,6 +419,13 @@ function applyMigrations(db) {
|
|
|
418
419
|
/**
|
|
419
420
|
* Returns the singleton SQLite database instance.
|
|
420
421
|
* Creates the database on first call and initializes it with proper settings.
|
|
422
|
+
*
|
|
423
|
+
* When multiple processes (e.g. Playwright workers) start concurrently, they
|
|
424
|
+
* can all race into this function at the same time. SQLite's built-in busy
|
|
425
|
+
* timeout is insufficient here because `PRAGMA journal_mode = WAL` requires
|
|
426
|
+
* an exclusive file lock that is not retryable via the busy handler. We use
|
|
427
|
+
* a cross-process file lock (`proper-lockfile`) to serialize initialization
|
|
428
|
+
* so only one process creates/configures the database at a time.
|
|
421
429
|
*/
|
|
422
430
|
async function getDonobuSqliteDatabase() {
|
|
423
431
|
if (instance) {
|
|
@@ -426,22 +434,38 @@ async function getDonobuSqliteDatabase() {
|
|
|
426
434
|
const dbDirectory = MiscUtils_1.MiscUtils.baseWorkingDirectory();
|
|
427
435
|
await fs.mkdir(dbDirectory, { recursive: true });
|
|
428
436
|
const dbFilepath = path_1.default.join(dbDirectory, 'database.sqlite');
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
//
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
437
|
+
const lockFilepath = path_1.default.join(dbDirectory, 'database.sqlite.init');
|
|
438
|
+
// Create the lock target file if it doesn't exist — proper-lockfile requires
|
|
439
|
+
// the file to exist before locking.
|
|
440
|
+
await fs.writeFile(lockFilepath, '', { flag: 'a' });
|
|
441
|
+
const release = await LockFile.lock(lockFilepath, {
|
|
442
|
+
retries: {
|
|
443
|
+
retries: 10,
|
|
444
|
+
minTimeout: 100,
|
|
445
|
+
maxTimeout: 2000,
|
|
446
|
+
},
|
|
447
|
+
});
|
|
448
|
+
try {
|
|
449
|
+
// Another process may have completed initialization while we waited for
|
|
450
|
+
// the lock, so re-check the singleton.
|
|
451
|
+
if (instance) {
|
|
452
|
+
return instance;
|
|
453
|
+
}
|
|
454
|
+
// Initialize database.
|
|
455
|
+
const donobuSqliteDb = new better_sqlite3_1.default(dbFilepath);
|
|
456
|
+
// Set up database configuration.
|
|
457
|
+
donobuSqliteDb.pragma('journal_mode = WAL');
|
|
458
|
+
donobuSqliteDb.pragma('foreign_keys = ON');
|
|
459
|
+
// Set up tables.
|
|
460
|
+
initMigrationsTable(donobuSqliteDb);
|
|
461
|
+
applyMigrations(donobuSqliteDb);
|
|
462
|
+
// Update global database handle.
|
|
463
|
+
instance = donobuSqliteDb;
|
|
464
|
+
return instance;
|
|
465
|
+
}
|
|
466
|
+
finally {
|
|
467
|
+
await release();
|
|
468
|
+
}
|
|
445
469
|
}
|
|
446
470
|
/**
|
|
447
471
|
* Closes the database connection. Should be called during application shutdown.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DonobuSqliteDb.js","sourceRoot":"","sources":["../../src/persistence/DonobuSqliteDb.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"DonobuSqliteDb.js","sourceRoot":"","sources":["../../src/persistence/DonobuSqliteDb.ts"],"names":[],"mappings":"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"}
|