@datatruck/cli 0.37.0 → 0.38.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 (70) hide show
  1. package/config.schema.json +130 -74
  2. package/lib/actions/BackupAction.d.ts +55 -19
  3. package/lib/actions/BackupAction.js +31 -7
  4. package/lib/actions/CleanCacheAction.d.ts +6 -7
  5. package/lib/actions/CleanCacheAction.js +2 -1
  6. package/lib/actions/ConfigAction.d.ts +3 -5
  7. package/lib/actions/ConfigAction.js +0 -1
  8. package/lib/actions/CopyAction.d.ts +37 -11
  9. package/lib/actions/CopyAction.js +29 -2
  10. package/lib/actions/ExportAction.d.ts +94 -0
  11. package/lib/actions/ExportAction.js +236 -0
  12. package/lib/actions/InitAction.d.ts +17 -7
  13. package/lib/actions/InitAction.js +9 -1
  14. package/lib/actions/PruneAction.d.ts +76 -17
  15. package/lib/actions/PruneAction.js +62 -2
  16. package/lib/actions/RestoreAction.d.ts +55 -21
  17. package/lib/actions/RestoreAction.js +44 -56
  18. package/lib/actions/SnapshotsAction.d.ts +80 -21
  19. package/lib/actions/SnapshotsAction.js +82 -1
  20. package/lib/cli.d.ts +0 -3
  21. package/lib/cli.js +14 -93
  22. package/lib/commands/BackupCommand.d.ts +120 -13
  23. package/lib/commands/BackupCommand.js +22 -50
  24. package/lib/commands/CleanCacheCommand.d.ts +10 -3
  25. package/lib/commands/CleanCacheCommand.js +14 -6
  26. package/lib/commands/CommandAbstract.d.ts +10 -10
  27. package/lib/commands/CommandAbstract.js +6 -9
  28. package/lib/commands/ConfigCommand.d.ts +72 -9
  29. package/lib/commands/ConfigCommand.js +36 -28
  30. package/lib/commands/CopyCommand.d.ts +102 -10
  31. package/lib/commands/CopyCommand.js +18 -40
  32. package/lib/commands/ExportCommand.d.ts +143 -0
  33. package/lib/commands/ExportCommand.js +50 -0
  34. package/lib/commands/InitCommand.d.ts +42 -7
  35. package/lib/commands/InitCommand.js +15 -17
  36. package/lib/commands/PruneCommand.d.ts +237 -17
  37. package/lib/commands/PruneCommand.js +27 -99
  38. package/lib/commands/RestoreCommand.d.ts +126 -13
  39. package/lib/commands/RestoreCommand.js +20 -49
  40. package/lib/commands/RunCommand.d.ts +23 -4
  41. package/lib/commands/RunCommand.js +21 -12
  42. package/lib/commands/SnapshotsCommand.d.ts +240 -23
  43. package/lib/commands/SnapshotsCommand.js +23 -101
  44. package/lib/commands/StartServerCommand.d.ts +10 -3
  45. package/lib/commands/StartServerCommand.js +11 -3
  46. package/lib/repositories/DatatruckRepository.js +1 -1
  47. package/lib/repositories/GitRepository.js +5 -2
  48. package/lib/tasks/MssqlTask.js +1 -1
  49. package/lib/tasks/MysqlDumpTask.js +1 -1
  50. package/lib/tasks/SqlDumpTaskAbstract.js +2 -2
  51. package/lib/utils/cli.d.ts +0 -17
  52. package/lib/utils/cli.js +1 -47
  53. package/lib/utils/datatruck/command.d.ts +6 -5
  54. package/lib/utils/datatruck/command.js +9 -5
  55. package/lib/utils/datatruck/job.js +17 -12
  56. package/lib/utils/datatruck/repository.d.ts +1 -0
  57. package/lib/utils/datatruck/repository.js +8 -1
  58. package/lib/utils/git.d.ts +5 -1
  59. package/lib/utils/git.js +7 -3
  60. package/lib/utils/math.js +1 -1
  61. package/lib/utils/object.d.ts +5 -0
  62. package/lib/utils/object.js +10 -1
  63. package/lib/utils/options.d.ts +24 -0
  64. package/lib/utils/options.js +94 -0
  65. package/lib/utils/progress.js +1 -1
  66. package/lib/utils/restic.js +1 -1
  67. package/lib/utils/string.d.ts +2 -1
  68. package/lib/utils/string.js +5 -1
  69. package/lib/utils/watcher.js +1 -1
  70. package/package.json +4 -4
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createCommands = exports.createCommand = exports.datatruckCommandMap = void 0;
3
+ exports.createCommands = exports.createCommand = exports.datatruckCommands = void 0;
4
4
  const BackupCommand_1 = require("../../commands/BackupCommand");
5
5
  const CleanCacheCommand_1 = require("../../commands/CleanCacheCommand");
6
6
  const ConfigCommand_1 = require("../../commands/ConfigCommand");
7
7
  const CopyCommand_1 = require("../../commands/CopyCommand");
8
+ const ExportCommand_1 = require("../../commands/ExportCommand");
8
9
  const InitCommand_1 = require("../../commands/InitCommand");
9
10
  const PruneCommand_1 = require("../../commands/PruneCommand");
10
11
  const RestoreCommand_1 = require("../../commands/RestoreCommand");
@@ -13,7 +14,7 @@ const SnapshotsCommand_1 = require("../../commands/SnapshotsCommand");
13
14
  const StartServerCommand_1 = require("../../commands/StartServerCommand");
14
15
  const error_1 = require("../error");
15
16
  const stream_1 = require("stream");
16
- exports.datatruckCommandMap = {
17
+ exports.datatruckCommands = {
17
18
  config: ConfigCommand_1.ConfigCommand,
18
19
  init: InitCommand_1.InitCommand,
19
20
  snapshots: SnapshotsCommand_1.SnapshotsCommand,
@@ -24,9 +25,10 @@ exports.datatruckCommandMap = {
24
25
  copy: CopyCommand_1.CopyCommand,
25
26
  cleanCache: CleanCacheCommand_1.CleanCacheCommand,
26
27
  startServer: StartServerCommand_1.StartServerCommand,
28
+ export: ExportCommand_1.ExportCommand,
27
29
  };
28
30
  function createCommand(name, globalOptions, options, streams, configPath) {
29
- const constructor = exports.datatruckCommandMap[name];
31
+ const constructor = exports.datatruckCommands[name];
30
32
  if (!constructor)
31
33
  throw new error_1.AppError(`Invalid command name: ${name}`);
32
34
  return new constructor(globalOptions, options, streams, configPath);
@@ -34,7 +36,7 @@ function createCommand(name, globalOptions, options, streams, configPath) {
34
36
  exports.createCommand = createCommand;
35
37
  function createCommands(globalOptions) {
36
38
  const object = {};
37
- for (const name in exports.datatruckCommandMap) {
39
+ for (const name in exports.datatruckCommands) {
38
40
  object[name] = async (options) => {
39
41
  let stdoutData = "";
40
42
  const stdout = new stream_1.Writable({
@@ -51,7 +53,9 @@ function createCommands(globalOptions) {
51
53
  if (exitCode !== 0)
52
54
  throw new Error(`Invalid exit code: ${exitCode}`);
53
55
  await end();
54
- return JSON.parse(stdoutData);
56
+ return ["run", "export"].includes(name)
57
+ ? undefined
58
+ : JSON.parse(stdoutData);
55
59
  }
56
60
  finally {
57
61
  await end();
@@ -4,6 +4,7 @@ exports.runJob = void 0;
4
4
  const async_process_1 = require("../async-process");
5
5
  const cli_1 = require("../cli");
6
6
  const fs_1 = require("../fs");
7
+ const options_1 = require("../options");
7
8
  const command_1 = require("./command");
8
9
  const cron_server_1 = require("./cron-server");
9
10
  const fs_2 = require("fs");
@@ -12,9 +13,9 @@ const path_1 = require("path");
12
13
  async function runJob(job, name, config) {
13
14
  let pid = 0;
14
15
  try {
15
- const Command = command_1.datatruckCommandMap[job.action];
16
+ const Command = command_1.datatruckCommands[job.action];
16
17
  const command = new Command({ config: { packages: [], repositories: [] } }, {});
17
- const cliOptions = (0, cli_1.stringifyOptions)(command.optionsConfig(), job.action === "prune"
18
+ const cliOptions = (0, options_1.stringifyOptions)(command.optionsConfig, job.action === "prune"
18
19
  ? ({ ...job.options, confirm: true })
19
20
  : job.options);
20
21
  const [node, bin] = process.argv;
@@ -26,13 +27,8 @@ async function runJob(job, name, config) {
26
27
  let stream;
27
28
  let logPath;
28
29
  const dt = new Date().toISOString().replaceAll(":", "-");
29
- if (baseLogPath) {
30
- const tmpLogPath = (0, path_1.join)(baseLogPath, dt) + ".log";
31
- await (0, promises_1.mkdir)(baseLogPath, { recursive: true });
32
- stream = (0, fs_2.createWriteStream)(tmpLogPath);
33
- }
34
- const p = new async_process_1.AsyncProcess(node, [
35
- process.env.pm_exec_path ?? bin,
30
+ const argv = [
31
+ process.env.DTT_BIN_SCRIPT ?? process.env.pm_exec_path ?? bin,
36
32
  "--tty",
37
33
  "false",
38
34
  "--progress",
@@ -41,7 +37,14 @@ async function runJob(job, name, config) {
41
37
  config.configPath,
42
38
  job.action,
43
39
  ...cliOptions,
44
- ], {
40
+ ];
41
+ if (baseLogPath) {
42
+ const tmpLogPath = (0, path_1.join)(baseLogPath, dt) + ".log";
43
+ await (0, promises_1.mkdir)(baseLogPath, { recursive: true });
44
+ stream = (0, fs_2.createWriteStream)(tmpLogPath);
45
+ stream.write(`+ dtt ${argv.join(" ")}\n`);
46
+ }
47
+ const p = new async_process_1.AsyncProcess(node, argv, {
45
48
  $log: config.verbose,
46
49
  $exitCode: false,
47
50
  env: {
@@ -59,8 +62,10 @@ async function runJob(job, name, config) {
59
62
  stream && p.stderr.pipe(stream),
60
63
  stream && p.stdout.pipe(stream),
61
64
  ]);
62
- if (stream)
63
- await (0, fs_1.safeRename)(stream.path.toString(), (logPath = (0, path_1.join)(stream.path.toString(), `${dt}-${pid}.log`)));
65
+ if (stream) {
66
+ const base = (0, path_1.dirname)(stream.path.toString());
67
+ await (0, fs_1.safeRename)(stream.path.toString(), (logPath = (0, path_1.join)(base, `${dt}-${pid}.log`)));
68
+ }
64
69
  if (config.log)
65
70
  (0, cli_1.logJson)("job", `'${name}' finished`, {
66
71
  pid,
@@ -13,4 +13,5 @@ export declare function getRepoConstructor(type: keyof typeof repoMap): {
13
13
  };
14
14
  export declare function createRepo(repository: RepositoryConfig, verbose: boolean | undefined): RepositoryAbstract<any>;
15
15
  export declare function createAndInitRepo(repository: RepositoryConfig, verbose: boolean | undefined): Promise<RepositoryAbstract<any>>;
16
+ export declare function initSnapshotPath(path: string, minFreeDiskSpace?: string | number): Promise<void>;
16
17
  export {};
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createAndInitRepo = exports.createRepo = exports.getRepoConstructor = void 0;
3
+ exports.initSnapshotPath = exports.createAndInitRepo = exports.createRepo = exports.getRepoConstructor = void 0;
4
4
  const DatatruckRepository_1 = require("../../repositories/DatatruckRepository");
5
5
  const GitRepository_1 = require("../../repositories/GitRepository");
6
6
  const ResticRepository_1 = require("../../repositories/ResticRepository");
7
7
  const error_1 = require("../error");
8
+ const fs_1 = require("../fs");
8
9
  const repoMap = {
9
10
  [GitRepository_1.gitRepositoryName]: GitRepository_1.GitRepository,
10
11
  [ResticRepository_1.resticRepositoryName]: ResticRepository_1.ResticRepository,
@@ -28,3 +29,9 @@ async function createAndInitRepo(repository, verbose) {
28
29
  return repo;
29
30
  }
30
31
  exports.createAndInitRepo = createAndInitRepo;
32
+ async function initSnapshotPath(path, minFreeDiskSpace) {
33
+ await (0, fs_1.initEmptyDir)(path);
34
+ if (minFreeDiskSpace)
35
+ await (0, fs_1.ensureFreeDiskSpace)([path], minFreeDiskSpace);
36
+ }
37
+ exports.initSnapshotPath = initSnapshotPath;
@@ -37,7 +37,11 @@ export declare class Git {
37
37
  name: string;
38
38
  message?: string | undefined;
39
39
  }[]>;
40
- addTag(name: string, message?: string): Promise<void>;
40
+ addTag(name: string, message?: string, options?: {
41
+ allowEmpty?: boolean;
42
+ userName?: string;
43
+ userEmail?: string;
44
+ }): Promise<void>;
41
45
  pushTags(): Promise<void>;
42
46
  push(options: {
43
47
  branchName: string;
package/lib/utils/git.js CHANGED
@@ -98,12 +98,16 @@ class Git {
98
98
  return result;
99
99
  }, []);
100
100
  }
101
- async addTag(name, message) {
101
+ async addTag(name, message, options = {}) {
102
+ const commit = [
103
+ ...(options.userName ? ["-c", `user.name='${options.userName}'`] : []),
104
+ ...(options.userEmail ? ["-c", `user.email='${options.userEmail}'`] : []),
105
+ ];
102
106
  if (message) {
103
- await this.exec(["tag", "-a", name, "-m", message]);
107
+ await this.exec([...commit, "tag", "-a", name, "-m", message]);
104
108
  }
105
109
  else {
106
- await this.exec(["tag", name]);
110
+ await this.exec([...commit, "tag", name]);
107
111
  }
108
112
  }
109
113
  async pushTags() {
package/lib/utils/math.js CHANGED
@@ -10,7 +10,7 @@ exports.progressPercent = progressPercent;
10
10
  class Counter {
11
11
  maxValue;
12
12
  value = 0;
13
- constructor(maxValue = 4294967295) {
13
+ constructor(maxValue = 4_294_967_295) {
14
14
  this.maxValue = maxValue;
15
15
  }
16
16
  next() {
@@ -1,5 +1,10 @@
1
1
  export declare function merge<T extends Record<string, unknown>>(target: T, ...sources: Record<string, unknown>[]): T;
2
2
  export declare function omitProp<T extends Record<string, any>, N extends keyof T>(object: T, name: N): Omit<T, N>;
3
+ export declare function pickProps<T extends Record<string, any>, I extends {
4
+ [K in keyof T]?: boolean;
5
+ }>(object: T, input: I): {
6
+ [K in keyof T as K extends keyof I ? [I[K]] extends [true] ? K : never : never]: T[K];
7
+ };
3
8
  export declare function getErrorProperties(error: Error): Record<string, string>;
4
9
  type GroupByKeyParamType<TItem> = ((item: TItem) => string[] | string) | (keyof TItem)[] | keyof TItem;
5
10
  export declare function groupBy<TItem>(items: TItem[], keyOrCb: GroupByKeyParamType<TItem>): Record<string, TItem[]>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StrictMap = exports.groupBy = exports.getErrorProperties = exports.omitProp = exports.merge = void 0;
3
+ exports.StrictMap = exports.groupBy = exports.getErrorProperties = exports.pickProps = exports.omitProp = exports.merge = void 0;
4
4
  function merge(target, ...sources) {
5
5
  const isObject = (o) => typeof o === "object" && o !== null;
6
6
  for (const source of sources)
@@ -19,6 +19,15 @@ function omitProp(object, name) {
19
19
  return result;
20
20
  }
21
21
  exports.omitProp = omitProp;
22
+ function pickProps(object, input) {
23
+ const result = {};
24
+ for (const name in input) {
25
+ if (input[name])
26
+ result[name] = object[name];
27
+ }
28
+ return result;
29
+ }
30
+ exports.pickProps = pickProps;
22
31
  function getErrorProperties(error) {
23
32
  const alt = {};
24
33
  for (const key of Object.getOwnPropertyNames(error)) {
@@ -0,0 +1,24 @@
1
+ export type OptionsConfigObject = {
2
+ flag?: string | false;
3
+ shortFlag?: string;
4
+ description: string;
5
+ required?: boolean;
6
+ defaults?: any;
7
+ value?: "boolean" | "number" | "string" | "array" | ((value: string) => any);
8
+ };
9
+ export type OptionsConfig = Record<string, OptionsConfigObject>;
10
+ export type InferOptionsValue<O extends OptionsConfigObject> = [
11
+ O["value"]
12
+ ] extends ["number"] ? number : [O["value"]] extends ["boolean"] ? boolean : [O["value"]] extends ["array"] ? string[] : O["value"] extends (value: any) => any ? ReturnType<O["value"]> : string;
13
+ export type InferOptions<T extends OptionsConfig> = {
14
+ [K in keyof T as [T[K]["required"]] extends [true] ? K : never]: InferOptionsValue<T[K]>;
15
+ } & {
16
+ [K in keyof T as [T[K]["required"]] extends [true] ? never : K]?: InferOptionsValue<T[K]>;
17
+ };
18
+ export type CommandConfig<T extends OptionsConfig = OptionsConfig> = {
19
+ name: string;
20
+ alias?: string;
21
+ options: T;
22
+ };
23
+ export declare function createCommand<T extends OptionsConfig>(config: CommandConfig<T>, action: (options: InferOptions<T>) => any): import("commander").Command;
24
+ export declare function stringifyOptions(options: OptionsConfig, object: any): string[];
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stringifyOptions = exports.createCommand = void 0;
4
+ const string_1 = require("./string");
5
+ const commander_1 = require("commander");
6
+ function createCommand(config, action) {
7
+ const command = commander_1.program.createCommand(config.name);
8
+ const argumentOptions = [];
9
+ if (config.alias)
10
+ command.alias(config.alias);
11
+ for (const name in config.options) {
12
+ const option = config.options[name];
13
+ const flag = option.flag ?? name;
14
+ const description = `${option.description}${option.defaults ? ` (defaults: ${option.defaults})` : ""}`;
15
+ if (flag === false) {
16
+ const arg = new commander_1.Argument(name, description);
17
+ if (option.required) {
18
+ arg.argRequired();
19
+ }
20
+ else {
21
+ arg.argOptional();
22
+ }
23
+ command.addArgument(arg);
24
+ argumentOptions.push(name);
25
+ }
26
+ else if (typeof flag === "string") {
27
+ const flags = [
28
+ option.shortFlag ? `-${option.shortFlag},` : "",
29
+ `--${name}`,
30
+ option.value !== "boolean"
31
+ ? option.value === "array"
32
+ ? " <values>"
33
+ : " <value>"
34
+ : "",
35
+ ].join("");
36
+ const opt = new commander_1.Option(flags, description);
37
+ opt.makeOptionMandatory(!!option.required);
38
+ command.addOption(opt);
39
+ }
40
+ }
41
+ const parsers = {
42
+ number: Number,
43
+ array: string_1.parseStringList,
44
+ };
45
+ return command.action(async (...args) => {
46
+ const inlineValues = args.slice(0, argumentOptions.length);
47
+ const cliOptions = args[argumentOptions.length] || {};
48
+ const commandOptions = {};
49
+ for (const name in config.options) {
50
+ const option = config.options[name];
51
+ if (option.flag !== false) {
52
+ const parse = typeof option.value === "string" ? parsers[option.value] : undefined;
53
+ const cliValue = cliOptions[option.flag ?? name] ?? option.defaults;
54
+ commandOptions[name] = parse ? parse(cliValue) : cliValue;
55
+ }
56
+ }
57
+ const options = argumentOptions.reduce((result, inlineOption, index) => {
58
+ const value = inlineValues[index];
59
+ if (value !== undefined)
60
+ result[inlineOption] = value;
61
+ return result;
62
+ }, commandOptions);
63
+ return await action(options);
64
+ });
65
+ }
66
+ exports.createCommand = createCommand;
67
+ function stringifyOptions(options, object) {
68
+ const result = [];
69
+ const prepend = [];
70
+ for (const key in options) {
71
+ const option = options[key];
72
+ const value = object[key];
73
+ if (value === undefined)
74
+ continue;
75
+ if (option.flag === false) {
76
+ prepend.push(value);
77
+ }
78
+ else {
79
+ const flag = option.shortFlag
80
+ ? `-${option.shortFlag}`
81
+ : `--${option.flag ?? option.shortFlag}`;
82
+ if (option.value === "boolean") {
83
+ if (option.value)
84
+ result.push(flag);
85
+ }
86
+ else {
87
+ result.push(flag);
88
+ result.push(`${value}`);
89
+ }
90
+ }
91
+ }
92
+ return [...prepend, ...result];
93
+ }
94
+ exports.stringifyOptions = stringifyOptions;
@@ -67,7 +67,7 @@ class ProgressManager {
67
67
  this.keydownListener = undefined;
68
68
  }
69
69
  }
70
- create(input, delay = 1000) {
70
+ create(input, delay = 1_000) {
71
71
  const update = (progress, force) => {
72
72
  const text = this.renderProgress(progress, force);
73
73
  if (typeof text === "string") {
@@ -165,7 +165,7 @@ class Restic {
165
165
  }
166
166
  async restore(options) {
167
167
  let progressTimeout;
168
- const progressInterval = options.progressInterval ?? 30000;
168
+ const progressInterval = options.progressInterval ?? 30_000;
169
169
  async function progressRutine() {
170
170
  try {
171
171
  const total_bytes = await (0, fs_1.fastFolderSizeAsync)(options.target);
@@ -1,7 +1,8 @@
1
1
  export declare function snakeCase(value: string, char?: string): string;
2
+ export declare function camelize(input: string): string;
2
3
  export declare function render(subject: string, data: Record<string, string | undefined>): string;
3
4
  type NoInfer<T> = [T][T extends any ? 0 : never];
4
- export declare function parseStringList<T>(value: string | undefined, validValues?: T[], defaultsValues?: NoInfer<T>[] | true): T[];
5
+ export declare function parseStringList<T = string>(value: string | undefined, validValues?: T[], defaultsValues?: NoInfer<T>[] | true): T[];
5
6
  export type Uri = {
6
7
  protocol?: "http" | "https";
7
8
  host?: string;
@@ -1,12 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.compareJsons = exports.undefIfEmpty = exports.endsWith = exports.createPatternFilter = exports.match = exports.splitPatterns = exports.formatUri = exports.parseStringList = exports.render = exports.snakeCase = void 0;
3
+ exports.compareJsons = exports.undefIfEmpty = exports.endsWith = exports.createPatternFilter = exports.match = exports.splitPatterns = exports.formatUri = exports.parseStringList = exports.render = exports.camelize = exports.snakeCase = void 0;
4
4
  const error_1 = require("./error");
5
5
  const micromatch_1 = require("micromatch");
6
6
  function snakeCase(value, char = "_") {
7
7
  return value.replace(/[A-Z]/g, (letter) => `${char}${letter.toLowerCase()}`);
8
8
  }
9
9
  exports.snakeCase = snakeCase;
10
+ function camelize(input) {
11
+ return input.replace(/-./g, (x) => x[1].toUpperCase());
12
+ }
13
+ exports.camelize = camelize;
10
14
  function render(subject, data) {
11
15
  return subject.replace(/{([\w\./]*)}/g, function (match, name) {
12
16
  if (!name.length) {
@@ -22,7 +22,7 @@ function createWatcher(options) {
22
22
  start: () => {
23
23
  clearInterval(interval);
24
24
  rutine(true).finally(() => {
25
- interval = setInterval(rutine, options.interval ?? 5000);
25
+ interval = setInterval(rutine, options.interval ?? 5_000);
26
26
  });
27
27
  },
28
28
  stop: () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datatruck/cli",
3
- "version": "0.37.0",
3
+ "version": "0.38.1",
4
4
  "description": "Tool for creating and managing backups",
5
5
  "homepage": "https://github.com/swordev/datatruck#readme",
6
6
  "bugs": {
@@ -26,7 +26,7 @@
26
26
  "config.schema.json"
27
27
  ],
28
28
  "dependencies": {
29
- "@supercharge/promise-pool": "^3.1.1",
29
+ "@supercharge/promise-pool": "^3.2.0",
30
30
  "ajv": "^8.12.0",
31
31
  "async": "^3.2.5",
32
32
  "chalk": "^4.1.2",
@@ -37,9 +37,9 @@
37
37
  "fast-glob": "^3.3.2",
38
38
  "listr2": "^8.0.2",
39
39
  "micromatch": "^4.0.5",
40
- "mysql2": "^3.9.1",
40
+ "mysql2": "^3.9.3",
41
41
  "tty-table": "^4.2.3",
42
- "yaml": "^2.3.4"
42
+ "yaml": "^2.4.1"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/async": "^3.2.24",