diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/.gitignore b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..91d237bb144c7fb1777e50271857ef0f593286fc
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/.gitignore
@@ -0,0 +1,5 @@
+/node_modules
+/local.properties
+/.idea
+**/build
+/.hvigor
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/README.md b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f5ed4525832ce7325bb6934292f39f7d325f9d4f
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/README.md
@@ -0,0 +1,86 @@
+# **Harmony To Do 设计文档**
+
+## 1. **应用概述**
+
+Harmony To Do是一款To Do类应用,用户可以使用该应用高效的管理日常琐碎事项,不论是学生还是程序员都可以使用它来有条理地安排自己的学习/工作任务。
+
+
+
+## 2. **灵感来源**
+
+作为一名大学生,一个学期常常需要修十余门课,每门课又常常有课上实验、实验报告、课下作业、大作业等众多考核方式,每当临近期末,我们常常因为deadline管理而焦头烂额。微软出品的Microsoft To Do 就是解决这个问题的一款成熟的任务管理软件。它可以展示用户已完成和未完成的任务,用户可以通过输入任务名称、截止日期等信息来创建任务。
+
+本人希望仿照Microsoft To Do 在手机端的实现,使用eTS语言,基于ArkUI,为Harmony OS用户带来一款专属于Harmony OS的一款TODO 软件——Harmony To Do,并解决Microsoft To Do的一些使用痛点。
+
+
+
+
+## 3. **开发环境**
+
+源代码请使用Harmony OS开发者工具 DevEco Studio 进行调试和编译。
+
+运行环境:
+
+DevEco Studio 3.0.0.993 ,其中:
+
+Harmony OS SDK : API Version 8
+
+OpenHarmony SDK : API Version 9
+
+**本项目使用Harmony OS SDK : API Version 8开发。**
+
+不建议使用更旧的DevEco Studio版本和SDK配置,这可能会导致预览、运行出现问题。
+
+
+
+## 4. **功能设计**
+
+本应用主要实现了添加任务、查看任务详情、删除任务、编辑任务、对任务进行排序等功能。
+
+Microsoft To Do在首页显示截止时间时只精确到日期,然而有些作业的ddl常常是23:50这种时间,这可能导致我们错过ddl。Harmony To Do在首页直接显示任务的截止时间(精确到分钟),有效避免了错过ddl的问题。
+
+
+
+*任务关键信息传达*
+
+Harmony To Do对任务繁杂的属性进行精简,去除了上传图片、设置日历等较为繁杂的功能,节约了用户的注意力成本。
+
+
+
+*精简的任务信息*
+
+提供多种排序方式是十分重要的,这能让用户按照自己需要的方式得知任务的分布情况。为此,我们将排序作为关键要素置于主页右上角,方便用户进行设置;同时设置多种排序方式,帮助用户梳理当前任务分布。
+
+
+
+*多样的排序方式*
+
+## 5. **UI设计**
+
+UI设计参照了Microsoft To Do,将是否完成、是否星标、任务名称、截止时间作为关键信息直接传达给用户;在特定任务上左滑,可以删除该任务;右滑则可以编辑该任务。这样一来,用户只需要付出很小的学习成本便可以带来应用使用时效率的大幅提升,同时也可以使得页面外观更加的简洁。
+
+
+
+
+
+*Microsoft To Do 与Harmony To Do对比*
+
+
+
+## 6. **技术细节**
+
+Harmony OS应用开发方式有两种,分别是Java开发和基于ArkUI开发,其中基于ArkUI开发又可细分为基于eTS的声明式开发范式和基于JS的Web式开发范式。后者类似于微信小程序开发或者Web开发,使用html/wxml + css + js 的三段式结构,而前者是一种全新的声明式开发范式,由状态驱动。由于声明式开发范式无需JS Framework进行页面DOM管理,渲染更新链路更为精简,占用内存更少,因此官方更推荐开发者选用声明式开发范式来搭建应用UI界面,本应用也是选择了这种开发方式。
+
+项目架构上,与常见的MVC架构略有不同,由于声明式开发范式中控制层直接在页面组件后采用链式调用的方式实现,所以项目文件主要包括model和pages两部分,其中前者实现数据模型,后者构建页面逻辑和样式。
+
+
+
+## 7. 心得
+
+(1) 初步掌握了Harmony OS的开发流程,能够基于Harmony OS、ArkUI开发app。
+
+(2) 初步掌握了声明式开发范式,脱离了类Web开发范式的单一框架,为以后学习Swift、Flutter等前端框架打了基础,为今后团队性工作、大型应用构建做铺垫。
+
+(3) 锻炼了查阅文档的能力。
+
+(4) 磨练了心性,锻炼了debug能力。
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/agconnect-services.json b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/agconnect-services.json
new file mode 100644
index 0000000000000000000000000000000000000000..6d95bce43c4222f67b398c17417e4baf3316ae2a
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/agconnect-services.json
@@ -0,0 +1,47 @@
+{
+ "agcgw_all":{
+ "CN":"connect-drcn.dbankcloud.cn",
+ "CN_back":"connect-drcn.hispace.hicloud.com",
+ "DE":"connect-dre.dbankcloud.cn",
+ "DE_back":"connect-dre.hispace.hicloud.com",
+ "RU":"connect-drru.hispace.dbankcloud.ru",
+ "RU_back":"connect-drru.hispace.dbankcloud.cn",
+ "SG":"connect-dra.dbankcloud.cn",
+ "SG_back":"connect-dra.hispace.hicloud.com"
+ },
+ "websocketgw_all":{
+ "CN":"connect-ws-drcn.hispace.dbankcloud.cn",
+ "CN_back":"connect-ws-drcn.hispace.dbankcloud.com",
+ "DE":"connect-ws-dre.hispace.dbankcloud.cn",
+ "DE_back":"connect-ws-dre.hispace.dbankcloud.com",
+ "RU":"connect-ws-drru.hispace.dbankcloud.ru",
+ "RU_back":"connect-ws-drru.hispace.dbankcloud.cn",
+ "SG":"connect-ws-dra.hispace.dbankcloud.cn",
+ "SG_back":"connect-ws-dra.hispace.dbankcloud.com"
+ },
+ "client":{
+ "cp_id":"80086000134463675",
+ "product_id":"99536292102561409",
+ "client_id":"964212735610998208",
+ "client_secret":"[!008F80424DD541B13FC30BF6A2143F44F178F1BDE28707D7B0971B09D813C22B0C14046A11C24ADD7FCFABA5B6119DFC9786C733850741DD21D91FB6417B098A602862755176F354FE9445E5B33DCC844B98BC50778F49C96AE624C4F351288ED9]",
+ "project_id":"99536292102561409",
+ "app_id":"106930509",
+ "api_key":"[!00987384BBFA373A81D3087667D509E97280A1BD631786D82C61EBBBEC45D43AFCF2E43DEFAE3094E78B7C8855632D2E372D08BC0A422EC5F375A17F75492D6D19D5976DF6D4E88BFF46E28AA190793CE2958CEFEA8E132C39D09B627A1AD5A6AEC73CBA340F8F6A916320425CED838A0E6A4BD1A9BAF0B9783DD32D8EB4C76253]",
+ "package_name":"com.example.Harmony_TODO"
+ },
+ "oauth_client":{
+ "client_id":"106930509",
+ "client_type":30
+ },
+ "app_info":{
+ "app_id":"964213291524041536",
+ "package_name":"com.example.Harmony_TODO"
+ },
+ "code":{
+ "code1":"9D352A10C8D2671A76B96D1F2C96F243",
+ "code2":"D5CB2DAD2AC85F5D03FEE3553B03C059",
+ "code3":"3296500F7DC65B90A36BC16CCF5D4A93",
+ "code4":"D8EE7D4400A0A968892D623ACC48E96E"
+ },
+ "configuration_version":"3.0"
+}
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/display-1664003283799-8.gif b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/display-1664003283799-8.gif
new file mode 100644
index 0000000000000000000000000000000000000000..f6567d76001fb4a2e2aa6a11b9c6f2f4b7fb5c32
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/display-1664003283799-8.gif differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/display.gif b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/display.gif
new file mode 100644
index 0000000000000000000000000000000000000000..f6567d76001fb4a2e2aa6a11b9c6f2f4b7fb5c32
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/display.gif differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/image-20220924150336278.png b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/image-20220924150336278.png
new file mode 100644
index 0000000000000000000000000000000000000000..035bc8a5cbb8d9a7ce14dbaba2e28d13333755d3
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/image-20220924150336278.png differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/wps10.jpg b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/wps10.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d896d10ae47165fbe034d0ed1aed003cc46a5ea0
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/wps10.jpg differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/wps11.jpg b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/wps11.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..156c7b4523a49717203f8000f09f5ff7e2a5f217
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/wps11.jpg differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/wps12.jpg b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/wps12.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ad95231471e94f08a8361f72476dac52b889a2cb
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/wps12.jpg differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/wps13.png b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/wps13.png
new file mode 100644
index 0000000000000000000000000000000000000000..20a7a8aeafcc66bbf59a463c43fcdba315af38c7
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/wps13.png differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/wps14.jpg b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/wps14.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..21f4193c01125b056b7f32ddc6b37c3b0799bd8c
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/assets/wps14.jpg differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/build-profile.json5 b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/build-profile.json5
new file mode 100644
index 0000000000000000000000000000000000000000..23af40d6be8f07bfb733c4f8348de10ed09c946e
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/build-profile.json5
@@ -0,0 +1,41 @@
+{
+ "app": {
+ "signingConfigs": [
+ {
+ "name": "default",
+ "type": "HarmonyOS",
+ "material": {
+ "certpath": "C:\\Users\\qd_lh\\.ohos\\config\\auto_debug_Harmony_TODO_80086000134463675.cer",
+ "storePassword": "0000001B38673A1246B46C5E22F7EDCD3C2953E68938CA2ED4B45E7F87E460F5F616FB4C7690FB4DA74FA6",
+ "keyAlias": "debugKey",
+ "keyPassword": "0000001B81ED837AF25C666C8916F799B8CEEA9DB9AF7822EF0DABEBE4AF148FE75C4DC5EF11EE2A325121",
+ "profile": "C:\\Users\\qd_lh\\.ohos\\config\\auto_debug_Harmony_TODO_80086000134463675.p7b",
+ "signAlg": "SHA256withECDSA",
+ "storeFile": "C:\\Users\\qd_lh\\.ohos\\config\\auto_debug_Harmony_TODO_80086000134463675.p12"
+ }
+ }
+ ],
+ "compileSdkVersion": 8,
+ "compatibleSdkVersion": 8,
+ "products": [
+ {
+ "name": "default",
+ "signingConfig": "default",
+ }
+ ]
+ },
+ "modules": [
+ {
+ "name": "entry",
+ "srcPath": "./entry",
+ "targets": [
+ {
+ "name": "default",
+ "applyToProducts": [
+ "default"
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/.gitignore b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..5a6ba80fa3d9498a23ae8ae7d9518f8743fa8a96
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/.gitignore
@@ -0,0 +1,4 @@
+/node_modules
+/.preview
+/build
+/.cxx
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/build-profile.json5 b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/build-profile.json5
new file mode 100644
index 0000000000000000000000000000000000000000..cfdc90f805d1f7ef3a6557bc101de47b91895eb7
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/build-profile.json5
@@ -0,0 +1,14 @@
+{
+ "apiType": 'faMode',
+ "buildOption": {
+ },
+ "targets": [
+ {
+ "name": "default",
+ "runtimeOS": "HarmonyOS"
+ },
+ {
+ "name": "ohosTest",
+ }
+ ]
+}
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/hvigorfile.js b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/hvigorfile.js
new file mode 100644
index 0000000000000000000000000000000000000000..bcec4c99653062cbf17702c40a2dd2a7b809b81a
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/hvigorfile.js
@@ -0,0 +1,2 @@
+// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently.
+module.exports = require('@ohos/hvigor-ohos-plugin').legacyHapTasks
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/package-lock.json b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..15bc7145be1490029883067847743ea7134cf545
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/package-lock.json
@@ -0,0 +1,5 @@
+{
+ "name": "entry",
+ "version": "1.0.0",
+ "lockfileVersion": 1
+}
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/package.json b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..c7685ac4e7c0d79df04c96744f0d8f22cb4a9025
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/package.json
@@ -0,0 +1,14 @@
+{
+ "license": "ISC",
+ "devDependencies": {},
+ "name": "entry",
+ "ohos": {
+ "org": "huawei",
+ "directoryLevel": "module",
+ "buildTool": "hvigor"
+ },
+ "description": "example description",
+ "repository": {},
+ "version": "1.0.0",
+ "dependencies": {}
+}
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/config.json b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/config.json
new file mode 100644
index 0000000000000000000000000000000000000000..330fe985ae09d43174861fb0bc2ef3ea4859ef24
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/config.json
@@ -0,0 +1,67 @@
+{
+ "app": {
+ "bundleName": "com.example.Harmony_TODO",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "com.example.entry",
+ "name": ".entry",
+ "mainAbility": ".MainAbility",
+ "deviceType": [
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry",
+ "moduleType": "entry",
+ "installationFree": false
+ },
+ "abilities": [
+ {
+ "skills": [
+ {
+ "entities": [
+ "entity.system.home"
+ ],
+ "actions": [
+ "action.system.home"
+ ]
+ }
+ ],
+ "orientation": "unspecified",
+ "formsEnabled": false,
+ "name": ".MainAbility",
+ "srcLanguage": "ets",
+ "srcPath": "MainAbility",
+ "icon": "$media:icon",
+ "description": "$string:MainAbility_desc",
+ "label": "$string:MainAbility_label",
+ "type": "page",
+ "visible": true,
+ "launchType": "standard"
+ }
+ ],
+ "js": [
+ {
+ "mode": {
+ "syntax": "ets",
+ "type": "pageAbility"
+ },
+ "pages": [
+ "pages/TodoCategoryList",
+ "pages/TodoDetail"
+ ],
+ "name": ".MainAbility",
+ "window": {
+ "designWidth": 720,
+ "autoDesignWidth": false
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/app.ets b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/app.ets
new file mode 100644
index 0000000000000000000000000000000000000000..b7a0995c8e441cac86e21e06e7c9071664482b1c
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/app.ets
@@ -0,0 +1,8 @@
+export default {
+ onCreate() {
+ console.info('Application onCreate')
+ },
+ onDestroy() {
+ console.info('Application onDestroy')
+ },
+}
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/model/TodoData.ets b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/model/TodoData.ets
new file mode 100644
index 0000000000000000000000000000000000000000..d6c6eb6c11da8dc2d6fa30401f9527e7a07296fc
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/model/TodoData.ets
@@ -0,0 +1,24 @@
+let NextId = 0;
+
+export class TodoData {
+ id: string;
+ name: string;
+ image:Resource;
+ ddl:Date;
+ star:boolean;
+ description:string;
+ finished:boolean;
+ constructor( name: string, image: Resource,ddl:Date,
+ star:boolean,
+ description:string,
+ finished:boolean)
+ { this.name = name;
+ this.image = image;
+ this.ddl = ddl;
+ this.star = star;
+ this.description = description;
+ this.finished = finished;
+ this.id=`${NextId++}`;
+ }
+}
+
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/model/TodoDataModels.ets b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/model/TodoDataModels.ets
new file mode 100644
index 0000000000000000000000000000000000000000..a45531ca168ab3b7c08124e0e61f2cd2f766099b
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/model/TodoDataModels.ets
@@ -0,0 +1,65 @@
+import { TodoData } from './TodoData';
+
+
+export function initializeOnStartup():Array {
+ let TodoDataArray:Array = [];
+ TodoComposition.forEach(item=>{
+ TodoDataArray.push(new TodoData(item.name, item.image,item.ddl,item.star,item.description, item.finished))
+ })
+ return TodoDataArray
+};
+
+export function addItem(TodoDataArray : Array, name: string, image: Resource,ddl:Date,
+ star:boolean,
+ description:string,
+ finished:boolean):Array {
+ TodoDataArray.push(new TodoData(name,image,ddl,star,description,finished))
+ return TodoDataArray
+}
+export function finishItem(TodoDataArray : Array,id:string,
+ finished:boolean):Array {
+ TodoDataArray.find(item=>item.id===id).finished = !finished
+ return TodoDataArray
+}
+let TodoComposition: any[]=[
+ {
+ name: '点击以查看任务',
+ ddl:new Date(2022, 8, 1, 19, 30, 0, 0),
+ star:true,
+ description:'点击以查看任务详情,此处将会显示任务简介',
+ image:$r('app.media.icon'),
+ finished:true
+ },
+ {
+ name: '点击下方加号按钮可以新建任务',
+ ddl:new Date(2022, 8, 20, 15, 30, 0, 0),
+ star:false,
+ description:'点击加号可以新建任务并编辑任务详情',
+ image:$r('app.media.ava'),
+ finished:false
+ },
+ {
+ name: '你可以设置任务的完成期限、添加简介和图片,还可以添加星标',
+ ddl:new Date(2022, 8, 31, 15, 30, 0, 0),
+ star:true,
+ description:'点击加号可以新建任务并编辑任务详情',
+ image:$r('app.media.ava'),
+ finished:false
+ },
+ {
+ name: '在特定任务上左滑,可以删除该任务',
+ ddl:new Date(2022, 8, 15, 15, 30, 0, 0),
+ star:false,
+ description:':)',
+ image:$r('app.media.ava'),
+ finished:false
+ },
+ {
+ name: '在特定任务上右滑,可以编辑该任务',
+ ddl:new Date(2022, 8, 11, 15, 30, 0, 0),
+ star:true,
+ description:':)',
+ image:$r('app.media.ava'),
+ finished:true
+ },
+]
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/pages/AddItemDialog.ets b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/pages/AddItemDialog.ets
new file mode 100644
index 0000000000000000000000000000000000000000..9cc9651768fda4ca6413fdf9cceb91132c9f7f88
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/pages/AddItemDialog.ets
@@ -0,0 +1,126 @@
+import { TodoData } from '../model/TodoData';
+
+@CustomDialog
+export struct AddItemDialog {
+ @Link tempName: string
+ @Link tempImage: Resource
+ // @Link tempStar: boolean
+ @Link tempDesc: string
+ @Link tempFinished: boolean
+ @Link todoItems: TodoData[]
+ controller: CustomDialogController
+ cancel: () => void
+ confirm: () => void
+ dateDdl: Date = new Date()
+ @State starInDialog: boolean = false
+
+ build() {
+ Column() {
+ Text('创建任务').fontSize(20).margin({ top: 25, bottom: 25 })
+ TextInput({ placeholder: '任务名称', text: this.tempName })
+ .width('90%')
+ .margin({ bottom: 25 })
+ .onChange((value: string) => {
+ this.tempName = value
+ })
+ TextArea({ placeholder: '任务描述', text: this.tempDesc })
+ .height(120)
+ .width('90%')
+ .margin({ bottom: 25 })
+ .onChange((value: string) => {
+ this.tempDesc = value
+ })
+ Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center,
+ justifyContent: FlexAlign.Center }) {
+ Text('是否星标')
+ .fontSize(20)
+ Checkbox({ name: '是否星标' }).height(20)
+ .onChange((value: boolean) => {
+ this.starInDialog = value
+ console.log(this.starInDialog.toString() + ' ' + value.toString())
+ })
+ }.height(28)
+ .margin({ bottom: 10 })
+
+
+ Button("设置截止日期")
+ .margin({ bottom: 15 })
+ .onClick(() => {
+ DatePickerDialog.show({
+ start: new Date("2020-1-1"),
+ end: new Date("2030-1-1"),
+ selected: new Date("2022-9-12"),
+ lunar: false,
+ onAccept: (value: DatePickerResult) => {
+ this.dateDdl.setFullYear(value.year, value.month + 1, value.day)
+ console.info("DatePickerDialog:onAccept()" + JSON.stringify(value))
+ },
+ onCancel: () => {
+ console.info("DatePickerDialog:onCancel()")
+ },
+ onChange: (value: DatePickerResult) => {
+ console.info("DatePickerDialog:onChange()" + JSON.stringify(value))
+ }
+ })
+ })
+ Button("设置截止时分")
+ .margin({ bottom: 15 })
+ .onClick(() => {
+ TimePickerDialog.show({
+ useMilitaryTime: true,
+ onAccept: (value: TimePickerResult) => {
+ this.dateDdl.setHours(value.hour, value.minute)
+ console.info("TimePickerDialog:onAccept()" + JSON.stringify(value))
+
+ },
+ onCancel: () => {
+ console.info("TimePickerDialog:onCancel()")
+ },
+ onChange: (value: TimePickerResult) => {
+ console.info("TimePickerDialog:onChange()" + JSON.stringify(value))
+ }
+ })
+ })
+ // Text('按创建来创建新任务').fontSize(16).margin({ bottom: 20 })
+ Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center,
+ justifyContent: FlexAlign.SpaceAround }) {
+ Button('取消')
+ .onClick(() => {
+ this.controller.close()
+ this.cancel()
+ })
+ .backgroundColor(0xffffff)
+ .fontColor(Color.Black)
+ Button('创建')
+ .onClick(() => {
+ // this.inputValue = this.textValue
+ if (this.tempName == "" || this.tempDesc == "") {
+ AlertDialog.show(
+ {
+ // title: '',
+ message: '任务名称、任务描述不能为空',
+ confirm: {
+ value: '确认',
+ action: () => {
+ console.info('Button-clicking callback')
+ }
+ },
+ cancel: () => {
+ console.info('Closed callbacks')
+ }
+ }
+ )
+ }
+ else {
+ console.log(this.starInDialog.toString())
+ this.todoItems.push(new TodoData(this.tempName, this.tempImage, this.dateDdl, this.starInDialog, this.tempDesc, this.tempFinished))
+ this.controller.close()
+ this.confirm()
+ }
+ })
+ .backgroundColor(0xffffff)
+ .fontColor(Color.Red)
+ }
+ }
+ }
+}
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/pages/ModifyDialog.ets b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/pages/ModifyDialog.ets
new file mode 100644
index 0000000000000000000000000000000000000000..870b93af220d4356dc1542168c75f551c697014c
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/pages/ModifyDialog.ets
@@ -0,0 +1,123 @@
+import { TodoData } from '../model/TodoData';
+/**
+ * 用来修改任务的对话框
+ */
+@CustomDialog
+export struct ModifyDialog {
+ @Link dialogTodoItem: TodoData
+ // @Link todoArray: Array
+ controller: CustomDialogController
+ cancel: () => void
+ confirm: () => void
+
+ build() {
+ Column() {
+ Text('编辑任务').fontSize(20).margin({ top: 20, bottom: 10 }).fontWeight(FontWeight.Bold)
+ Column() {
+ Text('任务名称').textAlign(TextAlign.Start).height('5%').align(Alignment.Start).fontSize(16)
+ }.alignItems(HorizontalAlign.Start).width('85%')
+
+ TextArea({ text: this.dialogTodoItem.name }).height(60).width('90%').margin({ bottom: 10 })
+ .onChange((value: string) => {
+ this.dialogTodoItem.name = value
+ })
+ Column() {
+ Text('任务描述').textAlign(TextAlign.Start).height('5%').align(Alignment.Start).fontSize(16)
+ }.alignItems(HorizontalAlign.Start).width('85%')
+
+ TextArea({ text: this.dialogTodoItem.description }).height(60).width('90%').margin({ bottom: 10 })
+ .onChange((value: string) => {
+ this.dialogTodoItem.description = value
+ })
+
+ Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center,
+ justifyContent: FlexAlign.Center })
+ // Row()
+ {
+ Text('是否星标')
+ .fontSize(20)
+ Checkbox({ name: '是否星标' })
+ .height(20)
+ .select(this.dialogTodoItem.star)
+ .onChange((value: boolean) => {
+ this.dialogTodoItem.star = value
+ console.log(this.dialogTodoItem.star.toString() + ' ' + value.toString())
+ })
+ }.height(28)
+ .margin({ bottom: 10 })
+
+ Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center,
+ justifyContent: FlexAlign.Center }) {
+ Text('是否完成')
+ .fontSize(20)
+ Checkbox({ name: '是否完成' })
+ .height(20)
+ .select(this.dialogTodoItem.finished)
+ .onChange((value: boolean) => {
+ this.dialogTodoItem.finished = value
+ console.log(this.dialogTodoItem.finished.toString() + ' ' + value.toString())
+ })
+ }.height(28)
+ .margin({ bottom: 10 })
+
+ Flex({ justifyContent: FlexAlign.SpaceAround }) {
+ Button("设置截止日期")
+ .margin({ bottom: 15 })
+ .onClick(() => {
+ DatePickerDialog.show({
+ start: new Date("2020-1-1"),
+ end: new Date("2030-1-1"),
+ selected: new Date("2022-9-12"),
+ lunar: false,
+ onAccept: (value: DatePickerResult) => {
+ this.dialogTodoItem.ddl.setFullYear(value.year, value.month + 1, value.day)
+ console.info("DatePickerDialog:onAccept()" + JSON.stringify(value))
+ },
+ onCancel: () => {
+ console.info("DatePickerDialog:onCancel()")
+ },
+ onChange: (value: DatePickerResult) => {
+ console.info("DatePickerDialog:onChange()" + JSON.stringify(value))
+ }
+ })
+ })
+ Button("设置截止时分")
+ .margin({ bottom: 15 })
+ .onClick(() => {
+ TimePickerDialog.show({
+ useMilitaryTime: true,
+ onAccept: (value: TimePickerResult) => {
+ this.dialogTodoItem.ddl.setHours(value.hour, value.minute)
+ console.info("TimePickerDialog:onAccept()" + JSON.stringify(value))
+
+ },
+ onCancel: () => {
+ console.info("TimePickerDialog:onCancel()")
+ },
+ onChange: (value: TimePickerResult) => {
+ console.info("TimePickerDialog:onChange()" + JSON.stringify(value))
+ }
+ })
+ })
+ }
+
+ Flex({ justifyContent: FlexAlign.SpaceAround }) {
+ Button('取消')
+ .onClick(() => {
+ this.controller.close()
+ this.cancel()
+ })
+ .backgroundColor(0xffffff)
+ .fontColor(Color.Black)
+ Button('确认')
+ .onClick(() => {
+ // this.inputValue = this.textValue
+ this.controller.close()
+ this.confirm()
+ })
+ .backgroundColor(0xffffff)
+ .fontColor(Color.Red)
+ }
+ }
+ }
+}
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/pages/TodoCategoryList.ets b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/pages/TodoCategoryList.ets
new file mode 100644
index 0000000000000000000000000000000000000000..15adcaa1351583094248e30a52277fce6832846b
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/pages/TodoCategoryList.ets
@@ -0,0 +1,180 @@
+import { TodoListItem } from './TodoListItem';
+import router from '@ohos.router';
+import { TodoData } from '../model/TodoData'
+import { initializeOnStartup, finishItem } from '../model/TodoDataModels'
+import { ModifyDialog } from './ModifyDialog'
+import { AddItemDialog } from './AddItemDialog'
+
+let objectArraySort = function (keyName) {
+ return function (objectN, objectM) {
+ var valueN = objectN[keyName]
+ var valueM = objectM[keyName]
+ if (valueN < valueM) {
+ console.log(valueN + '**' + valueM)
+ return 1
+ }
+
+ else if (valueN > valueM) {
+ console.log(valueM + '**' + valueN)
+ return -1
+ }
+ else return 0
+ }
+}
+
+@Entry
+@Component
+struct TodoList {
+ @State todoItems: TodoData[] = initializeOnStartup();
+ @State tempName: string = '任务名称'
+ @State tempImage: Resource = undefined
+ @State tempDdl: Date = new Date()
+ @State tempStar: boolean = false
+ @State tempDesc: string = '任务描述'
+ @State tempFinished: boolean = false
+ dialogController: CustomDialogController = new CustomDialogController({
+ builder: AddItemDialog({
+ cancel: this.onCancel,
+ confirm: this.onAccept,
+ tempName: $tempName,
+ tempImage: $tempImage,
+ tempDesc: $tempDesc,
+ tempFinished: $tempFinished,
+ todoItems: $todoItems
+ }),
+ cancel: this.existApp,
+ autoCancel: true
+ })
+
+ build() {
+ Column() {
+ Flex({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) {
+ Text('我的任务')
+ .fontSize(24)
+ .fontWeight(FontWeight.Medium)
+ .margin({ left: 20, })
+ .fontColor(Color.White)
+// Button('ddl').onClick(()=>{
+// this.todoItems.sort((a: TodoData, b: TodoData) => {
+// return a.ddl.getTime() - b.ddl.getTime()
+// })
+// this.todoItems.forEach(element => {
+// console.log(JSON.stringify(element))
+// });
+// })
+// Button('name').onClick(()=>{
+// this.todoItems.sort((a: TodoData, b: TodoData) => {
+// return a.name.localeCompare(b.name)
+// })
+// this.todoItems.forEach(element => {
+// console.log(JSON.stringify(element))
+// });
+// })
+ Select(
+ [{ value: '按截止日期排序' },
+ { value: '按创建时间排序' },
+ { value: '按名称排序' },
+ { value: '星标优先'},
+ { value: '未完成优先'}
+ ])
+ .margin({ right: 20 })
+ .value('排序方式')
+ .fontColor(Color.White)
+ .selectedOptionFontColor(Color.Black)
+ .optionFontColor(Color.Black)
+ .selectedOptionFont({ weight: FontWeight.Bold })
+ // .optionFont({size: 30, weight: 400, family: 'serif', style: FontStyle.Normal })
+ .onSelect((index: number) => {
+ console.info("Select:" + index)
+ switch (index) {
+ case 0:
+ this.todoItems.sort((a: TodoData, b: TodoData) => {
+ return a.ddl.getTime() - b.ddl.getTime()
+ })
+ this.todoItems.forEach(element => {
+ console.log(JSON.stringify(element))
+ });
+ break;
+ case 1:
+ this.todoItems.sort((a: TodoData, b: TodoData) => {
+ return Number(a.id) - Number(b.id)
+ })
+ this.todoItems.forEach(element => {
+ console.log(JSON.stringify(element))
+ });
+ break;
+ case 2:
+ this.todoItems.sort((a: TodoData, b: TodoData) => {
+ return a.name.localeCompare(b.name)
+ })
+ this.todoItems.forEach(element => {
+ console.log(JSON.stringify(element))
+ });
+ break;
+ case 3:
+ this.todoItems.sort((a: TodoData, b: TodoData) => {
+ return Number(b.star) - Number(a.star)
+ })
+ this.todoItems.forEach(element => {
+ console.log(JSON.stringify(element))
+ });
+ break;
+ case 4:
+ this.todoItems.sort((a: TodoData, b: TodoData) => {
+ return Number(a.finished) - Number(b.finished)
+ })
+ this.todoItems.forEach(element => {
+ console.log(JSON.stringify(element))
+ });
+ break;
+ }
+ })
+ // Button('排序方式').backgroundColor(Color.Orange).opacity(0.8)
+ // .margin({right:20})
+ // .onClick(()=>{
+ // this.todoItems.sort(objectArraySort('name'))
+ // this.todoItems.sort((a:TodoData,b:TodoData)=>{
+ // return a.ddl.getTime() - b.ddl.getTime()
+ // })
+ // this.todoItems.forEach(element => {
+ // console.log(JSON.stringify(element))
+ // });
+ // })
+ }
+ .height('7%')
+
+ List() {
+ ForEach(this.todoItems, item => {
+ ListItem() {
+ TodoListItem({ todoItem: item, todoArray: $todoItems })
+ }
+ }, item => item.id.toString())
+ }
+ .height('93%')
+
+ Button('+')
+ .type(ButtonType.Circle)
+ .position({ x: '80%', y: '88%' })
+ .borderRadius(25)
+ .fontSize(25)
+ .fontWeight(FontWeight.Bold)
+ .onClick(() => {
+ this.dialogController.open()
+ // this.todoItems.push(new TodoData('新任务',null,new Date(),false,'请输入描述',false))
+ })
+ }.backgroundImage($r('app.media.bg3'))
+ .backgroundImageSize(ImageSize.Auto)
+ }
+
+ onCancel() {
+ console.info('Callback when the first button is clicked')
+ }
+
+ onAccept() {
+ console.info('Callback when the second button is clicked')
+ }
+
+ existApp() {
+ console.info('Click the callback in the blank area')
+ }
+}
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/pages/TodoDetail.ets b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/pages/TodoDetail.ets
new file mode 100644
index 0000000000000000000000000000000000000000..aed5a4d625a170d64946a45706bcd3c2a54bc41b
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/pages/TodoDetail.ets
@@ -0,0 +1,116 @@
+import router from '@ohos.router';
+import { TodoData } from '../model/TodoData'
+import { initializeOnStartup ,finishItem} from '../model/TodoDataModels'
+
+@Entry
+@Component
+struct Index {
+ // @State message: string = 'Hello World'
+ @State todoItem: TodoData = router.getParams()['data']['todoDataa']
+ @State thisDate:Date = router.getParams()['data']['todoDataa']['ddl']
+ @State todoItems: TodoData[] = router.getParams()['data']['todoItems']
+ @State thisID:string = router.getParams()['data']['todoDataa']['id']
+ onCreate() {
+ console.log(this.todoItem.name)
+ }
+
+ build() {
+ Column() {
+ Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Start }) {
+ Image($r('app.media.back'))
+ .width(22)
+ Text('任务详情')
+ .fontSize(22)
+ .fontWeight(FontWeight.Medium)
+ .margin({ left: 20, top: 5 })
+ .fontColor(Color.Black)
+ }
+ .height('10%')
+ .backgroundColor('#FFf1f3f5')
+ .padding({ left: 20, top: 13, bottom: 15 })
+ .onClick(() => {
+ router.back()
+ })
+
+ Column() {
+ Text(this.todoItem.name)
+ .fontSize(30)
+ .fontWeight(FontWeight.Bold)
+ .lineHeight(40)
+ .textAlign(TextAlign.Start)
+ .align(Alignment.Start)
+ .width('85%')
+ .margin({bottom:20})
+// Column() {
+// Text('任务详情').textAlign(TextAlign.Start).align(Alignment.Start).fontSize(20)
+// }.alignItems(HorizontalAlign.Start).width('85%').margin({bottom:10})
+ Text(this.todoItem.description )
+ .margin({bottom:20})
+ .fontSize(22)
+ .width('85%')
+// Column() {
+// Text('截止时间').textAlign(TextAlign.Start).align(Alignment.Start).fontSize(20)
+// }.alignItems(HorizontalAlign.Start).width('85%').margin({bottom:10})
+// Text(this.todoItem.name ).fontSize(22)
+ Text('截止时间:'+this.todoItem.ddl.toString()).fontSize(22).lineHeight(40)
+// DatePicker({
+// start: new Date('1970-1-1'),
+// end: new Date('2100-1-1'),
+//
+// })
+// .onChange((date: DatePickerResult) => {
+//// this.todoItem.ddl.setFullYear(date['year'])
+//// this.todoItem.ddl.setMonth(date['month'])
+//// this.todoItem.ddl.setDate(date['day'])
+// this.thisDate.setFullYear(date['year'])
+// this.thisDate.setMonth(date['month'])
+// this.thisDate.setDate(date['day'])
+// })
+// TimePicker()
+// .onChange((date: TimePickerResult) => {
+// this.todoItem.ddl.setHours(date['hour'])
+// this.todoItem.ddl.setMinutes(date['minute'])
+//
+// })
+ // Text(this.todoItem.ddl.getMonth().toString())
+ // [qjs_utils.cpp(JsStdDumpErrorAce)-(0)] [Engine Log] [DUMP] TypeError: not a function
+ // +'月'+this.todoItem.ddl.getDate().toString()+'日周' +this.todoItem.ddl.getDay().toString()+' '+this.todoItem.ddl.getHours().toString()+':' +this.todoItem.ddl.getMinutes().toString())
+ // Text('是否完成').fontSize(22).lineHeight(40)
+ if (this.todoItem.finished)
+ Text('已完成').fontSize(30).lineHeight(40).onClick(()=>{
+ this.todoItem.finished=!this.todoItem.finished;
+ })
+ else
+ Text('未完成').fontSize(30).lineHeight(40).onClick(()=>{
+ this.todoItem.finished=!this.todoItem.finished;
+ })
+ if (this.todoItem.star)
+ Text('已星标').fontSize(30).lineHeight(40).onClick(()=>{
+ this.todoItem.star=!this.todoItem.star;
+ })
+ else
+ Text('未星标').fontSize(30).lineHeight(40).onClick(()=>{
+ this.todoItem.star=!this.todoItem.star;
+ })
+// Text(' ').fontSize(30).lineHeight(40)
+// Text(this.todoItem.description).fontSize(18)
+// TextInput({ placeholder: this.todoItem.description })
+// .placeholderColor(Color.Grey)
+// .placeholderFont({ size: 18 })
+// .onChange((value: string) => {
+// this.todoItem.description = value
+// })
+// Image(this.todoItem.image).objectFit(ImageFit.Auto)
+ }
+ .height('90%')
+ .margin({ top: 20 })
+// .backgroundColor(Color.White)
+// .opacity(0.9)
+// .borderRadius(5)
+
+ }
+ // .backgroundImage($r('app.media.bg4'))
+ // .backgroundImageSize(ImageSize.Auto)
+
+ }
+}
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/pages/TodoListItem.ets b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/pages/TodoListItem.ets
new file mode 100644
index 0000000000000000000000000000000000000000..609e4418ca05def3ccca9e451f541583da6eba46
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/ets/MainAbility/pages/TodoListItem.ets
@@ -0,0 +1,199 @@
+import { ModifyDialog } from './ModifyDialog';
+import router from '@ohos.router';
+import { TodoData } from '../model/TodoData';
+
+@Component
+export struct TodoListItem {
+ @State todoItem: TodoData = {
+ id: '0',
+ name: ' ',
+ image: null,
+ ddl: new Date(),
+ star: true,
+ description: ' ',
+ finished: false
+ }
+ @Link todoArray: Array
+//
+// aboutToAppear(): void {
+// console.log(this.todoItem.star.toString())
+//
+// }
+ // touchMove(e){ // swipe处理事件
+ // if(e.direction == "left"){ // 右滑退出
+ // console.log('swipe left')
+ // this.todoArray.splice(Number(this.todoItem.id),1)
+ // }
+ // }
+ build() {
+ GridContainer({ columns: 6, gutter: 0, margin: 12 }) {
+ Row() {
+ if (this.todoItem.finished == true) {
+ Image($r('app.media.CheckCircleRegular')).objectFit(ImageFit.ScaleDown).width(27).height(27).useSizeType({
+ xs: { span: 1, offset: 0 },
+ sm: { span: 1, offset: 0 },
+ md: { span: 1, offset: 0 },
+ lg: { span: 1, offset: 0 },
+ })
+ .onClick(() => {
+ // this.todoArray=finishItem(this.todoArray,this.todoItem.id,this.todoItem.finished)
+ this.todoItem.finished = !this.todoItem.finished
+
+ })
+ }
+ else {
+ Image($r('app.media.CircleRegular')).objectFit(ImageFit.ScaleDown).width(27).height(27).useSizeType({
+ xs: { span: 1, offset: 0 },
+ sm: { span: 1, offset: 0 },
+ md: { span: 1, offset: 0 },
+ lg: { span: 1, offset: 0 },
+ }).onClick(() => {
+ // this.todoItem.finished = !this.todoItem.finished
+ this.todoItem.finished = !this.todoItem.finished
+ })
+ }
+ Column() {
+ Text(this.todoItem.name)
+ .fontSize(14)
+ .textAlign(TextAlign.Center)
+ .maxLines(3)
+ .lineHeight(20)
+ .fontWeight(FontWeight.Bold)
+ .textOverflow({ overflow: TextOverflow.Ellipsis })
+ .onClick(() => {
+ console.log(this.todoItem.name)
+ router.push({
+ url: 'pages/TodoDetail',
+ params: {
+ data: {
+ todoDataa: this.todoItem,
+ todoItems: this.todoArray
+ },
+ }
+ })
+ })
+ Text(
+ this.todoItem.ddl.getFullYear().toString()+'年'+
+ this.todoItem.ddl.getMonth().toString() + '月' + this.todoItem.ddl.getDate().toString() + '日周'
+ + ((this.todoItem.ddl.getDay()+4)%7+1).toString() + ' ' + this.todoItem.ddl.getHours().toString() + ':'
+ + this.todoItem.ddl.getMinutes().toString())
+ .fontSize(14)
+ .onClick(() => {
+ console.log(this.todoItem.name)
+ router.push({
+ url: 'pages/TodoDetail',
+ params: {
+ data: { todoDataa: (this.todoItem) },
+ }
+ })
+ })
+ }.useSizeType({
+ xs: { span: 4, offset: 1 },
+ sm: { span: 4, offset: 1 },
+ md: { span: 4, offset: 1 },
+ lg: { span: 4, offset: 1 },
+ })
+
+ if (this.todoItem.star == true) {
+ Image($r('app.media.starFilled'))
+ .objectFit(ImageFit.ScaleDown)
+ .width(27)
+ .height(27)
+ .useSizeType({
+ xs: { span: 1, offset: 5 },
+ sm: { span: 1, offset: 5 },
+ md: { span: 1, offset: 5 },
+ lg: { span: 1, offset: 5 },
+ })
+ .onClick(() => {
+ // this.todoItem.star = !this.todoItem.star
+ // console.log(this.todoItem.star.toString())
+ this.todoItem.star = !this.todoItem.star
+ })
+ }
+ else {
+ Image($r('app.media.star')).objectFit(ImageFit.ScaleDown).width(27).height(27).useSizeType({
+ xs: { span: 1, offset: 5 },
+ sm: { span: 1, offset: 5 },
+ md: { span: 1, offset: 5 },
+ lg: { span: 1, offset: 5 },
+ })
+ .onClick(() => {
+ // this.todoItem.star = !this.todoItem.star
+ // console.log(this.todoItem.star.toString())
+ this.todoItem.star = !this.todoItem.star
+ })
+ }
+ }
+ }
+ .margin({ top: 8 })
+ .backgroundColor(Color.White)
+ .opacity(0.65)
+ .borderRadius(8)
+ .padding(5)
+ .gesture(
+ SwipeGesture({fingers: 1, direction:SwipeDirection.Horizontal})
+ .onAction((event: GestureEvent) => {
+ if(event.angle>0)
+ AlertDialog.show({
+ title: '你确定吗?',
+ message: '这将永久删除:"'+this.todoItem.name+'".',
+ primaryButton: {
+ value: '取消',
+ action: () => {
+ console.info('Callback when the first button is clicked')
+ }
+ },
+ secondaryButton: {
+ value: '删除',
+ fontColor:Color.Red,
+ action: () => {
+ console.info('Callback when the second button is clicked')
+ this.todoArray.splice(Number(this.todoItem.id),1)
+ console.info('swiped')
+ }
+ },
+ cancel: () => {
+ console.info('Closed callbacks')
+ }
+ })
+ else
+ this.dialogOfModifyController.open()
+ })
+ )
+ }
+
+ dialogOfModifyController: CustomDialogController = new CustomDialogController({
+ builder: ModifyDialog(
+ { cancel: this.onCancel,
+ confirm: this.onAccept,
+ dialogTodoItem: $todoItem,
+ // dialogTodoArray: $todoArray
+ }),
+ cancel: this.existApp,
+ autoCancel: true
+ })
+
+ onCancel() {
+ console.info('Callback when the first button is clicked')
+ }
+
+ onAccept() {
+ console.info('Callback when the second button is clicked')
+ }
+
+ existApp() {
+ console.info('Click the callback in the blank area')
+ }
+}
+// Button('修改')
+// .margin({ right: 10 })
+// .useSizeType({
+// xs: { span: 2, offset: 6 },
+// sm: { span: 2, offset: 6 },
+// md: { span: 2, offset: 6 },
+// lg: { span: 2, offset: 6 },
+// })
+// .onClick(() => {
+// this.dialogOfModifyController.open()
+// })
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/element/color.json b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/element/color.json
new file mode 100644
index 0000000000000000000000000000000000000000..1bbc9aa9617e97c45440e1d3d66afc1154837012
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/element/color.json
@@ -0,0 +1,8 @@
+{
+ "color": [
+ {
+ "name": "white",
+ "value": "#FFFFFF"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/element/string.json b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/element/string.json
new file mode 100644
index 0000000000000000000000000000000000000000..490210a3908f47722dc942d49dacc98b97669a5f
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/element/string.json
@@ -0,0 +1,16 @@
+{
+ "string": [
+ {
+ "name": "entry_desc",
+ "value": "description"
+ },
+ {
+ "name": "MainAbility_desc",
+ "value": "description"
+ },
+ {
+ "name": "MainAbility_label",
+ "value": "label"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/CheckCircleRegular.svg b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/CheckCircleRegular.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2f545b5ae3dfa915645fdcbcf67d6abf37000a22
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/CheckCircleRegular.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/CircleRegular.svg b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/CircleRegular.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5cfaeded08cb2c5dc90de7aa5cf953dc1b3c11b8
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/CircleRegular.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/ava.jpg b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/ava.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..830346f63c41d48065d75f8890d71f8b96fb786b
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/ava.jpg differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/back.svg b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/back.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c81e8c87b24e59c9a0995effccbbec0b2b2ec4e5
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/back.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/bg.jpg b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/bg.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6195326fa69bf5c4d478e031d6bfc6d63c7c3e8f
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/bg.jpg differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/bg2.jpg b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/bg2.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..96ed14cd32237240d35976295f37f2969df6db7b
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/bg2.jpg differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/bg3.jpg b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/bg3.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c643bf7371c62c97b6cd4d6b758058e2b8e7f724
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/bg3.jpg differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/bg4.jpg b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/bg4.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2064b4e67a3a224433d08fc63c5f69435607ade2
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/bg4.jpg differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/checkbutton.png b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/checkbutton.png
new file mode 100644
index 0000000000000000000000000000000000000000..b4bc3d10a7a159af55cb2f8c2140be73b685f5e3
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/checkbutton.png differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/delete.png b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/delete.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8a749c50a249e958a50fba36ee7ae390a908b5e
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/delete.png differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/done.png b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/done.png
new file mode 100644
index 0000000000000000000000000000000000000000..bfd44b664b5c75cde229536fd5b8b889af80180b
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/done.png differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/icon.png b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/icon.png differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/star.svg b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/star.svg
new file mode 100644
index 0000000000000000000000000000000000000000..fb2aa009f2fd43ba757a1b73a53e5419e6919559
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/star.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/starFilled.svg b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/starFilled.svg
new file mode 100644
index 0000000000000000000000000000000000000000..db4d7c51e320d9d759e343f33f203a812dd8346c
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/main/resources/base/media/starFilled.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/config.json b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/config.json
new file mode 100644
index 0000000000000000000000000000000000000000..5956ece986c667ba954f655f432d5a68dc2f0d38
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/config.json
@@ -0,0 +1,67 @@
+{
+ "app": {
+ "bundleName": "com.example.demo1_food",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "com.example.entry_test",
+ "name": ".entry_test",
+ "mainAbility": ".TestAbility",
+ "srcPath": "",
+ "deviceType": [
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry_test",
+ "moduleType": "feature",
+ "installationFree": false
+ },
+ "abilities": [
+ {
+ "skills": [
+ {
+ "entities": [
+ "entity.system.home"
+ ],
+ "actions": [
+ "action.system.home"
+ ]
+ }
+ ],
+ "orientation": "unspecified",
+ "visible": true,
+ "srcPath": "TestAbility",
+ "name": ".TestAbility",
+ "srcLanguage": "ets",
+ "icon": "$media:icon",
+ "description": "$string:description_TestAbility",
+ "formsEnabled": false,
+ "label": "$string:entry_TestAbility",
+ "type": "page",
+ "launchType": "standard"
+ }
+ ],
+ "js": [
+ {
+ "mode": {
+ "syntax": "ets",
+ "type": "pageAbility"
+ },
+ "pages": [
+ "pages/index"
+ ],
+ "name": ".TestAbility",
+ "window": {
+ "designWidth": 720,
+ "autoDesignWidth": false
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/ets/TestAbility/app.ets b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/ets/TestAbility/app.ets
new file mode 100644
index 0000000000000000000000000000000000000000..5fd83b631f1806d46dcdf90ddbe96475ba3339c5
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/ets/TestAbility/app.ets
@@ -0,0 +1,18 @@
+import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry'
+import { Hypium } from '@ohos/hypium'
+import testsuite from '../test/List.test'
+
+export default {
+ onCreate() {
+ console.info('Application onCreate')
+ var abilityDelegator: any
+ abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator()
+ var abilityDelegatorArguments: any
+ abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments()
+ console.info('start run testcase!!!')
+ Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite)
+ },
+ onDestroy() {
+ console.info('Application onDestroy')
+ },
+}
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/ets/TestAbility/pages/index.ets b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/ets/TestAbility/pages/index.ets
new file mode 100644
index 0000000000000000000000000000000000000000..539eb9ae7b7cb0870b26b1a69d20fb977b55291d
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/ets/TestAbility/pages/index.ets
@@ -0,0 +1,35 @@
+import router from '@system.router';
+
+@Entry
+@Component
+struct Index {
+ aboutToAppear() {
+ console.info('TestAbility index aboutToAppear')
+ }
+
+ @State message: string = 'Hello World'
+ build() {
+ Row() {
+ Column() {
+ Text(this.message)
+ .fontSize(50)
+ .fontWeight(FontWeight.Bold)
+ Button() {
+ Text('next page')
+ .fontSize(20)
+ .fontWeight(FontWeight.Bold)
+ }.type(ButtonType.Capsule)
+ .margin({
+ top: 20
+ })
+ .backgroundColor('#0D9FFB')
+ .width('35%')
+ .height('5%')
+ .onClick(()=>{
+ })
+ }
+ .width('100%')
+ }
+ .height('100%')
+ }
+ }
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/ets/TestRunner/OpenHarmonyTestRunner.ts b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/ets/TestRunner/OpenHarmonyTestRunner.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1f5bcf0a2cfbb0478b7993dda7c157a1ab5f862d
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/ets/TestRunner/OpenHarmonyTestRunner.ts
@@ -0,0 +1,68 @@
+import TestRunner from '@ohos.application.testRunner'
+import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry'
+
+var abilityDelegator = undefined
+var abilityDelegatorArguments = undefined
+
+function translateParamsToString(parameters) {
+ const keySet = new Set([
+ '-s class', '-s notClass', '-s suite', '-s itName',
+ '-s level', '-s testType', '-s size', '-s timeout',
+ '-s package', '-s dryRun'
+ ])
+ let targetParams = '';
+ for (const key in parameters) {
+ if (keySet.has(key)) {
+ targetParams += ' ' + key + ' ' + parameters[key]
+ }
+ }
+ return targetParams.trim()
+}
+
+async function onAbilityCreateCallback() {
+ console.log('onAbilityCreateCallback');
+}
+
+async function addAbilityMonitorCallback(err: any) {
+ console.info('addAbilityMonitorCallback : ' + JSON.stringify(err))
+}
+
+export default class OpenHarmonyTestRunner implements TestRunner {
+ constructor() {
+ }
+
+ onPrepare() {
+ console.info('OpenHarmonyTestRunner OnPrepare')
+ }
+
+ onRun() {
+ console.log('OpenHarmonyTestRunner onRun run')
+ abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments()
+ abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator()
+
+ let lMonitor = {
+ abilityName: testAbilityName,
+ onAbilityCreate: onAbilityCreateCallback,
+ };
+ var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.TestAbility'
+ abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback)
+ var cmd = 'aa start -d 0 -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName
+ cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters)
+ var debug = abilityDelegatorArguments.parameters["-D"]
+ if (debug == 'true')
+ {
+ cmd += ' -D'
+ }
+ console.info('cmd : '+cmd)
+ abilityDelegator.executeShellCommand(cmd,
+ (err: any, d: any) => {
+ console.info('executeShellCommand : err : ' + JSON.stringify(err));
+ console.info('executeShellCommand : data : ' + d.stdResult);
+ console.info('executeShellCommand : data : ' + d.exitCode);
+ })
+ console.info('OpenHarmonyTestRunner onRun call abilityDelegator.getAppContext')
+ var context = abilityDelegator.getAppContext()
+ console.info('getAppContext : ' + JSON.stringify(context))
+ console.info('OpenHarmonyTestRunner onRun end')
+ }
+};
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/ets/test/Ability.test.ets b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/ets/test/Ability.test.ets
new file mode 100644
index 0000000000000000000000000000000000000000..df49ed0fbb519c98ce90324b482aabaa8745cf6a
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/ets/test/Ability.test.ets
@@ -0,0 +1,13 @@
+import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'
+
+export default function abilityTest() {
+ describe('ActsAbilityTest', function () {
+ it('assertContain',0, function () {
+ console.info("it begin")
+ let a = 'abc'
+ let b = 'b'
+ expect(a).assertContain(b)
+ expect(a).assertEqual(a)
+ })
+ })
+}
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/ets/test/List.test.ets b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/ets/test/List.test.ets
new file mode 100644
index 0000000000000000000000000000000000000000..d766fe249dfc3ada636f27e64d9b64451ce32c93
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/ets/test/List.test.ets
@@ -0,0 +1,5 @@
+import abilityTest from './Ability.test'
+
+export default function testsuite() {
+ abilityTest()
+}
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/resources/base/element/string.json b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/resources/base/element/string.json
new file mode 100644
index 0000000000000000000000000000000000000000..a0901cfced5abc1cb836b55896884b769adc7175
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/resources/base/element/string.json
@@ -0,0 +1,12 @@
+{
+ "string": [
+ {
+ "name": "description_TestAbility",
+ "value": "eTS_Empty Ability"
+ },
+ {
+ "name": "entry_TestAbility",
+ "value": "entry_TestAbility"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/resources/base/media/icon.png b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/resources/base/media/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c
Binary files /dev/null and b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/entry/src/ohosTest/resources/base/media/icon.png differ
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/hvigorfile.js b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/hvigorfile.js
new file mode 100644
index 0000000000000000000000000000000000000000..cff9f0dfcf8cb00cca34e7f50d61380cf5496868
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/hvigorfile.js
@@ -0,0 +1,2 @@
+// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently.
+module.exports = require('@ohos/hvigor-ohos-plugin').legacyAppTasks
\ No newline at end of file
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/package-lock.json b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..cbdd8785204630d0d84a206a9e9ea38ac8e28999
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/package-lock.json
@@ -0,0 +1,1226 @@
+{
+ "name": "Harmony_TODO",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@ohos/hos-sdkmanager-common": {
+ "version": "1.0.4",
+ "resolved": "https://repo.harmonyos.com/npm/@ohos/hos-sdkmanager-common/-/@ohos/hos-sdkmanager-common-1.0.4.tgz",
+ "integrity": "sha512-LWrfF8Js+u54BcEAdyjzsA81iGBA4LPvQdQ1ig/pX6mvTieUPSvtjtAzdI8nnGVmJRLrHwAMHEO/syd9d8UAFw==",
+ "requires": {
+ "@ohos/sdkmanager-common": "^1.1.8"
+ }
+ },
+ "@ohos/hvigor": {
+ "version": "1.2.2",
+ "resolved": "https://repo.harmonyos.com/npm/@ohos/hvigor/-/@ohos/hvigor-1.2.2.tgz",
+ "integrity": "sha512-GfXCf7pDnyEcxWkG7Edd23XPxgym1vY37zdNt/Gj0pZmw0f+FrP+blfCzVWfYQYlI76krzd96+kvD4lgWkIPBQ==",
+ "requires": {
+ "@ohos/hvigor-base": "1.2.2",
+ "fs-extra": "10.0.1",
+ "interpret": "1.4.0",
+ "liftoff": "4.0.0",
+ "mute-stdout": "1.0.0",
+ "pretty-hrtime": "1.0.0",
+ "v8flags": "3.2.0",
+ "yargs": "7.1.2"
+ }
+ },
+ "@ohos/hvigor-base": {
+ "version": "1.2.2",
+ "resolved": "https://repo.harmonyos.com/npm/@ohos/hvigor-base/-/@ohos/hvigor-base-1.2.2.tgz",
+ "integrity": "sha512-omwL/qjTE7DTCQdHZnMKuAxKlH1JOgOxaVAae1ca8j/oPuNgY6Spn+mpYRDHIktvav6axMmHT9zV1hJykY4GEg==",
+ "requires": {
+ "fs-extra": "10.0.1",
+ "json5": "2.2.0",
+ "log4js": "6.4.1",
+ "once": "1.4.0",
+ "pretty-hrtime": "1.0.0"
+ }
+ },
+ "@ohos/hvigor-ohos-plugin": {
+ "version": "1.2.2",
+ "resolved": "https://repo.harmonyos.com/npm/@ohos/hvigor-ohos-plugin/-/@ohos/hvigor-ohos-plugin-1.2.2.tgz",
+ "integrity": "sha512-gir91UxlhMbf2E/NjTYWJGrsNGBKD/1YYbaEdmswD/qW18UDY7jyuqSVyV/gj0h9+iji+gd53rXWzpLLztG5lg==",
+ "requires": {
+ "@ohos/hos-sdkmanager-common": "1.0.4",
+ "@ohos/hvigor-base": "1.2.2",
+ "@ohos/sdkmanager-common": "1.1.8",
+ "adm-zip": "0.5.9",
+ "ajv": "8.10.0",
+ "execa": "5.1.1",
+ "fast-xml-parser": "4.0.3",
+ "fs-extra": "10.0.1",
+ "glob": "7.2.0",
+ "iconv-lite": "0.6.3",
+ "json5": "2.2.0",
+ "lodash": "4.17.21",
+ "pretty-hrtime": "1.0.3",
+ "resolve-package-path": "4.0.3"
+ },
+ "dependencies": {
+ "pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A=="
+ }
+ }
+ },
+ "@ohos/hypium": {
+ "version": "1.0.2",
+ "resolved": "https://repo.harmonyos.com/npm/@ohos/hypium/-/@ohos/hypium-1.0.2.tgz",
+ "integrity": "sha512-HWW62q6hbd0PhvPTH96lo4j//owFwyCLj6Q2jmVLDW6mOt1dwJJwUQ7qUH+Cni/6MmcnyXKvt9I0moGAPK1aCw=="
+ },
+ "@ohos/sdkmanager-common": {
+ "version": "1.1.8",
+ "resolved": "https://repo.harmonyos.com/npm/@ohos/sdkmanager-common/-/@ohos/sdkmanager-common-1.1.8.tgz",
+ "integrity": "sha512-mxq69+6Zg/ybeQGnOtkBzOTbNBkEdiYehRKWsAD/je53v1W+ahauLqe90pNZEiBuVYugzb6z2EaJtAXYZtE8gQ=="
+ },
+ "adm-zip": {
+ "version": "0.5.9",
+ "resolved": "https://registry.npmmirror.com/adm-zip/-/adm-zip-0.5.9.tgz",
+ "integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg=="
+ },
+ "ajv": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.10.0.tgz",
+ "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="
+ },
+ "array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA=="
+ },
+ "array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w=="
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg=="
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmmirror.com/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA=="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "dependencies": {
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "date-format": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmmirror.com/date-format/-/date-format-4.0.13.tgz",
+ "integrity": "sha512-bnYCwf8Emc3pTD8pXnre+wfnjGtfi5ncMDKy7+cWZXbmRAsdWkOQHrfC1yz/KiwP5thDp2kCHWYWKBX4HP1hoQ=="
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="
+ },
+ "define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q=="
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==",
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-xml-parser": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-4.0.3.tgz",
+ "integrity": "sha512-xhQbg3a/EYNHwK0cxIG1nZmVkHX/0tWihamn5pU4Mhd9KEVE2ga8ZJiqEUgB2sApElvAATOdMTLjgqIpvYDUkQ==",
+ "requires": {
+ "strnum": "^1.0.5"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmmirror.com/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/findup-sync/-/findup-sync-5.0.0.tgz",
+ "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==",
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.3",
+ "micromatch": "^4.0.4",
+ "resolve-dir": "^1.0.1"
+ }
+ },
+ "fined": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/fined/-/fined-2.0.0.tgz",
+ "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==",
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^5.0.0",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.3.0",
+ "parse-filepath": "^1.0.2"
+ }
+ },
+ "flagged-respawn": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/flagged-respawn/-/flagged-respawn-2.0.0.tgz",
+ "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA=="
+ },
+ "flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ=="
+ },
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==",
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "fs-extra": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.0.1.tgz",
+ "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==",
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
+ },
+ "get-intrinsic": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
+ "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="
+ },
+ "glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==",
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "requires": {
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
+ },
+ "human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="
+ },
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmmirror.com/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ=="
+ },
+ "is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "requires": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
+ },
+ "is-core-module": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.10.0.tgz",
+ "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
+ },
+ "is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "requires": {
+ "is-unc-path": "^1.0.0"
+ }
+ },
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
+ },
+ "is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "requires": {
+ "unc-path-regex": "^0.1.2"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q=="
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg=="
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+ },
+ "json5": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.0.tgz",
+ "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==",
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "liftoff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/liftoff/-/liftoff-4.0.0.tgz",
+ "integrity": "sha512-rMGwYF8q7g2XhG2ulBmmJgWv25qBsqRbDn5gH0+wnuyeFt7QBJlHJmtg5qEdn4pN6WVAUMgXnIxytMFRX9c1aA==",
+ "requires": {
+ "extend": "^3.0.2",
+ "findup-sync": "^5.0.0",
+ "fined": "^2.0.0",
+ "flagged-respawn": "^2.0.0",
+ "is-plain-object": "^5.0.0",
+ "object.map": "^1.0.1",
+ "rechoir": "^0.8.0",
+ "resolve": "^1.20.0"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "log4js": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmmirror.com/log4js/-/log4js-6.4.1.tgz",
+ "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==",
+ "requires": {
+ "date-format": "^4.0.3",
+ "debug": "^4.3.3",
+ "flatted": "^3.2.4",
+ "rfdc": "^1.3.0",
+ "streamroller": "^3.0.2"
+ }
+ },
+ "make-iterator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg=="
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "mute-stdout": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/mute-stdout/-/mute-stdout-1.0.0.tgz",
+ "integrity": "sha512-MaSQenn0f9oxIjtCufclpV00MuYTiHaXPbdcfPIM+quMqoa8cXywjHHx4LhhIAZlXqPWMdcUpYviajfmHtHRJw=="
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ=="
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ },
+ "object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==",
+ "requires": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==",
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmmirror.com/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==",
+ "requires": {
+ "lcid": "^1.0.0"
+ }
+ },
+ "parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==",
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q=="
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmmirror.com/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==",
+ "requires": {
+ "path-root-regex": "^0.1.0"
+ }
+ },
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmmirror.com/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ=="
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg=="
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pretty-hrtime": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/pretty-hrtime/-/pretty-hrtime-1.0.0.tgz",
+ "integrity": "sha512-CU2l5CYUAptUYq/671ajexQfXuxJFwwg0n243Kdkx8bTjeenedsWgu8TGHPm03vLfNtk3aTXgySKPp3Usykudw=="
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
+ "rechoir": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmmirror.com/rechoir/-/rechoir-0.8.0.tgz",
+ "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
+ "requires": {
+ "resolve": "^1.20.0"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
+ },
+ "require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug=="
+ },
+ "resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==",
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ }
+ },
+ "resolve-package-path": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/resolve-package-path/-/resolve-package-path-4.0.3.tgz",
+ "integrity": "sha512-SRpNAPW4kewOaNUt8VPqhJ0UMxawMwzJD8V7m1cJfdSTK9ieZwS6K7Dabsm4bmLFM96Z5Y/UznrpG5kt1im8yA==",
+ "requires": {
+ "path-root": "^0.1.1"
+ }
+ },
+ "rfdc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz",
+ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.12",
+ "resolved": "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz",
+ "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA=="
+ },
+ "streamroller": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmmirror.com/streamroller/-/streamroller-3.1.2.tgz",
+ "integrity": "sha512-wZswqzbgGGsXYIrBYhOE0yP+nQ6XRk7xDcYwuQAGTYXdyAUmvgVFE0YU1g5pvQT0m7GBaQfYcSnlHbapuK0H0A==",
+ "requires": {
+ "date-format": "^4.0.13",
+ "debug": "^4.3.4",
+ "fs-extra": "^8.1.0"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+ }
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="
+ },
+ "strnum": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz",
+ "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA=="
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmmirror.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg=="
+ },
+ "universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "v8flags": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmmirror.com/v8flags/-/v8flags-3.2.0.tgz",
+ "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ=="
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "y18n": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmmirror.com/y18n/-/y18n-3.2.2.tgz",
+ "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ=="
+ },
+ "yargs": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmmirror.com/yargs/-/yargs-7.1.2.tgz",
+ "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==",
+ "requires": {
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^5.0.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-5.0.1.tgz",
+ "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==",
+ "requires": {
+ "camelcase": "^3.0.0",
+ "object.assign": "^4.1.0"
+ }
+ }
+ }
+}
diff --git a/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/package.json b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..88862a0f6eb875001ef5b6f8b35d9c28794b2b95
--- /dev/null
+++ b/2022_ArkUI_Bootcamp/1452873149@qq.com+HarmonyToDo/package.json
@@ -0,0 +1,18 @@
+{
+ "license": "ISC",
+ "devDependencies": {},
+ "name": "Harmony_TODO",
+ "ohos": {
+ "org": "huawei",
+ "directoryLevel": "project",
+ "buildTool": "hvigor"
+ },
+ "description": "example description",
+ "repository": {},
+ "version": "1.0.0",
+ "dependencies": {
+ "@ohos/hypium": "1.0.2",
+ "@ohos/hvigor-ohos-plugin": "1.2.2",
+ "@ohos/hvigor": "1.2.2"
+ }
+}