@aleonnet/healthcare-scheduler 0.1.6

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 (170) hide show
  1. package/README.md +264 -0
  2. package/dist/core/EventBus.d.ts +14 -0
  3. package/dist/core/EventBus.d.ts.map +1 -0
  4. package/dist/core/EventBus.js +47 -0
  5. package/dist/core/EventBus.js.map +1 -0
  6. package/dist/core/HealthcareScheduler.d.ts +63 -0
  7. package/dist/core/HealthcareScheduler.d.ts.map +1 -0
  8. package/dist/core/HealthcareScheduler.js +269 -0
  9. package/dist/core/HealthcareScheduler.js.map +1 -0
  10. package/dist/core/types.d.ts +234 -0
  11. package/dist/core/types.d.ts.map +1 -0
  12. package/dist/core/types.js +3 -0
  13. package/dist/core/types.js.map +1 -0
  14. package/dist/database/adapters/MockAdapter.d.ts +37 -0
  15. package/dist/database/adapters/MockAdapter.d.ts.map +1 -0
  16. package/dist/database/adapters/MockAdapter.js +518 -0
  17. package/dist/database/adapters/MockAdapter.js.map +1 -0
  18. package/dist/database/adapters/SQLiteAdapter.d.ts +40 -0
  19. package/dist/database/adapters/SQLiteAdapter.d.ts.map +1 -0
  20. package/dist/database/adapters/SQLiteAdapter.js +147 -0
  21. package/dist/database/adapters/SQLiteAdapter.js.map +1 -0
  22. package/dist/database/adapters/SupabaseAdapter.d.ts +20 -0
  23. package/dist/database/adapters/SupabaseAdapter.d.ts.map +1 -0
  24. package/dist/database/adapters/SupabaseAdapter.js +310 -0
  25. package/dist/database/adapters/SupabaseAdapter.js.map +1 -0
  26. package/dist/database/interfaces.d.ts +20 -0
  27. package/dist/database/interfaces.d.ts.map +1 -0
  28. package/dist/database/interfaces.js +3 -0
  29. package/dist/database/interfaces.js.map +1 -0
  30. package/dist/database/repositories/EventsRepository.d.ts +26 -0
  31. package/dist/database/repositories/EventsRepository.d.ts.map +1 -0
  32. package/dist/database/repositories/EventsRepository.js +91 -0
  33. package/dist/database/repositories/EventsRepository.js.map +1 -0
  34. package/dist/database/repositories/ItemsRepository.d.ts +11 -0
  35. package/dist/database/repositories/ItemsRepository.d.ts.map +1 -0
  36. package/dist/database/repositories/ItemsRepository.js +44 -0
  37. package/dist/database/repositories/ItemsRepository.js.map +1 -0
  38. package/dist/database/repositories/MedicationsRepository.d.ts +40 -0
  39. package/dist/database/repositories/MedicationsRepository.d.ts.map +1 -0
  40. package/dist/database/repositories/MedicationsRepository.js +136 -0
  41. package/dist/database/repositories/MedicationsRepository.js.map +1 -0
  42. package/dist/database/repositories/OccurrencesRepository.d.ts +25 -0
  43. package/dist/database/repositories/OccurrencesRepository.d.ts.map +1 -0
  44. package/dist/database/repositories/OccurrencesRepository.js +150 -0
  45. package/dist/database/repositories/OccurrencesRepository.js.map +1 -0
  46. package/dist/database/repositories/PlansRepository.d.ts +13 -0
  47. package/dist/database/repositories/PlansRepository.d.ts.map +1 -0
  48. package/dist/database/repositories/PlansRepository.js +76 -0
  49. package/dist/database/repositories/PlansRepository.js.map +1 -0
  50. package/dist/database/repositories/index.d.ts +6 -0
  51. package/dist/database/repositories/index.d.ts.map +1 -0
  52. package/dist/database/repositories/index.js +14 -0
  53. package/dist/database/repositories/index.js.map +1 -0
  54. package/dist/database/schema.base.d.ts +3 -0
  55. package/dist/database/schema.base.d.ts.map +1 -0
  56. package/dist/database/schema.base.js +110 -0
  57. package/dist/database/schema.base.js.map +1 -0
  58. package/dist/database/sync/interfaces.d.ts +20 -0
  59. package/dist/database/sync/interfaces.d.ts.map +1 -0
  60. package/dist/database/sync/interfaces.js +3 -0
  61. package/dist/database/sync/interfaces.js.map +1 -0
  62. package/dist/index.d.ts +27 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +58 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/notifications/adapters/MockNotificationAdapter.d.ts +18 -0
  67. package/dist/notifications/adapters/MockNotificationAdapter.d.ts.map +1 -0
  68. package/dist/notifications/adapters/MockNotificationAdapter.js +109 -0
  69. package/dist/notifications/adapters/MockNotificationAdapter.js.map +1 -0
  70. package/dist/notifications/adapters/NotifeeAdapter.d.ts +46 -0
  71. package/dist/notifications/adapters/NotifeeAdapter.d.ts.map +1 -0
  72. package/dist/notifications/adapters/NotifeeAdapter.js +479 -0
  73. package/dist/notifications/adapters/NotifeeAdapter.js.map +1 -0
  74. package/dist/notifications/interfaces.d.ts +8 -0
  75. package/dist/notifications/interfaces.d.ts.map +1 -0
  76. package/dist/notifications/interfaces.js +3 -0
  77. package/dist/notifications/interfaces.js.map +1 -0
  78. package/dist/planning/buildAgenda.d.ts +22 -0
  79. package/dist/planning/buildAgenda.d.ts.map +1 -0
  80. package/dist/planning/buildAgenda.js +148 -0
  81. package/dist/planning/buildAgenda.js.map +1 -0
  82. package/dist/planning/calculateTotalDoses.d.ts +3 -0
  83. package/dist/planning/calculateTotalDoses.d.ts.map +1 -0
  84. package/dist/planning/calculateTotalDoses.js +19 -0
  85. package/dist/planning/calculateTotalDoses.js.map +1 -0
  86. package/dist/planning/expandPlan.d.ts +3 -0
  87. package/dist/planning/expandPlan.d.ts.map +1 -0
  88. package/dist/planning/expandPlan.js +200 -0
  89. package/dist/planning/expandPlan.js.map +1 -0
  90. package/dist/planning/utils.d.ts +15 -0
  91. package/dist/planning/utils.d.ts.map +1 -0
  92. package/dist/planning/utils.js +40 -0
  93. package/dist/planning/utils.js.map +1 -0
  94. package/dist/planning/windowPlanner.d.ts +6 -0
  95. package/dist/planning/windowPlanner.d.ts.map +1 -0
  96. package/dist/planning/windowPlanner.js +18 -0
  97. package/dist/planning/windowPlanner.js.map +1 -0
  98. package/dist/plugins/InventoryPlugin.d.ts +26 -0
  99. package/dist/plugins/InventoryPlugin.d.ts.map +1 -0
  100. package/dist/plugins/InventoryPlugin.js +166 -0
  101. package/dist/plugins/InventoryPlugin.js.map +1 -0
  102. package/dist/plugins/PluginRegistry.d.ts +13 -0
  103. package/dist/plugins/PluginRegistry.d.ts.map +1 -0
  104. package/dist/plugins/PluginRegistry.js +43 -0
  105. package/dist/plugins/PluginRegistry.js.map +1 -0
  106. package/dist/plugins/SyncPluginEventDriven.d.ts +32 -0
  107. package/dist/plugins/SyncPluginEventDriven.d.ts.map +1 -0
  108. package/dist/plugins/SyncPluginEventDriven.js +609 -0
  109. package/dist/plugins/SyncPluginEventDriven.js.map +1 -0
  110. package/dist/plugins/SyncPluginPolling.d.ts +24 -0
  111. package/dist/plugins/SyncPluginPolling.d.ts.map +1 -0
  112. package/dist/plugins/SyncPluginPolling.js +266 -0
  113. package/dist/plugins/SyncPluginPolling.js.map +1 -0
  114. package/dist/plugins/gamification/GamificationPlugin.d.ts +26 -0
  115. package/dist/plugins/gamification/GamificationPlugin.d.ts.map +1 -0
  116. package/dist/plugins/gamification/GamificationPlugin.js +346 -0
  117. package/dist/plugins/gamification/GamificationPlugin.js.map +1 -0
  118. package/dist/plugins/gamification/__tests__/hysteresis.spec.d.ts +2 -0
  119. package/dist/plugins/gamification/__tests__/hysteresis.spec.d.ts.map +1 -0
  120. package/dist/plugins/gamification/__tests__/hysteresis.spec.js +22 -0
  121. package/dist/plugins/gamification/__tests__/hysteresis.spec.js.map +1 -0
  122. package/dist/plugins/gamification/index.d.ts +6 -0
  123. package/dist/plugins/gamification/index.d.ts.map +1 -0
  124. package/dist/plugins/gamification/index.js +14 -0
  125. package/dist/plugins/gamification/index.js.map +1 -0
  126. package/dist/plugins/gamification/levelsConfig.example.d.ts +17 -0
  127. package/dist/plugins/gamification/levelsConfig.example.d.ts.map +1 -0
  128. package/dist/plugins/gamification/levelsConfig.example.js +18 -0
  129. package/dist/plugins/gamification/levelsConfig.example.js.map +1 -0
  130. package/dist/plugins/gamification/levelsEngine.d.ts +19 -0
  131. package/dist/plugins/gamification/levelsEngine.d.ts.map +1 -0
  132. package/dist/plugins/gamification/levelsEngine.js +50 -0
  133. package/dist/plugins/gamification/levelsEngine.js.map +1 -0
  134. package/dist/plugins/gamification/streak.d.ts +7 -0
  135. package/dist/plugins/gamification/streak.d.ts.map +1 -0
  136. package/dist/plugins/gamification/streak.js +39 -0
  137. package/dist/plugins/gamification/streak.js.map +1 -0
  138. package/dist/plugins/index.d.ts +8 -0
  139. package/dist/plugins/index.d.ts.map +1 -0
  140. package/dist/plugins/index.js +28 -0
  141. package/dist/plugins/index.js.map +1 -0
  142. package/dist/plugins/interfaces.d.ts +56 -0
  143. package/dist/plugins/interfaces.d.ts.map +1 -0
  144. package/dist/plugins/interfaces.js +3 -0
  145. package/dist/plugins/interfaces.js.map +1 -0
  146. package/dist/reconciler/WindowScheduler.d.ts +29 -0
  147. package/dist/reconciler/WindowScheduler.d.ts.map +1 -0
  148. package/dist/reconciler/WindowScheduler.js +396 -0
  149. package/dist/reconciler/WindowScheduler.js.map +1 -0
  150. package/dist/services/MedicationsServiceCompat.d.ts +24 -0
  151. package/dist/services/MedicationsServiceCompat.d.ts.map +1 -0
  152. package/dist/services/MedicationsServiceCompat.js +98 -0
  153. package/dist/services/MedicationsServiceCompat.js.map +1 -0
  154. package/dist/utils/queue.d.ts +8 -0
  155. package/dist/utils/queue.d.ts.map +1 -0
  156. package/dist/utils/queue.js +28 -0
  157. package/dist/utils/queue.js.map +1 -0
  158. package/dist/utils/timeOffset.d.ts +4 -0
  159. package/dist/utils/timeOffset.d.ts.map +1 -0
  160. package/dist/utils/timeOffset.js +61 -0
  161. package/dist/utils/timeOffset.js.map +1 -0
  162. package/dist/utils/timestamp.d.ts +6 -0
  163. package/dist/utils/timestamp.d.ts.map +1 -0
  164. package/dist/utils/timestamp.js +29 -0
  165. package/dist/utils/timestamp.js.map +1 -0
  166. package/dist/utils/timezone.d.ts +4 -0
  167. package/dist/utils/timezone.d.ts.map +1 -0
  168. package/dist/utils/timezone.js +30 -0
  169. package/dist/utils/timezone.js.map +1 -0
  170. package/package.json +55 -0
@@ -0,0 +1,518 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockAdapter = void 0;
4
+ const timestamp_1 = require("../../utils/timestamp");
5
+ class MockAdapter {
6
+ constructor() {
7
+ this.tables = {};
8
+ this.lastInsertId = 0;
9
+ this.initializeTables();
10
+ }
11
+ initializeTables() {
12
+ this.tables = {
13
+ items: [],
14
+ plans: [],
15
+ occurrences: [],
16
+ events: [],
17
+ medications: []
18
+ };
19
+ }
20
+ async query(_sql, _params) {
21
+ return this.getAllAsync(_sql, _params);
22
+ }
23
+ async execute(_sql, _params) {
24
+ return this.runAsync(_sql, _params);
25
+ }
26
+ async transaction(callback) {
27
+ await callback();
28
+ }
29
+ async getFirstAsync(sql, params) {
30
+ const results = await this.getAllAsync(sql, params);
31
+ return results.length > 0 ? results[0] : null;
32
+ }
33
+ async getAllAsync(sql, params) {
34
+ const sqlUpper = sql.toUpperCase();
35
+ if (sqlUpper.includes('SELECT')) {
36
+ if (sql.includes('sqlite_master')) {
37
+ return this.handleSqliteMaster(sql);
38
+ }
39
+ const tableName = this.extractTableName(sql);
40
+ if (!tableName || !this.tables[tableName]) {
41
+ return [];
42
+ }
43
+ let rows = [...this.tables[tableName]];
44
+ if (sqlUpper.includes('JOIN')) {
45
+ rows = this.handleJoins(sql, rows);
46
+ }
47
+ if (sql.includes('last_action')) {
48
+ rows = this.enrichWithLastAction(rows);
49
+ }
50
+ let whereParamsConsumed = 0;
51
+ if (sqlUpper.includes('WHERE') && params.length > 0) {
52
+ const whereStart = sql.toUpperCase().indexOf('WHERE');
53
+ const orderByStart = sql.toUpperCase().includes('ORDER BY')
54
+ ? sql.toUpperCase().lastIndexOf('ORDER BY')
55
+ : sql.length;
56
+ const whereClause = sql.substring(whereStart, orderByStart);
57
+ whereParamsConsumed = (whereClause.match(/\?/g) || []).length;
58
+ rows = this.applyWhereClause(sql, rows, params.slice(0, whereParamsConsumed));
59
+ }
60
+ if (sqlUpper.includes('ORDER BY')) {
61
+ rows = this.applyOrderBy(sql, rows);
62
+ }
63
+ if (sqlUpper.includes('LIMIT')) {
64
+ const lastPart = sqlUpper.includes('ORDER BY')
65
+ ? sql.substring(sql.toUpperCase().lastIndexOf('ORDER BY'))
66
+ : sql;
67
+ if (lastPart.match(/LIMIT\s+\?/i)) {
68
+ const limitValue = params[whereParamsConsumed];
69
+ if (typeof limitValue === 'number' && limitValue > 0) {
70
+ rows = rows.slice(0, limitValue);
71
+ }
72
+ }
73
+ else {
74
+ const limitMatch = lastPart.match(/LIMIT\s+(\d+)\s*$/i);
75
+ if (limitMatch) {
76
+ rows = rows.slice(0, parseInt(limitMatch[1]));
77
+ }
78
+ }
79
+ }
80
+ if (sqlUpper.includes('SUM(') || sqlUpper.includes('COUNT(')) {
81
+ return [this.handleAggregation(sql, rows)];
82
+ }
83
+ return rows;
84
+ }
85
+ return [];
86
+ }
87
+ async runAsync(sql, params) {
88
+ const sqlUpper = sql.toUpperCase();
89
+ if (sqlUpper.includes('CREATE TABLE')) {
90
+ return this.handleCreateTable(sql);
91
+ }
92
+ if (sqlUpper.includes('CREATE INDEX')) {
93
+ return this.handleCreateIndex(sql);
94
+ }
95
+ if (sqlUpper.includes('INSERT')) {
96
+ return this.handleInsert(sql, params);
97
+ }
98
+ if (sqlUpper.includes('UPDATE')) {
99
+ return this.handleUpdate(sql, params);
100
+ }
101
+ if (sqlUpper.includes('DELETE')) {
102
+ return this.handleDelete(sql, params);
103
+ }
104
+ return { changes: 0 };
105
+ }
106
+ handleInsert(sql, params) {
107
+ const tableName = this.extractTableName(sql);
108
+ if (!tableName || !this.tables[tableName]) {
109
+ return { changes: 0, lastInsertRowId: 0 };
110
+ }
111
+ const columnsMatch = sql.match(/\(([^)]+)\)\s+VALUES/i);
112
+ if (!columnsMatch) {
113
+ return { changes: 0, lastInsertRowId: 0 };
114
+ }
115
+ const columns = columnsMatch[1].split(',').map(c => c.trim());
116
+ const record = {};
117
+ columns.forEach((col, idx) => {
118
+ record[col] = params[idx];
119
+ });
120
+ if (tableName === 'occurrences' && !record.status) {
121
+ record.status = 'PENDING';
122
+ }
123
+ if (tableName === 'events' && !record.action_at) {
124
+ record.action_at = new Date().toISOString();
125
+ }
126
+ if (sql.toUpperCase().includes('ON CONFLICT')) {
127
+ const conflictMatch = sql.match(/ON\s+CONFLICT\s*\(\s*(\w+)\s*\)/i);
128
+ const conflictColumn = conflictMatch ? conflictMatch[1] : 'id';
129
+ const existing = this.tables[tableName].find(r => r[conflictColumn] === record[conflictColumn]);
130
+ if (existing) {
131
+ const updateMatch = sql.match(/DO UPDATE SET(.+)/is);
132
+ if (updateMatch) {
133
+ const updatePart = updateMatch[1];
134
+ const updates = updatePart.split(',').map(u => u.trim());
135
+ updates.forEach(update => {
136
+ const excludedMatch = update.match(/(\w+)\s*=\s*excluded\.(\w+)/i);
137
+ if (excludedMatch) {
138
+ const [, fieldName, sourceField] = excludedMatch;
139
+ if (record[sourceField] !== undefined) {
140
+ existing[fieldName] = record[sourceField];
141
+ }
142
+ return;
143
+ }
144
+ const directMatch = update.match(/(\w+)\s*=\s*(\w+)/i);
145
+ if (directMatch) {
146
+ const [, fieldName, value] = directMatch;
147
+ if (record[value] !== undefined) {
148
+ existing[fieldName] = record[value];
149
+ }
150
+ }
151
+ });
152
+ return { changes: 1, lastInsertRowId: this.lastInsertId };
153
+ }
154
+ }
155
+ this.tables[tableName].push(record);
156
+ this.lastInsertId++;
157
+ return { changes: 1, lastInsertRowId: this.lastInsertId };
158
+ }
159
+ if (sql.toUpperCase().includes('INSERT OR IGNORE')) {
160
+ const existing = this.tables[tableName].find(r => r.id === record.id);
161
+ if (existing) {
162
+ return { changes: 0, lastInsertRowId: this.lastInsertId };
163
+ }
164
+ }
165
+ if (sql.toUpperCase().includes('INSERT OR REPLACE')) {
166
+ const existingIndex = this.tables[tableName].findIndex(r => r.id === record.id);
167
+ if (existingIndex >= 0) {
168
+ this.tables[tableName][existingIndex] = record;
169
+ return { changes: 1, lastInsertRowId: this.lastInsertId };
170
+ }
171
+ }
172
+ this.tables[tableName].push(record);
173
+ this.lastInsertId++;
174
+ return { changes: 1, lastInsertRowId: this.lastInsertId };
175
+ }
176
+ handleUpdate(sql, params) {
177
+ const tableName = this.extractTableName(sql);
178
+ if (!tableName || !this.tables[tableName]) {
179
+ return { changes: 0 };
180
+ }
181
+ const setClauseMatch = sql.match(/SET\s+(.+?)\s+WHERE/i) || sql.match(/SET\s+(.+)/i);
182
+ if (!setClauseMatch)
183
+ return { changes: 0 };
184
+ const setClause = setClauseMatch[1];
185
+ const assignments = setClause.split(',').map(s => s.trim());
186
+ const setOps = [];
187
+ let placeholderCount = 0;
188
+ for (const a of assignments) {
189
+ const ph = a.match(/(\w+)\s*=\s*\?/i);
190
+ if (ph) {
191
+ setOps.push({ field: ph[1], type: 'placeholder' });
192
+ placeholderCount++;
193
+ continue;
194
+ }
195
+ const nowLit = a.match(/(\w+)\s*=\s*datetime\(\s*'now'\s*\)/i);
196
+ if (nowLit) {
197
+ setOps.push({ field: nowLit[1], type: 'literal', value: new Date().toISOString() });
198
+ continue;
199
+ }
200
+ const strLit = a.match(/(\w+)\s*=\s*'([^']*)'/i);
201
+ if (strLit) {
202
+ setOps.push({ field: strLit[1], type: 'literal', value: strLit[2] });
203
+ continue;
204
+ }
205
+ const numLit = a.match(/(\w+)\s*=\s*(\d+)/i);
206
+ if (numLit) {
207
+ setOps.push({ field: numLit[1], type: 'literal', value: Number(numLit[2]) });
208
+ continue;
209
+ }
210
+ }
211
+ const whereParams = params.slice(placeholderCount);
212
+ const rows = this.applyWhereClause(sql, this.tables[tableName], whereParams);
213
+ let changes = 0;
214
+ rows.forEach(row => {
215
+ let pIdx = 0;
216
+ for (const op of setOps) {
217
+ if (op.type === 'placeholder') {
218
+ row[op.field] = params[pIdx++];
219
+ }
220
+ else {
221
+ row[op.field] = op.value;
222
+ }
223
+ }
224
+ changes++;
225
+ });
226
+ return { changes };
227
+ }
228
+ handleDelete(sql, params) {
229
+ const tableName = this.extractTableName(sql);
230
+ if (!tableName || !this.tables[tableName]) {
231
+ return { changes: 0 };
232
+ }
233
+ const rowsToDelete = this.applyWhereClause(sql, this.tables[tableName], params);
234
+ const changes = rowsToDelete.length;
235
+ this.tables[tableName] = this.tables[tableName].filter(row => !rowsToDelete.includes(row));
236
+ return { changes };
237
+ }
238
+ handleJoins(sql, rows) {
239
+ if (sql.includes('JOIN plans') && sql.includes('JOIN items')) {
240
+ return rows
241
+ .map(occ => {
242
+ const plan = this.tables.plans.find((p) => p.id === occ.plan_id);
243
+ if (!plan)
244
+ return null;
245
+ const item = this.tables.items.find((i) => i.id === plan.item_id);
246
+ if (!item)
247
+ return null;
248
+ return {
249
+ ...occ,
250
+ item_id: item.id,
251
+ item_name: item.name,
252
+ item_type: item.type,
253
+ item_meta: item.meta,
254
+ schedule_rule: plan.schedule_rule,
255
+ starts_at: plan.starts_at,
256
+ ends_at: plan.ends_at
257
+ };
258
+ })
259
+ .filter((r) => r !== null);
260
+ }
261
+ if (sql.includes('FROM occurrences o') && sql.includes('JOIN plans p') && !sql.includes('JOIN items')) {
262
+ return rows
263
+ .map(occ => {
264
+ const plan = this.tables.plans.find((p) => p.id === occ.plan_id);
265
+ if (!plan)
266
+ return null;
267
+ return {
268
+ ...occ,
269
+ item_id: plan.item_id,
270
+ starts_at: plan.starts_at,
271
+ ends_at: plan.ends_at
272
+ };
273
+ })
274
+ .filter((r) => r !== null);
275
+ }
276
+ if (sql.includes('FROM plans p') && sql.includes('JOIN items i')) {
277
+ return rows
278
+ .map(plan => {
279
+ const item = this.tables.items.find((i) => i.id === plan.item_id);
280
+ if (!item)
281
+ return null;
282
+ return {
283
+ ...plan,
284
+ item_name: item.name,
285
+ item_type: item.type,
286
+ item_meta: item.meta
287
+ };
288
+ })
289
+ .filter((r) => r !== null);
290
+ }
291
+ return rows;
292
+ }
293
+ enrichWithLastAction(rows) {
294
+ return rows.map(row => {
295
+ const occurrenceEvents = this.tables.events
296
+ ? this.tables.events.filter((e) => e.occurrence_id === row.id)
297
+ : [];
298
+ if (occurrenceEvents.length === 0) {
299
+ return {
300
+ ...row,
301
+ last_action: null,
302
+ last_action_at: null,
303
+ last_action_payload: null
304
+ };
305
+ }
306
+ const sortedEvents = [...occurrenceEvents].sort((a, b) => {
307
+ const aTime = a.action_at ? (0, timestamp_1.parseUTC)(a.action_at).getTime() : 0;
308
+ const bTime = b.action_at ? (0, timestamp_1.parseUTC)(b.action_at).getTime() : 0;
309
+ return bTime - aTime;
310
+ });
311
+ const lastEvent = sortedEvents[0];
312
+ return {
313
+ ...row,
314
+ last_action: lastEvent.action,
315
+ last_action_at: lastEvent.action_at,
316
+ last_action_payload: lastEvent.payload
317
+ };
318
+ });
319
+ }
320
+ applyWhereClause(sql, rows, params) {
321
+ const sqlUpper = sql.toUpperCase();
322
+ if (sqlUpper.includes('SCHEDULED_AT') && sqlUpper.includes('BETWEEN') && params.length >= 2) {
323
+ const start = params[0];
324
+ const end = params[1];
325
+ return rows.filter(r => {
326
+ if (!r.scheduled_at)
327
+ return false;
328
+ const scheduledTime = (0, timestamp_1.parseUTC)(r.scheduled_at).getTime();
329
+ const startTime = (0, timestamp_1.parseUTC)(start).getTime();
330
+ const endTime = (0, timestamp_1.parseUTC)(end).getTime();
331
+ if (scheduledTime < startTime)
332
+ return false;
333
+ if (scheduledTime > endTime)
334
+ return false;
335
+ if (r.starts_at && scheduledTime < (0, timestamp_1.parseUTC)(r.starts_at).getTime())
336
+ return false;
337
+ if (r.ends_at && scheduledTime > (0, timestamp_1.parseUTC)(r.ends_at).getTime())
338
+ return false;
339
+ return true;
340
+ });
341
+ }
342
+ if (sqlUpper.includes('WHERE ID IN (') && params.length > 0) {
343
+ return rows.filter(r => params.includes(r.id));
344
+ }
345
+ if (sqlUpper.includes('WHERE OCCURRENCE_ID IN (') && params.length > 0) {
346
+ return rows.filter(r => params.includes(r.occurrence_id));
347
+ }
348
+ if (sqlUpper.includes('WHERE ID = ?') && sqlUpper.includes('DELETED_AT IS NULL') && params.length > 0) {
349
+ return rows.filter(r => r.id === params[0] && (r.deleted_at == null));
350
+ }
351
+ if (sqlUpper.includes('WHERE ID = ?') && params.length > 0) {
352
+ return rows.filter(r => r.id === params[0]);
353
+ }
354
+ if (sqlUpper.includes('DELETED_AT IS NULL')) {
355
+ rows = rows.filter(r => r.deleted_at == null);
356
+ }
357
+ if (sqlUpper.includes('WHERE TYPE = ?') && params.length > 0) {
358
+ return rows.filter(r => r.type === params[0]);
359
+ }
360
+ if (sqlUpper.includes('WHERE STATUS = ?') && params.length > 0) {
361
+ return rows.filter(r => r.status === params[0]);
362
+ }
363
+ if (sqlUpper.includes('WHERE ITEM_ID = ?') && params.length > 0) {
364
+ return rows.filter(r => r.item_id === params[0]);
365
+ }
366
+ if (sqlUpper.includes('WHERE EAN = ?') && params.length > 0) {
367
+ return rows.filter(r => r.ean === params[0]);
368
+ }
369
+ if ((sqlUpper.includes('WHERE P.ID = ?') || sqlUpper.includes('WHERE O.ID = ?')) && params.length > 0) {
370
+ return rows.filter(r => r.id === params[0]);
371
+ }
372
+ if (sqlUpper.includes('ENDS_AT IS NULL OR') && sqlUpper.includes('ENDS_AT >') && params.length > 0) {
373
+ const nowTime = (0, timestamp_1.parseUTC)(params[0]).getTime();
374
+ return rows.filter(r => {
375
+ return !r.ends_at || (0, timestamp_1.parseUTC)(r.ends_at).getTime() > nowTime;
376
+ });
377
+ }
378
+ if (sqlUpper.includes('WHERE DATE_LOCAL = ?') && params.length > 0) {
379
+ return rows.filter(r => r.date_local === params[0]);
380
+ }
381
+ if (sqlUpper.includes('DATE_LOCAL BETWEEN ? AND ?') && params.length >= 2) {
382
+ const start = params[0];
383
+ const end = params[1];
384
+ return rows.filter(r => r.date_local >= start && r.date_local <= end);
385
+ }
386
+ return rows;
387
+ }
388
+ applyOrderBy(sql, rows) {
389
+ const orderMatch = sql.match(/ORDER BY\s+(?:\w+\.)?(\w+)\s+(ASC|DESC)?/i);
390
+ if (!orderMatch)
391
+ return rows;
392
+ const field = orderMatch[1];
393
+ const direction = (orderMatch[2] || 'ASC').toUpperCase();
394
+ return [...rows].sort((a, b) => {
395
+ const aVal = a[field];
396
+ const bVal = b[field];
397
+ const cmp = aVal < bVal ? -1 : aVal > bVal ? 1 : 0;
398
+ return direction === 'DESC' ? -cmp : cmp;
399
+ });
400
+ }
401
+ async close() {
402
+ this.initializeTables();
403
+ }
404
+ insertMockData(tableName, data) {
405
+ if (!this.tables[tableName]) {
406
+ this.tables[tableName] = [];
407
+ }
408
+ this.tables[tableName].push(...data);
409
+ }
410
+ clearTable(tableName) {
411
+ if (this.tables[tableName]) {
412
+ this.tables[tableName] = [];
413
+ }
414
+ }
415
+ getTableData(tableName) {
416
+ return this.tables[tableName] || [];
417
+ }
418
+ reset() {
419
+ this.initializeTables();
420
+ this.lastInsertId = 0;
421
+ }
422
+ handleCreateTable(sql) {
423
+ const match = sql.match(/CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?(\w+)/i);
424
+ if (match) {
425
+ const tableName = match[1];
426
+ if (!this.tables[tableName]) {
427
+ this.tables[tableName] = [];
428
+ }
429
+ }
430
+ return { changes: 0 };
431
+ }
432
+ handleCreateIndex(_sql) {
433
+ return { changes: 0 };
434
+ }
435
+ handleSqliteMaster(sql) {
436
+ const nameFilter = sql.match(/name\s*=\s*'(\w+)'/i);
437
+ const tableNames = Object.keys(this.tables);
438
+ if (nameFilter) {
439
+ const targetName = nameFilter[1];
440
+ return tableNames.includes(targetName)
441
+ ? [{ type: 'table', name: targetName, tbl_name: targetName, rootpage: 0, sql: '' }]
442
+ : [];
443
+ }
444
+ return tableNames.map(name => ({
445
+ type: 'table',
446
+ name,
447
+ tbl_name: name,
448
+ rootpage: 0,
449
+ sql: ''
450
+ }));
451
+ }
452
+ handleAggregation(sql, rows) {
453
+ const result = {};
454
+ const sumMatches = sql.matchAll(/SUM\s*\(\s*CASE\s+WHEN\s+([\s\S]+?)\s+THEN\s+(\d+)\s+ELSE\s+(\d+)\s+END\s*\)\s+AS\s+(\w+)/gi);
455
+ for (const match of sumMatches) {
456
+ const condition = match[1].trim();
457
+ const thenValue = parseInt(match[2]);
458
+ const elseValue = parseInt(match[3]);
459
+ const alias = match[4];
460
+ let sum = 0;
461
+ for (const row of rows) {
462
+ if (this.evaluateCondition(condition, row)) {
463
+ sum += thenValue;
464
+ }
465
+ else {
466
+ sum += elseValue;
467
+ }
468
+ }
469
+ result[alias] = sum;
470
+ }
471
+ return result;
472
+ }
473
+ evaluateCondition(condition, row) {
474
+ const andParts = condition.split(/\s+AND\s+/i);
475
+ for (const part of andParts) {
476
+ const equalMatch = part.match(/(\w+)\.(\w+)\s*=\s*'([^']+)'/i);
477
+ const inMatch = part.match(/(\w+)\.(\w+)\s+IN\s*\(\s*'([^']+)'\s*(?:,\s*'([^']+)')?\s*\)/i);
478
+ if (equalMatch) {
479
+ const field = equalMatch[2];
480
+ const value = equalMatch[3];
481
+ if (row[field] !== value)
482
+ return false;
483
+ }
484
+ else if (inMatch) {
485
+ const field = inMatch[2];
486
+ const values = [inMatch[3]];
487
+ if (inMatch[4])
488
+ values.push(inMatch[4]);
489
+ if (!values.includes(row[field]))
490
+ return false;
491
+ }
492
+ }
493
+ return true;
494
+ }
495
+ extractTableName(sql) {
496
+ const deleteMatch = sql.match(/DELETE\s+FROM\s+(\w+)/i);
497
+ if (deleteMatch)
498
+ return deleteMatch[1];
499
+ const intoMatch = sql.match(/INTO\s+(\w+)/i);
500
+ if (intoMatch)
501
+ return intoMatch[1];
502
+ const updateMatch = sql.match(/UPDATE\s+(\w+)/i);
503
+ if (updateMatch)
504
+ return updateMatch[1];
505
+ const joinMatch = sql.match(/FROM\s+(\w+)\s+\w+\s+JOIN/i);
506
+ if (joinMatch)
507
+ return joinMatch[1];
508
+ const mainFromMatch = sql.match(/FROM\s+(\w+)\s+(?:WHERE|ORDER|LIMIT)/i);
509
+ if (mainFromMatch)
510
+ return mainFromMatch[1];
511
+ const fromMatch = sql.match(/FROM\s+(\w+)/i);
512
+ if (fromMatch)
513
+ return fromMatch[1];
514
+ return null;
515
+ }
516
+ }
517
+ exports.MockAdapter = MockAdapter;
518
+ //# sourceMappingURL=MockAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockAdapter.js","sourceRoot":"","sources":["../../../src/database/adapters/MockAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { StorageDriver } from '../../core/types';
2
+ type AnyRecord = Record<string, any>;
3
+ export interface SQLiteDatabaseLike {
4
+ execAsync(sql: string): Promise<void>;
5
+ runAsync(sql: string, params?: any[]): Promise<{
6
+ changes?: number;
7
+ lastInsertRowId?: number;
8
+ } | void>;
9
+ getAllAsync<T = AnyRecord>(sql: string, params?: any[]): Promise<T[]>;
10
+ getFirstAsync<T = AnyRecord>(sql: string, params?: any[]): Promise<T | null>;
11
+ withTransactionAsync<T = void>(fn: () => Promise<T>): Promise<T>;
12
+ closeAsync?(): Promise<void>;
13
+ }
14
+ export interface SQLiteAdapterOptions {
15
+ db?: SQLiteDatabaseLike;
16
+ dbName?: string;
17
+ autoApplySchema?: boolean;
18
+ extraMigrations?: string[];
19
+ }
20
+ export declare class SQLiteAdapter implements StorageDriver {
21
+ private db;
22
+ private initialized;
23
+ private constructor();
24
+ static connect(options?: SQLiteAdapterOptions): Promise<SQLiteAdapter>;
25
+ applySchema(sql: string): Promise<void>;
26
+ query<T = any>(sql: string, params?: any[]): Promise<T[]>;
27
+ execute(sql: string, params?: any[]): Promise<{
28
+ changes: number;
29
+ }>;
30
+ transaction(callback: () => Promise<void>): Promise<void>;
31
+ getFirstAsync<T = any>(sql: string, params?: any[]): Promise<T | null>;
32
+ getAllAsync<T = any>(sql: string, params?: any[]): Promise<T[]>;
33
+ runAsync(sql: string, params?: any[]): Promise<{
34
+ changes: number;
35
+ lastInsertRowId?: number;
36
+ }>;
37
+ close(): Promise<void>;
38
+ }
39
+ export default SQLiteAdapter;
40
+ //# sourceMappingURL=SQLiteAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQLiteAdapter.d.ts","sourceRoot":"","sources":["../../../src/database/adapters/SQLiteAdapter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAGrC,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACtG,WAAW,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACtE,aAAa,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7E,oBAAoB,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACjE,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,qBAAa,aAAc,YAAW,aAAa;IACjD,OAAO,CAAC,EAAE,CAAsB;IAChC,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO;WAOM,OAAO,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,aAAa,CAAC;IA2B1E,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAQ7D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAStE,WAAW,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAUzD,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAQ1E,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAQnE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IASjG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7B;AAiBD,eAAe,aAAa,CAAC"}