@nocobase/plugin-backups 2.0.56

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 (380) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +99 -0
  3. package/client.d.ts +2 -0
  4. package/client.js +1 -0
  5. package/dist/client/components/BackupSettings.d.ts +2 -0
  6. package/dist/client/components/BackupsManagement.d.ts +2 -0
  7. package/dist/client/components/BackupsTable.d.ts +16 -0
  8. package/dist/client/components/NewBackup.d.ts +10 -0
  9. package/dist/client/components/RefreshBackups.d.ts +10 -0
  10. package/dist/client/components/RestoreFromBackup.d.ts +5 -0
  11. package/dist/client/components/RestoreFromLocal.d.ts +2 -0
  12. package/dist/client/constants.d.ts +1 -0
  13. package/dist/client/contexts.d.ts +17 -0
  14. package/dist/client/hooks/useBackupAppInfo.d.ts +8 -0
  15. package/dist/client/hooks/useCheckBackupMessage.d.ts +4 -0
  16. package/dist/client/hooks/useRestoreTask.d.ts +2 -0
  17. package/dist/client/index.d.ts +7 -0
  18. package/dist/client/index.js +10 -0
  19. package/dist/client/locale.d.ts +10 -0
  20. package/dist/externalVersion.js +32 -0
  21. package/dist/index.d.ts +2 -0
  22. package/dist/index.js +48 -0
  23. package/dist/locale/de-DE.json +52 -0
  24. package/dist/locale/en-US.json +52 -0
  25. package/dist/locale/es-ES.json +52 -0
  26. package/dist/locale/fr-FR.json +52 -0
  27. package/dist/locale/hu-HU.json +52 -0
  28. package/dist/locale/id-ID.json +52 -0
  29. package/dist/locale/it-IT.json +52 -0
  30. package/dist/locale/ja-JP.json +52 -0
  31. package/dist/locale/ko-KR.json +52 -0
  32. package/dist/locale/nl-NL.json +52 -0
  33. package/dist/locale/pt-BR.json +52 -0
  34. package/dist/locale/ru-RU.json +52 -0
  35. package/dist/locale/tr-TR.json +52 -0
  36. package/dist/locale/uk-UA.json +52 -0
  37. package/dist/locale/vi-VN.json +52 -0
  38. package/dist/locale/zh-CN.json +52 -0
  39. package/dist/locale/zh-TW.json +52 -0
  40. package/dist/node_modules/archiver/LICENSE +22 -0
  41. package/dist/node_modules/archiver/index.js +68 -0
  42. package/dist/node_modules/archiver/lib/core.js +974 -0
  43. package/dist/node_modules/archiver/lib/error.js +40 -0
  44. package/dist/node_modules/archiver/lib/plugins/json.js +110 -0
  45. package/dist/node_modules/archiver/lib/plugins/tar.js +167 -0
  46. package/dist/node_modules/archiver/lib/plugins/zip.js +120 -0
  47. package/dist/node_modules/archiver/node_modules/async/all.js +119 -0
  48. package/dist/node_modules/archiver/node_modules/async/allLimit.js +46 -0
  49. package/dist/node_modules/archiver/node_modules/async/allSeries.js +45 -0
  50. package/dist/node_modules/archiver/node_modules/async/any.js +122 -0
  51. package/dist/node_modules/archiver/node_modules/async/anyLimit.js +47 -0
  52. package/dist/node_modules/archiver/node_modules/async/anySeries.js +46 -0
  53. package/dist/node_modules/archiver/node_modules/async/apply.js +11 -0
  54. package/dist/node_modules/archiver/node_modules/async/applyEach.js +57 -0
  55. package/dist/node_modules/archiver/node_modules/async/applyEachSeries.js +37 -0
  56. package/dist/node_modules/archiver/node_modules/async/asyncify.js +118 -0
  57. package/dist/node_modules/archiver/node_modules/async/auto.js +333 -0
  58. package/dist/node_modules/archiver/node_modules/async/autoInject.js +182 -0
  59. package/dist/node_modules/archiver/node_modules/async/bower.json +17 -0
  60. package/dist/node_modules/archiver/node_modules/async/cargo.js +63 -0
  61. package/dist/node_modules/archiver/node_modules/async/cargoQueue.js +71 -0
  62. package/dist/node_modules/archiver/node_modules/async/compose.js +55 -0
  63. package/dist/node_modules/archiver/node_modules/async/concat.js +115 -0
  64. package/dist/node_modules/archiver/node_modules/async/concatLimit.js +60 -0
  65. package/dist/node_modules/archiver/node_modules/async/concatSeries.js +41 -0
  66. package/dist/node_modules/archiver/node_modules/async/constant.js +14 -0
  67. package/dist/node_modules/archiver/node_modules/async/detect.js +96 -0
  68. package/dist/node_modules/archiver/node_modules/async/detectLimit.js +48 -0
  69. package/dist/node_modules/archiver/node_modules/async/detectSeries.js +47 -0
  70. package/dist/node_modules/archiver/node_modules/async/dir.js +43 -0
  71. package/dist/node_modules/archiver/node_modules/async/dist/async.js +6062 -0
  72. package/dist/node_modules/archiver/node_modules/async/dist/async.min.js +1 -0
  73. package/dist/node_modules/archiver/node_modules/async/doDuring.js +68 -0
  74. package/dist/node_modules/archiver/node_modules/async/doUntil.js +46 -0
  75. package/dist/node_modules/archiver/node_modules/async/doWhilst.js +68 -0
  76. package/dist/node_modules/archiver/node_modules/async/during.js +78 -0
  77. package/dist/node_modules/archiver/node_modules/async/each.js +129 -0
  78. package/dist/node_modules/archiver/node_modules/async/eachLimit.js +50 -0
  79. package/dist/node_modules/archiver/node_modules/async/eachOf.js +185 -0
  80. package/dist/node_modules/archiver/node_modules/async/eachOfLimit.js +47 -0
  81. package/dist/node_modules/archiver/node_modules/async/eachOfSeries.js +39 -0
  82. package/dist/node_modules/archiver/node_modules/async/eachSeries.js +44 -0
  83. package/dist/node_modules/archiver/node_modules/async/ensureAsync.js +67 -0
  84. package/dist/node_modules/archiver/node_modules/async/every.js +119 -0
  85. package/dist/node_modules/archiver/node_modules/async/everyLimit.js +46 -0
  86. package/dist/node_modules/archiver/node_modules/async/everySeries.js +45 -0
  87. package/dist/node_modules/archiver/node_modules/async/filter.js +93 -0
  88. package/dist/node_modules/archiver/node_modules/async/filterLimit.js +45 -0
  89. package/dist/node_modules/archiver/node_modules/async/filterSeries.js +43 -0
  90. package/dist/node_modules/archiver/node_modules/async/find.js +96 -0
  91. package/dist/node_modules/archiver/node_modules/async/findLimit.js +48 -0
  92. package/dist/node_modules/archiver/node_modules/async/findSeries.js +47 -0
  93. package/dist/node_modules/archiver/node_modules/async/flatMap.js +115 -0
  94. package/dist/node_modules/archiver/node_modules/async/flatMapLimit.js +60 -0
  95. package/dist/node_modules/archiver/node_modules/async/flatMapSeries.js +41 -0
  96. package/dist/node_modules/archiver/node_modules/async/foldl.js +153 -0
  97. package/dist/node_modules/archiver/node_modules/async/foldr.js +41 -0
  98. package/dist/node_modules/archiver/node_modules/async/forEach.js +129 -0
  99. package/dist/node_modules/archiver/node_modules/async/forEachLimit.js +50 -0
  100. package/dist/node_modules/archiver/node_modules/async/forEachOf.js +185 -0
  101. package/dist/node_modules/archiver/node_modules/async/forEachOfLimit.js +47 -0
  102. package/dist/node_modules/archiver/node_modules/async/forEachOfSeries.js +39 -0
  103. package/dist/node_modules/archiver/node_modules/async/forEachSeries.js +44 -0
  104. package/dist/node_modules/archiver/node_modules/async/forever.js +68 -0
  105. package/dist/node_modules/archiver/node_modules/async/groupBy.js +108 -0
  106. package/dist/node_modules/archiver/node_modules/async/groupByLimit.js +71 -0
  107. package/dist/node_modules/archiver/node_modules/async/groupBySeries.js +36 -0
  108. package/dist/node_modules/archiver/node_modules/async/index.js +588 -0
  109. package/dist/node_modules/archiver/node_modules/async/inject.js +153 -0
  110. package/dist/node_modules/archiver/node_modules/async/internal/DoublyLinkedList.js +92 -0
  111. package/dist/node_modules/archiver/node_modules/async/internal/Heap.js +120 -0
  112. package/dist/node_modules/archiver/node_modules/async/internal/applyEach.js +29 -0
  113. package/dist/node_modules/archiver/node_modules/async/internal/asyncEachOfLimit.js +75 -0
  114. package/dist/node_modules/archiver/node_modules/async/internal/awaitify.js +28 -0
  115. package/dist/node_modules/archiver/node_modules/async/internal/breakLoop.js +10 -0
  116. package/dist/node_modules/archiver/node_modules/async/internal/consoleFunc.js +31 -0
  117. package/dist/node_modules/archiver/node_modules/async/internal/createTester.js +40 -0
  118. package/dist/node_modules/archiver/node_modules/async/internal/eachOfLimit.js +90 -0
  119. package/dist/node_modules/archiver/node_modules/async/internal/filter.js +55 -0
  120. package/dist/node_modules/archiver/node_modules/async/internal/getIterator.js +11 -0
  121. package/dist/node_modules/archiver/node_modules/async/internal/initialParams.js +14 -0
  122. package/dist/node_modules/archiver/node_modules/async/internal/isArrayLike.js +10 -0
  123. package/dist/node_modules/archiver/node_modules/async/internal/iterator.js +57 -0
  124. package/dist/node_modules/archiver/node_modules/async/internal/map.js +30 -0
  125. package/dist/node_modules/archiver/node_modules/async/internal/once.js +17 -0
  126. package/dist/node_modules/archiver/node_modules/async/internal/onlyOnce.js +15 -0
  127. package/dist/node_modules/archiver/node_modules/async/internal/parallel.js +34 -0
  128. package/dist/node_modules/archiver/node_modules/async/internal/promiseCallback.js +23 -0
  129. package/dist/node_modules/archiver/node_modules/async/internal/queue.js +294 -0
  130. package/dist/node_modules/archiver/node_modules/async/internal/range.js +14 -0
  131. package/dist/node_modules/archiver/node_modules/async/internal/reject.js +26 -0
  132. package/dist/node_modules/archiver/node_modules/async/internal/setImmediate.js +34 -0
  133. package/dist/node_modules/archiver/node_modules/async/internal/withoutIndex.js +10 -0
  134. package/dist/node_modules/archiver/node_modules/async/internal/wrapAsync.js +34 -0
  135. package/dist/node_modules/archiver/node_modules/async/log.js +41 -0
  136. package/dist/node_modules/archiver/node_modules/async/map.js +142 -0
  137. package/dist/node_modules/archiver/node_modules/async/mapLimit.js +45 -0
  138. package/dist/node_modules/archiver/node_modules/async/mapSeries.js +44 -0
  139. package/dist/node_modules/archiver/node_modules/async/mapValues.js +152 -0
  140. package/dist/node_modules/archiver/node_modules/async/mapValuesLimit.js +61 -0
  141. package/dist/node_modules/archiver/node_modules/async/mapValuesSeries.js +37 -0
  142. package/dist/node_modules/archiver/node_modules/async/memoize.js +91 -0
  143. package/dist/node_modules/archiver/node_modules/async/nextTick.js +52 -0
  144. package/dist/node_modules/archiver/node_modules/async/package.json +75 -0
  145. package/dist/node_modules/archiver/node_modules/async/parallel.js +180 -0
  146. package/dist/node_modules/archiver/node_modules/async/parallelLimit.js +41 -0
  147. package/dist/node_modules/archiver/node_modules/async/priorityQueue.js +60 -0
  148. package/dist/node_modules/archiver/node_modules/async/queue.js +24 -0
  149. package/dist/node_modules/archiver/node_modules/async/race.js +67 -0
  150. package/dist/node_modules/archiver/node_modules/async/reduce.js +153 -0
  151. package/dist/node_modules/archiver/node_modules/async/reduceRight.js +41 -0
  152. package/dist/node_modules/archiver/node_modules/async/reflect.js +78 -0
  153. package/dist/node_modules/archiver/node_modules/async/reflectAll.js +93 -0
  154. package/dist/node_modules/archiver/node_modules/async/reject.js +87 -0
  155. package/dist/node_modules/archiver/node_modules/async/rejectLimit.js +45 -0
  156. package/dist/node_modules/archiver/node_modules/async/rejectSeries.js +43 -0
  157. package/dist/node_modules/archiver/node_modules/async/retry.js +159 -0
  158. package/dist/node_modules/archiver/node_modules/async/retryable.js +77 -0
  159. package/dist/node_modules/archiver/node_modules/async/select.js +93 -0
  160. package/dist/node_modules/archiver/node_modules/async/selectLimit.js +45 -0
  161. package/dist/node_modules/archiver/node_modules/async/selectSeries.js +43 -0
  162. package/dist/node_modules/archiver/node_modules/async/seq.js +79 -0
  163. package/dist/node_modules/archiver/node_modules/async/series.js +186 -0
  164. package/dist/node_modules/archiver/node_modules/async/setImmediate.js +45 -0
  165. package/dist/node_modules/archiver/node_modules/async/some.js +122 -0
  166. package/dist/node_modules/archiver/node_modules/async/someLimit.js +47 -0
  167. package/dist/node_modules/archiver/node_modules/async/someSeries.js +46 -0
  168. package/dist/node_modules/archiver/node_modules/async/sortBy.js +190 -0
  169. package/dist/node_modules/archiver/node_modules/async/timeout.js +89 -0
  170. package/dist/node_modules/archiver/node_modules/async/times.js +50 -0
  171. package/dist/node_modules/archiver/node_modules/async/timesLimit.js +43 -0
  172. package/dist/node_modules/archiver/node_modules/async/timesSeries.js +32 -0
  173. package/dist/node_modules/archiver/node_modules/async/transform.js +173 -0
  174. package/dist/node_modules/archiver/node_modules/async/tryEach.js +78 -0
  175. package/dist/node_modules/archiver/node_modules/async/unmemoize.js +25 -0
  176. package/dist/node_modules/archiver/node_modules/async/until.js +61 -0
  177. package/dist/node_modules/archiver/node_modules/async/waterfall.js +105 -0
  178. package/dist/node_modules/archiver/node_modules/async/whilst.js +78 -0
  179. package/dist/node_modules/archiver/node_modules/async/wrapSync.js +118 -0
  180. package/dist/node_modules/archiver/node_modules/readable-stream/errors-browser.js +127 -0
  181. package/dist/node_modules/archiver/node_modules/readable-stream/errors.js +116 -0
  182. package/dist/node_modules/archiver/node_modules/readable-stream/experimentalWarning.js +17 -0
  183. package/dist/node_modules/archiver/node_modules/readable-stream/lib/_stream_duplex.js +126 -0
  184. package/dist/node_modules/archiver/node_modules/readable-stream/lib/_stream_passthrough.js +37 -0
  185. package/dist/node_modules/archiver/node_modules/readable-stream/lib/_stream_readable.js +1027 -0
  186. package/dist/node_modules/archiver/node_modules/readable-stream/lib/_stream_transform.js +190 -0
  187. package/dist/node_modules/archiver/node_modules/readable-stream/lib/_stream_writable.js +641 -0
  188. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/async_iterator.js +180 -0
  189. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/buffer_list.js +183 -0
  190. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/destroy.js +96 -0
  191. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +86 -0
  192. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/from-browser.js +3 -0
  193. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/from.js +52 -0
  194. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/pipeline.js +86 -0
  195. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/state.js +22 -0
  196. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
  197. package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
  198. package/dist/node_modules/archiver/node_modules/readable-stream/package.json +68 -0
  199. package/dist/node_modules/archiver/node_modules/readable-stream/readable-browser.js +9 -0
  200. package/dist/node_modules/archiver/node_modules/readable-stream/readable.js +16 -0
  201. package/dist/node_modules/archiver/node_modules/tar-stream/extract.js +257 -0
  202. package/dist/node_modules/archiver/node_modules/tar-stream/headers.js +295 -0
  203. package/dist/node_modules/archiver/node_modules/tar-stream/index.js +2 -0
  204. package/dist/node_modules/archiver/node_modules/tar-stream/pack.js +255 -0
  205. package/dist/node_modules/archiver/node_modules/tar-stream/package.json +58 -0
  206. package/dist/node_modules/archiver/node_modules/tar-stream/sandbox.js +11 -0
  207. package/dist/node_modules/archiver/package.json +1 -0
  208. package/dist/node_modules/cron-parser/.eslintrc.json +15 -0
  209. package/dist/node_modules/cron-parser/.travis.yml +7 -0
  210. package/dist/node_modules/cron-parser/LICENSE +21 -0
  211. package/dist/node_modules/cron-parser/component.json +11 -0
  212. package/dist/node_modules/cron-parser/index.d.ts +1 -0
  213. package/dist/node_modules/cron-parser/lib/date.js +252 -0
  214. package/dist/node_modules/cron-parser/lib/expression.js +983 -0
  215. package/dist/node_modules/cron-parser/lib/field_compactor.js +70 -0
  216. package/dist/node_modules/cron-parser/lib/field_stringify.js +38 -0
  217. package/dist/node_modules/cron-parser/lib/parser.js +1 -0
  218. package/dist/node_modules/cron-parser/node_modules/luxon/build/amd/luxon.js +8489 -0
  219. package/dist/node_modules/cron-parser/node_modules/luxon/build/cjs-browser/luxon.js +8487 -0
  220. package/dist/node_modules/cron-parser/node_modules/luxon/build/global/luxon.js +8490 -0
  221. package/dist/node_modules/cron-parser/node_modules/luxon/build/global/luxon.min.js +1 -0
  222. package/dist/node_modules/cron-parser/node_modules/luxon/build/node/luxon.js +7522 -0
  223. package/dist/node_modules/cron-parser/node_modules/luxon/package.json +96 -0
  224. package/dist/node_modules/cron-parser/node_modules/luxon/src/datetime.js +2169 -0
  225. package/dist/node_modules/cron-parser/node_modules/luxon/src/duration.js +880 -0
  226. package/dist/node_modules/cron-parser/node_modules/luxon/src/errors.js +61 -0
  227. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/conversions.js +157 -0
  228. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/diff.js +80 -0
  229. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/digits.js +76 -0
  230. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/english.js +233 -0
  231. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/formats.js +191 -0
  232. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/formatter.js +386 -0
  233. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/invalid.js +14 -0
  234. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/locale.js +482 -0
  235. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/regexParser.js +335 -0
  236. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/tokenParser.js +424 -0
  237. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/util.js +292 -0
  238. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/zoneUtil.js +36 -0
  239. package/dist/node_modules/cron-parser/node_modules/luxon/src/info.js +193 -0
  240. package/dist/node_modules/cron-parser/node_modules/luxon/src/interval.js +602 -0
  241. package/dist/node_modules/cron-parser/node_modules/luxon/src/luxon.js +26 -0
  242. package/dist/node_modules/cron-parser/node_modules/luxon/src/luxonFilled.js +13 -0
  243. package/dist/node_modules/cron-parser/node_modules/luxon/src/settings.js +137 -0
  244. package/dist/node_modules/cron-parser/node_modules/luxon/src/zone.js +88 -0
  245. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/IANAZone.js +191 -0
  246. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/fixedOffsetZone.js +94 -0
  247. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/invalidZone.js +53 -0
  248. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/localZone.js +63 -0
  249. package/dist/node_modules/cron-parser/package.json +1 -0
  250. package/dist/node_modules/cron-parser/test/31_of_month.js +17 -0
  251. package/dist/node_modules/cron-parser/test/bug.js +29 -0
  252. package/dist/node_modules/cron-parser/test/crondate.js +16 -0
  253. package/dist/node_modules/cron-parser/test/crontab.example +7 -0
  254. package/dist/node_modules/cron-parser/test/empty_around_comma.js +22 -0
  255. package/dist/node_modules/cron-parser/test/expression.js +1489 -0
  256. package/dist/node_modules/cron-parser/test/field_compactor.js +250 -0
  257. package/dist/node_modules/cron-parser/test/field_stringify.js +84 -0
  258. package/dist/node_modules/cron-parser/test/fields.js +32 -0
  259. package/dist/node_modules/cron-parser/test/increment_on_first_iteration.js +22 -0
  260. package/dist/node_modules/cron-parser/test/index-ts3.test-d.ts +133 -0
  261. package/dist/node_modules/cron-parser/test/index.test-d.ts +138 -0
  262. package/dist/node_modules/cron-parser/test/leap_year.js +17 -0
  263. package/dist/node_modules/cron-parser/test/parser.js +46 -0
  264. package/dist/node_modules/cron-parser/test/parser_crondate_formats.js +145 -0
  265. package/dist/node_modules/cron-parser/test/parser_day_of_month.js +169 -0
  266. package/dist/node_modules/cron-parser/test/prev_date.js +32 -0
  267. package/dist/node_modules/cron-parser/test/stringify.js +402 -0
  268. package/dist/node_modules/cron-parser/test/timezone.js +422 -0
  269. package/dist/node_modules/cron-parser/types/common.d.ts +131 -0
  270. package/dist/node_modules/cron-parser/types/index.d.ts +45 -0
  271. package/dist/node_modules/cron-parser/types/ts3/index.d.ts +28 -0
  272. package/dist/node_modules/fs-extra/LICENSE +15 -0
  273. package/dist/node_modules/fs-extra/lib/copy/copy.js +232 -0
  274. package/dist/node_modules/fs-extra/lib/copy/index.js +6 -0
  275. package/dist/node_modules/fs-extra/lib/copy-sync/copy-sync.js +166 -0
  276. package/dist/node_modules/fs-extra/lib/copy-sync/index.js +5 -0
  277. package/dist/node_modules/fs-extra/lib/empty/index.js +48 -0
  278. package/dist/node_modules/fs-extra/lib/ensure/file.js +69 -0
  279. package/dist/node_modules/fs-extra/lib/ensure/index.js +23 -0
  280. package/dist/node_modules/fs-extra/lib/ensure/link.js +61 -0
  281. package/dist/node_modules/fs-extra/lib/ensure/symlink-paths.js +99 -0
  282. package/dist/node_modules/fs-extra/lib/ensure/symlink-type.js +31 -0
  283. package/dist/node_modules/fs-extra/lib/ensure/symlink.js +63 -0
  284. package/dist/node_modules/fs-extra/lib/fs/index.js +130 -0
  285. package/dist/node_modules/fs-extra/lib/index.js +1 -0
  286. package/dist/node_modules/fs-extra/lib/json/index.js +16 -0
  287. package/dist/node_modules/fs-extra/lib/json/jsonfile.js +11 -0
  288. package/dist/node_modules/fs-extra/lib/json/output-json-sync.js +12 -0
  289. package/dist/node_modules/fs-extra/lib/json/output-json.js +12 -0
  290. package/dist/node_modules/fs-extra/lib/mkdirs/index.js +14 -0
  291. package/dist/node_modules/fs-extra/lib/mkdirs/make-dir.js +141 -0
  292. package/dist/node_modules/fs-extra/lib/move/index.js +6 -0
  293. package/dist/node_modules/fs-extra/lib/move/move.js +65 -0
  294. package/dist/node_modules/fs-extra/lib/move-sync/index.js +5 -0
  295. package/dist/node_modules/fs-extra/lib/move-sync/move-sync.js +47 -0
  296. package/dist/node_modules/fs-extra/lib/output/index.js +40 -0
  297. package/dist/node_modules/fs-extra/lib/path-exists/index.js +12 -0
  298. package/dist/node_modules/fs-extra/lib/remove/index.js +9 -0
  299. package/dist/node_modules/fs-extra/lib/remove/rimraf.js +302 -0
  300. package/dist/node_modules/fs-extra/lib/util/stat.js +139 -0
  301. package/dist/node_modules/fs-extra/lib/util/utimes.js +26 -0
  302. package/dist/node_modules/fs-extra/package.json +1 -0
  303. package/dist/node_modules/semver/LICENSE +15 -0
  304. package/dist/node_modules/semver/bin/semver.js +197 -0
  305. package/dist/node_modules/semver/classes/comparator.js +141 -0
  306. package/dist/node_modules/semver/classes/index.js +5 -0
  307. package/dist/node_modules/semver/classes/range.js +539 -0
  308. package/dist/node_modules/semver/classes/semver.js +302 -0
  309. package/dist/node_modules/semver/functions/clean.js +6 -0
  310. package/dist/node_modules/semver/functions/cmp.js +52 -0
  311. package/dist/node_modules/semver/functions/coerce.js +60 -0
  312. package/dist/node_modules/semver/functions/compare-build.js +7 -0
  313. package/dist/node_modules/semver/functions/compare-loose.js +3 -0
  314. package/dist/node_modules/semver/functions/compare.js +5 -0
  315. package/dist/node_modules/semver/functions/diff.js +65 -0
  316. package/dist/node_modules/semver/functions/eq.js +3 -0
  317. package/dist/node_modules/semver/functions/gt.js +3 -0
  318. package/dist/node_modules/semver/functions/gte.js +3 -0
  319. package/dist/node_modules/semver/functions/inc.js +19 -0
  320. package/dist/node_modules/semver/functions/lt.js +3 -0
  321. package/dist/node_modules/semver/functions/lte.js +3 -0
  322. package/dist/node_modules/semver/functions/major.js +3 -0
  323. package/dist/node_modules/semver/functions/minor.js +3 -0
  324. package/dist/node_modules/semver/functions/neq.js +3 -0
  325. package/dist/node_modules/semver/functions/parse.js +16 -0
  326. package/dist/node_modules/semver/functions/patch.js +3 -0
  327. package/dist/node_modules/semver/functions/prerelease.js +6 -0
  328. package/dist/node_modules/semver/functions/rcompare.js +3 -0
  329. package/dist/node_modules/semver/functions/rsort.js +3 -0
  330. package/dist/node_modules/semver/functions/satisfies.js +10 -0
  331. package/dist/node_modules/semver/functions/sort.js +3 -0
  332. package/dist/node_modules/semver/functions/valid.js +6 -0
  333. package/dist/node_modules/semver/index.js +1 -0
  334. package/dist/node_modules/semver/internal/constants.js +35 -0
  335. package/dist/node_modules/semver/internal/debug.js +9 -0
  336. package/dist/node_modules/semver/internal/identifiers.js +23 -0
  337. package/dist/node_modules/semver/internal/parse-options.js +15 -0
  338. package/dist/node_modules/semver/internal/re.js +217 -0
  339. package/dist/node_modules/semver/package.json +1 -0
  340. package/dist/node_modules/semver/preload.js +2 -0
  341. package/dist/node_modules/semver/range.bnf +16 -0
  342. package/dist/node_modules/semver/ranges/gtr.js +4 -0
  343. package/dist/node_modules/semver/ranges/intersects.js +7 -0
  344. package/dist/node_modules/semver/ranges/ltr.js +4 -0
  345. package/dist/node_modules/semver/ranges/max-satisfying.js +25 -0
  346. package/dist/node_modules/semver/ranges/min-satisfying.js +24 -0
  347. package/dist/node_modules/semver/ranges/min-version.js +61 -0
  348. package/dist/node_modules/semver/ranges/outside.js +80 -0
  349. package/dist/node_modules/semver/ranges/simplify.js +47 -0
  350. package/dist/node_modules/semver/ranges/subset.js +247 -0
  351. package/dist/node_modules/semver/ranges/to-comparators.js +8 -0
  352. package/dist/node_modules/semver/ranges/valid.js +11 -0
  353. package/dist/node_modules/yauzl/LICENSE +21 -0
  354. package/dist/node_modules/yauzl/fd-slicer.js +314 -0
  355. package/dist/node_modules/yauzl/index.js +1 -0
  356. package/dist/node_modules/yauzl/package.json +1 -0
  357. package/dist/server/adapters/database.d.ts +9 -0
  358. package/dist/server/adapters/database.js +486 -0
  359. package/dist/server/collections/backup-settings.d.ts +2 -0
  360. package/dist/server/collections/backup-settings.js +67 -0
  361. package/dist/server/index.d.ts +1 -0
  362. package/dist/server/index.js +42 -0
  363. package/dist/server/managers/backup.d.ts +41 -0
  364. package/dist/server/managers/backup.js +448 -0
  365. package/dist/server/managers/restore.d.ts +24 -0
  366. package/dist/server/managers/restore.js +434 -0
  367. package/dist/server/plugin.d.ts +26 -0
  368. package/dist/server/plugin.js +251 -0
  369. package/dist/server/resourcers/backup-cli.d.ts +23 -0
  370. package/dist/server/resourcers/backup-cli.js +237 -0
  371. package/dist/server/resourcers/backups.d.ts +24 -0
  372. package/dist/server/resourcers/backups.js +192 -0
  373. package/dist/server/types.d.ts +12 -0
  374. package/dist/server/types.js +24 -0
  375. package/dist/server/utils.d.ts +48 -0
  376. package/dist/server/utils.js +323 -0
  377. package/dist/swagger/index.json +313 -0
  378. package/package.json +51 -0
  379. package/server.d.ts +2 -0
  380. package/server.js +1 -0
@@ -0,0 +1,192 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __create = Object.create;
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
13
+ var __getOwnPropNames = Object.getOwnPropertyNames;
14
+ var __getProtoOf = Object.getPrototypeOf;
15
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
16
+ var __export = (target, all) => {
17
+ for (var name in all)
18
+ __defProp(target, name, { get: all[name], enumerable: true });
19
+ };
20
+ var __copyProps = (to, from, except, desc) => {
21
+ if (from && typeof from === "object" || typeof from === "function") {
22
+ for (let key of __getOwnPropNames(from))
23
+ if (!__hasOwnProp.call(to, key) && key !== except)
24
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
25
+ }
26
+ return to;
27
+ };
28
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
29
+ // If the importer is in node compatibility mode or this is not an ESM
30
+ // file that has been converted to a CommonJS file using a Babel-
31
+ // compatible transform (i.e. "__esModule" has not been set), then set
32
+ // "default" to the CommonJS "module.exports" for node compatibility.
33
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
34
+ mod
35
+ ));
36
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
37
+ var backups_exports = {};
38
+ __export(backups_exports, {
39
+ default: () => backups_default
40
+ });
41
+ module.exports = __toCommonJS(backups_exports);
42
+ var import_utils = require("@nocobase/utils");
43
+ var import_promises = __toESM(require("fs/promises"));
44
+ var import_os = __toESM(require("os"));
45
+ var import_backup = require("../managers/backup");
46
+ var import_utils2 = require("../utils");
47
+ var import_restore = require("../managers/restore");
48
+ var import_crypto = __toESM(require("crypto"));
49
+ async function setRestoreTaskError(statusCache, taskId, error) {
50
+ await statusCache.set(taskId, {
51
+ inProgress: false,
52
+ message: error instanceof Error ? error.message : String(error)
53
+ });
54
+ }
55
+ var backups_default = {
56
+ name: "backups",
57
+ middleware: async (ctx, next) => {
58
+ if (ctx.action.actionName !== "upload") {
59
+ return next();
60
+ }
61
+ const storage = import_utils.koaMulter.diskStorage({
62
+ destination: import_os.default.tmpdir(),
63
+ filename: function(req, file, cb) {
64
+ const randomName = Date.now().toString() + Math.random().toString().slice(2);
65
+ cb(null, randomName);
66
+ }
67
+ });
68
+ const upload = (0, import_utils.koaMulter)({ storage }).single("file");
69
+ return upload(ctx, next);
70
+ },
71
+ actions: {
72
+ async list(ctx, next) {
73
+ const backupSettings = await ctx.db.getRepository(import_utils2.SETTINGS).findOne();
74
+ const backupManager = new import_backup.BackupManager(ctx.app, ctx, backupSettings);
75
+ const backups = await backupManager.list();
76
+ ctx.body = backups;
77
+ await next();
78
+ },
79
+ async upload(ctx, next) {
80
+ var _a;
81
+ const restoreManager = new import_restore.RestoreManager(ctx);
82
+ const taskId = import_crypto.default.randomUUID();
83
+ const statusCache = ctx.app.cacheManager.getCache(import_utils2.RESTORE_TASKS_CACHE_NAME);
84
+ const uploadedFilePath = (_a = ctx.request.file) == null ? void 0 : _a.path;
85
+ await statusCache.set(taskId, {
86
+ inProgress: true
87
+ });
88
+ try {
89
+ await restoreManager.restoreFromUpload(ctx.request.file, taskId, ctx.request.body.password, true);
90
+ ctx.body = {
91
+ status: "ok",
92
+ task: taskId
93
+ };
94
+ await next();
95
+ } catch (error) {
96
+ await setRestoreTaskError(statusCache, taskId, error);
97
+ throw error;
98
+ } finally {
99
+ if (uploadedFilePath) {
100
+ await import_promises.default.unlink(uploadedFilePath).catch(() => {
101
+ });
102
+ }
103
+ }
104
+ },
105
+ async create(ctx, next) {
106
+ const backupSettings = await ctx.db.getRepository(import_utils2.SETTINGS).findOne();
107
+ const backupManager = new import_backup.BackupManager(ctx.app, ctx, backupSettings);
108
+ const statusCache = ctx.app.cacheManager.getCache(import_utils2.BACKUP_TASKS_CACHE_NAME);
109
+ const backupName = await backupManager.createBackupName();
110
+ const fileName = `${backupName}.${import_utils2.BACKUP_EXTENSION}`;
111
+ backupManager.backup(backupName).then(async () => {
112
+ await statusCache.set(fileName, {
113
+ inProgress: false
114
+ });
115
+ }).catch(async (e) => {
116
+ await statusCache.set(fileName, {
117
+ inProgress: false,
118
+ message: e.message
119
+ });
120
+ });
121
+ await statusCache.set(fileName, {
122
+ inProgress: true
123
+ });
124
+ ctx.body = {
125
+ name: fileName,
126
+ inProgress: true
127
+ };
128
+ await next();
129
+ },
130
+ async taskStatus(ctx, next) {
131
+ const statusCache = ctx.app.cacheManager.getCache(import_utils2.BACKUP_TASKS_CACHE_NAME);
132
+ const backupNames = ctx.action.params.names;
133
+ const results = await statusCache.mget(...backupNames);
134
+ ctx.body = backupNames.reduce(
135
+ (acc, name, index) => {
136
+ acc[name] = results[index];
137
+ return acc;
138
+ },
139
+ {}
140
+ );
141
+ await next();
142
+ },
143
+ async download(ctx, next) {
144
+ const backupSettings = await ctx.db.getRepository(import_utils2.SETTINGS).findOne();
145
+ const backupManager = new import_backup.BackupManager(ctx.app, ctx, backupSettings);
146
+ const fileName = ctx.action.params.filterByTk;
147
+ ctx.attachment(fileName);
148
+ ctx.body = await backupManager.createReadStream(fileName);
149
+ await next();
150
+ },
151
+ async destroy(ctx, next) {
152
+ const backupSettings = await ctx.db.getRepository(import_utils2.SETTINGS).findOne();
153
+ const backupManager = new import_backup.BackupManager(ctx.app, ctx, backupSettings);
154
+ await backupManager.destroy(ctx.action.params.filterByTk);
155
+ ctx.body = {
156
+ status: "ok"
157
+ };
158
+ await next();
159
+ },
160
+ async restore(ctx, next) {
161
+ const restoreManager = new import_restore.RestoreManager(ctx);
162
+ const taskId = import_crypto.default.randomUUID();
163
+ const statusCache = ctx.app.cacheManager.getCache(import_utils2.RESTORE_TASKS_CACHE_NAME);
164
+ await statusCache.set(taskId, {
165
+ inProgress: true
166
+ });
167
+ try {
168
+ await restoreManager.restoreFromBackup(ctx.request.body.name, taskId, ctx.request.body.password, true);
169
+ ctx.body = {
170
+ status: "ok",
171
+ task: taskId
172
+ };
173
+ await next();
174
+ } catch (error) {
175
+ await setRestoreTaskError(statusCache, taskId, error);
176
+ throw error;
177
+ }
178
+ },
179
+ async restoreStatus(ctx, next) {
180
+ const statusCache = ctx.app.cacheManager.getCache(import_utils2.RESTORE_TASKS_CACHE_NAME);
181
+ ctx.body = await statusCache.get(ctx.action.params.task);
182
+ await next();
183
+ },
184
+ async appInfo(ctx, next) {
185
+ const { dialect, schema } = ctx.app.db.options;
186
+ ctx.body = {
187
+ database: { dialect, schema }
188
+ };
189
+ await next();
190
+ }
191
+ }
192
+ };
@@ -0,0 +1,12 @@
1
+ export interface StorageModel {
2
+ id?: number;
3
+ title: string;
4
+ type: string;
5
+ name: string;
6
+ baseUrl: string;
7
+ options: Record<string, any>;
8
+ rules?: Record<string, any>;
9
+ path?: string;
10
+ default?: boolean;
11
+ paranoid?: boolean;
12
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
+ var types_exports = {};
24
+ module.exports = __toCommonJS(types_exports);
@@ -0,0 +1,48 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ /// <reference types="node" />
10
+ /// <reference types="node" />
11
+ export declare const BACKUP_EXTENSION = "nbdata";
12
+ export declare const STORAGE_PATH = "storage/uploads";
13
+ export declare const SETTINGS = "backupSettings";
14
+ export declare const BACKUPS = "backups";
15
+ export declare const FILE_ENCRYPTION_SALT = "backup salt";
16
+ export declare const BACKUP_TASKS_CACHE_NAME = "backup-task-results";
17
+ export declare const RESTORE_TASKS_CACHE_NAME = "restore-task-results";
18
+ export declare const RESTORE_TASKS_CACHE_TTL: number;
19
+ import { Writable, Transform, TransformCallback } from 'stream';
20
+ import Database from '@nocobase/database';
21
+ export declare const PLUGIN_BACKUPS_NAME: string;
22
+ export declare function resolvePathWithinBase(basePath: string, unsafePath: string): string | undefined;
23
+ export declare class Extractor extends Writable {
24
+ private tempFile;
25
+ private extractPath;
26
+ private tempWriteStream;
27
+ constructor(options: {
28
+ path: string;
29
+ });
30
+ _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void;
31
+ _final(callback: (error?: Error | null) => void): void;
32
+ private extract;
33
+ promise(): Promise<void>;
34
+ }
35
+ export declare function humanFileSize(bytes: number, si?: boolean, dp?: number): string;
36
+ export declare function getDBVersion(db: Database): Promise<string>;
37
+ export declare function isQsTruly(value?: string | boolean): any;
38
+ export declare function toMajorVersion(raw: string): string | undefined;
39
+ /**
40
+ * Transform stream that replaces \' with '' while properly handling UTF-8 character boundaries
41
+ * This prevents issues when restoring MySQL backups on Windows
42
+ */
43
+ export declare class EscapeQuoteTransform extends Transform {
44
+ private bufferBytes;
45
+ constructor();
46
+ _transform(chunk: Buffer, _encoding: BufferEncoding, callback: TransformCallback): void;
47
+ _flush(callback: Function): void;
48
+ }
@@ -0,0 +1,323 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __create = Object.create;
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
13
+ var __getOwnPropNames = Object.getOwnPropertyNames;
14
+ var __getProtoOf = Object.getPrototypeOf;
15
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
16
+ var __export = (target, all) => {
17
+ for (var name2 in all)
18
+ __defProp(target, name2, { get: all[name2], enumerable: true });
19
+ };
20
+ var __copyProps = (to, from, except, desc) => {
21
+ if (from && typeof from === "object" || typeof from === "function") {
22
+ for (let key of __getOwnPropNames(from))
23
+ if (!__hasOwnProp.call(to, key) && key !== except)
24
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
25
+ }
26
+ return to;
27
+ };
28
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
29
+ // If the importer is in node compatibility mode or this is not an ESM
30
+ // file that has been converted to a CommonJS file using a Babel-
31
+ // compatible transform (i.e. "__esModule" has not been set), then set
32
+ // "default" to the CommonJS "module.exports" for node compatibility.
33
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
34
+ mod
35
+ ));
36
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
37
+ var utils_exports = {};
38
+ __export(utils_exports, {
39
+ BACKUPS: () => BACKUPS,
40
+ BACKUP_EXTENSION: () => BACKUP_EXTENSION,
41
+ BACKUP_TASKS_CACHE_NAME: () => BACKUP_TASKS_CACHE_NAME,
42
+ EscapeQuoteTransform: () => EscapeQuoteTransform,
43
+ Extractor: () => Extractor,
44
+ FILE_ENCRYPTION_SALT: () => FILE_ENCRYPTION_SALT,
45
+ PLUGIN_BACKUPS_NAME: () => PLUGIN_BACKUPS_NAME,
46
+ RESTORE_TASKS_CACHE_NAME: () => RESTORE_TASKS_CACHE_NAME,
47
+ RESTORE_TASKS_CACHE_TTL: () => RESTORE_TASKS_CACHE_TTL,
48
+ SETTINGS: () => SETTINGS,
49
+ STORAGE_PATH: () => STORAGE_PATH,
50
+ getDBVersion: () => getDBVersion,
51
+ humanFileSize: () => humanFileSize,
52
+ isQsTruly: () => isQsTruly,
53
+ resolvePathWithinBase: () => resolvePathWithinBase,
54
+ toMajorVersion: () => toMajorVersion
55
+ });
56
+ module.exports = __toCommonJS(utils_exports);
57
+ var import_stream = require("stream");
58
+ var import_yauzl = __toESM(require("yauzl"));
59
+ var import_fs_extra = __toESM(require("fs-extra"));
60
+ var import_path = __toESM(require("path"));
61
+ var import_sequelize = require("sequelize");
62
+ var import_package = require("../../package.json");
63
+ const BACKUP_EXTENSION = "nbdata";
64
+ const STORAGE_PATH = "storage/uploads";
65
+ const SETTINGS = "backupSettings";
66
+ const BACKUPS = "backups";
67
+ const FILE_ENCRYPTION_SALT = "backup salt";
68
+ const BACKUP_TASKS_CACHE_NAME = "backup-task-results";
69
+ const RESTORE_TASKS_CACHE_NAME = "restore-task-results";
70
+ const RESTORE_TASKS_CACHE_TTL = 24 * 60 * 60 * 1e3;
71
+ const PLUGIN_BACKUPS_NAME = import_package.name;
72
+ function resolvePathWithinBase(basePath, unsafePath) {
73
+ const resolvedBasePath = import_path.default.resolve(basePath);
74
+ const resolvedTargetPath = import_path.default.resolve(resolvedBasePath, unsafePath);
75
+ const relativePath = import_path.default.relative(resolvedBasePath, resolvedTargetPath);
76
+ if (relativePath === "" || relativePath === "." || relativePath === ".." || relativePath.startsWith(`..${import_path.default.sep}`) || import_path.default.isAbsolute(relativePath)) {
77
+ return void 0;
78
+ }
79
+ return resolvedTargetPath;
80
+ }
81
+ class Extractor extends import_stream.Writable {
82
+ tempFile;
83
+ extractPath;
84
+ tempWriteStream = null;
85
+ constructor(options) {
86
+ super();
87
+ this.extractPath = options.path;
88
+ this.tempFile = import_path.default.join(this.extractPath, `temp_${Date.now()}.zip`);
89
+ }
90
+ _write(chunk, encoding, callback) {
91
+ if (!this.tempWriteStream) {
92
+ import_fs_extra.default.mkdirp(import_path.default.dirname(this.tempFile), (error) => {
93
+ if (error) {
94
+ callback(error);
95
+ return;
96
+ }
97
+ this.tempWriteStream = import_fs_extra.default.createWriteStream(this.tempFile);
98
+ this.tempWriteStream.write(chunk, encoding, callback);
99
+ });
100
+ } else {
101
+ this.tempWriteStream.write(chunk, encoding, callback);
102
+ }
103
+ }
104
+ _final(callback) {
105
+ if (!this.tempWriteStream) {
106
+ callback();
107
+ return;
108
+ }
109
+ this.tempWriteStream.end(() => {
110
+ this.extract((error) => {
111
+ if (error) {
112
+ callback(error);
113
+ return;
114
+ }
115
+ import_fs_extra.default.unlink(this.tempFile, callback);
116
+ });
117
+ });
118
+ }
119
+ extract(callback) {
120
+ import_yauzl.default.open(this.tempFile, { lazyEntries: true }, (error, zipfile) => {
121
+ if (error) {
122
+ callback(error);
123
+ return;
124
+ }
125
+ if (!zipfile) {
126
+ callback(new Error("Failed to open zip file"));
127
+ return;
128
+ }
129
+ let settled = false;
130
+ const done = (err) => {
131
+ if (settled) {
132
+ return;
133
+ }
134
+ settled = true;
135
+ zipfile.removeAllListeners();
136
+ if (err) {
137
+ zipfile.close();
138
+ }
139
+ callback(err);
140
+ };
141
+ zipfile.on("error", done);
142
+ zipfile.on("end", () => done());
143
+ zipfile.on("entry", (entry) => {
144
+ const fullPath = resolvePathWithinBase(this.extractPath, entry.fileName);
145
+ if (!fullPath) {
146
+ done(new Error(`Invalid zip entry path: ${entry.fileName}`));
147
+ return;
148
+ }
149
+ if (entry.fileName.endsWith("/")) {
150
+ import_fs_extra.default.mkdirp(fullPath, (mkdirError) => {
151
+ if (mkdirError) {
152
+ done(mkdirError);
153
+ return;
154
+ }
155
+ if (!settled) {
156
+ zipfile.readEntry();
157
+ }
158
+ });
159
+ return;
160
+ }
161
+ import_fs_extra.default.mkdirp(import_path.default.dirname(fullPath), (mkdirError) => {
162
+ if (mkdirError) {
163
+ done(mkdirError);
164
+ return;
165
+ }
166
+ zipfile.openReadStream(entry, (readError, readStream) => {
167
+ if (readError) {
168
+ done(readError);
169
+ return;
170
+ }
171
+ if (!readStream) {
172
+ done(new Error("Failed to open read stream"));
173
+ return;
174
+ }
175
+ const writeStream = import_fs_extra.default.createWriteStream(fullPath);
176
+ readStream.on("error", done);
177
+ writeStream.on("error", done);
178
+ writeStream.on("finish", () => {
179
+ if (!settled) {
180
+ zipfile.readEntry();
181
+ }
182
+ });
183
+ readStream.pipe(writeStream);
184
+ });
185
+ });
186
+ });
187
+ zipfile.readEntry();
188
+ });
189
+ }
190
+ promise() {
191
+ return new Promise((resolve, reject) => {
192
+ this.on("finish", resolve);
193
+ this.on("error", reject);
194
+ });
195
+ }
196
+ }
197
+ function humanFileSize(bytes, si = false, dp = 1) {
198
+ const thresh = si ? 1e3 : 1024;
199
+ const units = si ? ["B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"] : ["B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"];
200
+ let u = 0;
201
+ while (Math.abs(bytes) >= thresh && u < units.length - 1) {
202
+ bytes /= thresh;
203
+ u++;
204
+ }
205
+ return bytes.toFixed(dp) + " " + units[u];
206
+ }
207
+ const dbVersionCommands = {
208
+ sqlite: "select sqlite_version() as version",
209
+ mysql: "select version() as version",
210
+ mariadb: "select version() as version",
211
+ postgres: "select version() as version"
212
+ };
213
+ async function getDBVersion(db) {
214
+ var _a;
215
+ const dialect = db.sequelize.getDialect();
216
+ const sqlCmd = dbVersionCommands[dialect];
217
+ if (!sqlCmd) {
218
+ throw new Error(`unsupported dialect ${dialect}`);
219
+ }
220
+ const result = await db.sequelize.query(sqlCmd, {
221
+ type: import_sequelize.QueryTypes.SELECT
222
+ });
223
+ return ((_a = result == null ? void 0 : result[0]) == null ? void 0 : _a.version) || "";
224
+ }
225
+ function isQsTruly(value) {
226
+ try {
227
+ return !!value && JSON.parse(`${value}`.toLowerCase());
228
+ } catch (_e) {
229
+ return false;
230
+ }
231
+ }
232
+ function toMajorVersion(raw) {
233
+ const m = /([\d+.]+)/.exec(raw);
234
+ return m != null ? m[0].replace(/\..+$/, "") : void 0;
235
+ }
236
+ class EscapeQuoteTransform extends import_stream.Transform {
237
+ bufferBytes = Buffer.alloc(0);
238
+ constructor() {
239
+ super({ objectMode: false });
240
+ }
241
+ _transform(chunk, _encoding, callback) {
242
+ try {
243
+ const buffers = [this.bufferBytes, chunk];
244
+ this.bufferBytes = Buffer.concat(buffers);
245
+ let processBytes = this.bufferBytes;
246
+ let remainingBytes = Buffer.alloc(0);
247
+ for (let i = Math.max(0, this.bufferBytes.length - 4); i < this.bufferBytes.length; i++) {
248
+ const byte = this.bufferBytes[i];
249
+ if ((byte & 128) === 0) {
250
+ continue;
251
+ } else if ((byte & 224) === 192) {
252
+ if (i + 1 >= this.bufferBytes.length) {
253
+ processBytes = this.bufferBytes.subarray(0, i);
254
+ remainingBytes = this.bufferBytes.subarray(i);
255
+ break;
256
+ }
257
+ } else if ((byte & 240) === 224) {
258
+ if (i + 2 >= this.bufferBytes.length) {
259
+ processBytes = this.bufferBytes.subarray(0, i);
260
+ remainingBytes = this.bufferBytes.subarray(i);
261
+ break;
262
+ }
263
+ } else if ((byte & 248) === 240) {
264
+ if (i + 3 >= this.bufferBytes.length) {
265
+ processBytes = this.bufferBytes.subarray(0, i);
266
+ remainingBytes = this.bufferBytes.subarray(i);
267
+ break;
268
+ }
269
+ }
270
+ }
271
+ if (processBytes.length > 0) {
272
+ let text = processBytes.toString("utf8");
273
+ if (text.endsWith("\\")) {
274
+ const lastBackslashIndex = text.lastIndexOf("\\");
275
+ const beforeBackslash = text.slice(0, lastBackslashIndex);
276
+ const backslashPart = text.slice(lastBackslashIndex);
277
+ const backslashBytes = Buffer.from(backslashPart, "utf8");
278
+ remainingBytes = Buffer.concat([backslashBytes, remainingBytes]);
279
+ text = beforeBackslash;
280
+ }
281
+ if (text) {
282
+ const processed = text.replace(/\\'/g, "''");
283
+ this.push(Buffer.from(processed, "utf8"));
284
+ }
285
+ }
286
+ this.bufferBytes = remainingBytes;
287
+ callback();
288
+ } catch (error) {
289
+ callback(error);
290
+ }
291
+ }
292
+ _flush(callback) {
293
+ try {
294
+ if (this.bufferBytes.length > 0) {
295
+ const text = this.bufferBytes.toString("utf8");
296
+ const processed = text.replace(/\\'/g, "''");
297
+ this.push(Buffer.from(processed, "utf8"));
298
+ }
299
+ callback();
300
+ } catch (error) {
301
+ callback(error);
302
+ }
303
+ }
304
+ }
305
+ // Annotate the CommonJS export names for ESM import in node:
306
+ 0 && (module.exports = {
307
+ BACKUPS,
308
+ BACKUP_EXTENSION,
309
+ BACKUP_TASKS_CACHE_NAME,
310
+ EscapeQuoteTransform,
311
+ Extractor,
312
+ FILE_ENCRYPTION_SALT,
313
+ PLUGIN_BACKUPS_NAME,
314
+ RESTORE_TASKS_CACHE_NAME,
315
+ RESTORE_TASKS_CACHE_TTL,
316
+ SETTINGS,
317
+ STORAGE_PATH,
318
+ getDBVersion,
319
+ humanFileSize,
320
+ isQsTruly,
321
+ resolvePathWithinBase,
322
+ toMajorVersion
323
+ });