@tejasanik/postgres-mcp-server 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +186 -10
- package/dist/db-manager/index.d.ts +7 -0
- package/dist/db-manager/index.d.ts.map +1 -0
- package/dist/db-manager/index.js +7 -0
- package/dist/db-manager/index.js.map +1 -0
- package/dist/db-manager/validation.d.ts +35 -0
- package/dist/db-manager/validation.d.ts.map +1 -0
- package/dist/db-manager/validation.js +54 -0
- package/dist/db-manager/validation.js.map +1 -0
- package/dist/db-manager.d.ts +175 -5
- package/dist/db-manager.d.ts.map +1 -1
- package/dist/db-manager.js +589 -26
- package/dist/db-manager.js.map +1 -1
- package/dist/index.js +141 -11
- package/dist/index.js.map +1 -1
- package/dist/tools/analysis-tools.d.ts.map +1 -1
- package/dist/tools/analysis-tools.js +53 -49
- package/dist/tools/analysis-tools.js.map +1 -1
- package/dist/tools/schema-tools.d.ts +40 -1
- package/dist/tools/schema-tools.d.ts.map +1 -1
- package/dist/tools/schema-tools.js +174 -92
- package/dist/tools/schema-tools.js.map +1 -1
- package/dist/tools/server-tools.d.ts +1 -0
- package/dist/tools/server-tools.d.ts.map +1 -1
- package/dist/tools/server-tools.js +10 -6
- package/dist/tools/server-tools.js.map +1 -1
- package/dist/tools/sql/utils/connection-utils.d.ts +79 -0
- package/dist/tools/sql/utils/connection-utils.d.ts.map +1 -0
- package/dist/tools/sql/utils/connection-utils.js +129 -0
- package/dist/tools/sql/utils/connection-utils.js.map +1 -0
- package/dist/tools/sql/utils/constants.d.ts +55 -0
- package/dist/tools/sql/utils/constants.d.ts.map +1 -0
- package/dist/tools/sql/utils/constants.js +55 -0
- package/dist/tools/sql/utils/constants.js.map +1 -0
- package/dist/tools/sql/utils/dry-run-utils.d.ts +31 -0
- package/dist/tools/sql/utils/dry-run-utils.d.ts.map +1 -0
- package/dist/tools/sql/utils/dry-run-utils.js +173 -0
- package/dist/tools/sql/utils/dry-run-utils.js.map +1 -0
- package/dist/tools/sql/utils/file-handler.d.ts +57 -0
- package/dist/tools/sql/utils/file-handler.d.ts.map +1 -0
- package/dist/tools/sql/utils/file-handler.js +150 -0
- package/dist/tools/sql/utils/file-handler.js.map +1 -0
- package/dist/tools/sql/utils/index.d.ts +12 -0
- package/dist/tools/sql/utils/index.d.ts.map +1 -0
- package/dist/tools/sql/utils/index.js +12 -0
- package/dist/tools/sql/utils/index.js.map +1 -0
- package/dist/tools/sql/utils/result-formatter.d.ts +94 -0
- package/dist/tools/sql/utils/result-formatter.d.ts.map +1 -0
- package/dist/tools/sql/utils/result-formatter.js +154 -0
- package/dist/tools/sql/utils/result-formatter.js.map +1 -0
- package/dist/tools/sql/utils/sql-parser.d.ts +125 -0
- package/dist/tools/sql/utils/sql-parser.d.ts.map +1 -0
- package/dist/tools/sql/utils/sql-parser.js +468 -0
- package/dist/tools/sql/utils/sql-parser.js.map +1 -0
- package/dist/tools/sql-tools.d.ts +21 -0
- package/dist/tools/sql-tools.d.ts.map +1 -1
- package/dist/tools/sql-tools.js +383 -532
- package/dist/tools/sql-tools.js.map +1 -1
- package/dist/types.d.ts +38 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/retry.d.ts +1 -1
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/validation.d.ts +45 -9
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +335 -72
- package/dist/utils/validation.js.map +1 -1
- package/package.json +9 -2
- package/dist/__tests__/analysis-tools.test.d.ts +0 -2
- package/dist/__tests__/analysis-tools.test.d.ts.map +0 -1
- package/dist/__tests__/analysis-tools.test.js +0 -294
- package/dist/__tests__/analysis-tools.test.js.map +0 -1
- package/dist/__tests__/db-manager.test.d.ts +0 -2
- package/dist/__tests__/db-manager.test.d.ts.map +0 -1
- package/dist/__tests__/db-manager.test.js +0 -410
- package/dist/__tests__/db-manager.test.js.map +0 -1
- package/dist/__tests__/mcp-server.test.d.ts +0 -13
- package/dist/__tests__/mcp-server.test.d.ts.map +0 -1
- package/dist/__tests__/mcp-server.test.js +0 -146
- package/dist/__tests__/mcp-server.test.js.map +0 -1
- package/dist/__tests__/schema-tools.test.d.ts +0 -2
- package/dist/__tests__/schema-tools.test.d.ts.map +0 -1
- package/dist/__tests__/schema-tools.test.js +0 -171
- package/dist/__tests__/schema-tools.test.js.map +0 -1
- package/dist/__tests__/server-tools.test.d.ts +0 -2
- package/dist/__tests__/server-tools.test.d.ts.map +0 -1
- package/dist/__tests__/server-tools.test.js +0 -113
- package/dist/__tests__/server-tools.test.js.map +0 -1
- package/dist/__tests__/sql-tools.test.d.ts +0 -2
- package/dist/__tests__/sql-tools.test.d.ts.map +0 -1
- package/dist/__tests__/sql-tools.test.js +0 -1912
- package/dist/__tests__/sql-tools.test.js.map +0 -1
- package/dist/__tests__/validation.test.d.ts +0 -2
- package/dist/__tests__/validation.test.d.ts.map +0 -1
- package/dist/__tests__/validation.test.js +0 -203
- package/dist/__tests__/validation.test.js.map +0 -1
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import { jest, describe, it, expect, beforeEach, beforeAll } from '@jest/globals';
|
|
2
|
-
// Use jest.unstable_mockModule for ESM
|
|
3
|
-
const mockQuery = jest.fn();
|
|
4
|
-
const mockIsConnected = jest.fn();
|
|
5
|
-
jest.unstable_mockModule('../db-manager.js', () => ({
|
|
6
|
-
getDbManager: jest.fn(() => ({
|
|
7
|
-
query: mockQuery,
|
|
8
|
-
isConnected: mockIsConnected.mockReturnValue(true),
|
|
9
|
-
})),
|
|
10
|
-
resetDbManager: jest.fn(),
|
|
11
|
-
}));
|
|
12
|
-
// Dynamic import after mock
|
|
13
|
-
let listSchemas;
|
|
14
|
-
let listObjects;
|
|
15
|
-
let getObjectDetails;
|
|
16
|
-
beforeAll(async () => {
|
|
17
|
-
const module = await import('../tools/schema-tools.js');
|
|
18
|
-
listSchemas = module.listSchemas;
|
|
19
|
-
listObjects = module.listObjects;
|
|
20
|
-
getObjectDetails = module.getObjectDetails;
|
|
21
|
-
});
|
|
22
|
-
describe('Schema Tools', () => {
|
|
23
|
-
beforeEach(() => {
|
|
24
|
-
jest.clearAllMocks();
|
|
25
|
-
mockIsConnected.mockReturnValue(true);
|
|
26
|
-
});
|
|
27
|
-
describe('listSchemas', () => {
|
|
28
|
-
it('should list schemas without system schemas by default', async () => {
|
|
29
|
-
mockQuery.mockResolvedValue({
|
|
30
|
-
rows: [
|
|
31
|
-
{ schema_name: 'public', owner: 'postgres' },
|
|
32
|
-
{ schema_name: 'app', owner: 'app_user' }
|
|
33
|
-
]
|
|
34
|
-
});
|
|
35
|
-
const result = await listSchemas({});
|
|
36
|
-
expect(result).toHaveLength(2);
|
|
37
|
-
expect(result[0].schema_name).toBe('public');
|
|
38
|
-
// Verify the query excludes system schemas
|
|
39
|
-
const queryCall = mockQuery.mock.calls[0][0];
|
|
40
|
-
expect(queryCall).toContain('NOT IN');
|
|
41
|
-
expect(queryCall).toContain('pg_catalog');
|
|
42
|
-
});
|
|
43
|
-
it('should include system schemas when requested', async () => {
|
|
44
|
-
mockQuery.mockResolvedValue({
|
|
45
|
-
rows: [
|
|
46
|
-
{ schema_name: 'public', owner: 'postgres' },
|
|
47
|
-
{ schema_name: 'pg_catalog', owner: 'postgres' },
|
|
48
|
-
{ schema_name: 'information_schema', owner: 'postgres' }
|
|
49
|
-
]
|
|
50
|
-
});
|
|
51
|
-
const result = await listSchemas({ includeSystemSchemas: true });
|
|
52
|
-
expect(result).toHaveLength(3);
|
|
53
|
-
// Verify the query doesn't have the exclusion
|
|
54
|
-
const queryCall = mockQuery.mock.calls[0][0];
|
|
55
|
-
expect(queryCall).not.toContain('NOT IN');
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
describe('listObjects', () => {
|
|
59
|
-
it('should require schema parameter', async () => {
|
|
60
|
-
await expect(listObjects({ schema: '' }))
|
|
61
|
-
.rejects.toThrow('schema parameter is required');
|
|
62
|
-
await expect(listObjects({ schema: undefined }))
|
|
63
|
-
.rejects.toThrow('schema parameter is required');
|
|
64
|
-
});
|
|
65
|
-
it('should validate schema name', async () => {
|
|
66
|
-
await expect(listObjects({ schema: 'public; DROP TABLE users;--' }))
|
|
67
|
-
.rejects.toThrow('invalid characters');
|
|
68
|
-
await expect(listObjects({ schema: "schema'" }))
|
|
69
|
-
.rejects.toThrow('invalid characters');
|
|
70
|
-
});
|
|
71
|
-
it('should list all object types by default', async () => {
|
|
72
|
-
mockQuery
|
|
73
|
-
.mockResolvedValueOnce({ rows: [{ name: 'users', type: 'table', owner: 'app', schema: 'public' }] })
|
|
74
|
-
.mockResolvedValueOnce({ rows: [{ name: 'active_users', type: 'view', owner: '', schema: 'public' }] })
|
|
75
|
-
.mockResolvedValueOnce({ rows: [{ name: 'users_id_seq', type: 'sequence', owner: '', schema: 'public' }] })
|
|
76
|
-
.mockResolvedValueOnce({ rows: [] });
|
|
77
|
-
const result = await listObjects({ schema: 'public' });
|
|
78
|
-
expect(result).toHaveLength(3);
|
|
79
|
-
expect(mockQuery).toHaveBeenCalledTimes(4); // tables, views, sequences, extensions
|
|
80
|
-
});
|
|
81
|
-
it('should filter by object type', async () => {
|
|
82
|
-
mockQuery.mockResolvedValue({
|
|
83
|
-
rows: [{ name: 'users', type: 'table', owner: 'app', schema: 'public' }]
|
|
84
|
-
});
|
|
85
|
-
const result = await listObjects({ schema: 'public', objectType: 'table' });
|
|
86
|
-
expect(result).toHaveLength(1);
|
|
87
|
-
expect(mockQuery).toHaveBeenCalledTimes(1);
|
|
88
|
-
});
|
|
89
|
-
it('should validate filter parameter', async () => {
|
|
90
|
-
await expect(listObjects({ schema: 'public', filter: 'test; DROP TABLE' }))
|
|
91
|
-
.rejects.toThrow('filter contains invalid characters');
|
|
92
|
-
});
|
|
93
|
-
it('should reject filter that is too long', async () => {
|
|
94
|
-
const longFilter = 'a'.repeat(129);
|
|
95
|
-
await expect(listObjects({ schema: 'public', filter: longFilter }))
|
|
96
|
-
.rejects.toThrow('filter must be 128 characters or less');
|
|
97
|
-
});
|
|
98
|
-
it('should use parameterized queries for filter', async () => {
|
|
99
|
-
mockQuery.mockResolvedValue({ rows: [] });
|
|
100
|
-
await listObjects({ schema: 'public', objectType: 'table', filter: 'user' });
|
|
101
|
-
expect(mockQuery).toHaveBeenCalledWith(expect.stringContaining('ILIKE'), ['public', 'user']);
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
describe('getObjectDetails', () => {
|
|
105
|
-
it('should require schema parameter', async () => {
|
|
106
|
-
await expect(getObjectDetails({ schema: '', objectName: 'users' }))
|
|
107
|
-
.rejects.toThrow('schema parameter is required');
|
|
108
|
-
});
|
|
109
|
-
it('should require objectName parameter', async () => {
|
|
110
|
-
await expect(getObjectDetails({ schema: 'public', objectName: '' }))
|
|
111
|
-
.rejects.toThrow('objectName parameter is required');
|
|
112
|
-
});
|
|
113
|
-
it('should validate schema name', async () => {
|
|
114
|
-
await expect(getObjectDetails({ schema: 'public; DROP', objectName: 'users' }))
|
|
115
|
-
.rejects.toThrow('invalid characters');
|
|
116
|
-
});
|
|
117
|
-
it('should validate object name', async () => {
|
|
118
|
-
await expect(getObjectDetails({ schema: 'public', objectName: 'users; DROP' }))
|
|
119
|
-
.rejects.toThrow('invalid characters');
|
|
120
|
-
});
|
|
121
|
-
it('should return columns, constraints, and indexes', async () => {
|
|
122
|
-
mockQuery
|
|
123
|
-
.mockResolvedValueOnce({
|
|
124
|
-
rows: [
|
|
125
|
-
{ column_name: 'id', data_type: 'integer', is_nullable: 'NO', column_default: null, character_maximum_length: null },
|
|
126
|
-
{ column_name: 'name', data_type: 'text', is_nullable: 'YES', column_default: null, character_maximum_length: null }
|
|
127
|
-
]
|
|
128
|
-
})
|
|
129
|
-
.mockResolvedValueOnce({
|
|
130
|
-
rows: [
|
|
131
|
-
{ constraint_name: 'users_pkey', constraint_type: 'PRIMARY KEY', table_name: 'users', column_name: 'id', foreign_table_name: null, foreign_column_name: null }
|
|
132
|
-
]
|
|
133
|
-
})
|
|
134
|
-
.mockResolvedValueOnce({
|
|
135
|
-
rows: [
|
|
136
|
-
{ index_name: 'users_pkey', index_definition: 'CREATE UNIQUE INDEX...', is_unique: true, is_primary: true }
|
|
137
|
-
]
|
|
138
|
-
})
|
|
139
|
-
.mockResolvedValueOnce({
|
|
140
|
-
rows: [{ size: '16 kB', row_count: 100 }]
|
|
141
|
-
});
|
|
142
|
-
const result = await getObjectDetails({ schema: 'public', objectName: 'users' });
|
|
143
|
-
expect(result.columns).toHaveLength(2);
|
|
144
|
-
expect(result.constraints).toHaveLength(1);
|
|
145
|
-
expect(result.indexes).toHaveLength(1);
|
|
146
|
-
expect(result.size).toBe('16 kB');
|
|
147
|
-
expect(result.rowCount).toBe(100);
|
|
148
|
-
});
|
|
149
|
-
it('should use parameterized queries', async () => {
|
|
150
|
-
mockQuery.mockResolvedValue({ rows: [] });
|
|
151
|
-
await getObjectDetails({ schema: 'public', objectName: 'users' });
|
|
152
|
-
// All queries should use parameters
|
|
153
|
-
mockQuery.mock.calls.forEach((call) => {
|
|
154
|
-
if (call[1]) {
|
|
155
|
-
expect(call[1]).toEqual(['public', 'users']);
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
it('should get view definition when objectType is view', async () => {
|
|
160
|
-
mockQuery
|
|
161
|
-
.mockResolvedValueOnce({ rows: [] }) // columns
|
|
162
|
-
.mockResolvedValueOnce({ rows: [] }) // constraints
|
|
163
|
-
.mockResolvedValueOnce({ rows: [] }) // indexes
|
|
164
|
-
.mockResolvedValueOnce({ rows: [] }) // size
|
|
165
|
-
.mockResolvedValueOnce({ rows: [{ definition: 'SELECT * FROM users' }] }); // view def
|
|
166
|
-
const result = await getObjectDetails({ schema: 'public', objectName: 'active_users', objectType: 'view' });
|
|
167
|
-
expect(result.definition).toBe('SELECT * FROM users');
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
//# sourceMappingURL=schema-tools.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/schema-tools.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server-tools.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/server-tools.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach } from '@jest/globals';
|
|
2
|
-
import { listServers, listDatabases, switchServerDb } from '../tools/server-tools.js';
|
|
3
|
-
import { resetDbManager } from '../db-manager.js';
|
|
4
|
-
describe('Server Tools', () => {
|
|
5
|
-
beforeEach(() => {
|
|
6
|
-
resetDbManager();
|
|
7
|
-
delete process.env.POSTGRES_SERVERS;
|
|
8
|
-
delete process.env.POSTGRES_ACCESS_MODE;
|
|
9
|
-
});
|
|
10
|
-
afterEach(() => {
|
|
11
|
-
resetDbManager();
|
|
12
|
-
});
|
|
13
|
-
describe('listServers', () => {
|
|
14
|
-
it('should return empty list when no servers configured', async () => {
|
|
15
|
-
const result = await listServers({});
|
|
16
|
-
expect(result.servers).toEqual([]);
|
|
17
|
-
expect(result.currentServer).toBeNull();
|
|
18
|
-
expect(result.currentDatabase).toBeNull();
|
|
19
|
-
});
|
|
20
|
-
it('should list all configured servers', async () => {
|
|
21
|
-
process.env.POSTGRES_SERVERS = JSON.stringify({
|
|
22
|
-
dev: { host: 'dev.example.com', port: '5432', username: 'user', password: 'pass' },
|
|
23
|
-
staging: { host: 'staging.example.com', port: '5432', username: 'user', password: 'pass' },
|
|
24
|
-
prod: { host: 'prod.example.com', port: '5432', username: 'user', password: 'pass' }
|
|
25
|
-
});
|
|
26
|
-
const result = await listServers({});
|
|
27
|
-
expect(result.servers).toHaveLength(3);
|
|
28
|
-
expect(result.servers.map((s) => s.name)).toContain('dev');
|
|
29
|
-
expect(result.servers.map((s) => s.name)).toContain('staging');
|
|
30
|
-
expect(result.servers.map((s) => s.name)).toContain('prod');
|
|
31
|
-
});
|
|
32
|
-
it('should filter servers by name', async () => {
|
|
33
|
-
process.env.POSTGRES_SERVERS = JSON.stringify({
|
|
34
|
-
dev: { host: 'dev.example.com', port: '5432', username: 'user', password: 'pass' },
|
|
35
|
-
dev_backup: { host: 'dev-backup.example.com', port: '5432', username: 'user', password: 'pass' },
|
|
36
|
-
prod: { host: 'prod.example.com', port: '5432', username: 'user', password: 'pass' }
|
|
37
|
-
});
|
|
38
|
-
const result = await listServers({ filter: 'dev' });
|
|
39
|
-
expect(result.servers).toHaveLength(2);
|
|
40
|
-
expect(result.servers.map((s) => s.name)).toContain('dev');
|
|
41
|
-
expect(result.servers.map((s) => s.name)).toContain('dev_backup');
|
|
42
|
-
expect(result.servers.map((s) => s.name)).not.toContain('prod');
|
|
43
|
-
});
|
|
44
|
-
it('should show server connection status', async () => {
|
|
45
|
-
process.env.POSTGRES_SERVERS = JSON.stringify({
|
|
46
|
-
dev: { host: 'localhost', port: '5432', username: 'user', password: 'pass' }
|
|
47
|
-
});
|
|
48
|
-
const result = await listServers({});
|
|
49
|
-
expect(result.servers[0].isConnected).toBe(false);
|
|
50
|
-
});
|
|
51
|
-
it('should not expose host or port in response', async () => {
|
|
52
|
-
process.env.POSTGRES_SERVERS = JSON.stringify({
|
|
53
|
-
dev: { host: 'secret.example.com', port: '5432', username: 'user', password: 'pass' }
|
|
54
|
-
});
|
|
55
|
-
const result = await listServers({});
|
|
56
|
-
// Verify host and port are not exposed
|
|
57
|
-
expect(result.servers[0]).not.toHaveProperty('host');
|
|
58
|
-
expect(result.servers[0]).not.toHaveProperty('port');
|
|
59
|
-
expect(result.servers[0]).toHaveProperty('name');
|
|
60
|
-
expect(result.servers[0]).toHaveProperty('isConnected');
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
describe('listDatabases', () => {
|
|
64
|
-
it('should require serverName parameter', async () => {
|
|
65
|
-
process.env.POSTGRES_SERVERS = JSON.stringify({
|
|
66
|
-
dev: { host: 'localhost', port: '5432', username: 'user', password: 'pass' }
|
|
67
|
-
});
|
|
68
|
-
await expect(listDatabases({ serverName: '' }))
|
|
69
|
-
.rejects.toThrow('serverName is required');
|
|
70
|
-
});
|
|
71
|
-
it('should throw when server not found', async () => {
|
|
72
|
-
process.env.POSTGRES_SERVERS = JSON.stringify({
|
|
73
|
-
dev: { host: 'localhost', port: '5432', username: 'user', password: 'pass' }
|
|
74
|
-
});
|
|
75
|
-
await expect(listDatabases({ serverName: 'nonexistent' }))
|
|
76
|
-
.rejects.toThrow("Server 'nonexistent' not found");
|
|
77
|
-
});
|
|
78
|
-
it('should include available servers in error message', async () => {
|
|
79
|
-
process.env.POSTGRES_SERVERS = JSON.stringify({
|
|
80
|
-
dev: { host: 'localhost', port: '5432', username: 'user', password: 'pass' },
|
|
81
|
-
prod: { host: 'prod.example.com', port: '5432', username: 'user', password: 'pass' }
|
|
82
|
-
});
|
|
83
|
-
await expect(listDatabases({ serverName: 'nonexistent' }))
|
|
84
|
-
.rejects.toThrow('Available servers: dev, prod');
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
describe('switchServerDb', () => {
|
|
88
|
-
it('should throw when server not found', async () => {
|
|
89
|
-
process.env.POSTGRES_SERVERS = JSON.stringify({
|
|
90
|
-
dev: { host: 'localhost', port: '5432', username: 'user', password: 'pass' }
|
|
91
|
-
});
|
|
92
|
-
await expect(switchServerDb({ server: 'nonexistent' }))
|
|
93
|
-
.rejects.toThrow("Server 'nonexistent' not found");
|
|
94
|
-
});
|
|
95
|
-
it('should validate server parameter is required', async () => {
|
|
96
|
-
process.env.POSTGRES_SERVERS = JSON.stringify({
|
|
97
|
-
dev: { host: 'localhost', port: '5432', username: 'user', password: 'pass' }
|
|
98
|
-
});
|
|
99
|
-
await expect(switchServerDb({ server: '' }))
|
|
100
|
-
.rejects.toThrow();
|
|
101
|
-
});
|
|
102
|
-
it('should validate database name format', async () => {
|
|
103
|
-
process.env.POSTGRES_SERVERS = JSON.stringify({
|
|
104
|
-
dev: { host: 'localhost', port: '5432', username: 'user', password: 'pass' }
|
|
105
|
-
});
|
|
106
|
-
await expect(switchServerDb({ server: 'dev', database: 'invalid;db' }))
|
|
107
|
-
.rejects.toThrow('Invalid database name');
|
|
108
|
-
});
|
|
109
|
-
// Note: Actual connection tests would require a real database
|
|
110
|
-
// These tests focus on input validation
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
//# sourceMappingURL=server-tools.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/server-tools.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sql-tools.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/sql-tools.test.ts"],"names":[],"mappings":""}
|