@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,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
+ The CJS build of Vite's Node API is deprecated. See https://vitejs.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.
7
+ @tachybase/module-backup: module-backup build start
8
+ @tachybase/module-backup: build plugin client
9
+ @tachybase/module-backup: build plugin server source
10
+ @tachybase/module-backup: delete server files
11
+ @tachybase/module-backup: build plugin server dependencies
12
+ @tachybase/module-backup: These packages archiver, mkdirp, @hapi/topo, decompress, semver will be bundled to dist/node_modules. These packages @tachybase/server, @tachybase/utils, @tachybase/database, dayjs, lodash, @tachybase/actions will be exclude.
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
+ ```
@@ -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
@@ -0,0 +1,2 @@
1
+ export * from './dist/client';
2
+ export { default } from './dist/client';
package/client.js ADDED
@@ -0,0 +1 @@
1
+ module.exports = require('./dist/client/index.js');
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const BackupAndRestoreList: () => React.JSX.Element;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ export declare const DuplicatorProvider: {
3
+ (props: any): React.JSX.Element;
4
+ displayName: string;
5
+ };
@@ -0,0 +1,5 @@
1
+ import { Plugin } from '@tachybase/client';
2
+ export declare class PluginBackupRestoreClient extends Plugin {
3
+ load(): Promise<void>;
4
+ }
5
+ export default PluginBackupRestoreClient;
@@ -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
+ };
@@ -0,0 +1,2 @@
1
+ export * from './server';
2
+ export { default } from './server';
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;