@tachybase/module-backup 0.23.8

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 (125) hide show
  1. package/.turbo/turbo-build.log +12 -0
  2. package/README.md +118 -0
  3. package/README.zh-CN.md +118 -0
  4. package/client.d.ts +2 -0
  5. package/client.js +1 -0
  6. package/dist/client/Configuration.d.ts +2 -0
  7. package/dist/client/DuplicatorProvider.d.ts +5 -0
  8. package/dist/client/index.d.ts +5 -0
  9. package/dist/client/index.js +1 -0
  10. package/dist/client/locale/index.d.ts +4 -0
  11. package/dist/externalVersion.js +14 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.js +39 -0
  14. package/dist/locale/en-US.json +44 -0
  15. package/dist/locale/ja-JP.d.ts +25 -0
  16. package/dist/locale/ja-JP.js +46 -0
  17. package/dist/locale/ko_KR.json +50 -0
  18. package/dist/locale/pt-BR.d.ts +26 -0
  19. package/dist/locale/pt-BR.js +48 -0
  20. package/dist/locale/zh-CN.json +50 -0
  21. package/dist/node_modules/@hapi/topo/lib/index.d.ts +60 -0
  22. package/dist/node_modules/@hapi/topo/lib/index.js +1 -0
  23. package/dist/node_modules/@hapi/topo/package.json +1 -0
  24. package/dist/node_modules/archiver/LICENSE +22 -0
  25. package/dist/node_modules/archiver/index.js +68 -0
  26. package/dist/node_modules/archiver/lib/core.js +974 -0
  27. package/dist/node_modules/archiver/lib/error.js +40 -0
  28. package/dist/node_modules/archiver/lib/plugins/json.js +110 -0
  29. package/dist/node_modules/archiver/lib/plugins/tar.js +167 -0
  30. package/dist/node_modules/archiver/lib/plugins/zip.js +120 -0
  31. package/dist/node_modules/archiver/package.json +1 -0
  32. package/dist/node_modules/decompress/index.js +16 -0
  33. package/dist/node_modules/decompress/license +9 -0
  34. package/dist/node_modules/decompress/package.json +1 -0
  35. package/dist/node_modules/mkdirp/LICENSE +21 -0
  36. package/dist/node_modules/mkdirp/bin/cmd.js +68 -0
  37. package/dist/node_modules/mkdirp/index.js +1 -0
  38. package/dist/node_modules/mkdirp/lib/find-made.js +29 -0
  39. package/dist/node_modules/mkdirp/lib/mkdirp-manual.js +64 -0
  40. package/dist/node_modules/mkdirp/lib/mkdirp-native.js +39 -0
  41. package/dist/node_modules/mkdirp/lib/opts-arg.js +23 -0
  42. package/dist/node_modules/mkdirp/lib/path-arg.js +29 -0
  43. package/dist/node_modules/mkdirp/lib/use-native.js +10 -0
  44. package/dist/node_modules/mkdirp/package.json +1 -0
  45. package/dist/node_modules/mkdirp/readme.markdown +266 -0
  46. package/dist/node_modules/semver/LICENSE +15 -0
  47. package/dist/node_modules/semver/bin/semver.js +188 -0
  48. package/dist/node_modules/semver/classes/comparator.js +141 -0
  49. package/dist/node_modules/semver/classes/index.js +5 -0
  50. package/dist/node_modules/semver/classes/range.js +554 -0
  51. package/dist/node_modules/semver/classes/semver.js +302 -0
  52. package/dist/node_modules/semver/functions/clean.js +6 -0
  53. package/dist/node_modules/semver/functions/cmp.js +52 -0
  54. package/dist/node_modules/semver/functions/coerce.js +60 -0
  55. package/dist/node_modules/semver/functions/compare-build.js +7 -0
  56. package/dist/node_modules/semver/functions/compare-loose.js +3 -0
  57. package/dist/node_modules/semver/functions/compare.js +5 -0
  58. package/dist/node_modules/semver/functions/diff.js +65 -0
  59. package/dist/node_modules/semver/functions/eq.js +3 -0
  60. package/dist/node_modules/semver/functions/gt.js +3 -0
  61. package/dist/node_modules/semver/functions/gte.js +3 -0
  62. package/dist/node_modules/semver/functions/inc.js +19 -0
  63. package/dist/node_modules/semver/functions/lt.js +3 -0
  64. package/dist/node_modules/semver/functions/lte.js +3 -0
  65. package/dist/node_modules/semver/functions/major.js +3 -0
  66. package/dist/node_modules/semver/functions/minor.js +3 -0
  67. package/dist/node_modules/semver/functions/neq.js +3 -0
  68. package/dist/node_modules/semver/functions/parse.js +16 -0
  69. package/dist/node_modules/semver/functions/patch.js +3 -0
  70. package/dist/node_modules/semver/functions/prerelease.js +6 -0
  71. package/dist/node_modules/semver/functions/rcompare.js +3 -0
  72. package/dist/node_modules/semver/functions/rsort.js +3 -0
  73. package/dist/node_modules/semver/functions/satisfies.js +10 -0
  74. package/dist/node_modules/semver/functions/sort.js +3 -0
  75. package/dist/node_modules/semver/functions/valid.js +6 -0
  76. package/dist/node_modules/semver/index.js +1 -0
  77. package/dist/node_modules/semver/internal/constants.js +35 -0
  78. package/dist/node_modules/semver/internal/debug.js +9 -0
  79. package/dist/node_modules/semver/internal/identifiers.js +23 -0
  80. package/dist/node_modules/semver/internal/lrucache.js +40 -0
  81. package/dist/node_modules/semver/internal/parse-options.js +15 -0
  82. package/dist/node_modules/semver/internal/re.js +217 -0
  83. package/dist/node_modules/semver/package.json +1 -0
  84. package/dist/node_modules/semver/preload.js +2 -0
  85. package/dist/node_modules/semver/range.bnf +16 -0
  86. package/dist/node_modules/semver/ranges/gtr.js +4 -0
  87. package/dist/node_modules/semver/ranges/intersects.js +7 -0
  88. package/dist/node_modules/semver/ranges/ltr.js +4 -0
  89. package/dist/node_modules/semver/ranges/max-satisfying.js +25 -0
  90. package/dist/node_modules/semver/ranges/min-satisfying.js +24 -0
  91. package/dist/node_modules/semver/ranges/min-version.js +61 -0
  92. package/dist/node_modules/semver/ranges/outside.js +80 -0
  93. package/dist/node_modules/semver/ranges/simplify.js +47 -0
  94. package/dist/node_modules/semver/ranges/subset.js +247 -0
  95. package/dist/node_modules/semver/ranges/to-comparators.js +8 -0
  96. package/dist/node_modules/semver/ranges/valid.js +11 -0
  97. package/dist/server/app-migrator.d.ts +16 -0
  98. package/dist/server/app-migrator.js +61 -0
  99. package/dist/server/collection-group-manager.d.ts +4 -0
  100. package/dist/server/collection-group-manager.js +29 -0
  101. package/dist/server/commands/restore-command.d.ts +2 -0
  102. package/dist/server/commands/restore-command.js +67 -0
  103. package/dist/server/dumper.d.ts +71 -0
  104. package/dist/server/dumper.js +421 -0
  105. package/dist/server/errors/restore-check-error.d.ts +3 -0
  106. package/dist/server/errors/restore-check-error.js +32 -0
  107. package/dist/server/field-value-writer.d.ts +9 -0
  108. package/dist/server/field-value-writer.js +99 -0
  109. package/dist/server/index.d.ts +1 -0
  110. package/dist/server/index.js +33 -0
  111. package/dist/server/locale/zh-CN.d.ts +9 -0
  112. package/dist/server/locale/zh-CN.js +30 -0
  113. package/dist/server/resourcers/backup-files.d.ts +25 -0
  114. package/dist/server/resourcers/backup-files.js +206 -0
  115. package/dist/server/restorer.d.ts +35 -0
  116. package/dist/server/restorer.js +320 -0
  117. package/dist/server/server.d.ts +8 -0
  118. package/dist/server/server.js +52 -0
  119. package/dist/server/utils.d.ts +5 -0
  120. package/dist/server/utils.js +78 -0
  121. package/dist/swagger/index.d.ts +392 -0
  122. package/dist/swagger/index.js +447 -0
  123. package/package.json +48 -0
  124. package/server.d.ts +2 -0
  125. package/server.js +1 -0
@@ -0,0 +1,47 @@
1
+ // given a set of versions and a range, create a "simplified" range
2
+ // that includes the same versions that the original range does
3
+ // If the original range is shorter than the simplified one, return that.
4
+ const satisfies = require('../functions/satisfies.js')
5
+ const compare = require('../functions/compare.js')
6
+ module.exports = (versions, range, options) => {
7
+ const set = []
8
+ let first = null
9
+ let prev = null
10
+ const v = versions.sort((a, b) => compare(a, b, options))
11
+ for (const version of v) {
12
+ const included = satisfies(version, range, options)
13
+ if (included) {
14
+ prev = version
15
+ if (!first) {
16
+ first = version
17
+ }
18
+ } else {
19
+ if (prev) {
20
+ set.push([first, prev])
21
+ }
22
+ prev = null
23
+ first = null
24
+ }
25
+ }
26
+ if (first) {
27
+ set.push([first, null])
28
+ }
29
+
30
+ const ranges = []
31
+ for (const [min, max] of set) {
32
+ if (min === max) {
33
+ ranges.push(min)
34
+ } else if (!max && min === v[0]) {
35
+ ranges.push('*')
36
+ } else if (!max) {
37
+ ranges.push(`>=${min}`)
38
+ } else if (min === v[0]) {
39
+ ranges.push(`<=${max}`)
40
+ } else {
41
+ ranges.push(`${min} - ${max}`)
42
+ }
43
+ }
44
+ const simplified = ranges.join(' || ')
45
+ const original = typeof range.raw === 'string' ? range.raw : String(range)
46
+ return simplified.length < original.length ? simplified : range
47
+ }
@@ -0,0 +1,247 @@
1
+ const Range = require('../classes/range.js')
2
+ const Comparator = require('../classes/comparator.js')
3
+ const { ANY } = Comparator
4
+ const satisfies = require('../functions/satisfies.js')
5
+ const compare = require('../functions/compare.js')
6
+
7
+ // Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:
8
+ // - Every simple range `r1, r2, ...` is a null set, OR
9
+ // - Every simple range `r1, r2, ...` which is not a null set is a subset of
10
+ // some `R1, R2, ...`
11
+ //
12
+ // Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:
13
+ // - If c is only the ANY comparator
14
+ // - If C is only the ANY comparator, return true
15
+ // - Else if in prerelease mode, return false
16
+ // - else replace c with `[>=0.0.0]`
17
+ // - If C is only the ANY comparator
18
+ // - if in prerelease mode, return true
19
+ // - else replace C with `[>=0.0.0]`
20
+ // - Let EQ be the set of = comparators in c
21
+ // - If EQ is more than one, return true (null set)
22
+ // - Let GT be the highest > or >= comparator in c
23
+ // - Let LT be the lowest < or <= comparator in c
24
+ // - If GT and LT, and GT.semver > LT.semver, return true (null set)
25
+ // - If any C is a = range, and GT or LT are set, return false
26
+ // - If EQ
27
+ // - If GT, and EQ does not satisfy GT, return true (null set)
28
+ // - If LT, and EQ does not satisfy LT, return true (null set)
29
+ // - If EQ satisfies every C, return true
30
+ // - Else return false
31
+ // - If GT
32
+ // - If GT.semver is lower than any > or >= comp in C, return false
33
+ // - If GT is >=, and GT.semver does not satisfy every C, return false
34
+ // - If GT.semver has a prerelease, and not in prerelease mode
35
+ // - If no C has a prerelease and the GT.semver tuple, return false
36
+ // - If LT
37
+ // - If LT.semver is greater than any < or <= comp in C, return false
38
+ // - If LT is <=, and LT.semver does not satisfy every C, return false
39
+ // - If GT.semver has a prerelease, and not in prerelease mode
40
+ // - If no C has a prerelease and the LT.semver tuple, return false
41
+ // - Else return true
42
+
43
+ const subset = (sub, dom, options = {}) => {
44
+ if (sub === dom) {
45
+ return true
46
+ }
47
+
48
+ sub = new Range(sub, options)
49
+ dom = new Range(dom, options)
50
+ let sawNonNull = false
51
+
52
+ OUTER: for (const simpleSub of sub.set) {
53
+ for (const simpleDom of dom.set) {
54
+ const isSub = simpleSubset(simpleSub, simpleDom, options)
55
+ sawNonNull = sawNonNull || isSub !== null
56
+ if (isSub) {
57
+ continue OUTER
58
+ }
59
+ }
60
+ // the null set is a subset of everything, but null simple ranges in
61
+ // a complex range should be ignored. so if we saw a non-null range,
62
+ // then we know this isn't a subset, but if EVERY simple range was null,
63
+ // then it is a subset.
64
+ if (sawNonNull) {
65
+ return false
66
+ }
67
+ }
68
+ return true
69
+ }
70
+
71
+ const minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]
72
+ const minimumVersion = [new Comparator('>=0.0.0')]
73
+
74
+ const simpleSubset = (sub, dom, options) => {
75
+ if (sub === dom) {
76
+ return true
77
+ }
78
+
79
+ if (sub.length === 1 && sub[0].semver === ANY) {
80
+ if (dom.length === 1 && dom[0].semver === ANY) {
81
+ return true
82
+ } else if (options.includePrerelease) {
83
+ sub = minimumVersionWithPreRelease
84
+ } else {
85
+ sub = minimumVersion
86
+ }
87
+ }
88
+
89
+ if (dom.length === 1 && dom[0].semver === ANY) {
90
+ if (options.includePrerelease) {
91
+ return true
92
+ } else {
93
+ dom = minimumVersion
94
+ }
95
+ }
96
+
97
+ const eqSet = new Set()
98
+ let gt, lt
99
+ for (const c of sub) {
100
+ if (c.operator === '>' || c.operator === '>=') {
101
+ gt = higherGT(gt, c, options)
102
+ } else if (c.operator === '<' || c.operator === '<=') {
103
+ lt = lowerLT(lt, c, options)
104
+ } else {
105
+ eqSet.add(c.semver)
106
+ }
107
+ }
108
+
109
+ if (eqSet.size > 1) {
110
+ return null
111
+ }
112
+
113
+ let gtltComp
114
+ if (gt && lt) {
115
+ gtltComp = compare(gt.semver, lt.semver, options)
116
+ if (gtltComp > 0) {
117
+ return null
118
+ } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {
119
+ return null
120
+ }
121
+ }
122
+
123
+ // will iterate one or zero times
124
+ for (const eq of eqSet) {
125
+ if (gt && !satisfies(eq, String(gt), options)) {
126
+ return null
127
+ }
128
+
129
+ if (lt && !satisfies(eq, String(lt), options)) {
130
+ return null
131
+ }
132
+
133
+ for (const c of dom) {
134
+ if (!satisfies(eq, String(c), options)) {
135
+ return false
136
+ }
137
+ }
138
+
139
+ return true
140
+ }
141
+
142
+ let higher, lower
143
+ let hasDomLT, hasDomGT
144
+ // if the subset has a prerelease, we need a comparator in the superset
145
+ // with the same tuple and a prerelease, or it's not a subset
146
+ let needDomLTPre = lt &&
147
+ !options.includePrerelease &&
148
+ lt.semver.prerelease.length ? lt.semver : false
149
+ let needDomGTPre = gt &&
150
+ !options.includePrerelease &&
151
+ gt.semver.prerelease.length ? gt.semver : false
152
+ // exception: <1.2.3-0 is the same as <1.2.3
153
+ if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&
154
+ lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {
155
+ needDomLTPre = false
156
+ }
157
+
158
+ for (const c of dom) {
159
+ hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='
160
+ hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='
161
+ if (gt) {
162
+ if (needDomGTPre) {
163
+ if (c.semver.prerelease && c.semver.prerelease.length &&
164
+ c.semver.major === needDomGTPre.major &&
165
+ c.semver.minor === needDomGTPre.minor &&
166
+ c.semver.patch === needDomGTPre.patch) {
167
+ needDomGTPre = false
168
+ }
169
+ }
170
+ if (c.operator === '>' || c.operator === '>=') {
171
+ higher = higherGT(gt, c, options)
172
+ if (higher === c && higher !== gt) {
173
+ return false
174
+ }
175
+ } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {
176
+ return false
177
+ }
178
+ }
179
+ if (lt) {
180
+ if (needDomLTPre) {
181
+ if (c.semver.prerelease && c.semver.prerelease.length &&
182
+ c.semver.major === needDomLTPre.major &&
183
+ c.semver.minor === needDomLTPre.minor &&
184
+ c.semver.patch === needDomLTPre.patch) {
185
+ needDomLTPre = false
186
+ }
187
+ }
188
+ if (c.operator === '<' || c.operator === '<=') {
189
+ lower = lowerLT(lt, c, options)
190
+ if (lower === c && lower !== lt) {
191
+ return false
192
+ }
193
+ } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {
194
+ return false
195
+ }
196
+ }
197
+ if (!c.operator && (lt || gt) && gtltComp !== 0) {
198
+ return false
199
+ }
200
+ }
201
+
202
+ // if there was a < or >, and nothing in the dom, then must be false
203
+ // UNLESS it was limited by another range in the other direction.
204
+ // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0
205
+ if (gt && hasDomLT && !lt && gtltComp !== 0) {
206
+ return false
207
+ }
208
+
209
+ if (lt && hasDomGT && !gt && gtltComp !== 0) {
210
+ return false
211
+ }
212
+
213
+ // we needed a prerelease range in a specific tuple, but didn't get one
214
+ // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,
215
+ // because it includes prereleases in the 1.2.3 tuple
216
+ if (needDomGTPre || needDomLTPre) {
217
+ return false
218
+ }
219
+
220
+ return true
221
+ }
222
+
223
+ // >=1.2.3 is lower than >1.2.3
224
+ const higherGT = (a, b, options) => {
225
+ if (!a) {
226
+ return b
227
+ }
228
+ const comp = compare(a.semver, b.semver, options)
229
+ return comp > 0 ? a
230
+ : comp < 0 ? b
231
+ : b.operator === '>' && a.operator === '>=' ? b
232
+ : a
233
+ }
234
+
235
+ // <=1.2.3 is higher than <1.2.3
236
+ const lowerLT = (a, b, options) => {
237
+ if (!a) {
238
+ return b
239
+ }
240
+ const comp = compare(a.semver, b.semver, options)
241
+ return comp < 0 ? a
242
+ : comp > 0 ? b
243
+ : b.operator === '<' && a.operator === '<=' ? b
244
+ : a
245
+ }
246
+
247
+ module.exports = subset
@@ -0,0 +1,8 @@
1
+ const Range = require('../classes/range')
2
+
3
+ // Mostly just for testing and legacy API reasons
4
+ const toComparators = (range, options) =>
5
+ new Range(range, options).set
6
+ .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))
7
+
8
+ module.exports = toComparators
@@ -0,0 +1,11 @@
1
+ const Range = require('../classes/range')
2
+ const validRange = (range, options) => {
3
+ try {
4
+ // Return '*' instead of '' so that truthiness works.
5
+ // This will throw if it's invalid anyway
6
+ return new Range(range, options).range || '*'
7
+ } catch (er) {
8
+ return null
9
+ }
10
+ }
11
+ module.exports = validRange
@@ -0,0 +1,16 @@
1
+ import EventEmitter from 'events';
2
+ import { Application } from '@tachybase/server';
3
+ export type AppMigratorOptions = {
4
+ workDir?: string;
5
+ };
6
+ declare abstract class AppMigrator extends EventEmitter {
7
+ readonly workDir: string;
8
+ app: Application;
9
+ abstract direction: 'restore' | 'dump';
10
+ emitAsync: (event: string | symbol, ...args: any[]) => Promise<boolean>;
11
+ constructor(app: Application, options?: AppMigratorOptions);
12
+ tmpDir(): string;
13
+ rmDir(dir: string): Promise<void>;
14
+ clearWorkDir(): Promise<void>;
15
+ }
16
+ export { AppMigrator };
@@ -0,0 +1,61 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var app_migrator_exports = {};
29
+ __export(app_migrator_exports, {
30
+ AppMigrator: () => AppMigrator
31
+ });
32
+ module.exports = __toCommonJS(app_migrator_exports);
33
+ var import_crypto = __toESM(require("crypto"));
34
+ var import_events = __toESM(require("events"));
35
+ var import_promises = __toESM(require("fs/promises"));
36
+ var os = __toESM(require("os"));
37
+ var import_path = __toESM(require("path"));
38
+ var import_utils = require("@tachybase/utils");
39
+ class AppMigrator extends import_events.default {
40
+ workDir;
41
+ app;
42
+ constructor(app, options) {
43
+ super();
44
+ this.app = app;
45
+ this.workDir = (options == null ? void 0 : options.workDir) || this.tmpDir();
46
+ }
47
+ tmpDir() {
48
+ return import_path.default.resolve(os.tmpdir(), `tachybase-${import_crypto.default.randomUUID()}`);
49
+ }
50
+ async rmDir(dir) {
51
+ await import_promises.default.rm(dir, { recursive: true, force: true });
52
+ }
53
+ async clearWorkDir() {
54
+ await this.rmDir(this.workDir);
55
+ }
56
+ }
57
+ (0, import_utils.applyMixins)(AppMigrator, [import_utils.AsyncEmitter]);
58
+ // Annotate the CommonJS export names for ESM import in node:
59
+ 0 && (module.exports = {
60
+ AppMigrator
61
+ });
@@ -0,0 +1,4 @@
1
+ import { CollectionGroup } from '@tachybase/database';
2
+ export declare class CollectionGroupManager {
3
+ static collectionGroups: CollectionGroup[];
4
+ }
@@ -0,0 +1,29 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var collection_group_manager_exports = {};
19
+ __export(collection_group_manager_exports, {
20
+ CollectionGroupManager: () => CollectionGroupManager
21
+ });
22
+ module.exports = __toCommonJS(collection_group_manager_exports);
23
+ class CollectionGroupManager {
24
+ static collectionGroups = [];
25
+ }
26
+ // Annotate the CommonJS export names for ESM import in node:
27
+ 0 && (module.exports = {
28
+ CollectionGroupManager
29
+ });
@@ -0,0 +1,2 @@
1
+ import { Application } from '@tachybase/server';
2
+ export default function addRestoreCommand(app: Application): void;
@@ -0,0 +1,67 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var restore_command_exports = {};
19
+ __export(restore_command_exports, {
20
+ default: () => addRestoreCommand
21
+ });
22
+ module.exports = __toCommonJS(restore_command_exports);
23
+ var import_server = require("@tachybase/server");
24
+ var import_restorer = require("../restorer");
25
+ function addRestoreCommand(app) {
26
+ app.command("restore").ipc().argument("<string>", "restore file path").option("-a, --app <appName>", "sub app name if you want to restore into a sub app").option("-f, --force", "force restore").option(
27
+ "-g, --groups <groups>",
28
+ "groups to restore",
29
+ (value, previous) => {
30
+ return previous.concat([value]);
31
+ },
32
+ []
33
+ ).action(async (restoreFilePath, options) => {
34
+ if (!options.force) {
35
+ app.logger.warn("This action will overwrite your current data, please make sure you have a backup\u2757\uFE0F\u2757\uFE0F");
36
+ return;
37
+ }
38
+ let importApp = app;
39
+ if (options.app) {
40
+ if (!await app.db.getCollection("applications").repository.findOne({
41
+ filter: { name: options.app }
42
+ })) {
43
+ await app.db.getCollection("applications").repository.create({
44
+ values: {
45
+ name: options.app
46
+ }
47
+ });
48
+ }
49
+ const subApp = await import_server.AppSupervisor.getInstance().getApp(options.app);
50
+ if (!subApp) {
51
+ app.logger.error(`app ${options.app} not found`);
52
+ await app.stop();
53
+ return;
54
+ }
55
+ importApp = subApp;
56
+ }
57
+ const groups = new Set(options.groups);
58
+ groups.add("required");
59
+ const restorer = new import_restorer.Restorer(importApp, {
60
+ backUpFilePath: restoreFilePath
61
+ });
62
+ await restorer.restore({
63
+ groups
64
+ });
65
+ await app.upgrade();
66
+ });
67
+ }
@@ -0,0 +1,71 @@
1
+ import { DumpRulesGroupType } from '@tachybase/database';
2
+ import { AppMigrator } from './app-migrator';
3
+ type DumpOptions = {
4
+ groups: Set<DumpRulesGroupType>;
5
+ fileName?: string;
6
+ };
7
+ type BackUpStatusOk = {
8
+ name: string;
9
+ createdAt: Date;
10
+ fileSize: string;
11
+ status: 'ok';
12
+ };
13
+ type BackUpStatusDoing = {
14
+ name: string;
15
+ inProgress: true;
16
+ status: 'in_progress';
17
+ };
18
+ export declare class Dumper extends AppMigrator {
19
+ static dumpTasks: Map<string, Promise<any>>;
20
+ direction: "dump";
21
+ sqlContent: {
22
+ [key: string]: {
23
+ sql: string | string[];
24
+ group: DumpRulesGroupType;
25
+ };
26
+ };
27
+ static getTaskPromise(taskId: string): Promise<any> | undefined;
28
+ static getFileStatus(filePath: string): Promise<BackUpStatusOk | BackUpStatusDoing>;
29
+ static generateFileName(): string;
30
+ writeSQLContent(key: string, data: {
31
+ sql: string | string[];
32
+ group: DumpRulesGroupType;
33
+ }): void;
34
+ getSQLContent(key: string): {
35
+ sql: string | string[];
36
+ group: DumpRulesGroupType;
37
+ };
38
+ getCollectionsByDataTypes(groups: Set<DumpRulesGroupType>): Promise<string[]>;
39
+ dumpableCollections(): Promise<any[]>;
40
+ collectionsGroupByDataTypes(): Promise<{
41
+ [k: string]: any[];
42
+ }>;
43
+ backUpStorageDir(): string;
44
+ allBackUpFilePaths(options?: {
45
+ includeInProgress?: boolean;
46
+ dir?: string;
47
+ }): Promise<string[]>;
48
+ backUpFilePath(fileName: string): string;
49
+ lockFilePath(fileName: string): string;
50
+ writeLockFile(fileName: string): Promise<void>;
51
+ cleanLockFile(fileName: string): Promise<void>;
52
+ runDumpTask(options: Omit<DumpOptions, 'fileName'>): Promise<string>;
53
+ dumpableCollectionsGroupByGroup(): Promise<{
54
+ [x: string]: Pick<any, string>[];
55
+ }>;
56
+ dump(options: DumpOptions): Promise<{
57
+ filePath: string;
58
+ dirname: string;
59
+ }>;
60
+ dumpDb(options: DumpOptions): Promise<void>;
61
+ hasSqlContent(): boolean;
62
+ dumpMeta(additionalMeta?: object): Promise<void>;
63
+ dumpCollection(options: {
64
+ name: string;
65
+ }): Promise<void>;
66
+ packDumpedDir(fileName: string): Promise<{
67
+ filePath: string;
68
+ dirname: string;
69
+ }>;
70
+ }
71
+ export {};