@mauryasumit/driftdb 2.0.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.
Files changed (82) hide show
  1. package/README.md +810 -0
  2. package/dist/db.d.ts +30 -0
  3. package/dist/db.d.ts.map +1 -0
  4. package/dist/db.js +115 -0
  5. package/dist/db.js.map +1 -0
  6. package/dist/index.d.ts +8 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +12 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/orm/model.d.ts +35 -0
  11. package/dist/orm/model.d.ts.map +1 -0
  12. package/dist/orm/model.js +34 -0
  13. package/dist/orm/model.js.map +1 -0
  14. package/dist/orm/query-builder.d.ts +8 -0
  15. package/dist/orm/query-builder.d.ts.map +1 -0
  16. package/dist/orm/query-builder.js +90 -0
  17. package/dist/orm/query-builder.js.map +1 -0
  18. package/dist/orm/repository.d.ts +38 -0
  19. package/dist/orm/repository.d.ts.map +1 -0
  20. package/dist/orm/repository.js +107 -0
  21. package/dist/orm/repository.js.map +1 -0
  22. package/dist/orm/schema.d.ts +20 -0
  23. package/dist/orm/schema.d.ts.map +1 -0
  24. package/dist/orm/schema.js +81 -0
  25. package/dist/orm/schema.js.map +1 -0
  26. package/dist/queue/queue.d.ts +17 -0
  27. package/dist/queue/queue.d.ts.map +1 -0
  28. package/dist/queue/queue.js +109 -0
  29. package/dist/queue/queue.js.map +1 -0
  30. package/dist/storage/s3-adapter.d.ts +21 -0
  31. package/dist/storage/s3-adapter.d.ts.map +1 -0
  32. package/dist/storage/s3-adapter.js +133 -0
  33. package/dist/storage/s3-adapter.js.map +1 -0
  34. package/dist/sync/change-log.d.ts +15 -0
  35. package/dist/sync/change-log.d.ts.map +1 -0
  36. package/dist/sync/change-log.js +78 -0
  37. package/dist/sync/change-log.js.map +1 -0
  38. package/dist/sync/engine.d.ts +31 -0
  39. package/dist/sync/engine.d.ts.map +1 -0
  40. package/dist/sync/engine.js +210 -0
  41. package/dist/sync/engine.js.map +1 -0
  42. package/dist/sync/snapshot-manager.d.ts +17 -0
  43. package/dist/sync/snapshot-manager.d.ts.map +1 -0
  44. package/dist/sync/snapshot-manager.js +91 -0
  45. package/dist/sync/snapshot-manager.js.map +1 -0
  46. package/dist/types.d.ts +120 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +3 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/utils/compress.d.ts +3 -0
  51. package/dist/utils/compress.d.ts.map +1 -0
  52. package/dist/utils/compress.js +16 -0
  53. package/dist/utils/compress.js.map +1 -0
  54. package/dist/utils/crypto.d.ts +4 -0
  55. package/dist/utils/crypto.d.ts.map +1 -0
  56. package/dist/utils/crypto.js +35 -0
  57. package/dist/utils/crypto.js.map +1 -0
  58. package/dist/utils/id.d.ts +3 -0
  59. package/dist/utils/id.d.ts.map +1 -0
  60. package/dist/utils/id.js +13 -0
  61. package/dist/utils/id.js.map +1 -0
  62. package/dist/utils/retry.d.ts +5 -0
  63. package/dist/utils/retry.d.ts.map +1 -0
  64. package/dist/utils/retry.js +36 -0
  65. package/dist/utils/retry.js.map +1 -0
  66. package/package.json +55 -0
  67. package/src/db.ts +154 -0
  68. package/src/index.ts +24 -0
  69. package/src/orm/model.ts +95 -0
  70. package/src/orm/query-builder.ts +100 -0
  71. package/src/orm/repository.ts +156 -0
  72. package/src/orm/schema.ts +92 -0
  73. package/src/queue/queue.ts +138 -0
  74. package/src/storage/s3-adapter.ts +181 -0
  75. package/src/sync/change-log.ts +101 -0
  76. package/src/sync/engine.ts +249 -0
  77. package/src/sync/snapshot-manager.ts +80 -0
  78. package/src/types.ts +130 -0
  79. package/src/utils/compress.ts +14 -0
  80. package/src/utils/crypto.ts +33 -0
  81. package/src/utils/id.ts +10 -0
  82. package/src/utils/retry.ts +38 -0
package/dist/db.d.ts ADDED
@@ -0,0 +1,30 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { DBConfig, ModelSchema, SyncMetrics } from './types.js';
3
+ import { Repository } from './orm/repository.js';
4
+ import type { Model, ModelStatic } from './orm/model.js';
5
+ import type { BaseRecord } from './types.js';
6
+ export declare class DB {
7
+ private readonly sqliteDb;
8
+ private readonly config;
9
+ private readonly nodeId;
10
+ private readonly syncEngine;
11
+ private readonly repos;
12
+ constructor(config: DBConfig);
13
+ private getOrCreateNodeId;
14
+ define<S extends ModelSchema>(tableName: string, schema: S): Repository<BaseRecord & {
15
+ [K in keyof S]: unknown;
16
+ }>;
17
+ registerModel<T extends Model>(ModelClass: ModelStatic<T>): void;
18
+ getNodeId(): string;
19
+ getMetrics(): Readonly<SyncMetrics>;
20
+ flush(): Promise<void>;
21
+ snapshot(): Promise<void>;
22
+ startSync(): void;
23
+ stopSync(): void;
24
+ raw(): Database.Database;
25
+ close(): void;
26
+ transaction<T>(fn: () => T): T;
27
+ vacuum(): void;
28
+ integrityCheck(): boolean;
29
+ }
30
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAS7C,qBAAa,EAAE;IACb,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6C;gBAEvD,MAAM,EAAE,QAAQ;IA2B5B,OAAO,CAAC,iBAAiB;IAqBzB,MAAM,CAAC,CAAC,SAAS,WAAW,EAC1B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,CAAC,GACR,UAAU,CAAC,UAAU,GAAG;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO;KAAE,CAAC;IAWvD,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAmBhE,SAAS,IAAI,MAAM;IAInB,UAAU,IAAI,QAAQ,CAAC,WAAW,CAAC;IAI7B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,SAAS,IAAI,IAAI;IAIjB,QAAQ,IAAI,IAAI;IAIhB,GAAG,IAAI,QAAQ,CAAC,QAAQ;IAIxB,KAAK,IAAI,IAAI;IAKb,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAI9B,MAAM,IAAI,IAAI;IAId,cAAc,IAAI,OAAO;CAM1B"}
package/dist/db.js ADDED
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DB = void 0;
7
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
8
+ const fs_1 = require("fs");
9
+ const path_1 = require("path");
10
+ const repository_js_1 = require("./orm/repository.js");
11
+ const engine_js_1 = require("./sync/engine.js");
12
+ const id_js_1 = require("./utils/id.js");
13
+ const META_SCHEMA = `
14
+ CREATE TABLE IF NOT EXISTS _driftdb_meta (
15
+ key TEXT PRIMARY KEY,
16
+ value TEXT NOT NULL
17
+ );
18
+ `;
19
+ class DB {
20
+ constructor(config) {
21
+ this.repos = new Map();
22
+ this.config = config;
23
+ if (config.sqlitePath !== ':memory:') {
24
+ const dir = (0, path_1.dirname)(config.sqlitePath);
25
+ if (dir && dir !== '.') {
26
+ (0, fs_1.mkdirSync)(dir, { recursive: true });
27
+ }
28
+ }
29
+ this.sqliteDb = new better_sqlite3_1.default(config.sqlitePath);
30
+ this.sqliteDb.pragma('journal_mode = WAL');
31
+ this.sqliteDb.pragma('synchronous = NORMAL');
32
+ this.sqliteDb.pragma('foreign_keys = ON');
33
+ this.sqliteDb.pragma('cache_size = -64000');
34
+ this.sqliteDb.pragma('temp_store = MEMORY');
35
+ this.sqliteDb.exec(META_SCHEMA);
36
+ this.nodeId = this.getOrCreateNodeId(config.nodeId);
37
+ this.syncEngine = new engine_js_1.SyncEngine(this.sqliteDb, this.nodeId, config);
38
+ if (config.autoSync !== false && config.s3Config) {
39
+ this.syncEngine.start();
40
+ }
41
+ }
42
+ getOrCreateNodeId(preferred) {
43
+ if (preferred) {
44
+ this.sqliteDb
45
+ .prepare(`INSERT OR REPLACE INTO _driftdb_meta (key, value) VALUES ('nodeId', ?)`)
46
+ .run(preferred);
47
+ return preferred;
48
+ }
49
+ const row = this.sqliteDb
50
+ .prepare(`SELECT value FROM _driftdb_meta WHERE key = 'nodeId'`)
51
+ .get();
52
+ if (row)
53
+ return row.value;
54
+ const id = (0, id_js_1.generateNodeId)();
55
+ this.sqliteDb
56
+ .prepare(`INSERT INTO _driftdb_meta (key, value) VALUES ('nodeId', ?)`)
57
+ .run(id);
58
+ return id;
59
+ }
60
+ define(tableName, schema) {
61
+ const repo = new repository_js_1.Repository(this.sqliteDb, tableName, schema, this.syncEngine.getChangeLog());
62
+ this.repos.set(tableName, repo);
63
+ return repo;
64
+ }
65
+ registerModel(ModelClass) {
66
+ if (!ModelClass.tableName) {
67
+ throw new Error(`Model ${ModelClass.name} must define a static 'tableName'`);
68
+ }
69
+ if (!ModelClass.schema) {
70
+ throw new Error(`Model ${ModelClass.name} must define a static 'schema'`);
71
+ }
72
+ const repo = new repository_js_1.Repository(this.sqliteDb, ModelClass.tableName, ModelClass.schema, this.syncEngine.getChangeLog());
73
+ ModelClass._repo = repo;
74
+ this.repos.set(ModelClass.tableName, repo);
75
+ }
76
+ getNodeId() {
77
+ return this.nodeId;
78
+ }
79
+ getMetrics() {
80
+ return this.syncEngine.getMetrics();
81
+ }
82
+ async flush() {
83
+ return this.syncEngine.flush();
84
+ }
85
+ async snapshot() {
86
+ return this.syncEngine.triggerSnapshot();
87
+ }
88
+ startSync() {
89
+ this.syncEngine.start();
90
+ }
91
+ stopSync() {
92
+ this.syncEngine.stop();
93
+ }
94
+ raw() {
95
+ return this.sqliteDb;
96
+ }
97
+ close() {
98
+ this.syncEngine.stop();
99
+ this.sqliteDb.close();
100
+ }
101
+ transaction(fn) {
102
+ return this.sqliteDb.transaction(fn)();
103
+ }
104
+ vacuum() {
105
+ this.sqliteDb.exec('VACUUM');
106
+ }
107
+ integrityCheck() {
108
+ const result = this.sqliteDb
109
+ .prepare('PRAGMA integrity_check')
110
+ .get();
111
+ return result.integrity_check === 'ok';
112
+ }
113
+ }
114
+ exports.DB = DB;
115
+ //# sourceMappingURL=db.js.map
package/dist/db.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { DB } from './db.js';
2
+ export { Model } from './orm/model.js';
3
+ export type { ModelStatic } from './orm/model.js';
4
+ export { Repository } from './orm/repository.js';
5
+ export { Column } from './orm/schema.js';
6
+ export type { RecordOf } from './orm/repository.js';
7
+ export type { DBConfig, S3Config, ModelSchema, ColumnDef, ColumnType, BaseRecord, WhereClause, FindOptions, SyncMetrics, RetryConfig, EncryptionConfig, LogBatch, ChangeLogEntry, SyncJob, SyncManifest, } from './types.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,cAAc,EACd,OAAO,EACP,YAAY,GACb,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Column = exports.Repository = exports.Model = exports.DB = void 0;
4
+ var db_js_1 = require("./db.js");
5
+ Object.defineProperty(exports, "DB", { enumerable: true, get: function () { return db_js_1.DB; } });
6
+ var model_js_1 = require("./orm/model.js");
7
+ Object.defineProperty(exports, "Model", { enumerable: true, get: function () { return model_js_1.Model; } });
8
+ var repository_js_1 = require("./orm/repository.js");
9
+ Object.defineProperty(exports, "Repository", { enumerable: true, get: function () { return repository_js_1.Repository; } });
10
+ var schema_js_1 = require("./orm/schema.js");
11
+ Object.defineProperty(exports, "Column", { enumerable: true, get: function () { return schema_js_1.Column; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iCAA6B;AAApB,2FAAA,EAAE,OAAA;AACX,2CAAuC;AAA9B,iGAAA,KAAK,OAAA;AAEd,qDAAiD;AAAxC,2GAAA,UAAU,OAAA;AACnB,6CAAyC;AAAhC,mGAAA,MAAM,OAAA"}
@@ -0,0 +1,35 @@
1
+ import type { BaseRecord, FindOptions, ModelSchema, WhereClause } from '../types.js';
2
+ import type { Repository } from './repository.js';
3
+ export declare abstract class Model implements BaseRecord {
4
+ id: string;
5
+ createdAt: number;
6
+ updatedAt: number;
7
+ static tableName: string;
8
+ static schema: ModelSchema;
9
+ static _repo: Repository<BaseRecord>;
10
+ static create<T extends Model>(this: ModelStatic<T>, data: Partial<Omit<T, 'id' | 'createdAt' | 'updatedAt'>>): Promise<T>;
11
+ static findById<T extends Model>(this: ModelStatic<T>, id: string): Promise<T | null>;
12
+ static findOne<T extends Model>(this: ModelStatic<T>, where: WhereClause<T>): Promise<T | null>;
13
+ static find<T extends Model>(this: ModelStatic<T>, options?: FindOptions<T>): Promise<T[]>;
14
+ static filter<T extends Model>(this: ModelStatic<T>, where?: WhereClause<T>, options?: Omit<FindOptions<T>, 'where'>): Promise<T[]>;
15
+ static update<T extends Model>(this: ModelStatic<T>, where: WhereClause<T>, data: Partial<Omit<T, 'id' | 'createdAt'>>): Promise<number>;
16
+ static delete<T extends Model>(this: ModelStatic<T>, where: WhereClause<T>): Promise<number>;
17
+ static count<T extends Model>(this: ModelStatic<T>, where?: WhereClause<T>): Promise<number>;
18
+ static upsert<T extends Model>(this: ModelStatic<T>, where: WhereClause<T>, data: Partial<Omit<T, 'id' | 'createdAt'>>): Promise<T>;
19
+ }
20
+ export interface ModelStatic<T extends Model = Model> {
21
+ new (): T;
22
+ tableName: string;
23
+ schema: ModelSchema;
24
+ _repo: Repository<BaseRecord>;
25
+ create(data: Partial<Omit<T, 'id' | 'createdAt' | 'updatedAt'>>): Promise<T>;
26
+ findById(id: string): Promise<T | null>;
27
+ findOne(where: WhereClause<T>): Promise<T | null>;
28
+ find(options?: FindOptions<T>): Promise<T[]>;
29
+ filter(where?: WhereClause<T>, options?: Omit<FindOptions<T>, 'where'>): Promise<T[]>;
30
+ update(where: WhereClause<T>, data: Partial<Omit<T, 'id' | 'createdAt'>>): Promise<number>;
31
+ delete(where: WhereClause<T>): Promise<number>;
32
+ count(where?: WhereClause<T>): Promise<number>;
33
+ upsert(where: WhereClause<T>, data: Partial<Omit<T, 'id' | 'createdAt'>>): Promise<T>;
34
+ }
35
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/orm/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Model = void 0;
4
+ class Model {
5
+ static async create(data) {
6
+ return this._repo.create(data);
7
+ }
8
+ static async findById(id) {
9
+ return this._repo.findById(id);
10
+ }
11
+ static async findOne(where) {
12
+ return this._repo.findOne(where);
13
+ }
14
+ static async find(options = {}) {
15
+ return this._repo.find(options);
16
+ }
17
+ static async filter(where = {}, options = {}) {
18
+ return this._repo.filter(where, options);
19
+ }
20
+ static async update(where, data) {
21
+ return this._repo.update(where, data);
22
+ }
23
+ static async delete(where) {
24
+ return this._repo.delete(where);
25
+ }
26
+ static async count(where = {}) {
27
+ return this._repo.count(where);
28
+ }
29
+ static async upsert(where, data) {
30
+ return this._repo.upsert(where, data);
31
+ }
32
+ }
33
+ exports.Model = Model;
34
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/orm/model.ts"],"names":[],"mappings":";;;AAGA,MAAsB,KAAK;IAUzB,MAAM,CAAC,KAAK,CAAC,MAAM,CAEjB,IAAwD;QAExD,OAAQ,IAAI,CAAC,KAAuB,CAAC,MAAM,CAAC,IAAI,CAAe,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,QAAQ,CAEnB,EAAU;QAEV,OAAQ,IAAI,CAAC,KAAuB,CAAC,QAAQ,CAAC,EAAE,CAAsB,CAAC;IACzE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAElB,KAAqB;QAErB,OAAQ,IAAI,CAAC,KAAuB,CAAC,OAAO,CAAC,KAAK,CAAsB,CAAC;IAC3E,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAEf,UAA0B,EAAE;QAE5B,OAAQ,IAAI,CAAC,KAAuB,CAAC,IAAI,CAAC,OAAO,CAAiB,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAEjB,QAAwB,EAAE,EAC1B,UAAyC,EAAE;QAE3C,OAAQ,IAAI,CAAC,KAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAiB,CAAC;IAC9E,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAEjB,KAAqB,EACrB,IAA0C;QAE1C,OAAQ,IAAI,CAAC,KAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAEjB,KAAqB;QAErB,OAAQ,IAAI,CAAC,KAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK,CAEhB,QAAwB,EAAE;QAE1B,OAAQ,IAAI,CAAC,KAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAEjB,KAAqB,EACrB,IAA0C;QAE1C,OAAQ,IAAI,CAAC,KAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAe,CAAC;IACzE,CAAC;CACF;AA3ED,sBA2EC"}
@@ -0,0 +1,8 @@
1
+ import type { WhereClause, FindOptions } from '../types.js';
2
+ export interface QueryParts {
3
+ sql: string;
4
+ params: unknown[];
5
+ }
6
+ export declare function buildWhereClause<T>(where: WhereClause<T>): QueryParts;
7
+ export declare function buildSelectSQL<T>(tableName: string, options?: FindOptions<T>): QueryParts;
8
+ //# sourceMappingURL=query-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/orm/query-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,CAyDrE;AAED,wBAAgB,cAAc,CAAC,CAAC,EAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,WAAW,CAAC,CAAC,CAAM,GAC3B,UAAU,CA8BZ"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildWhereClause = buildWhereClause;
4
+ exports.buildSelectSQL = buildSelectSQL;
5
+ function buildWhereClause(where) {
6
+ const conditions = [];
7
+ const params = [];
8
+ for (const [key, value] of Object.entries(where)) {
9
+ if (value === undefined)
10
+ continue;
11
+ if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
12
+ const ops = value;
13
+ if ('$gt' in ops) {
14
+ conditions.push(`"${key}" > ?`);
15
+ params.push(ops['$gt']);
16
+ }
17
+ if ('$gte' in ops) {
18
+ conditions.push(`"${key}" >= ?`);
19
+ params.push(ops['$gte']);
20
+ }
21
+ if ('$lt' in ops) {
22
+ conditions.push(`"${key}" < ?`);
23
+ params.push(ops['$lt']);
24
+ }
25
+ if ('$lte' in ops) {
26
+ conditions.push(`"${key}" <= ?`);
27
+ params.push(ops['$lte']);
28
+ }
29
+ if ('$ne' in ops) {
30
+ conditions.push(`"${key}" != ?`);
31
+ params.push(ops['$ne']);
32
+ }
33
+ if ('$like' in ops) {
34
+ conditions.push(`"${key}" LIKE ?`);
35
+ params.push(ops['$like']);
36
+ }
37
+ if ('$in' in ops && Array.isArray(ops['$in'])) {
38
+ const arr = ops['$in'];
39
+ if (arr.length === 0) {
40
+ conditions.push('0 = 1');
41
+ }
42
+ else {
43
+ conditions.push(`"${key}" IN (${arr.map(() => '?').join(',')})`);
44
+ params.push(...arr);
45
+ }
46
+ }
47
+ }
48
+ else {
49
+ if (value === null) {
50
+ conditions.push(`"${key}" IS NULL`);
51
+ }
52
+ else {
53
+ conditions.push(`"${key}" = ?`);
54
+ params.push(value);
55
+ }
56
+ }
57
+ }
58
+ return {
59
+ sql: conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '',
60
+ params,
61
+ };
62
+ }
63
+ function buildSelectSQL(tableName, options = {}) {
64
+ const parts = [`SELECT * FROM "${tableName}"`];
65
+ const params = [];
66
+ if (options.where && Object.keys(options.where).length > 0) {
67
+ const { sql, params: wParams } = buildWhereClause(options.where);
68
+ if (sql) {
69
+ parts.push(sql);
70
+ params.push(...wParams);
71
+ }
72
+ }
73
+ if (options.orderBy) {
74
+ const orderClauses = Object.entries(options.orderBy)
75
+ .map(([col, dir]) => `"${col}" ${dir ?? 'ASC'}`)
76
+ .join(', ');
77
+ if (orderClauses)
78
+ parts.push(`ORDER BY ${orderClauses}`);
79
+ }
80
+ if (options.limit !== undefined) {
81
+ parts.push(`LIMIT ?`);
82
+ params.push(options.limit);
83
+ }
84
+ if (options.offset !== undefined) {
85
+ parts.push(`OFFSET ?`);
86
+ params.push(options.offset);
87
+ }
88
+ return { sql: parts.join(' '), params };
89
+ }
90
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/orm/query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { BaseRecord, FindOptions, ModelSchema, WhereClause } from '../types.js';
3
+ import type { ChangeLog } from '../sync/change-log.js';
4
+ export type RecordOf<S extends ModelSchema> = BaseRecord & {
5
+ [K in keyof S]: S[K] extends {
6
+ type: 'INTEGER';
7
+ } ? number : S[K] extends {
8
+ type: 'REAL';
9
+ } ? number : S[K] extends {
10
+ type: 'BOOLEAN';
11
+ } ? boolean : S[K] extends {
12
+ type: 'BLOB';
13
+ } ? Buffer : string;
14
+ };
15
+ export declare class Repository<T extends BaseRecord> {
16
+ private readonly db;
17
+ private readonly tableName;
18
+ private readonly schema;
19
+ private readonly changeLog;
20
+ constructor(db: Database.Database, tableName: string, schema: ModelSchema, changeLog: ChangeLog | null);
21
+ private initTable;
22
+ create(data: Partial<Omit<T, 'id' | 'createdAt' | 'updatedAt'>>): Promise<T>;
23
+ findById(id: string): Promise<T | null>;
24
+ findOne(where: WhereClause<T>): Promise<T | null>;
25
+ find(options?: FindOptions<T>): Promise<T[]>;
26
+ filter(where?: WhereClause<T>, options?: Omit<FindOptions<T>, 'where'>): Promise<T[]>;
27
+ update(where: WhereClause<T>, data: Partial<Omit<T, 'id' | 'createdAt'>>): Promise<number>;
28
+ delete(where: WhereClause<T>): Promise<number>;
29
+ deleteById(id: string): Promise<boolean>;
30
+ count(where?: WhereClause<T>): Promise<number>;
31
+ upsert(where: WhereClause<T>, data: Partial<Omit<T, 'id' | 'createdAt'>>): Promise<T>;
32
+ raw<R = unknown>(sql: string, params?: unknown[]): R[];
33
+ runRaw(sql: string, params?: unknown[]): {
34
+ changes: number;
35
+ lastInsertRowid: number | bigint;
36
+ };
37
+ }
38
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/orm/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Repository = void 0;
4
+ const schema_js_1 = require("./schema.js");
5
+ const query_builder_js_1 = require("./query-builder.js");
6
+ const id_js_1 = require("../utils/id.js");
7
+ class Repository {
8
+ constructor(db, tableName, schema, changeLog) {
9
+ this.db = db;
10
+ this.tableName = tableName;
11
+ this.schema = (0, schema_js_1.normalizeSchema)(schema);
12
+ this.changeLog = changeLog;
13
+ this.initTable();
14
+ }
15
+ initTable() {
16
+ const sql = (0, schema_js_1.buildCreateTableSQL)(this.tableName, this.schema);
17
+ this.db.exec(sql);
18
+ }
19
+ async create(data) {
20
+ const now = Date.now();
21
+ const id = (0, id_js_1.generateId)();
22
+ const record = { id, createdAt: now, updatedAt: now, ...data };
23
+ const keys = Object.keys(record);
24
+ const placeholders = keys.map(() => '?').join(', ');
25
+ const cols = keys.map((k) => `"${k}"`).join(', ');
26
+ const values = keys.map((k) => record[k]);
27
+ this.db
28
+ .prepare(`INSERT INTO "${this.tableName}" (${cols}) VALUES (${placeholders})`)
29
+ .run(...values);
30
+ this.changeLog?.append(this.tableName, 'insert', record);
31
+ return record;
32
+ }
33
+ async findById(id) {
34
+ const row = this.db
35
+ .prepare(`SELECT * FROM "${this.tableName}" WHERE id = ?`)
36
+ .get(id);
37
+ return row ?? null;
38
+ }
39
+ async findOne(where) {
40
+ const { sql, params } = (0, query_builder_js_1.buildSelectSQL)(this.tableName, { where, limit: 1 });
41
+ const row = this.db.prepare(sql).get(...params);
42
+ return row ?? null;
43
+ }
44
+ async find(options = {}) {
45
+ const { sql, params } = (0, query_builder_js_1.buildSelectSQL)(this.tableName, options);
46
+ return this.db.prepare(sql).all(...params);
47
+ }
48
+ async filter(where = {}, options = {}) {
49
+ return this.find({ where, ...options });
50
+ }
51
+ async update(where, data) {
52
+ const now = Date.now();
53
+ const updateData = { ...data, updatedAt: now };
54
+ const setCols = Object.keys(updateData)
55
+ .map((k) => `"${k}" = ?`)
56
+ .join(', ');
57
+ const setValues = Object.values(updateData);
58
+ const { sql: whereSQL, params: whereParams } = (0, query_builder_js_1.buildWhereClause)(where);
59
+ const sql = `UPDATE "${this.tableName}" SET ${setCols} ${whereSQL}`;
60
+ const result = this.db.prepare(sql).run(...setValues, ...whereParams);
61
+ if (result.changes > 0) {
62
+ this.changeLog?.append(this.tableName, 'update', {
63
+ where: where,
64
+ data: updateData,
65
+ });
66
+ }
67
+ return result.changes;
68
+ }
69
+ async delete(where) {
70
+ const { sql: whereSQL, params: whereParams } = (0, query_builder_js_1.buildWhereClause)(where);
71
+ const sql = `DELETE FROM "${this.tableName}" ${whereSQL}`;
72
+ const result = this.db.prepare(sql).run(...whereParams);
73
+ if (result.changes > 0) {
74
+ this.changeLog?.append(this.tableName, 'delete', {
75
+ where: where,
76
+ });
77
+ }
78
+ return result.changes;
79
+ }
80
+ async deleteById(id) {
81
+ const changes = await this.delete({ id });
82
+ return changes > 0;
83
+ }
84
+ async count(where = {}) {
85
+ const { sql: whereSQL, params } = (0, query_builder_js_1.buildWhereClause)(where);
86
+ const sql = `SELECT COUNT(*) as cnt FROM "${this.tableName}" ${whereSQL}`;
87
+ const row = this.db.prepare(sql).get(...params);
88
+ return row.cnt;
89
+ }
90
+ async upsert(where, data) {
91
+ const existing = await this.findOne(where);
92
+ if (existing) {
93
+ await this.update(where, data);
94
+ return (await this.findById(existing.id));
95
+ }
96
+ return this.create(data);
97
+ }
98
+ raw(sql, params = []) {
99
+ return this.db.prepare(sql).all(...params);
100
+ }
101
+ runRaw(sql, params = []) {
102
+ const result = this.db.prepare(sql).run(...params);
103
+ return { changes: result.changes, lastInsertRowid: result.lastInsertRowid };
104
+ }
105
+ }
106
+ exports.Repository = Repository;
107
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/orm/repository.ts"],"names":[],"mappings":";;;AAEA,2CAAmE;AACnE,yDAAsE;AACtE,0CAA4C;AAe5C,MAAa,UAAU;IAMrB,YACE,EAAqB,EACrB,SAAiB,EACjB,MAAmB,EACnB,SAA2B;QAE3B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAA,2BAAe,EAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAEO,SAAS;QACf,MAAM,GAAG,GAAG,IAAA,+BAAmB,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAwD;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,IAAA,kBAAU,GAAE,CAAC;QACxB,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,EAAO,CAAC;QAEpE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,MAAkC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvE,IAAI,CAAC,EAAE;aACJ,OAAO,CAAC,gBAAgB,IAAI,CAAC,SAAS,MAAM,IAAI,aAAa,YAAY,GAAG,CAAC;aAC7E,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAElB,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAiC,CAAC,CAAC;QAEpF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,kBAAkB,IAAI,CAAC,SAAS,gBAAgB,CAAC;aACzD,GAAG,CAAC,EAAE,CAAkB,CAAC;QAC5B,OAAO,GAAG,IAAI,IAAI,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAqB;QACjC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAA,iCAAc,EAAI,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/E,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAkB,CAAC;QACjE,OAAO,GAAG,IAAI,IAAI,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAA0B,EAAE;QACrC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAA,iCAAc,EAAI,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAQ,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAwB,EAAE,EAAE,UAAyC,EAAE;QAClF,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAqB,EAAE,IAA0C;QAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;QAE/C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;aACpC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;aACxB,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE5C,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,mCAAgB,EAAC,KAAK,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,WAAW,IAAI,CAAC,SAAS,SAAS,OAAO,IAAI,QAAQ,EAAE,CAAC;QAEpE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,WAAW,CAAC,CAAC;QAEtE,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE;gBAC/C,KAAK,EAAE,KAAgC;gBACvC,IAAI,EAAE,UAAqC;aAC5C,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAqB;QAChC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,mCAAgB,EAAC,KAAK,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,gBAAgB,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAE1D,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;QAExD,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE;gBAC/C,KAAK,EAAE,KAAgC;aACxC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAoB,CAAC,CAAC;QAC5D,OAAO,OAAO,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,QAAwB,EAAE;QACpC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAA,mCAAgB,EAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,gCAAgC,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAoB,CAAC;QACnE,OAAO,GAAG,CAAC,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CACV,KAAqB,EACrB,IAA0C;QAE1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/B,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAE,CAAC;QAC7C,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,IAA0D,CAAC,CAAC;IACjF,CAAC;IAED,GAAG,CAAc,GAAW,EAAE,SAAoB,EAAE;QAClD,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAQ,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,GAAW,EAAE,SAAoB,EAAE;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QACnD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;IAC9E,CAAC;CACF;AAxID,gCAwIC"}
@@ -0,0 +1,20 @@
1
+ import type { ColumnDef, ColumnType, ModelSchema } from '../types.js';
2
+ export declare class ColumnBuilder {
3
+ private readonly def;
4
+ constructor(type: ColumnType);
5
+ required(): this;
6
+ unique(): this;
7
+ default(value: string | number | boolean | null): this;
8
+ index(): this;
9
+ build(): ColumnDef;
10
+ }
11
+ export declare const Column: {
12
+ text(): ColumnBuilder;
13
+ integer(): ColumnBuilder;
14
+ real(): ColumnBuilder;
15
+ blob(): ColumnBuilder;
16
+ boolean(): ColumnBuilder;
17
+ };
18
+ export declare function buildCreateTableSQL(tableName: string, schema: ModelSchema): string;
19
+ export declare function normalizeSchema(schema: ModelSchema): ModelSchema;
20
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/orm/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtE,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;gBAEpB,IAAI,EAAE,UAAU;IAI5B,QAAQ,IAAI,IAAI;IAKhB,MAAM,IAAI,IAAI;IAKd,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI;IAKtD,KAAK,IAAI,IAAI;IAKb,KAAK,IAAI,SAAS;CAGnB;AAED,eAAO,MAAM,MAAM;YACT,aAAa;eAGV,aAAa;YAGhB,aAAa;YAGb,aAAa;eAGV,aAAa;CAGzB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CA+BlF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAMhE"}