├── .gitignore ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── config.toml ├── content ├── 2014 │ ├── 2014-05-22_comment-tracking-system │ │ └── index.md │ ├── 2014-05-22_honor-point-updates │ │ └── index.md │ ├── 2014-05-22_solutions-tag-voting │ │ └── index.md │ ├── 2014-05-26_kata-are-no-longer-fully-locked │ │ └── index.md │ ├── 2014-07-23_docker │ │ └── index.md │ ├── 2014-07-23_kata-contributor │ │ └── index.md │ ├── 2014-09-11_sneak-peak-kumite │ │ └── index.md │ ├── 2014-11-10_the-codewars-team-is-growing │ │ └── index.md │ └── _index.md ├── 2016 │ ├── 2016-01-06_announcing-the-codewars-codex │ │ └── index.md │ ├── 2016-05-19_codewars-runner-now-open-source │ │ └── index.md │ ├── 2016-05-24_new-language-updates │ │ └── index.md │ ├── 2016-07-16_php-and-dart │ │ └── index.md │ ├── 2016-10-20_introducing-sql │ │ ├── index.md │ │ └── sql-results.png │ ├── 2016-10-26_sql-updates │ │ ├── charts.png │ │ ├── expected-results.png │ │ ├── index.md │ │ └── test-output.png │ ├── 2016-11-22_honor-corrections │ │ └── index.md │ ├── 2016-12-05_introducing-codewars-red │ │ ├── head-to-head.png │ │ ├── index.md │ │ ├── language-stats.png │ │ ├── red-banner.png │ │ ├── solution-upvotes.png │ │ └── streaks.png │ └── _index.md ├── 2017 │ ├── 2017-01-26_honor-and-leaderboard-updates │ │ └── index.md │ ├── 2017-08-21_smarter-markdown │ │ └── index.md │ ├── 2017-10-20_new-languages-and-updated-beta-process │ │ └── index.md │ └── _index.md ├── 2018 │ ├── 2018-04-16_next-gen-code-execution-engine │ │ ├── duplicate-warning.png │ │ ├── index.md │ │ ├── new-languages-dark.png │ │ ├── new-languages-light.png │ │ └── top.png │ └── _index.md ├── 2019 │ ├── 2019-03-19_new-languages │ │ └── index.md │ └── _index.md ├── 2021 │ ├── 2021-01-21_updates-from-the-past-year │ │ └── index.md │ └── _index.md └── _index.md ├── netlify.toml ├── package-lock.json ├── package.json ├── postcss.config.js ├── static ├── favicon.ico └── logo.png ├── styles.css ├── tailwind.config.js └── templates ├── 404.html ├── anchor-link.html ├── base.html ├── icons.html ├── index.html ├── macros.html ├── page.html ├── rss.xml ├── section.html ├── shortcodes ├── airtable.html ├── container.html ├── details.html └── figure.html └── tags ├── list.html └── single.html /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | public/ 3 | # Generated by PostCSS 4 | static/styles.css 5 | # Generated by resize_image function 6 | static/processed_images/ 7 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.associations": { 3 | "*.html": "tera" 4 | }, 5 | "[tera]": { 6 | "editor.formatOnSave": false 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 kazk 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The Codewars Blog 2 | 3 | Blog for Codewars with [Zola](https://www.getzola.org/) + [TailwindCSS](https://tailwindcss.com/). 4 | 5 | ## Contributing Content 6 | 7 | Contributions are welcomed! 8 | 9 | To fix any issues you found, simply edit the Markdown files under `content/` and open pull requests. 10 | 11 | If you'd like to write about Codewars and publish here, please open an issue about it first. 12 | 13 | ## Developing 14 | 15 | ### Installing Dependencies 16 | 17 | You'll need `zola` and `node` installed: 18 | 19 | - `zola` executable (a single binary, see [how to install it](https://www.getzola.org/documentation/getting-started/installation/)) 20 | - `node` v12+ (see [how to install it](https://nodejs.org/en/download)) 21 | 22 | Then run `npm install`. 23 | 24 | ### Commands 25 | 26 | - `npm run dev` to start a local server that reloads automatically on file change. Works by running `zola serve` and `postcss --watch` concurrently. CSS changes rarely thanks to Tailwind and Zola is extremely fast, so each build finishes in milliseconds! 27 | - `npm run build` to build the site. 28 | 29 | ### Directory Structure 30 | 31 | ```text 32 | ├── content/ <- Markdown files 33 | ├── public/ <- generated site 34 | ├── static/ <- static assets to be copied to `public/` 35 | ├── templates/ <- Tera templates 36 | ├── config.toml <- Zora config 37 | ├── package.json 38 | ├── postcss.config.js 39 | ├── styles.css <- source of `static/styles.css` (processed by PostCSS) 40 | └── tailwind.config.js 41 | ``` 42 | 43 | ## Shortcodes 44 | 45 | Zola's [shortcodes] allow easily inject HTML in Markdown and reduce repetition. We curently have the following custom shortcodes defined: 46 | 47 | - `airtable(id: string, color?: string = "gray")` [embeds Airtable base][airtable-embed] with `id` with optional `color` for `backgroundColor`. 48 | - `container(type: note|tip|info|warning|danger, title?: string)` wraps `body` in a styled container `
` with icon, similar to [gridsome-remark-container]. `title` defaults to `type`. 49 | - `details(summary: string)` wraps `body` in `
` with ``. 50 | - `figure(src: string, alt?: string, themed?: bool = false)` produces centered responsive image inside `
` with `alt` in `
` if provided. `src` is a co-located asset and relative to the page or section. If `themed` is true, `light`/`dark` image variants are used. `src` is a file name without `-light`/`-dark` suffix. For example, `figure(src='foo.png', themed=true)` requires `foo-light.png` and `foo-dark.png`. 51 | 52 | ## TODO 53 | 54 | - [ ] Use feeds to show recent articles on the Codewars dashboard 55 | - [ ] Show short summary in listing 56 | - [ ] Featured articles 57 | - [ ] Categorize and provide navigation 58 | - [ ] Authors 59 | - [ ] Improve tagging 60 | - [ ] Archiving old articles 61 | - [ ] Add "Edit on GitHub" link 62 | 63 | [shortcodes]: https://www.getzola.org/documentation/content/shortcodes/ 64 | [gridsome-remark-container]: https://gridsome.org/plugins/gridsome-plugin-remark-container 65 | [airtable-embed]: https://support.airtable.com/hc/en-us/articles/217846478-Embedding-a-view-or-base 66 | -------------------------------------------------------------------------------- /config.toml: -------------------------------------------------------------------------------- 1 | base_url = "https://blog.codewars.com" 2 | title = "The Codewars Blog" 3 | description = "" 4 | default_language = "en" 5 | 6 | compile_sass = false 7 | build_search_index = false 8 | generate_feed = true 9 | feed_filename = "rss.xml" 10 | 11 | taxonomies = [ 12 | { name = "tags", paginate_by = 5, feed = true }, 13 | ] 14 | 15 | [markdown] 16 | highlight_code = true 17 | highlight_theme = "one-dark" 18 | 19 | [extra] 20 | -------------------------------------------------------------------------------- /content/2014/2014-05-22_comment-tracking-system/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: | 3 | The comments system now includes a tracking system to handle issues, questions, and suggestions. 4 | When commenting you have the option to tag the comment so it gets addressed. 5 | taxonomies: 6 | tags: [] 7 | title: Comment Tracking System 8 | --- 9 | 10 | The comments system now includes a tracking system to handle issues, questions, and suggestions. When commenting you have the option to tag the comment so it gets addressed. 11 | 12 | **Issues**: This covers any problems with the kata that need to be fixed. It can be an unclear description, missing test cases, or faulty code. When created this tag knows to notify the author immediately so that the fix can be made. During beta this is critical to the approval process. If the kata's already approved issues will be flags to moderators that a kata needs to be addressed. Once an author or moderator has fixed a specific issue, they then can mark it complete so that the community know it's been resolved. 13 | 14 | **Questions**: This tag is for any questions that users may have while completing the kata. It can be used to get help or advice on a specific part of the kata, as well as to overcome difficult areas. Through this tag questions are sent to the community so they can mentor and provide guidance. After the question has been suffiently responded it can then be marked as answered. 15 | 16 | **Suggestions**: Oftentimes users have ideas and feedback on how to further improve a kata, and expand upon the lesson being taught. These constructive advice often provides for more robust challenges, that provide a better experience. These suggestions will stay open for others to vote on and discuss the merits of until a author/moderator decides it should be implemented. 17 | 18 | With each of these tags, the comments systems grows into a more robust way to test and iterate on each kata. It creates a simple, unified system for experienced and advanced users, and the kata author, to discuss the content and collaborate on each kata. 19 | -------------------------------------------------------------------------------- /content/2014/2014-05-22_honor-point-updates/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: | 3 | The system is being updated. Your honor may be adjusted over the course of the next few days. 4 | taxonomies: 5 | tags: [] 6 | title: Honor Point Updates 7 | --- 8 | 9 | With the new solutions tag voting now in place, we have revamped the code that handled the honor. It turns out there was a bug that was causing some honor to not be earned. 10 | 11 | Over the course of the next few days you may notice that your honor gets adjusted. For most of you, your honor will go up. Our process for updating the honor is a bit slow as we want to be very thorough and clean up some data, so please be patient! 12 | -------------------------------------------------------------------------------- /content/2014/2014-05-22_solutions-tag-voting/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: | 3 | We just launched "tag voting" on kata solutions - now you can tag solutions for each kata as "best practices" or "clever". 4 | taxonomies: 5 | tags: [] 6 | title: Solutions Tag Voting 7 | --- 8 | 9 | We just launched **tagged voting on kata solutions** - now you can mark your favorite solutions for each kata as "best practices" or "clever." 10 | 11 | **To ensure the best solutions for each kata float to the top**, we've separated out the voting to focus on specific types of solutions. 12 | 13 | **Best Practices** are the solutions that you would want to see in your own project. They are readable, follow best practices, and create easily maintainable code. If you were diving into a codebase for the first time, these solutions would be your best friend. 14 | 15 | **Clever** solutions cover a range of interesting and unique approaches to the kata. These don't have to be practical, though they deserve commendation for creativity. This could be code that uses awesome ASCII art, codegolfs the solution down to a few characters, or solves it in a way no one else thought of. 16 | 17 | **This feature is to empower the community to decide which solution is the best**, and not just the shortest. As the list of completed solutions grows larger, and quality range varies, we want you to use the criteria that matters the most to you. With this new system when you complete a kata you will see code you like the most. 18 | -------------------------------------------------------------------------------- /content/2014/2014-05-26_kata-are-no-longer-fully-locked/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: | 3 | We have updated how kata become locked once it has been completed 500+ times. 4 | taxonomies: 5 | tags: [] 6 | title: Kata are no longer fully locked once they have a large number of solutions. 7 | --- 8 | 9 | Previously a kata would become locked once 500+ successful solutions had been submitted. This was done to try to minimize authors from making changes that would invalidate a large number of solutions on popular kata. 10 | 11 | The new approach is to only lock the test cases from any edits. The rest of the kata remains editable so that things like typos, poorly worded instructions & missing example test cases can still be added to popular kata. 12 | 13 | ## How do you know that a kata's test cases have been locked? 14 | When you go to edit your kata, you will notice a lock icon next within the test cases tab. 15 | -------------------------------------------------------------------------------- /content/2014/2014-07-23_docker/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: | 3 | We have launched our new Docker system along with support for Python as our first expansion language. 4 | taxonomies: 5 | tags: [] 6 | title: Docker and Python 2.7 are now live! 7 | --- 8 | 9 | Many of you may have noticed recently that in your account settings there was an option to opt-in to our new Docker-based system for evaluating code. We are happy to announce that the beta testing is done and we have fully rolled out our new Docker service! 10 | 11 | This means a few things: 12 | 13 | ### Fully Sandboxed Execution Environments 14 | We used to sandbox the code at the application level. This caused us to have to limit the language capabilities. Not anymore! You have full access to the language runtime. You can now require/import any of the default libraries and write to the file system. 15 | 16 | ### Open Source 17 | The system has been completely [open-sourced](http://github.com/codewars/codewars-runner). Now its possible for anyone to contribute to the project and add support for the languages that they love. Not only can new languages be added, but new testing frameworks as well. 18 | 19 | ------ 20 | 21 | # Python support is now in beta 22 | 23 | Python has been chosen as our pilot expansion language and has just been released. We need your help to create compelling content to get the community started. As we create content and work out any kinks, we will then start to introduce additional languages. We have already received community contributions to add support for Java, Clojure, Haskell, C#, Erlang and Julia! 24 | 25 | ### Added Python to existing kata 26 | 27 | We recently rolled out the ability for users to contribute to other user's beta kata. You gain this ability once you reach 1500 honor. This is a great way to add Python to kata that are still in beta. For approved kata, we are working on system for submitting kata "translations" and plan to have that out in the up-coming weeks. 28 | 29 | ### Special Thanks 30 | We would like to give a special thanks to the following users for contributing their time to help vet and expand our Docker and language support: 31 | 32 | - [xcthulhu](http://www.codewars.com/users/xcthulhu) (Python, Java, Haskell, Clojure, Julia, Erlang) 33 | - [ssineriz](http://www.codewars.com/users/ssineriz) (C#, Docker security) 34 | - [edokan](http://www.codewars.com/users/edokan) (C#) 35 | - [JoshBrodieNZ](http://www.codewars.com/users/JoshBrodieNZ) (Security Testing) 36 | 37 | And finally but definitely not least a special thanks to our intern Andrew Zhao for his amazing work on the Docker project and implementing Python, Java and RSpec support. 38 | -------------------------------------------------------------------------------- /content/2014/2014-07-23_kata-contributor/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: | 3 | We have added the ability to have kata contributors. 4 | Users who achieve an honor of 1500 or more will be allowed to make edits/improvemtns to other user's kata during the beta period. 5 | taxonomies: 6 | tags: [] 7 | title: Earn the... Kata Contributor Ability 8 | --- 9 | 10 | We have added the ability to have kata contributors. Users who achieve an honor of 1500 or more will be allowed to contribute to other user's kata during the beta period. This allows kata to be improved even faster. 11 | 12 | ### How does it work? 13 | 14 | By default, any kata can be edited. Kata authors can choose to turn of contributions if they wish. However, if a kata has outstanding issues that are left open for longer than 5 days, we will automatically enable the ability to have other users contribute to the kata. 15 | 16 | If you have the ability, you can edit the kata as if it were your own. When you save a revision will be made so that everyone can see who changed what. The kata author will also be notified of any changes that you make. 17 | -------------------------------------------------------------------------------- /content/2014/2014-09-11_sneak-peak-kumite/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: | 3 | Beta test our new feature, Kumite - executable and forkable code snippets, by enabling it in your account settings page. 4 | Kumite has run support for 27 languages, and allows you to translate kata. 5 | taxonomies: 6 | tags: [] 7 | title: 'Sneak Peak: Kumite + Kata Translations' 8 | --- 9 | 10 | ## What is a Kumite? 11 | 12 | In martial arts, kumite (ko͞omiˌtā) is the practice of applying techniques learned through kata during freestyle sparring. In that spirit, we have created our own interpretation of the form - an executable, forkable code snippet, that allows users to collaborate. 13 | 14 | > To get started, visit your [account settings page](https://www.codewars.com/users/edit) and scroll down to enable kumite in the labs section. 15 | 16 | ## Kumite supports 27 languages 17 | 18 | Kumite is where we will be launching support for new languages. Currently, they support the ability to run 27 different languages, of which 8 support testing capabilities, and many more will soon! After languages are stabilized and the community is ready we will add them to kata support. 19 | 20 | ## Creating a kumite 21 | 22 | Start a kumite by posting code, with or without test cases, that you would like to share. It could be an experimental idea you are playing with, code you are proud of, a block of code you want the community to improve, etc... anything you can think of. 23 | 24 | From there, others can view the code, see its output, and fork it to improve upon it in their own way. Each fork is a part of a tree, so that you can easily navigate between them and see everything in one place. Any differences between forked code/tests are easily viewable using our diff feature. 25 | 26 | Kumite is a great way to express yourself as a programmer. You can use it to share and iterate on ideas, or just to have fun sparring with your fellow code warriors. Its also a great way to earn honor. For each kumite you create, you will earn an honor point. For each fork made of your kumite (at any nesting level), you will receive an additional honor point. 27 | 28 | You can also create kumite off of kata solutions, easily allowing you to refactor and iterate on others work. These kumite, along with kata translations, will only be shown within the kata to users who have completed/unlocked it - to ensure that others have the chance to complete the kata first. 29 | 30 | -------- 31 | 32 | ## Translate kata, earn honor. 33 | 34 | Now you can translate kata into new languages, which will earn you 4 additional honor for each one. Once you have enabled the kumite feature, each kata you have completed/unlocked will have a plus button in the language selection area. This takes you to the translation section where you can see a list of existing translations and to add a new translation. 35 | 36 | > Once a translation is published, it can be forked and iterated on by yourself and others. Once it is ready, a moderator will approve it, which will automatically merge it into the kata and award you the 4 additional honor. 37 | 38 | We are excited about both of these features and think you will be to. Give them a spin and as always, we love feedback, so please let us know what you think. 39 | -------------------------------------------------------------------------------- /content/2014/2014-11-10_the-codewars-team-is-growing/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: | 3 | Two prominent community members, Matt Wampler-Doty (xcthulhu) and Phil DeJarnett (OverZealous) have joined the Codewars core team. 4 | taxonomies: 5 | tags: [] 6 | title: The Codewars Team is Growing 7 | --- 8 | 9 | We are proud to welcome two talented leaders from our community to the Codewars core team - Matt Wampler-Doty aka [xcthulhu](http://codewars.com/users/xcthulhu) and Phil DeJarnett aka [OverZealous](http://codewars.com/users/OverZealous). 10 | 11 | This is a major moment for Codewars as we expand the team in order to move forward with our mission. Even greater still, that we met both Matt and Phil through their contributions to Codewars as community members. They have each advanced through the ranks, summited the leaderboard, and given time, energy and expertise to the Codewars community. 12 | 13 | This means a few things for the Codewars. First, we'll be releasing new languages at a very quick pace as our happy Haskell/Clojure users have noticed. Second that we are able to accelerate progress towards our business goals of making our small company financially self-sustaining, so that Codewars can remain free-forever, and have even greater bandwidth for improving the product. 14 | 15 | Now Matt and Phil will take away their introductions, and provide color on their skills and role within the team. 16 | 17 | ## Matt, [xcthulhu](http://codewars.com/users/xcthulhu) 18 | 19 | I am the new back-end guy. As a polyglot, I am primarily responsible for expanding Codewars support to new languages. I started programming unix at 12 on a NeXTStep machine, and installed my first linux machine when I was 14 (my video card was not supported, which meant lots of late nights of recompiling kernels). I studied mathematics at university and hold a masters degree in the subject. Over the years I have worked on the computer assisted proof, embedded design for small satellites, astronomy, machine vision, and computation chemistry. I love functional programming languages, as well as algorithms and recreational mathematics. My recent interests include crypto-currency and computational economic modeling. 20 | 21 | 22 | ## Phil, [OverZealous](http://codewars.com/users/OverZealous) 23 | 24 | Call me a pixel-pusher, user interface engineer, web developer, or front-end developer. No matter the title, I take ideas and turn them into the part of the application you see. 25 | 26 | For the last 15 years, I’ve been hand-coding websites and web applications. I’ve built applications from back to front, using a wide array of technologies. I’ve built applications that make it easier to manage projects, keep track of your business, and manage massive libraries of customized printed materials. 27 | 28 | These days I like to focus on the user interface—making it easier and faster for you to accomplish your goals, as well as build tools—making it easier and faster for me. 29 | 30 | Outside of Codewars you can find me online at my [home page](http://www.overzealous.com), [StackOverflow](http://stackoverflow.com/users/145185/overzealous), or [Github](https://github.com/OverZealous/). In real life I can be found with my wife and daughter in Louisville, Kentucky. 31 | -------------------------------------------------------------------------------- /content/2014/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | insert_anchor_links: left 3 | transparent: true 4 | --- 5 | -------------------------------------------------------------------------------- /content/2016/2016-01-06_announcing-the-codewars-codex/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: | 3 | If you are interested in creating kata on Codewars, reading through this set of advice and rules will be a great way to get started. 4 | taxonomies: 5 | tags: [] 6 | title: Announcing the Codewars Codex! 7 | --- 8 | 9 | As a quick update we wanted to let you know of a new resource that is available. One of our top users, [bkaes](http://codewars.com/users/bkaes), has been working on a [Codewars Codex](http://bkaestner.github.io/codewars-rules/) for some time now. A new version was recently released and we wanted to let the entire community know about it. If you are interested in creating kata for Codewars, this is a must read. The codex provides tons of advice and helpful insights into the kata creation process. 10 | 11 | Codewars is a community driven platform. From content creation to moderation, the community has become a vibrant group of developers who have taken it upon themselves to contribute to the greater good. We would like to thank [bkaes](http://codewars.com/users/bkaes) and all of the other Codewars Senseis who have contributed. 12 | 13 | 14 | Now go [check out the Codex!](http://bkaestner.github.io/codewars-rules/) After reading it please feel free to discuss it in the [Codex Gitter Room](https://gitter.im/bkaestner/codewars-rules). 15 | -------------------------------------------------------------------------------- /content/2016/2016-05-19_codewars-runner-now-open-source/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Open sourcing Codewars Runner CLI that powers running kata on Codewars. 3 | taxonomies: 4 | tags: [] 5 | title: Codewars Runner now open-source! 6 | --- 7 | 8 | ## Open-Sourced Codewars Runner CLI 9 | 10 | Every time you take a kata on Codewars, it is executed on our servers to give you a natural development experience with test results and console output. This is all thanks to the Codewars Runner CLI, which allows us to execute code in multiple languages and test it using their unique testing frameworks. 11 | 12 | We have now released the open-sourced [Codewars Runner on Github] (https://github.com/Codewars/codewars-runner-cli) for the community to utilize and to expand upon! Now our codes is yours too. 13 | 14 | ### Want more language support? 15 | 16 | With the Codewars Runner open sourced, anyone can contribute additional languages to the tool, which will then be added onto Codewars. Most major languages can already be executed on the Runner, the majority of the effort is integrating the language's testing framework. 17 | 18 | You can help us support any language you want! Simply head to the [Github repo](https://github.com/Codewars/codewars-runner-cli), follow the [Instructions to add a new language](https://github.com/Codewars/codewars-runner-cli#how-to-add-a-new-language), and submit a pull request with the updates. 19 | 20 | Feel free to email us with any questions: info@codewars.com, just mention "OSS Language Support" in the subject line. 21 | 22 | ### How it Works 23 | 24 | When you submit a solution on Codewars, all of the different code blocks (solution, test fixture, preloaded code) get sent to our CodeRunner service. That service then passes that code into the CLI, which is executed within a Docker container for security purposes. The CLI takes care of combining/compiling and executing the code for the given language. For full details head over to the [Github repo](https://github.com/Codewars/codewars-runner-cli). 25 | -------------------------------------------------------------------------------- /content/2016/2016-05-24_new-language-updates/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: TypeScript and Elixir are now in beta! We've also released new language 3 | versions (Node 6 and Python 3). 4 | taxonomies: 5 | tags: 6 | - changelog 7 | - runner 8 | - new-language 9 | title: 'New Language Updates! ' 10 | --- 11 | 12 | ### Language Versions 13 | 14 | We have recently added the ability to support different language versions for each language. Moving forward this will help us keep kata compatible as versions change. It also allows us to support languages who have multiple popular versions still in active development (such as Python). 15 | 16 | These changes have already been deployed to our Coderunner and Codewars servers. Currently you can select between Python 2/3 and Node 0.10.33/6.0. You can optionally compile your JS code with Babel JS. 17 | 18 | Soon we will be adding the ability to filter kata by language version. 19 | 20 | #### How version selection works 21 | 22 | An interesting thing to be aware of if you are a kata author/translator. When authoring/translating, you select the version that the kata should default to for that language. However when you publish, we use your solution and test cases to check if the kata is completable in all versions for that language. Any versions that pass will automatically be enabled. 23 | 24 | So for example, if you want to create a kata that is solvable in both Python 2 and 3, just make sure to write your test cases and solution in a cross-version compatible way. 25 | 26 | ### New Languages 27 | 28 | We have two new languages which were recently deployed and are in beta. We would love help from the community to create content and test any integration issues that may still be lurking. 29 | 30 | If you are itching to have your favorite language added to Codewars, make sure to check out the CLI project. As soon as support is fully added to that project we will make it available on Codewars. Check out the [Language Support Status section](https://github.com/Codewars/codewars-runner-cli#user-content-language-support-status) to see where your favorite language current stands in terms of being supported. 31 | 32 | #### Elixir 33 | 34 | Thanks to a community contribution from Sergii Bolki [@cris](http://www.codewars.com/users/cris) on [Codewars](http://www.codewars.com/users/cris) and [Github](https://github.com/cris), we now support Elixir. Testing is done using ExUnit. This is an interesting language which is picking up steam, particulary with Ruby developers who enjoy the Ruby-ish syntax. 35 | 36 | #### TypeScript 37 | 38 | TypeScript support was added by @[jhoffner](https://github.com/jhoffner). Testing is done using Mocha. TypeScript is starting to become more popular now that Angular 2 is out. 39 | 40 | ### New Libraries Added 41 | 42 | Along with all of these updates, we have also make a number of new libraries available for some languages. JavaScript & Ruby in particular now have a number of new packages/gems available, many centered around machine learning and data science. In addition to Python which already had scipy/numpy available, this should make for some new and interesting possibilities in the types of kata that can be created. 43 | 44 | Check out the following links for more info: 45 | 46 | - [Node environment](https://github.com/Codewars/codewars-runner-cli/wiki/Node-Environment-(JS,-CoffeeScript,-TypeScript)) 47 | - [Ruby environment](https://github.com/Codewars/codewars-runner-cli/wiki/Ruby-Environment) 48 | 49 | Speaking of Machine Learning and Python, we also added the [TensorFlow](https://www.tensorflow.org/) library to our Python environment. This is an amazing machine learning library created by Google and definitely worth checking out. We can't wait to see what kata codewarriors come up with that make use of this package 50 | -------------------------------------------------------------------------------- /content/2016/2016-07-16_php-and-dart/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: PHP and Dart have recently been added as our newest beta languages. 3 | taxonomies: 4 | tags: 5 | - changelog 6 | - runner 7 | - new-language 8 | title: PHP & Dart are now supported kata languages (beta) 9 | --- 10 | 11 | Calling all kata authors and translators. PHP and Dart have recently been added as our newest beta languages. 12 | -------------------------------------------------------------------------------- /content/2016/2016-10-20_introducing-sql/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Codewars now supports SQL! 3 | taxonomies: 4 | tags: 5 | - changelog 6 | - runner 7 | - new-language 8 | title: Introducing SQL Support (Beta) 9 | --- 10 | 11 | We are happy to announce that SQL is now a supported language on the [Codewars](https://www.codewars.com?utm_campaign=introducing_sql&utm_medium=blog) platform. We currently support two different SQL environments: SQLite3 and Postgres, with MariaDB support coming later. 12 | 13 | Unit testing isn’t usually done on pure SQL queries and there were not any SQL testing frameworks for us to use. Because of this, SQL required us to do something we have never done before — use one language to test another. Our solution: use Ruby, RSpec and the Sequel ORM as the testing platform. It works by having the solution be pure SQL, but that code gets executed in a Ruby/Rspec environment using [Sequel](https://github.com/jeremyevans/sequel) to work with the database. This allows a lot of flexibility. You can use Ruby to populate the database with any data that you want and set up various testing scenarios. You can run the query multiple times on different versions of a dataset. 14 | 15 | We even support multiple statements within the SQL solution (don’t forget to use those semi-colons!). Our multi-statement support allows you to run schema and insert queries as well as multiple selects. If multiple result sets are detected we will return an array of datasets which can be printed and tested separately. 16 | 17 | ## **Why we picked Ruby** 18 | 19 | Originally we were going to go with JavaScript/NodeJS and Mocha as our testing platform, since JavaScript is the most popular language on Codewars. However we wanted the framework to be as easy to use as possible, and with NodeJS everything would need to be wrapped up in callbacks or promises. The result would have been code far more complicated than we wanted. Ruby was a natural choice because it’s easy to learn and Rspec provides a natural DSL experience to writing tests. Sequel is also an incredibly easy toolkit to use. If you decide you want to setup some sophisticated tests and data, you can do it without much effort. We even auto require the [Faker](https://github.com/stympy/faker) gem so that you can easily generate data. 20 | 21 | **Data Generation Example:** 22 | 23 | ```ruby 24 | DB.create_table :items do 25 | primary_key :id 26 | String :name 27 | Float :price 28 | end 29 | 30 | items = DB[:items] # Create a dataset 31 | 32 | # Populate the table with 5 rows 33 | _5.times do 34 | items.insert(name: Faker::Name.name, price: Faker::Commerce.price) 35 | end 36 | # run/print the results and get back a dataset 37 | results = run_sql 38 | ``` 39 | 40 | {{ figure(src="sql-results.png") }} 41 | 42 | ## **What if I don’t want to generate my own data?** 43 | 44 | We’ve got you covered if generating data sounds like a lot of work. For our Postgres implementation, we have set up an alternative database that you can connect to. The sample database is a fictitious [DVD rental store](http://www.postgresqltutorial.com/postgresql-sample-database/). To automatically connect to this database, you can simply add the following comment to your setup code block. 45 | 46 | ```ruby 47 | # @use-database dvdrental 48 | ``` 49 | 50 | ## How do I get started? 51 | 52 | Until recently, when you signed up we didn’t have SQL as an option for a language that you want to train on. In that case, if you visit the kata catalog you won’t see any SQL challenges by default. If you are interested in improving your SQL skills, make sure to update your language settings (top right menu under your profile) to include SQL. You can also go to the catalog and select “All” or “SQL” as your language choice. 53 | 54 | Right now SQL is in beta and since it was just released, there won’t be much content yet. For all of our sensei out there, it’s time to author some killer SQL kata! 55 | -------------------------------------------------------------------------------- /content/2016/2016-10-20_introducing-sql/sql-results.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codewars/blog/b39be2830abbbbdfd4c4619ea9482dc6fee826bc/content/2016/2016-10-20_introducing-sql/sql-results.png -------------------------------------------------------------------------------- /content/2016/2016-10-26_sql-updates/charts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codewars/blog/b39be2830abbbbdfd4c4619ea9482dc6fee826bc/content/2016/2016-10-26_sql-updates/charts.png -------------------------------------------------------------------------------- /content/2016/2016-10-26_sql-updates/expected-results.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codewars/blog/b39be2830abbbbdfd4c4619ea9482dc6fee826bc/content/2016/2016-10-26_sql-updates/expected-results.png -------------------------------------------------------------------------------- /content/2016/2016-10-26_sql-updates/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Codewars has just released a new set of testing helpers to make writing 3 | and testing SQL kata even easier. 4 | taxonomies: 5 | tags: 6 | - changelog 7 | - runner 8 | - language-update 9 | - authoring 10 | title: 'SQL Updates: It’s even easier now to create SQL kata' 11 | --- 12 | 13 | Codewars has just released a new set of testing helpers to make writing and testing SQL kata even easier. Before we get into how these helpers make it easy to author kata, lets check out some of the additional benefits they provide to those training on the kata. 14 | 15 | ## Expected Results 16 | 17 | There is a new `compare_with` helper which takes in an example result set to compare the code warrior’s query against. This has a number of benefits, including presenting the code warrior with a 2nd table that shows the expected results output. 18 | 19 | {{ figure(src="expected-results.png", alt="No need trying to guess what the results should look like, now you can see the expected output!") }} 20 | 21 | ## Charts 22 | 23 | You may have also noticed in the above screenshot that there are 2 chart tabs. Another feature of the `compare_with` helper is that you can define charts to help visualize the data. Currently we support a `timeseries` chart type, and will be adding more later. 24 | 25 | {{ figure(src="charts.png", alt="You can compare your results with the expected using chart visualizations") }} 26 | 27 | ## Using the compare_with helper 28 | 29 | To use the compare_with helper, you simply add `compare_with expected` to your specs. Then, within your “preloaded” code, you add the expected query result like so: 30 | 31 | ```ruby 32 | def expected 33 | DB[%q( 34 | REPLACE WITH YOUR SQL QUERY 35 | )].to_a 36 | end 37 | ``` 38 | 39 | Not only will this print out both an ‘actual” and “expected” set of results, but this will also auto generate RSpec test specs for you based off of the data returned by the expected results. Here is an example of some specs that are auto-generated: 40 | 41 | {{ figure(src="test-output.png", alt="Auto-generated specs. The very last spec shown here will compare the entire actual result set to the expected result set.") }} 42 | 43 | While these generated specs are great, there are some other ways of extending the generated specs. 44 | 45 | ## describe block methods 46 | 47 | You can tie into specific describe blocks to extend the specs that are shown. Here is an example of adding a spec to the “day column” describe block: 48 | 49 | ```ruby 50 | compare_with expected do column(:day) do 51 | it "should start at the begining of the day" do 52 | expect(actual.first[:day]).to eq expected.first[:day].beginning_of_day 53 | end 54 | end 55 | end 56 | ``` 57 | 58 | There is also a `rows` method for tying into the rows block, and a `spec` block if you just want to add specs at the top describe of the generated tests. 59 | 60 | ## chart method 61 | 62 | There is also a `chart` method which can be used to configure charts that will be rendered against the actual and expected results. The following shows how to configure the chart previously shown. 63 | 64 | ```ruby 65 | compare_with expected do 66 | draw_chart( 67 | type: :timeseries, 68 | group_by: :description, 69 | x: :day, 70 | y: :count 71 | ) 72 | end 73 | ``` 74 | 75 | That about sums it up for now. If you want to see these new updates in action, head over to Codewars and check out a [kata that already has it implemented.](https://www.codewars.com/kata/sql-basics-group-by-day/?utm_source=medium&utm_medium=blog&utm_campaign=sql_updates) 76 | -------------------------------------------------------------------------------- /content/2016/2016-10-26_sql-updates/test-output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codewars/blog/b39be2830abbbbdfd4c4619ea9482dc6fee826bc/content/2016/2016-10-26_sql-updates/test-output.png -------------------------------------------------------------------------------- /content/2016/2016-11-22_honor-corrections/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxonomies: 3 | tags: 4 | - note 5 | title: Honor Corrections 6 | --- 7 | 8 | Just a quick note. Some of you might notice that your honor jumped up recently. This will be in large part due to the following corrected issue that was recently released. 9 | 10 | If you have translated a kata before, some of the points that you earned for those translations may have been recently lost. We have now corrected the issue and you will receive all of your points for translations that have been approved, as well as 1 honor point for each kumite and translation fork that you have published. 11 | -------------------------------------------------------------------------------- /content/2016/2016-12-05_introducing-codewars-red/head-to-head.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codewars/blog/b39be2830abbbbdfd4c4619ea9482dc6fee826bc/content/2016/2016-12-05_introducing-codewars-red/head-to-head.png -------------------------------------------------------------------------------- /content/2016/2016-12-05_introducing-codewars-red/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Announcing premium subscription plan, Codewars Red! 3 | taxonomies: 4 | tags: 5 | - product 6 | title: Introducing Codewars Red 7 | --- 8 | 9 | {{ figure(src="red-banner.png") }} 10 | 11 | For years Codewars has been helping developers all around the world improve their craft. Regardless of your level of coding experience, Codewars has something to help you train on. As the site becomes more popular, we want to not only continue to serve the community but also continue to provide new and exciting features. **As part of this mission, we are introducing a new premium subscription plan —** [**Codewars Red**](https://www.codewars.com/subscription)**.** 12 | 13 | While Codewars will always provide a free experience for everyone, Codewars Red will provide additional new features and benefits to code warriors who want to take their training to the next level. Here are some of our favorite new features available with a Red subscription: 14 | 15 | ## Enhanced Profile Stats 16 | 17 | The Codewars user profile has been revamped with a new stats tab. Normal users will see their basic stats such as contributions and overall progress. Codewars Red members will have an enhanced stats page that takes things further. In addition to your normal stats, you will be able to see information on your training streaks, total up votes and detailed information about each language you have trained on. 18 | 19 | {{ figure(src="streaks.png", alt="See your streaks and challenge yourself to train harder") }} 20 | 21 | {{ figure(src="language-stats.png", alt="View detailed information about each language you have trained on") }} 22 | 23 | {{ figure(src="solution-upvotes.png", alt="See your total solution up votes") }} 24 | 25 | Enhanced profiles are visible for anyone to see and are a great way for you to show off your skills to employers and colleagues! 26 | 27 | ## Head-to-Head Comparison 28 | 29 | Ever wished you could see how you solve problems compared to someone else? Now you can with our new head-to-head comparison feature. Codewars Red subscribers will be able to compare themselves to any other codewarrior. Simply go to their profile and click “Head-to-Head Compare”. After the system crunches your solutions for a brief moment you will be shown both of your solutions, side-by-side, for any kata that you have completed in the same language. This is an incredible way to pick up tricks from other developers. 30 | 31 | {{ figure(src="head-to-head.png", alt="Compare yourself to any other codewarrior.") }} 32 | 33 | ## Improved Code Execution 34 | 35 | We always aim to provide the best experience for all users. Our code execution service has received a number of stability improvements over recent months to help ensure that your code is executed as quickly and consistently as we can. With a Red membership, we are able to take things even further by dedicating more server resources that otherwise wouldn’t be economical. 36 | 37 | ### Isolated Execution Cluster 38 | 39 | Codewars runs over 100k code requests a day, ranging anywhere from 150ms to over 12 seconds. Each time you run your code, you are giving a fresh container to work within, to ensure that you are working with a clean slate. To provide a more consistent result, we only run one request per CPU processor at a time to limit the amount of resource contention that your code competes with. This allows us to provide more consistent results in general, but on occasion a traffic spike will result in the service not being able to scale up quickly enough. This can result in slow and inconsistent responses. 40 | 41 | To help offset these issues, Red members will have their code executed on a separate server cluster. This cluster will be less susceptible to traffic spikes which will provide more consistent execution results. Since the servers will be less stressed this will also provide additional consistency when timing how long your code takes to execute. 42 | 43 | ### Redundant Code Execution 44 | 45 | Additionally, we will run your code twice, on two separate servers at the same time. This will further protect your request from timeout and server errors. It also helps to alleviate issues caused by “noisy neighbors”, which is a problem that comes up when running on a shared services platform (such as AWS). Finally, both requests will be timed and the fastest one will be returned, giving you a better idea as to how well your code is performs. 46 | 47 | ### Real-time Output Streaming 48 | 49 | Some kata take a little time to startup and configure (such as our SQL kata), or take a more significant amount of time to run (such as kata that write a lot of text to STDOUT). While your code is being executed, you are normally forced to wait until the final result is delivered before you receive any feedback. Anyone who has struggled to solve a kata knows how impatient you can get when you are waiting to see your results. In times like these real-time output streaming will save you some stress. Now when your code runs, we will deliver the output in real-time over web sockets so that you get quicker feedback as to what is happening while your code runs. 50 | 51 | ## Additional Features 52 | 53 | Here are some other benefits to signing up for a Red membership: 54 | 55 | ### Ad-Free Experience 56 | 57 | We have made it a point to try to keep the ads on Codewars classy, relevant and unannoying. However sometimes you just want a pure experience without ads to get in your way. All Red members will have their ads turned off by default once you sign-up. 58 | 59 | ### Early Access to New Features 60 | 61 | Codewars Red will help fund our ability to improve the site with new features. Your support will not go unrewarded, as we rollout new functionality we will often open those features up to Red members first, so that you can help us test and provide feedback before we roll things out to the whole community. 62 | 63 | ### Profile Badge 64 | 65 | Supporting Codewars is a big deal for the longevity of the service, and you should be proud to be a Codewars Red member. We will show a badge next to your name on your profile so that other code warriors see that you have helped to support the service. 66 | 67 | ## Ready? 68 | 69 | [Subscribe to Codewars Red today!](https://www.codewars.com/subscription) 70 | 71 | ## tl;dr 72 | 73 | Codewars Red is available now and is a great way to show your support and get some new features at the same time. For the cost of [2 coffees a month](https://www.codewars.com/subscribe) you will have the best experience of a service that helps hundreds of thousands of developers across the world to become better developers. 74 | -------------------------------------------------------------------------------- /content/2016/2016-12-05_introducing-codewars-red/language-stats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codewars/blog/b39be2830abbbbdfd4c4619ea9482dc6fee826bc/content/2016/2016-12-05_introducing-codewars-red/language-stats.png -------------------------------------------------------------------------------- /content/2016/2016-12-05_introducing-codewars-red/red-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codewars/blog/b39be2830abbbbdfd4c4619ea9482dc6fee826bc/content/2016/2016-12-05_introducing-codewars-red/red-banner.png -------------------------------------------------------------------------------- /content/2016/2016-12-05_introducing-codewars-red/solution-upvotes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codewars/blog/b39be2830abbbbdfd4c4619ea9482dc6fee826bc/content/2016/2016-12-05_introducing-codewars-red/solution-upvotes.png -------------------------------------------------------------------------------- /content/2016/2016-12-05_introducing-codewars-red/streaks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codewars/blog/b39be2830abbbbdfd4c4619ea9482dc6fee826bc/content/2016/2016-12-05_introducing-codewars-red/streaks.png -------------------------------------------------------------------------------- /content/2016/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | insert_anchor_links: left 3 | transparent: true 4 | --- 5 | -------------------------------------------------------------------------------- /content/2017/2017-01-26_honor-and-leaderboard-updates/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Announcing updates to the honor point system. 3 | taxonomies: 4 | tags: 5 | - changelog 6 | - gamification 7 | title: Honor and Leaderboard Updates 8 | --- 9 | 10 | Today we are announcing updates to the honor point system. The honor system will continue to work as you know it, but the points earned for certain activities have been changed to better reward code warriors who create and complete harder kata on the site. These updates are meant to encourage more code warriors to attempt harder kata, which will help kata get out of beta faster. As harder kata move out of beta faster, the more likely that kata authors (sensei) will focus on creating more challenging kata. 11 | 12 | ## What Changed? 13 | 14 | ### Honor values have shifted 15 | 16 | In general, you now earn more honor for many of the activities on the site. Some activities have seen a small bump in the honor that you receive for doing them, while others have received a 5–10x increase to better represent their importance. A good example is creating and completing kata. Previously you only received 10 honor for completing a purple belt kata. Now you receive 128 honor! 17 | 18 | Up to now the points for how you earn honor for had not been well documented but we now have a spreadsheet available which both details what points used to be as well as their updated values. You will notice that there is a dramatic shift mostly towards content which is ranked as more challenging. 19 | 20 | {{ airtable(id="shrDt7USqZ7GStRb0", color="gray") }} 21 | 22 | ### New ways of earning honor 23 | 24 | A few new ways of earning honor has also been introduced. This includes awarding honor for voting on how satisfying a kata is, as well as for voting on what you think a beta kata’s rank should be once it is approved. Both of these activities now have honor attached to them in order to better promote getting beta kata approved faster. 25 | 26 | ## Translations are now rank based 27 | 28 | The honor for translations has been completely reworked. Originally, you would receive honor for translations based off of how many of them have been approved. This has changed so that they are now rank based. The more difficult a kata is, the more honor you will receive for translating it into a new language. You get 2x what you would normally get for completing a kata. 29 | 30 | ### Honor targets for earning privileges have also shifted 31 | 32 | Now that more honor is being awarded for activities, we also needed to adjust the targets that earn you new privileges. You can check out the privileges table in the Airtable above to see how things have changed. 33 | 34 | > Note that if you have been previously granted a privilege, you will keep that privilege even if you no longer have earned enough honor based off of the new scale. 35 | 36 | ### Ranking system has not changed 37 | 38 | Just to be clear, the kyu ranking system has not changed. Your kyu level will stay the same, only honor is being affected with this update. 39 | 40 | ## What should I expect? 41 | 42 | Most code warriors will notice an increase in their honor at some point starting today. We need to recalculate the honor for every warrior in the system so there may be a delay before you see your honor increase. Most likely once the honor has changed across the board, some of you will have moved honor board positions as well — those who have focused their efforts more on creating or completing harder kata will likely move up a few positions. 43 | 44 | ## Leaderboard Additions 45 | 46 | We are also announcing some additions to the global leaderboard. There are now two new leaderboards which track a subset of the total honor each code warrior earns. 47 | 48 | ### Completed Kata 49 | 50 | The completed kata leaderboard tracks top users based solely off of the kata that you complete. Solution up votes are not counted. 51 | 52 | ### Authored Kata & Translations 53 | 54 | This leaderboard tracks top users based off of their contributions. This includes creating kata and translations. Kata up votes (very satisfied rating) are counted as well. 55 | 56 | You can view the new leaderboards [here](https://www.codewars.com/users/leaderboard). As with the honor updates, the leaderboards will be changing through today as each new user account gets updated. 57 | -------------------------------------------------------------------------------- /content/2017/2017-08-21_smarter-markdown/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Codewars now supports R, BF, Erlang, and Nim! 3 | taxonomies: 4 | tags: 5 | - changelog 6 | - runner 7 | - new-language 8 | title: New Languages, Smarter Markdown, and Translation Approvals 9 | --- 10 | 11 | There have been a number of new additions on Codewars that we would like to announce… 12 | 13 | ## New Languages 14 | 15 | We have launched a number of new languages to the platform recently, thanks to some great contributions from the community. These languages are in beta and are looking for translators. Kata authors, some of these are a great opportunity to play around with new kata ideas! 16 | 17 | ### R 18 | 19 | [R](https://www.r-project.org/about.html) is a language and environment for statistical computing and graphics. Some users have already began to translate R for existing challenges. We also expect that a whole new category of challenges will begin to emerge that utilizes R for its statistic strengths. 20 | 21 | ### BF 22 | 23 | BF (aka Brainf**k) is a language so complicated or unusual that it’s name is meant to indicate it exceeds the limits of one’s understanding. This esoteric language was created in 1993 by Urban Müller, and notable for its extreme minimalism. 24 | 25 | We wouldn’t say it has much practical use in the real world, but it will certainly give you a challenge and test your limits of patience. For a while now code warriors have been creating BF inspired challenges via other languages. Now you can code BF directly into the editor since it is now a fully supported language. JavaScript is used as the testing language, making it very easy to write tests. 26 | 27 | ### Erlang 28 | 29 | We’ve had Elixir on the site for a while now, we thought it was time to bring its bigger brother into the mix. [Erlang](https://www.erlang.org/) is a programming language used to build massively scalable soft real-time systems with requirements on high availability. Some of its uses are in telecoms, banking, e-commerce, computer telephony and instant messaging. Erlang’s runtime system has built-in support for concurrency, distribution and fault tolerance. 30 | 31 | ### Nim 32 | 33 | Nim (formerly named Nimrod) is an imperative, multi-paradigm, compiled programming language designed and developed by Andreas Rumpf. It is designed to be “efficient, expressive, and elegant”, supporting metaprogramming, functional, message passing, procedural, and object-oriented programming styles by providing several features such as compile time code generation, algebraic data types, a foreign function interface (FFI) with C and compiling to JavaScript, C and C++. 34 | 35 | > Special thanks to [kazk](https://www.codewars.com/users/kazk) (R, Nim, Erlang) and [donaldsebleung](https://www.codewars.com/users/donaldsebleung) (BF) for helping us support these new languages! 36 | 37 | ## New Language Versions 38 | 39 | We now support Node 8 and TypeScript 2.4. In addition, TypeScript can be targeted towards either ES3 or ES6. 40 | 41 | ## If/If-Else Markdown Code Blocks 42 | 43 | A recently added feature to our markdown is the ability to target specific languages when writing kata descriptions. Using this feature, you can write complete sections of markdown that only display **if** or **if-not** a specific language is active. You can even target multiple languages at the same time! 44 | 45 | ### Example: 46 | 47 | ````markdown 48 | ~~~if:javascript,ruby 49 | This content will only be shown if javascript or ruby are active. 50 | 51 | **Special Note**: Markdown is still available to be used within these "if" blocks 52 | ~~~ 53 | 54 | ~~~if-not:ruby 55 | This markdown will only be shown if ruby **is not** the active language. 56 | 57 | ```javascript 58 | // still only shown if javascript is the active language, since it has multiple examples next to it 59 | ``` 60 | ```python 61 | # only shown if python is active 62 | ``` 63 | ~~~ 64 | ```` 65 | 66 | ## Power Users Can Now Approve Translations! 67 | 68 | Another recent change is that power users, specifically users who have more than 4000+ honor, now have the ability to approve other code warrior’s kata translations. They have this ability only if the kata author has been inactive for a while, or if the translation is over a week old. This allows kata authors an opportunity to approve or reject a translation before others do, but also will be a huge boost towards approving translations that would otherwise get stuck waiting for approval. 69 | -------------------------------------------------------------------------------- /content/2017/2017-10-20_new-languages-and-updated-beta-process/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Codewars now supports Solidity, Scala, Groovy, and Kotlin! 3 | taxonomies: 4 | tags: 5 | - changelog 6 | - runner 7 | - new-language 8 | title: New Language and Updated Beta Process 9 | --- 10 | 11 | ## New Languages 12 | 13 | For about a month now we have been running some new languages in beta that we want to officially announce. 14 | 15 | ### Solidity 16 | 17 | For those interesting in cryptocurrencies (and you should be, it’s the future!) we have added [Solidity](https://solidity.readthedocs.io/en/develop/) to the platform. Solidity is a language used by Ethereum and other blockchains to develop smart contracts. If you don’t know what smart contracts are, check them out — we think they are pretty great. 18 | 19 | There are already a few kata available, built just for Solidity, that will help you start to get your feet wet. Check these out: 20 | 21 | - [Smart Contracts Introduction: Gift Coin](https://www.codewars.com/kata/smart-contracts-introduction-giftcoin) 22 | - [Rock, Paper, Scissors, Smart Contract](https://www.codewars.com/kata/rock-paper-scissors-smart-contract) 23 | 24 | **web3 Package** 25 | 26 | Speaking of Ethereum/cryptocurrencies, we have also updated our Node images to contain related packages. [Here is a kata that demonstrates how to work with web3](https://www.codewars.com/kata/59b85549afcda2beb80000ab). 27 | 28 | ### Scala 29 | 30 | [Scala](https://www.scala-lang.org/) is a JVM based language: 31 | 32 | > Object-Oriented Meets Functional. Have the best of both worlds. Construct elegant class hierarchies for maximum code reuse and extensibility, implement their behavior using higher-order functions. Or anything in-between. 33 | 34 | A few kata have already been translated into Scala. [Here is one to get you started](https://www.codewars.com/kata/are-they-the-same). 35 | 36 | ### Groovy 37 | 38 | [Groovy](http://groovy-lang.org/) is a JVM based language: 39 | 40 | > Groovy is a powerful, optionally typed and dynamic language, with static-typing and static compilation capabilities, for the Java platform aimed at improving developer productivity thanks to a concise, familiar and easy to learn syntax. It integrates smoothly with any Java program, and immediately delivers to your application powerful features, including scripting capabilities, Domain-Specific Language authoring, runtime and compile-time meta-programming and functional programming. 41 | 42 | A number of kata have also been translated into Groovy. [Here is one of the easier ones](https://www.codewars.com/kata/selective-array-reversing). 43 | 44 | ### Kotlin 45 | 46 | [Kotlin](https://kotlinlang.org/) is another JVM language. It is commonly used for Android development. 47 | 48 | > A statically typed programming language for modern multi-platform applications. 49 | 50 | There are already a Kotlin specific kata series out of beta to help get you started: 51 | 52 | - [Tricky Kotlin #0: extension constructor](https://www.codewars.com/kata/tricky-kotlin-number-0-extension-constructor) 53 | - [Tricky Kotlin #1: invoke a string](https://www.codewars.com/kata/tricky-kotlin-number-1-invoke-a-string) 54 | - [Tricky Kotlin #2: three fundamental functions](https://www.codewars.com/kata/tricky-kotlin-number-2-three-fundamental-functions) 55 | - [Tricky Kotlin #3: define a function](https://www.codewars.com/kata/tricky-kotlin-number-3-define-a-function) 56 | 57 | **A note about performance:** All of the above languages are compiled and take a little time to run. Groovy will run the fastest, Scala the slowest. We have some infrastructure improvements in the works which will eventually speed things up. 58 | 59 | ## A Quick Beta Process Update 60 | 61 | Beta kata testers can no longer vote on a kata unless they have completed it. If you could not complete a kata due to a problem, please log a comment with the issue label. 62 | 63 | While we are on the subject. Logging issues on kata that have technical problems is the intended way of raising those issues. If you complete a kata, please vote on it based off of what you think its merit is, in terms of education or enjoyment. If you got value out of doing the kata, then say so — if you find the kata to have little to no value in completing, that’s the intended case to mark it as unsatisfactory. 64 | 65 | ## Wiki Docs 66 | 67 | We replaced our in-site documentation with Github wiki docs a while back, but in case anyone missed it — [check them out here](https://github.com/Codewars/codewars.com/wiki). 68 | -------------------------------------------------------------------------------- /content/2017/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | insert_anchor_links: left 3 | transparent: true 4 | --- 5 | -------------------------------------------------------------------------------- /content/2018/2018-04-16_next-gen-code-execution-engine/duplicate-warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codewars/blog/b39be2830abbbbdfd4c4619ea9482dc6fee826bc/content/2018/2018-04-16_next-gen-code-execution-engine/duplicate-warning.png -------------------------------------------------------------------------------- /content/2018/2018-04-16_next-gen-code-execution-engine/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: We are pleased to announce that we have recently replaced our code execution 3 | engine with our 3rd generation code runner engine. 4 | taxonomies: 5 | tags: 6 | - changelog 7 | - runner 8 | - new-language 9 | title: Next Gen Code Execution Engine is Live! 10 | --- 11 | 12 | {{ figure(src="top.png") }} 13 | 14 | We are pleased to announce that we have recently replaced our code execution engine with our 3rd generation code runner engine. The new engine has been completely redesigned from the ground up to perform better, have improved stability, and be more flexible in order to handle the constant changing set of languages and dependencies that are required to keep you on top of your game. 15 | 16 | Along with this new release, we are also releasing a number of updates that come with the new engine. 17 | 18 | ### New Languages 19 | 20 | {{ figure(src="new-languages.png", alt="PowerShell, Fortran, Julia, and NASM are now supported", themed=true) }} 21 | 22 | We now support [**PowerShell**](https://en.wikipedia.org/wiki/PowerShell), [**Fortran**](https://en.wikipedia.org/wiki/Fortran), [**Julia**](https://en.wikipedia.org/wiki/Julia_(programming_language)) & [**NASM**](https://en.wikipedia.org/wiki/Netwide_Assembler)**!** These languages are in beta and as of press time don’t have any/many kata available yet. If you have experience working with any of these, the community could use your help translating existing content — which happens to be a pretty good way to earn some honor in the process. 23 | 24 | ### New Language Versions 25 | 26 | Not only did we add completely new languages, but we also have added newer versions to many of the existing supported languages that we already support. 27 | 28 | - Ruby MRI 2.5 29 | - Haskell GHC 8.2 30 | - Solidity 0.4.19 31 | - Rust 1.25 32 | - Swift 4 33 | - Elixir 1.6.4 34 | - Crystal 0.24 35 | 36 | A note on newer versions with older kata. Any existing kata that are compatible as-is with the new versions have already been updated with these versions as their default. 37 | 38 | ### Enhancements 39 | 40 | - Python: [Improved v2 framework](https://github.com/Codewars/codewars.com/wiki/Codewars-Python-Test-Framework-V2) — [Kumite example](https://www.codewars.com/kumite/5aaa2d33f51c8a313b00000e?sel=5aaafda16c51ee51b4000006) 41 | - Python: Unicode output 42 | - Python: No longer uses concatenation to combine preloaded with solution and fixture code. This means you will now **get error messages that actually make sense**! 43 | - TypeScript: `/// A strongly-typed functional programming language that compiles to JavaScript 20 | > 21 | > [_http://www.purescript.org/_](http://www.purescript.org/) 22 | 23 | - [Integers: Recreation One](https://www.codewars.com/kata/integers-recreation-one/purescript) 24 | - [Power of two](https://www.codewars.com/kata/power-of-two/purescript) 25 | - [Isomorphism](https://www.codewars.com/kata/isomorphism/purescript) 26 | 27 | ### Elm 28 | 29 | > A delightful language for reliable web apps. _Generate JavaScript with great performance and no runtime exceptions._ 30 | > 31 | > [_https://elm-lang.org/_](https://elm-lang.org/) 32 | 33 | - [Decode the Morse code](https://www.codewars.com/kata/decode-the-morse-code/elm) 34 | - [Duplicate Encoder](https://www.codewars.com/kata/duplicate-encoder/elm) 35 | - [Backspaces in string](https://www.codewars.com/kata/backspaces-in-string/elm) 36 | 37 | ### Reason 38 | 39 | > Reason lets you write simple, fast and quality type safe code while leveraging both the JavaScript & OCaml ecosystems. 40 | > 41 | > [_https://reasonml.github.io/_](https://reasonml.github.io/) 42 | 43 | - [Looking for a benefactor](https://www.codewars.com/kata/looking-for-a-benefactor/reason) 44 | - [Floating-point Approximation (II)](https://www.codewars.com/kata/floating-point-approximation-ii/reason) 45 | - [Sum by Factors](https://www.codewars.com/kata/sum-by-factors/reason) 46 | 47 | ## Languages with Dependent Types 48 | 49 | We’re also very happy to introduce Idris and Agda! Special thanks to [gallais](https://github.com/gallais) and [ice1000](https://github.com/ice1000) for helping us add Agda. 50 | 51 | ### Idris 52 | 53 | > A general purpose pure functional programming language with dependent types. 54 | > 55 | > [_https://www.idris-lang.org/_](https://www.idris-lang.org/) 56 | 57 | ### Agda 58 | 59 | > Agda is a dependently typed functional programming language. 60 | > 61 | > [https://wiki.portal.chalmers.se/agda](https://wiki.portal.chalmers.se/agda/pmwiki.php) 62 | 63 | We’ll be honest. We don’t know these languages enough to write nice introductions, but some of our users are extremely excited to have theorem proving challenges on Codewars. If you’re interested to start learning, check out 8 kyu [“Theorem proving hello world: prove a+0=a and 0+a=a”](https://www.codewars.com/kata/5c879811bc562909bf65c8e6). 64 | 65 | The addition of these languages brings our count of supported languages to 41! Our library is steadily growing with kata built around the new languages and we would love to see more contributions from you! Check out some of the kata above. 66 | 67 | ## New Language Versions 68 | 69 | - Dart 2.1 70 | - Java 11 71 | - Kotlin 1.3 72 | - Rust 1.33 73 | - TypeScript 3.3 74 | 75 | We hope you enjoy these updates! We are continually working to improve the platform, so thank **you** for your patience and continued use of Codewars. 76 | -------------------------------------------------------------------------------- /content/2019/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | insert_anchor_links: left 3 | transparent: true 4 | --- 5 | -------------------------------------------------------------------------------- /content/2021/2021-01-21_updates-from-the-past-year/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: A lot has been done, a lot more to do! 3 | taxonomies: 4 | tags: 5 | - announcement 6 | - changelog 7 | - runner 8 | - new-language 9 | - documentation 10 | - moderation 11 | title: Updates from the past year 12 | --- 13 | 14 | 15 | For the past few years, we had been focused on internal changes that were required to fix critical bugs and performance issues. We've been aware of the various problems of the platform, including issues reported by the community, but it was necessary for us to prioritize technical debt issues first. We're happy to announce that Codewars is now in a much better shape! Thank you for your patience. 16 | 17 | We started to focus more on the community aspect since the summer of 2020 and have some exciting announcements to make. 18 | In this post, we'll highlight the updates from the past year and explain our plan for the early 2021. 19 | 20 | 21 | ## New blog 22 | 23 | Some of you might have noticed already, but we have a new blog. It's [open sourced](https://github.com/codewars/blog) on GitHub to collaborate with the community. Feel free to open issues for any feedback. 24 | 25 | We'll be posting about anything related to Codewars, including new features, improvements, and will ask for your help when needed. We're also considering guest posts by users to share their experience in the future. 26 | 27 | 28 | ## New languages 29 | 30 | We've added support for the following languages: Prolog, CFML, COBOL, Lean, Haxe, CommonLisp, Perl, Raku, and Pascal. 31 | 32 | Most of them are still in the beta stage, and contributions in the form of new kata or translations will be very helpful. Many of the existing languages were also updated to newer versions. More details will be provided in a dedicated post. 33 | 34 | Many thanks to all users who provided their support on setting up the code runner and created new content for introduced languages! 35 | 36 | 37 | ## Refactoring and performance improvements 38 | 39 | As mentioned above, we've been mostly focused on technical debut issues for the past few years. We're relieved that _most_ of the critical issues have been resolved and the site's performance has improved significantly. In short, it's now at least 10 times faster on average compared to 2018 with less servers and much more traffic. Thank you for your patience and support if you had experienced the worst days and stayed with us. 40 | 41 | 42 | ## Community moderation team 43 | 44 | The Codewars community needed moderation for a long time, but it was difficult because we only have one developer/admin. We wanted to delegate various tasks to a team of trusted users, but all the technical debt issues got in the way... 45 | 46 | We're excited to introduce [the community moderation team](https://docs.codewars.com/community/moderation/#moderators)! They have access to a variety of tools to manage content, handle problematic users, support users, and perform other moderation tasks. 47 | 48 | More information on the moderation team will be provided in a dedicated announcement. 49 | 50 | 51 | ## Documentation 52 | 53 | We've been working on the new [documentation site](https://docs.codewars.com/) to replace the old [wiki](https://github.com/codewars/codewars.com/wiki). 54 | 55 | The new docs is [open source](https://github.com/codewars/docs) and maintained by the community moderation team. You're encouraged to participate by writing new articles, reviewing drafts, suggesting improvements, or fixing any issues. 56 | 57 | More information on documentation will be provided in a dedicated announcement. Any contribution is welcomed! 58 | 59 | 60 | ## Plans for 2021 61 | 62 | In 2021, we plan to work on further improvements to the platform, expanding moderation tools, and creating more articles for the documentation. We'd like to bring Codewars community closer together and improve communication with the community, so we'll keep you updated. 63 | 64 | 65 | We hope you enjoy these updates! We are continually working to improve the platform, so thank **you** for your patience and continued use of Codewars. 66 | -------------------------------------------------------------------------------- /content/2021/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | insert_anchor_links: left 3 | transparent: true 4 | --- 5 | -------------------------------------------------------------------------------- /content/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | insert_anchor_links: left 3 | paginate_by: 5 4 | sort_by: date 5 | title: The Codewars Blog 6 | --- 7 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | publish = "public" 3 | command = "npm run build" 4 | 5 | [build.environment] 6 | ZOLA_VERSION = "0.13.0" 7 | 8 | [context.deploy-preview] 9 | command = "npm run build:netlify-preview" 10 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@codewars/blog", 3 | "version": "0.1.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.12.13", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", 10 | "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", 11 | "requires": { 12 | "@babel/highlight": "^7.12.13" 13 | } 14 | }, 15 | "@babel/helper-validator-identifier": { 16 | "version": "7.14.0", 17 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", 18 | "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" 19 | }, 20 | "@babel/highlight": { 21 | "version": "7.14.0", 22 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", 23 | "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", 24 | "requires": { 25 | "@babel/helper-validator-identifier": "^7.14.0", 26 | "chalk": "^2.0.0", 27 | "js-tokens": "^4.0.0" 28 | } 29 | }, 30 | "@fullhuman/postcss-purgecss": { 31 | "version": "3.1.3", 32 | "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-3.1.3.tgz", 33 | "integrity": "sha512-kwOXw8fZ0Lt1QmeOOrd+o4Ibvp4UTEBFQbzvWldjlKv5n+G9sXfIPn1hh63IQIL8K8vbvv1oYMJiIUbuy9bGaA==", 34 | "requires": { 35 | "purgecss": "^3.1.3" 36 | } 37 | }, 38 | "@nodelib/fs.scandir": { 39 | "version": "2.1.4", 40 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", 41 | "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", 42 | "requires": { 43 | "@nodelib/fs.stat": "2.0.4", 44 | "run-parallel": "^1.1.9" 45 | } 46 | }, 47 | "@nodelib/fs.stat": { 48 | "version": "2.0.4", 49 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", 50 | "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==" 51 | }, 52 | "@nodelib/fs.walk": { 53 | "version": "1.2.6", 54 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", 55 | "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", 56 | "requires": { 57 | "@nodelib/fs.scandir": "2.1.4", 58 | "fastq": "^1.6.0" 59 | } 60 | }, 61 | "@tailwindcss/typography": { 62 | "version": "0.4.0", 63 | "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.4.0.tgz", 64 | "integrity": "sha512-3BfOYT5MYNEq81Ism3L2qu/HRP2Q5vWqZtZRQqQrthHuaTK9qpuPfbMT5WATjAM5J1OePKBaI5pLoX4S1JGNMQ==", 65 | "requires": { 66 | "lodash.castarray": "^4.4.0", 67 | "lodash.isplainobject": "^4.0.6", 68 | "lodash.merge": "^4.6.2", 69 | "lodash.uniq": "^4.5.0" 70 | } 71 | }, 72 | "@trysound/sax": { 73 | "version": "0.1.1", 74 | "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", 75 | "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==" 76 | }, 77 | "@types/normalize-package-data": { 78 | "version": "2.4.0", 79 | "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 80 | "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", 81 | "dev": true 82 | }, 83 | "@types/parse-json": { 84 | "version": "4.0.0", 85 | "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", 86 | "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" 87 | }, 88 | "acorn": { 89 | "version": "7.4.1", 90 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 91 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" 92 | }, 93 | "acorn-node": { 94 | "version": "1.8.2", 95 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 96 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 97 | "requires": { 98 | "acorn": "^7.0.0", 99 | "acorn-walk": "^7.0.0", 100 | "xtend": "^4.0.2" 101 | } 102 | }, 103 | "acorn-walk": { 104 | "version": "7.2.0", 105 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", 106 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" 107 | }, 108 | "alphanum-sort": { 109 | "version": "1.0.2", 110 | "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", 111 | "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" 112 | }, 113 | "ansi-styles": { 114 | "version": "3.2.1", 115 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 116 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 117 | "requires": { 118 | "color-convert": "^1.9.0" 119 | } 120 | }, 121 | "anymatch": { 122 | "version": "3.1.1", 123 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 124 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 125 | "requires": { 126 | "normalize-path": "^3.0.0", 127 | "picomatch": "^2.0.4" 128 | } 129 | }, 130 | "array-union": { 131 | "version": "2.1.0", 132 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 133 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" 134 | }, 135 | "at-least-node": { 136 | "version": "1.0.0", 137 | "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", 138 | "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" 139 | }, 140 | "autoprefixer": { 141 | "version": "10.2.5", 142 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz", 143 | "integrity": "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==", 144 | "requires": { 145 | "browserslist": "^4.16.3", 146 | "caniuse-lite": "^1.0.30001196", 147 | "colorette": "^1.2.2", 148 | "fraction.js": "^4.0.13", 149 | "normalize-range": "^0.1.2", 150 | "postcss-value-parser": "^4.1.0" 151 | }, 152 | "dependencies": { 153 | "browserslist": { 154 | "version": "4.16.6", 155 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", 156 | "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", 157 | "requires": { 158 | "caniuse-lite": "^1.0.30001219", 159 | "colorette": "^1.2.2", 160 | "electron-to-chromium": "^1.3.723", 161 | "escalade": "^3.1.1", 162 | "node-releases": "^1.1.71" 163 | } 164 | }, 165 | "caniuse-lite": { 166 | "version": "1.0.30001221", 167 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001221.tgz", 168 | "integrity": "sha512-b9TOZfND3uGSLjMOrLh8XxSQ41x8mX+9MLJYDM4AAHLfaZHttrLNPrScWjVnBITRZbY5sPpCt7X85n7VSLZ+/g==" 169 | }, 170 | "colorette": { 171 | "version": "1.2.2", 172 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", 173 | "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" 174 | }, 175 | "electron-to-chromium": { 176 | "version": "1.3.726", 177 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.726.tgz", 178 | "integrity": "sha512-dw7WmrSu/JwtACiBzth8cuKf62NKL1xVJuNvyOg0jvruN/n4NLtGYoTzciQquCPNaS2eR+BT5GrxHbslfc/w1w==" 179 | }, 180 | "node-releases": { 181 | "version": "1.1.71", 182 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", 183 | "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" 184 | } 185 | } 186 | }, 187 | "balanced-match": { 188 | "version": "1.0.0", 189 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 190 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 191 | }, 192 | "binary-extensions": { 193 | "version": "2.1.0", 194 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", 195 | "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" 196 | }, 197 | "boolbase": { 198 | "version": "1.0.0", 199 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 200 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" 201 | }, 202 | "brace-expansion": { 203 | "version": "1.1.11", 204 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 205 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 206 | "requires": { 207 | "balanced-match": "^1.0.0", 208 | "concat-map": "0.0.1" 209 | } 210 | }, 211 | "braces": { 212 | "version": "3.0.2", 213 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 214 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 215 | "requires": { 216 | "fill-range": "^7.0.1" 217 | } 218 | }, 219 | "browserslist": { 220 | "version": "4.16.6", 221 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", 222 | "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", 223 | "requires": { 224 | "caniuse-lite": "^1.0.30001219", 225 | "colorette": "^1.2.2", 226 | "electron-to-chromium": "^1.3.723", 227 | "escalade": "^3.1.1", 228 | "node-releases": "^1.1.71" 229 | }, 230 | "dependencies": { 231 | "colorette": { 232 | "version": "1.2.2", 233 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", 234 | "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" 235 | } 236 | } 237 | }, 238 | "bytes": { 239 | "version": "3.1.0", 240 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 241 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 242 | }, 243 | "camelcase-css": { 244 | "version": "2.0.1", 245 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 246 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" 247 | }, 248 | "caniuse-api": { 249 | "version": "3.0.0", 250 | "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", 251 | "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", 252 | "requires": { 253 | "browserslist": "^4.0.0", 254 | "caniuse-lite": "^1.0.0", 255 | "lodash.memoize": "^4.1.2", 256 | "lodash.uniq": "^4.5.0" 257 | } 258 | }, 259 | "caniuse-lite": { 260 | "version": "1.0.30001221", 261 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001221.tgz", 262 | "integrity": "sha512-b9TOZfND3uGSLjMOrLh8XxSQ41x8mX+9MLJYDM4AAHLfaZHttrLNPrScWjVnBITRZbY5sPpCt7X85n7VSLZ+/g==" 263 | }, 264 | "chalk": { 265 | "version": "2.4.2", 266 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 267 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 268 | "requires": { 269 | "ansi-styles": "^3.2.1", 270 | "escape-string-regexp": "^1.0.5", 271 | "supports-color": "^5.3.0" 272 | } 273 | }, 274 | "chokidar": { 275 | "version": "3.5.1", 276 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", 277 | "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", 278 | "requires": { 279 | "anymatch": "~3.1.1", 280 | "braces": "~3.0.2", 281 | "fsevents": "~2.3.1", 282 | "glob-parent": "~5.1.0", 283 | "is-binary-path": "~2.1.0", 284 | "is-glob": "~4.0.1", 285 | "normalize-path": "~3.0.0", 286 | "readdirp": "~3.5.0" 287 | } 288 | }, 289 | "cliui": { 290 | "version": "7.0.4", 291 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 292 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 293 | "requires": { 294 | "string-width": "^4.2.0", 295 | "strip-ansi": "^6.0.0", 296 | "wrap-ansi": "^7.0.0" 297 | }, 298 | "dependencies": { 299 | "ansi-regex": { 300 | "version": "5.0.0", 301 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 302 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" 303 | }, 304 | "strip-ansi": { 305 | "version": "6.0.0", 306 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 307 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 308 | "requires": { 309 | "ansi-regex": "^5.0.0" 310 | } 311 | } 312 | } 313 | }, 314 | "color": { 315 | "version": "3.1.3", 316 | "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", 317 | "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", 318 | "requires": { 319 | "color-convert": "^1.9.1", 320 | "color-string": "^1.5.4" 321 | } 322 | }, 323 | "color-convert": { 324 | "version": "1.9.3", 325 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 326 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 327 | "requires": { 328 | "color-name": "1.1.3" 329 | } 330 | }, 331 | "color-name": { 332 | "version": "1.1.3", 333 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 334 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 335 | }, 336 | "color-string": { 337 | "version": "1.5.4", 338 | "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", 339 | "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", 340 | "requires": { 341 | "color-name": "^1.0.0", 342 | "simple-swizzle": "^0.2.2" 343 | } 344 | }, 345 | "colorette": { 346 | "version": "1.2.1", 347 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", 348 | "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" 349 | }, 350 | "commander": { 351 | "version": "6.2.1", 352 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", 353 | "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" 354 | }, 355 | "concat-map": { 356 | "version": "0.0.1", 357 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 358 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 359 | }, 360 | "concurrently": { 361 | "version": "6.0.2", 362 | "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.0.2.tgz", 363 | "integrity": "sha512-u+1Q0dJG5BidgUTpz9CU16yoHTt/oApFDQ3mbvHwSDgMjU7aGqy0q8ZQyaZyaNxdwRKTD872Ux3Twc6//sWA+Q==", 364 | "dev": true, 365 | "requires": { 366 | "chalk": "^4.1.0", 367 | "date-fns": "^2.16.1", 368 | "lodash": "^4.17.21", 369 | "read-pkg": "^5.2.0", 370 | "rxjs": "^6.6.3", 371 | "spawn-command": "^0.0.2-1", 372 | "supports-color": "^8.1.0", 373 | "tree-kill": "^1.2.2", 374 | "yargs": "^16.2.0" 375 | }, 376 | "dependencies": { 377 | "ansi-styles": { 378 | "version": "4.3.0", 379 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 380 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 381 | "dev": true, 382 | "requires": { 383 | "color-convert": "^2.0.1" 384 | } 385 | }, 386 | "chalk": { 387 | "version": "4.1.1", 388 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", 389 | "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", 390 | "dev": true, 391 | "requires": { 392 | "ansi-styles": "^4.1.0", 393 | "supports-color": "^7.1.0" 394 | }, 395 | "dependencies": { 396 | "supports-color": { 397 | "version": "7.2.0", 398 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 399 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 400 | "dev": true, 401 | "requires": { 402 | "has-flag": "^4.0.0" 403 | } 404 | } 405 | } 406 | }, 407 | "color-convert": { 408 | "version": "2.0.1", 409 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 410 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 411 | "dev": true, 412 | "requires": { 413 | "color-name": "~1.1.4" 414 | } 415 | }, 416 | "color-name": { 417 | "version": "1.1.4", 418 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 419 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 420 | "dev": true 421 | }, 422 | "has-flag": { 423 | "version": "4.0.0", 424 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 425 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 426 | "dev": true 427 | }, 428 | "supports-color": { 429 | "version": "8.1.1", 430 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 431 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 432 | "dev": true, 433 | "requires": { 434 | "has-flag": "^4.0.0" 435 | } 436 | } 437 | } 438 | }, 439 | "cosmiconfig": { 440 | "version": "7.0.0", 441 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", 442 | "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", 443 | "requires": { 444 | "@types/parse-json": "^4.0.0", 445 | "import-fresh": "^3.2.1", 446 | "parse-json": "^5.0.0", 447 | "path-type": "^4.0.0", 448 | "yaml": "^1.10.0" 449 | }, 450 | "dependencies": { 451 | "parse-json": { 452 | "version": "5.2.0", 453 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 454 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 455 | "requires": { 456 | "@babel/code-frame": "^7.0.0", 457 | "error-ex": "^1.3.1", 458 | "json-parse-even-better-errors": "^2.3.0", 459 | "lines-and-columns": "^1.1.6" 460 | } 461 | } 462 | } 463 | }, 464 | "css-color-names": { 465 | "version": "1.0.1", 466 | "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", 467 | "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==" 468 | }, 469 | "css-declaration-sorter": { 470 | "version": "6.0.0", 471 | "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.0.tgz", 472 | "integrity": "sha512-S0TE4E0ha5+tBHdLWPc5n+S8E4dFBS5xScPvgHkLNZwWvX4ISoFGhGeerLC9uS1cKA/sC+K2wHq6qEbcagT/fg==", 473 | "requires": { 474 | "timsort": "^0.3.0" 475 | } 476 | }, 477 | "css-select": { 478 | "version": "3.1.2", 479 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", 480 | "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", 481 | "requires": { 482 | "boolbase": "^1.0.0", 483 | "css-what": "^4.0.0", 484 | "domhandler": "^4.0.0", 485 | "domutils": "^2.4.3", 486 | "nth-check": "^2.0.0" 487 | } 488 | }, 489 | "css-tree": { 490 | "version": "1.1.3", 491 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", 492 | "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", 493 | "requires": { 494 | "mdn-data": "2.0.14", 495 | "source-map": "^0.6.1" 496 | } 497 | }, 498 | "css-unit-converter": { 499 | "version": "1.1.2", 500 | "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", 501 | "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" 502 | }, 503 | "css-what": { 504 | "version": "4.0.0", 505 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", 506 | "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==" 507 | }, 508 | "cssesc": { 509 | "version": "3.0.0", 510 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 511 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" 512 | }, 513 | "cssnano": { 514 | "version": "5.0.2", 515 | "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.2.tgz", 516 | "integrity": "sha512-8JK3EnPsjQsULme9/e5M2hF564f/480hwsdcHvQ7ZtAIMfQ1O3SCfs+b8Mjf5KJxhYApyRshR2QSovEJi2K72Q==", 517 | "requires": { 518 | "cosmiconfig": "^7.0.0", 519 | "cssnano-preset-default": "^5.0.1", 520 | "is-resolvable": "^1.1.0" 521 | } 522 | }, 523 | "cssnano-preset-default": { 524 | "version": "5.0.1", 525 | "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.0.1.tgz", 526 | "integrity": "sha512-cfmfThYODGqhpQKDq9H0MTAqkMvZ3dGbOUTBKw0xWZiIycMqHid22LsJXJl4r1qX4qzDeKxcSyQ/Xb5Mu3Z//Q==", 527 | "requires": { 528 | "css-declaration-sorter": "6.0.0", 529 | "cssnano-utils": "^2.0.0", 530 | "postcss-calc": "^8.0.0", 531 | "postcss-colormin": "^5.0.0", 532 | "postcss-convert-values": "^5.0.0", 533 | "postcss-discard-comments": "^5.0.0", 534 | "postcss-discard-duplicates": "^5.0.0", 535 | "postcss-discard-empty": "^5.0.0", 536 | "postcss-discard-overridden": "^5.0.0", 537 | "postcss-merge-longhand": "^5.0.1", 538 | "postcss-merge-rules": "^5.0.0", 539 | "postcss-minify-font-values": "^5.0.0", 540 | "postcss-minify-gradients": "^5.0.0", 541 | "postcss-minify-params": "^5.0.0", 542 | "postcss-minify-selectors": "^5.0.0", 543 | "postcss-normalize-charset": "^5.0.0", 544 | "postcss-normalize-display-values": "^5.0.0", 545 | "postcss-normalize-positions": "^5.0.0", 546 | "postcss-normalize-repeat-style": "^5.0.0", 547 | "postcss-normalize-string": "^5.0.0", 548 | "postcss-normalize-timing-functions": "^5.0.0", 549 | "postcss-normalize-unicode": "^5.0.0", 550 | "postcss-normalize-url": "^5.0.0", 551 | "postcss-normalize-whitespace": "^5.0.0", 552 | "postcss-ordered-values": "^5.0.0", 553 | "postcss-reduce-initial": "^5.0.0", 554 | "postcss-reduce-transforms": "^5.0.0", 555 | "postcss-svgo": "^5.0.0", 556 | "postcss-unique-selectors": "^5.0.0" 557 | } 558 | }, 559 | "cssnano-utils": { 560 | "version": "2.0.0", 561 | "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.0.tgz", 562 | "integrity": "sha512-xvxmTszdrvSyTACdPe8VU5J6p4sm3egpgw54dILvNqt5eBUv6TFjACLhSxtRuEsxYrgy8uDy269YjScO5aKbGA==" 563 | }, 564 | "csso": { 565 | "version": "4.2.0", 566 | "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", 567 | "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", 568 | "requires": { 569 | "css-tree": "^1.1.2" 570 | } 571 | }, 572 | "date-fns": { 573 | "version": "2.21.1", 574 | "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.21.1.tgz", 575 | "integrity": "sha512-m1WR0xGiC6j6jNFAyW4Nvh4WxAi4JF4w9jRJwSI8nBmNcyZXPcP9VUQG+6gHQXAmqaGEKDKhOqAtENDC941UkA==", 576 | "dev": true 577 | }, 578 | "defined": { 579 | "version": "1.0.0", 580 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 581 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" 582 | }, 583 | "dependency-graph": { 584 | "version": "0.9.0", 585 | "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.9.0.tgz", 586 | "integrity": "sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w==" 587 | }, 588 | "detective": { 589 | "version": "5.2.0", 590 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", 591 | "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", 592 | "requires": { 593 | "acorn-node": "^1.6.1", 594 | "defined": "^1.0.0", 595 | "minimist": "^1.1.1" 596 | } 597 | }, 598 | "didyoumean": { 599 | "version": "1.2.1", 600 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz", 601 | "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=" 602 | }, 603 | "dir-glob": { 604 | "version": "3.0.1", 605 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 606 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 607 | "requires": { 608 | "path-type": "^4.0.0" 609 | } 610 | }, 611 | "dlv": { 612 | "version": "1.1.3", 613 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 614 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" 615 | }, 616 | "dom-serializer": { 617 | "version": "1.3.1", 618 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz", 619 | "integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==", 620 | "requires": { 621 | "domelementtype": "^2.0.1", 622 | "domhandler": "^4.0.0", 623 | "entities": "^2.0.0" 624 | } 625 | }, 626 | "domelementtype": { 627 | "version": "2.2.0", 628 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", 629 | "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" 630 | }, 631 | "domhandler": { 632 | "version": "4.2.0", 633 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", 634 | "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", 635 | "requires": { 636 | "domelementtype": "^2.2.0" 637 | } 638 | }, 639 | "domutils": { 640 | "version": "2.6.0", 641 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", 642 | "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", 643 | "requires": { 644 | "dom-serializer": "^1.0.1", 645 | "domelementtype": "^2.2.0", 646 | "domhandler": "^4.2.0" 647 | } 648 | }, 649 | "dot-prop": { 650 | "version": "5.3.0", 651 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", 652 | "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", 653 | "requires": { 654 | "is-obj": "^2.0.0" 655 | } 656 | }, 657 | "electron-to-chromium": { 658 | "version": "1.3.726", 659 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.726.tgz", 660 | "integrity": "sha512-dw7WmrSu/JwtACiBzth8cuKf62NKL1xVJuNvyOg0jvruN/n4NLtGYoTzciQquCPNaS2eR+BT5GrxHbslfc/w1w==" 661 | }, 662 | "emoji-regex": { 663 | "version": "8.0.0", 664 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 665 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 666 | }, 667 | "entities": { 668 | "version": "2.2.0", 669 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 670 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" 671 | }, 672 | "error-ex": { 673 | "version": "1.3.2", 674 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 675 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 676 | "requires": { 677 | "is-arrayish": "^0.2.1" 678 | } 679 | }, 680 | "escalade": { 681 | "version": "3.1.1", 682 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 683 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 684 | }, 685 | "escape-string-regexp": { 686 | "version": "1.0.5", 687 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 688 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 689 | }, 690 | "fast-glob": { 691 | "version": "3.2.5", 692 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", 693 | "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", 694 | "requires": { 695 | "@nodelib/fs.stat": "^2.0.2", 696 | "@nodelib/fs.walk": "^1.2.3", 697 | "glob-parent": "^5.1.0", 698 | "merge2": "^1.3.0", 699 | "micromatch": "^4.0.2", 700 | "picomatch": "^2.2.1" 701 | } 702 | }, 703 | "fastq": { 704 | "version": "1.10.0", 705 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", 706 | "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", 707 | "requires": { 708 | "reusify": "^1.0.4" 709 | } 710 | }, 711 | "fill-range": { 712 | "version": "7.0.1", 713 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 714 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 715 | "requires": { 716 | "to-regex-range": "^5.0.1" 717 | } 718 | }, 719 | "fraction.js": { 720 | "version": "4.0.13", 721 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz", 722 | "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==" 723 | }, 724 | "fs-extra": { 725 | "version": "9.0.1", 726 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", 727 | "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", 728 | "requires": { 729 | "at-least-node": "^1.0.0", 730 | "graceful-fs": "^4.2.0", 731 | "jsonfile": "^6.0.1", 732 | "universalify": "^1.0.0" 733 | } 734 | }, 735 | "fs.realpath": { 736 | "version": "1.0.0", 737 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 738 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 739 | }, 740 | "fsevents": { 741 | "version": "2.3.1", 742 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", 743 | "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", 744 | "optional": true 745 | }, 746 | "function-bind": { 747 | "version": "1.1.1", 748 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 749 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 750 | }, 751 | "get-caller-file": { 752 | "version": "2.0.5", 753 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 754 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 755 | }, 756 | "get-stdin": { 757 | "version": "8.0.0", 758 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", 759 | "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==" 760 | }, 761 | "glob": { 762 | "version": "7.1.6", 763 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 764 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 765 | "requires": { 766 | "fs.realpath": "^1.0.0", 767 | "inflight": "^1.0.4", 768 | "inherits": "2", 769 | "minimatch": "^3.0.4", 770 | "once": "^1.3.0", 771 | "path-is-absolute": "^1.0.0" 772 | } 773 | }, 774 | "glob-base": { 775 | "version": "0.3.0", 776 | "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", 777 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", 778 | "requires": { 779 | "glob-parent": "^2.0.0", 780 | "is-glob": "^2.0.0" 781 | }, 782 | "dependencies": { 783 | "glob-parent": { 784 | "version": "2.0.0", 785 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", 786 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", 787 | "requires": { 788 | "is-glob": "^2.0.0" 789 | } 790 | }, 791 | "is-extglob": { 792 | "version": "1.0.0", 793 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", 794 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" 795 | }, 796 | "is-glob": { 797 | "version": "2.0.1", 798 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", 799 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", 800 | "requires": { 801 | "is-extglob": "^1.0.0" 802 | } 803 | } 804 | } 805 | }, 806 | "glob-parent": { 807 | "version": "5.1.1", 808 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 809 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 810 | "requires": { 811 | "is-glob": "^4.0.1" 812 | } 813 | }, 814 | "globby": { 815 | "version": "11.0.3", 816 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", 817 | "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", 818 | "requires": { 819 | "array-union": "^2.1.0", 820 | "dir-glob": "^3.0.1", 821 | "fast-glob": "^3.1.1", 822 | "ignore": "^5.1.4", 823 | "merge2": "^1.3.0", 824 | "slash": "^3.0.0" 825 | } 826 | }, 827 | "graceful-fs": { 828 | "version": "4.2.4", 829 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 830 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" 831 | }, 832 | "has": { 833 | "version": "1.0.3", 834 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 835 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 836 | "requires": { 837 | "function-bind": "^1.1.1" 838 | } 839 | }, 840 | "has-flag": { 841 | "version": "3.0.0", 842 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 843 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 844 | }, 845 | "hex-color-regex": { 846 | "version": "1.1.0", 847 | "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", 848 | "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" 849 | }, 850 | "hosted-git-info": { 851 | "version": "2.8.9", 852 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", 853 | "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", 854 | "dev": true 855 | }, 856 | "hsl-regex": { 857 | "version": "1.0.0", 858 | "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", 859 | "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" 860 | }, 861 | "hsla-regex": { 862 | "version": "1.0.0", 863 | "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", 864 | "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" 865 | }, 866 | "html-tags": { 867 | "version": "3.1.0", 868 | "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", 869 | "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" 870 | }, 871 | "ignore": { 872 | "version": "5.1.8", 873 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", 874 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" 875 | }, 876 | "import-cwd": { 877 | "version": "3.0.0", 878 | "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", 879 | "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", 880 | "requires": { 881 | "import-from": "^3.0.0" 882 | } 883 | }, 884 | "import-fresh": { 885 | "version": "3.3.0", 886 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 887 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 888 | "requires": { 889 | "parent-module": "^1.0.0", 890 | "resolve-from": "^4.0.0" 891 | } 892 | }, 893 | "import-from": { 894 | "version": "3.0.0", 895 | "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", 896 | "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", 897 | "requires": { 898 | "resolve-from": "^5.0.0" 899 | }, 900 | "dependencies": { 901 | "resolve-from": { 902 | "version": "5.0.0", 903 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 904 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" 905 | } 906 | } 907 | }, 908 | "indexes-of": { 909 | "version": "1.0.1", 910 | "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", 911 | "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" 912 | }, 913 | "inflight": { 914 | "version": "1.0.6", 915 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 916 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 917 | "requires": { 918 | "once": "^1.3.0", 919 | "wrappy": "1" 920 | } 921 | }, 922 | "inherits": { 923 | "version": "2.0.4", 924 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 925 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 926 | }, 927 | "is-absolute-url": { 928 | "version": "3.0.3", 929 | "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", 930 | "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" 931 | }, 932 | "is-arrayish": { 933 | "version": "0.2.1", 934 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 935 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" 936 | }, 937 | "is-binary-path": { 938 | "version": "2.1.0", 939 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 940 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 941 | "requires": { 942 | "binary-extensions": "^2.0.0" 943 | } 944 | }, 945 | "is-color-stop": { 946 | "version": "1.1.0", 947 | "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", 948 | "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", 949 | "requires": { 950 | "css-color-names": "^0.0.4", 951 | "hex-color-regex": "^1.1.0", 952 | "hsl-regex": "^1.0.0", 953 | "hsla-regex": "^1.0.0", 954 | "rgb-regex": "^1.0.1", 955 | "rgba-regex": "^1.0.0" 956 | }, 957 | "dependencies": { 958 | "css-color-names": { 959 | "version": "0.0.4", 960 | "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", 961 | "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" 962 | } 963 | } 964 | }, 965 | "is-core-module": { 966 | "version": "2.2.0", 967 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", 968 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", 969 | "requires": { 970 | "has": "^1.0.3" 971 | } 972 | }, 973 | "is-dotfile": { 974 | "version": "1.0.3", 975 | "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", 976 | "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" 977 | }, 978 | "is-extglob": { 979 | "version": "2.1.1", 980 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 981 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 982 | }, 983 | "is-fullwidth-code-point": { 984 | "version": "3.0.0", 985 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 986 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 987 | }, 988 | "is-glob": { 989 | "version": "4.0.1", 990 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 991 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 992 | "requires": { 993 | "is-extglob": "^2.1.1" 994 | } 995 | }, 996 | "is-number": { 997 | "version": "7.0.0", 998 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 999 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 1000 | }, 1001 | "is-obj": { 1002 | "version": "2.0.0", 1003 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", 1004 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" 1005 | }, 1006 | "is-resolvable": { 1007 | "version": "1.1.0", 1008 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", 1009 | "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" 1010 | }, 1011 | "js-tokens": { 1012 | "version": "4.0.0", 1013 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1014 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1015 | }, 1016 | "json-parse-even-better-errors": { 1017 | "version": "2.3.1", 1018 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1019 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" 1020 | }, 1021 | "jsonfile": { 1022 | "version": "6.1.0", 1023 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 1024 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 1025 | "requires": { 1026 | "graceful-fs": "^4.1.6", 1027 | "universalify": "^2.0.0" 1028 | }, 1029 | "dependencies": { 1030 | "universalify": { 1031 | "version": "2.0.0", 1032 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 1033 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" 1034 | } 1035 | } 1036 | }, 1037 | "lines-and-columns": { 1038 | "version": "1.1.6", 1039 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", 1040 | "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" 1041 | }, 1042 | "lodash": { 1043 | "version": "4.17.21", 1044 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1045 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1046 | "dev": true 1047 | }, 1048 | "lodash.castarray": { 1049 | "version": "4.4.0", 1050 | "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", 1051 | "integrity": "sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU=" 1052 | }, 1053 | "lodash.difference": { 1054 | "version": "4.5.0", 1055 | "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", 1056 | "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" 1057 | }, 1058 | "lodash.forown": { 1059 | "version": "4.4.0", 1060 | "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-4.4.0.tgz", 1061 | "integrity": "sha1-hRFc8E9z75ZuztUlEdOJPMRmg68=" 1062 | }, 1063 | "lodash.get": { 1064 | "version": "4.4.2", 1065 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 1066 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" 1067 | }, 1068 | "lodash.groupby": { 1069 | "version": "4.6.0", 1070 | "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", 1071 | "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" 1072 | }, 1073 | "lodash.isplainobject": { 1074 | "version": "4.0.6", 1075 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 1076 | "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" 1077 | }, 1078 | "lodash.memoize": { 1079 | "version": "4.1.2", 1080 | "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", 1081 | "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" 1082 | }, 1083 | "lodash.merge": { 1084 | "version": "4.6.2", 1085 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1086 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" 1087 | }, 1088 | "lodash.sortby": { 1089 | "version": "4.7.0", 1090 | "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", 1091 | "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" 1092 | }, 1093 | "lodash.toarray": { 1094 | "version": "4.4.0", 1095 | "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", 1096 | "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" 1097 | }, 1098 | "lodash.topath": { 1099 | "version": "4.5.2", 1100 | "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", 1101 | "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=" 1102 | }, 1103 | "lodash.uniq": { 1104 | "version": "4.5.0", 1105 | "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", 1106 | "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" 1107 | }, 1108 | "mdn-data": { 1109 | "version": "2.0.14", 1110 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", 1111 | "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" 1112 | }, 1113 | "merge2": { 1114 | "version": "1.4.1", 1115 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1116 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" 1117 | }, 1118 | "micromatch": { 1119 | "version": "4.0.2", 1120 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", 1121 | "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", 1122 | "requires": { 1123 | "braces": "^3.0.1", 1124 | "picomatch": "^2.0.5" 1125 | } 1126 | }, 1127 | "minimatch": { 1128 | "version": "3.0.4", 1129 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1130 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1131 | "requires": { 1132 | "brace-expansion": "^1.1.7" 1133 | } 1134 | }, 1135 | "minimist": { 1136 | "version": "1.2.5", 1137 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1138 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 1139 | }, 1140 | "modern-normalize": { 1141 | "version": "1.0.0", 1142 | "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.0.0.tgz", 1143 | "integrity": "sha512-1lM+BMLGuDfsdwf3rsgBSrxJwAZHFIrQ8YR61xIqdHo0uNKI9M52wNpHSrliZATJp51On6JD0AfRxd4YGSU0lw==" 1144 | }, 1145 | "nanoid": { 1146 | "version": "3.1.20", 1147 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", 1148 | "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" 1149 | }, 1150 | "node-emoji": { 1151 | "version": "1.10.0", 1152 | "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", 1153 | "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", 1154 | "requires": { 1155 | "lodash.toarray": "^4.4.0" 1156 | } 1157 | }, 1158 | "node-releases": { 1159 | "version": "1.1.71", 1160 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", 1161 | "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" 1162 | }, 1163 | "normalize-package-data": { 1164 | "version": "2.5.0", 1165 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 1166 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 1167 | "dev": true, 1168 | "requires": { 1169 | "hosted-git-info": "^2.1.4", 1170 | "resolve": "^1.10.0", 1171 | "semver": "2 || 3 || 4 || 5", 1172 | "validate-npm-package-license": "^3.0.1" 1173 | } 1174 | }, 1175 | "normalize-path": { 1176 | "version": "3.0.0", 1177 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1178 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 1179 | }, 1180 | "normalize-range": { 1181 | "version": "0.1.2", 1182 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 1183 | "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" 1184 | }, 1185 | "normalize-url": { 1186 | "version": "4.5.0", 1187 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", 1188 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" 1189 | }, 1190 | "nth-check": { 1191 | "version": "2.0.0", 1192 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", 1193 | "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", 1194 | "requires": { 1195 | "boolbase": "^1.0.0" 1196 | } 1197 | }, 1198 | "object-assign": { 1199 | "version": "4.1.1", 1200 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1201 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1202 | }, 1203 | "object-hash": { 1204 | "version": "2.1.1", 1205 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.1.1.tgz", 1206 | "integrity": "sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==" 1207 | }, 1208 | "once": { 1209 | "version": "1.4.0", 1210 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1211 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1212 | "requires": { 1213 | "wrappy": "1" 1214 | } 1215 | }, 1216 | "parent-module": { 1217 | "version": "1.0.1", 1218 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1219 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1220 | "requires": { 1221 | "callsites": "^3.0.0" 1222 | }, 1223 | "dependencies": { 1224 | "callsites": { 1225 | "version": "3.1.0", 1226 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1227 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" 1228 | } 1229 | } 1230 | }, 1231 | "parse-glob": { 1232 | "version": "3.0.4", 1233 | "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", 1234 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", 1235 | "requires": { 1236 | "glob-base": "^0.3.0", 1237 | "is-dotfile": "^1.0.0", 1238 | "is-extglob": "^1.0.0", 1239 | "is-glob": "^2.0.0" 1240 | }, 1241 | "dependencies": { 1242 | "is-extglob": { 1243 | "version": "1.0.0", 1244 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", 1245 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" 1246 | }, 1247 | "is-glob": { 1248 | "version": "2.0.1", 1249 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", 1250 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", 1251 | "requires": { 1252 | "is-extglob": "^1.0.0" 1253 | } 1254 | } 1255 | } 1256 | }, 1257 | "parse-json": { 1258 | "version": "5.2.0", 1259 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 1260 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 1261 | "dev": true, 1262 | "requires": { 1263 | "@babel/code-frame": "^7.0.0", 1264 | "error-ex": "^1.3.1", 1265 | "json-parse-even-better-errors": "^2.3.0", 1266 | "lines-and-columns": "^1.1.6" 1267 | } 1268 | }, 1269 | "path-is-absolute": { 1270 | "version": "1.0.1", 1271 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1272 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1273 | }, 1274 | "path-parse": { 1275 | "version": "1.0.6", 1276 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1277 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" 1278 | }, 1279 | "path-type": { 1280 | "version": "4.0.0", 1281 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1282 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" 1283 | }, 1284 | "picomatch": { 1285 | "version": "2.2.2", 1286 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 1287 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" 1288 | }, 1289 | "pify": { 1290 | "version": "2.3.0", 1291 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1292 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" 1293 | }, 1294 | "postcss": { 1295 | "version": "8.2.13", 1296 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.13.tgz", 1297 | "integrity": "sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ==", 1298 | "requires": { 1299 | "colorette": "^1.2.2", 1300 | "nanoid": "^3.1.22", 1301 | "source-map": "^0.6.1" 1302 | }, 1303 | "dependencies": { 1304 | "colorette": { 1305 | "version": "1.2.2", 1306 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", 1307 | "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" 1308 | }, 1309 | "nanoid": { 1310 | "version": "3.1.22", 1311 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", 1312 | "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==" 1313 | } 1314 | } 1315 | }, 1316 | "postcss-calc": { 1317 | "version": "8.0.0", 1318 | "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", 1319 | "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", 1320 | "requires": { 1321 | "postcss-selector-parser": "^6.0.2", 1322 | "postcss-value-parser": "^4.0.2" 1323 | } 1324 | }, 1325 | "postcss-cli": { 1326 | "version": "8.3.1", 1327 | "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-8.3.1.tgz", 1328 | "integrity": "sha512-leHXsQRq89S3JC9zw/tKyiVV2jAhnfQe0J8VI4eQQbUjwIe0XxVqLrR+7UsahF1s9wi4GlqP6SJ8ydf44cgF2Q==", 1329 | "requires": { 1330 | "chalk": "^4.0.0", 1331 | "chokidar": "^3.3.0", 1332 | "dependency-graph": "^0.9.0", 1333 | "fs-extra": "^9.0.0", 1334 | "get-stdin": "^8.0.0", 1335 | "globby": "^11.0.0", 1336 | "postcss-load-config": "^3.0.0", 1337 | "postcss-reporter": "^7.0.0", 1338 | "pretty-hrtime": "^1.0.3", 1339 | "read-cache": "^1.0.0", 1340 | "slash": "^3.0.0", 1341 | "yargs": "^16.0.0" 1342 | }, 1343 | "dependencies": { 1344 | "ansi-styles": { 1345 | "version": "4.3.0", 1346 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1347 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1348 | "requires": { 1349 | "color-convert": "^2.0.1" 1350 | } 1351 | }, 1352 | "chalk": { 1353 | "version": "4.1.1", 1354 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", 1355 | "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", 1356 | "requires": { 1357 | "ansi-styles": "^4.1.0", 1358 | "supports-color": "^7.1.0" 1359 | } 1360 | }, 1361 | "color-convert": { 1362 | "version": "2.0.1", 1363 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1364 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1365 | "requires": { 1366 | "color-name": "~1.1.4" 1367 | } 1368 | }, 1369 | "color-name": { 1370 | "version": "1.1.4", 1371 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1372 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 1373 | }, 1374 | "has-flag": { 1375 | "version": "4.0.0", 1376 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1377 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 1378 | }, 1379 | "supports-color": { 1380 | "version": "7.2.0", 1381 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1382 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1383 | "requires": { 1384 | "has-flag": "^4.0.0" 1385 | } 1386 | } 1387 | } 1388 | }, 1389 | "postcss-colormin": { 1390 | "version": "5.0.0", 1391 | "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.0.0.tgz", 1392 | "integrity": "sha512-Yt84+5V6CgS/AhK7d7MA58vG8dSZ7+ytlRtWLaQhag3HXOncTfmYpuUOX4cDoXjvLfw1sHRCHMiBjYhc35CymQ==", 1393 | "requires": { 1394 | "browserslist": "^4.16.0", 1395 | "color": "^3.1.1", 1396 | "postcss-value-parser": "^4.1.0" 1397 | } 1398 | }, 1399 | "postcss-convert-values": { 1400 | "version": "5.0.0", 1401 | "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.0.tgz", 1402 | "integrity": "sha512-V5kmYm4xoBAjNs+eHY/6XzXJkkGeg4kwNf2ocfqhLb1WBPEa4oaSmoi1fnVO7Dkblqvus9h+AenDvhCKUCK7uQ==", 1403 | "requires": { 1404 | "postcss-value-parser": "^4.1.0" 1405 | } 1406 | }, 1407 | "postcss-discard-comments": { 1408 | "version": "5.0.0", 1409 | "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.0.tgz", 1410 | "integrity": "sha512-Umig6Gxs8m20RihiXY6QkePd6mp4FxkA1Dg+f/Kd6uw0gEMfKRjDeQOyFkLibexbJJGHpE3lrN/Q0R9SMrUMbQ==" 1411 | }, 1412 | "postcss-discard-duplicates": { 1413 | "version": "5.0.0", 1414 | "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.0.tgz", 1415 | "integrity": "sha512-vEJJ+Y3pFUnO1FyCBA6PSisGjHtnphL3V6GsNvkASq/VkP3OX5/No5RYXXLxHa2QegStNzg6HYrYdo71uR4caQ==" 1416 | }, 1417 | "postcss-discard-empty": { 1418 | "version": "5.0.0", 1419 | "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.0.tgz", 1420 | "integrity": "sha512-+wigy099Y1xZxG36WG5L1f2zeH1oicntkJEW4TDIqKKDO2g9XVB3OhoiHTu08rDEjLnbcab4rw0BAccwi2VjiQ==" 1421 | }, 1422 | "postcss-discard-overridden": { 1423 | "version": "5.0.0", 1424 | "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.0.tgz", 1425 | "integrity": "sha512-hybnScTaZM2iEA6kzVQ6Spozy7kVdLw+lGw8hftLlBEzt93uzXoltkYp9u0tI8xbfhxDLTOOzHsHQCkYdmzRUg==" 1426 | }, 1427 | "postcss-functions": { 1428 | "version": "3.0.0", 1429 | "resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz", 1430 | "integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=", 1431 | "requires": { 1432 | "glob": "^7.1.2", 1433 | "object-assign": "^4.1.1", 1434 | "postcss": "^6.0.9", 1435 | "postcss-value-parser": "^3.3.0" 1436 | }, 1437 | "dependencies": { 1438 | "postcss": { 1439 | "version": "6.0.23", 1440 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", 1441 | "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", 1442 | "requires": { 1443 | "chalk": "^2.4.1", 1444 | "source-map": "^0.6.1", 1445 | "supports-color": "^5.4.0" 1446 | } 1447 | }, 1448 | "postcss-value-parser": { 1449 | "version": "3.3.1", 1450 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1451 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" 1452 | } 1453 | } 1454 | }, 1455 | "postcss-load-config": { 1456 | "version": "3.0.1", 1457 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.1.tgz", 1458 | "integrity": "sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ==", 1459 | "requires": { 1460 | "cosmiconfig": "^7.0.0", 1461 | "import-cwd": "^3.0.0" 1462 | }, 1463 | "dependencies": { 1464 | "cosmiconfig": { 1465 | "version": "7.0.0", 1466 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", 1467 | "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", 1468 | "requires": { 1469 | "@types/parse-json": "^4.0.0", 1470 | "import-fresh": "^3.2.1", 1471 | "parse-json": "^5.0.0", 1472 | "path-type": "^4.0.0", 1473 | "yaml": "^1.10.0" 1474 | } 1475 | }, 1476 | "import-fresh": { 1477 | "version": "3.3.0", 1478 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1479 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1480 | "requires": { 1481 | "parent-module": "^1.0.0", 1482 | "resolve-from": "^4.0.0" 1483 | } 1484 | }, 1485 | "parse-json": { 1486 | "version": "5.2.0", 1487 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 1488 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 1489 | "requires": { 1490 | "@babel/code-frame": "^7.0.0", 1491 | "error-ex": "^1.3.1", 1492 | "json-parse-even-better-errors": "^2.3.0", 1493 | "lines-and-columns": "^1.1.6" 1494 | } 1495 | }, 1496 | "resolve-from": { 1497 | "version": "4.0.0", 1498 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1499 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" 1500 | } 1501 | } 1502 | }, 1503 | "postcss-merge-longhand": { 1504 | "version": "5.0.1", 1505 | "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.1.tgz", 1506 | "integrity": "sha512-H1RO8le5deFGumQzuhJjuL0bIXPRysa+w7xtk5KrHe38oiaSS9ksPXDo24+IOS3SETPhip0J5+1uCOW+ALs3Yw==", 1507 | "requires": { 1508 | "css-color-names": "^1.0.1", 1509 | "postcss-value-parser": "^4.1.0", 1510 | "stylehacks": "^5.0.0" 1511 | } 1512 | }, 1513 | "postcss-merge-rules": { 1514 | "version": "5.0.0", 1515 | "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.0.tgz", 1516 | "integrity": "sha512-TfsXbKjNYCGfUPEXGIGPySnMiJbdS+3gcVeV8gwmJP4RajyKZHW8E0FYDL1WmggTj3hi+m+WUCAvqRpX2ut4Kg==", 1517 | "requires": { 1518 | "browserslist": "^4.16.0", 1519 | "caniuse-api": "^3.0.0", 1520 | "cssnano-utils": "^2.0.0", 1521 | "postcss-selector-parser": "^6.0.4", 1522 | "vendors": "^1.0.3" 1523 | } 1524 | }, 1525 | "postcss-minify-font-values": { 1526 | "version": "5.0.0", 1527 | "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.0.tgz", 1528 | "integrity": "sha512-zi2JhFaMOcIaNxhndX5uhsqSY1rexKDp23wV8EOmC9XERqzLbHsoRye3aYF716Zm+hkcR4loqKDt8LZlmihwAg==", 1529 | "requires": { 1530 | "postcss-value-parser": "^4.1.0" 1531 | } 1532 | }, 1533 | "postcss-minify-gradients": { 1534 | "version": "5.0.0", 1535 | "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.0.tgz", 1536 | "integrity": "sha512-/jPtNgs6JySMwgsE5dPOq8a2xEopWTW3RyqoB9fLqxgR+mDUNLSi7joKd+N1z7FXWgVkc4l/dEBMXHgNAaUbvg==", 1537 | "requires": { 1538 | "cssnano-utils": "^2.0.0", 1539 | "is-color-stop": "^1.1.0", 1540 | "postcss-value-parser": "^4.1.0" 1541 | } 1542 | }, 1543 | "postcss-minify-params": { 1544 | "version": "5.0.0", 1545 | "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.0.tgz", 1546 | "integrity": "sha512-KvZYIxTPBVKjdd+XgObq9A+Sfv8lMkXTpbZTsjhr42XbfWIeLaTItMlygsDWfjArEc3muUfDaUFgNSeDiJ5jug==", 1547 | "requires": { 1548 | "alphanum-sort": "^1.0.2", 1549 | "browserslist": "^4.16.0", 1550 | "cssnano-utils": "^2.0.0", 1551 | "postcss-value-parser": "^4.1.0", 1552 | "uniqs": "^2.0.0" 1553 | } 1554 | }, 1555 | "postcss-minify-selectors": { 1556 | "version": "5.0.0", 1557 | "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.0.0.tgz", 1558 | "integrity": "sha512-cEM0O0eWwFIvmo6nfB0lH0vO/XFwgqIvymODbfPXZ1gTA3i76FKnb7TGUrEpiTxaXH6tgYQ6DcTHwRiRS+YQLQ==", 1559 | "requires": { 1560 | "alphanum-sort": "^1.0.2", 1561 | "postcss-selector-parser": "^3.1.2" 1562 | }, 1563 | "dependencies": { 1564 | "postcss-selector-parser": { 1565 | "version": "3.1.2", 1566 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", 1567 | "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", 1568 | "requires": { 1569 | "dot-prop": "^5.2.0", 1570 | "indexes-of": "^1.0.1", 1571 | "uniq": "^1.0.1" 1572 | } 1573 | } 1574 | } 1575 | }, 1576 | "postcss-nested": { 1577 | "version": "5.0.5", 1578 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.5.tgz", 1579 | "integrity": "sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==", 1580 | "requires": { 1581 | "postcss-selector-parser": "^6.0.4" 1582 | } 1583 | }, 1584 | "postcss-normalize-charset": { 1585 | "version": "5.0.0", 1586 | "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.0.tgz", 1587 | "integrity": "sha512-pqsCkgo9KmQP0ew6DqSA+uP9YN6EfsW20pQ3JU5JoQge09Z6Too4qU0TNDsTNWuEaP8SWsMp+19l15210MsDZQ==" 1588 | }, 1589 | "postcss-normalize-display-values": { 1590 | "version": "5.0.0", 1591 | "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.0.tgz", 1592 | "integrity": "sha512-t4f2d//gH1f7Ns0Jq3eNdnWuPT7TeLuISZ6RQx4j8gpl5XrhkdshdNcOnlrEK48YU6Tcb6jqK7dorME3N4oOGA==", 1593 | "requires": { 1594 | "cssnano-utils": "^2.0.0", 1595 | "postcss-value-parser": "^4.1.0" 1596 | } 1597 | }, 1598 | "postcss-normalize-positions": { 1599 | "version": "5.0.0", 1600 | "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.0.tgz", 1601 | "integrity": "sha512-0o6/qU5ky74X/eWYj/tv4iiKCm3YqJnrhmVADpIMNXxzFZywsSQxl8F7cKs8jQEtF3VrJBgcDHTexZy1zgDoYg==", 1602 | "requires": { 1603 | "postcss-value-parser": "^4.1.0" 1604 | } 1605 | }, 1606 | "postcss-normalize-repeat-style": { 1607 | "version": "5.0.0", 1608 | "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.0.tgz", 1609 | "integrity": "sha512-KRT14JbrXKcFMYuc4q7lh8lvv8u22wLyMrq+UpHKLtbx2H/LOjvWXYdoDxmNrrrJzomAWL+ViEXr48/IhSUJnQ==", 1610 | "requires": { 1611 | "cssnano-utils": "^2.0.0", 1612 | "postcss-value-parser": "^4.1.0" 1613 | } 1614 | }, 1615 | "postcss-normalize-string": { 1616 | "version": "5.0.0", 1617 | "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.0.tgz", 1618 | "integrity": "sha512-wSO4pf7GNcDZpmelREWYADF1+XZWrAcbFLQCOqoE92ZwYgaP/RLumkUTaamEzdT2YKRZAH8eLLKGWotU/7FNPw==", 1619 | "requires": { 1620 | "postcss-value-parser": "^4.1.0" 1621 | } 1622 | }, 1623 | "postcss-normalize-timing-functions": { 1624 | "version": "5.0.0", 1625 | "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.0.tgz", 1626 | "integrity": "sha512-TwPaDX+wl9wO3MUm23lzGmOzGCGKnpk+rSDgzB2INpakD5dgWR3L6bJq1P1LQYzBAvz8fRIj2NWdnZdV4EV98Q==", 1627 | "requires": { 1628 | "cssnano-utils": "^2.0.0", 1629 | "postcss-value-parser": "^4.1.0" 1630 | } 1631 | }, 1632 | "postcss-normalize-unicode": { 1633 | "version": "5.0.0", 1634 | "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.0.tgz", 1635 | "integrity": "sha512-2CpVoz/67rXU5s9tsPZDxG1YGS9OFHwoY9gsLAzrURrCxTAb0H7Vp87/62LvVPgRWTa5ZmvgmqTp2rL8tlm72A==", 1636 | "requires": { 1637 | "browserslist": "^4.16.0", 1638 | "postcss-value-parser": "^4.1.0" 1639 | } 1640 | }, 1641 | "postcss-normalize-url": { 1642 | "version": "5.0.0", 1643 | "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.0.tgz", 1644 | "integrity": "sha512-ICDaGFBqLgA3dlrCIRuhblLl80D13YtgEV9NJPTYJtgR72vu61KgxAHv+z/lKMs1EbwfSQa3ALjOFLSmXiE34A==", 1645 | "requires": { 1646 | "is-absolute-url": "^3.0.3", 1647 | "normalize-url": "^4.5.0", 1648 | "postcss-value-parser": "^4.1.0" 1649 | } 1650 | }, 1651 | "postcss-normalize-whitespace": { 1652 | "version": "5.0.0", 1653 | "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.0.tgz", 1654 | "integrity": "sha512-KRnxQvQAVkJfaeXSz7JlnD9nBN9sFZF9lrk9452Q2uRoqrRSkinqifF8Iex7wZGei2DZVG/qpmDFDmRvbNAOGA==", 1655 | "requires": { 1656 | "postcss-value-parser": "^4.1.0" 1657 | } 1658 | }, 1659 | "postcss-ordered-values": { 1660 | "version": "5.0.0", 1661 | "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.0.tgz", 1662 | "integrity": "sha512-dPr+SRObiHueCIc4IUaG0aOGQmYkuNu50wQvdXTGKy+rzi2mjmPsbeDsheLk5WPb9Zyf2tp8E+I+h40cnivm6g==", 1663 | "requires": { 1664 | "cssnano-utils": "^2.0.0", 1665 | "postcss-value-parser": "^4.1.0" 1666 | } 1667 | }, 1668 | "postcss-reduce-initial": { 1669 | "version": "5.0.0", 1670 | "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.0.tgz", 1671 | "integrity": "sha512-wR6pXUaFbSMG1oCKx8pKVA+rnSXCHlca5jMrlmkmif+uig0HNUTV9oGN5kjKsM3mATQAldv2PF9Tbl2vqLFjnA==", 1672 | "requires": { 1673 | "browserslist": "^4.16.0", 1674 | "caniuse-api": "^3.0.0" 1675 | } 1676 | }, 1677 | "postcss-reduce-transforms": { 1678 | "version": "5.0.0", 1679 | "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.0.tgz", 1680 | "integrity": "sha512-iHdGODW4YzM3WjVecBhPQt6fpJC4lGQZxJKjkBNHpp2b8dzmvj0ogKThqya+IRodQEFzjfXgYeESkf172FH5Lw==", 1681 | "requires": { 1682 | "cssnano-utils": "^2.0.0", 1683 | "postcss-value-parser": "^4.1.0" 1684 | } 1685 | }, 1686 | "postcss-reporter": { 1687 | "version": "7.0.2", 1688 | "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.2.tgz", 1689 | "integrity": "sha512-JyQ96NTQQsso42y6L1H1RqHfWH1C3Jr0pt91mVv5IdYddZAE9DUZxuferNgk6q0o6vBVOrfVJb10X1FgDzjmDw==", 1690 | "requires": { 1691 | "colorette": "^1.2.1", 1692 | "lodash.difference": "^4.5.0", 1693 | "lodash.forown": "^4.4.0", 1694 | "lodash.get": "^4.4.2", 1695 | "lodash.groupby": "^4.6.0", 1696 | "lodash.sortby": "^4.7.0" 1697 | } 1698 | }, 1699 | "postcss-selector-parser": { 1700 | "version": "6.0.4", 1701 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", 1702 | "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", 1703 | "requires": { 1704 | "cssesc": "^3.0.0", 1705 | "indexes-of": "^1.0.1", 1706 | "uniq": "^1.0.1", 1707 | "util-deprecate": "^1.0.2" 1708 | } 1709 | }, 1710 | "postcss-svgo": { 1711 | "version": "5.0.0", 1712 | "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.0.tgz", 1713 | "integrity": "sha512-M3/VS4sFI1Yp9g0bPL+xzzCNz5iLdRUztoFaugMit5a8sMfkVzzhwqbsOlD8IFFymCdJDmXmh31waYHWw1K4BA==", 1714 | "requires": { 1715 | "postcss-value-parser": "^4.1.0", 1716 | "svgo": "^2.3.0" 1717 | } 1718 | }, 1719 | "postcss-unique-selectors": { 1720 | "version": "5.0.0", 1721 | "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.0.tgz", 1722 | "integrity": "sha512-o9l4pF8SRn7aCMTmzb/kNv/kjV7wPZpZ8Nlb1Gq8v/Qvw969K1wanz1RVA0ehHzWe9+wHXaC2DvZlak/gdMJ5w==", 1723 | "requires": { 1724 | "alphanum-sort": "^1.0.2", 1725 | "postcss-selector-parser": "^6.0.2", 1726 | "uniqs": "^2.0.0" 1727 | } 1728 | }, 1729 | "postcss-value-parser": { 1730 | "version": "4.1.0", 1731 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", 1732 | "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" 1733 | }, 1734 | "pretty-hrtime": { 1735 | "version": "1.0.3", 1736 | "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", 1737 | "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" 1738 | }, 1739 | "purgecss": { 1740 | "version": "3.1.3", 1741 | "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-3.1.3.tgz", 1742 | "integrity": "sha512-hRSLN9mguJ2lzlIQtW4qmPS2kh6oMnA9RxdIYK8sz18QYqd6ePp4GNDl18oWHA1f2v2NEQIh51CO8s/E3YGckQ==", 1743 | "requires": { 1744 | "commander": "^6.0.0", 1745 | "glob": "^7.0.0", 1746 | "postcss": "^8.2.1", 1747 | "postcss-selector-parser": "^6.0.2" 1748 | }, 1749 | "dependencies": { 1750 | "postcss": { 1751 | "version": "8.2.4", 1752 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.4.tgz", 1753 | "integrity": "sha512-kRFftRoExRVXZlwUuay9iC824qmXPcQQVzAjbCCgjpXnkdMCJYBu2gTwAaFBzv8ewND6O8xFb3aELmEkh9zTzg==", 1754 | "requires": { 1755 | "colorette": "^1.2.1", 1756 | "nanoid": "^3.1.20", 1757 | "source-map": "^0.6.1" 1758 | } 1759 | } 1760 | } 1761 | }, 1762 | "quick-lru": { 1763 | "version": "5.1.1", 1764 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 1765 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" 1766 | }, 1767 | "read-cache": { 1768 | "version": "1.0.0", 1769 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 1770 | "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", 1771 | "requires": { 1772 | "pify": "^2.3.0" 1773 | } 1774 | }, 1775 | "read-pkg": { 1776 | "version": "5.2.0", 1777 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", 1778 | "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", 1779 | "dev": true, 1780 | "requires": { 1781 | "@types/normalize-package-data": "^2.4.0", 1782 | "normalize-package-data": "^2.5.0", 1783 | "parse-json": "^5.0.0", 1784 | "type-fest": "^0.6.0" 1785 | } 1786 | }, 1787 | "readdirp": { 1788 | "version": "3.5.0", 1789 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", 1790 | "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", 1791 | "requires": { 1792 | "picomatch": "^2.2.1" 1793 | } 1794 | }, 1795 | "reduce-css-calc": { 1796 | "version": "2.1.8", 1797 | "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", 1798 | "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", 1799 | "requires": { 1800 | "css-unit-converter": "^1.1.1", 1801 | "postcss-value-parser": "^3.3.0" 1802 | }, 1803 | "dependencies": { 1804 | "postcss-value-parser": { 1805 | "version": "3.3.1", 1806 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1807 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" 1808 | } 1809 | } 1810 | }, 1811 | "require-directory": { 1812 | "version": "2.1.1", 1813 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1814 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 1815 | }, 1816 | "resolve": { 1817 | "version": "1.20.0", 1818 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 1819 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 1820 | "dev": true, 1821 | "requires": { 1822 | "is-core-module": "^2.2.0", 1823 | "path-parse": "^1.0.6" 1824 | } 1825 | }, 1826 | "resolve-from": { 1827 | "version": "4.0.0", 1828 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1829 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" 1830 | }, 1831 | "reusify": { 1832 | "version": "1.0.4", 1833 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1834 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" 1835 | }, 1836 | "rgb-regex": { 1837 | "version": "1.0.1", 1838 | "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", 1839 | "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" 1840 | }, 1841 | "rgba-regex": { 1842 | "version": "1.0.0", 1843 | "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", 1844 | "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" 1845 | }, 1846 | "run-parallel": { 1847 | "version": "1.1.10", 1848 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", 1849 | "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==" 1850 | }, 1851 | "rxjs": { 1852 | "version": "6.6.7", 1853 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", 1854 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", 1855 | "dev": true, 1856 | "requires": { 1857 | "tslib": "^1.9.0" 1858 | } 1859 | }, 1860 | "semver": { 1861 | "version": "5.7.1", 1862 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1863 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1864 | "dev": true 1865 | }, 1866 | "simple-swizzle": { 1867 | "version": "0.2.2", 1868 | "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", 1869 | "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", 1870 | "requires": { 1871 | "is-arrayish": "^0.3.1" 1872 | }, 1873 | "dependencies": { 1874 | "is-arrayish": { 1875 | "version": "0.3.2", 1876 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", 1877 | "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" 1878 | } 1879 | } 1880 | }, 1881 | "slash": { 1882 | "version": "3.0.0", 1883 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 1884 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" 1885 | }, 1886 | "source-map": { 1887 | "version": "0.6.1", 1888 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1889 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 1890 | }, 1891 | "spawn-command": { 1892 | "version": "0.0.2-1", 1893 | "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", 1894 | "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", 1895 | "dev": true 1896 | }, 1897 | "spdx-correct": { 1898 | "version": "3.1.1", 1899 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", 1900 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", 1901 | "dev": true, 1902 | "requires": { 1903 | "spdx-expression-parse": "^3.0.0", 1904 | "spdx-license-ids": "^3.0.0" 1905 | } 1906 | }, 1907 | "spdx-exceptions": { 1908 | "version": "2.3.0", 1909 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 1910 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", 1911 | "dev": true 1912 | }, 1913 | "spdx-expression-parse": { 1914 | "version": "3.0.1", 1915 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 1916 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 1917 | "dev": true, 1918 | "requires": { 1919 | "spdx-exceptions": "^2.1.0", 1920 | "spdx-license-ids": "^3.0.0" 1921 | } 1922 | }, 1923 | "spdx-license-ids": { 1924 | "version": "3.0.7", 1925 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", 1926 | "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", 1927 | "dev": true 1928 | }, 1929 | "stable": { 1930 | "version": "0.1.8", 1931 | "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", 1932 | "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" 1933 | }, 1934 | "string-width": { 1935 | "version": "4.2.2", 1936 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", 1937 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", 1938 | "requires": { 1939 | "emoji-regex": "^8.0.0", 1940 | "is-fullwidth-code-point": "^3.0.0", 1941 | "strip-ansi": "^6.0.0" 1942 | }, 1943 | "dependencies": { 1944 | "ansi-regex": { 1945 | "version": "5.0.0", 1946 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 1947 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" 1948 | }, 1949 | "strip-ansi": { 1950 | "version": "6.0.0", 1951 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1952 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1953 | "requires": { 1954 | "ansi-regex": "^5.0.0" 1955 | } 1956 | } 1957 | } 1958 | }, 1959 | "stylehacks": { 1960 | "version": "5.0.0", 1961 | "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.0.tgz", 1962 | "integrity": "sha512-QOWm6XivDLb+fqffTZP8jrmPmPITVChl2KCY2R05nsCWwLi3VGhCdVc3IVGNwd1zzTt1jPd67zIKjpQfxzQZeA==", 1963 | "requires": { 1964 | "browserslist": "^4.16.0", 1965 | "postcss-selector-parser": "^6.0.4" 1966 | } 1967 | }, 1968 | "supports-color": { 1969 | "version": "5.5.0", 1970 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1971 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1972 | "requires": { 1973 | "has-flag": "^3.0.0" 1974 | } 1975 | }, 1976 | "svgo": { 1977 | "version": "2.3.0", 1978 | "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz", 1979 | "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==", 1980 | "requires": { 1981 | "@trysound/sax": "0.1.1", 1982 | "chalk": "^4.1.0", 1983 | "commander": "^7.1.0", 1984 | "css-select": "^3.1.2", 1985 | "css-tree": "^1.1.2", 1986 | "csso": "^4.2.0", 1987 | "stable": "^0.1.8" 1988 | }, 1989 | "dependencies": { 1990 | "ansi-styles": { 1991 | "version": "4.3.0", 1992 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1993 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1994 | "requires": { 1995 | "color-convert": "^2.0.1" 1996 | } 1997 | }, 1998 | "chalk": { 1999 | "version": "4.1.1", 2000 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", 2001 | "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", 2002 | "requires": { 2003 | "ansi-styles": "^4.1.0", 2004 | "supports-color": "^7.1.0" 2005 | } 2006 | }, 2007 | "color-convert": { 2008 | "version": "2.0.1", 2009 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2010 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2011 | "requires": { 2012 | "color-name": "~1.1.4" 2013 | } 2014 | }, 2015 | "color-name": { 2016 | "version": "1.1.4", 2017 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2018 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 2019 | }, 2020 | "commander": { 2021 | "version": "7.2.0", 2022 | "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", 2023 | "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" 2024 | }, 2025 | "has-flag": { 2026 | "version": "4.0.0", 2027 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2028 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 2029 | }, 2030 | "supports-color": { 2031 | "version": "7.2.0", 2032 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2033 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2034 | "requires": { 2035 | "has-flag": "^4.0.0" 2036 | } 2037 | } 2038 | } 2039 | }, 2040 | "tailwindcss": { 2041 | "version": "2.1.2", 2042 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.1.2.tgz", 2043 | "integrity": "sha512-T5t+wwd+/hsOyRw2HJuFuv0LTUm3MUdHm2DJ94GPVgzqwPPFa9XxX0KlwLWupUuiOUj6uiKURCzYPHFcuPch/w==", 2044 | "requires": { 2045 | "@fullhuman/postcss-purgecss": "^3.1.3", 2046 | "bytes": "^3.0.0", 2047 | "chalk": "^4.1.0", 2048 | "chokidar": "^3.5.1", 2049 | "color": "^3.1.3", 2050 | "detective": "^5.2.0", 2051 | "didyoumean": "^1.2.1", 2052 | "dlv": "^1.1.3", 2053 | "fast-glob": "^3.2.5", 2054 | "fs-extra": "^9.1.0", 2055 | "html-tags": "^3.1.0", 2056 | "lodash": "^4.17.21", 2057 | "lodash.topath": "^4.5.2", 2058 | "modern-normalize": "^1.0.0", 2059 | "node-emoji": "^1.8.1", 2060 | "normalize-path": "^3.0.0", 2061 | "object-hash": "^2.1.1", 2062 | "parse-glob": "^3.0.4", 2063 | "postcss-functions": "^3", 2064 | "postcss-js": "^3.0.3", 2065 | "postcss-nested": "5.0.5", 2066 | "postcss-selector-parser": "^6.0.4", 2067 | "postcss-value-parser": "^4.1.0", 2068 | "pretty-hrtime": "^1.0.3", 2069 | "quick-lru": "^5.1.1", 2070 | "reduce-css-calc": "^2.1.8", 2071 | "resolve": "^1.20.0" 2072 | }, 2073 | "dependencies": { 2074 | "ansi-styles": { 2075 | "version": "4.3.0", 2076 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2077 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2078 | "requires": { 2079 | "color-convert": "^2.0.1" 2080 | } 2081 | }, 2082 | "chalk": { 2083 | "version": "4.1.1", 2084 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", 2085 | "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", 2086 | "requires": { 2087 | "ansi-styles": "^4.1.0", 2088 | "supports-color": "^7.1.0" 2089 | } 2090 | }, 2091 | "chokidar": { 2092 | "version": "3.5.1", 2093 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", 2094 | "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", 2095 | "requires": { 2096 | "anymatch": "~3.1.1", 2097 | "braces": "~3.0.2", 2098 | "fsevents": "~2.3.1", 2099 | "glob-parent": "~5.1.0", 2100 | "is-binary-path": "~2.1.0", 2101 | "is-glob": "~4.0.1", 2102 | "normalize-path": "~3.0.0", 2103 | "readdirp": "~3.5.0" 2104 | } 2105 | }, 2106 | "color-convert": { 2107 | "version": "2.0.1", 2108 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2109 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2110 | "requires": { 2111 | "color-name": "~1.1.4" 2112 | } 2113 | }, 2114 | "color-name": { 2115 | "version": "1.1.4", 2116 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2117 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 2118 | }, 2119 | "colorette": { 2120 | "version": "1.2.2", 2121 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", 2122 | "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" 2123 | }, 2124 | "fast-glob": { 2125 | "version": "3.2.5", 2126 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", 2127 | "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", 2128 | "requires": { 2129 | "@nodelib/fs.stat": "^2.0.2", 2130 | "@nodelib/fs.walk": "^1.2.3", 2131 | "glob-parent": "^5.1.0", 2132 | "merge2": "^1.3.0", 2133 | "micromatch": "^4.0.2", 2134 | "picomatch": "^2.2.1" 2135 | } 2136 | }, 2137 | "fs-extra": { 2138 | "version": "9.1.0", 2139 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 2140 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 2141 | "requires": { 2142 | "at-least-node": "^1.0.0", 2143 | "graceful-fs": "^4.2.0", 2144 | "jsonfile": "^6.0.1", 2145 | "universalify": "^2.0.0" 2146 | } 2147 | }, 2148 | "has-flag": { 2149 | "version": "4.0.0", 2150 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2151 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 2152 | }, 2153 | "lodash": { 2154 | "version": "4.17.21", 2155 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2156 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 2157 | }, 2158 | "nanoid": { 2159 | "version": "3.1.22", 2160 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", 2161 | "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==" 2162 | }, 2163 | "postcss": { 2164 | "version": "8.2.13", 2165 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.13.tgz", 2166 | "integrity": "sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ==", 2167 | "requires": { 2168 | "colorette": "^1.2.2", 2169 | "nanoid": "^3.1.22", 2170 | "source-map": "^0.6.1" 2171 | } 2172 | }, 2173 | "postcss-js": { 2174 | "version": "3.0.3", 2175 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", 2176 | "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==", 2177 | "requires": { 2178 | "camelcase-css": "^2.0.1", 2179 | "postcss": "^8.1.6" 2180 | } 2181 | }, 2182 | "resolve": { 2183 | "version": "1.20.0", 2184 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 2185 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 2186 | "requires": { 2187 | "is-core-module": "^2.2.0", 2188 | "path-parse": "^1.0.6" 2189 | } 2190 | }, 2191 | "supports-color": { 2192 | "version": "7.2.0", 2193 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2194 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2195 | "requires": { 2196 | "has-flag": "^4.0.0" 2197 | } 2198 | }, 2199 | "universalify": { 2200 | "version": "2.0.0", 2201 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 2202 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" 2203 | } 2204 | } 2205 | }, 2206 | "timsort": { 2207 | "version": "0.3.0", 2208 | "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", 2209 | "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" 2210 | }, 2211 | "to-regex-range": { 2212 | "version": "5.0.1", 2213 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2214 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2215 | "requires": { 2216 | "is-number": "^7.0.0" 2217 | } 2218 | }, 2219 | "tree-kill": { 2220 | "version": "1.2.2", 2221 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", 2222 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", 2223 | "dev": true 2224 | }, 2225 | "tslib": { 2226 | "version": "1.14.1", 2227 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 2228 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 2229 | "dev": true 2230 | }, 2231 | "type-fest": { 2232 | "version": "0.6.0", 2233 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", 2234 | "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", 2235 | "dev": true 2236 | }, 2237 | "uniq": { 2238 | "version": "1.0.1", 2239 | "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", 2240 | "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" 2241 | }, 2242 | "uniqs": { 2243 | "version": "2.0.0", 2244 | "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", 2245 | "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" 2246 | }, 2247 | "universalify": { 2248 | "version": "1.0.0", 2249 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", 2250 | "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" 2251 | }, 2252 | "util-deprecate": { 2253 | "version": "1.0.2", 2254 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2255 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 2256 | }, 2257 | "validate-npm-package-license": { 2258 | "version": "3.0.4", 2259 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 2260 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 2261 | "dev": true, 2262 | "requires": { 2263 | "spdx-correct": "^3.0.0", 2264 | "spdx-expression-parse": "^3.0.0" 2265 | } 2266 | }, 2267 | "vendors": { 2268 | "version": "1.0.4", 2269 | "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", 2270 | "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" 2271 | }, 2272 | "wrap-ansi": { 2273 | "version": "7.0.0", 2274 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2275 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2276 | "requires": { 2277 | "ansi-styles": "^4.0.0", 2278 | "string-width": "^4.1.0", 2279 | "strip-ansi": "^6.0.0" 2280 | }, 2281 | "dependencies": { 2282 | "ansi-regex": { 2283 | "version": "5.0.0", 2284 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 2285 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" 2286 | }, 2287 | "ansi-styles": { 2288 | "version": "4.3.0", 2289 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2290 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2291 | "requires": { 2292 | "color-convert": "^2.0.1" 2293 | } 2294 | }, 2295 | "color-convert": { 2296 | "version": "2.0.1", 2297 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2298 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2299 | "requires": { 2300 | "color-name": "~1.1.4" 2301 | } 2302 | }, 2303 | "color-name": { 2304 | "version": "1.1.4", 2305 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2306 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 2307 | }, 2308 | "strip-ansi": { 2309 | "version": "6.0.0", 2310 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 2311 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 2312 | "requires": { 2313 | "ansi-regex": "^5.0.0" 2314 | } 2315 | } 2316 | } 2317 | }, 2318 | "wrappy": { 2319 | "version": "1.0.2", 2320 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2321 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 2322 | }, 2323 | "xtend": { 2324 | "version": "4.0.2", 2325 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 2326 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 2327 | }, 2328 | "y18n": { 2329 | "version": "5.0.8", 2330 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2331 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" 2332 | }, 2333 | "yaml": { 2334 | "version": "1.10.2", 2335 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 2336 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" 2337 | }, 2338 | "yargs": { 2339 | "version": "16.2.0", 2340 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 2341 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 2342 | "requires": { 2343 | "cliui": "^7.0.2", 2344 | "escalade": "^3.1.1", 2345 | "get-caller-file": "^2.0.5", 2346 | "require-directory": "^2.1.1", 2347 | "string-width": "^4.2.0", 2348 | "y18n": "^5.0.5", 2349 | "yargs-parser": "^20.2.2" 2350 | } 2351 | }, 2352 | "yargs-parser": { 2353 | "version": "20.2.7", 2354 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", 2355 | "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==" 2356 | } 2357 | } 2358 | } 2359 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@codewars/blog", 3 | "publish": false, 4 | "version": "0.1.0", 5 | "description": "", 6 | "scripts": { 7 | "build": "NODE_ENV=production postcss styles.css -o static/styles.css --no-map && zola build", 8 | "build:netlify-preview": "postcss styles.css -o static/styles.css --no-map && zola build --base-url $DEPLOY_PRIME_URL", 9 | "dev": "concurrently \"postcss styles.css -o static/styles.css --no-map --watch\" \"zola serve\"" 10 | }, 11 | "author": "", 12 | "dependencies": { 13 | "@tailwindcss/typography": "^0.4.0", 14 | "autoprefixer": "^10.2.5", 15 | "cssnano": "^5.0.2", 16 | "postcss": "^8.2.13", 17 | "postcss-cli": "^8.3.1", 18 | "tailwindcss": "^2.1.2" 19 | }, 20 | "devDependencies": { 21 | "concurrently": "^6.0.2", 22 | "postcss-nested": "^5.0.5" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | require("tailwindcss"), 4 | require("autoprefixer"), 5 | require("postcss-nested"), 6 | ...(process.env.NODE_ENV === "production" ? [require("cssnano")] : []), 7 | ], 8 | }; 9 | -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codewars/blog/b39be2830abbbbdfd4c4619ea9482dc6fee826bc/static/favicon.ico -------------------------------------------------------------------------------- /static/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codewars/blog/b39be2830abbbbdfd4c4619ea9482dc6fee826bc/static/logo.png -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | /* show # on hover */ 6 | .prose { 7 | & h1, 8 | & h2, 9 | & h3, 10 | & h4 { 11 | &:hover a::before { 12 | @apply opacity-100; 13 | } 14 | 15 | & a::before { 16 | content: "#"; 17 | margin-left: -1em; 18 | padding-right: 1em; 19 | 20 | @apply text-brand absolute opacity-0 float-left; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | const colors = require("tailwindcss/colors"); 2 | const defaultTheme = require("tailwindcss/defaultTheme"); 3 | 4 | module.exports = { 5 | purge: ["./templates/**/*.html", "./content/**/*.md"], 6 | darkMode: "class", 7 | theme: { 8 | extend: { 9 | fontFamily: { 10 | sans: ["Inter var", ...defaultTheme.fontFamily.sans], 11 | }, 12 | colors: { 13 | gray: colors.trueGray, 14 | brand: "#b1361e", 15 | note: colors.coolGray[600], 16 | "note-content": colors.coolGray[500], 17 | tip: colors.emerald[600], 18 | "tip-content": colors.emerald[600], 19 | info: colors.lightBlue[500], 20 | "info-content": colors.lightBlue[700], 21 | warning: colors.orange[500], 22 | "warning-content": colors.orange[700], 23 | danger: colors.red[600], 24 | "danger-content": colors.red[500], 25 | }, 26 | typography: (theme) => ({ 27 | DEFAULT: { 28 | css: { 29 | color: theme("colors.gray.700"), 30 | "blockquote p:first-of-type::before": { 31 | content: "none", 32 | }, 33 | "blockquote p:last-of-type::after": { 34 | content: "none", 35 | }, 36 | code: { 37 | color: theme("colors.gray.900"), 38 | borderColor: theme("colors.gray.500"), 39 | borderWidth: "1px", 40 | padding: theme("spacing.1"), 41 | borderRadius: theme("borderRadius.DEFAULT"), 42 | fontWeight: null, 43 | }, 44 | "code::before": { 45 | content: "none", 46 | }, 47 | "code::after": { 48 | content: "none", 49 | }, 50 | "a code": { 51 | color: theme("colors.gray.900"), 52 | }, 53 | pre: { 54 | color: theme("colors.gray.200"), 55 | backgroundColor: "inherit", 56 | }, 57 | "pre code::before": { 58 | content: "none", 59 | }, 60 | "pre code::after": { 61 | content: "none", 62 | }, 63 | }, 64 | }, 65 | // Light text variant for dark-mode. 66 | light: { 67 | css: [ 68 | { 69 | color: theme("colors.gray.300"), 70 | '[class~="lead"]': { 71 | color: theme("colors.gray.300"), 72 | }, 73 | a: { 74 | color: theme("colors.gray.300"), 75 | }, 76 | strong: { 77 | color: theme("colors.gray.300"), 78 | }, 79 | "ol > li::before": { 80 | color: theme("colors.gray.400"), 81 | }, 82 | "ul > li::before": { 83 | backgroundColor: theme("colors.gray.600"), 84 | }, 85 | hr: { 86 | borderColor: theme("colors.gray.700"), 87 | }, 88 | blockquote: { 89 | color: theme("colors.gray.300"), 90 | borderLeftColor: theme("colors.gray.700"), 91 | }, 92 | h1: { 93 | color: theme("colors.gray.300"), 94 | }, 95 | h2: { 96 | color: theme("colors.gray.300"), 97 | }, 98 | h3: { 99 | color: theme("colors.gray.300"), 100 | }, 101 | h4: { 102 | color: theme("colors.gray.300"), 103 | }, 104 | "figure figcaption": { 105 | color: theme("colors.gray.400"), 106 | }, 107 | code: { 108 | color: theme("colors.gray.300"), 109 | }, 110 | "a code": { 111 | color: theme("colors.gray.300"), 112 | }, 113 | pre: { 114 | color: theme("colors.gray.700"), 115 | }, 116 | thead: { 117 | color: theme("colors.gray.300"), 118 | borderBottomColor: theme("colors.gray.600"), 119 | }, 120 | "tbody tr": { 121 | borderBottomColor: theme("colors.gray.700"), 122 | }, 123 | }, 124 | ], 125 | }, 126 | }), 127 | }, 128 | }, 129 | variants: { 130 | extend: { 131 | display: ["dark"], 132 | typography: ["dark"], 133 | }, 134 | }, 135 | plugins: [require("@tailwindcss/typography")({ modifiers: [] })], 136 | }; 137 | -------------------------------------------------------------------------------- /templates/404.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %} 4 | Page Not Found · {{ super() }} 5 | {% endblock %} 6 | 7 | {% block content %} 8 |
9 |
10 |
11 |

404 12 |

13 | Page Not Found 14 |

15 |

16 | Back 17 |

18 |
19 |
20 |
21 | {% endblock %} 22 | -------------------------------------------------------------------------------- /templates/anchor-link.html: -------------------------------------------------------------------------------- 1 | {% if level <= 4 %} 2 | 3 | {% endif %} 4 | -------------------------------------------------------------------------------- /templates/base.html: -------------------------------------------------------------------------------- 1 | {% import "macros.html" as macros %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | {% block title %}{{ config.title }}{% endblock %} 9 | 10 | 11 | 12 | 13 | {% if config.generate_feed %} 14 | 15 | {% endif %} 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | {% block metadata %} 25 | {% if section %} 26 | {% if section.title %} 27 | 28 | {% endif %} 29 | {% if section.description %} 30 | 31 | 32 | {% endif %} 33 | {% elif page %} 34 | {% if page.title %} 35 | 36 | {% endif %} 37 | {% if page.description %} 38 | 39 | 40 | {% endif %} 41 | {% endif %} 42 | {% endblock metadata %} 43 | 44 | 59 | 60 | {% block extra_head %}{% endblock %} 61 | 62 | 63 | 64 | {{ macros::header() }} 65 | 66 |
67 |
68 | {% block content %}{% endblock %} 69 |
70 | 71 | {% if paginator %} 72 | {{ macros::pagination(paginator=paginator) }} 73 | {% endif %} 74 |
75 | 76 | {{ macros::footer() }} 77 | 78 | 79 | -------------------------------------------------------------------------------- /templates/icons.html: -------------------------------------------------------------------------------- 1 | {% macro github(class) %} 2 | 9 | {% endmacro github %} 10 | 11 | {% macro twitter(class) %} 12 | 15 | {% endmacro twitter %} 16 | 17 | {% macro codewars(class) %} 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | {% endmacro codewars %} 26 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block content %} 4 | {% if paginator %} 5 | {{ macros::list_pages(pages=paginator.pages) }} 6 | {% else %} 7 | {{ macros::list_pages(pages=section.pages) }} 8 | {% endif %} 9 | {% endblock %} 10 | -------------------------------------------------------------------------------- /templates/macros.html: -------------------------------------------------------------------------------- 1 | {% import "icons.html" as icons %} 2 | 3 | {% macro header() %} 4 | 19 | {% endmacro %} 20 | 21 | 22 | {% macro tag(url, name) %} 23 | 24 | #{{ name }} 25 | 26 | {% endmacro %} 27 | 28 | 29 | {% macro post_header(page, class) %} 30 |
31 | 32 |

{{ page.title }}

33 | {% if page.taxonomies.tags %} 34 | 39 | {% endif %} 40 |
41 | {% endmacro %} 42 | 43 | 44 | {% macro list_pages(pages) %} 45 |
46 | {% for page in pages %} 47 | {{ self::post_header(page=page, class="text-xl leading-6 font-medium") }} 48 | {% endfor %} 49 |
50 | {% endmacro %} 51 | 52 | 53 | {% macro pagination(paginator) %} 54 | 77 | {% endmacro %} 78 | 79 | 80 | {% macro footer() %} 81 | 100 | {% endmacro %} 101 | 102 | {% macro theme_toggle() %} 103 | 110 | {% endmacro %} 111 | 112 | {% macro img_srcset(context, src, alt, class) %} 113 | {# `src` is relative to the page/section, find relative path from content/ for image functions #} 114 | {% set_global path = "" %} 115 | {% for asset in context.assets %} 116 | {% if asset | split(pat='/') | last == src %} 117 | {% set_global path = asset %} 118 | {% break %} 119 | {% endif %} 120 | {% endfor %} 121 | {# resize wide images for smaller screens #} 122 | {% set_global srcset = [] %} 123 | {% if path != "" %} 124 | {% set meta = get_image_metadata(path=path) %} 125 | {% for w in [480, 640, 768, 1024, 1280, 1536] %} 126 | {% if w < meta.width %} 127 | {% set resized = resize_image(path=path, op='fit_width', width=w) %} 128 | {% set size = w | as_str %} 129 | {% set_global srcset = srcset | concat(with=resized ~ ' ' ~ size ~ 'w') %} 130 | {% endif %} 131 | {% endfor %} 132 | {% endif %} 133 | {% set_global srcset = srcset | join(sep=', ') | json_encode() %} 134 | 135 | 136 | {% endmacro %} 137 | -------------------------------------------------------------------------------- /templates/page.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block title %} 3 | {{ page.title }} · {{ super() }} 4 | {% endblock %} 5 | 6 | {% block content %} 7 | {% block post %} 8 | {{ macros::post_header(page=page, class="text-3xl leading-tight font-extrabold") }} 9 | 10 |
11 | {{ page.content | safe }} 12 |
13 | {% endblock %} 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /templates/rss.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ config.title }} 5 | {%- if term %} - {{ term.name }} 6 | {%- elif section.title %} - {{ section.title }} 7 | {%- endif -%} 8 | 9 | {%- if section -%} 10 | {{ section.permalink | escape_xml | safe }} 11 | {%- else -%} 12 | {{ config.base_url | escape_xml | safe }} 13 | {%- endif -%} 14 | 15 | {{ config.description }} 16 | Zola 17 | {{ config.default_language }} 18 | 19 | {{ last_updated | date(format="%a, %d %b %Y %H:%M:%S %z") }} 20 | {%- for page in pages %} 21 | 22 | {{ page.title }} 23 | {{ page.date | date(format="%a, %d %b %Y %H:%M:%S %z") }} 24 | {{ page.permalink | escape_xml | safe }} 25 | {{ page.permalink | escape_xml | safe }} 26 | {% if page.description %}{{ page.description | striptags }}{% elif page.summary %}{{ page.summary | striptags }}{% else %}{{ page.content }}{% endif %} 27 | 28 | {%- endfor %} 29 | 30 | 31 | -------------------------------------------------------------------------------- /templates/section.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %} 4 | {{ section.title }} · {{ super() }} 5 | {% endblock %} 6 | 7 | {% block content %} 8 | {% if paginator %} 9 | {{ macros::list_pages(pages=paginator.pages) }} 10 | {% else %} 11 | {{ macros::list_pages(pages=section.pages) }} 12 | {% endif %} 13 | {% endblock %} 14 | -------------------------------------------------------------------------------- /templates/shortcodes/airtable.html: -------------------------------------------------------------------------------- 1 |
2 | 8 |
9 | -------------------------------------------------------------------------------- /templates/shortcodes/container.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {% if type == 'note' %} 4 | 5 | {% elif type == 'tip' %} 6 | 7 | {% elif type == 'info' %} 8 | 9 | {% elif type == 'warning' %} 10 | 11 | {% elif type == 'danger' %} 12 | 13 | {% else %} 14 | {{ throw(message="Unknown type") }} 15 | {% endif %} 16 | 17 |
{% if title %}{{ title }}{% else %}{{ type }}{% endif %}
18 |
19 | 20 |
21 | {{ body | safe | markdown(inline=true) | safe }} 22 |
23 |
24 | -------------------------------------------------------------------------------- /templates/shortcodes/details.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | {{ summary | safe | markdown(inline=true) | safe }} 5 | 6 | 7 | {{ body | safe | markdown(inline=true) | safe }} 8 |
9 |
10 | -------------------------------------------------------------------------------- /templates/shortcodes/figure.html: -------------------------------------------------------------------------------- 1 | {% import "macros.html" as macros %} 2 | 3 |
4 | {% if themed %} {# use light/dark variant #} 5 | {% set ext = src | split(pat='.') | last %} 6 | {% set ext = '.' ~ ext %} 7 | {% set base_src = src | trim_end_matches(pat=ext) %} 8 | {% set light = '-light' ~ ext %} 9 | {% set dark = '-dark' ~ ext %} 10 | {% set light_src = base_src ~ light %} 11 | {% set dark_src = base_src ~ dark %} 12 | 13 | {% if page %} 14 | {{ macros::img_srcset(src=light_src, context=page, class="mx-auto block dark:hidden", alt=alt | default(value="")) }} 15 | {{ macros::img_srcset(src=dark_src, context=page, class="mx-auto hidden dark:block", alt=alt | default(value="")) }} 16 | {% else %} 17 | {{ macros::img_srcset(src=light_src, context=section, class="mx-auto block dark:hidden", alt=alt | default(value="")) }} 18 | {{ macros::img_srcset(src=dark_src, context=section, class="mx-auto hidden dark:block", alt=alt | default(value="")) }} 19 | {% endif %} 20 | {% else %} 21 | {% if page %} 22 | {{ macros::img_srcset(src=src, context=page, class="mx-auto", alt=alt | default(value="")) }} 23 | {% else %} 24 | {{ macros::img_srcset(src=src, context=section, class="mx-auto", alt=alt | default(value="")) }} 25 | {% endif %} 26 | {% endif %} 27 | 28 | {% if alt %} 29 |
{{ alt }}
30 | {% endif %} 31 |
32 | -------------------------------------------------------------------------------- /templates/tags/list.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %} 4 | Tags · {{ super() }} 5 | {% endblock %} 6 | 7 | {% block content %} 8 |
9 |

Tags

10 | 11 |
12 | {% for term in terms %} 13 | {{ macros::tag(url=term.permalink, name=term.name) }} 14 | {% endfor %} 15 |
16 |
17 | {% endblock %} 18 | -------------------------------------------------------------------------------- /templates/tags/single.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %} 4 | #{{ term.name }} · {{ super() }} 5 | {% endblock %} 6 | 7 | {% block content %} 8 | {% if paginator %} 9 | {{ macros::list_pages(pages=paginator.pages) }} 10 | {% else %} 11 | {{ macros::list_pages(pages=term.pages) }} 12 | {% endif %} 13 | {% endblock %} 14 | --------------------------------------------------------------------------------