noormme 1.0.6 → 1.2.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 (249) hide show
  1. package/README.md +92 -63
  2. package/dist/cjs/agentic/ActionJournal.js +13 -9
  3. package/dist/cjs/agentic/CapabilityManager.d.ts +9 -4
  4. package/dist/cjs/agentic/CapabilityManager.js +113 -17
  5. package/dist/cjs/agentic/CognitiveRepository.js +19 -9
  6. package/dist/cjs/agentic/ContextBuffer.js +24 -12
  7. package/dist/cjs/agentic/Cortex.d.ts +8 -1
  8. package/dist/cjs/agentic/Cortex.js +30 -7
  9. package/dist/cjs/agentic/EpisodicMemory.js +7 -5
  10. package/dist/cjs/agentic/PersonaManager.js +16 -8
  11. package/dist/cjs/agentic/PolicyEnforcer.js +31 -12
  12. package/dist/cjs/agentic/ResourceMonitor.js +4 -4
  13. package/dist/cjs/agentic/SessionCompressor.js +22 -14
  14. package/dist/cjs/agentic/SessionManager.js +36 -18
  15. package/dist/cjs/agentic/VectorIndexer.js +22 -18
  16. package/dist/cjs/agentic/improvement/AblationEngine.js +22 -15
  17. package/dist/cjs/agentic/improvement/ActionRefiner.js +12 -10
  18. package/dist/cjs/agentic/improvement/ConflictResolver.js +5 -5
  19. package/dist/cjs/agentic/improvement/CortexJanitor.d.ts +1 -1
  20. package/dist/cjs/agentic/improvement/CortexJanitor.js +64 -27
  21. package/dist/cjs/agentic/improvement/CuriosityEngine.d.ts +2 -2
  22. package/dist/cjs/agentic/improvement/CuriosityEngine.js +68 -59
  23. package/dist/cjs/agentic/improvement/EvolutionRitual.d.ts +24 -0
  24. package/dist/cjs/agentic/improvement/EvolutionRitual.js +91 -0
  25. package/dist/cjs/agentic/improvement/EvolutionaryPilot.d.ts +5 -0
  26. package/dist/cjs/agentic/improvement/EvolutionaryPilot.js +80 -7
  27. package/dist/cjs/agentic/improvement/GoalArchitect.d.ts +2 -2
  28. package/dist/cjs/agentic/improvement/GoalArchitect.js +20 -18
  29. package/dist/cjs/agentic/improvement/GovernanceManager.d.ts +1 -1
  30. package/dist/cjs/agentic/improvement/GovernanceManager.js +85 -49
  31. package/dist/cjs/agentic/improvement/HiveLink.d.ts +9 -0
  32. package/dist/cjs/agentic/improvement/HiveLink.js +120 -26
  33. package/dist/cjs/agentic/improvement/KnowledgeDistiller.d.ts +2 -0
  34. package/dist/cjs/agentic/improvement/KnowledgeDistiller.js +101 -47
  35. package/dist/cjs/agentic/improvement/RecursiveReasoner.d.ts +7 -1
  36. package/dist/cjs/agentic/improvement/RecursiveReasoner.js +106 -22
  37. package/dist/cjs/agentic/improvement/ReflectionEngine.js +10 -8
  38. package/dist/cjs/agentic/improvement/RitualOrchestrator.js +34 -22
  39. package/dist/cjs/agentic/improvement/RuleEngine.js +22 -17
  40. package/dist/cjs/agentic/improvement/SelfEvolution.js +24 -18
  41. package/dist/cjs/agentic/improvement/SelfTestRegistry.js +18 -15
  42. package/dist/cjs/agentic/improvement/SkillSynthesizer.d.ts +48 -0
  43. package/dist/cjs/agentic/improvement/SkillSynthesizer.js +288 -0
  44. package/dist/cjs/agentic/improvement/SovereignMetrics.js +19 -17
  45. package/dist/cjs/agentic/improvement/StrategicPlanner.d.ts +1 -1
  46. package/dist/cjs/agentic/improvement/StrategicPlanner.js +129 -55
  47. package/dist/cjs/agentic/telemetry/CognitiveSynthesizer.js +26 -12
  48. package/dist/cjs/agentic/telemetry/EventHarvester.js +3 -2
  49. package/dist/cjs/agentic/telemetry/ResearchAlchemist.js +13 -4
  50. package/dist/cjs/cache/cache-manager.js +7 -4
  51. package/dist/cjs/cli/commands/analyze.js +5 -4
  52. package/dist/cjs/cli/commands/generate.js +81 -44
  53. package/dist/cjs/cli/commands/init.js +7 -3
  54. package/dist/cjs/cli/commands/inspect.js +139 -36
  55. package/dist/cjs/cli/commands/migrate.js +5 -4
  56. package/dist/cjs/cli/commands/optimize.js +4 -4
  57. package/dist/cjs/cli/commands/status.js +9 -7
  58. package/dist/cjs/cli/commands/watch.js +7 -6
  59. package/dist/cjs/cli/index.js +2 -2
  60. package/dist/cjs/cli/ui/spinner.d.ts +15 -0
  61. package/dist/cjs/cli/ui/spinner.js +76 -0
  62. package/dist/cjs/dialect/database-introspector.js +3 -1
  63. package/dist/cjs/dialect/postgresql/postgresql-driver.js +3 -1
  64. package/dist/cjs/dialect/postgresql/postgresql-features.js +18 -8
  65. package/dist/cjs/dialect/postgresql/postgresql-introspector.js +2 -2
  66. package/dist/cjs/dialect/sqlite/sqlite-auto-indexer.js +47 -33
  67. package/dist/cjs/dialect/sqlite/sqlite-auto-optimizer.js +8 -7
  68. package/dist/cjs/dialect/sqlite/sqlite-driver.js +2 -2
  69. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +15 -12
  70. package/dist/cjs/edge-runtime/edge-config.js +21 -19
  71. package/dist/cjs/errors/NoormError.js +22 -20
  72. package/dist/cjs/helpers/agent-schema.js +3 -0
  73. package/dist/cjs/helpers/postgresql.js +7 -4
  74. package/dist/cjs/helpers/schema-evolution.js +31 -6
  75. package/dist/cjs/index.d.ts +18 -16
  76. package/dist/cjs/logging/logger.js +8 -4
  77. package/dist/cjs/migration/data_migrator.js +12 -11
  78. package/dist/cjs/migration/database_migration_manager.js +17 -13
  79. package/dist/cjs/migration/schema_differ.js +22 -14
  80. package/dist/cjs/migration/schema_introspector.js +8 -8
  81. package/dist/cjs/migration/type_mapper.js +68 -67
  82. package/dist/cjs/noormme.js +54 -37
  83. package/dist/cjs/performance/index.js +5 -5
  84. package/dist/cjs/performance/query-optimizer.js +26 -21
  85. package/dist/cjs/performance/services/cache-service.js +26 -16
  86. package/dist/cjs/performance/services/connection-factory.js +28 -23
  87. package/dist/cjs/performance/services/metrics-collector.js +41 -36
  88. package/dist/cjs/performance/utils/query-parser.js +15 -16
  89. package/dist/cjs/relationships/relationship-engine.js +10 -8
  90. package/dist/cjs/repository/repository-factory.js +97 -38
  91. package/dist/cjs/schema/core/coordinators/schema-discovery.coordinator.js +1 -3
  92. package/dist/cjs/schema/core/discovery/relationship-discovery.js +16 -16
  93. package/dist/cjs/schema/core/discovery/table-metadata-discovery.js +9 -9
  94. package/dist/cjs/schema/core/discovery/view-discovery.js +5 -4
  95. package/dist/cjs/schema/core/factories/discovery-factory.js +4 -4
  96. package/dist/cjs/schema/core/utils/name-generator.js +14 -5
  97. package/dist/cjs/schema/core/utils/type-mapper.js +24 -24
  98. package/dist/cjs/schema/dialects/postgresql/postgresql-discovery.coordinator.js +8 -7
  99. package/dist/cjs/schema/dialects/sqlite/discovery/sqlite-constraint-discovery.js +17 -15
  100. package/dist/cjs/schema/dialects/sqlite/discovery/sqlite-index-discovery.js +8 -8
  101. package/dist/cjs/schema/dialects/sqlite/introspection/sqlite-schema-introspector.js +6 -11
  102. package/dist/cjs/schema/dialects/sqlite/sqlite-discovery.coordinator.js +14 -13
  103. package/dist/cjs/schema/test/basic-schema-test.js +11 -9
  104. package/dist/cjs/schema/test/dialect-capabilities.test.js +6 -6
  105. package/dist/cjs/schema/test/discovery-factory.test.js +2 -2
  106. package/dist/cjs/schema/test/error-handling.test.js +8 -6
  107. package/dist/cjs/schema/test/integration.test.js +24 -18
  108. package/dist/cjs/schema/test/schema-discovery-coordinator.test.js +9 -9
  109. package/dist/cjs/schema/test/simple-schema-test.js +9 -9
  110. package/dist/cjs/schema/test/sqlite-discovery-coordinator.test.js +64 -48
  111. package/dist/cjs/schema/test/test-runner.js +3 -3
  112. package/dist/cjs/sqlite-migration/index.d.ts +2 -2
  113. package/dist/cjs/sqlite-migration/sqlite-migration-manager.js +21 -17
  114. package/dist/cjs/sqlite-migration/sqlite-migration-provider.js +38 -34
  115. package/dist/cjs/testing/test-utils.js +36 -34
  116. package/dist/cjs/types/index.d.ts +61 -4
  117. package/dist/cjs/types/index.js +6 -3
  118. package/dist/cjs/types/type-generator.js +46 -42
  119. package/dist/cjs/util/safe-sql-helpers.js +1 -1
  120. package/dist/cjs/util/security-validator.js +20 -9
  121. package/dist/cjs/utils/errorHelpers.js +20 -10
  122. package/dist/cjs/watch/schema-watcher.js +22 -23
  123. package/dist/esm/agentic/ActionJournal.js +13 -9
  124. package/dist/esm/agentic/CapabilityManager.d.ts +9 -4
  125. package/dist/esm/agentic/CapabilityManager.js +113 -17
  126. package/dist/esm/agentic/CognitiveRepository.js +19 -9
  127. package/dist/esm/agentic/ContextBuffer.js +24 -12
  128. package/dist/esm/agentic/Cortex.d.ts +8 -1
  129. package/dist/esm/agentic/Cortex.js +30 -7
  130. package/dist/esm/agentic/EpisodicMemory.js +7 -5
  131. package/dist/esm/agentic/PersonaManager.js +16 -8
  132. package/dist/esm/agentic/PolicyEnforcer.js +31 -12
  133. package/dist/esm/agentic/ResourceMonitor.js +4 -4
  134. package/dist/esm/agentic/SessionCompressor.js +22 -14
  135. package/dist/esm/agentic/SessionManager.js +36 -18
  136. package/dist/esm/agentic/VectorIndexer.js +22 -18
  137. package/dist/esm/agentic/improvement/AblationEngine.js +22 -15
  138. package/dist/esm/agentic/improvement/ActionRefiner.js +12 -10
  139. package/dist/esm/agentic/improvement/ConflictResolver.js +5 -5
  140. package/dist/esm/agentic/improvement/CortexJanitor.d.ts +1 -1
  141. package/dist/esm/agentic/improvement/CortexJanitor.js +64 -27
  142. package/dist/esm/agentic/improvement/CuriosityEngine.d.ts +2 -2
  143. package/dist/esm/agentic/improvement/CuriosityEngine.js +68 -59
  144. package/dist/esm/agentic/improvement/EvolutionRitual.d.ts +24 -0
  145. package/dist/esm/agentic/improvement/EvolutionRitual.js +88 -0
  146. package/dist/esm/agentic/improvement/EvolutionaryPilot.d.ts +5 -0
  147. package/dist/esm/agentic/improvement/EvolutionaryPilot.js +80 -7
  148. package/dist/esm/agentic/improvement/GoalArchitect.d.ts +2 -2
  149. package/dist/esm/agentic/improvement/GoalArchitect.js +20 -18
  150. package/dist/esm/agentic/improvement/GovernanceManager.d.ts +1 -1
  151. package/dist/esm/agentic/improvement/GovernanceManager.js +85 -49
  152. package/dist/esm/agentic/improvement/HiveLink.d.ts +9 -0
  153. package/dist/esm/agentic/improvement/HiveLink.js +120 -26
  154. package/dist/esm/agentic/improvement/KnowledgeDistiller.d.ts +2 -0
  155. package/dist/esm/agentic/improvement/KnowledgeDistiller.js +101 -47
  156. package/dist/esm/agentic/improvement/RecursiveReasoner.d.ts +7 -1
  157. package/dist/esm/agentic/improvement/RecursiveReasoner.js +106 -22
  158. package/dist/esm/agentic/improvement/ReflectionEngine.js +10 -8
  159. package/dist/esm/agentic/improvement/RitualOrchestrator.js +34 -22
  160. package/dist/esm/agentic/improvement/RuleEngine.js +22 -17
  161. package/dist/esm/agentic/improvement/SelfEvolution.js +24 -18
  162. package/dist/esm/agentic/improvement/SelfTestRegistry.js +18 -15
  163. package/dist/esm/agentic/improvement/SkillSynthesizer.d.ts +48 -0
  164. package/dist/esm/agentic/improvement/SkillSynthesizer.js +285 -0
  165. package/dist/esm/agentic/improvement/SovereignMetrics.js +19 -17
  166. package/dist/esm/agentic/improvement/StrategicPlanner.d.ts +1 -1
  167. package/dist/esm/agentic/improvement/StrategicPlanner.js +129 -55
  168. package/dist/esm/agentic/telemetry/CognitiveSynthesizer.js +26 -12
  169. package/dist/esm/agentic/telemetry/EventHarvester.js +3 -2
  170. package/dist/esm/agentic/telemetry/ResearchAlchemist.js +13 -4
  171. package/dist/esm/cache/cache-manager.js +7 -4
  172. package/dist/esm/cli/commands/analyze.js +5 -4
  173. package/dist/esm/cli/commands/generate.js +82 -45
  174. package/dist/esm/cli/commands/init.js +8 -4
  175. package/dist/esm/cli/commands/inspect.js +140 -37
  176. package/dist/esm/cli/commands/migrate.js +5 -4
  177. package/dist/esm/cli/commands/optimize.js +4 -4
  178. package/dist/esm/cli/commands/status.js +9 -7
  179. package/dist/esm/cli/commands/watch.js +7 -6
  180. package/dist/esm/cli/index.js +2 -2
  181. package/dist/esm/cli/ui/spinner.d.ts +15 -0
  182. package/dist/esm/cli/ui/spinner.js +70 -0
  183. package/dist/esm/dialect/database-introspector.js +3 -1
  184. package/dist/esm/dialect/postgresql/postgresql-driver.js +3 -1
  185. package/dist/esm/dialect/postgresql/postgresql-features.js +18 -8
  186. package/dist/esm/dialect/postgresql/postgresql-introspector.js +2 -2
  187. package/dist/esm/dialect/sqlite/sqlite-auto-indexer.js +47 -33
  188. package/dist/esm/dialect/sqlite/sqlite-auto-optimizer.js +8 -7
  189. package/dist/esm/dialect/sqlite/sqlite-driver.js +2 -2
  190. package/dist/esm/dialect/sqlite/sqlite-introspector.js +15 -12
  191. package/dist/esm/dynamic/dynamic.js +1 -1
  192. package/dist/esm/edge-runtime/edge-config.js +21 -19
  193. package/dist/esm/errors/NoormError.js +22 -20
  194. package/dist/esm/helpers/agent-schema.js +3 -0
  195. package/dist/esm/helpers/postgresql.js +7 -4
  196. package/dist/esm/helpers/schema-evolution.js +31 -6
  197. package/dist/esm/index.d.ts +18 -16
  198. package/dist/esm/index.js +2 -2
  199. package/dist/esm/logging/logger.js +8 -4
  200. package/dist/esm/migration/data_migrator.js +12 -11
  201. package/dist/esm/migration/database_migration_manager.js +18 -14
  202. package/dist/esm/migration/schema_differ.js +22 -14
  203. package/dist/esm/migration/schema_introspector.js +8 -8
  204. package/dist/esm/migration/type_mapper.js +68 -67
  205. package/dist/esm/noormme.js +54 -37
  206. package/dist/esm/performance/index.js +5 -5
  207. package/dist/esm/performance/query-optimizer.js +26 -21
  208. package/dist/esm/performance/services/cache-service.js +26 -16
  209. package/dist/esm/performance/services/connection-factory.js +28 -23
  210. package/dist/esm/performance/services/metrics-collector.js +41 -36
  211. package/dist/esm/performance/utils/query-parser.js +15 -16
  212. package/dist/esm/raw-builder/sql.js +1 -1
  213. package/dist/esm/relationships/relationship-engine.js +10 -8
  214. package/dist/esm/repository/repository-factory.js +98 -39
  215. package/dist/esm/schema/builders/alter-table-add-index-builder.js +1 -1
  216. package/dist/esm/schema/builders/create-index-builder.js +2 -2
  217. package/dist/esm/schema/core/coordinators/schema-discovery.coordinator.js +1 -3
  218. package/dist/esm/schema/core/discovery/relationship-discovery.js +16 -16
  219. package/dist/esm/schema/core/discovery/table-metadata-discovery.js +9 -9
  220. package/dist/esm/schema/core/discovery/view-discovery.js +5 -4
  221. package/dist/esm/schema/core/factories/discovery-factory.js +4 -4
  222. package/dist/esm/schema/core/utils/name-generator.js +14 -5
  223. package/dist/esm/schema/core/utils/type-mapper.js +24 -24
  224. package/dist/esm/schema/dialects/postgresql/postgresql-discovery.coordinator.js +8 -7
  225. package/dist/esm/schema/dialects/sqlite/discovery/sqlite-constraint-discovery.js +17 -15
  226. package/dist/esm/schema/dialects/sqlite/discovery/sqlite-index-discovery.js +8 -8
  227. package/dist/esm/schema/dialects/sqlite/introspection/sqlite-schema-introspector.js +6 -11
  228. package/dist/esm/schema/dialects/sqlite/sqlite-discovery.coordinator.js +14 -13
  229. package/dist/esm/schema/test/basic-schema-test.js +11 -9
  230. package/dist/esm/schema/test/dialect-capabilities.test.js +6 -6
  231. package/dist/esm/schema/test/discovery-factory.test.js +2 -2
  232. package/dist/esm/schema/test/error-handling.test.js +8 -6
  233. package/dist/esm/schema/test/integration.test.js +24 -18
  234. package/dist/esm/schema/test/schema-discovery-coordinator.test.js +9 -9
  235. package/dist/esm/schema/test/simple-schema-test.js +9 -9
  236. package/dist/esm/schema/test/sqlite-discovery-coordinator.test.js +64 -48
  237. package/dist/esm/schema/test/test-runner.js +3 -3
  238. package/dist/esm/sqlite-migration/index.d.ts +2 -2
  239. package/dist/esm/sqlite-migration/sqlite-migration-manager.js +21 -17
  240. package/dist/esm/sqlite-migration/sqlite-migration-provider.js +38 -34
  241. package/dist/esm/testing/test-utils.js +36 -34
  242. package/dist/esm/types/index.d.ts +61 -4
  243. package/dist/esm/types/index.js +6 -3
  244. package/dist/esm/types/type-generator.js +46 -42
  245. package/dist/esm/util/safe-sql-helpers.js +1 -1
  246. package/dist/esm/util/security-validator.js +20 -9
  247. package/dist/esm/utils/errorHelpers.js +21 -11
  248. package/dist/esm/watch/schema-watcher.js +22 -23
  249. package/package.json +40 -44
@@ -7,7 +7,7 @@ const mockKysely = {
7
7
  selectFrom: jest.fn(),
8
8
  select: jest.fn(),
9
9
  where: jest.fn(),
10
- execute: jest.fn()
10
+ execute: jest.fn(),
11
11
  };
12
12
  // Mock DiscoveryFactory
13
13
  const mockFactory = {
@@ -20,7 +20,7 @@ const mockFactory = {
20
20
  createDiscoveryServices: jest.fn(),
21
21
  getDialectCapabilities: jest.fn(),
22
22
  isDialectSupported: jest.fn(),
23
- getSupportedDialects: jest.fn()
23
+ getSupportedDialects: jest.fn(),
24
24
  };
25
25
  // Mock SQLite coordinator
26
26
  const mockSQLiteCoordinator = {
@@ -33,7 +33,7 @@ const mockSQLiteCoordinator = {
33
33
  viewDiscovery: {},
34
34
  indexDiscovery: {},
35
35
  constraintDiscovery: {},
36
- enhanceTablesWithSQLiteMetadata: jest.fn()
36
+ enhanceTablesWithSQLiteMetadata: jest.fn(),
37
37
  };
38
38
  (0, globals_1.describe)('SchemaDiscoveryCoordinator', () => {
39
39
  let coordinator;
@@ -48,7 +48,7 @@ const mockSQLiteCoordinator = {
48
48
  relationshipDiscovery: {},
49
49
  viewDiscovery: {},
50
50
  indexDiscovery: {},
51
- constraintDiscovery: {}
51
+ constraintDiscovery: {},
52
52
  });
53
53
  mockFactory.getDialectCapabilities.mockReturnValue({
54
54
  supportsViews: true,
@@ -56,7 +56,7 @@ const mockSQLiteCoordinator = {
56
56
  supportsConstraints: true,
57
57
  supportsForeignKeys: true,
58
58
  supportsCheckConstraints: true,
59
- supportsDeferredConstraints: false
59
+ supportsDeferredConstraints: false,
60
60
  });
61
61
  mockFactory.isDialectSupported.mockReturnValue(true);
62
62
  coordinator = schema_discovery_coordinator_js_1.SchemaDiscoveryCoordinator.getInstance();
@@ -79,7 +79,7 @@ const mockSQLiteCoordinator = {
79
79
  views: [],
80
80
  indexes: [],
81
81
  constraints: [],
82
- relationships: []
82
+ relationships: [],
83
83
  };
84
84
  mockSQLiteCoordinator.discoverSchema.mockResolvedValue(mockSchemaInfo);
85
85
  const result = await coordinator.discoverSchema(mockKysely, {}, 'sqlite');
@@ -113,7 +113,7 @@ const mockSQLiteCoordinator = {
113
113
  supportsConstraints: true,
114
114
  supportsForeignKeys: true,
115
115
  supportsCheckConstraints: true,
116
- supportsDeferredConstraints: false
116
+ supportsDeferredConstraints: false,
117
117
  });
118
118
  });
119
119
  });
@@ -122,14 +122,14 @@ const mockSQLiteCoordinator = {
122
122
  const config = {
123
123
  excludeTables: ['migrations'],
124
124
  includeViews: true,
125
- customTypeMappings: { 'jsonb': 'Record<string, any>' }
125
+ customTypeMappings: { jsonb: 'Record<string, any>' },
126
126
  };
127
127
  const mockSchemaInfo = {
128
128
  tables: [],
129
129
  views: [],
130
130
  indexes: [],
131
131
  constraints: [],
132
- relationships: []
132
+ relationships: [],
133
133
  };
134
134
  mockSQLiteCoordinator.discoverSchema.mockResolvedValue(mockSchemaInfo);
135
135
  await coordinator.discoverSchema(mockKysely, config, 'sqlite');
@@ -8,52 +8,52 @@ describe('Schema Strategy - Basic Tests', () => {
8
8
  test('should verify DiscoveryFactory exists', () => {
9
9
  // Test that we can import the DiscoveryFactory
10
10
  expect(() => {
11
- const { DiscoveryFactory } = require('../core/factories/discovery-factory.js');
11
+ const { DiscoveryFactory, } = require('../core/factories/discovery-factory.js');
12
12
  return DiscoveryFactory;
13
13
  }).not.toThrow();
14
14
  });
15
15
  test('should verify SchemaDiscoveryCoordinator exists', () => {
16
16
  // Test that we can import the SchemaDiscoveryCoordinator
17
17
  expect(() => {
18
- const { SchemaDiscoveryCoordinator } = require('../core/coordinators/schema-discovery.coordinator.js');
18
+ const { SchemaDiscoveryCoordinator, } = require('../core/coordinators/schema-discovery.coordinator.js');
19
19
  return SchemaDiscoveryCoordinator;
20
20
  }).not.toThrow();
21
21
  });
22
22
  test('should verify SQLite coordinator exists', () => {
23
23
  // Test that we can import the SQLite coordinator
24
24
  expect(() => {
25
- const { SQLiteDiscoveryCoordinator } = require('../dialects/sqlite/sqlite-discovery.coordinator.js');
25
+ const { SQLiteDiscoveryCoordinator, } = require('../dialects/sqlite/sqlite-discovery.coordinator.js');
26
26
  return SQLiteDiscoveryCoordinator;
27
27
  }).not.toThrow();
28
28
  });
29
29
  test('should verify singleton pattern works for DiscoveryFactory', () => {
30
- const { DiscoveryFactory } = require('../core/factories/discovery-factory.js');
30
+ const { DiscoveryFactory, } = require('../core/factories/discovery-factory.js');
31
31
  const instance1 = DiscoveryFactory.getInstance();
32
32
  const instance2 = DiscoveryFactory.getInstance();
33
33
  expect(instance1).toBe(instance2);
34
34
  });
35
35
  test('should verify singleton pattern works for SchemaDiscoveryCoordinator', () => {
36
- const { SchemaDiscoveryCoordinator } = require('../core/coordinators/schema-discovery.coordinator.js');
36
+ const { SchemaDiscoveryCoordinator, } = require('../core/coordinators/schema-discovery.coordinator.js');
37
37
  const instance1 = SchemaDiscoveryCoordinator.getInstance();
38
38
  const instance2 = SchemaDiscoveryCoordinator.getInstance();
39
39
  expect(instance1).toBe(instance2);
40
40
  });
41
41
  test('should verify dialect support', () => {
42
- const { DiscoveryFactory } = require('../core/factories/discovery-factory.js');
42
+ const { DiscoveryFactory, } = require('../core/factories/discovery-factory.js');
43
43
  const factory = DiscoveryFactory.getInstance();
44
44
  expect(factory.isDialectSupported('postgresql')).toBe(true);
45
45
  expect(factory.isDialectSupported('sqlite')).toBe(true);
46
46
  expect(factory.isDialectSupported('mysql')).toBe(false);
47
47
  });
48
48
  test('should verify error handling for unsupported dialects', () => {
49
- const { DiscoveryFactory } = require('../core/factories/discovery-factory.js');
49
+ const { DiscoveryFactory, } = require('../core/factories/discovery-factory.js');
50
50
  const factory = DiscoveryFactory.getInstance();
51
51
  expect(() => {
52
52
  factory.createIndexDiscovery('oracle');
53
53
  }).toThrow('Unsupported dialect');
54
54
  });
55
55
  test('should verify PostgreSQL capabilities', () => {
56
- const { DiscoveryFactory } = require('../core/factories/discovery-factory.js');
56
+ const { DiscoveryFactory, } = require('../core/factories/discovery-factory.js');
57
57
  const factory = DiscoveryFactory.getInstance();
58
58
  const capabilities = factory.getDialectCapabilities('postgresql');
59
59
  expect(capabilities.supportsViews).toBe(true);
@@ -64,7 +64,7 @@ describe('Schema Strategy - Basic Tests', () => {
64
64
  expect(capabilities.supportsDeferredConstraints).toBe(true);
65
65
  });
66
66
  test('should verify SQLite capabilities', () => {
67
- const { DiscoveryFactory } = require('../core/factories/discovery-factory.js');
67
+ const { DiscoveryFactory, } = require('../core/factories/discovery-factory.js');
68
68
  const factory = DiscoveryFactory.getInstance();
69
69
  const capabilities = factory.getDialectCapabilities('sqlite');
70
70
  expect(capabilities.supportsViews).toBe(true);
@@ -11,15 +11,15 @@ const sqlite_constraint_discovery_js_1 = require("../dialects/sqlite/discovery/s
11
11
  const mockKysely = {
12
12
  selectFrom: jest.fn(),
13
13
  select: jest.fn(),
14
- execute: jest.fn()
14
+ execute: jest.fn(),
15
15
  };
16
16
  // Mock DatabaseIntrospector
17
17
  jest.mock('../../dialect/database-introspector.js', () => ({
18
18
  DatabaseIntrospector: jest.fn().mockImplementation(() => ({
19
19
  getTables: jest.fn(),
20
20
  getTableMetadata: jest.fn(),
21
- getViews: jest.fn()
22
- }))
21
+ getViews: jest.fn(),
22
+ })),
23
23
  }));
24
24
  const mockTableData = [
25
25
  {
@@ -27,19 +27,19 @@ const mockTableData = [
27
27
  columns: [
28
28
  { name: 'id', type: 'INTEGER', isPrimaryKey: true, isNullable: false },
29
29
  { name: 'email', type: 'TEXT', isNullable: false },
30
- { name: 'created_at', type: 'DATETIME', isNullable: false }
30
+ { name: 'created_at', type: 'DATETIME', isNullable: false },
31
31
  ],
32
- primaryKey: ['id']
32
+ primaryKey: ['id'],
33
33
  },
34
34
  {
35
35
  name: 'posts',
36
36
  columns: [
37
37
  { name: 'id', type: 'INTEGER', isPrimaryKey: true, isNullable: false },
38
38
  { name: 'user_id', type: 'INTEGER', isNullable: false },
39
- { name: 'title', type: 'TEXT', isNullable: false }
39
+ { name: 'title', type: 'TEXT', isNullable: false },
40
40
  ],
41
- primaryKey: ['id']
42
- }
41
+ primaryKey: ['id'],
42
+ },
43
43
  ];
44
44
  const mockIndexData = [
45
45
  {
@@ -47,23 +47,23 @@ const mockIndexData = [
47
47
  columns: ['email'],
48
48
  unique: true,
49
49
  isPrimary: false,
50
- definition: 'CREATE UNIQUE INDEX users_email_idx ON users(email)'
50
+ definition: 'CREATE UNIQUE INDEX users_email_idx ON users(email)',
51
51
  },
52
52
  {
53
53
  name: 'posts_user_id_idx',
54
54
  columns: ['user_id'],
55
55
  unique: false,
56
56
  isPrimary: false,
57
- definition: 'CREATE INDEX posts_user_id_idx ON posts(user_id)'
58
- }
57
+ definition: 'CREATE INDEX posts_user_id_idx ON posts(user_id)',
58
+ },
59
59
  ];
60
60
  const mockConstraintData = [
61
61
  {
62
62
  name: 'users_email_check',
63
63
  type: 'CHECK',
64
64
  definition: "email LIKE '%@%'",
65
- valid: true
66
- }
65
+ valid: true,
66
+ },
67
67
  ];
68
68
  const mockForeignKeyData = [
69
69
  {
@@ -72,8 +72,8 @@ const mockForeignKeyData = [
72
72
  referencedTable: 'users',
73
73
  referencedColumn: 'id',
74
74
  onDelete: 'CASCADE',
75
- onUpdate: 'NO ACTION'
76
- }
75
+ onUpdate: 'NO ACTION',
76
+ },
77
77
  ];
78
78
  const mockViewData = [
79
79
  {
@@ -81,9 +81,9 @@ const mockViewData = [
81
81
  definition: 'SELECT u.email, p.title FROM users u JOIN posts p ON u.id = p.user_id',
82
82
  columns: [
83
83
  { name: 'email', type: 'TEXT' },
84
- { name: 'title', type: 'TEXT' }
85
- ]
86
- }
84
+ { name: 'title', type: 'TEXT' },
85
+ ],
86
+ },
87
87
  ];
88
88
  const mockRelationshipData = [
89
89
  {
@@ -91,13 +91,13 @@ const mockRelationshipData = [
91
91
  fromColumn: 'user_id',
92
92
  toTable: 'users',
93
93
  toColumn: 'id',
94
- type: 'many-to-one'
95
- }
94
+ type: 'many-to-one',
95
+ },
96
96
  ];
97
97
  const mockTableSize = {
98
98
  pages: 10,
99
99
  size: 40960,
100
- estimatedRows: 100
100
+ estimatedRows: 100,
101
101
  };
102
102
  (0, globals_1.describe)('SQLiteDiscoveryCoordinator', () => {
103
103
  let coordinator;
@@ -112,35 +112,45 @@ const mockTableSize = {
112
112
  sqlite_discovery_coordinator_js_1.SQLiteDiscoveryCoordinator.instance = undefined;
113
113
  // Create mocks
114
114
  mockTableDiscovery = {
115
- discoverTables: jest.fn().mockResolvedValue(mockTableData)
115
+ discoverTables: jest.fn().mockResolvedValue(mockTableData),
116
116
  };
117
117
  mockRelationshipDiscovery = {
118
- discoverRelationships: jest.fn().mockResolvedValue(mockRelationshipData)
118
+ discoverRelationships: jest.fn().mockResolvedValue(mockRelationshipData),
119
119
  };
120
120
  mockViewDiscovery = {
121
- discoverViews: jest.fn().mockResolvedValue(mockViewData)
121
+ discoverViews: jest.fn().mockResolvedValue(mockViewData),
122
122
  };
123
123
  mockIndexDiscovery = {
124
124
  discoverTableIndexes: jest.fn().mockResolvedValue(mockIndexData),
125
125
  getTableSize: jest.fn().mockResolvedValue(mockTableSize),
126
126
  analyzeIndexEfficiency: jest.fn().mockReturnValue({
127
- recommendations: ['Consider using covering indexes for better performance']
128
- })
127
+ recommendations: [
128
+ 'Consider using covering indexes for better performance',
129
+ ],
130
+ }),
129
131
  };
130
132
  mockConstraintDiscovery = {
131
133
  isForeignKeySupportEnabled: jest.fn().mockResolvedValue(true),
132
134
  discoverTableConstraints: jest.fn().mockResolvedValue(mockConstraintData),
133
135
  getForeignKeyInfo: jest.fn().mockResolvedValue(mockForeignKeyData),
134
136
  analyzeConstraintCompatibility: jest.fn().mockReturnValue({
135
- recommendations: ['Consider optimizing constraint definitions']
136
- })
137
+ recommendations: ['Consider optimizing constraint definitions'],
138
+ }),
137
139
  };
138
140
  // Mock static methods
139
- jest.spyOn(table_metadata_discovery_js_1.TableMetadataDiscovery, 'getInstance').mockReturnValue(mockTableDiscovery);
140
- jest.spyOn(relationship_discovery_js_1.RelationshipDiscovery, 'getInstance').mockReturnValue(mockRelationshipDiscovery);
141
+ jest
142
+ .spyOn(table_metadata_discovery_js_1.TableMetadataDiscovery, 'getInstance')
143
+ .mockReturnValue(mockTableDiscovery);
144
+ jest
145
+ .spyOn(relationship_discovery_js_1.RelationshipDiscovery, 'getInstance')
146
+ .mockReturnValue(mockRelationshipDiscovery);
141
147
  jest.spyOn(view_discovery_js_1.ViewDiscovery, 'getInstance').mockReturnValue(mockViewDiscovery);
142
- jest.spyOn(sqlite_index_discovery_js_1.SQLiteIndexDiscovery, 'getInstance').mockReturnValue(mockIndexDiscovery);
143
- jest.spyOn(sqlite_constraint_discovery_js_1.SQLiteConstraintDiscovery, 'getInstance').mockReturnValue(mockConstraintDiscovery);
148
+ jest
149
+ .spyOn(sqlite_index_discovery_js_1.SQLiteIndexDiscovery, 'getInstance')
150
+ .mockReturnValue(mockIndexDiscovery);
151
+ jest
152
+ .spyOn(sqlite_constraint_discovery_js_1.SQLiteConstraintDiscovery, 'getInstance')
153
+ .mockReturnValue(mockConstraintDiscovery);
144
154
  coordinator = sqlite_discovery_coordinator_js_1.SQLiteDiscoveryCoordinator.getInstance();
145
155
  });
146
156
  (0, globals_1.afterEach)(() => {
@@ -190,8 +200,8 @@ const mockTableSize = {
190
200
  name: 'users_email_idx',
191
201
  columns: ['email'],
192
202
  unique: true,
193
- definition: 'CREATE UNIQUE INDEX users_email_idx ON users(email)'
194
- })
203
+ definition: 'CREATE UNIQUE INDEX users_email_idx ON users(email)',
204
+ }),
195
205
  ]),
196
206
  constraints: mockConstraintData,
197
207
  foreignKeys: globals_1.expect.arrayContaining([
@@ -200,10 +210,10 @@ const mockTableSize = {
200
210
  column: 'user_id',
201
211
  referencedTable: 'users',
202
212
  referencedColumn: 'id',
203
- onDelete: 'CASCADE'
204
- })
213
+ onDelete: 'CASCADE',
214
+ }),
205
215
  ]),
206
- tableSize: mockTableSize
216
+ tableSize: mockTableSize,
207
217
  });
208
218
  });
209
219
  (0, globals_1.it)('should skip views when includeViews is false', async () => {
@@ -219,7 +229,7 @@ const mockTableSize = {
219
229
  name: 'users',
220
230
  indexes: [],
221
231
  foreignKeys: [],
222
- tableSize: undefined
232
+ tableSize: undefined,
223
233
  });
224
234
  });
225
235
  (0, globals_1.it)('should handle constraint discovery errors gracefully', async () => {
@@ -249,7 +259,7 @@ const mockTableSize = {
249
259
  supportsAutoIncrement: true,
250
260
  supportsRowId: true,
251
261
  supportsTriggers: true,
252
- supportsFullTextSearch: true
262
+ supportsFullTextSearch: true,
253
263
  });
254
264
  });
255
265
  });
@@ -258,7 +268,7 @@ const mockTableSize = {
258
268
  mockConstraintDiscovery.isForeignKeySupportEnabled.mockResolvedValue(false);
259
269
  const tables = [
260
270
  { name: 'users', primaryKey: ['id'], indexes: [], foreignKeys: [] },
261
- { name: 'posts', primaryKey: ['id'], indexes: [], foreignKeys: [] }
271
+ { name: 'posts', primaryKey: ['id'], indexes: [], foreignKeys: [] },
262
272
  ];
263
273
  const recommendations = await coordinator.getRecommendations(mockKysely, tables);
264
274
  (0, globals_1.expect)(mockConstraintDiscovery.isForeignKeySupportEnabled).toHaveBeenCalled();
@@ -272,14 +282,16 @@ const mockTableSize = {
272
282
  });
273
283
  (0, globals_1.it)('should recommend enabling foreign keys when disabled', async () => {
274
284
  mockConstraintDiscovery.isForeignKeySupportEnabled.mockResolvedValue(false);
275
- const tables = [{ name: 'users', primaryKey: ['id'], indexes: [], foreignKeys: [] }];
285
+ const tables = [
286
+ { name: 'users', primaryKey: ['id'], indexes: [], foreignKeys: [] },
287
+ ];
276
288
  const recommendations = await coordinator.getRecommendations(mockKysely, tables);
277
289
  (0, globals_1.expect)(recommendations).toContain('Consider enabling foreign key support with PRAGMA foreign_keys = ON for better data integrity');
278
290
  });
279
291
  (0, globals_1.it)('should recommend primary key for tables without one', async () => {
280
292
  const tables = [
281
293
  { name: 'users', primaryKey: [], indexes: [], foreignKeys: [] },
282
- { name: 'posts', primaryKey: ['id'], indexes: [], foreignKeys: [] }
294
+ { name: 'posts', primaryKey: ['id'], indexes: [], foreignKeys: [] },
283
295
  ];
284
296
  const recommendations = await coordinator.getRecommendations(mockKysely, tables);
285
297
  (0, globals_1.expect)(recommendations).toContain('Table users should have a primary key for better performance');
@@ -287,9 +299,13 @@ const mockTableSize = {
287
299
  (0, globals_1.it)('should handle recommendation errors gracefully', async () => {
288
300
  mockConstraintDiscovery.isForeignKeySupportEnabled.mockResolvedValue(false);
289
301
  mockIndexDiscovery.discoverTableIndexes.mockRejectedValue(new Error('Index analysis failed'));
290
- const tables = [{ name: 'users', primaryKey: ['id'], indexes: [], foreignKeys: [] }];
302
+ const tables = [
303
+ { name: 'users', primaryKey: ['id'], indexes: [], foreignKeys: [] },
304
+ ];
291
305
  const recommendations = await coordinator.getRecommendations(mockKysely, tables);
292
- (0, globals_1.expect)(recommendations).toEqual(['Consider enabling foreign key support with PRAGMA foreign_keys = ON for better data integrity']);
306
+ (0, globals_1.expect)(recommendations).toEqual([
307
+ 'Consider enabling foreign key support with PRAGMA foreign_keys = ON for better data integrity',
308
+ ]);
293
309
  });
294
310
  (0, globals_1.it)('should handle empty tables array', async () => {
295
311
  const recommendations = await coordinator.getRecommendations(mockKysely, []);
@@ -305,7 +321,7 @@ const mockTableSize = {
305
321
  'Use WAL mode for better concurrency: PRAGMA journal_mode = WAL',
306
322
  'Set appropriate cache size: PRAGMA cache_size = -64000',
307
323
  'Enable query optimization: PRAGMA optimize',
308
- 'Consider using prepared statements for better performance'
324
+ 'Consider using prepared statements for better performance',
309
325
  ]);
310
326
  });
311
327
  });
@@ -351,14 +367,14 @@ const mockTableSize = {
351
367
  const config = {
352
368
  excludeTables: ['temp_*'],
353
369
  includeViews: true,
354
- customTypeMappings: { 'INTEGER': 'number' }
370
+ customTypeMappings: { INTEGER: 'number' },
355
371
  };
356
372
  await coordinator.discoverSchema(mockKysely, config);
357
373
  (0, globals_1.expect)(mockTableDiscovery.discoverTables).toHaveBeenCalledWith(globals_1.expect.any(Object), // DatabaseIntrospector
358
374
  {
359
375
  excludeTables: ['temp_*'],
360
376
  includeViews: true,
361
- customTypeMappings: { 'INTEGER': 'number' }
377
+ customTypeMappings: { INTEGER: 'number' },
362
378
  });
363
379
  });
364
380
  (0, globals_1.it)('should use default configuration when none provided', async () => {
@@ -366,7 +382,7 @@ const mockTableSize = {
366
382
  (0, globals_1.expect)(mockTableDiscovery.discoverTables).toHaveBeenCalledWith(globals_1.expect.any(Object), {
367
383
  excludeTables: undefined,
368
384
  includeViews: undefined,
369
- customTypeMappings: undefined
385
+ customTypeMappings: undefined,
370
386
  });
371
387
  });
372
388
  });
@@ -77,7 +77,7 @@ exports.default = {
77
77
  'sqlite-discovery-coordinator.test.ts',
78
78
  'dialect-capabilities.test.ts',
79
79
  'error-handling.test.ts',
80
- 'integration.test.ts'
80
+ 'integration.test.ts',
81
81
  ],
82
82
  coverage: {
83
83
  factory: '100%',
@@ -85,6 +85,6 @@ exports.default = {
85
85
  sqlite: '100%',
86
86
  capabilities: '100%',
87
87
  errorHandling: '100%',
88
- integration: '100%'
89
- }
88
+ integration: '100%',
89
+ },
90
90
  };
@@ -1,6 +1,6 @@
1
1
  export { SQLiteMigrationManager } from './sqlite-migration-manager.js';
2
2
  export { SQLiteMigrationProvider } from './sqlite-migration-provider.js';
3
- export type { SQLiteMigrationConfig, SQLiteMigrationResult, SQLiteMigrationPlan } from './sqlite-migration-manager.js';
4
- export type { SQLiteMigrationFile, SQLiteMigrationProviderConfig } from './sqlite-migration-provider.js';
3
+ export type { SQLiteMigrationConfig, SQLiteMigrationResult, SQLiteMigrationPlan, } from './sqlite-migration-manager.js';
4
+ export type { SQLiteMigrationFile, SQLiteMigrationProviderConfig, } from './sqlite-migration-provider.js';
5
5
  export declare function createSQLiteMigrationManager(db: any, config?: Partial<import('./sqlite-migration-manager.js').SQLiteMigrationConfig>, logger?: import('../logging/logger.js').Logger): Promise<import('./sqlite-migration-manager.js').SQLiteMigrationManager>;
6
6
  export declare function createSQLiteMigrationProvider(config?: Partial<import('./sqlite-migration-provider.js').SQLiteMigrationProviderConfig>, logger?: import('../logging/logger.js').Logger): Promise<import('./sqlite-migration-provider.js').SQLiteMigrationProvider>;
@@ -66,12 +66,12 @@ class SQLiteMigrationManager {
66
66
  migrationDirectory: './migrations',
67
67
  backupBeforeMigration: true,
68
68
  dryRun: false,
69
- ...config
69
+ ...config,
70
70
  };
71
71
  this.optimizer = sqlite_auto_optimizer_js_1.SQLiteAutoOptimizer.getInstance(logger);
72
72
  this.indexer = sqlite_auto_indexer_js_1.SQLiteAutoIndexer.getInstance(logger);
73
73
  this.provider = sqlite_migration_provider_js_1.SQLiteMigrationProvider.getInstance({
74
- migrationDirectory: this.config.migrationDirectory
74
+ migrationDirectory: this.config.migrationDirectory,
75
75
  }, logger);
76
76
  }
77
77
  static getInstance(db, config, logger) {
@@ -143,7 +143,7 @@ class SQLiteMigrationManager {
143
143
  journalMode: 'WAL',
144
144
  synchronous: 'NORMAL',
145
145
  cacheSize: -64000, // 64MB
146
- tempStore: 'MEMORY'
146
+ tempStore: 'MEMORY',
147
147
  });
148
148
  this.logger.info(`✅ Applied ${optimizations.appliedOptimizations.length} optimizations`);
149
149
  if (optimizations.warnings.length > 0) {
@@ -169,14 +169,14 @@ class SQLiteMigrationManager {
169
169
  const indexRecs = await this.indexer.analyzeAndRecommend(this.db, {
170
170
  minFrequency: 3,
171
171
  slowQueryThreshold: 1000,
172
- maxRecommendations: 10
172
+ maxRecommendations: 10,
173
173
  });
174
174
  const plan = {
175
175
  migrations: pendingMigrations,
176
176
  optimizations: optimizationRecs.recommendations || [],
177
- indexRecommendations: indexRecs.recommendations.map(r => r.sql),
177
+ indexRecommendations: indexRecs.recommendations.map((r) => r.sql),
178
178
  estimatedImpact: this.calculateImpact(pendingMigrations.length, optimizationRecs.recommendations?.length || 0),
179
- dryRun: this.config.dryRun
179
+ dryRun: this.config.dryRun,
180
180
  };
181
181
  this.logger.info(`📊 Migration plan: ${plan.migrations.length} migrations, ${plan.optimizations.length} optimizations, ${plan.indexRecommendations.length} index recommendations`);
182
182
  return plan;
@@ -203,7 +203,7 @@ class SQLiteMigrationManager {
203
203
  indexRecommendations: [],
204
204
  performanceImpact: 'low',
205
205
  duration: Date.now() - startTime,
206
- warnings: []
206
+ warnings: [],
207
207
  };
208
208
  }
209
209
  const result = {
@@ -213,7 +213,7 @@ class SQLiteMigrationManager {
213
213
  indexRecommendations: [],
214
214
  performanceImpact: 'low',
215
215
  duration: 0,
216
- warnings: []
216
+ warnings: [],
217
217
  };
218
218
  // Execute migrations in transaction
219
219
  await this.db.transaction().execute(async (trx) => {
@@ -222,7 +222,8 @@ class SQLiteMigrationManager {
222
222
  result.migrationsApplied++;
223
223
  }
224
224
  // Apply optimizations after migrations
225
- if (this.config.enableAutoOptimization && plan.optimizations.length > 0) {
225
+ if (this.config.enableAutoOptimization &&
226
+ plan.optimizations.length > 0) {
226
227
  const optimizationResult = await this.optimizer.optimizeDatabase(trx, {
227
228
  enableAutoPragma: true,
228
229
  enableAutoIndexing: false,
@@ -233,7 +234,7 @@ class SQLiteMigrationManager {
233
234
  journalMode: 'WAL',
234
235
  synchronous: 'NORMAL',
235
236
  cacheSize: -64000,
236
- tempStore: 'MEMORY'
237
+ tempStore: 'MEMORY',
237
238
  });
238
239
  result.optimizationsApplied = optimizationResult.appliedOptimizations;
239
240
  result.warnings.push(...optimizationResult.warnings);
@@ -259,7 +260,7 @@ class SQLiteMigrationManager {
259
260
  indexRecommendations: [],
260
261
  performanceImpact: 'low',
261
262
  duration,
262
- warnings: [error instanceof Error ? error.message : 'Unknown error']
263
+ warnings: [error instanceof Error ? error.message : 'Unknown error'],
263
264
  };
264
265
  }
265
266
  }
@@ -283,7 +284,7 @@ class SQLiteMigrationManager {
283
284
  applied_at: new Date(),
284
285
  checksum: migration.checksum,
285
286
  optimization_applied: true,
286
- performance_impact: 'medium'
287
+ performance_impact: 'medium',
287
288
  })
288
289
  .execute();
289
290
  this.logger.info(`✅ Migration ${migrationName} applied successfully`);
@@ -304,17 +305,20 @@ class SQLiteMigrationManager {
304
305
  .selectFrom('sqlite_migrations')
305
306
  .select('name')
306
307
  .execute();
307
- const appliedNames = new Set(appliedMigrations.map(m => m.name));
308
+ const appliedNames = new Set(appliedMigrations.map((m) => m.name));
308
309
  // Filter out applied migrations
309
310
  return availableMigrations
310
- .filter(m => !appliedNames.has(m.name))
311
- .map(m => m.name);
311
+ .filter((m) => !appliedNames.has(m.name))
312
+ .map((m) => m.name);
312
313
  }
313
314
  /**
314
315
  * Generate a new migration file
315
316
  */
316
317
  async generateMigration(description, operation = 'create_table', options = {}) {
317
- const timestamp = new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14);
318
+ const timestamp = new Date()
319
+ .toISOString()
320
+ .replace(/[-:T]/g, '')
321
+ .slice(0, 14);
318
322
  const fileName = `${timestamp}_${description.toLowerCase().replace(/\s+/g, '_')}.sql`;
319
323
  const filePath = path.join(this.config.migrationDirectory, fileName);
320
324
  const content = this.provider.generateOptimizedMigration(operation, options.tableName || 'new_table', options);
@@ -376,7 +380,7 @@ class SQLiteMigrationManager {
376
380
  pendingMigrations: pending.length,
377
381
  lastMigration: migrations[0]?.name,
378
382
  lastAppliedAt: migrations[0]?.applied_at,
379
- appliedList: migrations
383
+ appliedList: migrations,
380
384
  };
381
385
  }
382
386
  /**