@intecoag/inteco-cli 1.11.6 → 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
|
@@ -6,34 +6,37 @@ import prompts from "prompts";
|
|
|
6
6
|
import YAML from "yaml";
|
|
7
7
|
import ora from "ora";
|
|
8
8
|
import { AzureHelper } from "../utils/azure/azure.js";
|
|
9
|
-
|
|
10
9
|
const defaultAccountName = "intecodev";
|
|
11
|
-
|
|
10
|
+
function getOperationDisplayName(operation) {
|
|
11
|
+
if (operation.type === "delete") {
|
|
12
|
+
return operation.blobPath;
|
|
13
|
+
}
|
|
14
|
+
return operation.localFile.relativePath;
|
|
15
|
+
}
|
|
16
|
+
function getErrorMessage(error) {
|
|
17
|
+
return error instanceof Error ? error.message : String(error);
|
|
18
|
+
}
|
|
12
19
|
// Erstellt .az-sync Konfigurationsdatei im aktuellen Verzeichnis oder überschreibt sie, wenn sie bereits existiert
|
|
13
20
|
export async function azureCreateSyncConfig() {
|
|
14
|
-
console.log()
|
|
15
|
-
|
|
21
|
+
console.log();
|
|
16
22
|
const configPath = path.join(process.cwd(), ".az-sync");
|
|
17
23
|
let existingConfig = {};
|
|
18
|
-
|
|
19
24
|
if (fs.existsSync(configPath)) {
|
|
20
25
|
try {
|
|
21
26
|
const rawConfig = fs.readFileSync(configPath, "utf-8");
|
|
22
27
|
existingConfig = YAML.parse(rawConfig) ?? {};
|
|
23
|
-
}
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
24
30
|
console.log();
|
|
25
31
|
console.log(chalk.red("Failed to read existing .az-sync file."));
|
|
26
|
-
console.log(error
|
|
32
|
+
console.log(getErrorMessage(error));
|
|
27
33
|
console.log();
|
|
28
34
|
}
|
|
29
35
|
}
|
|
30
|
-
|
|
31
36
|
const defaultincludes = Array.isArray(existingConfig.includes)
|
|
32
37
|
? existingConfig.includes.join(", ")
|
|
33
38
|
: (existingConfig.includes ?? "");
|
|
34
|
-
|
|
35
39
|
let success = true;
|
|
36
|
-
|
|
37
40
|
const storageResponse = await prompts([
|
|
38
41
|
{
|
|
39
42
|
type: "text",
|
|
@@ -49,28 +52,25 @@ export async function azureCreateSyncConfig() {
|
|
|
49
52
|
success = false;
|
|
50
53
|
}
|
|
51
54
|
});
|
|
52
|
-
|
|
53
55
|
if (!success) {
|
|
54
56
|
return;
|
|
55
57
|
}
|
|
56
|
-
|
|
57
58
|
const storageAccount = storageResponse.storageAccount ?? "";
|
|
58
|
-
|
|
59
59
|
let containerChoices = [];
|
|
60
60
|
if (storageAccount) {
|
|
61
61
|
try {
|
|
62
62
|
const azure = new AzureHelper();
|
|
63
63
|
const containers = await azure.listContainers(storageAccount);
|
|
64
64
|
containerChoices = containers.map(name => ({ title: name, value: name }));
|
|
65
|
-
}
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
66
67
|
console.log();
|
|
67
68
|
console.log(chalk.yellow("Could not load containers. Falling back to manual input."));
|
|
68
|
-
console.log(error
|
|
69
|
+
console.log(getErrorMessage(error));
|
|
69
70
|
console.log();
|
|
70
71
|
containerChoices = [];
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
|
-
|
|
74
74
|
const responses = await prompts([
|
|
75
75
|
{
|
|
76
76
|
type: containerChoices.length > 0 ? "autocomplete" : "text",
|
|
@@ -93,73 +93,58 @@ export async function azureCreateSyncConfig() {
|
|
|
93
93
|
success = false;
|
|
94
94
|
}
|
|
95
95
|
});
|
|
96
|
-
|
|
97
96
|
if (!success) {
|
|
98
97
|
return;
|
|
99
98
|
}
|
|
100
|
-
|
|
101
99
|
const includes = (responses.includes ?? "")
|
|
102
100
|
.split(",")
|
|
103
101
|
.map(value => value.trim())
|
|
104
102
|
.filter(Boolean);
|
|
105
|
-
|
|
106
103
|
const config = {
|
|
107
104
|
storageAccount,
|
|
108
105
|
container: responses.container ?? "",
|
|
109
106
|
includes
|
|
110
107
|
};
|
|
111
|
-
|
|
112
108
|
fs.writeFileSync(configPath, YAML.stringify(config), "utf-8");
|
|
113
109
|
console.log();
|
|
114
110
|
console.log(chalk.green("Saved .az-sync configuration."));
|
|
115
111
|
console.log();
|
|
116
112
|
}
|
|
117
|
-
|
|
118
113
|
// Push aller Änderungen von lokalen Dateien zu Azure basierend auf der .az-sync Konfiguration
|
|
119
114
|
// Löscht auch Dateien in Azure
|
|
120
115
|
export async function azurePush() {
|
|
121
|
-
console.log()
|
|
122
|
-
|
|
116
|
+
console.log();
|
|
123
117
|
const syncState = await collectSyncState(process.cwd());
|
|
124
|
-
|
|
125
118
|
if (!syncState || syncState.size === 0) {
|
|
126
119
|
console.log(chalk.yellow("No files found to sync."));
|
|
127
120
|
console.log();
|
|
128
121
|
return;
|
|
129
122
|
}
|
|
130
|
-
|
|
131
123
|
const azure = new AzureHelper();
|
|
132
124
|
const operations = await buildPushOperations(syncState, azure);
|
|
133
125
|
await executeOperations("push", operations);
|
|
134
126
|
}
|
|
135
|
-
|
|
136
127
|
// Pull aller Änderungen von Azure zu lokalen Dateien basierend auf der .az-sync Konfiguration
|
|
137
128
|
// Löscht keine Dateien lokal
|
|
138
129
|
export async function azurePull() {
|
|
139
|
-
console.log()
|
|
140
|
-
|
|
130
|
+
console.log();
|
|
141
131
|
const syncState = await collectSyncState(process.cwd());
|
|
142
|
-
|
|
143
132
|
if (!syncState || syncState.size === 0) {
|
|
144
133
|
console.log(chalk.yellow("No files found to sync."));
|
|
145
134
|
console.log();
|
|
146
135
|
return;
|
|
147
136
|
}
|
|
148
|
-
|
|
149
137
|
const azure = new AzureHelper();
|
|
150
138
|
const operations = await buildPullOperations(syncState, azure);
|
|
151
139
|
await executeOperations("pull", operations);
|
|
152
140
|
}
|
|
153
|
-
|
|
154
141
|
async function collectSyncState(startDir) {
|
|
155
142
|
const state = new Map();
|
|
156
143
|
await walkSyncTree(startDir, null, null, state);
|
|
157
144
|
return state;
|
|
158
145
|
}
|
|
159
|
-
|
|
160
146
|
async function walkSyncTree(currentDir, activeConfig, activeRootDir, state) {
|
|
161
147
|
const configPath = path.join(currentDir, ".az-sync");
|
|
162
|
-
|
|
163
148
|
if (fs.existsSync(configPath)) {
|
|
164
149
|
const loadedConfig = loadSyncConfig(configPath);
|
|
165
150
|
if (loadedConfig) {
|
|
@@ -167,7 +152,6 @@ async function walkSyncTree(currentDir, activeConfig, activeRootDir, state) {
|
|
|
167
152
|
activeRootDir = currentDir;
|
|
168
153
|
}
|
|
169
154
|
}
|
|
170
|
-
|
|
171
155
|
if (activeConfig && activeRootDir) {
|
|
172
156
|
const key = activeConfig.configPath;
|
|
173
157
|
if (!state.has(key)) {
|
|
@@ -178,46 +162,35 @@ async function walkSyncTree(currentDir, activeConfig, activeRootDir, state) {
|
|
|
178
162
|
});
|
|
179
163
|
}
|
|
180
164
|
}
|
|
181
|
-
|
|
182
165
|
const entries = await fs.promises.readdir(currentDir, { withFileTypes: true });
|
|
183
|
-
|
|
184
166
|
for (const entry of entries) {
|
|
185
167
|
if (entry.name === ".git" || entry.name === "node_modules") {
|
|
186
168
|
continue;
|
|
187
169
|
}
|
|
188
|
-
|
|
189
170
|
const entryPath = path.join(currentDir, entry.name);
|
|
190
|
-
|
|
191
171
|
if (entry.isDirectory()) {
|
|
192
172
|
await walkSyncTree(entryPath, activeConfig, activeRootDir, state);
|
|
193
173
|
continue;
|
|
194
174
|
}
|
|
195
|
-
|
|
196
175
|
if (!entry.isFile() || entry.name === ".az-sync") {
|
|
197
176
|
continue;
|
|
198
177
|
}
|
|
199
|
-
|
|
200
178
|
if (!activeConfig || !activeRootDir) {
|
|
201
179
|
continue;
|
|
202
180
|
}
|
|
203
|
-
|
|
204
181
|
const relativePath = path.relative(activeRootDir, entryPath);
|
|
205
182
|
if (!matchesGlob(relativePath, activeConfig.includes)) {
|
|
206
183
|
continue;
|
|
207
184
|
}
|
|
208
|
-
|
|
209
185
|
if (!activeConfig.storageAccount || !activeConfig.container) {
|
|
210
186
|
continue;
|
|
211
187
|
}
|
|
212
|
-
|
|
213
188
|
const key = activeConfig.configPath;
|
|
214
189
|
const entryState = state.get(key);
|
|
215
190
|
if (!entryState) {
|
|
216
191
|
continue;
|
|
217
192
|
}
|
|
218
|
-
|
|
219
193
|
const fileStats = await fs.promises.stat(entryPath);
|
|
220
|
-
|
|
221
194
|
entryState.localFiles.set(relativePath.split(path.sep).join("/"), {
|
|
222
195
|
filePath: entryPath,
|
|
223
196
|
relativePath,
|
|
@@ -227,7 +200,6 @@ async function walkSyncTree(currentDir, activeConfig, activeRootDir, state) {
|
|
|
227
200
|
});
|
|
228
201
|
}
|
|
229
202
|
}
|
|
230
|
-
|
|
231
203
|
function loadSyncConfig(configPath) {
|
|
232
204
|
try {
|
|
233
205
|
const rawConfig = fs.readFileSync(configPath, "utf-8");
|
|
@@ -239,51 +211,45 @@ function loadSyncConfig(configPath) {
|
|
|
239
211
|
? parsedConfig.fileTypeRegexes
|
|
240
212
|
: (parsedConfig.fileTypeRegexes ? [parsedConfig.fileTypeRegexes] : []);
|
|
241
213
|
const mergedIncludes = includes.length > 0 ? includes : legacyIncludes;
|
|
242
|
-
|
|
243
214
|
return {
|
|
244
215
|
storageAccount: parsedConfig.storageAccount ?? "",
|
|
245
216
|
container: parsedConfig.container ?? "",
|
|
246
217
|
includes: mergedIncludes,
|
|
247
218
|
configPath
|
|
248
219
|
};
|
|
249
|
-
}
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
250
222
|
console.log();
|
|
251
223
|
console.log(chalk.red(`Failed to read ${configPath}.`));
|
|
252
|
-
console.log(error
|
|
224
|
+
console.log(getErrorMessage(error));
|
|
253
225
|
console.log();
|
|
254
226
|
return null;
|
|
255
227
|
}
|
|
256
228
|
}
|
|
257
|
-
|
|
258
229
|
function matchesGlob(relativePath, globList) {
|
|
259
230
|
if (!Array.isArray(globList) || globList.length === 0) {
|
|
260
231
|
return false;
|
|
261
232
|
}
|
|
262
|
-
|
|
263
233
|
const normalizedPath = relativePath.split(path.sep).join("/");
|
|
264
|
-
|
|
265
234
|
for (const pattern of globList) {
|
|
266
235
|
try {
|
|
267
236
|
const regex = globToRegExp(pattern);
|
|
268
237
|
if (regex.test(normalizedPath)) {
|
|
269
238
|
return true;
|
|
270
239
|
}
|
|
271
|
-
}
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
272
242
|
continue;
|
|
273
243
|
}
|
|
274
244
|
}
|
|
275
|
-
|
|
276
245
|
return false;
|
|
277
246
|
}
|
|
278
|
-
|
|
279
247
|
function globToRegExp(pattern) {
|
|
280
248
|
const normalizedPattern = pattern.split(path.sep).join("/").trim();
|
|
281
249
|
let regexBody = "";
|
|
282
250
|
let index = 0;
|
|
283
|
-
|
|
284
251
|
while (index < normalizedPattern.length) {
|
|
285
252
|
const char = normalizedPattern[index];
|
|
286
|
-
|
|
287
253
|
if (char === "*") {
|
|
288
254
|
const nextChar = normalizedPattern[index + 1];
|
|
289
255
|
if (nextChar === "*") {
|
|
@@ -292,51 +258,41 @@ function globToRegExp(pattern) {
|
|
|
292
258
|
index += isSlash ? 3 : 2;
|
|
293
259
|
continue;
|
|
294
260
|
}
|
|
295
|
-
|
|
296
261
|
regexBody += "[^/]*";
|
|
297
262
|
index += 1;
|
|
298
263
|
continue;
|
|
299
264
|
}
|
|
300
|
-
|
|
301
265
|
if (char === "?") {
|
|
302
266
|
regexBody += "[^/]";
|
|
303
267
|
index += 1;
|
|
304
268
|
continue;
|
|
305
269
|
}
|
|
306
|
-
|
|
307
270
|
regexBody += char.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
308
271
|
index += 1;
|
|
309
272
|
}
|
|
310
|
-
|
|
311
273
|
return new RegExp(`^${regexBody}$`);
|
|
312
274
|
}
|
|
313
|
-
|
|
314
275
|
async function ensureDirectory(dirPath) {
|
|
315
276
|
if (!dirPath) {
|
|
316
277
|
return;
|
|
317
278
|
}
|
|
318
|
-
|
|
319
279
|
await fs.promises.mkdir(dirPath, { recursive: true });
|
|
320
280
|
}
|
|
321
|
-
|
|
322
281
|
async function executeOperations(mode, operations) {
|
|
323
282
|
if (operations.length === 0) {
|
|
324
283
|
console.log(chalk.yellow("No changes detected."));
|
|
325
284
|
console.log();
|
|
326
285
|
return;
|
|
327
286
|
}
|
|
328
|
-
|
|
329
287
|
const uploadOps = operations.filter(operation => operation.type === "upload");
|
|
330
288
|
const downloadOps = operations.filter(operation => operation.type === "download");
|
|
331
289
|
const deleteOps = operations.filter(operation => operation.type === "delete");
|
|
332
|
-
|
|
333
290
|
console.log(chalk.gray(`Planned ${mode} changes: ${operations.length} total (${uploadOps.length} upload, ${downloadOps.length} download, ${deleteOps.length} delete)`));
|
|
334
291
|
operations.forEach(operation => {
|
|
335
|
-
const name = operation
|
|
292
|
+
const name = getOperationDisplayName(operation);
|
|
336
293
|
console.log(chalk.gray(`- ${operation.type}: ${name}`));
|
|
337
294
|
});
|
|
338
295
|
console.log();
|
|
339
|
-
|
|
340
296
|
const confirmation = await prompts([
|
|
341
297
|
{
|
|
342
298
|
type: "confirm",
|
|
@@ -352,16 +308,13 @@ async function executeOperations(mode, operations) {
|
|
|
352
308
|
return false;
|
|
353
309
|
}
|
|
354
310
|
});
|
|
355
|
-
|
|
356
311
|
if (!confirmation.proceed) {
|
|
357
312
|
console.log(chalk.yellow("No changes applied."));
|
|
358
313
|
console.log();
|
|
359
314
|
return;
|
|
360
315
|
}
|
|
361
|
-
|
|
362
316
|
const spinner = ora(`Syncing ${operations.length} changes...`).start();
|
|
363
317
|
const failures = [];
|
|
364
|
-
|
|
365
318
|
for (let index = 0; index < operations.length; index += 1) {
|
|
366
319
|
const operation = operations[index];
|
|
367
320
|
try {
|
|
@@ -370,84 +323,68 @@ async function executeOperations(mode, operations) {
|
|
|
370
323
|
spinner.text = `Uploading ${operation.localFile.relativePath} (${index + 1}/${operations.length})`;
|
|
371
324
|
const md5Base64 = operation.localFile.md5Base64
|
|
372
325
|
?? await getLocalMd5Base64(operation.localFile.filePath);
|
|
373
|
-
await operation.azure.uploadFile(
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
operation.localFile.filePath,
|
|
377
|
-
md5Base64,
|
|
378
|
-
progress => {
|
|
379
|
-
if (!totalBytes) {
|
|
380
|
-
return;
|
|
381
|
-
}
|
|
382
|
-
const percent = ((progress.loadedBytes / totalBytes) * 100).toFixed(1);
|
|
383
|
-
spinner.text = `Uploading ${operation.localFile.relativePath} ${percent}% (${formatBytes(progress.loadedBytes)}/${formatBytes(totalBytes)})`;
|
|
326
|
+
await operation.azure.uploadFile(operation.containerClient, operation.localFile.blobPath, operation.localFile.filePath, md5Base64, progress => {
|
|
327
|
+
if (!totalBytes) {
|
|
328
|
+
return;
|
|
384
329
|
}
|
|
385
|
-
|
|
386
|
-
|
|
330
|
+
const percent = ((progress.loadedBytes / totalBytes) * 100).toFixed(1);
|
|
331
|
+
spinner.text = `Uploading ${operation.localFile.relativePath} ${percent}% (${formatBytes(progress.loadedBytes)}/${formatBytes(totalBytes)})`;
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
else if (operation.type === "download") {
|
|
387
335
|
const totalBytes = operation.localFile.size ?? null;
|
|
388
336
|
spinner.text = `Downloading ${operation.localFile.relativePath} (${index + 1}/${operations.length})`;
|
|
389
337
|
await ensureDirectory(path.dirname(operation.localFile.filePath));
|
|
390
|
-
await operation.azure.downloadToFile(
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
operation.localFile.filePath,
|
|
394
|
-
progress => {
|
|
395
|
-
if (!totalBytes) {
|
|
396
|
-
return;
|
|
397
|
-
}
|
|
398
|
-
const percent = ((progress.loadedBytes / totalBytes) * 100).toFixed(1);
|
|
399
|
-
spinner.text = `Downloading ${operation.localFile.relativePath} ${percent}% (${formatBytes(progress.loadedBytes)}/${formatBytes(totalBytes)})`;
|
|
338
|
+
await operation.azure.downloadToFile(operation.containerClient, operation.localFile.blobPath, operation.localFile.filePath, progress => {
|
|
339
|
+
if (!totalBytes) {
|
|
340
|
+
return;
|
|
400
341
|
}
|
|
401
|
-
|
|
402
|
-
|
|
342
|
+
const percent = ((progress.loadedBytes / totalBytes) * 100).toFixed(1);
|
|
343
|
+
spinner.text = `Downloading ${operation.localFile.relativePath} ${percent}% (${formatBytes(progress.loadedBytes)}/${formatBytes(totalBytes)})`;
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
else if (operation.type === "delete") {
|
|
403
347
|
spinner.text = `Deleting ${operation.blobPath} (${index + 1}/${operations.length})`;
|
|
404
348
|
await operation.azure.deleteBlob(operation.containerClient, operation.blobPath);
|
|
405
349
|
}
|
|
406
|
-
}
|
|
350
|
+
}
|
|
351
|
+
catch (error) {
|
|
407
352
|
failures.push({ operation, error });
|
|
408
|
-
spinner.warn(`Failed ${operation.type}: ${operation
|
|
353
|
+
spinner.warn(`Failed ${operation.type}: ${getOperationDisplayName(operation)}`);
|
|
409
354
|
spinner.start();
|
|
410
355
|
}
|
|
411
356
|
}
|
|
412
|
-
|
|
413
357
|
if (failures.length > 0) {
|
|
414
358
|
spinner.warn(`Completed with ${failures.length} failures.`);
|
|
415
359
|
failures.forEach(({ operation, error }) => {
|
|
416
|
-
const name = operation
|
|
417
|
-
console.log(chalk.red(`- ${name}: ${error
|
|
360
|
+
const name = getOperationDisplayName(operation);
|
|
361
|
+
console.log(chalk.red(`- ${name}: ${getErrorMessage(error)}`));
|
|
418
362
|
});
|
|
419
|
-
}
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
420
365
|
spinner.succeed(`Synced ${operations.length} changes.`);
|
|
421
366
|
}
|
|
422
|
-
|
|
423
367
|
console.log();
|
|
424
368
|
}
|
|
425
|
-
|
|
426
369
|
async function getLocalMd5Base64(filePath) {
|
|
427
370
|
return new Promise((resolve, reject) => {
|
|
428
371
|
const hash = crypto.createHash("md5");
|
|
429
372
|
const stream = fs.createReadStream(filePath);
|
|
430
|
-
|
|
431
373
|
stream.on("data", chunk => hash.update(chunk));
|
|
432
374
|
stream.on("error", reject);
|
|
433
375
|
stream.on("end", () => resolve(hash.digest("base64")));
|
|
434
376
|
});
|
|
435
377
|
}
|
|
436
|
-
|
|
437
378
|
async function buildPushOperations(syncState, azure) {
|
|
438
379
|
const operations = [];
|
|
439
|
-
|
|
440
380
|
for (const entry of syncState.values()) {
|
|
441
381
|
if (!validateConfig(entry.config)) {
|
|
442
382
|
continue;
|
|
443
383
|
}
|
|
444
|
-
|
|
445
384
|
const containerClient = azure.getContainerClient(entry.config.storageAccount, entry.config.container);
|
|
446
385
|
const remoteBlobs = await listRemoteBlobNames(containerClient, entry.config.includes);
|
|
447
|
-
|
|
448
386
|
for (const localFile of entry.localFiles.values()) {
|
|
449
387
|
const existsRemote = remoteBlobs.has(localFile.blobPath);
|
|
450
|
-
|
|
451
388
|
if (!existsRemote) {
|
|
452
389
|
operations.push({
|
|
453
390
|
type: "upload",
|
|
@@ -457,10 +394,8 @@ async function buildPushOperations(syncState, azure) {
|
|
|
457
394
|
});
|
|
458
395
|
continue;
|
|
459
396
|
}
|
|
460
|
-
|
|
461
397
|
const remoteHash = await azure.getBlobMd5Base64(containerClient, localFile.blobPath);
|
|
462
398
|
const localHash = await getLocalMd5Base64(localFile.filePath);
|
|
463
|
-
|
|
464
399
|
if (!remoteHash || !localHash || remoteHash !== localHash) {
|
|
465
400
|
localFile.md5Base64 = localHash;
|
|
466
401
|
operations.push({
|
|
@@ -470,10 +405,8 @@ async function buildPushOperations(syncState, azure) {
|
|
|
470
405
|
localFile
|
|
471
406
|
});
|
|
472
407
|
}
|
|
473
|
-
|
|
474
408
|
remoteBlobs.delete(localFile.blobPath);
|
|
475
409
|
}
|
|
476
|
-
|
|
477
410
|
for (const blobName of remoteBlobs.values()) {
|
|
478
411
|
operations.push({
|
|
479
412
|
type: "delete",
|
|
@@ -483,35 +416,27 @@ async function buildPushOperations(syncState, azure) {
|
|
|
483
416
|
});
|
|
484
417
|
}
|
|
485
418
|
}
|
|
486
|
-
|
|
487
419
|
return operations;
|
|
488
420
|
}
|
|
489
|
-
|
|
490
421
|
async function buildPullOperations(syncState, azure) {
|
|
491
422
|
const operations = [];
|
|
492
|
-
|
|
493
423
|
for (const entry of syncState.values()) {
|
|
494
424
|
if (!validateConfig(entry.config)) {
|
|
495
425
|
continue;
|
|
496
426
|
}
|
|
497
|
-
|
|
498
427
|
const containerClient = azure.getContainerClient(entry.config.storageAccount, entry.config.container);
|
|
499
428
|
const blobs = await azure.listBlobs(containerClient);
|
|
500
|
-
|
|
501
429
|
for (const blob of blobs) {
|
|
502
430
|
if (!matchesGlob(blob.name, entry.config.includes)) {
|
|
503
431
|
continue;
|
|
504
432
|
}
|
|
505
|
-
|
|
506
433
|
const localPath = path.join(entry.rootDir, blob.name.split("/").join(path.sep));
|
|
507
434
|
const localExists = fs.existsSync(localPath);
|
|
508
435
|
const remoteHash = await azure.getBlobMd5Base64(containerClient, blob.name);
|
|
509
436
|
let localHash = null;
|
|
510
|
-
|
|
511
437
|
if (localExists) {
|
|
512
438
|
localHash = await getLocalMd5Base64(localPath);
|
|
513
439
|
}
|
|
514
|
-
|
|
515
440
|
if (!remoteHash || !localHash || remoteHash !== localHash) {
|
|
516
441
|
operations.push({
|
|
517
442
|
type: "download",
|
|
@@ -521,30 +446,25 @@ async function buildPullOperations(syncState, azure) {
|
|
|
521
446
|
filePath: localPath,
|
|
522
447
|
relativePath: path.relative(entry.rootDir, localPath),
|
|
523
448
|
blobPath: blob.name,
|
|
524
|
-
size:
|
|
449
|
+
size: null
|
|
525
450
|
}
|
|
526
451
|
});
|
|
527
452
|
}
|
|
528
453
|
}
|
|
529
454
|
}
|
|
530
|
-
|
|
531
455
|
return operations;
|
|
532
456
|
}
|
|
533
|
-
|
|
534
457
|
function validateConfig(config) {
|
|
535
458
|
if (!config.storageAccount || !config.container) {
|
|
536
459
|
console.log(chalk.yellow(`Skipping config at ${config.configPath} (missing storage account or container).`));
|
|
537
460
|
return false;
|
|
538
461
|
}
|
|
539
|
-
|
|
540
462
|
if (!config.includes || config.includes.length === 0) {
|
|
541
463
|
console.log(chalk.yellow(`Skipping config at ${config.configPath} (no includes configured).`));
|
|
542
464
|
return false;
|
|
543
465
|
}
|
|
544
|
-
|
|
545
466
|
return true;
|
|
546
467
|
}
|
|
547
|
-
|
|
548
468
|
async function listRemoteBlobNames(containerClient, includes) {
|
|
549
469
|
const remoteBlobs = new Set();
|
|
550
470
|
for await (const blob of containerClient.listBlobsFlat()) {
|
|
@@ -555,14 +475,13 @@ async function listRemoteBlobNames(containerClient, includes) {
|
|
|
555
475
|
}
|
|
556
476
|
return remoteBlobs;
|
|
557
477
|
}
|
|
558
|
-
|
|
559
478
|
function formatBytes(bytes) {
|
|
560
479
|
if (!bytes || bytes <= 0) {
|
|
561
480
|
return "0 B";
|
|
562
481
|
}
|
|
563
|
-
|
|
564
482
|
const units = ["B", "KB", "MB", "GB", "TB"];
|
|
565
483
|
const index = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);
|
|
566
484
|
const value = bytes / Math.pow(1024, index);
|
|
567
485
|
return `${value.toFixed(value >= 10 || index === 0 ? 0 : 1)} ${units[index]}`;
|
|
568
|
-
}
|
|
486
|
+
}
|
|
487
|
+
//# sourceMappingURL=azureSync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azureSync.js","sourceRoot":"","sources":["../../src/modules/azureSync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundleProduct.d.ts","sourceRoot":"","sources":["../../src/modules/bundleProduct.ts"],"names":[],"mappings":"AAeA,wBAA8B,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAwIxE"}
|