From 8bf02c35c1c7a191943f1369c53356dac420885f Mon Sep 17 00:00:00 2001 From: caolili123 Date: Wed, 2 Jul 2025 14:04:18 +0800 Subject: [PATCH] =?UTF-8?q?Issue:[Bug]:=20=E5=90=88=E5=B9=B6ArkTSUtilsDocM?= =?UTF-8?q?odule=E5=88=B0ArkTS/ArkTsConcurrent=E7=9B=AE=E5=BD=95=E4=B8=8B?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E4=BF=AE=E6=94=B9=E5=90=8D=E7=A7=B0=20https:?= =?UTF-8?q?//gitee.com/openharmony/applications=5Fapp=5Fsamples/issues/ICJ?= =?UTF-8?q?EDZ?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: caolili123 --- .../ArkTsSimpleDemo}/.gitignore | 20 +- .../ArkTsSimpleDemo}/AppScope/app.json5 | 50 +-- .../resources/base/element/string.json | 16 +- .../resources/base/media/app_icon.png | Bin .../ArkTsSimpleDemo}/README.MD | 144 ++++----- .../ArkTsSimpleDemo}/README_zh.md | 149 +++++---- .../ArkTsSimpleDemo}/build-profile.json5 | 100 +++--- .../ArkTsSimpleDemo}/entry/.gitignore | 10 +- .../entry/build-profile.json5 | 84 ++--- .../ArkTsSimpleDemo}/entry/hvigorfile.ts | 12 +- .../entry/obfuscation-rules.txt | 40 +-- .../ArkTsSimpleDemo}/entry/oh-package.json5 | 50 +-- .../main/ets/entryability/EntryAbility.ets | 112 +++---- .../entry/src/main/ets/managers/Handle.ets | 88 ++--- .../ets/managers/arkts-sendable-module.ets | 100 +++--- .../managers/async-concurrency-overview.ets | 54 ++-- .../main/ets/managers/cpu-intensive-task.ets | 108 +++---- .../src/main/ets/managers/file-write.ets | 48 +-- .../main/ets/managers/io-intensive-task.ets | 98 +++--- .../entry/src/main/ets/managers/manager.ets | 108 +++---- .../src/main/ets/managers/sharedModule.ets | 90 +++--- .../ets/managers/single-io-development.ets | 88 ++--- .../ets/managers/sync-task-development.ets | 110 +++---- .../entry/src/main/ets/pages/Index.ets | 128 ++++---- .../entry/src/main/module.json5 | 102 +++--- .../main/resources/base/element/color.json | 14 +- .../main/resources/base}/element/string.json | 30 +- .../src/main/resources/base/media/icon.png | Bin .../main/resources/base/media/startIcon.png | Bin .../resources/base/profile/main_pages.json | 10 +- .../main/resources/en_US}/element/string.json | 30 +- .../src/main/resources/rawfile/startIcon.png | Bin .../main/resources/zh_CN/element/string.json | 30 +- .../entry/src/mock/mock-config.json5 | 32 +- .../src/ohosTest/ets/test/Ability.test.ets | 302 +++++++++--------- .../entry/src/ohosTest/ets/test/List.test.ets | 38 +-- .../ohosTest/ets/testability/TestAbility.ets | 124 +++---- .../ohosTest/ets/testability/pages/Index.ets | 62 ++-- .../ets/testrunner/OpenHarmonyTestRunner.ets | 208 ++++++------ .../entry/src/ohosTest/module.json5 | 102 +++--- .../resources/base/element/color.json | 14 +- .../resources/base/element/string.json | 30 +- .../ohosTest/resources/base/media/icon.png | Bin .../resources/base/profile/test_pages.json | 10 +- .../entry/src/test/List.test.ets | 38 +-- .../entry/src/test/LocalUnit.test.ets | 94 +++--- .../hvigor/hvigor-config.json5 | 51 +-- .../ArkTsSimpleDemo}/hvigorfile.ts | 12 +- .../ArkTsSimpleDemo}/oh-package.json5 | 44 +-- .../ArkTsSimpleDemo}/ohosTest.md | 16 +- .../screenshots/device/image1.jpeg | Bin 0 -> 32162 bytes .../screenshots/device/image2.jpeg | Bin 0 -> 69718 bytes .../screenshots/device/image3.jpeg | Bin 0 -> 36827 bytes .../hvigor/hvigor-wrapper.js | 2 - code/DocsSample/ArkTSUtilsDocModule/hvigorw | 70 ---- .../ArkTSUtilsDocModule/hvigorw.bat | 54 ---- .../screenshots/device/image1.jpeg | Bin 33699 -> 0 bytes .../screenshots/device/image2.jpeg | Bin 64916 -> 0 bytes .../screenshots/device/image3.jpeg | Bin 37477 -> 0 bytes 59 files changed, 1598 insertions(+), 1728 deletions(-) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/.gitignore (92%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/AppScope/app.json5 (85%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/AppScope/resources/base/element/string.json (59%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/AppScope/resources/base/media/app_icon.png (100%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/README.MD (96%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/README_zh.md (79%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/build-profile.json5 (92%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/.gitignore (91%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/build-profile.json5 (91%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/hvigorfile.ts (97%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/obfuscation-rules.txt (85%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/oh-package.json5 (91%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/ets/entryability/EntryAbility.ets (95%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/ets/managers/Handle.ets (93%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/ets/managers/arkts-sendable-module.ets (90%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/ets/managers/async-concurrency-overview.ets (92%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/ets/managers/cpu-intensive-task.ets (95%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/ets/managers/file-write.ets (93%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/ets/managers/io-intensive-task.ets (80%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/ets/managers/manager.ets (75%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/ets/managers/sharedModule.ets (93%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/ets/managers/single-io-development.ets (95%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/ets/managers/sync-task-development.ets (95%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/ets/pages/Index.ets (92%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/module.json5 (93%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/resources/base/element/color.json (93%) rename code/DocsSample/{ArkTSUtilsDocModule/entry/src/main/resources/en_US => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/base}/element/string.json (82%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/resources/base/media/icon.png (100%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/resources/base/media/startIcon.png (100%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/resources/base/profile/main_pages.json (88%) rename code/DocsSample/{ArkTSUtilsDocModule/entry/src/main/resources/base => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/en_US}/element/string.json (82%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/resources/rawfile/startIcon.png (100%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/main/resources/zh_CN/element/string.json (81%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/mock/mock-config.json5 (90%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/ohosTest/ets/test/Ability.test.ets (94%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/ohosTest/ets/test/List.test.ets (91%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/ohosTest/ets/testability/TestAbility.ets (96%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/ohosTest/ets/testability/pages/Index.ets (91%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ets (96%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/ohosTest/module.json5 (93%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/ohosTest/resources/base/element/color.json (93%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/ohosTest/resources/base/element/string.json (94%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/ohosTest/resources/base/media/icon.png (100%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/ohosTest/resources/base/profile/test_pages.json (90%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/test/List.test.ets (91%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/entry/src/test/LocalUnit.test.ets (95%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/hvigor/hvigor-config.json5 (56%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/hvigorfile.ts (97%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/oh-package.json5 (30%) rename code/DocsSample/{ArkTSUtilsDocModule => ArkTS/ArkTsConcurrent/ArkTsSimpleDemo}/ohosTest.md (99%) create mode 100644 code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/screenshots/device/image1.jpeg create mode 100644 code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/screenshots/device/image2.jpeg create mode 100644 code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/screenshots/device/image3.jpeg delete mode 100644 code/DocsSample/ArkTSUtilsDocModule/hvigor/hvigor-wrapper.js delete mode 100644 code/DocsSample/ArkTSUtilsDocModule/hvigorw delete mode 100644 code/DocsSample/ArkTSUtilsDocModule/hvigorw.bat delete mode 100644 code/DocsSample/ArkTSUtilsDocModule/screenshots/device/image1.jpeg delete mode 100644 code/DocsSample/ArkTSUtilsDocModule/screenshots/device/image2.jpeg delete mode 100644 code/DocsSample/ArkTSUtilsDocModule/screenshots/device/image3.jpeg diff --git a/code/DocsSample/ArkTSUtilsDocModule/.gitignore b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/.gitignore similarity index 92% rename from code/DocsSample/ArkTSUtilsDocModule/.gitignore rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/.gitignore index fbabf77101..8514e821ba 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/.gitignore +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/.gitignore @@ -1,11 +1,11 @@ -/node_modules -/oh_modules -/local.properties -/.idea -**/build -/.hvigor -.cxx -/.clangd -/.clang-format -/.clang-tidy +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy **/.test \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/AppScope/app.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/AppScope/app.json5 similarity index 85% rename from code/DocsSample/ArkTSUtilsDocModule/AppScope/app.json5 rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/AppScope/app.json5 index 29ba220034..97a25f8cb9 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/AppScope/app.json5 +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/AppScope/app.json5 @@ -1,25 +1,25 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -{ - "app": { - "bundleName": "com.samples.arktsutilsdocmodule", - "vendor": "example", - "versionCode": 1000000, - "versionName": "1.0.0", - "icon": "$media:app_icon", - "label": "$string:app_name" - } -} +/* + * Copyright (c) 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. + */ + +{ + "app": { + "bundleName": "com.samples.arktssimpledemo", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/code/DocsSample/ArkTSUtilsDocModule/AppScope/resources/base/element/string.json b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/AppScope/resources/base/element/string.json similarity index 59% rename from code/DocsSample/ArkTSUtilsDocModule/AppScope/resources/base/element/string.json rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/AppScope/resources/base/element/string.json index 0fe0a24a31..84d83e53f7 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/AppScope/resources/base/element/string.json +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/AppScope/resources/base/element/string.json @@ -1,8 +1,8 @@ -{ - "string": [ - { - "name": "app_name", - "value": "ArkTSUtilsDocsSample" - } - ] -} +{ + "string": [ + { + "name": "app_name", + "value": "ArkTsSimpleDemo" + } + ] +} diff --git a/code/DocsSample/ArkTSUtilsDocModule/AppScope/resources/base/media/app_icon.png b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/AppScope/resources/base/media/app_icon.png similarity index 100% rename from code/DocsSample/ArkTSUtilsDocModule/AppScope/resources/base/media/app_icon.png rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/AppScope/resources/base/media/app_icon.png diff --git a/code/DocsSample/ArkTSUtilsDocModule/README.MD b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/README.MD similarity index 96% rename from code/DocsSample/ArkTSUtilsDocModule/README.MD rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/README.MD index 013a73a6e7..100898f456 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/README.MD +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/README.MD @@ -1,73 +1,73 @@ -# Example ArkTS Guide Document - -### Introduction - -This example uses the [ArkTS Guide Document]( https://gitee.com/openharmony/docs/tree/master/zh-cn/application-dev/arkts-utils )The development examples of various scenarios in the project are presented to help developers better understand the various capabilities provided by ArkTS and make reasonable use of them. The detailed description of the code displayed in this project can be found in the following link: - -1. [Shared module development guidance](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/arkts-sendable-module.md). -2. [CPU intensive task development guidance(TaskPool and Worker)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/cpu-intensive-task-development.md). -3. [I/O intensive task development guide(TaskPool)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/io-intensive-task-development.md). -4. [Single I/O task development guidance(Promise and async/await)](https://gitee.com/openharmony/docs/blob/OpenHarmony-4.1-Release/zh-cn/application-dev/arkts-utils/single-io-development.md). -5. [Synchronous task development guidance(TaskPool and Worker)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/sync-task-development.md). -6. [Overview of Asynchronous Concurrency(Promise and async/await)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/async-concurrency-overview.md). - -### Effect preview - -|Homepage | Dropdown options for selecting various scenarios | Immediate feedback on execution and results| -|-------------------------------------|-------------------------------------|-----------------------| -| ![](screenshots/device/image1.jpeg) | ![](screenshots/device/image2.jpeg) | ![](screenshots/device/image3.jpeg) | - -### Instructions for use - -1. On the main interface, you can click on the dropdown option and select the scene that needs to be executed. - -2. Select the scenario that needs to be executed and click the * * Execute this Test * * button below to start executing. - -3. The execution result will be immediately feedback above the button. - -### Engineering Catalog - -``` -entry/src/main/ets/ -|---entryability -|---managers -| |---arkts-sendable-module.ets // sample code for shared modules -| |---async-concurrency-overview.ets // asynchronous example code -| |---cpu-intensive-task.ets // example code for intensive tasks -| |---file-write.ets // sample code for file read and write implementation -| |---Handle.ets // sample code for synchronizing task data definition -| |---io-intensive-task.ets // IO intensive example code -| |---manager.ets // summarize and call the functions of each module -| |---sharedModule.ets // sample code for defining shared module data -| |---single-io-development.ets // single IO Example Code -| |---sync-task-development.ets // sample code for synchronization task -|---pages -| |---Index.ets // 应用页面 -``` - -### Related permissions - -Not involved. - -### Dependency - -Not involved. - -### Constraints and limitations -1. This example only supports running on standard systems and supports devices such as RK3568. - -2. This example is a Stage model that supports API12 version SDK, version number: 5.0.0.26, and image version number: OpenHarmony_5.0.0.27. - -3. This example requires DevEco Studio NEXT Developer Preview2 (Build Version: 4.1.3.700, build on March 19, 2024) and above to compile and run. - -### Download - -To download this project separately, execute the following command: - -```` -git init -git config core.sparsecheckout true -echo code/DocsSample/ArkTSUtilsDocModule/ > .git/info/sparse-checkout -git remote add origin https://gitee.com/openharmony/applications_app_samples.git -git pull origin master +# Example ArkTS Guide Document + +### Introduction + +This example uses the [ArkTS Guide Document]( https://gitee.com/openharmony/docs/tree/master/zh-cn/application-dev/arkts-utils )The development examples of various scenarios in the project are presented to help developers better understand the various capabilities provided by ArkTS and make reasonable use of them. The detailed description of the code displayed in this project can be found in the following link: + +1. [Shared module development guidance](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/arkts-sendable-module.md). +2. [CPU intensive task development guidance(TaskPool and Worker)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/cpu-intensive-task-development.md). +3. [I/O intensive task development guide(TaskPool)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/io-intensive-task-development.md). +4. [Single I/O task development guidance(Promise and async/await)](https://gitee.com/openharmony/docs/blob/OpenHarmony-4.1-Release/zh-cn/application-dev/arkts-utils/single-io-development.md). +5. [Synchronous task development guidance(TaskPool and Worker)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/sync-task-development.md). +6. [Overview of Asynchronous Concurrency(Promise and async/await)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/async-concurrency-overview.md). + +### Effect preview + +|Homepage | Dropdown options for selecting various scenarios | Immediate feedback on execution and results| +|-------------------------------------|-------------------------------------|-----------------------| +| ![](screenshots/device/image1.jpeg) | ![](screenshots/device/image2.jpeg) | ![](screenshots/device/image3.jpeg) | + +### Instructions for use + +1. On the main interface, you can click on the dropdown option and select the scene that needs to be executed. + +2. Select the scenario that needs to be executed and click the * * Execute this Test * * button below to start executing. + +3. The execution result will be immediately feedback above the button. + +### Engineering Catalog + +``` +entry/src/main/ets/ +|---entryability +|---managers +| |---arkts-sendable-module.ets // sample code for shared modules +| |---async-concurrency-overview.ets // asynchronous example code +| |---cpu-intensive-task.ets // example code for intensive tasks +| |---file-write.ets // sample code for file read and write implementation +| |---Handle.ets // sample code for synchronizing task data definition +| |---io-intensive-task.ets // IO intensive example code +| |---manager.ets // summarize and call the functions of each module +| |---sharedModule.ets // sample code for defining shared module data +| |---single-io-development.ets // single IO Example Code +| |---sync-task-development.ets // sample code for synchronization task +|---pages +| |---Index.ets // 应用页面 +``` + +### Related permissions + +Not involved. + +### Dependency + +Not involved. + +### Constraints and limitations +1. This example only supports running on standard systems and supports devices such as RK3568. + +2. This example is a Stage model that supports API12 version SDK, version number: 5.0.0.26, and image version number: OpenHarmony_5.0.0.27. + +3. This example requires DevEco Studio NEXT Developer Preview2 (Build Version: 4.1.3.700, build on March 19, 2024) and above to compile and run. + +### Download + +To download this project separately, execute the following command: + +```` +git init +git config core.sparsecheckout true +echo code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/ > .git/info/sparse-checkout +git remote add origin https://gitee.com/openharmony/applications_app_samples.git +git pull origin master ```` \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/README_zh.md b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/README_zh.md similarity index 79% rename from code/DocsSample/ArkTSUtilsDocModule/README_zh.md rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/README_zh.md index eb900d664b..4e96507634 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/README_zh.md +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/README_zh.md @@ -1,76 +1,73 @@ -# ArkTS指南文档示例 - -### 介绍 - -本示例通过使用[ArkTS指南文档](https://gitee.com/openharmony/docs/tree/master/zh-cn/application-dev/arkts-utils)中各场景的开发示例,展示在工程中,帮助开发者更好地理解ArkTS提供的各项能力并合理使用。 - -该工程中展示的代码详细描述可查如下链接: - -1. [共享模块开发指导](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/arkts-sendable-module.md) -2. [CPU密集型任务开发指导 (TaskPool和Worker)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/cpu-intensive-task-development.md) -3. [I/O密集型任务开发指导 (TaskPool)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/io-intensive-task-development.md) -4. [单次I/O任务开发指导 (Promise和async/await)](https://gitee.com/openharmony/docs/blob/OpenHarmony-4.1-Release/zh-cn/application-dev/arkts-utils/single-io-development.md) -5. [同步任务开发指导 (TaskPool和Worker)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/sync-task-development.md) -6. [异步并发概述 (Promise和async/await)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/async-concurrency-overview.md) - -### 效果预览 - -| 首页 | 下拉选项选择各场景 | 执行及结果即时反馈 | -| ----------------------------------- | ----------------------------------- | ----------------------------------- | -| ![](screenshots/device/image1.jpeg) | ![](screenshots/device/image2.jpeg) | ![](screenshots/device/image3.jpeg) | - -### 使用说明 - -1. 在主界面,可以点击下拉选项,选择需要执行的场景。 - -2. 选择需要执行的场景,点击下方**Execute this Test**按钮开始执行。 - -3. 执行结果会即时反馈在按钮上方。 - -### 工程目录 - -``` -entry/src/main/ets/ -|---entryability -|---managers -| |---arkts-sendable-module.ets // 共享模块示例代码 -| |---async-concurrency-overview.ets // 异步示例代码 -| |---cpu-intensive-task.ets // 密集型任务示例代码 -| |---file-write.ets // 文件读写实现示例代码 -| |---Handle.ets // 同步任务数据定义示例代码 -| |---io-intensive-task.ets // IO密集型示例代码 -| |---manager.ets // 各模块函数汇总调用 -| |---sharedModule.ets // 共享模块数据定义示例代码 -| |---single-io-development.ets // 单次IO示例代码 -| |---sync-task-development.ets // 同步任务示例代码 -|---pages -| |---Index.ets // 应用页面 -``` - -### 相关权限 - -不涉及。 - -### 依赖 - -不涉及。 - -### 约束与限制 - -1.本示例仅支持标准系统上运行, 支持设备:RK3568。 - -2.本示例为Stage模型,支持API12版本SDK,版本号:5.0.0.26,镜像版本号:OpenHarmony_5.0.0.27。 - -3.本示例需要使用DevEco Studio NEXT Developer Preview2 (Build Version: 4.1.3.700, built on March 19, 2024)及以上版本才可编译运行。 - -### 下载 - -如需单独下载本工程,执行如下命令: - -``` -git init -git config core.sparsecheckout true -echo code/DocsSample/ArkTSUtilsDocModule/ > .git/info/sparse-checkout -git remote add origin https://gitee.com/openharmony/applications_app_samples.git -git pull origin master -``` +# ArkTS指南文档示例 + +### 介绍 + +本示例通过使用[ArkTS指南文档](https://gitee.com/openharmony/docs/tree/master/zh-cn/application-dev/arkts-utils)中各场景的开发示例,展示在工程中,帮助开发者更好地理解ArkTS提供的各项能力并合理使用。该工程中展示的代码详细描述可查如下链接: + +1. [共享模块开发指导](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/arkts-sendable-module.md)。 +2. [CPU密集型任务开发指导 (TaskPool和Worker)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/cpu-intensive-task-development.md)。 +3. [I/O密集型任务开发指导 (TaskPool)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/io-intensive-task-development.md)。 +4. [单次I/O任务开发指导 (Promise和async/await)](https://gitee.com/openharmony/docs/blob/OpenHarmony-4.1-Release/zh-cn/application-dev/arkts-utils/single-io-development.md)。 +5. [同步任务开发指导 (TaskPool和Worker)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/sync-task-development.md)。 +6. [异步并发概述 (Promise和async/await)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/async-concurrency-overview.md)。 + +### 效果预览 + +| 首页 | 下拉选项选择各场景 | 执行及结果即时反馈 | +|-------------------------------------|-------------------------------------|-----------------------| +| ![](screenshots/device/image1.jpeg) | ![](screenshots/device/image2.jpeg) | ![](screenshots/device/image3.jpeg) | + +### 使用说明 + +1. 在主界面,可以点击下拉选项,选择需要执行的场景。 + +2. 选择需要执行的场景,点击下方**Execute this Test**按钮开始执行。 + +3. 执行结果会即时反馈在按钮上方。 + +### 工程目录 +``` +entry/src/main/ets/ +|---entryability +|---managers +| |---arkts-sendable-module.ets // 共享模块示例代码 +| |---async-concurrency-overview.ets // 异步示例代码 +| |---cpu-intensive-task.ets // 密集型任务示例代码 +| |---file-write.ets // 文件读写实现示例代码 +| |---Handle.ets // 同步任务数据定义示例代码 +| |---io-intensive-task.ets // IO密集型示例代码 +| |---manager.ets // 各模块函数汇总调用 +| |---sharedModule.ets // 共享模块数据定义示例代码 +| |---single-io-development.ets // 单次IO示例代码 +| |---sync-task-development.ets // 同步任务示例代码 +|---pages +| |---Index.ets // 应用页面 +``` + +### 相关权限 + +不涉及。 + +### 依赖 + +不涉及。 + +### 约束与限制 + +1.本示例仅支持标准系统上运行, 支持设备:RK3568。 + +2.本示例为Stage模型,支持API12版本SDK,版本号:5.0.0.26,镜像版本号:OpenHarmony_5.0.0.27。 + +3.本示例需要使用DevEco Studio NEXT Developer Preview2 (Build Version: 4.1.3.700, built on March 19, 2024)及以上版本才可编译运行。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +```` +git init +git config core.sparsecheckout true +echo code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/ > .git/info/sparse-checkout +git remote add origin https://gitee.com/openharmony/applications_app_samples.git +git pull origin master +```` \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/build-profile.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/build-profile.json5 similarity index 92% rename from code/DocsSample/ArkTSUtilsDocModule/build-profile.json5 rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/build-profile.json5 index b1c8c3cd25..9ce78bb919 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/build-profile.json5 +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/build-profile.json5 @@ -1,51 +1,51 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -{ - "app": { - "signingConfigs": [], - "products": [ - { - "name": "default", - "signingConfig": "default", - "compileSdkVersion": 12, - "compatibleSdkVersion": 12, - "runtimeOS": "OpenHarmony", - } - ], - "buildModeSet": [ - { - "name": "debug", - }, - { - "name": "release" - } - ] - }, - "modules": [ - { - "name": "entry", - "srcPath": "./entry", - "targets": [ - { - "name": "default", - "applyToProducts": [ - "default" - ] - } - ] - } - ] +/* + * Copyright (c) 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. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compileSdkVersion": 12, + "compatibleSdkVersion": 12, + "runtimeOS": "OpenHarmony", + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/.gitignore b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/.gitignore similarity index 91% rename from code/DocsSample/ArkTSUtilsDocModule/entry/.gitignore rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/.gitignore index e2713a2779..32abf8fd5e 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/.gitignore +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/.gitignore @@ -1,6 +1,6 @@ -/node_modules -/oh_modules -/.preview -/build -/.cxx +/node_modules +/oh_modules +/.preview +/build +/.cxx /.test \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/build-profile.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/build-profile.json5 similarity index 91% rename from code/DocsSample/ArkTSUtilsDocModule/entry/build-profile.json5 rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/build-profile.json5 index 63b88fb1a0..9377bc2b18 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/build-profile.json5 +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/build-profile.json5 @@ -1,43 +1,43 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -{ - "apiType": "stageMode", - "buildOption": { - }, - "buildOptionSet": [ - { - "name": "release", - "arkOptions": { - "obfuscation": { - "ruleOptions": { - "enable": true, - "files": [ - "./obfuscation-rules.txt" - ] - } - } - } - }, - ], - "targets": [ - { - "name": "default" - }, - { - "name": "ohosTest", - } - ] +/* + * Copyright (c) 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": true, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/hvigorfile.ts b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/hvigorfile.ts similarity index 97% rename from code/DocsSample/ArkTSUtilsDocModule/entry/hvigorfile.ts rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/hvigorfile.ts index c6edcd9048..ba9480d0a9 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/hvigorfile.ts +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/hvigorfile.ts @@ -1,6 +1,6 @@ -import { hapTasks } from '@ohos/hvigor-ohos-plugin'; - -export default { - system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ - plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ -} +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/obfuscation-rules.txt b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/obfuscation-rules.txt similarity index 85% rename from code/DocsSample/ArkTSUtilsDocModule/entry/obfuscation-rules.txt rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/obfuscation-rules.txt index 985b2aeb76..3277ba04f8 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/obfuscation-rules.txt +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/obfuscation-rules.txt @@ -1,18 +1,22 @@ -# Define project specific obfuscation rules here. -# You can include the obfuscation configuration files in the current module's build-profile.json5. -# -# For more details, see -# https://gitee.com/openharmony/arkcompiler_ets_frontend/blob/master/arkguard/README.md - -# Obfuscation options: -# -disable-obfuscation: disable all obfuscations -# -enable-property-obfuscation: obfuscate the property names -# -enable-toplevel-obfuscation: obfuscate the names in the global scope -# -compact: remove unnecessary blank spaces and all line feeds -# -remove-log: remove all console.* statements -# -print-namecache: print the name cache that contains the mapping from the old names to new names -# -apply-namecache: reuse the given cache file - -# Keep options: -# -keep-property-name: specifies property names that you want to keep -# -keep-global-name: specifies names that you want to keep in the global scope \ No newline at end of file +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://gitee.com/openharmony/arkcompiler_ets_frontend/blob/master/arkguard/README.md + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/oh-package.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/oh-package.json5 similarity index 91% rename from code/DocsSample/ArkTSUtilsDocModule/entry/oh-package.json5 rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/oh-package.json5 index 4e54d14e1b..4bf3e2a9b1 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/oh-package.json5 +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/oh-package.json5 @@ -1,25 +1,25 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -{ - "name": "entry", - "version": "1.0.0", - "description": "Please describe the basic information.", - "main": "", - "author": "", - "license": "", - "dependencies": {} -} - +/* + * Copyright (c) 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. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/entryability/EntryAbility.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/entryability/EntryAbility.ets similarity index 95% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/entryability/EntryAbility.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/entryability/EntryAbility.ets index 6dc4e216a7..1d3bd73402 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/entryability/EntryAbility.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/entryability/EntryAbility.ets @@ -1,56 +1,56 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; -import { hilog } from '@kit.PerformanceAnalysisKit'; -import { window } from '@kit.ArkUI'; - -export default class EntryAbility extends UIAbility { - onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { - hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); - } - - onDestroy(): void { - hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); - } - - onWindowStageCreate(windowStage: window.WindowStage): void { - // Main window is created, set main page for this ability - hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); - - windowStage.loadContent('pages/Index', (err, data) => { - if (err.code) { - hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); - return; - } - hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); - }); - } - - onWindowStageDestroy(): void { - // Main window is destroyed, release UI related resources - hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); - } - - onForeground(): void { - // Ability has brought to foreground - hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); - } - - onBackground(): void { - // Ability has back to background - hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); - } -} +/* + * Copyright (c) 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. + */ + +import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { window } from '@kit.ArkUI'; + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err, data) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/Handle.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/Handle.ets similarity index 93% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/Handle.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/Handle.ets index 49a5e2613e..9e13fff604 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/Handle.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/Handle.ets @@ -1,45 +1,45 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -'use shared' - -@Sendable -export default class Handle { - private static instance: Handle = new Handle; - static getInstance(): Handle { - // 返回单例对象 - return Handle.instance; - } - - static syncGet(): void { - // 同步Get方法 - } - - static syncSet(num: number): number { - // 模拟同步步骤1 - console.info('taskpool: this is 1st print!'); - // 模拟同步步骤2 - console.info('taskpool: this is 2nd print!'); - return ++num; - } - - static syncSet2(num: number): number { - // 模拟同步步骤1 - console.info('taskpool: this is syncSet2 1st print!'); - // 模拟同步步骤2 - console.info('taskpool: this is syncSet2 2nd print!'); - return ++num; - } +/* + * Copyright (c) 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. + */ + +'use shared' + +@Sendable +export default class Handle { + private static instance: Handle = new Handle; + static getInstance(): Handle { + // 返回单例对象 + return Handle.instance; + } + + static syncGet(): void { + // 同步Get方法 + } + + static syncSet(num: number): number { + // 模拟同步步骤1 + console.info('taskpool: this is 1st print!'); + // 模拟同步步骤2 + console.info('taskpool: this is 2nd print!'); + return ++num; + } + + static syncSet2(num: number): number { + // 模拟同步步骤1 + console.info('taskpool: this is syncSet2 1st print!'); + // 模拟同步步骤2 + console.info('taskpool: this is syncSet2 2nd print!'); + return ++num; + } } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/arkts-sendable-module.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/arkts-sendable-module.ets similarity index 90% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/arkts-sendable-module.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/arkts-sendable-module.ets index 4d0ec2cae0..122a108d40 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/arkts-sendable-module.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/arkts-sendable-module.ets @@ -1,51 +1,51 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -import { taskpool } from '@kit.ArkTS'; -import { SingletonA } from './sharedModule'; - -let sig: SingletonA = SingletonA.getInstance(); - -@Concurrent -async function test2(sig: SingletonA) { - console.info('sendable: taskpool count is:' + await sig.getCount()); - let n = Date.now(); - // 等待1000us,模拟实际业务 - while (Date.now() - n < 1000) { - console.info('this is test2 func'); - } -} - -async function mainThreadTest() { - // 主线程调用单例sig.incrementCount()、fetchCount(); - sig.increaseCount(); - console.info('sendable: main thread count is:' + await sig.getCount()); -} - -async function childThreadTest() { - let task = new taskpool.Task(test2, sig); - await taskpool.execute(task); -} - -export async function sendableModuleTest(): Promise { - await mainThreadTest(); - childThreadTest(); - if(await sig.getCount() == 1) { - console.info('arkts-utils:: SendableModuleTest success'); - return 'SendableModuleTest Succeed'; - } else { - return 'SendableModuleTest Failed'; - } +/* + * Copyright (c) 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. + */ + +import { taskpool } from '@kit.ArkTS'; +import { SingletonA } from './sharedModule'; + +let sig: SingletonA = SingletonA.getInstance(); + +@Concurrent +async function test2(sig: SingletonA) { + console.info('sendable: taskpool count is:' + await sig.getCount()); + let n = Date.now(); + // 等待1000us,模拟实际业务 + while (Date.now() - n < 1000) { + console.info('this is test2 func'); + } +} + +async function mainThreadTest() { + // 主线程调用单例sig.incrementCount()、fetchCount(); + sig.increaseCount(); + console.info('sendable: main thread count is:' + await sig.getCount()); +} + +async function childThreadTest() { + let task = new taskpool.Task(test2, sig); + await taskpool.execute(task); +} + +export async function sendableModuleTest(): Promise { + await mainThreadTest(); + childThreadTest(); + if(await sig.getCount() == 1) { + console.info('ArkTs-SimpleDemo:: SendableModuleTest success'); + return 'SendableModuleTest Succeed'; + } else { + return 'SendableModuleTest Failed'; + } } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/async-concurrency-overview.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/async-concurrency-overview.ets similarity index 92% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/async-concurrency-overview.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/async-concurrency-overview.ets index a31eed2a47..a2b874f8e5 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/async-concurrency-overview.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/async-concurrency-overview.ets @@ -1,28 +1,28 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -export async function asyncConcurrencyTest(): Promise { - const result: string = await new Promise((resolve: Function) => { - setTimeout(() => { - resolve('Hello, world!'); - }, 3000); - }); - console.info(result); // 输出: Hello, world! - if (result == 'Hello, world!') { - return 'AsyncConcurrencyTest Succeed'; - } else { - return 'AsyncConcurrencyTest Failed'; - } +/* + * Copyright (c) 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. + */ + +export async function asyncConcurrencyTest(): Promise { + const result: string = await new Promise((resolve: Function) => { + setTimeout(() => { + resolve('Hello, world!'); + }, 3000); + }); + console.info(result); // 输出: Hello, world! + if (result == 'Hello, world!') { + return 'AsyncConcurrencyTest Succeed'; + } else { + return 'AsyncConcurrencyTest Failed'; + } } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/cpu-intensive-task.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/cpu-intensive-task.ets similarity index 95% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/cpu-intensive-task.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/cpu-intensive-task.ets index 96e497782f..7610685705 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/cpu-intensive-task.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/cpu-intensive-task.ets @@ -1,54 +1,54 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -import { taskpool } from '@kit.ArkTS'; - -@Concurrent -function imageProcessing(dataSlice: ArrayBuffer): ArrayBuffer { - // 步骤1: 具体的图像处理操作及其他耗时操作 - return dataSlice; -} - -function histogramStatistic(pixelBuffer: ArrayBuffer): void { - // 步骤2: 分成三段并发调度 - let number: number = pixelBuffer.byteLength / 3; - let buffer1: ArrayBuffer = pixelBuffer.slice(0, number); - let buffer2: ArrayBuffer = pixelBuffer.slice(number, number * 2); - let buffer3: ArrayBuffer = pixelBuffer.slice(number * 2); - - let group: taskpool.TaskGroup = new taskpool.TaskGroup(); - group.addTask(imageProcessing, buffer1); - group.addTask(imageProcessing, buffer2); - group.addTask(imageProcessing, buffer3); - - taskpool.execute(group, taskpool.Priority.HIGH).then((ret: Object) => { - // 步骤3: 结果数组汇总处理 - }) -} - -export async function imagePreprocessing(): Promise { - let context = getContext(); - // 获取resourceManager资源管理器 - const resourceMgr = context.resourceManager; - - const fileData = await resourceMgr.getRawFileContent('startIcon.png'); - // 获取图片的ArrayBuffer - const buffer = fileData.buffer; - - const arrayBuffer = new ArrayBuffer(buffer.byteLength); - new Uint8Array(arrayBuffer).set(new Uint8Array(buffer)); - histogramStatistic(arrayBuffer); - return 'imagePreprocessing success'; -} +/* + * Copyright (c) 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. + */ + +import { taskpool } from '@kit.ArkTS'; + +@Concurrent +function imageProcessing(dataSlice: ArrayBuffer): ArrayBuffer { + // 步骤1: 具体的图像处理操作及其他耗时操作 + return dataSlice; +} + +function histogramStatistic(pixelBuffer: ArrayBuffer): void { + // 步骤2: 分成三段并发调度 + let number: number = pixelBuffer.byteLength / 3; + let buffer1: ArrayBuffer = pixelBuffer.slice(0, number); + let buffer2: ArrayBuffer = pixelBuffer.slice(number, number * 2); + let buffer3: ArrayBuffer = pixelBuffer.slice(number * 2); + + let group: taskpool.TaskGroup = new taskpool.TaskGroup(); + group.addTask(imageProcessing, buffer1); + group.addTask(imageProcessing, buffer2); + group.addTask(imageProcessing, buffer3); + + taskpool.execute(group, taskpool.Priority.HIGH).then((ret: Object) => { + // 步骤3: 结果数组汇总处理 + }) +} + +export async function imagePreprocessing(): Promise { + let context = getContext(); + // 获取resourceManager资源管理器 + const resourceMgr = context.resourceManager; + + const fileData = await resourceMgr.getRawFileContent('startIcon.png'); + // 获取图片的ArrayBuffer + const buffer = fileData.buffer; + + const arrayBuffer = new ArrayBuffer(buffer.byteLength); + new Uint8Array(arrayBuffer).set(new Uint8Array(buffer)); + histogramStatistic(arrayBuffer); + return 'imagePreprocessing success'; +} diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/file-write.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/file-write.ets similarity index 93% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/file-write.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/file-write.ets index ca4bc84d41..6d07bd8799 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/file-write.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/file-write.ets @@ -1,24 +1,24 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -import { fileIo } from '@kit.CoreFileKit'; - -// 定义并发函数,内部密集调用I/O能力 -// 写入文件的实现 -export async function write(data: string, filePath: string): Promise { - let file: fileIo.File = await fileIo.open(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); - await fileIo.write(file.fd, data); - fileIo.close(file); -} +/* + * Copyright (c) 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. + */ + +import { fileIo } from '@kit.CoreFileKit'; + +// 定义并发函数,内部密集调用I/O能力 +// 写入文件的实现 +export async function write(data: string, filePath: string): Promise { + let file: fileIo.File = await fileIo.open(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); + await fileIo.write(file.fd, data); + fileIo.close(file); +} diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/io-intensive-task.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/io-intensive-task.ets similarity index 80% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/io-intensive-task.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/io-intensive-task.ets index 06bfb30a9e..1546387b21 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/io-intensive-task.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/io-intensive-task.ets @@ -1,50 +1,50 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -import { write } from './file-write'; -import { BusinessError } from '@kit.BasicServicesKit'; -import { taskpool } from '@kit.ArkTS'; -import { fileIo } from '@kit.CoreFileKit'; - -@Concurrent -async function concurrentTest(fileList: string[]): Promise { - // 循环写文件操作 - for (let i: number = 0; i < fileList.length; i++) { - console.info('arkts-utils:: this filepath is:' + fileList[i]); - write('Hello World!', fileList[i]).then(() => { - console.info(`arkts-utils:: Succeeded in writing the file. FileList: ${fileList[i]}`); - }).catch((err: BusinessError) => { - console.error(`arkts-utils:: Failed to write the file. Code is ${err.code}, message is ${err.message}`); - return false; - }) - } - return true; -} - -export async function ioTaskTest(): Promise { - let context = getContext(); - const filePath1 = context.filesDir + '/111.txt'; - const filePath2 = context.filesDir + '/222.txt'; - - // 使用TaskPool执行包含密集I/O的并发函数 - // 数组较大时,I/O密集型任务任务分发也会抢占主线程,需要使用多线程能力 - await taskpool.execute(concurrentTest, [filePath1, filePath2]); - let result = fileIo.access(filePath1, fileIo.AccessModeType.EXIST); - - if (!result) { - return 'IoTaskTest Failed'; - } - return 'IoTaskTest Succeed'; +/* + * Copyright (c) 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. + */ + +import { write } from './file-write'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { taskpool } from '@kit.ArkTS'; +import { fileIo } from '@kit.CoreFileKit'; + +@Concurrent +async function concurrentTest(fileList: string[]): Promise { + // 循环写文件操作 + for (let i: number = 0; i < fileList.length; i++) { + console.info('ArkTs-SimpleDemo:: this filepath is:' + fileList[i]); + write('Hello World!', fileList[i]).then(() => { + console.info(`ArkTs-SimpleDemo:: Succeeded in writing the file. FileList: ${fileList[i]}`); + }).catch((err: BusinessError) => { + console.error(`ArkTs-SimpleDemo:: Failed to write the file. Code is ${err.code}, message is ${err.message}`); + return false; + }) + } + return true; +} + +export async function ioTaskTest(): Promise { + let context = getContext(); + const filePath1 = context.filesDir + '/111.txt'; + const filePath2 = context.filesDir + '/222.txt'; + + // 使用TaskPool执行包含密集I/O的并发函数 + // 数组较大时,I/O密集型任务任务分发也会抢占主线程,需要使用多线程能力 + await taskpool.execute(concurrentTest, [filePath1, filePath2]); + let result = fileIo.access(filePath1, fileIo.AccessModeType.EXIST); + + if (!result) { + return 'IoTaskTest Failed'; + } + return 'IoTaskTest Succeed'; } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/manager.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/manager.ets similarity index 75% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/manager.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/manager.ets index 2fb0518149..c0ad16e011 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/manager.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/manager.ets @@ -1,55 +1,55 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -import { sendableModuleTest } from './arkts-sendable-module'; -import { imagePreprocessing } from './cpu-intensive-task'; -import { ioTaskTest } from './io-intensive-task'; -import { singleIoTest } from './single-io-development'; -import { syncTaskTest } from './sync-task-development'; -import { asyncConcurrencyTest } from './async-concurrency-overview'; - -type TestFunction = (() => string | Promise); -type TestList = [name: string, func: TestFunction][]; -let allTests: TestList = [ - ['arkts-utils/arkts-sendable-module', sendableModuleTest], - ['arkts-utils/cpu-intensive-task-development', imagePreprocessing], - ['arkts-utils/io-intensive-task-development', ioTaskTest], - ['arkts-utils/single-io-development', singleIoTest], - ['arkts-utils/sync-task-development', syncTaskTest], - ['arkts-utils/async-concurrency-overview', asyncConcurrencyTest], -]; - -export function listAllTests(): TestList { - return allTests; -} - -let currentTest: string = allTests[0][0]; -export function selectTest(index: number, value: string) { - currentTest = value; -} - -export function startTest(): Promise { - let item = allTests.find((v) => { - return v[0] == currentTest; - }); - if(item != undefined) { - return new Promise((res) => { - let v = item![1](); - res(v); - }) - } else { - return Promise.resolve('Error! Selected test is not found.'); - } +/* + * Copyright (c) 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. + */ + +import { sendableModuleTest } from './arkts-sendable-module'; +import { imagePreprocessing } from './cpu-intensive-task'; +import { ioTaskTest } from './io-intensive-task'; +import { singleIoTest } from './single-io-development'; +import { syncTaskTest } from './sync-task-development'; +import { asyncConcurrencyTest } from './async-concurrency-overview'; + +type TestFunction = (() => string | Promise); +type TestList = [name: string, func: TestFunction][]; +let allTests: TestList = [ + ['ArkTs-SimpleDemo/arkts-sendable-module', sendableModuleTest], + ['ArkTs-SimpleDemo/cpu-intensive-task-development', imagePreprocessing], + ['ArkTs-SimpleDemo/io-intensive-task-development', ioTaskTest], + ['ArkTs-SimpleDemo/single-io-development', singleIoTest], + ['ArkTs-SimpleDemo/sync-task-development', syncTaskTest], + ['ArkTs-SimpleDemo/async-concurrency-overview', asyncConcurrencyTest], +]; + +export function listAllTests(): TestList { + return allTests; +} + +let currentTest: string = allTests[0][0]; +export function selectTest(index: number, value: string) { + currentTest = value; +} + +export function startTest(): Promise { + let item = allTests.find((v) => { + return v[0] == currentTest; + }); + if(item != undefined) { + return new Promise((res) => { + let v = item![1](); + res(v); + }) + } else { + return Promise.resolve('Error! Selected test is not found.'); + } } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/sharedModule.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/sharedModule.ets similarity index 93% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/sharedModule.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/sharedModule.ets index 2799d3e77d..caf4986823 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/sharedModule.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/sharedModule.ets @@ -1,46 +1,46 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -// 共享模块sharedModule.ets -import { ArkTSUtils } from '@kit.ArkTS'; - -// 声明当前模块为共享模块,只能导出可Sendable数据 -'use shared' - -export { SingletonA } - -// 共享模块,SingletonA全局唯一 -@Sendable -class SingletonA { - private static instance: SingletonA = new SingletonA; - private count_: number = 0; - private lock_: ArkTSUtils.locks.AsyncLock = new ArkTSUtils.locks.AsyncLock(); - - public static getInstance(): SingletonA { - return SingletonA.instance; - } - - public async getCount(): Promise { - return this.lock_.lockAsync(() => { - return this.count_; - }) - } - - public async increaseCount() { - await this.lock_.lockAsync(() => { - this.count_++; - }) - } +/* + * Copyright (c) 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. + */ + +// 共享模块sharedModule.ets +import { ArkTSUtils } from '@kit.ArkTS'; + +// 声明当前模块为共享模块,只能导出可Sendable数据 +'use shared' + +export { SingletonA } + +// 共享模块,SingletonA全局唯一 +@Sendable +class SingletonA { + private static instance: SingletonA = new SingletonA; + private count_: number = 0; + private lock_: ArkTSUtils.locks.AsyncLock = new ArkTSUtils.locks.AsyncLock(); + + public static getInstance(): SingletonA { + return SingletonA.instance; + } + + public async getCount(): Promise { + return this.lock_.lockAsync(() => { + return this.count_; + }) + } + + public async increaseCount() { + await this.lock_.lockAsync(() => { + this.count_++; + }) + } } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/single-io-development.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/single-io-development.ets similarity index 95% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/single-io-development.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/single-io-development.ets index e62d0f411a..e1b8b15fd8 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/single-io-development.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/single-io-development.ets @@ -1,45 +1,45 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -import { fileIo } from '@kit.CoreFileKit'; -import { BusinessError } from '@ohos.base'; -import { common } from '@kit.AbilityKit'; - -async function write(data: string, file: fileIo.File): Promise { - fileIo.write(file.fd, data).then((writeLen: number) => { - console.info('write data length is: ' + writeLen); - }).catch((err: BusinessError) => { - console.error(`Failed to write data. Code is ${err.code}, message is ${err.message}`); - }) -} - -export async function singleIoTest(): Promise { - let context = getContext() as common.UIAbilityContext; - let filePath: string = context.filesDir + '/ioTest.txt'; // 应用文件路径 - let file: fileIo.File = await fileIo.open(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); - write('Hello World!', file).then(() => { - console.info('Succeeded in writing data.'); - fileIo.close(file); - }).catch((err: BusinessError) => { - console.error(`Failed to write data. Code is ${err.code}, message is ${err.message}`); - fileIo.close(file); - }) - - let result = await fileIo.access(filePath, fileIo.AccessModeType.EXIST); - if (!result) { - return 'SingleIoTest Failed'; - } - return 'SingleIoTest Succeed'; +/* + * Copyright (c) 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. + */ + +import { fileIo } from '@kit.CoreFileKit'; +import { BusinessError } from '@ohos.base'; +import { common } from '@kit.AbilityKit'; + +async function write(data: string, file: fileIo.File): Promise { + fileIo.write(file.fd, data).then((writeLen: number) => { + console.info('write data length is: ' + writeLen); + }).catch((err: BusinessError) => { + console.error(`Failed to write data. Code is ${err.code}, message is ${err.message}`); + }) +} + +export async function singleIoTest(): Promise { + let context = getContext() as common.UIAbilityContext; + let filePath: string = context.filesDir + '/ioTest.txt'; // 应用文件路径 + let file: fileIo.File = await fileIo.open(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); + write('Hello World!', file).then(() => { + console.info('Succeeded in writing data.'); + fileIo.close(file); + }).catch((err: BusinessError) => { + console.error(`Failed to write data. Code is ${err.code}, message is ${err.message}`); + fileIo.close(file); + }) + + let result = await fileIo.access(filePath, fileIo.AccessModeType.EXIST); + if (!result) { + return 'SingleIoTest Failed'; + } + return 'SingleIoTest Succeed'; } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/sync-task-development.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/sync-task-development.ets similarity index 95% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/sync-task-development.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/sync-task-development.ets index 1326a3fe80..cabc937bae 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/managers/sync-task-development.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/managers/sync-task-development.ets @@ -1,56 +1,56 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -import { taskpool } from '@kit.ArkTS'; -import Handle from './Handle'; // 返回静态句柄 - -// 步骤1: 定义并发函数,内部调用同步方法 -@Concurrent -function func(num: number): number { - // 调用静态类对象中实现的同步等待调用 - // 先调用syncSet方法并将其结果作为syncSet2的参数,模拟同步调用逻辑 - let tmpNum: number = Handle.syncSet(num); - console.info('this is Child_Thread'); - return Handle.syncSet2(tmpNum); -} - -// 步骤2: 创建任务并执行 -async function asyncGet(): Promise { - // 创建task、task2并传入函数func - let task: taskpool.Task = new taskpool.Task(func, 1); - let task2: taskpool.Task = new taskpool.Task(func, 2); - // 执行task、task2任务,await保证其同步执行 - let res: number = await taskpool.execute(task) as number; - let res2: number = await taskpool.execute(task2) as number; - // 打印任务结果 - console.info('taskpool: task res is: ' + res); - console.info('taskpool: task res2 is: ' + res2); - if (res == 3 && res2 == 4) { - return true; - } else { - return false; - } -} - -export async function syncTaskTest(): Promise { - let num: number = Handle.syncSet(100); - console.info('this is Main_Thread!'); - let res = await asyncGet(); - if(res) { - return 'syncTaskTest Succeed'; - } else { - return 'syncTaskTest Failed'; - } +/* + * Copyright (c) 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. + */ + +import { taskpool } from '@kit.ArkTS'; +import Handle from './Handle'; // 返回静态句柄 + +// 步骤1: 定义并发函数,内部调用同步方法 +@Concurrent +function func(num: number): number { + // 调用静态类对象中实现的同步等待调用 + // 先调用syncSet方法并将其结果作为syncSet2的参数,模拟同步调用逻辑 + let tmpNum: number = Handle.syncSet(num); + console.info('this is Child_Thread'); + return Handle.syncSet2(tmpNum); +} + +// 步骤2: 创建任务并执行 +async function asyncGet(): Promise { + // 创建task、task2并传入函数func + let task: taskpool.Task = new taskpool.Task(func, 1); + let task2: taskpool.Task = new taskpool.Task(func, 2); + // 执行task、task2任务,await保证其同步执行 + let res: number = await taskpool.execute(task) as number; + let res2: number = await taskpool.execute(task2) as number; + // 打印任务结果 + console.info('taskpool: task res is: ' + res); + console.info('taskpool: task res2 is: ' + res2); + if (res == 3 && res2 == 4) { + return true; + } else { + return false; + } +} + +export async function syncTaskTest(): Promise { + let num: number = Handle.syncSet(100); + console.info('this is Main_Thread!'); + let res = await asyncGet(); + if(res) { + return 'syncTaskTest Succeed'; + } else { + return 'syncTaskTest Failed'; + } } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/pages/Index.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/pages/Index.ets similarity index 92% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/pages/Index.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/pages/Index.ets index 0c157a718b..ba7da86e88 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/ets/pages/Index.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/ets/pages/Index.ets @@ -1,65 +1,65 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -import { listAllTests, selectTest, startTest} from '../managers/manager'; -import promptAction from '@ohos.promptAction'; - -@Entry -@Component -struct Index { - @State message: string = 'Please run a test...'; - - build() { - Row() { - Navigation() { - Column({space: 16}) { - Select(listAllTests().map((v) => { - return { value: v[0] } - })) - .id("selectTest") - .value("Choose the test option") - .onSelect(selectTest) - .width('88%') - .height('12vp') - .optionWidth("414vp") - Button("Execute this Test") - .onClick(() => { - this.message = ''; - let res = startTest(); - res.then((v) => { - promptAction.showToast({ - message: v - }); - }).catch((e: Error) => { - promptAction.showToast({ - message: e.message - }); - }); - }) - .id("execute") - .position({ x: "6%", y: "90%" }) - .width('88%') - .fontSize(16) - .height('40') - } - .width("100%") - .height("100%") - }.title("ArkTS-UtilsDocsSample") - - } - .width("100%") - .height("100%") - } +/* + * Copyright (c) 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. + */ + +import { listAllTests, selectTest, startTest} from '../managers/manager'; +import promptAction from '@ohos.promptAction'; + +@Entry +@Component +struct Index { + @State message: string = 'Please run a test...'; + + build() { + Row() { + Navigation() { + Column({space: 16}) { + Select(listAllTests().map((v) => { + return { value: v[0] } + })) + .id("selectTest") + .value("Choose the test option") + .onSelect(selectTest) + .width('88%') + .height('12vp') + .optionWidth("414vp") + Button("Execute this Test") + .onClick(() => { + this.message = ''; + let res = startTest(); + res.then((v) => { + promptAction.showToast({ + message: v + }); + }).catch((e: Error) => { + promptAction.showToast({ + message: e.message + }); + }); + }) + .id("execute") + .position({ x: "6%", y: "90%" }) + .width('88%') + .fontSize(16) + .height('40') + } + .width("100%") + .height("100%") + }.title("ArkTS-SimpleDemo") + + } + .width("100%") + .height("100%") + } } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/module.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/module.json5 similarity index 93% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/module.json5 rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/module.json5 index a39fed0b3a..281a0ef308 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/module.json5 +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/module.json5 @@ -1,52 +1,52 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -{ - "module": { - "name": "entry", - "type": "entry", - "description": "$string:module_desc", - "mainElement": "EntryAbility", - "deviceTypes": [ - "default", - "tablet" - ], - "deliveryWithInstall": true, - "installationFree": false, - "pages": "$profile:main_pages", - "abilities": [ - { - "name": "EntryAbility", - "srcEntry": "./ets/entryability/EntryAbility.ets", - "description": "$string:EntryAbility_desc", - "icon": "$media:icon", - "label": "$string:EntryAbility_label", - "startWindowIcon": "$media:startIcon", - "startWindowBackground": "$color:start_window_background", - "exported": true, - "skills": [ - { - "entities": [ - "entity.system.home" - ], - "actions": [ - "action.system.home" - ] - } - ] - } - ] - } +/* + * Copyright (c) 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:icon", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/base/element/color.json b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/base/element/color.json similarity index 93% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/base/element/color.json rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/base/element/color.json index 3c712962da..d66f9a7d4a 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/base/element/color.json +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/base/element/color.json @@ -1,8 +1,8 @@ -{ - "color": [ - { - "name": "start_window_background", - "value": "#FFFFFF" - } - ] +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/en_US/element/string.json b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/base/element/string.json similarity index 82% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/en_US/element/string.json rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/base/element/string.json index b95397798b..120c675619 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/en_US/element/string.json +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/base/element/string.json @@ -1,16 +1,16 @@ -{ - "string": [ - { - "name": "module_desc", - "value": "module description" - }, - { - "name": "EntryAbility_desc", - "value": "description" - }, - { - "name": "EntryAbility_label", - "value": "ArkTSUtilsDocsSample" - } - ] +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "ArkTsSimpleDemo" + } + ] } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/base/media/icon.png b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/base/media/icon.png similarity index 100% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/base/media/icon.png rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/base/media/icon.png diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/base/media/startIcon.png b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/base/media/startIcon.png similarity index 100% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/base/media/startIcon.png rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/base/media/startIcon.png diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/base/profile/main_pages.json b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/base/profile/main_pages.json similarity index 88% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/base/profile/main_pages.json rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/base/profile/main_pages.json index 1898d94f58..14bbd62cb9 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/base/profile/main_pages.json +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/base/profile/main_pages.json @@ -1,5 +1,5 @@ -{ - "src": [ - "pages/Index" - ] -} +{ + "src": [ + "pages/Index" + ] +} diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/base/element/string.json b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/en_US/element/string.json similarity index 82% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/base/element/string.json rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/en_US/element/string.json index b95397798b..120c675619 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/base/element/string.json +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/en_US/element/string.json @@ -1,16 +1,16 @@ -{ - "string": [ - { - "name": "module_desc", - "value": "module description" - }, - { - "name": "EntryAbility_desc", - "value": "description" - }, - { - "name": "EntryAbility_label", - "value": "ArkTSUtilsDocsSample" - } - ] +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "ArkTsSimpleDemo" + } + ] } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/rawfile/startIcon.png b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/rawfile/startIcon.png similarity index 100% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/rawfile/startIcon.png rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/rawfile/startIcon.png diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/zh_CN/element/string.json b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/zh_CN/element/string.json similarity index 81% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/zh_CN/element/string.json rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/zh_CN/element/string.json index 3976dc3431..f750a7bb4a 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/main/resources/zh_CN/element/string.json +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/main/resources/zh_CN/element/string.json @@ -1,16 +1,16 @@ -{ - "string": [ - { - "name": "module_desc", - "value": "模块描述" - }, - { - "name": "EntryAbility_desc", - "value": "description" - }, - { - "name": "EntryAbility_label", - "value": "ArkTSUtilsDocsSample" - } - ] +{ + "string": [ + { + "name": "module_desc", + "value": "模块描述" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "ArkTsSimpleDemo" + } + ] } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/mock/mock-config.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/mock/mock-config.json5 similarity index 90% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/mock/mock-config.json5 rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/mock/mock-config.json5 index 26ed9f53bc..aba5ed077b 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/mock/mock-config.json5 +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/mock/mock-config.json5 @@ -1,17 +1,17 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -{ +/* + * Copyright (c) 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. + */ + +{ } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/ets/test/Ability.test.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/ets/test/Ability.test.ets similarity index 94% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/ets/test/Ability.test.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/ets/test/Ability.test.ets index 358aa98c3d..330f170e11 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/ets/test/Ability.test.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/ets/test/Ability.test.ets @@ -1,152 +1,152 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -import { hilog } from '@kit.PerformanceAnalysisKit'; -import { describe, it, expect } from '@ohos/hypium'; -import AbilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry'; -import { sendableModuleTest } from '../../../main/ets/managers/arkts-sendable-module'; -import { asyncConcurrencyTest } from '../../../main/ets/managers/async-concurrency-overview'; -import { imagePreprocessing } from '../../../main/ets/managers/cpu-intensive-task'; -import { ioTaskTest } from '../../../main/ets/managers/io-intensive-task'; -import { singleIoTest } from '../../../main/ets/managers/single-io-development'; -import { syncTaskTest } from '../../../main/ets/managers/sync-task-development'; - -const TAG = '[Sample_ArkTSUtils]'; -const DOMAIN = 0xF811; -const BUNDLE = 'ArkTsUtils_'; - -export default function abilityTest() { - describe('abilityTest', () => { - /** - * @tc.number : ArkTS_UtilsTest_001 - * @tc.name : Start ability - * @tc.desc : Start an application - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('ArkTS_UtilsTest_001', 0, async (done: Function) => { - hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_001 begin'); - let abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); - try { - await abilityDelegator.startAbility({ - bundleName: "com.samples.arktsutilsdocmodule", - abilityName: "EntryAbility" - }); - done(); - } catch (err) { - expect(err.code).assertEqual(0); - done(); - } - hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_001 end'); - }) - - /** - * @tc.number : ArkTS_UtilsTest_002 - * @tc.name : Execute SendableTest - * @tc.desc : execute SendableTest - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('ArkTS_UtilsTest_002', 0, async (done: Function) => { - hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_002 begin'); - let str = await sendableModuleTest(); - expect(str).assertEqual("SendableModuleTest Succeed"); - done(); - hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_002 end'); - }) - - /** - * @tc.number : ArkTS_UtilsTest_003 - * @tc.name : Execute AsyncConcurrencyTest - * @tc.desc : execute AsyncConcurrencyTest - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('ArkTS_UtilsTest_003', 0, async (done: Function) => { - hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_003 begin'); - let str = await asyncConcurrencyTest(); - expect(str).assertEqual("AsyncConcurrencyTest Succeed"); - done(); - hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_003 end'); - }) - - /** - * @tc.number : ArkTS_UtilsTest_004 - * @tc.name : Execute imagePreprocessingTest - * @tc.desc : execute imagePreprocessingTest - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('ArkTS_UtilsTest_004', 0, async (done: Function) => { - hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_004 begin'); - let str = await imagePreprocessing(); - expect(str).assertEqual("imagePreprocessing success"); - done(); - hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_004 end'); - }) - - /** - * @tc.number : ArkTS_UtilsTest_005 - * @tc.name : Execute IoTaskTest - * @tc.desc : execute IoTaskTest - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('ArkTS_UtilsTest_005', 0, async (done: Function) => { - hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_005 begin'); - let str = await ioTaskTest(); - expect(str).assertEqual("IoTaskTest Succeed"); - done(); - hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_005 end'); - }) - - /** - * @tc.number : ArkTS_UtilsTest_006 - * @tc.name : Execute SingleIoTest - * @tc.desc : execute SingleIoTest - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('ArkTS_UtilsTest_006', 0, async (done: Function) => { - hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_006 begin'); - let str = await singleIoTest(); - expect(str).assertEqual("SingleIoTest Succeed"); - done(); - hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_006 end'); - }) - - /** - * @tc.number : ArkTS_UtilsTest_007 - * @tc.name : Execute syncTaskTest - * @tc.desc : execute syncTaskTest - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('ArkTS_UtilsTest_007', 0, async (done: Function) => { - hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_007 begin'); - let str = await syncTaskTest(); - expect(str).assertEqual("syncTaskTest Succeed"); - done(); - hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_007 end'); - }) - }) +/* + * Copyright (c) 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, it, expect } from '@ohos/hypium'; +import AbilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry'; +import { sendableModuleTest } from '../../../main/ets/managers/arkts-sendable-module'; +import { asyncConcurrencyTest } from '../../../main/ets/managers/async-concurrency-overview'; +import { imagePreprocessing } from '../../../main/ets/managers/cpu-intensive-task'; +import { ioTaskTest } from '../../../main/ets/managers/io-intensive-task'; +import { singleIoTest } from '../../../main/ets/managers/single-io-development'; +import { syncTaskTest } from '../../../main/ets/managers/sync-task-development'; + +const TAG = '[Sample_ArkTsSimpleDemo]'; +const DOMAIN = 0xF811; +const BUNDLE = 'ArkTsSimpleDemo_'; + +export default function abilityTest() { + describe('abilityTest', () => { + /** + * @tc.number : ArkTS_UtilsTest_001 + * @tc.name : Start ability + * @tc.desc : Start an application + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('ArkTS_UtilsTest_001', 0, async (done: Function) => { + hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_001 begin'); + let abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); + try { + await abilityDelegator.startAbility({ + bundleName: "com.samples.arktssimpledemo", + abilityName: "EntryAbility" + }); + done(); + } catch (err) { + expect(err.code).assertEqual(0); + done(); + } + hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_001 end'); + }) + + /** + * @tc.number : ArkTS_UtilsTest_002 + * @tc.name : Execute SendableTest + * @tc.desc : execute SendableTest + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('ArkTS_UtilsTest_002', 0, async (done: Function) => { + hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_002 begin'); + let str = await sendableModuleTest(); + expect(str).assertEqual("SendableModuleTest Succeed"); + done(); + hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_002 end'); + }) + + /** + * @tc.number : ArkTS_UtilsTest_003 + * @tc.name : Execute AsyncConcurrencyTest + * @tc.desc : execute AsyncConcurrencyTest + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('ArkTS_UtilsTest_003', 0, async (done: Function) => { + hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_003 begin'); + let str = await asyncConcurrencyTest(); + expect(str).assertEqual("AsyncConcurrencyTest Succeed"); + done(); + hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_003 end'); + }) + + /** + * @tc.number : ArkTS_UtilsTest_004 + * @tc.name : Execute imagePreprocessingTest + * @tc.desc : execute imagePreprocessingTest + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('ArkTS_UtilsTest_004', 0, async (done: Function) => { + hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_004 begin'); + let str = await imagePreprocessing(); + expect(str).assertEqual("imagePreprocessing success"); + done(); + hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_004 end'); + }) + + /** + * @tc.number : ArkTS_UtilsTest_005 + * @tc.name : Execute IoTaskTest + * @tc.desc : execute IoTaskTest + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('ArkTS_UtilsTest_005', 0, async (done: Function) => { + hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_005 begin'); + let str = await ioTaskTest(); + expect(str).assertEqual("IoTaskTest Succeed"); + done(); + hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_005 end'); + }) + + /** + * @tc.number : ArkTS_UtilsTest_006 + * @tc.name : Execute SingleIoTest + * @tc.desc : execute SingleIoTest + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('ArkTS_UtilsTest_006', 0, async (done: Function) => { + hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_006 begin'); + let str = await singleIoTest(); + expect(str).assertEqual("SingleIoTest Succeed"); + done(); + hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_006 end'); + }) + + /** + * @tc.number : ArkTS_UtilsTest_007 + * @tc.name : Execute syncTaskTest + * @tc.desc : execute syncTaskTest + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('ArkTS_UtilsTest_007', 0, async (done: Function) => { + hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_007 begin'); + let str = await syncTaskTest(); + expect(str).assertEqual("syncTaskTest Succeed"); + done(); + hilog.info(DOMAIN, TAG, BUNDLE + 'ArkTS_UtilsTest_007 end'); + }) + }) } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/ets/test/List.test.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/ets/test/List.test.ets similarity index 91% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/ets/test/List.test.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/ets/test/List.test.ets index e909c66ab6..a10a79ed1d 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/ets/test/List.test.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/ets/test/List.test.ets @@ -1,20 +1,20 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -import abilityTest from './Ability.test'; - -export default function testsuite() { - abilityTest(); +/* + * Copyright (c) 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. + */ + +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/ets/testability/TestAbility.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/ets/testability/TestAbility.ets similarity index 96% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/ets/testability/TestAbility.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/ets/testability/TestAbility.ets index 7a25191b9d..080c6151ab 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/ets/testability/TestAbility.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/ets/testability/TestAbility.ets @@ -1,63 +1,63 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; -import { abilityDelegatorRegistry } from '@kit.TestKit'; -import { hilog } from '@kit.PerformanceAnalysisKit'; -import { window } from '@kit.ArkUI'; -import { Hypium } from '@ohos/hypium'; -import testsuite from '../test/List.test'; - -export default class TestAbility extends UIAbility { - onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { - hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onCreate'); - hilog.info(0x0000, 'testTag', '%{public}s', 'want param:' + JSON.stringify(want) ?? ''); - hilog.info(0x0000, 'testTag', '%{public}s', 'launchParam:' + JSON.stringify(launchParam) ?? ''); - let abilityDelegator: abilityDelegatorRegistry.AbilityDelegator; - abilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); - let abilityDelegatorArguments: abilityDelegatorRegistry.AbilityDelegatorArgs; - abilityDelegatorArguments = abilityDelegatorRegistry.getArguments(); - hilog.info(0x0000, 'testTag', '%{public}s', 'start run testcase!!!'); - Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite); - } - - onDestroy() { - hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onDestroy'); - } - - onWindowStageCreate(windowStage: window.WindowStage) { - hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onWindowStageCreate'); - windowStage.loadContent('testability/pages/Index', (err, data) => { - if (err.code) { - hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); - return; - } - hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', - JSON.stringify(data) ?? ''); - }); - } - - onWindowStageDestroy() { - hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onWindowStageDestroy'); - } - - onForeground() { - hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onForeground'); - } - - onBackground() { - hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onBackground'); - } +/* + * Copyright (c) 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. + */ + +import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { abilityDelegatorRegistry } from '@kit.TestKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { window } from '@kit.ArkUI'; +import { Hypium } from '@ohos/hypium'; +import testsuite from '../test/List.test'; + +export default class TestAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onCreate'); + hilog.info(0x0000, 'testTag', '%{public}s', 'want param:' + JSON.stringify(want) ?? ''); + hilog.info(0x0000, 'testTag', '%{public}s', 'launchParam:' + JSON.stringify(launchParam) ?? ''); + let abilityDelegator: abilityDelegatorRegistry.AbilityDelegator; + abilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); + let abilityDelegatorArguments: abilityDelegatorRegistry.AbilityDelegatorArgs; + abilityDelegatorArguments = abilityDelegatorRegistry.getArguments(); + hilog.info(0x0000, 'testTag', '%{public}s', 'start run testcase!!!'); + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite); + } + + onDestroy() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage) { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onWindowStageCreate'); + windowStage.loadContent('testability/pages/Index', (err, data) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', + JSON.stringify(data) ?? ''); + }); + } + + onWindowStageDestroy() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onWindowStageDestroy'); + } + + onForeground() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onForeground'); + } + + onBackground() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onBackground'); + } } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/ets/testability/pages/Index.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/ets/testability/pages/Index.ets similarity index 91% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/ets/testability/pages/Index.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/ets/testability/pages/Index.ets index 85a5c3d422..712b120b30 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/ets/testability/pages/Index.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/ets/testability/pages/Index.ets @@ -1,32 +1,32 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -@Entry -@Component -struct Index { - @State message: string = 'Hello World'; - - build() { - Row() { - Column() { - Text(this.message) - .fontSize(50) - .fontWeight(FontWeight.Bold) - } - .width('100%') - } - .height('100%') - } +/* + * Copyright (c) 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. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Hello World'; + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ets similarity index 96% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ets index 65e9748190..becece5de2 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ets @@ -1,105 +1,105 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -import { abilityDelegatorRegistry, TestRunner } from '@kit.TestKit'; -import { UIAbility, Want } from '@kit.AbilityKit'; -import { BusinessError } from '@kit.BasicServicesKit'; -import { hilog } from '@kit.PerformanceAnalysisKit'; -import { resourceManager } from '@kit.LocalizationKit'; -import { util } from '@kit.ArkTS'; - -let abilityDelegator: abilityDelegatorRegistry.AbilityDelegator; -let abilityDelegatorArguments: abilityDelegatorRegistry.AbilityDelegatorArgs; -let jsonPath: string = 'mock/mock-config.json'; -let tag: string = 'testTag'; - -async function onAbilityCreateCallback(data: UIAbility) { - hilog.info(0x0000, 'testTag', 'onAbilityCreateCallback, data: ${}', JSON.stringify(data)); -} - -async function addAbilityMonitorCallback(err: BusinessError) { - hilog.info(0x0000, 'testTag', 'addAbilityMonitorCallback : %{public}s', JSON.stringify(err) ?? ''); -} - -export default class OpenHarmonyTestRunner implements TestRunner { - constructor() { - } - - onPrepare() { - hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner OnPrepare'); - } - - async onRun() { - let tag = 'testTag'; - hilog.info(0x0000, tag, '%{public}s', 'OpenHarmonyTestRunner onRun run'); - abilityDelegatorArguments = abilityDelegatorRegistry.getArguments() - abilityDelegator = abilityDelegatorRegistry.getAbilityDelegator() - let moduleName = abilityDelegatorArguments.parameters['-m']; - let context = abilityDelegator.getAppContext().getApplicationContext().createModuleContext(moduleName); - let mResourceManager = context.resourceManager; - await checkMock(abilityDelegator, mResourceManager); - const bundleName = abilityDelegatorArguments.bundleName; - const testAbilityName: string = 'TestAbility'; - let lMonitor: abilityDelegatorRegistry.AbilityMonitor = { - abilityName: testAbilityName, - onAbilityCreate: onAbilityCreateCallback, - moduleName: moduleName - }; - abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) - const want: Want = { - bundleName: bundleName, - abilityName: testAbilityName, - moduleName: moduleName - }; - abilityDelegator.startAbility(want, (err: BusinessError, data: void) => { - hilog.info(0x0000, tag, 'startAbility : err : %{public}s', JSON.stringify(err) ?? ''); - hilog.info(0x0000, tag, 'startAbility : data : %{public}s', JSON.stringify(data) ?? ''); - }) - hilog.info(0x0000, tag, '%{public}s', 'OpenHarmonyTestRunner onRun end'); - } -} - -async function checkMock(abilityDelegator: abilityDelegatorRegistry.AbilityDelegator, resourceManager: resourceManager.ResourceManager) { - let rawFile: Uint8Array; - try { - rawFile = resourceManager.getRawFileContentSync(jsonPath); - hilog.info(0x0000, tag, 'MockList file exists'); - let mockStr: string = util.TextDecoder.create("utf-8", { ignoreBOM: true }).decodeWithStream(rawFile); - let mockMap: Record = getMockList(mockStr); - try { - abilityDelegator.setMockList(mockMap) - } catch (error) { - let code = (error as BusinessError).code; - let message = (error as BusinessError).message; - hilog.error(0x0000, tag, `abilityDelegator.setMockList failed, error code: ${code}, message: ${message}.`); - } - } catch (error) { - let code = (error as BusinessError).code; - let message = (error as BusinessError).message; - hilog.error(0x0000, tag, `ResourceManager:callback getRawFileContent failed, error code: ${code}, message: ${message}.`); - } -} - -function getMockList(jsonStr: string) { - let jsonObj: Record = JSON.parse(jsonStr); - let map: Map = new Map(Object.entries(jsonObj)); - let mockList: Record = {}; - map.forEach((value: object, key: string) => { - let realValue: string = value['source'].toString(); - mockList[key] = realValue; - }); - hilog.info(0x0000, tag, '%{public}s', 'mock-json value:' + JSON.stringify(mockList) ?? ''); - return mockList; +/* + * Copyright (c) 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. + */ + +import { abilityDelegatorRegistry, TestRunner } from '@kit.TestKit'; +import { UIAbility, Want } from '@kit.AbilityKit'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { resourceManager } from '@kit.LocalizationKit'; +import { util } from '@kit.ArkTS'; + +let abilityDelegator: abilityDelegatorRegistry.AbilityDelegator; +let abilityDelegatorArguments: abilityDelegatorRegistry.AbilityDelegatorArgs; +let jsonPath: string = 'mock/mock-config.json'; +let tag: string = 'testTag'; + +async function onAbilityCreateCallback(data: UIAbility) { + hilog.info(0x0000, 'testTag', 'onAbilityCreateCallback, data: ${}', JSON.stringify(data)); +} + +async function addAbilityMonitorCallback(err: BusinessError) { + hilog.info(0x0000, 'testTag', 'addAbilityMonitorCallback : %{public}s', JSON.stringify(err) ?? ''); +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner OnPrepare'); + } + + async onRun() { + let tag = 'testTag'; + hilog.info(0x0000, tag, '%{public}s', 'OpenHarmonyTestRunner onRun run'); + abilityDelegatorArguments = abilityDelegatorRegistry.getArguments() + abilityDelegator = abilityDelegatorRegistry.getAbilityDelegator() + let moduleName = abilityDelegatorArguments.parameters['-m']; + let context = abilityDelegator.getAppContext().getApplicationContext().createModuleContext(moduleName); + let mResourceManager = context.resourceManager; + await checkMock(abilityDelegator, mResourceManager); + const bundleName = abilityDelegatorArguments.bundleName; + const testAbilityName: string = 'TestAbility'; + let lMonitor: abilityDelegatorRegistry.AbilityMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + moduleName: moduleName + }; + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + const want: Want = { + bundleName: bundleName, + abilityName: testAbilityName, + moduleName: moduleName + }; + abilityDelegator.startAbility(want, (err: BusinessError, data: void) => { + hilog.info(0x0000, tag, 'startAbility : err : %{public}s', JSON.stringify(err) ?? ''); + hilog.info(0x0000, tag, 'startAbility : data : %{public}s', JSON.stringify(data) ?? ''); + }) + hilog.info(0x0000, tag, '%{public}s', 'OpenHarmonyTestRunner onRun end'); + } +} + +async function checkMock(abilityDelegator: abilityDelegatorRegistry.AbilityDelegator, resourceManager: resourceManager.ResourceManager) { + let rawFile: Uint8Array; + try { + rawFile = resourceManager.getRawFileContentSync(jsonPath); + hilog.info(0x0000, tag, 'MockList file exists'); + let mockStr: string = util.TextDecoder.create("utf-8", { ignoreBOM: true }).decodeWithStream(rawFile); + let mockMap: Record = getMockList(mockStr); + try { + abilityDelegator.setMockList(mockMap) + } catch (error) { + let code = (error as BusinessError).code; + let message = (error as BusinessError).message; + hilog.error(0x0000, tag, `abilityDelegator.setMockList failed, error code: ${code}, message: ${message}.`); + } + } catch (error) { + let code = (error as BusinessError).code; + let message = (error as BusinessError).message; + hilog.error(0x0000, tag, `ResourceManager:callback getRawFileContent failed, error code: ${code}, message: ${message}.`); + } +} + +function getMockList(jsonStr: string) { + let jsonObj: Record = JSON.parse(jsonStr); + let map: Map = new Map(Object.entries(jsonObj)); + let mockList: Record = {}; + map.forEach((value: object, key: string) => { + let realValue: string = value['source'].toString(); + mockList[key] = realValue; + }); + hilog.info(0x0000, tag, '%{public}s', 'mock-json value:' + JSON.stringify(mockList) ?? ''); + return mockList; } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/module.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/module.json5 similarity index 93% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/module.json5 rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/module.json5 index a7685a59ea..d287e53fae 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/module.json5 +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/module.json5 @@ -1,51 +1,51 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -{ - "module": { - "name": "entry_test", - "type": "feature", - "description": "$string:module_test_desc", - "mainElement": "TestAbility", - "deviceTypes": [ - "default" - ], - "deliveryWithInstall": true, - "installationFree": false, - "pages": "$profile:test_pages", - "abilities": [ - { - "name": "TestAbility", - "srcEntry": "./ets/testability/TestAbility.ets", - "description": "$string:TestAbility_desc", - "icon": "$media:icon", - "label": "$string:TestAbility_label", - "exported": true, - "startWindowIcon": "$media:icon", - "startWindowBackground": "$color:start_window_background", - "skills": [ - { - "actions": [ - "action.system.home" - ], - "entities": [ - "entity.system.home" - ] - } - ] - } - ] - } -} +/* + * Copyright (c) 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. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "description": "$string:module_test_desc", + "mainElement": "TestAbility", + "deviceTypes": [ + "default" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:test_pages", + "abilities": [ + { + "name": "TestAbility", + "srcEntry": "./ets/testability/TestAbility.ets", + "description": "$string:TestAbility_desc", + "icon": "$media:icon", + "label": "$string:TestAbility_label", + "exported": true, + "startWindowIcon": "$media:icon", + "startWindowBackground": "$color:start_window_background", + "skills": [ + { + "actions": [ + "action.system.home" + ], + "entities": [ + "entity.system.home" + ] + } + ] + } + ] + } +} diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/resources/base/element/color.json b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/resources/base/element/color.json similarity index 93% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/resources/base/element/color.json rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/resources/base/element/color.json index 3c712962da..d66f9a7d4a 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/resources/base/element/color.json +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/resources/base/element/color.json @@ -1,8 +1,8 @@ -{ - "color": [ - { - "name": "start_window_background", - "value": "#FFFFFF" - } - ] +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/resources/base/element/string.json b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/resources/base/element/string.json similarity index 94% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/resources/base/element/string.json rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/resources/base/element/string.json index 65d8fa5a7c..04e87abb72 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/resources/base/element/string.json +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/resources/base/element/string.json @@ -1,16 +1,16 @@ -{ - "string": [ - { - "name": "module_test_desc", - "value": "test ability description" - }, - { - "name": "TestAbility_desc", - "value": "the test ability" - }, - { - "name": "TestAbility_label", - "value": "test label" - } - ] +{ + "string": [ + { + "name": "module_test_desc", + "value": "test ability description" + }, + { + "name": "TestAbility_desc", + "value": "the test ability" + }, + { + "name": "TestAbility_label", + "value": "test label" + } + ] } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/resources/base/media/icon.png b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/resources/base/media/icon.png similarity index 100% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/resources/base/media/icon.png rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/resources/base/media/icon.png diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/resources/base/profile/test_pages.json b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/resources/base/profile/test_pages.json similarity index 90% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/resources/base/profile/test_pages.json rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/resources/base/profile/test_pages.json index b7e7343cac..c3d813c41a 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/ohosTest/resources/base/profile/test_pages.json +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/ohosTest/resources/base/profile/test_pages.json @@ -1,5 +1,5 @@ -{ - "src": [ - "testability/pages/Index" - ] -} +{ + "src": [ + "testability/pages/Index" + ] +} diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/test/List.test.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/test/List.test.ets similarity index 91% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/test/List.test.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/test/List.test.ets index ab6445db05..234f7bd3c7 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/test/List.test.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/test/List.test.ets @@ -1,20 +1,20 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -import localUnitTest from './LocalUnit.test'; - -export default function testsuite() { - localUnitTest(); +/* + * Copyright (c) 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. + */ + +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/entry/src/test/LocalUnit.test.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/test/LocalUnit.test.ets similarity index 95% rename from code/DocsSample/ArkTSUtilsDocModule/entry/src/test/LocalUnit.test.ets rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/test/LocalUnit.test.ets index 50ee262931..4fbb7151f2 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/entry/src/test/LocalUnit.test.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/entry/src/test/LocalUnit.test.ets @@ -1,48 +1,48 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; - -export default function localUnitTest() { - describe('localUnitTest',() => { - // Defines a test suite. Two parameters are supported: test suite name and test suite function. - beforeAll(() => { - // Presets an action, which is performed only once before all test cases of the test suite start. - // This API supports only one parameter: preset action function. - }); - beforeEach(() => { - // Presets an action, which is performed before each unit test case starts. - // The number of execution times is the same as the number of test cases defined by **it**. - // This API supports only one parameter: preset action function. - }); - afterEach(() => { - // Presets a clear action, which is performed after each unit test case ends. - // The number of execution times is the same as the number of test cases defined by **it**. - // This API supports only one parameter: clear action function. - }); - afterAll(() => { - // Presets a clear action, which is performed after all test cases of the test suite end. - // This API supports only one parameter: clear action function. - }); - it('assertContain', 0, () => { - // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. - let a = 'abc'; - let b = 'b'; - // Defines a variety of assertion methods, which are used to declare expected boolean conditions. - expect(a).assertContain(b); - expect(a).assertEqual(a); - }); - }); +/* + * Copyright (c) 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. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest',() => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/hvigor/hvigor-config.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/hvigor/hvigor-config.json5 similarity index 56% rename from code/DocsSample/ArkTSUtilsDocModule/hvigor/hvigor-config.json5 rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/hvigor/hvigor-config.json5 index b77b06ff21..34d7bb42d6 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/hvigor/hvigor-config.json5 +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/hvigor/hvigor-config.json5 @@ -1,22 +1,31 @@ -{ - "hvigorVersion": "4.1.2", - "dependencies": { - "@ohos/hvigor-ohos-plugin": "4.1.2" - }, - "execution": { - // "analyze": "default", /* Define the build analyze mode. Value: [ "default" | "verbose" | false ]. Default: "default" */ - // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ - // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ - // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ - // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ - }, - "logging": { - // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ - }, - "debugging": { - // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ - }, - "nodeOptions": { - // "maxOldSpaceSize": 4096 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process */ - } +{ + "modelVersion": "5.0.0", + "dependencies": { + }, + "execution": { + // "analyze": "default", /* Define the build analyze mode. Value: [ "default" | "verbose" | false ]. Default: "default" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "properties": { + // 配置为0,表示不启用内存缓存配置,默认为4,数值越低,内存中缓存数据越少 + "hvigor.pool.cache.capacity": 0, + // 默认配置为cpu核数-1, 包含ohos.arkCompile.maxSize4,值越小,占用内存越少 + "hvigor.pool.maxSize" : 1, + // 默认配置值为5, 值越小,占用内存越少 + "ohos.arkCompile.maxSize": 1, + // 默认配置值为true, 表示开启内存缓存,占用内存较多,配置为false,关闭内存缓存,占用内存较少 + "hvigor.enableMemoryCache": false + }, + "nodeOptions": { +// "maxOldSpaceSize": 12288 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process */ + } } \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/hvigorfile.ts b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/hvigorfile.ts similarity index 97% rename from code/DocsSample/ArkTSUtilsDocModule/hvigorfile.ts rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/hvigorfile.ts index f3cb9f1a87..159890e9ee 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/hvigorfile.ts +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/hvigorfile.ts @@ -1,6 +1,6 @@ -import { appTasks } from '@ohos/hvigor-ohos-plugin'; - -export default { - system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ - plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ -} +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/DocsSample/ArkTSUtilsDocModule/oh-package.json5 b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/oh-package.json5 similarity index 30% rename from code/DocsSample/ArkTSUtilsDocModule/oh-package.json5 rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/oh-package.json5 index 972792f689..14f6e25819 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/oh-package.json5 +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/oh-package.json5 @@ -1,29 +1,15 @@ -/* - * Copyright (c) 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 - * - * 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. - */ - -{ - "name": "arktsutilsdocssample", - "version": "1.0.0", - "description": "Please describe the basic information.", - "main": "", - "author": "", - "license": "", - "dependencies": { - }, - "devDependencies": { - "@ohos/hypium": "1.0.15", - "@ohos/hamock": "1.0.0" - } -} +{ + "modelVersion": "5.0.0", + "name": "arktsutilsdocssample", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.15", + "@ohos/hamock": "1.0.0" + } +} \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/ohosTest.md b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/ohosTest.md similarity index 99% rename from code/DocsSample/ArkTSUtilsDocModule/ohosTest.md rename to code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/ohosTest.md index 0050b32719..179c1e83b1 100644 --- a/code/DocsSample/ArkTSUtilsDocModule/ohosTest.md +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/ohosTest.md @@ -1,9 +1,9 @@ -| 测试功能 | 预置条件 | 输入 | 预期输出 |是否自动|测试结果| -|-------------------|------|------------|---------------------------------------------------|--------------------------------|--------------------------------| -| 拉起应用 | 设备正常运行 | | 成功拉起应用 |是|Pass| -| Sendable共享模块能力测试 | 执行用例 | 执行无需输入 | SendableModuleTest Succeed |是|Pass| -| 同步任务能力测试 | 执行用例 | 执行无需输入 | syncTaskTest Succeed |是|Pass| -| CPU密集型任务能力测试 | 执行用例 | 执行无需输入 | imagePreprocessing success |是|Pass| -| IO密集型任务能力测试 | 执行用例 | 执行无需输入 | IoTaskTest Succeed |是|Pass| -| 单步IO任务能力测试 | 执行用例 | 执行无需输入 | SingleIoTest Succeed |是|Pass| +| 测试功能 | 预置条件 | 输入 | 预期输出 |是否自动|测试结果| +|-------------------|------|------------|---------------------------------------------------|--------------------------------|--------------------------------| +| 拉起应用 | 设备正常运行 | | 成功拉起应用 |是|Pass| +| Sendable共享模块能力测试 | 执行用例 | 执行无需输入 | SendableModuleTest Succeed |是|Pass| +| 同步任务能力测试 | 执行用例 | 执行无需输入 | syncTaskTest Succeed |是|Pass| +| CPU密集型任务能力测试 | 执行用例 | 执行无需输入 | imagePreprocessing success |是|Pass| +| IO密集型任务能力测试 | 执行用例 | 执行无需输入 | IoTaskTest Succeed |是|Pass| +| 单步IO任务能力测试 | 执行用例 | 执行无需输入 | SingleIoTest Succeed |是|Pass| | 异步任务能力测试 | 执行用例 | 执行无需输入 | AsyncConcurrencyTest Succeed |是|Pass| \ No newline at end of file diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/screenshots/device/image1.jpeg b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/screenshots/device/image1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..0e8115371bd5ca324b92f180b2fab7929e9931ca GIT binary patch literal 32162 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 Y0q1LB(&sZ{|0TA0`p?c}8Sdu(8w3t^=>Px# literal 0 HcmV?d00001 diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/screenshots/device/image2.jpeg b/code/DocsSample/ArkTS/ArkTsConcurrent/ArkTsSimpleDemo/screenshots/device/image2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..7accd8b85b011df4bde2401dc6fb9b5b62fb481a GIT binary patch literal 69718 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 fuyyYX9l2{(0,x.logInfo)(`${e.toString().trim()}`)})),r.stderr.on("data",(e=>{(0,x.logError)(`${e.toString().trim()}`)})),r.on("exit",((e,t)=>{process.exit(null!=e?e:-1)}))}catch(n){(0,x.logErrorAndExit)(`Error: ENOENT: no such file ${t},delete ${e} and retry.`)}};var N,T,k,R,M,L={},j={},$={exports:{}},H={exports:{}};function G(){if(T)return N;T=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 N=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 U(){if(R)return k;return R=1,k=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{t=t||process.argv;const n=e.startsWith("-")?"":1===e.length?"-":"--",r=t.indexOf(n+e),u=t.indexOf("--");return-1!==r&&(-1===u||r=8&&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"].some((e=>e in r))||"codeship"===r.CI_NAME?1:o;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:(r.TERM,o)}(t);return function(e){return 0!==e&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}(o)}return n("no-color")||n("no-colors")||n("color=false")?u=!1:(n("color")||n("colors")||n("color=true")||n("color=always"))&&(u=!0),"FORCE_COLOR"in r&&(u=0===r.FORCE_COLOR.length||0!==parseInt(r.FORCE_COLOR,10)),W={supportsColor:o,stdout:o(process.stdout),stderr:o(process.stderr)}}function Q(){return K||(K=1,function(e,t){const n=o,r=i;t.init=function(e){e.inspectOpts={};const n=Object.keys(t.inspectOpts);for(let r=0;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=X();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=U()(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)}}(Y,Y.exports)),Y.exports}q=$,"undefined"==typeof process||"renderer"===process.type||!0===process.browser||process.__nwjs?q.exports=(M||(M=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=U()(t);const{formatters:n}=e.exports;n.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}(H,H.exports)),H.exports):q.exports=Q();var ee=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]=te(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]=te(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,se=e=>e&&"object"==typeof e&&!Array.isArray(e),ce=(e,t,n)=>{(Array.isArray(t)?t:[t]).forEach((t=>{if(t)throw new Error(`Problem with log4js configuration: (${ne.inspect(e,{depth:5})}) - ${n}`)}))};var ae={configure:e=>{re("New configuration to be validated: ",e),ce(e,ie(se(e)),"must be an object."),re(`Calling pre-processing listeners (${ue.length})`),ue.forEach((t=>t(e))),re("Configuration pre-processing finished."),re(`Calling configuration listeners (${oe.length})`),oe.forEach((t=>t(e))),re("Configuration finished.")},addListener:e=>{oe.push(e),re(`Added listener, now ${oe.length} listeners`)},addPreProcessingListener:e=>{ue.push(e),re(`Added pre-processing listener, now ${ue.length} listeners`)},throwExceptionIf:ce,anObject:se,anInteger:e=>e&&"number"==typeof e&&Number.isInteger(e),validIdentifier:e=>/^[A-Za-z][A-Za-z0-9_]*$/g.test(e),not:ie},le={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"}(le);const fe=le.exports,De=t,de=i,pe=e,Ee=s,he=$.exports("log4js:layouts"),Ce={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 me(e){return e?`[${Ce[e][0]}m`:""}function Fe(e){return e?`[${Ce[e][1]}m`:""}function ye(e,t){return n=de.format("[%s] [%s] %s - ",fe.asString(e.startTime),e.level.toString(),e.categoryName),me(r=t)+n+Fe(r);var n,r}function ge(e){return ye(e)+de.format(...e.data)}function Ae(e){return ye(e,e.level.colour)+de.format(...e.data)}function ve(e){return de.format(...e.data)}function Se(e){return e.data[0]}function we(e,t){const n=/%(-?[0-9]+)?(\.?-?[0-9]+)?([[\]cdhmnprzxXyflosCMAF%])(\{([^}]+)\})?|([^%]+)/;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(pe.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||""},C:function(e){return e.className||""},M:function(e){return e.functionName||""},A:function(e){return e.functionAlias||""},F:function(e){return e.callerName||""}};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.slice(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.slice(1),10);t.lengthve,basic:()=>ge,colored:()=>Ae,coloured:()=>Ae,pattern:e=>we(e&&e.pattern,e&&e.tokens),dummy:()=>Se};var _e={basicLayout:ge,messagePassThroughLayout:ve,patternLayout:we,colouredLayout:Ae,coloredLayout:Ae,dummyLayout:Se,addLayout(e,t){Oe[e]=t},layout:(e,t)=>Oe[e]&&Oe[e](t)};const be=ae,Be=["white","grey","black","blue","cyan","green","magenta","red","yellow"];class Ie{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 Ie?e:(e instanceof Object&&e.levelStr&&(e=e.levelStr),Ie[e.toString().toUpperCase()]||t):t}static addLevels(e){if(e){Object.keys(e).forEach((t=>{const n=t.toUpperCase();Ie[n]=new Ie(e[t].value,n,e[t].colour);const r=Ie.levels.findIndex((e=>e.levelStr===n));r>-1?Ie.levels[r]=Ie[n]:Ie.levels.push(Ie[n])})),Ie.levels.sort(((e,t)=>e.level-t.level))}}isLessThanOrEqualTo(e){return"string"==typeof e&&(e=Ie.getLevel(e)),this.level<=e.level}isGreaterThanOrEqualTo(e){return"string"==typeof e&&(e=Ie.getLevel(e)),this.level>=e.level}isEqualTo(e){return"string"==typeof e&&(e=Ie.getLevel(e)),this.level===e.level}}Ie.levels=[],Ie.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"}}),be.addListener((e=>{const t=e.levels;if(t){be.throwExceptionIf(e,be.not(be.anObject(t)),"levels must be an object");Object.keys(t).forEach((n=>{be.throwExceptionIf(e,be.not(be.validIdentifier(n)),`level name "${n}" is not a valid identifier (must start with a letter, only contain A-Z,a-z,0-9,_)`),be.throwExceptionIf(e,be.not(be.anObject(t[n])),`level "${n}" must be an object`),be.throwExceptionIf(e,be.not(t[n].value),`level "${n}" must have a 'value' property`),be.throwExceptionIf(e,be.not(be.anInteger(t[n].value)),`level "${n}".value must have an integer value`),be.throwExceptionIf(e,be.not(t[n].colour),`level "${n}" must have a 'colour' property`),be.throwExceptionIf(e,be.not(Be.indexOf(t[n].colour)>-1),`level "${n}".colour must be one of ${Be.join(", ")}`)}))}})),be.addListener((e=>{Ie.addLevels(e.levels)}));var xe=Ie,Pe={exports:{}},Ne={};/*! (c) 2020 Andrea Giammarchi */ -const{parse:Te,stringify:ke}=JSON,{keys:Re}=Object,Me=String,Le="string",je={},$e="object",He=(e,t)=>t,Ge=e=>e instanceof Me?Me(e):e,Ue=(e,t)=>typeof t===Le?new Me(t):t,Ve=(e,t,n,r)=>{const u=[];for(let o=Re(n),{length:i}=o,s=0;s{const r=Me(t.push(n)-1);return e.set(n,r),r},We=(e,t)=>{const n=Te(e,Ue).map(Ge),r=n[0],u=t||He,o=typeof r===$e&&r?Ve(n,new Set,r,u):r;return u.call({"":o},"",o)};Ne.parse=We;const ze=(e,t,n)=>{const r=t&&typeof t===$e?(e,n)=>""===e||-1Te(ze(e));Ne.fromJSON=e=>We(ke(e));const Ke=Ne,qe=xe;const Ye=new class{constructor(){const e={__LOG4JS_undefined__:void 0,__LOG4JS_NaN__:Number("abc"),__LOG4JS_Infinity__:1/0,"__LOG4JS_-Infinity__":-1/0};this.deMap=e,this.serMap={},Object.keys(this.deMap).forEach((e=>{const t=this.deMap[e];this.serMap[t]=e}))}canSerialise(e){return"string"!=typeof e&&e in this.serMap}serialise(e){return this.canSerialise(e)?this.serMap[e]:e}canDeserialise(e){return e in this.deMap}deserialise(e){return this.canDeserialise(e)?this.deMap[e]:e}};let Ze=class{constructor(e,t,n,r,u,o){if(this.startTime=new Date,this.categoryName=e,this.data=n,this.level=t,this.context=Object.assign({},r),this.pid=process.pid,this.error=o,void 0!==u){if(!u||"object"!=typeof u||Array.isArray(u))throw new TypeError("Invalid location type passed to LoggingEvent constructor");this.constructor._getLocationKeys().forEach((e=>{void 0!==u[e]&&(this[e]=u[e])}))}}static _getLocationKeys(){return["fileName","lineNumber","columnNumber","callStack","className","functionName","functionAlias","callerName"]}serialise(){return Ke.stringify(this,((e,t)=>(t instanceof Error&&(t=Object.assign({message:t.message,stack:t.stack},t)),Ye.serialise(t))))}static deserialise(e){let t;try{const n=Ke.parse(e,((e,t)=>{if(t&&t.message&&t.stack){const e=new Error(t);Object.keys(t).forEach((n=>{e[n]=t[n]})),t=e}return Ye.deserialise(t)}));this._getLocationKeys().forEach((e=>{void 0!==n[e]&&(n.location||(n.location={}),n.location[e]=n[e])})),t=new Ze(n.categoryName,qe.getLevel(n.level.levelStr),n.data,n.context,n.location,n.error),t.startTime=new Date(n.startTime),t.pid=n.pid,n.cluster&&(t.cluster=n.cluster)}catch(n){t=new Ze("log4js",qe.ERROR,["Unable to parse log:",e,"because: ",n])}return t}};var Xe=Ze;const Qe=$.exports("log4js:clustering"),et=Xe,tt=ae;let nt=!1,rt=null;try{rt=require("cluster")}catch(e){Qe("cluster module not present"),nt=!0}const ut=[];let ot=!1,it="NODE_APP_INSTANCE";const st=()=>ot&&"0"===process.env[it],ct=()=>nt||rt&&rt.isMaster||st(),at=e=>{ut.forEach((t=>t(e)))},lt=(e,t)=>{if(Qe("cluster message received from worker ",e,": ",t),e.topic&&e.data&&(t=e,e=void 0),t&&t.topic&&"log4js:message"===t.topic){Qe("received message: ",t.data);const e=et.deserialise(t.data);at(e)}};nt||tt.addListener((e=>{ut.length=0,({pm2:ot,disableClustering:nt,pm2InstanceVar:it="NODE_APP_INSTANCE"}=e),Qe(`clustering disabled ? ${nt}`),Qe(`cluster.isMaster ? ${rt&&rt.isMaster}`),Qe(`pm2 enabled ? ${ot}`),Qe(`pm2InstanceVar = ${it}`),Qe(`process.env[${it}] = ${process.env[it]}`),ot&&process.removeListener("message",lt),rt&&rt.removeListener&&rt.removeListener("message",lt),nt||e.disableClustering?Qe("Not listening for cluster messages, because clustering disabled."):st()?(Qe("listening for PM2 broadcast messages"),process.on("message",lt)):rt&&rt.isMaster?(Qe("listening for cluster messages"),rt.on("message",lt)):Qe("not listening for messages, because we are not a master process")}));var ft={onlyOnMaster:(e,t)=>ct()?e():t,isMaster:ct,send:e=>{ct()?at(e):(ot||(e.cluster={workerId:rt.worker.id,worker:process.pid}),process.send({topic:"log4js:message",data:e.serialise()}))},onMessage:e=>{ut.push(e)}},Dt={};function dt(e){if("number"==typeof e&&Number.isInteger(e))return e;const t={K:1024,M:1048576,G:1073741824},n=Object.keys(t),r=e.slice(-1).toLocaleUpperCase(),u=e.slice(0,-1).trim();if(n.indexOf(r)<0||!Number.isInteger(Number(u)))throw Error(`maxLogSize: "${e}" is invalid`);return u*t[r]}function pt(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:dt},e)}const Et={dateFile:pt,file:pt,fileSync:pt};Dt.modifyConfig=e=>Et[e.type]?Et[e.type](e):e;var ht={};const Ct=console.log.bind(console);ht.configure=function(e,t){let n=t.colouredLayout;return e.layout&&(n=t.layout(e.layout.type,e.layout)),function(e,t){return n=>{Ct(e(n,t))}}(n,e.timezoneOffset)};var mt={};mt.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 Ft={};Ft.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 yt={};yt.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;u.isLessThanOrEqualTo(t)&&o.isGreaterThanOrEqualTo(t)&&n(e)}}(e.level,e.maxLevel,u,r)};var gt={};const At=$.exports("log4js:categoryFilter");gt.configure=function(e,t,n){const r=n(e.appender);return function(e,t){return"string"==typeof e&&(e=[e]),n=>{At(`Checking ${n.categoryName} against ${e}`),-1===e.indexOf(n.categoryName)&&(At("Not excluded, sending to appender"),t(n))}}(e.exclude,r)};var vt={};const St=$.exports("log4js:noLogFilter");vt.configure=function(e,t,n){const r=n(e.appender);return function(e,t){return n=>{St(`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)&&(St("Not excluded, sending to appender"),t(n))}}(e.exclude,r)};var wt={},Ot={exports:{}},_t={},bt={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})}},Bt=c,It=process.cwd,xt=null,Pt=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return xt||(xt=It.call(process)),xt};try{process.cwd()}catch(e){}if("function"==typeof process.chdir){var Nt=process.chdir;process.chdir=function(e){xt=null,Nt.call(process,e)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,Nt)}var Tt=function(e){Bt.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&function(e){e.lchmod=function(t,n,r){e.open(t,Bt.O_WRONLY|Bt.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,Bt.O_WRONLY|Bt.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){Bt.hasOwnProperty("O_SYMLINK")&&e.futimes?(e.lutimes=function(t,n,r,u){e.open(t,Bt.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,Bt.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"===Pt&&(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 kt=a.Stream,Rt=function(e){return{ReadStream:function t(n,r){if(!(this instanceof t))return new t(n,r);kt.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);kt.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 Mt=function(e){if(null===e||"object"!=typeof e)return e;if(e instanceof Object)var t={__proto__:Lt(e)};else t=Object.create(null);return Object.getOwnPropertyNames(e).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})),t},Lt=Object.getPrototypeOf||function(e){return e.__proto__};var jt,$t,Ht=n,Gt=Tt,Ut=Rt,Vt=Mt,Jt=i;function Wt(e,t){Object.defineProperty(e,jt,{get:function(){return t}})}"function"==typeof Symbol&&"function"==typeof Symbol.for?(jt=Symbol.for("graceful-fs.queue"),$t=Symbol.for("graceful-fs.previous")):(jt="___graceful-fs.queue",$t="___graceful-fs.previous");var zt=function(){};if(Jt.debuglog?zt=Jt.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(zt=function(){var e=Jt.format.apply(Jt,arguments);e="GFS4: "+e.split(/\n/).join("\nGFS4: "),console.error(e)}),!Ht[jt]){var Kt=p[jt]||[];Wt(Ht,Kt),Ht.close=function(e){function t(t,n){return e.call(Ht,t,(function(e){e||Qt(),"function"==typeof n&&n.apply(this,arguments)}))}return Object.defineProperty(t,$t,{value:e}),t}(Ht.close),Ht.closeSync=function(e){function t(t){e.apply(Ht,arguments),Qt()}return Object.defineProperty(t,$t,{value:e}),t}(Ht.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",(function(){zt(Ht[jt]),l.equal(Ht[jt].length,0)}))}p[jt]||Wt(p,Ht[jt]);var qt,Yt=Zt(Vt(Ht));function Zt(e){Gt(e),e.gracefulify=Zt,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):Xt([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):Xt([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):Xt([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):Xt([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)):Xt([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=Ut(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):Xt([e,[t,n,r,u],i,o||Date.now(),Date.now()])}))}(e,t,n,r)}return e.open=E,e}function Xt(e){zt("ENQUEUE",e[0].name,e[1]),Ht[jt].push(e),en()}function Qt(){for(var e=Date.now(),t=0;t2&&(Ht[jt][t][3]=e,Ht[jt][t][4]=e);en()}function en(){if(clearTimeout(qt),qt=void 0,0!==Ht[jt].length){var e=Ht[jt].shift(),t=e[0],n=e[1],r=e[2],u=e[3],o=e[4];if(void 0===u)zt("RETRY",t.name,n),t.apply(null,n);else if(Date.now()-u>=6e4){zt("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)?(zt("RETRY",t.name,n),t.apply(null,n.concat([u]))):Ht[jt].push(e)}void 0===qt&&(qt=setTimeout(en,0))}}process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!Ht.__patched&&(Yt=Zt(Ht),Ht.__patched=!0),function(e){const t=bt.fromCallback,n=Yt,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))}(_t);const tn=e;function nn(e){return(e=tn.normalize(tn.resolve(e)).split(tn.sep)).length>0?e[0]:null}const rn=/[<>:"|?*]/;var un=function(e){const t=nn(e);return e=e.replace(t,""),rn.test(e)};const on=Yt,sn=e,cn=un,an=parseInt("0777",8);var ln=function e(t,n,r,u){if("function"==typeof n?(r=n,n={}):n&&"object"==typeof n||(n={mode:n}),"win32"===process.platform&&cn(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||on;void 0===o&&(o=an&~process.umask()),u||(u=null),r=r||function(){},t=sn.resolve(t),i.mkdir(t,o,(o=>{if(!o)return r(null,u=u||t);if("ENOENT"===o.code){if(sn.dirname(t)===t)return r(o);e(sn.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 fn=Yt,Dn=e,dn=un,pn=parseInt("0777",8);var En=function e(t,n,r){n&&"object"==typeof n||(n={mode:n});let u=n.mode;const o=n.fs||fn;if("win32"===process.platform&&dn(t)){const e=new Error(t+" contains invalid WIN32 path characters.");throw e.code="EINVAL",e}void 0===u&&(u=pn&~process.umask()),r||(r=null),t=Dn.resolve(t);try{o.mkdirSync(t,u),r=r||t}catch(u){if("ENOENT"===u.code){if(Dn.dirname(t)===t)throw u;r=e(Dn.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 hn=(0,bt.fromCallback)(ln);var Cn={mkdirs:hn,mkdirsSync:En,mkdirp:hn,mkdirpSync:En,ensureDir:hn,ensureDirSync:En};const mn=Yt;var Fn=function(e,t,n,r){mn.open(e,"r+",((e,u)=>{if(e)return r(e);mn.futimes(u,t,n,(e=>{mn.close(u,(t=>{r&&r(e||t)}))}))}))},yn=function(e,t,n){const r=mn.openSync(e,"r+");return mn.futimesSync(r,t,n),mn.closeSync(r)};const gn=Yt,An=e,vn=10,Sn=5,wn=0,On=process.versions.node.split("."),_n=Number.parseInt(On[0],10),bn=Number.parseInt(On[1],10),Bn=Number.parseInt(On[2],10);function In(){if(_n>vn)return!0;if(_n===vn){if(bn>Sn)return!0;if(bn===Sn&&Bn>=wn)return!0}return!1}function xn(e,t){const n=An.resolve(e).split(An.sep).filter((e=>e)),r=An.resolve(t).split(An.sep).filter((e=>e));return n.reduce(((e,t,n)=>e&&r[n]===t),!0)}function Pn(e,t,n){return`Cannot ${n} '${e}' to a subdirectory of itself, '${t}'.`}var Nn,Tn,kn={checkPaths:function(e,t,n,r){!function(e,t,n){In()?gn.stat(e,{bigint:!0},((e,r)=>{if(e)return n(e);gn.stat(t,{bigint:!0},((e,t)=>e?"ENOENT"===e.code?n(null,{srcStat:r,destStat:null}):n(e):n(null,{srcStat:r,destStat:t})))})):gn.stat(e,((e,r)=>{if(e)return n(e);gn.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()&&xn(e,t)?r(new Error(Pn(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=In()?gn.statSync(e,{bigint:!0}):gn.statSync(e);try{r=In()?gn.statSync(t,{bigint:!0}):gn.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()&&xn(e,t))throw new Error(Pn(e,t,n));return{srcStat:r,destStat:u}},checkParentPaths:function e(t,n,r,u,o){const i=An.resolve(An.dirname(t)),s=An.resolve(An.dirname(r));if(s===i||s===An.parse(s).root)return o();In()?gn.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(Pn(t,r,u))):e(t,n,s,u,o))):gn.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(Pn(t,r,u))):e(t,n,s,u,o)))},checkParentPathsSync:function e(t,n,r,u){const o=An.resolve(An.dirname(t)),i=An.resolve(An.dirname(r));if(i===o||i===An.parse(i).root)return;let s;try{s=In()?gn.statSync(i,{bigint:!0}):gn.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(Pn(t,r,u));return e(t,n,i,u)},isSrcSubdir:xn};const Rn=Yt,Mn=e,Ln=Cn.mkdirsSync,jn=yn,$n=kn;function Hn(e,t,n,r){if(!r.filter||r.filter(t,n))return function(e,t,n,r){const u=r.dereference?Rn.statSync:Rn.lstatSync,o=u(t);if(o.isDirectory())return function(e,t,n,r,u){if(!t)return function(e,t,n,r){return Rn.mkdirSync(n),Un(t,n,r),Rn.chmodSync(n,e.mode)}(e,n,r,u);if(t&&!t.isDirectory())throw new Error(`Cannot overwrite non-directory '${r}' with directory '${n}'.`);return Un(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 Rn.unlinkSync(n),Gn(e,t,n,r);if(r.errorOnExist)throw new Error(`'${n}' already exists`)}(e,n,r,u):Gn(e,n,r,u)}(o,e,t,n,r);if(o.isSymbolicLink())return function(e,t,n,r){let u=Rn.readlinkSync(t);r.dereference&&(u=Mn.resolve(process.cwd(),u));if(e){let e;try{e=Rn.readlinkSync(n)}catch(e){if("EINVAL"===e.code||"UNKNOWN"===e.code)return Rn.symlinkSync(u,n);throw e}if(r.dereference&&(e=Mn.resolve(process.cwd(),e)),$n.isSrcSubdir(u,e))throw new Error(`Cannot copy '${u}' to a subdirectory of itself, '${e}'.`);if(Rn.statSync(n).isDirectory()&&$n.isSrcSubdir(e,u))throw new Error(`Cannot overwrite '${e}' with '${u}'.`);return function(e,t){return Rn.unlinkSync(t),Rn.symlinkSync(e,t)}(u,n)}return Rn.symlinkSync(u,n)}(e,t,n,r)}(e,t,n,r)}function Gn(e,t,n,r){return"function"==typeof Rn.copyFileSync?(Rn.copyFileSync(t,n),Rn.chmodSync(n,e.mode),r.preserveTimestamps?jn(n,e.atime,e.mtime):void 0):function(e,t,n,r){const u=65536,o=(Tn?Nn:(Tn=1,Nn=function(e){if("function"==typeof Buffer.allocUnsafe)try{return Buffer.allocUnsafe(e)}catch(t){return new Buffer(e)}return new Buffer(e)}))(u),i=Rn.openSync(t,"r"),s=Rn.openSync(n,"w",e.mode);let c=0;for(;cfunction(e,t,n,r){const u=Mn.join(t,e),o=Mn.join(n,e),{destStat:i}=$n.checkPathsSync(u,o,"copy");return Hn(i,u,o,r)}(r,e,t,n)))}var Vn=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}=$n.checkPathsSync(e,t,"copy");return $n.checkParentPathsSync(e,r,t,"copy"),function(e,t,n,r){if(r.filter&&!r.filter(t,n))return;const u=Mn.dirname(n);Rn.existsSync(u)||Ln(u);return Hn(e,t,n,r)}(u,e,t,n)},Jn={copySync:Vn};const Wn=bt.fromPromise,zn=_t;var Kn={pathExists:Wn((function(e){return zn.access(e).then((()=>!0)).catch((()=>!1))})),pathExistsSync:zn.existsSync};const qn=Yt,Yn=e,Zn=Cn.mkdirs,Xn=Kn.pathExists,Qn=Fn,er=kn;function tr(e,t,n,r,u){const o=Yn.dirname(n);Xn(o,((i,s)=>i?u(i):s?rr(e,t,n,r,u):void Zn(o,(o=>o?u(o):rr(e,t,n,r,u)))))}function nr(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 rr(e,t,n,r,u){return r.filter?nr(ur,e,t,n,r,u):ur(e,t,n,r,u)}function ur(e,t,n,r,u){(r.dereference?qn.stat:qn.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){qn.mkdir(n,(o=>{if(o)return u(o);sr(t,n,r,(t=>t?u(t):qn.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 sr(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();qn.unlink(n,(o=>o?u(o):or(e,t,n,r,u)))}(e,n,r,u,o):or(e,n,r,u,o)}(i,e,t,n,r,u):i.isSymbolicLink()?function(e,t,n,r,u){qn.readlink(t,((t,o)=>t?u(t):(r.dereference&&(o=Yn.resolve(process.cwd(),o)),e?void qn.readlink(n,((t,i)=>t?"EINVAL"===t.code||"UNKNOWN"===t.code?qn.symlink(o,n,u):u(t):(r.dereference&&(i=Yn.resolve(process.cwd(),i)),er.isSrcSubdir(o,i)?u(new Error(`Cannot copy '${o}' to a subdirectory of itself, '${i}'.`)):e.isDirectory()&&er.isSrcSubdir(i,o)?u(new Error(`Cannot overwrite '${i}' with '${o}'.`)):function(e,t,n){qn.unlink(t,(r=>r?n(r):qn.symlink(e,t,n)))}(o,n,u)))):qn.symlink(o,n,u))))}(e,t,n,r,u):void 0))}function or(e,t,n,r,u){return"function"==typeof qn.copyFile?qn.copyFile(t,n,(t=>t?u(t):ir(e,n,r,u))):function(e,t,n,r,u){const o=qn.createReadStream(t);o.on("error",(e=>u(e))).once("open",(()=>{const t=qn.createWriteStream(n,{mode:e.mode});t.on("error",(e=>u(e))).on("open",(()=>o.pipe(t))).once("close",(()=>ir(e,n,r,u)))}))}(e,t,n,r,u)}function ir(e,t,n,r){qn.chmod(t,e.mode,(u=>u?r(u):n.preserveTimestamps?Qn(t,e.atime,e.mtime,r):r()))}function sr(e,t,n,r){qn.readdir(e,((u,o)=>u?r(u):cr(o,e,t,n,r)))}function cr(e,t,n,r,u){const o=e.pop();return o?function(e,t,n,r,u,o){const i=Yn.join(n,t),s=Yn.join(r,t);er.checkPaths(i,s,"copy",((t,c)=>{if(t)return o(t);const{destStat:a}=c;rr(a,i,s,u,(t=>t?o(t):cr(e,n,r,u,o)))}))}(e,o,t,n,r,u):u()}var ar=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"),er.checkPaths(e,t,"copy",((u,o)=>{if(u)return r(u);const{srcStat:i,destStat:s}=o;er.checkParentPaths(e,i,t,"copy",(u=>u?r(u):n.filter?nr(tr,s,e,t,n,r):tr(s,e,t,n,r)))}))};var lr={copy:(0,bt.fromCallback)(ar)};const fr=Yt,Dr=e,dr=l,pr="win32"===process.platform;function Er(e){["unlink","chmod","stat","lstat","rmdir","readdir"].forEach((t=>{e[t]=e[t]||fr[t],e[t+="Sync"]=e[t]||fr[t]})),e.maxBusyTries=e.maxBusyTries||3}function hr(e,t,n){let r=0;"function"==typeof t&&(n=t,t={}),dr(e,"rimraf: missing path"),dr.strictEqual(typeof e,"string","rimraf: path should be a string"),dr.strictEqual(typeof n,"function","rimraf: callback function required"),dr(t,"rimraf: invalid options argument provided"),dr.strictEqual(typeof t,"object","rimraf: options should be object"),Er(t),Cr(e,t,(function u(o){if(o){if(("EBUSY"===o.code||"ENOTEMPTY"===o.code||"EPERM"===o.code)&&rCr(e,t,u)),100*r)}"ENOENT"===o.code&&(o=null)}n(o)}))}function Cr(e,t,n){dr(e),dr(t),dr("function"==typeof n),t.lstat(e,((r,u)=>r&&"ENOENT"===r.code?n(null):r&&"EPERM"===r.code&&pr?mr(e,t,r,n):u&&u.isDirectory()?yr(e,t,r,n):void t.unlink(e,(r=>{if(r){if("ENOENT"===r.code)return n(null);if("EPERM"===r.code)return pr?mr(e,t,r,n):yr(e,t,r,n);if("EISDIR"===r.code)return yr(e,t,r,n)}return n(r)}))))}function mr(e,t,n,r){dr(e),dr(t),dr("function"==typeof r),n&&dr(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()?yr(e,t,n,r):t.unlink(e,r)}))}))}function Fr(e,t,n){let r;dr(e),dr(t),n&&dr(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()?Ar(e,t,n):t.unlinkSync(e)}function yr(e,t,n,r){dr(e),dr(t),n&&dr(n instanceof Error),dr("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){dr(e),dr(t),dr("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=>{hr(Dr.join(e,r),t,(r=>{if(!o)return r?n(o=r):void(0==--i&&t.rmdir(e,n))}))}))}))}(e,t,r)}))}function gr(e,t){let n;Er(t=t||{}),dr(e,"rimraf: missing path"),dr.strictEqual(typeof e,"string","rimraf: path should be a string"),dr(t,"rimraf: missing options"),dr.strictEqual(typeof t,"object","rimraf: options should be object");try{n=t.lstatSync(e)}catch(n){if("ENOENT"===n.code)return;"EPERM"===n.code&&pr&&Fr(e,t,n)}try{n&&n.isDirectory()?Ar(e,t,null):t.unlinkSync(e)}catch(n){if("ENOENT"===n.code)return;if("EPERM"===n.code)return pr?Fr(e,t,n):Ar(e,t,n);if("EISDIR"!==n.code)throw n;Ar(e,t,n)}}function Ar(e,t,n){dr(e),dr(t),n&&dr(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(dr(e),dr(t),t.readdirSync(e).forEach((n=>gr(Dr.join(e,n),t))),!pr){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 vr=hr;hr.sync=gr;const Sr=vr;var wr={remove:(0,bt.fromCallback)(Sr),removeSync:Sr.sync};const Or=bt.fromCallback,_r=Yt,br=e,Br=Cn,Ir=wr,xr=Or((function(e,t){t=t||function(){},_r.readdir(e,((n,r)=>{if(n)return Br.mkdirs(e,t);r=r.map((t=>br.join(e,t))),function e(){const n=r.pop();if(!n)return t();Ir.remove(n,(n=>{if(n)return t(n);e()}))}()}))}));function Pr(e){let t;try{t=_r.readdirSync(e)}catch(t){return Br.mkdirsSync(e)}t.forEach((t=>{t=br.join(e,t),Ir.removeSync(t)}))}var Nr={emptyDirSync:Pr,emptydirSync:Pr,emptyDir:xr,emptydir:xr};const Tr=bt.fromCallback,kr=e,Rr=Yt,Mr=Cn,Lr=Kn.pathExists;var jr={createFile:Tr((function(e,t){function n(){Rr.writeFile(e,"",(e=>{if(e)return t(e);t()}))}Rr.stat(e,((r,u)=>{if(!r&&u.isFile())return t();const o=kr.dirname(e);Lr(o,((e,r)=>e?t(e):r?n():void Mr.mkdirs(o,(e=>{if(e)return t(e);n()}))))}))})),createFileSync:function(e){let t;try{t=Rr.statSync(e)}catch(e){}if(t&&t.isFile())return;const n=kr.dirname(e);Rr.existsSync(n)||Mr.mkdirsSync(n),Rr.writeFileSync(e,"")}};const $r=bt.fromCallback,Hr=e,Gr=Yt,Ur=Cn,Vr=Kn.pathExists;var Jr={createLink:$r((function(e,t,n){function r(e,t){Gr.link(e,t,(e=>{if(e)return n(e);n(null)}))}Vr(t,((u,o)=>u?n(u):o?n(null):void Gr.lstat(e,(u=>{if(u)return u.message=u.message.replace("lstat","ensureLink"),n(u);const o=Hr.dirname(t);Vr(o,((u,i)=>u?n(u):i?r(e,t):void Ur.mkdirs(o,(u=>{if(u)return n(u);r(e,t)}))))}))))})),createLinkSync:function(e,t){if(Gr.existsSync(t))return;try{Gr.lstatSync(e)}catch(e){throw e.message=e.message.replace("lstat","ensureLink"),e}const n=Hr.dirname(t);return Gr.existsSync(n)||Ur.mkdirsSync(n),Gr.linkSync(e,t)}};const Wr=e,zr=Yt,Kr=Kn.pathExists;var qr={symlinkPaths:function(e,t,n){if(Wr.isAbsolute(e))return zr.lstat(e,(t=>t?(t.message=t.message.replace("lstat","ensureSymlink"),n(t)):n(null,{toCwd:e,toDst:e})));{const r=Wr.dirname(t),u=Wr.join(r,e);return Kr(u,((t,o)=>t?n(t):o?n(null,{toCwd:u,toDst:e}):zr.lstat(e,(t=>t?(t.message=t.message.replace("lstat","ensureSymlink"),n(t)):n(null,{toCwd:e,toDst:Wr.relative(r,e)})))))}},symlinkPathsSync:function(e,t){let n;if(Wr.isAbsolute(e)){if(n=zr.existsSync(e),!n)throw new Error("absolute srcpath does not exist");return{toCwd:e,toDst:e}}{const r=Wr.dirname(t),u=Wr.join(r,e);if(n=zr.existsSync(u),n)return{toCwd:u,toDst:e};if(n=zr.existsSync(e),!n)throw new Error("relative srcpath does not exist");return{toCwd:e,toDst:Wr.relative(r,e)}}}};const Yr=Yt;var Zr={symlinkType:function(e,t,n){if(n="function"==typeof t?t:n,t="function"!=typeof t&&t)return n(null,t);Yr.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=Yr.lstatSync(e)}catch(e){return"file"}return n&&n.isDirectory()?"dir":"file"}};const Xr=bt.fromCallback,Qr=e,eu=Yt,tu=Cn.mkdirs,nu=Cn.mkdirsSync,ru=qr.symlinkPaths,uu=qr.symlinkPathsSync,ou=Zr.symlinkType,iu=Zr.symlinkTypeSync,su=Kn.pathExists;var cu={createSymlink:Xr((function(e,t,n,r){r="function"==typeof n?n:r,n="function"!=typeof n&&n,su(t,((u,o)=>u?r(u):o?r(null):void ru(e,t,((u,o)=>{if(u)return r(u);e=o.toDst,ou(o.toCwd,n,((n,u)=>{if(n)return r(n);const o=Qr.dirname(t);su(o,((n,i)=>n?r(n):i?eu.symlink(e,t,u,r):void tu(o,(n=>{if(n)return r(n);eu.symlink(e,t,u,r)}))))}))}))))})),createSymlinkSync:function(e,t,n){if(eu.existsSync(t))return;const r=uu(e,t);e=r.toDst,n=iu(r.toCwd,n);const u=Qr.dirname(t);return eu.existsSync(u)||nu(u),eu.symlinkSync(e,t,n)}};var au,lu={createFile:jr.createFile,createFileSync:jr.createFileSync,ensureFile:jr.createFile,ensureFileSync:jr.createFileSync,createLink:Jr.createLink,createLinkSync:Jr.createLinkSync,ensureLink:Jr.createLink,ensureLinkSync:Jr.createLinkSync,createSymlink:cu.createSymlink,createSymlinkSync:cu.createSymlinkSync,ensureSymlink:cu.createSymlink,ensureSymlinkSync:cu.createSymlinkSync};try{au=Yt}catch(e){au=n}function fu(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 Du(e){return Buffer.isBuffer(e)&&(e=e.toString("utf8")),e=e.replace(/^\uFEFF/,"")}var du={readFile:function(e,t,n){null==n&&(n=t,t={}),"string"==typeof t&&(t={encoding:t});var r=(t=t||{}).fs||au,u=!0;"throws"in t&&(u=t.throws),r.readFile(e,t,(function(r,o){if(r)return n(r);var i;o=Du(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||au,r=!0;"throws"in t&&(r=t.throws);try{var u=n.readFileSync(e,t);return u=Du(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||au,o="";try{o=fu(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||au,u=fu(t,n);return r.writeFileSync(e,u,n)}},pu=du;const Eu=bt.fromCallback,hu=pu;var Cu={readJson:Eu(hu.readFile),readJsonSync:hu.readFileSync,writeJson:Eu(hu.writeFile),writeJsonSync:hu.writeFileSync};const mu=e,Fu=Cn,yu=Kn.pathExists,gu=Cu;var Au=function(e,t,n,r){"function"==typeof n&&(r=n,n={});const u=mu.dirname(e);yu(u,((o,i)=>o?r(o):i?gu.writeJson(e,t,n,r):void Fu.mkdirs(u,(u=>{if(u)return r(u);gu.writeJson(e,t,n,r)}))))};const vu=Yt,Su=e,wu=Cn,Ou=Cu;var _u=function(e,t,n){const r=Su.dirname(e);vu.existsSync(r)||wu.mkdirsSync(r),Ou.writeJsonSync(e,t,n)};const bu=bt.fromCallback,Bu=Cu;Bu.outputJson=bu(Au),Bu.outputJsonSync=_u,Bu.outputJSON=Bu.outputJson,Bu.outputJSONSync=Bu.outputJsonSync,Bu.writeJSON=Bu.writeJson,Bu.writeJSONSync=Bu.writeJsonSync,Bu.readJSON=Bu.readJson,Bu.readJSONSync=Bu.readJsonSync;var Iu=Bu;const xu=Yt,Pu=e,Nu=Jn.copySync,Tu=wr.removeSync,ku=Cn.mkdirpSync,Ru=kn;function Mu(e,t,n){try{xu.renameSync(e,t)}catch(r){if("EXDEV"!==r.code)throw r;return function(e,t,n){const r={overwrite:n,errorOnExist:!0};return Nu(e,t,r),Tu(e)}(e,t,n)}}var Lu=function(e,t,n){const r=(n=n||{}).overwrite||n.clobber||!1,{srcStat:u}=Ru.checkPathsSync(e,t,"move");return Ru.checkParentPathsSync(e,u,t,"move"),ku(Pu.dirname(t)),function(e,t,n){if(n)return Tu(t),Mu(e,t,n);if(xu.existsSync(t))throw new Error("dest already exists.");return Mu(e,t,n)}(e,t,r)},ju={moveSync:Lu};const $u=Yt,Hu=e,Gu=lr.copy,Uu=wr.remove,Vu=Cn.mkdirp,Ju=Kn.pathExists,Wu=kn;function zu(e,t,n,r){$u.rename(e,t,(u=>u?"EXDEV"!==u.code?r(u):function(e,t,n,r){const u={overwrite:n,errorOnExist:!0};Gu(e,t,u,(t=>t?r(t):Uu(e,r)))}(e,t,n,r):r()))}var Ku=function(e,t,n,r){"function"==typeof n&&(r=n,n={});const u=n.overwrite||n.clobber||!1;Wu.checkPaths(e,t,"move",((n,o)=>{if(n)return r(n);const{srcStat:i}=o;Wu.checkParentPaths(e,i,t,"move",(n=>{if(n)return r(n);Vu(Hu.dirname(t),(n=>n?r(n):function(e,t,n,r){if(n)return Uu(t,(u=>u?r(u):zu(e,t,n,r)));Ju(t,((u,o)=>u?r(u):o?r(new Error("dest already exists.")):zu(e,t,n,r)))}(e,t,u,r)))}))}))};var qu={move:(0,bt.fromCallback)(Ku)};const Yu=bt.fromCallback,Zu=Yt,Xu=e,Qu=Cn,eo=Kn.pathExists;var to={outputFile:Yu((function(e,t,n,r){"function"==typeof n&&(r=n,n="utf8");const u=Xu.dirname(e);eo(u,((o,i)=>o?r(o):i?Zu.writeFile(e,t,n,r):void Qu.mkdirs(u,(u=>{if(u)return r(u);Zu.writeFile(e,t,n,r)}))))})),outputFileSync:function(e,...t){const n=Xu.dirname(e);if(Zu.existsSync(n))return Zu.writeFileSync(e,...t);Qu.mkdirsSync(n),Zu.writeFileSync(e,...t)}};!function(e){e.exports=Object.assign({},_t,Jn,lr,Nr,lu,Iu,Cn,ju,qu,to,Kn,wr);const t=n;Object.getOwnPropertyDescriptor(t,"promises")&&Object.defineProperty(e.exports,"promises",{get:()=>t.promises})}(Ot);const no=$.exports("streamroller:fileNameFormatter"),ro=e;const uo=$.exports("streamroller:fileNameParser"),oo=le.exports;const io=$.exports("streamroller:moveAndMaybeCompressFile"),so=Ot.exports,co=f;var ao=async(e,t,n)=>{if(n=function(e){const t={mode:parseInt("0600",8),compress:!1},n=Object.assign({},t,e);return io(`_parseOption: moveAndMaybeCompressFile called with option=${JSON.stringify(n)}`),n}(n),e!==t){if(await so.pathExists(e))if(io(`moveAndMaybeCompressFile: moving file from ${e} to ${t} ${n.compress?"with":"without"} compress`),n.compress)await new Promise(((r,u)=>{let o=!1;const i=so.createWriteStream(t,{mode:n.mode,flags:"wx"}).on("open",(()=>{o=!0;const t=so.createReadStream(e).on("open",(()=>{t.pipe(co.createGzip()).pipe(i)})).on("error",(t=>{io(`moveAndMaybeCompressFile: error reading ${e}`,t),i.destroy(t)}))})).on("finish",(()=>{io(`moveAndMaybeCompressFile: finished compressing ${t}, deleting ${e}`),so.unlink(e).then(r).catch((t=>{io(`moveAndMaybeCompressFile: error deleting ${e}, truncating instead`,t),so.truncate(e).then(r).catch((t=>{io(`moveAndMaybeCompressFile: error truncating ${e}`,t),u(t)}))}))})).on("error",(e=>{o?(io(`moveAndMaybeCompressFile: error writing ${t}, deleting`,e),so.unlink(t).then((()=>{u(e)})).catch((e=>{io(`moveAndMaybeCompressFile: error deleting ${t}`,e),u(e)}))):(io(`moveAndMaybeCompressFile: error creating ${t}`,e),u(e))}))})).catch((()=>{}));else{io(`moveAndMaybeCompressFile: renaming ${e} to ${t}`);try{await so.move(e,t,{overwrite:!0})}catch(n){if(io(`moveAndMaybeCompressFile: error renaming ${e} to ${t}`,n),"ENOENT"!==n.code){io("moveAndMaybeCompressFile: trying copy+truncate instead");try{await so.copy(e,t,{overwrite:!0}),await so.truncate(e)}catch(e){io("moveAndMaybeCompressFile: error copy+truncate",e)}}}}}else io("moveAndMaybeCompressFile: source and target are the same, not doing anything")};const lo=$.exports("streamroller:RollingFileWriteStream"),fo=Ot.exports,Do=e,po=t,Eo=()=>new Date,ho=le.exports,{Writable:Co}=a,mo=({file:e,keepFileExt:t,needsIndex:n,alwaysIncludeDate:r,compress:u,fileNameSep:o})=>{let i=o||".";const s=ro.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})=>(no(`_formatFileName: date=${e}, index=${t}`),D.reduce(((n,r)=>r(n,t,e)),s))},Fo=({file:e,keepFileExt:t,pattern:n,fileNameSep:r})=>{let u=r||".";const o="__NOT_MATCHING__";let i=[(e,t)=>e.endsWith(".gz")?(uo("it is gzipped"),t.isCompressed=!0,e.slice(0,-3)):e,t?t=>t.startsWith(e.name)&&t.endsWith(e.ext)?(uo("it starts and ends with the right things"),t.slice(e.name.length+1,-1*e.ext.length)):o:t=>t.startsWith(e.base)?(uo("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];uo("items: ",r,", indexStr: ",o);let i=e;void 0!==o&&o.match(/^\d+$/)?(i=e.slice(0,-1*(o.length+1)),uo(`dateStr is ${i}`),n&&!i&&(i=o,o="0")):o="0";try{const r=oo.parse(n,i,new Date(0,0));return oo.asString(n,r)!==i?e:(t.index=parseInt(o,10),t.date=i,t.timestamp=r.getTime(),"")}catch(t){return uo(`Problem parsing ${i} as ${n}, error was: `,t),e}}:(e,t)=>e.match(/^\d+$/)?(uo("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}},yo=ao;var go=class extends Co{constructor(e,t){if(lo(`constructor: creating RollingFileWriteStream. path=${e}`),"string"!=typeof e||0===e.length)throw new Error(`Invalid filename: ${e}`);if(e.endsWith(Do.sep))throw new Error(`Filename is a directory: ${e}`);0===e.indexOf(`~${Do.sep}`)&&(e=e.replace("~",po.homedir())),super(t),this.options=this._parseOption(t),this.fileObject=Do.parse(e),""===this.fileObject.dir&&(this.fileObject=Do.parse(Do.join(process.cwd(),e))),this.fileFormatter=mo({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 lo(`_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((()=>{lo(`_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())&&(lo(`_shouldRoll: rolling because dateChanged? ${this._dateChanged()} or tooBig? ${this._tooBig()}`),await this._roll())}_dateChanged(){return this.state.currentDate&&this.state.currentDate!==ho(this.options.pattern,Eo())}_tooBig(){return this.state.currentSize>=this.options.maxSize}_roll(){return lo("_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--){lo(`_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 yo(e,n,r)}this.state.currentSize=0,this.state.currentDate=this.state.currentDate?ho(this.options.pattern,Eo()):null,lo(`_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 fo.readdir(this.fileObject.dir).catch((()=>[]));lo(`_getExistingFiles: files=${e}`);const t=e.map((e=>this.fileNameParser(e))).filter((e=>e)),n=e=>(e.timestamp?e.timestamp:Eo().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 fo.mkdirSync(e,{recursive:!0})}catch(n){if("ENOENT"===n.code)return t(Do.dirname(e)),t(e);if("EEXIST"!==n.code&&"EROFS"!==n.code)throw n;try{if(fo.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;fo.appendFileSync(e,"",(r={...n},u="flags",r["flag"]=r[u],delete r[u],r)),this.currentFileStream=fo.createWriteStream(e,n),this.currentFileStream.on("error",(e=>{this.emit("error",e)}))}async _clean(){const e=await this._getExistingFiles();if(lo(`_clean: numToKeep = ${this.options.numToKeep}, existingFiles = ${e.length}`),lo("_clean: existing files are: ",e),this._tooManyFiles(e.length)){const n=e.slice(0,e.length-this.options.numToKeep).map((e=>Do.format({dir:this.fileObject.dir,base:e.filename})));await(t=n,lo(`deleteFiles: files to delete: ${t}`),Promise.all(t.map((e=>fo.unlink(e).catch((t=>{lo(`deleteFiles: error when unlinking ${e}, ignoring. Error was ${t}`)}))))))}var t}_tooManyFiles(e){return this.options.numToKeep>0&&e>this.options.numToKeep}};const Ao=go;var vo=class extends Ao{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 So=go;var wo={RollingFileWriteStream:go,RollingFileStream:vo,DateRollingFileStream:class extends So{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 Oo=$.exports("log4js:file"),_o=e,bo=wo,Bo=t,Io=Bo.EOL;let xo=!1;const Po=new Set;function No(){Po.forEach((e=>{e.sighupHandler()}))}wt.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){if("string"!=typeof e||0===e.length)throw new Error(`Invalid filename: ${e}`);if(e.endsWith(_o.sep))throw new Error(`Filename is a directory: ${e}`);function i(e,t,n,r){const u=new bo.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}e=e.replace(new RegExp(`^~(?=${_o.sep}.+)`),Bo.homedir()),e=_o.normalize(e),Oo("Creating file appender (",e,", ",n,", ",r=r||0===r?r:5,", ",u,", ",o,")");let s=i(e,n,r,u);const c=function(e){if(s.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))}s.write(t(e,o)+Io,"utf8")||process.emit("log4js:pause",!0)}};return c.reopen=function(){s.end((()=>{s=i(e,n,r,u)}))},c.sighupHandler=function(){Oo("SIGHUP handler called."),c.reopen()},c.shutdown=function(e){Po.delete(c),0===Po.size&&xo&&(process.removeListener("SIGHUP",No),xo=!1),s.end("","utf-8",e)},Po.add(c),xo||(process.on("SIGHUP",No),xo=!0),c}(e.filename,n,e.maxLogSize,e.backups,e,e.timezoneOffset)};var To={};const ko=wo,Ro=t.EOL;function Mo(e,t,n,r,u){r.maxSize=r.maxLogSize;const o=function(e,t,n){const r=new ko.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)+Ro,"utf8")||process.emit("log4js:pause",!0))};return i.shutdown=function(e){o.end("","utf-8",e)},i}To.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,Mo(e.filename,e.pattern,n,e,e.timezoneOffset)};var Lo={};const jo=$.exports("log4js:fileSync"),$o=e,Ho=n,Go=t,Uo=Go.EOL;function Vo(e,t){const n=e=>{try{return Ho.mkdirSync(e,{recursive:!0})}catch(t){if("ENOENT"===t.code)return n($o.dirname(e)),n(e);if("EEXIST"!==t.code&&"EROFS"!==t.code)throw t;try{if(Ho.statSync(e).isDirectory())return e;throw t}catch(e){throw t}}};n($o.dirname(e)),Ho.appendFileSync(e,"",{mode:t.mode,flag:t.flags})}class Jo{constructor(e,t,n,r){if(jo("In RollingFileStream"),t<0)throw new Error(`maxLogSize (${t}) should be > 0`);this.filename=e,this.size=t,this.backups=n,this.options=r,this.currentSize=0,this.currentSize=function(e){let t=0;try{t=Ho.statSync(e).size}catch(t){Vo(e,r)}return t}(this.filename)}shouldRoll(){return jo("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(`^${$o.basename(e)}`);function r(e){return n.test(e)}function u(t){return parseInt(t.slice(`${$o.basename(e)}.`.length),10)||0}function o(e,t){return u(e)-u(t)}function i(n){const r=u(n);if(jo(`Index of ${n} is ${r}`),0===t.backups)Ho.truncateSync(e,0);else if(r ${e}.${r+1}`),Ho.renameSync($o.join($o.dirname(e),n),`${e}.${r+1}`)}}jo("Rolling, rolling, rolling"),jo("Renaming the old files"),Ho.readdirSync($o.dirname(e)).filter(r).sort(o).reverse().forEach(i)}write(e,t){const n=this;jo("in write"),this.shouldRoll()&&(this.currentSize=0,this.roll(this.filename)),jo("writing the chunk to the file"),n.currentSize+=e.length,Ho.appendFileSync(n.filename,e)}}Lo.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){if("string"!=typeof e||0===e.length)throw new Error(`Invalid filename: ${e}`);if(e.endsWith($o.sep))throw new Error(`Filename is a directory: ${e}`);e=e.replace(new RegExp(`^~(?=${$o.sep}.+)`),Go.homedir()),e=$o.normalize(e),jo("Creating fileSync appender (",e,", ",n,", ",r=r||0===r?r:5,", ",u,", ",o,")");const i=function(e,t,n){let r;var o;return t?r=new Jo(e,t,n,u):(Vo(o=e,u),r={write(e){Ho.appendFileSync(o,e)}}),r}(e,n,r);return e=>{i.write(t(e,o)+Uo)}}(e.filename,n,e.maxLogSize,e.backups,r,e.timezoneOffset)};var Wo={};const zo=$.exports("log4js:tcp"),Ko=D;Wo.configure=function(e,t){zo(`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){zo("Writing log event to socket"),n=u.write(`${t(e)}${i}`,"utf8")}function c(){let e;for(zo("emptying buffer");e=r.shift();)s(e)}function a(e){n?s(e):(zo("buffering log event because it cannot write at the moment"),r.push(e))}return function t(){zo(`appender creating socket to ${e.host||"localhost"}:${e.port||5e3}`),i=`${e.endMsg||"__LOG4JS__"}`,u=Ko.createConnection(e.port||5e3,e.host||"localhost"),u.on("connect",(()=>{zo("socket connected"),c(),n=!0})),u.on("drain",(()=>{zo("drain event received, emptying buffer"),n=!0,c()})),u.on("timeout",u.end.bind(u)),u.on("error",(e=>{zo("connection error",e),n=!1,c()})),u.on("close",t)}(),a.shutdown=function(e){zo("shutdown called"),r.length&&o?(zo("buffer has items, waiting 100ms to empty"),o-=1,setTimeout((()=>{a.shutdown(e)}),100)):(u.removeAllListeners("close"),u.end(e))},a}(e,n)};const qo=e,Yo=$.exports("log4js:appenders"),Zo=ae,Xo=ft,Qo=xe,ei=_e,ti=Dt,ni=new Map;ni.set("console",ht),ni.set("stdout",mt),ni.set("stderr",Ft),ni.set("logLevelFilter",yt),ni.set("categoryFilter",gt),ni.set("noLogFilter",vt),ni.set("file",wt),ni.set("dateFile",To),ni.set("fileSync",Lo),ni.set("tcp",Wo);const ri=new Map,ui=(e,t)=>{let n;try{const t=`${e}.cjs`;n=require.resolve(t),Yo("Loading module from ",t)}catch(t){n=e,Yo("Loading module from ",e)}try{return require(n)}catch(n){return void Zo.throwExceptionIf(t,"MODULE_NOT_FOUND"!==n.code,`appender "${e}" could not be loaded (error was: ${n})`)}},oi=new Set,ii=(e,t)=>{if(ri.has(e))return ri.get(e);if(!t.appenders[e])return!1;if(oi.has(e))throw new Error(`Dependency loop detected for appender ${e}.`);oi.add(e),Yo(`Creating appender ${e}`);const n=si(e,t);return oi.delete(e),ri.set(e,n),n},si=(e,t)=>{const n=t.appenders[e],r=n.type.configure?n.type:((e,t)=>ni.get(e)||ui(`./${e}`,t)||ui(e,t)||require.main&&require.main.filename&&ui(qo.join(qo.dirname(require.main.filename),e),t)||ui(qo.join(process.cwd(),e),t))(n.type,t);return Zo.throwExceptionIf(t,Zo.not(r),`appender "${e}" is not valid (type "${n.type}" could not be found)`),r.appender&&(process.emitWarning(`Appender ${n.type} exports an appender function.`,"DeprecationWarning","log4js-node-DEP0001"),Yo("[log4js-node-DEP0001]",`DEPRECATION: Appender ${n.type} exports an appender function.`)),r.shutdown&&(process.emitWarning(`Appender ${n.type} exports a shutdown function.`,"DeprecationWarning","log4js-node-DEP0002"),Yo("[log4js-node-DEP0002]",`DEPRECATION: Appender ${n.type} exports a shutdown function.`)),Yo(`${e}: clustering.isMaster ? ${Xo.isMaster()}`),Yo(`${e}: appenderModule is ${i.inspect(r)}`),Xo.onlyOnMaster((()=>(Yo(`calling appenderModule.configure for ${e} / ${n.type}`),r.configure(ti.modifyConfig(n),ei,(e=>ii(e,t)),Qo))),(()=>{}))},ci=e=>{if(ri.clear(),oi.clear(),!e)return;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||"multiprocess"===e.appenders[n].type)&&ii(n,e)}))},ai=()=>{ci()};ai(),Zo.addListener((e=>{Zo.throwExceptionIf(e,Zo.not(Zo.anObject(e.appenders)),'must have a property "appenders" of type object.');const t=Object.keys(e.appenders);Zo.throwExceptionIf(e,Zo.not(t.length),"must define at least one appender."),t.forEach((t=>{Zo.throwExceptionIf(e,Zo.not(e.appenders[t].type),`appender "${t}" is not valid (must be an object with property "type")`)}))})),Zo.addListener(ci),Pe.exports=ri,Pe.exports.init=ai;var li={exports:{}};!function(e){const t=$.exports("log4js:categories"),n=ae,r=xe,u=Pe.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.slice(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=>{if(o.clear(),!e)return;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()};a(),n.addListener(c);const l=e=>{if(t(`configForCategory: searching for config for ${e}`),o.has(e))return t(`configForCategory: ${e} exists in config, returning it`),o.get(e);let n;return e.indexOf(".")>0?(t(`configForCategory: ${e} has hierarchy, cloning from parents`),n={...l(e.slice(0,e.lastIndexOf(".")))}):(o.has("default")||c({categories:{default:{appenders:["out"],level:"OFF"}}}),t("configForCategory: cloning default category"),n={...o.get("default")}),o.set(e,n),n};e.exports=o,e.exports=Object.assign(e.exports,{appendersForCategory:e=>l(e).appenders,getLevelForCategory:e=>l(e).level,setLevelForCategory:(e,t)=>{l(e).level=t},getEnableCallStackForCategory:e=>!0===l(e).enableCallStack,setEnableCallStackForCategory:(e,t)=>{l(e).enableCallStack=t},init:a})}(li);const fi=$.exports("log4js:logger"),Di=Xe,di=xe,pi=ft,Ei=li.exports,hi=ae,Ci=/at (?:(.+)\s+\()?(?:(.+?):(\d+)(?::(\d+))?|([^)]+))\)?/;function mi(e,t=4){try{const n=e.stack.split("\n").slice(t);if(!n.length)return null;const r=Ci.exec(n[0]);if(r&&6===r.length){let e="",t="",u="";return r[1]&&""!==r[1]&&([t,u]=r[1].replace(/[[\]]/g,"").split(" as "),u=u||"",t.includes(".")&&([e,t]=t.split("."))),{fileName:r[2],lineNumber:parseInt(r[3],10),columnNumber:parseInt(r[4],10),callStack:n.join("\n"),className:e,functionName:t,functionAlias:u,callerName:r[1]||""}}console.error("log4js.logger - defaultParseCallStack error")}catch(e){console.error("log4js.logger - defaultParseCallStack error",e)}return null}let Fi=class{constructor(e){if(!e)throw new Error("No category provided.");this.category=e,this.context={},this.callStackSkipIndex=0,this.parseCallStack=mi,fi(`Logger created (${this.category}, ${this.level})`)}get level(){return di.getLevel(Ei.getLevelForCategory(this.category),di.OFF)}set level(e){Ei.setLevelForCategory(this.category,di.getLevel(e,this.level))}get useCallStack(){return Ei.getEnableCallStackForCategory(this.category)}set useCallStack(e){Ei.setEnableCallStackForCategory(this.category,!0===e)}get callStackLinesToSkip(){return this.callStackSkipIndex}set callStackLinesToSkip(e){if("number"!=typeof e)throw new TypeError("Must be a number");if(e<0)throw new RangeError("Must be >= 0");this.callStackSkipIndex=e}log(e,...t){const n=di.getLevel(e);n?this.isLevelEnabled(n)&&this._log(n,t):hi.validIdentifier(e)&&t.length>0?(this.log(di.WARN,"log4js:logger.log: valid log-level not found as first parameter given:",e),this.log(di.INFO,`[${e}]`,...t)):this.log(di.INFO,e,...t)}isLevelEnabled(e){return this.level.isLessThanOrEqualTo(e)}_log(e,t){fi(`sending log data (${e}) to appenders`);const n=t.find((e=>e instanceof Error));let r;if(this.useCallStack){try{n&&(r=this.parseCallStack(n,this.callStackSkipIndex+1))}catch(e){}r=r||this.parseCallStack(new Error,this.callStackSkipIndex+3+1)}const u=new Di(this.category,e,t,this.context,r,n);pi.send(u)}addContext(e,t){this.context[e]=t}removeContext(e){delete this.context[e]}clearContext(){this.context={}}setParseCallStackFunction(e){if("function"==typeof e)this.parseCallStack=e;else{if(void 0!==e)throw new TypeError("Invalid type passed to setParseCallStackFunction");this.parseCallStack=mi}}};function yi(e){const t=di.getLevel(e),n=t.toString().toLowerCase().replace(/_([a-z])/g,(e=>e[1].toUpperCase())),r=n[0].toUpperCase()+n.slice(1);Fi.prototype[`is${r}Enabled`]=function(){return this.isLevelEnabled(t)},Fi.prototype[n]=function(...e){this.log(t,...e)}}di.levels.forEach(yi),hi.addListener((()=>{di.levels.forEach(yi)}));var gi=Fi;const Ai=xe;function vi(e){return e.originalUrl||e.url}function Si(e,t){for(let n=0;n{if(void 0!==e._logging)return i();if("function"!=typeof t.nolog){const n=function(e){let t=null;if(e instanceof RegExp&&(t=e),"string"==typeof e&&(t=new RegExp(e)),Array.isArray(e)){const n=e.map((e=>e.source?e.source:e));t=new RegExp(n.join("|"))}return t}(t.nolog);if(n&&n.test(e.originalUrl))return i()}if(n.isLevelEnabled(r)||"auto"===t.level){const i=new Date,{writeHead:s}=o;e._logging=!0,o.writeHead=(e,t)=>{o.writeHead=s,o.writeHead(e,t),o.__statusCode=e,o.__headers=t||{}};let c=!1;const a=()=>{if(c)return;if(c=!0,"function"==typeof t.nolog&&!0===t.nolog(e,o))return void(e._logging=!1);o.responseTime=new Date-i,o.statusCode&&"auto"===t.level&&(r=Ai.INFO,o.statusCode>=300&&(r=Ai.WARN),o.statusCode>=400&&(r=Ai.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=Ai.getLevel(t.level,r))}return r}(o.statusCode,r,t.statusRules);const s=function(e,t,n){const r=[];return r.push({token:":url",replacement:vi(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;eSi(e,s)));t&&n.log(r,t)}else n.log(r,Si(u,s));t.context&&n.removeContext("res")};o.on("end",a),o.on("finish",a),o.on("error",a),o.on("close",a)}return i()}},Hi=Bi;let Gi=!1;function Ui(e){if(!Gi)return;Ii("Received log event ",e);Mi.appendersForCategory(e.categoryName).forEach((t=>{t(e)}))}function Vi(e){Gi&&Ji();let t=e;return"string"==typeof t&&(t=function(e){Ii(`Loading configuration from ${e}`);try{return JSON.parse(xi.readFileSync(e,"utf8"))}catch(t){throw new Error(`Problem reading config from file "${e}". Error was ${t.message}`,t)}}(e)),Ii(`Configuration is ${t}`),Ni.configure(Pi(t)),ji.onMessage(Ui),Gi=!0,Wi}function Ji(e=(()=>{})){if("function"!=typeof e)throw new TypeError("Invalid callback passed to shutdown");Ii("Shutdown called. Disabling all log writing."),Gi=!1;const t=Array.from(Ri.values());Ri.init(),Mi.init();const n=t.reduce(((e,t)=>t.shutdown?e+1:e),0);0===n&&(Ii("No appenders with shutdown functions found."),e());let r,u=0;function o(t){r=r||t,u+=1,Ii(`Appender shutdowns complete: ${u} / ${n}`),u>=n&&(Ii("All shutdown functions completed."),e(r))}Ii(`Found ${n} appenders with shutdown functions.`),t.filter((e=>e.shutdown)).forEach((e=>e.shutdown(o)))}const Wi={getLogger:function(e){return Gi||Vi(process.env.LOG4JS_CONFIG||{appenders:{out:{type:"stdout"}},categories:{default:{appenders:["out"],level:"OFF"}}}),new Li(e||"default")},configure:Vi,shutdown:Ji,connectLogger:$i,levels:ki,addLayout:Ti.addLayout,recording:function(){return Hi}};var zi=Wi;!function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.addCustomPLlugin=e.addCustomTask=e.hvigorTrace=void 0;const t=zi;e.hvigorTrace={totalTime:0,moduleNum:0,taskTime:{},isIncremental:!0,hasIncremental:!1,isParallel:!0,IS_DAEMON:!0,LOG_LEVEL:t.levels.INFO.levelStr,IS_HVIGORFILE_TYPE_CHECK:!1},e.addCustomTask=function(t){var n;let r=null!==(n=e.hvigorTrace.CUSTOM_TASKS)&&void 0!==n?n:[];r.length>0&&(r=r.filter((e=>e.NAME!==t.NAME))),r.push(t),e.hvigorTrace.CUSTOM_TASKS=r},e.addCustomPLlugin=function(t){var n;let r=null!==(n=e.hvigorTrace.CUSTOM_PLUGINS)&&void 0!==n?n:[];r.length>0&&(r=r.filter((e=>e.PLUGIN_ID!==t.PLUGIN_ID))),r.push({PLUGIN_ID:t.PLUGIN_ID}),e.hvigorTrace.CUSTOM_PLUGINS=r}}(j);var Ki,qi={};Ki=qi,Object.defineProperty(Ki,"__esModule",{value:!0}),Ki.isCI=void 0,Ki.isCI=function(){return!("false"===process.env.CI||!(process.env.BUILD_ID||process.env.BUILD_NUMBER||process.env.CI||process.env.CI_APP_ID||process.env.CI_BUILD_ID||process.env.CI_BUILD_NUMBER||process.env.CI_NAME||process.env.CONTINUOUS_INTEGRATION||process.env.RUN_ID||Ki.name))};var Yi={};!function(e){var t=p&&p.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.hashFile=e.hash=e.createHash=void 0;const r=t(d),u=t(n);e.createHash=(e="MD5")=>r.default.createHash(e);e.hash=(t,n)=>(0,e.createHash)(n).update(t).digest("hex");e.hashFile=(t,n)=>{if(u.default.existsSync(t))return(0,e.hash)(u.default.readFileSync(t,"utf-8"),n)}}(Yi);var Zi={},Xi={},Qi={};Object.defineProperty(Qi,"__esModule",{value:!0}),Qi.Unicode=void 0;class es{}Qi.Unicode=es,es.SPACE_SEPARATOR=/[\u1680\u2000-\u200A\u202F\u205F\u3000]/,es.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]/,es.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(Xi,"__esModule",{value:!0}),Xi.JudgeUtil=void 0;const ts=Qi;Xi.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&&ts.Unicode.SPACE_SEPARATOR.test(e)}static isIdStartChar(e){return"string"==typeof e&&(e>="a"&&e<="z"||e>="A"&&e<="Z"||"$"===e||"_"===e||ts.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||ts.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 ns=p&&p.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Zi,"__esModule",{value:!0}),Zi.parseJsonText=Zi.parseJsonFile=void 0;const rs=ns(n),us=ns(t),os=ns(e),is=Xi;var ss;!function(e){e[e.Char=0]="Char",e[e.EOF=1]="EOF",e[e.Identifier=2]="Identifier"}(ss||(ss={}));let cs,as,ls,fs,Ds,ds,ps="start",Es=[],hs=0,Cs=1,ms=0,Fs=!1,ys="default",gs="'",As=1;function vs(e,t=!1){as=String(e),ps="start",Es=[],hs=0,Cs=1,ms=0,fs=void 0,Fs=t;do{cs=Ss(),xs[ps]()}while("eof"!==cs.type);return fs}function Ss(){for(ys="default",Ds="",gs="'",As=1;;){ds=ws();const e=_s[ys]();if(e)return e}}function ws(){if(as[hs])return String.fromCodePoint(as.codePointAt(hs))}function Os(){const e=ws();return"\n"===e?(Cs++,ms=0):e?ms+=e.length:ms++,e&&(hs+=e.length),e}Zi.parseJsonFile=function(e,t=!1,n="utf-8"){const r=rs.default.readFileSync(os.default.resolve(e),{encoding:n});try{return vs(r,t)}catch(t){if(t instanceof SyntaxError){const n=t.message.split("at");if(2===n.length)throw new Error(`${n[0].trim()}${us.default.EOL}\t at ${e}:${n[1].trim()}`)}throw new Error(`${e} is not in valid JSON/JSON5 format.`)}},Zi.parseJsonText=vs;const _s={default(){switch(ds){case"/":return Os(),void(ys="comment");case void 0:return Os(),bs("eof")}if(!is.JudgeUtil.isIgnoreChar(ds)&&!is.JudgeUtil.isSpaceSeparator(ds))return _s[ps]();Os()},start(){ys="value"},beforePropertyName(){switch(ds){case"$":case"_":return Ds=Os(),void(ys="identifierName");case"\\":return Os(),void(ys="identifierNameStartEscape");case"}":return bs("punctuator",Os());case'"':case"'":return gs=ds,Os(),void(ys="string")}if(is.JudgeUtil.isIdStartChar(ds))return Ds+=Os(),void(ys="identifierName");throw ks(ss.Char,Os())},afterPropertyName(){if(":"===ds)return bs("punctuator",Os());throw ks(ss.Char,Os())},beforePropertyValue(){ys="value"},afterPropertyValue(){switch(ds){case",":case"}":return bs("punctuator",Os())}throw ks(ss.Char,Os())},beforeArrayValue(){if("]"===ds)return bs("punctuator",Os());ys="value"},afterArrayValue(){switch(ds){case",":case"]":return bs("punctuator",Os())}throw ks(ss.Char,Os())},end(){throw ks(ss.Char,Os())},comment(){switch(ds){case"*":return Os(),void(ys="multiLineComment");case"/":return Os(),void(ys="singleLineComment")}throw ks(ss.Char,Os())},multiLineComment(){switch(ds){case"*":return Os(),void(ys="multiLineCommentAsterisk");case void 0:throw ks(ss.Char,Os())}Os()},multiLineCommentAsterisk(){switch(ds){case"*":return void Os();case"/":return Os(),void(ys="default");case void 0:throw ks(ss.Char,Os())}Os(),ys="multiLineComment"},singleLineComment(){switch(ds){case"\n":case"\r":case"\u2028":case"\u2029":return Os(),void(ys="default");case void 0:return Os(),bs("eof")}Os()},value(){switch(ds){case"{":case"[":return bs("punctuator",Os());case"n":return Os(),Bs("ull"),bs("null",null);case"t":return Os(),Bs("rue"),bs("boolean",!0);case"f":return Os(),Bs("alse"),bs("boolean",!1);case"-":case"+":return"-"===Os()&&(As=-1),void(ys="numerical");case".":case"0":case"I":case"N":return void(ys="numerical");case'"':case"'":return gs=ds,Os(),Ds="",void(ys="string")}if(void 0===ds||!is.JudgeUtil.isDigitWithoutZero(ds))throw ks(ss.Char,Os());ys="numerical"},numerical(){switch(ds){case".":return Ds=Os(),void(ys="decimalPointLeading");case"0":return Ds=Os(),void(ys="zero");case"I":return Os(),Bs("nfinity"),bs("numeric",As*(1/0));case"N":return Os(),Bs("aN"),bs("numeric",NaN)}if(void 0!==ds&&is.JudgeUtil.isDigitWithoutZero(ds))return Ds=Os(),void(ys="decimalInteger");throw ks(ss.Char,Os())},zero(){switch(ds){case".":case"e":case"E":return void(ys="decimal");case"x":case"X":return Ds+=Os(),void(ys="hexadecimal")}return bs("numeric",0)},decimalInteger(){switch(ds){case".":case"e":case"E":return void(ys="decimal")}if(!is.JudgeUtil.isDigit(ds))return bs("numeric",As*Number(Ds));Ds+=Os()},decimal(){switch(ds){case".":Ds+=Os(),ys="decimalFraction";break;case"e":case"E":Ds+=Os(),ys="decimalExponent"}},decimalPointLeading(){if(is.JudgeUtil.isDigit(ds))return Ds+=Os(),void(ys="decimalFraction");throw ks(ss.Char,Os())},decimalFraction(){switch(ds){case"e":case"E":return Ds+=Os(),void(ys="decimalExponent")}if(!is.JudgeUtil.isDigit(ds))return bs("numeric",As*Number(Ds));Ds+=Os()},decimalExponent(){switch(ds){case"+":case"-":return Ds+=Os(),void(ys="decimalExponentSign")}if(is.JudgeUtil.isDigit(ds))return Ds+=Os(),void(ys="decimalExponentInteger");throw ks(ss.Char,Os())},decimalExponentSign(){if(is.JudgeUtil.isDigit(ds))return Ds+=Os(),void(ys="decimalExponentInteger");throw ks(ss.Char,Os())},decimalExponentInteger(){if(!is.JudgeUtil.isDigit(ds))return bs("numeric",As*Number(Ds));Ds+=Os()},hexadecimal(){if(is.JudgeUtil.isHexDigit(ds))return Ds+=Os(),void(ys="hexadecimalInteger");throw ks(ss.Char,Os())},hexadecimalInteger(){if(!is.JudgeUtil.isHexDigit(ds))return bs("numeric",As*Number(Ds));Ds+=Os()},identifierNameStartEscape(){if("u"!==ds)throw ks(ss.Char,Os());Os();const e=Is();switch(e){case"$":case"_":break;default:if(!is.JudgeUtil.isIdStartChar(e))throw ks(ss.Identifier)}Ds+=e,ys="identifierName"},identifierName(){switch(ds){case"$":case"_":case"‌":case"‍":return void(Ds+=Os());case"\\":return Os(),void(ys="identifierNameEscape")}if(!is.JudgeUtil.isIdContinueChar(ds))return bs("identifier",Ds);Ds+=Os()},identifierNameEscape(){if("u"!==ds)throw ks(ss.Char,Os());Os();const e=Is();switch(e){case"$":case"_":case"‌":case"‍":break;default:if(!is.JudgeUtil.isIdContinueChar(e))throw ks(ss.Identifier)}Ds+=e,ys="identifierName"},string(){switch(ds){case"\\":return Os(),void(Ds+=function(){const e=ws(),t=function(){switch(ws()){case"b":return Os(),"\b";case"f":return Os(),"\f";case"n":return Os(),"\n";case"r":return Os(),"\r";case"t":return Os(),"\t";case"v":return Os(),"\v"}return}();if(t)return t;switch(e){case"0":if(Os(),is.JudgeUtil.isDigit(ws()))throw ks(ss.Char,Os());return"\0";case"x":return Os(),function(){let e="",t=ws();if(!is.JudgeUtil.isHexDigit(t))throw ks(ss.Char,Os());if(e+=Os(),t=ws(),!is.JudgeUtil.isHexDigit(t))throw ks(ss.Char,Os());return e+=Os(),String.fromCodePoint(parseInt(e,16))}();case"u":return Os(),Is();case"\n":case"\u2028":case"\u2029":return Os(),"";case"\r":return Os(),"\n"===ws()&&Os(),""}if(void 0===e||is.JudgeUtil.isDigitWithoutZero(e))throw ks(ss.Char,Os());return Os()}());case'"':case"'":if(ds===gs){const e=bs("string",Ds);return Os(),e}return void(Ds+=Os());case"\n":case"\r":case void 0:throw ks(ss.Char,Os());case"\u2028":case"\u2029":!function(e){console.warn(`JSON5: '${Ts(e)}' in strings is not valid ECMAScript; consider escaping.`)}(ds)}Ds+=Os()}};function bs(e,t){return{type:e,value:t,line:Cs,column:ms}}function Bs(e){for(const t of e){if(ws()!==t)throw ks(ss.Char,Os());Os()}}function Is(){let e="",t=4;for(;t-- >0;){const t=ws();if(!is.JudgeUtil.isHexDigit(t))throw ks(ss.Char,Os());e+=Os()}return String.fromCodePoint(parseInt(e,16))}const xs={start(){if("eof"===cs.type)throw ks(ss.EOF);Ps()},beforePropertyName(){switch(cs.type){case"identifier":case"string":return ls=cs.value,void(ps="afterPropertyName");case"punctuator":return void Ns();case"eof":throw ks(ss.EOF)}},afterPropertyName(){if("eof"===cs.type)throw ks(ss.EOF);ps="beforePropertyValue"},beforePropertyValue(){if("eof"===cs.type)throw ks(ss.EOF);Ps()},afterPropertyValue(){if("eof"===cs.type)throw ks(ss.EOF);switch(cs.value){case",":return void(ps="beforePropertyName");case"}":Ns()}},beforeArrayValue(){if("eof"===cs.type)throw ks(ss.EOF);"punctuator"!==cs.type||"]"!==cs.value?Ps():Ns()},afterArrayValue(){if("eof"===cs.type)throw ks(ss.EOF);switch(cs.value){case",":return void(ps="beforeArrayValue");case"]":Ns()}},end(){}};function Ps(){const e=function(){let e;switch(cs.type){case"punctuator":switch(cs.value){case"{":e={};break;case"[":e=[]}break;case"null":case"boolean":case"numeric":case"string":e=cs.value}return e}();if(Fs&&"object"==typeof e&&(e._line=Cs,e._column=ms),void 0===fs)fs=e;else{const t=Es[Es.length-1];Array.isArray(t)?Fs&&"object"!=typeof e?t.push({value:e,_line:Cs,_column:ms}):t.push(e):t[ls]=Fs&&"object"!=typeof e?{value:e,_line:Cs,_column:ms}:e}!function(e){if(e&&"object"==typeof e)Es.push(e),ps=Array.isArray(e)?"beforeArrayValue":"beforePropertyName";else{const e=Es[Es.length-1];ps=e?Array.isArray(e)?"afterArrayValue":"afterPropertyValue":"end"}}(e)}function Ns(){Es.pop();const e=Es[Es.length-1];ps=e?Array.isArray(e)?"afterArrayValue":"afterPropertyValue":"end"}function Ts(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 ks(e,t){let n="";switch(e){case ss.Char:n=void 0===t?`JSON5: invalid end of input at ${Cs}:${ms}`:`JSON5: invalid character '${Ts(t)}' at ${Cs}:${ms}`;break;case ss.EOF:n=`JSON5: invalid end of input at ${Cs}:${ms}`;break;case ss.Identifier:ms-=5,n=`JSON5: invalid identifier character at ${Cs}:${ms}`}const r=new Rs(n);return r.lineNumber=Cs,r.columnNumber=ms,r}class Rs extends SyntaxError{}var Ms={},Ls=p&&p.__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]}),js=p&&p.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),$s=p&&p.__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)&&Ls(t,e,n);return js(t,e),t},Hs=p&&p.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Ms,"__esModule",{value:!0}),Ms.isFileExists=Ms.offlinePluginConversion=Ms.executeCommand=Ms.getNpmPath=Ms.hasNpmPackInPaths=void 0;const Gs=r,Us=Hs(n),Vs=$s(e),Js=E,Ws=S;Ms.hasNpmPackInPaths=function(e,t){try{return require.resolve(e,{paths:[...t]}),!0}catch(e){return!1}},Ms.getNpmPath=function(){const e=process.execPath;return Vs.join(Vs.dirname(e),Js.NPM_TOOL)},Ms.executeCommand=function(e,t,n){0!==(0,Gs.spawnSync)(e,t,n).status&&(0,Ws.logErrorAndExit)(`Error: ${e} ${t} execute failed.See above for details.`)},Ms.offlinePluginConversion=function(e,t){return t.startsWith("file:")||t.endsWith(".tgz")?Vs.resolve(e,Js.HVIGOR,t.replace("file:","")):t},Ms.isFileExists=function(e){return Us.default.existsSync(e)&&Us.default.statSync(e).isFile()};var zs={};!function(u){var o=p&&p.__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]}),i=p&&p.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=p&&p.__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)&&o(t,e,n);return i(t,e),t},c=p&&p.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(u,"__esModule",{value:!0}),u.executeInstallPnpm=u.isPnpmInstalled=u.environmentHandler=u.checkNpmConifg=u.PNPM_VERSION=void 0;const a=r,l=s(n),f=c(t),D=s(e),d=E,h=S,C=Ms;u.PNPM_VERSION="7.30.0",u.checkNpmConifg=function(){const e=D.resolve(d.HVIGOR_PROJECT_ROOT_DIR,".npmrc"),t=D.resolve(f.default.homedir(),".npmrc");if((0,C.isFileExists)(e)||(0,C.isFileExists)(t))return;const n=(0,C.getNpmPath)(),r=(0,a.spawnSync)(n,["config","get","prefix"],{cwd:d.HVIGOR_PROJECT_ROOT_DIR});if(0!==r.status||!r.stdout)return void(0,h.logErrorAndExit)("Error: The hvigor depends on the npmrc file. Configure the npmrc file first.");const u=D.resolve(`${r.stdout}`.replace(/[\r\n]/gi,""),".npmrc");(0,C.isFileExists)(u)||(0,h.logErrorAndExit)("Error: The hvigor depends on the npmrc file. Configure the npmrc file first.")},u.environmentHandler=function(){process.env["npm_config_update-notifier"]="false"},u.isPnpmInstalled=function(){return!!l.existsSync(d.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH)&&(0,C.hasNpmPackInPaths)("pnpm",[d.HVIGOR_WRAPPER_TOOLS_HOME])},u.executeInstallPnpm=function(){(0,h.logInfo)(`Installing pnpm@${u.PNPM_VERSION}...`);const e=(0,C.getNpmPath)();!function(){const e=D.resolve(d.HVIGOR_WRAPPER_TOOLS_HOME,d.DEFAULT_PACKAGE_JSON);try{l.existsSync(d.HVIGOR_WRAPPER_TOOLS_HOME)||l.mkdirSync(d.HVIGOR_WRAPPER_TOOLS_HOME,{recursive:!0});const t={dependencies:{}};t.dependencies[d.PNPM]=u.PNPM_VERSION,l.writeFileSync(e,JSON.stringify(t))}catch(t){(0,h.logErrorAndExit)(`Error: EPERM: operation not permitted,create ${e} failed.`)}}(),(0,C.executeCommand)(e,["install","pnpm"],{cwd:d.HVIGOR_WRAPPER_TOOLS_HOME,stdio:["inherit","inherit","inherit"],env:process.env}),(0,h.logInfo)("Pnpm install success.")}}(zs);var Ks=p&&p.__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]}),qs=p&&p.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Ys=p&&p.__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)&&Ks(t,e,n);return qs(t,e),t},Zs=p&&p.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(L,"__esModule",{value:!0});var Xs=L.initProjectWorkSpace=void 0;const Qs=Ys(n),ec=Zs(t),tc=Ys(e),nc=Zs(u),rc=j,uc=E,oc=qi,ic=Yi,sc=Zi,cc=S,ac=Ms,lc=zs;let fc,Dc,dc;function pc(e,t,n){return void 0!==n.dependencies&&(0,ac.offlinePluginConversion)(uc.HVIGOR_PROJECT_ROOT_DIR,t.dependencies[e])===tc.normalize(n.dependencies[e])}Xs=L.initProjectWorkSpace=function(){if(fc=function(){const e=tc.resolve(uc.HVIGOR_PROJECT_WRAPPER_HOME,uc.DEFAULT_HVIGOR_CONFIG_JSON_FILE_NAME);Qs.existsSync(e)||(0,cc.logErrorAndExit)(`Error: Hvigor config file ${e} does not exist.`);return(0,sc.parseJsonFile)(e)}(),dc=function(e){let t;t=function(e){const t=e.hvigorVersion;if(t.startsWith("file:")||t.endsWith(".tgz"))return!1;const n=e.dependencies,r=Object.getOwnPropertyNames(n);for(const e of r){const t=n[e];if(t.startsWith("file:")||t.endsWith(".tgz"))return!1}if(1===r.length&&"@ohos/hvigor-ohos-plugin"===r[0])return t>"2.5.0";return!1}(e)?function(e){let t=`${uc.HVIGOR_ENGINE_PACKAGE_NAME}@${e.hvigorVersion}`;const n=e.dependencies;if(n){Object.getOwnPropertyNames(n).sort().forEach((e=>{t+=`,${e}@${n[e]}`}))}return(0,ic.hash)(t)}(e):(0,ic.hash)(nc.default.cwd());return tc.resolve(ec.default.homedir(),".hvigor","project_caches",t)}(fc),Dc=function(){const e=tc.resolve(dc,uc.WORK_SPACE,uc.DEFAULT_PACKAGE_JSON);return Qs.existsSync(e)?(0,sc.parseJsonFile)(e):{dependencies:{}}}(),function(){const e=tc.resolve(uc.HVIGOR_USER_HOME,uc.DEFAULT_HVIGOR_CONFIG_JSON_FILE_NAME);if(Qs.existsSync(e))(0,sc.parseJsonFile)(e)}(),!(0,ac.hasNpmPackInPaths)(uc.HVIGOR_ENGINE_PACKAGE_NAME,[tc.join(dc,uc.WORK_SPACE)])||(0,ac.offlinePluginConversion)(uc.HVIGOR_PROJECT_ROOT_DIR,fc.hvigorVersion)!==Dc.dependencies[uc.HVIGOR_ENGINE_PACKAGE_NAME]||!function(){function e(e){const t=null==e?void 0:e.dependencies;return void 0===t?0:Object.getOwnPropertyNames(t).length}const t=e(fc),n=e(Dc);if(t+1!==n)return!1;for(const e in null==fc?void 0:fc.dependencies)if(!(0,ac.hasNpmPackInPaths)(e,[tc.join(dc,uc.WORK_SPACE)])||!pc(e,fc,Dc))return!1;return!0}())try{const e=nc.default.hrtime();(0,lc.checkNpmConifg)(),function(){(0,cc.logInfo)("Hvigor installing...");for(const e in fc.dependencies)fc.dependencies[e]&&(fc.dependencies[e]=(0,ac.offlinePluginConversion)(uc.HVIGOR_PROJECT_ROOT_DIR,fc.dependencies[e]));const e={dependencies:{...fc.dependencies}};e.dependencies[uc.HVIGOR_ENGINE_PACKAGE_NAME]=(0,ac.offlinePluginConversion)(uc.HVIGOR_PROJECT_ROOT_DIR,fc.hvigorVersion);const t=tc.join(dc,uc.WORK_SPACE);try{Qs.mkdirSync(t,{recursive:!0});const n=tc.resolve(t,uc.DEFAULT_PACKAGE_JSON);Qs.writeFileSync(n,JSON.stringify(e))}catch(e){(0,cc.logErrorAndExit)(e)}(function(){const e=["config","set","store-dir",uc.HVIGOR_PNPM_STORE_PATH],t={cwd:tc.join(dc,uc.WORK_SPACE),stdio:["inherit","inherit","inherit"]};(0,ac.executeCommand)(uc.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH,e,t)})(),function(){const e=["install"];(0,oc.isCI)()&&e.push("--no-frozen-lockfile");const t={cwd:tc.join(dc,uc.WORK_SPACE),stdio:["inherit","inherit","inherit"]};(0,ac.executeCommand)(uc.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH,e,t)}(),(0,cc.logInfo)("Hvigor install success.")}();const t=nc.default.hrtime(e);rc.hvigorTrace.HVIGOR_INSTALL_TIME=1e9*t[0]+t[1]}catch(e){!function(){const e=tc.join(dc,uc.WORK_SPACE);if((0,cc.logInfo)("Hvigor cleaning..."),!Qs.existsSync(e))return;const t=Qs.readdirSync(e);if(!t||0===t.length)return;const n=tc.resolve(dc,"node_modules","@ohos","hvigor","bin","hvigor.js");Qs.existsSync(n)&&(0,ac.executeCommand)(nc.default.argv[0],[n,"--stop-daemon"],{});try{t.forEach((t=>{Qs.rmSync(tc.resolve(e,t),{recursive:!0})}))}catch(t){(0,cc.logErrorAndExit)(`The hvigor build tool cannot be installed. Please manually clear the workspace directory and synchronize the project again.\n\n Workspace Path: ${e}.`)}}()}return dc},function(){zs.environmentHandler(),zs.isPnpmInstalled()||(zs.checkNpmConifg(),zs.executeInstallPnpm());const t=Xs();b(e.join(t,E.WORK_SPACE))}(); \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/hvigorw b/code/DocsSample/ArkTSUtilsDocModule/hvigorw deleted file mode 100644 index 6c7cb1aaea..0000000000 --- a/code/DocsSample/ArkTSUtilsDocModule/hvigorw +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash - -# ---------------------------------------------------------------------------- -#/* -# * Copyright (c) 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 -# * -# * 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. -# */ -# ---------------------------------------------------------------------------- -# ---------------------------------------------------------------------------- -# Hvigor startup script, version 1.0.0 -# -# Required ENV vars: -# ------------------ -# NODE_HOME - location of a Node home dir -# or -# Add /usr/local/nodejs/bin to the PATH environment variable -# ---------------------------------------------------------------------------- - -HVIGOR_APP_HOME="`pwd -P`" -HVIGOR_WRAPPER_SCRIPT=${HVIGOR_APP_HOME}/hvigor/hvigor-wrapper.js -#NODE_OPTS="--max-old-space-size=4096" - -fail() { - echo "$*" - exit 1 -} - -set_executable_node() { - EXECUTABLE_NODE="${NODE_HOME}/bin/node" - if [ -x "$EXECUTABLE_NODE" ]; then - return - fi - - EXECUTABLE_NODE="${NODE_HOME}/node" - if [ -x "$EXECUTABLE_NODE" ]; then - return - fi - fail "ERROR: NODE_HOME is set to an invalid directory,check $NODE_HOME\n\nPlease set NODE_HOME in your environment to the location where your nodejs installed" -} - -# Determine node to start hvigor wrapper script -if [ -n "${NODE_HOME}" ]; then - set_executable_node -else - EXECUTABLE_NODE="node" - command -v ${EXECUTABLE_NODE} &> /dev/null || fail "ERROR: NODE_HOME not set and 'node' command not found" -fi - -# Check hvigor wrapper script -if [ ! -r "$HVIGOR_WRAPPER_SCRIPT" ]; then - fail "ERROR: Couldn't find hvigor/hvigor-wrapper.js in ${HVIGOR_APP_HOME}" -fi - -if [ -z "${NODE_OPTS}" ]; then - NODE_OPTS="--" -fi - -# start hvigor-wrapper script -exec "${EXECUTABLE_NODE}" "${NODE_OPTS}" \ - "${HVIGOR_WRAPPER_SCRIPT}" "$@" diff --git a/code/DocsSample/ArkTSUtilsDocModule/hvigorw.bat b/code/DocsSample/ArkTSUtilsDocModule/hvigorw.bat deleted file mode 100644 index b5eecf5a15..0000000000 --- a/code/DocsSample/ArkTSUtilsDocModule/hvigorw.bat +++ /dev/null @@ -1,54 +0,0 @@ -@rem -@rem ---------------------------------------------------------------------------- -@rem Hvigor startup script for Windows, version 1.0.0 -@rem -@rem Required ENV vars: -@rem ------------------ -@rem NODE_HOME - location of a Node home dir -@rem or -@rem Add %NODE_HOME%/bin to the PATH environment variable -@rem ---------------------------------------------------------------------------- -@rem -@echo off - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -set WRAPPER_MODULE_PATH=%APP_HOME%\hvigor\hvigor-wrapper.js -set NODE_EXE=node.exe -@rem set NODE_OPTS="--max-old-space-size=4096" - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -if not defined NODE_OPTS set NODE_OPTS="--" - -@rem Find node.exe -if defined NODE_HOME ( - set NODE_HOME=%NODE_HOME:"=% - set NODE_EXE_PATH=%NODE_HOME%/%NODE_EXE% -) - -%NODE_EXE% --version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" ( - "%NODE_EXE%" "%NODE_OPTS%" "%WRAPPER_MODULE_PATH%" %* -) else if exist "%NODE_EXE_PATH%" ( - "%NODE_EXE%" "%NODE_OPTS%" "%WRAPPER_MODULE_PATH%" %* -) else ( - echo. - echo ERROR: NODE_HOME is not set and no 'node' command could be found in your PATH. - echo. - echo Please set the NODE_HOME variable in your environment to match the - echo location of your NodeJs installation. -) - -if "%ERRORLEVEL%" == "0" ( - if "%OS%" == "Windows_NT" endlocal -) else ( - exit /b %ERRORLEVEL% -) \ No newline at end of file diff --git a/code/DocsSample/ArkTSUtilsDocModule/screenshots/device/image1.jpeg b/code/DocsSample/ArkTSUtilsDocModule/screenshots/device/image1.jpeg deleted file mode 100644 index 44b92b7a1cdc8e2e269e98ac72685c0eef77c698..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33699 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%0DQsEYJ)KZrlID za|eqR5F93M{?Y?KzebPXi*yrB6?)FP($u+_WZ#+y;3)e(!0hm7>?JXoSM~)}bq8U; zNdA*VC)eUnibRjbncS|9Gdf!=1Q+tL3-FyeD)?$Mpx6v?wt#ozQlGRj&U85!3pkoA+Si9$=)7+3&JwdoJZyKyZ>6?UL?h%{pD& zoWlIX2*UG|s+(@qt1+ML7!#aSUnM#6=yp{<7lsF<-pVBvC}up#HwWj`gy z;+2B|Rn}AVS%Kzr+ye^jA@_iXHur$!$=ga;>NUAr1l(R0v4k!`&CRYfXFFrxR^R&7 zMRNanrz@L0V;^1>H$lPb1s%SNHku-7QqRk8k4f<|LbM-Dn&}*;fY|cbIv%Ey?5Kb< z`6&n~#RM=1`Da!?9h<&y%9-i>1Ik(xJ6c_bMXV+HM0~>vQ_6-E?VF;H1p6Cd?ok`P zx|teYMhzKZff0=AJ*qhW6D-%vT?0_467XjuG%nqZt;BtUXo1J-bB5|>0s~hPZKfQ} zJ44~}{p(M`NE4AJ8xIT!zfj`|bl9B6V_7fl5u@(1C8BJ`Oyd?<^476QwCs z&CYB89ssE#ONLd^DeJ*Emr}BimAxe1jHvVjUL${Y?)5CsI>1H0b&^zTL(VzL6tCG11*0qrtJ=NF?P8bP3hP%@tgo}BQkwNWnU ze97~sy)|>g=oLOe2vY}Fq<9xGB1HX|ZnR!txuLewz05R-F^#99g-UEs$?HxyMy4EQ ziMc02vbhdAcNppwvhZCimwl&STdDu@ksCzX^Rw#vAD$&|{ zhg=E+-BxpNYBZ-V`%RFoIZ)Y;cn^rEAJSoiO#p9Ed+L|hp|tY_g&40&vR&=fB-y3W1wIIJoF>NZEnJTkcGw(TEu)0wxsObfq6 zGOz0}IG^6l`(MiLUHn=?N^6F$#m@=rjBR5r(-jUFyssC4F2T2UZ{c_?FS_W=0USkI=??TDWsZ0~tzO z=$Akmx?CQxx6gCs-vc;l@2Eh^4Na!%V!T;PbCh$>PDG3&DTky-b-LhNnU$6cmP^J; z5dX2S%FoumO4z0p|C}oYh^R~%LB&Z0#JIXIA66OfW=jOwI5?4F&g!%`;HDMhUg0!p zq#GC889@6V6BZWWTn4z{s8#fh8I43LyJuy2Z^?Tf%oZd8f9PLMm!xF}McH7zQ>D`k zp0<2puS%*W%7@GHPq>6$6ODQe+$xl{9qlig2-+(nrO z^UdgwdGZ@mv{EccX_fBFI?Z2@W=Z9JT-?x) znEfz&;%&xX^KF{lUN?8q3Q)SHKdx0EiH@)P#cd?1e_Q0GF0#k*5GqBpbpN@V&$ zV9UV@6UX4YWXguA+Owwmx7=uLjXqpY#2*c8jR%Db+yj6$ zsA-N?b`OBBKfgfLE~ZL_}{s zv2BozTDs}p<7iol$*HG?N{Aqvkf5|isIPnX`PxG)NI?Y)ocz<_G47JQ&^+s@rKWKm zn(IcA%@dz7K~w6%1ecoKT^sMI(l6<)41r5p_?Vi2C-wE?!J+{fj0e5z%J*AX z|B_-sbvf*ROUgf!_Fw#-s$>+vOZpDw5&fx)RR2W*{qIDgSV%|iq2nlul{tcnqyYP* zNkstFzrXT-*ZuGIzjUDb?+^P2jWf#k&wjERz(i105#ZCwcU=2^wM{Z4Ps1UiUd1Lw z(hm=e&a#@`z24=e{5sU7G;nGRw*JC+`qv3YhGZ;GA2Z`BNze9)FpPoRJO7+>fu z&v0W>qi2C^umN+xdUNbOAaX_)+iyrpbp3q#@RZcB1o|QwDS&q}}8PX{A>o6i7WZu2RzfbMB|xxbWDASM&n z?!#!7eso|Agm+4D-veY!x^Ayh?*S=#we2LUS`7P_t)HmdA%@;=PT5myYPA3zBs)U@ zWUhT328ucZVUCpYWnc2}y)M&|?h9M`FbKFiF3b3-@oh3)y=9J+cKwF#H z%ka29m3q-!zN{yN#+0co_q9F-Ny;*TTW03klYWb=TJJ$vt5=Cho%BF%udl-n4Kxb9tGcIrq)1 zJjQww|K}A7*^T%6vKL@fSFAzf-Sol-mUkV7_kibxynOikHcPcnd22*&%V3lNVJrN- z+q*fwf_+|;8Q8i;<4Q_+gfQ-&P7y@BGQ?)`VOGV$GUbaqhm5tx?UBLoX4x#?E}VAr zwFCBUgY4kAItMq;ufrysc4(1&DzFrDK3eF{L!>DzR~BnW!1?`~6Amw0FLq?sI0hotZvBJ%A0l5(%uTI^aKBi++{O@j7##d^`B?*eJ0X-(v#J72@R3v1y2BWN zv(nq0PvEV*ZVbe0mtIRIUPkOlv^qBtXq#zP6HJcHcJD~sIyqVI`w;fu1E~0)*td@d1lURh@-enb(fGTBa5 z(Pvj_x}wT688qy+Za_IiyBRM*fuWttSH2@#e+kh6k4O7@JVbkJbM|5{ z+q9m_!k@NXL!1eel+~_oz?Khl<)_(ZeI+a1YYKEv<)1zLLuWP$@Bqsz3S47>;9qY8 zHkHSobLJS?>bmBQsXZ3387~B^Pg5SL4w&pXwaw>mE0T@w<;%j$lD+3Hp-W$1l;b6Q z!~rVQ(=ybkDyu5mIWDtKhRP*DHA_7L>g}>cuik}JZiF*6p!D)Lzlg`X)EL}+RTT?R z?yyPjwcH&EVDHznqc`Eiv+f4aX|qPB4{HV*lZP@fo>W4=dbc$c>A15y5vi-U5^Dv` zkebi|F(%$AKp3{RBBMmkC`3xW6yc#I3T=Rz$`PQss{<9$Gs52;u$xacEcnP|MR){I z!w1T9iMjH+qP^!yb?aQ`RQehis}%xKk*CYDTLI#=s%zuu9W$q zG<`Mw4L47bOu=C8Y!qkuz@+p{ByAh5)YV-k(vSV8J{`%R1>G_2C_(1u9xs8U4=sk^ z3Ijm8TDSY8{t>9gcSQW@(^}@H##GGB^e3_9wv}Ax$0ZjLcR+D zUSGbw2grj8k+Syyrsend0E_g9od=aQM4Wq$lSbF$iS8y4OL&hCok|RSLkG> z_EtI3i^B&yJbBL!?4eEzhyDGznr1c0*v2wOEr+hMF$bk zXA)P#COcWk6L}9H$tMlxk*je&j!3m&oOdfn1XEm<$U1*QM>0Rbf(0;i>#6P@BgEhGu&p@a2yq6vEKKpa^$7FUu%Dnx{0j_{lpWNM?U0+4Q+SbLb?Y5aC*yXWuCn97Kn>y$3K8WTJ*K85McYX@S%9 zo3eGme~tI0Hkd|-Bw;aRPa~+yk8kdj=-BT%Xi)heVNMf8(ZF|7WN_#`06d3oI4dm9 zd%&#U*x2jgVAQRR#fV7>Zh6@8aJ?sc85^Mrqj_Y1^T*d7o{TX)r|@URRASxW@D}O) zfVJq)p(2wHk_cH-Vde={vX8ZprUxN+?HhM5MUJdXsslki=1SA5#{{5=Fo8a|haZku zk|ziSWPjWQe9oDxstGkaE-~=u|7udmw9F>U!+)86J5GfJjC$oLAH>(wX!+7=K4I2Bse)x*{VXES zi{YW{MlLi05)^U9Y;O1lsc60CMs2RABXITTIgEwp2e^PPer8oSB-u6e6vhzO$pud- zaX&-U^3}k?;LFCgtttJnSMO3S^3Q#g5D-`%Z#J*I)r^f^90}VHR^#T;`NIy=?iCW> zBPuN)=gFF6nE12q6WbAbiI_nxv#9Bmh7fQ*HT({=ws4bYu)Hk(Br4D28QD6c*Qp<~ z*m{TlwSe0!?rImqu8eR~#8>y|lP4eD?3le%wIdS3?g7sPIE6t8G8FK;Dv^(smhFa~ z2Yk_3uC@IY)`GLX77QFk0Hm(umG zDew?8$~Qbudhq%Ty#t?RFxSx%VHS>k4=5<?#dRI>G0o4&JJ6(t+|8OFBa(s+XrSE}+%SY=BA90sB1GfQv zuak;(98O7J>Mp&l1%@lGxs?kV%UgQxed?>H{dHPvU2iUb>0M^GCNw9}3y2;mAfmbV z%xR44AoUf(bTWQ9%XS!#gY=fP3h4&K&)C@ckA3b`!@r?c`-n4d!%xTuR1m+Ydw^yY zN}LR}j=TD^vpXs7dQ{VoJXn+hqlQ#w4u{T$a8oV9xM@}&0{L!TbnTdUlplyzd5>O& zcIDx&VI9*t^vlM_bSIQQo5ep`z>E1H)sc&`Y3qIRR!Ut0pRN%j+WNFzuuMhD4E;_z zN4jW?Qrf`frM|NDlrqZk<5m##vy@g~^i&CufH%vCJS9j!@>hTZLptfj%9q^c0 z?XDNWm!q9KcEdgoI~6%tilbd;XUMa;8}HhalD|9eI>~4SCEWu~G(fWZ^|IHLwR#sQ zPV2x3FKg}r@7{HOznkn1RYhei3Q>eYdLwqYEkMWPMjg{gUIzykW-!^W0d_mF;ix>I z0&uFm7^a2H!neHZBthwJlWXR|>`uBi_{L;lzERPau{Gw#IYT;}fF(%Or)z4Dg7|xP_rZ_St7p6xP<;=GTb6jqIuE5ERhukAH)H$q&Y6r+DGN-?6}1C*qL%X?8%i+te^lqB<_ zSlbX}2p+$p@m;xwGhFlU&xTW=Lh~Y%viol%cHC5v94;`4AtKh~;&cV(=<4!9tO`&% zQe@QT7+vi#zl=dSaU~u21J)k*4v-#kqy^7T_Qd?*@%ekK+reyNaq!sW&^h*zUoWgFvb!$DFXngz^^?i_4Wkr3!II z-;&T5yvAiBuOTF>map{!K}zNp*T{KOHI*o0>9JK>a&cyK#@mRz)Kvek=&pF{a(+!`3-a}4K~)J+FA)Cx{g%4u%{Ws_-?<(BpWMH7(XRY<{O z#WvIB#$Q2=OZ6p!k4$t@tNsTUm~{y1Q&1{2 zxgHvqT&}bS5!vO*hzydu@sBx&YHjK|U7Jsbk3zb+?N#xILAQd&hU_QLojP=zd1>nU z9D_9*j%5dl6OIIhB1gS^7{4c=fzgiv90UH;m)*(F=Qu1CX2{RydxvQEn4pBm=$UEK z61UETk=;Z3{XdQ52RI~}KsqoyAgCWivz zx*yk%rHIn=8ysNeeYh)+ov|z?dWZbKlf&jeaArDo+p#CDqhn1NQo&J+az5iksIg1o zo~WRi@rXAsYjnV}^{WN%lCz$JiPLkC!c3>&PNNLxTUFDboO!lqOH0jMOw7!&gPMe9 z>xJDyl8a>3L2S9OBWeWZKtf2aIDBg!(qBb)|zFCL2&X9gW%gDqwgCW ztqBQlWe?DYQ$vBh9jdVD^IQOny32z2duC5#X0QE4>Z?>(N^;4Lg-HImGS?T%IptVW zCJOQ4R8275Hw_cHBa)pX(w}?5O>woq&P>m~wSRn;nHC%XNHJtiN`keA$RRjem$r^I zD=)B(hrt+puhR&ZdA!BXzzBodx^)e$zKDnI5^kT$3d0`7+Dm;{*SU-fS$AYGgFIPX ziOYGP`m1ct{T#?7$eH>h{l$q&A4X<2tq2YW`+~gb0xy5uc2`zq)(w|PHbGVuj^UT5%!&d$B@^lF~Z-^8fSD7A28ao zL|ie_qXj$z$1Tne{Z~%pP4BugB; z`k0y28rM(-gdclUCs-(;%eA3pvF%3)j@U0HEuHBd7n{{*SYXkTlpL4!yE|p`cyP}> zfHXTNShE!`f8+6Ds7zSskjIY(I1Ekl3f5;P%8jcj%}dFC~VGJs%j)U%ML| z--kl)2-h2mw|q^vi(Y%Uv>GW7-cg?Mu|NUV&{id*vCN;NlFutdko-_jhGS3Vj!%}O z6^!)e0(2HK9fZD z2gr&5E|D$^p(w|fg|+J!g9~!K7JXHz)Wro>wIIHvYuaY@gvYBT>+8#qb#{13{R
es7~${>etKEty%d?>w+e6;wL}D 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 G`T8Gi8a`zJ -- Gitee