@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.
- package/LICENSE +201 -0
- package/README.md +99 -0
- package/client.d.ts +2 -0
- package/client.js +1 -0
- package/dist/client/components/BackupSettings.d.ts +2 -0
- package/dist/client/components/BackupsManagement.d.ts +2 -0
- package/dist/client/components/BackupsTable.d.ts +16 -0
- package/dist/client/components/NewBackup.d.ts +10 -0
- package/dist/client/components/RefreshBackups.d.ts +10 -0
- package/dist/client/components/RestoreFromBackup.d.ts +5 -0
- package/dist/client/components/RestoreFromLocal.d.ts +2 -0
- package/dist/client/constants.d.ts +1 -0
- package/dist/client/contexts.d.ts +17 -0
- package/dist/client/hooks/useBackupAppInfo.d.ts +8 -0
- package/dist/client/hooks/useCheckBackupMessage.d.ts +4 -0
- package/dist/client/hooks/useRestoreTask.d.ts +2 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.js +10 -0
- package/dist/client/locale.d.ts +10 -0
- package/dist/externalVersion.js +32 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +48 -0
- package/dist/locale/de-DE.json +52 -0
- package/dist/locale/en-US.json +52 -0
- package/dist/locale/es-ES.json +52 -0
- package/dist/locale/fr-FR.json +52 -0
- package/dist/locale/hu-HU.json +52 -0
- package/dist/locale/id-ID.json +52 -0
- package/dist/locale/it-IT.json +52 -0
- package/dist/locale/ja-JP.json +52 -0
- package/dist/locale/ko-KR.json +52 -0
- package/dist/locale/nl-NL.json +52 -0
- package/dist/locale/pt-BR.json +52 -0
- package/dist/locale/ru-RU.json +52 -0
- package/dist/locale/tr-TR.json +52 -0
- package/dist/locale/uk-UA.json +52 -0
- package/dist/locale/vi-VN.json +52 -0
- package/dist/locale/zh-CN.json +52 -0
- package/dist/locale/zh-TW.json +52 -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/node_modules/async/all.js +119 -0
- package/dist/node_modules/archiver/node_modules/async/allLimit.js +46 -0
- package/dist/node_modules/archiver/node_modules/async/allSeries.js +45 -0
- package/dist/node_modules/archiver/node_modules/async/any.js +122 -0
- package/dist/node_modules/archiver/node_modules/async/anyLimit.js +47 -0
- package/dist/node_modules/archiver/node_modules/async/anySeries.js +46 -0
- package/dist/node_modules/archiver/node_modules/async/apply.js +11 -0
- package/dist/node_modules/archiver/node_modules/async/applyEach.js +57 -0
- package/dist/node_modules/archiver/node_modules/async/applyEachSeries.js +37 -0
- package/dist/node_modules/archiver/node_modules/async/asyncify.js +118 -0
- package/dist/node_modules/archiver/node_modules/async/auto.js +333 -0
- package/dist/node_modules/archiver/node_modules/async/autoInject.js +182 -0
- package/dist/node_modules/archiver/node_modules/async/bower.json +17 -0
- package/dist/node_modules/archiver/node_modules/async/cargo.js +63 -0
- package/dist/node_modules/archiver/node_modules/async/cargoQueue.js +71 -0
- package/dist/node_modules/archiver/node_modules/async/compose.js +55 -0
- package/dist/node_modules/archiver/node_modules/async/concat.js +115 -0
- package/dist/node_modules/archiver/node_modules/async/concatLimit.js +60 -0
- package/dist/node_modules/archiver/node_modules/async/concatSeries.js +41 -0
- package/dist/node_modules/archiver/node_modules/async/constant.js +14 -0
- package/dist/node_modules/archiver/node_modules/async/detect.js +96 -0
- package/dist/node_modules/archiver/node_modules/async/detectLimit.js +48 -0
- package/dist/node_modules/archiver/node_modules/async/detectSeries.js +47 -0
- package/dist/node_modules/archiver/node_modules/async/dir.js +43 -0
- package/dist/node_modules/archiver/node_modules/async/dist/async.js +6062 -0
- package/dist/node_modules/archiver/node_modules/async/dist/async.min.js +1 -0
- package/dist/node_modules/archiver/node_modules/async/doDuring.js +68 -0
- package/dist/node_modules/archiver/node_modules/async/doUntil.js +46 -0
- package/dist/node_modules/archiver/node_modules/async/doWhilst.js +68 -0
- package/dist/node_modules/archiver/node_modules/async/during.js +78 -0
- package/dist/node_modules/archiver/node_modules/async/each.js +129 -0
- package/dist/node_modules/archiver/node_modules/async/eachLimit.js +50 -0
- package/dist/node_modules/archiver/node_modules/async/eachOf.js +185 -0
- package/dist/node_modules/archiver/node_modules/async/eachOfLimit.js +47 -0
- package/dist/node_modules/archiver/node_modules/async/eachOfSeries.js +39 -0
- package/dist/node_modules/archiver/node_modules/async/eachSeries.js +44 -0
- package/dist/node_modules/archiver/node_modules/async/ensureAsync.js +67 -0
- package/dist/node_modules/archiver/node_modules/async/every.js +119 -0
- package/dist/node_modules/archiver/node_modules/async/everyLimit.js +46 -0
- package/dist/node_modules/archiver/node_modules/async/everySeries.js +45 -0
- package/dist/node_modules/archiver/node_modules/async/filter.js +93 -0
- package/dist/node_modules/archiver/node_modules/async/filterLimit.js +45 -0
- package/dist/node_modules/archiver/node_modules/async/filterSeries.js +43 -0
- package/dist/node_modules/archiver/node_modules/async/find.js +96 -0
- package/dist/node_modules/archiver/node_modules/async/findLimit.js +48 -0
- package/dist/node_modules/archiver/node_modules/async/findSeries.js +47 -0
- package/dist/node_modules/archiver/node_modules/async/flatMap.js +115 -0
- package/dist/node_modules/archiver/node_modules/async/flatMapLimit.js +60 -0
- package/dist/node_modules/archiver/node_modules/async/flatMapSeries.js +41 -0
- package/dist/node_modules/archiver/node_modules/async/foldl.js +153 -0
- package/dist/node_modules/archiver/node_modules/async/foldr.js +41 -0
- package/dist/node_modules/archiver/node_modules/async/forEach.js +129 -0
- package/dist/node_modules/archiver/node_modules/async/forEachLimit.js +50 -0
- package/dist/node_modules/archiver/node_modules/async/forEachOf.js +185 -0
- package/dist/node_modules/archiver/node_modules/async/forEachOfLimit.js +47 -0
- package/dist/node_modules/archiver/node_modules/async/forEachOfSeries.js +39 -0
- package/dist/node_modules/archiver/node_modules/async/forEachSeries.js +44 -0
- package/dist/node_modules/archiver/node_modules/async/forever.js +68 -0
- package/dist/node_modules/archiver/node_modules/async/groupBy.js +108 -0
- package/dist/node_modules/archiver/node_modules/async/groupByLimit.js +71 -0
- package/dist/node_modules/archiver/node_modules/async/groupBySeries.js +36 -0
- package/dist/node_modules/archiver/node_modules/async/index.js +588 -0
- package/dist/node_modules/archiver/node_modules/async/inject.js +153 -0
- package/dist/node_modules/archiver/node_modules/async/internal/DoublyLinkedList.js +92 -0
- package/dist/node_modules/archiver/node_modules/async/internal/Heap.js +120 -0
- package/dist/node_modules/archiver/node_modules/async/internal/applyEach.js +29 -0
- package/dist/node_modules/archiver/node_modules/async/internal/asyncEachOfLimit.js +75 -0
- package/dist/node_modules/archiver/node_modules/async/internal/awaitify.js +28 -0
- package/dist/node_modules/archiver/node_modules/async/internal/breakLoop.js +10 -0
- package/dist/node_modules/archiver/node_modules/async/internal/consoleFunc.js +31 -0
- package/dist/node_modules/archiver/node_modules/async/internal/createTester.js +40 -0
- package/dist/node_modules/archiver/node_modules/async/internal/eachOfLimit.js +90 -0
- package/dist/node_modules/archiver/node_modules/async/internal/filter.js +55 -0
- package/dist/node_modules/archiver/node_modules/async/internal/getIterator.js +11 -0
- package/dist/node_modules/archiver/node_modules/async/internal/initialParams.js +14 -0
- package/dist/node_modules/archiver/node_modules/async/internal/isArrayLike.js +10 -0
- package/dist/node_modules/archiver/node_modules/async/internal/iterator.js +57 -0
- package/dist/node_modules/archiver/node_modules/async/internal/map.js +30 -0
- package/dist/node_modules/archiver/node_modules/async/internal/once.js +17 -0
- package/dist/node_modules/archiver/node_modules/async/internal/onlyOnce.js +15 -0
- package/dist/node_modules/archiver/node_modules/async/internal/parallel.js +34 -0
- package/dist/node_modules/archiver/node_modules/async/internal/promiseCallback.js +23 -0
- package/dist/node_modules/archiver/node_modules/async/internal/queue.js +294 -0
- package/dist/node_modules/archiver/node_modules/async/internal/range.js +14 -0
- package/dist/node_modules/archiver/node_modules/async/internal/reject.js +26 -0
- package/dist/node_modules/archiver/node_modules/async/internal/setImmediate.js +34 -0
- package/dist/node_modules/archiver/node_modules/async/internal/withoutIndex.js +10 -0
- package/dist/node_modules/archiver/node_modules/async/internal/wrapAsync.js +34 -0
- package/dist/node_modules/archiver/node_modules/async/log.js +41 -0
- package/dist/node_modules/archiver/node_modules/async/map.js +142 -0
- package/dist/node_modules/archiver/node_modules/async/mapLimit.js +45 -0
- package/dist/node_modules/archiver/node_modules/async/mapSeries.js +44 -0
- package/dist/node_modules/archiver/node_modules/async/mapValues.js +152 -0
- package/dist/node_modules/archiver/node_modules/async/mapValuesLimit.js +61 -0
- package/dist/node_modules/archiver/node_modules/async/mapValuesSeries.js +37 -0
- package/dist/node_modules/archiver/node_modules/async/memoize.js +91 -0
- package/dist/node_modules/archiver/node_modules/async/nextTick.js +52 -0
- package/dist/node_modules/archiver/node_modules/async/package.json +75 -0
- package/dist/node_modules/archiver/node_modules/async/parallel.js +180 -0
- package/dist/node_modules/archiver/node_modules/async/parallelLimit.js +41 -0
- package/dist/node_modules/archiver/node_modules/async/priorityQueue.js +60 -0
- package/dist/node_modules/archiver/node_modules/async/queue.js +24 -0
- package/dist/node_modules/archiver/node_modules/async/race.js +67 -0
- package/dist/node_modules/archiver/node_modules/async/reduce.js +153 -0
- package/dist/node_modules/archiver/node_modules/async/reduceRight.js +41 -0
- package/dist/node_modules/archiver/node_modules/async/reflect.js +78 -0
- package/dist/node_modules/archiver/node_modules/async/reflectAll.js +93 -0
- package/dist/node_modules/archiver/node_modules/async/reject.js +87 -0
- package/dist/node_modules/archiver/node_modules/async/rejectLimit.js +45 -0
- package/dist/node_modules/archiver/node_modules/async/rejectSeries.js +43 -0
- package/dist/node_modules/archiver/node_modules/async/retry.js +159 -0
- package/dist/node_modules/archiver/node_modules/async/retryable.js +77 -0
- package/dist/node_modules/archiver/node_modules/async/select.js +93 -0
- package/dist/node_modules/archiver/node_modules/async/selectLimit.js +45 -0
- package/dist/node_modules/archiver/node_modules/async/selectSeries.js +43 -0
- package/dist/node_modules/archiver/node_modules/async/seq.js +79 -0
- package/dist/node_modules/archiver/node_modules/async/series.js +186 -0
- package/dist/node_modules/archiver/node_modules/async/setImmediate.js +45 -0
- package/dist/node_modules/archiver/node_modules/async/some.js +122 -0
- package/dist/node_modules/archiver/node_modules/async/someLimit.js +47 -0
- package/dist/node_modules/archiver/node_modules/async/someSeries.js +46 -0
- package/dist/node_modules/archiver/node_modules/async/sortBy.js +190 -0
- package/dist/node_modules/archiver/node_modules/async/timeout.js +89 -0
- package/dist/node_modules/archiver/node_modules/async/times.js +50 -0
- package/dist/node_modules/archiver/node_modules/async/timesLimit.js +43 -0
- package/dist/node_modules/archiver/node_modules/async/timesSeries.js +32 -0
- package/dist/node_modules/archiver/node_modules/async/transform.js +173 -0
- package/dist/node_modules/archiver/node_modules/async/tryEach.js +78 -0
- package/dist/node_modules/archiver/node_modules/async/unmemoize.js +25 -0
- package/dist/node_modules/archiver/node_modules/async/until.js +61 -0
- package/dist/node_modules/archiver/node_modules/async/waterfall.js +105 -0
- package/dist/node_modules/archiver/node_modules/async/whilst.js +78 -0
- package/dist/node_modules/archiver/node_modules/async/wrapSync.js +118 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/errors-browser.js +127 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/errors.js +116 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/experimentalWarning.js +17 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/lib/_stream_duplex.js +126 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/lib/_stream_passthrough.js +37 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/lib/_stream_readable.js +1027 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/lib/_stream_transform.js +190 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/lib/_stream_writable.js +641 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/async_iterator.js +180 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/buffer_list.js +183 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/destroy.js +96 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +86 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/from-browser.js +3 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/from.js +52 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/pipeline.js +86 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/state.js +22 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/package.json +68 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/readable-browser.js +9 -0
- package/dist/node_modules/archiver/node_modules/readable-stream/readable.js +16 -0
- package/dist/node_modules/archiver/node_modules/tar-stream/extract.js +257 -0
- package/dist/node_modules/archiver/node_modules/tar-stream/headers.js +295 -0
- package/dist/node_modules/archiver/node_modules/tar-stream/index.js +2 -0
- package/dist/node_modules/archiver/node_modules/tar-stream/pack.js +255 -0
- package/dist/node_modules/archiver/node_modules/tar-stream/package.json +58 -0
- package/dist/node_modules/archiver/node_modules/tar-stream/sandbox.js +11 -0
- package/dist/node_modules/archiver/package.json +1 -0
- package/dist/node_modules/cron-parser/.eslintrc.json +15 -0
- package/dist/node_modules/cron-parser/.travis.yml +7 -0
- package/dist/node_modules/cron-parser/LICENSE +21 -0
- package/dist/node_modules/cron-parser/component.json +11 -0
- package/dist/node_modules/cron-parser/index.d.ts +1 -0
- package/dist/node_modules/cron-parser/lib/date.js +252 -0
- package/dist/node_modules/cron-parser/lib/expression.js +983 -0
- package/dist/node_modules/cron-parser/lib/field_compactor.js +70 -0
- package/dist/node_modules/cron-parser/lib/field_stringify.js +38 -0
- package/dist/node_modules/cron-parser/lib/parser.js +1 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/build/amd/luxon.js +8489 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/build/cjs-browser/luxon.js +8487 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/build/global/luxon.js +8490 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/build/global/luxon.min.js +1 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/build/node/luxon.js +7522 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/package.json +96 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/datetime.js +2169 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/duration.js +880 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/errors.js +61 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/conversions.js +157 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/diff.js +80 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/digits.js +76 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/english.js +233 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/formats.js +191 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/formatter.js +386 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/invalid.js +14 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/locale.js +482 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/regexParser.js +335 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/tokenParser.js +424 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/util.js +292 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/zoneUtil.js +36 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/info.js +193 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/interval.js +602 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/luxon.js +26 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/luxonFilled.js +13 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/settings.js +137 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/zone.js +88 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/IANAZone.js +191 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/fixedOffsetZone.js +94 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/invalidZone.js +53 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/localZone.js +63 -0
- package/dist/node_modules/cron-parser/package.json +1 -0
- package/dist/node_modules/cron-parser/test/31_of_month.js +17 -0
- package/dist/node_modules/cron-parser/test/bug.js +29 -0
- package/dist/node_modules/cron-parser/test/crondate.js +16 -0
- package/dist/node_modules/cron-parser/test/crontab.example +7 -0
- package/dist/node_modules/cron-parser/test/empty_around_comma.js +22 -0
- package/dist/node_modules/cron-parser/test/expression.js +1489 -0
- package/dist/node_modules/cron-parser/test/field_compactor.js +250 -0
- package/dist/node_modules/cron-parser/test/field_stringify.js +84 -0
- package/dist/node_modules/cron-parser/test/fields.js +32 -0
- package/dist/node_modules/cron-parser/test/increment_on_first_iteration.js +22 -0
- package/dist/node_modules/cron-parser/test/index-ts3.test-d.ts +133 -0
- package/dist/node_modules/cron-parser/test/index.test-d.ts +138 -0
- package/dist/node_modules/cron-parser/test/leap_year.js +17 -0
- package/dist/node_modules/cron-parser/test/parser.js +46 -0
- package/dist/node_modules/cron-parser/test/parser_crondate_formats.js +145 -0
- package/dist/node_modules/cron-parser/test/parser_day_of_month.js +169 -0
- package/dist/node_modules/cron-parser/test/prev_date.js +32 -0
- package/dist/node_modules/cron-parser/test/stringify.js +402 -0
- package/dist/node_modules/cron-parser/test/timezone.js +422 -0
- package/dist/node_modules/cron-parser/types/common.d.ts +131 -0
- package/dist/node_modules/cron-parser/types/index.d.ts +45 -0
- package/dist/node_modules/cron-parser/types/ts3/index.d.ts +28 -0
- package/dist/node_modules/fs-extra/LICENSE +15 -0
- package/dist/node_modules/fs-extra/lib/copy/copy.js +232 -0
- package/dist/node_modules/fs-extra/lib/copy/index.js +6 -0
- package/dist/node_modules/fs-extra/lib/copy-sync/copy-sync.js +166 -0
- package/dist/node_modules/fs-extra/lib/copy-sync/index.js +5 -0
- package/dist/node_modules/fs-extra/lib/empty/index.js +48 -0
- package/dist/node_modules/fs-extra/lib/ensure/file.js +69 -0
- package/dist/node_modules/fs-extra/lib/ensure/index.js +23 -0
- package/dist/node_modules/fs-extra/lib/ensure/link.js +61 -0
- package/dist/node_modules/fs-extra/lib/ensure/symlink-paths.js +99 -0
- package/dist/node_modules/fs-extra/lib/ensure/symlink-type.js +31 -0
- package/dist/node_modules/fs-extra/lib/ensure/symlink.js +63 -0
- package/dist/node_modules/fs-extra/lib/fs/index.js +130 -0
- package/dist/node_modules/fs-extra/lib/index.js +1 -0
- package/dist/node_modules/fs-extra/lib/json/index.js +16 -0
- package/dist/node_modules/fs-extra/lib/json/jsonfile.js +11 -0
- package/dist/node_modules/fs-extra/lib/json/output-json-sync.js +12 -0
- package/dist/node_modules/fs-extra/lib/json/output-json.js +12 -0
- package/dist/node_modules/fs-extra/lib/mkdirs/index.js +14 -0
- package/dist/node_modules/fs-extra/lib/mkdirs/make-dir.js +141 -0
- package/dist/node_modules/fs-extra/lib/move/index.js +6 -0
- package/dist/node_modules/fs-extra/lib/move/move.js +65 -0
- package/dist/node_modules/fs-extra/lib/move-sync/index.js +5 -0
- package/dist/node_modules/fs-extra/lib/move-sync/move-sync.js +47 -0
- package/dist/node_modules/fs-extra/lib/output/index.js +40 -0
- package/dist/node_modules/fs-extra/lib/path-exists/index.js +12 -0
- package/dist/node_modules/fs-extra/lib/remove/index.js +9 -0
- package/dist/node_modules/fs-extra/lib/remove/rimraf.js +302 -0
- package/dist/node_modules/fs-extra/lib/util/stat.js +139 -0
- package/dist/node_modules/fs-extra/lib/util/utimes.js +26 -0
- package/dist/node_modules/fs-extra/package.json +1 -0
- package/dist/node_modules/semver/LICENSE +15 -0
- package/dist/node_modules/semver/bin/semver.js +197 -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 +539 -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/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/node_modules/yauzl/LICENSE +21 -0
- package/dist/node_modules/yauzl/fd-slicer.js +314 -0
- package/dist/node_modules/yauzl/index.js +1 -0
- package/dist/node_modules/yauzl/package.json +1 -0
- package/dist/server/adapters/database.d.ts +9 -0
- package/dist/server/adapters/database.js +486 -0
- package/dist/server/collections/backup-settings.d.ts +2 -0
- package/dist/server/collections/backup-settings.js +67 -0
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.js +42 -0
- package/dist/server/managers/backup.d.ts +41 -0
- package/dist/server/managers/backup.js +448 -0
- package/dist/server/managers/restore.d.ts +24 -0
- package/dist/server/managers/restore.js +434 -0
- package/dist/server/plugin.d.ts +26 -0
- package/dist/server/plugin.js +251 -0
- package/dist/server/resourcers/backup-cli.d.ts +23 -0
- package/dist/server/resourcers/backup-cli.js +237 -0
- package/dist/server/resourcers/backups.d.ts +24 -0
- package/dist/server/resourcers/backups.js +192 -0
- package/dist/server/types.d.ts +12 -0
- package/dist/server/types.js +24 -0
- package/dist/server/utils.d.ts +48 -0
- package/dist/server/utils.js +323 -0
- package/dist/swagger/index.json +313 -0
- package/package.json +51 -0
- package/server.d.ts +2 -0
- 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,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
|
+
});
|