@datatruck/cli 0.26.2 → 0.28.0

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/Action/BackupAction.d.ts +69 -34
  2. package/Action/BackupAction.js +284 -244
  3. package/Action/CleanCacheAction.d.ts +8 -4
  4. package/Action/CleanCacheAction.js +8 -5
  5. package/Action/ConfigAction.d.ts +12 -5
  6. package/Action/ConfigAction.js +14 -18
  7. package/Action/CopyAction.d.ts +49 -0
  8. package/Action/CopyAction.js +144 -0
  9. package/Action/InitAction.d.ts +3 -3
  10. package/Action/InitAction.js +9 -9
  11. package/Action/PruneAction.d.ts +9 -9
  12. package/Action/PruneAction.js +39 -23
  13. package/Action/RestoreAction.d.ts +48 -23
  14. package/Action/RestoreAction.js +158 -195
  15. package/Action/SnapshotsAction.d.ts +8 -8
  16. package/Action/SnapshotsAction.js +8 -8
  17. package/CHANGELOG.md +495 -0
  18. package/Command/BackupCommand.d.ts +6 -4
  19. package/Command/BackupCommand.js +9 -26
  20. package/Command/CleanCacheCommand.d.ts +4 -4
  21. package/Command/CleanCacheCommand.js +26 -5
  22. package/Command/CommandAbstract.d.ts +10 -7
  23. package/Command/CommandAbstract.js +4 -1
  24. package/Command/ConfigCommand.d.ts +6 -9
  25. package/Command/ConfigCommand.js +13 -8
  26. package/Command/CopyCommand.d.ts +15 -0
  27. package/Command/CopyCommand.js +61 -0
  28. package/Command/InitCommand.d.ts +4 -4
  29. package/Command/InitCommand.js +11 -15
  30. package/Command/PruneCommand.d.ts +3 -3
  31. package/Command/PruneCommand.js +13 -12
  32. package/Command/RestoreCommand.js +9 -17
  33. package/Command/SnapshotsCommand.d.ts +4 -4
  34. package/Command/SnapshotsCommand.js +16 -15
  35. package/Command/StartServerCommand.d.ts +6 -0
  36. package/Command/StartServerCommand.js +24 -0
  37. package/Config/Config.d.ts +11 -0
  38. package/Config/Config.js +43 -0
  39. package/Config/PrunePolicyConfig.d.ts +2 -2
  40. package/Factory/CommandFactory.d.ts +29 -33
  41. package/Factory/CommandFactory.js +32 -53
  42. package/Factory/RepositoryFactory.d.ts +1 -1
  43. package/Factory/RepositoryFactory.js +3 -3
  44. package/Factory/TaskFactory.d.ts +1 -1
  45. package/Factory/TaskFactory.js +3 -3
  46. package/Repository/DatatruckRepository.d.ts +17 -16
  47. package/Repository/DatatruckRepository.js +131 -149
  48. package/Repository/GitRepository.d.ts +9 -8
  49. package/Repository/GitRepository.js +22 -25
  50. package/Repository/RepositoryAbstract.d.ts +39 -37
  51. package/Repository/RepositoryAbstract.js +4 -5
  52. package/Repository/ResticRepository.d.ts +9 -8
  53. package/Repository/ResticRepository.js +30 -28
  54. package/Task/GitTask.d.ts +6 -7
  55. package/Task/GitTask.js +24 -30
  56. package/Task/MariadbTask.d.ts +4 -5
  57. package/Task/MariadbTask.js +26 -32
  58. package/Task/MssqlTask.d.ts +5 -3
  59. package/Task/MssqlTask.js +11 -12
  60. package/Task/MysqlDumpTask.d.ts +10 -3
  61. package/Task/MysqlDumpTask.js +107 -31
  62. package/Task/ScriptTask.d.ts +23 -18
  63. package/Task/ScriptTask.js +34 -24
  64. package/Task/SqlDumpTaskAbstract.d.ts +8 -3
  65. package/Task/SqlDumpTaskAbstract.js +31 -19
  66. package/Task/TaskAbstract.d.ts +24 -25
  67. package/Task/TaskAbstract.js +6 -10
  68. package/cli.js +14 -5
  69. package/config.schema.json +124 -3
  70. package/package.json +4 -5
  71. package/utils/DataFormat.d.ts +23 -12
  72. package/utils/DataFormat.js +36 -14
  73. package/utils/cli.d.ts +2 -9
  74. package/utils/cli.js +9 -52
  75. package/utils/datatruck/client.d.ts +24 -0
  76. package/utils/datatruck/client.js +99 -0
  77. package/utils/datatruck/config.d.ts +8 -6
  78. package/utils/datatruck/config.js +18 -3
  79. package/utils/datatruck/paths.d.ts +5 -9
  80. package/utils/datatruck/paths.js +2 -2
  81. package/utils/datatruck/server.d.ts +21 -0
  82. package/utils/datatruck/server.js +96 -0
  83. package/utils/datatruck/snapshot.d.ts +2 -2
  84. package/utils/date.d.ts +7 -3
  85. package/utils/date.js +22 -14
  86. package/utils/fs.d.ts +27 -15
  87. package/utils/fs.js +110 -62
  88. package/utils/http.d.ts +21 -0
  89. package/utils/http.js +154 -0
  90. package/utils/list.d.ts +64 -0
  91. package/utils/list.js +145 -0
  92. package/utils/mysql.d.ts +2 -0
  93. package/utils/mysql.js +21 -2
  94. package/utils/process.d.ts +1 -0
  95. package/utils/process.js +24 -31
  96. package/utils/progress.d.ts +33 -0
  97. package/utils/progress.js +113 -0
  98. package/utils/steps.d.ts +11 -0
  99. package/utils/steps.js +22 -10
  100. package/utils/stream.d.ts +7 -0
  101. package/utils/stream.js +10 -0
  102. package/utils/string.d.ts +0 -1
  103. package/utils/string.js +1 -13
  104. package/utils/tar.d.ts +10 -3
  105. package/utils/tar.js +70 -44
  106. package/utils/temp.d.ts +26 -0
  107. package/utils/temp.js +133 -0
  108. package/utils/virtual-fs.d.ts +37 -0
  109. package/utils/virtual-fs.js +65 -0
  110. package/Action/BackupSessionsAction.d.ts +0 -13
  111. package/Action/BackupSessionsAction.js +0 -18
  112. package/Action/RestoreSessionsAction.d.ts +0 -13
  113. package/Action/RestoreSessionsAction.js +0 -18
  114. package/Command/BackupSessionsCommand.d.ts +0 -12
  115. package/Command/BackupSessionsCommand.js +0 -92
  116. package/Command/RestoreSessionsCommand.d.ts +0 -12
  117. package/Command/RestoreSessionsCommand.js +0 -91
  118. package/Decorator/EntityDecorator.d.ts +0 -11
  119. package/Decorator/EntityDecorator.js +0 -17
  120. package/Entity/BackupSessionEntity.d.ts +0 -6
  121. package/Entity/BackupSessionEntity.js +0 -25
  122. package/Entity/BackupSessionRepositoryEntity.d.ts +0 -6
  123. package/Entity/BackupSessionRepositoryEntity.js +0 -25
  124. package/Entity/BackupSessionTaskEntity.d.ts +0 -5
  125. package/Entity/BackupSessionTaskEntity.js +0 -24
  126. package/Entity/CrudEntityAbstract.d.ts +0 -5
  127. package/Entity/CrudEntityAbstract.js +0 -9
  128. package/Entity/RestoreSessionEntity.d.ts +0 -5
  129. package/Entity/RestoreSessionEntity.js +0 -24
  130. package/Entity/RestoreSessionRepositoryEntity.d.ts +0 -6
  131. package/Entity/RestoreSessionRepositoryEntity.js +0 -25
  132. package/Entity/RestoreSessionTaskEntity.d.ts +0 -5
  133. package/Entity/RestoreSessionTaskEntity.js +0 -24
  134. package/Entity/StateEntityAbstract.d.ts +0 -9
  135. package/Entity/StateEntityAbstract.js +0 -12
  136. package/Factory/EntityFactory.d.ts +0 -6
  137. package/Factory/EntityFactory.js +0 -40
  138. package/SessionDriver/ConsoleSessionDriver.d.ts +0 -42
  139. package/SessionDriver/ConsoleSessionDriver.js +0 -208
  140. package/SessionDriver/SessionDriverAbstract.d.ts +0 -77
  141. package/SessionDriver/SessionDriverAbstract.js +0 -28
  142. package/SessionDriver/SqliteSessionDriver.d.ts +0 -20
  143. package/SessionDriver/SqliteSessionDriver.js +0 -173
  144. package/SessionManager/BackupSessionManager.d.ts +0 -45
  145. package/SessionManager/BackupSessionManager.js +0 -218
  146. package/SessionManager/RestoreSessionManager.d.ts +0 -47
  147. package/SessionManager/RestoreSessionManager.js +0 -218
  148. package/SessionManager/SessionManagerAbstract.d.ts +0 -18
  149. package/SessionManager/SessionManagerAbstract.js +0 -36
  150. package/migrations/001-initial.sql +0 -98
  151. package/utils/entity.d.ts +0 -4
  152. package/utils/entity.js +0 -10
@@ -1,16 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CommandConstructorFactory = exports.makeParseLog = exports.runAndParse = exports.createActionInterface = exports.exec = exports.CommandFactory = exports.CommandEnum = void 0;
3
+ exports.CommandConstructorFactory = exports.createActionInterface = exports.exec = exports.CommandFactory = exports.CommandEnum = void 0;
4
4
  const BackupCommand_1 = require("../Command/BackupCommand");
5
- const BackupSessionsCommand_1 = require("../Command/BackupSessionsCommand");
6
5
  const CleanCacheCommand_1 = require("../Command/CleanCacheCommand");
7
6
  const ConfigCommand_1 = require("../Command/ConfigCommand");
7
+ const CopyCommand_1 = require("../Command/CopyCommand");
8
8
  const InitCommand_1 = require("../Command/InitCommand");
9
9
  const PruneCommand_1 = require("../Command/PruneCommand");
10
10
  const RestoreCommand_1 = require("../Command/RestoreCommand");
11
- const RestoreSessionsCommand_1 = require("../Command/RestoreSessionsCommand");
12
11
  const SnapshotsCommand_1 = require("../Command/SnapshotsCommand");
12
+ const StartServerCommand_1 = require("../Command/StartServerCommand");
13
13
  const AppError_1 = require("../Error/AppError");
14
+ const stream_1 = require("stream");
14
15
  var CommandEnum;
15
16
  (function (CommandEnum) {
16
17
  CommandEnum["config"] = "config";
@@ -18,70 +19,48 @@ var CommandEnum;
18
19
  CommandEnum["snapshots"] = "snapshots";
19
20
  CommandEnum["prune"] = "prune";
20
21
  CommandEnum["backup"] = "backup";
21
- CommandEnum["backupSessions"] = "backup-sessions";
22
22
  CommandEnum["restore"] = "restore";
23
- CommandEnum["restoreSessions"] = "restore-sessions";
23
+ CommandEnum["copy"] = "copy";
24
24
  CommandEnum["cleanCache"] = "clean-cache";
25
+ CommandEnum["startServer"] = "start-server";
25
26
  })(CommandEnum || (exports.CommandEnum = CommandEnum = {}));
26
- function CommandFactory(type, globalOptions, options) {
27
+ function CommandFactory(type, globalOptions, options, streams) {
27
28
  const constructor = CommandConstructorFactory(type);
28
- return new constructor(globalOptions, options);
29
+ return new constructor(globalOptions, options, streams);
29
30
  }
30
31
  exports.CommandFactory = CommandFactory;
31
- async function exec(type, globalOptions, options) {
32
- return await CommandFactory(type, globalOptions, options).onExec();
32
+ async function exec(type, globalOptions, options, streams) {
33
+ return await CommandFactory(type, globalOptions, options, streams).onExec();
33
34
  }
34
35
  exports.exec = exec;
35
36
  function createActionInterface(globalOptions) {
36
37
  const object = {};
37
38
  for (const type of Object.values(CommandEnum)) {
38
39
  object[type] = async (options) => {
39
- const run = () => exec(type, { ...globalOptions, outputFormat: "json", verbose: 1 }, options);
40
- let exitCode;
41
- let log;
42
- if (["config", "init", "snapshots"].includes(type)) {
43
- const parsed = await runAndParse(type, run);
44
- exitCode = parsed.exitCode;
45
- log = parsed.log;
40
+ let stdoutData = "";
41
+ const stdout = new stream_1.Writable({
42
+ write(chunk, encoding, callback) {
43
+ stdoutData += chunk.toString();
44
+ process.stdout.write(chunk, encoding, callback);
45
+ },
46
+ }).on("data", (chunk) => (stdoutData += chunk.toString()));
47
+ const end = () => !stdout.closed &&
48
+ new Promise((resolve) => stdout.end().on("close", resolve));
49
+ try {
50
+ const exitCode = await exec(type, { ...globalOptions, outputFormat: "json", verbose: 1 }, options, { stdout });
51
+ if (exitCode !== 0)
52
+ throw new Error(`Invalid exit code: ${exitCode}`);
53
+ await end();
54
+ return JSON.parse(stdoutData);
46
55
  }
47
- else {
48
- exitCode = await run();
56
+ finally {
57
+ await end();
49
58
  }
50
- if (exitCode !== 0)
51
- throw new Error(`Invalid exit code: ${exitCode}`);
52
- return log;
53
59
  };
54
60
  }
55
61
  return object;
56
62
  }
57
63
  exports.createActionInterface = createActionInterface;
58
- async function runAndParse(type, run) {
59
- const parseLog = makeParseLog(type);
60
- try {
61
- const exitCode = await run();
62
- return { exitCode, log: parseLog() };
63
- }
64
- catch (error) {
65
- try {
66
- parseLog();
67
- }
68
- catch (_) { }
69
- throw error;
70
- }
71
- }
72
- exports.runAndParse = runAndParse;
73
- function makeParseLog(type) {
74
- const data = [];
75
- const consoleLog = console.log;
76
- console.log = console.info = (...items) => {
77
- data.push(...items);
78
- };
79
- return function parseLog() {
80
- console.log = console.info = consoleLog;
81
- return JSON.parse(data.flat().join("\n"));
82
- };
83
- }
84
- exports.makeParseLog = makeParseLog;
85
64
  function CommandConstructorFactory(type) {
86
65
  if (type === CommandEnum.config) {
87
66
  return ConfigCommand_1.ConfigCommand;
@@ -98,18 +77,18 @@ function CommandConstructorFactory(type) {
98
77
  else if (type === CommandEnum.backup) {
99
78
  return BackupCommand_1.BackupCommand;
100
79
  }
101
- else if (type === CommandEnum.backupSessions) {
102
- return BackupSessionsCommand_1.BackupSessionsCommand;
103
- }
104
80
  else if (type === CommandEnum.restore) {
105
81
  return RestoreCommand_1.RestoreCommand;
106
82
  }
107
- else if (type === CommandEnum.restoreSessions) {
108
- return RestoreSessionsCommand_1.RestoreSessionsCommand;
83
+ else if (type === CommandEnum.copy) {
84
+ return CopyCommand_1.CopyCommand;
109
85
  }
110
86
  else if (type === CommandEnum.cleanCache) {
111
87
  return CleanCacheCommand_1.CleanCacheCommand;
112
88
  }
89
+ else if (type === CommandEnum.startServer) {
90
+ return StartServerCommand_1.StartServerCommand;
91
+ }
113
92
  else {
114
93
  throw new AppError_1.AppError(`Invalid command type: ${type}`);
115
94
  }
@@ -1,3 +1,3 @@
1
1
  import type { RepositoryConfigType } from "../Config/RepositoryConfig";
2
2
  import type { RepositoryAbstract } from "../Repository/RepositoryAbstract";
3
- export declare function RepositoryFactory(repository: RepositoryConfigType): RepositoryAbstract<any>;
3
+ export declare function createRepo(repository: RepositoryConfigType): RepositoryAbstract<any>;
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RepositoryFactory = void 0;
3
+ exports.createRepo = void 0;
4
4
  const AppError_1 = require("../Error/AppError");
5
5
  const DatatruckRepository_1 = require("../Repository/DatatruckRepository");
6
6
  const GitRepository_1 = require("../Repository/GitRepository");
7
7
  const ResticRepository_1 = require("../Repository/ResticRepository");
8
- function RepositoryFactory(repository) {
8
+ function createRepo(repository) {
9
9
  const type = repository.type;
10
10
  if (type === GitRepository_1.gitRepositoryName) {
11
11
  return new GitRepository_1.GitRepository(repository);
@@ -20,4 +20,4 @@ function RepositoryFactory(repository) {
20
20
  throw new AppError_1.AppError(`Invalid repository type: ${type}`);
21
21
  }
22
22
  }
23
- exports.RepositoryFactory = RepositoryFactory;
23
+ exports.createRepo = createRepo;
@@ -1,3 +1,3 @@
1
1
  import { TaskConfigType } from "../Config/TaskConfig";
2
2
  import type { TaskAbstract } from "../Task/TaskAbstract";
3
- export declare function TaskFactory(task: TaskConfigType): TaskAbstract;
3
+ export declare function createTask(task: TaskConfigType): TaskAbstract;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TaskFactory = void 0;
3
+ exports.createTask = void 0;
4
4
  const AppError_1 = require("../Error/AppError");
5
5
  const GitTask_1 = require("../Task/GitTask");
6
6
  const MariadbTask_1 = require("../Task/MariadbTask");
@@ -8,7 +8,7 @@ const MssqlTask_1 = require("../Task/MssqlTask");
8
8
  const MysqlDumpTask_1 = require("../Task/MysqlDumpTask");
9
9
  const PostgresqlDumpTask_1 = require("../Task/PostgresqlDumpTask");
10
10
  const ScriptTask_1 = require("../Task/ScriptTask");
11
- function TaskFactory(task) {
11
+ function createTask(task) {
12
12
  if (task.name === GitTask_1.gitTaskName) {
13
13
  return new GitTask_1.GitTask(task.config ?? {});
14
14
  }
@@ -31,4 +31,4 @@ function TaskFactory(task) {
31
31
  throw new AppError_1.AppError(`Invalid task name: ${task["name"]}`);
32
32
  }
33
33
  }
34
- exports.TaskFactory = TaskFactory;
34
+ exports.createTask = createTask;
@@ -1,5 +1,5 @@
1
1
  import { CompressOptions } from "../utils/tar";
2
- import { RepositoryAbstract, BackupDataType, InitDataType, RestoreDataType, SnapshotsDataType, SnapshotResultType, PruneDataType, CopyBackupType } from "./RepositoryAbstract";
2
+ import { RepositoryAbstract, RepoBackupData, RepoInitData, RepoRestoreData, RepoFetchSnapshotsData, Snapshot, RepoPruneData, RepoCopyData } from "./RepositoryAbstract";
3
3
  import type { JSONSchema7 } from "json-schema";
4
4
  export type MetaDataType = {
5
5
  id: string;
@@ -11,10 +11,11 @@ export type MetaDataType = {
11
11
  size: number;
12
12
  tarStats?: Record<string, {
13
13
  files: number;
14
+ size: number;
14
15
  }>;
15
16
  };
16
17
  export type DatatruckRepositoryConfigType = {
17
- outPath: string;
18
+ backend: string;
18
19
  compress?: boolean | CompressOptions;
19
20
  };
20
21
  type PackObject = {
@@ -33,10 +34,11 @@ export declare const datatruckRepositoryDefinition: JSONSchema7;
33
34
  export declare const datatruckPackageRepositoryDefinition: JSONSchema7;
34
35
  export declare class DatatruckRepository extends RepositoryAbstract<DatatruckRepositoryConfigType> {
35
36
  static zipBasenameTpl: string;
36
- static buildSnapshotName(data: {
37
- snapshotId: string;
38
- snapshotDate: string;
39
- packageName: string;
37
+ static buildSnapshotName(snapshot: {
38
+ id: string;
39
+ date: string;
40
+ }, pkg: {
41
+ name: string;
40
42
  }): string;
41
43
  static parseSnapshotName(name: string): {
42
44
  snapshotDate: string;
@@ -44,15 +46,14 @@ export declare class DatatruckRepository extends RepositoryAbstract<DatatruckRep
44
46
  snapshotShortId: string;
45
47
  sourcePath: string;
46
48
  } | null;
47
- protected buildMetaPath(snapshotName: string, packageName: string): string;
48
- static parseMetaData(path: string): Promise<MetaDataType | undefined>;
49
- static stringifyMetaData(data: MetaDataType): string;
50
- onGetSource(): string;
51
- onInit(data: InitDataType): Promise<void>;
52
- onPrune(data: PruneDataType): Promise<void>;
53
- onSnapshots(data: SnapshotsDataType): Promise<SnapshotResultType[]>;
54
- onBackup(data: BackupDataType<DatatruckPackageRepositoryConfigType>): Promise<void>;
55
- onCopyBackup(data: CopyBackupType<DatatruckRepositoryConfigType>): Promise<void>;
56
- onRestore(data: RestoreDataType<DatatruckPackageRepositoryConfigType>): Promise<void>;
49
+ static parseMetaData(data: string): Promise<MetaDataType>;
50
+ getSource(): string;
51
+ fetchDiskStats(config: DatatruckRepositoryConfigType): Promise<import("../utils/fs").DiskStats>;
52
+ init(data: RepoInitData): Promise<void>;
53
+ prune(data: RepoPruneData): Promise<void>;
54
+ fetchSnapshots(data: RepoFetchSnapshotsData): Promise<Snapshot[]>;
55
+ backup(data: RepoBackupData<DatatruckPackageRepositoryConfigType>): Promise<void>;
56
+ copy(data: RepoCopyData<DatatruckRepositoryConfigType>): Promise<void>;
57
+ restore(data: RepoRestoreData<DatatruckPackageRepositoryConfigType>): Promise<void>;
57
58
  }
58
59
  export {};