@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.
- package/.turbo/turbo-build.log +12 -0
- package/README.md +118 -0
- package/README.zh-CN.md +118 -0
- package/client.d.ts +2 -0
- package/client.js +1 -0
- package/dist/client/Configuration.d.ts +2 -0
- package/dist/client/DuplicatorProvider.d.ts +5 -0
- package/dist/client/index.d.ts +5 -0
- package/dist/client/index.js +1 -0
- package/dist/client/locale/index.d.ts +4 -0
- package/dist/externalVersion.js +14 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +39 -0
- package/dist/locale/en-US.json +44 -0
- package/dist/locale/ja-JP.d.ts +25 -0
- package/dist/locale/ja-JP.js +46 -0
- package/dist/locale/ko_KR.json +50 -0
- package/dist/locale/pt-BR.d.ts +26 -0
- package/dist/locale/pt-BR.js +48 -0
- package/dist/locale/zh-CN.json +50 -0
- package/dist/node_modules/@hapi/topo/lib/index.d.ts +60 -0
- package/dist/node_modules/@hapi/topo/lib/index.js +1 -0
- package/dist/node_modules/@hapi/topo/package.json +1 -0
- package/dist/node_modules/archiver/LICENSE +22 -0
- package/dist/node_modules/archiver/index.js +68 -0
- package/dist/node_modules/archiver/lib/core.js +974 -0
- package/dist/node_modules/archiver/lib/error.js +40 -0
- package/dist/node_modules/archiver/lib/plugins/json.js +110 -0
- package/dist/node_modules/archiver/lib/plugins/tar.js +167 -0
- package/dist/node_modules/archiver/lib/plugins/zip.js +120 -0
- package/dist/node_modules/archiver/package.json +1 -0
- package/dist/node_modules/decompress/index.js +16 -0
- package/dist/node_modules/decompress/license +9 -0
- package/dist/node_modules/decompress/package.json +1 -0
- package/dist/node_modules/mkdirp/LICENSE +21 -0
- package/dist/node_modules/mkdirp/bin/cmd.js +68 -0
- package/dist/node_modules/mkdirp/index.js +1 -0
- package/dist/node_modules/mkdirp/lib/find-made.js +29 -0
- package/dist/node_modules/mkdirp/lib/mkdirp-manual.js +64 -0
- package/dist/node_modules/mkdirp/lib/mkdirp-native.js +39 -0
- package/dist/node_modules/mkdirp/lib/opts-arg.js +23 -0
- package/dist/node_modules/mkdirp/lib/path-arg.js +29 -0
- package/dist/node_modules/mkdirp/lib/use-native.js +10 -0
- package/dist/node_modules/mkdirp/package.json +1 -0
- package/dist/node_modules/mkdirp/readme.markdown +266 -0
- package/dist/node_modules/semver/LICENSE +15 -0
- package/dist/node_modules/semver/bin/semver.js +188 -0
- package/dist/node_modules/semver/classes/comparator.js +141 -0
- package/dist/node_modules/semver/classes/index.js +5 -0
- package/dist/node_modules/semver/classes/range.js +554 -0
- package/dist/node_modules/semver/classes/semver.js +302 -0
- package/dist/node_modules/semver/functions/clean.js +6 -0
- package/dist/node_modules/semver/functions/cmp.js +52 -0
- package/dist/node_modules/semver/functions/coerce.js +60 -0
- package/dist/node_modules/semver/functions/compare-build.js +7 -0
- package/dist/node_modules/semver/functions/compare-loose.js +3 -0
- package/dist/node_modules/semver/functions/compare.js +5 -0
- package/dist/node_modules/semver/functions/diff.js +65 -0
- package/dist/node_modules/semver/functions/eq.js +3 -0
- package/dist/node_modules/semver/functions/gt.js +3 -0
- package/dist/node_modules/semver/functions/gte.js +3 -0
- package/dist/node_modules/semver/functions/inc.js +19 -0
- package/dist/node_modules/semver/functions/lt.js +3 -0
- package/dist/node_modules/semver/functions/lte.js +3 -0
- package/dist/node_modules/semver/functions/major.js +3 -0
- package/dist/node_modules/semver/functions/minor.js +3 -0
- package/dist/node_modules/semver/functions/neq.js +3 -0
- package/dist/node_modules/semver/functions/parse.js +16 -0
- package/dist/node_modules/semver/functions/patch.js +3 -0
- package/dist/node_modules/semver/functions/prerelease.js +6 -0
- package/dist/node_modules/semver/functions/rcompare.js +3 -0
- package/dist/node_modules/semver/functions/rsort.js +3 -0
- package/dist/node_modules/semver/functions/satisfies.js +10 -0
- package/dist/node_modules/semver/functions/sort.js +3 -0
- package/dist/node_modules/semver/functions/valid.js +6 -0
- package/dist/node_modules/semver/index.js +1 -0
- package/dist/node_modules/semver/internal/constants.js +35 -0
- package/dist/node_modules/semver/internal/debug.js +9 -0
- package/dist/node_modules/semver/internal/identifiers.js +23 -0
- package/dist/node_modules/semver/internal/lrucache.js +40 -0
- package/dist/node_modules/semver/internal/parse-options.js +15 -0
- package/dist/node_modules/semver/internal/re.js +217 -0
- package/dist/node_modules/semver/package.json +1 -0
- package/dist/node_modules/semver/preload.js +2 -0
- package/dist/node_modules/semver/range.bnf +16 -0
- package/dist/node_modules/semver/ranges/gtr.js +4 -0
- package/dist/node_modules/semver/ranges/intersects.js +7 -0
- package/dist/node_modules/semver/ranges/ltr.js +4 -0
- package/dist/node_modules/semver/ranges/max-satisfying.js +25 -0
- package/dist/node_modules/semver/ranges/min-satisfying.js +24 -0
- package/dist/node_modules/semver/ranges/min-version.js +61 -0
- package/dist/node_modules/semver/ranges/outside.js +80 -0
- package/dist/node_modules/semver/ranges/simplify.js +47 -0
- package/dist/node_modules/semver/ranges/subset.js +247 -0
- package/dist/node_modules/semver/ranges/to-comparators.js +8 -0
- package/dist/node_modules/semver/ranges/valid.js +11 -0
- package/dist/server/app-migrator.d.ts +16 -0
- package/dist/server/app-migrator.js +61 -0
- package/dist/server/collection-group-manager.d.ts +4 -0
- package/dist/server/collection-group-manager.js +29 -0
- package/dist/server/commands/restore-command.d.ts +2 -0
- package/dist/server/commands/restore-command.js +67 -0
- package/dist/server/dumper.d.ts +71 -0
- package/dist/server/dumper.js +421 -0
- package/dist/server/errors/restore-check-error.d.ts +3 -0
- package/dist/server/errors/restore-check-error.js +32 -0
- package/dist/server/field-value-writer.d.ts +9 -0
- package/dist/server/field-value-writer.js +99 -0
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.js +33 -0
- package/dist/server/locale/zh-CN.d.ts +9 -0
- package/dist/server/locale/zh-CN.js +30 -0
- package/dist/server/resourcers/backup-files.d.ts +25 -0
- package/dist/server/resourcers/backup-files.js +206 -0
- package/dist/server/restorer.d.ts +35 -0
- package/dist/server/restorer.js +320 -0
- package/dist/server/server.d.ts +8 -0
- package/dist/server/server.js +52 -0
- package/dist/server/utils.d.ts +5 -0
- package/dist/server/utils.js +78 -0
- package/dist/swagger/index.d.ts +392 -0
- package/dist/swagger/index.js +447 -0
- package/package.json +48 -0
- package/server.d.ts +2 -0
- package/server.js +1 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
> @tachybase/module-backup@0.23.2 build /Users/seal/Documents/projects/tachybase/packages/module-backup
|
|
4
|
+
> tachybase-build --no-dts @tachybase/module-backup
|
|
5
|
+
|
|
6
|
+
[33m[33mThe CJS build of Vite's Node API is deprecated. See https://vitejs.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.[39m[39m
|
|
7
|
+
[4m[95m@tachybase/module-backup[39m[24m: [1mmodule-backup[22m build start
|
|
8
|
+
[4m[95m@tachybase/module-backup[39m[24m: build plugin client
|
|
9
|
+
[4m[95m@tachybase/module-backup[39m[24m: build plugin server source
|
|
10
|
+
[4m[95m@tachybase/module-backup[39m[24m: delete server files
|
|
11
|
+
[4m[95m@tachybase/module-backup[39m[24m: build plugin server dependencies
|
|
12
|
+
[4m[95m@tachybase/module-backup[39m[24m: These packages [33marchiver, mkdirp, @hapi/topo, decompress, semver[39m will be [3mbundled[23m to dist/node_modules. These packages [33m@tachybase/server, @tachybase/utils, @tachybase/database, dayjs, lodash, @tachybase/actions[39m will be [3mexclude[23m.
|
package/README.md
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Duplicator
|
|
2
|
+
|
|
3
|
+
English | [中文](./README.zh-CN.md)
|
|
4
|
+
|
|
5
|
+
TachyBase 应用的备份与还原插件,可用于应用的复制、迁移、升级等场景。
|
|
6
|
+
|
|
7
|
+
## 安装激活
|
|
8
|
+
|
|
9
|
+
内置插件无需手动安装激活。
|
|
10
|
+
|
|
11
|
+
## 使用方法
|
|
12
|
+
|
|
13
|
+
Duplicator 插件提供了 `dump` 和 `restore` 命令,分别用于备份和还原应用数据,可用于单应用的备份和还原,也可以跨应用。如果跨应用还原数据,请保证目标应用 TachyBase 版本与源应用一致,相对应插件也已下载本地。
|
|
14
|
+
|
|
15
|
+
**⚠️ 如果使用了继承(PostgreSQL)、视图、触发器等不兼容的特性,跨数据库还原备份数据可能失败。**
|
|
16
|
+
|
|
17
|
+
### 备份数据
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
yarn tachybase dump
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
选择需要备份的插件表结构及其数据
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
? Select the plugin collections to be dumped (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
|
|
27
|
+
== Required ==
|
|
28
|
+
- migration (core) (Disabled)
|
|
29
|
+
- collections (collection-manager) (Disabled)
|
|
30
|
+
- uiSchemas (ui-schema-storage) (Disabled)
|
|
31
|
+
- uiRoutes (ui-routes-storage) (Disabled)
|
|
32
|
+
- acl (acl) (Disabled)
|
|
33
|
+
- workflowConfig (workflow) (Disabled)
|
|
34
|
+
- snapshot-field (snapshot-field) (Disabled)
|
|
35
|
+
- sequences (sequence-field) (Disabled)
|
|
36
|
+
== Optional ==
|
|
37
|
+
❯◉ executionLogs (workflow)
|
|
38
|
+
◉ users (users)
|
|
39
|
+
◉ storageSetting (file-manager)
|
|
40
|
+
◉ attachmentRecords (file-manager)
|
|
41
|
+
◉ systemSettings (system-settings)
|
|
42
|
+
◉ verificationProviders (verification)
|
|
43
|
+
◉ verificationData (verification)
|
|
44
|
+
◉ oidcProviders (oidc)
|
|
45
|
+
◉ samlProviders (saml)
|
|
46
|
+
◉ mapConfiguration (map)
|
|
47
|
+
(Move up and down to reveal more choices)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
选择需要备份的其他数据表的记录
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
? Select the collection records to be dumped (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
|
|
54
|
+
❯◉ Test1
|
|
55
|
+
❯◉ Test2
|
|
56
|
+
❯◉ Test3
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
数据备份成功之后,备份文件位于 `storage/duplicator` 目录下:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
dumped to /your/apps/a/storage/duplicator/dump-20230210T223910.nbdump
|
|
63
|
+
dumped file size: 20.8 kB
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 还原数据
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
yarn tachybase restore /your/apps/a/storage/duplicator/dump-20230210T223910.nbdump
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
导入前请先备份数据
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
? Danger !!! This action will overwrite your current data, please make sure you have a backup❗️❗️ (y/N)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
选择需要还原的插件表结构及其数据
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
? Select the plugin collections to be restored (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
|
|
82
|
+
== Required ==
|
|
83
|
+
- migration (core) (Disabled)
|
|
84
|
+
- collections (collection-manager) (Disabled)
|
|
85
|
+
- uiSchemas (ui-schema-storage) (Disabled)
|
|
86
|
+
- uiRoutes (ui-routes-storage) (Disabled)
|
|
87
|
+
- acl (acl) (Disabled)
|
|
88
|
+
- workflowConfig (workflow) (Disabled)
|
|
89
|
+
- sequences (sequence-field) (Disabled)
|
|
90
|
+
== Optional ==
|
|
91
|
+
❯◯ executionLogs (workflow)
|
|
92
|
+
◯ users (users)
|
|
93
|
+
◯ storageSetting (file-manager)
|
|
94
|
+
◯ attachmentRecords (file-manager)
|
|
95
|
+
◯ systemSettings (system-settings)
|
|
96
|
+
◯ verificationProviders (verification)
|
|
97
|
+
◯ verificationData (verification)
|
|
98
|
+
◯ auditLogs (audit-logs)
|
|
99
|
+
◯ iframe html storage (iframe-block)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
选择需要还原的其他数据表的记录
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
? Select the collection records to be restored (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
|
|
106
|
+
❯◉ Test1
|
|
107
|
+
❯◉ Test2
|
|
108
|
+
❯◉ Test3
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
成功之后,重启应用
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# for development
|
|
115
|
+
yarn dev
|
|
116
|
+
# for production
|
|
117
|
+
yarn start
|
|
118
|
+
```
|
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Duplicator
|
|
2
|
+
|
|
3
|
+
[English](./README.md) | 中文
|
|
4
|
+
|
|
5
|
+
TachyBase 应用的备份与还原插件,可用于应用的复制、迁移、升级等场景。
|
|
6
|
+
|
|
7
|
+
## 安装激活
|
|
8
|
+
|
|
9
|
+
内置插件无需手动安装激活。
|
|
10
|
+
|
|
11
|
+
## 使用方法
|
|
12
|
+
|
|
13
|
+
Duplicator 插件提供了 `dump` 和 `restore` 命令,分别用于备份和还原应用数据,可用于单应用的备份和还原,也可以跨应用。如果跨应用还原数据,请保证目标应用 TachyBase 版本与源应用一致,相对应插件也已下载本地。
|
|
14
|
+
|
|
15
|
+
**⚠️ 如果使用了继承(PostgreSQL)、视图、触发器等不兼容的特性,跨数据库还原备份数据可能失败。**
|
|
16
|
+
|
|
17
|
+
### 备份数据
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
yarn tachybase dump
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
选择需要备份的插件表结构及其数据
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
? Select the plugin collections to be dumped (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
|
|
27
|
+
== Required ==
|
|
28
|
+
- migration (core) (Disabled)
|
|
29
|
+
- collections (collection-manager) (Disabled)
|
|
30
|
+
- uiSchemas (ui-schema-storage) (Disabled)
|
|
31
|
+
- uiRoutes (ui-routes-storage) (Disabled)
|
|
32
|
+
- acl (acl) (Disabled)
|
|
33
|
+
- workflowConfig (workflow) (Disabled)
|
|
34
|
+
- snapshot-field (snapshot-field) (Disabled)
|
|
35
|
+
- sequences (sequence-field) (Disabled)
|
|
36
|
+
== Optional ==
|
|
37
|
+
❯◉ executionLogs (workflow)
|
|
38
|
+
◉ users (users)
|
|
39
|
+
◉ storageSetting (file-manager)
|
|
40
|
+
◉ attachmentRecords (file-manager)
|
|
41
|
+
◉ systemSettings (system-settings)
|
|
42
|
+
◉ verificationProviders (verification)
|
|
43
|
+
◉ verificationData (verification)
|
|
44
|
+
◉ oidcProviders (oidc)
|
|
45
|
+
◉ samlProviders (saml)
|
|
46
|
+
◉ mapConfiguration (map)
|
|
47
|
+
(Move up and down to reveal more choices)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
选择需要备份的其他数据表的记录
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
? Select the collection records to be dumped (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
|
|
54
|
+
❯◉ Test1
|
|
55
|
+
❯◉ Test2
|
|
56
|
+
❯◉ Test3
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
数据备份成功之后,备份文件位于 `storage/duplicator` 目录下:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
dumped to /your/apps/a/storage/duplicator/dump-20230210T223910.nbdump
|
|
63
|
+
dumped file size: 20.8 kB
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 还原数据
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
yarn tachybase restore /your/apps/a/storage/duplicator/dump-20230210T223910.nbdump
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
导入前请先备份数据
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
? Danger !!! This action will overwrite your current data, please make sure you have a backup❗️❗️ (y/N)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
选择需要还原的插件表结构及其数据
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
? Select the plugin collections to be restored (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
|
|
82
|
+
== Required ==
|
|
83
|
+
- migration (core) (Disabled)
|
|
84
|
+
- collections (collection-manager) (Disabled)
|
|
85
|
+
- uiSchemas (ui-schema-storage) (Disabled)
|
|
86
|
+
- uiRoutes (ui-routes-storage) (Disabled)
|
|
87
|
+
- acl (acl) (Disabled)
|
|
88
|
+
- workflowConfig (workflow) (Disabled)
|
|
89
|
+
- sequences (sequence-field) (Disabled)
|
|
90
|
+
== Optional ==
|
|
91
|
+
❯◯ executionLogs (workflow)
|
|
92
|
+
◯ users (users)
|
|
93
|
+
◯ storageSetting (file-manager)
|
|
94
|
+
◯ attachmentRecords (file-manager)
|
|
95
|
+
◯ systemSettings (system-settings)
|
|
96
|
+
◯ verificationProviders (verification)
|
|
97
|
+
◯ verificationData (verification)
|
|
98
|
+
◯ auditLogs (audit-logs)
|
|
99
|
+
◯ iframe html storage (iframe-block)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
选择需要还原的其他数据表的记录
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
? Select the collection records to be restored (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
|
|
106
|
+
❯◉ Test1
|
|
107
|
+
❯◉ Test2
|
|
108
|
+
❯◉ Test3
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
成功之后,重启应用
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# for development
|
|
115
|
+
yarn dev
|
|
116
|
+
# for production
|
|
117
|
+
yarn start
|
|
118
|
+
```
|
package/client.d.ts
ADDED
package/client.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('./dist/client/index.js');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(d,l){typeof exports=="object"&&typeof module!="undefined"?l(exports,require("@tachybase/client"),require("react/jsx-runtime"),require("react"),require("@tachybase/components"),require("@ant-design/icons"),require("antd"),require("react-i18next")):typeof define=="function"&&define.amd?define(["exports","@tachybase/client","react/jsx-runtime","react","@tachybase/components","@ant-design/icons","antd","react-i18next"],l):(d=typeof globalThis!="undefined"?globalThis:d||self,l(d["@tachybase/module-backup"]={},d["@tachybase/client"],d.jsxRuntime,d.react,d["@tachybase/components"],d["@ant-design/icons"],d.antd,d["react-i18next"]))})(this,function(d,l,e,y,L,T,f,P){"use strict";var Z=Object.defineProperty,R=Object.defineProperties;var ee=Object.getOwnPropertyDescriptors;var z=Object.getOwnPropertySymbols;var te=Object.prototype.hasOwnProperty,oe=Object.prototype.propertyIsEnumerable;var W=(d,l,e)=>l in d?Z(d,l,{enumerable:!0,configurable:!0,writable:!0,value:e}):d[l]=e,q=(d,l)=>{for(var e in l||(l={}))te.call(l,e)&&W(d,e,l[e]);if(z)for(var e of z(l))oe.call(l,e)&&W(d,e,l[e]);return d},D=(d,l)=>R(d,ee(l));var O=(d,l,e)=>new Promise((y,L)=>{var T=S=>{try{P(e.next(S))}catch(M){L(M)}},f=S=>{try{P(e.throw(S))}catch(M){L(M)}},P=S=>S.done?y(S.value):Promise.resolve(S.value).then(T,f);P((e=e.apply(d,l)).next())});var S=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},M={exports:{}};(function(a,k){(function(u,r){r()})(S,function(){function u(t,o){return typeof o=="undefined"?o={autoBom:!1}:typeof o!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),o={autoBom:!o}),o.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob(["\uFEFF",t],{type:t.type}):t}function r(t,o,b){var n=new XMLHttpRequest;n.open("GET",t),n.responseType="blob",n.onload=function(){m(n.response,o,b)},n.onerror=function(){console.error("could not download file")},n.send()}function c(t){var o=new XMLHttpRequest;o.open("HEAD",t,!1);try{o.send()}catch(b){}return 200<=o.status&&299>=o.status}function h(t){try{t.dispatchEvent(new MouseEvent("click"))}catch(b){var o=document.createEvent("MouseEvents");o.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(o)}}var p=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof S=="object"&&S.global===S?S:void 0,w=p.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),m=p.saveAs||(typeof window!="object"||window!==p?function(){}:"download"in HTMLAnchorElement.prototype&&!w?function(t,o,b){var n=p.URL||p.webkitURL,i=document.createElement("a");o=o||t.name||"download",i.download=o,i.rel="noopener",typeof t=="string"?(i.href=t,i.origin===location.origin?h(i):c(i.href)?r(t,o,b):h(i,i.target="_blank")):(i.href=n.createObjectURL(t),setTimeout(function(){n.revokeObjectURL(i.href)},4e4),setTimeout(function(){h(i)},0))}:"msSaveOrOpenBlob"in navigator?function(t,o,b){if(o=o||t.name||"download",typeof t!="string")navigator.msSaveOrOpenBlob(u(t,b),o);else if(c(t))r(t,o,b);else{var n=document.createElement("a");n.href=t,n.target="_blank",setTimeout(function(){h(n)})}}:function(t,o,b,n){if(n=n||open("","_blank"),n&&(n.document.title=n.document.body.innerText="downloading..."),typeof t=="string")return r(t,o,b);var i=t.type==="application/octet-stream",v=/constructor/i.test(p.HTMLElement)||p.safari,s=/CriOS\/[\d]+/.test(navigator.userAgent);if((s||i&&v||w)&&typeof FileReader!="undefined"){var g=new FileReader;g.onloadend=function(){var x=g.result;x=s?x:x.replace(/^data:[^;]*;/,"data:attachment/file;"),n?n.location.href=x:location=x,n=null},g.readAsDataURL(t)}else{var C=p.URL||p.webkitURL,A=C.createObjectURL(t);n?n.location=A:location.href=A,n=null,setTimeout(function(){C.revokeObjectURL(A)},4e4)}});p.saveAs=m.saveAs=m,a.exports=m})})(M);var K=M.exports;const I="backup";function E(){return P.useTranslation(I,{nsMode:"fallback"})}const{Dragger:X}=f.Upload;function J(a){const k=r=>{var c;(c=a.onChange)==null||c.call(a,r)},u=l.useAPIClient();return D(q({},a),{customRequest({action:r,data:c,file:h,filename:p,headers:w,onError:m,onProgress:t,onSuccess:o,withCredentials:b}){const n=new FormData;return c&&Object.keys(c).forEach(i=>{n.append(i,c[i])}),n.append(p,h),u.axios.post(r,n,{withCredentials:b,headers:w,onUploadProgress:({total:i,loaded:v})=>{t({percent:Math.round(v/i*100).toFixed(2)},h)}}).then(({data:i})=>{o(i,h)}).catch(m).finally(()=>{}),{abort(){console.log("upload progress is aborted.")}}},onChange:k})}const U=a=>{const{collectionsData:k}=a,{t:u}=E(),[r,c]=y.useState(!1),[h,p]=y.useState(k);y.useEffect(()=>{p(k)},[k]);const w=l.useAPIClient(),m=l.useCompile(),t=y.useMemo(()=>w.resource("backupFiles"),[w]),o=()=>O(this,null,function*(){if(a.isBackup){const s=yield t.dumpableCollections();p(s==null?void 0:s.data),c(!0)}c(!0)}),b=()=>{c(!1)},n=()=>{c(!1)},i=[{title:u("Collection"),dataIndex:"collection",key:"collection",render:(s,g)=>{const C=m(g.title);return g.name===C?C:e.jsxs("div",{children:[g.name," ",e.jsxs("span",{style:{color:"rgba(0, 0, 0, 0.3)",fontSize:"0.9em"},children:["(",m(g.title),")"]})]})}},{title:u("Origin"),dataIndex:"origin",key:"origin",width:"50%"}],v=Object.keys(h||{}).map(s=>({key:s,label:u(`${s}.title`),children:e.jsxs(e.Fragment,{children:[e.jsx(f.Alert,{style:{marginBottom:16},message:u(`${s}.description`)}),e.jsx(f.Table,{pagination:{pageSize:100},bordered:!0,size:"small",dataSource:h[s],columns:i,scroll:{y:400}})]})}));return e.jsxs(e.Fragment,{children:[e.jsx("a",{onClick:o,children:u("Learn more")}),e.jsx(f.Modal,{title:u("Backup instructions"),width:"80vw",open:r,footer:null,onOk:b,onCancel:n,children:e.jsx(f.Tabs,{defaultActiveKey:"required",items:v})})]})},G=({ButtonComponent:a=f.Button,title:k,upload:u=!1,fileData:r})=>{const{t:c}=E(),[h,p]=y.useState(["required"]),[w,m]=y.useState(!1),[t,o]=y.useState(null),[b,n]=y.useState(!1),i=l.useAPIClient(),v=y.useMemo(()=>i.resource("backupFiles"),[i]),[s,g]=y.useState([]);y.useEffect(()=>{g(Object.keys((t==null?void 0:t.dumpableCollectionsGroupByGroup)||[]).map(B=>({value:B,label:c(`${B}.title`),disabled:["required","skipped"].includes(B)})))},[t]);const C=()=>O(this,null,function*(){var B,H,$;if(m(!0),!u){n(!0);const{data:F}=yield v.get({filterByTk:r.name});g(Object.keys(((H=(B=F==null?void 0:F.data)==null?void 0:B.meta)==null?void 0:H.dumpableCollectionsGroupByGroup)||[]).map(j=>({value:j,label:c(`${j}.title`),disabled:["required","skipped"].includes(j)}))),o(($=F==null?void 0:F.data)==null?void 0:$.meta),n(!1)}}),A=()=>{v.restore({values:{dataTypes:h,filterByTk:r==null?void 0:r.name,key:t==null?void 0:t.key}}),m(!1)},x=()=>{m(!1),o(null),p(["required"])};return e.jsxs(e.Fragment,{children:[e.jsx(a,{onClick:C,children:k}),e.jsx(f.Modal,{title:c("Restore"),width:800,footer:u&&!t?null:void 0,open:w,onOk:A,onCancel:x,children:e.jsxs(f.Spin,{spinning:b,children:[u&&!t&&e.jsx(V,{setRestoreData:o}),(!u||t)&&[e.jsxs("strong",{style:{fontWeight:600,display:"block",margin:"16px 0 8px"},children:[c("Select the data to be restored")," (",e.jsx(U,{collectionsData:t==null?void 0:t.dumpableCollectionsGroupByGroup}),"):"]},"info"),e.jsx("div",{style:{lineHeight:2,marginBottom:8},children:e.jsx(L.FormItem,{children:e.jsx(l.Checkbox.Group,{options:s,style:{flexDirection:"column"},value:h,onChange:B=>p(B)})})},"dataType")]]})})]})},Q=({ButtonComponent:a=f.Button,refresh:k})=>{const{t:u}=E(),[r,c]=y.useState(!1),[h,p]=y.useState(["required"]),w=l.useAPIClient(),{notification:m}=f.App.useApp(),[t,o]=y.useState([]),b=()=>O(this,null,function*(){const{data:v}=yield w.resource("backupFiles").dumpableCollections();o(Object.keys(v||[]).map(s=>({value:s,label:u(`${s}.title`),disabled:["required","skipped"].includes(s)}))),c(!0)}),n=()=>{w.request({url:"backupFiles:create",method:"post",data:{dataTypes:h}}),m.info({key:"backup",message:e.jsxs("span",{children:[u("Processing...")," ",e.jsx(f.Spin,{indicator:e.jsx(T.LoadingOutlined,{style:{fontSize:24},spin:!0})})]}),duration:0}),c(!1),p(["required"]),setTimeout(()=>{k()},500)},i=()=>{c(!1),p(["required"])};return e.jsxs(e.Fragment,{children:[e.jsx(a,{icon:e.jsx(T.PlusOutlined,{}),type:"primary",onClick:b,children:u("New backup")}),e.jsxs(f.Modal,{title:u("New backup"),width:800,open:r,onOk:n,onCancel:i,children:[e.jsxs("strong",{style:{fontWeight:600,display:"block",margin:"16px 0 8px"},children:[u("Select the data to be backed up")," (",e.jsx(U,{isBackup:!0}),"):"]}),e.jsx("div",{style:{lineHeight:2,marginBottom:8},children:e.jsx(l.Checkbox.Group,{options:t,style:{flexDirection:"column"},onChange:v=>p(v),value:h})})]})]})},V=a=>{const{t:k}=E(),u={multiple:!1,action:"/backupFiles:upload",onChange(r){var h,p,w;r.fileList.length>1&&r.fileList.splice(0,r.fileList.length-1);const{status:c}=r.file;c==="done"?(f.message.success(`${r.file.name} `+k("file uploaded successfully")),a.setRestoreData(D(q({},(p=(h=r.file.response)==null?void 0:h.data)==null?void 0:p.meta),{key:(w=r.file.response)==null?void 0:w.data.key}))):c==="error"&&f.message.error(`${r.file.name} `+k("file upload failed"))},onDrop(r){console.log("Dropped files",r.dataTransfer.files)}};return e.jsxs(X,D(q({},J(u)),{children:[e.jsx("p",{className:"ant-upload-drag-icon",children:e.jsx(T.InboxOutlined,{})}),e.jsxs("p",{className:"ant-upload-text",children:[" ",k("Click or drag file to this area to upload")]})]}))},Y=()=>{const{t:a}=E(),k=l.useAPIClient(),[u,r]=y.useState([]),[c,h]=y.useState(!1),[p,w]=y.useState(!1),{modal:m,notification:t}=f.App.useApp(),o=y.useMemo(()=>k.resource("backupFiles"),[k]),b=y.useCallback(()=>O(this,null,function*(){yield n()}),[]);l.useNoticeSub("backup",()=>{t.info({key:"backup",message:a("Done")}),b()}),y.useEffect(()=>{n()},[]);const n=()=>O(this,null,function*(){h(!0);const{data:s}=yield o.list();r(s.data),h(!1)}),i=s=>O(this,null,function*(){w(s.name);const g=yield k.request({url:"backupFiles:download",method:"get",params:{filterByTk:s.name},responseType:"blob"});w(!1);const C=new Blob([g.data]);K.saveAs(C,s.name)}),v=s=>{m.confirm({title:a("Delete record",{ns:"core"}),content:a("Are you sure you want to delete it?",{ns:"core"}),onOk:()=>O(this,null,function*(){yield o.destroy({filterByTk:s.name}),yield n(),f.message.success(a("Deleted successfully"))})})};return e.jsx("div",{children:e.jsxs(f.Card,{bordered:!1,children:[e.jsxs(f.Space,{style:{float:"right",marginBottom:16},children:[e.jsx(f.Button,{onClick:b,icon:e.jsx(T.ReloadOutlined,{}),children:a("Refresh")}),e.jsx(G,{upload:!0,title:e.jsxs(e.Fragment,{children:[e.jsx(T.UploadOutlined,{})," ",a("Restore backup from local")]})}),e.jsx(Q,{refresh:b})]}),e.jsx(f.Table,{dataSource:u,loading:c,columns:[{title:a("Backup file"),dataIndex:"name",width:400,onCell:s=>s.inProgress?{colSpan:4}:{},render:(s,g)=>g.inProgress?e.jsxs("div",{style:{color:"rgba(0, 0, 0, 0.88)"},children:[s,"(",a("Backing up"),"...)"]}):e.jsx("div",{children:s})},{title:a("File size"),dataIndex:"fileSize",onCell:s=>s.inProgress?{colSpan:0}:{}},{title:a("Created at",{ns:"core"}),dataIndex:"createdAt",onCell:s=>s.inProgress?{colSpan:0}:{},render:s=>e.jsx(l.DatePicker.ReadPretty,{value:s,showTime:!0})},{title:a("Actions",{ns:"core"}),dataIndex:"actions",onCell:s=>s.inProgress?{colSpan:0}:{},render:(s,g)=>e.jsxs(f.Space,{split:e.jsx(f.Divider,{type:"vertical"}),children:[e.jsx(G,{ButtonComponent:"a",title:a("Restore"),fileData:g}),e.jsx("a",{type:"link",onClick:()=>i(g),children:a("Download")}),e.jsx("a",{onClick:()=>v(g),children:a("Delete")})]})}]})]})})},_=function(a){return e.jsx(l.SchemaComponentOptions,{children:a.children})};_.displayName="DuplicatorProvider";class N extends l.Plugin{load(){return O(this,null,function*(){this.app.use(_),this.app.systemSettingsManager.add("system-services."+I,{title:this.t("Backup & Restore"),icon:"CloudServerOutlined",Component:Y,aclSnippet:"pm.backup.restore"})})}}d.PluginBackupRestoreClient=N,d.default=N,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const NAMESPACE = "backup";
|
|
2
|
+
export declare function lang(key: string): string;
|
|
3
|
+
export declare function generateNTemplate(key: string): string;
|
|
4
|
+
export declare function useDuplicatorTranslation(): import("react-i18next").UseTranslationResponse<"backup", undefined>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
"react": "18.3.1",
|
|
3
|
+
"@tachybase/client": "0.23.8",
|
|
4
|
+
"@tachybase/components": "0.23.8",
|
|
5
|
+
"@ant-design/icons": "5.5.2",
|
|
6
|
+
"antd": "5.22.5",
|
|
7
|
+
"@tachybase/server": "0.23.8",
|
|
8
|
+
"@tachybase/utils": "0.23.8",
|
|
9
|
+
"@tachybase/database": "0.23.8",
|
|
10
|
+
"dayjs": "1.11.13",
|
|
11
|
+
"lodash": "4.17.21",
|
|
12
|
+
"react-i18next": "15.2.0",
|
|
13
|
+
"@tachybase/actions": "0.23.8"
|
|
14
|
+
};
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
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 __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var src_exports = {};
|
|
30
|
+
__export(src_exports, {
|
|
31
|
+
default: () => import_server.default
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(src_exports);
|
|
34
|
+
__reExport(src_exports, require("./server"), module.exports);
|
|
35
|
+
var import_server = __toESM(require("./server"));
|
|
36
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
37
|
+
0 && (module.exports = {
|
|
38
|
+
...require("./server")
|
|
39
|
+
});
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Backed up successfully": "Backed up successfully",
|
|
3
|
+
"Backing up": "Backing up",
|
|
4
|
+
"Backup": "Backup",
|
|
5
|
+
"Backup & Restore": "Backup & Restore",
|
|
6
|
+
"Backup file": "Backup file",
|
|
7
|
+
"Backup instructions": "Backup instructions",
|
|
8
|
+
"Business data": "Business data",
|
|
9
|
+
"Click or drag file to this area to upload": "Click or drag file to this area to upload",
|
|
10
|
+
"Configuration": "Configuration",
|
|
11
|
+
"Delete": "Delete",
|
|
12
|
+
"Deleted successfully": "Deleted successfully",
|
|
13
|
+
"Download": "Download",
|
|
14
|
+
"File size": "File size",
|
|
15
|
+
"Learn more": "Learn more",
|
|
16
|
+
"New backup": "New backup",
|
|
17
|
+
"Origin": "Origin",
|
|
18
|
+
"Plugin": "Plugin",
|
|
19
|
+
"Refresh": "Refresh",
|
|
20
|
+
"Restore": "Restore",
|
|
21
|
+
"Restore backup from local": "Restore backup from local",
|
|
22
|
+
"Select the data to be backed up": "Select the data to be backed up",
|
|
23
|
+
"Select the data to be restored": "Select the data to be restored",
|
|
24
|
+
"Start backup": "Start backup",
|
|
25
|
+
"Start restore": "Start restore",
|
|
26
|
+
"System config": "System config",
|
|
27
|
+
"System metadata": "System metadata",
|
|
28
|
+
"custom.description": "Custom collection data",
|
|
29
|
+
"custom.title": "Custom collection data",
|
|
30
|
+
"file upload failed": "file upload failed",
|
|
31
|
+
"file uploaded successfully": "file uploaded successfully",
|
|
32
|
+
"log.description": "Log data",
|
|
33
|
+
"log.title": "Log data",
|
|
34
|
+
"required.description": "Required data",
|
|
35
|
+
"required.title": "Required data",
|
|
36
|
+
"skipped.description": "Skipped data",
|
|
37
|
+
"skipped.title": "Skipped data",
|
|
38
|
+
"third-party.description": "Third-party service information",
|
|
39
|
+
"third-party.title": "Third-party service information",
|
|
40
|
+
"unknown.description": "Data without configured dump rules",
|
|
41
|
+
"unknown.title": "Unknown",
|
|
42
|
+
"user.description": "User data",
|
|
43
|
+
"user.title": "User data"
|
|
44
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
'System metadata': string;
|
|
3
|
+
'System config': string;
|
|
4
|
+
'Business data': string;
|
|
5
|
+
'Backup & Restore': string;
|
|
6
|
+
Backup: string;
|
|
7
|
+
Restore: string;
|
|
8
|
+
Configuration: string;
|
|
9
|
+
'Select the data to be backed up': string;
|
|
10
|
+
'Select the data to be restored': string;
|
|
11
|
+
'Learn more': string;
|
|
12
|
+
'Start backup': string;
|
|
13
|
+
'Start restore': string;
|
|
14
|
+
'Backed up successfully': string;
|
|
15
|
+
Plugin: string;
|
|
16
|
+
'file uploaded successfully': string;
|
|
17
|
+
Download: string;
|
|
18
|
+
'Restore backup from local': string;
|
|
19
|
+
'Backup instructions': string;
|
|
20
|
+
'File size': string;
|
|
21
|
+
'New backup': string;
|
|
22
|
+
Origin: string;
|
|
23
|
+
'Backing up': string;
|
|
24
|
+
};
|
|
25
|
+
export default _default;
|
|
@@ -0,0 +1,46 @@
|
|
|
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 ja_JP_exports = {};
|
|
19
|
+
__export(ja_JP_exports, {
|
|
20
|
+
default: () => ja_JP_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(ja_JP_exports);
|
|
23
|
+
var ja_JP_default = {
|
|
24
|
+
"System metadata": "\u30B7\u30B9\u30C6\u30E0\u30E1\u30BF\u30C7\u30FC\u30BF",
|
|
25
|
+
"System config": "\u30B7\u30B9\u30C6\u30E0\u69CB\u6210",
|
|
26
|
+
"Business data": "\u30D3\u30B8\u30CD\u30B9\u30C7\u30FC\u30BF",
|
|
27
|
+
"Backup & Restore": "\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3068\u30EA\u30B9\u30C8\u30A2",
|
|
28
|
+
Backup: "\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7",
|
|
29
|
+
Restore: "\u30EA\u30B9\u30C8\u30A2",
|
|
30
|
+
Configuration: "\u69CB\u6210",
|
|
31
|
+
"Select the data to be backed up": "\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3055\u308C\u305F\u30C7\u30FC\u30BF\u306E\u9078\u629E",
|
|
32
|
+
"Select the data to be restored": "\u30EA\u30B9\u30C8\u30A2\u3055\u308C\u305F\u30C7\u30FC\u30BF\u306E\u9078\u629E",
|
|
33
|
+
"Learn more": "\u8A73\u7D30",
|
|
34
|
+
"Start backup": "\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u306E\u958B\u59CB",
|
|
35
|
+
"Start restore": "\u30EA\u30B9\u30C8\u30A2\u3092\u958B\u59CB",
|
|
36
|
+
"Backed up successfully": "\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u6210\u529F",
|
|
37
|
+
Plugin: "\u30D7\u30E9\u30B0\u30A4\u30F3",
|
|
38
|
+
"file uploaded successfully": "\u30D5\u30A1\u30A4\u30EB\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306B\u6210\u529F\u3057\u307E\u3057\u305F",
|
|
39
|
+
Download: "\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",
|
|
40
|
+
"Restore backup from local": "\u30ED\u30FC\u30AB\u30EB\u304B\u3089\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u306B\u8FD4\u4FE1",
|
|
41
|
+
"Backup instructions": "\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u306E\u8AAC\u660E",
|
|
42
|
+
"File size": "\u30D5\u30A1\u30A4\u30EB\u30B5\u30A4\u30BA",
|
|
43
|
+
"New backup": "\u65B0\u898F\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7",
|
|
44
|
+
"Origin": "\u30BD\u30FC\u30B9",
|
|
45
|
+
"Backing up": "\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u4E2D"
|
|
46
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Backed up successfully": "성공적으로 백업됨",
|
|
3
|
+
"Backing up": "백업 중",
|
|
4
|
+
"Backup": "백업",
|
|
5
|
+
"Backup & Restore": "백업 및 복원",
|
|
6
|
+
"Backup file": "백업 파일",
|
|
7
|
+
"Backup instructions": "백업 지침",
|
|
8
|
+
"Basic Data": "기본 데이터",
|
|
9
|
+
"Business data": "비즈니스 데이터",
|
|
10
|
+
"Click or drag file to this area to upload": "여기를 클릭하거나 파일을 끌어다 이곳에 업로드하세요",
|
|
11
|
+
"Configuration": "구성",
|
|
12
|
+
"Delete": "삭제",
|
|
13
|
+
"Deleted successfully": "성공적으로 삭제됨",
|
|
14
|
+
"Download": "다운로드",
|
|
15
|
+
"File size": "파일 크기",
|
|
16
|
+
"Learn more": "더 알아보기",
|
|
17
|
+
"New backup": "새로운 백업",
|
|
18
|
+
"Optional Data": "선택 데이터",
|
|
19
|
+
"Origin": "원본",
|
|
20
|
+
"Plugin": "플러그인",
|
|
21
|
+
"Refresh": "새로 고침",
|
|
22
|
+
"Restore": "복원",
|
|
23
|
+
"Restore backup from local": "로컬에서 백업 복원",
|
|
24
|
+
"Select Import Plugins": "가져올 플러그인 선택",
|
|
25
|
+
"Select Import data": "가져올 데이터 선택",
|
|
26
|
+
"Select User Collections": "사용자 데이터 선택",
|
|
27
|
+
"Select the data to be backed up": "백업할 데이터 선택",
|
|
28
|
+
"Select the data to be restored": "복원할 데이터 선택",
|
|
29
|
+
"Start backup": "백업 시작",
|
|
30
|
+
"Start restore": "복원 시작",
|
|
31
|
+
"System config": "시스템 설정",
|
|
32
|
+
"System metadata": "시스템 메타데이터",
|
|
33
|
+
"User Data": "사용자 데이터",
|
|
34
|
+
"custom.description": "사용자 정의 데이터",
|
|
35
|
+
"custom.title": "사용자 정의 데이터",
|
|
36
|
+
"file upload failed": "파일 업로드 실패",
|
|
37
|
+
"file uploaded successfully": "파일 업로드 성공",
|
|
38
|
+
"log.description": "로그 데이터",
|
|
39
|
+
"log.title": "로그 데이터",
|
|
40
|
+
"required.description": "필수 데이터",
|
|
41
|
+
"required.title": "필수 데이터",
|
|
42
|
+
"skipped.description": "건너뛴 데이터",
|
|
43
|
+
"skipped.title": "건너뛴 데이터",
|
|
44
|
+
"third-party.description": "제3자 서비스 정보",
|
|
45
|
+
"third-party.title": "제3자 서비스 정보",
|
|
46
|
+
"unknown.description": "백업 규칙이 설정되지 않은 데이터",
|
|
47
|
+
"unknown.title": "알 수 없는 데이터",
|
|
48
|
+
"user.description": "사용자 데이터",
|
|
49
|
+
"user.title": "사용자 데이터"
|
|
50
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
declare const locale: {
|
|
2
|
+
'System metadata': string;
|
|
3
|
+
'System config': string;
|
|
4
|
+
'Business data': string;
|
|
5
|
+
'Backup & Restore': string;
|
|
6
|
+
Backup: string;
|
|
7
|
+
Restore: string;
|
|
8
|
+
Configuration: string;
|
|
9
|
+
'Select the data to be backed up': string;
|
|
10
|
+
'Select the data to be restored': string;
|
|
11
|
+
'Learn more': string;
|
|
12
|
+
'Start restore': string;
|
|
13
|
+
'Start backup': string;
|
|
14
|
+
'Backed up successfully': string;
|
|
15
|
+
Plugin: string;
|
|
16
|
+
'file uploaded successfully': string;
|
|
17
|
+
'file upload failed': string;
|
|
18
|
+
Download: string;
|
|
19
|
+
'Restore backup from local': string;
|
|
20
|
+
'Backup instructions': string;
|
|
21
|
+
'File size': string;
|
|
22
|
+
'New backup': string;
|
|
23
|
+
Origin: string;
|
|
24
|
+
'Backing up': string;
|
|
25
|
+
};
|
|
26
|
+
export default locale;
|
|
@@ -0,0 +1,48 @@
|
|
|
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 pt_BR_exports = {};
|
|
19
|
+
__export(pt_BR_exports, {
|
|
20
|
+
default: () => pt_BR_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(pt_BR_exports);
|
|
23
|
+
const locale = {
|
|
24
|
+
"System metadata": "Metadados do Sistema",
|
|
25
|
+
"System config": "configura\xE7\xE3o do sistema",
|
|
26
|
+
"Business data": "Dados comerciais",
|
|
27
|
+
"Backup & Restore": "C\xF3pia de Seguran\xE7a e Restaura\xE7\xE3o",
|
|
28
|
+
Backup: "c\xF3pias de seguran\xE7a",
|
|
29
|
+
Restore: "redu\xE7\xE3o",
|
|
30
|
+
Configuration: "atribui\xE7\xE3o",
|
|
31
|
+
"Select the data to be backed up": "Seleccionar os dados de c\xF3pia de seguran\xE7a",
|
|
32
|
+
"Select the data to be restored": "Seleccionar os dados restaurados",
|
|
33
|
+
"Learn more": "Saiba mais",
|
|
34
|
+
"Start restore": "Iniciar a Restaura\xE7\xE3o",
|
|
35
|
+
"Start backup": "Iniciar a c\xF3pia de seguran\xE7a",
|
|
36
|
+
"Backed up successfully": "C\xF3pia de seguran\xE7a bem sucedida",
|
|
37
|
+
"Plugin": "Plugins",
|
|
38
|
+
"file uploaded successfully": "O ficheiro foi enviado com sucesso",
|
|
39
|
+
"file upload failed": "O envio do ficheiro falhou",
|
|
40
|
+
"Download": "download",
|
|
41
|
+
"Restore backup from local": "Restaurar a c\xF3pia de seguran\xE7a localmente",
|
|
42
|
+
"Backup instructions": "Instru\xE7\xF5es de c\xF3pia de seguran\xE7a",
|
|
43
|
+
"File size": "tamanho do ficheiro",
|
|
44
|
+
"New backup": "Nova C\xF3pia de Seguran\xE7a",
|
|
45
|
+
"Origin": "fonte",
|
|
46
|
+
"Backing up": "C\xF3pia de seguran\xE7a em curso"
|
|
47
|
+
};
|
|
48
|
+
var pt_BR_default = locale;
|