@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.
Files changed (152) hide show
  1. package/README.md +12 -1
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +158 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/modules/adbBridge.d.ts +2 -0
  7. package/dist/modules/adbBridge.d.ts.map +1 -0
  8. package/dist/modules/adbBridge.js +40 -0
  9. package/dist/modules/adbBridge.js.map +1 -0
  10. package/dist/modules/adbIntentSender.d.ts +2 -0
  11. package/dist/modules/adbIntentSender.d.ts.map +1 -0
  12. package/dist/modules/adbIntentSender.js +67 -0
  13. package/dist/modules/adbIntentSender.js.map +1 -0
  14. package/dist/modules/azureSync.d.ts +4 -0
  15. package/dist/modules/azureSync.d.ts.map +1 -0
  16. package/{src → dist}/modules/azureSync.js +50 -131
  17. package/dist/modules/azureSync.js.map +1 -0
  18. package/dist/modules/bundleProduct.d.ts +2 -0
  19. package/dist/modules/bundleProduct.d.ts.map +1 -0
  20. package/{src → dist}/modules/bundleProduct.js +41 -80
  21. package/dist/modules/bundleProduct.js.map +1 -0
  22. package/dist/modules/changelog.d.ts +3 -0
  23. package/dist/modules/changelog.d.ts.map +1 -0
  24. package/dist/modules/changelog.js +45 -0
  25. package/dist/modules/changelog.js.map +1 -0
  26. package/dist/modules/configMutation.d.ts +2 -0
  27. package/dist/modules/configMutation.d.ts.map +1 -0
  28. package/{src → dist}/modules/configMutation.js +54 -101
  29. package/dist/modules/configMutation.js.map +1 -0
  30. package/dist/modules/csvMerger.d.ts +2 -0
  31. package/dist/modules/csvMerger.d.ts.map +1 -0
  32. package/dist/modules/csvMerger.js +104 -0
  33. package/dist/modules/csvMerger.js.map +1 -0
  34. package/dist/modules/deleteDB.d.ts +2 -0
  35. package/dist/modules/deleteDB.d.ts.map +1 -0
  36. package/dist/modules/deleteDB.js +75 -0
  37. package/dist/modules/deleteDB.js.map +1 -0
  38. package/dist/modules/dumpDB.d.ts +3 -0
  39. package/dist/modules/dumpDB.d.ts.map +1 -0
  40. package/{src → dist}/modules/dumpDB.js +64 -89
  41. package/dist/modules/dumpDB.js.map +1 -0
  42. package/dist/modules/dumpTableToCSV.d.ts +2 -0
  43. package/dist/modules/dumpTableToCSV.d.ts.map +1 -0
  44. package/dist/modules/dumpTableToCSV.js +128 -0
  45. package/dist/modules/dumpTableToCSV.js.map +1 -0
  46. package/dist/modules/extdSearch.d.ts +2 -0
  47. package/dist/modules/extdSearch.d.ts.map +1 -0
  48. package/{src → dist}/modules/extdSearch.js +60 -60
  49. package/dist/modules/extdSearch.js.map +1 -0
  50. package/dist/modules/githubDeploymentKey.d.ts +3 -0
  51. package/dist/modules/githubDeploymentKey.d.ts.map +1 -0
  52. package/dist/modules/githubDeploymentKey.js +241 -0
  53. package/dist/modules/githubDeploymentKey.js.map +1 -0
  54. package/dist/modules/githubDeploymentKeysList.d.ts +6 -0
  55. package/dist/modules/githubDeploymentKeysList.d.ts.map +1 -0
  56. package/dist/modules/githubDeploymentKeysList.js +185 -0
  57. package/dist/modules/githubDeploymentKeysList.js.map +1 -0
  58. package/dist/modules/githubSecurityAdvisories.d.ts +3 -0
  59. package/dist/modules/githubSecurityAdvisories.d.ts.map +1 -0
  60. package/dist/modules/githubSecurityAdvisories.js +145 -0
  61. package/dist/modules/githubSecurityAdvisories.js.map +1 -0
  62. package/dist/modules/graphqlSchemaExport.d.ts +2 -0
  63. package/dist/modules/graphqlSchemaExport.d.ts.map +1 -0
  64. package/dist/modules/graphqlSchemaExport.js +59 -0
  65. package/dist/modules/graphqlSchemaExport.js.map +1 -0
  66. package/dist/modules/importDB.d.ts +2 -0
  67. package/dist/modules/importDB.d.ts.map +1 -0
  68. package/{src → dist}/modules/importDB.js +48 -66
  69. package/dist/modules/importDB.js.map +1 -0
  70. package/dist/modules/rewriteConfig.d.ts +3 -0
  71. package/dist/modules/rewriteConfig.d.ts.map +1 -0
  72. package/dist/modules/rewriteConfig.js +75 -0
  73. package/dist/modules/rewriteConfig.js.map +1 -0
  74. package/dist/modules/setCLIConfig.d.ts +2 -0
  75. package/dist/modules/setCLIConfig.d.ts.map +1 -0
  76. package/dist/modules/setCLIConfig.js +29 -0
  77. package/dist/modules/setCLIConfig.js.map +1 -0
  78. package/dist/modules/syncConfig.d.ts +2 -0
  79. package/dist/modules/syncConfig.d.ts.map +1 -0
  80. package/{src → dist}/modules/syncConfig.js +74 -127
  81. package/dist/modules/syncConfig.js.map +1 -0
  82. package/dist/modules/t003Rewrite.d.ts +2 -0
  83. package/dist/modules/t003Rewrite.d.ts.map +1 -0
  84. package/dist/modules/t003Rewrite.js +53 -0
  85. package/dist/modules/t003Rewrite.js.map +1 -0
  86. package/dist/modules/t009Search.d.ts +2 -0
  87. package/dist/modules/t009Search.d.ts.map +1 -0
  88. package/dist/modules/t009Search.js +30 -0
  89. package/dist/modules/t009Search.js.map +1 -0
  90. package/{src → dist}/ressources/cmds.json +3 -0
  91. package/dist/utils/azure/azure.d.ts +24 -0
  92. package/dist/utils/azure/azure.d.ts.map +1 -0
  93. package/{src → dist}/utils/azure/azure.js +14 -21
  94. package/dist/utils/azure/azure.js.map +1 -0
  95. package/dist/utils/config/config.d.ts +27 -0
  96. package/dist/utils/config/config.d.ts.map +1 -0
  97. package/dist/utils/config/config.js +74 -0
  98. package/dist/utils/config/config.js.map +1 -0
  99. package/dist/utils/db/DB.d.ts +14 -0
  100. package/dist/utils/db/DB.d.ts.map +1 -0
  101. package/dist/utils/db/DB.js +61 -0
  102. package/dist/utils/db/DB.js.map +1 -0
  103. package/dist/utils/fs/FS.d.ts +15 -0
  104. package/dist/utils/fs/FS.d.ts.map +1 -0
  105. package/{src → dist}/utils/fs/FS.js +31 -45
  106. package/dist/utils/fs/FS.js.map +1 -0
  107. package/dist/utils/github/github.d.ts +29 -0
  108. package/dist/utils/github/github.d.ts.map +1 -0
  109. package/dist/utils/github/github.js +96 -0
  110. package/dist/utils/github/github.js.map +1 -0
  111. package/dist/utils/shell/DatabaseShell.d.ts +77 -0
  112. package/dist/utils/shell/DatabaseShell.d.ts.map +1 -0
  113. package/{src → dist}/utils/shell/DatabaseShell.js +73 -87
  114. package/dist/utils/shell/DatabaseShell.js.map +1 -0
  115. package/dist/utils/shell/DatabaseShellBuilder.d.ts +67 -0
  116. package/dist/utils/shell/DatabaseShellBuilder.d.ts.map +1 -0
  117. package/{src → dist}/utils/shell/DatabaseShellBuilder.js +50 -59
  118. package/dist/utils/shell/DatabaseShellBuilder.js.map +1 -0
  119. package/dist/utils/shell/Shell.d.ts +30 -0
  120. package/dist/utils/shell/Shell.d.ts.map +1 -0
  121. package/{src → dist}/utils/shell/Shell.js +14 -19
  122. package/dist/utils/shell/Shell.js.map +1 -0
  123. package/dist/utils/shell/ShellBuilder.d.ts +60 -0
  124. package/dist/utils/shell/ShellBuilder.d.ts.map +1 -0
  125. package/{src → dist}/utils/shell/ShellBuilder.js +23 -44
  126. package/dist/utils/shell/ShellBuilder.js.map +1 -0
  127. package/package.json +31 -8
  128. package/.github/dependabot.yml +0 -28
  129. package/.github/workflows/publish.yml +0 -31
  130. package/.husky/commit-msg +0 -1
  131. package/.vscode/settings.json +0 -6
  132. package/commitlint.config.mjs +0 -4
  133. package/src/index.js +0 -130
  134. package/src/modules/adbBridge.js +0 -52
  135. package/src/modules/adbIntentSender.js +0 -82
  136. package/src/modules/changelog.js +0 -60
  137. package/src/modules/csvMerger.js +0 -118
  138. package/src/modules/deleteDB.js +0 -84
  139. package/src/modules/dumpTableToCSV.js +0 -154
  140. package/src/modules/githubDeploymentKey.js +0 -265
  141. package/src/modules/githubDeploymentKeysList.js +0 -199
  142. package/src/modules/githubSecurityAdvisories.js +0 -162
  143. package/src/modules/graphqlSchemaExport.js +0 -61
  144. package/src/modules/rewriteConfig.js +0 -93
  145. package/src/modules/setCLIConfig.js +0 -33
  146. package/src/modules/t003Rewrite.js +0 -64
  147. package/src/modules/t009Search.js +0 -34
  148. package/src/utils/config/config.js +0 -70
  149. package/src/utils/db/DB.js +0 -54
  150. package/src/utils/github/github.js +0 -102
  151. /package/{src → dist}/ressources/wegas_p.ico +0 -0
  152. /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
- } catch (error) {
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?.message ?? 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
- } catch (error) {
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?.message ?? 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
- } catch (error) {
220
+ }
221
+ catch (error) {
250
222
  console.log();
251
223
  console.log(chalk.red(`Failed to read ${configPath}.`));
252
- console.log(error?.message ?? 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
- } catch (error) {
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.localFile?.relativePath ?? operation.blobPath;
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
- operation.containerClient,
375
- operation.localFile.blobPath,
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
- } else if (operation.type === "download") {
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
- operation.containerClient,
392
- operation.localFile.blobPath,
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
- } else if (operation.type === "delete") {
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
- } catch (error) {
350
+ }
351
+ catch (error) {
407
352
  failures.push({ operation, error });
408
- spinner.warn(`Failed ${operation.type}: ${operation.localFile?.relativePath ?? operation.blobPath}`);
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.localFile?.relativePath ?? operation.blobPath;
417
- console.log(chalk.red(`- ${name}: ${error?.message ?? error}`));
360
+ const name = getOperationDisplayName(operation);
361
+ console.log(chalk.red(`- ${name}: ${getErrorMessage(error)}`));
418
362
  });
419
- } else {
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: blob.properties?.contentLength ?? null
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,2 @@
1
+ export default function bundleProduct(_cli: unknown): Promise<void>;
2
+ //# sourceMappingURL=bundleProduct.d.ts.map
@@ -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"}