@intecoag/inteco-cli 1.11.7 → 1.12.0-beta.1
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 +12 -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/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/azureSync.d.ts +4 -0
- package/dist/modules/azureSync.d.ts.map +1 -0
- package/{src → dist}/modules/azureSync.js +50 -131
- package/dist/modules/azureSync.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/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/configMutation.d.ts +2 -0
- package/dist/modules/configMutation.d.ts.map +1 -0
- package/{src → dist}/modules/configMutation.js +54 -101
- package/dist/modules/configMutation.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/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/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/dumpTableToCSV.d.ts +2 -0
- package/dist/modules/dumpTableToCSV.d.ts.map +1 -0
- package/dist/modules/dumpTableToCSV.js +128 -0
- package/dist/modules/dumpTableToCSV.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/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/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/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/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/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/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/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/syncConfig.d.ts +2 -0
- package/dist/modules/syncConfig.d.ts.map +1 -0
- package/{src → dist}/modules/syncConfig.js +74 -127
- package/dist/modules/syncConfig.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/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/{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/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/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/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/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/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/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/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/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/package.json +31 -8
- 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
|
@@ -1,48 +1,43 @@
|
|
|
1
1
|
import { BlobServiceClient } from "@azure/storage-blob";
|
|
2
2
|
import { DefaultAzureCredential } from "@azure/identity";
|
|
3
|
-
|
|
4
3
|
export class AzureHelper {
|
|
4
|
+
credential;
|
|
5
|
+
clientCache;
|
|
5
6
|
constructor(credential = new DefaultAzureCredential()) {
|
|
6
7
|
this.credential = credential;
|
|
7
8
|
this.clientCache = new Map();
|
|
8
9
|
}
|
|
9
|
-
|
|
10
10
|
getContainerClient(storageAccount, container) {
|
|
11
11
|
const cacheKey = `${storageAccount}|${container}`;
|
|
12
12
|
let containerClient = this.clientCache.get(cacheKey);
|
|
13
13
|
if (containerClient) {
|
|
14
14
|
return containerClient;
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
const blobServiceClient = new BlobServiceClient(
|
|
18
|
-
`https://${storageAccount}.blob.core.windows.net`,
|
|
19
|
-
this.credential
|
|
20
|
-
);
|
|
16
|
+
const blobServiceClient = new BlobServiceClient(`https://${storageAccount}.blob.core.windows.net`, this.credential);
|
|
21
17
|
containerClient = blobServiceClient.getContainerClient(container);
|
|
22
18
|
this.clientCache.set(cacheKey, containerClient);
|
|
23
19
|
return containerClient;
|
|
24
20
|
}
|
|
25
|
-
|
|
26
21
|
async listContainers(storageAccount) {
|
|
27
|
-
const blobServiceClient = new BlobServiceClient(
|
|
28
|
-
`https://${storageAccount}.blob.core.windows.net`,
|
|
29
|
-
this.credential
|
|
30
|
-
);
|
|
22
|
+
const blobServiceClient = new BlobServiceClient(`https://${storageAccount}.blob.core.windows.net`, this.credential);
|
|
31
23
|
const containers = [];
|
|
32
24
|
for await (const container of blobServiceClient.listContainers()) {
|
|
33
25
|
containers.push(container.name);
|
|
34
26
|
}
|
|
35
27
|
return containers;
|
|
36
28
|
}
|
|
37
|
-
|
|
38
29
|
async listBlobs(containerClient) {
|
|
39
30
|
const blobs = [];
|
|
40
31
|
for await (const blob of containerClient.listBlobsFlat()) {
|
|
41
|
-
blobs.push(
|
|
32
|
+
blobs.push({
|
|
33
|
+
name: blob.name,
|
|
34
|
+
properties: {
|
|
35
|
+
contentMD5: blob.properties.contentMD5
|
|
36
|
+
}
|
|
37
|
+
});
|
|
42
38
|
}
|
|
43
39
|
return blobs;
|
|
44
40
|
}
|
|
45
|
-
|
|
46
41
|
async getBlobMd5Base64(containerClient, blobPath) {
|
|
47
42
|
try {
|
|
48
43
|
const properties = await containerClient.getBlobClient(blobPath).getProperties();
|
|
@@ -51,27 +46,25 @@ export class AzureHelper {
|
|
|
51
46
|
return null;
|
|
52
47
|
}
|
|
53
48
|
return Buffer.isBuffer(contentMd5) ? contentMd5.toString("base64") : null;
|
|
54
|
-
}
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
55
51
|
return null;
|
|
56
52
|
}
|
|
57
53
|
}
|
|
58
|
-
|
|
59
54
|
async uploadFile(containerClient, blobPath, filePath, md5Base64, onProgress) {
|
|
60
55
|
const blockBlobClient = containerClient.getBlockBlobClient(blobPath);
|
|
61
56
|
const md5Buffer = md5Base64 ? Buffer.from(md5Base64, "base64") : undefined;
|
|
62
|
-
|
|
63
|
-
await blockBlobClient.uploadFile(filePath, {
|
|
57
|
+
return await blockBlobClient.uploadFile(filePath, {
|
|
64
58
|
blobHTTPHeaders: md5Buffer ? { blobContentMD5: md5Buffer } : undefined,
|
|
65
59
|
onProgress
|
|
66
60
|
});
|
|
67
61
|
}
|
|
68
|
-
|
|
69
62
|
async downloadToFile(containerClient, blobPath, filePath, onProgress) {
|
|
70
63
|
const blockBlobClient = containerClient.getBlockBlobClient(blobPath);
|
|
71
64
|
await blockBlobClient.downloadToFile(filePath, 0, 0, { onProgress });
|
|
72
65
|
}
|
|
73
|
-
|
|
74
66
|
async deleteBlob(containerClient, blobPath) {
|
|
75
67
|
await containerClient.deleteBlob(blobPath);
|
|
76
68
|
}
|
|
77
69
|
}
|
|
70
|
+
//# sourceMappingURL=azure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azure.js","sourceRoot":"","sources":["../../../src/utils/azure/azure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface CLIConfig {
|
|
2
|
+
configIndividualPath: string;
|
|
3
|
+
configIndividualPathWrite: string;
|
|
4
|
+
configIndividualPathEclipse: string;
|
|
5
|
+
dbURL: string;
|
|
6
|
+
dbUser: string;
|
|
7
|
+
dbPassword: string;
|
|
8
|
+
wegasUsername: string;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
type ConfigStore = {
|
|
12
|
+
read: () => Promise<Record<string, unknown>>;
|
|
13
|
+
write: (data: Record<string, unknown>) => Promise<void> | void;
|
|
14
|
+
filePath: string;
|
|
15
|
+
};
|
|
16
|
+
export declare class Config {
|
|
17
|
+
static config: ConfigStore;
|
|
18
|
+
static configData: CLIConfig | null;
|
|
19
|
+
private static normalizeConfig;
|
|
20
|
+
static initConfig(): Promise<void>;
|
|
21
|
+
static getConfig(): Promise<CLIConfig>;
|
|
22
|
+
static getConfigPath(): Promise<string>;
|
|
23
|
+
static setConfigField(field: string, value: unknown): Promise<void>;
|
|
24
|
+
static setConfig(data: CLIConfig): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/utils/config/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,yBAAyB,EAAE,MAAM,CAAC;IAClC,2BAA2B,EAAE,MAAM,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,KAAK,WAAW,GAAG;IACf,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7C,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/D,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAIF,qBAAa,MAAM;IACf,MAAM,CAAC,MAAM,EAAE,WAAW,CAAoC;IAC9D,MAAM,CAAC,UAAU,EAAE,SAAS,GAAG,IAAI,CAAQ;IAE3C,OAAO,CAAC,MAAM,CAAC,eAAe;WAYjB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;WAsC3B,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;WAU/B,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;WAKhC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;WAW5D,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAMzD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import cfg from "application-config";
|
|
2
|
+
import defaultCFG from './default.json' with { type: 'json' };
|
|
3
|
+
const defaultConfig = defaultCFG;
|
|
4
|
+
export class Config {
|
|
5
|
+
static config = cfg("inteco_cli");
|
|
6
|
+
static configData = null;
|
|
7
|
+
static normalizeConfig(data) {
|
|
8
|
+
const normalized = { ...defaultConfig };
|
|
9
|
+
for (const key of Object.keys(defaultConfig)) {
|
|
10
|
+
if (Object.hasOwn(data, key)) {
|
|
11
|
+
normalized[key] = data[key];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return normalized;
|
|
15
|
+
}
|
|
16
|
+
static async initConfig() {
|
|
17
|
+
if (this.configData == null) {
|
|
18
|
+
const rawData = await this.config.read();
|
|
19
|
+
this.configData = this.normalizeConfig(rawData);
|
|
20
|
+
}
|
|
21
|
+
if (!this.configData || Object.keys(this.configData).length === 0) {
|
|
22
|
+
// Default Configuration
|
|
23
|
+
this.configData = { ...defaultConfig };
|
|
24
|
+
this.config.write(this.configData);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
const data = this.normalizeConfig(this.configData);
|
|
28
|
+
let hasChange = false;
|
|
29
|
+
Object.keys(defaultConfig).forEach((key) => {
|
|
30
|
+
// Write new config-entries if not present
|
|
31
|
+
if (!Object.keys(this.configData).includes(key)) {
|
|
32
|
+
data[key] = defaultConfig[key];
|
|
33
|
+
hasChange = true;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.keys(this.configData).forEach((key) => {
|
|
37
|
+
if (!Object.keys(defaultConfig).includes(key)) {
|
|
38
|
+
delete data[key];
|
|
39
|
+
hasChange = true;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
if (hasChange) {
|
|
43
|
+
this.configData = data;
|
|
44
|
+
this.config.write(data);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
this.configData = data;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
static async getConfig() {
|
|
52
|
+
await this.initConfig();
|
|
53
|
+
if (!this.configData) {
|
|
54
|
+
this.configData = { ...defaultConfig };
|
|
55
|
+
}
|
|
56
|
+
return this.configData;
|
|
57
|
+
}
|
|
58
|
+
static async getConfigPath() {
|
|
59
|
+
await this.initConfig();
|
|
60
|
+
return this.config.filePath;
|
|
61
|
+
}
|
|
62
|
+
static async setConfigField(field, value) {
|
|
63
|
+
await this.initConfig();
|
|
64
|
+
const data = { ...(this.configData ?? defaultConfig) };
|
|
65
|
+
data[field] = value;
|
|
66
|
+
this.configData = data;
|
|
67
|
+
this.config.write(data);
|
|
68
|
+
}
|
|
69
|
+
static async setConfig(data) {
|
|
70
|
+
this.configData = data;
|
|
71
|
+
this.config.write(data);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/utils/config/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Connection } from "mysql2/promise";
|
|
2
|
+
export declare class DB {
|
|
3
|
+
static connection: Connection | null;
|
|
4
|
+
static connect(db: string | null): Promise<void>;
|
|
5
|
+
private static getConnection;
|
|
6
|
+
private static closeConnection;
|
|
7
|
+
private static runQuery;
|
|
8
|
+
static executeQuery(query: string): Promise<unknown[]>;
|
|
9
|
+
static executeQueryOnDB(query: string, db: string): Promise<unknown[]>;
|
|
10
|
+
static getDatabaseNames(): Promise<Array<{
|
|
11
|
+
name: string;
|
|
12
|
+
}>>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=DB.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DB.d.ts","sourceRoot":"","sources":["../../../src/utils/db/DB.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,UAAU,EAAsB,MAAM,gBAAgB,CAAC;AAIvF,qBAAa,EAAE;IACX,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAQ;WAE/B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAWtD,OAAO,CAAC,MAAM,CAAC,aAAa;mBAQP,eAAe;mBAOf,QAAQ;WAYhB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;WAI/C,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;WAI/D,gBAAgB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAqBpE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { createConnection } from "mysql2/promise";
|
|
2
|
+
import { Config } from "../config/config.js";
|
|
3
|
+
export class DB {
|
|
4
|
+
static connection = null;
|
|
5
|
+
static async connect(db) {
|
|
6
|
+
const config = await Config.getConfig();
|
|
7
|
+
this.connection = await createConnection({
|
|
8
|
+
host: config.dbURL,
|
|
9
|
+
user: config.dbUser,
|
|
10
|
+
password: config.dbPassword,
|
|
11
|
+
database: db != null ? db : ""
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
static getConnection() {
|
|
15
|
+
if (!this.connection) {
|
|
16
|
+
throw new Error("Database connection is not initialized");
|
|
17
|
+
}
|
|
18
|
+
return this.connection;
|
|
19
|
+
}
|
|
20
|
+
static async closeConnection() {
|
|
21
|
+
if (this.connection) {
|
|
22
|
+
await this.connection.end();
|
|
23
|
+
this.connection = null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
static async runQuery(query, db) {
|
|
27
|
+
await this.connect(db);
|
|
28
|
+
try {
|
|
29
|
+
const [results] = await this.getConnection().query(query);
|
|
30
|
+
return Array.isArray(results) ? results : [];
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
await this.closeConnection();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
static async executeQuery(query) {
|
|
37
|
+
return await this.runQuery(query, null);
|
|
38
|
+
}
|
|
39
|
+
static async executeQueryOnDB(query, db) {
|
|
40
|
+
return await this.runQuery(query, db);
|
|
41
|
+
}
|
|
42
|
+
static async getDatabaseNames() {
|
|
43
|
+
await this.connect(null);
|
|
44
|
+
let results = [];
|
|
45
|
+
try {
|
|
46
|
+
const [rows] = await this.getConnection().query("SHOW DATABASES");
|
|
47
|
+
results = rows;
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
await this.closeConnection();
|
|
51
|
+
}
|
|
52
|
+
const filtered = results.filter((val) => {
|
|
53
|
+
if (val.Database === "sys" || val.Database === "information_schema" || val.Database === "mysql" || val.Database === "performance_schema") {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return true;
|
|
57
|
+
});
|
|
58
|
+
return filtered.map((result) => ({ name: result.Database }));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=DB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DB.js","sourceRoot":"","sources":["../../../src/utils/db/DB.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type CopyUpdatedStats = {
|
|
2
|
+
added: number;
|
|
3
|
+
updated: number;
|
|
4
|
+
};
|
|
5
|
+
type CopyAllStats = {
|
|
6
|
+
copied: number;
|
|
7
|
+
};
|
|
8
|
+
export declare class FS {
|
|
9
|
+
static copyUpdatedFiles(sourceDir: string, destDir: string, dryRun?: boolean, stats?: CopyUpdatedStats, filenameBlacklist?: string[], onlyCopyNonExistant?: boolean): void;
|
|
10
|
+
static copyAllFiles(sourceDir: string, destDir: string, dryRun?: boolean, stats?: CopyAllStats, filenameBlacklist?: string[]): void;
|
|
11
|
+
static filePicker(startDir?: string, navRootDir?: string): Promise<string[]>;
|
|
12
|
+
static getAllFiles(dir: string): string[];
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=FS.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FS.d.ts","sourceRoot":"","sources":["../../../src/utils/fs/FS.ts"],"names":[],"mappings":"AAKA,KAAK,gBAAgB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,KAAK,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAGvC,qBAAa,EAAE;IACX,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAQ,EAAE,KAAK,GAAE,gBAA2C,EAAE,iBAAiB,GAAE,MAAM,EAAO,EAAE,mBAAmB,UAAQ,GAAG,IAAI;IAgDpM,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAQ,EAAE,KAAK,GAAE,YAA4B,EAAE,iBAAiB,GAAE,MAAM,EAAO,GAAG,IAAI;WAiCvI,UAAU,CAAC,QAAQ,SAAgB,EAAE,UAAU,SAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAyChG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;CAiB5C"}
|
|
@@ -1,48 +1,44 @@
|
|
|
1
1
|
import { statSync, mkdirSync, existsSync, copyFileSync, readdirSync } from "fs";
|
|
2
2
|
import chalk from "chalk";
|
|
3
|
-
import path
|
|
3
|
+
import path from "path";
|
|
4
4
|
import prompts from "prompts";
|
|
5
|
-
|
|
6
5
|
export class FS {
|
|
7
6
|
static copyUpdatedFiles(sourceDir, destDir, dryRun = false, stats = { added: 0, updated: 0 }, filenameBlacklist = [], onlyCopyNonExistant = false) {
|
|
8
7
|
if (!existsSync(destDir)) {
|
|
9
8
|
if (dryRun) {
|
|
10
9
|
console.log(chalk.gray(`[DryRun] Would create directory: ${destDir}`));
|
|
11
|
-
}
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
12
|
mkdirSync(destDir, { recursive: true });
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
|
|
16
15
|
const entries = readdirSync(sourceDir, { withFileTypes: true });
|
|
17
|
-
|
|
18
16
|
for (const entry of entries) {
|
|
19
|
-
if(filenameBlacklist.includes(entry.name)) {
|
|
17
|
+
if (filenameBlacklist.includes(entry.name)) {
|
|
20
18
|
continue;
|
|
21
19
|
}
|
|
22
|
-
|
|
23
20
|
const sourcePath = path.join(sourceDir, entry.name);
|
|
24
21
|
const destPath = path.join(destDir, entry.name);
|
|
25
|
-
|
|
26
22
|
if (entry.isDirectory()) {
|
|
27
23
|
FS.copyUpdatedFiles(sourcePath, destPath, dryRun, stats, filenameBlacklist);
|
|
28
|
-
}
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
29
26
|
let shouldCopy = false;
|
|
30
|
-
|
|
31
27
|
if (!existsSync(destPath)) {
|
|
32
28
|
shouldCopy = true;
|
|
33
|
-
}
|
|
29
|
+
}
|
|
30
|
+
else if (!onlyCopyNonExistant) {
|
|
34
31
|
const sourceStat = statSync(sourcePath);
|
|
35
32
|
const destStat = statSync(destPath);
|
|
36
|
-
|
|
37
33
|
if (sourceStat.mtime > destStat.mtime) {
|
|
38
34
|
shouldCopy = true;
|
|
39
35
|
}
|
|
40
36
|
}
|
|
41
|
-
|
|
42
37
|
if (shouldCopy) {
|
|
43
38
|
if (dryRun) {
|
|
44
39
|
console.log(chalk.blue(`[DryRun] Would update file: ${destPath}`));
|
|
45
|
-
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
46
42
|
copyFileSync(sourcePath, destPath);
|
|
47
43
|
}
|
|
48
44
|
stats.updated++;
|
|
@@ -50,47 +46,40 @@ export class FS {
|
|
|
50
46
|
}
|
|
51
47
|
}
|
|
52
48
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
49
|
static copyAllFiles(sourceDir, destDir, dryRun = false, stats = { copied: 0 }, filenameBlacklist = []) {
|
|
56
50
|
if (!existsSync(destDir)) {
|
|
57
51
|
if (dryRun) {
|
|
58
52
|
console.log(chalk.gray(`[DryRun] Would create directory: ${destDir}`));
|
|
59
|
-
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
60
55
|
mkdirSync(destDir, { recursive: true });
|
|
61
56
|
}
|
|
62
57
|
}
|
|
63
|
-
|
|
64
58
|
const entries = readdirSync(sourceDir, { withFileTypes: true });
|
|
65
|
-
|
|
66
59
|
for (const entry of entries) {
|
|
67
|
-
if(filenameBlacklist.includes(entry.name)) {
|
|
60
|
+
if (filenameBlacklist.includes(entry.name)) {
|
|
68
61
|
continue;
|
|
69
62
|
}
|
|
70
|
-
|
|
71
63
|
const sourcePath = path.join(sourceDir, entry.name);
|
|
72
64
|
const destPath = path.join(destDir, entry.name);
|
|
73
|
-
|
|
74
65
|
if (entry.isDirectory()) {
|
|
75
66
|
FS.copyAllFiles(sourcePath, destPath, dryRun, stats, filenameBlacklist);
|
|
76
|
-
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
77
69
|
if (dryRun) {
|
|
78
70
|
console.log(chalk.magenta(`[DryRun] Would copy file: ${destPath}`));
|
|
79
|
-
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
80
73
|
copyFileSync(sourcePath, destPath);
|
|
81
74
|
}
|
|
82
75
|
stats.copied++;
|
|
83
76
|
}
|
|
84
77
|
}
|
|
85
78
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
79
|
static async filePicker(startDir = process.cwd(), navRootDir = process.cwd()) {
|
|
89
80
|
let current = startDir;
|
|
90
|
-
|
|
91
|
-
while(true) {
|
|
81
|
+
while (true) {
|
|
92
82
|
const entries = readdirSync(current, { withFileTypes: true });
|
|
93
|
-
|
|
94
83
|
const choices = [
|
|
95
84
|
{ title: '[Dir] . (Select Current Directory)', value: '.', isDirectory: true },
|
|
96
85
|
...entries.map(e => ({
|
|
@@ -98,24 +87,24 @@ export class FS {
|
|
|
98
87
|
value: e.name,
|
|
99
88
|
isDirectory: e.isDirectory()
|
|
100
89
|
})).sort((a, b) => a.isDirectory && !b.isDirectory ? -1 : (!a.isDirectory && b.isDirectory ? 1 : a.value.localeCompare(b.value)))
|
|
101
|
-
]
|
|
102
|
-
|
|
103
|
-
if(path.relative(navRootDir, current) !== "") {
|
|
90
|
+
];
|
|
91
|
+
if (path.relative(navRootDir, current) !== "") {
|
|
104
92
|
choices.unshift({ title: '[Dir] .. (Go Up one Directory)', value: '..', isDirectory: true });
|
|
105
93
|
}
|
|
106
|
-
|
|
107
94
|
const { file } = await prompts({
|
|
108
95
|
type: 'autocomplete',
|
|
109
96
|
name: "file",
|
|
110
97
|
message: `Pick Files: ${current}`,
|
|
111
98
|
choices
|
|
112
99
|
});
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
100
|
+
const picked = choices.find((c) => c.value === file);
|
|
101
|
+
if (!picked) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (picked.isDirectory) {
|
|
117
105
|
const dir = picked.value;
|
|
118
|
-
if(dir === ".")
|
|
106
|
+
if (dir === ".")
|
|
107
|
+
return FS.getAllFiles(current).map((e) => path.relative(navRootDir, e));
|
|
119
108
|
current = dir === ".." ? path.dirname(current) : path.join(current, dir);
|
|
120
109
|
}
|
|
121
110
|
else {
|
|
@@ -123,22 +112,19 @@ export class FS {
|
|
|
123
112
|
}
|
|
124
113
|
}
|
|
125
114
|
}
|
|
126
|
-
|
|
127
115
|
static getAllFiles(dir) {
|
|
128
116
|
const entries = readdirSync(dir, { withFileTypes: true });
|
|
129
117
|
const files = [];
|
|
130
|
-
|
|
131
|
-
for(const entry of entries) {
|
|
118
|
+
for (const entry of entries) {
|
|
132
119
|
const fullPath = path.join(dir, entry.name);
|
|
133
|
-
|
|
134
|
-
if(entry.isDirectory()) {
|
|
120
|
+
if (entry.isDirectory()) {
|
|
135
121
|
files.push(...FS.getAllFiles(fullPath));
|
|
136
122
|
}
|
|
137
123
|
else {
|
|
138
124
|
files.push(fullPath);
|
|
139
125
|
}
|
|
140
126
|
}
|
|
141
|
-
|
|
142
127
|
return files;
|
|
143
128
|
}
|
|
144
|
-
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=FS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FS.js","sourceRoot":"","sources":["../../../src/utils/fs/FS.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
type GithubTokenResult = {
|
|
2
|
+
token: string;
|
|
3
|
+
authMethod: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Get GitHub authentication token from environment or GitHub CLI
|
|
7
|
+
* @returns {Promise<{token: string, authMethod: string}>} Token and authentication method
|
|
8
|
+
* @throws {Error} If no authentication method is available
|
|
9
|
+
*/
|
|
10
|
+
export declare function getGithubToken(): Promise<GithubTokenResult>;
|
|
11
|
+
/**
|
|
12
|
+
* Make a GitHub API fetch request with proper headers and error handling
|
|
13
|
+
* @param {string} url - GitHub API endpoint URL
|
|
14
|
+
* @param {string} token - GitHub authentication token
|
|
15
|
+
* @returns {Promise<Response>} Fetch response
|
|
16
|
+
* @throws {Error} If fetch fails or returns error status
|
|
17
|
+
*/
|
|
18
|
+
export declare function fetchGithubAPI(url: string, token: string): Promise<Response>;
|
|
19
|
+
/**
|
|
20
|
+
* Fetch all items from a paginated GitHub API endpoint
|
|
21
|
+
* @param {string} baseUrl - Base GitHub API endpoint URL (without pagination params)
|
|
22
|
+
* @param {string} token - GitHub authentication token
|
|
23
|
+
* @param {number} page - Current page (default: 1)
|
|
24
|
+
* @param {Array} allItems - Accumulated items (default: [])
|
|
25
|
+
* @returns {Promise<Array>} All items from all pages
|
|
26
|
+
*/
|
|
27
|
+
export declare function fetchPaginatedGithubAPI<T = unknown>(baseUrl: string, token: string, page?: number, allItems?: T[]): Promise<T[]>;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/utils/github/github.ts"],"names":[],"mappings":"AAGA,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAiCjE;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwBlF;AAED;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,SAAI,EAAE,QAAQ,GAAE,CAAC,EAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAqBrI"}
|
|
@@ -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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"}
|