@datatruck/cli 0.6.1 → 0.9.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 (51) hide show
  1. package/Action/BackupAction.d.ts +1 -0
  2. package/Action/BackupAction.js +4 -1
  3. package/Action/RestoreAction.d.ts +1 -0
  4. package/Action/RestoreAction.js +1 -0
  5. package/Action/SnapshotsAction.d.ts +1 -0
  6. package/Command/BackupCommand.d.ts +1 -0
  7. package/Command/BackupCommand.js +8 -2
  8. package/Command/BackupSessionsCommand.js +1 -1
  9. package/Command/ConfigCommand.d.ts +1 -0
  10. package/Command/ConfigCommand.js +7 -1
  11. package/Command/InitCommand.js +1 -1
  12. package/Command/PruneCommand.js +2 -2
  13. package/Command/RestoreCommand.d.ts +1 -0
  14. package/Command/RestoreCommand.js +8 -2
  15. package/Command/RestoreSessionsCommand.js +1 -1
  16. package/Command/SnapshotsCommand.d.ts +1 -0
  17. package/Command/SnapshotsCommand.js +16 -2
  18. package/Repository/GitRepository.js +5 -0
  19. package/Repository/LocalRepository.d.ts +1 -0
  20. package/Repository/LocalRepository.js +5 -0
  21. package/Repository/RepositoryAbstract.d.ts +4 -1
  22. package/Repository/RepositoryAbstract.js +1 -0
  23. package/Repository/ResticRepository.d.ts +2 -2
  24. package/Repository/ResticRepository.js +9 -0
  25. package/SessionDriver/ConsoleSessionDriver.d.ts +6 -2
  26. package/SessionDriver/ConsoleSessionDriver.js +19 -29
  27. package/SessionDriver/SessionDriverAbstract.d.ts +1 -1
  28. package/SessionDriver/SessionDriverAbstract.js +1 -1
  29. package/SessionManager/BackupSessionManager.d.ts +1 -1
  30. package/SessionManager/BackupSessionManager.js +2 -2
  31. package/Task/MysqlDumpTask.d.ts +3 -2
  32. package/Task/MysqlDumpTask.js +35 -3
  33. package/Task/PostgresqlDumpTask.d.ts +3 -2
  34. package/Task/PostgresqlDumpTask.js +6 -5
  35. package/Task/SqlDumpTaskAbstract.d.ts +4 -3
  36. package/Task/SqlDumpTaskAbstract.js +67 -19
  37. package/config.schema.json +3 -0
  38. package/package.json +9 -9
  39. package/util/cli-util.d.ts +1 -0
  40. package/util/cli-util.js +13 -1
  41. package/util/datatruck/config-util.d.ts +1 -0
  42. package/util/datatruck/config-util.js +3 -0
  43. package/util/date-util.d.ts +4 -0
  44. package/util/date-util.js +17 -1
  45. package/util/entity-util.d.ts +1 -1
  46. package/util/fs-util.d.ts +1 -0
  47. package/util/process-util.d.ts +1 -0
  48. package/util/process-util.js +2 -2
  49. package/util/string-util.d.ts +1 -0
  50. package/util/string-util.js +21 -1
  51. package/CHANGELOG.md +0 -119
@@ -10,6 +10,7 @@ export declare type BackupActionOptionsType = {
10
10
  repositoryNames?: string[];
11
11
  repositoryTypes?: string[];
12
12
  packageNames?: string[];
13
+ packageTaskNames?: string[];
13
14
  tags?: string[];
14
15
  dryRun?: boolean;
15
16
  verbose?: boolean;
@@ -21,6 +21,7 @@ class BackupAction {
21
21
  await session.initDrivers();
22
22
  let packages = (0, config_util_1.filterPackages)(this.config, {
23
23
  packageNames: this.options.packageNames,
24
+ packageTaskNames: this.options.packageTaskNames,
24
25
  repositoryNames: this.options.repositoryNames,
25
26
  repositoryTypes: this.options.repositoryTypes,
26
27
  sourceAction: "backup",
@@ -193,7 +194,9 @@ class BackupAction {
193
194
  error: error?.message,
194
195
  });
195
196
  }
196
- await session.endDrivers();
197
+ await session.endDrivers({
198
+ snapshotId: snapshot.id.slice(0, 8),
199
+ });
197
200
  return {
198
201
  total: total,
199
202
  errors: errors,
@@ -10,6 +10,7 @@ export declare type RestoreActionOptionsType = {
10
10
  snapshotId: string;
11
11
  tags?: string[];
12
12
  packageNames?: string[];
13
+ packageTaskNames?: string[];
13
14
  repositoryNames?: string[];
14
15
  repositoryTypes?: string[];
15
16
  verbose?: boolean;
@@ -60,6 +60,7 @@ class RestoreAction {
60
60
  const snapshots = await repoInstance.onSnapshots({
61
61
  options: {
62
62
  packageNames: this.options.packageNames,
63
+ packageTaskNames: this.options.packageTaskNames,
63
64
  ids: [this.options.snapshotId],
64
65
  tags: this.options.tags,
65
66
  },
@@ -7,6 +7,7 @@ export declare type SnapshotsActionOptionsType = {
7
7
  ids?: string[];
8
8
  repositoryNames?: string[];
9
9
  packageNames?: string[];
10
+ packageTaskNames?: string[];
10
11
  repositoryTypes?: string[];
11
12
  verbose?: boolean;
12
13
  tags?: string[];
@@ -3,6 +3,7 @@ import { If } from "../util/ts-util";
3
3
  import { CommandAbstract } from "./CommandAbstract";
4
4
  export declare type BackupCommandOptionsType<TResolved = false> = {
5
5
  package?: If<TResolved, string[]>;
6
+ packageTask?: If<TResolved, string[]>;
6
7
  repository?: If<TResolved, string[]>;
7
8
  repositoryType?: If<TResolved, RepositoryConfigType["type"][]>;
8
9
  tag?: If<TResolved, string[]>;
@@ -21,6 +21,11 @@ class BackupCommand extends CommandAbstract_1.CommandAbstract {
21
21
  option: "-p,--package <values>",
22
22
  parser: string_util_1.parseStringList,
23
23
  },
24
+ packageTask: {
25
+ description: "Package task names",
26
+ option: "-pt,--package-task <values>",
27
+ parser: string_util_1.parseStringList,
28
+ },
24
29
  repository: {
25
30
  description: "Repository names",
26
31
  option: "-r,--repository <values>",
@@ -28,12 +33,12 @@ class BackupCommand extends CommandAbstract_1.CommandAbstract {
28
33
  },
29
34
  repositoryType: {
30
35
  description: "Repository types",
31
- option: "-t,--repository-type <values>",
36
+ option: "-rt,--repository-type <values>",
32
37
  parser: (v) => (0, string_util_1.parseStringList)(v),
33
38
  },
34
39
  tag: {
35
40
  description: "Tags",
36
- option: "--tag <values>",
41
+ option: "-t,--tag <values>",
37
42
  parser: string_util_1.parseStringList,
38
43
  },
39
44
  date: {
@@ -47,6 +52,7 @@ class BackupCommand extends CommandAbstract_1.CommandAbstract {
47
52
  const config = await ConfigAction_1.ConfigAction.fromGlobalOptions(this.globalOptions);
48
53
  const backup = new BackupAction_1.BackupAction(config, {
49
54
  packageNames: this.options.package,
55
+ packageTaskNames: this.options.packageTask,
50
56
  repositoryNames: this.options.repository,
51
57
  repositoryTypes: this.options.repositoryType,
52
58
  tags: this.options.tag,
@@ -24,7 +24,7 @@ class BackupSessionsCommand extends CommandAbstract_1.CommandAbstract {
24
24
  },
25
25
  tag: {
26
26
  description: "Tags",
27
- option: "--tag <values>",
27
+ option: "-t,--tag <values>",
28
28
  parser: string_util_1.parseStringList,
29
29
  },
30
30
  limit: {
@@ -3,6 +3,7 @@ import { If } from "../util/ts-util";
3
3
  import { CommandAbstract } from "./CommandAbstract";
4
4
  export declare type ConfigCommandOptionsType<TResolved = false> = {
5
5
  package?: If<TResolved, string[]>;
6
+ packageTask?: If<TResolved, string[]>;
6
7
  repository?: If<TResolved, string[]>;
7
8
  repositoryType?: If<TResolved, RepositoryConfigType["type"][]>;
8
9
  };
@@ -14,6 +14,11 @@ class ConfigCommand extends CommandAbstract_1.CommandAbstract {
14
14
  option: "-p,--package <values>",
15
15
  parser: string_util_1.parseStringList,
16
16
  },
17
+ packageTask: {
18
+ description: "Package task names",
19
+ option: "-pt,--package-task <values>",
20
+ parser: string_util_1.parseStringList,
21
+ },
17
22
  repository: {
18
23
  description: "Repository names",
19
24
  option: "-r,--repository <values>",
@@ -21,7 +26,7 @@ class ConfigCommand extends CommandAbstract_1.CommandAbstract {
21
26
  },
22
27
  repositoryType: {
23
28
  description: "Repository types",
24
- option: "-t,--repository-type <values>",
29
+ option: "-rt,--repository-type <values>",
25
30
  parser: (v) => (0, string_util_1.parseStringList)(v),
26
31
  },
27
32
  });
@@ -30,6 +35,7 @@ class ConfigCommand extends CommandAbstract_1.CommandAbstract {
30
35
  const config = await ConfigAction_1.ConfigAction.fromGlobalOptions(this.globalOptions);
31
36
  const packages = (0, config_util_1.filterPackages)(config, {
32
37
  packageNames: this.options.package,
38
+ packageTaskNames: this.options.packageTask,
33
39
  repositoryNames: this.options.repository,
34
40
  repositoryTypes: this.options.repositoryType,
35
41
  });
@@ -18,7 +18,7 @@ class InitCommand extends CommandAbstract_1.CommandAbstract {
18
18
  },
19
19
  repositoryType: {
20
20
  description: "Repository types",
21
- option: "-t,--repository-type <values>",
21
+ option: "-rt,--repository-type <values>",
22
22
  parser: (v) => (0, string_util_1.parseStringList)(v),
23
23
  },
24
24
  });
@@ -81,12 +81,12 @@ class PruneCommand extends CommandAbstract_1.CommandAbstract {
81
81
  },
82
82
  repositoryType: {
83
83
  description: "Repository types",
84
- option: "-t,--repositoryType <values>",
84
+ option: "-rt,--repository-type <values>",
85
85
  parser: (v) => (0, string_util_1.parseStringList)(v),
86
86
  },
87
87
  tag: {
88
88
  description: "Tags",
89
- option: "--tag <values>",
89
+ option: "-t,--tag <values>",
90
90
  parser: string_util_1.parseStringList,
91
91
  },
92
92
  showAll: {
@@ -4,6 +4,7 @@ import { CommandAbstract } from "./CommandAbstract";
4
4
  export declare type RestoreCommandOptionsType<TResolved = false> = {
5
5
  id: string;
6
6
  package?: If<TResolved, string[]>;
7
+ packageTask?: If<TResolved, string[]>;
7
8
  repository?: If<TResolved, string[]>;
8
9
  repositoryType?: If<TResolved, RepositoryConfigType["type"][]>;
9
10
  tag?: If<TResolved, string[]>;
@@ -21,6 +21,11 @@ class RestoreCommand extends CommandAbstract_1.CommandAbstract {
21
21
  option: "-p,--package <values>",
22
22
  parser: string_util_1.parseStringList,
23
23
  },
24
+ packageTask: {
25
+ description: "Package task names",
26
+ option: "-pt,--package-task <values>",
27
+ parser: string_util_1.parseStringList,
28
+ },
24
29
  repository: {
25
30
  description: "Repository names",
26
31
  option: "-r,--repository <values>",
@@ -28,12 +33,12 @@ class RestoreCommand extends CommandAbstract_1.CommandAbstract {
28
33
  },
29
34
  repositoryType: {
30
35
  description: "Repository types",
31
- option: "-t,--repository-type <values>",
36
+ option: "-rt,--repository-type <values>",
32
37
  parser: (v) => (0, string_util_1.parseStringList)(v),
33
38
  },
34
39
  tag: {
35
40
  description: "Tags",
36
- option: "--tag <values>",
41
+ option: "-t,--tag <values>",
37
42
  parser: string_util_1.parseStringList,
38
43
  },
39
44
  });
@@ -44,6 +49,7 @@ class RestoreCommand extends CommandAbstract_1.CommandAbstract {
44
49
  const restore = new RestoreAction_1.RestoreAction(config, {
45
50
  snapshotId: this.options.id,
46
51
  packageNames: this.options.package,
52
+ packageTaskNames: this.options.packageTask,
47
53
  repositoryNames: this.options.repository,
48
54
  repositoryTypes: this.options.repositoryType,
49
55
  tags: this.options.tag,
@@ -24,7 +24,7 @@ class RestoreSessionsCommand extends CommandAbstract_1.CommandAbstract {
24
24
  },
25
25
  tag: {
26
26
  description: "Tags",
27
- option: "--tag <values>",
27
+ option: "-t,--tag <values>",
28
28
  parser: string_util_1.parseStringList,
29
29
  },
30
30
  limit: {
@@ -5,6 +5,7 @@ import { CommandAbstract } from "./CommandAbstract";
5
5
  export declare type SnapshotsCommandOptionsType<TResolved = false> = {
6
6
  id?: If<TResolved, string[]>;
7
7
  package?: If<TResolved, string[]>;
8
+ packageTask?: If<TResolved, string[]>;
8
9
  repository?: If<TResolved, string[]>;
9
10
  repositoryType?: If<TResolved, RepositoryConfigType["type"][]>;
10
11
  longId?: boolean;
@@ -64,6 +64,11 @@ class SnapshotsCommand extends CommandAbstract_1.CommandAbstract {
64
64
  description: "Package names",
65
65
  parser: string_util_1.parseStringList,
66
66
  },
67
+ packageTask: {
68
+ description: "Package task names",
69
+ option: "-pt,--package-task <values>",
70
+ parser: string_util_1.parseStringList,
71
+ },
67
72
  repository: {
68
73
  option: "-r,--repository <names>",
69
74
  description: "Repository names",
@@ -76,7 +81,7 @@ class SnapshotsCommand extends CommandAbstract_1.CommandAbstract {
76
81
  },
77
82
  tag: {
78
83
  description: "Tags",
79
- option: "--tag <values>",
84
+ option: "-t,--tag <values>",
80
85
  parser: string_util_1.parseStringList,
81
86
  },
82
87
  });
@@ -87,6 +92,7 @@ class SnapshotsCommand extends CommandAbstract_1.CommandAbstract {
87
92
  const snapshots = new SnapshotsAction_1.SnapshotsAction(config, {
88
93
  ids: this.options.id,
89
94
  packageNames: this.options.package,
95
+ packageTaskNames: this.options.packageTask,
90
96
  repositoryNames: this.options.repository,
91
97
  repositoryTypes: this.options.repositoryType,
92
98
  last: this.options.last,
@@ -103,11 +109,19 @@ class SnapshotsCommand extends CommandAbstract_1.CommandAbstract {
103
109
  const dataFormat = new DataFormat_1.DataFormat({
104
110
  items: await snapshots.exec(),
105
111
  table: {
106
- labels: ["Id.", "Date", "Package", "Repository", "Repository type"],
112
+ labels: [
113
+ "Id.",
114
+ "Date",
115
+ "Package",
116
+ "Task",
117
+ "Repository",
118
+ "Repository type",
119
+ ],
107
120
  handler: (item) => [
108
121
  this.options.longId ? item.id : item.id.slice(0, 8),
109
122
  item.date.replace("T", " ").replace("Z", ""),
110
123
  item.packageName,
124
+ item.packageTaskName || "",
111
125
  item.repositoryName,
112
126
  item.repositoryType,
113
127
  ],
@@ -111,6 +111,7 @@ class GitRepository extends RepositoryAbstract_1.RepositoryAbstract {
111
111
  log: data.options.verbose,
112
112
  });
113
113
  const pkgPatterns = (0, string_util_1.makePathPatterns)(data.options.packageNames);
114
+ const pkgTaskPatterns = (0, string_util_1.makePathPatterns)(data.options.packageTaskNames);
114
115
  await git.clone({ repo: this.config.repo });
115
116
  const tagNames = data.options.ids?.map((id) => `${GitRepository.refPrefix}/*/${id}*`) || [`${GitRepository.refPrefix}/*`];
116
117
  const tags = await git.getTags(tagNames);
@@ -123,6 +124,8 @@ class GitRepository extends RepositoryAbstract_1.RepositoryAbstract {
123
124
  return result;
124
125
  if (pkgPatterns && !(0, micromatch_1.isMatch)(parsedTag.package, pkgPatterns))
125
126
  return result;
127
+ if (pkgTaskPatterns && !(0, micromatch_1.isMatch)(parsedTag.task || "", pkgTaskPatterns))
128
+ return result;
126
129
  if (data.options.tags &&
127
130
  !parsedTag.tags.some((value) => data.options.tags?.includes(value)))
128
131
  return result;
@@ -131,6 +134,7 @@ class GitRepository extends RepositoryAbstract_1.RepositoryAbstract {
131
134
  id: parsedTag.id,
132
135
  date: parsedTag.date,
133
136
  packageName: parsedTag.package,
137
+ packageTaskName: parsedTag.task,
134
138
  tags: parsedTag.tags,
135
139
  });
136
140
  return result;
@@ -201,6 +205,7 @@ class GitRepository extends RepositoryAbstract_1.RepositoryAbstract {
201
205
  tags: data.options.tags ?? [],
202
206
  date: data.snapshot.date,
203
207
  package: data.package.name,
208
+ task: data.package.task?.name,
204
209
  version: nodePkg.version,
205
210
  });
206
211
  await git.addTag(meta.name, meta.message);
@@ -4,6 +4,7 @@ export declare type MetaDataType = {
4
4
  id: string;
5
5
  date: string;
6
6
  package: string;
7
+ task: string | undefined;
7
8
  tags: string[];
8
9
  version: string;
9
10
  };
@@ -125,6 +125,7 @@ class LocalRepository extends RepositoryAbstract_1.RepositoryAbstract {
125
125
  const snapshotNames = await (0, promises_1.readdir)(this.config.outPath);
126
126
  const snapshots = [];
127
127
  const packagePatterns = (0, string_util_1.makePathPatterns)(data.options.packageNames);
128
+ const taskPatterns = (0, string_util_1.makePathPatterns)(data.options.packageTaskNames);
128
129
  for (const snapshotName of snapshotNames) {
129
130
  const snapshotNameData = LocalRepository.parseSnapshotName(snapshotName);
130
131
  if (!snapshotNameData)
@@ -137,6 +138,8 @@ class LocalRepository extends RepositoryAbstract_1.RepositoryAbstract {
137
138
  continue;
138
139
  const metaPath = (0, path_1.join)(this.config.outPath, snapshotName);
139
140
  const meta = await LocalRepository.parseMetaData(metaPath);
141
+ if (taskPatterns && !(0, micromatch_1.isMatch)(meta.task || "", taskPatterns))
142
+ continue;
140
143
  if (data.options.ids &&
141
144
  !data.options.ids.some((id) => meta.id.startsWith(id)))
142
145
  continue;
@@ -148,6 +151,7 @@ class LocalRepository extends RepositoryAbstract_1.RepositoryAbstract {
148
151
  id: meta.id,
149
152
  date: meta.date,
150
153
  packageName: meta.package,
154
+ packageTaskName: meta.task,
151
155
  tags: meta.tags,
152
156
  });
153
157
  }
@@ -288,6 +292,7 @@ class LocalRepository extends RepositoryAbstract_1.RepositoryAbstract {
288
292
  date: data.snapshot.date,
289
293
  tags: data.options.tags ?? [],
290
294
  package: data.package.name,
295
+ task: data.package.task?.name,
291
296
  version: nodePkg.version,
292
297
  };
293
298
  if (data.options.verbose)
@@ -11,6 +11,7 @@ export declare type SnapshotType = {
11
11
  export declare type SnapshotResultType = SnapshotType & {
12
12
  originalId: string;
13
13
  packageName: string;
14
+ packageTaskName: string | undefined;
14
15
  tags: string[];
15
16
  };
16
17
  export declare type ProgressDataType = {
@@ -24,7 +25,7 @@ export declare type InitDataType = {
24
25
  options: InitActionOptionsType;
25
26
  };
26
27
  export declare type SnapshotsDataType = {
27
- options: Pick<SnapshotsActionOptionsType, "ids" | "packageNames" | "verbose" | "tags">;
28
+ options: Pick<SnapshotsActionOptionsType, "ids" | "packageNames" | "packageTaskNames" | "verbose" | "tags">;
28
29
  };
29
30
  export declare type BackupDataType<TPackageConfig> = {
30
31
  options: BackupActionOptionsType;
@@ -53,6 +54,7 @@ export declare enum SnapshotTagEnum {
53
54
  SHORT_ID = "shortId",
54
55
  DATE = "date",
55
56
  PACKAGE = "package",
57
+ TASK = "task",
56
58
  TAGS = "tags",
57
59
  VERSION = "version"
58
60
  }
@@ -61,6 +63,7 @@ export declare type SnapshotTagObjectType = {
61
63
  [SnapshotTagEnum.SHORT_ID]: string;
62
64
  [SnapshotTagEnum.DATE]: string;
63
65
  [SnapshotTagEnum.PACKAGE]: string;
66
+ [SnapshotTagEnum.TASK]: string | undefined;
64
67
  [SnapshotTagEnum.TAGS]: string[];
65
68
  [SnapshotTagEnum.VERSION]: string;
66
69
  };
@@ -7,6 +7,7 @@ var SnapshotTagEnum;
7
7
  SnapshotTagEnum["SHORT_ID"] = "shortId";
8
8
  SnapshotTagEnum["DATE"] = "date";
9
9
  SnapshotTagEnum["PACKAGE"] = "package";
10
+ SnapshotTagEnum["TASK"] = "task";
10
11
  SnapshotTagEnum["TAGS"] = "tags";
11
12
  SnapshotTagEnum["VERSION"] = "version";
12
13
  })(SnapshotTagEnum = exports.SnapshotTagEnum || (exports.SnapshotTagEnum = {}));
@@ -28,9 +28,9 @@ export declare class ResticRepository extends RepositoryAbstract<ResticRepositor
28
28
  name: SnapshotTagEnum;
29
29
  value: string;
30
30
  } | null;
31
- static parseSnapshotTags(tags: string[]): Required<Partial<SnapshotTagObjectType> & {
31
+ static parseSnapshotTags(tags: string[]): SnapshotTagObjectType & {
32
32
  tags: string[];
33
- }>;
33
+ };
34
34
  onGetSource(): string;
35
35
  onInit(data: InitDataType): Promise<void>;
36
36
  onSnapshots(data: SnapshotsDataType): Promise<SnapshotResultType[]>;
@@ -126,6 +126,7 @@ class ResticRepository extends RepositoryAbstract_1.RepositoryAbstract {
126
126
  log: data.options.verbose,
127
127
  });
128
128
  const packagePatterns = (0, string_util_1.makePathPatterns)(data.options.packageNames);
129
+ const taskNamePatterns = (0, string_util_1.makePathPatterns)(data.options.packageTaskNames);
129
130
  const result = await restic.snapshots({
130
131
  json: true,
131
132
  tags: [
@@ -138,12 +139,15 @@ class ResticRepository extends RepositoryAbstract_1.RepositoryAbstract {
138
139
  return items;
139
140
  if (packagePatterns && !(0, micromatch_1.isMatch)(tag.package, packagePatterns))
140
141
  return items;
142
+ if (taskNamePatterns && !(0, micromatch_1.isMatch)(tag.task || "", taskNamePatterns))
143
+ return items;
141
144
  const itemTags = tag.tags ?? [];
142
145
  if (data.options.tags && !itemTags.some((t) => itemTags.includes(t)))
143
146
  return items;
144
147
  items.push({
145
148
  originalId: item.id,
146
149
  packageName: tag.package,
150
+ packageTaskName: tag.task,
147
151
  date: tag.date,
148
152
  id: tag.id,
149
153
  tags: itemTags,
@@ -231,6 +235,11 @@ class ResticRepository extends RepositoryAbstract_1.RepositoryAbstract {
231
235
  ResticRepository.buildSnapshotTag(RepositoryAbstract_1.SnapshotTagEnum.DATE, data.snapshot.date),
232
236
  ResticRepository.buildSnapshotTag(RepositoryAbstract_1.SnapshotTagEnum.VERSION, nodePkg.version),
233
237
  packageTag,
238
+ ...(data.package.task?.name
239
+ ? [
240
+ ResticRepository.buildSnapshotTag(RepositoryAbstract_1.SnapshotTagEnum.TASK, data.package.task?.name),
241
+ ]
242
+ : []),
234
243
  ...(data.options.tags ?? []),
235
244
  ],
236
245
  onStream: async (streamData) => {
@@ -26,10 +26,14 @@ export declare class ConsoleSessionDriver extends SessionDriverAbstract {
26
26
  protected rendering?: boolean;
27
27
  protected lastColumns?: number;
28
28
  protected startTime: number;
29
+ protected chron: {
30
+ start: () => number;
31
+ elapsed: (formatted?: boolean | undefined) => string | number;
32
+ };
29
33
  onInit(): Promise<void>;
30
- onEnd(): Promise<void>;
34
+ onEnd(data?: Record<string, any>): Promise<void>;
31
35
  onRead(): Promise<ReadResultType[]>;
32
- protected printMessage(message: MessageType): void;
36
+ protected printMessage(message: MessageType, endMessage: boolean): void;
33
37
  protected renderSpinner(text: string): string;
34
38
  protected renderMessage(message: MessageType): string;
35
39
  onWrite(data: WriteDataType): Promise<void>;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ConsoleSessionDriver = void 0;
4
4
  const AppError_1 = require("../Error/AppError");
5
5
  const cli_util_1 = require("../util/cli-util");
6
+ const date_util_1 = require("../util/date-util");
6
7
  const SessionDriverAbstract_1 = require("./SessionDriverAbstract");
7
8
  const chalk_1 = require("chalk");
8
9
  const sep = (0, chalk_1.grey)(`|`);
@@ -12,42 +13,28 @@ class ConsoleSessionDriver extends SessionDriverAbstract_1.SessionDriverAbstract
12
13
  constructor() {
13
14
  super(...arguments);
14
15
  this.prints = 0;
16
+ this.chron = (0, date_util_1.createChron)();
15
17
  }
16
18
  async onInit() {
17
- this.startTime = Date.now();
19
+ this.chron.start();
18
20
  this.renderInterval = setInterval(() => {
19
21
  if (this.lastMessage)
20
- this.printMessage(this.lastMessage);
22
+ this.printMessage(this.lastMessage, false);
21
23
  }, 100);
22
24
  }
23
- async onEnd() {
25
+ async onEnd(data) {
24
26
  clearInterval(this.renderInterval);
25
27
  if (!this.options.verbose)
26
28
  process.stdout.write(cli_util_1.showCursorCommand);
27
- const ellapsed = (Date.now() - this.startTime) / 1000;
28
- let ellapsedUnit;
29
- let ellapsedValue;
30
- if (ellapsed > 60 * 60) {
31
- ellapsedValue = ellapsed / 60 / 60;
32
- ellapsedUnit = `hour`;
33
- }
34
- else if (ellapsed > 60) {
35
- ellapsedValue = ellapsed / 60;
36
- ellapsedUnit = `minute`;
37
- }
38
- else {
39
- ellapsedValue = ellapsed;
40
- ellapsedUnit = `second`;
41
- }
42
- if (ellapsedValue !== 1)
43
- ellapsedUnit += `s`;
44
- const message = `Completed in ${ellapsedValue.toFixed(2)} ${ellapsedUnit}`;
45
- console.info(`\n${(0, chalk_1.grey)(message)}`);
29
+ (0, cli_util_1.logVars)({
30
+ ...data,
31
+ elapsed: this.chron.elapsed(true),
32
+ });
46
33
  }
47
34
  async onRead() {
48
35
  throw new AppError_1.AppError("Method not implemented");
49
36
  }
50
- printMessage(message) {
37
+ printMessage(message, endMessage) {
51
38
  const text = this.renderMessage(message);
52
39
  if (this.options.verbose && this.lastMessageText === text) {
53
40
  return;
@@ -58,8 +45,10 @@ class ConsoleSessionDriver extends SessionDriverAbstract_1.SessionDriverAbstract
58
45
  else {
59
46
  const columns = process.stdout.columns;
60
47
  const line = this.renderSpinner(text);
61
- const [truncatedLine, truncted] = (0, cli_util_1.truncate)(line, columns);
62
- if (this.lastColumns && columns !== this.lastColumns && truncted)
48
+ const [truncatedLine, truncated] = endMessage
49
+ ? [line, false]
50
+ : (0, cli_util_1.truncate)(line, columns);
51
+ if (this.lastColumns && columns !== this.lastColumns && truncated)
63
52
  process.stdout.write(`${cli_util_1.clearCommand}\n`);
64
53
  process.stdout.write(`${cli_util_1.clearCommand}${truncatedLine}${cli_util_1.hideCursorCommand}`);
65
54
  this.lastColumns = columns;
@@ -170,10 +159,11 @@ class ConsoleSessionDriver extends SessionDriverAbstract_1.SessionDriverAbstract
170
159
  if (isHeader && data.action === SessionDriverAbstract_1.ActionEnum.End) {
171
160
  return;
172
161
  }
173
- this.printMessage(message);
174
- if (!this.options.verbose)
175
- if (!hasProgress || data.action === SessionDriverAbstract_1.ActionEnum.End || isHeader)
176
- process.stdout.write("\n");
162
+ const endMessage = !this.options.verbose &&
163
+ (!hasProgress || data.action === SessionDriverAbstract_1.ActionEnum.End || isHeader);
164
+ this.printMessage(message, endMessage);
165
+ if (endMessage)
166
+ process.stdout.write("\n");
177
167
  }
178
168
  }
179
169
  exports.ConsoleSessionDriver = ConsoleSessionDriver;
@@ -73,6 +73,6 @@ export declare abstract class SessionDriverAbstract {
73
73
  });
74
74
  onInit(): Promise<void>;
75
75
  abstract onWrite(data: WriteDataType): Promise<void>;
76
- onEnd(): Promise<void>;
76
+ onEnd(data?: Record<string, any>): Promise<void>;
77
77
  abstract onRead(data: ReadDataType, entity: EntityEnum): Promise<ReadResultType[]>;
78
78
  }
@@ -22,6 +22,6 @@ class SessionDriverAbstract {
22
22
  this.options = options;
23
23
  }
24
24
  async onInit() { }
25
- async onEnd() { }
25
+ async onEnd(data) { }
26
26
  }
27
27
  exports.SessionDriverAbstract = SessionDriverAbstract;
@@ -27,7 +27,7 @@ export declare class BackupSessionManager {
27
27
  repositoryName: string;
28
28
  }): number;
29
29
  initDrivers(): Promise<void>;
30
- endDrivers(): Promise<void>;
30
+ endDrivers(data?: Record<string, any>): Promise<void>;
31
31
  protected alter(data: WriteDataType): Promise<number>;
32
32
  readAll(options: BackupSessionsActionOptionsType): Promise<import("../SessionDriver/SessionDriverAbstract").ReadResultType[]>;
33
33
  init(input: Pick<BackupSessionEntity, "packageName" | "snapshotId" | "tags">): Promise<number>;
@@ -27,10 +27,10 @@ class BackupSessionManager {
27
27
  await driver.onInit();
28
28
  }
29
29
  }
30
- async endDrivers() {
30
+ async endDrivers(data) {
31
31
  const drivers = [this.options.driver, ...(this.options.altDrivers ?? [])];
32
32
  for (const driver of drivers) {
33
- await driver.onEnd();
33
+ await driver.onEnd(data);
34
34
  }
35
35
  }
36
36
  async alter(data) {
@@ -8,7 +8,8 @@ export declare class MysqlDumpTask extends SqlDumpTaskAbstract<MysqlDumpTaskConf
8
8
  onDatabaseIsEmpty(name: string): Promise<boolean>;
9
9
  onCreateDatabase(database: TargetDatabaseType): Promise<void>;
10
10
  onExecQuery(query: string): Promise<import("../util/process-util").ExecResultType>;
11
- onFetchTableNames(): Promise<string[]>;
12
- onExport(tableNames: string[], output: string): Promise<void>;
11
+ onFetchTableNames(database: string): Promise<string[]>;
12
+ onExportTables(tableNames: string[], output: string): Promise<void>;
13
+ onExportStoredPrograms(output: string): Promise<void>;
13
14
  onImport(path: string, database: string): Promise<void>;
14
15
  }