@datatruck/cli 0.40.0 → 0.40.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/lib/actions/BackupAction.js +19 -12
  2. package/lib/actions/CopyAction.js +20 -12
  3. package/lib/actions/ExportAction.js +12 -5
  4. package/lib/actions/RestoreAction.js +12 -5
  5. package/lib/cli.js +2 -3
  6. package/lib/repositories/ResticRepository.d.ts +2 -2
  7. package/lib/tasks/MysqlDumpTask.js +12 -5
  8. package/lib/tasks/ScriptTask.js +2 -2
  9. package/lib/utils/async-process.d.ts +0 -5
  10. package/lib/utils/async.d.ts +0 -1
  11. package/lib/utils/async.js +1 -2
  12. package/lib/utils/bytes.js +2 -3
  13. package/lib/utils/cli.d.ts +0 -1
  14. package/lib/utils/cli.js +12 -12
  15. package/lib/utils/cron.js +1 -2
  16. package/lib/utils/crypto.js +2 -3
  17. package/lib/utils/datatruck/client.d.ts +1 -2
  18. package/lib/utils/datatruck/client.js +3 -3
  19. package/lib/utils/datatruck/command.js +3 -3
  20. package/lib/utils/datatruck/config.js +15 -15
  21. package/lib/utils/datatruck/cron-server.js +1 -2
  22. package/lib/utils/datatruck/job.js +4 -5
  23. package/lib/utils/datatruck/paths.js +2 -3
  24. package/lib/utils/datatruck/report-list.js +1 -2
  25. package/lib/utils/datatruck/repository-server.d.ts +0 -1
  26. package/lib/utils/datatruck/repository-server.js +7 -3
  27. package/lib/utils/datatruck/repository.js +4 -5
  28. package/lib/utils/datatruck/snapshot.js +1 -2
  29. package/lib/utils/datatruck/task.js +1 -2
  30. package/lib/utils/date.js +4 -5
  31. package/lib/utils/exit.js +4 -5
  32. package/lib/utils/fs.d.ts +0 -3
  33. package/lib/utils/fs.js +40 -40
  34. package/lib/utils/git.d.ts +1 -1
  35. package/lib/utils/http.d.ts +3 -7
  36. package/lib/utils/http.js +17 -17
  37. package/lib/utils/list.d.ts +2 -2
  38. package/lib/utils/list.js +36 -26
  39. package/lib/utils/logs.js +3 -3
  40. package/lib/utils/math.js +2 -2
  41. package/lib/utils/mongodb.js +2 -3
  42. package/lib/utils/mysql.d.ts +0 -1
  43. package/lib/utils/mysql.js +2 -3
  44. package/lib/utils/object.js +6 -6
  45. package/lib/utils/options.js +5 -4
  46. package/lib/utils/process.d.ts +0 -1
  47. package/lib/utils/process.js +3 -4
  48. package/lib/utils/progress.d.ts +0 -2
  49. package/lib/utils/progress.js +3 -3
  50. package/lib/utils/reportSteps.js +2 -3
  51. package/lib/utils/spawnSteps.js +2 -3
  52. package/lib/utils/stream.d.ts +0 -1
  53. package/lib/utils/stream.js +2 -3
  54. package/lib/utils/string.js +11 -12
  55. package/lib/utils/tar.js +6 -7
  56. package/lib/utils/temp.d.ts +0 -1
  57. package/lib/utils/temp.js +10 -10
  58. package/lib/utils/virtual-fs.js +2 -2
  59. package/lib/utils/watcher.js +1 -2
  60. package/package.json +14 -13
@@ -1,6 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createTaskFilter = exports.createPkgFilter = exports.params = exports.dbNameParams = exports.pkgRestorePathParams = exports.pkgExcludeParams = exports.pkgIncludeParams = exports.pkgPathParams = exports.resolvePackages = exports.resolvePackage = exports.resolveDatabaseName = exports.resolvePackagePath = exports.filterPackages = exports.filterRepositoryByEnabled = exports.ensureSameRepositoryType = exports.sortReposByType = exports.filterRepository = exports.findPackageRepositoryConfig = exports.findPackageOrFail = exports.findRepositoryOrFail = void 0;
3
+ exports.params = exports.dbNameParams = exports.pkgRestorePathParams = exports.pkgExcludeParams = exports.pkgIncludeParams = exports.pkgPathParams = void 0;
4
+ exports.findRepositoryOrFail = findRepositoryOrFail;
5
+ exports.findPackageOrFail = findPackageOrFail;
6
+ exports.findPackageRepositoryConfig = findPackageRepositoryConfig;
7
+ exports.filterRepository = filterRepository;
8
+ exports.sortReposByType = sortReposByType;
9
+ exports.ensureSameRepositoryType = ensureSameRepositoryType;
10
+ exports.filterRepositoryByEnabled = filterRepositoryByEnabled;
11
+ exports.filterPackages = filterPackages;
12
+ exports.resolvePackagePath = resolvePackagePath;
13
+ exports.resolveDatabaseName = resolveDatabaseName;
14
+ exports.resolvePackage = resolvePackage;
15
+ exports.resolvePackages = resolvePackages;
16
+ exports.createPkgFilter = createPkgFilter;
17
+ exports.createTaskFilter = createTaskFilter;
4
18
  const error_1 = require("../error");
5
19
  const string_1 = require("../string");
6
20
  const temp_1 = require("../temp");
@@ -10,19 +24,16 @@ function findRepositoryOrFail(config, repositoryName) {
10
24
  throw new error_1.AppError(`Repository '${repositoryName}' not found in the config`);
11
25
  return repo;
12
26
  }
13
- exports.findRepositoryOrFail = findRepositoryOrFail;
14
27
  function findPackageOrFail(config, packageName) {
15
28
  const pkg = config.packages.find((v) => v.name === packageName);
16
29
  if (!pkg)
17
30
  throw new error_1.AppError(`Package '${packageName}' not found in the config`);
18
31
  return pkg;
19
32
  }
20
- exports.findPackageOrFail = findPackageOrFail;
21
33
  function findPackageRepositoryConfig(pkg, repo) {
22
34
  return pkg.repositoryConfigs?.find((config) => config.type === repo.type &&
23
35
  (!config.names || config.names.includes(repo.name)))?.config;
24
36
  }
25
- exports.findPackageRepositoryConfig = findPackageRepositoryConfig;
26
37
  function filterRepository(repositories, options) {
27
38
  return repositories.filter((r) => {
28
39
  if (options.include && !options.include.includes(r.name))
@@ -34,7 +45,6 @@ function filterRepository(repositories, options) {
34
45
  return true;
35
46
  });
36
47
  }
37
- exports.filterRepository = filterRepository;
38
48
  function sortReposByType(repositories, types) {
39
49
  const groups = repositories.reduce((group, item) => {
40
50
  if (!group[item.type])
@@ -53,7 +63,6 @@ function sortReposByType(repositories, types) {
53
63
  }
54
64
  return result;
55
65
  }
56
- exports.sortReposByType = sortReposByType;
57
66
  function ensureSameRepositoryType(a, b) {
58
67
  if (a.type !== b.type) {
59
68
  const names = [a.name, b.name].join(" and ");
@@ -61,7 +70,6 @@ function ensureSameRepositoryType(a, b) {
61
70
  throw new error_1.AppError(`Incompatible repository types between ${names} (${types})`);
62
71
  }
63
72
  }
64
- exports.ensureSameRepositoryType = ensureSameRepositoryType;
65
73
  function filterRepositoryByEnabled(repository, action) {
66
74
  const enabled = repository.enabled ?? true;
67
75
  if (typeof enabled === "boolean")
@@ -69,7 +77,6 @@ function filterRepositoryByEnabled(repository, action) {
69
77
  const defaults = enabled["defaults"] ?? true;
70
78
  return action ? enabled[action] ?? defaults : true;
71
79
  }
72
- exports.filterRepositoryByEnabled = filterRepositoryByEnabled;
73
80
  function filterPackages(config, options) {
74
81
  const filterRepo = (0, string_1.createPatternFilter)(options.repositoryNames);
75
82
  const filterRepoType = (0, string_1.createPatternFilter)(options.repositoryTypes);
@@ -93,7 +100,6 @@ function filterPackages(config, options) {
93
100
  filterPkg(pkg.name));
94
101
  });
95
102
  }
96
- exports.filterPackages = filterPackages;
97
103
  function resolvePackagePath(value, params) {
98
104
  return (0, string_1.render)(value, {
99
105
  ...params,
@@ -102,11 +108,9 @@ function resolvePackagePath(value, params) {
102
108
  },
103
109
  });
104
110
  }
105
- exports.resolvePackagePath = resolvePackagePath;
106
111
  function resolveDatabaseName(value, params) {
107
112
  return (0, string_1.render)(value, params);
108
113
  }
109
- exports.resolveDatabaseName = resolveDatabaseName;
110
114
  function resolvePackage(pkg, params) {
111
115
  pkg = Object.assign({}, pkg);
112
116
  const pkgParams = {
@@ -127,11 +131,9 @@ function resolvePackage(pkg, params) {
127
131
  });
128
132
  return pkg;
129
133
  }
130
- exports.resolvePackage = resolvePackage;
131
134
  function resolvePackages(packages, params) {
132
135
  return packages.map((pkg) => resolvePackage(pkg, params));
133
136
  }
134
- exports.resolvePackages = resolvePackages;
135
137
  exports.pkgPathParams = {
136
138
  action: "{action}",
137
139
  packageName: "{packageName}",
@@ -170,7 +172,6 @@ function createPkgFilter(patterns) {
170
172
  const { include, exclude } = (0, string_1.splitPatterns)(patterns, map);
171
173
  return (subject) => (0, string_1.match)(subject, include, exclude);
172
174
  }
173
- exports.createPkgFilter = createPkgFilter;
174
175
  function createTaskFilter(patterns) {
175
176
  if (patterns === undefined)
176
177
  return () => true;
@@ -181,4 +182,3 @@ function createTaskFilter(patterns) {
181
182
  return (0, string_1.match)(subject, include, exclude);
182
183
  };
183
184
  }
184
- exports.createTaskFilter = createTaskFilter;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createCronServer = void 0;
3
+ exports.createCronServer = createCronServer;
4
4
  const ConfigAction_1 = require("../../actions/ConfigAction");
5
5
  const cli_1 = require("../cli");
6
6
  const cron_1 = require("../cron");
@@ -86,4 +86,3 @@ async function createCronServer(options) {
86
86
  };
87
87
  return handler;
88
88
  }
89
- exports.createCronServer = createCronServer;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.runCronJob = exports.runJob = exports.getJobCliOptions = void 0;
3
+ exports.getJobCliOptions = getJobCliOptions;
4
+ exports.runJob = runJob;
5
+ exports.runCronJob = runCronJob;
4
6
  const async_process_1 = require("../async-process");
5
7
  const cli_1 = require("../cli");
6
8
  const fs_1 = require("../fs");
@@ -32,10 +34,9 @@ function getJobCliOptions(job) {
32
34
  const Command = command_1.datatruckCommands[job.action];
33
35
  const command = new Command({ config: { packages: [], repositories: [] } }, {});
34
36
  return (0, options_1.stringifyOptions)(command.optionsConfig, job.action === "prune"
35
- ? ({ ...job.options, confirm: true })
37
+ ? { ...job.options, confirm: true }
36
38
  : job.options);
37
39
  }
38
- exports.getJobCliOptions = getJobCliOptions;
39
40
  async function runJob(job, name, config) {
40
41
  const cliOptions = getJobCliOptions(job);
41
42
  const [node, bin] = process.argv;
@@ -56,7 +57,6 @@ async function runJob(job, name, config) {
56
57
  stdio: "inherit",
57
58
  });
58
59
  }
59
- exports.runJob = runJob;
60
60
  async function runCronJob(job, name, config) {
61
61
  let pid = 0;
62
62
  try {
@@ -106,4 +106,3 @@ async function runCronJob(job, name, config) {
106
106
  console.error(error);
107
107
  }
108
108
  }
109
- exports.runCronJob = runCronJob;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseBackupPaths = exports.parsePaths = void 0;
3
+ exports.parsePaths = parsePaths;
4
+ exports.parseBackupPaths = parseBackupPaths;
4
5
  const spawnSteps_1 = require("../spawnSteps");
5
6
  async function parsePaths(values, options) {
6
7
  let paths = [];
@@ -19,7 +20,6 @@ async function parsePaths(values, options) {
19
20
  }
20
21
  return paths;
21
22
  }
22
- exports.parsePaths = parsePaths;
23
23
  async function parseBackupPaths(paths, options) {
24
24
  return parsePaths(paths, {
25
25
  cwd: options.path,
@@ -31,4 +31,3 @@ async function parseBackupPaths(paths, options) {
31
31
  },
32
32
  });
33
33
  }
34
- exports.parseBackupPaths = parseBackupPaths;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createReportListTasks = void 0;
3
+ exports.createReportListTasks = createReportListTasks;
4
4
  const error_1 = require("../error");
5
5
  const reportSteps_1 = require("../reportSteps");
6
6
  const spawnSteps_1 = require("../spawnSteps");
@@ -55,4 +55,3 @@ function createReportListTasks(list, options) {
55
55
  });
56
56
  });
57
57
  }
58
- exports.createReportListTasks = createReportListTasks;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { IncomingMessage } from "http";
3
2
  type User = {
4
3
  enabled?: boolean;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createDatatruckRepositoryServer = exports.headerKey = void 0;
3
+ exports.headerKey = void 0;
4
+ exports.createDatatruckRepositoryServer = createDatatruckRepositoryServer;
4
5
  const ConfigAction_1 = require("../../actions/ConfigAction");
5
6
  const cli_1 = require("../cli");
6
7
  const http_1 = require("../http");
@@ -65,7 +66,8 @@ function createDatatruckRepositoryServer(inOptions, config = {}) {
65
66
  const id = counter.next();
66
67
  let requestError;
67
68
  let responseError;
68
- req.on("error", (error) => (requestError = error));
69
+ const requestErrorListener = (error) => (requestError = error);
70
+ req.on("error", requestErrorListener);
69
71
  res.on("error", (error) => (responseError = error));
70
72
  res.setHeader("X-Accel-Buffering", "no");
71
73
  try {
@@ -88,16 +90,19 @@ function createDatatruckRepositoryServer(inOptions, config = {}) {
88
90
  else if (action === "upload") {
89
91
  const [target] = params;
90
92
  const path = fs.resolvePath(target);
93
+ req.off("error", requestErrorListener);
91
94
  await (0, http_1.recvFile)(req, res, path);
92
95
  }
93
96
  else if (action === "download") {
94
97
  const [target] = params;
95
98
  const path = fs.resolvePath(target);
99
+ req.off("error", requestErrorListener);
96
100
  await (0, http_1.sendFile)(req, res, path, {
97
101
  contentLength: options.contentLength ?? true,
98
102
  });
99
103
  }
100
104
  else if (action === "writeFile") {
105
+ req.off("error", requestErrorListener);
101
106
  const data = await (0, http_1.readRequestData)(req);
102
107
  const [target] = params;
103
108
  await fs.writeFile(target, data);
@@ -135,4 +140,3 @@ function createDatatruckRepositoryServer(inOptions, config = {}) {
135
140
  server.keepAliveTimeout = inOptions.keepAliveTimeout;
136
141
  return server;
137
142
  }
138
- exports.createDatatruckRepositoryServer = createDatatruckRepositoryServer;
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.initSnapshotPath = exports.createAndInitRepo = exports.createRepo = exports.getRepoConstructor = void 0;
3
+ exports.getRepoConstructor = getRepoConstructor;
4
+ exports.createRepo = createRepo;
5
+ exports.createAndInitRepo = createAndInitRepo;
6
+ exports.initSnapshotPath = initSnapshotPath;
4
7
  const DatatruckRepository_1 = require("../../repositories/DatatruckRepository");
5
8
  const GitRepository_1 = require("../../repositories/GitRepository");
6
9
  const ResticRepository_1 = require("../../repositories/ResticRepository");
@@ -17,21 +20,17 @@ function getRepoConstructor(type) {
17
20
  throw new error_1.AppError(`Invalid repository type: ${type}`);
18
21
  return Constructor;
19
22
  }
20
- exports.getRepoConstructor = getRepoConstructor;
21
23
  function createRepo(repository, verbose) {
22
24
  const Constructor = getRepoConstructor(repository.type);
23
25
  return new Constructor(repository, verbose);
24
26
  }
25
- exports.createRepo = createRepo;
26
27
  async function createAndInitRepo(repository, verbose) {
27
28
  const repo = createRepo(repository, verbose);
28
29
  await repo.init({ options: { verbose } });
29
30
  return repo;
30
31
  }
31
- exports.createAndInitRepo = createAndInitRepo;
32
32
  async function initSnapshotPath(path, minFreeDiskSpace) {
33
33
  await (0, fs_1.initEmptyDir)(path);
34
34
  if (minFreeDiskSpace)
35
35
  await (0, fs_1.ensureFreeDiskSpace)([path], minFreeDiskSpace);
36
36
  }
37
- exports.initSnapshotPath = initSnapshotPath;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.groupAndFilter = void 0;
3
+ exports.groupAndFilter = groupAndFilter;
4
4
  const date_1 = require("../date");
5
5
  const object_1 = require("../object");
6
6
  function groupAndFilter(snapshots, groupKeys, inFilter) {
@@ -18,4 +18,3 @@ function groupAndFilter(snapshots, groupKeys, inFilter) {
18
18
  .map((snapshot) => keep.find((v) => v.item === snapshot))
19
19
  .filter((v) => !!v);
20
20
  }
21
- exports.groupAndFilter = groupAndFilter;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createTask = void 0;
3
+ exports.createTask = createTask;
4
4
  const GitTask_1 = require("../../tasks/GitTask");
5
5
  const MariadbTask_1 = require("../../tasks/MariadbTask");
6
6
  const MongoDumpTask_1 = require("../../tasks/MongoDumpTask");
@@ -35,4 +35,3 @@ function createTask(task) {
35
35
  throw new error_1.AppError(`Invalid task name: ${task["name"]}`);
36
36
  }
37
37
  }
38
- exports.createTask = createTask;
package/lib/utils/date.js CHANGED
@@ -3,7 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.duration = exports.createTimer = exports.filterByLast = exports.createFilterByLastOptions = void 0;
6
+ exports.createFilterByLastOptions = createFilterByLastOptions;
7
+ exports.filterByLast = filterByLast;
8
+ exports.createTimer = createTimer;
9
+ exports.duration = duration;
7
10
  const dayjs_1 = __importDefault(require("dayjs"));
8
11
  const advancedFormat_1 = __importDefault(require("dayjs/plugin/advancedFormat"));
9
12
  const customParseFormat_1 = __importDefault(require("dayjs/plugin/customParseFormat"));
@@ -24,7 +27,6 @@ function createFilterByLastOptions(keep) {
24
27
  lastYearly: keep.keepYearly,
25
28
  };
26
29
  }
27
- exports.createFilterByLastOptions = createFilterByLastOptions;
28
30
  function filterByLast(items, options) {
29
31
  const filters = {
30
32
  last: {
@@ -91,7 +93,6 @@ function filterByLast(items, options) {
91
93
  reasons: [...(reasons.get(item) || [])],
92
94
  }));
93
95
  }
94
- exports.filterByLast = filterByLast;
95
96
  function createTimer() {
96
97
  let startTime = Date.now();
97
98
  let endTime;
@@ -109,8 +110,6 @@ function createTimer() {
109
110
  };
110
111
  return timer;
111
112
  }
112
- exports.createTimer = createTimer;
113
113
  function duration(ms) {
114
114
  return dayjs_1.default.duration(ms, "ms").format("HH:mm:ss");
115
115
  }
116
- exports.duration = duration;
package/lib/utils/exit.js CHANGED
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.onExit = exports.disableExitEvents = exports.enableExitEvents = exports.triggerExitEvent = void 0;
3
+ exports.triggerExitEvent = triggerExitEvent;
4
+ exports.enableExitEvents = enableExitEvents;
5
+ exports.disableExitEvents = disableExitEvents;
6
+ exports.onExit = onExit;
4
7
  const eventNames = [
5
8
  `exit`,
6
9
  `SIGINT`,
@@ -30,7 +33,6 @@ function triggerExitEvent(eventName, ...args) {
30
33
  process.exit(5);
31
34
  }
32
35
  }
33
- exports.triggerExitEvent = triggerExitEvent;
34
36
  function enableExitEvents() {
35
37
  disableExitEvents();
36
38
  for (const eventName of eventNames) {
@@ -39,13 +41,11 @@ function enableExitEvents() {
39
41
  disableExitDisposes.add(() => process.off(eventName, listener));
40
42
  }
41
43
  }
42
- exports.enableExitEvents = enableExitEvents;
43
44
  function disableExitEvents() {
44
45
  for (const dispose of disableExitDisposes)
45
46
  dispose();
46
47
  disableExitDisposes.clear();
47
48
  }
48
- exports.disableExitEvents = disableExitEvents;
49
49
  function onExit(cb, priority) {
50
50
  if (!disableExitDisposes.size)
51
51
  enableExitEvents();
@@ -53,4 +53,3 @@ function onExit(cb, priority) {
53
53
  listeners.add(listener);
54
54
  return () => listeners.delete(listener);
55
55
  }
56
- exports.onExit = onExit;
package/lib/utils/fs.d.ts CHANGED
@@ -1,6 +1,3 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- /// <reference types="node" />
4
1
  import { Progress, ProgressStats } from "./progress";
5
2
  import { Entry, Options } from "fast-glob";
6
3
  import { Stats } from "fs";