@chinjinyu/mcp-knowledge-graph-plus 0.1.1

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 (110) hide show
  1. package/README.md +700 -0
  2. package/dist/application/services/FactService.d.ts +16 -0
  3. package/dist/application/services/FactService.d.ts.map +1 -0
  4. package/dist/application/services/FactService.js +50 -0
  5. package/dist/application/services/FactService.js.map +1 -0
  6. package/dist/application/services/KnowledgeGraphService.d.ts +33 -0
  7. package/dist/application/services/KnowledgeGraphService.d.ts.map +1 -0
  8. package/dist/application/services/KnowledgeGraphService.js +271 -0
  9. package/dist/application/services/KnowledgeGraphService.js.map +1 -0
  10. package/dist/application/services/LinkService.d.ts +17 -0
  11. package/dist/application/services/LinkService.d.ts.map +1 -0
  12. package/dist/application/services/LinkService.js +53 -0
  13. package/dist/application/services/LinkService.js.map +1 -0
  14. package/dist/application/services/NodeService.d.ts +31 -0
  15. package/dist/application/services/NodeService.d.ts.map +1 -0
  16. package/dist/application/services/NodeService.js +69 -0
  17. package/dist/application/services/NodeService.js.map +1 -0
  18. package/dist/core/config/index.d.ts +34 -0
  19. package/dist/core/config/index.d.ts.map +1 -0
  20. package/dist/core/config/index.js +60 -0
  21. package/dist/core/config/index.js.map +1 -0
  22. package/dist/core/errors/index.d.ts +70 -0
  23. package/dist/core/errors/index.d.ts.map +1 -0
  24. package/dist/core/errors/index.js +120 -0
  25. package/dist/core/errors/index.js.map +1 -0
  26. package/dist/core/types/index.d.ts +119 -0
  27. package/dist/core/types/index.d.ts.map +1 -0
  28. package/dist/core/types/index.js +5 -0
  29. package/dist/core/types/index.js.map +1 -0
  30. package/dist/index.d.ts +5 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +117 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/infrastructure/database/DatabaseManager.d.ts +13 -0
  35. package/dist/infrastructure/database/DatabaseManager.d.ts.map +1 -0
  36. package/dist/infrastructure/database/DatabaseManager.js +101 -0
  37. package/dist/infrastructure/database/DatabaseManager.js.map +1 -0
  38. package/dist/infrastructure/di/Container.d.ts +21 -0
  39. package/dist/infrastructure/di/Container.d.ts.map +1 -0
  40. package/dist/infrastructure/di/Container.js +45 -0
  41. package/dist/infrastructure/di/Container.js.map +1 -0
  42. package/dist/infrastructure/repositories/BaseRepository.d.ts +23 -0
  43. package/dist/infrastructure/repositories/BaseRepository.d.ts.map +1 -0
  44. package/dist/infrastructure/repositories/BaseRepository.js +84 -0
  45. package/dist/infrastructure/repositories/BaseRepository.js.map +1 -0
  46. package/dist/infrastructure/repositories/FactRepository.d.ts +28 -0
  47. package/dist/infrastructure/repositories/FactRepository.d.ts.map +1 -0
  48. package/dist/infrastructure/repositories/FactRepository.js +101 -0
  49. package/dist/infrastructure/repositories/FactRepository.js.map +1 -0
  50. package/dist/infrastructure/repositories/LinkRepository.d.ts +28 -0
  51. package/dist/infrastructure/repositories/LinkRepository.d.ts.map +1 -0
  52. package/dist/infrastructure/repositories/LinkRepository.js +107 -0
  53. package/dist/infrastructure/repositories/LinkRepository.js.map +1 -0
  54. package/dist/infrastructure/repositories/NodeRepository.d.ts +28 -0
  55. package/dist/infrastructure/repositories/NodeRepository.d.ts.map +1 -0
  56. package/dist/infrastructure/repositories/NodeRepository.js +143 -0
  57. package/dist/infrastructure/repositories/NodeRepository.js.map +1 -0
  58. package/dist/interfaces/mcp/commands/BaseCommand.d.ts +55 -0
  59. package/dist/interfaces/mcp/commands/BaseCommand.d.ts.map +1 -0
  60. package/dist/interfaces/mcp/commands/BaseCommand.js +42 -0
  61. package/dist/interfaces/mcp/commands/BaseCommand.js.map +1 -0
  62. package/dist/interfaces/mcp/commands/FactAddCommand.d.ts +42 -0
  63. package/dist/interfaces/mcp/commands/FactAddCommand.d.ts.map +1 -0
  64. package/dist/interfaces/mcp/commands/FactAddCommand.js +73 -0
  65. package/dist/interfaces/mcp/commands/FactAddCommand.js.map +1 -0
  66. package/dist/interfaces/mcp/commands/FactDelCommand.d.ts +42 -0
  67. package/dist/interfaces/mcp/commands/FactDelCommand.d.ts.map +1 -0
  68. package/dist/interfaces/mcp/commands/FactDelCommand.js +68 -0
  69. package/dist/interfaces/mcp/commands/FactDelCommand.js.map +1 -0
  70. package/dist/interfaces/mcp/commands/FactEditCommand.d.ts +43 -0
  71. package/dist/interfaces/mcp/commands/FactEditCommand.d.ts.map +1 -0
  72. package/dist/interfaces/mcp/commands/FactEditCommand.js +68 -0
  73. package/dist/interfaces/mcp/commands/FactEditCommand.js.map +1 -0
  74. package/dist/interfaces/mcp/commands/LinkAddCommand.d.ts +43 -0
  75. package/dist/interfaces/mcp/commands/LinkAddCommand.d.ts.map +1 -0
  76. package/dist/interfaces/mcp/commands/LinkAddCommand.js +63 -0
  77. package/dist/interfaces/mcp/commands/LinkAddCommand.js.map +1 -0
  78. package/dist/interfaces/mcp/commands/LinkDelCommand.d.ts +43 -0
  79. package/dist/interfaces/mcp/commands/LinkDelCommand.d.ts.map +1 -0
  80. package/dist/interfaces/mcp/commands/LinkDelCommand.js +65 -0
  81. package/dist/interfaces/mcp/commands/LinkDelCommand.js.map +1 -0
  82. package/dist/interfaces/mcp/commands/LinkEditCommand.d.ts +47 -0
  83. package/dist/interfaces/mcp/commands/LinkEditCommand.d.ts.map +1 -0
  84. package/dist/interfaces/mcp/commands/LinkEditCommand.js +75 -0
  85. package/dist/interfaces/mcp/commands/LinkEditCommand.js.map +1 -0
  86. package/dist/interfaces/mcp/commands/ListCommand.d.ts +33 -0
  87. package/dist/interfaces/mcp/commands/ListCommand.d.ts.map +1 -0
  88. package/dist/interfaces/mcp/commands/ListCommand.js +57 -0
  89. package/dist/interfaces/mcp/commands/ListCommand.js.map +1 -0
  90. package/dist/interfaces/mcp/commands/NodeAddCommand.d.ts +46 -0
  91. package/dist/interfaces/mcp/commands/NodeAddCommand.d.ts.map +1 -0
  92. package/dist/interfaces/mcp/commands/NodeAddCommand.js +67 -0
  93. package/dist/interfaces/mcp/commands/NodeAddCommand.js.map +1 -0
  94. package/dist/interfaces/mcp/commands/NodeDelCommand.d.ts +32 -0
  95. package/dist/interfaces/mcp/commands/NodeDelCommand.d.ts.map +1 -0
  96. package/dist/interfaces/mcp/commands/NodeDelCommand.js +63 -0
  97. package/dist/interfaces/mcp/commands/NodeDelCommand.js.map +1 -0
  98. package/dist/interfaces/mcp/commands/NodeEditCommand.d.ts +43 -0
  99. package/dist/interfaces/mcp/commands/NodeEditCommand.d.ts.map +1 -0
  100. package/dist/interfaces/mcp/commands/NodeEditCommand.js +63 -0
  101. package/dist/interfaces/mcp/commands/NodeEditCommand.js.map +1 -0
  102. package/dist/interfaces/mcp/commands/NodeGetCommand.d.ts +40 -0
  103. package/dist/interfaces/mcp/commands/NodeGetCommand.d.ts.map +1 -0
  104. package/dist/interfaces/mcp/commands/NodeGetCommand.js +72 -0
  105. package/dist/interfaces/mcp/commands/NodeGetCommand.js.map +1 -0
  106. package/dist/interfaces/mcp/commands/SearchCommand.d.ts +53 -0
  107. package/dist/interfaces/mcp/commands/SearchCommand.d.ts.map +1 -0
  108. package/dist/interfaces/mcp/commands/SearchCommand.js +91 -0
  109. package/dist/interfaces/mcp/commands/SearchCommand.js.map +1 -0
  110. package/package.json +10 -0
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Configuration Management
3
+ */
4
+ export const LogLevel = {
5
+ DEBUG: 'debug',
6
+ INFO: 'info',
7
+ WARN: 'warn',
8
+ ERROR: 'error',
9
+ NONE: 'none',
10
+ };
11
+ export const Environment = {
12
+ DEVELOPMENT: 'development',
13
+ PRODUCTION: 'production',
14
+ TEST: 'test',
15
+ };
16
+ export function createConfig(dbPath, environment = Environment.PRODUCTION) {
17
+ return Object.freeze({
18
+ name: 'MCP Knowledge Graph Plus',
19
+ version: '2.0.0',
20
+ environment,
21
+ dbPath,
22
+ logLevel: environment === Environment.TEST ? LogLevel.NONE : LogLevel.INFO,
23
+ });
24
+ }
25
+ export function getEnvironmentFromEnv() {
26
+ const env = process.env.NODE_ENV?.toLowerCase();
27
+ switch (env) {
28
+ case 'development': return Environment.DEVELOPMENT;
29
+ case 'test': return Environment.TEST;
30
+ default: return Environment.PRODUCTION;
31
+ }
32
+ }
33
+ /**
34
+ * Parse command line arguments to get database path
35
+ * Supports both formats:
36
+ * - --db-path=/path/to/db.db
37
+ * - --db-path /path/to/db.db
38
+ */
39
+ export function getDatabasePathFromEnv(defaultPath) {
40
+ // 1. Check environment variable first
41
+ if (process.env.DB_PATH !== undefined) {
42
+ return process.env.DB_PATH;
43
+ }
44
+ // 2. Parse command line arguments
45
+ const args = process.argv.slice(2); // Skip node and script path
46
+ for (let i = 0; i < args.length; i++) {
47
+ const arg = args[i];
48
+ // Format: --db-path=/path/to/db.db
49
+ if (arg.startsWith('--db-path=')) {
50
+ return arg.split('=')[1];
51
+ }
52
+ // Format: --db-path /path/to/db.db
53
+ if (arg === '--db-path' && i + 1 < args.length) {
54
+ return args[i + 1];
55
+ }
56
+ }
57
+ // 3. Return default path
58
+ return defaultPath;
59
+ }
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;CACJ,CAAC;AAIX,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY;IACxB,IAAI,EAAE,MAAM;CACJ,CAAC;AAYX,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,cAA2B,WAAW,CAAC,UAAU;IAC5F,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,OAAO;QAChB,WAAW;QACX,MAAM;QACN,QAAQ,EAAE,WAAW,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;KAC3E,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;IAChD,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,aAAa,CAAC,CAAC,OAAO,WAAW,CAAC,WAAW,CAAC;QACnD,KAAK,MAAM,CAAC,CAAC,OAAO,WAAW,CAAC,IAAI,CAAC;QACrC,OAAO,CAAC,CAAC,OAAO,WAAW,CAAC,UAAU,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAmB;IACxD,sCAAsC;IACtC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED,kCAAkC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B;IAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,mCAAmC;QACnC,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,mCAAmC;QACnC,IAAI,GAAG,KAAK,WAAW,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Error Handling System
3
+ */
4
+ export declare const ErrorCode: {
5
+ readonly VALIDATION_ERROR: "ERR_VALIDATION";
6
+ readonly NODE_NOT_FOUND: "ERR_NODE_NOT_FOUND";
7
+ readonly NODE_ALREADY_EXISTS: "ERR_NODE_ALREADY_EXISTS";
8
+ readonly LINK_NOT_FOUND: "ERR_LINK_NOT_FOUND";
9
+ readonly LINK_ALREADY_EXISTS: "ERR_LINK_ALREADY_EXISTS";
10
+ readonly FACT_NOT_FOUND: "ERR_FACT_NOT_FOUND";
11
+ readonly DATABASE_ERROR: "ERR_DATABASE";
12
+ readonly DATABASE_CONNECTION_ERROR: "ERR_DATABASE_CONNECTION";
13
+ readonly INTERNAL_ERROR: "ERR_INTERNAL";
14
+ };
15
+ export type ErrorCode = typeof ErrorCode[keyof typeof ErrorCode];
16
+ export interface ErrorOptions {
17
+ readonly details?: unknown;
18
+ readonly cause?: unknown;
19
+ }
20
+ export declare abstract class AppError extends Error {
21
+ readonly code: ErrorCode;
22
+ readonly details?: unknown;
23
+ readonly cause?: unknown;
24
+ readonly timestamp: string;
25
+ constructor(message: string, code: ErrorCode, options?: ErrorOptions);
26
+ toJSON(): Record<string, unknown>;
27
+ is(errorCode: ErrorCode): boolean;
28
+ }
29
+ export interface ValidationErrorDetails {
30
+ readonly field: string;
31
+ readonly value: unknown;
32
+ readonly reason: string;
33
+ readonly suggestion?: string;
34
+ readonly example?: string;
35
+ }
36
+ export declare class ValidationError extends AppError {
37
+ readonly fieldErrors: readonly ValidationErrorDetails[];
38
+ constructor(message: string, fieldErrors: readonly ValidationErrorDetails[]);
39
+ static forField(field: string, value: unknown, reason: string, suggestion?: string, example?: string): ValidationError;
40
+ static forFields(errors: readonly ValidationErrorDetails[]): ValidationError;
41
+ toJSON(): Record<string, unknown>;
42
+ }
43
+ export declare class NodeNotFoundError extends AppError {
44
+ constructor(name: string);
45
+ }
46
+ export declare class NodeAlreadyExistsError extends AppError {
47
+ constructor(name: string);
48
+ }
49
+ export declare class LinkNotFoundError extends AppError {
50
+ constructor(from: string, to: string, type: string);
51
+ }
52
+ export declare class LinkAlreadyExistsError extends AppError {
53
+ constructor(from: string, to: string, type: string);
54
+ }
55
+ export declare class FactNotFoundError extends AppError {
56
+ constructor(nodeName: string, content: string);
57
+ }
58
+ export declare class DatabaseError extends AppError {
59
+ constructor(message: string, cause?: unknown);
60
+ }
61
+ export declare class DatabaseConnectionError extends DatabaseError {
62
+ constructor(path: string, cause?: unknown);
63
+ }
64
+ export declare class InternalError extends AppError {
65
+ constructor(message: string, cause?: unknown);
66
+ }
67
+ export declare function isAppError(error: unknown): error is AppError;
68
+ export declare function isValidationError(error: unknown): error is ValidationError;
69
+ export declare function isNotFoundError(error: unknown): error is NodeNotFoundError | LinkNotFoundError | FactNotFoundError;
70
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/errors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,SAAS;;;;;;;;;;CAUZ,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEjE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,8BAAsB,QAAS,SAAQ,KAAK;IAC1C,SAAgB,IAAI,EAAE,SAAS,CAAC;IAChC,SAAgB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClC,SAAgB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChC,SAAgB,SAAS,EAAE,MAAM,CAAC;gBAEtB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY;IAUpE,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAWjC,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;CAGlC;AAGD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,SAAgB,WAAW,EAAE,SAAS,sBAAsB,EAAE,CAAC;gBAEnD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,sBAAsB,EAAE;IAK3E,MAAM,CAAC,QAAQ,CACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,GACf,eAAe;IAOlB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,sBAAsB,EAAE,GAAG,eAAe;IAI5E,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAUlC;AAGD,qBAAa,iBAAkB,SAAQ,QAAQ;gBACjC,IAAI,EAAE,MAAM;CAGzB;AAED,qBAAa,sBAAuB,SAAQ,QAAQ;gBACtC,IAAI,EAAE,MAAM;CAGzB;AAGD,qBAAa,iBAAkB,SAAQ,QAAQ;gBACjC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAGnD;AAED,qBAAa,sBAAuB,SAAQ,QAAQ;gBACtC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAGnD;AAGD,qBAAa,iBAAkB,SAAQ,QAAQ;gBACjC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAG9C;AAGD,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAG7C;AAED,qBAAa,uBAAwB,SAAQ,aAAa;gBAC5C,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI1C;AAED,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAG7C;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB,CAElH"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Error Handling System
3
+ */
4
+ export const ErrorCode = {
5
+ VALIDATION_ERROR: 'ERR_VALIDATION',
6
+ NODE_NOT_FOUND: 'ERR_NODE_NOT_FOUND',
7
+ NODE_ALREADY_EXISTS: 'ERR_NODE_ALREADY_EXISTS',
8
+ LINK_NOT_FOUND: 'ERR_LINK_NOT_FOUND',
9
+ LINK_ALREADY_EXISTS: 'ERR_LINK_ALREADY_EXISTS',
10
+ FACT_NOT_FOUND: 'ERR_FACT_NOT_FOUND',
11
+ DATABASE_ERROR: 'ERR_DATABASE',
12
+ DATABASE_CONNECTION_ERROR: 'ERR_DATABASE_CONNECTION',
13
+ INTERNAL_ERROR: 'ERR_INTERNAL',
14
+ };
15
+ export class AppError extends Error {
16
+ code;
17
+ details;
18
+ cause;
19
+ timestamp;
20
+ constructor(message, code, options) {
21
+ super(message, { cause: options?.cause });
22
+ Object.setPrototypeOf(this, new.target.prototype);
23
+ this.code = code;
24
+ this.details = options?.details;
25
+ this.cause = options?.cause;
26
+ this.timestamp = new Date().toISOString();
27
+ this.name = this.constructor.name;
28
+ }
29
+ toJSON() {
30
+ return {
31
+ name: this.name,
32
+ code: this.code,
33
+ message: this.message,
34
+ details: this.details,
35
+ timestamp: this.timestamp,
36
+ stack: process.env.NODE_ENV === 'development' ? this.stack : undefined,
37
+ };
38
+ }
39
+ is(errorCode) {
40
+ return this.code === errorCode;
41
+ }
42
+ }
43
+ export class ValidationError extends AppError {
44
+ fieldErrors;
45
+ constructor(message, fieldErrors) {
46
+ super(message, ErrorCode.VALIDATION_ERROR, { details: fieldErrors });
47
+ this.fieldErrors = fieldErrors;
48
+ }
49
+ static forField(field, value, reason, suggestion, example) {
50
+ return new ValidationError(`Validation failed for '${field}': ${reason}`, [{ field, value, reason, suggestion, example }]);
51
+ }
52
+ static forFields(errors) {
53
+ return new ValidationError(`Validation failed for ${errors.length} fields`, errors);
54
+ }
55
+ toJSON() {
56
+ const base = super.toJSON();
57
+ const firstError = this.fieldErrors[0];
58
+ return {
59
+ ...base,
60
+ suggestion: firstError?.suggestion,
61
+ example: firstError?.example,
62
+ };
63
+ }
64
+ }
65
+ // Node Errors
66
+ export class NodeNotFoundError extends AppError {
67
+ constructor(name) {
68
+ super(`Node not found: ${name}`, ErrorCode.NODE_NOT_FOUND, { details: { name } });
69
+ }
70
+ }
71
+ export class NodeAlreadyExistsError extends AppError {
72
+ constructor(name) {
73
+ super(`Node already exists: ${name}`, ErrorCode.NODE_ALREADY_EXISTS, { details: { name } });
74
+ }
75
+ }
76
+ // Link Errors
77
+ export class LinkNotFoundError extends AppError {
78
+ constructor(from, to, type) {
79
+ super(`Link not found: ${from} -[${type}]-> ${to}`, ErrorCode.LINK_NOT_FOUND, { details: { from, to, type } });
80
+ }
81
+ }
82
+ export class LinkAlreadyExistsError extends AppError {
83
+ constructor(from, to, type) {
84
+ super(`Link already exists: ${from} -[${type}]-> ${to}`, ErrorCode.LINK_ALREADY_EXISTS, { details: { from, to, type } });
85
+ }
86
+ }
87
+ // Fact Errors
88
+ export class FactNotFoundError extends AppError {
89
+ constructor(nodeName, content) {
90
+ super(`Fact not found for node '${nodeName}': ${content}`, ErrorCode.FACT_NOT_FOUND, { details: { nodeName, content } });
91
+ }
92
+ }
93
+ // Database Errors
94
+ export class DatabaseError extends AppError {
95
+ constructor(message, cause) {
96
+ super(message, ErrorCode.DATABASE_ERROR, { cause });
97
+ }
98
+ }
99
+ export class DatabaseConnectionError extends DatabaseError {
100
+ constructor(path, cause) {
101
+ super(`Failed to connect to database: ${path}`, cause);
102
+ Object.defineProperty(this, 'code', { value: ErrorCode.DATABASE_CONNECTION_ERROR, enumerable: false, writable: false });
103
+ }
104
+ }
105
+ export class InternalError extends AppError {
106
+ constructor(message, cause) {
107
+ super(message, ErrorCode.INTERNAL_ERROR, { cause });
108
+ }
109
+ }
110
+ // Type Guards
111
+ export function isAppError(error) {
112
+ return error instanceof AppError;
113
+ }
114
+ export function isValidationError(error) {
115
+ return error instanceof ValidationError;
116
+ }
117
+ export function isNotFoundError(error) {
118
+ return error instanceof NodeNotFoundError || error instanceof LinkNotFoundError || error instanceof FactNotFoundError;
119
+ }
120
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/errors/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Core Type Definitions
3
+ */
4
+ export type ID = number;
5
+ export type Timestamp = string;
6
+ export interface EntityRow {
7
+ [key: string]: unknown;
8
+ id: number;
9
+ name: string;
10
+ entity_type: string;
11
+ created_at: string;
12
+ updated_at: string;
13
+ }
14
+ export interface RelationRow {
15
+ [key: string]: unknown;
16
+ id: number;
17
+ from_entity_id: number;
18
+ to_entity_id: number;
19
+ relation_type: string;
20
+ created_at: string;
21
+ updated_at: string;
22
+ }
23
+ export interface ObservationRow {
24
+ [key: string]: unknown;
25
+ id: number;
26
+ entity_id: number;
27
+ content: string;
28
+ created_at: string;
29
+ updated_at: string;
30
+ }
31
+ export interface Node {
32
+ readonly id: ID;
33
+ readonly name: string;
34
+ readonly type: string;
35
+ readonly createdAt: Timestamp;
36
+ readonly updatedAt: Timestamp;
37
+ }
38
+ export interface CreateNodeInput {
39
+ readonly name: string;
40
+ readonly type: string;
41
+ readonly facts?: readonly string[];
42
+ }
43
+ export interface UpdateNodeInput {
44
+ readonly nodeName: string;
45
+ readonly newName?: string;
46
+ readonly newType?: string;
47
+ }
48
+ export interface Fact {
49
+ readonly id: ID;
50
+ readonly nodeId: ID;
51
+ readonly content: string;
52
+ readonly createdAt: Timestamp;
53
+ readonly updatedAt: Timestamp;
54
+ }
55
+ export interface Link {
56
+ readonly id: ID;
57
+ readonly fromNodeId: ID;
58
+ readonly toNodeId: ID;
59
+ readonly type: string;
60
+ readonly createdAt: Timestamp;
61
+ readonly updatedAt: Timestamp;
62
+ }
63
+ export interface CreateLinkInput {
64
+ readonly from: string;
65
+ readonly to: string;
66
+ readonly type: string;
67
+ }
68
+ export interface UpdateLinkInput {
69
+ readonly from: string;
70
+ readonly to: string;
71
+ readonly oldType: string;
72
+ readonly newType: string;
73
+ }
74
+ export interface LinkWithNames {
75
+ readonly from: string;
76
+ readonly to: string;
77
+ readonly type: string;
78
+ }
79
+ export interface CreateFactInput {
80
+ readonly nodeName: string;
81
+ readonly contents: readonly string[];
82
+ }
83
+ export interface UpdateFactInput {
84
+ readonly nodeName: string;
85
+ readonly oldContent: string;
86
+ readonly newContent: string;
87
+ }
88
+ export interface NodeWithFacts {
89
+ readonly id: ID;
90
+ readonly name: string;
91
+ readonly type: string;
92
+ readonly facts: readonly Fact[];
93
+ }
94
+ export interface GraphOutput {
95
+ readonly nodes: readonly NodeWithFacts[];
96
+ readonly links: readonly LinkWithNames[];
97
+ }
98
+ export interface PaginationOptions {
99
+ readonly page: number;
100
+ readonly pageSize: number;
101
+ }
102
+ export interface PaginationInfo {
103
+ readonly page: number;
104
+ readonly pageSize: number;
105
+ readonly totalItems: number;
106
+ readonly totalPages: number;
107
+ readonly hasNextPage: boolean;
108
+ readonly hasPrevPage: boolean;
109
+ }
110
+ export interface PaginatedResult<T> {
111
+ readonly data: T;
112
+ readonly pagination: PaginationInfo;
113
+ }
114
+ export type SearchField = 'name' | 'type' | 'link' | 'fact';
115
+ export type SearchLogic = 'or' | 'and';
116
+ export interface CountResult {
117
+ readonly count: number;
118
+ }
119
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Core Type Definitions
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * MCP Knowledge Graph Plus - Entry Point
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/dist/index.js ADDED
@@ -0,0 +1,117 @@
1
+ /**
2
+ * MCP Knowledge Graph Plus - Entry Point
3
+ */
4
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
5
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
6
+ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
7
+ import { Container } from './infrastructure/di/Container.js';
8
+ import { DatabaseManager } from './infrastructure/database/DatabaseManager.js';
9
+ import { NodeRepository } from './infrastructure/repositories/NodeRepository.js';
10
+ import { LinkRepository } from './infrastructure/repositories/LinkRepository.js';
11
+ import { FactRepository } from './infrastructure/repositories/FactRepository.js';
12
+ import { NodeService } from './application/services/NodeService.js';
13
+ import { LinkService } from './application/services/LinkService.js';
14
+ import { FactService } from './application/services/FactService.js';
15
+ import { KnowledgeGraphService } from './application/services/KnowledgeGraphService.js';
16
+ import { getEnvironmentFromEnv, getDatabasePathFromEnv, createConfig } from './core/config/index.js';
17
+ import { isValidationError } from './core/errors/index.js';
18
+ import { NodeAddCommand } from './interfaces/mcp/commands/NodeAddCommand.js';
19
+ import { LinkAddCommand } from './interfaces/mcp/commands/LinkAddCommand.js';
20
+ import { FactAddCommand } from './interfaces/mcp/commands/FactAddCommand.js';
21
+ import { NodeDelCommand } from './interfaces/mcp/commands/NodeDelCommand.js';
22
+ import { LinkDelCommand } from './interfaces/mcp/commands/LinkDelCommand.js';
23
+ import { FactDelCommand } from './interfaces/mcp/commands/FactDelCommand.js';
24
+ import { NodeEditCommand } from './interfaces/mcp/commands/NodeEditCommand.js';
25
+ import { LinkEditCommand } from './interfaces/mcp/commands/LinkEditCommand.js';
26
+ import { FactEditCommand } from './interfaces/mcp/commands/FactEditCommand.js';
27
+ import { ListCommand } from './interfaces/mcp/commands/ListCommand.js';
28
+ import { SearchCommand } from './interfaces/mcp/commands/SearchCommand.js';
29
+ import { NodeGetCommand } from './interfaces/mcp/commands/NodeGetCommand.js';
30
+ // Service tokens
31
+ const TOKENS = {
32
+ DatabaseManager: 'DatabaseManager',
33
+ NodeRepository: 'NodeRepository',
34
+ LinkRepository: 'LinkRepository',
35
+ FactRepository: 'FactRepository',
36
+ NodeService: 'NodeService',
37
+ LinkService: 'LinkService',
38
+ FactService: 'FactService',
39
+ KnowledgeGraphService: 'KnowledgeGraphService',
40
+ };
41
+ async function bootstrap() {
42
+ const env = getEnvironmentFromEnv();
43
+ const dbPath = getDatabasePathFromEnv('./default.db');
44
+ const config = createConfig(dbPath, env);
45
+ console.error(`Starting ${config.name} v${config.version}...`);
46
+ console.error(`Environment: ${config.environment}`);
47
+ console.error(`Database: ${config.dbPath}`);
48
+ // Create container and register services
49
+ const container = new Container();
50
+ const dbManager = new DatabaseManager(config.dbPath);
51
+ await dbManager.initialize();
52
+ container.instance(TOKENS.DatabaseManager, dbManager);
53
+ container.singleton(TOKENS.NodeRepository, (c) => new NodeRepository(c.resolve(TOKENS.DatabaseManager).getConnection()));
54
+ container.singleton(TOKENS.LinkRepository, (c) => new LinkRepository(c.resolve(TOKENS.DatabaseManager).getConnection()));
55
+ container.singleton(TOKENS.FactRepository, (c) => new FactRepository(c.resolve(TOKENS.DatabaseManager).getConnection()));
56
+ container.singleton(TOKENS.NodeService, (c) => new NodeService(c.resolve(TOKENS.NodeRepository), c.resolve(TOKENS.FactRepository), c.resolve(TOKENS.LinkRepository)));
57
+ container.singleton(TOKENS.LinkService, (c) => new LinkService(c.resolve(TOKENS.LinkRepository), c.resolve(TOKENS.NodeRepository)));
58
+ container.singleton(TOKENS.FactService, (c) => new FactService(c.resolve(TOKENS.FactRepository), c.resolve(TOKENS.NodeRepository)));
59
+ container.singleton(TOKENS.KnowledgeGraphService, (c) => new KnowledgeGraphService(c.resolve(TOKENS.NodeRepository), c.resolve(TOKENS.LinkRepository), c.resolve(TOKENS.FactRepository)));
60
+ // Create commands
61
+ const commands = [
62
+ new NodeAddCommand(container.resolve(TOKENS.NodeService)),
63
+ new LinkAddCommand(container.resolve(TOKENS.LinkService)),
64
+ new FactAddCommand(container.resolve(TOKENS.FactService)),
65
+ new NodeDelCommand(container.resolve(TOKENS.NodeService), container.resolve(TOKENS.FactRepository), container.resolve(TOKENS.LinkRepository)),
66
+ new LinkDelCommand(container.resolve(TOKENS.LinkService)),
67
+ new FactDelCommand(container.resolve(TOKENS.FactService)),
68
+ new NodeEditCommand(container.resolve(TOKENS.NodeService)),
69
+ new LinkEditCommand(container.resolve(TOKENS.LinkService)),
70
+ new FactEditCommand(container.resolve(TOKENS.FactService)),
71
+ new ListCommand(container.resolve(TOKENS.KnowledgeGraphService)),
72
+ new SearchCommand(container.resolve(TOKENS.KnowledgeGraphService)),
73
+ new NodeGetCommand(container.resolve(TOKENS.KnowledgeGraphService)),
74
+ ];
75
+ // Create MCP server
76
+ const server = new Server({ name: config.name, version: config.version }, { capabilities: { tools: {} } });
77
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
78
+ tools: commands.map(cmd => ({ name: cmd.name, description: cmd.description, inputSchema: cmd.inputSchema })),
79
+ }));
80
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
81
+ const { name, arguments: args } = request.params;
82
+ const command = commands.find(c => c.name === name);
83
+ if (!command)
84
+ return { content: [{ type: 'text', text: `Unknown tool: ${name}` }], isError: true };
85
+ if (!args)
86
+ return { content: [{ type: 'text', text: `No arguments for: ${name}` }], isError: true };
87
+ try {
88
+ return await command.execute(args);
89
+ }
90
+ catch (error) {
91
+ if (isValidationError(error)) {
92
+ const errorInfo = error.toJSON();
93
+ return {
94
+ content: [{
95
+ type: 'text',
96
+ text: JSON.stringify({
97
+ error: errorInfo.code,
98
+ message: errorInfo.message,
99
+ suggestion: errorInfo.suggestion,
100
+ example: errorInfo.example,
101
+ }, null, 2),
102
+ }],
103
+ isError: true,
104
+ };
105
+ }
106
+ return { content: [{ type: 'text', text: error instanceof Error ? error.message : String(error) }], isError: true };
107
+ }
108
+ });
109
+ const transport = new StdioServerTransport();
110
+ await server.connect(transport);
111
+ console.error('Server started successfully');
112
+ }
113
+ bootstrap().catch((error) => {
114
+ console.error('Fatal error:', error);
115
+ process.exit(1);
116
+ });
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,YAAY,EAAe,MAAM,wBAAwB,CAAC;AAClH,OAAO,EAAmB,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAE7E,iBAAiB;AACjB,MAAM,MAAM,GAAG;IACb,eAAe,EAAE,iBAAiB;IAClC,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;IAC1B,qBAAqB,EAAE,uBAAuB;CACtC,CAAC;AAEX,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEzC,OAAO,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC;IAC/D,OAAO,CAAC,KAAK,CAAC,gBAAgB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAE5C,yCAAyC;IACzC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAElC,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;IAC7B,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IAEtD,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,OAAO,CAAkB,MAAM,CAAC,eAAe,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC1I,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,OAAO,CAAkB,MAAM,CAAC,eAAe,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC1I,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,OAAO,CAAkB,MAAM,CAAC,eAAe,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAE1I,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAC5D,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAChC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAChC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CACjC,CAAC,CAAC;IACH,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAC5D,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAChC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CACjC,CAAC,CAAC;IACH,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAC5D,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAChC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CACjC,CAAC,CAAC;IACH,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAChF,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAChC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAChC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CACjC,CAAC,CAAC;IAEH,kBAAkB;IAClB,MAAM,QAAQ,GAAG;QACf,IAAI,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,cAAc,CAChB,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EACrC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EACxC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CACzC;QACD,IAAI,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAChE,IAAI,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAClE,IAAI,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;KACpE,CAAC;IAEF,oBAAoB;IACpB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAE3G,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;KAC7G,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACnG,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAEpG,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjC,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,KAAK,EAAE,SAAS,CAAC,IAAI;gCACrB,OAAO,EAAE,SAAS,CAAC,OAAO;gCAC1B,UAAU,EAAE,SAAS,CAAC,UAAU;gCAChC,OAAO,EAAE,SAAS,CAAC,OAAO;6BAC3B,EAAE,IAAI,EAAE,CAAC,CAAC;yBACZ,CAAC;oBACF,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC1B,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Database Manager
3
+ */
4
+ export declare class DatabaseManager {
5
+ private readonly dbPath;
6
+ private db;
7
+ constructor(dbPath: string);
8
+ initialize(): Promise<void>;
9
+ getConnection(): any;
10
+ close(): Promise<void>;
11
+ isConnected(): boolean;
12
+ }
13
+ //# sourceMappingURL=DatabaseManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabaseManager.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/database/DatabaseManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4CH,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,EAAE,CAAa;gBAEM,MAAM,EAAE,MAAM;IAErC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBjC,aAAa,IAAI,GAAG;IAKd,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B,WAAW,IAAI,OAAO;CAGvB"}