dbctx 1.5.0 → 2.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.
- package/dist/index.mjs +6012 -188
- package/package.json +12 -9
- package/dist/app/assemble.d.mts +0 -5
- package/dist/app/assemble.d.mts.map +0 -1
- package/dist/app/assemble.mjs +0 -166
- package/dist/app/config.d.mts +0 -9
- package/dist/app/config.d.mts.map +0 -1
- package/dist/app/config.mjs +0 -49
- package/dist/app/db.d.mts +0 -9
- package/dist/app/db.d.mts.map +0 -1
- package/dist/app/db.mjs +0 -182
- package/dist/app/detect.d.mts +0 -14
- package/dist/app/detect.d.mts.map +0 -1
- package/dist/app/detect.mjs +0 -108
- package/dist/app/index.d.mts +0 -3
- package/dist/app/index.d.mts.map +0 -1
- package/dist/app/index.mjs +0 -156
- package/dist/app/open-url.d.mts +0 -4
- package/dist/app/open-url.d.mts.map +0 -1
- package/dist/app/open-url.mjs +0 -28
- package/dist/app/session.d.mts +0 -8
- package/dist/app/session.d.mts.map +0 -1
- package/dist/app/session.mjs +0 -155
- package/dist/app/ssh.d.mts +0 -3
- package/dist/app/ssh.d.mts.map +0 -1
- package/dist/app/ssh.mjs +0 -218
- package/dist/db/analyze.d.mts +0 -3
- package/dist/db/analyze.d.mts.map +0 -1
- package/dist/db/analyze.mjs +0 -16
- package/dist/db/attributes.d.mts +0 -16
- package/dist/db/attributes.d.mts.map +0 -1
- package/dist/db/attributes.mjs +0 -37
- package/dist/db/enums.d.mts +0 -8
- package/dist/db/enums.d.mts.map +0 -1
- package/dist/db/enums.mjs +0 -24
- package/dist/db/file-stats.d.mts +0 -11
- package/dist/db/file-stats.d.mts.map +0 -1
- package/dist/db/file-stats.mjs +0 -43
- package/dist/db/foreign-keys.d.mts +0 -14
- package/dist/db/foreign-keys.d.mts.map +0 -1
- package/dist/db/foreign-keys.mjs +0 -44
- package/dist/db/index.d.mts +0 -10
- package/dist/db/index.d.mts.map +0 -1
- package/dist/db/index.mjs +0 -10
- package/dist/db/indexes.d.mts +0 -16
- package/dist/db/indexes.d.mts.map +0 -1
- package/dist/db/indexes.mjs +0 -38
- package/dist/db/relations.d.mts +0 -11
- package/dist/db/relations.d.mts.map +0 -1
- package/dist/db/relations.mjs +0 -32
- package/dist/db/stats.d.mts +0 -12
- package/dist/db/stats.d.mts.map +0 -1
- package/dist/db/stats.mjs +0 -34
- package/dist/db/version.d.mts +0 -14
- package/dist/db/version.d.mts.map +0 -1
- package/dist/db/version.mjs +0 -27
- package/dist/index.d.mts +0 -23
- package/dist/index.d.mts.map +0 -1
- package/dist/lib/env.d.mts +0 -2
- package/dist/lib/env.d.mts.map +0 -1
- package/dist/lib/env.mjs +0 -4
- package/dist/lib/trpc-url.d.mts +0 -2
- package/dist/lib/trpc-url.d.mts.map +0 -1
- package/dist/lib/trpc-url.mjs +0 -5
- package/dist/lib/trpc.d.mts +0 -7
- package/dist/lib/trpc.d.mts.map +0 -1
- package/dist/lib/trpc.mjs +0 -37
- package/dist/lib/trpc.react.d.mts +0 -4
- package/dist/lib/trpc.react.d.mts.map +0 -1
- package/dist/lib/trpc.react.mjs +0 -3
- package/dist/lib/version.d.mts +0 -2
- package/dist/lib/version.d.mts.map +0 -1
- package/dist/lib/version.mjs +0 -5
- package/dist/logger.d.mts +0 -3
- package/dist/logger.d.mts.map +0 -1
- package/dist/logger.mjs +0 -8
- package/dist/providers/TrpcProvider.d.ts +0 -9
- package/dist/providers/TrpcProvider.d.ts.map +0 -1
- package/dist/providers/TrpcProvider.js +0 -41
- package/dist/store.d.mts +0 -83
- package/dist/store.d.mts.map +0 -1
- package/dist/store.mjs +0 -84
- package/dist/types/connection.d.mts +0 -17
- package/dist/types/connection.d.mts.map +0 -1
- package/dist/types/connection.mjs +0 -2
- package/dist/ui/App.d.ts +0 -10
- package/dist/ui/App.d.ts.map +0 -1
- package/dist/ui/App.js +0 -23
- package/dist/ui/components/DB.d.ts +0 -10
- package/dist/ui/components/DB.d.ts.map +0 -1
- package/dist/ui/components/DB.js +0 -22
- package/dist/ui/components/Error.d.ts +0 -7
- package/dist/ui/components/Error.d.ts.map +0 -1
- package/dist/ui/components/Error.js +0 -6
- package/dist/ui/components/Gate.d.ts +0 -10
- package/dist/ui/components/Gate.d.ts.map +0 -1
- package/dist/ui/components/Gate.js +0 -15
- package/dist/ui/components/Introspect.d.ts +0 -10
- package/dist/ui/components/Introspect.d.ts.map +0 -1
- package/dist/ui/components/Introspect.js +0 -66
- package/dist/ui/components/OutputJson.d.ts +0 -10
- package/dist/ui/components/OutputJson.d.ts.map +0 -1
- package/dist/ui/components/OutputJson.js +0 -18
- package/dist/ui/components/PasswordInput.d.ts +0 -7
- package/dist/ui/components/PasswordInput.d.ts.map +0 -1
- package/dist/ui/components/PasswordInput.js +0 -32
- package/dist/ui/components/SSH.d.ts +0 -10
- package/dist/ui/components/SSH.d.ts.map +0 -1
- package/dist/ui/components/SSH.js +0 -22
- package/dist/ui/components/Session.d.ts +0 -10
- package/dist/ui/components/Session.d.ts.map +0 -1
- package/dist/ui/components/Session.js +0 -47
- package/dist/ui/components/Spinner.d.ts +0 -3
- package/dist/ui/components/Spinner.d.ts.map +0 -1
- package/dist/ui/components/Spinner.js +0 -18
- package/dist/ui/components/Splash.d.ts +0 -3
- package/dist/ui/components/Splash.d.ts.map +0 -1
- package/dist/ui/components/Splash.js +0 -13
- package/dist/ui/components/TextInput.d.ts +0 -11
- package/dist/ui/components/TextInput.d.ts.map +0 -1
- package/dist/ui/components/TextInput.js +0 -286
- package/dist/ui/components/UserExplanation.d.ts +0 -10
- package/dist/ui/components/UserExplanation.d.ts.map +0 -1
- package/dist/ui/components/UserExplanation.js +0 -34
- package/dist/validatePaths.d.mts +0 -13
- package/dist/validatePaths.d.mts.map +0 -1
- package/dist/validatePaths.mjs +0 -54
package/dist/app/ssh.mjs
DELETED
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
import { readFileSync, existsSync } from 'node:fs';
|
|
2
|
-
import { homedir, userInfo } from 'node:os';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import net from 'node:net';
|
|
5
|
-
import ssh2 from 'ssh2';
|
|
6
|
-
const { Client, utils } = ssh2;
|
|
7
|
-
import SSHConfig from 'ssh-config';
|
|
8
|
-
import { runInAction, when } from 'mobx';
|
|
9
|
-
import { scope } from 'scope-utilities';
|
|
10
|
-
const SSH_KEY_ORDER = [
|
|
11
|
-
'id_ed25519_sk',
|
|
12
|
-
'id_ed25519',
|
|
13
|
-
'id_ecdsa_sk',
|
|
14
|
-
'id_ecdsa',
|
|
15
|
-
'id_rsa',
|
|
16
|
-
'id_dsa',
|
|
17
|
-
];
|
|
18
|
-
const resolveSSHConfig = (store) => {
|
|
19
|
-
const sshDir = join(homedir(), '.ssh');
|
|
20
|
-
const configPath = join(sshDir, 'config');
|
|
21
|
-
return scope({
|
|
22
|
-
host: store.config.sshHost,
|
|
23
|
-
port: 22,
|
|
24
|
-
username: userInfo().username,
|
|
25
|
-
privateKeyPath: undefined,
|
|
26
|
-
})
|
|
27
|
-
.let((config) => {
|
|
28
|
-
if (!existsSync(configPath)) {
|
|
29
|
-
return config;
|
|
30
|
-
}
|
|
31
|
-
const configText = readFileSync(configPath, 'utf-8');
|
|
32
|
-
const computed = SSHConfig.parse(configText).compute(config.host);
|
|
33
|
-
const identityFile = computed['IdentityFile']
|
|
34
|
-
? (Array.isArray(computed['IdentityFile'])
|
|
35
|
-
? computed['IdentityFile'][0]
|
|
36
|
-
: computed['IdentityFile']).replace(/^~/, homedir())
|
|
37
|
-
: config.privateKeyPath;
|
|
38
|
-
return {
|
|
39
|
-
host: computed['HostName'] ?? config.host,
|
|
40
|
-
port: computed['Port']
|
|
41
|
-
? parseInt(computed['Port'], 10)
|
|
42
|
-
: config.port,
|
|
43
|
-
username: computed['User'] ?? config.username,
|
|
44
|
-
privateKeyPath: identityFile,
|
|
45
|
-
};
|
|
46
|
-
})
|
|
47
|
-
.let((config) => ({
|
|
48
|
-
...config,
|
|
49
|
-
privateKeyPath: config.privateKeyPath ??
|
|
50
|
-
SSH_KEY_ORDER.map((name) => join(sshDir, name)).find((path) => existsSync(path)),
|
|
51
|
-
}))
|
|
52
|
-
.let((config) => ({
|
|
53
|
-
host: config.host,
|
|
54
|
-
port: store.config.sshPort ?? config.port,
|
|
55
|
-
username: store.config.sshUsername ?? config.username,
|
|
56
|
-
privateKeyPath: store.config.sshKey ?? config.privateKeyPath,
|
|
57
|
-
}))
|
|
58
|
-
.value();
|
|
59
|
-
};
|
|
60
|
-
export const connectSSH = async (store) => {
|
|
61
|
-
if (!store.steps.sshConnection.enabled) {
|
|
62
|
-
return undefined;
|
|
63
|
-
}
|
|
64
|
-
const config = resolveSSHConfig(store);
|
|
65
|
-
const privateKey = config.privateKeyPath && existsSync(config.privateKeyPath)
|
|
66
|
-
? readFileSync(config.privateKeyPath)
|
|
67
|
-
: undefined;
|
|
68
|
-
const keyIsEncrypted = privateKey !== undefined && utils.parseKey(privateKey) instanceof Error;
|
|
69
|
-
let publicKeyAttempted = false;
|
|
70
|
-
const promptForInput = (type, finish) => {
|
|
71
|
-
runInAction(() => {
|
|
72
|
-
store.steps.sshConnection.wrongAttempt =
|
|
73
|
-
store.steps.sshConnection.passwordPromptType === type;
|
|
74
|
-
store.steps.sshConnection.password = null;
|
|
75
|
-
store.steps.sshConnection.needPassword = true;
|
|
76
|
-
store.steps.sshConnection.passwordPromptType = type;
|
|
77
|
-
store.steps.sshConnection.promptCount += 1;
|
|
78
|
-
store.steps.sshConnection.state = 'need-password';
|
|
79
|
-
});
|
|
80
|
-
when(() => store.steps.sshConnection.password !== null).then(() => {
|
|
81
|
-
runInAction(() => {
|
|
82
|
-
store.steps.sshConnection.needPassword = false;
|
|
83
|
-
store.steps.sshConnection.state = 'connecting';
|
|
84
|
-
});
|
|
85
|
-
finish([store.steps.sshConnection.password]);
|
|
86
|
-
});
|
|
87
|
-
};
|
|
88
|
-
const promptForPassphrase = (finish) => {
|
|
89
|
-
const envPassphrase = process.env['SSH_PASSPHRASE'];
|
|
90
|
-
if (envPassphrase !== undefined &&
|
|
91
|
-
!(utils.parseKey(privateKey, envPassphrase) instanceof Error)) {
|
|
92
|
-
finish(envPassphrase);
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
if (envPassphrase !== undefined) {
|
|
96
|
-
runInAction(() => {
|
|
97
|
-
store.steps.sshConnection.passwordPromptType = 'passphrase';
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
promptForInput('passphrase', (responses) => {
|
|
101
|
-
const tryPassphrase = responses[0];
|
|
102
|
-
utils.parseKey(privateKey, tryPassphrase) instanceof Error
|
|
103
|
-
? promptForPassphrase(finish)
|
|
104
|
-
: finish(tryPassphrase);
|
|
105
|
-
});
|
|
106
|
-
};
|
|
107
|
-
const authHandler = (methodsLeft, _partialSuccess, next) => {
|
|
108
|
-
const { username } = config;
|
|
109
|
-
// First call: methodsLeft is null — send 'none' to discover available methods
|
|
110
|
-
!methodsLeft
|
|
111
|
-
? next({ type: 'none', username })
|
|
112
|
-
: methodsLeft.includes('publickey') &&
|
|
113
|
-
privateKey &&
|
|
114
|
-
keyIsEncrypted &&
|
|
115
|
-
!publicKeyAttempted
|
|
116
|
-
? promptForPassphrase((validPassphrase) => {
|
|
117
|
-
publicKeyAttempted = true;
|
|
118
|
-
next({
|
|
119
|
-
type: 'publickey',
|
|
120
|
-
username,
|
|
121
|
-
key: privateKey,
|
|
122
|
-
passphrase: validPassphrase,
|
|
123
|
-
});
|
|
124
|
-
})
|
|
125
|
-
: methodsLeft.includes('publickey') &&
|
|
126
|
-
privateKey &&
|
|
127
|
-
!publicKeyAttempted
|
|
128
|
-
? (() => {
|
|
129
|
-
publicKeyAttempted = true;
|
|
130
|
-
next({ type: 'publickey', username, key: privateKey });
|
|
131
|
-
})()
|
|
132
|
-
: methodsLeft.includes('keyboard-interactive')
|
|
133
|
-
? next({
|
|
134
|
-
type: 'keyboard-interactive',
|
|
135
|
-
username,
|
|
136
|
-
prompt: (_name, _instructions, _lang, _prompts, finish) => {
|
|
137
|
-
promptForInput('password', finish);
|
|
138
|
-
},
|
|
139
|
-
})
|
|
140
|
-
: methodsLeft.includes('password')
|
|
141
|
-
? promptForInput('password', (responses) => {
|
|
142
|
-
next({
|
|
143
|
-
type: 'password',
|
|
144
|
-
username,
|
|
145
|
-
password: responses[0],
|
|
146
|
-
});
|
|
147
|
-
})
|
|
148
|
-
: next('none');
|
|
149
|
-
};
|
|
150
|
-
const connectConfig = {
|
|
151
|
-
host: config.host,
|
|
152
|
-
port: config.port,
|
|
153
|
-
username: config.username,
|
|
154
|
-
readyTimeout: 0,
|
|
155
|
-
keepaliveInterval: 10_000,
|
|
156
|
-
keepaliveCountMax: 3,
|
|
157
|
-
authHandler: authHandler,
|
|
158
|
-
};
|
|
159
|
-
runInAction(() => {
|
|
160
|
-
store.steps.sshConnection.pickedHostname = config.host;
|
|
161
|
-
store.steps.sshConnection.pickedPort = config.port;
|
|
162
|
-
store.steps.sshConnection.pickedUsername = config.username;
|
|
163
|
-
store.steps.sshConnection.pickedKeyPath = config.privateKeyPath ?? null;
|
|
164
|
-
store.steps.sshConnection.state = 'connecting';
|
|
165
|
-
});
|
|
166
|
-
const client = new Client();
|
|
167
|
-
return new Promise((resolve, reject) => {
|
|
168
|
-
client.on('ready', () => {
|
|
169
|
-
runInAction(() => {
|
|
170
|
-
store.steps.sshConnection.state = 'connected';
|
|
171
|
-
store.steps.sshConnection.needPassword = false;
|
|
172
|
-
});
|
|
173
|
-
const remoteHost = store.config.hostname ?? 'localhost';
|
|
174
|
-
const remotePort = store.config.port ?? 5432;
|
|
175
|
-
const server = net.createServer((socket) => {
|
|
176
|
-
const localPort = server.address().port;
|
|
177
|
-
client.forwardOut('127.0.0.1', localPort, remoteHost, remotePort, (err, stream) => {
|
|
178
|
-
if (err) {
|
|
179
|
-
socket.end();
|
|
180
|
-
return;
|
|
181
|
-
}
|
|
182
|
-
socket.pipe(stream).pipe(socket);
|
|
183
|
-
});
|
|
184
|
-
});
|
|
185
|
-
server.listen(0, '127.0.0.1', () => {
|
|
186
|
-
const localPort = server.address().port;
|
|
187
|
-
runInAction(() => {
|
|
188
|
-
store.steps.sshConnection.localPort = localPort;
|
|
189
|
-
});
|
|
190
|
-
resolve(() => {
|
|
191
|
-
server.close();
|
|
192
|
-
client.end();
|
|
193
|
-
runInAction(() => {
|
|
194
|
-
store.steps.sshConnection.state = 'idle';
|
|
195
|
-
store.steps.sshConnection.localPort = null;
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
client.on('error', (err) => {
|
|
201
|
-
runInAction(() => {
|
|
202
|
-
store.steps.sshConnection.state = 'error';
|
|
203
|
-
store.steps.sshConnection.error = err.message;
|
|
204
|
-
});
|
|
205
|
-
reject(err);
|
|
206
|
-
});
|
|
207
|
-
client.on('close', () => {
|
|
208
|
-
runInAction(() => {
|
|
209
|
-
if (store.steps.sshConnection.state !== 'error') {
|
|
210
|
-
store.steps.sshConnection.state = 'closed';
|
|
211
|
-
}
|
|
212
|
-
store.steps.sshConnection.localPort = null;
|
|
213
|
-
});
|
|
214
|
-
});
|
|
215
|
-
client.connect(connectConfig);
|
|
216
|
-
});
|
|
217
|
-
};
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NoLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImFwcC9zc2gubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ2pELE9BQU8sRUFBQyxPQUFPLEVBQUUsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDL0IsT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFDO0FBQzNCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUd4QixNQUFNLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztBQUM3QixPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBSXRDLE1BQU0sYUFBYSxHQUFHO0lBQ2xCLGVBQWU7SUFDZixZQUFZO0lBQ1osYUFBYTtJQUNiLFVBQVU7SUFDVixRQUFRO0lBQ1IsUUFBUTtDQUNGLENBQUM7QUFFWCxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFMUMsT0FBTyxLQUFLLENBQUM7UUFDVCxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFRO1FBQzNCLElBQUksRUFBRSxFQUFFO1FBQ1IsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVE7UUFDN0IsY0FBYyxFQUFFLFNBQStCO0tBQ2xELENBQUM7U0FDRyxHQUFHLENBQUMsQ0FB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QUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3JlYWRGaWxlU3luYywgZXhpc3RzU3luY30gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge2hvbWVkaXIsIHVzZXJJbmZvfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7am9pbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBuZXQgZnJvbSAnbm9kZTpuZXQnO1xuaW1wb3J0IHNzaDIgZnJvbSAnc3NoMic7XG5pbXBvcnQgdHlwZSB7QXV0aEhhbmRsZXJNaWRkbGV3YXJlLCBDb25uZWN0Q29uZmlnfSBmcm9tICdzc2gyJztcblxuY29uc3Qge0NsaWVudCwgdXRpbHN9ID0gc3NoMjtcbmltcG9ydCBTU0hDb25maWcgZnJvbSAnc3NoLWNvbmZpZyc7XG5pbXBvcnQge3J1bkluQWN0aW9uLCB3aGVufSBmcm9tICdtb2J4JztcbmltcG9ydCB7c2NvcGV9IGZyb20gJ3Njb3BlLXV0aWxpdGllcyc7XG5cbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uL3N0b3JlLm1qcyc7XG5cbmNvbnN0IFNTSF9LRVlfT1JERVIgPSBbXG4gICAgJ2lkX2VkMjU1MTlfc2snLFxuICAgICdpZF9lZDI1NTE5JyxcbiAgICAnaWRfZWNkc2Ffc2snLFxuICAgICdpZF9lY2RzYScsXG4gICAgJ2lkX3JzYScsXG4gICAgJ2lkX2RzYScsXG5dIGFzIGNvbnN0O1xuXG5jb25zdCByZXNvbHZlU1NIQ29uZmlnID0gKHN0b3JlOiBUU3RvcmUpID0+IHtcbiAgICBjb25zdCBzc2hEaXIgPSBqb2luKGhvbWVkaXIoKSwgJy5zc2gnKTtcbiAgICBjb25zdCBjb25maWdQYXRoID0gam9pbihzc2hEaXIsICdjb25maWcnKTtcblxuICAgIHJldHVybiBzY29wZSh7XG4gICAgICAgIGhvc3Q6IHN0b3JlLmNvbmZpZy5zc2hIb3N0ISxcbiAgICAgICAgcG9ydDogMjIsXG4gICAgICAgIHVzZXJuYW1lOiB1c2VySW5mbygpLnVzZXJuYW1lLFxuICAgICAgICBwcml2YXRlS2V5UGF0aDogdW5kZWZpbmVkIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICB9KVxuICAgICAgICAubGV0KChjb25maWcpID0+IHtcbiAgICAgICAgICAgIGlmICghZXhpc3RzU3luYyhjb25maWdQYXRoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZ1RleHQgPSByZWFkRmlsZVN5bmMoY29uZmlnUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZCA9IFNTSENvbmZpZy5wYXJzZShjb25maWdUZXh0KS5jb21wdXRlKGNvbmZpZy5ob3N0KTtcblxuICAgICAgICAgICAgY29uc3QgaWRlbnRpdHlGaWxlID0gY29tcHV0ZWRbJ0lkZW50aXR5RmlsZSddXG4gICAgICAgICAgICAgICAgPyAoQXJyYXkuaXNBcnJheShjb21wdXRlZFsnSWRlbnRpdHlGaWxlJ10pXG4gICAgICAgICAgICAgICAgICAgICAgPyBjb21wdXRlZFsnSWRlbnRpdHlGaWxlJ11bMF1cbiAgICAgICAgICAgICAgICAgICAgICA6IGNvbXB1dGVkWydJZGVudGl0eUZpbGUnXVxuICAgICAgICAgICAgICAgICAgKS5yZXBsYWNlKC9efi8sIGhvbWVkaXIoKSlcbiAgICAgICAgICAgICAgICA6IGNvbmZpZy5wcml2YXRlS2V5UGF0aDtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBob3N0OiAoY29tcHV0ZWRbJ0hvc3ROYW1lJ10gYXMgc3RyaW5nKSA/PyBjb25maWcuaG9zdCxcbiAgICAgICAgICAgICAgICBwb3J0OiBjb21wdXRlZFsnUG9ydCddXG4gICAgICAgICAgICAgICAgICAgID8gcGFyc2VJbnQoY29tcHV0ZWRbJ1BvcnQnXSBhcyBzdHJpbmcsIDEwKVxuICAgICAgICAgICAgICAgICAgICA6IGNvbmZpZy5wb3J0LFxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiAoY29tcHV0ZWRbJ1VzZXInXSBhcyBzdHJpbmcpID8/IGNvbmZpZy51c2VybmFtZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlS2V5UGF0aDogaWRlbnRpdHlGaWxlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICAgLmxldCgoY29uZmlnKSA9PiAoe1xuICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgcHJpdmF0ZUtleVBhdGg6XG4gICAgICAgICAgICAgICAgY29uZmlnLnByaXZhdGVLZXlQYXRoID8/XG4gICAgICAgICAgICAgICAgU1NIX0tFWV9PUkRFUi5tYXAoKG5hbWUpID0+IGpvaW4oc3NoRGlyLCBuYW1lKSkuZmluZCgocGF0aCkgPT5cbiAgICAgICAgICAgICAgICAgICAgZXhpc3RzU3luYyhwYXRoKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICB9KSlcbiAgICAgICAgLmxldCgoY29uZmlnKSA9PiAoe1xuICAgICAgICAgICAgaG9zdDogY29uZmlnLmhvc3QsXG4gICAgICAgICAgICBwb3J0OiBzdG9yZS5jb25maWcuc3NoUG9ydCA/PyBjb25maWcucG9ydCxcbiAgICAgICAgICAgIHVzZXJuYW1lOiBzdG9yZS5jb25maWcuc3NoVXNlcm5hbWUgPz8gY29uZmlnLnVzZXJuYW1lLFxuICAgICAgICAgICAgcHJpdmF0ZUtleVBhdGg6IHN0b3JlLmNvbmZpZy5zc2hLZXkgPz8gY29uZmlnLnByaXZhdGVLZXlQYXRoLFxuICAgICAgICB9KSlcbiAgICAgICAgLnZhbHVlKCk7XG59O1xuXG5leHBvcnQgY29uc3QgY29ubmVjdFNTSCA9IGFzeW5jIChcbiAgICBzdG9yZTogVFN0b3JlLFxuKTogUHJvbWlzZTwoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ+ID0+IHtcbiAgICBpZiAoIXN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uZW5hYmxlZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZyA9IHJlc29sdmVTU0hDb25maWcoc3RvcmUpO1xuXG4gICAgY29uc3QgcHJpdmF0ZUtleSA9XG4gICAgICAgIGNvbmZpZy5wcml2YXRlS2V5UGF0aCAmJiBleGlzdHNTeW5jKGNvbmZpZy5wcml2YXRlS2V5UGF0aClcbiAgICAgICAgICAgID8gcmVhZEZpbGVTeW5jKGNvbmZpZy5wcml2YXRlS2V5UGF0aClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qga2V5SXNFbmNyeXB0ZWQgPVxuICAgICAgICBwcml2YXRlS2V5ICE9PSB1bmRlZmluZWQgJiYgdXRpbHMucGFyc2VLZXkocHJpdmF0ZUtleSkgaW5zdGFuY2VvZiBFcnJvcjtcblxuICAgIGxldCBwdWJsaWNLZXlBdHRlbXB0ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByb21wdEZvcklucHV0ID0gKFxuICAgICAgICB0eXBlOiAncGFzc3BocmFzZScgfCAncGFzc3dvcmQnLFxuICAgICAgICBmaW5pc2g6IChyZXNwb25zZXM6IHN0cmluZ1tdKSA9PiB2b2lkLFxuICAgICkgPT4ge1xuICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLndyb25nQXR0ZW1wdCA9XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5wYXNzd29yZFByb21wdFR5cGUgPT09IHR5cGU7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnBhc3N3b3JkID0gbnVsbDtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ubmVlZFBhc3N3b3JkID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ucGFzc3dvcmRQcm9tcHRUeXBlID0gdHlwZTtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ucHJvbXB0Q291bnQgKz0gMTtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uc3RhdGUgPSAnbmVlZC1wYXNzd29yZCc7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdoZW4oKCkgPT4gc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5wYXNzd29yZCAhPT0gbnVsbCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5uZWVkUGFzc3dvcmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnN0YXRlID0gJ2Nvbm5lY3RpbmcnO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZpbmlzaChbc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5wYXNzd29yZCFdKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHByb21wdEZvclBhc3NwaHJhc2UgPSAoZmluaXNoOiAodmFsaWRQYXNzcGhyYXNlOiBzdHJpbmcpID0+IHZvaWQpID0+IHtcbiAgICAgICAgY29uc3QgZW52UGFzc3BocmFzZSA9IHByb2Nlc3MuZW52WydTU0hfUEFTU1BIUkFTRSddO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBlbnZQYXNzcGhyYXNlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICEodXRpbHMucGFyc2VLZXkocHJpdmF0ZUtleSEsIGVudlBhc3NwaHJhc2UpIGluc3RhbmNlb2YgRXJyb3IpXG4gICAgICAgICkge1xuICAgICAgICAgICAgZmluaXNoKGVudlBhc3NwaHJhc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudlBhc3NwaHJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ucGFzc3dvcmRQcm9tcHRUeXBlID0gJ3Bhc3NwaHJhc2UnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9tcHRGb3JJbnB1dCgncGFzc3BocmFzZScsIChyZXNwb25zZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyeVBhc3NwaHJhc2UgPSByZXNwb25zZXNbMF0hO1xuICAgICAgICAgICAgdXRpbHMucGFyc2VLZXkocHJpdmF0ZUtleSEsIHRyeVBhc3NwaHJhc2UpIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgICAgICA/IHByb21wdEZvclBhc3NwaHJhc2UoZmluaXNoKVxuICAgICAgICAgICAgICAgIDogZmluaXNoKHRyeVBhc3NwaHJhc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgYXV0aEhhbmRsZXI6IEF1dGhIYW5kbGVyTWlkZGxld2FyZSA9IChcbiAgICAgICAgbWV0aG9kc0xlZnQsXG4gICAgICAgIF9wYXJ0aWFsU3VjY2VzcyxcbiAgICAgICAgbmV4dCxcbiAgICApID0+IHtcbiAgICAgICAgY29uc3Qge3VzZXJuYW1lfSA9IGNvbmZpZztcblxuICAgICAgICAvLyBGaXJzdCBjYWxsOiBtZXRob2RzTGVmdCBpcyBudWxsIOKAlCBzZW5kICdub25lJyB0byBkaXNjb3ZlciBhdmFpbGFibGUgbWV0aG9kc1xuICAgICAgICAhbWV0aG9kc0xlZnRcbiAgICAgICAgICAgID8gbmV4dCh7dHlwZTogJ25vbmUnLCB1c2VybmFtZX0pXG4gICAgICAgICAgICA6IG1ldGhvZHNMZWZ0LmluY2x1ZGVzKCdwdWJsaWNrZXknKSAmJlxuICAgICAgICAgICAgICAgIHByaXZhdGVLZXkgJiZcbiAgICAgICAgICAgICAgICBrZXlJc0VuY3J5cHRlZCAmJlxuICAgICAgICAgICAgICAgICFwdWJsaWNLZXlBdHRlbXB0ZWRcbiAgICAgICAgICAgICAgPyBwcm9tcHRGb3JQYXNzcGhyYXNlKCh2YWxpZFBhc3NwaHJhc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHVibGljS2V5QXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAncHVibGlja2V5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBwcml2YXRlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3BocmFzZTogdmFsaWRQYXNzcGhyYXNlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IG1ldGhvZHNMZWZ0LmluY2x1ZGVzKCdwdWJsaWNrZXknKSAmJlxuICAgICAgICAgICAgICAgICAgcHJpdmF0ZUtleSAmJlxuICAgICAgICAgICAgICAgICAgIXB1YmxpY0tleUF0dGVtcHRlZFxuICAgICAgICAgICAgICAgID8gKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBwdWJsaWNLZXlBdHRlbXB0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIG5leHQoe3R5cGU6ICdwdWJsaWNrZXknLCB1c2VybmFtZSwga2V5OiBwcml2YXRlS2V5fSk7XG4gICAgICAgICAgICAgICAgICB9KSgpXG4gICAgICAgICAgICAgICAgOiBtZXRob2RzTGVmdC5pbmNsdWRlcygna2V5Ym9hcmQtaW50ZXJhY3RpdmUnKVxuICAgICAgICAgICAgICAgICAgPyBuZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdrZXlib2FyZC1pbnRlcmFjdGl2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21wdDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xhbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Byb21wdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXB0Rm9ySW5wdXQoJ3Bhc3N3b3JkJywgZmluaXNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICA6IG1ldGhvZHNMZWZ0LmluY2x1ZGVzKCdwYXNzd29yZCcpXG4gICAgICAgICAgICAgICAgICAgID8gcHJvbXB0Rm9ySW5wdXQoJ3Bhc3N3b3JkJywgKHJlc3BvbnNlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkOiByZXNwb25zZXNbMF0hLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IG5leHQoJ25vbmUnKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY29ubmVjdENvbmZpZzogQ29ubmVjdENvbmZpZyA9IHtcbiAgICAgICAgaG9zdDogY29uZmlnLmhvc3QsXG4gICAgICAgIHBvcnQ6IGNvbmZpZy5wb3J0LFxuICAgICAgICB1c2VybmFtZTogY29uZmlnLnVzZXJuYW1lLFxuICAgICAgICByZWFkeVRpbWVvdXQ6IDAsXG4gICAgICAgIGtlZXBhbGl2ZUludGVydmFsOiAxMF8wMDAsXG4gICAgICAgIGtlZXBhbGl2ZUNvdW50TWF4OiAzLFxuICAgICAgICBhdXRoSGFuZGxlcjogYXV0aEhhbmRsZXIsXG4gICAgfTtcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5waWNrZWRIb3N0bmFtZSA9IGNvbmZpZy5ob3N0O1xuICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnBpY2tlZFBvcnQgPSBjb25maWcucG9ydDtcbiAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5waWNrZWRVc2VybmFtZSA9IGNvbmZpZy51c2VybmFtZTtcbiAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5waWNrZWRLZXlQYXRoID0gY29uZmlnLnByaXZhdGVLZXlQYXRoID8/IG51bGw7XG4gICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uc3RhdGUgPSAnY29ubmVjdGluZyc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8KCkgPT4gdm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjbGllbnQub24oJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uc3RhdGUgPSAnY29ubmVjdGVkJztcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLm5lZWRQYXNzd29yZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlbW90ZUhvc3QgPSBzdG9yZS5jb25maWcuaG9zdG5hbWUgPz8gJ2xvY2FsaG9zdCc7XG4gICAgICAgICAgICBjb25zdCByZW1vdGVQb3J0ID0gc3RvcmUuY29uZmlnLnBvcnQgPz8gNTQzMjtcblxuICAgICAgICAgICAgY29uc3Qgc2VydmVyID0gbmV0LmNyZWF0ZVNlcnZlcigoc29ja2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxQb3J0ID0gKHNlcnZlci5hZGRyZXNzKCkgYXMgbmV0LkFkZHJlc3NJbmZvKS5wb3J0O1xuXG4gICAgICAgICAgICAgICAgY2xpZW50LmZvcndhcmRPdXQoXG4gICAgICAgICAgICAgICAgICAgICcxMjcuMC4wLjEnLFxuICAgICAgICAgICAgICAgICAgICBsb2NhbFBvcnQsXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZUhvc3QsXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZVBvcnQsXG4gICAgICAgICAgICAgICAgICAgIChlcnIsIHN0cmVhbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQucGlwZShzdHJlYW0pLnBpcGUoc29ja2V0KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNlcnZlci5saXN0ZW4oMCwgJzEyNy4wLjAuMScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbFBvcnQgPSAoc2VydmVyLmFkZHJlc3MoKSBhcyBuZXQuQWRkcmVzc0luZm8pLnBvcnQ7XG5cbiAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ubG9jYWxQb3J0ID0gbG9jYWxQb3J0O1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNlcnZlci5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICBjbGllbnQuZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uc3RhdGUgPSAnaWRsZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLmxvY2FsUG9ydCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNsaWVudC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5zdGF0ZSA9ICdlcnJvcic7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjbGllbnQub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnN0YXRlICE9PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uc3RhdGUgPSAnY2xvc2VkJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLmxvY2FsUG9ydCA9IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY2xpZW50LmNvbm5lY3QoY29ubmVjdENvbmZpZyk7XG4gICAgfSk7XG59O1xuIl19
|
package/dist/db/analyze.d.mts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.d.mts","sourceRoot":"./src/","sources":["db/analyze.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,eAAO,MAAM,eAAe,GACxB,MAAM,IAAI,EACV,cAAc,MAAM,KACrB,OAAO,CAAC,IAAI,CAqBd,CAAC"}
|
package/dist/db/analyze.mjs
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export const analyzeRelation = async (pool, relationName) => {
|
|
2
|
-
// Validate relation exists and get properly quoted name to prevent SQL injection
|
|
3
|
-
const validation = await pool.query(`
|
|
4
|
-
SELECT format('%I', c.relname) AS quoted_name
|
|
5
|
-
FROM pg_catalog.pg_class c
|
|
6
|
-
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
|
|
7
|
-
WHERE n.nspname = 'public'
|
|
8
|
-
AND c.relname = $1
|
|
9
|
-
AND c.relkind IN ('r', 'p', 'm')
|
|
10
|
-
`, [relationName]);
|
|
11
|
-
if (validation.rows.length === 0) {
|
|
12
|
-
throw new Error(`Relation "${relationName}" not found in public schema`);
|
|
13
|
-
}
|
|
14
|
-
await pool.query(`ANALYZE public.${validation.rows[0].quoted_name}`);
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZS5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJkYi9hbmFseXplLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsS0FBSyxFQUNoQyxJQUFVLEVBQ1YsWUFBb0IsRUFDUCxFQUFFO0lBQ2YsaUZBQWlGO0lBQ2pGLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FDL0I7Ozs7Ozs7U0FPQyxFQUNELENBQUMsWUFBWSxDQUFDLENBQ2pCLENBQUM7SUFFRixJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sSUFBSSxLQUFLLENBQ1gsYUFBYSxZQUFZLDhCQUE4QixDQUMxRCxDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbmV4cG9ydCBjb25zdCBhbmFseXplUmVsYXRpb24gPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICByZWxhdGlvbk5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIC8vIFZhbGlkYXRlIHJlbGF0aW9uIGV4aXN0cyBhbmQgZ2V0IHByb3Blcmx5IHF1b3RlZCBuYW1lIHRvIHByZXZlbnQgU1FMIGluamVjdGlvblxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSBhd2FpdCBwb29sLnF1ZXJ5PHtxdW90ZWRfbmFtZTogc3RyaW5nfT4oXG4gICAgICAgIGBcbiAgICAgICAgU0VMRUNUIGZvcm1hdCgnJUknLCBjLnJlbG5hbWUpIEFTIHF1b3RlZF9uYW1lXG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlXG4gICAgICAgIFdIRVJFIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICBBTkQgYy5yZWxuYW1lID0gJDFcbiAgICAgICAgICAgIEFORCBjLnJlbGtpbmQgSU4gKCdyJywgJ3AnLCAnbScpXG4gICAgICAgIGAsXG4gICAgICAgIFtyZWxhdGlvbk5hbWVdLFxuICAgICk7XG5cbiAgICBpZiAodmFsaWRhdGlvbi5yb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgUmVsYXRpb24gXCIke3JlbGF0aW9uTmFtZX1cIiBub3QgZm91bmQgaW4gcHVibGljIHNjaGVtYWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYXdhaXQgcG9vbC5xdWVyeShgQU5BTFlaRSBwdWJsaWMuJHt2YWxpZGF0aW9uLnJvd3NbMF0ucXVvdGVkX25hbWV9YCk7XG59O1xuIl19
|
package/dist/db/attributes.d.mts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { Pool } from 'pg';
|
|
2
|
-
export type TAttributeKind = 'regular' | 'generated';
|
|
3
|
-
export type TGeneratedStorage = 'stored' | 'virtual';
|
|
4
|
-
export type TAttributeInfo = {
|
|
5
|
-
attribute_name: string;
|
|
6
|
-
data_type: string;
|
|
7
|
-
is_nullable: boolean;
|
|
8
|
-
has_default: boolean;
|
|
9
|
-
default_expression: string | null;
|
|
10
|
-
kind: TAttributeKind;
|
|
11
|
-
generated_storage: TGeneratedStorage | null;
|
|
12
|
-
generated_expression: string | null;
|
|
13
|
-
comment: string | null;
|
|
14
|
-
};
|
|
15
|
-
export declare const fetchRelationAttributes: (pool: Pool, relationName: string) => Promise<TAttributeInfo[]>;
|
|
16
|
-
//# sourceMappingURL=attributes.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attributes.d.mts","sourceRoot":"./src/","sources":["db/attributes.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,CAAC;AAErD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAChC,MAAM,IAAI,EACV,cAAc,MAAM,KACrB,OAAO,CAAC,cAAc,EAAE,CAuC1B,CAAC"}
|
package/dist/db/attributes.mjs
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
export const fetchRelationAttributes = async (pool, relationName) => {
|
|
2
|
-
const result = await pool.query(`
|
|
3
|
-
SELECT
|
|
4
|
-
a.attname AS attribute_name,
|
|
5
|
-
format_type(a.atttypid, a.atttypmod) AS data_type,
|
|
6
|
-
NOT a.attnotnull AS is_nullable,
|
|
7
|
-
ad.adbin IS NOT NULL AS has_default,
|
|
8
|
-
CASE
|
|
9
|
-
WHEN a.attgenerated = '' AND ad.adbin IS NOT NULL THEN pg_get_expr(ad.adbin, ad.adrelid)
|
|
10
|
-
ELSE NULL
|
|
11
|
-
END AS default_expression,
|
|
12
|
-
CASE a.attgenerated
|
|
13
|
-
WHEN '' THEN 'regular'
|
|
14
|
-
ELSE 'generated'
|
|
15
|
-
END AS kind,
|
|
16
|
-
CASE a.attgenerated
|
|
17
|
-
WHEN 's' THEN 'stored'
|
|
18
|
-
WHEN 'v' THEN 'virtual'
|
|
19
|
-
ELSE NULL
|
|
20
|
-
END AS generated_storage,
|
|
21
|
-
CASE
|
|
22
|
-
WHEN a.attgenerated != '' THEN pg_get_expr(ad.adbin, ad.adrelid)
|
|
23
|
-
ELSE NULL
|
|
24
|
-
END AS generated_expression,
|
|
25
|
-
col_description(c.oid, a.attnum) AS comment
|
|
26
|
-
FROM pg_catalog.pg_class c
|
|
27
|
-
JOIN pg_catalog.pg_attribute a ON a.attrelid = c.oid
|
|
28
|
-
LEFT JOIN pg_catalog.pg_attrdef ad ON ad.adrelid = a.attrelid AND ad.adnum = a.attnum
|
|
29
|
-
WHERE c.relname = $1
|
|
30
|
-
AND c.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public')
|
|
31
|
-
AND a.attnum > 0
|
|
32
|
-
AND NOT a.attisdropped
|
|
33
|
-
ORDER BY a.attnum
|
|
34
|
-
`, [relationName]);
|
|
35
|
-
return result.rows;
|
|
36
|
-
};
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlcy5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJkYi9hdHRyaWJ1dGVzLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxFQUN4QyxJQUFVLEVBQ1YsWUFBb0IsRUFDSyxFQUFFO0lBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FDM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBZ0NDLEVBQ0QsQ0FBQyxZQUFZLENBQUMsQ0FDakIsQ0FBQztJQUVGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztBQUN2QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUQXR0cmlidXRlS2luZCA9ICdyZWd1bGFyJyB8ICdnZW5lcmF0ZWQnO1xuXG5leHBvcnQgdHlwZSBUR2VuZXJhdGVkU3RvcmFnZSA9ICdzdG9yZWQnIHwgJ3ZpcnR1YWwnO1xuXG5leHBvcnQgdHlwZSBUQXR0cmlidXRlSW5mbyA9IHtcbiAgICBhdHRyaWJ1dGVfbmFtZTogc3RyaW5nO1xuICAgIGRhdGFfdHlwZTogc3RyaW5nO1xuICAgIGlzX251bGxhYmxlOiBib29sZWFuO1xuICAgIGhhc19kZWZhdWx0OiBib29sZWFuO1xuICAgIGRlZmF1bHRfZXhwcmVzc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgICBraW5kOiBUQXR0cmlidXRlS2luZDtcbiAgICBnZW5lcmF0ZWRfc3RvcmFnZTogVEdlbmVyYXRlZFN0b3JhZ2UgfCBudWxsO1xuICAgIGdlbmVyYXRlZF9leHByZXNzaW9uOiBzdHJpbmcgfCBudWxsO1xuICAgIGNvbW1lbnQ6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hSZWxhdGlvbkF0dHJpYnV0ZXMgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICByZWxhdGlvbk5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8VEF0dHJpYnV0ZUluZm9bXT4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VEF0dHJpYnV0ZUluZm8+KFxuICAgICAgICBgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgYS5hdHRuYW1lIEFTIGF0dHJpYnV0ZV9uYW1lLFxuICAgICAgICAgICAgZm9ybWF0X3R5cGUoYS5hdHR0eXBpZCwgYS5hdHR0eXBtb2QpIEFTIGRhdGFfdHlwZSxcbiAgICAgICAgICAgIE5PVCBhLmF0dG5vdG51bGwgQVMgaXNfbnVsbGFibGUsXG4gICAgICAgICAgICBhZC5hZGJpbiBJUyBOT1QgTlVMTCBBUyBoYXNfZGVmYXVsdCxcbiAgICAgICAgICAgIENBU0VcbiAgICAgICAgICAgICAgICBXSEVOIGEuYXR0Z2VuZXJhdGVkID0gJycgQU5EIGFkLmFkYmluIElTIE5PVCBOVUxMIFRIRU4gcGdfZ2V0X2V4cHIoYWQuYWRiaW4sIGFkLmFkcmVsaWQpXG4gICAgICAgICAgICAgICAgRUxTRSBOVUxMXG4gICAgICAgICAgICBFTkQgQVMgZGVmYXVsdF9leHByZXNzaW9uLFxuICAgICAgICAgICAgQ0FTRSBhLmF0dGdlbmVyYXRlZFxuICAgICAgICAgICAgICAgIFdIRU4gJycgVEhFTiAncmVndWxhcidcbiAgICAgICAgICAgICAgICBFTFNFICdnZW5lcmF0ZWQnXG4gICAgICAgICAgICBFTkQgQVMga2luZCxcbiAgICAgICAgICAgIENBU0UgYS5hdHRnZW5lcmF0ZWRcbiAgICAgICAgICAgICAgICBXSEVOICdzJyBUSEVOICdzdG9yZWQnXG4gICAgICAgICAgICAgICAgV0hFTiAndicgVEhFTiAndmlydHVhbCdcbiAgICAgICAgICAgICAgICBFTFNFIE5VTExcbiAgICAgICAgICAgIEVORCBBUyBnZW5lcmF0ZWRfc3RvcmFnZSxcbiAgICAgICAgICAgIENBU0VcbiAgICAgICAgICAgICAgICBXSEVOIGEuYXR0Z2VuZXJhdGVkICE9ICcnIFRIRU4gcGdfZ2V0X2V4cHIoYWQuYWRiaW4sIGFkLmFkcmVsaWQpXG4gICAgICAgICAgICAgICAgRUxTRSBOVUxMXG4gICAgICAgICAgICBFTkQgQVMgZ2VuZXJhdGVkX2V4cHJlc3Npb24sXG4gICAgICAgICAgICBjb2xfZGVzY3JpcHRpb24oYy5vaWQsIGEuYXR0bnVtKSBBUyBjb21tZW50XG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYSBPTiBhLmF0dHJlbGlkID0gYy5vaWRcbiAgICAgICAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfYXR0cmRlZiBhZCBPTiBhZC5hZHJlbGlkID0gYS5hdHRyZWxpZCBBTkQgYWQuYWRudW0gPSBhLmF0dG51bVxuICAgICAgICBXSEVSRSBjLnJlbG5hbWUgPSAkMVxuICAgICAgICAgICAgQU5EIGMucmVsbmFtZXNwYWNlID0gKFNFTEVDVCBvaWQgRlJPTSBwZ19uYW1lc3BhY2UgV0hFUkUgbnNwbmFtZSA9ICdwdWJsaWMnKVxuICAgICAgICAgICAgQU5EIGEuYXR0bnVtID4gMFxuICAgICAgICAgICAgQU5EIE5PVCBhLmF0dGlzZHJvcHBlZFxuICAgICAgICBPUkRFUiBCWSBhLmF0dG51bVxuICAgICAgICBgLFxuICAgICAgICBbcmVsYXRpb25OYW1lXSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzO1xufTtcbiJdfQ==
|
package/dist/db/enums.d.mts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Pool } from 'pg';
|
|
2
|
-
export type TEnumInfo = {
|
|
3
|
-
values: string[];
|
|
4
|
-
comment: string | null;
|
|
5
|
-
};
|
|
6
|
-
export type TGroupedEnums = Record<string, TEnumInfo>;
|
|
7
|
-
export declare const fetchPublicEnums: (pool: Pool) => Promise<TGroupedEnums>;
|
|
8
|
-
//# sourceMappingURL=enums.d.mts.map
|
package/dist/db/enums.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enums.d.mts","sourceRoot":"./src/","sources":["db/enums.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAU7B,MAAM,MAAM,SAAS,GAAG;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEtD,eAAO,MAAM,gBAAgB,GAAU,MAAM,IAAI,KAAG,OAAO,CAAC,aAAa,CAyBxE,CAAC"}
|
package/dist/db/enums.mjs
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { groupBy } from 'es-toolkit';
|
|
2
|
-
export const fetchPublicEnums = async (pool) => {
|
|
3
|
-
const result = await pool.query(`
|
|
4
|
-
SELECT
|
|
5
|
-
t.typname AS enum_name,
|
|
6
|
-
e.enumlabel AS value,
|
|
7
|
-
e.enumsortorder AS sort_order,
|
|
8
|
-
obj_description(t.oid, 'pg_type') AS comment
|
|
9
|
-
FROM pg_catalog.pg_type t
|
|
10
|
-
JOIN pg_catalog.pg_enum e ON t.oid = e.enumtypid
|
|
11
|
-
JOIN pg_catalog.pg_namespace n ON t.typnamespace = n.oid
|
|
12
|
-
WHERE n.nspname = 'public'
|
|
13
|
-
ORDER BY enum_name, sort_order
|
|
14
|
-
`);
|
|
15
|
-
const grouped = groupBy(result.rows, (row) => row.enum_name);
|
|
16
|
-
return Object.fromEntries(Object.entries(grouped).map(([name, rows]) => [
|
|
17
|
-
name,
|
|
18
|
-
{
|
|
19
|
-
values: rows.map((r) => r.value),
|
|
20
|
-
comment: rows[0]?.comment ?? null,
|
|
21
|
-
},
|
|
22
|
-
]));
|
|
23
|
-
};
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bXMubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiZGIvZW51bXMubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFnQm5DLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEtBQUssRUFBRSxJQUFVLEVBQTBCLEVBQUU7SUFDekUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFnQjs7Ozs7Ozs7Ozs7S0FXOUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU3RCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3JCLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzFDLElBQUk7UUFDSjtZQUNJLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ2hDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxJQUFJLElBQUk7U0FDcEM7S0FDSixDQUFDLENBQ0wsQ0FBQztBQUNOLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5pbXBvcnQge2dyb3VwQnl9IGZyb20gJ2VzLXRvb2xraXQnO1xuXG50eXBlIFRFbnVtVmFsdWVSb3cgPSB7XG4gICAgZW51bV9uYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBzb3J0X29yZGVyOiBudW1iZXI7XG4gICAgY29tbWVudDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFRFbnVtSW5mbyA9IHtcbiAgICB2YWx1ZXM6IHN0cmluZ1tdO1xuICAgIGNvbW1lbnQ6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBUR3JvdXBlZEVudW1zID0gUmVjb3JkPHN0cmluZywgVEVudW1JbmZvPjtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHVibGljRW51bXMgPSBhc3luYyAocG9vbDogUG9vbCk6IFByb21pc2U8VEdyb3VwZWRFbnVtcz4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VEVudW1WYWx1ZVJvdz4oYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIHQudHlwbmFtZSBBUyBlbnVtX25hbWUsXG4gICAgICAgICAgICBlLmVudW1sYWJlbCBBUyB2YWx1ZSxcbiAgICAgICAgICAgIGUuZW51bXNvcnRvcmRlciBBUyBzb3J0X29yZGVyLFxuICAgICAgICAgICAgb2JqX2Rlc2NyaXB0aW9uKHQub2lkLCAncGdfdHlwZScpIEFTIGNvbW1lbnRcbiAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX3R5cGUgdFxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfZW51bSBlIE9OIHQub2lkID0gZS5lbnVtdHlwaWRcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIHQudHlwbmFtZXNwYWNlID0gbi5vaWRcbiAgICAgICAgV0hFUkUgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgT1JERVIgQlkgZW51bV9uYW1lLCBzb3J0X29yZGVyXG4gICAgYCk7XG5cbiAgICBjb25zdCBncm91cGVkID0gZ3JvdXBCeShyZXN1bHQucm93cywgKHJvdykgPT4gcm93LmVudW1fbmFtZSk7XG5cbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhncm91cGVkKS5tYXAoKFtuYW1lLCByb3dzXSkgPT4gW1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHJvd3MubWFwKChyKSA9PiByLnZhbHVlKSxcbiAgICAgICAgICAgICAgICBjb21tZW50OiByb3dzWzBdPy5jb21tZW50ID8/IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdKSxcbiAgICApO1xufTtcbiJdfQ==
|
package/dist/db/file-stats.d.mts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Pool } from 'pg';
|
|
2
|
-
export type TRelationFileStats = {
|
|
3
|
-
relation_name: string;
|
|
4
|
-
file_path: string | null;
|
|
5
|
-
modification_time: Date;
|
|
6
|
-
size_bytes: number;
|
|
7
|
-
is_partitioned: boolean;
|
|
8
|
-
partition_count: number | null;
|
|
9
|
-
};
|
|
10
|
-
export declare const fetchRelationFileStats: (pool: Pool, relationName: string) => Promise<TRelationFileStats>;
|
|
11
|
-
//# sourceMappingURL=file-stats.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-stats.d.mts","sourceRoot":"./src/","sources":["db/file-stats.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,kBAAkB,GAAG;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,EAAE,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAC/B,MAAM,IAAI,EACV,cAAc,MAAM,KACrB,OAAO,CAAC,kBAAkB,CA6C5B,CAAC"}
|
package/dist/db/file-stats.mjs
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
export const fetchRelationFileStats = async (pool, relationName) => {
|
|
2
|
-
const result = await pool.query(`
|
|
3
|
-
WITH target AS (
|
|
4
|
-
SELECT c.oid, c.relname, c.relkind
|
|
5
|
-
FROM pg_catalog.pg_class c
|
|
6
|
-
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
|
|
7
|
-
WHERE n.nspname = 'public'
|
|
8
|
-
AND c.relname = $1
|
|
9
|
-
AND c.relkind IN ('r', 'p', 'm')
|
|
10
|
-
),
|
|
11
|
-
partition_stats AS (
|
|
12
|
-
SELECT
|
|
13
|
-
(pg_stat_file(pg_relation_filepath(child.oid))).modification AS modification_time,
|
|
14
|
-
(pg_stat_file(pg_relation_filepath(child.oid))).size AS size_bytes
|
|
15
|
-
FROM target t
|
|
16
|
-
JOIN pg_catalog.pg_inherits i ON i.inhparent = t.oid
|
|
17
|
-
JOIN pg_catalog.pg_class child ON child.oid = i.inhrelid
|
|
18
|
-
WHERE t.relkind = 'p'
|
|
19
|
-
)
|
|
20
|
-
SELECT
|
|
21
|
-
t.relname AS relation_name,
|
|
22
|
-
CASE
|
|
23
|
-
WHEN t.relkind = 'p' THEN NULL
|
|
24
|
-
ELSE pg_relation_filepath(t.oid)
|
|
25
|
-
END AS file_path,
|
|
26
|
-
CASE
|
|
27
|
-
WHEN t.relkind = 'p' THEN (SELECT MAX(modification_time) FROM partition_stats)
|
|
28
|
-
ELSE (pg_stat_file(pg_relation_filepath(t.oid))).modification
|
|
29
|
-
END AS modification_time,
|
|
30
|
-
CASE
|
|
31
|
-
WHEN t.relkind = 'p' THEN (SELECT COALESCE(SUM(size_bytes), 0) FROM partition_stats)
|
|
32
|
-
ELSE (pg_stat_file(pg_relation_filepath(t.oid))).size
|
|
33
|
-
END AS size_bytes,
|
|
34
|
-
t.relkind = 'p' AS is_partitioned,
|
|
35
|
-
CASE
|
|
36
|
-
WHEN t.relkind = 'p' THEN (SELECT COUNT(*) FROM partition_stats)
|
|
37
|
-
ELSE NULL
|
|
38
|
-
END AS partition_count
|
|
39
|
-
FROM target t
|
|
40
|
-
`, [relationName]);
|
|
41
|
-
return result.rows[0];
|
|
42
|
-
};
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zdGF0cy5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJkYi9maWxlLXN0YXRzLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxLQUFLLEVBQ3ZDLElBQVUsRUFDVixZQUFvQixFQUNPLEVBQUU7SUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUMzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0FzQ0MsRUFDRCxDQUFDLFlBQVksQ0FBQyxDQUNqQixDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbmV4cG9ydCB0eXBlIFRSZWxhdGlvbkZpbGVTdGF0cyA9IHtcbiAgICByZWxhdGlvbl9uYW1lOiBzdHJpbmc7XG4gICAgZmlsZV9wYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIG1vZGlmaWNhdGlvbl90aW1lOiBEYXRlO1xuICAgIHNpemVfYnl0ZXM6IG51bWJlcjtcbiAgICBpc19wYXJ0aXRpb25lZDogYm9vbGVhbjtcbiAgICBwYXJ0aXRpb25fY291bnQ6IG51bWJlciB8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hSZWxhdGlvbkZpbGVTdGF0cyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHJlbGF0aW9uTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxUUmVsYXRpb25GaWxlU3RhdHM+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PFRSZWxhdGlvbkZpbGVTdGF0cz4oXG4gICAgICAgIGBcbiAgICAgICAgV0lUSCB0YXJnZXQgQVMgKFxuICAgICAgICAgICAgU0VMRUNUIGMub2lkLCBjLnJlbG5hbWUsIGMucmVsa2luZFxuICAgICAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGNcbiAgICAgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlXG4gICAgICAgICAgICBXSEVSRSBuLm5zcG5hbWUgPSAncHVibGljJ1xuICAgICAgICAgICAgICAgIEFORCBjLnJlbG5hbWUgPSAkMVxuICAgICAgICAgICAgICAgIEFORCBjLnJlbGtpbmQgSU4gKCdyJywgJ3AnLCAnbScpXG4gICAgICAgICksXG4gICAgICAgIHBhcnRpdGlvbl9zdGF0cyBBUyAoXG4gICAgICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgICAgICAocGdfc3RhdF9maWxlKHBnX3JlbGF0aW9uX2ZpbGVwYXRoKGNoaWxkLm9pZCkpKS5tb2RpZmljYXRpb24gQVMgbW9kaWZpY2F0aW9uX3RpbWUsXG4gICAgICAgICAgICAgICAgKHBnX3N0YXRfZmlsZShwZ19yZWxhdGlvbl9maWxlcGF0aChjaGlsZC5vaWQpKSkuc2l6ZSBBUyBzaXplX2J5dGVzXG4gICAgICAgICAgICBGUk9NIHRhcmdldCB0XG4gICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfaW5oZXJpdHMgaSBPTiBpLmluaHBhcmVudCA9IHQub2lkXG4gICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgY2hpbGQgT04gY2hpbGQub2lkID0gaS5pbmhyZWxpZFxuICAgICAgICAgICAgV0hFUkUgdC5yZWxraW5kID0gJ3AnXG4gICAgICAgIClcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICB0LnJlbG5hbWUgQVMgcmVsYXRpb25fbmFtZSxcbiAgICAgICAgICAgIENBU0VcbiAgICAgICAgICAgICAgICBXSEVOIHQucmVsa2luZCA9ICdwJyBUSEVOIE5VTExcbiAgICAgICAgICAgICAgICBFTFNFIHBnX3JlbGF0aW9uX2ZpbGVwYXRoKHQub2lkKVxuICAgICAgICAgICAgRU5EIEFTIGZpbGVfcGF0aCxcbiAgICAgICAgICAgIENBU0VcbiAgICAgICAgICAgICAgICBXSEVOIHQucmVsa2luZCA9ICdwJyBUSEVOIChTRUxFQ1QgTUFYKG1vZGlmaWNhdGlvbl90aW1lKSBGUk9NIHBhcnRpdGlvbl9zdGF0cylcbiAgICAgICAgICAgICAgICBFTFNFIChwZ19zdGF0X2ZpbGUocGdfcmVsYXRpb25fZmlsZXBhdGgodC5vaWQpKSkubW9kaWZpY2F0aW9uXG4gICAgICAgICAgICBFTkQgQVMgbW9kaWZpY2F0aW9uX3RpbWUsXG4gICAgICAgICAgICBDQVNFXG4gICAgICAgICAgICAgICAgV0hFTiB0LnJlbGtpbmQgPSAncCcgVEhFTiAoU0VMRUNUIENPQUxFU0NFKFNVTShzaXplX2J5dGVzKSwgMCkgRlJPTSBwYXJ0aXRpb25fc3RhdHMpXG4gICAgICAgICAgICAgICAgRUxTRSAocGdfc3RhdF9maWxlKHBnX3JlbGF0aW9uX2ZpbGVwYXRoKHQub2lkKSkpLnNpemVcbiAgICAgICAgICAgIEVORCBBUyBzaXplX2J5dGVzLFxuICAgICAgICAgICAgdC5yZWxraW5kID0gJ3AnIEFTIGlzX3BhcnRpdGlvbmVkLFxuICAgICAgICAgICAgQ0FTRVxuICAgICAgICAgICAgICAgIFdIRU4gdC5yZWxraW5kID0gJ3AnIFRIRU4gKFNFTEVDVCBDT1VOVCgqKSBGUk9NIHBhcnRpdGlvbl9zdGF0cylcbiAgICAgICAgICAgICAgICBFTFNFIE5VTExcbiAgICAgICAgICAgIEVORCBBUyBwYXJ0aXRpb25fY291bnRcbiAgICAgICAgRlJPTSB0YXJnZXQgdFxuICAgICAgICBgLFxuICAgICAgICBbcmVsYXRpb25OYW1lXSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzWzBdO1xufTtcbiJdfQ==
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { Pool } from 'pg';
|
|
2
|
-
type TForeignKeyAction = 'NO ACTION' | 'RESTRICT' | 'CASCADE' | 'SET NULL' | 'SET DEFAULT';
|
|
3
|
-
export type TForeignKeyInfo = {
|
|
4
|
-
constraint_name: string;
|
|
5
|
-
attributes: string[];
|
|
6
|
-
referenced_relation: string;
|
|
7
|
-
referenced_attributes: string[];
|
|
8
|
-
on_update: TForeignKeyAction;
|
|
9
|
-
on_delete: TForeignKeyAction;
|
|
10
|
-
comment: string | null;
|
|
11
|
-
};
|
|
12
|
-
export declare const fetchRelationForeignKeys: (pool: Pool, relationName: string) => Promise<TForeignKeyInfo[]>;
|
|
13
|
-
export {};
|
|
14
|
-
//# sourceMappingURL=foreign-keys.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"foreign-keys.d.mts","sourceRoot":"./src/","sources":["db/foreign-keys.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,KAAK,iBAAiB,GAChB,WAAW,GACX,UAAU,GACV,SAAS,GACT,UAAU,GACV,aAAa,CAAC;AAEpB,MAAM,MAAM,eAAe,GAAG;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACjC,MAAM,IAAI,EACV,cAAc,MAAM,KACrB,OAAO,CAAC,eAAe,EAAE,CA8C3B,CAAC"}
|
package/dist/db/foreign-keys.mjs
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
export const fetchRelationForeignKeys = async (pool, relationName) => {
|
|
2
|
-
const result = await pool.query(`
|
|
3
|
-
SELECT
|
|
4
|
-
con.conname AS constraint_name,
|
|
5
|
-
ARRAY(
|
|
6
|
-
SELECT a.attname
|
|
7
|
-
FROM unnest(con.conkey) WITH ORDINALITY AS cols(attnum, ord)
|
|
8
|
-
JOIN pg_attribute a ON a.attrelid = con.conrelid AND a.attnum = cols.attnum
|
|
9
|
-
ORDER BY cols.ord
|
|
10
|
-
)::text[] AS attributes,
|
|
11
|
-
ref_cl.relname AS referenced_relation,
|
|
12
|
-
ARRAY(
|
|
13
|
-
SELECT a.attname
|
|
14
|
-
FROM unnest(con.confkey) WITH ORDINALITY AS cols(attnum, ord)
|
|
15
|
-
JOIN pg_attribute a ON a.attrelid = con.confrelid AND a.attnum = cols.attnum
|
|
16
|
-
ORDER BY cols.ord
|
|
17
|
-
)::text[] AS referenced_attributes,
|
|
18
|
-
CASE con.confupdtype
|
|
19
|
-
WHEN 'a' THEN 'NO ACTION'
|
|
20
|
-
WHEN 'r' THEN 'RESTRICT'
|
|
21
|
-
WHEN 'c' THEN 'CASCADE'
|
|
22
|
-
WHEN 'n' THEN 'SET NULL'
|
|
23
|
-
WHEN 'd' THEN 'SET DEFAULT'
|
|
24
|
-
END AS on_update,
|
|
25
|
-
CASE con.confdeltype
|
|
26
|
-
WHEN 'a' THEN 'NO ACTION'
|
|
27
|
-
WHEN 'r' THEN 'RESTRICT'
|
|
28
|
-
WHEN 'c' THEN 'CASCADE'
|
|
29
|
-
WHEN 'n' THEN 'SET NULL'
|
|
30
|
-
WHEN 'd' THEN 'SET DEFAULT'
|
|
31
|
-
END AS on_delete,
|
|
32
|
-
obj_description(con.oid, 'pg_constraint') AS comment
|
|
33
|
-
FROM pg_catalog.pg_constraint con
|
|
34
|
-
JOIN pg_catalog.pg_class cl ON cl.oid = con.conrelid
|
|
35
|
-
JOIN pg_catalog.pg_class ref_cl ON ref_cl.oid = con.confrelid
|
|
36
|
-
JOIN pg_catalog.pg_namespace n ON n.oid = cl.relnamespace
|
|
37
|
-
WHERE con.contype = 'f'
|
|
38
|
-
AND n.nspname = 'public'
|
|
39
|
-
AND cl.relname = $1
|
|
40
|
-
ORDER BY con.conname
|
|
41
|
-
`, [relationName]);
|
|
42
|
-
return result.rows;
|
|
43
|
-
};
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZWlnbi1rZXlzLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImRiL2ZvcmVpZ24ta2V5cy5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUJBLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLEtBQUssRUFDekMsSUFBVSxFQUNWLFlBQW9CLEVBQ00sRUFBRTtJQUM1QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQzNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0F1Q0MsRUFDRCxDQUFDLFlBQVksQ0FBQyxDQUNqQixDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbnR5cGUgVEZvcmVpZ25LZXlBY3Rpb24gPVxuICAgIHwgJ05PIEFDVElPTidcbiAgICB8ICdSRVNUUklDVCdcbiAgICB8ICdDQVNDQURFJ1xuICAgIHwgJ1NFVCBOVUxMJ1xuICAgIHwgJ1NFVCBERUZBVUxUJztcblxuZXhwb3J0IHR5cGUgVEZvcmVpZ25LZXlJbmZvID0ge1xuICAgIGNvbnN0cmFpbnRfbmFtZTogc3RyaW5nO1xuICAgIGF0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuICAgIHJlZmVyZW5jZWRfcmVsYXRpb246IHN0cmluZztcbiAgICByZWZlcmVuY2VkX2F0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuICAgIG9uX3VwZGF0ZTogVEZvcmVpZ25LZXlBY3Rpb247XG4gICAgb25fZGVsZXRlOiBURm9yZWlnbktleUFjdGlvbjtcbiAgICBjb21tZW50OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUmVsYXRpb25Gb3JlaWduS2V5cyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHJlbGF0aW9uTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxURm9yZWlnbktleUluZm9bXT4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VEZvcmVpZ25LZXlJbmZvPihcbiAgICAgICAgYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIGNvbi5jb25uYW1lIEFTIGNvbnN0cmFpbnRfbmFtZSxcbiAgICAgICAgICAgIEFSUkFZKFxuICAgICAgICAgICAgICAgIFNFTEVDVCBhLmF0dG5hbWVcbiAgICAgICAgICAgICAgICBGUk9NIHVubmVzdChjb24uY29ua2V5KSBXSVRIIE9SRElOQUxJVFkgQVMgY29scyhhdHRudW0sIG9yZClcbiAgICAgICAgICAgICAgICBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSBjb24uY29ucmVsaWQgQU5EIGEuYXR0bnVtID0gY29scy5hdHRudW1cbiAgICAgICAgICAgICAgICBPUkRFUiBCWSBjb2xzLm9yZFxuICAgICAgICAgICAgKTo6dGV4dFtdIEFTIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICByZWZfY2wucmVsbmFtZSBBUyByZWZlcmVuY2VkX3JlbGF0aW9uLFxuICAgICAgICAgICAgQVJSQVkoXG4gICAgICAgICAgICAgICAgU0VMRUNUIGEuYXR0bmFtZVxuICAgICAgICAgICAgICAgIEZST00gdW5uZXN0KGNvbi5jb25ma2V5KSBXSVRIIE9SRElOQUxJVFkgQVMgY29scyhhdHRudW0sIG9yZClcbiAgICAgICAgICAgICAgICBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSBjb24uY29uZnJlbGlkIEFORCBhLmF0dG51bSA9IGNvbHMuYXR0bnVtXG4gICAgICAgICAgICAgICAgT1JERVIgQlkgY29scy5vcmRcbiAgICAgICAgICAgICk6OnRleHRbXSBBUyByZWZlcmVuY2VkX2F0dHJpYnV0ZXMsXG4gICAgICAgICAgICBDQVNFIGNvbi5jb25mdXBkdHlwZVxuICAgICAgICAgICAgICAgIFdIRU4gJ2EnIFRIRU4gJ05PIEFDVElPTidcbiAgICAgICAgICAgICAgICBXSEVOICdyJyBUSEVOICdSRVNUUklDVCdcbiAgICAgICAgICAgICAgICBXSEVOICdjJyBUSEVOICdDQVNDQURFJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ24nIFRIRU4gJ1NFVCBOVUxMJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ2QnIFRIRU4gJ1NFVCBERUZBVUxUJ1xuICAgICAgICAgICAgRU5EIEFTIG9uX3VwZGF0ZSxcbiAgICAgICAgICAgIENBU0UgY29uLmNvbmZkZWx0eXBlXG4gICAgICAgICAgICAgICAgV0hFTiAnYScgVEhFTiAnTk8gQUNUSU9OJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ3InIFRIRU4gJ1JFU1RSSUNUJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ2MnIFRIRU4gJ0NBU0NBREUnXG4gICAgICAgICAgICAgICAgV0hFTiAnbicgVEhFTiAnU0VUIE5VTEwnXG4gICAgICAgICAgICAgICAgV0hFTiAnZCcgVEhFTiAnU0VUIERFRkFVTFQnXG4gICAgICAgICAgICBFTkQgQVMgb25fZGVsZXRlLFxuICAgICAgICAgICAgb2JqX2Rlc2NyaXB0aW9uKGNvbi5vaWQsICdwZ19jb25zdHJhaW50JykgQVMgY29tbWVudFxuICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfY29uc3RyYWludCBjb25cbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIGNsIE9OIGNsLm9pZCA9IGNvbi5jb25yZWxpZFxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgcmVmX2NsIE9OIHJlZl9jbC5vaWQgPSBjb24uY29uZnJlbGlkXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGNsLnJlbG5hbWVzcGFjZVxuICAgICAgICBXSEVSRSBjb24uY29udHlwZSA9ICdmJ1xuICAgICAgICAgICAgQU5EIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICBBTkQgY2wucmVsbmFtZSA9ICQxXG4gICAgICAgIE9SREVSIEJZIGNvbi5jb25uYW1lXG4gICAgICAgIGAsXG4gICAgICAgIFtyZWxhdGlvbk5hbWVdLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG59O1xuIl19
|
package/dist/db/index.d.mts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export { fetchPublicRelations, fetchViewDefinition, type TRelationType, type TRelationInfo, type TGroupedRelations, } from './relations.mjs';
|
|
2
|
-
export { fetchRelationAttributes, type TAttributeKind, type TGeneratedStorage, type TAttributeInfo, } from './attributes.mjs';
|
|
3
|
-
export { fetchPublicEnums, type TEnumInfo, type TGroupedEnums, } from './enums.mjs';
|
|
4
|
-
export { fetchRelationIndexes, type TIndexInfo } from './indexes.mjs';
|
|
5
|
-
export { fetchRelationForeignKeys, type TForeignKeyInfo, } from './foreign-keys.mjs';
|
|
6
|
-
export { fetchPostgresVersion, type TPostgresVersion, fetchDatabaseComment, fetchDatabaseIdentifier, type TDatabaseIdentifier, } from './version.mjs';
|
|
7
|
-
export { fetchRelationFileStats, type TRelationFileStats, } from './file-stats.mjs';
|
|
8
|
-
export { analyzeRelation } from './analyze.mjs';
|
|
9
|
-
export { fetchRelationStats, type TRelationStats, type TAttributeStats, } from './stats.mjs';
|
|
10
|
-
//# sourceMappingURL=index.d.mts.map
|
package/dist/db/index.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"./src/","sources":["db/index.mts"],"names":[],"mappings":"AAAA,OAAO,EACH,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,uBAAuB,EACvB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,gBAAgB,EAChB,KAAK,SAAS,EACd,KAAK,aAAa,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,oBAAoB,EAAE,KAAK,UAAU,EAAC,MAAM,eAAe,CAAC;AACpE,OAAO,EACH,wBAAwB,EACxB,KAAK,eAAe,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACH,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,mBAAmB,GAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,sBAAsB,EACtB,KAAK,kBAAkB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAC9C,OAAO,EACH,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,GACvB,MAAM,aAAa,CAAC"}
|
package/dist/db/index.mjs
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export { fetchPublicRelations, fetchViewDefinition, } from './relations.mjs';
|
|
2
|
-
export { fetchRelationAttributes, } from './attributes.mjs';
|
|
3
|
-
export { fetchPublicEnums, } from './enums.mjs';
|
|
4
|
-
export { fetchRelationIndexes } from './indexes.mjs';
|
|
5
|
-
export { fetchRelationForeignKeys, } from './foreign-keys.mjs';
|
|
6
|
-
export { fetchPostgresVersion, fetchDatabaseComment, fetchDatabaseIdentifier, } from './version.mjs';
|
|
7
|
-
export { fetchRelationFileStats, } from './file-stats.mjs';
|
|
8
|
-
export { analyzeRelation } from './analyze.mjs';
|
|
9
|
-
export { fetchRelationStats, } from './stats.mjs';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiZGIvaW5kZXgubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsbUJBQW1CLEdBSXRCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNILHVCQUF1QixHQUkxQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFDSCxnQkFBZ0IsR0FHbkIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFDLG9CQUFvQixFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQ0gsd0JBQXdCLEdBRTNCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNILG9CQUFvQixFQUVwQixvQkFBb0IsRUFDcEIsdUJBQXVCLEdBRTFCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxzQkFBc0IsR0FFekIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFDSCxrQkFBa0IsR0FHckIsTUFBTSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICAgIGZldGNoUHVibGljUmVsYXRpb25zLFxuICAgIGZldGNoVmlld0RlZmluaXRpb24sXG4gICAgdHlwZSBUUmVsYXRpb25UeXBlLFxuICAgIHR5cGUgVFJlbGF0aW9uSW5mbyxcbiAgICB0eXBlIFRHcm91cGVkUmVsYXRpb25zLFxufSBmcm9tICcuL3JlbGF0aW9ucy5tanMnO1xuZXhwb3J0IHtcbiAgICBmZXRjaFJlbGF0aW9uQXR0cmlidXRlcyxcbiAgICB0eXBlIFRBdHRyaWJ1dGVLaW5kLFxuICAgIHR5cGUgVEdlbmVyYXRlZFN0b3JhZ2UsXG4gICAgdHlwZSBUQXR0cmlidXRlSW5mbyxcbn0gZnJvbSAnLi9hdHRyaWJ1dGVzLm1qcyc7XG5leHBvcnQge1xuICAgIGZldGNoUHVibGljRW51bXMsXG4gICAgdHlwZSBURW51bUluZm8sXG4gICAgdHlwZSBUR3JvdXBlZEVudW1zLFxufSBmcm9tICcuL2VudW1zLm1qcyc7XG5leHBvcnQge2ZldGNoUmVsYXRpb25JbmRleGVzLCB0eXBlIFRJbmRleEluZm99IGZyb20gJy4vaW5kZXhlcy5tanMnO1xuZXhwb3J0IHtcbiAgICBmZXRjaFJlbGF0aW9uRm9yZWlnbktleXMsXG4gICAgdHlwZSBURm9yZWlnbktleUluZm8sXG59IGZyb20gJy4vZm9yZWlnbi1rZXlzLm1qcyc7XG5leHBvcnQge1xuICAgIGZldGNoUG9zdGdyZXNWZXJzaW9uLFxuICAgIHR5cGUgVFBvc3RncmVzVmVyc2lvbixcbiAgICBmZXRjaERhdGFiYXNlQ29tbWVudCxcbiAgICBmZXRjaERhdGFiYXNlSWRlbnRpZmllcixcbiAgICB0eXBlIFREYXRhYmFzZUlkZW50aWZpZXIsXG59IGZyb20gJy4vdmVyc2lvbi5tanMnO1xuZXhwb3J0IHtcbiAgICBmZXRjaFJlbGF0aW9uRmlsZVN0YXRzLFxuICAgIHR5cGUgVFJlbGF0aW9uRmlsZVN0YXRzLFxufSBmcm9tICcuL2ZpbGUtc3RhdHMubWpzJztcbmV4cG9ydCB7YW5hbHl6ZVJlbGF0aW9ufSBmcm9tICcuL2FuYWx5emUubWpzJztcbmV4cG9ydCB7XG4gICAgZmV0Y2hSZWxhdGlvblN0YXRzLFxuICAgIHR5cGUgVFJlbGF0aW9uU3RhdHMsXG4gICAgdHlwZSBUQXR0cmlidXRlU3RhdHMsXG59IGZyb20gJy4vc3RhdHMubWpzJztcbiJdfQ==
|
package/dist/db/indexes.d.mts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { Pool } from 'pg';
|
|
2
|
-
export type TIndexInfo = {
|
|
3
|
-
index_name: string;
|
|
4
|
-
relation_name: string;
|
|
5
|
-
is_unique: boolean;
|
|
6
|
-
is_primary: boolean;
|
|
7
|
-
is_exclusion: boolean;
|
|
8
|
-
is_partial: boolean;
|
|
9
|
-
partial_predicate: string | null;
|
|
10
|
-
attributes: string[];
|
|
11
|
-
exclusion_operators: string[] | null;
|
|
12
|
-
definition: string;
|
|
13
|
-
comment: string | null;
|
|
14
|
-
};
|
|
15
|
-
export declare const fetchRelationIndexes: (pool: Pool, relationName: string) => Promise<TIndexInfo[]>;
|
|
16
|
-
//# sourceMappingURL=indexes.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"indexes.d.mts","sourceRoot":"./src/","sources":["db/indexes.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,UAAU,GAAG;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,mBAAmB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC7B,MAAM,IAAI,EACV,cAAc,MAAM,KACrB,OAAO,CAAC,UAAU,EAAE,CAwCtB,CAAC"}
|