@thinkdata/cli 0.1.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 (37) hide show
  1. package/dist/bin/thinkdata.d.ts +3 -0
  2. package/dist/bin/thinkdata.d.ts.map +1 -0
  3. package/dist/bin/thinkdata.js +43 -0
  4. package/dist/bin/thinkdata.js.map +1 -0
  5. package/dist/commands/compare.d.ts +41 -0
  6. package/dist/commands/compare.d.ts.map +1 -0
  7. package/dist/commands/compare.js +264 -0
  8. package/dist/commands/compare.js.map +1 -0
  9. package/dist/commands/extract.d.ts +16 -0
  10. package/dist/commands/extract.d.ts.map +1 -0
  11. package/dist/commands/extract.js +255 -0
  12. package/dist/commands/extract.js.map +1 -0
  13. package/dist/converter/schemaToERD.d.ts +56 -0
  14. package/dist/converter/schemaToERD.d.ts.map +1 -0
  15. package/dist/converter/schemaToERD.js +80 -0
  16. package/dist/converter/schemaToERD.js.map +1 -0
  17. package/dist/extractors/index.d.ts +20 -0
  18. package/dist/extractors/index.d.ts.map +1 -0
  19. package/dist/extractors/index.js +81 -0
  20. package/dist/extractors/index.js.map +1 -0
  21. package/dist/extractors/mysql.d.ts +14 -0
  22. package/dist/extractors/mysql.d.ts.map +1 -0
  23. package/dist/extractors/mysql.js +198 -0
  24. package/dist/extractors/mysql.js.map +1 -0
  25. package/dist/extractors/postgres.d.ts +22 -0
  26. package/dist/extractors/postgres.d.ts.map +1 -0
  27. package/dist/extractors/postgres.js +259 -0
  28. package/dist/extractors/postgres.js.map +1 -0
  29. package/dist/index.d.ts +14 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +6 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/types.d.ts +114 -0
  34. package/dist/types.d.ts.map +1 -0
  35. package/dist/types.js +8 -0
  36. package/dist/types.js.map +1 -0
  37. package/package.json +53 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/commands/extract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * 추출된 스키마를 ThinkERD 엔터티/관계 구조로 변환
3
+ *
4
+ * @thinkdata/cli extract → schemaToERD → ThinkERD API 전송
5
+ * @thinkdata/probe에서도 임포트하여 사용합니다.
6
+ */
7
+ import type { ExtractedSchema } from '../types.js';
8
+ /** ThinkERD 엔터티 포맷 */
9
+ export interface ERDEntity {
10
+ id: string;
11
+ name: string;
12
+ logicalName?: string;
13
+ comment?: string;
14
+ columns: ERDColumn[];
15
+ x: number;
16
+ y: number;
17
+ }
18
+ /** ThinkERD 컬럼 포맷 */
19
+ export interface ERDColumn {
20
+ id: string;
21
+ name: string;
22
+ logicalName?: string;
23
+ dataType: string;
24
+ nullable: boolean;
25
+ isPK: boolean;
26
+ defaultValue?: string;
27
+ comment?: string;
28
+ }
29
+ /** ThinkERD 관계 포맷 */
30
+ export interface ERDRelationship {
31
+ id: string;
32
+ name: string;
33
+ sourceEntityId: string;
34
+ targetEntityId: string;
35
+ sourceCardinality: string;
36
+ targetCardinality: string;
37
+ sourceColumnId: string;
38
+ targetColumnId: string;
39
+ onDelete?: string;
40
+ onUpdate?: string;
41
+ }
42
+ /** 변환 결과 */
43
+ export interface ConversionResult {
44
+ entities: ERDEntity[];
45
+ relationships: ERDRelationship[];
46
+ summary: {
47
+ tableCount: number;
48
+ columnCount: number;
49
+ fkCount: number;
50
+ };
51
+ }
52
+ /**
53
+ * ExtractedSchema → ThinkERD 포맷 변환
54
+ */
55
+ export declare function convertToERD(schema: ExtractedSchema): ConversionResult;
56
+ //# sourceMappingURL=schemaToERD.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaToERD.d.ts","sourceRoot":"","sources":["../../src/converter/schemaToERD.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,EAAuC,MAAM,aAAa,CAAC;AAExF,sBAAsB;AACtB,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAED,qBAAqB;AACrB,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAqB;AACrB,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,YAAY;AACZ,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,aAAa,EAAE,eAAe,EAAE,CAAC;IACjC,OAAO,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACnB,CAAC;CACL;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,CA0BtE"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * ExtractedSchema → ThinkERD 포맷 변환
3
+ */
4
+ export function convertToERD(schema) {
5
+ // 엔터티 변환 (자동 그리드 레이아웃)
6
+ const entities = schema.tables.map((table, index) => convertTable(table, index));
7
+ // 엔터티 이름 → ID 매핑
8
+ const entityByName = new Map();
9
+ for (const entity of entities) {
10
+ entityByName.set(entity.name, entity);
11
+ }
12
+ // FK → 관계 변환
13
+ const relationships = schema.foreignKeys
14
+ .map((fk) => convertFK(fk, entityByName))
15
+ .filter((r) => r !== null);
16
+ const totalColumns = entities.reduce((sum, e) => sum + e.columns.length, 0);
17
+ return {
18
+ entities,
19
+ relationships,
20
+ summary: {
21
+ tableCount: entities.length,
22
+ columnCount: totalColumns,
23
+ fkCount: relationships.length,
24
+ },
25
+ };
26
+ }
27
+ // ─── Private ─────────────────────────────────────────
28
+ function convertTable(table, index) {
29
+ // 그리드 레이아웃: 4열 배치, 300px 간격
30
+ const cols = 4;
31
+ const gridX = (index % cols) * 350 + 50;
32
+ const gridY = Math.floor(index / cols) * 300 + 50;
33
+ return {
34
+ id: generateId(),
35
+ name: table.name,
36
+ comment: table.comment,
37
+ columns: table.columns.map((col) => ({
38
+ id: generateId(),
39
+ name: col.name,
40
+ dataType: col.type,
41
+ nullable: col.nullable,
42
+ isPK: col.isPK,
43
+ defaultValue: col.defaultValue,
44
+ comment: col.comment,
45
+ })),
46
+ x: gridX,
47
+ y: gridY,
48
+ };
49
+ }
50
+ function convertFK(fk, entityByName) {
51
+ const sourceEntity = entityByName.get(fk.sourceTable);
52
+ const targetEntity = entityByName.get(fk.targetTable);
53
+ if (!sourceEntity || !targetEntity)
54
+ return null;
55
+ // FK 컬럼 찾기
56
+ const sourceCol = sourceEntity.columns.find((c) => c.name === fk.sourceColumn);
57
+ const targetCol = targetEntity.columns.find((c) => c.name === fk.targetColumn);
58
+ if (!sourceCol || !targetCol)
59
+ return null;
60
+ // 카디널리티 추론: nullable FK → 0..N, NOT NULL FK → 1..N
61
+ const sourceCardinality = sourceCol.nullable ? 'zero-or-many' : 'one-or-many';
62
+ const targetCardinality = 'one'; // FK가 참조하는 쪽은 항상 1
63
+ return {
64
+ id: generateId(),
65
+ name: fk.name,
66
+ sourceEntityId: sourceEntity.id,
67
+ targetEntityId: targetEntity.id,
68
+ sourceCardinality,
69
+ targetCardinality,
70
+ sourceColumnId: sourceCol.id,
71
+ targetColumnId: targetCol.id,
72
+ onDelete: fk.onDelete,
73
+ onUpdate: fk.onUpdate,
74
+ };
75
+ }
76
+ let idCounter = 0;
77
+ function generateId() {
78
+ return `imported_${Date.now()}_${++idCounter}`;
79
+ }
80
+ //# sourceMappingURL=schemaToERD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaToERD.js","sourceRoot":"","sources":["../../src/converter/schemaToERD.ts"],"names":[],"mappings":"AAwDA;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAuB;IAChD,uBAAuB;IACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEjF,iBAAiB;IACjB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAqB,CAAC;IAClD,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC5B,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,aAAa;IACb,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW;SACnC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;SACxC,MAAM,CAAC,CAAC,CAAC,EAAwB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAErD,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAE5E,OAAO;QACH,QAAQ;QACR,aAAa;QACb,OAAO,EAAE;YACL,UAAU,EAAE,QAAQ,CAAC,MAAM;YAC3B,WAAW,EAAE,YAAY;YACzB,OAAO,EAAE,aAAa,CAAC,MAAM;SAChC;KACJ,CAAC;AACN,CAAC;AAED,wDAAwD;AAExD,SAAS,YAAY,CAAC,KAAqB,EAAE,KAAa;IACtD,4BAA4B;IAC5B,MAAM,IAAI,GAAG,CAAC,CAAC;IACf,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;IAElD,OAAO;QACH,EAAE,EAAE,UAAU,EAAE;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACjC,EAAE,EAAE,UAAU,EAAE;YAChB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,QAAQ,EAAE,GAAG,CAAC,IAAI;YAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,OAAO,EAAE,GAAG,CAAC,OAAO;SACvB,CAAC,CAAC;QACH,CAAC,EAAE,KAAK;QACR,CAAC,EAAE,KAAK;KACX,CAAC;AACN,CAAC;AAED,SAAS,SAAS,CACd,EAAuB,EACvB,YAAoC;IAEpC,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IAEtD,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAEhD,WAAW;IACX,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,YAAY,CAAC,CAAC;IAC/E,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,YAAY,CAAC,CAAC;IAC/E,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE1C,mDAAmD;IACnD,MAAM,iBAAiB,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;IAC9E,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,mBAAmB;IAEpD,OAAO;QACH,EAAE,EAAE,UAAU,EAAE;QAChB,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,cAAc,EAAE,YAAY,CAAC,EAAE;QAC/B,cAAc,EAAE,YAAY,CAAC,EAAE;QAC/B,iBAAiB;QACjB,iBAAiB;QACjB,cAAc,EAAE,SAAS,CAAC,EAAE;QAC5B,cAAc,EAAE,SAAS,CAAC,EAAE;QAC5B,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,QAAQ,EAAE,EAAE,CAAC,QAAQ;KACxB,CAAC;AACN,CAAC;AAED,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,SAAS,UAAU;IACf,OAAO,YAAY,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AACnD,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 추출기 팩토리 & 연결 문자열 파서
3
+ */
4
+ export { PostgresExtractor } from './postgres.js';
5
+ export { MySQLExtractor } from './mysql.js';
6
+ import type { SchemaExtractor, ConnectionConfig } from '../types.js';
7
+ /**
8
+ * DBMS 타입에 맞는 추출기 인스턴스 반환
9
+ */
10
+ export declare function createExtractor(type: string): SchemaExtractor;
11
+ /**
12
+ * 연결 문자열을 ConnectionConfig로 파싱
13
+ *
14
+ * 지원 형식:
15
+ * - postgresql://user:pass@host:port/dbname
16
+ * - mysql://user:pass@host:port/dbname
17
+ * - postgres://user@host/dbname (비밀번호 없이)
18
+ */
19
+ export declare function parseConnectionString(connStr: string): ConnectionConfig;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI5C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAWrE;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAY7D;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAwBvE"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * 추출기 팩토리 & 연결 문자열 파서
3
+ */
4
+ export { PostgresExtractor } from './postgres.js';
5
+ export { MySQLExtractor } from './mysql.js';
6
+ import { PostgresExtractor } from './postgres.js';
7
+ import { MySQLExtractor } from './mysql.js';
8
+ /** DBMS별 기본 포트 */
9
+ const DEFAULT_PORTS = {
10
+ postgres: 5432,
11
+ mysql: 3306,
12
+ oracle: 1521,
13
+ mssql: 1433,
14
+ sqlite: 0,
15
+ };
16
+ /**
17
+ * DBMS 타입에 맞는 추출기 인스턴스 반환
18
+ */
19
+ export function createExtractor(type) {
20
+ switch (type) {
21
+ case 'postgres':
22
+ case 'postgresql':
23
+ return new PostgresExtractor();
24
+ case 'mysql':
25
+ case 'mariadb':
26
+ return new MySQLExtractor();
27
+ // TODO: oracle, mssql, sqlite
28
+ default:
29
+ throw new Error(`지원하지 않는 DBMS: ${type}. 현재 지원: postgres, mysql`);
30
+ }
31
+ }
32
+ /**
33
+ * 연결 문자열을 ConnectionConfig로 파싱
34
+ *
35
+ * 지원 형식:
36
+ * - postgresql://user:pass@host:port/dbname
37
+ * - mysql://user:pass@host:port/dbname
38
+ * - postgres://user@host/dbname (비밀번호 없이)
39
+ */
40
+ export function parseConnectionString(connStr) {
41
+ let url;
42
+ try {
43
+ // postgresql:// → postgres:// 정규화
44
+ const normalized = connStr.replace(/^postgresql:\/\//, 'postgres://');
45
+ url = new URL(normalized);
46
+ }
47
+ catch {
48
+ throw new Error(`잘못된 연결 문자열: ${connStr}\n예시: postgresql://user@host:5432/dbname`);
49
+ }
50
+ const protocol = url.protocol.replace(':', '');
51
+ const type = normalizeDBType(protocol);
52
+ const port = url.port ? parseInt(url.port, 10) : DEFAULT_PORTS[type] || 5432;
53
+ return {
54
+ type: type,
55
+ host: url.hostname,
56
+ port,
57
+ database: url.pathname.replace(/^\//, ''),
58
+ user: decodeURIComponent(url.username),
59
+ password: decodeURIComponent(url.password || ''),
60
+ schema: url.searchParams.get('schema') || undefined,
61
+ ssl: url.searchParams.get('ssl') === 'true' || url.searchParams.get('sslmode') === 'require',
62
+ };
63
+ }
64
+ function normalizeDBType(protocol) {
65
+ switch (protocol) {
66
+ case 'postgres':
67
+ case 'postgresql':
68
+ return 'postgres';
69
+ case 'mysql':
70
+ case 'mariadb':
71
+ return 'mysql';
72
+ case 'oracle':
73
+ return 'oracle';
74
+ case 'mssql':
75
+ case 'sqlserver':
76
+ return 'mssql';
77
+ default:
78
+ return protocol;
79
+ }
80
+ }
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,kBAAkB;AAClB,MAAM,aAAa,GAA2B;IAC1C,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,CAAC;CACZ,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IACxC,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,UAAU,CAAC;QAChB,KAAK,YAAY;YACb,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACnC,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACV,OAAO,IAAI,cAAc,EAAE,CAAC;QAChC,8BAA8B;QAC9B;YACI,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,0BAA0B,CAAC,CAAC;IACzE,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACjD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACD,kCAAkC;QAClC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;QACtE,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,IAAI,KAAK,CAAC,eAAe,OAAO,0CAA0C,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAE7E,OAAO;QACH,IAAI,EAAE,IAAgC;QACtC,IAAI,EAAE,GAAG,CAAC,QAAQ;QAClB,IAAI;QACJ,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACzC,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACtC,QAAQ,EAAE,kBAAkB,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;QAChD,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS;QACnD,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,MAAM,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS;KAC/F,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACrC,QAAQ,QAAQ,EAAE,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,YAAY;YACb,OAAO,UAAU,CAAC;QACtB,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACV,OAAO,OAAO,CAAC;QACnB,KAAK,QAAQ;YACT,OAAO,QAAQ,CAAC;QACpB,KAAK,OAAO,CAAC;QACb,KAAK,WAAW;YACZ,OAAO,OAAO,CAAC;QACnB;YACI,OAAO,QAAQ,CAAC;IACxB,CAAC;AACL,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { SchemaExtractor, ConnectionConfig, ExtractedSchema } from '../types.js';
2
+ export declare class MySQLExtractor implements SchemaExtractor {
3
+ testConnection(config: ConnectionConfig): Promise<string>;
4
+ extract(config: ConnectionConfig): Promise<ExtractedSchema>;
5
+ private createConnection;
6
+ private getVersion;
7
+ private getTables;
8
+ private getPrimaryKeys;
9
+ private getForeignKeys;
10
+ private getIndexes;
11
+ private buildPKMap;
12
+ private buildIndexMap;
13
+ }
14
+ //# sourceMappingURL=mysql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../src/extractors/mysql.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACR,eAAe,EACf,gBAAgB,EAChB,eAAe,EAKlB,MAAM,aAAa,CAAC;AAErB,qBAAa,cAAe,YAAW,eAAe;IAC5C,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAUzD,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;YAkDnD,gBAAgB;YAYhB,UAAU;YAKV,SAAS;YAwCT,cAAc;YAUd,cAAc;YA+Bd,UAAU;IA2BxB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,aAAa;CAYxB"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * MySQL / MariaDB 스키마 추출기
3
+ *
4
+ * information_schema에서 테이블, 컬럼, PK, FK, 인덱스를 추출합니다.
5
+ */
6
+ import mysql from 'mysql2/promise';
7
+ export class MySQLExtractor {
8
+ async testConnection(config) {
9
+ const conn = await this.createConnection(config);
10
+ try {
11
+ const [rows] = await conn.query('SELECT version() AS ver');
12
+ return rows[0].ver;
13
+ }
14
+ finally {
15
+ await conn.end();
16
+ }
17
+ }
18
+ async extract(config) {
19
+ const conn = await this.createConnection(config);
20
+ const schema = config.database; // MySQL에서 schema = database
21
+ try {
22
+ const [version, tables, pks, fks, indexes] = await Promise.all([
23
+ this.getVersion(conn),
24
+ this.getTables(conn, schema),
25
+ this.getPrimaryKeys(conn, schema),
26
+ this.getForeignKeys(conn, schema),
27
+ this.getIndexes(conn, schema),
28
+ ]);
29
+ const pkMap = this.buildPKMap(pks);
30
+ const indexMap = this.buildIndexMap(indexes);
31
+ const extractedTables = tables.map((t) => ({
32
+ name: t.table_name,
33
+ schema: schema,
34
+ comment: t.table_comment || undefined,
35
+ columns: t.columns.map((c) => ({
36
+ name: c.COLUMN_NAME,
37
+ type: c.COLUMN_TYPE, // MySQL은 COLUMN_TYPE이 varchar(255) 형태
38
+ nullable: c.IS_NULLABLE === 'YES',
39
+ isPK: pkMap.get(t.table_name)?.has(c.COLUMN_NAME) ?? false,
40
+ defaultValue: c.COLUMN_DEFAULT || undefined,
41
+ comment: c.COLUMN_COMMENT || undefined,
42
+ ordinalPosition: c.ORDINAL_POSITION,
43
+ maxLength: c.CHARACTER_MAXIMUM_LENGTH || undefined,
44
+ numericPrecision: c.NUMERIC_PRECISION || undefined,
45
+ numericScale: c.NUMERIC_SCALE || undefined,
46
+ })),
47
+ indexes: indexMap.get(t.table_name) || [],
48
+ }));
49
+ return {
50
+ dbmsType: 'mysql',
51
+ dbmsVersion: version,
52
+ extractedAt: new Date().toISOString(),
53
+ schemaName: schema,
54
+ tables: extractedTables,
55
+ foreignKeys: fks,
56
+ };
57
+ }
58
+ finally {
59
+ await conn.end();
60
+ }
61
+ }
62
+ // ─── Private ─────────────────────────────────────────
63
+ async createConnection(config) {
64
+ return mysql.createConnection({
65
+ host: config.host,
66
+ port: config.port,
67
+ database: config.database,
68
+ user: config.user,
69
+ password: config.password,
70
+ ssl: config.ssl ? {} : undefined,
71
+ connectTimeout: 10000,
72
+ });
73
+ }
74
+ async getVersion(conn) {
75
+ const [rows] = await conn.query('SELECT version() AS ver');
76
+ return rows[0].ver;
77
+ }
78
+ async getTables(conn, schema) {
79
+ const [columns] = await conn.query(`
80
+ SELECT
81
+ c.TABLE_NAME, c.COLUMN_NAME, c.ORDINAL_POSITION,
82
+ c.COLUMN_TYPE, c.IS_NULLABLE, c.COLUMN_DEFAULT,
83
+ c.CHARACTER_MAXIMUM_LENGTH, c.NUMERIC_PRECISION, c.NUMERIC_SCALE,
84
+ c.COLUMN_COMMENT
85
+ FROM information_schema.COLUMNS c
86
+ WHERE c.TABLE_SCHEMA = ?
87
+ ORDER BY c.TABLE_NAME, c.ORDINAL_POSITION
88
+ `, [schema]);
89
+ // 테이블 코멘트
90
+ const [tableComments] = await conn.query(`
91
+ SELECT TABLE_NAME, TABLE_COMMENT
92
+ FROM information_schema.TABLES
93
+ WHERE TABLE_SCHEMA = ? AND TABLE_TYPE = 'BASE TABLE'
94
+ `, [schema]);
95
+ const commentMap = new Map();
96
+ for (const tc of tableComments) {
97
+ commentMap.set(tc.TABLE_NAME, tc.TABLE_COMMENT);
98
+ }
99
+ // 테이블별 그룹핑
100
+ const tableMap = new Map();
101
+ for (const col of columns) {
102
+ if (!tableMap.has(col.TABLE_NAME)) {
103
+ tableMap.set(col.TABLE_NAME, {
104
+ table_name: col.TABLE_NAME,
105
+ table_comment: commentMap.get(col.TABLE_NAME) || null,
106
+ columns: [],
107
+ });
108
+ }
109
+ tableMap.get(col.TABLE_NAME).columns.push(col);
110
+ }
111
+ return Array.from(tableMap.values());
112
+ }
113
+ async getPrimaryKeys(conn, schema) {
114
+ const [rows] = await conn.query(`
115
+ SELECT TABLE_NAME, COLUMN_NAME
116
+ FROM information_schema.KEY_COLUMN_USAGE
117
+ WHERE TABLE_SCHEMA = ? AND CONSTRAINT_NAME = 'PRIMARY'
118
+ ORDER BY TABLE_NAME, ORDINAL_POSITION
119
+ `, [schema]);
120
+ return rows;
121
+ }
122
+ async getForeignKeys(conn, schema) {
123
+ const [rows] = await conn.query(`
124
+ SELECT
125
+ kcu.CONSTRAINT_NAME,
126
+ kcu.TABLE_NAME AS source_table,
127
+ kcu.COLUMN_NAME AS source_column,
128
+ kcu.REFERENCED_TABLE_NAME AS target_table,
129
+ kcu.REFERENCED_COLUMN_NAME AS target_column,
130
+ rc.DELETE_RULE, rc.UPDATE_RULE
131
+ FROM information_schema.KEY_COLUMN_USAGE kcu
132
+ JOIN information_schema.REFERENTIAL_CONSTRAINTS rc
133
+ ON rc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
134
+ AND rc.CONSTRAINT_SCHEMA = kcu.TABLE_SCHEMA
135
+ WHERE kcu.TABLE_SCHEMA = ?
136
+ AND kcu.REFERENCED_TABLE_NAME IS NOT NULL
137
+ ORDER BY kcu.TABLE_NAME, kcu.ORDINAL_POSITION
138
+ `, [schema]);
139
+ return rows.map((r) => ({
140
+ name: r.CONSTRAINT_NAME,
141
+ sourceTable: r.source_table,
142
+ sourceSchema: schema,
143
+ sourceColumn: r.source_column,
144
+ targetTable: r.target_table,
145
+ targetSchema: schema,
146
+ targetColumn: r.target_column,
147
+ onDelete: r.DELETE_RULE !== 'NO ACTION' ? r.DELETE_RULE : undefined,
148
+ onUpdate: r.UPDATE_RULE !== 'NO ACTION' ? r.UPDATE_RULE : undefined,
149
+ }));
150
+ }
151
+ async getIndexes(conn, schema) {
152
+ const [rows] = await conn.query(`
153
+ SELECT TABLE_NAME, INDEX_NAME, COLUMN_NAME, NON_UNIQUE
154
+ FROM information_schema.STATISTICS
155
+ WHERE TABLE_SCHEMA = ?
156
+ AND INDEX_NAME != 'PRIMARY'
157
+ ORDER BY TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX
158
+ `, [schema]);
159
+ // 인덱스별 그룹핑
160
+ const indexMap = new Map();
161
+ for (const r of rows) {
162
+ const key = `${r.TABLE_NAME}.${r.INDEX_NAME}`;
163
+ if (!indexMap.has(key)) {
164
+ indexMap.set(key, {
165
+ tableName: r.TABLE_NAME,
166
+ indexName: r.INDEX_NAME,
167
+ unique: r.NON_UNIQUE === 0,
168
+ columns: [],
169
+ });
170
+ }
171
+ indexMap.get(key).columns.push(r.COLUMN_NAME);
172
+ }
173
+ return Array.from(indexMap.values());
174
+ }
175
+ buildPKMap(pks) {
176
+ const map = new Map();
177
+ for (const pk of pks) {
178
+ if (!map.has(pk.TABLE_NAME))
179
+ map.set(pk.TABLE_NAME, new Set());
180
+ map.get(pk.TABLE_NAME).add(pk.COLUMN_NAME);
181
+ }
182
+ return map;
183
+ }
184
+ buildIndexMap(indexes) {
185
+ const map = new Map();
186
+ for (const idx of indexes) {
187
+ if (!map.has(idx.tableName))
188
+ map.set(idx.tableName, []);
189
+ map.get(idx.tableName).push({
190
+ name: idx.indexName,
191
+ columns: idx.columns,
192
+ unique: idx.unique,
193
+ });
194
+ }
195
+ return map;
196
+ }
197
+ }
198
+ //# sourceMappingURL=mysql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../src/extractors/mysql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { SchemaExtractor, ConnectionConfig, ExtractedSchema } from '../types.js';
2
+ export declare class PostgresExtractor implements SchemaExtractor {
3
+ /**
4
+ * 연결 테스트 — PostgreSQL 버전 반환
5
+ */
6
+ testConnection(config: ConnectionConfig): Promise<string>;
7
+ /**
8
+ * 스키마 추출 — 테이블, 컬럼, PK, FK, 인덱스를 한 번에 추출
9
+ */
10
+ extract(config: ConnectionConfig): Promise<ExtractedSchema>;
11
+ private createClient;
12
+ private getVersion;
13
+ private getTables;
14
+ private getPrimaryKeys;
15
+ private getForeignKeys;
16
+ private getIndexes;
17
+ private parseIndexColumns;
18
+ private buildPKMap;
19
+ private buildIndexMap;
20
+ private formatType;
21
+ }
22
+ //# sourceMappingURL=postgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/extractors/postgres.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,eAAe,EACf,gBAAgB,EAChB,eAAe,EAKlB,MAAM,aAAa,CAAC;AAErB,qBAAa,iBAAkB,YAAW,eAAe;IACrD;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAW/D;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IA0DjE,OAAO,CAAC,YAAY;YAaN,UAAU;YAKV,SAAS;YAsDT,cAAc;YAkBd,cAAc;YAwCd,UAAU;IAsBxB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,UAAU;CAiBrB"}