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