@nahisaho/musubix-core 1.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 (214) hide show
  1. package/bin/musubix.js +18 -0
  2. package/dist/__tests__/index.test.d.ts +2 -0
  3. package/dist/__tests__/index.test.d.ts.map +1 -0
  4. package/dist/__tests__/index.test.js +27 -0
  5. package/dist/__tests__/index.test.js.map +1 -0
  6. package/dist/auth/auth-manager.d.ts +320 -0
  7. package/dist/auth/auth-manager.d.ts.map +1 -0
  8. package/dist/auth/auth-manager.js +580 -0
  9. package/dist/auth/auth-manager.js.map +1 -0
  10. package/dist/cli/base.d.ts +58 -0
  11. package/dist/cli/base.d.ts.map +1 -0
  12. package/dist/cli/base.js +93 -0
  13. package/dist/cli/base.js.map +1 -0
  14. package/dist/cli/commands/help.d.ts +17 -0
  15. package/dist/cli/commands/help.d.ts.map +1 -0
  16. package/dist/cli/commands/help.js +228 -0
  17. package/dist/cli/commands/help.js.map +1 -0
  18. package/dist/cli/commands/index.d.ts +14 -0
  19. package/dist/cli/commands/index.d.ts.map +1 -0
  20. package/dist/cli/commands/index.js +25 -0
  21. package/dist/cli/commands/index.js.map +1 -0
  22. package/dist/cli/commands/init.d.ts +38 -0
  23. package/dist/cli/commands/init.d.ts.map +1 -0
  24. package/dist/cli/commands/init.js +258 -0
  25. package/dist/cli/commands/init.js.map +1 -0
  26. package/dist/cli/index.d.ts +9 -0
  27. package/dist/cli/index.d.ts.map +1 -0
  28. package/dist/cli/index.js +9 -0
  29. package/dist/cli/index.js.map +1 -0
  30. package/dist/codegen/coding-standards.d.ts +250 -0
  31. package/dist/codegen/coding-standards.d.ts.map +1 -0
  32. package/dist/codegen/coding-standards.js +976 -0
  33. package/dist/codegen/coding-standards.js.map +1 -0
  34. package/dist/codegen/coverage-reporter.d.ts +264 -0
  35. package/dist/codegen/coverage-reporter.d.ts.map +1 -0
  36. package/dist/codegen/coverage-reporter.js +697 -0
  37. package/dist/codegen/coverage-reporter.js.map +1 -0
  38. package/dist/codegen/dependency-analyzer.d.ts +271 -0
  39. package/dist/codegen/dependency-analyzer.d.ts.map +1 -0
  40. package/dist/codegen/dependency-analyzer.js +661 -0
  41. package/dist/codegen/dependency-analyzer.js.map +1 -0
  42. package/dist/codegen/generator.d.ts +275 -0
  43. package/dist/codegen/generator.d.ts.map +1 -0
  44. package/dist/codegen/generator.js +781 -0
  45. package/dist/codegen/generator.js.map +1 -0
  46. package/dist/codegen/index.d.ts +18 -0
  47. package/dist/codegen/index.d.ts.map +1 -0
  48. package/dist/codegen/index.js +27 -0
  49. package/dist/codegen/index.js.map +1 -0
  50. package/dist/codegen/integration-test-generator.d.ts +312 -0
  51. package/dist/codegen/integration-test-generator.d.ts.map +1 -0
  52. package/dist/codegen/integration-test-generator.js +765 -0
  53. package/dist/codegen/integration-test-generator.js.map +1 -0
  54. package/dist/codegen/pattern-conformance.d.ts +309 -0
  55. package/dist/codegen/pattern-conformance.d.ts.map +1 -0
  56. package/dist/codegen/pattern-conformance.js +590 -0
  57. package/dist/codegen/pattern-conformance.js.map +1 -0
  58. package/dist/codegen/quality-metrics.d.ts +235 -0
  59. package/dist/codegen/quality-metrics.d.ts.map +1 -0
  60. package/dist/codegen/quality-metrics.js +439 -0
  61. package/dist/codegen/quality-metrics.js.map +1 -0
  62. package/dist/codegen/security-scanner.d.ts +179 -0
  63. package/dist/codegen/security-scanner.d.ts.map +1 -0
  64. package/dist/codegen/security-scanner.js +495 -0
  65. package/dist/codegen/security-scanner.js.map +1 -0
  66. package/dist/codegen/static-analyzer.d.ts +188 -0
  67. package/dist/codegen/static-analyzer.d.ts.map +1 -0
  68. package/dist/codegen/static-analyzer.js +490 -0
  69. package/dist/codegen/static-analyzer.js.map +1 -0
  70. package/dist/codegen/unit-test-generator.d.ts +289 -0
  71. package/dist/codegen/unit-test-generator.d.ts.map +1 -0
  72. package/dist/codegen/unit-test-generator.js +634 -0
  73. package/dist/codegen/unit-test-generator.js.map +1 -0
  74. package/dist/design/adr-generator.d.ts +227 -0
  75. package/dist/design/adr-generator.d.ts.map +1 -0
  76. package/dist/design/adr-generator.js +423 -0
  77. package/dist/design/adr-generator.js.map +1 -0
  78. package/dist/design/c4-generator.d.ts +267 -0
  79. package/dist/design/c4-generator.d.ts.map +1 -0
  80. package/dist/design/c4-generator.js +453 -0
  81. package/dist/design/c4-generator.js.map +1 -0
  82. package/dist/design/framework-optimizer.d.ts +190 -0
  83. package/dist/design/framework-optimizer.d.ts.map +1 -0
  84. package/dist/design/framework-optimizer.js +589 -0
  85. package/dist/design/framework-optimizer.js.map +1 -0
  86. package/dist/design/index.d.ts +12 -0
  87. package/dist/design/index.d.ts.map +1 -0
  88. package/dist/design/index.js +13 -0
  89. package/dist/design/index.js.map +1 -0
  90. package/dist/design/pattern-detector.d.ts +270 -0
  91. package/dist/design/pattern-detector.d.ts.map +1 -0
  92. package/dist/design/pattern-detector.js +621 -0
  93. package/dist/design/pattern-detector.js.map +1 -0
  94. package/dist/design/solid-validator.d.ts +188 -0
  95. package/dist/design/solid-validator.d.ts.map +1 -0
  96. package/dist/design/solid-validator.js +579 -0
  97. package/dist/design/solid-validator.js.map +1 -0
  98. package/dist/error/data-persistence.d.ts +311 -0
  99. package/dist/error/data-persistence.d.ts.map +1 -0
  100. package/dist/error/data-persistence.js +586 -0
  101. package/dist/error/data-persistence.js.map +1 -0
  102. package/dist/error/graceful-degradation.d.ts +309 -0
  103. package/dist/error/graceful-degradation.d.ts.map +1 -0
  104. package/dist/error/graceful-degradation.js +510 -0
  105. package/dist/error/graceful-degradation.js.map +1 -0
  106. package/dist/error/index.d.ts +11 -0
  107. package/dist/error/index.d.ts.map +1 -0
  108. package/dist/error/index.js +19 -0
  109. package/dist/error/index.js.map +1 -0
  110. package/dist/explanation/explanation-generator.d.ts +228 -0
  111. package/dist/explanation/explanation-generator.d.ts.map +1 -0
  112. package/dist/explanation/explanation-generator.js +662 -0
  113. package/dist/explanation/explanation-generator.js.map +1 -0
  114. package/dist/explanation/index.d.ts +11 -0
  115. package/dist/explanation/index.d.ts.map +1 -0
  116. package/dist/explanation/index.js +19 -0
  117. package/dist/explanation/index.js.map +1 -0
  118. package/dist/explanation/reasoning-chain.d.ts +314 -0
  119. package/dist/explanation/reasoning-chain.d.ts.map +1 -0
  120. package/dist/explanation/reasoning-chain.js +414 -0
  121. package/dist/explanation/reasoning-chain.js.map +1 -0
  122. package/dist/explanation/visual-explanation.d.ts +315 -0
  123. package/dist/explanation/visual-explanation.d.ts.map +1 -0
  124. package/dist/explanation/visual-explanation.js +667 -0
  125. package/dist/explanation/visual-explanation.js.map +1 -0
  126. package/dist/index.d.ts +33 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +47 -0
  129. package/dist/index.js.map +1 -0
  130. package/dist/requirements/decomposer.d.ts +235 -0
  131. package/dist/requirements/decomposer.d.ts.map +1 -0
  132. package/dist/requirements/decomposer.js +587 -0
  133. package/dist/requirements/decomposer.js.map +1 -0
  134. package/dist/requirements/related-finder.d.ts +261 -0
  135. package/dist/requirements/related-finder.d.ts.map +1 -0
  136. package/dist/requirements/related-finder.js +629 -0
  137. package/dist/requirements/related-finder.js.map +1 -0
  138. package/dist/traceability/impact.d.ts +196 -0
  139. package/dist/traceability/impact.d.ts.map +1 -0
  140. package/dist/traceability/impact.js +438 -0
  141. package/dist/traceability/impact.js.map +1 -0
  142. package/dist/traceability/index.d.ts +9 -0
  143. package/dist/traceability/index.d.ts.map +1 -0
  144. package/dist/traceability/index.js +10 -0
  145. package/dist/traceability/index.js.map +1 -0
  146. package/dist/traceability/manager.d.ts +266 -0
  147. package/dist/traceability/manager.d.ts.map +1 -0
  148. package/dist/traceability/manager.js +412 -0
  149. package/dist/traceability/manager.js.map +1 -0
  150. package/dist/types/common.d.ts +294 -0
  151. package/dist/types/common.d.ts.map +1 -0
  152. package/dist/types/common.js +15 -0
  153. package/dist/types/common.js.map +1 -0
  154. package/dist/types/ears.d.ts +158 -0
  155. package/dist/types/ears.d.ts.map +1 -0
  156. package/dist/types/ears.js +33 -0
  157. package/dist/types/ears.js.map +1 -0
  158. package/dist/types/errors.d.ts +176 -0
  159. package/dist/types/errors.d.ts.map +1 -0
  160. package/dist/types/errors.js +55 -0
  161. package/dist/types/errors.js.map +1 -0
  162. package/dist/types/index.d.ts +10 -0
  163. package/dist/types/index.d.ts.map +1 -0
  164. package/dist/types/index.js +10 -0
  165. package/dist/types/index.js.map +1 -0
  166. package/dist/utils/data-protector.d.ts +122 -0
  167. package/dist/utils/data-protector.d.ts.map +1 -0
  168. package/dist/utils/data-protector.js +275 -0
  169. package/dist/utils/data-protector.js.map +1 -0
  170. package/dist/utils/error-handler.d.ts +101 -0
  171. package/dist/utils/error-handler.d.ts.map +1 -0
  172. package/dist/utils/error-handler.js +324 -0
  173. package/dist/utils/error-handler.js.map +1 -0
  174. package/dist/utils/i18n-manager.d.ts +259 -0
  175. package/dist/utils/i18n-manager.d.ts.map +1 -0
  176. package/dist/utils/i18n-manager.js +554 -0
  177. package/dist/utils/i18n-manager.js.map +1 -0
  178. package/dist/utils/index.d.ts +10 -0
  179. package/dist/utils/index.d.ts.map +1 -0
  180. package/dist/utils/index.js +10 -0
  181. package/dist/utils/index.js.map +1 -0
  182. package/dist/utils/logger.d.ts +120 -0
  183. package/dist/utils/logger.d.ts.map +1 -0
  184. package/dist/utils/logger.js +237 -0
  185. package/dist/utils/logger.js.map +1 -0
  186. package/dist/utils/performance-profiler.d.ts +251 -0
  187. package/dist/utils/performance-profiler.d.ts.map +1 -0
  188. package/dist/utils/performance-profiler.js +458 -0
  189. package/dist/utils/performance-profiler.js.map +1 -0
  190. package/dist/utils/scalability-optimizer.d.ts +294 -0
  191. package/dist/utils/scalability-optimizer.d.ts.map +1 -0
  192. package/dist/utils/scalability-optimizer.js +606 -0
  193. package/dist/utils/scalability-optimizer.js.map +1 -0
  194. package/dist/utils/structured-logger.d.ts +294 -0
  195. package/dist/utils/structured-logger.d.ts.map +1 -0
  196. package/dist/utils/structured-logger.js +630 -0
  197. package/dist/utils/structured-logger.js.map +1 -0
  198. package/dist/utils/version-compatibility.d.ts +217 -0
  199. package/dist/utils/version-compatibility.d.ts.map +1 -0
  200. package/dist/utils/version-compatibility.js +443 -0
  201. package/dist/utils/version-compatibility.js.map +1 -0
  202. package/dist/validators/ears-validator.d.ts +182 -0
  203. package/dist/validators/ears-validator.d.ts.map +1 -0
  204. package/dist/validators/ears-validator.js +357 -0
  205. package/dist/validators/ears-validator.js.map +1 -0
  206. package/dist/validators/index.d.ts +8 -0
  207. package/dist/validators/index.d.ts.map +1 -0
  208. package/dist/validators/index.js +9 -0
  209. package/dist/validators/index.js.map +1 -0
  210. package/dist/version.d.ts +8 -0
  211. package/dist/version.d.ts.map +1 -0
  212. package/dist/version.js +8 -0
  213. package/dist/version.js.map +1 -0
  214. package/package.json +100 -0
@@ -0,0 +1,586 @@
1
+ /**
2
+ * Data Persistence
3
+ *
4
+ * Ensures data durability and recovery capabilities
5
+ *
6
+ * @packageDocumentation
7
+ * @module error/data-persistence
8
+ *
9
+ * @see REQ-ERR-002 - Data Persistence
10
+ * @see Article V - Safety Assurance
11
+ */
12
+ import * as fs from 'fs/promises';
13
+ import * as path from 'path';
14
+ import { createHash } from 'crypto';
15
+ /**
16
+ * In-memory storage adapter
17
+ */
18
+ export class MemoryStorageAdapter {
19
+ data = new Map();
20
+ async get(key) {
21
+ return this.data.get(key) ?? null;
22
+ }
23
+ async set(key, value) {
24
+ this.data.set(key, value);
25
+ }
26
+ async delete(key) {
27
+ this.data.delete(key);
28
+ }
29
+ async list() {
30
+ return [...this.data.keys()];
31
+ }
32
+ async clear() {
33
+ this.data.clear();
34
+ }
35
+ }
36
+ /**
37
+ * File storage adapter
38
+ */
39
+ export class FileStorageAdapter {
40
+ basePath;
41
+ constructor(basePath) {
42
+ this.basePath = basePath;
43
+ }
44
+ getFilePath(key) {
45
+ const safeKey = key.replace(/[^a-zA-Z0-9-_]/g, '_');
46
+ return path.join(this.basePath, `${safeKey}.json`);
47
+ }
48
+ async get(key) {
49
+ try {
50
+ const filePath = this.getFilePath(key);
51
+ const content = await fs.readFile(filePath, 'utf-8');
52
+ return JSON.parse(content);
53
+ }
54
+ catch {
55
+ return null;
56
+ }
57
+ }
58
+ async set(key, value) {
59
+ await fs.mkdir(this.basePath, { recursive: true });
60
+ const filePath = this.getFilePath(key);
61
+ await fs.writeFile(filePath, JSON.stringify(value, null, 2), 'utf-8');
62
+ }
63
+ async delete(key) {
64
+ try {
65
+ const filePath = this.getFilePath(key);
66
+ await fs.unlink(filePath);
67
+ }
68
+ catch {
69
+ // Ignore if file doesn't exist
70
+ }
71
+ }
72
+ async list() {
73
+ try {
74
+ await fs.mkdir(this.basePath, { recursive: true });
75
+ const files = await fs.readdir(this.basePath);
76
+ return files
77
+ .filter((f) => f.endsWith('.json'))
78
+ .map((f) => f.replace('.json', ''));
79
+ }
80
+ catch {
81
+ return [];
82
+ }
83
+ }
84
+ async clear() {
85
+ try {
86
+ const files = await this.list();
87
+ await Promise.all(files.map((f) => this.delete(f)));
88
+ }
89
+ catch {
90
+ // Ignore errors
91
+ }
92
+ }
93
+ }
94
+ /**
95
+ * Default configuration
96
+ */
97
+ export const DEFAULT_PERSISTENCE_CONFIG = {
98
+ backend: 'memory',
99
+ maxCheckpoints: 10,
100
+ enableTransactions: true,
101
+ enableIntegrityChecks: true,
102
+ };
103
+ /**
104
+ * Data Persistence Manager
105
+ */
106
+ export class DataPersistence {
107
+ config;
108
+ adapter;
109
+ checkpoints = [];
110
+ transactions = new Map();
111
+ currentTransaction = null;
112
+ version = 0;
113
+ checkpointCounter = 0;
114
+ transactionCounter = 0;
115
+ checkpointTimer;
116
+ constructor(config) {
117
+ this.config = { ...DEFAULT_PERSISTENCE_CONFIG, ...config };
118
+ this.adapter = this.createAdapter();
119
+ // Start auto-checkpoint if configured
120
+ if (this.config.autoCheckpointInterval) {
121
+ this.startAutoCheckpoint();
122
+ }
123
+ }
124
+ /**
125
+ * Create storage adapter based on config
126
+ */
127
+ createAdapter() {
128
+ if (this.config.customAdapter) {
129
+ return this.config.customAdapter;
130
+ }
131
+ switch (this.config.backend) {
132
+ case 'file':
133
+ return new FileStorageAdapter(this.config.storagePath ?? './data');
134
+ case 'memory':
135
+ default:
136
+ return new MemoryStorageAdapter();
137
+ }
138
+ }
139
+ /**
140
+ * Start auto-checkpoint timer
141
+ */
142
+ startAutoCheckpoint() {
143
+ if (this.checkpointTimer) {
144
+ clearInterval(this.checkpointTimer);
145
+ }
146
+ this.checkpointTimer = setInterval(() => this.createCheckpoint(), this.config.autoCheckpointInterval);
147
+ }
148
+ /**
149
+ * Stop auto-checkpoint timer
150
+ */
151
+ stop() {
152
+ if (this.checkpointTimer) {
153
+ clearInterval(this.checkpointTimer);
154
+ this.checkpointTimer = undefined;
155
+ }
156
+ }
157
+ /**
158
+ * Set a value
159
+ */
160
+ async set(key, value) {
161
+ // Record operation if in transaction
162
+ if (this.currentTransaction) {
163
+ const previousValue = await this.adapter.get(key);
164
+ this.currentTransaction.operations.push({
165
+ type: previousValue ? 'update' : 'set',
166
+ key,
167
+ value,
168
+ previousValue,
169
+ timestamp: new Date(),
170
+ });
171
+ }
172
+ await this.adapter.set(key, {
173
+ value,
174
+ checksum: this.config.enableIntegrityChecks
175
+ ? this.calculateChecksum(value)
176
+ : undefined,
177
+ version: ++this.version,
178
+ updatedAt: new Date().toISOString(),
179
+ });
180
+ }
181
+ /**
182
+ * Get a value
183
+ */
184
+ async get(key) {
185
+ const data = (await this.adapter.get(key));
186
+ if (!data)
187
+ return null;
188
+ // Verify integrity
189
+ if (this.config.enableIntegrityChecks && data.checksum) {
190
+ const currentChecksum = this.calculateChecksum(data.value);
191
+ if (currentChecksum !== data.checksum) {
192
+ throw new Error(`Data integrity check failed for key: ${key}`);
193
+ }
194
+ }
195
+ return data.value;
196
+ }
197
+ /**
198
+ * Delete a value
199
+ */
200
+ async delete(key) {
201
+ // Record operation if in transaction
202
+ if (this.currentTransaction) {
203
+ const previousValue = await this.adapter.get(key);
204
+ this.currentTransaction.operations.push({
205
+ type: 'delete',
206
+ key,
207
+ previousValue,
208
+ timestamp: new Date(),
209
+ });
210
+ }
211
+ await this.adapter.delete(key);
212
+ }
213
+ /**
214
+ * List all keys
215
+ */
216
+ async keys() {
217
+ return this.adapter.list();
218
+ }
219
+ /**
220
+ * Clear all data
221
+ */
222
+ async clear() {
223
+ await this.adapter.clear();
224
+ this.version = 0;
225
+ }
226
+ /**
227
+ * Begin a transaction
228
+ */
229
+ beginTransaction() {
230
+ if (!this.config.enableTransactions) {
231
+ throw new Error('Transactions are not enabled');
232
+ }
233
+ if (this.currentTransaction) {
234
+ throw new Error('A transaction is already in progress');
235
+ }
236
+ const id = `tx-${Date.now()}-${++this.transactionCounter}`;
237
+ this.currentTransaction = {
238
+ id,
239
+ startedAt: new Date(),
240
+ operations: [],
241
+ status: 'pending',
242
+ };
243
+ this.transactions.set(id, this.currentTransaction);
244
+ return id;
245
+ }
246
+ /**
247
+ * Commit the current transaction
248
+ */
249
+ async commit() {
250
+ if (!this.currentTransaction) {
251
+ throw new Error('No transaction in progress');
252
+ }
253
+ this.currentTransaction.status = 'committed';
254
+ this.currentTransaction.completedAt = new Date();
255
+ this.currentTransaction = null;
256
+ }
257
+ /**
258
+ * Rollback the current transaction
259
+ */
260
+ async rollback() {
261
+ if (!this.currentTransaction) {
262
+ throw new Error('No transaction in progress');
263
+ }
264
+ // Reverse operations
265
+ const operations = [...this.currentTransaction.operations].reverse();
266
+ for (const op of operations) {
267
+ switch (op.type) {
268
+ case 'set':
269
+ await this.adapter.delete(op.key);
270
+ break;
271
+ case 'update':
272
+ case 'delete':
273
+ if (op.previousValue !== undefined) {
274
+ await this.adapter.set(op.key, op.previousValue);
275
+ }
276
+ break;
277
+ }
278
+ }
279
+ this.currentTransaction.status = 'rolled-back';
280
+ this.currentTransaction.completedAt = new Date();
281
+ this.currentTransaction = null;
282
+ }
283
+ /**
284
+ * Create a checkpoint
285
+ */
286
+ async createCheckpoint(metadata) {
287
+ const keys = await this.adapter.list();
288
+ const data = {};
289
+ for (const key of keys) {
290
+ data[key] = await this.adapter.get(key);
291
+ }
292
+ const checkpoint = {
293
+ id: `cp-${Date.now()}-${++this.checkpointCounter}`,
294
+ timestamp: new Date(),
295
+ data,
296
+ checksum: this.calculateChecksum(data),
297
+ version: this.version,
298
+ metadata,
299
+ };
300
+ this.checkpoints.push(checkpoint);
301
+ // Enforce max checkpoints
302
+ while (this.checkpoints.length > this.config.maxCheckpoints) {
303
+ this.checkpoints.shift();
304
+ }
305
+ return checkpoint;
306
+ }
307
+ /**
308
+ * Restore from checkpoint
309
+ */
310
+ async restoreCheckpoint(checkpointId) {
311
+ const checkpoint = this.checkpoints.find((c) => c.id === checkpointId);
312
+ if (!checkpoint) {
313
+ return {
314
+ success: false,
315
+ dataRecovered: false,
316
+ itemsRecovered: 0,
317
+ errors: [`Checkpoint ${checkpointId} not found`],
318
+ warnings: [],
319
+ };
320
+ }
321
+ // Verify checkpoint integrity
322
+ const currentChecksum = this.calculateChecksum(checkpoint.data);
323
+ if (currentChecksum !== checkpoint.checksum) {
324
+ return {
325
+ success: false,
326
+ checkpoint,
327
+ dataRecovered: false,
328
+ itemsRecovered: 0,
329
+ errors: ['Checkpoint data integrity check failed'],
330
+ warnings: [],
331
+ };
332
+ }
333
+ // Clear current data
334
+ await this.adapter.clear();
335
+ // Restore data
336
+ const data = checkpoint.data;
337
+ let itemsRecovered = 0;
338
+ const errors = [];
339
+ for (const [key, value] of Object.entries(data)) {
340
+ try {
341
+ await this.adapter.set(key, value);
342
+ itemsRecovered++;
343
+ }
344
+ catch (error) {
345
+ errors.push(`Failed to restore ${key}: ${error.message}`);
346
+ }
347
+ }
348
+ this.version = checkpoint.version;
349
+ return {
350
+ success: errors.length === 0,
351
+ checkpoint,
352
+ dataRecovered: true,
353
+ itemsRecovered,
354
+ errors,
355
+ warnings: [],
356
+ };
357
+ }
358
+ /**
359
+ * Restore from latest checkpoint
360
+ */
361
+ async restoreLatest() {
362
+ if (this.checkpoints.length === 0) {
363
+ return {
364
+ success: false,
365
+ dataRecovered: false,
366
+ itemsRecovered: 0,
367
+ errors: ['No checkpoints available'],
368
+ warnings: [],
369
+ };
370
+ }
371
+ const latestCheckpoint = this.checkpoints[this.checkpoints.length - 1];
372
+ return this.restoreCheckpoint(latestCheckpoint.id);
373
+ }
374
+ /**
375
+ * Get all checkpoints
376
+ */
377
+ getCheckpoints() {
378
+ return [...this.checkpoints];
379
+ }
380
+ /**
381
+ * Get latest checkpoint
382
+ */
383
+ getLatestCheckpoint() {
384
+ return this.checkpoints.length > 0
385
+ ? this.checkpoints[this.checkpoints.length - 1]
386
+ : null;
387
+ }
388
+ /**
389
+ * Verify data integrity
390
+ */
391
+ async verifyIntegrity() {
392
+ const keys = await this.adapter.list();
393
+ const errors = [];
394
+ const corruptedKeys = [];
395
+ for (const key of keys) {
396
+ try {
397
+ const data = (await this.adapter.get(key));
398
+ if (data && data.checksum) {
399
+ const currentChecksum = this.calculateChecksum(data.value);
400
+ if (currentChecksum !== data.checksum) {
401
+ errors.push(`Integrity check failed for key: ${key}`);
402
+ corruptedKeys.push(key);
403
+ }
404
+ }
405
+ }
406
+ catch (error) {
407
+ errors.push(`Error checking ${key}: ${error.message}`);
408
+ corruptedKeys.push(key);
409
+ }
410
+ }
411
+ return {
412
+ valid: errors.length === 0,
413
+ errors,
414
+ corruptedKeys,
415
+ };
416
+ }
417
+ /**
418
+ * Repair corrupted data
419
+ */
420
+ async repair() {
421
+ const integrity = await this.verifyIntegrity();
422
+ if (integrity.valid) {
423
+ return {
424
+ success: true,
425
+ dataRecovered: false,
426
+ itemsRecovered: 0,
427
+ errors: [],
428
+ warnings: [],
429
+ };
430
+ }
431
+ // Try to recover from checkpoint
432
+ if (this.checkpoints.length > 0) {
433
+ // Find a valid checkpoint
434
+ for (let i = this.checkpoints.length - 1; i >= 0; i--) {
435
+ const checkpoint = this.checkpoints[i];
436
+ const checksum = this.calculateChecksum(checkpoint.data);
437
+ if (checksum === checkpoint.checksum) {
438
+ return this.restoreCheckpoint(checkpoint.id);
439
+ }
440
+ }
441
+ }
442
+ // No valid checkpoint, delete corrupted keys
443
+ const errors = [];
444
+ let itemsRecovered = 0;
445
+ for (const key of integrity.corruptedKeys) {
446
+ try {
447
+ await this.adapter.delete(key);
448
+ itemsRecovered++;
449
+ }
450
+ catch (error) {
451
+ errors.push(`Failed to remove corrupted key ${key}: ${error.message}`);
452
+ }
453
+ }
454
+ return {
455
+ success: errors.length === 0,
456
+ dataRecovered: false,
457
+ itemsRecovered,
458
+ errors,
459
+ warnings: [`${integrity.corruptedKeys.length} corrupted items were removed`],
460
+ };
461
+ }
462
+ /**
463
+ * Get statistics
464
+ */
465
+ async getStatistics() {
466
+ const keys = await this.adapter.list();
467
+ let storageSize = 0;
468
+ let corruptedItems = 0;
469
+ for (const key of keys) {
470
+ try {
471
+ const data = await this.adapter.get(key);
472
+ if (data) {
473
+ storageSize += JSON.stringify(data).length;
474
+ const typedData = data;
475
+ if (typedData.checksum) {
476
+ const checksum = this.calculateChecksum(typedData.value);
477
+ if (checksum !== typedData.checksum) {
478
+ corruptedItems++;
479
+ }
480
+ }
481
+ }
482
+ }
483
+ catch {
484
+ corruptedItems++;
485
+ }
486
+ }
487
+ const latestCheckpoint = this.getLatestCheckpoint();
488
+ return {
489
+ totalItems: keys.length,
490
+ totalCheckpoints: this.checkpoints.length,
491
+ pendingTransactions: [...this.transactions.values()].filter((t) => t.status === 'pending').length,
492
+ lastCheckpoint: latestCheckpoint?.timestamp,
493
+ storageSize,
494
+ corruptedItems,
495
+ };
496
+ }
497
+ /**
498
+ * Export all data
499
+ */
500
+ async export() {
501
+ const keys = await this.adapter.list();
502
+ const data = {};
503
+ for (const key of keys) {
504
+ data[key] = await this.adapter.get(key);
505
+ }
506
+ return {
507
+ data,
508
+ checkpoints: [...this.checkpoints],
509
+ version: this.version,
510
+ exportedAt: new Date(),
511
+ };
512
+ }
513
+ /**
514
+ * Import data
515
+ */
516
+ async import(exportData) {
517
+ await this.adapter.clear();
518
+ for (const [key, value] of Object.entries(exportData.data)) {
519
+ await this.adapter.set(key, value);
520
+ }
521
+ if (exportData.checkpoints) {
522
+ this.checkpoints = [...exportData.checkpoints];
523
+ }
524
+ if (exportData.version !== undefined) {
525
+ this.version = exportData.version;
526
+ }
527
+ }
528
+ /**
529
+ * Calculate checksum
530
+ */
531
+ calculateChecksum(data) {
532
+ const json = JSON.stringify(data);
533
+ return createHash('sha256').update(json).digest('hex');
534
+ }
535
+ }
536
+ /**
537
+ * Create data persistence instance
538
+ */
539
+ export function createDataPersistence(config) {
540
+ return new DataPersistence(config);
541
+ }
542
+ /**
543
+ * Write-ahead log
544
+ */
545
+ export class WriteAheadLog {
546
+ log = [];
547
+ committed = new Set();
548
+ /**
549
+ * Append operation to log
550
+ */
551
+ append(operation) {
552
+ this.log.push(operation);
553
+ }
554
+ /**
555
+ * Mark operations as committed
556
+ */
557
+ commit(transactionId) {
558
+ this.committed.add(transactionId);
559
+ }
560
+ /**
561
+ * Get uncommitted operations
562
+ */
563
+ getUncommitted() {
564
+ return this.log.filter((op) => !this.committed.has(op.key));
565
+ }
566
+ /**
567
+ * Clear committed operations
568
+ */
569
+ cleanup() {
570
+ this.log = this.getUncommitted();
571
+ }
572
+ /**
573
+ * Get all operations
574
+ */
575
+ getAll() {
576
+ return [...this.log];
577
+ }
578
+ /**
579
+ * Clear log
580
+ */
581
+ clear() {
582
+ this.log = [];
583
+ this.committed.clear();
584
+ }
585
+ }
586
+ //# sourceMappingURL=data-persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-persistence.js","sourceRoot":"","sources":["../../src/error/data-persistence.ts"],"names":[],"mappings":"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"}