├── .editorconfig ├── .gitignore ├── .prettierrc.json ├── LICENSE ├── README.md ├── env.d.ts ├── index.html ├── package-lock.json ├── package.json ├── resume.pdf ├── src ├── css │ ├── base.less │ ├── icons.less │ ├── index.less │ ├── print-page.css │ ├── print.less │ ├── reset.css │ └── style.less ├── index.html └── main.ts ├── tsconfig.json └── vite.config.ts /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.{js,jsx,ts,tsx,vue}] 12 | max_line_length = 100 13 | 14 | [*.{json,yml}] 15 | indent_style = space 16 | indent_size = 2 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "bracketSameLine": true 4 | } 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Attribution-ShareAlike 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More_considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution-ShareAlike 4.0 International Public 58 | License 59 | 60 | By exercising the Licensed Rights (defined below), You accept and agree 61 | to be bound by the terms and conditions of this Creative Commons 62 | Attribution-ShareAlike 4.0 International Public License ("Public 63 | License"). To the extent this Public License may be interpreted as a 64 | contract, You are granted the Licensed Rights in consideration of Your 65 | acceptance of these terms and conditions, and the Licensor grants You 66 | such rights in consideration of benefits the Licensor receives from 67 | making the Licensed Material available under these terms and 68 | conditions. 69 | 70 | 71 | Section 1 -- Definitions. 72 | 73 | a. Adapted Material means material subject to Copyright and Similar 74 | Rights that is derived from or based upon the Licensed Material 75 | and in which the Licensed Material is translated, altered, 76 | arranged, transformed, or otherwise modified in a manner requiring 77 | permission under the Copyright and Similar Rights held by the 78 | Licensor. For purposes of this Public License, where the Licensed 79 | Material is a musical work, performance, or sound recording, 80 | Adapted Material is always produced where the Licensed Material is 81 | synched in timed relation with a moving image. 82 | 83 | b. Adapter's License means the license You apply to Your Copyright 84 | and Similar Rights in Your contributions to Adapted Material in 85 | accordance with the terms and conditions of this Public License. 86 | 87 | c. BY-SA Compatible License means a license listed at 88 | creativecommons.org/compatiblelicenses, approved by Creative 89 | Commons as essentially the equivalent of this Public License. 90 | 91 | d. Copyright and Similar Rights means copyright and/or similar rights 92 | closely related to copyright including, without limitation, 93 | performance, broadcast, sound recording, and Sui Generis Database 94 | Rights, without regard to how the rights are labeled or 95 | categorized. For purposes of this Public License, the rights 96 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 97 | Rights. 98 | 99 | e. Effective Technological Measures means those measures that, in the 100 | absence of proper authority, may not be circumvented under laws 101 | fulfilling obligations under Article 11 of the WIPO Copyright 102 | Treaty adopted on December 20, 1996, and/or similar international 103 | agreements. 104 | 105 | f. Exceptions and Limitations means fair use, fair dealing, and/or 106 | any other exception or limitation to Copyright and Similar Rights 107 | that applies to Your use of the Licensed Material. 108 | 109 | g. License Elements means the license attributes listed in the name 110 | of a Creative Commons Public License. The License Elements of this 111 | Public License are Attribution and ShareAlike. 112 | 113 | h. Licensed Material means the artistic or literary work, database, 114 | or other material to which the Licensor applied this Public 115 | License. 116 | 117 | i. Licensed Rights means the rights granted to You subject to the 118 | terms and conditions of this Public License, which are limited to 119 | all Copyright and Similar Rights that apply to Your use of the 120 | Licensed Material and that the Licensor has authority to license. 121 | 122 | j. Licensor means the individual(s) or entity(ies) granting rights 123 | under this Public License. 124 | 125 | k. Share means to provide material to the public by any means or 126 | process that requires permission under the Licensed Rights, such 127 | as reproduction, public display, public performance, distribution, 128 | dissemination, communication, or importation, and to make material 129 | available to the public including in ways that members of the 130 | public may access the material from a place and at a time 131 | individually chosen by them. 132 | 133 | l. Sui Generis Database Rights means rights other than copyright 134 | resulting from Directive 96/9/EC of the European Parliament and of 135 | the Council of 11 March 1996 on the legal protection of databases, 136 | as amended and/or succeeded, as well as other essentially 137 | equivalent rights anywhere in the world. 138 | 139 | m. You means the individual or entity exercising the Licensed Rights 140 | under this Public License. Your has a corresponding meaning. 141 | 142 | 143 | Section 2 -- Scope. 144 | 145 | a. License grant. 146 | 147 | 1. Subject to the terms and conditions of this Public License, 148 | the Licensor hereby grants You a worldwide, royalty-free, 149 | non-sublicensable, non-exclusive, irrevocable license to 150 | exercise the Licensed Rights in the Licensed Material to: 151 | 152 | a. reproduce and Share the Licensed Material, in whole or 153 | in part; and 154 | 155 | b. produce, reproduce, and Share Adapted Material. 156 | 157 | 2. Exceptions and Limitations. For the avoidance of doubt, where 158 | Exceptions and Limitations apply to Your use, this Public 159 | License does not apply, and You do not need to comply with 160 | its terms and conditions. 161 | 162 | 3. Term. The term of this Public License is specified in Section 163 | 6(a). 164 | 165 | 4. Media and formats; technical modifications allowed. The 166 | Licensor authorizes You to exercise the Licensed Rights in 167 | all media and formats whether now known or hereafter created, 168 | and to make technical modifications necessary to do so. The 169 | Licensor waives and/or agrees not to assert any right or 170 | authority to forbid You from making technical modifications 171 | necessary to exercise the Licensed Rights, including 172 | technical modifications necessary to circumvent Effective 173 | Technological Measures. For purposes of this Public License, 174 | simply making modifications authorized by this Section 2(a) 175 | (4) never produces Adapted Material. 176 | 177 | 5. Downstream recipients. 178 | 179 | a. Offer from the Licensor -- Licensed Material. Every 180 | recipient of the Licensed Material automatically 181 | receives an offer from the Licensor to exercise the 182 | Licensed Rights under the terms and conditions of this 183 | Public License. 184 | 185 | b. Additional offer from the Licensor -- Adapted Material. 186 | Every recipient of Adapted Material from You 187 | automatically receives an offer from the Licensor to 188 | exercise the Licensed Rights in the Adapted Material 189 | under the conditions of the Adapter's License You apply. 190 | 191 | c. No downstream restrictions. You may not offer or impose 192 | any additional or different terms or conditions on, or 193 | apply any Effective Technological Measures to, the 194 | Licensed Material if doing so restricts exercise of the 195 | Licensed Rights by any recipient of the Licensed 196 | Material. 197 | 198 | 6. No endorsement. Nothing in this Public License constitutes or 199 | may be construed as permission to assert or imply that You 200 | are, or that Your use of the Licensed Material is, connected 201 | with, or sponsored, endorsed, or granted official status by, 202 | the Licensor or others designated to receive attribution as 203 | provided in Section 3(a)(1)(A)(i). 204 | 205 | b. Other rights. 206 | 207 | 1. Moral rights, such as the right of integrity, are not 208 | licensed under this Public License, nor are publicity, 209 | privacy, and/or other similar personality rights; however, to 210 | the extent possible, the Licensor waives and/or agrees not to 211 | assert any such rights held by the Licensor to the limited 212 | extent necessary to allow You to exercise the Licensed 213 | Rights, but not otherwise. 214 | 215 | 2. Patent and trademark rights are not licensed under this 216 | Public License. 217 | 218 | 3. To the extent possible, the Licensor waives any right to 219 | collect royalties from You for the exercise of the Licensed 220 | Rights, whether directly or through a collecting society 221 | under any voluntary or waivable statutory or compulsory 222 | licensing scheme. In all other cases the Licensor expressly 223 | reserves any right to collect such royalties. 224 | 225 | 226 | Section 3 -- License Conditions. 227 | 228 | Your exercise of the Licensed Rights is expressly made subject to the 229 | following conditions. 230 | 231 | a. Attribution. 232 | 233 | 1. If You Share the Licensed Material (including in modified 234 | form), You must: 235 | 236 | a. retain the following if it is supplied by the Licensor 237 | with the Licensed Material: 238 | 239 | i. identification of the creator(s) of the Licensed 240 | Material and any others designated to receive 241 | attribution, in any reasonable manner requested by 242 | the Licensor (including by pseudonym if 243 | designated); 244 | 245 | ii. a copyright notice; 246 | 247 | iii. a notice that refers to this Public License; 248 | 249 | iv. a notice that refers to the disclaimer of 250 | warranties; 251 | 252 | v. a URI or hyperlink to the Licensed Material to the 253 | extent reasonably practicable; 254 | 255 | b. indicate if You modified the Licensed Material and 256 | retain an indication of any previous modifications; and 257 | 258 | c. indicate the Licensed Material is licensed under this 259 | Public License, and include the text of, or the URI or 260 | hyperlink to, this Public License. 261 | 262 | 2. You may satisfy the conditions in Section 3(a)(1) in any 263 | reasonable manner based on the medium, means, and context in 264 | which You Share the Licensed Material. For example, it may be 265 | reasonable to satisfy the conditions by providing a URI or 266 | hyperlink to a resource that includes the required 267 | information. 268 | 269 | 3. If requested by the Licensor, You must remove any of the 270 | information required by Section 3(a)(1)(A) to the extent 271 | reasonably practicable. 272 | 273 | b. ShareAlike. 274 | 275 | In addition to the conditions in Section 3(a), if You Share 276 | Adapted Material You produce, the following conditions also apply. 277 | 278 | 1. The Adapter's License You apply must be a Creative Commons 279 | license with the same License Elements, this version or 280 | later, or a BY-SA Compatible License. 281 | 282 | 2. You must include the text of, or the URI or hyperlink to, the 283 | Adapter's License You apply. You may satisfy this condition 284 | in any reasonable manner based on the medium, means, and 285 | context in which You Share Adapted Material. 286 | 287 | 3. You may not offer or impose any additional or different terms 288 | or conditions on, or apply any Effective Technological 289 | Measures to, Adapted Material that restrict exercise of the 290 | rights granted under the Adapter's License You apply. 291 | 292 | 293 | Section 4 -- Sui Generis Database Rights. 294 | 295 | Where the Licensed Rights include Sui Generis Database Rights that 296 | apply to Your use of the Licensed Material: 297 | 298 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 299 | to extract, reuse, reproduce, and Share all or a substantial 300 | portion of the contents of the database; 301 | 302 | b. if You include all or a substantial portion of the database 303 | contents in a database in which You have Sui Generis Database 304 | Rights, then the database in which You have Sui Generis Database 305 | Rights (but not its individual contents) is Adapted Material, 306 | 307 | including for purposes of Section 3(b); and 308 | c. You must comply with the conditions in Section 3(a) if You Share 309 | all or a substantial portion of the contents of the database. 310 | 311 | For the avoidance of doubt, this Section 4 supplements and does not 312 | replace Your obligations under this Public License where the Licensed 313 | Rights include other Copyright and Similar Rights. 314 | 315 | 316 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 317 | 318 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 319 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 320 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 321 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 322 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 323 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 324 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 325 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 326 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 327 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 328 | 329 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 330 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 331 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 332 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 333 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 334 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 335 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 336 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 337 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 338 | 339 | c. The disclaimer of warranties and limitation of liability provided 340 | above shall be interpreted in a manner that, to the extent 341 | possible, most closely approximates an absolute disclaimer and 342 | waiver of all liability. 343 | 344 | 345 | Section 6 -- Term and Termination. 346 | 347 | a. This Public License applies for the term of the Copyright and 348 | Similar Rights licensed here. However, if You fail to comply with 349 | this Public License, then Your rights under this Public License 350 | terminate automatically. 351 | 352 | b. Where Your right to use the Licensed Material has terminated under 353 | Section 6(a), it reinstates: 354 | 355 | 1. automatically as of the date the violation is cured, provided 356 | it is cured within 30 days of Your discovery of the 357 | violation; or 358 | 359 | 2. upon express reinstatement by the Licensor. 360 | 361 | For the avoidance of doubt, this Section 6(b) does not affect any 362 | right the Licensor may have to seek remedies for Your violations 363 | of this Public License. 364 | 365 | c. For the avoidance of doubt, the Licensor may also offer the 366 | Licensed Material under separate terms or conditions or stop 367 | distributing the Licensed Material at any time; however, doing so 368 | will not terminate this Public License. 369 | 370 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 371 | License. 372 | 373 | 374 | Section 7 -- Other Terms and Conditions. 375 | 376 | a. The Licensor shall not be bound by any additional or different 377 | terms or conditions communicated by You unless expressly agreed. 378 | 379 | b. Any arrangements, understandings, or agreements regarding the 380 | Licensed Material not stated herein are separate from and 381 | independent of the terms and conditions of this Public License. 382 | 383 | 384 | Section 8 -- Interpretation. 385 | 386 | a. For the avoidance of doubt, this Public License does not, and 387 | shall not be interpreted to, reduce, limit, restrict, or impose 388 | conditions on any use of the Licensed Material that could lawfully 389 | be made without permission under this Public License. 390 | 391 | b. To the extent possible, if any provision of this Public License is 392 | deemed unenforceable, it shall be automatically reformed to the 393 | minimum extent necessary to make it enforceable. If the provision 394 | cannot be reformed, it shall be severed from this Public License 395 | without affecting the enforceability of the remaining terms and 396 | conditions. 397 | 398 | c. No term or condition of this Public License will be waived and no 399 | failure to comply consented to unless expressly agreed to by the 400 | Licensor. 401 | 402 | d. Nothing in this Public License constitutes or may be interpreted 403 | as a limitation upon, or waiver of, any privileges and immunities 404 | that apply to the Licensor or You, including from the legal 405 | processes of any jurisdiction or authority. 406 | 407 | 408 | ======================================================================= 409 | 410 | Creative Commons is not a party to its public 411 | licenses. Notwithstanding, Creative Commons may elect to apply one of 412 | its public licenses to material it publishes and in those instances 413 | will be considered the “Licensor.” The text of the Creative Commons 414 | public licenses is dedicated to the public domain under the CC0 Public 415 | Domain Dedication. Except for the limited purpose of indicating that 416 | material is shared under a Creative Commons public license or as 417 | otherwise permitted by the Creative Commons policies published at 418 | creativecommons.org/policies, Creative Commons does not authorize the 419 | use of the trademark "Creative Commons" or any other trademark or logo 420 | of Creative Commons without its prior written consent including, 421 | without limitation, in connection with any unauthorized modifications 422 | to any of its public licenses or any other arrangements, 423 | understandings, or agreements concerning use of licensed material. For 424 | the avoidance of doubt, this paragraph does not form part of the 425 | public licenses. 426 | 427 | Creative Commons may be contacted at creativecommons.org. 428 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

license

2 | 3 |

这是一份由自己设计并开发的简历

4 | 5 |

6 | https://resume.congm.in 7 |

8 | 9 | 10 | ## 快速开始 11 | 12 | 为保护个人隐私,简历正文内容已改为由 ChatGPT 生成文本,不具备真实性,仅做简历模板参考(若有更高质量的文本欢迎发起 PR) 13 | 14 | 1. `npm i` 安装依赖 15 | 2. `npm run dev` 开发调试 16 | 3. 编辑 `/src/index.html` 文件 17 | 4. `npm run build` 构建 18 | 5. 浏览器打开 `/index.html` 查看产物 19 | 20 | > Chrome 浏览器 > 打印 > 更多设置无边距 > 另存为 PDF > 导出 21 | 22 | --- 23 | 24 | **Fork 或借鉴请遵循 [LICENSE](./LICENSE) 并注明出处 [@CONGMIN](https://github.com/cong-min/resume)** 25 | 26 | 27 | [CC-BY-SA-4.0](./LICENSE) 28 | 29 | Copyright (c) 2016-present, Cong Min 30 | -------------------------------------------------------------------------------- /env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 简历 | 姓名 - Name

正文文本由 ChatGPT 生成,不具备真实性,仅做简历模板参考

简历模版

最后更新时间:2023年04月

姓名Name

资深前端开发工程师 / 新加坡

男 / 1991.01

本科 / 2013年毕业 · 10年工作经验

新加坡国立大学 · 计算机科学与技术

个人能力

  • 掌握HTML5CSS3JavaScript等前端技术,并且熟练运用ReactVueAngular等主流前端框架。有扎实的编程基础和良好的设计模式编程思想,能够封装符合面向对象编程规范的组件库和代码库。

  • 具备深入理解前端架构设计的能力,能够通过架构设计调整应用程序结构、优化应用性能、提升应用使用体验。熟悉基础设施部署架构性能优化等方面的技术,能够制定前端技术架构方案。

  • 具备卓越的团队领导和协作能力,善于协调沟通和技术团队的合作。能够准确分配任务和资源、确保团队成员的技术水平和质量要求、并且不断提高团队的协作效率和工作效果。

  • 精通敏捷开发流程,能够为团队制定规范的开发流程和制定计划,有效提升开发效率和质量。熟练使用前端开发工具和技术,如 WebpackGruntGulp等。

  • 具备出色的UI/UX设计能力,能够精准的根据需求定制设计方案,设计出高质量的 UI 接口和交互。熟悉设计约束条件和用户体验原则。同时,具备深入理解用户心理和特点的能力,从而创造出更好的用户体验和更具吸引力的交互效果。

  • 保持对前端最新技术和潮流的持续探索和学习,并通过实践应用到项目开发中。研究新技术和趋势并在应用中运用,如PWA微前端WebAssembly等。在前端领域保持敏感性,对项目开发整体的前景和前沿趋势做精确的预测和思考。

工作经验

2019.04 ~ 至今 在职

新加坡银行有限公司

新加坡银行便捷金融应用项目

项目负责人

负责新加坡银行公司的便捷金融应用的开发。在项目中,负责应用程序结构设计和开发,并协调其他技术团队保证项目的上线和部署。致力于平衡时间和资源的管理,构建一个高性能、符合金融安全要求的系统。

设计和开发新加坡银行的便捷金融应用,维护和优化现有应用;实现前端应用平台的架构设计和开发;协作并与其他技术团队协调,争取较快的上线和部署;坚持对前端设计模式并不断推动前端开发流程的规格化。

应用成功上线,并获得了广大用户的好评和反馈;应用覆盖了新加坡和东南亚地区,获得了高额利润并推动公司业绩增长。

2016.02 ~ 2019.04

谷歌新加坡研发中心

Google Cloud Console

前端开发

参与了前端架构的设计、开发和部署,也负责前端性能优化和安全性实践。利用ReactRedux等主流前端技术;坚持对代码执行效率、可扩展性和可维护性的优化;致力于自动化测试,将测试用例,自动执行编写自动化工具;为该项目设立前端规范流程,定期对各个开发阶段进行检查。

参与Google云端存储服务的前端开发工作,负责构建网页界面和优化用户体验;负责开发Google Maps API的前端部分,实现地图展示、标记、搜索等功能;支援Google AdSense服务团队,参与前端开发工作,涉及广告展示、点击跟踪等多方面工作。

2013.07 ~ 2016.02

新加坡晶峰科技有限公司

内部管理系统

前端开发

负责开发公司内部管理系统和客户定制系统。通过对现有代码和移动端应用进行优化,使其运行速度和效率更高,同时还负责编写系统性能测试计划,提高系统稳定性。优化并维护现有公司系统和应用;执行代码审阅和代码测试计划;与测试团队一起开展系统性能测试。

实践经历

Facebook新加坡研发中心

实习 2012年暑假
PDF简历 -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "resume", 3 | "version": "2023", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "resume", 9 | "version": "2023", 10 | "license": "cc-by-sa-4.0", 11 | "devDependencies": { 12 | "less": "^4.1.3", 13 | "prettier": "2.8.2", 14 | "typescript": "^4.9.3", 15 | "vite": "^4.0.0", 16 | "vite-plugin-html": "^3.2.0", 17 | "vite-plugin-singlefile": "^0.13.2" 18 | } 19 | }, 20 | "node_modules/@esbuild/android-arm": { 21 | "version": "0.16.16", 22 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.16.tgz", 23 | "integrity": "sha512-BUuWMlt4WSXod1HSl7aGK8fJOsi+Tab/M0IDK1V1/GstzoOpqc/v3DqmN8MkuapPKQ9Br1WtLAN4uEgWR8x64A==", 24 | "cpu": [ 25 | "arm" 26 | ], 27 | "dev": true, 28 | "optional": true, 29 | "os": [ 30 | "android" 31 | ], 32 | "engines": { 33 | "node": ">=12" 34 | } 35 | }, 36 | "node_modules/@esbuild/android-arm64": { 37 | "version": "0.16.16", 38 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.16.tgz", 39 | "integrity": "sha512-hFHVAzUKp9Tf8psGq+bDVv+6hTy1bAOoV/jJMUWwhUnIHsh6WbFMhw0ZTkqDuh7TdpffFoHOiIOIxmHc7oYRBQ==", 40 | "cpu": [ 41 | "arm64" 42 | ], 43 | "dev": true, 44 | "optional": true, 45 | "os": [ 46 | "android" 47 | ], 48 | "engines": { 49 | "node": ">=12" 50 | } 51 | }, 52 | "node_modules/@esbuild/android-x64": { 53 | "version": "0.16.16", 54 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.16.tgz", 55 | "integrity": "sha512-9WhxJpeb6XumlfivldxqmkJepEcELekmSw3NkGrs+Edq6sS5KRxtUBQuKYDD7KqP59dDkxVbaoPIQFKWQG0KLg==", 56 | "cpu": [ 57 | "x64" 58 | ], 59 | "dev": true, 60 | "optional": true, 61 | "os": [ 62 | "android" 63 | ], 64 | "engines": { 65 | "node": ">=12" 66 | } 67 | }, 68 | "node_modules/@esbuild/darwin-arm64": { 69 | "version": "0.16.16", 70 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.16.tgz", 71 | "integrity": "sha512-8Z+wld+vr/prHPi2O0X7o1zQOfMbXWGAw9hT0jEyU/l/Yrg+0Z3FO9pjPho72dVkZs4ewZk0bDOFLdZHm8jEfw==", 72 | "cpu": [ 73 | "arm64" 74 | ], 75 | "dev": true, 76 | "optional": true, 77 | "os": [ 78 | "darwin" 79 | ], 80 | "engines": { 81 | "node": ">=12" 82 | } 83 | }, 84 | "node_modules/@esbuild/darwin-x64": { 85 | "version": "0.16.16", 86 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.16.tgz", 87 | "integrity": "sha512-CYkxVvkZzGCqFrt7EgjFxQKhlUPyDkuR9P0Y5wEcmJqVI8ncerOIY5Kej52MhZyzOBXkYrJgZeVZC9xXXoEg9A==", 88 | "cpu": [ 89 | "x64" 90 | ], 91 | "dev": true, 92 | "optional": true, 93 | "os": [ 94 | "darwin" 95 | ], 96 | "engines": { 97 | "node": ">=12" 98 | } 99 | }, 100 | "node_modules/@esbuild/freebsd-arm64": { 101 | "version": "0.16.16", 102 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.16.tgz", 103 | "integrity": "sha512-fxrw4BYqQ39z/3Ja9xj/a1gMsVq0xEjhSyI4a9MjfvDDD8fUV8IYliac96i7tzZc3+VytyXX+XNsnpEk5sw5Wg==", 104 | "cpu": [ 105 | "arm64" 106 | ], 107 | "dev": true, 108 | "optional": true, 109 | "os": [ 110 | "freebsd" 111 | ], 112 | "engines": { 113 | "node": ">=12" 114 | } 115 | }, 116 | "node_modules/@esbuild/freebsd-x64": { 117 | "version": "0.16.16", 118 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.16.tgz", 119 | "integrity": "sha512-8p3v1D+du2jiDvSoNVimHhj7leSfST9YlKsAEO7etBfuqjaBMndo0fmjNLp0JCMld+XIx9L80tooOkyUv1a1PQ==", 120 | "cpu": [ 121 | "x64" 122 | ], 123 | "dev": true, 124 | "optional": true, 125 | "os": [ 126 | "freebsd" 127 | ], 128 | "engines": { 129 | "node": ">=12" 130 | } 131 | }, 132 | "node_modules/@esbuild/linux-arm": { 133 | "version": "0.16.16", 134 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.16.tgz", 135 | "integrity": "sha512-bYaocE1/PTMRmkgSckZ0D0Xn2nox8v2qlk+MVVqm+VECNKDdZvghVZtH41dNtBbwADSvA6qkCHGYeWm9LrNCBw==", 136 | "cpu": [ 137 | "arm" 138 | ], 139 | "dev": true, 140 | "optional": true, 141 | "os": [ 142 | "linux" 143 | ], 144 | "engines": { 145 | "node": ">=12" 146 | } 147 | }, 148 | "node_modules/@esbuild/linux-arm64": { 149 | "version": "0.16.16", 150 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.16.tgz", 151 | "integrity": "sha512-N3u6BBbCVY3xeP2D8Db7QY8I+nZ+2AgOopUIqk+5yCoLnsWkcVxD2ay5E9iIdvApFi1Vg1lZiiwaVp8bOpAc4A==", 152 | "cpu": [ 153 | "arm64" 154 | ], 155 | "dev": true, 156 | "optional": true, 157 | "os": [ 158 | "linux" 159 | ], 160 | "engines": { 161 | "node": ">=12" 162 | } 163 | }, 164 | "node_modules/@esbuild/linux-ia32": { 165 | "version": "0.16.16", 166 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.16.tgz", 167 | "integrity": "sha512-dxjqLKUW8GqGemoRT9v8IgHk+T4tRm1rn1gUcArsp26W9EkK/27VSjBVUXhEG5NInHZ92JaQ3SSMdTwv/r9a2A==", 168 | "cpu": [ 169 | "ia32" 170 | ], 171 | "dev": true, 172 | "optional": true, 173 | "os": [ 174 | "linux" 175 | ], 176 | "engines": { 177 | "node": ">=12" 178 | } 179 | }, 180 | "node_modules/@esbuild/linux-loong64": { 181 | "version": "0.16.16", 182 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.16.tgz", 183 | "integrity": "sha512-MdUFggHjRiCCwNE9+1AibewoNq6wf94GLB9Q9aXwl+a75UlRmbRK3h6WJyrSGA6ZstDJgaD2wiTSP7tQNUYxwA==", 184 | "cpu": [ 185 | "loong64" 186 | ], 187 | "dev": true, 188 | "optional": true, 189 | "os": [ 190 | "linux" 191 | ], 192 | "engines": { 193 | "node": ">=12" 194 | } 195 | }, 196 | "node_modules/@esbuild/linux-mips64el": { 197 | "version": "0.16.16", 198 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.16.tgz", 199 | "integrity": "sha512-CO3YmO7jYMlGqGoeFeKzdwx/bx8Vtq/SZaMAi+ZLDUnDUdfC7GmGwXzIwDJ70Sg+P9pAemjJyJ1icKJ9R3q/Fg==", 200 | "cpu": [ 201 | "mips64el" 202 | ], 203 | "dev": true, 204 | "optional": true, 205 | "os": [ 206 | "linux" 207 | ], 208 | "engines": { 209 | "node": ">=12" 210 | } 211 | }, 212 | "node_modules/@esbuild/linux-ppc64": { 213 | "version": "0.16.16", 214 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.16.tgz", 215 | "integrity": "sha512-DSl5Czh5hCy/7azX0Wl9IdzPHX2H8clC6G87tBnZnzUpNgRxPFhfmArbaHoAysu4JfqCqbB/33u/GL9dUgCBAw==", 216 | "cpu": [ 217 | "ppc64" 218 | ], 219 | "dev": true, 220 | "optional": true, 221 | "os": [ 222 | "linux" 223 | ], 224 | "engines": { 225 | "node": ">=12" 226 | } 227 | }, 228 | "node_modules/@esbuild/linux-riscv64": { 229 | "version": "0.16.16", 230 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.16.tgz", 231 | "integrity": "sha512-sSVVMEXsqf1fQu0j7kkhXMViroixU5XoaJXl1u/u+jbXvvhhCt9YvA/B6VM3aM/77HuRQ94neS5bcisijGnKFQ==", 232 | "cpu": [ 233 | "riscv64" 234 | ], 235 | "dev": true, 236 | "optional": true, 237 | "os": [ 238 | "linux" 239 | ], 240 | "engines": { 241 | "node": ">=12" 242 | } 243 | }, 244 | "node_modules/@esbuild/linux-s390x": { 245 | "version": "0.16.16", 246 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.16.tgz", 247 | "integrity": "sha512-jRqBCre9gZGoCdCN/UWCCMwCMsOg65IpY9Pyj56mKCF5zXy9d60kkNRdDN6YXGjr3rzcC4DXnS/kQVCGcC4yPQ==", 248 | "cpu": [ 249 | "s390x" 250 | ], 251 | "dev": true, 252 | "optional": true, 253 | "os": [ 254 | "linux" 255 | ], 256 | "engines": { 257 | "node": ">=12" 258 | } 259 | }, 260 | "node_modules/@esbuild/linux-x64": { 261 | "version": "0.16.16", 262 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.16.tgz", 263 | "integrity": "sha512-G1+09TopOzo59/55lk5Q0UokghYLyHTKKzD5lXsAOOlGDbieGEFJpJBr3BLDbf7cz89KX04sBeExAR/pL/26sA==", 264 | "cpu": [ 265 | "x64" 266 | ], 267 | "dev": true, 268 | "optional": true, 269 | "os": [ 270 | "linux" 271 | ], 272 | "engines": { 273 | "node": ">=12" 274 | } 275 | }, 276 | "node_modules/@esbuild/netbsd-x64": { 277 | "version": "0.16.16", 278 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.16.tgz", 279 | "integrity": "sha512-xwjGJB5wwDEujLaJIrSMRqWkbigALpBNcsF9SqszoNKc+wY4kPTdKrSxiY5ik3IatojePP+WV108MvF6q6np4w==", 280 | "cpu": [ 281 | "x64" 282 | ], 283 | "dev": true, 284 | "optional": true, 285 | "os": [ 286 | "netbsd" 287 | ], 288 | "engines": { 289 | "node": ">=12" 290 | } 291 | }, 292 | "node_modules/@esbuild/openbsd-x64": { 293 | "version": "0.16.16", 294 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.16.tgz", 295 | "integrity": "sha512-yeERkoxG2nR2oxO5n+Ms7MsCeNk23zrby2GXCqnfCpPp7KNc0vxaaacIxb21wPMfXXRhGBrNP4YLIupUBrWdlg==", 296 | "cpu": [ 297 | "x64" 298 | ], 299 | "dev": true, 300 | "optional": true, 301 | "os": [ 302 | "openbsd" 303 | ], 304 | "engines": { 305 | "node": ">=12" 306 | } 307 | }, 308 | "node_modules/@esbuild/sunos-x64": { 309 | "version": "0.16.16", 310 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.16.tgz", 311 | "integrity": "sha512-nHfbEym0IObXPhtX6Va3H5GaKBty2kdhlAhKmyCj9u255ktAj0b1YACUs9j5H88NRn9cJCthD1Ik/k9wn8YKVg==", 312 | "cpu": [ 313 | "x64" 314 | ], 315 | "dev": true, 316 | "optional": true, 317 | "os": [ 318 | "sunos" 319 | ], 320 | "engines": { 321 | "node": ">=12" 322 | } 323 | }, 324 | "node_modules/@esbuild/win32-arm64": { 325 | "version": "0.16.16", 326 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.16.tgz", 327 | "integrity": "sha512-pdD+M1ZOFy4hE15ZyPX09fd5g4DqbbL1wXGY90YmleVS6Y5YlraW4BvHjim/X/4yuCpTsAFvsT4Nca2lbyDH/A==", 328 | "cpu": [ 329 | "arm64" 330 | ], 331 | "dev": true, 332 | "optional": true, 333 | "os": [ 334 | "win32" 335 | ], 336 | "engines": { 337 | "node": ">=12" 338 | } 339 | }, 340 | "node_modules/@esbuild/win32-ia32": { 341 | "version": "0.16.16", 342 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.16.tgz", 343 | "integrity": "sha512-IPEMfU9p0c3Vb8PqxaPX6BM9rYwlTZGYOf9u+kMdhoILZkVKEjq6PKZO0lB+isojWwAnAqh4ZxshD96njTXajg==", 344 | "cpu": [ 345 | "ia32" 346 | ], 347 | "dev": true, 348 | "optional": true, 349 | "os": [ 350 | "win32" 351 | ], 352 | "engines": { 353 | "node": ">=12" 354 | } 355 | }, 356 | "node_modules/@esbuild/win32-x64": { 357 | "version": "0.16.16", 358 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.16.tgz", 359 | "integrity": "sha512-1YYpoJ39WV/2bnShPwgdzJklc+XS0bysN6Tpnt1cWPdeoKOG4RMEY1g7i534QxXX/rPvNx/NLJQTTCeORYzipg==", 360 | "cpu": [ 361 | "x64" 362 | ], 363 | "dev": true, 364 | "optional": true, 365 | "os": [ 366 | "win32" 367 | ], 368 | "engines": { 369 | "node": ">=12" 370 | } 371 | }, 372 | "node_modules/@jridgewell/gen-mapping": { 373 | "version": "0.3.2", 374 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", 375 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", 376 | "dev": true, 377 | "dependencies": { 378 | "@jridgewell/set-array": "^1.0.1", 379 | "@jridgewell/sourcemap-codec": "^1.4.10", 380 | "@jridgewell/trace-mapping": "^0.3.9" 381 | }, 382 | "engines": { 383 | "node": ">=6.0.0" 384 | } 385 | }, 386 | "node_modules/@jridgewell/resolve-uri": { 387 | "version": "3.1.0", 388 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 389 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 390 | "dev": true, 391 | "engines": { 392 | "node": ">=6.0.0" 393 | } 394 | }, 395 | "node_modules/@jridgewell/set-array": { 396 | "version": "1.1.2", 397 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 398 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 399 | "dev": true, 400 | "engines": { 401 | "node": ">=6.0.0" 402 | } 403 | }, 404 | "node_modules/@jridgewell/source-map": { 405 | "version": "0.3.2", 406 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", 407 | "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", 408 | "dev": true, 409 | "dependencies": { 410 | "@jridgewell/gen-mapping": "^0.3.0", 411 | "@jridgewell/trace-mapping": "^0.3.9" 412 | } 413 | }, 414 | "node_modules/@jridgewell/sourcemap-codec": { 415 | "version": "1.4.14", 416 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 417 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 418 | "dev": true 419 | }, 420 | "node_modules/@jridgewell/trace-mapping": { 421 | "version": "0.3.17", 422 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", 423 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", 424 | "dev": true, 425 | "dependencies": { 426 | "@jridgewell/resolve-uri": "3.1.0", 427 | "@jridgewell/sourcemap-codec": "1.4.14" 428 | } 429 | }, 430 | "node_modules/@nodelib/fs.scandir": { 431 | "version": "2.1.5", 432 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 433 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 434 | "dev": true, 435 | "dependencies": { 436 | "@nodelib/fs.stat": "2.0.5", 437 | "run-parallel": "^1.1.9" 438 | }, 439 | "engines": { 440 | "node": ">= 8" 441 | } 442 | }, 443 | "node_modules/@nodelib/fs.stat": { 444 | "version": "2.0.5", 445 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 446 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 447 | "dev": true, 448 | "engines": { 449 | "node": ">= 8" 450 | } 451 | }, 452 | "node_modules/@nodelib/fs.walk": { 453 | "version": "1.2.8", 454 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 455 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 456 | "dev": true, 457 | "dependencies": { 458 | "@nodelib/fs.scandir": "2.1.5", 459 | "fastq": "^1.6.0" 460 | }, 461 | "engines": { 462 | "node": ">= 8" 463 | } 464 | }, 465 | "node_modules/@rollup/pluginutils": { 466 | "version": "4.2.1", 467 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", 468 | "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", 469 | "dev": true, 470 | "dependencies": { 471 | "estree-walker": "^2.0.1", 472 | "picomatch": "^2.2.2" 473 | }, 474 | "engines": { 475 | "node": ">= 8.0.0" 476 | } 477 | }, 478 | "node_modules/acorn": { 479 | "version": "8.8.1", 480 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", 481 | "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", 482 | "dev": true, 483 | "bin": { 484 | "acorn": "bin/acorn" 485 | }, 486 | "engines": { 487 | "node": ">=0.4.0" 488 | } 489 | }, 490 | "node_modules/ansi-styles": { 491 | "version": "4.3.0", 492 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 493 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 494 | "dev": true, 495 | "dependencies": { 496 | "color-convert": "^2.0.1" 497 | }, 498 | "engines": { 499 | "node": ">=8" 500 | }, 501 | "funding": { 502 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 503 | } 504 | }, 505 | "node_modules/async": { 506 | "version": "3.2.4", 507 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", 508 | "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", 509 | "dev": true 510 | }, 511 | "node_modules/balanced-match": { 512 | "version": "1.0.2", 513 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 514 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 515 | "dev": true 516 | }, 517 | "node_modules/boolbase": { 518 | "version": "1.0.0", 519 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 520 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", 521 | "dev": true 522 | }, 523 | "node_modules/brace-expansion": { 524 | "version": "1.1.11", 525 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 526 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 527 | "dev": true, 528 | "dependencies": { 529 | "balanced-match": "^1.0.0", 530 | "concat-map": "0.0.1" 531 | } 532 | }, 533 | "node_modules/braces": { 534 | "version": "3.0.2", 535 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 536 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 537 | "dev": true, 538 | "dependencies": { 539 | "fill-range": "^7.0.1" 540 | }, 541 | "engines": { 542 | "node": ">=8" 543 | } 544 | }, 545 | "node_modules/buffer-from": { 546 | "version": "1.1.2", 547 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 548 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 549 | "dev": true 550 | }, 551 | "node_modules/camel-case": { 552 | "version": "4.1.2", 553 | "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", 554 | "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", 555 | "dev": true, 556 | "dependencies": { 557 | "pascal-case": "^3.1.2", 558 | "tslib": "^2.0.3" 559 | } 560 | }, 561 | "node_modules/chalk": { 562 | "version": "4.1.2", 563 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 564 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 565 | "dev": true, 566 | "dependencies": { 567 | "ansi-styles": "^4.1.0", 568 | "supports-color": "^7.1.0" 569 | }, 570 | "engines": { 571 | "node": ">=10" 572 | }, 573 | "funding": { 574 | "url": "https://github.com/chalk/chalk?sponsor=1" 575 | } 576 | }, 577 | "node_modules/clean-css": { 578 | "version": "5.3.1", 579 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", 580 | "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", 581 | "dev": true, 582 | "dependencies": { 583 | "source-map": "~0.6.0" 584 | }, 585 | "engines": { 586 | "node": ">= 10.0" 587 | } 588 | }, 589 | "node_modules/color-convert": { 590 | "version": "2.0.1", 591 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 592 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 593 | "dev": true, 594 | "dependencies": { 595 | "color-name": "~1.1.4" 596 | }, 597 | "engines": { 598 | "node": ">=7.0.0" 599 | } 600 | }, 601 | "node_modules/color-name": { 602 | "version": "1.1.4", 603 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 604 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 605 | "dev": true 606 | }, 607 | "node_modules/colorette": { 608 | "version": "2.0.19", 609 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", 610 | "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", 611 | "dev": true 612 | }, 613 | "node_modules/concat-map": { 614 | "version": "0.0.1", 615 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 616 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 617 | "dev": true 618 | }, 619 | "node_modules/connect-history-api-fallback": { 620 | "version": "1.6.0", 621 | "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", 622 | "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", 623 | "dev": true, 624 | "engines": { 625 | "node": ">=0.8" 626 | } 627 | }, 628 | "node_modules/consola": { 629 | "version": "2.15.3", 630 | "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", 631 | "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", 632 | "dev": true 633 | }, 634 | "node_modules/copy-anything": { 635 | "version": "2.0.6", 636 | "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", 637 | "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", 638 | "dev": true, 639 | "dependencies": { 640 | "is-what": "^3.14.1" 641 | }, 642 | "funding": { 643 | "url": "https://github.com/sponsors/mesqueeb" 644 | } 645 | }, 646 | "node_modules/css-what": { 647 | "version": "6.1.0", 648 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", 649 | "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", 650 | "dev": true, 651 | "engines": { 652 | "node": ">= 6" 653 | }, 654 | "funding": { 655 | "url": "https://github.com/sponsors/fb55" 656 | } 657 | }, 658 | "node_modules/debug": { 659 | "version": "3.2.7", 660 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 661 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 662 | "dev": true, 663 | "optional": true, 664 | "dependencies": { 665 | "ms": "^2.1.1" 666 | } 667 | }, 668 | "node_modules/domelementtype": { 669 | "version": "2.3.0", 670 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 671 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", 672 | "dev": true, 673 | "funding": [ 674 | { 675 | "type": "github", 676 | "url": "https://github.com/sponsors/fb55" 677 | } 678 | ] 679 | }, 680 | "node_modules/dot-case": { 681 | "version": "3.0.4", 682 | "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", 683 | "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", 684 | "dev": true, 685 | "dependencies": { 686 | "no-case": "^3.0.4", 687 | "tslib": "^2.0.3" 688 | } 689 | }, 690 | "node_modules/dotenv": { 691 | "version": "16.0.3", 692 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", 693 | "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", 694 | "dev": true, 695 | "engines": { 696 | "node": ">=12" 697 | } 698 | }, 699 | "node_modules/dotenv-expand": { 700 | "version": "8.0.3", 701 | "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-8.0.3.tgz", 702 | "integrity": "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==", 703 | "dev": true, 704 | "engines": { 705 | "node": ">=12" 706 | } 707 | }, 708 | "node_modules/ejs": { 709 | "version": "3.1.8", 710 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", 711 | "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", 712 | "dev": true, 713 | "dependencies": { 714 | "jake": "^10.8.5" 715 | }, 716 | "bin": { 717 | "ejs": "bin/cli.js" 718 | }, 719 | "engines": { 720 | "node": ">=0.10.0" 721 | } 722 | }, 723 | "node_modules/errno": { 724 | "version": "0.1.8", 725 | "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", 726 | "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", 727 | "dev": true, 728 | "optional": true, 729 | "dependencies": { 730 | "prr": "~1.0.1" 731 | }, 732 | "bin": { 733 | "errno": "cli.js" 734 | } 735 | }, 736 | "node_modules/esbuild": { 737 | "version": "0.16.16", 738 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.16.tgz", 739 | "integrity": "sha512-24JyKq10KXM5EBIgPotYIJ2fInNWVVqflv3gicIyQqfmUqi4HvDW1VR790cBgLJHCl96Syy7lhoz7tLFcmuRmg==", 740 | "dev": true, 741 | "hasInstallScript": true, 742 | "bin": { 743 | "esbuild": "bin/esbuild" 744 | }, 745 | "engines": { 746 | "node": ">=12" 747 | }, 748 | "optionalDependencies": { 749 | "@esbuild/android-arm": "0.16.16", 750 | "@esbuild/android-arm64": "0.16.16", 751 | "@esbuild/android-x64": "0.16.16", 752 | "@esbuild/darwin-arm64": "0.16.16", 753 | "@esbuild/darwin-x64": "0.16.16", 754 | "@esbuild/freebsd-arm64": "0.16.16", 755 | "@esbuild/freebsd-x64": "0.16.16", 756 | "@esbuild/linux-arm": "0.16.16", 757 | "@esbuild/linux-arm64": "0.16.16", 758 | "@esbuild/linux-ia32": "0.16.16", 759 | "@esbuild/linux-loong64": "0.16.16", 760 | "@esbuild/linux-mips64el": "0.16.16", 761 | "@esbuild/linux-ppc64": "0.16.16", 762 | "@esbuild/linux-riscv64": "0.16.16", 763 | "@esbuild/linux-s390x": "0.16.16", 764 | "@esbuild/linux-x64": "0.16.16", 765 | "@esbuild/netbsd-x64": "0.16.16", 766 | "@esbuild/openbsd-x64": "0.16.16", 767 | "@esbuild/sunos-x64": "0.16.16", 768 | "@esbuild/win32-arm64": "0.16.16", 769 | "@esbuild/win32-ia32": "0.16.16", 770 | "@esbuild/win32-x64": "0.16.16" 771 | } 772 | }, 773 | "node_modules/estree-walker": { 774 | "version": "2.0.2", 775 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 776 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 777 | "dev": true 778 | }, 779 | "node_modules/fast-glob": { 780 | "version": "3.2.12", 781 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", 782 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", 783 | "dev": true, 784 | "dependencies": { 785 | "@nodelib/fs.stat": "^2.0.2", 786 | "@nodelib/fs.walk": "^1.2.3", 787 | "glob-parent": "^5.1.2", 788 | "merge2": "^1.3.0", 789 | "micromatch": "^4.0.4" 790 | }, 791 | "engines": { 792 | "node": ">=8.6.0" 793 | } 794 | }, 795 | "node_modules/fastq": { 796 | "version": "1.15.0", 797 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 798 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 799 | "dev": true, 800 | "dependencies": { 801 | "reusify": "^1.0.4" 802 | } 803 | }, 804 | "node_modules/filelist": { 805 | "version": "1.0.4", 806 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", 807 | "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", 808 | "dev": true, 809 | "dependencies": { 810 | "minimatch": "^5.0.1" 811 | } 812 | }, 813 | "node_modules/filelist/node_modules/brace-expansion": { 814 | "version": "2.0.1", 815 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 816 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 817 | "dev": true, 818 | "dependencies": { 819 | "balanced-match": "^1.0.0" 820 | } 821 | }, 822 | "node_modules/filelist/node_modules/minimatch": { 823 | "version": "5.1.2", 824 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", 825 | "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", 826 | "dev": true, 827 | "dependencies": { 828 | "brace-expansion": "^2.0.1" 829 | }, 830 | "engines": { 831 | "node": ">=10" 832 | } 833 | }, 834 | "node_modules/fill-range": { 835 | "version": "7.0.1", 836 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 837 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 838 | "dev": true, 839 | "dependencies": { 840 | "to-regex-range": "^5.0.1" 841 | }, 842 | "engines": { 843 | "node": ">=8" 844 | } 845 | }, 846 | "node_modules/fs-extra": { 847 | "version": "10.1.0", 848 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", 849 | "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", 850 | "dev": true, 851 | "dependencies": { 852 | "graceful-fs": "^4.2.0", 853 | "jsonfile": "^6.0.1", 854 | "universalify": "^2.0.0" 855 | }, 856 | "engines": { 857 | "node": ">=12" 858 | } 859 | }, 860 | "node_modules/fsevents": { 861 | "version": "2.3.2", 862 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 863 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 864 | "dev": true, 865 | "hasInstallScript": true, 866 | "optional": true, 867 | "os": [ 868 | "darwin" 869 | ], 870 | "engines": { 871 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 872 | } 873 | }, 874 | "node_modules/function-bind": { 875 | "version": "1.1.1", 876 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 877 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 878 | "dev": true 879 | }, 880 | "node_modules/glob-parent": { 881 | "version": "5.1.2", 882 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 883 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 884 | "dev": true, 885 | "dependencies": { 886 | "is-glob": "^4.0.1" 887 | }, 888 | "engines": { 889 | "node": ">= 6" 890 | } 891 | }, 892 | "node_modules/graceful-fs": { 893 | "version": "4.2.10", 894 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 895 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 896 | "dev": true 897 | }, 898 | "node_modules/has": { 899 | "version": "1.0.3", 900 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 901 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 902 | "dev": true, 903 | "dependencies": { 904 | "function-bind": "^1.1.1" 905 | }, 906 | "engines": { 907 | "node": ">= 0.4.0" 908 | } 909 | }, 910 | "node_modules/has-flag": { 911 | "version": "4.0.0", 912 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 913 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 914 | "dev": true, 915 | "engines": { 916 | "node": ">=8" 917 | } 918 | }, 919 | "node_modules/he": { 920 | "version": "1.2.0", 921 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 922 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 923 | "dev": true, 924 | "bin": { 925 | "he": "bin/he" 926 | } 927 | }, 928 | "node_modules/html-minifier-terser": { 929 | "version": "6.1.0", 930 | "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", 931 | "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", 932 | "dev": true, 933 | "dependencies": { 934 | "camel-case": "^4.1.2", 935 | "clean-css": "^5.2.2", 936 | "commander": "^8.3.0", 937 | "he": "^1.2.0", 938 | "param-case": "^3.0.4", 939 | "relateurl": "^0.2.7", 940 | "terser": "^5.10.0" 941 | }, 942 | "bin": { 943 | "html-minifier-terser": "cli.js" 944 | }, 945 | "engines": { 946 | "node": ">=12" 947 | } 948 | }, 949 | "node_modules/html-minifier-terser/node_modules/commander": { 950 | "version": "8.3.0", 951 | "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", 952 | "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", 953 | "dev": true, 954 | "engines": { 955 | "node": ">= 12" 956 | } 957 | }, 958 | "node_modules/iconv-lite": { 959 | "version": "0.6.3", 960 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 961 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 962 | "dev": true, 963 | "optional": true, 964 | "dependencies": { 965 | "safer-buffer": ">= 2.1.2 < 3.0.0" 966 | }, 967 | "engines": { 968 | "node": ">=0.10.0" 969 | } 970 | }, 971 | "node_modules/image-size": { 972 | "version": "0.5.5", 973 | "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", 974 | "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", 975 | "dev": true, 976 | "optional": true, 977 | "bin": { 978 | "image-size": "bin/image-size.js" 979 | }, 980 | "engines": { 981 | "node": ">=0.10.0" 982 | } 983 | }, 984 | "node_modules/is-core-module": { 985 | "version": "2.11.0", 986 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 987 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 988 | "dev": true, 989 | "dependencies": { 990 | "has": "^1.0.3" 991 | }, 992 | "funding": { 993 | "url": "https://github.com/sponsors/ljharb" 994 | } 995 | }, 996 | "node_modules/is-extglob": { 997 | "version": "2.1.1", 998 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 999 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1000 | "dev": true, 1001 | "engines": { 1002 | "node": ">=0.10.0" 1003 | } 1004 | }, 1005 | "node_modules/is-glob": { 1006 | "version": "4.0.3", 1007 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1008 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1009 | "dev": true, 1010 | "dependencies": { 1011 | "is-extglob": "^2.1.1" 1012 | }, 1013 | "engines": { 1014 | "node": ">=0.10.0" 1015 | } 1016 | }, 1017 | "node_modules/is-number": { 1018 | "version": "7.0.0", 1019 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1020 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1021 | "dev": true, 1022 | "engines": { 1023 | "node": ">=0.12.0" 1024 | } 1025 | }, 1026 | "node_modules/is-what": { 1027 | "version": "3.14.1", 1028 | "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", 1029 | "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", 1030 | "dev": true 1031 | }, 1032 | "node_modules/jake": { 1033 | "version": "10.8.5", 1034 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", 1035 | "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", 1036 | "dev": true, 1037 | "dependencies": { 1038 | "async": "^3.2.3", 1039 | "chalk": "^4.0.2", 1040 | "filelist": "^1.0.1", 1041 | "minimatch": "^3.0.4" 1042 | }, 1043 | "bin": { 1044 | "jake": "bin/cli.js" 1045 | }, 1046 | "engines": { 1047 | "node": ">=10" 1048 | } 1049 | }, 1050 | "node_modules/jsonfile": { 1051 | "version": "6.1.0", 1052 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 1053 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 1054 | "dev": true, 1055 | "dependencies": { 1056 | "universalify": "^2.0.0" 1057 | }, 1058 | "optionalDependencies": { 1059 | "graceful-fs": "^4.1.6" 1060 | } 1061 | }, 1062 | "node_modules/less": { 1063 | "version": "4.1.3", 1064 | "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", 1065 | "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", 1066 | "dev": true, 1067 | "dependencies": { 1068 | "copy-anything": "^2.0.1", 1069 | "parse-node-version": "^1.0.1", 1070 | "tslib": "^2.3.0" 1071 | }, 1072 | "bin": { 1073 | "lessc": "bin/lessc" 1074 | }, 1075 | "engines": { 1076 | "node": ">=6" 1077 | }, 1078 | "optionalDependencies": { 1079 | "errno": "^0.1.1", 1080 | "graceful-fs": "^4.1.2", 1081 | "image-size": "~0.5.0", 1082 | "make-dir": "^2.1.0", 1083 | "mime": "^1.4.1", 1084 | "needle": "^3.1.0", 1085 | "source-map": "~0.6.0" 1086 | } 1087 | }, 1088 | "node_modules/lower-case": { 1089 | "version": "2.0.2", 1090 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", 1091 | "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", 1092 | "dev": true, 1093 | "dependencies": { 1094 | "tslib": "^2.0.3" 1095 | } 1096 | }, 1097 | "node_modules/make-dir": { 1098 | "version": "2.1.0", 1099 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", 1100 | "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", 1101 | "dev": true, 1102 | "optional": true, 1103 | "dependencies": { 1104 | "pify": "^4.0.1", 1105 | "semver": "^5.6.0" 1106 | }, 1107 | "engines": { 1108 | "node": ">=6" 1109 | } 1110 | }, 1111 | "node_modules/merge2": { 1112 | "version": "1.4.1", 1113 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1114 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1115 | "dev": true, 1116 | "engines": { 1117 | "node": ">= 8" 1118 | } 1119 | }, 1120 | "node_modules/micromatch": { 1121 | "version": "4.0.5", 1122 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1123 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1124 | "dev": true, 1125 | "dependencies": { 1126 | "braces": "^3.0.2", 1127 | "picomatch": "^2.3.1" 1128 | }, 1129 | "engines": { 1130 | "node": ">=8.6" 1131 | } 1132 | }, 1133 | "node_modules/mime": { 1134 | "version": "1.6.0", 1135 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1136 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1137 | "dev": true, 1138 | "optional": true, 1139 | "bin": { 1140 | "mime": "cli.js" 1141 | }, 1142 | "engines": { 1143 | "node": ">=4" 1144 | } 1145 | }, 1146 | "node_modules/minimatch": { 1147 | "version": "3.1.2", 1148 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1149 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1150 | "dev": true, 1151 | "dependencies": { 1152 | "brace-expansion": "^1.1.7" 1153 | }, 1154 | "engines": { 1155 | "node": "*" 1156 | } 1157 | }, 1158 | "node_modules/ms": { 1159 | "version": "2.1.3", 1160 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1161 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1162 | "dev": true, 1163 | "optional": true 1164 | }, 1165 | "node_modules/nanoid": { 1166 | "version": "3.3.4", 1167 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 1168 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 1169 | "dev": true, 1170 | "bin": { 1171 | "nanoid": "bin/nanoid.cjs" 1172 | }, 1173 | "engines": { 1174 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1175 | } 1176 | }, 1177 | "node_modules/needle": { 1178 | "version": "3.2.0", 1179 | "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", 1180 | "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", 1181 | "dev": true, 1182 | "optional": true, 1183 | "dependencies": { 1184 | "debug": "^3.2.6", 1185 | "iconv-lite": "^0.6.3", 1186 | "sax": "^1.2.4" 1187 | }, 1188 | "bin": { 1189 | "needle": "bin/needle" 1190 | }, 1191 | "engines": { 1192 | "node": ">= 4.4.x" 1193 | } 1194 | }, 1195 | "node_modules/no-case": { 1196 | "version": "3.0.4", 1197 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", 1198 | "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", 1199 | "dev": true, 1200 | "dependencies": { 1201 | "lower-case": "^2.0.2", 1202 | "tslib": "^2.0.3" 1203 | } 1204 | }, 1205 | "node_modules/node-html-parser": { 1206 | "version": "5.4.2", 1207 | "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-5.4.2.tgz", 1208 | "integrity": "sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==", 1209 | "dev": true, 1210 | "dependencies": { 1211 | "css-select": "^4.2.1", 1212 | "he": "1.2.0" 1213 | } 1214 | }, 1215 | "node_modules/node-html-parser/node_modules/css-select": { 1216 | "version": "4.3.0", 1217 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", 1218 | "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", 1219 | "dev": true, 1220 | "dependencies": { 1221 | "boolbase": "^1.0.0", 1222 | "css-what": "^6.0.1", 1223 | "domhandler": "^4.3.1", 1224 | "domutils": "^2.8.0", 1225 | "nth-check": "^2.0.1" 1226 | }, 1227 | "funding": { 1228 | "url": "https://github.com/sponsors/fb55" 1229 | } 1230 | }, 1231 | "node_modules/node-html-parser/node_modules/dom-serializer": { 1232 | "version": "1.4.1", 1233 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", 1234 | "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", 1235 | "dev": true, 1236 | "dependencies": { 1237 | "domelementtype": "^2.0.1", 1238 | "domhandler": "^4.2.0", 1239 | "entities": "^2.0.0" 1240 | }, 1241 | "funding": { 1242 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" 1243 | } 1244 | }, 1245 | "node_modules/node-html-parser/node_modules/domhandler": { 1246 | "version": "4.3.1", 1247 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", 1248 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", 1249 | "dev": true, 1250 | "dependencies": { 1251 | "domelementtype": "^2.2.0" 1252 | }, 1253 | "engines": { 1254 | "node": ">= 4" 1255 | }, 1256 | "funding": { 1257 | "url": "https://github.com/fb55/domhandler?sponsor=1" 1258 | } 1259 | }, 1260 | "node_modules/node-html-parser/node_modules/domutils": { 1261 | "version": "2.8.0", 1262 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 1263 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 1264 | "dev": true, 1265 | "dependencies": { 1266 | "dom-serializer": "^1.0.1", 1267 | "domelementtype": "^2.2.0", 1268 | "domhandler": "^4.2.0" 1269 | }, 1270 | "funding": { 1271 | "url": "https://github.com/fb55/domutils?sponsor=1" 1272 | } 1273 | }, 1274 | "node_modules/node-html-parser/node_modules/entities": { 1275 | "version": "2.2.0", 1276 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 1277 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 1278 | "dev": true, 1279 | "funding": { 1280 | "url": "https://github.com/fb55/entities?sponsor=1" 1281 | } 1282 | }, 1283 | "node_modules/nth-check": { 1284 | "version": "2.1.1", 1285 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", 1286 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", 1287 | "dev": true, 1288 | "dependencies": { 1289 | "boolbase": "^1.0.0" 1290 | }, 1291 | "funding": { 1292 | "url": "https://github.com/fb55/nth-check?sponsor=1" 1293 | } 1294 | }, 1295 | "node_modules/param-case": { 1296 | "version": "3.0.4", 1297 | "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", 1298 | "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", 1299 | "dev": true, 1300 | "dependencies": { 1301 | "dot-case": "^3.0.4", 1302 | "tslib": "^2.0.3" 1303 | } 1304 | }, 1305 | "node_modules/parse-node-version": { 1306 | "version": "1.0.1", 1307 | "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", 1308 | "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", 1309 | "dev": true, 1310 | "engines": { 1311 | "node": ">= 0.10" 1312 | } 1313 | }, 1314 | "node_modules/pascal-case": { 1315 | "version": "3.1.2", 1316 | "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", 1317 | "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", 1318 | "dev": true, 1319 | "dependencies": { 1320 | "no-case": "^3.0.4", 1321 | "tslib": "^2.0.3" 1322 | } 1323 | }, 1324 | "node_modules/path-parse": { 1325 | "version": "1.0.7", 1326 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1327 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1328 | "dev": true 1329 | }, 1330 | "node_modules/pathe": { 1331 | "version": "0.2.0", 1332 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.2.0.tgz", 1333 | "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", 1334 | "dev": true 1335 | }, 1336 | "node_modules/picocolors": { 1337 | "version": "1.0.0", 1338 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1339 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1340 | "dev": true 1341 | }, 1342 | "node_modules/picomatch": { 1343 | "version": "2.3.1", 1344 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1345 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1346 | "dev": true, 1347 | "engines": { 1348 | "node": ">=8.6" 1349 | }, 1350 | "funding": { 1351 | "url": "https://github.com/sponsors/jonschlinkert" 1352 | } 1353 | }, 1354 | "node_modules/pify": { 1355 | "version": "4.0.1", 1356 | "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", 1357 | "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", 1358 | "dev": true, 1359 | "optional": true, 1360 | "engines": { 1361 | "node": ">=6" 1362 | } 1363 | }, 1364 | "node_modules/postcss": { 1365 | "version": "8.4.21", 1366 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", 1367 | "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", 1368 | "dev": true, 1369 | "funding": [ 1370 | { 1371 | "type": "opencollective", 1372 | "url": "https://opencollective.com/postcss/" 1373 | }, 1374 | { 1375 | "type": "tidelift", 1376 | "url": "https://tidelift.com/funding/github/npm/postcss" 1377 | } 1378 | ], 1379 | "dependencies": { 1380 | "nanoid": "^3.3.4", 1381 | "picocolors": "^1.0.0", 1382 | "source-map-js": "^1.0.2" 1383 | }, 1384 | "engines": { 1385 | "node": "^10 || ^12 || >=14" 1386 | } 1387 | }, 1388 | "node_modules/prettier": { 1389 | "version": "2.8.2", 1390 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.2.tgz", 1391 | "integrity": "sha512-BtRV9BcncDyI2tsuS19zzhzoxD8Dh8LiCx7j7tHzrkz8GFXAexeWFdi22mjE1d16dftH2qNaytVxqiRTGlMfpw==", 1392 | "dev": true, 1393 | "bin": { 1394 | "prettier": "bin-prettier.js" 1395 | }, 1396 | "engines": { 1397 | "node": ">=10.13.0" 1398 | }, 1399 | "funding": { 1400 | "url": "https://github.com/prettier/prettier?sponsor=1" 1401 | } 1402 | }, 1403 | "node_modules/prr": { 1404 | "version": "1.0.1", 1405 | "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", 1406 | "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", 1407 | "dev": true, 1408 | "optional": true 1409 | }, 1410 | "node_modules/queue-microtask": { 1411 | "version": "1.2.3", 1412 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1413 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1414 | "dev": true, 1415 | "funding": [ 1416 | { 1417 | "type": "github", 1418 | "url": "https://github.com/sponsors/feross" 1419 | }, 1420 | { 1421 | "type": "patreon", 1422 | "url": "https://www.patreon.com/feross" 1423 | }, 1424 | { 1425 | "type": "consulting", 1426 | "url": "https://feross.org/support" 1427 | } 1428 | ] 1429 | }, 1430 | "node_modules/relateurl": { 1431 | "version": "0.2.7", 1432 | "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", 1433 | "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", 1434 | "dev": true, 1435 | "engines": { 1436 | "node": ">= 0.10" 1437 | } 1438 | }, 1439 | "node_modules/resolve": { 1440 | "version": "1.22.1", 1441 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 1442 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 1443 | "dev": true, 1444 | "dependencies": { 1445 | "is-core-module": "^2.9.0", 1446 | "path-parse": "^1.0.7", 1447 | "supports-preserve-symlinks-flag": "^1.0.0" 1448 | }, 1449 | "bin": { 1450 | "resolve": "bin/resolve" 1451 | }, 1452 | "funding": { 1453 | "url": "https://github.com/sponsors/ljharb" 1454 | } 1455 | }, 1456 | "node_modules/reusify": { 1457 | "version": "1.0.4", 1458 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1459 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1460 | "dev": true, 1461 | "engines": { 1462 | "iojs": ">=1.0.0", 1463 | "node": ">=0.10.0" 1464 | } 1465 | }, 1466 | "node_modules/rollup": { 1467 | "version": "3.9.1", 1468 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz", 1469 | "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==", 1470 | "dev": true, 1471 | "bin": { 1472 | "rollup": "dist/bin/rollup" 1473 | }, 1474 | "engines": { 1475 | "node": ">=14.18.0", 1476 | "npm": ">=8.0.0" 1477 | }, 1478 | "optionalDependencies": { 1479 | "fsevents": "~2.3.2" 1480 | } 1481 | }, 1482 | "node_modules/run-parallel": { 1483 | "version": "1.2.0", 1484 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1485 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1486 | "dev": true, 1487 | "funding": [ 1488 | { 1489 | "type": "github", 1490 | "url": "https://github.com/sponsors/feross" 1491 | }, 1492 | { 1493 | "type": "patreon", 1494 | "url": "https://www.patreon.com/feross" 1495 | }, 1496 | { 1497 | "type": "consulting", 1498 | "url": "https://feross.org/support" 1499 | } 1500 | ], 1501 | "dependencies": { 1502 | "queue-microtask": "^1.2.2" 1503 | } 1504 | }, 1505 | "node_modules/safer-buffer": { 1506 | "version": "2.1.2", 1507 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1508 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1509 | "dev": true, 1510 | "optional": true 1511 | }, 1512 | "node_modules/sax": { 1513 | "version": "1.2.4", 1514 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 1515 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", 1516 | "dev": true, 1517 | "optional": true 1518 | }, 1519 | "node_modules/semver": { 1520 | "version": "5.7.1", 1521 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1522 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1523 | "dev": true, 1524 | "optional": true, 1525 | "bin": { 1526 | "semver": "bin/semver" 1527 | } 1528 | }, 1529 | "node_modules/source-map": { 1530 | "version": "0.6.1", 1531 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1532 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1533 | "dev": true, 1534 | "engines": { 1535 | "node": ">=0.10.0" 1536 | } 1537 | }, 1538 | "node_modules/source-map-js": { 1539 | "version": "1.0.2", 1540 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1541 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1542 | "dev": true, 1543 | "engines": { 1544 | "node": ">=0.10.0" 1545 | } 1546 | }, 1547 | "node_modules/source-map-support": { 1548 | "version": "0.5.21", 1549 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1550 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1551 | "dev": true, 1552 | "dependencies": { 1553 | "buffer-from": "^1.0.0", 1554 | "source-map": "^0.6.0" 1555 | } 1556 | }, 1557 | "node_modules/supports-color": { 1558 | "version": "7.2.0", 1559 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1560 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1561 | "dev": true, 1562 | "dependencies": { 1563 | "has-flag": "^4.0.0" 1564 | }, 1565 | "engines": { 1566 | "node": ">=8" 1567 | } 1568 | }, 1569 | "node_modules/supports-preserve-symlinks-flag": { 1570 | "version": "1.0.0", 1571 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1572 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1573 | "dev": true, 1574 | "engines": { 1575 | "node": ">= 0.4" 1576 | }, 1577 | "funding": { 1578 | "url": "https://github.com/sponsors/ljharb" 1579 | } 1580 | }, 1581 | "node_modules/terser": { 1582 | "version": "5.16.1", 1583 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", 1584 | "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", 1585 | "dev": true, 1586 | "dependencies": { 1587 | "@jridgewell/source-map": "^0.3.2", 1588 | "acorn": "^8.5.0", 1589 | "commander": "^2.20.0", 1590 | "source-map-support": "~0.5.20" 1591 | }, 1592 | "bin": { 1593 | "terser": "bin/terser" 1594 | }, 1595 | "engines": { 1596 | "node": ">=10" 1597 | } 1598 | }, 1599 | "node_modules/terser/node_modules/commander": { 1600 | "version": "2.20.3", 1601 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1602 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1603 | "dev": true 1604 | }, 1605 | "node_modules/to-regex-range": { 1606 | "version": "5.0.1", 1607 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1608 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1609 | "dev": true, 1610 | "dependencies": { 1611 | "is-number": "^7.0.0" 1612 | }, 1613 | "engines": { 1614 | "node": ">=8.0" 1615 | } 1616 | }, 1617 | "node_modules/tslib": { 1618 | "version": "2.4.1", 1619 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 1620 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", 1621 | "dev": true 1622 | }, 1623 | "node_modules/typescript": { 1624 | "version": "4.9.4", 1625 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", 1626 | "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", 1627 | "dev": true, 1628 | "bin": { 1629 | "tsc": "bin/tsc", 1630 | "tsserver": "bin/tsserver" 1631 | }, 1632 | "engines": { 1633 | "node": ">=4.2.0" 1634 | } 1635 | }, 1636 | "node_modules/universalify": { 1637 | "version": "2.0.0", 1638 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 1639 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 1640 | "dev": true, 1641 | "engines": { 1642 | "node": ">= 10.0.0" 1643 | } 1644 | }, 1645 | "node_modules/vite": { 1646 | "version": "4.0.4", 1647 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", 1648 | "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", 1649 | "dev": true, 1650 | "dependencies": { 1651 | "esbuild": "^0.16.3", 1652 | "postcss": "^8.4.20", 1653 | "resolve": "^1.22.1", 1654 | "rollup": "^3.7.0" 1655 | }, 1656 | "bin": { 1657 | "vite": "bin/vite.js" 1658 | }, 1659 | "engines": { 1660 | "node": "^14.18.0 || >=16.0.0" 1661 | }, 1662 | "optionalDependencies": { 1663 | "fsevents": "~2.3.2" 1664 | }, 1665 | "peerDependencies": { 1666 | "@types/node": ">= 14", 1667 | "less": "*", 1668 | "sass": "*", 1669 | "stylus": "*", 1670 | "sugarss": "*", 1671 | "terser": "^5.4.0" 1672 | }, 1673 | "peerDependenciesMeta": { 1674 | "@types/node": { 1675 | "optional": true 1676 | }, 1677 | "less": { 1678 | "optional": true 1679 | }, 1680 | "sass": { 1681 | "optional": true 1682 | }, 1683 | "stylus": { 1684 | "optional": true 1685 | }, 1686 | "sugarss": { 1687 | "optional": true 1688 | }, 1689 | "terser": { 1690 | "optional": true 1691 | } 1692 | } 1693 | }, 1694 | "node_modules/vite-plugin-html": { 1695 | "version": "3.2.0", 1696 | "resolved": "https://registry.npmjs.org/vite-plugin-html/-/vite-plugin-html-3.2.0.tgz", 1697 | "integrity": "sha512-2VLCeDiHmV/BqqNn5h2V+4280KRgQzCFN47cst3WiNK848klESPQnzuC3okH5XHtgwHH/6s1Ho/YV6yIO0pgoQ==", 1698 | "dev": true, 1699 | "dependencies": { 1700 | "@rollup/pluginutils": "^4.2.0", 1701 | "colorette": "^2.0.16", 1702 | "connect-history-api-fallback": "^1.6.0", 1703 | "consola": "^2.15.3", 1704 | "dotenv": "^16.0.0", 1705 | "dotenv-expand": "^8.0.2", 1706 | "ejs": "^3.1.6", 1707 | "fast-glob": "^3.2.11", 1708 | "fs-extra": "^10.0.1", 1709 | "html-minifier-terser": "^6.1.0", 1710 | "node-html-parser": "^5.3.3", 1711 | "pathe": "^0.2.0" 1712 | }, 1713 | "peerDependencies": { 1714 | "vite": ">=2.0.0" 1715 | } 1716 | }, 1717 | "node_modules/vite-plugin-singlefile": { 1718 | "version": "0.13.2", 1719 | "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-0.13.2.tgz", 1720 | "integrity": "sha512-HAvrU9mxasNMn/YF0Hb9NjsWDstCWe4iLQ6IR5ppOiNMvXjcyqU3C9SDQ32xnonx3Y04JUGjD2bGiT6q0S9T8w==", 1721 | "dev": true, 1722 | "dependencies": { 1723 | "micromatch": "^4.0.5" 1724 | }, 1725 | "engines": { 1726 | "node": "^14.18.0 || >=16.0.0" 1727 | }, 1728 | "peerDependencies": { 1729 | "rollup": ">=2.79.0", 1730 | "vite": ">=3.2.0" 1731 | } 1732 | } 1733 | }, 1734 | "dependencies": { 1735 | "@esbuild/android-arm": { 1736 | "version": "0.16.16", 1737 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.16.tgz", 1738 | "integrity": "sha512-BUuWMlt4WSXod1HSl7aGK8fJOsi+Tab/M0IDK1V1/GstzoOpqc/v3DqmN8MkuapPKQ9Br1WtLAN4uEgWR8x64A==", 1739 | "dev": true, 1740 | "optional": true 1741 | }, 1742 | "@esbuild/android-arm64": { 1743 | "version": "0.16.16", 1744 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.16.tgz", 1745 | "integrity": "sha512-hFHVAzUKp9Tf8psGq+bDVv+6hTy1bAOoV/jJMUWwhUnIHsh6WbFMhw0ZTkqDuh7TdpffFoHOiIOIxmHc7oYRBQ==", 1746 | "dev": true, 1747 | "optional": true 1748 | }, 1749 | "@esbuild/android-x64": { 1750 | "version": "0.16.16", 1751 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.16.tgz", 1752 | "integrity": "sha512-9WhxJpeb6XumlfivldxqmkJepEcELekmSw3NkGrs+Edq6sS5KRxtUBQuKYDD7KqP59dDkxVbaoPIQFKWQG0KLg==", 1753 | "dev": true, 1754 | "optional": true 1755 | }, 1756 | "@esbuild/darwin-arm64": { 1757 | "version": "0.16.16", 1758 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.16.tgz", 1759 | "integrity": "sha512-8Z+wld+vr/prHPi2O0X7o1zQOfMbXWGAw9hT0jEyU/l/Yrg+0Z3FO9pjPho72dVkZs4ewZk0bDOFLdZHm8jEfw==", 1760 | "dev": true, 1761 | "optional": true 1762 | }, 1763 | "@esbuild/darwin-x64": { 1764 | "version": "0.16.16", 1765 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.16.tgz", 1766 | "integrity": "sha512-CYkxVvkZzGCqFrt7EgjFxQKhlUPyDkuR9P0Y5wEcmJqVI8ncerOIY5Kej52MhZyzOBXkYrJgZeVZC9xXXoEg9A==", 1767 | "dev": true, 1768 | "optional": true 1769 | }, 1770 | "@esbuild/freebsd-arm64": { 1771 | "version": "0.16.16", 1772 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.16.tgz", 1773 | "integrity": "sha512-fxrw4BYqQ39z/3Ja9xj/a1gMsVq0xEjhSyI4a9MjfvDDD8fUV8IYliac96i7tzZc3+VytyXX+XNsnpEk5sw5Wg==", 1774 | "dev": true, 1775 | "optional": true 1776 | }, 1777 | "@esbuild/freebsd-x64": { 1778 | "version": "0.16.16", 1779 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.16.tgz", 1780 | "integrity": "sha512-8p3v1D+du2jiDvSoNVimHhj7leSfST9YlKsAEO7etBfuqjaBMndo0fmjNLp0JCMld+XIx9L80tooOkyUv1a1PQ==", 1781 | "dev": true, 1782 | "optional": true 1783 | }, 1784 | "@esbuild/linux-arm": { 1785 | "version": "0.16.16", 1786 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.16.tgz", 1787 | "integrity": "sha512-bYaocE1/PTMRmkgSckZ0D0Xn2nox8v2qlk+MVVqm+VECNKDdZvghVZtH41dNtBbwADSvA6qkCHGYeWm9LrNCBw==", 1788 | "dev": true, 1789 | "optional": true 1790 | }, 1791 | "@esbuild/linux-arm64": { 1792 | "version": "0.16.16", 1793 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.16.tgz", 1794 | "integrity": "sha512-N3u6BBbCVY3xeP2D8Db7QY8I+nZ+2AgOopUIqk+5yCoLnsWkcVxD2ay5E9iIdvApFi1Vg1lZiiwaVp8bOpAc4A==", 1795 | "dev": true, 1796 | "optional": true 1797 | }, 1798 | "@esbuild/linux-ia32": { 1799 | "version": "0.16.16", 1800 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.16.tgz", 1801 | "integrity": "sha512-dxjqLKUW8GqGemoRT9v8IgHk+T4tRm1rn1gUcArsp26W9EkK/27VSjBVUXhEG5NInHZ92JaQ3SSMdTwv/r9a2A==", 1802 | "dev": true, 1803 | "optional": true 1804 | }, 1805 | "@esbuild/linux-loong64": { 1806 | "version": "0.16.16", 1807 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.16.tgz", 1808 | "integrity": "sha512-MdUFggHjRiCCwNE9+1AibewoNq6wf94GLB9Q9aXwl+a75UlRmbRK3h6WJyrSGA6ZstDJgaD2wiTSP7tQNUYxwA==", 1809 | "dev": true, 1810 | "optional": true 1811 | }, 1812 | "@esbuild/linux-mips64el": { 1813 | "version": "0.16.16", 1814 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.16.tgz", 1815 | "integrity": "sha512-CO3YmO7jYMlGqGoeFeKzdwx/bx8Vtq/SZaMAi+ZLDUnDUdfC7GmGwXzIwDJ70Sg+P9pAemjJyJ1icKJ9R3q/Fg==", 1816 | "dev": true, 1817 | "optional": true 1818 | }, 1819 | "@esbuild/linux-ppc64": { 1820 | "version": "0.16.16", 1821 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.16.tgz", 1822 | "integrity": "sha512-DSl5Czh5hCy/7azX0Wl9IdzPHX2H8clC6G87tBnZnzUpNgRxPFhfmArbaHoAysu4JfqCqbB/33u/GL9dUgCBAw==", 1823 | "dev": true, 1824 | "optional": true 1825 | }, 1826 | "@esbuild/linux-riscv64": { 1827 | "version": "0.16.16", 1828 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.16.tgz", 1829 | "integrity": "sha512-sSVVMEXsqf1fQu0j7kkhXMViroixU5XoaJXl1u/u+jbXvvhhCt9YvA/B6VM3aM/77HuRQ94neS5bcisijGnKFQ==", 1830 | "dev": true, 1831 | "optional": true 1832 | }, 1833 | "@esbuild/linux-s390x": { 1834 | "version": "0.16.16", 1835 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.16.tgz", 1836 | "integrity": "sha512-jRqBCre9gZGoCdCN/UWCCMwCMsOg65IpY9Pyj56mKCF5zXy9d60kkNRdDN6YXGjr3rzcC4DXnS/kQVCGcC4yPQ==", 1837 | "dev": true, 1838 | "optional": true 1839 | }, 1840 | "@esbuild/linux-x64": { 1841 | "version": "0.16.16", 1842 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.16.tgz", 1843 | "integrity": "sha512-G1+09TopOzo59/55lk5Q0UokghYLyHTKKzD5lXsAOOlGDbieGEFJpJBr3BLDbf7cz89KX04sBeExAR/pL/26sA==", 1844 | "dev": true, 1845 | "optional": true 1846 | }, 1847 | "@esbuild/netbsd-x64": { 1848 | "version": "0.16.16", 1849 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.16.tgz", 1850 | "integrity": "sha512-xwjGJB5wwDEujLaJIrSMRqWkbigALpBNcsF9SqszoNKc+wY4kPTdKrSxiY5ik3IatojePP+WV108MvF6q6np4w==", 1851 | "dev": true, 1852 | "optional": true 1853 | }, 1854 | "@esbuild/openbsd-x64": { 1855 | "version": "0.16.16", 1856 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.16.tgz", 1857 | "integrity": "sha512-yeERkoxG2nR2oxO5n+Ms7MsCeNk23zrby2GXCqnfCpPp7KNc0vxaaacIxb21wPMfXXRhGBrNP4YLIupUBrWdlg==", 1858 | "dev": true, 1859 | "optional": true 1860 | }, 1861 | "@esbuild/sunos-x64": { 1862 | "version": "0.16.16", 1863 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.16.tgz", 1864 | "integrity": "sha512-nHfbEym0IObXPhtX6Va3H5GaKBty2kdhlAhKmyCj9u255ktAj0b1YACUs9j5H88NRn9cJCthD1Ik/k9wn8YKVg==", 1865 | "dev": true, 1866 | "optional": true 1867 | }, 1868 | "@esbuild/win32-arm64": { 1869 | "version": "0.16.16", 1870 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.16.tgz", 1871 | "integrity": "sha512-pdD+M1ZOFy4hE15ZyPX09fd5g4DqbbL1wXGY90YmleVS6Y5YlraW4BvHjim/X/4yuCpTsAFvsT4Nca2lbyDH/A==", 1872 | "dev": true, 1873 | "optional": true 1874 | }, 1875 | "@esbuild/win32-ia32": { 1876 | "version": "0.16.16", 1877 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.16.tgz", 1878 | "integrity": "sha512-IPEMfU9p0c3Vb8PqxaPX6BM9rYwlTZGYOf9u+kMdhoILZkVKEjq6PKZO0lB+isojWwAnAqh4ZxshD96njTXajg==", 1879 | "dev": true, 1880 | "optional": true 1881 | }, 1882 | "@esbuild/win32-x64": { 1883 | "version": "0.16.16", 1884 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.16.tgz", 1885 | "integrity": "sha512-1YYpoJ39WV/2bnShPwgdzJklc+XS0bysN6Tpnt1cWPdeoKOG4RMEY1g7i534QxXX/rPvNx/NLJQTTCeORYzipg==", 1886 | "dev": true, 1887 | "optional": true 1888 | }, 1889 | "@jridgewell/gen-mapping": { 1890 | "version": "0.3.2", 1891 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", 1892 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", 1893 | "dev": true, 1894 | "requires": { 1895 | "@jridgewell/set-array": "^1.0.1", 1896 | "@jridgewell/sourcemap-codec": "^1.4.10", 1897 | "@jridgewell/trace-mapping": "^0.3.9" 1898 | } 1899 | }, 1900 | "@jridgewell/resolve-uri": { 1901 | "version": "3.1.0", 1902 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 1903 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 1904 | "dev": true 1905 | }, 1906 | "@jridgewell/set-array": { 1907 | "version": "1.1.2", 1908 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 1909 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 1910 | "dev": true 1911 | }, 1912 | "@jridgewell/source-map": { 1913 | "version": "0.3.2", 1914 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", 1915 | "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", 1916 | "dev": true, 1917 | "requires": { 1918 | "@jridgewell/gen-mapping": "^0.3.0", 1919 | "@jridgewell/trace-mapping": "^0.3.9" 1920 | } 1921 | }, 1922 | "@jridgewell/sourcemap-codec": { 1923 | "version": "1.4.14", 1924 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 1925 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 1926 | "dev": true 1927 | }, 1928 | "@jridgewell/trace-mapping": { 1929 | "version": "0.3.17", 1930 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", 1931 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", 1932 | "dev": true, 1933 | "requires": { 1934 | "@jridgewell/resolve-uri": "3.1.0", 1935 | "@jridgewell/sourcemap-codec": "1.4.14" 1936 | } 1937 | }, 1938 | "@nodelib/fs.scandir": { 1939 | "version": "2.1.5", 1940 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 1941 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 1942 | "dev": true, 1943 | "requires": { 1944 | "@nodelib/fs.stat": "2.0.5", 1945 | "run-parallel": "^1.1.9" 1946 | } 1947 | }, 1948 | "@nodelib/fs.stat": { 1949 | "version": "2.0.5", 1950 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 1951 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 1952 | "dev": true 1953 | }, 1954 | "@nodelib/fs.walk": { 1955 | "version": "1.2.8", 1956 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 1957 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 1958 | "dev": true, 1959 | "requires": { 1960 | "@nodelib/fs.scandir": "2.1.5", 1961 | "fastq": "^1.6.0" 1962 | } 1963 | }, 1964 | "@rollup/pluginutils": { 1965 | "version": "4.2.1", 1966 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", 1967 | "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", 1968 | "dev": true, 1969 | "requires": { 1970 | "estree-walker": "^2.0.1", 1971 | "picomatch": "^2.2.2" 1972 | } 1973 | }, 1974 | "acorn": { 1975 | "version": "8.8.1", 1976 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", 1977 | "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", 1978 | "dev": true 1979 | }, 1980 | "ansi-styles": { 1981 | "version": "4.3.0", 1982 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1983 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1984 | "dev": true, 1985 | "requires": { 1986 | "color-convert": "^2.0.1" 1987 | } 1988 | }, 1989 | "async": { 1990 | "version": "3.2.4", 1991 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", 1992 | "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", 1993 | "dev": true 1994 | }, 1995 | "balanced-match": { 1996 | "version": "1.0.2", 1997 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1998 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1999 | "dev": true 2000 | }, 2001 | "boolbase": { 2002 | "version": "1.0.0", 2003 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 2004 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", 2005 | "dev": true 2006 | }, 2007 | "brace-expansion": { 2008 | "version": "1.1.11", 2009 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2010 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2011 | "dev": true, 2012 | "requires": { 2013 | "balanced-match": "^1.0.0", 2014 | "concat-map": "0.0.1" 2015 | } 2016 | }, 2017 | "braces": { 2018 | "version": "3.0.2", 2019 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 2020 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 2021 | "dev": true, 2022 | "requires": { 2023 | "fill-range": "^7.0.1" 2024 | } 2025 | }, 2026 | "buffer-from": { 2027 | "version": "1.1.2", 2028 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 2029 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 2030 | "dev": true 2031 | }, 2032 | "camel-case": { 2033 | "version": "4.1.2", 2034 | "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", 2035 | "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", 2036 | "dev": true, 2037 | "requires": { 2038 | "pascal-case": "^3.1.2", 2039 | "tslib": "^2.0.3" 2040 | } 2041 | }, 2042 | "chalk": { 2043 | "version": "4.1.2", 2044 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2045 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2046 | "dev": true, 2047 | "requires": { 2048 | "ansi-styles": "^4.1.0", 2049 | "supports-color": "^7.1.0" 2050 | } 2051 | }, 2052 | "clean-css": { 2053 | "version": "5.3.1", 2054 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", 2055 | "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", 2056 | "dev": true, 2057 | "requires": { 2058 | "source-map": "~0.6.0" 2059 | } 2060 | }, 2061 | "color-convert": { 2062 | "version": "2.0.1", 2063 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2064 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2065 | "dev": true, 2066 | "requires": { 2067 | "color-name": "~1.1.4" 2068 | } 2069 | }, 2070 | "color-name": { 2071 | "version": "1.1.4", 2072 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2073 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2074 | "dev": true 2075 | }, 2076 | "colorette": { 2077 | "version": "2.0.19", 2078 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", 2079 | "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", 2080 | "dev": true 2081 | }, 2082 | "concat-map": { 2083 | "version": "0.0.1", 2084 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2085 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 2086 | "dev": true 2087 | }, 2088 | "connect-history-api-fallback": { 2089 | "version": "1.6.0", 2090 | "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", 2091 | "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", 2092 | "dev": true 2093 | }, 2094 | "consola": { 2095 | "version": "2.15.3", 2096 | "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", 2097 | "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", 2098 | "dev": true 2099 | }, 2100 | "copy-anything": { 2101 | "version": "2.0.6", 2102 | "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", 2103 | "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", 2104 | "dev": true, 2105 | "requires": { 2106 | "is-what": "^3.14.1" 2107 | } 2108 | }, 2109 | "css-what": { 2110 | "version": "6.1.0", 2111 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", 2112 | "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", 2113 | "dev": true 2114 | }, 2115 | "debug": { 2116 | "version": "3.2.7", 2117 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 2118 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 2119 | "dev": true, 2120 | "optional": true, 2121 | "requires": { 2122 | "ms": "^2.1.1" 2123 | } 2124 | }, 2125 | "domelementtype": { 2126 | "version": "2.3.0", 2127 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 2128 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", 2129 | "dev": true 2130 | }, 2131 | "dot-case": { 2132 | "version": "3.0.4", 2133 | "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", 2134 | "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", 2135 | "dev": true, 2136 | "requires": { 2137 | "no-case": "^3.0.4", 2138 | "tslib": "^2.0.3" 2139 | } 2140 | }, 2141 | "dotenv": { 2142 | "version": "16.0.3", 2143 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", 2144 | "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", 2145 | "dev": true 2146 | }, 2147 | "dotenv-expand": { 2148 | "version": "8.0.3", 2149 | "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-8.0.3.tgz", 2150 | "integrity": "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==", 2151 | "dev": true 2152 | }, 2153 | "ejs": { 2154 | "version": "3.1.8", 2155 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", 2156 | "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", 2157 | "dev": true, 2158 | "requires": { 2159 | "jake": "^10.8.5" 2160 | } 2161 | }, 2162 | "errno": { 2163 | "version": "0.1.8", 2164 | "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", 2165 | "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", 2166 | "dev": true, 2167 | "optional": true, 2168 | "requires": { 2169 | "prr": "~1.0.1" 2170 | } 2171 | }, 2172 | "esbuild": { 2173 | "version": "0.16.16", 2174 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.16.tgz", 2175 | "integrity": "sha512-24JyKq10KXM5EBIgPotYIJ2fInNWVVqflv3gicIyQqfmUqi4HvDW1VR790cBgLJHCl96Syy7lhoz7tLFcmuRmg==", 2176 | "dev": true, 2177 | "requires": { 2178 | "@esbuild/android-arm": "0.16.16", 2179 | "@esbuild/android-arm64": "0.16.16", 2180 | "@esbuild/android-x64": "0.16.16", 2181 | "@esbuild/darwin-arm64": "0.16.16", 2182 | "@esbuild/darwin-x64": "0.16.16", 2183 | "@esbuild/freebsd-arm64": "0.16.16", 2184 | "@esbuild/freebsd-x64": "0.16.16", 2185 | "@esbuild/linux-arm": "0.16.16", 2186 | "@esbuild/linux-arm64": "0.16.16", 2187 | "@esbuild/linux-ia32": "0.16.16", 2188 | "@esbuild/linux-loong64": "0.16.16", 2189 | "@esbuild/linux-mips64el": "0.16.16", 2190 | "@esbuild/linux-ppc64": "0.16.16", 2191 | "@esbuild/linux-riscv64": "0.16.16", 2192 | "@esbuild/linux-s390x": "0.16.16", 2193 | "@esbuild/linux-x64": "0.16.16", 2194 | "@esbuild/netbsd-x64": "0.16.16", 2195 | "@esbuild/openbsd-x64": "0.16.16", 2196 | "@esbuild/sunos-x64": "0.16.16", 2197 | "@esbuild/win32-arm64": "0.16.16", 2198 | "@esbuild/win32-ia32": "0.16.16", 2199 | "@esbuild/win32-x64": "0.16.16" 2200 | } 2201 | }, 2202 | "estree-walker": { 2203 | "version": "2.0.2", 2204 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 2205 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 2206 | "dev": true 2207 | }, 2208 | "fast-glob": { 2209 | "version": "3.2.12", 2210 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", 2211 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", 2212 | "dev": true, 2213 | "requires": { 2214 | "@nodelib/fs.stat": "^2.0.2", 2215 | "@nodelib/fs.walk": "^1.2.3", 2216 | "glob-parent": "^5.1.2", 2217 | "merge2": "^1.3.0", 2218 | "micromatch": "^4.0.4" 2219 | } 2220 | }, 2221 | "fastq": { 2222 | "version": "1.15.0", 2223 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 2224 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 2225 | "dev": true, 2226 | "requires": { 2227 | "reusify": "^1.0.4" 2228 | } 2229 | }, 2230 | "filelist": { 2231 | "version": "1.0.4", 2232 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", 2233 | "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", 2234 | "dev": true, 2235 | "requires": { 2236 | "minimatch": "^5.0.1" 2237 | }, 2238 | "dependencies": { 2239 | "brace-expansion": { 2240 | "version": "2.0.1", 2241 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 2242 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 2243 | "dev": true, 2244 | "requires": { 2245 | "balanced-match": "^1.0.0" 2246 | } 2247 | }, 2248 | "minimatch": { 2249 | "version": "5.1.2", 2250 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", 2251 | "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", 2252 | "dev": true, 2253 | "requires": { 2254 | "brace-expansion": "^2.0.1" 2255 | } 2256 | } 2257 | } 2258 | }, 2259 | "fill-range": { 2260 | "version": "7.0.1", 2261 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 2262 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 2263 | "dev": true, 2264 | "requires": { 2265 | "to-regex-range": "^5.0.1" 2266 | } 2267 | }, 2268 | "fs-extra": { 2269 | "version": "10.1.0", 2270 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", 2271 | "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", 2272 | "dev": true, 2273 | "requires": { 2274 | "graceful-fs": "^4.2.0", 2275 | "jsonfile": "^6.0.1", 2276 | "universalify": "^2.0.0" 2277 | } 2278 | }, 2279 | "fsevents": { 2280 | "version": "2.3.2", 2281 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 2282 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 2283 | "dev": true, 2284 | "optional": true 2285 | }, 2286 | "function-bind": { 2287 | "version": "1.1.1", 2288 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2289 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 2290 | "dev": true 2291 | }, 2292 | "glob-parent": { 2293 | "version": "5.1.2", 2294 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2295 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2296 | "dev": true, 2297 | "requires": { 2298 | "is-glob": "^4.0.1" 2299 | } 2300 | }, 2301 | "graceful-fs": { 2302 | "version": "4.2.10", 2303 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 2304 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 2305 | "dev": true 2306 | }, 2307 | "has": { 2308 | "version": "1.0.3", 2309 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2310 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2311 | "dev": true, 2312 | "requires": { 2313 | "function-bind": "^1.1.1" 2314 | } 2315 | }, 2316 | "has-flag": { 2317 | "version": "4.0.0", 2318 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2319 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2320 | "dev": true 2321 | }, 2322 | "he": { 2323 | "version": "1.2.0", 2324 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 2325 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 2326 | "dev": true 2327 | }, 2328 | "html-minifier-terser": { 2329 | "version": "6.1.0", 2330 | "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", 2331 | "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", 2332 | "dev": true, 2333 | "requires": { 2334 | "camel-case": "^4.1.2", 2335 | "clean-css": "^5.2.2", 2336 | "commander": "^8.3.0", 2337 | "he": "^1.2.0", 2338 | "param-case": "^3.0.4", 2339 | "relateurl": "^0.2.7", 2340 | "terser": "^5.10.0" 2341 | }, 2342 | "dependencies": { 2343 | "commander": { 2344 | "version": "8.3.0", 2345 | "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", 2346 | "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", 2347 | "dev": true 2348 | } 2349 | } 2350 | }, 2351 | "iconv-lite": { 2352 | "version": "0.6.3", 2353 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 2354 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 2355 | "dev": true, 2356 | "optional": true, 2357 | "requires": { 2358 | "safer-buffer": ">= 2.1.2 < 3.0.0" 2359 | } 2360 | }, 2361 | "image-size": { 2362 | "version": "0.5.5", 2363 | "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", 2364 | "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", 2365 | "dev": true, 2366 | "optional": true 2367 | }, 2368 | "is-core-module": { 2369 | "version": "2.11.0", 2370 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 2371 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 2372 | "dev": true, 2373 | "requires": { 2374 | "has": "^1.0.3" 2375 | } 2376 | }, 2377 | "is-extglob": { 2378 | "version": "2.1.1", 2379 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2380 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2381 | "dev": true 2382 | }, 2383 | "is-glob": { 2384 | "version": "4.0.3", 2385 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2386 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2387 | "dev": true, 2388 | "requires": { 2389 | "is-extglob": "^2.1.1" 2390 | } 2391 | }, 2392 | "is-number": { 2393 | "version": "7.0.0", 2394 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2395 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2396 | "dev": true 2397 | }, 2398 | "is-what": { 2399 | "version": "3.14.1", 2400 | "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", 2401 | "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", 2402 | "dev": true 2403 | }, 2404 | "jake": { 2405 | "version": "10.8.5", 2406 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", 2407 | "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", 2408 | "dev": true, 2409 | "requires": { 2410 | "async": "^3.2.3", 2411 | "chalk": "^4.0.2", 2412 | "filelist": "^1.0.1", 2413 | "minimatch": "^3.0.4" 2414 | } 2415 | }, 2416 | "jsonfile": { 2417 | "version": "6.1.0", 2418 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 2419 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 2420 | "dev": true, 2421 | "requires": { 2422 | "graceful-fs": "^4.1.6", 2423 | "universalify": "^2.0.0" 2424 | } 2425 | }, 2426 | "less": { 2427 | "version": "4.1.3", 2428 | "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", 2429 | "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", 2430 | "dev": true, 2431 | "requires": { 2432 | "copy-anything": "^2.0.1", 2433 | "errno": "^0.1.1", 2434 | "graceful-fs": "^4.1.2", 2435 | "image-size": "~0.5.0", 2436 | "make-dir": "^2.1.0", 2437 | "mime": "^1.4.1", 2438 | "needle": "^3.1.0", 2439 | "parse-node-version": "^1.0.1", 2440 | "source-map": "~0.6.0", 2441 | "tslib": "^2.3.0" 2442 | } 2443 | }, 2444 | "lower-case": { 2445 | "version": "2.0.2", 2446 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", 2447 | "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", 2448 | "dev": true, 2449 | "requires": { 2450 | "tslib": "^2.0.3" 2451 | } 2452 | }, 2453 | "make-dir": { 2454 | "version": "2.1.0", 2455 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", 2456 | "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", 2457 | "dev": true, 2458 | "optional": true, 2459 | "requires": { 2460 | "pify": "^4.0.1", 2461 | "semver": "^5.6.0" 2462 | } 2463 | }, 2464 | "merge2": { 2465 | "version": "1.4.1", 2466 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2467 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2468 | "dev": true 2469 | }, 2470 | "micromatch": { 2471 | "version": "4.0.5", 2472 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2473 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2474 | "dev": true, 2475 | "requires": { 2476 | "braces": "^3.0.2", 2477 | "picomatch": "^2.3.1" 2478 | } 2479 | }, 2480 | "mime": { 2481 | "version": "1.6.0", 2482 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 2483 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 2484 | "dev": true, 2485 | "optional": true 2486 | }, 2487 | "minimatch": { 2488 | "version": "3.1.2", 2489 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2490 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2491 | "dev": true, 2492 | "requires": { 2493 | "brace-expansion": "^1.1.7" 2494 | } 2495 | }, 2496 | "ms": { 2497 | "version": "2.1.3", 2498 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2499 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2500 | "dev": true, 2501 | "optional": true 2502 | }, 2503 | "nanoid": { 2504 | "version": "3.3.4", 2505 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 2506 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 2507 | "dev": true 2508 | }, 2509 | "needle": { 2510 | "version": "3.2.0", 2511 | "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", 2512 | "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", 2513 | "dev": true, 2514 | "optional": true, 2515 | "requires": { 2516 | "debug": "^3.2.6", 2517 | "iconv-lite": "^0.6.3", 2518 | "sax": "^1.2.4" 2519 | } 2520 | }, 2521 | "no-case": { 2522 | "version": "3.0.4", 2523 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", 2524 | "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", 2525 | "dev": true, 2526 | "requires": { 2527 | "lower-case": "^2.0.2", 2528 | "tslib": "^2.0.3" 2529 | } 2530 | }, 2531 | "node-html-parser": { 2532 | "version": "5.4.2", 2533 | "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-5.4.2.tgz", 2534 | "integrity": "sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==", 2535 | "dev": true, 2536 | "requires": { 2537 | "css-select": "^4.2.1", 2538 | "he": "1.2.0" 2539 | }, 2540 | "dependencies": { 2541 | "css-select": { 2542 | "version": "4.3.0", 2543 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", 2544 | "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", 2545 | "dev": true, 2546 | "requires": { 2547 | "boolbase": "^1.0.0", 2548 | "css-what": "^6.0.1", 2549 | "domhandler": "^4.3.1", 2550 | "domutils": "^2.8.0", 2551 | "nth-check": "^2.0.1" 2552 | } 2553 | }, 2554 | "dom-serializer": { 2555 | "version": "1.4.1", 2556 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", 2557 | "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", 2558 | "dev": true, 2559 | "requires": { 2560 | "domelementtype": "^2.0.1", 2561 | "domhandler": "^4.2.0", 2562 | "entities": "^2.0.0" 2563 | } 2564 | }, 2565 | "domhandler": { 2566 | "version": "4.3.1", 2567 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", 2568 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", 2569 | "dev": true, 2570 | "requires": { 2571 | "domelementtype": "^2.2.0" 2572 | } 2573 | }, 2574 | "domutils": { 2575 | "version": "2.8.0", 2576 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 2577 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 2578 | "dev": true, 2579 | "requires": { 2580 | "dom-serializer": "^1.0.1", 2581 | "domelementtype": "^2.2.0", 2582 | "domhandler": "^4.2.0" 2583 | } 2584 | }, 2585 | "entities": { 2586 | "version": "2.2.0", 2587 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 2588 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 2589 | "dev": true 2590 | } 2591 | } 2592 | }, 2593 | "nth-check": { 2594 | "version": "2.1.1", 2595 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", 2596 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", 2597 | "dev": true, 2598 | "requires": { 2599 | "boolbase": "^1.0.0" 2600 | } 2601 | }, 2602 | "param-case": { 2603 | "version": "3.0.4", 2604 | "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", 2605 | "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", 2606 | "dev": true, 2607 | "requires": { 2608 | "dot-case": "^3.0.4", 2609 | "tslib": "^2.0.3" 2610 | } 2611 | }, 2612 | "parse-node-version": { 2613 | "version": "1.0.1", 2614 | "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", 2615 | "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", 2616 | "dev": true 2617 | }, 2618 | "pascal-case": { 2619 | "version": "3.1.2", 2620 | "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", 2621 | "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", 2622 | "dev": true, 2623 | "requires": { 2624 | "no-case": "^3.0.4", 2625 | "tslib": "^2.0.3" 2626 | } 2627 | }, 2628 | "path-parse": { 2629 | "version": "1.0.7", 2630 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2631 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2632 | "dev": true 2633 | }, 2634 | "pathe": { 2635 | "version": "0.2.0", 2636 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.2.0.tgz", 2637 | "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", 2638 | "dev": true 2639 | }, 2640 | "picocolors": { 2641 | "version": "1.0.0", 2642 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 2643 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 2644 | "dev": true 2645 | }, 2646 | "picomatch": { 2647 | "version": "2.3.1", 2648 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2649 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2650 | "dev": true 2651 | }, 2652 | "pify": { 2653 | "version": "4.0.1", 2654 | "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", 2655 | "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", 2656 | "dev": true, 2657 | "optional": true 2658 | }, 2659 | "postcss": { 2660 | "version": "8.4.21", 2661 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", 2662 | "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", 2663 | "dev": true, 2664 | "requires": { 2665 | "nanoid": "^3.3.4", 2666 | "picocolors": "^1.0.0", 2667 | "source-map-js": "^1.0.2" 2668 | } 2669 | }, 2670 | "prettier": { 2671 | "version": "2.8.2", 2672 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.2.tgz", 2673 | "integrity": "sha512-BtRV9BcncDyI2tsuS19zzhzoxD8Dh8LiCx7j7tHzrkz8GFXAexeWFdi22mjE1d16dftH2qNaytVxqiRTGlMfpw==", 2674 | "dev": true 2675 | }, 2676 | "prr": { 2677 | "version": "1.0.1", 2678 | "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", 2679 | "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", 2680 | "dev": true, 2681 | "optional": true 2682 | }, 2683 | "queue-microtask": { 2684 | "version": "1.2.3", 2685 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2686 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2687 | "dev": true 2688 | }, 2689 | "relateurl": { 2690 | "version": "0.2.7", 2691 | "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", 2692 | "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", 2693 | "dev": true 2694 | }, 2695 | "resolve": { 2696 | "version": "1.22.1", 2697 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 2698 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 2699 | "dev": true, 2700 | "requires": { 2701 | "is-core-module": "^2.9.0", 2702 | "path-parse": "^1.0.7", 2703 | "supports-preserve-symlinks-flag": "^1.0.0" 2704 | } 2705 | }, 2706 | "reusify": { 2707 | "version": "1.0.4", 2708 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2709 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2710 | "dev": true 2711 | }, 2712 | "rollup": { 2713 | "version": "3.9.1", 2714 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz", 2715 | "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==", 2716 | "dev": true, 2717 | "requires": { 2718 | "fsevents": "~2.3.2" 2719 | } 2720 | }, 2721 | "run-parallel": { 2722 | "version": "1.2.0", 2723 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2724 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2725 | "dev": true, 2726 | "requires": { 2727 | "queue-microtask": "^1.2.2" 2728 | } 2729 | }, 2730 | "safer-buffer": { 2731 | "version": "2.1.2", 2732 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2733 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2734 | "dev": true, 2735 | "optional": true 2736 | }, 2737 | "sax": { 2738 | "version": "1.2.4", 2739 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 2740 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", 2741 | "dev": true, 2742 | "optional": true 2743 | }, 2744 | "semver": { 2745 | "version": "5.7.1", 2746 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2747 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 2748 | "dev": true, 2749 | "optional": true 2750 | }, 2751 | "source-map": { 2752 | "version": "0.6.1", 2753 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2754 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2755 | "dev": true 2756 | }, 2757 | "source-map-js": { 2758 | "version": "1.0.2", 2759 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 2760 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 2761 | "dev": true 2762 | }, 2763 | "source-map-support": { 2764 | "version": "0.5.21", 2765 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 2766 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 2767 | "dev": true, 2768 | "requires": { 2769 | "buffer-from": "^1.0.0", 2770 | "source-map": "^0.6.0" 2771 | } 2772 | }, 2773 | "supports-color": { 2774 | "version": "7.2.0", 2775 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2776 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2777 | "dev": true, 2778 | "requires": { 2779 | "has-flag": "^4.0.0" 2780 | } 2781 | }, 2782 | "supports-preserve-symlinks-flag": { 2783 | "version": "1.0.0", 2784 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2785 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2786 | "dev": true 2787 | }, 2788 | "terser": { 2789 | "version": "5.16.1", 2790 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", 2791 | "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", 2792 | "dev": true, 2793 | "requires": { 2794 | "@jridgewell/source-map": "^0.3.2", 2795 | "acorn": "^8.5.0", 2796 | "commander": "^2.20.0", 2797 | "source-map-support": "~0.5.20" 2798 | }, 2799 | "dependencies": { 2800 | "commander": { 2801 | "version": "2.20.3", 2802 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 2803 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 2804 | "dev": true 2805 | } 2806 | } 2807 | }, 2808 | "to-regex-range": { 2809 | "version": "5.0.1", 2810 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2811 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2812 | "dev": true, 2813 | "requires": { 2814 | "is-number": "^7.0.0" 2815 | } 2816 | }, 2817 | "tslib": { 2818 | "version": "2.4.1", 2819 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 2820 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", 2821 | "dev": true 2822 | }, 2823 | "typescript": { 2824 | "version": "4.9.4", 2825 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", 2826 | "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", 2827 | "dev": true 2828 | }, 2829 | "universalify": { 2830 | "version": "2.0.0", 2831 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 2832 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 2833 | "dev": true 2834 | }, 2835 | "vite": { 2836 | "version": "4.0.4", 2837 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", 2838 | "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", 2839 | "dev": true, 2840 | "requires": { 2841 | "esbuild": "^0.16.3", 2842 | "fsevents": "~2.3.2", 2843 | "postcss": "^8.4.20", 2844 | "resolve": "^1.22.1", 2845 | "rollup": "^3.7.0" 2846 | } 2847 | }, 2848 | "vite-plugin-html": { 2849 | "version": "3.2.0", 2850 | "resolved": "https://registry.npmjs.org/vite-plugin-html/-/vite-plugin-html-3.2.0.tgz", 2851 | "integrity": "sha512-2VLCeDiHmV/BqqNn5h2V+4280KRgQzCFN47cst3WiNK848klESPQnzuC3okH5XHtgwHH/6s1Ho/YV6yIO0pgoQ==", 2852 | "dev": true, 2853 | "requires": { 2854 | "@rollup/pluginutils": "^4.2.0", 2855 | "colorette": "^2.0.16", 2856 | "connect-history-api-fallback": "^1.6.0", 2857 | "consola": "^2.15.3", 2858 | "dotenv": "^16.0.0", 2859 | "dotenv-expand": "^8.0.2", 2860 | "ejs": "^3.1.6", 2861 | "fast-glob": "^3.2.11", 2862 | "fs-extra": "^10.0.1", 2863 | "html-minifier-terser": "^6.1.0", 2864 | "node-html-parser": "^5.3.3", 2865 | "pathe": "^0.2.0" 2866 | } 2867 | }, 2868 | "vite-plugin-singlefile": { 2869 | "version": "0.13.2", 2870 | "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-0.13.2.tgz", 2871 | "integrity": "sha512-HAvrU9mxasNMn/YF0Hb9NjsWDstCWe4iLQ6IR5ppOiNMvXjcyqU3C9SDQ32xnonx3Y04JUGjD2bGiT6q0S9T8w==", 2872 | "dev": true, 2873 | "requires": { 2874 | "micromatch": "^4.0.5" 2875 | } 2876 | } 2877 | } 2878 | } 2879 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "resume", 3 | "private": true, 4 | "version": "2023", 5 | "description": "resume.congm.in", 6 | "main": "index.html", 7 | "scripts": { 8 | "start": "npm run dev", 9 | "dev": "vite", 10 | "build": "npm run prettier && tsc && vite build", 11 | "preview": "vite preview", 12 | "prettier": "prettier --write ./src" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git+ssh://git@github.com/cong-min/resume.git" 17 | }, 18 | "author": "Cong Min", 19 | "license": "cc-by-sa-4.0", 20 | "homepage": "https://resume.congm.in", 21 | "devDependencies": { 22 | "less": "^4.1.3", 23 | "prettier": "2.8.2", 24 | "typescript": "^4.9.3", 25 | "vite": "^4.0.0", 26 | "vite-plugin-html": "^3.2.0", 27 | "vite-plugin-singlefile": "^0.13.2" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /resume.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cong-min/resume/b21101f339f58e67041b5cf25e73c5cd87b36317/resume.pdf -------------------------------------------------------------------------------- /src/css/base.less: -------------------------------------------------------------------------------- 1 | // 基础样式 2 | @color-main: #00b38a; // 主色 3 | @font-family: -apple-system, BlinkMacSystemFont, PingFang SC, Microsoft YaHei, 4 | Arial Regular; // 普通字体 5 | @font-family-title: 'Lucida Grande', 'Hiragino Sans GB', 'Hiragino Sans GB W3', 6 | @font-family; // 标题字体 7 | 8 | .kill-ie, 9 | .top-bar { 10 | position: fixed; 11 | top: 0; 12 | left: 0; 13 | right: 0; 14 | z-index: 100; 15 | margin: 0; 16 | color: #555; 17 | font-size: 12px; 18 | line-height: 22px; 19 | font-weight: bold; 20 | text-align: center; 21 | background: #fff8e2; 22 | } 23 | .kill-ie { 24 | z-index: 1000; 25 | } 26 | 27 | * { 28 | box-sizing: border-box; 29 | } 30 | body { 31 | position: relative; 32 | -webkit-font-smoothing: antialiased; 33 | -webkit-text-size-adjust: none; 34 | font-family: @font-family; 35 | font-size: 15px; 36 | line-height: 1.6; 37 | color: #333; 38 | background-color: #eee; 39 | overflow: auto; 40 | display: flex; 41 | flex-direction: column; 42 | align-items: stretch; 43 | } 44 | a { 45 | text-decoration: none; 46 | transition: all 0.2s ease-in-out; 47 | } 48 | .status-bar { 49 | position: absolute; 50 | top: 32px; 51 | left: 50%; 52 | width: 1000px; 53 | transform: translateX(-50%); 54 | font-size: 12px; 55 | color: #bbb; 56 | transition: all 0.2s ease-in-out; 57 | animation: fade 1.6s; 58 | @media screen and (max-width: 1024px) { 59 | width: auto; 60 | top: auto; 61 | bottom: 38px; 62 | color: #d1d1d1; 63 | text-align: center; 64 | } 65 | .status { 66 | display: inline-flex; 67 | align-items: center; 68 | float: left; 69 | cursor: pointer; 70 | @media screen and (max-width: 1024px) { 71 | float: unset; 72 | text-align: center; 73 | } 74 | .icon { 75 | margin-right: 4px; 76 | } 77 | } 78 | .last-modified { 79 | float: right; 80 | @media screen and (max-width: 1024px) { 81 | float: unset; 82 | text-align: center; 83 | } 84 | } 85 | } 86 | .content { 87 | position: relative; 88 | width: 1024px; 89 | margin: 64px auto 32px; 90 | background-color: #fff; 91 | border-radius: 5px; 92 | box-shadow: 0 0 16px #c0c0c0; 93 | display: flex; 94 | flex-direction: column; 95 | align-items: stretch; 96 | overflow: hidden; 97 | transition: all 0.2s ease-in-out; 98 | opacity: 0; 99 | transform: translate3d(0, 48px, 0); 100 | animation: fadeUp 2s cubic-bezier(0.19, 1, 0.22, 1) forwards; 101 | @keyframes fadeUp { 102 | from { 103 | opacity: 0; 104 | transform: translate3d(0, 48px, 0); 105 | } 106 | to { 107 | opacity: 1; 108 | transform: translate3d(0, 0, 0); 109 | } 110 | } 111 | @media screen and (max-width: 1024px) { 112 | width: 100%; 113 | margin-top: 0; 114 | border-radius: 0; 115 | } 116 | } 117 | .content-hd { 118 | padding: 32px 48px 24px; 119 | color: #fff; 120 | background-color: @color-main; 121 | overflow: hidden; 122 | @media screen and (max-width: 720px) { 123 | padding: 24px; 124 | } 125 | .title { 126 | margin-bottom: 8px; 127 | border-bottom: 2px solid darken(@color-main, 2%); 128 | font-size: 48px; 129 | overflow: hidden; 130 | } 131 | .name, 132 | .job, 133 | .info, 134 | .contact { 135 | width: 50%; 136 | @media screen and (max-width: 720px) { 137 | width: 100%; 138 | text-align: center; 139 | } 140 | } 141 | .name, 142 | .info { 143 | float: left; 144 | } 145 | .job, 146 | .contact { 147 | float: right; 148 | text-align: right; 149 | } 150 | .name { 151 | height: 80px; 152 | @media screen and (max-width: 720px) { 153 | height: auto; 154 | } 155 | h1 { 156 | font-family: @font-family-title; 157 | font-weight: 500; 158 | letter-spacing: 4px; 159 | height: 100%; 160 | @media screen and (max-width: 720px) { 161 | margin-top: 16px; 162 | letter-spacing: 8px; 163 | line-height: 1.25; 164 | } 165 | small { 166 | padding-left: 8px; 167 | font-size: 24px; 168 | font-weight: 400; 169 | letter-spacing: 0; 170 | @media screen and (max-width: 720px) { 171 | display: block; 172 | padding-left: 0; 173 | padding-right: 8px; 174 | font-size: 20px; 175 | line-height: 28px; 176 | letter-spacing: 1px; 177 | } 178 | } 179 | } 180 | } 181 | .job { 182 | height: 80px; 183 | font-weight: 300; 184 | -webkit-font-smoothing: subpixel-antialiased; 185 | @media screen and (max-width: 720px) { 186 | text-align: center; 187 | } 188 | h2 { 189 | display: inline; 190 | font-size: 24px; 191 | @media screen and (max-width: 720px) { 192 | margin: 8px auto 0; 193 | padding: 16px 4px; 194 | border-top: 1px solid darken(@color-main, 2%); 195 | } 196 | small { 197 | font-size: 14px; 198 | } 199 | } 200 | } 201 | .info { 202 | padding: 4px; 203 | h2 { 204 | margin: 2px 0; 205 | font-size: 17px; 206 | line-height: 32px; 207 | } 208 | h3 { 209 | font-size: 15px; 210 | line-height: 30px; 211 | } 212 | } 213 | .contact { 214 | padding: 4px; 215 | ul { 216 | @media screen and (max-width: 720px) { 217 | margin: 16px 0 0; 218 | text-align: center; 219 | } 220 | > li { 221 | height: 24px; 222 | @media screen and (max-width: 720px) { 223 | display: inline-flex; 224 | } 225 | > a { 226 | display: inline-flex; 227 | align-items: center; 228 | font-family: @font-family-title; 229 | font-size: 14px; 230 | line-height: 24px; 231 | color: #fff; 232 | &:hover { 233 | color: #e8e8e8; 234 | } 235 | .contact-link { 236 | @media screen and (max-width: 720px) { 237 | display: none; 238 | } 239 | } 240 | .icon { 241 | margin-left: 6px; 242 | vertical-align: middle; 243 | @media screen and (max-width: 720px) { 244 | font-size: 20px; 245 | } 246 | } 247 | } 248 | } 249 | } 250 | } 251 | } 252 | .content-bd { 253 | min-height: 200px; 254 | padding: 16px 32px 32px; 255 | overflow: hidden; 256 | @media screen and (max-width: 720px) { 257 | padding: 16px 8px 32px; 258 | } 259 | .content-left, 260 | .content-right { 261 | width: 50%; 262 | @media screen and (max-width: 1024px) { 263 | width: 100%; 264 | } 265 | } 266 | .content-left { 267 | float: left; 268 | } 269 | .content-right { 270 | float: right; 271 | } 272 | section { 273 | margin: 16px 16px 24px; 274 | overflow: hidden; 275 | } 276 | .section-hd { 277 | position: relative; 278 | margin: 4px auto 10px; 279 | overflow: hidden; 280 | display: flex; 281 | align-items: center; 282 | } 283 | .section-bd { 284 | overflow: hidden; 285 | } 286 | .section-title-l, 287 | .section-title-r { 288 | flex: 1; 289 | display: inline-flex; 290 | height: 0; 291 | border-top: 1px solid #f1f1f1; 292 | vertical-align: middle; 293 | } 294 | .section-title { 295 | flex-shrink: 0; 296 | position: relative; 297 | z-index: 1; 298 | margin: 0 auto; 299 | padding: 0 32px; 300 | margin: 0 16px; 301 | border-radius: 32px; 302 | font-size: 16px; 303 | line-height: 32px; 304 | text-align: center; 305 | color: #474747; 306 | background-color: #f1f1f1; 307 | } 308 | ul.section-list { 309 | padding: 8px 0; 310 | > li:last-child { 311 | .section-content { 312 | margin-bottom: 0; 313 | } 314 | } 315 | } 316 | .item { 317 | &.item-main { 318 | .item-hd { 319 | padding: 8px 0; 320 | font-size: 16px; 321 | } 322 | .item-bd { 323 | margin-bottom: 4px; 324 | } 325 | .btn { 326 | font-size: 13px; 327 | } 328 | + .item .item-hd { 329 | padding-top: 6px; 330 | } 331 | } 332 | &.item-stage { 333 | .item-hd { 334 | padding: 4px 0 2px; 335 | color: #555; 336 | .item-time, 337 | .item-more { 338 | font-size: 14px; 339 | } 340 | } 341 | } 342 | &:not(.item-stage) { 343 | .item-bd { 344 | margin-bottom: 4px; 345 | } 346 | } 347 | &:not(.item-main) + .item-stage { 348 | padding-top: 8px; 349 | } 350 | + .item-main { 351 | padding-top: 8px; 352 | } 353 | } 354 | .item-hd { 355 | position: relative; 356 | padding: 10px 0 8px; 357 | font-weight: 500; 358 | font-size: 15px; 359 | line-height: 24px; 360 | overflow: hidden; 361 | color: #222; 362 | .icon { 363 | vertical-align: -3px; 364 | color: @color-main; 365 | margin-right: 2px; 366 | } 367 | .item-time { 368 | float: left; 369 | display: inline-flex; 370 | font-size: 15px; 371 | width: 150px; 372 | @media screen and (max-width: 720px) { 373 | width: 100%; 374 | margin-bottom: 4px; 375 | } 376 | } 377 | .item-more { 378 | float: right; 379 | margin-left: 8px; 380 | &:not(.btn) { 381 | height: 24px; 382 | line-height: 24px; 383 | } 384 | strong { 385 | font-size: 14px; 386 | margin-left: 4px; 387 | margin-right: 0; 388 | } 389 | @media screen and (max-width: 720px) { 390 | &.btn { 391 | position: absolute; 392 | right: 0; 393 | top: 10px; 394 | } 395 | } 396 | } 397 | .item-name { 398 | float: left; 399 | display: inline; 400 | } 401 | } 402 | .section-content { 403 | line-height: 28px; 404 | text-align: justify; 405 | word-break: break-all; 406 | margin-bottom: 3px; 407 | .icon-dot { 408 | vertical-align: -3px; 409 | color: @color-main; 410 | margin-right: 2px; 411 | } 412 | &.sub-content { 413 | margin-top: -1px; 414 | padding-left: 4px; 415 | .icon-dot { 416 | width: 12px; 417 | height: 12px; 418 | color: #999; 419 | margin-right: -3px; 420 | } 421 | } 422 | } 423 | em { 424 | font-size: 14px; 425 | line-height: 16px; 426 | border: 1px solid #e7e7e7; 427 | border-radius: 3px; 428 | color: #333; 429 | margin: 0 4px; 430 | padding: 1px 4px; 431 | background-color: #f7f7f7; 432 | } 433 | strong { 434 | font-size: 14px; 435 | line-height: 16px; 436 | font-weight: 500; 437 | color: #474747; 438 | margin: 0 4px; 439 | padding: 0 4px; 440 | border-bottom: 1px solid #eaeaea; 441 | box-shadow: inset 0 -8px #eaeaea; 442 | } 443 | } 444 | .btn { 445 | display: inline-flex; 446 | padding: 0 4px; 447 | border: 1px solid @color-main; 448 | border-radius: 3px; 449 | font-family: Menlo, @font-family; 450 | height: 20px; 451 | font-size: 12px; 452 | line-height: 18px; 453 | margin: 2px 0; 454 | text-align: center; 455 | color: @color-main; 456 | &:hover { 457 | color: #fff; 458 | background-color: @color-main; 459 | } 460 | } 461 | .pdf { 462 | display: inline-flex; 463 | align-items: center; 464 | position: fixed; 465 | z-index: 10; 466 | bottom: 6px; 467 | left: 50%; 468 | margin-left: 520px; 469 | padding: 0 8px; 470 | border-radius: 3px; 471 | font-size: 14px; 472 | line-height: 24px; 473 | color: #fff; 474 | background-color: @color-main; 475 | transition: all 0.2s ease-in-out; 476 | animation: fade 1.6s; 477 | @media screen and (max-width: 1246px) { 478 | left: auto; 479 | right: 8px; 480 | margin-left: 0; 481 | } 482 | .icon { 483 | margin-right: 4px; 484 | } 485 | } 486 | footer { 487 | text-align: center; 488 | transition: all 0.2s ease-in-out; 489 | animation: fade 1.6s; 490 | &.github-footer { 491 | display: flex; 492 | flex-direction: column; 493 | align-items: center; 494 | justify-content: center; 495 | margin-top: 8px; 496 | margin-bottom: 8px; 497 | @media screen and (max-width: 1024px) { 498 | margin-bottom: 48px; 499 | } 500 | } 501 | &.print-footer { 502 | display: none; 503 | } 504 | &.license-footer { 505 | display: flex; 506 | flex-direction: column; 507 | align-items: center; 508 | justify-content: center; 509 | margin-top: 0; 510 | margin-bottom: 16px; 511 | font-size: 12px; 512 | } 513 | .footer-link { 514 | display: inline; 515 | color: #d1d1d1; 516 | .icon { 517 | width: 13px; 518 | height: 13px; 519 | margin-right: 3px; 520 | vertical-align: -3px; 521 | } 522 | } 523 | } 524 | 525 | @keyframes fade { 526 | from { 527 | opacity: 0; 528 | } 529 | to { 530 | opacity: 1; 531 | } 532 | } 533 | 534 | ::-webkit-scrollbar { 535 | background-color: #f1f1f1; 536 | overflow: visible; 537 | width: 3px; 538 | height: 3px; 539 | } 540 | ::-webkit-scrollbar-thumb { 541 | background-color: rgba(0, 0, 0, 0.2); 542 | background-clip: padding-box; 543 | min-height: 15px; 544 | box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.1), 545 | inset 0 -1px 0 rgba(0, 0, 0, 0.07); 546 | } 547 | ::-webkit-scrollbar-thumb:vertical:hover { 548 | background-color: rgba(0, 0, 0, 0.3); 549 | } 550 | ::-webkit-scrollbar-thumb:vertical:active { 551 | background-color: rgba(0, 0, 0, 0.5); 552 | } 553 | ::-webkit-scrollbar-button { 554 | height: 0; 555 | width: 0; 556 | } 557 | ::-webkit-scrollbar-track { 558 | background-clip: padding-box; 559 | border: solid transparent; 560 | border-width: 0 0 0 4px; 561 | } 562 | ::-webkit-scrollbar-corner { 563 | background: transparent; 564 | } 565 | 566 | ::selection { 567 | background: #d1d1d1; 568 | } 569 | -------------------------------------------------------------------------------- /src/css/icons.less: -------------------------------------------------------------------------------- 1 | // 图标主要使用 https://feathericons.com 2 | i.icon { 3 | display: inline-flex; 4 | width: 1em; 5 | height: 1em; 6 | background: currentColor; 7 | } 8 | 9 | .mask(@val) { 10 | -webkit-mask: @val; 11 | mask: @val; 12 | } 13 | 14 | .icon-dot { 15 | .mask(url('data:image/svg+xml;utf8,') no-repeat center / contain); 16 | } 17 | .icon-home { 18 | .mask(url('data:image/svg+xml;utf8,') no-repeat center / contain); 19 | } 20 | .icon-github { 21 | .mask(url('data:image/svg+xml;utf8,') no-repeat center / contain); 22 | } 23 | .icon-phone { 24 | .mask(url('data:image/svg+xml;utf8,') no-repeat center / contain); 25 | } 26 | .icon-mail { 27 | .mask(url('data:image/svg+xml;utf8,') no-repeat center / contain); 28 | } 29 | .icon-link { 30 | .mask(url('data:image/svg+xml;utf8,') no-repeat center / contain); 31 | } 32 | .icon-download { 33 | .mask(url('data:image/svg+xml;utf8,') no-repeat center / contain); 34 | } 35 | .icon-rss { 36 | .mask(url('data:image/svg+xml;utf8,') no-repeat center / contain); 37 | } 38 | .icon-pocket { 39 | .mask(url('data:image/svg+xml;utf8,') no-repeat center / contain); 40 | } 41 | -------------------------------------------------------------------------------- /src/css/index.less: -------------------------------------------------------------------------------- 1 | @import './reset.css'; 2 | @import './icons.less'; 3 | @import './base.less'; 4 | @import './print.less'; 5 | @import './style.less'; 6 | -------------------------------------------------------------------------------- /src/css/print-page.css: -------------------------------------------------------------------------------- 1 | /* 页面大小与边距 */ 2 | @page { 3 | size: A4; 4 | margin: 48px 0 32px; 5 | } 6 | /* 第一页顶部去掉边距 */ 7 | @page :first { 8 | margin-top: 0; 9 | } 10 | -------------------------------------------------------------------------------- /src/css/print.less: -------------------------------------------------------------------------------- 1 | /** 2 | * 打印样式 3 | * 调试方式 Chrome Devtools > Menu > More Tools > Rendering -> Emulate CSS media: print. 4 | */ 5 | @import './print-page.css'; 6 | 7 | // 覆盖打印样式 8 | @media print { 9 | // 隐藏部分元素 10 | .status-bar .status, 11 | .pdf, 12 | footer.license-footer { 13 | display: none; 14 | } 15 | // 内容 16 | body { 17 | background-color: unset; 18 | } 19 | .kill-ie, 20 | .top-bar { 21 | position: absolute; 22 | } 23 | .content { 24 | margin: 0 auto; 25 | border-radius: 0; 26 | box-shadow: none; 27 | padding-bottom: 32px; 28 | .content-hd { 29 | padding-top: 40px; 30 | padding-bottom: 32px; 31 | .job { 32 | font-weight: 400; 33 | -webkit-font-smoothing: unset; 34 | opacity: 0.96; 35 | } 36 | } 37 | .content-bd section { 38 | margin-bottom: 20px; 39 | .section-hd { 40 | margin-bottom: 8px; 41 | } 42 | } 43 | } 44 | .status-bar { 45 | position: absolute; 46 | z-index: 1; 47 | width: 1024px; 48 | top: unset; 49 | bottom: 24px; 50 | text-align: left; 51 | padding: 0 48px; 52 | color: #d1d1d1; 53 | font-size: 12px; 54 | line-height: 24px; 55 | .last-modified { 56 | float: left; 57 | } 58 | } 59 | footer { 60 | position: absolute; 61 | z-index: 1; 62 | width: 1024px; 63 | bottom: 24px; 64 | left: 50%; 65 | transform: translateX(-50%); 66 | font-size: 13px; 67 | line-height: 24px; 68 | text-align: right; 69 | padding: 0 48px; 70 | &.github-footer { 71 | display: none; 72 | } 73 | &.print-footer { 74 | display: block; 75 | .footer-link { 76 | margin: 0; 77 | } 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/css/reset.css: -------------------------------------------------------------------------------- 1 | /* reset */ 2 | a, 3 | abbr, 4 | acronym, 5 | address, 6 | applet, 7 | article, 8 | aside, 9 | audio, 10 | b, 11 | big, 12 | blockquote, 13 | body, 14 | canvas, 15 | caption, 16 | center, 17 | cite, 18 | code, 19 | dd, 20 | del, 21 | details, 22 | dfn, 23 | div, 24 | dl, 25 | dt, 26 | em, 27 | embed, 28 | fieldset, 29 | figcaption, 30 | figure, 31 | footer, 32 | form, 33 | h1, 34 | h2, 35 | h3, 36 | h4, 37 | h5, 38 | h6, 39 | header, 40 | hgroup, 41 | html, 42 | i, 43 | iframe, 44 | img, 45 | ins, 46 | kbd, 47 | label, 48 | legend, 49 | li, 50 | mark, 51 | menu, 52 | nav, 53 | object, 54 | ol, 55 | output, 56 | p, 57 | pre, 58 | q, 59 | ruby, 60 | s, 61 | samp, 62 | section, 63 | small, 64 | span, 65 | strike, 66 | strong, 67 | sub, 68 | summary, 69 | sup, 70 | table, 71 | tbody, 72 | td, 73 | tfoot, 74 | th, 75 | thead, 76 | time, 77 | tr, 78 | tt, 79 | u, 80 | ul, 81 | var, 82 | video { 83 | margin: 0; 84 | padding: 0; 85 | border: 0; 86 | font: inherit; 87 | font-size: 100%; 88 | vertical-align: baseline; 89 | } 90 | 91 | html { 92 | line-height: 1; 93 | } 94 | 95 | ol, 96 | ul { 97 | list-style: none; 98 | } 99 | 100 | table { 101 | border-collapse: collapse; 102 | border-spacing: 0; 103 | } 104 | 105 | caption, 106 | td, 107 | th { 108 | text-align: left; 109 | font-weight: 400; 110 | vertical-align: middle; 111 | } 112 | 113 | blockquote, 114 | q { 115 | quotes: none; 116 | } 117 | 118 | blockquote:after, 119 | blockquote:before, 120 | q:after, 121 | q:before { 122 | content: ''; 123 | content: none; 124 | } 125 | 126 | a img { 127 | border: none; 128 | } 129 | -------------------------------------------------------------------------------- /src/css/style.less: -------------------------------------------------------------------------------- 1 | // 定制化样式 2 | #skill { 3 | .section-content { 4 | line-height: 30px; 5 | margin-bottom: 3px; 6 | } 7 | } 8 | 9 | #experience { 10 | .section-content { 11 | strong { 12 | color: #363636; 13 | } 14 | } 15 | } 16 | 17 | #practice { 18 | .item-main { 19 | .item-hd { 20 | padding-top: 6px; 21 | } 22 | ~ .item { 23 | .item-hd { 24 | padding-top: 4px; 25 | } 26 | } 27 | } 28 | .item-more.btn { 29 | float: left; 30 | font-size: 12px; 31 | margin-left: 12px; 32 | border: 1px solid #999; 33 | color: #777; 34 | &:hover { 35 | color: #fff; 36 | border: 1px solid #777; 37 | background-color: #777; 38 | } 39 | @media screen and (max-width: 720px) { 40 | position: unset; 41 | } 42 | } 43 | .item-name { 44 | float: left; 45 | } 46 | .item-time { 47 | float: right; 48 | color: #666; 49 | font-size: 14px; 50 | width: 100px; 51 | text-align: right; 52 | display: inline; 53 | } 54 | } 55 | 56 | // 打印样式 57 | @media print { 58 | #experience { 59 | .section-hd { 60 | margin-bottom: 4px; 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 简历 | 姓名 - Name 8 | 9 | 10 | 11 | 14 |

15 | 正文文本由 ChatGPT 生成,不具备真实性,仅做简历模板参考 16 |

17 |
18 |

19 | 简历模版 20 |

21 |

最后更新时间:2023年04月

22 |
23 |
24 |
25 |
26 |
27 |

姓名Name

28 |
29 |
30 |

资深前端开发工程师 / 新加坡

31 |
32 |
33 |
34 |

男 / 1991.01

35 |

本科 / 2013年毕业 · 10年工作经验

36 |

新加坡国立大学 · 计算机科学与技术

37 |
38 |
39 | 65 |
66 |
67 |
68 |
69 |
70 | 71 |

个人能力

72 | 73 |
74 |
75 |
    76 |
  • 77 |

    78 | 79 | 掌握HTML5CSS3JavaScript等前端技术,并且熟练运用ReactVueAngular等主流前端框架。有扎实的编程基础和良好的设计模式编程思想,能够封装符合面向对象编程规范的组件库和代码库。 80 |

    81 |
  • 82 |
  • 83 |

    84 | 85 | 具备深入理解前端架构设计的能力,能够通过架构设计调整应用程序结构、优化应用性能、提升应用使用体验。熟悉基础设施部署架构性能优化等方面的技术,能够制定前端技术架构方案。 86 |

    87 |
  • 88 |
  • 89 |

    90 | 91 | 具备卓越的团队领导和协作能力,善于协调沟通和技术团队的合作。能够准确分配任务和资源、确保团队成员的技术水平和质量要求、并且不断提高团队的协作效率和工作效果。 92 |

    93 |
  • 94 |
  • 95 |

    96 | 97 | 精通敏捷开发流程,能够为团队制定规范的开发流程和制定计划,有效提升开发效率和质量。熟练使用前端开发工具和技术,如 98 | WebpackGruntGulp等。 100 |

    101 |
  • 102 |
  • 103 |

    104 | 105 | 具备出色的UI/UX设计能力,能够精准的根据需求定制设计方案,设计出高质量的 106 | UI 107 | 接口和交互。熟悉设计约束条件和用户体验原则。同时,具备深入理解用户心理和特点的能力,从而创造出更好的用户体验和更具吸引力的交互效果。 108 |

    109 |
  • 110 |
  • 111 |

    112 | 113 | 保持对前端最新技术和潮流的持续探索和学习,并通过实践应用到项目开发中。研究新技术和趋势并在应用中运用,如PWA微前端WebAssembly等。在前端领域保持敏感性,对项目开发整体的前景和前沿趋势做精确的预测和思考。 114 |

    115 |
  • 116 |
117 |
118 |
119 |
120 |
121 | 122 |

工作经验

123 | 124 |
125 |
126 |
127 |
128 | 2019.04 ~ 至今 129 | 134 | 在职 135 | 136 |

新加坡银行有限公司

137 |
138 |
139 |
140 |
141 |

142 | 143 | 新加坡银行便捷金融应用项目 144 |

145 |
146 | 项目负责人 147 |
148 |
149 |
150 |

151 | 负责新加坡银行公司的便捷金融应用的开发。在项目中,负责应用程序结构设计和开发,并协调其他技术团队保证项目的上线和部署。致力于平衡时间和资源的管理,构建一个高性能、符合金融安全要求的系统。 152 |

153 |

154 | 设计和开发新加坡银行的便捷金融应用,维护和优化现有应用;实现前端应用平台的架构设计和开发;协作并与其他技术团队协调,争取较快的上线和部署;坚持对前端设计模式并不断推动前端开发流程的规格化。 155 |

156 |

157 | 应用成功上线,并获得了广大用户的好评和反馈;应用覆盖了新加坡和东南亚地区,获得了高额利润并推动公司业绩增长。 158 |

159 |
160 |
161 |
162 |
163 | 2016.02 ~ 2019.04 164 |

谷歌新加坡研发中心

165 |
166 |
167 |
168 |
169 |

170 | 171 | Google Cloud Console 172 |

173 |
174 | 前端开发 175 |
176 |
177 |
178 |

179 | 参与了前端架构的设计、开发和部署,也负责前端性能优化和安全性实践。利用ReactRedux等主流前端技术;坚持对代码执行效率、可扩展性和可维护性的优化;致力于自动化测试,将测试用例,自动执行编写自动化工具;为该项目设立前端规范流程,定期对各个开发阶段进行检查。 180 |

181 |

182 | 参与Google云端存储服务的前端开发工作,负责构建网页界面和优化用户体验;负责开发Google 183 | Maps API的前端部分,实现地图展示、标记、搜索等功能;支援Google 184 | AdSense服务团队,参与前端开发工作,涉及广告展示、点击跟踪等多方面工作。 185 |

186 |
187 |
188 |
189 |
190 | 2013.07 ~ 2016.02 191 |

新加坡晶峰科技有限公司

192 |
193 |
194 |
195 |
196 |

197 | 198 | 内部管理系统 199 |

200 |
201 | 前端开发 202 |
203 |
204 |
205 |

206 | 负责开发公司内部管理系统和客户定制系统。通过对现有代码和移动端应用进行优化,使其运行速度和效率更高,同时还负责编写系统性能测试计划,提高系统稳定性。优化并维护现有公司系统和应用;执行代码审阅和代码测试计划;与测试团队一起开展系统性能测试。 207 |

208 |
209 |
210 |
211 |
212 |
213 |
214 | 215 |

实践经历

216 | 217 |
218 |
219 |
220 |
221 |

222 | Facebook新加坡研发中心 223 |

224 | 229 | 实习 230 | 231 | 2012年暑假 232 |
233 |
234 |
235 |
236 |
237 |
238 | 246 | 251 | 259 | 260 | PDF简历 261 | 262 | 263 | 264 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import './css/index.less'; 2 | 3 | document.addEventListener('copy', (event) => { 4 | const { clipboardData } = event; 5 | const selection = document.getSelection(); 6 | if (!clipboardData || !selection) return; 7 | const msg = `${selection.toString()} 8 | 9 | License: CC-BY-SA-4.0 10 | Github: github.com/cong-min/resume 11 | `; 12 | clipboardData.setData('text/plain', msg); 13 | event.preventDefault(); 14 | }); 15 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ESNext", "DOM"], 7 | "moduleResolution": "Node", 8 | "strict": true, 9 | "resolveJsonModule": true, 10 | "isolatedModules": true, 11 | "esModuleInterop": true, 12 | "noEmit": true, 13 | "noUnusedLocals": true, 14 | "noUnusedParameters": true, 15 | "noImplicitReturns": true, 16 | "skipLibCheck": true 17 | }, 18 | "include": ["src"] 19 | } 20 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import { createHtmlPlugin } from 'vite-plugin-html'; 3 | import { viteSingleFile } from 'vite-plugin-singlefile'; 4 | 5 | // https://vitejs.dev/config/ 6 | export default defineConfig({ 7 | root: './src', 8 | build: { 9 | outDir: '..', 10 | emptyOutDir: false, 11 | }, 12 | plugins: [ 13 | createHtmlPlugin({ 14 | minify: true, 15 | }), 16 | viteSingleFile({ 17 | removeViteModuleLoader: true, 18 | }), 19 | ], 20 | }); 21 | --------------------------------------------------------------------------------