@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,145 @@
|
|
|
1
|
+
import prompts from 'prompts';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import Table from 'cli-table3';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import { getGithubToken, fetchPaginatedGithubAPI, fetchGithubAPI } from '../utils/github/github.js';
|
|
6
|
+
async function githubSecurityAdvisories() {
|
|
7
|
+
console.log();
|
|
8
|
+
// Get GitHub authentication token
|
|
9
|
+
let token = "";
|
|
10
|
+
let authMethod = "";
|
|
11
|
+
try {
|
|
12
|
+
({ token, authMethod } = await getGithubToken());
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
16
|
+
console.log();
|
|
17
|
+
console.error(chalk.red(`x ${message}`));
|
|
18
|
+
console.log(chalk.yellow('\nAuthentication setup:'));
|
|
19
|
+
console.log(chalk.gray(' Option 1: Install GitHub CLI and run: gh auth login'));
|
|
20
|
+
console.log(chalk.gray(' Option 2: Set GITHUB_TOKEN environment variable'));
|
|
21
|
+
console.log();
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
console.log(chalk.green(`Authenticated via: ${authMethod}`));
|
|
25
|
+
console.log();
|
|
26
|
+
const responses = await prompts([
|
|
27
|
+
{
|
|
28
|
+
type: 'text',
|
|
29
|
+
name: 'organization',
|
|
30
|
+
message: 'GitHub Organization Name?',
|
|
31
|
+
initial: 'intecoag',
|
|
32
|
+
validate: (value) => value.length > 0 || 'Organization name is required'
|
|
33
|
+
}
|
|
34
|
+
], {
|
|
35
|
+
onCancel: () => {
|
|
36
|
+
console.log();
|
|
37
|
+
console.log(chalk.red('Cancelled GitHub Security Advisories check!'));
|
|
38
|
+
console.log();
|
|
39
|
+
process.exit(0);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
const { organization } = responses;
|
|
43
|
+
const spinner = ora('Fetching repositories...').start();
|
|
44
|
+
try {
|
|
45
|
+
// Fetch all repositories for the organization
|
|
46
|
+
const baseUrl = `https://api.github.com/orgs/${organization}/repos`;
|
|
47
|
+
const repos = await fetchPaginatedGithubAPI(baseUrl, token);
|
|
48
|
+
if (repos.length === 0) {
|
|
49
|
+
spinner.warn(`No repositories found in organization "${organization}"`);
|
|
50
|
+
console.log();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
spinner.text = `Found ${repos.length} repositories. Checking security advisories...`;
|
|
54
|
+
// Check security advisories for each repo
|
|
55
|
+
const results = [];
|
|
56
|
+
for (let i = 0; i < repos.length; i++) {
|
|
57
|
+
const repo = repos[i];
|
|
58
|
+
spinner.text = `Checking security advisories... [${i + 1}/${repos.length}] ${repo.name}`;
|
|
59
|
+
const advisories = await fetchSecurityAdvisories(organization, repo.name, token);
|
|
60
|
+
if (advisories.length > 0) {
|
|
61
|
+
results.push({
|
|
62
|
+
repository: repo.name,
|
|
63
|
+
advisoryCount: advisories.length,
|
|
64
|
+
url: repo.html_url
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
spinner.succeed('Security advisories check completed!');
|
|
69
|
+
console.log();
|
|
70
|
+
if (results.length === 0) {
|
|
71
|
+
console.log(chalk.green.bold('No security advisories found in any repositories.'));
|
|
72
|
+
console.log();
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
// Sort by advisory count (descending)
|
|
76
|
+
results.sort((a, b) => b.advisoryCount - a.advisoryCount);
|
|
77
|
+
// Display results in a table
|
|
78
|
+
const table = new Table({
|
|
79
|
+
head: [
|
|
80
|
+
chalk.bold.cyan('Repository'),
|
|
81
|
+
chalk.bold.cyan('Advisories'),
|
|
82
|
+
chalk.bold.cyan('URL')
|
|
83
|
+
],
|
|
84
|
+
style: {
|
|
85
|
+
head: [],
|
|
86
|
+
border: ['cyan']
|
|
87
|
+
},
|
|
88
|
+
colWidths: [40, 15, 60],
|
|
89
|
+
wordWrap: true
|
|
90
|
+
});
|
|
91
|
+
for (const result of results) {
|
|
92
|
+
const advisoryColor = chalk.red;
|
|
93
|
+
table.push([
|
|
94
|
+
result.repository,
|
|
95
|
+
advisoryColor.bold(result.advisoryCount.toString()),
|
|
96
|
+
chalk.blue.underline(result.url)
|
|
97
|
+
]);
|
|
98
|
+
}
|
|
99
|
+
console.log(table.toString());
|
|
100
|
+
console.log();
|
|
101
|
+
console.log(chalk.yellow.bold(`Summary: ${results.length} repository/repositories with open security advisories`));
|
|
102
|
+
console.log();
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
106
|
+
console.log();
|
|
107
|
+
spinner.fail('Error checking security advisories');
|
|
108
|
+
if (message.startsWith('401')) {
|
|
109
|
+
console.error(chalk.red(`x ${message}`));
|
|
110
|
+
console.log(chalk.yellow('\nAuthentication setup:'));
|
|
111
|
+
console.log(chalk.gray(' Option 1: Install GitHub CLI and run: gh auth login'));
|
|
112
|
+
console.log(chalk.gray(' Option 2: Set GITHUB_TOKEN environment variable'));
|
|
113
|
+
}
|
|
114
|
+
else if (message.startsWith('404')) {
|
|
115
|
+
console.error(chalk.red(`x ${message} - Organization or repository not found`));
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
console.error(chalk.red(`Error: ${message}`));
|
|
119
|
+
}
|
|
120
|
+
console.log();
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async function fetchSecurityAdvisories(organization, repository, token) {
|
|
125
|
+
const url = `https://api.github.com/repos/${organization}/${repository}/dependabot/alerts`;
|
|
126
|
+
try {
|
|
127
|
+
const res = await fetchGithubAPI(url, token);
|
|
128
|
+
const alerts = await res.json();
|
|
129
|
+
// Filter for open and unresolved alerts
|
|
130
|
+
const openAlerts = Array.isArray(alerts) ? alerts.filter((alert) => alert.state === 'open') : [];
|
|
131
|
+
return openAlerts;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
135
|
+
// If the endpoint is not available or the repo is not accessible, return empty array
|
|
136
|
+
// 404: Resource not found (Dependabot disabled)
|
|
137
|
+
// 403: Access forbidden (Dependabot disabled or insufficient permissions)
|
|
138
|
+
if (message.startsWith('404') || message.startsWith('403')) {
|
|
139
|
+
return [];
|
|
140
|
+
}
|
|
141
|
+
throw error;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
export default githubSecurityAdvisories;
|
|
145
|
+
//# sourceMappingURL=githubSecurityAdvisories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubSecurityAdvisories.js","sourceRoot":"","sources":["../../src/modules/githubSecurityAdvisories.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubSecurityAdvisories.test.d.ts","sourceRoot":"","sources":["../../src/modules/githubSecurityAdvisories.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
const mocks = vi.hoisted(() => {
|
|
3
|
+
const spinner = {
|
|
4
|
+
text: "",
|
|
5
|
+
start: vi.fn(),
|
|
6
|
+
warn: vi.fn(),
|
|
7
|
+
fail: vi.fn(),
|
|
8
|
+
succeed: vi.fn()
|
|
9
|
+
};
|
|
10
|
+
spinner.start.mockReturnValue(spinner);
|
|
11
|
+
class TableMock {
|
|
12
|
+
rows = [];
|
|
13
|
+
push(row) {
|
|
14
|
+
this.rows.push(row);
|
|
15
|
+
}
|
|
16
|
+
toString() {
|
|
17
|
+
return `rows:${this.rows.length}`;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
prompts: vi.fn(),
|
|
22
|
+
ora: vi.fn(() => spinner),
|
|
23
|
+
getGithubToken: vi.fn(),
|
|
24
|
+
fetchPaginatedGithubAPI: vi.fn(),
|
|
25
|
+
fetchGithubAPI: vi.fn(),
|
|
26
|
+
spinner,
|
|
27
|
+
TableMock
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
vi.mock("prompts", () => ({ default: mocks.prompts }));
|
|
31
|
+
vi.mock("ora", () => ({ default: mocks.ora }));
|
|
32
|
+
vi.mock("cli-table3", () => ({ default: mocks.TableMock }));
|
|
33
|
+
vi.mock("../utils/github/github.js", () => ({
|
|
34
|
+
getGithubToken: mocks.getGithubToken,
|
|
35
|
+
fetchPaginatedGithubAPI: mocks.fetchPaginatedGithubAPI,
|
|
36
|
+
fetchGithubAPI: mocks.fetchGithubAPI
|
|
37
|
+
}));
|
|
38
|
+
import githubSecurityAdvisories from "./githubSecurityAdvisories.js";
|
|
39
|
+
describe("githubSecurityAdvisories", () => {
|
|
40
|
+
beforeEach(() => {
|
|
41
|
+
vi.clearAllMocks();
|
|
42
|
+
mocks.spinner.start.mockReturnValue(mocks.spinner);
|
|
43
|
+
mocks.getGithubToken.mockResolvedValue({ token: "t", authMethod: "env" });
|
|
44
|
+
mocks.prompts.mockResolvedValue({ organization: "intecoag" });
|
|
45
|
+
});
|
|
46
|
+
it("warns when no repositories are found", async () => {
|
|
47
|
+
mocks.fetchPaginatedGithubAPI.mockResolvedValue([]);
|
|
48
|
+
await githubSecurityAdvisories();
|
|
49
|
+
expect(mocks.spinner.warn).toHaveBeenCalledWith('No repositories found in organization "intecoag"');
|
|
50
|
+
});
|
|
51
|
+
it("shows successful summary for repos with open advisories", async () => {
|
|
52
|
+
const logSpy = vi.spyOn(console, "log").mockImplementation(() => undefined);
|
|
53
|
+
mocks.fetchPaginatedGithubAPI.mockResolvedValue([
|
|
54
|
+
{ name: "repo1", html_url: "https://g/repo1" },
|
|
55
|
+
{ name: "repo2", html_url: "https://g/repo2" }
|
|
56
|
+
]);
|
|
57
|
+
mocks.fetchGithubAPI
|
|
58
|
+
.mockResolvedValueOnce({ json: async () => [{ state: "open" }, { state: "closed" }] })
|
|
59
|
+
.mockResolvedValueOnce({ json: async () => [{ state: "open" }, { state: "open" }] });
|
|
60
|
+
await githubSecurityAdvisories();
|
|
61
|
+
expect(mocks.spinner.succeed).toHaveBeenCalledWith("Security advisories check completed!");
|
|
62
|
+
const out = logSpy.mock.calls.map((c) => String(c[0] ?? "")).join("\n");
|
|
63
|
+
expect(out).toContain("rows:2");
|
|
64
|
+
expect(out).toContain("Summary: 2 repository/repositories with open security advisories");
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=githubSecurityAdvisories.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubSecurityAdvisories.test.js","sourceRoot":"","sources":["../../src/modules/githubSecurityAdvisories.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphqlSchemaExport.d.ts","sourceRoot":"","sources":["../../src/modules/graphqlSchemaExport.ts"],"names":[],"mappings":"AAUA,wBAA8B,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4DjE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import prompts from "prompts";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { buildClientSchema, getIntrospectionQuery, printSchema } from "graphql";
|
|
4
|
+
import { writeFileSync } from "fs";
|
|
5
|
+
export default async function qraphqlSchemaExport() {
|
|
6
|
+
console.log();
|
|
7
|
+
let success = true;
|
|
8
|
+
const responses = await prompts([{
|
|
9
|
+
type: 'text',
|
|
10
|
+
name: 'url',
|
|
11
|
+
message: 'URL?',
|
|
12
|
+
initial: "http://localhost:8080/graphql"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
type: 'text',
|
|
16
|
+
name: 'token',
|
|
17
|
+
message: 'AUTH-Token?'
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
type: 'text',
|
|
21
|
+
name: 'file',
|
|
22
|
+
message: 'File-Name?',
|
|
23
|
+
initial: 'schema.graphqls'
|
|
24
|
+
}], {
|
|
25
|
+
onCancel: () => {
|
|
26
|
+
console.log();
|
|
27
|
+
console.log(chalk.red("Cancelled GraphQL-Schema-Export!"));
|
|
28
|
+
console.log();
|
|
29
|
+
success = false;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
if (success) {
|
|
33
|
+
console.log();
|
|
34
|
+
try {
|
|
35
|
+
const introspectionResult = await fetch(responses.url, {
|
|
36
|
+
method: "POST",
|
|
37
|
+
headers: {
|
|
38
|
+
"Content-Type": "application/json",
|
|
39
|
+
"Accept": "application/json",
|
|
40
|
+
"Authorization": "Bearer " + responses.token
|
|
41
|
+
},
|
|
42
|
+
body: JSON.stringify({ query: getIntrospectionQuery() })
|
|
43
|
+
}).then((res) => res.json());
|
|
44
|
+
if (!introspectionResult.data) {
|
|
45
|
+
throw new Error("No introspection data returned");
|
|
46
|
+
}
|
|
47
|
+
const schema = buildClientSchema(introspectionResult.data);
|
|
48
|
+
writeFileSync(responses.file, printSchema(schema));
|
|
49
|
+
console.log(chalk.green("Schema loaded: " + responses.file));
|
|
50
|
+
console.log();
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
const errorMessage = e instanceof Error ? e.message : String(e);
|
|
54
|
+
console.log(chalk.red("Error loading schema: " + errorMessage));
|
|
55
|
+
console.log();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=graphqlSchemaExport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphqlSchemaExport.js","sourceRoot":"","sources":["../../src/modules/graphqlSchemaExport.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAOnC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,mBAAmB;IAC7C,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,CAAC;YAC7B,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,+BAA+B;SAC3C;QACD;YACI,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,aAAa;SACzB;QACD;YACI,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,iBAAiB;SAC7B,CAAC,EAAE;QACA,QAAQ,EAAE,GAAG,EAAE;YACX,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAA;YAC1D,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAO,GAAG,KAAK,CAAA;QACnB,CAAC;KACJ,CAAC,CAAA;IAEF,IAAG,OAAO,EAAC,CAAC;QACR,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,IAAI,CAAC;YACD,MAAM,mBAAmB,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;gBACnD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;oBAClC,QAAQ,EAAE,kBAAkB;oBAC5B,eAAe,EAAE,SAAS,GAAC,SAAS,CAAC,KAAK;iBAC7C;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,KAAK,EAAE,qBAAqB,EAAE,EAAC,CAAC;aACzD,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAA0B,CAAC;YAEtD,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,IAA+C,CAAC,CAAA;YAGrG,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,GAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;YAC1D,OAAO,CAAC,GAAG,EAAE,CAAC;QAClB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,YAAY,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,GAAC,YAAY,CAAC,CAAC,CAAA;YAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;QAClB,CAAC;IACL,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphqlSchemaExport.test.d.ts","sourceRoot":"","sources":["../../src/modules/graphqlSchemaExport.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
const mocks = vi.hoisted(() => ({
|
|
3
|
+
prompts: vi.fn(),
|
|
4
|
+
buildClientSchema: vi.fn(),
|
|
5
|
+
getIntrospectionQuery: vi.fn(),
|
|
6
|
+
printSchema: vi.fn(),
|
|
7
|
+
writeFileSync: vi.fn()
|
|
8
|
+
}));
|
|
9
|
+
vi.mock("prompts", () => ({ default: mocks.prompts }));
|
|
10
|
+
vi.mock("graphql", () => ({
|
|
11
|
+
buildClientSchema: mocks.buildClientSchema,
|
|
12
|
+
getIntrospectionQuery: mocks.getIntrospectionQuery,
|
|
13
|
+
printSchema: mocks.printSchema
|
|
14
|
+
}));
|
|
15
|
+
vi.mock("fs", () => ({ writeFileSync: mocks.writeFileSync }));
|
|
16
|
+
import graphqlSchemaExport from "./graphqlSchemaExport.js";
|
|
17
|
+
describe("graphqlSchemaExport", () => {
|
|
18
|
+
beforeEach(() => {
|
|
19
|
+
vi.clearAllMocks();
|
|
20
|
+
vi.unstubAllGlobals();
|
|
21
|
+
mocks.getIntrospectionQuery.mockReturnValue("{__schema{types{name}}}");
|
|
22
|
+
mocks.buildClientSchema.mockReturnValue({ kind: "schema" });
|
|
23
|
+
mocks.printSchema.mockReturnValue("type Query { ping: String }");
|
|
24
|
+
});
|
|
25
|
+
it("writes schema file on successful introspection", async () => {
|
|
26
|
+
mocks.prompts.mockResolvedValue({
|
|
27
|
+
url: "http://localhost/graphql",
|
|
28
|
+
token: "abc",
|
|
29
|
+
file: "schema.graphqls"
|
|
30
|
+
});
|
|
31
|
+
vi.stubGlobal("fetch", vi.fn().mockResolvedValue({
|
|
32
|
+
json: async () => ({ data: { __schema: {} } })
|
|
33
|
+
}));
|
|
34
|
+
await graphqlSchemaExport();
|
|
35
|
+
expect(mocks.buildClientSchema).toHaveBeenCalled();
|
|
36
|
+
expect(mocks.writeFileSync).toHaveBeenCalledWith("schema.graphqls", "type Query { ping: String }");
|
|
37
|
+
});
|
|
38
|
+
it("skips export when prompt is cancelled", async () => {
|
|
39
|
+
mocks.prompts.mockImplementation(async (_questions, options) => {
|
|
40
|
+
options?.onCancel?.();
|
|
41
|
+
return {};
|
|
42
|
+
});
|
|
43
|
+
await graphqlSchemaExport();
|
|
44
|
+
expect(mocks.writeFileSync).not.toHaveBeenCalled();
|
|
45
|
+
});
|
|
46
|
+
it("handles missing introspection data", async () => {
|
|
47
|
+
const logSpy = vi.spyOn(console, "log").mockImplementation(() => undefined);
|
|
48
|
+
mocks.prompts.mockResolvedValue({
|
|
49
|
+
url: "http://localhost/graphql",
|
|
50
|
+
token: "abc",
|
|
51
|
+
file: "schema.graphqls"
|
|
52
|
+
});
|
|
53
|
+
vi.stubGlobal("fetch", vi.fn().mockResolvedValue({
|
|
54
|
+
json: async () => ({ errors: ["nope"] })
|
|
55
|
+
}));
|
|
56
|
+
await graphqlSchemaExport();
|
|
57
|
+
expect(mocks.writeFileSync).not.toHaveBeenCalled();
|
|
58
|
+
expect(logSpy.mock.calls.map((c) => String(c[0] ?? "")).join("\n")).toContain("Error loading schema");
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=graphqlSchemaExport.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphqlSchemaExport.test.js","sourceRoot":"","sources":["../../src/modules/graphqlSchemaExport.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importDB.d.ts","sourceRoot":"","sources":["../../src/modules/importDB.ts"],"names":[],"mappings":"AAkBA,wBAA8B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAsEnE"}
|
|
@@ -1,24 +1,18 @@
|
|
|
1
|
-
import prompts from "prompts"
|
|
2
|
-
import {
|
|
3
|
-
import Seven from 'node-7z'
|
|
1
|
+
import prompts from "prompts";
|
|
2
|
+
import { readdirSync, mkdirSync, renameSync, rmSync, copyFileSync } from "fs";
|
|
3
|
+
import Seven from 'node-7z';
|
|
4
4
|
import ora from "ora";
|
|
5
5
|
import { DB } from "../utils/db/DB.js";
|
|
6
|
-
import { exec
|
|
6
|
+
import { exec } from "child_process";
|
|
7
7
|
import { Config } from "../utils/config/config.js";
|
|
8
8
|
import chalk from "chalk";
|
|
9
9
|
import path from "path";
|
|
10
|
-
import sevenBin from '7zip-bin'
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
export default async function importDB(cli) {
|
|
14
|
-
console.log()
|
|
15
|
-
|
|
10
|
+
import sevenBin from '7zip-bin';
|
|
11
|
+
export default async function importDB(_cli) {
|
|
12
|
+
console.log();
|
|
16
13
|
const config = await Config.getConfig();
|
|
17
|
-
|
|
18
|
-
const files = readdirSync(process.cwd(), { withFileTypes: true }).filter(dirent => dirent.isFile()).map(dirent => { return { title: dirent.name } })
|
|
19
|
-
|
|
14
|
+
const files = readdirSync(process.cwd(), { withFileTypes: true }).filter(dirent => dirent.isFile()).map(dirent => { return { title: dirent.name }; });
|
|
20
15
|
let success = true;
|
|
21
|
-
|
|
22
16
|
const results = await prompts([
|
|
23
17
|
{
|
|
24
18
|
// Ordnerauswahl von vorhandenen Ordner in configIndividual
|
|
@@ -43,79 +37,67 @@ export default async function importDB(cli) {
|
|
|
43
37
|
}
|
|
44
38
|
], {
|
|
45
39
|
onCancel: () => {
|
|
46
|
-
console.log()
|
|
47
|
-
console.log(chalk.red("Cancelled Import!"))
|
|
48
|
-
console.log()
|
|
49
|
-
success = false
|
|
40
|
+
console.log();
|
|
41
|
+
console.log(chalk.red("Cancelled Import!"));
|
|
42
|
+
console.log();
|
|
43
|
+
success = false;
|
|
50
44
|
}
|
|
51
|
-
})
|
|
52
|
-
|
|
45
|
+
});
|
|
53
46
|
if (success) {
|
|
54
|
-
console.log()
|
|
55
|
-
rmSync("." + path.sep + "dump", { recursive: true, force: true })
|
|
56
|
-
mkdirSync("." + path.sep + "/dump", { recursive: true })
|
|
57
|
-
|
|
47
|
+
console.log();
|
|
48
|
+
rmSync("." + path.sep + "dump", { recursive: true, force: true });
|
|
49
|
+
mkdirSync("." + path.sep + "/dump", { recursive: true });
|
|
58
50
|
if (await isArchive(results.file)) {
|
|
59
|
-
|
|
60
51
|
const spinnerZIP = ora('Unpacking Archive').start();
|
|
61
|
-
|
|
62
52
|
const unpack = Seven.extract(results.file, "." + path.sep + "dump", {
|
|
63
53
|
$bin: sevenBin.path7za
|
|
64
|
-
})
|
|
65
|
-
|
|
54
|
+
});
|
|
66
55
|
unpack.on('end', async () => {
|
|
67
|
-
const filename = readdirSync("." + path.sep + "dump")[0]
|
|
68
|
-
renameSync("." + path.sep + "dump" + path.sep + "" + filename, "." + path.sep + "dump" + path.sep + "dump.sql")
|
|
69
|
-
spinnerZIP.succeed("Archive unpacked")
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
56
|
+
const filename = readdirSync("." + path.sep + "dump")[0];
|
|
57
|
+
renameSync("." + path.sep + "dump" + path.sep + "" + filename, "." + path.sep + "dump" + path.sep + "dump.sql");
|
|
58
|
+
spinnerZIP.succeed("Archive unpacked");
|
|
59
|
+
await importDBActual(config, results);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
74
63
|
const spinnerCopy = ora('Copying Dump').start();
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
spinnerCopy.succeed("Dump copied")
|
|
79
|
-
|
|
80
|
-
await importDBActual(config, results)
|
|
64
|
+
copyFileSync("." + path.sep + results.file, "." + path.sep + "dump" + path.sep + "dump.sql");
|
|
65
|
+
spinnerCopy.succeed("Dump copied");
|
|
66
|
+
await importDBActual(config, results);
|
|
81
67
|
}
|
|
82
68
|
}
|
|
83
69
|
}
|
|
84
|
-
|
|
85
70
|
function isArchive(file) {
|
|
86
|
-
return new Promise((resolve
|
|
87
|
-
const test = Seven.list("."+path.sep+file, {
|
|
71
|
+
return new Promise((resolve) => {
|
|
72
|
+
const test = Seven.list("." + path.sep + file, {
|
|
88
73
|
$bin: sevenBin.path7za
|
|
89
74
|
});
|
|
90
|
-
test.on('end', (
|
|
91
|
-
resolve(true)
|
|
92
|
-
})
|
|
93
|
-
test.on('error', (
|
|
94
|
-
resolve(false)
|
|
95
|
-
})
|
|
75
|
+
test.on('end', () => {
|
|
76
|
+
resolve(true);
|
|
77
|
+
});
|
|
78
|
+
test.on('error', () => {
|
|
79
|
+
resolve(false);
|
|
80
|
+
});
|
|
96
81
|
});
|
|
97
82
|
}
|
|
98
|
-
|
|
99
83
|
async function importDBActual(config, results) {
|
|
100
84
|
const spinnerImport = ora('Importing DB').start();
|
|
101
|
-
|
|
102
85
|
if (results.dropDB) {
|
|
103
86
|
await DB.executeQuery("DROP DATABASE IF EXISTS " + results.dbName);
|
|
104
87
|
await DB.executeQuery("CREATE DATABASE " + results.dbName);
|
|
105
88
|
}
|
|
106
|
-
|
|
107
|
-
exec("mysql -u " + config.dbUser + " -p" + config.dbPassword + " " + results.dbName + " < dump" + path.sep + "dump.sql", (error, stdout, stderr) => {
|
|
89
|
+
exec("mysql -u " + config.dbUser + " -p" + config.dbPassword + " " + results.dbName + " < dump" + path.sep + "dump.sql", (error) => {
|
|
108
90
|
if (error != null) {
|
|
109
|
-
spinnerImport.fail("Database-Import failed!")
|
|
110
|
-
console.log(error)
|
|
111
|
-
} else {
|
|
112
|
-
spinnerImport.succeed("Database imported")
|
|
113
|
-
|
|
114
|
-
const deleteSpinner = ora("Delete temporary dump").start()
|
|
115
|
-
rmSync("." + path.sep + "dump", { recursive: true, force: true })
|
|
116
|
-
deleteSpinner.succeed("Dump deleted")
|
|
91
|
+
spinnerImport.fail("Database-Import failed!");
|
|
92
|
+
console.log(error);
|
|
117
93
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
94
|
+
else {
|
|
95
|
+
spinnerImport.succeed("Database imported");
|
|
96
|
+
const deleteSpinner = ora("Delete temporary dump").start();
|
|
97
|
+
rmSync("." + path.sep + "dump", { recursive: true, force: true });
|
|
98
|
+
deleteSpinner.succeed("Dump deleted");
|
|
99
|
+
}
|
|
100
|
+
console.log();
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=importDB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importDB.js","sourceRoot":"","sources":["../../src/modules/importDB.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importDB.test.d.ts","sourceRoot":"","sources":["../../src/modules/importDB.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
const mocks = vi.hoisted(() => {
|
|
3
|
+
const sevenList = vi.fn();
|
|
4
|
+
const sevenExtract = vi.fn();
|
|
5
|
+
return {
|
|
6
|
+
prompts: vi.fn(),
|
|
7
|
+
readdirSync: vi.fn(),
|
|
8
|
+
mkdirSync: vi.fn(),
|
|
9
|
+
renameSync: vi.fn(),
|
|
10
|
+
rmSync: vi.fn(),
|
|
11
|
+
copyFileSync: vi.fn(),
|
|
12
|
+
ora: vi.fn(() => ({ start: vi.fn().mockReturnThis(), fail: vi.fn(), succeed: vi.fn() })),
|
|
13
|
+
executeQuery: vi.fn(),
|
|
14
|
+
exec: vi.fn(),
|
|
15
|
+
getConfig: vi.fn(),
|
|
16
|
+
sevenList,
|
|
17
|
+
sevenExtract
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
vi.mock("prompts", () => ({ default: mocks.prompts }));
|
|
21
|
+
vi.mock("fs", () => ({
|
|
22
|
+
readdirSync: mocks.readdirSync,
|
|
23
|
+
mkdirSync: mocks.mkdirSync,
|
|
24
|
+
renameSync: mocks.renameSync,
|
|
25
|
+
rmSync: mocks.rmSync,
|
|
26
|
+
copyFileSync: mocks.copyFileSync
|
|
27
|
+
}));
|
|
28
|
+
vi.mock("ora", () => ({ default: mocks.ora }));
|
|
29
|
+
vi.mock("../utils/db/DB.js", () => ({ DB: { executeQuery: mocks.executeQuery } }));
|
|
30
|
+
vi.mock("child_process", () => ({ exec: mocks.exec }));
|
|
31
|
+
vi.mock("../utils/config/config.js", () => ({ Config: { getConfig: mocks.getConfig } }));
|
|
32
|
+
vi.mock("node-7z", () => ({ default: { list: mocks.sevenList, extract: mocks.sevenExtract } }));
|
|
33
|
+
import importDB from "./importDB.js";
|
|
34
|
+
describe("importDB", () => {
|
|
35
|
+
beforeEach(() => {
|
|
36
|
+
vi.clearAllMocks();
|
|
37
|
+
mocks.getConfig.mockResolvedValue({ dbUser: "root", dbPassword: "pw" });
|
|
38
|
+
mocks.readdirSync.mockReturnValue([{ isFile: () => true, name: "dump.sql" }]);
|
|
39
|
+
mocks.exec.mockImplementation((cmd, cb) => cb(null));
|
|
40
|
+
});
|
|
41
|
+
it("imports non-archive dump and optionally recreates db", async () => {
|
|
42
|
+
mocks.prompts.mockResolvedValue({ file: "dump.sql", dbName: "db1", dropDB: true });
|
|
43
|
+
mocks.sevenList.mockImplementation(() => ({
|
|
44
|
+
on: (event, handler) => {
|
|
45
|
+
if (event === "error")
|
|
46
|
+
handler();
|
|
47
|
+
}
|
|
48
|
+
}));
|
|
49
|
+
await importDB({});
|
|
50
|
+
expect(mocks.copyFileSync).toHaveBeenCalled();
|
|
51
|
+
expect(mocks.executeQuery).toHaveBeenCalledWith("DROP DATABASE IF EXISTS db1");
|
|
52
|
+
expect(mocks.executeQuery).toHaveBeenCalledWith("CREATE DATABASE db1");
|
|
53
|
+
expect(String(mocks.exec.mock.calls[0]?.[0] ?? "")).toContain("mysql -u root -ppw db1 < dump");
|
|
54
|
+
});
|
|
55
|
+
it("aborts on cancel", async () => {
|
|
56
|
+
mocks.prompts.mockImplementation(async (_q, options) => {
|
|
57
|
+
options?.onCancel?.();
|
|
58
|
+
return {};
|
|
59
|
+
});
|
|
60
|
+
await importDB({});
|
|
61
|
+
expect(mocks.copyFileSync).not.toHaveBeenCalled();
|
|
62
|
+
expect(mocks.exec).not.toHaveBeenCalled();
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=importDB.test.js.map
|