@intecoag/inteco-cli 1.11.8 → 1.12.0-beta.2
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 +13 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +158 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/adbBridge.d.ts +2 -0
- package/dist/modules/adbBridge.d.ts.map +1 -0
- package/dist/modules/adbBridge.js +40 -0
- package/dist/modules/adbBridge.js.map +1 -0
- package/dist/modules/adbBridge.test.d.ts +2 -0
- package/dist/modules/adbBridge.test.d.ts.map +1 -0
- package/dist/modules/adbBridge.test.js +39 -0
- package/dist/modules/adbBridge.test.js.map +1 -0
- package/dist/modules/adbIntentSender.d.ts +2 -0
- package/dist/modules/adbIntentSender.d.ts.map +1 -0
- package/dist/modules/adbIntentSender.js +67 -0
- package/dist/modules/adbIntentSender.js.map +1 -0
- package/dist/modules/adbIntentSender.test.d.ts +2 -0
- package/dist/modules/adbIntentSender.test.d.ts.map +1 -0
- package/dist/modules/adbIntentSender.test.js +48 -0
- package/dist/modules/adbIntentSender.test.js.map +1 -0
- package/dist/modules/azureSync.d.ts +16 -0
- package/dist/modules/azureSync.d.ts.map +1 -0
- package/{src → dist}/modules/azureSync.js +55 -136
- package/dist/modules/azureSync.js.map +1 -0
- package/dist/modules/azureSync.test.d.ts +2 -0
- package/dist/modules/azureSync.test.d.ts.map +1 -0
- package/dist/modules/azureSync.test.js +69 -0
- package/dist/modules/azureSync.test.js.map +1 -0
- package/dist/modules/bundleProduct.d.ts +2 -0
- package/dist/modules/bundleProduct.d.ts.map +1 -0
- package/{src → dist}/modules/bundleProduct.js +41 -80
- package/dist/modules/bundleProduct.js.map +1 -0
- package/dist/modules/bundleProduct.test.d.ts +2 -0
- package/dist/modules/bundleProduct.test.d.ts.map +1 -0
- package/dist/modules/bundleProduct.test.js +75 -0
- package/dist/modules/bundleProduct.test.js.map +1 -0
- package/dist/modules/changelog.d.ts +3 -0
- package/dist/modules/changelog.d.ts.map +1 -0
- package/dist/modules/changelog.js +45 -0
- package/dist/modules/changelog.js.map +1 -0
- package/dist/modules/changelog.test.d.ts +2 -0
- package/dist/modules/changelog.test.d.ts.map +1 -0
- package/dist/modules/changelog.test.js +33 -0
- package/dist/modules/changelog.test.js.map +1 -0
- package/dist/modules/configMutation.d.ts +5 -0
- package/dist/modules/configMutation.d.ts.map +1 -0
- package/{src → dist}/modules/configMutation.js +57 -104
- package/dist/modules/configMutation.js.map +1 -0
- package/dist/modules/configMutation.test.d.ts +2 -0
- package/dist/modules/configMutation.test.d.ts.map +1 -0
- package/dist/modules/configMutation.test.js +28 -0
- package/dist/modules/configMutation.test.js.map +1 -0
- package/dist/modules/csvMerger.d.ts +2 -0
- package/dist/modules/csvMerger.d.ts.map +1 -0
- package/dist/modules/csvMerger.js +104 -0
- package/dist/modules/csvMerger.js.map +1 -0
- package/dist/modules/csvMerger.test.d.ts +2 -0
- package/dist/modules/csvMerger.test.d.ts.map +1 -0
- package/dist/modules/csvMerger.test.js +76 -0
- package/dist/modules/csvMerger.test.js.map +1 -0
- package/dist/modules/deleteDB.d.ts +2 -0
- package/dist/modules/deleteDB.d.ts.map +1 -0
- package/dist/modules/deleteDB.js +75 -0
- package/dist/modules/deleteDB.js.map +1 -0
- package/dist/modules/deleteDB.test.d.ts +2 -0
- package/dist/modules/deleteDB.test.d.ts.map +1 -0
- package/dist/modules/deleteDB.test.js +78 -0
- package/dist/modules/deleteDB.test.js.map +1 -0
- package/dist/modules/dumpDB.d.ts +3 -0
- package/dist/modules/dumpDB.d.ts.map +1 -0
- package/{src → dist}/modules/dumpDB.js +64 -89
- package/dist/modules/dumpDB.js.map +1 -0
- package/dist/modules/dumpDB.test.d.ts +2 -0
- package/dist/modules/dumpDB.test.d.ts.map +1 -0
- package/dist/modules/dumpDB.test.js +104 -0
- package/dist/modules/dumpDB.test.js.map +1 -0
- package/dist/modules/dumpTableToCSV.d.ts +4 -0
- package/dist/modules/dumpTableToCSV.d.ts.map +1 -0
- package/dist/modules/dumpTableToCSV.js +135 -0
- package/dist/modules/dumpTableToCSV.js.map +1 -0
- package/dist/modules/dumpTableToCSV.test.d.ts +2 -0
- package/dist/modules/dumpTableToCSV.test.d.ts.map +1 -0
- package/dist/modules/dumpTableToCSV.test.js +15 -0
- package/dist/modules/dumpTableToCSV.test.js.map +1 -0
- package/dist/modules/extdSearch.d.ts +2 -0
- package/dist/modules/extdSearch.d.ts.map +1 -0
- package/{src → dist}/modules/extdSearch.js +60 -60
- package/dist/modules/extdSearch.js.map +1 -0
- package/dist/modules/extdSearch.test.d.ts +2 -0
- package/dist/modules/extdSearch.test.d.ts.map +1 -0
- package/dist/modules/extdSearch.test.js +114 -0
- package/dist/modules/extdSearch.test.js.map +1 -0
- package/dist/modules/githubDeploymentKey.d.ts +3 -0
- package/dist/modules/githubDeploymentKey.d.ts.map +1 -0
- package/dist/modules/githubDeploymentKey.js +241 -0
- package/dist/modules/githubDeploymentKey.js.map +1 -0
- package/dist/modules/githubDeploymentKey.test.d.ts +2 -0
- package/dist/modules/githubDeploymentKey.test.d.ts.map +1 -0
- package/dist/modules/githubDeploymentKey.test.js +50 -0
- package/dist/modules/githubDeploymentKey.test.js.map +1 -0
- package/dist/modules/githubDeploymentKeysList.d.ts +6 -0
- package/dist/modules/githubDeploymentKeysList.d.ts.map +1 -0
- package/dist/modules/githubDeploymentKeysList.js +185 -0
- package/dist/modules/githubDeploymentKeysList.js.map +1 -0
- package/dist/modules/githubDeploymentKeysList.test.d.ts +2 -0
- package/dist/modules/githubDeploymentKeysList.test.d.ts.map +1 -0
- package/dist/modules/githubDeploymentKeysList.test.js +70 -0
- package/dist/modules/githubDeploymentKeysList.test.js.map +1 -0
- package/dist/modules/githubSecurityAdvisories.d.ts +3 -0
- package/dist/modules/githubSecurityAdvisories.d.ts.map +1 -0
- package/dist/modules/githubSecurityAdvisories.js +145 -0
- package/dist/modules/githubSecurityAdvisories.js.map +1 -0
- package/dist/modules/githubSecurityAdvisories.test.d.ts +2 -0
- package/dist/modules/githubSecurityAdvisories.test.d.ts.map +1 -0
- package/dist/modules/githubSecurityAdvisories.test.js +67 -0
- package/dist/modules/githubSecurityAdvisories.test.js.map +1 -0
- package/dist/modules/graphqlSchemaExport.d.ts +2 -0
- package/dist/modules/graphqlSchemaExport.d.ts.map +1 -0
- package/dist/modules/graphqlSchemaExport.js +59 -0
- package/dist/modules/graphqlSchemaExport.js.map +1 -0
- package/dist/modules/graphqlSchemaExport.test.d.ts +2 -0
- package/dist/modules/graphqlSchemaExport.test.d.ts.map +1 -0
- package/dist/modules/graphqlSchemaExport.test.js +61 -0
- package/dist/modules/graphqlSchemaExport.test.js.map +1 -0
- package/dist/modules/importDB.d.ts +2 -0
- package/dist/modules/importDB.d.ts.map +1 -0
- package/{src → dist}/modules/importDB.js +48 -66
- package/dist/modules/importDB.js.map +1 -0
- package/dist/modules/importDB.test.d.ts +2 -0
- package/dist/modules/importDB.test.d.ts.map +1 -0
- package/dist/modules/importDB.test.js +65 -0
- package/dist/modules/importDB.test.js.map +1 -0
- package/dist/modules/rewriteConfig.d.ts +3 -0
- package/dist/modules/rewriteConfig.d.ts.map +1 -0
- package/dist/modules/rewriteConfig.js +75 -0
- package/dist/modules/rewriteConfig.js.map +1 -0
- package/dist/modules/rewriteConfig.test.d.ts +2 -0
- package/dist/modules/rewriteConfig.test.d.ts.map +1 -0
- package/dist/modules/rewriteConfig.test.js +62 -0
- package/dist/modules/rewriteConfig.test.js.map +1 -0
- package/dist/modules/setCLIConfig.d.ts +2 -0
- package/dist/modules/setCLIConfig.d.ts.map +1 -0
- package/dist/modules/setCLIConfig.js +29 -0
- package/dist/modules/setCLIConfig.js.map +1 -0
- package/dist/modules/setCLIConfig.test.d.ts +2 -0
- package/dist/modules/setCLIConfig.test.d.ts.map +1 -0
- package/dist/modules/setCLIConfig.test.js +40 -0
- package/dist/modules/setCLIConfig.test.js.map +1 -0
- package/dist/modules/syncConfig.d.ts +4 -0
- package/dist/modules/syncConfig.d.ts.map +1 -0
- package/{src → dist}/modules/syncConfig.js +76 -129
- package/dist/modules/syncConfig.js.map +1 -0
- package/dist/modules/syncConfig.test.d.ts +2 -0
- package/dist/modules/syncConfig.test.d.ts.map +1 -0
- package/dist/modules/syncConfig.test.js +71 -0
- package/dist/modules/syncConfig.test.js.map +1 -0
- package/dist/modules/t003Rewrite.d.ts +2 -0
- package/dist/modules/t003Rewrite.d.ts.map +1 -0
- package/dist/modules/t003Rewrite.js +53 -0
- package/dist/modules/t003Rewrite.js.map +1 -0
- package/dist/modules/t003Rewrite.test.d.ts +2 -0
- package/dist/modules/t003Rewrite.test.d.ts.map +1 -0
- package/dist/modules/t003Rewrite.test.js +43 -0
- package/dist/modules/t003Rewrite.test.js.map +1 -0
- package/dist/modules/t009Search.d.ts +2 -0
- package/dist/modules/t009Search.d.ts.map +1 -0
- package/dist/modules/t009Search.js +30 -0
- package/dist/modules/t009Search.js.map +1 -0
- package/dist/modules/t009Search.test.d.ts +2 -0
- package/dist/modules/t009Search.test.d.ts.map +1 -0
- package/dist/modules/t009Search.test.js +83 -0
- package/dist/modules/t009Search.test.js.map +1 -0
- package/{src → dist}/ressources/cmds.json +3 -0
- package/dist/utils/azure/azure.d.ts +24 -0
- package/dist/utils/azure/azure.d.ts.map +1 -0
- package/{src → dist}/utils/azure/azure.js +14 -21
- package/dist/utils/azure/azure.js.map +1 -0
- package/dist/utils/azure/azure.test.d.ts +2 -0
- package/dist/utils/azure/azure.test.d.ts.map +1 -0
- package/dist/utils/azure/azure.test.js +98 -0
- package/dist/utils/azure/azure.test.js.map +1 -0
- package/dist/utils/config/config.d.ts +27 -0
- package/dist/utils/config/config.d.ts.map +1 -0
- package/dist/utils/config/config.js +74 -0
- package/dist/utils/config/config.js.map +1 -0
- package/dist/utils/config/config.test.d.ts +2 -0
- package/dist/utils/config/config.test.d.ts.map +1 -0
- package/dist/utils/config/config.test.js +64 -0
- package/dist/utils/config/config.test.js.map +1 -0
- package/dist/utils/db/DB.d.ts +14 -0
- package/dist/utils/db/DB.d.ts.map +1 -0
- package/dist/utils/db/DB.js +61 -0
- package/dist/utils/db/DB.js.map +1 -0
- package/dist/utils/db/DB.test.d.ts +2 -0
- package/dist/utils/db/DB.test.d.ts.map +1 -0
- package/dist/utils/db/DB.test.js +73 -0
- package/dist/utils/db/DB.test.js.map +1 -0
- package/dist/utils/fs/FS.d.ts +15 -0
- package/dist/utils/fs/FS.d.ts.map +1 -0
- package/{src → dist}/utils/fs/FS.js +31 -45
- package/dist/utils/fs/FS.js.map +1 -0
- package/dist/utils/fs/FS.test.d.ts +2 -0
- package/dist/utils/fs/FS.test.d.ts.map +1 -0
- package/dist/utils/fs/FS.test.js +124 -0
- package/dist/utils/fs/FS.test.js.map +1 -0
- package/dist/utils/github/github.d.ts +29 -0
- package/dist/utils/github/github.d.ts.map +1 -0
- package/dist/utils/github/github.js +96 -0
- package/dist/utils/github/github.js.map +1 -0
- package/dist/utils/github/github.test.d.ts +2 -0
- package/dist/utils/github/github.test.d.ts.map +1 -0
- package/dist/utils/github/github.test.js +83 -0
- package/dist/utils/github/github.test.js.map +1 -0
- package/dist/utils/shell/DatabaseShell.d.ts +77 -0
- package/dist/utils/shell/DatabaseShell.d.ts.map +1 -0
- package/{src → dist}/utils/shell/DatabaseShell.js +73 -87
- package/dist/utils/shell/DatabaseShell.js.map +1 -0
- package/dist/utils/shell/DatabaseShell.test.d.ts +2 -0
- package/dist/utils/shell/DatabaseShell.test.d.ts.map +1 -0
- package/dist/utils/shell/DatabaseShell.test.js +78 -0
- package/dist/utils/shell/DatabaseShell.test.js.map +1 -0
- package/dist/utils/shell/DatabaseShellBuilder.d.ts +67 -0
- package/dist/utils/shell/DatabaseShellBuilder.d.ts.map +1 -0
- package/{src → dist}/utils/shell/DatabaseShellBuilder.js +50 -59
- package/dist/utils/shell/DatabaseShellBuilder.js.map +1 -0
- package/dist/utils/shell/DatabaseShellBuilder.test.d.ts +2 -0
- package/dist/utils/shell/DatabaseShellBuilder.test.d.ts.map +1 -0
- package/dist/utils/shell/DatabaseShellBuilder.test.js +55 -0
- package/dist/utils/shell/DatabaseShellBuilder.test.js.map +1 -0
- package/dist/utils/shell/Shell.d.ts +30 -0
- package/dist/utils/shell/Shell.d.ts.map +1 -0
- package/{src → dist}/utils/shell/Shell.js +14 -19
- package/dist/utils/shell/Shell.js.map +1 -0
- package/dist/utils/shell/Shell.test.d.ts +2 -0
- package/dist/utils/shell/Shell.test.d.ts.map +1 -0
- package/dist/utils/shell/Shell.test.js +65 -0
- package/dist/utils/shell/Shell.test.js.map +1 -0
- package/dist/utils/shell/ShellBuilder.d.ts +60 -0
- package/dist/utils/shell/ShellBuilder.d.ts.map +1 -0
- package/{src → dist}/utils/shell/ShellBuilder.js +23 -44
- package/dist/utils/shell/ShellBuilder.js.map +1 -0
- package/dist/utils/shell/ShellBuilder.test.d.ts +2 -0
- package/dist/utils/shell/ShellBuilder.test.d.ts.map +1 -0
- package/dist/utils/shell/ShellBuilder.test.js +39 -0
- package/dist/utils/shell/ShellBuilder.test.js.map +1 -0
- package/package.json +39 -11
- package/.github/dependabot.yml +0 -28
- package/.github/workflows/publish.yml +0 -31
- package/.husky/commit-msg +0 -1
- package/.vscode/settings.json +0 -6
- package/commitlint.config.mjs +0 -4
- package/src/index.js +0 -130
- package/src/modules/adbBridge.js +0 -52
- package/src/modules/adbIntentSender.js +0 -82
- package/src/modules/changelog.js +0 -60
- package/src/modules/csvMerger.js +0 -118
- package/src/modules/deleteDB.js +0 -84
- package/src/modules/dumpTableToCSV.js +0 -154
- package/src/modules/githubDeploymentKey.js +0 -265
- package/src/modules/githubDeploymentKeysList.js +0 -199
- package/src/modules/githubSecurityAdvisories.js +0 -162
- package/src/modules/graphqlSchemaExport.js +0 -61
- package/src/modules/rewriteConfig.js +0 -93
- package/src/modules/setCLIConfig.js +0 -33
- package/src/modules/t003Rewrite.js +0 -64
- package/src/modules/t009Search.js +0 -34
- package/src/utils/config/config.js +0 -70
- package/src/utils/db/DB.js +0 -54
- package/src/utils/github/github.js +0 -102
- /package/{src → dist}/ressources/wegas_p.ico +0 -0
- /package/{src → dist}/utils/config/default.json +0 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
/**
|
|
4
|
+
* Get GitHub authentication token from environment or GitHub CLI
|
|
5
|
+
* @returns {Promise<{token: string, authMethod: string}>} Token and authentication method
|
|
6
|
+
* @throws {Error} If no authentication method is available
|
|
7
|
+
*/
|
|
8
|
+
export async function getGithubToken() {
|
|
9
|
+
let token = null;
|
|
10
|
+
let authMethod = null;
|
|
11
|
+
// 1. Try GITHUB_TOKEN environment variable
|
|
12
|
+
if (process.env.GITHUB_TOKEN) {
|
|
13
|
+
token = process.env.GITHUB_TOKEN;
|
|
14
|
+
authMethod = 'GITHUB_TOKEN (environment variable)';
|
|
15
|
+
}
|
|
16
|
+
// 2. Try GitHub CLI authentication if available
|
|
17
|
+
if (!token) {
|
|
18
|
+
try {
|
|
19
|
+
token = execSync('gh auth token', { encoding: 'utf-8' }).trim();
|
|
20
|
+
authMethod = 'GitHub CLI';
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// GitHub CLI not available or not authenticated
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// 3. If no token found, prompt user to authenticate
|
|
27
|
+
if (!token) {
|
|
28
|
+
console.log(chalk.yellow('No GitHub authentication found. Please authenticate with GitHub CLI:'));
|
|
29
|
+
console.log(chalk.gray(' Run: gh auth login'));
|
|
30
|
+
console.log();
|
|
31
|
+
throw new Error('GitHub authentication required. Please run "gh auth login" or set GITHUB_TOKEN environment variable.');
|
|
32
|
+
}
|
|
33
|
+
if (!authMethod) {
|
|
34
|
+
authMethod = 'unknown';
|
|
35
|
+
}
|
|
36
|
+
return { token, authMethod };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Make a GitHub API fetch request with proper headers and error handling
|
|
40
|
+
* @param {string} url - GitHub API endpoint URL
|
|
41
|
+
* @param {string} token - GitHub authentication token
|
|
42
|
+
* @returns {Promise<Response>} Fetch response
|
|
43
|
+
* @throws {Error} If fetch fails or returns error status
|
|
44
|
+
*/
|
|
45
|
+
export async function fetchGithubAPI(url, token) {
|
|
46
|
+
const res = await fetch(url, {
|
|
47
|
+
headers: {
|
|
48
|
+
'Authorization': `Bearer ${token}`,
|
|
49
|
+
'Accept': 'application/vnd.github+json',
|
|
50
|
+
'X-GitHub-Api-Version': '2022-11-28',
|
|
51
|
+
'User-Agent': 'inteco-cli'
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
if (!res.ok) {
|
|
55
|
+
if (res.status === 404) {
|
|
56
|
+
throw new Error(`404: Resource not found`);
|
|
57
|
+
}
|
|
58
|
+
if (res.status === 401) {
|
|
59
|
+
throw new Error('401: GitHub authentication failed');
|
|
60
|
+
}
|
|
61
|
+
if (res.status === 403) {
|
|
62
|
+
throw new Error('403: Access forbidden (Dependabot alerts may not be enabled)');
|
|
63
|
+
}
|
|
64
|
+
throw new Error(`${res.status}: GitHub API request failed: ${res.statusText}`);
|
|
65
|
+
}
|
|
66
|
+
return res;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Fetch all items from a paginated GitHub API endpoint
|
|
70
|
+
* @param {string} baseUrl - Base GitHub API endpoint URL (without pagination params)
|
|
71
|
+
* @param {string} token - GitHub authentication token
|
|
72
|
+
* @param {number} page - Current page (default: 1)
|
|
73
|
+
* @param {Array} allItems - Accumulated items (default: [])
|
|
74
|
+
* @returns {Promise<Array>} All items from all pages
|
|
75
|
+
*/
|
|
76
|
+
export async function fetchPaginatedGithubAPI(baseUrl, token, page = 1, allItems = []) {
|
|
77
|
+
const url = `${baseUrl}${baseUrl.includes('?') ? '&' : '?'}page=${page}&per_page=100`;
|
|
78
|
+
try {
|
|
79
|
+
const res = await fetchGithubAPI(url, token);
|
|
80
|
+
const items = await res.json();
|
|
81
|
+
if (items.length === 0) {
|
|
82
|
+
return allItems;
|
|
83
|
+
}
|
|
84
|
+
// Recursively fetch all pages
|
|
85
|
+
return fetchPaginatedGithubAPI(baseUrl, token, page + 1, [...allItems, ...items]);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
if (page === 1) {
|
|
89
|
+
// Only throw on first page - error getting initial data
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
// On subsequent pages, return what we have so far
|
|
93
|
+
return allItems;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/utils/github/github.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.test.d.ts","sourceRoot":"","sources":["../../../src/utils/github/github.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
const childProcessMocks = vi.hoisted(() => ({
|
|
3
|
+
execSync: vi.fn()
|
|
4
|
+
}));
|
|
5
|
+
vi.mock("child_process", () => ({
|
|
6
|
+
execSync: childProcessMocks.execSync
|
|
7
|
+
}));
|
|
8
|
+
import { fetchGithubAPI, fetchPaginatedGithubAPI, getGithubToken } from "./github.js";
|
|
9
|
+
function response(overrides) {
|
|
10
|
+
return {
|
|
11
|
+
ok: true,
|
|
12
|
+
status: 200,
|
|
13
|
+
statusText: "OK",
|
|
14
|
+
json: async () => ([]),
|
|
15
|
+
...overrides
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
describe("github helpers", () => {
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
vi.clearAllMocks();
|
|
21
|
+
vi.unstubAllGlobals();
|
|
22
|
+
delete process.env.GITHUB_TOKEN;
|
|
23
|
+
});
|
|
24
|
+
it("uses GITHUB_TOKEN from environment", async () => {
|
|
25
|
+
process.env.GITHUB_TOKEN = "env-token";
|
|
26
|
+
const result = await getGithubToken();
|
|
27
|
+
expect(result).toEqual({
|
|
28
|
+
token: "env-token",
|
|
29
|
+
authMethod: "GITHUB_TOKEN (environment variable)"
|
|
30
|
+
});
|
|
31
|
+
expect(childProcessMocks.execSync).not.toHaveBeenCalled();
|
|
32
|
+
});
|
|
33
|
+
it("falls back to GitHub CLI token", async () => {
|
|
34
|
+
childProcessMocks.execSync.mockReturnValue("cli-token\n");
|
|
35
|
+
const result = await getGithubToken();
|
|
36
|
+
expect(childProcessMocks.execSync).toHaveBeenCalledWith("gh auth token", { encoding: "utf-8" });
|
|
37
|
+
expect(result).toEqual({ token: "cli-token", authMethod: "GitHub CLI" });
|
|
38
|
+
});
|
|
39
|
+
it("throws when no token is available", async () => {
|
|
40
|
+
childProcessMocks.execSync.mockImplementation(() => {
|
|
41
|
+
throw new Error("not authenticated");
|
|
42
|
+
});
|
|
43
|
+
await expect(getGithubToken()).rejects.toThrow("GitHub authentication required");
|
|
44
|
+
});
|
|
45
|
+
it("fetchGithubAPI sends expected headers", async () => {
|
|
46
|
+
const fetchMock = vi.fn().mockResolvedValue(response({}));
|
|
47
|
+
vi.stubGlobal("fetch", fetchMock);
|
|
48
|
+
await fetchGithubAPI("https://api.github.test/repos/a/b", "abc");
|
|
49
|
+
expect(fetchMock).toHaveBeenCalledWith("https://api.github.test/repos/a/b", expect.objectContaining({
|
|
50
|
+
headers: expect.objectContaining({
|
|
51
|
+
Authorization: "Bearer abc",
|
|
52
|
+
Accept: "application/vnd.github+json",
|
|
53
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
54
|
+
"User-Agent": "inteco-cli"
|
|
55
|
+
})
|
|
56
|
+
}));
|
|
57
|
+
});
|
|
58
|
+
it("maps 404 from fetchGithubAPI to explicit message", async () => {
|
|
59
|
+
vi.stubGlobal("fetch", vi.fn().mockResolvedValue(response({ ok: false, status: 404, statusText: "Not Found" })));
|
|
60
|
+
await expect(fetchGithubAPI("https://api.github.test/repos/a/b", "abc")).rejects.toThrow("404: Resource not found");
|
|
61
|
+
});
|
|
62
|
+
it("fetchPaginatedGithubAPI collects all pages", async () => {
|
|
63
|
+
const fetchMock = vi
|
|
64
|
+
.fn()
|
|
65
|
+
.mockResolvedValueOnce(response({ json: async () => [{ id: 1 }, { id: 2 }] }))
|
|
66
|
+
.mockResolvedValueOnce(response({ json: async () => [{ id: 3 }] }))
|
|
67
|
+
.mockResolvedValueOnce(response({ json: async () => [] }));
|
|
68
|
+
vi.stubGlobal("fetch", fetchMock);
|
|
69
|
+
const result = await fetchPaginatedGithubAPI("https://api.github.test/repos/a/b/issues", "abc");
|
|
70
|
+
expect(result).toEqual([{ id: 1 }, { id: 2 }, { id: 3 }]);
|
|
71
|
+
expect(fetchMock).toHaveBeenCalledTimes(3);
|
|
72
|
+
});
|
|
73
|
+
it("returns collected items when a later page fails", async () => {
|
|
74
|
+
const fetchMock = vi
|
|
75
|
+
.fn()
|
|
76
|
+
.mockResolvedValueOnce(response({ json: async () => [{ id: 1 }] }))
|
|
77
|
+
.mockResolvedValueOnce(response({ ok: false, status: 500, statusText: "Boom" }));
|
|
78
|
+
vi.stubGlobal("fetch", fetchMock);
|
|
79
|
+
const result = await fetchPaginatedGithubAPI("https://api.github.test/repos/a/b/issues", "abc");
|
|
80
|
+
expect(result).toEqual([{ id: 1 }]);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=github.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.test.js","sourceRoot":"","sources":["../../../src/utils/github/github.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Shell } from "./Shell.js";
|
|
2
|
+
import { type TableConfig, type TableSource } from "./DatabaseShellBuilder.js";
|
|
3
|
+
export type TableRow = Record<string, unknown> & {
|
|
4
|
+
table: string;
|
|
5
|
+
};
|
|
6
|
+
type EditableColumn = {
|
|
7
|
+
title: string;
|
|
8
|
+
column: string;
|
|
9
|
+
default?: string;
|
|
10
|
+
};
|
|
11
|
+
export declare class DatabaseShell {
|
|
12
|
+
currentTables: string[];
|
|
13
|
+
currentConfig: TableConfig | null;
|
|
14
|
+
db: string | null;
|
|
15
|
+
data: TableRow[];
|
|
16
|
+
tables: TableSource[];
|
|
17
|
+
shell: Shell | null;
|
|
18
|
+
constructor();
|
|
19
|
+
/**
|
|
20
|
+
* Configures the database shell and runs the underlying shell
|
|
21
|
+
*/
|
|
22
|
+
run(): Promise<void>;
|
|
23
|
+
private requireDb;
|
|
24
|
+
/**
|
|
25
|
+
* Searches for a string based on the current shell state and prints the results to the console.
|
|
26
|
+
* @param {string} query The search string
|
|
27
|
+
*/
|
|
28
|
+
executeSearch(query: string): void;
|
|
29
|
+
deleteRow(row: TableRow): Promise<void>;
|
|
30
|
+
insertRow(row: TableRow): Promise<void>;
|
|
31
|
+
updateRow(row: TableRow, whereRow: TableRow): Promise<void>;
|
|
32
|
+
editRow(data: TableRow, columns: EditableColumn[], requiredFields: string[], optionalFields: string[]): Promise<TableRow | null>;
|
|
33
|
+
selectRow(columns: EditableColumn[], requiredColumns: string[]): Promise<TableRow | null>;
|
|
34
|
+
/**
|
|
35
|
+
* Loads the rows from the currently active tables into the shell
|
|
36
|
+
* @private
|
|
37
|
+
*/
|
|
38
|
+
loadData(): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Loads all rows from a table of the currently active database
|
|
41
|
+
* @param {string} table The table name
|
|
42
|
+
* @returns {Promise<any>}
|
|
43
|
+
* @private
|
|
44
|
+
*/
|
|
45
|
+
getTableData(table: string): Promise<Array<Record<string, unknown>>>;
|
|
46
|
+
/**
|
|
47
|
+
* Removes the table name prefix from the individual rows
|
|
48
|
+
* @param {object[]} entries The rows of the table
|
|
49
|
+
* @param {string} tableName The name of the table where the data is from
|
|
50
|
+
* @returns {object[]}
|
|
51
|
+
* @private
|
|
52
|
+
*/
|
|
53
|
+
cleanData(entries: Array<Record<string, unknown>>, tableName: string): TableRow[];
|
|
54
|
+
/**
|
|
55
|
+
* Executes a query on the currently loaded table using fuzzysearch
|
|
56
|
+
* @param {string} query The search query
|
|
57
|
+
* @returns {object[]}
|
|
58
|
+
* @private
|
|
59
|
+
*/
|
|
60
|
+
fuzzySearch(query: string): Array<TableRow & {
|
|
61
|
+
score?: number;
|
|
62
|
+
}>;
|
|
63
|
+
/**
|
|
64
|
+
* Renders a table in the console using the currently active config
|
|
65
|
+
* @param {object[]} tableData The table data to render
|
|
66
|
+
* @private
|
|
67
|
+
*/
|
|
68
|
+
renderTable(tableData: Array<TableRow & {
|
|
69
|
+
score?: number;
|
|
70
|
+
}>): void;
|
|
71
|
+
/**
|
|
72
|
+
* Prompts the user for the database and search type
|
|
73
|
+
*/
|
|
74
|
+
configure(): Promise<void>;
|
|
75
|
+
}
|
|
76
|
+
export {};
|
|
77
|
+
//# sourceMappingURL=DatabaseShell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatabaseShell.d.ts","sourceRoot":"","sources":["../../../src/utils/shell/DatabaseShell.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAMnC,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE/E,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACnE,KAAK,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,qBAAa,aAAa;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;;IA2CpB;;OAEG;IACG,GAAG;IAQT,OAAO,CAAC,SAAS;IAQjB;;;OAGG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5B,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvC,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvC,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3D,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAuBhI,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAyC/F;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAW/B;;;;;OAKG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAK1E;;;;;;OAMG;IACH,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,EAAE;IAajF;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAchE;;;;OAIG;IACH,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAalE;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;CAwBnC"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
-
import { Shell } from "./shell.js";
|
|
3
2
|
import { DB } from "../db/DB.js";
|
|
4
3
|
import fuzzysort from "fuzzysort";
|
|
5
4
|
import CliTable3 from "cli-table3";
|
|
6
5
|
import prompts from "prompts";
|
|
7
|
-
import { TableConfig } from "./DatabaseShellBuilder.js";
|
|
8
|
-
|
|
9
6
|
export class DatabaseShell {
|
|
10
|
-
|
|
7
|
+
currentTables;
|
|
8
|
+
currentConfig;
|
|
9
|
+
db;
|
|
10
|
+
data;
|
|
11
|
+
tables;
|
|
12
|
+
shell;
|
|
11
13
|
constructor() {
|
|
12
14
|
/**
|
|
13
15
|
* The currently active tables to load the data from
|
|
@@ -15,48 +17,50 @@ export class DatabaseShell {
|
|
|
15
17
|
* @private
|
|
16
18
|
*/
|
|
17
19
|
this.currentTables = [];
|
|
18
|
-
|
|
19
20
|
/**
|
|
20
21
|
* The currently active config
|
|
21
22
|
* @type {TableConfig}
|
|
22
23
|
*/
|
|
23
24
|
this.currentConfig = null;
|
|
24
|
-
|
|
25
25
|
/**
|
|
26
26
|
* The active database
|
|
27
27
|
* @type {string}
|
|
28
28
|
* @private
|
|
29
29
|
*/
|
|
30
30
|
this.db = null;
|
|
31
|
-
|
|
32
31
|
/**
|
|
33
32
|
* The cached data of the active table
|
|
34
33
|
* @type {object[]}
|
|
35
34
|
* @private
|
|
36
35
|
*/
|
|
37
36
|
this.data = [];
|
|
38
|
-
|
|
39
37
|
/**
|
|
40
38
|
* The tables the user can select to use
|
|
41
39
|
* @type {object[]}
|
|
42
40
|
*/
|
|
43
41
|
this.tables = [];
|
|
44
|
-
|
|
45
42
|
/**
|
|
46
43
|
* The underlying shell to handle user input
|
|
47
44
|
* @type {Shell}
|
|
48
45
|
*/
|
|
49
46
|
this.shell = null;
|
|
50
47
|
}
|
|
51
|
-
|
|
52
48
|
/**
|
|
53
49
|
* Configures the database shell and runs the underlying shell
|
|
54
50
|
*/
|
|
55
51
|
async run() {
|
|
56
52
|
await this.configure();
|
|
53
|
+
if (!this.shell) {
|
|
54
|
+
throw new Error("Shell is not initialized");
|
|
55
|
+
}
|
|
57
56
|
await this.shell.run();
|
|
58
57
|
}
|
|
59
|
-
|
|
58
|
+
requireDb() {
|
|
59
|
+
if (!this.db) {
|
|
60
|
+
throw new Error("Database is not configured");
|
|
61
|
+
}
|
|
62
|
+
return this.db;
|
|
63
|
+
}
|
|
60
64
|
/**
|
|
61
65
|
* Searches for a string based on the current shell state and prints the results to the console.
|
|
62
66
|
* @param {string} query The search string
|
|
@@ -65,111 +69,95 @@ export class DatabaseShell {
|
|
|
65
69
|
const results = this.fuzzySearch(query);
|
|
66
70
|
this.renderTable(results);
|
|
67
71
|
}
|
|
68
|
-
|
|
69
72
|
async deleteRow(row) {
|
|
70
73
|
const table = row.table;
|
|
71
|
-
const where = Object.entries(row).filter(([k
|
|
74
|
+
const where = Object.entries(row).filter(([k]) => k !== "table").map(([k, v]) => `\`${table}_${k}\`='${String(v).replaceAll("'", "\\'")}'`).join(' AND ');
|
|
72
75
|
const sql = `DELETE FROM \`${table}\` WHERE ${where}`;
|
|
73
|
-
await DB.executeQueryOnDB(sql, this.
|
|
76
|
+
await DB.executeQueryOnDB(sql, this.requireDb());
|
|
74
77
|
await this.loadData();
|
|
75
78
|
}
|
|
76
|
-
|
|
77
79
|
async insertRow(row) {
|
|
78
80
|
const table = row.table;
|
|
79
|
-
const kvPairs = Object.entries(row).filter(([k
|
|
80
|
-
const sql = `INSERT INTO \`${table}\` (${kvPairs.map(([k
|
|
81
|
-
await DB.executeQueryOnDB(sql, this.
|
|
81
|
+
const kvPairs = Object.entries(row).filter(([k]) => k !== "table");
|
|
82
|
+
const sql = `INSERT INTO \`${table}\` (${kvPairs.map(([k]) => `\`${table}_${k}\``).join(', ')}) VALUES (${kvPairs.map(([, v]) => `'${String(v).replaceAll("'", "\\'")}'`)});`;
|
|
83
|
+
await DB.executeQueryOnDB(sql, this.requireDb());
|
|
82
84
|
await this.loadData();
|
|
83
85
|
}
|
|
84
|
-
|
|
85
86
|
async updateRow(row, whereRow) {
|
|
86
87
|
const table = whereRow.table;
|
|
87
|
-
const set = Object.entries(row).filter(([k
|
|
88
|
-
const where = Object.entries(whereRow).filter(([k
|
|
88
|
+
const set = Object.entries(row).filter(([k]) => k !== "table").map(([k, v]) => `\`${table}_${k}\`='${String(v).replaceAll("'", "\\'")}'`).join(', ');
|
|
89
|
+
const where = Object.entries(whereRow).filter(([k]) => k !== "table").map(([k, v]) => `\`${table}_${k}\`='${String(v).replaceAll("'", "\\'")}'`).join(' AND ');
|
|
89
90
|
const sql = `UPDATE \`${table}\` SET ${set} WHERE ${where};`;
|
|
90
|
-
await DB.executeQueryOnDB(sql, this.
|
|
91
|
+
await DB.executeQueryOnDB(sql, this.requireDb());
|
|
91
92
|
await this.loadData();
|
|
92
93
|
}
|
|
93
|
-
|
|
94
94
|
async editRow(data, columns, requiredFields, optionalFields) {
|
|
95
95
|
let cancelled = false;
|
|
96
96
|
const questions = [...requiredFields, ...optionalFields]
|
|
97
|
-
.filter(f => Object.hasOwn(data, f))
|
|
98
|
-
.map(f => ({
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
97
|
+
.filter((f) => Object.hasOwn(data, f))
|
|
98
|
+
.map((f) => ({
|
|
99
|
+
type: 'text',
|
|
100
|
+
message: columns.find((c) => c.column === f)?.title ?? f,
|
|
101
|
+
name: f,
|
|
102
|
+
initial: String(columns.find((c) => c.column === f)?.default ?? data[f] ?? "")
|
|
103
|
+
}));
|
|
104
104
|
const responses = await prompts(questions, { onCancel: () => { cancelled = true; return false; } });
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
105
|
+
if (cancelled)
|
|
106
|
+
return null;
|
|
108
107
|
const newData = {
|
|
109
108
|
...data,
|
|
110
109
|
...responses
|
|
111
110
|
};
|
|
112
|
-
|
|
113
|
-
|
|
114
111
|
return newData;
|
|
115
112
|
}
|
|
116
|
-
|
|
117
113
|
async selectRow(columns, requiredColumns) {
|
|
118
114
|
let cancelled = false;
|
|
119
|
-
const questions = requiredColumns.map(f => ({
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
115
|
+
const questions = requiredColumns.map((f) => ({
|
|
116
|
+
type: 'text',
|
|
117
|
+
message: columns.find((c) => c.column === f)?.title ?? f,
|
|
118
|
+
name: f,
|
|
119
|
+
initial: columns.find((c) => c.column === f)?.default
|
|
120
|
+
}));
|
|
126
121
|
const responses = await prompts(questions, { onCancel: () => { cancelled = true; return false; } });
|
|
127
|
-
if(cancelled)
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
if(results.length == 0) {
|
|
122
|
+
if (cancelled)
|
|
123
|
+
return null;
|
|
124
|
+
const results = this.data.filter((d) => Object.entries(responses).every(([k, v]) => d[k] == v));
|
|
125
|
+
if (results.length == 0) {
|
|
131
126
|
console.log(chalk.red("No results found."));
|
|
132
127
|
return null;
|
|
133
128
|
}
|
|
134
|
-
|
|
135
|
-
if(results.length > 1) {
|
|
129
|
+
if (results.length > 1) {
|
|
136
130
|
console.log(chalk.red("Multiple results found. Please select one from the list..."));
|
|
137
131
|
const selection = await prompts({
|
|
138
132
|
type: 'autocomplete',
|
|
139
|
-
choices: results.map(r => ({
|
|
133
|
+
choices: results.map((r) => ({
|
|
140
134
|
title: Object.entries(r)
|
|
141
|
-
.filter(([k
|
|
142
|
-
.map(([k, v]) => `${k === "table" ? "Table" : columns.find(c => c.column === k)
|
|
135
|
+
.filter(([k]) => k === "table" || columns.some((c) => c.column === k))
|
|
136
|
+
.map(([k, v]) => `${k === "table" ? "Table" : columns.find((c) => c.column === k)?.title ?? k}: ${v}`)
|
|
143
137
|
.join(", "),
|
|
144
138
|
value: r
|
|
145
139
|
})),
|
|
146
140
|
message: "Select Row",
|
|
147
141
|
name: 'result'
|
|
148
142
|
}, { onCancel: () => { cancelled = true; return false; } });
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
return selection.result;
|
|
143
|
+
if (cancelled)
|
|
144
|
+
return null;
|
|
145
|
+
return selection.result ?? null;
|
|
153
146
|
}
|
|
154
|
-
|
|
155
|
-
return results[0];
|
|
147
|
+
return results[0] ?? null;
|
|
156
148
|
}
|
|
157
|
-
|
|
158
149
|
/**
|
|
159
150
|
* Loads the rows from the currently active tables into the shell
|
|
160
151
|
* @private
|
|
161
152
|
*/
|
|
162
153
|
async loadData() {
|
|
163
154
|
const data = [];
|
|
164
|
-
|
|
165
|
-
for(let i = 0; i < this.currentTables.length; i++) {
|
|
155
|
+
for (let i = 0; i < this.currentTables.length; i++) {
|
|
166
156
|
const tableData = await this.getTableData(this.currentTables[i]);
|
|
167
157
|
data.push(...this.cleanData(tableData, this.currentTables[i]));
|
|
168
158
|
}
|
|
169
|
-
|
|
170
159
|
this.data = data;
|
|
171
160
|
}
|
|
172
|
-
|
|
173
161
|
/**
|
|
174
162
|
* Loads all rows from a table of the currently active database
|
|
175
163
|
* @param {string} table The table name
|
|
@@ -178,9 +166,8 @@ export class DatabaseShell {
|
|
|
178
166
|
*/
|
|
179
167
|
async getTableData(table) {
|
|
180
168
|
const query = `SELECT * FROM ${table};`;
|
|
181
|
-
return await DB.executeQueryOnDB(query, this.
|
|
169
|
+
return await DB.executeQueryOnDB(query, this.requireDb());
|
|
182
170
|
}
|
|
183
|
-
|
|
184
171
|
/**
|
|
185
172
|
* Removes the table name prefix from the individual rows
|
|
186
173
|
* @param {object[]} entries The rows of the table
|
|
@@ -189,18 +176,14 @@ export class DatabaseShell {
|
|
|
189
176
|
* @private
|
|
190
177
|
*/
|
|
191
178
|
cleanData(entries, tableName) {
|
|
192
|
-
return entries.map(entry => {
|
|
193
|
-
const stripped = Object.fromEntries(
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
])
|
|
198
|
-
);
|
|
199
|
-
|
|
179
|
+
return entries.map((entry) => {
|
|
180
|
+
const stripped = Object.fromEntries(Object.entries(entry).map(([k, v]) => [
|
|
181
|
+
k.replace(new RegExp(`^${tableName}_`), ''),
|
|
182
|
+
v
|
|
183
|
+
]));
|
|
200
184
|
return { ...stripped, table: tableName };
|
|
201
185
|
});
|
|
202
186
|
}
|
|
203
|
-
|
|
204
187
|
/**
|
|
205
188
|
* Executes a query on the currently loaded table using fuzzysearch
|
|
206
189
|
* @param {string} query The search query
|
|
@@ -208,53 +191,56 @@ export class DatabaseShell {
|
|
|
208
191
|
* @private
|
|
209
192
|
*/
|
|
210
193
|
fuzzySearch(query) {
|
|
211
|
-
if(!query)
|
|
212
|
-
|
|
194
|
+
if (!query)
|
|
195
|
+
return this.data.slice(0, 1000);
|
|
196
|
+
if (!this.currentConfig) {
|
|
197
|
+
return this.data.slice(0, 1000);
|
|
198
|
+
}
|
|
213
199
|
return fuzzysort.go(query, this.data, {
|
|
214
200
|
keys: this.currentConfig.searchKeys,
|
|
215
201
|
limit: 1000,
|
|
216
202
|
threshold: this.currentConfig.threshold
|
|
217
|
-
}).map(r => ({ ...r.obj, score: r.score }));
|
|
203
|
+
}).map((r) => ({ ...r.obj, score: r.score }));
|
|
218
204
|
}
|
|
219
|
-
|
|
220
205
|
/**
|
|
221
206
|
* Renders a table in the console using the currently active config
|
|
222
207
|
* @param {object[]} tableData The table data to render
|
|
223
208
|
* @private
|
|
224
209
|
*/
|
|
225
210
|
renderTable(tableData) {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
211
|
+
if (!this.currentConfig) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const currentConfig = this.currentConfig;
|
|
215
|
+
const table = new CliTable3({ head: currentConfig.tableHeader });
|
|
216
|
+
tableData.forEach((row) => {
|
|
217
|
+
table.push(currentConfig.tableFormatter(row));
|
|
229
218
|
});
|
|
230
219
|
console.log(table.toString());
|
|
231
220
|
}
|
|
232
|
-
|
|
233
221
|
/**
|
|
234
222
|
* Prompts the user for the database and search type
|
|
235
223
|
*/
|
|
236
224
|
async configure() {
|
|
237
225
|
console.log();
|
|
238
226
|
const databaseNames = await DB.getDatabaseNames();
|
|
239
|
-
|
|
240
227
|
const results = await prompts([
|
|
241
228
|
{
|
|
242
229
|
type: 'autocomplete',
|
|
243
230
|
name: 'dbName',
|
|
244
231
|
message: 'DB-Name?',
|
|
245
|
-
choices: databaseNames.map(db => ({ title: db.name }))
|
|
232
|
+
choices: databaseNames.map((db) => ({ title: db.name }))
|
|
246
233
|
},
|
|
247
234
|
{
|
|
248
235
|
type: 'select',
|
|
249
236
|
name: 'tables',
|
|
250
237
|
message: 'Search-Type?',
|
|
251
|
-
choices: this.tables.map(t => ({ title: t.name, value: t.tables }))
|
|
238
|
+
choices: this.tables.map((t) => ({ title: t.name, value: t.tables }))
|
|
252
239
|
}
|
|
253
240
|
]);
|
|
254
|
-
|
|
255
241
|
this.db = results.dbName;
|
|
256
242
|
this.currentTables = results.tables;
|
|
257
|
-
|
|
258
243
|
await this.loadData();
|
|
259
244
|
}
|
|
260
245
|
}
|
|
246
|
+
//# sourceMappingURL=DatabaseShell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatabaseShell.js","sourceRoot":"","sources":["../../../src/utils/shell/DatabaseShell.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatabaseShell.test.d.ts","sourceRoot":"","sources":["../../../src/utils/shell/DatabaseShell.test.ts"],"names":[],"mappings":""}
|