memento-mcp-server 1.7.5 → 1.9.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 (116) hide show
  1. package/README.md +1 -0
  2. package/dist/config/environment.d.ts.map +1 -1
  3. package/dist/config/environment.js +2 -1
  4. package/dist/config/environment.js.map +1 -1
  5. package/dist/config/index.d.ts.map +1 -1
  6. package/dist/config/index.js +5 -2
  7. package/dist/config/index.js.map +1 -1
  8. package/dist/database/init.d.ts.map +1 -1
  9. package/dist/database/init.js +159 -7
  10. package/dist/database/init.js.map +1 -1
  11. package/dist/database/migration/backup-manager.d.ts +55 -0
  12. package/dist/database/migration/backup-manager.d.ts.map +1 -0
  13. package/dist/database/migration/backup-manager.js +181 -0
  14. package/dist/database/migration/backup-manager.js.map +1 -0
  15. package/dist/database/migration/dependency-validator.d.ts +62 -0
  16. package/dist/database/migration/dependency-validator.d.ts.map +1 -0
  17. package/dist/database/migration/dependency-validator.js +260 -0
  18. package/dist/database/migration/dependency-validator.js.map +1 -0
  19. package/dist/database/migration/migration-detector.d.ts +67 -0
  20. package/dist/database/migration/migration-detector.d.ts.map +1 -0
  21. package/dist/database/migration/migration-detector.js +129 -0
  22. package/dist/database/migration/migration-detector.js.map +1 -0
  23. package/dist/database/migration/migration-logger.d.ts +82 -0
  24. package/dist/database/migration/migration-logger.d.ts.map +1 -0
  25. package/dist/database/migration/migration-logger.js +168 -0
  26. package/dist/database/migration/migration-logger.js.map +1 -0
  27. package/dist/database/migration/migration-runner.d.ts +45 -0
  28. package/dist/database/migration/migration-runner.d.ts.map +1 -0
  29. package/dist/database/migration/migration-runner.js +194 -0
  30. package/dist/database/migration/migration-runner.js.map +1 -0
  31. package/dist/database/migration/migrations/002-mirix-schema-expansion.d.ts +55 -0
  32. package/dist/database/migration/migrations/002-mirix-schema-expansion.d.ts.map +1 -0
  33. package/dist/database/migration/migrations/002-mirix-schema-expansion.js +154 -0
  34. package/dist/database/migration/migrations/002-mirix-schema-expansion.js.map +1 -0
  35. package/dist/database/migration/schema-version-manager.d.ts +43 -0
  36. package/dist/database/migration/schema-version-manager.d.ts.map +1 -0
  37. package/dist/database/migration/schema-version-manager.js +146 -0
  38. package/dist/database/migration/schema-version-manager.js.map +1 -0
  39. package/dist/database/migration/types.d.ts +127 -0
  40. package/dist/database/migration/types.d.ts.map +1 -0
  41. package/dist/database/migration/types.js +5 -0
  42. package/dist/database/migration/types.js.map +1 -0
  43. package/dist/database/schema.sql +69 -1
  44. package/dist/npm-client/memento-client.d.ts.map +1 -1
  45. package/dist/npm-client/memento-client.js +39 -8
  46. package/dist/npm-client/memento-client.js.map +1 -1
  47. package/dist/npm-client/types.d.ts +16 -2
  48. package/dist/npm-client/types.d.ts.map +1 -1
  49. package/dist/npm-client/types.js.map +1 -1
  50. package/dist/npm-client/utils.d.ts.map +1 -1
  51. package/dist/npm-client/utils.js +44 -5
  52. package/dist/npm-client/utils.js.map +1 -1
  53. package/dist/repositories/core-memory-repository.d.ts +81 -0
  54. package/dist/repositories/core-memory-repository.d.ts.map +1 -0
  55. package/dist/repositories/core-memory-repository.js +263 -0
  56. package/dist/repositories/core-memory-repository.js.map +1 -0
  57. package/dist/repositories/knowledge-vault-repository.d.ts +102 -0
  58. package/dist/repositories/knowledge-vault-repository.d.ts.map +1 -0
  59. package/dist/repositories/knowledge-vault-repository.js +395 -0
  60. package/dist/repositories/knowledge-vault-repository.js.map +1 -0
  61. package/dist/server/http-server.d.ts.map +1 -1
  62. package/dist/server/http-server.js +66 -1
  63. package/dist/server/http-server.js.map +1 -1
  64. package/dist/server/index.d.ts.map +1 -1
  65. package/dist/server/index.js +86 -1
  66. package/dist/server/index.js.map +1 -1
  67. package/dist/services/cache-service.d.ts.map +1 -1
  68. package/dist/services/cache-service.js +5 -2
  69. package/dist/services/cache-service.js.map +1 -1
  70. package/dist/services/core-memory-cache-service.d.ts +80 -0
  71. package/dist/services/core-memory-cache-service.d.ts.map +1 -0
  72. package/dist/services/core-memory-cache-service.js +122 -0
  73. package/dist/services/core-memory-cache-service.js.map +1 -0
  74. package/dist/services/core-memory-service.d.ts +117 -0
  75. package/dist/services/core-memory-service.d.ts.map +1 -0
  76. package/dist/services/core-memory-service.js +247 -0
  77. package/dist/services/core-memory-service.js.map +1 -0
  78. package/dist/services/knowledge-vault-service.d.ts +114 -0
  79. package/dist/services/knowledge-vault-service.d.ts.map +1 -0
  80. package/dist/services/knowledge-vault-service.js +233 -0
  81. package/dist/services/knowledge-vault-service.js.map +1 -0
  82. package/dist/services/memory-neighbor-service.d.ts +81 -0
  83. package/dist/services/memory-neighbor-service.d.ts.map +1 -0
  84. package/dist/services/memory-neighbor-service.js +295 -0
  85. package/dist/services/memory-neighbor-service.js.map +1 -0
  86. package/dist/tools/get-memory-neighbors-tool.d.ts +26 -0
  87. package/dist/tools/get-memory-neighbors-tool.d.ts.map +1 -0
  88. package/dist/tools/get-memory-neighbors-tool.js +125 -0
  89. package/dist/tools/get-memory-neighbors-tool.js.map +1 -0
  90. package/dist/tools/index.d.ts +2 -1
  91. package/dist/tools/index.d.ts.map +1 -1
  92. package/dist/tools/index.js +4 -2
  93. package/dist/tools/index.js.map +1 -1
  94. package/dist/tools/memory-injection-prompt.d.ts.map +1 -1
  95. package/dist/tools/memory-injection-prompt.js +28 -4
  96. package/dist/tools/memory-injection-prompt.js.map +1 -1
  97. package/dist/tools/recall-tool.d.ts.map +1 -1
  98. package/dist/tools/recall-tool.js +292 -82
  99. package/dist/tools/recall-tool.js.map +1 -1
  100. package/dist/tools/remember-tool.d.ts.map +1 -1
  101. package/dist/tools/remember-tool.js +293 -40
  102. package/dist/tools/remember-tool.js.map +1 -1
  103. package/dist/tools/types.d.ts +9 -2
  104. package/dist/tools/types.d.ts.map +1 -1
  105. package/dist/tools/types.js +11 -2
  106. package/dist/tools/types.js.map +1 -1
  107. package/dist/types/index.d.ts +20 -3
  108. package/dist/types/index.d.ts.map +1 -1
  109. package/dist/types/index.js +7 -1
  110. package/dist/types/index.js.map +1 -1
  111. package/dist/utils/type-param-validator.d.ts +31 -0
  112. package/dist/utils/type-param-validator.d.ts.map +1 -0
  113. package/dist/utils/type-param-validator.js +76 -0
  114. package/dist/utils/type-param-validator.js.map +1 -0
  115. package/package.json +1 -1
  116. package/src/database/schema.sql +69 -1
@@ -0,0 +1,260 @@
1
+ /**
2
+ * 데이터베이스 의존성 검증 유틸리티
3
+ * 마이그레이션 후 기존 의존성(외래키, 트리거 등)이 정상적으로 작동하는지 검증
4
+ */
5
+ /**
6
+ * 데이터베이스 의존성 검증기
7
+ */
8
+ export class DependencyValidator {
9
+ /**
10
+ * 모든 의존성 검증 수행
11
+ */
12
+ static async validateAll(db) {
13
+ const results = [];
14
+ // 1. memory_embedding 외래키 검증
15
+ results.push(await this.validateMemoryEmbeddingForeignKey(db));
16
+ // 2. FTS5 트리거 검증
17
+ results.push(await this.validateFTS5Triggers(db));
18
+ // 3. VEC 트리거 검증
19
+ results.push(await this.validateVECTriggers(db));
20
+ const failureCount = results.filter(r => !r.success).length;
21
+ return {
22
+ success: failureCount === 0,
23
+ results,
24
+ failureCount
25
+ };
26
+ }
27
+ /**
28
+ * memory_embedding 테이블의 외래키 검증
29
+ */
30
+ static async validateMemoryEmbeddingForeignKey(db) {
31
+ try {
32
+ // memory_embedding 테이블 존재 확인
33
+ const tableExists = db.prepare(`
34
+ SELECT name FROM sqlite_master
35
+ WHERE type='table' AND name='memory_embedding'
36
+ `).get();
37
+ if (!tableExists) {
38
+ return {
39
+ name: 'memory_embedding_foreign_key',
40
+ success: false,
41
+ error: 'memory_embedding table does not exist'
42
+ };
43
+ }
44
+ // 외래키 제약 조건 확인
45
+ const fkInfo = db.prepare(`
46
+ SELECT * FROM pragma_foreign_key_list('memory_embedding')
47
+ WHERE "table" = 'memory_item'
48
+ `).all();
49
+ if (fkInfo.length === 0) {
50
+ return {
51
+ name: 'memory_embedding_foreign_key',
52
+ success: false,
53
+ error: 'Foreign key constraint from memory_embedding.memory_id to memory_item.id is missing'
54
+ };
55
+ }
56
+ const fk = fkInfo[0];
57
+ if (!fk) {
58
+ return {
59
+ name: 'memory_embedding_foreign_key',
60
+ success: false,
61
+ error: 'Foreign key constraint information is missing'
62
+ };
63
+ }
64
+ if (fk.from !== 'memory_id' || fk.to !== 'id') {
65
+ return {
66
+ name: 'memory_embedding_foreign_key',
67
+ success: false,
68
+ error: `Foreign key constraint mismatch: expected memory_id -> id, got ${fk.from} -> ${fk.to}`
69
+ };
70
+ }
71
+ if (fk.on_delete !== 'CASCADE') {
72
+ return {
73
+ name: 'memory_embedding_foreign_key',
74
+ success: false,
75
+ error: `Foreign key on_delete action should be CASCADE, got ${fk.on_delete}`
76
+ };
77
+ }
78
+ return {
79
+ name: 'memory_embedding_foreign_key',
80
+ success: true,
81
+ details: {
82
+ from: fk.from,
83
+ to: fk.to,
84
+ on_delete: fk.on_delete,
85
+ on_update: fk.on_update
86
+ }
87
+ };
88
+ }
89
+ catch (error) {
90
+ return {
91
+ name: 'memory_embedding_foreign_key',
92
+ success: false,
93
+ error: error.message || 'Unknown error during foreign key validation'
94
+ };
95
+ }
96
+ }
97
+ /**
98
+ * FTS5 트리거 검증
99
+ */
100
+ static async validateFTS5Triggers(db) {
101
+ try {
102
+ const requiredTriggers = [
103
+ 'memory_item_fts_insert',
104
+ 'memory_item_fts_update',
105
+ 'memory_item_fts_delete'
106
+ ];
107
+ const missingTriggers = [];
108
+ const foundTriggers = [];
109
+ for (const triggerName of requiredTriggers) {
110
+ const trigger = db.prepare(`
111
+ SELECT name, sql FROM sqlite_master
112
+ WHERE type='trigger' AND name=?
113
+ `).get(triggerName);
114
+ if (!trigger) {
115
+ missingTriggers.push(triggerName);
116
+ }
117
+ else {
118
+ foundTriggers.push(triggerName);
119
+ }
120
+ }
121
+ if (missingTriggers.length > 0) {
122
+ return {
123
+ name: 'fts5_triggers',
124
+ success: false,
125
+ error: `Missing FTS5 triggers: ${missingTriggers.join(', ')}`,
126
+ details: {
127
+ found: foundTriggers,
128
+ missing: missingTriggers
129
+ }
130
+ };
131
+ }
132
+ // FTS5 가상 테이블 존재 확인
133
+ const ftsTable = db.prepare(`
134
+ SELECT name FROM sqlite_master
135
+ WHERE type='table' AND name='memory_item_fts'
136
+ `).get();
137
+ if (!ftsTable) {
138
+ return {
139
+ name: 'fts5_triggers',
140
+ success: false,
141
+ error: 'FTS5 virtual table memory_item_fts does not exist'
142
+ };
143
+ }
144
+ return {
145
+ name: 'fts5_triggers',
146
+ success: true,
147
+ details: {
148
+ triggers: foundTriggers,
149
+ fts_table_exists: true
150
+ }
151
+ };
152
+ }
153
+ catch (error) {
154
+ return {
155
+ name: 'fts5_triggers',
156
+ success: false,
157
+ error: error.message || 'Unknown error during FTS5 trigger validation'
158
+ };
159
+ }
160
+ }
161
+ /**
162
+ * VEC 트리거 검증
163
+ */
164
+ static async validateVECTriggers(db) {
165
+ try {
166
+ const requiredTriggers = [
167
+ 'memory_embedding_vec_insert',
168
+ 'memory_embedding_vec_update',
169
+ 'memory_embedding_vec_delete'
170
+ ];
171
+ const missingTriggers = [];
172
+ const foundTriggers = [];
173
+ for (const triggerName of requiredTriggers) {
174
+ const trigger = db.prepare(`
175
+ SELECT name, sql FROM sqlite_master
176
+ WHERE type='trigger' AND name=?
177
+ `).get(triggerName);
178
+ if (!trigger) {
179
+ missingTriggers.push(triggerName);
180
+ }
181
+ else {
182
+ foundTriggers.push(triggerName);
183
+ }
184
+ }
185
+ if (missingTriggers.length > 0) {
186
+ return {
187
+ name: 'vec_triggers',
188
+ success: false,
189
+ error: `Missing VEC triggers: ${missingTriggers.join(', ')}`,
190
+ details: {
191
+ found: foundTriggers,
192
+ missing: missingTriggers
193
+ }
194
+ };
195
+ }
196
+ // VEC 가상 테이블 존재 확인 (선택적, sqlite-vec 확장이 설치되어 있을 때만)
197
+ const vecTables = [
198
+ 'memory_item_vec',
199
+ 'memory_item_vec_tfidf',
200
+ 'memory_item_vec_minilm',
201
+ 'memory_item_vec_openai',
202
+ 'memory_item_vec_gemini'
203
+ ];
204
+ const existingVecTables = [];
205
+ const missingVecTables = [];
206
+ for (const tableName of vecTables) {
207
+ try {
208
+ const table = db.prepare(`
209
+ SELECT name FROM sqlite_master
210
+ WHERE type='table' AND name=?
211
+ `).get(tableName);
212
+ if (table) {
213
+ existingVecTables.push(tableName);
214
+ }
215
+ else {
216
+ missingVecTables.push(tableName);
217
+ }
218
+ }
219
+ catch {
220
+ // sqlite-vec 확장이 없을 수 있으므로 에러는 무시
221
+ missingVecTables.push(tableName);
222
+ }
223
+ }
224
+ // VEC 테이블이 하나도 없으면 경고 (sqlite-vec 확장이 설치되지 않았을 수 있음)
225
+ if (existingVecTables.length === 0) {
226
+ return {
227
+ name: 'vec_triggers',
228
+ success: true, // 트리거는 존재하므로 성공으로 처리
229
+ details: {
230
+ triggers: foundTriggers,
231
+ vec_tables: {
232
+ existing: existingVecTables,
233
+ missing: missingVecTables,
234
+ note: 'sqlite-vec extension may not be installed'
235
+ }
236
+ }
237
+ };
238
+ }
239
+ return {
240
+ name: 'vec_triggers',
241
+ success: true,
242
+ details: {
243
+ triggers: foundTriggers,
244
+ vec_tables: {
245
+ existing: existingVecTables,
246
+ missing: missingVecTables
247
+ }
248
+ }
249
+ };
250
+ }
251
+ catch (error) {
252
+ return {
253
+ name: 'vec_triggers',
254
+ success: false,
255
+ error: error.message || 'Unknown error during VEC trigger validation'
256
+ };
257
+ }
258
+ }
259
+ }
260
+ //# sourceMappingURL=dependency-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-validator.js","sourceRoot":"","sources":["../../../src/database/migration/dependency-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * 마이그레이션 자동 감지 시스템
3
+ *
4
+ * migrations/ 디렉토리에서 마이그레이션 스크립트를 자동으로 감지하고,
5
+ * 현재 스키마 버전과 비교하여 실행해야 할 마이그레이션을 찾습니다.
6
+ */
7
+ import type Database from 'better-sqlite3';
8
+ import type { Migration } from './types.js';
9
+ /**
10
+ * 마이그레이션 감지 결과
11
+ */
12
+ export interface DetectedMigration {
13
+ /**
14
+ * 마이그레이션 인스턴스
15
+ */
16
+ migration: Migration;
17
+ /**
18
+ * 마이그레이션 파일 경로
19
+ */
20
+ filePath: string;
21
+ /**
22
+ * 마이그레이션 버전 번호 (숫자)
23
+ */
24
+ versionNumber: number;
25
+ }
26
+ /**
27
+ * 마이그레이션 감지 결과
28
+ */
29
+ export interface MigrationDetectionResult {
30
+ /**
31
+ * 실행해야 할 마이그레이션 목록 (버전 순서대로 정렬됨)
32
+ */
33
+ pendingMigrations: DetectedMigration[];
34
+ /**
35
+ * 이미 실행된 마이그레이션 목록
36
+ */
37
+ appliedMigrations: DetectedMigration[];
38
+ /**
39
+ * 현재 스키마 버전
40
+ */
41
+ currentVersion: string | null;
42
+ }
43
+ /**
44
+ * 마이그레이션 자동 감지기
45
+ */
46
+ export declare class MigrationDetector {
47
+ private migrationsDir;
48
+ constructor(migrationsDir?: string);
49
+ /**
50
+ * 모든 마이그레이션 파일 감지
51
+ */
52
+ detectAllMigrations(): Promise<DetectedMigration[]>;
53
+ /**
54
+ * 실행해야 할 마이그레이션 감지
55
+ */
56
+ detectPendingMigrations(db: Database.Database): Promise<MigrationDetectionResult>;
57
+ /**
58
+ * 버전 문자열을 숫자로 변환
59
+ * 예: "002" -> 2, "001" -> 1
60
+ */
61
+ private parseVersionNumber;
62
+ /**
63
+ * 특정 버전의 마이그레이션 찾기
64
+ */
65
+ findMigrationByVersion(version: string | undefined): Promise<DetectedMigration | null>;
66
+ }
67
+ //# sourceMappingURL=migration-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-detector.d.ts","sourceRoot":"","sources":["../../../src/database/migration/migration-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAM5C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,SAAS,EAAE,SAAS,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IAEvC;;OAEG;IACH,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IAEvC;;OAEG;IACH,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,CAAC,EAAE,MAAM;IAIlC;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAmEzD;;OAEG;IACG,uBAAuB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA2BvF;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACG,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;CAO7F"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * 마이그레이션 자동 감지 시스템
3
+ *
4
+ * migrations/ 디렉토리에서 마이그레이션 스크립트를 자동으로 감지하고,
5
+ * 현재 스키마 버전과 비교하여 실행해야 할 마이그레이션을 찾습니다.
6
+ */
7
+ import { readdir } from 'fs/promises';
8
+ import { join, dirname } from 'path';
9
+ import { fileURLToPath } from 'url';
10
+ import { SchemaVersionManager } from './schema-version-manager.js';
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = dirname(__filename);
13
+ /**
14
+ * 마이그레이션 자동 감지기
15
+ */
16
+ export class MigrationDetector {
17
+ migrationsDir;
18
+ constructor(migrationsDir) {
19
+ this.migrationsDir = migrationsDir || join(__dirname, 'migrations');
20
+ }
21
+ /**
22
+ * 모든 마이그레이션 파일 감지
23
+ */
24
+ async detectAllMigrations() {
25
+ const files = await readdir(this.migrationsDir);
26
+ const migrationFiles = files.filter(file => file.endsWith('.ts') &&
27
+ !file.endsWith('.spec.ts') &&
28
+ /^\d{3}-/.test(file));
29
+ const migrations = [];
30
+ for (const file of migrationFiles) {
31
+ try {
32
+ const filePath = join(this.migrationsDir, file);
33
+ const module = await import(`file://${filePath}`);
34
+ // default export 또는 named export 찾기
35
+ let MigrationClass = module.default;
36
+ // named export에서 Migration 클래스 찾기
37
+ if (!MigrationClass || typeof MigrationClass !== 'function') {
38
+ const exportedKeys = Object.keys(module);
39
+ for (const key of exportedKeys) {
40
+ const exported = module[key];
41
+ // 클래스이고 version, name, up 메서드를 가진 경우
42
+ if (typeof exported === 'function' && exported.prototype &&
43
+ (exported.prototype.version || exported.prototype.name)) {
44
+ MigrationClass = exported;
45
+ break;
46
+ }
47
+ }
48
+ }
49
+ if (!MigrationClass || typeof MigrationClass !== 'function') {
50
+ console.warn(`⚠️ 마이그레이션 파일 ${file}에서 유효한 마이그레이션 클래스를 찾을 수 없습니다.`);
51
+ continue;
52
+ }
53
+ // 클래스 인스턴스 생성
54
+ const migration = new MigrationClass();
55
+ if (!migration || !migration.version || !migration.up) {
56
+ console.warn(`⚠️ 마이그레이션 파일 ${file}에서 유효한 마이그레이션 인스턴스를 생성할 수 없습니다.`);
57
+ continue;
58
+ }
59
+ const versionNumber = this.parseVersionNumber(migration.version);
60
+ if (versionNumber === null) {
61
+ console.warn(`⚠️ 마이그레이션 ${file}의 버전 형식이 올바르지 않습니다: ${migration.version}`);
62
+ continue;
63
+ }
64
+ migrations.push({
65
+ migration,
66
+ filePath,
67
+ versionNumber
68
+ });
69
+ }
70
+ catch (error) {
71
+ console.error(`❌ 마이그레이션 파일 ${file} 로드 실패:`, error);
72
+ }
73
+ }
74
+ // 버전 번호로 정렬
75
+ migrations.sort((a, b) => a.versionNumber - b.versionNumber);
76
+ return migrations;
77
+ }
78
+ /**
79
+ * 실행해야 할 마이그레이션 감지
80
+ */
81
+ async detectPendingMigrations(db) {
82
+ const allMigrations = await this.detectAllMigrations();
83
+ const versionManager = new SchemaVersionManager(db);
84
+ const currentVersion = await versionManager.getCurrentVersion();
85
+ const appliedVersions = currentVersion !== null
86
+ ? await versionManager.getAppliedVersions()
87
+ : [];
88
+ const pendingMigrations = [];
89
+ const appliedMigrations = [];
90
+ for (const detected of allMigrations) {
91
+ if (appliedVersions.includes(detected.migration.version)) {
92
+ appliedMigrations.push(detected);
93
+ }
94
+ else {
95
+ pendingMigrations.push(detected);
96
+ }
97
+ }
98
+ return {
99
+ pendingMigrations,
100
+ appliedMigrations,
101
+ currentVersion
102
+ };
103
+ }
104
+ /**
105
+ * 버전 문자열을 숫자로 변환
106
+ * 예: "002" -> 2, "001" -> 1
107
+ */
108
+ parseVersionNumber(version) {
109
+ if (!version) {
110
+ return null;
111
+ }
112
+ const match = version.match(/^(\d+)/);
113
+ if (!match || !match[1]) {
114
+ return null;
115
+ }
116
+ return parseInt(match[1], 10);
117
+ }
118
+ /**
119
+ * 특정 버전의 마이그레이션 찾기
120
+ */
121
+ async findMigrationByVersion(version) {
122
+ if (!version) {
123
+ return null;
124
+ }
125
+ const allMigrations = await this.detectAllMigrations();
126
+ return allMigrations.find(m => m.migration.version === version) || null;
127
+ }
128
+ }
129
+ //# sourceMappingURL=migration-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-detector.js","sourceRoot":"","sources":["../../../src/database/migration/migration-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * 마이그레이션 로깅 시스템
3
+ *
4
+ * 마이그레이션 실행 과정을 로그 파일에 기록합니다.
5
+ */
6
+ import type { MigrationResult } from './types.js';
7
+ /**
8
+ * 로그 레벨
9
+ */
10
+ export declare enum LogLevel {
11
+ INFO = "INFO",
12
+ WARN = "WARN",
13
+ ERROR = "ERROR",
14
+ DEBUG = "DEBUG"
15
+ }
16
+ /**
17
+ * 로그 엔트리
18
+ */
19
+ export interface LogEntry {
20
+ timestamp: Date;
21
+ level: LogLevel;
22
+ message: string;
23
+ data?: any;
24
+ }
25
+ /**
26
+ * 마이그레이션 로거
27
+ */
28
+ export declare class MigrationLogger {
29
+ private logDir;
30
+ private logFile;
31
+ private entries;
32
+ constructor(logDir?: string);
33
+ /**
34
+ * 로그 디렉토리 생성
35
+ */
36
+ private ensureLogDirectory;
37
+ /**
38
+ * 로그 파일 초기화
39
+ */
40
+ initializeLogFile(migrationVersion: string): void;
41
+ /**
42
+ * 로그 기록
43
+ */
44
+ log(level: LogLevel, message: string, data?: any): void;
45
+ /**
46
+ * INFO 레벨 로그
47
+ */
48
+ info(message: string, data?: any): void;
49
+ /**
50
+ * WARN 레벨 로그
51
+ */
52
+ warn(message: string, data?: any): void;
53
+ /**
54
+ * ERROR 레벨 로그
55
+ */
56
+ error(message: string, data?: any): void;
57
+ /**
58
+ * DEBUG 레벨 로그
59
+ */
60
+ debug(message: string, data?: any): void;
61
+ /**
62
+ * 마이그레이션 결과 기록
63
+ */
64
+ logMigrationResult(result: MigrationResult): void;
65
+ /**
66
+ * 로그 파일에 쓰기
67
+ */
68
+ private writeToFile;
69
+ /**
70
+ * 로그 파일 경로 반환
71
+ */
72
+ getLogFile(): string | null;
73
+ /**
74
+ * 로그 엔트리 조회
75
+ */
76
+ getEntries(): LogEntry[];
77
+ /**
78
+ * 로그 디렉토리 경로 반환
79
+ */
80
+ getLogDirectory(): string;
81
+ }
82
+ //# sourceMappingURL=migration-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-logger.d.ts","sourceRoot":"","sources":["../../../src/database/migration/migration-logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,oBAAY,QAAQ;IAClB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAkB;gBAErB,MAAM,CAAC,EAAE,MAAM;IAO3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAcjD;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IA2BvD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIvC;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIvC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIxC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIxC;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAoBjD;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,UAAU,IAAI,MAAM,GAAG,IAAI;IAI3B;;OAEG;IACH,UAAU,IAAI,QAAQ,EAAE;IAIxB;;OAEG;IACH,eAAe,IAAI,MAAM;CAG1B"}