From 16ffd2a6b8b641c611223ef6ae2405ab6d9dfef4 Mon Sep 17 00:00:00 2001 From: yeyedeshen Date: Wed, 12 Feb 2025 10:17:50 +0800 Subject: [PATCH] =?UTF-8?q?FileManeger=E4=B8=8B=E6=9E=B6medialibrary?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E8=BF=81=E7=A7=BB=E8=87=B3SystemFea?= =?UTF-8?q?ture?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yeyedeshen --- OAT.xml | 96 +- .../FileManager/hvigor/hvigor-config.json5 | 6 - .../FileManager/hvigor/hvigor-wrapper.js | 2 - .../FileManager/lib/MyPhoneFilePage-1.0.0.hap | Bin 551895 -> 0 bytes .../FileManager/lib/MyPhoneFilePage-1.0.0.tgz | 3 - .../FileManagement/FileManager/.gitignore | 0 .../FileManager/AppScope/app.json5 | 0 .../resources/base/element/string.json | 0 .../resources/base/media/app_icon.png | Bin .../FileManager/Library/.gitignore | 0 .../FileManager/Library/Index.ets | 0 .../FileManager/Library/build-profile.json5 | 0 .../FileManager/Library/hvigorfile.ts | 0 .../FileManager/Library/oh-package.json5 | 0 .../src/main/ets/filemanager/FileManager.ts | 0 .../filemanager/components/ThumbnailImage.ets | 0 .../ets/filemanager/fileio/FileIoManager.ets | 9 +- .../filemanager/fileio/NewFileIoManager.ets | 0 .../medialibrary/MediaLibraryManager.ts | 0 .../userfilemanager/UserFileManager.ts | 0 .../src/main/ets/mock/local/FileData.ets | 0 .../src/main/ets/mock/local/LocalMockData.ts | 0 .../src/main/ets/mock/net/NetMockData.ts | 0 .../Library/src/main/ets/utils/Logger.ts | 0 .../FileManager/Library/src/main/module.json5 | 0 .../main/resources/base/element/string.json | 0 .../resources/base/media/default_document.png | Bin .../FileManagement/FileManager/README_zh.md | 6 +- .../FileManager/build-profile.json5 | 0 .../FileManager/entry/.gitignore | 0 .../FileManager/entry/build-profile.json5 | 0 .../FileManager/entry/hvigorfile.js | 0 .../FileManager/entry/oh-package.json5 | 0 .../main/ets/Application/MyAbilityStage.ts | 0 .../src/main/ets/MainAbility/MainAbility.ets | 16 +- .../entry/src/main/ets/common/Common.ets | 0 .../entry/src/main/ets/common/Logger.ts | 0 .../filemanager/data/DocumentDataSource.ets | 0 .../ets/filemanager/data/FileDataSource.ets | 0 .../main/ets/filemanager/fileFs/MyWatcher.ets | 18 +- .../ets/filemanager/pages/FileManagerHome.ets | 43 +- .../pages/MyPhone/ChangeTimeDialog.ets | 6 +- .../pages/MyPhone/DeleteDialog.ets | 0 .../pages/MyPhone/InputNameDialog.ets | 6 +- .../ets/filemanager/pages/MyPhone/MyPhone.ets | 38 +- .../filemanager/pages/MyPhone/OpenFile.ets | 0 .../filemanager/pages/audio/AudioFileList.ets | 0 .../ets/filemanager/pages/common/FileList.ets | 0 .../pages/document/DocumentFileList.ets | 15 +- .../pages/document/DocumentFileManager.ets | 0 .../filemanager/pages/image/ImageFileList.ets | 0 .../filemanager/pages/image/ImagePreview.ets | 0 .../filemanager/pages/video/VideoFileList.ets | 0 .../entry/src/main/ets/pages/EditFile.ets | 4 +- .../entry/src/main/ets/pages/Index.ets | 0 .../entry/src/main/ets/pages/WatcherFile.ets | 6 +- .../FileManager/entry/src/main/module.json5 | 0 .../main/resources/base/element/color.json | 0 .../main/resources/base/element/string.json | 0 .../src/main/resources/base/media/add.png | Bin .../resources/base/media/addDirectory.png | Bin .../src/main/resources/base/media/addFile.png | Bin .../src/main/resources/base/media/back.png | Bin .../src/main/resources/base/media/clean.png | Bin .../base/media/compressed_package.png | Bin .../src/main/resources/base/media/copy.png | Bin .../resources/base/media/default_document.png | Bin .../src/main/resources/base/media/delete.png | Bin .../main/resources/base/media/directory.png | Bin .../main/resources/base/media/document.png | Bin .../src/main/resources/base/media/file.png | Bin .../resources/base/media/ic_arrow_right.svg | 0 .../src/main/resources/base/media/ic_back.svg | 0 .../main/resources/base/media/ic_backward.svg | 0 .../base/media/ic_backward_right.svg | 0 .../resources/base/media/ic_cancel_edit.svg | 0 .../main/resources/base/media/ic_delete.svg | 0 .../src/main/resources/base/media/ic_edit.svg | 0 .../src/main/resources/base/media/ic_file.svg | 0 .../resources/base/media/ic_file_edit.svg | 0 .../main/resources/base/media/ic_folder.svg | 0 .../src/main/resources/base/media/ic_more.svg | 0 .../src/main/resources/base/media/ic_ok.svg | 0 .../resources/base/media/ic_public_clean.svg | 0 .../src/main/resources/base/media/ic_rank.svg | 0 .../src/main/resources/base/media/ic_save.svg | 0 .../src/main/resources/base/media/icon.png | Bin .../src/main/resources/base/media/image.png | Bin .../src/main/resources/base/media/img.png | Bin .../src/main/resources/base/media/left.png | Bin .../src/main/resources/base/media/music.png | Bin .../main/resources/base/media/my_phone.png | Bin .../src/main/resources/base/media/no_file.png | Bin .../src/main/resources/base/media/nothing.png | Bin .../src/main/resources/base/media/option.png | Bin .../src/main/resources/base/media/rename.png | Bin .../main/resources/base/media/rename_gray.png | Bin .../src/main/resources/base/media/right.png | Bin .../main/resources/base/media/right_arrow.png | Bin .../src/main/resources/base/media/select.png | Bin .../src/main/resources/base/media/share.png | Bin .../src/main/resources/base/media/sort.png | Bin .../src/main/resources/base/media/video.png | Bin .../src/main/resources/base/media/watcher.png | Bin .../resources/base/profile/main_pages.json | 0 .../src/main/resources/en/element/string.json | 0 .../src/main/resources/zh/element/string.json | 0 .../ets/Application/TestAbilityStage.ts | 0 .../ets/TestRunner/OpenHarmonyTestRunner.ts | 0 .../src/ohosTest/ets/test/Ability.test.ets | 1656 ++++++++--------- .../entry/src/ohosTest/ets/test/List.test.ets | 0 .../ohosTest/ets/testability/TestAbility.ets | 0 .../ohosTest/ets/testability/pages/Index.ets | 0 .../entry/src/ohosTest/module.json5 | 6 +- .../resources/base/element/color.json | 0 .../resources/base/element/string.json | 4 + .../ohosTest/resources/base/media/icon.png | Bin .../resources/base/profile/test_pages.json | 0 .../ohosTest/resources/en/element/string.json | 4 + .../ohosTest/resources/zh/element/string.json | 4 + .../FileManager/hvigor/hvigor-config.json5 | 21 + .../FileManager/hvigor/hvigor-wrapper.js | 1 + .../FileManagement/FileManager/hvigorfile.js | 0 .../FileManagement/FileManager/hvigorw | 0 .../FileManagement/FileManager/hvigorw.bat | 0 .../FileManager/oh-package.json5 | 0 .../FileManagement/FileManager/ohosTest.md | 0 .../FileManager/screenshots/document_list.png | Bin .../screenshots/image_file_list.png | Bin .../FileManager/screenshots/image_preview.png | Bin .../FileManager/screenshots/main.png | Bin .../FileManager/screenshots/myPhone_home.png | Bin 132 files changed, 959 insertions(+), 1011 deletions(-) delete mode 100644 code/BasicFeature/FileManagement/FileManager/hvigor/hvigor-config.json5 delete mode 100644 code/BasicFeature/FileManagement/FileManager/hvigor/hvigor-wrapper.js delete mode 100644 code/BasicFeature/FileManagement/FileManager/lib/MyPhoneFilePage-1.0.0.hap delete mode 100644 code/BasicFeature/FileManagement/FileManager/lib/MyPhoneFilePage-1.0.0.tgz rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/.gitignore (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/AppScope/app.json5 (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/AppScope/resources/base/element/string.json (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/AppScope/resources/base/media/app_icon.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/.gitignore (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/Index.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/build-profile.json5 (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/hvigorfile.ts (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/oh-package.json5 (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/src/main/ets/filemanager/FileManager.ts (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/src/main/ets/filemanager/components/ThumbnailImage.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/src/main/ets/filemanager/fileio/FileIoManager.ets (97%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/src/main/ets/filemanager/fileio/NewFileIoManager.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/src/main/ets/filemanager/medialibrary/MediaLibraryManager.ts (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/src/main/ets/filemanager/userfilemanager/UserFileManager.ts (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/src/main/ets/mock/local/FileData.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/src/main/ets/mock/local/LocalMockData.ts (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/src/main/ets/mock/net/NetMockData.ts (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/src/main/ets/utils/Logger.ts (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/src/main/module.json5 (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/src/main/resources/base/element/string.json (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/Library/src/main/resources/base/media/default_document.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/README_zh.md (94%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/build-profile.json5 (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/.gitignore (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/build-profile.json5 (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/hvigorfile.js (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/oh-package.json5 (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/Application/MyAbilityStage.ts (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/MainAbility/MainAbility.ets (90%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/common/Common.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/common/Logger.ts (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/data/DocumentDataSource.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/data/FileDataSource.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/fileFs/MyWatcher.ets (94%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/FileManagerHome.ets (77%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/ChangeTimeDialog.ets (93%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/DeleteDialog.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/InputNameDialog.ets (94%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/MyPhone.ets (96%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/OpenFile.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/audio/AudioFileList.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/common/FileList.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/document/DocumentFileList.ets (94%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/document/DocumentFileManager.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/image/ImageFileList.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/image/ImagePreview.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/video/VideoFileList.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/pages/EditFile.ets (99%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/pages/Index.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/ets/pages/WatcherFile.ets (98%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/module.json5 (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/element/color.json (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/element/string.json (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/add.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/addDirectory.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/addFile.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/back.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/clean.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/compressed_package.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/copy.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/default_document.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/delete.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/directory.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/document.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/file.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/ic_arrow_right.svg (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/ic_back.svg (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/ic_backward.svg (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/ic_backward_right.svg (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/ic_cancel_edit.svg (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/ic_delete.svg (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/ic_edit.svg (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/ic_file.svg (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/ic_file_edit.svg (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/ic_folder.svg (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/ic_more.svg (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/ic_ok.svg (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/ic_public_clean.svg (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/ic_rank.svg (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/ic_save.svg (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/icon.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/image.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/img.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/left.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/music.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/my_phone.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/no_file.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/nothing.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/option.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/rename.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/rename_gray.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/right.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/right_arrow.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/select.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/share.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/sort.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/video.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/media/watcher.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/base/profile/main_pages.json (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/en/element/string.json (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/main/resources/zh/element/string.json (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/ohosTest/ets/Application/TestAbilityStage.ts (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/ohosTest/ets/TestRunner/OpenHarmonyTestRunner.ts (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/ohosTest/ets/test/Ability.test.ets (52%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/ohosTest/ets/test/List.test.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/ohosTest/ets/testability/TestAbility.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/ohosTest/ets/testability/pages/Index.ets (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/ohosTest/module.json5 (89%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/ohosTest/resources/base/element/color.json (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/ohosTest/resources/base/element/string.json (85%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/ohosTest/resources/base/media/icon.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/ohosTest/resources/base/profile/test_pages.json (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/ohosTest/resources/en/element/string.json (85%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/entry/src/ohosTest/resources/zh/element/string.json (85%) create mode 100644 code/SystemFeature/FileManagement/FileManager/hvigor/hvigor-config.json5 create mode 100644 code/SystemFeature/FileManagement/FileManager/hvigor/hvigor-wrapper.js rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/hvigorfile.js (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/hvigorw (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/hvigorw.bat (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/oh-package.json5 (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/ohosTest.md (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/screenshots/document_list.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/screenshots/image_file_list.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/screenshots/image_preview.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/screenshots/main.png (100%) rename code/{BasicFeature => SystemFeature}/FileManagement/FileManager/screenshots/myPhone_home.png (100%) diff --git a/OAT.xml b/OAT.xml index 1fd49a3bbb..b38a8ddbfa 100644 --- a/OAT.xml +++ b/OAT.xml @@ -155,34 +155,71 @@ Note:If the text contains special characters, please escape them according to th - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -772,7 +809,6 @@ Note:If the text contains special characters, please escape them according to th - @@ -947,7 +983,6 @@ Note:If the text contains special characters, please escape them according to th - @@ -995,7 +1030,6 @@ Note:If the text contains special characters, please escape them according to th - diff --git a/code/BasicFeature/FileManagement/FileManager/hvigor/hvigor-config.json5 b/code/BasicFeature/FileManagement/FileManager/hvigor/hvigor-config.json5 deleted file mode 100644 index e75281b258..0000000000 --- a/code/BasicFeature/FileManagement/FileManager/hvigor/hvigor-config.json5 +++ /dev/null @@ -1,6 +0,0 @@ -{ - "hvigorVersion": "3.0.2", - "dependencies": { - "@ohos/hvigor-ohos-plugin": "3.0.2" - } -} \ No newline at end of file diff --git a/code/BasicFeature/FileManagement/FileManager/hvigor/hvigor-wrapper.js b/code/BasicFeature/FileManagement/FileManager/hvigor/hvigor-wrapper.js deleted file mode 100644 index 994f22987b..0000000000 --- a/code/BasicFeature/FileManagement/FileManager/hvigor/hvigor-wrapper.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";var e=require("fs"),t=require("path"),n=require("os"),r=require("crypto"),u=require("child_process"),o=require("constants"),i=require("stream"),s=require("util"),c=require("assert"),a=require("tty"),l=require("zlib"),f=require("net");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var D=d(e),p=d(t),E=d(n),m=d(r),h=d(u),y=d(o),C=d(i),F=d(s),g=d(c),A=d(a),v=d(l),S=d(f),w="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},O={},b={},_={},B=w&&w.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(_,"__esModule",{value:!0}),_.isMac=_.isLinux=_.isWindows=void 0;const P=B(E.default),k="Windows_NT",x="Linux",N="Darwin";_.isWindows=function(){return P.default.type()===k},_.isLinux=function(){return P.default.type()===x},_.isMac=function(){return P.default.type()===N};var I={},T=w&&w.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var u=Object.getOwnPropertyDescriptor(t,n);u&&!("get"in u?!t.__esModule:u.writable||u.configurable)||(u={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,u)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),R=w&&w.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),M=w&&w.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&T(t,e,n);return R(t,e),t};Object.defineProperty(I,"__esModule",{value:!0}),I.hash=void 0;const L=M(m.default);I.hash=function(e,t="md5"){return L.createHash(t).update(e,"utf-8").digest("hex")},function(e){var t=w&&w.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var u=Object.getOwnPropertyDescriptor(t,n);u&&!("get"in u?!t.__esModule:u.writable||u.configurable)||(u={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,u)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),n=w&&w.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=w&&w.__importStar||function(e){if(e&&e.__esModule)return e;var r={};if(null!=e)for(var u in e)"default"!==u&&Object.prototype.hasOwnProperty.call(e,u)&&t(r,e,u);return n(r,e),r};Object.defineProperty(e,"__esModule",{value:!0}),e.HVIGOR_BOOT_JS_FILE_PATH=e.HVIGOR_PROJECT_DEPENDENCY_PACKAGE_JSON_PATH=e.HVIGOR_PROJECT_DEPENDENCIES_HOME=e.HVIGOR_PROJECT_WRAPPER_HOME=e.HVIGOR_PROJECT_NAME=e.HVIGOR_PROJECT_ROOT_DIR=e.HVIGOR_PROJECT_CACHES_HOME=e.HVIGOR_PNPM_STORE_PATH=e.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH=e.HVIGOR_WRAPPER_TOOLS_HOME=e.HVIGOR_USER_HOME=e.DEFAULT_PACKAGE_JSON=e.DEFAULT_HVIGOR_CONFIG_JSON_FILE_NAME=e.PNPM=e.HVIGOR=e.NPM_TOOL=e.PNPM_TOOL=e.HVIGOR_ENGINE_PACKAGE_NAME=void 0;const u=r(p.default),o=r(E.default),i=_,s=I;e.HVIGOR_ENGINE_PACKAGE_NAME="@ohos/hvigor",e.PNPM_TOOL=(0,i.isWindows)()?"pnpm.cmd":"pnpm",e.NPM_TOOL=(0,i.isWindows)()?"npm.cmd":"npm",e.HVIGOR="hvigor",e.PNPM="pnpm",e.DEFAULT_HVIGOR_CONFIG_JSON_FILE_NAME="hvigor-config.json5",e.DEFAULT_PACKAGE_JSON="package.json",e.HVIGOR_USER_HOME=u.resolve(o.homedir(),".hvigor"),e.HVIGOR_WRAPPER_TOOLS_HOME=u.resolve(e.HVIGOR_USER_HOME,"wrapper","tools"),e.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH=u.resolve(e.HVIGOR_WRAPPER_TOOLS_HOME,"node_modules",".bin",e.PNPM_TOOL),e.HVIGOR_PNPM_STORE_PATH=u.resolve(e.HVIGOR_USER_HOME,"caches"),e.HVIGOR_PROJECT_CACHES_HOME=u.resolve(e.HVIGOR_USER_HOME,"project_caches"),e.HVIGOR_PROJECT_ROOT_DIR=process.cwd(),e.HVIGOR_PROJECT_NAME=u.basename((0,s.hash)(e.HVIGOR_PROJECT_ROOT_DIR)),e.HVIGOR_PROJECT_WRAPPER_HOME=u.resolve(e.HVIGOR_PROJECT_ROOT_DIR,e.HVIGOR),e.HVIGOR_PROJECT_DEPENDENCIES_HOME=u.resolve(e.HVIGOR_PROJECT_CACHES_HOME,e.HVIGOR_PROJECT_NAME,"workspace"),e.HVIGOR_PROJECT_DEPENDENCY_PACKAGE_JSON_PATH=u.resolve(e.HVIGOR_PROJECT_DEPENDENCIES_HOME,e.DEFAULT_PACKAGE_JSON),e.HVIGOR_BOOT_JS_FILE_PATH=u.resolve(e.HVIGOR_PROJECT_DEPENDENCIES_HOME,"node_modules","@ohos","hvigor","bin","hvigor.js")}(b);var j={},$={};Object.defineProperty($,"__esModule",{value:!0}),$.logInfoPrintConsole=$.logErrorAndExit=void 0,$.logErrorAndExit=function(e){e instanceof Error?console.error(e.message):console.error(e),process.exit(-1)},$.logInfoPrintConsole=function(e){console.log(e)};var H=w&&w.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var u=Object.getOwnPropertyDescriptor(t,n);u&&!("get"in u?!t.__esModule:u.writable||u.configurable)||(u={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,u)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),J=w&&w.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),G=w&&w.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&H(t,e,n);return J(t,e),t},V=w&&w.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(j,"__esModule",{value:!0}),j.isFileExists=j.offlinePluginConversion=j.executeCommand=j.getNpmPath=j.hasNpmPackInPaths=void 0;const U=h.default,W=G(p.default),z=b,K=$,q=V(D.default);j.hasNpmPackInPaths=function(e,t){try{return require.resolve(e,{paths:[...t]}),!0}catch(e){return!1}},j.getNpmPath=function(){const e=process.execPath;return W.join(W.dirname(e),z.NPM_TOOL)},j.executeCommand=function(e,t,n){0!==(0,U.spawnSync)(e,t,n).status&&(0,K.logErrorAndExit)(`Error: ${e} ${t} execute failed.See above for details.`)},j.offlinePluginConversion=function(e,t){return t.startsWith("file:")||t.endsWith(".tgz")?W.resolve(e,z.HVIGOR,t.replace("file:","")):t},j.isFileExists=function(e){return q.default.existsSync(e)&&q.default.statSync(e).isFile()},function(e){var t=w&&w.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var u=Object.getOwnPropertyDescriptor(t,n);u&&!("get"in u?!t.__esModule:u.writable||u.configurable)||(u={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,u)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),n=w&&w.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=w&&w.__importStar||function(e){if(e&&e.__esModule)return e;var r={};if(null!=e)for(var u in e)"default"!==u&&Object.prototype.hasOwnProperty.call(e,u)&&t(r,e,u);return n(r,e),r},u=w&&w.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.executeInstallPnpm=e.isPnpmAvailable=e.environmentHandler=e.checkNpmConifg=e.PNPM_VERSION=void 0;const o=r(D.default),i=b,s=j,c=r(p.default),a=$,l=h.default,f=u(E.default);e.PNPM_VERSION="7.30.0",e.checkNpmConifg=function(){const e=c.resolve(i.HVIGOR_PROJECT_ROOT_DIR,".npmrc"),t=c.resolve(f.default.homedir(),".npmrc");if((0,s.isFileExists)(e)||(0,s.isFileExists)(t))return;const n=(0,s.getNpmPath)(),r=(0,l.spawnSync)(n,["config","get","prefix"],{cwd:i.HVIGOR_PROJECT_ROOT_DIR});if(0!==r.status||!r.stdout)return void(0,a.logErrorAndExit)("Error: The hvigor depends on the npmrc file. Configure the npmrc file first.");const u=c.resolve(`${r.stdout}`.replace(/[\r\n]/gi,""),".npmrc");(0,s.isFileExists)(u)||(0,a.logErrorAndExit)("Error: The hvigor depends on the npmrc file. Configure the npmrc file first.")},e.environmentHandler=function(){process.env["npm_config_update-notifier"]="false"},e.isPnpmAvailable=function(){return!!o.existsSync(i.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH)&&(0,s.hasNpmPackInPaths)("pnpm",[i.HVIGOR_WRAPPER_TOOLS_HOME])},e.executeInstallPnpm=function(){(0,a.logInfoPrintConsole)(`Installing pnpm@${e.PNPM_VERSION}...`);const t=(0,s.getNpmPath)();!function(){const t=c.resolve(i.HVIGOR_WRAPPER_TOOLS_HOME,i.DEFAULT_PACKAGE_JSON);try{o.existsSync(i.HVIGOR_WRAPPER_TOOLS_HOME)||o.mkdirSync(i.HVIGOR_WRAPPER_TOOLS_HOME,{recursive:!0});const n={dependencies:{}};n.dependencies[i.PNPM]=e.PNPM_VERSION,o.writeFileSync(t,JSON.stringify(n))}catch(e){(0,a.logErrorAndExit)(`Error: EPERM: operation not permitted,create ${t} failed.`)}}(),(0,s.executeCommand)(t,["install","pnpm"],{cwd:i.HVIGOR_WRAPPER_TOOLS_HOME,stdio:["inherit","inherit","inherit"],env:process.env}),(0,a.logInfoPrintConsole)("Pnpm install success.")}}(O);var Y={},X={},Z={},Q={};Object.defineProperty(Q,"__esModule",{value:!0}),Q.Unicode=void 0;class ee{}Q.Unicode=ee,ee.Space_Separator=/[\u1680\u2000-\u200A\u202F\u205F\u3000]/,ee.ID_Start=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/,ee.ID_Continue=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/,Object.defineProperty(Z,"__esModule",{value:!0}),Z.JudgeUtil=void 0;const te=Q;Z.JudgeUtil=class{static isIgnoreChar(e){return"string"==typeof e&&("\t"===e||"\v"===e||"\f"===e||" "===e||" "===e||"\ufeff"===e||"\n"===e||"\r"===e||"\u2028"===e||"\u2029"===e)}static isSpaceSeparator(e){return"string"==typeof e&&te.Unicode.Space_Separator.test(e)}static isIdStartChar(e){return"string"==typeof e&&(e>="a"&&e<="z"||e>="A"&&e<="Z"||"$"===e||"_"===e||te.Unicode.ID_Start.test(e))}static isIdContinueChar(e){return"string"==typeof e&&(e>="a"&&e<="z"||e>="A"&&e<="Z"||e>="0"&&e<="9"||"$"===e||"_"===e||"‌"===e||"‍"===e||te.Unicode.ID_Continue.test(e))}static isDigitWithoutZero(e){return/[1-9]/.test(e)}static isDigit(e){return"string"==typeof e&&/[0-9]/.test(e)}static isHexDigit(e){return"string"==typeof e&&/[0-9A-Fa-f]/.test(e)}};var ne={},re={fromCallback:function(e){return Object.defineProperty((function(...t){if("function"!=typeof t[t.length-1])return new Promise(((n,r)=>{e.call(this,...t,((e,t)=>null!=e?r(e):n(t)))}));e.apply(this,t)}),"name",{value:e.name})},fromPromise:function(e){return Object.defineProperty((function(...t){const n=t[t.length-1];if("function"!=typeof n)return e.apply(this,t);e.apply(this,t.slice(0,-1)).then((e=>n(null,e)),n)}),"name",{value:e.name})}},ue=y.default,oe=process.cwd,ie=null,se=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return ie||(ie=oe.call(process)),ie};try{process.cwd()}catch(e){}if("function"==typeof process.chdir){var ce=process.chdir;process.chdir=function(e){ie=null,ce.call(process,e)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,ce)}var ae=function(e){ue.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&function(e){e.lchmod=function(t,n,r){e.open(t,ue.O_WRONLY|ue.O_SYMLINK,n,(function(t,u){t?r&&r(t):e.fchmod(u,n,(function(t){e.close(u,(function(e){r&&r(t||e)}))}))}))},e.lchmodSync=function(t,n){var r,u=e.openSync(t,ue.O_WRONLY|ue.O_SYMLINK,n),o=!0;try{r=e.fchmodSync(u,n),o=!1}finally{if(o)try{e.closeSync(u)}catch(e){}else e.closeSync(u)}return r}}(e);e.lutimes||function(e){ue.hasOwnProperty("O_SYMLINK")&&e.futimes?(e.lutimes=function(t,n,r,u){e.open(t,ue.O_SYMLINK,(function(t,o){t?u&&u(t):e.futimes(o,n,r,(function(t){e.close(o,(function(e){u&&u(t||e)}))}))}))},e.lutimesSync=function(t,n,r){var u,o=e.openSync(t,ue.O_SYMLINK),i=!0;try{u=e.futimesSync(o,n,r),i=!1}finally{if(i)try{e.closeSync(o)}catch(e){}else e.closeSync(o)}return u}):e.futimes&&(e.lutimes=function(e,t,n,r){r&&process.nextTick(r)},e.lutimesSync=function(){})}(e);e.chown=r(e.chown),e.fchown=r(e.fchown),e.lchown=r(e.lchown),e.chmod=t(e.chmod),e.fchmod=t(e.fchmod),e.lchmod=t(e.lchmod),e.chownSync=u(e.chownSync),e.fchownSync=u(e.fchownSync),e.lchownSync=u(e.lchownSync),e.chmodSync=n(e.chmodSync),e.fchmodSync=n(e.fchmodSync),e.lchmodSync=n(e.lchmodSync),e.stat=o(e.stat),e.fstat=o(e.fstat),e.lstat=o(e.lstat),e.statSync=i(e.statSync),e.fstatSync=i(e.fstatSync),e.lstatSync=i(e.lstatSync),e.chmod&&!e.lchmod&&(e.lchmod=function(e,t,n){n&&process.nextTick(n)},e.lchmodSync=function(){});e.chown&&!e.lchown&&(e.lchown=function(e,t,n,r){r&&process.nextTick(r)},e.lchownSync=function(){});"win32"===se&&(e.rename="function"!=typeof e.rename?e.rename:function(t){function n(n,r,u){var o=Date.now(),i=0;t(n,r,(function s(c){if(c&&("EACCES"===c.code||"EPERM"===c.code||"EBUSY"===c.code)&&Date.now()-o<6e4)return setTimeout((function(){e.stat(r,(function(e,o){e&&"ENOENT"===e.code?t(n,r,s):u(c)}))}),i),void(i<100&&(i+=10));u&&u(c)}))}return Object.setPrototypeOf&&Object.setPrototypeOf(n,t),n}(e.rename));function t(t){return t?function(n,r,u){return t.call(e,n,r,(function(e){s(e)&&(e=null),u&&u.apply(this,arguments)}))}:t}function n(t){return t?function(n,r){try{return t.call(e,n,r)}catch(e){if(!s(e))throw e}}:t}function r(t){return t?function(n,r,u,o){return t.call(e,n,r,u,(function(e){s(e)&&(e=null),o&&o.apply(this,arguments)}))}:t}function u(t){return t?function(n,r,u){try{return t.call(e,n,r,u)}catch(e){if(!s(e))throw e}}:t}function o(t){return t?function(n,r,u){function o(e,t){t&&(t.uid<0&&(t.uid+=4294967296),t.gid<0&&(t.gid+=4294967296)),u&&u.apply(this,arguments)}return"function"==typeof r&&(u=r,r=null),r?t.call(e,n,r,o):t.call(e,n,o)}:t}function i(t){return t?function(n,r){var u=r?t.call(e,n,r):t.call(e,n);return u&&(u.uid<0&&(u.uid+=4294967296),u.gid<0&&(u.gid+=4294967296)),u}:t}function s(e){return!e||("ENOSYS"===e.code||!(process.getuid&&0===process.getuid()||"EINVAL"!==e.code&&"EPERM"!==e.code))}e.read="function"!=typeof e.read?e.read:function(t){function n(n,r,u,o,i,s){var c;if(s&&"function"==typeof s){var a=0;c=function(l,f,d){if(l&&"EAGAIN"===l.code&&a<10)return a++,t.call(e,n,r,u,o,i,c);s.apply(this,arguments)}}return t.call(e,n,r,u,o,i,c)}return Object.setPrototypeOf&&Object.setPrototypeOf(n,t),n}(e.read),e.readSync="function"!=typeof e.readSync?e.readSync:(c=e.readSync,function(t,n,r,u,o){for(var i=0;;)try{return c.call(e,t,n,r,u,o)}catch(e){if("EAGAIN"===e.code&&i<10){i++;continue}throw e}});var c};var le=C.default.Stream,fe=function(e){return{ReadStream:function t(n,r){if(!(this instanceof t))return new t(n,r);le.call(this);var u=this;this.path=n,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=65536,r=r||{};for(var o=Object.keys(r),i=0,s=o.length;ithis.end)throw new Error("start must be <= end");this.pos=this.start}if(null!==this.fd)return void process.nextTick((function(){u._read()}));e.open(this.path,this.flags,this.mode,(function(e,t){if(e)return u.emit("error",e),void(u.readable=!1);u.fd=t,u.emit("open",t),u._read()}))},WriteStream:function t(n,r){if(!(this instanceof t))return new t(n,r);le.call(this),this.path=n,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,r=r||{};for(var u=Object.keys(r),o=0,i=u.length;o= zero");this.pos=this.start}this.busy=!1,this._queue=[],null===this.fd&&(this._open=e.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}};var de=function(e){if(null===e||"object"!=typeof e)return e;if(e instanceof Object)var t={__proto__:De(e)};else t=Object.create(null);return Object.getOwnPropertyNames(e).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})),t},De=Object.getPrototypeOf||function(e){return e.__proto__};var pe,Ee,me=D.default,he=ae,ye=fe,Ce=de,Fe=F.default;function ge(e,t){Object.defineProperty(e,pe,{get:function(){return t}})}"function"==typeof Symbol&&"function"==typeof Symbol.for?(pe=Symbol.for("graceful-fs.queue"),Ee=Symbol.for("graceful-fs.previous")):(pe="___graceful-fs.queue",Ee="___graceful-fs.previous");var Ae=function(){};if(Fe.debuglog?Ae=Fe.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(Ae=function(){var e=Fe.format.apply(Fe,arguments);e="GFS4: "+e.split(/\n/).join("\nGFS4: "),console.error(e)}),!me[pe]){var ve=w[pe]||[];ge(me,ve),me.close=function(e){function t(t,n){return e.call(me,t,(function(e){e||_e(),"function"==typeof n&&n.apply(this,arguments)}))}return Object.defineProperty(t,Ee,{value:e}),t}(me.close),me.closeSync=function(e){function t(t){e.apply(me,arguments),_e()}return Object.defineProperty(t,Ee,{value:e}),t}(me.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",(function(){Ae(me[pe]),g.default.equal(me[pe].length,0)}))}w[pe]||ge(w,me[pe]);var Se,we=Oe(Ce(me));function Oe(e){he(e),e.gracefulify=Oe,e.createReadStream=function(t,n){return new e.ReadStream(t,n)},e.createWriteStream=function(t,n){return new e.WriteStream(t,n)};var t=e.readFile;e.readFile=function(e,n,r){"function"==typeof n&&(r=n,n=null);return function e(n,r,u,o){return t(n,r,(function(t){!t||"EMFILE"!==t.code&&"ENFILE"!==t.code?"function"==typeof u&&u.apply(this,arguments):be([e,[n,r,u],t,o||Date.now(),Date.now()])}))}(e,n,r)};var n=e.writeFile;e.writeFile=function(e,t,r,u){"function"==typeof r&&(u=r,r=null);return function e(t,r,u,o,i){return n(t,r,u,(function(n){!n||"EMFILE"!==n.code&&"ENFILE"!==n.code?"function"==typeof o&&o.apply(this,arguments):be([e,[t,r,u,o],n,i||Date.now(),Date.now()])}))}(e,t,r,u)};var r=e.appendFile;r&&(e.appendFile=function(e,t,n,u){"function"==typeof n&&(u=n,n=null);return function e(t,n,u,o,i){return r(t,n,u,(function(r){!r||"EMFILE"!==r.code&&"ENFILE"!==r.code?"function"==typeof o&&o.apply(this,arguments):be([e,[t,n,u,o],r,i||Date.now(),Date.now()])}))}(e,t,n,u)});var u=e.copyFile;u&&(e.copyFile=function(e,t,n,r){"function"==typeof n&&(r=n,n=0);return function e(t,n,r,o,i){return u(t,n,r,(function(u){!u||"EMFILE"!==u.code&&"ENFILE"!==u.code?"function"==typeof o&&o.apply(this,arguments):be([e,[t,n,r,o],u,i||Date.now(),Date.now()])}))}(e,t,n,r)});var o=e.readdir;e.readdir=function(e,t,n){"function"==typeof t&&(n=t,t=null);var r=i.test(process.version)?function(e,t,n,r){return o(e,u(e,t,n,r))}:function(e,t,n,r){return o(e,t,u(e,t,n,r))};return r(e,t,n);function u(e,t,n,u){return function(o,i){!o||"EMFILE"!==o.code&&"ENFILE"!==o.code?(i&&i.sort&&i.sort(),"function"==typeof n&&n.call(this,o,i)):be([r,[e,t,n],o,u||Date.now(),Date.now()])}}};var i=/^v[0-5]\./;if("v0.8"===process.version.substr(0,4)){var s=ye(e);d=s.ReadStream,D=s.WriteStream}var c=e.ReadStream;c&&(d.prototype=Object.create(c.prototype),d.prototype.open=function(){var e=this;E(e.path,e.flags,e.mode,(function(t,n){t?(e.autoClose&&e.destroy(),e.emit("error",t)):(e.fd=n,e.emit("open",n),e.read())}))});var a=e.WriteStream;a&&(D.prototype=Object.create(a.prototype),D.prototype.open=function(){var e=this;E(e.path,e.flags,e.mode,(function(t,n){t?(e.destroy(),e.emit("error",t)):(e.fd=n,e.emit("open",n))}))}),Object.defineProperty(e,"ReadStream",{get:function(){return d},set:function(e){d=e},enumerable:!0,configurable:!0}),Object.defineProperty(e,"WriteStream",{get:function(){return D},set:function(e){D=e},enumerable:!0,configurable:!0});var l=d;Object.defineProperty(e,"FileReadStream",{get:function(){return l},set:function(e){l=e},enumerable:!0,configurable:!0});var f=D;function d(e,t){return this instanceof d?(c.apply(this,arguments),this):d.apply(Object.create(d.prototype),arguments)}function D(e,t){return this instanceof D?(a.apply(this,arguments),this):D.apply(Object.create(D.prototype),arguments)}Object.defineProperty(e,"FileWriteStream",{get:function(){return f},set:function(e){f=e},enumerable:!0,configurable:!0});var p=e.open;function E(e,t,n,r){return"function"==typeof n&&(r=n,n=null),function e(t,n,r,u,o){return p(t,n,r,(function(i,s){!i||"EMFILE"!==i.code&&"ENFILE"!==i.code?"function"==typeof u&&u.apply(this,arguments):be([e,[t,n,r,u],i,o||Date.now(),Date.now()])}))}(e,t,n,r)}return e.open=E,e}function be(e){Ae("ENQUEUE",e[0].name,e[1]),me[pe].push(e),Be()}function _e(){for(var e=Date.now(),t=0;t2&&(me[pe][t][3]=e,me[pe][t][4]=e);Be()}function Be(){if(clearTimeout(Se),Se=void 0,0!==me[pe].length){var e=me[pe].shift(),t=e[0],n=e[1],r=e[2],u=e[3],o=e[4];if(void 0===u)Ae("RETRY",t.name,n),t.apply(null,n);else if(Date.now()-u>=6e4){Ae("TIMEOUT",t.name,n);var i=n.pop();"function"==typeof i&&i.call(null,r)}else{var s=Date.now()-o,c=Math.max(o-u,1);s>=Math.min(1.2*c,100)?(Ae("RETRY",t.name,n),t.apply(null,n.concat([u]))):me[pe].push(e)}void 0===Se&&(Se=setTimeout(Be,0))}}process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!me.__patched&&(we=Oe(me),me.__patched=!0),function(e){const t=re.fromCallback,n=we,r=["access","appendFile","chmod","chown","close","copyFile","fchmod","fchown","fdatasync","fstat","fsync","ftruncate","futimes","lchmod","lchown","link","lstat","mkdir","mkdtemp","open","opendir","readdir","readFile","readlink","realpath","rename","rm","rmdir","stat","symlink","truncate","unlink","utimes","writeFile"].filter((e=>"function"==typeof n[e]));Object.assign(e,n),r.forEach((r=>{e[r]=t(n[r])})),e.realpath.native=t(n.realpath.native),e.exists=function(e,t){return"function"==typeof t?n.exists(e,t):new Promise((t=>n.exists(e,t)))},e.read=function(e,t,r,u,o,i){return"function"==typeof i?n.read(e,t,r,u,o,i):new Promise(((i,s)=>{n.read(e,t,r,u,o,((e,t,n)=>{if(e)return s(e);i({bytesRead:t,buffer:n})}))}))},e.write=function(e,t,...r){return"function"==typeof r[r.length-1]?n.write(e,t,...r):new Promise(((u,o)=>{n.write(e,t,...r,((e,t,n)=>{if(e)return o(e);u({bytesWritten:t,buffer:n})}))}))},"function"==typeof n.writev&&(e.writev=function(e,t,...r){return"function"==typeof r[r.length-1]?n.writev(e,t,...r):new Promise(((u,o)=>{n.writev(e,t,...r,((e,t,n)=>{if(e)return o(e);u({bytesWritten:t,buffers:n})}))}))})}(ne);var Pe={},ke={};const xe=p.default;ke.checkPath=function(e){if("win32"===process.platform){if(/[<>:"|?*]/.test(e.replace(xe.parse(e).root,""))){const t=new Error(`Path contains invalid characters: ${e}`);throw t.code="EINVAL",t}}};const Ne=ne,{checkPath:Ie}=ke,Te=e=>"number"==typeof e?e:{mode:511,...e}.mode;Pe.makeDir=async(e,t)=>(Ie(e),Ne.mkdir(e,{mode:Te(t),recursive:!0})),Pe.makeDirSync=(e,t)=>(Ie(e),Ne.mkdirSync(e,{mode:Te(t),recursive:!0}));const Re=re.fromPromise,{makeDir:Me,makeDirSync:Le}=Pe,je=Re(Me);var $e={mkdirs:je,mkdirsSync:Le,mkdirp:je,mkdirpSync:Le,ensureDir:je,ensureDirSync:Le};const He=re.fromPromise,Je=ne;var Ge={pathExists:He((function(e){return Je.access(e).then((()=>!0)).catch((()=>!1))})),pathExistsSync:Je.existsSync};const Ve=we;var Ue=function(e,t,n,r){Ve.open(e,"r+",((e,u)=>{if(e)return r(e);Ve.futimes(u,t,n,(e=>{Ve.close(u,(t=>{r&&r(e||t)}))}))}))},We=function(e,t,n){const r=Ve.openSync(e,"r+");return Ve.futimesSync(r,t,n),Ve.closeSync(r)};const ze=ne,Ke=p.default,qe=F.default;function Ye(e,t,n){const r=n.dereference?e=>ze.stat(e,{bigint:!0}):e=>ze.lstat(e,{bigint:!0});return Promise.all([r(e),r(t).catch((e=>{if("ENOENT"===e.code)return null;throw e}))]).then((([e,t])=>({srcStat:e,destStat:t})))}function Xe(e,t){return t.ino&&t.dev&&t.ino===e.ino&&t.dev===e.dev}function Ze(e,t){const n=Ke.resolve(e).split(Ke.sep).filter((e=>e)),r=Ke.resolve(t).split(Ke.sep).filter((e=>e));return n.reduce(((e,t,n)=>e&&r[n]===t),!0)}function Qe(e,t,n){return`Cannot ${n} '${e}' to a subdirectory of itself, '${t}'.`}var et={checkPaths:function(e,t,n,r,u){qe.callbackify(Ye)(e,t,r,((r,o)=>{if(r)return u(r);const{srcStat:i,destStat:s}=o;if(s){if(Xe(i,s)){const r=Ke.basename(e),o=Ke.basename(t);return"move"===n&&r!==o&&r.toLowerCase()===o.toLowerCase()?u(null,{srcStat:i,destStat:s,isChangingCase:!0}):u(new Error("Source and destination must not be the same."))}if(i.isDirectory()&&!s.isDirectory())return u(new Error(`Cannot overwrite non-directory '${t}' with directory '${e}'.`));if(!i.isDirectory()&&s.isDirectory())return u(new Error(`Cannot overwrite directory '${t}' with non-directory '${e}'.`))}return i.isDirectory()&&Ze(e,t)?u(new Error(Qe(e,t,n))):u(null,{srcStat:i,destStat:s})}))},checkPathsSync:function(e,t,n,r){const{srcStat:u,destStat:o}=function(e,t,n){let r;const u=n.dereference?e=>ze.statSync(e,{bigint:!0}):e=>ze.lstatSync(e,{bigint:!0}),o=u(e);try{r=u(t)}catch(e){if("ENOENT"===e.code)return{srcStat:o,destStat:null};throw e}return{srcStat:o,destStat:r}}(e,t,r);if(o){if(Xe(u,o)){const r=Ke.basename(e),i=Ke.basename(t);if("move"===n&&r!==i&&r.toLowerCase()===i.toLowerCase())return{srcStat:u,destStat:o,isChangingCase:!0};throw new Error("Source and destination must not be the same.")}if(u.isDirectory()&&!o.isDirectory())throw new Error(`Cannot overwrite non-directory '${t}' with directory '${e}'.`);if(!u.isDirectory()&&o.isDirectory())throw new Error(`Cannot overwrite directory '${t}' with non-directory '${e}'.`)}if(u.isDirectory()&&Ze(e,t))throw new Error(Qe(e,t,n));return{srcStat:u,destStat:o}},checkParentPaths:function e(t,n,r,u,o){const i=Ke.resolve(Ke.dirname(t)),s=Ke.resolve(Ke.dirname(r));if(s===i||s===Ke.parse(s).root)return o();ze.stat(s,{bigint:!0},((i,c)=>i?"ENOENT"===i.code?o():o(i):Xe(n,c)?o(new Error(Qe(t,r,u))):e(t,n,s,u,o)))},checkParentPathsSync:function e(t,n,r,u){const o=Ke.resolve(Ke.dirname(t)),i=Ke.resolve(Ke.dirname(r));if(i===o||i===Ke.parse(i).root)return;let s;try{s=ze.statSync(i,{bigint:!0})}catch(e){if("ENOENT"===e.code)return;throw e}if(Xe(n,s))throw new Error(Qe(t,r,u));return e(t,n,i,u)},isSrcSubdir:Ze,areIdentical:Xe};const tt=we,nt=p.default,rt=$e.mkdirs,ut=Ge.pathExists,ot=Ue,it=et;function st(e,t,n,r,u){const o=nt.dirname(n);ut(o,((i,s)=>i?u(i):s?at(e,t,n,r,u):void rt(o,(o=>o?u(o):at(e,t,n,r,u)))))}function ct(e,t,n,r,u,o){Promise.resolve(u.filter(n,r)).then((i=>i?e(t,n,r,u,o):o()),(e=>o(e)))}function at(e,t,n,r,u){(r.dereference?tt.stat:tt.lstat)(t,((o,i)=>o?u(o):i.isDirectory()?function(e,t,n,r,u,o){return t?Dt(n,r,u,o):function(e,t,n,r,u){tt.mkdir(n,(o=>{if(o)return u(o);Dt(t,n,r,(t=>t?u(t):dt(n,e,u)))}))}(e.mode,n,r,u,o)}(i,e,t,n,r,u):i.isFile()||i.isCharacterDevice()||i.isBlockDevice()?function(e,t,n,r,u,o){return t?function(e,t,n,r,u){if(!r.overwrite)return r.errorOnExist?u(new Error(`'${n}' already exists`)):u();tt.unlink(n,(o=>o?u(o):lt(e,t,n,r,u)))}(e,n,r,u,o):lt(e,n,r,u,o)}(i,e,t,n,r,u):i.isSymbolicLink()?function(e,t,n,r,u){tt.readlink(t,((t,o)=>t?u(t):(r.dereference&&(o=nt.resolve(process.cwd(),o)),e?void tt.readlink(n,((t,i)=>t?"EINVAL"===t.code||"UNKNOWN"===t.code?tt.symlink(o,n,u):u(t):(r.dereference&&(i=nt.resolve(process.cwd(),i)),it.isSrcSubdir(o,i)?u(new Error(`Cannot copy '${o}' to a subdirectory of itself, '${i}'.`)):e.isDirectory()&&it.isSrcSubdir(i,o)?u(new Error(`Cannot overwrite '${i}' with '${o}'.`)):function(e,t,n){tt.unlink(t,(r=>r?n(r):tt.symlink(e,t,n)))}(o,n,u)))):tt.symlink(o,n,u))))}(e,t,n,r,u):i.isSocket()?u(new Error(`Cannot copy a socket file: ${t}`)):i.isFIFO()?u(new Error(`Cannot copy a FIFO pipe: ${t}`)):u(new Error(`Unknown file: ${t}`))))}function lt(e,t,n,r,u){tt.copyFile(t,n,(o=>o?u(o):r.preserveTimestamps?function(e,t,n,r){if(function(e){return 0==(128&e)}(e))return function(e,t,n){return dt(e,128|t,n)}(n,e,(u=>u?r(u):ft(e,t,n,r)));return ft(e,t,n,r)}(e.mode,t,n,u):dt(n,e.mode,u)))}function ft(e,t,n,r){!function(e,t,n){tt.stat(e,((e,r)=>e?n(e):ot(t,r.atime,r.mtime,n)))}(t,n,(t=>t?r(t):dt(n,e,r)))}function dt(e,t,n){return tt.chmod(e,t,n)}function Dt(e,t,n,r){tt.readdir(e,((u,o)=>u?r(u):pt(o,e,t,n,r)))}function pt(e,t,n,r,u){const o=e.pop();return o?function(e,t,n,r,u,o){const i=nt.join(n,t),s=nt.join(r,t);it.checkPaths(i,s,"copy",u,((t,c)=>{if(t)return o(t);const{destStat:a}=c;!function(e,t,n,r,u){r.filter?ct(at,e,t,n,r,u):at(e,t,n,r,u)}(a,i,s,u,(t=>t?o(t):pt(e,n,r,u,o)))}))}(e,o,t,n,r,u):u()}var Et=function(e,t,n,r){"function"!=typeof n||r?"function"==typeof n&&(n={filter:n}):(r=n,n={}),r=r||function(){},(n=n||{}).clobber=!("clobber"in n)||!!n.clobber,n.overwrite="overwrite"in n?!!n.overwrite:n.clobber,n.preserveTimestamps&&"ia32"===process.arch&&console.warn("fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n\n see https://github.com/jprichardson/node-fs-extra/issues/269"),it.checkPaths(e,t,"copy",n,((u,o)=>{if(u)return r(u);const{srcStat:i,destStat:s}=o;it.checkParentPaths(e,i,t,"copy",(u=>u?r(u):n.filter?ct(st,s,e,t,n,r):st(s,e,t,n,r)))}))};const mt=we,ht=p.default,yt=$e.mkdirsSync,Ct=We,Ft=et;function gt(e,t,n,r){const u=(r.dereference?mt.statSync:mt.lstatSync)(t);if(u.isDirectory())return function(e,t,n,r,u){return t?St(n,r,u):function(e,t,n,r){return mt.mkdirSync(n),St(t,n,r),vt(n,e)}(e.mode,n,r,u)}(u,e,t,n,r);if(u.isFile()||u.isCharacterDevice()||u.isBlockDevice())return function(e,t,n,r,u){return t?function(e,t,n,r){if(r.overwrite)return mt.unlinkSync(n),At(e,t,n,r);if(r.errorOnExist)throw new Error(`'${n}' already exists`)}(e,n,r,u):At(e,n,r,u)}(u,e,t,n,r);if(u.isSymbolicLink())return function(e,t,n,r){let u=mt.readlinkSync(t);r.dereference&&(u=ht.resolve(process.cwd(),u));if(e){let e;try{e=mt.readlinkSync(n)}catch(e){if("EINVAL"===e.code||"UNKNOWN"===e.code)return mt.symlinkSync(u,n);throw e}if(r.dereference&&(e=ht.resolve(process.cwd(),e)),Ft.isSrcSubdir(u,e))throw new Error(`Cannot copy '${u}' to a subdirectory of itself, '${e}'.`);if(mt.statSync(n).isDirectory()&&Ft.isSrcSubdir(e,u))throw new Error(`Cannot overwrite '${e}' with '${u}'.`);return function(e,t){return mt.unlinkSync(t),mt.symlinkSync(e,t)}(u,n)}return mt.symlinkSync(u,n)}(e,t,n,r);if(u.isSocket())throw new Error(`Cannot copy a socket file: ${t}`);if(u.isFIFO())throw new Error(`Cannot copy a FIFO pipe: ${t}`);throw new Error(`Unknown file: ${t}`)}function At(e,t,n,r){return mt.copyFileSync(t,n),r.preserveTimestamps&&function(e,t,n){(function(e){return 0==(128&e)})(e)&&function(e,t){vt(e,128|t)}(n,e);(function(e,t){const n=mt.statSync(e);Ct(t,n.atime,n.mtime)})(t,n)}(e.mode,t,n),vt(n,e.mode)}function vt(e,t){return mt.chmodSync(e,t)}function St(e,t,n){mt.readdirSync(e).forEach((r=>function(e,t,n,r){const u=ht.join(t,e),o=ht.join(n,e),{destStat:i}=Ft.checkPathsSync(u,o,"copy",r);return function(e,t,n,r){if(!r.filter||r.filter(t,n))return gt(e,t,n,r)}(i,u,o,r)}(r,e,t,n)))}var wt=function(e,t,n){"function"==typeof n&&(n={filter:n}),(n=n||{}).clobber=!("clobber"in n)||!!n.clobber,n.overwrite="overwrite"in n?!!n.overwrite:n.clobber,n.preserveTimestamps&&"ia32"===process.arch&&console.warn("fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n\n see https://github.com/jprichardson/node-fs-extra/issues/269");const{srcStat:r,destStat:u}=Ft.checkPathsSync(e,t,"copy",n);return Ft.checkParentPathsSync(e,r,t,"copy"),function(e,t,n,r){if(r.filter&&!r.filter(t,n))return;const u=ht.dirname(n);mt.existsSync(u)||yt(u);return gt(e,t,n,r)}(u,e,t,n)};var Ot={copy:(0,re.fromCallback)(Et),copySync:wt};const bt=we,_t=p.default,Bt=g.default,Pt="win32"===process.platform;function kt(e){["unlink","chmod","stat","lstat","rmdir","readdir"].forEach((t=>{e[t]=e[t]||bt[t],e[t+="Sync"]=e[t]||bt[t]})),e.maxBusyTries=e.maxBusyTries||3}function xt(e,t,n){let r=0;"function"==typeof t&&(n=t,t={}),Bt(e,"rimraf: missing path"),Bt.strictEqual(typeof e,"string","rimraf: path should be a string"),Bt.strictEqual(typeof n,"function","rimraf: callback function required"),Bt(t,"rimraf: invalid options argument provided"),Bt.strictEqual(typeof t,"object","rimraf: options should be object"),kt(t),Nt(e,t,(function u(o){if(o){if(("EBUSY"===o.code||"ENOTEMPTY"===o.code||"EPERM"===o.code)&&rNt(e,t,u)),100*r)}"ENOENT"===o.code&&(o=null)}n(o)}))}function Nt(e,t,n){Bt(e),Bt(t),Bt("function"==typeof n),t.lstat(e,((r,u)=>r&&"ENOENT"===r.code?n(null):r&&"EPERM"===r.code&&Pt?It(e,t,r,n):u&&u.isDirectory()?Rt(e,t,r,n):void t.unlink(e,(r=>{if(r){if("ENOENT"===r.code)return n(null);if("EPERM"===r.code)return Pt?It(e,t,r,n):Rt(e,t,r,n);if("EISDIR"===r.code)return Rt(e,t,r,n)}return n(r)}))))}function It(e,t,n,r){Bt(e),Bt(t),Bt("function"==typeof r),t.chmod(e,438,(u=>{u?r("ENOENT"===u.code?null:n):t.stat(e,((u,o)=>{u?r("ENOENT"===u.code?null:n):o.isDirectory()?Rt(e,t,n,r):t.unlink(e,r)}))}))}function Tt(e,t,n){let r;Bt(e),Bt(t);try{t.chmodSync(e,438)}catch(e){if("ENOENT"===e.code)return;throw n}try{r=t.statSync(e)}catch(e){if("ENOENT"===e.code)return;throw n}r.isDirectory()?Lt(e,t,n):t.unlinkSync(e)}function Rt(e,t,n,r){Bt(e),Bt(t),Bt("function"==typeof r),t.rmdir(e,(u=>{!u||"ENOTEMPTY"!==u.code&&"EEXIST"!==u.code&&"EPERM"!==u.code?u&&"ENOTDIR"===u.code?r(n):r(u):function(e,t,n){Bt(e),Bt(t),Bt("function"==typeof n),t.readdir(e,((r,u)=>{if(r)return n(r);let o,i=u.length;if(0===i)return t.rmdir(e,n);u.forEach((r=>{xt(_t.join(e,r),t,(r=>{if(!o)return r?n(o=r):void(0==--i&&t.rmdir(e,n))}))}))}))}(e,t,r)}))}function Mt(e,t){let n;kt(t=t||{}),Bt(e,"rimraf: missing path"),Bt.strictEqual(typeof e,"string","rimraf: path should be a string"),Bt(t,"rimraf: missing options"),Bt.strictEqual(typeof t,"object","rimraf: options should be object");try{n=t.lstatSync(e)}catch(n){if("ENOENT"===n.code)return;"EPERM"===n.code&&Pt&&Tt(e,t,n)}try{n&&n.isDirectory()?Lt(e,t,null):t.unlinkSync(e)}catch(n){if("ENOENT"===n.code)return;if("EPERM"===n.code)return Pt?Tt(e,t,n):Lt(e,t,n);if("EISDIR"!==n.code)throw n;Lt(e,t,n)}}function Lt(e,t,n){Bt(e),Bt(t);try{t.rmdirSync(e)}catch(r){if("ENOTDIR"===r.code)throw n;if("ENOTEMPTY"===r.code||"EEXIST"===r.code||"EPERM"===r.code)!function(e,t){if(Bt(e),Bt(t),t.readdirSync(e).forEach((n=>Mt(_t.join(e,n),t))),!Pt){return t.rmdirSync(e,t)}{const n=Date.now();do{try{return t.rmdirSync(e,t)}catch{}}while(Date.now()-n<500)}}(e,t);else if("ENOENT"!==r.code)throw r}}var jt=xt;xt.sync=Mt;const $t=we,Ht=re.fromCallback,Jt=jt;var Gt={remove:Ht((function(e,t){if($t.rm)return $t.rm(e,{recursive:!0,force:!0},t);Jt(e,t)})),removeSync:function(e){if($t.rmSync)return $t.rmSync(e,{recursive:!0,force:!0});Jt.sync(e)}};const Vt=re.fromPromise,Ut=ne,Wt=p.default,zt=$e,Kt=Gt,qt=Vt((async function(e){let t;try{t=await Ut.readdir(e)}catch{return zt.mkdirs(e)}return Promise.all(t.map((t=>Kt.remove(Wt.join(e,t)))))}));function Yt(e){let t;try{t=Ut.readdirSync(e)}catch{return zt.mkdirsSync(e)}t.forEach((t=>{t=Wt.join(e,t),Kt.removeSync(t)}))}var Xt={emptyDirSync:Yt,emptydirSync:Yt,emptyDir:qt,emptydir:qt};const Zt=re.fromCallback,Qt=p.default,en=we,tn=$e;var nn={createFile:Zt((function(e,t){function n(){en.writeFile(e,"",(e=>{if(e)return t(e);t()}))}en.stat(e,((r,u)=>{if(!r&&u.isFile())return t();const o=Qt.dirname(e);en.stat(o,((e,r)=>{if(e)return"ENOENT"===e.code?tn.mkdirs(o,(e=>{if(e)return t(e);n()})):t(e);r.isDirectory()?n():en.readdir(o,(e=>{if(e)return t(e)}))}))}))})),createFileSync:function(e){let t;try{t=en.statSync(e)}catch{}if(t&&t.isFile())return;const n=Qt.dirname(e);try{en.statSync(n).isDirectory()||en.readdirSync(n)}catch(e){if(!e||"ENOENT"!==e.code)throw e;tn.mkdirsSync(n)}en.writeFileSync(e,"")}};const rn=re.fromCallback,un=p.default,on=we,sn=$e,cn=Ge.pathExists,{areIdentical:an}=et;var ln={createLink:rn((function(e,t,n){function r(e,t){on.link(e,t,(e=>{if(e)return n(e);n(null)}))}on.lstat(t,((u,o)=>{on.lstat(e,((u,i)=>{if(u)return u.message=u.message.replace("lstat","ensureLink"),n(u);if(o&&an(i,o))return n(null);const s=un.dirname(t);cn(s,((u,o)=>u?n(u):o?r(e,t):void sn.mkdirs(s,(u=>{if(u)return n(u);r(e,t)}))))}))}))})),createLinkSync:function(e,t){let n;try{n=on.lstatSync(t)}catch{}try{const t=on.lstatSync(e);if(n&&an(t,n))return}catch(e){throw e.message=e.message.replace("lstat","ensureLink"),e}const r=un.dirname(t);return on.existsSync(r)||sn.mkdirsSync(r),on.linkSync(e,t)}};const fn=p.default,dn=we,Dn=Ge.pathExists;var pn={symlinkPaths:function(e,t,n){if(fn.isAbsolute(e))return dn.lstat(e,(t=>t?(t.message=t.message.replace("lstat","ensureSymlink"),n(t)):n(null,{toCwd:e,toDst:e})));{const r=fn.dirname(t),u=fn.join(r,e);return Dn(u,((t,o)=>t?n(t):o?n(null,{toCwd:u,toDst:e}):dn.lstat(e,(t=>t?(t.message=t.message.replace("lstat","ensureSymlink"),n(t)):n(null,{toCwd:e,toDst:fn.relative(r,e)})))))}},symlinkPathsSync:function(e,t){let n;if(fn.isAbsolute(e)){if(n=dn.existsSync(e),!n)throw new Error("absolute srcpath does not exist");return{toCwd:e,toDst:e}}{const r=fn.dirname(t),u=fn.join(r,e);if(n=dn.existsSync(u),n)return{toCwd:u,toDst:e};if(n=dn.existsSync(e),!n)throw new Error("relative srcpath does not exist");return{toCwd:e,toDst:fn.relative(r,e)}}}};const En=we;var mn={symlinkType:function(e,t,n){if(n="function"==typeof t?t:n,t="function"!=typeof t&&t)return n(null,t);En.lstat(e,((e,r)=>{if(e)return n(null,"file");t=r&&r.isDirectory()?"dir":"file",n(null,t)}))},symlinkTypeSync:function(e,t){let n;if(t)return t;try{n=En.lstatSync(e)}catch{return"file"}return n&&n.isDirectory()?"dir":"file"}};const hn=re.fromCallback,yn=p.default,Cn=ne,Fn=$e.mkdirs,gn=$e.mkdirsSync,An=pn.symlinkPaths,vn=pn.symlinkPathsSync,Sn=mn.symlinkType,wn=mn.symlinkTypeSync,On=Ge.pathExists,{areIdentical:bn}=et;function _n(e,t,n,r){An(e,t,((u,o)=>{if(u)return r(u);e=o.toDst,Sn(o.toCwd,n,((n,u)=>{if(n)return r(n);const o=yn.dirname(t);On(o,((n,i)=>n?r(n):i?Cn.symlink(e,t,u,r):void Fn(o,(n=>{if(n)return r(n);Cn.symlink(e,t,u,r)}))))}))}))}var Bn={createSymlink:hn((function(e,t,n,r){r="function"==typeof n?n:r,n="function"!=typeof n&&n,Cn.lstat(t,((u,o)=>{!u&&o.isSymbolicLink()?Promise.all([Cn.stat(e),Cn.stat(t)]).then((([u,o])=>{if(bn(u,o))return r(null);_n(e,t,n,r)})):_n(e,t,n,r)}))})),createSymlinkSync:function(e,t,n){let r;try{r=Cn.lstatSync(t)}catch{}if(r&&r.isSymbolicLink()){const n=Cn.statSync(e),r=Cn.statSync(t);if(bn(n,r))return}const u=vn(e,t);e=u.toDst,n=wn(u.toCwd,n);const o=yn.dirname(t);return Cn.existsSync(o)||gn(o),Cn.symlinkSync(e,t,n)}};const{createFile:Pn,createFileSync:kn}=nn,{createLink:xn,createLinkSync:Nn}=ln,{createSymlink:In,createSymlinkSync:Tn}=Bn;var Rn={createFile:Pn,createFileSync:kn,ensureFile:Pn,ensureFileSync:kn,createLink:xn,createLinkSync:Nn,ensureLink:xn,ensureLinkSync:Nn,createSymlink:In,createSymlinkSync:Tn,ensureSymlink:In,ensureSymlinkSync:Tn};var Mn={stringify:function(e,{EOL:t="\n",finalEOL:n=!0,replacer:r=null,spaces:u}={}){const o=n?t:"";return JSON.stringify(e,r,u).replace(/\n/g,t)+o},stripBom:function(e){return Buffer.isBuffer(e)&&(e=e.toString("utf8")),e.replace(/^\uFEFF/,"")}};let Ln;try{Ln=we}catch(e){Ln=D.default}const jn=re,{stringify:$n,stripBom:Hn}=Mn;const Jn=jn.fromPromise((async function(e,t={}){"string"==typeof t&&(t={encoding:t});const n=t.fs||Ln,r=!("throws"in t)||t.throws;let u,o=await jn.fromCallback(n.readFile)(e,t);o=Hn(o);try{u=JSON.parse(o,t?t.reviver:null)}catch(t){if(r)throw t.message=`${e}: ${t.message}`,t;return null}return u}));const Gn=jn.fromPromise((async function(e,t,n={}){const r=n.fs||Ln,u=$n(t,n);await jn.fromCallback(r.writeFile)(e,u,n)}));const Vn={readFile:Jn,readFileSync:function(e,t={}){"string"==typeof t&&(t={encoding:t});const n=t.fs||Ln,r=!("throws"in t)||t.throws;try{let r=n.readFileSync(e,t);return r=Hn(r),JSON.parse(r,t.reviver)}catch(t){if(r)throw t.message=`${e}: ${t.message}`,t;return null}},writeFile:Gn,writeFileSync:function(e,t,n={}){const r=n.fs||Ln,u=$n(t,n);return r.writeFileSync(e,u,n)}};var Un={readJson:Vn.readFile,readJsonSync:Vn.readFileSync,writeJson:Vn.writeFile,writeJsonSync:Vn.writeFileSync};const Wn=re.fromCallback,zn=we,Kn=p.default,qn=$e,Yn=Ge.pathExists;var Xn={outputFile:Wn((function(e,t,n,r){"function"==typeof n&&(r=n,n="utf8");const u=Kn.dirname(e);Yn(u,((o,i)=>o?r(o):i?zn.writeFile(e,t,n,r):void qn.mkdirs(u,(u=>{if(u)return r(u);zn.writeFile(e,t,n,r)}))))})),outputFileSync:function(e,...t){const n=Kn.dirname(e);if(zn.existsSync(n))return zn.writeFileSync(e,...t);qn.mkdirsSync(n),zn.writeFileSync(e,...t)}};const{stringify:Zn}=Mn,{outputFile:Qn}=Xn;var er=async function(e,t,n={}){const r=Zn(t,n);await Qn(e,r,n)};const{stringify:tr}=Mn,{outputFileSync:nr}=Xn;var rr=function(e,t,n){const r=tr(t,n);nr(e,r,n)};const ur=re.fromPromise,or=Un;or.outputJson=ur(er),or.outputJsonSync=rr,or.outputJSON=or.outputJson,or.outputJSONSync=or.outputJsonSync,or.writeJSON=or.writeJson,or.writeJSONSync=or.writeJsonSync,or.readJSON=or.readJson,or.readJSONSync=or.readJsonSync;var ir=or;const sr=we,cr=p.default,ar=Ot.copy,lr=Gt.remove,fr=$e.mkdirp,dr=Ge.pathExists,Dr=et;function pr(e,t,n,r,u){return r?Er(e,t,n,u):n?lr(t,(r=>r?u(r):Er(e,t,n,u))):void dr(t,((r,o)=>r?u(r):o?u(new Error("dest already exists.")):Er(e,t,n,u)))}function Er(e,t,n,r){sr.rename(e,t,(u=>u?"EXDEV"!==u.code?r(u):function(e,t,n,r){const u={overwrite:n,errorOnExist:!0};ar(e,t,u,(t=>t?r(t):lr(e,r)))}(e,t,n,r):r()))}var mr=function(e,t,n,r){"function"==typeof n&&(r=n,n={});const u=n.overwrite||n.clobber||!1;Dr.checkPaths(e,t,"move",n,((n,o)=>{if(n)return r(n);const{srcStat:i,isChangingCase:s=!1}=o;Dr.checkParentPaths(e,i,t,"move",(n=>n?r(n):function(e){const t=cr.dirname(e);return cr.parse(t).root===t}(t)?pr(e,t,u,s,r):void fr(cr.dirname(t),(n=>n?r(n):pr(e,t,u,s,r)))))}))};const hr=we,yr=p.default,Cr=Ot.copySync,Fr=Gt.removeSync,gr=$e.mkdirpSync,Ar=et;function vr(e,t,n){try{hr.renameSync(e,t)}catch(r){if("EXDEV"!==r.code)throw r;return function(e,t,n){const r={overwrite:n,errorOnExist:!0};return Cr(e,t,r),Fr(e)}(e,t,n)}}var Sr=function(e,t,n){const r=(n=n||{}).overwrite||n.clobber||!1,{srcStat:u,isChangingCase:o=!1}=Ar.checkPathsSync(e,t,"move",n);return Ar.checkParentPathsSync(e,u,t,"move"),function(e){const t=yr.dirname(e);return yr.parse(t).root===t}(t)||gr(yr.dirname(t)),function(e,t,n,r){if(r)return vr(e,t,n);if(n)return Fr(t),vr(e,t,n);if(hr.existsSync(t))throw new Error("dest already exists.");return vr(e,t,n)}(e,t,r,o)};var wr,Or,br,_r,Br,Pr={move:(0,re.fromCallback)(mr),moveSync:Sr},kr={...ne,...Ot,...Xt,...Rn,...ir,...$e,...Pr,...Xn,...Ge,...Gt},xr={},Nr={exports:{}},Ir={exports:{}};function Tr(){if(Or)return wr;Or=1;var e=1e3,t=60*e,n=60*t,r=24*n,u=7*r,o=365.25*r;function i(e,t,n,r){var u=t>=1.5*n;return Math.round(e/n)+" "+r+(u?"s":"")}return wr=function(s,c){c=c||{};var a=typeof s;if("string"===a&&s.length>0)return function(i){if((i=String(i)).length>100)return;var s=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(i);if(!s)return;var c=parseFloat(s[1]);switch((s[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return c*o;case"weeks":case"week":case"w":return c*u;case"days":case"day":case"d":return c*r;case"hours":case"hour":case"hrs":case"hr":case"h":return c*n;case"minutes":case"minute":case"mins":case"min":case"m":return c*t;case"seconds":case"second":case"secs":case"sec":case"s":return c*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}(s);if("number"===a&&isFinite(s))return c.long?function(u){var o=Math.abs(u);if(o>=r)return i(u,o,r,"day");if(o>=n)return i(u,o,n,"hour");if(o>=t)return i(u,o,t,"minute");if(o>=e)return i(u,o,e,"second");return u+" ms"}(s):function(u){var o=Math.abs(u);if(o>=r)return Math.round(u/r)+"d";if(o>=n)return Math.round(u/n)+"h";if(o>=t)return Math.round(u/t)+"m";if(o>=e)return Math.round(u/e)+"s";return u+"ms"}(s);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(s))}}function Rr(){if(_r)return br;return _r=1,br=function(e){function t(e){let r,u,o,i=null;function s(...e){if(!s.enabled)return;const n=s,u=Number(new Date),o=u-(r||u);n.diff=o,n.prev=r,n.curr=u,r=u,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let i=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((r,u)=>{if("%%"===r)return"%";i++;const o=t.formatters[u];if("function"==typeof o){const t=e[i];r=o.call(n,t),e.splice(i,1),i--}return r})),t.formatArgs.call(n,e);(n.log||t.log).apply(n,e)}return s.namespace=e,s.useColors=t.useColors(),s.color=t.selectColor(e),s.extend=n,s.destroy=t.destroy,Object.defineProperty(s,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==i?i:(u!==t.namespaces&&(u=t.namespaces,o=t.enabled(e)),o),set:e=>{i=e}}),"function"==typeof t.init&&t.init(s),s}function n(e,n){const r=t(this.namespace+(void 0===n?":":n)+e);return r.log=this.log,r}function r(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){if(e instanceof Error)return e.stack||e.message;return e},t.disable=function(){const e=[...t.names.map(r),...t.skips.map(r).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){let n;t.save(e),t.namespaces=e,t.names=[],t.skips=[];const r=("string"==typeof e?e:"").split(/[\s,]+/),u=r.length;for(n=0;n{t[n]=e[n]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let n=0;for(let t=0;t{const n=e.startsWith("-")?"":1===e.length?"-":"--",r=t.indexOf(n+e),u=t.indexOf("--");return-1!==r&&(-1===u||r{}),"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),t.colors=[6,2,3,4,5,1];try{const e=function(){if($r)return jr;$r=1;const e=E.default,t=A.default,n=Vr(),{env:r}=process;let u;function o(e){return 0!==e&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function i(t,o){if(0===u)return 0;if(n("color=16m")||n("color=full")||n("color=truecolor"))return 3;if(n("color=256"))return 2;if(t&&!o&&void 0===u)return 0;const i=u||0;if("dumb"===r.TERM)return i;if("win32"===process.platform){const t=e.release().split(".");return Number(t[0])>=10&&Number(t[2])>=10586?Number(t[2])>=14931?3:2:1}if("CI"in r)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some((e=>e in r))||"codeship"===r.CI_NAME?1:i;if("TEAMCITY_VERSION"in r)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(r.TEAMCITY_VERSION)?1:0;if("truecolor"===r.COLORTERM)return 3;if("TERM_PROGRAM"in r){const e=parseInt((r.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(r.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(r.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(r.TERM)||"COLORTERM"in r?1:i}return n("no-color")||n("no-colors")||n("color=false")||n("color=never")?u=0:(n("color")||n("colors")||n("color=true")||n("color=always"))&&(u=1),"FORCE_COLOR"in r&&(u="true"===r.FORCE_COLOR?1:"false"===r.FORCE_COLOR?0:0===r.FORCE_COLOR.length?1:Math.min(parseInt(r.FORCE_COLOR,10),3)),jr={supportsColor:function(e){return o(i(e,e&&e.isTTY))},stdout:o(i(!0,t.isatty(1))),stderr:o(i(!0,t.isatty(2)))}}();e&&(e.stderr||e).level>=2&&(t.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch(e){}t.inspectOpts=Object.keys(process.env).filter((e=>/^debug_/i.test(e))).reduce(((e,t)=>{const n=t.substring(6).toLowerCase().replace(/_([a-z])/g,((e,t)=>t.toUpperCase()));let r=process.env[t];return r=!!/^(yes|on|true|enabled)$/i.test(r)||!/^(no|off|false|disabled)$/i.test(r)&&("null"===r?null:Number(r)),e[n]=r,e}),{}),e.exports=Rr()(t);const{formatters:u}=e.exports;u.o=function(e){return this.inspectOpts.colors=this.useColors,r.inspect(e,this.inspectOpts).split("\n").map((e=>e.trim())).join(" ")},u.O=function(e){return this.inspectOpts.colors=this.useColors,r.inspect(e,this.inspectOpts)}}(Gr,Gr.exports)),Gr.exports}Jr=Nr,"undefined"==typeof process||"renderer"===process.type||!0===process.browser||process.__nwjs?Jr.exports=(Br||(Br=1,function(e,t){t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const n="color: "+this.color;t.splice(1,0,n,"color: inherit");let r=0,u=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(r++,"%c"===e&&(u=r))})),t.splice(u,0,n)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e},t.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=Rr()(t);const{formatters:n}=e.exports;n.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}(Ir,Ir.exports)),Ir.exports):Jr.exports=Ur();var Wr=function(e){return(e=e||{}).circles?function(e){var t=[],n=[];return e.proto?function e(u){if("object"!=typeof u||null===u)return u;if(u instanceof Date)return new Date(u);if(Array.isArray(u))return r(u,e);if(u instanceof Map)return new Map(r(Array.from(u),e));if(u instanceof Set)return new Set(r(Array.from(u),e));var o={};for(var i in t.push(u),n.push(o),u){var s=u[i];if("object"!=typeof s||null===s)o[i]=s;else if(s instanceof Date)o[i]=new Date(s);else if(s instanceof Map)o[i]=new Map(r(Array.from(s),e));else if(s instanceof Set)o[i]=new Set(r(Array.from(s),e));else if(ArrayBuffer.isView(s))o[i]=zr(s);else{var c=t.indexOf(s);o[i]=-1!==c?n[c]:e(s)}}return t.pop(),n.pop(),o}:function e(u){if("object"!=typeof u||null===u)return u;if(u instanceof Date)return new Date(u);if(Array.isArray(u))return r(u,e);if(u instanceof Map)return new Map(r(Array.from(u),e));if(u instanceof Set)return new Set(r(Array.from(u),e));var o={};for(var i in t.push(u),n.push(o),u)if(!1!==Object.hasOwnProperty.call(u,i)){var s=u[i];if("object"!=typeof s||null===s)o[i]=s;else if(s instanceof Date)o[i]=new Date(s);else if(s instanceof Map)o[i]=new Map(r(Array.from(s),e));else if(s instanceof Set)o[i]=new Set(r(Array.from(s),e));else if(ArrayBuffer.isView(s))o[i]=zr(s);else{var c=t.indexOf(s);o[i]=-1!==c?n[c]:e(s)}}return t.pop(),n.pop(),o};function r(e,r){for(var u=Object.keys(e),o=new Array(u.length),i=0;i!e,Qr=e=>e&&"object"==typeof e&&!Array.isArray(e),eu=(e,t,n)=>{(Array.isArray(t)?t:[t]).forEach((t=>{if(t)throw new Error(`Problem with log4js configuration: (${Kr.inspect(e,{depth:5})}) - ${n}`)}))};var tu={configure:e=>{qr("New configuration to be validated: ",e),eu(e,Zr(Qr(e)),"must be an object."),qr(`Calling pre-processing listeners (${Yr.length})`),Yr.forEach((t=>t(e))),qr("Configuration pre-processing finished."),qr(`Calling configuration listeners (${Xr.length})`),Xr.forEach((t=>t(e))),qr("Configuration finished.")},addListener:e=>{Xr.push(e),qr(`Added listener, now ${Xr.length} listeners`)},addPreProcessingListener:e=>{Yr.push(e),qr(`Added pre-processing listener, now ${Yr.length} listeners`)},throwExceptionIf:eu,anObject:Qr,anInteger:e=>e&&"number"==typeof e&&Number.isInteger(e),validIdentifier:e=>/^[A-Za-z][A-Za-z0-9_]*$/g.test(e),not:Zr},nu={exports:{}};!function(e){function t(e,t){for(var n=e.toString();n.length-1?s:c,l=n(u.getHours()),f=n(u.getMinutes()),d=n(u.getSeconds()),D=t(u.getMilliseconds(),3),p=function(e){var t=Math.abs(e),n=String(Math.floor(t/60)),r=String(t%60);return n=("0"+n).slice(-2),r=("0"+r).slice(-2),0===e?"Z":(e<0?"+":"-")+n+":"+r}(u.getTimezoneOffset());return r.replace(/dd/g,o).replace(/MM/g,i).replace(/y{1,4}/g,a).replace(/hh/g,l).replace(/mm/g,f).replace(/ss/g,d).replace(/SSS/g,D).replace(/O/g,p)}function u(e,t,n,r){e["set"+(r?"":"UTC")+t](n)}e.exports=r,e.exports.asString=r,e.exports.parse=function(t,n,r){if(!t)throw new Error("pattern must be supplied");return function(t,n,r){var o=t.indexOf("O")<0,i=!1,s=[{pattern:/y{1,4}/,regexp:"\\d{1,4}",fn:function(e,t){u(e,"FullYear",t,o)}},{pattern:/MM/,regexp:"\\d{1,2}",fn:function(e,t){u(e,"Month",t-1,o),e.getMonth()!==t-1&&(i=!0)}},{pattern:/dd/,regexp:"\\d{1,2}",fn:function(e,t){i&&u(e,"Month",e.getMonth()-1,o),u(e,"Date",t,o)}},{pattern:/hh/,regexp:"\\d{1,2}",fn:function(e,t){u(e,"Hours",t,o)}},{pattern:/mm/,regexp:"\\d\\d",fn:function(e,t){u(e,"Minutes",t,o)}},{pattern:/ss/,regexp:"\\d\\d",fn:function(e,t){u(e,"Seconds",t,o)}},{pattern:/SSS/,regexp:"\\d\\d\\d",fn:function(e,t){u(e,"Milliseconds",t,o)}},{pattern:/O/,regexp:"[+-]\\d{1,2}:?\\d{2}?|Z",fn:function(e,t){t="Z"===t?0:t.replace(":","");var n=Math.abs(t),r=(t>0?-1:1)*(n%100+60*Math.floor(n/100));e.setUTCMinutes(e.getUTCMinutes()+r)}}],c=s.reduce((function(e,t){return t.pattern.test(e.regexp)?(t.index=e.regexp.match(t.pattern).index,e.regexp=e.regexp.replace(t.pattern,"("+t.regexp+")")):t.index=-1,e}),{regexp:t,index:[]}),a=s.filter((function(e){return e.index>-1}));a.sort((function(e,t){return e.index-t.index}));var l=new RegExp(c.regexp).exec(n);if(l){var f=r||e.exports.now();return a.forEach((function(e,t){e.fn(f,l[t+1])})),f}throw new Error("String '"+n+"' could not be parsed as '"+t+"'")}(t,n,r)},e.exports.now=function(){return new Date},e.exports.ISO8601_FORMAT="yyyy-MM-ddThh:mm:ss.SSS",e.exports.ISO8601_WITH_TZ_OFFSET_FORMAT="yyyy-MM-ddThh:mm:ss.SSSO",e.exports.DATETIME_FORMAT="dd MM yyyy hh:mm:ss.SSS",e.exports.ABSOLUTETIME_FORMAT="hh:mm:ss.SSS"}(nu);const ru=nu.exports,uu=E.default,ou=F.default,iu=p.default,su={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[90,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[91,39],yellow:[33,39]};function cu(e){return e?`[${su[e][0]}m`:""}function au(e){return e?`[${su[e][1]}m`:""}function lu(e,t){return n=ou.format("[%s] [%s] %s - ",ru.asString(e.startTime),e.level.toString(),e.categoryName),cu(r=t)+n+au(r);var n,r}function fu(e){return lu(e)+ou.format(...e.data)}function du(e){return lu(e,e.level.colour)+ou.format(...e.data)}function Du(e){return ou.format(...e.data)}function pu(e){return e.data[0]}function Eu(e,t){const n=/%(-?[0-9]+)?(\.?-?[0-9]+)?([[\]cdhmnprzxXyflos%])(\{([^}]+)\})?|([^%]+)/;function r(e){return e&&e.pid?e.pid.toString():process.pid.toString()}e=e||"%r %p %c - %m%n";const u={c:function(e,t){let n=e.categoryName;if(t){const e=parseInt(t,10),r=n.split(".");ee&&(n=r.slice(-e).join(iu.sep))}return n},l:function(e){return e.lineNumber?`${e.lineNumber}`:""},o:function(e){return e.columnNumber?`${e.columnNumber}`:""},s:function(e){return e.callStack||""}};function o(e,t,n){return u[e](t,n)}function i(e,t,n){let r=e;return r=function(e,t){let n;return e?(n=parseInt(e.substr(1),10),n>0?t.slice(0,n):t.slice(n)):t}(t,r),r=function(e,t){let n;if(e)if("-"===e.charAt(0))for(n=parseInt(e.substr(1),10);t.lengthDu,basic:()=>fu,colored:()=>du,coloured:()=>du,pattern:e=>Eu(e&&e.pattern,e&&e.tokens),dummy:()=>pu};var hu={basicLayout:fu,messagePassThroughLayout:Du,patternLayout:Eu,colouredLayout:du,coloredLayout:du,dummyLayout:pu,addLayout(e,t){mu[e]=t},layout:(e,t)=>mu[e]&&mu[e](t)};const yu=tu,Cu=["white","grey","black","blue","cyan","green","magenta","red","yellow"];class Fu{constructor(e,t,n){this.level=e,this.levelStr=t,this.colour=n}toString(){return this.levelStr}static getLevel(e,t){return e?e instanceof Fu?e:(e instanceof Object&&e.levelStr&&(e=e.levelStr),Fu[e.toString().toUpperCase()]||t):t}static addLevels(e){if(e){Object.keys(e).forEach((t=>{const n=t.toUpperCase();Fu[n]=new Fu(e[t].value,n,e[t].colour);const r=Fu.levels.findIndex((e=>e.levelStr===n));r>-1?Fu.levels[r]=Fu[n]:Fu.levels.push(Fu[n])})),Fu.levels.sort(((e,t)=>e.level-t.level))}}isLessThanOrEqualTo(e){return"string"==typeof e&&(e=Fu.getLevel(e)),this.level<=e.level}isGreaterThanOrEqualTo(e){return"string"==typeof e&&(e=Fu.getLevel(e)),this.level>=e.level}isEqualTo(e){return"string"==typeof e&&(e=Fu.getLevel(e)),this.level===e.level}}Fu.levels=[],Fu.addLevels({ALL:{value:Number.MIN_VALUE,colour:"grey"},TRACE:{value:5e3,colour:"blue"},DEBUG:{value:1e4,colour:"cyan"},INFO:{value:2e4,colour:"green"},WARN:{value:3e4,colour:"yellow"},ERROR:{value:4e4,colour:"red"},FATAL:{value:5e4,colour:"magenta"},MARK:{value:9007199254740992,colour:"grey"},OFF:{value:Number.MAX_VALUE,colour:"grey"}}),yu.addListener((e=>{const t=e.levels;if(t){yu.throwExceptionIf(e,yu.not(yu.anObject(t)),"levels must be an object");Object.keys(t).forEach((n=>{yu.throwExceptionIf(e,yu.not(yu.validIdentifier(n)),`level name "${n}" is not a valid identifier (must start with a letter, only contain A-Z,a-z,0-9,_)`),yu.throwExceptionIf(e,yu.not(yu.anObject(t[n])),`level "${n}" must be an object`),yu.throwExceptionIf(e,yu.not(t[n].value),`level "${n}" must have a 'value' property`),yu.throwExceptionIf(e,yu.not(yu.anInteger(t[n].value)),`level "${n}".value must have an integer value`),yu.throwExceptionIf(e,yu.not(t[n].colour),`level "${n}" must have a 'colour' property`),yu.throwExceptionIf(e,yu.not(Cu.indexOf(t[n].colour)>-1),`level "${n}".colour must be one of ${Cu.join(", ")}`)}))}})),yu.addListener((e=>{Fu.addLevels(e.levels)}));var gu=Fu,Au={exports:{}},vu={};/*! (c) 2020 Andrea Giammarchi */ -const{parse:Su,stringify:wu}=JSON,{keys:Ou}=Object,bu=String,_u="string",Bu={},Pu="object",ku=(e,t)=>t,xu=e=>e instanceof bu?bu(e):e,Nu=(e,t)=>typeof t===_u?new bu(t):t,Iu=(e,t,n,r)=>{const u=[];for(let o=Ou(n),{length:i}=o,s=0;s{const r=bu(t.push(n)-1);return e.set(n,r),r},Ru=(e,t)=>{const n=Su(e,Nu).map(xu),r=n[0],u=t||ku,o=typeof r===Pu&&r?Iu(n,new Set,r,u):r;return u.call({"":o},"",o)};vu.parse=Ru;const Mu=(e,t,n)=>{const r=t&&typeof t===Pu?(e,n)=>""===e||-1Su(Mu(e));vu.fromJSON=e=>Ru(wu(e));const Lu=vu,ju=gu;class $u{constructor(e,t,n,r,u){this.startTime=new Date,this.categoryName=e,this.data=n,this.level=t,this.context=Object.assign({},r),this.pid=process.pid,u&&(this.functionName=u.functionName,this.fileName=u.fileName,this.lineNumber=u.lineNumber,this.columnNumber=u.columnNumber,this.callStack=u.callStack)}serialise(){const e=this.data.map((e=>(e&&e.message&&e.stack&&(e=Object.assign({message:e.message,stack:e.stack},e)),e)));return this.data=e,Lu.stringify(this)}static deserialise(e){let t;try{const n=Lu.parse(e);n.data=n.data.map((e=>{if(e&&e.message&&e.stack){const t=new Error(e);Object.keys(e).forEach((n=>{t[n]=e[n]})),e=t}return e})),t=new $u(n.categoryName,ju.getLevel(n.level.levelStr),n.data,n.context),t.startTime=new Date(n.startTime),t.pid=n.pid,t.cluster=n.cluster}catch(n){t=new $u("log4js",ju.ERROR,["Unable to parse log:",e,"because: ",n])}return t}}var Hu=$u;const Ju=Nr.exports("log4js:clustering"),Gu=Hu,Vu=tu;let Uu=!1,Wu=null;try{Wu=require("cluster")}catch(e){Ju("cluster module not present"),Uu=!0}const zu=[];let Ku=!1,qu="NODE_APP_INSTANCE";const Yu=()=>Ku&&"0"===process.env[qu],Xu=()=>Uu||Wu.isMaster||Yu(),Zu=e=>{zu.forEach((t=>t(e)))},Qu=(e,t)=>{if(Ju("cluster message received from worker ",e,": ",t),e.topic&&e.data&&(t=e,e=void 0),t&&t.topic&&"log4js:message"===t.topic){Ju("received message: ",t.data);const e=Gu.deserialise(t.data);Zu(e)}};Uu||Vu.addListener((e=>{zu.length=0,({pm2:Ku,disableClustering:Uu,pm2InstanceVar:qu="NODE_APP_INSTANCE"}=e),Ju(`clustering disabled ? ${Uu}`),Ju(`cluster.isMaster ? ${Wu&&Wu.isMaster}`),Ju(`pm2 enabled ? ${Ku}`),Ju(`pm2InstanceVar = ${qu}`),Ju(`process.env[${qu}] = ${process.env[qu]}`),Ku&&process.removeListener("message",Qu),Wu&&Wu.removeListener&&Wu.removeListener("message",Qu),Uu||e.disableClustering?Ju("Not listening for cluster messages, because clustering disabled."):Yu()?(Ju("listening for PM2 broadcast messages"),process.on("message",Qu)):Wu.isMaster?(Ju("listening for cluster messages"),Wu.on("message",Qu)):Ju("not listening for messages, because we are not a master process")}));var eo={onlyOnMaster:(e,t)=>Xu()?e():t,isMaster:Xu,send:e=>{Xu()?Zu(e):(Ku||(e.cluster={workerId:Wu.worker.id,worker:process.pid}),process.send({topic:"log4js:message",data:e.serialise()}))},onMessage:e=>{zu.push(e)}},to={};function no(e){if("number"==typeof e&&Number.isInteger(e))return e;const t={K:1024,M:1048576,G:1073741824},n=Object.keys(t),r=e.substr(e.length-1).toLocaleUpperCase(),u=e.substring(0,e.length-1).trim();if(n.indexOf(r)<0||!Number.isInteger(Number(u)))throw Error(`maxLogSize: "${e}" is invalid`);return u*t[r]}function ro(e){return function(e,t){const n=Object.assign({},t);return Object.keys(e).forEach((r=>{n[r]&&(n[r]=e[r](t[r]))})),n}({maxLogSize:no},e)}const uo={file:ro,fileSync:ro};to.modifyConfig=e=>uo[e.type]?uo[e.type](e):e;var oo={};const io=console.log.bind(console);oo.configure=function(e,t){let n=t.colouredLayout;return e.layout&&(n=t.layout(e.layout.type,e.layout)),function(e,t){return n=>{io(e(n,t))}}(n,e.timezoneOffset)};var so={};so.configure=function(e,t){let n=t.colouredLayout;return e.layout&&(n=t.layout(e.layout.type,e.layout)),function(e,t){return n=>{process.stdout.write(`${e(n,t)}\n`)}}(n,e.timezoneOffset)};var co={};co.configure=function(e,t){let n=t.colouredLayout;return e.layout&&(n=t.layout(e.layout.type,e.layout)),function(e,t){return n=>{process.stderr.write(`${e(n,t)}\n`)}}(n,e.timezoneOffset)};var ao={};ao.configure=function(e,t,n,r){const u=n(e.appender);return function(e,t,n,r){const u=r.getLevel(e),o=r.getLevel(t,r.FATAL);return e=>{const t=e.level;t.isGreaterThanOrEqualTo(u)&&t.isLessThanOrEqualTo(o)&&n(e)}}(e.level,e.maxLevel,u,r)};var lo={};const fo=Nr.exports("log4js:categoryFilter");lo.configure=function(e,t,n){const r=n(e.appender);return function(e,t){return"string"==typeof e&&(e=[e]),n=>{fo(`Checking ${n.categoryName} against ${e}`),-1===e.indexOf(n.categoryName)&&(fo("Not excluded, sending to appender"),t(n))}}(e.exclude,r)};var Do={};const po=Nr.exports("log4js:noLogFilter");Do.configure=function(e,t,n){const r=n(e.appender);return function(e,t){return n=>{po(`Checking data: ${n.data} against filters: ${e}`),"string"==typeof e&&(e=[e]),e=e.filter((e=>null!=e&&""!==e));const r=new RegExp(e.join("|"),"i");(0===e.length||n.data.findIndex((e=>r.test(e)))<0)&&(po("Not excluded, sending to appender"),t(n))}}(e.exclude,r)};var Eo={},mo={exports:{}},ho={},yo={fromCallback:function(e){return Object.defineProperty((function(){if("function"!=typeof arguments[arguments.length-1])return new Promise(((t,n)=>{arguments[arguments.length]=(e,r)=>{if(e)return n(e);t(r)},arguments.length++,e.apply(this,arguments)}));e.apply(this,arguments)}),"name",{value:e.name})},fromPromise:function(e){return Object.defineProperty((function(){const t=arguments[arguments.length-1];if("function"!=typeof t)return e.apply(this,arguments);e.apply(this,arguments).then((e=>t(null,e)),t)}),"name",{value:e.name})}};!function(e){const t=yo.fromCallback,n=we,r=["access","appendFile","chmod","chown","close","copyFile","fchmod","fchown","fdatasync","fstat","fsync","ftruncate","futimes","lchown","lchmod","link","lstat","mkdir","mkdtemp","open","readFile","readdir","readlink","realpath","rename","rmdir","stat","symlink","truncate","unlink","utimes","writeFile"].filter((e=>"function"==typeof n[e]));Object.keys(n).forEach((t=>{"promises"!==t&&(e[t]=n[t])})),r.forEach((r=>{e[r]=t(n[r])})),e.exists=function(e,t){return"function"==typeof t?n.exists(e,t):new Promise((t=>n.exists(e,t)))},e.read=function(e,t,r,u,o,i){return"function"==typeof i?n.read(e,t,r,u,o,i):new Promise(((i,s)=>{n.read(e,t,r,u,o,((e,t,n)=>{if(e)return s(e);i({bytesRead:t,buffer:n})}))}))},e.write=function(e,t,...r){return"function"==typeof r[r.length-1]?n.write(e,t,...r):new Promise(((u,o)=>{n.write(e,t,...r,((e,t,n)=>{if(e)return o(e);u({bytesWritten:t,buffer:n})}))}))},"function"==typeof n.realpath.native&&(e.realpath.native=t(n.realpath.native))}(ho);const Co=p.default;function Fo(e){return(e=Co.normalize(Co.resolve(e)).split(Co.sep)).length>0?e[0]:null}const go=/[<>:"|?*]/;var Ao=function(e){const t=Fo(e);return e=e.replace(t,""),go.test(e)};const vo=we,So=p.default,wo=Ao,Oo=parseInt("0777",8);var bo=function e(t,n,r,u){if("function"==typeof n?(r=n,n={}):n&&"object"==typeof n||(n={mode:n}),"win32"===process.platform&&wo(t)){const e=new Error(t+" contains invalid WIN32 path characters.");return e.code="EINVAL",r(e)}let o=n.mode;const i=n.fs||vo;void 0===o&&(o=Oo&~process.umask()),u||(u=null),r=r||function(){},t=So.resolve(t),i.mkdir(t,o,(o=>{if(!o)return r(null,u=u||t);if("ENOENT"===o.code){if(So.dirname(t)===t)return r(o);e(So.dirname(t),n,((u,o)=>{u?r(u,o):e(t,n,r,o)}))}else i.stat(t,((e,t)=>{e||!t.isDirectory()?r(o,u):r(null,u)}))}))};const _o=we,Bo=p.default,Po=Ao,ko=parseInt("0777",8);var xo=function e(t,n,r){n&&"object"==typeof n||(n={mode:n});let u=n.mode;const o=n.fs||_o;if("win32"===process.platform&&Po(t)){const e=new Error(t+" contains invalid WIN32 path characters.");throw e.code="EINVAL",e}void 0===u&&(u=ko&~process.umask()),r||(r=null),t=Bo.resolve(t);try{o.mkdirSync(t,u),r=r||t}catch(u){if("ENOENT"===u.code){if(Bo.dirname(t)===t)throw u;r=e(Bo.dirname(t),n,r),e(t,n,r)}else{let e;try{e=o.statSync(t)}catch(e){throw u}if(!e.isDirectory())throw u}}return r};const No=(0,yo.fromCallback)(bo);var Io={mkdirs:No,mkdirsSync:xo,mkdirp:No,mkdirpSync:xo,ensureDir:No,ensureDirSync:xo};const To=we;E.default,p.default;var Ro=function(e,t,n,r){To.open(e,"r+",((e,u)=>{if(e)return r(e);To.futimes(u,t,n,(e=>{To.close(u,(t=>{r&&r(e||t)}))}))}))},Mo=function(e,t,n){const r=To.openSync(e,"r+");return To.futimesSync(r,t,n),To.closeSync(r)};const Lo=we,jo=p.default,$o=10,Ho=5,Jo=0,Go=process.versions.node.split("."),Vo=Number.parseInt(Go[0],10),Uo=Number.parseInt(Go[1],10),Wo=Number.parseInt(Go[2],10);function zo(){if(Vo>$o)return!0;if(Vo===$o){if(Uo>Ho)return!0;if(Uo===Ho&&Wo>=Jo)return!0}return!1}function Ko(e,t){const n=jo.resolve(e).split(jo.sep).filter((e=>e)),r=jo.resolve(t).split(jo.sep).filter((e=>e));return n.reduce(((e,t,n)=>e&&r[n]===t),!0)}function qo(e,t,n){return`Cannot ${n} '${e}' to a subdirectory of itself, '${t}'.`}var Yo,Xo,Zo={checkPaths:function(e,t,n,r){!function(e,t,n){zo()?Lo.stat(e,{bigint:!0},((e,r)=>{if(e)return n(e);Lo.stat(t,{bigint:!0},((e,t)=>e?"ENOENT"===e.code?n(null,{srcStat:r,destStat:null}):n(e):n(null,{srcStat:r,destStat:t})))})):Lo.stat(e,((e,r)=>{if(e)return n(e);Lo.stat(t,((e,t)=>e?"ENOENT"===e.code?n(null,{srcStat:r,destStat:null}):n(e):n(null,{srcStat:r,destStat:t})))}))}(e,t,((u,o)=>{if(u)return r(u);const{srcStat:i,destStat:s}=o;return s&&s.ino&&s.dev&&s.ino===i.ino&&s.dev===i.dev?r(new Error("Source and destination must not be the same.")):i.isDirectory()&&Ko(e,t)?r(new Error(qo(e,t,n))):r(null,{srcStat:i,destStat:s})}))},checkPathsSync:function(e,t,n){const{srcStat:r,destStat:u}=function(e,t){let n,r;n=zo()?Lo.statSync(e,{bigint:!0}):Lo.statSync(e);try{r=zo()?Lo.statSync(t,{bigint:!0}):Lo.statSync(t)}catch(e){if("ENOENT"===e.code)return{srcStat:n,destStat:null};throw e}return{srcStat:n,destStat:r}}(e,t);if(u&&u.ino&&u.dev&&u.ino===r.ino&&u.dev===r.dev)throw new Error("Source and destination must not be the same.");if(r.isDirectory()&&Ko(e,t))throw new Error(qo(e,t,n));return{srcStat:r,destStat:u}},checkParentPaths:function e(t,n,r,u,o){const i=jo.resolve(jo.dirname(t)),s=jo.resolve(jo.dirname(r));if(s===i||s===jo.parse(s).root)return o();zo()?Lo.stat(s,{bigint:!0},((i,c)=>i?"ENOENT"===i.code?o():o(i):c.ino&&c.dev&&c.ino===n.ino&&c.dev===n.dev?o(new Error(qo(t,r,u))):e(t,n,s,u,o))):Lo.stat(s,((i,c)=>i?"ENOENT"===i.code?o():o(i):c.ino&&c.dev&&c.ino===n.ino&&c.dev===n.dev?o(new Error(qo(t,r,u))):e(t,n,s,u,o)))},checkParentPathsSync:function e(t,n,r,u){const o=jo.resolve(jo.dirname(t)),i=jo.resolve(jo.dirname(r));if(i===o||i===jo.parse(i).root)return;let s;try{s=zo()?Lo.statSync(i,{bigint:!0}):Lo.statSync(i)}catch(e){if("ENOENT"===e.code)return;throw e}if(s.ino&&s.dev&&s.ino===n.ino&&s.dev===n.dev)throw new Error(qo(t,r,u));return e(t,n,i,u)},isSrcSubdir:Ko};const Qo=we,ei=p.default,ti=Io.mkdirsSync,ni=Mo,ri=Zo;function ui(e,t,n,r){if(!r.filter||r.filter(t,n))return function(e,t,n,r){const u=r.dereference?Qo.statSync:Qo.lstatSync,o=u(t);if(o.isDirectory())return function(e,t,n,r,u){if(!t)return function(e,t,n,r){return Qo.mkdirSync(n),ii(t,n,r),Qo.chmodSync(n,e.mode)}(e,n,r,u);if(t&&!t.isDirectory())throw new Error(`Cannot overwrite non-directory '${r}' with directory '${n}'.`);return ii(n,r,u)}(o,e,t,n,r);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return function(e,t,n,r,u){return t?function(e,t,n,r){if(r.overwrite)return Qo.unlinkSync(n),oi(e,t,n,r);if(r.errorOnExist)throw new Error(`'${n}' already exists`)}(e,n,r,u):oi(e,n,r,u)}(o,e,t,n,r);if(o.isSymbolicLink())return function(e,t,n,r){let u=Qo.readlinkSync(t);r.dereference&&(u=ei.resolve(process.cwd(),u));if(e){let e;try{e=Qo.readlinkSync(n)}catch(e){if("EINVAL"===e.code||"UNKNOWN"===e.code)return Qo.symlinkSync(u,n);throw e}if(r.dereference&&(e=ei.resolve(process.cwd(),e)),ri.isSrcSubdir(u,e))throw new Error(`Cannot copy '${u}' to a subdirectory of itself, '${e}'.`);if(Qo.statSync(n).isDirectory()&&ri.isSrcSubdir(e,u))throw new Error(`Cannot overwrite '${e}' with '${u}'.`);return function(e,t){return Qo.unlinkSync(t),Qo.symlinkSync(e,t)}(u,n)}return Qo.symlinkSync(u,n)}(e,t,n,r)}(e,t,n,r)}function oi(e,t,n,r){return"function"==typeof Qo.copyFileSync?(Qo.copyFileSync(t,n),Qo.chmodSync(n,e.mode),r.preserveTimestamps?ni(n,e.atime,e.mtime):void 0):function(e,t,n,r){const u=65536,o=(Xo?Yo:(Xo=1,Yo=function(e){if("function"==typeof Buffer.allocUnsafe)try{return Buffer.allocUnsafe(e)}catch(t){return new Buffer(e)}return new Buffer(e)}))(u),i=Qo.openSync(t,"r"),s=Qo.openSync(n,"w",e.mode);let c=0;for(;cfunction(e,t,n,r){const u=ei.join(t,e),o=ei.join(n,e),{destStat:i}=ri.checkPathsSync(u,o,"copy");return ui(i,u,o,r)}(r,e,t,n)))}var si=function(e,t,n){"function"==typeof n&&(n={filter:n}),(n=n||{}).clobber=!("clobber"in n)||!!n.clobber,n.overwrite="overwrite"in n?!!n.overwrite:n.clobber,n.preserveTimestamps&&"ia32"===process.arch&&console.warn("fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n\n see https://github.com/jprichardson/node-fs-extra/issues/269");const{srcStat:r,destStat:u}=ri.checkPathsSync(e,t,"copy");return ri.checkParentPathsSync(e,r,t,"copy"),function(e,t,n,r){if(r.filter&&!r.filter(t,n))return;const u=ei.dirname(n);Qo.existsSync(u)||ti(u);return ui(e,t,n,r)}(u,e,t,n)},ci={copySync:si};const ai=yo.fromPromise,li=ho;var fi={pathExists:ai((function(e){return li.access(e).then((()=>!0)).catch((()=>!1))})),pathExistsSync:li.existsSync};const di=we,Di=p.default,pi=Io.mkdirs,Ei=fi.pathExists,mi=Ro,hi=Zo;function yi(e,t,n,r,u){const o=Di.dirname(n);Ei(o,((i,s)=>i?u(i):s?Fi(e,t,n,r,u):void pi(o,(o=>o?u(o):Fi(e,t,n,r,u)))))}function Ci(e,t,n,r,u,o){Promise.resolve(u.filter(n,r)).then((i=>i?e(t,n,r,u,o):o()),(e=>o(e)))}function Fi(e,t,n,r,u){return r.filter?Ci(gi,e,t,n,r,u):gi(e,t,n,r,u)}function gi(e,t,n,r,u){(r.dereference?di.stat:di.lstat)(t,((o,i)=>o?u(o):i.isDirectory()?function(e,t,n,r,u,o){if(!t)return function(e,t,n,r,u){di.mkdir(n,(o=>{if(o)return u(o);Si(t,n,r,(t=>t?u(t):di.chmod(n,e.mode,u)))}))}(e,n,r,u,o);if(t&&!t.isDirectory())return o(new Error(`Cannot overwrite non-directory '${r}' with directory '${n}'.`));return Si(n,r,u,o)}(i,e,t,n,r,u):i.isFile()||i.isCharacterDevice()||i.isBlockDevice()?function(e,t,n,r,u,o){return t?function(e,t,n,r,u){if(!r.overwrite)return r.errorOnExist?u(new Error(`'${n}' already exists`)):u();di.unlink(n,(o=>o?u(o):Ai(e,t,n,r,u)))}(e,n,r,u,o):Ai(e,n,r,u,o)}(i,e,t,n,r,u):i.isSymbolicLink()?function(e,t,n,r,u){di.readlink(t,((t,o)=>t?u(t):(r.dereference&&(o=Di.resolve(process.cwd(),o)),e?void di.readlink(n,((t,i)=>t?"EINVAL"===t.code||"UNKNOWN"===t.code?di.symlink(o,n,u):u(t):(r.dereference&&(i=Di.resolve(process.cwd(),i)),hi.isSrcSubdir(o,i)?u(new Error(`Cannot copy '${o}' to a subdirectory of itself, '${i}'.`)):e.isDirectory()&&hi.isSrcSubdir(i,o)?u(new Error(`Cannot overwrite '${i}' with '${o}'.`)):function(e,t,n){di.unlink(t,(r=>r?n(r):di.symlink(e,t,n)))}(o,n,u)))):di.symlink(o,n,u))))}(e,t,n,r,u):void 0))}function Ai(e,t,n,r,u){return"function"==typeof di.copyFile?di.copyFile(t,n,(t=>t?u(t):vi(e,n,r,u))):function(e,t,n,r,u){const o=di.createReadStream(t);o.on("error",(e=>u(e))).once("open",(()=>{const t=di.createWriteStream(n,{mode:e.mode});t.on("error",(e=>u(e))).on("open",(()=>o.pipe(t))).once("close",(()=>vi(e,n,r,u)))}))}(e,t,n,r,u)}function vi(e,t,n,r){di.chmod(t,e.mode,(u=>u?r(u):n.preserveTimestamps?mi(t,e.atime,e.mtime,r):r()))}function Si(e,t,n,r){di.readdir(e,((u,o)=>u?r(u):wi(o,e,t,n,r)))}function wi(e,t,n,r,u){const o=e.pop();return o?function(e,t,n,r,u,o){const i=Di.join(n,t),s=Di.join(r,t);hi.checkPaths(i,s,"copy",((t,c)=>{if(t)return o(t);const{destStat:a}=c;Fi(a,i,s,u,(t=>t?o(t):wi(e,n,r,u,o)))}))}(e,o,t,n,r,u):u()}var Oi=function(e,t,n,r){"function"!=typeof n||r?"function"==typeof n&&(n={filter:n}):(r=n,n={}),r=r||function(){},(n=n||{}).clobber=!("clobber"in n)||!!n.clobber,n.overwrite="overwrite"in n?!!n.overwrite:n.clobber,n.preserveTimestamps&&"ia32"===process.arch&&console.warn("fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n\n see https://github.com/jprichardson/node-fs-extra/issues/269"),hi.checkPaths(e,t,"copy",((u,o)=>{if(u)return r(u);const{srcStat:i,destStat:s}=o;hi.checkParentPaths(e,i,t,"copy",(u=>u?r(u):n.filter?Ci(yi,s,e,t,n,r):yi(s,e,t,n,r)))}))};var bi={copy:(0,yo.fromCallback)(Oi)};const _i=we,Bi=p.default,Pi=g.default,ki="win32"===process.platform;function xi(e){["unlink","chmod","stat","lstat","rmdir","readdir"].forEach((t=>{e[t]=e[t]||_i[t],e[t+="Sync"]=e[t]||_i[t]})),e.maxBusyTries=e.maxBusyTries||3}function Ni(e,t,n){let r=0;"function"==typeof t&&(n=t,t={}),Pi(e,"rimraf: missing path"),Pi.strictEqual(typeof e,"string","rimraf: path should be a string"),Pi.strictEqual(typeof n,"function","rimraf: callback function required"),Pi(t,"rimraf: invalid options argument provided"),Pi.strictEqual(typeof t,"object","rimraf: options should be object"),xi(t),Ii(e,t,(function u(o){if(o){if(("EBUSY"===o.code||"ENOTEMPTY"===o.code||"EPERM"===o.code)&&rIi(e,t,u)),100*r)}"ENOENT"===o.code&&(o=null)}n(o)}))}function Ii(e,t,n){Pi(e),Pi(t),Pi("function"==typeof n),t.lstat(e,((r,u)=>r&&"ENOENT"===r.code?n(null):r&&"EPERM"===r.code&&ki?Ti(e,t,r,n):u&&u.isDirectory()?Mi(e,t,r,n):void t.unlink(e,(r=>{if(r){if("ENOENT"===r.code)return n(null);if("EPERM"===r.code)return ki?Ti(e,t,r,n):Mi(e,t,r,n);if("EISDIR"===r.code)return Mi(e,t,r,n)}return n(r)}))))}function Ti(e,t,n,r){Pi(e),Pi(t),Pi("function"==typeof r),n&&Pi(n instanceof Error),t.chmod(e,438,(u=>{u?r("ENOENT"===u.code?null:n):t.stat(e,((u,o)=>{u?r("ENOENT"===u.code?null:n):o.isDirectory()?Mi(e,t,n,r):t.unlink(e,r)}))}))}function Ri(e,t,n){let r;Pi(e),Pi(t),n&&Pi(n instanceof Error);try{t.chmodSync(e,438)}catch(e){if("ENOENT"===e.code)return;throw n}try{r=t.statSync(e)}catch(e){if("ENOENT"===e.code)return;throw n}r.isDirectory()?ji(e,t,n):t.unlinkSync(e)}function Mi(e,t,n,r){Pi(e),Pi(t),n&&Pi(n instanceof Error),Pi("function"==typeof r),t.rmdir(e,(u=>{!u||"ENOTEMPTY"!==u.code&&"EEXIST"!==u.code&&"EPERM"!==u.code?u&&"ENOTDIR"===u.code?r(n):r(u):function(e,t,n){Pi(e),Pi(t),Pi("function"==typeof n),t.readdir(e,((r,u)=>{if(r)return n(r);let o,i=u.length;if(0===i)return t.rmdir(e,n);u.forEach((r=>{Ni(Bi.join(e,r),t,(r=>{if(!o)return r?n(o=r):void(0==--i&&t.rmdir(e,n))}))}))}))}(e,t,r)}))}function Li(e,t){let n;xi(t=t||{}),Pi(e,"rimraf: missing path"),Pi.strictEqual(typeof e,"string","rimraf: path should be a string"),Pi(t,"rimraf: missing options"),Pi.strictEqual(typeof t,"object","rimraf: options should be object");try{n=t.lstatSync(e)}catch(n){if("ENOENT"===n.code)return;"EPERM"===n.code&&ki&&Ri(e,t,n)}try{n&&n.isDirectory()?ji(e,t,null):t.unlinkSync(e)}catch(n){if("ENOENT"===n.code)return;if("EPERM"===n.code)return ki?Ri(e,t,n):ji(e,t,n);if("EISDIR"!==n.code)throw n;ji(e,t,n)}}function ji(e,t,n){Pi(e),Pi(t),n&&Pi(n instanceof Error);try{t.rmdirSync(e)}catch(r){if("ENOTDIR"===r.code)throw n;if("ENOTEMPTY"===r.code||"EEXIST"===r.code||"EPERM"===r.code)!function(e,t){if(Pi(e),Pi(t),t.readdirSync(e).forEach((n=>Li(Bi.join(e,n),t))),!ki){return t.rmdirSync(e,t)}{const n=Date.now();do{try{return t.rmdirSync(e,t)}catch(e){}}while(Date.now()-n<500)}}(e,t);else if("ENOENT"!==r.code)throw r}}var $i=Ni;Ni.sync=Li;const Hi=$i;var Ji={remove:(0,yo.fromCallback)(Hi),removeSync:Hi.sync};const Gi=yo.fromCallback,Vi=we,Ui=p.default,Wi=Io,zi=Ji,Ki=Gi((function(e,t){t=t||function(){},Vi.readdir(e,((n,r)=>{if(n)return Wi.mkdirs(e,t);r=r.map((t=>Ui.join(e,t))),function e(){const n=r.pop();if(!n)return t();zi.remove(n,(n=>{if(n)return t(n);e()}))}()}))}));function qi(e){let t;try{t=Vi.readdirSync(e)}catch(t){return Wi.mkdirsSync(e)}t.forEach((t=>{t=Ui.join(e,t),zi.removeSync(t)}))}var Yi={emptyDirSync:qi,emptydirSync:qi,emptyDir:Ki,emptydir:Ki};const Xi=yo.fromCallback,Zi=p.default,Qi=we,es=Io,ts=fi.pathExists;var ns={createFile:Xi((function(e,t){function n(){Qi.writeFile(e,"",(e=>{if(e)return t(e);t()}))}Qi.stat(e,((r,u)=>{if(!r&&u.isFile())return t();const o=Zi.dirname(e);ts(o,((e,r)=>e?t(e):r?n():void es.mkdirs(o,(e=>{if(e)return t(e);n()}))))}))})),createFileSync:function(e){let t;try{t=Qi.statSync(e)}catch(e){}if(t&&t.isFile())return;const n=Zi.dirname(e);Qi.existsSync(n)||es.mkdirsSync(n),Qi.writeFileSync(e,"")}};const rs=yo.fromCallback,us=p.default,os=we,is=Io,ss=fi.pathExists;var cs={createLink:rs((function(e,t,n){function r(e,t){os.link(e,t,(e=>{if(e)return n(e);n(null)}))}ss(t,((u,o)=>u?n(u):o?n(null):void os.lstat(e,(u=>{if(u)return u.message=u.message.replace("lstat","ensureLink"),n(u);const o=us.dirname(t);ss(o,((u,i)=>u?n(u):i?r(e,t):void is.mkdirs(o,(u=>{if(u)return n(u);r(e,t)}))))}))))})),createLinkSync:function(e,t){if(os.existsSync(t))return;try{os.lstatSync(e)}catch(e){throw e.message=e.message.replace("lstat","ensureLink"),e}const n=us.dirname(t);return os.existsSync(n)||is.mkdirsSync(n),os.linkSync(e,t)}};const as=p.default,ls=we,fs=fi.pathExists;var ds={symlinkPaths:function(e,t,n){if(as.isAbsolute(e))return ls.lstat(e,(t=>t?(t.message=t.message.replace("lstat","ensureSymlink"),n(t)):n(null,{toCwd:e,toDst:e})));{const r=as.dirname(t),u=as.join(r,e);return fs(u,((t,o)=>t?n(t):o?n(null,{toCwd:u,toDst:e}):ls.lstat(e,(t=>t?(t.message=t.message.replace("lstat","ensureSymlink"),n(t)):n(null,{toCwd:e,toDst:as.relative(r,e)})))))}},symlinkPathsSync:function(e,t){let n;if(as.isAbsolute(e)){if(n=ls.existsSync(e),!n)throw new Error("absolute srcpath does not exist");return{toCwd:e,toDst:e}}{const r=as.dirname(t),u=as.join(r,e);if(n=ls.existsSync(u),n)return{toCwd:u,toDst:e};if(n=ls.existsSync(e),!n)throw new Error("relative srcpath does not exist");return{toCwd:e,toDst:as.relative(r,e)}}}};const Ds=we;var ps={symlinkType:function(e,t,n){if(n="function"==typeof t?t:n,t="function"!=typeof t&&t)return n(null,t);Ds.lstat(e,((e,r)=>{if(e)return n(null,"file");t=r&&r.isDirectory()?"dir":"file",n(null,t)}))},symlinkTypeSync:function(e,t){let n;if(t)return t;try{n=Ds.lstatSync(e)}catch(e){return"file"}return n&&n.isDirectory()?"dir":"file"}};const Es=yo.fromCallback,ms=p.default,hs=we,ys=Io.mkdirs,Cs=Io.mkdirsSync,Fs=ds.symlinkPaths,gs=ds.symlinkPathsSync,As=ps.symlinkType,vs=ps.symlinkTypeSync,Ss=fi.pathExists;var ws={createSymlink:Es((function(e,t,n,r){r="function"==typeof n?n:r,n="function"!=typeof n&&n,Ss(t,((u,o)=>u?r(u):o?r(null):void Fs(e,t,((u,o)=>{if(u)return r(u);e=o.toDst,As(o.toCwd,n,((n,u)=>{if(n)return r(n);const o=ms.dirname(t);Ss(o,((n,i)=>n?r(n):i?hs.symlink(e,t,u,r):void ys(o,(n=>{if(n)return r(n);hs.symlink(e,t,u,r)}))))}))}))))})),createSymlinkSync:function(e,t,n){if(hs.existsSync(t))return;const r=gs(e,t);e=r.toDst,n=vs(r.toCwd,n);const u=ms.dirname(t);return hs.existsSync(u)||Cs(u),hs.symlinkSync(e,t,n)}};var Os,bs={createFile:ns.createFile,createFileSync:ns.createFileSync,ensureFile:ns.createFile,ensureFileSync:ns.createFileSync,createLink:cs.createLink,createLinkSync:cs.createLinkSync,ensureLink:cs.createLink,ensureLinkSync:cs.createLinkSync,createSymlink:ws.createSymlink,createSymlinkSync:ws.createSymlinkSync,ensureSymlink:ws.createSymlink,ensureSymlinkSync:ws.createSymlinkSync};try{Os=we}catch(e){Os=D.default}function _s(e,t){var n,r="\n";return"object"==typeof t&&null!==t&&(t.spaces&&(n=t.spaces),t.EOL&&(r=t.EOL)),JSON.stringify(e,t?t.replacer:null,n).replace(/\n/g,r)+r}function Bs(e){return Buffer.isBuffer(e)&&(e=e.toString("utf8")),e=e.replace(/^\uFEFF/,"")}var Ps={readFile:function(e,t,n){null==n&&(n=t,t={}),"string"==typeof t&&(t={encoding:t});var r=(t=t||{}).fs||Os,u=!0;"throws"in t&&(u=t.throws),r.readFile(e,t,(function(r,o){if(r)return n(r);var i;o=Bs(o);try{i=JSON.parse(o,t?t.reviver:null)}catch(t){return u?(t.message=e+": "+t.message,n(t)):n(null,null)}n(null,i)}))},readFileSync:function(e,t){"string"==typeof(t=t||{})&&(t={encoding:t});var n=t.fs||Os,r=!0;"throws"in t&&(r=t.throws);try{var u=n.readFileSync(e,t);return u=Bs(u),JSON.parse(u,t.reviver)}catch(t){if(r)throw t.message=e+": "+t.message,t;return null}},writeFile:function(e,t,n,r){null==r&&(r=n,n={});var u=(n=n||{}).fs||Os,o="";try{o=_s(t,n)}catch(e){return void(r&&r(e,null))}u.writeFile(e,o,n,r)},writeFileSync:function(e,t,n){var r=(n=n||{}).fs||Os,u=_s(t,n);return r.writeFileSync(e,u,n)}},ks=Ps;const xs=yo.fromCallback,Ns=ks;var Is={readJson:xs(Ns.readFile),readJsonSync:Ns.readFileSync,writeJson:xs(Ns.writeFile),writeJsonSync:Ns.writeFileSync};const Ts=p.default,Rs=Io,Ms=fi.pathExists,Ls=Is;var js=function(e,t,n,r){"function"==typeof n&&(r=n,n={});const u=Ts.dirname(e);Ms(u,((o,i)=>o?r(o):i?Ls.writeJson(e,t,n,r):void Rs.mkdirs(u,(u=>{if(u)return r(u);Ls.writeJson(e,t,n,r)}))))};const $s=we,Hs=p.default,Js=Io,Gs=Is;var Vs=function(e,t,n){const r=Hs.dirname(e);$s.existsSync(r)||Js.mkdirsSync(r),Gs.writeJsonSync(e,t,n)};const Us=yo.fromCallback,Ws=Is;Ws.outputJson=Us(js),Ws.outputJsonSync=Vs,Ws.outputJSON=Ws.outputJson,Ws.outputJSONSync=Ws.outputJsonSync,Ws.writeJSON=Ws.writeJson,Ws.writeJSONSync=Ws.writeJsonSync,Ws.readJSON=Ws.readJson,Ws.readJSONSync=Ws.readJsonSync;var zs=Ws;const Ks=we,qs=p.default,Ys=ci.copySync,Xs=Ji.removeSync,Zs=Io.mkdirpSync,Qs=Zo;function ec(e,t,n){try{Ks.renameSync(e,t)}catch(r){if("EXDEV"!==r.code)throw r;return function(e,t,n){const r={overwrite:n,errorOnExist:!0};return Ys(e,t,r),Xs(e)}(e,t,n)}}var tc=function(e,t,n){const r=(n=n||{}).overwrite||n.clobber||!1,{srcStat:u}=Qs.checkPathsSync(e,t,"move");return Qs.checkParentPathsSync(e,u,t,"move"),Zs(qs.dirname(t)),function(e,t,n){if(n)return Xs(t),ec(e,t,n);if(Ks.existsSync(t))throw new Error("dest already exists.");return ec(e,t,n)}(e,t,r)},nc={moveSync:tc};const rc=we,uc=p.default,oc=bi.copy,ic=Ji.remove,sc=Io.mkdirp,cc=fi.pathExists,ac=Zo;function lc(e,t,n,r){rc.rename(e,t,(u=>u?"EXDEV"!==u.code?r(u):function(e,t,n,r){const u={overwrite:n,errorOnExist:!0};oc(e,t,u,(t=>t?r(t):ic(e,r)))}(e,t,n,r):r()))}var fc=function(e,t,n,r){"function"==typeof n&&(r=n,n={});const u=n.overwrite||n.clobber||!1;ac.checkPaths(e,t,"move",((n,o)=>{if(n)return r(n);const{srcStat:i}=o;ac.checkParentPaths(e,i,t,"move",(n=>{if(n)return r(n);sc(uc.dirname(t),(n=>n?r(n):function(e,t,n,r){if(n)return ic(t,(u=>u?r(u):lc(e,t,n,r)));cc(t,((u,o)=>u?r(u):o?r(new Error("dest already exists.")):lc(e,t,n,r)))}(e,t,u,r)))}))}))};var dc={move:(0,yo.fromCallback)(fc)};const Dc=yo.fromCallback,pc=we,Ec=p.default,mc=Io,hc=fi.pathExists;var yc={outputFile:Dc((function(e,t,n,r){"function"==typeof n&&(r=n,n="utf8");const u=Ec.dirname(e);hc(u,((o,i)=>o?r(o):i?pc.writeFile(e,t,n,r):void mc.mkdirs(u,(u=>{if(u)return r(u);pc.writeFile(e,t,n,r)}))))})),outputFileSync:function(e,...t){const n=Ec.dirname(e);if(pc.existsSync(n))return pc.writeFileSync(e,...t);mc.mkdirsSync(n),pc.writeFileSync(e,...t)}};!function(e){e.exports=Object.assign({},ho,ci,bi,Yi,bs,zs,Io,nc,dc,yc,fi,Ji);const t=D.default;Object.getOwnPropertyDescriptor(t,"promises")&&Object.defineProperty(e.exports,"promises",{get:()=>t.promises})}(mo);const Cc=Nr.exports("streamroller:fileNameFormatter"),Fc=p.default;const gc=Nr.exports("streamroller:fileNameParser"),Ac=nu.exports;const vc=Nr.exports("streamroller:moveAndMaybeCompressFile"),Sc=mo.exports,wc=v.default;var Oc=async(e,t,n)=>{if(n=function(e){const t={mode:parseInt("0600",8),compress:!1},n=Object.assign({},t,e);return vc(`_parseOption: moveAndMaybeCompressFile called with option=${JSON.stringify(n)}`),n}(n),e!==t){if(await Sc.pathExists(e))if(vc(`moveAndMaybeCompressFile: moving file from ${e} to ${t} ${n.compress?"with":"without"} compress`),n.compress)await new Promise(((r,u)=>{let o=!1;const i=Sc.createWriteStream(t,{mode:n.mode,flags:"wx"}).on("open",(()=>{o=!0;const t=Sc.createReadStream(e).on("open",(()=>{t.pipe(wc.createGzip()).pipe(i)})).on("error",(t=>{vc(`moveAndMaybeCompressFile: error reading ${e}`,t),i.destroy(t)}))})).on("finish",(()=>{vc(`moveAndMaybeCompressFile: finished compressing ${t}, deleting ${e}`),Sc.unlink(e).then(r).catch((t=>{vc(`moveAndMaybeCompressFile: error deleting ${e}, truncating instead`,t),Sc.truncate(e).then(r).catch((t=>{vc(`moveAndMaybeCompressFile: error truncating ${e}`,t),u(t)}))}))})).on("error",(e=>{o?(vc(`moveAndMaybeCompressFile: error writing ${t}, deleting`,e),Sc.unlink(t).then((()=>{u(e)})).catch((e=>{vc(`moveAndMaybeCompressFile: error deleting ${t}`,e),u(e)}))):(vc(`moveAndMaybeCompressFile: error creating ${t}`,e),u(e))}))})).catch((()=>{}));else{vc(`moveAndMaybeCompressFile: renaming ${e} to ${t}`);try{await Sc.move(e,t,{overwrite:!0})}catch(n){if(vc(`moveAndMaybeCompressFile: error renaming ${e} to ${t}`,n),"ENOENT"!==n.code){vc("moveAndMaybeCompressFile: trying copy+truncate instead");try{await Sc.copy(e,t,{overwrite:!0}),await Sc.truncate(e)}catch(e){vc("moveAndMaybeCompressFile: error copy+truncate",e)}}}}}else vc("moveAndMaybeCompressFile: source and target are the same, not doing anything")};const bc=Nr.exports("streamroller:RollingFileWriteStream"),_c=mo.exports,Bc=p.default,Pc=E.default,kc=()=>new Date,xc=nu.exports,{Writable:Nc}=C.default,Ic=({file:e,keepFileExt:t,needsIndex:n,alwaysIncludeDate:r,compress:u,fileNameSep:o})=>{let i=o||".";const s=Fc.join(e.dir,e.name),c=t=>t+e.ext,a=(e,t,r)=>!n&&r||!t?e:e+i+t,l=(e,t,n)=>(t>0||r)&&n?e+i+n:e,f=(e,t)=>t&&u?e+".gz":e,d=t?[l,a,c,f]:[c,l,a,f];return({date:e,index:t})=>(Cc(`_formatFileName: date=${e}, index=${t}`),d.reduce(((n,r)=>r(n,t,e)),s))},Tc=({file:e,keepFileExt:t,pattern:n,fileNameSep:r})=>{let u=r||".";const o="__NOT_MATCHING__";let i=[(e,t)=>e.endsWith(".gz")?(gc("it is gzipped"),t.isCompressed=!0,e.slice(0,-1*".gz".length)):e,t?t=>t.startsWith(e.name)&&t.endsWith(e.ext)?(gc("it starts and ends with the right things"),t.slice(e.name.length+1,-1*e.ext.length)):o:t=>t.startsWith(e.base)?(gc("it starts with the right things"),t.slice(e.base.length+1)):o,n?(e,t)=>{const r=e.split(u);let o=r[r.length-1];gc("items: ",r,", indexStr: ",o);let i=e;void 0!==o&&o.match(/^\d+$/)?(i=e.slice(0,-1*(o.length+1)),gc(`dateStr is ${i}`),n&&!i&&(i=o,o="0")):o="0";try{const r=Ac.parse(n,i,new Date(0,0));return Ac.asString(n,r)!==i?e:(t.index=parseInt(o,10),t.date=i,t.timestamp=r.getTime(),"")}catch(t){return gc(`Problem parsing ${i} as ${n}, error was: `,t),e}}:(e,t)=>e.match(/^\d+$/)?(gc("it has an index"),t.index=parseInt(e,10),""):e];return e=>{let t={filename:e,index:0,isCompressed:!1};return i.reduce(((e,n)=>n(e,t)),e)?null:t}},Rc=Oc;var Mc=class extends Nc{constructor(e,t){if(bc(`constructor: creating RollingFileWriteStream. path=${e}`),"string"!=typeof e||0===e.length)throw new Error(`Invalid filename: ${e}`);if(e.endsWith(Bc.sep))throw new Error(`Filename is a directory: ${e}`);0===e.indexOf(`~${Bc.sep}`)&&(e=e.replace("~",Pc.homedir())),super(t),this.options=this._parseOption(t),this.fileObject=Bc.parse(e),""===this.fileObject.dir&&(this.fileObject=Bc.parse(Bc.join(process.cwd(),e))),this.fileFormatter=Ic({file:this.fileObject,alwaysIncludeDate:this.options.alwaysIncludePattern,needsIndex:this.options.maxSize 0`)}else delete n.maxSize;if(n.numBackups||0===n.numBackups){if(n.numBackups<0)throw new Error(`options.numBackups (${n.numBackups}) should be >= 0`);if(n.numBackups>=Number.MAX_SAFE_INTEGER)throw new Error(`options.numBackups (${n.numBackups}) should be < Number.MAX_SAFE_INTEGER`);n.numToKeep=n.numBackups+1}else if(n.numToKeep<=0)throw new Error(`options.numToKeep (${n.numToKeep}) should be > 0`);return bc(`_parseOption: creating stream with option=${JSON.stringify(n)}`),n}_final(e){this.currentFileStream.end("",this.options.encoding,e)}_write(e,t,n){this._shouldRoll().then((()=>{bc(`_write: writing chunk. file=${this.currentFileStream.path} state=${JSON.stringify(this.state)} chunk=${e}`),this.currentFileStream.write(e,t,(t=>{this.state.currentSize+=e.length,n(t)}))}))}async _shouldRoll(){(this._dateChanged()||this._tooBig())&&(bc(`_shouldRoll: rolling because dateChanged? ${this._dateChanged()} or tooBig? ${this._tooBig()}`),await this._roll())}_dateChanged(){return this.state.currentDate&&this.state.currentDate!==xc(this.options.pattern,kc())}_tooBig(){return this.state.currentSize>=this.options.maxSize}_roll(){return bc("_roll: closing the current stream"),new Promise(((e,t)=>{this.currentFileStream.end("",this.options.encoding,(()=>{this._moveOldFiles().then(e).catch(t)}))}))}async _moveOldFiles(){const e=await this._getExistingFiles();for(let t=(this.state.currentDate?e.filter((e=>e.date===this.state.currentDate)):e).length;t>=0;t--){bc(`_moveOldFiles: i = ${t}`);const e=this.fileFormatter({date:this.state.currentDate,index:t}),n=this.fileFormatter({date:this.state.currentDate,index:t+1}),r={compress:this.options.compress&&0===t,mode:this.options.mode};await Rc(e,n,r)}this.state.currentSize=0,this.state.currentDate=this.state.currentDate?xc(this.options.pattern,kc()):null,bc(`_moveOldFiles: finished rolling files. state=${JSON.stringify(this.state)}`),this._renewWriteStream(),await new Promise(((e,t)=>{this.currentFileStream.write("","utf8",(()=>{this._clean().then(e).catch(t)}))}))}async _getExistingFiles(){const e=await _c.readdir(this.fileObject.dir).catch((()=>[]));bc(`_getExistingFiles: files=${e}`);const t=e.map((e=>this.fileNameParser(e))).filter((e=>e)),n=e=>(e.timestamp?e.timestamp:kc().getTime())-e.index;return t.sort(((e,t)=>n(e)-n(t))),t}_renewWriteStream(){const e=this.fileFormatter({date:this.state.currentDate,index:0}),t=e=>{try{return _c.mkdirSync(e,{recursive:!0})}catch(n){if("ENOENT"===n.code)return t(Bc.dirname(e)),t(e);if("EEXIST"!==n.code&&"EROFS"!==n.code)throw n;try{if(_c.statSync(e).isDirectory())return e;throw n}catch(e){throw n}}};t(this.fileObject.dir);const n={flags:this.options.flags,encoding:this.options.encoding,mode:this.options.mode};var r,u;_c.appendFileSync(e,"",(r={...n},u="flags",r["flag"]=r[u],delete r[u],r)),this.currentFileStream=_c.createWriteStream(e,n),this.currentFileStream.on("error",(e=>{this.emit("error",e)}))}async _clean(){const e=await this._getExistingFiles();if(bc(`_clean: numToKeep = ${this.options.numToKeep}, existingFiles = ${e.length}`),bc("_clean: existing files are: ",e),this._tooManyFiles(e.length)){const n=e.slice(0,e.length-this.options.numToKeep).map((e=>Bc.format({dir:this.fileObject.dir,base:e.filename})));await(t=n,bc(`deleteFiles: files to delete: ${t}`),Promise.all(t.map((e=>_c.unlink(e).catch((t=>{bc(`deleteFiles: error when unlinking ${e}, ignoring. Error was ${t}`)}))))))}var t}_tooManyFiles(e){return this.options.numToKeep>0&&e>this.options.numToKeep}};const Lc=Mc;var jc=class extends Lc{constructor(e,t,n,r){r||(r={}),t&&(r.maxSize=t),r.numBackups||0===r.numBackups||(n||0===n||(n=1),r.numBackups=n),super(e,r),this.backups=r.numBackups,this.size=this.options.maxSize}get theStream(){return this.currentFileStream}};const $c=Mc;var Hc={RollingFileWriteStream:Mc,RollingFileStream:jc,DateRollingFileStream:class extends $c{constructor(e,t,n){t&&"object"==typeof t&&(n=t,t=null),n||(n={}),t||(t="yyyy-MM-dd"),n.pattern=t,n.numBackups||0===n.numBackups?n.daysToKeep=n.numBackups:(n.daysToKeep||0===n.daysToKeep?process.emitWarning("options.daysToKeep is deprecated due to the confusion it causes when used together with file size rolling. Please use options.numBackups instead.","DeprecationWarning","streamroller-DEP0001"):n.daysToKeep=1,n.numBackups=n.daysToKeep),super(e,n),this.mode=this.options.mode}get theStream(){return this.currentFileStream}}};const Jc=Nr.exports("log4js:file"),Gc=p.default,Vc=Hc,Uc=E.default.EOL;let Wc=!1;const zc=new Set;function Kc(){zc.forEach((e=>{e.sighupHandler()}))}function qc(e,t,n,r){const u=new Vc.RollingFileStream(e,t,n,r);return u.on("error",(t=>{console.error("log4js.fileAppender - Writing to file %s, error happened ",e,t)})),u.on("drain",(()=>{process.emit("log4js:pause",!1)})),u}Eo.configure=function(e,t){let n=t.basicLayout;return e.layout&&(n=t.layout(e.layout.type,e.layout)),e.mode=e.mode||384,function(e,t,n,r,u,o){e=Gc.normalize(e),Jc("Creating file appender (",e,", ",n,", ",r=r||0===r?r:5,", ",u,", ",o,")");let i=qc(e,n,r,u);const s=function(e){if(i.writable){if(!0===u.removeColor){const t=/\x1b[[0-9;]*m/g;e.data=e.data.map((e=>"string"==typeof e?e.replace(t,""):e))}i.write(t(e,o)+Uc,"utf8")||process.emit("log4js:pause",!0)}};return s.reopen=function(){i.end((()=>{i=qc(e,n,r,u)}))},s.sighupHandler=function(){Jc("SIGHUP handler called."),s.reopen()},s.shutdown=function(e){zc.delete(s),0===zc.size&&Wc&&(process.removeListener("SIGHUP",Kc),Wc=!1),i.end("","utf-8",e)},zc.add(s),Wc||(process.on("SIGHUP",Kc),Wc=!0),s}(e.filename,n,e.maxLogSize,e.backups,e,e.timezoneOffset)};var Yc={};const Xc=Hc,Zc=E.default.EOL;function Qc(e,t,n,r,u){r.maxSize=r.maxLogSize;const o=function(e,t,n){const r=new Xc.DateRollingFileStream(e,t,n);return r.on("error",(t=>{console.error("log4js.dateFileAppender - Writing to file %s, error happened ",e,t)})),r.on("drain",(()=>{process.emit("log4js:pause",!1)})),r}(e,t,r),i=function(e){o.writable&&(o.write(n(e,u)+Zc,"utf8")||process.emit("log4js:pause",!0))};return i.shutdown=function(e){o.end("","utf-8",e)},i}Yc.configure=function(e,t){let n=t.basicLayout;return e.layout&&(n=t.layout(e.layout.type,e.layout)),e.alwaysIncludePattern||(e.alwaysIncludePattern=!1),e.mode=e.mode||384,Qc(e.filename,e.pattern,n,e,e.timezoneOffset)};var ea={};const ta=Nr.exports("log4js:fileSync"),na=p.default,ra=D.default,ua=E.default.EOL||"\n";function oa(e,t){if(ra.existsSync(e))return;const n=ra.openSync(e,t.flags,t.mode);ra.closeSync(n)}class ia{constructor(e,t,n,r){ta("In RollingFileStream"),function(){if(!e||!t||t<=0)throw new Error("You must specify a filename and file size")}(),this.filename=e,this.size=t,this.backups=n,this.options=r,this.currentSize=0,this.currentSize=function(e){let t=0;try{t=ra.statSync(e).size}catch(t){oa(e,r)}return t}(this.filename)}shouldRoll(){return ta("should roll with current size %d, and max size %d",this.currentSize,this.size),this.currentSize>=this.size}roll(e){const t=this,n=new RegExp(`^${na.basename(e)}`);function r(e){return n.test(e)}function u(t){return parseInt(t.substring(`${na.basename(e)}.`.length),10)||0}function o(e,t){return u(e)>u(t)?1:u(e) ${e}.${r+1}`),ra.renameSync(na.join(na.dirname(e),n),`${e}.${r+1}`)}}ta("Rolling, rolling, rolling"),ta("Renaming the old files"),ra.readdirSync(na.dirname(e)).filter(r).sort(o).reverse().forEach(i)}write(e,t){const n=this;ta("in write"),this.shouldRoll()&&(this.currentSize=0,this.roll(this.filename)),ta("writing the chunk to the file"),n.currentSize+=e.length,ra.appendFileSync(n.filename,e)}}ea.configure=function(e,t){let n=t.basicLayout;e.layout&&(n=t.layout(e.layout.type,e.layout));const r={flags:e.flags||"a",encoding:e.encoding||"utf8",mode:e.mode||384};return function(e,t,n,r,u,o){ta("fileSync appender created");const i=function(e,t,n){let r;var u;return t?r=new ia(e,t,n,o):(oa(u=e,o),r={write(e){ra.appendFileSync(u,e)}}),r}(e=na.normalize(e),n,r=r||0===r?r:5);return e=>{i.write(t(e,u)+ua)}}(e.filename,n,e.maxLogSize,e.backups,e.timezoneOffset,r)};var sa={};const ca=Nr.exports("log4js:tcp"),aa=S.default;sa.configure=function(e,t){ca(`configure with config = ${e}`);let n=function(e){return e.serialise()};return e.layout&&(n=t.layout(e.layout.type,e.layout)),function(e,t){let n=!1;const r=[];let u,o=3,i="__LOG4JS__";function s(e){ca("Writing log event to socket"),n=u.write(`${t(e)}${i}`,"utf8")}function c(){let e;for(ca("emptying buffer");e=r.shift();)s(e)}function a(e){n?s(e):(ca("buffering log event because it cannot write at the moment"),r.push(e))}return function t(){ca(`appender creating socket to ${e.host||"localhost"}:${e.port||5e3}`),i=`${e.endMsg||"__LOG4JS__"}`,u=aa.createConnection(e.port||5e3,e.host||"localhost"),u.on("connect",(()=>{ca("socket connected"),c(),n=!0})),u.on("drain",(()=>{ca("drain event received, emptying buffer"),n=!0,c()})),u.on("timeout",u.end.bind(u)),u.on("error",(e=>{ca("connection error",e),n=!1,c()})),u.on("close",t)}(),a.shutdown=function(e){ca("shutdown called"),r.length&&o?(ca("buffer has items, waiting 100ms to empty"),o-=1,setTimeout((()=>{a.shutdown(e)}),100)):(u.removeAllListeners("close"),u.end(e))},a}(e,n)};const la=p.default,fa=Nr.exports("log4js:appenders"),da=tu,Da=eo,pa=gu,Ea=hu,ma=to,ha=new Map;ha.set("console",oo),ha.set("stdout",so),ha.set("stderr",co),ha.set("logLevelFilter",ao),ha.set("categoryFilter",lo),ha.set("noLogFilter",Do),ha.set("file",Eo),ha.set("dateFile",Yc),ha.set("fileSync",ea),ha.set("tcp",sa);const ya=new Map,Ca=(e,t)=>{fa("Loading module from ",e);try{return require(e)}catch(n){return void da.throwExceptionIf(t,"MODULE_NOT_FOUND"!==n.code,`appender "${e}" could not be loaded (error was: ${n})`)}},Fa=new Set,ga=(e,t)=>{if(ya.has(e))return ya.get(e);if(!t.appenders[e])return!1;if(Fa.has(e))throw new Error(`Dependency loop detected for appender ${e}.`);Fa.add(e),fa(`Creating appender ${e}`);const n=Aa(e,t);return Fa.delete(e),ya.set(e,n),n},Aa=(e,t)=>{const n=t.appenders[e],r=n.type.configure?n.type:((e,t)=>ha.get(e)||Ca(`./${e}`,t)||Ca(e,t)||require.main&&Ca(la.join(la.dirname(require.main.filename),e),t)||Ca(la.join(process.cwd(),e),t))(n.type,t);return da.throwExceptionIf(t,da.not(r),`appender "${e}" is not valid (type "${n.type}" could not be found)`),r.appender&&fa(`DEPRECATION: Appender ${n.type} exports an appender function.`),r.shutdown&&fa(`DEPRECATION: Appender ${n.type} exports a shutdown function.`),fa(`${e}: clustering.isMaster ? ${Da.isMaster()}`),fa(`${e}: appenderModule is ${F.default.inspect(r)}`),Da.onlyOnMaster((()=>(fa(`calling appenderModule.configure for ${e} / ${n.type}`),r.configure(ma.modifyConfig(n),Ea,(e=>ga(e,t)),pa))),(()=>{}))},va=e=>{ya.clear(),Fa.clear();const t=[];Object.values(e.categories).forEach((e=>{t.push(...e.appenders)})),Object.keys(e.appenders).forEach((n=>{(t.includes(n)||"tcp-server"===e.appenders[n].type)&&ga(n,e)}))},Sa=()=>{va({appenders:{out:{type:"stdout"}},categories:{default:{appenders:["out"],level:"trace"}}})};Sa(),da.addListener((e=>{da.throwExceptionIf(e,da.not(da.anObject(e.appenders)),'must have a property "appenders" of type object.');const t=Object.keys(e.appenders);da.throwExceptionIf(e,da.not(t.length),"must define at least one appender."),t.forEach((t=>{da.throwExceptionIf(e,da.not(e.appenders[t].type),`appender "${t}" is not valid (must be an object with property "type")`)}))})),da.addListener(va),Au.exports=ya,Au.exports.init=Sa;var wa={exports:{}};!function(e){const t=Nr.exports("log4js:categories"),n=tu,r=gu,u=Au.exports,o=new Map;function i(e,t,n){if(!1===t.inherit)return;const r=n.lastIndexOf(".");if(r<0)return;const u=n.substring(0,r);let o=e.categories[u];o||(o={inherit:!0,appenders:[]}),i(e,o,u),!e.categories[u]&&o.appenders&&o.appenders.length&&o.level&&(e.categories[u]=o),t.appenders=t.appenders||[],t.level=t.level||o.level,o.appenders.forEach((e=>{t.appenders.includes(e)||t.appenders.push(e)})),t.parent=o}function s(e){if(!e.categories)return;Object.keys(e.categories).forEach((t=>{const n=e.categories[t];i(e,n,t)}))}n.addPreProcessingListener((e=>s(e))),n.addListener((e=>{n.throwExceptionIf(e,n.not(n.anObject(e.categories)),'must have a property "categories" of type object.');const t=Object.keys(e.categories);n.throwExceptionIf(e,n.not(t.length),"must define at least one category."),t.forEach((t=>{const o=e.categories[t];n.throwExceptionIf(e,[n.not(o.appenders),n.not(o.level)],`category "${t}" is not valid (must be an object with properties "appenders" and "level")`),n.throwExceptionIf(e,n.not(Array.isArray(o.appenders)),`category "${t}" is not valid (appenders must be an array of appender names)`),n.throwExceptionIf(e,n.not(o.appenders.length),`category "${t}" is not valid (appenders must contain at least one appender name)`),Object.prototype.hasOwnProperty.call(o,"enableCallStack")&&n.throwExceptionIf(e,"boolean"!=typeof o.enableCallStack,`category "${t}" is not valid (enableCallStack must be boolean type)`),o.appenders.forEach((r=>{n.throwExceptionIf(e,n.not(u.get(r)),`category "${t}" is not valid (appender "${r}" is not defined)`)})),n.throwExceptionIf(e,n.not(r.getLevel(o.level)),`category "${t}" is not valid (level "${o.level}" not recognised; valid levels are ${r.levels.join(", ")})`)})),n.throwExceptionIf(e,n.not(e.categories.default),'must define a "default" category.')}));const c=e=>{o.clear();Object.keys(e.categories).forEach((n=>{const i=e.categories[n],s=[];i.appenders.forEach((e=>{s.push(u.get(e)),t(`Creating category ${n}`),o.set(n,{appenders:s,level:r.getLevel(i.level),enableCallStack:i.enableCallStack||!1})}))}))},a=()=>{c({categories:{default:{appenders:["out"],level:"OFF"}}})};a(),n.addListener(c);const l=e=>(t(`configForCategory: searching for config for ${e}`),o.has(e)?(t(`configForCategory: ${e} exists in config, returning it`),o.get(e)):e.indexOf(".")>0?(t(`configForCategory: ${e} has hierarchy, searching for parents`),l(e.substring(0,e.lastIndexOf(".")))):(t("configForCategory: returning config for default category"),l("default")));e.exports=o,e.exports=Object.assign(e.exports,{appendersForCategory:e=>l(e).appenders,getLevelForCategory:e=>l(e).level,setLevelForCategory:(e,n)=>{let r=o.get(e);if(t(`setLevelForCategory: found ${r} for ${e}`),!r){const n=l(e);t(`setLevelForCategory: no config found for category, found ${n} for parents of ${e}`),r={appenders:n.appenders}}r.level=n,o.set(e,r)},getEnableCallStackForCategory:e=>!0===l(e).enableCallStack,setEnableCallStackForCategory:(e,t)=>{l(e).enableCallStack=t},init:a})}(wa);const Oa=Nr.exports("log4js:logger"),ba=Hu,_a=gu,Ba=eo,Pa=wa.exports,ka=tu,xa=/at (?:(.+)\s+\()?(?:(.+?):(\d+)(?::(\d+))?|([^)]+))\)?/;function Na(e,t=4){const n=e.stack.split("\n").slice(t),r=xa.exec(n[0]);return r&&6===r.length?{functionName:r[1],fileName:r[2],lineNumber:parseInt(r[3],10),columnNumber:parseInt(r[4],10),callStack:n.join("\n")}:null}class Ia{constructor(e){if(!e)throw new Error("No category provided.");this.category=e,this.context={},this.parseCallStack=Na,Oa(`Logger created (${this.category}, ${this.level})`)}get level(){return _a.getLevel(Pa.getLevelForCategory(this.category),_a.TRACE)}set level(e){Pa.setLevelForCategory(this.category,_a.getLevel(e,this.level))}get useCallStack(){return Pa.getEnableCallStackForCategory(this.category)}set useCallStack(e){Pa.setEnableCallStackForCategory(this.category,!0===e)}log(e,...t){let n=_a.getLevel(e);n||(this._log(_a.WARN,"log4js:logger.log: invalid value for log-level as first parameter given: ",e),n=_a.INFO),this.isLevelEnabled(n)&&this._log(n,t)}isLevelEnabled(e){return this.level.isLessThanOrEqualTo(e)}_log(e,t){Oa(`sending log data (${e}) to appenders`);const n=new ba(this.category,e,t,this.context,this.useCallStack&&this.parseCallStack(new Error));Ba.send(n)}addContext(e,t){this.context[e]=t}removeContext(e){delete this.context[e]}clearContext(){this.context={}}setParseCallStackFunction(e){this.parseCallStack=e}}function Ta(e){const t=_a.getLevel(e),n=t.toString().toLowerCase().replace(/_([a-z])/g,(e=>e[1].toUpperCase())),r=n[0].toUpperCase()+n.slice(1);Ia.prototype[`is${r}Enabled`]=function(){return this.isLevelEnabled(t)},Ia.prototype[n]=function(...e){this.log(t,...e)}}_a.levels.forEach(Ta),ka.addListener((()=>{_a.levels.forEach(Ta)}));var Ra=Ia;const Ma=gu;function La(e){return e.originalUrl||e.url}function ja(e,t){for(let n=0;ne.source?e.source:e));t=new RegExp(n.join("|"))}return t}(t.nolog);return(e,i,s)=>{if(e._logging)return s();if(o&&o.test(e.originalUrl))return s();if(n.isLevelEnabled(r)||"auto"===t.level){const o=new Date,{writeHead:s}=i;e._logging=!0,i.writeHead=(e,t)=>{i.writeHead=s,i.writeHead(e,t),i.__statusCode=e,i.__headers=t||{}},i.on("finish",(()=>{i.responseTime=new Date-o,i.statusCode&&"auto"===t.level&&(r=Ma.INFO,i.statusCode>=300&&(r=Ma.WARN),i.statusCode>=400&&(r=Ma.ERROR)),r=function(e,t,n){let r=t;if(n){const t=n.find((t=>{let n=!1;return n=t.from&&t.to?e>=t.from&&e<=t.to:-1!==t.codes.indexOf(e),n}));t&&(r=Ma.getLevel(t.level,r))}return r}(i.statusCode,r,t.statusRules);const s=function(e,t,n){const r=[];return r.push({token:":url",replacement:La(e)}),r.push({token:":protocol",replacement:e.protocol}),r.push({token:":hostname",replacement:e.hostname}),r.push({token:":method",replacement:e.method}),r.push({token:":status",replacement:t.__statusCode||t.statusCode}),r.push({token:":response-time",replacement:t.responseTime}),r.push({token:":date",replacement:(new Date).toUTCString()}),r.push({token:":referrer",replacement:e.headers.referer||e.headers.referrer||""}),r.push({token:":http-version",replacement:`${e.httpVersionMajor}.${e.httpVersionMinor}`}),r.push({token:":remote-addr",replacement:e.headers["x-forwarded-for"]||e.ip||e._remoteAddress||e.socket&&(e.socket.remoteAddress||e.socket.socket&&e.socket.socket.remoteAddress)}),r.push({token:":user-agent",replacement:e.headers["user-agent"]}),r.push({token:":content-length",replacement:t.getHeader("content-length")||t.__headers&&t.__headers["Content-Length"]||"-"}),r.push({token:/:req\[([^\]]+)]/g,replacement:(t,n)=>e.headers[n.toLowerCase()]}),r.push({token:/:res\[([^\]]+)]/g,replacement:(e,n)=>t.getHeader(n.toLowerCase())||t.__headers&&t.__headers[n]}),(e=>{const t=e.concat();for(let e=0;eja(e,s)));t&&n.log(r,t)}else n.log(r,ja(u,s));t.context&&n.removeContext("res")}))}return s()}},nl=Va;let rl=!1;function ul(e){if(!rl)return;Ua("Received log event ",e);Za.appendersForCategory(e.categoryName).forEach((t=>{t(e)}))}function ol(e){rl&&il();let t=e;return"string"==typeof t&&(t=function(e){Ua(`Loading configuration from ${e}`);try{return JSON.parse(Wa.readFileSync(e,"utf8"))}catch(t){throw new Error(`Problem reading config from file "${e}". Error was ${t.message}`,t)}}(e)),Ua(`Configuration is ${t}`),Ka.configure(za(t)),el.onMessage(ul),rl=!0,sl}function il(e){Ua("Shutdown called. Disabling all log writing."),rl=!1;const t=Array.from(Xa.values());Xa.init(),Za.init();const n=t.reduceRight(((e,t)=>t.shutdown?e+1:e),0);if(0===n)return Ua("No appenders with shutdown functions found."),void 0!==e&&e();let r,u=0;function o(t){r=r||t,u+=1,Ua(`Appender shutdowns complete: ${u} / ${n}`),u>=n&&(Ua("All shutdown functions completed."),e&&e(r))}return Ua(`Found ${n} appenders with shutdown functions.`),t.filter((e=>e.shutdown)).forEach((e=>e.shutdown(o))),null}const sl={getLogger:function(e){return rl||ol(process.env.LOG4JS_CONFIG||{appenders:{out:{type:"stdout"}},categories:{default:{appenders:["out"],level:"OFF"}}}),new Qa(e||"default")},configure:ol,shutdown:il,connectLogger:tl,levels:Ya,addLayout:qa.addLayout,recording:function(){return nl}};var cl=sl,al={};Object.defineProperty(al,"__esModule",{value:!0}),al.levelMap=al.getLevel=al.setCategoriesLevel=al.getConfiguration=al.setConfiguration=void 0;const ll=cl;let fl={appenders:{debug:{type:"stdout",layout:{type:"pattern",pattern:"[%d] > hvigor %p %c %[%m%]"}},info:{type:"stdout",layout:{type:"pattern",pattern:"[%d] > hvigor %[%m%]"}},"no-pattern-info":{type:"stdout",layout:{type:"pattern",pattern:"%m"}},wrong:{type:"stderr",layout:{type:"pattern",pattern:"[%d] > hvigor %[%p: %m%]"}},"just-debug":{type:"logLevelFilter",appender:"debug",level:"debug",maxLevel:"debug"},"just-info":{type:"logLevelFilter",appender:"info",level:"info",maxLevel:"info"},"just-wrong":{type:"logLevelFilter",appender:"wrong",level:"warn",maxLevel:"error"}},categories:{default:{appenders:["just-debug","just-info","just-wrong"],level:"debug"},"no-pattern-info":{appenders:["no-pattern-info"],level:"info"}}};al.setConfiguration=e=>{fl=e};al.getConfiguration=()=>fl;let dl=ll.levels.DEBUG;al.setCategoriesLevel=(e,t)=>{dl=e;const n=fl.categories;for(const r in n)(null==t?void 0:t.includes(r))||Object.prototype.hasOwnProperty.call(n,r)&&(n[r].level=e.levelStr)};al.getLevel=()=>dl,al.levelMap=new Map([["ALL",ll.levels.ALL],["MARK",ll.levels.MARK],["TRACE",ll.levels.TRACE],["DEBUG",ll.levels.DEBUG],["INFO",ll.levels.INFO],["WARN",ll.levels.WARN],["ERROR",ll.levels.ERROR],["FATAL",ll.levels.FATAL],["OFF",ll.levels.OFF]]);var Dl=w&&w.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var u=Object.getOwnPropertyDescriptor(t,n);u&&!("get"in u?!t.__esModule:u.writable||u.configurable)||(u={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,u)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),pl=w&&w.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),El=w&&w.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&Dl(t,e,n);return pl(t,e),t};Object.defineProperty(xr,"__esModule",{value:!0}),xr.evaluateLogLevel=xr.HvigorLogger=void 0;const ml=El(cl),hl=cl,yl=El(F.default),Cl=al;class Fl{constructor(e){ml.configure((0,Cl.getConfiguration)()),this._logger=ml.getLogger(e),this._logger.level=(0,Cl.getLevel)()}static getLogger(e){return new Fl(e)}log(e,...t){this._logger.log(e,...t)}debug(e,...t){this._logger.debug(e,...t)}info(e,...t){this._logger.info(e,...t)}warn(e,...t){void 0!==e&&""!==e&&this._logger.warn(e,...t)}error(e,...t){this._logger.error(e,...t)}_printTaskExecuteInfo(e,t){this.info(`Finished :${e}... after ${t}`)}_printFailedTaskInfo(e){this.error(`Failed :${e}... `)}_printDisabledTaskInfo(e){this.info(`Disabled :${e}... `)}_printUpToDateTaskInfo(e){this.info(`UP-TO-DATE :${e}... `)}errorMessageExit(e,...t){throw new Error(yl.format(e,...t))}errorExit(e,t,...n){t&&this._logger.error(t,n),this._logger.error(e.stack)}setLevel(e,t){(0,Cl.setCategoriesLevel)(e,t),ml.shutdown(),ml.configure((0,Cl.getConfiguration)())}getLevel(){return this._logger.level}configure(e){const t=(0,Cl.getConfiguration)(),n={appenders:{...t.appenders,...e.appenders},categories:{...t.categories,...e.categories}};(0,Cl.setConfiguration)(n),ml.shutdown(),ml.configure(n)}}xr.HvigorLogger=Fl,xr.evaluateLogLevel=function(e,t){t.debug?e.setLevel(hl.levels.DEBUG):t.warn?e.setLevel(hl.levels.WARN):t.error?e.setLevel(hl.levels.ERROR):e.setLevel(hl.levels.INFO)};var gl=w&&w.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(X,"__esModule",{value:!0}),X.parseJsonText=X.parseJsonFile=void 0;const Al=Z,vl=gl(kr),Sl=gl(p.default),wl=gl(E.default),Ol=xr.HvigorLogger.getLogger("parse-json-util");var bl;!function(e){e[e.Char=0]="Char",e[e.EOF=1]="EOF",e[e.Identifier=2]="Identifier"}(bl||(bl={}));let _l,Bl,Pl,kl,xl,Nl,Il="start",Tl=[],Rl=0,Ml=1,Ll=0,jl=!1,$l="default",Hl="'",Jl=1;function Gl(e,t=!1){Bl=String(e),Il="start",Tl=[],Rl=0,Ml=1,Ll=0,kl=void 0,jl=t;do{_l=Vl(),Xl[Il]()}while("eof"!==_l.type);return kl}function Vl(){for($l="default",xl="",Hl="'",Jl=1;;){Nl=Ul();const e=zl[$l]();if(e)return e}}function Ul(){if(Bl[Rl])return String.fromCodePoint(Bl.codePointAt(Rl))}function Wl(){const e=Ul();return"\n"===e?(Ml++,Ll=0):e?Ll+=e.length:Ll++,e&&(Rl+=e.length),e}X.parseJsonFile=function(e,t=!1,n="utf-8"){const r=vl.default.readFileSync(Sl.default.resolve(e),{encoding:n});try{return Gl(r,t)}catch(t){if(t instanceof SyntaxError){const n=t.message.split("at");2===n.length&&Ol.errorMessageExit(`${n[0].trim()}${wl.default.EOL}\t at ${e}:${n[1].trim()}`)}Ol.errorMessageExit(`${e} is not in valid JSON/JSON5 format.`)}},X.parseJsonText=Gl;const zl={default(){switch(Nl){case"/":return Wl(),void($l="comment");case void 0:return Wl(),Kl("eof")}if(!Al.JudgeUtil.isIgnoreChar(Nl)&&!Al.JudgeUtil.isSpaceSeparator(Nl))return zl[Il]();Wl()},start(){$l="value"},beforePropertyName(){switch(Nl){case"$":case"_":return xl=Wl(),void($l="identifierName");case"\\":return Wl(),void($l="identifierNameStartEscape");case"}":return Kl("punctuator",Wl());case'"':case"'":return Hl=Nl,Wl(),void($l="string")}if(Al.JudgeUtil.isIdStartChar(Nl))return xl+=Wl(),void($l="identifierName");throw tf(bl.Char,Wl())},afterPropertyName(){if(":"===Nl)return Kl("punctuator",Wl());throw tf(bl.Char,Wl())},beforePropertyValue(){$l="value"},afterPropertyValue(){switch(Nl){case",":case"}":return Kl("punctuator",Wl())}throw tf(bl.Char,Wl())},beforeArrayValue(){if("]"===Nl)return Kl("punctuator",Wl());$l="value"},afterArrayValue(){switch(Nl){case",":case"]":return Kl("punctuator",Wl())}throw tf(bl.Char,Wl())},end(){throw tf(bl.Char,Wl())},comment(){switch(Nl){case"*":return Wl(),void($l="multiLineComment");case"/":return Wl(),void($l="singleLineComment")}throw tf(bl.Char,Wl())},multiLineComment(){switch(Nl){case"*":return Wl(),void($l="multiLineCommentAsterisk");case void 0:throw tf(bl.Char,Wl())}Wl()},multiLineCommentAsterisk(){switch(Nl){case"*":return void Wl();case"/":return Wl(),void($l="default");case void 0:throw tf(bl.Char,Wl())}Wl(),$l="multiLineComment"},singleLineComment(){switch(Nl){case"\n":case"\r":case"\u2028":case"\u2029":return Wl(),void($l="default");case void 0:return Wl(),Kl("eof")}Wl()},value(){switch(Nl){case"{":case"[":return Kl("punctuator",Wl());case"n":return Wl(),ql("ull"),Kl("null",null);case"t":return Wl(),ql("rue"),Kl("boolean",!0);case"f":return Wl(),ql("alse"),Kl("boolean",!1);case"-":case"+":return"-"===Wl()&&(Jl=-1),void($l="numerical");case".":case"0":case"I":case"N":return void($l="numerical");case'"':case"'":return Hl=Nl,Wl(),xl="",void($l="string")}if(void 0===Nl||!Al.JudgeUtil.isDigitWithoutZero(Nl))throw tf(bl.Char,Wl());$l="numerical"},numerical(){switch(Nl){case".":return xl=Wl(),void($l="decimalPointLeading");case"0":return xl=Wl(),void($l="zero");case"I":return Wl(),ql("nfinity"),Kl("numeric",Jl*(1/0));case"N":return Wl(),ql("aN"),Kl("numeric",NaN)}if(void 0!==Nl&&Al.JudgeUtil.isDigitWithoutZero(Nl))return xl=Wl(),void($l="decimalInteger");throw tf(bl.Char,Wl())},zero(){switch(Nl){case".":case"e":case"E":return void($l="decimal");case"x":case"X":return xl+=Wl(),void($l="hexadecimal")}return Kl("numeric",0)},decimalInteger(){switch(Nl){case".":case"e":case"E":return void($l="decimal")}if(!Al.JudgeUtil.isDigit(Nl))return Kl("numeric",Jl*Number(xl));xl+=Wl()},decimal(){switch(Nl){case".":xl+=Wl(),$l="decimalFraction";break;case"e":case"E":xl+=Wl(),$l="decimalExponent"}},decimalPointLeading(){if(Al.JudgeUtil.isDigit(Nl))return xl+=Wl(),void($l="decimalFraction");throw tf(bl.Char,Wl())},decimalFraction(){switch(Nl){case"e":case"E":return xl+=Wl(),void($l="decimalExponent")}if(!Al.JudgeUtil.isDigit(Nl))return Kl("numeric",Jl*Number(xl));xl+=Wl()},decimalExponent(){switch(Nl){case"+":case"-":return xl+=Wl(),void($l="decimalExponentSign")}if(Al.JudgeUtil.isDigit(Nl))return xl+=Wl(),void($l="decimalExponentInteger");throw tf(bl.Char,Wl())},decimalExponentSign(){if(Al.JudgeUtil.isDigit(Nl))return xl+=Wl(),void($l="decimalExponentInteger");throw tf(bl.Char,Wl())},decimalExponentInteger(){if(!Al.JudgeUtil.isDigit(Nl))return Kl("numeric",Jl*Number(xl));xl+=Wl()},hexadecimal(){if(Al.JudgeUtil.isHexDigit(Nl))return xl+=Wl(),void($l="hexadecimalInteger");throw tf(bl.Char,Wl())},hexadecimalInteger(){if(!Al.JudgeUtil.isHexDigit(Nl))return Kl("numeric",Jl*Number(xl));xl+=Wl()},identifierNameStartEscape(){if("u"!==Nl)throw tf(bl.Char,Wl());Wl();const e=Yl();switch(e){case"$":case"_":break;default:if(!Al.JudgeUtil.isIdStartChar(e))throw tf(bl.Identifier)}xl+=e,$l="identifierName"},identifierName(){switch(Nl){case"$":case"_":case"‌":case"‍":return void(xl+=Wl());case"\\":return Wl(),void($l="identifierNameEscape")}if(!Al.JudgeUtil.isIdContinueChar(Nl))return Kl("identifier",xl);xl+=Wl()},identifierNameEscape(){if("u"!==Nl)throw tf(bl.Char,Wl());Wl();const e=Yl();switch(e){case"$":case"_":case"‌":case"‍":break;default:if(!Al.JudgeUtil.isIdContinueChar(e))throw tf(bl.Identifier)}xl+=e,$l="identifierName"},string(){switch(Nl){case"\\":return Wl(),void(xl+=function(){const e=Ul(),t=function(){switch(Ul()){case"b":return Wl(),"\b";case"f":return Wl(),"\f";case"n":return Wl(),"\n";case"r":return Wl(),"\r";case"t":return Wl(),"\t";case"v":return Wl(),"\v"}return}();if(t)return t;switch(e){case"0":if(Wl(),Al.JudgeUtil.isDigit(Ul()))throw tf(bl.Char,Wl());return"\0";case"x":return Wl(),function(){let e="",t=Ul();if(!Al.JudgeUtil.isHexDigit(t))throw tf(bl.Char,Wl());if(e+=Wl(),t=Ul(),!Al.JudgeUtil.isHexDigit(t))throw tf(bl.Char,Wl());return e+=Wl(),String.fromCodePoint(parseInt(e,16))}();case"u":return Wl(),Yl();case"\n":case"\u2028":case"\u2029":return Wl(),"";case"\r":return Wl(),"\n"===Ul()&&Wl(),""}if(void 0===e||Al.JudgeUtil.isDigitWithoutZero(e))throw tf(bl.Char,Wl());return Wl()}());case'"':case"'":if(Nl===Hl){const e=Kl("string",xl);return Wl(),e}return void(xl+=Wl());case"\n":case"\r":case void 0:throw tf(bl.Char,Wl());case"\u2028":case"\u2029":!function(e){Ol.warn(`JSON5: '${ef(e)}' in strings is not valid ECMAScript; consider escaping.`)}(Nl)}xl+=Wl()}};function Kl(e,t){return{type:e,value:t,line:Ml,column:Ll}}function ql(e){for(const t of e){if(Ul()!==t)throw tf(bl.Char,Wl());Wl()}}function Yl(){let e="",t=4;for(;t-- >0;){const t=Ul();if(!Al.JudgeUtil.isHexDigit(t))throw tf(bl.Char,Wl());e+=Wl()}return String.fromCodePoint(parseInt(e,16))}const Xl={start(){if("eof"===_l.type)throw tf(bl.EOF);Zl()},beforePropertyName(){switch(_l.type){case"identifier":case"string":return Pl=_l.value,void(Il="afterPropertyName");case"punctuator":return void Ql();case"eof":throw tf(bl.EOF)}},afterPropertyName(){if("eof"===_l.type)throw tf(bl.EOF);Il="beforePropertyValue"},beforePropertyValue(){if("eof"===_l.type)throw tf(bl.EOF);Zl()},afterPropertyValue(){if("eof"===_l.type)throw tf(bl.EOF);switch(_l.value){case",":return void(Il="beforePropertyName");case"}":Ql()}},beforeArrayValue(){if("eof"===_l.type)throw tf(bl.EOF);"punctuator"!==_l.type||"]"!==_l.value?Zl():Ql()},afterArrayValue(){if("eof"===_l.type)throw tf(bl.EOF);switch(_l.value){case",":return void(Il="beforeArrayValue");case"]":Ql()}},end(){}};function Zl(){const e=function(){let e;switch(_l.type){case"punctuator":switch(_l.value){case"{":e={};break;case"[":e=[]}break;case"null":case"boolean":case"numeric":case"string":e=_l.value}return e}();if(jl&&"object"==typeof e&&(e._line=Ml,e._column=Ll),void 0===kl)kl=e;else{const t=Tl[Tl.length-1];Array.isArray(t)?jl&&"object"!=typeof e?t.push({value:e,_line:Ml,_column:Ll}):t.push(e):t[Pl]=jl&&"object"!=typeof e?{value:e,_line:Ml,_column:Ll}:e}!function(e){if(e&&"object"==typeof e)Tl.push(e),Il=Array.isArray(e)?"beforeArrayValue":"beforePropertyName";else{const e=Tl[Tl.length-1];Il=e?Array.isArray(e)?"afterArrayValue":"afterPropertyValue":"end"}}(e)}function Ql(){Tl.pop();const e=Tl[Tl.length-1];Il=e?Array.isArray(e)?"afterArrayValue":"afterPropertyValue":"end"}function ef(e){const t={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};if(t[e])return t[e];if(e<" "){const t=e.charCodeAt(0).toString(16);return`\\x${`00${t}`.substring(t.length)}`}return e}function tf(e,t){let n="";switch(e){case bl.Char:n=void 0===t?`JSON5: invalid end of input at ${Ml}:${Ll}`:`JSON5: invalid character '${ef(t)}' at ${Ml}:${Ll}`;break;case bl.EOF:n=`JSON5: invalid end of input at ${Ml}:${Ll}`;break;case bl.Identifier:Ll-=5,n=`JSON5: invalid identifier character at ${Ml}:${Ll}`}const r=new nf(n);return r.lineNumber=Ml,r.columnNumber=Ll,r}class nf extends SyntaxError{}var rf=w&&w.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var u=Object.getOwnPropertyDescriptor(t,n);u&&!("get"in u?!t.__esModule:u.writable||u.configurable)||(u={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,u)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),uf=w&&w.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),of=w&&w.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&rf(t,e,n);return uf(t,e),t};Object.defineProperty(Y,"__esModule",{value:!0});var sf=Y.cleanWorkSpace=Ff=Y.executeInstallHvigor=yf=Y.isHvigorInstalled=mf=Y.isAllDependenciesInstalled=void 0;const cf=of(D.default),af=of(p.default),lf=b,ff=j,df=$,Df=X;let pf,Ef;var mf=Y.isAllDependenciesInstalled=function(){function e(e){const t=null==e?void 0:e.dependencies;return void 0===t?0:Object.getOwnPropertyNames(t).length}if(pf=gf(),Ef=Af(),e(pf)+1!==e(Ef))return!1;for(const e in null==pf?void 0:pf.dependencies)if(!(0,ff.hasNpmPackInPaths)(e,[lf.HVIGOR_PROJECT_DEPENDENCIES_HOME])||!hf(e,pf,Ef))return!1;return!0};function hf(e,t,n){return void 0!==n.dependencies&&(0,ff.offlinePluginConversion)(lf.HVIGOR_PROJECT_ROOT_DIR,t.dependencies[e])===n.dependencies[e]}var yf=Y.isHvigorInstalled=function(){return pf=gf(),Ef=Af(),(0,ff.hasNpmPackInPaths)(lf.HVIGOR_ENGINE_PACKAGE_NAME,[lf.HVIGOR_PROJECT_DEPENDENCIES_HOME])&&(0,ff.offlinePluginConversion)(lf.HVIGOR_PROJECT_ROOT_DIR,pf.hvigorVersion)===Ef.dependencies[lf.HVIGOR_ENGINE_PACKAGE_NAME]};const Cf={cwd:lf.HVIGOR_PROJECT_DEPENDENCIES_HOME,stdio:["inherit","inherit","inherit"]};var Ff=Y.executeInstallHvigor=function(){(0,df.logInfoPrintConsole)("Hvigor installing...");const e={dependencies:{}};e.dependencies[lf.HVIGOR_ENGINE_PACKAGE_NAME]=(0,ff.offlinePluginConversion)(lf.HVIGOR_PROJECT_ROOT_DIR,pf.hvigorVersion);try{cf.mkdirSync(lf.HVIGOR_PROJECT_DEPENDENCIES_HOME,{recursive:!0});const t=af.resolve(lf.HVIGOR_PROJECT_DEPENDENCIES_HOME,lf.DEFAULT_PACKAGE_JSON);cf.writeFileSync(t,JSON.stringify(e))}catch(e){(0,df.logErrorAndExit)(e)}!function(){const e=["config","set","store-dir",lf.HVIGOR_PNPM_STORE_PATH];(0,ff.executeCommand)(lf.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH,e,Cf)}(),(0,ff.executeCommand)(lf.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH,["install"],Cf)};function gf(){const e=af.resolve(lf.HVIGOR_PROJECT_WRAPPER_HOME,lf.DEFAULT_HVIGOR_CONFIG_JSON_FILE_NAME);return cf.existsSync(e)||(0,df.logErrorAndExit)(`Error: Hvigor config file ${e} does not exist.`),(0,Df.parseJsonFile)(e)}function Af(){return cf.existsSync(lf.HVIGOR_PROJECT_DEPENDENCY_PACKAGE_JSON_PATH)?(0,Df.parseJsonFile)(lf.HVIGOR_PROJECT_DEPENDENCY_PACKAGE_JSON_PATH):{dependencies:{}}}sf=Y.cleanWorkSpace=function(){if((0,df.logInfoPrintConsole)("Hvigor cleaning..."),!cf.existsSync(lf.HVIGOR_PROJECT_DEPENDENCIES_HOME))return;const e=cf.readdirSync(lf.HVIGOR_PROJECT_DEPENDENCIES_HOME);if(e&&0!==e.length){cf.existsSync(lf.HVIGOR_BOOT_JS_FILE_PATH)&&(0,ff.executeCommand)(process.argv[0],[lf.HVIGOR_BOOT_JS_FILE_PATH,"--stop-daemon"],{});try{e.forEach((e=>{cf.rmSync(af.resolve(lf.HVIGOR_PROJECT_DEPENDENCIES_HOME,e),{recursive:!0})}))}catch(e){(0,df.logErrorAndExit)(`The hvigor build tool cannot be installed. Please manually clear the workspace directory and synchronize the project again.\n\n Workspace Path: ${lf.HVIGOR_PROJECT_DEPENDENCIES_HOME}.`)}}};var vf={},Sf=w&&w.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var u=Object.getOwnPropertyDescriptor(t,n);u&&!("get"in u?!t.__esModule:u.writable||u.configurable)||(u={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,u)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),wf=w&&w.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Of=w&&w.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&Sf(t,e,n);return wf(t,e),t};Object.defineProperty(vf,"__esModule",{value:!0});var bf=vf.executeBuild=void 0;const _f=b,Bf=Of(D.default),Pf=Of(p.default),kf=$;bf=vf.executeBuild=function(){const e=Pf.resolve(_f.HVIGOR_PROJECT_DEPENDENCIES_HOME,"node_modules","@ohos","hvigor","bin","hvigor.js");try{const t=Bf.realpathSync(e);require(t)}catch(t){(0,kf.logErrorAndExit)(`Error: ENOENT: no such file ${e},delete ${_f.HVIGOR_PROJECT_DEPENDENCIES_HOME} and retry.`)}},function(){if(O.checkNpmConifg(),O.environmentHandler(),O.isPnpmAvailable()||O.executeInstallPnpm(),yf()&&mf())bf();else{sf();try{Ff()}catch(e){return void sf()}bf()}}(); \ No newline at end of file diff --git a/code/BasicFeature/FileManagement/FileManager/lib/MyPhoneFilePage-1.0.0.hap b/code/BasicFeature/FileManagement/FileManager/lib/MyPhoneFilePage-1.0.0.hap deleted file mode 100644 index c704302e531d4c2168f87c4b81071e23a122a93d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551895 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⁡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�vyn+263N+3ITxBc&T&v~9*kbdiFf9? zeB9-Y!pGJdf;12vx|FA+uCR1MSUWpATtzNGf^nI42t+3#yLa!VIwiqjD1Nj3=%XI0 zer>CJ;MecH<( z)>~lX{^Ck!xAf55$7l`z47Rl~TTbbRuRZd}7Z)z%R2OxdzW5JbBEN*n}~&RnTO9&y_7L2COljMr7$@kaI*xeYR^I<`9PuV zeG(AmPmeAV>=h@c@Y*GVQjFSBA97BEy6H>W7J{I_V_K1FMG6r0vF+Iu90K#idZbi= z%FU-Q2P#BvY>jn!f8|@o^TtvkBFj7iw#He; z+XW%Ykv)cJ;d17b8|vv2Gm-P%g5g`f>yv@iA6|4jiCVjX;*`Sxg}?v~{ln!jGFWbipFka4PEG{N z&G2CN3QQIb2ZyE1PebuZQFsN&X>73?*nH(5FlVvA+0*G<~KBeV|et20hb2?FX$~X=!zx=?uTlEI@ z+R>SdLD0Ik5 zz-z;8okxc~?d22|AO zhyy4Zi*46;_&r}cp%pF40}8fAlh;LX>DK~rlxuA@=2|T5Eyjj$ImUN;V?;U0AXsiz z>yQ`GDau#@h9~5#i)*BNg0wzQmCo8ItdwO0cLMr%lAVP}8g}K^;@2NbnH#ZD$8;z_ zBqrX041Yg(<@pfteKapVyzTtC{m-j0=lRCLn#n0So@yg!P$HJVfd_OyIlpJ`FIcN( zP3z}Sk9xgZ>%^1(`Y8#0MWQAz2CEc+CLbFVt3(eSSR!1`KB+$SNoZze&hGr0X_Ilm z<-;fjJfYQXMvGW7aRR^hiDSx2Y)JQ2_iLYXbJFXSBa+gIqW7IXJjG$jTJ; z+P~I|G4S=%$UhH~6MVqmb?uv7Tdw4`>JME3@@HYmVrJD(7c~&qD;fp5X3HYlZquM) zmU6|llR5n!bb+fk`A~P4OrL_(@ga7~dwgD6U8pPc%w1X8qT>CU8a}QlV&QSi{8__Qkoz0o;-mZT&J%B1uY^rlCiffsK zqC<$Ej6@4Y<5SWAaX%dj5+X1N4`uSyLbw`Hi(#z~lwiiNSQMiNlP{jqw_skQTzNt@ z;&#(clb%M^77t96O0UXziB?n#;Ygthz}P{}dRSx@HO=JB{CsU8(|}0>015yjSOO&$ zIL=%~;=>j&aZ6)1R1er1L-oQp>i36U0-Qa;`Jij2Pg5Hs=K(fV7$wU(3ayhq8xi_J zbN&WDoI^D$?8~j6+K9tcOR7MZi@ua5WnOtr$3d&*l-<>yneYyWz=KaWK&J`J=RVx{ z=97K(YAXNJE<@Fb?(W~Aib+`sa8OTJBjL{DWFV@o*wr5fI++mA8eahYN4%YsQ-Oj` zCMXzpf3V%W?7@wS1fmGUH2F5reVK9-a|#Z?W6G%9Z$aD3YfYyEx*b89EHhsQ9ibhQ zj1~kNWVmP`oieEQ9GmqR3A%fTVN;Ffg}?$dM;87MDE9M-8use1uRGqy{5{+<(B&9; z3I%{a;qS*H|G+H=$G||ptN&YLkuqR;|I{zDN!sxT5B^t81AyRasq1EF2#A3RZ~zkL z3Bdkj0Rs;h0Dz_l0?>e4$e*|(=zpZj6w&<0{-r+|m$0RS005Q#$Ji!hGtWl<2@Y{< z!|wBLNmRDZ(GkB1B7A4e#`xj&1FEY~lmEJrW5mU-iF z?^Fy7UT60N>5lzo=^WV>yVi?7w5o^gujpgfpdsCEXjO2f_9{8Y{1|Vc_|H`Sc3V-;pEq6YFu2(3DSBbr_YJ8=~gVgAXf7J5u z$20CU;8e-hJ*`E%k=NlOjKKSc18>+a$dStP$H~A)mLuWn``8`hS?+m2^}RG9WR=s> zu;TlTqJr7hF?RKhMrUb&bqCl7WLUQ$m&E3IdTqOeNQt51fbtFpQ2$<^rY%vL0fFgZ z!{r>X0LAa)pfQR3P#MM@VDjwwB?mFzr|^Q+9pc&B3MY;MZ~Yi8b`Zr759=*|&ik~z z>F)w#$Z_zo=NQJz5)7A}=vk!Gv(ribCw%eI*Jd-{Sa>!v`d>ZGNBOruD*u%Q`XTN7 zUY~anq(4>Y-+LfWNaa4A0BZUD3H*OIKp*7l7e`iCGJ6lAs#(_@7V@}Yp!i)2$>Hh_XXW|*Ty3-nj; zR;7yoXkDH>8DB<#Y^ZD^WDMZa6%-ubumOnt%Vl~c014~q(bpsjpq1u`nFI)+`+PFS z^CE!r=|~fchXUzk#SAYh0MhGVK{FOw0IRFXT44wQ{yPQNGE-Bf1va+7yi;N)D(Xc( za*&&TxB5sYQxW?v6F|cFQu&L1-ery! zY&eBi2gg*xuKUjXdYS(V<+vgaMO&wtOgz2?&1QtN>pv^ zze)dWfK#Xi^9VbHmyXvizFeF(z=au5C&ns;u6nw6j8}d7viPdwVa?YY8>XukPe-8y z*1*jK8>wXdkX!SY8elB}Jdqe;Fk|1Ft-M5!ww16kp#Svtq>3r@nN6E@*>%S#E#6)Z zqo#(H)BL#*va836l)+US%3?D#i@tn;!ueLp59g(o+mo<3&7#WGAn~&8oJ2RIYE7-e za5OM1#QJ43rR_%_Dv1BRpN2UA6Pt6IM!IrnuoiM;r;nZDWy_v8_{k7^x=`(l{^Z zx9S(Mzpc-e<+YPX9)?QGXN{}B9mpE7@q7p9S)8`(VmXG0wfM>NNTK0*w_LWNrZi6P z)W_450poNN@y%-vYceCQCCAa%^L$qBnLtfCqE=`>4bu%9eUrJlBj=Jsl5g{l=6Z5K zi&OG{5i0;t?`rQuuV`NIWoID)RP)%alguQ5=y$<4lmCD8@v(^ueji`C-wC;K^P1MD zd$0PTa1yg}@O|jk4NW8ekGv-Z(GUc%w(_p{dq$V%jee#<2n-j?)2Z`8$p79QB!9!7 z)Wt=|YcIo*KK)lu17K=yr{dD{`;m87k`B((gKwcGHLgth@Yjs%;vV{B9%huaSX1JR zoADQh4;u%$(ZT*OQZORGh~ryUfPMn+v+MWXg0J|;TU-uF-&*aNTDiDcE0&vB1}i)M{31zGRw}u!NMuXf3=XXi?3_0IDXv zhf)*#W%`}SD^Q&gy(#kCPF~R({v+P&m&pyk&B!Ms&@S_8E+;z?#D{nz-{yT5ON(kY zPnZgqlWaeahTVo<=BnJ5Jf!ce(Tqs=w5j*6h<=(l$zcdQh{AEyrPsNx$NuLQ=Fn}~ z#^A%8K()XwoX|M&{C(klPn)a&wc}s}91VcS&T*Myv6jpa^T4dH8RNc1KFM16b0^h@ zFFKOWtV@!oBH6$R-gpw#L(o3kYI5s?4fq_5$5DCFE6Qu%%6XfmOG`QBau+6rUU-yr zKt*O2jDAi=tL&pElqO5=e`u;T9XsbwJYiDYTYE|){&5M9=RQpw``3f5X{(#x>oKLV z3a@C#;FjHk*?r~-bnzkOdW+hs{+1$#W3z4tD{flAa=ru-?P*t)5WIlEiLvGE5FQv@ zcGqyK+Ma=l*PE&}OfWwx+rYCuh_zfDHWQtYM?+Fx)zP5O*H{YO-m@`7Vo#5*K4iB2 zBAK$$p?%KZ@&~RXgrB4WDRHW;!ShipA?CKvvhP94G$Lm%#E>a24pmOa1B-ioaF~5; zt*Kf>gZAfD_C>tei_&z-|RXIQoiD2J6 z#^9gvr1%WPMGh@VdD$~M!&thm;(VcEeAs!5jslQEaeaE3$It)+l*%x4{YlEt#sZj% z4_F<-it=Aozp0DAE={zysJ^1=?=cvyO10Z`gFLS}-`&x|KJZ3iVpiBMJZu8^UaaF@B1zlTW2-{V@u=fLiX*v!{Ft|HsRNzi>5w zc})R(=9fZ?#(1^OlY^(;CMe;BYPTN|QY9;I-lz_hI+=$(aV)o;yL@7a6Sy{Cp(b#x zHYIUHy{k+W-I>SA|TSe4oM22ql&6^l6;U5azBBC*ubY!tNDI^ZV%1$ z744qsjdm;_j%6T8FjKAe-S4wOkMp9KA9CvqAcq^k|?V!?9bO3H$&z+slV( z5P;S2gZWHa1hDhjeR!!eKVo~HDD&Or!u((SF-mlL=AhOS=AOy@-Z*ldADT-mAk;?B5vbX45+ zo|d>4Ct=qycBs}898>h93z3GVD39C2n3^VV4*T^1;O5sGC)a?x|$hG)* zX|tr76b08;@7i^3m{1e*6d%7xOlr9FHrzYxL~DEXDYPQ=b1tb(o6op0PoQo1YHmbZ z$VKUdY0ys`!%w*Qz-Xge@Zvht1RufhV#mM@CBZLgIk8(-H9RV|*H3Ko5mu(YV)UN) z*HoTdT6W#<`#kqWKfdcaBGXQuQ*}d(c#eOt_>irBpIu~*voq!8jU6{SG-F4LO*fsE zru5;WwGL#Ti^nNK!Tj2=|8)+uB7bpvWo1|Z_U;MSvwoS; ztZn@Dro21AP0yTRT3WuzCIezW;Td9v76cf2 z{=DDQ1i%?Iq=_Vg*sr`i{zVx;%5f1i<^ZvuzCLTEE(DMr(k_tzL1$K$@cG*y=uA&0 zSb?BZLelV#FbF!ayzvbn=(MuVQ!xZVr>+u|G5xX1zc9VsX4;$*bB1_; zZTynnoj*R^2Q#tt{Q*MbpO$l|6P2tGDI(5#tgD@0Cu#vIPU6Qn_=d%h5GsU)%m+xQ z#sU`vNthRa+2e4a8X6otIERLX!$qPF{4dt!qtQ`s`zJw~AOzVTm+v(PgCLiMW6hOs zz{%)yZ%sFZ!L71vQ^%Sn4z{ycVXchE!P?`CrwsX_81f0_sSXAxhHA)Mclieb0gjAT zO&fyS%T694FXBk>_fIy@H{X2I;(Mg|&H-H7|D7S`QQ`03AzDTRinw)1*9COH^lVFa z1V$&7fS|>G-`i`gJpV%uLkwdzH2d7@J9`dc4YR^!sJHlfBV*B5df-Txb04^ET#!o- z{gOo}4!hu>a9(o7-o$Ln4TUn}`PdN_E!a+8*G)Cb(!|i*!HwA#lV=22?k54=yhOdK zu#UKZq5EpI@)=0HoTX#^aWW5?Pn^HZ*3VpQa<&EjJn^OCa9t8A6`n=LVyKF!N0pr7 z11R^fa{k+7w7YQEz|q6c--J9ZWcct3y5GrY(J>7Ru_tXy_byfq3S!`MoG%z$%FKOF z(nQP-tCXMS=PdYR?2@nCB;D=55atUNK2kW%>Mm%4sUl4_+tf|6IbP$6fs#Ugn z{2DVksFE-_>Af84Gr+6M<$I}nY)37y;j~bjh9Y~ z!XgzUEmU`2GzxVP2foaBXCb0XLZ)b5Zk=RQj)1uFuJ9nRX!q5Kydm9iCsfAX(0z*-6()(d9kb6sfaILY0lVF5e-vmXnghav8i5! zDXePcGly@t=rplfQ6nXI%}j5=`Yg`1Q0r2^EwXCrO}q8eQb+(0D1LnbLF-TsPcN zKoKV-n=B*nUKHwey+y0-2Qu!e${Pmu6GtynRr$^ov(*gNZVVF$$%pUxog?ql-<_u& zasLPlR)+`25W{(HAnS%pl#eolgZZ2wAy?aN68zx$r6*@ zyK8c_MBV+e7Ueru#Va5TC}P%<9<@IYxTfhWknq7@T0DR6lHlIhFO26F>n z_e!2?QBHYM#f5!ULf$-q-BE`T5C!st%dC$NPi9-){eb6_)`cxzy5pG- zuhdB|xup?xf}nM5S_!Gaxh?sA80qpT?w;?`&2C@b@hg2V#=~~QNF}kH?Hc>_+LRWi z{piPZ$s&cPzx=vaHJkRu|JaT{t1ilm;WNaHIHweZ#VkheZz+H)EDh;?tG-u-@C(V{aFDDo!vT2uRH=Him0 z2?L5BP0rVzAw0*YSsvAuuGYH9t$XWYum%>;uYhOwcXe`9@c5Uq9_NV{0#o1lBWqzh zNov|xpM-5MPCh)t>1L`O6`Ha{SPs>EaQjsHgEzwWq>(-_IhOw0_OdTfC-AwOjlL4s zXy7hbvSN1vF`!obTj|;yiNQ>fB{B*2aNJ&?StIXBcr8X!F4&GM`Lp zhy*4I8|YObHUoDWJKB+DC9>>TzNjS=Ii5)mDS%B7D%#a<=oM~mA=E6vO^`e#D){cr zw1;q%=}uU5!4w0_T84QPq2fB-?P?KL2r?$yNlRP4VoYd+gj0&Lbbp9ZX0+y%Xms@S zr(svqK<69R!QyR;8l^1Vo|xEQz=08J8z;Ep9&j?&Eu|7mSVkp~_OJ#d?C?RoIzfWN zZSt}A#VJ7yB@I1YW&d?ZVEQ8@$b&BNV@58)6-y35LC;#*sMU(vH@a%0roGP$xmP1vkcRGkefsH}Pwx+xr&*h=^R18Cc*L(94(TEM*gV%bwq|?t z4}Gq9?@iKar83>7u^Z7teEh&Ip`N!bv~+Z*ASO%w&A*Qs&ou5=S4zRR2K3-Yi>>+VeF8))>Vg#f&R`&!K=I;ql`)$R)_-oNOR z9?Vn5l=rqmcXwh=Fsd!);K%>rc8~qsmim>vTEw3YNU&-4#Ncc_M-1m zJxW9ui6h*uiD>O!z62fLdoQ6&Id&e+T9g10cEbT#193cTF;`eD54;<9!A2}NWjvF} z&SuyaDwQo9)t`g*3M%K|a{d$|Vg`$+wPi|rco3`4iSH9QK6|S+^B{D#{9Kcx#7RIdy-gA6!ljW-x+m%=Dbq0;V5Vx(X}r#kr?vh2Bt)9t=ndHJl)59^5!vA zg?pmMv&&B6SIfQZrVzMcU7oOK8`{TUPQ$=l45m%6l|yU~4VT!%-Gw z;XgQrsP{-&oc*L>%2rrR$?FukFa_^7rus11pHAzHpJ)f>=N^})`MA8ZyoV=Hj6$>F z{2}Hdn}=U-xMWGL)MmjO`r|4U*1NT@@A+;SeltnYB2YwoI%?DWQnKD5TWYQgGL-u2 zWT)1U(WWXF8NLt@712>xha_^Dej|93v`p-+^UO&QRd`=`?dgBSRh(H)zt!5hl0fIS z=RpiDq2?Q$Y9gcC@8ne_{{y1DHu1AM6_2jweI;V_maz&$3)#p&BloSfevFJ}R2=^uh7xg3~x2BMgxtyFEJ{v_w*qo_XKwdn_tir$Z?B*34@7tVJZ2oSNC2 zL2&e3V#AyjT_Co3q1?bX!l1G{q$uUMOetA$O!H?NQJX-3tp6Ra2$B(V(>z8Vg zNrpxVX#@mglIN|^JHZ*)`4bh-%PmCN^)|c|*&EM4Y_X5RTJqwDov&$A)14gN9nIp=LlR<>%iuxi8a3Vbic>zaSa$M zBHUH%`T$1$O!oAN7h*~;PAhwi$d@WIaeR0wXXlQLIqqp4IS;w+68F5qoF|%)r*_|G zo@3=15#1lvejS2u&m_*=k~> z<3!igFfXeq-(-Be&+P4D;3uC4LTANPw!S|=DZH9}7HI7JP8M1AYV?)#;A^SpMqc9E z#3em-4AJw;Ezx&Wr+>f?yvoh&Py$6iN4AL-t^c!FfbwDEVj}wKZ_a8e<06L2_;SjP z8%ChWRiu}QgFO!OqI#tfup!Bi&1AESB*7b?AIFeCfDnlU-BFXL(; zq-6nSti{>+W`TVfQD-sH4k!faLc8wO$PC30xi9KIV+S*e8(HMLf>$2S(MzZYyG~Y- z9d9I}NpO<^Q{NzxlE=P+ z+TM%lQG;(kKL}J&9EDK`QZF7V{~8BC;~3EJP8ujb0*7d!2YG2~0OTZO9ORcJ>4E&R zbeLiOKe%WE_psm;yY6JuKgnnR|4H;$!k>%SI(m^gdha6qtoq20HP7~QuFUrj^?S`I zn5QF&Z^zuCP$`}MotaZt#FkZ^5+s0F;!li1aX+v1cHh$d41g^G8Tdq4mzdd;% zp_;>gMz)7tcHY2#+}?GL{)^U0;b5c-{dSzDx_0m6;J5_Yk}SLXBslD|SkF%Ei06#p31^t!T3U?Jf4zdm+EI10CW~qxhNS7GQ%lt#xIu@%vbQ2^~ zq$-Ll5<$iyb8`A2NVVYiHus_cQ3_l>8JL8sW4 zJTgA%0Qg^)jV93`Bk=L0$V@5#vW?uz=|Gp!(Z$9M{1DiV^Vt9C1)I9qEtuaasJaR( zD0DsCYqEU>M4<;vnI^M2+w;d@s!20973Qvp*KC?|OqZa^j%2%65$tJao`~kI2me)T zQE-qKN1%D`;aTxLyVr>;>jcLoh4%5)z%K`FwpO*)L>f-mu0r z-oz0}nCkG41E$M0xdCJdf1cbonRNP3+tGVpp2A|lSW`>LuP`6p#LE!7er+g?lvCSJ-ukPJ5^fAva}xof5`zFk=+rOqs<#L z->nJe`N?mu4@IGULKP#eqmpv2suhm(Ev=Rz3EgU3Do%n&G;6OXWbVjR&P-TEWMHEn zOiaPfzaEX4J|H5VhF7S=_xRv2W4{x0VoFUY7J|Hm?j^1)vv2-WLo*uLhPcM6cdP{Y z3GtaR?RxL|2ZB`B?ZxUjPo=Lmc!i)(%1^n=y!s8!-6FXKZ8Mc{A63{l7B-#hkCdlo zoJkjgsl@wT7I|U6QK#wzUbrITTAMZk z+0L1^dvW1*igRJ5L0-6@Oq6Asfl8_gWvHxcd4X9@wfZgV9ZkdqRRs3i?}E48t?2nc zG<8`r{W|mleq4Y)YI*+M?aps3%eMcDK7k(>{VV#uB(;47M;WrgeuF8}#-j(VXhr>l z{G9rZ_EJLJe0 z1syM44UT9gtSKIWZ46Gwc1^C{zvz(YXnD@E)-~6gp!yaDegv!Y7Oj>pPf%e{H-{^i zgovi9wlGnL1I0ppWQ-sjQgh5xfNUn&JZT=0mwi3e`k7(gt7SRwYV@-ef7R$>-7nak7s|@N7!={zesj~b+QBK4P66SqTo8KmMTFVh zjfl(bdR!q**tijHms9Y<$fP&tq@?BAyTa;%ujZQle)MbIa=&h9Q5c?%nmv6vLOFA( zd40|`xP9WRh;CwF8)L)mvO5VQ>Yw;;v2g$e<41B`ly3Vq&fNF;_T|RsU+vHh z74Tb|=NOAln3m-$xc}ivLY%o|L&hU3^`9#`o7;Ns$YoS=gD^}12GSvuWj#TrT;4rT zQ%wM`@RI9xED%)|pQo+(e^TOadVKp1ZDV2h^S?)iZTuaUmuLatPv8TN0fDYTej$O* zu0hgHjzO-{zOF8wj?z~=U0nVC6KU?>%qLs|3;O@e=O=9VFV5WEGahVsu0hs!nDBqf8h&W!GVTWu8=pvF?pBv_$w(yDKJteFZ<4ZE$@vAp=;~&R znWQN?Xx{@Go>;n&&NYf0y>5O8W~7|~e$g=>ejCD@CaaqER09c%sk(E4)lm+2zKvNK zmbG^I)JMh)ckcBvFL;xnft@Z_O>O$B0r^=eKfw>aecgZ$y=`1^wdeU zsPQ$vnv7SaH#@z~RDik877K^ctjt!|TL;kdOmp*yzs@_3kKMFfNdS)dYfU#e@LXaT zHskp(_unNj(Tr?*mEX|mi?h}}HebIg{nIqGO>W_wn^=Ns#|;CJgUp|Cai9ny>L0G~ z4EVqA`|nE;vl=DLm*$OKXWtXBQgH>EPg;1{DXr%FvZTPN6(O-#9Uq5D_T2PvtqtLRiy0~hJ~{o!JBZ}N`=KZ^~GUPxreKL$RZkExYV0n8+Jh%Q+JQEv;@guWsG!L&5qC@PSLb)gEpThI-D0%j z2}N`;&JC-?7bMM2HCxG_jM_^XxvgJc^bPkS*ts+#e}=@e#2)(KzNtskBUvuWS4AJ>c=4=h9%m&g*=3{q>FN>mhPE^CVO>pI=Dn84 zMl%04YZk<=8ydbnD$XnthdO0ZBXzZcoB1P6(a7Y5>>}I!lZ}vfz>36PFFT6=aKMXn z2XO(veFGP$s+~l)2c?F5Y}J?P`H}LNB<(B{F0H@wK2n@!x%6X+)RAAw{i{am%R!D= z1xLVu^jXl)nX(H(D+cAIamSPYB%!0&4os@L#%r0RqJ;X9~j20A@;Cok2TU@Vz0sVVP^E|38>5)hk|H> zTfP{BN9|~)f*y^N@dg~bENwBz#q1%%G%iK>kMh`&(VCT_ct<>r;~3Mga~JE^?2NA2 z^D^EwI@2HFY<6Dwa7QGs?su|Tn6i)1zqKHs+?6mi0wUcKLm!mA6Z!Xs`ZIu-EoTIP zKLP!BGrw0IgPlEG1OJn${&)Ib|H)P}_!F&y0N{B4p8&}eKh6sPj28c}v3EA_UiU#g zJvsR3oz-mINg>1cQK>rizQxxrL50M;m~`(EjIl9{>BVdYhV~)hoyJD&rXnH?8m43% z`PJ3pN|j_Ho-Nzl%UCD@c){r_5(OjD4AbD@R|=LF2U2Ih@2Aezj9dIH=&>p6=3jI1 zzQXtD?)KLBr%^w5fd5~Ah3QW;Sdy9)O@Ko$h zKteAP<^^Z+qq|)b$uEJN3%fi(WQKD|Mp#>ObI1*)Ypy~#5jHPVJ>S6v_Zx*|pJ{8q z1OmoxCih&6ho@(5MTWJ0AUi36&_-6l`aSghc_Me0DngoFxJhhK5Gi|XQ+98Xx;a~0Z`*#q0WKcREF{?2%#K)ZoO!DR z0Jy+6%R{%bUG?(KNlz0wE!ynHTnfO_Z?04#j>jFri`0ZdJu8AeX~8Egj0;s)f2=wf zP%u2#wG%o0BLJY$#ed1m&v&oTzrBVGHVZ@{uLX4}wap;n314YK)kW|1$s~PWdtSzl zBS@WR2$Q}rJHQn67)o;SI(ZyZ2UIzqSt>7dfMa&G^o$HU4wgcg-Cr&+Ey(r&d`thu z=3<)a@W-;^;>S61t_i2F?P62;)T+;%Iim<{Hrut!dC^+7UbcJs(0NcwiP<@YJj#)F zKmCp{2A}T0lE#1)k9vGb%g)X&0$ivoO=`ph!g>Xe-(Sllb*C(a8=0AfTzXMqxY~8D zvY1N|ssPra)xwCIYD3#%qKxMcEk7}hG+cpv zd};kCaG9Fcdgk=$ANnDe*FKv9ubOwPk?qOLhJaM$tW}m|Kh=JYi}{LG z)_ywq?7O+SLv4ZjTesfF12q=+3+kKg8H*TtlWfIp2r*^YLm?nD`AH7%ss^}(uO3bp zO>g+ZXM2159Y?aZ`ovN&V@Vmbsj115rrjNa!i8t82?G2yDh9i4 z(;bx!4Gr%C?r;s^BslUfaSagCIlbyCZ+B%Zp9O*tk7!~ycE&KEWF4aIox<2E!Npkx z_1j~4{Ir@763xaqW~8S^w_pxrdP=?I1CD^t2`1~(-QC^%gwkghZ)MEAd>L#X60+}_ znVI=2p8Ad8f*g`Qh75rYu>(AkBR?|9wcg&|XKaZxGe*IXEGfIw#-jV~%wOvd_%YA* zcU|lDzknBu@bdFhmrY;sd)L#=*?ajLXN!b)I{7WIAeF99d2ju3K6gad-rH(Av&HvY za+z8cn;mI=eZ3tcC;7da6AAH0^m06rx#Bb5)!zB~3fA9_>Hzy(;+e;pW-Epn1Elmk zHKjDWEZn(xBQX-THJU3wGFNcH%IFHTZI1emCMOfMrF7@&`8z5*SYU*8 zX}1WqO0y-bDn7QuE^blZ^}uDCjX1-A#=ILw2qECG9%B|~ZBhd($z>o-zb?ewK_rE4 z_&iXz?;uZ5t;`V1pEsIe@c*&5=8lZW=Swl4ZAr}0(>;lhTESSZPN_9rh7Pmi62MJsvP3>f#SbC6z9`Asy=f&!#7$p?8q#clL3B+tA? z$Xm@_`N4n|ElgTtxrnkwmZXhRb4A4mK4eu0%6$VoJkHiRTEg_eZ7gpH{Dwl(@qi5T z(y1(0HLzoUvpryGpvfUEJHf2R+|XE0@wP3^0yG`W@U^0%;@VTbX^{?qhK9!BlvOsH z!b#HH?Cej9XWk}u)^}EFy=>4wMx%Hn!$h4U?K<(i?m6v1H?VeUktcLHlTF~C?a_$W z^b60I{nI&tHV49%yx|u=Y~fYZYB}gn7j7lBpMFA8QWBr8EM9(71oH|i6Ps7ck#_au zpy&}pu7|>p!j+M12Mas9ZbxSBhM5<1G=b~fXzHHq-H*!s$S(8wf?xIMt zeiagMdPpBKsulh+ScAijkN$xf!CHUuSXxop+$0g(aDvnxxH7zNW@dJ^gZ2HsC#t#{ z7=_8)UQUncES@C_3xC7Q$)fJw*14O1Q<>xu5pmRbtD|>0`qVb$na3U%X$(-Z$x?J6 z@DS&d+E~q|l~&q=^8_(Jb$?57Bp&`)t1P^ED)p>3^Mpgc&+I(yB~B7(sP1S5B1u}9 zz+*$Xm_YkT@0Z8OL{3sGv1dzVye5t4BAxJhay4odihVIXeFYH^QM^gMKdHjr`-IvT(HFkI3cNzR9cW{h87=&`_(-_|RX%*=ibv z%*|)}zuNl_sHT>0{RBc&qclZPdKCmuLI+V3dI`N3F(d&3A&Du3qNs?y>lN@S$dx8i zL=mxfupolcY>23cB8p-|5dF_VuaIEwy}$o^>%O<%%3*DiGiUP6KHuz_*)wP6jOmI2 za#KbA)Wto`#VPH}j>w}BrS%<`F%9CgC+74Wiy!hjiK0p{+i^a;)iD^tyV`l^S(U(K z?;{>;pH*13CCW9kUKK0H^Dx6nTvKvy3fpmNH)*GrJ}0!t*jMw&p`xPh-R{)N9&B(1 z*KmarLc3!TM(%E5RqBIwtNp#vMXdA;NwckkXwnc(?ytbY%H z4}!&b;5!XWurvYZ;83@gL?HIf8Cl&2iG#2%DQQIgm-W82R~;XL)qMy!?E6~3k@zG3 z;P9DXgXM+b6W}32!S}rY2afki6@i!pK1GL!0TBZt21E>q7!Wb=e};kW+HcN%b$T1L zZQ)h2k6XO*TjZI9dAd3QhNXA?y=bIc=lv8*u=28neJDTeH=j3{Qs%^C;qWS@lEf?PHvJx4>WG;p;|$p;Gq8P0U5LASam{kVMJ;q4Q47Ef+JD4(-F z{@aO@)%P;@CcQV-5_i>US$o+hIywgG^V!HzAZ3B8>MQLyEg$)phMz7k!AhKt$xh8X>@I0IFW&KSmSphMYHP4k>bH(zByK%) zUK_Po+x_mQYM1(^)GJzF+iy0npYY^a7k>W!P@e;YS^9@u%NMtirZr{e=dDIvMQd~i zee9Qdo4r=1LS}=f_e$rp%m%`~8a4DcOl9$PopYwp`mcJVWZsQ~oy#Y%(w>B?f0Y~O3Dn>lbC|1B8R z`zVIx#qQpba<+vPaQn`6cl`w1e!p2oaZ^y$Uxt27R# z_U%o7+tmLgdfkq)2Cju_T0nSz9+otz-K1O0aG%xI)PRu5O^UW*%DMa6@+`+&nTg%&3#$V}IKG1JWX{6pEW zMHlDa$2&bZ9%$Tlnm$kysJz^B-KC5rnZKnb-!*%tA9(4~md-kRmP2E7!fk2!rxLo` z4fUdCafw)`Q(0;HiH~f>@4m7=fZF8IcBVB8&-k|bR-5D^ZU4cR{bvs~=FV5#8jRt- zQM?$|pVON_yyC>}i=B}l#W>l&a%qvw!dcQqA4OokJ0Cx)g-1ko^oC!Wkq<^5SVO*+lv44AW1cH0=vj;s?0AI#_XzFF2m=X3;G{~ zzv#+m+$~>D&11TENZi=^VwqT<@yw7GT>KIC%;Xt&f@K5yQ!Mmf-%y!D@2Ig*r4EH( z$aR)4^0|an>pB~L#Y;k*||Ei+@J^5gndwchsC;TLUOeUn>%M90kH zUT2yo(z(Lez-C8-){9+pbY_%Iv+q&NT2$CSly-Zs(e?xO%q!wC!wXI{Rt)F9Isbg} z<0Wm?hHVd54y^N?db6O3Fub9;)x4SY)F^#?Gjd z!J*jNwr|hD3*!8+Pf%~!7t2(zPScq;yLOju&$+T>TUhiBgZi*TIjOCo!MPu*X6U+- zx1D{DsyUi9;4hPtb{f6Xd)VM%Yw?g=X3Zf;>J6?nODgib9a^L%4EylUB;(qQ=fiJyl|4z_@VN+o4;xA%z0<^3K{}t zxg<=_&ijxa5o#~DaBV~pqWQwhw0g2_yzl#`rzk01`+V+NCFm&^PMde2?!4zyBkxD| zUR5X-5AQ-OQ#O6K$&=e*^Y)Z^Sm>)5S-EAh^qzA3)P7Cf3%6pv<*w$r6YU#rdq&0MY3R}++xv=jM)JmdXUcWLxzrO@}E3fz{q+IkP| z3TQXa*YC?sxU56=KiY2cbm!rT8HcF>yo_^J4^z%WeR*nqwawyQd{A@vHI=P zbm<)fc@9s=-Yuj*VrtJOS#rq_7C*cxhklHc<2_scaDm^`E6F*IroB~_t`e!;ryJ{@ zd=~4+v?&-Bh@0(~-F8r6$pf7OvKIm=M=jo_=^y24>DkNurjqa0K4Ya4YolU9`!eHv zo`Gd=$CS!ps?()ARC{~l(q6*)o)n2=Ewtf|^uE0j=)t3C%j$2Bp6&H-KK-(;>d^gF zcFPXlojCXU7LLKLSMm98PHmfc5Z$fRIJ0h+`|m>w=cW0{ryoSqZJc5cC%uRn*v!iH z$X;xy{$l$(xo%PHrm{jRSb4>i@6 zFjjOzA!cC0wlR0;`r{*K?-7b!kkb@0Zv>Fu2Pkz8Zf9(k?WG4B=NT`5zg*gOlbQ760ojPEZUyE`T2+AP`_~=07;#xC_B=pfriEk}?KsoY#CpBc;T0(mAKp4nx>WV}#I3r%b+TJ#ATRCJ zF%S5v-6%Eud5Oxq-VHq-&o15ze<8uh^MSk|6`-cdWYjd2BDQ9*$a%iqK>K+D?@mU! zM(|+cb!aktc?uHw4TTaHlUf0(!RK12>Cm(liuc!4YffvK_=j6{yG{z2$-8X7k<-|` z5T_!bC@~D;xlzX2FZ0+A%-}LdnU02@?ahgt%DcvErPk!TRH#-Yv-{S1G!6u)Jk=e1 zm11~09Q>r%=6XZj(97*uv}JMnuvB+~{W6tO+4)X3mxnfd>2la!p3Qa&Dt`F&)w#K! z+yIRwH4!5{1wdk3^s}a$aA_KBQz;w&8kyME47v zjvnfX^1gRXoK<$^2P8k1_30_sweCcpJZ_Pn$_!e6C3PnANJ8PU8$M9r(R-Qt=3Z6R zhc50>-dpf){d(DVx3V5=7*)5hZKcKT2jS?Lv5#-pbND zk`=<6Tn|lwjYt7DDhWs&eDGTtQgVz@{?f+ya#lPB0a3)D_y>zD!82L0-o_f2dRSp@vjvHGs z=2D^QKdVL=am?6y5}Gx7MFKNrY(-^a76Q#3y^6wUqSSq4UzDikbgMeGl~iZRXX_v~ zESayDP%=l&)#}#sB^v5u%Ci{C333qAK$Na=qWM;sm{X9gojtFj?90=`z8>!Fc=0Vx zeRvYBe2_=JIV0i3C=P`Mg3T?hOf5`6@Ul6YKQv&0_osq&5&$fcODEGPMpSwf1I8m$5-2nV zlfp6@(P&Ja2IBJF3yH$wP@~|+556TZJITlh@8IO(p>F5k+7IMJx2)y8A2X_K4&IyO{ zcfiLG?84~YkZGc$J-G5qWxD_%&TnM-hxD<=|bW=8Od<2mwz?E}2M-5nC~ zUL>aguCJ40Qe>bNm*R`}52J?!I&uiU1fGlcNGyAYM5bUYJjof)CI))Mkez4=kyO0B zw;zt;$b*tR>~V?UE@I<&92M+>{J#t@mi3Ep$Kr<$obsj*#6TXMV5D0!IuJm9KPKkGfh(LRS zH=AeoU1z5-x&zPE-Y*s(0{;S^w8Y7mU}}Ync5t$@`|+LU;EaP@aCmn^uNY4Up1Yk} zf&(qi-jWv`L^Cn>2%~e&xj}?DGgqr9M<;uNC&rXT_enA|ba8Mo4Z)E-Nv?h&fpe*T z-uSsDW+WezWD6J85qCf!OqT@vS>X-ISRZGI%);XgeUcL#3{6>A@ySRDV+J@0b%-zAm{uf1Hw50v0G)RniV>U6KNdpsr;*%nnF$_8-0-hNJ zViK7&P^8#NYz`$pf&`cC?{!HOg~;K;C0#QHR3SgEgGxpd6l@}i#)bIgT5(g}n0(BCJ1ETR=35DZ=cwD&J&}7C@N2)0ncv7LcEH_Q^ z74W9!frjqf4{yq%DE_Q~H}$W1**_d9ECwqPbe0BFCAe|qDkTgqk9B9qFUwdL@=+bAbuB#+2v%kmuO5BKiRs(y^$N`4Uap|j|H z=VnRs#a|C*14k)$O>A<<*Gbm6UhQyq35^XG3RieS59}Xp&~5ioK996J@It#X&rCM4 z_$xcL>*Mx zU2DJUGhUN$@op(6j3(|)IMWjxd@FR%{)K6S$C`psP8$hMS0#Nyn{EsIFdNV3r(K@W(8poaPz^N{bq-$JrwW zX_siPWrUY%N%<(|Z+@S<336SKWdE7#(8bJ8$lm)N%3R{PJ*l-wsoAjbrqlE_5~5z+ z*vbfuI|wl$QLpa5)~myT%E}h*)y4fgy*kuLi~8Ttqr?89N9X6fbp9U1wyXQ-cN;kA z;?CD+s;+&kHNl`O@3%QQZ){V?_2|?WoqAWKYGd*akJ;L}C6p3yUm|YtgjI4eYtQU6 z*s9n*3H132_GDZuE|BjbH>GW<=eJx2n z5Tx~szLwo+G-R$h$`qb_437-z!=LcXX7ITy%y>sc$EgoT*JpL>Z7F{9x^?ce`iGTm zo8`2wT@F~QB^nC^)+!nc6paP`v(ai%t05W-l=%l^feoh+meW^B+%$Opbkl+6ZSu_( zs5NK&>X8Pd+?xd?OWScRhX$hY+@gEVDN$9~kFDa-WTr$}o^HsD8OQ(~Nt&-hfc``= zbwBTi%8XB$5!apHZPnN$cko2GpTCut!PZG9SY^8sya(Y0C!ew4A2{a45Si+1YBXIv zlExs#&4;gfxgo_SAi$#XkpV&tk6!dr1L;l_0+uO=rYR#o{P~ZyfM7rPielKZ-C!XmEE9h&tAXP)o=YIUKNJ7)21@>C;(|bB50*!0 zfr(hK$nXK-UP~aDL{gkFyof}wA1w%DCEK#h-3EbxWeOk6o;MPs+jsyh@W#u(14E*7 z&1QkU;YI|!Tz>S>o+CL5Hg-=CBANXCHS=TdR!~V>*UH^G6A_3J0lSNg9_!46Z&=j%@Q1-l*kA5t0`!Jo`T4id1;z&(*C-~WJUuD&nY+SJfxk=%Dj##h9?}Bnu&DD{P2FwbDU1|XLFn-&d9PXNC<_RwVj4vPUF^``BApMVgGK>i7`^vtr_P6IFmiyq&N zcs&-L4v9!7QD_lhld19fFg}g_^-rp}z&v5mGQ4AUxY(*oe|M+aBhqIR71m+0~KRG&+g~P{# z<$UA71<8@dJR*Govm9aJZw==w2#03GjRPLX$)I;4=_+VrVbSMnXVaC0BQv>?;58Q! z-&@>q%m`}Vl8W1g2GcTOfw%k_J#w{#r@Kk1(hg=4dc34c%e zSkFm?uS#~u2!;NI*Ca@XRB#J#CusU$;m=HEcVW2kzw|lAAzwa#w*ut{mRWoi%O`)K z$kD%Oo&8tz z8}d2qZx7zG4~sfqMYv;&P-spJmHw-Y9H)4v*y%N&Kskg(jn721i-e#vnDAQ(#_2u2 z0t{};Jf;my4;D2(&7&)XV6!Oj^5 { let totalSize: number; try { totalSize = await storageStatistics.getTotalSize(); + Logger.info(TAG, `getTotalSize successed, totalSize is ${totalSize}`); } catch (err) { let error: BusinessError = err as BusinessError; Logger.error(TAG, `getTotalSize failed, code is ${error.code}, message is ${error.message}`); @@ -70,6 +70,7 @@ class FileSystem { let freeSize: number; try { freeSize = await storageStatistics.getFreeSize(); + Logger.info(TAG, `getFreeSize successed, freeSize is ${freeSize}`); } catch (err) { let error: BusinessError = err as BusinessError; Logger.error(TAG, `getFreeSize failed, code is ${error.code}, message is ${error.message}`); @@ -86,7 +87,6 @@ class FileSystem { return `${freeSize}${BYTE_SYMBOL}`; } } -*/ // 根据沙箱路径打开目录 getSubdirectory(filePath: string): Array { @@ -199,7 +199,8 @@ class FileSystem { fileio.rmdirSync(data); } else { fileio.unlinkSync(data); - }}) + } + }) prompt.showToast({ message: $r('app.string.label_delete_success') }); } catch (err) { Logger.error(TAG, `delete failed, code is ${err.code}, message is ${err.message}`); diff --git a/code/BasicFeature/FileManagement/FileManager/Library/src/main/ets/filemanager/fileio/NewFileIoManager.ets b/code/SystemFeature/FileManagement/FileManager/Library/src/main/ets/filemanager/fileio/NewFileIoManager.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/Library/src/main/ets/filemanager/fileio/NewFileIoManager.ets rename to code/SystemFeature/FileManagement/FileManager/Library/src/main/ets/filemanager/fileio/NewFileIoManager.ets diff --git a/code/BasicFeature/FileManagement/FileManager/Library/src/main/ets/filemanager/medialibrary/MediaLibraryManager.ts b/code/SystemFeature/FileManagement/FileManager/Library/src/main/ets/filemanager/medialibrary/MediaLibraryManager.ts similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/Library/src/main/ets/filemanager/medialibrary/MediaLibraryManager.ts rename to code/SystemFeature/FileManagement/FileManager/Library/src/main/ets/filemanager/medialibrary/MediaLibraryManager.ts diff --git a/code/BasicFeature/FileManagement/FileManager/Library/src/main/ets/filemanager/userfilemanager/UserFileManager.ts b/code/SystemFeature/FileManagement/FileManager/Library/src/main/ets/filemanager/userfilemanager/UserFileManager.ts similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/Library/src/main/ets/filemanager/userfilemanager/UserFileManager.ts rename to code/SystemFeature/FileManagement/FileManager/Library/src/main/ets/filemanager/userfilemanager/UserFileManager.ts diff --git a/code/BasicFeature/FileManagement/FileManager/Library/src/main/ets/mock/local/FileData.ets b/code/SystemFeature/FileManagement/FileManager/Library/src/main/ets/mock/local/FileData.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/Library/src/main/ets/mock/local/FileData.ets rename to code/SystemFeature/FileManagement/FileManager/Library/src/main/ets/mock/local/FileData.ets diff --git a/code/BasicFeature/FileManagement/FileManager/Library/src/main/ets/mock/local/LocalMockData.ts b/code/SystemFeature/FileManagement/FileManager/Library/src/main/ets/mock/local/LocalMockData.ts similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/Library/src/main/ets/mock/local/LocalMockData.ts rename to code/SystemFeature/FileManagement/FileManager/Library/src/main/ets/mock/local/LocalMockData.ts diff --git a/code/BasicFeature/FileManagement/FileManager/Library/src/main/ets/mock/net/NetMockData.ts b/code/SystemFeature/FileManagement/FileManager/Library/src/main/ets/mock/net/NetMockData.ts similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/Library/src/main/ets/mock/net/NetMockData.ts rename to code/SystemFeature/FileManagement/FileManager/Library/src/main/ets/mock/net/NetMockData.ts diff --git a/code/BasicFeature/FileManagement/FileManager/Library/src/main/ets/utils/Logger.ts b/code/SystemFeature/FileManagement/FileManager/Library/src/main/ets/utils/Logger.ts similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/Library/src/main/ets/utils/Logger.ts rename to code/SystemFeature/FileManagement/FileManager/Library/src/main/ets/utils/Logger.ts diff --git a/code/BasicFeature/FileManagement/FileManager/Library/src/main/module.json5 b/code/SystemFeature/FileManagement/FileManager/Library/src/main/module.json5 similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/Library/src/main/module.json5 rename to code/SystemFeature/FileManagement/FileManager/Library/src/main/module.json5 diff --git a/code/BasicFeature/FileManagement/FileManager/Library/src/main/resources/base/element/string.json b/code/SystemFeature/FileManagement/FileManager/Library/src/main/resources/base/element/string.json similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/Library/src/main/resources/base/element/string.json rename to code/SystemFeature/FileManagement/FileManager/Library/src/main/resources/base/element/string.json diff --git a/code/BasicFeature/FileManagement/FileManager/Library/src/main/resources/base/media/default_document.png b/code/SystemFeature/FileManagement/FileManager/Library/src/main/resources/base/media/default_document.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/Library/src/main/resources/base/media/default_document.png rename to code/SystemFeature/FileManagement/FileManager/Library/src/main/resources/base/media/default_document.png diff --git a/code/BasicFeature/FileManagement/FileManager/README_zh.md b/code/SystemFeature/FileManagement/FileManager/README_zh.md similarity index 94% rename from code/BasicFeature/FileManagement/FileManager/README_zh.md rename to code/SystemFeature/FileManagement/FileManager/README_zh.md index 83e49bf843..60048830f0 100644 --- a/code/BasicFeature/FileManagement/FileManager/README_zh.md +++ b/code/SystemFeature/FileManagement/FileManager/README_zh.md @@ -2,7 +2,7 @@ ### 介绍 -本示例主要展示了文件管理相关的功能,使用[@ohos.filemanagement.userFileManager](https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/reference/apis-core-file-kit/js-apis-userFileManager-sys.md) 、[@ohos.file.fileAccess](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/apis/js-apis-fileAccess.md) 、[@ohos.fileio](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-core-file-kit/js-apis-fileio.md) 、[@ohos.file.fs](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-core-file-kit/js-apis-file-fs.md)、[@ohos.app.ability.contextConstant](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/apis/js-apis-app-ability-contextConstant.md) +本示例主要展示了文件管理相关的功能,使用[@ohos.filemanagement.userFileManager](https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/reference/apis-core-file-kit/js-apis-userFileManager-sys.md) 、[@ohos.file.fileAccess](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/reference/apis-core-file-kit/js-apis-fileAccess-sys.md) 、[@ohos.fileio](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-core-file-kit/js-apis-fileio.md) 、[@ohos.file.fs](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-core-file-kit/js-apis-file-fs.md)、[@ohos.app.ability.contextConstant](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/reference/apis-ability-kit/js-apis-app-ability-contextConstant.md) 等接口,实现了增添文件、删除文件、查找指定类型文件文件、复制并移动文件、切换加密分区和预览图片、监听文件的功能; @@ -17,7 +17,7 @@ 2. 在文档列表浏览界面,点击“+”按钮,可以添加文件; 3. 在文档列表浏览界面,长按列表项会出现删除图片,点击删除图标可以删除文件; 4. 在图片文件列表界面,点击图片可以进入图片预览界面。 -5. 进入“我的手机”页面前应先安装[MyPhoneFilePage](./lib/MyPhoneFilePage-1.0.0.hap),在主页点击“我的手机”,进入应用沙箱目录下。 +5. 在主页点击“我的手机”,进入应用沙箱目录下。 1. 列表的上方是默认的EL2加密分区的应用根目录下文件列表,点击下方两个按钮“data/app/el3”和“data/app/el4”分别进入EL3和EL4加密分区应用根目录,进入后对文件或文件夹操作与EL2加密分区相同。 2. 点击左下角“新建文件夹”按钮,在弹窗中输入文件夹名称,点击弹窗中的“确定”按钮,完成创建。 @@ -173,6 +173,6 @@ Library/src/main/ets/ git init git config core.sparsecheckout true - echo code/BasicFeature/FileManager/FileManager/ > .git/info/sparse-checkout + echo code/SystemFeature/FileManager/FileManager/ > .git/info/sparse-checkout git remote add origin https://gitee.com/openharmony/applications_app_samples.git git pull origin master diff --git a/code/BasicFeature/FileManagement/FileManager/build-profile.json5 b/code/SystemFeature/FileManagement/FileManager/build-profile.json5 similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/build-profile.json5 rename to code/SystemFeature/FileManagement/FileManager/build-profile.json5 diff --git a/code/BasicFeature/FileManagement/FileManager/entry/.gitignore b/code/SystemFeature/FileManagement/FileManager/entry/.gitignore similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/.gitignore rename to code/SystemFeature/FileManagement/FileManager/entry/.gitignore diff --git a/code/BasicFeature/FileManagement/FileManager/entry/build-profile.json5 b/code/SystemFeature/FileManagement/FileManager/entry/build-profile.json5 similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/build-profile.json5 rename to code/SystemFeature/FileManagement/FileManager/entry/build-profile.json5 diff --git a/code/BasicFeature/FileManagement/FileManager/entry/hvigorfile.js b/code/SystemFeature/FileManagement/FileManager/entry/hvigorfile.js similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/hvigorfile.js rename to code/SystemFeature/FileManagement/FileManager/entry/hvigorfile.js diff --git a/code/BasicFeature/FileManagement/FileManager/entry/oh-package.json5 b/code/SystemFeature/FileManagement/FileManager/entry/oh-package.json5 similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/oh-package.json5 rename to code/SystemFeature/FileManagement/FileManager/entry/oh-package.json5 diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/Application/MyAbilityStage.ts b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/Application/MyAbilityStage.ts similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/Application/MyAbilityStage.ts rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/Application/MyAbilityStage.ts diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/MainAbility/MainAbility.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/MainAbility/MainAbility.ets similarity index 90% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/MainAbility/MainAbility.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/MainAbility/MainAbility.ets index cce7bb8daa..b69c741a99 100644 --- a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/MainAbility/MainAbility.ets +++ b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/MainAbility/MainAbility.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2023 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -24,7 +24,7 @@ import common from '@ohos.app.ability.common'; let myContext: common.UIAbilityContext | null = null ; export default class MainAbility extends Ability { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { - AppStorage.SetOrCreate('context', this.context); + AppStorage.setOrCreate('context', this.context); hilog.info(0x0000, 'Sample', '%{public}s', 'onCreate'); } @@ -38,7 +38,7 @@ export default class MainAbility extends Ability { let filesDir = this.context.filesDir; console.info('sanBoxFileDir = ' + filesDir); - AppStorage.SetOrCreate('sanBoxFileDir', filesDir); + AppStorage.setOrCreate('sanBoxFileDir', filesDir); myContext = this.context; this.getResourceStr(); @@ -56,7 +56,7 @@ export default class MainAbility extends Ability { try { myContext?.resourceManager.getStringValue($r('app.string.isDelFile').id) .then((value: Object) => { - AppStorage.SetOrCreate('isDelFile', value); + AppStorage.setOrCreate('isDelFile', value); hilog.info(0x0000, 'testTag', '%{public}s', 'getStringValue value' + value); }) .catch((error: BusinessError) => { @@ -65,7 +65,7 @@ export default class MainAbility extends Ability { myContext?.resourceManager.getStringValue($r('app.string.fileContent1').id) .then((value: Object) => { - AppStorage.SetOrCreate('fileContent1', value); + AppStorage.setOrCreate('fileContent1', value); hilog.info(0x0000, 'testTag', '%{public}s', 'getStringValue value' + value); }) .catch((error: BusinessError) => { @@ -74,7 +74,7 @@ export default class MainAbility extends Ability { myContext?.resourceManager.getStringValue($r('app.string.fileContent2').id) .then((value: Object) => { - AppStorage.SetOrCreate('fileContent2', value); + AppStorage.setOrCreate('fileContent2', value); hilog.info(0x0000, 'testTag', '%{public}s', 'getStringValue value' + value); }) .catch((error: BusinessError) => { @@ -83,7 +83,7 @@ export default class MainAbility extends Ability { myContext?.resourceManager.getStringValue($r('app.string.fileContent3').id) .then((value: Object) => { - AppStorage.SetOrCreate('fileContent3', value); + AppStorage.setOrCreate('fileContent3', value); hilog.info(0x0000, 'testTag', '%{public}s', 'getStringValue value' + value); }) .catch((error: BusinessError) => { @@ -92,7 +92,7 @@ export default class MainAbility extends Ability { myContext?.resourceManager.getStringValue($r('app.string.fileContent4').id) .then((value: Object) => { - AppStorage.SetOrCreate('fileContent4', value); + AppStorage.setOrCreate('fileContent4', value); hilog.info(0x0000, 'testTag', '%{public}s', 'getStringValue value' + value); }) .catch((error: BusinessError) => { diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/common/Common.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/common/Common.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/common/Common.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/common/Common.ets diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/common/Logger.ts b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/common/Logger.ts similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/common/Logger.ts rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/common/Logger.ts diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/data/DocumentDataSource.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/data/DocumentDataSource.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/data/DocumentDataSource.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/data/DocumentDataSource.ets diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/data/FileDataSource.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/data/FileDataSource.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/data/FileDataSource.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/data/FileDataSource.ets diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/fileFs/MyWatcher.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/fileFs/MyWatcher.ets similarity index 94% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/fileFs/MyWatcher.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/fileFs/MyWatcher.ets index 260dbf2f09..7fd8143c77 100644 --- a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/fileFs/MyWatcher.ets +++ b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/fileFs/MyWatcher.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development Co., Ltd. + * Copyright (c) 2023-2025 Shenzhen Kaihong Digital Industry Development Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -65,13 +65,13 @@ export default class MyWatcher { ['IN_MOVE_SELF', IN_MOVE_SELF], ['IN_ISDIR', IN_ISDIR] ]); - public content1: string = AppStorage.Get('fileContent1') as string; - public content2: string = AppStorage.Get('fileContent2') as string; - public content3: string = AppStorage.Get('fileContent3') as string; - public content4: string = AppStorage.Get('fileContent4') as string; + public content1: string = AppStorage.get('fileContent1') as string; + public content2: string = AppStorage.get('fileContent2') as string; + public content3: string = AppStorage.get('fileContent3') as string; + public content4: string = AppStorage.get('fileContent4') as string; constructor() { - this.baseDir = AppStorage.Get('sanBoxFileDir') as string; + this.baseDir = AppStorage.get('sanBoxFileDir') as string; } startWatcher(watcherName: string): void { @@ -110,9 +110,9 @@ export default class MyWatcher { } else { Logger.info('startWatcher fail'); } - AppStorage.SetOrCreate('eventLog', JSON.stringify(data.event)); - AppStorage.SetOrCreate('fileNameLog', data.fileName); - AppStorage.SetOrCreate('cookieLog', JSON.stringify(data.cookie)); + AppStorage.setOrCreate('eventLog', JSON.stringify(data.event)); + AppStorage.setOrCreate('fileNameLog', data.fileName); + AppStorage.setOrCreate('cookieLog', JSON.stringify(data.cookie)); Logger.info(TAG, `${watcherName}-startWatcher :{event: ${data.event}, fileName: ${data.fileName}, cookie: ${data.cookie}}`); }); diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/FileManagerHome.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/FileManagerHome.ets similarity index 77% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/FileManagerHome.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/FileManagerHome.ets index b019099b10..21b67c3977 100644 --- a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/FileManagerHome.ets +++ b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/FileManagerHome.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2023 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -17,9 +17,6 @@ import prompt from '@ohos.promptAction'; import router from '@ohos.router'; import { FileManager } from '@ohos/feature-file-manager'; import fs from '@ohos.file.fs'; -import Want from '@ohos.app.ability.Want'; -import common from '@ohos.app.ability.common'; -import { BusinessError } from '@ohos.base'; import { Logger } from '../../common/Common'; import MyWatcher from '../fileFs/MyWatcher'; @@ -41,7 +38,8 @@ const MAIN_LIST_ITEMS: MainListItemModel[] = [ { image: $r('app.media.video'), title: $r('app.string.video'), - routerUrl: 'filemanager/pages/video/VideoFileList' }, + routerUrl: 'filemanager/pages/video/VideoFileList' + }, { image: $r('app.media.document'), title: $r('app.string.document'), @@ -73,7 +71,7 @@ const MAIN_LIST_ITEMS: MainListItemModel[] = [ @Component export default struct FileManagerHome { - private baseDir: string = AppStorage.Get('sanBoxFileDir') as string; + private baseDir: string = AppStorage.get('sanBoxFileDir') as string; aboutToAppear() { FileManager.requestPermission(getContext(this)); @@ -85,9 +83,9 @@ export default struct FileManagerHome { let isDirectory = fs.statSync(filePathDir).isDirectory(); if (isDirectory) { fs.rmdirSync(filePathDir); - AppStorage.SetOrCreate('eventLog', 'unknown'); - AppStorage.SetOrCreate('fileNameLog', 'unknown'); - AppStorage.SetOrCreate('cookieLog', 'unknown'); + AppStorage.setOrCreate('eventLog', 'unknown'); + AppStorage.setOrCreate('fileNameLog', 'unknown'); + AppStorage.setOrCreate('cookieLog', 'unknown'); } } catch (e) { Logger.error(`remove fileRemove has failed for: {message: ${e.message}, code: ${e.code}}`); @@ -123,7 +121,7 @@ struct MainListItemComponent { private mainListItem: MainListItemModel = new MainListItemModel(); myWatcher: MyWatcher = new MyWatcher(); private filePathDir: string = ''; - private baseDir: string = AppStorage.Get('sanBoxFileDir') as string; + private baseDir: string = AppStorage.get('sanBoxFileDir') as string; @Styles itemPressedStyles() { .backgroundColor($r('app.color.item_pressed')) @@ -137,12 +135,12 @@ struct MainListItemComponent { let isDirectory = fs.statSync(this.filePathDir).isDirectory(); if (isDirectory) { fs.rmdirSync(this.filePathDir); - AppStorage.SetOrCreate('eventLog', 'unknown'); - AppStorage.SetOrCreate('fileNameLog', 'unknown'); - AppStorage.SetOrCreate('cookieLog', 'unknown'); + AppStorage.setOrCreate('eventLog', 'unknown'); + AppStorage.setOrCreate('fileNameLog', 'unknown'); + AppStorage.setOrCreate('cookieLog', 'unknown'); } - AppStorage.Set('eventArray', ['test']); - AppStorage.SetOrCreate('addIndex', 10); + AppStorage.set('eventArray', ['test']); + AppStorage.setOrCreate('addIndex', 10); this.myWatcher.readyFilesToWatcher(this.filePathDir); } @@ -185,21 +183,6 @@ struct MainListItemComponent { if (this.mainListItem.isFileWatcher) { this.readyForWatcher(); } - if (this.mainListItem.routerUrl === MAIN_LIST_ITEMS[5].routerUrl) { - let want: Want = { - deviceId: '', - bundleName: 'com.samples.my_phone_file', - abilityName: 'EntryAbility' - }; - let context: common.UIAbilityContext | undefined = AppStorage.get('context'); - context && context.startAbility(want, (err: BusinessError) => { - if (err.code) { - Logger.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`); - } - } - ); - return; - } router.pushUrl({ url: this.mainListItem.routerUrl }); }) } diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/ChangeTimeDialog.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/ChangeTimeDialog.ets similarity index 93% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/ChangeTimeDialog.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/ChangeTimeDialog.ets index cf6c6f5510..922575533b 100644 --- a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/ChangeTimeDialog.ets +++ b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/ChangeTimeDialog.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023-2024 Shenzhen Kaihong Digital Industry Development Co., Ltd. + * Copyright (c) 2023-2025 Shenzhen Kaihong Digital Industry Development Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -23,7 +23,7 @@ export struct ChangeTimeDialog { aboutToAppear() { if (this.time) { - AppStorage.SetOrCreate('time', this.time); + AppStorage.setOrCreate('time', this.time); } } @@ -52,7 +52,7 @@ export struct ChangeTimeDialog { .fontColor(Color.Black) .enableKeyboardOnFocus(false) .onChange((value: string) => { - AppStorage.SetOrCreate('time', value) + AppStorage.setOrCreate('time', value); }) Row() { diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/DeleteDialog.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/DeleteDialog.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/DeleteDialog.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/DeleteDialog.ets diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/InputNameDialog.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/InputNameDialog.ets similarity index 94% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/InputNameDialog.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/InputNameDialog.ets index 46b7fb857c..b195f3b305 100644 --- a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/InputNameDialog.ets +++ b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/InputNameDialog.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -24,7 +24,7 @@ export struct InputNameDialog { aboutToAppear() { if (this.name) { - AppStorage.SetOrCreate('name', this.name) + AppStorage.setOrCreate('name', this.name); } } @@ -58,7 +58,7 @@ export struct InputNameDialog { .fontColor(Color.Black) .enableKeyboardOnFocus(false) .onChange((value: string) => { - AppStorage.SetOrCreate('name', value) + AppStorage.setOrCreate('name', value); }) Row() { diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/MyPhone.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/MyPhone.ets similarity index 96% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/MyPhone.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/MyPhone.ets index 527694445f..9eeb0abe04 100644 --- a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/MyPhone.ets +++ b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/MyPhone.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development Co., Ltd. + * Copyright (c) 2023-2025 Shenzhen Kaihong Digital Industry Development Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -129,25 +129,28 @@ export struct MyPhone { // 路由返回后刷新页面 onPageShow() { - AppStorage.SetOrCreate('flashPage',!AppStorage.Get('flashPage')); + AppStorage.setOrCreate('flashPage', !AppStorage.get('flashPage')); this.subTitle = updateContextArea(this.directoryPath, myContext); } async aboutToAppear() { // 有路由参数就加载当前路由文件路径 let params = router.getParams() as Record; - this.directoryPath = params.directoryPath as string; - this.directoryName = params.directoryName as string; + try { + this.directoryPath = params.directoryPath as string; + this.directoryName = params.directoryName as string; + } catch (err) { + Logger.error(TAG, `aboutToAppear get router params failed, now in root path: ${this.directoryPath}`); + } Logger.info(TAG, "aboutToAppear after get router param test directoryPath: " + this.directoryPath + ", directoryName: " + this.directoryName); this.subTitle = updateContextArea(this.directoryPath, myContext); - /* - // 回到首页就读取当前内存变化 - if (this.directoryPath === BASE_PATH) { - this.totalSize = await FileSystem.getTotalSize(); - this.freeSize = await FileSystem.getFreeSize(); - } - */ + + // 回到首页就读取当前内存变化 + if (this.directoryPath === BASE_PATH) { + this.totalSize = await FileSystem.getTotalSize(); + this.freeSize = await FileSystem.getFreeSize(); + } this.updateFileData(); } @@ -184,7 +187,7 @@ export struct MyPhone { builder: InputNameDialog({ type: this.fileDialogType, confirm: () => { - const name: string | undefined = AppStorage.Get('name'); + const name: string | undefined = AppStorage.get('name'); if (!name) { return prompt.showToast({ message: $r('app.string.tip_input_name') }); } @@ -200,13 +203,12 @@ export struct MyPhone { }), autoCancel: true }); - // 重命名弹窗 renameDialog: CustomDialogController = new CustomDialogController({ builder: InputNameDialog({ name: this.selectedFiles[0], confirm: () => { - const name: string | undefined = AppStorage.Get('name'); + const name: string | undefined = AppStorage.get('name'); if (!name) { return prompt.showToast({ message: $r('app.string.tip_input_name') }); } @@ -219,7 +221,6 @@ export struct MyPhone { }), autoCancel: true }); - // 删除文件的弹窗 deleteDialog: CustomDialogController = new CustomDialogController({ builder: DeleteDialog({ @@ -237,7 +238,7 @@ export struct MyPhone { builder: ChangeTimeDialog({ time: this.selectedFilesTime, confirm: () => { - const time: string | undefined = AppStorage.Get('time'); + const time: string | undefined = AppStorage.get('time'); if (!time) { return prompt.showToast({ message: $r('app.string.tip_input_name') }); } @@ -249,7 +250,8 @@ export struct MyPhone { }) }) - @Builder MenuBuilder() { + @Builder + MenuBuilder() { Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Start }) { Text($r('app.string.label_change_time')) .fontSize(16) @@ -369,7 +371,7 @@ export struct MyPhone { .alignSelf(ItemAlign.Auto) .onClick(() => { this.fileData = []; - AppStorage.SetOrCreate('flashPage',!AppStorage.Get('flashPage')); + AppStorage.setOrCreate('flashPage', !AppStorage.get('flashPage')); router.back(); this.canMove = true; }) diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/OpenFile.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/OpenFile.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/OpenFile.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/MyPhone/OpenFile.ets diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/audio/AudioFileList.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/audio/AudioFileList.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/audio/AudioFileList.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/audio/AudioFileList.ets diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/common/FileList.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/common/FileList.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/common/FileList.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/common/FileList.ets diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/document/DocumentFileList.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/document/DocumentFileList.ets similarity index 94% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/document/DocumentFileList.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/document/DocumentFileList.ets index 770c2c1d40..a9c7f0cd16 100644 --- a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/document/DocumentFileList.ets +++ b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/document/DocumentFileList.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -30,7 +30,7 @@ let fileAccessHelperAllServer: fileAccess.FileAccessHelper; @Entry @Component struct DocumentFileList { - @State isNoFile: boolean = false; + @State isNoFile: boolean = true; @State showDeleteButton: boolean = false; @State fileList: DocumentDataSource = new DocumentDataSource(); title: Resource = {} as Resource; @@ -43,8 +43,13 @@ struct DocumentFileList { rootInfos = result; }); fileInfos = documentFileManager.iteratorDir(rootInfos); + AppStorage.setOrCreate('fileListCount', 0); documentFileManager.scanFiles(fileInfos).forEach((item: fileAccess.FileInfo) => { this.fileList.pushData(item); + if (this.fileList.totalCount() > 0) { + this.isNoFile = false; + AppStorage.setOrCreate('fileListCount', this.fileList.totalCount()); + } }); } @@ -58,6 +63,7 @@ struct DocumentFileList { Column() { Row() { Image($r('app.media.back')) + .id('backStep') .width(36) .height(36) .objectFit(ImageFit.Fill) @@ -96,7 +102,10 @@ struct DocumentFileList { height: 45 }) .stateStyles({ - pressed: this.imagePressedStyles + pressed: this.imagePressedStyles, + normal: { + .backgroundColor(Color.White) + } }) .onClick(async () => { let fileInfo: fileAccess.FileInfo | undefined = undefined; diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/document/DocumentFileManager.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/document/DocumentFileManager.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/document/DocumentFileManager.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/document/DocumentFileManager.ets diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/image/ImageFileList.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/image/ImageFileList.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/image/ImageFileList.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/image/ImageFileList.ets diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/image/ImagePreview.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/image/ImagePreview.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/image/ImagePreview.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/image/ImagePreview.ets diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/video/VideoFileList.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/video/VideoFileList.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/video/VideoFileList.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/filemanager/pages/video/VideoFileList.ets diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/pages/EditFile.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/pages/EditFile.ets similarity index 99% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/pages/EditFile.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/pages/EditFile.ets index f05c1fb834..42bf6c0b7e 100644 --- a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/pages/EditFile.ets +++ b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/pages/EditFile.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development Co., Ltd. + * Copyright (c) 2023-2025 Shenzhen Kaihong Digital Industry Development Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -56,7 +56,7 @@ struct EditFile { @State flagBackContent: boolean = false; myWatcher: MyWatcher = new MyWatcher(); scroller: Scroller = new Scroller(); - public baseDir: string = AppStorage.Get('sanBoxFileDir') as string; + public baseDir: string = AppStorage.get('sanBoxFileDir') as string; controllerArea: TextAreaController = new TextAreaController(); controllerInput: TextInputController = new TextInputController() diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/pages/Index.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/pages/Index.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/pages/Index.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/pages/Index.ets diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/pages/WatcherFile.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/pages/WatcherFile.ets similarity index 98% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/pages/WatcherFile.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/pages/WatcherFile.ets index 9d2d079c99..adfb15fdc5 100644 --- a/code/BasicFeature/FileManagement/FileManager/entry/src/main/ets/pages/WatcherFile.ets +++ b/code/SystemFeature/FileManagement/FileManager/entry/src/main/ets/pages/WatcherFile.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development Co., Ltd. + * Copyright (c) 2023-2025 Shenzhen Kaihong Digital Industry Development Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -119,7 +119,7 @@ struct Watcher { @StorageLink('newFileContent') newFileContent: string = ''; @StorageLink('eventArray') eventArray: Array = []; @StorageLink('addIndex') addIndex: number = 10; - public baseDir: string = AppStorage.Get('sanBoxFileDir') as string; + public baseDir: string = AppStorage.get('sanBoxFileDir') as string; @Builder itemEnd(index: number) { // 侧滑后尾端出现的组件 Row() { @@ -161,7 +161,7 @@ struct Watcher { this.currentDelFileName = this.showFilePath[index]; this.currentIndex = index; let lastIndex = this.currentDelFileName.length - 4; - let isDelDile = AppStorage.Get('isDelFile') as string; + let isDelDile = AppStorage.get('isDelFile') as string; this.currentDelFileName = isDelDile + this.currentDelFileName.substring(0, lastIndex) + '?'; this.deleteDialog.open(); }); diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/module.json5 b/code/SystemFeature/FileManagement/FileManager/entry/src/main/module.json5 similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/module.json5 rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/module.json5 diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/element/color.json b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/element/color.json similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/element/color.json rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/element/color.json diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/element/string.json b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/element/string.json similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/element/string.json rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/element/string.json diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/add.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/add.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/add.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/add.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/addDirectory.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/addDirectory.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/addDirectory.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/addDirectory.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/addFile.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/addFile.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/addFile.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/addFile.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/back.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/back.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/back.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/back.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/clean.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/clean.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/clean.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/clean.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/compressed_package.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/compressed_package.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/compressed_package.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/compressed_package.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/copy.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/copy.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/copy.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/copy.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/default_document.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/default_document.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/default_document.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/default_document.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/delete.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/delete.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/delete.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/delete.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/directory.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/directory.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/directory.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/directory.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/document.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/document.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/document.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/document.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/file.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/file.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/file.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/file.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_arrow_right.svg b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_arrow_right.svg similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_arrow_right.svg rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_arrow_right.svg diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_back.svg b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_back.svg similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_back.svg rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_back.svg diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_backward.svg b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_backward.svg similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_backward.svg rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_backward.svg diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_backward_right.svg b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_backward_right.svg similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_backward_right.svg rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_backward_right.svg diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_cancel_edit.svg b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_cancel_edit.svg similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_cancel_edit.svg rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_cancel_edit.svg diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_delete.svg b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_delete.svg similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_delete.svg rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_delete.svg diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_edit.svg b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_edit.svg similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_edit.svg rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_edit.svg diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_file.svg b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_file.svg similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_file.svg rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_file.svg diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_file_edit.svg b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_file_edit.svg similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_file_edit.svg rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_file_edit.svg diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_folder.svg b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_folder.svg similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_folder.svg rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_folder.svg diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_more.svg b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_more.svg similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_more.svg rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_more.svg diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_ok.svg b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_ok.svg similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_ok.svg rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_ok.svg diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_public_clean.svg b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_public_clean.svg similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_public_clean.svg rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_public_clean.svg diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_rank.svg b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_rank.svg similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_rank.svg rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_rank.svg diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_save.svg b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_save.svg similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_save.svg rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/ic_save.svg diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/icon.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/icon.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/icon.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/icon.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/image.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/image.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/image.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/image.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/img.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/img.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/img.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/img.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/left.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/left.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/left.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/left.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/music.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/music.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/music.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/music.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/my_phone.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/my_phone.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/my_phone.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/my_phone.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/no_file.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/no_file.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/no_file.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/no_file.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/nothing.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/nothing.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/nothing.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/nothing.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/option.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/option.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/option.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/option.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/rename.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/rename.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/rename.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/rename.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/rename_gray.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/rename_gray.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/rename_gray.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/rename_gray.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/right.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/right.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/right.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/right.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/right_arrow.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/right_arrow.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/right_arrow.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/right_arrow.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/select.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/select.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/select.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/select.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/share.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/share.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/share.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/share.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/sort.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/sort.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/sort.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/sort.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/video.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/video.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/video.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/video.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/watcher.png b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/watcher.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/media/watcher.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/media/watcher.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/profile/main_pages.json b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/profile/main_pages.json similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/base/profile/main_pages.json rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/base/profile/main_pages.json diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/en/element/string.json b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/en/element/string.json similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/en/element/string.json rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/en/element/string.json diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/zh/element/string.json b/code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/zh/element/string.json similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/main/resources/zh/element/string.json rename to code/SystemFeature/FileManagement/FileManager/entry/src/main/resources/zh/element/string.json diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/ets/Application/TestAbilityStage.ts b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/ets/Application/TestAbilityStage.ts similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/ets/Application/TestAbilityStage.ts rename to code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/ets/Application/TestAbilityStage.ts diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/ets/TestRunner/OpenHarmonyTestRunner.ts b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/ets/TestRunner/OpenHarmonyTestRunner.ts similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/ets/TestRunner/OpenHarmonyTestRunner.ts rename to code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/ets/TestRunner/OpenHarmonyTestRunner.ts diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/ets/test/Ability.test.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/ets/test/Ability.test.ets similarity index 52% rename from code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/ets/test/Ability.test.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/ets/test/Ability.test.ets index 39a5f8e527..7927bca4cb 100644 --- a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/ets/test/Ability.test.ets +++ b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/ets/test/Ability.test.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2023 Huawei Device Co., Ltd. + * Copyright (c) 2022-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -13,13 +13,14 @@ * limitations under the License. */ -import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium' -import { Driver, ON, MatchPattern } from '@ohos.UiTest' -import { Logger, FileManager, ThumbnailImage } from '@ohos/feature-file-manager' -import AbilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry' -import mediaLibrary from '@ohos.multimedia.mediaLibrary' -import UIAbility from '@ohos.app.ability.UIAbility' -import fileAccess from '@ohos.file.fileAccess' +import { describe, afterAll, it, expect } from '@ohos/hypium'; +import { Driver, ON, Component } from '@ohos.UiTest'; +import { Logger, FileManager } from '@ohos/feature-file-manager'; +import AbilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry'; +import UIAbility from '@ohos.app.ability.UIAbility'; +import { userFileManager } from '@kit.CoreFileKit'; +import { dataSharePredicates } from '@kit.ArkData'; +import { common } from '@kit.AbilityKit'; const TAG = '[Sample_FileManager]' @@ -27,37 +28,35 @@ const BUNDLE = 'fileManager_' // 屏幕上最多显示11条记录 const MAX_NUM = 11 -const TYPE: [mediaLibrary.MediaType, string, mediaLibrary.DirectoryType][] = [ - [mediaLibrary.MediaType.IMAGE, '.jpg', mediaLibrary.DirectoryType.DIR_IMAGE], - [mediaLibrary.MediaType.VIDEO, '.mp4', mediaLibrary.DirectoryType.DIR_VIDEO], - [mediaLibrary.MediaType.FILE, '.txt', mediaLibrary.DirectoryType.DIR_DOCUMENTS], - [mediaLibrary.MediaType.AUDIO, '.mp3', mediaLibrary.DirectoryType.DIR_AUDIO] +const TYPE: [userFileManager.FileType, string][] = [ + [userFileManager.FileType.IMAGE, '.jpg'], + [userFileManager.FileType.VIDEO, '.mp4'], + [userFileManager.FileType.AUDIO, '.mp3'] ] -const MOCK: string = 'mock_' -const TEST_NUM = 5 + const TIME_OUT = 10000 let ability: UIAbility = new UIAbility() -let file: mediaLibrary.FileAsset[] = []; +let file: string[] = []; +let context = getContext(this) as common.UIAbilityContext; // 判断文件是否相同 -async function fileAssertEqual(firstFile: mediaLibrary.FileAsset, secondFile: mediaLibrary.FileAsset): Promise { +async function fileAssertEqual(firstFile: userFileManager.FileAsset, secondFile: userFileManager.FileAsset): Promise { Logger.info(TAG, 'firstFile uri = ' + firstFile.uri + ' and secondFile uri = ' + secondFile.uri); let uri = await firstFile.uri === secondFile.uri; return uri; } + // 检查页面是否正常显示 -async function checkPage(library: mediaLibrary.MediaLibrary, driver: Driver, type: mediaLibrary.MediaType) { +async function checkPage(driver: Driver, fileType: userFileManager.FileType) { Logger.info(TAG, 'checkPage begin ') - let fileFetchOption: mediaLibrary.MediaFetchOptions = { - selections: mediaLibrary.FileKey.MEDIA_TYPE + '= ?', - selectionArgs: [type.toString()], - } - let fetchFileResult: mediaLibrary.FetchFileResult | undefined = undefined - try { - fetchFileResult = await library.getFileAssets(fileFetchOption) - } catch (error) { - expect().assertFail() - } + let mgr = userFileManager.getUserFileMgr(getContext()); + let fileKeyObj = userFileManager.ImageVideoKey; + let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); + let fetchOptions: userFileManager.FetchOptions = { + fetchColumns: [], + predicates: predicates.equalTo(fileKeyObj.FILE_TYPE.toString(), fileType) + }; + let fetchFileResult: userFileManager.FetchResult = await mgr.getPhotoAssets(fetchOptions); if (fetchFileResult?.getCount() === 0) { await driver.assertComponentExist(ON.id('no_file')) await driver.delayMs(1000) @@ -90,7 +89,9 @@ export default function abilityTest() { // 删除测试过程中创建的文件 afterAll(async () => { for (let i = 0; i < file.length; i++) { - await FileManager.deleteFileAsset(file[i]); + let mgr = userFileManager.getUserFileMgr(context); + await mgr.delete(file[i]); + Logger.info('delete successfully'); } }) @@ -98,7 +99,7 @@ export default function abilityTest() { /** * 打开应用 */ - it(BUNDLE + 'StartAbility_001', 0, async (done : () => void) => { + it('StartAbility_001', 0, async (done: () => void) => { Logger.info(TAG, BUNDLE + 'StartAbility_001 begin') try { await abilityDelegator.startAbility({ @@ -121,7 +122,7 @@ export default function abilityTest() { /** * 获取权限 */ - it(BUNDLE + 'RequestPermissionFunction_001', 0, async () => { + it('RequestPermissionFunction_001', 0, async () => { Logger.info(TAG, BUNDLE + 'RequestPermissionFunction begin') let driver = Driver.create() await driver.delayMs(2000) @@ -130,13 +131,18 @@ export default function abilityTest() { await driver.assertComponentExist(ON.text(await getResourceString($r('app.string.permit')))) let btnStart = await driver.findComponent(ON.text(await getResourceString($r('app.string.permit')))) await btnStart.click() + await driver.delayMs(1000); + await btnStart.click(); + await driver.delayMs(1000); + await btnStart.click(); + await driver.delayMs(1000); Logger.info(TAG, BUNDLE + 'RequestPermissionFunction end') }) /** * 点击主页中监听文件 */ - it(BUNDLE + 'WatcherCopyFunction_001', 0, async () => { + it('WatcherCopyFunction_001', 0, async () => { Logger.info(TAG, BUNDLE + 'WatcherCopyFunction_001 begin') let driver = await Driver.create() await driver.delayMs(1000) @@ -240,15 +246,26 @@ export default function abilityTest() { let driver = Driver.create(); await driver.delayMs(1000); await driver.assertComponentExist(ON.id('fileContent')); - let fileContent = await driver.findComponent(ON.id('fileContent')); - await fileContent.clearText(); + let fileContent: Component = await driver.findComponent(ON.id('fileContent')); + await fileContent.click(); + await driver.delayMs(1000); + await fileContent.doubleClick(); + let selectAll = await getResourceString($r('app.string.select_all')); + let allSelect = await driver.findComponent(ON.text(selectAll)); + await allSelect.click(); + await driver.delayMs(1000); + await driver.click(667, 1033); + await driver.delayMs(1000); await fileContent.inputText('newFileContent'); + await driver.delayMs(1000); await driver.assertComponentExist(ON.id('save')); let save = await driver.findComponent(ON.id('save')); await save.click(); + await driver.delayMs(1000); await driver.assertComponentExist(ON.id('backWatcherFile')); let back = await driver.findComponent(ON.id('backWatcherFile')); await back.click(); + await driver.delayMs(1000); Logger.info(TAG, 'File_Fs_modifyFileContent_001 end'); }) @@ -339,9 +356,16 @@ export default function abilityTest() { Logger.info(TAG, 'File_Fs_backward_003 begin'); let driver = Driver.create(); await driver.delayMs(1000); - await driver.assertComponentExist(ON.id('fileContent')); - let fileContent = await driver.findComponent(ON.id('fileContent')); - await fileContent.clearText(); + let fileContent: Component = await driver.findComponent(ON.id('fileContent')); + await fileContent.click(); + await driver.delayMs(1000); + await fileContent.doubleClick(); + let selectAll = await getResourceString($r('app.string.select_all')); + let allSelect = await driver.findComponent(ON.text(selectAll)); + await allSelect.click(); + await driver.delayMs(1000); + await driver.click(667, 1033); + await driver.delayMs(1000); await fileContent.inputText('newFileContent'); await driver.assertComponentExist(ON.id('save')); let save = await driver.findComponent(ON.id('save')); @@ -360,7 +384,8 @@ export default function abilityTest() { await driver.assertComponentExist(ON.id('backward')); let backward = await driver.findComponent(ON.id('backward')); await backward.click(); - await driver.assertComponentExist(ON.text('size: 12B')); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('size: 4096B')); await driver.assertComponentExist(ON.id('backWatcherFile')); let back = await driver.findComponent(ON.id('backWatcherFile')); await back.click(); @@ -371,7 +396,7 @@ export default function abilityTest() { /** * 点击添加监听后停止监听,测试停止监听页面是否出现弹窗白屏 */ - it(BUNDLE + 'StopWatcherFunction_001', 0, async () => { + it('StopWatcherFunction_001', 0, async () => { Logger.info(TAG, BUNDLE + 'StopWatcherFunction_001 begin') let driver = await Driver.create() await driver.delayMs(1000) @@ -380,11 +405,12 @@ export default function abilityTest() { let stopWatcher = await driver.findComponent(ON.id('stopWatcher')); await stopWatcher.click(); await driver.delayMs(1000); + await driver.pressBack(); + await driver.delayMs(1000); // 点击添加监听按钮 await driver.assertComponentExist(ON.id('addWatcher')); let addWatcher = await driver.findComponent(ON.id('addWatcher')); await addWatcher.click(); - await addWatcher.click(); await driver.delayMs(1000); // 点击确定 let confirmText = await getResourceString($r('app.string.label_confirm')); @@ -440,9 +466,11 @@ export default function abilityTest() { await driver.assertComponentExist(ON.text('IN_DELETE')); let deleteWatcher = await driver.findComponent(ON.text('IN_DELETE')); await deleteWatcher.click(); + await driver.delayMs(1000); await driver.assertComponentExist(ON.text('IN_CREATE')); let createWatcher = await driver.findComponent(ON.text('IN_CREATE')); await createWatcher.click(); + await driver.delayMs(1000); let confirmText = await getResourceString($r('app.string.label_confirm')); await driver.assertComponentExist(ON.text(confirmText)); let sureWatcher = await driver.findComponent(ON.text(confirmText)); @@ -462,9 +490,11 @@ export default function abilityTest() { await driver.assertComponentExist(ON.id('addFile')); let addFile = await driver.findComponent(ON.id('addFile')); await addFile.click(); + await driver.delayMs(1000); await driver.assertComponentExist(ON.id('list')); let scroller = await driver.findComponent(ON.id('list')); await scroller.scrollToBottom(); + await driver.delayMs(1000); await driver.assertComponentExist(ON.text('event: 256')); await driver.assertComponentExist(ON.text('cookie: 0')); await driver.delayMs(1000); @@ -482,9 +512,11 @@ export default function abilityTest() { await driver.assertComponentExist(ON.id('addWatcher')); let addWatcher = await driver.findComponent(ON.id('addWatcher')); await addWatcher.click(); + await driver.delayMs(1000); await driver.assertComponentExist(ON.text('IN_DELETE')); let deleteWatcher = await driver.findComponent(ON.text('IN_DELETE')); await deleteWatcher.click(); + await driver.delayMs(1000); let confirmText = await getResourceString($r('app.string.label_confirm')); await driver.assertComponentExist(ON.text(confirmText)); let sureWatcher = await driver.findComponent(ON.text(confirmText)); @@ -516,12 +548,18 @@ export default function abilityTest() { * 添加监听之后删除文件 */ it('File_Fs_afterAddDelWatcher_delFile_002', 1, async () => { + let deleteString: string = await getResourceString($r('app.string.deleteFile')); Logger.info(TAG, 'File_Fs_afterAddDelWatcher_delFile_002 begin'); let driver = Driver.create(); + await driver.swipe(600, 837, 300, 837, 600); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.id('deleteFile')); + let deleteFile = await driver.findComponent(ON.id('deleteFile')); + await deleteFile.click(); + await driver.delayMs(1000); + let deleteButton = await driver.findComponent(ON.text(deleteString)); + await deleteButton.click(); await driver.delayMs(1000); - await driver.assertComponentExist(ON.id('deleteWatcher')); - let deleteWatcher = await driver.findComponent(ON.id('deleteWatcher')); - await deleteWatcher.click(); await driver.assertComponentExist(ON.text('event: 512')); await driver.assertComponentExist(ON.text('cookie: 0')); await driver.delayMs(1000); @@ -539,9 +577,11 @@ export default function abilityTest() { await driver.assertComponentExist(ON.id('stopWatcher')); let stopWatcher = await driver.findComponent(ON.id('stopWatcher')); await stopWatcher.click(); + await driver.delayMs(1000); await driver.assertComponentExist(ON.text('IN_CREATE')); let createWatcher = await driver.findComponent(ON.text('IN_CREATE')); await createWatcher.click(); + await driver.delayMs(1000); let confirmText = await getResourceString($r('app.string.label_confirm')); await driver.assertComponentExist(ON.text(confirmText)); let sureWatcher = await driver.findComponent(ON.text(confirmText)); @@ -579,9 +619,11 @@ export default function abilityTest() { await driver.assertComponentExist(ON.id('stopWatcher')); let stopWatcher = await driver.findComponent(ON.id('stopWatcher')); await stopWatcher.click(); + await driver.delayMs(1000); await driver.assertComponentExist(ON.text('IN_DELETE')); let deleteWatcher = await driver.findComponent(ON.text('IN_DELETE')); await deleteWatcher.click(); + await driver.delayMs(1000); let confirmText = await getResourceString($r('app.string.label_confirm')); await driver.assertComponentExist(ON.text(confirmText)); let sureWatcher = await driver.findComponent(ON.text(confirmText)); @@ -616,6 +658,7 @@ export default function abilityTest() { await driver.assertComponentExist(ON.id('deleteFile')); let deleteFile = await driver.findComponent(ON.id('deleteFile')); await deleteFile.click(); + await driver.delayMs(1000); await driver.assertComponentExist(ON.id('deleteWatcher')); let deleteWatcher = await driver.findComponent(ON.id('deleteWatcher')); await deleteWatcher.click(); @@ -634,6 +677,7 @@ export default function abilityTest() { await driver.assertComponentExist(ON.id('addWatcher')); let addWatcher = await driver.findComponent(ON.id('addWatcher')); await addWatcher.click(); + await driver.delayMs(1000); await driver.assertComponentExist(ON.text('IN_MOVE_SELF')); let moveSelfWatcher = await driver.findComponent(ON.text('IN_MOVE_SELF')); await moveSelfWatcher.click(); @@ -650,6 +694,7 @@ export default function abilityTest() { await driver.assertComponentExist(ON.text('IN_MODIFY')); let modifyWatcher = await driver.findComponent(ON.text('IN_MODIFY')); await modifyWatcher.click(); + await driver.delayMs(1000); let confirmText = await getResourceString($r('app.string.label_confirm')); await driver.assertComponentExist(ON.text(confirmText)); let sureWatcher = await driver.findComponent(ON.text(confirmText)); @@ -683,13 +728,22 @@ export default function abilityTest() { Logger.info(TAG, 'File_Fs_afterAddModifyWatcher_editFile002 begin'); let driver = Driver.create(); await driver.delayMs(1000); - await driver.assertComponentExist(ON.id('fileContent')); - let fileContent = await driver.findComponent(ON.id('fileContent')); - await fileContent.clearText(); + let fileContent: Component = await driver.findComponent(ON.id('fileContent')); + await fileContent.click(); + await driver.delayMs(1000); + await fileContent.doubleClick(); + let selectAll = await getResourceString($r('app.string.select_all')); + let allSelect = await driver.findComponent(ON.text(selectAll)); + await allSelect.click(); + await driver.delayMs(1000); + await driver.click(667, 1033); + await driver.delayMs(1000); await fileContent.inputText('new FileContent'); + await driver.delayMs(1000); await driver.assertComponentExist(ON.id('save')); let save = await driver.findComponent(ON.id('save')); await save.click(); + await driver.delayMs(1000); await driver.assertComponentExist(ON.id('backWatcherFile')); let back = await driver.findComponent(ON.id('backWatcherFile')); await back.click(); @@ -724,9 +778,11 @@ export default function abilityTest() { await driver.assertComponentExist(ON.id('stopWatcher')); let stopWatcher = await driver.findComponent(ON.id('stopWatcher')); await stopWatcher.click(); + await driver.delayMs(1000); await driver.assertComponentExist(ON.text('IN_MODIFY')); let modifyWatcher = await driver.findComponent(ON.text('IN_MODIFY')); await modifyWatcher.click(); + await driver.delayMs(1000); let confirmText = await getResourceString($r('app.string.label_confirm')); await driver.assertComponentExist(ON.text(confirmText)); let sureWatcher = await driver.findComponent(ON.text(confirmText)); @@ -760,9 +816,16 @@ export default function abilityTest() { Logger.info(TAG, 'File_Fs_afterStopModifyWatcher_editFile002 begin'); let driver = Driver.create(); await driver.delayMs(1000); - await driver.assertComponentExist(ON.id('fileContent')); - let fileContent = await driver.findComponent(ON.id('fileContent')); - await fileContent.clearText(); + let fileContent: Component = await driver.findComponent(ON.id('fileContent')); + await fileContent.click(); + await driver.delayMs(1000); + await fileContent.doubleClick(); + let selectAll = await getResourceString($r('app.string.select_all')); + let allSelect = await driver.findComponent(ON.text(selectAll)); + await allSelect.click(); + await driver.delayMs(1000); + await driver.click(667, 1033); + await driver.delayMs(1000); await fileContent.inputText('content'); await driver.assertComponentExist(ON.id('save')); let save = await driver.findComponent(ON.id('save')); @@ -804,7 +867,7 @@ export default function abilityTest() { /** * 点击主页中图片 */ - it(BUNDLE + 'ImageFunction_001', 0, async () => { + it('ImageFunction_001', 0, async () => { Logger.info(TAG, BUNDLE + 'ImageFunction_001 begin') let driver = await Driver.create() await driver.delayMs(1000) @@ -815,17 +878,14 @@ export default function abilityTest() { await btnStart.click() await driver.delayMs(1000) // 跳转图片 - let library = await mediaLibrary.getMediaLibrary(getContext()) - let imagesFetchOption: mediaLibrary.MediaFetchOptions = { - selections: mediaLibrary.FileKey.MEDIA_TYPE + '= ?', - selectionArgs: [mediaLibrary.MediaType.IMAGE.toString()], - } - let fetchFileResult: mediaLibrary.FetchFileResult | undefined = undefined - try { - fetchFileResult = await library.getFileAssets(imagesFetchOption) - } catch (error) { - expect().assertFail() - } + let mgr = userFileManager.getUserFileMgr(getContext()); + let fileKeyObj = userFileManager.ImageVideoKey; + let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); + let fetchOptions: userFileManager.FetchOptions = { + fetchColumns: [], + predicates: predicates.equalTo(fileKeyObj.FILE_TYPE.toString(), userFileManager.FileType.IMAGE.toString()) + }; + let fetchFileResult: userFileManager.FetchResult = await mgr.getPhotoAssets(fetchOptions); // 图片数量为0,则显示没有相关文件 if (fetchFileResult?.getCount() === 0) { await driver.assertComponentExist(ON.id('no_file')) @@ -855,7 +915,7 @@ export default function abilityTest() { // 点击删除按钮后能正常显示 await btnDel[0].click() await driver.delayMs(1000) - await checkPage(library, driver, mediaLibrary.MediaType.IMAGE) + await checkPage(driver, userFileManager.FileType.IMAGE); } // 返回主页 await driver.assertComponentExist(ON.type('Image')) @@ -868,7 +928,7 @@ export default function abilityTest() { /** * 点击主页中视频 */ - it(BUNDLE + 'VideoFunction_001', 0, async () => { + it('VideoFunction_001', 0, async () => { Logger.info(TAG, BUNDLE + 'VideoFunction_001 begin') let driver = await Driver.create() await driver.delayMs(1000) @@ -879,17 +939,14 @@ export default function abilityTest() { await btnStart.click() await driver.delayMs(1000) // 跳转视频文件管理页 - let library = await mediaLibrary.getMediaLibrary(getContext()) - let videoFetchOption: mediaLibrary.MediaFetchOptions = { - selections: mediaLibrary.FileKey.MEDIA_TYPE + '= ?', - selectionArgs: [mediaLibrary.MediaType.VIDEO.toString()], - } - let fetchFileResult: mediaLibrary.FetchFileResult | undefined = undefined - try { - fetchFileResult = await library.getFileAssets(videoFetchOption) - } catch (error) { - expect().assertFail() - } + let mgr = userFileManager.getUserFileMgr(getContext()); + let fileKeyObj = userFileManager.ImageVideoKey; + let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); + let fetchOptions: userFileManager.FetchOptions = { + fetchColumns: [], + predicates: predicates.equalTo(fileKeyObj.FILE_TYPE.toString(), userFileManager.FileType.VIDEO.toString()) + }; + let fetchFileResult: userFileManager.FetchResult = await mgr.getPhotoAssets(fetchOptions); // 视频数量为0,则显示没有相关文件 if (fetchFileResult?.getCount() === 0) { await driver.assertComponentExist(ON.id('no_file')) @@ -914,7 +971,7 @@ export default function abilityTest() { // 点击删除按钮后能正常显示 await btnDel[0].click() await driver.delayMs(1000) - await checkPage(library, driver, mediaLibrary.MediaType.VIDEO) + await checkPage(driver, userFileManager.FileType.VIDEO); await driver.delayMs(1000) } // 返回主页 @@ -928,7 +985,7 @@ export default function abilityTest() { /** * 点击主页中文档 */ - it(BUNDLE + 'DocumentFunction_001', 0, async () => { + it('DocumentFunction_001', 0, async () => { Logger.info(TAG, BUNDLE + 'DocumentFunction_001 begin') let driver = await Driver.create() await driver.delayMs(1000) @@ -938,32 +995,15 @@ export default function abilityTest() { let btnStart = await driver.findComponent(ON.type('ListItem').id('ListItem2')) await btnStart.click() await driver.delayMs(1000) - // 跳转文档文件管理页 - let library = await mediaLibrary.getMediaLibrary(getContext()) - let fileFetchOption: mediaLibrary.MediaFetchOptions = { - selections: mediaLibrary.FileKey.MEDIA_TYPE + '= ?', - selectionArgs: [mediaLibrary.MediaType.FILE.toString()], - } - let fetchFileResult: mediaLibrary.FetchFileResult | undefined = undefined - try { - fetchFileResult = await library.getFileAssets(fileFetchOption) - } catch (error) { - expect().assertFail() - } // 文档数量为0,则显示没有相关文件 - if (fetchFileResult?.getCount() === 0) { + if (AppStorage.get('fileListCount') === 0) { await driver.assertComponentExist(ON.id('no_file')) await driver.delayMs(1000) } else { // 否则显示全部文档文件 await driver.assertComponentExist(ON.type('ListItem')) let btnItem = await driver.findComponents(ON.type('ListItem')) - Logger.info(TAG, 'document item length = ' + btnItem.length + ' and document file count =' + fetchFileResult?.getCount()) - if (fetchFileResult!.getCount() < MAX_NUM) { - expect(btnItem.length).assertEqual(fetchFileResult?.getCount()) - } else { - expect(btnItem.length).assertEqual(MAX_NUM) - } + expect(btnItem.length).assertEqual(AppStorage.get('fileListCount')); // 点击文档项(开发中) await btnItem[0].click() await driver.delayMs(1000) @@ -974,19 +1014,15 @@ export default function abilityTest() { // 点击删除按钮后能正常显示 await btnDel[0].click() await driver.delayMs(1000) - await checkPage(library, driver, mediaLibrary.MediaType.FILE) - await driver.delayMs(1000) } // 存在添加按钮,点击后能够正常显示 await driver.assertComponentExist(ON.id('fileAdd')) let btnAdd = await driver.findComponent(ON.id('fileAdd')) await btnAdd.click() await driver.delayMs(1000) - await checkPage(library, driver, mediaLibrary.MediaType.FILE) - await driver.delayMs(1000) // 返回主页 await driver.assertComponentExist(ON.type('Image')) - let btnBack = await driver.findComponent(ON.id('back')) + let btnBack = await driver.findComponent(ON.id('backStep')); await btnBack.click() await driver.delayMs(1000) Logger.info(TAG, BUNDLE + 'DocumentFunction_001 end') @@ -995,7 +1031,7 @@ export default function abilityTest() { /** * 点击主页中音频 */ - it(BUNDLE + 'AudioFunction_001', 0, async () => { + it('AudioFunction_001', 0, async () => { Logger.info(TAG, BUNDLE + 'AudioFunction_001 begin') let driver = await Driver.create() await driver.delayMs(1000) @@ -1006,17 +1042,14 @@ export default function abilityTest() { await btnStart.click() await driver.delayMs(1000) // 跳转音频文件管理页 - let library = await mediaLibrary.getMediaLibrary(getContext()) - let audioFetchOption: mediaLibrary.MediaFetchOptions = { - selections: mediaLibrary.FileKey.MEDIA_TYPE + '= ?', - selectionArgs: [mediaLibrary.MediaType.AUDIO.toString()], - } - let fetchFileResult: mediaLibrary.FetchFileResult | undefined = undefined - try { - fetchFileResult = await library.getFileAssets(audioFetchOption) - } catch (error) { - expect().assertFail() - } + let mgr = userFileManager.getUserFileMgr(getContext()); + let fileKeyObj = userFileManager.ImageVideoKey; + let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); + let fetchOptions: userFileManager.FetchOptions = { + fetchColumns: [], + predicates: predicates.equalTo(fileKeyObj.FILE_TYPE.toString(), userFileManager.FileType.AUDIO.toString()) + }; + let fetchFileResult: userFileManager.FetchResult = await mgr.getPhotoAssets(fetchOptions); // 音频数量为0,则显示没有相关文件 if (fetchFileResult?.getCount() === 0) { await driver.assertComponentExist(ON.id('no_file')) @@ -1042,7 +1075,7 @@ export default function abilityTest() { // 点击删除按钮后能正常显示 await btnDel[0].click() await driver.delayMs(1000) - await checkPage(library, driver, mediaLibrary.MediaType.AUDIO) + await checkPage(driver, userFileManager.FileType.AUDIO); await driver.delayMs(1000) } // 返回主页 @@ -1056,7 +1089,7 @@ export default function abilityTest() { /** * 点击主页中压缩包 */ - it(BUNDLE + 'ZipFunction_001', 0, async () => { + it('ZipFunction_001', 0, async () => { Logger.info(TAG, BUNDLE + 'ZipFunction_001 begin') let driver = await Driver.create() await driver.delayMs(1000) @@ -1074,269 +1107,248 @@ export default function abilityTest() { * 点击主页中我的手机 */ it('MobileFunction_001', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_001 begin'); - let driver = Driver.create(); - await driver.delayMs(500); - // 主页能够显示List中内容,点击手机 - await driver.assertComponentExist(ON.type('List')); - await driver.assertComponentExist(ON.type('ListItem').id('ListItem5')); - let btnStart = await driver.findComponent(ON.type('ListItem').id('ListItem5')); - await btnStart.click(); - await driver.delayMs(500); - // 跳转我的手机界面 - await driver.assertComponentExist(ON.type('Text').id('makeFile')); - await driver.assertComponentExist(ON.type('Text').id('makeDirectory')); - await driver.assertComponentExist(ON.type('Text').id('sort')); - await driver.assertComponentExist(ON.type('Text').id('clean')); - // 测试新建文件及打开功能 - let btnFile = await driver.findComponent(ON.type('Text').id('makeFile')); - await btnFile.click(); - await driver.delayMs(500); - await driver.assertComponentExist(ON.id('cancel')); - let btnCancel = await driver.findComponent(ON.id('cancel')); - await btnCancel.click(); - await driver.delayMs(500); - await btnFile.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('input')); - let input = await driver.findComponent(ON.id('input')); - await input.inputText('testFile'); - await driver.assertComponentExist(ON.id('promise')); - let btnPromise = await driver.findComponent(ON.id('promise')); - await btnPromise.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.text('testFile')); - let testFile = await driver.findComponent(ON.text('testFile')); - await testFile.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('openFileName')); - let back = await driver.findComponent(ON.id('openFileBack')); - await back.click(); - await driver.delayMs(200); - Logger.info(TAG, BUNDLE + 'MobileFunction_001 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_001 begin'); + let driver = Driver.create(); + await driver.delayMs(500); + // 主页能够显示List中内容,点击手机 + await driver.assertComponentExist(ON.type('List')); + await driver.assertComponentExist(ON.type('ListItem').id('ListItem5')); + let btnStart = await driver.findComponent(ON.type('ListItem').id('ListItem5')); + await btnStart.click(); + await driver.delayMs(500); + // 跳转我的手机界面 + await driver.assertComponentExist(ON.type('Text').id('makeFile')); + await driver.assertComponentExist(ON.type('Text').id('makeDirectory')); + await driver.assertComponentExist(ON.type('Text').id('sort')); + await driver.assertComponentExist(ON.type('Text').id('clean')); + // 测试新建文件及打开功能 + let btnFile = await driver.findComponent(ON.type('Text').id('makeFile')); + await btnFile.click(); + await driver.delayMs(500); + await driver.assertComponentExist(ON.id('cancel')); + let btnCancel = await driver.findComponent(ON.id('cancel')); + await btnCancel.click(); + await driver.delayMs(500); + await btnFile.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('input')); + let input = await driver.findComponent(ON.id('input')); + await input.inputText('testFile'); + await driver.assertComponentExist(ON.id('promise')); + let btnPromise = await driver.findComponent(ON.id('promise')); + await btnPromise.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.text('testFile')); + let testFile = await driver.findComponent(ON.text('testFile')); + await testFile.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('openFileName')); + let back = await driver.findComponent(ON.id('openFileBack')); + await back.click(); + await driver.delayMs(200); + Logger.info(TAG, BUNDLE + 'MobileFunction_001 end'); }); /** * 测试新建文件夹功能 */ it('MobileFunction_002', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_002 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - // 测试新建文件夹功能 - let btnDirectory = await driver.findComponent(ON.type('Text').id('makeDirectory')); - await btnDirectory.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('cancel')); - let directoryCancel = await driver.findComponent(ON.id('cancel')); - await directoryCancel.click(); - await driver.delayMs(200); - await btnDirectory.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('input')); - let inputDirectory = await driver.findComponent(ON.id('input')); - await inputDirectory.inputText('testDirectory/testSubDirectory'); - await driver.assertComponentExist(ON.id('promise')); - let directoryPromise = await driver.findComponent(ON.id('promise')); - await directoryPromise.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.text('testDirectory')); - let testDirectory = await driver.findComponent(ON.text('testDirectory')); - await testDirectory.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.text('testSubDirectory')); - // 返回 - await driver.pressBack(); - await driver.delayMs(500); - Logger.info(TAG, BUNDLE + 'MobileFunction_002 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_002 begin'); + let driver = Driver.create(); + await driver.delayMs(200); + // 测试新建文件夹功能 + let btnDirectory = await driver.findComponent(ON.type('Text').id('makeDirectory')); + await btnDirectory.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('cancel')); + let directoryCancel = await driver.findComponent(ON.id('cancel')); + await directoryCancel.click(); + await driver.delayMs(200); + await btnDirectory.click(); + await driver.delayMs(2000); + await driver.assertComponentExist(ON.id('input')); + let inputDirectory = await driver.findComponent(ON.id('input')); + await inputDirectory.inputText('testDirectory/testSubDirectory'); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.id('promise')); + let directoryPromise = await driver.findComponent(ON.id('promise')); + await directoryPromise.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.text('testDirectory')); + let testDirectory = await driver.findComponent(ON.text('testDirectory')); + await testDirectory.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.text('testSubDirectory')); + // 返回 + await driver.pressBack(); + await driver.delayMs(500); + Logger.info(TAG, BUNDLE + 'MobileFunction_002 end'); }); /** * 测试复制 */ it('MobileFunction_003', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_003 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - // 点击select图片 - await driver.assertComponentExist(ON.id('select')); - let selectImage = await driver.findComponent(ON.id('select')); - await selectImage.click(); - await driver.delayMs(500); - await driver.assertComponentExist(ON.type('Text').id('copy')); - let btnCopy = await driver.findComponent(ON.type('Text').id('copy')); - await driver.assertComponentExist(ON.type('Text').id('rename')); - let btnRename = await driver.findComponent(ON.type('Text').id('rename')); - await driver.assertComponentExist(ON.type('Text').id('share')); - await driver.assertComponentExist(ON.type('Text').id('more')); - let btnDelete = await driver.findComponent(ON.type('Text').id('delete')); - // 测试复制 - let testFile = await driver.findComponent(ON.text('testFile')); - let testDirectory = await driver.findComponent(ON.text('testDirectory')); - await testFile.click(); - await btnCopy.click(); - await testDirectory.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('move')); - let btnMove = await driver.findComponent(ON.id('move')); - await btnMove.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.text('testFile')); - // 返回 - await driver.pressBack(); - await driver.delayMs(500); - Logger.info(TAG, 'MobileFunction_003 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_003 begin'); + let driver = Driver.create(); + await driver.delayMs(200); + // 点击select图片 + await driver.assertComponentExist(ON.id('select')); + let selectImage = await driver.findComponent(ON.id('select')); + await selectImage.click(); + await driver.delayMs(500); + await driver.assertComponentExist(ON.type('Text').id('copy')); + let btnCopy = await driver.findComponent(ON.type('Text').id('copy')); + await driver.assertComponentExist(ON.type('Text').id('rename')); + let btnRename = await driver.findComponent(ON.type('Text').id('rename')); + await driver.assertComponentExist(ON.type('Text').id('share')); + await driver.assertComponentExist(ON.type('Text').id('more')); + let btnDelete = await driver.findComponent(ON.type('Text').id('delete')); + // 测试复制 + let testFile = await driver.findComponent(ON.text('testFile')); + let testDirectory = await driver.findComponent(ON.text('testDirectory')); + await testFile.click(); + await driver.delayMs(200); + await btnCopy.click(); + await testDirectory.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('move')); + let btnMove = await driver.findComponent(ON.id('move')); + await btnMove.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.text('testFile')); + // 返回 + await driver.pressBack(); + await driver.delayMs(500); + Logger.info(TAG, 'MobileFunction_003 end'); }); /** * 测试重命名 */ it('MobileFunction_004', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_004 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - // 测试重命名 - await driver.assertComponentExist(ON.id('select')); - let btnSelect = await driver.findComponent(ON.id('select')); - let testFile = await driver.findComponent(ON.text('testFile')); - await btnSelect.click(); - await testFile.click(); - let btnRenameNew = await driver.findComponent(ON.type('Text').id('rename')); - await btnRenameNew.click(); - await driver.delayMs(500); - let inputDirectoryNew = await driver.findComponent(ON.id('input')); - await inputDirectoryNew.inputText('testFileNew'); - let btnPromiseNew = await driver.findComponent(ON.id('promise')); - await btnPromiseNew.click(); - await driver.delayMs(500); - await driver.assertComponentExist(ON.text('testFileNew')); - Logger.info(TAG, BUNDLE + 'MobileFunction_004 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_004 begin'); + let driver = Driver.create(); + await driver.delayMs(200); + // 测试重命名 + await driver.assertComponentExist(ON.id('select')); + let btnSelect = await driver.findComponent(ON.id('select')); + let testFile = await driver.findComponent(ON.text('testFile')); + await btnSelect.click(); + await driver.delayMs(200); + await testFile.click(); + let btnRenameNew = await driver.findComponent(ON.type('Text').id('rename')); + await btnRenameNew.click(); + await driver.delayMs(500); + let inputDirectoryNew = await driver.findComponent(ON.id('input')); + await inputDirectoryNew.inputText('testFileNew'); + let btnPromiseNew = await driver.findComponent(ON.id('promise')); + await btnPromiseNew.click(); + await driver.delayMs(500); + await driver.assertComponentExist(ON.text('testFileNew')); + Logger.info(TAG, BUNDLE + 'MobileFunction_004 end'); }); /** * 测试更多--修改时间 */ it('MobileFunction_005', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_005 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - // 点击select图片 - await driver.assertComponentExist(ON.id('select')); - let selectImage = await driver.findComponent(ON.id('select')); - await selectImage.click(); - await driver.delayMs(200); - //测试更多--修改时间 - let testFile = await driver.findComponent(ON.text('testFileNew')); - await testFile.click(); - await driver.assertComponentExist(ON.type('Text').id('more')); - let newMore = await driver.findComponent(ON.type('Text').id('more')); - await newMore.click(); - await driver.delayMs(200); - await driver.click(542, 996); - await driver.assertComponentExist(ON.id('changeTimePromise')); - let inputTimeNew = await driver.findComponent(ON.id('changeTimeInput')); - await inputTimeNew.inputText('2023/10/10 10:10:10'); - await driver.delayMs(200); - await driver.assertComponentExist(ON.text('2023/10/10 10:10:10')); - let changeTime = await driver.findComponent(ON.type('Text').id('changeTimePromise')); - await changeTime.click(); - await driver.delayMs(200); - Logger.info(TAG, 'MobileFunction_005 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_005 begin'); + let driver = Driver.create(); + await driver.delayMs(200); + // 点击select图片 + await driver.assertComponentExist(ON.id('select')); + let selectImage = await driver.findComponent(ON.id('select')); + await selectImage.click(); + await driver.delayMs(200); + //测试更多--修改时间 + let testFile = await driver.findComponent(ON.text('testFileNew')); + await testFile.click(); + await driver.assertComponentExist(ON.type('Text').id('more')); + let newMore = await driver.findComponent(ON.type('Text').id('more')); + await newMore.click(); + await driver.delayMs(200); + await driver.click(542, 996); + await driver.assertComponentExist(ON.id('changeTimePromise')); + let inputTimeNew = await driver.findComponent(ON.id('changeTimeInput')); + await inputTimeNew.inputText('2023/10/10 10:10:10'); + await driver.delayMs(200); + await driver.assertComponentExist(ON.text('2023/10/10 10:10:10')); + let changeTime = await driver.findComponent(ON.type('Text').id('changeTimePromise')); + await changeTime.click(); + await driver.delayMs(200); + Logger.info(TAG, 'MobileFunction_005 end'); }); /** * 测试更多--删除 */ it('MobileFunction_006', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_006 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - //测试更多--删除 - await driver.assertComponentExist(ON.id('select')); - let selectImage = await driver.findComponent(ON.id('select')); - await selectImage.click(); - await driver.delayMs(200); - let testFile = await driver.findComponent(ON.text('testFileNew')); - await testFile.click(); - await driver.assertComponentExist(ON.type('Text').id('more')); - let newMore = await driver.findComponent(ON.type('Text').id('more')); - await newMore.click(); - await driver.delayMs(200); - await driver.click(461, 1064); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('checkDelete')); - let btnCheckDelete = await driver.findComponent(ON.id('checkDelete')); - await btnCheckDelete.click(); - await driver.delayMs(200); - // 返回首页 - await driver.pressBack(); - await driver.delayMs(200); - Logger.info(TAG, 'MobileFunction_006 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_006 begin'); + let driver = Driver.create(); + await driver.delayMs(200); + //测试更多--删除 + await driver.assertComponentExist(ON.id('select')); + let selectImage = await driver.findComponent(ON.id('select')); + await selectImage.click(); + await driver.delayMs(200); + let testFile = await driver.findComponent(ON.text('testFileNew')); + await testFile.click(); + await driver.assertComponentExist(ON.type('Text').id('more')); + let newMore = await driver.findComponent(ON.type('Text').id('more')); + await newMore.click(); + await driver.delayMs(200); + await driver.click(461, 1064); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('checkDelete')); + let btnCheckDelete = await driver.findComponent(ON.id('checkDelete')); + await btnCheckDelete.click(); + await driver.delayMs(200); + // 返回首页 + await driver.pressBack(); + await driver.delayMs(200); + Logger.info(TAG, 'MobileFunction_006 end'); }); /** * 切换到el3分区,新建文件,浏览 */ it('MobileFunction_el3_001', 0, async () => { - try{ + try { Logger.info(TAG, 'MobileFunction_el3_001 begin'); let driver = Driver.create(); - await driver.delayMs(200); + await driver.delayMs(1000); // 主页能够显示List中内容,点击手机 await driver.assertComponentExist(ON.type('List')); await driver.assertComponentExist(ON.type('ListItem').id('ListItem5')); let btnStart = await driver.findComponent(ON.type('ListItem').id('ListItem5')); await btnStart.click(); - await driver.delayMs(100); + await driver.delayMs(1000); // 我的手机主页,切换到el3 await driver.assertComponentExist(ON.type('Text').id('el3')); let btnEl3 = await driver.findComponent(ON.type('Text').id('el3')); await btnEl3.click(); - await driver.delayMs(100); + await driver.delayMs(1000); // 测试新建文件及打开功能 let btnFile = await driver.findComponent(ON.type('Text').id('makeFile')); await btnFile.click(); - await driver.delayMs(100); + await driver.delayMs(1000); await driver.assertComponentExist(ON.id('cancel')); let btnCancel = await driver.findComponent(ON.id('cancel')); await btnCancel.click(); - await driver.delayMs(100); + await driver.delayMs(1000); await btnFile.click(); - await driver.delayMs(100); + await driver.delayMs(1000); await driver.assertComponentExist(ON.id('input')); let input = await driver.findComponent(ON.id('input')); await input.inputText('el3TestFile'); await driver.assertComponentExist(ON.id('promise')); let btnPromise = await driver.findComponent(ON.id('promise')); await btnPromise.click(); - await driver.delayMs(100); + await driver.delayMs(1000); Logger.info(TAG, 'MobileFunction_el3_001 end'); - }catch(error){ + } catch (error) { expect().assertFail(); } }); @@ -1345,563 +1357,518 @@ export default function abilityTest() { * 测试el3新建文件夹功能 */ it('MobileFunction_el3_002', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_el3_002 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - // 测试新建文件夹功能 - await driver.findComponent(ON.type('Text').id('makeDirectory')); - let btnDirectory = await driver.findComponent(ON.type('Text').id('makeDirectory')); - await btnDirectory.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('cancel')); - let directoryCancel = await driver.findComponent(ON.id('cancel')); - await directoryCancel.click(); - await driver.delayMs(200); - - await btnDirectory.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('input')); - let inputDirectory = await driver.findComponent(ON.id('input')); - await inputDirectory.inputText('el3TestDirectory/testSubDirectory'); - await driver.assertComponentExist(ON.id('promise')); - let directoryPromise = await driver.findComponent(ON.id('promise')); - await directoryPromise.click(); - await driver.delayMs(200); - - await driver.assertComponentExist(ON.text('el3TestDirectory')); - let testDirectory = await driver.findComponent(ON.text('el3TestDirectory')); - await testDirectory.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.text('testSubDirectory')); - // 返回 - await driver.assertComponentExist(ON.id('left')); - let btnBack = await driver.findComponent(ON.id('left')); - await btnBack.click(); - //await driver.pressBack(); - await driver.delayMs(500); - Logger.info(TAG, 'MobileFunction_el3_002 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_el3_002 begin'); + let driver = Driver.create(); + await driver.delayMs(200); + // 测试新建文件夹功能 + await driver.findComponent(ON.type('Text').id('makeDirectory')); + let btnDirectory = await driver.findComponent(ON.type('Text').id('makeDirectory')); + await btnDirectory.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('cancel')); + let directoryCancel = await driver.findComponent(ON.id('cancel')); + await directoryCancel.click(); + await driver.delayMs(200); + + await btnDirectory.click(); + await driver.delayMs(2000); + await driver.assertComponentExist(ON.type('TextInput')); + await driver.delayMs(1000); + let inputDirectory = await driver.findComponent(ON.type('TextInput')); + await inputDirectory.inputText('el3TestDirectory/testSubDirectory'); + await driver.assertComponentExist(ON.id('promise')); + let directoryPromise = await driver.findComponent(ON.id('promise')); + await directoryPromise.click(); + await driver.delayMs(200); + + await driver.assertComponentExist(ON.text('el3TestDirectory')); + let testDirectory = await driver.findComponent(ON.text('el3TestDirectory')); + await testDirectory.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.text('testSubDirectory')); + // 返回 + await driver.assertComponentExist(ON.id('left')); + let btnBack = await driver.findComponent(ON.id('left')); + await btnBack.click(); + await driver.delayMs(500); + await driver.pressBack(); + await driver.delayMs(500); + Logger.info(TAG, 'MobileFunction_el3_002 end'); }); /** * 测试el3复制 */ it('MobileFunction_el3_003', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_el3_003 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - // 点击select图片 - await driver.assertComponentExist(ON.id('secondarySelect')); - let selectImage = await driver.findComponent(ON.id('secondarySelect')); - await selectImage.click(); - await driver.delayMs(500); - - await driver.assertComponentExist(ON.type('Text').id('copy')); - let btnCopy = await driver.findComponent(ON.type('Text').id('copy')); - await driver.assertComponentExist(ON.type('Text').id('rename')); - let btnRename = await driver.findComponent(ON.type('Text').id('rename')); - await driver.assertComponentExist(ON.type('Text').id('share')); - await driver.assertComponentExist(ON.type('Text').id('more')); - // 测试复制 - let testFile = await driver.findComponent(ON.text('el3TestFile')); - let testDirectory = await driver.findComponent(ON.text('el3TestDirectory')); - await testFile.click(); - await btnCopy.click(); - await testDirectory.click(); - await driver.delayMs(200); - - await driver.assertComponentExist(ON.id('move')); - let btnMove = await driver.findComponent(ON.id('move')); - await btnMove.click(); - await driver.delayMs(200); - - await driver.assertComponentExist(ON.text('el3TestFile')); - // 返回 - await driver.pressBack(); - await driver.delayMs(500); - Logger.info(TAG, 'MobileFunction_el3_003 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_el3_003 begin'); + let driver = Driver.create(); + let el3Dir = await driver.findComponent(ON.text('data/app/el3')); + await el3Dir.click(); + await driver.delayMs(1000); + // 点击select图片 + await driver.assertComponentExist(ON.id('secondarySelect')); + await driver.delayMs(1000); + let selectImage = await driver.findComponent(ON.id('secondarySelect')); + await driver.delayMs(1000); + await selectImage.click(); + await driver.delayMs(1000); + + await driver.assertComponentExist(ON.type('Text').id('copy')); + let btnCopy = await driver.findComponent(ON.type('Text').id('copy')); + await driver.assertComponentExist(ON.type('Text').id('rename')); + let btnRename = await driver.findComponent(ON.type('Text').id('rename')); + await driver.assertComponentExist(ON.type('Text').id('share')); + await driver.assertComponentExist(ON.type('Text').id('more')); + // 测试复制 + let testFile = await driver.findComponent(ON.text('el3TestFile')); + let testDirectory = await driver.findComponent(ON.text('el3TestDirectory')); + await testFile.click(); + await driver.delayMs(1000); + await btnCopy.click(); + await driver.delayMs(1000); + await testDirectory.click(); + await driver.delayMs(1000); + + await driver.assertComponentExist(ON.id('move')); + let btnMove = await driver.findComponent(ON.id('move')); + await btnMove.click(); + await driver.delayMs(1000); + + await driver.assertComponentExist(ON.text('el3TestFile')); + // 返回 + await driver.pressBack(); + await driver.delayMs(1000); + Logger.info(TAG, 'MobileFunction_el3_003 end'); }); /** * 测试el3重命名 */ it('MobileFunction_el3_004', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_el3_004 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - // 测试重命名 - await driver.assertComponentExist(ON.id('secondarySelect')); - let btnSelect = await driver.findComponent(ON.id('secondarySelect')); - - await driver.assertComponentExist(ON.text('el3TestFile')); - let testFile = await driver.findComponent(ON.text('el3TestFile')); - await btnSelect.click(); - await testFile.click(); - - let btnRenameNew = await driver.findComponent(ON.type('Text').id('rename')); - await btnRenameNew.click(); - await driver.delayMs(500); - let inputDirectoryNew = await driver.findComponent(ON.id('input')); - await inputDirectoryNew.inputText('el3TestFileNew'); - let btnPromiseNew = await driver.findComponent(ON.id('promise')); - await btnPromiseNew.click(); - await driver.delayMs(500); - Logger.info(TAG, 'MobileFunction_el3_004 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_el3_004 begin'); + let driver = Driver.create(); + await driver.delayMs(1000); + // 测试重命名 + await driver.assertComponentExist(ON.id('secondarySelect')); + let btnSelect = await driver.findComponent(ON.id('secondarySelect')); + + await driver.assertComponentExist(ON.text('el3TestFile')); + let testFile = await driver.findComponent(ON.text('el3TestFile')); + await btnSelect.click(); + await driver.delayMs(1000); + await testFile.click(); + await driver.delayMs(1000); + let btnRenameNew = await driver.findComponent(ON.type('Text').id('rename')); + await btnRenameNew.click(); + await driver.delayMs(1000); + let inputDirectoryNew = await driver.findComponent(ON.id('input')); + await inputDirectoryNew.inputText('el3TestFileNew'); + let btnPromiseNew = await driver.findComponent(ON.id('promise')); + await btnPromiseNew.click(); + await driver.delayMs(1000); + Logger.info(TAG, 'MobileFunction_el3_004 end'); }); /** * 测试el3更多--修改时间 */ it('MobileFunction_el3_005', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_el3_005 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - // 点击select图片 - await driver.assertComponentExist(ON.id('secondarySelect')); - let selectImage = await driver.findComponent(ON.id('secondarySelect')); - await selectImage.click(); - await driver.delayMs(200); - //测试更多--修改时间 - let testFile = await driver.findComponent(ON.text('el3TestFileNew')); - await testFile.click(); - await driver.assertComponentExist(ON.type('Text').id('more')); - let newMore = await driver.findComponent(ON.type('Text').id('more')); - await newMore.click(); - await driver.delayMs(200); - await driver.click(542, 996); - - await driver.assertComponentExist(ON.id('changeTimePromise')); - let inputTimeNew = await driver.findComponent(ON.id('changeTimeInput')); - await inputTimeNew.inputText('2023/12/12 10:10:10'); - await driver.delayMs(200); - - await driver.assertComponentExist(ON.text('2023/12/12 10:10:10')); - let changeTime = await driver.findComponent(ON.type('Text').id('changeTimePromise')); - await changeTime.click(); - await driver.delayMs(200); - Logger.info(TAG, 'MobileFunction_el3_005 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_el3_005 begin'); + let driver = Driver.create(); + await driver.delayMs(1000); + // 点击select图片 + await driver.assertComponentExist(ON.id('secondarySelect')); + let selectImage = await driver.findComponent(ON.id('secondarySelect')); + await selectImage.click(); + await driver.delayMs(1000); + //测试更多--修改时间 + let testFile = await driver.findComponent(ON.text('el3TestFileNew')); + await testFile.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.type('Text').id('more')); + let newMore = await driver.findComponent(ON.type('Text').id('more')); + await newMore.click(); + await driver.delayMs(1000); + await driver.click(542, 996); + await driver.assertComponentExist(ON.id('changeTimePromise')); + let inputTimeNew = await driver.findComponent(ON.id('changeTimeInput')); + await inputTimeNew.inputText('2023/12/12 10:10:10'); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('2023/12/12 10:10:10')); + let changeTime = await driver.findComponent(ON.type('Text').id('changeTimePromise')); + await changeTime.click(); + await driver.delayMs(1000); + Logger.info(TAG, 'MobileFunction_el3_005 end'); }); /** * 测试el3更多--删除 */ it('MobileFunction_el3_006', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_el3_006 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - //测试更多--删除 - await driver.assertComponentExist(ON.id('secondarySelect')); - let selectImage = await driver.findComponent(ON.id('secondarySelect')); - await selectImage.click(); - await driver.delayMs(200); - let testFile = await driver.findComponent(ON.text('el3TestFileNew')); - await testFile.click(); - await driver.assertComponentExist(ON.type('Text').id('more')); - let newMore = await driver.findComponent(ON.type('Text').id('more')); - await newMore.click(); - await driver.delayMs(200); - await driver.click(461, 1064); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('checkDelete')); - let btnCheckDelete = await driver.findComponent(ON.id('checkDelete')); - await btnCheckDelete.click(); - await driver.delayMs(200); - Logger.info(TAG, 'MobileFunction_el3_006 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_el3_006 begin'); + let driver = Driver.create(); + await driver.delayMs(200); + //测试更多--删除 + await driver.assertComponentExist(ON.id('secondarySelect')); + let selectImage = await driver.findComponent(ON.id('secondarySelect')); + await selectImage.click(); + await driver.delayMs(200); + let testFile = await driver.findComponent(ON.text('el3TestFileNew')); + await testFile.click(); + await driver.assertComponentExist(ON.type('Text').id('more')); + let newMore = await driver.findComponent(ON.type('Text').id('more')); + await newMore.click(); + await driver.delayMs(200); + await driver.click(461, 1064); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('checkDelete')); + let btnCheckDelete = await driver.findComponent(ON.id('checkDelete')); + await btnCheckDelete.click(); + await driver.delayMs(200); + Logger.info(TAG, 'MobileFunction_el3_006 end'); }); /** * 测试el3文件编辑 */ it('MobileFunction_el3_007', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_el3_007 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - // 测试新建文件、文件编辑、保存功能 - let btnFile = await driver.findComponent(ON.type('Text').id('makeFile')); - await btnFile.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('input')); - let input = await driver.findComponent(ON.id('input')); - await input.inputText('testEl3FileEdit'); - await driver.assertComponentExist(ON.id('promise')); - let btnPromise = await driver.findComponent(ON.id('promise')); - await btnPromise.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.text('testEl3FileEdit')); - //进入文件浏览编辑页面 - let testFile = await driver.findComponent(ON.text('testEl3FileEdit')); - await testFile.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('openFileName')); - //进入编辑模式 - await driver.assertComponentExist(ON.id('switch2Edit')); - let btnEdit = await driver.findComponent(ON.id('switch2Edit')); - await btnEdit.click(); - await driver.delayMs(200); - //输入字符到文件编辑区 - await driver.assertComponentExist(ON.id('editFileContent')); - let inputTextContent = await driver.findComponent(ON.id('editFileContent')); - await inputTextContent.inputText('el3 file edit'); - await driver.delayMs(500); - - //保存内容并退出编辑模式 - await driver.assertComponentExist(ON.id('saveFileContent')); - let btnSave = await driver.findComponent(ON.id('saveFileContent')); - await btnSave.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('switch2View')); - let btnView = await driver.findComponent(ON.id('switch2View')); - await btnView.click(); - await driver.delayMs(200); - - //回到上一页 - let back = await driver.findComponent(ON.id('openFileBack')); - await back.click(); - await driver.delayMs(200); - - //再次进入文件页面,检查文件内容 - await driver.assertComponentExist(ON.text('testEl3FileEdit')); - let fileEnter = await driver.findComponent(ON.text('testEl3FileEdit')); - await fileEnter.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.text('el3 file edit')); - - let btnBack = await driver.findComponent(ON.id('openFileBack')); - await btnBack.click(); - await driver.delayMs(200); - - // 返回我的手机主页 - let btnBackMyPhone = await driver.findComponent(ON.id('left')); - await btnBackMyPhone.click(); - await driver.delayMs(200); - Logger.info(TAG, BUNDLE + 'MobileFunction_el3_007 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_el3_007 begin'); + let driver = Driver.create(); + await driver.delayMs(200); + // 测试新建文件、文件编辑、保存功能 + let btnFile = await driver.findComponent(ON.type('Text').id('makeFile')); + await btnFile.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('input')); + let input = await driver.findComponent(ON.id('input')); + await input.inputText('testEl3FileEdit'); + await driver.assertComponentExist(ON.id('promise')); + let btnPromise = await driver.findComponent(ON.id('promise')); + await btnPromise.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.text('testEl3FileEdit')); + //进入文件浏览编辑页面 + let testFile = await driver.findComponent(ON.text('testEl3FileEdit')); + await testFile.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('openFileName')); + //进入编辑模式 + await driver.assertComponentExist(ON.id('switch2Edit')); + let btnEdit = await driver.findComponent(ON.id('switch2Edit')); + await btnEdit.click(); + await driver.delayMs(200); + //输入字符到文件编辑区 + await driver.assertComponentExist(ON.id('editFileContent')); + let inputTextContent = await driver.findComponent(ON.id('editFileContent')); + await inputTextContent.inputText('el3 file edit'); + await driver.delayMs(500); + + //保存内容并退出编辑模式 + await driver.assertComponentExist(ON.id('saveFileContent')); + let btnSave = await driver.findComponent(ON.id('saveFileContent')); + await btnSave.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('switch2View')); + let btnView = await driver.findComponent(ON.id('switch2View')); + await btnView.click(); + await driver.delayMs(200); + + //回到上一页 + let back = await driver.findComponent(ON.id('openFileBack')); + await back.click(); + await driver.delayMs(200); + + //再次进入文件页面,检查文件内容 + await driver.assertComponentExist(ON.text('testEl3FileEdit')); + let fileEnter = await driver.findComponent(ON.text('testEl3FileEdit')); + await fileEnter.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.text('el3 file edit')); + + let btnBack = await driver.findComponent(ON.id('openFileBack')); + await btnBack.click(); + await driver.delayMs(200); + + // 返回我的手机主页 + let btnBackMyPhone = await driver.findComponent(ON.id('left')); + await btnBackMyPhone.click(); + await driver.delayMs(200); + Logger.info(TAG, BUNDLE + 'MobileFunction_el3_007 end'); }); /** * 切换到el4分区,新建文件 */ it('MobileFunction_el4_001', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_el4_001 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - // 我的手机主页,切换到el4 - await driver.assertComponentExist(ON.type('Text').id('el4')); - let btnEl3 = await driver.findComponent(ON.type('Text').id('el4')); - await btnEl3.click(); - await driver.delayMs(100); - // 测试新建文件及打开功能 - let btnFile = await driver.findComponent(ON.type('Text').id('makeFile')); - await btnFile.click(); - await driver.delayMs(100); - await driver.assertComponentExist(ON.id('cancel')); - let btnCancel = await driver.findComponent(ON.id('cancel')); - await btnCancel.click(); - await driver.delayMs(100); + Logger.info(TAG, 'MobileFunction_el4_001 begin'); + let driver = Driver.create(); + await driver.delayMs(200); + // 我的手机主页,切换到el4 + await driver.assertComponentExist(ON.type('Text').id('el4')); + let btnEl3 = await driver.findComponent(ON.type('Text').id('el4')); + await btnEl3.click(); + await driver.delayMs(1000); + // 测试新建文件及打开功能 + let btnFile = await driver.findComponent(ON.type('Text').id('makeFile')); + await btnFile.click(); + await driver.delayMs(1000); - await btnFile.click(); - await driver.delayMs(100); - await driver.assertComponentExist(ON.id('input')); - let input = await driver.findComponent(ON.id('input')); - await input.inputText('el4TestFile'); - await driver.assertComponentExist(ON.id('promise')); - let btnPromise = await driver.findComponent(ON.id('promise')); - await btnPromise.click(); - await driver.delayMs(100); - - await driver.assertComponentExist(ON.text('el4TestFile')); - let testFile = await driver.findComponent(ON.text('el4TestFile')); - await testFile.click(); - await driver.delayMs(200); - - await driver.assertComponentExist(ON.id('openFileBack')); - let back = await driver.findComponent(ON.id('openFileBack')); - await back.click(); - await driver.delayMs(200); - Logger.info(TAG, 'MobileFunction_el4_001 end'); - }catch(error){ - expect().assertFail(); - } + await btnFile.click(); + await driver.delayMs(1000); + let createNewFile = await driver.findComponent(ON.type('Text').id('makeFile')); + await createNewFile.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.id('input')); + let input = await driver.findComponent(ON.id('input')); + await input.inputText('el4TestFile'); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.id('promise')); + let btnPromise = await driver.findComponent(ON.id('promise')); + await btnPromise.click(); + await driver.delayMs(1000); + + await driver.assertComponentExist(ON.text('el4TestFile')); + let testFile = await driver.findComponent(ON.text('el4TestFile')); + await testFile.click(); + await driver.delayMs(1000); + + await driver.assertComponentExist(ON.id('openFileBack')); + let back = await driver.findComponent(ON.id('openFileBack')); + await back.click(); + await driver.delayMs(200); + Logger.info(TAG, 'MobileFunction_el4_001 end'); }); /** * 测试el4新建文件夹功能 */ it('MobileFunction_el4_002', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_el4_002 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - // 测试新建文件夹功能 - await driver.findComponent(ON.type('Text').id('makeDirectory')); - let btnDirectory = await driver.findComponent(ON.type('Text').id('makeDirectory')); - await btnDirectory.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('cancel')); - let directoryCancel = await driver.findComponent(ON.id('cancel')); - await directoryCancel.click(); - await driver.delayMs(200); - - await btnDirectory.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('input')); - let inputDirectory = await driver.findComponent(ON.id('input')); - await inputDirectory.inputText('el4TestDirectory/testSubDirectory'); - await driver.assertComponentExist(ON.id('promise')); - let directoryPromise = await driver.findComponent(ON.id('promise')); - await directoryPromise.click(); - await driver.delayMs(200); - - await driver.assertComponentExist(ON.text('el4TestDirectory')); - let testDirectory = await driver.findComponent(ON.text('el4TestDirectory')); - await testDirectory.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.text('testSubDirectory')); - // 返回 - await driver.assertComponentExist(ON.id('left')); - let btnBack = await driver.findComponent(ON.id('left')); - await btnBack.click(); - //await driver.pressBack(); - await driver.delayMs(500); - Logger.info(TAG, 'MobileFunction_el4_002 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_el4_002 begin'); + let driver = Driver.create(); + await driver.delayMs(200); + // 测试新建文件夹功能 + await driver.findComponent(ON.type('Text').id('makeDirectory')); + let btnDirectory = await driver.findComponent(ON.type('Text').id('makeDirectory')); + await btnDirectory.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('cancel')); + let directoryCancel = await driver.findComponent(ON.id('cancel')); + await directoryCancel.click(); + await driver.delayMs(200); + + await btnDirectory.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('input')); + let inputDirectory = await driver.findComponent(ON.id('input')); + await inputDirectory.inputText('el4TestDirectory/testSubDirectory'); + await driver.assertComponentExist(ON.id('promise')); + let directoryPromise = await driver.findComponent(ON.id('promise')); + await directoryPromise.click(); + await driver.delayMs(200); + + await driver.assertComponentExist(ON.text('el4TestDirectory')); + let testDirectory = await driver.findComponent(ON.text('el4TestDirectory')); + await testDirectory.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.text('testSubDirectory')); + // 返回 + await driver.assertComponentExist(ON.id('left')); + let btnBack = await driver.findComponent(ON.id('left')); + await btnBack.click(); + await driver.delayMs(500); + Logger.info(TAG, 'MobileFunction_el4_002 end'); }); /** * 测试el4复制 */ it('MobileFunction_el4_003', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_el4_003 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - // 点击select图片 - await driver.assertComponentExist(ON.id('secondarySelect')); - let selectImage = await driver.findComponent(ON.id('secondarySelect')); - await selectImage.click(); - await driver.delayMs(500); - - await driver.assertComponentExist(ON.type('Text').id('copy')); - let btnCopy = await driver.findComponent(ON.type('Text').id('copy')); - await driver.assertComponentExist(ON.type('Text').id('rename')); - let btnRename = await driver.findComponent(ON.type('Text').id('rename')); - await driver.assertComponentExist(ON.type('Text').id('share')); - await driver.assertComponentExist(ON.type('Text').id('more')); - // 测试复制 - let testFile = await driver.findComponent(ON.text('el4TestFile')); - let testDirectory = await driver.findComponent(ON.text('el4TestDirectory')); - await testFile.click(); - await btnCopy.click(); - await testDirectory.click(); - await driver.delayMs(200); - - await driver.assertComponentExist(ON.id('move')); - let btnMove = await driver.findComponent(ON.id('move')); - await btnMove.click(); - await driver.delayMs(200); - - await driver.assertComponentExist(ON.text('el4TestFile')); - // 返回 - await driver.pressBack(); - await driver.delayMs(500); - Logger.info(TAG, 'MobileFunction_el4_003 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_el4_003 begin'); + let driver = Driver.create(); + await driver.delayMs(200); + // 点击select图片 + await driver.assertComponentExist(ON.id('secondarySelect')); + let selectImage = await driver.findComponent(ON.id('secondarySelect')); + await selectImage.click(); + await driver.delayMs(500); + + await driver.assertComponentExist(ON.type('Text').id('copy')); + let btnCopy = await driver.findComponent(ON.type('Text').id('copy')); + await driver.assertComponentExist(ON.type('Text').id('rename')); + let btnRename = await driver.findComponent(ON.type('Text').id('rename')); + await driver.assertComponentExist(ON.type('Text').id('share')); + await driver.assertComponentExist(ON.type('Text').id('more')); + // 测试复制 + let testFile = await driver.findComponent(ON.text('el4TestFile')); + let testDirectory = await driver.findComponent(ON.text('el4TestDirectory')); + await testFile.click(); + await btnCopy.click(); + await testDirectory.click(); + await driver.delayMs(200); + + await driver.assertComponentExist(ON.id('move')); + let btnMove = await driver.findComponent(ON.id('move')); + await btnMove.click(); + await driver.delayMs(200); + + await driver.assertComponentExist(ON.text('el4TestFile')); + // 返回 + await driver.pressBack(); + await driver.delayMs(500); + Logger.info(TAG, 'MobileFunction_el4_003 end'); }); /** * 测试el4重命名 */ it('MobileFunction_el4_004', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_el4_004 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - // 测试重命名 - await driver.assertComponentExist(ON.id('secondarySelect')); - let btnSelect = await driver.findComponent(ON.id('secondarySelect')); - - await driver.assertComponentExist(ON.text('el4TestFile')); - let testFile = await driver.findComponent(ON.text('el4TestFile')); - await btnSelect.click(); - await testFile.click(); - - let btnRenameNew = await driver.findComponent(ON.type('Text').id('rename')); - await btnRenameNew.click(); - await driver.delayMs(200); - let inputDirectoryNew = await driver.findComponent(ON.id('input')); - await inputDirectoryNew.inputText('el4TestFileNew'); - let btnPromiseNew = await driver.findComponent(ON.id('promise')); - await btnPromiseNew.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.text('el4TestFileNew')); - Logger.info(TAG, 'MobileFunction_el4_004 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_el4_004 begin'); + let driver = Driver.create(); + await driver.delayMs(200); + // 测试重命名 + await driver.assertComponentExist(ON.id('secondarySelect')); + let btnSelect = await driver.findComponent(ON.id('secondarySelect')); + + await driver.assertComponentExist(ON.text('el4TestFile')); + let testFile = await driver.findComponent(ON.text('el4TestFile')); + await btnSelect.click(); + await testFile.click(); + + let btnRenameNew = await driver.findComponent(ON.type('Text').id('rename')); + await btnRenameNew.click(); + await driver.delayMs(200); + let inputDirectoryNew = await driver.findComponent(ON.id('input')); + await inputDirectoryNew.inputText('el4TestFileNew'); + let btnPromiseNew = await driver.findComponent(ON.id('promise')); + await btnPromiseNew.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.text('el4TestFileNew')); + Logger.info(TAG, 'MobileFunction_el4_004 end'); }); /** * 测试el4更多--修改时间 */ it('MobileFunction_el4_005', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_el4_005 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - // 点击select图片 - await driver.assertComponentExist(ON.id('secondarySelect')); - let selectImage = await driver.findComponent(ON.id('secondarySelect')); - await selectImage.click(); - await driver.delayMs(200); - //测试更多--修改时间 - let testFile = await driver.findComponent(ON.text('el4TestFileNew')); - await testFile.click(); - await driver.assertComponentExist(ON.type('Text').id('more')); - let newMore = await driver.findComponent(ON.type('Text').id('more')); - await newMore.click(); - await driver.delayMs(200); - await driver.click(542, 996); - await driver.assertComponentExist(ON.id('changeTimePromise')); - let inputTimeNew = await driver.findComponent(ON.id('changeTimeInput')); - await inputTimeNew.inputText('2023/12/12 10:10:10'); - await driver.delayMs(200); - await driver.assertComponentExist(ON.text('2023/12/12 10:10:10')); - let changeTime = await driver.findComponent(ON.type('Text').id('changeTimePromise')); - await changeTime.click(); - await driver.delayMs(200); - Logger.info(TAG, 'MobileFunction_el4_005 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_el4_005 begin'); + let driver = Driver.create(); + await driver.delayMs(200); + // 点击select图片 + await driver.assertComponentExist(ON.id('secondarySelect')); + let selectImage = await driver.findComponent(ON.id('secondarySelect')); + await selectImage.click(); + await driver.delayMs(200); + //测试更多--修改时间 + let testFile = await driver.findComponent(ON.text('el4TestFileNew')); + await testFile.click(); + await driver.assertComponentExist(ON.type('Text').id('more')); + let newMore = await driver.findComponent(ON.type('Text').id('more')); + await newMore.click(); + await driver.delayMs(200); + await driver.click(542, 996); + await driver.assertComponentExist(ON.id('changeTimePromise')); + let inputTimeNew = await driver.findComponent(ON.id('changeTimeInput')); + await inputTimeNew.inputText('2023/12/12 10:10:10'); + await driver.delayMs(200); + await driver.assertComponentExist(ON.text('2023/12/12 10:10:10')); + let changeTime = await driver.findComponent(ON.type('Text').id('changeTimePromise')); + await changeTime.click(); + await driver.delayMs(200); + Logger.info(TAG, 'MobileFunction_el4_005 end'); }); /** * 测试el4更多--删除 */ it('MobileFunction_el4_006', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_el4_006 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - //测试更多--删除 - await driver.assertComponentExist(ON.id('secondarySelect')); - let selectImage = await driver.findComponent(ON.id('secondarySelect')); - await selectImage.click(); - await driver.delayMs(200); - let testFile = await driver.findComponent(ON.text('el4TestFileNew')); - await testFile.click(); - await driver.assertComponentExist(ON.type('Text').id('more')); - let newMore = await driver.findComponent(ON.type('Text').id('more')); - await newMore.click(); - await driver.delayMs(200); - await driver.click(461, 1064); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('checkDelete')); - let btnCheckDelete = await driver.findComponent(ON.id('checkDelete')); - await btnCheckDelete.click(); - await driver.delayMs(200); - Logger.info(TAG, 'MobileFunction_el3_006 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_el4_006 begin'); + let driver = Driver.create(); + await driver.delayMs(200); + //测试更多--删除 + await driver.assertComponentExist(ON.id('secondarySelect')); + let selectImage = await driver.findComponent(ON.id('secondarySelect')); + await selectImage.click(); + await driver.delayMs(200); + let testFile = await driver.findComponent(ON.text('el4TestFileNew')); + await testFile.click(); + await driver.assertComponentExist(ON.type('Text').id('more')); + let newMore = await driver.findComponent(ON.type('Text').id('more')); + await newMore.click(); + await driver.delayMs(200); + await driver.click(461, 1064); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('checkDelete')); + let btnCheckDelete = await driver.findComponent(ON.id('checkDelete')); + await btnCheckDelete.click(); + await driver.delayMs(200); + Logger.info(TAG, 'MobileFunction_el4_006 end'); }); /** * 测试el4编辑文件 */ it('MobileFunction_el4_007', 0, async () => { - try{ - Logger.info(TAG, 'MobileFunction_el4_007 begin'); - let driver = Driver.create(); - await driver.delayMs(200); - // 测试新建文件、文件编辑、保存功能 - let btnFile = await driver.findComponent(ON.type('Text').id('makeFile')); - await btnFile.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('input')); - let input = await driver.findComponent(ON.id('input')); - await input.inputText('testEl4FileEdit'); - await driver.assertComponentExist(ON.id('promise')); - let btnPromise = await driver.findComponent(ON.id('promise')); - await btnPromise.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.text('testEl4FileEdit')); - //进入文件浏览编辑页面 - let testFile = await driver.findComponent(ON.text('testEl4FileEdit')); - await testFile.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('openFileName')); - //进入编辑模式 - await driver.assertComponentExist(ON.id('switch2Edit')); - let btnEdit = await driver.findComponent(ON.id('switch2Edit')); - await btnEdit.click(); - await driver.delayMs(200); - //输入字符到文件编辑区 - await driver.assertComponentExist(ON.id('editFileContent')); - let inputTextContent = await driver.findComponent(ON.id('editFileContent')); - await inputTextContent.inputText('el4 file edit'); - await driver.delayMs(500); - - //保存内容并退出编辑模式 - await driver.assertComponentExist(ON.id('saveFileContent')); - let btnSave = await driver.findComponent(ON.id('saveFileContent')); - await btnSave.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.id('switch2View')); - let btnView = await driver.findComponent(ON.id('switch2View')); - await btnView.click(); - await driver.delayMs(200); - - //回到上一页 - let back = await driver.findComponent(ON.id('openFileBack')); - await back.click(); - await driver.delayMs(200); - - //再次进入文件页面,检查文件内容 - await driver.assertComponentExist(ON.text('testEl4FileEdit')); - let fileEnter = await driver.findComponent(ON.text('testEl4FileEdit')); - await fileEnter.click(); - await driver.delayMs(200); - await driver.assertComponentExist(ON.text('el4 file edit')); - - let btnBack = await driver.findComponent(ON.id('openFileBack')); - await btnBack.click(); - await driver.delayMs(200); - - // 返回我的手机主页 - let btnBackMyPhone = await driver.findComponent(ON.id('left')); - await btnBackMyPhone.click(); - await driver.delayMs(200); - - Logger.info(TAG, BUNDLE + 'MobileFunction_el4_007 end'); - }catch(error){ - expect().assertFail(); - } + Logger.info(TAG, 'MobileFunction_el4_007 begin'); + let driver = Driver.create(); + await driver.delayMs(200); + // 测试新建文件、文件编辑、保存功能 + let btnFile = await driver.findComponent(ON.type('Text').id('makeFile')); + await btnFile.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('input')); + let input = await driver.findComponent(ON.id('input')); + await input.inputText('testEl4FileEdit'); + await driver.assertComponentExist(ON.id('promise')); + let btnPromise = await driver.findComponent(ON.id('promise')); + await btnPromise.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.text('testEl4FileEdit')); + //进入文件浏览编辑页面 + let testFile = await driver.findComponent(ON.text('testEl4FileEdit')); + await testFile.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('openFileName')); + //进入编辑模式 + await driver.assertComponentExist(ON.id('switch2Edit')); + let btnEdit = await driver.findComponent(ON.id('switch2Edit')); + await btnEdit.click(); + await driver.delayMs(200); + //输入字符到文件编辑区 + await driver.assertComponentExist(ON.id('editFileContent')); + let inputTextContent = await driver.findComponent(ON.id('editFileContent')); + await inputTextContent.inputText('el4 file edit'); + await driver.delayMs(500); + + //保存内容并退出编辑模式 + await driver.assertComponentExist(ON.id('saveFileContent')); + let btnSave = await driver.findComponent(ON.id('saveFileContent')); + await btnSave.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.id('switch2View')); + let btnView = await driver.findComponent(ON.id('switch2View')); + await btnView.click(); + await driver.delayMs(200); + + //回到上一页 + let back = await driver.findComponent(ON.id('openFileBack')); + await back.click(); + await driver.delayMs(200); + + //再次进入文件页面,检查文件内容 + await driver.assertComponentExist(ON.text('testEl4FileEdit')); + let fileEnter = await driver.findComponent(ON.text('testEl4FileEdit')); + await fileEnter.click(); + await driver.delayMs(200); + await driver.assertComponentExist(ON.text('el4 file edit')); + + let btnBack = await driver.findComponent(ON.id('openFileBack')); + await btnBack.click(); + await driver.delayMs(200); + + // 返回我的手机主页 + let btnBackMyPhone = await driver.findComponent(ON.id('left')); + await btnBackMyPhone.click(); + await driver.delayMs(200); + + Logger.info(TAG, BUNDLE + 'MobileFunction_el4_007 end'); }); /** 场景:检验FileManager获取权限功能 @@ -1909,7 +1876,7 @@ export default function abilityTest() { * 预期输出:点击允许后能够成功调用createFileAsset,getFileAssets * 检验接口:FileManager.requestPermission */ - it(BUNDLE + 'RequestPermissionFunction_002', 0, async () => { + it('RequestPermissionFunction_002', 0, async () => { Logger.info(TAG, BUNDLE + 'Function_requestPermission_002 begin') let driver = await Driver.create() // 获取文件读写权限 @@ -1917,18 +1884,18 @@ export default function abilityTest() { Logger.info(TAG, BUNDLE + 'RequestPermissionFunction_002 requestPermission') let name = 'image' + Date.now().toString() + '.jpg' try { - let curFile = await FileManager.createFileAsset(ability.context, mediaLibrary.MediaType.IMAGE, mediaLibrary.DirectoryType.DIR_IMAGE, name) + let curFile = await FileManager.createFileAsset(ability.context, userFileManager.FileType.IMAGE, name); if (curFile === undefined) { Logger.error(TAG, 'RequestPermissionFunction_002:createFileAsset failed') expect().assertFail() } - file.push(curFile); + file.push(curFile.uri); } catch (error) { Logger.error(TAG, 'RequestPermissionFunction_002:createFileAsset failed') expect().assertFail() } try { - let curResult = await FileManager.getFileAssets(ability.context, mediaLibrary.MediaType.IMAGE) + let curResult = await FileManager.getFileAssets(ability.context, userFileManager.FileType.IMAGE); if (curResult === undefined) { Logger.error(TAG, 'RequestPermissionFunction_002:etFileAssets failed') expect().assertFail() @@ -1940,65 +1907,15 @@ export default function abilityTest() { Logger.info(TAG, BUNDLE + 'Function_requestPermission_002 end') }) - /** - * 场景:检验FileManager获取文件列表信息,创建文件能力 - * 输入:分四种文件类型,依次插入5个文件 - * 预期输出:检测所得结果数量正确,新增文件与创建文件一致 - * 检验接口:FileManager.getFileAssets,FileManager.createFileAsset - */ - it(BUNDLE + 'GetFileAssetsFunction_001', 0, async () => { - Logger.info(TAG, BUNDLE + 'GetFileAssetsFunction_001 begin') - let files = await FileManager.getFileAssets(ability.context, mediaLibrary.MediaType.IMAGE) - // 删除原有文件 - for (let i = 0; i < files.getCount(); i++) { - let fileAsset: mediaLibrary.FileAsset = await files.getNextObject() - if (fileAsset == null) { - Logger.error(TAG, 'fileAsset undefined') - continue - } - Logger.info(TAG, 'getFileAssetsByType success, fileAsset.displayName ' + i + ': ' + fileAsset.displayName + - ' data:' + fileAsset.dateAdded + ', ' + fileAsset.dateModified) - await FileManager.deleteFileAsset(fileAsset) - } - for (let i = 0; i < TYPE.length; i++) { - let originalResult = await FileManager.getFileAssets(ability.context, TYPE[i][0]) - let originalNum: number = await originalResult.getCount() - let addNum: number = 0 - // 依次插入5个文件 - for (let j = 0; j < TEST_NUM; j++) { - let name = 'newFile' + Date.now().toString() + TYPE[i][1] - let curFile: mediaLibrary.FileAsset | undefined = undefined - try { - curFile = await FileManager.createFileAsset(ability.context, TYPE[i][0], TYPE[i][2], name) - } catch (error) { - Logger.error(TAG, 'GetFileAssetsFunction_001:createFileAsset failed') - } - file.push(curFile as mediaLibrary.FileAsset); - await addNum++ - let result = await FileManager.getFileAssets(ability.context, TYPE[i][0]) - let num = await result.getCount() - Logger.info(TAG, 'GetFileAssetsFunction_001:expect num is ' + (originalNum + addNum) + 'and result is ' + num) - expect(num).assertEqual(originalNum + addNum) - let lastObject = await result.getLastObject() - let isEqual = await fileAssertEqual(lastObject, curFile as mediaLibrary.FileAsset) - expect(isEqual).assertTrue() - } - } - Logger.info(TAG, BUNDLE + 'GetFileAssetsFunction_001 end') - }) - /** * 场景:验证文件是否支持预览函数功能 * 输入:分别输入未定义对象,mock对象,正常对象 * 预期输出:检测所得结果数量正确,新增文件与创建文件一致 * 检验接口:FileManager.isSupportPreview */ - it(BUNDLE + 'IsSupportPreviewFunction_001', 0, async () => { + it('IsSupportPreviewFunction_001', 0, async () => { Logger.info(TAG, BUNDLE + 'IsSupportPreviewFunction_001 begin') let name: string = '' - expect(FileManager.isSupportPreview(name)).assertFalse() - name = MOCK + Date.now() + '.txt' - expect(FileManager.isSupportPreview(name)).assertFalse() name = 'image.jpg' expect(FileManager.isSupportPreview(name)).assertTrue() Logger.info(TAG, BUNDLE + 'IsSupportPreviewFunction_001 end') @@ -2010,37 +1927,16 @@ export default function abilityTest() { * 预期输出:getFileAssetsByName获取文件与创建相同 * 检验接口:FileManager.getFileAssetsByName */ - it(BUNDLE + 'GetFileAssetsByNameFunction_001', 0, async () => { + it('GetFileAssetsByNameFunction_001', 0, async () => { Logger.info(TAG, BUNDLE + 'GetFileAssetsByNameFunction_001 begin') for (let i = 0; i < TYPE.length; i++) { let name = 'newFile' + Date.now().toString() + TYPE[i][1] - let createFile = await FileManager.createFileAsset(ability.context, TYPE[i][0], TYPE[i][2], name) - file.push(createFile); + let createFile = await FileManager.createFileAsset(ability.context, TYPE[i][0], name); + file.push(createFile.uri); let getFile = await FileManager.getFileAssetsByName(ability.context, name) fileAssertEqual(createFile, getFile) } Logger.info(TAG, BUNDLE + 'GetFileAssetsByNameFunction_001 end') }) - - /** - * 场景:验证创建模拟文件功能 - * 输入:调用5次FileManager.createTxtFileAsset - * 预期输出:成功创建五个模拟文档对象 - * 检验接口:FileManager.createTxtFileAsset - */ - it(BUNDLE + 'CreateTxtFileAssetFunction_001', 0, async () => { - Logger.info(TAG, BUNDLE + 'CreateTxtFileAssetFunction_001 begin') - let result = await FileManager.getFileAssets(ability.context, TYPE[2][0]) - let num = await result.getCount() - for (let i = 0; i < TEST_NUM; i++) { - let curFile = await FileManager.createTxtFileAsset(ability.context); - file.push(curFile); - let newResult = await FileManager.getFileAssets(ability.context, TYPE[2][0]) - let newNum = newResult.getCount() - Logger.info(TAG, 'CreateTxtFileAssetFunction_001:expect num is ' + (num + i + 1) + ' and result is ' + newNum) - expect(newNum).assertEqual(num + i + 1) - } - Logger.info(TAG, BUNDLE + 'CreateTxtFileAssetFunction_001 end') - }) }) } diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/ets/test/List.test.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/ets/test/List.test.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/ets/test/List.test.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/ets/test/List.test.ets diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/ets/testability/TestAbility.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/ets/testability/TestAbility.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/ets/testability/TestAbility.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/ets/testability/TestAbility.ets diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/ets/testability/pages/Index.ets b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/ets/testability/pages/Index.ets similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/ets/testability/pages/Index.ets rename to code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/ets/testability/pages/Index.ets diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/module.json5 b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/module.json5 similarity index 89% rename from code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/module.json5 rename to code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/module.json5 index cb7d5e55ee..0f00df5f4b 100644 --- a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/module.json5 +++ b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/module.json5 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -17,7 +17,7 @@ "module": { "name": "entry_test", "type": "feature", - "srcEntrance": "./ets/Application/TestAbilityStage.ts", + "srcEntry": "./ets/Application/TestAbilityStage.ts", "description": "$string:entry_test_desc", "mainElement": "TestAbility", "deviceTypes": [ @@ -31,7 +31,7 @@ "abilities": [ { "name": "TestAbility", - "srcEntrance": "./ets/testability/TestAbility.ets", + "srcEntry": "./ets/testability/TestAbility.ets", "description": "$string:TestAbility_desc", "icon": "$media:icon", "label": "$string:TestAbility_label", diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/element/color.json b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/element/color.json similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/element/color.json rename to code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/element/color.json diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/element/string.json b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/element/string.json similarity index 85% rename from code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/element/string.json rename to code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/element/string.json index d0fca03dfc..2f14f55c2b 100644 --- a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/element/string.json +++ b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/element/string.json @@ -19,6 +19,10 @@ { "name": "label_confirm", "value": "Label Confirm" + }, + { + "name": "select_all", + "value": "select all" } ] } \ No newline at end of file diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/media/icon.png b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/media/icon.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/media/icon.png rename to code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/media/icon.png diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/profile/test_pages.json b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/profile/test_pages.json similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/profile/test_pages.json rename to code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/resources/base/profile/test_pages.json diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/resources/en/element/string.json b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/resources/en/element/string.json similarity index 85% rename from code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/resources/en/element/string.json rename to code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/resources/en/element/string.json index d0fca03dfc..2f14f55c2b 100644 --- a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/resources/en/element/string.json +++ b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/resources/en/element/string.json @@ -19,6 +19,10 @@ { "name": "label_confirm", "value": "Label Confirm" + }, + { + "name": "select_all", + "value": "select all" } ] } \ No newline at end of file diff --git a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/resources/zh/element/string.json b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/resources/zh/element/string.json similarity index 85% rename from code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/resources/zh/element/string.json rename to code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/resources/zh/element/string.json index bfb32234b2..c8b1013af8 100644 --- a/code/BasicFeature/FileManagement/FileManager/entry/src/ohosTest/resources/zh/element/string.json +++ b/code/SystemFeature/FileManagement/FileManager/entry/src/ohosTest/resources/zh/element/string.json @@ -19,6 +19,10 @@ { "name": "label_confirm", "value": "确定" + }, + { + "name": "select_all", + "value": "全选" } ] } \ No newline at end of file diff --git a/code/SystemFeature/FileManagement/FileManager/hvigor/hvigor-config.json5 b/code/SystemFeature/FileManagement/FileManager/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000..d689a3f7a0 --- /dev/null +++ b/code/SystemFeature/FileManagement/FileManager/hvigor/hvigor-config.json5 @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2024-2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +{ + "hvigorVersion": "4.1.2", + "dependencies": { + "@ohos/hvigor-ohos-plugin": "4.1.2" + } +} \ No newline at end of file diff --git a/code/SystemFeature/FileManagement/FileManager/hvigor/hvigor-wrapper.js b/code/SystemFeature/FileManagement/FileManager/hvigor/hvigor-wrapper.js new file mode 100644 index 0000000000..372eae8eb4 --- /dev/null +++ b/code/SystemFeature/FileManagement/FileManager/hvigor/hvigor-wrapper.js @@ -0,0 +1 @@ +"use strict";var u=require("path"),D=require("os"),e=require("fs"),t=require("crypto"),r=require("child_process"),n="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},i={},C={},F=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(C,"__esModule",{value:!0}),C.maxPathLength=C.isMac=C.isLinux=C.isWindows=void 0;const E=F(D),A="Windows_NT",o="Darwin";function a(){return E.default.type()===A}function c(){return E.default.type()===o}C.isWindows=a,C.isLinux=function(){return"Linux"===E.default.type()},C.isMac=c,C.maxPathLength=function(){return c()?1016:a()?259:4095},function(e){var t=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),r=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),i=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&t(D,u,e);return r(D,u),D};Object.defineProperty(e,"__esModule",{value:!0}),e.WORK_SPACE=e.HVIGOR_PROJECT_WRAPPER_HOME=e.HVIGOR_PROJECT_ROOT_DIR=e.HVIGOR_PROJECT_CACHES_HOME=e.HVIGOR_PNPM_STORE_PATH=e.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH=e.PROJECT_CACHES=e.HVIGOR_WRAPPER_TOOLS_HOME=e.HVIGOR_USER_HOME=e.DEFAULT_PACKAGE_JSON=e.DEFAULT_HVIGOR_CONFIG_JSON_FILE_NAME=e.PNPM=e.HVIGOR=e.NPM_TOOL=e.PNPM_TOOL=e.HVIGOR_ENGINE_PACKAGE_NAME=void 0;const F=i(D),E=i(u),A=C;e.HVIGOR_ENGINE_PACKAGE_NAME="@ohos/hvigor",e.PNPM_TOOL=(0,A.isWindows)()?"pnpm.cmd":"pnpm",e.NPM_TOOL=(0,A.isWindows)()?"npm.cmd":"npm",e.HVIGOR="hvigor",e.PNPM="pnpm",e.DEFAULT_HVIGOR_CONFIG_JSON_FILE_NAME="hvigor-config.json5",e.DEFAULT_PACKAGE_JSON="package.json",e.HVIGOR_USER_HOME=E.resolve(F.homedir(),".hvigor"),e.HVIGOR_WRAPPER_TOOLS_HOME=E.resolve(e.HVIGOR_USER_HOME,"wrapper","tools"),e.PROJECT_CACHES="project_caches",e.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH=E.resolve(e.HVIGOR_WRAPPER_TOOLS_HOME,"node_modules",".bin",e.PNPM_TOOL),e.HVIGOR_PNPM_STORE_PATH=E.resolve(e.HVIGOR_USER_HOME,"caches"),e.HVIGOR_PROJECT_CACHES_HOME=E.resolve(e.HVIGOR_USER_HOME,e.PROJECT_CACHES),e.HVIGOR_PROJECT_ROOT_DIR=process.cwd(),e.HVIGOR_PROJECT_WRAPPER_HOME=E.resolve(e.HVIGOR_PROJECT_ROOT_DIR,e.HVIGOR),e.WORK_SPACE="workspace"}(i);var s={},l={};Object.defineProperty(l,"__esModule",{value:!0}),l.logInfoPrintConsole=l.logErrorAndExit=void 0,l.logErrorAndExit=function(u){u instanceof Error?console.error(u.message):console.error(u),process.exit(-1)},l.logInfoPrintConsole=function(u){console.log(u)};var B=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),d=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),f=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&B(D,u,e);return d(D,u),D};Object.defineProperty(s,"__esModule",{value:!0});var _=s.executeBuild=void 0;const p=f(e),O=f(u),h=l;_=s.executeBuild=function(u){const D=O.resolve(u,"node_modules","@ohos","hvigor","bin","hvigor.js");try{const u=p.realpathSync(D);require(u)}catch(e){(0,h.logErrorAndExit)(`Error: ENOENT: no such file ${D},delete ${u} and retry.`)}};var P={},v={};!function(u){var D=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(u,"__esModule",{value:!0}),u.hashFile=u.hash=u.createHash=void 0;const r=D(t),i=D(e);u.createHash=(u="MD5")=>r.default.createHash(u);u.hash=(D,e)=>(0,u.createHash)(e).update(D).digest("hex");u.hashFile=(D,e)=>{if(i.default.existsSync(D))return(0,u.hash)(i.default.readFileSync(D,"utf-8"),e)}}(v);var g={},m={},R={};Object.defineProperty(R,"__esModule",{value:!0}),R.Unicode=void 0;class y{}R.Unicode=y,y.SPACE_SEPARATOR=/[\u1680\u2000-\u200A\u202F\u205F\u3000]/,y.ID_START=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/,y.ID_CONTINUE=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/,Object.defineProperty(m,"__esModule",{value:!0}),m.JudgeUtil=void 0;const I=R;m.JudgeUtil=class{static isIgnoreChar(u){return"string"==typeof u&&("\t"===u||"\v"===u||"\f"===u||" "===u||" "===u||"\ufeff"===u||"\n"===u||"\r"===u||"\u2028"===u||"\u2029"===u)}static isSpaceSeparator(u){return"string"==typeof u&&I.Unicode.SPACE_SEPARATOR.test(u)}static isIdStartChar(u){return"string"==typeof u&&(u>="a"&&u<="z"||u>="A"&&u<="Z"||"$"===u||"_"===u||I.Unicode.ID_START.test(u))}static isIdContinueChar(u){return"string"==typeof u&&(u>="a"&&u<="z"||u>="A"&&u<="Z"||u>="0"&&u<="9"||"$"===u||"_"===u||"‌"===u||"‍"===u||I.Unicode.ID_CONTINUE.test(u))}static isDigitWithoutZero(u){return/[1-9]/.test(u)}static isDigit(u){return"string"==typeof u&&/[0-9]/.test(u)}static isHexDigit(u){return"string"==typeof u&&/[0-9A-Fa-f]/.test(u)}};var N=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(g,"__esModule",{value:!0}),g.parseJsonText=g.parseJsonFile=void 0;const b=N(e),S=N(D),w=N(u),H=m;var x;!function(u){u[u.Char=0]="Char",u[u.EOF=1]="EOF",u[u.Identifier=2]="Identifier"}(x||(x={}));let M,T,V,G,j,J,W="start",U=[],L=0,$=1,k=0,K=!1,z="default",q="'",Z=1;function X(u,D=!1){T=String(u),W="start",U=[],L=0,$=1,k=0,G=void 0,K=D;do{M=Q(),nu[W]()}while("eof"!==M.type);return G}function Q(){for(z="default",j="",q="'",Z=1;;){J=Y();const u=Du[z]();if(u)return u}}function Y(){if(T[L])return String.fromCodePoint(T.codePointAt(L))}function uu(){const u=Y();return"\n"===u?($++,k=0):u?k+=u.length:k++,u&&(L+=u.length),u}g.parseJsonFile=function(u,D=!1,e="utf-8"){const t=b.default.readFileSync(w.default.resolve(u),{encoding:e});try{return X(t,D)}catch(D){if(D instanceof SyntaxError){const e=D.message.split("at");if(2===e.length)throw new Error(`${e[0].trim()}${S.default.EOL}\t at ${u}:${e[1].trim()}`)}throw new Error(`${u} is not in valid JSON/JSON5 format.`)}},g.parseJsonText=X;const Du={default(){switch(J){case"/":return uu(),void(z="comment");case void 0:return uu(),eu("eof")}if(!H.JudgeUtil.isIgnoreChar(J)&&!H.JudgeUtil.isSpaceSeparator(J))return Du[W]();uu()},start(){z="value"},beforePropertyName(){switch(J){case"$":case"_":return j=uu(),void(z="identifierName");case"\\":return uu(),void(z="identifierNameStartEscape");case"}":return eu("punctuator",uu());case'"':case"'":return q=J,uu(),void(z="string")}if(H.JudgeUtil.isIdStartChar(J))return j+=uu(),void(z="identifierName");throw Eu(x.Char,uu())},afterPropertyName(){if(":"===J)return eu("punctuator",uu());throw Eu(x.Char,uu())},beforePropertyValue(){z="value"},afterPropertyValue(){switch(J){case",":case"}":return eu("punctuator",uu())}throw Eu(x.Char,uu())},beforeArrayValue(){if("]"===J)return eu("punctuator",uu());z="value"},afterArrayValue(){switch(J){case",":case"]":return eu("punctuator",uu())}throw Eu(x.Char,uu())},end(){throw Eu(x.Char,uu())},comment(){switch(J){case"*":return uu(),void(z="multiLineComment");case"/":return uu(),void(z="singleLineComment")}throw Eu(x.Char,uu())},multiLineComment(){switch(J){case"*":return uu(),void(z="multiLineCommentAsterisk");case void 0:throw Eu(x.Char,uu())}uu()},multiLineCommentAsterisk(){switch(J){case"*":return void uu();case"/":return uu(),void(z="default");case void 0:throw Eu(x.Char,uu())}uu(),z="multiLineComment"},singleLineComment(){switch(J){case"\n":case"\r":case"\u2028":case"\u2029":return uu(),void(z="default");case void 0:return uu(),eu("eof")}uu()},value(){switch(J){case"{":case"[":return eu("punctuator",uu());case"n":return uu(),tu("ull"),eu("null",null);case"t":return uu(),tu("rue"),eu("boolean",!0);case"f":return uu(),tu("alse"),eu("boolean",!1);case"-":case"+":return"-"===uu()&&(Z=-1),void(z="numerical");case".":case"0":case"I":case"N":return void(z="numerical");case'"':case"'":return q=J,uu(),j="",void(z="string")}if(void 0===J||!H.JudgeUtil.isDigitWithoutZero(J))throw Eu(x.Char,uu());z="numerical"},numerical(){switch(J){case".":return j=uu(),void(z="decimalPointLeading");case"0":return j=uu(),void(z="zero");case"I":return uu(),tu("nfinity"),eu("numeric",Z*(1/0));case"N":return uu(),tu("aN"),eu("numeric",NaN)}if(void 0!==J&&H.JudgeUtil.isDigitWithoutZero(J))return j=uu(),void(z="decimalInteger");throw Eu(x.Char,uu())},zero(){switch(J){case".":case"e":case"E":return void(z="decimal");case"x":case"X":return j+=uu(),void(z="hexadecimal")}return eu("numeric",0)},decimalInteger(){switch(J){case".":case"e":case"E":return void(z="decimal")}if(!H.JudgeUtil.isDigit(J))return eu("numeric",Z*Number(j));j+=uu()},decimal(){switch(J){case".":j+=uu(),z="decimalFraction";break;case"e":case"E":j+=uu(),z="decimalExponent"}},decimalPointLeading(){if(H.JudgeUtil.isDigit(J))return j+=uu(),void(z="decimalFraction");throw Eu(x.Char,uu())},decimalFraction(){switch(J){case"e":case"E":return j+=uu(),void(z="decimalExponent")}if(!H.JudgeUtil.isDigit(J))return eu("numeric",Z*Number(j));j+=uu()},decimalExponent(){switch(J){case"+":case"-":return j+=uu(),void(z="decimalExponentSign")}if(H.JudgeUtil.isDigit(J))return j+=uu(),void(z="decimalExponentInteger");throw Eu(x.Char,uu())},decimalExponentSign(){if(H.JudgeUtil.isDigit(J))return j+=uu(),void(z="decimalExponentInteger");throw Eu(x.Char,uu())},decimalExponentInteger(){if(!H.JudgeUtil.isDigit(J))return eu("numeric",Z*Number(j));j+=uu()},hexadecimal(){if(H.JudgeUtil.isHexDigit(J))return j+=uu(),void(z="hexadecimalInteger");throw Eu(x.Char,uu())},hexadecimalInteger(){if(!H.JudgeUtil.isHexDigit(J))return eu("numeric",Z*Number(j));j+=uu()},identifierNameStartEscape(){if("u"!==J)throw Eu(x.Char,uu());uu();const u=ru();switch(u){case"$":case"_":break;default:if(!H.JudgeUtil.isIdStartChar(u))throw Eu(x.Identifier)}j+=u,z="identifierName"},identifierName(){switch(J){case"$":case"_":case"‌":case"‍":return void(j+=uu());case"\\":return uu(),void(z="identifierNameEscape")}if(!H.JudgeUtil.isIdContinueChar(J))return eu("identifier",j);j+=uu()},identifierNameEscape(){if("u"!==J)throw Eu(x.Char,uu());uu();const u=ru();switch(u){case"$":case"_":case"‌":case"‍":break;default:if(!H.JudgeUtil.isIdContinueChar(u))throw Eu(x.Identifier)}j+=u,z="identifierName"},string(){switch(J){case"\\":return uu(),void(j+=function(){const u=Y(),D=function(){switch(Y()){case"b":return uu(),"\b";case"f":return uu(),"\f";case"n":return uu(),"\n";case"r":return uu(),"\r";case"t":return uu(),"\t";case"v":return uu(),"\v"}return}();if(D)return D;switch(u){case"0":if(uu(),H.JudgeUtil.isDigit(Y()))throw Eu(x.Char,uu());return"\0";case"x":return uu(),function(){let u="",D=Y();if(!H.JudgeUtil.isHexDigit(D))throw Eu(x.Char,uu());if(u+=uu(),D=Y(),!H.JudgeUtil.isHexDigit(D))throw Eu(x.Char,uu());return u+=uu(),String.fromCodePoint(parseInt(u,16))}();case"u":return uu(),ru();case"\n":case"\u2028":case"\u2029":return uu(),"";case"\r":return uu(),"\n"===Y()&&uu(),""}if(void 0===u||H.JudgeUtil.isDigitWithoutZero(u))throw Eu(x.Char,uu());return uu()}());case'"':case"'":if(J===q){const u=eu("string",j);return uu(),u}return void(j+=uu());case"\n":case"\r":case void 0:throw Eu(x.Char,uu());case"\u2028":case"\u2029":!function(u){console.warn(`JSON5: '${Fu(u)}' in strings is not valid ECMAScript; consider escaping.`)}(J)}j+=uu()}};function eu(u,D){return{type:u,value:D,line:$,column:k}}function tu(u){for(const D of u){if(Y()!==D)throw Eu(x.Char,uu());uu()}}function ru(){let u="",D=4;for(;D-- >0;){const D=Y();if(!H.JudgeUtil.isHexDigit(D))throw Eu(x.Char,uu());u+=uu()}return String.fromCodePoint(parseInt(u,16))}const nu={start(){if("eof"===M.type)throw Eu(x.EOF);iu()},beforePropertyName(){switch(M.type){case"identifier":case"string":return V=M.value,void(W="afterPropertyName");case"punctuator":return void Cu();case"eof":throw Eu(x.EOF)}},afterPropertyName(){if("eof"===M.type)throw Eu(x.EOF);W="beforePropertyValue"},beforePropertyValue(){if("eof"===M.type)throw Eu(x.EOF);iu()},afterPropertyValue(){if("eof"===M.type)throw Eu(x.EOF);switch(M.value){case",":return void(W="beforePropertyName");case"}":Cu()}},beforeArrayValue(){if("eof"===M.type)throw Eu(x.EOF);"punctuator"!==M.type||"]"!==M.value?iu():Cu()},afterArrayValue(){if("eof"===M.type)throw Eu(x.EOF);switch(M.value){case",":return void(W="beforeArrayValue");case"]":Cu()}},end(){}};function iu(){const u=function(){let u;switch(M.type){case"punctuator":switch(M.value){case"{":u={};break;case"[":u=[]}break;case"null":case"boolean":case"numeric":case"string":u=M.value}return u}();if(K&&"object"==typeof u&&(u._line=$,u._column=k),void 0===G)G=u;else{const D=U[U.length-1];Array.isArray(D)?K&&"object"!=typeof u?D.push({value:u,_line:$,_column:k}):D.push(u):D[V]=K&&"object"!=typeof u?{value:u,_line:$,_column:k}:u}!function(u){if(u&&"object"==typeof u)U.push(u),W=Array.isArray(u)?"beforeArrayValue":"beforePropertyName";else{const u=U[U.length-1];W=u?Array.isArray(u)?"afterArrayValue":"afterPropertyValue":"end"}}(u)}function Cu(){U.pop();const u=U[U.length-1];W=u?Array.isArray(u)?"afterArrayValue":"afterPropertyValue":"end"}function Fu(u){const D={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};if(D[u])return D[u];if(u<" "){const D=u.charCodeAt(0).toString(16);return`\\x${`00${D}`.substring(D.length)}`}return u}function Eu(u,D){let e="";switch(u){case x.Char:e=void 0===D?`JSON5: invalid end of input at ${$}:${k}`:`JSON5: invalid character '${Fu(D)}' at ${$}:${k}`;break;case x.EOF:e=`JSON5: invalid end of input at ${$}:${k}`;break;case x.Identifier:k-=5,e=`JSON5: invalid identifier character at ${$}:${k}`}const t=new Au(e);return t.lineNumber=$,t.columnNumber=k,t}class Au extends SyntaxError{}var ou={},au=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),cu=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),su=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&au(D,u,e);return cu(D,u),D},lu=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(ou,"__esModule",{value:!0}),ou.isFileExists=ou.offlinePluginConversion=ou.executeCommand=ou.getNpmPath=ou.hasNpmPackInPaths=void 0;const Bu=r,du=lu(e),fu=su(u),_u=i,pu=l;ou.hasNpmPackInPaths=function(u,D){try{return require.resolve(u,{paths:[...D]}),!0}catch(u){return!1}},ou.getNpmPath=function(){const u=process.execPath;return fu.join(fu.dirname(u),_u.NPM_TOOL)},ou.executeCommand=function(u,D,e){0!==(0,Bu.spawnSync)(u,D,e).status&&(0,pu.logErrorAndExit)(`Error: ${u} ${D} execute failed.See above for details.`)},ou.offlinePluginConversion=function(u,D){return D.startsWith("file:")||D.endsWith(".tgz")?fu.resolve(u,_u.HVIGOR,D.replace("file:","")):D},ou.isFileExists=function(u){return du.default.existsSync(u)&&du.default.statSync(u).isFile()};var Ou=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),hu=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),Pu=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&Ou(D,u,e);return hu(D,u),D},vu=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(P,"__esModule",{value:!0});var gu=P.initProjectWorkSpace=void 0;const mu=Pu(e),Ru=vu(D),yu=Pu(u),Iu=v,Nu=i,bu=g,Su=l,wu=ou;let Hu,xu,Mu;function Tu(u,D,e){return void 0!==e.dependencies&&(0,wu.offlinePluginConversion)(Nu.HVIGOR_PROJECT_ROOT_DIR,D.dependencies[u])===yu.normalize(e.dependencies[u])}function Vu(){const u=yu.join(Mu,Nu.WORK_SPACE);if((0,Su.logInfoPrintConsole)("Hvigor cleaning..."),!mu.existsSync(u))return;const D=mu.readdirSync(u);if(!D||0===D.length)return;const e=yu.resolve(Mu,"node_modules","@ohos","hvigor","bin","hvigor.js");mu.existsSync(e)&&(0,wu.executeCommand)(process.argv[0],[e,"--stop-daemon"],{});try{D.forEach((D=>{mu.rmSync(yu.resolve(u,D),{recursive:!0})}))}catch(D){(0,Su.logErrorAndExit)(`The hvigor build tool cannot be installed. Please manually clear the workspace directory and synchronize the project again.\n\n Workspace Path: ${u}.`)}}gu=P.initProjectWorkSpace=function(){if(Hu=function(){const u=yu.resolve(Nu.HVIGOR_PROJECT_WRAPPER_HOME,Nu.DEFAULT_HVIGOR_CONFIG_JSON_FILE_NAME);mu.existsSync(u)||(0,Su.logErrorAndExit)(`Error: Hvigor config file ${u} does not exist.`);return(0,bu.parseJsonFile)(u)}(),Mu=function(u){let D;D=function(u){let D=u.hvigorVersion;if(D.startsWith("file:")||D.endsWith(".tgz"))return!1;const e=u.dependencies,t=Object.getOwnPropertyNames(e);for(const u of t){const D=e[u];if(D.startsWith("file:")||D.endsWith(".tgz"))return!1}if(1===t.length&&"@ohos/hvigor-ohos-plugin"===t[0])return D>"2.5.0";return!1}(u)?function(u){let D=`${Nu.HVIGOR_ENGINE_PACKAGE_NAME}@${u.hvigorVersion}`;const e=u.dependencies;if(e){Object.getOwnPropertyNames(e).sort().forEach((u=>{D+=`,${u}@${e[u]}`}))}return(0,Iu.hash)(D)}(u):(0,Iu.hash)(process.cwd());return yu.resolve(Ru.default.homedir(),".hvigor","project_caches",D)}(Hu),xu=function(){const u=yu.resolve(Mu,Nu.WORK_SPACE,Nu.DEFAULT_PACKAGE_JSON);return mu.existsSync(u)?(0,bu.parseJsonFile)(u):{dependencies:{}}}(),!(0,wu.hasNpmPackInPaths)(Nu.HVIGOR_ENGINE_PACKAGE_NAME,[yu.join(Mu,Nu.WORK_SPACE)])||(0,wu.offlinePluginConversion)(Nu.HVIGOR_PROJECT_ROOT_DIR,Hu.hvigorVersion)!==xu.dependencies[Nu.HVIGOR_ENGINE_PACKAGE_NAME]||!function(){function u(u){const D=null==u?void 0:u.dependencies;return void 0===D?0:Object.getOwnPropertyNames(D).length}const D=u(Hu),e=u(xu);if(D+1!==e)return!1;for(const u in null==Hu?void 0:Hu.dependencies)if(!(0,wu.hasNpmPackInPaths)(u,[yu.join(Mu,Nu.WORK_SPACE)])||!Tu(u,Hu,xu))return!1;return!0}()){Vu();try{!function(){(0,Su.logInfoPrintConsole)("Hvigor installing...");for(const u in Hu.dependencies)Hu.dependencies[u]&&(Hu.dependencies[u]=(0,wu.offlinePluginConversion)(Nu.HVIGOR_PROJECT_ROOT_DIR,Hu.dependencies[u]));const u={dependencies:{...Hu.dependencies}};u.dependencies[Nu.HVIGOR_ENGINE_PACKAGE_NAME]=(0,wu.offlinePluginConversion)(Nu.HVIGOR_PROJECT_ROOT_DIR,Hu.hvigorVersion);const D=yu.join(Mu,Nu.WORK_SPACE);try{mu.mkdirSync(D,{recursive:!0});const e=yu.resolve(D,Nu.DEFAULT_PACKAGE_JSON);mu.writeFileSync(e,JSON.stringify(u))}catch(u){(0,Su.logErrorAndExit)(u)}(function(){const u=["config","set","store-dir",Nu.HVIGOR_PNPM_STORE_PATH],D={cwd:yu.join(Mu,Nu.WORK_SPACE),stdio:["inherit","inherit","inherit"]};(0,wu.executeCommand)(Nu.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH,u,D)})(),function(){const u=["install"],D={cwd:yu.join(Mu,Nu.WORK_SPACE),stdio:["inherit","inherit","inherit"]};(0,wu.executeCommand)(Nu.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH,u,D)}(),(0,Su.logInfoPrintConsole)("Hvigor install success.")}()}catch(u){Vu()}}return Mu};var Gu={};!function(t){var C=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),F=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),E=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&C(D,u,e);return F(D,u),D},A=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(t,"__esModule",{value:!0}),t.executeInstallPnpm=t.isPnpmInstalled=t.environmentHandler=t.checkNpmConifg=t.PNPM_VERSION=void 0;const o=r,a=E(e),c=A(D),s=E(u),B=i,d=l,f=ou;t.PNPM_VERSION="7.30.0",t.checkNpmConifg=function(){const u=s.resolve(B.HVIGOR_PROJECT_ROOT_DIR,".npmrc"),D=s.resolve(c.default.homedir(),".npmrc");if((0,f.isFileExists)(u)||(0,f.isFileExists)(D))return;const e=(0,f.getNpmPath)(),t=(0,o.spawnSync)(e,["config","get","prefix"],{cwd:B.HVIGOR_PROJECT_ROOT_DIR});if(0!==t.status||!t.stdout)return void(0,d.logErrorAndExit)("Error: The hvigor depends on the npmrc file. Configure the npmrc file first.");const r=s.resolve(`${t.stdout}`.replace(/[\r\n]/gi,""),".npmrc");(0,f.isFileExists)(r)||(0,d.logErrorAndExit)("Error: The hvigor depends on the npmrc file. Configure the npmrc file first.")},t.environmentHandler=function(){process.env["npm_config_update-notifier"]="false"},t.isPnpmInstalled=function(){return!!a.existsSync(B.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH)&&(0,f.hasNpmPackInPaths)("pnpm",[B.HVIGOR_WRAPPER_TOOLS_HOME])},t.executeInstallPnpm=function(){(0,d.logInfoPrintConsole)(`Installing pnpm@${t.PNPM_VERSION}...`);const u=(0,f.getNpmPath)();!function(){const u=s.resolve(B.HVIGOR_WRAPPER_TOOLS_HOME,B.DEFAULT_PACKAGE_JSON);try{a.existsSync(B.HVIGOR_WRAPPER_TOOLS_HOME)||a.mkdirSync(B.HVIGOR_WRAPPER_TOOLS_HOME,{recursive:!0});const D={dependencies:{}};D.dependencies[B.PNPM]=t.PNPM_VERSION,a.writeFileSync(u,JSON.stringify(D))}catch(D){(0,d.logErrorAndExit)(`Error: EPERM: operation not permitted,create ${u} failed.`)}}(),(0,f.executeCommand)(u,["install","pnpm"],{cwd:B.HVIGOR_WRAPPER_TOOLS_HOME,stdio:["inherit","inherit","inherit"],env:process.env}),(0,d.logInfoPrintConsole)("Pnpm install success.")}}(Gu),function(){Gu.checkNpmConifg(),Gu.environmentHandler(),Gu.isPnpmInstalled()||Gu.executeInstallPnpm();const D=gu();_(u.join(D,i.WORK_SPACE))}(); \ No newline at end of file diff --git a/code/BasicFeature/FileManagement/FileManager/hvigorfile.js b/code/SystemFeature/FileManagement/FileManager/hvigorfile.js similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/hvigorfile.js rename to code/SystemFeature/FileManagement/FileManager/hvigorfile.js diff --git a/code/BasicFeature/FileManagement/FileManager/hvigorw b/code/SystemFeature/FileManagement/FileManager/hvigorw similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/hvigorw rename to code/SystemFeature/FileManagement/FileManager/hvigorw diff --git a/code/BasicFeature/FileManagement/FileManager/hvigorw.bat b/code/SystemFeature/FileManagement/FileManager/hvigorw.bat similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/hvigorw.bat rename to code/SystemFeature/FileManagement/FileManager/hvigorw.bat diff --git a/code/BasicFeature/FileManagement/FileManager/oh-package.json5 b/code/SystemFeature/FileManagement/FileManager/oh-package.json5 similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/oh-package.json5 rename to code/SystemFeature/FileManagement/FileManager/oh-package.json5 diff --git a/code/BasicFeature/FileManagement/FileManager/ohosTest.md b/code/SystemFeature/FileManagement/FileManager/ohosTest.md similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/ohosTest.md rename to code/SystemFeature/FileManagement/FileManager/ohosTest.md diff --git a/code/BasicFeature/FileManagement/FileManager/screenshots/document_list.png b/code/SystemFeature/FileManagement/FileManager/screenshots/document_list.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/screenshots/document_list.png rename to code/SystemFeature/FileManagement/FileManager/screenshots/document_list.png diff --git a/code/BasicFeature/FileManagement/FileManager/screenshots/image_file_list.png b/code/SystemFeature/FileManagement/FileManager/screenshots/image_file_list.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/screenshots/image_file_list.png rename to code/SystemFeature/FileManagement/FileManager/screenshots/image_file_list.png diff --git a/code/BasicFeature/FileManagement/FileManager/screenshots/image_preview.png b/code/SystemFeature/FileManagement/FileManager/screenshots/image_preview.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/screenshots/image_preview.png rename to code/SystemFeature/FileManagement/FileManager/screenshots/image_preview.png diff --git a/code/BasicFeature/FileManagement/FileManager/screenshots/main.png b/code/SystemFeature/FileManagement/FileManager/screenshots/main.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/screenshots/main.png rename to code/SystemFeature/FileManagement/FileManager/screenshots/main.png diff --git a/code/BasicFeature/FileManagement/FileManager/screenshots/myPhone_home.png b/code/SystemFeature/FileManagement/FileManager/screenshots/myPhone_home.png similarity index 100% rename from code/BasicFeature/FileManagement/FileManager/screenshots/myPhone_home.png rename to code/SystemFeature/FileManagement/FileManager/screenshots/myPhone_home.png -- Gitee