agkan 1.2.0 → 1.4.0
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/cli/commands/task/update.d.ts.map +1 -1
- package/dist/cli/commands/task/update.js +57 -32
- package/dist/cli/commands/task/update.js.map +1 -1
- package/dist/db/adapters/sqlite-adapter.d.ts +23 -0
- package/dist/db/adapters/sqlite-adapter.d.ts.map +1 -0
- package/dist/db/adapters/sqlite-adapter.js +71 -0
- package/dist/db/adapters/sqlite-adapter.js.map +1 -0
- package/dist/db/connection.d.ts +6 -3
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +13 -3
- package/dist/db/connection.js.map +1 -1
- package/dist/db/schema.d.ts +3 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +3 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/db/storage-factory.d.ts +21 -0
- package/dist/db/storage-factory.d.ts.map +1 -0
- package/dist/db/storage-factory.js +25 -0
- package/dist/db/storage-factory.js.map +1 -0
- package/dist/db/types/storage.d.ts +350 -0
- package/dist/db/types/storage.d.ts.map +1 -0
- package/dist/db/types/storage.js +34 -0
- package/dist/db/types/storage.js.map +1 -0
- package/dist/services/MetadataService.d.ts +2 -2
- package/dist/services/MetadataService.d.ts.map +1 -1
- package/dist/services/MetadataService.js.map +1 -1
- package/dist/services/TagService.d.ts +2 -2
- package/dist/services/TagService.d.ts.map +1 -1
- package/dist/services/TagService.js +1 -1
- package/dist/services/TagService.js.map +1 -1
- package/dist/services/TaskBlockService.d.ts +2 -2
- package/dist/services/TaskBlockService.d.ts.map +1 -1
- package/dist/services/TaskBlockService.js.map +1 -1
- package/dist/services/TaskService.d.ts +2 -2
- package/dist/services/TaskService.d.ts.map +1 -1
- package/dist/services/TaskService.js.map +1 -1
- package/dist/services/TaskTagService.d.ts +2 -2
- package/dist/services/TaskTagService.d.ts.map +1 -1
- package/dist/services/TaskTagService.js.map +1 -1
- package/package.json +8 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/task/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/task/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwJ7D"}
|
|
@@ -12,6 +12,7 @@ const services_1 = require("../../../services");
|
|
|
12
12
|
const error_handler_1 = require("../../utils/error-handler");
|
|
13
13
|
const validators_1 = require("../../utils/validators");
|
|
14
14
|
const format_1 = require("../../../utils/format");
|
|
15
|
+
const output_formatter_1 = require("../../utils/output-formatter");
|
|
15
16
|
const add_helpers_1 = require("./add-helpers");
|
|
16
17
|
const SUPPORTED_FIELDS = ['status', 'title', 'body', 'author'];
|
|
17
18
|
function setupTaskUpdateCommand(program) {
|
|
@@ -25,23 +26,31 @@ function setupTaskUpdateCommand(program) {
|
|
|
25
26
|
.argument('<field>', 'Field to update (status, title, body, author)')
|
|
26
27
|
.argument('[value]', 'New value')
|
|
27
28
|
.option('--file <path>', 'Read body from file (only valid for body field)')
|
|
29
|
+
.option('--json', 'Output in JSON format')
|
|
28
30
|
.description('Update a task field')
|
|
29
31
|
.action(async (id, field, value, options) => {
|
|
32
|
+
const formatter = (0, output_formatter_1.createFormatter)(options);
|
|
30
33
|
try {
|
|
31
34
|
const taskService = new services_1.TaskService();
|
|
32
35
|
const taskId = (0, error_handler_1.validateNumberInput)(id);
|
|
33
36
|
if (taskId === null) {
|
|
34
|
-
|
|
37
|
+
formatter.error('Task ID must be a number', () => {
|
|
38
|
+
console.log(chalk_1.default.red('\nError: Task ID must be a number\n'));
|
|
39
|
+
});
|
|
35
40
|
process.exit(1);
|
|
36
41
|
}
|
|
37
42
|
if (!SUPPORTED_FIELDS.includes(field)) {
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
formatter.error(`Unsupported field: ${field}. Supported fields: ${SUPPORTED_FIELDS.join(', ')}`, () => {
|
|
44
|
+
console.log(chalk_1.default.red(`\nUnsupported field: ${field}`));
|
|
45
|
+
console.log(`Supported fields: ${SUPPORTED_FIELDS.join(', ')}\n`);
|
|
46
|
+
});
|
|
40
47
|
process.exit(1);
|
|
41
48
|
}
|
|
42
49
|
// Validate --file option usage
|
|
43
50
|
if (options.file && field !== 'body') {
|
|
44
|
-
|
|
51
|
+
formatter.error('--file option is only valid for the body field', () => {
|
|
52
|
+
console.log(chalk_1.default.red(`\nError: --file option is only valid for the body field\n`));
|
|
53
|
+
});
|
|
45
54
|
process.exit(1);
|
|
46
55
|
}
|
|
47
56
|
// Resolve the body value from file if --file is specified
|
|
@@ -52,21 +61,27 @@ function setupTaskUpdateCommand(program) {
|
|
|
52
61
|
}
|
|
53
62
|
catch (error) {
|
|
54
63
|
const msg = error instanceof Error ? error.message : 'Error reading file';
|
|
55
|
-
|
|
64
|
+
formatter.error(msg, () => {
|
|
65
|
+
console.log(chalk_1.default.red(`\n✗ Error: ${msg}\n`));
|
|
66
|
+
});
|
|
56
67
|
process.exit(1);
|
|
57
68
|
return;
|
|
58
69
|
}
|
|
59
70
|
}
|
|
60
71
|
// Require a value when not using --file
|
|
61
72
|
if (resolvedValue === undefined) {
|
|
62
|
-
|
|
73
|
+
formatter.error(`Missing value for field '${field}'. Provide a value argument or use --file for body.`, () => {
|
|
74
|
+
console.log(chalk_1.default.red(`\nError: Missing value for field '${field}'. Provide a value argument or use --file for body.\n`));
|
|
75
|
+
});
|
|
63
76
|
process.exit(1);
|
|
64
77
|
}
|
|
65
78
|
const updateInput = {};
|
|
66
79
|
if (field === 'status') {
|
|
67
80
|
if (!(0, validators_1.validateTaskStatus)(resolvedValue)) {
|
|
68
|
-
|
|
69
|
-
|
|
81
|
+
formatter.error(`Invalid status: ${resolvedValue}. Valid statuses: icebox, backlog, ready, in_progress, review, done, closed`, () => {
|
|
82
|
+
console.log(chalk_1.default.red(`\nInvalid status: ${resolvedValue}`));
|
|
83
|
+
console.log('Valid statuses: icebox, backlog, ready, in_progress, review, done, closed\n');
|
|
84
|
+
});
|
|
70
85
|
process.exit(1);
|
|
71
86
|
}
|
|
72
87
|
updateInput.status = resolvedValue;
|
|
@@ -81,39 +96,49 @@ function setupTaskUpdateCommand(program) {
|
|
|
81
96
|
...(updateInput.author !== undefined && { author: updateInput.author }),
|
|
82
97
|
});
|
|
83
98
|
if (!task) {
|
|
84
|
-
|
|
99
|
+
formatter.error(`Task with ID ${id} not found`, () => {
|
|
100
|
+
console.log(chalk_1.default.red(`\nTask with ID ${id} not found\n`));
|
|
101
|
+
});
|
|
85
102
|
process.exit(1);
|
|
86
103
|
}
|
|
87
|
-
const statusColor = (0, format_1.getStatusColor)(task.status);
|
|
88
|
-
console.log(chalk_1.default.green('\n✓ Task updated successfully\n'));
|
|
89
|
-
console.log(`${chalk_1.default.bold('ID:')} ${task.id}`);
|
|
90
|
-
console.log(`${chalk_1.default.bold('Title:')} ${task.title}`);
|
|
91
|
-
console.log(`${chalk_1.default.bold('Status:')} ${chalk_1.default[statusColor](task.status)}`);
|
|
92
|
-
console.log(`${chalk_1.default.bold('Updated:')} ${(0, format_1.formatDate)(task.updated_at)}\n`);
|
|
93
|
-
// Get and display task count by status
|
|
94
104
|
const statusCounts = taskService.getTaskCountByStatus();
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
{
|
|
103
|
-
{
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
console.log(
|
|
105
|
+
const statusColor = (0, format_1.getStatusColor)(task.status);
|
|
106
|
+
formatter.output(() => ({
|
|
107
|
+
success: true,
|
|
108
|
+
task,
|
|
109
|
+
counts: statusCounts,
|
|
110
|
+
}), () => {
|
|
111
|
+
console.log(chalk_1.default.green('\n✓ Task updated successfully\n'));
|
|
112
|
+
console.log(`${chalk_1.default.bold('ID:')} ${task.id}`);
|
|
113
|
+
console.log(`${chalk_1.default.bold('Title:')} ${task.title}`);
|
|
114
|
+
console.log(`${chalk_1.default.bold('Status:')} ${chalk_1.default[statusColor](task.status)}`);
|
|
115
|
+
console.log(`${chalk_1.default.bold('Updated:')} ${(0, format_1.formatDate)(task.updated_at)}\n`);
|
|
116
|
+
// Get and display task count by status
|
|
117
|
+
console.log(chalk_1.default.bold('Task Count by Status:'));
|
|
118
|
+
const statusEntries = [
|
|
119
|
+
{ status: 'icebox', count: statusCounts.icebox },
|
|
120
|
+
{ status: 'backlog', count: statusCounts.backlog },
|
|
121
|
+
{ status: 'ready', count: statusCounts.ready },
|
|
122
|
+
{ status: 'in_progress', count: statusCounts.in_progress },
|
|
123
|
+
{ status: 'review', count: statusCounts.review },
|
|
124
|
+
{ status: 'done', count: statusCounts.done },
|
|
125
|
+
{ status: 'closed', count: statusCounts.closed },
|
|
126
|
+
];
|
|
127
|
+
statusEntries.forEach(({ status, count }) => {
|
|
128
|
+
const color = (0, format_1.getStatusColor)(status);
|
|
129
|
+
console.log(` ${chalk_1.default[color](status)}: ${count}`);
|
|
130
|
+
});
|
|
131
|
+
console.log();
|
|
108
132
|
});
|
|
109
|
-
console.log();
|
|
110
133
|
}
|
|
111
134
|
catch (error) {
|
|
112
135
|
if (error instanceof Error) {
|
|
113
|
-
|
|
136
|
+
(0, error_handler_1.handleError)(error, options);
|
|
114
137
|
}
|
|
115
138
|
else {
|
|
116
|
-
|
|
139
|
+
formatter.error('An unknown error occurred', () => {
|
|
140
|
+
console.log(chalk_1.default.red('\n✗ An unknown error occurred\n'));
|
|
141
|
+
});
|
|
117
142
|
}
|
|
118
143
|
process.exit(1);
|
|
119
144
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/cli/commands/task/update.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/cli/commands/task/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Adapter
|
|
3
|
+
*
|
|
4
|
+
* Implements the StorageProvider interface for better-sqlite3.
|
|
5
|
+
* Wraps the native better-sqlite3 API to provide a consistent interface
|
|
6
|
+
* for the rest of the application.
|
|
7
|
+
*/
|
|
8
|
+
import Database from 'better-sqlite3';
|
|
9
|
+
import { StorageProvider, StorageStatement } from '../types/storage';
|
|
10
|
+
/**
|
|
11
|
+
* SQLite Adapter
|
|
12
|
+
* Implements StorageProvider interface for better-sqlite3 database
|
|
13
|
+
*/
|
|
14
|
+
export declare class SQLiteAdapter implements StorageProvider {
|
|
15
|
+
private db;
|
|
16
|
+
constructor(db: Database.Database);
|
|
17
|
+
prepare(sql: string): StorageStatement;
|
|
18
|
+
exec(sql: string): void;
|
|
19
|
+
pragma(pragma: string): Record<string, unknown> | Record<string, unknown>[] | void;
|
|
20
|
+
transaction(fn: () => void): () => void;
|
|
21
|
+
close(): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=sqlite-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-adapter.d.ts","sourceRoot":"","sources":["../../../src/db/adapters/sqlite-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAoB,MAAM,kBAAkB,CAAC;AA2CvF;;;GAGG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,OAAO,CAAC,EAAE,CAAoB;gBAElB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIjC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB;IAKtC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI;IAIlF,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAIvC,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SQLite Adapter
|
|
4
|
+
*
|
|
5
|
+
* Implements the StorageProvider interface for better-sqlite3.
|
|
6
|
+
* Wraps the native better-sqlite3 API to provide a consistent interface
|
|
7
|
+
* for the rest of the application.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SQLiteAdapter = void 0;
|
|
11
|
+
/**
|
|
12
|
+
* SQLite Statement Adapter
|
|
13
|
+
* Wraps better-sqlite3 Statement to implement StorageStatement interface
|
|
14
|
+
*/
|
|
15
|
+
class SQLiteStatement {
|
|
16
|
+
constructor(stmt) {
|
|
17
|
+
this.stmt = stmt;
|
|
18
|
+
}
|
|
19
|
+
bind(...params) {
|
|
20
|
+
// Cast to any to access bind method not in the type definition
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
|
+
this.stmt.bind(...params);
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
get(...params) {
|
|
26
|
+
if (params.length > 0) {
|
|
27
|
+
return this.stmt.get(...params);
|
|
28
|
+
}
|
|
29
|
+
return this.stmt.get();
|
|
30
|
+
}
|
|
31
|
+
all(...params) {
|
|
32
|
+
if (params.length > 0) {
|
|
33
|
+
return this.stmt.all(...params);
|
|
34
|
+
}
|
|
35
|
+
return this.stmt.all();
|
|
36
|
+
}
|
|
37
|
+
run(...params) {
|
|
38
|
+
const info = this.stmt.run(...params);
|
|
39
|
+
return {
|
|
40
|
+
changes: info.changes,
|
|
41
|
+
lastInsertRowid: info.lastInsertRowid,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* SQLite Adapter
|
|
47
|
+
* Implements StorageProvider interface for better-sqlite3 database
|
|
48
|
+
*/
|
|
49
|
+
class SQLiteAdapter {
|
|
50
|
+
constructor(db) {
|
|
51
|
+
this.db = db;
|
|
52
|
+
}
|
|
53
|
+
prepare(sql) {
|
|
54
|
+
const stmt = this.db.prepare(sql);
|
|
55
|
+
return new SQLiteStatement(stmt);
|
|
56
|
+
}
|
|
57
|
+
exec(sql) {
|
|
58
|
+
this.db.exec(sql);
|
|
59
|
+
}
|
|
60
|
+
pragma(pragma) {
|
|
61
|
+
return this.db.pragma(pragma);
|
|
62
|
+
}
|
|
63
|
+
transaction(fn) {
|
|
64
|
+
return this.db.transaction(fn);
|
|
65
|
+
}
|
|
66
|
+
close() {
|
|
67
|
+
this.db.close();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.SQLiteAdapter = SQLiteAdapter;
|
|
71
|
+
//# sourceMappingURL=sqlite-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-adapter.js","sourceRoot":"","sources":["../../../src/db/adapters/sqlite-adapter.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAKH;;;GAGG;AACH,MAAM,eAAe;IAGnB,YAAY,IAAwB;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,GAAG,MAAkC;QACxC,+DAA+D;QAC/D,8DAA8D;QAC7D,IAAI,CAAC,IAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,GAAG,MAAkC;QACvC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAwC,CAAC;QACzE,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAyC,CAAC;IAChE,CAAC;IAED,GAAG,CAAC,GAAG,MAAkC;QACvC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAA8B,CAAC;QAC/D,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAA+B,CAAC;IACtD,CAAC;IAED,GAAG,CAAC,GAAG,MAAkC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QACtC,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,CAAC;IACJ,CAAC;CACF;AAED;;;GAGG;AACH,MAAa,aAAa;IAGxB,YAAY,EAAqB;QAC/B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,GAAW;QACd,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,MAAc;QACnB,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAwD,CAAC;IACvF,CAAC;IAED,WAAW,CAAC,EAAc;QACxB,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF;AA3BD,sCA2BC"}
|
package/dist/db/connection.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { StorageProvider } from './types/storage';
|
|
2
2
|
/**
|
|
3
3
|
* Singleton management of database connection
|
|
4
4
|
*/
|
|
5
5
|
export declare class DatabaseConnection {
|
|
6
6
|
private static instance;
|
|
7
|
+
private static rawDatabase;
|
|
7
8
|
/**
|
|
8
9
|
* Get database instance (singleton)
|
|
10
|
+
* @returns StorageProvider instance
|
|
9
11
|
*/
|
|
10
|
-
static getInstance():
|
|
12
|
+
static getInstance(): StorageProvider;
|
|
11
13
|
/**
|
|
12
14
|
* Initialize the database
|
|
13
15
|
*/
|
|
@@ -19,6 +21,7 @@ export declare class DatabaseConnection {
|
|
|
19
21
|
}
|
|
20
22
|
/**
|
|
21
23
|
* Convenience function to get database instance
|
|
24
|
+
* @returns StorageProvider instance
|
|
22
25
|
*/
|
|
23
|
-
export declare function getDatabase():
|
|
26
|
+
export declare function getDatabase(): StorageProvider;
|
|
24
27
|
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgC;IACvD,OAAO,CAAC,MAAM,CAAC,WAAW,CAAkC;IAE5D;;;OAGG;WACW,WAAW,IAAI,eAAe;IAO5C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAuBzB;;OAEG;WACW,KAAK,IAAI,IAAI;CAU5B;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,eAAe,CAE7C"}
|
package/dist/db/connection.js
CHANGED
|
@@ -10,12 +10,14 @@ const path_1 = __importDefault(require("path"));
|
|
|
10
10
|
const fs_1 = __importDefault(require("fs"));
|
|
11
11
|
const config_1 = require("./config");
|
|
12
12
|
const schema_1 = require("./schema");
|
|
13
|
+
const storage_factory_1 = require("./storage-factory");
|
|
13
14
|
/**
|
|
14
15
|
* Singleton management of database connection
|
|
15
16
|
*/
|
|
16
17
|
class DatabaseConnection {
|
|
17
18
|
/**
|
|
18
19
|
* Get database instance (singleton)
|
|
20
|
+
* @returns StorageProvider instance
|
|
19
21
|
*/
|
|
20
22
|
static getInstance() {
|
|
21
23
|
if (!this.instance) {
|
|
@@ -35,11 +37,13 @@ class DatabaseConnection {
|
|
|
35
37
|
fs_1.default.mkdirSync(dataDir, { recursive: true });
|
|
36
38
|
}
|
|
37
39
|
// Create database connection
|
|
38
|
-
this.
|
|
40
|
+
this.rawDatabase = new better_sqlite3_1.default(dbPath);
|
|
39
41
|
// Enable foreign key constraints
|
|
40
|
-
this.
|
|
42
|
+
this.rawDatabase.pragma('foreign_keys = ON');
|
|
41
43
|
// Run migrations
|
|
42
|
-
(0, schema_1.runMigrations)(this.
|
|
44
|
+
(0, schema_1.runMigrations)(this.rawDatabase);
|
|
45
|
+
// Wrap with storage provider
|
|
46
|
+
this.instance = (0, storage_factory_1.getStorageProvider)(this.rawDatabase);
|
|
43
47
|
}
|
|
44
48
|
/**
|
|
45
49
|
* Close database connection
|
|
@@ -49,12 +53,18 @@ class DatabaseConnection {
|
|
|
49
53
|
this.instance.close();
|
|
50
54
|
this.instance = null;
|
|
51
55
|
}
|
|
56
|
+
if (this.rawDatabase) {
|
|
57
|
+
this.rawDatabase.close();
|
|
58
|
+
this.rawDatabase = null;
|
|
59
|
+
}
|
|
52
60
|
}
|
|
53
61
|
}
|
|
54
62
|
exports.DatabaseConnection = DatabaseConnection;
|
|
55
63
|
DatabaseConnection.instance = null;
|
|
64
|
+
DatabaseConnection.rawDatabase = null;
|
|
56
65
|
/**
|
|
57
66
|
* Convenience function to get database instance
|
|
67
|
+
* @returns StorageProvider instance
|
|
58
68
|
*/
|
|
59
69
|
function getDatabase() {
|
|
60
70
|
return DatabaseConnection.getInstance();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":";;;;;;AAuEA,kCAEC;AAzED,oEAAsC;AACtC,gDAAwB;AACxB,4CAAoB;AACpB,qCAA+C;AAC/C,qCAAyC;AAEzC,uDAAuD;AAEvD;;GAEG;AACH,MAAa,kBAAkB;IAI7B;;;OAGG;IACI,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,CAAC,QAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,UAAU;QACvB,4CAA4C;QAC5C,MAAM,MAAM,GAAG,IAAA,4BAAmB,GAAE,CAAC;QAErC,wBAAwB;QACxB,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,YAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;QAExC,iCAAiC;QACjC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAE7C,iBAAiB;QACjB,IAAA,sBAAa,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEhC,6BAA6B;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAA,oCAAkB,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK;QACjB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;;AArDH,gDAsDC;AArDgB,2BAAQ,GAA2B,IAAI,CAAC;AACxC,8BAAW,GAA6B,IAAI,CAAC;AAsD9D;;;GAGG;AACH,SAAgB,WAAW;IACzB,OAAO,kBAAkB,CAAC,WAAW,EAAE,CAAC;AAC1C,CAAC"}
|
package/dist/db/schema.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import Database from 'better-sqlite3';
|
|
2
2
|
/**
|
|
3
3
|
* Create database schema and run migrations
|
|
4
|
+
*
|
|
5
|
+
* Note: This function receives a raw better-sqlite3 Database instance
|
|
6
|
+
* because it needs to execute migrations before the StorageProvider is created.
|
|
4
7
|
*/
|
|
5
8
|
export declare function runMigrations(db: Database.Database): void;
|
|
6
9
|
//# sourceMappingURL=schema.d.ts.map
|
package/dist/db/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAgLzD"}
|
package/dist/db/schema.js
CHANGED
|
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.runMigrations = runMigrations;
|
|
4
4
|
/**
|
|
5
5
|
* Create database schema and run migrations
|
|
6
|
+
*
|
|
7
|
+
* Note: This function receives a raw better-sqlite3 Database instance
|
|
8
|
+
* because it needs to execute migrations before the StorageProvider is created.
|
|
6
9
|
*/
|
|
7
10
|
function runMigrations(db) {
|
|
8
11
|
// Create tasks table
|
package/dist/db/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":";;AAQA,sCAgLC;AAtLD;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,EAAqB;IACjD,qBAAqB;IACrB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;GAUP,CAAC,CAAC;IAEH,8BAA8B;IAC9B,EAAE,CAAC,IAAI,CAAC;;GAEP,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;;GAEP,CAAC,CAAC;IAEH,iEAAiE;IACjE,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,mEAAmE,CAAC,CAAC,GAAG,EAE3F,CAAC;IAEd,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;KAWP,CAAC,CAAC;QACH,EAAE,CAAC,IAAI,CACL,4GAA4G,CAC7G,CAAC;QACF,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5B,EAAE,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACjD,EAAE,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QACxE,EAAE,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QACxE,EAAE,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;IAChF,CAAC;IAED,iEAAiE;IACjE,MAAM,qBAAqB,GAAG,EAAE;SAC7B,OAAO,CAAC,mEAAmE,CAAC;SAC5E,GAAG,EAAiC,CAAC;IAExC,IAAI,qBAAqB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7E,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;KAWP,CAAC,CAAC;QACH,EAAE,CAAC,IAAI,CACL,4GAA4G,CAC7G,CAAC;QACF,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5B,EAAE,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACjD,EAAE,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QACxE,EAAE,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QACxE,EAAE,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;IAChF,CAAC;IAED,kDAAkD;IAClD,MAAM,YAAY,GAAG,EAAE;SACpB,OAAO,CACN;;;GAGH,CACE;SACA,GAAG,EAAuB,CAAC;IAE9B,IAAI,YAAY,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,IAAI,CAAC;;;KAGP,CAAC,CAAC;QACH,EAAE,CAAC,IAAI,CAAC;;KAEP,CAAC,CAAC;IACL,CAAC;IAED,2BAA2B;IAC3B,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;GAWP,CAAC,CAAC;IAEH,oCAAoC;IACpC,EAAE,CAAC,IAAI,CAAC;;GAEP,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;;GAEP,CAAC,CAAC;IAEH,oBAAoB;IACpB,EAAE,CAAC,IAAI,CAAC;;;;;;GAMP,CAAC,CAAC;IAEH,6BAA6B;IAC7B,EAAE,CAAC,IAAI,CAAC;;GAEP,CAAC,CAAC;IAEH,yBAAyB;IACzB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;GAUP,CAAC,CAAC;IAEH,kCAAkC;IAClC,EAAE,CAAC,IAAI,CAAC;;GAEP,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;;GAEP,CAAC,CAAC;IAEH,6BAA6B;IAC7B,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;GAWP,CAAC,CAAC;IAEH,sCAAsC;IACtC,EAAE,CAAC,IAAI,CAAC;;GAEP,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage Factory
|
|
3
|
+
*
|
|
4
|
+
* Provides a factory function to create storage provider instances.
|
|
5
|
+
* Currently supports SQLite, with infrastructure in place for future
|
|
6
|
+
* backends (e.g., Notion, PostgreSQL, etc.).
|
|
7
|
+
*/
|
|
8
|
+
import Database from 'better-sqlite3';
|
|
9
|
+
import { StorageProvider } from './types/storage';
|
|
10
|
+
/**
|
|
11
|
+
* Get a storage provider instance
|
|
12
|
+
*
|
|
13
|
+
* Currently always returns a SQLiteAdapter wrapping the provided
|
|
14
|
+
* better-sqlite3 database instance. In future, this could be extended
|
|
15
|
+
* to support multiple backend types.
|
|
16
|
+
*
|
|
17
|
+
* @param db - better-sqlite3 database instance
|
|
18
|
+
* @returns StorageProvider instance
|
|
19
|
+
*/
|
|
20
|
+
export declare function getStorageProvider(db: Database.Database): StorageProvider;
|
|
21
|
+
//# sourceMappingURL=storage-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-factory.d.ts","sourceRoot":"","sources":["../../src/db/storage-factory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,eAAe,CAEzE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Storage Factory
|
|
4
|
+
*
|
|
5
|
+
* Provides a factory function to create storage provider instances.
|
|
6
|
+
* Currently supports SQLite, with infrastructure in place for future
|
|
7
|
+
* backends (e.g., Notion, PostgreSQL, etc.).
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.getStorageProvider = getStorageProvider;
|
|
11
|
+
const sqlite_adapter_1 = require("./adapters/sqlite-adapter");
|
|
12
|
+
/**
|
|
13
|
+
* Get a storage provider instance
|
|
14
|
+
*
|
|
15
|
+
* Currently always returns a SQLiteAdapter wrapping the provided
|
|
16
|
+
* better-sqlite3 database instance. In future, this could be extended
|
|
17
|
+
* to support multiple backend types.
|
|
18
|
+
*
|
|
19
|
+
* @param db - better-sqlite3 database instance
|
|
20
|
+
* @returns StorageProvider instance
|
|
21
|
+
*/
|
|
22
|
+
function getStorageProvider(db) {
|
|
23
|
+
return new sqlite_adapter_1.SQLiteAdapter(db);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=storage-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-factory.js","sourceRoot":"","sources":["../../src/db/storage-factory.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAgBH,gDAEC;AAdD,8DAA0D;AAE1D;;;;;;;;;GASG;AACH,SAAgB,kBAAkB,CAAC,EAAqB;IACtD,OAAO,IAAI,8BAAa,CAAC,EAAE,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage Provider Interface Definition
|
|
3
|
+
*
|
|
4
|
+
* This interface defines the abstraction layer for database storage,
|
|
5
|
+
* allowing the application to support multiple storage backends
|
|
6
|
+
* (SQLite, Notion, PostgreSQL, etc.) without changing the application code.
|
|
7
|
+
*
|
|
8
|
+
* ## Design Pattern: Adapter Pattern
|
|
9
|
+
* This interface serves as the target interface that adapters must implement.
|
|
10
|
+
* Each backend (SQLite, PostgreSQL, etc.) implements this interface to provide
|
|
11
|
+
* a uniform API to the application layer.
|
|
12
|
+
*
|
|
13
|
+
* ## Implementation: SQLiteAdapter
|
|
14
|
+
* The current implementation uses SQLiteAdapter which wraps better-sqlite3
|
|
15
|
+
* and translates its API to match this interface.
|
|
16
|
+
*
|
|
17
|
+
* ## Usage
|
|
18
|
+
* Application code should depend on StorageProvider, not on specific implementations:
|
|
19
|
+
*
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const db: StorageProvider = getDatabase();
|
|
22
|
+
* const result = db.prepare('SELECT * FROM users WHERE id = ?').get(1);
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* ## Future Backends
|
|
26
|
+
* To add a new backend:
|
|
27
|
+
* 1. Create an adapter class implementing StorageProvider
|
|
28
|
+
* 2. Update storage-factory.ts to conditionally create the new adapter
|
|
29
|
+
* 3. Update DatabaseConnection to support backend configuration
|
|
30
|
+
* 4. Create comprehensive tests similar to sqlite-adapter.test.ts
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* Result of executing a statement that modifies data (INSERT, UPDATE, DELETE)
|
|
34
|
+
*
|
|
35
|
+
* This interface mirrors the better-sqlite3 Info object and provides
|
|
36
|
+
* information about how many rows were affected and what the last inserted ID is.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const result = db.prepare('INSERT INTO users (name) VALUES (?)').run('Alice');
|
|
41
|
+
* console.log(result.changes); // 1
|
|
42
|
+
* console.log(result.lastInsertRowid); // 1 (or higher if other rows exist)
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export interface StorageRunResult {
|
|
46
|
+
/** Number of rows affected by the operation */
|
|
47
|
+
changes: number;
|
|
48
|
+
/** ID of the last inserted row (for INSERT operations) */
|
|
49
|
+
lastInsertRowid: number | bigint;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Prepared statement interface
|
|
53
|
+
*
|
|
54
|
+
* Represents a compiled SQL statement that can be executed multiple times.
|
|
55
|
+
* Supports parameter binding, single-row queries, bulk queries, and modifications.
|
|
56
|
+
*
|
|
57
|
+
* ## Parameter Types
|
|
58
|
+
* Parameters can be:
|
|
59
|
+
* - `string`: Text values
|
|
60
|
+
* - `number`: Integer or floating-point values
|
|
61
|
+
* - `null`: NULL values in the database
|
|
62
|
+
*
|
|
63
|
+
* ## Execution Methods
|
|
64
|
+
* - `get()`: Returns a single row (SELECT queries, or NULL if no match)
|
|
65
|
+
* - `all()`: Returns all matching rows (SELECT queries)
|
|
66
|
+
* - `run()`: Executes modification statements (INSERT, UPDATE, DELETE)
|
|
67
|
+
*
|
|
68
|
+
* ## Method Chaining
|
|
69
|
+
* The `bind()` method returns this for method chaining:
|
|
70
|
+
*
|
|
71
|
+
* ```typescript
|
|
72
|
+
* const stmt = db.prepare('SELECT * FROM users WHERE id = ? AND status = ?');
|
|
73
|
+
* const user = stmt.bind(1, 'active').get();
|
|
74
|
+
* ```
|
|
75
|
+
*
|
|
76
|
+
* ## Parameter Binding
|
|
77
|
+
* Parameters can be provided:
|
|
78
|
+
* 1. Inline with get/all/run methods: `stmt.get(1, 'active')`
|
|
79
|
+
* 2. Via bind() method: `stmt.bind(1, 'active').get()`
|
|
80
|
+
* 3. Combined: `stmt.bind(1).get('active')`
|
|
81
|
+
*/
|
|
82
|
+
export interface StorageStatement {
|
|
83
|
+
/**
|
|
84
|
+
* Bind parameters to the statement
|
|
85
|
+
*
|
|
86
|
+
* Binds parameters that will be used in subsequent get/all/run calls.
|
|
87
|
+
* Parameters are matched to ? placeholders in the SQL statement in order.
|
|
88
|
+
*
|
|
89
|
+
* @param params - Parameters to bind (string, number, or null)
|
|
90
|
+
* @returns This statement for method chaining
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* const stmt = db.prepare('SELECT * FROM users WHERE id = ? AND status = ?');
|
|
95
|
+
* const user = stmt.bind(1, 'active').get();
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
bind(...params: (string | number | null)[]): StorageStatement;
|
|
99
|
+
/**
|
|
100
|
+
* Get a single row from the result set
|
|
101
|
+
*
|
|
102
|
+
* Can be called with parameters (which will bind them) or without
|
|
103
|
+
* (if parameters were previously bound via bind()).
|
|
104
|
+
*
|
|
105
|
+
* Returns the first matching row, or undefined if no rows match.
|
|
106
|
+
*
|
|
107
|
+
* @param params - Optional parameters to bind
|
|
108
|
+
* @returns The row as an object with column names as keys, or undefined if no row
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* // With inline parameters
|
|
113
|
+
* const user = db.prepare('SELECT * FROM users WHERE id = ?').get(1);
|
|
114
|
+
*
|
|
115
|
+
* // With bind() method
|
|
116
|
+
* const user = db.prepare('SELECT * FROM users WHERE id = ?')
|
|
117
|
+
* .bind(1)
|
|
118
|
+
* .get();
|
|
119
|
+
*
|
|
120
|
+
* // Check result
|
|
121
|
+
* if (user) {
|
|
122
|
+
* console.log(user.name); // Access column 'name'
|
|
123
|
+
* }
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
get(...params: (string | number | null)[]): Record<string, unknown> | undefined;
|
|
127
|
+
/**
|
|
128
|
+
* Get all rows from the result set
|
|
129
|
+
*
|
|
130
|
+
* Can be called with parameters (which will bind them) or without
|
|
131
|
+
* (if parameters were previously bound via bind()).
|
|
132
|
+
*
|
|
133
|
+
* Returns an array of all matching rows. Empty array if no rows match.
|
|
134
|
+
*
|
|
135
|
+
* @param params - Optional parameters to bind
|
|
136
|
+
* @returns Array of rows, each row is an object with column names as keys
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* // Get all users
|
|
141
|
+
* const users = db.prepare('SELECT * FROM users').all();
|
|
142
|
+
*
|
|
143
|
+
* // Get users with specific status
|
|
144
|
+
* const activeUsers = db.prepare('SELECT * FROM users WHERE status = ?')
|
|
145
|
+
* .all('active');
|
|
146
|
+
*
|
|
147
|
+
* // Process results
|
|
148
|
+
* users.forEach((user) => {
|
|
149
|
+
* console.log(user.name);
|
|
150
|
+
* });
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
all(...params: (string | number | null)[]): Record<string, unknown>[];
|
|
154
|
+
/**
|
|
155
|
+
* Execute a modification statement (INSERT, UPDATE, DELETE)
|
|
156
|
+
*
|
|
157
|
+
* Returns information about the operation including number of affected rows
|
|
158
|
+
* and the last inserted row ID (for INSERT operations).
|
|
159
|
+
*
|
|
160
|
+
* @param params - Parameters for the statement
|
|
161
|
+
* @returns Result with changes count and lastInsertRowid
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```typescript
|
|
165
|
+
* // INSERT
|
|
166
|
+
* const result = db.prepare('INSERT INTO users (name) VALUES (?)')
|
|
167
|
+
* .run('Alice');
|
|
168
|
+
* console.log(result.lastInsertRowid); // ID of new row
|
|
169
|
+
*
|
|
170
|
+
* // UPDATE
|
|
171
|
+
* const result = db.prepare('UPDATE users SET status = ? WHERE id = ?')
|
|
172
|
+
* .run('active', 1);
|
|
173
|
+
* console.log(result.changes); // Number of rows updated
|
|
174
|
+
*
|
|
175
|
+
* // DELETE
|
|
176
|
+
* const result = db.prepare('DELETE FROM users WHERE status = ?')
|
|
177
|
+
* .run('inactive');
|
|
178
|
+
* console.log(result.changes); // Number of rows deleted
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
run(...params: (string | number | null)[]): StorageRunResult;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Storage provider interface
|
|
185
|
+
*
|
|
186
|
+
* Defines the API for interacting with a storage backend. This is the main
|
|
187
|
+
* interface that application code should depend on. Each concrete implementation
|
|
188
|
+
* (SQLiteAdapter, PostgresAdapter, etc.) provides a backend-specific implementation.
|
|
189
|
+
*
|
|
190
|
+
* ## Architecture
|
|
191
|
+
* ```
|
|
192
|
+
* Application Code
|
|
193
|
+
* ↓
|
|
194
|
+
* StorageProvider (this interface)
|
|
195
|
+
* ↓
|
|
196
|
+
* SQLiteAdapter (or other implementations)
|
|
197
|
+
* ↓
|
|
198
|
+
* better-sqlite3 (or other database library)
|
|
199
|
+
* ```
|
|
200
|
+
*
|
|
201
|
+
* ## Getting a Provider
|
|
202
|
+
* Use the DatabaseConnection singleton:
|
|
203
|
+
*
|
|
204
|
+
* ```typescript
|
|
205
|
+
* import { getDatabase } from 'src/db/connection';
|
|
206
|
+
* const db: StorageProvider = getDatabase();
|
|
207
|
+
* ```
|
|
208
|
+
*
|
|
209
|
+
* ## Operations
|
|
210
|
+
* - **DDL**: Use exec() for schema operations
|
|
211
|
+
* - **DML**: Use prepare() → get/all/run for data operations
|
|
212
|
+
* - **Transactions**: Use transaction() to wrap operations
|
|
213
|
+
* - **Configuration**: Use pragma() for database settings
|
|
214
|
+
*/
|
|
215
|
+
export interface StorageProvider {
|
|
216
|
+
/**
|
|
217
|
+
* Prepare a SQL statement for execution
|
|
218
|
+
*
|
|
219
|
+
* Prepares a SQL statement and returns a StorageStatement that can be
|
|
220
|
+
* executed multiple times with different parameters.
|
|
221
|
+
*
|
|
222
|
+
* The statement is compiled once and can be executed many times,
|
|
223
|
+
* which is more efficient than re-parsing the SQL each time.
|
|
224
|
+
*
|
|
225
|
+
* @param sql - SQL statement to prepare (may include ? placeholders for parameters)
|
|
226
|
+
* @returns Prepared statement ready for execution
|
|
227
|
+
* @throws If the SQL syntax is invalid
|
|
228
|
+
*
|
|
229
|
+
* @example
|
|
230
|
+
* ```typescript
|
|
231
|
+
* const stmt = db.prepare('SELECT * FROM users WHERE id = ?');
|
|
232
|
+
* const user1 = stmt.get(1);
|
|
233
|
+
* const user2 = stmt.get(2); // Reuses the prepared statement
|
|
234
|
+
* ```
|
|
235
|
+
*/
|
|
236
|
+
prepare(sql: string): StorageStatement;
|
|
237
|
+
/**
|
|
238
|
+
* Execute SQL directly without returning a statement object
|
|
239
|
+
*
|
|
240
|
+
* Used for operations where you don't need parameter binding or repeated
|
|
241
|
+
* execution. Common uses:
|
|
242
|
+
* - Schema operations (CREATE TABLE, DROP TABLE, ALTER TABLE)
|
|
243
|
+
* - Multiple SQL statements in one call
|
|
244
|
+
* - One-time operations without parameter binding
|
|
245
|
+
*
|
|
246
|
+
* @param sql - SQL to execute (can be multiple statements separated by semicolons)
|
|
247
|
+
* @throws If the SQL syntax is invalid or execution fails
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* ```typescript
|
|
251
|
+
* // Create table
|
|
252
|
+
* db.exec('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)');
|
|
253
|
+
*
|
|
254
|
+
* // Create multiple tables
|
|
255
|
+
* db.exec(`
|
|
256
|
+
* CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
|
|
257
|
+
* CREATE TABLE posts (id INTEGER PRIMARY KEY, user_id INTEGER);
|
|
258
|
+
* `);
|
|
259
|
+
*
|
|
260
|
+
* // Insert data (not recommended for repeated operations)
|
|
261
|
+
* db.exec("INSERT INTO users (name) VALUES ('Alice')");
|
|
262
|
+
* ```
|
|
263
|
+
*/
|
|
264
|
+
exec(sql: string): void;
|
|
265
|
+
/**
|
|
266
|
+
* Execute a PRAGMA command
|
|
267
|
+
*
|
|
268
|
+
* PRAGMAs are SQLite-specific commands for configuration, introspection,
|
|
269
|
+
* and optimization. They can return configuration values or information about
|
|
270
|
+
* the database structure.
|
|
271
|
+
*
|
|
272
|
+
* @param pragma - PRAGMA command (e.g., "foreign_keys = ON", "journal_mode = WAL")
|
|
273
|
+
* @returns Result of the pragma:
|
|
274
|
+
* - Record: For single-value pragmas (e.g., journal_mode)
|
|
275
|
+
* - Record[]: For pragmas that return multiple rows (e.g., table_info)
|
|
276
|
+
* - void: For pragmas that don't return values
|
|
277
|
+
*
|
|
278
|
+
* @example
|
|
279
|
+
* ```typescript
|
|
280
|
+
* // Configuration pragmas
|
|
281
|
+
* db.pragma('foreign_keys = ON'); // Enable foreign key constraints
|
|
282
|
+
* db.pragma('journal_mode = WAL'); // Use write-ahead logging
|
|
283
|
+
* db.pragma('synchronous = NORMAL'); // Balance safety and performance
|
|
284
|
+
*
|
|
285
|
+
* // Query pragmas
|
|
286
|
+
* const mode = db.pragma('journal_mode');
|
|
287
|
+
* // Returns: [{ journal_mode: 'wal' }]
|
|
288
|
+
*
|
|
289
|
+
* const tableInfo = db.pragma('table_info(users)');
|
|
290
|
+
* // Returns: [
|
|
291
|
+
* // { cid: 0, name: 'id', type: 'INTEGER', ... },
|
|
292
|
+
* // { cid: 1, name: 'name', type: 'TEXT', ... }
|
|
293
|
+
* // ]
|
|
294
|
+
* ```
|
|
295
|
+
*/
|
|
296
|
+
pragma(pragma: string): Record<string, unknown> | Record<string, unknown>[] | void;
|
|
297
|
+
/**
|
|
298
|
+
* Create a database transaction
|
|
299
|
+
*
|
|
300
|
+
* Wraps a function in a database transaction. The function will be executed
|
|
301
|
+
* within a BEGIN/COMMIT block. If any error occurs during execution, the
|
|
302
|
+
* transaction is rolled back.
|
|
303
|
+
*
|
|
304
|
+
* This is useful for atomicity: either all operations succeed or none of them do.
|
|
305
|
+
*
|
|
306
|
+
* @param fn - Function to execute within the transaction
|
|
307
|
+
* @returns A callable function that executes the transaction
|
|
308
|
+
* @throws If an error occurs during transaction execution, the transaction is rolled back
|
|
309
|
+
*
|
|
310
|
+
* @example
|
|
311
|
+
* ```typescript
|
|
312
|
+
* // Create a transaction function
|
|
313
|
+
* const transferMoney = db.transaction(() => {
|
|
314
|
+
* db.prepare('UPDATE accounts SET balance = balance - ? WHERE id = ?')
|
|
315
|
+
* .run(100, 1); // Debit account 1
|
|
316
|
+
*
|
|
317
|
+
* db.prepare('UPDATE accounts SET balance = balance + ? WHERE id = ?')
|
|
318
|
+
* .run(100, 2); // Credit account 2
|
|
319
|
+
*
|
|
320
|
+
* // If any error occurs, both operations are rolled back
|
|
321
|
+
* });
|
|
322
|
+
*
|
|
323
|
+
* // Execute the transaction
|
|
324
|
+
* try {
|
|
325
|
+
* transferMoney();
|
|
326
|
+
* console.log('Transfer successful');
|
|
327
|
+
* } catch (error) {
|
|
328
|
+
* console.log('Transfer failed, changes rolled back');
|
|
329
|
+
* }
|
|
330
|
+
* ```
|
|
331
|
+
*/
|
|
332
|
+
transaction(fn: () => void): () => void;
|
|
333
|
+
/**
|
|
334
|
+
* Close the storage connection
|
|
335
|
+
*
|
|
336
|
+
* Closes the underlying database connection and releases any resources.
|
|
337
|
+
* After calling close(), the provider should not be used.
|
|
338
|
+
*
|
|
339
|
+
* This is typically called during application shutdown.
|
|
340
|
+
*
|
|
341
|
+
* @example
|
|
342
|
+
* ```typescript
|
|
343
|
+
* const db = getDatabase();
|
|
344
|
+
* // ... use db ...
|
|
345
|
+
* db.close(); // Clean up when done
|
|
346
|
+
* ```
|
|
347
|
+
*/
|
|
348
|
+
close(): void;
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/db/types/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;;;;;;;OAcG;IACH,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,gBAAgB,CAAC;IAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAEhF;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,gBAAgB,CAAC;CAC9D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;IAEnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAExC;;;;;;;;;;;;;;OAcG;IACH,KAAK,IAAI,IAAI,CAAC;CACf"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Storage Provider Interface Definition
|
|
4
|
+
*
|
|
5
|
+
* This interface defines the abstraction layer for database storage,
|
|
6
|
+
* allowing the application to support multiple storage backends
|
|
7
|
+
* (SQLite, Notion, PostgreSQL, etc.) without changing the application code.
|
|
8
|
+
*
|
|
9
|
+
* ## Design Pattern: Adapter Pattern
|
|
10
|
+
* This interface serves as the target interface that adapters must implement.
|
|
11
|
+
* Each backend (SQLite, PostgreSQL, etc.) implements this interface to provide
|
|
12
|
+
* a uniform API to the application layer.
|
|
13
|
+
*
|
|
14
|
+
* ## Implementation: SQLiteAdapter
|
|
15
|
+
* The current implementation uses SQLiteAdapter which wraps better-sqlite3
|
|
16
|
+
* and translates its API to match this interface.
|
|
17
|
+
*
|
|
18
|
+
* ## Usage
|
|
19
|
+
* Application code should depend on StorageProvider, not on specific implementations:
|
|
20
|
+
*
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const db: StorageProvider = getDatabase();
|
|
23
|
+
* const result = db.prepare('SELECT * FROM users WHERE id = ?').get(1);
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* ## Future Backends
|
|
27
|
+
* To add a new backend:
|
|
28
|
+
* 1. Create an adapter class implementing StorageProvider
|
|
29
|
+
* 2. Update storage-factory.ts to conditionally create the new adapter
|
|
30
|
+
* 3. Update DatabaseConnection to support backend configuration
|
|
31
|
+
* 4. Create comprehensive tests similar to sqlite-adapter.test.ts
|
|
32
|
+
*/
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/db/types/storage.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { TaskMetadata, CreateTaskMetadataInput } from '../models';
|
|
2
|
-
import
|
|
2
|
+
import { StorageProvider } from '../db/types/storage';
|
|
3
3
|
/**
|
|
4
4
|
* Metadata Service
|
|
5
5
|
* Manages creation, retrieval, update, and deletion of task metadata
|
|
6
6
|
*/
|
|
7
7
|
export declare class MetadataService {
|
|
8
8
|
private db;
|
|
9
|
-
constructor(db?:
|
|
9
|
+
constructor(db?: StorageProvider);
|
|
10
10
|
/**
|
|
11
11
|
* Set metadata for a task (create or update)
|
|
12
12
|
* @param input - Metadata creation input
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataService.d.ts","sourceRoot":"","sources":["../../src/services/MetadataService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,
|
|
1
|
+
{"version":3,"file":"MetadataService.d.ts","sourceRoot":"","sources":["../../src/services/MetadataService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAkB;gBAEhB,EAAE,CAAC,EAAE,eAAe;IAIhC;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,uBAAuB,GAAG,YAAY;IAgCzD;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAalE;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE;IAc5C;;;;;OAKG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAapD;;;;OAIG;IACH,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;IAsBlD;;;;OAIG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAY1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataService.js","sourceRoot":"","sources":["../../src/services/MetadataService.ts"],"names":[],"mappings":";;;AACA,iDAA+C;AAG/C;;;GAGG;AACH,MAAa,eAAe;IAG1B,YAAY,
|
|
1
|
+
{"version":3,"file":"MetadataService.js","sourceRoot":"","sources":["../../src/services/MetadataService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Tag, CreateTagInput, UpdateTagInput } from '../models';
|
|
2
|
-
import
|
|
2
|
+
import { StorageProvider } from '../db/types/storage';
|
|
3
3
|
/**
|
|
4
4
|
* Tag Service
|
|
5
5
|
* Manages creation, retrieval, update, and deletion of tags
|
|
6
6
|
*/
|
|
7
7
|
export declare class TagService {
|
|
8
8
|
private db;
|
|
9
|
-
constructor(db?:
|
|
9
|
+
constructor(db?: StorageProvider);
|
|
10
10
|
/**
|
|
11
11
|
* Create a new tag
|
|
12
12
|
* @param input - Tag creation input
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagService.d.ts","sourceRoot":"","sources":["../../src/services/TagService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhE,OAAO,
|
|
1
|
+
{"version":3,"file":"TagService.d.ts","sourceRoot":"","sources":["../../src/services/TagService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAAkB;gBAEhB,EAAE,CAAC,EAAE,eAAe;IAGhC;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,GAAG;IA4BrC;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAS9B;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAStC;;;OAGG;IACH,QAAQ,IAAI,GAAG,EAAE;IASjB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,GAAG,GAAG,IAAI;IAyCxD;;;;OAIG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAQ/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagService.js","sourceRoot":"","sources":["../../src/services/TagService.ts"],"names":[],"mappings":";;;AACA,iDAA+C;AAC/C,gEAA6D;AAG7D;;;GAGG;AACH,MAAa,UAAU;IAGrB,YAAY,
|
|
1
|
+
{"version":3,"file":"TagService.js","sourceRoot":"","sources":["../../src/services/TagService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TaskBlock, CreateTaskBlockInput } from '../models';
|
|
2
2
|
import { TaskService } from './TaskService';
|
|
3
|
-
import
|
|
3
|
+
import { StorageProvider } from '../db/types/storage';
|
|
4
4
|
/**
|
|
5
5
|
* Task Block Service
|
|
6
6
|
* Manages blocking relationships between tasks
|
|
@@ -8,7 +8,7 @@ import Database from 'better-sqlite3';
|
|
|
8
8
|
export declare class TaskBlockService {
|
|
9
9
|
private db;
|
|
10
10
|
private taskService;
|
|
11
|
-
constructor(db?:
|
|
11
|
+
constructor(db?: StorageProvider, taskService?: TaskService);
|
|
12
12
|
/**
|
|
13
13
|
* Add a blocking relationship between tasks
|
|
14
14
|
* @param input - Creation input for the blocking relationship
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskBlockService.d.ts","sourceRoot":"","sources":["../../src/services/TaskBlockService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"TaskBlockService.d.ts","sourceRoot":"","sources":["../../src/services/TaskBlockService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAAkB;IAC5B,OAAO,CAAC,WAAW,CAAc;gBAErB,EAAE,CAAC,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,WAAW;IAK3D;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS;IAuChD;;;;;OAKG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAa1D;;;;;OAKG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAY9C;;;;;OAKG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAY9C;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;CAiB9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskBlockService.js","sourceRoot":"","sources":["../../src/services/TaskBlockService.ts"],"names":[],"mappings":";;;AACA,iDAA+C;AAC/C,+CAA4C;AAG5C;;;GAGG;AACH,MAAa,gBAAgB;IAI3B,YAAY,
|
|
1
|
+
{"version":3,"file":"TaskBlockService.js","sourceRoot":"","sources":["../../src/services/TaskBlockService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Task, CreateTaskInput, UpdateTaskInput, TaskStatus } from '../models';
|
|
2
|
-
import
|
|
2
|
+
import { StorageProvider } from '../db/types/storage';
|
|
3
3
|
/**
|
|
4
4
|
* Task Service
|
|
5
5
|
* Provides CRUD operations for tasks
|
|
6
6
|
*/
|
|
7
7
|
export declare class TaskService {
|
|
8
8
|
private db;
|
|
9
|
-
constructor(db?:
|
|
9
|
+
constructor(db?: StorageProvider);
|
|
10
10
|
/**
|
|
11
11
|
* Create a new task
|
|
12
12
|
* @param input - Task creation input
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskService.d.ts","sourceRoot":"","sources":["../../src/services/TaskService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAI/E,OAAO,
|
|
1
|
+
{"version":3,"file":"TaskService.d.ts","sourceRoot":"","sources":["../../src/services/TaskService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAI/E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAkB;gBAEhB,EAAE,CAAC,EAAE,eAAe;IAIhC;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAqCxC;;;;OAIG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAShC;;;;OAIG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,UAAU,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,EAAE;IAkCxF;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAqCxB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IA8B3D;;;;OAIG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAc/B;;;OAGG;IACH,oBAAoB,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC;IA8BlD;;;;;OAKG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,EAAE;IAiBjE;;;;OAIG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE;IAMvC;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAQ1C;;;;OAIG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE;IAwB5C;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;CAuBzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskService.js","sourceRoot":"","sources":["../../src/services/TaskService.ts"],"names":[],"mappings":";;;AACA,iDAA+C;AAC/C,gEAAuF;AACvF,4DAA2D;AAG3D;;;GAGG;AACH,MAAa,WAAW;IAGtB,YAAY,
|
|
1
|
+
{"version":3,"file":"TaskService.js","sourceRoot":"","sources":["../../src/services/TaskService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TaskTag, CreateTaskTagInput, Tag, Task } from '../models';
|
|
2
2
|
import { TaskService } from './TaskService';
|
|
3
3
|
import { TagService } from './TagService';
|
|
4
|
-
import
|
|
4
|
+
import { StorageProvider } from '../db/types/storage';
|
|
5
5
|
/**
|
|
6
6
|
* Task Tag Service
|
|
7
7
|
* Manages associations between tasks and tags
|
|
@@ -10,7 +10,7 @@ export declare class TaskTagService {
|
|
|
10
10
|
private db;
|
|
11
11
|
private taskService;
|
|
12
12
|
private tagService;
|
|
13
|
-
constructor(db?:
|
|
13
|
+
constructor(db?: StorageProvider, taskService?: TaskService, tagService?: TagService);
|
|
14
14
|
/**
|
|
15
15
|
* Add tag to task
|
|
16
16
|
* @param input - Task tag creation input
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskTagService.d.ts","sourceRoot":"","sources":["../../src/services/TaskTagService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"TaskTagService.d.ts","sourceRoot":"","sources":["../../src/services/TaskTagService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAkB;IAC5B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAa;gBAEnB,EAAE,CAAC,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU;IAMpF;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO;IAiChD;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAazD;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAY9C;;;;OAIG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAa1C;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE;IAcrC;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAazC;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE;IAcrC;;;;OAIG;IACH,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;CA8BrC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskTagService.js","sourceRoot":"","sources":["../../src/services/TaskTagService.ts"],"names":[],"mappings":";;;AACA,iDAA+C;AAC/C,+CAA4C;AAC5C,6CAA0C;AAG1C;;;GAGG;AACH,MAAa,cAAc;IAKzB,YAAY,
|
|
1
|
+
{"version":3,"file":"TaskTagService.js","sourceRoot":"","sources":["../../src/services/TaskTagService.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agkan",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "TypeScript-based CLI task management tool with SQLite storage",
|
|
5
5
|
"main": "dist/cli/index.js",
|
|
6
6
|
"bin": {
|
|
7
|
-
"agkan": "
|
|
7
|
+
"agkan": "bin/agkan"
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
10
|
"dist",
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"dev": "tsc --watch",
|
|
16
16
|
"start": "node dist/cli/index.js",
|
|
17
17
|
"test": "vitest",
|
|
18
|
+
"test:all": "npm install && npm run build && npm run type-check && npm run lint && vitest run && npm run test:e2e",
|
|
18
19
|
"test:errors": "vitest run --reporter=./tests/reporters/error-only.ts",
|
|
19
20
|
"test:e2e": "./test-e2e.sh",
|
|
20
21
|
"lint": "eslint src tests --ext .ts",
|
|
@@ -49,20 +50,20 @@
|
|
|
49
50
|
"dependencies": {
|
|
50
51
|
"better-sqlite3": "^11.7.0",
|
|
51
52
|
"chalk": "^4.1.2",
|
|
52
|
-
"commander": "^
|
|
53
|
+
"commander": "^14.0.3",
|
|
53
54
|
"js-yaml": "^4.1.1"
|
|
54
55
|
},
|
|
55
56
|
"devDependencies": {
|
|
56
57
|
"@types/better-sqlite3": "^7.6.12",
|
|
57
58
|
"@types/js-yaml": "^4.0.9",
|
|
58
59
|
"@types/node": "^22.10.5",
|
|
59
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
60
|
-
"@typescript-eslint/parser": "^8.
|
|
60
|
+
"@typescript-eslint/eslint-plugin": "^8.56.0",
|
|
61
|
+
"@typescript-eslint/parser": "^8.56.0",
|
|
61
62
|
"@vitest/coverage-v8": "^4.0.18",
|
|
62
|
-
"eslint": "^
|
|
63
|
+
"eslint": "^10.0.1",
|
|
63
64
|
"eslint-config-prettier": "^10.1.8",
|
|
64
65
|
"husky": "^9.1.7",
|
|
65
|
-
"lint-staged": "^
|
|
66
|
+
"lint-staged": "^16.2.7",
|
|
66
67
|
"prettier": "^3.8.1",
|
|
67
68
|
"typescript": "^5.7.3",
|
|
68
69
|
"vitest": "^4.0.18"
|