commit 1676aef8f2dd26fe7728b689da8d3f608096a76d Author: expressgy Date: Wed Mar 22 22:17:42 2023 +0800 重构 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f63c99a --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist.* +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.obsidian/app.json b/.obsidian/app.json new file mode 100644 index 0000000..5a06240 --- /dev/null +++ b/.obsidian/app.json @@ -0,0 +1,6 @@ +{ + "showLineNumber": true, + "strictLineBreaks": true, + "livePreview": false, + "readableLineLength": false +} \ No newline at end of file diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json new file mode 100644 index 0000000..c8c365d --- /dev/null +++ b/.obsidian/appearance.json @@ -0,0 +1,3 @@ +{ + "accentColor": "" +} \ No newline at end of file diff --git a/.obsidian/core-plugins-migration.json b/.obsidian/core-plugins-migration.json new file mode 100644 index 0000000..3106ebd --- /dev/null +++ b/.obsidian/core-plugins-migration.json @@ -0,0 +1,29 @@ +{ + "file-explorer": true, + "global-search": true, + "switcher": true, + "graph": true, + "backlink": true, + "canvas": true, + "outgoing-link": true, + "tag-pane": true, + "page-preview": true, + "daily-notes": true, + "templates": true, + "note-composer": true, + "command-palette": true, + "slash-command": false, + "editor-status": true, + "starred": true, + "markdown-importer": false, + "zk-prefixer": false, + "random-note": false, + "outline": true, + "word-count": true, + "slides": false, + "audio-recorder": false, + "workspaces": false, + "file-recovery": true, + "publish": false, + "sync": false +} \ No newline at end of file diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json new file mode 100644 index 0000000..086a8e4 --- /dev/null +++ b/.obsidian/core-plugins.json @@ -0,0 +1,20 @@ +[ + "file-explorer", + "global-search", + "switcher", + "graph", + "backlink", + "canvas", + "outgoing-link", + "tag-pane", + "page-preview", + "daily-notes", + "templates", + "note-composer", + "command-palette", + "editor-status", + "starred", + "outline", + "word-count", + "file-recovery" +] \ No newline at end of file diff --git a/.obsidian/hotkeys.json b/.obsidian/hotkeys.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/.obsidian/hotkeys.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json new file mode 100644 index 0000000..d73a680 --- /dev/null +++ b/.obsidian/workspace.json @@ -0,0 +1,261 @@ +{ + "main": { + "id": "2218a07615f59148", + "type": "split", + "children": [ + { + "id": "9149a57b66e2b18f", + "type": "tabs", + "children": [ + { + "id": "9955fbf4bf564a5f", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "xi-note-computer/Xi-S-XinQu/XQ01-需求导入.md", + "mode": "source", + "source": false + } + } + }, + { + "id": "77c1c070d5cc0391", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "xi-note-computer/Xi-S-XinQu/XQ02-前置功能模块.md", + "mode": "source", + "source": true + } + } + }, + { + "id": "0d80a88c671858ec", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "xi-note-computer/Xi-C-操作系统/Linux/Docker/Docker.md", + "mode": "preview", + "source": true + } + } + }, + { + "id": "adef42b9e025b76f", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "xi-note-computer/Xi-S-XinQu/XQ04-场景分析.md", + "mode": "source", + "source": true + } + } + }, + { + "id": "2a9801334c755e55", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "xi-note-computer/Xi-S-XinQu/XQ05-数据库建设.md", + "mode": "source", + "source": true + } + } + }, + { + "id": "5f4f4377096139bb", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "xi-note-computer/Xi-S-XinQu/XQ06-接口建设和自动化测试.md", + "mode": "source", + "source": true + } + } + }, + { + "id": "865a0430bf7de6b4", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "xi-note-computer/Xi-S-XinQu/XQ07-建设工程控制-流程和工期.md", + "mode": "source", + "source": true + } + } + }, + { + "id": "a68eb5f97f7d52fb", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "xi-note-computer/Xi-S-XinQu/XQ04-场景分析.md", + "mode": "source", + "source": true + } + } + } + ], + "currentTab": 2 + } + ], + "direction": "vertical" + }, + "left": { + "id": "031afcfa2e5c3d38", + "type": "split", + "children": [ + { + "id": "9df5292d246cabad", + "type": "tabs", + "children": [ + { + "id": "eeb8ccc1c5b3586e", + "type": "leaf", + "state": { + "type": "file-explorer", + "state": { + "sortOrder": "alphabetical" + } + } + }, + { + "id": "0f4aeb5a182cb867", + "type": "leaf", + "state": { + "type": "search", + "state": { + "query": "", + "matchingCase": false, + "explainSearch": false, + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical" + } + } + }, + { + "id": "d2aa27dce7bce4b4", + "type": "leaf", + "state": { + "type": "starred", + "state": {} + } + } + ] + } + ], + "direction": "horizontal", + "width": 300 + }, + "right": { + "id": "b15348c4f378485a", + "type": "split", + "children": [ + { + "id": "05912433d3ad08ad", + "type": "tabs", + "children": [ + { + "id": "aa72d73ebf8c1754", + "type": "leaf", + "state": { + "type": "backlink", + "state": { + "file": "xi-note-computer/Xi-C-操作系统/Linux/Docker/Docker.md", + "collapseAll": true, + "extraContext": true, + "sortOrder": "alphabetical", + "showSearch": false, + "searchQuery": "", + "backlinkCollapsed": false, + "unlinkedCollapsed": true + } + } + }, + { + "id": "2bb87078a7b9039b", + "type": "leaf", + "state": { + "type": "outgoing-link", + "state": { + "file": "xi-note-computer/Xi-C-操作系统/Linux/Docker/Docker.md", + "linksCollapsed": false, + "unlinkedCollapsed": true + } + } + }, + { + "id": "0eac151b5b1041f2", + "type": "leaf", + "state": { + "type": "tag", + "state": { + "sortOrder": "alphabetical", + "useHierarchy": true + } + } + }, + { + "id": "b4869147578dd521", + "type": "leaf", + "state": { + "type": "outline", + "state": { + "file": "xi-note-computer/Xi-C-操作系统/Linux/Docker/Docker.md" + } + } + } + ], + "currentTab": 3 + } + ], + "direction": "horizontal", + "width": 300 + }, + "left-ribbon": { + "hiddenItems": { + "canvas:新建白板": false, + "switcher:打开快速切换": false, + "graph:查看关系图谱": false, + "daily-notes:打开/创建今天的日记": false, + "templates:插入模板": false, + "command-palette:打开命令面板": false + } + }, + "active": "0d80a88c671858ec", + "lastOpenFiles": [ + "xi-note-computer/Xi-S-XinQu/XQ10-程序结构/微服务架构拓扑.canvas", + "xi-note-computer/Xi-S-XinQu/XQ03-需求模块分析.md", + "xi-note-computer/Xi-S-XinQu/XQ02-前置功能模块.md", + "xi-note-computer/Xi-S-XinQu/XQ01-需求导入.md", + "xi-note-computer/Xi-S-XinQu/数据库/sql.sql", + "xi-note-computer/Xi-S-XinQu/数据库", + "xi-note-computer/Xi-S-XinQu/XQ10-程序结构/用户系统数据架构.canvas", + "xi-note-computer/Xi-S-XinQu/XQ08-预期和阶段成果.md", + "xi-note-computer/Xi-S-XinQu/XQ07-建设工程控制-流程和工期.md", + "xi-note-computer/Xi-S-XinQu/XQ06-接口建设和自动化测试.md", + "xi-note-computer/Xi-S-XinQu/XQ05-数据库建设.md", + "xi-note-computer/Xi-S-XinQu/XQ04-场景分析.md", + "xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/TypeScript.md", + "xi-note-computer/Xi-S-XinQu/XQ10-程序结构", + "xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/Framework/Fastify/Started入门.md", + "xi-note-computer/Xi-S-XinQu/Readme.md", + "xi-note-computer/Xi-S-XinQu", + "xi-note-computer/Xi-C-操作系统/Windows/wsl2总结.md", + "xi-note-computer/Xi-C-操作系统/Windows", + "xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/005.ts", + "xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/005.js", + "xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/Framework/JS后端框架.DIRNAME", + "xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/Framework/Fastify", + "xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/Framework" + ] +} \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..3ce94de --- /dev/null +++ b/readme.md @@ -0,0 +1,11 @@ +# BPEMR + +> 此文件为我的档案和笔记目录,记录学习过程 + +touch README.md +git init +git checkout -b main +git add README.md +git commit -m "first commit" +git remote add origin http://togy.top/expressgy/BPEMR.git +git push -u origin main \ No newline at end of file diff --git a/xi-note-computer/.obsidian/app.json b/xi-note-computer/.obsidian/app.json new file mode 100644 index 0000000..1d0de4a --- /dev/null +++ b/xi-note-computer/.obsidian/app.json @@ -0,0 +1,13 @@ +{ + "livePreview": false, + "defaultViewMode": "preview", + "strictLineBreaks": true, + "showLineNumber": true, + "trashOption": "local", + "newFileLocation": "folder", + "newFileFolderPath": "Live", + "attachmentFolderPath": "Static", + "showUnsupportedFiles": true, + "rightToLeft": false, + "readableLineLength": true +} \ No newline at end of file diff --git a/xi-note-computer/.obsidian/appearance.json b/xi-note-computer/.obsidian/appearance.json new file mode 100644 index 0000000..d72a9ee --- /dev/null +++ b/xi-note-computer/.obsidian/appearance.json @@ -0,0 +1,8 @@ +{ + "accentColor": "", + "theme": "obsidian", + "translucency": true, + "baseFontSize": 14, + "showViewHeader": true, + "nativeMenus": false +} \ No newline at end of file diff --git a/xi-note-computer/.obsidian/core-plugins-migration.json b/xi-note-computer/.obsidian/core-plugins-migration.json new file mode 100644 index 0000000..95d43cb --- /dev/null +++ b/xi-note-computer/.obsidian/core-plugins-migration.json @@ -0,0 +1,29 @@ +{ + "file-explorer": true, + "global-search": true, + "switcher": true, + "graph": true, + "backlink": true, + "canvas": true, + "outgoing-link": true, + "tag-pane": true, + "page-preview": true, + "daily-notes": true, + "templates": true, + "note-composer": true, + "command-palette": true, + "slash-command": false, + "editor-status": true, + "starred": true, + "markdown-importer": true, + "zk-prefixer": false, + "random-note": false, + "outline": true, + "word-count": true, + "slides": false, + "audio-recorder": false, + "workspaces": true, + "file-recovery": true, + "publish": false, + "sync": false +} \ No newline at end of file diff --git a/xi-note-computer/.obsidian/core-plugins.json b/xi-note-computer/.obsidian/core-plugins.json new file mode 100644 index 0000000..7524cc4 --- /dev/null +++ b/xi-note-computer/.obsidian/core-plugins.json @@ -0,0 +1,22 @@ +[ + "file-explorer", + "global-search", + "switcher", + "graph", + "backlink", + "canvas", + "outgoing-link", + "tag-pane", + "page-preview", + "daily-notes", + "templates", + "note-composer", + "command-palette", + "editor-status", + "starred", + "markdown-importer", + "outline", + "word-count", + "workspaces", + "file-recovery" +] \ No newline at end of file diff --git a/xi-note-computer/.obsidian/hotkeys.json b/xi-note-computer/.obsidian/hotkeys.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/xi-note-computer/.obsidian/hotkeys.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/xi-note-computer/.obsidian/workspace.json b/xi-note-computer/.obsidian/workspace.json new file mode 100644 index 0000000..7610d2f --- /dev/null +++ b/xi-note-computer/.obsidian/workspace.json @@ -0,0 +1,212 @@ +{ + "main": { + "id": "2f176d200d18214b", + "type": "split", + "children": [ + { + "id": "d70a335a2d9b3e28", + "type": "tabs", + "children": [ + { + "id": "b39cb5dc2f076386", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "Xi-S-XinQu/Readme.md", + "mode": "source", + "source": true + } + } + }, + { + "id": "f45cc3df07a2e929", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "Xi-S-XinQu/XQ01-需求导入.md", + "mode": "source", + "source": true + } + } + }, + { + "id": "cd7fdae3e80a91d4", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "Xi-A-Program/Xi-A9-Databases/MongoDB/MongoDB官网版.md", + "mode": "source", + "source": true + } + } + } + ], + "currentTab": 2 + } + ], + "direction": "vertical" + }, + "left": { + "id": "4a37ba04e69118b6", + "type": "split", + "children": [ + { + "id": "114dfc492c2d3584", + "type": "tabs", + "children": [ + { + "id": "dc5d3e39d8240cca", + "type": "leaf", + "state": { + "type": "file-explorer", + "state": { + "sortOrder": "alphabetical" + } + } + }, + { + "id": "27fe86675b840c4a", + "type": "leaf", + "state": { + "type": "search", + "state": { + "query": "", + "matchingCase": true, + "explainSearch": false, + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical" + } + } + }, + { + "id": "959fd55e91122234", + "type": "leaf", + "state": { + "type": "starred", + "state": {} + } + } + ] + } + ], + "direction": "horizontal", + "width": 288.5 + }, + "right": { + "id": "8c260bb0d243a858", + "type": "split", + "children": [ + { + "id": "1acbaf85a33d2577", + "type": "tabs", + "children": [ + { + "id": "d799646b979d9da0", + "type": "leaf", + "state": { + "type": "backlink", + "state": { + "file": "Xi-A-Program/Xi-A9-Databases/MongoDB/MongoDB官网版.md", + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical", + "showSearch": false, + "searchQuery": "", + "backlinkCollapsed": false, + "unlinkedCollapsed": true + } + } + }, + { + "id": "69640ca19ee2077e", + "type": "leaf", + "state": { + "type": "outgoing-link", + "state": { + "file": "Xi-A-Program/Xi-A9-Databases/MongoDB/MongoDB官网版.md", + "linksCollapsed": false, + "unlinkedCollapsed": true + } + } + }, + { + "id": "a52ae6ce4d5f55fb", + "type": "leaf", + "state": { + "type": "tag", + "state": { + "sortOrder": "frequency", + "useHierarchy": false + } + } + }, + { + "id": "fa99c4b5654469e2", + "type": "leaf", + "state": { + "type": "outline", + "state": { + "file": "Xi-A-Program/Xi-A9-Databases/MongoDB/MongoDB官网版.md" + } + } + } + ], + "currentTab": 3 + } + ], + "direction": "horizontal", + "width": 283.5 + }, + "left-ribbon": { + "hiddenItems": { + "canvas:新建白板": false, + "markdown-importer:打开 Markdown 格式转换器": false, + "workspaces:管理工作区布局": false, + "switcher:打开快速切换": false, + "graph:查看关系图谱": false, + "daily-notes:打开/创建今天的日记": false, + "templates:插入模板": false, + "command-palette:打开命令面板": false + } + }, + "active": "cd7fdae3e80a91d4", + "lastOpenFiles": [ + "Xi-S-XinQu/XQ01-需求导入.md", + "Xi-A-Program/Xi-A9-Databases/MongoDB/MongoDB官网版.md", + "Xi-A-Program/Xi-A9-Databases/MongoDB", + "Xi-A-Program/Xi-A9-Databases", + "Xi-S-XinQu/Readme.md", + "Xi-S-XinQu/未命名", + "Xi-S-XinQu", + "未命名.canvas", + "Xi-A-Program/Xi-A1-JavaScript/Framework/Fastify/Started入门.md", + "Xi-Plan9/2023年.md", + "Xi-A-Program/Xi-A1-JavaScript/JS/JavaScript高级程序设计(第四版)深入学习.md", + "Xi-A-Program/Xi-A1-JavaScript/Framework/JS后端框架.DIRNAME", + "Xi-A-Program/Xi-A1-JavaScript/Framework/新建 文本文档.txt", + "Xi-A-Program/Xi-A1-JavaScript/Framework/JS后端框架.DIRNAME.md", + "Xi-A-Program/Xi-A1-JavaScript/Framework/Nest", + "Xi-A-Program/Xi-A1-JavaScript/Framework/Fastify", + "Xi-A-Program/Xi-A1-JavaScript/Framework", + "Xi-A-Program/Xi-A1-JavaScript/JS/尚学堂.md", + "Xi-A-Program/Xi-A1-JavaScript/JS/截屏2021-08-22 上午3.17.45.png", + "Xi-A-Program/Xi-A1-JavaScript/ES/JS 面向对象再学习.md", + "Xi-A-Program/Xi-A1-JavaScript/ES/JS高级.md", + "Xi-A-Program/Xi-A1-JavaScript/TypeScript/TypeScript.md", + "Xi-C-操作系统/Windows/wsl2总结.md", + "Xi-C-操作系统/Windows", + "Xi-A-编程/Xi-A1-JavaScript语言/JS/尚学堂.md", + "Xi-A-编程/Xi-A2-前端知识/HTML/尚学堂.md", + "Xi-A-编程/Xi-A3-GoLang/Golang.md", + "Xi-C-操作系统/Linux/Docker/Docker.md", + "Xi-C-操作系统/Linux/ArchLinux.svg", + "Xi-C-操作系统/Linux/UFW.md", + "Xi-C-操作系统/Linux/Shell.md", + "Xi-C-操作系统/Linux/Docker/Docker.svg", + "Xi-C-操作系统/Linux/Docker/docker.png" + ] +} \ No newline at end of file diff --git a/xi-note-computer/.trash/Golang.md b/xi-note-computer/.trash/Golang.md new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/.trash/JS后端框架.DIRNAME.md b/xi-note-computer/.trash/JS后端框架.DIRNAME.md new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/.trash/未命名.canvas b/xi-note-computer/.trash/未命名.canvas new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/xi-note-computer/.trash/未命名.canvas @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/xi-note-computer/Static/Docker Engine.png b/xi-note-computer/Static/Docker Engine.png new file mode 100644 index 0000000..59c83d4 Binary files /dev/null and b/xi-note-computer/Static/Docker Engine.png differ diff --git a/xi-note-computer/Static/Docker.svg b/xi-note-computer/Static/Docker.svg new file mode 100644 index 0000000..d2a1f5f --- /dev/null +++ b/xi-note-computer/Static/Docker.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/xi-note-computer/Static/Docker和VMware区别.png b/xi-note-computer/Static/Docker和VMware区别.png new file mode 100644 index 0000000..308c3bb Binary files /dev/null and b/xi-note-computer/Static/Docker和VMware区别.png differ diff --git a/xi-note-computer/Static/Docker平台组成.png b/xi-note-computer/Static/Docker平台组成.png new file mode 100644 index 0000000..5f860c2 Binary files /dev/null and b/xi-note-computer/Static/Docker平台组成.png differ diff --git a/xi-note-computer/Static/Docker核心.png b/xi-note-computer/Static/Docker核心.png new file mode 100644 index 0000000..baaa5df Binary files /dev/null and b/xi-note-computer/Static/Docker核心.png differ diff --git a/xi-note-computer/Static/Docker生命周期.png b/xi-note-computer/Static/Docker生命周期.png new file mode 100644 index 0000000..3250212 Binary files /dev/null and b/xi-note-computer/Static/Docker生命周期.png differ diff --git a/xi-note-computer/Static/镜像分层原理.png b/xi-note-computer/Static/镜像分层原理.png new file mode 100644 index 0000000..9290ed2 Binary files /dev/null and b/xi-note-computer/Static/镜像分层原理.png differ diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/ES/ES.dirname b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/ES/ES.dirname new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/ES/JS 面向对象再学习.md b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/ES/JS 面向对象再学习.md new file mode 100644 index 0000000..380af16 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/ES/JS 面向对象再学习.md @@ -0,0 +1,284 @@ +# JS 面向对象再学习 + + + +```js +class Satr{ + constructor(name){ + this.name = name; + } +} +``` + +```js +class Father{ + constructor(xing){ + this.xing = xing; + } + say(){ + return 'i am father' + } +} + +class Son extends Father{ + construvtor(xing, ming){ + super(xing);// super必须在子类this之前调用 + this.ming = ming + console.log(this.xing, this.ming) + } + say(){ + console.log(super.say() + '的儿子') + } +} +``` + +类再ES6没有变量提升,不能再类定义之前使用类 + +利用构造函数创建对象 + +```js +function Star(name, age){ + this.name = name; + this.age = age; + this.song = function() { + console.log(' ican sing song.') + } +} +Star.sex = "男";// 静态成员,只能通过构造函数访问,Satr + +const 张学友 = new Start('张学友', 18) +``` + +*this创建的对象为实例对象,实例对象只能用实例化的对象调用,也就是需要被 new* + +构造函数创建实例都西昂浪费空间,对象内复杂的对象在实例化的时候会开辟新的内存 + +```js +function A(){ + this.run = function(){ + return 'Hello World!' + } +} +const b = new A(); +const c = new A(); +b.run === c.run;// false +``` + +**每一个构造函数都有一个原型对象 prototype ** + +每一个实例共享对象 + + + +实例对象的`__proto__`指向原型对象的`prototype` + +先查找对象身上的,案子查看`__proto__`上的 + +`__proto__`和`prototype`中的`constructor`指向构造函数本身(这也是他的作用) + +构造函数的`prototype`被覆盖了的话用`constructor`指回原来的构造函数 + + + + + +call调用函数,并改变this + +```js +function fn(){ + console.log('Hello,world!'); +} +fn.call();// Hello,world! +// fn的this为window +fn.call(obj); +// fn的this为obj + +function a(x, y){ + console.log(this, x, y) +} +a.call(obj, x, y);// 第一个参数是this指向 +``` + +```js +function Father(name){ + this.name = name; +} +function Son(name){ + Father.call(this, name);// call执行了Father,并把自己的this传递进去,此时,Father进行this.name = name操作实际上是给Son添加name +} + +Son.prototype = Father.prototype; +Son.prototype.constructor = Son; +// 以上操作是错误的,也会改变父对象的方法 + +// 正确 +Son.prototype = new Father(); +Son.prototype.constructor = Son; +// 或者 +Son.prototype.__proto__ = Father.prototype +``` + + + +**Object.defineProperty** + +`Object.defineProperty(obj, prop, descriptor)` + +### [参数](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty#参数) + +- `obj` + + 要定义属性的对象。 + +- `prop` + + 要定义或修改的属性的名称或 [`Symbol`](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol) 。 + +- `descriptor` + + 要定义或修改的属性描述符。 + + + +- `configurable` + +当且仅当该属性的 `configurable` 键值为 `true` 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。 +**默认为** **`false`**。 + +- `enumerable` + + 当且仅当该属性的 `enumerable` 键值为 `true` 时,该属性才会出现在对象的枚举属性中。 **默认为 `false`**。 + +数据描述符还具有以下可选键值: + +- `value` + + 该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。 **默认为 [`undefined`](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/undefined)**。 + +- `writable` + + 当且仅当该属性的 `writable` 键值为 `true` 时,属性的值,也就是上面的 `value`,才能被[`赋值运算符` (en-US)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#assignment_operators)改变。 **默认为 `false`。** + +存取描述符还具有以下可选键值: + +- `get` + + 属性的 getter 函数,如果没有 getter,则为 `undefined`。当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入 `this` 对象(由于继承关系,这里的`this`并不一定是定义该属性的对象)。该函数的返回值会被用作属性的值。 **默认为 [`undefined`](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/undefined)**。 + +- `set` + + 属性的 setter 函数,如果没有 setter,则为 `undefined`。当属性值被修改时,会调用此函数。该方法接受一个参数(也就是被赋予的新值),会传入赋值时的 `this` 对象。 **默认为 [`undefined`](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/undefined)**。 + +#### 描述符默认值汇总 + +- 拥有布尔值的键 `configurable`、`enumerable` 和 `writable` 的默认值都是 `false`。 +- 属性值和函数的键 `value`、`get` 和 `set` 字段的默认值为 `undefined`。 + + + + + + + + + + + +* 函数的特殊定义方式 + +```js +const fn = new Function('a','b','console.log(a + b);');// 必须使用字符串 +``` + + + +```js +function(){}// 调用者 +() => {}// 当前环境,定义者 +``` + + + +applay + +```js + +function fn (a, b){ + return a + b; +} + +console.log(fn.applay(window, [1, 2]));// 参数是数组,返回值是函数返回值 +``` + +bind + +``` +不调用函数 +返回值是新的函数,是原函数的拷贝 +``` + + + +严格模式 + +```js +'use strict'; + + +提高编译器效率,消除不安全,取消不严谨,增加了不可用的关键词 +// 1. 不能不定义变量就是用 a = 32 +// 2. 布恩那个删除以生命好的变量 delete a +// 3. this指向为undefined +// 4. 定时器还是window、 +// 5. 函数不允许参数重复function a(b, b) +// 6. 不允许再非函数块中写函数 +``` + + + +高阶函数:返回值是函数 + +函数柯里化:部分求值,外层函数值第一次调用后固定,内层函数可变 + + + +浅拷贝是复制第一层 + +```js +const a = { + name:'何夕', + age:12 +} +// 1 +let b = {} +for (let i in a){ + b[i] = a[i]; +} +// 2 +Object.assign(b, a);// b为需要改变的东西,a为模板 +// 3 +b = {...a} +``` + +深拷贝 + +```js +递归判断类型 +``` + + + + + +* 冒泡 +* 正则 +* Object、Array和迭代器等方法,map,set等 +* event loop +* promise +* 宏任务微任务 +* 报错 +* 异步错误捕获 + + + +* **算法** \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/ES/JS高级.md b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/ES/JS高级.md new file mode 100644 index 0000000..345485f --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/ES/JS高级.md @@ -0,0 +1,190 @@ +# JavaScript高级知识 + +> 2022/6/20 + + + +## 语法和数据类型 + +变量的名字又叫做**标识符** + +严格模式下直接赋值会出错`x = 12` + +如果没有赋初始值,则其值为 undefined + +var可以变量提升,let不行 + +使用 undefined 来判断一个变量是否已赋值 `input === undefined` + +`undefined` 值在布尔类型环境中会被当作 `false` 。 + +```js +var myArray = []; +if (!myArray[0]) myFunction(); +``` + +数值类型环境中 `undefined` 值会被转换为 `NaN`。 + +```js +var a; +a + 2; // 计算为 NaN +``` + +当你对一个 `null` 变量求值时,空值 `null` 在数值类型环境中会被当作 0 来对待,而布尔类型环境中会被当作 `false`。例如: + +```js +var n = null; +console.log(n * 32); // 在控制台中会显示 0 +``` + +对于函数来说,只有函数声明会被提升到顶部,而函数表达式不会被提升。 + +```js +/* 函数声明 */ + +foo(); // "bar" + +function foo() { + console.log("bar"); +} + + +/* 函数表达式 */ + +baz(); // 类型错误:baz 不是一个函数 + +var baz = function() { + console.log("bar2"); +}; +``` + +在同一作用域中,不能使用与变量名或函数名相同的名字来命名常量。例如: + +```js +// 这会造成错误 +function f() {}; +const f = 5; + +// 这也会造成错误 +function f() { + const g = 5; + var g; + + //语句 +} +``` + +七种基本数据类型:Boolean、null、undefined、数字、高精度整数BigInt、字符串、Symbol + +立即执行函数:立即执行函数只有一个作用:创建一个独立的作用域。这个作用域里面的变量,外面访问不到(即避免了「变量污染」)。 + +```js +let a = 'xsxs'; +(() => {let a;console.log(a)})() +``` + +字符串转换 + +```js +x = "The answer is " + 42 // "The answer is 42" +y = 42 + " is the answer" // "42 is the answer" + +"37" - 7 // 30 +"37" + 7 // "377" + +``` + +字符串 + +```js +var str = "this string \ +is broken \ +across multiple\ +lines." +console.log(str); // this string is broken across multiplelines. + +``` + + + + + +## 流程控制和错误处理 + +下面这些值将被计算出 false (also known as Falsy values): + +- `false` +- `undefined` +- `null` +- `0` +- `NaN` +- 空字符串(`""`) + + + + + +## 函数 + +调用自身 + +1. `arguments.callee()` **(译者注:ES5 禁止在严格模式下使用此属性)** + +剩余参数 +剩余参数语法允许将不确定数量的参数表示为数组。在下面的例子中,使用剩余参数收集从第二个到最后参数。然后,我们将这个数组的每一个数与第一个参数相乘。这个例子是使用了一个箭头函数,这将在下一节介绍。 + +```js +function multiply(multiplier, ...theArgs) { + return theArgs.map(x => multiplier * x); +} + +var arr = multiply(2, 1, 2, 3); +console.log(arr); // [2, 4, 6] +``` + + + +箭头函数和普通函数 + +箭头函数 没有proptype属性,没有arguments,不能用new创建 + +```js +"use strict" +const a1 = () => ({ + name:"THIS", + method:{ + get(){ + console.log(this.names) + } + } +}) + +const obj = { + name:a1().name, + names:"I CAN DO IT", + ...a1().method +} + +console.log(obj.name) +obj.get() +``` + +this指向,普通函数指向调用者,箭头函数指向定义者 + + + +void 或者 void 不会返回内容 + + + + + + + +Map + +键可以为任意类型 + + + +Set集合,元素不重复 diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/Framework/Fastify/Started入门.md b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/Framework/Fastify/Started入门.md new file mode 100644 index 0000000..bcb6ec0 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/Framework/Fastify/Started入门.md @@ -0,0 +1,285 @@ +> 更新比较慢的版本,先熟悉这个教程和这个框架 +> [fastify/docs-chinese: Fastify 中文文档 (github.com)](https://github.com/fastify/docs-chinese) + +# 开始 + +准备 + +```bash +npm init -y +# 运行处加入 "build": "tsc -p tsconfig.json", +npx tsc --init +pnpm i -S fastify +pnpm i -D typescript @types/node +``` + +```ts +// started.ts +import Fastify from 'fastify' + +const fastify = Fastify({ + logger: false +}) + +fastify.get('/', async (request, reply) => { + return "Hello World" +}) + +async function start(){ + try{ + await fastify.listen({ + port:3000, + host:'0.0.0.0' + }) + }catch (e){ + fastify.log.error(e) + } +} + +start() +``` + +运行 + +```bash +npm run build +node started.js +``` + +# 路由 + +## 完整格式 + +```js +fastify.route({ + method: 'GET',// 请求类型 + url: '/',// 请求地址 + schema: {// 请求参数验证 + querystring: { + name: { type: 'string' }, + excitement: { type: 'integer' } + }, + response: {// 响应参数验证 + 200: { + type: 'object', + properties: { + hello: { type: 'string' } + } + } + } + }, + handler: function (request, reply) {// 响应程序 + reply.send({ hello: 'world' }) + } +}) +``` + +## 简写格式 + +- 也可以将处理函数卸载opts里面,但是如果简写中和opts里面都写了处理函数会报错 + +```js +const opts = { + schema: { + response: { + 200: { + type: 'object', + properties: { + hello: { type: 'string' } + } + } + } + } +} +fastify.get('/', opts, (request, reply) => { + reply.send({ hello: 'world' }) +}) +``` + +## URL构建 + +- Fastify 同时支持静态与动态的 URL +- 要注册一个**参数命名**的路径,请在参数名前加上_冒号_。_星号_表示**通配符**。 _注意,静态路由总是在参数路由和通配符之前进行匹配_ + +```js +// 参数路由 +fastify.get('/example/:userId', (request, reply) => {}) +fastify.get('/example/:userId/:secretToken', (request, reply) => {}) + +// 通配符 +fastify.get('/example/*', (request, reply) => {}) +// 多参数 +fastify.get('/example/near/:lat-:lng/radius/:r', (request, reply) => {}) +// 真实的冒号: +fastify.post('/name::verb') // 将被解释为 /name:verb +``` + +## Async, Await + +- 可以直接使用return返回值 +- 假如在路由中,`reply.send()` 脱离了 promise 链,在一个基于回调的 API 中被调用,你可以使用 `await reply`, 也可以是`return reply` +- -  `return value` 与 `reply.send(value)`同时使用只会发送第一次,同时还会触发警告日志,因为你试图发送两次响应。 + +```js +fastify.get('/', options, async function (request, reply) { + setImmediate(() => { + reply.send({ hello: 'world' }) + }) + await reply + // return reply +}) +``` + +## 路由前缀 + +```js +// server.js +const fastify = require('fastify')() + +fastify.register(require('./routes/v1/users'), { prefix: '/v1' }) +fastify.register(require('./routes/v2/users'), { prefix: '/v2' }) + +fastify.listen(3000) +``` + +```js +// routes/v1/users.js +module.exports = function (fastify, opts, done) { + fastify.get('/user', handler_v1) + done() +} +``` + +```js +// routes/v2/users.js +module.exports = function (fastify, opts, done) { + fastify.get('/user', handler_v2) + done() +} +``` + +## 自定义日志级别 + +- 可以在统一路由加入打印固定字段的,但是非必要 + +```js +// server.js +const fastify = require('fastify')({ logger: true }) + +fastify.register(require('./routes/user'), { logLevel: 'warn' }) +fastify.register(require('./routes/events'), { logLevel: 'debug' }) + +fastify.listen(3000) +``` + +- 也可以直接在路由的opts中定义 + +```js +fastify.get('/', { logLevel: 'warn' }, (request, reply) => { + reply.send({ hello: 'world' }) +}) +``` + +# 装饰器 + +```js +fastify.decorate('utility', function () { + // 新功能的代码 +}) +fastify.decorate('conf', { + db: 'some.db', + port: 3000 +}) +// 通过装饰属性的名称便可访问值: +fastify.utility() +console.log(fastify.conf.db) +``` + +路由函数的 `this` 指向 Fastify server + +```js +fastify.decorate('db', new DbConnection()) + +fastify.get('/', async function (request, reply) { + reply({hello: await this.db.query('world')}) +}) +``` + +## 检查装饰器的存在 + +用于检查服务器实例上是否存在某个装饰器: + +```js +// 用于检查服务器实例上是否存在某个装饰器: +fastify.hasDecorator('utility') +// 用于检查 Request 实例上是否存在某个装饰器 +fastify.hasRequestDecorator('utility') +// 用于检查 Reply 实例上是否存在某个装饰器 +fastify.hasReplyDecorator('utility') +``` + +# 验证和序列化 + +## 验证器复用 + +- `myField: { $ref: '#foo'}` 将在当前 schema 内搜索 `$id: '#foo'` 字段。 +- `myField: { $ref: '#/definitions/foo'}` 将在当前 schema 内搜索 `definitions.foo` 字段。 +- `myField: { $ref: 'http://url.com/sh.json#'}` 会搜索含 `$id: 'http://url.com/sh.json'` 的共用 schema。 +- `myField: { $ref: 'http://url.com/sh.json#/definitions/foo'}` 会搜索含 `$id: 'http://url.com/sh.json'` 的共用 schema,并使用其 `definitions.foo` 字段。 +- `myField: { $ref: 'http://url.com/sh.json#foo'}` 会搜索含 `$id: 'http://url.com/sh.json'` 的共用 schema,并使用其内部带 `$id: '#foo'` 的对象。 + +```js +fastify.addSchema({ + $id: 'http://example.com/', + type: 'object', + properties: { + hello: { type: 'string' } + } +}) + +fastify.post('/', { + handler () {}, + schema: { + body: { + type: 'array', + items: { $ref: 'http://example.com#/properties/hello' } + } + } +}) +// 作为根引用 +fastify.addSchema({ + $id: 'commonSchema', + type: 'object', + properties: { + hello: { type: 'string' } + } +}) + +fastify.post('/', { + handler () {}, + schema: { + body: { $ref: 'commonSchema#' }, + headers: { $ref: 'commonSchema#' } + } +}) +``` + +## 获取共用Schema + +- 当自定义验证器或序列化器的时候,Fastify 不再能控制它们,此时 `.addSchema` 方法失去了作用 + +```js +fastify.addSchema({ + $id: 'schemaId', + type: 'object', + properties: { + hello: { type: 'string' } + } +}) + +const mySchemas = fastify.getSchemas() +const mySchema = fastify.getSchema('schemaId') +``` + +## 验证 + diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/Framework/JS后端框架.DIRNAME b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/Framework/JS后端框架.DIRNAME new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/Framework/NestJS/NestJS.md b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/Framework/NestJS/NestJS.md new file mode 100644 index 0000000..2cad25c --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/Framework/NestJS/NestJS.md @@ -0,0 +1,150 @@ +# 生命周期 + +客户端 中间件 守卫 拦截器 管道 控制器 服务 拦截器 过滤器 响应 客户端 + +- 中间件 + - 全局中间件 + - 模块中间件 +- 守卫 + - 全局守卫 + - 控制器守卫 + - 路由守卫 +- 拦截器 + - 全局拦截器pre/post + - 控制器拦截器pre/post + - 路由拦截器pre/post +- 管道 + - 全局管道 + - 控制器管道 + - 路由管道 + - 路由参数管道 +- 过滤器 + - 路由过滤器 + - 控制器过滤器 + - 全局过滤器 + +# 核心概念 + +- 控制器(ontrollers) + - 处理请求 +- 服务(Services) + - 数据访问和核心逻辑 +- 模块(Modules) + - 组合所有的逻辑代码 +- 管道(Pipes) + - 检验请求数据 +- 过滤器(filters) + - 处理请求时的错误 +- 守卫(Guards) + - 鉴权和认证 +- 拦截器(Interceptors) + - 给请求和响应加入额外的逻辑 +- 存储库(Repositores) + - 数据库中的数据处理 + +# @nestjs/config配置文件 + +```bash +pnpm i -S @nestjs/config +``` + +1. 根目录建立.env文件 + +`以键值对方式存储` + +```env +HOST = host +PORT = port +``` + +2. app.module.ts导入 + +```ts +#!app.module.ts +import {ConfigModule} from "@nestjs/config"; +import Module from "@nestjs/common" + +@Module({ + imports: [ConfigModule.forRoot({ + isGlobal: true,// 是否全局使用 + envFilePath: ".env.velopment",// 设置特定的配置文件 + loag:[() => { + return dotenv.config({path: '.env'})// 加载其他配置文件,但是上面的配置会覆盖下面已存在的配置,都配置同一个变量名,上面的生效 + }] + })] +}) + +``` + +3. user.controller.ts使用 + +```ts +import { ConfigService } from "@nestjs/config" + +@Controller('user') +export class UserController{ + constructor(private configService: ConfigService){ + + } + @Get() + getUser(): string{ + console.log(this.configService.get(DB)) + return "Hello" + } +} +``` + +4. 使用枚举使用参数 + +建立enmu文件 + +```ts +export enum ConfigEnum{ + DB = "DB", + HOST = "HOST", +} +``` + +我可以使用js文件来定义配置文件 使用load方法 + +# 数据库 + +## ORM + +- ORM(Object Relational Mapping)对象关系映射,将对象概念和数据库联系起来 + +## 数据库设计参考 + +open.yespi.cn/list.html + +## 使用TypeORM + +### 安装 + +```bash +pnpm i -S @nestjs/typeorm typeorm mysql2 +``` + +### 导入 + +```ts +#!app.module.ts +import Module from "@nestjs/common"; +import { TypeOrmMoudle } from "@nestjs/typeorm" + +@Module({ + imports: [TypeOrmModule.forRoot({ + type:"mysql", + host:"localhost", + port:3306, + username:"root", + password:"root", + database:"dbname", + entities:[], + synchronize: true,//同步本地的cchema与数据库 ,初始化使用, + logging: ['error'],// 日志等级 + + })] +}) +``` + diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/JavaScript高级程序设计(第四版)深入学习.md b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/JavaScript高级程序设计(第四版)深入学习.md new file mode 100644 index 0000000..4a1cee0 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/JavaScript高级程序设计(第四版)深入学习.md @@ -0,0 +1,1493 @@ +# JavaScript高级程序设计(第四版)深入学习 + +> 2021/6/14 + + + +> 本书出版于2020/9 +> +> 2019的内容 + +## 第1章 什么事JavaScript + +1995 网景公司。应对低网速,实现客户端表单验证 + +我要好好学习!!! + +* ECMAScript +* DOM +* BOM + + + +## 第2章 HTML中的JavaScript + + 建议使用外部文件 + +理解加载顺序 + +延迟和下载完执行 + + + +## 第3章 语言基础 + +### 3.1 语法 + +* 区分大小写 +* 第一个字母是_和$或者字母(unicode的所有字符,包括汉字) +* 剩下的可以添加数字 +* 关键字、保留子、true、false、null不可以 + + + +* 单行注释和多行注释//。/**/ +* 严格模式,在脚本第一行加入`"use strict"`,这是全局严格模式,函数头部分可以定义整个函数 +* 最好使用分号 +* 最好使用代码块 + +### 3.2 保留字和关键字 + +### 3.3 变量 + +#### 3.1 var + +var可以在所有版本适用 + +let const值在ecma6以上 + + + +var 作用域在return后销毁 + +var可以重新赋值,也可以重新定义类型但不推荐 + +省略var定义的是全局变量**不推荐**严格模式不支持 + + + +可以反复定义一个变量,可以在使用后定义(声明提升),但不建议 + +#### 3.2 let + +let相比于var,let作用域是语句块,比如在if语句中声明的变量除了if就失效 + +let不允许多次声明(在子块中可以再次声明) + +let和var混用不会报错,只是针对不同的应用范围 + +let不会被提升 + +全局声明:window.关键字只能作用于var的全局变量,let则不行 + + + +#### 3.3 const常量 + +声明时必须赋值 + +不允许重复声明 + +不能修改值 + +和let相似 + +### 3.4 数据类型 + +6种简单类型:Undefined,Null,Boolean,Number,String,Symbol(ES6) + +复杂类型:Object对象 + +```js +let a="hello world!"; +typeof a;//"string" +typeof(a);//"string" +typeof 32;//"number" + + +//typeof是一个操作符,不是一个函数,所以不需要参数,但是也可以使用参数 +``` + +#### 3.4.2 Undefined + +let和var未赋值 + +undefined主要用于比较 + +未定义和使用未出现的值不一样,未出现的值会报错 + +```js +let a; +console.log(a);//undefined +console.log(b);//error +console.log(typeof b);//undefined,对于未声明的变量只有一个正确操作符就是typeof +``` + + + +```js +let a;//undefined +if(a)//不执行 +if(!a)//执行 +if(c)//error +``` + +#### 3.4.3 Null + +null指空对象 + +```js +let a=null; +console.log(typeof a);//Object +``` + +null用于声明空对象 + +#### 3.4.4 Boolean值 + +true!=1 + +false!=0 + +区分大小写 + +转换其他类型 + +**P33** + +#### 3.4.5 Number + +10进制直接输入 + +8进制在严格模式下不支持,一般模式下第一位是零,后面有超过基数的会当成十进制 + +16进制0x(区分大小写) + +##### 3.4.5.1浮点型 + +允许.11出现但不建议 + +默认将无效小数部分转化为整数 + +0.1+0.2=0.300000000004 + +##### 3.4.5.2范围 + +最大值:Number.MAX_VALUE + +最小值:Number.MIN_VALUE + + + +Number.NEGATIVE_INFINITY +infinity + +Number.POSTTIVE_INFINITY -infinity + + + +##### 3.4.5.3NaN + +不是数值,返回操作数值时失败 + +分母为零时 + +NaN不参与操作包括if比较 + +isNaN("32")//isNaN()检测函数 + + + +##### 3.4.5.4 数值转换 + +Number() + +parseInt()第二个参数可以指定进制parseInt("AF",16)//175 + +不指定进制需要使用标准进制表示法0xAF + +开头必须是数字,否则识别为NaN,空字符也为NaN + +parseFloat() + +详细规则**P36** + + + +#### 3.4.6 String + +##### 3.4.6.1字符字面量 + +``` +\n +\t +\b 退格 +\r +\f 换页 +\\ +``` + +转义字符在字符串中算1个字符 + + + +##### 3.4.6.2 字符串拼接 + +同Python + +##### 3.4.6.3 转换为字符串 + +a.toString()//null和undefined没有这个方法 + +一般不传参,和parseInt()一样,参数代表进制 + +##### 3.4.6.4模板字面量 + +换行会出现在字符串中正确表达 + +方便了HTML + +##### 3.4.6.5 字符串插值 + +```js +`${ a }scac`//这种样式的字符串插值必须使用1旁边的分词号 +``` + +##### 3.4.6.7 原始字符串,不转义 + +```js +String.raw'xasxas' +a="xasxax\xasxasx" +a.raw; +console.log(a.raw) +``` + +#### 3.4.6Symbol + +#### 3.4.7 Object() + +let a= new Object(); + + + +### 3.5 操作符 + +### 3.6 语句 + +#### 3.6.1 if + +```js +if (){}else{} +if(){ + +}else if(){ + +}else{ + +} +``` + +#### 3.6.2 do while + +```js +do{ + +}while() +``` + +#### 3.6.3while + +```js +while(){ + +} +``` + +#### 3.6.4 for语句 + +```js +for(){ + +} +``` + +#### 3.6.5 for in + +```js +for(a in b){ +} +``` + +#### 3.6.6 for of + +```js +for(a of b){}//严格迭代 i of window不行 +``` + +#### 3.6.7 标签语句 + +#### 3.6.8 break和continue语句 + +#### 3.6.9with + +将作用域设置给特定对象 + +```js +with(location){ + let qs=search.substring(1); + let url=href; +} +//实际上是location.search.substring(1) +``` + +#### 3.6.10 switch + +和c一样 + +``` + switch(){ + case value: + 语句 + break; + + } +``` + +### 3.7 函数 + +eval和arguments不能出现在函数名称和函数参数中 + + + +## 第4章 变量、作用域和内存 + +### 4.1原始值和引用值 + +原始值不能添加属性,有六个原始值 + +```js +let a=new String("xs");//这里变成了一哥obj +let b="xsx" +a.name="xs"//这里是错误的,但是不会报错,只是无法输出 +b.name="xs" +console.log(a.name)//xs +console.log(b.name)//undefined +console.log(typeof a)//Object +console.log(typeof a)//String +``` + +#### 4.1.2 复制值 + +原始值直接复制 + +引用值复制的是对象指针,修改原数据,复制值也会改变 + +#### 4.1.3 函数传参 + +传参都是按值传参(各自的方式) + +原始值和引用值都是通过自己的方式复制过去 + +#### 4.1.4 确定类型 + +typeof面对对象或者undefined。 输出的是Object + +### 4.2 执行上下文和作用域 + +#### 4.2.2 变量声明 + +1var + +自动添加到最近的上下文 + +2let + +块级 + +3**标识符查找** + +函数面对标识符时先在最近的上下文查找,查找不到在进行上下文查找,如果在最近的查找到了,就不会再运用全局的 + +### 4.3 垃圾回收 + +标记清理 + +引用计数(有问题已弃用) + +#### 4.3.3性能 + +调度垃圾回收过于频繁会造成性能浪费 + +#### 4.3.4内存 + +手动释放 + +变量=null + +多使用 let 和const + +隐藏类:用同一个函数初始化,在定义函数时候初始化属性,让新创建的函数隐藏函数保持一致 + +内存泄漏:没有声明的变量直接赋值,成为全局变量,不会自动回收 + + + + + +## 第5章 基本引用类型 + +引用类型不是类 + +new 构造函数;//创建一个对象 + +### 5.1 Date + +1970/1/1 + +```js +let now = new Date(); +now=new Date(Date.parse("6/15/2021"));//指定日期 +now=new Date("6/15/2021");//同上面,构造函数隐式调用 +now=new Date(Date.UTC(2021,0,1,12,5,21)) +now=new Date(2021,0,1,12,5,21)//构造函数隐式调用 + +let starttime=Date.now() +let wndtime=Date.now() +``` + +#### 5.1.1 继承的方法 + +```js +now.toLocaleString();//本地时间 +now.toString();//包含时区 +``` + +#### 5.1.2 日期格式化 + +```js + +now=new Date() +//Date Tue Jun 15 2021 15:53:25 GMT+0800 (中国标准时间) + +now.toLocaleString() +//"2021/6/15 下午3:53:25" +now.toDateString() +//"Tue Jun 15 2021" +now.toTimeString() +//"15:53:25 GMT+0800 (中国标准时间)" +now.toLocaleDateString() +//"2021/6/15" +now.toLocaleTimeString() +//"下午3:53:25" +now.toUTCString() +//"Tue, 15 Jun 2021 07:53:25 GMT" +``` + +#### 5.1.3 日起时间方法 + +**P106** + +### 5.2 RegExp + +正则表达式 + +### 5.3 原始值包装类型 + +```js +let str1="i love u!"; +let str2=str1.substring(2);//正常逻辑下这是错误的 +``` + +第二次访问str1的时候,以只读模式进行 + +```js +let str1=new String("i love u!"); +let str2=str1.substring(2); +s1=null; +``` + +#### 5.3.1 Boolean + +```js +let booleantrueobj=new Obiect(true);//这是一个存储布尔值的对象 + +//因为是对象,不管布尔值是什么,用对象做比较永远是true +``` + +尽量永远不要使用boolean对象 + +#### 5.3.2 Number + +toFixed(2)//指定小数位数 + +四舍五入 + +toExponential(2)//指定科学计数法 + +.toPrecision(5)//数字总位数 + +Number.isInteger(num);//判断是你不是整数 + +#### 5.3.3 String + +1 JavaScript字符 + +str.length + +charCodeAt()可以查看字符的编码 + +2 normalize()方法 + +某些unicode字符有多个遍吗 + +3 字符串操作方法 + +常用的str1.slice(起始,-3) + +Str1.substring(2) 第二个字符后面的 + +Str1.substr(-3) + +4 字符串位置方法 + +Str1.indexOf("o",起始位置int) + +Str1.lastIndexOf("0",起始位置int) + +5 + +6 trim()删除前后的空格 str1.trim() + +7 repeat()赋值几遍str1.repeat(5)//赋值5遍 + +8 **填充** + +padStart(),padEnd() + +字符串超限无法使用 + +```js +let a="ABCDE" + +console.log(a.padStart(10,"*")) +//*****ABCDE debugger eval code:1:9 + +console.log(a.padEnd(10,"*")) +//ABCDE***** debugger eval code:1:9 + +``` + +9 迭代 + +```js +for (const c of "abcde") { + console.log(c); +} +``` + +10 字符串大小写转换 + +```js +let stringValue = "hello world"; +console.log(stringValue.toLocaleUpperCase()); // "HELLO WORLD" +console.log(stringValue.toUpperCase()); // "HELLO WORLD" +console.log(stringValue.toLocaleLowerCase()); // "hello world" +console.log(stringValue.toLowerCase()); // "hello world" +``` + +11 + +12 localeCompare()方法 + +比较字符顺序 + +```js +let a="何"; +let b="小"; +let c="啊" +a.localeCompare(b); +//-1 +b.localeCompare(a) +//1 +a.charCodeAt() +20309 +b.charCodeAt() +23567 +c.charCodeAt() +21834 +``` + +### 5.4 单例内置对象 + +#### 5.4.1Global + +1 URL编码方法 + +将字符替换为编码 + +```js +let uri = "http://www.wrox.com/illegal value.js#start"; +// "http://www.wrox.com/illegal%20value.js#start" +console.log(encodeURI(uri)); +// "http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.js%23start" +console.log(encodeURIComponent(uri)); +``` + +将编码替换为字符(只能替换自己支持的字符) + +```js +let uri = "http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.js%23start"; +// http%3A%2F%2Fwww.wrox.com%2Fillegal value.js%23start +console.log(decodeURI(uri)); +// http:// www.wrox.com/illegal value.js#start +console.log(decodeURIComponent(uri)); +``` + +2 eval() + +将内容加入到上下文中 + +```js +eval("console.log('hi')"); +// 上面这行代码的功能与下一行等价: +console.log("hi"); +``` + +#### 5.4.2 Math + +2 min(数组), max(数组) + +3 舍入方法 + +```js +//Math.ceil()方法始终向上舍入为最接近的整数。5.4 单例内置对象 133 +//Math.floor()方法始终向下舍入为最接近的整数。 +//Math.round()方法执行四舍五入。 +//Math.fround()方法返回数值最接近的单精度(32 位)浮点值表示。 +``` + +4 random()随机数0-1不包括1 + +5 其他方法 + +Math.abs(x)绝对值 + +Math.pow(a,b)a的b次幂 + +Math.trunc(x)x的整数 + + + +## 第6章 集合引用类型 + +### 6.1 Object + +显式地创建 + +```js +//第一种是使用 new 操作符和 Object 构造函数 +let person = new Object(); +person.name = "Nicholas"; +person.age = 29; +//另一种方式是使用 *对象字面量* (object literal)表示法 +let person = { + name: "Nicholas", + age: 29 +}; +//在对象字面量表示法中,属性名可以是字符串或数值,比如: +let person = { + "name": "Nicholas", + "age": 29, + 5: true //自动将5转化为字符串格式 +}; +//属性一般是通过点语法来存取的,这也是面向对象语言的惯例 +//但也可以使用中括号来存取属性。在使用中括号时,要在括号内使用属性名的字符串形式 +console.log(person["name"]); // "Nicholas" +console.log(person.name); // "Nicholas" +``` + +### 6.2 Array + +跟其他语言中的数组一样,ECMAScript 数组也是**一组有序的数据**,但跟其他语言 不同的是,数**组中每个槽位可以存储任意类型的数据**。 + +#### 6.2.1创建数组 + +```js +//使用 Array 构造函数 +let arr = new Array(); +let arr = new Array(20);//长度为20,可省略new +let arr= new Array("Hello","World","!");//含有三个,可省略new + +//使用数组字面量(array literal)表示法 +let colors = ["red", "blue", "green"]; // 创建一个包含 3 个元素的数组 +let names = []; // 创建一个空数组 +let values = [1,2,]; // 创建一个包含 2 个元素的数组 +//与对象一样,在使用数组字面量表示法创建数组不会调用 Array 构造函数 +``` + +from 和 of + +```js +const a1 = [1, 2, 3, 4]; +const a2 = Array.from(a1, x => x**2); +const a3 = Array.from(a1, function(x) {return x**this.exponent}, {exponent: 2}); +console.log(a2); // [1, 4, 9, 16] +console.log(a3); // [1, 4, 9, 16] + +``` + +#### 6.2.2 数组空位 + +用逗号创建 + +ES6之前将空位解释为undefined + +#### 6.2.3 数组索引 + +同其他语言,但是可以超过长度,被解析为undefined + +```js +//使用 length 属性可以方便地向数组末尾添加元素,如下例所示: +let colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组 +colors[colors.length] = "black"; // 添加一种颜色(位置 3) +colors[colors.length] = "brown"; // 再添加一种颜色(位置 4) +``` + +数组最多可以包含 4 294 967 295 个元素 + +#### 6.2.4 检测数组 + +```js +if (Array.isArray(value)){ + // 操作数组 +} +``` + +#### 6.2.5 迭代器方法 + +keys()返回数组索引的迭代器,values()返回数组元素的迭代器,而 entries()返回 索引/值对的迭代器: + +```js +const a = ["foo", "bar", "baz", "qux"]; +// 因为这些方法都返回迭代器,所以可以将它们的内容 +// 通过 Array.from()直接转换为数组实例 +const aKeys = Array.from(a.keys()); +const aValues = Array.from(a.values()); +const aEntries = Array.from(a.entries()); +console.log(aKeys); // [0, 1, 2, 3] +console.log(aValues); // ["foo", "bar", "baz", "qux"] +console.log(aEntries); // [[0, "foo"], [1, "bar"], [2, "baz"], [3, "qux"]] + +//使用 ES6 的解构可以非常容易地在循环中拆分键/值对 +const a = ["foo", "bar", "baz", "qux"]; +for (const [idx, element] of a.entries()) { + alert(idx); + alert(element); +} +``` + +#### 6.2.6 复制和填充方法 + +```js +//fill() +let arr=[1,2,3,1,4,5,6,5] +arr.fill(填充内容,起始,结束(不包含)) +arr.copyWithin(从哪儿开始填充,原来文本的开始,原来文本的结束(不包含)) +``` + +#### 6.2.7 转化方法 + +```js +let colors = ["red", "green", "blue"]; +alert(colors.join(",")); // red,green,blue +alert(colors.join("||")); // red||green||blue +``` + +#### 6.2.8 栈方法 + +```js +let a=["i","l","o","v","e","u"] +a.push("!"); +a.push("w","j","y") +a.pop();//删除并返回,同时减少length +``` + +#### 6.2.9 队列方法 + +```js +a.shift();//删除开头并返回; +``` + +#### 6.2.10 排序方法 + +```js +let values = [1, 2, 3, 4, 5]; +values.reverse();//反响排序,此方法不够灵活 +values.sort(); //升序,但是先转化为字符串,10在5前面 + +//比较函数 +values.sort((a, b) => a < b ? 1 : a > b ? -1 : 0); +//同下 +function compare(value1, value2) { + if (value1 < value2) { + return 1; + } else if (value1 > value2) { + return -1; + } else { + return 0; + } +} +let values = [0, 1, 5, 10, 15]; +values.sort(compare); +alert(values); // 15,10,5,1,0 +``` + +#### 6.2.11 操作方法 + +concat();我感觉可以用append()代替 + +Slice(a,b);切片可以用负值 + +**splice();** + +* 删除splice(开始删除的位置,删除的数量) +* 插入splice(开始位置,删除数量,插入值(后面可以是多个)) +* 替换splice(开始位置,删除数量(也就是替换,为0不替换),插入值(同上)) + +#### 6.2.12 搜索和位置方法 + +1 严格相等 + +```js +a.indexOf()有返回对象,没有返回-1 +a.lastIndexOf()有返回对象,没有返回-1 +a.includes()返回布尔值 +``` + +#### 6.2.13 迭代 + +?? + +#### 6.2.14 归并方法 + +?? + +### 6.3 定型数组 + +### 6.4 Map + +#### 6.4.1 基本API + +```js +const m = new Map(); +alert(m.has("firstName")); // false +alert(m.get("firstName")); // undefined +alert(m.size); // 0 +m.set("firstName", "Matt") + .set("lastName", "Frisbie"); +alert(m.has("firstName")); // true +alert(m.get("firstName")); // Matt +alert(m.size); // 2 +m.delete("firstName"); // 只删除这一个键/值对 +alert(m.has("firstName")); // false +alert(m.has("lastName")); // true +alert(m.size); // 1 +m.clear(); // 清除这个映射实例中的所有键/值对 +alert(m.has("firstName")); // false +alert(m.has("lastName")); // false +alert(m.size); // 0 +``` + +#### 6.4.2 + +#### 6.4.3 选择 + +P168 + +### 6.5 WeakMap + +### 6.6 Set + +### 6.7 WeakSet + + + +## 第7章 迭代器与生成器 + +## 第8章 对象、类与面向对象编程 + +## 第9章 代理与反射 +ECMAScript6 新增 +### 9.1 代理基础 +代理是目标对象的抽象 +代理类似C++指针 +可以用作目标对象的替身、但又完全独立于目标对象。 + +#### 9.1.1 创建空代理 + + +## 第10章 函数 +函数定义的方法: +1. 函数声明 +```js +function function_name(argument) { + // body... + return argument; +}; +``` +2. 函数表达式 +```js +let fun=function(a){ + return a; +}; + +``` +3. 构造函数 +```js +let fun=Function("a","return a"); +//所有函数定义都会在最后转化为这种格式 +``` + + +### 10.1 箭头函数 +```js +let fun=(a,b)=>{return a+b;}; + +``` +### 10.2 函数名 +函数名是指向函数的指针,所以函数可以有多个名称 +函数都有一个name属性,a.name//a + +### 10.3 理解参数 + +### 10.4 没有重载 +在js种重复声明函数会覆盖,好像还会报错 + +### 10.5 默认参数值 +```js +function makeKing(name) { + name = (typeof name !== 'undefined') ? name : 'Henry'; //如果函数调用时没有参数,默认为。。。 + return `King ${name} VIII`; +} + + +function makeKing(name = 'Henry', numerals = 'VIII') { //多个默认参数 + return `King ${name} ${numerals}`; +} +console.log(makeKing()); // 'King Henry VIII' +console.log(makeKing('Louis')); // 'King Louis VIII' + + +//箭头函数也可以 + +``` +* 默认参数作用域与暂死区 + +```js +// 参数初始化顺序遵循“暂时性死区”规则,即前面定义的参数不能引用后面定义的。像这样就会抛出错误: +// 调用时不传第一个参数会报错 +function makeKing(name = numerals, numerals = 'VIII') { + return `King ${name} ${numerals}`; +} +// 参数也存在于自己的作用域中,它们不能引用函数体的作用域: +// 调用时不传第二个参数会报错 +function makeKing(name = 'Henry', numerals = defaultNumeral) { + let defaultNumeral = 'VIII'; + return `King ${name} ${numerals}`; +} +``` + +### 10.6 + +### 10.7 函数声明与函数表达式 +JavaScript引擎在加载数据时对他们区别对待,在任何代码执行钱,会先读取函数声明,并在执行上下文中生成函数定义,而函数表达式必须等到代码执行到它的一行才会在执行上下文中生成函数定义 + +```js +// 没问题 +console.log(sum(10, 10)); +function sum(num1, num2) { + return num1 + num2; +} + +// 会出错 +console.log(sum(10, 10)); +let sum = function(num1, num2) { + return num1 + num2; +}; +``` +### 10.8 函数作为参数 + + +### 10.9 函数内部 +在 ECMAScript 5 中,函数内部存在两个特殊的对象:arguments 和 this。ECMAScript 6 又新增 +了 new.target 属性。 +#### 10.9.1 argments + +```js +function factorial(num) { + if (num <= 1) { + return 1; + } else { + return num * factorial(num - 1); + } +} +//阶乘函数 + +function factorial(num) { + if (num <= 1) { + return 1; + } else { + return num * arguments.callee(num - 1); //无论函数名是什么,都可以使用arguments.callee()调用 + } +} + +``` + + +#### 10.9.2 this + + +#### 10.9.3 caller +```js +function outer() { + inner(); +} +function inner() { + console.log(inner.caller); +} +outer();//会显示outer的源代码 +inner();//null +``` + +### 10.10函数属性和方法 +每个函数都有两个属性:length +和 prototype。其中,length 属性保存函数定义的命名参数的个数 +```js +function sayName(name) { + console.log(name); +} +function sum(num1, num2) { + return num1 + num2; +} +function sayHi() { + console.log("hi"); +} +console.log(sayName.length); // 1 +console.log(sum.length); // 2 +console.log(sayHi.length); // 0 + +``` + + +### 10.11 函数表达式 + + +### 10.12 递归 + +??????????????????? + +### 10.14 闭包 + +### 10.15 立即调用的函数表达式 +```js +使用 IIFE 可以模拟块级作用域,即在一个函数表达式内部声明变量,然后立即调用这个函数。这 +样位于函数体作用域的变量就像是在块级作用域中一样。ECMAScript 5 尚未支持块级作用域,使用 IIFE +模拟块级作用域是相当普遍的。比如下面的例子: +// IIFE +(function () { + for (var i = 0; i < count; i++) { + console.log(i); + } +})(); +console.log(i); // 抛出错 + +``` + +### 10.16 私有变量 + + + +## 第11章 期约与异步函数 + +### 11.2 期约promise + +#### 11.2.1 准备 + +##### 11.2.1.1 区别实例对象和函数对象 +1. 实例对象:通过new创建 +```js +function Fn() { + // body... +} +const fn = new Fn();//Fn是构造函数 +//fn 是实例对象 + + +``` +2. 将函数作为对象 +```js +//连接上 +console.log(Fn.prototype) + +``` +()左边是函数 +.的左边是函数对象 + + +##### 11.2.1.2 回调函数 + +1. 同步回调函数 +理解:立即执行,完全止血了才结束,不会放入回调队列中 +```js +let arr=[1,3,5] + +arr.forEach(item = >{ + console.log(item) +}) +console.log("forEach()之后") + +//forEach()括号中的回调函数是同步回调函数,不会放在回调队列,而是立即执行 +``` + +2. 异步回调函数 +理解:不会立即执行,会放入回调队列中 + +```js +setTime(function() {console.log("setTimeout()函数")}) +console.log("setTimeout()之后") +//setTimeout()之后 +//setTimeout()函数 +//setTimeout()是异步回调函数,会放在回调队列中 +``` + +##### 11.2.1.3 js的错误处理err +1. 常见内置错误 +* ReferenceError 引用错误,引用了不存在的变量 + +* TypeError 数据类型不正确错误 类型中没有某个函数或属性 let a; a.xxx(); + +* RangeError 超出范围 无限递归 + +* SyntaxError 语法错误 + +2. 错误处理 +捕获错误:try。。。cathch。。。 +```js +try{ + let a; + console.log(a.xx); +}catch(error){ + console.log(error.message); + console.log(error.statck) +} + +``` +抛出错误:throw error +```js +function something(){ + if (Date.now()%2===1){ + console.log("当前时间为奇数,可以执行任务") + }else{ + throw new Error("当前时间为偶数,无法执行任务") + } +} +try{ + something(); +}catch(error){ + console.log(error.message) +} +``` + +3. 错误对象 +message 错误信息 +stack 函数调用栈记录信息 + +#### 11.2.2 promise的理解和使用 + +##### 11.2.2.1 promise是什么 + +###### 11.2.2.1.1 理解 + +1. 抽象表达:进行异步编程的新的解决方案 +2. 具体表达: +* 语法上:构造函数 +* 功能:封装一个异步操作,并获取其结果 + +###### 11.2.2.1.2 promise的状态改变 +1. pending 变为resolved +2. pending 变为rejected +以上状态不可逆,每个promise只能又一次机会 + +###### 11.2.2.1.3 基本流程 + +promise 进行异步操作,好状态then,坏状态then/ + + +###### 11.2.2.1.4 基本使用 + +```js +// 创建一个新的promise对象 +const promise = new Promise((resolve,reject) =>{// 执行器对象,是一个同步回调 + // 执行异步操作 + const time = Date.now(); + if(time%2===0){ + // 成功嗲用resolve(value) + resolve("成功的值:"+time)//括号内传值 + }else{ + // 失败调用reject(reason) + reject("失败的值:"+time) + } +}) + +promise.then( + value => {//接收得到成功的值value onResolved + console.log("成功的回调:",value) + }, + reason => {//接收失败的值reason onRejected + console.log("失败的回调:",reason) + } + ) + +``` + +##### 11.2.2.2 为什么使用promse + +1. 指定回调函数的方式更加灵活: + 纯回调函数:必须在启动异步人物前指定 + promise:启动起步任务 =》返回promise对象 +〉 给promise对象绑定回调函数 + +2. 支持链式调用,可以解决回调地狱问题 + 回调地狱:回调函数嵌套, + 链式调用:异常传透,多个错误可以卸载一个错误上 + 终极方法:async/await + +##### 11.2.2.3 如何使用promise + +```js +const promise = new Promise(function(resolve,reject){ + setTime(function() { + resolve("成功的数据") + reject("失败的数据")//只能执行一个, + },1000) +}).then( + value => { + console.log("onResolveed()",value) + } +).catch( + reason => { + console.log("onRejected()",reason) + } +) + +``` + +### 11.2.3 自定义promise + + + + +### 11.2.4 async 和 await + + +## 第12章 BOM + +### 12.1 window对象 + +```js +window.innerWidth; +window.innerHeight;//浏览器页面的大小,不包含开发者窗口 + +window.outerWidth; +window.outerHeight;//浏览器窗口大小 + +``` +document.documentElement.clientWidth 和 document.documentElement.clientHeight 返回的布局视口的大小 + + + +## 第14章 DOM + +DOM:文档对象模型 (Document Object Model),是HTML和XML文档的编程接口;DOM 表示由**多层节点**构成的文档,通过它开发者可以添加、删除和修改页面的各个部分。 + +### 14.1 节点层级 + +文档元素:html元素,是文档的最外层元素 + +DOM 中总共有 **12 种**节点类型,这些 类型都继承一种基本类型。 + +#### 14.1.1 Node类型 + +DOM Level 1 描述了名为 Node的接口,这个接口是所有 DOM 节点类型都必须实现的。 + +Node接口 在 JavaScript 中被实现为 Node类型,在除 IE 之外的所有浏览器中都可以**直接访问**这个类型。 + +在 JavaScript 中,**所有节点类型都继承 Node类型**,因此所有类型都共享相同的基本属性和方法。 + +1. nodeName与nodeValue + +在使用这两个属性前,最好先**检测节点类型** + +```js +if (someNode.nodeType == 1){ // 检测节点类型 + value = someNode.nodeName; // 会显示元素的标签名 +} +``` + +对元素 而言,**nodeName始终等于元素的标签名**,而 **nodeValue 则始终为 null**。 + +2. 节点关系 + +每个节点都有一个 **childNodes** 属性,其中包含一个 **NodeList**的实例。(NodeList是类数组,不是Array) + +访问节点的元素 + +```js +let firstChild = someNode.childNodes[0]; +let secondChild = someNode.childNodes.item(1); +let arrayOfNodes = Array.from(someNode.childNodes); //ES6 +``` + +**parentNode** :父元素 + +**previousSibling**:上一个节点 + +**nextSibling** :下一个节点 + +**firstChild**:第一个子节点 + +**lastChild** :最后一个子节点 + +![截屏2021-08-22 上午3.17.45](./截屏2021-08-22 上午3.17.45.png) + +**hasChildNodes()**:判断是否有子节点 + +3. 操纵节点 + +**appendChild()**:在列表末尾添加节点,如果传入的是一个存在的节点,该节点会被移动到对象的子节点尾部,一个节点不会同时存在于文档中 + +**insertBefore()**:插入 + +```js +// 作为最后一个子节点插入 +returnedNode = someNode.insertBefore(newNode, null); +alert(newNode == someNode.lastChild); // true +// 作为新的第一个子节点插入 +returnedNode = someNode.insertBefore(newNode, someNode.firstChild); +alert(returnedNode == newNode); // true +alert(newNode == someNode.firstChild); // true +// 插入最后一个子节点前面 +returnedNode = someNode.insertBefore(newNode, someNode.lastChild); +alert(newNode == someNode.childNodes[someNode.childNodes.length - 2]); // true +``` + +**replaceChild()**:节点替换 + +```js +let returnedNode = someNode.replaceChild(newNode, someNode.firstChild); +``` + +**removeChild()**删除节点 + +```js +// 删除第一个子节点 +let formerFirstChild = someNode.removeChild(someNode.firstChild); // 删除最后一个子节点 +let formerLastChild = someNode.removeChild(someNode.lastChild); +``` + +4. 其他方法 + +**cloneNode()**:复制节点 + +```js +let deepList = myList.cloneNode(true); //深复制,复制节点和子节点数 +alert(deepList.childNodes.length); // 3(IE9之前的版本)或7(其他浏览器) let shallowList = myList.cloneNode(false); 孤儿节点,没有子节点和父节点 +alert(shallowList.childNodes.length); // 0 +``` + +#### 14.1.2 Document类型 + +document 是HTMLDocument的实例(HTMLDocument继承 Document),表示整个 HTML 页面。 + +document是 window 3 对象的属性,因此是一个全局对象。 + +document对象可用于**获取关于页面的信息**以及**操纵其外观和底层结构**。 + +1. 文档子节点 + + **documentElement**:始终指向 HTML 页面中的元素 + +```js +let html = document.documentElement; // 取得对的引用 +alert(html === document.childNodes[0]); // true 11 alert(html === document.firstChild); // true +``` + +**body**:获取body + +```js +let body = document.body; // 取得对的引用 +``` + +**doctype**:标签 + +2. 文档信息 + +**title**:读写页面的标题,修改 title 属性并不会改变元素 + +**URL** :包含当前页面的完整 URL(地 址栏中的 URL),不可修改,修改无效 + +**domain** :包含页面的域名 + +**referrer** :包含链接到当前页面的那个页面的 URL,不可修改,修改无效 + +浏览器对 domain 属性还有一个限制,即这个属性一旦放松就不能再收紧。比如,把document.domain 设置为"wrox.com"之后,就不能再将其设置回"p2p.wrox.com",后者会导致错误,比如: + +```js +// 页面来自p2p.wrox.com +document.domain = "wrox.com"; // 放松,成功 +document.domain = "p2p.wrox.com"; // 收紧,错误! +``` + +3. 定位元素 + +**getElementById()**:找到了返回这个元素,找不到返回null + +**getElementsByTagName("img")**://返回nodeList + +要取得文档中的所有元素,可以给 getElementsByTagName()传入* + +```js +let allElements = document.getElementsByTagName("*"); +``` + +**getElementsByName()**: + +> 通过类名(getElementsByClassName) +> 通过选择器获取一个元素(querySelector) +> 通过选择器获取一组元素(querySelectorAll) + +4. 特殊集合 + +**document.anchors** 包含文档中所有带 name属性的<a>元素。 + +**document.forms**包含文档中所有<form>元素(与 document.getElementsByTagName ("form") 返回的结果相同)。 + +**document.images**包含文档中所有<img>元素(与 document.getElementsByTagName ("img") 7 返回的结果相同)。 + +**document.links** 包含文档中所有带 href属性的<a>元素。 + +5. DOM兼容性检测 + +由于实现不一致,因此 hasFeature()的返回值并不可靠。目前这个方法已经被废弃,不再建议使 用。为了向后兼容,目前主流浏览器仍然支持这个方法,但无论检测什么都一律返回 true。 + +6. 文档写入 + +```js +// 禁用 +最好做下备份 document.original.write = document.write 然后再 document.write = function() {} + +因为不好用,还因为性能 +``` + +在浏览器渲染页面之前,会去根据HTML标签解析DOM树。**如果解析器遇到了 `<script>` 标签,则会停止DOM的解析,优先执行脚本。**如果这个脚本动态插入了另一个脚本,则解析器会等待另一个脚本下载完成到执行完成,延后了页面渲染的时间。 + +#### 14.1.3 Element 类型 + diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/0001express创建.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/0001express创建.js new file mode 100644 index 0000000..74942f3 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/0001express创建.js @@ -0,0 +1,9 @@ +const express = require("express") + +let app = express() + +app.use("/",(request,response)=>{ + response.send("hello world!"); +}) + +app.listen(80) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/01.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/01.js new file mode 100644 index 0000000..4b8a261 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/01.js @@ -0,0 +1,21 @@ +// 引入express +const express = require("express"); + +// 创建网站服务器 +const app = express(); + +// 路由 +app.get("/",(req,res)=>{ + res.send("Hello Node For Express"); + // send替代了end + // 1.自动检测响应内容类型 + // 2.自动设置HTTP状态吗 + // 3.自动设置响应类型和编码 +}); + +app.get("/list",(req,res)=>{ + res.send({name:"何小龙",sex:"男"}) +}) + +// 开启服务器监听 +app.listen(80) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/02.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/02.js new file mode 100644 index 0000000..e6109fc --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/02.js @@ -0,0 +1,19 @@ +// 引入express +const express = require("express"); + +// 创建网站服务器 +const app = express(); + +// 路由 +app.get("/",(req,res,next)=>{ + console.log(res) + req.name="何琋"; + next();//没有next()方法,程序匹配到后就会停止,next()会继续 +}); +app.get("/",(req,res)=>{ + res.send(req.name); +}); + + +// 开启服务器监听 +app.listen(80); \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/03.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/03.js new file mode 100644 index 0000000..af358d7 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/03.js @@ -0,0 +1,20 @@ +// 引入express +const express = require("express"); + +// 创建网站服务器 +const app = express(); + +app.use((require,response,next)=>{ + console.log(require.headers["user-agent"]) + console.log(require.headers) + next() +}) + +app.use("/",(require,response,next)=>{ + console.log("进入根目录") + // next() + response.send("这里是根目录") +}) + +// 开启服务器监听 +app.listen(80); \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/04.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/04.js new file mode 100644 index 0000000..78998b3 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/04.js @@ -0,0 +1,26 @@ +// 引入express +const express = require("express"); + +// 创建网站服务器 +const app = express(); + +app.use((req,res,next)=>{ + next() +}) + +app.get("/",(req,res)=>{ + res.send("这里是根目录") +}) + +// app.use() 这里不能使用/,否则会匹配所有,和不写一样 + +// 自定义404 +// 必须写在最后 +app.use((req,res,next)=>{ + res.send("请求页面不存在!") +}) + + +// 开启服务器监听 +app.listen(80); +console.log("服务器已开启") \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/05.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/05.js new file mode 100644 index 0000000..a3dd7de --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/05.js @@ -0,0 +1,28 @@ +// 引入express +const express = require("express"); + +const fs = require("fs") + +// 创建网站服务器 +const app = express(); + +app.get("/index",(req,res)=>{ + throw new Error("为止服务器错误") +}) + +app.get("/",(req,res,next)=>{ + fs.readFile("./05.js",(err,r)=>{ + if (err!=null){ + next(err) + }else { + console.log(r.toString()) + res.send(r.toString()) + } + }) +}) + +app.use((err,req,res,next)=>{ + res.status(500).send("服务器出现错误"+err) +}) +// 开启服务器监听 +app.listen(80); \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/06.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/06.js new file mode 100644 index 0000000..26a5a6f --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/06.js @@ -0,0 +1,24 @@ +// 引入express +const express = require("express"); + +const fs = require("fs") + +// 创建网站服务器 +const app = express(); + +const index = express.Router() +const home = express.Router() + +app.use("/index",index) +app.use("/home",home) + +home.get("/",(req,res)=>{ + res.send("home") +}) +home.get("/hexi",(req,res)=>{ + res.send("home/hexi") +}) + + +// 开启服务器监听 +app.listen(80); \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/07.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/07.js new file mode 100644 index 0000000..5fac501 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/07.js @@ -0,0 +1,10 @@ +const express = require("express") + +const router = require("./router") + +const app = express() + +app.use("/home",router.home) +app.use("/index",router.index) + +app.listen(80) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/08.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/08.js new file mode 100644 index 0000000..748ad96 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/08.js @@ -0,0 +1,9 @@ +const express = require("express") + +const app = express() + +app.get("/",(req,res)=>{ + res.send(req.query) +}) + +app.listen(80) diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/09.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/09.js new file mode 100644 index 0000000..64da70a --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/09.js @@ -0,0 +1,19 @@ +// 引入express +const express = require("express"); +const bodyParser = require("body-parser") +// 获取post数据,必须导入这个包 + +// 创建网站服务器 +const app = express(); + +app.use(bodyParser.urlencoded({extended:false})); +// extended为true时,实用qs格式化,效率更高 + +app.post("/",(req,res)=>{ + console.log(req.body.name) + res.send(req.body) + // req.body获取数据 +}) + +// 开启服务器监听 +app.listen(80) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/10.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/10.js new file mode 100644 index 0000000..9a2aacb --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/10.js @@ -0,0 +1,20 @@ +const express = require("express") + +const app = express() + +app.use(fun()) +// 注意这里直接调用函数,所以直接加括号 + +function fun(){ + return (req,res,next)=>{ + console.log(req.url); + console.log(req.method); + next() + } +} + +app.get("/",(req,res)=>{ + res.send("xsxaxasxasx") +}) + +app.listen(80) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/11.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/11.js new file mode 100644 index 0000000..372a170 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/11.js @@ -0,0 +1,11 @@ +const express = require("express") + +const app = express() + +app.get("/user/:id",(req,res)=>{ + res.send(req.params) +}) +// 动态路由,实用':' +// req.params来获取 + +app.listen(80) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/12.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/12.js new file mode 100644 index 0000000..f88bf8b --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/12.js @@ -0,0 +1,14 @@ +const express = require("express") +const path = require("path") +const app = express() + +app.use(express.static("static")) +console.log(path.join(__dirname,"static")) +// 最好实用console中的地址 +// 嗲用地址不用static + +app.get("/",(req,res)=>{ + res.send("你好") +}) + +app.listen(80) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/13.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/13.js new file mode 100644 index 0000000..b7f2ee2 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/13.js @@ -0,0 +1,22 @@ +// express官方微了art-template模板引擎更好的适用于express,在其基础上封装了press-art-template + +const express = require("express") + +const app = express() + +// 当渲染后缀会art的模板时,实用express-art-template +// 可以使用多种模板引擎 +// 模板后缀,选用的模板引擎 +app.engine("art",require("express-art-template")) + +// 设置模板存放地址 +app.set("views","templates") + +// 设置模板默认后缀 +app.set("view engine","art") + +app.get("/",(req,res)=>{ + res.render("index",{data:"data"}) +}) + +app.listen(80) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/14.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/14.js new file mode 100644 index 0000000..e875eab --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/14.js @@ -0,0 +1,31 @@ +// express官方微了art-template模板引擎更好的适用于express,在其基础上封装了press-art-template + +const express = require("express") + +const app = express() + +app.locals.name={ + name:"何琋", + sex:"男", + age:"22" +} + +// 当渲染后缀会art的模板时,实用express-art-template +// 可以使用多种模板引擎 +// 模板后缀,选用的模板引擎 +app.engine("art",require("express-art-template")) + +// 设置模板存放地址 +app.set("views","templates") + +// 设置模板默认后缀 +app.set("view engine","art") + +app.get("/",(req,res)=>{ + res.render("index",{data:app.locals.name}) +}) +app.get("/pc",(req,res)=>{ + res.render("pc.html",) +}) + +app.listen(80) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/pc.html b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/pc.html new file mode 100644 index 0000000..f28ddf6 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/pc.html @@ -0,0 +1,113 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>Title + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/post.html b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/post.html new file mode 100644 index 0000000..314421b --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/post.html @@ -0,0 +1,14 @@ + + + + + Title + + +
+ + + +
+ + \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/router.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/router.js new file mode 100644 index 0000000..c9cf050 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/router.js @@ -0,0 +1,15 @@ +const Router = require("express").Router + +const home = Router() +const index = Router() + +home.get("/",(req,res)=>{ + res.send("home/") +}) + +index.get("/",(req,res)=>{ + res.send("index/") +}) + + +module.exports= {home,index} \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/static/1.html b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/static/1.html new file mode 100644 index 0000000..566549b --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/static/1.html @@ -0,0 +1,10 @@ + + + + + Title + + + + + \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/static/a.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/static/a.js new file mode 100644 index 0000000..6e09fc8 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/static/a.js @@ -0,0 +1 @@ +xsxsxs \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/static/a.mp4 b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/static/a.mp4 new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/templates/index.art b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/templates/index.art new file mode 100644 index 0000000..0e9d6dd --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code/templates/index.art @@ -0,0 +1 @@ +{{ data }} \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code2/01cookie.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code2/01cookie.js new file mode 100644 index 0000000..c048463 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/code2/01cookie.js @@ -0,0 +1,19 @@ +const express = require("express") +// const cookieParser = require("cookie-parser") +// const UUID = require("uuid") +const app = express() + +app.use((req,res,next)=>{ + console.log("我来过"); + next() +}) +// app.use(cookieParser()) + +app.get("/hellow",(req,res)=>{ + // console.log("xs") + // console.log(req.cookie) + // res.cookie("name","何琋") + res.send("req.cookie") +}) + +app.listen(80) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/express.md b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/express.md new file mode 100644 index 0000000..3fb7722 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/express.md @@ -0,0 +1,289 @@ +# express框架学习 + +> B站 -前段知识分享喵- 《黑马2020最新 Express 教学视频》 + +## 特性 + +1. 简洁的路由定义方式 + +2. 简化了HTTP请求参数 + +3. 模板引擎支持度高,方便渲染 + +4. 中间件,有效控制请求 + +5. 大量第三方中间件插件 + +## 框架入门 + +```js +// 引入express +const express = require("express"); + +// 创建网站服务器 +const app = express(); + +// 路由 +app.get("/",(req,res)=>{ + res.send("Hello Node For Express"); + // send替代了end + // 1.自动检测响应内容类型 + // 2.自动设置HTTP状态吗 + // 3.自动设置响应类型和编码 +}); + +app.get("/list",(req,res)=>{ + res.send({name:"何小龙",sex:"男"}) +}) + +// 开启服务器监听 +app.listen(80) +``` +## 中间件 + +中间件包含**中间件方法**和**中间件处理函数** +中间件由express提供,负责拦截请求,请求函数由开发者提供 +```js +app.get("path",fun) +app.post("path",fun) +``` + +可以出现多个中间件,但是一旦匹配成功就不会再往下进行 + +### app.use + +app.use()中,第一个参数可以不传递路径,对应的是全局,注意需要next() +正常情况下传递路径,和 post,get相同 + +## 自定义404 + +```js +// 引入express +const express = require("express"); + +// 创建网站服务器 +const app = express(); + +app.use((req,res,next)=>{ + next() +}) + +app.get("/",(req,res)=>{ + res.send("这里是根目录") +}) + +// app.use() 这里不能使用/,否则会匹配所有,和不写一样 + +// 自定义404 +// 必须写在最后 +app.use((req,res,next)=>{ + res.send("请求页面不存在!") +}) + + +// 开启服务器监听 +app.listen(80); +console.log("服务器已开启") +``` + +### 错误处理中间件 + +```js +app.get("/",(req,res,next)=>{ + fs.readFile("./05.js",(err,r)=>{ + if (err!=null){ + next(err) + }else { + console.log(r.toString()) + res.send(r.toString()) + } + }) +}) + +app.use((err,req,res,next)=>{ + res.status(500).send("服务器出现错误"+err) +}) +``` + +### 模块化路由 + +```js +const app = express(); + +const index = express.Router() +const home = express.Router() + +app.use("/index",index) +app.use("/home",home) + +home.get("/",(req,res)=>{ + res.send("home") +}) +home.get("/hexi",(req,res)=>{ + res.send("home/hexi") +}) +``` + +### 模块化编程实现 + +```js +// 07.js + +const express = require("express") + +const router = require("./router") + +const app = express() + +app.use("/home",router.home) +app.use("/index",router.index) + +app.listen(80) + + +// router.js + +const Router = require("express").Router + +const home = Router() +const index = Router() + +home.get("/",(req,res)=>{ + res.send("home/") +}) + +index.get("/",(req,res)=>{ + res.send("index/") +}) + + +module.exports= {home,index} +``` + +### 获取get参数 + +```js +const express = require("express") + +const app = express() + +app.get("/",(req,res)=>{ + res.send(req.query) +}) + +app.listen(80) + +``` + +### 获取post参数 + +```js +// 引入express +const express = require("express"); +const bodyParser = require("body-parser") +// 获取post数据,必须导入这个包 + +// 创建网站服务器 +const app = express(); + +app.use(bodyParser.urlencoded({extended:false})); +// extended为true时,实用qs格式化,效率更高 + +app.post("/",(req,res)=>{ + console.log(req.body.name) + res.send(req.body) + // req.body获取数据 +}) + +// 开启服务器监听 +app.listen(80) +``` + +### use方法 + +```js +const express = require("express") + +const app = express() + +app.use(fun()) +// 注意这里直接调用函数,所以直接加括号 + +function fun(){ + return (req,res,next)=>{ + console.log(req.url); + console.log(req.method); + next() + } +} + +app.get("/",(req,res)=>{ + res.send("xsxaxasxasx") +}) + +app.listen(80) +``` + +### 动态路由 + +```js +const express = require("express") + +const app = express() + +app.get("/user/:id",(req,res)=>{ + res.send(req.params) +}) +// 动态路由,实用':' +// req.params来获取 + +app.listen(80) +``` + +### 静态文件 + +```js +const express = require("express") +const path = require("path") +const app = express() + +app.use(express.static("static")) +console.log(path.join(__dirname,"static")) +// 最好实用console中的地址 +// 嗲用地址不用static + +app.get("/",(req,res)=>{ + res.send("你好") +}) + +app.listen(80) +``` + +### 模板文件 + +```js +// express官方微了art-template模板引擎更好的适用于express,在其基础上封装了press-art-template + +const express = require("express") + +const app = express() + +// 当渲染后缀会art的模板时,实用express-art-template +// 可以使用多种模板引擎 +// 模板后缀,选用的模板引擎 +app.engine("art",require("express-art-template")) + +// 设置模板存放地址 +app.set("views","templates") + +// 设置模板默认后缀 +app.set("view engine","art") + +app.get("/",(req,res)=>{ + res.render("index",{data:"data"}) +}) + +app.listen(80) +``` + +### app.locals公共数据 \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/package-lock.json b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/package-lock.json new file mode 100644 index 0000000..9fc2082 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/package-lock.json @@ -0,0 +1,621 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.nlark.com/accepts/download/accepts-1.3.7.tgz", + "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.nlark.com/acorn/download/acorn-5.7.4.tgz", + "integrity": "sha1-Po2KmUfQWZoXltECJddDL0pKz14=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.nlark.com/array-flatten/download/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "art-template": { + "version": "4.13.2", + "resolved": "https://registry.nlark.com/art-template/download/art-template-4.13.2.tgz", + "integrity": "sha1-TEy9RN4IqtAxZgJAhx9Fx9c3z8E=", + "requires": { + "acorn": "^5.0.3", + "escodegen": "^1.8.1", + "estraverse": "^4.2.0", + "html-minifier": "^3.4.3", + "is-keyword-js": "^1.0.3", + "js-tokens": "^3.0.1", + "merge-source-map": "^1.0.3", + "source-map": "^0.5.6" + } + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz", + "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.nlark.com/bytes/download/bytes-3.1.0.tgz", + "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=" + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.nlark.com/camel-case/download/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.nlark.com/clean-css/download/clean-css-4.2.3.tgz?cache=0&sync_timestamp=1628166368756&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fclean-css%2Fdownload%2Fclean-css-4.2.3.tgz", + "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=", + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.nlark.com/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1624608014898&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" + } + } + }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.nlark.com/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1627358203890&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz", + "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz", + "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.nlark.com/content-type/download/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.nlark.com/cookie/download/cookie-0.4.0.tgz", + "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=" + }, + "cookie-parser": { + "version": "1.4.5", + "resolved": "https://registry.npm.taobao.org/cookie-parser/download/cookie-parser-1.4.5.tgz", + "integrity": "sha1-PlctS3wMgPnGHa9gTkM2gxtdHUk=", + "requires": { + "cookie": "0.4.0", + "cookie-signature": "1.0.6" + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.nlark.com/deep-is/download/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.nlark.com/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.nlark.com/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.nlark.com/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.nlark.com/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.nlark.com/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.nlark.com/escodegen/download/escodegen-1.14.3.tgz", + "integrity": "sha1-TnuB+6YVgdyXWC7XjKt/Do1j9QM=", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.nlark.com/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1624608014898&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "optional": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.nlark.com/esprima/download/esprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=" + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.nlark.com/estraverse/download/estraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz", + "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.nlark.com/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz", + "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "express-art-template": { + "version": "1.0.1", + "resolved": "https://registry.nlark.com/express-art-template/download/express-art-template-1.0.1.tgz", + "integrity": "sha1-+96TatzgRizeGR013ZznC0r1d5g=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.nlark.com/finalhandler/download/finalhandler-1.1.2.tgz", + "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.nlark.com/forwarded/download/forwarded-0.2.0.tgz?cache=0&sync_timestamp=1622503451002&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fforwarded%2Fdownload%2Fforwarded-0.2.0.tgz", + "integrity": "sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.nlark.com/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz", + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=" + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz", + "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=", + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.nlark.com/http-errors/download/http-errors-1.7.2.tgz?cache=0&sync_timestamp=1624607959970&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz", + "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.nlark.com/iconv-lite/download/iconv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.nlark.com/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.nlark.com/ipaddr.js/download/ipaddr.js-1.9.1.tgz", + "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=" + }, + "is-keyword-js": { + "version": "1.0.3", + "resolved": "https://registry.nlark.com/is-keyword-js/download/is-keyword-js-1.0.3.tgz", + "integrity": "sha1-rDDc81tnH0snsX9ctXI1EmAhEy0=" + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.nlark.com/js-tokens/download/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.nlark.com/levn/download/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.nlark.com/lower-case/download/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz", + "integrity": "sha1-L93n5gIJOfcJBqaPLXrmheTIxkY=", + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.nlark.com/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1624608014898&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" + } + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.nlark.com/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.nlark.com/mime/download/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" + }, + "mime-db": { + "version": "1.49.0", + "resolved": "https://registry.nlark.com/mime-db/download/mime-db-1.49.0.tgz", + "integrity": "sha1-89/eYMmenPO8lwHWh3ePU3ABy+0=" + }, + "mime-types": { + "version": "2.1.32", + "resolved": "https://registry.nlark.com/mime-types/download/mime-types-2.1.32.tgz", + "integrity": "sha1-HQDonn3n/gIAjbYQAdngKFJnD9U=", + "requires": { + "mime-db": "1.49.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz", + "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=" + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz", + "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=", + "requires": { + "lower-case": "^1.1.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.nlark.com/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz", + "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.nlark.com/param-case/download/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "requires": { + "no-case": "^2.2.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.nlark.com/parseurl/download/parseurl-1.3.3.tgz", + "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.nlark.com/path-to-regexp/download/path-to-regexp-0.1.7.tgz?cache=0&sync_timestamp=1624608046390&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.nlark.com/prelude-ls/download/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.nlark.com/proxy-addr/download/proxy-addr-2.0.7.tgz", + "integrity": "sha1-8Z/mnOqzEe65S0LnDowgcPm6ECU=", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz?cache=0&sync_timestamp=1616385248556&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.7.0.tgz", + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.nlark.com/range-parser/download/range-parser-1.2.1.tgz", + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.nlark.com/raw-body/download/raw-body-2.4.0.tgz", + "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npm.taobao.org/relateurl/download/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.nlark.com/safer-buffer/download/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.nlark.com/send/download/send-0.17.1.tgz", + "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.nlark.com/ms/download/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.nlark.com/serve-static/download/serve-static-1.14.1.tgz", + "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.nlark.com/setprototypeof/download/setprototypeof-1.1.1.tgz", + "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.nlark.com/source-map/download/source-map-0.5.7.tgz?cache=0&sync_timestamp=1624608014898&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsource-map%2Fdownload%2Fsource-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.nlark.com/statuses/download/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.nlark.com/toidentifier/download/toidentifier-1.0.0.tgz", + "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.nlark.com/type-is/download/type-is-1.6.18.tgz", + "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.nlark.com/uglify-js/download/uglify-js-3.4.10.tgz", + "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=", + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.nlark.com/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1627358203890&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz", + "integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.nlark.com/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1624608014898&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" + } + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.nlark.com/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.nlark.com/upper-case/download/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.nlark.com/utils-merge/download/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.nlark.com/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.nlark.com/word-wrap/download/word-wrap-1.2.3.tgz", + "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=" + } + } +} diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/session是什么.md b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/session是什么.md new file mode 100644 index 0000000..55eb7f7 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/session是什么.md @@ -0,0 +1,85 @@ +# Session是什么 + +Session一般译作会话,牛津词典对其的解释是进行某活动连续的一段时间。从不同的层面看待session,它有着类似但不全然相同的含义。比如,在web应用的用户看来,他打开浏览器访问一个电子商务网站,登录、并完成购物直到关闭浏览器,这是一个会话。而在web应用的开发者开来,用户登录时我需要创建一个数据结构以存储用户的登录信息,这个结构也叫做session。因此在谈论session的时候要注意上下文环境。而本文谈论的是一种基于HTTP协议的用以增强web应用能力的机制或者说一种方案,它不是单指某种特定的动态页面技术,而这种能力就是保持状态,也可以称作保持会话。 + +# 为什么需要session + +谈及session一般是在web应用的背景之下,我们知道web应用是基于HTTP协议的,而HTTP协议恰恰是一种无状态协议。也就是说,用户从A页面跳转到B页面会重新发送一次HTTP请求,而服务端在返回响应的时候是无法获知该用户在请求B页面之前做了什么的。 + +对于HTTP的无状态性的原因,相关RFC里并没有解释,但联系到HTTP的历史以及应用场景,我们可以推测出一些理由: + +1. 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。那个时候没有动态页面技术,只有纯粹的静态HTML页面,因此根本不需要协议能保持状态; +2. 用户在收到响应时,往往要花一些时间来阅读页面,因此如果保持客户端和服务端之间的连接,那么这个连接在大多数的时间里都将是空闲的,这是一种资源的无端浪费。所以HTTP原始的设计是默认短连接,即客户端和服务端完成一次请求和响应之后就断开TCP连接,服务器因此无法预知客户端的下一个动作,它甚至都不知道这个用户会不会再次访问,因此让HTTP协议来维护用户的访问状态也全然没有必要; +3. 将一部分复杂性转嫁到以HTTP协议为基础的技术之上可以使得HTTP在协议这个层面上显得相对简单,而这种简单也赋予了HTTP更强的扩展能力。事实上,session技术从本质上来讲也是对HTTP协议的一种扩展。 +总而言之,HTTP的无状态是由其历史使命而决定的。但随着网络技术的蓬勃发展,人们再也不满足于死板乏味的静态HTML,他们希望web应用能动起来,于是客户端出现了脚本和DOM技术,HTML里增加了表单,而服务端出现了CGI等等动态技术。 + +而正是这种web动态化的需求,给HTTP协议提出了一个难题:一个无状态的协议怎样才能关联两次连续的请求呢?也就是说无状态的协议怎样才能满足有状态的需求呢? + +此时有状态是必然趋势而协议的无状态性也是木已成舟,因此我们需要一些方案来解决这个矛盾,来保持HTTP连接状态,于是出现了cookie和session。 + +对于此部分内容,读者或许会有一些疑问,笔者在此先谈两点: + +1. 无状态性和长连接 +可能有人会问,现在被广泛使用的HTTP1.1默认使用长连接,它还是无状态的吗? +连接方式和有无状态是完全没有关系的两回事。因为状态从某种意义上来讲就是数据,而连接方式只是决定了数据的传输方式,而不能决定数据。长连接是随着计算机性能的提高和网络环境的改善所采取的一种合理的性能上的优化,一般情况下,web服务器会对长连接的数量进行限制,以免资源的过度消耗。 +2. 无状态性和session +Session是有状态的,而HTTP协议是无状态的,二者是否矛盾呢? + +Session和HTTP协议属于不同层面的事物,后者属于ISO七层模型的最高层应用层,前者不属于后者,前者是具体的动态页面技术来实现的,但同时它又是基于后者的。在下文中笔者会分析Servlet/Jsp技术中的session机制,这会使你对此有更深刻的理解。 + +Cookie和Session + +上面提到解决HTTP协议自身无状态的方式有cookie和session。二者都能记录状态,前者是将状态数据保存在客户端,后者则保存在服务端。 + +首先看一下cookie的工作原理,这需要有基本的HTTP协议基础。 + +cookie是在RFC2109(已废弃,被RFC2965取代)里初次被描述的,每个客户端最多保持三百个cookie,每个域名下最多20个Cookie(实际上一般浏览器现在都比这个多,如Firefox是50个),而每个cookie的大小为最多4K,不过不同的浏览器都有各自的实现。对于cookie的使用,最重要的就是要控制cookie的大小,不要放入无用的信息,也不要放入过多信息。 + +无论使用何种服务端技术,只要发送回的HTTP响应中包含如下形式的头,则视为服务器要求设置一个cookie: + +Set-cookie:name=name;expires=date;path=path;domain=domain + +支持cookie的浏览器都会对此作出反应,即创建cookie文件并保存(也可能是内存cookie),用户以后在每次发出请求时,浏览器都要判断当前所有的cookie中有没有没失效(根据expires属性判断)并且匹配了path属性的cookie信息,如果有的话,会以下面的形式加入到请求头中发回服务端: + +Cookie: name="zj"; Path="/linkage" + +服务端的动态脚本会对其进行分析,并做出相应的处理,当然也可以选择直接忽略。 + +这里牵扯到一个规范(或协议)与实现的问题,简单来讲就是规范规定了做成什么样子,那么实现就必须依据规范来做,这样才能互相兼容,但是各个实现所使用的方式却不受约束,也可以在实现了规范的基础上超出规范,这就称之为扩展了。无论哪种浏览器,只要想提供cookie的功能,那就必须依照相应的RFC规范来实现。所以这里服务器只管发Set-cookie头域,这也是HTTP协议无状态性的一种体现。 + +需要注意的是,出于安全性的考虑,cookie可以被浏览器禁用。 + +再看一下session的原理: + +笔者没有找到相关的RFC,因为session本就不是协议层面的事物。它的基本原理是服务端为每一个session维护一份会话信息数据,而客户端和服务端依靠一个全局唯一的标识来访问会话信息数据。用户访问web应用时,服务端程序决定何时创建session,创建session可以概括为三个步骤: + +1. 生成全局唯一标识符(sessionid); +2. 开辟数据存储空间。一般会在内存中创建相应的数据结构,但这种情况下,系统一旦掉电,所有的会话数据就会丢失,如果是电子商务网站,这种事故会造成严重的后果。不过也可以写到文件里甚至存储在数据库中,这样虽然会增加I/O开销,但session可以实现某种程度的持久化,而且更有利于session的共享; +3. 将session的全局唯一标示符发送给客户端。 +问题的关键就在服务端如何发送这个session的唯一标识上。联系到HTTP协议,数据无非可以放到请求行、头域或Body里,基于此,一般来说会有两种常用的方式:cookie和URL重写。 + +1. Cookie +读者应该想到了,对,服务端只要设置Set-cookie头就可以将session的标识符传送到客户端,而客户端此后的每一次请求都会带上这个标识符,由于cookie可以设置失效时间,所以一般包含session信息的cookie会设置失效时间为0,即浏览器进程有效时间。至于浏览器怎么处理这个0,每个浏览器都有自己的方案,但差别都不会太大(一般体现在新建浏览器窗口的时候); +2. URL重写 +所谓URL重写,顾名思义就是重写URL。试想,在返回用户请求的页面之前,将页面内所有的URL后面全部以get参数的方式加上session标识符(或者加在path info部分等等),这样用户在收到响应之后,无论点击哪个链接或提交表单,都会在再带上session的标识符,从而就实现了会话的保持。读者可能会觉得这种做法比较麻烦,确实是这样,但是,如果客户端禁用了cookie的话,URL重写将会是首选。 + 到这里,读者应该明白我前面为什么说session也算作是对HTTP的一种扩展了吧。如下两幅图是笔者在Firefox的Firebug插件中的截图,可以看到,当我第一次访问index.jsp时,响应头里包含了Set-cookie头,而请求头中没有。当我再次刷新页面时,图二显示在响应中不在有Set-cookie头,而在请求头中却有了Cookie头。注意一下Cookie的名字:jsessionid,顾名思义,就是session的标识符,另外可以看到两幅图中的jsessionid的值是相同的,原因笔者就不再多解释了。另外读者可能在一些网站上见过在最后附加了一段形如jsessionid=xxx的URL,这就是采用URL重写来实现的session。 + +(图一,首次请求index.jsp) + + +(图二,再次请求index.jsp) + +Cookie和session由于实现手段不同,因此也各有优缺点和各自的应用场景: + +1. 应用场景 +Cookie的典型应用场景是Remember Me服务,即用户的账户信息通过cookie的形式保存在客户端,当用户再次请求匹配的URL的时候,账户信息会被传送到服务端,交由相应的程序完成自动登录等功能。当然也可以保存一些客户端信息,比如页面布局以及搜索历史等等。 +Session的典型应用场景是用户登录某网站之后,将其登录信息放入session,在以后的每次请求中查询相应的登录信息以确保该用户合法。当然还是有购物车等等经典场景; +2. 安全性 +cookie将信息保存在客户端,如果不进行加密的话,无疑会暴露一些隐私信息,安全性很差,一般情况下敏感信息是经过加密后存储在cookie中,但很容易就会被窃取。而session只会将信息存储在服务端,如果存储在文件或数据库中,也有被窃取的可能,只是可能性比cookie小了太多。 +Session安全性方面比较突出的是存在会话劫持的问题,这是一种安全威胁,这在下文会进行更详细的说明。总体来讲,session的安全性要高于cookie; +3. 性能 +Cookie存储在客户端,消耗的是客户端的I/O和内存,而session存储在服务端,消耗的是服务端的资源。但是session对服务器造成的压力比较集中,而cookie很好地分散了资源消耗,就这点来说,cookie是要优于session的; +4. 时效性 +Cookie可以通过设置有效期使其较长时间内存在于客户端,而session一般只有比较短的有效期(用户主动销毁session或关闭浏览器后引发超时); +5. 其他 +Cookie的处理在开发中没有session方便。而且cookie在客户端是有数量和大小的限制的,而session的大小却只以硬件为限制,能存储的数据无疑大了太多。 \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/文件说明.md b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/文件说明.md new file mode 100644 index 0000000..a9fbd9c --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/express/文件说明.md @@ -0,0 +1,77 @@ +# 文件说明 + +# node_modules + +> 模块安装路径 + +# package.json + +> 项目说明 + +# code + +> 代码目录 + +## 0001express创建.js + +> 搭建最初始的express + +01.js + +> 框架入门 + +02.js + +> 中间件 + +03.js + +> app.use + +04.js + +> 自定义404 + +05.js + +> 错误处理中间件 + +06.js + +> 模块化路由 + +07.js + +> 模块化路由实现 + +router.js + +> 模块化路由文件 + +08.js + +> 获取get参数 + +09.js + +> 获取post参数 + +10.js + +> use方法 + +11.js + +> 动态路由 + +12.js + +> 静态文件 + +13.js + +> 模板文件 + +14.js + +> app.locals公共数据 \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/app.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/app.js new file mode 100644 index 0000000..d93678a --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/app.js @@ -0,0 +1,63 @@ +const Koa = require('koa'), + Router = require('koa-router'), + art = require('koa-art-template'), + path = require('path'), + static = require('koa-static'), + bodyParser = require('koa-bodyparser'); +const routers = require('./routers/routers') + + +const app = new Koa();// 创建koa应用 +const router = new Router(); // 创建路由,支持传递参数 +art(app, { + root: path.join(__dirname, 'templates'), + extname: '.html', + debug: process.env.NODE_ENV !== 'production', + cache:false, + minimize: true +});// 将art模板导入到koa项目中 +app.use(static(`${__dirname}/static`));// 设置静态文件读取目录,可以设置多个 +app.use(bodyParser());// 设置使用bodyParser接受POST数据 +app.use(async (ctx,next)=>{ + await next(); + // console.log(ctx.status); + if(parseInt(ctx.status)===404){ + ctx.body=404; + } + // ctx.response.redirect('/about');//重定向 +});// 定制404页面 + + +router.use('/',routers.routes()); + + +/* + +router.get('/', async (ctx) => { + await ctx.render('input'); + console.log(ctx.request) + // console.log(ctx.request.url); + // // console.log(ctx.request); + // console.log(ctx.request.query.name);// 获取get参数,获取不到是undefined + // console.log(ctx.request.querystring);// 将get参数转化为字符串格式 + // console.log(ctx.params);// 获取动态路由 +}) +router.post("/123", async (ctx)=>{ + ctx.body=ctx.request.body; + console.log(ctx.request.body) +}) +*/ + + +// 调用router.routes()来组装匹配好的路由,返回一个合并好的中间件 +// 调用router.allowedMethods()获得一个中间件,当发送了不符合的请求时,会返回 `405 Method Not Allowed` 或 `501 Not Implemented` +app.use(router.routes()); +app.use(router.allowedMethods({ + // throw: true, // 抛出错误,代替设置响应头状态 + // notImplemented: () => '不支持当前请求所需要的功能', + // methodNotAllowed: () => '不支持的请求方式' +})); +// 这俩要放在最后 +app.listen(9999,()=>{ + console.log("服务器已经启动:http://localhost:80") +}) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/app.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/app.js new file mode 100644 index 0000000..7eadcd5 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/app.js @@ -0,0 +1,40 @@ +var app = require('koa')() + , logger = require('koa-logger') + , json = require('koa-json') + , views = require('koa-views') + , onerror = require('koa-onerror'); + +var index = require('./routes/index'); +var users = require('./routes/users'); + +// error handler +onerror(app); + +// global middlewares +app.use(views('views', { + root: __dirname + '/views', + default: 'jade' +})); +app.use(require('koa-bodyparser')()); +app.use(json()); +app.use(logger()); + +app.use(function *(next){ + var start = new Date; + yield next; + var ms = new Date - start; + console.log('%s %s - %s', this.method, this.url, ms); +}); + +app.use(require('koa-static')(__dirname + '/public')); + +// routes definition +app.use(index.routes(), index.allowedMethods()); +app.use(users.routes(), users.allowedMethods()); + +// error-handling +app.on('error', (err, ctx) => { + console.error('server error', err, ctx) +}); + +module.exports = app; diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/bin/www b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/bin/www new file mode 100644 index 0000000..48ef91e --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/bin/www @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +var debug = require('debug')('demo:server'); +var http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(process.env.PORT || '3000'); +// app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app.callback()); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/package-lock.json b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/package-lock.json new file mode 100644 index 0000000..a3d4ef6 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/package-lock.json @@ -0,0 +1,7178 @@ +{ + "name": "demo", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "0.1.0", + "dependencies": { + "co": "^4.6.0", + "debug": "^2.6.3", + "jade": "~1.11.0", + "koa": "^1.4.0", + "koa-bodyparser": "^2.5.0", + "koa-json": "^1.1.3", + "koa-logger": "^1.3.1", + "koa-onerror": "^1.3.1", + "koa-router": "^5.4.0", + "koa-static": "^1.5.2", + "koa-views": "^3.1.0" + }, + "devDependencies": { + "nodemon": "^1.8.1" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", + "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", + "dependencies": { + "acorn": "^2.1.0" + } + }, + "node_modules/align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dependencies": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "dependencies": { + "string-width": "^2.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", + "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0=" + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bluebird": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" + }, + "node_modules/boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "dependencies": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/boxen/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=" + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dependencies": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/character-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", + "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY=" + }, + "node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-css": { + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", + "dependencies": { + "commander": "2.8.x", + "source-map": "0.4.x" + }, + "bin": { + "cleancss": "bin/cleancss" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-css/node_modules/commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dependencies": { + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dependencies": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "node_modules/cliui/node_modules/wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/co-body": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-5.2.0.tgz", + "integrity": "sha512-sX/LQ7LqUhgyaxzbe7IqwPeTr2yfpfUIQ/dgpKo6ZI4y4lpQA0YxAomWIY+7I7rHWcG02PG+OuPREzMW/5tszQ==", + "dependencies": { + "inflation": "^2.0.0", + "qs": "^6.4.0", + "raw-body": "^2.2.0", + "type-is": "^1.6.14" + } + }, + "node_modules/co-render": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/co-render/-/co-render-0.2.0.tgz", + "integrity": "sha1-1YpOPKH2fqoZElDMiQpCDO4jdC8=", + "dependencies": { + "consolidate": "^0.13.0", + "debug": "2" + } + }, + "node_modules/co-views": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/co-views/-/co-views-0.3.0.tgz", + "integrity": "sha1-AcH7b6jqlxmpnhEJ6+HHxmSVjnA=", + "dependencies": { + "co-render": "0", + "debug": "2", + "utils-merge": "1" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/commander": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", + "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=", + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/composition": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/composition/-/composition-2.3.0.tgz", + "integrity": "sha1-dCgFN0yrVQxSCjNmL1pzLgII1vI=", + "dependencies": { + "any-promise": "^1.1.0", + "co": "^4.0.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/configstore": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", + "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", + "dev": true, + "dependencies": { + "dot-prop": "^4.2.1", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/consolidate": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.13.1.tgz", + "integrity": "sha1-npUDVo60hQiJ2m7YeoUsjdLRP2Q=", + "dependencies": { + "bluebird": "^2.9.26" + } + }, + "node_modules/constantinople": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", + "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=", + "deprecated": "Please update to at least constantinople 3.1.1", + "dependencies": { + "acorn": "^2.1.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookies": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", + "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", + "dependencies": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-to": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", + "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "dependencies": { + "capture-stack-trace": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/css": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", + "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=", + "dependencies": { + "css-parse": "1.0.4", + "css-stringify": "1.0.5" + } + }, + "node_modules/css-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz", + "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90=" + }, + "node_modules/css-stringify": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", + "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE=" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/dot-prop": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "dev": true, + "dependencies": { + "is-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/error-inject": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz", + "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=" + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "dependencies": { + "ini": "^1.3.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "dependencies": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "node_modules/graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", + "dependencies": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", + "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/humanize-number": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/humanize-number/-/humanize-number-0.0.2.tgz", + "integrity": "sha1-EcCvakcWQ2M1iFiASPF5lUFInBg=" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", + "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "dependencies": { + "ci-info": "^1.5.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "dependencies": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "node_modules/is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jade": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", + "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=", + "deprecated": "Jade has been renamed to pug, please install the latest version of pug instead of jade", + "dependencies": { + "character-parser": "1.2.1", + "clean-css": "^3.1.9", + "commander": "~2.6.0", + "constantinople": "~3.0.1", + "jstransformer": "0.0.2", + "mkdirp": "~0.5.0", + "transformers": "2.1.0", + "uglify-js": "^2.4.19", + "void-elements": "~2.0.1", + "with": "~4.0.0" + }, + "bin": { + "jade": "bin/jade.js" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/jstransformer": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", + "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^6.0.1" + } + }, + "node_modules/keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "dependencies": { + "tsscmp": "1.0.6" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/koa": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/koa/-/koa-1.7.0.tgz", + "integrity": "sha512-bgKsbYjJac0E8O6ya+m6KosXXUigJ15N4XFCnCA0P/kNViu9OnMLv5WcnEeQ5q1SeuKqlqcf0WiroZQBiPHp8Q==", + "dependencies": { + "accepts": "^1.2.2", + "co": "^4.4.0", + "composition": "^2.1.1", + "content-disposition": "~0.5.0", + "content-type": "^1.0.0", + "cookies": "~0.8.0", + "debug": "^2.6.9", + "delegates": "^1.0.0", + "destroy": "^1.0.3", + "error-inject": "~1.0.0", + "escape-html": "~1.0.1", + "fresh": "^0.5.2", + "http-assert": "^1.1.0", + "http-errors": "^1.2.8", + "koa-compose": "^2.3.0", + "koa-is-json": "^1.0.0", + "mime-types": "^2.0.7", + "on-finished": "^2.1.0", + "only": "0.0.2", + "parseurl": "^1.3.0", + "statuses": "^1.2.0", + "type-is": "^1.5.5", + "vary": "^1.0.0" + }, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/koa-bodyparser": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-2.5.0.tgz", + "integrity": "sha1-PrckP0eZii53LbBfbcTg9PPMvfA=", + "dependencies": { + "co-body": "^5.1.0", + "copy-to": "^2.0.1" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/koa-compose": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-2.5.1.tgz", + "integrity": "sha1-cmz7F2lN5cufvwPArfFyMD+D8VY=" + }, + "node_modules/koa-is-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", + "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=" + }, + "node_modules/koa-json": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/koa-json/-/koa-json-1.1.3.tgz", + "integrity": "sha1-WeM2P0IfYe9YatcspJ/OmoVITSY=", + "dependencies": { + "koa-is-json": "1", + "streaming-json-stringify": "3" + } + }, + "node_modules/koa-logger": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/koa-logger/-/koa-logger-1.3.1.tgz", + "integrity": "sha1-rT9fIZOzM0Mo8+uZphj0sEvui9U=", + "dependencies": { + "bytes": "1", + "chalk": "^1.1.3", + "humanize-number": "0.0.2", + "passthrough-counter": "^1.0.0" + } + }, + "node_modules/koa-onerror": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/koa-onerror/-/koa-onerror-1.3.1.tgz", + "integrity": "sha1-pbVh4ch+8yieQwF0bgE4LyT/viI=", + "dependencies": { + "copy-to": "~2.0.1", + "swig": "~1.4.2" + } + }, + "node_modules/koa-router": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/koa-router/-/koa-router-5.4.2.tgz", + "integrity": "sha1-Tb26fnFZU9VobAO3w/29IUYx+HA=", + "dependencies": { + "co": "^4.6.0", + "debug": "^2.2.0", + "http-errors": "^1.3.1", + "methods": "^1.0.1", + "path-to-regexp": "^1.1.1" + }, + "engines": { + "node": "> 0.12" + } + }, + "node_modules/koa-send": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-2.0.3.tgz", + "integrity": "sha512-fX69m+IqgXT4ZgBMsGVsMMB5tLYs9Sa1MhQLyau0n5Qetq5003aaFoCY/YpPL4M+WA7fpJfFk6aEArNzGP0Q3w==", + "dependencies": { + "debug": "^3.2.5", + "mz": "^2.0.0", + "resolve-path": "^1.2.1" + } + }, + "node_modules/koa-send/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/koa-send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/koa-static": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-1.5.3.tgz", + "integrity": "sha512-FmfSFJOrtWGZ/Ae5Q7xeM+ck1IdofNEvIQhdPLvGHyTjilhYmFGoyRN1+BAbTknWnDoRRyHsGGq0FMRDTcCb1w==", + "dependencies": { + "debug": "^3.2.5", + "koa-send": "~2.0.1" + } + }, + "node_modules/koa-static/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/koa-static/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/koa-views": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/koa-views/-/koa-views-3.1.0.tgz", + "integrity": "sha1-Ov67Qi2d/Row7/68Wi2GYbeU9kI=", + "dependencies": { + "co-views": "^0.3.0", + "debug": "^2.1.3", + "koa-send": "^1.3.1", + "object-assign": "^2.0.0" + } + }, + "node_modules/koa-views/node_modules/koa-send": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-1.3.2.tgz", + "integrity": "sha512-3p4FrvqwxbuJdVnsxIH3HtYcaj/FlxVqrQ66t7hrWkxCnD3ulcOksjq290JJFYtN5Gwn0dqKChn9dMDZ27WVpw==", + "dependencies": { + "debug": "^2.6.9", + "mz": "^1.0.1" + } + }, + "node_modules/koa-views/node_modules/mz": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-1.3.0.tgz", + "integrity": "sha1-BvCT/dmVagbTfhsegTROJ0eMQvA=", + "dependencies": { + "native-or-bluebird": "1", + "thenify": "3", + "thenify-all": "1" + } + }, + "node_modules/latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "dependencies": { + "package-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "dependencies": { + "mime-db": "1.49.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/mz/node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/native-or-bluebird": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/native-or-bluebird/-/native-or-bluebird-1.2.0.tgz", + "integrity": "sha1-OcR7/Xgl0fuf+tMiEK4l2q3xAck=", + "deprecated": "'native-or-bluebird' is deprecated. Please use 'any-promise' instead." + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "1.19.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.4.tgz", + "integrity": "sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "chokidar": "^2.1.8", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.2", + "update-notifier": "^2.5.0" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" + }, + "node_modules/optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dependencies": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "node_modules/optimist/node_modules/minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "dependencies": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/passthrough-counter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passthrough-counter/-/passthrough-counter-1.0.0.tgz", + "integrity": "sha1-GWfZ5m2lcrXAI8eH2xEqOHqxZvo=" + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", + "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=", + "dependencies": { + "asap": "~1.0.0" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body/node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "dev": true, + "dependencies": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "dependencies": { + "rc": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/resolve-path": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", + "dependencies": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/resolve-path/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/resolve-path/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/resolve-path/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/resolve-path/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dependencies": { + "align-text": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "dependencies": { + "semver": "^5.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streaming-json-stringify": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/streaming-json-stringify/-/streaming-json-stringify-3.1.0.tgz", + "integrity": "sha1-gCAEN6mTzDnE/gAmO3s7kDrIevU=", + "dependencies": { + "json-stringify-safe": "5", + "readable-stream": "2" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/swig": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/swig/-/swig-1.4.2.tgz", + "integrity": "sha1-QIXKBFM2kQS11IPihBs5t64aq6U=", + "deprecated": "This package is no longer maintained", + "dependencies": { + "optimist": "~0.6", + "uglify-js": "~2.4" + }, + "bin": { + "swig": "bin/swig.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/swig/node_modules/camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/swig/node_modules/source-map": { + "version": "0.1.34", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz", + "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=", + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/swig/node_modules/uglify-js": { + "version": "2.4.24", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz", + "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=", + "dependencies": { + "async": "~0.2.6", + "source-map": "0.1.34", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.5.4" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/swig/node_modules/wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/swig/node_modules/yargs": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz", + "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=", + "dependencies": { + "camelcase": "^1.0.2", + "decamelize": "^1.0.0", + "window-size": "0.1.0", + "wordwrap": "0.0.2" + } + }, + "node_modules/term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "dependencies": { + "execa": "^0.7.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/transformers": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", + "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=", + "deprecated": "Deprecated, use jstransformer", + "dependencies": { + "css": "~1.0.8", + "promise": "~2.0", + "uglify-js": "~2.2.5" + } + }, + "node_modules/transformers/node_modules/is-promise": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", + "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=" + }, + "node_modules/transformers/node_modules/optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "dependencies": { + "wordwrap": "~0.0.2" + } + }, + "node_modules/transformers/node_modules/promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", + "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=", + "dependencies": { + "is-promise": "~1" + } + }, + "node_modules/transformers/node_modules/source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/transformers/node_modules/uglify-js": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", + "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=", + "dependencies": { + "optimist": "~0.3.5", + "source-map": "~0.1.7" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "engines": { + "node": ">=0.6.x" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dependencies": { + "source-map": "~0.5.1", + "yargs": "~3.10.0" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + }, + "optionalDependencies": { + "uglify-to-browserify": "~1.0.0" + } + }, + "node_modules/uglify-js/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=" + }, + "node_modules/undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dev": true, + "dependencies": { + "debug": "^2.2.0" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "dependencies": { + "crypto-random-string": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dev": true, + "dependencies": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/update-notifier/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/update-notifier/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, + "dependencies": { + "string-width": "^2.1.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/with": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", + "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=", + "dependencies": { + "acorn": "^1.0.1", + "acorn-globals": "^1.0.3" + } + }, + "node_modules/with/node_modules/acorn": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", + "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "node_modules/yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dependencies": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + }, + "node_modules/yargs/node_modules/camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "engines": { + "node": ">=0.10.0" + } + } + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" + }, + "acorn-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", + "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", + "requires": { + "acorn": "^2.1.0" + } + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", + "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bluebird": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/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": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "character-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", + "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY=" + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + } + } + }, + "clean-css": { + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", + "requires": { + "commander": "2.8.x", + "source-map": "0.4.x" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": ">= 1.0.0" + } + } + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "co-body": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-5.2.0.tgz", + "integrity": "sha512-sX/LQ7LqUhgyaxzbe7IqwPeTr2yfpfUIQ/dgpKo6ZI4y4lpQA0YxAomWIY+7I7rHWcG02PG+OuPREzMW/5tszQ==", + "requires": { + "inflation": "^2.0.0", + "qs": "^6.4.0", + "raw-body": "^2.2.0", + "type-is": "^1.6.14" + } + }, + "co-render": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/co-render/-/co-render-0.2.0.tgz", + "integrity": "sha1-1YpOPKH2fqoZElDMiQpCDO4jdC8=", + "requires": { + "consolidate": "^0.13.0", + "debug": "2" + } + }, + "co-views": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/co-views/-/co-views-0.3.0.tgz", + "integrity": "sha1-AcH7b6jqlxmpnhEJ6+HHxmSVjnA=", + "requires": { + "co-render": "0", + "debug": "2", + "utils-merge": "1" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "commander": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", + "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "composition": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/composition/-/composition-2.3.0.tgz", + "integrity": "sha1-dCgFN0yrVQxSCjNmL1pzLgII1vI=", + "requires": { + "any-promise": "^1.1.0", + "co": "^4.0.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "configstore": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", + "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", + "dev": true, + "requires": { + "dot-prop": "^4.2.1", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "consolidate": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.13.1.tgz", + "integrity": "sha1-npUDVo60hQiJ2m7YeoUsjdLRP2Q=", + "requires": { + "bluebird": "^2.9.26" + } + }, + "constantinople": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", + "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=", + "requires": { + "acorn": "^2.1.0" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookies": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", + "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", + "requires": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-to": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", + "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "css": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", + "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=", + "requires": { + "css-parse": "1.0.4", + "css-stringify": "1.0.5" + } + }, + "css-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz", + "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90=" + }, + "css-stringify": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", + "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dot-prop": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "error-inject": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz", + "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + } + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "http-assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", + "requires": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + } + }, + "http-errors": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", + "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + } + } + }, + "humanize-number": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/humanize-number/-/humanize-number-0.0.2.tgz", + "integrity": "sha1-EcCvakcWQ2M1iFiASPF5lUFInBg=" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", + "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jade": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", + "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=", + "requires": { + "character-parser": "1.2.1", + "clean-css": "^3.1.9", + "commander": "~2.6.0", + "constantinople": "~3.0.1", + "jstransformer": "0.0.2", + "mkdirp": "~0.5.0", + "transformers": "2.1.0", + "uglify-js": "^2.4.19", + "void-elements": "~2.0.1", + "with": "~4.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jstransformer": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", + "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=", + "requires": { + "is-promise": "^2.0.0", + "promise": "^6.0.1" + } + }, + "keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "requires": { + "tsscmp": "1.0.6" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + }, + "koa": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/koa/-/koa-1.7.0.tgz", + "integrity": "sha512-bgKsbYjJac0E8O6ya+m6KosXXUigJ15N4XFCnCA0P/kNViu9OnMLv5WcnEeQ5q1SeuKqlqcf0WiroZQBiPHp8Q==", + "requires": { + "accepts": "^1.2.2", + "co": "^4.4.0", + "composition": "^2.1.1", + "content-disposition": "~0.5.0", + "content-type": "^1.0.0", + "cookies": "~0.8.0", + "debug": "^2.6.9", + "delegates": "^1.0.0", + "destroy": "^1.0.3", + "error-inject": "~1.0.0", + "escape-html": "~1.0.1", + "fresh": "^0.5.2", + "http-assert": "^1.1.0", + "http-errors": "^1.2.8", + "koa-compose": "^2.3.0", + "koa-is-json": "^1.0.0", + "mime-types": "^2.0.7", + "on-finished": "^2.1.0", + "only": "0.0.2", + "parseurl": "^1.3.0", + "statuses": "^1.2.0", + "type-is": "^1.5.5", + "vary": "^1.0.0" + } + }, + "koa-bodyparser": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-2.5.0.tgz", + "integrity": "sha1-PrckP0eZii53LbBfbcTg9PPMvfA=", + "requires": { + "co-body": "^5.1.0", + "copy-to": "^2.0.1" + } + }, + "koa-compose": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-2.5.1.tgz", + "integrity": "sha1-cmz7F2lN5cufvwPArfFyMD+D8VY=" + }, + "koa-is-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", + "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=" + }, + "koa-json": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/koa-json/-/koa-json-1.1.3.tgz", + "integrity": "sha1-WeM2P0IfYe9YatcspJ/OmoVITSY=", + "requires": { + "koa-is-json": "1", + "streaming-json-stringify": "3" + } + }, + "koa-logger": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/koa-logger/-/koa-logger-1.3.1.tgz", + "integrity": "sha1-rT9fIZOzM0Mo8+uZphj0sEvui9U=", + "requires": { + "bytes": "1", + "chalk": "^1.1.3", + "humanize-number": "0.0.2", + "passthrough-counter": "^1.0.0" + } + }, + "koa-onerror": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/koa-onerror/-/koa-onerror-1.3.1.tgz", + "integrity": "sha1-pbVh4ch+8yieQwF0bgE4LyT/viI=", + "requires": { + "copy-to": "~2.0.1", + "swig": "~1.4.2" + } + }, + "koa-router": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/koa-router/-/koa-router-5.4.2.tgz", + "integrity": "sha1-Tb26fnFZU9VobAO3w/29IUYx+HA=", + "requires": { + "co": "^4.6.0", + "debug": "^2.2.0", + "http-errors": "^1.3.1", + "methods": "^1.0.1", + "path-to-regexp": "^1.1.1" + } + }, + "koa-send": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-2.0.3.tgz", + "integrity": "sha512-fX69m+IqgXT4ZgBMsGVsMMB5tLYs9Sa1MhQLyau0n5Qetq5003aaFoCY/YpPL4M+WA7fpJfFk6aEArNzGP0Q3w==", + "requires": { + "debug": "^3.2.5", + "mz": "^2.0.0", + "resolve-path": "^1.2.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "koa-static": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-1.5.3.tgz", + "integrity": "sha512-FmfSFJOrtWGZ/Ae5Q7xeM+ck1IdofNEvIQhdPLvGHyTjilhYmFGoyRN1+BAbTknWnDoRRyHsGGq0FMRDTcCb1w==", + "requires": { + "debug": "^3.2.5", + "koa-send": "~2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "koa-views": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/koa-views/-/koa-views-3.1.0.tgz", + "integrity": "sha1-Ov67Qi2d/Row7/68Wi2GYbeU9kI=", + "requires": { + "co-views": "^0.3.0", + "debug": "^2.1.3", + "koa-send": "^1.3.1", + "object-assign": "^2.0.0" + }, + "dependencies": { + "koa-send": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-1.3.2.tgz", + "integrity": "sha512-3p4FrvqwxbuJdVnsxIH3HtYcaj/FlxVqrQ66t7hrWkxCnD3ulcOksjq290JJFYtN5Gwn0dqKChn9dMDZ27WVpw==", + "requires": { + "debug": "^2.6.9", + "mz": "^1.0.1" + } + }, + "mz": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-1.3.0.tgz", + "integrity": "sha1-BvCT/dmVagbTfhsegTROJ0eMQvA=", + "requires": { + "native-or-bluebird": "1", + "thenify": "3", + "thenify-all": "1" + } + } + } + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "^4.0.0" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + }, + "mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "requires": { + "mime-db": "1.49.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + } + } + }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "native-or-bluebird": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/native-or-bluebird/-/native-or-bluebird-1.2.0.tgz", + "integrity": "sha1-OcR7/Xgl0fuf+tMiEK4l2q3xAck=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "nodemon": { + "version": "1.19.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.4.tgz", + "integrity": "sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ==", + "dev": true, + "requires": { + "chokidar": "^2.1.8", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.2", + "update-notifier": "^2.5.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + } + } + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + } + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "passthrough-counter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passthrough-counter/-/passthrough-counter-1.0.0.tgz", + "integrity": "sha1-GWfZ5m2lcrXAI8eH2xEqOHqxZvo=" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", + "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=", + "requires": { + "asap": "~1.0.0" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "resolve-path": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", + "requires": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + } + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "^0.1.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "^5.0.3" + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": ">=0.0.4" + } + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "streaming-json-stringify": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/streaming-json-stringify/-/streaming-json-stringify-3.1.0.tgz", + "integrity": "sha1-gCAEN6mTzDnE/gAmO3s7kDrIevU=", + "requires": { + "json-stringify-safe": "5", + "readable-stream": "2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "swig": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/swig/-/swig-1.4.2.tgz", + "integrity": "sha1-QIXKBFM2kQS11IPihBs5t64aq6U=", + "requires": { + "optimist": "~0.6", + "uglify-js": "~2.4" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "source-map": { + "version": "0.1.34", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz", + "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=", + "requires": { + "amdefine": ">=0.0.4" + } + }, + "uglify-js": { + "version": "2.4.24", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz", + "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=", + "requires": { + "async": "~0.2.6", + "source-map": "0.1.34", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.5.4" + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + }, + "yargs": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz", + "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=", + "requires": { + "camelcase": "^1.0.2", + "decamelize": "^1.0.0", + "window-size": "0.1.0", + "wordwrap": "0.0.2" + } + } + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + } + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "transformers": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", + "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=", + "requires": { + "css": "~1.0.8", + "promise": "~2.0", + "uglify-js": "~2.2.5" + }, + "dependencies": { + "is-promise": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", + "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=" + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "requires": { + "wordwrap": "~0.0.2" + } + }, + "promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", + "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=", + "requires": { + "is-promise": "~1" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "requires": { + "amdefine": ">=0.0.4" + } + }, + "uglify-js": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", + "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=", + "requires": { + "optimist": "~0.3.5", + "source-map": "~0.1.7" + } + } + } + }, + "tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=" + }, + "undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dev": true, + "requires": { + "debug": "^2.2.0" + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "with": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", + "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=", + "requires": { + "acorn": "^1.0.1", + "acorn-globals": "^1.0.3" + }, + "dependencies": { + "acorn": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", + "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=" + } + } + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + } + } + } + } +} diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/package.json b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/package.json new file mode 100644 index 0000000..d3e4c0a --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/package.json @@ -0,0 +1,27 @@ +{ + "name": "demo", + "version": "0.1.0", + "private": true, + "scripts": { + "start": "node bin/www", + "dev": "./node_modules/.bin/nodemon bin/www", + "prd": "pm2 start bin/www", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "dependencies": { + "co": "^4.6.0", + "debug": "^2.6.3", + "jade": "~1.11.0", + "koa": "^1.4.0", + "koa-bodyparser": "^2.5.0", + "koa-json": "^1.1.3", + "koa-logger": "^1.3.1", + "koa-onerror": "^1.3.1", + "koa-router": "^5.4.0", + "koa-static": "^1.5.2", + "koa-views": "^3.1.0" + }, + "devDependencies": { + "nodemon": "^1.8.1" + } +} \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/public/stylesheets/style.css b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/public/stylesheets/style.css new file mode 100644 index 0000000..9453385 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/public/stylesheets/style.css @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/routes/index.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/routes/index.js new file mode 100644 index 0000000..bc3be3a --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/routes/index.js @@ -0,0 +1,15 @@ +var router = require('koa-router')(); + +router.get('/', function *(next) { + yield this.render('index', { + title: 'Hello World Koa!' + }); +}); + +router.get('/foo', function *(next) { + yield this.render('index', { + title: 'Hello World foo!' + }); +}); + +module.exports = router; diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/routes/users.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/routes/users.js new file mode 100644 index 0000000..bfea3d3 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/routes/users.js @@ -0,0 +1,13 @@ +var router = require('koa-router')(); + +router.prefix('/users'); + +router.get('/', function *(next) { + this.body = 'this is a users response!'; +}); + +router.get('/bar', function *(next) { + this.body = 'this is a users/bar response!'; +}); + +module.exports = router; diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/views/error.jade b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/views/error.jade new file mode 100644 index 0000000..51ec12c --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/views/error.jade @@ -0,0 +1,6 @@ +extends layout + +block content + h1= message + h2= error.status + pre #{error.stack} diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/views/index.jade b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/views/index.jade new file mode 100644 index 0000000..3d63b9a --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/views/index.jade @@ -0,0 +1,5 @@ +extends layout + +block content + h1= title + p Welcome to #{title} diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/views/layout.jade b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/views/layout.jade new file mode 100644 index 0000000..15af079 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/demo/views/layout.jade @@ -0,0 +1,7 @@ +doctype html +html + head + title= title + link(rel='stylesheet', href='/stylesheets/style.css') + body + block content diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/ostest.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/ostest.js new file mode 100644 index 0000000..9ced85a --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/ostest.js @@ -0,0 +1,78 @@ +//开启严格模式 +'use strict'; + +const os = require('os'); + +function deviceInfo() { + if (!os) { + return null; + } + + const info = { + platform: '', + hostname: '', + cpu: '', + mac: '' + }; + +//操作系统平台 + const pf = os.platform(); + + switch (pf) { + case 'darwin': + info.platform = 'macOS' + break; + case 'win32': + info.platform = 'Windows' + break; + default: + break; + } + + //主机名 + info.hostname = os.hostname(); + + //cpu + const cpus = os.cpus(); + if (cpus.length) { + info.cpu = cpus[0].model; + } + + //网卡 + const netmap = os.networkInterfaces(); + const conf = ['en0', 'WLAN', '以太网']; + + // console.log(netmap); + + for (let index = 0; index < conf.length; index++) { + const key = conf[index]; + const item = netmap[key]; + if (item) { + info.mac = item[0].mac + // console.log('mac:'+ mac); + break; + } + } + + return info; +} +console.log(deviceInfo()) +console.log(os.cpus()) +console.log(os.arch()) +console.log(os.endianness) +// console.log(os.getFreeMem()) +console.log(os.getPriority()) +console.log(os.loadavg()) +console.log(os.networkInterfaces()) +console.log(os.loadavg()) +console.log(os.getOSRelease) +console.log(os.tmpdir()) +console.log(os.getTotalMem) +console.log(os.getOSType) +console.log(os.getUptime) +console.log(os.getOSVersion) +console.log(os.constants) +//module.exports 暴露接口的方法 +module.exports = { + deviceInfo: deviceInfo +}; \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/package-lock.json b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/package-lock.json new file mode 100644 index 0000000..4b58130 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/package-lock.json @@ -0,0 +1,3936 @@ +{ + "name": "koa", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "koa", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "art-template": "^4.13.2", + "koa": "^2.13.1", + "koa-art-template": "^1.1.1", + "koa-bodyparser": "^4.3.0", + "koa-router": "^10.1.1", + "koa-static": "^5.0.0", + "nodemon": "^2.0.12" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dependencies": { + "string-width": "^3.0.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/art-template": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/art-template/-/art-template-4.13.2.tgz", + "integrity": "sha512-04ws5k+ndA5DghfheY4c8F1304XJKeTcaXqZCLpxFkNMSkaR3ChW1pX2i9d3sEEOZuLy7de8lFriRaik1jEeOQ==", + "dependencies": { + "acorn": "^5.0.3", + "escodegen": "^1.8.1", + "estraverse": "^4.2.0", + "html-minifier": "^3.4.3", + "is-keyword-js": "^1.0.3", + "js-tokens": "^3.0.1", + "merge-source-map": "^1.0.3", + "source-map": "^0.5.6" + }, + "engines": { + "node": ">= 1.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-content-type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "dependencies": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/co-body": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz", + "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==", + "dependencies": { + "inflation": "^2.0.0", + "qs": "^6.5.2", + "raw-body": "^2.3.3", + "type-is": "^1.6.16" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookies": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", + "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", + "dependencies": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/copy-to": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", + "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dependencies": { + "ini": "1.3.7" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dependencies": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "bin": { + "html-minifier": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/http-assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", + "dependencies": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "node_modules/http-errors": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", + "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", + "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dependencies": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-keyword-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-keyword-js/-/is-keyword-js-1.0.3.tgz", + "integrity": "sha1-rDDc81tnH0snsX9ctXI1EmAhEy0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "node_modules/keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "dependencies": { + "tsscmp": "1.0.6" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/koa": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.1.tgz", + "integrity": "sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w==", + "dependencies": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.8.0", + "debug": "~3.1.0", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^1.2.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" + }, + "engines": { + "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" + } + }, + "node_modules/koa-art-template": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/koa-art-template/-/koa-art-template-1.1.1.tgz", + "integrity": "sha512-Dgt+D4nU3p8/7ykwCCdnpKUq/rrJUVkoYKUoTHoApCL4G1Qku1xwuNXMYfHjHHk/RnqS+CwxMuNdBlDOyXM3tQ==", + "dependencies": { + "debug": "^2.6.1" + }, + "engines": { + "node": ">= 7.6.0" + }, + "peerDependencies": { + "art-template": ">=4.11.0" + } + }, + "node_modules/koa-art-template/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/koa-art-template/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/koa-bodyparser": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz", + "integrity": "sha512-uyV8G29KAGwZc4q/0WUAjH+Tsmuv9ImfBUF2oZVyZtaeo0husInagyn/JH85xMSxM0hEk/mbCII5ubLDuqW/Rw==", + "dependencies": { + "co-body": "^6.0.0", + "copy-to": "^2.0.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==" + }, + "node_modules/koa-convert": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", + "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", + "dependencies": { + "co": "^4.6.0", + "koa-compose": "^3.0.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/koa-convert/node_modules/koa-compose": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "dependencies": { + "any-promise": "^1.1.0" + } + }, + "node_modules/koa-router": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/koa-router/-/koa-router-10.1.1.tgz", + "integrity": "sha512-z/OzxVjf5NyuNO3t9nJpx7e1oR3FSBAauiwXtMQu4ppcnuNZzTaQ4p21P8A6r2Es8uJJM339oc4oVW+qX7SqnQ==", + "dependencies": { + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "koa-compose": "^4.1.0", + "methods": "^1.1.2", + "path-to-regexp": "^6.1.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/koa-router/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/koa-router/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/koa-send": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", + "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", + "dependencies": { + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "resolve-path": "^1.4.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/koa-send/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/koa-send/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/koa-static": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", + "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", + "dependencies": { + "debug": "^3.1.0", + "koa-send": "^5.0.0" + }, + "engines": { + "node": ">= 7.6.0" + } + }, + "node_modules/koa/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/koa/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "dependencies": { + "mime-db": "1.49.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/nodemon": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", + "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.3", + "update-notifier": "^4.1.0" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-to-regexp": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz", + "integrity": "sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==" + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "engines": { + "node": ">=4" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body/node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve-path": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", + "dependencies": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/resolve-path/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/resolve-path/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/resolve-path/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/resolve-path/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "engines": { + "node": ">=0.6.x" + } + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "dependencies": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uglify-js/node_modules/commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + }, + "node_modules/uglify-js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dependencies": { + "debug": "^2.2.0" + } + }, + "node_modules/undefsafe/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/undefsafe/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dependencies": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ylru": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", + "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", + "engines": { + "node": ">= 4.0.0" + } + } + }, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "art-template": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/art-template/-/art-template-4.13.2.tgz", + "integrity": "sha512-04ws5k+ndA5DghfheY4c8F1304XJKeTcaXqZCLpxFkNMSkaR3ChW1pX2i9d3sEEOZuLy7de8lFriRaik1jEeOQ==", + "requires": { + "acorn": "^5.0.3", + "escodegen": "^1.8.1", + "estraverse": "^4.2.0", + "html-minifier": "^3.4.3", + "is-keyword-js": "^1.0.3", + "js-tokens": "^3.0.1", + "merge-source-map": "^1.0.3", + "source-map": "^0.5.6" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/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.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cache-content-type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "requires": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + } + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "co-body": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz", + "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==", + "requires": { + "inflation": "^2.0.0", + "qs": "^6.5.2", + "raw-body": "^2.3.3", + "type-is": "^1.6.16" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookies": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", + "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", + "requires": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + } + }, + "copy-to": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", + "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "requires": { + "ini": "1.3.7" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + } + }, + "http-assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", + "requires": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "http-errors": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", + "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inflation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", + "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + } + }, + "is-keyword-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-keyword-js/-/is-keyword-js-1.0.3.tgz", + "integrity": "sha1-rDDc81tnH0snsX9ctXI1EmAhEy0=" + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "requires": { + "tsscmp": "1.0.6" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "koa": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.1.tgz", + "integrity": "sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w==", + "requires": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.8.0", + "debug": "~3.1.0", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^1.2.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "koa-art-template": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/koa-art-template/-/koa-art-template-1.1.1.tgz", + "integrity": "sha512-Dgt+D4nU3p8/7ykwCCdnpKUq/rrJUVkoYKUoTHoApCL4G1Qku1xwuNXMYfHjHHk/RnqS+CwxMuNdBlDOyXM3tQ==", + "requires": { + "debug": "^2.6.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "koa-bodyparser": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz", + "integrity": "sha512-uyV8G29KAGwZc4q/0WUAjH+Tsmuv9ImfBUF2oZVyZtaeo0husInagyn/JH85xMSxM0hEk/mbCII5ubLDuqW/Rw==", + "requires": { + "co-body": "^6.0.0", + "copy-to": "^2.0.1" + } + }, + "koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==" + }, + "koa-convert": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", + "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", + "requires": { + "co": "^4.6.0", + "koa-compose": "^3.0.0" + }, + "dependencies": { + "koa-compose": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "requires": { + "any-promise": "^1.1.0" + } + } + } + }, + "koa-router": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/koa-router/-/koa-router-10.1.1.tgz", + "integrity": "sha512-z/OzxVjf5NyuNO3t9nJpx7e1oR3FSBAauiwXtMQu4ppcnuNZzTaQ4p21P8A6r2Es8uJJM339oc4oVW+qX7SqnQ==", + "requires": { + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "koa-compose": "^4.1.0", + "methods": "^1.1.2", + "path-to-regexp": "^6.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "koa-send": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", + "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", + "requires": { + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "resolve-path": "^1.4.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "koa-static": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", + "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", + "requires": { + "debug": "^3.1.0", + "koa-send": "^5.0.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "requires": { + "package-json": "^6.3.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + }, + "mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "requires": { + "mime-db": "1.49.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "requires": { + "lower-case": "^1.1.1" + } + }, + "nodemon": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", + "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.3", + "update-notifier": "^4.1.0" + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "requires": { + "no-case": "^2.2.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-to-regexp": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz", + "integrity": "sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==" + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "requires": { + "escape-goat": "^2.0.0" + } + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "requires": { + "rc": "^1.2.8" + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, + "resolve-path": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", + "requires": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + } + } + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==" + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "requires": { + "nopt": "~1.0.10" + } + }, + "tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "requires": { + "debug": "^2.2.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + } + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + }, + "ylru": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", + "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==" + } + } +} diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/package.json b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/package.json new file mode 100644 index 0000000..c5849b7 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/package.json @@ -0,0 +1,22 @@ +{ + "name": "koa", + "version": "1.0.0", + "description": "", + "main": "app.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "dev": "nodemon app.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "art-template": "^4.13.2", + "koa": "^2.13.1", + "koa-art-template": "^1.1.1", + "koa-bodyparser": "^4.3.0", + "koa-router": "^10.1.1", + "koa-static": "^5.0.0", + "nodemon": "^2.0.12" + } +} diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/readme.md b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/readme.md new file mode 100644 index 0000000..da7b888 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/readme.md @@ -0,0 +1,80 @@ +# koa模板V0.1 + +## 安装的包 + +1. koa 核心包 +2. art-templates +3. koa-art-templates 模版视图渲染中间件 + +## 使用方法 + +### 1 art + +* options + +```js +// 模板名 +filename: null, + +// 模板语法规则列表 +rules: [nativeRule, artRule], + +// 是否开启对模板输出语句自动编码功能。为 false 则关闭编码输出功能 +// escape 可以防范 XSS 攻击 +escape: true, + +// 启动模板引擎调试模式。如果为 true: {cache:false, minimize:false, compileDebug:true} +debug: detectNode ? process.env.NODE_ENV !== 'production' : false, + +// bail 如果为 true,编译错误与运行时错误都会抛出异常 +bail: true, + +// 是否开启缓存 +cache: true, + +// 是否开启压缩。它会运行 htmlMinifier,将页面 HTML、CSS、CSS 进行压缩输出 +// 如果模板包含没有闭合的 HTML 标签,请不要打开 minimize,否则可能被 htmlMinifier 修复或过滤 +minimize: true, + +// 是否编译调试版 +compileDebug: false, + +// 模板路径转换器 +resolveFilename: resolveFilename, + +// 子模板编译适配器 +include: include, + +// HTML 压缩器。仅在 NodeJS 环境下有效 +htmlMinifier: htmlMinifier, + +// HTML 压缩器配置。参见 https://github.com/kangax/html-minifier +htmlMinifierOptions: { + collapseWhitespace: true, + minifyCSS: true, + minifyJS: true, + // 运行时自动合并:rules.map(rule => rule.test) + ignoreCustomFragments: [] +}, + +// 错误事件。仅在 bail 为 false 时生效 +onerror: onerror, + +// 模板文件加载器 +loader: loader, + +// 缓存中心适配器(依赖 filename 字段) +caches: caches, + +// 模板根目录。如果 filename 字段不是本地路径,则在 root 查找模板 +root: '/', + +// 默认后缀名。如果没有后缀名,则会自动添加 extname +extname: '.art', + +// 忽略的变量。被模板编译器忽略的模板变量列表 +ignore: [], + +// 导入的模板变量 +imports: runtime +``` \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/routers/main/get.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/routers/main/get.js new file mode 100644 index 0000000..b1562d4 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/routers/main/get.js @@ -0,0 +1,8 @@ +const Router = require('koa-router'); + +let router = new Router(); +router.get('/',async(ctx)=>{ + ctx.body="首页"; +}) + +module.exports=router; \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/routers/routers.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/routers/routers.js new file mode 100644 index 0000000..f499c7e --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/routers/routers.js @@ -0,0 +1,11 @@ +const Router = require('koa-router'); +const router = new Router(); + +// 路由列表 +const main = require('./main/get') + + +router.use('/',main.routes()); +// router.use('/admin',admin.routes()); + +module.exports=router; \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/static/css/default.css b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/static/css/default.css new file mode 100644 index 0000000..82bef4f --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/static/css/default.css @@ -0,0 +1,52 @@ +/*css 初始化 */ +html, body, ul, li, ol, dl, dd, dt, p, h1, h2, h3, h4, h5, h6, +form, fieldset, legend, img { margin:0; padding:0; } +fieldset, img,input,button { border:none; padding:0;margin:0;outline-style:none; } +ul, ol { list-style:none; } +input { padding-top:0; padding-bottom:0; font-family: "SimSun","宋体";} +select, input { vertical-align:middle; } +select, input, textarea { font-size:12px; margin:0; } +textarea { resize:none; } +img {border:0; vertical-align:middle;} +table { border-collapse:collapse; } +body { + font:12px/150% Arial,Verdana,"\5b8b\4f53"; + color:#666; + background:#fff +} +.clearfix:before,.clearfix:after{ + content:""; + display:table; +} +.clearfix:after{clear:both;} +.clearfix{ + *zoom:1;/*IE/7/6*/ +} +a{color:#666; text-decoration:none; } +a:hover{color:#C81623;} +h1,h2,h3,h4,h5,h6{text-decoration:none;font-weight:normal;} +s,i,em{font-style:normal;text-decoration:none;} +.col-red{color: #C81623!important;} + +/*公共类*/ +.w{ + width: 1210px;margin:0 auto; +} +.fl { + float:left +} +.fr { + float:right +} +.al { + text-align:left +} +.ac { + text-align:center +} +.ar { + text-align:right +} +.hide { + display:none +} \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/templates/input.html b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/templates/input.html new file mode 100644 index 0000000..d3e8c7c --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/templates/input.html @@ -0,0 +1,13 @@ + + + + + post + + +
+ + +
+ + \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/templates/user.html b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/templates/user.html new file mode 100644 index 0000000..54b308c --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/templates/user.html @@ -0,0 +1,10 @@ + + + + + 使用模板 + + +

Hello World!

+ + \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/test.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/test.js new file mode 100644 index 0000000..77572f2 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/koa/test.js @@ -0,0 +1,13 @@ +var Koa = require('koa'); +var bodyParser = require('koa-bodyparser'); + +var app = new Koa(); +app.use(bodyParser()); + +app.use(async ctx => { + // the parsed body will store in ctx.request.body + // if nothing was parsed, body will be an empty object {} + ctx.body = ctx.request.body; +}); + +app.listen(80) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/learn-http/package.json b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/learn-http/package.json new file mode 100644 index 0000000..38509fc --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/learn-http/package.json @@ -0,0 +1,12 @@ +{ + "name": "learn-http", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/learn-http/server.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/learn-http/server.js new file mode 100644 index 0000000..b0e2f26 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/learn-http/server.js @@ -0,0 +1,9 @@ +const net = require("net"); + +const server = net.createServer() + +server.connection(client=>{ + console.log("E") +}) + +server.listen(80) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/learn-http/web.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/learn-http/web.js new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/nodejs20210812.md b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/nodejs20210812.md new file mode 100644 index 0000000..5fd7a57 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/nodejs20210812.md @@ -0,0 +1,296 @@ +# nodejs + +> 尚硅谷 超哥 + +```js +console.log(arguments)//打印回调函数中的参数 +``` + +进程和线程 + +​ 进程 + +​ 负责为程序运行提供必备的环境 + +​ 相当于工厂中的车间 + +​ 线程 + +​ 计算机中的最小单位,负责执行进程中的任务 + +​ 工厂中的工人 + + + +# nodejs简介 + +* 跨平台,运行于服务器的js运行环境 +* V8引擎,事件驱动,非阻塞,异步IO模型 +* 单线程,可用分布式拓展 +* 开源 + +## 使用Node + +```bash +node file.js +``` + +es-checker:查看es支持度,可以全局安装 + +## 一 基础 + +### 1.1 模块 + +缺陷: + +* 没有模块系统 + +* 标准库较少 + +* 没有标准接口 + +* 缺乏管理系统 + +**node.js不能使用import** + +nodejs的模块实在一个函数中,不是全局作用域 +```js +//单个 +//模块文件 +//testModule.js + +function a() { + // body... +} +module.exports=a; + +//引入文件 +//main.js +let testModule=require('./testModel');//可以不用加后缀,但是前面的./必须 +testModule(); + +// 多个1 +//模块文件 +//testModule.js +var func1 = function() { + console.log("func1"); +}; +var func2 = function() { + console.log("func2"); +}; +exports.function1 = func1; +exports.function2 = func2; + +//引入文件 +//main.js +let testModule=require('./testModel');//可以不用加后缀,但是前面的./必须 +testModule.function1(); +testModule.function2(); + +// 多个2 +//模块文件 +//testModule.js +let a=function() { + console.log("a"); +} +let b=function() { + console.log("b"); +} +module.exports={ + a, + b +} + +let testModule=require('./testModel') +testModule.a(); +testModule.b() +``` + +## 基本内置模块 +### os模块 +//模块都需要导入包 +let os=require("os"); +```js +let os=require('os'); +hostname();//主机名 +type();//系统名 +platform();//编译时系统名 +arch();//系统架构 +release();//发行版本 +uptime();//操作系统运行时间,单位为秒 +loadavg();//返回一个1,5,15分钟平均负载的数组 +totalmem();//返回系统总内存 +freemem();//空闲内存 +cpus();//数组,每个cpu信息 +networkInterfaces();//获取网络接口列表 + +``` +### url模块 +```js +let url=require("url") + +console.log("将url字符串转化为url对象"); +url.parse(); +console.log("将url对象转化为url字符串"); +url.format(urlObj); +console.log("组合变数,构造url字符串"); +url.resolve(fron,to); + +``` + +### Query String模块 + +### util模块 + + + +全局对象 + +**global** + +包 + +package + +-package.json 描述文件(必须) + +-bin 可执行二进制文件 + +-lib js文件 + +-doc 文档 + +-test 单元测试 + +不能写注释 + + + +npm命令 + +- npm -v 查看npm版本 +- npm version 查看所有模块版本 +- npm search 包名 搜索包 +- npm install/i 包名 安装包 +- npm remove/r 包名 删除包 或者uninstall +- npm install --save/-S 安装包并添加到依赖 +- npm install 下载当前项目所有依赖 +- npm install -g 安装到全局(一般都是工具) +- +- npm list 查看已经按照的包 + +初始化项目 npm init + + + +npm国内镜像 + +npm i cnpm -g + +导包本级找不到,会向上继续找,一直到根目录,如果找不到,报错 + + + +## Buffer(缓冲区) + +​ -Buffer 的结构和数组很像,操作方式也很像 + +原生数组,性能比较差 + +原生数组存不了2进制文件 + +核心对象,不用导入 + +存储的是2进制,显示为16进制 + +``` +let str= "Hello World!"; +let buf = Buffer.form(str); +console.log(buf);//存储的是二进制 +``` + +`let a = Buffer.alloc(x)`创建定长Buffer + +`let b = Buffer.allocUnsafe(x)创建不初始化的空间的Buffer,但是含有敏感数据,但是效率高,因为省略了初始化控件的步骤` + +buffer创建后大小不可更改,否则会出现内存错误,因为buffer在内存上操作 + +给buffer中元素操作,不能超过256,否则会溢出 + +.toString将Buffer转化为字符串 + +存到缓冲区`Buffer.from(str)` + +### 文件系统fs + +```js +const fs = require("fs"); +``` + +同步文件操作和一部文件操作 + +同步会阻塞程序运行,必须等待文件行为完成 + +异步是等操作完成时通过回调函数返回内容 + +* 文件写入(同步) 出现一场会完蛋 + +```js +//打开文件 +fs.openSync(path,flags[,mode]) + - path文件路径 + - flags操作类型 + r只读 + w写入 + -mode(可选),设置文件操作权限,一般不写 + //该方法会返回一个文件对象(文件描述符) + //let fd =fs.openSync("hellow.txt","w") + +//写入文件 + fs.writeSync(fd(文件描述符),string[,position(写入起始位置)[,encoding]]) + position起始位置 + encoding写入编码,默认utf-8 + //fs.writeSync(fd,"Hello World!"); +//保存关闭文件 + fs.closeSync(fd); +``` + +* 文件写入(异步) + +```js +//打开文件 +fs.open(path[, flags[, mode]], callback),结果是回调函数 + path | | + flags | 请参阅对文件系统 flags 的支持。 默认值: 'r'。 + mode | 默认值: 0o666 (可读可写) + callback + err + fd + //fs.open("filename","w",(err,fd)=>{}) + +//写入文件 + fs.write(fd, buffer[, offset[, length[, position]]], callback)//在回调函数中执行 + +//关闭文件 + fs.close(fd[, callback]) + +``` + +* 简单文件写入 + +``` +fs.writeFile(fs.writeFile(file, data[, options], callback)) +fs.writeFileSync(file, data[, options]) +``` + +* 流文件写入(更好印度贵大文件和性能解决方案) + +```js +let fd = fs.createWriteStream(path[,option]) +fd.once("open",()=>{console.log("监听打开事件,因为只会生效一次,所以")}) +fd.wirte(Str) +fd.close()//不能使用这个,否则会瞬间关闭,后面的写入会失效 +fd.end();//这个可以正常关闭 +``` + +* 读取性质的参考api diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/webDownload/express+MongoDB+file.stream+download.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/webDownload/express+MongoDB+file.stream+download.js new file mode 100644 index 0000000..8016c67 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/webDownload/express+MongoDB+file.stream+download.js @@ -0,0 +1,18 @@ +const express = require("express"); + +// const gfs = require("gfs") + +const app = express(); + +app.get("/download",(req,res)=>{ + gfs.getGridFile('./atom-macs.zip', function(err, file){ + res.header('Content-Type', file.contentType); + res.header('Content-Disposition', 'attachment; filename='+file.filename); + return file.stream(true).pipe(res); + }); +}) + +app.set('port', 80); +app.set('host','192.168.31.74'); + +app.listen("80") \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/webDownload/express+download.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/webDownload/express+download.js new file mode 100644 index 0000000..7981eae --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/webDownload/express+download.js @@ -0,0 +1,14 @@ +const express = require("express"); + +const app = express(); + +app.get("/download",(req,res)=>{ + // console.log(res)res + res.download('./atom-macs.zip')//下载命令 另一种可以通过使用iframe的src来操作,后面还可以修改文件名称 + // res.send("xs") +}) + +app.set('port', 80); +app.set('host','192.168.31.74'); + +app.listen("80") \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/webDownload/package-lock.json b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/webDownload/package-lock.json new file mode 100644 index 0000000..b4bbd94 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/webDownload/package-lock.json @@ -0,0 +1,855 @@ +{ + "name": "webDownload", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "express": "^4.17.1" + } + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "dependencies": { + "mime-db": "1.49.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + } + }, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + }, + "mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "requires": { + "mime-db": "1.49.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + } + } +} diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/webDownload/package.json b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/webDownload/package.json new file mode 100644 index 0000000..1949d75 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/Node/webDownload/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "express": "^4.17.1" + } +} diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/尚学堂.md b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/尚学堂.md new file mode 100644 index 0000000..e300538 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/尚学堂.md @@ -0,0 +1,448 @@ +# JavaScript + +## 运算符、数据类型和流程循环语句 + +switch case 采用的是=== + +default 没有选中的case + + + +## String + +字符串补全:str.padStart(length,"x") + +Str.padEnd(length,"x") + +## 函数与对象 + +### (1) 函数的声明 + +* 驼峰命名法 + + 大驼峰:首字母大写 + + 小驼峰:首字母小写 + +```js +function funName(参数){ + +} +``` + +当一个函数声明多次,后面的会覆盖 + +函数名的提升:所有的函数都会被提升带代码头部 + +不能再条件语句中声明函数 + +### (2)函数的属性和方法 + +内部属性 + +```js +function getName(){}; +getName.name//这里会显示函数的名字 +``` + +当这样子声明时,不能直接通过函数名调用 + +```  +let a = function as(){} +a();//正确 +as();//报错 +``` + +### (3) 函数的作用域 + +全局作用域 + +局部作用域 + +### (4) 函数的参数 + +函数的参数可以省略,也可以多,缺少的undefined + +查看函数有几个参数fun.length + +数值,字符串,布尔值不会再函数中改变,这个原始类型,引用类型才会改变 + + + +读取参数 + +arguments,只有在函数内部才能出现 + +### (5) 其他 + +自调用 + +```js +(function a(){console.log("xsxsxsxs")}()) +(function a(){console.log("xsxsxsxs")}() +``` + +Eval()将字符串当作语句执行 + +```js +eval(console.log("Hello World!"));//Hello World! +``` + +### (6) 闭包 + +函数嵌套,内部函数调用外部参数 + +函数变量一直在内存当中(一般函数执行完,变量会被回收,有必报的话,变量会一直存在于内存中) + +### (7) 对象 + +```js +let a={ + q:"sx", + "xsx":"xs" +} +a.q; +a["xsx"];//不能使用a."xsx"; + + +Object.keys(a);//返回key数组 +delete obj.p // true删除对象属性 +``` + + + +## 标准库 Math和Date + +### (1)Math + +Math是 JavaScript 的**原生对象**,提供各种数学功能。**该对象不是构造函数**,不能生成实例,所有的属性和方法都必须在Math对象上调用。 + +#### 静态属性 + +Math对象的静态属性,提供以下一些数学常数。 + +> Math.E:常数e。 +> Math.LN2:2 的自然对数。 +> Math.LN10:10 的自然对数。 +> Math.LOG2E:以 2 为底的e的对数。 +> Math.LOG10E:以 10 为底的e的对数。 +> Math.PI:常数 Pi。 +> Math.SQRT1_2:0.5 的平方根。 +> Math.SQRT2:2 的平方根。 + +```js +Math.E // 2.718281828459045 +Math.LN2 // 0.6931471805599453 +Math.LN10 // 2.302585092994046 +Math.LOG2E // 1.4426950408889634 +Math.LOG10E // 0.4342944819032518 +Math.PI // 3.141592653589793 +Math.SQRT1_2 // 0.7071067811865476 +Math.SQRT2 // 1.4142135623730951 +``` + +这些属性都是只读的,不能修改。 + +#### 静态方法 + +Math对象提供以下一些静态方法。 + +> Math.abs():绝对值 +> Math.ceil():向上取整 +> Math.floor():向下取整 +> Math.max():最大值 +> Math.min():最小值 Math.max方法返回参数之中最大的那个值,Math.min返回最小的那个值。如果参数为空, Math.min返回Infinity, Math.max返回-Infinity。 +> Math.pow():指数运算 Math.pow方法返回以第一个参数为底数、第二个参数为幂的指数值。 +> Math.sqrt():平方根 +> Math.log():自然对数 +> Math.exp():e的指数 +> Math.round():四舍五入 +> Math.random():随机数 返回0到1之间的一个伪随机数,可能等于0,但是一定小于1。 + +#### 三角函数方法 + +Math对象还提供一系列三角函数方法。 + +> Math.sin():返回参数的正弦(参数为弧度值) +> Math.cos():返回参数的余弦(参数为弧度值) +> Math.tan():返回参数的正切(参数为弧度值) +> Math.asin():返回参数的反正弦(返回值为弧度值) +> Math.acos():返回参数的反余弦(返回值为弧度值) +> Math.atan():返回参数的反正切(返回值为弧度值) + +### (2) Date + +#### 普通函数的用法 + +Date对象可以作为普通函数直接调用,返回一个代表当前时间的字符串。 + +```js +Date() +// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)" +``` + +注意,即使带有参数,Date作为普通函数使用时,返回的还是当前时间。 + +```js +Date(2000, 1, 1) +// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)" +``` + +上面代码说明,无论有没有参数,直接调用Date总是返回当前时间。 + + + +#### 构造函数的用法 + +Date还可以当作构造函数使用。对它使用new命令,会返回一个Date对象的实例。如果不加参数,实例代表的就是当前时间。 + +```js +var today = new Date(); +``` + +Date实例有一个独特的地方。其他对象求值的时候,都是默认调用.valueOf()方法,但是Date实例求值的时候,默认调用的是toString()方法。这导致对Date实例求值,返回的是一个字符串,代表该实例对应的时间。 + +```js +var today = new Date(); + +today +// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)" + +// 等同于 +today.toString() +// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)" +``` + +作为构造函数时,Date对象可以接受多种格式的参数,返回一个该参数对应的时间实例。 + +```js +// 参数为时间零点开始计算的毫秒数 +new Date(1378218728000) +// Tue Sep 03 2013 22:32:08 GMT+0800 (CST) + +// 参数为日期字符串 +new Date('January 6, 2013'); +// Sun Jan 06 2013 00:00:00 GMT+0800 (CST) + +// 参数为多个整数, +// 代表年、月、日、小时、分钟、秒、毫秒 +new Date(2013, 0, 1, 0, 0, 0, 0) +// Tue Jan 01 2013 00:00:00 GMT+0800 (CST) +``` + +关于Date构造函数的参数,有几点说明。 + +第一点,参数可以是负整数,代表1970年元旦之前的时间。 + +```js +new Date(-1378218728000) +// Fri Apr 30 1926 17:27:52 GMT+0800 (CST) +``` + +第二点,只要是能被Date.parse()方法解析的字符串,都可以当作参数。 + +```js +new Date('2013-2-15') +new Date('2013/2/15') +new Date('02/15/2013') +new Date('2013-FEB-15') +new Date('FEB, 15, 2013') +new Date('FEB 15, 2013') +new Date('Feberuary, 15, 2013') +new Date('Feberuary 15, 2013') +new Date('15 Feb 2013') +new Date('15, Feberuary, 2013') +// Fri Feb 15 2013 00:00:00 GMT+0800 (CST) +``` + +上面多种日期字符串的写法,返回的都是同一个时间。 + +第三,参数为年、月、日等多个整数时,年和月是不能省略的,其他参数都可以省略的。也就是说,这时至少需要两个参数,因为如果只使用“年”这一个参数,Date会将其解释为毫秒数。 + +```js +new Date(2013) +// Thu Jan 01 1970 08:00:02 GMT+0800 (CST) +``` + +上面代码中,2013被解释为毫秒数,而不是年份。 + +```js +new Date(2013, 0) +// Tue Jan 01 2013 00:00:00 GMT+0800 (CST) +new Date(2013, 0, 1) +// Tue Jan 01 2013 00:00:00 GMT+0800 (CST) +new Date(2013, 0, 1, 0) +// Tue Jan 01 2013 00:00:00 GMT+0800 (CST) +new Date(2013, 0, 1, 0, 0, 0, 0) +// Tue Jan 01 2013 00:00:00 GMT+0800 (CST) +``` + +上面代码中,不管有几个参数,返回的都是2013年1月1日零点。 + +最后,各个参数的取值范围如下。 + +> 年:使用四位数年份,比如2000。如果写成两位数或个位数,则加上1900,即10代表1910年。如果是负数,表示公元前。 +> 月:0表示一月,依次类推,11表示12月。 +> 日:1到31。 +> 小时:0到23。 +> 分钟:0到59。 +> 秒:0到59 +> 毫秒:0到999。 + +注意,月份从0开始计算,但是,天数从1开始计算。另外,除了日期的默认值为1,小时、分钟、秒钟和毫秒的默认值都是0。 + +这些参数如果超出了正常范围,会被自动折算。比如,如果月设为15,就折算为下一年的4月。 + +```js +new Date(2013, 15) +// Tue Apr 01 2014 00:00:00 GMT+0800 (CST) +new Date(2013, 0, 0) +// Mon Dec 31 2012 00:00:00 GMT+0800 (CST) +``` + +上面代码的第二个例子,日期设为0,就代表上个月的最后一天。 + +参数还可以使用负数,表示扣去的时间。 + +```js +new Date(2013, -1) +// Sat Dec 01 2012 00:00:00 GMT+0800 (CST) +new Date(2013, 0, -1) +// Sun Dec 30 2012 00:00:00 GMT+0800 (CST) +``` + +#### 日期的运算 + +类型自动转换时,Date实例如果转为数值,则等于对应的毫秒数;如果转为字符串,则等于对应的日期字符串。所以,两个日期实例对象进行减法运算时,返回的是它们间隔的毫秒数;进行加法运算时,返回的是两个字符串连接而成的新字符串。 + +```js +var d1 = new Date(2000, 2, 1); +var d2 = new Date(2000, 3, 1); + +d2 - d1 +// 2678400000 +d2 + d1 +// "Sat Apr 01 2000 00:00:00 GMT+0800 (CST)Wed Mar 01 2000 00:00:00 GMT+0800 (CST)" +``` + +#### 静态方法 + +##### Date.now() + +Date.now方法返回当前时间距离时间零点(1970年1月1日 00:00:00 UTC)的毫秒数,相当于 Unix 时间戳乘以1000。 + +```js +Date.now() // 1364026285194 +``` + +##### Date.parse() + +Date.parse方法用来解析日期字符串,返回该时间距离时间零点(1970年1月1日 00:00:00)的毫秒数。 + +日期字符串应该符合 RFC 2822 和 ISO 8061 这两个标准,即YYYY-MM-DDTHH:mm:ss.sssZ格式,其中最后的Z表示时区。但是,其他格式也可以被解析,请看下面的例子。 + +```js +Date.parse('Aug 9, 1995') +Date.parse('January 26, 2011 13:51:50') +Date.parse('Mon, 25 Dec 1995 13:30:00 GMT') +Date.parse('Mon, 25 Dec 1995 13:30:00 +0430') +Date.parse('2011-10-10') +Date.parse('2011-10-10T14:48:00') +``` + +上面的日期字符串都可以解析。 + +如果解析失败,返回NaN。 + +```js +Date.parse('xxx') // NaN +``` + +#### 实例方法 + +Date的实例对象,有几十个自己的方法,除了valueOf和toString,可以分为以下三类。 + +> to类:从Date对象返回一个字符串,表示指定的时间。 +> get类:获取Date对象的日期和时间。 +> set类:设置Date对象的日期和时间。 + +##### Date.prototype.valueOf() + +valueOf方法返回实例对象距离时间零点(1970年1月1日00:00:00 UTC)对应的毫秒数,该方法等同于getTime方法。 + +```js +var d = new Date(); + +d.valueOf() // 1362790014817 +d.getTime() // 1362790014817 +``` + +预期为数值的场合,Date实例会自动调用该方法,所以可以用下面的方法计算时间的间隔。 + +```js +var start = new Date(); +// ... +var end = new Date(); +var elapsed = end - start; +``` + +##### get 类方法 + +Date对象提供了一系列get*方法,用来获取实例对象某个方面的值。 + +> getTime():返回实例距离1970年1月1日00:00:00的毫秒数,等同于valueOf方法。 +> getDate():返回实例对象对应每个月的几号(从1开始)。 +> getDay():返回星期几,星期日为0,星期一为1,以此类推。 +> getYear():返回距离1900的年数。 +> getFullYear():返回四位的年份。 +> getMonth():返回月份(0表示1月,11表示12月)。 +> getHours():返回小时(0-23)。 +> getMilliseconds():返回毫秒(0-999)。 +> getMinutes():返回分钟(0-59)。 +> getSeconds():返回秒(0-59)。 +> getTimezoneOffset():返回当前时间与 UTC 的时区差异,以分钟表示,返回结果考虑到了夏令时因素。 + +所有这些get*方法返回的都是整数,不同方法返回值的范围不一样。 + +> 分钟和秒:0 到 59 小时:0 到 23 星期:0(星期天)到 6(星期六) 日期:1 到 31 月份:0(一月)到 11(十二月) 年份:距离1900年的年数 + +```js +var d = new Date('January 6, 2013'); + +d.getDate() // 6 +d.getMonth() // 0 +d.getYear() // 113 +d.getFullYear() // 2013 +``` + +下面是一个例子,计算本年度还剩下多少天。 + +```js +function leftDays() { + var today = new Date(); + var endYear = new Date(today.getFullYear(), 11, 31, 23, 59, 59, 999); + var msPerDay = 24 * 60 * 60 * 1000; + return Math.round((endYear.getTime() - today.getTime()) / msPerDay); +} +``` + +##### set 类方法 + +Date对象提供了一系列set*方法,用来设置实例对象的各个方面。 + +> setDate(date):设置实例对象对应的每个月的几号(1-31),返回改变后毫秒时间戳。 +> setYear(year): 设置距离1900年的年数。 +> setFullYear(year [, month, date]):设置四位年份。 +> setHours(hour [, min, sec, ms]):设置小时(0-23)。 +> setMilliseconds():设置毫秒(0-999)。 +> setMinutes(min [, sec, ms]):设置分钟(0-59)。 +> setMonth(month [, date]):设置月份(0-11)。 +> setSeconds(sec [, ms]):设置秒(0-59)。 +> setTime(milliseconds):设置毫秒时间戳。 + +这些方法基本是跟get*方法一一对应的,但是没有setDay方法,因为星期几是计算出来的,而不是设置的。另外,需要注意的是,凡是涉及到设置月份,都是从0开始算的,即0是1月,11是12月。 + + + +## DOM + diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/截屏2021-08-22 上午3.17.45.png b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/截屏2021-08-22 上午3.17.45.png new file mode 100644 index 0000000..a0a89fe Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/截屏2021-08-22 上午3.17.45.png differ diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/测试/S个人探索/0.0.01for循环是同步进行吗.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/测试/S个人探索/0.0.01for循环是同步进行吗.js new file mode 100644 index 0000000..9d78663 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/测试/S个人探索/0.0.01for循环是同步进行吗.js @@ -0,0 +1,9 @@ +console.log("start") + +for(let i = 0;i<10;i++){ + console.log(i) +} + +console.log("结束",end=" ") + +// for是同步的 \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/测试/S个人探索/0.0.02这是轮询吗.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/测试/S个人探索/0.0.02这是轮询吗.js new file mode 100644 index 0000000..29a200e --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/测试/S个人探索/0.0.02这是轮询吗.js @@ -0,0 +1,13 @@ +let i = 0; + +let s = setInterval(function (){ + if(i==100){ + console.log("轮询结束") + clearInterval(s); + } + console.log(i) + i++ + // if(i%5==0){ + + // } +},5) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/测试/S个人探索/0.0.03递归.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/测试/S个人探索/0.0.03递归.js new file mode 100644 index 0000000..cbdade5 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/测试/S个人探索/0.0.03递归.js @@ -0,0 +1,11 @@ +let i=120; + +function s(sn){ + if(sn==0){ + return 1 + }else{ + return sn*s(sn-1) + } +} + +console.log(s(i)) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/测试/闭包/0.0.01闭包.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/测试/闭包/0.0.01闭包.js new file mode 100644 index 0000000..ba9bf22 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/测试/闭包/0.0.01闭包.js @@ -0,0 +1,19 @@ +// 让函数中声明的变量常驻内存 + +function fun(){ + let i=99; + add=function () { + i+=1; + } + return ()=>{console.log(i)} +} + +let sss=fun() + +sss() + +add() + +sss() + +console.log((sss.length)) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/TypeScript.md b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/TypeScript.md new file mode 100644 index 0000000..d148d37 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/TypeScript.md @@ -0,0 +1,714 @@ +## 基础数据类型 + +Number, String, Undefined, Null, Boolean + +- 数字支持进制 + + 0b - 二进制 + 0o - 八进制 + 0x - 十六进制 + +- Undefined和Null + + 这两个值可以赋予任何类型 + +## 引用数据类型 + +### 数组 + +```ts +let arr: Number[] = [1, 2, 3]; + +let arr2: [] = [];// 空数组,不能再存值 + +// 泛型 +let arr3: Array = [10, 20, 99] +``` + +### 对象 + +```ts +let obj: Object = {};// 除了Number,String,Boolean +obj = null; +obj = undefined; +obj = []; +obj = new String(); +obj = String +``` + +## Any 任意类型 + +- 用于不明确传递的值,如后台返回的数据 + +```ts +let a: Any = null; +a = 32; +a = [1, 2, 3]; +a = 'Hello' + +let newArr: any[] = [1, 'a', true] +``` + +## Void 空值 + +- 没有任何返回值的函数 + +```ts +function fun() :Void{ + return undefined;// Undefined也算是空值 +} +``` + +## 类型推断 + +- 没有明确制定类型时做的一个推断 + +```ts +let a = 32; +a = true;// 这里会报错,上面a已经被定义为了Number类型 + +let b; // 没有赋值 +b = 32; +b = true; +// b为Any类型 +``` + +## 联合类型 + +```ts +let a: Boolean | Number | String = true;// 后面还可以再跟多种类型 + +/* +** 只能访问这些类型的共有方法 +*/ + +a.split('');// 会报错 +a.otString();// 不会报错 +a = 123; // 这里不会报错 +a = false;// 不会报错 +a = '32';// 不报错 +a.split('');// 这里因为赋值了所以不会报错 +``` + +## 接口——对象类型 + +- 对对象的约束,描述对象的形状 +- 定义接口名称开头使用大写的`I` +- 非可选属性不能多也不能少 + +```ts +interface Iperson = { + name: String;// 分号和逗号都可以 + age: Number; +} + +let xiaoming = { + name: '小明', + age: 18 +} +``` + +### 可选属性 + +```ts +interface IPerson{ + name: String; + age: Number; + sex?: String;// sex可以没有 + // 不能有其他的属性 +} +``` + +### 任意属性(不确定时) + +- 一但定义了任意类型,该对象内部必须所有的属性(包括已确定的属性)都为该任意类型的类型子集 +- 一个接口只能定义一个任意属性,如果有多个类型,任意属性可以使用联合类型`[propName: String]: String | Number | Boolean` + +```ts +interface IPerson{ + [propName: String]: String +} + +let xi: IPerson{ + name: "何琋", + age: "32" +} +``` + +```ts +interface IPerson{ + age: Number; + [propName: String]: String;// 这里会让上面报错,Number类型不是String类型的子集,所以一般使用Any类型 +} +``` + +### 只读属性 + +```ts +interface IPerson{ + readonly sex: String; +} +let hexi: IPerson = { + sex : "男" +} +hexi.sex = "女";// 这里会报错,sex为只读属性 +``` + +```ts +// 测试只读任意属性 + +interface IPerson{ + readonly [propName: string]: string +} + +let hexi:IPerson = { + name: "何琋", + sex: "男" +} + +hexi.sex = "女" +``` + +## 接口——数组类型 + +- 不常用 + +```ts +interface IArray{ + [index:Number]: Number;// index: Number 下标是数字的 +} +``` + +## 接口——函数类型 + +```ts +interface ISearchFunc{ + (a: String, b: String): boolean; +} + +const fun1:ISearchFunc = function(a: String, b: String): boolean{ + return a.search(b) !== -1 +} +``` + +## 函数 + +### 函数声明 + +```js +// 函数声明,命名函数 +function fun1(a, b){ + return a + b +} +// 函数表达式,匿名函数 +const fun2 = function(a, b){ + return a + b +} +``` + +```ts +function fun1(a: Number, b: Number): Number{ + return a + b +} + +const fun2 = function(a: Number, b:Number): Number{ + return a + b +} + +const fun3: (a: Number, b:Number) => Number = function(a: Number, b:Number): Number{ + return a + b +} +``` + +### 可选参数和默认参数 + +- 必选参数不能位于可选参数之后 +- 默认参数可以放在可选参数之后 + +```ts +const getName = function(x: String = "何", y?: String): String{ + return x = y; +} + +const geName2 = function(x: String, y?: String, z: String = "早上好"): String{ + return x + y + z +} +``` + +### 剩余参数 + +```ts +const fn = function(a: String, b: String, args: number[]){ + console.log(a, b, args) +} +``` + +### 函数重载 + +- 函数名称相同,参数类型不同 + +```ts +// 函数重载 +// 这里需要先定义 +function add(x: string, y:string): string +function add(x: number, y: number): number + +function add(x: string | number, y: string | number): string | number{ + if(typeof x === 'string' && typeof y === "string"){ + return x + y + }else if(typeof x === 'number' && typeof y === 'number'){ + return x + y + } +} + +console.log(add(1, 2))// 3 +console.log(add('何', '琋'))// 何琋 +``` + +## 断言 + +- 联合类型断言为其中一个类型 + +`变量 as 类型` +`<类型>变量` + +```ts +// 断言 + +function getSome(x: number | string): void{ + if((x as string).length){ + console.log((x).length) + }else{ + console.log(x.toString().length) + } +} + +getSome(32389382) +getSome('何琋大坏蛋') +``` + +- 将任何一个变量断言为any,any可以访问任意属性 + +```ts +(window as any).a = '何琋'// 不进行断言是无法访问的 +``` + +- 将any类型断言为任意具体子类型 + +## 类型别名 + +```ts +type name = string +let a: name = "何琋" +``` + +- 字面量类型 + +```ts +// 类型别名何字面量类型 + +type newName = "何琋" | "何蔺" | "何茗" + +let myName: newName = "何琋" + +console.log(myName) +``` + +## 元组 + +```ts +let arr: number[] = [1, 2, 3, 4] +// 数组合并同一类型 +// 元组Tuple,合并不同类型 +let Tarr: [number, string] = [1, '1'] // 这里不能再添加,也不能换位 +// 添加元素时,需要从生命中的类型取 +Tarr.push('32') +Tarr.push(32) +Tarr.push(true)// 报错 +``` + +## 枚举 + +- Enum + +```ts +// 自动赋值 +enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; +// 事实上被编译为 +var Days; +(function (Days) { + Days[Days["Sun"] = 0] = "Sun"; + Days[Days["Mon"] = 1] = "Mon"; + Days[Days["Tue"] = 2] = "Tue"; + Days[Days["Wed"] = 3] = "Wed"; + Days[Days["Thu"] = 4] = "Thu"; + Days[Days["Fri"] = 5] = "Fri"; + Days[Days["Sat"] = 6] = "Sat"; +})(Days || (Days = {})); + +// 手动赋值 +enum test { + one=1, + two=2, + three=3, + four=4 +} +// 半自动 + +enum test2{ + one=1, + tow,// 2 + three=12, + four,// 13 +} +``` + +- 常数项和计算所得项 + +```ts +enum Color {Red = "red".length, Green, Blue};// 会报错,计算所得项后面不能跟自动赋值 +``` + +- 常数枚举 + - 常数枚举不会被编译,哪里用那里直接赋值 + - 常数枚举不能使用计算所得项 + +```ts +const enum test{ + one, + two, + three +} +``` + +- 外部枚举 + +```ts +declare enum test{ + Up, + Down, + Left, + Right +} +// 可以和const一起使用 +declare const enum test2{ + Up, + Down, + Left, + Right +} +``` + +## 类 + +- 抽象类(Abstract Class):抽象类是供其他类继承的基类,抽象类不允许被实例化。抽象类中的抽象方法必须在子类中被实现 +- 封装(Encapsulation):将对数据的操作细节隐藏起来,只暴露对外的接口。外界调用端不需要(也不可能)知道细节,就能通过对外提供的接口来访问该对象,同时也保证了外界无法任意更改对象内部的数据 +- 继承(Inheritance):子类继承父类,子类除了拥有父类的所有特性外,还有一些更具体的特性 +- 多态(Polymorphism):由继承而产生了相关的不同的类,对同一个方法可以有不同的响应。比如 `Cat` 和 `Dog` 都继承自 `Animal`,但是分别实现了自己的 `eat` 方法。此时针对某一个实例,我们无需了解它是 `Cat` 还是 `Dog`,就可以直接调用 `eat` 方法,程序会自动判断出来应该如何执行 `eat` + +```js +// 属性和方法 +class Animal { + public name; + constructor(name) { + this.name = name; + } + sayHi() { + return `My name is ${this.name}`; + } +} + +let a = new Animal('Jack'); +console.log(a.sayHi()); // My name is Jack +// 类的继承 +class Cat extends Animal { + constructor(name) { + super(name); // 调用父类的 constructor(name) + console.log(this.name); + } + sayHi() { + return 'Meow, ' + super.sayHi(); // 调用父类的 sayHi() + } +} + +let c = new Cat('Tom'); // Tom +console.log(c.sayHi()); // Meow, My name is Tom +``` + +- 存取器 + +```js +class Animal { + constructor(name) { + this.name = name; + } + get name() { + return 'Jack'; + } + set name(value) { + console.log('setter: ' + value); + } +} + +let a = new Animal('Kitty'); // setter: Kitty +a.name = 'Tom'; // setter: Tom +console.log(a.name); // Jack +``` + +- 静态方法和属性 + +```js +class Animal { + static name = 42; + static isAnimal(a) { + return a instanceof Animal; + } +} + +let a = new Animal('Jack'); +Animal.isAnimal(a); // true +a.isAnimal(a); // TypeError: a.isAnimal is not a function +``` + +### TypeScript 中类的用法 + +- `public` 修饰的属性或方法是公有的,可以在任何地方被访问到,默认所有的属性和方法都是 `public` 的 +- `private` 修饰的属性或方法是私有的,不能在声明它的类的外部访问 +- `protected` 修饰的属性或方法是受保护的,它和 `private` 类似,区别是它在子类中也是允许被访问的 + +```ts +class Animal { + public name; + public constructor(name) { + this.name = name; + } +} + +let a = new Animal('Jack'); +console.log(a.name); // Jack +a.name = 'Tom'; +console.log(a.name); // Tom +``` + +```ts +class Animal { + private name; + public constructor(name) { + this.name = name; + } +} + +let a = new Animal('Jack'); +console.log(a.name); +a.name = 'Tom'; + +// index.ts(9,13): error TS2341: Property 'name' is private and only accessible within class 'Animal'. +// index.ts(10,1): error TS2341: Property 'name' is private and only accessible within class 'Animal'. +``` + +```ts +class Animal { + protected name; + public constructor(name) { + this.name = name; + } +} + +class Cat extends Animal { + constructor(name) { + super(name); + console.log(this.name); + } +} +``` + +当构造函数修饰为 `private` 时,该类不允许被继承或者实例化 + +```ts +class Animal { + public name; + private constructor(name) { + this.name = name; + } +} +class Cat extends Animal { + constructor(name) { + super(name); + } +} + +let a = new Animal('Jack'); + +// index.ts(7,19): TS2675: Cannot extend a class 'Animal'. Class constructor is marked as private. +// index.ts(13,9): TS2673: Constructor of class 'Animal' is private and only accessible within the class declaration. +``` + +当构造函数修饰为 `protected` 时,该类只允许被继承: + +```ts +class Animal { + public name; + protected constructor(name) { + this.name = name; + } +} +class Cat extends Animal { + constructor(name) { + super(name); + } +} + +let a = new Animal('Jack'); + +// index.ts(13,9): TS2674: Constructor of class 'Animal' is protected and only accessible within the class declaration. +``` + +### readonly + +只读属性关键字,只允许出现在属性声明或索引签名或构造函数中。 + +```ts +class Animal { + readonly name; + public constructor(name) { + this.name = name; + } +} + +let a = new Animal('Jack'); +console.log(a.name); // Jack +a.name = 'Tom'; + +// index.ts(10,3): TS2540: Cannot assign to 'name' because it is a read-only property. +``` + +注意如果 `readonly` 和其他访问修饰符同时存在的话,需要写在其后面。 + +```ts +class Animal { + // public readonly name; + public constructor(public readonly name) { + // this.name = name; + } +} +``` + +### 抽象类 + +`abstract` 用于定义抽象类和其中的抽象方法。 +首先,抽象类是不允许被实例化的: +其次,抽象类中的抽象方法必须被子类实现: + +```ts +abstract class Animal { + public name; + public constructor(name) { + this.name = name; + } + public abstract sayHi(); +} + +class Cat extends Animal { + public sayHi() { + console.log(`Meow, My name is ${this.name}`); + } +} + +let cat = new Cat('Tom'); +``` + +- 类的类型 + +给类加上 TypeScript 的类型很简单,与接口类似: + +```ts +class Animal { + name: string; + constructor(name: string) { + this.name = name; + } + sayHi(): string { + return `My name is ${this.name}`; + } +} + +let a: Animal = new Animal('Jack'); +console.log(a.sayHi()); // My name is Jack +``` + +## 类与接口 + +```ts +interface Alarm { + alert(): void; +} +``` + +## 泛型 + +```ts +unction createArray(length: number, value: T): Array { + let result: T[] = []; + for (let i = 0; i < length; i++) { + result[i] = value; + } + return result; +} + +createArray(3, 'x'); // ['x', 'x', 'x'] +``` + +- 多参数 + +```ts +function swap(tuple: [T, U]): [U, T] { + return [tuple[1], tuple[0]]; +} + +swap([7, 'seven']); // ['seven', 7] +``` + +- 泛型约束 + +```ts +interface Lengthwise { + length: number; +} +// 只允许这个函数传入那些包含 `length` 属性的变量 +function loggingIdentity(arg: T): T { + console.log(arg.length); + return arg; +} +``` + +- 泛型接口 + +```ts +interface CreateArrayFunc { + (length: number, value: T): Array; +} + +let createArray: CreateArrayFunc; +createArray = function(length: number, value: T): Array { + let result: T[] = []; + for (let i = 0; i < length; i++) { + result[i] = value; + } + return result; +} + +createArray(3, 'x'); // ['x', 'x', 'x'] +``` + +- 泛型类 + +```ts +class GenericNumber { + zeroValue: T; + add: (x: T, y: T) => T; +} + +let myGenericNumber = new GenericNumber(); +myGenericNumber.zeroValue = 0; +myGenericNumber.add = function(x, y) { return x + y; }; +``` \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/001.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/001.js new file mode 100644 index 0000000..ae43e42 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/001.js @@ -0,0 +1,6 @@ +// 测试只读任意属性 +var hexi = { + name: "何琋", + sex: "男" +}; +hexi.sex = "女"; diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/001.ts b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/001.ts new file mode 100644 index 0000000..b348a01 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/001.ts @@ -0,0 +1,12 @@ +// 测试只读任意属性 + +interface IPerson{ + readonly [propName: string]: string +} + +let hexi:IPerson = { + name: "何琋", + sex: "男" +} + +// hexi.sex = "女" \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/002.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/002.js new file mode 100644 index 0000000..5a25499 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/002.js @@ -0,0 +1,11 @@ +// 函数重载 +function add(x, y) { + if (typeof x === 'string' && typeof y === "string") { + return x + y; + } + else if (typeof x === 'number' && typeof y === 'number') { + return x + y; + } +} +console.log(add(1, 2)); // 3 +console.log(add('何', '琋')); // 何琋 diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/002.ts b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/002.ts new file mode 100644 index 0000000..9acc41d --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/002.ts @@ -0,0 +1,15 @@ +// 函数重载 + +function add(x: string, y:string): string +function add(x: number, y: number): number + +function add(x: string | number, y: string | number): string | number{ + if(typeof x === 'string' && typeof y === "string"){ + return x + y + }else if(typeof x === 'number' && typeof y === 'number'){ + return x + y + } +} + +console.log(add(1, 2))// 3 +console.log(add('何', '琋'))// 何琋 \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/003.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/003.js new file mode 100644 index 0000000..c84fbc7 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/003.js @@ -0,0 +1,17 @@ +// 断言 +function getSome(x) { + if (x.length) { + console.log(x.length); + } + else { + console.log(x.toString().length); + } +} +getSome(32389382); +getSome('何琋大坏蛋'); +function fn(x, y) { + return x + y; +} +var a = fn(1, 2); +var b = fn('何', '琋'); +console.log(a, b); diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/003.ts b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/003.ts new file mode 100644 index 0000000..a003fd4 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/003.ts @@ -0,0 +1,21 @@ +// 断言 + +function getSome(x: number | string): void{ + if((x as string).length){ + console.log((x).length) + }else{ + console.log(x.toString().length) + } +} + +getSome(32389382) +getSome('何琋大坏蛋') + +function fn(x: any, y:any): any{ + return x + y +} + +let aas: number = fn(1, 2) as number; +let ba: string = fn('何', '琋') as string + +console.log(aas, ba) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/004.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/004.js new file mode 100644 index 0000000..188f384 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/004.js @@ -0,0 +1,3 @@ +// 类型别名何字面量类型 +var myName = "何琋"; +console.log(myName); diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/004.ts b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/004.ts new file mode 100644 index 0000000..563758f --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/004.ts @@ -0,0 +1,7 @@ +// 类型别名何字面量类型 + +type newName = "何琋" | "何蔺" | "何茗" + +let myName: newName = "何琋" + +console.log(myName) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/005.js b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/005.js new file mode 100644 index 0000000..c38d68d --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/005.js @@ -0,0 +1,3 @@ +var a = ['1', 32]; +a.push('43'); +console.log(a); diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/005.ts b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/005.ts new file mode 100644 index 0000000..19575e3 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/005.ts @@ -0,0 +1,3 @@ +let a: [string, number] = ['1', 32] // 这里不能再添加,也不能换位 +a.push('43') +console.log(a) \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/helloworld.ts b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/helloworld.ts new file mode 100644 index 0000000..8699fa4 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/helloworld.ts @@ -0,0 +1,119 @@ +function sayHello(str:string){ + console.log('Hello',str) +} + +sayHello('World') +// 以上为为开始 + +console.log("基础类型"); +// 布尔值 +let a:boolean = false; +// 数字 +let b:number = 32; +// 字符串 +let c:string = "何琋"; +// 数组 +let d:number[] = [12, 13]; +// 元组Tuple +let e:[string, number] = ['age', 12];// 位置不能反 +// 枚举 +enum Color {Pink, Red, Blue};// 默认值为0开始 +let f:Color = Color.Blue +enum Age {small = 32, big = 99}; +let g:Age = Age.big; +// 任意值 +let suiji: any = 32; +let suiji2: any[] = [a, b, c, d] + +// 空值 +function fun1(): void{ + console.log('没有返回值的函数') +} +// 空值只能赋予undefined和null + +// undefined和null +// 默认情况下 undefined和null为所有类型的值 + +//never +//never类型表示的是那些永不存在的值的类型。 例如,never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是never类型,当它们被永不为真的类型保护所约束时 +// 返回never的函数必须存在无法达到的终点 +function error(message: string): never { + throw new Error(message); +} + +// 推断的返回值类型为never +function fail() { + return error("Something failed"); +} + +// 返回never的函数必须存在无法达到的终点 +function infiniteLoop(): never { + while (true) { + } +} + +// 类型断言 +// 1。尖括号 +let someValue: any = "this is a string"; + +let strLength: number = (someValue).length; +// 2。as JSX只能使用as +let someValue2: any = "this is a string"; + +let strLength2: number = (someValue as string).length; + +// 对象解构赋值 +let o = { + aa: "foo", + bb: 12, + cc: "bar" +}; +// 属性重命名 +let { aa: newName1, bb: newName2 } = o; +// 加入ts +let {aa, bb}: {aa: string, bb: number} = o; +// 默认值 +function keepWholeObject(wholeObject: { a: string, b?: number }) { + let { a, b = 1001 } = wholeObject; +} +// 函数声明 +type C = { a: string, b?: number } +function fun2({ a, b }: C): void { + // ... +} + + +// 接口 +function printLabel(labelledObj: { label: string }) { + console.log(labelledObj.label); +} + +let myObj = { size: 10, label: "Size 10 Object" }; +printLabel(myObj); + +// 接口实现上面的内容 +interface LabelledValue { + label: string; + size?: number;// 可选属性 +} + +function printLabel2(labelledObj: LabelledValue) { + console.log(labelledObj.label); +} + +let myObj2 = {size: 10, label: "Size 10 Object"}; +printLabel(myObj2); + +// 只读属性 +interface Point { + readonly x: number; + readonly y: number; +} + +// 函数类型 +interface SearchFunc { + (source: string, subString: string): boolean; +} +function fun3(source:string, subString: string){ + return +} \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/tsconfig.json b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/tsconfig.json new file mode 100644 index 0000000..b73f9db --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/TypeScript/src/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es5", + "sourceMap": true + }, + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/CSS/0.0.01文字穿透.html b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/CSS/0.0.01文字穿透.html new file mode 100644 index 0000000..db0e7bb --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/CSS/0.0.01文字穿透.html @@ -0,0 +1,47 @@ + + + + + 文字穿透 + + + +
Hello World!
+
Hello World!
+ + \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/CSS/bg.jpg b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/CSS/bg.jpg new file mode 100644 index 0000000..f168bf9 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/CSS/bg.jpg differ diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/CSS/test.html b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/CSS/test.html new file mode 100644 index 0000000..06f7ee8 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/CSS/test.html @@ -0,0 +1,84 @@ + + + + + Title + + + +
+
Hello World!
+
+
Hello World!
+ +
+ + \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/CSS/test2.html b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/CSS/test2.html new file mode 100644 index 0000000..a768467 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/CSS/test2.html @@ -0,0 +1,54 @@ + + + + + Title + + + +
+
Hello World!
+
+ + \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/HTML/尚学堂.md b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/HTML/尚学堂.md new file mode 100644 index 0000000..27d60bb --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/HTML/尚学堂.md @@ -0,0 +1,2149 @@ +# HTML5+CSS3 + +## 前序:我的发现 + +### 1 蒙版文字 + +```css +/* 让文字显示背景的颜色*/ +*{ + background-image: -webkit-gradient(linear,0 0,0 bottom, from(#e9f8ea), to(#88d78d)); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +``` + + + +## 章节一 webstorm安装与设置 + + + +优点:自动补全 + +## 章节二 HTML基础元素 + +### 1 标题标签`

` + +作用:设置标题 + +```html +

一号标题

+

二号标题

+

三号标题

+

四号标题

+
五号标题
+
六号标题
+``` + +### 2 段落标记`

` + +```html +

这是一个段落

+

这是一个段落

+

这是一个段落

+``` + +### 3 强制换行`

` + +```html +
+ + + +``` + +### 4 分割线`
` + +```html + +

这是第一个段落

+
+
+

这是第二个段落

+ +``` + +### 5 图片`` + +```html + + + + + + + + + + + + + + + + + + +蜡笔小新 +``` + +### 6 超链接`` + +```html + +百度一下 + +跳转到06 + +跳转到图片 + + + + +
+ + +点击我 + +跳转到我 + +跳转到06的某个位置 +点击我 + + + +返回页面顶部 +``` + +### 7 文本格式化标签 + +```html + +加粗 +倾斜 +下划线 + +删除线 +删除线 + +强调,倾斜显示 +强调,加粗显示 + +上标 +下标 +23 +O2 + +小号字体 +大号字体 +``` + +### 8 无序列表`
    ` + +```html + +``` + +### 9 有序列表`
      ` + +```html + +``` + +### 10 自定义列表`
      ` + +
      +
      项目
      +
      项目的注释
      +
      项目的注释
      +
      项目的注释
      +
      + +
      +
      帮助中心
      +
      账户管理
      +
      账户管理
      +
      账户管理
      +
      + +
      +
      服务支持
      +
      账户管理
      +
      账户管理
      +
      账户管理
      +
      账户管理
      +
      + + + +```html +
      +
      项目
      +
      项目的注释
      +
      项目的注释
      +
      项目的注释
      +
      + +
      +
      帮助中心
      +
      账户管理
      +
      账户管理
      +
      账户管理
      +
      + +
      +
      服务支持
      +
      账户管理
      +
      账户管理
      +
      账户管理
      +
      账户管理
      +
      + + +``` + +### 11 表格 + +#### 表格创建 + +```html + + + + + + + + + + + + + + + + + + + + + +
      表格的标题
      三行两列的表格三行两列的表格
      三行两列的表格三行两列的表格三行两列的表格三行两列的表格
      三行两列的表格三行两列的表格
      +``` + + + + + + + + + + + + + + + + + + + + + +
      表格的标题
      三行两列的表格三行两列的表格
      三行两列的表格三行两列的表格三行两列的表格三行两列的表格
      三行两列的表格三行两列的表格
      + +#### table属性 + +```html + +``` + + + +#### tr属性 + +```html + +``` + + + +#### td属性 + +```html + +``` + +## 章节三 表单 + +### 1 form + +```html + + +
      + +
      +``` + +### 2 表单元素 + +```html + +
      + 用户名: +
      + 密码: +
      + 性别: + 男 + 女 + 人妖 +
      + 爱好: + 唱 + 跳 + rap +
      + + + + + + +
      + + + +
      +

      + 性别: + + + + +

      +

      + 爱好: + + + + + + + + +

      +

      + 下拉列表: + + +

      +

      + 多行文本框: + +

      +

      + 文件: + +

      +

      + 图片提价按钮: + +

      +

      + 隐藏域: + +

      +
      +``` + +### 3 表单元素常用属性 + +```html + +
      +

      + 姓名: +

      +

      + 密码: +

      +

      + 性别: + + + + +

      +

      + 爱好: + + + + + + +

      +

      + 城市: + +

      +

      + + +

      + +
      +``` + +### 4 H5新增type类型 + +```html + +
      +

      邮箱:

      +

      网址:

      +

      搜索:

      +

      电话:

      +

      颜色:

      +

      数字:

      +

      范围:

      +

      日期:

      +

      月:

      +

      周:

      +

      + +
      +``` + +### 5 H5新增表单元素属性 + +```html + +
      +

      + 姓名: +

      +

      + 密码: +

      +

      + 邮箱: +

      +

      + +

      +
      +``` + +### 6 行内元素与块级元素 + +```html + +

      一号标题

      +

      这是一个段落

      + +加粗 +超链接 +``` + +## 章节四 H5新增元素与CSS初识 + +### 1 div和span + +```html + +``` + +### 2 H5新增语义化布局标签 + +```html5 + +``` + +### 3 视频和音频 + +```html + +``` + +### 4 CSS与引入方式 + +```html + + + + + + + +``` + +## 章节五 CSS常用属性 + +### 1 字体的属性 + +```html + + +``` + +### 2 背景属性 + +```html + +``` + +### 3 文本属性 + +```html + +``` + +### 4 列表属性 + +```html + +``` + +### 5 表格属性 + +```html + +``` + +### 6 overflow:hidden + +```html + +``` + +### 7 行高间距 + +```html + +``` + +### AAAAAAAAA8 选择器 + +```html + +``` + +## 章节六 盒模型 + +```css +box-sizing: content-box|border-box|inherit; +/* + content-box标准盒模型,宽高定义内容大小 + border-box怪异盒模型ie,宽高定义边框以内 + inherit继承父元素 +*/ +``` + +```html + +``` + +### 厂商前缀 + +```html + +``` + +## 章节七 浮动和定位 + +### 1 浮动和清除 + +```html + +``` + +### 2 display + +```html + +``` + +### 3 position + +```html + +``` + +## 章节八 C3新特性 + +### 1 圆角`border-radius` + +```html + +``` + +### 2 阴影`box-shadow` + +```html + +``` + +### 3 背景渐变`background-image:-o-linear-gradient(,,)` + + + +AAAAAAAAAAAAAA 上面的元素需要加position 不然会被覆盖 + +```html + +``` + +### 4 位移与旋转transform + +```html + +``` + +### 5 过渡`transition` + +```html + +``` + +### 6 动画`animation` + +```html + +``` + + + +## 章节九 响应式布局 + +### 1 媒体查询 + +768px-992px + +```html + +``` + +## 2 响应式 + +```html + +``` + +### 3 多列(报纸效果) + +```html + +``` + + + +## 章节十 雪碧图 + +### 雪碧图 + +```html + +``` + diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/.gitignore b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/index.html b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/index.html new file mode 100644 index 0000000..25e8fad --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + + +
      + + + diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/package.json b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/package.json new file mode 100644 index 0000000..eddc3d6 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/package.json @@ -0,0 +1,22 @@ +{ + "name": "demo-mobx", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "mobx": "^6.6.2", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.0.17", + "@types/react-dom": "^18.0.6", + "@vitejs/plugin-react": "^2.1.0", + "vite": "^3.1.0" + } +} \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/pnpm-lock.yaml b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/pnpm-lock.yaml new file mode 100644 index 0000000..eefce42 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/pnpm-lock.yaml @@ -0,0 +1,889 @@ +lockfileVersion: 5.4 + +specifiers: + '@types/react': ^18.0.17 + '@types/react-dom': ^18.0.6 + '@vitejs/plugin-react': ^2.1.0 + mobx: ^6.6.2 + react: ^18.2.0 + react-dom: ^18.2.0 + vite: ^3.1.0 + +dependencies: + mobx: 6.6.2 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + +devDependencies: + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + '@vitejs/plugin-react': 2.1.0_vite@3.1.8 + vite: 3.1.8 + +packages: + + /@ampproject/remapping/2.2.0: + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.17 + dev: true + + /@babel/code-frame/7.18.6: + resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.18.6 + dev: true + + /@babel/compat-data/7.19.4: + resolution: {integrity: sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core/7.19.3: + resolution: {integrity: sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.19.5 + '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.19.3 + '@babel/helper-module-transforms': 7.19.0 + '@babel/helpers': 7.19.4 + '@babel/parser': 7.19.4 + '@babel/template': 7.18.10 + '@babel/traverse': 7.19.4 + '@babel/types': 7.19.4 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator/7.19.5: + resolution: {integrity: sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + '@jridgewell/gen-mapping': 0.3.2 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure/7.18.6: + resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-compilation-targets/7.19.3_@babel+core@7.19.3: + resolution: {integrity: sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.19.4 + '@babel/core': 7.19.3 + '@babel/helper-validator-option': 7.18.6 + browserslist: 4.21.4 + semver: 6.3.0 + dev: true + + /@babel/helper-environment-visitor/7.18.9: + resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name/7.19.0: + resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.18.10 + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-hoist-variables/7.18.6: + resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-module-imports/7.18.6: + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-module-transforms/7.19.0: + resolution: {integrity: sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-simple-access': 7.19.4 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-validator-identifier': 7.19.1 + '@babel/template': 7.18.10 + '@babel/traverse': 7.19.4 + '@babel/types': 7.19.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-plugin-utils/7.19.0: + resolution: {integrity: sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-simple-access/7.19.4: + resolution: {integrity: sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-split-export-declaration/7.18.6: + resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-string-parser/7.19.4: + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier/7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option/7.18.6: + resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers/7.19.4: + resolution: {integrity: sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.18.10 + '@babel/traverse': 7.19.4 + '@babel/types': 7.19.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight/7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.19.1 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser/7.19.4: + resolution: {integrity: sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.3: + resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.19.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.19.3: + resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.19.3 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.19.3 + dev: true + + /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.19.3: + resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.19.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-react-jsx-source/7.18.6_@babel+core@7.19.3: + resolution: {integrity: sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.19.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.19.3: + resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.19.3 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.19.3 + '@babel/types': 7.19.4 + dev: true + + /@babel/template/7.18.10: + resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/parser': 7.19.4 + '@babel/types': 7.19.4 + dev: true + + /@babel/traverse/7.19.4: + resolution: {integrity: sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.19.5 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.19.4 + '@babel/types': 7.19.4 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types/7.19.4: + resolution: {integrity: sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.19.4 + '@babel/helper-validator-identifier': 7.19.1 + to-fast-properties: 2.0.0 + dev: true + + /@esbuild/android-arm/0.15.11: + resolution: {integrity: sha512-PzMcQLazLBkwDEkrNPi9AbjFt6+3I7HKbiYF2XtWQ7wItrHvEOeO3T8Am434zAozWtVP7lrTue1bEfc2nYWeCA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.11: + resolution: {integrity: sha512-geWp637tUhNmhL3Xgy4Bj703yXB9dqiLJe05lCUfjSFDrQf9C/8pArusyPUbUbPwlC/EAUjBw32sxuIl/11dZw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@jridgewell/gen-mapping/0.1.1: + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@jridgewell/gen-mapping/0.3.2: + resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/trace-mapping': 0.3.17 + dev: true + + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array/1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec/1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true + + /@jridgewell/trace-mapping/0.3.17: + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@types/prop-types/15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + dev: true + + /@types/react-dom/18.0.6: + resolution: {integrity: sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==} + dependencies: + '@types/react': 18.0.21 + dev: true + + /@types/react/18.0.21: + resolution: {integrity: sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.1 + dev: true + + /@types/scheduler/0.16.2: + resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} + dev: true + + /@vitejs/plugin-react/2.1.0_vite@3.1.8: + resolution: {integrity: sha512-am6rPyyU3LzUYne3Gd9oj9c4Rzbq5hQnuGXSMT6Gujq45Il/+bunwq3lrB7wghLkiF45ygMwft37vgJ/NE8IAA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^3.0.0 + dependencies: + '@babel/core': 7.19.3 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.19.3 + '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.19.3 + '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.19.3 + '@babel/plugin-transform-react-jsx-source': 7.18.6_@babel+core@7.19.3 + magic-string: 0.26.7 + react-refresh: 0.14.0 + vite: 3.1.8 + transitivePeerDependencies: + - supports-color + dev: true + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /browserslist/4.21.4: + resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001421 + electron-to-chromium: 1.4.284 + node-releases: 2.0.6 + update-browserslist-db: 1.0.10_browserslist@4.21.4 + dev: true + + /caniuse-lite/1.0.30001421: + resolution: {integrity: sha512-Sw4eLbgUJAEhjLs1Fa+mk45sidp1wRn5y6GtDpHGBaNJ9OCDJaVh2tIaWWUnGfuXfKf1JCBaIarak3FkVAvEeA==} + dev: true + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-name/1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /convert-source-map/1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + + /csstype/3.1.1: + resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} + dev: true + + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /electron-to-chromium/1.4.284: + resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} + dev: true + + /esbuild-android-64/0.15.11: + resolution: {integrity: sha512-rrwoXEiuI1kaw4k475NJpexs8GfJqQUKcD08VR8sKHmuW9RUuTR2VxcupVvHdiGh9ihxL9m3lpqB1kju92Ialw==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.11: + resolution: {integrity: sha512-/hDubOg7BHOhUUsT8KUIU7GfZm5bihqssvqK5PfO4apag7YuObZRZSzViyEKcFn2tPeHx7RKbSBXvAopSHDZJQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.11: + resolution: {integrity: sha512-1DqHD0ms3AhiwkKnjRUzmiW7JnaJJr5FKrPiR7xuyMwnjDqvNWDdMq4rKSD9OC0piFNK6n0LghsglNMe2MwJtA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.11: + resolution: {integrity: sha512-OMzhxSbS0lwwrW40HHjRCeVIJTURdXFA8c3GU30MlHKuPCcvWNUIKVucVBtNpJySXmbkQMDJdJNrXzNDyvoqvQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.11: + resolution: {integrity: sha512-8dKP26r0/Qyez8nTCwpq60QbuYKOeBygdgOAWGCRalunyeqWRoSZj9TQjPDnTTI9joxd3QYw3UhVZTKxO9QdRg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.11: + resolution: {integrity: sha512-aSGiODiukLGGnSg/O9+cGO2QxEacrdCtCawehkWYTt5VX1ni2b9KoxpHCT9h9Y6wGqNHmXFnB47RRJ8BIqZgmQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.11: + resolution: {integrity: sha512-lsrAfdyJBGx+6aHIQmgqUonEzKYeBnyfJPkT6N2dOf1RoXYYV1BkWB6G02tjsrz1d5wZzaTc3cF+TKmuTo/ZwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.11: + resolution: {integrity: sha512-Y2Rh+PcyVhQqXKBTacPCltINN3uIw2xC+dsvLANJ1SpK5NJUtxv8+rqWpjmBgaNWKQT1/uGpMmA9olALy9PLVA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.11: + resolution: {integrity: sha512-TJllTVk5aSyqPFvvcHTvf6Wu1ZKhWpJ/qNmZO8LL/XeB+LXCclm7HQHNEIz6MT7IX8PmlC1BZYrOiw2sXSB95A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.11: + resolution: {integrity: sha512-uhcXiTwTmD4OpxJu3xC5TzAAw6Wzf9O1XGWL448EE9bqGjgV1j+oK3lIHAfsHnuIn8K4nDW8yjX0Sv5S++oRuw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.11: + resolution: {integrity: sha512-WD61y/R1M4BLe4gxXRypoQ0Ci+Vjf714QYzcPNkiYv5I8K8WDz2ZR8Bm6cqKxd6rD+e/rZgPDbhQ9PCf7TMHmA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.11: + resolution: {integrity: sha512-JVleZS9oPVLTlBhPTWgOwxFWU/wMUdlBwTbGA4GF8c38sLbS13cupj+C8bLq929jU7EMWry4SaL+tKGIaTlqKg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.11: + resolution: {integrity: sha512-9aLIalZ2HFHIOZpmVU11sEAS9F8TnHw49daEjcgMpBXHFF57VuT9f9/9LKJhw781Gda0P9jDkuCWJ0tFbErvJw==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.11: + resolution: {integrity: sha512-sZHtiXXOKsLI3XGBGoYO4qKBzJlb8xNsWmvFiwFMHFzA4AXgDP1KDp7Dawe9C2pavTRBDvl+Ok4n/DHQ59oaTg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.11: + resolution: {integrity: sha512-hUC9yN06K9sg7ju4Vgu9ChAPdsEgtcrcLfyNT5IKwKyfpLvKUwCMZSdF+gRD3WpyZelgTQfJ+pDx5XFbXTlB0A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.11: + resolution: {integrity: sha512-0bBo9SQR4t66Wd91LGMAqmWorzO0TTzVjYiifwoFtel8luFeXuPThQnEm5ztN4g0fnvcp7AnUPPzS/Depf17wQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.11: + resolution: {integrity: sha512-EuBdTGlsMTjEl1sQnBX2jfygy7iR6CKfvOzi+gEOfhDqbHXsmY1dcpbVtcwHAg9/2yUZSfMJHMAgf1z8M4yyyw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.11: + resolution: {integrity: sha512-O0/Wo1Wk6dc0rZSxkvGpmTNIycEznHmkObTFz2VHBhjPsO4ZpCgfGxNkCpz4AdAIeMczpTXt/8d5vdJNKEGC+Q==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.11: + resolution: {integrity: sha512-x977Q4HhNjnHx00b4XLAnTtj5vfbdEvkxaQwC1Zh5AN8g5EX+izgZ6e5QgqJgpzyRNJqh4hkgIJF1pyy1be0mQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.11: + resolution: {integrity: sha512-VwUHFACuBahrvntdcMKZteUZ9HaYrBRODoKe4tIWxguQRvvYoYb7iu5LrcRS/FQx8KPZNaa72zuqwVtHeXsITw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild/0.15.11: + resolution: {integrity: sha512-OgHGuhlfZ//mToxjte1D5iiiQgWfJ2GByVMwEC/IuoXsBGkuyK1+KrjYu0laSpnN/L1UmLUCv0s25vObdc1bVg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.15.11 + '@esbuild/linux-loong64': 0.15.11 + esbuild-android-64: 0.15.11 + esbuild-android-arm64: 0.15.11 + esbuild-darwin-64: 0.15.11 + esbuild-darwin-arm64: 0.15.11 + esbuild-freebsd-64: 0.15.11 + esbuild-freebsd-arm64: 0.15.11 + esbuild-linux-32: 0.15.11 + esbuild-linux-64: 0.15.11 + esbuild-linux-arm: 0.15.11 + esbuild-linux-arm64: 0.15.11 + esbuild-linux-mips64le: 0.15.11 + esbuild-linux-ppc64le: 0.15.11 + esbuild-linux-riscv64: 0.15.11 + esbuild-linux-s390x: 0.15.11 + esbuild-netbsd-64: 0.15.11 + esbuild-openbsd-64: 0.15.11 + esbuild-sunos-64: 0.15.11 + esbuild-windows-32: 0.15.11 + esbuild-windows-64: 0.15.11 + esbuild-windows-arm64: 0.15.11 + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /is-core-module/2.10.0: + resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} + dependencies: + has: 1.0.3 + dev: true + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /jsesc/2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json5/2.2.1: + resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /loose-envify/1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /magic-string/0.26.7: + resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} + engines: {node: '>=12'} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /mobx/6.6.2: + resolution: {integrity: sha512-IOpS0bf3+hXIhDIy+CmlNMBfFpAbHS0aVHcNC+xH/TFYEKIIVDKNYRh9eKlXuVfJ1iRKAp0cRVmO145CyJAMVQ==} + dev: false + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /nanoid/3.3.4: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /node-releases/2.0.6: + resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /postcss/8.4.18: + resolution: {integrity: sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /react-dom/18.2.0_react@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react-refresh/0.14.0: + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} + dev: true + + /react/18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /resolve/1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true + dependencies: + is-core-module: 2.10.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /rollup/2.78.1: + resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /scheduler/0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + dev: true + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /update-browserslist-db/1.0.10_browserslist@4.21.4: + resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.4 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /vite/3.1.8: + resolution: {integrity: sha512-m7jJe3nufUbuOfotkntGFupinL/fmuTNuQmiVE7cH2IZMuf4UbfbGYMUT3jVWgGYuRVLY9j8NnrRqgw5rr5QTg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + less: '*' + sass: '*' + stylus: '*' + terser: ^5.4.0 + peerDependenciesMeta: + less: + optional: true + sass: + optional: true + stylus: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.15.11 + postcss: 8.4.18 + resolve: 1.22.1 + rollup: 2.78.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/public/vite.svg b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/assets/index.css b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/assets/index.css new file mode 100644 index 0000000..917888c --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/assets/index.css @@ -0,0 +1,70 @@ +:root { + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 24px; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/assets/react.svg b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/main.jsx b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/main.jsx new file mode 100644 index 0000000..d94e9ee --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/main.jsx @@ -0,0 +1,10 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from '@/pages/App' +import '@/assets/index.css' + +ReactDOM.createRoot(document.getElementById('root')).render( + + + +) diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/pages/App/index.jsx b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/pages/App/index.jsx new file mode 100644 index 0000000..2f15155 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/pages/App/index.jsx @@ -0,0 +1,23 @@ + +import {userStore } from '@/store' +import {autorun} from 'mobx' +import {useEffect} from 'react' +export default function App(){ + useEffect(() => { + const a = autorun(() => { + console.log(userStore.name) + console.log(userStore.sex) + }) + setTimeout(() => { + userStore.setName('荷西') + }) + return () => { + console.log('卸载') + a() + } + },[0]) + + return( +
      APP
      + ) +} \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/store/index.js b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/store/index.js new file mode 100644 index 0000000..921e9ac --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/store/index.js @@ -0,0 +1,4 @@ +import UserStore from './userStore.js' + + +export const userStore = new UserStore() \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/store/userStore.js b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/store/userStore.js new file mode 100644 index 0000000..f21e4c9 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/src/store/userStore.js @@ -0,0 +1,41 @@ +import { observable, action, computed, makeObservable} from "mobx"; + + +class UserStore { + name = 'kangkang000'; + sex = '男'; + userObj = { + name: 'kangkang000', + age: 23, + token: '12345689' + } + + constructor() { + // mobx6 和以前版本这是最大的区别 + makeObservable(this, { + name: observable, + sex: observable, + userObj: observable, + setName: action, + titleName: computed + }); + + } + + setName(v) { + console.log('触发action'); + this.name = v; + } + setUserObj(obj) { + this.userObj = obj; + } + + get titleName(){ + return this.name+'___111'; + } + get userObject() { + return this.userObj; + } +} + +export default UserStore \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/vite.config.js b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/vite.config.js new file mode 100644 index 0000000..b24dc8d --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Mobx/demo-mobx/vite.config.js @@ -0,0 +1,13 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import path from 'path' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + } + }, +}) diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/React-Router-Dom 6.md b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/React-Router-Dom 6.md new file mode 100644 index 0000000..6dbf335 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/React-Router-Dom 6.md @@ -0,0 +1,120 @@ +# React-Router-Dom 6 + +* 安装 + +```bash +npm i react-router-dom@6 +``` + +* 导入 + +```jsx +import ReactDOM from "react-dom/client"; +import { BrowserRouter } from "react-router-dom"; +import App from "./App"; + +const root = ReactDOM.createRoot( + document.getElementById("root") +); +root.render( + + + +); +``` + +* 简单链接 + +```jsx +import { Link } from "react-router-dom"; + +export default function App() { + return ( +
      +

      Bookkeeper

      + +
      + ); +} +``` + +Link正在更改URL而不会导致整个页面重新加载。 + +* 链接点 + +```jsx +import ReactDOM from "react-dom/client"; +import { + BrowserRouter, + Routes, + Route, +} from "react-router-dom"; +import App from "./App"; +import Expenses from "./routes/expenses"; +import Invoices from "./routes/invoices"; + +const root = ReactDOM.createRoot( + document.getElementById("root") +); +root.render( + + + } /> + } /> + } /> + + +); +``` + +* 嵌套路由 + +```jsx +root.render( + + + }> + } /> + } /> + + + +); +``` + +* 找不到的页面 + +```jsx + + }> + } /> + } /> + +

      There's nothing here!

      + + } + /> +
      +
      +``` + +* 传参 + +``` + + +let params = useParams(); +let invoice = getInvoice(parseInt(params.invoiceId, 10)); +``` + diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/React.dirname b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/React.dirname new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/React深入学习.md b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/React深入学习.md new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/.gitignore b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/index.html b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/index.html new file mode 100644 index 0000000..79c4701 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + + +
      + + + diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/package.json b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/package.json new file mode 100644 index 0000000..d5080f7 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/package.json @@ -0,0 +1,22 @@ +{ + "name": "demo-redux", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "start": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.0.17", + "@types/react-dom": "^18.0.6", + "@vitejs/plugin-react": "^2.1.0", + "vite": "^3.1.0" + } +} \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/pnpm-lock.yaml b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/pnpm-lock.yaml new file mode 100644 index 0000000..8d78dac --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/pnpm-lock.yaml @@ -0,0 +1,883 @@ +lockfileVersion: 5.4 + +specifiers: + '@types/react': ^18.0.17 + '@types/react-dom': ^18.0.6 + '@vitejs/plugin-react': ^2.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + vite: ^3.1.0 + +dependencies: + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + +devDependencies: + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + '@vitejs/plugin-react': 2.1.0_vite@3.1.8 + vite: 3.1.8 + +packages: + + /@ampproject/remapping/2.2.0: + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.17 + dev: true + + /@babel/code-frame/7.18.6: + resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.18.6 + dev: true + + /@babel/compat-data/7.19.4: + resolution: {integrity: sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core/7.19.3: + resolution: {integrity: sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.19.5 + '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.19.3 + '@babel/helper-module-transforms': 7.19.0 + '@babel/helpers': 7.19.4 + '@babel/parser': 7.19.4 + '@babel/template': 7.18.10 + '@babel/traverse': 7.19.4 + '@babel/types': 7.19.4 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator/7.19.5: + resolution: {integrity: sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + '@jridgewell/gen-mapping': 0.3.2 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure/7.18.6: + resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-compilation-targets/7.19.3_@babel+core@7.19.3: + resolution: {integrity: sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.19.4 + '@babel/core': 7.19.3 + '@babel/helper-validator-option': 7.18.6 + browserslist: 4.21.4 + semver: 6.3.0 + dev: true + + /@babel/helper-environment-visitor/7.18.9: + resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name/7.19.0: + resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.18.10 + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-hoist-variables/7.18.6: + resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-module-imports/7.18.6: + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-module-transforms/7.19.0: + resolution: {integrity: sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-simple-access': 7.19.4 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-validator-identifier': 7.19.1 + '@babel/template': 7.18.10 + '@babel/traverse': 7.19.4 + '@babel/types': 7.19.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-plugin-utils/7.19.0: + resolution: {integrity: sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-simple-access/7.19.4: + resolution: {integrity: sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-split-export-declaration/7.18.6: + resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-string-parser/7.19.4: + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier/7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option/7.18.6: + resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers/7.19.4: + resolution: {integrity: sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.18.10 + '@babel/traverse': 7.19.4 + '@babel/types': 7.19.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight/7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.19.1 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser/7.19.4: + resolution: {integrity: sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.3: + resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.19.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.19.3: + resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.19.3 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.19.3 + dev: true + + /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.19.3: + resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.19.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-react-jsx-source/7.18.6_@babel+core@7.19.3: + resolution: {integrity: sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.19.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.19.3: + resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.19.3 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.19.3 + '@babel/types': 7.19.4 + dev: true + + /@babel/template/7.18.10: + resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/parser': 7.19.4 + '@babel/types': 7.19.4 + dev: true + + /@babel/traverse/7.19.4: + resolution: {integrity: sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.19.5 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.19.4 + '@babel/types': 7.19.4 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types/7.19.4: + resolution: {integrity: sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.19.4 + '@babel/helper-validator-identifier': 7.19.1 + to-fast-properties: 2.0.0 + dev: true + + /@esbuild/android-arm/0.15.11: + resolution: {integrity: sha512-PzMcQLazLBkwDEkrNPi9AbjFt6+3I7HKbiYF2XtWQ7wItrHvEOeO3T8Am434zAozWtVP7lrTue1bEfc2nYWeCA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.11: + resolution: {integrity: sha512-geWp637tUhNmhL3Xgy4Bj703yXB9dqiLJe05lCUfjSFDrQf9C/8pArusyPUbUbPwlC/EAUjBw32sxuIl/11dZw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@jridgewell/gen-mapping/0.1.1: + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@jridgewell/gen-mapping/0.3.2: + resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/trace-mapping': 0.3.17 + dev: true + + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array/1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec/1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true + + /@jridgewell/trace-mapping/0.3.17: + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@types/prop-types/15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + dev: true + + /@types/react-dom/18.0.6: + resolution: {integrity: sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==} + dependencies: + '@types/react': 18.0.21 + dev: true + + /@types/react/18.0.21: + resolution: {integrity: sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.1 + dev: true + + /@types/scheduler/0.16.2: + resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} + dev: true + + /@vitejs/plugin-react/2.1.0_vite@3.1.8: + resolution: {integrity: sha512-am6rPyyU3LzUYne3Gd9oj9c4Rzbq5hQnuGXSMT6Gujq45Il/+bunwq3lrB7wghLkiF45ygMwft37vgJ/NE8IAA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^3.0.0 + dependencies: + '@babel/core': 7.19.3 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.19.3 + '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.19.3 + '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.19.3 + '@babel/plugin-transform-react-jsx-source': 7.18.6_@babel+core@7.19.3 + magic-string: 0.26.7 + react-refresh: 0.14.0 + vite: 3.1.8 + transitivePeerDependencies: + - supports-color + dev: true + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /browserslist/4.21.4: + resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001421 + electron-to-chromium: 1.4.284 + node-releases: 2.0.6 + update-browserslist-db: 1.0.10_browserslist@4.21.4 + dev: true + + /caniuse-lite/1.0.30001421: + resolution: {integrity: sha512-Sw4eLbgUJAEhjLs1Fa+mk45sidp1wRn5y6GtDpHGBaNJ9OCDJaVh2tIaWWUnGfuXfKf1JCBaIarak3FkVAvEeA==} + dev: true + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-name/1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /convert-source-map/1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + + /csstype/3.1.1: + resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} + dev: true + + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /electron-to-chromium/1.4.284: + resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} + dev: true + + /esbuild-android-64/0.15.11: + resolution: {integrity: sha512-rrwoXEiuI1kaw4k475NJpexs8GfJqQUKcD08VR8sKHmuW9RUuTR2VxcupVvHdiGh9ihxL9m3lpqB1kju92Ialw==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.11: + resolution: {integrity: sha512-/hDubOg7BHOhUUsT8KUIU7GfZm5bihqssvqK5PfO4apag7YuObZRZSzViyEKcFn2tPeHx7RKbSBXvAopSHDZJQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.11: + resolution: {integrity: sha512-1DqHD0ms3AhiwkKnjRUzmiW7JnaJJr5FKrPiR7xuyMwnjDqvNWDdMq4rKSD9OC0piFNK6n0LghsglNMe2MwJtA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.11: + resolution: {integrity: sha512-OMzhxSbS0lwwrW40HHjRCeVIJTURdXFA8c3GU30MlHKuPCcvWNUIKVucVBtNpJySXmbkQMDJdJNrXzNDyvoqvQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.11: + resolution: {integrity: sha512-8dKP26r0/Qyez8nTCwpq60QbuYKOeBygdgOAWGCRalunyeqWRoSZj9TQjPDnTTI9joxd3QYw3UhVZTKxO9QdRg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.11: + resolution: {integrity: sha512-aSGiODiukLGGnSg/O9+cGO2QxEacrdCtCawehkWYTt5VX1ni2b9KoxpHCT9h9Y6wGqNHmXFnB47RRJ8BIqZgmQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.11: + resolution: {integrity: sha512-lsrAfdyJBGx+6aHIQmgqUonEzKYeBnyfJPkT6N2dOf1RoXYYV1BkWB6G02tjsrz1d5wZzaTc3cF+TKmuTo/ZwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.11: + resolution: {integrity: sha512-Y2Rh+PcyVhQqXKBTacPCltINN3uIw2xC+dsvLANJ1SpK5NJUtxv8+rqWpjmBgaNWKQT1/uGpMmA9olALy9PLVA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.11: + resolution: {integrity: sha512-TJllTVk5aSyqPFvvcHTvf6Wu1ZKhWpJ/qNmZO8LL/XeB+LXCclm7HQHNEIz6MT7IX8PmlC1BZYrOiw2sXSB95A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.11: + resolution: {integrity: sha512-uhcXiTwTmD4OpxJu3xC5TzAAw6Wzf9O1XGWL448EE9bqGjgV1j+oK3lIHAfsHnuIn8K4nDW8yjX0Sv5S++oRuw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.11: + resolution: {integrity: sha512-WD61y/R1M4BLe4gxXRypoQ0Ci+Vjf714QYzcPNkiYv5I8K8WDz2ZR8Bm6cqKxd6rD+e/rZgPDbhQ9PCf7TMHmA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.11: + resolution: {integrity: sha512-JVleZS9oPVLTlBhPTWgOwxFWU/wMUdlBwTbGA4GF8c38sLbS13cupj+C8bLq929jU7EMWry4SaL+tKGIaTlqKg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.11: + resolution: {integrity: sha512-9aLIalZ2HFHIOZpmVU11sEAS9F8TnHw49daEjcgMpBXHFF57VuT9f9/9LKJhw781Gda0P9jDkuCWJ0tFbErvJw==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.11: + resolution: {integrity: sha512-sZHtiXXOKsLI3XGBGoYO4qKBzJlb8xNsWmvFiwFMHFzA4AXgDP1KDp7Dawe9C2pavTRBDvl+Ok4n/DHQ59oaTg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.11: + resolution: {integrity: sha512-hUC9yN06K9sg7ju4Vgu9ChAPdsEgtcrcLfyNT5IKwKyfpLvKUwCMZSdF+gRD3WpyZelgTQfJ+pDx5XFbXTlB0A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.11: + resolution: {integrity: sha512-0bBo9SQR4t66Wd91LGMAqmWorzO0TTzVjYiifwoFtel8luFeXuPThQnEm5ztN4g0fnvcp7AnUPPzS/Depf17wQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.11: + resolution: {integrity: sha512-EuBdTGlsMTjEl1sQnBX2jfygy7iR6CKfvOzi+gEOfhDqbHXsmY1dcpbVtcwHAg9/2yUZSfMJHMAgf1z8M4yyyw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.11: + resolution: {integrity: sha512-O0/Wo1Wk6dc0rZSxkvGpmTNIycEznHmkObTFz2VHBhjPsO4ZpCgfGxNkCpz4AdAIeMczpTXt/8d5vdJNKEGC+Q==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.11: + resolution: {integrity: sha512-x977Q4HhNjnHx00b4XLAnTtj5vfbdEvkxaQwC1Zh5AN8g5EX+izgZ6e5QgqJgpzyRNJqh4hkgIJF1pyy1be0mQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.11: + resolution: {integrity: sha512-VwUHFACuBahrvntdcMKZteUZ9HaYrBRODoKe4tIWxguQRvvYoYb7iu5LrcRS/FQx8KPZNaa72zuqwVtHeXsITw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild/0.15.11: + resolution: {integrity: sha512-OgHGuhlfZ//mToxjte1D5iiiQgWfJ2GByVMwEC/IuoXsBGkuyK1+KrjYu0laSpnN/L1UmLUCv0s25vObdc1bVg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.15.11 + '@esbuild/linux-loong64': 0.15.11 + esbuild-android-64: 0.15.11 + esbuild-android-arm64: 0.15.11 + esbuild-darwin-64: 0.15.11 + esbuild-darwin-arm64: 0.15.11 + esbuild-freebsd-64: 0.15.11 + esbuild-freebsd-arm64: 0.15.11 + esbuild-linux-32: 0.15.11 + esbuild-linux-64: 0.15.11 + esbuild-linux-arm: 0.15.11 + esbuild-linux-arm64: 0.15.11 + esbuild-linux-mips64le: 0.15.11 + esbuild-linux-ppc64le: 0.15.11 + esbuild-linux-riscv64: 0.15.11 + esbuild-linux-s390x: 0.15.11 + esbuild-netbsd-64: 0.15.11 + esbuild-openbsd-64: 0.15.11 + esbuild-sunos-64: 0.15.11 + esbuild-windows-32: 0.15.11 + esbuild-windows-64: 0.15.11 + esbuild-windows-arm64: 0.15.11 + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /is-core-module/2.10.0: + resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} + dependencies: + has: 1.0.3 + dev: true + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /jsesc/2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json5/2.2.1: + resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /loose-envify/1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /magic-string/0.26.7: + resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} + engines: {node: '>=12'} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /nanoid/3.3.4: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /node-releases/2.0.6: + resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /postcss/8.4.18: + resolution: {integrity: sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /react-dom/18.2.0_react@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react-refresh/0.14.0: + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} + dev: true + + /react/18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /resolve/1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true + dependencies: + is-core-module: 2.10.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /rollup/2.78.1: + resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /scheduler/0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + dev: true + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /update-browserslist-db/1.0.10_browserslist@4.21.4: + resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.4 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /vite/3.1.8: + resolution: {integrity: sha512-m7jJe3nufUbuOfotkntGFupinL/fmuTNuQmiVE7cH2IZMuf4UbfbGYMUT3jVWgGYuRVLY9j8NnrRqgw5rr5QTg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + less: '*' + sass: '*' + stylus: '*' + terser: ^5.4.0 + peerDependenciesMeta: + less: + optional: true + sass: + optional: true + stylus: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.15.11 + postcss: 8.4.18 + resolve: 1.22.1 + rollup: 2.78.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/public/vite.svg b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/api/index.js b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/api/index.js new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/assets/index.css b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/assets/index.css new file mode 100644 index 0000000..917888c --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/assets/index.css @@ -0,0 +1,70 @@ +:root { + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 24px; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/assets/react.svg b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/components/index.js b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/components/index.js new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/main.jsx b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/main.jsx new file mode 100644 index 0000000..ff2783c --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/main.jsx @@ -0,0 +1,10 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from '@/pages/App' +import '@/assets/index.css' + +ReactDOM.createRoot(document.getElementById('root')).render( + + + +) diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/pages/App/index.jsx b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/pages/App/index.jsx new file mode 100644 index 0000000..904f38f --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/pages/App/index.jsx @@ -0,0 +1,6 @@ + +export default function App(){ + return( +
      App
      + ) +} \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/routers/index.js b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/routers/index.js new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/store/constants.js b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/store/constants.js new file mode 100644 index 0000000..c78b88c --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/store/constants.js @@ -0,0 +1,6 @@ +/* + 该模块用于定义action对象中type类型的常量值 +*/ + +export const INCREMENT = 'increment' +export const DECREMENT = 'decrement' diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/store/index.js b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/store/index.js new file mode 100644 index 0000000..879a590 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/store/index.js @@ -0,0 +1,6 @@ +// 引入createStore方法,创建redux中最为核心的Store对象 +import {createStore} from 'redux' +// 引入reducer +import myReducer from './reducer' +// 暴露store +export default createStore(myReducer) diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/store/reducer.js b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/store/reducer.js new file mode 100644 index 0000000..ce9c1d9 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/store/reducer.js @@ -0,0 +1,19 @@ +/* + 1. 该文件用于创建一个为XXX组件服务的reducer,reducer的本质是一个函数 + 2. reducer函数会接收到俩个参数,分别是:之前的状态(preState),动作对象(action) +*/ +import { INCREMENT,DECREMENT } from "./constants" // 引入常量 +const initState = 0 // 初始化数据 +export default function Reducer(preStete = initState,action) { + // 从动作(action)对象里面取出要干嘛,以及这件事的数据 + const {type,data} = action + // 根据type决定如何加工数据 + switch(type){ + case INCREMENT: + return preStete + data + case DECREMENT: + return preStete - data + default: + return preStete + } +} diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/store/userStore.js b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/store/userStore.js new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/utils/index.js b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/src/utils/index.js new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/vite.config.js b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/vite.config.js new file mode 100644 index 0000000..fc3a945 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/Redux/demo-redux/vite.config.js @@ -0,0 +1,13 @@ +import {defineConfig} from 'vite' +import react from '@vitejs/plugin-react' +import path from 'path' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + } + }, +}) diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/.gitignore b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/index.html b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/index.html new file mode 100644 index 0000000..25e8fad --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + + +
      + + + diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/package.json b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/package.json new file mode 100644 index 0000000..16ea841 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/package.json @@ -0,0 +1,23 @@ +{ + "name": "components", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "start": "vite --port=3000", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.55.0" + }, + "devDependencies": { + "@types/react": "^18.0.17", + "@types/react-dom": "^18.0.6", + "@vitejs/plugin-react": "^2.1.0", + "vite": "^3.1.0" + } +} \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/pnpm-lock.yaml b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/pnpm-lock.yaml new file mode 100644 index 0000000..1c4b6f4 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/pnpm-lock.yaml @@ -0,0 +1,979 @@ +lockfileVersion: 5.4 + +specifiers: + '@types/react': ^18.0.17 + '@types/react-dom': ^18.0.6 + '@vitejs/plugin-react': ^2.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.55.0 + vite: ^3.1.0 + +dependencies: + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + sass: 1.55.0 + +devDependencies: + '@types/react': 18.0.21 + '@types/react-dom': 18.0.6 + '@vitejs/plugin-react': 2.1.0_vite@3.1.8 + vite: 3.1.8_sass@1.55.0 + +packages: + + /@ampproject/remapping/2.2.0: + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.17 + dev: true + + /@babel/code-frame/7.18.6: + resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.18.6 + dev: true + + /@babel/compat-data/7.19.4: + resolution: {integrity: sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core/7.19.3: + resolution: {integrity: sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.19.5 + '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.19.3 + '@babel/helper-module-transforms': 7.19.0 + '@babel/helpers': 7.19.4 + '@babel/parser': 7.19.4 + '@babel/template': 7.18.10 + '@babel/traverse': 7.19.4 + '@babel/types': 7.19.4 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator/7.19.5: + resolution: {integrity: sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + '@jridgewell/gen-mapping': 0.3.2 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure/7.18.6: + resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-compilation-targets/7.19.3_@babel+core@7.19.3: + resolution: {integrity: sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.19.4 + '@babel/core': 7.19.3 + '@babel/helper-validator-option': 7.18.6 + browserslist: 4.21.4 + semver: 6.3.0 + dev: true + + /@babel/helper-environment-visitor/7.18.9: + resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name/7.19.0: + resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.18.10 + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-hoist-variables/7.18.6: + resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-module-imports/7.18.6: + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-module-transforms/7.19.0: + resolution: {integrity: sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-simple-access': 7.19.4 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-validator-identifier': 7.19.1 + '@babel/template': 7.18.10 + '@babel/traverse': 7.19.4 + '@babel/types': 7.19.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-plugin-utils/7.19.0: + resolution: {integrity: sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-simple-access/7.19.4: + resolution: {integrity: sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-split-export-declaration/7.18.6: + resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/helper-string-parser/7.19.4: + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier/7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option/7.18.6: + resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers/7.19.4: + resolution: {integrity: sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.18.10 + '@babel/traverse': 7.19.4 + '@babel/types': 7.19.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight/7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.19.1 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser/7.19.4: + resolution: {integrity: sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.19.4 + dev: true + + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.3: + resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.19.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.19.3: + resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.19.3 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.19.3 + dev: true + + /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.19.3: + resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.19.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-react-jsx-source/7.18.6_@babel+core@7.19.3: + resolution: {integrity: sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.19.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.19.3: + resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.19.3 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.19.3 + '@babel/types': 7.19.4 + dev: true + + /@babel/template/7.18.10: + resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/parser': 7.19.4 + '@babel/types': 7.19.4 + dev: true + + /@babel/traverse/7.19.4: + resolution: {integrity: sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.19.5 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.19.4 + '@babel/types': 7.19.4 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types/7.19.4: + resolution: {integrity: sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.19.4 + '@babel/helper-validator-identifier': 7.19.1 + to-fast-properties: 2.0.0 + dev: true + + /@esbuild/android-arm/0.15.11: + resolution: {integrity: sha512-PzMcQLazLBkwDEkrNPi9AbjFt6+3I7HKbiYF2XtWQ7wItrHvEOeO3T8Am434zAozWtVP7lrTue1bEfc2nYWeCA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.11: + resolution: {integrity: sha512-geWp637tUhNmhL3Xgy4Bj703yXB9dqiLJe05lCUfjSFDrQf9C/8pArusyPUbUbPwlC/EAUjBw32sxuIl/11dZw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@jridgewell/gen-mapping/0.1.1: + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@jridgewell/gen-mapping/0.3.2: + resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/trace-mapping': 0.3.17 + dev: true + + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array/1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec/1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true + + /@jridgewell/trace-mapping/0.3.17: + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@types/prop-types/15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + dev: true + + /@types/react-dom/18.0.6: + resolution: {integrity: sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==} + dependencies: + '@types/react': 18.0.21 + dev: true + + /@types/react/18.0.21: + resolution: {integrity: sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.1 + dev: true + + /@types/scheduler/0.16.2: + resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} + dev: true + + /@vitejs/plugin-react/2.1.0_vite@3.1.8: + resolution: {integrity: sha512-am6rPyyU3LzUYne3Gd9oj9c4Rzbq5hQnuGXSMT6Gujq45Il/+bunwq3lrB7wghLkiF45ygMwft37vgJ/NE8IAA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^3.0.0 + dependencies: + '@babel/core': 7.19.3 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.19.3 + '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.19.3 + '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.19.3 + '@babel/plugin-transform-react-jsx-source': 7.18.6_@babel+core@7.19.3 + magic-string: 0.26.7 + react-refresh: 0.14.0 + vite: 3.1.8_sass@1.55.0 + transitivePeerDependencies: + - supports-color + dev: true + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + + /browserslist/4.21.4: + resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001421 + electron-to-chromium: 1.4.284 + node-releases: 2.0.6 + update-browserslist-db: 1.0.10_browserslist@4.21.4 + dev: true + + /caniuse-lite/1.0.30001421: + resolution: {integrity: sha512-Sw4eLbgUJAEhjLs1Fa+mk45sidp1wRn5y6GtDpHGBaNJ9OCDJaVh2tIaWWUnGfuXfKf1JCBaIarak3FkVAvEeA==} + dev: true + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-name/1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /convert-source-map/1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + + /csstype/3.1.1: + resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} + dev: true + + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /electron-to-chromium/1.4.284: + resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} + dev: true + + /esbuild-android-64/0.15.11: + resolution: {integrity: sha512-rrwoXEiuI1kaw4k475NJpexs8GfJqQUKcD08VR8sKHmuW9RUuTR2VxcupVvHdiGh9ihxL9m3lpqB1kju92Ialw==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.11: + resolution: {integrity: sha512-/hDubOg7BHOhUUsT8KUIU7GfZm5bihqssvqK5PfO4apag7YuObZRZSzViyEKcFn2tPeHx7RKbSBXvAopSHDZJQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.11: + resolution: {integrity: sha512-1DqHD0ms3AhiwkKnjRUzmiW7JnaJJr5FKrPiR7xuyMwnjDqvNWDdMq4rKSD9OC0piFNK6n0LghsglNMe2MwJtA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.11: + resolution: {integrity: sha512-OMzhxSbS0lwwrW40HHjRCeVIJTURdXFA8c3GU30MlHKuPCcvWNUIKVucVBtNpJySXmbkQMDJdJNrXzNDyvoqvQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.11: + resolution: {integrity: sha512-8dKP26r0/Qyez8nTCwpq60QbuYKOeBygdgOAWGCRalunyeqWRoSZj9TQjPDnTTI9joxd3QYw3UhVZTKxO9QdRg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.11: + resolution: {integrity: sha512-aSGiODiukLGGnSg/O9+cGO2QxEacrdCtCawehkWYTt5VX1ni2b9KoxpHCT9h9Y6wGqNHmXFnB47RRJ8BIqZgmQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.11: + resolution: {integrity: sha512-lsrAfdyJBGx+6aHIQmgqUonEzKYeBnyfJPkT6N2dOf1RoXYYV1BkWB6G02tjsrz1d5wZzaTc3cF+TKmuTo/ZwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.11: + resolution: {integrity: sha512-Y2Rh+PcyVhQqXKBTacPCltINN3uIw2xC+dsvLANJ1SpK5NJUtxv8+rqWpjmBgaNWKQT1/uGpMmA9olALy9PLVA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.11: + resolution: {integrity: sha512-TJllTVk5aSyqPFvvcHTvf6Wu1ZKhWpJ/qNmZO8LL/XeB+LXCclm7HQHNEIz6MT7IX8PmlC1BZYrOiw2sXSB95A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.11: + resolution: {integrity: sha512-uhcXiTwTmD4OpxJu3xC5TzAAw6Wzf9O1XGWL448EE9bqGjgV1j+oK3lIHAfsHnuIn8K4nDW8yjX0Sv5S++oRuw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.11: + resolution: {integrity: sha512-WD61y/R1M4BLe4gxXRypoQ0Ci+Vjf714QYzcPNkiYv5I8K8WDz2ZR8Bm6cqKxd6rD+e/rZgPDbhQ9PCf7TMHmA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.11: + resolution: {integrity: sha512-JVleZS9oPVLTlBhPTWgOwxFWU/wMUdlBwTbGA4GF8c38sLbS13cupj+C8bLq929jU7EMWry4SaL+tKGIaTlqKg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.11: + resolution: {integrity: sha512-9aLIalZ2HFHIOZpmVU11sEAS9F8TnHw49daEjcgMpBXHFF57VuT9f9/9LKJhw781Gda0P9jDkuCWJ0tFbErvJw==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.11: + resolution: {integrity: sha512-sZHtiXXOKsLI3XGBGoYO4qKBzJlb8xNsWmvFiwFMHFzA4AXgDP1KDp7Dawe9C2pavTRBDvl+Ok4n/DHQ59oaTg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.11: + resolution: {integrity: sha512-hUC9yN06K9sg7ju4Vgu9ChAPdsEgtcrcLfyNT5IKwKyfpLvKUwCMZSdF+gRD3WpyZelgTQfJ+pDx5XFbXTlB0A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.11: + resolution: {integrity: sha512-0bBo9SQR4t66Wd91LGMAqmWorzO0TTzVjYiifwoFtel8luFeXuPThQnEm5ztN4g0fnvcp7AnUPPzS/Depf17wQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.11: + resolution: {integrity: sha512-EuBdTGlsMTjEl1sQnBX2jfygy7iR6CKfvOzi+gEOfhDqbHXsmY1dcpbVtcwHAg9/2yUZSfMJHMAgf1z8M4yyyw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.11: + resolution: {integrity: sha512-O0/Wo1Wk6dc0rZSxkvGpmTNIycEznHmkObTFz2VHBhjPsO4ZpCgfGxNkCpz4AdAIeMczpTXt/8d5vdJNKEGC+Q==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.11: + resolution: {integrity: sha512-x977Q4HhNjnHx00b4XLAnTtj5vfbdEvkxaQwC1Zh5AN8g5EX+izgZ6e5QgqJgpzyRNJqh4hkgIJF1pyy1be0mQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.11: + resolution: {integrity: sha512-VwUHFACuBahrvntdcMKZteUZ9HaYrBRODoKe4tIWxguQRvvYoYb7iu5LrcRS/FQx8KPZNaa72zuqwVtHeXsITw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild/0.15.11: + resolution: {integrity: sha512-OgHGuhlfZ//mToxjte1D5iiiQgWfJ2GByVMwEC/IuoXsBGkuyK1+KrjYu0laSpnN/L1UmLUCv0s25vObdc1bVg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.15.11 + '@esbuild/linux-loong64': 0.15.11 + esbuild-android-64: 0.15.11 + esbuild-android-arm64: 0.15.11 + esbuild-darwin-64: 0.15.11 + esbuild-darwin-arm64: 0.15.11 + esbuild-freebsd-64: 0.15.11 + esbuild-freebsd-arm64: 0.15.11 + esbuild-linux-32: 0.15.11 + esbuild-linux-64: 0.15.11 + esbuild-linux-arm: 0.15.11 + esbuild-linux-arm64: 0.15.11 + esbuild-linux-mips64le: 0.15.11 + esbuild-linux-ppc64le: 0.15.11 + esbuild-linux-riscv64: 0.15.11 + esbuild-linux-s390x: 0.15.11 + esbuild-netbsd-64: 0.15.11 + esbuild-openbsd-64: 0.15.11 + esbuild-sunos-64: 0.15.11 + esbuild-windows-32: 0.15.11 + esbuild-windows-64: 0.15.11 + esbuild-windows-arm64: 0.15.11 + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /immutable/4.1.0: + resolution: {integrity: sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==} + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + + /is-core-module/2.10.0: + resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} + dependencies: + has: 1.0.3 + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /jsesc/2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json5/2.2.1: + resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /loose-envify/1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /magic-string/0.26.7: + resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} + engines: {node: '>=12'} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /nanoid/3.3.4: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /node-releases/2.0.6: + resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + dev: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /postcss/8.4.18: + resolution: {integrity: sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /react-dom/18.2.0_react@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react-refresh/0.14.0: + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} + dev: true + + /react/18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + + /resolve/1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true + dependencies: + is-core-module: 2.10.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /rollup/2.78.1: + resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /sass/1.55.0: + resolution: {integrity: sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.1.0 + source-map-js: 1.0.2 + + /scheduler/0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + dev: true + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /update-browserslist-db/1.0.10_browserslist@4.21.4: + resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.4 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /vite/3.1.8_sass@1.55.0: + resolution: {integrity: sha512-m7jJe3nufUbuOfotkntGFupinL/fmuTNuQmiVE7cH2IZMuf4UbfbGYMUT3jVWgGYuRVLY9j8NnrRqgw5rr5QTg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + less: '*' + sass: '*' + stylus: '*' + terser: ^5.4.0 + peerDependenciesMeta: + less: + optional: true + sass: + optional: true + stylus: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.15.11 + postcss: 8.4.18 + resolve: 1.22.1 + rollup: 2.78.1 + sass: 1.55.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/public/vite.svg b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/assets/index.css b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/assets/index.css new file mode 100644 index 0000000..0a0bbbb --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/assets/index.css @@ -0,0 +1,106 @@ +:root { + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 24px; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +html,body{ + height: 100% !important; + width: 100% !important; + overflow: hidden; +} +#root{ + height: 100%; + width: 100%; + overflow: overlay; +} + +body { + margin: 0; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} +#modalRoot{ + position: absolute; + height: 100%; + width: 100%; + overflow: hidden; + top:0; + left: 0; + align-items: center; + justify-content: center; + display: none; + backdrop-filter: blur(50px); + animation: modalRootShow ease-in-out 500ms forwards; +} +@keyframes modalRootShow { + from{ + background: #33333300; + } + to{ + background: #66666633; + } +} +@keyframes modalRootHide { + from{ + background: #33333333; + } + to{ + background: #66666600; + } +} diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/assets/react.svg b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/components/Button/index.jsx b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/components/Button/index.jsx new file mode 100644 index 0000000..7c84ac8 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/components/Button/index.jsx @@ -0,0 +1,56 @@ +import BPEMR from './index.module.scss' +import {useState, useEffect} from "react"; + +export default function Button(props) { + // console.log(props) + + const [size, setSize] = useState(props.size) + const [type, setType] = useState(props.type) + const [loading, setLoading] = useState(props.loading) + const [disable, setDisable] = useState(props.disable) + + useEffect(() => { + setSize(props.size ? props.size : 'default') + setType(props.type ? props.type : 'default') + setLoading(props.loading ? BPEMR.loading : '') + setDisable(props.disable ? BPEMR.disable : '') + }, [props.size, props.type]) + + const sizeOp = { + default: BPEMR.defaultsize, + undersize: BPEMR.undersize, + oversize: BPEMR.oversize, + } + const typeOp = { + default: BPEMR.defaultColor, + + error: BPEMR.eColor, + error2: BPEMR.e2Color, + error3: BPEMR.e3Color, + + success: BPEMR.sColor, + success2: BPEMR.s3Color, + success3: BPEMR.s2Color, + + warning: BPEMR.wColor, + warning1: BPEMR.w2Color, + warning3: BPEMR.w3Color, + } + + const classname = [BPEMR.BPEMR_button, loading, disable, sizeOp[size], typeOp[type]].join(' ') + // console.log(classname) + if (props.onClick && typeof props.onClick === 'function') { + + } else { + if (props.onClick) { + throw new Error('onClick必须位函数') + } + } + + return ( +
      +
      { + }}>{props.children}
      +
      + ) +} \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/components/Button/index.module.scss b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/components/Button/index.module.scss new file mode 100644 index 0000000..47ddf22 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/components/Button/index.module.scss @@ -0,0 +1,162 @@ +.BPEMR_button_box{ + position: relative; + width: fit-content; + width: -webkit-fit-content; + width: -moz-fit-content; + padding: 5px 0; +} +.BPEMR_button { + position: relative; + width: fit-content; + width: -webkit-fit-content; + width: -moz-fit-content; + line-height: 2em; + padding: 0 1em; + margin: 0.5em 0; + user-select: none; + cursor: pointer; + border-radius: 5px; + transition: all ease-in-out 200ms; + color: #fefefe; +} +.BPEMR_button.loading{ + $jump : jump; + animation: jump .4s ease-in-out infinite alternate; + @keyframes jump { + 0%{top:0px} + 33%{top:-2px} + 66%{top:-8px} + 100%{top:-10px} + } + &{ + box-shadow: 0 5px 20px -10px #33333399; + } +} +.BPEMR_button.disable{ + cursor: no-drop; + &:hover{ + box-shadow: none !important; + } +} + +.BPEMR_button.defaultsize { + font-size: 1rem; + + &:hover { + box-shadow: 0px 0 5px 0px #33333399; + } +} + +.BPEMR_button.oversize { + font-size: 1.2rem; + + &:hover { + box-shadow: 0px 0 7px 0px #33333399; + } +} + +.BPEMR_button.undersize { + font-size: 0.8rem; + + &:hover { + box-shadow: 0px 0 3px 1px #99999999; + } +} + + +.BPEMR_button.defaultColor { + color: #222831; + background: #fefefe; + border: 1px solid #bcbcbc; + + &:active { + background: #fff !important; + } +} + +.BPEMR_button.eColor { + background: #E84545; + background: #ff4d4f; + border: 1px solid #ff4d4f; + + &:active { + background: #ff4d4fcc !important; + border: 1px solid #ff4d4fcc !important; + } +} + +.BPEMR_button.e2Color { + background: #F6416C; + border: 1px solid #F6416C; + &:active { + background: #F6416Ccc !important; + border: 1px solid #F6416Ccc !important; + } +} + +.BPEMR_button.e3Color { + background: #FF165D; + border: 1px solid #FF165D; + &:active { + background: #E84545ee !important; + border: 1px solid #E84545cc !important; + } +} + +.BPEMR_button.sColor { + background: #17B978; + border: 1px solid #17B978; + &:active { + background: #17B978cc !important; + border: 1px solid #17B978cc !important; + } +} + +.BPEMR_button.s2Color { + background: #3EC1D3; + border: 1px solid #3EC1D3; + &:active { + background: #3EC1D3cc !important; + border: 1px solid #3EC1D3cc !important; + } +} + +.BPEMR_button.s3Color { + background: #00ADB5; + border: 1px solid #00ADB5; + &:active { + background: #00ADB5cc !important; + border: 1px solid #00ADB5cc !important; + } +} + +.BPEMR_button.wColor { + background: #FF9A00; + border: 1px solid #FF9A00; + &:active { + background: #FF9A00cc !important; + border: 1px solid #FF9A00cc !important; + } +} + +.BPEMR_button.w2Color { + background: #FF6F3C; + border: 1px solid #FF6F3C; + &:active { + background: #FF6F3Ccc !important; + border: 1px solid #FF6F3Ccc !important; + } +} + +.BPEMR_button.w3Color { + background: #FFC93C; + border: 1px solid #FFC93C; + &:active { + background: #FFC93Ccc !important; + border: 1px solid #FFC93Ccc !important; + } +} + + + + diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/components/Modal/close.svg b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/components/Modal/close.svg new file mode 100644 index 0000000..d2ebbf8 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/components/Modal/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/components/Modal/index.jsx b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/components/Modal/index.jsx new file mode 100644 index 0000000..ad106b4 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/components/Modal/index.jsx @@ -0,0 +1,68 @@ +import React, { useEffect, useState } from "react"; +import { createPortal } from "react-dom"; +import BPEMR from './index.module.scss'; +import closeSvg from './close.svg' + +export default function Dialog(props){ + const modalRoot = document.body.querySelector('#modalRoot') + let node = window.document.createElement("div"); + if(modalRoot){ + node = modalRoot; + }else{ + node.id='modalRoot' + window.document.body.appendChild(node) + } + + const [state, setState] = useState(props.state) + if(typeof props.width === 'number' || Number(props.width) != 'NaN'){ + + }else{ + throw new Error('width必须为数字') + } + const [width, setWidth] = useState(Number(props.width)) + + const [temCloseAnimation, settemCloseAnimation] = useState(BPEMR.temModalShow) + + useEffect(() => { + setState(props.state) + setWidth(props.width) + if(state){ + modalRoot.style.animation = '' + modalRoot.style.display = 'flex' + }else{ + modalRoot.style.display = 'none' + settemCloseAnimation(BPEMR.temModalShow) + } + }) + + useEffect(() => { + modalRoot.style.animation = 'modalRootHide ease-in-out 500ms forwards' + },[temCloseAnimation]) + + + + if(!props.close){ + throw new Error('缺少弹窗关闭参数。') + }else if(typeof props.close != 'function'){ + throw new Error('弹窗必须返回关闭程序。') + } + + + + function close(){ + settemCloseAnimation(BPEMR.temModalHide) + setTimeout(() => { + props.close(false) + }, 500) + } + + const className = [BPEMR.BPEMR_Dialog_Tem, temCloseAnimation].join(' ') + + return createPortal( +
      +
      +
      {props.children}
      +
      , + node + ); +} \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/components/Modal/index.module.scss b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/components/Modal/index.module.scss new file mode 100644 index 0000000..692e7a6 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/components/Modal/index.module.scss @@ -0,0 +1,64 @@ + +$modalShow:modalShow; +$modalHide:modalHide; + +.BPEMR_Dialog_Tem{ + position:relative; + background: #fefefe; + min-width: 10em !important; + max-width: 90vw !important; + border-radius: 5px; + padding: 1.5em; + box-sizing: border-box; + overflow: overlay; + & > .close{ + position: absolute; + top:0.5em; + right: 0.5em; + width: 1.5em; + height: 1.5em; + border-radius: 1.5em; + cursor: pointer; + box-shadow: 0px 1px 10px -1px #33333333; + transition: box-shadow ease-in-out 300ms; + & > img { + height: 1.5em; + } + &:hover{ + box-shadow: 1px 1px 10px -3px #333; + } + } +} +.temModalShow{ + animation: modalShow ease-in-out 300ms forwards; +} +.temModalHide{ + animation: modalHide ease-in-out 300ms forwards; +} + +@keyframes modalShow { + 0%{ + transform: scale(0.3); + box-shadow: 5px 10px 30px -10px #33333300; + } + 80%{ + transform: scale(1.1); + } + 100%{ + transform: scale(1); + box-shadow: 5px 10px 30px -10px #333333aa; + } +} +@keyframes modalHide { + 0%{ + transform: scale(1); + box-shadow: 5px 10px 30px -10px #333333aa; + } + 20%{ + transform: scale(1.1); + } + 100%{ + transform: scale(0); + box-shadow: 5px 10px 30px -10px #33333300; + } +} \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/main.jsx b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/main.jsx new file mode 100644 index 0000000..870ef4a --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/main.jsx @@ -0,0 +1,10 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './pages/App' +import './assets/index.css' + +ReactDOM.createRoot(document.getElementById('root')).render( + + + +) diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/pages/App/index.jsx b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/pages/App/index.jsx new file mode 100644 index 0000000..8fa7525 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/src/pages/App/index.jsx @@ -0,0 +1,60 @@ +import Button from "../../components/Button"; +import Modal from "../../components/Modal"; +import {useState} from "react"; + +export default function App() { + const [dialog0, setDialog0] = useState(false) + return ( +
      +

      Button组件

      +
      +
      +

      大小

      + + + +
      +
      +

      颜色

      +

      错误

      + + +
      +
      +

      成功

      + + +
      +
      +

      警告

      + + +
      +

      事务

      +
      +

      正常

      + +

      失效

      + +

      加载

      + +
      + +
      +

      Dialog

      + +
      + + 你好 +
      + + +
      + ) +} \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/vite.config.js b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/vite.config.js new file mode 100644 index 0000000..b1b5f91 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A2-前端知识/React/components/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()] +}) diff --git a/xi-note-computer/Xi-A-Program/Xi-A3-GoLang/Golang.md b/xi-note-computer/Xi-A-Program/Xi-A3-GoLang/Golang.md new file mode 100644 index 0000000..b8d5974 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A3-GoLang/Golang.md @@ -0,0 +1,29 @@ +# 一、语言基础 + +## 1. 注释 + +### 1.1 单行注释 + +```go +// 单行注释 +``` + +### 1.2 多行注释 + +```go +/** +多行注释 +/ +``` + +## 2. 基本数据类型 + +## 3. 复和数据类型 + +## 4. 函数 + +## 5. 方法 + +## 6. 接口 + +## 7. 包和工具 \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-A9-Databases/MongoDB/MongoDB官网版.md b/xi-note-computer/Xi-A-Program/Xi-A9-Databases/MongoDB/MongoDB官网版.md new file mode 100644 index 0000000..8e9e0bd --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-A9-Databases/MongoDB/MongoDB官网版.md @@ -0,0 +1,224 @@ +> [Getting Started — MongoDB Manual](https://www.mongodb.com/docs/manual/tutorial/getting-started/) + +> 版本 6.0 + + +# 开始 + +## 1. 切换数据库 + +- 查看当前数据库 + +```bash +$ db +# 默认为test +``` + +- 切换创建数据库 + - 切换数据库如果不存在就创建,但是不会显示,除非给里面插入至少一条数据 + +```bash +$ use databaseName +``` + +## 2. 插入 + +- 在集合movies插入数据,会创建集合*movies* + - `db.movies.insertMany()` + +```bash +db.movies.insertMany([ + { + title: 'Titanic', + year: 1997, + genres: [ 'Drama', 'Romance' ], + rated: 'PG-13', + languages: [ 'English', 'French', 'German', 'Swedish', 'Italian', 'Russian' ], + released: ISODate("1997-12-19T00:00:00.000Z"), + awards: { + wins: 127, + nominations: 63, + text: 'Won 11 Oscars. Another 116 wins & 63 nominations.' + }, + cast: [ 'Leonardo DiCaprio', 'Kate Winslet', 'Billy Zane', 'Kathy Bates' ], + directors: [ 'James Cameron' ] + }, + { + title: 'The Dark Knight', + year: 2008, + genres: [ 'Action', 'Crime', 'Drama' ], + rated: 'PG-13', + languages: [ 'English', 'Mandarin' ], + released: ISODate("2008-07-18T00:00:00.000Z"), + awards: { + wins: 144, + nominations: 106, + text: 'Won 2 Oscars. Another 142 wins & 106 nominations.' + }, + cast: [ 'Christian Bale', 'Heath Ledger', 'Aaron Eckhart', 'Michael Caine' ], + directors: [ 'Christopher Nolan' ] + }, + { + title: 'Spirited Away', + year: 2001, + genres: [ 'Animation', 'Adventure', 'Family' ], + rated: 'PG', + languages: [ 'Japanese' ], + released: ISODate("2003-03-28T00:00:00.000Z"), + awards: { + wins: 52, + nominations: 22, + text: 'Won 1 Oscar. Another 51 wins & 22 nominations.' + }, + cast: [ 'Rumi Hiiragi', 'Miyu Irino', 'Mari Natsuki', 'Takashi Naitè' ], + directors: [ 'Hayao Miyazaki' ] + }, + { + title: 'Casablanca', + genres: [ 'Drama', 'Romance', 'War' ], + rated: 'PG', + cast: [ 'Humphrey Bogart', 'Ingrid Bergman', 'Paul Henreid', 'Claude Rains' ], + languages: [ 'English', 'French', 'German', 'Italian' ], + released: ISODate("1943-01-23T00:00:00.000Z"), + directors: [ 'Michael Curtiz' ], + awards: { + wins: 9, + nominations: 6, + text: 'Won 3 Oscars. Another 6 wins & 6 nominations.' + }, + lastupdated: '2015-09-04 00:22:54.600000000', + year: 1942 + } +]) + +{ + acknowledged: true, + insertedIds: { + '0': ObjectId("64059011a1367911c5f03839"), + '1': ObjectId("64059011a1367911c5f0383a"), + '2': ObjectId("64059011a1367911c5f0383b"), + '3': ObjectId("64059011a1367911c5f0383c") + } +} +``` + +## 3. 查找全部 + +- 在选择的数据库中进行某个集合的查询`db.movies.find( { } )` + +```bash +$ db.expressgy.find() + +{ + _id: ObjectId("64055bb6d44cd6e5278cc4c8"), + name: '何夕' +} +``` + +## 4. 过滤数据 + +- 条件查询 + +### 4.1 属性相等 + +```bash +db.movies.find( { "directors": "Christopher Nolan" } ); +{ + _id: ObjectId("64059011a1367911c5f0383a"), + title: 'The Dark Knight', + year: 2008, + genres: ['Action', 'Crime', 'Drama'], + rated: 'PG-13', + languages: ['English', 'Mandarin'], + released: 2008 - 07 - 18 T00: 00:00.000Z, + awards: + { + wins: 144, + nominations: 106, + text: 'Won 2 Oscars. Another 142 wins & 106 nominations.' + } + , + cast: ['Christian Bale', 'Heath Ledger', 'Aaron Eckhart', 'Michael Caine'], + directors: ['Christopher Nolan'] +} +``` + + +### 4.2 小于 + +```bash +db.movies.find( { "released": { $lt: ISODate("2000-01-01") } } ); +``` + +### 4.3 大于 + +```bash +db.movies.find( { "awards.wins": { $gt: 100 } } ); +``` + +### 4.4 属于 + +```bash +db.movies.find( { "languages": { $in: [ "Japanese", "Mandarin" ] } } ) +``` + +## 查询选择器 + +### 比较 + +有关不同 BSON 类型值的比较,请参阅[指定 BSON 比较顺序。](https://www.mongodb.com/docs/manual/reference/bson-type-comparison-order/#std-label-bson-types-comparison-order) + +`$eq` 匹配等于指定值的值。 + +`$gt` 匹配大于指定值的值。 + +`$gte` 匹配大于或等于指定值的值。 + +`$in` 匹配数组中指定的任何值。 + +`$lt` 匹配小于指定值的值。 + +`$lte` 匹配小于或等于指定值的值。 + +`$ne` 匹配所有不等于指定值的值。 + +`$nin` 与数组中指定的值均不匹配。 + +### 逻辑 + +`$and` 将查询子句与逻辑返回与这两个子句的条件匹配的所有文档联接在一起。`AND` + +`$not` 反转查询表达式的效果,并返回与查询_表达式不匹配的文档_。 + +`$nor` 将查询子句与逻辑联接,返回与这两个子句不匹配的所有文档。`NOR` + +`$or` 将查询子句与逻辑返回与任一子句的条件匹配的所有文档联接在一起。`OR` + +### 元素 + +`$exists` 匹配具有指定字段的文档。 + +`$type` 如果字段为指定类型,则选择文档。 + +### 评估 + +`$expr` 允许在查询语言中使用聚合表达式。 + +`$jsonSchema` 根据给定的 JSON 架构验证文档。 + +`$mod` 对字段的值执行模运算,并选择具有指定结果的文档。 + +`$regex` 选择值与指定正则表达式匹配的文档。 + +`$text`执行文本搜索。 + +`$where` 匹配满足 JavaScript 表达式的文档。 + +## 5. 项目字段 + +- 通过0,1控制查询的字段 + +```bash +db.movies.find( { }, { "title": 1, "directors": 1, "year": 1 } ); +db.movies.find( { }, { "_id": 0, "title": 1, "genres": 1 } ); +``` \ No newline at end of file diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/C++_Primer.md b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/C++_Primer.md new file mode 100644 index 0000000..d9e2a76 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/C++_Primer.md @@ -0,0 +1,3570 @@ +# C++ Primer + +> C++ Primer + + + + + +# 第一部分 开始 + + + +## 第1章 开始 + + + +### 1.1 Hello World + +使用GCC编译器 + +```bash +g++ -o hello_world hello_world.cpp + +Mac上使用c++11标准 +g++ -std=c++11 name name.cpp + +//第一种,直接包含在源程序文件中,如第一行代码所示 +#pragma GCC diagnostic error "-std=c++11" +#include +using namespace std; +int main(int argc,char **argv) +{ + cout<<"hello world!"< + +using namespace std; + +int main(){ + cout << "Hello World!"; + + return 0; +} +``` + + + +编译运行CPP文件 + +```bash +g++ -o 新的可执行文件名 cpp文件名 +``` + + + +### 1.2 IO + +C++语言没有定义任何IO语句,全面的标准库(standard library)来提供这个机制(还有其他设施),--iostream库,分别表示输入流和输出流,一个流就是一个字符序列,随着时间推移,字符是顺序生成和消耗的。 + +##### 标准库的四个IO对象 + +1. cin 标准输入 +2. cout 标准输出 +3. cerr 警告,错误消息(标准错误) +4. clog 运行时的一般信息 + +一个包含输入输出的小函数 + +```c++ +#include + +int main(){ + std::cout << "请输入两个数字" << std::endl; + + int val1=0,val2=0; + std::cin >> val1 >> val2; + std::cout << "数字和为:" << val1+val2 << std::endl; + + return 0; +} + +``` + + + +程序第一行 `#include ` 告诉编辑器我们要用iostream库,尖括号里面指出了一个头文件,#include指令必须和头文件名在同一行中,一般情况下头文件在所有函数之外,所以我们将所有的#include放在文件开头位置。 + + + +* 表达式,语句;由运算对象和运算符组成。 + + + +##### 向流中写入数据 + +`<<` 左侧连接的一定要连接ostream 右边是需要打印的值 ***io.test.cpp验证*** + + + +* 操作符(manipulator):`endl` 意思是结束当前行,**并将设备的缓冲区(buffer)中的内容刷新到设备中。缓冲刷新可以保证目前为止程序所产生的所有输入输出都真正的写入到流中,而不是仅停留在内存中等待写入流。** +* 缓冲区(buffer):一个存储区域,用于保存数据。IO设施通常将输入(或输出)数据保存在一个缓冲区中,读写缓冲区的动作与程序中的动作是无关的。我们可以显式地刷新输出缓冲,以便强制将缓冲区中的数据写入输出设备。默认情况下,读cin会刷新cout;程序非正常终止时也会刷新cout。 + + + +##### 从流中获取数据 + +获取数据前需要先定义变量名 + +`>>` 同输出流一样 + + + +##### 使用标准库的名字 + +namespace :命名空间,避免名字冲突,以及使用库中的相同名字导致冲突。标准库定义的所有名字都在命名空间std中。 + + + +### 1.3 注释 + +主是可以帮助我们理解程序; + +通常用于概述算法,确定变量用途,解释比较难懂的代码段。解释器会忽略注释,因此不会对程序的性能和行为产生影响。 + +* C++的`//`单行注释 +* C 的 `/**/` 多行注释,但是不能嵌套 + + + + + +### 1.4 控制流 + +程序是按照从上倒下一次运行的,控制流语句可以实现复杂的执行路径。 + + + +#### 1.4.1 while语句 + +反复执行一段代码,知道给定条件为假时才停止。 + + + +* 语句块(block): `{}`之间的代码 +* 赋值(assignment): `=` 将右边的值复制到左边 + + + +* 前缀递增运算符`++x` :将运算对象加1 + + + +```c++ +include + +int main(){ + std::cout << "计算1到10的值" << std::endl; + int i=0,sum=0; + while(i<=10){ + sum=sum + i; + i++; + } + std::cout <<"和为:" << sum << std::endl; + + return 0; +} + +``` + + + +**一定要认真,以上代码错了4次** + +```c++ +#include + +int main(){ + std::cout << "请输入两个数,我们将计算他们之间的数字的和,包括他们。"; + int x=0,y=0; + + std::cin >> x >> y; + + int sum=0; +// while(x + +int main(){ + std::cout << "计算0到100的加法." << std::endl; + + int sum=0; + for(int i=0;i<=100;i++){ + sum=sum+i; + std::cout << i << std::endl; + } + std::cout << "和为:" << sum << std::endl; + + return 0; +} + +``` + + + +#### 1.4.3 读取数量不等的输入数据 + +```C++ +#include + +int main(){ + std::cout << "输入数字,求取他们的和" << std::endl; + + int sum=0,x=0; + while(std::cin >> x){ + sum=sum+x; + std::cout << sum << std::endl; + } + + return 0; +} + + +// 此程序会在输入中遇到非int字符时停止因为,循环头条件为假。 + +``` + + + +**编译器常见错误类型** + +* 语法错误(syntax error):出现非法语法,忘记加分号等 +* 类型错误(type error):向int传送字符串 +* 声明错误(declaration error):没有声明变量就使用,标准库名字没加std + +#### 1.4.4 if语句 + +```c++ +#include + +int main(){ + std::cout << "输入数字以运行" << std::endl; + + int val1=0; + + if(std::cin >> val1){ +// 如果输入的是数字将会继续 + int val2=0,ssc=1; + while(std::cin >> val2){ + if(val1==val2){ + ssc++; + std::cout << "这个数字连续出现第" << ssc << std::endl; + }else{ + val1=val2; + ssc=1; + std::cout << "这个数字第一次出现" << std::endl; + } + } + } + + return 0; +} + +``` + + + +### 1.5 类简介 + +使用类就像使用int一样 + + + +#### 1.5.1 Sales_item类 + +```c++ +#include +#include "Sales_item.h" +//导入Sales_item类/库 + +int main(){ + Sales_item book; + std::cin >> book; +// 格式为: xxx-xxx-xxx-xxx int int 即 ISBN 数量 单价 + std::cout << book << std::endl; +// 输出了书的isbn码 书的数量 总价 平均价 + return 0; +} + +``` + +#### 1.5.2 成员函数 + +```c++ +#include +#include "Sales_item.h" + +int main(){ + Sales_item book1,book2; + std::cout << "请输入两个数" << " 格式为 四位isbn号 书数量 书单价" << std::endl; + + std::cin >> book1 >> book2; + if(book1.isbn()==book2.isbn()){ + std::cout << book1+book2 << std::endl; + return 0; + }else{ + std::cout << "两个书的ISBN码不一样,无法相加!" << std::endl; + return -1; + } +} + +``` + + + +### 1.6 书店程序 + +```c++ +#include +#include "Sales_item.h" + +int main(){ + std::cout << "请输入书信息:" << std::endl; + + Sales_item book1,book2; + + if(std::cin >> book1){ + while(std::cin >> book2){ + if(book1.isbn()==book2.isbn()){ + book1 += book2; + }else{ + std::cout << book1 <**意义**以及我们能在数据上执行的操作。 + + + +### 2.1 基本的内置类型 + +* 算数类型:字符,整型,布尔值,浮点型 +* 空类型:空类型不对应具体的值,仅用于一些特殊的场合,例如最常见的是,当函数不返回任何值时使用空类型作为返回类型。 + + + +#### 2.1.1 算数类型 + +整型:字符、布尔值和整数 + +浮点型:有小数部分 + + + +```bash +int 4/Byte +bool 1 +char 1 +wchar_t 4 +char16_t 2 +char32_t 4 +short 2 +long 8 +long long 8 +float 4 +double 8 +long double 16 + +``` + + + +#### 2.1.2 类型转换 + +如果表达式里既有**带符号类型又有无符号**类型,当带符号类型取值为负时会出现异常结果,这是因为带符号数会自动地转换成无符号数。 + +数字转化为布尔值,非0都为true。 + +```c++ +#include + +int main(){ + std::cout << "类型转化" << std::endl; + + int a=-1; + unsigned int b=2; + + std::cout << "存在无符号数的表达式中如果有符号的数为负数可能会出错" << std::endl; + std::cout << "如: 有符号a=-1,无符号b=2,连个数字执行加法运算,值为:" << b+a < + +int main(){ +// 没有10进制转义字符,只有8进制 +// 2M + std::cout << "\062\115\12" << std::endl;//转义8进制 + + std::cout << "\x32\x09\x4d" << std::endl;//转义16进制 + return 0; +} + +``` + + + + + +### 2.2 变量 + + + +#### 2.2.1 变量定义 + +* **初始化不是赋值**,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。 + +* 列表初始化:作为C++11新标准的一部分,用**花括号来初始化**变量得到了全面应用,而在此之前,这种初始化的形式仅在某些受限的场合下才能使用。出于3.3.1节(第88页)将要介绍的原因,这种初始化的形式被称为**列表初始化**(list initialization)。现在,无论是初始化对象还是某些时候为对象赋新值,都可以使用这样一组由花括号括起来的初始值了。 + +```c++ +int x = 0; +int x = {0}; +int x{0}; +int x(0); +// 以上都可以进行初始化 +``` + +* 默认初始化:当变量定义时没有被初始化(如下),会默认初始化,一般是0,未被初始化的值在引用时会报错; + +* 定义于函数体内的内置类型的对象如果没有初始化,则其值未定义。类的对象如果没有显式地初始化,则其值由类确定。 + +```c++ +#include + +int main(){ +// std::cin >> int x;//不能在这里定义 +// std::cout << x << std::endl; +// int i={3.14};//初始化不能丢失数据,浮点型不能初始化整型 +// double n=p=99.99;//p未定义 + int x=3.14; + std::cout << x << std::endl; + return 0; +} + +``` + + + +**未初始化变量引发运行时故障** + + + +```c++ +#include +#include + +std::string str; +int x; + +int main(){ + int y; + std::string str2; + + std::cout << str <变量声明规定了变量的类型和名字,在这一点上定义与之相同。但是除此之外,定义还申请存储空间,也可能会为变量赋一个初始值。 + + + +如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显式地初始化变量: + +```C++ +extern int x;//声明不定义 +int x;//声明并定义 +``` + +任何包含了显式初始化的声明即成为定义。我们能给由extern关键字标记的变量赋一个初始值,但是这么做也就抵消了extern的作用。extern语句如果包含初始值就不再是声明,而变成定义了: + +```c++ +extern int x=0;//定义 +``` + +***变量能且只能被定义一次,但是可以被多次声明。*** + + + +#### ※※※※ 声明 + +1. 声明:是指出存储类型,并给存储单元指定名称。 + +2. 定义:是分配内存空间,还可为变量指定初始值。 + +3. extern关键字:通过使用extern关键字声明变量名,而不是定义它。 + +```c++ +extern int x=1024;//错误,不能在这里对其初始化 +int x;//声明定义 +extern int x;//仅声明 +``` + +生命之前,标识符已经定义,我们只是再次声明 + +* 静态类型:C++是一种静态类型(statically typed)语言,其含义是在编译阶段检查类型。其中,检查类型的过程称为类型检查(type checking)。 + + + +#### 2.2.3 标识符 + +* C++的标识符(identifier)由字母、数字和下画线组成,其中必须以字母或下画线开头。标识符的长度没有限制,但是对大小写字母敏感 + +* 标识符由数字,字母,下划线构成,不能以数字开头 + + + +#### 2.2.4 标识符作用域 + +* 作用域(scope):是程序的一部分,在其中名字有其特定的含义。C++语言中大多数作用域都以花括号分隔。同一个名字在不同的作用域中可能指向不同的实体。名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端为结束。 + +* 建议:当你第一次使用变量时再定义它,尽量避免使用全局变量 + +* 作用域中一旦声明了某个名字,它所嵌套着的所有作用域中都能访问该名字。同时,允许在内层作用域中重新定义外层作用域已有的名字: + +``` +int x=0; +int main(){ + int x=1; +} +``` + +* 嵌套作用域 + +```c++ +#include + +int x=42; + +int main(){ + int y=0; +// 显示全局变量 + + std::cout << x << " " << y << std::endl; + int x=0; +// 显示局部变量 + + std::cout << x << " " << y << std::endl; +// 显式的访问全局变量 + + std::cout << ::x << " " << y << std::endl; + + return 0; +} + +``` + +**如果函数有可能用到某全局变量,则不宜再定义一个同名的局部变量。** + + + +```C++ +int main(){ + int i=100,sum=0; + + for(int i=0;i<10;i++){ + sum=sum+i; + } + + std::cout << i << " " << sum << std::endl; + + return 0; +} + + +输出100 45 +``` + + + + + +### 2.3 复合类型 + +* 复合类型(compound type)是指**基于其他类型定义的类型**。C++语言有几种复合类型,本章将介绍其中的两种:**引用和指针**。 + + + +#### 2.3.1 引用 + +**引用**(reference)为对象起了另外一个名字,引用类型引用(refers to)另外一种类型。通过将声明符写成**&d的形式**来定义引用类型,其中d是声明的变量名: + +```c++ +int x=15; +int &xs = x;//xs指向x(xs是x的另一个名字) +int &xs2;//这里会报错,因为没有指向,'''应用必须被初始化''' +``` + +一般在初始化变量时,初始值会被拷贝到新建的对象中。然而定义引用时,程序把引用和它的初始值**绑定(bind)**在一起,而不是将初始值拷贝给引用。 + +```c++ +int x=0;//把0 拷贝到x里 +int &xs=x;//把xs指向x; +``` + +* **引用就是别名**:引用并非对象,相反的,它只是为一个已经存在的对象所起的另外一个名字。 +* 定义了一个引用之后,对其进行的所有操作都是在与之绑定的对象上进行的: + +```c++ +int x=0; +int &xs=x; + +xs=100;//把值赋给了x +int y=xs;//y=x +``` + +因为引用本身不是一个对象,所以不能定义引用的引用。 + +引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起 + +```c++ +int &x=100;//错误,100不是对象 + +int x=100;//正确 + +int &xs;//错误,必须指定引用 +``` + + + + + +#### 2.3.2 指针 + +* **指针(pointer)**是“指向(point to)”另外一种类型的复合类型。与引用类似,指针也实现了对其他对象的间接访问。然而指针与引用相比又有很多不同点。其一,**指针本身就是一个对象,允许对指针赋值和拷贝,**而且**在指针的生命周期内它可以先后指向几个不同的对象**。其二,**指针无须在定义时赋初值**。和其他内置类型一样,**在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值**。 + +定义指针 + +```c++ +int *x,*y; +double dx,*dy; +``` + +* 指针存放某个对象的地址,要想获取该地址,需要使用取地址符(操作符&): + +```c++ +int x=12; + +int *ptr=&x;//这里的&是取地址符 +``` + +第二条语句把p定义为一个指向int的指针,随后初始化p令其指向名为ival的int对象。因为引用不是对象,没有实际地址,所以不能定义指向引用的指针。 + +```c++ +***测试错误 +#include + +int main(){ + int x=24; + + int *ptrx=&x; + + int &xs=x; + + int *ptrxs=&xs; + + std::cout << ptrx << std::endl; + std::cout << ptrxs < + +int main(){ + int x,*ptr=&x; + + std::cout << ptr << std::endl; + std::cout << *ptr << std::endl;//由于x值未定,所以这里也未定,不会报错 + + return 0; +} +``` + +``` +int* x,*y;//定义了两个指针 +int* x,y;//定义了一个指针,一个整数 +``` + +```c++ +#include + +int main(){ + int x=10,*ptr=&x,*pts=ptr; + + std::cout << x << std::endl; + std::cout << *ptr << "->" << ptr << std::endl; + std::cout << "ptr的地址" << &ptr << std::endl; + std::cout << *pts << "->" << pts << std::endl; + std::cout << "以上为指向同一个空间的指针" << std::endl; + + + + int y=20,*ptr2=&y,**pts2=&ptr2; + std::cout << y << std::endl; + std::cout << *ptr2 << "->" << ptr2 << std::endl; + std::cout << "ptr2的地址" << &ptr2 << std::endl; + std::cout << *pts2 << "->" << pts2 << std::endl; + + std::cout << "解引用" << **pts2 << std::endl; + + return 0; + +``` + + + +### 2.4 const限定符 + + + +* 创建一个不改变的值,一定要初始化 +* 默认状态下,const对象仅在文件内有效 + +```c++ +extern const int x; +``` + + + +* 如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern关键字。 + +#### 2.4.1 const的引用 + +```c++ +const int x=13; +const int &y=x;//正确 +y=3;//不正确,不能对不可变引用修改值 +int &z=x;//不正确,z是可变引用,不能作用于不可变数据 +``` + + + +const可以引用常量 + + + +```c++ +const int &x=12;//正常情况下引用是不可以引用常量的。 +int &y=22121;//错误,不可以引用常量 + +double d=12.2; +const int &c1=d;//实际上和上面一样,塌陷转化成了一个临时的常量对象 +{ + const int temp=d; + const int &c1=temp +} +``` + + + +常量引用可以引用变量,但是引用常量的一定是常量 + +``` +const int &x1=10; +int b1=2121; +const int &x2=b1;//正确 + +int &x3=x2;//错误 x2是一个常量 +``` + +* 解惑: + +``` +int main(){ + int x=10; + const int &y=x; + + std::cout << &x << std::endl; + std::cout << &y << std::endl; + + + x=12; + std::cout << x << std::endl; + std::cout << &x << std::endl; + + std::cout << y << std::endl; + std::cout << &y << std::endl; + return 0; +} + +``` + +引用实际上是引用了他的地址,他的地址没有变。。。 + +可以通过x(非常量)修改值,但是不能通过y(const)修改。 + + + +#### 2.4.2 指针和const + +同const引用,指针常量可以指向一个普通标识符,但是常量指针只能有常量指针指向, + +```c++ +#include + +int main(){ + const int xs=10; +// int *pts=&xs;//必须添加底层常量 + const int *pts=&xs; + + int x=1,y=2; + const int *ptr1; + std::cout << "普通指针指向一个常量,无法通过指针修改常量,同时不可以可以指向一个字面值?,跟引用不一样,不会有(temp)" << std::endl; +// ptr1=10;//错误,无法像引用一样 + const int &z=21; + + ptr1=&x;//可以赋值 +// *ptr1=11;//但不能修改值 + + + int *const ptr2=&y;//这是一个常量指针,必须初始化 +// ptr2=&x//不能再指向其他量; + *ptr2=3;//但可以修改 + std::cout << "通过指针修改值" << *ptr2 << "-> y" << y << std::endl; + + const int *const ptr3=&x;//必须赋值,因为这是一个常量指针(*const ptr3),并且他指向一个常量(const int); + std::cout << "尝试修改常量:失败" << std::endl; +// *ptr3=10;//错误无法通过指针修改指向的常量(因为指向的是一个常量) +// ptr3=&y; + std::cout << "尝试修改常量指针:肯定失败" << std::endl; + std::cout << "得出结论,常量指针指向了一个常量,无法通过常量指针修改常量,也无法修改常量指针(即无法重新指向另一个对象)" << std::endl; + + return 0; +} + + +``` + + + +#### 2.4.3 底层常量和顶层常量 + +```c++ +const int x=10;//const是顶层 +int y=2; +int *const ptr1=&y;//这里也是顶层常量 + +const int *ptr2=&x;//这是底层常量 +``` + + + +#### 2.4.4 constexpr和常量表达式 + +* 常量表达式(const expression)是指值不会改变并且在编译过程就能得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。 + +```c++ +const int x=10;//是常量表达式 +const int y=x+2;//是常量表达式 +int z=12;//不是,类型不是 +const int a=z;//不是,值不是 + +constexpr n=x;//正确,x是常量表达式 +constexpr p=a;//错误,a值不可用,因为int z不是常量表达式 +``` + +* **constexpr只能作用于常量表达式**,也就是说,constexpr只能初始化**字面值** + +```c++ +#include + +int main(){ + int x=10; +// constexpr int y=x;//int x不是常量,所以这里报错 + + const int y=x;//这里也不是常量表达式 +// constexpr y;//这里才是常量表达式 + + const int z=y; + constexpr int n=z;//这里错误 + + constexpr int a=1; + constexpr int b=a+1; + + return 0; +} + +``` + +* **其他一些字面值类型**将在7.5.6节(第267页)和19.3节(第736页)介绍。 + +* 一个constexpr指针的初始值必须是nullptr或者0,或者是存储于某个固定地址中的对象。**目前只能等于0或nullptr** + +```c++ +#include + +int main(){ + int x=10; +// const int y=x;//y不是一个常量表达式 + const int y=11; +// constexpr const int *const ptr=&y;//&y不是一个常量表达式,因为内存地址不确定 + + constexpr int *ptr=0; + + return 0; +} + +``` + + + +* 6.1.1节(第184页)将要提到,函数体内定义的变量一般来说并非存放在固定地址中,因此constexpr指针不能指向这样的变量。相反的,定义于所有函数体之外的对象其地址固定不变,能用来初始化constexpr指针。同样是在6.1.1节(第185页)中还将提到,允许函数定义一类有效范围超出函数本身的变量,这类变量和定义在函数体之外的变量一样也有固定地址。因此,constexpr引用能绑定到这样的变量上,constexpr指针也能指向这样的变量。 + +***这段话的意思是全局变量作用于main函数之前,他们的地址已经固定了;*** + +```c++ +#include + +int x=10; +constexpr x=10; +//以上两个都可以,只要在函数以外 + +int main(){ + constexpr int *y=&x; + + return 0; +} +``` + +##### 指针和constexpr + +在constexpr声明中如果定义了一个指针,限定符constexpr仅对指针有效,与指针所指的对象无关,即constexpr把指针变成了一个顶级常量 + +``` +constexpr int *p=nullptr; +``` + + + +题 + +```c++ +int null=0,*p=null;//错误,指针只能赋值地址,并不是因为null +``` + + + +### 2.5 处理类型 + + + +#### 2.5.1 类型别名 + + + +* 类型别名(type alias)是一个名字,它是某种类型的同义词。它让复杂的类型名字变得简单明了、易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的。 + +两种方法定义类型别名 + +* 传统形式的别名定义 + +```c++ +typedef double dub;//dub是double的别名 +typedef dub dbu2,*ptr;//dub2是dub的别名,也就是double的别名,ptr是double*的别名; +``` + +* 新形式的别名定义 + +```c++ +using ci = const int; +ci x=12;//ci是整型常量,顾x定以后不可修改 +x=11;//会报错 + +using iptr = int*;//整形指针 +iptr ptr1,*ptr2//ptr1是整型指针,ptr2是指向整型指针的整形指针 +``` + +```c++ +#include + +int main(){ + using iptr1 =const int *const;//底层和顶层 + using iptr2 =const int*;//底层 + using iptr3 =int *const; + + int x=1; + const int y =2; + iptr1 x1=&x;//正确 + iptr1 y1=&y;//正确, + +// x1和y1都不能再改变,也不能通过指针改变指向的值 + + iptr2 x2=&x;//正确 + iptr2 y2=&y;//正确 + +// 自己本身可以再指向其他的也就是可以改变自己,但是不能改变指向值,这是一个底层常量 + + iptr3 x3=&x;//自己是一个常量不能再改变,只能指向非常量,并且可以改变指向的值 +// iptr3 y3=&y;//报错 + +// 自身不能再改变,只能指向非常量,可以改变指向值 + + return 0; +} + +``` + + + +#### 2.5.2 auto类型说明符 + + + +* auto后面定义的值必须有初始值,因为auto是通过判断初始值推断变量类型的 + +```C++ +//自适应类型 +auto x=12.1//x是浮点型 +auto x=12//整型 +auto x='A'//char型 +``` + +* auto会**忽略顶层const** + +```c++ +int x=0; +const y=x; + +auto ace1=y;//这里的ace1是整数,而不是整型常量,因为auto忽略了const顶层 +auto ace2=&y;//这里没有顶层const,对于指针来说 ,const int是底层常量 + +如果需要顶层,需要单独设置 +const auto ace3=&y;//这是一个指向整型常量的常量指针 + +//也可以设置引用类型 +auto &end1=y;//此时end1是一个引用类型,他不会改变引用对象的属性,即这里的end1引指整型常量y + +//*和&是声明符号,而不是数据类型,而非基本数据类型的一部分 +auto ace4=y,*ace5=&y;//y是整型常量,ace4是整型常量,ace5是一个整形指针,auto会忽略掉顶层常量,所以这里报错 + +//auto后面只能跟相同的数据类型 +``` + +* auto会忽略顶层常量(引用除外) + +```c++ +const int x=12; +auto a=x;//a是 +``` + +* 对于指针 + +```c++ +int x=111; +auto b=x,*ptr=&x;//正确,是int* +auto b=x,ptr=&x;//错误,前面是int,后面是int* +auto ptr=&x;//正确是int* +``` + +```c++ +#include + +int main(){ + int a=0; + const int b=a; + + auto ace1=b;//auto会忽略顶层常量,因此ace1不是常量 + ace1=12;//这里是合法的 + const auto ace2=b;//auto面对顶层常量需要在语句前面声明 +// ace2=12;//这里是非法的 + + std::cout << ace1 << " " << ace2 << std::endl; + std::cout << "面对引用" << std::endl; + +// auto &end1=32;//这里不能直接饮用字面值,因为auto忽略了顶层常量,因此end1是一个普通引用,普通引用不能引用字面值,常量引用才可以 + const auto &end1=32; + auto &end2=b;//尝试修改,无法修改 +// end2=11; + const int c=10; + const auto &end3=c; + + + std::cout << "面对指针" << std::endl; + + auto ptr1=&b; +// auto p=b,*ptr2=&b;//对于p来说,忽略了const是int形式,对于指针来说,const int b是底层常量,因此不同类型不能在一起 + + auto p2=a,*ptr3=&a; + + const int x1=12; + auto xp1=&x1; + auto *xp2=&x1; + std::cout << typeid(xp1).name() << std::endl; + std::cout << typeid(xp2).name() << std::endl; + +// *xp1=12; +// *xp2=12; + std::cout << *xp1 << " " << *xp2 << std::endl; + + return 0; +} + +``` + + + +#### 2.5.3 decltype类型提示符 + +利用decltype去定义一个未知数据类型的类型 + +加入不知道x什么类型 + +```c++ +decltype(x) y;//y和x的类型一样//引用x的类型去定义y + +decltype((x)) y=x;//双层括号或者多层括号会把类型变成一个引用,因此这里必须给引用初始化 +``` + + + +```c++ +#include + +int main(){ + int x=12; + decltype(x) y; + decltype((x)) z=x;//这里是引用,必须初始化 + + std::cout << typeid(x).name() << std::endl; + std::cout << typeid(y).name() << std::endl; + std::cout << typeid(z).name() << std::endl; + + return 0; +} + +``` + +* 赋值是会产生引用的一类典型表达式,引用的类型就是左值的类型 + +```c++ +#include + +int main(){ + int a=1,b=2; + decltype(a=b) x=a; + + std::cout << typeid(x).name() << std::endl; + std::cout << &a << std::endl; + std::cout << &x << std::endl;//地址一样说明是引用 + return 0; +} + +``` + + + +* 区别 + * auto是赋值,将对象的值直接付给新的,免去声明,自动适配类型,有个特点是,顶层常量无效 + * decltype是获得对象的类型后声明一个新的量不赋值,然后特点是双层括号直接变成引用 + + + +### 2.6自定义数据结构 + +* 数据结构是把一组相关的数据元素组织起来然后使用它们的策略和方法。(C++语言允许用户以类的形式自定义数据类型) + + + +#### 2.6.1 定义Sales——data类型 + +* 我们的类以**关键字struct**开始,紧跟着类名和类体(其中类体部分可以为空)。类体由花括号包围形成了一个新的作用域(参见2.2.4节,第43页)。类内部定义的名字必须唯一,但是可以与类外部定义的名字重复。 +* 类体右侧的**表示结束的花括号后必须写一个分号**,这是因为类体后面可以紧跟变量名以示对该类型对象的定义,所以分号必不可少: + +```c++ +sturct Sales_data{ + std::string bookNo; + unsigned units_sold=0; + double revenue=0.0; +};//这里必须有一个分号 +``` + +* C++11新标准规定,可以为数据成员提供一个类内初始值(in-class initializer)。创建对象时,类内初始值将用于初始化数据成员。没有初始值的成员将被默认初始化。 + + + +#### 2.6.2 使用类Sales_data + +```c++ +#include +#include + +struct Sales_data{ + std::string bookNo; + unsigned unit_sold=0; + double revenue=0.0; +}; + +int main(){ + Sales_data data1,data2; + std::cout << "请输入ISBN,数量,单价" << std::endl; + std::cin >> data1.bookNo >> data1.unit_sold >> data1.revenue; + std::cout << std::endl << "请再次输入" << std::endl; + std::cin >> data2.bookNo >> data1.unit_sold >> data1.revenue; + + if(data1.bookNo==data2.bookNo){ + std::cout << "两次输入的书号一样" << std::endl; + std::cout << data1.bookNo << " " << data1.unit_sold+data2.unit_sold << " " << data1.revenue+data2.revenue << std::endl; + }else{ + std::cout << "两次输入的书号不一样" << std::endl; + } + + return 0; +} +``` + + + +#### 2.6.3 编写自己的头文件 + +* 类一般不定义在函数体内。 +* 类名应该是头文件名。 +* 头文件**通常包含只能被定义一次**的实体,如类,const,constexpr变量等。 +* 头文件一旦改变,相关的源文件必须重新编译以获取更新过的声明。 + + + +* **确保头文件多次包含仍能安全工作的常用技术是预处理器**(preprocessor),它由C++语言从C语言继承而来。**预处理器是在编译之前执行的一段程序**,可以部分地改变我们所写的程序。之前已经用到了一项预处理功能#include,当预处理器看到#include标记时就会用指定的头文件的内容代替#include。 + + + +##### 头文件保护 + +`#ifdef` 判断是否定义 + +`#ifndef` + +`#define` 开始执行 + +`#endif` 结束执行 + + + +```c++ +//my.h + +#ifndef MY_H +#define MY_H//头文件保护 +#include + +struct my{ + std::string name; +}; +#endif +``` + + + +```c++ +//2.6.3编写自己的touwenjian.cpp +#include +#include "my.h"//注意这里 + +int main(){ + my a; + a.name="何小龙"; + std::cout << a.name << std::endl; + + return 0; +} +``` + + + + + + + +## 第3章 字符串、向量和数组 + + + +* string:可变长字符串 + +* vector:可变长集合 + + 以上是对内置数组的抽象 + + + +### 3.1 命名空间的using声明 + +头文件不要using声明,如果头文件里有某个using声明,那么每个使用了该头文件的文件就都会有这个声明。 + +```c++ +#include + +using std::cin; +using std::cout; +using std::endl; + +int main(){ + return 0; +} +``` + + + + + +### 3.2 标准库类型string + +* 标准库类型string表示可变长的字符序列,使用string类型必须首先包含string头文件。 +* 他是std成员,需要是哟`using std::string` + +#### 3.2.1 定义 和初始化string对象 + +方法: + +``` +string s1;//空字符串 +string s2(s1);//s1的副本 +string s2=s1;//同上 +string s3("xsxs");//s3是字面值"xsxs"的副本,除了字面值最后的两个空字符外 +string s3="xsxs";//同上 +string s4(4,'s');//ssss +``` + +* 拷贝初始化:= +* 直接初始化:() + +* 一般都可以,除了s4,一般只能直接初始化,否则需要显式初始化 **`string s4=string(4,'s')`** + +```c++ +#include + +using std::cin; +using std::cout; +using std::endl; +using std::string; + +int main(){ + string name="何小龙"; + + cout << name << endl; + + string name1; + string name2(name1); + + string name3("何夕"); + string name4="Nie"; + + string name5(4,'A'); +// string name6(4,"张旭东");//只能一个字符 + string name7=string(4,'龙');//只能用单引号,多字节字符常量好像无法显示 + + cout << name1 << endl; + cout << name2 << endl; + cout << name3 << endl; + cout << name4 << endl; + cout << name5 << endl; + //cout << name6 << endl; + cout << name7 << endl; + + return 0; +} + +//输出 +//何小龙 +// +// +//何夕 +//Nie +//AAAA +//���� + +``` + + + +#### 3.2.2 string对象的操作 + +方法: + +| | | +| ----------------- | --------------------------- | +| `os<>str` | 从输入流中读取字符串赋给str | +| `getline(is,str)` | 从输出流中读取一行给str | +| `str.empty()` | str是空的,返回true | +| `str.size()` | 返回str中的字符个数 | +| `str[n]` | 返回第n+1个字符的引用 | +| `str1+str2` | 返回他们的拼接 | +| `str1=str2` | 将str2的副本替换str1 | +| `str1==str2` | 完全相等,大小写敏感 | +| `str1!=str2` | 不相等 | +| <,<=,>,>= | 字典中顺序比较,大小写敏感 | + + + +```c++ +#include +#include + +using std::string; +using std::cout; +using std::cin; +using std::endl; + +int main(){ + string name="何琋"; + string love="Ying"; +// string aa="nihao"+"你好"+name;//两个单独的字面值无法相加 + + string message=name+" love "+love; + cout << message << endl; + cout << "message的字符个数是:" << message.size() << endl; + cout << message[0]; + + string str; + cout << "输入1结束" << endl; + while(cin>>str){//不读到数据不会停止。。。 + cout << endl << str.size() << "个字符" << endl; + if(str=="1"){//回车符不算空 + cout << "空字符" << endl; + break; + }else{ + cout << str << endl; + } + } + cout << str << endl; + while(getline(cin,str)){//这里会首先启动一次 + if(str.empty()){ +// break; + cout << "?" << endl; + }else{ + cout << "-----" << str << endl; + } + } + return 0; +} +``` + +* string读取输入流时最后的换行符被丢弃了 + +##### string::size_type类型 + +是取字符串中的字符的类型,它是一个新类型 + +```c++ +auto x=str.size();//x类型是string::size_type +``` + +!!! `string x="xsxs"+"xsxs";//非法`两个运算符都不是string类型,两个字面值无法相加 + + + +#### 3.2.3 处理string对象中的字符 + +* 建议:使用C++版本的C标准库头文件C++标准库中除了定义C++语言特有的功能外,也兼容了C语言的标准库。C语言的头文件形如name.h,C++则将这些文件命名为**cname**。也就是去掉了.h后缀,而在文件名name之前添加了字母c,这里的c表示这是一个属于C语言标准库的头文件。 + +**cctype头文件中的函数**: + +| | | +| ----------- | -------------------- | +| isalnum(c) | 判断是否是字母或数字 | +| isalpha(c) | 字母 | +| iscntrl(c) | 控制字符 | +| isdigit(c) | 数字 | +| isgraph(c) | 不是空格但可以打印 | +| islower(c) | 小写字母 | +| isprint(c) | 可打印 | +| ispunct(c) | 标点 | +| isspace(c) | 空白 | +| isupper(c) | 大写字母 | +| isxdigit(c) | 16进制数 | +| tolower(c) | 变小写 | +| toupper(c) | 变大写 | + + + +**处理每个字符:** + +```c++ +string x="xsaxasxaxaxcweciuwydckxaiojcnidvksuxijOnkjuykschijxoknjcruveiaxsk"; +for (auto i:x){ + cout << "打印每个字符" << i; +} +for (auto &i:x){ + //这里是引用,可以修改原来的值 + touppper(i);//变大写 +} +``` + + + +* 使用下标访问string中的单个字符,访问超出范围会出错,因此下标大于等于0小鱼s.isze() + + + +下表的值称为下标或者“索引”。 + + + +```c++ +#include +#include + +using std::string; +using std::cout; +using std::cin; +using std::endl; + +int main(){ + string str="xasxasxasxcsdklvhsabjvksanvhsluv"; + getline(cin,str); + for (auto &i:str){ + i='X';//字符替换必须用'' + } + cout << str << endl; + + return 0; +} +``` + + + +### 3.3 标准库类型vector + +* 标准库类型vector表示对象的集合,其中所有对象的类型都相同。因为vector“容纳着”其他对象,所以它也常被称作**容器(container)**。 + +* 使用vector,他是一个**类模板**,模板本身不是类和函数,编译器根据模板创建类或函数的过程称为**实例化(instantiation)**,当使用模板时,需要指出编译器应把类或函数实例化成何种类型。 + +```c++ +#include +std::vector; + +int main(){ + vector a;//保存为int形式 + vector b;//保存为Sales_item形式 + vector> file;//保存为vector对象 +} + +``` + +* vector不能保存引用,其他可以容纳绝大多数对象 +* 定义格式和老版本有些不一样 + + + +#### 3.3.1 定义和初始化vector对象 + +初始化: + +| | | +| ----------------------- | ------------------------------------------------ | +| vector v1 | 空对象,潜在元素类型是T,执行默认初始化 | +| vector v2(v1) | v2中包含v1的所有副本 | +| vector v2=v1 | 同上 | +| vector v3(n,val) | 包含了n个val | +| vector v4(n) | v4包含了n个重复执行了值初始化的对象 | +| vector v5{a,b,c,...} | 包含了初始值个数的元素,每个元素被赋相应的初始值 | +| vector v5{a,b,c,...} | 同上 | + +```c++ +vector art={"a","an","the"}; +vector art=()"a","an","the");//错误,不能使用圆括号初始化 +``` + +* 值初始化 + +```c++ +vector a(10);//10个元素,每个初始化为0 +vector b(10);//10个元素,每个都是空的string + +``` + +**使用以上方式,其对象类型必须支持默认初始化** + + + +```c++ +vector a=(10,10);//10个10元素 +vector b={10,10};//两个元素,为10和10 + +vector c=(10);//初始化10个空元素 +vector d={10};//初始化一个10元素 + +//如果在花括号里使用了数字,但是不是初始化类型,就会变成和圆括号一样 +vector e=("hi");//不能使用字面值 +vector f={"hi"};//初始化后包含一个“hi”元素 + +vector g={10};//由于10不能用来初始化string,索引变成了初始化10个空元素 +vector h={10,"10"};//初始化10个“10”元素 +``` + +**以上内容说明,初始化中花括号和圆括号的实际意义需要根据环境判断** + + + +```c++ +#include +#include +#include + +using std::string; +using std::vector; +using std::cout; +using std::cin; +using std::endl; + +int main(){ + vector a{1,2,3,4,5}; + for (auto i:a)cout << i << endl; +// cout << a << endl;//不能直接输出 + + cout << "以上为尝试输出vector对象中的元素" << typeid(a).name() << endl; + + vector b=a; + for (auto i:b)cout << i << ","; + cout << endl; + vector c(10); + vector d(10,12); + for (auto i:c)cout << i << ","; + cout << endl; + for (auto i:d)cout << i << ","; + cout << endl; + + vector e{10,"GY"};//这里花括号就适应了环境,因为这里不能初始化字面值 + for(auto i:e)cout << i << " "; + cout << endl; + + vector> f{a,b,c,d}; + for(auto i:f){ + for(auto j:i)cout << j << " "; + cout << endl; + } + + return 0; +} + +``` + + + +#### 3.3.2 向vector中添加元素 + +```c++ +vector a; +a.push_back(1); +``` + +`obj.push_back(obj_type)` + +```c++ +#include +#include + +using std::vector; +using std::cout; +using std::endl; + +int main(){ + vector a; + a.push_back(1024); + + for(int i=0; i<=512; i++){ + a.push_back(i); + } + + for(auto i:a)cout << i << endl; + return 0; +} +``` + + + +#### 3.3.3 其他vector操作 + +| | | +| ---------------- | ---------------------------- | +| v.empty() | 叛空 | +| v.size() | 元素个数 | +| v.push_back(x) | 向v的末尾添加一个值为x的元素 | +| v[n] | 返回v第n位置上的元素**引用** | +| v1=v2 | v2替换v1中的元素 | +| v1={a,b,c,d,...} | 列表替换v1 | +| v1==v2 | 判相等 | +| v1!=v2 | 不相等 | +| <,<=,>,>= | 字典顺序比较 | + + + +##### **? size_type** + +要使用size_type,需首先指定它是由哪种类型定义的。vector对象的类型总是包含着元素的类型。 + +```c++ +vector::size_type; +vector::size_type;//错误,没有指明类型 +``` + +* 不能用下表添加元素 +* 只能对已知元素进行下标操作 +* **用下标访问不存在的元素:所谓的缓冲区溢出(buffer overflow)指的就是这类错误,这也是导致PC及其他设备上应用程序出现安全问题的一个重要原因。** + + + + + +### 3.4 迭代器 + + + +#### 3.4.1 使用迭代器 + +v.begin()//第一个元素 + +v.end()//**最后一个元素的后一个(不存在的元素,容器之外)**,当容器为空时,begin=end + +v.cbegin()//常量 + +v.cend()//常量 + +```c++ +using std::vector; + +vector x{}; +auto a=x.begin(),b=x.end(); +``` + + + +| | | +| --------------- | ------------------------------------------------ | +| *iter | 返回迭代器iter所指的元素 | +| iter->mem | 解引用iter并获取名为mem的成员,等价于(*iter).mem | +| ++iter | 指向容器的下一个元素 | +| --iter | 指向容器的上一个元素 | +| iter1==iter2 | 判断两个是不是同一个 | +| iter1!=iter2 | | +| (*iter).empty() | 判空 | + + + +```C++ +//3.3.4使用迭代器 +#include + +using std::cout; +using std::string; +using std::endl; + +int main(){ + string a="Hello World!"; + + if(a.begin()!=a.end()){//判断对象非空 + auto x1=a.begin(); + *x1='h'; + cout << *x1; + ++x1; + cout << *x1; + } + cout << a; + return 0; +} +``` + + + +* 在迭代器里面不能给容器添加元素,push_back() + + + +#### 3.4.2 迭代器运算 + +++iter每次只移动1个元素 + +string和vector支持多位移动 + +| | | +| ----------- | --------------------- | +| Iter + n | iter后第n位元素 | +| Iter - n | iter前第n位元素 | +| iter += n | iter=iter+n | +| iter -= n | | +| Iter1-iter2 | **他们之间的距离** ? | +| >,<,<=,>= | 比较位置 | + +算术运算: + +```c++ +auto mid=v.begin()+v.size()/2;//得到的是v的中间元素,v.size()是一个整数,相当于上面的移位 + +auto it=v.begin; +++it; +if(it + +using namespace std; + +int main(){ + string a="GY i missing you!"; + + for(auto i=a.begin();i + +using namespace std; + +int main(){ + string str[]={"abc","你在做什么"}; + cout << str[0] << endl; + cout << str[1] << endl; + + int a[3]; + int b[]={1,2,3,4}; + int c[2]={2,4}; +// int d[2]={1,2,3};//错误,初始值超出容器 + int e[5]={1,2,3};//相当于{1,2,3,0,0} + +//不能赋值 +// int f[]=e;//这里报错,不能使用数组初始化数组 +// int g[5]; +// g=e;//不能把数组赋值给另一个数组 + + + + char cha[]="master";//字符数组可以使用字面值 + char chb[]={'a','b','c'};//最后有一个空字符 + char chc[3]="ab";//这里chc已经装满了,还有一个位置要留给空字符 + +//指针数组和数组指针 + int *pa[23];//含有23个整形指针的数组, + int (*pb)[3]=&a;//pb是指针,指向一个数组,这里维度需要和被指对象维度相同 + int *(*pc)[23]=&pa;//pc是一个指针,他指向一个包含23位整形指针的数组 + +//引用 +// int &ma[10];//引用不是对象,一次不能成为数组; + int (&mb)[5]=e;//引用一个数组,而且需要初始化 + + return 0; +} + +``` + + + +#### 3.5.2 访问数组中的元素 + +* 下标访问,注意不能访问数组之外的元素,否则会报错 + + + +#### 3.5.3 指针和数组 + +使用数组时,编译器一般会把他转换为指针 + +数组元素也是对象,因此可以对其使用取址符 + +对于很多用到数组名的地方,编译器会把它替换成数组第一个元素的地址 + +```c++ +string num[2]; +string *ps=num;//等价于ps=&num[0] +``` + +* ¥¥ **数组名代表数组的首地址**,是一个指针,所以不用加&符号。如果是引用数组的元素,就必须得加&符。 +* 因此,auto数组对象,实际上是一个指针 +* 但是decltype初始化得到的依然是一个数组 +* 指针也是迭代器,所以可以对指针进行迭代器操作 + +* 下标运算和指针运算类似 + +```c++ +//3.5.3指针和数组 + +#include +using namespace std; +int main(){ + string num[2]; + string *ps=num; + string *ps0=&num[0]; + string *ps1=&num[1]; + cout << ps << endl << ps0 << endl << ps1 << endl; + num[0]="xasxasxasxassvasuyijovibfhdmxjvbcsnly"; + cout << ps << endl << ps0 << endl << ps1 << endl; + int num2[2]; + +// for (int i=0;i<100;i++){ + cout << &num[0][0]; +// } + +// cout << num[0] << endl; + cout << &num2[0] << endl << &num2[1] << endl; +// cout << string.max_size() << endl; + +//指针式迭代器,所以可以进行迭代器操作 + int a[]={1,2,3,4,5,6,7,8,9,0}; + int *pa=a;//这里数组名其实就是数组的地址,因此不需要取址符 + int *e=&a[10];//这里取不存在的数组元素的意义在于,得到尾后地址 +//妈的原来学过的begin()和end()就可以 + for(pa=a;pa + +using namespace std; + +int main(){ + int arr[3][3]={1,2,3,4,5,6,7,8,9}; + + int (*ptr)[3]=arr;//ptr指向包含三个元素的数组 + + for (int i=0;i<3;i++){ + cout << *ptr << " " << ptr << endl; + int *pts=(*ptr);//这里代指第一维数组 + for (int j=0;j<3;j++){ + cout << *pts; + ++pts; + } + cout << endl; + ++ptr; + } + for(auto a=begin(arr);a + +using namespace std; + +int main(){ + int a=12,b=5; + double c=12.333,d=2.71828; + + cout << "a/b: " << a/b << endl; + cout << "a%b: " << a%b << endl; + + cout << "c/d: " << c/d << endl; +// cout << "c%d: " << c%d << endl;//这里面对两个浮点型,%(取余)只能存在于两个整数之间 + + return 0; +} +``` + + + +### 4.3 逻辑和关系运算符 + +* 关系运算符作用于指针或算数类型 +* 逻辑运算符可以作用于任何能够转换为布尔型的类型 + +逻辑运算符和关系运算符: + +| 运算符 | 功能 | +| ------ | ------ | +| ! | 逻辑非 | +| < | | +| <= | | +| > | | +| >= | | +| == | 相等 | +| != | | +| && | 逻辑与 | +| \|\| | 逻辑或 | + +优先级:逻辑非>大小比较>逻辑与和逻辑或 + +* 对于逻辑与运算符来说,当且仅当**左侧运算对象为真**时才对右侧运算**对象求值**。 +* 对于逻辑或运算符来说,当且仅当**左侧运算对象为假**时才对右侧运算对象求值。 + + + +* 因为关系运算符的求值结果是布尔值,所以将几个关系运算符连写在一起会产生意想不到的结果: + +```c++ +a + +using namespace std; + +int main(){ + int a=32,b=0; + + string c,d="xsx";//string无法直接转化为布尔型 + + if(a)cout << "a不等于0" << endl; + if(!b)cout << "b等于零" << endl; + +// if(c)cout << "c是空字符" << endl; +// if(!c)cout << "c是空字符" << endl; +// if(d)cout << "d含有字符" << endl; + + return 0; +} +``` + + + +### 4.4 赋值运算符 + +* 赋值运算左侧必须是变量(可修改的值),不能给常量 赋值 +* 赋值左右两侧的数据类型应该是相同的(右侧结果的类型),如果不相同,在规则允许范围内会自动转化为左值得类型,非法例如不能把指针赋值给整数,这是无法转换的 +* 赋值运算优先级较低,当右侧运算完了,赋值符号才会把右值赋给左值 + +* c++允许赋值符号作为条件,但是会发生不可预测的结果如if(a=b)把b的值赋给了a,再判断a + +```c++ +//4.4 赋值运算符 +#include +#include +using namespace std; + +int main(){ +// int a={1.2};//查看编译器结果,不能讲浮点型赋值给整型 + + vector b; + b={1,2,3,4,5}; + + return 0; +} +``` + + + +### 4.5 递增和递减运算符 + +前置和后置 + +```c++ +//4.5 递增和递减运算符 +#include + +using namespace std; + +int main(){ + int a=1; + int b=a++; + cout << a << " " << b << endl;//先赋值后进行加法 + int c=++a; + cout << a << " " << c << endl;//先进行递增然后再赋值 + + int arr[]={1,2,3,4,5,6,7,8,9}; + auto d=begin(arr); + d++; +// *d++;//递增运算不可以解引用 + cout << *++d << endl; + cout << d++ << endl; + return 0; +} +``` + + + +* 建议不要用后置版本(for 循环除外除非自己想在开始就加1) + + + +### 4.6 成员访问运算符 + +```c++ +//4.6 成员访问运算符.cpp +#include +#include + +using namespace std; + +int main(){ + string a="i missing gy",*b=&a; + cout << (*b).size() << endl; + cout << b->size() << endl;//这俩等价 +// cout << *b.size() << endl;//这里b是指针,没有size成员 + + return 0; +} +``` + + + +### 4.7 条件运算符 + +```c++ +a ? b : c; +//判断a正确否,正确输出b,否则输出c,可以赋值 +``` + + + +### 4.8 位运算符 + +? + + + +### 4.9 sizeof运算符 + +返回一个表达式或者类型名字所占的**字节数** + +sizeof() + + + +### 4.10 逗号运算符 + +```c++ +int x,y,z; +``` + + + +### 4.11 类型转换 + +隐式转换 + +```c++ +//4.11.test.cpp +#include + +using namespace std; + +int main(){ + int a=1.22+5;//发生了隐式转换,这里先把5转化为浮点型,在进行计算,最后把值赋给整数类型 + + cout << a << endl; + + return 0; +} +``` + + + +* 计算中把比int小的整数先转化为int +* 在条件中先把非布尔值转化为布尔值 +* 初始化时,初始值转化为变量类型,赋值时把右侧类型转化为左侧类型 +* 关系式中有很多类型,需要转换成一样的 +* 函数调用时也会发生关系转换 + + + +#### 4.11.1算数转换 + +**整型提升**:将小整型转换为较大的整型,如bool,signed char,char,unsigned char,short和unsigned short只要他们能放在int里面,都会提升为int,否则提升为unsigned int,像bool中false提升为0,较大的char会提升为更高类型 + +无符号类型和有符号类型相加,可能会出现溢出 + + + +#### 4.11.2 其他隐式类型转换 + +**数组名转换成指针**:数组再遇到指针时会主动转换为指针形式 + +```C++ +int a[10]; +int *b=a;//这就是这里为什么不用取址符的原因 +``` + +但是数组遇到decltype,sizeof,typeid时不会发生上述转换 + +**指针的转换**:整数0和nullptr能转化成任意类型的指针,void\*可以应对任何非常量类型,const void\*可以面对所有,后面还会讲到关于继承 + +**转化成布尔类型**:如果指针或算数类型的值为0,转换为false,否则为true + +**转换为常量**:允许指向非常量的指针转换成指向常量的指针 + +**类类型定义的转换**:编译器自动转换,不过一次只能执行一种类型转换,string会将字面值转换成str型 + +**条件**:之前cin输入判断,将输入类型转化为条件类型 + + + +#### 4.11.3 显式转换 + +* 强制转换非常危险 + +**命名的强制转换**:`cast-name(expression)`,其中type是要转换的类型,expression是需要转换的值,cast-name是static_cast,dynamic_cast,const_cast,reinterpret_cast的一种,dynamic_cast支持类型识别 + +任何具有明确定义的类型转换,只要不包含底层const都可以使用 **static_cast** + +```c++ +int a=1,b=2; +double c=static_cast(a)/2;//这样子就可以得到浮点结果 +``` + +```c++ +//4.11.3.1显式转换.cpp +#include + +using namespace std; + +int main(){ + int a=1,b=2; + double c=1/2; + cout << c << endl;//这里依然是整型,因为右边线进行计算,得到的是整数 + double d=static_cast(a)/b; + cout << d << endl;//这里先将a转化为双精度,此时隐式转换发生b为了和双精度的a进行计算,会先转化为双精度,然后将值赋给左边 + cout << static_cast(a)/b << endl;//此处不能讲这个值赋给c再输出。。。 + return 0; +} +``` + +当把一个比较大的类型值赋给较小的类型时static_cast非常有用,会避免警告 + +static_cast对编译器无法执行的类型转换也很有用 + +const_cast只会转化底层const + +* 旧式强制转换格式 + +`(type)expression` c形式 + +`type(expression)` 函数式 + +```c++ +#include + +using namespace std; + +int main(){ + int a=12; + void *b=&a; + double *c=static_cast(b); + cout << &a << endl; + cout << c << endl; + cout << b << endl; + + cout << a << endl; +// cout << *b << endl; + cout << *c << endl; +//虽然指向了同一个位置,取值时发生了错误 + return 0; +} +``` + + + + + +### 4.12 **运算符优先级表** + + + + + +## 第5章 语句 + +C++提供了条件执行语句、重复执行相同代码的循环语句和用于中断当前控制流的跳转语句。 + + + +### 5.1 简单语句 + +* 以分号结束就构成了一个语句 + +* 空语句直接用;结束,使用空语句最好用注释说明 + +* 多余的空语句并非都是无害的 + +```c++ +while(1);//这里会一直循环下去 +``` + +* 复合语句(块)用花括号括起来的语句,一个块就是一个作用域,块不用以分号结束 + +### 5.2 语句作用域 + +可以在if、switch、while和for语句的控制结构内定义变量。定义在控制结构当中的变量只在相应语句的内部可见,一旦语句结束,变量也就超出其作用范围了: + +```c++ +while(int i=1)cout << i << endl; +i=2;//错误,超出作用域,解析器会提示未定义的量 +``` + +### 5.3 条件语句 + +#### 5.3.1 if语句 + +if的作用是,判断语句是否为真,真直接执行后面的花括号块,否则执行else的块 + +```c++ +if (condition){ + statement +}else if(condition){ + statement +}else{ + statement +} +``` + +#### 5.3.2 switch语句 + +类似于选择题 + +```c++ +//计算元音字母在字符串中的出现次数 +int a=0,e=0,i=0,o=0,u=0; +char s; +while(cin >> s){ + switch(s){ + case 'a': + ++a; + break; + case 'e': + ++e; + break + case 'i': + ++i; + break + case 'o': + ++o; + break + case 'u': + ++u; + break + } +} +``` + +* **如果某个case标签匹配成功,将从该标签开始往后顺序执行所有case分支**,除非程序显式地中断了这一过程,否则直到switch的结尾处才会停下来。要想避免执行后续case分支的代码,我们必须显式地告诉编译器终止执行过程。大多数情况下,在下一个case标签之前应该有一条**break语句**。 + +也就是说执行case后不会主动结束,他会继续执行后面的所有语句,所以执行完我们要使用break语句显式结束switch。 + +当然也可以利用这个特性,但是做好加上注释 + +* default,如果case都没有匹配,则默认执行这个,他和case一样,得家伙少年宫break语句结束。 + +* 内部变量的定义,不能跨case使用定义的变量,如果要使用,做好在块内,case之前 + +```c++ +#include + +using namespace std; + +int main(){ + int i=1; + switch(i){ + case 1://数字不用加引号,char单引号,字符串双引号 + cout << 1 << endl; + break; + case '2': + cout << 2 << endl; + break; + } + + return 0; +} +``` + + + +### 5.4 迭代语句 + +迭代语句通常称为循环 + +* while和for语句在执行循环体之前检查条件,**do while语句先执行循环体**,然后再检查条件。 + +#### 5.4.1 while语句 + +只要条件为真,while就会执行下去 + +```c++ +while(true)执行; +``` + +while的条件部分可以是表达式,也可以是一个初始化的变量。 + +#### 5.4.2 传统的for语句 + +```c++ +for(initializer,condition,express){ + statement +} +``` + +一般情况下,initializer是一个初始化的值,C++支持在这里初始化,condition是运行条件,满足才可以执行for中的块,expressgy是执行的语句,一般负责修改条件语句中的值。 + +* for循环内定义的值只在for循环内部可用 + +initializer可以定义过个值 + +省略condition等于true,for循环会一直进行下去,除非内部有退出循环的语句 + +expression也可以省略 + + + +#### 5.4.3 范围for循环 + +C++11新标准引入了一种更简单的for语句,**这种语句可以遍历容器或其他序列的所有元素**。范围for语句(range for statement)的语法形式是: + +```c++ +for(declaration : expression)statement; +``` + +expression必须是一个序列,比如花括号括起来的初始值列表,数组,vector,string都可以。 + +declaration定义变量,这里坐哈使用auto类型说明符,如果需要对序列中的元素执行操作,则使用引用类型。 + + + +#### 5.4.4 do while语句 + +do while和while基本一样,只是do while会先执行循环体再检查 + +```c++ +do + statement +while(condition);//注意这里的分号 +``` + +```c++ +do{ + cout << "Hello World!" +}while(0);//及时条件为假,也会先执行do一次 +``` + + + + + +### 5.5 跳转语句 + +* 跳转语句中断当前的执行过程。C++语言提供了4种跳转语句:**break、continue、goto和return。** + +#### 5.5.1 break语句 + +* break语句(break statement)负责**终止 *离它最近* 的while、do while、for或switch语句**,并从这些语句之后的第一条语句开始继续执行。 + +* break只能出现在循环语句中(迭代语句) + +#### 5.5.2 continue语句 + +* continue语句(continue statement)终止最近的循环中的**当前迭代 **并立即开始下一次迭代。 + +#### 5.5.3 goto语句 + +goto语句(goto statement)的作用是从goto语句**无条件跳转到同一函数内**的另一条语句。 + +```c++ +goto label; + +... +label: +... +``` + +```c++ +goto xxx; + +int a=0; + +xxx: + +cout << a << endl;//错误,goto跳转忽略了定义关键字a +``` + +* 尽量不要使用 goto + +### 5.6 try语句块和异常处理 + +异常是指运行时的反常行为,这些行为超出了函数的正常工作范围,典型的异常有数据库连接失败,遇到意外输入。 + +c++异常处理 + +* throw表达式 +* try语句块:以一个或者多个catch结束 + +* 一套异常类:用于在throw表达式和相关的catch子句之间传递异常的具体信息 + +#### 5.6.1 throw表达式 + +抛出异常,将终止当前函数,并把控制权交给能处理该异常的代码 + +```c++ +if (0){ + throw runtime_error("错误信息"); +} +``` + +* 类型runtime_error是标准库异常类型的一种,定义在stdexcept头文件中。关于标准库异常类型更多的知识将在5.6.3节(第176页)介绍。我们必须初始化runtime_error的对象,方式是给它提供一个string对象或者一个C风格的字符串(参见3.5.4节,第109页),这个字符串中有一些关于异常的辅助信息。 + + + +#### 5.6.2 try语句块 + +语法格式 + +```c++ +try { + //尝试运行 +}catch(exception-declaration){ + //异常处理 +}catch(exception-declaration){ + //异常处理 +}//..... +``` + +```c++ +try{ + //尝试运行 +}catch(runtime_error err){ + cout << "出现错误" << endl; +} +``` + +#### 5.6.3 标准异常 + +C++标准库定义了一组类,用于**报告标准库函数遇到的问题**。这些异常类也可以在用户编写的程序中使用,它们分别定义在**4个头文件**中: + +* exception头文件:定义了最通用的异常类,只报告异常发生,不提供任何额外信息 +* stdexcept头文件:定义了几种常用的异常类,表5.1 +* new头文件:定义了bad_alloc异常类型 +* type_info头文件:定义了bad_cast + +| | | +| ---------------- | ------------------------------ | +| exception | 最常见错误 | +| Runtime_error | 运行时才能检测的错误 | +| Range_error | 运行时错误,超出有意义的值范围 | +| Overflow_error | 运行时错误,计算上溢出 | +| Underflow_error | 运行时错误,计算下溢出 | +| Logic_error | 逻辑错误 | +| Domain_error | 逻辑错误,参数对应结果值不存在 | +| Invalid_argument | 逻辑错误,无效参数 | +| Length_error | 逻辑错误,超出类型最大长度 | +| Out_of_range | 逻辑错误,使用超出范围的值 | + + + + + +## 第6章 函数 + +* 函数是一个命名了的代码块,我们通过调用函数执行相应的代码。函数可以有0个或多个参数,而且(通常)会产生一个结果。可以重载函数,也就是说,同一个名字可以对应几个不同的函数。 + +### 6.1 函数基础 + +一个典型函数,包括:返回类型,函数名字,由0或多个形参组成的列表以及函数体。其中形参用逗号隔开。 + +* 大多数类型都能用作函数的返回类型。一种特殊的返回类型是void,它表示函数不返回任何值。**函数的返回类型不能是数组类型或函数类型,但可以是指向数组或函数的指针。**我们将在6.3.3节(第205页)介绍如何定义一种特殊的函数,它的返回值是数组的指针(或引用),在6.7节(第221页)将介绍如何返回指向函数的指针。 +* 在调用函数时,实参也可以被转换如形参是int时,实参是一个浮点型,将会被整形化。 +* 为了与c语言兼容无形参的函数可以这样写 `int x(void){};`这里`void`可以省略 + +```c++ +//6.1.test.cpp +#include + +using namespace std; + +int fact(int x);//如果函数出现在调用之后,需要声明 + +int main(){ + cout << "请输入一个数,将计算它的阶乘" << endl; + + int x; + cin >> x; + cout << "阶乘为:"; + cout << fact(x) << endl; + + return 0; +} + +int fact(int x){ + int i,j; + for(i=1;i<=x;i++){ + j =i*j; + } + + return j; +} +``` + + + +#### 6.1.1 局部对象 + +C++语言中,名字有作用域,对象有生命周期。 + + + +* 名字的作用域是程序文本的一部分,名字只在其作用域内可见 +* 对象的生命周期是程序执行过程中该对象存在的一段时间 + +**自动对象**:函数控制语句经过定义变量时创建该对象,当这个块结束时自动销毁,块中自动创建的对象称为自动对象,形参也是自动对象 + +**局部静态对象**:变量从定义开始贯穿全局,知道整个程序结束。 + +```c++ +//函数调用计数 +int a(){ + static int i=0;//调用结束后,这个值依然有效 + return ++i; +} + +int main(){ + for (int a=0;a<10;a++){ + cout << a() << endl; + } +} +``` + + + +#### 6.1.2 函数声明 + +函数在使用前需要声明 + + + +### 6.1.3 分离式编译 + +分割文件 + + + +### 6.2 参数传递 + +#### 6.2.1 传值参数 + +通过指针,可以通过调用函数修改函数外的值 + +```C++ +//6.2.1传值参数.cpp +#include + +using namespace std; + +void x(int *i); + +int main(){ + int i=12; + x(&i); + cout << i << endl; + + return 0; +} + +void x(int *i){ + *i=0;//这里修改了i所指的对象的值; + i=0;//这里只是修改了i所指的对象; +} +``` + +#### 6.2.2 传引用参数 + +```c++ +void a(int &i){ + i=111; +} + +int main(){ + int x=2; + a(x); + + return; +} +``` + +* 一个函数只能返回一个值,然而有时函数需要同时返回多个值,**引用形参为我们一次返回多个结果提供了有效的途径。** + + + +#### 6.2.3 const形参和实参 + +* 当用实参初始化形参时会忽**略掉顶层const**。换句话说,形参的顶层const被忽略掉了。 + +因此,可以这样子。 + +```c++ +//6.2.3const形参和实参.cpp +#include + +using namespace std; + +void fa(const int as); +void fb(int as); + +int main(){ + int x=1,y=2; + const int a=1,b=2; + + fa(x); + fa(a); + + fb(y); + fb(b); + + return 0; +} + +void fa(const int as){ +// 无法修改值 +} + +void fb(int as){ +// 可修改值 + as=12; + +} +``` + + + +#### 6.2.4 数组形参 + + + +形参传递数组,实际上是引用数组的指针 + +```c++ +void a(int *a); +void a(int a[]); +void a(int a[10]);//注意这里的维度限定 + +//以上实际上效果一样 +``` + +* 如果我们传给函数的是一个数组,则**实参自动地转换成指向数组首元素的指针**,数组的大小对函数的调用没有影响。 +* 和其他使用数组的代码一样,以数组作为形参的函数也必须确保使用数组时不会越界。 + +**使用标准库规范判断数组长度** + +**传递一个表示数组大小的形参** + +* 数组形参和const + + 一般不改变数组内容时,可以使用const + +* 数组引用形参 + + ```c++ + f(int (&a)[10]); + ``` + + + +***引用不是对象,没有指针*** + +```c++ +//6.2.4.2数组参数.cpp +#include + +using namespace std; + +void showarr(int *&a); +void showptr(int *&a); + +int main(){ + int arr[]={1,4,7},*p=arr;//使用这个例子中的做法需要先把数组显式转化为指针 + showarr(p); + int a=12,*ptr=&a; + showptr(ptr); + cout << a << endl; + return 0; +} + + +void showarr(int *&a){ + cout << *a << endl; + a++; + cout << *a << endl; +} + +void showptr(int *&a){//这里是对数组的引用 + cout << *a << endl; + *a=11; +} +``` + +* 引用不能用指针,只能使用*& +* 对数组进行引用使用指针的方式时,必须显式的转化数组为指针 + +```c++ +//6.2.4.3数组参数.cpp +#include + +using namespace std; + +void ass(int (&a)[4]); + +int main(){ + int a[]={12,222,3,44}; + ass(a); + return 0; +} + +void ass(int (&a)[4]){//这里必须指明维度 + cout << a[0] << endl; +} +``` + +* 使用这种方式,必须指明维度 + + + +#### 6.2.5 main:处理命令行选项 + +```c++ +#include +using namespace std; +int main(int argc,char *argv[]) +//第一个参数是命令行键入的参数个数 +//第二个参数是命令行参数的尸体,以空格分开,还可以写成char ** argv +{ + cout << "argc= " << argc << endl; + for (int i = 0; i + +using namespace std; + +string read(); + +int mian(){ + bool read =false;//这里隐藏掉了外部的read()函数 + string s=read();//错误,上一个语句造成外部的read()函数呗 +} +``` + +**使用过后再定义** + +```c++ +#include + +using namespace std; + +int a(); + +int main(){ + cout << a() << endl; + + string a="xsaxa";//使用过后再重新定义也是可行的 + + cout << a << endl; + + return 0; +} + +int a(){ + return 2; +} +``` + + + +### 6.5 特殊用途语言特性 + +#### 6.5.1默认实参 + +定义函数时可以定义默认的参数 + +**一旦某个形参被赋予了默认值,它后面的所有形参都必须有默认值。** + +```c++ +#include + +using namespace std; + +//void a(int i1=1,int i2);//有默认值的后面的参数都必须有默认值 +void a(int i1,int i2=2); + +int main(){ + a(1,2); + return 0; +} + +void a(int i1,int i2){ + cout << i1 << i2 << endl; +} +``` + +使用默认实参函数,尽量吧不需要修改的放在后面,因为前面的不能空 + +#### 6.5.2 内联函数和constexpr函数 + +调用函数一般比求等价表达式的值要慢一些。 + +**内联函数可避免函数调用的开销** + +> 吧函数表达式直接放在普通表达式中间,就相当于在普通表达式中执行了函数的内容,这样会避免函数的调用开销(对寄存器的操作) + +```c++ +cout << a(s1,s2) << endl; +// 相当于 +cout << s1 + +using namespace std; + +void f(int); +//void f(int,int=2); + +int main(){ + f(2);//call to 'f' is ambiguous,函数调用不明确 + + return 0; +} + +void f(int x){ + cout << x << endl; +} + +void f(int x,int y){ + cout << x << endl; +} +``` + +#### 6.6.1 实参类型转换 + +为了确定最佳匹配,编译器将实参类型到形参类型的转换划分成几个等级: + +1. 精确匹配 +2. 通过const转换实现的匹配 +3. 通过类型提升实现的匹配 +4. 通过算术类型转换 +5. 通过类类型转换实现的匹配 + + + +### *6.7 函数指针 + +指针函数 + +```c++ +int *a();//本身是一个指针,返回的是int +``` + +函数指针 + +```c++ +int (*a)();//返回的事一个指针 +``` + +函数指针的调用可以不需要解引用 + +```c++ +int (*a)(int); + +int i1=a(2); +int i2=(*a)(2);//这俩等价 +``` + + + +**重载函数的指针** + +指针类型必须精确匹配 + + + + + +## 第7章 类 + +使用类定义自己的数据类型 + +基本思想:数据抽象和封装,数据抽象以来接口和实现分离的程式设计技术 + +### 7.1 定义抽象数据类型 + + + +## 第7章 类<皮德常> + +过程化程序设计的缺陷: + +1 大量的全局变量 + +2 陈旭复杂,成千上万的函数 + +3 程序难以进行修改和扩充 + +4 以过程为中心(函数) + +5 OOP以对象为中心,数据和对数据的操作封装起来 + + + +### 7.1 类的基本概念 + +用户自定义的**类型** + +#### 7.1.1 类的定义 + +```c++ +class FirstClass{ + private://默认 + float width; + float length; + float area; + // 以上在类中称为 属性 + + public: + void setData(float,float); + void calcArea(); + // 以上在类中称为方法 + + // 下面还可以再写私有成员,但是不建议 +};//注意这里的分号 +``` + +默认情况下,类的成员是私有的,struct(结构体)是公有的 + +#### 7.1.2 成员函数的定义 + +1 成员函数定义与普通函数定义相似 + +2 成员函数一般在外部定义: + +```c++ +<返回值类型> <类名>::<函数名>(参数列表){ + ... +} +void FirstClass::setData(float a,float b){ + width=a;//这里是上面类中的属性 + height=b; +} +``` + +#### 7.1.3 定义对象(类的调用) + +```c++ +FirstClass box; +box.setData(1,2); +FirstClass *boxPtr; +boxPtr=&box; +``` + +### 7.2 类的多文件组织方式 + +组织方式: + +1 类定义.h + +2 成员函数.cpp(内联函数必须和类定义在同一个文件中) + +3 应用程序通过#include包含头文件 + +文件组成 + +a.h + +a.cpp//#include "a.h" + +s.cpp//#include "a.h" + diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.1-1.2/hello_world b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.1-1.2/hello_world new file mode 100755 index 0000000..c68c3f4 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.1-1.2/hello_world differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.1-1.2/hello_world.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.1-1.2/hello_world.cpp new file mode 100644 index 0000000..2f57c0b --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.1-1.2/hello_world.cpp @@ -0,0 +1,9 @@ +#include + +using namespace std; + +int main(){ + cout << "Hello World!" << endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.1-1.2/io b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.1-1.2/io new file mode 100755 index 0000000..c3392c9 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.1-1.2/io differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.1-1.2/io.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.1-1.2/io.cpp new file mode 100644 index 0000000..9de04b8 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.1-1.2/io.cpp @@ -0,0 +1,11 @@ +#include + +int main(){ + std::cout << "请输入两个数字" << std::endl; + + int val1=0,val2=0; + std::cin >> val1 >> val2; + std::cout << "数字和为:" << val1+val2 << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.1-1.2/io.test.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.1-1.2/io.test.cpp new file mode 100644 index 0000000..8406b02 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.1-1.2/io.test.cpp @@ -0,0 +1,9 @@ +#include + +int main(){ + std::cout << "正在测试输出流的~??"; + << "这样子可以吗" << std::endl; + return 0; +} + + diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.1while b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.1while new file mode 100755 index 0000000..946a383 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.1while differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.1while.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.1while.cpp new file mode 100644 index 0000000..270fd9e --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.1while.cpp @@ -0,0 +1,13 @@ +#include + +int main(){ + std::cout << "计算1到10的值" << std::endl; + int i=0,sum=0; + while(i<=10){ + sum=sum + i; + i++; + } + std::cout <<"和为:" << sum << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.1while.test.1 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.1while.test.1 new file mode 100755 index 0000000..c4280e0 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.1while.test.1 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.1while.test.1.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.1while.test.1.cpp new file mode 100644 index 0000000..ab2bf8e --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.1while.test.1.cpp @@ -0,0 +1,21 @@ +#include + +int main(){ + std::cout << "请输入两个数,我们将计算他们之间的数字的和,包括他们。"; + int x=0,y=0; + + std::cin >> x >> y; + + int sum=0; +// while(x + +int main(){ + std::cout << "计算0到100的加法." << std::endl; + + int sum=0; + for(int i=0;i<=100;i++){ + sum=sum+i; + std::cout << i << std::endl; + } + std::cout << "和为:" << sum << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.3读取数量不等的输入数据 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.3读取数量不等的输入数据 new file mode 100755 index 0000000..0ea9c24 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.3读取数量不等的输入数据 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.3读取数量不等的输入数据.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.3读取数量不等的输入数据.cpp new file mode 100644 index 0000000..5c5d6a5 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.3读取数量不等的输入数据.cpp @@ -0,0 +1,16 @@ +#include + +int main(){ + std::cout << "输入数字,求取他们的和" << std::endl; + + int sum=0,x=0; + while(std::cin >> x){ + sum=sum+x; + std::cout << sum << std::endl; + } + + return 0; +} + + +// 此程序会在输入中遇到非int字符时停止因为,循环头条件为假。 diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.4if b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.4if new file mode 100755 index 0000000..5772935 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.4if differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.4if.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.4if.cpp new file mode 100644 index 0000000..f251859 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.4/1.4.4if.cpp @@ -0,0 +1,24 @@ +#include + +int main(){ + std::cout << "输入数字以运行" << std::endl; + + int val1=0; + + if(std::cin >> val1){ +// 如果输入的是数字将会继续 + int val2=0,ssc=1; + while(std::cin >> val2){ + if(val1==val2){ + ssc++; + std::cout << "这个数字连续出现第" << ssc << std::endl; + }else{ + val1=val2; + ssc=1; + std::cout << "这个数字第一次出现" << std::endl; + } + } + } + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.5.1Sales_item类 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.5.1Sales_item类 new file mode 100755 index 0000000..6c2d331 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.5.1Sales_item类 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.5.1Sales_item类.2 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.5.1Sales_item类.2 new file mode 100755 index 0000000..8ddd2df Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.5.1Sales_item类.2 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.5.1Sales_item类.2.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.5.1Sales_item类.2.cpp new file mode 100644 index 0000000..55ab377 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.5.1Sales_item类.2.cpp @@ -0,0 +1,16 @@ +#include +#include "Sales_item.h" + +int main(){ + Sales_item book1,book2; + std::cout << "请输入两个数" << " 格式为 四位isbn号 书数量 书单价" << std::endl; + + std::cin >> book1 >> book2; + if(book1.isbn()==book2.isbn()){ + std::cout << book1+book2 << std::endl; + return 0; + }else{ + std::cout << "两个书的ISBN码不一样,无法相加!" << std::endl; + return -1; + } +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.5.1Sales_item类.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.5.1Sales_item类.cpp new file mode 100644 index 0000000..f3a05d1 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.5.1Sales_item类.cpp @@ -0,0 +1,12 @@ +#include +#include "Sales_item.h"//导入Sales_item类/库 + +int main(){ + Sales_item book; + std::cin >> book; +// 格式为: xxx-xxx-xxx-xxx int int 即 ISBN 数量 单价 + std::cout << book << std::endl; +// 输出了书的isbn码 书的数量 总价 平均价 + return 0; +} + diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.6书店程序 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.6书店程序 new file mode 100755 index 0000000..85ec00e Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.6书店程序 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.6书店程序.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.6书店程序.cpp new file mode 100644 index 0000000..09083ae --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/1/1.5/1.6书店程序.cpp @@ -0,0 +1,24 @@ +#include +#include "Sales_item.h" + +int main(){ + std::cout << "请输入书信息:" << std::endl; + + Sales_item book1,book2; + + if(std::cin >> book1){ + while(std::cin >> book2){ + if(book1.isbn()==book2.isbn()){ + book1 += book2; + }else{ + std::cout << book1 < +#include + +class Sales_item { +// these declarations are explained section 7.2.1, p. 270 +// and in chapter 14, pages 557, 558, 561 +friend std::istream& operator>>(std::istream&, Sales_item&); +friend std::ostream& operator<<(std::ostream&, const Sales_item&); +friend bool operator<(const Sales_item&, const Sales_item&); +friend bool +operator==(const Sales_item&, const Sales_item&); +public: + // constructors are explained in section 7.1.4, pages 262 - 265 + // default constructor needed to initialize members of built-in type + Sales_item() = default; + Sales_item(const std::string &book): bookNo(book) { } + Sales_item(std::istream &is) { is >> *this; } +public: + // operations on Sales_item objects + // member binary operator: left-hand operand bound to implicit this pointer + Sales_item& operator+=(const Sales_item&); + + // operations on Sales_item objects + std::string isbn() const { return bookNo; } + double avg_price() const; +// private members as before +private: + std::string bookNo; // implicitly initialized to the empty string + unsigned units_sold = 0; // explicitly initialized + double revenue = 0.0; +}; + +// used in chapter 10 +inline +bool compareIsbn(const Sales_item &lhs, const Sales_item &rhs) +{ return lhs.isbn() == rhs.isbn(); } + +// nonmember binary operator: must declare a parameter for each operand +Sales_item operator+(const Sales_item&, const Sales_item&); + +inline bool +operator==(const Sales_item &lhs, const Sales_item &rhs) +{ + // must be made a friend of Sales_item + return lhs.units_sold == rhs.units_sold && + lhs.revenue == rhs.revenue && + lhs.isbn() == rhs.isbn(); +} + +inline bool +operator!=(const Sales_item &lhs, const Sales_item &rhs) +{ + return !(lhs == rhs); // != defined in terms of operator== +} + +// assumes that both objects refer to the same ISBN +Sales_item& Sales_item::operator+=(const Sales_item& rhs) +{ + units_sold += rhs.units_sold; + revenue += rhs.revenue; + return *this; +} + +// assumes that both objects refer to the same ISBN +Sales_item +operator+(const Sales_item& lhs, const Sales_item& rhs) +{ + Sales_item ret(lhs); // copy (|lhs|) into a local object that we'll return + ret += rhs; // add in the contents of (|rhs|) + return ret; // return (|ret|) by value +} + +std::istream& +operator>>(std::istream& in, Sales_item& s) +{ + double price; + in >> s.bookNo >> s.units_sold >> price; + // check that the inputs succeeded + if (in) + s.revenue = s.units_sold * price; + else + s = Sales_item(); // input failed: reset object to default state + return in; +} + +std::ostream& +operator<<(std::ostream& out, const Sales_item& s) +{ + out << s.isbn() << " " << s.units_sold << " " + << s.revenue << " " << s.avg_price(); + return out; +} + +double Sales_item::avg_price() const +{ + if (units_sold) + return revenue/units_sold; + else + return 0; +} +#endif diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.1算数类型和 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.1算数类型和 new file mode 100755 index 0000000..2e34473 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.1算数类型和 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.1算数类型和.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.1算数类型和.cpp new file mode 100644 index 0000000..5bf3bdb --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.1算数类型和.cpp @@ -0,0 +1,9 @@ +#include + +int main(){ + std::cout << "将显示字符的所占空间大小和最值" << std::endl; + + std::cout << sizeof(int) << "Byte" << std::endl; + std::cout << "最大值:" << max(int) << std::endl; + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.2类型转换 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.2类型转换 new file mode 100755 index 0000000..97be5dc Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.2类型转换 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.2类型转换.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.2类型转换.cpp new file mode 100644 index 0000000..01ed7ce --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.2类型转换.cpp @@ -0,0 +1,16 @@ +#include + +int main(){ + std::cout << "类型转化" << std::endl; + + int a=-1; + unsigned int b=2; + + std::cout << "存在无符号数的表达式中如果有符号的数为负数可能会出错" << std::endl; + std::cout << "如: 有符号a=-1,无符号b=2,连个数字执行加法运算,值为:" << b+a < +#include + +int main(){ + std::cout << "Who goes with F\145rgus?\012" << typeid("Who goes with F\145rgus?\012").name() << std::endl; + + std::cout << "3.14e1L" << typeid(3.14e1L).name() << std::endl; + + std::cout << "1024f" << typeid("1024f").name() << std::endl; + + std::cout << "3.14L" << typeid("3.14L").name() << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.3字面值常量.3 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.3字面值常量.3 new file mode 100755 index 0000000..4437fa3 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.3字面值常量.3 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.3字面值常量.3.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.3字面值常量.3.cpp new file mode 100644 index 0000000..a7fc033 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.3字面值常量.3.cpp @@ -0,0 +1,10 @@ +#include + +int main(){ +// 没有10进制转义字符,只有8进制 + std::cout << "\062\115\12" << std::endl;//转义8进制 + + std::cout << "\x32\x09\x4d" << std::endl;//转义16进制 + return 0; +} + diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.3字面值常量.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.3字面值常量.cpp new file mode 100644 index 0000000..49eac05 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1.3字面值常量.cpp @@ -0,0 +1,8 @@ +#include + +int main(){ + std::cout << "'a'" << 'a' << std::endl; + + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1字符大小和类型测试 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1字符大小和类型测试 new file mode 100755 index 0000000..cd42f12 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1字符大小和类型测试 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1字符大小和类型测试.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1字符大小和类型测试.cpp new file mode 100644 index 0000000..743e89c --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.1/2.1字符大小和类型测试.cpp @@ -0,0 +1,25 @@ +#include +#include + +using namespace std; + +int main(){ + int a; + cout << "a的数据类型为:" << typeid(a).name() << endl; + + + cout << "int " << sizeof(int) << endl; + cout << "bool " << sizeof(bool) << endl; + cout << "char " << sizeof(char) << endl; + cout << "wchar_t " << sizeof(wchar_t) << endl; + cout << "char16_t " << sizeof(char16_t) << endl; + cout << "char32_t " << sizeof(char32_t) << endl; + cout << "short " << sizeof(short) << endl; + cout << "long " << sizeof(long) << endl; + cout << "long long " << sizeof(long long) << endl; + cout << "float " << sizeof(float) << endl; + cout << "double " << sizeof(double) << endl; + cout << "long double" << sizeof(long double) << endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.1.1初始化变量 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.1.1初始化变量 new file mode 100755 index 0000000..378cbfe Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.1.1初始化变量 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.1.1初始化变量.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.1.1初始化变量.cpp new file mode 100644 index 0000000..1cc3893 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.1.1初始化变量.cpp @@ -0,0 +1,11 @@ +#include + +int main(){ +// std::cin >> int x;//不能在这里定义 +// std::cout << x << std::endl; +// int i={3.14};//初始化不能丢失数据,浮点型不能初始化整型 +// double n=p=99.99;//p未定义 + int x=3.14; + std::cout << x << std::endl; + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.1.2初始化变量 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.1.2初始化变量 new file mode 100755 index 0000000..bfdeb20 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.1.2初始化变量 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.1.2初始化变量.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.1.2初始化变量.cpp new file mode 100644 index 0000000..0390333 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.1.2初始化变量.cpp @@ -0,0 +1,18 @@ +#include +#include + +std::string str; +int x; + +int main(){ + int y; + std::string str2; + + std::cout << str < + +int main(){ + extern const int x; +// std::cout << &x << std::endl; + +// x=21; + + std::cout << &x << "---" << x << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.4作用域 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.4作用域 new file mode 100755 index 0000000..fa93dde Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.4作用域 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.4作用域.2 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.4作用域.2 new file mode 100755 index 0000000..37f4b9c Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.4作用域.2 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.4作用域.2.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.4作用域.2.cpp new file mode 100644 index 0000000..a2c246f --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.4作用域.2.cpp @@ -0,0 +1,13 @@ +#include + +int main(){ + int i=100,sum=0; + + for(int i=0;i<10;i++){ + sum=sum+i; + } + + std::cout << i << " " << sum << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.4作用域.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.4作用域.cpp new file mode 100644 index 0000000..1d98aee --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.2/2.2.4作用域.cpp @@ -0,0 +1,19 @@ +#include + +int x=42; + +int main(){ + int y=0; +// 显示全局变量 + + std::cout << x << " " << y << std::endl; + int x=0; +// 显示局部变量 + + std::cout << x << " " << y << std::endl; +// 显式的访问全局变量 + + std::cout << ::x << " " << y << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.1引用 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.1引用 new file mode 100755 index 0000000..5059797 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.1引用 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.1引用.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.1引用.cpp new file mode 100644 index 0000000..c016e9b --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.1引用.cpp @@ -0,0 +1,12 @@ +#include + +int main(){ + int x=123; + int &xs=x;//引用x + + xs=124;//实际上改变了x; + + std::cout << "x" << x << "&xs=x" << xs << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.2.1指针测试-指向引用 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.2.1指针测试-指向引用 new file mode 100755 index 0000000..ba8772e Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.2.1指针测试-指向引用 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.2.1指针测试-指向引用.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.2.1指针测试-指向引用.cpp new file mode 100644 index 0000000..068e905 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.2.1指针测试-指向引用.cpp @@ -0,0 +1,15 @@ +#include + +int main(){ + int x=24; + + int *ptrx=&x; + + int &xs=x; + + int *ptrxs=&xs; + + std::cout << ptrx << std::endl; + std::cout << ptrxs < + +int main(){ + + void *ptr0 = nullptr; + + int x=136; + + ptr0=&x;//取x的地址赋给ptr指针 + + std::cout << "ptr指向的地址" << ptr0 << std::endl; + std::cout << "void指针无法访问其对象" << std::endl; + + double y=123.32; + + ptr0 = &y; + std::cout << "void指针可以指向任何值,并且可以修改" << ptr0 < + +int main(){ + int x=12,*ptr=&x; + + std::cout << "指向的地址ptr" << ptr << "指向的对象值" << *ptr << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.2.4指针赋值合法性 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.2.4指针赋值合法性 new file mode 100755 index 0000000..ea9de57 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.2.4指针赋值合法性 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.2.4指针赋值合法性.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.2.4指针赋值合法性.cpp new file mode 100644 index 0000000..930a962 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.2.4指针赋值合法性.cpp @@ -0,0 +1,8 @@ +#include + +int main(){ + int x=13; + int* ptr=&x; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.3.1指针指向未赋值的数 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.3.1指针指向未赋值的数 new file mode 100755 index 0000000..4331b16 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.3.1指针指向未赋值的数 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.3.1指针指向未赋值的数.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.3.1指针指向未赋值的数.cpp new file mode 100644 index 0000000..e335b66 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.3.1指针指向未赋值的数.cpp @@ -0,0 +1,10 @@ +#include + +int main(){ + int x,*ptr=&x; + + std::cout << ptr << std::endl; + std::cout << *ptr << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.3.2复合指针 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.3.2复合指针 new file mode 100755 index 0000000..5eedb24 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.3.2复合指针 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.3.2复合指针.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.3.2复合指针.cpp new file mode 100644 index 0000000..89a5370 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.3/2.3.3.2复合指针.cpp @@ -0,0 +1,24 @@ +#include + +int main(){ + int x=10,*ptr=&x,*pts=ptr; + + std::cout << x << std::endl; + std::cout << *ptr << "->" << ptr << std::endl; + std::cout << "ptr的地址" << &ptr << std::endl; + std::cout << *pts << "->" << pts << std::endl; + std::cout << "以上为指向同一个空间的指针" << std::endl; + + + + int y=20,*ptr2=&y,**pts2=&ptr2; + std::cout << y << std::endl; + std::cout << *ptr2 << "->" << ptr2 << std::endl; + std::cout << "ptr2的地址" << &ptr2 << std::endl; + std::cout << *pts2 << "->" << pts2 << std::endl; + + std::cout << "解引用" << **pts2 << std::endl; + + return 0; +} + diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.1常量引用 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.1常量引用 new file mode 100755 index 0000000..e636bcd Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.1常量引用 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.1常量引用.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.1常量引用.cpp new file mode 100644 index 0000000..c597548 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.1常量引用.cpp @@ -0,0 +1,18 @@ +#include + +int main(){ + int x=10; + const int &y=x; + + std::cout << &x << std::endl; + std::cout << &y << std::endl; + + + x=12; + std::cout << x << std::endl; + std::cout << &x << std::endl; + + std::cout << y << std::endl; + std::cout << &y << std::endl; + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.2.2双层常量指针 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.2.2双层常量指针 new file mode 100755 index 0000000..804037c Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.2.2双层常量指针 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.2.2双层常量指针.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.2.2双层常量指针.cpp new file mode 100644 index 0000000..1ddcff4 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.2.2双层常量指针.cpp @@ -0,0 +1,34 @@ +#include + +int main(){ + const int xs=10; +// int *pts=&xs;//必须添加底层常量 + const int *pts=&xs; + + + + + int x=1,y=2; + const int *ptr1; + std::cout << "普通指针指向一个常量,无法通过指针修改常量,同时不可以可以指向一个字面值?,跟引用不一样,不会有(temp)" << std::endl; +// ptr1=10;//错误,无法像引用一样 + const int &z=21; + + ptr1=&x;//可以赋值 +// *ptr1=11;//但不能修改值 + + + int *const ptr2=&y;//这是一个常量指针,必须初始化 +// ptr2=&x//不能再指向其他量; + *ptr2=3;//但可以修改 + std::cout << "通过指针修改值" << *ptr2 << "-> y" << y << std::endl; + + const int *const ptr3=&x;//必须赋值,因为这是一个常量指针(*const ptr3),并且他指向一个常量(const int); + std::cout << "尝试修改常量:失败" << std::endl; +// *ptr3=10;//错误无法通过指针修改指向的常量(因为指向的是一个常量) +// ptr3=&y; + std::cout << "尝试修改常量指针:肯定失败" << std::endl; + std::cout << "得出结论,常量指针指向了一个常量,无法通过常量指针修改常量,也无法修改常量指针(即无法重新指向另一个对象)" << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.2指针和const b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.2指针和const new file mode 100755 index 0000000..5ce7a14 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.2指针和const differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.2指针和const.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.2指针和const.cpp new file mode 100644 index 0000000..267c1d3 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.2指针和const.cpp @@ -0,0 +1,24 @@ +#include + +int main(){ + std::cout << "定义一个变量x=10,一个常量指针ptr1指向这个x。" << std::endl; + + int x=10; + const int *ptr1=&x; + std::cout << "x: " << x << " &x: " << &x << std::endl; + std::cout << "ptr1: " << ptr1 << " *ptr1: " << *ptr1 << " &ptr1: " << &ptr1 << std::endl; + + const int y =13; +// int *ptr2=&y;//错误,常量不能由普通指针指向 + const int *ptr2=&y; + const int **ptrs1=&ptr2; + + std::cout << "y: " << y << " &y: " << &y << std::endl; + std::cout << "ptr2: " << ptr2 << " *ptr2: " << *ptr2 << " &ptr2: " << &ptr2 << std::endl; + std::cout << "ptrs1: " << ptrs1 << " *ptrs1: " << *ptrs1 << " &ptrs1: " << &ptrs1 << std::endl; + + + + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.1常量表达式 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.1常量表达式 new file mode 100755 index 0000000..c6653f1 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.1常量表达式 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.1常量表达式.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.1常量表达式.cpp new file mode 100644 index 0000000..fc53421 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.1常量表达式.cpp @@ -0,0 +1,16 @@ +#include + +int main(){ + int x=10; +// constexpr int y=x;//int x不是常量,所以这里报错 + + const int y=x;//这里也不是常量表达式 +// constexpr y;//这里才是常量表达式 + + const int z=y; + + constexpr int a=1; + constexpr int b=a+1; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.2指针常量表达式 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.2指针常量表达式 new file mode 100755 index 0000000..e7beab0 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.2指针常量表达式 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.2指针常量表达式.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.2指针常量表达式.cpp new file mode 100644 index 0000000..6a9256a --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.2指针常量表达式.cpp @@ -0,0 +1,12 @@ +#include + +int main(){ + int x=10; +// const int y=x;//y不是一个常量表达式 + const int y=11; +// constexpr const int *const ptr=&y;//&y不是一个常量表达式,因为内存地址不确定 + + constexpr int *ptr=0; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.3全局变量指针常量表达式 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.3全局变量指针常量表达式 new file mode 100755 index 0000000..8a53154 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.3全局变量指针常量表达式 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.3全局变量指针常量表达式.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.3全局变量指针常量表达式.cpp new file mode 100644 index 0000000..fca4a16 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.4/2.4.4.3全局变量指针常量表达式.cpp @@ -0,0 +1,9 @@ +#include + +int x=10; + +int main(){ + constexpr int *y=&x; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.1类型别名测试 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.1类型别名测试 new file mode 100755 index 0000000..35a6fee Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.1类型别名测试 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.1类型别名测试.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.1类型别名测试.cpp new file mode 100644 index 0000000..550e708 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.1类型别名测试.cpp @@ -0,0 +1,13 @@ +#include + +int main(){ + typedef double dub; + dub x=12.2; + std::cout << x << std::endl; + + typedef dub *dubptr; + dubptr ptr1=&x,ptr2=0; + std::cout << ptr1 << ptr2 << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.2类型别名测试 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.2类型别名测试 new file mode 100755 index 0000000..bbaa829 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.2类型别名测试 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.2类型别名测试.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.2类型别名测试.cpp new file mode 100644 index 0000000..823e597 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.2类型别名测试.cpp @@ -0,0 +1,14 @@ +#include + +int main(){ + using zs = int; + zs x=12; + std::cout << x << std::endl; + + using zsptr =int*; + zsptr xptr=&x; + std::cout << xptr << " " << *xptr << std::endl; + + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.3指针类型别名测试 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.3指针类型别名测试 new file mode 100755 index 0000000..43a894b Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.3指针类型别名测试 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.3指针类型别名测试.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.3指针类型别名测试.cpp new file mode 100644 index 0000000..cc64b26 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.3指针类型别名测试.cpp @@ -0,0 +1,15 @@ +#include + +int main(){ + using iptr = int*;//iptr是一个声明整型指针的标识符 + + int x=12; + iptr xptr = &x; + iptr *xptrs = &xptr;//指向指针的指针 + + std::cout << x << std::endl; + std::cout << "指针:" << xptr << " " << &xptr << " " << *xptr << std::endl; + std::cout << "指针的指针 :" << xptrs << " " << &xptrs << " " << *xptrs << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.4常量类型别名 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.4常量类型别名 new file mode 100755 index 0000000..b7df511 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.4常量类型别名 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.4常量类型别名.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.4常量类型别名.cpp new file mode 100644 index 0000000..f4128a3 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.4常量类型别名.cpp @@ -0,0 +1,11 @@ +#include + +int main(){ + using ci = const int; + ci x = 10; + std::cout << x << std::endl; + +// 尝试修改这个x +// x=11;//无法修改 + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.5常量指针和纸箱厂量的指针别名 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.5常量指针和纸箱厂量的指针别名 new file mode 100755 index 0000000..590629a Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.5常量指针和纸箱厂量的指针别名 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.5常量指针和纸箱厂量的指针别名.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.5常量指针和纸箱厂量的指针别名.cpp new file mode 100644 index 0000000..7ed1ed0 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.1.5常量指针和纸箱厂量的指针别名.cpp @@ -0,0 +1,28 @@ +#include + +int main(){ + using iptr1 =const int *const;//底层和顶层 + using iptr2 =const int*;//底层 + using iptr3 =int *const; + + int x=1; + const int y =2; + iptr1 x1=&x;//正确 + iptr1 y1=&y;//正确, + +// x1和y1都不能再改变,也不能通过指针改变指向的值 + + iptr2 x2=&x;//正确 + iptr2 y2=&y;//正确 + +// 自己本身可以再指向其他的也就是可以改变自己,但是不能改变指向值,这是一个底层常量 + + iptr3 x3=&x;//自己是一个常量不能再改变,只能指向非常量,并且可以改变指向的值 +// iptr3 y3=&y;//报错 + +// 自身不能再改变,只能指向非常量,可以改变指向值 + + + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.2.1auto说明符 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.2.1auto说明符 new file mode 100755 index 0000000..27260cf Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.2.1auto说明符 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.2.1auto说明符.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.2.1auto说明符.cpp new file mode 100644 index 0000000..66df359 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.2.1auto说明符.cpp @@ -0,0 +1,12 @@ +#include +#include +int main(){ + double x=12.0; + auto y=x; + auto z=&x; + + std::cout << typeid(y).name() < + +int main(){ + int x=10; + auto y=11,*z=&x; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.2.3不同类型auto b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.2.3不同类型auto new file mode 100755 index 0000000..1f3f5f2 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.2.3不同类型auto differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.2.3不同类型auto.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.2.3不同类型auto.cpp new file mode 100644 index 0000000..82ac565 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.2.3不同类型auto.cpp @@ -0,0 +1,41 @@ +#include + +int main(){ + int a=0; + const int b=a; + + auto ace1=b;//auto会忽略顶层常量,因此ace1不是常量 + ace1=12;//这里是合法的 + const auto ace2=b;//auto面对顶层常量需要在语句前面声明 +// ace2=12;//这里是非法的 + + std::cout << ace1 << " " << ace2 << std::endl; + std::cout << "面对引用" << std::endl; + +// auto &end1=32;//这里不能直接饮用字面值,因为auto忽略了顶层常量,因此end1是一个普通引用,普通引用不能引用字面值,常量引用才可以 + const auto &end1=32; + auto &end2=b;//尝试修改,无法修改 +// end2=11; + const int c=10; + const auto &end3=c; + + + std::cout << "面对指针" << std::endl; + + auto ptr1=&b; +// auto p=b,*ptr2=&b;//对于p来说,忽略了const是int形式,对于指针来说,const int b是底层常量,因此不同类型不能在一起 + + auto p2=a,*ptr3=&a; + + const int x1=12; + auto xp1=&x1; + auto *xp2=&x1; + std::cout << typeid(xp1).name() << std::endl; + std::cout << typeid(xp2).name() << std::endl; + +// *xp1=12; +// *xp2=12; + std::cout << *xp1 << " " << *xp2 << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.3.1decltype类型说明符 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.3.1decltype类型说明符 new file mode 100755 index 0000000..5124590 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.3.1decltype类型说明符 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.3.1decltype类型说明符.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.3.1decltype类型说明符.cpp new file mode 100644 index 0000000..76de786 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.3.1decltype类型说明符.cpp @@ -0,0 +1,13 @@ +#include + +int main(){ + int x=12; + decltype(x) y; + decltype((x)) z=x;//这里是引用,必须初始化 + + std::cout << typeid(x).name() << std::endl; + std::cout << typeid(y).name() << std::endl; + std::cout << typeid(z).name() << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.3.2decltype类型说明符 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.3.2decltype类型说明符 new file mode 100755 index 0000000..c704b48 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.3.2decltype类型说明符 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.3.2decltype类型说明符.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.3.2decltype类型说明符.cpp new file mode 100644 index 0000000..564f3d2 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.5/2.5.3.2decltype类型说明符.cpp @@ -0,0 +1,11 @@ +#include + +int main(){ + int a=1,b=2; + decltype(a=b) x=a; + + std::cout << typeid(x).name() << std::endl; + std::cout << &a << std::endl; + std::cout << &x << std::endl;//地址一样说明是引用 + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.1.1定义类Sales_data b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.1.1定义类Sales_data new file mode 100755 index 0000000..b4f4919 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.1.1定义类Sales_data differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.1.1定义类Sales_data.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.1.1定义类Sales_data.cpp new file mode 100644 index 0000000..365a878 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.1.1定义类Sales_data.cpp @@ -0,0 +1,12 @@ +#include +#include + +struct Sales_data{ + std::string bookNo; + unsigned units_sold=0; + double revenue=0.0; +}; + +int main(){ + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.2.1使用类 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.2.1使用类 new file mode 100755 index 0000000..0633d7e Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.2.1使用类 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.2.1使用类.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.2.1使用类.cpp new file mode 100644 index 0000000..7dc08c8 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.2.1使用类.cpp @@ -0,0 +1,25 @@ +#include +#include + +struct Sales_data{ + std::string bookNo; + unsigned unit_sold=0; + double revenue=0.0; +}; + +int main(){ + Sales_data data1,data2; + std::cout << "请输入ISBN,数量,单价" << std::endl; + std::cin >> data1.bookNo >> data1.unit_sold >> data1.revenue; + std::cout << std::endl << "请再次输入" << std::endl; + std::cin >> data2.bookNo >> data1.unit_sold >> data1.revenue; + + if(data1.bookNo==data2.bookNo){ + std::cout << "两次输入的书号一样" << std::endl; + std::cout << data1.bookNo << " " << data1.unit_sold+data2.unit_sold << " " << data1.revenue+data2.revenue << std::endl; + }else{ + std::cout << "两次输入的书号不一样" << std::endl; + } + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.3.1编写自己的头文 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.3.1编写自己的头文 new file mode 100755 index 0000000..2eecbce Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.3.1编写自己的头文 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.3.1编写自己的头文件.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.3.1编写自己的头文件.cpp new file mode 100644 index 0000000..fd2464c --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/2.6.3.1编写自己的头文件.cpp @@ -0,0 +1,10 @@ +#include +#include "my.h" + +int main(){ + my a; + a.name="何小龙"; + std::cout << a.name << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/my.h b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/my.h new file mode 100644 index 0000000..26df886 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/2.6/my.h @@ -0,0 +1,8 @@ +#ifndef MY_H +#define MY_H +#include + +struct my{ + std::string name; +}; +#endif diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/test/test1通过指针修改值? b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/test/test1通过指针修改值? new file mode 100755 index 0000000..c683a9d Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/test/test1通过指针修改值? differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/test/test1通过指针修改值?.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/test/test1通过指针修改值?.cpp new file mode 100644 index 0000000..e0860b9 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/2/test/test1通过指针修改值?.cpp @@ -0,0 +1,15 @@ +#include + +int main(){ + int x=100; + + int *y=&x; + + std::cout << "x:" << x << ";&x:" << &x << ";y:" << y << ";&y:" << &y << ";*y:" << *y << std::endl; + + *y=12; + + std::cout << "x:" << x << std::endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.1定义初始化string对象 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.1定义初始化string对象 new file mode 100755 index 0000000..e485053 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.1定义初始化string对象 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.1定义初始化string对象.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.1定义初始化string对象.cpp new file mode 100644 index 0000000..408dab3 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.1定义初始化string对象.cpp @@ -0,0 +1,32 @@ +#include + +using std::cin; +using std::cout; +using std::endl; +using std::string; + +int main(){ + string name="何小龙"; + + cout << name << endl; + + string name1; + string name2(name1); + + string name3("何夕"); + string name4="Nie"; + + string name5(4,'A'); +// string name6(4,"张旭东");//只能一个字符 + string name7=string(4,'龙');//只能用单引号,多字节字符常量好像无法显示 + + cout << name1 << endl; + cout << name2 << endl; + cout << name3 << endl; + cout << name4 << endl; + cout << name5 << endl; + //cout << name6 << endl; + cout << name7 << endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.2操作string b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.2操作string new file mode 100755 index 0000000..48c2ffe Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.2操作string differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.2操作string.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.2操作string.cpp new file mode 100644 index 0000000..fcc8c1a --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.2操作string.cpp @@ -0,0 +1,40 @@ +#include +#include + +using std::string; +using std::cout; +using std::cin; +using std::endl; + +int main(){ + string name="何琋"; + string love="Ying"; +// string aa="nihao"+"你好"+name;//两个单独的字面值无法相加 + + string message=name+" love "+love; + cout << message << endl; + cout << "message的字符个数是:" << message.size() << endl; + cout << message[0]; + + string str; + cout << "输入1结束" << endl; + while(cin>>str){//不读到数据不会停止。。。 + cout << endl << str.size() << "个字符" << endl; + if(str=="1"){//回车符不算空 + cout << "空字符" << endl; + break; + }else{ + cout << str << endl; + } + } + cout << str << endl; + while(getline(cin,str)){//这里会首先启动一次 + if(str.empty()){ +// break; + cout << "?" << endl; + }else{ + cout << "-----" << str << endl; + } + } + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.3.1string对象处理 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.3.1string对象处理 new file mode 100755 index 0000000..263bef2 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.3.1string对象处理 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.3.1string对象处理.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.3.1string对象处理.cpp new file mode 100644 index 0000000..3d416cf --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.3.1string对象处理.cpp @@ -0,0 +1,19 @@ +#include +#include +#include + +using std::string; +using std::cout; +using std::cin; +using std::endl; + +int main(){ + string name="何琋"; + if(isalnum(name[0])){ + cout << "这是数字" << endl; + }else{ + cout << name << endl; + } + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.3.2综合操作 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.3.2综合操作 new file mode 100755 index 0000000..32f08e2 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.3.2综合操作 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.3.2综合操作.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.3.2综合操作.cpp new file mode 100644 index 0000000..bea3010 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.2标准库类型string/3.2.3.2综合操作.cpp @@ -0,0 +1,18 @@ +#include +#include + +using std::string; +using std::cout; +using std::cin; +using std::endl; + +int main(){ + string str="xasxasxasxcsdklvhsabjvksanvhsluv"; + getline(cin,str); + for (auto &i:str){ + i='X';//字符替换必须用'' + } + cout << str << endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.1初始化vector b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.1初始化vector new file mode 100755 index 0000000..5e1906b Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.1初始化vector differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.1初始化vector.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.1初始化vector.cpp new file mode 100644 index 0000000..cc6147d --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.1初始化vector.cpp @@ -0,0 +1,39 @@ +#include +#include +#include + +using std::string; +using std::vector; +using std::cout; +using std::cin; +using std::endl; + +int main(){ + vector a{1,2,3,4,5}; + for (auto i:a)cout << i << endl; +// cout << a << endl;//不能直接输出 + + cout << "以上为尝试输出vector对象中的元素" << typeid(a).name() << endl; + + vector b=a; + for (auto i:b)cout << i << ","; + cout << endl; + vector c(10); + vector d(10,12); + for (auto i:c)cout << i << ","; + cout << endl; + for (auto i:d)cout << i << ","; + cout << endl; + + vector e{10,"GY"};//这里花括号就适应了环境,因为这里不能初始化字面值 + for(auto i:e)cout << i << " "; + cout << endl; + + vector> f{a,b,c,d}; + for(auto i:f){ + for(auto j:i)cout << j << " "; + cout << endl; + } + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.1初始化vector.m1 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.1初始化vector.m1 new file mode 100755 index 0000000..3607f77 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.1初始化vector.m1 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.2在vector末尾添加元素 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.2在vector末尾添加元素 new file mode 100755 index 0000000..fc5d485 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.2在vector末尾添加元素 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.2在vector末尾添加元素.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.2在vector末尾添加元素.cpp new file mode 100644 index 0000000..ffb6878 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.2在vector末尾添加元素.cpp @@ -0,0 +1,18 @@ +#include +#include + +using std::vector; +using std::cout; +using std::endl; + +int main(){ + vector a; + a.push_back(1024); + + for(int i=0; i<=512; i++){ + a.push_back(i); + } + + for(auto i:a)cout << i << endl; + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.3其他vector操作 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.3其他vector操作 new file mode 100755 index 0000000..44cf9d3 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.3其他vector操作 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.3其他vector操作.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.3其他vector操作.cpp new file mode 100644 index 0000000..754a8f4 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.3标准库类型vector/3.3.3其他vector操作.cpp @@ -0,0 +1,18 @@ +#include +#include +#include +using std::vector; +using std::cout; +using std::endl; +using std::string; + +int main(){ + vector a; + for(int i=0;i<20;i++){ + a.push_back(i); + } + + cout <::size_type) << endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.4迭代器/3.4.1迭代器的使用 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.4迭代器/3.4.1迭代器的使用 new file mode 100755 index 0000000..d98c5e1 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.4迭代器/3.4.1迭代器的使用 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.4迭代器/3.4.1迭代器的使用.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.4迭代器/3.4.1迭代器的使用.cpp new file mode 100644 index 0000000..1685aee --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.4迭代器/3.4.1迭代器的使用.cpp @@ -0,0 +1,19 @@ +#include + +using std::cout; +using std::string; +using std::endl; + +int main(){ + string a="Hello World!"; + + if(a.begin()!=a.end()){//判断队形非空 + auto x1=a.begin(); + *x1='h'; + cout << *x1; + ++x1; + cout << *x1; + } + cout << a; + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.4迭代器/3.4.2迭代器的运算 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.4迭代器/3.4.2迭代器的运算 new file mode 100755 index 0000000..b8836a9 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.4迭代器/3.4.2迭代器的运算 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.4迭代器/3.4.2迭代器的运算.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.4迭代器/3.4.2迭代器的运算.cpp new file mode 100644 index 0000000..212700f --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.4迭代器/3.4.2迭代器的运算.cpp @@ -0,0 +1,14 @@ +#include + +using namespace std; + +int main(){ + string a="GY i missing you!"; + + for(auto i=a.begin();i + +using namespace std; + +int main(){ + string str[]={"abc","你在做什么"}; + cout << str[0] << endl; + cout << str[1] << endl; + + int a[3]; + int b[]={1,2,3,4}; + int c[2]={2,4}; +// int d[2]={1,2,3};//错误,初始值超出容器 + int e[5]={1,2,3};//相当于{1,2,3,0,0} + +//不能赋值 +// int f[]=e;//这里报错,不能使用数组初始化数组 +// int g[5]; +// g=e;//不能把数组赋值给另一个数组 + + + + char cha[]="master";//字符数组可以使用字面值 + char chb[]={'a','b','c'};//最后有一个空字符 + char chc[3]="ab";//这里chc已经装满了,还有一个位置要留给空字符 + +//指针数组和数组指针 + int *pa[23];//含有23个整形指针的数组, + int (*pb)[3]=&a;//pb是指针,指向一个数组,这里维度需要和被指对象维度相同 + int *(*pc)[23]=&pa;//pc是一个指针,他指向一个包含23位整形指针的数组 + +//引用 +// int &ma[10];//引用不是对象,一次不能成为数组; + int (&mb)[5]=e;//引用一个数组,而且需要初始化 + + int *((&cc1)[23])=pa;//从对象名字向外看 + int (*&cc2)[3]=pb;//只是一个引用,引用一个数组指针(包含素组的指针对象) + + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.5数组/3.5.3.1数组和指针 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.5数组/3.5.3.1数组和指针 new file mode 100755 index 0000000..efa9415 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.5数组/3.5.3.1数组和指针 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.5数组/3.5.3.1数组和指针.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.5数组/3.5.3.1数组和指针.cpp new file mode 100644 index 0000000..55ae9b8 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/3/3.5数组/3.5.3.1数组和指针.cpp @@ -0,0 +1,39 @@ +#include +using namespace std; +int main(){ + string num[2]; + string *ps=num; + string *ps0=&num[0]; + string *ps1=&num[1]; + cout << ps << endl << ps0 << endl << ps1 << endl; + num[0]="xasxasxasxassvasuyijovibfhdmxjvbcsnly"; + cout << ps << endl << ps0 << endl << ps1 << endl; + int num2[2]; + +// for (int i=0;i<100;i++){ + cout << &num[0][0]; +// } + +// cout << num[0] << endl; + cout << &num2[0] << endl << &num2[1] << endl; +// cout << string.max_size() << endl; + +//指针式迭代器,所以可以进行迭代器操作 + int a[]={1,2,3,4,5,6,7,8,9,0}; + int *pa=a;//这里数组名其实就是数组的地址,因此不需要取址符 + int *e=&a[10];//这里取不存在的数组元素的意义在于,得到尾后地址 +//妈的原来学过的begin()和end()就可以 + for(pa=a;pa + + +using namespace std; + +int main(){ + int arr[3][3]={1,2,3,4,5,6,7,8,9}; + + int (*ptr)[3]=arr;//ptr指向包含三个元素的数组 + + for (int i=0;i<3;i++){ + cout << *ptr << " " << ptr << endl; + int *pts=(*ptr);//这里代指第一维数组 + for (int j=0;j<3;j++){ + cout << *pts; + ++pts; + } + cout << endl; + ++ptr; + } + for(auto a=begin(arr);a + +using namespace std; + +int main(){ + int a=1.22+5;//发生了隐式转换 + + cout << a << endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.11类型转换/4.11.3.1显式转换 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.11类型转换/4.11.3.1显式转换 new file mode 100755 index 0000000..5120b8c Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.11类型转换/4.11.3.1显式转换 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.11类型转换/4.11.3.1显式转换.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.11类型转换/4.11.3.1显式转换.cpp new file mode 100644 index 0000000..e45817b --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.11类型转换/4.11.3.1显式转换.cpp @@ -0,0 +1,14 @@ +//4.11.3.1显式转换.cpp +#include + +using namespace std; + +int main(){ + int a=1,b=2; + double c=1/2; + cout << c << endl;//这里依然是整型,因为右边线进行计算,得到的是整数 + double d=static_cast(a)/b; + cout << d << endl;//这里先将a转化为双精度,此时隐式转换发生b为了和双精度的a进行计算,会先转化为双精度,然后将值赋给左边 + cout << static_cast(a)/b << endl;//此处不能讲这个值赋给c再输出。。。 + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.11类型转换/4.11.3.2显式转换对编译器不能自行转换的转换 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.11类型转换/4.11.3.2显式转换对编译器不能自行转换的转换 new file mode 100755 index 0000000..130011f Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.11类型转换/4.11.3.2显式转换对编译器不能自行转换的转换 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.11类型转换/4.11.3.2显式转换对编译器不能自行转换的转换.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.11类型转换/4.11.3.2显式转换对编译器不能自行转换的转换.cpp new file mode 100644 index 0000000..8f94f47 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.11类型转换/4.11.3.2显式转换对编译器不能自行转换的转换.cpp @@ -0,0 +1,18 @@ +#include + +using namespace std; + +int main(){ + int a=12; + void *b=&a; + double *c=static_cast(b); + cout << &a << endl; + cout << c << endl; + cout << b << endl; + + cout << a << endl; +// cout << *b << endl; + cout << *c << endl; +//虽然指向了同一个位置,取值时发生了错误 + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.2算术运算符/4.2算数运算符 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.2算术运算符/4.2算数运算符 new file mode 100755 index 0000000..4b44691 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.2算术运算符/4.2算数运算符 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.2算术运算符/4.2算数运算符.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.2算术运算符/4.2算数运算符.cpp new file mode 100644 index 0000000..7954159 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.2算术运算符/4.2算数运算符.cpp @@ -0,0 +1,17 @@ +//4.2 算术运算符 +#include + +using namespace std; + +int main(){ + int a=12,b=5; + double c=12.333,d=2.71828; + + cout << "a/b: " << a/b << endl; + cout << "a%b: " << a%b << endl; + + cout << "c/d: " << c/d << endl; +// cout << "c%d: " << c%d << endl;//这里面对两个浮点型,%(取余)只能存在于两个整数之间 + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.3逻辑和关系运算符/4.3逻辑和关系运算符 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.3逻辑和关系运算符/4.3逻辑和关系运算符 new file mode 100755 index 0000000..567150f Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.3逻辑和关系运算符/4.3逻辑和关系运算符 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.3逻辑和关系运算符/4.3逻辑和关系运算符.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.3逻辑和关系运算符/4.3逻辑和关系运算符.cpp new file mode 100644 index 0000000..9ceca82 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.3逻辑和关系运算符/4.3逻辑和关系运算符.cpp @@ -0,0 +1,19 @@ +//4.3 逻辑和关系运算符 +#include + +using namespace std; + +int main(){ + int a=32,b=0; + + string c,d="xsx";//string无法直接转化为布尔型 + + if(a)cout << "a不等于0" << endl; + if(!b)cout << "b等于零" << endl; + +// if(c)cout << "c是空字符" << endl; +// if(!c)cout << "c是空字符" << endl; +// if(d)cout << "d含有字符" << endl; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.4赋值运算符/4.4赋值运算符 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.4赋值运算符/4.4赋值运算符 new file mode 100755 index 0000000..caee643 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.4赋值运算符/4.4赋值运算符 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.4赋值运算符/4.4赋值运算符.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.4赋值运算符/4.4赋值运算符.cpp new file mode 100644 index 0000000..3c0bf8b --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.4赋值运算符/4.4赋值运算符.cpp @@ -0,0 +1,13 @@ +//4.4 赋值运算符 +#include +#include +using namespace std; + +int main(){ +// int a={1.2};//查看编译器结果,不能讲浮点型赋值给整型 + + vector b; + b={1,2,3,4,5}; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.5递增和递减运算符/4.5递增和递减运算符 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.5递增和递减运算符/4.5递增和递减运算符 new file mode 100755 index 0000000..14366c7 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.5递增和递减运算符/4.5递增和递减运算符 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.5递增和递减运算符/4.5递增和递减运算符.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.5递增和递减运算符/4.5递增和递减运算符.cpp new file mode 100644 index 0000000..ed77544 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.5递增和递减运算符/4.5递增和递减运算符.cpp @@ -0,0 +1,20 @@ +//4.5 递增和递减运算符 +#include + +using namespace std; + +int main(){ + int a=1; + int b=a++; + cout << a << " " << b << endl;//先赋值后进行加法 + int c=++a; + cout << a << " " << c << endl;//先进行递增然后再赋值 + + int arr[]={1,2,3,4,5,6,7,8,9}; + auto d=begin(arr); + d++; +// *d++;//递增运算不可以解引用 + cout << *++d << endl; + cout << d++ << endl; + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.6成员访问运算符/4.6成员访问运算符 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.6成员访问运算符/4.6成员访问运算符 new file mode 100755 index 0000000..30b56e7 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.6成员访问运算符/4.6成员访问运算符 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.6成员访问运算符/4.6成员访问运算符.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.6成员访问运算符/4.6成员访问运算符.cpp new file mode 100644 index 0000000..4768f33 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/4/4.6成员访问运算符/4.6成员访问运算符.cpp @@ -0,0 +1,14 @@ +//4.6 成员访问运算符.cpp +#include +#include + +using namespace std; + +int main(){ + string a="i missing gy",*b=&a; + cout << (*b).size() << endl; + cout << b->size() << endl; +// cout << *b.size() << endl;//这里b是指针,没有size成员 + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/5语句/5.3.2switch语句 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/5语句/5.3.2switch语句 new file mode 100755 index 0000000..5eaae63 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/5语句/5.3.2switch语句 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/5语句/5.3.2switch语句.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/5语句/5.3.2switch语句.cpp new file mode 100644 index 0000000..9d999cb --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/5语句/5.3.2switch语句.cpp @@ -0,0 +1,17 @@ +#include + +using namespace std; + +int main(){ + int i=1; + switch(i){ + case 1://数字不用加引号,char单引号,字符串双引号 + cout << 1 << endl; + break; + case '2': + cout << 2 << endl; + break; + } + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.1.1局部对象 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.1.1局部对象 new file mode 100755 index 0000000..6faab74 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.1.1局部对象 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.1.1局部对象.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.1.1局部对象.cpp new file mode 100644 index 0000000..5abccb6 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.1.1局部对象.cpp @@ -0,0 +1,20 @@ +//6.1.1局部对象.cpp +#include + +using namespace std; + +int a(); + +int main(){ + for(int i=0;i<20;i++){ + cout << a() << endl; + } + + return 0; +} + +int a(){ + static int i=0; + + return ++i; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.1.test b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.1.test new file mode 100755 index 0000000..fbed0f3 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.1.test differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.1.test.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.1.test.cpp new file mode 100644 index 0000000..5dc0ffa --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.1.test.cpp @@ -0,0 +1,26 @@ +//6.1.test.cpp +#include + +using namespace std; + +int fact(int x);//如果函数出现在调用之后,需要声明 + +int main(){ + cout << "请输入一个数,将计算它的阶乘" << endl; + + int x; + cin >> x; + cout << "阶乘为:"; + cout << fact(x) << endl; + + return 0; +} + +int fact(int x){ + int i,j; + for(i=1;i<=x;i++){ + j =i*j; + } + + return j; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.1传值参数 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.1传值参数 new file mode 100755 index 0000000..992f0b7 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.1传值参数 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.1传值参数.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.1传值参数.cpp new file mode 100644 index 0000000..b9665c1 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.1传值参数.cpp @@ -0,0 +1,19 @@ +//6.2.1传值参数.cpp +#include + +using namespace std; + +void x(int *i); + +int main(){ + int i=12; + x(&i); + cout << i << endl; + + return 0; +} + +void x(int *i){ + *i=0;//这里修改了i所指的对象的值; + i=0;//这里只是修改了i所指的对象; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.2传引用参数 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.2传引用参数 new file mode 100755 index 0000000..ddb7acc Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.2传引用参数 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.2传引用参数.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.2传引用参数.cpp new file mode 100644 index 0000000..cf3aff7 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.2传引用参数.cpp @@ -0,0 +1,20 @@ +//6.2.2传引用参数 + +#include + +using namespace std; + +void a(int &i); + +int main(){ + int x=12; + + a(x); + cout << x << endl; + + return 0; +} + +void a(int &i){ + i=111; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.3const形参和实参 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.3const形参和实参 new file mode 100755 index 0000000..4a6a8a1 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.3const形参和实参 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.3const形参和实参.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.3const形参和实参.cpp new file mode 100644 index 0000000..731bc6c --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.3const形参和实参.cpp @@ -0,0 +1,30 @@ +//6.2.3const形参和实参.cpp +#include + +using namespace std; + +void fa(const int as); +void fb(int as); + +int main(){ + int x=1,y=2; + const int a=1,b=2; + + fa(x); + fa(a); + + fb(y); + fb(b); + + return 0; +} + +void fa(const int as){ +// 无法修改值 +} + +void fb(int as){ +// 可修改值 + as=12; + +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4.2数组参数 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4.2数组参数 new file mode 100755 index 0000000..70218c6 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4.2数组参数 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4.2数组参数.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4.2数组参数.cpp new file mode 100644 index 0000000..ff6c29e --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4.2数组参数.cpp @@ -0,0 +1,28 @@ +//6.2.4.2数组参数.cpp +#include + +using namespace std; + +void showarr(int *&a); +void showptr(int *&a); + +int main(){ + int arr[]={1,4,7},*p=arr;//使用这个例子中的做法需要先把数组显式转化为指针 + showarr(p); + int a=12,*ptr=&a; + showptr(ptr); + cout << a << endl; + return 0; +} + + +void showarr(int *&a){ + cout << *a << endl; + a++; + cout << *a << endl; +} + +void showptr(int *&a){ + cout << *a << endl; + *a=11; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4.2数组参数.cppy b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4.2数组参数.cppy new file mode 100644 index 0000000..40a1a41 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4.2数组参数.cppy @@ -0,0 +1,28 @@ +//6.2.4.2数组参数.cpp +#include + +using namespace std; + +void showarr(int *&a); +void showptr(int *&a); + +int main(){ + int arr[]={1,4,7}; + showarr(&arr[0]); + int a=12,*ptr=&a; + showptr(ptr); + cout << a << endl; + return 0; +} + + +void showarr(int *&a){ + cout << *a << endl; + a++; + cout << *a << endl; +} + +void showptr(int *&a){ + cout << *a << endl; + *a=11; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4.3数组参数 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4.3数组参数 new file mode 100755 index 0000000..ab0484f Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4.3数组参数 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4.3数组参数.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4.3数组参数.cpp new file mode 100644 index 0000000..9617035 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4.3数组参数.cpp @@ -0,0 +1,16 @@ +//6.2.4.3数组参数.cpp +#include + +using namespace std; + +void ass(int (&a)[4]); + +int main(){ + int a[]={12,222,3,44}; + ass(a); + return 0; +} + +void ass(int (&a)[4]){//这里必须指明维度 + cout << a[0] << endl; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4数组形参 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4数组形参 new file mode 100755 index 0000000..4c8fbe0 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4数组形参 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4数组形参.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4数组形参.cpp new file mode 100644 index 0000000..cfde349 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.2.4数组形参.cpp @@ -0,0 +1,27 @@ +//6.2.4数组形参.cpp +#include + +using namespace std; + +void ra(const int *a); +void rb(int *(&a)); + +int main(){ + int a[]={1,2,3,45,6,7,8,9,5,15,21,11}; + for (auto i=begin(a);i!=end(a);i++)cout << i < +using namespace std; +int main(int argc, char *argv[])//第一个参数是命令行键入的参数个数,第二个参数是命令行参数的尸体,以空格分开,还可以写成char ** argv +{ + cout << "argc= " << argc << endl; + for (int i = 0; i +#include + +using namespace std; + +vector a(); + +int main(){ + a(); + + return 0; +} + +vector a(){ + return {"xsxxsxsx","xcgyubajsks","HelloWorld"}; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.4.1重载作用域 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.4.1重载作用域 new file mode 100755 index 0000000..0733b49 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.4.1重载作用域 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.4.1重载作用域.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.4.1重载作用域.cpp new file mode 100644 index 0000000..fde5112 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.4.1重载作用域.cpp @@ -0,0 +1,21 @@ +#include + +using namespace std; + +int a(); + +int main(){ + cout << a() << endl; + + string a="xsaxa";//使用过后再重新定义也是可行的 + + cout << a << endl; + + return 0; +} + +int a(){ + return 2; +} + + diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.5.1默认实参 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.5.1默认实参 new file mode 100755 index 0000000..9ce69f5 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.5.1默认实参 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.5.1默认实参.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.5.1默认实参.cpp new file mode 100644 index 0000000..3fa72ea --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.5.1默认实参.cpp @@ -0,0 +1,15 @@ +#include + +using namespace std; + +//void a(int i1=1,int i2);//有默认值的后面的参数都必须有默认值 +void a(int i1,int i2=2); + +int main(){ + a(1,2); + return 0; +} + +void a(int i1,int i2){ + cout << i1 << i2 << endl; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.6.1函数匹配 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.6.1函数匹配 new file mode 100755 index 0000000..7b5d5f2 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.6.1函数匹配 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.6.1函数匹配.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.6.1函数匹配.cpp new file mode 100644 index 0000000..7baf213 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/6函数/6.6.1函数匹配.cpp @@ -0,0 +1,20 @@ +#include + +using namespace std; + +void f(int); +//void f(int,int=2); + +int main(){ + f(2); + + return 0; +} + +void f(int x){ + cout << x << endl; +} + +void f(int x,int y){ + cout << x << endl; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/Hello_world.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/Hello_world.cpp new file mode 100644 index 0000000..168d4ba --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/Hello_world.cpp @@ -0,0 +1,9 @@ +#include + +using std::cout; + +int main(){ + cout << "Hello World!"; + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/a.out b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/a.out new file mode 100755 index 0000000..5cbd415 Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/a.out differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/s我的算法/复杂运算 b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/s我的算法/复杂运算 new file mode 100755 index 0000000..5ab621a Binary files /dev/null and b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/s我的算法/复杂运算 differ diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/s我的算法/复杂运算.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/s我的算法/复杂运算.cpp new file mode 100644 index 0000000..11ce28f --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/code/s我的算法/复杂运算.cpp @@ -0,0 +1,28 @@ +#include +#include + +using namespace std; + +int main(){ + cout << "请输入一个算式,包含加减乘除乘方括号:" << endl; + string s; + cin >> s; + vector num; + vector symbol; + + for (auto x:s){ + if((x>47)&&(x<58)){ + if(symbol.begin()==symbol.end()){//判断字符栈是否为空 + num.push_back(x-'0'); + }elif(*(symbol.end()-1)=='46'){ + *(num.end()-1)=atof((to_string(*num.end()-1)).c_str()+x); + } + } + } + + for (double a:num){ + cout << a << endl; + } + + return 0; +} diff --git a/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/复杂运算.cpp b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/复杂运算.cpp new file mode 100644 index 0000000..b7439b7 --- /dev/null +++ b/xi-note-computer/Xi-A-Program/Xi-XX-C++/大三/复杂运算.cpp @@ -0,0 +1,140 @@ +#include +#include + +using namespace std; + +void compares(vector &a,vector &b,int nowsym); +void calculations(vector &a,vector &b,int nowsym); + +int main(){ + cout << "请输入一个算式,包含加减乘除乘方括号:" << endl; + string s; + cin >> s; + vector num={"x"}; + vector symbol; + //1+2- -11*12/ -21^ -31( -32) -40. + cout << "--------------------------------" << endl; + + for (auto x:s){ + if(x>47&&x<58){ + // 数字 + if(*(num.end()-1)=="x"){ + // 可以输入数字 + *(num.end()-1)=to_string(x-'0'); + }else{ + if(symbol.end()!=symbol.begin()){ + if(*(symbol.end()-1)==40){ + // 有小数点 + symbol.pop_back(); + *(num.end()-1)=*(num.end()-1)+"."+to_string(x-'0'); + }else{ + *(num.end()-1)=*(num.end()-1)+to_string(x-'0'); + } + }else{ + // 多位数字 + *(num.end()-1)=*(num.end()-1)+to_string(x-'0'); + } + } + }else{ + // 符号 + int sym=0; + if(x=='.')sym=40; + if(x=='+')sym=1; + if(x=='-')sym=2; + if(x=='*')sym=11; + if(x=='/')sym=12; + if(x=='^')sym=21; + if(x=='(')sym=31; + if(x==')')sym=32; + + if(sym==40){ + // 小数点 + symbol.push_back(sym); + }else{ + // 其他运算符 + compares(num,symbol,sym); + } + } + + } + // 最后一次计算 + compares(num,symbol,0); + + cout << "计算结果为:" << *num.begin() << endl; + + return 0; +} + +void compares(vector &a,vector &b,int nowsym){ + // cout << "运算符" << nowsym << endl; + if(b.end()==b.begin()){ + // 运算符为空直接添加 + b.push_back(nowsym); + if(*(a.end()-1)!="x")a.push_back("x"); + return; + }else{ + if(((*(b.end()-1)+5)(nowsym+5)){ + // 新量级比较小 + if(*(b.end()-1)==31){//遇到左括号( + b.push_back(nowsym); + a.push_back("x"); + return; + } + calculations(a,b,nowsym); + compares(a,b,nowsym); + // 进行计算 + }else{ + if(nowsym==32){ + if(*(b.end()-1)==31){ + cout << "括号相遇" << endl; + b.pop_back(); + // a.push_back("x"); + return; + }else{ + calculations(a,b,nowsym); + compares(a,b,nowsym); + } + //进行计算后,不添加符号直接返回 + }else{ + // 同级进行计算 + calculations(a,b,nowsym); + compares(a,b,nowsym); + } + + } + } +} + +void calculations(vector &a,vector &b,int nowsym){ + double c1=atof((*(a.end()-1)).c_str()); + double c2=atof((*(a.end()-2)).c_str()); + int operation=*(b.end()-1); + double value; + a.pop_back(); + a.pop_back(); + b.pop_back(); + if(operation==1){ + // + + value=c2+c1; + }else if(operation==2){ + // - + value=c2-c1; + }else if(operation==11){ + // * + value=c2*c1; + }else if(operation==12){ + // / + value=c2/c1; + }else if(operation==21){ + // ^ + value=pow(c2,c1); + } + a.push_back(to_string(value)); +} diff --git a/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/ARP协议.pptx b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/ARP协议.pptx new file mode 100644 index 0000000..26eee45 Binary files /dev/null and b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/ARP协议.pptx differ diff --git a/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/ICMP协议.pptx b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/ICMP协议.pptx new file mode 100644 index 0000000..e29452d Binary files /dev/null and b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/ICMP协议.pptx differ diff --git a/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/IP编址.pptx b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/IP编址.pptx new file mode 100644 index 0000000..cdd26f8 Binary files /dev/null and b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/IP编址.pptx differ diff --git a/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/以太网帧结构.pptx b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/以太网帧结构.pptx new file mode 100644 index 0000000..d1c0787 Binary files /dev/null and b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/以太网帧结构.pptx differ diff --git a/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/企业网络架构介绍.pptx b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/企业网络架构介绍.pptx new file mode 100644 index 0000000..e08b9b1 Binary files /dev/null and b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/企业网络架构介绍.pptx differ diff --git a/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/传输介质简介.pptx b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/传输介质简介.pptx new file mode 100644 index 0000000..0a38fa0 Binary files /dev/null and b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/传输介质简介.pptx differ diff --git a/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/传输层协议.pptx b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/传输层协议.pptx new file mode 100644 index 0000000..411a13f Binary files /dev/null and b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/传输层协议.pptx differ diff --git a/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/数据转发过程.pptx b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/数据转发过程.pptx new file mode 100644 index 0000000..403afa7 Binary files /dev/null and b/xi-note-computer/Xi-B-计算机专业知识/网络基础ppt/数据转发过程.pptx differ diff --git a/xi-note-computer/Xi-C-操作系统/Linux/ArchLinux.svg b/xi-note-computer/Xi-C-操作系统/Linux/ArchLinux.svg new file mode 100644 index 0000000..1d5febc --- /dev/null +++ b/xi-note-computer/Xi-C-操作系统/Linux/ArchLinux.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/xi-note-computer/Xi-C-操作系统/Linux/Docker/Docker.md b/xi-note-computer/Xi-C-操作系统/Linux/Docker/Docker.md new file mode 100644 index 0000000..903a081 --- /dev/null +++ b/xi-note-computer/Xi-C-操作系统/Linux/Docker/Docker.md @@ -0,0 +1,463 @@ +![[Docker.svg]] + +> 说明 + +- 学习来源 + - [学习 Docker 看完哪篇超详细的教程就足够了? - 知乎 (zhihu.com)](https://www.zhihu.com/question/485967221) + - [【docker教程】2022新完整版docker容器教程,入门到精通3天光速搞定_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1AZ4y1b7ev/) + + +------ + + + +[toc] + +# 📙一、 系统介绍 + +## 1 概括性介绍 + +### 1.1 Docker Run做了什么 + +- 查找本地镜像 +- 查找网络镜像 + +### 1.2 Docker工作机制 + +> 作者:步尔斯特 +> 链接:https://www.zhihu.com/question/485967221/answer/2556644950 +> 来源:知乎 +> 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 + +Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket从客户端访问,DockerServer(守护进程)接受到DockerClient(客户端)的指令,就会执行这个命令。 + +守护进程管理运行在主机上的容器 。 + +容器,是一个运行时环境,就是我们前面说到的集装箱。 + +### 1.3 Docker比VMware快的原因 + +> 作者:步尔斯特 +> 链接:https://www.zhihu.com/question/485967221/answer/2556644950 +> 来源:知乎 +> 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 + +- `docker有着比虚拟机更少的抽象层`。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。 +- `docker利用的是宿主机的内核,而不需要Guest OS`。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。 +- **Docker底层共用物理机的实际资源,而虚拟机需要模拟物理机的操作系统资源,所以Docker加载得更快,而虚拟机更慢。** + + + +![[Docker和VMware区别.png]] + + + +> Docker是一个解决了运行环境和配置问题,并且方便做持续集成以及有助于整体发布的容器虚拟化技术。 + +- 镜像 +- 容器 +- 仓库 + +----- + + + +# 📦二、 安装 + +## 1 脚本安装 + +```bash +$ curl -fsSL https://get.docker.com -o get-docker.sh +$ DRY_RUN=1 sh ./get-docker.sh # 了解脚本在安装过程中将执行哪些步骤 +$ sudo sh test-docker.sh # 直接执行 +``` + +## 2 package包 + +- 转到 [`https://download.docker.com/linux/debian/dists/`](https://download.docker.com/linux/debian/dists/),选择您的 Debian 版本,然后浏览到 、选择 、 或 ,然后下载您要安装的 Docker 引擎版本的文件。`pool/stable/``amd64``armhf``arm64``.deb` + +- 安装 + +```bash +$ sudo dpkg -i package.deb +``` + +- 运行 + +```bash +$ sudo docker run hello-world +``` + +## 3 软件源 + +参考: + +> [在 Debian | 上安装 Docker 引擎泊坞窗文档](https://docs.docker.com/engine/install/debian/) +> +> [Debian安装Docker(国内源) - 简书 (jianshu.com)](https://www.jianshu.com/p/e9873d92ebbd) +> +> [容器镜像服务 (aliyun.com)](https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors) + +### 3.1 卸载 + +#### 3.1.1 普通卸载 + +卸载内容:`docker` `docker.io` `docker-engine` + +```bash +$ sudo apt-get remove docker docker-engine docker.io containerd runc +``` + +将保留 的内容,包括映像、容器、卷和网络。 + +#### 3.1.2 完全卸载 + +- 卸载泊坞引擎、CLI、容器化和泊坞窗撰写包: + + ```bash + $ sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin + $ # purge不保留配置文件 + ``` + +- 主机上的映像、容器、卷或自定义配置文件不会自动删除。删除所有映像、容器和卷: + + ```bash + $ sudo rm -rf /var/lib/docker + $ sudo rm -rf /var/lib/containerd + ``` + +您必须手动删除任何已编辑的配置文件。 + +### 3.2 安装 + +#### 3.2.1 设置源 + +1. ##### 基础源 + +```bash +$ # 编辑/etc/apt/sources.list +# 阿里云源 +deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib +deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib +deb https://mirrors.aliyun.com/debian-security/ bullseye-security main +deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main +deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib +deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib +deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib +deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib + +$ sudo apt-get update +$ sudo apt-get install \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg \ + lsb-release +``` + +2. ##### 设置Docker源 + +- 官方源 + - 添加Docker官方的GPG key + - 设置stable源 + +```bash +# 添加Docker官方的GPG key +$ sudo mkdir -p /etc/apt/keyrings +$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg +# 设置stable源 +$ echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ + $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +``` + +- 国内源 + - 添加Docker官方的GPG key + - 设置stable源 + +```bash +# 添加Docker官方的GPG key +$ sudo mkdir -p /etc/apt/keyrings +$ curl -fsSL http://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg +# 设置stable源 +$ echo \ + "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] http://mirrors.ustc.edu.cn/docker-ce/linux/debian \ + $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +``` + +3. ##### 安装 + +- 更新包索引安装最新的Docker + +```bash +$ sudo apt-get update +``` + +- 查看可用版本 + +```bash +$ apt-cache madison docker-ce + + docker-ce | 5:20.10.18~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages + docker-ce | 5:20.10.17~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages + docker-ce | 5:20.10.16~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages + docker-ce | 5:20.10.15~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages + docker-ce | 5:20.10.14~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages + docker-ce | 5:20.10.13~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages + docker-ce | 5:20.10.12~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages + docker-ce | 5:20.10.11~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages + docker-ce | 5:20.10.10~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages + docker-ce | 5:20.10.9~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages + docker-ce | 5:20.10.8~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages + docker-ce | 5:20.10.7~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages + docker-ce | 5:20.10.6~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages +``` + +- 安装最新版 + +```bash +$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin +``` + +- 安装指定版本,版本号为`5:20.10.8~3-0~debian-bullseye` + +```bash +$ sudo apt-get install docker-ce= docker-ce-cli= containerd.io docker-compose-plugin +``` + +4. ##### 运行测试 + +- 通过运行`hello-world`镜像来验证是否正确安装了 Docker 引擎。 + +```bash +$ sudo docker run hello-world +``` + +5. ##### 设置仓库(配置docker加速器) + +```bash +$ sudo mkdir -p /etc/docker +$ sudo touch /etc/docker/daemon.json + +# 编辑此文件,加入以下内容 +{ + "registry-mirrors" : [ + "https://8xpk5wnt.mirror.aliyuncs.com" # 自己的阿里云镜像源,每个人不一样 + # https://docker.mirrors.ustc.edu.cn # 中科大的源 + ] +} + +# 重启 +systemctl daemon-reload +systemctl restart docker +# 设置开机启动 +systemctl enable docker + +#查看是否运行 +ps aux | grep docker + +docker ps +docker images +docker version +``` + + + +### 3.3 以非root身份运行 + +#### 3.3.1 查看用户组 + +```bash +$ sudo cat /etc/group |grep docker + +# docker:x:998:表示存在 +``` + +#### 3.3.2 创建用户组 + +```bash +$ sudo groupadd docker +``` + +#### 3.3.3 将用户添加到用户组 + +```bash +$ sudo usermod -aG docker $USER +$ newgrp docker # 激活组更改,无效的话尝试重连ssh,退出登录,重启计算机等 +``` + +### 3.4 为Docker指定DNS服务器 + +[Linux |的安装后步骤泊坞窗文档 (docker.com)](https://docs.docker.com/engine/install/linux-postinstall/#specify-dns-servers-for-docker) + +### 3.5 CentOS上安装 + +> 大同小异,参考[在 CentOS |上安装Docker引擎文档 (docker.com)](https://docs.docker.com/engine/install/centos/) + +----- + + + +# 📒三、入门 + +## 1 基础组件 + +### 1.1 ⭐Docker引擎 + +![[Docker Engine.png]] + +### 1.2 ⭐Docker核心 + +![[Docker核心.png]] + +### 1.3 ⭐Docker平台组成 + +![[Docker平台组成.png]] + +### 1.4 ⭐Docker生命周期 + +![[Docker生命周期.png]] + +### 1.5 ⭐Docker分层原理 + +![[镜像分层原理.png]] + + + +----- + + + +# 🔯四、命令 + +## 镜像 + +### 查看本地镜像列表 + +```bash +docker images +``` + +### 搜索镜像 + +```bash +docker search imagesName +``` + +### 拉取镜像 + +```bash +docker pull imagesName/id +docker pull imagesName:Tag +``` + +### 保存镜像 + +```bash +docker save imagesName/id -o 镜像保存的位置和名称 +``` + +### 导入镜像 + +```bash +docker load -i 镜像位置 +``` + +### 删除镜像 + +```bash +#删除一个 +docker rmi -f 镜像名/镜像ID + +#删除多个 其镜像ID或镜像用用空格隔开即可 +docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID + +#删除全部镜像 -a 意思为显示全部, -q 意思为只显示ID +docker rmi -f $(docker images -aq) +``` + +## 容器 + +### 容器列表 + +```bash +docker ps # 正在运行的 +docker ps -a # 所有的容器 +``` + +### 创建和删除容器 + +```bash +# 创建容器 +docker run -it -d --name 要取的别名 -p 宿主机端口:容器端口 -v 宿主机文件存储位置:容器内文件位置 镜像名:Tag /bin/bash + + +#删除一个容器 +docker rm -f 容器名/容器ID +#删除多个容器 空格隔开要删除的容器名或容器ID +docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID +#删除全部容器 +docker rm -f $(docker ps -aq) +``` + +参数含义 + +> - -it 表示 与容器进行交互式启动 +> - -d 表示可后台运行容器 (守护式运行)   +> - --name 给要运行的容器 起的名字   +> - /bin/bash  交互路径 +> - -p 将容器的端口映射到宿主机上,通过宿主机访问内部端口 +> - -v 将容器内的指定文件夹挂载到宿主机对应位置 + +### 启动和停止容器 + +```bash +# 启动 +docker start 容器ID/名称 +docker restart 容器ID/名称 +# 停止 +docker stop 容器名/id +``` + +### 退出和进入容器 + +```bash +exit +# Ctrl + D 直接退出并关闭容器 +# CTRL + P + Q 退出到后台 + +docker attach 容器ID/名称 # 需要Ctrl + P + Q才可以退出至后台,Ctrl + D会直接退出,exit也会直接退出 +docker exec -it 容器ID/名称 bash # Ctrl + D可以直接退出到后台 +``` + +### 修改容器名 + +```bash +# 修改容器名称 +docker rename 原容器名 要修改的容器名 +``` + +### 暂停和恢复容器 + +```bash +# 暂停容器 +docker pause 容器名 +# 恢复容器 +docker unpause 容器名 +``` + +### 生成镜像 + +**使用场景:** + +- 构建临时的测试镜像; +- 容器被入侵后,使用docker commit,基于被入侵的容器构建镜像,从而保留现场,方便以后追溯。 + +**弊端:** + +- 使用docker commit构建的镜像包含了编译构建、安装软件,以及程序运行产生的大量无用文件,这会导致镜像体积很大,非常臃肿。 +- 使用docker commit构建的镜像会丢失掉所有对该镜像的操作历史,无法还原镜像的构建过程,不利于镜像的维护。 + +```bash +docker commit 容器ID 镜像名称:TAG +``` \ No newline at end of file diff --git a/xi-note-computer/Xi-C-操作系统/Linux/Docker/Docker.svg b/xi-note-computer/Xi-C-操作系统/Linux/Docker/Docker.svg new file mode 100644 index 0000000..d2a1f5f --- /dev/null +++ b/xi-note-computer/Xi-C-操作系统/Linux/Docker/Docker.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/xi-note-computer/Xi-C-操作系统/Linux/Docker/Docker2.svg b/xi-note-computer/Xi-C-操作系统/Linux/Docker/Docker2.svg new file mode 100644 index 0000000..ac0a5b9 --- /dev/null +++ b/xi-note-computer/Xi-C-操作系统/Linux/Docker/Docker2.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/xi-note-computer/Xi-C-操作系统/Linux/Docker/docker.png b/xi-note-computer/Xi-C-操作系统/Linux/Docker/docker.png new file mode 100644 index 0000000..0949b82 Binary files /dev/null and b/xi-note-computer/Xi-C-操作系统/Linux/Docker/docker.png differ diff --git a/xi-note-computer/Xi-C-操作系统/Linux/Git/Git.md b/xi-note-computer/Xi-C-操作系统/Linux/Git/Git.md new file mode 100644 index 0000000..1f34c5f --- /dev/null +++ b/xi-note-computer/Xi-C-操作系统/Linux/Git/Git.md @@ -0,0 +1,177 @@ +# Git学习 + +> 来自于Bilibili +> 【狂神说Java】Git最新教程通俗易懂 + + +## Git配置 + +1. 查看Git配置 + +```bash +# 查看系统配置 +git config --system --list +# 查看当前用户配置global +git config --global --list +# 查看当前仓库配置 +git config -l +``` + +2. 设置用户标识 + +```bash +# 用户名称 +git config user.name "name" +# 邮箱 +git config user.email "email" +``` + + +## 核心 + +1. 四个区域 + +- 工作区 + +- 暂存区 + +- 仓库区 + +- 远程仓库 + +## 操作 + +1. 初始化 + +```bash +# 本地创建 +git init +# 远程克隆 +git clone url +``` + +2. 查看文件状态 + +```bash +# 查看指定文件状态 +git status [filename] +# 查看所有文件状态 +git status +``` + +3. 忽略文件 + +`.gitignore` + +- 注释使用`#`开头 + +- 通配符 + + - *任意多字符 + - ?一个字符 + - [abc]可选字符 + - {按不出, ds}可选字符串 + - !开头表示特例 + +- /开头代表路径 + +- /结尾代表路径下所有文件 + +4. 提交流程 + +```bash +# 添加到暂存区 +# .代表所有 +git add . +# 提交 +git commit -m "message" +# 推送到远程 +git push +``` + +5. 分支 + +```bash +# 列出所有本地分支 +git branch +# 列出所有远程分支 +git branch -r +# 创建一个分支但依然停留在当前分支 +git branch [分支名称] +# 创建分支并切换到改分支 +git checkout -b [分支名称] +# 切换存在的分支 +git checkout [分支名称] +# 切换到远程分支并创建本地分支 +# 一般远程分支为 orign/分支名 +git checkout -b [新本地分支] [远程分支] +# 删除分支 +git branch -d [分支名称] +# 删除远程分支 +git push orign --delete [远程分支名称] +git branch -dr [remote/branch] + +# 合并分支到当前分支 +git merge [分支名称] + +``` + +6. 查看提交记录 + +```bash +# 查看概览 +git log +# 查看修改内容 +git log -p +# 最近n条记录 +git log -[n] +# 查看简介信息 +git log --oneline +# 分支变动 +git log --graph +# 逆向显示 +git log --reverse +# 查找指定用户的提交日志 +git log --author=Linus --oneline -5 + + +# 查看指定文件的修改记录 +git blame + +``` + +7. 回退版本 + +```bash +$ git reset HEAD^ # 回退所有内容到上一个版本 +$ git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本 +$ git reset 052e # 回退到指定版本 +``` + + +8. 清空暂存区 + +- 还没有进行 add . 和 commit 操作 + +```bash +# 只能清空全部已修改的问题件, 但是对于新建的文件和文件夹无法清空, 必须组合下面命令; +$ git checkout . +# 清空所有新建的文件和文件夹; +git clean -d +``` + +- 已经 add . 了, 用如下命令重置 + +```bash +$ git reset . +``` + +9. 远程仓库 + +```bash +# 添加远程仓库 +git remote add origin +# 提交到远程仓库 +git push -u origin master +# 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。 +``` \ No newline at end of file diff --git a/xi-note-computer/Xi-C-操作系统/Linux/Pi/flask运行.txt b/xi-note-computer/Xi-C-操作系统/Linux/Pi/flask运行.txt new file mode 100644 index 0000000..30eb547 --- /dev/null +++ b/xi-note-computer/Xi-C-操作系统/Linux/Pi/flask运行.txt @@ -0,0 +1 @@ +/usr/bin/python3 /usr/bin/gunicorn -w 4 app:app --preload --chdir /home/pi/togy2021/ \ No newline at end of file diff --git a/xi-note-computer/Xi-C-操作系统/Linux/Pi/zhixing gunicorn.txt b/xi-note-computer/Xi-C-操作系统/Linux/Pi/zhixing gunicorn.txt new file mode 100644 index 0000000..0f53cb1 --- /dev/null +++ b/xi-note-computer/Xi-C-操作系统/Linux/Pi/zhixing gunicorn.txt @@ -0,0 +1 @@ +gunicorn -w 4 app:app --preload --chdir /home/pi/togy2021 diff --git a/xi-note-computer/Xi-C-操作系统/Linux/Pi/定时任务.txt b/xi-note-computer/Xi-C-操作系统/Linux/Pi/定时任务.txt new file mode 100644 index 0000000..6a423c5 --- /dev/null +++ b/xi-note-computer/Xi-C-操作系统/Linux/Pi/定时任务.txt @@ -0,0 +1,24 @@ +# /etc/crontab: system-wide crontab +# Unlike any other crontab you don't have to run the `crontab' +# command to install the new version when you edit this file +# and files in /etc/cron.d. These files also have username fields, +# that none of the other crontabs do. + +SHELL=/bin/sh +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin + +# Example of job definition: +# .---------------- minute (0 - 59) +# | .------------- hour (0 - 23) +# | | .---------- day of month (1 - 31) +# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... +# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat +# | | | | | +# * * * * * user-name command to be executed +17 * * * * root cd / && run-parts --report /etc/cron.hourly +25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) +47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) +52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) +*/20 * * * * root python3 /home/pi/togyddns/togyddns.py +0 0 * * * root reboot +# diff --git a/xi-note-computer/Xi-C-操作系统/Linux/Pi/开机自启.txt b/xi-note-computer/Xi-C-操作系统/Linux/Pi/开机自启.txt new file mode 100644 index 0000000..a574ed5 --- /dev/null +++ b/xi-note-computer/Xi-C-操作系统/Linux/Pi/开机自启.txt @@ -0,0 +1,30 @@ +sudo nano /etc/rc.local + + + + +#!/bin/sh -e +# +# rc.local +# +# This script is executed at the end of each multiuser runlevel. +# Make sure that the script will "exit 0" on success or any other +# value on error. +# +# In order to enable or disable this script just change the execution +# bits. +# +# By default this script does nothing. + +# Print the IP address +_IP=$(hostname -I) || true +if [ "$_IP" ]; then + printf "My IP address is %s\n" "$_IP" +fi +# sudo python3 /home/pi/togy2021/starttogy2021.py & +# sudo python3 /home/pi/togyddns/togyddns.py & + + su pi -c "python3 /home/pi/togyddns/togyddns.py &" + su pi -c "/usr/bin/python3 /usr/bin/gunicorn -w 4 app:app --preload --chdir /home/pi/togy2021/ &" + +exit 0 \ No newline at end of file diff --git a/xi-note-computer/Xi-C-操作系统/Linux/Shell.md b/xi-note-computer/Xi-C-操作系统/Linux/Shell.md new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-C-操作系统/Linux/UFW.md b/xi-note-computer/Xi-C-操作系统/Linux/UFW.md new file mode 100644 index 0000000..46502cd --- /dev/null +++ b/xi-note-computer/Xi-C-操作系统/Linux/UFW.md @@ -0,0 +1,362 @@ +# UFW + +> Debian + + +# 简单版本 + +* 下载 + +```bash +wget http://mirrors.163.com/debian/pool/main/u/ufw/(这里自己去查看版本).deb +# http://mirrors.163.com/debian/pool/main/u/ufw/ufw_0.36.1-4_all.deb +``` + +* 安装 + +```bash +sudo dpkg -i *.deb +``` + +* 配置文件 + +```bash +nano /etc/default/ufw +``` + +* 说明 + +allow 开启 + +deny 禁止 + +ignore 忽略 + +* 查看状态 + +```bash +sudo ufw status verbose +# sudo ufw status +``` + +* 刷新 + +```bash +sudo ufw reload +``` + +* 删除规则 + +```bash +sudo ufw delete allow ssh# 删除刚才添加的某个规则 +``` + +如果规则又长又复杂,问题就比较棘手了。这里有一个更简单的方法,需要分成两个步骤: + +```bash +sudo ufw status numbered //按规则来编号防火墙规则。命令会将所有防火墙规则以数字列表形式列出来 +# 请将 [number] 替换成规则列表对应的数字序号。 +sudo ufw delete 1 //按规则编号删除防火墙规则 sudo ufw delete [number] +sudo ufw delete 4 //删除编号为4的规则 +``` + +* 添加规则 + +```bash +sudo ufw allow port +``` + +* 范围规则(UDP和TCP需要单独设置) + +```bash +sudo ufw allow 0:1024/udp +``` + +* 禁用端口 + +示例: + +```bash +sudo ufw deny http //拒绝http连接 +sudo ufw deny smtp //禁止外部访问smtp服务 + +sudo ufw deny from 111.111.111.111 //拒绝特定IP连接 +sudo ufw deny from 192.168.1.5 to any //拦截或拒绝来自192.168.1.5的所有数据包 +``` + + + + + + + + +## 1.引言 + +`Linux`系统下一般会使用`iptables`对防火墙的规则进行管理。`iptables`可以灵活的定义防火墙规则, 功能非常强大,但是由此产生的副作用便是配置过于复杂。在`deepin`系的系统里,附带了一个相对iptables简单很多的防火墙配置工具:`ufw`。 + +## 2.安装 + +```bash +wget http://mirrors.163.com/debian/pool/main/u/ufw/(这里自己去查看版本).deb +# http://mirrors.163.com/debian/pool/main/u/ufw/ufw_0.36.1-4_all.deb +``` + +```bash +sudo dpkg -i *.deb +``` + +一般系统已经自带了ufw,如果意外卸载了,可以执行以下命令安装: + +```bash +sudo apt install ufw +``` + +## 3.查看防火墙状态 + +``` +sudo ufw status +sudo ufw status numbered //按编号显示 +``` + +## 4. 防火墙版本 + +``` +sudo ufw version +``` + +## 5.开启/禁止端口 + +``` +sudo ufw allow|deny [service] +``` + +## 6.开启/关闭防火墙 (默认设置是`disable`) + +``` +sudo ufw enable|disable +``` + +## 7.常见用法 + +## 7.1基本使用 + +``` +sudo ufw enable +sudo default deny +``` + +运行以上两条命令后,开启了防火墙,并在系统启动时自动开启。关闭所有外部对本机的访问,但本机访问外部正常;此时系统已经足够安全了,如果你需要开放某些服务,再使用`sudo ufw allow`开启。 + +设置默认策略(默认策略即为拒绝所有传入连接,允许所有传出链接) + +``` +sudo ufw default deny incoming +sudo ufw default allow outgoing +``` + +允许SSH连接(重要!)否则你将无法连接云服务器… + +``` +sudo ufw allow ssh +sudo ufw allow 22 +``` + +### 7.2启动端口 + +示例: + +``` +sudo ufw allow from 123.45.67.89 //允许从一个 IP 地址连接 +sudo ufw allow from 123.45.67.89/24 //允许特定子网的连接: +sudo ufw allow smtp  //允许所有的外部IP访问本机的25/tcp (smtp)端口 +sudo ufw allow 22/tcp //允许所有的外部IP访问本机的22/tcp (ssh)端口 +sudo ufw allow 53 //允许外部访问53端口(tcp/udp) +sudo ufw allow from 192.168.1.100 //允许此IP访问所有的本机端口 +sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53 + +sudo ufw allow www +sudo ufw allow 80/tcp + +sudo ufw allow ftp +sudo ufw allow 21/tcp + +sudo ufw allow 22/tcp //允许所有的外部IP访问本机的22/tcp (ssh)端口 +sudo ufw allow 53 //允许外部访问53端口(tcp/udp) +sudo ufw allow 80 //允许外部访问80端口 等价 sudo ufw allow http +sudo ufw allow http + +sudo ufw allow from 192.168.1.1 //允许此IP访问所有的本机端口 +sudo ufw allow from 111.111.111.111 to any port 22 //允许特定IP特定端口的连接 +sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53 +sudo ufw allow smtp  //允许所有的外部IP访问本机的25/tcp (smtp)端口 +``` + +允许特定 IP/端口的组合: + +``` +sudo ufw allow from 123.45.67.89 to any port 22 proto tcp +//proto tcp 可以删除或者根据你的需求改成 proto udp,所有例子的 allow 都可以根据需要变成 deny。 +``` + +允许特定端口范围连接 + +``` +sudo ufw allow 1000:2000/tcp +sudo ufw allow 2001:3000/udp + +//拒绝所有的TCP流量从10.0.0.0/8 到192.168.0.1地址的22端口 +sudo ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 22 + +//可以允许所有RFC1918网络(局域网/无线局域网的)访问这个主机(/8,/16,/12是一种网络分级): +sudo ufw allow from 10.0.0.0/8 +sudo ufw allow from 172.16.0.0/12 +sudo ufw allow from 192.168.0.0/16 +``` + +### 7.3禁用端口 + +示例: + +``` +sudo ufw deny http //拒绝http连接 +sudo ufw deny smtp //禁止外部访问smtp服务 + +sudo ufw deny from 111.111.111.111 //拒绝特定IP连接 +sudo ufw deny from 192.168.1.5 to any //拦截或拒绝来自192.168.1.5的所有数据包 +``` + +除了基于端口的允许或阻止,UFW 还允许您按照 IP 地址、子网和 IP 地址/子网/端口的组合来允许/阻止: + +``` +ufw deny from {ip-address-here} to any port {port-number-here} + +//例子: +sudo ufw deny from 202.54.1.5 to any port 80 //阻断或拒绝IP地址202.54.1.5访问80端口的请求 +``` + +拦截特定IP、端口以及协议: + +``` +sudo ufw deny proto {tcp|udp} from {ip-address-here} to any port {port-number-here} + +//例如:阻断IP地址202.54.1.1访问tcp 22端口(FTP协议),可以输入 +sudo ufw deny proto tcp from 202.54.1.1 to any port 22 +sudo ufw status numbered +``` + +拦截子网 + +``` +sudo ufw deny proto tcp from sub/net to any port 22 +sudo ufw deny proto tcp from 202.54.1.0/24 to any port 22 +``` + +## 7.4删除规则 + +``` +sudo ufw delete allow ssh +sudo ufw delete allow 22 + +sudo ufw delete allow http +sudo ufw delete allow 80 +sudo ufw delete allow 80/tcp + +sudo ufw delete allow 1000:2000/tcp +``` + +如果规则又长又复杂,问题就比较棘手了。这里有一个更简单的方法,需要分成两个步骤: + +``` +sudo ufw status numbered //按规则来编号防火墙规则。命令会将所有防火墙规则以数字列表形式列出来 +# 请将 [number] 替换成规则列表对应的数字序号。 +sudo ufw delete 1 //按规则编号删除防火墙规则 sudo ufw delete [number] +sudo ufw delete 4 //删除编号为4的规则 +``` + +## 8.详细说明 + +``` +//[]内的为选配项 +//命令激活|关闭|重新载入 +ufw enable|disable|reload + +//命令默认 允许|阻止|拒绝 [访问本机的规则|向外访问的规则 +//注:reject让访问者知道数据被拒绝(回馈拒绝信息)。deny则直接丢弃访问数据,访问者不知道是访问被拒绝还是不存在该主机。 +ufw default allow|deny|reject [incoming|outgoing] + +//命令日志 开启|关闭|“级别” +ufw logging on|off|LEVEL + +//命令复位 +ufw reset + +//命令状态 [详细|被编号的规则] +ufw status [verbose|numbered] + +//命令显示 “报告类型” +ufw show REPORT + +//命令[删除][插到“x号规则”之前] 允许|阻止|拒绝|限制 [进|出] [记录新连接|记录所有数据包] “端口” [/“协议”] +ufw [delete] [insert NUM] allow|deny|reject|limit [in|out][log|log-all] PORT[/protocol] + +//命令[删除][插到x号规则之前] 允许|阻止|拒绝|限制 [进|出 基于“什么网络设备”] [协议 “协议”] [来源 “地址” [端口 “端口”]] [目标 “地址” [端口 “端口”]] +ufw [delete] [insert NUM] allow|deny|reject|limit [in|out on INTERFACE] [log|log-all] [proto protocol] [from ADDRESS [port PORT]] [to ADDRESS [port PORT]] + +//命令删除 “第X号规则” +ufw delete NUM + +//命令程序 清单|信息|默认|更新 +ufw [--dry-run] app list|info|default|update +``` + +## 9.参数 + +``` +–version +显示程序版本号 + +-h , –help +显示帮助信息 + +–dry-run +不实际运行,只是把涉及的更改显示出来。 + +enable +激活防火墙,开机时自动启动 + +disable +关闭防火墙,开机时不启动 + +reload +重新载入防火墙 + +default allow|deny|reject 方向 +方向是指:向内(incoming)|向外(outgoing)。如果更改了默认策略,一些已经存在的规则可能需要手动修改。更多内容看“规则示例”一节。 + +logging on|off|“级别” +切换日志状态。日志记录包使用的是系统日志。“级别”有好几个,默认是低级(low)。详细内容看“日志”一节。 + +reset [--force] +关闭防火墙,并复位至初始安装状态。如果使用–force选项,则忽略确认提示。 + +status +显示防火墙的状态和已经设定的规则。使用status verbose显示更详细的信息。‘anywhere’与‘any’、‘0.0.0.0/0’一个意思。 + +show “报告类型” +显示防火墙运行信息。详细内容看“报告类型” + +limit “规则” +此命令目前只能用于IPv4。还不支持IPv6. +``` + +学习更多知识,加QQ群:1098090823 + + + + + + + + + diff --git a/xi-note-computer/Xi-C-操作系统/Windows/wsl2总结.md b/xi-note-computer/Xi-C-操作系统/Windows/wsl2总结.md new file mode 100644 index 0000000..20d1a13 --- /dev/null +++ b/xi-note-computer/Xi-C-操作系统/Windows/wsl2总结.md @@ -0,0 +1,147 @@ +> 所需环境: windows11专业版及以上 +> WSL版本: 2 +> 镜像: 通过VM导出或Docker导出 + +## 获取镜像 + +### 使用VM + +1. 安装好镜像 + +2. 制作镜像 + +```bash + cd / + tar Jcvpf debian.tar --exclude=/debian.tar --exclude=/proc --exclude=/sys / +``` + +### 使用Docker + +直接备份Docker容器 + +## 导入到WSL + +```bash + # 导入 + wsl --import Debian_base d:\WSL\Debian_base C:\Users\x7129\debian.tar + # 导出 + wsl --export Debian_base D:\Debian_Base_WSL.tar + # 强制关闭 + wsl --shutdown + # 查看运行状态 + wsl -l --all -v + # 注销 + wsl --unregister + # 进入用户主页 + wsl ~ + # 进入身份 + wsl -u root + # 更感默认账户,导入版不行 + # config --default-user + # 关闭运行 + wsl --terminate + # 设置默认分发版 + wsl -s Debian_base +``` + +## 设置开机启动 + +win+r 输入shell:startup +创建文件: `wsl_init.vbs` + +```powershell +Set ws = WScript.CreateObject("WScript.Shell") +ws.run "wsl -d Debian_base -u root /etc/wsl.init restart",vbhide +ws.run "Set-VMSwitch WSL -NetAdapterName 以太网",vbhide +``` + +wsl 的其他参数 + +cmd="wsl -d Ubuntu-20.04 -u root --cd %USERPROFILE%" +CreateObject("Wscript.Shell").run cmd,vbhide +除此之外还可以为 wsl设置一些参数,用于指定 wsl 的运行状态: + +--cd %USERPROFILE%用于指定wsl 的工作目录 +-u root 用于指定 wsl的登录用户为 root +-d Ubuntu-20.04 用于指定 wsl 的发行版,可以使用 wsl -l -v查看当前发行版 + +## 设置桥接网络 + +win+r shell:startup +创建文件: `wsl_switch.vbs` + +```powershell +# 存在中文编码方式为ASCII +strCommand ="C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe -command Set-VMSwitch WSL -NetAdapterName 以太网" + +Set WshShell = WScript.CreateObject("WScript.Shell") +If WScript.Arguments.Length = 0 Then + Set ObjShell = CreateObject("Shell.Application") + ObjShell.ShellExecute "wscript.exe" _ + , """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1 + WScript.Quit +End if + Set objExec = WshShell.Exec(strCommand) +``` + + +## 编辑wsl内部wsl.init文件 + +```bash + export PATH=/usr/sbin/:$PATH + service ssh start + # 后续启动内容可以添加 +``` + +## 更改命令行提示颜色 cp /home/nie/.bashrc /root + +- 将ps1哪一行32改成31 root为红色 + + +## 设置网络 + +```powershell + # 管理员身份运行 + Get-NetAdapter + # 可能需要开启运行脚本的指令 + Set-VMSwitch WSL -NetAdapterName 以太网 #以太网可以根据情况换,观察上面列出的网卡名称 +``` + +## wsl内部 +```bash + nano /etc/network.sh + #!/bin/bash + new_ip=192.168.1.233 + brd=192.168.1.255 + gateway=192.168.1.1 + nameserver=192.168.1.1 + net_dev=eth0 + # 注意,下面这里需要用到wsl的sud执行命令,所以需要填写你wsl的密码 + echo "[your password]" | sudo -S ip addr del $(ip addr show $net_dev | grep 'inet\b' | awk '{print $2}' | head -n 1) de>sudo ip addr add $new_ip/24 broadcast $brd dev $net_dev + sudo ip route add 0.0.0.0/0 via $gateway dev $net_dev + sudo sed -i "\$c nameserver $nameserver" /etc/resolv.conf +``` + +```bash + # /etc/wsl.init加入 + /etc/wsl_network.sh +``` + +## 其他设置 + +```bash + # nano /etc/wsl.conf + [user] + default=nie # 默认登陆账户 + [network] + hostname = wow-xi + generateHosts = false # 不自动修改主机名 + generateResolvConf = false # 不自动修改DNS +``` + +```bash + # nano /etc/hosts + # 加入上面设置的主机名 + 127.0.0.1 wow-xi + 127.0.0.1 localhost +``` \ No newline at end of file diff --git a/xi-note-computer/Xi-Plan9/2023年.md b/xi-note-computer/Xi-Plan9/2023年.md new file mode 100644 index 0000000..97d434a --- /dev/null +++ b/xi-note-computer/Xi-Plan9/2023年.md @@ -0,0 +1,199 @@ +> 对本年度进行规划 + +## 年度总计划 +1. [ ] 攒钱 叁萬元整 +2. [ ] 深入学习js相关知识 + 1. [ ] TypeScript + 2. [ ] Vue 3 + 3. [ ] React 18 & React Router + 4. [ ] koa2 +3. [ ] 学习GoLang&Docker等技术 +4. [ ] 使用Go和Node&Bun开发同一款管理软件 + 1. [ ] 功能-记账和统计 +5. [ ] 减肥至130斤 +6. [ ] 减少抽烟量以至于戒烟 +7. [ ] 控制饮食 + 1. 不暴饮暴食 + 2. 少吃肉 + 3. 多吃稀饭类的东西 + 4. 尝试吃水果 + 1. 香蕉🍌 + 2. 葡萄🍇 + 3. 猕猴桃🥝 + 4. 樱桃🍒 + 5. 桃子🍑 +8. [ ] 规律作息 + 1. 早上6点整🕕起床,刷牙洗脸洗头 + 2. 早上6点半🕡晨跑听音乐,坚持40分钟左右 + 3. 早上7点整🕖学习和看书 + 4. 早上8点半🕣吃早饭上班 + 6. 晚上7点左右🕖下班进行锻炼 + 7. 晚上8点整🕗回家中继续学习读书 + 8. 晚上9点整🕘洗脚刷牙洗脸准备睡觉 + 9. 晚上9点40酝酿睡觉 + +## 1月 January + +- - [ ] 对文件进行整理 + - - [ ] 各种网盘文件的统一 + - - [ ] 技术上的文件归纳 + - - [ ] 仓库整理 +- - [ ] 做好本年度的细致规划(思想上,行为上) +- - [x] 回家过年(爸爸,妈妈,妹妹的礼物) +- - [ ] 思考要做的事情(主要是在技术上的产物) +- - [x] 完善文档体系(将生活使用Obsidian记录下来的体系) +- - [ ] 修复家里的网络,树莓派,带回去一个路由器 +- - [ ] 好好清理房子,衣服和各种物品 + +### 16日 周一 + +- [x] 必须完成RGV官网的反馈和图片点击跳转 +- [x] 整理百度云的文件 +- [ ] 整理阿里云的文件,将云盘文件全部转移到阿里云(下载较慢,得延期) +- [ ] 规划年度计划 + +### 17日 周二 放假 + +- [ ] 在公司下载B站视频 +- [ ] 转移Github项目到TOGY.TOP +- [ ] 规整所有项目到TOGY.TOP +- [ ] 规划年度计划 +- [ ] 整理高中知识点 + +😢失败的一天 + +### 18日 周三 + +- [ ] 收拾家里的衣服和其他物品 +- [ ] 继续规划未来 +- [ ] 整理各种笔记到这里 + +### 19日 周四 + +- [ ] 收拾回家的衣物等 +- [ ] + +### 20日 周五 回家 + +雪瑶来了 + +### 21日 周六 过年 + +雪瑶在玩 + +### 22日 周日 + +去朱根和吴阳家,王波回来了 + +### 23日 初二 🏠 + +大家都来了,彤彤,吴华,吴萍他们 + +### 24日 初三 + +去小姑家 + +### 25日 初四 ❤️ + +下午去了城里,见到了高力,杨继,王澳,李志伟。 +和图一一联线,尝试复原。 + +### 26日 初五 + +去李志伟家,喝多了,好讨厌喝酒。 +晚上回来打了台球,但是已经醉熏熏了。 + +### 27日 初六 🌍 + +回到西安,和王飞晚上看了流浪地球2 很好看 + +### 28日 初七 + +来到城固,见到了图一一同学,约好了明天看电影 +晚上和图一一同学逛了一圈,很开心 +发现身份证丢了。 + +### 29日 初八 假期最后一天 ❤️ + +和图一一同学看了电影。 +和图一一同学吃了火锅。 +送图一一同学回家。 +离开城固,回到西安。 +确定了和图一一的关系。 + +### 30日 上班第一天 + +我在公司摸鱼,因为昨晚睡的很迟,我很困,因此中午睡了好久 +开始节食计划和锻炼计划,虽然只是步行,我想有一个好的起点 + +### 31日 今日仍然无事可做 + +在公司摸鱼,下午安装了Docker,但是好多东西忘了,准备翻看笔记,但是windows对我的Mac笔记支持不是很好,我很难过 +晚上回来,走了很远,依然在节食。 + + +## 2月 February + +### 本月计划概要 + +1. Docker +2. 水果 +3. 锻炼 +4. 作息 +5. 计划习惯 + +### 1日 这个月的开端 + +- [ ] 早起,7点醒来,刷牙洗脸 +- [x] 开始读书吧。《沁园春-雪》 +- [x] 将电脑带到公司,记录相关笔记,docker和dockerfile +- [ ] 晚上少吃点东西,忌油腻和肉类食物,希望包子店开门,擀面皮和紫菜汤 +- [x] 锻炼,可以尝试跑步 +- [x] 伍六七第四季第四集 +- [ ] 👻❤️💀🐸🎈💣🌥️ 生涯 + +### 2日 周四 + +- [ ] 早起 +- [ ] 读书 -《》 +- [ ] 晨练 +- [x] 晚练 -时间 7:35-8:55 +- [ ] 学习golang语言,京东读书,参与,两小时 + +### 3日 周五 第一个假期 + +- [ ] 早起 +- [ ] 读书 +- [ ] 晨炼 +- [ ] 晚练 +- [ ] 学习和笔记 + +### 4日 周六 重要的日子 + +- [ ] 早起 +- [ ] 读书 +- [ ] 晨练 +- [ ] 晚练 +- [ ] 洗衣服 +- [ ] 收拾房子 +- [ ] + +## 3月 March + +## 4月 April + +## 5月 May + +## 6月 June + +## 7月 July + +## 8月 August + +## 9月 September + +## 10月 October + +## 11月 November + +## 12月 December \ No newline at end of file diff --git a/xi-note-computer/Xi-S-XinQu/Readme.md b/xi-note-computer/Xi-S-XinQu/Readme.md new file mode 100644 index 0000000..2b20631 --- /dev/null +++ b/xi-note-computer/Xi-S-XinQu/Readme.md @@ -0,0 +1,5 @@ +> 心曲 + +我,想要设计出来一款完整的东西。 + +我想要给她完整的一生XD。 \ No newline at end of file diff --git a/xi-note-computer/Xi-S-XinQu/XQ01-需求导入.md b/xi-note-computer/Xi-S-XinQu/XQ01-需求导入.md new file mode 100644 index 0000000..ab07938 --- /dev/null +++ b/xi-note-computer/Xi-S-XinQu/XQ01-需求导入.md @@ -0,0 +1,46 @@ +# 记账 + +1. 自动读取微信和支付宝的账单记录,优化支出方向 +2. 设置预算,收入支出分类,工资来源, +3. 负债 + + + +# 文件存储 + +1. 文件唯一性验证 +2. 分片上传 +3. 断点续传 +4. blob下载 +5. 文件分享 +6. 文件批量移动 +7. 文档在线编辑 +8. 图片在线查看 +9. 视频在线播放 +10. 命令行快捷下载(用户别名+文件别名+版本) +11. 用户组共享文件夹 + + +# 心情日记 + +1. 天气自动获取(定位) +2. 心情符号 +3. 心情可视化表 +4. 坚持清单 +5. 终极目标(全站循环) +6. + + +# 笔记 + +1. 笔记封面内容 +2. 笔记夹 +3. MarkDown +4. 笔记分享 + + +# 仿微博和空间的东西 + +1. 发帖子 +2. 加好友 +3. 在线聊天 \ No newline at end of file diff --git a/xi-note-computer/Xi-S-XinQu/XQ02-前置功能模块.md b/xi-note-computer/Xi-S-XinQu/XQ02-前置功能模块.md new file mode 100644 index 0000000..e86d78c --- /dev/null +++ b/xi-note-computer/Xi-S-XinQu/XQ02-前置功能模块.md @@ -0,0 +1,36 @@ +# 用户系统 + +1. 用户信息收集 +2. 用户登录方式 +3. 用户密码 +4. token存储共享 +5. 用户组(角色) +6. 权限与共享 +7. 用户信息的联合存储系统 + +# 日志系统 + +1. 系统日志 +2. 用户日志 +3. 系统资源日志 + +# 微服务载入系统 + +1. 系统架构纵览 +2. 系统负载显示 +3. 服务组件状态 +4. 服务组件添加分配 +5. 各服务的权限列表何菜单列表 +6. 各服务前置服务 + +# 数据备份系统 + +1. 全逻辑删除 +2. 全自增ID + +# 基础文件系统 + +1. 提供基础的文件上传下载功能 +2. 为隽辞系统提供底层服务 + + diff --git a/xi-note-computer/Xi-S-XinQu/XQ03-需求模块分析.md b/xi-note-computer/Xi-S-XinQu/XQ03-需求模块分析.md new file mode 100644 index 0000000..798618d --- /dev/null +++ b/xi-note-computer/Xi-S-XinQu/XQ03-需求模块分析.md @@ -0,0 +1,146 @@ +# 1 用户模块 + +## 1.1 用户信息存储 + +### 1.1.1 存储方式 + +- 参考Docker的联合文件系统,为保存全段数据,所有数据采用联合文件系统思想。 +- 常用数据每次修改后存Redis,读取时更新。 + +### 1.1.2 存储字段 + +- 基础表user_info_base + - [x] uuid + +- 验证表user_info_verify + - [x] 电话 n1 + - [x] 用户名称(账号) + - [x] 邮箱 n1 + - [x] 身份证号码 + - [x] qq n1 + - [x] 微信 n1 + +- 额外表-基础user_info_extra + - [x] 真实姓名 + - [x] 昵称 + - [x] 出生日期 + - [x] 性别 + - [x] 地址 + - [x] 主页 + - [x] github主页 + - [x] 微博 + - [x] 抖音 + - [x] 支付宝 + - [x] 国家地区 + - [ ] 区县信息 n1 + - [x] 个人简介 + +- 密码表 user_info_passwd + - [x] 用户密码 + +- 描述性用户信息拓展表 user_info_extra_describe + - [x] 爱好 n + - [x] 属性 + - [x] 喜欢的运动 n + - [x] 喜欢的电影 n + - [ ] 喜欢的电视剧 n + - [x] 喜欢的 特别的人 n + - [x] 喜欢的动物 n + - [x] 喜欢的植物 n + - [x] 想去的地方 n + +- 用户信息-签名 user_info_extra_signone + - [x] 签名 + + +其他字段 + +- 关联前账号 + +## 1.2 用户角色 - 定位fixed position + +### 1.2.1 存在的角色类型 + +- 本系统自带的角色,如超级管理员,使用用户 +- 其他拓展角色,系统外部的角色,如加入特殊组织时的管理员,职责,岗位,等级等产生的角色关联,目前系统不考虑,但是会提供相应的数据接口以便拓展 +- 角色的叠加态,角色的默认权限问题,为用户单独链接权限的问题(直属权限) + +### 1.2.2 角色存储字段 + +> 20230312 角色可以嵌套,以此可以实现多种结构组织 + +- 角色定位表 +- [ ] 用户角色名称 +- [ ] 角色标志 +- [ ] 父角色id +- [ ] 角色描述 +- [ ] 角色创建人 +- [ ] 角色创建时间 + +- [ ] 用户uuid +- [ ] 角色何权限的关联问题 + +### 1.2.3 角色拓展查询问题 + +- 考虑到用户模块作为核心的权限模块,所有账户相关的权限信息都应该由权限模块统一分发,但非基础权限的存放由外部程序提供 +- 这个问题还需待议 + +#### Q + +## 1.3 权限 + +### 1.3.1 权限分类相关 + +- 用户系统自带超管相关权限基础 +- 权限分类有以下几个方面 + - 核心模块权限,如文件管理系统和记账 + - 各个系统下的子权限 +- 各个权限由各个系统提供,最后由微服务关联系统进行加载,传至用户系统统一管理 + +### 1.3.2 用户系统超级管理员职责 + +- 管理各个模块系统的微服务加载许可状态 +- 管理各个系统的分布 +- 管理其他子管理员 + +### 1.3.3 相关字段 + +- 所属服务系统 +- 父权限 +- 权限名称 +- 权限描述 +- 权限ID +- 权限标志 + + +# 2 基础文件系统 + +## 2.1 文件上传及下载 + +### 2.1.1 文件上传 + +- 文件分片上传 +- 文件大小限制 +- 文件校验(文件大小和第一片MD5) +- 断点续传 +- 文件版本控制 + +### 2.1.2 文件下载 + +- 分片下载 +- 命令行别名下载 +- 断点续传 + +## 2.2 文件字段 + +- 文件名 +- MD5 +- UUID +- 文件类型 +- 上传者 +- 上传事件 +- 文件大小 +- 别名 +- 标签 +- 文件夹 +- 父目录 \ No newline at end of file diff --git a/xi-note-computer/Xi-S-XinQu/XQ04-场景分析.md b/xi-note-computer/Xi-S-XinQu/XQ04-场景分析.md new file mode 100644 index 0000000..8b6b7a9 --- /dev/null +++ b/xi-note-computer/Xi-S-XinQu/XQ04-场景分析.md @@ -0,0 +1,21 @@ +# 超管 + +1. 设置修改系统名称 +2. 设置其他管理员 + +# 系统启动 + +1. 各个系统提交自己的身份识别信息,各种信息的冲突 +2. 各个系统提交权限信息 +3. 用户系统将权限信息加入Redis + +# 微服务载入程序(Port:62176) + +> 由超管账号管理 + +1. 获取各个服务端口,生成Nginx配置文件(地址,端口,根路径) +2. 收集接口信息 +3. 收集权限信息 +4. 收集角色信息 +5. 子系统状态监控(进程号,内存占用) +6. 测试各个子系统代理状态(固有onlineTest接口) \ No newline at end of file diff --git a/xi-note-computer/Xi-S-XinQu/XQ05-数据库建设.md b/xi-note-computer/Xi-S-XinQu/XQ05-数据库建设.md new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-S-XinQu/XQ06-接口建设和自动化测试.md b/xi-note-computer/Xi-S-XinQu/XQ06-接口建设和自动化测试.md new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-S-XinQu/XQ07-建设工程控制-流程和工期.md b/xi-note-computer/Xi-S-XinQu/XQ07-建设工程控制-流程和工期.md new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-S-XinQu/XQ08-预期和阶段成果.md b/xi-note-computer/Xi-S-XinQu/XQ08-预期和阶段成果.md new file mode 100644 index 0000000..e69de29 diff --git a/xi-note-computer/Xi-S-XinQu/XQ10-程序结构/XQ06-接口建设和自动化测试.xmind b/xi-note-computer/Xi-S-XinQu/XQ10-程序结构/XQ06-接口建设和自动化测试.xmind new file mode 100644 index 0000000..4b4c315 Binary files /dev/null and b/xi-note-computer/Xi-S-XinQu/XQ10-程序结构/XQ06-接口建设和自动化测试.xmind differ diff --git a/xi-note-computer/Xi-S-XinQu/XQ10-程序结构/微服务架构拓扑.canvas b/xi-note-computer/Xi-S-XinQu/XQ10-程序结构/微服务架构拓扑.canvas new file mode 100644 index 0000000..e91319a --- /dev/null +++ b/xi-note-computer/Xi-S-XinQu/XQ10-程序结构/微服务架构拓扑.canvas @@ -0,0 +1,18 @@ +{ + "nodes":[ + {"type":"text","text":"微服务载入程序:心曲-恐龙领地","id":"8a171f21fc6e6657","x":-260,"y":160,"width":540,"height":60,"color":"5"}, + {"type":"text","text":"日志记录系统:心志","id":"dd0ea44fb99ad1d0","x":-260,"y":60,"width":160,"height":60,"color":"4"}, + {"type":"text","text":"用户系统:星稀","id":"912e1a7ca9283c3e","x":-260,"y":-40,"width":540,"height":60,"color":"1"}, + {"type":"text","text":"账务系统:亚精","id":"f68fdec3a9322ced","x":-260,"y":-140,"width":260,"height":60,"color":"6"}, + {"type":"text","text":"文件系统:隽辞","id":"928eac2ce3c26991","x":20,"y":-140,"width":260,"height":60,"color":"6"}, + {"type":"text","text":"基础文件系统:元朔","id":"1a2091c7d218c90f","x":120,"y":60,"width":160,"height":60,"color":"4"}, + {"type":"text","text":"资源控制系统:莉莉丝","id":"e3da27eee3d283c8","x":-70,"y":60,"width":160,"height":60,"color":"4"}, + {"type":"text","text":"REDIS","id":"58b8b2e54c047e23","x":420,"y":-360,"width":50,"height":480} + ], + "edges":[ + {"id":"c55ccef34fff6e0a","fromNode":"8a171f21fc6e6657","fromSide":"left","toNode":"912e1a7ca9283c3e","toSide":"left","toEnd":"none","label":"系统设置"}, + {"id":"e523f0e1f89963a7","fromNode":"1a2091c7d218c90f","fromSide":"bottom","toNode":"8a171f21fc6e6657","toSide":"top","toEnd":"none"}, + {"id":"8598cd056cbf5ee2","fromNode":"e3da27eee3d283c8","fromSide":"bottom","toNode":"8a171f21fc6e6657","toSide":"top","toEnd":"none"}, + {"id":"d317adc6f045f802","fromNode":"dd0ea44fb99ad1d0","fromSide":"bottom","toNode":"8a171f21fc6e6657","toSide":"top","toEnd":"none"} + ] +} \ No newline at end of file diff --git a/xi-note-computer/Xi-S-XinQu/XQ10-程序结构/用户系统数据架构.canvas b/xi-note-computer/Xi-S-XinQu/XQ10-程序结构/用户系统数据架构.canvas new file mode 100644 index 0000000..2142a27 --- /dev/null +++ b/xi-note-computer/Xi-S-XinQu/XQ10-程序结构/用户系统数据架构.canvas @@ -0,0 +1,19 @@ +{ + "nodes":[ + {"type":"text","text":"用户验证信息","id":"c4259f53f309e6b9","x":120,"y":-180,"width":250,"height":60}, + {"type":"text","text":"用户拓展信息","id":"88999d515b6fbac4","x":120,"y":-100,"width":250,"height":60}, + {"type":"text","text":"用户密码","id":"ba69f7f37345fe3c","x":120,"y":-20,"width":250,"height":60}, + {"type":"text","text":"用户基础信息","id":"eeead3d71b4716c9","x":-200,"y":-100,"width":250,"height":60}, + {"id":"bced9660574f4b85","x":-200,"y":60,"width":250,"height":60,"type":"text","text":"用户角色关联"}, + {"type":"text","text":"角色信息","id":"2f864ee0f029962a","x":-200,"y":160,"width":250,"height":60}, + {"type":"text","text":"权限信息","id":"f606992261056a7a","x":-200,"y":260,"width":250,"height":60} + ], + "edges":[ + {"id":"9ae512fcaaf2b17f","fromNode":"eeead3d71b4716c9","fromSide":"right","toNode":"c4259f53f309e6b9","toSide":"left"}, + {"id":"033ef3ae6ac50619","fromNode":"eeead3d71b4716c9","fromSide":"right","toNode":"88999d515b6fbac4","toSide":"left"}, + {"id":"17d9adbad850c487","fromNode":"eeead3d71b4716c9","fromSide":"right","toNode":"ba69f7f37345fe3c","toSide":"left"}, + {"id":"b2af8a12f69f6b1c","fromNode":"eeead3d71b4716c9","fromSide":"bottom","toNode":"bced9660574f4b85","toSide":"top"}, + {"id":"0211c0d0c15e35b1","fromNode":"bced9660574f4b85","fromSide":"bottom","toNode":"2f864ee0f029962a","toSide":"top"}, + {"id":"64f8a9513f393f5a","fromNode":"2f864ee0f029962a","fromSide":"bottom","toNode":"f606992261056a7a","toSide":"top"} + ] +} \ No newline at end of file diff --git a/xi-note-computer/Xi-S-XinQu/数据库/sql.sql b/xi-note-computer/Xi-S-XinQu/数据库/sql.sql new file mode 100644 index 0000000..1656ce5 --- /dev/null +++ b/xi-note-computer/Xi-S-XinQu/数据库/sql.sql @@ -0,0 +1,120 @@ +CREATE TABLE `user_authority` ( + `id` int NOT NULL, + `server` varchar(255) NOT NULL COMMENT '服务名', + `index` varchar(255) NOT NULL COMMENT '权限标识', + `name` varchar(255) NOT NULL COMMENT '权限名称', + `type` varchar(255) NOT NULL COMMENT '权限类型(菜单、按钮、接口)', + `father_id` int NULL COMMENT '父权限', + `describe` varchar(255) NULL COMMENT '权限描述', + `creator` varchar(255) NOT NULL COMMENT '创建人', + `ico` varchar(255) NULL COMMENT '图标链接', + `is_delete` int NOT NULL DEFAULT 0 COMMENT '是否删除', + `createtime` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) +); + +CREATE TABLE `user_authority_relation` ( + `id` int NOT NULL, + `position_id` int NOT NULL COMMENT '角色定位id', + `authority_id` int NOT NULL COMMENT '权限id', + `creator` varchar(255) NOT NULL COMMENT '创建人', + `createtime` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) +); + +CREATE TABLE `user_info_base` ( + `id` int NOT NULL AUTO_INCREMENT COMMENT '自增ID,用于区分,以及备份索引', + `uuid` varchar(32) NOT NULL COMMENT '每个用户的唯一用户标识', + `state` int NOT NULL DEFAULT 0 COMMENT '用户账号的状态\n0是未激活\n1是正常\n2是禁用\n3是注销', + `createtime` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + `about_id` int NULL COMMENT '关联账号(注销关联)', + PRIMARY KEY (`id`) +) COMMENT = '用户基础信息表,存储用户的唯一索引'; + +CREATE TABLE `user_info_extra` ( + `id` int NOT NULL AUTO_INCREMENT, + `uuid` varchar(32) NOT NULL COMMENT '用户唯一标识', + `realname` varchar(255) NULL COMMENT '真实姓名', + `nickname` varchar(255) NULL COMMENT '昵称', + `birthday` bigint NULL COMMENT '生日', + `sex` int NULL COMMENT '性别', + `address` varchar(255) NULL COMMENT '地址', + `country` varchar(255) NULL COMMENT '国家', + `profile` varchar(255) NULL COMMENT '个人简介', + `alibaba_id` varchar(255) NULL COMMENT '阿里账号', + `tiktok_id` varchar(255) NULL COMMENT '抖音账号', + `weibo_id` int NULL COMMENT '微博帐号', + `github_url` varchar(255) NULL COMMENT 'github地址', + `personal_url` varchar(255) NULL COMMENT '个人网站地址', + `createtime` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) +) COMMENT = '用户一般拓展信息表'; + +CREATE TABLE `user_info_extra_describe` ( + `id` int NOT NULL AUTO_INCREMENT, + `uuid` varchar(32) NOT NULL, + `like` varchar(255) NULL COMMENT '爱好', + `other` varchar(255) NULL COMMENT '其他属性', + `motion` varchar(255) NULL COMMENT '运动', + `film` varchar(255) NULL COMMENT '电影', + `person` varchar(255) NULL COMMENT '特别的人', + `animal` varchar(255) NULL COMMENT '动物', + `plant` varchar(255) NULL COMMENT '植物', + `place` varchar(255) NULL COMMENT '想去的地方', + `createtime` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) +) COMMENT = '用户描述性信息表'; + +CREATE TABLE `user_info_extra_signone` ( + `id` int NOT NULL AUTO_INCREMENT, + `uuid` varchar(32) NOT NULL, + `describe` varchar(255) NOT NULL, + `createtime` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) +) COMMENT = '用户签名列表'; + +CREATE TABLE `user_info_passwd` ( + `id` int NOT NULL AUTO_INCREMENT, + `uuid` varchar(32) NOT NULL COMMENT '关联用户唯一标识', + `passwd` varchar(255) NOT NULL COMMENT '密码', + `createtime` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) +) COMMENT = '密码表'; + +CREATE TABLE `user_info_verify` ( + `id` int NOT NULL AUTO_INCREMENT, + `uuid` varchar(32) NOT NULL COMMENT 'uuid关联基础用户信息', + `username` varchar(32) NULL COMMENT '用户名称', + `phone` varchar(11) NULL COMMENT '手机号', + `wechatid` varchar(32) NULL COMMENT '微信id', + `email` varchar(255) NULL COMMENT '邮箱', + `residentid` varchar(32) NULL COMMENT '身份证', + `qq` bigint NULL COMMENT 'qq号', + `is_multiplex` int NOT NULL DEFAULT 0 COMMENT '是否复用', + `createtime` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) +); + +CREATE TABLE `user_position` ( + `id` int NOT NULL, + `type` varchar(255) NOT NULL COMMENT '角色定位类型', + `fatherid` int NULL COMMENT '父id', + `name` varchar(255) NOT NULL COMMENT '角色名称', + `index` varchar(255) NOT NULL COMMENT '角色定位标识', + `describe` varchar(255) NULL COMMENT '角色定位描述', + `creator` varchar(32) NULL COMMENT '创建人uuid', + `ico` varchar(255) NULL COMMENT 'logo路径', + `is_delete` int NOT NULL DEFAULT 0 COMMENT '是否删除', + `createtime` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) +) COMMENT = '用户角色定位表'; + +CREATE TABLE `user_position_relation` ( + `id` int NOT NULL, + `uuid` varchar(32) NOT NULL COMMENT '用户标识', + `position_id` int NOT NULL COMMENT '角色定位id', + `is_delete` int NOT NULL DEFAULT 0 COMMENT '是否删除', + `createtime` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) +); + diff --git a/xi-note-computer/readme.md b/xi-note-computer/readme.md new file mode 100644 index 0000000..35cc2f4 --- /dev/null +++ b/xi-note-computer/readme.md @@ -0,0 +1,3 @@ +- 此库作为学习专业知识,计算机领域的内容。 + +- 2023-01-14 \ No newline at end of file