├── README.md └── LICENSE /README.md: -------------------------------------------------------------------------------- 1 | # 精彩的Node.js 2 | 3 | 受到[精彩的php](https://github.com/ziadoz/awesome-php) 和 [精彩的python](https://github.com/vinta/awesome-python) 的启发,整理了精彩的Node.js的框架,库以及资源的列表。 4 | 5 | 欢迎提交各种相关资源!让我们一起来打造最精彩的Node资源列表! 6 | 7 | 目录: 8 | 9 | - [精彩的Node.js](#精彩的Nodejs) 10 | - [环境管理](#环境管理) 11 | - [桌面应用](#桌面应用) 12 | - [集成开发环境](#集成开发环境) 13 | - [文档](#文档) 14 | - [包管理](#包管理) 15 | - [生成工具](#生成工具) 16 | - [通讯](#通讯) 17 | - [调试工具](#调试工具) 18 | - [日志](#日志) 19 | - [数据库驱动](#数据库驱动) 20 | - [ORM](#orm) 21 | - [Web框架](#web框架) 22 | - [RESTful API](#restful-api) 23 | - [应用服务](#应用服务) 24 | - [CMS](#cms) 25 | - [表单](#表单) 26 | - [文件和MIME类型操作](#文件和mime类型操作) 27 | - [验证和OAuth](#验证和oauth) 28 | - [模版引擎](#模版引擎) 29 | - [生成CLI的工具](#生成cli的工具) 30 | - [异步流程控制](#异步流程控制) 31 | - [Rate Limiting](#rate-limiting) 32 | - [测试](#测试) 33 | - [杂项](#杂项) 34 | - [其它精彩列表](#其它精彩列表) 35 | 36 | ## 环境管理 37 | 38 | *Node虚拟机* 39 | 40 | * [nodeenv](https://github.com/ekalinin/nodeenv) - Node.js的虚拟环境,提供独立的Node.js运行环境(Python) 41 | * [nave](https://github.com/isaacs/nave) - Node的虚拟环境(sh脚本) 42 | 43 | *Node版本管理* 44 | 45 | * [n](https://github.com/visionmedia/n) - Node版本管理,可以安装不同版本的node,可以多个版本的node并存 46 | * [nvm](https://github.com/creationix/nvm) - Node版本管理器(不用装node即可使用). 47 | 48 | *[n vs nvm](http://www.mattpalmerlee.com/2013/03/23/installing-and-switching-between-multiple-versions-of-node-js-n-vs-nvm/)个人喜欢:n 49 | 50 | ## 桌面应用 51 | 52 | * [Atom Shell](https://github.com/atom/atom-shell) - 53 | 可以使用nodejs编写桌面应用,并且跨平台,支持mac,linux,windows,与[node-webkit](https://github.com/rogerwang/node-webkit)的区别在于,前者启动时是启动js文件,后者启动html文件,前者可控性更高。 54 | 55 | node-webkit案例:[LightTable](https://github.com/LightTable/LightTable) 56 | atom-shell案例:[Atom](https://github.com/atom/atom) 57 | 58 | 59 | ## 集成开发环境 60 | 61 | *开发用的IDE和编辑器* 62 | 63 | * [Webstorm](http://www.jetbrains.com/webstorm/features/#node.js) - 最好的Nodejs编辑器,有的话就不用看下面这些了。 64 | * [Visual Studio](http://www.visualstudio.com/) - 需要安装插件 [Node.js Tools for Visual Studio](https://nodejstools.codeplex.com/) (支持编辑,智能感知,分析,npm,TypeScript,本地调试以及Windows/MacOS/Linux上的远程调试)。 65 | * [Enide](http://www.nodeclipse.org/enide/) - 带Nodeclipse插件的Node Eclipse IDE。 66 | * [InteliJIDEA](http://www.jetbrains.com/idea/features/nodejs.html) - InteliJ的Node.js插件,和Webstorm同一家公司出品。 67 | * [Atom](https://github.com/atom/atom) - Github出品的可自定义编辑器(用Atom Shell开发的)。 68 | * [Brackets](https://github.com/adobe/brackets) - 使用JavaScript,HTML,CSS编写的开源web代码编辑器。 69 | * [Cloud9](https://c9.io) - 带协作工具的web编辑器。 70 | * [Notepad++](http://notepad-plus-plus.org) - Notepad++就不用解释了,能用这个写代码的都明白这是什么。 71 | * [CmdEr](https://github.com/bliker/cmder) - 不是IDE,但是Windows上的控制台模拟器(用这个不如安装Github的git shell)。 72 | * [Cloud Commander](http://cloudcmd.io) - Web文件管理。有编辑器和控制台。可以让你开发Web应用,站点等。 73 | 74 | ## 文档 75 | 76 | *项目文档生成库* 77 | 78 | * [Docco](http://jashkenas.github.io/docco/) - Docco是一个快速但是丑陋的文档生成器, 由Literate CoffeeScript编写。 79 | * [Groc](https://github.com/nevir/groc) - 以文学编程为宗旨的文档生成器。 80 | * [dox](https://github.com/visionmedia/dox) - JavaScript文档生成器,使用markdown和jsdoc生成node文档。 81 | 82 | ## 包管理 83 | 84 | *包和依赖管理库* 85 | 86 | * [Npm](https://www.npmjs.org/) - 默认包管理工具。安装,发布,管理node程序。(必用!识node不识npm犹如识.net不识nuget) 87 | * [Npmsafe](https://github.com/ueqt/npmsafe) - 因为npm安装存在钓鱼的风险,所以用这个库更安全。(必用!) 88 | 89 | ## 生成工具 90 | 91 | *生成和任务执行工具* 92 | 93 | * [Gulp.js](http://gulpjs.com/) - 流生成系统,基于流和代码胜于配置。 94 | * [Grunt.js](http://gruntjs.com/) - 任务执行器,可简化单元测试,编译等任务。 95 | 96 | *后端Grunt前端Bower,近乎标配,但是google的web starter kit更推荐gulp,因为gulp基于js,grunt基于json,孰优孰劣,可见一斑* 97 | 98 | * [Nodemon](http://nodemon.io/) - 监控代码变化,自动重启服务器的开发工具。 99 | * [Browserify](http://browserify.org/) - Browserify让你可以在浏览器中使用require('modules')来打包你的依赖。 100 | 101 | ## 通讯 102 | 103 | * [Socket.IO](http://socket.io/) - Node和Javascript的Websocket框架。 104 | * [SockJS](https://github.com/sockjs) - Websocket模拟器. 105 | * [Primus](https://github.com/primus/primus) - 阻止模块锁住的实时框架抽象层。 106 | * [BinaryJS](http://binaryjs.com/) - BinaryJS是处理实时二进制数据的二进制webscoket。 107 | 108 | ## 调试工具 109 | 110 | *调试Node应用的工具* 111 | 112 | * [node-inspector](https://github.com/node-inspector/node-inspector) - 基于Blink开发工具的Node.js调试器。 113 | * [longjohn](https://github.com/mattinsler/longjohn) - Node的长堆栈跟踪器。 114 | * [TypesJs](https://github.com/ChrisAntaki/typesjs) - Node和浏览器的简易类型检查。 115 | * [Nodev](https://github.com/akamensky/nodev) - 基于nodemon和node-inspector的更方便的调试工具。 116 | * [cf-node-debug](https://www.npmjs.org/package/cf-node-debug) - 用来帮助调试运行在Paas上的node的代理。 117 | 118 | ## 日志 119 | 120 | *生成和管理日志的工具* 121 | 122 | * [winston](https://github.com/flatiron/winston) 好用的日志生成库。 123 | * [caterpillar](https://github.com/bevry/caterpillar) - 可以记录日志和输出到不同目标的日志系统。 124 | * [tracer](https://github.com/baryon/tracer) - Node.js的强力和可自定义日志库。 125 | * [Log.io](http://logio.org/) - 浏览器上的实时日志工具。 126 | * [Bunyan](https://github.com/trentm/node-bunyan) - Node.js服务的简单高效JSON日志模块。 127 | 128 | ## 数据库驱动 129 | 130 | *连接和操作数据库的库* 131 | 132 | * [Node-mysql](https://github.com/felixge/node-mysql/) - 连接mysql的不二选择。 133 | * [mongojs](https://github.com/mafintosh/mongojs) - 连接mongodb的不二选择,mongoose过于复杂,完全没必要。这个库是基于[Node-mongodb-native](https://github.com/mongodb/node-mongodb-native/)的封装。 134 | * [Node-redis](https://github.com/mranney/node_redis) - Redis驱动,原生解析器用[hideredis](https://github.com/redis/hiredis-node),基于Promise的API用 [then-redis](https://github.com/mjackson/then-redis)。 135 | 136 | ## ORM 137 | 138 | *实现ORM或datamapping技术的库* 139 | 140 | * [Sequelize](http://sequelizejs.com/) - 方便地访问MySQL, MariaDB, SQLite 以及PostgreSQL数据库。 141 | * [Node-orm2](https://github.com/dresende/node-orm2) - 另一个ORM。 142 | * [Mongoose](http://mongoosejs.com/) - mongodb的ORM。 143 | * [Waterline](https://github.com/balderdashy/waterline) - 简化多个数据库的交互。 144 | 145 | ## Web框架 146 | 147 | *Web开发框架* 148 | 149 | * [Express](http://expressjs.com/) - 小而全的Nodejs web开发框架。主流!但原作者跑去写Go了。 150 | * [Flatiron](http://flatironjs.org/) - 编写现代化web应用的可适配框架。 151 | * [Koa](http://koajs.com/) - 旨在打造更小,更便捷,更高扩展的web应用框架。Express原班人马打造,下一代框架。 152 | * [Totaljs](http://www.totaljs.com/) - 高响应的node web应用框架。 153 | * [Meteor](https://www.meteor.com/) - 实时web应用框架。获得1120万美元风投。未来的框架。 154 | * [Derby](https://github.com/derbyjs/derby) - 方便编写实时应用的MVC框架。 155 | * [Derby-awesome](https://github.com/onerussell/awesome-derby) - 好用的Derby组件。 156 | * [HuntJS](https://huntjs.herokuapp.com/) - 事件驱动框架。 157 | * [Pomelo](https://github.com/NetEase/pomelo) - 网易出品的Nodejs游戏开发框架。 158 | 159 | ## RESTful API 160 | 161 | *开发RESTful API的库* 162 | 163 | * [Hapi](https://github.com/spumko/hapi) - Restful API的快速框架。 164 | * [hapi-swagger](https://github.com/glennjones/hapi-swagger)生成api文档。 165 | * [Sails](http://sailsjs.org) - 生成RESTful JSON API的MVC框架。 166 | * [Node-restify](http://mcavage.me/node-restify/) - 生成REST web服务的node模块。 167 | * [Heimdall](https://github.com/binarymax/heimdall) - Express的REST API插件。 168 | 169 | ## 应用服务 170 | 171 | *运行和管理多个应用* 172 | 173 | * [PM2](https://github.com/Unitech/pm2) - 必用!生产环境中的不二法宝。管理多个node进程,崩溃自动重启,日志查看等功能。 174 | * [Impress](https://github.com/tshemsedinov/impress) - 高负载,可扩展的应用服务。 175 | 176 | ## CMS 177 | 178 | * [Calipso](http://calip.so/) - 简易CMS,类似Drupal和Wordpress的皮肤。 179 | * [KeystoneJS](http://keystonejs.com/) - Node.js CMS,由Express和MongoDB构建的Web应用平台。 180 | 181 | ## 表单 182 | 183 | *处理表单和表单数据的库* 184 | 185 | * [node-validator](https://github.com/chriso/validator.js) - 简易字符串表单验证库。 186 | * [express-validator](https://github.com/ctavan/express-validator) - Express表单验证中间件。 187 | 188 | ## 文件和MIME类型操作 189 | 190 | * [PDFKit](http://pdfkit.org/) - Node和浏览器的JavaScript PDF生成库。 191 | 192 | ## 验证和OAuth 193 | 194 | *实现验证的库* 195 | 196 | * [PassportJS](http://passportjs.org/) - 简易验证中间件库。 197 | * [ldapjs](http://ldapjs.org/) - 纯JavaScript框架,用来实现LDAP客户端和服务端。 198 | * [oauth-signature-js](https://github.com/bettiolo/oauth-signature-js) - OAuth 1.0a签名生成器。 199 | * [Lockit](https://github.com/zemirco/lockit) - Express的全功能验证方案。 200 | 201 | ## 模版引擎 202 | 203 | *模版和词法工具* 204 | 205 | * [ECT](http://ectjs.com/) - "内嵌CoffeScript语法的快速JavaScript模版引擎。" 206 | * [Jade](http://jade-lang.com/) - node模版引擎。 207 | * [Swig](http://paularmstrong.github.io/swig/) - 简单,强大,易扩展的JavaScript模版引擎。 208 | 209 | ## 生成CLI的工具 210 | 211 | *命令行接口生成工具* 212 | 213 | * [Inquirer](https://github.com/SBoudrias/Inquirer.js) - 常用交互命令行用户接口集合。*提问,解析,验证回答,管理提示符以及提供错误反馈。* 214 | * [commander.js](https://github.com/visionmedia/commander.js) - 受Ruby的commander启发的,node.js命令行接口的完整解决方案。 215 | * [cli](https://github.com/chriso/cli) - 可用node快速生成命令行应用。 216 | * [cli-table](https://github.com/LearnBoost/cli-table) - CLI的美化unicode表格。 217 | * [blessed](https://github.com/chjj/blessed) - 一个类似魔咒的node.js类库。 218 | * [chalk](https://github.com/sindresorhus/chalk) - 终端字符串样式。 219 | * [minimist](https://github.com/substack/minimist) - 命令行参数解析简易模块。 220 | * [read](https://github.com/isaacs/read) - 读取用户stdin输入。 221 | * [colors.js](https://github.com/Marak/colors.js) - node.js控制台颜色。 222 | * [configstore](https://github.com/yeoman/configstore) - 简易读取,存储配置。 223 | * [blessed](https://github.com/chjj/blessed) - 一个类似魔咒的node.js类库。 224 | * [log-symbols](https://github.com/sindresorhus/log-symbols) - 不同日志层级不同颜色表示。https://github.com/sindresorhus/log-symbols 225 | * [terminal-menu](https://github.com/substack/terminal-menu) - ansi终端菜单。 226 | * [cli-spinner](https://github.com/helloIAmPau/node-spinner) - 简易的node cli插件。 227 | * [text-table](https://github.com/substack/text-table) - 生成无边框的文本表格字符串用来输出。 228 | 229 | ## 异步流程控制 230 | 231 | *管理异步控制,避免回调地狱* 232 | 233 | * 基于回调: 234 | * [Async](https://github.com/caolan/async) - 直接的,功能强大的异步jas模块。好用! 235 | * [node-seq](https://github.com/substack/node-seq) - nodejs链式异步流程,并行,以及pipeline式的错误处理。 236 | * 基于Promise ([Promises/A+](http://promises-aplus.github.io/promises-spec/)): 237 | * [Q](https://github.com/kriskowal/q) - 拥有大量API,包含各种场景的功能完整的promise库。 238 | * [RSVP.js](https://github.com/tildeio/rsvp.js) - 轻量级,但是可以使用的promise库。 239 | * [when.js](https://github.com/cujojs/when) - 常用的promise库。 240 | * [Bluebird](https://github.com/petkaantonov/bluebird) - Bluebird是关注于创新功能和性能的全功能promise库。 241 | * 基于Fibers ([node-fibers](https://github.com/laverdet/node-fibers/)): 242 | * [asyncawait](https://github.com/yortus/asyncawait) - 参考C#的async/await功能,实现相同的模式。 243 | * 基于生成器: 244 | * [Co](https://github.com/visionmedia/co) - 基于生成器的流程控制。 245 | 246 | ## Rate Limiting 247 | 248 | *Libraries that help restrict the frequency of certain actions.* 249 | 250 | * [Bottleneck](https://github.com/SGrondin/bottleneck) - A powerful rate limiter that makes throttling easy. 251 | 252 | ## 测试 253 | 254 | *测试框架* 255 | 256 | * [mocha](https://github.com/visionmedia/mocha) - Mocha是一个运行在node.js上的功能齐全的JavaScript测试框架,使异步测试方便而有趣。 257 | * [tape](https://github.com/substack/tape) - 为node和浏览器定制的测试。 258 | * [should.js](https://github.com/visionmedia/should.js) - nodejs的BDD风格断言。 259 | * [chai](https://github.com/chaijs/chai) - BDD / TDD 断言框架,可与任何其它框架配套使用。 260 | * [sinon](http://sinonjs.org/) - 独立的Javascript测试间谍, stub以及mock。 261 | * [Jasmine](http://jasmine.github.io/) - 简易的Node和Javascript的行为测试。 262 | * [Expresso](http://visionmedia.github.io/expresso/) - Node的TDD框架。 263 | * [NodeUnit](https://github.com/caolan/nodeunit) - 简单语法的单元测试工具。 264 | * [Concrete](http://ryankee.github.io/concrete/) - CI服务。 265 | * [ready.js](http://dsimard.github.io/ready.js/) - javascript CI工具。 266 | * [Jezebel](https://github.com/benrady/jezebel) - Jasmine测试的REPL以及持续集成测试工具。 267 | 268 | ## 杂项 269 | 270 | * [Github Linker](https://chrome.google.com/webstore/detail/github-linker/jlmafbaeoofdegohdhinkhilhclaklkp) - Chrome扩展,提供github上package.json的依赖库的超链接。 271 | 272 | 273 | # 其它精彩列表 274 | 275 | 可以在[awesome-awesome](https://github.com/emijrp/awesome-awesome) 以及 [awesome-awesomeness](https://github.com/bayandin/awesome-awesomeness) 中找到其它精彩列表。 276 | 277 | # 贡献 278 | 279 | 欢迎您提出宝贵意见和建议! 280 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. --------------------------------------------------------------------------------