simplemdg-dev-cli 2.0.4 → 2.4.4

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 (140) hide show
  1. package/README.md +63 -354
  2. package/USER_GUIDE.md +55 -378
  3. package/dist/commands/cds.command.js +69 -60
  4. package/dist/commands/cds.command.js.map +1 -1
  5. package/dist/commands/cf-db.command.d.ts +2 -0
  6. package/dist/commands/cf-db.command.js +606 -0
  7. package/dist/commands/cf-db.command.js.map +1 -0
  8. package/dist/commands/cf.command.js +291 -280
  9. package/dist/commands/cf.command.js.map +1 -1
  10. package/dist/commands/gitlab.command.d.ts +2 -0
  11. package/dist/commands/gitlab.command.js +351 -0
  12. package/dist/commands/gitlab.command.js.map +1 -0
  13. package/dist/commands/npmrc.command.js +50 -44
  14. package/dist/commands/npmrc.command.js.map +1 -1
  15. package/dist/core/cache.d.ts +1 -1
  16. package/dist/core/cache.js +58 -31
  17. package/dist/core/cache.js.map +1 -1
  18. package/dist/core/cds.js +32 -22
  19. package/dist/core/cds.js.map +1 -1
  20. package/dist/core/cf-env-parser.d.ts +1 -1
  21. package/dist/core/cf-env-parser.js +4 -1
  22. package/dist/core/cf-env-parser.js.map +1 -1
  23. package/dist/core/cf.d.ts +1 -1
  24. package/dist/core/cf.js +46 -31
  25. package/dist/core/cf.js.map +1 -1
  26. package/dist/core/db/db-btp.d.ts +48 -0
  27. package/dist/core/db/db-btp.js +162 -0
  28. package/dist/core/db/db-btp.js.map +1 -0
  29. package/dist/core/db/db-cache.d.ts +35 -0
  30. package/dist/core/db/db-cache.js +164 -0
  31. package/dist/core/db/db-cache.js.map +1 -0
  32. package/dist/core/db/db-connection.d.ts +22 -0
  33. package/dist/core/db/db-connection.js +73 -0
  34. package/dist/core/db/db-connection.js.map +1 -0
  35. package/dist/core/db/db-crypto.d.ts +3 -0
  36. package/dist/core/db/db-crypto.js +54 -0
  37. package/dist/core/db/db-crypto.js.map +1 -0
  38. package/dist/core/db/db-hana-adapter.d.ts +32 -0
  39. package/dist/core/db/db-hana-adapter.js +243 -0
  40. package/dist/core/db/db-hana-adapter.js.map +1 -0
  41. package/dist/core/db/db-metadata.d.ts +25 -0
  42. package/dist/core/db/db-metadata.js +150 -0
  43. package/dist/core/db/db-metadata.js.map +1 -0
  44. package/dist/core/db/db-postgres-adapter.d.ts +30 -0
  45. package/dist/core/db/db-postgres-adapter.js +245 -0
  46. package/dist/core/db/db-postgres-adapter.js.map +1 -0
  47. package/dist/core/db/db-query-files.d.ts +20 -0
  48. package/dist/core/db/db-query-files.js +106 -0
  49. package/dist/core/db/db-query-files.js.map +1 -0
  50. package/dist/core/db/db-query-history.d.ts +5 -0
  51. package/dist/core/db/db-query-history.js +49 -0
  52. package/dist/core/db/db-query-history.js.map +1 -0
  53. package/dist/core/db/db-row.d.ts +22 -0
  54. package/dist/core/db/db-row.js +70 -0
  55. package/dist/core/db/db-row.js.map +1 -0
  56. package/dist/core/db/db-studio-html.d.ts +4 -0
  57. package/dist/core/db/db-studio-html.js +437 -0
  58. package/dist/core/db/db-studio-html.js.map +1 -0
  59. package/dist/core/db/db-studio-server.d.ts +11 -0
  60. package/dist/core/db/db-studio-server.js +465 -0
  61. package/dist/core/db/db-studio-server.js.map +1 -0
  62. package/dist/core/db/db-types.d.ts +174 -0
  63. package/dist/core/db/db-types.js +3 -0
  64. package/dist/core/db/db-types.js.map +1 -0
  65. package/dist/core/db/db-vcap-parser.d.ts +7 -0
  66. package/dist/core/db/db-vcap-parser.js +137 -0
  67. package/dist/core/db/db-vcap-parser.js.map +1 -0
  68. package/dist/core/doctor.d.ts +1 -1
  69. package/dist/core/doctor.js +14 -8
  70. package/dist/core/doctor.js.map +1 -1
  71. package/dist/core/guide.js +31 -26
  72. package/dist/core/guide.js.map +1 -1
  73. package/dist/core/install.d.ts +1 -1
  74. package/dist/core/install.js +17 -11
  75. package/dist/core/install.js.map +1 -1
  76. package/dist/core/navigator.d.ts +17 -0
  77. package/dist/core/navigator.js +140 -0
  78. package/dist/core/navigator.js.map +1 -0
  79. package/dist/core/npmrc.js +29 -16
  80. package/dist/core/npmrc.js.map +1 -1
  81. package/dist/core/process.js +11 -6
  82. package/dist/core/process.js.map +1 -1
  83. package/dist/core/prompts.js +16 -8
  84. package/dist/core/prompts.js.map +1 -1
  85. package/dist/core/repository.d.ts +1 -1
  86. package/dist/core/repository.js +16 -9
  87. package/dist/core/repository.js.map +1 -1
  88. package/dist/core/scanner.d.ts +1 -1
  89. package/dist/core/scanner.js +13 -7
  90. package/dist/core/scanner.js.map +1 -1
  91. package/dist/core/tooling.d.ts +28 -0
  92. package/dist/core/tooling.js +168 -0
  93. package/dist/core/tooling.js.map +1 -0
  94. package/dist/core/types.js +2 -1
  95. package/dist/core/version-conflict.d.ts +2 -2
  96. package/dist/core/version-conflict.js +11 -6
  97. package/dist/core/version-conflict.js.map +1 -1
  98. package/dist/index.js +65 -48
  99. package/dist/index.js.map +1 -1
  100. package/dist/types-local.js +2 -1
  101. package/package.json +12 -6
  102. package/src/commands/cds.command.ts +529 -0
  103. package/src/commands/cf-db.command.ts +636 -0
  104. package/src/commands/cf.command.ts +3345 -0
  105. package/src/commands/gitlab.command.ts +373 -0
  106. package/src/commands/npmrc.command.ts +581 -0
  107. package/src/core/cache.ts +332 -0
  108. package/src/core/cds.ts +278 -0
  109. package/src/core/cf-env-parser.ts +131 -0
  110. package/src/core/cf.ts +271 -0
  111. package/src/core/db/db-btp.ts +207 -0
  112. package/src/core/db/db-cache.ts +215 -0
  113. package/src/core/db/db-connection.ts +79 -0
  114. package/src/core/db/db-crypto.ts +53 -0
  115. package/src/core/db/db-hana-adapter.ts +294 -0
  116. package/src/core/db/db-metadata.ts +174 -0
  117. package/src/core/db/db-postgres-adapter.ts +275 -0
  118. package/src/core/db/db-query-files.ts +130 -0
  119. package/src/core/db/db-query-history.ts +53 -0
  120. package/src/core/db/db-row.ts +93 -0
  121. package/src/core/db/db-studio-html.ts +439 -0
  122. package/src/core/db/db-studio-server.ts +559 -0
  123. package/src/core/db/db-types.ts +195 -0
  124. package/src/core/db/db-vcap-parser.ts +182 -0
  125. package/src/core/doctor.ts +70 -0
  126. package/src/core/guide.ts +261 -0
  127. package/src/core/install.ts +91 -0
  128. package/src/core/navigator.ts +164 -0
  129. package/src/core/npmrc.ts +171 -0
  130. package/src/core/process.ts +75 -0
  131. package/src/core/prompts.ts +225 -0
  132. package/src/core/repository.ts +36 -0
  133. package/src/core/scanner.ts +41 -0
  134. package/src/core/tooling.ts +207 -0
  135. package/src/core/types.ts +152 -0
  136. package/src/core/version-conflict.ts +46 -0
  137. package/src/index.ts +460 -0
  138. package/src/types/external.d.ts +3 -0
  139. package/src/types-local.ts +11 -0
  140. package/tsconfig.json +17 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-cache.js","sourceRoot":"","sources":["../../../src/core/db/db-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { IDatabaseAdapter, TConnectionTestResult, TResolvedDatabaseConnection } from "./db-types";
2
+ export declare function createAdapter(connection: TResolvedDatabaseConnection, options?: {
3
+ queryTimeoutMs?: number;
4
+ }): IDatabaseAdapter;
5
+ export declare function testConnectionProfile(connection: TResolvedDatabaseConnection, options?: {
6
+ queryTimeoutMs?: number;
7
+ }): Promise<TConnectionTestResult>;
8
+ /**
9
+ * Keeps one live adapter per connection id for the lifetime of a studio
10
+ * session, so repeated queries against the same connection reuse a single
11
+ * established session.
12
+ */
13
+ export declare class StudioConnectionPool {
14
+ private readonly options?;
15
+ private readonly adapters;
16
+ constructor(options?: {
17
+ queryTimeoutMs?: number;
18
+ } | undefined);
19
+ getAdapter(connectionId: string): Promise<IDatabaseAdapter>;
20
+ closeConnection(connectionId: string): Promise<void>;
21
+ closeAll(): Promise<void>;
22
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StudioConnectionPool = void 0;
4
+ exports.createAdapter = createAdapter;
5
+ exports.testConnectionProfile = testConnectionProfile;
6
+ const db_cache_1 = require("./db-cache");
7
+ const db_hana_adapter_1 = require("./db-hana-adapter");
8
+ const db_postgres_adapter_1 = require("./db-postgres-adapter");
9
+ function createAdapter(connection, options) {
10
+ switch (connection.type) {
11
+ case "hana":
12
+ return new db_hana_adapter_1.HanaAdapter(connection, options);
13
+ case "postgresql":
14
+ return new db_postgres_adapter_1.PostgresAdapter(connection, options);
15
+ default:
16
+ throw new Error(`Unsupported database type: ${String(connection.type)}`);
17
+ }
18
+ }
19
+ async function testConnectionProfile(connection, options) {
20
+ const adapter = createAdapter(connection, options);
21
+ try {
22
+ await adapter.connect();
23
+ return await adapter.testConnection();
24
+ }
25
+ catch (error) {
26
+ return {
27
+ success: false,
28
+ message: error instanceof Error ? error.message : String(error),
29
+ durationMs: 0,
30
+ };
31
+ }
32
+ finally {
33
+ await adapter.disconnect();
34
+ }
35
+ }
36
+ /**
37
+ * Keeps one live adapter per connection id for the lifetime of a studio
38
+ * session, so repeated queries against the same connection reuse a single
39
+ * established session.
40
+ */
41
+ class StudioConnectionPool {
42
+ options;
43
+ adapters = new Map();
44
+ constructor(options) {
45
+ this.options = options;
46
+ }
47
+ async getAdapter(connectionId) {
48
+ const existing = this.adapters.get(connectionId);
49
+ if (existing) {
50
+ return existing;
51
+ }
52
+ const resolved = await (0, db_cache_1.getResolvedConnection)(connectionId);
53
+ const adapter = createAdapter(resolved, this.options);
54
+ await adapter.connect();
55
+ this.adapters.set(connectionId, adapter);
56
+ await (0, db_cache_1.touchConnectionUsage)(connectionId).catch(() => undefined);
57
+ return adapter;
58
+ }
59
+ async closeConnection(connectionId) {
60
+ const adapter = this.adapters.get(connectionId);
61
+ if (adapter) {
62
+ this.adapters.delete(connectionId);
63
+ await adapter.disconnect().catch(() => undefined);
64
+ }
65
+ }
66
+ async closeAll() {
67
+ const adapters = [...this.adapters.values()];
68
+ this.adapters.clear();
69
+ await Promise.all(adapters.map((adapter) => adapter.disconnect().catch(() => undefined)));
70
+ }
71
+ }
72
+ exports.StudioConnectionPool = StudioConnectionPool;
73
+ //# sourceMappingURL=db-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-connection.js","sourceRoot":"","sources":["../../../src/core/db/db-connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function encryptSecret(plainValue: string): string;
2
+ export declare function decryptSecret(storedValue: string): string;
3
+ export declare function isEncrypted(value: string): boolean;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.encryptSecret = encryptSecret;
7
+ exports.decryptSecret = decryptSecret;
8
+ exports.isEncrypted = isEncrypted;
9
+ const node_crypto_1 = __importDefault(require("node:crypto"));
10
+ const node_os_1 = __importDefault(require("node:os"));
11
+ const ENCRYPTION_PREFIX = "enc:";
12
+ /**
13
+ * Derive a stable 256-bit key bound to the current user + machine. The key is
14
+ * never persisted; it is recomputed on demand. Cache files copied to another
15
+ * machine therefore cannot be decrypted, which is the intended behaviour.
16
+ */
17
+ function deriveLocalKey() {
18
+ const seed = `${node_os_1.default.userInfo().username}|${node_os_1.default.hostname()}|simplemdg-db`;
19
+ return node_crypto_1.default.createHash("sha256").update(seed).digest();
20
+ }
21
+ function encryptSecret(plainValue) {
22
+ if (plainValue.startsWith(ENCRYPTION_PREFIX)) {
23
+ return plainValue;
24
+ }
25
+ const key = deriveLocalKey();
26
+ const iv = node_crypto_1.default.randomBytes(12);
27
+ const cipher = node_crypto_1.default.createCipheriv("aes-256-gcm", key, iv);
28
+ const encrypted = Buffer.concat([cipher.update(plainValue, "utf8"), cipher.final()]);
29
+ const authTag = cipher.getAuthTag();
30
+ return `${ENCRYPTION_PREFIX}${Buffer.concat([iv, authTag, encrypted]).toString("base64")}`;
31
+ }
32
+ function decryptSecret(storedValue) {
33
+ if (!storedValue.startsWith(ENCRYPTION_PREFIX)) {
34
+ // Backward compatibility: tolerate legacy plain values already on disk.
35
+ return storedValue;
36
+ }
37
+ try {
38
+ const key = deriveLocalKey();
39
+ const raw = Buffer.from(storedValue.slice(ENCRYPTION_PREFIX.length), "base64");
40
+ const iv = raw.subarray(0, 12);
41
+ const authTag = raw.subarray(12, 28);
42
+ const encrypted = raw.subarray(28);
43
+ const decipher = node_crypto_1.default.createDecipheriv("aes-256-gcm", key, iv);
44
+ decipher.setAuthTag(authTag);
45
+ return Buffer.concat([decipher.update(encrypted), decipher.final()]).toString("utf8");
46
+ }
47
+ catch {
48
+ throw new Error("Cannot decrypt cached credential. It may have been created on another machine or user account. Re-import the connection.");
49
+ }
50
+ }
51
+ function isEncrypted(value) {
52
+ return value.startsWith(ENCRYPTION_PREFIX);
53
+ }
54
+ //# sourceMappingURL=db-crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-crypto.js","sourceRoot":"","sources":["../../../src/core/db/db-crypto.ts"],"names":[],"mappings":";;;;;AAeA,sCAYC;AAED,sCAmBC;AAED,kCAEC;AApDD,8DAAiC;AACjC,sDAAyB;AAEzB,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC;;;;GAIG;AACH,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,GAAG,iBAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,IAAI,iBAAE,CAAC,QAAQ,EAAE,eAAe,CAAC;IACvE,OAAO,qBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AAC3D,CAAC;AAED,SAAgB,aAAa,CAAC,UAAkB;IAC9C,IAAI,UAAU,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC7C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,qBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,qBAAM,CAAC,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAEpC,OAAO,GAAG,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED,SAAgB,aAAa,CAAC,WAAmB;IAC/C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC/C,wEAAwE;QACxE,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC/E,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,qBAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACjE,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE7B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,0HAA0H,CAAC,CAAC;IAC9I,CAAC;AACH,CAAC;AAED,SAAgB,WAAW,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { IDatabaseAdapter, TConnectionTestResult, TDatabaseColumn, TDatabaseIndex, TDatabaseObject, TDatabaseQueryResult, TDatabaseSchema, TDatabaseType, TListObjectsOptions, TResolvedDatabaseConnection, TTableDataOptions } from "./db-types";
2
+ export declare class HanaAdapter implements IDatabaseAdapter {
3
+ private readonly resolvedConnection;
4
+ readonly type: TDatabaseType;
5
+ private connection;
6
+ private readonly queryTimeoutMs;
7
+ constructor(resolvedConnection: TResolvedDatabaseConnection, options?: {
8
+ queryTimeoutMs?: number;
9
+ });
10
+ connect(): Promise<void>;
11
+ disconnect(): Promise<void>;
12
+ private getConnection;
13
+ private exec;
14
+ private execRows;
15
+ testConnection(): Promise<TConnectionTestResult>;
16
+ private toQueryResult;
17
+ runQuery(sql: string, options?: {
18
+ maxRows?: number;
19
+ }): Promise<TDatabaseQueryResult>;
20
+ runParameterized(sql: string, params: unknown[], options?: {
21
+ maxRows?: number;
22
+ }): Promise<TDatabaseQueryResult>;
23
+ placeholder(_index: number): string;
24
+ listSchemas(): Promise<TDatabaseSchema[]>;
25
+ listObjects(options: TListObjectsOptions): Promise<TDatabaseObject[]>;
26
+ listColumns(schema: string, table: string): Promise<TDatabaseColumn[]>;
27
+ listIndexes(schema: string, table: string): Promise<TDatabaseIndex[]>;
28
+ countRows(schema: string, table: string): Promise<number>;
29
+ getTableData(options: TTableDataOptions): Promise<TDatabaseQueryResult>;
30
+ quoteIdentifier(identifier: string): string;
31
+ buildQualifiedName(schema: string, name: string): string;
32
+ }
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.HanaAdapter = void 0;
37
+ const db_metadata_1 = require("./db-metadata");
38
+ const SYSTEM_SCHEMAS = new Set(["SYS", "SYSTEM", "_SYS_BIC", "_SYS_REPO", "_SYS_STATISTICS"]);
39
+ const HANA_ROW_KIND = { TABLE: "table", VIEW: "view" };
40
+ class HanaAdapter {
41
+ resolvedConnection;
42
+ type = "hana";
43
+ connection;
44
+ queryTimeoutMs;
45
+ constructor(resolvedConnection, options) {
46
+ this.resolvedConnection = resolvedConnection;
47
+ this.queryTimeoutMs = options?.queryTimeoutMs ?? 30000;
48
+ }
49
+ async connect() {
50
+ if (this.connection) {
51
+ return;
52
+ }
53
+ let hanaModule;
54
+ try {
55
+ hanaModule = (await Promise.resolve().then(() => __importStar(require("@sap/hana-client"))));
56
+ }
57
+ catch {
58
+ throw new Error("SAP HANA driver '@sap/hana-client' is not installed. Run: npm install @sap/hana-client");
59
+ }
60
+ const connection = hanaModule.createConnection();
61
+ const connectOptions = {
62
+ serverNode: `${this.resolvedConnection.host}:${this.resolvedConnection.port}`,
63
+ uid: this.resolvedConnection.username,
64
+ pwd: this.resolvedConnection.password,
65
+ encrypt: this.resolvedConnection.ssl === false ? "false" : "true",
66
+ sslValidateCertificate: this.resolvedConnection.sslValidateCertificate ? "true" : "false",
67
+ communicationTimeout: String(this.queryTimeoutMs),
68
+ };
69
+ if (this.resolvedConnection.schema) {
70
+ connectOptions.currentSchema = this.resolvedConnection.schema;
71
+ }
72
+ await new Promise((resolve, reject) => {
73
+ connection.connect(connectOptions, (error) => (error ? reject(error) : resolve()));
74
+ });
75
+ this.connection = connection;
76
+ }
77
+ async disconnect() {
78
+ if (this.connection) {
79
+ const connection = this.connection;
80
+ this.connection = undefined;
81
+ await new Promise((resolve) => connection.disconnect(() => resolve()));
82
+ }
83
+ }
84
+ async getConnection() {
85
+ if (!this.connection) {
86
+ await this.connect();
87
+ }
88
+ if (!this.connection) {
89
+ throw new Error("SAP HANA connection is not established");
90
+ }
91
+ return this.connection;
92
+ }
93
+ async exec(sql, params = []) {
94
+ const connection = await this.getConnection();
95
+ return new Promise((resolve, reject) => {
96
+ connection.exec(sql, params, (error, rows) => (error ? reject(error) : resolve(rows)));
97
+ });
98
+ }
99
+ async execRows(sql, params = []) {
100
+ const result = await this.exec(sql, params);
101
+ return Array.isArray(result) ? result : [];
102
+ }
103
+ async testConnection() {
104
+ const startedAt = Date.now();
105
+ try {
106
+ const rows = await this.execRows("SELECT VERSION FROM SYS.M_DATABASE");
107
+ const version = String(rows[0]?.VERSION ?? "SAP HANA");
108
+ return { success: true, message: "Connection successful", serverVersion: version, durationMs: Date.now() - startedAt };
109
+ }
110
+ catch (error) {
111
+ return {
112
+ success: false,
113
+ message: error instanceof Error ? error.message : String(error),
114
+ durationMs: Date.now() - startedAt,
115
+ };
116
+ }
117
+ }
118
+ toQueryResult(result, durationMs, maxRows) {
119
+ if (typeof result === "number") {
120
+ return { fields: [], rows: [], rowCount: 0, affectedRows: result, command: "DML", durationMs };
121
+ }
122
+ const allRows = Array.isArray(result) ? result : [];
123
+ const limit = maxRows ?? 0;
124
+ const truncated = limit > 0 && allRows.length > limit;
125
+ const rows = truncated ? allRows.slice(0, limit) : allRows;
126
+ return {
127
+ fields: rows.length > 0 ? Object.keys(rows[0]) : [],
128
+ rows,
129
+ rowCount: rows.length,
130
+ command: "SELECT",
131
+ durationMs,
132
+ truncated,
133
+ };
134
+ }
135
+ async runQuery(sql, options) {
136
+ const startedAt = Date.now();
137
+ const result = await this.exec(sql);
138
+ return this.toQueryResult(result, Date.now() - startedAt, options?.maxRows);
139
+ }
140
+ async runParameterized(sql, params, options) {
141
+ const startedAt = Date.now();
142
+ const result = await this.exec(sql, params);
143
+ return this.toQueryResult(result, Date.now() - startedAt, options?.maxRows);
144
+ }
145
+ placeholder(_index) {
146
+ return "?";
147
+ }
148
+ async listSchemas() {
149
+ const rows = await this.execRows("SELECT SCHEMA_NAME FROM SYS.SCHEMAS ORDER BY SCHEMA_NAME");
150
+ return rows.map((row) => {
151
+ const name = String(row.SCHEMA_NAME);
152
+ return { name, isSystem: SYSTEM_SCHEMAS.has(name) || name.startsWith("_SYS") };
153
+ });
154
+ }
155
+ async listObjects(options) {
156
+ const schema = options.schema;
157
+ if (!schema) {
158
+ return [];
159
+ }
160
+ const kinds = options.kinds;
161
+ const objects = [];
162
+ if (!kinds || kinds.includes("table")) {
163
+ const tables = await this.execRows("SELECT TABLE_NAME FROM SYS.TABLES WHERE SCHEMA_NAME = ? ORDER BY TABLE_NAME", [schema]);
164
+ objects.push(...tables.map((row) => ({ schema, name: String(row.TABLE_NAME), kind: HANA_ROW_KIND.TABLE })));
165
+ }
166
+ if (!kinds || kinds.includes("view") || kinds.includes("column-view")) {
167
+ const views = await this.execRows("SELECT VIEW_NAME FROM SYS.VIEWS WHERE SCHEMA_NAME = ? ORDER BY VIEW_NAME", [schema]);
168
+ objects.push(...views.map((row) => ({ schema, name: String(row.VIEW_NAME), kind: HANA_ROW_KIND.VIEW })));
169
+ }
170
+ if (!kinds || kinds.includes("procedure")) {
171
+ const procedures = await this.execRows("SELECT PROCEDURE_NAME FROM SYS.PROCEDURES WHERE SCHEMA_NAME = ? ORDER BY PROCEDURE_NAME", [schema]);
172
+ objects.push(...procedures.map((row) => ({ schema, name: String(row.PROCEDURE_NAME), kind: "procedure" })));
173
+ }
174
+ if (!kinds || kinds.includes("function")) {
175
+ const functions = await this.execRows("SELECT FUNCTION_NAME FROM SYS.FUNCTIONS WHERE SCHEMA_NAME = ? ORDER BY FUNCTION_NAME", [schema]);
176
+ objects.push(...functions.map((row) => ({ schema, name: String(row.FUNCTION_NAME), kind: "function" })));
177
+ }
178
+ if (!kinds || kinds.includes("synonym")) {
179
+ const synonyms = await this.execRows("SELECT SYNONYM_NAME FROM SYS.SYNONYMS WHERE SCHEMA_NAME = ? ORDER BY SYNONYM_NAME", [schema]).catch(() => []);
180
+ objects.push(...synonyms.map((row) => ({ schema, name: String(row.SYNONYM_NAME), kind: "synonym" })));
181
+ }
182
+ const search = options.search?.trim().toLowerCase();
183
+ return search ? objects.filter((object) => object.name.toLowerCase().includes(search)) : objects;
184
+ }
185
+ async listColumns(schema, table) {
186
+ const primaryKeyRows = await this.execRows("SELECT COLUMN_NAME FROM SYS.CONSTRAINTS WHERE SCHEMA_NAME = ? AND TABLE_NAME = ? AND IS_PRIMARY_KEY = 'TRUE'", [schema, table]).catch(() => []);
187
+ const primaryKeyColumns = new Set(primaryKeyRows.map((row) => String(row.COLUMN_NAME)));
188
+ const tableColumns = await this.execRows(`SELECT COLUMN_NAME, DATA_TYPE_NAME, LENGTH, SCALE, IS_NULLABLE, DEFAULT_VALUE, POSITION, COMMENTS
189
+ FROM SYS.TABLE_COLUMNS WHERE SCHEMA_NAME = ? AND TABLE_NAME = ? ORDER BY POSITION`, [schema, table]);
190
+ const columns = tableColumns.length > 0
191
+ ? tableColumns
192
+ : await this.execRows(`SELECT COLUMN_NAME, DATA_TYPE_NAME, LENGTH, SCALE, IS_NULLABLE, DEFAULT_VALUE, POSITION
193
+ FROM SYS.VIEW_COLUMNS WHERE SCHEMA_NAME = ? AND VIEW_NAME = ? ORDER BY POSITION`, [schema, table]).catch(() => []);
194
+ return columns.map((row) => ({
195
+ name: String(row.COLUMN_NAME),
196
+ dataType: String(row.DATA_TYPE_NAME),
197
+ length: row.LENGTH === null || row.LENGTH === undefined ? undefined : Number(row.LENGTH),
198
+ scale: row.SCALE === null || row.SCALE === undefined ? undefined : Number(row.SCALE),
199
+ nullable: String(row.IS_NULLABLE).toUpperCase() === "TRUE",
200
+ defaultValue: row.DEFAULT_VALUE === null || row.DEFAULT_VALUE === undefined ? undefined : String(row.DEFAULT_VALUE),
201
+ isPrimaryKey: primaryKeyColumns.has(String(row.COLUMN_NAME)),
202
+ comment: row.COMMENTS === null || row.COMMENTS === undefined ? undefined : String(row.COMMENTS),
203
+ position: Number(row.POSITION),
204
+ }));
205
+ }
206
+ async listIndexes(schema, table) {
207
+ const indexes = await this.execRows("SELECT INDEX_NAME, INDEX_TYPE, CONSTRAINT FROM SYS.INDEXES WHERE SCHEMA_NAME = ? AND TABLE_NAME = ?", [schema, table]).catch(() => []);
208
+ const result = [];
209
+ for (const indexRow of indexes) {
210
+ const indexName = String(indexRow.INDEX_NAME);
211
+ const columnRows = await this.execRows("SELECT COLUMN_NAME FROM SYS.INDEX_COLUMNS WHERE SCHEMA_NAME = ? AND TABLE_NAME = ? AND INDEX_NAME = ? ORDER BY POSITION", [schema, table, indexName]).catch(() => []);
212
+ const constraint = String(indexRow.CONSTRAINT ?? "");
213
+ result.push({
214
+ name: indexName,
215
+ columns: columnRows.map((row) => String(row.COLUMN_NAME)),
216
+ isUnique: /UNIQUE/i.test(constraint) || /UNIQUE/i.test(String(indexRow.INDEX_TYPE ?? "")),
217
+ isPrimaryKey: /PRIMARY KEY/i.test(constraint),
218
+ });
219
+ }
220
+ return result;
221
+ }
222
+ async countRows(schema, table) {
223
+ const rows = await this.execRows(`SELECT COUNT(*) AS ROW_COUNT FROM ${(0, db_metadata_1.buildQualifiedName)(this.type, schema, table)}`);
224
+ return Number(rows[0]?.ROW_COUNT ?? 0);
225
+ }
226
+ async getTableData(options) {
227
+ const qualifiedName = (0, db_metadata_1.buildQualifiedName)(this.type, options.schema, options.table);
228
+ const whereClause = options.where?.trim() ? ` WHERE ${options.where.trim()}` : "";
229
+ const orderClause = options.orderBy?.trim()
230
+ ? ` ORDER BY ${(0, db_metadata_1.quoteIdentifier)(this.type, options.orderBy.trim())} ${options.orderDirection === "desc" ? "DESC" : "ASC"}`
231
+ : "";
232
+ const sql = `SELECT * FROM ${qualifiedName}${whereClause}${orderClause} LIMIT ${options.limit} OFFSET ${options.offset}`;
233
+ return this.runQuery(sql, { maxRows: options.limit });
234
+ }
235
+ quoteIdentifier(identifier) {
236
+ return (0, db_metadata_1.quoteIdentifier)(this.type, identifier);
237
+ }
238
+ buildQualifiedName(schema, name) {
239
+ return (0, db_metadata_1.buildQualifiedName)(this.type, schema, name);
240
+ }
241
+ }
242
+ exports.HanaAdapter = HanaAdapter;
243
+ //# sourceMappingURL=db-hana-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-hana-adapter.js","sourceRoot":"","sources":["../../../src/core/db/db-hana-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { TDatabaseColumn, TDatabaseType, TSqlSafetyAnalysis } from "./db-types";
2
+ export declare function quoteIdentifier(_type: TDatabaseType, identifier: string): string;
3
+ export declare function buildQualifiedName(type: TDatabaseType, schema: string, name: string): string;
4
+ export declare function generateSelectSql(type: TDatabaseType, schema: string, table: string, limit?: number): string;
5
+ export declare function generateCountSql(type: TDatabaseType, schema: string, table: string): string;
6
+ /**
7
+ * Best-effort CREATE TABLE statement reconstructed from column metadata. Useful
8
+ * as a starting point for editing in the SQL console.
9
+ */
10
+ export declare function generateCreateTableDdl(type: TDatabaseType, schema: string, table: string, columns: TDatabaseColumn[]): string;
11
+ export declare function getLeadingStatementKeyword(sql: string): string;
12
+ export declare function isSingleSelectStatement(sql: string): boolean;
13
+ /**
14
+ * Append a row limit to a single SELECT statement when one is not already
15
+ * present, so accidental full-table scans stay bounded.
16
+ */
17
+ export declare function appendSafeLimit(_type: TDatabaseType, sql: string, limit: number): string;
18
+ export declare function analyzeSqlSafety(sql: string, options: {
19
+ readOnly: boolean;
20
+ }): TSqlSafetyAnalysis;
21
+ /**
22
+ * Heuristic: an org or app name that looks production-like, used to warn the
23
+ * developer before they connect.
24
+ */
25
+ export declare function looksLikeProduction(...values: Array<string | undefined>): boolean;