@mauryasumit/driftdb 2.0.0 → 2.0.1

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.
@@ -17,8 +17,11 @@ export declare class Repository<T extends BaseRecord> {
17
17
  private readonly tableName;
18
18
  private readonly schema;
19
19
  private readonly changeLog;
20
+ private readonly booleanColumns;
20
21
  constructor(db: Database.Database, tableName: string, schema: ModelSchema, changeLog: ChangeLog | null);
21
22
  private initTable;
23
+ private serialize;
24
+ private deserializeRow;
22
25
  create(data: Partial<Omit<T, 'id' | 'createdAt' | 'updatedAt'>>): Promise<T>;
23
26
  findById(id: string): Promise<T | null>;
24
27
  findOne(where: WhereClause<T>): Promise<T | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/orm/repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/orm/repository.ts"],"names":[],"mappings":"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"}
@@ -10,12 +10,37 @@ class Repository {
10
10
  this.tableName = tableName;
11
11
  this.schema = (0, schema_js_1.normalizeSchema)(schema);
12
12
  this.changeLog = changeLog;
13
+ this.booleanColumns = new Set(Object.entries(this.schema)
14
+ .filter(([, def]) => def.type === 'BOOLEAN')
15
+ .map(([key]) => key));
13
16
  this.initTable();
14
17
  }
15
18
  initTable() {
16
19
  const sql = (0, schema_js_1.buildCreateTableSQL)(this.tableName, this.schema);
17
20
  this.db.exec(sql);
18
21
  }
22
+ serialize(key, value) {
23
+ if (value === undefined || value === null)
24
+ return null;
25
+ if (this.booleanColumns.has(key) && typeof value === 'boolean') {
26
+ return value ? 1 : 0;
27
+ }
28
+ if (typeof value === 'boolean')
29
+ return value ? 1 : 0;
30
+ if (typeof value === 'object' && !Buffer.isBuffer(value)) {
31
+ return JSON.stringify(value);
32
+ }
33
+ return value;
34
+ }
35
+ deserializeRow(row) {
36
+ const out = { ...row };
37
+ for (const col of this.booleanColumns) {
38
+ if (col in out) {
39
+ out[col] = out[col] === 1 || out[col] === true;
40
+ }
41
+ }
42
+ return out;
43
+ }
19
44
  async create(data) {
20
45
  const now = Date.now();
21
46
  const id = (0, id_js_1.generateId)();
@@ -23,27 +48,28 @@ class Repository {
23
48
  const keys = Object.keys(record);
24
49
  const placeholders = keys.map(() => '?').join(', ');
25
50
  const cols = keys.map((k) => `"${k}"`).join(', ');
26
- const values = keys.map((k) => record[k]);
51
+ const values = keys.map((k) => this.serialize(k, record[k]));
27
52
  this.db
28
53
  .prepare(`INSERT INTO "${this.tableName}" (${cols}) VALUES (${placeholders})`)
29
54
  .run(...values);
30
55
  this.changeLog?.append(this.tableName, 'insert', record);
31
- return record;
56
+ return this.deserializeRow(record);
32
57
  }
33
58
  async findById(id) {
34
59
  const row = this.db
35
60
  .prepare(`SELECT * FROM "${this.tableName}" WHERE id = ?`)
36
61
  .get(id);
37
- return row ?? null;
62
+ return row ? this.deserializeRow(row) : null;
38
63
  }
39
64
  async findOne(where) {
40
65
  const { sql, params } = (0, query_builder_js_1.buildSelectSQL)(this.tableName, { where, limit: 1 });
41
66
  const row = this.db.prepare(sql).get(...params);
42
- return row ?? null;
67
+ return row ? this.deserializeRow(row) : null;
43
68
  }
44
69
  async find(options = {}) {
45
70
  const { sql, params } = (0, query_builder_js_1.buildSelectSQL)(this.tableName, options);
46
- return this.db.prepare(sql).all(...params);
71
+ const rows = this.db.prepare(sql).all(...params);
72
+ return rows.map((r) => this.deserializeRow(r));
47
73
  }
48
74
  async filter(where = {}, options = {}) {
49
75
  return this.find({ where, ...options });
@@ -54,7 +80,7 @@ class Repository {
54
80
  const setCols = Object.keys(updateData)
55
81
  .map((k) => `"${k}" = ?`)
56
82
  .join(', ');
57
- const setValues = Object.values(updateData);
83
+ const setValues = Object.entries(updateData).map(([k, v]) => this.serialize(k, v));
58
84
  const { sql: whereSQL, params: whereParams } = (0, query_builder_js_1.buildWhereClause)(where);
59
85
  const sql = `UPDATE "${this.tableName}" SET ${setCols} ${whereSQL}`;
60
86
  const result = this.db.prepare(sql).run(...setValues, ...whereParams);
@@ -1 +1 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/orm/repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/orm/repository.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mauryasumit/driftdb",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "Local-first SQLite database with automatic S3 sync — offline-first, no infrastructure required",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -17,11 +17,14 @@ export type RecordOf<S extends ModelSchema> = BaseRecord & {
17
17
  : string;
18
18
  };
19
19
 
20
+ type SqliteBindable = string | number | bigint | Buffer | null;
21
+
20
22
  export class Repository<T extends BaseRecord> {
21
23
  private readonly db: Database.Database;
22
24
  private readonly tableName: string;
23
25
  private readonly schema: ModelSchema;
24
26
  private readonly changeLog: ChangeLog | null;
27
+ private readonly booleanColumns: Set<string>;
25
28
 
26
29
  constructor(
27
30
  db: Database.Database,
@@ -33,6 +36,11 @@ export class Repository<T extends BaseRecord> {
33
36
  this.tableName = tableName;
34
37
  this.schema = normalizeSchema(schema);
35
38
  this.changeLog = changeLog;
39
+ this.booleanColumns = new Set(
40
+ Object.entries(this.schema)
41
+ .filter(([, def]) => def.type === 'BOOLEAN')
42
+ .map(([key]) => key)
43
+ );
36
44
  this.initTable();
37
45
  }
38
46
 
@@ -41,6 +49,28 @@ export class Repository<T extends BaseRecord> {
41
49
  this.db.exec(sql);
42
50
  }
43
51
 
52
+ private serialize(key: string, value: unknown): SqliteBindable {
53
+ if (value === undefined || value === null) return null;
54
+ if (this.booleanColumns.has(key) && typeof value === 'boolean') {
55
+ return value ? 1 : 0;
56
+ }
57
+ if (typeof value === 'boolean') return value ? 1 : 0;
58
+ if (typeof value === 'object' && !Buffer.isBuffer(value)) {
59
+ return JSON.stringify(value);
60
+ }
61
+ return value as SqliteBindable;
62
+ }
63
+
64
+ private deserializeRow(row: Record<string, unknown>): T {
65
+ const out: Record<string, unknown> = { ...row };
66
+ for (const col of this.booleanColumns) {
67
+ if (col in out) {
68
+ out[col] = out[col] === 1 || out[col] === true;
69
+ }
70
+ }
71
+ return out as T;
72
+ }
73
+
44
74
  async create(data: Partial<Omit<T, 'id' | 'createdAt' | 'updatedAt'>>): Promise<T> {
45
75
  const now = Date.now();
46
76
  const id = generateId();
@@ -49,7 +79,7 @@ export class Repository<T extends BaseRecord> {
49
79
  const keys = Object.keys(record);
50
80
  const placeholders = keys.map(() => '?').join(', ');
51
81
  const cols = keys.map((k) => `"${k}"`).join(', ');
52
- const values = keys.map((k) => (record as Record<string, unknown>)[k]);
82
+ const values = keys.map((k) => this.serialize(k, (record as Record<string, unknown>)[k]));
53
83
 
54
84
  this.db
55
85
  .prepare(`INSERT INTO "${this.tableName}" (${cols}) VALUES (${placeholders})`)
@@ -57,25 +87,26 @@ export class Repository<T extends BaseRecord> {
57
87
 
58
88
  this.changeLog?.append(this.tableName, 'insert', record as Record<string, unknown>);
59
89
 
60
- return record;
90
+ return this.deserializeRow(record as Record<string, unknown>);
61
91
  }
62
92
 
63
93
  async findById(id: string): Promise<T | null> {
64
94
  const row = this.db
65
95
  .prepare(`SELECT * FROM "${this.tableName}" WHERE id = ?`)
66
- .get(id) as T | undefined;
67
- return row ?? null;
96
+ .get(id) as Record<string, unknown> | undefined;
97
+ return row ? this.deserializeRow(row) : null;
68
98
  }
69
99
 
70
100
  async findOne(where: WhereClause<T>): Promise<T | null> {
71
101
  const { sql, params } = buildSelectSQL<T>(this.tableName, { where, limit: 1 });
72
- const row = this.db.prepare(sql).get(...params) as T | undefined;
73
- return row ?? null;
102
+ const row = this.db.prepare(sql).get(...params) as Record<string, unknown> | undefined;
103
+ return row ? this.deserializeRow(row) : null;
74
104
  }
75
105
 
76
106
  async find(options: FindOptions<T> = {}): Promise<T[]> {
77
107
  const { sql, params } = buildSelectSQL<T>(this.tableName, options);
78
- return this.db.prepare(sql).all(...params) as T[];
108
+ const rows = this.db.prepare(sql).all(...params) as Record<string, unknown>[];
109
+ return rows.map((r) => this.deserializeRow(r));
79
110
  }
80
111
 
81
112
  async filter(where: WhereClause<T> = {}, options: Omit<FindOptions<T>, 'where'> = {}): Promise<T[]> {
@@ -89,7 +120,7 @@ export class Repository<T extends BaseRecord> {
89
120
  const setCols = Object.keys(updateData)
90
121
  .map((k) => `"${k}" = ?`)
91
122
  .join(', ');
92
- const setValues = Object.values(updateData);
123
+ const setValues = Object.entries(updateData).map(([k, v]) => this.serialize(k, v));
93
124
 
94
125
  const { sql: whereSQL, params: whereParams } = buildWhereClause(where);
95
126
  const sql = `UPDATE "${this.tableName}" SET ${setCols} ${whereSQL}`;