diff --git a/.github/renovate.json b/.github/renovate.json new file mode 100644 index 000000000..7b36e6679 --- /dev/null +++ b/.github/renovate.json @@ -0,0 +1,20 @@ +{ + "schedule": ["every weekend"], + "labels": ["dependencies"], + "separateMajorMinor": "false", + "packageRules": [ + { + "matchDepTypes": ["devDependencies"], + "matchUpdateTypes": ["major", "minor", "patch", "pin", "digest", "lockFileMaintenance", "rollback", "bump"], + "groupName": "devDependencies", + "semanticCommitType": "chore", + "automerge": true + }, + { + "matchDepTypes": ["dependencies"], + "matchUpdateTypes": ["major", "minor", "patch", "pin", "digest", "lockFileMaintenance", "rollback", "bump"], + "groupName": "dependencies", + "semanticCommitType": "fix" + } + ] +} diff --git a/.gitignore b/.gitignore index cd95b89a0..c743195e3 100644 --- a/.gitignore +++ b/.gitignore @@ -9,13 +9,13 @@ Thumbs.db .vscode .python-version node_modules -npm-debug.log -debug.log +*.log /tags /atom-shell/ /out/ docs/output docs/includes spec/fixtures/evil-files/ +!spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/ out/ /electron/ diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 598b7e9b5..d503b1740 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -2,7 +2,7 @@ ## Our Pledge -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bb8bd8840..6e7e80bfb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -40,18 +40,8 @@ This project and everyone participating in it is governed by the [Atom Code of C We have an official message board with a detailed FAQ and where the community chimes in with helpful advice if you have questions. -* [Discuss, the official Atom and Electron message board](https://discuss.atom.io) -* [Atom FAQ](https://discuss.atom.io/c/faq) - -If chat is more your speed, you can join the Atom and Electron Slack team: - -* [Join the Atom and Electron Slack Team](https://atom-slack.herokuapp.com/) - * Even though Slack is a chat service, sometimes it takes several hours for community members to respond — please be patient! - * Use the `#atom` channel for general questions or discussion about Atom - * Use the `#electron` channel for questions about Electron - * Use the `#packages` channel for questions or discussion about writing or contributing to Atom packages (both core and community) - * Use the `#ui` channel for questions and discussion about Atom UI and themes - * There are many other channels available, check the channel list +* [Github Discussions, the official Atom message board](https://github.com/atom/atom/discussions) +* [Atom FAQ](https://flight-manual.atom.io/faq/) ## What should I know before I get started? @@ -82,12 +72,12 @@ Here's a list of the big ones: * [language-javascript](https://github.com/atom/language-javascript) - all bundled languages are packages too, and each one has a separate package `language-[name]`. Use these for feedback on syntax highlighting issues that only appear for a specific language. * [one-dark-ui](https://github.com/atom/one-dark-ui) - the default UI styling for anything but the text editor. UI theme packages (i.e. packages with a `-ui` suffix) provide only styling and it's possible that a bundled package is responsible for a UI issue. There are other bundled UI themes, such as [one-light-ui](https://github.com/atom/one-light-ui). * [one-dark-syntax](https://github.com/atom/one-dark-syntax) - the default syntax highlighting styles applied for all languages. There are other bundled syntax themes, such as [solarized-dark-syntax](https://github.com/atom/solarized-dark-syntax). You should use these packages for reporting issues that appear in many languages, but disappear if you change to another syntax theme. -* [apm](https://github.com/atom/apm) - the `apm` command line tool (Atom Package Manager). You should use this repository for any contributions related to the `apm` tool and to publishing packages. +* [apm](https://github.com/atom/apm) - the `apm` command line tool (Atom Package Manager). You should use this repository for any contributions related to the `apm` tool and for publishing packages. * [atom.io](https://github.com/atom/atom.io) - the repository for feedback on the [Atom.io website](https://atom.io) and the [Atom.io package API](https://github.com/atom/atom/blob/master/docs/apm-rest-api.md) used by [apm](https://github.com/atom/apm). There are many more, but this list should be a good starting point. For more information on how to work with Atom's official packages, see [Contributing to Atom Packages][contributing-to-official-atom-packages]. -Also, because Atom is so extensible, it's possible that a feature you've become accustomed to in Atom or an issue you're encountering isn't coming from a bundled package at all, but rather a [community package](https://atom.io/packages) you've installed. Each community package has its own repository too, the [Atom FAQ](https://discuss.atom.io/c/faq) has instructions on how to [contact the maintainers of any Atom community package or theme.](https://discuss.atom.io/t/i-have-a-question-about-a-specific-atom-community-package-where-is-the-best-place-to-ask-it/25581) +Also, because Atom is so extensible, it's possible that a feature you've become accustomed to in Atom or an issue you're encountering isn't coming from a bundled package at all, but rather a [community package](https://atom.io/packages) you've installed. Each community package has its own repository too. #### Package Conventions @@ -105,7 +95,7 @@ There are a few conventions that have developed over time around packages: ### Design Decisions -When we make a significant decision in how we maintain the project and what we can or cannot support, we will document it in the [atom/design-decisions repository](https://github.com/atom/design-decisions). If you have a question around how we do things, check to see if it is documented there. If it is *not* documented there, please open a new topic on [Discuss, the official Atom message board](https://discuss.atom.io) and ask your question. +When we make a significant decision in how we maintain the project and what we can or cannot support, we will document it in the [atom/design-decisions repository](https://github.com/atom/design-decisions). If you have a question around how we do things, check to see if it is documented there. If it is *not* documented there, please open a new topic on [Github Discussions, the official Atom message board](https://github.com/atom/atom/discussions) and ask your question. ## How Can I Contribute? @@ -120,7 +110,7 @@ Before creating bug reports, please check [this list](#before-submitting-a-bug-r #### Before Submitting A Bug Report * **Check the [debugging guide](https://flight-manual.atom.io/hacking-atom/sections/debugging/).** You might be able to find the cause of the problem and fix things yourself. Most importantly, check if you can reproduce the problem [in the latest version of Atom](https://flight-manual.atom.io/hacking-atom/sections/debugging/#update-to-the-latest-version), if the problem happens when you run Atom in [safe mode](https://flight-manual.atom.io/hacking-atom/sections/debugging/#check-if-the-problem-shows-up-in-safe-mode), and if you can get the desired behavior by changing [Atom's or packages' config settings](https://flight-manual.atom.io/hacking-atom/sections/debugging/#check-atom-and-package-settings). -* **Check the [FAQs on the forum](https://discuss.atom.io/c/faq)** for a list of common questions and problems. +* **Check the [faq](https://flight-manual.atom.io/faq/) and the [discussions](https://github.com/atom/atom/discussions)** for a list of common questions and problems. * **Determine [which repository the problem should be reported in](#atom-and-packages)**. * **Perform a [cursory search](https://github.com/search?q=+is%3Aissue+user%3Aatom)** to see if the problem has already been reported. If it has **and the issue is still open**, add a comment to the existing issue instead of opening a new one. @@ -354,7 +344,7 @@ This section lists the labels we use to help us track and manage issues and pull [GitHub search](https://help.github.com/articles/searching-issues/) makes it easy to use labels for finding groups of issues or pull requests you're interested in. For example, you might be interested in [open issues across `atom/atom` and all Atom-owned packages which are labeled as bugs, but still need to be reliably reproduced](https://github.com/search?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue+user%3Aatom+label%3Abug+label%3Aneeds-reproduction) or perhaps [open pull requests in `atom/atom` which haven't been reviewed yet](https://github.com/search?utf8=%E2%9C%93&q=is%3Aopen+is%3Apr+repo%3Aatom%2Fatom+comments%3A0). To help you find issues and pull requests, each label is listed with search links for finding open items with that label in `atom/atom` only and also across all Atom repositories. We encourage you to read about [other search filters](https://help.github.com/articles/searching-issues/) which will help you write more focused queries. -The labels are loosely grouped by their purpose, but it's not required that every issue have a label from every group or that an issue can't have more than one label from the same group. +The labels are loosely grouped by their purpose, but it's not required that every issue has a label from every group or that an issue can't have more than one label from the same group. Please open an issue on `atom/atom` if you have suggestions for new labels, and if you notice some labels are missing on some repositories, then please open an issue on that repository. diff --git a/Dockerfile b/Dockerfile index 7fbacdc96..0bcc7eca7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,20 +1,31 @@ -# VERSION: 0.1 -# DESCRIPTION: Image to build Atom and create a .rpm file +# VERSION: 0.2 +# DESCRIPTION: Image to build Atom -# Base docker image -FROM nodesource/fedora21:4.2.6 +FROM ubuntu:20.04 # Install dependencies -RUN yum install -y \ - make \ - gcc \ - gcc-c++ \ - glibc-devel \ - git-core \ - libsecret-devel \ - rpmdevtools +RUN apt-get update && \ + DEBIAN_FRONTEND="noninteractive" \ + apt-get install -y \ + build-essential \ + git \ + libsecret-1-dev \ + fakeroot \ + rpm \ + libx11-dev \ + libxkbfile-dev \ + libgdk-pixbuf2.0-dev \ + libgtk-3-dev \ + libxss-dev \ + libasound2-dev \ + npm && \ + rm -rf /var/lib/apt/lists/* +# Update npm and dependencies RUN npm install -g npm --loglevel error -ADD . /atom -WORKDIR /atom +# Use python2 by default +RUN npm config set python /usr/bin/python2 -g + +ENTRYPOINT ["/usr/bin/env", "sh", "-c"] +CMD ["bash"] diff --git a/LICENSE.md b/LICENSE.md index 65cfdcfd4..186041e24 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,4 +1,4 @@ -Copyright (c) 2011-2020 GitHub Inc. +Copyright (c) 2011-2021 GitHub Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/README.md b/README.md index 6d2ae4f8c..e4d7f829e 100644 --- a/README.md +++ b/README.md @@ -1,86 +1,80 @@ -# Atom -[![Build status](https://dev.azure.com/github/Atom/_apis/build/status/Atom%20Production%20Branches?branchName=master)](https://dev.azure.com/github/Atom/_build/latest?definitionId=32&branchName=master) -[![Dependency Status](https://david-dm.org/atom/atom.svg)](https://david-dm.org/atom/atom) -[![Join the Atom Community on Slack](https://atom-slack.herokuapp.com/badge.svg)](https://atom-slack.herokuapp.com) +
-Atom is a hackable text editor for the 21st century, built on [Electron](https://github.com/electron/electron), and based on everything we love about our favorite editors. We designed it to be deeply customizable, but still approachable using the default configuration. +![Banner] -![Atom](https://user-images.githubusercontent.com/378023/49132477-f4b77680-f31f-11e8-8357-ac6491761c6c.png) +[![Badge License]][License]     +[![Badge Guidelines]][Guidelines]     +[![Badge Retired]][Retired]     +[![Badge Discord]][Discord] -![Atom Screenshot](https://user-images.githubusercontent.com/378023/49132478-f4b77680-f31f-11e8-9e10-e8454d8d9b7e.png) +
+
-Visit [atom.io](https://atom.io) to learn more or visit the [Atom forum](https://discuss.atom.io). +# Atom Community -Follow [@AtomEditor](https://twitter.com/atomeditor) on Twitter for important -announcements. +[![Button Install]][Install]    +[![Button Documentation]][Documentation]    +[![Button Build]][Build]  -This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.md). -By participating, you are expected to uphold this code. Please report unacceptable behavior to atom@github.com. +
+ +*A hackable text editor for the 21st century, built on **[Electron]**,*
+*and based on everything we love about our favorite editors.* -## Documentation +*We designed it to be deeply customizable, but still*
+*approachable using the default configuration.* -If you want to read about using Atom or developing packages in Atom, the [Atom Flight Manual](https://flight-manual.atom.io) is free and available online. You can find the source to the manual in [atom/flight-manual.atom.io](https://github.com/atom/flight-manual.atom.io). +
+
-The [API reference](https://atom.io/docs/api) for developing packages is also documented on Atom.io. +[![Badge Status]][Status] -## Installing +
+
-### Prerequisites -- [Git](https://git-scm.com) +![Preview] -### macOS +
-Download the latest [Atom release](https://github.com/atom/atom/releases/latest). -Atom will automatically update when a new release is available. + -### Windows +[Guidelines]: https://github.com/logos 'Branding Guidelines' +[Electron]: https://github.com/electron/electron +[Discord]: https://discord.gg/2tD9evh8qP 'Join the Atom Community Discord today!' +[Status]: https://dev.azure.com/atomcommunity/atomcommunity/_build/latest?definitionId=10&branchName=master -Download the latest [Atom installer](https://github.com/atom/atom/releases/latest). `AtomSetup.exe` is 32-bit. For 64-bit systems, download `AtomSetup-x64.exe`. +[#]: # -Atom will automatically update when a new release is available. -You can also download `atom-windows.zip` (32-bit) or `atom-x64-windows.zip` (64-bit) from the [releases page](https://github.com/atom/atom/releases/latest). -The `.zip` version will not automatically update. + -Using [Chocolatey](https://chocolatey.org)? Run `cinst Atom` to install the latest version of Atom. +[Documentation]: docs/Documentation.md 'Information how to use & work with Atom.' +[Install]: docs/Installation.md 'How to install Atom on your system.' +[Retired]: docs/Retirement.md 'Check out what happened to the original Atom project.' +[License]: LICENSE.md +[Build]: docs/Building.md 'Instructions on how to build Atom by yourself.' -### Linux -Atom is only available for 64-bit Linux systems. + -Configure your distribution's package manager to install and update Atom by following the [Linux installation instructions](https://flight-manual.atom.io/getting-started/sections/installing-atom/#platform-linux) in the Flight Manual. You will also find instructions on how to install Atom's official Linux packages without using a package repository, though you will not get automatic updates after installing Atom this way. +[Preview]: https://user-images.githubusercontent.com/378023/49132478-f4b77680-f31f-11e8-9e10-e8454d8d9b7e.png 'Preview of the editor.' +[Banner]: https://user-images.githubusercontent.com/378023/49132477-f4b77680-f31f-11e8-8357-ac6491761c6c.png -#### Archive extraction -An archive is available for people who don't want to install `atom` as root. + -This version enables you to install multiple Atom versions in parallel. It has been built on Ubuntu 64-bit, -but should be compatible with other Linux distributions. +[Badge Guidelines]: https://img.shields.io/badge/Logo-Guidelines-d36e2d.svg?style=for-the-badge&labelColor=323232 +[Badge Retired]: https://img.shields.io/badge/Retired-bb3c1f.svg?style=for-the-badge&labelColor=323232&logoColor=white&logo=Atom +[Badge Discord]: https://img.shields.io/badge/Discord-6399c4.svg?style=for-the-badge&labelColor=323232&logoColor=white&logo=Discord +[Badge License]: https://img.shields.io/badge/License-MIT-e5ab42.svg?style=for-the-badge&labelColor=323232 +[Badge Status]: https://dev.azure.com/atomcommunity/atomcommunity/_apis/build/status/atom-community/Release%20Branch%20Build?branchName=master -1. Install dependencies (on Ubuntu): `sudo apt install git gconf2 gconf-service libgtk2.0-0 libudev1 libgcrypt20 libnotify4 libxtst6 libnss3 python3 gvfs-bin xdg-utils libcap2` - 1. (If the `python3` package isn't available, or is too old (Python 3 should be >= 3.5), either `python2` or `python` (2.6 or 2.7) will work in its place.) -2. Download `atom-amd64.tar.gz` from the [Atom releases page](https://github.com/atom/atom/releases/latest). -3. Run `tar xf atom-amd64.tar.gz` in the directory where you want to extract the Atom folder. -4. Launch Atom using the installed `atom` command from the newly extracted directory. -The Linux version does not currently automatically update so you will need to -repeat these steps to upgrade to future releases. + -## Building +[Button Documentation]: https://img.shields.io/badge/Documentation-6399c4?style=for-the-badge&logoColor=white&logo=GitBook +[Button Install]: https://img.shields.io/badge/Install-78af9f?style=for-the-badge&logoColor=white&logo=DocuSign +[Button Build]: https://img.shields.io/badge/Building-e5ab42?style=for-the-badge&logoColor=white&logo=GNUBash -* [Linux](https://flight-manual.atom.io/hacking-atom/sections/hacking-on-atom-core/#platform-linux) -* [macOS](https://flight-manual.atom.io/hacking-atom/sections/hacking-on-atom-core/#platform-mac) -* [Windows](https://flight-manual.atom.io/hacking-atom/sections/hacking-on-atom-core/#platform-windows) - -## Discussion - -* Discuss Atom on our [forums](https://discuss.atom.io/) -* Chat about Atom on our Slack team -- [instructions for joining](https://discuss.atom.io/t/join-us-on-slack/16638?source_topic_id=25406) - -## License - -[MIT](https://github.com/atom/atom/blob/master/LICENSE.md) - -When using the Atom or other GitHub logos, be sure to follow the [GitHub logo guidelines](https://github.com/logos). diff --git a/SUPPORT.md b/SUPPORT.md index a68fa1348..55483c805 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -4,8 +4,6 @@ If you're looking for support for Atom there are a lot of options, check out: * User Documentation — [The Atom Flight Manual](https://flight-manual.atom.io) * Developer Documentation — [Atom API Documentation](https://atom.io/docs/api/latest) -* FAQ — [The Atom FAQ on Discuss](https://discuss.atom.io/c/faq) -* Message Board — [Discuss, the official Atom and Electron message board](https://discuss.atom.io) -* Chat — [Join the Atom Slack team](https://atom-slack.herokuapp.com/) +* Message Board — [Github Discussions, the official Atom message board](https://github.com/atom/atom/discussions) -On Discuss and in the Atom Slack team, there are a bunch of helpful community members that should be willing to point you in the right direction. +On Atoms Github Discussions board, there are a bunch of helpful community members that should be willing to point you in the right direction. diff --git a/apm/package-lock.json b/apm/package-lock.json index f841ce258..6cbaff56f 100644 --- a/apm/package-lock.json +++ b/apm/package-lock.json @@ -4,36 +4,36 @@ "lockfileVersion": 1, "dependencies": { "atom-package-manager": { - "version": "npm:@atom-ide-community/atom-package-manager@2.5.2-atomic.3.1", - "resolved": "https://registry.npmjs.org/@atom-ide-community/atom-package-manager/-/atom-package-manager-2.5.2-atomic.3.1.tgz", - "integrity": "sha512-vXMQNf7Fyeb/v18m7615zPgupefs0KAY+YxseqYdV+DYrELj+HpuSzW9G5vpQVCYtX3tS+/713VGZMlxbyMgfw==", + "version": "npm:@atom-ide-community/atom-package-manager@2.6.5-atomic.1.0", + "resolved": "https://registry.npmjs.org/@atom-ide-community/atom-package-manager/-/atom-package-manager-2.6.5-atomic.1.0.tgz", + "integrity": "sha512-6plCUJpj90T4JhLtrADS2v8oi8HxQSFa7f82VWg4I40Os43La8Gsd/gMgAmIxgeBkbt3qXlI6cZvpDiDxQmlmg==", "requires": { "@atom/plist": "0.4.4", "asar-require": "0.3.0", - "async": "~0.9.2", + "async": "^3.2.0", "colors": "~1.4.0", - "first-mate": "^7.4.1", + "first-mate": "^7.4.3", "fs-plus": "3.x", - "git-utils": "^5.6.2", + "git-utils": "^5.7.2", "glob": "^7.1.6", - "hosted-git-info": "^3.0.5", - "keytar": "^6.0.1", + "hosted-git-info": "^3.0.7", + "keytar": "^7.7.0", "mv": "2.1.1", "ncp": "~2.0.0", - "npm": "^6.14.8", - "open": "7.2.1", + "npm": "^6.14.9", + "open": "7.3.0", "q": "~1.5.1", - "read": "~1.0.5", + "read": "~1.0.7", "request": "^2.88.2", "rimraf": "^3.0.2", "season": "^6.0.2", - "semver": "^7.3.2", + "semver": "^7.3.4", "tar": "^6.0.5", - "temp": "^0.9.1", + "temp": "^0.9.4", "underscore-plus": "1.x", "wordwrap": "1.0.0", "wrench": "~1.5.1", - "yargs": "^3.23.0" + "yargs": "^3.32.0" }, "dependencies": { "@atom/plist": { @@ -72,9 +72,9 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -165,9 +165,9 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", + "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==" }, "asynckit": { "version": "0.4.0", @@ -185,9 +185,9 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", @@ -212,9 +212,9 @@ } }, "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -388,9 +388,9 @@ } }, "decompress-zip": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.2.tgz", - "integrity": "sha512-Ab1QY4LrWMrUuo53lLnmGOby7v8ryqxJ+bKibKSiPisx+25mhut1dScVBXAYx14i/PqSrFZvR2FRRazhLbvL+g==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.3.tgz", + "integrity": "sha512-/fy1L4s+4jujqj3kNptWjilFw3E6De8U6XUFvqmh4npN3Vsypm3oT2V0bXcmbBWS+5j5tr4okYaFrOmyZkszEg==", "requires": { "binary": "^0.3.0", "graceful-fs": "^4.1.3", @@ -538,9 +538,9 @@ }, "dependencies": { "type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" } } }, @@ -565,15 +565,15 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "first-mate": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/first-mate/-/first-mate-7.4.1.tgz", - "integrity": "sha512-SEG5W0aajCvK/Ngoo3he3Ib4DsT+CRPhBAgSju5hksBLvvUfRWP7Jf3+HQ+CNTD4GZZqbDNOEJNOxbf35EblrQ==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/first-mate/-/first-mate-7.4.3.tgz", + "integrity": "sha512-PtZUpaPmcV5KV4Rw5TfwczEnExN+X1o3Q/G82E4iRJ0tW91fm3Yi7pa5t4cBH8r3D6EyoBKvfpG2jKE+TZ0/nw==", "requires": { "emissary": "^1", "event-kit": "^2.2.0", "fs-plus": "^3.0.0", "grim": "^2.0.1", - "oniguruma": "7.2.1", + "oniguruma": "^7.2.3", "season": "^6.0.2", "underscore-plus": "^1" } @@ -683,12 +683,12 @@ } }, "git-utils": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/git-utils/-/git-utils-5.6.2.tgz", - "integrity": "sha512-3pen//xGs5ZJiXejUbx79FyRR58J6DgI7tL9Mc7YQeuF5ENXf/7k0K2M8h4JBlTKZcxxCr8MGA1Xcg4O4l/YjA==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/git-utils/-/git-utils-5.7.3.tgz", + "integrity": "sha512-in1hjFfmzY86gKBt+YMTaVyCGtX2WTnN0uPj37bI5HsrnU2oj8OFcWOEzOI5PxQXPMxFxtvRebOHAOGB8M125w==", "requires": { "fs-plus": "^3.0.0", - "nan": "^2.14.0" + "nan": "^2.14.2" } }, "github-from-package": { @@ -697,9 +697,9 @@ "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -710,9 +710,9 @@ } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" }, "grim": { "version": "2.0.3", @@ -742,9 +742,9 @@ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "hosted-git-info": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", - "integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", "requires": { "lru-cache": "^6.0.0" } @@ -779,9 +779,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "invert-kv": { "version": "1.0.0", @@ -789,9 +789,9 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" }, "is-fullwidth-code-point": { "version": "1.0.0", @@ -864,12 +864,12 @@ } }, "keytar": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-6.0.1.tgz", - "integrity": "sha512-1Ihpf2tdM3sLwGMkYHXYhVC/hx5BDR7CWFL4IrBA3IDZo0xHhS2nM+tU9Y+u/U7okNfbVkwmKsieLkcWRMh93g==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.7.0.tgz", + "integrity": "sha512-YEY9HWqThQc5q5xbXbRwsZTh2PJ36OSYRjSv3NN2xf5s5dpLTjEZnC2YikR29OaVybf9nQ0dJ/80i40RS97t/A==", "requires": { "node-addon-api": "^3.0.0", - "prebuild-install": "5.3.4" + "prebuild-install": "^6.0.0" } }, "klaw": { @@ -897,16 +897,16 @@ } }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", "requires": { - "mime-db": "1.44.0" + "mime-db": "1.49.0" } }, "mimic-response": { @@ -1015,9 +1015,9 @@ } }, "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" }, "napi-build-utils": { "version": "1.0.2", @@ -1035,9 +1035,9 @@ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" }, "node-abi": { - "version": "2.19.3", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz", - "integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.0.tgz", + "integrity": "sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg==", "requires": { "semver": "^5.4.1" }, @@ -1050,14 +1050,9 @@ } }, "node-addon-api": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.2.tgz", - "integrity": "sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg==" - }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" }, "nopt": { "version": "3.0.6", @@ -1068,9 +1063,9 @@ } }, "npm": { - "version": "6.14.9", - "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.9.tgz", - "integrity": "sha512-yHi1+i9LyAZF1gAmgyYtVk+HdABlLy94PMIDoK1TRKWvmFQAt5z3bodqVwKvzY0s6dLqQPVsRLiwhJfNtiHeCg==", + "version": "6.14.14", + "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.14.tgz", + "integrity": "sha512-4TnYPV3rvwk9m92ON0iFrdXtRyMhrNkGdI8sr3dy1HVE3pVNxR9FyWYbjAw/HjfmHvmHUbxTVbmjAMv8NhIa6Q==", "requires": { "JSONStream": "^1.3.5", "abbrev": "~1.1.1", @@ -1103,13 +1098,13 @@ "glob": "^7.1.6", "graceful-fs": "^4.2.4", "has-unicode": "~2.0.1", - "hosted-git-info": "^2.8.8", + "hosted-git-info": "^2.8.9", "iferr": "^1.0.2", "imurmurhash": "*", "infer-owner": "^1.0.4", "inflight": "~1.0.6", "inherits": "^2.0.4", - "ini": "^1.3.5", + "ini": "^1.3.8", "init-package-json": "^1.10.3", "is-cidr": "^3.0.0", "json-parse-better-errors": "^1.0.2", @@ -1155,7 +1150,7 @@ "npm-user-validate": "^1.0.1", "npmlog": "~4.1.2", "once": "~1.4.0", - "opener": "^1.5.1", + "opener": "^1.5.2", "osenv": "^0.1.5", "pacote": "^9.5.12", "path-is-inside": "~1.0.2", @@ -1179,9 +1174,9 @@ "slide": "~1.1.6", "sorted-object": "~2.0.1", "sorted-union-stream": "~2.1.3", - "ssri": "^6.0.1", + "ssri": "^6.0.2", "stringify-package": "^1.0.1", - "tar": "^4.4.13", + "tar": "^4.4.15", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "uid-number": "0.0.6", @@ -2227,7 +2222,7 @@ "bundled": true }, "hosted-git-info": { - "version": "2.8.8", + "version": "2.8.9", "bundled": true }, "http-cache-semantics": { @@ -2309,7 +2304,7 @@ "bundled": true }, "ini": { - "version": "1.3.5", + "version": "1.3.8", "bundled": true }, "init-package-json": { @@ -3062,7 +3057,7 @@ } }, "opener": { - "version": "1.5.1", + "version": "1.5.2", "bundled": true }, "os-homedir": { @@ -3623,7 +3618,7 @@ } }, "ssri": { - "version": "6.0.1", + "version": "6.0.2", "bundled": true, "requires": { "figgy-pudding": "^3.5.1" @@ -3740,7 +3735,7 @@ } }, "tar": { - "version": "4.4.13", + "version": "4.4.15", "bundled": true, "requires": { "chownr": "^1.1.1", @@ -4062,7 +4057,7 @@ "bundled": true }, "y18n": { - "version": "4.0.0", + "version": "4.0.1", "bundled": true }, "yallist": { @@ -4196,17 +4191,17 @@ } }, "oniguruma": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/oniguruma/-/oniguruma-7.2.1.tgz", - "integrity": "sha512-WPS/e1uzhswPtJSe+Zls/kAj27+lEqZjCmRSjnYk/Z4L2Mu+lJC2JWtkZhPJe4kZeTQfz7ClcLyXlI4J68MG2w==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/oniguruma/-/oniguruma-7.2.3.tgz", + "integrity": "sha512-PZZcE0yfg8Q1IvaJImh21RUTHl8ep0zwwyoE912KqlWVrsGByjjj29sdACcD1BFyX2bLkfuOJeP+POzAGVWtbA==", "requires": { "nan": "^2.14.0" } }, "open": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/open/-/open-7.2.1.tgz", - "integrity": "sha512-xbYCJib4spUdmcs0g/2mK1nKo/jO2T7INClWd/beL7PFkXRWgr8B23ssDHX/USPn2M2IjDR5UdpYs6I67SnTSA==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", + "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", "requires": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -4236,25 +4231,23 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "prebuild-install": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.4.tgz", - "integrity": "sha512-AkKN+pf4fSEihjapLEEj8n85YIw/tN6BQqkhzbDc0RvEZGdkpJBGMUYx66AAMcPG2KzmPQS7Cm16an4HVBRRMA==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", "requires": { "detect-libc": "^1.0.3", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", - "mkdirp": "^0.5.1", + "mkdirp-classic": "^0.5.3", "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", + "node-abi": "^2.21.0", "npmlog": "^4.0.1", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^3.0.3", "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" + "tunnel-agent": "^0.6.0" } }, "process-nextick-args": { @@ -4386,9 +4379,12 @@ } }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } }, "set-blocking": { "version": "2.0.0", @@ -4460,9 +4456,9 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.8.tgz", + "integrity": "sha512-sb9b0cp855NbkMJcskdSYA7b11Q8JsX4qe4pyUAfHp+Y6jBjJeek2ZVlwEfWayshEIwlIzXx0Fain3QG9JPm2A==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -4496,9 +4492,9 @@ } }, "tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -4605,9 +4601,9 @@ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, "underscore": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.0.tgz", - "integrity": "sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ==" + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", + "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==" }, "underscore-plus": { "version": "1.7.0", @@ -4618,9 +4614,9 @@ } }, "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "requires": { "punycode": "^2.1.0" } @@ -4645,11 +4641,6 @@ "extsprintf": "^1.2.0" } }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" - }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -4698,9 +4689,9 @@ "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==" }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" }, "yallist": { "version": "4.0.0", diff --git a/apm/package.json b/apm/package.json index ff63e0743..d8ba8bc83 100644 --- a/apm/package.json +++ b/apm/package.json @@ -6,6 +6,6 @@ "url": "https://github.com/atom/atom.git" }, "dependencies": { - "atom-package-manager": "npm:@atom-ide-community/atom-package-manager@2.5.2-atomic.3.1" + "atom-package-manager": "npm:@atom-ide-community/atom-package-manager@2.6.5-atomic.1.0" } } diff --git a/atom.sh b/atom.sh index 768ab72b9..ef709ebb3 100755 --- a/atom.sh +++ b/atom.sh @@ -168,6 +168,11 @@ elif [ $OS == 'Linux' ]; then ;; esac + #Will allow user to get context menu on cinnamon desktop enviroment + if [[ "$(expr substr $(printenv | grep "DESKTOP_SESSION=") 17 8)" == "cinnamon" ]]; then + cp "resources/linux/desktopenviroment/cinnamon/atom.nemo_action" "/usr/share/nemo/actions/atom.nemo_action" + fi + : ${TMPDIR:=/tmp} [ -x "$ATOM_PATH" ] || ATOM_PATH="$TMPDIR/atom-build/Atom/atom" diff --git a/docs/Building.md b/docs/Building.md new file mode 100644 index 000000000..456b8a384 --- /dev/null +++ b/docs/Building.md @@ -0,0 +1,6 @@ + +## Building + +* [Linux](https://flight-manual.atom.io/hacking-atom/sections/hacking-on-atom-core/#platform-linux) +* [macOS](https://flight-manual.atom.io/hacking-atom/sections/hacking-on-atom-core/#platform-mac) +* [Windows](https://flight-manual.atom.io/hacking-atom/sections/hacking-on-atom-core/#platform-windows) \ No newline at end of file diff --git a/docs/Documentation.md b/docs/Documentation.md new file mode 100644 index 000000000..c450f8167 --- /dev/null +++ b/docs/Documentation.md @@ -0,0 +1,10 @@ +## Documentation + +Visit [atom.io](https://atom.io) to learn more or visit the [Atom forum](https://github.com/atom/atom/discussions). + +Follow [@AtomEditor](https://twitter.com/atomeditor) on Twitter for important +announcements. + +If you want to read about using Atom or developing packages in Atom, the [Atom Flight Manual](https://flight-manual.atom.io) is free and available online. You can find the source to the manual in [atom/flight-manual.atom.io](https://github.com/atom/flight-manual.atom.io). + +The [API reference](https://atom.io/docs/api) for developing packages is also documented on Atom.io. \ No newline at end of file diff --git a/docs/Installation.md b/docs/Installation.md new file mode 100644 index 000000000..c9c575772 --- /dev/null +++ b/docs/Installation.md @@ -0,0 +1,45 @@ +## Installing + +Currently, to get binaries based on code by the Atom community, binaries can be downloaded from the [Azure Pipeline](https://dev.azure.com/atomcommunity/atomcommunity/_build/latest?definitionId=10&branchName=master). From this pipeline, the latest run can be selected. From there, the `8 published` link should be selected to download the files. \ No newline at end of file diff --git a/docs/Retirement.md b/docs/Retirement.md new file mode 100644 index 000000000..784c40b98 --- /dev/null +++ b/docs/Retirement.md @@ -0,0 +1,13 @@ + +## Retirement Of The Atom Project + +Due to changes in the upstream, the original Atom and
+its repositories will be archived on `December 15, 2022`. + +If you'd like to learn more about the official Atom archiving,
+you can read about it in their **[Official Announcement]**. + + + + +[Official Announcement]: https://github.blog/2022-06-08-sunsetting-atom/ diff --git a/docs/build-instructions/build-status.md b/docs/build-instructions/build-status.md index 48c9c87e7..da42cc586 100644 --- a/docs/build-instructions/build-status.md +++ b/docs/build-instructions/build-status.md @@ -1,117 +1,145 @@ # Atom build status -| System | Azure Pipelines | Travis | AppVeyor/Win | Dependencies | +> **Note**: Since Atom's electron version is outdated, the electron badges are from old versions. + +| System | Azure Pipelines | CircleCI | AppVeyor/Win | Dependencies | |--------|--------|--------------|------------|--------------| | [Atom](https://github.com/atom/atom) | [![Build status](https://github.visualstudio.com/Atom/_apis/build/status/Atom%20Production%20Branches?branch=master)](https://github.visualstudio.com/Atom/_build/latest?definitionId=32&branch=master) | | | [![Dependency Status](https://david-dm.org/atom/atom.svg)](https://david-dm.org/atom/atom) | -| [APM](https://github.com/atom/apm) | | [![Travis Build Status](https://travis-ci.org/atom/apm.svg?branch=master)](https://travis-ci.org/atom/apm) | [![AppVeyor/Wi Build Status](https://ci.appveyor.com/api/projects/status/j6ixw374a397ugkb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/apm/branch/master) | [![Dependency Status](https://david-dm.org/atom/apm.svg)](https://david-dm.org/atom/apm) | -| [Electron](https://github.com/electron/electron) | | [![Travis Build Status](https://travis-ci.org/electron/electron.svg?branch=master)](https://travis-ci.org/electron/electron) | [![AppVeyor/Wi Build Status](https://ci.appveyor.com/api/projects/status/kvxe4byi7jcxbe26/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/electron) | [![Dependency Status](https://david-dm.org/electron/electron/dev-status.svg)](https://david-dm.org/electron/electron) +| [APM](https://github.com/atom/apm) | [![Build status](https://dev.azure.com/github/Atom/_apis/build/status/Atom%20Production%20Branches?branchName=master)](https://dev.azure.com/github/Atom/_build/latest?definitionId=32&branchName=master) | | +| [Electron](https://github.com/electron/electron) | | [![CircleCI Build Status](https://circleci.com/gh/electron/electron/tree/master.svg?style=shield)](https://circleci.com/gh/electron/electron/tree/master) | [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/4lggi9dpjc1qob7k/branch/master?svg=true)](https://ci.appveyor.com/project/electron-bot/electron-ljo26/branch/master) | [![Dependency Status](https://david-dm.org/electron/electron/dev-status.svg)](https://david-dm.org/electron/electron) + +> **Note**: Some repositories have been merged with Atom. +> See for details. +> +> Here are the packages, libraries, tools, and languages tested along with Atom, and so have no testing badges: +> +> - [about](https://github.com/atom/atom/tree/master/packages/about) +> - [autoflow](https://github.com/atom/atom/tree/master/packages/autoflow) +> - [deprecation-cop](https://github.com/atom/atom/tree/master/packages/deprecation-cop) +> - [dev-live-reload](https://github.com/atom/atom/tree/master/packages/dev-live-reload) +> - [exception-reporting](https://github.com/atom/atom/tree/master/packages/exception-reporting) +> - [git-diff](https://github.com/atom/atom/tree/master/packages/git-diff) +> - [go-to-line](https://github.com/atom/atom/tree/master/packages/go-to-line) +> - [grammar-selector](https://github.com/atom/atom/tree/master/packages/grammar-selector) +> - [line-ending-selector](https://github.com/atom/atom/tree/master/packages/line-ending-selector) +> - [link](https://github.com/atom/atom/tree/master/packages/link) +> - [ruby-on-rails](https://github.com/atom/atom/tree/master/packages/ruby-on-rails) +> - [update-package-dependencies](https://github.com/atom/atom/tree/master/packages/update-package-dependencies) +> - [welcome](https://github.com/atom/atom/tree/master/packages/welcome) +> +> The dependency badges might be irrelevant, so take them with a grain of salt (e.g. not very seriously). ## Packages -| Package | Travis | AppVeyor/Win | Dependencies | -|---------|--------|--------------|--------------| -| [About](https://github.com/atom/about) | [![macOS Build Status](https://travis-ci.org/atom/about.svg?branch=master)](https://travis-ci.org/atom/about) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/msprea3vq47l8oce/branch/master?svg=true)](https://ci.appveyor.com/project/atom/about/branch/master) | [![Dependency Status](https://david-dm.org/atom/about.svg)](https://david-dm.org/atom/about) | -| [Archive View](https://github.com/atom/archive-view) | [![macOS Build Status](https://travis-ci.org/atom/archive-view.svg?branch=master)](https://travis-ci.org/atom/archive-view) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/u3qfgaod4lhriqlj/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/archive-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/archive-view.svg)](https://david-dm.org/atom/archive-view) | -| [AutoComplete Atom API](https://github.com/atom/autocomplete-atom-api) | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-atom-api.svg?branch=master)](https://travis-ci.org/atom/autocomplete-atom-api) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1x3uqd9ddchpe555/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-atom-api/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-atom-api.svg)](https://david-dm.org/atom/autocomplete-atom-api) | -| [AutoComplete CSS](https://github.com/atom/autocomplete-css) | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-css.svg?branch=master)](https://travis-ci.org/atom/autocomplete-css) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/k3e5uvpmpc5bkja9/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-css/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-css.svg)](https://david-dm.org/atom/autocomplete-css) | -| [AutoComplete HTML](https://github.com/atom/autocomplete-html) | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-html.svg?branch=master)](https://travis-ci.org/atom/autocomplete-html) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/bsaqbg1fljpd9q1b/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-html/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-html.svg)](https://david-dm.org/atom/autocomplete-html) | -| [AutoComplete+](https://github.com/atom/autocomplete-plus) | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-plus.svg?branch=master)](https://travis-ci.org/atom/autocomplete-plus) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/9bpokrud2apgqsq0/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-plus.svg)](https://david-dm.org/atom/autocomplete-plus) | -| [AutoComplete Snippets](https://github.com/atom/autocomplete-snippets) | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-snippets.svg)](https://travis-ci.org/atom/autocomplete-snippets) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/72kfi83l6cw90joy/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-snippets/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-snippets.svg)](https://david-dm.org/atom/autocomplete-snippets) | -| [AutoFlow](https://github.com/atom/autoflow) | [![macOS Build Status](https://travis-ci.org/atom/autoflow.svg?branch=master)](https://travis-ci.org/atom/autoflow) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/kpmsnkbooa29x907/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autoflow/branch/master) | [![Dependency Status](https://david-dm.org/atom/autoflow.svg)](https://david-dm.org/atom/autoflow) | -| [AutoSave](https://github.com/atom/autosave) | [![macOS Build Status](https://travis-ci.org/atom/autosave.svg?branch=master)](https://travis-ci.org/atom/autosave) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/3aktr9updp722fqx/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autosave/branch/master) | [![Dependency Status](https://david-dm.org/atom/autosave.svg)](https://david-dm.org/atom/autosave) | -| [Background Tips](https://github.com/atom/background-tips) | [![macOS Build Status](https://travis-ci.org/atom/background-tips.svg?branch=master)](https://travis-ci.org/atom/background-tips) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/2utcugietl5vjc7w/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/background-tips/branch/master) | [![Dependency Status](https://david-dm.org/atom/background-tips.svg)](https://david-dm.org/atom/background-tips) | -| [Bookmarks](https://github.com/atom/bookmarks) | [![macOS Build Status](https://travis-ci.org/atom/bookmarks.svg?branch=master)](https://travis-ci.org/atom/bookmarks) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/vjsf78pj4rw6ibcw/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/bookmarks/branch/master) | [![Dependency Status](https://david-dm.org/atom/bookmarks.svg)](https://david-dm.org/atom/bookmarks) | -| [Bracket Matcher](https://github.com/atom/bracket-matcher) | [![macOS Build Status](https://travis-ci.org/atom/bracket-matcher.svg?branch=master)](https://travis-ci.org/atom/bracket-matcher) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/rrsl2h7e0od26k54/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/bracket-matcher/branch/master) | [![Dependency Status](https://david-dm.org/atom/bracket-matcher.svg)](https://david-dm.org/atom/bracket-matcher) | -| [Command Palette](https://github.com/atom/command-palette) | [![macOS Build Status](https://travis-ci.org/atom/command-palette.svg?branch=master)](https://travis-ci.org/atom/command-palette) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/jqgwetayr0enorun/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/command-palette/branch/master) | [![Dependency Status](https://david-dm.org/atom/command-palette.svg)](https://david-dm.org/atom/command-palette) | -| [Deprecation Cop](https://github.com/atom/deprecation-cop) | [![macOS Build Status](https://travis-ci.org/atom/deprecation-cop.svg?branch=master)](https://travis-ci.org/atom/deprecation-cop) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/0s870q5fj3vwihjx/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/deprecation-cop/branch/master) | [![Dependency Status](https://david-dm.org/atom/deprecation-cop.svg)](https://david-dm.org/atom/deprecation-cop) | -| [Dev Live Reload](https://github.com/atom/dev-live-reload) | [![macOS Build Status](https://travis-ci.org/atom/dev-live-reload.svg?branch=master)](https://travis-ci.org/atom/dev-live-reload) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/g3sd27ylba1fun1v/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/dev-live-reload/branch/master) | [![Dependency Status](https://david-dm.org/atom/dev-live-reload.svg)](https://david-dm.org/atom/dev-live-reload) | -| [Encoding Selector](https://github.com/atom/encoding-selector) | [![macOS Build Status](https://travis-ci.org/atom/encoding-selector.svg?branch=master)](https://travis-ci.org/atom/encoding-selector) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/e08x6k2b68wpwxxc/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/encoding-selector/branch/master) | [![Dependency Status](https://david-dm.org/atom/encoding-selector.svg)](https://david-dm.org/atom/encoding-selector) | -| [Exception Reporting](https://github.com/atom/exception-reporting) | [![macOS Build Status](https://travis-ci.org/atom/exception-reporting.svg?branch=master)](https://travis-ci.org/atom/exception-reporting) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/i0pla7qbpv7celg2/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/exception-reporting/branch/master) | [![Dependency Status](https://david-dm.org/atom/exception-reporting.svg)](https://david-dm.org/atom/exception-reporting) | -| [Find and Replace](https://github.com/atom/find-and-replace) | [![macOS Build Status](https://travis-ci.org/atom/find-and-replace.svg?branch=master)](https://travis-ci.org/atom/find-and-replace) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/6w4baiiq5mw4nxky/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/find-and-replace/branch/master) | [![Dependency Status](https://david-dm.org/atom/find-and-replace.svg)](https://david-dm.org/atom/find-and-replace) | -| [Fuzzy Finder](https://github.com/atom/fuzzy-finder) | [![macOS Build Status](https://travis-ci.org/atom/fuzzy-finder.svg?branch=master)](https://travis-ci.org/atom/fuzzy-finder) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/b4b2dg5n9r1wdqad/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/fuzzy-finder/branch/master) | [![Dependency Status](https://david-dm.org/atom/fuzzy-finder.svg)](https://david-dm.org/atom/fuzzy-finder) | -| [GitHub](https://github.com/atom/github) | [![macOS Build Status](https://travis-ci.com/atom/github.svg?token=RwrCnzpsZN5oEq5S5p7V&branch=master)](https://travis-ci.com/atom/github) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/psctk8vrva49dseb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/github/branch/master) | [![Dependency Status](https://david-dm.org/atom/github.svg)](https://david-dm.org/atom/github) | -| [Git Diff](https://github.com/atom/git-diff) | [![macOS Build Status](https://travis-ci.org/atom/git-diff.svg?branch=master)](https://travis-ci.org/atom/git-diff) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/9auj52cs0vso66nv/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/git-diff/branch/master) | [![Dependency Status](https://david-dm.org/atom/git-diff.svg)](https://david-dm.org/atom/git-diff) | -| [Go to Line](https://github.com/atom/go-to-line) | [![macOS Build Status](https://travis-ci.org/atom/go-to-line.svg?branch=master)](https://travis-ci.org/atom/go-to-line) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/qf0isc8ulw4wxi0b/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/go-to-line/branch/master) | [![Dependency Status](https://david-dm.org/atom/go-to-line.svg)](https://david-dm.org/atom/go-to-line) | -| [Grammar Selector](https://github.com/atom/grammar-selector) | [![macOS Build Status](https://travis-ci.org/atom/grammar-selector.svg?branch=master)](https://travis-ci.org/atom/grammar-selector) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/pg8qss03bfh4ngqm/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/grammar-selector/branch/master) | [![Dependency Status](https://david-dm.org/atom/grammar-selector.svg)](https://david-dm.org/atom/grammar-selector) | -| [Image View](https://github.com/atom/image-view) | [![macOS Build Status](https://travis-ci.org/atom/image-view.svg?branch=master)](https://travis-ci.org/atom/image-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/notavaawrswk0g10/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/image-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/image-view.svg)](https://david-dm.org/atom/image-view) | -| [Incompatible Packages](https://github.com/atom/incompatible-packages) | [![macOS Build Status](https://travis-ci.org/atom/incompatible-packages.svg?branch=master)](https://travis-ci.org/atom/incompatible-packages) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/neet595s038x7w70/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/incompatible-packages/branch/master) | [![Dependency Status](https://david-dm.org/atom/incompatible-packages.svg)](https://david-dm.org/atom/incompatible-packages) | -| [Keybinding Resolver](https://github.com/atom/keybinding-resolver) | [![macOS Build Status](https://travis-ci.org/atom/keybinding-resolver.svg?branch=master)](https://travis-ci.org/atom/keybinding-resolver) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/9jf31itx01hnn4nh/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/keybinding-resolver/branch/master) | [![Dependency Status](https://david-dm.org/atom/keybinding-resolver.svg)](https://david-dm.org/atom/keybinding-resolver) | -| [Line Ending Selector](https://github.com/atom/line-ending-selector) | [![macOS Build Status](https://travis-ci.org/atom/line-ending-selector.svg?branch=master)](https://travis-ci.org/atom/line-ending-selector) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/b3743n9ojomlpn1g/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/line-ending-selector/branch/master) | [![Dependency Status](https://david-dm.org/atom/line-ending-selector.svg)](https://david-dm.org/atom/line-ending-selector) | -| [Link](https://github.com/atom/link) | [![macOS Build Status](https://travis-ci.org/atom/link.svg?branch=master)](https://travis-ci.org/atom/link) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1d3cb8ktd48k9vnl/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/link/branch/master) | [![Dependency Status](https://david-dm.org/atom/link.svg)](https://david-dm.org/atom/link) | -| [Markdown Preview](https://github.com/atom/markdown-preview) | [![macOS Build Status](https://travis-ci.org/atom/markdown-preview.svg?branch=master)](https://travis-ci.org/atom/markdown-preview) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/bvh0evhh4v6w9b29/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/markdown-preview/branch/master) | [![Dependency Status](https://david-dm.org/atom/markdown-preview.svg)](https://david-dm.org/atom/markdown-preview) | -| [Metrics](https://github.com/atom/metrics) | [![macOS Build Status](https://travis-ci.org/atom/metrics.svg?branch=master)](https://travis-ci.org/atom/metrics) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/b5doi205xl3iex04/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/metrics/branch/master) | [![Dependency Status](https://david-dm.org/atom/metrics.svg)](https://david-dm.org/atom/metrics) | -| [Notifications](https://github.com/atom/notifications) | [![macOS Build Status](https://travis-ci.org/atom/notifications.svg?branch=master)](https://travis-ci.org/atom/notifications) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ps3p8tj2okw57x0e/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/notifications/branch/master) | [![Dependency Status](https://david-dm.org/atom/notifications.svg)](https://david-dm.org/atom/notifications) | -| [Open on GitHub](https://github.com/atom/open-on-github) | [![macOS Build Status](https://travis-ci.org/atom/open-on-github.svg?branch=master)](https://travis-ci.org/atom/open-on-github) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ccl6na4qsna5wncr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/open-on-github/branch/master) | [![Dependency Status](https://david-dm.org/atom/open-on-github.svg)](https://david-dm.org/atom/open-on-github) | -| [Package Generator](https://github.com/atom/package-generator) | [![macOS Build Status](https://travis-ci.org/atom/package-generator.svg?branch=master)](https://travis-ci.org/atom/package-generator)| [![Windows Build Status](https://ci.appveyor.com/api/projects/status/7t1i4hdmljhigp9u/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/package-generator/branch/master) | [![Dependency Status](https://david-dm.org/atom/package-generator.svg)](https://david-dm.org/atom/package-generator) | -| [Settings View](https://github.com/atom/settings-view) | [![macOS Build Status](https://travis-ci.org/atom/settings-view.svg?branch=master)](https://travis-ci.org/atom/settings-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/hatgxg6k2g3grafq/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/settings-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/settings-view.svg)](https://david-dm.org/atom/settings-view) | -| [Snippets](https://github.com/atom/snippets) | [![macOS Build Status](https://travis-ci.org/atom/snippets.svg?branch=master)](https://travis-ci.org/atom/snippets) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/8hlc0onofkgbxw53/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/snippets/branch/master) | [![Dependency Status](https://david-dm.org/atom/snippets.svg)](https://david-dm.org/atom/snippets) | -| [Spell Check](https://github.com/atom/spell-check) | [![macOS Build Status](https://travis-ci.org/atom/spell-check.svg?branch=master)](https://travis-ci.org/atom/spell-check) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1620a5reqw6kdolv/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/spell-check/branch/master) | [![Dependency Status](https://david-dm.org/atom/spell-check.svg)](https://david-dm.org/atom/spell-check) | -| [Status Bar](https://github.com/atom/status-bar) | [![macOS Build Status](https://travis-ci.org/atom/status-bar.svg?branch=master)](https://travis-ci.org/atom/status-bar) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gu8tv4h6cnpeesg2/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/status-bar/branch/master) | [![Dependency Status](https://david-dm.org/atom/status-bar.svg)](https://david-dm.org/atom/status-bar) | -| [Styleguide](https://github.com/atom/styleguide) | [![macOS Build Status](https://travis-ci.org/atom/styleguide.svg?branch=master)](https://travis-ci.org/atom/styleguide) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/88dt9jxexkpindhw/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/styleguide/branch/master) | [![Dependency Status](https://david-dm.org/atom/styleguide.svg)](https://david-dm.org/atom/styleguide) | -| [Symbols View](https://github.com/atom/symbols-view) | [![macOS Build Status](https://travis-ci.org/atom/symbols-view.svg?branch=master)](https://travis-ci.org/atom/symbols-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/al68vtv83x49eu5d/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/symbols-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/symbols-view.svg)](https://david-dm.org/atom/symbols-view) | -| [Tabs](https://github.com/atom/tabs) | [![macOS Build Status](https://travis-ci.org/atom/tabs.svg?branch=master)](https://travis-ci.org/atom/tabs) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/nf4hdmuk4i9xkfmb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/tabs/branch/master) | [![Dependency Status](https://david-dm.org/atom/tabs.svg)](https://david-dm.org/atom/tabs) | -| [Timecop](https://github.com/atom/timecop) | [![macOS Build Status](https://travis-ci.org/atom/timecop.svg?branch=master)](https://travis-ci.org/atom/timecop) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/37fhichmvx90sd97/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/timecop/branch/master) | [![Dependency Status](https://david-dm.org/atom/timecop.svg)](https://david-dm.org/atom/timecop) | -| [Tree View](https://github.com/atom/tree-view) | [![macOS Build Status](https://travis-ci.org/atom/tree-view.svg?branch=master)](https://travis-ci.org/atom/tree-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/com793ehi0hajrkd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/tree-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/tree-view.svg)](https://david-dm.org/atom/tree-view) | -| [Update Package Dependencies](https://github.com/atom/update-package-dependencies) | [![macOS Build Status](https://travis-ci.org/atom/update-package-dependencies.svg?branch=master)](https://travis-ci.org/atom/update-package-dependencies) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5xqtoc3xk1e7lt2y/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/update-package-dependencies/branch/master) | [![Dependency Status](https://david-dm.org/atom/update-package-dependencies.svg)](https://david-dm.org/atom/update-package-dependencies) | -| [Welcome](https://github.com/atom/welcome) | [![macOS Build Status](https://travis-ci.org/atom/welcome.svg?branch=master)](https://travis-ci.org/atom/welcome) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/c3ssyte35ivvnt62/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/welcome/branch/master) | [![Dependency Status](https://david-dm.org/atom/welcome.svg)](https://david-dm.org/atom/welcome) | -| [Whitespace](https://github.com/atom/whitespace) | [![macOS Build Status](https://travis-ci.org/atom/whitespace.svg?branch=master)](https://travis-ci.org/atom/whitespace) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/sf8pdb3ausdk1vtb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/whitespace/branch/master) | [![Dependency Status](https://david-dm.org/atom/whitespace.svg)](https://david-dm.org/atom/whitespace) | -| [Wrap Guide](https://github.com/atom/wrap-guide) | [![macOS Build Status](https://travis-ci.org/atom/wrap-guide.svg?branch=master)](https://travis-ci.org/atom/wrap-guide) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5qk1io3uar5j8hol/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/wrap-guide/branch/master) | [![Dependency Status](https://david-dm.org/atom/wrap-guide.svg)](https://david-dm.org/atom/wrap-guide) | +| Package | Github Actions | Dependencies | +|---|---|---| +| [About](https://github.com/atom/atom/tree/master/packages/about) | | [![Dependency Status](https://david-dm.org/atom/about.svg)](https://david-dm.org/atom/about) | +| [Archive View](https://github.com/atom/archive-view) | [![build](https://github.com/atom/archive-view/workflows/CI/badge.svg)](https://github.com/atom/archive-view/actions) | [![Dependency Status](https://david-dm.org/atom/archive-view.svg)](https://david-dm.org/atom/archive-view) | +| [AutoComplete Atom API](https://github.com/atom/autocomplete-atom-api) | [![build](https://github.com/atom/autocomplete-atom-api/workflows/CI/badge.svg)](https://github.com/atom/autocomplete-atom-api/actions) | [![Dependency Status](https://david-dm.org/atom/autocomplete-atom-api.svg)](https://david-dm.org/atom/autocomplete-atom-api) | +| [AutoComplete CSS](https://github.com/atom/autocomplete-css) | [![build](https://github.com/atom/autocomplete-css/workflows/CI/badge.svg)](https://github.com/atom/autocomplete-css/actions) | [![Dependency Status](https://david-dm.org/atom/autocomplete-css.svg)](https://david-dm.org/atom/autocomplete-css) | +| [AutoComplete HTML](https://github.com/atom/autocomplete-html) | [![build](https://github.com/atom/autocomplete-html/workflows/CI/badge.svg)](https://github.com/atom/autocomplete-html/actions) | [![Dependency Status](https://david-dm.org/atom/autocomplete-html.svg)](https://david-dm.org/atom/autocomplete-html) | +| [AutoComplete+](https://github.com/atom/autocomplete-plus) | [![build](https://github.com/atom/autocomplete-plus/workflows/CI/badge.svg)](https://github.com/atom/autocomplete-plus/actions) | [![Dependency Status](https://david-dm.org/atom/autocomplete-plus.svg)](https://david-dm.org/atom/autocomplete-plus) | +| [AutoComplete Snippets](https://github.com/atom/autocomplete-snippets) | [![build](https://github.com/atom/autocomplete-snippets/workflows/CI/badge.svg)](https://github.com/atom/autocomplete-snippets/actions) | [![Dependency Status](https://david-dm.org/atom/autocomplete-snippets.svg)](https://david-dm.org/atom/autocomplete-snippets) | +| [AutoFlow](https://github.com/atom/atom/tree/master/packages/autoflow) | | [![Dependency Status](https://david-dm.org/atom/autoflow.svg)](https://david-dm.org/atom/autoflow) | +| [AutoSave](https://github.com/atom/autosave) | [![build](https://github.com/atom/autosave/workflows/CI/badge.svg)](https://github.com/atom/autosave/actions) | [![Dependency Status](https://david-dm.org/atom/autosave.svg)](https://david-dm.org/atom/autosave) | +| [Background Tips](https://github.com/atom/background-tips) | [![build](https://github.com/atom/background-tips/workflows/CI/badge.svg)](https://github.com/atom/background-tips/actions) | [![Dependency Status](https://david-dm.org/atom/background-tips.svg)](https://david-dm.org/atom/background-tips) | +| [Bookmarks](https://github.com/atom/bookmarks) | [![build](https://github.com/atom/bookmarks/workflows/CI/badge.svg)](https://github.com/atom/bookmarks/actions) | [![Dependency Status](https://david-dm.org/atom/bookmarks.svg)](https://david-dm.org/atom/bookmarks) | +| [Bracket Matcher](https://github.com/atom/bracket-matcher) | [![build](https://github.com/atom/bracket-matcher/workflows/CI/badge.svg)](https://github.com/atom/bracket-matcher/actions) | [![Dependency Status](https://david-dm.org/atom/bracket-matcher.svg)](https://david-dm.org/atom/bracket-matcher) | +| [Command Palette](https://github.com/atom/command-palette) | [![build](https://github.com/atom/command-palette/workflows/CI/badge.svg)](https://github.com/atom/command-palette/actions) | [![Dependency Status](https://david-dm.org/atom/command-palette.svg)](https://david-dm.org/atom/command-palette) | +| [Deprecation Cop](https://github.com/atom/atom/tree/master/packages/deprecation-cop) | | [![Dependency Status](https://david-dm.org/atom/deprecation-cop.svg)](https://david-dm.org/atom/deprecation-cop) | +| [Dev Live Reload](https://github.com/atom/atom/tree/master/packages/dev-live-reload) | | [![Dependency Status](https://david-dm.org/atom/dev-live-reload.svg)](https://david-dm.org/atom/dev-live-reload) | +| [Encoding Selector](https://github.com/atom/encoding-selector) | [![build](https://github.com/atom/encoding-selector/workflows/CI/badge.svg)](https://github.com/atom/encoding-selector/actions) | [![Dependency Status](https://david-dm.org/atom/encoding-selector.svg)](https://david-dm.org/atom/encoding-selector) | +| [Exception Reporting](https://github.com/atom/atom/tree/master/packages/exception-reporting) | | [![Dependency Status](https://david-dm.org/atom/exception-reporting.svg)](https://david-dm.org/atom/exception-reporting) | +| [Find and Replace](https://github.com/atom/find-and-replace) | [![build](https://github.com/atom/find-and-replace/workflows/CI/badge.svg)](https://github.com/atom/find-and-replace/actions) | [![Dependency Status](https://david-dm.org/atom/find-and-replace.svg)](https://david-dm.org/atom/find-and-replace) | +| [Fuzzy Finder](https://github.com/atom/fuzzy-finder) | [![build](https://github.com/atom/fuzzy-finder/workflows/CI/badge.svg)](https://github.com/atom/fuzzy-finder/actions) | [![Dependency Status](https://david-dm.org/atom/fuzzy-finder.svg)](https://david-dm.org/atom/fuzzy-finder) | +| [GitHub](https://github.com/atom/github) | [![Build Status](https://github.com/atom/github/workflows/ci/badge.svg)](https://github.com/atom/github/actions?query=workflow%3Aci+branch%3Amaster) | [![Dependency Status](https://david-dm.org/atom/github.svg)](https://david-dm.org/atom/github) | +| [Git Diff](https://github.com/atom/atom/tree/master/packages/) | | [![Dependency Status](https://david-dm.org/atom/git-diff.svg)](https://david-dm.org/atom/git-diff) | +| [Go to Line](https://github.com/atom/atom/tree/master/packages/) | | [![Dependency Status](https://david-dm.org/atom/go-to-line.svg)](https://david-dm.org/atom/go-to-line) | +| [Grammar Selector](https://github.com/atom/atom/tree/master/packages/grammar-selector) | | [![Dependency Status](https://david-dm.org/atom/grammar-selector.svg)](https://david-dm.org/atom/grammar-selector) | +| [Image View](https://github.com/atom/image-view) | [![build](https://github.com/atom/image-view/workflows/CI/badge.svg)](https://github.com/atom/image-view/actions) | [![Dependency Status](https://david-dm.org/atom/image-view.svg)](https://david-dm.org/atom/image-view) | +| [Incompatible Packages](https://github.com/atom/incompatible-packages) | | [![Dependency Status](https://david-dm.org/atom/incompatible-packages.svg)](https://david-dm.org/atom/incompatible-packages) | +| [Keybinding Resolver](https://github.com/atom/keybinding-resolver) | [![build](https://github.com/atom/keybinding-resolver/workflows/CI/badge.svg)](https://github.com/atom/keybinding-resolver/actions) | [![Dependency Status](https://david-dm.org/atom/keybinding-resolver.svg)](https://david-dm.org/atom/keybinding-resolver) | +| [Line Ending Selector](https://github.com/atom/atom/tree/master/packages/line-ending-selector) | | [![Dependency Status](https://david-dm.org/atom/line-ending-selector.svg)](https://david-dm.org/atom/line-ending-selector) | +| [Link](https://github.com/atom/atom/tree/master/packages/link) | | [![Dependency Status](https://david-dm.org/atom/link.svg)](https://david-dm.org/atom/link) | +| [Markdown Preview](https://github.com/atom/markdown-preview) | [![build](https://github.com/atom/markdown-preview/workflows/CI/badge.svg)](https://github.com/atom/markdown-preview/actions) | [![Dependency Status](https://david-dm.org/atom/markdown-preview.svg)](https://david-dm.org/atom/markdown-preview) | +| [Metrics](https://github.com/atom/metrics) | [![build](https://github.com/atom/metrics/workflows/CI/badge.svg)](https://github.com/atom/metrics/actions) | [![Dependency Status](https://david-dm.org/atom/metrics.svg)](https://david-dm.org/atom/metrics) | +| [Notifications](https://github.com/atom/notifications) | [![build](https://github.com/atom/notifications/workflows/CI/badge.svg)](https://github.com/atom/notifications/actions) | [![Dependency Status](https://david-dm.org/atom/notifications.svg)](https://david-dm.org/atom/notifications) | +| [Open on GitHub](https://github.com/atom/open-on-github) | [![build](https://github.com/atom/open-on-github/workflows/CI/badge.svg)](https://github.com/atom/open-on-github/actions) | [![Dependency Status](https://david-dm.org/atom/open-on-github.svg)](https://david-dm.org/atom/open-on-github) | +| [Package Generator](https://github.com/atom/package-generator) | [![build](https://github.com/atom/package-generator/workflows/CI/badge.svg)](https://github.com/atom/package-generator/actions) | [![Dependency Status](https://david-dm.org/atom/package-generator.svg)](https://david-dm.org/atom/package-generator) | +| [Settings View](https://github.com/atom/settings-view) | [![build](https://github.com/atom/settings-view/workflows/CI/badge.svg)](https://github.com/atom/settings-view/actions) | [![Dependency Status](https://david-dm.org/atom/settings-view.svg)](https://david-dm.org/atom/settings-view) | +| [Snippets](https://github.com/atom/snippets) | [![build](https://github.com/atom/snippets/workflows/CI/badge.svg)](https://github.com/atom/snippets/actions) | [![Dependency Status](https://david-dm.org/atom/snippets.svg)](https://david-dm.org/atom/snippets) | +| [Spell Check](https://github.com/atom/spell-check) | [![build](https://github.com/atom/spell-check/workflows/CI/badge.svg)](https://github.com/atom/spell-check/actions) | [![Dependency Status](https://david-dm.org/atom/spell-check.svg)](https://david-dm.org/atom/spell-check) | +| [Status Bar](https://github.com/atom/status-bar) | [![build](https://github.com/atom/status-bar/workflows/CI/badge.svg)](https://github.com/atom/status-bar/actions) | [![Dependency Status](https://david-dm.org/atom/status-bar.svg)](https://david-dm.org/atom/status-bar) | +| [Styleguide](https://github.com/atom/styleguide) | [![build](https://github.com/atom/styleguide/workflows/CI/badge.svg)](https://github.com/atom/styleguide/actions) | [![Dependency Status](https://david-dm.org/atom/styleguide.svg)](https://david-dm.org/atom/styleguide) | +| [Symbols View](https://github.com/atom/symbols-view) | [![build](https://github.com/atom/symbols-view/workflows/CI/badge.svg)](https://github.com/atom/symbols-view/actions) | [![Dependency Status](https://david-dm.org/atom/symbols-view.svg)](https://david-dm.org/atom/symbols-view) | +| [Tabs](https://github.com/atom/tabs) | [![build](https://github.com/atom/tabs/workflows/CI/badge.svg)](https://github.com/atom/tabs/actions) | [![Dependency Status](https://david-dm.org/atom/tabs.svg)](https://david-dm.org/atom/tabs) | +| [Timecop](https://github.com/atom/timecop) | [![build](https://github.com/atom/timecop/workflows/CI/badge.svg)](https://github.com/atom/timecop/actions) | [![Dependency Status](https://david-dm.org/atom/timecop.svg)](https://david-dm.org/atom/timecop) | +| [Tree View](https://github.com/atom/tree-view) | [![build](https://github.com/atom/tree-view/workflows/CI/badge.svg)](https://github.com/atom/tree-view/actions) | [![Dependency Status](https://david-dm.org/atom/tree-view.svg)](https://david-dm.org/atom/tree-view) | +| [Update Package Dependencies](https://github.com/atom/atom/tree/master/packages/update-package-dependencies) | | [![Dependency Status](https://david-dm.org/atom/update-package-dependencies.svg)](https://david-dm.org/atom/update-package-dependencies) | +| [Welcome](https://github.com/atom/atom/tree/master/packages/welcome) | | [![Dependency Status](https://david-dm.org/atom/welcome.svg)](https://david-dm.org/atom/welcome) | +| [Whitespace](https://github.com/atom/whitespace) | [![build](https://github.com/atom/whitespace/workflows/CI/badge.svg)](https://github.com/atom/whitespace/actions) | [![Dependency Status](https://david-dm.org/atom/whitespace.svg)](https://david-dm.org/atom/whitespace) | +| [Wrap Guide](https://github.com/atom/wrap-guide) | [![build](https://github.com/atom/wrap-guide/workflows/CI/badge.svg)](https://github.com/atom/wrap-guide/actions) | [![Dependency Status](https://david-dm.org/atom/wrap-guide.svg)](https://david-dm.org/atom/wrap-guide) | ## Libraries -| Library | Travis | AppVeyor/Win | Dependencies | -|---------|--------|--------------|--------------| -| [Clear Cut](https://github.com/atom/clear-cut) | [![macOS Build Status](https://travis-ci.org/atom/clear-cut.svg?branch=master)](https://travis-ci.org/atom/clear-cut) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/civ54x89l06286m9/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/clear-cut/branch/master) | [![Dependency Status](https://david-dm.org/atom/clear-cut.svg)](https://david-dm.org/atom/clear-cut) | -| [Event Kit](https://github.com/atom/event-kit) | [![macOS Build Status](https://travis-ci.org/atom/event-kit.svg?branch=master)](https://travis-ci.org/atom/event-kit) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/lb32q70204lpmlxo/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/event-kit/branch/master) | [![Dependency Status](https://david-dm.org/atom/event-kit.svg)](https://david-dm.org/atom/event-kit) | -| [First Mate](https://github.com/atom/first-mate) | [![macOS Build Status](https://travis-ci.org/atom/first-mate.svg?branch=master)](https://travis-ci.org/atom/first-mate) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/p5im21uq22cwgb6d/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/first-mate) | [![Dependency Status](https://david-dm.org/atom/first-mate/status.svg)](https://david-dm.org/atom/first-mate) | -| [Fs Plus](https://github.com/atom/fs-plus) | [![macOS Build Status](https://travis-ci.org/atom/fs-plus.svg?branch=master)](https://travis-ci.org/atom/fs-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gf2tleqp0hdek3o3/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/fs-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/fs-plus.svg)](https://david-dm.org/atom/fs-plus) | -| [Grim](https://github.com/atom/grim) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/i4m37pol77vygrvb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/grim/branch/master) | [![Dependency Status](https://david-dm.org/atom/grim.svg)](https://david-dm.org/atom/grim) | -| [Jasmine Focused](https://github.com/atom/jasmine-focused) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/af0ipfqqxn7aygoe/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/jasmine-focused/branch/master) | [![Dependency Status](https://david-dm.org/atom/jasmine-focused.svg)](https://david-dm.org/atom/jasmine-focused) | -| [Keyboard Layout](https://github.com/atom/keyboard-layout) | [![macOS Build Status](https://travis-ci.org/atom/keyboard-layout.svg?branch=master)](https://travis-ci.org/atom/keyboard-layout) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/rk8wooeyh689apgd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/keyboard-layout) | [![Dependency Status](https://david-dm.org/atom/keyboard-layout/status.svg)](https://david-dm.org/atom/keyboard-layout) | -| [Oniguruma](https://github.com/atom/node-oniguruma) | [![macOS Build Status](https://travis-ci.org/atom/node-oniguruma.svg?branch=master)](https://travis-ci.org/atom/node-oniguruma) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/s9twhi451ef2butr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/node-oniguruma/branch/master) | [![Dependency Status](https://david-dm.org/atom/node-oniguruma.svg)](https://david-dm.org/atom/node-oniguruma) | -| [PathWatcher](https://github.com/atom/node-pathwatcher) | [![macOS Build Status](https://travis-ci.org/atom/node-pathwatcher.svg?branch=master)](https://travis-ci.org/atom/node-pathwatcher) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/li8dkoucdrc2ryts/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/node-pathwatcher) | [![Dependency Status](https://david-dm.org/atom/node-pathwatcher/status.svg)](https://david-dm.org/atom/node-pathwatcher) | -| [Property Accessors](https://github.com/atom/property-accessors) | [![macOS Build Status](https://travis-ci.org/atom/property-accessors.svg?branch=master)](https://travis-ci.org/atom/property-accessors) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ww4d10hi4v5h7kbp/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/property-accessors/branch/master) | [![Dependency Status](https://david-dm.org/atom/property-accessors.svg)](https://david-dm.org/atom/property-accessors) | -| [Season](https://github.com/atom/season) | [![macOS Build Status](https://travis-ci.org/atom/season.svg?branch=master)](https://travis-ci.org/atom/season) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/v3bth3ooq5q8k8lx/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/season) | [![Dependency Status](https://david-dm.org/atom/season.svg)](https://david-dm.org/atom/season) | -| [Superstring](https://github.com/atom/superstring) | [![macOS Build Status](https://travis-ci.org/atom/superstring.svg?branch=master)](https://travis-ci.org/atom/superstring) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/n5pack4yk7w80fso/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/superstring/branch/master) | | [![Dependency Status](https://david-dm.org/atom/superstring.svg)](https://david-dm.org/atom/superstring) | -| [TextBuffer](https://github.com/atom/text-buffer) | [![macOS Build Status](https://travis-ci.org/atom/text-buffer.svg?branch=master)](https://travis-ci.org/atom/text-buffer) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/48xl8do1sm2thf5p/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/text-buffer/branch/master) | [![Dependency Status](https://david-dm.org/atom/text-buffer.svg)](https://david-dm.org/atom/text-buffer) | -| [Underscore-Plus](https://github.com/atom/underscore-plus) | [![macOS Build Status](https://travis-ci.org/atom/underscore-plus.svg?branch=master)](https://travis-ci.org/atom/underscore-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/c7l8009vgpaojxcd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/underscore-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/underscore-plus.svg)](https://david-dm.org/atom/underscore-plus) | +| Library | Github Actions | Dependencies | +|---------|----------------|--------------| +| [Clear Cut](https://github.com/atom/clear-cut) | | [![Dependency Status](https://david-dm.org/atom/clear-cut.svg)](https://david-dm.org/atom/clear-cut) | +| [Event Kit](https://github.com/atom/event-kit) | [![build](https://github.com/atom/event-kit/workflows/CI/badge.svg)](https://github.com/atom/event-kit/actions) | [![Dependency Status](https://david-dm.org/atom/event-kit.svg)](https://david-dm.org/atom/event-kit) | +| [First Mate](https://github.com/atom/first-mate) | [![build](https://github.com/atom/first-mate/workflows/CI/badge.svg)](https://github.com/atom/first-mate/actions) | [![Dependency Status](https://david-dm.org/atom/first-mate/status.svg)](https://david-dm.org/atom/first-mate) | +| [Fs Plus](https://github.com/atom/fs-plus) | [![build](https://github.com/atom/fs-plus/workflows/CI/badge.svg)](https://github.com/atom/fs-plus/actions) | [![Dependency Status](https://david-dm.org/atom/fs-plus.svg)](https://david-dm.org/atom/fs-plus) | +| [Grim](https://github.com/atom/grim) | [![build](https://github.com/atom/grim/workflows/CI/badge.svg)](https://github.com/atom/grim/actions) | [![Dependency Status](https://david-dm.org/atom/grim.svg)](https://david-dm.org/atom/grim) | +| [Jasmine Focused](https://github.com/atom/jasmine-focused) | | [![Dependency Status](https://david-dm.org/atom/jasmine-focused.svg)](https://david-dm.org/atom/jasmine-focused) | +| [Keyboard Layout](https://github.com/atom/keyboard-layout) | [![build](https://github.com/atom/keyboard-layout/workflows/CI/badge.svg)](https://github.com/atom/keyboard-layout/actions) | [![Dependency Status](https://david-dm.org/atom/keyboard-layout/status.svg)](https://david-dm.org/atom/keyboard-layout) | +| [Oniguruma](https://github.com/atom/node-oniguruma) | [![build](https://github.com/atom/node-oniguruma/workflows/CI/badge.svg)](https://github.com/atom/node-oniguruma/actions) | [![Dependency Status](https://david-dm.org/atom/node-oniguruma.svg)](https://david-dm.org/atom/node-oniguruma) | +| [PathWatcher](https://github.com/atom/node-pathwatcher) | [![build](https://github.com/atom/node-pathwatcher/workflows/ci/badge.svg)](https://github.com/atom/node-pathwatcher/actions) | [![Dependency Status](https://david-dm.org/atom/node-pathwatcher/status.svg)](https://david-dm.org/atom/node-pathwatcher) | +| [Property Accessors](https://github.com/atom/property-accessors) | | [![Dependency Status](https://david-dm.org/atom/property-accessors.svg)](https://david-dm.org/atom/property-accessors) | +| [Season](https://github.com/atom/season) | | [![Dependency Status](https://david-dm.org/atom/season.svg)](https://david-dm.org/atom/season) | +| [Superstring](https://github.com/atom/superstring) | [![build](https://github.com/atom/superstring/workflows/ci/badge.svg)](https://github.com/atom/superstring/actions) | [![Dependency Status](https://david-dm.org/atom/superstring.svg)](https://david-dm.org/atom/superstring) | +| [TextBuffer](https://github.com/atom/text-buffer) | [![build](https://github.com/atom/text-buffer/workflows/CI/badge.svg)](https://github.com/atom/text-buffer/actions) | [![Dependency Status](https://david-dm.org/atom/text-buffer.svg)](https://david-dm.org/atom/text-buffer) | +| [Underscore-Plus](https://github.com/atom/underscore-plus) | [![build](https://github.com/atom/underscore-plus/workflows/CI/badge.svg)](https://github.com/atom/underscore-plus/actions) | [![Dependency Status](https://david-dm.org/atom/underscore-plus.svg)](https://david-dm.org/atom/underscore-plus) | ## Tools -| Language | Travis | AppVeyor/Win | Dependencies | -|----------|--------|--------------|--------------| -| [AtomDoc](https://github.com/atom/atomdoc) | [![macOS Build Status](https://travis-ci.org/atom/atomdoc.svg?branch=master)](https://travis-ci.org/atom/atomdoc) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/chi2bmaafr3puyq2/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/atomdoc/branch/master) | [![Dependency Status](https://david-dm.org/atom/atomdoc.svg)](https://david-dm.org/atom/atomdoc) +| Language | Github Actions | Dependencies | +|----------|----------------|--------------| +| [AtomDoc](https://github.com/atom/atomdoc) | [![build](https://github.com/atom/atomdoc/workflows/CI/badge.svg)](https://github.com/atom/atomdoc/actions) | [![Dependency Status](https://david-dm.org/atom/atomdoc.svg)](https://david-dm.org/atom/atomdoc) ## Languages -| Language | Travis | AppVeyor/Win | -|----------|--------|--------------| -| [C/C++](https://github.com/atom/language-c) | [![macOS Build Status](https://travis-ci.org/atom/language-c.svg?branch=master)](https://travis-ci.org/atom/language-c) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/8oy1hmp4yrij7c32/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-c/branch/master) | -| [C#](https://github.com/atom/language-csharp) | [![macOS Build Status](https://travis-ci.org/atom/language-csharp.svg?branch=master)](https://travis-ci.org/atom/language-csharp) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/j1as3753y5t90obn/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-csharp/branch/master) | -| [Clojure](https://github.com/atom/language-clojure) | [![macOS Build Status](https://travis-ci.org/atom/language-clojure.svg?branch=master)](https://travis-ci.org/atom/language-clojure) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/6kd5fs48y5hixde6/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-clojure/branch/master) | -| [CoffeeScript](https://github.com/atom/language-coffee-script) | [![macOS Build Status](https://travis-ci.org/atom/language-coffee-script.svg?branch=master)](https://travis-ci.org/atom/language-coffee-script) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/4j9aak7iwn2f2x7a/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-coffee-script/branch/master) | -| [CSS](https://github.com/atom/language-css) | [![macOS Build Status](https://travis-ci.org/atom/language-css.svg?branch=master)](https://travis-ci.org/atom/language-css) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/v8rvm88dxp73ko2y/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-css/branch/master) | -| [Git](https://github.com/atom/language-git) | [![macOS Build Status](https://travis-ci.org/atom/language-git.svg?branch=master)](https://travis-ci.org/atom/language-git) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/481319gyrr1feo8b/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-git/branch/master) | -| [GitHub Flavored Markdown](https://github.com/atom/language-gfm) | [![macOS Build Status](https://travis-ci.org/atom/language-gfm.svg?branch=master)](https://travis-ci.org/atom/language-gfm) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/rpub8qjyd8lt7wai/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-gfm/branch/master) | -| [Go](https://github.com/atom/language-go) | [![macOS Build Status](https://travis-ci.org/atom/language-go.svg?branch=master)](https://travis-ci.org/atom/language-go) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/3fxxvv05p4hv92pn/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-go/branch/master) | -| [HTML](https://github.com/atom/language-html) | [![macOS Build Status](https://travis-ci.org/atom/language-html.svg?branch=master)](https://travis-ci.org/atom/language-html) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/t6pk6mmdgcelfg85/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-html/branch/master) | -| [Hyperlink](https://github.com/atom/language-hyperlink) | [![macOS Build Status](https://travis-ci.org/atom/language-hyperlink.svg?branch=master)](https://travis-ci.org/atom/language-hyperlink) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5tgvhph394r684l8/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-hyperlink/branch/master) | -| [Java](https://github.com/atom/language-java) | [![macOS Build Status](https://travis-ci.org/atom/language-java.svg?branch=master)](https://travis-ci.org/atom/language-java) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/utoftje56n9u5x4h/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-java/branch/master) | -| [JavaScript](https://github.com/atom/language-javascript) | [![macOS Build Status](https://travis-ci.org/atom/language-javascript.svg?branch=master)](https://travis-ci.org/atom/language-javascript) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ktooccwna96ssiyr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-javascript-dijf8/branch/master) | -| [JSON](https://github.com/atom/language-json) | [![macOS Build Status](https://travis-ci.org/atom/language-json.svg?branch=master)](https://travis-ci.org/atom/language-json) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5rx05vhdikk6c4cl/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-json/branch/master) | -| [Less](https://github.com/atom/language-less) | [![macOS Build Status](https://travis-ci.org/atom/language-less.svg?branch=master)](https://travis-ci.org/atom/language-less) | [![Windows Build Sstatus](https://ci.appveyor.com/api/projects/status/aeina4fr4b0i7yay/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-less/branch/master) | -| [Make](https://github.com/atom/language-make) | [![macOS Build Status](https://travis-ci.org/atom/language-make.svg?branch=master)](https://travis-ci.org/atom/language-make) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/vq1aascey21wxjh7/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-make/branch/master) | -| [Mustache](https://github.com/atom/language-mustache) | [![macOS Build Status](https://travis-ci.org/atom/language-mustache.svg?branch=master)](https://travis-ci.org/atom/language-mustache) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/mbxnxaojqp0g7ldv/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-mustache/branch/master) | -| [Objective-C](https://github.com/atom/language-objective-c) | [![macOS Build Status](https://travis-ci.org/atom/language-objective-c.svg?branch=master)](https://travis-ci.org/atom/language-objective-c) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/27j8vfv5u95fjhkw/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-objective-c/branch/master) | -| [Perl](https://github.com/atom/language-perl) | [![macOS Build Status](https://travis-ci.org/atom/language-perl.svg?branch=master)](https://travis-ci.org/atom/language-perl) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/dfs9inkkg40hchf8/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-perl/branch/master) | -| [PHP](https://github.com/atom/language-php) | [![macOS Build Status](https://travis-ci.org/atom/language-php.svg?branch=master)](https://travis-ci.org/atom/language-php) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/y9h45ag4b72726jy/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-php/branch/master) | -| [Python](https://github.com/atom/language-python) | [![macOS Build Status](https://travis-ci.org/atom/language-python.svg?branch=master)](https://travis-ci.org/atom/language-python) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/hmxrb9jttjh41es9/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-python/branch/master) | -| [Ruby](https://github.com/atom/language-ruby) | [![macOS Build Status](https://travis-ci.org/atom/language-ruby.svg?branch=master)](https://travis-ci.org/atom/language-ruby) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/71as182rm1adf2br/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-ruby/branch/master) | -| [Ruby on Rails](https://github.com/atom/language-ruby-on-rails) | [![macOS Build Status](https://travis-ci.org/atom/language-ruby-on-rails.svg?branch=master)](https://travis-ci.org/atom/language-ruby-on-rails) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5t4pa451fu5e0ghg/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-ruby-on-rails/branch/master) | -| [Sass](https://github.com/atom/language-sass) | [![macOS Build Status](https://travis-ci.org/atom/language-sass.svg?branch=master)](https://travis-ci.org/atom/language-sass) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/g7p16vainm4iuoot/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-sass/branch/master) | -| [ShellScript](https://github.com/atom/language-shellscript) | [![macOS Build Status](https://travis-ci.org/atom/language-shellscript.svg?branch=master)](https://travis-ci.org/atom/language-shellscript) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/p4um3lowgrg8y0ty/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-shellscript/branch/master) | -| [SQL](https://github.com/atom/language-sql) | [![macOS Build Status](https://travis-ci.org/atom/language-sql.svg?branch=master)](https://travis-ci.org/atom/language-sql) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ji31ouk5ehs4jdu1/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-sql/branch/master) | -| [Text](https://github.com/atom/language-text) | [![macOS Build Status](https://travis-ci.org/atom/language-text.svg?branch=master)](https://travis-ci.org/atom/language-text) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/psnekekg8lon67dw/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-text/branch/master) | -| [TODO](https://github.com/atom/language-todo) | [![macOS Build Status](https://travis-ci.org/atom/language-todo.svg?branch=master)](https://travis-ci.org/atom/language-todo) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gcgb9m7h146lv6qp/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-todo/branch/master) | -| [TOML](https://github.com/atom/language-toml) | [![macOS Build Status](https://travis-ci.org/atom/language-toml.svg?branch=master)](https://travis-ci.org/atom/language-toml) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/kohao3fjyk6xv0sc/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-toml/branch/master) | -| [XML](https://github.com/atom/language-xml) | [![macOS Build Status](https://travis-ci.org/atom/language-xml.svg?branch=master)](https://travis-ci.org/atom/language-xml) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/m5f6rn74a6h3q5uq/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-xml/branch/master) | -| [YAML](https://github.com/atom/language-yaml) | [![macOS Build Status](https://travis-ci.org/atom/language-yaml.svg?branch=master)](https://travis-ci.org/atom/language-yaml) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/eaa4ql7kipgphc2n/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-yaml/branch/master) | +| Language | Github Actions | +|----------|----------------| +| [C/C++](https://github.com/atom/language-c) | [![build](https://github.com/atom/language-c/workflows/CI/badge.svg)](https://github.com/atom/language-c/actions) | +| [C#](https://github.com/atom/language-csharp) | [![build](https://github.com/atom/language-csharp/workflows/CI/badge.svg)](https://github.com/atom/language-csharp/actions) | +| [Clojure](https://github.com/atom/language-clojure) | [![build](https://github.com/atom/language-clojure/workflows/CI/badge.svg)](https://github.com/atom/language-clojure/actions) | +| [CoffeeScript](https://github.com/atom/language-coffee-script) | [![build](https://github.com/atom/language-coffee-script/workflows/CI/badge.svg)](https://github.com/atom/language-coffee-script/actions) | +| [CSS](https://github.com/atom/language-css) | [![build](https://github.com/atom/language-css/workflows/CI/badge.svg)](https://github.com/atom/language-css/actions) | +| [Git](https://github.com/atom/language-git) | [![build](https://github.com/atom/language-git/workflows/CI/badge.svg)](https://github.com/atom/language-git/actions) | +| [GitHub Flavored Markdown](https://github.com/atom/language-gfm) | [![build](https://github.com/atom/language-gfm/workflows/CI/badge.svg)](https://github.com/atom/language-gfm/actions) | +| [Go](https://github.com/atom/language-go) | [![build](https://github.com/atom/language-go/workflows/CI/badge.svg)](https://github.com/atom/language-go/actions) | +| [HTML](https://github.com/atom/language-html) | [![build](https://github.com/atom/language-html/workflows/CI/badge.svg)](https://github.com/atom/language-html/actions) | +| [Hyperlink](https://github.com/atom/language-hyperlink) | [![build](https://github.com/atom/language-hyperlink/workflows/CI/badge.svg)](https://github.com/atom/language-hyperlink/actions) | +| [Java](https://github.com/atom/language-java) | [![build](https://github.com/atom/language-java/workflows/build/badge.svg)](https://github.com/atom/language-java/actions) | +| [JavaScript](https://github.com/atom/language-javascript) | [![build](https://github.com/atom/language-javascript/workflows/ci/badge.svg)](https://github.com/atom/language-javascript/actions) | +| [JSON](https://github.com/atom/language-json) | [![build](https://github.com/atom/language-json/workflows/CI/badge.svg)](https://github.com/atom/language-json/actions) | +| [Less](https://github.com/atom/language-less) | [![build](https://github.com/atom/language-less/workflows/CI/badge.svg)](https://github.com/atom/language-less/actions) | +| [Make](https://github.com/atom/language-make) | [![build](https://github.com/atom/language-make/workflows/CI/badge.svg)](https://github.com/atom/language-make/actions) | +| [Mustache](https://github.com/atom/language-mustache) | [![build](https://github.com/atom/language-mustache/workflows/CI/badge.svg)](https://github.com/atom/language-mustache/actions) | +| [Objective-C](https://github.com/atom/language-objective-c) | [![build](https://github.com/atom/language-objective-c/workflows/CI/badge.svg)](https://github.com/atom/language-objective-c/actions) | +| [Pegjs](https://github.com/atom/language-pegjs) | | +| [Perl](https://github.com/atom/language-perl) | [![build](https://github.com/atom/language-perl/workflows/CI/badge.svg)](https://github.com/atom/language-perl/actions) | +| [PHP](https://github.com/atom/language-php) | [![build](https://github.com/atom/language-php/workflows/CI/badge.svg)](https://github.com/atom/language-php/actions) | +| [Property-List](https://github.com/atom/language-property-list) | [![build](https://github.com/atom/language-property-list/workflows/CI/badge.svg)](https://github.com/atom/language-property-list/actions) | +| [Puppet](https://github.com/atom/language-puppet) | [![build](https://github.com/atom/language-puppet/workflows/CI/badge.svg)](https://github.com/atom/language-puppet/actions) | +| [Python](https://github.com/atom/language-python) | [![build](https://github.com/atom/language-python/workflows/ci/badge.svg)](https://github.com/atom/language-python/actions) | +| [Ruby](https://github.com/atom/language-ruby) | [![build](https://github.com/atom/language-ruby/workflows/ci/badge.svg)](https://github.com/atom/language-ruby/actions) | +| [Ruby on Rails](https://github.com/atom/atom/tree/master/packages/ruby-on-rails) | | +| [Sass](https://github.com/atom/language-sass) | [![build](https://github.com/atom/language-sass/workflows/CI/badge.svg)](https://github.com/atom/language-sass/actions) | +| [Shellscript](https://github.com/atom/language-shellscript) | [![build](https://github.com/atom/language-shellscript/workflows/CI/badge.svg)](https://github.com/atom/language-shellscript/actions) | +| [Source](https://github.com/atom/language-source) | [![build](https://github.com/atom/language-source/workflows/CI/badge.svg)](https://github.com/atom/language-source/actions) | +| [SQL](https://github.com/atom/language-sql) | [![build](https://github.com/atom/language-sql/workflows/CI/badge.svg)](https://github.com/atom/language-sql/actions) | +| [Text](https://github.com/atom/language-text) | [![build](https://github.com/atom/language-text/workflows/CI/badge.svg)](https://github.com/atom/language-text/actions) | +| [TODO](https://github.com/atom/language-todo) | [![build](https://github.com/atom/language-todo/workflows/CI/badge.svg)](https://github.com/atom/language-todo/actions) | +| [TOML](https://github.com/atom/language-toml) | [![build](https://github.com/atom/language-toml/workflows/CI/badge.svg)](https://github.com/atom/language-toml/actions) | +| [TypeScript](https://github.com/atom/language-typescript) | [![build](https://github.com/atom/language-typescript/workflows/CI/badge.svg)](https://github.com/atom/language-typescript/actions) | +| [XML](https://github.com/atom/language-xml) | [![build](https://github.com/atom/language-xml/workflows/CI/badge.svg)](https://github.com/atom/language-xml/actions) | +| [YAML](https://github.com/atom/language-yaml) | [![build](https://github.com/atom/language-yaml/workflows/CI/badge.svg)](https://github.com/atom/language-yaml/actions) | diff --git a/docs/rfcs/005-grammar-comment-delims.md b/docs/rfcs/005-grammar-comment-delims.md new file mode 100644 index 000000000..013ac0c42 --- /dev/null +++ b/docs/rfcs/005-grammar-comment-delims.md @@ -0,0 +1,59 @@ +# Add comment delims to grammar declaration + +## Status + +Proposed + +## Summary + +Grammars currently only sort of declare their comment delims. E.g., TextMate JavaScript will say `'commentStart': '// '` (and not even in the same file as the grammar), and Tree-sitter says `comments: start: '// '` (in the same file; better). However, it is impossible to tell that `/* */` delimits JS block comments. This RFC is to request a grammar property to declare all comment delims a language supports. + +## Motivation + +It can be useful for a package to be able to treat comment characters abstractly. + +My specific need is for the resolution of `BLOCK_COMMENT_START` and similar variables for LSP snippets. There is currently no way I know of to resolve this without hardcoding it for each language. + +## Explanation + +This RFC is to have both line and block delims a property of the grammar. E.g., +```cson +# javascript.cson +comments: + line: '//' + start: '/*' + end: '*/' +``` + +The lack of a property would indicate the grammar does not have it (e.g., HTML would omit the `line` property), or that a grammar has not been updated to comply with this spec. If the latter, it may be possible to partially extract this information from the existing implementations (e.g., even now we can tell that JS has `//` for line comment and HTML has `` for block comments). + +This is similar to the current Tree-sitter grammars, but they currently mix line and block in the `start` key depending on if the language has line comments (so HTML has `start: ''`, but JS has `start: '//'`). + +## Drawbacks + +Many community grammars would not get this property added to them. However, this feature can be considered a strict enhancement of the current status, and non compliant grammars can be accounted for. E.g., if a grammar still declares `start: '//'` but doesn't have an `end` property, then it can be reinterpreted as a line delim. Additionally, users would be quick to raise an issue here (:frowning_face:) or on the language repo (:slightly_smiling_face:) if they are trying to use a feature that relies on this and it doesn't work. + +## Rationale and alternatives + +#### Why is this approach the best in the space of possible approaches? +Tying all language specific data to the language file makes intuitive sense. This is stuff that will not change based on what the user wants (and already is tied directly to Tree-sitter language files). + +#### What other approaches have been considered and what is the rationale for not choosing them? +It's possible to use the settings approach like for TextMate grammars. I find this unnecessarily separated though, especially for something like comment delims which shouldn't rely on what the user fancies. + +However, I'm not set on requiring the TextMate grammars to have it in the file (doing so would require an update on the First mate side too*). It can still work in the settings file. This would also support the possible language that has multiple delim characters (if it exists), letting the user set their choice. + +\* Maybe First mate should just add all properties from the file to the grammar it constructs, instead of a whitelist? It would save headaches around enhancing future grammar features. + + +#### What is the impact of not doing this? + Getting the snippet variables working would require hard coding them for each language, which is impossible to do completely. + +## Unresolved questions + +#### What unresolved questions do you expect to resolve through the RFC process before this gets merged? +#### What unresolved questions do you expect to resolve through the implementation of this feature before it is released in a new version of Atom? +#### What related issues do you consider out of scope for this RFC that could be addressed in the future independently of the solution that comes out of this RFC? +What I would like is then for public TextEditor methods `getCommentDelims` and `getCommentDelimsForPoint`, which returns all the correct delims for the root grammar, or the one at the given point (accounting for embedded grammars ... though could be weird when the embedded grammar is only something like TODO or SQL syntax). + +However, this future enhancement is not necessary for the current RFC. This RFC is about getting comment delim information tied to the Grammar object and is independant of any attempt to handle this information. diff --git a/docs/rfcs/005-pretranspile.md b/docs/rfcs/005-pretranspile.md new file mode 100644 index 000000000..cc6c13251 --- /dev/null +++ b/docs/rfcs/005-pretranspile.md @@ -0,0 +1,46 @@ +# Pre-transpiled Atom packages + +## Status + +Proposed + +## Summary + +This feature will enable package authors to use conventional npm tooling and package.json conventions to take advantage of JavaScript transpilers like Babel or TypeScript. + +## Motivation + +Transpiling packages on _publish_ rather than _load_ will have great benefits for package authors: + +* Standard `npm` tooling like `prepare` scripts will work for apm packages exactly as they work for npm packages. This will remove the need for custom transpiler pipeline modules like [atom-babel6-transpiler](https://github.com/atom/atom-babel6-transpiler) or [atom-typescript-transpiler](https://github.com/smhxx/atom-ts-transpiler) with their own, independent documentation, configuration and setup. +* Packages can move transpiler-related dependencies to `devDependencies` and trim installation bloat substantially. (as a data point, the TypeScript compiler is 30MB.) +* First-time package load will no longer take a hit from transpiling all of the source into the cache. + +## Explanation + +### Package publishing + +During the `apm publish` call, apm will invoke [`npm pack`](https://docs.npmjs.com/cli/pack) to run all standard npm lifecycle hooks and prepare a `.tar.gz` file. apm then uploads the `.tar.gz` file to atom.io, which uploads it to an S3 bucket. + +The `npm version` call will still be skipped if the `--tag` is provided, so manual publishing with `apm publish --tag` will still work as it does today. + +### Package installation + +When a user installs a package from atom.io, atom.io first checks to see if it has a precompiled tarball in its S3 bucket. If one is found, the artifact's public URL is returned as the `dist` field in the [API response](https://flight-manual.atom.io/atom-server-side-apis/sections/atom-package-server-api/#get-apipackagespackage_nameversionsversion_name). Otherwise, the existing logic is used to return the GitHub tag tarball URL that's returned now. + +## Drawbacks + +Doing this makes installing a package in production more different than loading it during development. This increases the number of variables that can cause issues between local development and the production of an `apm publish` artifact, like tweaking your `.npmignore` file properly. + +## Rationale and alternatives + +_Alternative: publish packages to Actual Npm.org._ We could identify Atom packages in the npm registry by the `engine` field we already use, which should keep regular npm from installing it by mistake. The downsides here are: + +* It becomes harder to search for _just_ Atom packages; we'd have to hack npm search a bit. +* "Starring" would likely break. +* The transition path for existing users of apm and atom.io is not as smooth. +* Easier to typo `apm` and `npm` commands and have an undesirable outcome. + +## Unresolved questions + +Do we want to deprecate transpilation-on-demand for local development, as well? It may add a bit of friction for package development, but transpilers like TypeScript tend to offer a `--watch` option to transpile live, and it would let us eliminate a lot of complexity in the way Atom loads JavaScript. diff --git a/docs/rfcs/005-scope-naming.md b/docs/rfcs/005-scope-naming.md new file mode 100644 index 000000000..e167e20af --- /dev/null +++ b/docs/rfcs/005-scope-naming.md @@ -0,0 +1,59 @@ +# Semantic scope naming + +## Status + +Proposed + +## Summary + +When deciding which scopes to apply, built-in grammars should be guided only by what would be useful to annotate. A suggested scope addition should be assessed by the semantic value it adds. It not be rejected if its _only_ drawback is that it would result in undesirable syntax highlighting for one of Atom’s built-in syntax themes. + +## Motivation + +Tree-sitter grammars are a unique opportunity to deliver more accurate scoping. They can identify constructs that would’ve been too ambiguous for a TM-style grammar. + +Scopes themselves are immensely powerful; they’re hooks that allow weirdos like myself to customize Atom to my exact specifications. Not only for syntax themes, either; I’ve got lots of commands that behave in different ways based on the surrounding scope. The richer the scope descriptor, the better. (Within reasonable bounds, of course.) + +## Explanation + +I think this is best illustrated by example. [Here’s a ticket](https://github.com/atom/language-javascript/issues/615) from `language-javascript` about syntax highlighting of imports. For example: + +```js +import { foo } from "thing"; +``` + +For reference, the `language-babel` grammar scopes `foo` as `variable.other.readwrite.js`. I’d probably opt for something like `variable.import`; others may want to put it into the `support` namespace. There’s actually little cross-language consensus here. + +But right now, that `foo` doesn’t have _any_ scope name applied in the tree-sitter JavaScript grammar, and this is by design. The explanation, as stated in the ticket, is that Atom wants to avoid marking a variable with a certain color if it doesn’t have the capability of making it the same color _throughout_ the document, across its various usages. + +This is a fine design goal; I don’t think @maxbrunsfeld is wrong to argue for it. But I’d suggest that it isn’t a design goal for `language-javascript` or any other grammar; it’s a design goal for a _syntax theme_, and a grammar should not refrain from applying scopes in order to satisfy the design goals of a specific syntax theme. + +This isn’t just a beard-stroking nitpick on my part. I can think of a handful of reasons why someone might want to be able to spot import names at a glance. It’s reasonable for someone to want `foo` in the example above to remain the same color throughout the file. It’s also reasonable, I think, to want `foo` to have a special color on the line where it’s introduced. Or to communicate that this token has special behavior — as it would if you have the [js-hyperclick](https://atom.io/packages/js-hyperclick) package installed and are in the habit of cmd-clicking package names to jump to the files where they’re defined. + +I don’t mind that the One Dark syntax theme doesn’t want to give `foo` a special color; I mind that its decision is also binding on _all possible_ syntax themes. If that scope name is present, and it’s undesirable to a syntax theme, that theme can apply the overrides necessary to ignore it. But if that scope name is missing altogether, that constrains _all_ syntax themes, and I’m unable to write a syntax theme that behaves differently. + +Thus, here’s what I propose: + +If an issue or PR proposes adding a scope and can justify its presence somehow — including the goal of parity with its non-tree-sitter predecessor — an answer of “no, because the built-in syntax themes don’t want to highlight it that way” should become “OK, but only if someone does the associated work to ensure no visual regressions in the built-in syntax themes.” That someone could be the PR’s author or anyone else who has an interest in getting it landed. + +This is tricky, of course — not only the coordination of PRs across packages, but also the need to apply overrides to all six (is it six? I think it’s six) of the built-in syntax themes. If all built-in themes are going to share an austere philosophy ([and it seems like that’s the plan](https://github.com/atom/atom/pull/18383#issuecomment-435460854)), then perhaps it makes sense for them to start sharing a core set of contextual rules. The only difference between them would be the specific color choices that they make. + +## Drawbacks + +The drawback is that what I’m suggesting is a lot of work. I don’t propose it lightly; I propose it because it strikes me as the least bad of all available choices. + +## Rationale and alternatives + +And what are those other choices? + +1. The status quo, in which built-in grammars (like `language-javascript`’s tree-sitter grammar) are developed with goals that are tightly coupled to the goals of syntax themes. I think this would be a tragic lost opportunity. The fact that the `tree-sitter-javascript` parser groks ES6 and JSX means that lots of people no longer have to rely on a third-party grammar like `language-babel`. If I can’t get my syntax highlighting the way I want it because the built-in grammar applies scopes too sparsely, then my only recourse is to write my own tree-sitter grammar that adds in the mappings I want. That’s easier than writing a TM-style grammar, but it still involves some portion of the community dedicating their efforts to an effective fork of `language-javascript`, and for far more mundane reasons than the fork that produced `language-babel` in the first place. + +2. A suggestion made by @Ben3eeE in [the issue that inspired this RFC](https://github.com/atom/language-javascript/issues/649): intentionally picking ornery scope names that don’t have implicit highlighting in the built-in syntax themes. That’s at least a way forward, but I think it abandons a hard-won lesson. TextMate’s attempt to devise a system of semantic scope names has borne quite a bit of fruit. It’s the reason why three major successor editors have signed on to the same conventions. Semantic naming acts as a kind of “middleware” that allows syntax themes and grammars to be unaware of each others’ implementation details. I _could_ write a PR that scopes our `foo` import from above with something like `import-specifier.identifier`, and I still might, but in choosing an arbitrary name I’m once again obligating syntax themes to care about a grammar’s implementation details. + +3. Some sort of grand compromise that I don’t have the breadth of experience to envision on my own. I’m hoping for this one, actually. For instance, it occurs to me that the “variables shouldn’t ever be highlighted with different colors across different usages” problem is only a problem in languages where there’s no sigil to mark variables. PHP, Perl, and Less don’t have this problem because all variables begin with a symbol. Maybe the solution is to include some token like `without-sigil` in the scope name, and then the built-in themes can write a rule like `.syntax--without-sigil { color: @mono-1 !important }`. + +## Unresolved questions + +- Ideally, I’d love to have some sort of canonical scope document like [TextMate](https://macromates.com/manual/en/language_grammars#naming_conventions) and [Sublime Text](https://www.sublimetext.com/docs/3/scope_naming.html) have. But the future of TM-style scope naming seems to be up in the air. I think that they’re no less relevant in the era of tree-sitter grammars, but I bet others disagree. +- To what extent should tree-sitter grammars be expected to scope documents identically to their TM-style predecessors? Obviously not 100%, or else there’d be no gains. What’s the right balancing test? +- Atom has made some infrastructural choices that can complicate how scopes get applied and consumed. Are these permanent? For instance, if I wanted to implement Alternative 2 (as described above), I could choose a scope name like `meta.variable.import`, on the assumption that `meta.`-prefixed scope names won’t have syntax highlighting. But `meta.variable` gets caught by a `.syntax--variable` CSS selector just as much as it would if the scope name began with `variable`. The order and hierarchy implied in the scope name is not actually present. Syntax themes could write selectors more creatively to get around this — e.g., `*[class^="syntax--variable "]` instead of `.syntax--variable` — but I don’t think many do, and I can hardly blame them. Is this a limitation that Atom can evolve its way out of without breaking anything? Or are we stuck with it? diff --git a/keymaps/linux.cson b/keymaps/linux.cson index 9d3e4dbb1..09c892f12 100644 --- a/keymaps/linux.cson +++ b/keymaps/linux.cson @@ -87,7 +87,7 @@ 'alt-8': 'pane:show-item-8' 'alt-9': 'pane:show-item-9' -'atom-workspace atom-text-editor': +'atom-text-editor': # Platform Bindings 'ctrl-left': 'editor:move-to-beginning-of-word' 'ctrl-right': 'editor:move-to-end-of-word' diff --git a/keymaps/win32.cson b/keymaps/win32.cson index 8a8e92249..c0574175f 100644 --- a/keymaps/win32.cson +++ b/keymaps/win32.cson @@ -92,7 +92,7 @@ 'alt-8': 'pane:show-item-8' 'alt-9': 'pane:show-item-9' -'atom-workspace atom-text-editor': +'atom-text-editor': # Platform Bindings 'ctrl-left': 'editor:move-to-beginning-of-word' 'ctrl-right': 'editor:move-to-end-of-word' diff --git a/package-lock.json b/package-lock.json index 303477739..aad5bc19c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "atom", - "version": "1.55.0-dev", + "version": "1.61.0-dev", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -21,29 +21,29 @@ } }, "@atom/fuzzy-native": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@atom/fuzzy-native/-/fuzzy-native-1.1.2.tgz", - "integrity": "sha512-rTzyOpAQFezOgxKomLG4kZZqu06gtT7w1AhLhsN9nwunZcOKSvxeQWj+YloPR04Ikb6kdE45UpK3ohyNhvtrSA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@atom/fuzzy-native/-/fuzzy-native-1.2.1.tgz", + "integrity": "sha512-ABUIbeQqfoA4WUK+PAsspM9jLaGlj0wjyIc9CIi1OMAHv71/vqrpJHPX2fHWiREEXYxwh/CBCshhkOWESbnNnQ==", "requires": { - "nan": "^2.14.0" - } - }, - "@atom/nsfw": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/@atom/nsfw/-/nsfw-1.0.26.tgz", - "integrity": "sha512-VpYcOglpGRn1Gg2CbyTftDo1y3jcjUaWsXueUVGhwk57EYZbt4Wgu5GvQ7qK4pudiLA56gvhshAslhokJpDJ2g==", - "requires": { - "fs-extra": "^7.0.0", - "nan": "^2.14.0" + "nan": "^2.14.2" }, "dependencies": { "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" } } }, + "@atom/nsfw": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/@atom/nsfw/-/nsfw-1.0.28.tgz", + "integrity": "sha512-GwMzcbylSJOsnPFHKhI1fonusHcT/4oJjCnhNrHuFfEPdTNObKfCmaAqL8n0zRBHnJy9LE+AFyfU0Z2e6wdFhg==", + "requires": { + "fs-extra": "^7.0.0", + "nan": "^2.14.0" + } + }, "@atom/source-map-support": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/@atom/source-map-support/-/source-map-support-0.3.4.tgz", @@ -53,9 +53,9 @@ } }, "@atom/watcher": { - "version": "1.3.4-0", - "resolved": "https://registry.npmjs.org/@atom/watcher/-/watcher-1.3.4-0.tgz", - "integrity": "sha512-sbS+yVf3BrB4gM7uZd/QEM8HpqyJh2hsbWy0z8eym7xhc09a4/uTRoq6Tl9CxQfGGXxtkNFs7qfOPUGKfYLnUg==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@atom/watcher/-/watcher-1.3.5.tgz", + "integrity": "sha512-QP95EnVtpQmlNVL3ravmVBbTDFteRi99CGvlP925d0+WvjPHSPOKYLxDUP3WyT+fCKqW0sboKrpPSwnbMZvCJw==", "requires": { "event-kit": "2.5.3", "fs-extra": "7.0.1", @@ -64,9 +64,9 @@ }, "dependencies": { "bl": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", - "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -113,15 +113,6 @@ "which-pm-runs": "^1.0.0" } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -143,22 +134,22 @@ } }, "tar-fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", - "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.0.0" + "tar-stream": "^2.1.4" } }, "tar-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", - "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", + "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", "requires": { - "bl": "^4.0.1", + "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", @@ -168,31 +159,31 @@ } }, "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.14.5" } }, "@babel/compat-data": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.5.tgz", - "integrity": "sha512-DTsS7cxrsH3by8nqQSpFSyjSfSYl57D6Cf4q8dW3LK83tBKBDCkfcay1nYkXq1nIHXnpX8WMMb/O25HOy3h1zg==" + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==" }, "@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", + "@babel/generator": "^7.12.5", "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.3", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", @@ -204,19 +195,19 @@ }, "dependencies": { "@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", + "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", "requires": { - "@babel/types": "^7.12.5", + "@babel/types": "^7.15.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { "ms": "2.1.2" } @@ -227,17 +218,17 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "requires": { "minimist": "^1.2.5" } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "minimist": { "version": "1.2.5", @@ -278,9 +269,9 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "source-map": { "version": "0.5.7", @@ -290,148 +281,102 @@ } }, "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", - "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-react-jsx-experimental": { - "version": "7.12.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz", - "integrity": "sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-module-imports": "^7.12.1", - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "requires": { - "@babel/types": "^7.12.5" - } - } + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-compilation-targets": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", - "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", + "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", "requires": { - "@babel/compat-data": "^7.12.5", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.14.5", - "semver": "^5.5.0" + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz", + "integrity": "sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==", "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.15.0", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", + "@babel/helper-split-export-declaration": "^7.14.5" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", - "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.14.5", "regexpu-core": "^4.7.1" } }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - }, - "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - } - } - }, "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.14.5" } }, "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" } }, "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", + "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.15.0" } }, "@babel/helper-module-imports": { @@ -443,146 +388,125 @@ } }, "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", + "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", + "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" }, "dependencies": { "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "requires": { - "@babel/types": "^7.12.5" + "@babel/types": "^7.14.5" } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" } } }, "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" } }, "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "requires": { - "lodash": "^4.17.19" - }, - "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - } - } + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-replace-supers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", - "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", + "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/helper-member-expression-to-functions": "^7.15.0", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" } }, "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.14.8" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.14.5" } }, "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" }, "@babel/helper-validator-option": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", - "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" }, "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", + "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -621,18 +545,18 @@ } }, "@babel/parser": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", - "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==" + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", + "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz", + "integrity": "sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { @@ -644,104 +568,57 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-proposal-decorators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz", - "integrity": "sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-decorators": "^7.12.1" - } - }, - "@babel/plugin-proposal-do-expressions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-do-expressions/-/plugin-proposal-do-expressions-7.12.1.tgz", - "integrity": "sha512-bpJ6Bfrzvdzb0vG6zBSNh3HLgFKh+S2CBpNmaLRjg2u7cNkzRPIqBjVURCmpG6pvPfKyxkizwbrXwpYtW3a9cw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-do-expressions": "^7.12.1" - } - }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.1.tgz", - "integrity": "sha512-z5Q4Ke7j0AexQRfgUvnD+BdCSgpTEKnqQ3kskk2jWtOBulxICzd1X9BGt7kmWftxZ2W3++OZdt5gtmC8KLxdRQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-default-from": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, - "@babel/plugin-proposal-function-bind": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.12.1.tgz", - "integrity": "sha512-Nic0blOXoeyuDJZJNh7kEZMqQUHakiUyxfyFMUV0Sy7DQ+Du9R7cZCUgTLnqq7Bc0Yx0iKRSe5wTmRWLKwxxpA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-function-bind": "^7.12.1" - } - }, - "@babel/plugin-proposal-function-sent": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.12.1.tgz", - "integrity": "sha512-EXB01ACyNW0WCffP4ip40TH82X86+U0dakFZjyiMpoZ8NFmL5MMARzVBzy+Gg59B6vTgfvIhRHUhe6tNUw+vjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/plugin-syntax-function-sent": "^7.12.1" - } - }, "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.5.tgz", - "integrity": "sha512-UiAnkKuOrCyjZ3sYNHlRlfuZJbBHknMQ9VMwVeX97Ofwx7RpD6gS2HfqTCh8KNUQgcOm8IKt103oR4KIjh7Q8g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, @@ -755,58 +632,40 @@ } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", - "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-proposal-pipeline-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-pipeline-operator/-/plugin-proposal-pipeline-operator-7.12.1.tgz", - "integrity": "sha512-iloNp4xu8YV8e/mZgGjePg9be1VkJSxQWIplRwgQtQPtF26ar3cHXL4sV8Fujlm2mm/Tu/WiA+FU+Fp7QVP7/g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-pipeline-operator": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-throw-expressions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.12.1.tgz", - "integrity": "sha512-kiWkKtm05K86C+T/nUazv+/Vxu93Aulrvof/ZrxVyGoUBVsVEWDrw9iChbe8tV+aPVQcjg4FQxKW3wUF7cRcpg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-throw-expressions": "^7.12.1" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-async-generators": { @@ -818,27 +677,11 @@ } }, "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.1.tgz", - "integrity": "sha512-ir9YW5daRrTYiy9UJ2TzdNIJEZu8KclVzDcfSt4iEmOtwQ4llPtWInNKJyKnVXp1vE4bbVd5S31M/im3mYMO1w==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-do-expressions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-do-expressions/-/plugin-syntax-do-expressions-7.12.1.tgz", - "integrity": "sha512-a9TknRXkzfetNjOWSWnPIG/Y7x+elzcmKng2Qpvh8QaqdPo0OABizTjco8YO8r5xZNQfE58YHq7lWR+PKwHyxg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-dynamic-import": { @@ -849,14 +692,6 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.12.1.tgz", - "integrity": "sha512-dP5eGg6tHEkhnRD2/vRG/KJKRSg8gtxu2i+P/8/yFPJn/CfPU5G0/7Gks2i3M6IOVAPQekmsLN9LPsmXFFL4Uw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, "@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", @@ -865,38 +700,6 @@ "@babel/helper-plugin-utils": "^7.8.3" } }, - "@babel/plugin-syntax-flow": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.1.tgz", - "integrity": "sha512-1lBLLmtxrwpm4VKmtVFselI/P3pX+G63fAtUUt6b2Nzgao77KNDwyuRt90Mj2/9pKobtt68FdvjfqohZjg/FCA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-function-bind": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.12.1.tgz", - "integrity": "sha512-YN14nxb0Q3/M7AUDnwnjFYpUylysfZ4KY/byhIz5PN7JyMJldjuUS+UmV7bOL6crQ0M69tuoevD/AlOveDeyMQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-function-sent": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.12.1.tgz", - "integrity": "sha512-mtBQvNHcIzLnmQZhgzigzrgFzIe95WvBXJuTN0m4CvhDK0gRNQ2MC2AVSzB6w7VnVh/z5+0iHFcbfqKMlFwTkQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -906,11 +709,11 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -961,86 +764,69 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-syntax-pipeline-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-pipeline-operator/-/plugin-syntax-pipeline-operator-7.12.1.tgz", - "integrity": "sha512-NazCTl1P9Kp+790g7gDRQEvhU0+OYbZVsuW45ThfgVCdUyhtxzFJeFrzY6BX/u/NfFyXWbKAIl6wR0PhJWwyDA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-throw-expressions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.12.1.tgz", - "integrity": "sha512-+8FLGK1PYYB7D8tU9U5zX23fnzkpxw4a7lAyyZbgk6b6bN0k2dft/xwcxIE+86i54wLJ83BaAboh2Ow6wf6jHw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" }, "dependencies": { "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "requires": { - "@babel/types": "^7.12.5" + "@babel/types": "^7.14.5" } } } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", - "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz", + "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz", + "integrity": "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==", "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", "globals": "^11.1.0" }, "dependencies": { @@ -1052,299 +838,281 @@ } }, "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz", - "integrity": "sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-flow": "^7.12.1" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz", + "integrity": "sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig==", "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-module-transforms": "^7.15.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.8", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", + "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz", + "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" + "@babel/helper-create-regexp-features-plugin": "^7.14.5" } }, "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" } }, "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-react-display-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", - "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz", + "integrity": "sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.5.tgz", - "integrity": "sha512-2xkcPqqrYiOQgSlM/iwto1paPijjsDbUynN13tI6bosDz/jOW3CRzYguIE8wKX32h+msbBM22Dv5fwrFkUOZjQ==", + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz", + "integrity": "sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==", "requires": { - "@babel/helper-builder-react-jsx": "^7.10.4", - "@babel/helper-builder-react-jsx-experimental": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.12.1" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.7.tgz", - "integrity": "sha512-Rs3ETtMtR3VLXFeYRChle5SsP/P9Jp/6dsewBQfokDSzKJThlsuFcnzLTDRALiUmTC48ej19YD9uN1mupEeEDg==", - "requires": { - "@babel/helper-builder-react-jsx-experimental": "^7.12.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.12.1" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.14.5", + "@babel/types": "^7.14.9" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "requires": { + "@babel/types": "^7.14.5" + } + } } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz", - "integrity": "sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==", + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.14.9.tgz", + "integrity": "sha512-Fqqu0f8zv9W+RyOnx29BX/RlEsBRANbOf5xs5oxb2aHP4FKbLXxIaVPUiCti56LAR1IixMH4EyaixhUsKqoBHw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz", - "integrity": "sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.14.5.tgz", + "integrity": "sha512-1TpSDnD9XR/rQ2tzunBVPThF5poaYT9GqP+of8fAtguYuI/dm2RkrMBDemsxtY0XBzvW7nXjYM0hRyKX9QYj7Q==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", - "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", - "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", - "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/preset-env": { @@ -1421,30 +1189,32 @@ }, "dependencies": { "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "requires": { - "@babel/types": "^7.12.5" + "@babel/types": "^7.14.5" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", + "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" } }, "semver": { @@ -1454,15 +1224,6 @@ } } }, - "@babel/preset-flow": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.12.1.tgz", - "integrity": "sha512-UAoyMdioAhM6H99qPoKvpHMzxmNVXno8GYU/7vZmGaHk6/KqfDYL1W0NxszVbJ2EP271b7e6Ox+Vk2A9QsB3Sw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-transform-flow-strip-types": "^7.12.1" - } - }, "@babel/preset-modules": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", @@ -1488,53 +1249,53 @@ } }, "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", + "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/traverse": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", - "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", + "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.5", - "@babel/types": "^7.12.5", + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" }, "dependencies": { "@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", + "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", "requires": { - "@babel/types": "^7.12.5", + "@babel/types": "^7.15.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { "ms": "2.1.2" } @@ -1549,11 +1310,6 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1567,20 +1323,14 @@ } }, "@babel/types": { - "version": "7.12.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", - "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" }, "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -1675,6 +1425,11 @@ "resolved": "https://registry.npmjs.org/accessibility-developer-tools/-/accessibility-developer-tools-2.12.0.tgz", "integrity": "sha1-PaDM6dbsY3OWS4TzXbfPw996tRQ=" }, + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" + }, "afinn-165": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/afinn-165/-/afinn-165-1.0.4.tgz", @@ -1686,9 +1441,9 @@ "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" }, "ajv": { - "version": "6.12.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", - "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1696,6 +1451,24 @@ "uri-js": "^4.2.2" } }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } + }, + "alter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz", + "integrity": "sha1-x1iICGF1cgNKrmJICvJrHU0cs80=", + "requires": { + "stable": "~0.1.3" + } + }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", @@ -1711,6 +1484,11 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -1730,8 +1508,8 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "archive-view": { - "version": "https://www.atom.io/api/packages/archive-view/versions/0.65.2/tarball", - "integrity": "sha512-TfRs+zt7Zol0wHKm0znMHYystbhDu8biCht7o5hM388GAtFntMxd7jb70BY3KCNa0MJcz9+uV8T76ZSshPfjOw==", + "version": "https://www.atom.io/api/packages/archive-view/versions/0.66.0/tarball", + "integrity": "sha512-EsdutCek6vHN4RKQjaE+JgFc6yoJlk2NSAOb9wm2qj6arTromdK+ujhDnV0TiOd2edEnpn4Z4bY6GrlhOs8auw==", "requires": { "etch": "0.9.0", "fs-plus": "^3.0.0", @@ -1803,6 +1581,16 @@ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" }, + "ast-traverse": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", + "integrity": "sha1-ac8rg4bxnc2hux4F1o/jWdiJfeY=" + }, + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=" + }, "async": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", @@ -1834,16 +1622,16 @@ } }, "atom-keymap": { - "version": "8.2.14", - "resolved": "https://registry.npmjs.org/atom-keymap/-/atom-keymap-8.2.14.tgz", - "integrity": "sha512-9ofjA8IG/RNJcqvMvYglc0l7DljavIUQvGs5xdEtd5dEYX4rCQo9coeBfGaC0YM7FB0SBHPZy39QYFROkOzTOw==", + "version": "8.2.15", + "resolved": "https://registry.npmjs.org/atom-keymap/-/atom-keymap-8.2.15.tgz", + "integrity": "sha512-oYDDhro613LsRRlk8gfgOu3/uWWrhQ2gEDm4DEK/B8Rrg6ajBBKmAeNWWVDSNzwr+dysatOEBBWbIAor84ijgg==", "requires": { "clear-cut": "^2", "emissary": "^1.1.0", "event-kit": "^1.0.0", "fs-plus": "^3.0.0", "grim": "^1.2.1", - "keyboard-layout": "2.0.16", + "keyboard-layout": "2.0.17", "pathwatcher": "^8.0.0", "property-accessors": "^1", "season": "^6.0.2" @@ -1879,19 +1667,12 @@ "integrity": "sha512-7UMEHdTtBV5sJONT0uMeQ6M8JFdfMQy/14rxuP6OuoFfSiDjxyZHuorIbv8gqhRB3FQMMLPzqONoFJE2cpHiCg==" }, "atom-select-list": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/atom-select-list/-/atom-select-list-0.7.2.tgz", - "integrity": "sha512-a707OB1DhLGjzqtFrtMQKH7BBxFuCh8UBoUWxgFOrLrSwVh3g+/TlVPVDOz12+U0mDu3mIrnYLqQyhywQOTxhw==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/atom-select-list/-/atom-select-list-0.8.1.tgz", + "integrity": "sha512-MpwlZmmI81odx7rY+HpJrRmDW9aXlkFDFDNt70JxrPibxEh8h9HCZZj22woa4CKFKVXC8sEiLMcNtuDeE10jog==", "requires": { - "etch": "^0.12.6", + "etch": "^0.14.0", "fuzzaldrin": "^2.1.0" - }, - "dependencies": { - "etch": { - "version": "0.12.8", - "resolved": "https://registry.npmjs.org/etch/-/etch-0.12.8.tgz", - "integrity": "sha512-dFLRe4wLroVtwzyy1vGlE3BSDZHiL0kZME5XgNGzZIULcYTvVno8vbiIleAesoKJmwWaxDTzG+4eppg2zk14JQ==" - } } }, "atom-slick": { @@ -1912,33 +1693,30 @@ "integrity": "sha512-AHEZOz7RcIdPWlGQByHGUE9yVhn1O9qJQRHehvkN8riiUyJpNpaImk7dloH8Nw/JX14tKJhjT+EadY2u/+j7IQ==" }, "autocomplete-plus": { - "version": "https://www.atom.io/api/packages/autocomplete-plus/versions/2.42.3/tarball", - "integrity": "sha512-/5Ou9lH8Yc7F7Hfl7UDu8zpVZCEYfYCGs0FxR+Z6+yS0O5k7TfYoJE74KgHHhW3vGAgDPph8/JIPptc5/a1YbQ==", + "version": "https://www.atom.io/api/packages/autocomplete-plus/versions/2.42.4/tarball", + "integrity": "sha512-Z5ZsDloPCJZwWC6pvPb504S1sWKZaqKc97m5TtDtXljym/RJdVdiiV1rJ9Kbb3plChQslx85tK5Ytjg1bQKmIA==", "requires": { "atom-slick": "^2.0.0", - "dompurify": "^1.0.8", + "dompurify": "^2.0.7", "fuzzaldrin": "^2.1.0", "fuzzaldrin-plus": "^0.6.0", "grim": "^2.0.1", - "marked": "^0.5.1", + "marked": "^0.7.0", "minimatch": "^3.0.3", "selector-kit": "^0.1", "stable": "^0.1.5", "underscore-plus": "^1.6.6" }, "dependencies": { - "grim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/grim/-/grim-2.0.2.tgz", - "integrity": "sha512-Qj7hTJRfd87E/gUgfvM0YIH/g2UA2SV6niv6BYXk1o6w4mhgv+QyYM1EjOJQljvzgEj4SqSsRWldXIeKHz3e3Q==", - "requires": { - "event-kit": "^2.0.0" - } + "dompurify": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.2.6.tgz", + "integrity": "sha512-7b7ZArhhH0SP6W2R9cqK6RjaU82FZ2UPM7RO8qN1b1wyvC/NY1FNWcX1Pu00fFOAnzEORtwXe4bPaClg6pUybQ==" }, "marked": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.5.2.tgz", - "integrity": "sha512-fdZvBa7/vSQIZCi4uuwo2N3q+7jJURpMVCcbaX0S1Mg65WZ5ilXvC67MviJAsdjqqgD+CEq4RKo5AYGgINkVAA==" + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", + "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==" } } }, @@ -1969,21 +1747,84 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==" }, - "babel-plugin-add-module-exports": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.4.tgz", - "integrity": "sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg==" - }, - "babel-plugin-codegen": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-codegen/-/babel-plugin-codegen-4.0.1.tgz", - "integrity": "sha512-cehTkKAGgENw+ftEngX/zVfFqMxFFItsatwmLHfxVLJCnkJvREQhsCb5/WNrNdP7L3tbwGgd5JQt9dFth+p24g==", + "babel-core": { + "version": "5.8.38", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-5.8.38.tgz", + "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", "requires": { - "@babel/runtime": "^7.9.2", - "babel-plugin-macros": "^2.8.0", - "require-from-string": "^2.0.2" + "babel-plugin-constant-folding": "^1.0.1", + "babel-plugin-dead-code-elimination": "^1.0.2", + "babel-plugin-eval": "^1.0.1", + "babel-plugin-inline-environment-variables": "^1.0.1", + "babel-plugin-jscript": "^1.0.4", + "babel-plugin-member-expression-literals": "^1.0.1", + "babel-plugin-property-literals": "^1.0.1", + "babel-plugin-proto-to-assign": "^1.0.3", + "babel-plugin-react-constant-elements": "^1.0.3", + "babel-plugin-react-display-name": "^1.0.3", + "babel-plugin-remove-console": "^1.0.1", + "babel-plugin-remove-debugger": "^1.0.1", + "babel-plugin-runtime": "^1.0.7", + "babel-plugin-undeclared-variables-check": "^1.0.2", + "babel-plugin-undefined-to-void": "^1.1.6", + "babylon": "^5.8.38", + "bluebird": "^2.9.33", + "chalk": "^1.0.0", + "convert-source-map": "^1.1.0", + "core-js": "^1.0.0", + "debug": "^2.1.1", + "detect-indent": "^3.0.0", + "esutils": "^2.0.0", + "fs-readdir-recursive": "^0.1.0", + "globals": "^6.4.0", + "home-or-tmp": "^1.0.0", + "is-integer": "^1.0.4", + "js-tokens": "1.0.1", + "json5": "^0.4.0", + "lodash": "^3.10.0", + "minimatch": "^2.0.3", + "output-file-sync": "^1.1.0", + "path-exists": "^1.0.0", + "path-is-absolute": "^1.0.0", + "private": "^0.1.6", + "regenerator": "0.8.40", + "regexpu": "^1.3.0", + "repeating": "^1.1.2", + "resolve": "^1.1.6", + "shebang-regex": "^1.0.0", + "slash": "^1.0.0", + "source-map": "^0.5.0", + "source-map-support": "^0.2.10", + "to-fast-properties": "^1.0.0", + "trim-right": "^1.0.0", + "try-resolve": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "requires": { + "brace-expansion": "^1.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } } }, + "babel-plugin-constant-folding": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz", + "integrity": "sha1-g2HTZMmORJw2kr26Ue/whEKQqo4=" + }, + "babel-plugin-dead-code-elimination": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz", + "integrity": "sha1-X3xFEnTc18zNv7s+C4XdKBIfD2U=" + }, "babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", @@ -1992,6 +1833,21 @@ "object.assign": "^4.1.0" } }, + "babel-plugin-eval": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz", + "integrity": "sha1-ovrtJc5r5preS/7CY/cBaRlZUNo=" + }, + "babel-plugin-inline-environment-variables": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz", + "integrity": "sha1-H1jOkSB61qgmqL9kX6/mj/X+P/4=" + }, + "babel-plugin-jscript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz", + "integrity": "sha1-jzQsOCduh6R9X6CovT1etsytj8w=" + }, "babel-plugin-macros": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", @@ -2002,16 +1858,34 @@ "resolve": "^1.12.0" } }, - "babel-plugin-preval": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-preval/-/babel-plugin-preval-5.0.0.tgz", - "integrity": "sha512-8DqJq6/LPUjSZ0Qq6bVIFpsj2flCEE0Cbnbut9TvGU6jP9g3dOWEXtQ/sdvsA9d6souza8eNGh04WRXpuH9ThA==", + "babel-plugin-member-expression-literals": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz", + "integrity": "sha1-zF7bD6qNyScXDnTW0cAkQAIWJNM=" + }, + "babel-plugin-property-literals": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz", + "integrity": "sha1-AlIwGQAZKYCxwRjv6kjOk6q4MzY=" + }, + "babel-plugin-proto-to-assign": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz", + "integrity": "sha1-xJ56/QL1d7xNoF6i3wAiUM980SM=", "requires": { - "@babel/runtime": "^7.9.2", - "babel-plugin-macros": "^2.8.0", - "require-from-string": "^2.0.2" + "lodash": "^3.9.3" } }, + "babel-plugin-react-constant-elements": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz", + "integrity": "sha1-lGc26DeEKcvDSdz/YvUcFDs041o=" + }, + "babel-plugin-react-display-name": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz", + "integrity": "sha1-dU/jiSboQkpOexWrbqYTne4FFPw=" + }, "babel-plugin-relay": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-relay/-/babel-plugin-relay-5.0.0.tgz", @@ -2020,77 +1894,39 @@ "babel-plugin-macros": "^2.0.0" } }, - "babel-plugin-transform-not-strict": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-not-strict/-/babel-plugin-transform-not-strict-0.3.1.tgz", - "integrity": "sha512-1m9IY7AYL84Pj0UWpWizDdI/uuKFp+UjBqHBuSsJSlf8//yK3RfQXWVxVXEeYNgUPa36bCIFeVIeE2cFuWxJGA==" + "babel-plugin-remove-console": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz", + "integrity": "sha1-2PJFVsOgUAXUKqqv0neH9T/wE6c=" }, - "babel-preset-atomic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-atomic/-/babel-preset-atomic-3.0.0.tgz", - "integrity": "sha512-PnJPs+m+v+z2gAxSMfE+bVk7E96e434YMypfAKrXLjy4qoPGV/9XeE0Ab0Ol/0lsHLZ37ZhVzYIETTfamgrZpw==", + "babel-plugin-remove-debugger": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz", + "integrity": "sha1-/S6jzWGkKK0fO5yJiC/0KT6MFMc=" + }, + "babel-plugin-runtime": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz", + "integrity": "sha1-v3x9lm3Vbs1cF/ocslPJrLflSq8=" + }, + "babel-plugin-undeclared-variables-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz", + "integrity": "sha1-XPGqU52BP/ZOmWQSkK9iCWX2Xe4=", "requires": { - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-decorators": "^7.12.1", - "@babel/plugin-proposal-do-expressions": "7.12.1", - "@babel/plugin-proposal-export-default-from": "7.12.1", - "@babel/plugin-proposal-export-namespace-from": "7.12.1", - "@babel/plugin-proposal-function-bind": "7.12.1", - "@babel/plugin-proposal-function-sent": "7.12.1", - "@babel/plugin-proposal-json-strings": "7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "7.12.1", - "@babel/plugin-proposal-numeric-separator": "7.12.1", - "@babel/plugin-proposal-optional-chaining": "7.12.1", - "@babel/plugin-proposal-pipeline-operator": "7.12.1", - "@babel/plugin-proposal-private-methods": "7.12.1", - "@babel/plugin-proposal-throw-expressions": "7.12.1", - "@babel/plugin-syntax-dynamic-import": "7.8.3", - "@babel/plugin-syntax-import-meta": "7.10.4", - "@babel/plugin-transform-reserved-words": "^7.12.1", - "@babel/preset-env": "7.12.1", - "@babel/preset-flow": "7.12.1", - "@babel/preset-react": "7.12.1", - "babel-plugin-add-module-exports": "^1.0.4", - "babel-plugin-codegen": "^4.0.1", - "babel-plugin-preval": "^5.0.0", - "babel-plugin-transform-not-strict": "^0.3.1" - }, - "dependencies": { - "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", - "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/preset-react": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.1.tgz", - "integrity": "sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-transform-react-display-name": "^7.12.1", - "@babel/plugin-transform-react-jsx": "^7.12.1", - "@babel/plugin-transform-react-jsx-development": "^7.12.1", - "@babel/plugin-transform-react-jsx-self": "^7.12.1", - "@babel/plugin-transform-react-jsx-source": "^7.12.1", - "@babel/plugin-transform-react-pure-annotations": "^7.12.1" - } - } + "leven": "^1.0.2" } }, + "babel-plugin-undefined-to-void": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz", + "integrity": "sha1-f1eO+LeN+uYAM4XYQXph7aBuL4E=" + }, + "babylon": { + "version": "5.8.38", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-5.8.38.tgz", + "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=" + }, "background-tips": { "version": "https://www.atom.io/api/packages/background-tips/versions/0.28.0/tarball", "integrity": "sha512-mEEkeL6bY6ZSPl7WCHjhJ4KjVUU9UElHb4CB4MhnW4b4mRTHaWR7rnnCVq312wRZ9cwjdvd/5OTXXbD2AQyfYw==", @@ -2149,11 +1985,32 @@ "inherits": "~2.0.0" } }, + "bluebird": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" + }, "bookmarks": { "version": "https://www.atom.io/api/packages/bookmarks/versions/0.46.0/tarball", "integrity": "sha512-ZgYwD3Diq6nkagxuorWuKXyUBMJUZjjK1ePEYUUEzh155QcD/H1k66RZ/SfO5HrWZ4fPN+j6ux/qoXcnD77Ntg==", "requires": { "atom-select-list": "^0.7.0" + }, + "dependencies": { + "atom-select-list": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/atom-select-list/-/atom-select-list-0.7.2.tgz", + "integrity": "sha512-a707OB1DhLGjzqtFrtMQKH7BBxFuCh8UBoUWxgFOrLrSwVh3g+/TlVPVDOz12+U0mDu3mIrnYLqQyhywQOTxhw==", + "requires": { + "etch": "^0.12.6", + "fuzzaldrin": "^2.1.0" + } + }, + "etch": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/etch/-/etch-0.12.8.tgz", + "integrity": "sha512-dFLRe4wLroVtwzyy1vGlE3BSDZHiL0kZME5XgNGzZIULcYTvVno8vbiIleAesoKJmwWaxDTzG+4eppg2zk14JQ==" + } } }, "boolbase": { @@ -2180,27 +2037,33 @@ } }, "bracket-matcher": { - "version": "https://www.atom.io/api/packages/bracket-matcher/versions/0.91.2/tarball", - "integrity": "sha512-uffferGp0T2BUDiOsY3WNAYBBe3QTNrobY2fonn/Q11CS2N64HokExCGsjZEBwGfKD1dFlT5FgSsCNSEdqmsrQ==", + "version": "https://www.atom.io/api/packages/bracket-matcher/versions/0.92.0/tarball", + "integrity": "sha512-zHZq87FKwVRJKc5r9Qk/MPiQ1V6JP3w/bDvQTqkUYP8bC3ay6XEWgIFAw68OuKi178q2ckZZ0lhf4UUUVe1DVw==", "requires": { "first-mate": "^7.4.1", "underscore-plus": "1.x" } }, + "breakable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/breakable/-/breakable-1.0.0.tgz", + "integrity": "sha1-eEp5eRWjjq0nutRWtVcstLuqeME=" + }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, "browserslist": { - "version": "4.14.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.6.tgz", - "integrity": "sha512-zeFYcUo85ENhc/zxHbiIp0LGzzTrE2Pv2JhxvS7kpUb9Q9D38kUX6Bie7pGutJ/5iF5rOxE7CepAuWD56xJ33A==", + "version": "4.16.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz", + "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==", "requires": { - "caniuse-lite": "^1.0.30001154", - "electron-to-chromium": "^1.3.585", + "caniuse-lite": "^1.0.30001251", + "colorette": "^1.3.0", + "electron-to-chromium": "^1.3.811", "escalade": "^3.1.1", - "node-releases": "^1.1.65" + "node-releases": "^1.1.75" } }, "buffer": { @@ -2281,26 +2144,54 @@ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" }, "caniuse-lite": { - "version": "1.0.30001156", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001156.tgz", - "integrity": "sha512-z7qztybA2eFZTB6Z3yvaQBIoJpQtsewRD74adw2UbRWwsRq3jIPvgrQGawBMbfafekQaD21FWuXNcywtTDGGCw==" + "version": "1.0.30001251", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz", + "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==" }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", - "pathval": "^1.1.0", + "pathval": "^1.1.1", "type-detect": "^4.0.5" + }, + "dependencies": { + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" + } + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "charenc": { @@ -2529,18 +2420,18 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", + "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==" }, "colors": { "version": "0.6.2", @@ -2563,6 +2454,78 @@ "fuzzaldrin": "^2.1.0", "fuzzaldrin-plus": "^0.6.0", "underscore-plus": "^1.0.0" + }, + "dependencies": { + "atom-select-list": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/atom-select-list/-/atom-select-list-0.7.2.tgz", + "integrity": "sha512-a707OB1DhLGjzqtFrtMQKH7BBxFuCh8UBoUWxgFOrLrSwVh3g+/TlVPVDOz12+U0mDu3mIrnYLqQyhywQOTxhw==", + "requires": { + "etch": "^0.12.6", + "fuzzaldrin": "^2.1.0" + } + }, + "etch": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/etch/-/etch-0.12.8.tgz", + "integrity": "sha512-dFLRe4wLroVtwzyy1vGlE3BSDZHiL0kZME5XgNGzZIULcYTvVno8vbiIleAesoKJmwWaxDTzG+4eppg2zk14JQ==" + } + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "commoner": { + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", + "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", + "requires": { + "commander": "^2.5.0", + "detective": "^4.3.1", + "glob": "^5.0.15", + "graceful-fs": "^4.1.2", + "iconv-lite": "^0.4.5", + "mkdirp": "^0.5.0", + "private": "^0.1.6", + "q": "^1.1.2", + "recast": "^0.11.17" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "requires": { + "ast-types": "0.9.6", + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } } }, "compare-sets": { @@ -2593,12 +2556,17 @@ "safe-buffer": "~5.1.1" } }, + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.16.2.tgz", + "integrity": "sha512-4lUshXtBXsdmp8cDWh6KKiHUg40AjiuPD3bOWkNVsr1xkAhpUqCjaZ8lB1bKx9Gb5fXcbRbFJ4f4qpRIRTuJqQ==", "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.16.7", "semver": "7.0.0" }, "dependencies": { @@ -2774,6 +2742,63 @@ "object-keys": "^1.0.12" } }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "defs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/defs/-/defs-1.1.1.tgz", + "integrity": "sha1-siYJ8sehG6ej2xFoBcE5scr/qdI=", + "requires": { + "alter": "~0.2.0", + "ast-traverse": "~0.1.1", + "breakable": "~1.0.0", + "esprima-fb": "~15001.1001.0-dev-harmony-fb", + "simple-fmt": "~0.1.0", + "simple-is": "~0.2.0", + "stringmap": "~0.2.2", + "stringset": "~0.2.1", + "tryor": "~0.1.2", + "yargs": "~3.27.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + }, + "yargs": { + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz", + "integrity": "sha1-ISBUaTFuk5Ex1Z8toMbX+YIh6kA=", + "requires": { + "camelcase": "^1.2.1", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "os-locale": "^1.4.0", + "window-size": "^0.1.2", + "y18n": "^3.2.0" + } + } + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2798,7 +2823,7 @@ "etch": "0.9.0", "fs-plus": "^3.0.0", "grim": "^2.0.1", - "marked": "^0.3.6", + "marked": "^4.0.10", "underscore-plus": "^1.7.0" }, "dependencies": { @@ -2816,17 +2841,36 @@ } }, "marked": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", - "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==" + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.10.tgz", + "integrity": "sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw==" } } }, + "detect-indent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz", + "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", + "requires": { + "get-stdin": "^4.0.1", + "minimist": "^1.1.0", + "repeating": "^1.1.0" + } + }, "detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, + "detective": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", + "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", + "requires": { + "acorn": "^5.2.1", + "defined": "^1.0.0" + } + }, "dev-live-reload": { "version": "file:packages/dev-live-reload", "requires": { @@ -2848,6 +2892,11 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, + "document-register-element": { + "version": "1.14.10", + "resolved": "https://registry.npmjs.org/document-register-element/-/document-register-element-1.14.10.tgz", + "integrity": "sha512-w5UA37hEIrs+9pruo2yR5UD13c4UHDlkqqjt4qurnp7QsBI9b1IOi8WXUim+aCqKBsENX3Z/cso7XMOuwJH1Yw==" + }, "dom-serializer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", @@ -2994,9 +3043,9 @@ } }, "electron-to-chromium": { - "version": "1.3.589", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.589.tgz", - "integrity": "sha512-rQItBTFnol20HaaLm26UgSUduX7iGerwW7pEYX17MB1tI6LzFajiLV7iZ7LVcUcsN/7HrZUoCLrBauChy/IqEg==" + "version": "1.3.813", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.813.tgz", + "integrity": "sha512-YcSRImHt6JZZ2sSuQ4Bzajtk98igQ0iKkksqlzZLzbh4p0OIyJRSvUbsgqfcR8txdfsoYCc4ym306t4p2kP/aw==" }, "emissary": { "version": "1.3.3", @@ -3028,9 +3077,9 @@ }, "dependencies": { "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } @@ -3044,6 +3093,22 @@ "atom-select-list": "^0.7.0", "iconv-lite": "^0.4.4", "jschardet": "^1.1.0" + }, + "dependencies": { + "atom-select-list": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/atom-select-list/-/atom-select-list-0.7.2.tgz", + "integrity": "sha512-a707OB1DhLGjzqtFrtMQKH7BBxFuCh8UBoUWxgFOrLrSwVh3g+/TlVPVDOz12+U0mDu3mIrnYLqQyhywQOTxhw==", + "requires": { + "etch": "^0.12.6", + "fuzzaldrin": "^2.1.0" + } + }, + "etch": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/etch/-/etch-0.12.8.tgz", + "integrity": "sha512-dFLRe4wLroVtwzyy1vGlE3BSDZHiL0kZME5XgNGzZIULcYTvVno8vbiIleAesoKJmwWaxDTzG+4eppg2zk14JQ==" + } } }, "end-of-stream": { @@ -3237,6 +3302,11 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, + "esprima-fb": { + "version": "15001.1001.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", + "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=" + }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3341,9 +3411,9 @@ }, "dependencies": { "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" } } }, @@ -3401,8 +3471,8 @@ } }, "find-and-replace": { - "version": "https://www.atom.io/api/packages/find-and-replace/versions/0.219.7/tarball", - "integrity": "sha512-I3TdBhpUr+Qk5JqtmO+lt1oRc6yRpu4lBxq1ZAow5uY/UEmg0D5NyLO5liuH6FEINDaO17MQN66wCqgOsVzYrQ==", + "version": "https://www.atom.io/api/packages/find-and-replace/versions/0.219.8/tarball", + "integrity": "sha512-5jb+LoQFijsADkyD2t4vZl2vgSKN+4d157NMRZYwwEAytVNEvpDsq2QBZapbcTVISRIvOoznT5tu1RrqkWl+zw==", "requires": { "binary-search": "^1.3.3", "etch": "0.9.3", @@ -3440,27 +3510,17 @@ "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=" }, "first-mate": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/first-mate/-/first-mate-7.4.1.tgz", - "integrity": "sha512-SEG5W0aajCvK/Ngoo3he3Ib4DsT+CRPhBAgSju5hksBLvvUfRWP7Jf3+HQ+CNTD4GZZqbDNOEJNOxbf35EblrQ==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/first-mate/-/first-mate-7.4.3.tgz", + "integrity": "sha512-PtZUpaPmcV5KV4Rw5TfwczEnExN+X1o3Q/G82E4iRJ0tW91fm3Yi7pa5t4cBH8r3D6EyoBKvfpG2jKE+TZ0/nw==", "requires": { "emissary": "^1", "event-kit": "^2.2.0", "fs-plus": "^3.0.0", "grim": "^2.0.1", - "oniguruma": "7.2.1", + "oniguruma": "^7.2.3", "season": "^6.0.2", "underscore-plus": "^1" - }, - "dependencies": { - "grim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/grim/-/grim-2.0.2.tgz", - "integrity": "sha512-Qj7hTJRfd87E/gUgfvM0YIH/g2UA2SV6niv6BYXk1o6w4mhgv+QyYM1EjOJQljvzgEj4SqSsRWldXIeKHz3e3Q==", - "requires": { - "event-kit": "^2.0.0" - } - } } }, "flat": { @@ -3484,11 +3544,18 @@ "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" }, "focus-trap": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-6.1.4.tgz", - "integrity": "sha512-jgNc+O8UkGsUpdhNXkyonwlw4i707+ESAWv1vCbyd8+29db5/Wv1BkJImDczfEWMu9O635FvM5ABOjeyqNQpEQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-6.3.0.tgz", + "integrity": "sha512-BBzvFfkPg5PqrVVCdQ1YOIVNKGvqG9YNVkiAUQFuDM66N8J9uADhs6mlYKrd30ofDJIzEniBnBKM7GO45iCzKQ==", "requires": { - "tabbable": "^5.1.3" + "tabbable": "^5.1.5" + }, + "dependencies": { + "tabbable": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-5.1.6.tgz", + "integrity": "sha512-KSlGaSX9PbL7FHDTn2dB+zv61prkY8BeGioTsKfeN7dKhw5uz1S4U2iFaWMK4GR8oU+5OFBkFuxbMsaUxVVlrQ==" + } } }, "forever-agent": { @@ -3665,6 +3732,11 @@ } } }, + "fs-readdir-recursive": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz", + "integrity": "sha1-MVtPuMHKW4xH3v7zGdBz2tNWgFk=" + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3681,6 +3753,11 @@ "rimraf": "2" } }, + "fswin": { + "version": "3.19.908", + "resolved": "https://registry.npmjs.org/fswin/-/fswin-3.19.908.tgz", + "integrity": "sha512-xwq6wBg+KNuSjzQ3gZUOXt/FUhN9Wd+qQxz3yGM1xyTWu00ty82X+9Tc09z9XtMONYAhA8cCE3nolWoU7Rlz6g==" + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -3719,6 +3796,20 @@ "resolved": "https://registry.npmjs.org/async/-/async-0.2.6.tgz", "integrity": "sha1-rT83PZJJrjJIgVZVgryQ4VKrvWg=" }, + "atom-select-list": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/atom-select-list/-/atom-select-list-0.7.2.tgz", + "integrity": "sha512-a707OB1DhLGjzqtFrtMQKH7BBxFuCh8UBoUWxgFOrLrSwVh3g+/TlVPVDOz12+U0mDu3mIrnYLqQyhywQOTxhw==", + "requires": { + "etch": "^0.12.6", + "fuzzaldrin": "^2.1.0" + } + }, + "etch": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/etch/-/etch-0.12.8.tgz", + "integrity": "sha512-dFLRe4wLroVtwzyy1vGlE3BSDZHiL0kZME5XgNGzZIULcYTvVno8vbiIleAesoKJmwWaxDTzG+4eppg2zk14JQ==" + }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -3792,6 +3883,11 @@ "resolved": "https://registry.npmjs.org/get-parameter-names/-/get-parameter-names-0.2.0.tgz", "integrity": "sha1-ohY60JLjUNlL7ilYl0/OzhvFPJk=" }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -3811,11 +3907,23 @@ "git-diff": { "version": "file:packages/git-diff", "requires": { - "atom-select-list": "^0.7.0", - "fs-plus": "^3.0.0", - "temp": "~0.8.1" + "atom-select-list": "^0.7.0" }, "dependencies": { + "atom-select-list": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/atom-select-list/-/atom-select-list-0.7.2.tgz", + "integrity": "sha512-a707OB1DhLGjzqtFrtMQKH7BBxFuCh8UBoUWxgFOrLrSwVh3g+/TlVPVDOz12+U0mDu3mIrnYLqQyhywQOTxhw==", + "requires": { + "etch": "^0.12.6", + "fuzzaldrin": "^2.1.0" + } + }, + "etch": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/etch/-/etch-0.12.8.tgz", + "integrity": "sha512-dFLRe4wLroVtwzyy1vGlE3BSDZHiL0kZME5XgNGzZIULcYTvVno8vbiIleAesoKJmwWaxDTzG+4eppg2zk14JQ==" + }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -3835,20 +3943,21 @@ } }, "git-utils": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/git-utils/-/git-utils-5.6.2.tgz", - "integrity": "sha512-3pen//xGs5ZJiXejUbx79FyRR58J6DgI7tL9Mc7YQeuF5ENXf/7k0K2M8h4JBlTKZcxxCr8MGA1Xcg4O4l/YjA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/git-utils/-/git-utils-5.7.1.tgz", + "integrity": "sha512-+mWdJDq9emWoq6GzzrGEB7SIBmAk0lNNv2wgNkgwTVZUkAFkWvgRsJ+Kvs3d1QQD6WG6vczti2WLpjmh2Twtlw==", "requires": { "fs-plus": "^3.0.0", "nan": "^2.14.0" } }, "github": { - "version": "https://www.atom.io/api/packages/github/versions/0.36.2/tarball", - "integrity": "sha512-eHShpgfy8b7FzHJE/wX1wFvOQRGuzPrzRAYKJWrB3B61oS5RwMme1PkwJ5Btauso1fYY7nTzfxbmoRfKOfZRhQ==", + "version": "https://www.atom.io/api/packages/github/versions/0.36.10/tarball", + "integrity": "sha512-DslTRN8sp5BbHp8uuNF6lDpShQ7U4QWp9tR1Q7Sw/40qrPhgvudV1B8EZKc38+atACYsvnwc7Xk00WmapiYsDg==", "requires": { "@atom/babel-plugin-chai-assert-async": "1.0.0", "@atom/babel7-transpiler": "1.0.0-1", + "@babel/core": "7.x <7.12.10", "@babel/generator": "7.8.0", "@babel/plugin-proposal-class-properties": "7.8.0", "@babel/plugin-proposal-object-rest-spread": "7.8.0", @@ -3859,7 +3968,7 @@ "bytes": "3.1.0", "classnames": "2.2.6", "compare-sets": "1.0.1", - "dompurify": "2.0.7", + "dompurify": "2.0.17", "dugite": "1.92.0", "event-kit": "2.5.3", "fs-extra": "4.0.3", @@ -3882,14 +3991,14 @@ "underscore-plus": "1.7.0", "what-the-diff": "0.6.0", "what-the-status": "1.0.3", - "whats-my-line": "0.1.2", + "whats-my-line": "^0.1.4", "yubikiri": "2.0.0" }, "dependencies": { "dompurify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.0.7.tgz", - "integrity": "sha512-S3O0lk6rFJtO01ZTzMollCOGg+WAtCwS3U5E2WSDY/x/sy7q70RjEC4Dmrih5/UqzLLB9XoKJ8KqwBxaNvBu4A==" + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.0.17.tgz", + "integrity": "sha512-nNwwJfW55r8akD8MSFz6k75bzyT2y6JEa1O3JrZFBf+Y5R9JXXU4OsRl0B9hKoPgHTw2b7ER5yJ5Md97MMUJPg==" }, "fs-extra": { "version": "4.0.3", @@ -3947,6 +4056,11 @@ "path-is-absolute": "^1.0.0" } }, + "globals": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-6.4.1.tgz", + "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=" + }, "go-to-line": { "version": "file:packages/go-to-line" }, @@ -3977,6 +4091,22 @@ "version": "file:packages/grammar-selector", "requires": { "atom-select-list": "^0.7.0" + }, + "dependencies": { + "atom-select-list": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/atom-select-list/-/atom-select-list-0.7.2.tgz", + "integrity": "sha512-a707OB1DhLGjzqtFrtMQKH7BBxFuCh8UBoUWxgFOrLrSwVh3g+/TlVPVDOz12+U0mDu3mIrnYLqQyhywQOTxhw==", + "requires": { + "etch": "^0.12.6", + "fuzzaldrin": "^2.1.0" + } + }, + "etch": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/etch/-/etch-0.12.8.tgz", + "integrity": "sha512-dFLRe4wLroVtwzyy1vGlE3BSDZHiL0kZME5XgNGzZIULcYTvVno8vbiIleAesoKJmwWaxDTzG+4eppg2zk14JQ==" + } } }, "graphql": { @@ -4022,6 +4152,14 @@ "function-bind": "^1.1.1" } }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -4055,9 +4193,9 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, "highlight.js": { - "version": "9.18.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.1.tgz", - "integrity": "sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg==" + "version": "9.18.5", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz", + "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==" }, "hoek": { "version": "2.16.3", @@ -4065,10 +4203,19 @@ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "optional": true }, + "home-or-tmp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-1.0.0.tgz", + "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", + "requires": { + "os-tmpdir": "^1.0.1", + "user-home": "^1.1.1" + } + }, "hosted-git-info": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==" + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "htmlparser2": { "version": "3.10.1", @@ -4180,9 +4327,9 @@ } }, "import-fresh": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", - "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -4221,9 +4368,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" }, "invert-kv": { "version": "1.0.0", @@ -4258,6 +4405,14 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -4266,6 +4421,14 @@ "number-is-nan": "^1.0.0" } }, + "is-integer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.7.tgz", + "integrity": "sha1-a96Bqs3feLZZtmKdYpytxRqIbVw=", + "requires": { + "is-finite": "^1.0.0" + } + }, "is-negative-zero": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", @@ -4312,14 +4475,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - }, "isomorphic-fetch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", @@ -4398,6 +4553,11 @@ "jasmine-focused": "^1.0.7" } }, + "js-tokens": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.1.tgz", + "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=" + }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", @@ -4462,6 +4622,11 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, + "json5": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", + "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=" + }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -4497,41 +4662,25 @@ "integrity": "sha1-6H9qFZFErfJpLkbypGQc4mnAkRk=" }, "keybinding-resolver": { - "version": "https://www.atom.io/api/packages/keybinding-resolver/versions/0.39.0/tarball", - "integrity": "sha512-nzTsjd1HPzHFkiCn3dBvUrYHvKX6GsXW4wUmuwbN1vEVcZc3BAvymIgPnR/5R9UUTRShEDgJMxwLbBz+vw0Xjw==", + "version": "https://www.atom.io/api/packages/keybinding-resolver/versions/0.39.1/tarball", + "integrity": "sha512-CVuLXtWBmHmeXoNnECQ23y6IL5jbRf6yEIqjSawv2lLeDhNfTM2ZWiiucR5zm+8/Rod2B7f4SK6yG5YbZSne8Q==", "requires": { "etch": "0.9.0", "fs-plus": "^3.0.0", - "temp": "^0.8.1" + "temp": "^0.9.0" }, "dependencies": { "etch": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/etch/-/etch-0.9.0.tgz", "integrity": "sha1-CSJpiPLO4GkL3yCMyyXkFNXfrV8=" - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } - }, - "temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "requires": { - "rimraf": "~2.6.2" - } } } }, "keyboard-layout": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/keyboard-layout/-/keyboard-layout-2.0.16.tgz", - "integrity": "sha512-eGrxmlV6jbm/mbPEOpYGuH53XEC7wIUj9ZxKcT2z9QHJ/RwrT9iVkvxka9zRxqHZHwQzcffgsa5OxoVAKnhK9w==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/keyboard-layout/-/keyboard-layout-2.0.17.tgz", + "integrity": "sha512-W9LL+1e8CS9fi0s8ZHINDN1HZ6QpYjE4yLi4+faed7ozppNOAxINjv5w16zG9tJv8Jp5LJrCfO5PZ9aV1m5d4g==", "requires": { "event-kit": "^2.0.0", "nan": "^2.13.2" @@ -4588,6 +4737,14 @@ "json-buffer": "3.0.0" } }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + }, "language-c": { "version": "https://www.atom.io/api/packages/language-c/versions/0.60.19/tarball", "integrity": "sha512-GSVMaEsyPsmKY89bkhVdGl0D5/bFdM5RvSLTKBxmtCl8lUOD+fB3fIfyWsKt4+E5znATZM5pQ8OhUTQ7IHFWQw==", @@ -4609,10 +4766,10 @@ "integrity": "sha512-37RDzLiqSHJjopFg3T/Sqntx793OMQ4o7tkf3IuKe68Mshz3mwavJhIaIX/mca+0u/aWquySJFzlZ4D8EdtRSA==" }, "language-css": { - "version": "https://www.atom.io/api/packages/language-css/versions/0.44.4/tarball", - "integrity": "sha512-BBlnxUx9SCv+mIYOBWUApvyB/rSOewy2m8g6f3Vk2LfLf0+t8+Hcay5hWqXqpyKS4BUa15E3TVhl3PHEpqwZ1w==", + "version": "https://www.atom.io/api/packages/language-css/versions/0.45.1/tarball", + "integrity": "sha512-vLVyJF7rCQ8Y++GQydAdp/pysfSO4OdbEqaau3+nTTi2Cb0t2a/aWk24gW6ipQf5HzfXSUXysJF10MWl8GQK2A==", "requires": { - "tree-sitter-css": "^0.15.0" + "tree-sitter-css": "^0.19.0" } }, "language-gfm": { @@ -4644,8 +4801,8 @@ "integrity": "sha512-bntgT5AVqSbWZpjjiGbKVfzjocWHgDLbfAnECKkk87owjlMeuzbZaylI+HRdbVxPMt9K1UdFRVT/NUaia+A3+g==" }, "language-java": { - "version": "https://www.atom.io/api/packages/language-java/versions/0.32.0/tarball", - "integrity": "sha512-CFnESgteGgneWn3C/xids6H0J67Qbr1TnFoI47OYXsPC0ZGsWIMLz+H10JIFiJYZ59t5iUu4v/hFQHJCcCqyDA==", + "version": "https://www.atom.io/api/packages/language-java/versions/0.32.1/tarball", + "integrity": "sha512-CzS8Tr2uL93SElx/P6eZCDbxnGdBq9EBimFezXWWop+IgmYPNaNFS3d2kFUXgSNY3bvNV9ezpR7xSIZteFpisQ==", "requires": { "tree-sitter-java-dev": "^0.16.0-dev2" } @@ -4687,26 +4844,26 @@ "integrity": "sha512-XXHULyFvbxAiRoj+MxIXoeO//in3bQctHZbaD72p3vFxm3klxe2ebx7b3cFmFYqf/g0eajmLrR3tR5m1Rmz1XQ==" }, "language-php": { - "version": "https://www.atom.io/api/packages/language-php/versions/0.44.7/tarball", - "integrity": "sha512-g3vyvJaDV+QbrJ9j4qoLOR6Yxk7yLnMTjv9XEFTmRukdCv60/GFSb9UxMVQpFXnceu22Jad+tuNwT48iq8oTAA==" + "version": "https://www.atom.io/api/packages/language-php/versions/0.48.1/tarball", + "integrity": "sha512-E943QBnu4Z9PVEHdXVeY/XSWVopYnoB1Pr43RJHX3r9Xnd/slFNamBzVTIHazMqGM/33PSjaNmpeQFEfgRtHwQ==" }, "language-property-list": { "version": "https://www.atom.io/api/packages/language-property-list/versions/0.9.1/tarball", "integrity": "sha512-HD6HI41u57i0/Tu9catiriURhJsef0RDrzJDkGDtdFkE9F9KPxC9Fayq2JBLJrhIyADRVXFxwxsfwQ2Jmh6hxg==" }, "language-python": { - "version": "https://www.atom.io/api/packages/language-python/versions/0.53.5/tarball", - "integrity": "sha512-VcAg4CT4UDocFMRrkeWKmlplJKyeLptfQq52C8dnCpAq9tN8A+xfBldi7iUjhxj7LJhP0YgLTyPJFRx/Mzs/AQ==", + "version": "https://www.atom.io/api/packages/language-python/versions/0.53.6/tarball", + "integrity": "sha512-QLAajhoCNaDvWPE8qw/v0T0yMQCMavu5P0ZkJXTOuVzG3hj4W60F87PFYTgwSHa61KpXGvUA1kiGibeQbxytGA==", "requires": { "atom-grammar-test": "^0.6.4", - "tree-sitter-python": "^0.15.1" + "tree-sitter-python": "^0.17.0" } }, "language-ruby": { - "version": "https://www.atom.io/api/packages/language-ruby/versions/0.72.23/tarball", - "integrity": "sha512-fDxhUUPmJJBG4p/Q0AyZfoYzZj8PvVqLZssVEhqcSOV3g5erWQzJ1c1XyvXW1puyJ7efY+GckPnNMwUjL21hcA==", + "version": "https://www.atom.io/api/packages/language-ruby/versions/0.73.0/tarball", + "integrity": "sha512-dbqBGWUBHyzXStRiZNWR/Dx85Co3ecQvF9IWjngAcWdFsye1zrUWAdhSLOU8FvYQnP2jBgE2EmQQO+jSCG+T4Q==", "requires": { - "tree-sitter-ruby": "^0.15.3" + "tree-sitter-ruby": "^0.17.0" } }, "language-ruby-on-rails": { @@ -4716,7 +4873,17 @@ "language-rust-bundled": { "version": "file:packages/language-rust-bundled", "requires": { - "tree-sitter-rust": "^0.16.0" + "tree-sitter-rust": "^0.17.0" + }, + "dependencies": { + "tree-sitter-rust": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/tree-sitter-rust/-/tree-sitter-rust-0.17.0.tgz", + "integrity": "sha512-dWYKrX4JbuLbKagTeCSsMZuFDKTzzaEHECsjLzIqbO/IhNHHLOzEcbF2YcIAGKG5thiT/lnNAjeOXDsILteCpg==", + "requires": { + "nan": "^2.8.0" + } + } } }, "language-sass": { @@ -4765,6 +4932,11 @@ "version": "https://www.atom.io/api/packages/language-yaml/versions/0.32.0/tarball", "integrity": "sha512-kx6Qj//j3PuFaf8yhlfPGdirRJ3NVvLJw+9Oi2Gg998K6vG/XecgvwyP5jVs4xExX8eYMOTlvN7n6dgkPf6LHQ==" }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -4943,20 +5115,32 @@ } } }, - "line-column": { + "leven": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", - "integrity": "sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI=", - "requires": { - "isarray": "^1.0.0", - "isobject": "^2.0.0" - } + "resolved": "https://registry.npmjs.org/leven/-/leven-1.0.2.tgz", + "integrity": "sha1-kUS27ryl8dBoAWnxpncNzqYLdcM=" }, "line-ending-selector": { "version": "file:packages/line-ending-selector", "requires": { "atom-select-list": "^0.7.0", "underscore-plus": "^1.7.0" + }, + "dependencies": { + "atom-select-list": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/atom-select-list/-/atom-select-list-0.7.2.tgz", + "integrity": "sha512-a707OB1DhLGjzqtFrtMQKH7BBxFuCh8UBoUWxgFOrLrSwVh3g+/TlVPVDOz12+U0mDu3mIrnYLqQyhywQOTxhw==", + "requires": { + "etch": "^0.12.6", + "fuzzaldrin": "^2.1.0" + } + }, + "etch": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/etch/-/etch-0.12.8.tgz", + "integrity": "sha512-dFLRe4wLroVtwzyy1vGlE3BSDZHiL0kZME5XgNGzZIULcYTvVno8vbiIleAesoKJmwWaxDTzG+4eppg2zk14JQ==" + } } }, "line-top-index": { @@ -4978,6 +5162,11 @@ "underscore-plus": "^1.7.0" } }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -5042,9 +5231,9 @@ }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { "ms": "2.1.2" } @@ -5061,6 +5250,11 @@ "resolved": "https://registry.npmjs.org/lokijs/-/lokijs-1.5.8.tgz", "integrity": "sha512-D8E3TBrY35o1ELnonp2MF8b3wKu2tVNl2TqRjvS+95oPMMe7OoIAxNY1qr+5BEZwnWn2V4ErAjVt000DonM+FA==" }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, "loophole": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/loophole/-/loophole-1.1.0.tgz", @@ -5451,9 +5645,9 @@ } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" }, "yargs": { "version": "13.3.2", @@ -5568,9 +5762,9 @@ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" }, "nanoid": { - "version": "3.1.16", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.16.tgz", - "integrity": "sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==" }, "napi-build-utils": { "version": "1.0.1", @@ -5620,6 +5814,11 @@ } } }, + "node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" + }, "node-emoji": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", @@ -5654,9 +5853,9 @@ } }, "node-releases": { - "version": "1.1.65", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.65.tgz", - "integrity": "sha512-YpzJOe2WFIW0V4ZkJQd/DGR/zdVwc/pI4Nl1CZrBO19FdRcSTmsuhdttw9rsTzzJLrNcSloLiBbEYx1C4f6gpA==" + "version": "1.1.75", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", + "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==" }, "node-uuid": { "version": "1.4.8", @@ -5669,24 +5868,32 @@ "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" }, "normalize-package-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", - "integrity": "sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", + "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", "requires": { - "hosted-git-info": "^3.0.6", - "resolve": "^1.17.0", - "semver": "^7.3.2", + "hosted-git-info": "^4.0.1", + "resolve": "^1.20.0", + "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" }, "dependencies": { "hosted-git-info": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.6.tgz", - "integrity": "sha512-VRvqVD5T6t9HdmNDWTwbi8H/EC722MemAhOSP5QvYAXpDAY0Nhu2I/i+bXsktu4sU5LVHSh/wmXtVU8bDtjedQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", "requires": { "lru-cache": "^6.0.0" } }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "requires": { + "has": "^1.0.3" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -5695,6 +5902,23 @@ "yallist": "^4.0.0" } }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -5703,13 +5927,13 @@ } }, "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" }, "notifications": { - "version": "https://www.atom.io/api/packages/notifications/versions/0.71.0/tarball", - "integrity": "sha512-WVMtVHgq1a9p37SlEy8tNZ2E6F1sUnRwoUtUK/QhOAZGskGOCgDACM29ThMPp9poNySBJ1kc/LakQSP7wToc6w==", + "version": "https://www.atom.io/api/packages/notifications/versions/0.72.1/tarball", + "integrity": "sha512-h0bnKvz2weyzO3wTkbxA49ZDaHaRzcR9ZYO9Vr8TZbm61VOKI2CoWijyhDXDE3r4oNxC4MsTzyAG3nyKnlKAlQ==", "requires": { "dompurify": "^1.0.3", "fs-plus": "^3.0.0", @@ -5846,9 +6070,9 @@ "version": "file:packages/one-light-ui" }, "oniguruma": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/oniguruma/-/oniguruma-7.2.1.tgz", - "integrity": "sha512-WPS/e1uzhswPtJSe+Zls/kAj27+lEqZjCmRSjnYk/Z4L2Mu+lJC2JWtkZhPJe4kZeTQfz7ClcLyXlI4J68MG2w==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/oniguruma/-/oniguruma-7.2.3.tgz", + "integrity": "sha512-PZZcE0yfg8Q1IvaJImh21RUTHl8ep0zwwyoE912KqlWVrsGByjjj29sdACcD1BFyX2bLkfuOJeP+POzAGVWtbA==", "requires": { "nan": "^2.14.0" } @@ -5878,6 +6102,21 @@ "lcid": "^1.0.0" } }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "requires": { + "graceful-fs": "^4.1.4", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.0" + } + }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -5919,9 +6158,9 @@ } }, "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -5937,15 +6176,20 @@ "@types/node": "*" } }, + "path-exists": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz", + "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { "version": "1.8.0", @@ -5967,15 +6211,10 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" - }, "pathwatcher": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/pathwatcher/-/pathwatcher-8.1.0.tgz", - "integrity": "sha512-CF6M8W3kR4sEF2wzwRLAN/J+MfstclhRhfd0+SP83vQyrIsuKDSxd6r2TVG16sXpKCzo/ieAQ+GD0yYZ1380Nw==", + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/pathwatcher/-/pathwatcher-8.1.2.tgz", + "integrity": "sha512-3izRU4DDQ9qVeASauP4Hlp49OhKPcedRYke9iHa0Jh1I+XlC9wYng/NycHh41k5F8wGndA23YYDCtO3KLAFPMg==", "requires": { "async": "~0.2.10", "emissary": "^1.3.2", @@ -5991,14 +6230,6 @@ "version": "0.2.10", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" - }, - "grim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/grim/-/grim-2.0.2.tgz", - "integrity": "sha512-Qj7hTJRfd87E/gUgfvM0YIH/g2UA2SV6niv6BYXk1o6w4mhgv+QyYM1EjOJQljvzgEj4SqSsRWldXIeKHz3e3Q==", - "requires": { - "event-kit": "^2.0.0" - } } } }, @@ -6036,16 +6267,20 @@ } }, "postcss": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.6.tgz", - "integrity": "sha512-JuifSl4h8dJ70SiMXKjzCxhalE6p2TnMHuq9G8ftyXj2jg6SXzqCsEuxMj9RkmJoO5D+Z9YrWunNkxqpRT02qg==", + "version": "8.2.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.10.tgz", + "integrity": "sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw==", "requires": { - "colorette": "^1.2.1", - "line-column": "^1.0.2", - "nanoid": "^3.1.16", + "colorette": "^1.2.2", + "nanoid": "^3.1.22", "source-map": "^0.6.1" }, "dependencies": { + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6173,6 +6408,11 @@ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -6240,6 +6480,11 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", @@ -6317,9 +6562,9 @@ } }, "react-tabs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-3.1.1.tgz", - "integrity": "sha512-HpySC29NN1BkzBAnOC+ajfzPbTaVZcSWzMSjk56uAhPC/rBGtli8lTysR4CfPAyEE/hfweIzagOIoJ7nu80yng==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-3.2.2.tgz", + "integrity": "sha512-/o52eGKxFHRa+ssuTEgSM8qORnV4+k7ibW+aNQzKe+5gifeVz8nLxCrsI9xdRhfb0wCLdgIambIpb1qCxaMN+A==", "requires": { "clsx": "^1.1.0", "prop-types": "^15.5.0" @@ -6339,6 +6584,29 @@ "util-deprecate": "~1.0.1" } }, + "recast": { + "version": "0.10.33", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz", + "integrity": "sha1-lCgI96oBbx+nFCxGHX5XBKqo1pc=", + "requires": { + "ast-types": "0.8.12", + "esprima-fb": "~15001.1001.0-dev-harmony-fb", + "private": "~0.1.5", + "source-map": "~0.5.0" + }, + "dependencies": { + "ast-types": { + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.12.tgz", + "integrity": "sha1-oNkOQ1G7iHcWyD/WN+v4GK9K38w=" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", @@ -6352,10 +6620,23 @@ "regenerate": "^1.4.0" } }, + "regenerator": { + "version": "0.8.40", + "resolved": "https://registry.npmjs.org/regenerator/-/regenerator-0.8.40.tgz", + "integrity": "sha1-oORXxY69uuV1yfjNdRJ+k3VkNdg=", + "requires": { + "commoner": "~0.10.3", + "defs": "~1.1.0", + "esprima-fb": "~15001.1001.0-dev-harmony-fb", + "private": "~0.1.5", + "recast": "0.10.33", + "through": "~2.3.8" + } + }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, "regenerator-transform": { "version": "0.14.5", @@ -6365,6 +6646,25 @@ "@babel/runtime": "^7.8.4" } }, + "regexpu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexpu/-/regexpu-1.3.0.tgz", + "integrity": "sha1-5TTcmRqeWEYFDJjebX3UpVyeoW0=", + "requires": { + "esprima": "^2.6.0", + "recast": "^0.10.10", + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" + } + } + }, "regexpu-core": { "version": "4.7.1", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", @@ -6384,15 +6684,28 @@ "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" }, "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", "requires": { "jsesc": "~0.5.0" } } } }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "requires": { + "jsesc": "~0.5.0" + } + }, "relay-runtime": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/relay-runtime/-/relay-runtime-5.0.0.tgz", @@ -6402,6 +6715,19 @@ "fbjs": "^1.0.0" } }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", + "requires": { + "is-finite": "^1.0.0" + } + }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -6441,11 +6767,6 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -6479,9 +6800,17 @@ } }, "rfdc": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", - "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.2.0.tgz", + "integrity": "sha512-ijLyszTMmUrXvjSooucVQwimGUk84eRcmCuLV8Xghe3UO85mjUtRAHRyoMM6XtyqbECaXuBWx18La3523sXINA==" + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "^0.1.1" + } }, "rimraf": { "version": "2.7.1", @@ -6585,32 +6914,12 @@ } }, "scrollbar-style": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/scrollbar-style/-/scrollbar-style-3.2.1.tgz", - "integrity": "sha512-suqwmmczpwidfoq+csq/e9KGopUbnKMJj6Pj+F+IqGl5Olt/khOkj/MjPrB3t+8QtipJ+APg92C1XcjzrNFtfQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/scrollbar-style/-/scrollbar-style-4.0.1.tgz", + "integrity": "sha512-b47iGb2KLY/NgxDUpNYiep3Uca1vOdO+T+194b0IC70rkzZJMmdNIgePGSOVE04Rn77fnqeZgsw5jyFg8FDoEQ==", "requires": { - "event-kit": "^1.1.0", - "nan": "^2.0.0" - }, - "dependencies": { - "event-kit": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/event-kit/-/event-kit-1.5.0.tgz", - "integrity": "sha1-Ek72qtgyjcsmtxxHWQtbjmPrxIc=", - "requires": { - "grim": "^1.2.1" - }, - "dependencies": { - "grim": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/grim/-/grim-1.5.0.tgz", - "integrity": "sha1-sysI71Z88YUvgXWe2caLDXE5ajI=", - "requires": { - "emissary": "^1.2.0" - } - } - } - } + "event-kit": "^2.5.3", + "node-addon-api": "^1.1.0" } }, "season": { @@ -6726,10 +7035,10 @@ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "settings-view": { - "version": "https://www.atom.io/api/packages/settings-view/versions/0.261.6/tarball", - "integrity": "sha512-RB5p00IgyXAOHX+df2RHL2vjAPNrW/3ef4XqtC6B2UdQgViHSt+n4zq4J3oneoA+xf/AO4Fnpj3KOC4VdbLykQ==", + "version": "https://www.atom.io/api/packages/settings-view/versions/0.261.8/tarball", + "integrity": "sha512-Zk7Cd2YRcL0inBbOg+vfIG5C4W1mrtY6RR/bvJ0Ddx4FCswxndRndVn575RbAJN5uvbt5hoQdvXmEdd0ksdlVA==", "requires": { - "async": "~0.2.9", + "async": "^3.2.0", "dompurify": "^1.0.2", "etch": "0.9.0", "fs-plus": "^3.0.0", @@ -6743,11 +7052,6 @@ "underscore-plus": "^1.0.6" }, "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" - }, "etch": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/etch/-/etch-0.9.0.tgz", @@ -6779,6 +7083,11 @@ } } }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, "sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", @@ -6794,6 +7103,11 @@ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" }, + "simple-fmt": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/simple-fmt/-/simple-fmt-0.1.0.tgz", + "integrity": "sha1-GRv1ZqWeZTBILLJatTtKjchcOms=" + }, "simple-get": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", @@ -6804,6 +7118,11 @@ "simple-concat": "^1.0.0" } }, + "simple-is": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz", + "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=" + }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -6853,6 +7172,11 @@ } } }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, "snippets": { "version": "https://www.atom.io/api/packages/snippets/versions/1.5.1/tarball", "integrity": "sha512-SfkgDsqguzh0XQFdfmr1zyZUMC9Du8ljosSMnun+2B0RbiULmukK1fT4PAaoBXtYhaO944nZpQrbTGF20L8alQ==", @@ -6873,6 +7197,20 @@ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" }, + "atom-select-list": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/atom-select-list/-/atom-select-list-0.7.2.tgz", + "integrity": "sha512-a707OB1DhLGjzqtFrtMQKH7BBxFuCh8UBoUWxgFOrLrSwVh3g+/TlVPVDOz12+U0mDu3mIrnYLqQyhywQOTxhw==", + "requires": { + "etch": "^0.12.6", + "fuzzaldrin": "^2.1.0" + } + }, + "etch": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/etch/-/etch-0.12.8.tgz", + "integrity": "sha512-dFLRe4wLroVtwzyy1vGlE3BSDZHiL0kZME5XgNGzZIULcYTvVno8vbiIleAesoKJmwWaxDTzG+4eppg2zk14JQ==" + }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -6914,6 +7252,14 @@ "amdefine": ">=0.0.4" } }, + "source-map-support": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", + "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", + "requires": { + "source-map": "0.1.32" + } + }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -6938,32 +7284,46 @@ } }, "spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" }, "spell-check": { - "version": "https://www.atom.io/api/packages/spell-check/versions/0.76.2/tarball", - "integrity": "sha512-vBZ3uSNUIWITzmjFbYaJcf2KngGYvhskaHR31fRlZdqOSxR2zWUjyUGNKLaVkq1QNMcr6S59ZLiKcwuS+/KYjg==", + "version": "https://www.atom.io/api/packages/spell-check/versions/0.77.1/tarball", + "integrity": "sha512-hb0HtygO7QnH3hWRDfB0jcBXS9CYoETAV9mpf0dmXDzk228BsvkET1j12FfJXOHNH8dS1H6EGB72ugSIpZTkLg==", "requires": { "atom-pathspec": "^0.0.0", "atom-select-list": "^0.7.0", "debug": "^4.1.1", "multi-integer-range": "^2.0.0", "natural": "^0.4.0", - "spellchecker": "^3.7.0", + "spellchecker": "^3.7.1", "spelling-manager": "^1.1.0", "underscore-plus": "^1" }, "dependencies": { + "atom-select-list": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/atom-select-list/-/atom-select-list-0.7.2.tgz", + "integrity": "sha512-a707OB1DhLGjzqtFrtMQKH7BBxFuCh8UBoUWxgFOrLrSwVh3g+/TlVPVDOz12+U0mDu3mIrnYLqQyhywQOTxhw==", + "requires": { + "etch": "^0.12.6", + "fuzzaldrin": "^2.1.0" + } + }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { "ms": "2.1.2" } }, + "etch": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/etch/-/etch-0.12.8.tgz", + "integrity": "sha512-dFLRe4wLroVtwzyy1vGlE3BSDZHiL0kZME5XgNGzZIULcYTvVno8vbiIleAesoKJmwWaxDTzG+4eppg2zk14JQ==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -6972,9 +7332,9 @@ } }, "spellchecker": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/spellchecker/-/spellchecker-3.7.0.tgz", - "integrity": "sha512-saQT4BR9nivbK70s0YjyIlSbZzO6bfWRULcGL2JU7fi7wotOnWl70P0QoUwwLywNQJQ47osgCo6GmOlqzRTxbQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/spellchecker/-/spellchecker-3.7.1.tgz", + "integrity": "sha512-j36QRZrekxPXy58fo2B/Le3GzHryLv9Zq2Hqz907+JmUBCP35tJlwwhCo4n1lwisBDK40IFHqEHPUe5gwUkpwA==", "requires": { "any-promise": "^1.3.0", "nan": "^2.14.0" @@ -7048,9 +7408,9 @@ "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=" }, "stacktrace-parser": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.8.tgz", - "integrity": "sha512-ig5rHJSdJrAsVqdb3oAI/8C6aQ7dEwJXoy/TIEIOTzdJHssmn12o6RsFoeQSLHoKjq0lX+kqhmnLDpyQTuWiJA==", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", "requires": { "type-fest": "^0.7.1" } @@ -7098,9 +7458,9 @@ "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==" }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { "ms": "2.1.2" } @@ -7158,6 +7518,16 @@ "safe-buffer": "~5.1.0" } }, + "stringmap": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz", + "integrity": "sha1-VWwTeyWPlCuHdvWy71gqoGnX0bE=" + }, + "stringset": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/stringset/-/stringset-0.2.1.tgz", + "integrity": "sha1-7yWcTjSTRDd/zRyRPdLoSMnAQrU=" + }, "stringstream": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", @@ -7186,6 +7556,22 @@ "etch": "0.9.0" }, "dependencies": { + "atom-select-list": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/atom-select-list/-/atom-select-list-0.7.2.tgz", + "integrity": "sha512-a707OB1DhLGjzqtFrtMQKH7BBxFuCh8UBoUWxgFOrLrSwVh3g+/TlVPVDOz12+U0mDu3mIrnYLqQyhywQOTxhw==", + "requires": { + "etch": "^0.12.6", + "fuzzaldrin": "^2.1.0" + }, + "dependencies": { + "etch": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/etch/-/etch-0.12.8.tgz", + "integrity": "sha512-dFLRe4wLroVtwzyy1vGlE3BSDZHiL0kZME5XgNGzZIULcYTvVno8vbiIleAesoKJmwWaxDTzG+4eppg2zk14JQ==" + } + } + }, "etch": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/etch/-/etch-0.9.0.tgz", @@ -7194,13 +7580,25 @@ } }, "superstring": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/superstring/-/superstring-2.4.2.tgz", - "integrity": "sha512-5Bld4dnN40BBSQ39HflbvMzMizEUExYYqErvXmV8b+iXdTA1T9N9PoxApi3BEup3UektvSjo1BkspXac7gJdMg==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/superstring/-/superstring-2.4.4.tgz", + "integrity": "sha512-41LWIGzy6tkUM6jUwbXTeGOLui3gGBxgV6m8gIWRzv1WdW0HV6oANHdGanRrM04mwFXXExII9OQ/XxaqU+Ft9w==", "requires": { - "nan": "^2.13.2" + "nan": "^2.14.2" + }, + "dependencies": { + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + } } }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, "sylvester": { "version": "0.0.21", "resolved": "https://registry.npmjs.org/sylvester/-/sylvester-0.0.21.tgz", @@ -7225,6 +7623,20 @@ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" }, + "atom-select-list": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/atom-select-list/-/atom-select-list-0.7.2.tgz", + "integrity": "sha512-a707OB1DhLGjzqtFrtMQKH7BBxFuCh8UBoUWxgFOrLrSwVh3g+/TlVPVDOz12+U0mDu3mIrnYLqQyhywQOTxhw==", + "requires": { + "etch": "^0.12.6", + "fuzzaldrin": "^2.1.0" + } + }, + "etch": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/etch/-/etch-0.12.8.tgz", + "integrity": "sha512-dFLRe4wLroVtwzyy1vGlE3BSDZHiL0kZME5XgNGzZIULcYTvVno8vbiIleAesoKJmwWaxDTzG+4eppg2zk14JQ==" + }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -7243,14 +7655,9 @@ } } }, - "tabbable": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-5.1.3.tgz", - "integrity": "sha512-jqR3rOgeyNlYWDWoyjNTWuHk3+FObu3Fw4e0zjeOLBicI74TT/wGrvSbJUaFVs7FMfiY0Ee8CKM7QaJwVMT4YA==" - }, "tabs": { - "version": "https://www.atom.io/api/packages/tabs/versions/0.110.0/tarball", - "integrity": "sha512-O8Tj9zfpcNavbFuHcNVUnv09Bbya4gFSJgd79IRFHy+d/blViK2Ai8X0Y32vJjxgywzrCIpthOHxw0l9qaqylA==", + "version": "https://www.atom.io/api/packages/tabs/versions/0.110.2/tarball", + "integrity": "sha512-ChpICm5PzN5XoStFdVrYD+uIlF+cymB4tm9avZGsRrznz3Sqv6udxHrxdaZxYGETZ7sqXzZ0hUKu5v9Xolo5Fg==", "requires": { "fs-plus": "^3.0.0", "temp": "~0.8.1", @@ -7276,17 +7683,42 @@ } }, "tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "dependencies": { + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "tar-fs": { @@ -7362,141 +7794,37 @@ } }, "text-buffer": { - "version": "13.17.3", - "resolved": "https://registry.npmjs.org/text-buffer/-/text-buffer-13.17.3.tgz", - "integrity": "sha512-2BMyWTolSD497rC8F0QNo6GJo6awkSrMFqtlVKtRB7lCGH3N6U4pmZJrO9qTZP43k6URdWBc++UPxSL7aXAd7g==", + "version": "13.18.5", + "resolved": "https://registry.npmjs.org/text-buffer/-/text-buffer-13.18.5.tgz", + "integrity": "sha512-EqtgNRq99Ow+BCV7TKzDGFdQA/MvRrghMHm4VuUMdisO8BSSFktpSaTBd18hizopM6ftU/qUEmM+YPdHAPyBvw==", "requires": { "delegato": "^1.0.0", "diff": "^2.2.1", "emissary": "^1.0.0", "event-kit": "^2.4.0", - "fs-admin": "^0.12.0", + "fs-admin": "^0.16.0", "fs-plus": "^3.0.0", "grim": "^2.0.2", "mkdirp": "^0.5.1", "pathwatcher": "^8.1.0", "serializable": "^1.0.3", - "superstring": "^2.4.2", - "underscore-plus": "^1.0.0" + "superstring": "^2.4.4", + "underscore-plus": "^1.0.0", + "winattr": "^3.0.0" }, "dependencies": { - "bl": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", - "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "requires": { - "mimic-response": "^2.0.0" - } - }, "diff": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=" }, "fs-admin": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/fs-admin/-/fs-admin-0.12.0.tgz", - "integrity": "sha512-rxGx07gnPqniQDLVIw7P8Rme5eK1WpTx8WhFN2zgqVJsK1cY4BRUXqE09u8uI6SHqkqkwKCl/G/7XD6ZNb/MrA==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/fs-admin/-/fs-admin-0.16.0.tgz", + "integrity": "sha512-ojkZQ4kmpdEViUNiqBbQ8YZuH+UjgJj621V9zeyfvviVgy7buf5K4vrVCCxf96QsWWLAtNiiplNMmxFO5zGoHg==", "requires": { "nan": "^2.13.2", - "prebuild-install": "5.3.3" - } - }, - "grim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/grim/-/grim-2.0.2.tgz", - "integrity": "sha512-Qj7hTJRfd87E/gUgfvM0YIH/g2UA2SV6niv6BYXk1o6w4mhgv+QyYM1EjOJQljvzgEj4SqSsRWldXIeKHz3e3Q==", - "requires": { - "event-kit": "^2.0.0" - } - }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" - }, - "prebuild-install": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz", - "integrity": "sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==", - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "tar-fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", - "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - } - }, - "tar-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", - "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", - "requires": { - "bl": "^4.0.1", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "prebuild-install": "^6.0.0" } } } @@ -7532,6 +7860,11 @@ "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -7552,18 +7885,17 @@ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" }, "tree-sitter": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.17.1.tgz", - "integrity": "sha512-obIe804bwfAGFMhTjQz0NXF75GDupCVXo7Sv0NVVdA3s/Q4ZI4mdirIN8cpw6bVhz/K1qgUdEuI3SEoOE/q75A==", + "version": "git+https://github.com/DeeDeeG/node-tree-sitter.git#bb298eaae66e0c4f11908cb6209f3e141884e88e", + "from": "git+https://github.com/DeeDeeG/node-tree-sitter.git#bb298eaae66e0c4f11908cb6209f3e141884e88e", "requires": { "nan": "^2.14.0", "prebuild-install": "^5.0.0" }, "dependencies": { "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -7610,15 +7942,6 @@ "which-pm-runs": "^1.0.0" } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -7640,20 +7963,20 @@ } }, "tar-fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", - "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.0.0" + "tar-stream": "^2.1.4" } }, "tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -7794,11 +8117,18 @@ } }, "tree-sitter-css": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/tree-sitter-css/-/tree-sitter-css-0.15.0.tgz", - "integrity": "sha512-xeWsAvZ//SD89QA3GvXmNDx3t0iJuvywJf6XLDmz8Dp8cPDgUt4YnhcAE3FCoP6YOU73hpsFOqKvsMSBSRmuQA==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/tree-sitter-css/-/tree-sitter-css-0.19.0.tgz", + "integrity": "sha512-LYCHS1V2bzeNJr8Mgh60H06qB8NNJyRJVgW1gKCEjcm5S48d8H9xOnrzIlsyLHaXFfnGWCrHJ6jxN6G3s5fJTA==", "requires": { - "nan": "^2.11.1" + "nan": "^2.14.1" + }, + "dependencies": { + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" + } } }, "tree-sitter-embedded-template": { @@ -7858,11 +8188,11 @@ } }, "tree-sitter-python": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tree-sitter-python/-/tree-sitter-python-0.15.1.tgz", - "integrity": "sha512-v8HUvx6JnaRNiLM2ur+T5dVEoUKanXYv8vqHWGNzjiyt+vluHKySGR7fWeQVcaotDSulDJfil4Zbye2qIPVKSA==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/tree-sitter-python/-/tree-sitter-python-0.17.1.tgz", + "integrity": "sha512-T4vvjAzd7piW66zKbJ/+4YgGk5wOtqNI25FGVsr947+EeZqdSAfwPsgSD1/I2NAVe3mdpOh/EQbfvq+EOfAiJA==", "requires": { - "nan": "^2.4.0" + "nan": "^2.14.0" } }, "tree-sitter-regex": { @@ -7874,18 +8204,18 @@ } }, "tree-sitter-ruby": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/tree-sitter-ruby/-/tree-sitter-ruby-0.15.3.tgz", - "integrity": "sha512-vuLQfsQaMMDSCgCBRUK0wTo4f8rz4CesOTCh41U7+zYz6Bj+4yKfWCZiOwcdb+8ItJBgJk79eAyKvxWrDspnGw==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/tree-sitter-ruby/-/tree-sitter-ruby-0.17.0.tgz", + "integrity": "sha512-Hpjnp7vfRjRsULeYWtDcwR6nb/lPeQfaY2jo9V3npUiaSlqYFJxlC5d45FfZ60aHxv74CI3ziocs9kMfjPS2oQ==", "requires": { "nan": "^2.12.1", "prebuild-install": "^5.0.0" }, "dependencies": { "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -7932,15 +8262,6 @@ "which-pm-runs": "^1.0.0" } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -7952,9 +8273,9 @@ } }, "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", "requires": { "decompress-response": "^4.2.0", "once": "^1.3.1", @@ -7962,20 +8283,20 @@ } }, "tar-fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", - "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.0.0" + "tar-stream": "^2.1.4" } }, "tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -7986,14 +8307,6 @@ } } }, - "tree-sitter-rust": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/tree-sitter-rust/-/tree-sitter-rust-0.16.0.tgz", - "integrity": "sha512-XzB/kJqrEJ6w6WnOn8d49yyzlQ8NXZ9bHCmKtX0mUB71cDMk/POCxiA4zsGb7Tv1R/im3Y+QsiY7UT4bl1lPYw==", - "requires": { - "nan": "^2.8.0" - } - }, "tree-sitter-typescript": { "version": "0.16.1", "resolved": "https://registry.npmjs.org/tree-sitter-typescript/-/tree-sitter-typescript-0.16.1.tgz", @@ -8003,8 +8316,8 @@ } }, "tree-view": { - "version": "https://www.atom.io/api/packages/tree-view/versions/0.228.2/tarball", - "integrity": "sha512-uO7YkFcVMPrqf5NZBV1mvObp9rJRQSfgG8q5JL+CwYnxrN9OrN/R4YOm/NEZpddkYfAXHK67dqncMhHX2Ky44Q==", + "version": "https://www.atom.io/api/packages/tree-view/versions/0.229.1/tarball", + "integrity": "sha512-q98n6WfPUCGlwVEvlb8BJgnSYtvA2PriYE46ZcCo3sMYIOhUtz6AI3DQrstEqKxarCNYmhJ9L4QWooQfwZOQmQ==", "requires": { "fs-plus": "^3.0.0", "minimatch": "~0.3.0", @@ -8024,6 +8337,21 @@ } } }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "try-resolve": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", + "integrity": "sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=" + }, + "tryor": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz", + "integrity": "sha1-gUXkynyv9ArN48z5Rui4u3W0Fys=" + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -8066,9 +8394,9 @@ } }, "ua-parser-js": { - "version": "0.7.22", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", - "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==" + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" }, "underscore": { "version": "1.9.1", @@ -8121,9 +8449,9 @@ "version": "file:packages/update-package-dependencies" }, "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "requires": { "punycode": "^2.1.0" } @@ -8136,6 +8464,11 @@ "prepend-http": "^2.0.0" } }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=" + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8201,19 +8534,19 @@ } }, "whats-my-line": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/whats-my-line/-/whats-my-line-0.1.2.tgz", - "integrity": "sha512-jK+i4OcQwx+uYwM+egF2CSyhYlPQLWs+hhGidFIZjNrrgZxQTp2bXmIxmstmj6kxX96pIH0DOyjrF6lrtVIDDA==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/whats-my-line/-/whats-my-line-0.1.4.tgz", + "integrity": "sha512-CBuAlH2jZDxLDbjb05jgDLJHO6/5TOJw/n0wb11MP5HPpBZmL/mOXOcYfqcf7QLTh8OChCZeoSkz0uevEjEKfg==", "requires": { "dugite": "^1.86.0", - "superstring": "^2.4.2", + "superstring": "^2.4.4", "what-the-diff": "^0.6.0" } }, "whatwg-fetch": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz", - "integrity": "sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A==" + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" }, "which": { "version": "1.3.1", @@ -8234,8 +8567,8 @@ "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" }, "whitespace": { - "version": "https://www.atom.io/api/packages/whitespace/versions/0.37.7/tarball", - "integrity": "sha512-DXHumgDOKBwSfrbowQLnMR51GIbgwIsdiKduxKmVhHXW7Nex8Ty0cet4iZA/eI+0DkaLbXeppLkGtWiGR5m5wQ==" + "version": "https://www.atom.io/api/packages/whitespace/versions/0.37.8/tarball", + "integrity": "sha512-EtuBpDG5kFczivJaT4Uot+zYlqTvQdr1U/XYzjw3u5capfqkk50FOP3P+wP063Hdw2Bslj87n8rpyEYT65CpkQ==" }, "wide-align": { "version": "1.1.3", @@ -8245,6 +8578,14 @@ "string-width": "^1.0.2 || 2" } }, + "winattr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/winattr/-/winattr-3.0.0.tgz", + "integrity": "sha512-dt33rYsTYcGbB+I1ubB6ZLODibRSCW//TgY/SuajLllR9kHnHnbUMqnXIe0osYsXUdRLGs770zb3t9z/ScGUpw==", + "requires": { + "fswin": "^3.18.918" + } + }, "window-size": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", @@ -8356,9 +8697,9 @@ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" }, "yallist": { "version": "3.1.1", @@ -8366,9 +8707,9 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "yaml-front-matter": { "version": "4.0.0", @@ -8429,9 +8770,9 @@ } }, "y18n": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.4.tgz", - "integrity": "sha512-deLOfD+RvFgrpAmSZgfGdWYE+OKyHcVHaRQ7NphG/63scpRvTHHeQMAxGGvaLVGJ+HYVcCXlzcTK0ZehFf+eHQ==" + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==" } } }, @@ -8565,9 +8906,9 @@ } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" }, "yargs": { "version": "13.3.2", diff --git a/package.json b/package.json index 94a9441ef..59c9aba93 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "atom", "productName": "Atom", - "version": "1.55.0-dev", + "version": "1.63.0-dev", "description": "A hackable text editor for the 21st Century.", "main": "./src/main-process/main.js", "repository": { @@ -12,26 +12,27 @@ "url": "https://github.com/atom/atom/issues" }, "license": "MIT", - "electronVersion": "6.1.12", + "electronVersion": "11.5.0", "dependencies": { - "@atom/nsfw": "1.0.26", + "@atom/fuzzy-native": "^1.2.1", + "@atom/nsfw": "^1.0.28", "@atom/source-map-support": "^0.3.4", - "@atom/watcher": "1.3.4-0", + "@atom/watcher": "^1.3.5", "@babel/core": "7.12.3", "babel-preset-atomic": "^3.0.0", "about": "file:packages/about", - "archive-view": "https://www.atom.io/api/packages/archive-view/versions/0.65.2/tarball", + "archive-view": "https://www.atom.io/api/packages/archive-view/versions/0.66.0/tarball", "async": "3.2.0", "atom-dark-syntax": "file:packages/atom-dark-syntax", "atom-dark-ui": "file:packages/atom-dark-ui", - "atom-keymap": "8.2.14", + "atom-keymap": "8.2.15", "atom-light-syntax": "file:packages/atom-light-syntax", "atom-light-ui": "file:packages/atom-light-ui", - "atom-select-list": "^0.7.2", + "atom-select-list": "^0.8.1", "autocomplete-atom-api": "https://www.atom.io/api/packages/autocomplete-atom-api/versions/0.10.7/tarball", "autocomplete-css": "https://www.atom.io/api/packages/autocomplete-css/versions/0.17.5/tarball", "autocomplete-html": "https://www.atom.io/api/packages/autocomplete-html/versions/0.8.8/tarball", - "autocomplete-plus": "https://www.atom.io/api/packages/autocomplete-plus/versions/2.42.3/tarball", + "autocomplete-plus": "https://www.atom.io/api/packages/autocomplete-plus/versions/2.42.4/tarball", "autocomplete-snippets": "https://www.atom.io/api/packages/autocomplete-snippets/versions/1.12.1/tarball", "autoflow": "file:packages/autoflow", "autosave": "https://www.atom.io/api/packages/autosave/versions/0.24.6/tarball", @@ -39,8 +40,8 @@ "base16-tomorrow-dark-theme": "file:packages/base16-tomorrow-dark-theme", "base16-tomorrow-light-theme": "file:packages/base16-tomorrow-light-theme", "bookmarks": "https://www.atom.io/api/packages/bookmarks/versions/0.46.0/tarball", - "bracket-matcher": "https://www.atom.io/api/packages/bracket-matcher/versions/0.91.2/tarball", - "chai": "4.2.0", + "bracket-matcher": "https://www.atom.io/api/packages/bracket-matcher/versions/0.92.0/tarball", + "chai": "4.3.4", "chart.js": "2.9.4", "clear-cut": "^2.0.2", "coffee-script": "1.12.7", @@ -51,24 +52,25 @@ "deprecation-cop": "file:packages/deprecation-cop", "dev-live-reload": "file:packages/dev-live-reload", "devtron": "1.4.0", + "document-register-element": "^1.14.10", "electron-notarize": "1.0.0", "electron-osx-sign": "0.5.0", "encoding-selector": "https://www.atom.io/api/packages/encoding-selector/versions/0.23.9/tarball", "etch": "0.14.1", "event-kit": "^2.5.3", "exception-reporting": "file:packages/exception-reporting", - "find-and-replace": "https://www.atom.io/api/packages/find-and-replace/versions/0.219.7/tarball", + "find-and-replace": "https://www.atom.io/api/packages/find-and-replace/versions/0.219.8/tarball", "find-parent-dir": "^0.3.0", - "first-mate": "7.4.1", - "focus-trap": "6.1.4", + "first-mate": "7.4.3", + "focus-trap": "6.3.0", "fs-admin": "0.15.0", "fs-plus": "^3.1.1", "fstream": "1.0.12", "fuzzaldrin": "^2.1", "fuzzy-finder": "https://www.atom.io/api/packages/fuzzy-finder/versions/1.14.3/tarball", "git-diff": "file:packages/git-diff", - "git-utils": "5.6.2", - "github": "https://www.atom.io/api/packages/github/versions/0.36.2/tarball", + "git-utils": "5.7.1", + "github": "https://www.atom.io/api/packages/github/versions/0.36.10/tarball", "glob": "^7.1.1", "go-to-line": "file:packages/go-to-line", "grammar-selector": "file:packages/grammar-selector", @@ -79,18 +81,18 @@ "jasmine-reporters": "1.1.0", "jasmine-tagged": "^1.1.4", "key-path-helpers": "^0.4.0", - "keybinding-resolver": "https://www.atom.io/api/packages/keybinding-resolver/versions/0.39.0/tarball", + "keybinding-resolver": "https://www.atom.io/api/packages/keybinding-resolver/versions/0.39.1/tarball", "language-c": "https://www.atom.io/api/packages/language-c/versions/0.60.19/tarball", "language-clojure": "https://www.atom.io/api/packages/language-clojure/versions/0.22.8/tarball", "language-coffee-script": "https://www.atom.io/api/packages/language-coffee-script/versions/0.50.0/tarball", "language-csharp": "https://www.atom.io/api/packages/language-csharp/versions/1.1.0/tarball", - "language-css": "https://www.atom.io/api/packages/language-css/versions/0.44.4/tarball", + "language-css": "https://www.atom.io/api/packages/language-css/versions/0.45.1/tarball", "language-gfm": "https://www.atom.io/api/packages/language-gfm/versions/0.90.8/tarball", "language-git": "https://www.atom.io/api/packages/language-git/versions/0.19.1/tarball", "language-go": "https://www.atom.io/api/packages/language-go/versions/0.47.2/tarball", "language-html": "https://www.atom.io/api/packages/language-html/versions/0.53.1/tarball", "language-hyperlink": "https://www.atom.io/api/packages/language-hyperlink/versions/0.17.1/tarball", - "language-java": "https://www.atom.io/api/packages/language-java/versions/0.32.0/tarball", + "language-java": "https://www.atom.io/api/packages/language-java/versions/0.32.1/tarball", "language-javascript": "https://www.atom.io/api/packages/language-javascript/versions/0.134.1/tarball", "language-json": "https://www.atom.io/api/packages/language-json/versions/1.0.5/tarball", "language-less": "https://www.atom.io/api/packages/language-less/versions/0.34.3/tarball", @@ -98,10 +100,10 @@ "language-mustache": "https://www.atom.io/api/packages/language-mustache/versions/0.14.5/tarball", "language-objective-c": "https://www.atom.io/api/packages/language-objective-c/versions/0.16.0/tarball", "language-perl": "https://www.atom.io/api/packages/language-perl/versions/0.38.1/tarball", - "language-php": "https://www.atom.io/api/packages/language-php/versions/0.44.7/tarball", + "language-php": "https://www.atom.io/api/packages/language-php/versions/0.48.1/tarball", "language-property-list": "https://www.atom.io/api/packages/language-property-list/versions/0.9.1/tarball", - "language-python": "https://www.atom.io/api/packages/language-python/versions/0.53.5/tarball", - "language-ruby": "https://www.atom.io/api/packages/language-ruby/versions/0.72.23/tarball", + "language-python": "https://www.atom.io/api/packages/language-python/versions/0.53.6/tarball", + "language-ruby": "https://www.atom.io/api/packages/language-ruby/versions/0.73.0/tarball", "language-ruby-on-rails": "https://www.atom.io/api/packages/language-ruby-on-rails/versions/0.25.3/tarball", "language-rust-bundled": "file:packages/language-rust-bundled", "language-sass": "https://www.atom.io/api/packages/language-sass/versions/0.62.1/tarball", @@ -119,15 +121,14 @@ "line-top-index": "0.3.1", "link": "file:packages/link", "markdown-preview": "https://www.atom.io/api/packages/markdown-preview/versions/0.160.2/tarball", - "marked": "1.2.0", "metrics": "https://www.atom.io/api/packages/metrics/versions/1.8.1/tarball", "minimatch": "^3.0.3", "mocha": "6.2.3", "mocha-junit-reporter": "2.0.0", "mocha-multi-reporters": "^1.1.4", "mock-spawn": "^0.2.6", - "normalize-package-data": "3.0.0", - "notifications": "https://www.atom.io/api/packages/notifications/versions/0.71.0/tarball", + "normalize-package-data": "3.0.2", + "notifications": "https://www.atom.io/api/packages/notifications/versions/0.72.1/tarball", "nslog": "^3.0.0", "one-dark-syntax": "file:packages/one-dark-syntax", "one-dark-ui": "file:packages/one-dark-ui", @@ -135,38 +136,39 @@ "one-light-ui": "file:packages/one-light-ui", "open-on-github": "https://www.atom.io/api/packages/open-on-github/versions/1.3.2/tarball", "package-generator": "https://www.atom.io/api/packages/package-generator/versions/1.3.0/tarball", - "pathwatcher": "8.1.0", - "postcss": "8.1.6", + "pathwatcher": "^8.1.2", + "postcss": "8.2.10", "postcss-selector-parser": "6.0.4", "prebuild-install": "6.0.0", "property-accessors": "^1.1.3", "resolve": "1.18.1", "scandal": "^3.2.0", "scoped-property-store": "^0.17.0", - "scrollbar-style": "3.2.1", + "scrollbar-style": "^4.0.1", "season": "^6.0.2", "semver": "7.3.2", "service-hub": "^0.7.4", - "settings-view": "https://www.atom.io/api/packages/settings-view/versions/0.261.6/tarball", + "settings-view": "https://www.atom.io/api/packages/settings-view/versions/0.261.8/tarball", "sinon": "9.2.1", "snippets": "https://www.atom.io/api/packages/snippets/versions/1.5.1/tarball", "solarized-dark-syntax": "file:packages/solarized-dark-syntax", "solarized-light-syntax": "file:packages/solarized-light-syntax", - "spell-check": "https://www.atom.io/api/packages/spell-check/versions/0.76.2/tarball", + "spell-check": "https://www.atom.io/api/packages/spell-check/versions/0.77.1/tarball", "status-bar": "https://www.atom.io/api/packages/status-bar/versions/1.8.17/tarball", "styleguide": "https://www.atom.io/api/packages/styleguide/versions/0.49.12/tarball", + "superstring": "^2.4.4", "symbols-view": "https://www.atom.io/api/packages/symbols-view/versions/0.118.4/tarball", - "tabs": "https://www.atom.io/api/packages/tabs/versions/0.110.0/tarball", + "tabs": "https://www.atom.io/api/packages/tabs/versions/0.110.2/tarball", "temp": "0.9.2", - "text-buffer": "13.17.3", + "text-buffer": "^13.18.5", "timecop": "https://www.atom.io/api/packages/timecop/versions/0.36.2/tarball", - "tree-sitter": "0.17.1", - "tree-view": "https://www.atom.io/api/packages/tree-view/versions/0.228.2/tarball", + "tree-sitter": "git+https://github.com/DeeDeeG/node-tree-sitter.git#bb298eaae66e0c4f11908cb6209f3e141884e88e", + "tree-view": "https://www.atom.io/api/packages/tree-view/versions/0.229.1/tarball", "typescript-simple": "8.0.6", "update-package-dependencies": "file:./packages/update-package-dependencies", "vscode-ripgrep": "1.9.0", "welcome": "file:packages/welcome", - "whitespace": "https://www.atom.io/api/packages/whitespace/versions/0.37.7/tarball", + "whitespace": "https://www.atom.io/api/packages/whitespace/versions/0.37.8/tarball", "winreg": "^1.2.1", "wrap-guide": "https://www.atom.io/api/packages/wrap-guide/versions/0.41.0/tarball", "yargs": "16.1.0" @@ -185,63 +187,63 @@ "solarized-dark-syntax": "file:./packages/solarized-dark-syntax", "solarized-light-syntax": "file:./packages/solarized-light-syntax", "about": "file:./packages/about", - "archive-view": "0.65.2", + "archive-view": "0.66.0", "autocomplete-atom-api": "0.10.7", "autocomplete-css": "0.17.5", "autocomplete-html": "0.8.8", - "autocomplete-plus": "2.42.3", + "autocomplete-plus": "2.42.4", "autocomplete-snippets": "1.12.1", "autoflow": "file:./packages/autoflow", "autosave": "0.24.6", "background-tips": "0.28.0", "bookmarks": "0.46.0", - "bracket-matcher": "0.91.2", + "bracket-matcher": "0.92.0", "command-palette": "0.43.5", "dalek": "file:./packages/dalek", "deprecation-cop": "file:./packages/deprecation-cop", "dev-live-reload": "file:./packages/dev-live-reload", "encoding-selector": "0.23.9", "exception-reporting": "file:./packages/exception-reporting", - "find-and-replace": "0.219.7", + "find-and-replace": "0.219.8", "fuzzy-finder": "1.14.3", - "github": "0.36.2", + "github": "0.36.10", "git-diff": "file:./packages/git-diff", "go-to-line": "file:./packages/go-to-line", "grammar-selector": "file:./packages/grammar-selector", "image-view": "0.64.0", "incompatible-packages": "file:./packages/incompatible-packages", - "keybinding-resolver": "0.39.0", + "keybinding-resolver": "0.39.1", "line-ending-selector": "file:./packages/line-ending-selector", "link": "file:./packages/link", "markdown-preview": "0.160.2", "metrics": "1.8.1", - "notifications": "0.71.0", + "notifications": "0.72.1", "open-on-github": "1.3.2", "package-generator": "1.3.0", - "settings-view": "0.261.6", + "settings-view": "0.261.8", "snippets": "1.5.1", - "spell-check": "0.76.2", + "spell-check": "0.77.1", "status-bar": "1.8.17", "styleguide": "0.49.12", "symbols-view": "0.118.4", - "tabs": "0.110.0", + "tabs": "0.110.2", "timecop": "0.36.2", - "tree-view": "0.228.2", + "tree-view": "0.229.1", "update-package-dependencies": "file:./packages/update-package-dependencies", "welcome": "file:./packages/welcome", - "whitespace": "0.37.7", + "whitespace": "0.37.8", "wrap-guide": "0.41.0", "language-c": "0.60.19", "language-clojure": "0.22.8", "language-coffee-script": "0.50.0", "language-csharp": "1.1.0", - "language-css": "0.44.4", + "language-css": "0.45.1", "language-gfm": "0.90.8", "language-git": "0.19.1", "language-go": "0.47.2", "language-html": "0.53.1", "language-hyperlink": "0.17.1", - "language-java": "0.32.0", + "language-java": "0.32.1", "language-javascript": "0.134.1", "language-json": "1.0.5", "language-less": "0.34.3", @@ -249,10 +251,10 @@ "language-mustache": "0.14.5", "language-objective-c": "0.16.0", "language-perl": "0.38.1", - "language-php": "0.44.7", + "language-php": "0.48.1", "language-property-list": "0.9.1", - "language-python": "0.53.5", - "language-ruby": "0.72.23", + "language-python": "0.53.6", + "language-ruby": "0.73.0", "language-ruby-on-rails": "0.25.3", "language-rust-bundled": "file:./packages/language-rust-bundled", "language-sass": "0.62.1", @@ -284,4 +286,4 @@ "snapshotResult" ] } -} +} \ No newline at end of file diff --git a/packages/about/lib/components/about-view.js b/packages/about/lib/components/about-view.js index b98118551..5b363ae25 100644 --- a/packages/about/lib/components/about-view.js +++ b/packages/about/lib/components/about-view.js @@ -1,6 +1,6 @@ const { Disposable } = require('atom'); const etch = require('etch'); -const shell = require('shell'); +const { shell } = require('electron'); const AtomLogo = require('./atom-logo'); const EtchComponent = require('../etch-component'); const UpdateView = require('./update-view'); diff --git a/packages/about/package-lock.json b/packages/about/package-lock.json index 25413afc3..850b43601 100644 --- a/packages/about/package-lock.json +++ b/packages/about/package-lock.json @@ -814,9 +814,9 @@ "dev": true }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "iconv-lite": { @@ -1058,9 +1058,9 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "loose-envify": { @@ -1247,9 +1247,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-type": { diff --git a/packages/about/spec/about-spec.js b/packages/about/spec/about-spec.js index 5fe78a135..de8c8d5b0 100644 --- a/packages/about/spec/about-spec.js +++ b/packages/about/spec/about-spec.js @@ -43,6 +43,7 @@ describe('About', () => { describe('when the Atom version number is clicked', () => { it('copies the version number to the clipboard', async () => { await atom.workspace.open('atom://about'); + jasmine.attachToDOM(workspaceElement); let aboutElement = workspaceElement.querySelector('.about'); let versionContainer = aboutElement.querySelector('.atom'); @@ -67,6 +68,7 @@ describe('About', () => { describe('when the Electron version number is clicked', () => { it('copies the version number to the clipboard', async () => { await atom.workspace.open('atom://about'); + jasmine.attachToDOM(workspaceElement); let aboutElement = workspaceElement.querySelector('.about'); let versionContainer = aboutElement.querySelector('.electron'); @@ -78,6 +80,7 @@ describe('About', () => { describe('when the Chrome version number is clicked', () => { it('copies the version number to the clipboard', async () => { await atom.workspace.open('atom://about'); + jasmine.attachToDOM(workspaceElement); let aboutElement = workspaceElement.querySelector('.about'); let versionContainer = aboutElement.querySelector('.chrome'); @@ -89,6 +92,7 @@ describe('About', () => { describe('when the Node version number is clicked', () => { it('copies the version number to the clipboard', async () => { await atom.workspace.open('atom://about'); + jasmine.attachToDOM(workspaceElement); let aboutElement = workspaceElement.querySelector('.about'); let versionContainer = aboutElement.querySelector('.node'); diff --git a/packages/about/spec/about-status-bar-spec.js b/packages/about/spec/about-status-bar-spec.js index 157842f3e..7cc7bc6ba 100644 --- a/packages/about/spec/about-status-bar-spec.js +++ b/packages/about/spec/about-status-bar-spec.js @@ -22,6 +22,7 @@ describe('the status bar', () => { await atom.packages.activatePackage('status-bar'); await atom.workspace.open('sample.js'); + jasmine.attachToDOM(workspaceElement); }); afterEach(async () => { diff --git a/packages/atom-dark-syntax/index.less b/packages/atom-dark-syntax/index.less index 63ce04e4e..161afc862 100644 --- a/packages/atom-dark-syntax/index.less +++ b/packages/atom-dark-syntax/index.less @@ -4,4 +4,8 @@ @import "styles/syntax-variables.less"; @import "styles/editor.less"; -@import "styles/syntax.less"; +@import "styles/syntax-legacy/_base.less"; + +@import "styles/syntax/base.less"; +@import "styles/syntax/css.less"; +@import "styles/syntax/html.less"; diff --git a/packages/atom-dark-syntax/styles/syntax.less b/packages/atom-dark-syntax/styles/syntax-legacy/_base.less similarity index 100% rename from packages/atom-dark-syntax/styles/syntax.less rename to packages/atom-dark-syntax/styles/syntax-legacy/_base.less diff --git a/packages/atom-dark-syntax/styles/syntax/base.less b/packages/atom-dark-syntax/styles/syntax/base.less new file mode 100644 index 000000000..d5a78947e --- /dev/null +++ b/packages/atom-dark-syntax/styles/syntax/base.less @@ -0,0 +1,267 @@ +/* + This defines styling rules for syntax classes. + + See the naming conventions for a list of syntax classes: + https://flight-manual.atom.io/hacking-atom/sections/syntax-naming-conventions + + When styling rules conflict: + - The last rule overrides previous rules. + - The rule with most classes and pseudo-classes overrides the last rule. +*/ + +// if for return +.syntax--keyword { + color: #96CBFE; + + // global let def class + &.syntax--storage { + color: #96CBFE; + } + + // int char float + &.syntax--type { + color: #FFFFB6; + } + + // and del not + &.syntax--operator { + color: #96CBFE; + } + + // super + &.syntax--function { + color: #C6C5FE; + } + + // this self + &.syntax--variable { + color: #C6C5FE; + } + + // = + && | << ? + &.syntax--symbolic { + color: #EDEDED; + } +} + +// identifier +.syntax--entity { + color: #C5C8C6; + + // variable + &.syntax--variable { + color: #C5C8C6; + } + + // self cls iota + &.syntax--support { + color: #C6C5FE; + } + + // @entity.decorator + &.syntax--decorator:last-child { + color: #FFD2A7; + } + + // label: + &.syntax--label { + text-decoration: underline; + } + + // import package + &.syntax--package { + color: #FFD2A7; + } + + // function method + &.syntax--function { + color: #FFD2A7; + } + + // add + &.syntax--operator { + color: #FFD2A7; + + // %>% <=> + &.syntax--symbolic { + color: #EDEDED; + } + } + + // String Class int rune list + &.syntax--type { + color: #FFFFB6; + } + + // div span + &.syntax--tag { + color: #96CBFE; + } + + // href src alt + &.syntax--attribute { + color: #FF73FD; + } +} + +// () [] {} => @ +.syntax--punctuation { + color: #C5C8C6; + + // . -> + &.syntax--accessor.syntax--member { + color: #EDEDED; + } +} + +// "string" +.syntax--string { + color: #A8FF60; + + // :immutable + &.syntax--immutable { + color: #A8FF60; + } + + // ${variable} %().2f + &.syntax--part { + color: #00A0A0; + } + + // /^reg[ex]?p/ + &.syntax--regexp { + color: #A8FF60; + + &.syntax--group { + color: #A8FF60; + background-color: @syntax-background-color; + } + + // \g \" + .syntax--constant.syntax--character.syntax--escape { + color: #A8FF60; + + // \n \W \d . + &.syntax--code { + color: #00A0A0; + } + } + + // ^ $ \b ? + i + &.syntax--language { + color: #96CBFE; + } + + // \1 + &.syntax--variable { + color: #C5C8C6; + } + + // ( ) [^ ] (?= ) | r" / + &.syntax--punctuation { + color: #E9C062; + } + } +} + +// literal true nil +.syntax--constant { + color: #FF73FD; + + // 4 1.3 Infinity + &.syntax--numeric { + color: #FF73FD; + } + + // < 'a' + &.syntax--character { + color: #A8FF60; + + // \" \' \g \. + &.syntax--escape { + color: #A8FF60; + } + + // \u2661 \n \t \W . + &.syntax--code { + color: #00A0A0; + } + } +} + +// text +.syntax--text { + color: #C5C8C6; +} + +// __formatted__ +.syntax--markup { + + // # Heading + &.syntax--heading { + color: #eee; + } + + // - item + &.syntax--list { + color: #555; + } + + // > quote + &.syntax--quote { + color: #555; + } + + // `raw` + &.syntax--raw { + color: #aaa; + } + + // url.com (path) + &.syntax--link { + color: #555; + } + + // [alt] ![alt] + &.syntax--alt { + color: #ddd; + } +} + +// /* comment */ +.syntax--comment { + color: #8A8A8A; + + // @param TODO NOTE + &.syntax--caption { + color: lighten(#8A8A8A, 6); + font-weight: bold; + } + + // variable function type + &.syntax--term { + color: lighten(#8A8A8A, 9); + } + + // { } / . + &.syntax--punctuation { + color: #8A8A8A; + font-weight: normal; + } +} + +// 0invalid +.syntax--invalid:not(.syntax--punctuation) { + + // §illegal + &.syntax--illegal { + color: #FD5FF1 !important; + background-color: rgba(86, 45, 86, 0.75) !important; + } + + // obsolete() + &.syntax--deprecated { + color: #FD5FF1 !important; + text-decoration: underline !important; + } +} diff --git a/packages/atom-dark-syntax/styles/syntax/css.less b/packages/atom-dark-syntax/styles/syntax/css.less new file mode 100644 index 000000000..20b8ccbe0 --- /dev/null +++ b/packages/atom-dark-syntax/styles/syntax/css.less @@ -0,0 +1,106 @@ +.syntax--source.syntax--css { + + .syntax--entity { + + // function() + &.syntax--function { + color: #C5C8C6; + + // url rgb + &.syntax--support { + color: #DAD085; + } + } + + // .class :pseudo-class attribute + &.syntax--selector { + color: #FF73FD; + + // div span + &.syntax--tag { + color: #96CBFE; + text-decoration: underline; + } + + // #id + &.syntax--id { + color: #8B98AB; + } + + // .class + &.syntax--class { + color: #62B1FE; + } + } + + // property: constant + &.syntax--property { + + // height position border + &.syntax--support { + color: #EDEDED; + } + } + + // --variable + &.syntax--variable { + color: #C6C5FE; + } + + // @keyframes keyframe + &.syntax--keyframe { + color: #C6C5FE; + } + } + + // property: constant + .syntax--constant { + color: #C5C8C6; + + // flex solid bold + &.syntax--support { + color: #F9EE98; + } + + // 4 1.3 + &.syntax--numeric { + color: #99CC99; + + // px % cm hz + &.syntax--unit { + color: #99CC99; + } + } + + // screen print + &.syntax--media { + color: #FFD2A7; + } + + // #b294bb blue red + &.syntax--color { + color: #99CC99; + } + + // from to 50% + &.syntax--offset { + color: #FFD2A7; + + // % + &.syntax--unit { + color: #FFD2A7; + } + } + } + + // . : :: # [] () + .syntax--punctuation { + color: #C5C8C6; + + // * + &.syntax--wildcard { + color: #96CBFE; + text-decoration: underline; + } + } +} diff --git a/packages/atom-dark-syntax/styles/syntax/html.less b/packages/atom-dark-syntax/styles/syntax/html.less new file mode 100644 index 000000000..505cc6233 --- /dev/null +++ b/packages/atom-dark-syntax/styles/syntax/html.less @@ -0,0 +1,18 @@ +.syntax--source.syntax--html { + + .syntax--punctuation { + + // < /> + &.syntax--tag { + color: #96CBFE; + } + } + + .syntax--meta { + + // + &.syntax--doctype { + color: #8A8A8A; + } + } +} diff --git a/packages/atom-light-syntax/index.less b/packages/atom-light-syntax/index.less index 7a0dac1d3..d86a25ba2 100644 --- a/packages/atom-light-syntax/index.less +++ b/packages/atom-light-syntax/index.less @@ -4,4 +4,7 @@ @import "styles/syntax-variables.less"; @import 'styles/editor.less'; -@import 'styles/syntax.less'; +@import 'styles/syntax-legacy/_base.less'; + +@import "styles/syntax/base.less"; +@import "styles/syntax/css.less"; diff --git a/packages/atom-light-syntax/styles/syntax.less b/packages/atom-light-syntax/styles/syntax-legacy/_base.less similarity index 100% rename from packages/atom-light-syntax/styles/syntax.less rename to packages/atom-light-syntax/styles/syntax-legacy/_base.less diff --git a/packages/atom-light-syntax/styles/syntax/base.less b/packages/atom-light-syntax/styles/syntax/base.less new file mode 100644 index 000000000..b17aba40a --- /dev/null +++ b/packages/atom-light-syntax/styles/syntax/base.less @@ -0,0 +1,232 @@ +/* + This defines styling rules for syntax classes. + + See the naming conventions for a list of syntax classes: + https://flight-manual.atom.io/hacking-atom/sections/syntax-naming-conventions + + When styling rules conflict: + - The last rule overrides previous rules. + - The rule with most classes and pseudo-classes overrides the last rule. +*/ + +// if for and del = && +.syntax--keyword { + color: #222; + font-weight: bold; + + // global let def class + &.syntax--storage { + color: #222; + font-weight: bold; + } + + // int char float + &.syntax--type { + color: #458; + font-weight: normal; + } + + // super + &.syntax--function { + color: #008080; + } + + // this self + &.syntax--variable { + color: #008080; + } +} + +// identifier +.syntax--entity { + color: #555; + + // function(parameter) + &.syntax--parameter { + color: #555; + } + + // self cls iota + &.syntax--support { + color: #008080; + } + + // @entity.decorator + &.syntax--decorator:last-child { + color: #900; + } + + // label: + &.syntax--label { + text-decoration: underline; + } + + // function method + &.syntax--function { + color: #900; + } + + // add + &.syntax--operator { + color: #900; + + // %>% <=> + &.syntax--symbolic { + color: #555; + } + } + + // String Class int rune list + &.syntax--type { + color: #458; + } + + // div span + &.syntax--tag { + color: #008080; + } + + // href src alt + &.syntax--attribute { + color: #458; + font-weight: bold; + } +} + +// () [] {} => @ +.syntax--punctuation { + + // . -> + &.syntax--accessor.syntax--member { + color: #222; + font-weight: bold; + } +} + +// "string" +.syntax--string { + color: #D14; + + // :immutable + &.syntax--immutable { + color: #D14; + } + + // {placeholder} %().2f + &.syntax--part { + color: #606aa1; + } + + // ${ } + &.syntax--interpolation { + color: #222; + } + + // /^reg[ex]?p/ + &.syntax--regexp { + color: #D14; + + // ^ $ \b ? + i + &.syntax--language { + color: #222; + } + + // \1 + &.syntax--variable { + color: #008080; + } + + // ( ) [^ ] (?= ) | r" / + &.syntax--punctuation { + color: #222; + } + } +} + +// literal 4 1.3 +.syntax--constant { + color: #D14; + + // < 'a' + &.syntax--character { + color: #D14; + + // \" \' \g \. + &.syntax--escape { + color: #D14; + } + + // \u2661 \n \t \W . + &.syntax--code { + color: #606aa1; + } + } + + // true false nil + &.syntax--language { + color: #D14; + } +} + +// text +.syntax--text { + color: #555; +} + +// __formatted__ +.syntax--markup { + + // # Heading + &.syntax--heading { + color: #111; + } + + // 1. * - + &.syntax--list.syntax--punctuation { + color: #888; + } + + // url.com (path) + &.syntax--link { + color: #888; + } +} + +// /* comment */ +.syntax--comment { + color: #999988; + font-style: italic; + + // @param TODO NOTE + &.syntax--caption { + color: lighten(#999988, 6); + font-weight: bold; + } + + // variable function type + &.syntax--term { + color: lighten(#999988, 9); + } + + // { } / . + &.syntax--punctuation { + color: #999988; + font-weight: normal; + } +} + +// 0invalid +.syntax--invalid:not(.syntax--punctuation) { + + // §illegal + &.syntax--illegal { + color: #F8F8F0 !important; + background-color: #00A8C6 !important; + } + + // obsolete() + &.syntax--deprecated { + color: #F8F8F0 !important; + background-color: #8FBE00 !important; + } +} diff --git a/packages/atom-light-syntax/styles/syntax/css.less b/packages/atom-light-syntax/styles/syntax/css.less new file mode 100644 index 000000000..23fe60587 --- /dev/null +++ b/packages/atom-light-syntax/styles/syntax/css.less @@ -0,0 +1,108 @@ +.syntax--source.syntax--css { + + .syntax--entity { + + // function() + &.syntax--function { + color: #555; + + // url rgb + &.syntax--support { + color: #458; + } + } + + // .class :pseudo-class attribute + &.syntax--selector { + color: #458; + font-weight: bold; + + // div span + &.syntax--tag { + color: #008080; + font-weight: normal; + } + } + + // href src alt + .syntax--attribute { + color: #458; + font-weight: bold; + } + + // property: constant + &.syntax--property { + color: #555; + + // height position border + &.syntax--support { + font-weight: bold; + color: #333; + } + } + + // --variable + &.syntax--variable { + color: #008080; + } + + // @keyframes keyframe + &.syntax--keyframe { + color: #606aa1; + } + } + + // property: constant + .syntax--constant { + color: #555; + + // flex solid bold + &.syntax--support { + color: #099; + } + + // 4 1.3 + &.syntax--numeric { + color: #099; + + // px % cm hz + &.syntax--unit { + color: #445588; + font-weight: bold; + } + } + + // screen print + &.syntax--media { + color: #099; + } + + // #b294bb blue red + &.syntax--color { + color: #099; + } + + // [attribute=attribute-value] + &.syntax--attribute-value { + color: #D14; + } + } + + // . : :: # + .syntax--punctuation.syntax--selector { + color: #458; + font-weight: bold; + + // * + &.syntax--wildcard { + color: #008080; + font-weight: normal; + } + + // [] + &.syntax--attribute { + color: #555; + font-weight: normal; + } + } +} diff --git a/packages/base16-tomorrow-dark-theme/index.less b/packages/base16-tomorrow-dark-theme/index.less index bebbc05a7..f3dfd339c 100644 --- a/packages/base16-tomorrow-dark-theme/index.less +++ b/packages/base16-tomorrow-dark-theme/index.less @@ -5,6 +5,9 @@ @import "styles/editor.less"; -@import "styles/syntax/_base.less"; -@import "styles/syntax/cs.less"; -@import "styles/syntax/json.less"; +@import "styles/syntax-legacy/_base.less"; +@import "styles/syntax-legacy/cs.less"; +@import "styles/syntax-legacy/json.less"; + +@import "styles/syntax/base.less"; +@import "styles/syntax/css.less"; diff --git a/packages/base16-tomorrow-dark-theme/styles/syntax/_base.less b/packages/base16-tomorrow-dark-theme/styles/syntax-legacy/_base.less similarity index 100% rename from packages/base16-tomorrow-dark-theme/styles/syntax/_base.less rename to packages/base16-tomorrow-dark-theme/styles/syntax-legacy/_base.less diff --git a/packages/base16-tomorrow-dark-theme/styles/syntax/cs.less b/packages/base16-tomorrow-dark-theme/styles/syntax-legacy/cs.less similarity index 100% rename from packages/base16-tomorrow-dark-theme/styles/syntax/cs.less rename to packages/base16-tomorrow-dark-theme/styles/syntax-legacy/cs.less diff --git a/packages/base16-tomorrow-dark-theme/styles/syntax/json.less b/packages/base16-tomorrow-dark-theme/styles/syntax-legacy/json.less similarity index 100% rename from packages/base16-tomorrow-dark-theme/styles/syntax/json.less rename to packages/base16-tomorrow-dark-theme/styles/syntax-legacy/json.less diff --git a/packages/base16-tomorrow-dark-theme/styles/syntax/base.less b/packages/base16-tomorrow-dark-theme/styles/syntax/base.less new file mode 100644 index 000000000..44cfa2ca0 --- /dev/null +++ b/packages/base16-tomorrow-dark-theme/styles/syntax/base.less @@ -0,0 +1,293 @@ +/* + This defines styling rules for syntax classes. + + See the naming conventions for a list of syntax classes: + https://flight-manual.atom.io/hacking-atom/sections/syntax-naming-conventions + + When styling rules conflict: + - The last rule overrides previous rules. + - The rule with most classes and pseudo-classes overrides the last rule. +*/ + +// if for return +.syntax--keyword { + color: @purple; + + // global let def class + &.syntax--storage { + color: @purple; + } + + // int char float + &.syntax--type { + color: @yellow; + } + + // and del not + &.syntax--operator { + color: @purple; + } + + // super + &.syntax--function { + color: @red; + } + + // this self + &.syntax--variable { + color: @red; + } + + // = + && | << ? + &.syntax--symbolic { + color: @syntax-text-color; + } +} + +// identifier +.syntax--entity { + color: @syntax-text-color; + + // self cls iota + &.syntax--support { + color: @red; + } + + // @entity.decorator + &.syntax--decorator:last-child { + color: @blue; + } + + // label: + &.syntax--label { + text-decoration: underline; + } + + // function method + &.syntax--function { + color: @blue; + + // len print + &.syntax--support { + color: @cyan; + } + } + + // add + &.syntax--operator { + color: @blue; + + // %>% <=> + &.syntax--symbolic { + color: @syntax-text-color; + } + } + + // String Class int rune list + &.syntax--type { + color: @yellow; + } + + // div span + &.syntax--tag { + color: @red; + } + + // href src alt + &.syntax--attribute { + color: @orange; + } +} + +// () [] {} => @ +.syntax--punctuation { + color: @syntax-text-color; + + // { } ~~~ + &.syntax--embedded { + color: @brown; + } +} + +// "string" +.syntax--string { + color: @green; + + // :immutable + &.syntax--immutable { + color: @green; + } + + // {placeholder} %().2f + &.syntax--part { + color: @cyan; + } + + // ${ } + &.syntax--interpolation { + color: @brown; + } + + // /^reg[ex]?p/ + &.syntax--regexp { + color: @green; + + // ^ $ \b ? + i + &.syntax--language { + color: @purple; + } + + // \1 + &.syntax--variable { + color: @blue; + } + + // ( ) [^ ] (?= ) | r" / + &.syntax--punctuation { + color: @brown; + } + } +} + +// literal 4 1.3 true nil +.syntax--constant { + color: @orange; + + // < 'a' + &.syntax--character { + color: @green; + + // \" \' \g \. + &.syntax--escape { + color: @green; + } + + // \u2661 \n \t \W . + &.syntax--code { + color: @cyan; + } + } +} + +// text +.syntax--text { + color: @syntax-text-color; +} + +// __formatted__ +.syntax--markup { + + // # Heading + &.syntax--heading { + color: @red; + } + + // 1. * - + &.syntax--list.syntax--punctuation { + color: @red; + } + + // **bold** + &.syntax--bold { + color: @orange; + font-weight: bold; + } + + // *italic* + &.syntax--italic { + color: @purple; + font-style: italic; + } + + // `raw` + &.syntax--raw { + color: @green; + } + + // url.com (path) + &.syntax--link { + color: @blue; + } + + // [alt] ![alt] + &.syntax--alt { + color: @cyan; + } + + // {++ inserted ++} + &.syntax--inserted { + color: @green; + + .syntax--punctuation { + color: @green; + } + } + + // {== highlighted ==} + &.syntax--inserted { + color: @green; + + .syntax--punctuation { + color: @green; + } + } + + // {-- deleted --} + &.syntax--deleted { + color: @red; + + .syntax--punctuation { + color: @red; + } + } + + // {~~ from~>to ~~} + &.syntax--changed { + color: @purple; + + .syntax--punctuation { + color: @purple; + } + } + + // {>> commented <<} + &.syntax--commented { + color: @gray; + + .syntax--punctuation { + color: @gray; + } + } +} + +// /* comment */ +.syntax--comment { + color: @gray; + + // @param TODO NOTE + &.syntax--caption { + color: lighten(@gray, 3); + font-weight: bold; + } + + // variable function type + &.syntax--term { + color: lighten(@gray, 7); + } + + // { } / . + &.syntax--punctuation { + color: @gray; + font-weight: normal; + } +} + +// 0invalid +.syntax--invalid:not(.syntax--punctuation) { + + // §illegal + &.syntax--illegal { + background-color: @red; + color: @syntax-background-color; + } +} diff --git a/packages/base16-tomorrow-dark-theme/styles/syntax/css.less b/packages/base16-tomorrow-dark-theme/styles/syntax/css.less new file mode 100644 index 000000000..95206ebb5 --- /dev/null +++ b/packages/base16-tomorrow-dark-theme/styles/syntax/css.less @@ -0,0 +1,113 @@ +.syntax--source.syntax--css { + + .syntax--entity { + + // function() + &.syntax--function { + color: @syntax-text-color; + + // url rgb + &.syntax--support { + color: @cyan; + } + } + + // .class :pseudo-class attribute + &.syntax--selector { + color: @orange; + + // div span + &.syntax--tag { + color: @red; + } + + // #id + &.syntax--id { + color: @blue; + } + } + + // property: constant + &.syntax--property { + color: @syntax-text-color; + } + + // --variable + &.syntax--variable { + color: @red; + } + + // @keyframes keyframe + &.syntax--keyframe { + color: @red; + } + } + + // property: constant + .syntax--constant { + color: @syntax-text-color; + + // flex solid bold + &.syntax--support { + color: @orange; + } + + // 3px 4em + &.syntax--numeric { + color: @orange; + } + + // screen print + &.syntax--media { + color: @orange; + } + + // from to 50% + &.syntax--offset { + color: @syntax-text-color; + + // % + &.syntax--unit { + color: @syntax-text-color; + } + } + + // #b294bb + &.syntax--color { + color: @cyan; + + // blue red + &.syntax--support { + color: @orange; + } + } + + // [attribute=attribute-value] + &.syntax--attribute-value { + color: @green; + } + } + + .syntax--punctuation { + + // . : :: + &.syntax--selector { + color: @orange; + + // * + &.syntax--wildcard { + color: @red; + } + + // # + &.syntax--id { + color: @blue; + } + + // [] + &.syntax--attribute { + color: @syntax-text-color; + } + } + } +} diff --git a/packages/base16-tomorrow-light-theme/index.less b/packages/base16-tomorrow-light-theme/index.less index 356239efd..fef2c95cd 100644 --- a/packages/base16-tomorrow-light-theme/index.less +++ b/packages/base16-tomorrow-light-theme/index.less @@ -5,6 +5,9 @@ @import "styles/editor.less"; -@import "styles/syntax/_base.less"; -@import "styles/syntax/cs.less"; -@import "styles/syntax/json.less"; +@import "styles/syntax-legacy/_base.less"; +@import "styles/syntax-legacy/cs.less"; +@import "styles/syntax-legacy/json.less"; + +@import "styles/syntax/base.less"; +@import "styles/syntax/css.less"; diff --git a/packages/base16-tomorrow-light-theme/styles/syntax/_base.less b/packages/base16-tomorrow-light-theme/styles/syntax-legacy/_base.less similarity index 100% rename from packages/base16-tomorrow-light-theme/styles/syntax/_base.less rename to packages/base16-tomorrow-light-theme/styles/syntax-legacy/_base.less diff --git a/packages/base16-tomorrow-light-theme/styles/syntax/cs.less b/packages/base16-tomorrow-light-theme/styles/syntax-legacy/cs.less similarity index 100% rename from packages/base16-tomorrow-light-theme/styles/syntax/cs.less rename to packages/base16-tomorrow-light-theme/styles/syntax-legacy/cs.less diff --git a/packages/base16-tomorrow-light-theme/styles/syntax/json.less b/packages/base16-tomorrow-light-theme/styles/syntax-legacy/json.less similarity index 100% rename from packages/base16-tomorrow-light-theme/styles/syntax/json.less rename to packages/base16-tomorrow-light-theme/styles/syntax-legacy/json.less diff --git a/packages/base16-tomorrow-light-theme/styles/syntax/base.less b/packages/base16-tomorrow-light-theme/styles/syntax/base.less new file mode 100644 index 000000000..44cfa2ca0 --- /dev/null +++ b/packages/base16-tomorrow-light-theme/styles/syntax/base.less @@ -0,0 +1,293 @@ +/* + This defines styling rules for syntax classes. + + See the naming conventions for a list of syntax classes: + https://flight-manual.atom.io/hacking-atom/sections/syntax-naming-conventions + + When styling rules conflict: + - The last rule overrides previous rules. + - The rule with most classes and pseudo-classes overrides the last rule. +*/ + +// if for return +.syntax--keyword { + color: @purple; + + // global let def class + &.syntax--storage { + color: @purple; + } + + // int char float + &.syntax--type { + color: @yellow; + } + + // and del not + &.syntax--operator { + color: @purple; + } + + // super + &.syntax--function { + color: @red; + } + + // this self + &.syntax--variable { + color: @red; + } + + // = + && | << ? + &.syntax--symbolic { + color: @syntax-text-color; + } +} + +// identifier +.syntax--entity { + color: @syntax-text-color; + + // self cls iota + &.syntax--support { + color: @red; + } + + // @entity.decorator + &.syntax--decorator:last-child { + color: @blue; + } + + // label: + &.syntax--label { + text-decoration: underline; + } + + // function method + &.syntax--function { + color: @blue; + + // len print + &.syntax--support { + color: @cyan; + } + } + + // add + &.syntax--operator { + color: @blue; + + // %>% <=> + &.syntax--symbolic { + color: @syntax-text-color; + } + } + + // String Class int rune list + &.syntax--type { + color: @yellow; + } + + // div span + &.syntax--tag { + color: @red; + } + + // href src alt + &.syntax--attribute { + color: @orange; + } +} + +// () [] {} => @ +.syntax--punctuation { + color: @syntax-text-color; + + // { } ~~~ + &.syntax--embedded { + color: @brown; + } +} + +// "string" +.syntax--string { + color: @green; + + // :immutable + &.syntax--immutable { + color: @green; + } + + // {placeholder} %().2f + &.syntax--part { + color: @cyan; + } + + // ${ } + &.syntax--interpolation { + color: @brown; + } + + // /^reg[ex]?p/ + &.syntax--regexp { + color: @green; + + // ^ $ \b ? + i + &.syntax--language { + color: @purple; + } + + // \1 + &.syntax--variable { + color: @blue; + } + + // ( ) [^ ] (?= ) | r" / + &.syntax--punctuation { + color: @brown; + } + } +} + +// literal 4 1.3 true nil +.syntax--constant { + color: @orange; + + // < 'a' + &.syntax--character { + color: @green; + + // \" \' \g \. + &.syntax--escape { + color: @green; + } + + // \u2661 \n \t \W . + &.syntax--code { + color: @cyan; + } + } +} + +// text +.syntax--text { + color: @syntax-text-color; +} + +// __formatted__ +.syntax--markup { + + // # Heading + &.syntax--heading { + color: @red; + } + + // 1. * - + &.syntax--list.syntax--punctuation { + color: @red; + } + + // **bold** + &.syntax--bold { + color: @orange; + font-weight: bold; + } + + // *italic* + &.syntax--italic { + color: @purple; + font-style: italic; + } + + // `raw` + &.syntax--raw { + color: @green; + } + + // url.com (path) + &.syntax--link { + color: @blue; + } + + // [alt] ![alt] + &.syntax--alt { + color: @cyan; + } + + // {++ inserted ++} + &.syntax--inserted { + color: @green; + + .syntax--punctuation { + color: @green; + } + } + + // {== highlighted ==} + &.syntax--inserted { + color: @green; + + .syntax--punctuation { + color: @green; + } + } + + // {-- deleted --} + &.syntax--deleted { + color: @red; + + .syntax--punctuation { + color: @red; + } + } + + // {~~ from~>to ~~} + &.syntax--changed { + color: @purple; + + .syntax--punctuation { + color: @purple; + } + } + + // {>> commented <<} + &.syntax--commented { + color: @gray; + + .syntax--punctuation { + color: @gray; + } + } +} + +// /* comment */ +.syntax--comment { + color: @gray; + + // @param TODO NOTE + &.syntax--caption { + color: lighten(@gray, 3); + font-weight: bold; + } + + // variable function type + &.syntax--term { + color: lighten(@gray, 7); + } + + // { } / . + &.syntax--punctuation { + color: @gray; + font-weight: normal; + } +} + +// 0invalid +.syntax--invalid:not(.syntax--punctuation) { + + // §illegal + &.syntax--illegal { + background-color: @red; + color: @syntax-background-color; + } +} diff --git a/packages/base16-tomorrow-light-theme/styles/syntax/css.less b/packages/base16-tomorrow-light-theme/styles/syntax/css.less new file mode 100644 index 000000000..95206ebb5 --- /dev/null +++ b/packages/base16-tomorrow-light-theme/styles/syntax/css.less @@ -0,0 +1,113 @@ +.syntax--source.syntax--css { + + .syntax--entity { + + // function() + &.syntax--function { + color: @syntax-text-color; + + // url rgb + &.syntax--support { + color: @cyan; + } + } + + // .class :pseudo-class attribute + &.syntax--selector { + color: @orange; + + // div span + &.syntax--tag { + color: @red; + } + + // #id + &.syntax--id { + color: @blue; + } + } + + // property: constant + &.syntax--property { + color: @syntax-text-color; + } + + // --variable + &.syntax--variable { + color: @red; + } + + // @keyframes keyframe + &.syntax--keyframe { + color: @red; + } + } + + // property: constant + .syntax--constant { + color: @syntax-text-color; + + // flex solid bold + &.syntax--support { + color: @orange; + } + + // 3px 4em + &.syntax--numeric { + color: @orange; + } + + // screen print + &.syntax--media { + color: @orange; + } + + // from to 50% + &.syntax--offset { + color: @syntax-text-color; + + // % + &.syntax--unit { + color: @syntax-text-color; + } + } + + // #b294bb + &.syntax--color { + color: @cyan; + + // blue red + &.syntax--support { + color: @orange; + } + } + + // [attribute=attribute-value] + &.syntax--attribute-value { + color: @green; + } + } + + .syntax--punctuation { + + // . : :: + &.syntax--selector { + color: @orange; + + // * + &.syntax--wildcard { + color: @red; + } + + // # + &.syntax--id { + color: @blue; + } + + // [] + &.syntax--attribute { + color: @syntax-text-color; + } + } + } +} diff --git a/packages/dalek/README.md b/packages/dalek/README.md index 393f40f41..e6bef6509 100644 --- a/packages/dalek/README.md +++ b/packages/dalek/README.md @@ -16,4 +16,4 @@ When people install core Atom packages as if they are community packages, it can ## I have more questions. Where can I ask them? -Please feel free to ask on [the official Atom message board](https://discuss.atom.io/c/support). +Please feel free to ask on [the official Atom message board](https://github.com/atom/atom/discussions). diff --git a/packages/dalek/package-lock.json b/packages/dalek/package-lock.json index 72379a8b4..fb5e31bee 100644 --- a/packages/dalek/package-lock.json +++ b/packages/dalek/package-lock.json @@ -1306,9 +1306,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash._baseassign": { @@ -1572,9 +1572,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-to-regexp": { diff --git a/packages/deprecation-cop/lib/deprecation-cop-view.js b/packages/deprecation-cop/lib/deprecation-cop-view.js index b26139b23..108665f17 100644 --- a/packages/deprecation-cop/lib/deprecation-cop-view.js +++ b/packages/deprecation-cop/lib/deprecation-cop-view.js @@ -6,9 +6,9 @@ import { CompositeDisposable } from 'atom'; import etch from 'etch'; import fs from 'fs-plus'; import Grim from 'grim'; -import marked from 'marked'; +import { marked } from 'marked'; import path from 'path'; -import shell from 'shell'; +import { shell } from 'electron'; export default class DeprecationCopView { constructor({ uri }) { diff --git a/packages/deprecation-cop/package.json b/packages/deprecation-cop/package.json index 6329b8cc5..48a0b4439 100644 --- a/packages/deprecation-cop/package.json +++ b/packages/deprecation-cop/package.json @@ -12,7 +12,7 @@ "etch": "0.9.0", "fs-plus": "^3.0.0", "grim": "^2.0.1", - "marked": "^0.3.6", + "marked": "^4.0.10", "underscore-plus": "^1.7.0" }, "consumedServices": { diff --git a/packages/git-diff/lib/diff-list-view.js b/packages/git-diff/lib/diff-list-view.js index 27c5c2f28..520a4160e 100644 --- a/packages/git-diff/lib/diff-list-view.js +++ b/packages/git-diff/lib/diff-list-view.js @@ -1,7 +1,9 @@ -const SelectListView = require('atom-select-list'); -const { repositoryForPath } = require('./helpers'); +'use babel'; -module.exports = class DiffListView { +import SelectListView from 'atom-select-list'; +import repositoryForPath from './helpers'; + +export default class DiffListView { constructor() { this.selectListView = new SelectListView({ emptyMessage: 'No diffs in file', @@ -71,7 +73,7 @@ module.exports = class DiffListView { this.cancel(); } else if (editor) { this.editor = editor; - const repository = repositoryForPath(this.editor.getPath()); + const repository = await repositoryForPath(this.editor.getPath()); let diffs = repository ? repository.getLineDiffs(this.editor.getPath(), this.editor.getText()) : []; @@ -86,4 +88,4 @@ module.exports = class DiffListView { this.attach(); } } -}; +} diff --git a/packages/git-diff/lib/git-diff-view.js b/packages/git-diff/lib/git-diff-view.js index 7cb7320f9..38376f644 100644 --- a/packages/git-diff/lib/git-diff-view.js +++ b/packages/git-diff/lib/git-diff-view.js @@ -1,64 +1,157 @@ -const { CompositeDisposable } = require('atom'); -const { repositoryForPath } = require('./helpers'); +'use babel'; + +import { CompositeDisposable } from 'atom'; +import repositoryForPath from './helpers'; const MAX_BUFFER_LENGTH_TO_DIFF = 2 * 1024 * 1024; -module.exports = class GitDiffView { - constructor(editor) { - this.updateDiffs = this.updateDiffs.bind(this); - this.editor = editor; +/** + * @describe Handles per-editor event and repository subscriptions. + * @param editor {Atom.TextEditor} - The editor this view will manage. + */ +export default class GitDiffView { + constructor(editor, editorElement) { + // These are the only members guaranteed to exist. this.subscriptions = new CompositeDisposable(); - this.decorations = {}; - this.markers = []; - } + this.editor = editor; + this.editorElement = editorElement; + this.repository = null; + this.markers = new Map(); - start() { - const editorElement = this.editor.getElement(); + // Assign `null` to all possible child vars here so the JS engine doesn't + // have to re-evaluate the microcode when we do eventually need them. + this.releaseChildren(); - this.subscribeToRepository(); + // I know this looks janky but it works. Class methods are available + // before the constructor is executed. It's a micro-opt above lambdas. + const subscribeToRepository = this.subscribeToRepository.bind(this); + // WARNING: This gets handed to requestAnimationFrame, so it must be bound. + this.updateDiffs = this.updateDiffs.bind(this); + + subscribeToRepository(); this.subscriptions.add( - this.editor.onDidStopChanging(this.updateDiffs), - this.editor.onDidChangePath(this.updateDiffs), - atom.project.onDidChangePaths(() => this.subscribeToRepository()), - atom.commands.add(editorElement, 'git-diff:move-to-next-diff', () => - this.moveToNextDiff() - ), - atom.commands.add(editorElement, 'git-diff:move-to-previous-diff', () => - this.moveToPreviousDiff() - ), - atom.config.onDidChange('git-diff.showIconsInEditorGutter', () => - this.updateIconDecoration() - ), - atom.config.onDidChange('editor.showLineNumbers', () => - this.updateIconDecoration() - ), - editorElement.onDidAttach(() => this.updateIconDecoration()), - this.editor.onDidDestroy(() => { - this.cancelUpdate(); - this.removeDecorations(); - this.subscriptions.dispose(); - }) + atom.project.onDidChangePaths(subscribeToRepository) ); + } - this.updateIconDecoration(); - this.scheduleUpdate(); + /** + * @describe Handles tear down of destructables and subscriptions. + * Does not handle release of memory. This method should only be called + * just before this object is freed, and should only tear down the main + * object components that are guarunteed to exist at all times. + */ + destroy() { + this.subscriptions.dispose(); + this.destroyChildren(); + this.markers.clear(); + } + + /** + * @describe Destroys this objects children (non-freeing), it's intended + * to be an ease-of use function for maintaing this object. This method + * should only tear down objects that are selectively allocated upon + * repository discovery. + * + * Example: this.diffs only exists when we have a repository. + */ + destroyChildren() { + if (this._animationId) cancelAnimationFrame(this._animationId); + + if (this.diffs) + for (const diff of this.diffs) this.markers.get(diff).destroy(); + } + + /** + * @describe The memory releasing complement function of `destroyChildren`. + * frees the memory allocated at all child object storage locations + * when there is no repository. + */ + releaseChildren() { + this.diffs = null; + this._repoSubs = null; + this._animationId = null; + this.editorPath = null; + this.buffer = null; + } + + /** + * @describe handles all subscriptions based on the repository in focus + */ + async subscribeToRepository() { + if (this._repoSubs !== null) { + this._repoSubs.dispose(); + this.subscriptions.remove(this._repoSubs); + } + + // Don't cache the path unless we know we need it. + let editorPath = this.editor.getPath(); + + this.repository = await repositoryForPath(editorPath); + if (this.repository !== null) { + this.editorPath = editorPath; + this.buffer = this.editor.getBuffer(); + + const subscribeToRepository = this.subscribeToRepository.bind(this); + const updateIconDecoration = this.updateIconDecoration.bind(this); + const scheduleUpdate = this.scheduleUpdate.bind(this); + + this._repoSubs = new CompositeDisposable( + this.repository.onDidDestroy(subscribeToRepository), + this.repository.onDidChangeStatuses(scheduleUpdate), + this.repository.onDidChangeStatus(changedPath => { + if (changedPath === this.editorPath) scheduleUpdate(); + }), + this.editor.onDidStopChanging(scheduleUpdate), + this.editor.onDidChangePath(() => { + this.editorPath = this.editor.getPath(); + this.buffer = this.editor.getBuffer(); + scheduleUpdate(); + }), + atom.commands.add( + this.editorElement, + 'git-diff:move-to-next-diff', + this.moveToNextDiff.bind(this) + ), + atom.commands.add( + this.editorElement, + 'git-diff:move-to-previous-diff', + this.moveToPreviousDiff.bind(this) + ), + atom.config.onDidChange( + 'git-diff.showIconsInEditorGutter', + updateIconDecoration + ), + atom.config.onDidChange('editor.showLineNumbers', updateIconDecoration), + this.editorElement.onDidAttach(updateIconDecoration) + ); + + // Every time the repo is changed, the editor needs to be reinitialized. + this.subscriptions.add(this._repoSubs); + + updateIconDecoration(); + scheduleUpdate(); + } else { + this.destroyChildren(); + this.releaseChildren(); + } } moveToNextDiff() { const cursorLineNumber = this.editor.getCursorBufferPosition().row + 1; let nextDiffLineNumber = null; let firstDiffLineNumber = null; - if (this.diffs) { - for (const { newStart } of this.diffs) { - if (newStart > cursorLineNumber) { - if (nextDiffLineNumber == null) nextDiffLineNumber = newStart - 1; - nextDiffLineNumber = Math.min(newStart - 1, nextDiffLineNumber); - } - if (firstDiffLineNumber == null) firstDiffLineNumber = newStart - 1; - firstDiffLineNumber = Math.min(newStart - 1, firstDiffLineNumber); + for (const { newStart } of this.diffs) { + if (newStart > cursorLineNumber) { + if (nextDiffLineNumber == null) nextDiffLineNumber = newStart - 1; + + nextDiffLineNumber = Math.min(newStart - 1, nextDiffLineNumber); } + + if (firstDiffLineNumber == null) firstDiffLineNumber = newStart - 1; + + firstDiffLineNumber = Math.min(newStart - 1, firstDiffLineNumber); } // Wrap around to the first diff in the file @@ -72,8 +165,30 @@ module.exports = class GitDiffView { this.moveToLineNumber(nextDiffLineNumber); } + moveToPreviousDiff() { + const cursorLineNumber = this.editor.getCursorBufferPosition().row + 1; + let previousDiffLineNumber = null; + let lastDiffLineNumber = null; + for (const { newStart } of this.diffs) { + if (newStart < cursorLineNumber) { + previousDiffLineNumber = Math.max(newStart - 1, previousDiffLineNumber); + } + lastDiffLineNumber = Math.max(newStart - 1, lastDiffLineNumber); + } + + // Wrap around to the last diff in the file + if ( + atom.config.get('git-diff.wrapAroundOnMoveToDiff') && + previousDiffLineNumber === null + ) { + previousDiffLineNumber = lastDiffLineNumber; + } + + this.moveToLineNumber(previousDiffLineNumber); + } + updateIconDecoration() { - const gutter = this.editor.getElement().querySelector('.gutter'); + const gutter = this.editorElement.querySelector('.gutter'); if (gutter) { if ( atom.config.get('editor.showLineNumbers') && @@ -86,108 +201,67 @@ module.exports = class GitDiffView { } } - moveToPreviousDiff() { - const cursorLineNumber = this.editor.getCursorBufferPosition().row + 1; - let previousDiffLineNumber = -1; - let lastDiffLineNumber = -1; - if (this.diffs) { - for (const { newStart } of this.diffs) { - if (newStart < cursorLineNumber) { - previousDiffLineNumber = Math.max( - newStart - 1, - previousDiffLineNumber - ); - } - lastDiffLineNumber = Math.max(newStart - 1, lastDiffLineNumber); - } - } - - // Wrap around to the last diff in the file - if ( - atom.config.get('git-diff.wrapAroundOnMoveToDiff') && - previousDiffLineNumber === -1 - ) { - previousDiffLineNumber = lastDiffLineNumber; - } - - this.moveToLineNumber(previousDiffLineNumber); - } - moveToLineNumber(lineNumber) { - if (lineNumber != null && lineNumber >= 0) { + if (lineNumber !== null) { this.editor.setCursorBufferPosition([lineNumber, 0]); this.editor.moveToFirstCharacterOfLine(); } } - subscribeToRepository() { - this.repository = repositoryForPath(this.editor.getPath()); - if (this.repository) { - this.subscriptions.add( - this.repository.onDidChangeStatuses(() => { - this.scheduleUpdate(); - }) - ); - this.subscriptions.add( - this.repository.onDidChangeStatus(changedPath => { - if (changedPath === this.editor.getPath()) this.scheduleUpdate(); - }) - ); - } - } - - cancelUpdate() { - clearImmediate(this.immediateId); - } - scheduleUpdate() { - this.cancelUpdate(); - this.immediateId = setImmediate(this.updateDiffs); + // Use Chromium native requestAnimationFrame because it yields + // to the browser, is standard and doesn't involve extra JS overhead. + if (this._animationId) cancelAnimationFrame(this._animationId); + + this._animationId = requestAnimationFrame(this.updateDiffs); } + /** + * @describe Uses text markers in the target editor to visualize + * git modifications, additions, and deletions. The current algorithm + * just redraws the markers each call. + */ updateDiffs() { - if (this.editor.isDestroyed()) return; - this.removeDecorations(); - const path = this.editor && this.editor.getPath(); - if ( - path && - this.editor.getBuffer().getLength() < MAX_BUFFER_LENGTH_TO_DIFF - ) { - this.diffs = - this.repository && - this.repository.getLineDiffs(path, this.editor.getText()); - if (this.diffs) this.addDecorations(this.diffs); - } - } + if (this.buffer.getLength() < MAX_BUFFER_LENGTH_TO_DIFF) { + // Before we redraw the diffs, tear down the old markers. + if (this.diffs) + for (const diff of this.diffs) this.markers.get(diff).destroy(); - addDecorations(diffs) { - for (const { newStart, oldLines, newLines } of diffs) { - const startRow = newStart - 1; - const endRow = newStart + newLines - 1; - if (oldLines === 0 && newLines > 0) { - this.markRange(startRow, endRow, 'git-line-added'); - } else if (newLines === 0 && oldLines > 0) { - if (startRow < 0) { - this.markRange(0, 0, 'git-previous-line-removed'); + this.markers.clear(); + + const text = this.buffer.getText(); + this.diffs = this.repository.getLineDiffs(this.editorPath, text); + this.diffs = this.diffs || []; // Sanitize type to array. + + for (const diff of this.diffs) { + const { newStart, oldLines, newLines } = diff; + const startRow = newStart - 1; + const endRow = newStart + newLines - 1; + + let mark; + + if (oldLines === 0 && newLines > 0) { + mark = this.markRange(startRow, endRow, 'git-line-added'); + } else if (newLines === 0 && oldLines > 0) { + if (startRow < 0) { + mark = this.markRange(0, 0, 'git-previous-line-removed'); + } else { + mark = this.markRange(startRow, startRow, 'git-line-removed'); + } } else { - this.markRange(startRow, startRow, 'git-line-removed'); + mark = this.markRange(startRow, endRow, 'git-line-modified'); } - } else { - this.markRange(startRow, endRow, 'git-line-modified'); + + this.markers.set(diff, mark); } } } - removeDecorations() { - for (let marker of this.markers) marker.destroy(); - this.markers = []; - } - markRange(startRow, endRow, klass) { const marker = this.editor.markBufferRange([[startRow, 0], [endRow, 0]], { invalidate: 'never' }); this.editor.decorateMarker(marker, { type: 'line-number', class: klass }); - this.markers.push(marker); + return marker; } -}; +} diff --git a/packages/git-diff/lib/helpers.js b/packages/git-diff/lib/helpers.js index 30b38911a..4d3d12d0d 100644 --- a/packages/git-diff/lib/helpers.js +++ b/packages/git-diff/lib/helpers.js @@ -1,11 +1,9 @@ -exports.repositoryForPath = function(goalPath) { - const directories = atom.project.getDirectories(); - const repositories = atom.project.getRepositories(); - for (let i = 0; i < directories.length; i++) { - const directory = directories[i]; - if (goalPath === directory.getPath() || directory.contains(goalPath)) { - return repositories[i]; - } +'use babel'; +import { Directory } from 'atom'; + +export default async function(goalPath) { + if (goalPath) { + return atom.project.repositoryForDirectory(new Directory(goalPath)); } return null; -}; +} diff --git a/packages/git-diff/lib/main.js b/packages/git-diff/lib/main.js index 93aee760f..d09bf0739 100644 --- a/packages/git-diff/lib/main.js +++ b/packages/git-diff/lib/main.js @@ -1,32 +1,52 @@ -const GitDiffView = require('./git-diff-view'); -const DiffListView = require('./diff-list-view'); +'use babel'; + +import { CompositeDisposable } from 'atom'; +import GitDiffView from './git-diff-view'; +import DiffListView from './diff-list-view'; let diffListView = null; +let diffViews = new Set(); +let subscriptions = null; -module.exports = { - activate() { - const watchedEditors = new WeakSet(); +export default { + activate(state) { + subscriptions = new CompositeDisposable(); - atom.workspace.observeTextEditors(editor => { - if (watchedEditors.has(editor)) return; + subscriptions.add( + atom.workspace.observeTextEditors(editor => { + const editorElement = atom.views.getView(editor); + const diffView = new GitDiffView(editor, editorElement); - new GitDiffView(editor).start(); - atom.commands.add( - atom.views.getView(editor), - 'git-diff:toggle-diff-list', - () => { - if (diffListView == null) diffListView = new DiffListView(); - diffListView.toggle(); - } - ); + diffViews.add(diffView); - watchedEditors.add(editor); - editor.onDidDestroy(() => watchedEditors.delete(editor)); - }); + const listViewCommand = 'git-diff:toggle-diff-list'; + const editorSubs = new CompositeDisposable( + atom.commands.add(editorElement, listViewCommand, () => { + if (diffListView == null) diffListView = new DiffListView(); + + diffListView.toggle(); + }), + editor.onDidDestroy(() => { + diffView.destroy(); + diffViews.delete(diffView); + editorSubs.dispose(); + subscriptions.remove(editorSubs); + }) + ); + + subscriptions.add(editorSubs); + }) + ); }, deactivate() { - if (diffListView) diffListView.destroy(); diffListView = null; + + for (const diffView of diffViews) diffView.destroy(); + + diffViews.clear(); + + subscriptions.dispose(); + subscriptions = null; } }; diff --git a/packages/git-diff/package.json b/packages/git-diff/package.json index 7bfd29706..b3a7d918d 100644 --- a/packages/git-diff/package.json +++ b/packages/git-diff/package.json @@ -9,27 +9,11 @@ "atom": "*" }, "dependencies": { - "atom-select-list": "^0.7.0", - "fs-plus": "^3.0.0", - "temp": "~0.8.1" + "atom-select-list": "^0.7.0" }, "devDependencies": { - "standard": "^11.0.0" - }, - "standard": { - "ignore": [ - "spec/fixtures/working-dir/sample.js" - ], - "env": { - "atomtest": true, - "browser": true, - "jasmine": true, - "node": true - }, - "globals": [ - "atom", - "snapshotResult" - ] + "fs-plus": "^3.0.0", + "temp": "~0.8.1" }, "configSchema": { "showIconsInEditorGutter": { diff --git a/packages/git-diff/spec/diff-list-view-spec.js b/packages/git-diff/spec/diff-list-view-spec.js index 25e4f1e53..edeab5ffa 100644 --- a/packages/git-diff/spec/diff-list-view-spec.js +++ b/packages/git-diff/spec/diff-list-view-spec.js @@ -1,6 +1,6 @@ const path = require('path'); const fs = require('fs-plus'); -const temp = require('temp'); +const temp = require('temp').track(); describe('git-diff:toggle-diff-list', () => { let diffListView, editor; diff --git a/packages/git-diff/spec/git-diff-spec.js b/packages/git-diff/spec/git-diff-spec.js index bdae69f35..cb7d24823 100644 --- a/packages/git-diff/spec/git-diff-spec.js +++ b/packages/git-diff/spec/git-diff-spec.js @@ -1,12 +1,17 @@ const path = require('path'); const fs = require('fs-plus'); -const temp = require('temp'); +const temp = require('temp').track(); describe('GitDiff package', () => { - let editor, editorElement, projectPath; + let editor, editorElement, projectPath, screenUpdates; beforeEach(() => { - spyOn(window, 'setImmediate').andCallFake(fn => fn()); + screenUpdates = 0; + spyOn(window, 'requestAnimationFrame').andCallFake(fn => { + fn(); + screenUpdates++; + }); + spyOn(window, 'cancelAnimationFrame').andCallFake(i => null); projectPath = temp.mkdirSync('git-diff-spec-'); const otherPath = temp.mkdirSync('some-other-path-'); @@ -20,16 +25,26 @@ describe('GitDiff package', () => { jasmine.attachToDOM(atom.workspace.getElement()); - waitsForPromise(() => - atom.workspace.open(path.join(projectPath, 'sample.js')) - ); + waitsForPromise(async () => { + await atom.workspace.open(path.join(projectPath, 'sample.js')); + await atom.packages.activatePackage('git-diff'); + }); runs(() => { editor = atom.workspace.getActiveTextEditor(); - editorElement = editor.getElement(); + editorElement = atom.views.getView(editor); }); + }); - waitsForPromise(() => atom.packages.activatePackage('git-diff')); + afterEach(() => { + temp.cleanup(); + }); + + describe('when the editor has no changes', () => { + it("doesn't mark the editor", () => { + waitsFor(() => screenUpdates > 0); + runs(() => expect(editor.getMarkers().length).toBe(0)); + }); }); describe('when the editor has modified lines', () => { @@ -39,13 +54,17 @@ describe('GitDiff package', () => { ); editor.insertText('a'); advanceClock(editor.getBuffer().stoppedChangingDelay); - expect(editorElement.querySelectorAll('.git-line-modified').length).toBe( - 1 - ); - expect(editorElement.querySelector('.git-line-modified')).toHaveData( - 'buffer-row', - 0 - ); + + waitsFor(() => editor.getMarkers().length > 0); + runs(() => { + expect( + editorElement.querySelectorAll('.git-line-modified').length + ).toBe(1); + expect(editorElement.querySelector('.git-line-modified')).toHaveData( + 'buffer-row', + 0 + ); + }); }); }); @@ -56,11 +75,16 @@ describe('GitDiff package', () => { editor.insertNewline(); editor.insertText('a'); advanceClock(editor.getBuffer().stoppedChangingDelay); - expect(editorElement.querySelectorAll('.git-line-added').length).toBe(1); - expect(editorElement.querySelector('.git-line-added')).toHaveData( - 'buffer-row', - 1 - ); + waitsFor(() => editor.getMarkers().length > 0); + runs(() => { + expect(editorElement.querySelectorAll('.git-line-added').length).toBe( + 1 + ); + expect(editorElement.querySelector('.git-line-added')).toHaveData( + 'buffer-row', + 1 + ); + }); }); }); @@ -70,13 +94,16 @@ describe('GitDiff package', () => { editor.setCursorBufferPosition([5]); editor.deleteLine(); advanceClock(editor.getBuffer().stoppedChangingDelay); - expect(editorElement.querySelectorAll('.git-line-removed').length).toBe( - 1 - ); - expect(editorElement.querySelector('.git-line-removed')).toHaveData( - 'buffer-row', - 4 - ); + waitsFor(() => editor.getMarkers().length > 0); + runs(() => { + expect(editorElement.querySelectorAll('.git-line-removed').length).toBe( + 1 + ); + expect(editorElement.querySelector('.git-line-removed')).toHaveData( + 'buffer-row', + 4 + ); + }); }); }); @@ -86,12 +113,15 @@ describe('GitDiff package', () => { editor.setCursorBufferPosition([0, 0]); editor.deleteLine(); advanceClock(editor.getBuffer().stoppedChangingDelay); - expect( - editorElement.querySelectorAll('.git-previous-line-removed').length - ).toBe(1); - expect( - editorElement.querySelector('.git-previous-line-removed') - ).toHaveData('buffer-row', 0); + waitsFor(() => editor.getMarkers().length > 0); + runs(() => { + expect( + editorElement.querySelectorAll('.git-previous-line-removed').length + ).toBe(1); + expect( + editorElement.querySelector('.git-previous-line-removed') + ).toHaveData('buffer-row', 0); + }); }); }); @@ -102,14 +132,24 @@ describe('GitDiff package', () => { ); editor.insertText('a'); advanceClock(editor.getBuffer().stoppedChangingDelay); - expect(editorElement.querySelectorAll('.git-line-modified').length).toBe( - 1 + waitsFor( + () => editorElement.querySelectorAll('.git-line-modified').length > 0 ); - editor.backspace(); - advanceClock(editor.getBuffer().stoppedChangingDelay); - expect(editorElement.querySelectorAll('.git-line-modified').length).toBe( - 0 + runs(() => { + expect( + editorElement.querySelectorAll('.git-line-modified').length + ).toBe(1); + editor.backspace(); + advanceClock(editor.getBuffer().stoppedChangingDelay); + }); + waitsFor( + () => editorElement.querySelectorAll('.git-line-modified').length < 1 ); + runs(() => { + expect( + editorElement.querySelectorAll('.git-line-modified').length + ).toBe(0); + }); }); }); @@ -119,21 +159,17 @@ describe('GitDiff package', () => { path.join(projectPath, 'sample.txt'), 'Some different text.' ); - let nextTick = false; waitsForPromise(() => atom.workspace.open(path.join(projectPath, 'sample.txt')) ); runs(() => { - editorElement = atom.workspace.getActiveTextEditor().getElement(); + editor = atom.workspace.getActiveTextEditor(); + editorElement = editor.getElement(); }); - setImmediate(() => { - nextTick = true; - }); - - waitsFor(() => nextTick); + waitsFor(() => editor.getMarkers().length > 0); runs(() => { expect( @@ -152,39 +188,49 @@ describe('GitDiff package', () => { editor.deleteLine(); atom.project.setPaths([temp.mkdirSync('no-repository')]); advanceClock(editor.getBuffer().stoppedChangingDelay); + waitsFor(() => editor.getMarkers().length === 0); + runs(() => { + expect(editor.getMarkers().length).toBe(0); + }); }); }); describe('move-to-next-diff/move-to-previous-diff events', () => { it('moves the cursor to first character of the next/previous diff line', () => { editor.insertText('a'); - editor.setCursorBufferPosition([5]); - editor.deleteLine(); - advanceClock(editor.getBuffer().stoppedChangingDelay); + waitsFor(() => editor.getMarkers().length > 0); + runs(() => { + editor.setCursorBufferPosition([5]); + editor.deleteLine(); + advanceClock(editor.getBuffer().stoppedChangingDelay); - editor.setCursorBufferPosition([0]); - atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff'); - expect(editor.getCursorBufferPosition()).toEqual([4, 4]); + editor.setCursorBufferPosition([0]); + atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff'); + expect(editor.getCursorBufferPosition()).toEqual([4, 4]); - atom.commands.dispatch(editorElement, 'git-diff:move-to-previous-diff'); - expect(editor.getCursorBufferPosition()).toEqual([0, 0]); + atom.commands.dispatch(editorElement, 'git-diff:move-to-previous-diff'); + expect(editor.getCursorBufferPosition()).toEqual([0, 0]); + }); }); it('wraps around to the first/last diff in the file', () => { editor.insertText('a'); - editor.setCursorBufferPosition([5]); - editor.deleteLine(); - advanceClock(editor.getBuffer().stoppedChangingDelay); + waitsFor(() => editor.getMarkers().length > 0); + runs(() => { + editor.setCursorBufferPosition([5]); + editor.deleteLine(); + advanceClock(editor.getBuffer().stoppedChangingDelay); - editor.setCursorBufferPosition([0]); - atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff'); - expect(editor.getCursorBufferPosition()).toEqual([4, 4]); + editor.setCursorBufferPosition([0]); + atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff'); + expect(editor.getCursorBufferPosition().toArray()).toEqual([4, 4]); - atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff'); - expect(editor.getCursorBufferPosition()).toEqual([0, 0]); + atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff'); + expect(editor.getCursorBufferPosition().toArray()).toEqual([0, 0]); - atom.commands.dispatch(editorElement, 'git-diff:move-to-previous-diff'); - expect(editor.getCursorBufferPosition()).toEqual([4, 4]); + atom.commands.dispatch(editorElement, 'git-diff:move-to-previous-diff'); + expect(editor.getCursorBufferPosition().toArray()).toEqual([4, 4]); + }); }); describe('when the wrapAroundOnMoveToDiff config option is false', () => { @@ -197,19 +243,28 @@ describe('GitDiff package', () => { editor.setCursorBufferPosition([5]); editor.deleteLine(); advanceClock(editor.getBuffer().stoppedChangingDelay); + waitsFor(() => editor.getMarkers().length > 0); - editor.setCursorBufferPosition([0]); - atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff'); - expect(editor.getCursorBufferPosition()).toEqual([4, 4]); + runs(() => { + editor.setCursorBufferPosition([0]); + atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff'); + expect(editor.getCursorBufferPosition()).toEqual([4, 4]); - atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff'); - expect(editor.getCursorBufferPosition()).toEqual([4, 4]); + atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff'); + expect(editor.getCursorBufferPosition()).toEqual([4, 4]); - atom.commands.dispatch(editorElement, 'git-diff:move-to-previous-diff'); - expect(editor.getCursorBufferPosition()).toEqual([0, 0]); + atom.commands.dispatch( + editorElement, + 'git-diff:move-to-previous-diff' + ); + expect(editor.getCursorBufferPosition()).toEqual([0, 0]); - atom.commands.dispatch(editorElement, 'git-diff:move-to-previous-diff'); - expect(editor.getCursorBufferPosition()).toEqual([0, 0]); + atom.commands.dispatch( + editorElement, + 'git-diff:move-to-previous-diff' + ); + expect(editor.getCursorBufferPosition()).toEqual([0, 0]); + }); }); }); }); @@ -219,28 +274,40 @@ describe('GitDiff package', () => { atom.config.set('git-diff.showIconsInEditorGutter', true); }); - it('the gutter has a git-diff-icon class', () => - expect(editorElement.querySelector('.gutter')).toHaveClass( - 'git-diff-icon' - )); + it('the gutter has a git-diff-icon class', () => { + waitsFor(() => screenUpdates > 0); + runs(() => { + expect(editorElement.querySelector('.gutter')).toHaveClass( + 'git-diff-icon' + ); + }); + }); it('keeps the git-diff-icon class when editor.showLineNumbers is toggled', () => { - atom.config.set('editor.showLineNumbers', false); - expect(editorElement.querySelector('.gutter')).not.toHaveClass( - 'git-diff-icon' - ); + waitsFor(() => screenUpdates > 0); - atom.config.set('editor.showLineNumbers', true); - expect(editorElement.querySelector('.gutter')).toHaveClass( - 'git-diff-icon' - ); + runs(() => { + atom.config.set('editor.showLineNumbers', false); + expect(editorElement.querySelector('.gutter')).not.toHaveClass( + 'git-diff-icon' + ); + + atom.config.set('editor.showLineNumbers', true); + expect(editorElement.querySelector('.gutter')).toHaveClass( + 'git-diff-icon' + ); + }); }); it('removes the git-diff-icon class when the showIconsInEditorGutter config option set to false', () => { - atom.config.set('git-diff.showIconsInEditorGutter', false); - expect(editorElement.querySelector('.gutter')).not.toHaveClass( - 'git-diff-icon' - ); + waitsFor(() => screenUpdates > 0); + + runs(() => { + atom.config.set('git-diff.showIconsInEditorGutter', false); + expect(editorElement.querySelector('.gutter')).not.toHaveClass( + 'git-diff-icon' + ); + }); }); }); }); diff --git a/packages/git-diff/spec/git-diff-subfolder-spec.js b/packages/git-diff/spec/git-diff-subfolder-spec.js new file mode 100644 index 000000000..db1cf0c39 --- /dev/null +++ b/packages/git-diff/spec/git-diff-subfolder-spec.js @@ -0,0 +1,75 @@ +const path = require('path'); +const fs = require('fs-plus'); +const temp = require('temp').track(); + +describe('GitDiff when targeting nested repository', () => { + let editor, editorElement, projectPath, screenUpdates; + + beforeEach(() => { + screenUpdates = 0; + spyOn(window, 'requestAnimationFrame').andCallFake(fn => { + fn(); + screenUpdates++; + }); + spyOn(window, 'cancelAnimationFrame').andCallFake(i => null); + + projectPath = temp.mkdirSync('git-diff-spec-'); + + fs.copySync(path.join(__dirname, 'fixtures', 'working-dir'), projectPath); + fs.moveSync( + path.join(projectPath, 'git.git'), + path.join(projectPath, '.git') + ); + + // The nested repo doesn't need to be managed by the temp module because + // it's a part of our test environment. + const nestedPath = path.join(projectPath, 'nested-repository'); + // Initialize the repository contents. + fs.copySync(path.join(__dirname, 'fixtures', 'working-dir'), nestedPath); + fs.moveSync( + path.join(nestedPath, 'git.git'), + path.join(nestedPath, '.git') + ); + + atom.project.setPaths([projectPath]); + + jasmine.attachToDOM(atom.workspace.getElement()); + + waitsForPromise(async () => { + await atom.workspace.open(path.join(nestedPath, 'sample.js')); + await atom.packages.activatePackage('git-diff'); + }); + + runs(() => { + editor = atom.workspace.getActiveTextEditor(); + editorElement = atom.views.getView(editor); + }); + }); + + afterEach(() => { + temp.cleanup(); + }); + + describe('When git-diff targets a file in a nested git-repository', () => { + /*** + * Non-hack regression prevention for nested repositories. If we know + * that our project path contains two repositories, we can ensure that + * git-diff is targeting the correct one by creating an artificial change + * in the ancestor repository, which is percieved differently within the + * child. In this case, creating a new file will not generate markers in + * the ancestor repo, even if there are changes; but changes will be + * marked within the child repo. So all we have to do is check if + * markers exist and we know we're targeting the proper repository, + * If no markers exist, we're targeting an ancestor repo. + */ + it('uses the innermost repository', () => { + editor.insertText('a'); + waitsFor(() => screenUpdates > 0); + runs(() => { + expect( + editorElement.querySelectorAll('.git-line-modified').length + ).toBe(1); + }); + }); + }); +}); diff --git a/packages/git-diff/spec/init-spec.js b/packages/git-diff/spec/init-spec.js new file mode 100644 index 000000000..c47c30516 --- /dev/null +++ b/packages/git-diff/spec/init-spec.js @@ -0,0 +1,48 @@ +const path = require('path'); +const fs = require('fs-plus'); +const temp = require('temp').track(); + +const commands = [ + 'git-diff:toggle-diff-list', + 'git-diff:move-to-next-diff', + 'git-diff:move-to-previous-diff' +]; + +describe('git-diff', () => { + let editor, element; + + beforeEach(() => { + const projectPath = temp.mkdirSync('git-diff-spec-'); + fs.copySync(path.join(__dirname, 'fixtures', 'working-dir'), projectPath); + fs.moveSync( + path.join(projectPath, 'git.git'), + path.join(projectPath, '.git') + ); + atom.project.setPaths([projectPath]); + + jasmine.attachToDOM(atom.workspace.getElement()); + + waitsForPromise(() => atom.workspace.open('sample.js')); + + runs(() => { + editor = atom.workspace.getActiveTextEditor(); + element = atom.views.getView(editor); + }); + }); + + describe('When the module is deactivated', () => { + it('removes all registered command hooks after deactivation.', () => { + waitsForPromise(() => atom.packages.activatePackage('git-diff')); + waitsForPromise(() => atom.packages.deactivatePackage('git-diff')); + runs(() => { + // NOTE: don't use enable and disable from the Public API. + expect(atom.packages.isPackageActive('git-diff')).toBe(false); + + atom.commands + .findCommands({ target: element }) + .filter(({ name }) => commands.includes(name)) + .forEach(command => expect(commands).not.toContain(command.name)); + }); + }); + }); +}); diff --git a/packages/go-to-line/spec/go-to-line-spec.js b/packages/go-to-line/spec/go-to-line-spec.js index 37cb97684..13cb6ec01 100644 --- a/packages/go-to-line/spec/go-to-line-spec.js +++ b/packages/go-to-line/spec/go-to-line-spec.js @@ -77,7 +77,7 @@ describe('GoToLine', () => { const rowsPerPage = editor.getRowsPerPage(); const currentRow = editor.getCursorBufferPosition().row; expect(editor.getFirstVisibleScreenRow()).toBe( - currentRow - Math.ceil(rowsPerPage / 2) + Math.ceil(currentRow - rowsPerPage / 2) ); expect(editor.getLastVisibleScreenRow()).toBe( currentRow + Math.floor(rowsPerPage / 2) diff --git a/packages/language-rust-bundled/package.json b/packages/language-rust-bundled/package.json index 792b4b036..31f178dcb 100644 --- a/packages/language-rust-bundled/package.json +++ b/packages/language-rust-bundled/package.json @@ -11,7 +11,7 @@ "repository": "https://github.com/atom/atom", "license": "MIT", "dependencies": { - "tree-sitter-rust": "^0.16.0" + "tree-sitter-rust": "^0.17.0" }, "engines": { "atom": ">=1.0.0 <2.0.0" diff --git a/packages/line-ending-selector/lib/main.js b/packages/line-ending-selector/lib/main.js index 906adfcdd..f79dd9372 100644 --- a/packages/line-ending-selector/lib/main.js +++ b/packages/line-ending-selector/lib/main.js @@ -2,7 +2,7 @@ import _ from 'underscore-plus'; import { CompositeDisposable, Disposable } from 'atom'; -import SelectListView from 'atom-select-list'; +import { Selector } from './selector'; import StatusBarItem from './status-bar-item'; import helpers from './helpers'; @@ -16,53 +16,28 @@ const LFRegExp = /(\A|[^\r])\n/g; const CRLFRegExp = /\r\n/g; let disposables = null; -let modalPanel = null; -let lineEndingListView = null; export function activate() { disposables = new CompositeDisposable(); + let selectorDisposable; + let selector; disposables.add( atom.commands.add('atom-text-editor', { - 'line-ending-selector:show': event => { - if (!modalPanel) { - lineEndingListView = new SelectListView({ - items: [ - { name: 'LF', value: '\n' }, - { name: 'CRLF', value: '\r\n' } - ], - filterKeyForItem: lineEnding => lineEnding.name, - didConfirmSelection: lineEnding => { - setLineEnding( - atom.workspace.getActiveTextEditor(), - lineEnding.value - ); - modalPanel.hide(); - }, - didCancelSelection: () => { - modalPanel.hide(); - }, - elementForItem: lineEnding => { - const element = document.createElement('li'); - element.textContent = lineEnding.name; - return element; - } - }); - modalPanel = atom.workspace.addModalPanel({ - item: lineEndingListView - }); - disposables.add( - new Disposable(() => { - lineEndingListView.destroy(); - modalPanel.destroy(); - modalPanel = null; - }) - ); + 'line-ending-selector:show': () => { + // Initiating Selector object - called only once when `line-ending-selector:show` is called + if (!selectorDisposable) { + // make a Selector object + selector = new Selector([ + { name: 'LF', value: '\n' }, + { name: 'CRLF', value: '\r\n' } + ]); + // Add disposable for selector + selectorDisposable = new Disposable(() => selector.dispose()); + disposables.add(selectorDisposable); } - lineEndingListView.reset(); - modalPanel.show(); - lineEndingListView.focus(); + selector.show(); }, 'line-ending-selector:convert-to-LF': event => { @@ -187,7 +162,7 @@ function getLineEndings(buffer) { } } -function setLineEnding(item, lineEnding) { +export function setLineEnding(item, lineEnding) { if (item && item.getBuffer) { let buffer = item.getBuffer(); buffer.setPreferredLineEnding(lineEnding); diff --git a/packages/line-ending-selector/lib/selector.js b/packages/line-ending-selector/lib/selector.js new file mode 100644 index 000000000..e5887976e --- /dev/null +++ b/packages/line-ending-selector/lib/selector.js @@ -0,0 +1,77 @@ +'use babel'; + +import SelectListView from 'atom-select-list'; + +import { TextEditor } from 'atom'; +import { setLineEnding } from './main'; + +export class Selector { + lineEndingListView; + modalPanel; + previousActivePane; + + // Make a selector object (should be called once) + constructor(selectorItems) { + // Defining a SelectListView with methods - https://github.com/atom/atom-select-list + this.lineEndingListView = new SelectListView({ + // an array containing the objects you want to show in the select list + items: selectorItems, + + // called whenever an item needs to be displayed. + elementForItem: lineEnding => { + const element = document.createElement('li'); + element.textContent = lineEnding.name; + return element; + }, + + // called to retrieve a string property on each item and that will be used to filter them. + filterKeyForItem: lineEnding => { + return lineEnding.name; + }, + + // called when the user clicks or presses Enter on an item. // use `=>` for `this` + didConfirmSelection: lineEnding => { + const editor = atom.workspace.getActiveTextEditor(); + if (editor instanceof TextEditor) { + setLineEnding(editor, lineEnding.value); + } + this.hide(); + }, + + // called when the user presses Esc or the list loses focus. // use `=>` for `this` + didCancelSelection: () => { + this.hide(); + } + }); + + // Adding SelectListView to panel + this.modalPanel = atom.workspace.addModalPanel({ + item: this.lineEndingListView + }); + } + + // Show a selector object + show() { + this.previousActivePane = atom.workspace.getActivePane(); + + // Show selector + this.lineEndingListView.reset(); + this.modalPanel.show(); + this.lineEndingListView.focus(); + } + + // Hide a selector + hide() { + // hide modal panel + this.modalPanel.hide(); + // focus on the previous active pane + this.previousActivePane.activate(); + } + + // Dispose selector + dispose() { + this.lineEndingListView.destroy(); + this.modalPanel.destroy(); + this.modalPanel = null; + } +} diff --git a/packages/one-dark-syntax/index.less b/packages/one-dark-syntax/index.less index 3f21987be..22ff40785 100644 --- a/packages/one-dark-syntax/index.less +++ b/packages/one-dark-syntax/index.less @@ -5,20 +5,23 @@ @import "styles/editor.less"; -@import "styles/syntax/_base.less"; -@import "styles/syntax/c.less"; -@import "styles/syntax/cpp.less"; -@import "styles/syntax/cs.less"; +@import "styles/syntax-legacy/_base.less"; +// @import "styles/syntax-legacy/c.less"; +// @import "styles/syntax-legacy/cpp.less"; +@import "styles/syntax-legacy/cs.less"; +@import "styles/syntax-legacy/css.less"; +@import "styles/syntax-legacy/elixir.less"; +@import "styles/syntax-legacy/gfm.less"; +// @import "styles/syntax-legacy/go.less"; +@import "styles/syntax-legacy/ini.less"; +@import "styles/syntax-legacy/java.less"; +// @import "styles/syntax-legacy/javascript.less"; +@import "styles/syntax-legacy/typescript.less"; +@import "styles/syntax-legacy/json.less"; +@import "styles/syntax-legacy/ng.less"; +// @import "styles/syntax-legacy/ruby.less"; +@import "styles/syntax-legacy/php.less"; +// @import "styles/syntax-legacy/python.less"; + +@import "styles/syntax/base.less"; @import "styles/syntax/css.less"; -@import "styles/syntax/elixir.less"; -@import "styles/syntax/gfm.less"; -@import "styles/syntax/go.less"; -@import "styles/syntax/ini.less"; -@import "styles/syntax/java.less"; -@import "styles/syntax/javascript.less"; -@import "styles/syntax/typescript.less"; -@import "styles/syntax/json.less"; -@import "styles/syntax/ng.less"; -@import "styles/syntax/ruby.less"; -@import "styles/syntax/php.less"; -@import "styles/syntax/python.less"; diff --git a/packages/one-dark-syntax/styles/syntax/_base.less b/packages/one-dark-syntax/styles/syntax-legacy/_base.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/_base.less rename to packages/one-dark-syntax/styles/syntax-legacy/_base.less diff --git a/packages/one-dark-syntax/styles/syntax/c.less b/packages/one-dark-syntax/styles/syntax-legacy/c.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/c.less rename to packages/one-dark-syntax/styles/syntax-legacy/c.less diff --git a/packages/one-dark-syntax/styles/syntax/cpp.less b/packages/one-dark-syntax/styles/syntax-legacy/cpp.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/cpp.less rename to packages/one-dark-syntax/styles/syntax-legacy/cpp.less diff --git a/packages/one-dark-syntax/styles/syntax/cs.less b/packages/one-dark-syntax/styles/syntax-legacy/cs.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/cs.less rename to packages/one-dark-syntax/styles/syntax-legacy/cs.less diff --git a/packages/one-dark-syntax/styles/syntax-legacy/css.less b/packages/one-dark-syntax/styles/syntax-legacy/css.less new file mode 100644 index 000000000..3a63ff224 --- /dev/null +++ b/packages/one-dark-syntax/styles/syntax-legacy/css.less @@ -0,0 +1,10 @@ +.syntax--source.syntax--css { + // highlight properties/values if they are supported + .syntax--property-name, + .syntax--property-value { + color: @mono-2; + &.syntax--support { + color: @mono-1; + } + } +} diff --git a/packages/one-dark-syntax/styles/syntax/elixir.less b/packages/one-dark-syntax/styles/syntax-legacy/elixir.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/elixir.less rename to packages/one-dark-syntax/styles/syntax-legacy/elixir.less diff --git a/packages/one-dark-syntax/styles/syntax/gfm.less b/packages/one-dark-syntax/styles/syntax-legacy/gfm.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/gfm.less rename to packages/one-dark-syntax/styles/syntax-legacy/gfm.less diff --git a/packages/one-dark-syntax/styles/syntax/go.less b/packages/one-dark-syntax/styles/syntax-legacy/go.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/go.less rename to packages/one-dark-syntax/styles/syntax-legacy/go.less diff --git a/packages/one-dark-syntax/styles/syntax/ini.less b/packages/one-dark-syntax/styles/syntax-legacy/ini.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/ini.less rename to packages/one-dark-syntax/styles/syntax-legacy/ini.less diff --git a/packages/one-dark-syntax/styles/syntax/java.less b/packages/one-dark-syntax/styles/syntax-legacy/java.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/java.less rename to packages/one-dark-syntax/styles/syntax-legacy/java.less diff --git a/packages/one-dark-syntax/styles/syntax/javascript.less b/packages/one-dark-syntax/styles/syntax-legacy/javascript.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/javascript.less rename to packages/one-dark-syntax/styles/syntax-legacy/javascript.less diff --git a/packages/one-dark-syntax/styles/syntax/json.less b/packages/one-dark-syntax/styles/syntax-legacy/json.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/json.less rename to packages/one-dark-syntax/styles/syntax-legacy/json.less diff --git a/packages/one-dark-syntax/styles/syntax/ng.less b/packages/one-dark-syntax/styles/syntax-legacy/ng.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/ng.less rename to packages/one-dark-syntax/styles/syntax-legacy/ng.less diff --git a/packages/one-dark-syntax/styles/syntax/php.less b/packages/one-dark-syntax/styles/syntax-legacy/php.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/php.less rename to packages/one-dark-syntax/styles/syntax-legacy/php.less diff --git a/packages/one-dark-syntax/styles/syntax/python.less b/packages/one-dark-syntax/styles/syntax-legacy/python.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/python.less rename to packages/one-dark-syntax/styles/syntax-legacy/python.less diff --git a/packages/one-dark-syntax/styles/syntax/ruby.less b/packages/one-dark-syntax/styles/syntax-legacy/ruby.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/ruby.less rename to packages/one-dark-syntax/styles/syntax-legacy/ruby.less diff --git a/packages/one-dark-syntax/styles/syntax/typescript.less b/packages/one-dark-syntax/styles/syntax-legacy/typescript.less similarity index 100% rename from packages/one-dark-syntax/styles/syntax/typescript.less rename to packages/one-dark-syntax/styles/syntax-legacy/typescript.less diff --git a/packages/one-dark-syntax/styles/syntax/base.less b/packages/one-dark-syntax/styles/syntax/base.less new file mode 100644 index 000000000..829bd9abd --- /dev/null +++ b/packages/one-dark-syntax/styles/syntax/base.less @@ -0,0 +1,312 @@ +/* + This defines styling rules for syntax classes. + + See the naming conventions for a list of syntax classes: + https://flight-manual.atom.io/hacking-atom/sections/syntax-naming-conventions + + When styling rules conflict: + - The last rule overrides previous rules. + - The rule with most classes and pseudo-classes overrides the last rule. +*/ + +// if for and del let = && +.syntax--keyword { + color: @hue-3; + + // int char float + &.syntax--type { + color: @hue-1; + } + + // super + &.syntax--function { + color: @hue-5; + } + + // this self + &.syntax--variable { + color: @hue-5; + } +} + +// identifier +.syntax--entity { + color: @mono-1; + + // function(parameter) + &.syntax--parameter { + color: @mono-1; + } + + // self cls iota + &.syntax--support { + color: @hue-5; + } + + // @entity.decorator + &.syntax--decorator:last-child { + color: @hue-2; + } + + // label: + &.syntax--label { + text-decoration: underline; + } + + // function method + &.syntax--function { + color: @hue-2; + } + + // add + &.syntax--operator { + color: @hue-2; + + // %>% <=> + &.syntax--symbolic { + color: @mono-1; + } + } + + // String Class int rune list + &.syntax--type { + color: @hue-1; + } + + // div span + &.syntax--tag { + color: @hue-5; + } + + // href src alt + &.syntax--attribute { + color: @hue-6; + } +} + +// () [] {} => @ +.syntax--punctuation { + color: @mono-1; + + &.syntax--accessor { + color: @mono-1; + + // . -> :: + &.syntax--member, + &.syntax--scope { + color: @hue-3; + } + } + + // { } ~~~ + &.syntax--embedded { + color: @hue-3; + } +} + +// "string" +.syntax--string { + color: @hue-4; + + // :immutable + &.syntax--immutable { + color: @hue-4; + } + + // {placeholder} %().2f + &.syntax--part { + color: @hue-1; + } + + // ${ } + &.syntax--interpolation { + color: @hue-3; + } + + // /^reg[ex]?p/ + &.syntax--regexp { + color: @hue-4; + + // ^ $ \b ? + i + &.syntax--language { + color: @hue-3; + } + + // \1 + &.syntax--variable { + color: @hue-2; + } + + // ( ) [^ ] (?= ) | + &.syntax--punctuation { + color: @hue-3; + } + } +} + +// literal 4 1.3 true nil +.syntax--constant { + color: @hue-6; + + // < 'a' + &.syntax--character { + color: @hue-4; + + // \" \' \g \. + &.syntax--escape { + color: @hue-4; + } + + // \u2661 \n \t \W . + &.syntax--code { + color: @hue-1; + } + } +} + +// text +.syntax--text { + color: @mono-1; +} + +// __formatted__ +.syntax--markup { + + // # Heading + &.syntax--heading { + color: @hue-5; + } + + // 1. * - + &.syntax--list.syntax--punctuation { + color: @hue-5; + } + + // > quote + &.syntax--quote { + color: @mono-3; + font-style: italic; + } + + // **bold** + &.syntax--bold { + color: @hue-6; + font-weight: bold; + } + + // *italic* + &.syntax--italic { + color: @hue-3; + font-style: italic; + } + + // __underline__ + &.syntax--underline { + color: @hue-1; + text-decoration: underline; + } + + // ~~strike~~ + &.syntax--strike { + color: @hue-5; + } + + // `raw` + &.syntax--raw { + color: @hue-4; + } + + // url.com (path) + &.syntax--link { + color: @hue-1; + } + + // [alt] ![alt] + &.syntax--alt { + color: @hue-2; + } + + // {++ inserted ++} + &.syntax--inserted { + color: @hue-4; + + .syntax--punctuation { + color: @hue-4; + } + } + + // {== highlighted ==} + &.syntax--highlighted { + color: @hue-4; + + .syntax--punctuation { + color: @hue-4; + } + } + + // {-- deleted --} + &.syntax--deleted { + color: @hue-5; + + .syntax--punctuation { + color: @hue-5; + } + } + + // {~~ from~>to ~~} + &.syntax--changed { + color: @hue-3; + + .syntax--punctuation { + color: @hue-3; + } + } + + // {>> commented <<} + &.syntax--commented { + color: @mono-3; + + .syntax--punctuation { + color: @mono-3; + } + } +} + +// /* comment */ +.syntax--comment { + color: @mono-3; + font-style: italic; + + // @param TODO NOTE + &.syntax--caption { + color: lighten(@mono-3, 6); + font-weight: bold; + } + + // variable function type + &.syntax--term { + color: lighten(@mono-3, 9); + } + + // { } / . + &.syntax--punctuation { + color: @mono-3; + font-weight: normal; + } +} + +// 0invalid +.syntax--invalid:not(.syntax--punctuation) { + + // §illegal + &.syntax--illegal { + color: @syntax-illegal-fg !important; + background-color: @syntax-illegal-bg !important; + } + + // obsolete() + &.syntax--deprecated { + color: @syntax-deprecated-fg !important; + background-color: @syntax-deprecated-bg !important; + } +} diff --git a/packages/one-dark-syntax/styles/syntax/css.less b/packages/one-dark-syntax/styles/syntax/css.less index 3a63ff224..d7d2bed04 100644 --- a/packages/one-dark-syntax/styles/syntax/css.less +++ b/packages/one-dark-syntax/styles/syntax/css.less @@ -1,10 +1,103 @@ .syntax--source.syntax--css { - // highlight properties/values if they are supported - .syntax--property-name, - .syntax--property-value { + + .syntax--entity { + + // function() + &.syntax--function { + color: @mono-2; + + // url rgb + &.syntax--support { + color: @hue-1; + } + } + + // .class :pseudo-class attribute + &.syntax--selector { + color: @hue-6; + + // div span + &.syntax--tag { + color: @hue-5; + } + + // #id + &.syntax--id { + color: @hue-2; + } + } + + // property: constant + &.syntax--property { + color: @mono-2; + + // height position border + &.syntax--support { + color: @mono-1; + } + } + + // --variable + &.syntax--variable { + color: @hue-5; + } + } + + // property: constant + .syntax--constant { color: @mono-2; + + // flex solid bold &.syntax--support { color: @mono-1; } + + // 3px 4em + &.syntax--numeric { + color: @hue-6; + } + + // screen print + &.syntax--media { + color: @hue-6; + } + + // #b294bb blue red + &.syntax--color { + color: @hue-6; + } + + // from to + &.syntax--offset { + color: @mono-1; + } + + // [attribute=attribute-value] + &.syntax--attribute-value { + color: @hue-4; + } + } + + .syntax--punctuation { + + // . : :: + &.syntax--selector { + color: @hue-6; + + // * + &.syntax--wildcard { + color: @hue-5; + } + + // # + &.syntax--id { + color: @hue-2; + } + + // [] + &.syntax--attribute { + color: @mono-1; + } + } } } diff --git a/packages/one-dark-ui/lib/main.js b/packages/one-dark-ui/lib/main.js index 664010616..3b3850d97 100644 --- a/packages/one-dark-ui/lib/main.js +++ b/packages/one-dark-ui/lib/main.js @@ -8,12 +8,6 @@ module.exports = { atom.config.observe(`${themeName}.tabCloseButton`, setTabCloseButton); atom.config.observe(`${themeName}.hideDockButtons`, setHideDockButtons); atom.config.observe(`${themeName}.stickyHeaders`, setStickyHeaders); - - // DEPRECATED: This can be removed at some point (added in Atom 1.17/1.18ish) - // It removes `layoutMode` - if (atom.config.get(`${themeName}.layoutMode`)) { - atom.config.unset(`${themeName}.layoutMode`); - } }, deactivate() { diff --git a/packages/one-light-syntax/index.less b/packages/one-light-syntax/index.less index 3f21987be..22ff40785 100644 --- a/packages/one-light-syntax/index.less +++ b/packages/one-light-syntax/index.less @@ -5,20 +5,23 @@ @import "styles/editor.less"; -@import "styles/syntax/_base.less"; -@import "styles/syntax/c.less"; -@import "styles/syntax/cpp.less"; -@import "styles/syntax/cs.less"; +@import "styles/syntax-legacy/_base.less"; +// @import "styles/syntax-legacy/c.less"; +// @import "styles/syntax-legacy/cpp.less"; +@import "styles/syntax-legacy/cs.less"; +@import "styles/syntax-legacy/css.less"; +@import "styles/syntax-legacy/elixir.less"; +@import "styles/syntax-legacy/gfm.less"; +// @import "styles/syntax-legacy/go.less"; +@import "styles/syntax-legacy/ini.less"; +@import "styles/syntax-legacy/java.less"; +// @import "styles/syntax-legacy/javascript.less"; +@import "styles/syntax-legacy/typescript.less"; +@import "styles/syntax-legacy/json.less"; +@import "styles/syntax-legacy/ng.less"; +// @import "styles/syntax-legacy/ruby.less"; +@import "styles/syntax-legacy/php.less"; +// @import "styles/syntax-legacy/python.less"; + +@import "styles/syntax/base.less"; @import "styles/syntax/css.less"; -@import "styles/syntax/elixir.less"; -@import "styles/syntax/gfm.less"; -@import "styles/syntax/go.less"; -@import "styles/syntax/ini.less"; -@import "styles/syntax/java.less"; -@import "styles/syntax/javascript.less"; -@import "styles/syntax/typescript.less"; -@import "styles/syntax/json.less"; -@import "styles/syntax/ng.less"; -@import "styles/syntax/ruby.less"; -@import "styles/syntax/php.less"; -@import "styles/syntax/python.less"; diff --git a/packages/one-light-syntax/styles/colors.less b/packages/one-light-syntax/styles/colors.less index ca513b9dc..6ce9c13f3 100644 --- a/packages/one-light-syntax/styles/colors.less +++ b/packages/one-light-syntax/styles/colors.less @@ -19,8 +19,8 @@ @hue-5: hsl( 5, 74%, 59%); // <-red 1 @hue-5-2: hsl(344, 84%, 43%); // <-red 2 -@hue-6: hsl(41, 99%, 30%); // <-orange 1 -@hue-6-2: hsl(41, 99%, 38%); // <-orange 2 +@hue-6: hsl(35, 99%, 36%); // <-orange 1 +@hue-6-2: hsl(35, 99%, 40%); // <-orange 2 // Base colors ----------------------------------- diff --git a/packages/one-light-syntax/styles/syntax/_base.less b/packages/one-light-syntax/styles/syntax-legacy/_base.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/_base.less rename to packages/one-light-syntax/styles/syntax-legacy/_base.less diff --git a/packages/one-light-syntax/styles/syntax/c.less b/packages/one-light-syntax/styles/syntax-legacy/c.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/c.less rename to packages/one-light-syntax/styles/syntax-legacy/c.less diff --git a/packages/one-light-syntax/styles/syntax/cpp.less b/packages/one-light-syntax/styles/syntax-legacy/cpp.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/cpp.less rename to packages/one-light-syntax/styles/syntax-legacy/cpp.less diff --git a/packages/one-light-syntax/styles/syntax/cs.less b/packages/one-light-syntax/styles/syntax-legacy/cs.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/cs.less rename to packages/one-light-syntax/styles/syntax-legacy/cs.less diff --git a/packages/one-light-syntax/styles/syntax-legacy/css.less b/packages/one-light-syntax/styles/syntax-legacy/css.less new file mode 100644 index 000000000..75eeb56ae --- /dev/null +++ b/packages/one-light-syntax/styles/syntax-legacy/css.less @@ -0,0 +1,12 @@ +.syntax--source.syntax--css { + + // highlight properties/values if they are supported + .syntax--property-name, + .syntax--property-value { + color: @mono-2; + &.syntax--support { + color: @mono-1; + } + } + +} diff --git a/packages/one-light-syntax/styles/syntax/elixir.less b/packages/one-light-syntax/styles/syntax-legacy/elixir.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/elixir.less rename to packages/one-light-syntax/styles/syntax-legacy/elixir.less diff --git a/packages/one-light-syntax/styles/syntax/gfm.less b/packages/one-light-syntax/styles/syntax-legacy/gfm.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/gfm.less rename to packages/one-light-syntax/styles/syntax-legacy/gfm.less diff --git a/packages/one-light-syntax/styles/syntax/go.less b/packages/one-light-syntax/styles/syntax-legacy/go.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/go.less rename to packages/one-light-syntax/styles/syntax-legacy/go.less diff --git a/packages/one-light-syntax/styles/syntax/ini.less b/packages/one-light-syntax/styles/syntax-legacy/ini.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/ini.less rename to packages/one-light-syntax/styles/syntax-legacy/ini.less diff --git a/packages/one-light-syntax/styles/syntax/java.less b/packages/one-light-syntax/styles/syntax-legacy/java.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/java.less rename to packages/one-light-syntax/styles/syntax-legacy/java.less diff --git a/packages/one-light-syntax/styles/syntax/javascript.less b/packages/one-light-syntax/styles/syntax-legacy/javascript.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/javascript.less rename to packages/one-light-syntax/styles/syntax-legacy/javascript.less diff --git a/packages/one-light-syntax/styles/syntax/json.less b/packages/one-light-syntax/styles/syntax-legacy/json.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/json.less rename to packages/one-light-syntax/styles/syntax-legacy/json.less diff --git a/packages/one-light-syntax/styles/syntax/ng.less b/packages/one-light-syntax/styles/syntax-legacy/ng.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/ng.less rename to packages/one-light-syntax/styles/syntax-legacy/ng.less diff --git a/packages/one-light-syntax/styles/syntax/php.less b/packages/one-light-syntax/styles/syntax-legacy/php.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/php.less rename to packages/one-light-syntax/styles/syntax-legacy/php.less diff --git a/packages/one-light-syntax/styles/syntax/python.less b/packages/one-light-syntax/styles/syntax-legacy/python.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/python.less rename to packages/one-light-syntax/styles/syntax-legacy/python.less diff --git a/packages/one-light-syntax/styles/syntax/ruby.less b/packages/one-light-syntax/styles/syntax-legacy/ruby.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/ruby.less rename to packages/one-light-syntax/styles/syntax-legacy/ruby.less diff --git a/packages/one-light-syntax/styles/syntax/typescript.less b/packages/one-light-syntax/styles/syntax-legacy/typescript.less similarity index 100% rename from packages/one-light-syntax/styles/syntax/typescript.less rename to packages/one-light-syntax/styles/syntax-legacy/typescript.less diff --git a/packages/one-light-syntax/styles/syntax/base.less b/packages/one-light-syntax/styles/syntax/base.less new file mode 100644 index 000000000..5c13a2515 --- /dev/null +++ b/packages/one-light-syntax/styles/syntax/base.less @@ -0,0 +1,312 @@ +/* + This defines styling rules for syntax classes. + + See the naming conventions for a list of syntax classes: + https://flight-manual.atom.io/hacking-atom/sections/syntax-naming-conventions + + When styling rules conflict: + - The last rule overrides previous rules. + - The rule with most classes and pseudo-classes overrides the last rule. +*/ + +// if for return global let +.syntax--keyword { + color: @hue-3; + + // int char float + &.syntax--type { + color: @hue-1; + } + + // and or new del + &.syntax--operator { + color: @hue-3; + } + + // super + &.syntax--function { + color: @hue-5; + } + + // this self + &.syntax--variable { + color: @hue-5; + } + + // = + && | << ? + &.syntax--symbolic { + color: @mono-1; + } +} + +// identifier +.syntax--entity { + color: @mono-1; + + // function(parameter) + &.syntax--parameter { + color: @mono-1; + } + + // self cls iota + &.syntax--support { + color: @hue-5; + } + + // @entity.decorator + &.syntax--decorator:last-child { + color: @hue-2; + } + + // label: + &.syntax--label { + text-decoration: underline; + } + + // function method + &.syntax--function { + color: @hue-2; + } + + // add + &.syntax--operator { + color: @hue-2; + + // %>% <=> + &.syntax--symbolic { + color: @mono-1; + } + } + + // String Class int rune list + &.syntax--type { + color: @hue-1; + } + + // div span + &.syntax--tag { + color: @hue-5; + } + + // href src alt + &.syntax--attribute { + color: @hue-6; + } +} + +// () [] {} => @ +.syntax--punctuation { + color: @mono-1; + + // . -> :: [] + &.syntax--accessor { + color: @mono-1; + } +} + +// "string" +.syntax--string { + color: @hue-4; + + // :immutable + &.syntax--immutable { + color: @hue-4; + } + + // {placeholder} %().2f + &.syntax--part { + color: @hue-1; + } + + // ${ } + &.syntax--interpolation { + color: @mono-1; + } + + // /^reg[ex]?p/ + &.syntax--regexp { + color: @hue-4; + + // ^ $ \b ? + i + &.syntax--language { + color: @hue-3; + } + + // \1 + &.syntax--variable { + color: @hue-2; + } + + // ( ) [^ ] (?= ) | + &.syntax--punctuation { + color: @hue-3; + } + } +} + +// literal 4 1.3 true nil +.syntax--constant { + color: @hue-6; + + // < 'a' + &.syntax--character { + color: @hue-4; + + // \" \' \g \. + &.syntax--escape { + color: @hue-4; + } + + // \u2661 \n \t \W . + &.syntax--code { + color: @hue-1; + } + } +} + +// text +.syntax--text { + color: @mono-1; +} + +// __formatted__ +.syntax--markup { + + // # Heading + &.syntax--heading { + color: @hue-5; + } + + // 1. * - + &.syntax--list.syntax--punctuation { + color: @hue-5; + } + + // > quote + &.syntax--quote { + color: @mono-3; + font-style: italic; + } + + // **bold** + &.syntax--bold { + color: @hue-6; + font-weight: bold; + } + + // *italic* + &.syntax--italic { + color: @hue-3; + font-style: italic; + } + + // __underline__ + &.syntax--underline { + color: @hue-1; + text-decoration: underline; + } + + // ~~strike~~ + &.syntax--strike { + color: @hue-5; + } + + // `raw` + &.syntax--raw { + color: @hue-4; + } + + // url.com (path) + &.syntax--link { + color: @hue-1; + } + + // [alt] ![alt] + &.syntax--alt { + color: @hue-2; + } + + // {++ inserted ++} + &.syntax--inserted { + color: @hue-4; + + .syntax--punctuation { + color: @hue-4; + } + } + + // {== highlighted ==} + &.syntax--highlighted { + color: @hue-4; + + .syntax--punctuation { + color: @hue-4; + } + } + + // {-- deleted --} + &.syntax--deleted { + color: @hue-5; + + .syntax--punctuation { + color: @hue-5; + } + } + + // {~~ from~>to ~~} + &.syntax--changed { + color: @hue-3; + + .syntax--punctuation { + color: @hue-3; + } + } + + // {>> commented <<} + &.syntax--commented { + color: @mono-3; + + .syntax--punctuation { + color: @mono-3; + } + } +} + +// /* comment */ +.syntax--comment { + color: @mono-3; + font-style: italic; + + // @param TODO NOTE + &.syntax--caption { + color: lighten(@mono-3, 6); + font-weight: bold; + } + + // variable function type + &.syntax--term { + color: lighten(@mono-3, 9); + } + + // { } / . + &.syntax--punctuation { + color: @mono-3; + font-weight: normal; + } +} + +// 0invalid +.syntax--invalid:not(.syntax--punctuation) { + + // §illegal + &.syntax--illegal { + color: @syntax-illegal-fg !important; + background-color: @syntax-illegal-bg !important; + } + + // obsolete() + &.syntax--deprecated { + color: @syntax-deprecated-fg !important; + background-color: @syntax-deprecated-bg !important; + } +} diff --git a/packages/one-light-syntax/styles/syntax/css.less b/packages/one-light-syntax/styles/syntax/css.less index 75eeb56ae..d7d2bed04 100644 --- a/packages/one-light-syntax/styles/syntax/css.less +++ b/packages/one-light-syntax/styles/syntax/css.less @@ -1,12 +1,103 @@ .syntax--source.syntax--css { - // highlight properties/values if they are supported - .syntax--property-name, - .syntax--property-value { - color: @mono-2; - &.syntax--support { - color: @mono-1; + .syntax--entity { + + // function() + &.syntax--function { + color: @mono-2; + + // url rgb + &.syntax--support { + color: @hue-1; + } + } + + // .class :pseudo-class attribute + &.syntax--selector { + color: @hue-6; + + // div span + &.syntax--tag { + color: @hue-5; + } + + // #id + &.syntax--id { + color: @hue-2; + } + } + + // property: constant + &.syntax--property { + color: @mono-2; + + // height position border + &.syntax--support { + color: @mono-1; + } + } + + // --variable + &.syntax--variable { + color: @hue-5; } } + // property: constant + .syntax--constant { + color: @mono-2; + + // flex solid bold + &.syntax--support { + color: @mono-1; + } + + // 3px 4em + &.syntax--numeric { + color: @hue-6; + } + + // screen print + &.syntax--media { + color: @hue-6; + } + + // #b294bb blue red + &.syntax--color { + color: @hue-6; + } + + // from to + &.syntax--offset { + color: @mono-1; + } + + // [attribute=attribute-value] + &.syntax--attribute-value { + color: @hue-4; + } + } + + .syntax--punctuation { + + // . : :: + &.syntax--selector { + color: @hue-6; + + // * + &.syntax--wildcard { + color: @hue-5; + } + + // # + &.syntax--id { + color: @hue-2; + } + + // [] + &.syntax--attribute { + color: @mono-1; + } + } + } } diff --git a/packages/one-light-ui/lib/main.js b/packages/one-light-ui/lib/main.js index f8a6a6d49..68f545745 100644 --- a/packages/one-light-ui/lib/main.js +++ b/packages/one-light-ui/lib/main.js @@ -8,12 +8,6 @@ module.exports = { atom.config.observe(`${themeName}.tabCloseButton`, setTabCloseButton); atom.config.observe(`${themeName}.hideDockButtons`, setHideDockButtons); atom.config.observe(`${themeName}.stickyHeaders`, setStickyHeaders); - - // DEPRECATED: This can be removed at some point (added in Atom 1.17/1.18ish) - // It removes `layoutMode` - if (atom.config.get(`${themeName}.layoutMode`)) { - atom.config.unset(`${themeName}.layoutMode`); - } }, deactivate() { diff --git a/packages/solarized-dark-syntax/index.less b/packages/solarized-dark-syntax/index.less index 3c3a0755a..66afd1ccf 100644 --- a/packages/solarized-dark-syntax/index.less +++ b/packages/solarized-dark-syntax/index.less @@ -6,17 +6,22 @@ @import "styles/editor.less"; // Languages -@import "styles/syntax/_base.less"; -@import "styles/syntax/c.less"; -@import "styles/syntax/coffee.less"; +@import "styles/syntax-legacy/_base.less"; +// @import "styles/syntax-legacy/c.less"; +@import "styles/syntax-legacy/coffee.less"; +@import "styles/syntax-legacy/css.less"; +// @import "styles/syntax-legacy/go.less"; +@import "styles/syntax-legacy/java.less"; +// @import "styles/syntax-legacy/javascript.less"; +@import "styles/syntax-legacy/markdown.less"; +@import "styles/syntax-legacy/markup.less"; +@import "styles/syntax-legacy/php.less"; +// @import "styles/syntax-legacy/python.less"; +// @import "styles/syntax-legacy/ruby.less"; +@import "styles/syntax-legacy/scala.less"; +@import "styles/syntax-legacy/typescript.less"; + +@import "styles/syntax/base.less"; @import "styles/syntax/css.less"; -@import "styles/syntax/go.less"; -@import "styles/syntax/java.less"; -@import "styles/syntax/javascript.less"; -@import "styles/syntax/markdown.less"; -@import "styles/syntax/markup.less"; -@import "styles/syntax/php.less"; -@import "styles/syntax/python.less"; -@import "styles/syntax/ruby.less"; -@import "styles/syntax/scala.less"; -@import "styles/syntax/typescript.less"; +@import "styles/syntax/html.less"; +@import "styles/syntax/js.less"; diff --git a/packages/solarized-dark-syntax/styles/syntax/_base.less b/packages/solarized-dark-syntax/styles/syntax-legacy/_base.less similarity index 100% rename from packages/solarized-dark-syntax/styles/syntax/_base.less rename to packages/solarized-dark-syntax/styles/syntax-legacy/_base.less diff --git a/packages/solarized-dark-syntax/styles/syntax/c.less b/packages/solarized-dark-syntax/styles/syntax-legacy/c.less similarity index 100% rename from packages/solarized-dark-syntax/styles/syntax/c.less rename to packages/solarized-dark-syntax/styles/syntax-legacy/c.less diff --git a/packages/solarized-dark-syntax/styles/syntax/coffee.less b/packages/solarized-dark-syntax/styles/syntax-legacy/coffee.less similarity index 100% rename from packages/solarized-dark-syntax/styles/syntax/coffee.less rename to packages/solarized-dark-syntax/styles/syntax-legacy/coffee.less diff --git a/packages/solarized-dark-syntax/styles/syntax-legacy/css.less b/packages/solarized-dark-syntax/styles/syntax-legacy/css.less new file mode 100644 index 000000000..8bfaf8c34 --- /dev/null +++ b/packages/solarized-dark-syntax/styles/syntax-legacy/css.less @@ -0,0 +1,63 @@ +.syntax--source.syntax--css { + + .syntax--punctuation { + &.syntax--separator, + &.syntax--terminator { + color: @syntax-text-color; + } + &.syntax--property-list.syntax--begin, + &.syntax--property-list.syntax--end { + color: @red; + } + &.syntax--section.syntax--function { + color: @cyan; + } + } + + .syntax--entity.syntax--name { + color: @green; + } + .syntax--attribute-name.syntax--class, + .syntax--id { + color: @blue; + } + .syntax--pseudo-element, + .syntax--pseudo-class { + color: @orange; + } + + .syntax--property-value { + color: @cyan; + } + .syntax--constant.syntax--numeric { + color: @cyan; + .syntax--unit { + color: @cyan; + } + } + .syntax--rgb-value { + color: @cyan; + } + .syntax--support.syntax--constant { + color: @cyan; + &.syntax--media { + color: @red; + } + } + + .syntax--keyword.syntax--important { + color: @red; + } + +} + + +// Less/Sass should have their own files, +// but for just a single override, here should be fine too + +.syntax--source.syntax--less, +.syntax--source.syntax--scss { + .syntax--keyword.syntax--unit { + color: @cyan; + } +} diff --git a/packages/solarized-dark-syntax/styles/syntax/go.less b/packages/solarized-dark-syntax/styles/syntax-legacy/go.less similarity index 100% rename from packages/solarized-dark-syntax/styles/syntax/go.less rename to packages/solarized-dark-syntax/styles/syntax-legacy/go.less diff --git a/packages/solarized-dark-syntax/styles/syntax/java.less b/packages/solarized-dark-syntax/styles/syntax-legacy/java.less similarity index 100% rename from packages/solarized-dark-syntax/styles/syntax/java.less rename to packages/solarized-dark-syntax/styles/syntax-legacy/java.less diff --git a/packages/solarized-dark-syntax/styles/syntax/javascript.less b/packages/solarized-dark-syntax/styles/syntax-legacy/javascript.less similarity index 93% rename from packages/solarized-dark-syntax/styles/syntax/javascript.less rename to packages/solarized-dark-syntax/styles/syntax-legacy/javascript.less index ebd1e7db8..a3a36dec1 100644 --- a/packages/solarized-dark-syntax/styles/syntax/javascript.less +++ b/packages/solarized-dark-syntax/styles/syntax-legacy/javascript.less @@ -6,23 +6,19 @@ .syntax--support.syntax--class { color: @green; } - + .syntax--entity { &.syntax--name.syntax--type { color: @yellow; } &.syntax--name { color: @syntax-text-color; - - &.syntax--function { - color: @blue; - } } - + &.syntax--name.syntax--tag { color: @blue; } - + &.syntax--other.syntax--attribute-name { color: @yellow; } @@ -40,7 +36,7 @@ color: @green; } .syntax--keyword.syntax--control { - color: @orange; + color: @green; } .syntax--keyword.syntax--control.syntax--regexp { color: @cyan; @@ -75,7 +71,13 @@ .syntax--support.syntax--constant { color: @syntax-text-color; } - + .syntax--constant.syntax--numeric { + color: @syntax-text-color; + } + + .syntax--storage { + color: @blue; + } .syntax--storage.syntax--modifier { color: @yellow; } @@ -93,7 +95,7 @@ .syntax--meta.syntax--brace.syntax--curly { color: @blue; } - + .syntax--string.syntax--quoted.syntax--template { .syntax--embedded.syntax--source { color: @syntax-text-color; @@ -102,14 +104,14 @@ } } } - + &.syntax--embedded .syntax--entity.syntax--name.syntax--tag { color: @blue; } .syntax--import { .syntax--control { - color: @orange; + color: @yellow; } } } diff --git a/packages/solarized-dark-syntax/styles/syntax/markdown.less b/packages/solarized-dark-syntax/styles/syntax-legacy/markdown.less similarity index 100% rename from packages/solarized-dark-syntax/styles/syntax/markdown.less rename to packages/solarized-dark-syntax/styles/syntax-legacy/markdown.less diff --git a/packages/solarized-dark-syntax/styles/syntax/markup.less b/packages/solarized-dark-syntax/styles/syntax-legacy/markup.less similarity index 100% rename from packages/solarized-dark-syntax/styles/syntax/markup.less rename to packages/solarized-dark-syntax/styles/syntax-legacy/markup.less diff --git a/packages/solarized-dark-syntax/styles/syntax/php.less b/packages/solarized-dark-syntax/styles/syntax-legacy/php.less similarity index 100% rename from packages/solarized-dark-syntax/styles/syntax/php.less rename to packages/solarized-dark-syntax/styles/syntax-legacy/php.less diff --git a/packages/solarized-dark-syntax/styles/syntax/python.less b/packages/solarized-dark-syntax/styles/syntax-legacy/python.less similarity index 100% rename from packages/solarized-dark-syntax/styles/syntax/python.less rename to packages/solarized-dark-syntax/styles/syntax-legacy/python.less diff --git a/packages/solarized-dark-syntax/styles/syntax/ruby.less b/packages/solarized-dark-syntax/styles/syntax-legacy/ruby.less similarity index 100% rename from packages/solarized-dark-syntax/styles/syntax/ruby.less rename to packages/solarized-dark-syntax/styles/syntax-legacy/ruby.less diff --git a/packages/solarized-dark-syntax/styles/syntax/scala.less b/packages/solarized-dark-syntax/styles/syntax-legacy/scala.less similarity index 100% rename from packages/solarized-dark-syntax/styles/syntax/scala.less rename to packages/solarized-dark-syntax/styles/syntax-legacy/scala.less diff --git a/packages/solarized-dark-syntax/styles/syntax/typescript.less b/packages/solarized-dark-syntax/styles/syntax-legacy/typescript.less similarity index 100% rename from packages/solarized-dark-syntax/styles/syntax/typescript.less rename to packages/solarized-dark-syntax/styles/syntax-legacy/typescript.less diff --git a/packages/solarized-dark-syntax/styles/syntax/base.less b/packages/solarized-dark-syntax/styles/syntax/base.less new file mode 100644 index 000000000..0b860d6cf --- /dev/null +++ b/packages/solarized-dark-syntax/styles/syntax/base.less @@ -0,0 +1,291 @@ +/* + This defines styling rules for syntax classes. + + See the naming conventions for a list of syntax classes: + https://flight-manual.atom.io/hacking-atom/sections/syntax-naming-conventions + + When styling rules conflict: + - The last rule overrides previous rules. + - The rule with most classes and pseudo-classes overrides the last rule. +*/ + +// if for return global let and int +.syntax--keyword { + color: @green; + + // super + &.syntax--function { + color: @yellow; + } + + // this self + &.syntax--variable { + color: @yellow; + } + + // = + && | << ? + &.syntax--symbolic { + color: @syntax-text-color; + } +} + +// identifier +.syntax--entity { + color: @syntax-text-color; + + // self cls iota + &.syntax--support { + color: @yellow; + } + + // @entity.decorator + &.syntax--decorator:last-child { + color: @blue; + } + + // label: + &.syntax--label { + text-decoration: underline; + } + + // function method + &.syntax--function { + color: @blue; + } + + // add + &.syntax--operator { + color: @blue; + + // %>% <=> + &.syntax--symbolic { + color: @syntax-text-color; + } + } + + // String Enum Class + &.syntax--type { + color: @blue; + + // int dict char map + &.syntax--fundamental { + color: @green; + } + } + + // div span + &.syntax--tag { + color: @blue; + } + + // href src alt + &.syntax--attribute { + color: @yellow; + } +} + +// () [] {} => @ +.syntax--punctuation { + color: @syntax-text-color; +} + +// "string" +.syntax--string { + color: @cyan; + + // {placeholder} %().2f + &.syntax--part { + color: @violet; + } + + // ${ } + &.syntax--interpolation { + color: @syntax-text-color; + } + + // /^reg[ex]?p/ + &.syntax--regexp { + color: @cyan; + + // ^ $ \b ? + i + &.syntax--language { + color: @violet; + } + + // \1 + &.syntax--variable { + color: @violet; + } + + // ( ) [^ ] (?= ) | r" / + &.syntax--punctuation { + color: @violet; + } + } +} + +// literal 4 1.3 0x29 +.syntax--constant { + color: @magenta; + + // < 'a' + &.syntax--character { + color: @cyan; + + // \" \' \g \. + &.syntax--escape { + color: @blue; + } + + // \u2661 \n \t \W . + &.syntax--code { + color: @blue; + } + } + + // true false nil + &.syntax--language { + color: @magenta; + } +} + +// text +.syntax--text { + color: @syntax-text-color; +} + +// __formatted__ +.syntax--markup { + + // # Heading + &.syntax--heading { + color: @blue; + } + + // > + &.syntax--quote.syntax--punctuation { + color: @violet; + } + + &.syntax--list.syntax--punctuation { + + // 1. + &.syntax--ordered { + color: @green; + } + + // * - + &.syntax--unordered { + color: @yellow; + } + } + + // **bold** + &.syntax--bold { + font-weight: bold; + } + + // *italic* + &.syntax--italic { + font-style: italic; + } + + // `raw` + &.syntax--raw { + font-style: italic; + } + + // url.com (path) + &.syntax--link { + color: @cyan; + } + + // [alt] ![alt] + &.syntax--alt { + color: @violet; + } + + // {++ inserted ++} + &.syntax--inserted { + color: @cyan; + + .syntax--punctuation { + color: @cyan; + } + } + + // {== highlighted ==} + &.syntax--highlighted { + color: @cyan; + + .syntax--punctuation { + color: @cyan; + } + } + + // {-- deleted --} + &.syntax--deleted { + color: @red; + + .syntax--punctuation { + color: @red; + } + } + + // {~~ from~>to ~~} + &.syntax--changed { + color: @yellow; + + .syntax--punctuation { + color: @yellow; + } + } + + // {>> commented <<} + &.syntax--commented { + color: @syntax-comment-color; + + .syntax--punctuation { + color: @syntax-comment-color; + } + } +} + +// /* comment */ +.syntax--comment { + color: @syntax-comment-color; + font-style: italic; + + // @param TODO NOTE + &.syntax--caption { + color: @syntax-subtle-color; + font-weight: bold; + } + + // variable function type + &.syntax--term { + color: @syntax-subtle-color; + } + + // { } / . + &.syntax--punctuation { + color: @syntax-comment-color; + font-weight: normal; + } +} + +// 0invalid +.syntax--invalid:not(.syntax--punctuation) { + + // §illegal + &.syntax--illegal { + color: @red !important; + text-decoration: underline !important; + } + + // obsolete() + &.syntax--deprecated { + color: @yellow !important; + text-decoration: underline !important; + } +} diff --git a/packages/solarized-dark-syntax/styles/syntax/css.less b/packages/solarized-dark-syntax/styles/syntax/css.less index 8bfaf8c34..993c150f6 100644 --- a/packages/solarized-dark-syntax/styles/syntax/css.less +++ b/packages/solarized-dark-syntax/styles/syntax/css.less @@ -1,63 +1,128 @@ .syntax--source.syntax--css { - .syntax--punctuation { - &.syntax--separator, - &.syntax--terminator { + // @media and or + .syntax--keyword { + color: @green; + + // + = *= + &.syntax--symbolic { color: @syntax-text-color; } - &.syntax--property-list.syntax--begin, - &.syntax--property-list.syntax--end { - color: @red; - } - &.syntax--section.syntax--function { - color: @cyan; + + // !important + &.syntax--important { + color: @green; } } - .syntax--entity.syntax--name { - color: @green; - } - .syntax--attribute-name.syntax--class, - .syntax--id { - color: @blue; - } - .syntax--pseudo-element, - .syntax--pseudo-class { - color: @orange; - } + .syntax--entity { - .syntax--property-value { - color: @cyan; - } - .syntax--constant.syntax--numeric { - color: @cyan; - .syntax--unit { + // function() + &.syntax--function { color: @cyan; + + // url rgb + &.syntax--support { + color: @blue; + } + } + + // #id .class + &.syntax--selector { + color: @magenta; + + // div span + &.syntax--tag { + color: @blue; + } + + // :pseudo-class ::pseudo-element + &.syntax--pseudo-class, + &.syntax--pseudo-element { + color: @yellow; + } + } + + // href src alt + &.syntax--attribute { + color: @yellow; + } + + // property: constant + &.syntax--property { + color: @syntax-subtle-color; + + // height position border + &.syntax--support { + color: @syntax-text-color; + } + } + + // --variable + &.syntax--variable { + color: @syntax-text-color; + } + + // @keyframes keyframe + &.syntax--keyframe { + color: @syntax-text-color; } } - .syntax--rgb-value { - color: @cyan; - } - .syntax--support.syntax--constant { + + // property: constant + .syntax--constant { color: @cyan; + + // tv tty &.syntax--media { - color: @red; + color: @yellow; + + // print screen + &.syntax--support { + color: @yellow; + } + } + + // from to 50% + &.syntax--offset { + color: @syntax-text-color; + + // % + &.syntax--unit { + color: @syntax-text-color; + } } } - .syntax--keyword.syntax--important { - color: @red; - } + .syntax--punctuation { -} + &.syntax--selector { + // * + &.syntax--wildcard { + color: @blue; + } -// Less/Sass should have their own files, -// but for just a single override, here should be fine too + // # + &.syntax--id { + color: @magenta; + } -.syntax--source.syntax--less, -.syntax--source.syntax--scss { - .syntax--keyword.syntax--unit { - color: @cyan; + // . + &.syntax--class { + color: @magenta; + } + + // : :: + &.syntax--pseudo-class, + &.syntax--pseudo-element { + color: @yellow; + } + } + + // () + &.syntax--arguments { + color: @syntax-text-color; + } } } diff --git a/packages/solarized-dark-syntax/styles/syntax/html.less b/packages/solarized-dark-syntax/styles/syntax/html.less new file mode 100644 index 000000000..ef8118ac3 --- /dev/null +++ b/packages/solarized-dark-syntax/styles/syntax/html.less @@ -0,0 +1,23 @@ +.syntax--source.syntax--html { + + .syntax--punctuation { + + // < /> + &.syntax--tag { + color: @syntax-comment-color; + } + + // = + &.syntax--pair.syntax--attribute-value { + color: @syntax-comment-color; + } + } + + .syntax--meta { + + // + &.syntax--doctype { + color: @syntax-comment-color; + } + } +} diff --git a/packages/solarized-dark-syntax/styles/syntax/js.less b/packages/solarized-dark-syntax/styles/syntax/js.less new file mode 100644 index 000000000..5b0fc219b --- /dev/null +++ b/packages/solarized-dark-syntax/styles/syntax/js.less @@ -0,0 +1,21 @@ +.syntax--source.syntax--js { + + .syntax--jsx { + color: @syntax-text-color; + + // Component + &.syntax--entity.syntax--type { + color: @blue; + } + + // "string" + &.syntax--string { + color: @cyan; + } + + //
text
+ &.syntax--text { + color: @cyan; + } + } +} diff --git a/packages/solarized-light-syntax/index.less b/packages/solarized-light-syntax/index.less index 3c3a0755a..66afd1ccf 100644 --- a/packages/solarized-light-syntax/index.less +++ b/packages/solarized-light-syntax/index.less @@ -6,17 +6,22 @@ @import "styles/editor.less"; // Languages -@import "styles/syntax/_base.less"; -@import "styles/syntax/c.less"; -@import "styles/syntax/coffee.less"; +@import "styles/syntax-legacy/_base.less"; +// @import "styles/syntax-legacy/c.less"; +@import "styles/syntax-legacy/coffee.less"; +@import "styles/syntax-legacy/css.less"; +// @import "styles/syntax-legacy/go.less"; +@import "styles/syntax-legacy/java.less"; +// @import "styles/syntax-legacy/javascript.less"; +@import "styles/syntax-legacy/markdown.less"; +@import "styles/syntax-legacy/markup.less"; +@import "styles/syntax-legacy/php.less"; +// @import "styles/syntax-legacy/python.less"; +// @import "styles/syntax-legacy/ruby.less"; +@import "styles/syntax-legacy/scala.less"; +@import "styles/syntax-legacy/typescript.less"; + +@import "styles/syntax/base.less"; @import "styles/syntax/css.less"; -@import "styles/syntax/go.less"; -@import "styles/syntax/java.less"; -@import "styles/syntax/javascript.less"; -@import "styles/syntax/markdown.less"; -@import "styles/syntax/markup.less"; -@import "styles/syntax/php.less"; -@import "styles/syntax/python.less"; -@import "styles/syntax/ruby.less"; -@import "styles/syntax/scala.less"; -@import "styles/syntax/typescript.less"; +@import "styles/syntax/html.less"; +@import "styles/syntax/js.less"; diff --git a/packages/solarized-light-syntax/styles/syntax/_base.less b/packages/solarized-light-syntax/styles/syntax-legacy/_base.less similarity index 100% rename from packages/solarized-light-syntax/styles/syntax/_base.less rename to packages/solarized-light-syntax/styles/syntax-legacy/_base.less diff --git a/packages/solarized-light-syntax/styles/syntax/c.less b/packages/solarized-light-syntax/styles/syntax-legacy/c.less similarity index 100% rename from packages/solarized-light-syntax/styles/syntax/c.less rename to packages/solarized-light-syntax/styles/syntax-legacy/c.less diff --git a/packages/solarized-light-syntax/styles/syntax/coffee.less b/packages/solarized-light-syntax/styles/syntax-legacy/coffee.less similarity index 100% rename from packages/solarized-light-syntax/styles/syntax/coffee.less rename to packages/solarized-light-syntax/styles/syntax-legacy/coffee.less diff --git a/packages/solarized-light-syntax/styles/syntax-legacy/css.less b/packages/solarized-light-syntax/styles/syntax-legacy/css.less new file mode 100644 index 000000000..8bfaf8c34 --- /dev/null +++ b/packages/solarized-light-syntax/styles/syntax-legacy/css.less @@ -0,0 +1,63 @@ +.syntax--source.syntax--css { + + .syntax--punctuation { + &.syntax--separator, + &.syntax--terminator { + color: @syntax-text-color; + } + &.syntax--property-list.syntax--begin, + &.syntax--property-list.syntax--end { + color: @red; + } + &.syntax--section.syntax--function { + color: @cyan; + } + } + + .syntax--entity.syntax--name { + color: @green; + } + .syntax--attribute-name.syntax--class, + .syntax--id { + color: @blue; + } + .syntax--pseudo-element, + .syntax--pseudo-class { + color: @orange; + } + + .syntax--property-value { + color: @cyan; + } + .syntax--constant.syntax--numeric { + color: @cyan; + .syntax--unit { + color: @cyan; + } + } + .syntax--rgb-value { + color: @cyan; + } + .syntax--support.syntax--constant { + color: @cyan; + &.syntax--media { + color: @red; + } + } + + .syntax--keyword.syntax--important { + color: @red; + } + +} + + +// Less/Sass should have their own files, +// but for just a single override, here should be fine too + +.syntax--source.syntax--less, +.syntax--source.syntax--scss { + .syntax--keyword.syntax--unit { + color: @cyan; + } +} diff --git a/packages/solarized-light-syntax/styles/syntax/go.less b/packages/solarized-light-syntax/styles/syntax-legacy/go.less similarity index 100% rename from packages/solarized-light-syntax/styles/syntax/go.less rename to packages/solarized-light-syntax/styles/syntax-legacy/go.less diff --git a/packages/solarized-light-syntax/styles/syntax/java.less b/packages/solarized-light-syntax/styles/syntax-legacy/java.less similarity index 100% rename from packages/solarized-light-syntax/styles/syntax/java.less rename to packages/solarized-light-syntax/styles/syntax-legacy/java.less diff --git a/packages/solarized-light-syntax/styles/syntax/javascript.less b/packages/solarized-light-syntax/styles/syntax-legacy/javascript.less similarity index 100% rename from packages/solarized-light-syntax/styles/syntax/javascript.less rename to packages/solarized-light-syntax/styles/syntax-legacy/javascript.less diff --git a/packages/solarized-light-syntax/styles/syntax/markdown.less b/packages/solarized-light-syntax/styles/syntax-legacy/markdown.less similarity index 100% rename from packages/solarized-light-syntax/styles/syntax/markdown.less rename to packages/solarized-light-syntax/styles/syntax-legacy/markdown.less diff --git a/packages/solarized-light-syntax/styles/syntax/markup.less b/packages/solarized-light-syntax/styles/syntax-legacy/markup.less similarity index 100% rename from packages/solarized-light-syntax/styles/syntax/markup.less rename to packages/solarized-light-syntax/styles/syntax-legacy/markup.less diff --git a/packages/solarized-light-syntax/styles/syntax/php.less b/packages/solarized-light-syntax/styles/syntax-legacy/php.less similarity index 100% rename from packages/solarized-light-syntax/styles/syntax/php.less rename to packages/solarized-light-syntax/styles/syntax-legacy/php.less diff --git a/packages/solarized-light-syntax/styles/syntax/python.less b/packages/solarized-light-syntax/styles/syntax-legacy/python.less similarity index 100% rename from packages/solarized-light-syntax/styles/syntax/python.less rename to packages/solarized-light-syntax/styles/syntax-legacy/python.less diff --git a/packages/solarized-light-syntax/styles/syntax/ruby.less b/packages/solarized-light-syntax/styles/syntax-legacy/ruby.less similarity index 100% rename from packages/solarized-light-syntax/styles/syntax/ruby.less rename to packages/solarized-light-syntax/styles/syntax-legacy/ruby.less diff --git a/packages/solarized-light-syntax/styles/syntax/scala.less b/packages/solarized-light-syntax/styles/syntax-legacy/scala.less similarity index 100% rename from packages/solarized-light-syntax/styles/syntax/scala.less rename to packages/solarized-light-syntax/styles/syntax-legacy/scala.less diff --git a/packages/solarized-light-syntax/styles/syntax/typescript.less b/packages/solarized-light-syntax/styles/syntax-legacy/typescript.less similarity index 100% rename from packages/solarized-light-syntax/styles/syntax/typescript.less rename to packages/solarized-light-syntax/styles/syntax-legacy/typescript.less diff --git a/packages/solarized-light-syntax/styles/syntax/base.less b/packages/solarized-light-syntax/styles/syntax/base.less new file mode 100644 index 000000000..b21bcbbcb --- /dev/null +++ b/packages/solarized-light-syntax/styles/syntax/base.less @@ -0,0 +1,286 @@ +/* + This defines styling rules for syntax classes. + + See the naming conventions for a list of syntax classes: + https://flight-manual.atom.io/hacking-atom/sections/syntax-naming-conventions + + When styling rules conflict: + - The last rule overrides previous rules. + - The rule with most classes and pseudo-classes overrides the last rule. +*/ + +// if for return global let and int +.syntax--keyword { + color: @green; + + // super + &.syntax--function { + color: @yellow; + } + + // this self + &.syntax--variable { + color: @yellow; + } + + // = + && | << ? + &.syntax--symbolic { + color: @syntax-text-color; + } +} + +// identifier +.syntax--entity { + color: @syntax-text-color; + + // self cls iota + &.syntax--support { + color: @yellow; + } + + // @entity.decorator + &.syntax--decorator:last-child { + color: @blue; + } + + // label: + &.syntax--label { + text-decoration: underline; + } + + // function method + &.syntax--function { + color: @blue; + } + + // add + &.syntax--operator { + color: @blue; + + // %>% <=> + &.syntax--symbolic { + color: @syntax-text-color; + } + } + + // String Enum Class + &.syntax--type { + color: @blue; + + // int dict char map + &.syntax--fundamental { + color: @green; + } + } + + // div span + &.syntax--tag { + color: @blue; + } + + // href src alt + &.syntax--attribute { + color: @yellow; + } +} + +// () [] {} => @ +.syntax--punctuation { + color: @syntax-text-color; +} + +// "string" +.syntax--string { + color: @cyan; + + // ${variable} %().2f + &.syntax--part { + color: @orange; + } + + // /^reg[ex]?p/ + &.syntax--regexp { + color: @cyan; + + // ^ $ \b ? + i + &.syntax--language { + color: @orange; + } + + // \1 + &.syntax--variable { + color: @orange; + } + + // ( ) [^ ] (?= ) | r" / + &.syntax--punctuation { + color: @orange; + } + } +} + +// literal 4 1.3 0x29 +.syntax--constant { + color: @magenta; + + // < 'a' + &.syntax--character { + color: @cyan; + + // \" \' \g \. + &.syntax--escape { + color: @blue; + } + + // \u2661 \n \t \W . + &.syntax--code { + color: @blue; + } + } + + // true false nil + &.syntax--language { + color: @magenta; + } +} + +// text +.syntax--text { + color: @syntax-text-color; +} + +// __formatted__ +.syntax--markup { + + // # Heading + &.syntax--heading { + color: @blue; + } + + // > + &.syntax--quote.syntax--punctuation { + color: @violet; + } + + &.syntax--list.syntax--punctuation { + + // 1. + &.syntax--ordered { + color: @green; + } + + // * - + &.syntax--unordered { + color: @yellow; + } + } + + // **bold** + &.syntax--bold { + font-weight: bold; + } + + // *italic* + &.syntax--italic { + font-style: italic; + } + + // `raw` + &.syntax--raw { + font-style: italic; + } + + // url.com (path) + &.syntax--link { + color: @cyan; + } + + // [alt] ![alt] + &.syntax--alt { + color: @violet; + } + + // {++ inserted ++} + &.syntax--inserted { + color: @cyan; + + .syntax--punctuation { + color: @cyan; + } + } + + // {== highlighted ==} + &.syntax--highlighted { + color: @cyan; + + .syntax--punctuation { + color: @cyan; + } + } + + // {-- deleted --} + &.syntax--deleted { + color: @red; + + .syntax--punctuation { + color: @red; + } + } + + // {~~ from~>to ~~} + &.syntax--changed { + color: @yellow; + + .syntax--punctuation { + color: @yellow; + } + } + + // {>> commented <<} + &.syntax--commented { + color: @syntax-comment-color; + + .syntax--punctuation { + color: @syntax-comment-color; + } + } +} + +// /* comment */ +.syntax--comment { + color: @syntax-comment-color; + font-style: italic; + + // @param TODO NOTE + &.syntax--caption { + color: @syntax-subtle-color; + font-weight: bold; + } + + // variable function type + &.syntax--term { + color: @syntax-subtle-color; + } + + // { } / . + &.syntax--punctuation { + color: @syntax-comment-color; + font-weight: normal; + } +} + +// 0invalid +.syntax--invalid:not(.syntax--punctuation) { + + // §illegal + &.syntax--illegal { + color: @red !important; + text-decoration: underline !important; + } + + // obsolete() + &.syntax--deprecated { + color: @yellow !important; + text-decoration: underline !important; + } +} diff --git a/packages/solarized-light-syntax/styles/syntax/css.less b/packages/solarized-light-syntax/styles/syntax/css.less index 8bfaf8c34..993c150f6 100644 --- a/packages/solarized-light-syntax/styles/syntax/css.less +++ b/packages/solarized-light-syntax/styles/syntax/css.less @@ -1,63 +1,128 @@ .syntax--source.syntax--css { - .syntax--punctuation { - &.syntax--separator, - &.syntax--terminator { + // @media and or + .syntax--keyword { + color: @green; + + // + = *= + &.syntax--symbolic { color: @syntax-text-color; } - &.syntax--property-list.syntax--begin, - &.syntax--property-list.syntax--end { - color: @red; - } - &.syntax--section.syntax--function { - color: @cyan; + + // !important + &.syntax--important { + color: @green; } } - .syntax--entity.syntax--name { - color: @green; - } - .syntax--attribute-name.syntax--class, - .syntax--id { - color: @blue; - } - .syntax--pseudo-element, - .syntax--pseudo-class { - color: @orange; - } + .syntax--entity { - .syntax--property-value { - color: @cyan; - } - .syntax--constant.syntax--numeric { - color: @cyan; - .syntax--unit { + // function() + &.syntax--function { color: @cyan; + + // url rgb + &.syntax--support { + color: @blue; + } + } + + // #id .class + &.syntax--selector { + color: @magenta; + + // div span + &.syntax--tag { + color: @blue; + } + + // :pseudo-class ::pseudo-element + &.syntax--pseudo-class, + &.syntax--pseudo-element { + color: @yellow; + } + } + + // href src alt + &.syntax--attribute { + color: @yellow; + } + + // property: constant + &.syntax--property { + color: @syntax-subtle-color; + + // height position border + &.syntax--support { + color: @syntax-text-color; + } + } + + // --variable + &.syntax--variable { + color: @syntax-text-color; + } + + // @keyframes keyframe + &.syntax--keyframe { + color: @syntax-text-color; } } - .syntax--rgb-value { - color: @cyan; - } - .syntax--support.syntax--constant { + + // property: constant + .syntax--constant { color: @cyan; + + // tv tty &.syntax--media { - color: @red; + color: @yellow; + + // print screen + &.syntax--support { + color: @yellow; + } + } + + // from to 50% + &.syntax--offset { + color: @syntax-text-color; + + // % + &.syntax--unit { + color: @syntax-text-color; + } } } - .syntax--keyword.syntax--important { - color: @red; - } + .syntax--punctuation { -} + &.syntax--selector { + // * + &.syntax--wildcard { + color: @blue; + } -// Less/Sass should have their own files, -// but for just a single override, here should be fine too + // # + &.syntax--id { + color: @magenta; + } -.syntax--source.syntax--less, -.syntax--source.syntax--scss { - .syntax--keyword.syntax--unit { - color: @cyan; + // . + &.syntax--class { + color: @magenta; + } + + // : :: + &.syntax--pseudo-class, + &.syntax--pseudo-element { + color: @yellow; + } + } + + // () + &.syntax--arguments { + color: @syntax-text-color; + } } } diff --git a/packages/solarized-light-syntax/styles/syntax/html.less b/packages/solarized-light-syntax/styles/syntax/html.less new file mode 100644 index 000000000..ef8118ac3 --- /dev/null +++ b/packages/solarized-light-syntax/styles/syntax/html.less @@ -0,0 +1,23 @@ +.syntax--source.syntax--html { + + .syntax--punctuation { + + // < /> + &.syntax--tag { + color: @syntax-comment-color; + } + + // = + &.syntax--pair.syntax--attribute-value { + color: @syntax-comment-color; + } + } + + .syntax--meta { + + // + &.syntax--doctype { + color: @syntax-comment-color; + } + } +} diff --git a/packages/solarized-light-syntax/styles/syntax/js.less b/packages/solarized-light-syntax/styles/syntax/js.less new file mode 100644 index 000000000..5b0fc219b --- /dev/null +++ b/packages/solarized-light-syntax/styles/syntax/js.less @@ -0,0 +1,21 @@ +.syntax--source.syntax--js { + + .syntax--jsx { + color: @syntax-text-color; + + // Component + &.syntax--entity.syntax--type { + color: @blue; + } + + // "string" + &.syntax--string { + color: @cyan; + } + + //
text
+ &.syntax--text { + color: @cyan; + } + } +} diff --git a/packages/welcome/lib/welcome-view.js b/packages/welcome/lib/welcome-view.js index 059622a8c..1a0387961 100644 --- a/packages/welcome/lib/welcome-view.js +++ b/packages/welcome/lib/welcome-view.js @@ -108,8 +108,11 @@ export default class WelcomeView {
  • The Atom forum at{' '} - - discuss.atom.io + + Github Discussions
  • diff --git a/packages/welcome/package-lock.json b/packages/welcome/package-lock.json index 066116541..8c8ad9a20 100644 --- a/packages/welcome/package-lock.json +++ b/packages/welcome/package-lock.json @@ -16,7 +16,7 @@ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "3.3.0" + "acorn": "^3.0.4" }, "dependencies": { "acorn": { @@ -33,8 +33,8 @@ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "dev": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "ajv-keywords": { @@ -67,7 +67,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "array-union": { @@ -76,7 +76,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -105,7 +105,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "~2.1.0" } }, "assert-plus": { @@ -128,10 +128,10 @@ "integrity": "sha512-HVbx7cAvySjVfVNKpb2go9RO890Xs6yigWWAwoISOz4l2X5oMTMs1rIw04geuEQeTTmW3ob3nj6YN1KWf2cBHg==", "dev": true, "requires": { - "etch": "0.8.0", - "grim": "2.0.2", - "less": "2.7.3", - "mocha": "3.5.3", + "etch": "^0.8.0", + "grim": "^2.0.1", + "less": "^2.7.1", + "mocha": "^3.0.0", "tmp": "0.0.31" }, "dependencies": { @@ -141,7 +141,7 @@ "integrity": "sha1-VPYZV0NG+KPueXP1T7vQG1YnItY=", "dev": true, "requires": { - "virtual-dom": "2.1.1" + "virtual-dom": "^2.0.1" } } } @@ -166,9 +166,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "balanced-match": { @@ -184,7 +184,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "boom": { @@ -192,8 +192,9 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, + "optional": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "brace-expansion": { @@ -202,7 +203,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -230,7 +231,7 @@ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsites": { @@ -258,11 +259,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "dependencies": { "supports-color": { @@ -285,7 +286,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "cli-width": { @@ -311,8 +312,9 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, + "optional": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -321,7 +323,7 @@ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", "dev": true, "requires": { - "graceful-readlink": "1.0.1" + "graceful-readlink": ">= 1.0.0" } }, "concat-map": { @@ -336,10 +338,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "core-util-is": { @@ -355,7 +357,7 @@ "dev": true, "optional": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "d": { @@ -364,7 +366,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.46" + "es5-ext": "^0.10.9" } }, "dashdash": { @@ -374,7 +376,7 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -413,12 +415,12 @@ "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==", "dev": true, "requires": { - "find-root": "1.1.0", - "glob": "7.1.1", - "ignore": "3.3.10", - "pkg-config": "1.1.1", - "run-parallel": "1.1.9", - "uniq": "1.0.1" + "find-root": "^1.0.0", + "glob": "^7.0.5", + "ignore": "^3.0.9", + "pkg-config": "^1.1.0", + "run-parallel": "^1.1.2", + "uniq": "^1.0.1" } }, "del": { @@ -427,20 +429,21 @@ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" } }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "dev": true, + "optional": true }, "diff": { "version": "3.2.0", @@ -454,8 +457,8 @@ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } }, "dom-walk": { @@ -471,8 +474,8 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1", - "safer-buffer": "2.1.2" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "errno": { @@ -482,7 +485,7 @@ "dev": true, "optional": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "error": { @@ -491,9 +494,9 @@ "integrity": "sha1-v2n/JR+0onnBmtzNqmth6Q2b8So=", "dev": true, "requires": { - "camelize": "1.0.0", - "string-template": "0.2.1", - "xtend": "4.0.1" + "camelize": "^1.0.0", + "string-template": "~0.2.0", + "xtend": "~4.0.0" } }, "es5-ext": { @@ -502,9 +505,9 @@ "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", "dev": true, "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" }, "dependencies": { "next-tick": { @@ -521,9 +524,9 @@ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, "es6-map": { @@ -532,12 +535,12 @@ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" } }, "es6-set": { @@ -546,11 +549,11 @@ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-iterator": "2.0.3", + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "event-emitter": "~0.3.5" } }, "es6-symbol": { @@ -559,8 +562,8 @@ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46" + "d": "1", + "es5-ext": "~0.10.14" } }, "es6-weak-map": { @@ -569,10 +572,10 @@ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" } }, "escape-string-regexp": { @@ -587,10 +590,10 @@ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "dev": true, "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint": { @@ -599,40 +602,40 @@ "integrity": "sha1-yaEOi/bp1lZRIEd4xQM0Hx6sPOc=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "chalk": "1.1.3", - "concat-stream": "1.6.2", - "debug": "2.6.8", - "doctrine": "1.5.0", - "escope": "3.6.0", - "espree": "3.5.4", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "glob": "7.1.1", - "globals": "9.18.0", - "ignore": "3.3.10", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.19.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.12.0", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.7.8", - "strip-bom": "3.0.0", - "strip-json-comments": "1.0.4", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" + "babel-code-frame": "^6.16.0", + "chalk": "^1.1.3", + "concat-stream": "^1.4.6", + "debug": "^2.1.1", + "doctrine": "^1.2.2", + "escope": "^3.6.0", + "espree": "^3.3.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "glob": "^7.0.3", + "globals": "^9.2.0", + "ignore": "^3.2.0", + "imurmurhash": "^0.1.4", + "inquirer": "^0.12.0", + "is-my-json-valid": "^2.10.0", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.5.1", + "json-stable-stringify": "^1.0.0", + "levn": "^0.3.0", + "lodash": "^4.0.0", + "mkdirp": "^0.5.0", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.1", + "pluralize": "^1.2.1", + "progress": "^1.1.8", + "require-uncached": "^1.0.2", + "shelljs": "^0.7.5", + "strip-bom": "^3.0.0", + "strip-json-comments": "~1.0.1", + "table": "^3.7.8", + "text-table": "~0.2.0", + "user-home": "^2.0.0" } }, "eslint-config-standard": { @@ -659,8 +662,8 @@ "integrity": "sha1-Gvlq6lRYVoJRV9l8G1DVqPtkpac=", "dev": true, "requires": { - "doctrine": "1.5.0", - "jsx-ast-utils": "1.4.1" + "doctrine": "^1.2.2", + "jsx-ast-utils": "^1.3.3" } }, "eslint-plugin-standard": { @@ -675,8 +678,8 @@ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "5.7.1", - "acorn-jsx": "3.0.1" + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" } }, "esprima": { @@ -691,7 +694,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -717,7 +720,7 @@ "integrity": "sha1-GrDH+CE2UF3XSzHRdwHLK+bSZVg=", "dev": true, "requires": { - "individual": "3.0.0" + "individual": "^3.0.0" } }, "event-emitter": { @@ -726,8 +729,8 @@ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46" + "d": "1", + "es5-ext": "~0.10.14" } }, "event-kit": { @@ -753,7 +756,8 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "dev": true, + "optional": true }, "fast-levenshtein": { "version": "2.0.6", @@ -767,8 +771,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "file-entry-cache": { @@ -777,8 +781,8 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "find-root": { @@ -793,10 +797,10 @@ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "dev": true, "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" } }, "forever-agent": { @@ -813,9 +817,9 @@ "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.19" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "fs.realpath": { @@ -836,7 +840,7 @@ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "dev": true, "requires": { - "is-property": "1.0.2" + "is-property": "^1.0.0" } }, "get-stdin": { @@ -852,7 +856,7 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -870,12 +874,12 @@ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "global": { @@ -884,8 +888,8 @@ "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", "dev": true, "requires": { - "min-document": "2.19.0", - "process": "0.5.2" + "min-document": "^2.19.0", + "process": "~0.5.1" } }, "globals": { @@ -900,12 +904,12 @@ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "graceful-fs": { @@ -926,7 +930,7 @@ "integrity": "sha512-Qj7hTJRfd87E/gUgfvM0YIH/g2UA2SV6niv6BYXk1o6w4mhgv+QyYM1EjOJQljvzgEj4SqSsRWldXIeKHz3e3Q==", "dev": true, "requires": { - "event-kit": "2.5.0" + "event-kit": "^2.0.0" } }, "growl": { @@ -949,8 +953,8 @@ "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^4.9.1", + "har-schema": "^1.0.5" } }, "has-ansi": { @@ -959,7 +963,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { @@ -975,10 +979,10 @@ "dev": true, "optional": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "he": { @@ -991,7 +995,8 @@ "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true + "dev": true, + "optional": true }, "home-or-tmp": { "version": "2.0.0", @@ -999,8 +1004,8 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" } }, "http-signature": { @@ -1010,9 +1015,9 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.14.2" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "ignore": { @@ -1046,8 +1051,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -1062,19 +1067,19 @@ "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", "dev": true, "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "figures": "1.7.0", - "lodash": "4.17.10", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" } }, "interpret": { @@ -1089,7 +1094,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-my-ip-valid": { @@ -1104,11 +1109,11 @@ "integrity": "sha512-mG0f/unGX1HZ5ep4uhRaPOS8EkAY8/j6mDRMJrutq4CqhoJWYp7qAlonIPy3TV7p3ju4TK9fo/PbnoksWmsp5Q==", "dev": true, "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" } }, "is-object": { @@ -1129,7 +1134,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -1138,7 +1143,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-property": { @@ -1185,8 +1190,8 @@ "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsbn": { @@ -1209,7 +1214,7 @@ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -1271,14 +1276,14 @@ "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", "dev": true, "requires": { - "errno": "0.1.7", - "graceful-fs": "4.1.11", - "image-size": "0.5.5", - "mime": "1.6.0", - "mkdirp": "0.5.1", - "promise": "7.3.1", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.2.11", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", "request": "2.81.0", - "source-map": "0.5.7" + "source-map": "^0.5.3" } }, "levn": { @@ -1287,14 +1292,14 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash._baseassign": { @@ -1303,8 +1308,8 @@ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" } }, "lodash._basecopy": { @@ -1337,9 +1342,9 @@ "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", "dev": true, "requires": { - "lodash._baseassign": "3.2.0", - "lodash._basecreate": "3.0.3", - "lodash._isiterateecall": "3.0.9" + "lodash._baseassign": "^3.0.0", + "lodash._basecreate": "^3.0.0", + "lodash._isiterateecall": "^3.0.0" } }, "lodash.isarguments": { @@ -1360,9 +1365,9 @@ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, "mime": { @@ -1376,15 +1381,17 @@ "version": "1.35.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", - "dev": true + "dev": true, + "optional": true }, "mime-types": { "version": "2.1.19", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "dev": true, + "optional": true, "requires": { - "mime-db": "1.35.0" + "mime-db": "~1.35.0" } }, "min-document": { @@ -1393,7 +1400,7 @@ "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", "dev": true, "requires": { - "dom-walk": "0.1.1" + "dom-walk": "^0.1.0" } }, "minimatch": { @@ -1402,7 +1409,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -1489,7 +1496,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -1504,12 +1511,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" } }, "os-homedir": { @@ -1567,7 +1574,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-config": { @@ -1576,9 +1583,9 @@ "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", "dev": true, "requires": { - "debug-log": "1.0.1", - "find-root": "1.1.0", - "xtend": "4.0.1" + "debug-log": "^1.0.0", + "find-root": "^1.0.0", + "xtend": "^4.0.1" } }, "pluralize": { @@ -1618,7 +1625,7 @@ "dev": true, "optional": true, "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" } }, "prr": { @@ -1648,13 +1655,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readline2": { @@ -1663,8 +1670,8 @@ "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", "mute-stream": "0.0.5" } }, @@ -1674,7 +1681,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.8.1" + "resolve": "^1.1.6" } }, "request": { @@ -1684,28 +1691,28 @@ "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.8.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.19", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.2", - "stringstream": "0.0.6", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" } }, "require-uncached": { @@ -1714,8 +1721,8 @@ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" } }, "resolve": { @@ -1724,7 +1731,7 @@ "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", "dev": true, "requires": { - "path-parse": "1.0.6" + "path-parse": "^1.0.5" } }, "resolve-from": { @@ -1739,8 +1746,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } }, "rimraf": { @@ -1749,7 +1756,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.1" + "glob": "^7.0.5" } }, "run-async": { @@ -1758,7 +1765,7 @@ "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.3.0" } }, "run-parallel": { @@ -1783,7 +1790,8 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "optional": true }, "shelljs": { "version": "0.7.8", @@ -1791,9 +1799,9 @@ "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", "dev": true, "requires": { - "glob": "7.1.1", - "interpret": "1.1.0", - "rechoir": "0.6.2" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } }, "slice-ansi": { @@ -1809,7 +1817,7 @@ "dev": true, "optional": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "source-map": { @@ -1832,15 +1840,15 @@ "dev": true, "optional": true, "requires": { - "asn1": "0.2.4", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.2", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.2", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "safer-buffer": "2.1.2", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" }, "dependencies": { "assert-plus": { @@ -1858,13 +1866,13 @@ "integrity": "sha1-Y1Eyvnv7VnwpIQBfMPnjUOR1Kq0=", "dev": true, "requires": { - "eslint": "3.10.2", + "eslint": "~3.10.2", "eslint-config-standard": "6.2.1", "eslint-config-standard-jsx": "3.2.0", - "eslint-plugin-promise": "3.4.2", - "eslint-plugin-react": "6.7.1", - "eslint-plugin-standard": "2.0.1", - "standard-engine": "5.2.0" + "eslint-plugin-promise": "~3.4.0", + "eslint-plugin-react": "~6.7.1", + "eslint-plugin-standard": "~2.0.1", + "standard-engine": "~5.2.0" } }, "standard-engine": { @@ -1873,12 +1881,12 @@ "integrity": "sha1-QAZgrlrM6K/U22D/IhSpGQrXkKM=", "dev": true, "requires": { - "deglob": "2.1.1", - "find-root": "1.1.0", - "get-stdin": "5.0.1", - "home-or-tmp": "2.0.0", - "minimist": "1.2.0", - "pkg-config": "1.1.1" + "deglob": "^2.0.0", + "find-root": "^1.0.0", + "get-stdin": "^5.0.1", + "home-or-tmp": "^2.0.0", + "minimist": "^1.1.0", + "pkg-config": "^1.0.1" }, "dependencies": { "minimist": { @@ -1901,9 +1909,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -1912,7 +1920,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "stringstream": { @@ -1928,7 +1936,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -1949,7 +1957,7 @@ "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } }, "table": { @@ -1958,12 +1966,12 @@ "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", "dev": true, "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.10", + "ajv": "^4.7.0", + "ajv-keywords": "^1.0.0", + "chalk": "^1.1.1", + "lodash": "^4.0.0", "slice-ansi": "0.0.4", - "string-width": "2.1.1" + "string-width": "^2.0.0" }, "dependencies": { "ansi-regex": { @@ -1984,8 +1992,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -1994,7 +2002,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -2017,7 +2025,7 @@ "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.1" } }, "tough-cookie": { @@ -2027,7 +2035,7 @@ "dev": true, "optional": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tunnel-agent": { @@ -2037,7 +2045,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -2053,7 +2061,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "typedarray": { @@ -2074,7 +2082,7 @@ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", "dev": true, "requires": { - "os-homedir": "1.0.2" + "os-homedir": "^1.0.0" } }, "util-deprecate": { @@ -2097,9 +2105,9 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" }, "dependencies": { "assert-plus": { @@ -2118,11 +2126,11 @@ "dev": true, "requires": { "browser-split": "0.0.1", - "error": "4.4.0", - "ev-store": "7.0.0", - "global": "4.3.2", - "is-object": "1.0.1", - "next-tick": "0.2.2", + "error": "^4.3.0", + "ev-store": "^7.0.0", + "global": "^4.3.0", + "is-object": "^1.0.1", + "next-tick": "^0.2.2", "x-is-array": "0.1.0", "x-is-string": "0.1.0" } @@ -2145,7 +2153,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "x-is-array": { diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 000000000..ccbac807c --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - "." diff --git a/resources/app-icons/beta/atom.icns b/resources/app-icons/beta/atom.icns index 6737fa27f..133f5c2a0 100644 Binary files a/resources/app-icons/beta/atom.icns and b/resources/app-icons/beta/atom.icns differ diff --git a/resources/app-icons/beta/atom.ico b/resources/app-icons/beta/atom.ico index e470837de..f303cf822 100644 Binary files a/resources/app-icons/beta/atom.ico and b/resources/app-icons/beta/atom.ico differ diff --git a/resources/app-icons/dev/atom.icns b/resources/app-icons/dev/atom.icns index b006a1a83..e8d18ab8b 100644 Binary files a/resources/app-icons/dev/atom.icns and b/resources/app-icons/dev/atom.icns differ diff --git a/resources/app-icons/dev/atom.ico b/resources/app-icons/dev/atom.ico index 6656f2623..118a93a86 100644 Binary files a/resources/app-icons/dev/atom.ico and b/resources/app-icons/dev/atom.ico differ diff --git a/resources/app-icons/nightly/atom.icns b/resources/app-icons/nightly/atom.icns index e49166fe2..ec8696553 100644 Binary files a/resources/app-icons/nightly/atom.icns and b/resources/app-icons/nightly/atom.icns differ diff --git a/resources/app-icons/nightly/atom.ico b/resources/app-icons/nightly/atom.ico index 158a02f0f..5e64c9a8c 100644 Binary files a/resources/app-icons/nightly/atom.ico and b/resources/app-icons/nightly/atom.ico differ diff --git a/resources/app-icons/stable/atom.icns b/resources/app-icons/stable/atom.icns index 73ef96330..561d349d3 100644 Binary files a/resources/app-icons/stable/atom.icns and b/resources/app-icons/stable/atom.icns differ diff --git a/resources/app-icons/stable/atom.ico b/resources/app-icons/stable/atom.ico index c640d594a..6d2d98c9b 100644 Binary files a/resources/app-icons/stable/atom.ico and b/resources/app-icons/stable/atom.ico differ diff --git a/resources/linux/atom.desktop.in b/resources/linux/atom.desktop.in index f028eba23..0677341dc 100644 --- a/resources/linux/atom.desktop.in +++ b/resources/linux/atom.desktop.in @@ -6,6 +6,6 @@ Exec=env ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT=false <%= installDir %>/bin/< Icon=<%= iconPath %> Type=Application StartupNotify=true -Categories=GNOME;GTK;Utility;TextEditor;Development; -MimeType=text/plain; +Categories=GTK;Utility;TextEditor;Development; +MimeType=application/javascript;application/json;application/x-httpd-eruby;application/x-httpd-php;application/x-httpd-php3;application/x-httpd-php4;application/x-httpd-php5;application/x-ruby;application/x-bash;application/x-csh;application/x-sh;application/x-zsh;application/x-shellscript;application/x-sql;application/x-tcl;application/xhtml+xml;application/xml;application/xml-dtd;application/xslt+xml;text/coffeescript;text/css;text/html;text/plain;text/xml;text/xml-dtd;text/x-bash;text/x-c++;text/x-c++hdr;text/x-c++src;text/x-c;text/x-chdr;text/x-csh;text/x-csrc;text/x-dsrc;text/x-diff;text/x-go;text/x-java;text/x-java-source;text/x-makefile;text/x-markdown;text/x-objc;text/x-perl;text/x-php;text/x-python;text/x-ruby;text/x-sh;text/x-zsh;text/yaml;inode/directory StartupWMClass=atom diff --git a/resources/linux/debian/control.in b/resources/linux/debian/control.in index 345c0dac4..064721f04 100644 --- a/resources/linux/debian/control.in +++ b/resources/linux/debian/control.in @@ -1,7 +1,7 @@ Package: <%= appFileName %> Version: <%= version %> -Depends: git, libgconf-2-4 (>= 3.2.5), libgtk-3-0 (>= 3.9.10), libgcrypt20, libnotify4, libxtst6, libnss3 (>= 2:3.22), libglib2.0-bin | kde-cli-tools | kde-runtime, xdg-utils, libx11-xcb1, libxss1, libxkbfile1, libcurl3 | libcurl4 -Recommends: libasound2 (>= 1.0.16), policykit-1, libsecret-1-0, gnome-keyring +Depends: git, libgcrypt20, libgtk-3-0 (>= 3.9.10), libnotify4, libnss3 (>= 2:3.22), libglib2.0-bin | kde-cli-tools | kde-runtime, xdg-utils, libasound2 (>= 1.0.16), libgbm1, libx11-xcb1, libxcb-dri3-0, libxss1, libxtst6, libxkbfile1, libcurl3 | libcurl4 +Recommends: policykit-1, libsecret-1-0, gnome-keyring Suggests: lsb-release Section: devel Priority: optional diff --git a/resources/linux/desktopenviroment/cinnamon/atom.nemo_action b/resources/linux/desktopenviroment/cinnamon/atom.nemo_action new file mode 100644 index 000000000..09e4c4ef9 --- /dev/null +++ b/resources/linux/desktopenviroment/cinnamon/atom.nemo_action @@ -0,0 +1,9 @@ +[Nemo Action] +Active=true +Name=Open in Atom +Comment=Open in Atom +#%U is the current selected file, this will also work on current directory +Exec=atom -n %U +Icon-Name=atom +Selection=any +Extensions=any diff --git a/resources/linux/redhat/atom.spec.in b/resources/linux/redhat/atom.spec.in index c60424525..05c24ec7c 100644 --- a/resources/linux/redhat/atom.spec.in +++ b/resources/linux/redhat/atom.spec.in @@ -8,11 +8,16 @@ AutoReqProv: no # Avoid libchromiumcontent.so missing dependency Prefix: <%= installDir %> %ifarch i386 i486 i586 i686 -Requires: lsb-core-noarch, libXss.so.1 libsecret-1.so.0, polkit +Requires: alsa-lib, git-core, (glib2 or kde-cli-tools or xdg-utils), lsb-core-noarch, (libcurl.so.3 or libcurl.so.4), libgbm.so.1, libgcrypt.so.20, libnotify, libnss3.so, libX11-xcb.so.1, libxcb-dri3.so.0, libxkbfile.so.1, libXss.so.1, libsecret-1.so.0, gtk3, polkit %else -Requires: lsb-core-noarch, libXss.so.1()(64bit) libsecret-1.so.0()(64bit), polkit +Requires: alsa-lib, git-core, (glib2 or kde-cli-tools or xdg-utils), lsb-core-noarch, (libcurl.so.3()(64bit) or libcurl.so.4()(64bit)), libgbm.so.1()(64bit), libgcrypt.so.20()(64bit), libnotify, libnss3.so()(64bit), libX11-xcb.so.1()(64bit), libxcb-dri3.so.0()(64bit), libxkbfile.so.1()(64bit), libXss.so.1()(64bit), libsecret-1.so.0()(64bit), gtk3, polkit %endif +# Disable Fedora's shebang mangling script, +# which errors out on any file with versionless `python` in its shebang +# See: https://github.com/atom/atom/issues/21937 +%undefine __brp_mangle_shebangs + %description <%= description %> diff --git a/resources/mac/file.icns b/resources/mac/file.icns index 6a8cd5d8e..27ce5e704 100644 Binary files a/resources/mac/file.icns and b/resources/mac/file.icns differ diff --git a/resources/win/atom.sh b/resources/win/atom.sh index 6f2a81cea..4a13bf300 100755 --- a/resources/win/atom.sh +++ b/resources/win/atom.sh @@ -3,7 +3,9 @@ if command -v "cygpath" > /dev/null; then # We have cygpath to do the conversion ATOMCMD=$(cygpath "$(dirname "$0")/atom.cmd" -a -w) + ARGS=( $(cygpath -a -w "$@" | tr '\n' ' ') ) else + ARGS=$@ pushd "$(dirname "$0")" > /dev/null if [[ $(uname -r) =~ (M|m)icrosoft ]]; then # We are in Windows Subsystem for Linux, map /mnt/drive @@ -12,15 +14,15 @@ else eval $(grep "^root" /etc/wsl.conf | sed -e "s/ //g") root="$(echo $root | sed 's|/|\\/|g')" ATOMCMD="$(echo $PWD | sed 's/\/mnt\/\([a-z]*\)\(.*\)/\1:\2/')/atom.cmd" - ATOMCMD="${ATOMCMD////\\}" else # We don't have cygpath or WSL so try pwd -W ATOMCMD="$(pwd -W)/atom.cmd" fi popd > /dev/null fi -if [ "$(uname -o)" == "Msys" ]; then - cmd.exe //C "$ATOMCMD" "$@" # Msys thinks /C is a Windows path... + +if [ "$(uname -o)" == "Msys" ] || [[ $(uname -r) == *-Microsoft ]]; then + cmd.exe //C "$ATOMCMD" "$@" # Msys amd WSL think /C is a Windows path... else - cmd.exe /C "$ATOMCMD" "$@" # Cygwin does not + cmd.exe /C "$ATOMCMD" "${ARGS[@]}" # Cygwin does not fi diff --git a/resources/win/atom.visualElementsManifest.xml b/resources/win/atom.visualElementsManifest.xml new file mode 100644 index 000000000..762a59792 --- /dev/null +++ b/resources/win/atom.visualElementsManifest.xml @@ -0,0 +1,9 @@ + + + diff --git a/resources/win/visualElements/Square150x150Logo.scale-100.png b/resources/win/visualElements/Square150x150Logo.scale-100.png new file mode 100644 index 000000000..7330dd46c Binary files /dev/null and b/resources/win/visualElements/Square150x150Logo.scale-100.png differ diff --git a/resources/win/visualElements/Square150x150Logo.scale-125.png b/resources/win/visualElements/Square150x150Logo.scale-125.png new file mode 100644 index 000000000..eaa8d4d3c Binary files /dev/null and b/resources/win/visualElements/Square150x150Logo.scale-125.png differ diff --git a/resources/win/visualElements/Square150x150Logo.scale-150.png b/resources/win/visualElements/Square150x150Logo.scale-150.png new file mode 100644 index 000000000..95e70014b Binary files /dev/null and b/resources/win/visualElements/Square150x150Logo.scale-150.png differ diff --git a/resources/win/visualElements/Square150x150Logo.scale-200.png b/resources/win/visualElements/Square150x150Logo.scale-200.png new file mode 100644 index 000000000..1d6006697 Binary files /dev/null and b/resources/win/visualElements/Square150x150Logo.scale-200.png differ diff --git a/resources/win/visualElements/Square150x150Logo.scale-400.png b/resources/win/visualElements/Square150x150Logo.scale-400.png new file mode 100644 index 000000000..caff09182 Binary files /dev/null and b/resources/win/visualElements/Square150x150Logo.scale-400.png differ diff --git a/resources/win/visualElements/Square44x44Logo.scale-100.png b/resources/win/visualElements/Square44x44Logo.scale-100.png new file mode 100644 index 000000000..8385f6deb Binary files /dev/null and b/resources/win/visualElements/Square44x44Logo.scale-100.png differ diff --git a/resources/win/visualElements/Square44x44Logo.scale-125.png b/resources/win/visualElements/Square44x44Logo.scale-125.png new file mode 100644 index 000000000..349572606 Binary files /dev/null and b/resources/win/visualElements/Square44x44Logo.scale-125.png differ diff --git a/resources/win/visualElements/Square44x44Logo.scale-150.png b/resources/win/visualElements/Square44x44Logo.scale-150.png new file mode 100644 index 000000000..5ced0f71c Binary files /dev/null and b/resources/win/visualElements/Square44x44Logo.scale-150.png differ diff --git a/resources/win/visualElements/Square44x44Logo.scale-200.png b/resources/win/visualElements/Square44x44Logo.scale-200.png new file mode 100644 index 000000000..5d3129055 Binary files /dev/null and b/resources/win/visualElements/Square44x44Logo.scale-200.png differ diff --git a/resources/win/visualElements/Square44x44Logo.scale-400.png b/resources/win/visualElements/Square44x44Logo.scale-400.png new file mode 100644 index 000000000..93aba07d8 Binary files /dev/null and b/resources/win/visualElements/Square44x44Logo.scale-400.png differ diff --git a/resources/win/visualElements/Square71x71Logo.scale-100.png b/resources/win/visualElements/Square71x71Logo.scale-100.png new file mode 100644 index 000000000..9bb9958c1 Binary files /dev/null and b/resources/win/visualElements/Square71x71Logo.scale-100.png differ diff --git a/resources/win/visualElements/Square71x71Logo.scale-125.png b/resources/win/visualElements/Square71x71Logo.scale-125.png new file mode 100644 index 000000000..8bc331c23 Binary files /dev/null and b/resources/win/visualElements/Square71x71Logo.scale-125.png differ diff --git a/resources/win/visualElements/Square71x71Logo.scale-150.png b/resources/win/visualElements/Square71x71Logo.scale-150.png new file mode 100644 index 000000000..43801e7cd Binary files /dev/null and b/resources/win/visualElements/Square71x71Logo.scale-150.png differ diff --git a/resources/win/visualElements/Square71x71Logo.scale-200.png b/resources/win/visualElements/Square71x71Logo.scale-200.png new file mode 100644 index 000000000..39f787c56 Binary files /dev/null and b/resources/win/visualElements/Square71x71Logo.scale-200.png differ diff --git a/resources/win/visualElements/Square71x71Logo.scale-400.png b/resources/win/visualElements/Square71x71Logo.scale-400.png new file mode 100644 index 000000000..d94bbeee1 Binary files /dev/null and b/resources/win/visualElements/Square71x71Logo.scale-400.png differ diff --git a/script/bootstrap b/script/bootstrap index e625ee26a..f6bd85e15 100755 --- a/script/bootstrap +++ b/script/bootstrap @@ -2,7 +2,6 @@ 'use strict' -const path = require('path') const CONFIG = require('./config') const childProcess = require('child_process') const cleanDependencies = require('./lib/clean-dependencies') diff --git a/script/config.js b/script/config.js index 487655dbf..4648a2954 100644 --- a/script/config.js +++ b/script/config.js @@ -3,7 +3,6 @@ 'use strict'; -const fs = require('fs'); const path = require('path'); const spawnSync = require('./lib/spawn-sync'); @@ -31,6 +30,12 @@ const appName = getAppName(channel); const executableName = getExecutableName(channel, appName); const channelName = getChannelName(channel); +// Sets the installation jobs to run maximally in parallel if the user has +// not already configured this. This is applied just by requiring this file. +if (process.env.npm_config_jobs === undefined) { + process.env.npm_config_jobs = 'max'; +} + const REPO_OWNER = process.env.REPO_OWNER || 'atom'; const MAIN_REPO = process.env.MAIN_REPO || 'atom'; const NIGHTLY_RELEASE_REPO = @@ -58,6 +63,7 @@ module.exports = { homeDirPath, getApmBinPath, getNpmBinPath, + getLocalNpmBinPath, snapshotAuxiliaryData: {}, REPO_OWNER, MAIN_REPO, @@ -118,23 +124,20 @@ function getApmBinPath() { ); } -function getNpmBinPath(external = false) { - if (process.env.NPM_BIN_PATH) return process.env.NPM_BIN_PATH; +function getNpmBinPath() { + return process.platform === 'win32' ? 'npm.cmd' : 'npm'; +} +function getLocalNpmBinPath() { + // NOTE this assumes that npm is installed as a script-runner dependency const npmBinName = process.platform === 'win32' ? 'npm.cmd' : 'npm'; const localNpmBinPath = path.resolve( repositoryRootPath, 'script', + 'script-runner', 'node_modules', '.bin', npmBinName ); - return !external && fs.existsSync(localNpmBinPath) - ? localNpmBinPath - : npmBinName; -} - -// parallel build in node-gyp -if (!process.env.JOBS) { - process.env.JOBS = 'max'; + return localNpmBinPath; } diff --git a/script/lib/check-chromedriver-version.js b/script/lib/check-chromedriver-version.js index b7cad2e18..69159aad0 100644 --- a/script/lib/check-chromedriver-version.js +++ b/script/lib/check-chromedriver-version.js @@ -5,6 +5,12 @@ const semver = require('semver'); const chromedriverMetadataPath = require('electron-chromedriver/package.json'); const mksnapshotMetadataPath = require('electron-mksnapshot/package.json'); +// The enviroment variable is usually set in install-script-dependencies.js +const majorElectronVersion = semver.major( + process.env.ELECTRON_CUSTOM_VERSION || + require('../config').appMetadata.electronVersion +); + module.exports = function() { // Chromedriver should be at least v9.0.0 // Mksnapshot should be at least v9.0.2 @@ -26,15 +32,15 @@ module.exports = function() { ); } - if (!semver.satisfies(chromedriverActualVer, '>=9.0.0')) { + if (!semver.satisfies(chromedriverActualVer, `>=${majorElectronVersion}`)) { throw new Error( - `electron-chromedriver should be at least v9.0.0 to support the ELECTRON_CUSTOM_VERSION environment variable.` + `electron-chromedriver should be at least v${majorElectronVersion} to support the ELECTRON_CUSTOM_VERSION environment variable.` ); } - if (!semver.satisfies(mksnapshotActualVer, '>=9.0.2')) { + if (!semver.satisfies(mksnapshotActualVer, `>=${majorElectronVersion}`)) { throw new Error( - `electron-mksnapshot should be at least v9.0.2 to support the ELECTRON_CUSTOM_VERSION environment variable.` + `electron-mksnapshot should be at least v${majorElectronVersion} to support the ELECTRON_CUSTOM_VERSION environment variable.` ); } }; diff --git a/script/lib/download-file-from-github.js b/script/lib/download-file-from-github.js index 650b3c480..1e58e63f4 100644 --- a/script/lib/download-file-from-github.js +++ b/script/lib/download-file-from-github.js @@ -9,7 +9,8 @@ module.exports = function(downloadURL, destinationPath) { const response = syncRequest('GET', downloadURL, { headers: { Accept: 'application/vnd.github.v3.raw', - 'User-Agent': 'Atom Build' + 'User-Agent': 'Atom Build', + Authorization: `token ${process.env.GITHUB_TOKEN}` } }); diff --git a/script/lib/dump-symbols.js b/script/lib/dump-symbols.js index f454d574c..7142ad479 100644 --- a/script/lib/dump-symbols.js +++ b/script/lib/dump-symbols.js @@ -27,7 +27,9 @@ function dumpSymbol(binaryPath) { return new Promise(function(resolve, reject) { minidump.dumpSymbol(binaryPath, function(error, content) { if (error) { - console.error(error); + // fswin.node is only used on windows, ignore the error on other platforms + if (process.platform !== 'win32' && binaryPath.match(/fswin.node/)) + return resolve(); throw new Error(error); } else { const moduleLine = /MODULE [^ ]+ [^ ]+ ([0-9A-F]+) (.*)\n/.exec( diff --git a/script/lib/install-apm.js b/script/lib/install-apm.js index 03b47cff9..e0c81b596 100644 --- a/script/lib/install-apm.js +++ b/script/lib/install-apm.js @@ -5,11 +5,15 @@ const childProcess = require('child_process'); const CONFIG = require('../config'); function installApm(ci = false, showVersion = true) { + if (ci) { + // Tell apm not to dedupe its own dependencies during its + // postinstall script. (Deduping during `npm ci` runs is broken.) + process.env.NO_APM_DEDUPE = 'true'; + } console.log('Installing apm'); - // npm ci leaves apm with a bunch of unmet dependencies childProcess.execFileSync( - CONFIG.getNpmBinPath(), - ['--global-style', '--loglevel=error', 'install'], + CONFIG.getLocalNpmBinPath(), + ['--global-style', '--loglevel=error', ci ? 'ci' : 'install'], { env: process.env, cwd: CONFIG.apmRootPath } ); if (showVersion) { diff --git a/script/lib/package-application.js b/script/lib/package-application.js index 84a853aaa..420d12ac0 100644 --- a/script/lib/package-application.js +++ b/script/lib/package-application.js @@ -140,7 +140,7 @@ function copyNonASARResources(packagedAppPath, bundledResourcesPath) { 'folder.ico' ].forEach(file => fs.copySync( - path.join('resources', 'win', file), + path.join(CONFIG.repositoryRootPath, 'resources', 'win', file), path.join(bundledResourcesPath, 'cli', file) ) ); diff --git a/script/lib/update-dependency/fetch-outdated-dependencies.js b/script/lib/update-dependency/fetch-outdated-dependencies.js index 7678784f7..54cddd922 100644 --- a/script/lib/update-dependency/fetch-outdated-dependencies.js +++ b/script/lib/update-dependency/fetch-outdated-dependencies.js @@ -44,13 +44,14 @@ const apm = async function({ dependencies, packageDependencies }) { const npm = async function(cwd) { try { - console.log('Checking npm registry...'); + console.log('Checking npm registry...', cwd); const currentState = await npmCheck({ cwd, ignoreDev: true, skipUnused: true }); + const outdatedPackages = currentState .get('packages') .filter(p => { diff --git a/script/lib/update-dependency/git.js b/script/lib/update-dependency/git.js index d9e6353c6..f38dce795 100644 --- a/script/lib/update-dependency/git.js +++ b/script/lib/update-dependency/git.js @@ -21,27 +21,33 @@ const git = (git, repositoryRootPath) => { } catch (ex) { console.log(ex.message); } + + async function createOrCheckoutBranch(newBranch) { + await git.fetch(); + const { branches } = await git.branch(); + const found = Object.keys(branches).find( + branch => branch.indexOf(newBranch) > -1 + ); + found + ? await git.checkout(found) + : await git.checkoutLocalBranch(newBranch); + + return { found, newBranch }; + } + return { - switchToMaster: async function() { + switchToCleanBranch: async function() { + const cleanBranch = 'clean-branch'; const { current } = await git.branch(); - if (current !== 'master') { - await git.checkout('master'); - } + if (current !== cleanBranch) createOrCheckoutBranch(cleanBranch); }, makeBranch: async function(dependency) { const newBranch = `${dependency.moduleName}-${dependency.latest}`; - const { branches } = await git.branch(); const { files } = await git.status(); if (files.length > 0) { await git.reset('hard'); } - const found = Object.keys(branches).find( - branch => branch.indexOf(newBranch) > -1 - ); - found - ? await git.checkout(found) - : await git.checkoutLocalBranch(newBranch); - return { found, newBranch }; + return createOrCheckoutBranch(newBranch); }, createCommit: async function({ moduleName, latest }) { try { diff --git a/script/lib/update-dependency/main.js b/script/lib/update-dependency/main.js index 733108203..bd6781c10 100644 --- a/script/lib/update-dependency/main.js +++ b/script/lib/update-dependency/main.js @@ -17,7 +17,7 @@ const runApmInstall = require('../run-apm-install'); const { makeBranch, createCommit, - switchToMaster, + switchToCleanBranch, publishBranch, deleteBranch } = require('./git')(git, repositoryRootPath); @@ -27,7 +27,7 @@ const fetchOutdatedDependencies = require('./fetch-outdated-dependencies'); module.exports = async function() { try { // ensure we are on master - await switchToMaster(); + await switchToCleanBranch(); const failedBumps = []; const successfullBumps = []; const outdateDependencies = [ @@ -69,7 +69,7 @@ module.exports = async function() { }); } - await switchToMaster(); + await switchToCleanBranch(); } // create PRs here for (const { dependency, branch, branchIsRemote } of pendingPRs) { diff --git a/script/lib/update-dependency/spec/git-spec.js b/script/lib/update-dependency/spec/git-spec.js index fca2ca765..ed11c46b1 100644 --- a/script/lib/update-dependency/spec/git-spec.js +++ b/script/lib/update-dependency/spec/git-spec.js @@ -4,7 +4,7 @@ const repositoryRootPath = path.resolve('.', 'fixtures', 'dummy'); const git = simpleGit(repositoryRootPath); const { - switchToMaster, + switchToCleanBranch, makeBranch, publishBranch, createCommit, @@ -23,7 +23,7 @@ describe('GIT', () => { const branch = `${dependency.moduleName}-${dependency.latest}`; beforeEach(async () => { - await git.checkout('master'); + await git.checkout('clean-branch'); }); it('remotes should include ATOM', async () => { @@ -31,14 +31,14 @@ describe('GIT', () => { expect(remotes.map(({ name }) => name).includes('ATOM')).toBeTruthy(); }); - it('current branch should be master', async () => { + it('current branch should be clean-branch', async () => { const testBranchExists = await findBranch('test'); testBranchExists ? await git.checkout('test') : await git.checkoutLocalBranch('test'); expect((await git.branch()).current).toBe('test'); - await switchToMaster(); - expect((await git.branch()).current).toBe('master'); + await switchToCleanBranch(); + expect((await git.branch()).current).toBe('clean-branch'); await git.deleteLocalBranch('test', true); }); @@ -47,7 +47,7 @@ describe('GIT', () => { expect(found).toBe(undefined); expect(newBranch).toBe(branch); expect((await git.branch()).current).toBe(branch); - await git.checkout('master'); + await git.checkout('clean-branch'); await git.deleteLocalBranch(branch, true); }); @@ -56,7 +56,7 @@ describe('GIT', () => { const { found } = await makeBranch(dependency); expect(found).not.toBe(undefined); expect((await git.branch()).current).toBe(found); - await git.checkout('master'); + await git.checkout('clean-branch'); await git.deleteLocalBranch(branch, true); }); @@ -86,7 +86,7 @@ describe('GIT', () => { it('should delete an existing branch', async () => { await git.checkoutLocalBranch(branch); - await git.checkout('master'); + await git.checkout('clean-branch'); expect(await findBranch(branch)).not.toBe(undefined); await deleteBranch(branch); expect(await findBranch(branch)).toBe(undefined); diff --git a/script/lib/verify-machine-requirements.js b/script/lib/verify-machine-requirements.js index ccc4a6841..afac015d5 100644 --- a/script/lib/verify-machine-requirements.js +++ b/script/lib/verify-machine-requirements.js @@ -3,45 +3,20 @@ const childProcess = require('child_process'); const path = require('path'); -const CONFIG = require('../config'); - module.exports = function(ci) { verifyNode(); - verifyNpm(ci); verifyPython(); }; function verifyNode() { const fullVersion = process.versions.node; const majorVersion = fullVersion.split('.')[0]; - if (majorVersion >= 6) { + const minorVersion = fullVersion.split('.')[1]; + if (majorVersion >= 11 || (majorVersion === '10' && minorVersion >= 12)) { console.log(`Node:\tv${fullVersion}`); - } else if (majorVersion >= 4) { - console.log(`Node:\tv${fullVersion}`); - console.warn( - '\tWarning: Building on Node below version 6 is deprecated. Please use Node 6.x+ to build Atom.' - ); } else { throw new Error( - `node v4+ is required to build Atom. node v${fullVersion} is installed.` - ); - } -} - -function verifyNpm(ci) { - const stdout = childProcess.execFileSync( - CONFIG.getNpmBinPath(ci), - ['--version'], - { env: process.env } - ); - const fullVersion = stdout.toString().trim(); - const majorVersion = fullVersion.split('.')[0]; - const oldestMajorVersionSupported = ci ? 6 : 3; - if (majorVersion >= oldestMajorVersionSupported) { - console.log(`Npm:\tv${fullVersion}`); - } else { - throw new Error( - `npm v${oldestMajorVersionSupported}+ is required to build Atom. npm v${fullVersion} was detected.` + `node v10.12+ is required to build Atom. node v${fullVersion} is installed.` ); } } @@ -94,7 +69,7 @@ function verifyPython() { env: process.env, stdio: ['ignore', 'pipe', 'ignore'] }); - } catch {} + } catch (e) {} if (stdout) { if (stdout.indexOf('+') !== -1) diff --git a/script/package-lock.json b/script/package-lock.json index 815c08139..04addc4cc 100644 --- a/script/package-lock.json +++ b/script/package-lock.json @@ -350,6 +350,52 @@ "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==" }, + "@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "requires": { + "cross-spawn": "^7.0.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -400,6 +446,14 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==" + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } } } }, @@ -435,9 +489,9 @@ } }, "@types/glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "optional": true, "requires": { "@types/minimatch": "*", @@ -445,9 +499,9 @@ } }, "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "optional": true }, "@types/node": { @@ -879,9 +933,9 @@ } }, "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" } } }, @@ -891,12 +945,9 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" }, "async": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", - "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", - "requires": { - "lodash": "^4.8.0" - } + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, "asynckit": { "version": "0.4.0", @@ -2000,6 +2051,26 @@ "which": "^1.2.8" } }, + "cross-spawn-windows-exe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz", + "integrity": "sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw==", + "requires": { + "@malept/cross-spawn-promise": "^1.1.0", + "is-wsl": "^2.2.0", + "which": "^2.0.2" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", @@ -2667,34 +2738,34 @@ } }, "electron-chromedriver": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-9.0.0.tgz", - "integrity": "sha512-+MuukzicyfduXO/4yQv9ygLKaScttJNbWtg77A9fs2YhbkISjObWaCF3eJNZL+edZXRfaF/6D4XuXvklQCmwQg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-11.0.0.tgz", + "integrity": "sha512-ayMJPBbB4puU0SqYbcD9XvF3/7GWIhqKE1n5lG2/GQPRnrZkNoPIilsrS0rQcD50Xhl69KowatDqLhUznZWtbA==", "requires": { "@electron/get": "^1.12.2", "extract-zip": "^2.0.0" } }, "electron-link": { - "version": "npm:@aminya/electron-link@0.6.3", - "resolved": "https://registry.npmjs.org/@aminya/electron-link/-/electron-link-0.6.3.tgz", - "integrity": "sha512-F0csI7qFLL31PY8O/AtUBX5g5zsHRzCov0Fb6stj0MKOGT+M98u82R75DNbOWdteR+MgWfCshvPVPdkEEQLmXg==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/electron-link/-/electron-link-0.6.0.tgz", + "integrity": "sha512-sSxU9c7ABIH8csvAveTwgrG5g7Nbcuh/MBPF5exeWgzd0RLJYNWuD66eMpPRo9/qwqyPc8FJvHRF7EIN5Ylqqg==", "requires": { - "acorn": "^8.0.1", + "acorn": "^8.0.4", "ast-util-plus": "^0.7.1", "encoding-down": "^6.3.0", "indent-string": "^4.0.0", "leveldown": "^5.6.0", "levelup": "^4.4.0", - "recast": "^0.20.3", - "resolve": "^1.17.0", + "recast": "^0.20.4", + "resolve": "^1.19.0", "source-map": "^0.7.3" }, "dependencies": { "acorn": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", - "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==" + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz", + "integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==" }, "ast-types": { "version": "0.14.2", @@ -2728,11 +2799,11 @@ } }, "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "requires": { - "is-core-module": "^2.1.0", + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, @@ -2742,16 +2813,16 @@ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" }, "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" } } }, "electron-mksnapshot": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/electron-mksnapshot/-/electron-mksnapshot-9.0.2.tgz", - "integrity": "sha512-885PfbJuNlvfmOPNoOj8SG1/i2WlqdcogN86o2/uPGOvPWTTRyYNfutzbWUjRDUB+Wl7TC9rT8f40tNp+N/xDw==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/electron-mksnapshot/-/electron-mksnapshot-11.0.1.tgz", + "integrity": "sha512-o64lEpzq6Wvxx9EnIMGihLfrTr8vwPpUXkhxc9UseciCFFoaJml0SnMBknGjqrOrEujVFwcuX67YD5AzXojyHA==", "requires": { "@electron/get": "^1.12.2", "extract-zip": "^2.0.0", @@ -2780,63 +2851,33 @@ } }, "electron-notarize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.0.0.tgz", - "integrity": "sha512-dsib1IAquMn0onCrNMJ6gtEIZn/azG8hZMCYOuZIMVMUeRMgBYHK1s5TK9P8xAcrAjh/2aN5WYHzgVSWX314og==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.1.1.tgz", + "integrity": "sha512-kufsnqh86CTX89AYNG3NCPoboqnku/+32RxeJ2+7A4Rbm4bbOx0Nc7XTy3/gAlBfpj9xPAxHfhZLOHgfi6cJVw==", "requires": { "debug": "^4.1.1", "fs-extra": "^9.0.1" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { - "ms": "^2.1.1" - } - }, - "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" + "ms": "2.1.2" } }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" } } }, "electron-osx-sign": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.17.tgz", - "integrity": "sha512-wUJPmZJQCs1zgdlQgeIpRcvrf7M5/COQaOV68Va1J/SgmWx5KL2otgg+fAae7luw6qz9R8Gvu/Qpe9tAOu/3xQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz", + "integrity": "sha512-icoRLHzFz/qxzDh/N4Pi2z4yVHurlsCAYQvsCSG7fCedJ4UJXBS6PoQyGH71IfcqKupcKeK7HX/NkyfG+v6vlQ==", "requires": { "bluebird": "^3.5.0", "compare-version": "^0.1.2", @@ -2854,15 +2895,16 @@ } }, "electron-packager": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-15.0.0.tgz", - "integrity": "sha512-J0yQP7/fKPkjxo9Yz5+vsQVig0dBbSXW8LQYA1pvNMvi+bL00hfI2SAyORP6EU7XaeiXGUIBSG2Px01EkKfGCw==", + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-15.4.0.tgz", + "integrity": "sha512-JrrLcBP15KGrPj0cZ/ALKGmaQ4gJkn3mocf0E3bRKdR3kxKWYcDRpCvdhksYDXw/r3I6tMEcZ7XzyApWFXdVpw==", "requires": { "@electron/get": "^1.6.0", - "asar": "^3.0.0", + "asar": "^3.1.0", + "cross-spawn-windows-exe": "^1.2.0", "debug": "^4.0.1", - "electron-notarize": "^1.0.0", - "electron-osx-sign": "^0.4.11", + "electron-notarize": "^1.1.1", + "electron-osx-sign": "^0.5.0", "extract-zip": "^2.0.0", "filenamify": "^4.1.0", "fs-extra": "^9.0.0", @@ -2871,16 +2913,16 @@ "junk": "^3.1.0", "parse-author": "^2.0.0", "plist": "^3.0.0", - "rcedit": "^2.0.0", + "rcedit": "^3.0.1", "resolve": "^1.1.6", "semver": "^7.1.3", - "yargs-parser": "^18.0.0" + "yargs-parser": "^20.0.0" }, "dependencies": { "asar": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/asar/-/asar-3.0.3.tgz", - "integrity": "sha512-k7zd+KoR+n8pl71PvgElcoKHrVNiSXtw7odKbyNpmgKe7EGRF9Pnu3uLOukD37EvavKwVFxOUpqXTIZC5B5Pmw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-3.1.0.tgz", + "integrity": "sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ==", "requires": { "@types/glob": "^7.1.1", "chromium-pickle-js": "^0.2.0", @@ -2889,39 +2931,23 @@ "minimatch": "^3.0.4" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, "commander": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { - "ms": "^2.1.1" - } - }, - "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "ms": "2.1.2" } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2931,24 +2957,18 @@ "path-is-absolute": "^1.0.0" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" + "yallist": "^4.0.0" } }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -2959,23 +2979,22 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" } } }, @@ -3025,9 +3044,9 @@ "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==" }, "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "requires": { "prr": "~1.0.1" } @@ -3182,11 +3201,6 @@ "esutils": "^2.0.2" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", @@ -4101,9 +4115,9 @@ "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" }, "filenamify": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.1.0.tgz", - "integrity": "sha512-KQV/uJDI9VQgN7sHH1Zbk6+42cD6mnQ2HONzkXUfPJ+K2FC8GZ1dpewbbHw0Sz8Tf5k3EVdHVayM4DoAwWlmtg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", "requires": { "filename-reserved-regex": "^2.0.0", "strip-outer": "^1.0.1", @@ -4172,11 +4186,11 @@ }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "fs-extra": { @@ -4326,9 +4340,9 @@ }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "requires": { "ms": "^2.1.1" } @@ -4352,9 +4366,9 @@ } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, @@ -5234,6 +5248,11 @@ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, "is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", @@ -5448,6 +5467,14 @@ "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz", "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==" }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -6126,9 +6153,9 @@ "integrity": "sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ==" }, "minidump": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/minidump/-/minidump-0.9.0.tgz", - "integrity": "sha1-Ei6d8kTzCPNEnvunpOLDIfQmwfk=" + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/minidump/-/minidump-0.22.0.tgz", + "integrity": "sha512-6gg9AgtjzACB5WsDu/jzQ4Fn1s4LENhgN0vTH3RyeWlpNuXnjwviEWX//VgimEyqMVdnRynry+8aZUAtLIUXCQ==" }, "minimatch": { "version": "2.0.10", @@ -6312,9 +6339,12 @@ } }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } }, "node-gyp-build": { "version": "4.1.1", @@ -6364,14 +6394,14 @@ "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=" }, "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" }, "npm": { - "version": "6.14.8", - "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.8.tgz", - "integrity": "sha512-HBZVBMYs5blsj94GTeQZel7s9odVuuSUHy1+AlZh7rPVux1os2ashvEGLy/STNK7vUjbrCg5Kq9/GXisJgdf6A==", + "version": "6.14.16", + "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.16.tgz", + "integrity": "sha512-LMiLGYsVNJfVPlQg7v2NYjG7iRIapcLv+oMunlq7fkXVx0BATCjRu7XyWl0G+iuZzHy4CjtM32QB8ox8juTgaw==", "requires": { "JSONStream": "^1.3.5", "abbrev": "~1.1.1", @@ -6404,13 +6434,13 @@ "glob": "^7.1.6", "graceful-fs": "^4.2.4", "has-unicode": "~2.0.1", - "hosted-git-info": "^2.8.8", + "hosted-git-info": "^2.8.9", "iferr": "^1.0.2", "imurmurhash": "*", "infer-owner": "^1.0.4", "inflight": "~1.0.6", "inherits": "^2.0.4", - "ini": "^1.3.5", + "ini": "^1.3.8", "init-package-json": "^1.10.3", "is-cidr": "^3.0.0", "json-parse-better-errors": "^1.0.2", @@ -6453,10 +6483,10 @@ "npm-pick-manifest": "^3.0.2", "npm-profile": "^4.0.4", "npm-registry-fetch": "^4.0.7", - "npm-user-validate": "~1.0.0", + "npm-user-validate": "^1.0.1", "npmlog": "~4.1.2", "once": "~1.4.0", - "opener": "^1.5.1", + "opener": "^1.5.2", "osenv": "^0.1.5", "pacote": "^9.5.12", "path-is-inside": "~1.0.2", @@ -6480,9 +6510,9 @@ "slide": "~1.1.6", "sorted-object": "~2.0.1", "sorted-union-stream": "~2.1.3", - "ssri": "^6.0.1", + "ssri": "^6.0.2", "stringify-package": "^1.0.1", - "tar": "^4.4.13", + "tar": "^4.4.19", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "uid-number": "0.0.6", @@ -6524,16 +6554,6 @@ "humanize-ms": "^1.2.1" } }, - "ajv": { - "version": "5.5.2", - "bundled": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, "ansi-align": { "version": "2.0.0", "bundled": true, @@ -6819,10 +6839,6 @@ "mkdirp": "~0.5.0" } }, - "co": { - "version": "4.6.0", - "bundled": true - }, "code-point-at": { "version": "1.1.0", "bundled": true @@ -7211,10 +7227,6 @@ "version": "1.3.0", "bundled": true }, - "fast-deep-equal": { - "version": "1.1.0", - "bundled": true - }, "fast-json-stable-stringify": { "version": "2.0.0", "bundled": true @@ -7499,11 +7511,31 @@ "bundled": true }, "har-validator": { - "version": "5.1.0", + "version": "5.1.5", "bundled": true, "requires": { - "ajv": "^5.3.0", + "ajv": "^6.12.3", "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "bundled": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "bundled": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "bundled": true + } } }, "has": { @@ -7526,7 +7558,7 @@ "bundled": true }, "hosted-git-info": { - "version": "2.8.8", + "version": "2.8.9", "bundled": true }, "http-cache-semantics": { @@ -7608,7 +7640,7 @@ "bundled": true }, "ini": { - "version": "1.3.5", + "version": "1.3.8", "bundled": true }, "init-package-json": { @@ -7743,11 +7775,7 @@ "bundled": true }, "json-schema": { - "version": "0.2.3", - "bundled": true - }, - "json-schema-traverse": { - "version": "0.3.1", + "version": "0.4.0", "bundled": true }, "json-stringify-safe": { @@ -7759,12 +7787,12 @@ "bundled": true }, "jsprim": { - "version": "1.4.1", + "version": "1.4.2", "bundled": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" } }, @@ -8320,7 +8348,7 @@ } }, "npm-user-validate": { - "version": "1.0.0", + "version": "1.0.1", "bundled": true }, "npmlog": { @@ -8365,7 +8393,7 @@ } }, "opener": { - "version": "1.5.1", + "version": "1.5.2", "bundled": true }, "os-homedir": { @@ -8492,7 +8520,7 @@ "bundled": true }, "path-parse": { - "version": "1.0.6", + "version": "1.0.7", "bundled": true }, "performance-now": { @@ -8926,7 +8954,7 @@ } }, "ssri": { - "version": "6.0.1", + "version": "6.0.2", "bundled": true, "requires": { "figgy-pudding": "^3.5.1" @@ -9043,16 +9071,16 @@ } }, "tar": { - "version": "4.4.13", + "version": "4.4.19", "bundled": true, "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" }, "dependencies": { "minipass": { @@ -9062,6 +9090,14 @@ "safe-buffer": "^5.1.2", "yallist": "^3.0.0" } + }, + "safe-buffer": { + "version": "5.2.1", + "bundled": true + }, + "yallist": { + "version": "3.1.1", + "bundled": true } } }, @@ -9195,6 +9231,19 @@ "xdg-basedir": "^3.0.0" } }, + "uri-js": { + "version": "4.4.0", + "bundled": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "bundled": true + } + } + }, "url-parse-lax": { "version": "1.0.0", "bundled": true, @@ -9352,7 +9401,7 @@ "bundled": true }, "y18n": { - "version": "4.0.0", + "version": "4.0.1", "bundled": true }, "yallist": { @@ -10119,13 +10168,19 @@ } }, "plist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz", - "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz", + "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==", "requires": { - "base64-js": "^1.2.3", - "xmlbuilder": "^9.0.7", - "xmldom": "0.1.x" + "base64-js": "^1.5.1", + "xmlbuilder": "^9.0.7" + }, + "dependencies": { + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + } } }, "posix-character-classes": { @@ -10557,9 +10612,12 @@ } }, "rcedit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-2.2.0.tgz", - "integrity": "sha512-dhFtYmQS+V8qQIANyX6zDK+sO50ayDePKApi46ZPK8I6QeyyTDD6LManMa7a3p3c9mLM4zi9QBP41pfhQ9p7Sg==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-3.0.1.tgz", + "integrity": "sha512-XM0Jv40/y4hVAqj/MO70o/IWs4uOsaSoo2mLyk3klFDW+SStLnCtzuQu+1OBTIMGlM8CvaK9ftlYCp6DJ+cMsw==", + "requires": { + "cross-spawn-windows-exe": "^1.1.0" + } }, "read-installed": { "version": "3.1.3", @@ -12426,6 +12484,11 @@ } } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, "trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", @@ -12927,6 +12990,20 @@ "webdriver": "^5.9.1" } }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -13100,11 +13177,6 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" }, - "xmldom": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", - "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==" - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/script/package.json b/script/package.json index c2d21f2d0..ccd6bc266 100644 --- a/script/package.json +++ b/script/package.json @@ -5,17 +5,17 @@ "7zip-bin": "^4.0.2", "@atom/electron-winstaller": "0.0.1", "@octokit/request": "^5.4.5", - "async": "2.0.1", + "async": "^3.2.0", "babel-core": "5.8.38", "babel-eslint": "^10.0.1", "cheerio": "1.0.0-rc.2", "coffeelint": "1.15.7", "colors": "1.1.2", "donna": "1.0.16", - "electron-chromedriver": "^9.0.0", - "electron-link": "npm:@aminya/electron-link@^0.6.3", - "electron-mksnapshot": "^9.0.2", - "electron-packager": "^15.0.0", + "electron-chromedriver": "^11.0.0", + "electron-link": "^0.6.0", + "electron-mksnapshot": "^11.0.1", + "electron-packager": "^15.1.0", "eslint": "^5.16.0", "eslint-config-prettier": "^4.2.0", "eslint-config-standard": "^12.0.0", @@ -32,12 +32,12 @@ "legal-eagle": "0.14.0", "lodash.startcase": "4.4.0", "lodash.template": "4.5.0", - "minidump": "0.9.0", + "minidump": "^0.22.0", "mkdirp": "0.5.1", "nock": "^13.0.2", - "node-fetch": "^2.6.1", + "node-fetch": "^2.6.7", "normalize-package-data": "2.3.5", - "npm": "6.14.8", + "npm": "^6.14.16", "npm-check": "^5.9.2", "passwd-user": "2.1.0", "pegjs": "0.9.0", diff --git a/script/script-runner/package-lock.json b/script/script-runner/package-lock.json index fe0a56223..493106319 100644 --- a/script/script-runner/package-lock.json +++ b/script/script-runner/package-lock.json @@ -35,6 +35,3108 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "npm": { + "version": "6.14.17", + "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.17.tgz", + "integrity": "sha512-CxEDn1ydVRPDl4tHrlnq+WevYAhv4GF2AEHzJKQ4prZDZ96IS3Uo6t0Sy6O9kB6XzqkI+J00WfYCqqk0p6IJ1Q==", + "requires": { + "JSONStream": "^1.3.5", + "abbrev": "~1.1.1", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "aproba": "^2.0.0", + "archy": "~1.0.0", + "bin-links": "^1.1.8", + "bluebird": "^3.5.5", + "byte-size": "^5.0.1", + "cacache": "^12.0.3", + "call-limit": "^1.1.1", + "chownr": "^1.1.4", + "ci-info": "^2.0.0", + "cli-columns": "^3.1.2", + "cli-table3": "^0.5.1", + "cmd-shim": "^3.0.3", + "columnify": "~1.5.4", + "config-chain": "^1.1.12", + "debuglog": "*", + "detect-indent": "~5.0.0", + "detect-newline": "^2.1.0", + "dezalgo": "~1.0.3", + "editor": "~1.0.0", + "figgy-pudding": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "fs-vacuum": "~1.2.10", + "fs-write-stream-atomic": "~1.0.10", + "gentle-fs": "^2.3.1", + "glob": "^7.1.6", + "graceful-fs": "^4.2.4", + "has-unicode": "~2.0.1", + "hosted-git-info": "^2.8.9", + "iferr": "^1.0.2", + "imurmurhash": "*", + "infer-owner": "^1.0.4", + "inflight": "~1.0.6", + "inherits": "^2.0.4", + "ini": "^1.3.8", + "init-package-json": "^1.10.3", + "is-cidr": "^3.0.0", + "json-parse-better-errors": "^1.0.2", + "lazy-property": "~1.0.0", + "libcipm": "^4.0.8", + "libnpm": "^3.0.1", + "libnpmaccess": "^3.0.2", + "libnpmhook": "^5.0.3", + "libnpmorg": "^1.0.1", + "libnpmsearch": "^2.0.2", + "libnpmteam": "^1.0.2", + "libnpx": "^10.2.4", + "lock-verify": "^2.1.0", + "lockfile": "^1.0.4", + "lodash._baseindexof": "*", + "lodash._baseuniq": "~4.6.0", + "lodash._bindcallback": "*", + "lodash._cacheindexof": "*", + "lodash._createcache": "*", + "lodash._getnative": "*", + "lodash.clonedeep": "~4.5.0", + "lodash.restparam": "*", + "lodash.union": "~4.6.0", + "lodash.uniq": "~4.5.0", + "lodash.without": "~4.4.0", + "lru-cache": "^5.1.1", + "meant": "^1.0.2", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.5", + "move-concurrently": "^1.0.1", + "node-gyp": "^5.1.0", + "nopt": "^4.0.3", + "normalize-package-data": "^2.5.0", + "npm-audit-report": "^1.3.3", + "npm-cache-filename": "~1.0.2", + "npm-install-checks": "^3.0.2", + "npm-lifecycle": "^3.1.5", + "npm-package-arg": "^6.1.1", + "npm-packlist": "^1.4.8", + "npm-pick-manifest": "^3.0.2", + "npm-profile": "^4.0.4", + "npm-registry-fetch": "^4.0.7", + "npm-user-validate": "^1.0.1", + "npmlog": "~4.1.2", + "once": "~1.4.0", + "opener": "^1.5.2", + "osenv": "^0.1.5", + "pacote": "^9.5.12", + "path-is-inside": "~1.0.2", + "promise-inflight": "~1.0.1", + "qrcode-terminal": "^0.12.0", + "query-string": "^6.8.2", + "qw": "~1.0.1", + "read": "~1.0.7", + "read-cmd-shim": "^1.0.5", + "read-installed": "~4.0.3", + "read-package-json": "^2.1.1", + "read-package-tree": "^5.3.1", + "readable-stream": "^3.6.0", + "readdir-scoped-modules": "^1.1.0", + "request": "^2.88.0", + "retry": "^0.12.0", + "rimraf": "^2.7.1", + "safe-buffer": "^5.1.2", + "semver": "^5.7.1", + "sha": "^3.0.0", + "slide": "~1.1.6", + "sorted-object": "~2.0.1", + "sorted-union-stream": "~2.1.3", + "ssri": "^6.0.2", + "stringify-package": "^1.0.1", + "tar": "^4.4.19", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "uid-number": "0.0.6", + "umask": "~1.1.0", + "unique-filename": "^1.1.1", + "unpipe": "~1.0.0", + "update-notifier": "^2.5.0", + "uuid": "^3.3.3", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "~3.0.0", + "which": "^1.3.1", + "worker-farm": "^1.7.0", + "write-file-atomic": "^2.4.3" + }, + "dependencies": { + "JSONStream": { + "version": "1.3.5", + "bundled": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "agent-base": { + "version": "4.3.0", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.5.2", + "bundled": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "ansi-align": { + "version": "2.0.0", + "bundled": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "ansi-styles": { + "version": "3.2.1", + "bundled": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "bundled": true + }, + "ansistyles": { + "version": "0.1.3", + "bundled": true + }, + "aproba": { + "version": "2.0.0", + "bundled": true + }, + "archy": { + "version": "1.0.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "asap": { + "version": "2.0.6", + "bundled": true + }, + "asn1": { + "version": "0.2.4", + "bundled": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "bundled": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true + }, + "aws-sign2": { + "version": "0.7.0", + "bundled": true + }, + "aws4": { + "version": "1.8.0", + "bundled": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bin-links": { + "version": "1.1.8", + "bundled": true, + "requires": { + "bluebird": "^3.5.3", + "cmd-shim": "^3.0.0", + "gentle-fs": "^2.3.0", + "graceful-fs": "^4.1.15", + "npm-normalize-package-bin": "^1.0.0", + "write-file-atomic": "^2.3.0" + } + }, + "bluebird": { + "version": "3.5.5", + "bundled": true + }, + "boxen": { + "version": "1.3.0", + "bundled": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.0.0", + "bundled": true + }, + "builtins": { + "version": "1.0.3", + "bundled": true + }, + "byline": { + "version": "5.0.0", + "bundled": true + }, + "byte-size": { + "version": "5.0.1", + "bundled": true + }, + "cacache": { + "version": "12.0.3", + "bundled": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "call-limit": { + "version": "1.1.1", + "bundled": true + }, + "camelcase": { + "version": "4.1.0", + "bundled": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true + }, + "chalk": { + "version": "2.4.1", + "bundled": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.1.4", + "bundled": true + }, + "ci-info": { + "version": "2.0.0", + "bundled": true + }, + "cidr-regex": { + "version": "2.0.10", + "bundled": true, + "requires": { + "ip-regex": "^2.1.0" + } + }, + "cli-boxes": { + "version": "1.0.0", + "bundled": true + }, + "cli-columns": { + "version": "3.1.2", + "bundled": true, + "requires": { + "string-width": "^2.0.0", + "strip-ansi": "^3.0.1" + } + }, + "cli-table3": { + "version": "0.5.1", + "bundled": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + } + }, + "cliui": { + "version": "5.0.0", + "bundled": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + }, + "string-width": { + "version": "3.1.0", + "bundled": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "bundled": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "bundled": true + }, + "cmd-shim": { + "version": "3.0.3", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "mkdirp": "~0.5.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "color-convert": { + "version": "1.9.1", + "bundled": true, + "requires": { + "color-name": "^1.1.1" + } + }, + "color-name": { + "version": "1.1.3", + "bundled": true + }, + "colors": { + "version": "1.3.3", + "bundled": true, + "optional": true + }, + "columnify": { + "version": "1.5.4", + "bundled": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.6", + "bundled": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "concat-stream": { + "version": "1.6.2", + "bundled": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "config-chain": { + "version": "1.1.12", + "bundled": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "configstore": { + "version": "3.1.5", + "bundled": true, + "requires": { + "dot-prop": "^4.2.1", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "copy-concurrently": { + "version": "1.0.5", + "bundled": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "create-error-class": { + "version": "3.0.2", + "bundled": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "bundled": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "bundled": true + } + } + }, + "crypto-random-string": { + "version": "1.0.0", + "bundled": true + }, + "cyclist": { + "version": "0.2.2", + "bundled": true + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.1.0", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "bundled": true + }, + "decamelize": { + "version": "1.2.0", + "bundled": true + }, + "decode-uri-component": { + "version": "0.2.0", + "bundled": true + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true + }, + "defaults": { + "version": "1.0.3", + "bundled": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "bundled": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true + }, + "detect-indent": { + "version": "5.0.0", + "bundled": true + }, + "detect-newline": { + "version": "2.1.0", + "bundled": true + }, + "dezalgo": { + "version": "1.0.3", + "bundled": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "dot-prop": { + "version": "4.2.1", + "bundled": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "5.0.1", + "bundled": true + }, + "duplexer3": { + "version": "0.1.4", + "bundled": true + }, + "duplexify": { + "version": "3.6.0", + "bundled": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editor": { + "version": "1.0.0", + "bundled": true + }, + "emoji-regex": { + "version": "7.0.3", + "bundled": true + }, + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "^1.4.0" + } + }, + "env-paths": { + "version": "2.2.0", + "bundled": true + }, + "err-code": { + "version": "1.1.2", + "bundled": true + }, + "errno": { + "version": "0.1.7", + "bundled": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "bundled": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "bundled": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.8", + "bundled": true + }, + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true + }, + "execa": { + "version": "0.7.0", + "bundled": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "bundled": true + } + } + }, + "extend": { + "version": "3.0.2", + "bundled": true + }, + "extsprintf": { + "version": "1.3.0", + "bundled": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "bundled": true + }, + "figgy-pudding": { + "version": "3.5.1", + "bundled": true + }, + "find-npm-prefix": { + "version": "1.0.2", + "bundled": true + }, + "flush-write-stream": { + "version": "1.0.3", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "2.3.2", + "bundled": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "requires": { + "minipass": "^2.6.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "fs-vacuum": { + "version": "1.2.10", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "path-is-inside": "^1.0.1", + "rimraf": "^2.5.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "bundled": true + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "function-bind": { + "version": "1.1.1", + "bundled": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "genfun": { + "version": "5.0.0", + "bundled": true + }, + "gentle-fs": { + "version": "2.3.1", + "bundled": true, + "requires": { + "aproba": "^1.1.2", + "chownr": "^1.1.2", + "cmd-shim": "^3.0.3", + "fs-vacuum": "^1.2.10", + "graceful-fs": "^4.1.11", + "iferr": "^0.1.5", + "infer-owner": "^1.0.4", + "mkdirp": "^0.5.1", + "path-is-inside": "^1.0.2", + "read-cmd-shim": "^1.0.1", + "slide": "^1.1.6" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true + } + } + }, + "get-caller-file": { + "version": "2.0.5", + "bundled": true + }, + "get-stream": { + "version": "4.1.0", + "bundled": true, + "requires": { + "pump": "^3.0.0" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "bundled": true, + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "bundled": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "bundled": true + } + } + }, + "graceful-fs": { + "version": "4.2.4", + "bundled": true + }, + "har-schema": { + "version": "2.0.0", + "bundled": true + }, + "har-validator": { + "version": "5.1.5", + "bundled": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "bundled": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "bundled": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "bundled": true + } + } + }, + "has": { + "version": "1.0.3", + "bundled": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "bundled": true + }, + "has-symbols": { + "version": "1.0.0", + "bundled": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "hosted-git-info": { + "version": "2.8.9", + "bundled": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "bundled": true + }, + "http-proxy-agent": { + "version": "2.1.0", + "bundled": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + } + }, + "http-signature": { + "version": "1.2.0", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "2.2.4", + "bundled": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "iferr": { + "version": "1.0.2", + "bundled": true + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-lazy": { + "version": "2.1.0", + "bundled": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true + }, + "infer-owner": { + "version": "1.0.4", + "bundled": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true + }, + "ini": { + "version": "1.3.8", + "bundled": true + }, + "init-package-json": { + "version": "1.10.3", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" + } + }, + "ip": { + "version": "1.1.5", + "bundled": true + }, + "ip-regex": { + "version": "2.1.0", + "bundled": true + }, + "is-callable": { + "version": "1.1.4", + "bundled": true + }, + "is-ci": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ci-info": "^1.5.0" + }, + "dependencies": { + "ci-info": { + "version": "1.6.0", + "bundled": true + } + } + }, + "is-cidr": { + "version": "3.0.0", + "bundled": true, + "requires": { + "cidr-regex": "^2.0.10" + } + }, + "is-date-object": { + "version": "1.0.1", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "bundled": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "bundled": true + }, + "is-obj": { + "version": "1.0.1", + "bundled": true + }, + "is-path-inside": { + "version": "1.0.1", + "bundled": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-redirect": { + "version": "1.0.0", + "bundled": true + }, + "is-regex": { + "version": "1.0.4", + "bundled": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-retry-allowed": { + "version": "1.2.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "is-symbol": { + "version": "1.0.2", + "bundled": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "bundled": true + }, + "json-schema": { + "version": "0.4.0", + "bundled": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true + }, + "jsonparse": { + "version": "1.3.1", + "bundled": true + }, + "jsprim": { + "version": "1.4.2", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "latest-version": { + "version": "3.1.0", + "bundled": true, + "requires": { + "package-json": "^4.0.0" + } + }, + "lazy-property": { + "version": "1.0.0", + "bundled": true + }, + "libcipm": { + "version": "4.0.8", + "bundled": true, + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "graceful-fs": "^4.1.11", + "ini": "^1.3.5", + "lock-verify": "^2.1.0", + "mkdirp": "^0.5.1", + "npm-lifecycle": "^3.0.0", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "pacote": "^9.1.0", + "read-package-json": "^2.0.13", + "rimraf": "^2.6.2", + "worker-farm": "^1.6.0" + } + }, + "libnpm": { + "version": "3.0.1", + "bundled": true, + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.3", + "find-npm-prefix": "^1.0.2", + "libnpmaccess": "^3.0.2", + "libnpmconfig": "^1.2.1", + "libnpmhook": "^5.0.3", + "libnpmorg": "^1.0.1", + "libnpmpublish": "^1.1.2", + "libnpmsearch": "^2.0.2", + "libnpmteam": "^1.0.2", + "lock-verify": "^2.0.2", + "npm-lifecycle": "^3.0.0", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "npm-profile": "^4.0.2", + "npm-registry-fetch": "^4.0.0", + "npmlog": "^4.1.2", + "pacote": "^9.5.3", + "read-package-json": "^2.0.13", + "stringify-package": "^1.0.0" + } + }, + "libnpmaccess": { + "version": "3.0.2", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "get-stream": "^4.0.0", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmconfig": { + "version": "1.2.1", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1", + "find-up": "^3.0.0", + "ini": "^1.3.5" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "bundled": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "bundled": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "bundled": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "bundled": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "bundled": true + } + } + }, + "libnpmhook": { + "version": "5.0.3", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmorg": { + "version": "1.0.1", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmpublish": { + "version": "1.1.2", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "lodash.clonedeep": "^4.5.0", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^4.0.0", + "semver": "^5.5.1", + "ssri": "^6.0.1" + } + }, + "libnpmsearch": { + "version": "2.0.2", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmteam": { + "version": "1.0.2", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpx": { + "version": "10.2.4", + "bundled": true, + "requires": { + "dotenv": "^5.0.1", + "npm-package-arg": "^6.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.0", + "update-notifier": "^2.3.0", + "which": "^1.3.0", + "y18n": "^4.0.0", + "yargs": "^14.2.3" + } + }, + "lock-verify": { + "version": "2.1.0", + "bundled": true, + "requires": { + "npm-package-arg": "^6.1.0", + "semver": "^5.4.1" + } + }, + "lockfile": { + "version": "1.0.4", + "bundled": true, + "requires": { + "signal-exit": "^3.0.2" + } + }, + "lodash._baseindexof": { + "version": "3.1.0", + "bundled": true + }, + "lodash._baseuniq": { + "version": "4.6.0", + "bundled": true, + "requires": { + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "bundled": true + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "bundled": true + }, + "lodash._createcache": { + "version": "3.1.2", + "bundled": true, + "requires": { + "lodash._getnative": "^3.0.0" + } + }, + "lodash._createset": { + "version": "4.0.3", + "bundled": true + }, + "lodash._getnative": { + "version": "3.9.1", + "bundled": true + }, + "lodash._root": { + "version": "3.0.1", + "bundled": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "bundled": true + }, + "lodash.restparam": { + "version": "3.6.1", + "bundled": true + }, + "lodash.union": { + "version": "4.6.0", + "bundled": true + }, + "lodash.uniq": { + "version": "4.5.0", + "bundled": true + }, + "lodash.without": { + "version": "4.4.0", + "bundled": true + }, + "lowercase-keys": { + "version": "1.0.1", + "bundled": true + }, + "lru-cache": { + "version": "5.1.1", + "bundled": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "1.3.0", + "bundled": true, + "requires": { + "pify": "^3.0.0" + } + }, + "make-fetch-happen": { + "version": "5.0.2", + "bundled": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + } + }, + "meant": { + "version": "1.0.2", + "bundled": true + }, + "mime-db": { + "version": "1.35.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.19", + "bundled": true, + "requires": { + "mime-db": "~1.35.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "bundled": true + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "requires": { + "minipass": "^2.9.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "mississippi": { + "version": "3.0.0", + "bundled": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "bundled": true, + "requires": { + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.6", + "bundled": true + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "bundled": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + } + } + }, + "ms": { + "version": "2.1.1", + "bundled": true + }, + "mute-stream": { + "version": "0.0.7", + "bundled": true + }, + "node-fetch-npm": { + "version": "2.0.2", + "bundled": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-gyp": { + "version": "5.1.0", + "bundled": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" + } + }, + "nopt": { + "version": "4.0.3", + "bundled": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "bundled": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "resolve": { + "version": "1.10.0", + "bundled": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "npm-audit-report": { + "version": "1.3.3", + "bundled": true, + "requires": { + "cli-table3": "^0.5.0", + "console-control-strings": "^1.1.0" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-cache-filename": { + "version": "1.0.2", + "bundled": true + }, + "npm-install-checks": { + "version": "3.0.2", + "bundled": true, + "requires": { + "semver": "^2.3.0 || 3.x || 4 || 5" + } + }, + "npm-lifecycle": { + "version": "3.1.5", + "bundled": true, + "requires": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.15", + "node-gyp": "^5.0.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + } + }, + "npm-logical-tree": { + "version": "1.2.1", + "bundled": true + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true + }, + "npm-package-arg": { + "version": "6.1.1", + "bundled": true, + "requires": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "1.4.8", + "bundled": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "3.0.2", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "npm-profile": { + "version": "4.0.4", + "bundled": true, + "requires": { + "aproba": "^1.1.2 || 2", + "figgy-pudding": "^3.4.1", + "npm-registry-fetch": "^4.0.0" + } + }, + "npm-registry-fetch": { + "version": "4.0.7", + "bundled": true, + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "bundled": true + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npm-user-validate": { + "version": "1.0.1", + "bundled": true + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.9.0", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "object-keys": { + "version": "1.0.12", + "bundled": true + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "bundled": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.2", + "bundled": true + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true + }, + "package-json": { + "version": "4.0.1", + "bundled": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "pacote": { + "version": "9.5.12", + "bundled": true, + "requires": { + "bluebird": "^3.5.3", + "cacache": "^12.0.2", + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.3", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-normalize-package-bin": "^1.0.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^3.0.0", + "npm-registry-fetch": "^4.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.6.0", + "ssri": "^6.0.1", + "tar": "^4.4.10", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "path-exists": { + "version": "3.0.0", + "bundled": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "path-is-inside": { + "version": "1.0.2", + "bundled": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true + }, + "path-parse": { + "version": "1.0.7", + "bundled": true + }, + "performance-now": { + "version": "2.1.0", + "bundled": true + }, + "pify": { + "version": "3.0.0", + "bundled": true + }, + "prepend-http": { + "version": "1.0.4", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true + }, + "promise-retry": { + "version": "1.1.1", + "bundled": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "bundled": true + } + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "requires": { + "read": "1" + } + }, + "proto-list": { + "version": "1.2.4", + "bundled": true + }, + "protoduck": { + "version": "5.0.1", + "bundled": true, + "requires": { + "genfun": "^5.0.0" + } + }, + "prr": { + "version": "1.0.1", + "bundled": true + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true + }, + "psl": { + "version": "1.1.29", + "bundled": true + }, + "pump": { + "version": "3.0.0", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "bundled": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1", + "bundled": true + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true + }, + "qs": { + "version": "6.5.2", + "bundled": true + }, + "query-string": { + "version": "6.8.2", + "bundled": true, + "requires": { + "decode-uri-component": "^0.2.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "qw": { + "version": "1.0.1", + "bundled": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "read": { + "version": "1.0.7", + "bundled": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "1.0.5", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "read-installed": { + "version": "4.0.3", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + } + }, + "read-package-json": { + "version": "2.1.1", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "read-package-tree": { + "version": "5.3.1", + "bundled": true, + "requires": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "bundled": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "registry-auth-token": { + "version": "3.4.0", + "bundled": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "bundled": true, + "requires": { + "rc": "^1.0.1" + } + }, + "request": { + "version": "2.88.0", + "bundled": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true + }, + "require-main-filename": { + "version": "2.0.0", + "bundled": true + }, + "resolve-from": { + "version": "4.0.0", + "bundled": true + }, + "retry": { + "version": "0.12.0", + "bundled": true + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-queue": { + "version": "1.0.3", + "bundled": true, + "requires": { + "aproba": "^1.1.1" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "semver": { + "version": "5.7.1", + "bundled": true + }, + "semver-diff": { + "version": "2.1.0", + "bundled": true, + "requires": { + "semver": "^5.0.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "sha": { + "version": "3.0.0", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "slide": { + "version": "1.1.6", + "bundled": true + }, + "smart-buffer": { + "version": "4.1.0", + "bundled": true + }, + "socks": { + "version": "2.3.3", + "bundled": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "bundled": true, + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "sorted-object": { + "version": "2.0.1", + "bundled": true + }, + "sorted-union-stream": { + "version": "2.1.3", + "bundled": true, + "requires": { + "from2": "^1.3.0", + "stream-iterate": "^1.1.0" + }, + "dependencies": { + "from2": { + "version": "1.3.0", + "bundled": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~1.1.10" + } + }, + "isarray": { + "version": "0.0.1", + "bundled": true + }, + "readable-stream": { + "version": "1.1.14", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + } + } + }, + "spdx-correct": { + "version": "3.0.0", + "bundled": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "bundled": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "bundled": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "bundled": true + }, + "split-on-first": { + "version": "1.1.0", + "bundled": true + }, + "sshpk": { + "version": "1.14.2", + "bundled": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.2", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-iterate": { + "version": "1.2.0", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-shift": { + "version": "1.0.0", + "bundled": true + }, + "strict-uri-encode": { + "version": "2.0.0", + "bundled": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.3.0", + "bundled": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "bundled": true + } + } + }, + "stringify-package": { + "version": "1.0.1", + "bundled": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + }, + "supports-color": { + "version": "5.4.0", + "bundled": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "4.4.19", + "bundled": true, + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "bundled": true + }, + "yallist": { + "version": "3.1.1", + "bundled": true + } + } + }, + "term-size": { + "version": "1.2.0", + "bundled": true, + "requires": { + "execa": "^0.7.0" + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true + }, + "through": { + "version": "2.3.8", + "bundled": true + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "timed-out": { + "version": "4.0.1", + "bundled": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true + }, + "tough-cookie": { + "version": "2.4.3", + "bundled": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "bundled": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true + }, + "umask": { + "version": "1.1.0", + "bundled": true + }, + "unique-filename": { + "version": "1.1.1", + "bundled": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "1.0.0", + "bundled": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "bundled": true + }, + "unzip-response": { + "version": "2.0.1", + "bundled": true + }, + "update-notifier": { + "version": "2.5.0", + "bundled": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "uri-js": { + "version": "4.4.0", + "bundled": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "bundled": true + } + } + }, + "url-parse-lax": { + "version": "1.0.0", + "bundled": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "util-extend": { + "version": "1.0.3", + "bundled": true + }, + "util-promisify": { + "version": "2.1.0", + "bundled": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "uuid": { + "version": "3.3.3", + "bundled": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "bundled": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "verror": { + "version": "1.10.0", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "1.3.1", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "requires": { + "string-width": "^1.0.2" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "widest-line": { + "version": "2.0.1", + "bundled": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "worker-farm": { + "version": "1.7.0", + "bundled": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "bundled": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + }, + "string-width": { + "version": "3.1.0", + "bundled": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "bundled": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "write-file-atomic": { + "version": "2.4.3", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "bundled": true + }, + "xtend": { + "version": "4.0.1", + "bundled": true + }, + "y18n": { + "version": "4.0.1", + "bundled": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true + }, + "yargs": { + "version": "14.2.3", + "bundled": true, + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "bundled": true + }, + "find-up": { + "version": "3.0.0", + "bundled": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + }, + "locate-path": { + "version": "3.0.0", + "bundled": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "bundled": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "bundled": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "bundled": true + }, + "string-width": { + "version": "3.1.0", + "bundled": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "bundled": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "15.0.1", + "bundled": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "bundled": true + } + } + } + } + }, "observable-fns": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/observable-fns/-/observable-fns-0.5.1.tgz", diff --git a/script/script-runner/package.json b/script/script-runner/package.json index 4051285e1..9a9a61199 100644 --- a/script/script-runner/package.json +++ b/script/script-runner/package.json @@ -2,6 +2,7 @@ "name": "atom-build-scripts-runner", "description": "Atom build scripts runner", "dependencies": { - "threads": "^1.6.3" + "threads": "^1.6.3", + "npm": "^6.14.16" } } diff --git a/script/test b/script/test index 6b402fe52..c4e7b6660 100755 --- a/script/test +++ b/script/test @@ -34,7 +34,7 @@ const argv = require('yargs') .help().argv; const assert = require('assert'); -const async = require('async'); +const asyncSeries = require('async/series'); const childProcess = require('child_process'); const fs = require('fs-extra'); const glob = require('glob'); @@ -214,6 +214,7 @@ function isTimedOut(stderrOutput) { if (stderrOutput) { return ( stderrOutput.includes('timeout: timed out after') || // happens in core renderer tests + stderrOutput.includes('Error: Timed out waiting on') || // happens in core renderer tests stderrOutput.includes('Error: timeout of') || // happens in core main tests stderrOutput.includes( 'Error Downloading Update: Could not get code signature for running application' @@ -475,7 +476,7 @@ function requestedTestSuites(platform) { return suites; } -async.series(testSuitesToRun, function(err, results) { +asyncSeries(testSuitesToRun, function(err, results) { if (err) { console.error(err); process.exit(1); diff --git a/script/vsts/lib/release-notes.js b/script/vsts/lib/release-notes.js index 52b87aeed..30ef3c777 100644 --- a/script/vsts/lib/release-notes.js +++ b/script/vsts/lib/release-notes.js @@ -8,7 +8,7 @@ const { REPO_OWNER, MAIN_REPO, NIGHTLY_RELEASE_REPO } = require('../../config'); module.exports.getRelease = async function(releaseVersion, githubToken) { if (githubToken) { octokit.authenticate({ - type: 'oauth', + type: 'token', token: githubToken }); } @@ -39,7 +39,7 @@ module.exports.generateForVersion = async function( if (githubToken) { changelog.setGithubAccessToken(githubToken); octokit.authenticate({ - type: 'oauth', + type: 'token', token: githubToken }); } diff --git a/script/vsts/lib/upload-to-azure-blob.js b/script/vsts/lib/upload-to-azure-blob.js new file mode 100644 index 000000000..136d15642 --- /dev/null +++ b/script/vsts/lib/upload-to-azure-blob.js @@ -0,0 +1,51 @@ +'use strict'; + +const path = require('path'); +const { BlobServiceClient } = require('@azure/storage-blob'); + +module.exports = function upload(connStr, directory, assets) { + const blobServiceClient = BlobServiceClient.fromConnectionString(connStr); + const containerName = 'atom-build'; + const containerClient = blobServiceClient.getContainerClient(containerName); + + async function listExistingAssetsForDirectory() { + return containerClient.listBlobsFlat({ prefix: directory }); + } + + async function deleteExistingAssets(existingAssets = []) { + try { + for await (const asset of existingAssets) { + console.log(`Deleting blob ${asset.name}`); + containerClient.deleteBlob(asset.name); + } + return Promise.resolve(true); + } catch (ex) { + return Promise.reject(ex.message); + } + } + + function uploadAssets(assets) { + return assets.reduce(function(promise, asset) { + return promise.then(() => uploadAsset(asset)); + }, Promise.resolve()); + } + + function uploadAsset(assetPath) { + return new Promise(async (resolve, reject) => { + try { + console.info(`Uploading ${assetPath}`); + const blockBlobClient = containerClient.getBlockBlobClient( + path.join(directory, path.basename(assetPath)) + ); + const result = await blockBlobClient.uploadFile(assetPath); + resolve(result); + } catch (ex) { + reject(ex.message); + } + }); + } + + return listExistingAssetsForDirectory() + .then(deleteExistingAssets) + .then(() => uploadAssets(assets)); +}; diff --git a/script/vsts/lib/upload-to-s3.js b/script/vsts/lib/upload-to-s3.js deleted file mode 100644 index 36c69e9de..000000000 --- a/script/vsts/lib/upload-to-s3.js +++ /dev/null @@ -1,70 +0,0 @@ -'use strict'; - -const fs = require('fs'); -const path = require('path'); -const aws = require('aws-sdk'); - -module.exports = function( - s3Key, - s3Secret, - s3Bucket, - directory, - assets, - acl = 'public-read' -) { - const s3 = new aws.S3({ - accessKeyId: s3Key, - secretAccessKey: s3Secret, - params: { Bucket: s3Bucket } - }); - - function listExistingAssetsForDirectory(directory) { - return s3 - .listObjectsV2({ Prefix: directory }) - .promise() - .then(res => { - return res.Contents.map(obj => { - return { Key: obj.Key }; - }); - }); - } - - function deleteExistingAssets(existingAssets) { - if (existingAssets.length > 0) { - return s3 - .deleteObjects({ Delete: { Objects: existingAssets } }) - .promise(); - } else { - return Promise.resolve(true); - } - } - - function uploadAssets(assets, directory) { - return assets.reduce(function(promise, asset) { - return promise.then(() => uploadAsset(directory, asset)); - }, Promise.resolve()); - } - - function uploadAsset(directory, assetPath) { - return new Promise((resolve, reject) => { - console.info(`Uploading ${assetPath}`); - const params = { - Key: `${directory}${path.basename(assetPath)}`, - ACL: acl, - Body: fs.createReadStream(assetPath) - }; - - s3.upload(params, error => { - if (error) { - reject(error); - } else { - resolve(); - } - }); - }); - } - - return listExistingAssetsForDirectory(directory) - .then(deleteExistingAssets) - .then(() => uploadAssets(assets, directory)); -}; diff --git a/script/vsts/nightly-release.yml b/script/vsts/nightly-release.yml index 080f79587..c73bfd6ee 100644 --- a/script/vsts/nightly-release.yml +++ b/script/vsts/nightly-release.yml @@ -49,10 +49,11 @@ jobs: env: GITHUB_TOKEN: $(GITHUB_TOKEN) ATOM_RELEASE_VERSION: $(ReleaseVersion) - ATOM_RELEASES_S3_KEY: $(_ATOM_RELEASES_S3_KEY) - ATOM_RELEASES_S3_SECRET: $(_ATOM_RELEASES_S3_SECRET) - ATOM_RELEASES_S3_BUCKET: $(_ATOM_RELEASES_S3_BUCKET) - PACKAGE_CLOUD_API_KEY: $(_PACKAGE_CLOUD_API_KEY) + ATOM_RELEASES_S3_KEY: $(ATOM_RELEASES_S3_KEY) + ATOM_RELEASES_AZURE_CONN_STRING: $(ATOM_RELEASES_AZURE_CONN_STRING) + ATOM_RELEASES_S3_SECRET: $(ATOM_RELEASES_S3_SECRET) + ATOM_RELEASES_S3_BUCKET: $(ATOM_RELEASES_S3_BUCKET) + PACKAGE_CLOUD_API_KEY: $(PACKAGE_CLOUD_API_KEY) displayName: Create Nightly Release - job: bump_dependencies displayName: Bump Dependencies diff --git a/script/vsts/package-lock.json b/script/vsts/package-lock.json index fa720c4b9..398af42a0 100644 --- a/script/vsts/package-lock.json +++ b/script/vsts/package-lock.json @@ -1,8 +1,3982 @@ { "name": "atom-release-scripts", + "lockfileVersion": 2, "requires": true, - "lockfileVersion": 1, + "packages": { + "": { + "name": "atom-release-scripts", + "dependencies": { + "@azure/storage-blob": "^12.5.0", + "@octokit/rest": "^15.9.5", + "download": "^7.1.0", + "glob": "7.0.3", + "pr-changelog": "^0.3.4", + "publish-release": "^1.6.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "semver": "5.3.0", + "yargs": "4.8.1" + } + }, + "node_modules/@azure/abort-controller": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.0.4.tgz", + "integrity": "sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@azure/core-asynciterator-polyfill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@azure/core-asynciterator-polyfill/-/core-asynciterator-polyfill-1.0.0.tgz", + "integrity": "sha512-kmv8CGrPfN9SwMwrkiBK9VTQYxdFQEGe0BmQk+M8io56P9KNzpAxcWE/1fxJj7uouwN4kXF0BHW8DNlgx+wtCg==" + }, + "node_modules/@azure/core-auth": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.3.2.tgz", + "integrity": "sha512-7CU6DmCHIZp5ZPiZ9r3J17lTKMmYsm/zGvNkjArQwPkrLlZ1TZ+EUYfGgh2X31OLMVAQCTJZW4cXHJi02EbJnA==", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-http": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-2.2.2.tgz", + "integrity": "sha512-V1DdoO9V/sFimKpdWoNBgsE+QUjQgpXYnxrTdUp5RyhsTJjvEVn/HKmTQXIHuLUUo6IyIWj+B+Dg4VaXse9dIA==", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-asynciterator-polyfill": "^1.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-tracing": "1.0.0-preview.13", + "@azure/logger": "^1.0.0", + "@types/node-fetch": "^2.5.0", + "@types/tunnel": "^0.0.3", + "form-data": "^4.0.0", + "node-fetch": "^2.6.0", + "process": "^0.11.10", + "tough-cookie": "^4.0.0", + "tslib": "^2.2.0", + "tunnel": "^0.0.6", + "uuid": "^8.3.0", + "xml2js": "^0.4.19" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-http/node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@azure/core-http/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@azure/core-http/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@azure/core-http/node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@azure/core-http/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@azure/core-lro": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.2.1.tgz", + "integrity": "sha512-HE6PBl+mlKa0eBsLwusHqAqjLc5n9ByxeDo3Hz4kF3B1hqHvRkBr4oMgoT6tX7Hc3q97KfDctDUon7EhvoeHPA==", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-tracing": "1.0.0-preview.13", + "@azure/logger": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-paging": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.2.0.tgz", + "integrity": "sha512-ZX1bCjm/MjKPCN6kQD/9GJErYSoKA8YWp6YWoo5EIzcTWlSBLXu3gNaBTUl8usGl+UShiKo7b4Gdy1NSTIlpZg==", + "dependencies": { + "@azure/core-asynciterator-polyfill": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.0.0-preview.13", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz", + "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==", + "dependencies": { + "@opentelemetry/api": "^1.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.3.tgz", + "integrity": "sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/storage-blob": { + "version": "12.8.0", + "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.8.0.tgz", + "integrity": "sha512-c8+Wz19xauW0bGkTCoqZH4dYfbtBniPiGiRQOn1ca6G5jsjr4azwaTk9gwjVY8r3vY2Taf95eivLzipfIfiS4A==", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-http": "^2.0.0", + "@azure/core-lro": "^2.2.0", + "@azure/core-paging": "^1.1.1", + "@azure/core-tracing": "1.0.0-preview.13", + "@azure/logger": "^1.0.0", + "events": "^3.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/storage-blob/node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "dependencies": { + "@octokit/types": "^6.0.3" + } + }, + "node_modules/@octokit/core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", + "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", + "dependencies": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.0", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/core/node_modules/before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==" + }, + "node_modules/@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "dependencies": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", + "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", + "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", + "dependencies": { + "@octokit/types": "^6.34.0" + }, + "peerDependencies": { + "@octokit/core": ">=2" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", + "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", + "dependencies": { + "@octokit/types": "^6.34.0", + "deprecation": "^2.3.1" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/request": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "dependencies": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dependencies": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "node_modules/@octokit/rest": { + "version": "15.9.5", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-15.9.5.tgz", + "integrity": "sha512-vJEHSTnI4UAbCDTjVSQljPeX81zsQVNj2ruM5Oj5gxOttHD0TcfWeElcJYoITCMxQTgN6Y+bJFo6/+/0CqoacA==", + "dependencies": { + "before-after-hook": "^1.1.0", + "btoa-lite": "^1.0.0", + "debug": "^3.1.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.0", + "lodash": "^4.17.4", + "node-fetch": "^2.1.1", + "url-template": "^2.0.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@octokit/types": { + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", + "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", + "dependencies": { + "@octokit/openapi-types": "^11.2.0" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.3.tgz", + "integrity": "sha512-puWxACExDe9nxbBB3lOymQFrLYml2dVOrd7USiVRnSbgXE+KwBu+HxFvxrzfqsiSda9IWsXJG1ef7C1O2/GmKQ==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@types/node": { + "version": "16.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.9.tgz", + "integrity": "sha512-MKmdASMf3LtPzwLyRrFjtFFZ48cMf8jmX5VRYrDQiJa8Ybu5VAmkqBWqKU8fdCwD8ysw4mQ9nrEHvzg6gunR7A==" + }, + "node_modules/@types/node-fetch": { + "version": "2.5.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", + "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/node-fetch/node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/tunnel": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz", + "integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dependencies": { + "es6-promisify": "^5.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dependencies": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "dependencies": { + "file-type": "^4.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/archive-type/node_modules/file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "engines": { + "node": ">=4" + } + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" + }, + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dependencies": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dependencies": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=" + }, + "node_modules/babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dependencies": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dependencies": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dependencies": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dependencies": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dependencies": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dependencies": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "node_modules/babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dependencies": { + "regenerator-transform": "^0.10.0" + } + }, + "node_modules/babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dependencies": { + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + } + }, + "node_modules/babel-polyfill/node_modules/regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" + }, + "node_modules/babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "deprecated": "🙌 Thanks for using Babel: we recommend using babel-preset-env now: please read https://babeljs.io/env to update!", + "dependencies": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.24.1", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-computed-properties": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.22.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", + "babel-plugin-transform-es2015-for-of": "^6.22.0", + "babel-plugin-transform-es2015-function-name": "^6.24.1", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-umd": "^6.24.1", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-es2015-parameters": "^6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", + "babel-plugin-transform-regenerator": "^6.24.1" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-traverse/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "node_modules/babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "bin": { + "babylon": "bin/babylon.js" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/before-after-hook": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.1.0.tgz", + "integrity": "sha512-VOMDtYPwLbIncTxNoSzRyvaMxtXmLWLUqr8k5AfC1BzLk34HvBXaQX8snOwQZ4c0aX8aSERqtJSiI9/m2u5kuA==" + }, + "node_modules/bl": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", + "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", + "dependencies": { + "readable-stream": "~1.0.26" + } + }, + "node_modules/bluebird": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", + "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=" + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dependencies": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dependencies": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "node_modules/caw": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", + "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "dependencies": { + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-width": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz", + "integrity": "sha1-pNKT72frt7iNSk1CwMzwDE0eNm0=" + }, + "node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.8.1", + "resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dependencies": { + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-js": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js." + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dependencies": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dependencies": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tar/node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dependencies": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2/node_modules/file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dependencies": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz/node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "dependencies": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip/node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-unzip/node_modules/get-stream": { + "version": "2.3.1", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dependencies": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "node_modules/download": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", + "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", + "dependencies": { + "archive-type": "^4.0.0", + "caw": "^2.0.1", + "content-disposition": "^0.5.2", + "decompress": "^4.2.0", + "ext-name": "^5.0.0", + "file-type": "^8.1.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^8.3.1", + "make-dir": "^1.2.0", + "p-event": "^2.1.0", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/download/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "engines": { + "node": ">=4" + } + }, + "node_modules/duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dependencies": { + "readable-stream": "~1.1.9" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "dependencies": { + "jsbn": "~0.1.0" + } + }, + "node_modules/editor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz", + "integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=" + }, + "node_modules/end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dependencies": { + "es6-promise": "^4.0.3" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-home-dir": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/expand-home-dir/-/expand-home-dir-0.0.3.tgz", + "integrity": "sha1-ct6KBIbMKKO71wRjU5iCW1tign0=" + }, + "node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dependencies": { + "mime-db": "^1.28.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-type": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", + "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", + "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "node_modules/get-proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "dependencies": { + "npm-conf": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "engines": { + "node": ">=4" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/ghauth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ghauth/-/ghauth-2.0.1.tgz", + "integrity": "sha1-ebfWiwvPjn0IUqI7FHU539MUrPY=", + "dependencies": { + "bl": "~0.9.4", + "hyperquest": "~1.2.0", + "mkdirp": "~0.5.0", + "read": "~1.0.5", + "xtend": "~4.0.0" + } + }, + "node_modules/github-url-to-object": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-1.6.0.tgz", + "integrity": "sha1-iR73+7+rqP7XFRCs2xtOk0apcNw=", + "dependencies": { + "is-url": "^1.1.0" + } + }, + "node_modules/glob": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.3.tgz", + "integrity": "sha1-CqI1kxpKlqwT1g/6wvuHe9btT1g=", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dependencies": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/got/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "engines": { + "node": "*" + } + }, + "node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dependencies": { + "has-symbol-support-x": "^1.4.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" + }, + "node_modules/http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dependencies": { + "agent-base": "4", + "debug": "3.1.0" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dependencies": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/https-proxy-agent/node_modules/agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dependencies": { + "es6-promisify": "^5.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/hyperquest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperquest/-/hyperquest-1.2.0.tgz", + "integrity": "sha1-OeH+9miI3Hzg3sbA3YFPb8iUStU=", + "dependencies": { + "duplexer2": "~0.0.2", + "through2": "~0.6.3" + } + }, + "node_modules/ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + }, + "node_modules/indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" + }, + "node_modules/inquirer": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.8.5.tgz", + "integrity": "sha1-29dAz2yjtzEpamPOb22WGFHzNt8=", + "dependencies": { + "ansi-regex": "^1.1.1", + "chalk": "^1.0.0", + "cli-width": "^1.0.1", + "figures": "^1.3.5", + "lodash": "^3.3.1", + "readline2": "^0.1.1", + "rx": "^2.4.3", + "through": "^2.3.6" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz", + "integrity": "sha1-QchHGUZGN15qGl0Qw8oFTvn8mA0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inquirer/node_modules/lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + }, + "node_modules/into-stream": { + "version": "3.1.0", + "resolved": "http://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dependencies": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "node_modules/is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dependencies": { + "builtin-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" + }, + "node_modules/is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "node_modules/isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dependencies": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "node_modules/json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + }, + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dependencies": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "engines": { + "node": ">=4" + } + }, + "node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dependencies": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "node_modules/mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp/node_modules/minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "node_modules/moment": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", + "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dependencies": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/normalize-url/node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dependencies": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-conf/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "engines": { + "node": ">=4" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "0.4.1", + "resolved": "http://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-event": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.1.0.tgz", + "integrity": "sha512-sDEpDVnzLGlJj3k590uUdpfEUySP5yAYlvfTCu5hTDvSTXQVecYWKcEwdO49PrZlnJ5wkfAvtawnno/jyXeqvA==", + "dependencies": { + "p-timeout": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-link-header": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-0.4.1.tgz", + "integrity": "sha1-9r1hXcZxP9QJNc6XlF5NP1Iu3xQ=", + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkginfo": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", + "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/pr-changelog": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/pr-changelog/-/pr-changelog-0.3.4.tgz", + "integrity": "sha512-jeRqtyX4vJ5bpiyNjeXq6GN3Y89fQSr6T88UbYPX9c7F2sRv41MLyvz8HvAlal8SCAl/CvbuzwkxLKrXONQB3A==", + "dependencies": { + "@octokit/rest": "^18.12.0", + "babel-plugin-syntax-async-functions": "^6.1.4", + "babel-plugin-transform-regenerator": "^6.1.4", + "babel-polyfill": "^6.1.4", + "babel-preset-es2015": "^6.1.4", + "bluebird": "^3.0.6", + "expand-home-dir": "0.0.3", + "moment": "^2.10.6", + "parse-link-header": "^0.4.1", + "yargs": "^3.31.0" + }, + "bin": { + "pr-changelog": "lib/main.js" + } + }, + "node_modules/pr-changelog/node_modules/@octokit/rest": { + "version": "18.12.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", + "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "dependencies": { + "@octokit/core": "^3.5.1", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + } + }, + "node_modules/pr-changelog/node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pr-changelog/node_modules/window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", + "bin": { + "window-size": "cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/pr-changelog/node_modules/yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "dependencies": { + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-bytes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "dependencies": { + "get-stdin": "^4.0.1", + "meow": "^3.1.0" + }, + "bin": { + "pretty-bytes": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "node_modules/progress-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", + "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", + "dependencies": { + "speedometer": "~0.1.2", + "through2": "~0.2.3" + } + }, + "node_modules/progress-stream/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/progress-stream/node_modules/through2": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", + "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", + "dependencies": { + "readable-stream": "~1.1.9", + "xtend": "~2.1.1" + } + }, + "node_modules/progress-stream/node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/publish-release": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/publish-release/-/publish-release-1.6.0.tgz", + "integrity": "sha512-t+NFXTQN/VDTg9yJ8Uv5ZWQ7Ud1T5W1tPW+bmuo4g6uYVQTVNiwwRF6Td3EtXFTOafpEXJQEZqGG7IvIJwLwIg==", + "dependencies": { + "async": "^0.9.0", + "ghauth": "^2.0.0", + "github-url-to-object": "^1.4.2", + "inquirer": "^0.8.2", + "lodash": "^3.6.0", + "mime": "^1.3.4", + "minimist": "^1.1.1", + "pkginfo": "^0.3.0", + "pretty-bytes": "^1.0.4", + "progress-stream": "^1.0.1", + "request": "^2.54.0", + "single-line-log": "^0.4.1", + "string-editor": "^0.1.0" + }, + "bin": { + "publish-release": "bin/publish-release" + } + }, + "node_modules/publish-release/node_modules/lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "http://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/readline2": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-0.1.1.tgz", + "integrity": "sha1-mUQ7pug7gw7zBRv9fcJBqCco1Wg=", + "dependencies": { + "mute-stream": "0.0.4", + "strip-ansi": "^2.0.1" + } + }, + "node_modules/readline2/node_modules/ansi-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz", + "integrity": "sha1-QchHGUZGN15qGl0Qw8oFTvn8mA0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readline2/node_modules/mute-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha1-qSGZYKbV1dBGWXruUSUsZlX3F34=" + }, + "node_modules/readline2/node_modules/strip-ansi": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz", + "integrity": "sha1-32LBqpTtLxFOHQ8h/R1QSCt5pg4=", + "dependencies": { + "ansi-regex": "^1.0.0" + }, + "bin": { + "strip-ansi": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dependencies": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + }, + "node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "node_modules/regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dependencies": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "node_modules/regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dependencies": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "node_modules/regjsgen": { + "version": "0.2.0", + "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" + }, + "node_modules/regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "dependencies": { + "lodash": "^4.13.1" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dependencies": { + "request-promise-core": "1.1.1", + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/rx": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/rx/-/rx-2.5.3.tgz", + "integrity": "sha1-Ia3H2A8CACr1Da6X/Z2/JIdV9WY=" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "node_modules/seek-bzip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "dependencies": { + "commander": "~2.8.1" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" + } + }, + "node_modules/semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "node_modules/single-line-log": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-0.4.1.tgz", + "integrity": "sha1-h6VWSfdJ14PsDc2AToFA2Yc8fO4=" + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dependencies": { + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" + }, + "node_modules/speedometer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", + "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=" + }, + "node_modules/sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "dashdash": "^1.12.0", + "getpass": "^0.1.1", + "safer-buffer": "^2.0.2" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + }, + "optionalDependencies": { + "bcrypt-pbkdf": "^1.0.0", + "ecc-jsbn": "~0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "node_modules/string-editor": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/string-editor/-/string-editor-0.1.2.tgz", + "integrity": "sha1-9f8bWsSu16xsL7jeI20VUbIPYdA=", + "dependencies": { + "editor": "^1.0.0" + } + }, + "node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dependencies": { + "is-natural-number": "^4.0.1" + } + }, + "node_modules/strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dependencies": { + "get-stdin": "^4.0.1" + }, + "bin": { + "strip-indent": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dependencies": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tar-stream/node_modules/bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/tar-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/tar-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "node_modules/through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dependencies": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, + "node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dependencies": { + "punycode": "^1.4.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "node_modules/unbzip2-stream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.1.tgz", + "integrity": "sha512-fIZnvdjblYs7Cru/xC6tCPVhz7JkYcVQQkePwMLyQELzYTds2Xn8QefPVnvdVhhZqubxNA1cASXEH5wcK0Bucw==", + "dependencies": { + "buffer": "^3.0.1", + "through": "^2.3.6" + } + }, + "node_modules/unbzip2-stream/node_modules/base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/unbzip2-stream/node_modules/buffer": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", + "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", + "deprecated": "This version of 'buffer' is out-of-date. You must update to v3.6.2 or newer", + "dependencies": { + "base64-js": "0.0.8", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/unbzip2-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" + }, + "node_modules/url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "engines": { + "node": ">= 4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/uuid": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.0.tgz", + "integrity": "sha512-ijO9N2xY/YaOqQ5yz5c4sy2ZjWmA6AR6zASb/gdpeKZ8+948CxwfMW9RrKVk5may6ev8c0/Xguu32e2Llelpqw==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "node_modules/window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "bin": { + "window-size": "cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "node_modules/yargs": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", + "dependencies": { + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "lodash.assign": "^4.0.3", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.1", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^2.4.1" + } + }, + "node_modules/yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "dependencies": { + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + }, "dependencies": { + "@azure/abort-controller": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.0.4.tgz", + "integrity": "sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@azure/core-asynciterator-polyfill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@azure/core-asynciterator-polyfill/-/core-asynciterator-polyfill-1.0.0.tgz", + "integrity": "sha512-kmv8CGrPfN9SwMwrkiBK9VTQYxdFQEGe0BmQk+M8io56P9KNzpAxcWE/1fxJj7uouwN4kXF0BHW8DNlgx+wtCg==" + }, + "@azure/core-auth": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.3.2.tgz", + "integrity": "sha512-7CU6DmCHIZp5ZPiZ9r3J17lTKMmYsm/zGvNkjArQwPkrLlZ1TZ+EUYfGgh2X31OLMVAQCTJZW4cXHJi02EbJnA==", + "requires": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + } + }, + "@azure/core-http": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-2.2.2.tgz", + "integrity": "sha512-V1DdoO9V/sFimKpdWoNBgsE+QUjQgpXYnxrTdUp5RyhsTJjvEVn/HKmTQXIHuLUUo6IyIWj+B+Dg4VaXse9dIA==", + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-asynciterator-polyfill": "^1.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-tracing": "1.0.0-preview.13", + "@azure/logger": "^1.0.0", + "@types/node-fetch": "^2.5.0", + "@types/tunnel": "^0.0.3", + "form-data": "^4.0.0", + "node-fetch": "^2.6.0", + "process": "^0.11.10", + "tough-cookie": "^4.0.0", + "tslib": "^2.2.0", + "tunnel": "^0.0.6", + "uuid": "^8.3.0", + "xml2js": "^0.4.19" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } + } + }, + "@azure/core-lro": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.2.1.tgz", + "integrity": "sha512-HE6PBl+mlKa0eBsLwusHqAqjLc5n9ByxeDo3Hz4kF3B1hqHvRkBr4oMgoT6tX7Hc3q97KfDctDUon7EhvoeHPA==", + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-tracing": "1.0.0-preview.13", + "@azure/logger": "^1.0.0", + "tslib": "^2.2.0" + } + }, + "@azure/core-paging": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.2.0.tgz", + "integrity": "sha512-ZX1bCjm/MjKPCN6kQD/9GJErYSoKA8YWp6YWoo5EIzcTWlSBLXu3gNaBTUl8usGl+UShiKo7b4Gdy1NSTIlpZg==", + "requires": { + "@azure/core-asynciterator-polyfill": "^1.0.0", + "tslib": "^2.2.0" + } + }, + "@azure/core-tracing": { + "version": "1.0.0-preview.13", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz", + "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==", + "requires": { + "@opentelemetry/api": "^1.0.1", + "tslib": "^2.2.0" + } + }, + "@azure/logger": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.3.tgz", + "integrity": "sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==", + "requires": { + "tslib": "^2.2.0" + } + }, + "@azure/storage-blob": { + "version": "12.8.0", + "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.8.0.tgz", + "integrity": "sha512-c8+Wz19xauW0bGkTCoqZH4dYfbtBniPiGiRQOn1ca6G5jsjr4azwaTk9gwjVY8r3vY2Taf95eivLzipfIfiS4A==", + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-http": "^2.0.0", + "@azure/core-lro": "^2.2.0", + "@azure/core-paging": "^1.1.1", + "@azure/core-tracing": "1.0.0-preview.13", + "@azure/logger": "^1.0.0", + "events": "^3.0.0", + "tslib": "^2.2.0" + }, + "dependencies": { + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + } + } + }, + "@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "requires": { + "@octokit/types": "^6.0.3" + } + }, + "@octokit/core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", + "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", + "requires": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.0", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==" + } + } + }, + "@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "requires": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", + "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==" + }, + "@octokit/plugin-paginate-rest": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", + "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", + "requires": { + "@octokit/types": "^6.34.0" + } + }, + "@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "requires": {} + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", + "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", + "requires": { + "@octokit/types": "^6.34.0", + "deprecation": "^2.3.1" + } + }, + "@octokit/request": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, "@octokit/rest": { "version": "15.9.5", "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-15.9.5.tgz", @@ -18,11 +3992,66 @@ "url-template": "^2.0.8" } }, + "@octokit/types": { + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", + "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", + "requires": { + "@octokit/openapi-types": "^11.2.0" + } + }, + "@opentelemetry/api": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.3.tgz", + "integrity": "sha512-puWxACExDe9nxbBB3lOymQFrLYml2dVOrd7USiVRnSbgXE+KwBu+HxFvxrzfqsiSda9IWsXJG1ef7C1O2/GmKQ==" + }, "@sindresorhus/is": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==" }, + "@types/node": { + "version": "16.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.9.tgz", + "integrity": "sha512-MKmdASMf3LtPzwLyRrFjtFFZ48cMf8jmX5VRYrDQiJa8Ybu5VAmkqBWqKU8fdCwD8ysw4mQ9nrEHvzg6gunR7A==" + }, + "@types/node-fetch": { + "version": "2.5.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", + "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, + "@types/tunnel": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz", + "integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==", + "requires": { + "@types/node": "*" + } + }, "agent-base": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", @@ -92,29 +4121,6 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "aws-sdk": { - "version": "2.292.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.292.0.tgz", - "integrity": "sha512-1Btm3fPwyy/pILfKaByP1MmwrjHtmos1fSORDcbGdc7PGyA5w0Yo9Jh/eqZSqiXH1asQEX1ZzHfTbt69vl4EGQ==", - "requires": { - "buffer": "4.9.1", - "events": "1.1.1", - "ieee754": "1.1.8", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.1.0", - "xml2js": "0.4.19" - }, - "dependencies": { - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" - } - } - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -585,11 +4591,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" - }, "bcrypt-pbkdf": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", @@ -631,23 +4632,6 @@ "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=" }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - } - } - }, "buffer-alloc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", @@ -967,6 +4951,11 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, "download": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", @@ -1072,11 +5061,6 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, "expand-home-dir": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/expand-home-dir/-/expand-home-dir-0.0.3.tgz", @@ -1266,11 +5250,6 @@ "xtend": "~4.0.0" } }, - "github": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/github/-/github-0.1.16.tgz", - "integrity": "sha1-iV0qhbD+t5gNiawM5PRNyqA/F7U=" - }, "github-url-to-object": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-1.6.0.tgz", @@ -1373,9 +5352,9 @@ } }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "http-cache-semantics": { "version": "3.8.1", @@ -1457,9 +5436,9 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" }, "inquirer": { "version": "0.8.5", @@ -1554,6 +5533,11 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, "is-retry-allowed": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", @@ -1598,11 +5582,6 @@ "is-object": "^1.0.1" } }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -1814,9 +5793,12 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } }, "normalize-package-data": { "version": "2.4.0", @@ -2005,22 +5987,33 @@ "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=" }, "pr-changelog": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/pr-changelog/-/pr-changelog-0.3.2.tgz", - "integrity": "sha512-CQayjupdJ4KB6EYzRuW7aXgXpRT0iOMuCn9DROC4ygqXpSgHW+eDzFz3l50icJq25yq1tnrLSBvh55aG+gy+MQ==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/pr-changelog/-/pr-changelog-0.3.4.tgz", + "integrity": "sha512-jeRqtyX4vJ5bpiyNjeXq6GN3Y89fQSr6T88UbYPX9c7F2sRv41MLyvz8HvAlal8SCAl/CvbuzwkxLKrXONQB3A==", "requires": { + "@octokit/rest": "^18.12.0", "babel-plugin-syntax-async-functions": "^6.1.4", "babel-plugin-transform-regenerator": "^6.1.4", "babel-polyfill": "^6.1.4", "babel-preset-es2015": "^6.1.4", "bluebird": "^3.0.6", "expand-home-dir": "0.0.3", - "github": "^0.1.16", "moment": "^2.10.6", "parse-link-header": "^0.4.1", "yargs": "^3.31.0" }, "dependencies": { + "@octokit/rest": { + "version": "18.12.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", + "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "requires": { + "@octokit/core": "^3.5.1", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + } + }, "camelcase": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", @@ -2066,6 +6059,11 @@ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", @@ -2115,6 +6113,11 @@ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, "publish-release": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/publish-release/-/publish-release-1.6.0.tgz", @@ -2162,11 +6165,6 @@ "strict-uri-encode": "^1.0.0" } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -2480,6 +6478,11 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, "string-editor": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/string-editor/-/string-editor-0.1.2.tgz", @@ -2498,11 +6501,6 @@ "strip-ansi": "^3.0.0" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -2637,6 +6635,11 @@ "punycode": "^1.4.1" } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", @@ -2650,6 +6653,16 @@ "escape-string-regexp": "^1.0.2" } }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -2695,21 +6708,15 @@ } } }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "url-parse-lax": { "version": "3.0.0", @@ -2758,6 +6765,20 @@ "extsprintf": "^1.2.0" } }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", @@ -2802,9 +6823,9 @@ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" }, "yargs": { "version": "4.8.1", diff --git a/script/vsts/package.json b/script/vsts/package.json index 12f5d1449..463bb1833 100644 --- a/script/vsts/package.json +++ b/script/vsts/package.json @@ -2,11 +2,11 @@ "name": "atom-release-scripts", "description": "Atom release scripts", "dependencies": { + "@azure/storage-blob": "^12.5.0", "@octokit/rest": "^15.9.5", - "aws-sdk": "^2.5.2", "download": "^7.1.0", "glob": "7.0.3", - "pr-changelog": "^0.3.2", + "pr-changelog": "^0.3.4", "publish-release": "^1.6.0", "request": "^2.87.0", "request-promise-native": "^1.0.5", diff --git a/script/vsts/platforms/linux.yml b/script/vsts/platforms/linux.yml index 101dfeb7f..e8c1a2d80 100644 --- a/script/vsts/platforms/linux.yml +++ b/script/vsts/platforms/linux.yml @@ -5,7 +5,7 @@ jobs: variables: ReleaseVersion: $[ dependencies.GetReleaseVersion.outputs['Version.ReleaseVersion'] ] pool: - vmImage: ubuntu-16.04 + vmImage: ubuntu-18.04 steps: - template: templates/preparation.yml diff --git a/script/vsts/platforms/templates/bootstrap.yml b/script/vsts/platforms/templates/bootstrap.yml index 69373d955..9cd3c12a8 100644 --- a/script/vsts/platforms/templates/bootstrap.yml +++ b/script/vsts/platforms/templates/bootstrap.yml @@ -23,4 +23,4 @@ steps: GITHUB_TOKEN: $(GITHUB_TOKEN) CI: true CI_PROVIDER: VSTS - condition: or(ne(variables['MainNodeModulesRestored'], 'true'), ne(variables['ScriptRunnerNodeModulesRestored'], true), ne(variables['ScriptNodeModulesRestored'], 'true'), ne(variables['ApmNodeModulesRestored'], 'true')) + condition: or(ne(variables['MainNodeModulesRestored'], 'true'), ne(variables['ScriptRunnerNodeModulesRestored'], true), ne(variables['ScriptNodeModulesRestored'], 'true'), ne(variables['ApmNodeModulesRestored'], 'true'), ne(variables['LocalPackagesRestored'], 'true')) diff --git a/script/vsts/platforms/templates/cache.yml b/script/vsts/platforms/templates/cache.yml index 4a767c395..a45ccfe38 100644 --- a/script/vsts/platforms/templates/cache.yml +++ b/script/vsts/platforms/templates/cache.yml @@ -11,7 +11,7 @@ steps: - task: Cache@2 displayName: Cache node_modules inputs: - key: 'npm_main | "$(Agent.OS)" | "$(BUILD_ARCH)" | package.json, package-lock.json, apm/package.json, script/package.json, script/package-lock.json, script/script-runner/package.json, script/script-runner/package-lock.json, script/vsts/platforms/${{ parameters.OS }}.yml, script/vsts/platforms/templates/preparation.yml' + key: 'npm_main | "$(Agent.OS)" | "$(BUILD_ARCH)" | packages/**, !packages/**/node_modules/** | package.json, package-lock.json, apm/package.json, script/package.json, script/package-lock.json, script/script-runner/package.json, script/script-runner/package-lock.json, script/vsts/platforms/${{ parameters.OS }}.yml, script/vsts/platforms/templates/preparation.yml' path: 'node_modules' cacheHitVar: MainNodeModulesRestored @@ -25,13 +25,20 @@ steps: - task: Cache@2 displayName: Cache script/node_modules inputs: - key: 'npm_script | "$(Agent.OS)" | "$(BUILD_ARCH)" | package.json, package-lock.json, apm/package.json, script/package.json, script/package-lock.json, script/script-runner/package.json, script/script-runner/package-lock.json, script/vsts/platforms/${{ parameters.OS }}.yml, script/vsts/platforms/templates/preparation.yml' + key: 'npm_script | "$(Agent.OS)" | "$(BUILD_ARCH)" | packages/**, !packages/**/node_modules/** | package.json, package-lock.json, apm/package.json, script/package.json, script/package-lock.json, script/script-runner/package.json, script/script-runner/package-lock.json, script/vsts/platforms/${{ parameters.OS }}.yml, script/vsts/platforms/templates/preparation.yml' path: 'script/node_modules' cacheHitVar: ScriptNodeModulesRestored - task: Cache@2 displayName: Cache apm/node_modules inputs: - key: 'npm_apm | "$(Agent.OS)" | "$(BUILD_ARCH)" | package.json, package-lock.json, apm/package.json, script/package.json, script/package-lock.json, script/script-runner/package.json, script/script-runner/package-lock.json, script/vsts/platforms/${{ parameters.OS }}.yml, script/vsts/platforms/templates/preparation.yml' + key: 'npm_apm | "$(Agent.OS)" | "$(BUILD_ARCH)" | packages/**, !packages/**/node_modules/** | package.json, package-lock.json, apm/package.json, script/package.json, script/package-lock.json, script/script-runner/package.json, script/script-runner/package-lock.json, script/vsts/platforms/${{ parameters.OS }}.yml, script/vsts/platforms/templates/preparation.yml' path: 'apm/node_modules' cacheHitVar: ApmNodeModulesRestored + + - task: Cache@2 + displayName: Cache packages/ + inputs: + key: 'npm_local_packages | "$(Agent.OS)" | "$(BUILD_ARCH)" | packages/**, !packages/**/node_modules/** | package.json, package-lock.json, apm/package.json, script/package.json, script/package-lock.json, script/vsts/platforms/${{ parameters.OS }}.yml, script/vsts/platforms/templates/preparation.yml' + path: 'packages' + cacheHitVar: LocalPackagesRestored diff --git a/script/vsts/platforms/templates/preparation.yml b/script/vsts/platforms/templates/preparation.yml index c036a1ec2..c9e93e81c 100644 --- a/script/vsts/platforms/templates/preparation.yml +++ b/script/vsts/platforms/templates/preparation.yml @@ -3,13 +3,8 @@ steps: # Linux Specific - script: | sudo apt-get update - sudo apt-get install -y wget software-properties-common - sudo apt-get install -y build-essential ca-certificates xvfb fakeroot git libsecret-1-dev rpm libx11-dev libxkbfile-dev xz-utils xorriso zsync libxss1 libgconf2-4 libgtk-3-0 libasound2 libicu-dev dpkg + sudo apt-get install -y build-essential ca-certificates xvfb fakeroot git rpm libsecret-1-dev libx11-dev libxkbfile-dev xz-utils xorriso zsync libxss1 libgtk-3-0 libasound2 libicu-dev software-properties-common wget dpkg # clang 9 is included in the image - sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-9 10 - sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-9 10 - sudo update-alternatives --config clang - sudo update-alternatives --config clang++ clang -v displayName: Install apt dependencies condition: eq(variables['Agent.OS'], 'Linux') @@ -31,9 +26,9 @@ steps: - task: NodeTool@0 inputs: - versionSpec: 12.16.3 + versionSpec: 12.18.3 force32bit: $(IsWinX86) - displayName: Install Node.js 12.16.3 + displayName: Install Node.js 12.18.3 - script: npm install --global npm@6.14.8 displayName: Update npm @@ -50,3 +45,4 @@ steps: - task: UsePythonVersion@0 inputs: versionSpec: '3.8' + condition: eq(variables['Agent.OS'], 'Windows_NT') diff --git a/script/vsts/platforms/templates/test.yml b/script/vsts/platforms/templates/test.yml index d358d5116..6588b738e 100644 --- a/script/vsts/platforms/templates/test.yml +++ b/script/vsts/platforms/templates/test.yml @@ -67,9 +67,10 @@ steps: displayName: Upload Crash Reports - script: > - node $(Build.SourcesDirectory)\script\vsts\upload-crash-reports.js --crash-report-path "%ARTIFACT_STAGING_DIR%\crash-reports" --s3-path "vsts-artifacts/%BUILD_ID%/" + node $(Build.SourcesDirectory)\script\vsts\upload-crash-reports.js --crash-report-path "%ARTIFACT_STAGING_DIR%\crash-reports" --azure-blob-path "vsts-artifacts/%BUILD_ID%/" env: ATOM_RELEASES_S3_KEY: $(ATOM_RELEASES_S3_KEY) + ATOM_RELEASES_AZURE_CONN_STRING: $(ATOM_RELEASES_AZURE_CONN_STRING) ATOM_RELEASES_S3_SECRET: $(ATOM_RELEASES_S3_SECRET) ATOM_RELEASES_S3_BUCKET: $(ATOM_RELEASES_S3_BUCKET) ARTIFACT_STAGING_DIR: $(Build.ArtifactStagingDirectory) diff --git a/script/vsts/release-branch-build.yml b/script/vsts/release-branch-build.yml index a538faaed..090aa4ad1 100644 --- a/script/vsts/release-branch-build.yml +++ b/script/vsts/release-branch-build.yml @@ -53,19 +53,21 @@ jobs: env: GITHUB_TOKEN: $(GITHUB_TOKEN) ATOM_RELEASE_VERSION: $(ReleaseVersion) - ATOM_RELEASES_S3_KEY: $(_ATOM_RELEASES_S3_KEY) - ATOM_RELEASES_S3_SECRET: $(_ATOM_RELEASES_S3_SECRET) - ATOM_RELEASES_S3_BUCKET: $(_ATOM_RELEASES_S3_BUCKET) - PACKAGE_CLOUD_API_KEY: $(_PACKAGE_CLOUD_API_KEY) + ATOM_RELEASES_S3_KEY: $(ATOM_RELEASES_S3_KEY) + ATOM_RELEASES_AZURE_CONN_STRING: $(ATOM_RELEASES_AZURE_CONN_STRING) + ATOM_RELEASES_S3_SECRET: $(ATOM_RELEASES_S3_SECRET) + ATOM_RELEASES_S3_BUCKET: $(ATOM_RELEASES_S3_BUCKET) + PACKAGE_CLOUD_API_KEY: $(PACKAGE_CLOUD_API_KEY) displayName: Create Draft Release condition: and(succeeded(), eq(variables['Atom.AutoDraftRelease'], 'true'), eq(variables['IsReleaseBranch'], 'true')) - script: | - node $(Build.SourcesDirectory)/script/vsts/upload-artifacts.js --assets-path "$(System.ArtifactsDirectory)" --s3-path "vsts-artifacts/$(Build.BuildId)/" + node $(Build.SourcesDirectory)/script/vsts/upload-artifacts.js --assets-path "$(System.ArtifactsDirectory)" --azure-blob-path "vsts-artifacts/$(Build.BuildId)/" env: ATOM_RELEASE_VERSION: $(ReleaseVersion) - ATOM_RELEASES_S3_KEY: $(_ATOM_RELEASES_S3_KEY) - ATOM_RELEASES_S3_SECRET: $(_ATOM_RELEASES_S3_SECRET) - ATOM_RELEASES_S3_BUCKET: $(_ATOM_RELEASES_S3_BUCKET) + ATOM_RELEASES_S3_KEY: $(ATOM_RELEASES_S3_KEY) + ATOM_RELEASES_AZURE_CONN_STRING: $(ATOM_RELEASES_AZURE_CONN_STRING) + ATOM_RELEASES_S3_SECRET: $(ATOM_RELEASES_S3_SECRET) + ATOM_RELEASES_S3_BUCKET: $(ATOM_RELEASES_S3_BUCKET) displayName: Upload CI Artifacts to S3 condition: and(succeeded(), eq(variables['IsSignedZipBranch'], 'true')) diff --git a/script/vsts/upload-artifacts.js b/script/vsts/upload-artifacts.js index 7ded8bcb8..48d332f3a 100644 --- a/script/vsts/upload-artifacts.js +++ b/script/vsts/upload-artifacts.js @@ -7,7 +7,7 @@ const glob = require('glob'); const spawnSync = require('../lib/spawn-sync'); const publishRelease = require('publish-release'); const releaseNotes = require('./lib/release-notes'); -const uploadToS3 = require('./lib/upload-to-s3'); +const uploadToAzure = require('./lib/upload-to-azure-blob'); const uploadLinuxPackages = require('./lib/upload-linux-packages'); const CONFIG = require('../config'); @@ -22,8 +22,8 @@ const argv = yargs 'Path to the folder where all release assets are stored' ) .describe( - 's3-path', - 'Indicates the S3 path in which the assets should be uploaded' + 'azure-blob-path', + 'Indicates the Azure Blob Path path in which the assets should be uploaded' ) .describe( 'create-github-release', @@ -41,7 +41,7 @@ const assetsPath = argv.assetsPath || CONFIG.buildOutputPath; const assetsPattern = '/**/*(*.exe|*.zip|*.nupkg|*.tar.gz|*.rpm|*.deb|RELEASES*|atom-api.json)'; const assets = glob.sync(assetsPattern, { root: assetsPath, nodir: true }); -const bucketPath = argv.s3Path || `releases/v${releaseVersion}/`; +const azureBlobPath = argv.azureBlobPath || `releases/v${releaseVersion}/`; if (!assets || assets.length === 0) { console.error(`No assets found under specified path: ${assetsPath}`); @@ -69,14 +69,12 @@ async function uploadArtifacts() { console.log( `Uploading ${ assets.length - } release assets for ${releaseVersion} to S3 under '${bucketPath}'` + } release assets for ${releaseVersion} to Azure Blob Storage under '${azureBlobPath}'` ); - await uploadToS3( - process.env.ATOM_RELEASES_S3_KEY, - process.env.ATOM_RELEASES_S3_SECRET, - process.env.ATOM_RELEASES_S3_BUCKET, - bucketPath, + await uploadToAzure( + process.env.ATOM_RELEASES_AZURE_CONN_STRING, + azureBlobPath, assets ); } else { diff --git a/script/vsts/upload-crash-reports.js b/script/vsts/upload-crash-reports.js index 81572dc57..a44103cf4 100644 --- a/script/vsts/upload-crash-reports.js +++ b/script/vsts/upload-crash-reports.js @@ -1,7 +1,7 @@ 'use strict'; const glob = require('glob'); -const uploadToS3 = require('./lib/upload-to-s3'); +const uploadToAzure = require('./lib/upload-to-azure-blob'); const yargs = require('yargs'); const argv = yargs @@ -12,28 +12,26 @@ const argv = yargs 'The local path of a directory containing crash reports to upload' ) .describe( - 's3-path', - 'Indicates the S3 path in which the crash reports should be uploaded' + 'azure-blob-path', + 'Indicates the azure blob storage path in which the crash reports should be uploaded' ) .wrap(yargs.terminalWidth()).argv; async function uploadCrashReports() { const crashesPath = argv.crashReportPath; const crashes = glob.sync('/*.dmp', { root: crashesPath }); - const bucketPath = argv.s3Path; + const azureBlobPath = argv.azureBlobPath; if (crashes && crashes.length > 0) { console.log( `Uploading ${ crashes.length - } private crash reports to S3 under '${bucketPath}'` + } private crash reports to Azure Blob Storage under '${azureBlobPath}'` ); - await uploadToS3( - process.env.ATOM_RELEASES_S3_KEY, - process.env.ATOM_RELEASES_S3_SECRET, - process.env.ATOM_RELEASES_S3_BUCKET, - bucketPath, + await uploadToAzure( + process.env.ATOM_RELEASES_AZURE_CONN_STRING, + azureBlobPath, crashes, 'private' ); diff --git a/spec/async-spec-helpers.js b/spec/async-spec-helpers.js index 033b4b98f..db01d52bd 100644 --- a/spec/async-spec-helpers.js +++ b/spec/async-spec-helpers.js @@ -7,7 +7,12 @@ async function conditionPromise( while (true) { await timeoutPromise(100); - if (await condition()) { + // if condition is sync + if (condition.constructor.name !== 'AsyncFunction' && condition()) { + return; + } + // if condition is async + else if (await condition()) { return; } diff --git a/spec/atom-paths-spec.js b/spec/atom-paths-spec.js index de95dc706..72ad341f4 100644 --- a/spec/atom-paths-spec.js +++ b/spec/atom-paths-spec.js @@ -1,9 +1,10 @@ /** @babel */ -import { app } from 'remote'; +import { remote } from 'electron'; import atomPaths from '../src/atom-paths'; import fs from 'fs-plus'; import path from 'path'; +const app = remote.app; const temp = require('temp').track(); describe('AtomPaths', () => { diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index 9af21a7dd..4fe9cb21a 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -2,7 +2,6 @@ path = require 'path' process = require 'process' _ = require 'underscore-plus' grim = require 'grim' -marked = require 'marked' listen = require '../src/delegated-listener' ipcHelpers = require '../src/ipc-helpers' diff --git a/spec/clipboard-spec.js b/spec/clipboard-spec.js index 58809ccc0..7e30f10d7 100644 --- a/spec/clipboard-spec.js +++ b/spec/clipboard-spec.js @@ -1,12 +1,12 @@ -describe('Clipboard', () => - describe('write(text, metadata) and read()', function() { - it('writes and reads text to/from the native clipboard', function() { +describe('Clipboard', () => { + describe('write(text, metadata) and read()', () => { + it('writes and reads text to/from the native clipboard', () => { expect(atom.clipboard.read()).toBe('initial clipboard content'); atom.clipboard.write('next'); expect(atom.clipboard.read()).toBe('next'); }); - return it('returns metadata if the item on the native clipboard matches the last written item', function() { + it('returns metadata if the item on the native clipboard matches the last written item', () => { atom.clipboard.write('next', { meta: 'data' }); expect(atom.clipboard.read()).toBe('next'); expect(atom.clipboard.readWithMetadata().text).toBe('next'); @@ -14,4 +14,28 @@ describe('Clipboard', () => meta: 'data' }); }); - })); + }); + + describe('line endings', () => { + let originalPlatform = process.platform; + + const eols = new Map([ + ['win32', '\r\n'], + ['darwin', '\n'], + ['linux', '\n'] + ]); + for (let [platform, eol] of eols) { + it(`converts line endings to the OS's native line endings on ${platform}`, () => { + Object.defineProperty(process, 'platform', { value: platform }); + + atom.clipboard.write('next\ndone\r\n\n', { meta: 'data' }); + expect(atom.clipboard.readWithMetadata()).toEqual({ + text: `next${eol}done${eol}${eol}`, + metadata: { meta: 'data' } + }); + + Object.defineProperty(process, 'platform', { value: originalPlatform }); + }); + } + }); +}); diff --git a/spec/context-menu-manager-spec.js b/spec/context-menu-manager-spec.js index 8975aec05..e0246ee01 100644 --- a/spec/context-menu-manager-spec.js +++ b/spec/context-menu-manager-spec.js @@ -37,9 +37,9 @@ describe('ContextMenuManager', function() { }); expect(contextMenu.templateForElement(grandchild)).toEqual([ - { label: 'C', command: 'c' }, - { label: 'B', command: 'b' }, - { label: 'A', command: 'a' } + { label: 'C', id: 'C', command: 'c' }, + { label: 'B', id: 'B', command: 'b' }, + { label: 'A', id: 'A', command: 'a' } ]); disposable.dispose(); @@ -57,7 +57,11 @@ describe('ContextMenuManager', function() { expect(contextMenu.templateForElement(grandchild)).toEqual([ { label: 'A', - submenu: [{ label: 'B', command: 'b' }, { label: 'C', command: 'c' }] + id: 'A', + submenu: [ + { label: 'B', id: 'B', command: 'b' }, + { label: 'C', id: 'C', command: 'c' } + ] } ]); @@ -65,7 +69,8 @@ describe('ContextMenuManager', function() { expect(contextMenu.templateForElement(grandchild)).toEqual([ { label: 'A', - submenu: [{ label: 'B', command: 'b' }] + id: 'A', + submenu: [{ label: 'B', id: 'B', command: 'b' }] } ]); @@ -91,22 +96,22 @@ describe('ContextMenuManager', function() { }); expect(contextMenu.templateForElement(grandchild)).toEqual([ - { label: 'A', command: 'b' } + { label: 'A', id: 'A', command: 'b' } ]); disposable2.dispose(); expect(contextMenu.templateForElement(grandchild)).toEqual([ - { label: 'A', command: 'c' } + { label: 'A', id: 'A', command: 'c' } ]); disposable3.dispose(); expect(contextMenu.templateForElement(grandchild)).toEqual([ - { label: 'A', command: 'a' } + { label: 'A', id: 'A', command: 'a' } ]); disposable1.dispose(); expect(contextMenu.templateForElement(grandchild)).toEqual([ - { label: 'A', command: 'd' } + { label: 'A', id: 'A', command: 'd' } ]); }); @@ -124,11 +129,11 @@ describe('ContextMenuManager', function() { }); expect(contextMenu.templateForElement(grandchild)).toEqual([ - { label: 'A', command: 'a' }, + { label: 'A', id: 'A', command: 'a' }, { type: 'separator' }, - { label: 'B', command: 'b' }, + { label: 'B', id: 'B', command: 'b' }, { type: 'separator' }, - { label: 'C', command: 'c' } + { label: 'C', id: 'C', command: 'c' } ]); }); @@ -141,13 +146,13 @@ describe('ContextMenuManager', function() { }); expect(contextMenu.templateForElement(grandchild)).toEqual([ - { label: 'B', command: 'b' } + { label: 'B', id: 'B', command: 'b' } ]); contextMenu.devMode = true; expect(contextMenu.templateForElement(grandchild)).toEqual([ - { label: 'A', command: 'a' }, - { label: 'B', command: 'b' } + { label: 'A', id: 'A', command: 'a' }, + { label: 'B', id: 'B', command: 'b' } ]); }); @@ -167,7 +172,7 @@ describe('ContextMenuManager', function() { const dispatchedEvent = { target: grandchild }; expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([ - { label: 'A', command: 'b' } + { label: 'A', id: 'A', command: 'b' } ]); expect(item.command).toBe('a'); // doesn't modify original item template expect(createdEvent).toBe(dispatchedEvent); @@ -190,7 +195,7 @@ describe('ContextMenuManager', function() { const dispatchedEvent = { target: grandchild }; expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([ - { label: 'A', command: 'a' } + { label: 'A', id: 'A', command: 'a' } ]); expect(item.foo).toBeUndefined(); // doesn't modify original item template expect(shouldDisplayEvent).toBe(dispatchedEvent); @@ -293,10 +298,12 @@ describe('ContextMenuManager', function() { expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([ { label: 'A', + id: 'A', command: 'B', submenu: [ { - label: 'D' + label: 'D', + id: 'D' } ] } @@ -335,11 +342,13 @@ describe('ContextMenuManager', function() { expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([ { label: 'My Command', + id: 'My Command', command: 'test:my-command', accelerator: 'Ctrl+A', submenu: [ { label: 'My Other Command', + id: 'My Other Command', command: 'test:my-other-command', accelerator: 'Shift+B' } @@ -354,11 +363,13 @@ describe('ContextMenuManager', function() { expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([ { label: 'My Command', + id: 'My Command', command: 'test:my-command', accelerator: 'Ctrl+A', submenu: [ { label: 'My Other Command', + id: 'My Other Command', command: 'test:my-other-command', accelerator: 'Shift+B' } @@ -373,10 +384,12 @@ describe('ContextMenuManager', function() { expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([ { label: 'My Command', + id: 'My Command', command: 'test:my-command', submenu: [ { label: 'My Other Command', + id: 'My Other Command', command: 'test:my-other-command' } ] @@ -390,11 +403,13 @@ describe('ContextMenuManager', function() { expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([ { label: 'My Command', + id: 'My Command', command: 'test:my-command', accelerator: 'Ctrl+A', submenu: [ { label: 'My Other Command', + id: 'My Other Command', command: 'test:my-other-command', accelerator: 'Shift+B' } @@ -425,6 +440,7 @@ describe('ContextMenuManager', function() { expect(contextMenu.templateForEvent({ target: child })).toEqual([ { label: `Multi-keystroke command [${label}]`, + id: `Multi-keystroke command`, command: 'test:multi-keystroke-command' } ]); @@ -450,10 +466,12 @@ describe('ContextMenuManager', function() { expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([ { label: 'My Other Command', + id: 'My Other Command', command: 'test:my-other-command' }, { label: 'My Command', + id: 'My Command', command: 'test:my-command', after: ['test:my-other-command'] } @@ -464,6 +482,7 @@ describe('ContextMenuManager', function() { contextMenu.add({ '.parent': [ { + label: 'Parent', submenu: [ { label: 'My Command', @@ -481,13 +500,17 @@ describe('ContextMenuManager', function() { const dispatchedEvent = { target: parent }; expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([ { + label: 'Parent', + id: `Parent`, submenu: [ { label: 'My Other Command', + id: 'My Other Command', command: 'test:my-other-command' }, { label: 'My Command', + id: 'My Command', command: 'test:my-command', after: ['test:my-other-command'] } diff --git a/spec/fixtures/indentation/classes.js b/spec/fixtures/indentation/classes.js new file mode 100644 index 000000000..6179553e4 --- /dev/null +++ b/spec/fixtures/indentation/classes.js @@ -0,0 +1,16 @@ +class MyClass extends OtherComponent { + + state = { + test: 1 + } + + constructor() { + test(); + } + + otherfunction = (a, b = { + default: false + }) => { + more(); + } +} diff --git a/spec/fixtures/indentation/expressions.js b/spec/fixtures/indentation/expressions.js new file mode 100644 index 000000000..5b0d73b8d --- /dev/null +++ b/spec/fixtures/indentation/expressions.js @@ -0,0 +1,43 @@ +/* multi-line expressions */ +req + .shouldBeOne(); +too. + more. + shouldBeOneToo; + +const a = + long_expression; + +b = + long; + +b = + 3 + 5; + +b = + 3 + + 5; + +b = + 3 + + 5 + + 7 + + 8 + * 8 + * 9 + / 17 + * 8 + / 20 + - 34 + + 3 * + 9 + - 8; + +ifthis + && thendo() + || otherwise + && dothis + +/** + A comment, should be at 1 +*/ diff --git a/spec/fixtures/indentation/function_call.js b/spec/fixtures/indentation/function_call.js new file mode 100644 index 000000000..3295e2b86 --- /dev/null +++ b/spec/fixtures/indentation/function_call.js @@ -0,0 +1,35 @@ +foo({ + sd, + sdf + }, + 4 +); + +foo( 2, { + sd, + sdf + }, + 4 +); + +foo( 2, + { + sd, + sdf + }); + +foo( 2, { + sd, + sdf +}); + +foo(2, + 4); + +foo({ + symetric_opening_and_closing_scopes: 'indent me at 1' +}); + +foo(myWrapper(mysecondWrapper({ + a: 1 // should be at 1 +}))); diff --git a/spec/fixtures/indentation/if_then_else.js b/spec/fixtures/indentation/if_then_else.js new file mode 100644 index 000000000..3abbce912 --- /dev/null +++ b/spec/fixtures/indentation/if_then_else.js @@ -0,0 +1,59 @@ + +/** if-then-else loops */ +if (true) + foo(); +else + bar(); + +if (true) { + foo(); + bar(); +} else { + foo(); +} + +// https://github.com/atom/atom/issues/6691 +if (true) +{ + foo(); + bar(); +} +else +{ + foo(); +} + +if (true) { + if (yes) + doit(); // 2 + bar(); +} else if (more()) { + foo(); // 1 +} + +if (true) + foo(); +else + if (more()) { // 1 + foo(); // 1 +} + +if (true) + foo(); +else + if (more()) // 1 + foo(); // 2 + +if (we + ()) { + go(); +} + +if (true) { + foo(); + bar(); +} else if (false) { + more(); +} else { + foo(); +} diff --git a/spec/fixtures/indentation/jsx.jsx b/spec/fixtures/indentation/jsx.jsx new file mode 100644 index 000000000..dd74d659b --- /dev/null +++ b/spec/fixtures/indentation/jsx.jsx @@ -0,0 +1,47 @@ +/** JSX */ +const jsx = ( +
    + good + + link + + + sdfg + +
    + sdf +
    +
    +); + +const two = ( +
    + + test + + + test + +
    +); + +const a = ( + +); + +const b = ( + +); + +const two = ( +
    + { + test && 'test' + } +
    +); diff --git a/spec/fixtures/indentation/objects_and_array.js b/spec/fixtures/indentation/objects_and_array.js new file mode 100644 index 000000000..b77ce94d4 --- /dev/null +++ b/spec/fixtures/indentation/objects_and_array.js @@ -0,0 +1,39 @@ +var x = [ + 3, + 4 +]; + +const y = [ + 1 +]; + +const j = [{ + a: 1 +}]; + +let h = { + a: [ 1, + 2 ], + b: { j: [ + { l: 1 }] + }, + c: + { j: [ + { l: 1 }] + }, +}; + +const a = + { + b: 1 + }; + +const x = { + g: { + a: 1, + b: 2 + }, + h: { + c: 3 + } +} diff --git a/spec/fixtures/indentation/switch.js b/spec/fixtures/indentation/switch.js new file mode 100644 index 000000000..2afe0842f --- /dev/null +++ b/spec/fixtures/indentation/switch.js @@ -0,0 +1,11 @@ + +switch (e) { + case 5: + something(); + more(); + case 6: + somethingElse(); + case 7: + default: + done(); +} diff --git a/spec/fixtures/indentation/while.js b/spec/fixtures/indentation/while.js new file mode 100644 index 000000000..948998d1b --- /dev/null +++ b/spec/fixtures/indentation/while.js @@ -0,0 +1,36 @@ +/** While loops */ +while (condition) + inLoop(); + +while (condition) + inLoop(); +after(); + +while (mycondition) { + sdfsdfg(); +} + +while (mycondition) +{ + sdfsdfg(); +} + +while (mycond) + if (more) + doit; +after(); + +while (mycond) if (more) + doit; +after(); + +while (mycondition) { + sdfsdfg(); + if (test) { + more() + }} + +while (mycondition) + if (test) { + more() +} diff --git a/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/main.js b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/main.js new file mode 100644 index 000000000..3b6530bc1 --- /dev/null +++ b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/main.js @@ -0,0 +1,6 @@ +const condition = false; + +if (condition) { + const { native } = require("./node_modules/native-module"); + native(condition); +} diff --git a/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/build/Release/native.node b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/build/Release/native.node new file mode 100644 index 000000000..e69de29bb diff --git a/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/main.js b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/main.js new file mode 100644 index 000000000..bde22006e --- /dev/null +++ b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/main.js @@ -0,0 +1,7 @@ +exports.native = function loadNative(condition) { + if (condition) { + return require('../build/Release/native.node'); + } else { + return null; + } +} diff --git a/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/package.json b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/package.json new file mode 100644 index 000000000..cac262cba --- /dev/null +++ b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/package.json @@ -0,0 +1,4 @@ +{ + "name": "native-module", + "main": "./main.js" +} diff --git a/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/package.json b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/package.json new file mode 100644 index 000000000..857bc7221 --- /dev/null +++ b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/package.json @@ -0,0 +1,5 @@ +{ + "name": "package-with-incompatible-native-module", + "version": "1.0.0", + "main": "./main.js" +} diff --git a/spec/integration/helpers/start-atom.js b/spec/integration/helpers/start-atom.js index 91154cd8e..2c6caa19b 100644 --- a/spec/integration/helpers/start-atom.js +++ b/spec/integration/helpers/start-atom.js @@ -1,7 +1,7 @@ const path = require('path'); const http = require('http'); const temp = require('temp').track(); -const remote = require('remote'); +const { remote } = require('electron'); const { once } = require('underscore-plus'); const { spawn } = require('child_process'); const webdriverio = require('../../../script/node_modules/webdriverio'); @@ -53,16 +53,6 @@ const chromeDriverDown = done => { }; const buildAtomClient = async (args, env) => { - // Since ChromeDriver v2.41, ChromeDriver will only connect if, either we precise a port - // for remote debugging, either the embedder (ie electron) made sure to pass `USER_DATA_DIR` - // to the remote debugging server. - // So, for now, we'll just use a random port (we don't care about its value since we're not - // connecting through it). - // (inspired by https://github.com/electron/spectron/pull/361/commits/737db138bd8a6daaf80f9c2bff710ce4a5fff39b). - // TodoElectronIssue: Remove the whole remote-debugging-port param once we upgrade - // to Electron v5, since this was fixes there (see electron/electron#17800). - const randomPort = Math.floor(Math.random() * (9999 - 9000) + 9000); - const userDataDir = temp.mkdirSync('atom-user-data-dir'); const client = await webdriverio.remote({ host: 'localhost', @@ -79,8 +69,7 @@ const buildAtomClient = async (args, env) => { .join(' ')}`, 'dev', 'safe', - `user-data-dir=${userDataDir}`, - `remote-debugging-port=${randomPort}` + `user-data-dir=${userDataDir}` ] } } diff --git a/spec/main-process/atom-application.test.js b/spec/main-process/atom-application.test.js index 179d486a3..6601740d5 100644 --- a/spec/main-process/atom-application.test.js +++ b/spec/main-process/atom-application.test.js @@ -724,7 +724,7 @@ describe('AtomApplication', function() { }); it('opens a file to a specific line number and column', async function() { - await scenario.open(parseCommandLine('b/2.md:12:5')); + await scenario.open(parseCommandLine(['b/2.md:12:5'])); await scenario.assert('[_ 2.md]'); const w = scenario.getWindow(0); @@ -750,7 +750,7 @@ describe('AtomApplication', function() { }); it('truncates trailing whitespace and colons', async function() { - await scenario.open(parseCommandLine('b/2.md:: ')); + await scenario.open(parseCommandLine(['b/2.md:: '])); await scenario.assert('[_ 2.md]'); const w = scenario.getWindow(0); @@ -796,6 +796,7 @@ describe('AtomApplication', function() { app = scenario.getApplication(0); app.removeWindow(w); sinon.stub(app, 'promptForPathToOpen'); + global.atom = { workspace: { getActiveTextEditor() {} } }; }); it('opens a new file', function() { diff --git a/spec/main-process/parse-command-line.test.js b/spec/main-process/parse-command-line.test.js index e41feacf1..d46b80bc7 100644 --- a/spec/main-process/parse-command-line.test.js +++ b/spec/main-process/parse-command-line.test.js @@ -21,6 +21,65 @@ describe('parseCommandLine', () => { ]); assert.deepEqual(args.pathsToOpen, ['/some/path']); }); + + // The "underscore flag" with no "non-flag argument" after it + // is the minimal reproducer for the macOS Gatekeeper startup bug. + // By default, it causes the addition of boolean "true"s into yargs' "non-flag argument" array: `argv._` + // Whereas we do string-only operations on these arguments, expecting them to be paths or URIs. + describe('and --_ or -_ are passed', () => { + it('does not attempt to parse booleans as paths or URIs', () => { + const args = parseCommandLine([ + '--_', + '/some/path', + '-_', + '-_', + 'some/other/path', + 'atom://test/url', + '--_', + 'atom://other/url', + '-_', + './another-path.file', + '-_', + '-_', + '-_' + ]); + assert.deepEqual(args.urlsToOpen, [ + 'atom://test/url', + 'atom://other/url' + ]); + assert.deepEqual(args.pathsToOpen, [ + '/some/path', + 'some/other/path', + './another-path.file' + ]); + }); + }); + + describe('and a non-flag number is passed as an argument', () => { + it('does not attempt to parse numbers as paths or URIs', () => { + const args = parseCommandLine([ + '43', + '/some/path', + '22', + '97', + 'some/other/path', + 'atom://test/url', + '885', + 'atom://other/url', + '42', + './another-path.file' + ]); + assert.deepEqual(args.urlsToOpen, [ + 'atom://test/url', + 'atom://other/url' + ]); + assert.deepEqual(args.pathsToOpen, [ + '/some/path', + 'some/other/path', + './another-path.file' + ]); + }); + }); }); describe('when --uri-handler is passed', () => { @@ -41,4 +100,33 @@ describe('parseCommandLine', () => { assert.deepEqual(args.pathsToOpen, []); }); }); + + describe('when evil macOS Gatekeeper flag "-psn_0_[six or seven digits here]" is passed', () => { + it('ignores any arguments starting with "-psn_"', () => { + const getPsnFlag = () => { + return `-psn_0_${Math.floor(Math.random() * 10_000_000)}`; + }; + const args = parseCommandLine([ + getPsnFlag(), + '/some/path', + getPsnFlag(), + getPsnFlag(), + 'some/other/path', + 'atom://test/url', + getPsnFlag(), + 'atom://other/url', + '-psn_ Any argument starting with "-psn_" should be ignored, even this one.', + './another-path.file' + ]); + assert.deepEqual(args.urlsToOpen, [ + 'atom://test/url', + 'atom://other/url' + ]); + assert.deepEqual(args.pathsToOpen, [ + '/some/path', + 'some/other/path', + './another-path.file' + ]); + }); + }); }); diff --git a/spec/menu-manager-spec.js b/spec/menu-manager-spec.js index 730943a43..3b78e42b6 100644 --- a/spec/menu-manager-spec.js +++ b/spec/menu-manager-spec.js @@ -19,7 +19,11 @@ describe('MenuManager', function() { { label: 'A', submenu: [{ label: 'B', command: 'b' }] } ]); expect(menu.template).toEqual([ - { label: 'A', submenu: [{ label: 'B', command: 'b' }] } + { + label: 'A', + id: 'A', + submenu: [{ label: 'B', id: 'B', command: 'b' }] + } ]); disposable.dispose(); expect(menu.template).toEqual([]); @@ -45,13 +49,15 @@ describe('MenuManager', function() { expect(menu.template).toEqual([ { label: 'A', + id: 'A', submenu: [ - { label: 'B', command: 'b' }, + { label: 'B', id: 'B', command: 'b' }, { label: 'C', + id: 'C', submenu: [ - { label: 'D', command: 'd' }, - { label: 'E', command: 'e' } + { label: 'D', id: 'D', command: 'd' }, + { label: 'E', id: 'E', command: 'e' } ] } ] @@ -62,16 +68,25 @@ describe('MenuManager', function() { expect(menu.template).toEqual([ { label: 'A', + id: 'A', submenu: [ - { label: 'B', command: 'b' }, - { label: 'C', submenu: [{ label: 'D', command: 'd' }] } + { label: 'B', id: 'B', command: 'b' }, + { + label: 'C', + id: 'C', + submenu: [{ label: 'D', id: 'D', command: 'd' }] + } ] } ]); disposable2.dispose(); expect(menu.template).toEqual([ - { label: 'A', submenu: [{ label: 'B', command: 'b' }] } + { + label: 'A', + id: 'A', + submenu: [{ label: 'B', id: 'B', command: 'b' }] + } ]); disposable1.dispose(); @@ -84,7 +99,8 @@ describe('MenuManager', function() { menu.add([{ label: 'A', submenu: [{ label: 'B', command: 'b' }] }]); expect(menu.template[originalItemCount]).toEqual({ label: 'A', - submenu: [{ label: 'B', command: 'b' }] + id: 'A', + submenu: [{ label: 'B', id: 'B', command: 'b' }] }); }); }); diff --git a/spec/menu-sort-helpers-spec.js b/spec/menu-sort-helpers-spec.js index 2ac0b23d0..1299f8a6b 100644 --- a/spec/menu-sort-helpers-spec.js +++ b/spec/menu-sort-helpers-spec.js @@ -15,7 +15,7 @@ describe('contextMenu', () => { expect(sortMenuItems(items)).toEqual(expected); }); - it('preserves separators at the begining of set two', () => { + it('preserves separators at the beginning of set two', () => { const items = [ { command: 'core:one' }, { type: 'separator' }, diff --git a/spec/package-spec.js b/spec/package-spec.js index 59025efaa..a31c2141c 100644 --- a/spec/package-spec.js +++ b/spec/package-spec.js @@ -45,6 +45,20 @@ describe('Package', function() { ); }); + it('detects the package as incompatible even if .node file is loaded conditionally', function() { + const packagePath = atom.project + .getDirectories()[0] + .resolve( + 'packages/package-with-incompatible-native-module-loaded-conditionally' + ); + const pack = buildPackage(packagePath); + expect(pack.isCompatible()).toBe(false); + expect(pack.incompatibleModules[0].name).toBe('native-module'); + expect(pack.incompatibleModules[0].path).toBe( + path.join(packagePath, 'node_modules', 'native-module') + ); + }); + it("utilizes _atomModuleCache if present to determine the package's native dependencies", function() { let packagePath = atom.project .getDirectories()[0] diff --git a/spec/pane-container-element-spec.js b/spec/pane-container-element-spec.js index b50e0c6c1..b4e5f78b7 100644 --- a/spec/pane-container-element-spec.js +++ b/spec/pane-container-element-spec.js @@ -42,14 +42,14 @@ describe('PaneContainerElement', function() { ]); paneAxis.removeChild(paneAxis.getChildren()[2]); - return expect(childTagNames()).toEqual([ + expect(childTagNames()).toEqual([ 'atom-pane-axis', 'atom-pane-resize-handle', 'atom-pane-axis' ]); }); - return it('transfers focus to the next pane if a focused pane is removed', function() { + it('transfers focus to the next pane if a focused pane is removed', function() { const container = new PaneContainer(params); const containerElement = container.getElement(); const leftPane = container.getActivePane(); @@ -62,7 +62,8 @@ describe('PaneContainerElement', function() { expect(document.activeElement).toBe(rightPaneElement); rightPane.destroy(); - return expect(document.activeElement).toBe(leftPaneElement); + expect(containerElement).toHaveClass('panes'); + expect(document.activeElement).toBe(leftPaneElement); }); }); @@ -94,7 +95,7 @@ describe('PaneContainerElement', function() { ); expect(verticalPanes.length).toBe(2); expect(verticalPanes[0]).toBe(pane2.getElement()); - return expect(verticalPanes[1]).toBe(pane3.getElement()); + expect(verticalPanes[1]).toBe(pane3.getElement()); })); describe('when the resize element is dragged ', function() { @@ -103,9 +104,7 @@ describe('PaneContainerElement', function() { beforeEach(function() { container = new PaneContainer(params); containerElement = container.getElement(); - return document - .querySelector('#jasmine-content') - .appendChild(containerElement); + document.querySelector('#jasmine-content').appendChild(containerElement); }); const dragElementToPosition = function(element, clientX) { @@ -125,7 +124,7 @@ describe('PaneContainerElement', function() { }) ); - return element.dispatchEvent( + element.dispatchEvent( new MouseEvent('mouseup', { iew: window, bubbles: true, @@ -180,7 +179,7 @@ describe('PaneContainerElement', function() { runs(() => expectPaneScale([leftPane, 0.44], [rightPane, 1.55])); waitsForPromise(() => leftPane.close()); - return runs(() => expectPaneScale([rightPane, 1])); + runs(() => expectPaneScale([rightPane, 1])); }); it('splits or closes panes in orthogonal direction that the pane is being dragged', function() { @@ -206,7 +205,7 @@ describe('PaneContainerElement', function() { // dynamically close pane, the pane's flexscale will recover to origin value waitsForPromise(() => lowerPane.close()); - return runs(() => expectPaneScale([leftPane, 0.5], [rightPane, 1.5])); + runs(() => expectPaneScale([leftPane, 0.5], [rightPane, 1.5])); }); it('unsubscribes from mouse events when the pane is detached', function() { @@ -226,19 +225,19 @@ describe('PaneContainerElement', function() { waitsFor(() => document.addEventListener.callCount === 2); - return runs(function() { + runs(function() { expect(element.resizeStopped.callCount).toBe(0); container.destroy(); expect(element.resizeStopped.callCount).toBe(1); - return expect(document.removeEventListener.callCount).toBe(2); + expect(document.removeEventListener.callCount).toBe(2); }); }); - return it('does not throw an error when resized to fit content in a detached state', function() { + it('does not throw an error when resized to fit content in a detached state', function() { container.getActivePane().splitRight(); const element = getResizeElement(0); element.remove(); - return expect(() => element.resizeToFitContent()).not.toThrow(); + expect(() => element.resizeToFitContent()).not.toThrow(); }); }); @@ -248,7 +247,7 @@ describe('PaneContainerElement', function() { beforeEach(function() { const container = new PaneContainer(params); leftPane = container.getActivePane(); - return (rightPane = leftPane.splitRight()); + rightPane = leftPane.splitRight(); }); describe('when pane:increase-size is triggered', () => @@ -262,10 +261,10 @@ describe('PaneContainerElement', function() { atom.commands.dispatch(rightPane.getElement(), 'pane:increase-size'); expect(leftPane.getFlexScale()).toBe(1.1); - return expect(rightPane.getFlexScale()).toBe(1.1); + expect(rightPane.getFlexScale()).toBe(1.1); })); - return describe('when pane:decrease-size is triggered', () => + describe('when pane:decrease-size is triggered', () => it('decreases the size of the pane', function() { expect(leftPane.getFlexScale()).toBe(1); expect(rightPane.getFlexScale()).toBe(1); @@ -276,16 +275,16 @@ describe('PaneContainerElement', function() { atom.commands.dispatch(rightPane.getElement(), 'pane:decrease-size'); expect(leftPane.getFlexScale()).toBe(1 / 1.1); - return expect(rightPane.getFlexScale()).toBe(1 / 1.1); + expect(rightPane.getFlexScale()).toBe(1 / 1.1); })); }); - return describe('when only a single pane is present', function() { + describe('when only a single pane is present', function() { let [singlePane] = []; beforeEach(function() { const container = new PaneContainer(params); - return (singlePane = container.getActivePane()); + singlePane = container.getActivePane(); }); describe('when pane:increase-size is triggered', () => @@ -296,10 +295,10 @@ describe('PaneContainerElement', function() { expect(singlePane.getFlexScale()).toBe(1); atom.commands.dispatch(singlePane.getElement(), 'pane:increase-size'); - return expect(singlePane.getFlexScale()).toBe(1); + expect(singlePane.getFlexScale()).toBe(1); })); - return describe('when pane:decrease-size is triggered', () => + describe('when pane:decrease-size is triggered', () => it('does not decreases the size of the pane', function() { expect(singlePane.getFlexScale()).toBe(1); @@ -307,7 +306,7 @@ describe('PaneContainerElement', function() { expect(singlePane.getFlexScale()).toBe(1); atom.commands.dispatch(singlePane.getElement(), 'pane:decrease-size'); - return expect(singlePane.getFlexScale()).toBe(1); + expect(singlePane.getFlexScale()).toBe(1); })); }); }); diff --git a/spec/pane-container-spec.js b/spec/pane-container-spec.js index a21c3fd9c..d96f759b1 100644 --- a/spec/pane-container-spec.js +++ b/spec/pane-container-spec.js @@ -391,7 +391,7 @@ describe('PaneContainer', () => { }); }); - describe('::onWillDestroyPaneItem() and ::onDidDestroyPaneItem', () => { + describe('::onWillDestroyPaneItem() and ::onDidDestroyPaneItem()', () => { it('invokes the given callbacks when an item will be destroyed on any pane', async () => { const container = new PaneContainer(params); const pane1 = container.getRoot(); @@ -409,14 +409,37 @@ describe('PaneContainer', () => { await pane2.destroyItem(item3); await pane2.destroyItem(item2); - expect(events).toEqual([ - ['will', { item: item1, pane: pane1, index: 0 }], - ['did', { item: item1, pane: pane1, index: 0 }], - ['will', { item: item3, pane: pane2, index: 1 }], - ['did', { item: item3, pane: pane2, index: 1 }], - ['will', { item: item2, pane: pane2, index: 0 }], - ['did', { item: item2, pane: pane2, index: 0 }] + expect(events.length).toBe(6); + expect(events[1]).toEqual([ + 'did', + { item: item1, pane: pane1, index: 0 } ]); + expect(events[3]).toEqual([ + 'did', + { item: item3, pane: pane2, index: 1 } + ]); + expect(events[5]).toEqual([ + 'did', + { item: item2, pane: pane2, index: 0 } + ]); + + expect(events[0][0]).toEqual('will'); + expect(events[0][1].item).toEqual(item1); + expect(events[0][1].pane).toEqual(pane1); + expect(events[0][1].index).toEqual(0); + expect(typeof events[0][1].prevent).toEqual('function'); + + expect(events[2][0]).toEqual('will'); + expect(events[2][1].item).toEqual(item3); + expect(events[2][1].pane).toEqual(pane2); + expect(events[2][1].index).toEqual(1); + expect(typeof events[2][1].prevent).toEqual('function'); + + expect(events[4][0]).toEqual('will'); + expect(events[4][1].item).toEqual(item2); + expect(events[4][1].pane).toEqual(pane2); + expect(events[4][1].index).toEqual(0); + expect(typeof events[4][1].prevent).toEqual('function'); }); }); diff --git a/spec/pane-spec.js b/spec/pane-spec.js index 6fcb1fa1d..7482f9662 100644 --- a/spec/pane-spec.js +++ b/spec/pane-spec.js @@ -399,9 +399,8 @@ describe('Pane', () => { const pendingSpy = jasmine.createSpy('onItemDidTerminatePendingState'); const destroySpy = jasmine.createSpy('onWillDestroyItem'); - await atom.workspace.open('sample.txt', { pending: true }).then(() => { - pane = atom.workspace.getActivePane(); - }); + await atom.workspace.open('sample.txt', { pending: true }); + pane = atom.workspace.getActivePane(); pane.onItemDidTerminatePendingState(pendingSpy); pane.onWillDestroyItem(destroySpy); @@ -569,6 +568,32 @@ describe('Pane', () => { expect(pane.getActiveItem()).toBeUndefined(); }); + it('does nothing if prevented', () => { + const container = new PaneContainer({ + config: atom.config, + deserializerManager: atom.deserializers, + applicationDelegate: atom.applicationDelegate + }); + + pane.setContainer(container); + container.onWillDestroyPaneItem(e => e.prevent()); + pane.itemStack = [item2, item3, item1]; + + pane.activateItem(item1); + expect(pane.getActiveItem()).toBe(item1); + pane.destroyItem(item3); + expect(pane.itemStack).toEqual([item2, item3, item1]); + expect(pane.getActiveItem()).toBe(item1); + + pane.destroyItem(item1); + expect(pane.itemStack).toEqual([item2, item3, item1]); + expect(pane.getActiveItem()).toBe(item1); + + pane.destroyItem(item2); + expect(pane.itemStack).toEqual([item2, item3, item1]); + expect(pane.getActiveItem()).toBe(item1); + }); + it('invokes ::onWillDestroyItem() and PaneContainer::onWillDestroyPaneItem observers before destroying the item', async () => { jasmine.useRealClock(); pane.container = new PaneContainer({ config: atom.config, confirm }); @@ -590,10 +615,16 @@ describe('Pane', () => { await pane.destroyItem(item2); expect(item2.isDestroyed()).toBe(true); - expect(events).toEqual([ - ['will-destroy-item', { item: item2, index: 1 }], - ['will-destroy-pane-item', { item: item2, index: 1, pane }] - ]); + + expect(events[0][0]).toEqual('will-destroy-item'); + expect(events[0][1].item).toEqual(item2); + expect(events[0][1].index).toEqual(1); + + expect(events[1][0]).toEqual('will-destroy-pane-item'); + expect(events[1][1].item).toEqual(item2); + expect(events[1][1].index).toEqual(1); + expect(typeof events[1][1].prevent).toEqual('function'); + expect(events[1][1].pane).toEqual(pane); }); it('invokes ::onWillRemoveItem() observers', () => { diff --git a/spec/panel-container-element-spec.js b/spec/panel-container-element-spec.js index 649b5414d..e8ff50b23 100644 --- a/spec/panel-container-element-spec.js +++ b/spec/panel-container-element-spec.js @@ -9,7 +9,7 @@ describe('PanelContainerElement', () => { class TestPanelContainerItem {} class TestPanelContainerItemElement_ extends HTMLElement { - createdCallback() { + connectedCallback() { this.classList.add('test-root'); } initialize(model) { @@ -19,16 +19,20 @@ describe('PanelContainerElement', () => { focus() {} } - const TestPanelContainerItemElement = document.registerElement( + window.customElements.define( 'atom-test-container-item-element', - { prototype: TestPanelContainerItemElement_.prototype } + TestPanelContainerItemElement_ + ); + + const TestPanelContainerItemElement = document.createElement( + 'atom-test-container-item-element' ); beforeEach(() => { jasmineContent = document.body.querySelector('#jasmine-content'); atom.views.addViewProvider(TestPanelContainerItem, model => - new TestPanelContainerItemElement().initialize(model) + TestPanelContainerItemElement.initialize(model) ); container = new PanelContainer({ diff --git a/spec/spec-helper.coffee b/spec/spec-helper.coffee index bcf7ad386..48a63e235 100644 --- a/spec/spec-helper.coffee +++ b/spec/spec-helper.coffee @@ -254,7 +254,8 @@ addCustomMatchers = (spec) -> element = @actual element = element.get(0) if element.jquery @message = -> return "Expected element '#{element}' or its descendants #{toOrNotTo} show." - element.style.display in ['block', 'inline-block', 'static', 'fixed'] + computedStyle = getComputedStyle(element) + computedStyle.display isnt 'none' and computedStyle.visibility is 'visible' and not element.hidden toEqualPath: (expected) -> actualPath = path.normalize(@actual) @@ -262,6 +263,14 @@ addCustomMatchers = (spec) -> @message = -> return "Expected path '#{actualPath}' to be equal to '#{expectedPath}'." actualPath is expectedPath + toBeNear: (expected, acceptedError = 1, actual) -> + return (typeof expected is 'number') and (typeof acceptedError is 'number') and (typeof @actual is 'number') and (expected - acceptedError <= @actual) and (@actual <= expected + acceptedError) + + toHaveNearPixels: (expected, acceptedError = 1, actual) -> + expectedNumber = parseFloat(expected) + actualNumber = parseFloat(@actual) + return (typeof expected is 'string') and (typeof acceptedError is 'number') and (typeof @actual is 'string') and (expected.indexOf('px') >= 1) and (@actual.indexOf('px') >= 1) and (expectedNumber - acceptedError <= actualNumber) and (actualNumber <= expectedNumber + acceptedError) + window.waitsForPromise = (args...) -> label = null if args.length > 1 diff --git a/spec/styles-element-spec.js b/spec/styles-element-spec.js index effe1443e..7c3a9aaa5 100644 --- a/spec/styles-element-spec.js +++ b/spec/styles-element-spec.js @@ -1,4 +1,4 @@ -const StylesElement = require('../src/styles-element'); +const { createStylesElement } = require('../src/styles-element'); describe('StylesElement', function() { let [ @@ -9,7 +9,7 @@ describe('StylesElement', function() { ] = []; beforeEach(function() { - element = new StylesElement(); + element = createStylesElement(); element.initialize(atom.styles); document.querySelector('#jasmine-content').appendChild(element); addedStyleElements = []; diff --git a/spec/text-editor-component-spec.js b/spec/text-editor-component-spec.js index d6769dd59..7caf26282 100644 --- a/spec/text-editor-component-spec.js +++ b/spec/text-editor-component-spec.js @@ -18,15 +18,18 @@ const SAMPLE_TEXT = fs.readFileSync( 'utf8' ); -document.registerElement('text-editor-component-test-element', { - prototype: Object.create(HTMLElement.prototype, { - attachedCallback: { - value: function() { - this.didAttach(); - } - } - }) -}); +class DummyElement extends HTMLElement { + connectedCallback() { + this.didAttach(); + } +} + +window.customElements.define( + 'text-editor-component-test-element', + DummyElement +); + +document.createElement('text-editor-component-test-element'); const editors = []; let verticalScrollbarWidth, horizontalScrollbarHeight; @@ -239,8 +242,9 @@ describe('TextEditorComponent', () => { editor.setText('a\n'.repeat(30)); await component.getNextUpdatePromise(); expect(component.refs.content.offsetHeight).toBeGreaterThan(100); - expect(component.refs.content.offsetHeight).toBe( - component.getContentHeight() + expect(component.refs.content.offsetHeight).toBeNear( + component.getContentHeight(), + 2 ); }); @@ -302,7 +306,7 @@ describe('TextEditorComponent', () => { const lineNumberGutterElement = component.refs.gutterContainer.refs.lineNumberGutter.element; - expect(lineNumberGutterElement.offsetHeight).toBe( + expect(lineNumberGutterElement.offsetHeight).toBeNear( component.getScrollHeight() ); @@ -319,7 +323,7 @@ describe('TextEditorComponent', () => { editor.setText('x\n'.repeat(99)); await component.getNextUpdatePromise(); - expect(lineNumberGutterElement.offsetHeight).toBe( + expect(lineNumberGutterElement.offsetHeight).toBeNear( component.getScrollHeight() ); for (const child of lineNumberGutterElement.children) { @@ -412,8 +416,12 @@ describe('TextEditorComponent', () => { }); const verticalScrollbar = component.refs.verticalScrollbar.element; const horizontalScrollbar = component.refs.horizontalScrollbar.element; - expect(verticalScrollbar.scrollHeight).toBe(component.getContentHeight()); - expect(horizontalScrollbar.scrollWidth).toBe(component.getContentWidth()); + expect(verticalScrollbar.scrollHeight).toBeNear( + component.getContentHeight() + ); + expect(horizontalScrollbar.scrollWidth).toBeNear( + component.getContentWidth() + ); expect(getVerticalScrollbarWidth(component)).toBeGreaterThan(0); expect(getHorizontalScrollbarHeight(component)).toBeGreaterThan(0); expect(verticalScrollbar.style.bottom).toBe( @@ -479,18 +487,20 @@ describe('TextEditorComponent', () => { TextEditor.didUpdateScrollbarStyles(); await component.getNextUpdatePromise(); - expect(getHorizontalScrollbarHeight(component)).toBe(10); - expect(getVerticalScrollbarWidth(component)).toBe(10); - expect(component.refs.horizontalScrollbar.element.style.right).toBe( - '10px' + expect(getHorizontalScrollbarHeight(component)).toBeNear(10); + expect(getVerticalScrollbarWidth(component)).toBeNear(10); + expect( + component.refs.horizontalScrollbar.element.style.right + ).toHaveNearPixels('10px'); + expect( + component.refs.verticalScrollbar.element.style.bottom + ).toHaveNearPixels('10px'); + expect(component.refs.horizontalScrollbar.element.scrollLeft).toBeNear( + 10 ); - expect(component.refs.verticalScrollbar.element.style.bottom).toBe( - '10px' - ); - expect(component.refs.horizontalScrollbar.element.scrollLeft).toBe(10); - expect(component.refs.verticalScrollbar.element.scrollTop).toBe(20); - expect(component.getScrollContainerClientHeight()).toBe(100 - 10); - expect(component.getScrollContainerClientWidth()).toBe( + expect(component.refs.verticalScrollbar.element.scrollTop).toBeNear(20); + expect(component.getScrollContainerClientHeight()).toBeNear(100 - 10); + expect(component.getScrollContainerClientWidth()).toBeNear( 100 - component.getGutterContainerWidth() - 10 ); @@ -498,18 +508,20 @@ describe('TextEditorComponent', () => { element.remove(); jasmine.attachToDOM(element); - expect(getHorizontalScrollbarHeight(component)).toBe(10); - expect(getVerticalScrollbarWidth(component)).toBe(10); - expect(component.refs.horizontalScrollbar.element.style.right).toBe( - '10px' + expect(getHorizontalScrollbarHeight(component)).toBeNear(10); + expect(getVerticalScrollbarWidth(component)).toBeNear(10); + expect( + component.refs.horizontalScrollbar.element.style.right + ).toHaveNearPixels('10px'); + expect( + component.refs.verticalScrollbar.element.style.bottom + ).toHaveNearPixels('10px'); + expect(component.refs.horizontalScrollbar.element.scrollLeft).toBeNear( + 10 ); - expect(component.refs.verticalScrollbar.element.style.bottom).toBe( - '10px' - ); - expect(component.refs.horizontalScrollbar.element.scrollLeft).toBe(10); - expect(component.refs.verticalScrollbar.element.scrollTop).toBe(20); - expect(component.getScrollContainerClientHeight()).toBe(100 - 10); - expect(component.getScrollContainerClientWidth()).toBe( + expect(component.refs.verticalScrollbar.element.scrollTop).toBeNear(20); + expect(component.getScrollContainerClientHeight()).toBeNear(100 - 10); + expect(component.getScrollContainerClientWidth()).toBeNear( 100 - component.getGutterContainerWidth() - 10 ); @@ -596,8 +608,8 @@ describe('TextEditorComponent', () => { it('blinks cursors when the editor is focused and the cursors are not moving', async () => { assertDocumentFocused(); const { component, element, editor } = buildComponent(); - component.props.cursorBlinkPeriod = 40; - component.props.cursorBlinkResumeDelay = 40; + component.props.cursorBlinkPeriod = 30; + component.props.cursorBlinkResumeDelay = 30; editor.addCursorAtScreenPosition([1, 0]); element.focus(); @@ -723,7 +735,7 @@ describe('TextEditorComponent', () => { expect(hiddenInput.getBoundingClientRect().top).toBe( clientTopForLine(component, 7) ); - expect(Math.round(hiddenInput.getBoundingClientRect().left)).toBe( + expect(Math.round(hiddenInput.getBoundingClientRect().left)).toBeNear( clientLeftForCharacter(component, 7, 4) ); }); @@ -752,14 +764,6 @@ describe('TextEditorComponent', () => { ' right = [];' ); - await setEditorWidthInCharacters(component, 45); - expect(lineNodeForScreenRow(component, 3).textContent).toBe( - ' var pivot = items.shift(), current, left ' - ); - expect(lineNodeForScreenRow(component, 4).textContent).toBe( - ' = [], right = [];' - ); - const { scrollContainer } = component.refs; expect(scrollContainer.clientWidth).toBe(scrollContainer.scrollWidth); }); @@ -815,7 +819,7 @@ describe('TextEditorComponent', () => { verticalScrollbarWidth + 2 * editorPadding ); - expect(initialHeight).toBe( + expect(initialHeight).toBeNear( component.getContentHeight() + horizontalScrollbarHeight + 2 * editorPadding @@ -836,7 +840,7 @@ describe('TextEditorComponent', () => { // When autoHeight is enabled, height adjusts to content editor.insertText('\n'.repeat(5)); await component.getNextUpdatePromise(); - expect(element.offsetHeight).toBe( + expect(element.offsetHeight).toBeNear( component.getContentHeight() + horizontalScrollbarHeight + 2 * editorPadding @@ -854,7 +858,7 @@ describe('TextEditorComponent', () => { it('does not render the line numbers but still renders the line number gutter if showLineNumbers is false', async () => { function checkScrollContainerLeft(component) { const { scrollContainer, gutterContainer } = component.refs; - expect(scrollContainer.getBoundingClientRect().left).toBe( + expect(scrollContainer.getBoundingClientRect().left).toBeNear( Math.round(gutterContainer.element.getBoundingClientRect().right) ); } @@ -956,6 +960,7 @@ describe('TextEditorComponent', () => { '0', '1', '2', + '2', '3', '3', '4', @@ -992,7 +997,8 @@ describe('TextEditorComponent', () => { '15', '16', '17', - '18' + '18', + '19' ]); } @@ -1010,6 +1016,7 @@ describe('TextEditorComponent', () => { '1', '2', '3', + '3', '4', '4', '5', @@ -1047,7 +1054,8 @@ describe('TextEditorComponent', () => { '16', '17', '18', - '19' + '19', + '20' ]); } }); @@ -1394,20 +1402,20 @@ describe('TextEditorComponent', () => { editor.scrollToScreenRange([[4, 0], [6, 0]]); await component.getNextUpdatePromise(); - expect(component.getScrollBottom()).toBe( + expect(component.getScrollBottom()).toBeNear( (6 + 1 + editor.verticalScrollMargin) * component.getLineHeight() ); editor.scrollToScreenPosition([8, 0]); await component.getNextUpdatePromise(); - expect(component.getScrollBottom()).toBe( + expect(component.getScrollBottom()).toBeNear( (8 + 1 + editor.verticalScrollMargin) * component.measurements.lineHeight ); editor.scrollToScreenPosition([3, 0]); await component.getNextUpdatePromise(); - expect(component.getScrollTop()).toBe( + expect(component.getScrollTop()).toBeNear( (3 - editor.verticalScrollMargin) * component.measurements.lineHeight ); @@ -1430,25 +1438,25 @@ describe('TextEditorComponent', () => { editor.scrollToScreenPosition([6, 0]); await component.getNextUpdatePromise(); - expect(component.getScrollBottom()).toBe( + expect(component.getScrollBottom()).toBeNear( (6 + 1 + scrollMarginInLines) * component.measurements.lineHeight ); editor.scrollToScreenPosition([6, 4]); await component.getNextUpdatePromise(); - expect(component.getScrollBottom()).toBe( + expect(component.getScrollBottom()).toBeNear( (6 + 1 + scrollMarginInLines) * component.measurements.lineHeight ); editor.scrollToScreenRange([[4, 4], [6, 4]]); await component.getNextUpdatePromise(); - expect(component.getScrollTop()).toBe( + expect(component.getScrollTop()).toBeNear( (4 - scrollMarginInLines) * component.measurements.lineHeight ); editor.scrollToScreenRange([[4, 4], [6, 4]], { reversed: false }); await component.getNextUpdatePromise(); - expect(component.getScrollBottom()).toBe( + expect(component.getScrollBottom()).toBeNear( (6 + 1 + scrollMarginInLines) * component.measurements.lineHeight ); }); @@ -1483,7 +1491,7 @@ describe('TextEditorComponent', () => { lineNodeForScreenRow(component, 1).getBoundingClientRect().left - editor.horizontalScrollMargin * component.measurements.baseCharacterWidth; - expect(component.getScrollLeft()).toBeCloseTo(expectedScrollLeft, 0); + expect(component.getScrollLeft()).toBeNear(expectedScrollLeft); editor.scrollToScreenRange([[1, 12], [2, 28]], { reversed: false }); await component.getNextUpdatePromise(); @@ -1494,7 +1502,7 @@ describe('TextEditorComponent', () => { editor.horizontalScrollMargin * component.measurements.baseCharacterWidth - component.getScrollContainerClientWidth(); - expect(component.getScrollLeft()).toBeCloseTo(expectedScrollLeft, 0); + expect(component.getScrollLeft()).toBeNear(expectedScrollLeft); }); it('does not horizontally autoscroll by more than half of the visible "base-width" characters if the editor is narrower than twice the scroll margin', async () => { @@ -1516,7 +1524,7 @@ describe('TextEditorComponent', () => { Math.floor((editorWidthInChars - 1) / 2) * component.getBaseCharacterWidth() ); - expect(component.getScrollLeft()).toBe(expectedScrollLeft); + expect(component.getScrollLeft()).toBeNear(expectedScrollLeft); }); it('correctly autoscrolls after inserting a line that exceeds the current content width', async () => { @@ -1531,7 +1539,7 @@ describe('TextEditorComponent', () => { editor.insertText('x'.repeat(100)); await component.getNextUpdatePromise(); - expect(component.getScrollLeft()).toBe( + expect(component.getScrollLeft()).toBeNear( component.getScrollWidth() - component.getScrollContainerClientWidth() ); }); @@ -1545,7 +1553,7 @@ describe('TextEditorComponent', () => { editor.scrollToBufferPosition([11, 5]); editor.getBuffer().deleteRows(11, 12); await component.getNextUpdatePromise(); - expect(component.getScrollBottom()).toBe( + expect(component.getScrollBottom()).toBeNear( (10 + 1) * component.measurements.lineHeight ); }); @@ -1562,10 +1570,10 @@ describe('TextEditorComponent', () => { editor.insertText('\n\n' + 'x'.repeat(100)); await component.getNextUpdatePromise(); - expect(component.getScrollTop()).toBe( + expect(component.getScrollTop()).toBeNear( component.getScrollHeight() - component.getScrollContainerClientHeight() ); - expect(component.getScrollLeft()).toBe( + expect(component.getScrollLeft()).toBeNear( component.getScrollWidth() - component.getScrollContainerClientWidth() ); @@ -1592,36 +1600,36 @@ describe('TextEditorComponent', () => { // Assigns the scrollTop based on the logical position when attached jasmine.attachToDOM(element); const expectedScrollTop = Math.round(6 * component.getLineHeight()); - expect(component.getScrollTopRow()).toBe(6); - expect(component.getScrollTop()).toBe(expectedScrollTop); + expect(component.getScrollTopRow()).toBeNear(6); + expect(component.getScrollTop()).toBeNear(expectedScrollTop); expect(component.refs.content.style.transform).toBe( `translate(0px, -${expectedScrollTop}px)` ); // Allows the scrollTopRow to be updated while attached component.setScrollTopRow(4); - expect(component.getScrollTopRow()).toBe(4); - expect(component.getScrollTop()).toBe( + expect(component.getScrollTopRow()).toBeNear(4); + expect(component.getScrollTop()).toBeNear( Math.round(4 * component.getLineHeight()) ); // Preserves the scrollTopRow when detached element.remove(); - expect(component.getScrollTopRow()).toBe(4); - expect(component.getScrollTop()).toBe( + expect(component.getScrollTopRow()).toBeNear(4); + expect(component.getScrollTop()).toBeNear( Math.round(4 * component.getLineHeight()) ); component.setScrollTopRow(6); - expect(component.getScrollTopRow()).toBe(6); - expect(component.getScrollTop()).toBe( + expect(component.getScrollTopRow()).toBeNear(6); + expect(component.getScrollTop()).toBeNear( Math.round(6 * component.getLineHeight()) ); jasmine.attachToDOM(element); element.style.height = '60px'; - expect(component.getScrollTopRow()).toBe(6); - expect(component.getScrollTop()).toBe( + expect(component.getScrollTopRow()).toBeNear(6); + expect(component.getScrollTop()).toBeNear( Math.round(6 * component.getLineHeight()) ); }); @@ -1691,8 +1699,8 @@ describe('TextEditorComponent', () => { wheelDeltaY: -20, preventDefault: eventPreventDefaultStub }); - expect(component.getScrollTop()).toBe(expectedScrollTop); - expect(component.getScrollLeft()).toBe(expectedScrollLeft); + expect(component.getScrollTop()).toBeNear(expectedScrollTop); + expect(component.getScrollLeft()).toBeNear(expectedScrollLeft); expect(component.refs.content.style.transform).toBe( `translate(${-expectedScrollLeft}px, ${-expectedScrollTop}px)` ); @@ -1707,8 +1715,8 @@ describe('TextEditorComponent', () => { wheelDeltaY: 10, preventDefault: eventPreventDefaultStub }); - expect(component.getScrollTop()).toBe(expectedScrollTop); - expect(component.getScrollLeft()).toBe(expectedScrollLeft); + expect(component.getScrollTop()).toBeNear(expectedScrollTop); + expect(component.getScrollLeft()).toBeNear(expectedScrollLeft); expect(component.refs.content.style.transform).toBe( `translate(${-expectedScrollLeft}px, ${-expectedScrollTop}px)` ); @@ -1722,8 +1730,8 @@ describe('TextEditorComponent', () => { wheelDeltaY: 10, preventDefault: eventPreventDefaultStub }); - expect(component.getScrollTop()).toBe(expectedScrollTop); - expect(component.getScrollLeft()).toBe(expectedScrollLeft); + expect(component.getScrollTop()).toBeNear(expectedScrollTop); + expect(component.getScrollLeft()).toBeNear(expectedScrollLeft); expect(component.refs.content.style.transform).toBe( `translate(${-expectedScrollLeft}px, ${-expectedScrollTop}px)` ); @@ -1738,8 +1746,8 @@ describe('TextEditorComponent', () => { wheelDeltaY: -8, preventDefault: eventPreventDefaultStub }); - expect(component.getScrollTop()).toBe(expectedScrollTop); - expect(component.getScrollLeft()).toBe(expectedScrollLeft); + expect(component.getScrollTop()).toBeNear(expectedScrollTop); + expect(component.getScrollLeft()).toBeNear(expectedScrollLeft); expect(component.refs.content.style.transform).toBe( `translate(${-expectedScrollLeft}px, ${-expectedScrollTop}px)` ); @@ -1764,7 +1772,7 @@ describe('TextEditorComponent', () => { wheelDeltaY: -20, preventDefault: eventPreventDefaultStub }); - expect(component.getScrollTop()).toBe(expectedScrollTop); + expect(component.getScrollTop()).toBeNear(expectedScrollTop); expect(component.refs.content.style.transform).toBe( `translate(0px, -${expectedScrollTop}px)` ); @@ -1779,7 +1787,7 @@ describe('TextEditorComponent', () => { shiftKey: true, preventDefault: eventPreventDefaultStub }); - expect(component.getScrollLeft()).toBe(expectedScrollLeft); + expect(component.getScrollLeft()).toBeNear(expectedScrollLeft); expect(component.refs.content.style.transform).toBe( `translate(-${expectedScrollLeft}px, 0px)` ); @@ -1913,20 +1921,20 @@ describe('TextEditorComponent', () => { setScrollTop(component, NaN); setScrollLeft(component, NaN); await component.getNextUpdatePromise(); - expect(component.getScrollTop()).toBe(initialScrollTop); - expect(component.getScrollLeft()).toBe(initialScrollLeft); + expect(component.getScrollTop()).toBeNear(initialScrollTop); + expect(component.getScrollLeft()).toBeNear(initialScrollLeft); setScrollTop(component, null); setScrollLeft(component, null); await component.getNextUpdatePromise(); - expect(component.getScrollTop()).toBe(initialScrollTop); - expect(component.getScrollLeft()).toBe(initialScrollLeft); + expect(component.getScrollTop()).toBeNear(initialScrollTop); + expect(component.getScrollLeft()).toBeNear(initialScrollLeft); setScrollTop(component, undefined); setScrollLeft(component, undefined); await component.getNextUpdatePromise(); - expect(component.getScrollTop()).toBe(initialScrollTop); - expect(component.getScrollLeft()).toBe(initialScrollLeft); + expect(component.getScrollTop()).toBeNear(initialScrollTop); + expect(component.getScrollLeft()).toBeNear(initialScrollLeft); }); }); @@ -2247,10 +2255,10 @@ describe('TextEditorComponent', () => { expect(regionRect.top).toBe( lineNodeForScreenRow(component, 1).getBoundingClientRect().top ); - expect(Math.round(regionRect.left)).toBe( + expect(Math.round(regionRect.left)).toBeNear( clientLeftForCharacter(component, 1, 2) ); - expect(Math.round(regionRect.right)).toBe( + expect(Math.round(regionRect.right)).toBeNear( clientLeftForCharacter(component, 1, 10) ); } @@ -2268,10 +2276,10 @@ describe('TextEditorComponent', () => { expect(regionRect.bottom).toBe( lineNodeForScreenRow(component, 1).getBoundingClientRect().bottom ); - expect(Math.round(regionRect.left)).toBe( + expect(Math.round(regionRect.left)).toBeNear( clientLeftForCharacter(component, 1, 4) ); - expect(Math.round(regionRect.right)).toBe( + expect(Math.round(regionRect.right)).toBeNear( clientLeftForCharacter(component, 1, 8) ); } @@ -2296,24 +2304,24 @@ describe('TextEditorComponent', () => { expect(region0Rect.bottom).toBe( lineNodeForScreenRow(component, 2).getBoundingClientRect().bottom ); - expect(Math.round(region0Rect.left)).toBe( + expect(Math.round(region0Rect.left)).toBeNear( clientLeftForCharacter(component, 2, 4) ); - expect(Math.round(region0Rect.right)).toBe( + expect(Math.round(region0Rect.right)).toBeNear( component.refs.content.getBoundingClientRect().right ); const region1Rect = regions[1].getBoundingClientRect(); - expect(region1Rect.top).toBe( + expect(region1Rect.top).toBeNear( lineNodeForScreenRow(component, 3).getBoundingClientRect().top ); - expect(region1Rect.bottom).toBe( + expect(region1Rect.bottom).toBeNear( lineNodeForScreenRow(component, 3).getBoundingClientRect().bottom ); - expect(Math.round(region1Rect.left)).toBe( + expect(Math.round(region1Rect.left)).toBeNear( clientLeftForCharacter(component, 3, 0) ); - expect(Math.round(region1Rect.right)).toBe( + expect(Math.round(region1Rect.right)).toBeNear( clientLeftForCharacter(component, 3, 4) ); } @@ -2328,44 +2336,44 @@ describe('TextEditorComponent', () => { expect(regions.length).toBe(3); const region0Rect = regions[0].getBoundingClientRect(); - expect(region0Rect.top).toBe( + expect(region0Rect.top).toBeNear( lineNodeForScreenRow(component, 2).getBoundingClientRect().top ); - expect(region0Rect.bottom).toBe( + expect(region0Rect.bottom).toBeNear( lineNodeForScreenRow(component, 2).getBoundingClientRect().bottom ); - expect(Math.round(region0Rect.left)).toBe( + expect(Math.round(region0Rect.left)).toBeNear( clientLeftForCharacter(component, 2, 4) ); - expect(Math.round(region0Rect.right)).toBe( + expect(Math.round(region0Rect.right)).toBeNear( component.refs.content.getBoundingClientRect().right ); const region1Rect = regions[1].getBoundingClientRect(); - expect(region1Rect.top).toBe( + expect(region1Rect.top).toBeNear( lineNodeForScreenRow(component, 3).getBoundingClientRect().top ); - expect(region1Rect.bottom).toBe( + expect(region1Rect.bottom).toBeNear( lineNodeForScreenRow(component, 5).getBoundingClientRect().top ); - expect(Math.round(region1Rect.left)).toBe( + expect(Math.round(region1Rect.left)).toBeNear( component.refs.content.getBoundingClientRect().left ); - expect(Math.round(region1Rect.right)).toBe( + expect(Math.round(region1Rect.right)).toBeNear( component.refs.content.getBoundingClientRect().right ); const region2Rect = regions[2].getBoundingClientRect(); - expect(region2Rect.top).toBe( + expect(region2Rect.top).toBeNear( lineNodeForScreenRow(component, 5).getBoundingClientRect().top ); - expect(region2Rect.bottom).toBe( + expect(region2Rect.bottom).toBeNear( lineNodeForScreenRow(component, 6).getBoundingClientRect().top ); - expect(Math.round(region2Rect.left)).toBe( + expect(Math.round(region2Rect.left)).toBeNear( component.refs.content.getBoundingClientRect().left ); - expect(Math.round(region2Rect.right)).toBe( + expect(Math.round(region2Rect.right)).toBeNear( clientLeftForCharacter(component, 5, 4) ); } @@ -2542,9 +2550,9 @@ describe('TextEditorComponent', () => { await component.getNextUpdatePromise(); const regions = element.querySelectorAll('.highlight .region'); - expect(regions[0].offsetTop).toBe(3 * component.getLineHeight()); - expect(regions[0].offsetHeight).toBe(component.getLineHeight()); - expect(regions[1].offsetTop).toBe(4 * component.getLineHeight() + 30); + expect(regions[0].offsetTop).toBeNear(3 * component.getLineHeight()); + expect(regions[0].offsetHeight).toBeNear(component.getLineHeight()); + expect(regions[1].offsetTop).toBeNear(4 * component.getLineHeight() + 30); }); }); @@ -2596,33 +2604,33 @@ describe('TextEditorComponent', () => { const overlayWrapper = overlayElement.parentElement; expect(overlayWrapper.classList.contains('a')).toBe(true); - expect(overlayWrapper.getBoundingClientRect().top).toBe( + expect(overlayWrapper.getBoundingClientRect().top).toBeNear( clientTopForLine(component, 5) ); - expect(overlayWrapper.getBoundingClientRect().left).toBe( + expect(overlayWrapper.getBoundingClientRect().left).toBeNear( clientLeftForCharacter(component, 4, 25) ); // Updates the horizontal position on scroll await setScrollLeft(component, 150); - expect(overlayWrapper.getBoundingClientRect().left).toBe( + expect(overlayWrapper.getBoundingClientRect().left).toBeNear( clientLeftForCharacter(component, 4, 25) ); // Shifts the overlay horizontally to ensure the overlay element does not // overflow the window await setScrollLeft(component, 30); - expect(overlayElement.getBoundingClientRect().right).toBe( + expect(overlayElement.getBoundingClientRect().right).toBeNear( fakeWindow.getBoundingClientRect().right ); await setScrollLeft(component, 280); - expect(overlayElement.getBoundingClientRect().left).toBe( + expect(overlayElement.getBoundingClientRect().left).toBeNear( fakeWindow.getBoundingClientRect().left ); // Updates the vertical position on scroll await setScrollTop(component, 60); - expect(overlayWrapper.getBoundingClientRect().top).toBe( + expect(overlayWrapper.getBoundingClientRect().top).toBeNear( clientTopForLine(component, 5) ); @@ -2630,25 +2638,25 @@ describe('TextEditorComponent', () => { // overflow the bottom of the window setScrollLeft(component, 100); await setScrollTop(component, 0); - expect(overlayWrapper.getBoundingClientRect().bottom).toBe( + expect(overlayWrapper.getBoundingClientRect().bottom).toBeNear( clientTopForLine(component, 4) ); // Flips the overlay vertically on overlay resize if necessary await setScrollTop(component, 20); - expect(overlayWrapper.getBoundingClientRect().top).toBe( + expect(overlayWrapper.getBoundingClientRect().top).toBeNear( clientTopForLine(component, 5) ); overlayElement.style.height = 60 + 'px'; await overlayComponent.getNextUpdatePromise(); - expect(overlayWrapper.getBoundingClientRect().bottom).toBe( + expect(overlayWrapper.getBoundingClientRect().bottom).toBeNear( clientTopForLine(component, 4) ); // Does not flip the overlay vertically if it would overflow the top of the window overlayElement.style.height = 80 + 'px'; await overlayComponent.getNextUpdatePromise(); - expect(overlayWrapper.getBoundingClientRect().top).toBe( + expect(overlayWrapper.getBoundingClientRect().top).toBeNear( clientTopForLine(component, 5) ); @@ -2721,7 +2729,7 @@ describe('TextEditorComponent', () => { const { scrollContainer, gutterContainer } = component.refs; function checkScrollContainerLeft() { - expect(scrollContainer.getBoundingClientRect().left).toBe( + expect(scrollContainer.getBoundingClientRect().left).toBeNear( Math.round(gutterContainer.element.getBoundingClientRect().right) ); } @@ -2829,19 +2837,19 @@ describe('TextEditorComponent', () => { const [decorationNode3] = gutterB.getElement().firstChild.children; expect(decorationNode1.className).toBe('decoration a'); - expect(decorationNode1.getBoundingClientRect().top).toBe( + expect(decorationNode1.getBoundingClientRect().top).toBeNear( clientTopForLine(component, 2) ); - expect(decorationNode1.getBoundingClientRect().bottom).toBe( + expect(decorationNode1.getBoundingClientRect().bottom).toBeNear( clientTopForLine(component, 5) ); expect(decorationNode1.firstChild).toBeNull(); expect(decorationNode2.className).toBe('decoration b'); - expect(decorationNode2.getBoundingClientRect().top).toBe( + expect(decorationNode2.getBoundingClientRect().top).toBeNear( clientTopForLine(component, 6) ); - expect(decorationNode2.getBoundingClientRect().bottom).toBe( + expect(decorationNode2.getBoundingClientRect().bottom).toBeNear( clientTopForLine(component, 8) ); expect(decorationNode2.firstChild).toBe(decorationElement1); @@ -2851,10 +2859,10 @@ describe('TextEditorComponent', () => { expect(decorationElement1.offsetWidth).toBe(decorationNode2.offsetWidth); expect(decorationNode3.className).toBe('decoration'); - expect(decorationNode3.getBoundingClientRect().top).toBe( + expect(decorationNode3.getBoundingClientRect().top).toBeNear( clientTopForLine(component, 9) ); - expect(decorationNode3.getBoundingClientRect().bottom).toBe( + expect(decorationNode3.getBoundingClientRect().bottom).toBeNear( clientTopForLine(component, 12) + component.getLineHeight() ); expect(decorationNode3.firstChild).toBe(decorationElement2); @@ -2992,7 +3000,7 @@ describe('TextEditorComponent', () => { await component.getNextUpdatePromise(); expect(component.getRenderedStartRow()).toBe(0); expect(component.getRenderedEndRow()).toBe(9); - expect(component.getScrollHeight()).toBe( + expect(component.getScrollHeight()).toBeNear( editor.getScreenLineCount() * component.getLineHeight() + getElementHeight(item1) + getElementHeight(item2) @@ -3039,7 +3047,7 @@ describe('TextEditorComponent', () => { await component.getNextUpdatePromise(); expect(component.getRenderedStartRow()).toBe(0); expect(component.getRenderedEndRow()).toBe(9); - expect(component.getScrollHeight()).toBe( + expect(component.getScrollHeight()).toBeNear( editor.getScreenLineCount() * component.getLineHeight() + getElementHeight(item1) + getElementHeight(item2) + @@ -3078,7 +3086,7 @@ describe('TextEditorComponent', () => { await component.getNextUpdatePromise(); expect(component.getRenderedStartRow()).toBe(0); expect(component.getRenderedEndRow()).toBe(9); - expect(component.getScrollHeight()).toBe( + expect(component.getScrollHeight()).toBeNear( editor.getScreenLineCount() * component.getLineHeight() + getElementHeight(item2) + getElementHeight(item3) + @@ -3113,7 +3121,7 @@ describe('TextEditorComponent', () => { await component.getNextUpdatePromise(); expect(component.getRenderedStartRow()).toBe(0); expect(component.getRenderedEndRow()).toBe(9); - expect(component.getScrollHeight()).toBe( + expect(component.getScrollHeight()).toBeNear( editor.getScreenLineCount() * component.getLineHeight() + getElementHeight(item2) + getElementHeight(item3) + @@ -3147,7 +3155,7 @@ describe('TextEditorComponent', () => { await component.getNextUpdatePromise(); expect(component.getRenderedStartRow()).toBe(0); expect(component.getRenderedEndRow()).toBe(9); - expect(component.getScrollHeight()).toBe( + expect(component.getScrollHeight()).toBeNear( editor.getScreenLineCount() * component.getLineHeight() + getElementHeight(item2) + getElementHeight(item3) + @@ -3183,7 +3191,7 @@ describe('TextEditorComponent', () => { ); expect(component.getRenderedStartRow()).toBe(3); expect(component.getRenderedEndRow()).toBe(12); - expect(component.getScrollHeight()).toBe( + expect(component.getScrollHeight()).toBeNear( editor.getScreenLineCount() * component.getLineHeight() + getElementHeight(item2) + getElementHeight(item3) + @@ -3214,7 +3222,7 @@ describe('TextEditorComponent', () => { await component.getNextUpdatePromise(); expect(component.getRenderedStartRow()).toBe(0); expect(component.getRenderedEndRow()).toBe(9); - expect(component.getScrollHeight()).toBe( + expect(component.getScrollHeight()).toBeNear( editor.getScreenLineCount() * component.getLineHeight() + getElementHeight(item2) + getElementHeight(item3) + @@ -3253,7 +3261,7 @@ describe('TextEditorComponent', () => { await component.getNextUpdatePromise(); expect(component.getRenderedStartRow()).toBe(0); expect(component.getRenderedEndRow()).toBe(9); - expect(component.getScrollHeight()).toBe( + expect(component.getScrollHeight()).toBeNear( editor.getScreenLineCount() * component.getLineHeight() + getElementHeight(item2) + getElementHeight(item3) + @@ -3303,7 +3311,7 @@ describe('TextEditorComponent', () => { await component.getNextUpdatePromise(); expect(component.getRenderedStartRow()).toBe(0); expect(component.getRenderedEndRow()).toBe(9); - expect(component.getScrollHeight()).toBe( + expect(component.getScrollHeight()).toBeNear( editor.getScreenLineCount() * component.getLineHeight() + getElementHeight(item2) + getElementHeight(item3) + @@ -3341,7 +3349,7 @@ describe('TextEditorComponent', () => { component.getRenderedStartRow() === 0 && component.getRenderedEndRow() === 13 ); - expect(component.getScrollHeight()).toBe( + expect(component.getScrollHeight()).toBeNear( editor.getScreenLineCount() * component.getLineHeight() + getElementHeight(item2) + getElementHeight(item3) + @@ -3832,16 +3840,16 @@ describe('TextEditorComponent', () => { tile.tileStartRow ).parentElement; const linesTileBoundingRect = linesTileElement.getBoundingClientRect(); - expect(linesTileBoundingRect.height).toBe(tile.height); - expect(linesTileBoundingRect.top).toBe(top); + expect(linesTileBoundingRect.height).toBeNear(tile.height); + expect(linesTileBoundingRect.top).toBeNear(top); const lineNumbersTileElement = lineNumberNodeForScreenRow( component, tile.tileStartRow ).parentElement; const lineNumbersTileBoundingRect = lineNumbersTileElement.getBoundingClientRect(); - expect(lineNumbersTileBoundingRect.height).toBe(tile.height); - expect(lineNumbersTileBoundingRect.top).toBe(top); + expect(lineNumbersTileBoundingRect.height).toBeNear(tile.height); + expect(lineNumbersTileBoundingRect.top).toBeNear(top); top += tile.height; } @@ -3853,7 +3861,7 @@ describe('TextEditorComponent', () => { for (let row = startRow; row < endRow; row++) { const lineNode = lineNodeForScreenRow(component, row); const lineNumberNode = lineNumberNodeForScreenRow(component, row); - expect(lineNumberNode.getBoundingClientRect().top).toBe( + expect(lineNumberNode.getBoundingClientRect().top).toBeNear( lineNode.getBoundingClientRect().top ); } @@ -3986,8 +3994,8 @@ describe('TextEditorComponent', () => { element.style.height = 4 * component.getLineHeight() + 'px'; await component.getNextUpdatePromise(); await setScrollTop(component, 4 * component.getLineHeight()); - expect(component.getRenderedStartRow()).toBe(4); - expect(component.getRenderedEndRow()).toBe(9); + expect(component.getRenderedStartRow()).toBeNear(4); + expect(component.getRenderedEndRow()).toBeNear(9); const markerLayer = editor.addMarkerLayer(); const marker1 = markerLayer.markBufferRange([[0, 0], [4, 5]]); @@ -4051,6 +4059,7 @@ describe('TextEditorComponent', () => { describe('on the lines', () => { describe('when there is only one cursor', () => { it('positions the cursor on single-click or when middle-clicking', async () => { + atom.config.set('editor.selectionClipboard', true); for (const button of [0, 1]) { const { component, editor } = buildComponent(); const { lineHeight } = component.measurements; @@ -4780,8 +4789,8 @@ describe('TextEditorComponent', () => { didDrag({ clientX: 199, clientY: 199 }); didDrag({ clientX: 199, clientY: 199 }); didDrag({ clientX: 199, clientY: 199 }); - expect(component.getScrollTop()).toBe(maxScrollTop); - expect(component.getScrollLeft()).toBe(maxScrollLeft); + expect(component.getScrollTop()).toBeNear(maxScrollTop); + expect(component.getScrollLeft()).toBeNear(maxScrollLeft); }); }); @@ -4798,6 +4807,7 @@ describe('TextEditorComponent', () => { const { component, editor } = buildComponent({ platform: 'linux' }); // Middle mouse pasting. + atom.config.set('editor.selectionClipboard', true); editor.setSelectedBufferRange([[1, 6], [1, 10]]); await conditionPromise(() => TextEditor.clipboard.read() === 'sort'); component.didMouseDownOnContent({ @@ -4809,7 +4819,19 @@ describe('TextEditorComponent', () => { expect(editor.lineTextForBufferRow(10)).toBe('sort'); editor.undo(); + // Doesn't paste when middle mouse button is clicked + atom.config.set('editor.selectionClipboard', false); + editor.setSelectedBufferRange([[1, 6], [1, 10]]); + component.didMouseDownOnContent({ + button: 1, + clientX: clientLeftForCharacter(component, 10, 0), + clientY: clientTopForLine(component, 10) + }); + expect(TextEditor.clipboard.read()).toBe('sort'); + expect(editor.lineTextForBufferRow(10)).toBe(''); + // Ensure left clicks don't interfere. + atom.config.set('editor.selectionClipboard', true); editor.setSelectedBufferRange([[1, 2], [1, 5]]); await conditionPromise(() => TextEditor.clipboard.read() === 'var'); component.didMouseDownOnContent({ @@ -5137,8 +5159,8 @@ describe('TextEditorComponent', () => { didDrag({ clientX: 199, clientY: 199 }); didDrag({ clientX: 199, clientY: 199 }); didDrag({ clientX: 199, clientY: 199 }); - expect(component.getScrollTop()).toBe(maxScrollTop); - expect(component.getScrollLeft()).toBe(maxScrollLeft); + expect(component.getScrollTop()).toBeNear(maxScrollTop); + expect(component.getScrollLeft()).toBeNear(maxScrollLeft); }); }); @@ -5747,7 +5769,7 @@ describe('TextEditorComponent', () => { expect(top).toBe( clientTopForLine(referenceComponent, 0) - referenceContentRect.top ); - expect(left).toBe( + expect(left).toBeNear( clientLeftForCharacter(referenceComponent, 0, 5) - referenceContentRect.left ); @@ -5758,10 +5780,10 @@ describe('TextEditorComponent', () => { row: 12, column: 1 }); - expect(top).toBe( + expect(top).toBeNear( clientTopForLine(referenceComponent, 12) - referenceContentRect.top ); - expect(left).toBe( + expect(left).toBeNear( clientLeftForCharacter(referenceComponent, 12, 1) - referenceContentRect.left ); @@ -5775,10 +5797,10 @@ describe('TextEditorComponent', () => { row: 3, column: 5 }); - expect(top).toBe( + expect(top).toBeNear( clientTopForLine(referenceComponent, 3) - referenceContentRect.top ); - expect(left).toBe( + expect(left).toBeNear( clientLeftForCharacter(referenceComponent, 3, 5) - referenceContentRect.left ); @@ -5956,7 +5978,9 @@ describe('TextEditorComponent', () => { 'px'; await component.getNextUpdatePromise(); - expect(component.getMaxScrollTop() / component.getLineHeight()).toBe(9); + expect(component.getMaxScrollTop() / component.getLineHeight()).toBeNear( + 9 + ); expect(component.refs.verticalScrollbar.element.scrollTop).toBe( 0 * component.getLineHeight() ); @@ -5964,21 +5988,21 @@ describe('TextEditorComponent', () => { editor.setFirstVisibleScreenRow(1); expect(component.getFirstVisibleRow()).toBe(1); await component.getNextUpdatePromise(); - expect(component.refs.verticalScrollbar.element.scrollTop).toBe( + expect(component.refs.verticalScrollbar.element.scrollTop).toBeNear( 1 * component.getLineHeight() ); editor.setFirstVisibleScreenRow(5); expect(component.getFirstVisibleRow()).toBe(5); await component.getNextUpdatePromise(); - expect(component.refs.verticalScrollbar.element.scrollTop).toBe( + expect(component.refs.verticalScrollbar.element.scrollTop).toBeNear( 5 * component.getLineHeight() ); editor.setFirstVisibleScreenRow(11); expect(component.getFirstVisibleRow()).toBe(9); await component.getNextUpdatePromise(); - expect(component.refs.verticalScrollbar.element.scrollTop).toBe( + expect(component.refs.verticalScrollbar.element.scrollTop).toBeNear( 9 * component.getLineHeight() ); }); @@ -6184,7 +6208,7 @@ async function setEditorWidthInCharacters(component, widthInCharacters) { function verifyCursorPosition(component, cursorNode, row, column) { const rect = cursorNode.getBoundingClientRect(); - expect(Math.round(rect.top)).toBe(clientTopForLine(component, row)); + expect(Math.round(rect.top)).toBeNear(clientTopForLine(component, row)); expect(Math.round(rect.left)).toBe( Math.round(clientLeftForCharacter(component, row, column)) ); diff --git a/spec/text-editor-element-spec.js b/spec/text-editor-element-spec.js index b370abfe7..fbe7af1f7 100644 --- a/spec/text-editor-element-spec.js +++ b/spec/text-editor-element-spec.js @@ -14,7 +14,7 @@ describe('TextEditorElement', () => { }); function buildTextEditorElement(options = {}) { - const element = new TextEditorElement(); + const element = TextEditorElement.createTextEditorElement(); element.setUpdatedSynchronously(false); if (options.attach !== false) jasmine.attachToDOM(element); return element; @@ -218,15 +218,16 @@ describe('TextEditorElement', () => { }); describe('when focused while a parent node is being attached to the DOM', () => { - class ElementThatFocusesChild extends HTMLDivElement { - attachedCallback() { + class ElementThatFocusesChild extends HTMLElement { + connectedCallback() { this.firstChild.focus(); } } - document.registerElement('element-that-focuses-child', { - prototype: ElementThatFocusesChild.prototype - }); + window.customElements.define( + 'element-that-focuses-child', + ElementThatFocusesChild + ); it('proxies the focus event to the hidden input', () => { const element = buildTextEditorElement(); @@ -438,12 +439,15 @@ describe('TextEditorElement', () => { const bottom = 13 * editor.getLineHeightInPixels(); const left = Math.round(3 * editor.getDefaultCharWidth()); const right = Math.round(11 * editor.getDefaultCharWidth()); - expect(element.pixelRectForScreenRange([[2, 3], [13, 11]])).toEqual({ - top, - left, - height: bottom + editor.getLineHeightInPixels() - top, - width: right - left - }); + + const pixelRect = element.pixelRectForScreenRange([[2, 3], [13, 11]]); + + expect(pixelRect.top).toEqual(top); + expect(pixelRect.left).toEqual(left); + expect(pixelRect.height).toEqual( + bottom + editor.getLineHeightInPixels() - top + ); + expect(pixelRect.width).toBeNear(right - left); }); }); diff --git a/spec/text-editor-registry-spec.js b/spec/text-editor-registry-spec.js index 8b7dbf587..bc1850f80 100644 --- a/spec/text-editor-registry-spec.js +++ b/spec/text-editor-registry-spec.js @@ -91,6 +91,17 @@ describe('TextEditorRegistry', function() { }); }); + describe('.getActiveTextEditor', function() { + it('gets the currently focused text editor', function() { + const disposable = registry.add(editor); + var editorElement = editor.getElement(); + jasmine.attachToDOM(editorElement); + editorElement.focus(); + expect(registry.getActiveTextEditor()).toBe(editor); + disposable.dispose(); + }); + }); + describe('.maintainConfig(editor)', function() { it('does not update the editor when config settings change for unrelated scope selectors', async function() { await atom.packages.activatePackage('language-javascript'); diff --git a/spec/text-editor-spec.js b/spec/text-editor-spec.js index 009bdf0a3..11365d75d 100644 --- a/spec/text-editor-spec.js +++ b/spec/text-editor-spec.js @@ -3,6 +3,7 @@ const path = require('path'); const temp = require('temp').track(); const dedent = require('dedent'); const { clipboard } = require('electron'); +const os = require('os'); const TextEditor = require('../src/text-editor'); const TextBuffer = require('text-buffer'); const TextMateLanguageMode = require('../src/text-mate-language-mode'); @@ -2826,7 +2827,7 @@ describe('TextEditor', () => { describe('when there is a single selection', () => { describe('when the selection spans a single line', () => { - describe('when there is no fold in the preceeding row', () => + describe('when there is no fold in the preceding row', () => it('moves the line to the preceding row', () => { expect(editor.lineTextForBufferRow(2)).toBe( ' if (items.length <= 1) return items;' @@ -3049,8 +3050,8 @@ describe('TextEditor', () => { }); }); - describe('when the preceeding row is a folded row', () => { - it('moves the lines spanned by the selection to the preceeding row, but preserves the folded code', () => { + describe('when the preceding row is a folded row', () => { + it('moves the lines spanned by the selection to the preceding row, but preserves the folded code', () => { expect(editor.lineTextForBufferRow(8)).toBe( ' return sort(left).concat(pivot).concat(sort(right));' ); @@ -3583,7 +3584,7 @@ describe('TextEditor', () => { }); describe('when the last line of selection does not end with a valid line ending', () => { - it('appends line ending to last line and moves the lines spanned by the selection to the preceeding row', () => { + it('appends line ending to last line and moves the lines spanned by the selection to the preceding row', () => { expect(editor.lineTextForBufferRow(9)).toBe(' };'); expect(editor.lineTextForBufferRow(10)).toBe(''); expect(editor.lineTextForBufferRow(11)).toBe( @@ -5051,7 +5052,7 @@ describe('TextEditor', () => { editor.cutSelectedText(); expect(buffer.lineForRow(0)).toBe('var = function () {'); expect(buffer.lineForRow(1)).toBe(' var = function(items) {'); - expect(clipboard.readText()).toBe('quicksort\nsort'); + expect(clipboard.readText()).toBe(['quicksort', 'sort'].join(os.EOL)); }); describe('when no text is selected', () => { @@ -5068,13 +5069,14 @@ describe('TextEditor', () => { expect(buffer.lineForRow(4)).toBe( ' current < pivot ? left.push(current) : right.push(current);' ); + expect(atom.clipboard.read()).toEqual( [ 'var quicksort = function () {', '', ' current = items.shift();', '' - ].join('\n') + ].join(os.EOL) ); }); }); @@ -5087,7 +5089,9 @@ describe('TextEditor', () => { [[1, 6], [1, 10]] ]); editor.cutSelectedText(); - expect(atom.clipboard.read()).toEqual(`quicksort\nsort\nitems`); + expect(atom.clipboard.read()).toEqual( + ['quicksort', 'sort', 'items'].join(os.EOL) + ); }); }); }); @@ -5115,7 +5119,9 @@ describe('TextEditor', () => { expect(buffer.lineForRow(2)).toBe(' if (items.length'); expect(buffer.lineForRow(3)).toBe(' var pivot = item'); expect(atom.clipboard.read()).toBe( - ' <= 1) return items;\ns.shift(), current, left = [], right = [];' + ` <= 1) return items;${ + os.EOL + }s.shift(), current, left = [], right = [];` ); })); @@ -5131,7 +5137,7 @@ describe('TextEditor', () => { ); expect(buffer.lineForRow(3)).toBe(' var pivot = item'); expect(atom.clipboard.read()).toBe( - ' <= 1) ret\ns.shift(), current, left = [], right = [];' + ` <= 1) ret${os.EOL}s.shift(), current, left = [], right = [];` ); })); }); @@ -5151,7 +5157,9 @@ describe('TextEditor', () => { expect(buffer.lineForRow(2)).toBe(' if (items.length'); expect(buffer.lineForRow(3)).toBe(' var pivot = item'); expect(atom.clipboard.read()).toBe( - ' <= 1) return items;\ns.shift(), current, left = [], right = [];' + ` <= 1) return items;${ + os.EOL + }s.shift(), current, left = [], right = [];` ); }); }); @@ -5166,7 +5174,7 @@ describe('TextEditor', () => { expect(buffer.lineForRow(2)).toBe(' if (items.lengthurn items;'); expect(buffer.lineForRow(3)).toBe(' var pivot = item'); expect(atom.clipboard.read()).toBe( - ' <= 1) ret\ns.shift(), current, left = [], right = [];' + ` <= 1) ret${os.EOL}s.shift(), current, left = [], right = [];` ); }); }); @@ -5186,8 +5194,12 @@ describe('TextEditor', () => { expect(buffer.lineForRow(2)).toBe( ' if (items.length <= 1) return items;' ); - expect(clipboard.readText()).toBe('quicksort\nsort\nitems'); - expect(atom.clipboard.read()).toEqual('quicksort\nsort\nitems'); + expect(clipboard.readText()).toBe( + ['quicksort', 'sort', 'items'].join(os.EOL) + ); + expect(atom.clipboard.read()).toEqual( + ['quicksort', 'sort', 'items'].join(os.EOL) + ); }); describe('when no text is selected', () => { @@ -5202,9 +5214,9 @@ describe('TextEditor', () => { editor.copySelectedText(); expect(atom.clipboard.read()).toEqual( [ - ' var sort = function(items) {\n', - ' current = items.shift();\n' - ].join('\n') + ` var sort = function(items) {${os.EOL}`, + ` current = items.shift();${os.EOL}` + ].join(os.EOL) ); expect(editor.getSelectedBufferRanges()).toEqual([ [[1, 5], [1, 5]], @@ -5221,7 +5233,9 @@ describe('TextEditor', () => { [[1, 6], [1, 10]] ]); editor.copySelectedText(); - expect(atom.clipboard.read()).toEqual(`quicksort\nsort\nitems`); + expect(atom.clipboard.read()).toEqual( + ['quicksort', 'sort', 'items'].join(os.EOL) + ); }); }); }); @@ -5241,8 +5255,12 @@ describe('TextEditor', () => { expect(buffer.lineForRow(2)).toBe( ' if (items.length <= 1) return items;' ); - expect(clipboard.readText()).toBe('quicksort\nsort\nitems'); - expect(atom.clipboard.read()).toEqual(`quicksort\nsort\nitems`); + expect(clipboard.readText()).toBe( + ['quicksort', 'sort', 'items'].join(os.EOL) + ); + expect(atom.clipboard.read()).toEqual( + ['quicksort', 'sort', 'items'].join(os.EOL) + ); }); }); @@ -5540,7 +5558,7 @@ describe('TextEditor', () => { expect(editor.lineTextForBufferRow(5)).toBe(' a(x);'); expect(editor.lineTextForBufferRow(6)).toBe(' b(x);'); - expect(editor.buffer.lineEndingForRow(6)).toBe('\r\n'); + expect(editor.buffer.lineEndingForRow(6)).toBe(os.EOL); expect(editor.lineTextForBufferRow(7)).toBe('c(x);'); expect(editor.lineTextForBufferRow(8)).toBe( ' current = items.shift();' diff --git a/spec/text-mate-language-mode-spec.js b/spec/text-mate-language-mode-spec.js index 01f47a226..ad23d9114 100644 --- a/spec/text-mate-language-mode-spec.js +++ b/spec/text-mate-language-mode-spec.js @@ -1477,29 +1477,6 @@ describe('TextMateLanguageMode', () => { ]); })); - describe('.getNonWordCharacters', () => { - it('merges the language mode non word characters with the globally set non word characters', () => { - config.set('editor.nonWordCharacters', '»'); - - const buffer = atom.project.bufferForPathSync('sample.js'); - const languageMode = new TextMateLanguageMode({ - buffer, - config, - grammar: atom.grammars.grammarForScopeName('source.js') - }); - - const scopedNonWords = config.getRawScopedValue( - ['source.js'], - 'editor.nonWordCharacters' - ); - const globalNonWords = config.get('editor.nonWordCharacters'); - - expect(languageMode.getNonWordCharacters([0, 0])).toEqual( - `${scopedNonWords}${globalNonWords}` - ); - }); - }); - function simulateFold(ranges) { buffer.transact(() => { for (const range of ranges.reverse()) { diff --git a/spec/tree-indenter-spec.js b/spec/tree-indenter-spec.js new file mode 100644 index 000000000..8acc67f38 --- /dev/null +++ b/spec/tree-indenter-spec.js @@ -0,0 +1,142 @@ +const fs = require('fs'); +const path = require('path'); +const TreeSitterGrammar = require('../src/tree-sitter-grammar'); +const TreeSitterLanguageMode = require('../src/tree-sitter-language-mode'); +const TreeIndenter = require('../src/tree-indenter'); + +const jsGrammarPath = require.resolve( + 'language-javascript/grammars/tree-sitter-javascript.cson' +); + +const TAB_LENGTH = 2; + +const jsScopes = { + indent: { + array: true, + object: true, + arguments: true, + statement_block: true, + class_body: true, + parenthesized_expression: true, + jsx_element: true, + jsx_opening_element: true, + jsx_expression: true, + switch_body: true, + comment: true + }, + indentExceptFirst: { + member_expression: true, + assignment_expression: true, + expression_statement: true, + variable_declarator: true, + lexical_declaration: true, + binary_expression: true, + jsx_self_closing_element: true + }, + indentExceptFirstOrBlock: { + if_statement: true, + while_statement: true + }, + types: { + indent: {}, + outdent: { + else: true + } + } +}; + +describe('TreeIndenter', () => { + let editor, buffer, grammar; + let languageMode, treeIndenter; + + beforeEach(async () => { + editor = await atom.workspace.open(''); + buffer = editor.getBuffer(); + editor.displayLayer.reset({ foldCharacter: '…' }); + + grammar = new TreeSitterGrammar(atom.grammars, jsGrammarPath, { + parser: 'tree-sitter-javascript' + }); + }); + + /** load a file from disk and verify that our proposed indentation + is the same as it is in the file */ + function compareFile(filename) { + const text = fs.readFileSync(filename); + buffer.setText(text); + languageMode = new TreeSitterLanguageMode({ buffer, grammar }); + treeIndenter = new TreeIndenter(languageMode, jsScopes); + + for (let row = 0; row < buffer.getLineCount(); row++) { + // get current (correct) indentation + const line = buffer.lineForRow(row); + const currentIndentation = languageMode.indentLevelForLine( + line, + TAB_LENGTH + ); + + // get suggested indentation + const indent = treeIndenter.suggestedIndentForBufferRow( + row, + TAB_LENGTH, + {} + ); + + // verify + if (indent !== currentIndentation) { + throw Error( + `failure in file row ${row + + 1}: suggested ${indent} but ${currentIndentation} is correct (${line})` + ); + } else { + expect(indent).toEqual(currentIndentation); + } + } + } + + describe('indentation', () => { + it('indents wrongly indented lines', () => { + buffer.setText(`if (true) { + a = {a: [ + 1, + 'something' + ], + b: 2} + }`); + const correct = [0, 1, 3, 3, 2, 2, 0]; + languageMode = new TreeSitterLanguageMode({ buffer, grammar }); + treeIndenter = new TreeIndenter(languageMode, jsScopes); + + for (let row = 0; row < buffer.getLineCount(); row++) { + // get suggested indentation + const indent = treeIndenter.suggestedIndentForBufferRow( + row, + TAB_LENGTH, + {} + ); + + // verify + if (indent !== correct[row]) { + const line = buffer.lineForRow(row).trim(); + throw Error( + `failure in row ${row}: suggested ${indent} but ${ + correct[row] + } is correct (${line})` + ); + } else { + expect(indent).toEqual(correct[row]); + } + } + }); + + const fixtures = fs.readdirSync( + path.join(__dirname, 'fixtures', 'indentation') + ); + + fixtures.forEach(filename => { + it(`suggests correct indentations for ${filename}`, () => { + compareFile(path.join(__dirname, 'fixtures', 'indentation', filename)); + }); + }); + }); +}); diff --git a/spec/tree-sitter-language-mode-spec.js b/spec/tree-sitter-language-mode-spec.js index 18375a84e..46a38802a 100644 --- a/spec/tree-sitter-language-mode-spec.js +++ b/spec/tree-sitter-language-mode-spec.js @@ -831,6 +831,63 @@ describe('TreeSitterLanguageMode', () => { ]); }); + it('handles injections that are empty', async () => { + atom.grammars.addGrammar(jsGrammar); + atom.grammars.addGrammar(htmlGrammar); + buffer.setText('text = html'); + + const languageMode = new TreeSitterLanguageMode({ + buffer, + grammar: jsGrammar, + grammars: atom.grammars + }); + buffer.setLanguageMode(languageMode); + + expectTokensToEqual(editor, [[{ text: 'text = html', scopes: [] }]]); + + buffer.append(' ``;'); + expectTokensToEqual(editor, [ + [ + { text: 'text = ', scopes: [] }, + { text: 'html', scopes: ['function'] }, + { text: ' ', scopes: [] }, + { text: '``', scopes: ['string'] }, + { text: ';', scopes: [] } + ] + ]); + + buffer.insert( + { row: 0, column: buffer.getText().lastIndexOf('`') }, + '
    ' + ); + await nextHighlightingUpdate(languageMode); + expectTokensToEqual(editor, [ + [ + { text: 'text = ', scopes: [] }, + { text: 'html', scopes: ['function'] }, + { text: ' ', scopes: [] }, + { text: '`', scopes: ['string'] }, + { text: '<', scopes: ['string', 'html'] }, + { text: 'div', scopes: ['string', 'html', 'tag'] }, + { text: '>', scopes: ['string', 'html'] }, + { text: '`', scopes: ['string'] }, + { text: ';', scopes: [] } + ] + ]); + + buffer.undo(); + await nextHighlightingUpdate(languageMode); + expectTokensToEqual(editor, [ + [ + { text: 'text = ', scopes: [] }, + { text: 'html', scopes: ['function'] }, + { text: ' ', scopes: [] }, + { text: '``', scopes: ['string'] }, + { text: ';', scopes: [] } + ] + ]); + }); + it('terminates comment token at the end of an injection, so that the next injection is NOT a continuation of the comment', async () => { const ejsGrammar = new TreeSitterGrammar( atom.grammars, @@ -1546,7 +1603,7 @@ describe('TreeSitterLanguageMode', () => { type: 'else', // There are double quotes around the `else` type. This indicates that - // we're targetting an *anonymous* node in the syntax tree. The fold + // we're targeting an *anonymous* node in the syntax tree. The fold // should start at the token representing the literal string "else", // not at an `else` node. start: { type: '"else"' } diff --git a/spec/update-process-env-spec.js b/spec/update-process-env-spec.js index 78a798890..f99c961fa 100644 --- a/spec/update-process-env-spec.js +++ b/spec/update-process-env-spec.js @@ -7,7 +7,6 @@ import { updateProcessEnv, shouldGetEnvFromShell } from '../src/update-process-env'; -import dedent from 'dedent'; import mockSpawn from 'mock-spawn'; const temp = require('temp').track(); @@ -259,19 +258,19 @@ describe('updateProcessEnv(launchEnv)', function() { spawn.setDefault( spawn.simple( 0, - dedent` - FOO=BAR=BAZ=QUUX - TERM=xterm-something - PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path - ` + 'FOO=BAR=BAZ=QUUX\0MULTILINE\nNAME=multiline\nvalue\0TERM=xterm-something\0PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path' ) ); await updateProcessEnv(process.env); expect(spawn.calls.length).toBe(1); expect(spawn.calls[0].command).toBe('/my/custom/bash'); - expect(spawn.calls[0].args).toEqual(['-ilc', 'command env']); + expect(spawn.calls[0].args).toEqual([ + '-ilc', + 'command awk \'BEGIN{for(v in ENVIRON) printf("%s=%s%c", v, ENVIRON[v], 0)}\'' + ]); expect(process.env).toEqual({ FOO: 'BAR=BAZ=QUUX', + 'MULTILINE\nNAME': 'multiline\nvalue', TERM: 'xterm-something', PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path' }); @@ -290,19 +289,19 @@ describe('updateProcessEnv(launchEnv)', function() { spawn.setDefault( spawn.simple( 0, - dedent` - FOO=BAR=BAZ=QUUX - TERM=xterm-something - PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path - ` + 'FOO=BAR=BAZ=QUUX\0MULTILINE\nNAME=multiline\nvalue\0TERM=xterm-something\0PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path' ) ); await updateProcessEnv(process.env); expect(spawn.calls.length).toBe(1); expect(spawn.calls[0].command).toBe('/my/custom/bash'); - expect(spawn.calls[0].args).toEqual(['-ilc', 'command env']); + expect(spawn.calls[0].args).toEqual([ + '-ilc', + 'command awk \'BEGIN{for(v in ENVIRON) printf("%s=%s%c", v, ENVIRON[v], 0)}\'' + ]); expect(process.env).toEqual({ FOO: 'BAR=BAZ=QUUX', + 'MULTILINE\nNAME': 'multiline\nvalue', TERM: 'xterm-something', PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path' }); diff --git a/src/application-delegate.js b/src/application-delegate.js index faca76358..f3c4b60c9 100644 --- a/src/application-delegate.js +++ b/src/application-delegate.js @@ -46,7 +46,7 @@ module.exports = class ApplicationDelegate { async getTemporaryWindowState() { const stateJSON = await ipcHelpers.call('get-temporary-window-state'); - return JSON.parse(stateJSON); + return stateJSON && JSON.parse(stateJSON); } setTemporaryWindowState(state) { @@ -231,7 +231,7 @@ module.exports = class ApplicationDelegate { remote.dialog .showMessageBox(remote.getCurrentWindow(), options) .then(result => { - callback(result.response); + callback(result.response, result.checkboxChecked); }); } else { // Legacy sync version: options can only have `message`, diff --git a/src/atom-environment.js b/src/atom-environment.js index 4d7e627a2..ac7196437 100644 --- a/src/atom-environment.js +++ b/src/atom-environment.js @@ -1036,7 +1036,12 @@ class AtomEnvironment { commands: this.commands, history: this.history, config: this.config, - open: paths => this.open({ pathsToOpen: paths }) + open: paths => + this.open({ + pathsToOpen: paths, + safeMode: this.inSafeMode(), + devMode: this.inDevMode() + }) }); this.reopenProjectMenuManager.update(); }); diff --git a/src/babel.js b/src/babel.js index 151fe732a..e8b50d7a4 100644 --- a/src/babel.js +++ b/src/babel.js @@ -1,13 +1,13 @@ 'use strict'; -var crypto = require('crypto'); -var path = require('path'); -var defaultOptions = require('./babel.config.js'); +const crypto = require('crypto'); +const path = require('path'); +const defaultOptions = require('./babel.config.js'); -var babel = null; -var babelVersionDirectory = null; +let babel = null; +let babelVersionDirectory = null; -var PREFIXES = [ +const PREFIXES = [ '/** @babel */', '"use babel"', "'use babel'", @@ -15,7 +15,7 @@ var PREFIXES = [ '// @flow' ]; -var PREFIX_LENGTH = Math.max.apply( +const PREFIX_LENGTH = Math.max.apply( Math, PREFIXES.map(function(prefix) { return prefix.length; @@ -23,7 +23,7 @@ var PREFIX_LENGTH = Math.max.apply( ); exports.shouldCompile = function(sourceCode) { - var start = sourceCode.substr(0, PREFIX_LENGTH); + const start = sourceCode.substr(0, PREFIX_LENGTH); return PREFIXES.some(function(prefix) { return start.indexOf(prefix) === 0; }); @@ -31,7 +31,7 @@ exports.shouldCompile = function(sourceCode) { exports.getCachePath = function(sourceCode) { if (babelVersionDirectory == null) { - var babelVersion = require('@babel/core/package.json').version; + const babelVersion = require('@babel/core/package.json').version; babelVersionDirectory = path.join( 'js', 'babel', @@ -56,8 +56,8 @@ exports.compile = function(sourceCode, filePath) { filePath = 'file:///' + path.resolve(filePath).replace(/\\/g, '/'); } - var options = { filename: filePath }; - for (var key in defaultOptions) { + const options = { filename: filePath }; + for (const key in defaultOptions) { options[key] = defaultOptions[key]; } return babel.transformSync(sourceCode, options).code; diff --git a/src/clipboard.js b/src/clipboard.js index 9fe7938a0..e4f40851b 100644 --- a/src/clipboard.js +++ b/src/clipboard.js @@ -42,6 +42,8 @@ module.exports = class Clipboard { // * `text` The {String} to store. // * `metadata` (optional) The additional info to associate with the text. write(text, metadata) { + text = text.replace(/\r?\n/g, process.platform === 'win32' ? '\r\n' : '\n'); + this.signatureForMetadata = this.md5(text); this.metadata = metadata; clipboard.writeText(text); diff --git a/src/coffee-script.js b/src/coffee-script.js index 389ef5b3b..dcd93ca2e 100644 --- a/src/coffee-script.js +++ b/src/coffee-script.js @@ -1,8 +1,8 @@ 'use strict'; -var crypto = require('crypto'); -var path = require('path'); -var CoffeeScript = null; +const crypto = require('crypto'); +const path = require('path'); +let CoffeeScript = null; exports.shouldCompile = function() { return true; @@ -20,7 +20,7 @@ exports.getCachePath = function(sourceCode) { exports.compile = function(sourceCode, filePath) { if (!CoffeeScript) { - var previousPrepareStackTrace = Error.prepareStackTrace; + const previousPrepareStackTrace = Error.prepareStackTrace; CoffeeScript = require('coffee-script'); // When it loads, coffee-script reassigns Error.prepareStackTrace. We have @@ -33,7 +33,7 @@ exports.compile = function(sourceCode, filePath) { filePath = 'file:///' + path.resolve(filePath).replace(/\\/g, '/'); } - var output = CoffeeScript.compile(sourceCode, { + const output = CoffeeScript.compile(sourceCode, { filename: filePath, sourceFiles: [filePath], inlineMap: true diff --git a/src/compile-cache.js b/src/compile-cache.js index 2e35760ff..cf7e6711c 100644 --- a/src/compile-cache.js +++ b/src/compile-cache.js @@ -1,20 +1,17 @@ 'use strict'; -// For now, we're not using babel or ES6 features like `let` and `const` in -// this file, because `apm` requires this file directly in order to pre-warm -// Atom's compile-cache when installing or updating packages, using an older -// version of node.js +// Atom's compile-cache when installing or updating packages, called by apm's Node-js -var path = require('path'); -var fs = require('fs-plus'); -var sourceMapSupport = require('@atom/source-map-support'); +const path = require('path'); +const fs = require('fs-plus'); +const sourceMapSupport = require('@atom/source-map-support'); -var PackageTranspilationRegistry = require('./package-transpilation-registry'); -var CSON = null; +const PackageTranspilationRegistry = require('./package-transpilation-registry'); +let CSON = null; -var packageTranspilationRegistry = new PackageTranspilationRegistry(); +const packageTranspilationRegistry = new PackageTranspilationRegistry(); -var COMPILERS = { +const COMPILERS = { '.js': packageTranspilationRegistry.wrapTranspiler(require('./babel')), '.ts': packageTranspilationRegistry.wrapTranspiler(require('./typescript')), '.tsx': packageTranspilationRegistry.wrapTranspiler(require('./typescript')), @@ -43,11 +40,11 @@ exports.removeTranspilerConfigForPath = function(packagePath) { packageTranspilationRegistry.removeTranspilerConfigForPath(packagePath); }; -var cacheStats = {}; -var cacheDirectory = null; +const cacheStats = {}; +let cacheDirectory = null; exports.setAtomHomeDirectory = function(atomHome) { - var cacheDir = path.join(atomHome, 'compile-cache'); + let cacheDir = path.join(atomHome, 'compile-cache'); if ( process.env.USER === 'root' && process.env.SUDO_USER && @@ -68,7 +65,7 @@ exports.getCacheDirectory = function() { exports.addPathToCache = function(filePath, atomHome) { this.setAtomHomeDirectory(atomHome); - var extension = path.extname(filePath); + const extension = path.extname(filePath); if (extension === '.cson') { if (!CSON) { @@ -77,7 +74,7 @@ exports.addPathToCache = function(filePath, atomHome) { } return CSON.readFileSync(filePath); } else { - var compiler = COMPILERS[extension]; + const compiler = COMPILERS[extension]; if (compiler) { return compileFileAtPath(compiler, filePath, extension); } @@ -98,10 +95,10 @@ exports.resetCacheStats = function() { }; function compileFileAtPath(compiler, filePath, extension) { - var sourceCode = fs.readFileSync(filePath, 'utf8'); + const sourceCode = fs.readFileSync(filePath, 'utf8'); if (compiler.shouldCompile(sourceCode, filePath)) { - var cachePath = compiler.getCachePath(sourceCode, filePath); - var compiledCode = readCachedJavaScript(cachePath); + const cachePath = compiler.getCachePath(sourceCode, filePath); + let compiledCode = readCachedJavaScript(cachePath); if (compiledCode != null) { cacheStats[extension].hits++; } else { @@ -115,7 +112,7 @@ function compileFileAtPath(compiler, filePath, extension) { } function readCachedJavaScript(relativeCachePath) { - var cachePath = path.join(cacheDirectory, relativeCachePath); + const cachePath = path.join(cacheDirectory, relativeCachePath); if (fs.isFileSync(cachePath)) { try { return fs.readFileSync(cachePath, 'utf8'); @@ -125,11 +122,11 @@ function readCachedJavaScript(relativeCachePath) { } function writeCachedJavaScript(relativeCachePath, code) { - var cachePath = path.join(cacheDirectory, relativeCachePath); + const cachePath = path.join(cacheDirectory, relativeCachePath); fs.writeFileSync(cachePath, code, 'utf8'); } -var INLINE_SOURCE_MAP_REGEXP = /\/\/[#@]\s*sourceMappingURL=([^'"\n]+)\s*$/gm; +const INLINE_SOURCE_MAP_REGEXP = /\/\/[#@]\s*sourceMappingURL=([^'"\n]+)\s*$/gm; exports.install = function(resourcesPath, nodeRequire) { const snapshotSourceMapConsumer = { @@ -166,7 +163,7 @@ exports.install = function(resourcesPath, nodeRequire) { return null; } - var compiler = COMPILERS[path.extname(filePath)]; + let compiler = COMPILERS[path.extname(filePath)]; if (!compiler) compiler = COMPILERS['.js']; try { @@ -182,7 +179,7 @@ exports.install = function(resourcesPath, nodeRequire) { return null; } - var match, lastMatch; + let match, lastMatch; INLINE_SOURCE_MAP_REGEXP.lastIndex = 0; while ((match = INLINE_SOURCE_MAP_REGEXP.exec(fileData))) { lastMatch = match; @@ -191,8 +188,8 @@ exports.install = function(resourcesPath, nodeRequire) { return null; } - var sourceMappingURL = lastMatch[1]; - var rawData = sourceMappingURL.slice(sourceMappingURL.indexOf(',') + 1); + const sourceMappingURL = lastMatch[1]; + const rawData = sourceMappingURL.slice(sourceMappingURL.indexOf(',') + 1); try { var sourceMap = JSON.parse(Buffer.from(rawData, 'base64')); @@ -208,7 +205,7 @@ exports.install = function(resourcesPath, nodeRequire) { } }); - var prepareStackTraceWithSourceMapping = Error.prepareStackTrace; + const prepareStackTraceWithSourceMapping = Error.prepareStackTrace; var prepareStackTrace = prepareStackTraceWithSourceMapping; function prepareStackTraceWithRawStackAssignment(error, frames) { @@ -245,13 +242,13 @@ exports.install = function(resourcesPath, nodeRequire) { }; Object.keys(COMPILERS).forEach(function(extension) { - var compiler = COMPILERS[extension]; + const compiler = COMPILERS[extension]; Object.defineProperty(nodeRequire.extensions, extension, { enumerable: true, writable: false, value: function(module, filePath) { - var code = compileFileAtPath(compiler, filePath, extension); + const code = compileFileAtPath(compiler, filePath, extension); return module._compile(code, filePath); } }); diff --git a/src/config-file.js b/src/config-file.js index 798be4f5f..098178d42 100644 --- a/src/config-file.js +++ b/src/config-file.js @@ -5,7 +5,7 @@ const { Disposable, Emitter } = require('event-kit'); const { watchPath } = require('./path-watcher'); const CSON = require('season'); const Path = require('path'); -const async = require('async'); +const asyncQueue = require('async/queue'); const EVENT_TYPES = new Set(['created', 'modified', 'renamed']); @@ -32,16 +32,16 @@ module.exports = class ConfigFile { this.reloadCallbacks = []; // Use a queue to prevent multiple concurrent write to the same file. - const writeQueue = async.queue((data, callback) => + const writeQueue = asyncQueue((data, callback) => CSON.writeFile(this.path, data, error => { if (error) { this.emitter.emit( 'did-error', dedent` - Failed to write \`${Path.basename(this.path)}\`. + Failed to write \`${Path.basename(this.path)}\`. - ${error.message} - ` + ${error.message} + ` ); } callback(); diff --git a/src/config-schema.js b/src/config-schema.js index 07ddf4c13..f1a8ff3b7 100644 --- a/src/config-schema.js +++ b/src/config-schema.js @@ -660,4 +660,12 @@ if (process.platform === 'darwin') { }; } +if (process.platform === 'linux') { + configSchema.editor.properties.selectionClipboard = { + type: 'boolean', + default: true, + description: 'Enable pasting on middle mouse button click' + }; +} + module.exports = configSchema; diff --git a/src/context-menu-manager.coffee b/src/context-menu-manager.coffee index 99fc4e94c..78c7862c2 100644 --- a/src/context-menu-manager.coffee +++ b/src/context-menu-manager.coffee @@ -109,6 +109,7 @@ class ContextMenuManager # with the following argument: # * `event` The click event that deployed the context menu. # + # * `id` (internal) A {String} containing the menu item's id. # Returns a {Disposable} on which `.dispose()` can be called to remove the # added menu items. add: (itemsBySelector, throwOnInvalidSelector = true) -> diff --git a/src/delegated-listener.js b/src/delegated-listener.js index c977912e8..f2cd33b4d 100644 --- a/src/delegated-listener.js +++ b/src/delegated-listener.js @@ -1,7 +1,7 @@ const EventKit = require('event-kit'); module.exports = function listen(element, eventName, selector, handler) { - var innerHandler = function(event) { + const innerHandler = function(event) { if (selector) { var currentTarget = event.target; while (currentTarget) { diff --git a/src/git-repository-provider.js b/src/git-repository-provider.js index afd1d0682..37d811399 100644 --- a/src/git-repository-provider.js +++ b/src/git-repository-provider.js @@ -81,7 +81,7 @@ async function findGitDirectory(directory) { if ( typeof gitDir.exists === 'function' && (await gitDir.exists()) && - isValidGitDirectory(gitDir) + (await isValidGitDirectory(gitDir)) ) { return gitDir; } else if (directory.isRoot()) { diff --git a/src/grammar-registry.js b/src/grammar-registry.js index c5973e1aa..aa530b6a9 100644 --- a/src/grammar-registry.js +++ b/src/grammar-registry.js @@ -169,7 +169,7 @@ module.exports = class GrammarRegistry { } // Extended: Get the `languageId` that has been explicitly assigned to - // to the given buffer, if any. + // the given buffer, if any. // // Returns a {String} id of the language getAssignedLanguageId(buffer) { diff --git a/src/history-manager.js b/src/history-manager.js index ba9f291cc..fce540654 100644 --- a/src/history-manager.js +++ b/src/history-manager.js @@ -89,7 +89,7 @@ class HistoryManager { } getProject(paths) { - for (var i = 0; i < this.projects.length; i++) { + for (let i = 0; i < this.projects.length; i++) { if (arrayEquivalent(paths, this.projects[i].paths)) { return this.projects[i]; } @@ -121,7 +121,7 @@ class HistoryManager { function arrayEquivalent(a, b) { if (a.length !== b.length) return false; - for (var i = 0; i < a.length; i++) { + for (let i = 0; i < a.length; i++) { if (a[i] !== b[i]) return false; } return true; diff --git a/src/initialize-test-window.coffee b/src/initialize-test-window.coffee deleted file mode 100644 index 59a910c2b..000000000 --- a/src/initialize-test-window.coffee +++ /dev/null @@ -1,112 +0,0 @@ -ipcHelpers = require './ipc-helpers' - -cloneObject = (object) -> - clone = {} - clone[key] = value for key, value of object - clone - -module.exports = ({blobStore}) -> - {remote} = require 'electron' - - exitWithStatusCode = (status) -> - remote.app.emit('will-quit') - remote.process.exit(status) - - try - path = require 'path' - {ipcRenderer} = require 'electron' - getWindowLoadSettings = require './get-window-load-settings' - CompileCache = require './compile-cache' - AtomEnvironment = require '../src/atom-environment' - ApplicationDelegate = require '../src/application-delegate' - Clipboard = require '../src/clipboard' - TextEditor = require '../src/text-editor' - {updateProcessEnv} = require('./update-process-env') - require './electron-shims' - - ipcRenderer.on 'environment', (event, env) -> - updateProcessEnv(env) - - {testRunnerPath, legacyTestRunnerPath, headless, logFile, testPaths, env} = getWindowLoadSettings() - - if headless - # Install console functions that output to stdout and stderr. - util = require 'util' - - Object.defineProperties process, - stdout: {value: remote.process.stdout} - stderr: {value: remote.process.stderr} - - console.log = (args...) -> process.stdout.write "#{util.format(args...)}\n" - console.error = (args...) -> process.stderr.write "#{util.format(args...)}\n" - else - # Show window synchronously so a focusout doesn't fire on input elements - # that are focused in the very first spec run. - remote.getCurrentWindow().show() - - handleKeydown = (event) -> - # Reload: cmd-r / ctrl-r - if (event.metaKey or event.ctrlKey) and event.keyCode is 82 - ipcHelpers.call('window-method', 'reload') - - # Toggle Dev Tools: cmd-alt-i (Mac) / ctrl-shift-i (Linux/Windows) - if event.keyCode is 73 and ( - (process.platform is 'darwin' and event.metaKey and event.altKey) or - (process.platform isnt 'darwin' and event.ctrlKey and event.shiftKey)) - ipcHelpers.call('window-method', 'toggleDevTools') - - # Close: cmd-w / ctrl-w - if (event.metaKey or event.ctrlKey) and event.keyCode is 87 - ipcHelpers.call('window-method', 'close') - - # Copy: cmd-c / ctrl-c - if (event.metaKey or event.ctrlKey) and event.keyCode is 67 - atom.clipboard.write(window.getSelection().toString()) - - window.addEventListener('keydown', handleKeydown, {capture: true}) - - # Add 'exports' to module search path. - exportsPath = path.join(getWindowLoadSettings().resourcePath, 'exports') - require('module').globalPaths.push(exportsPath) - process.env.NODE_PATH = exportsPath # Set NODE_PATH env variable since tasks may need it. - - updateProcessEnv(env) - - # Set up optional transpilation for packages under test if any - FindParentDir = require 'find-parent-dir' - if packageRoot = FindParentDir.sync(testPaths[0], 'package.json') - packageMetadata = require(path.join(packageRoot, 'package.json')) - if packageMetadata.atomTranspilers - CompileCache.addTranspilerConfigForPath(packageRoot, packageMetadata.name, packageMetadata, packageMetadata.atomTranspilers) - - document.title = "Spec Suite" - - clipboard = new Clipboard - TextEditor.setClipboard(clipboard) - TextEditor.viewForItem = (item) -> atom.views.getView(item) - - testRunner = require(testRunnerPath) - legacyTestRunner = require(legacyTestRunnerPath) - buildDefaultApplicationDelegate = -> new ApplicationDelegate() - buildAtomEnvironment = (params) -> - params = cloneObject(params) - params.clipboard = clipboard unless params.hasOwnProperty("clipboard") - params.blobStore = blobStore unless params.hasOwnProperty("blobStore") - params.onlyLoadBaseStyleSheets = true unless params.hasOwnProperty("onlyLoadBaseStyleSheets") - atomEnvironment = new AtomEnvironment(params) - atomEnvironment.initialize(params) - TextEditor.setScheduler(atomEnvironment.views) - atomEnvironment - - promise = testRunner({ - logFile, headless, testPaths, buildAtomEnvironment, buildDefaultApplicationDelegate, legacyTestRunner - }) - - promise.then (statusCode) -> - exitWithStatusCode(statusCode) if getWindowLoadSettings().headless - catch error - if getWindowLoadSettings().headless - console.error(error.stack ? error) - exitWithStatusCode(1) - else - throw error diff --git a/src/initialize-test-window.js b/src/initialize-test-window.js new file mode 100644 index 000000000..1d5098b4d --- /dev/null +++ b/src/initialize-test-window.js @@ -0,0 +1,161 @@ +const ipcHelpers = require('./ipc-helpers'); +const { requireModule } = require('./module-utils'); + +function cloneObject(object) { + const clone = {}; + for (const key in object) { + clone[key] = object[key]; + } + return clone; +} + +module.exports = async function({ blobStore }) { + const { remote } = require('electron'); + const getWindowLoadSettings = require('./get-window-load-settings'); + + const exitWithStatusCode = function(status) { + remote.app.emit('will-quit'); + remote.process.exit(status); + }; + + try { + const path = require('path'); + const { ipcRenderer } = require('electron'); + const CompileCache = require('./compile-cache'); + const AtomEnvironment = require('../src/atom-environment'); + const ApplicationDelegate = require('../src/application-delegate'); + const Clipboard = require('../src/clipboard'); + const TextEditor = require('../src/text-editor'); + const { updateProcessEnv } = require('./update-process-env'); + require('./electron-shims'); + + ipcRenderer.on('environment', (event, env) => updateProcessEnv(env)); + + const { + testRunnerPath, + legacyTestRunnerPath, + headless, + logFile, + testPaths, + env + } = getWindowLoadSettings(); + + if (headless) { + // Install console functions that output to stdout and stderr. + const util = require('util'); + + Object.defineProperties(process, { + stdout: { value: remote.process.stdout }, + stderr: { value: remote.process.stderr } + }); + + console.log = (...args) => + process.stdout.write(`${util.format(...args)}\n`); + console.error = (...args) => + process.stderr.write(`${util.format(...args)}\n`); + } else { + // Show window synchronously so a focusout doesn't fire on input elements + // that are focused in the very first spec run. + remote.getCurrentWindow().show(); + } + + const handleKeydown = function(event) { + // Reload: cmd-r / ctrl-r + if ((event.metaKey || event.ctrlKey) && event.keyCode === 82) { + ipcHelpers.call('window-method', 'reload'); + } + + // Toggle Dev Tools: cmd-alt-i (Mac) / ctrl-shift-i (Linux/Windows) + if ( + event.keyCode === 73 && + ((process.platform === 'darwin' && event.metaKey && event.altKey) || + (process.platform !== 'darwin' && event.ctrlKey && event.shiftKey)) + ) { + ipcHelpers.call('window-method', 'toggleDevTools'); + } + + // Close: cmd-w / ctrl-w + if ((event.metaKey || event.ctrlKey) && event.keyCode === 87) { + ipcHelpers.call('window-method', 'close'); + } + + // Copy: cmd-c / ctrl-c + if ((event.metaKey || event.ctrlKey) && event.keyCode === 67) { + atom.clipboard.write(window.getSelection().toString()); + } + }; + + window.addEventListener('keydown', handleKeydown, { capture: true }); + + // Add 'exports' to module search path. + const exportsPath = path.join( + getWindowLoadSettings().resourcePath, + 'exports' + ); + require('module').globalPaths.push(exportsPath); + process.env.NODE_PATH = exportsPath; // Set NODE_PATH env variable since tasks may need it. + + updateProcessEnv(env); + + // Set up optional transpilation for packages under test if any + const FindParentDir = require('find-parent-dir'); + const packageRoot = FindParentDir.sync(testPaths[0], 'package.json'); + if (packageRoot) { + const packageMetadata = require(path.join(packageRoot, 'package.json')); + if (packageMetadata.atomTranspilers) { + CompileCache.addTranspilerConfigForPath( + packageRoot, + packageMetadata.name, + packageMetadata, + packageMetadata.atomTranspilers + ); + } + } + + document.title = 'Spec Suite'; + + const clipboard = new Clipboard(); + TextEditor.setClipboard(clipboard); + TextEditor.viewForItem = item => atom.views.getView(item); + + const testRunner = requireModule(testRunnerPath); + const legacyTestRunner = require(legacyTestRunnerPath); + const buildDefaultApplicationDelegate = () => new ApplicationDelegate(); + const buildAtomEnvironment = function(params) { + params = cloneObject(params); + if (!params.hasOwnProperty('clipboard')) { + params.clipboard = clipboard; + } + if (!params.hasOwnProperty('blobStore')) { + params.blobStore = blobStore; + } + if (!params.hasOwnProperty('onlyLoadBaseStyleSheets')) { + params.onlyLoadBaseStyleSheets = true; + } + const atomEnvironment = new AtomEnvironment(params); + atomEnvironment.initialize(params); + TextEditor.setScheduler(atomEnvironment.views); + return atomEnvironment; + }; + + const statusCode = await testRunner({ + logFile, + headless, + testPaths, + buildAtomEnvironment, + buildDefaultApplicationDelegate, + legacyTestRunner + }); + + if (getWindowLoadSettings().headless) { + exitWithStatusCode(statusCode); + } + } catch (error) { + if (getWindowLoadSettings().headless) { + console.error(error.stack || error); + exitWithStatusCode(1); + } else { + throw error; + } + } +}; diff --git a/src/main-process/application-menu.js b/src/main-process/application-menu.js index e2faa5e76..7a8d6d959 100644 --- a/src/main-process/application-menu.js +++ b/src/main-process/application-menu.js @@ -115,16 +115,16 @@ module.exports = class ApplicationMenu { showUpdateMenuItem(state) { const items = this.flattenMenuItems(this.menu); const checkForUpdateItem = items.find( - ({ label }) => label === 'Check for Update' + ({ id }) => id === 'Check for Update' ); const checkingForUpdateItem = items.find( - ({ label }) => label === 'Checking for Update' + ({ id }) => id === 'Checking for Update' ); const downloadingUpdateItem = items.find( - ({ label }) => label === 'Downloading Update' + ({ id }) => id === 'Downloading Update' ); const installUpdateItem = items.find( - ({ label }) => label === 'Restart and Install Update' + ({ id }) => id === 'Restart and Install Update' ); if ( @@ -165,13 +165,16 @@ module.exports = class ApplicationMenu { return [ { label: 'Atom', + id: 'Atom', submenu: [ { label: 'Check for Update', + id: 'Check for Update', metadata: { autoUpdate: true } }, { label: 'Reload', + id: 'Reload', accelerator: 'Command+R', click: () => { const window = this.focusedWindow(); @@ -180,6 +183,7 @@ module.exports = class ApplicationMenu { }, { label: 'Close Window', + id: 'Close Window', accelerator: 'Command+Shift+W', click: () => { const window = this.focusedWindow(); @@ -188,6 +192,7 @@ module.exports = class ApplicationMenu { }, { label: 'Toggle Dev Tools', + id: 'Toggle Dev Tools', accelerator: 'Command+Alt+I', click: () => { const window = this.focusedWindow(); @@ -196,6 +201,7 @@ module.exports = class ApplicationMenu { }, { label: 'Quit', + id: 'Quit', accelerator: 'Command+Q', click: () => app.quit() } diff --git a/src/main-process/atom-application.js b/src/main-process/atom-application.js index 5c9fbb253..f05d49244 100644 --- a/src/main-process/atom-application.js +++ b/src/main-process/atom-application.js @@ -102,17 +102,7 @@ const createSocketSecret = async atomVersion => { const encryptOptions = (options, secret) => { const message = JSON.stringify(options); - - // Even if the following IV is not cryptographically secure, there's a really good chance - // it's going to be unique between executions which is the requirement for GCM. - // We're not using `crypto.randomBytes()` because in electron v2, that API is really slow - // on Windows machines, which affects the startup time of Atom. - // TodoElectronIssue: Once we upgrade to electron v3 we can use `crypto.randomBytes()` - const initVectorHash = crypto.createHash('sha1'); - initVectorHash.update(Date.now() + ''); - initVectorHash.update(Math.random() + ''); - const initVector = initVectorHash.digest(); - + const initVector = crypto.randomBytes(16); // AES uses 16 bytes for iV const cipher = crypto.createCipheriv('aes-256-gcm', secret, initVector); let content = cipher.update(message, 'utf8', 'hex'); @@ -143,6 +133,13 @@ const decryptOptions = (optionsMessage, secret) => { return JSON.parse(message); }; +ipcMain.handle('isDefaultProtocolClient', (_, { protocol, path, args }) => { + return app.isDefaultProtocolClient(protocol, path, args); +}); + +ipcMain.handle('setAsDefaultProtocolClient', (_, { protocol, path, args }) => { + return app.setAsDefaultProtocolClient(protocol, path, args); +}); // The application's singleton class. // // It's the entry point into the Atom application and maintains the global state @@ -259,16 +256,6 @@ module.exports = class AtomApplication extends EventEmitter { global.atomApplication = this; - // DEPRECATED: This can be removed at some point (added in 1.13) - // It converts `useCustomTitleBar: true` to `titleBar: "custom"` - if ( - process.platform === 'darwin' && - this.config.get('core.useCustomTitleBar') - ) { - this.config.unset('core.useCustomTitleBar'); - this.config.set('core.titleBar', 'custom'); - } - this.applicationMenu = new ApplicationMenu( this.version, this.autoUpdateManager @@ -278,11 +265,6 @@ module.exports = class AtomApplication extends EventEmitter { this.safeMode ); - // Don't await for the following method to avoid delaying the opening of a new window. - // (we await it just after opening it). - // We need to do this because `listenForArgumentsFromNewProcess()` calls `crypto.randomBytes`, - // which is really slow on Windows machines. - // (TodoElectronIssue: This got fixed in electron v3: https://github.com/electron/electron/issues/2073). let socketServerPromise; if (options.test || options.benchmark || options.benchmarkTest) { socketServerPromise = Promise.resolve(); @@ -290,11 +272,11 @@ module.exports = class AtomApplication extends EventEmitter { socketServerPromise = this.listenForArgumentsFromNewProcess(); } + await socketServerPromise; this.setupDockMenu(); const result = await this.launch(options); this.autoUpdateManager.initialize(); - await socketServerPromise; StartupTime.addMarker('main-process:atom-application:initialize:end'); @@ -454,14 +436,9 @@ module.exports = class AtomApplication extends EventEmitter { // Public: Removes the {AtomWindow} from the global window list. removeWindow(window) { this.windowStack.removeWindow(window); - if (this.getAllWindows().length === 0) { - if (this.applicationMenu != null) { - this.applicationMenu.enableWindowSpecificItems(false); - } - if (['win32', 'linux'].includes(process.platform)) { - app.quit(); - return; - } + if (this.getAllWindows().length === 0 && process.platform !== 'darwin') { + app.quit(); + return; } if (!window.isSpec) this.saveCurrentWindowOptions(true); } @@ -610,7 +587,7 @@ module.exports = class AtomApplication extends EventEmitter { shell.openExternal('http://flight-manual.atom.io') ); this.on('application:open-discussions', () => - shell.openExternal('https://discuss.atom.io') + shell.openExternal('https://github.com/atom/atom/discussions') ); this.on('application:open-faq', () => shell.openExternal('https://atom.io/faq') @@ -639,6 +616,12 @@ module.exports = class AtomApplication extends EventEmitter { if (process.platform === 'darwin') { this.on('application:reopen-project', ({ paths }) => { + const focusedWindow = this.focusedWindow(); + if (focusedWindow) { + const { safeMode, devMode } = focusedWindow; + this.openPaths({ pathsToOpen: paths, safeMode, devMode }); + return; + } this.openPaths({ pathsToOpen: paths }); }); @@ -773,6 +756,19 @@ module.exports = class AtomApplication extends EventEmitter { }) ); + // See: https://www.electronjs.org/docs/api/app#event-window-all-closed + this.disposable.add( + ipcHelpers.on(app, 'window-all-closed', () => { + if (this.applicationMenu != null) { + this.applicationMenu.enableWindowSpecificItems(false); + } + // Don't quit when the last window is closed on macOS. + if (process.platform !== 'darwin') { + app.quit(); + } + }) + ); + // Triggered by the 'open-file' event from Electron: // https://electronjs.org/docs/api/app#event-open-file-macos // For example, this is fired when a file is dragged and dropped onto the Atom application icon in the dock. @@ -809,11 +805,10 @@ module.exports = class AtomApplication extends EventEmitter { ); this.disposable.add( - ipcHelpers.on(ipcMain, 'resolve-proxy', (event, requestId, url) => { - event.sender.session.resolveProxy(url, proxy => { - if (!event.sender.isDestroyed()) - event.sender.send('did-resolve-proxy', requestId, proxy); - }); + ipcHelpers.on(ipcMain, 'resolve-proxy', async (event, requestId, url) => { + const proxy = await event.sender.session.resolveProxy(url); + if (!event.sender.isDestroyed()) + event.sender.send('did-resolve-proxy', requestId, proxy); }) ); @@ -1486,9 +1481,14 @@ module.exports = class AtomApplication extends EventEmitter { async saveCurrentWindowOptions(allowEmpty = false) { if (this.quitting) return; + const windows = this.getAllWindows(); + const hasASpecWindow = windows.some(window => window.isSpec); + + if (windows.length === 1 && hasASpecWindow) return; + const state = { version: APPLICATION_STATE_VERSION, - windows: this.getAllWindows() + windows: windows .filter(window => !window.isSpec) .map(window => ({ projectRoots: window.projectRoots })) }; @@ -2022,7 +2022,13 @@ module.exports = class AtomApplication extends EventEmitter { // File dialog defaults to project directory of currently active editor if (path) openOptions.defaultPath = path; - dialog.showOpenDialog(parentWindow, openOptions, callback); + dialog + .showOpenDialog(parentWindow, openOptions) + .then(({ filePaths, bookmarks }) => { + if (typeof callback === 'function') { + callback(filePaths, bookmarks); + } + }); } async promptForRestart() { diff --git a/src/main-process/atom-window.js b/src/main-process/atom-window.js index 8b7d1ad51..47f41e6cb 100644 --- a/src/main-process/atom-window.js +++ b/src/main-process/atom-window.js @@ -1,4 +1,10 @@ -const { BrowserWindow, app, dialog, ipcMain } = require('electron'); +const { + BrowserWindow, + app, + dialog, + ipcMain, + nativeImage +} = require('electron'); const getAppName = require('../get-app-name'); const path = require('path'); const url = require('url'); @@ -50,7 +56,10 @@ module.exports = class AtomWindow extends EventEmitter { disableBlinkFeatures: 'Auxclick', nodeIntegration: true, webviewTag: true, - // multi-threading + + // TodoElectronIssue: remote module is deprecated https://www.electronjs.org/docs/breaking-changes#default-changed-enableremotemodule-defaults-to-false + enableRemoteModule: true, + // node support in threads nodeIntegrationInWorker: true }, simpleFullscreen: this.getSimpleFullscreen() @@ -58,7 +67,8 @@ module.exports = class AtomWindow extends EventEmitter { // Don't set icon on Windows so the exe's ico will be used as window and // taskbar's icon. See https://github.com/atom/atom/issues/4811 for more. - if (process.platform === 'linux') options.icon = ICON_PATH; + if (process.platform === 'linux') + options.icon = nativeImage.createFromPath(ICON_PATH); if (this.shouldAddCustomTitleBar()) options.titleBarStyle = 'hidden'; if (this.shouldAddCustomInsetTitleBar()) options.titleBarStyle = 'hiddenInset'; @@ -226,7 +236,7 @@ module.exports = class AtomWindow extends EventEmitter { if (result.response === 0) this.browserWindow.destroy(); }); - this.browserWindow.webContents.on('crashed', async () => { + this.browserWindow.webContents.on('render-process-gone', async () => { if (this.headless) { console.log('Renderer process crashed, exiting'); this.atomApplication.exit(100); @@ -319,7 +329,19 @@ module.exports = class AtomWindow extends EventEmitter { } replaceEnvironment(env) { - this.browserWindow.webContents.send('environment', env); + const { + NODE_ENV, + NODE_PATH, + ATOM_HOME, + ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT + } = env; + + this.browserWindow.webContents.send('environment', { + NODE_ENV, + NODE_PATH, + ATOM_HOME, + ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT + }); } sendMessage(message, detail) { @@ -463,13 +485,13 @@ module.exports = class AtomWindow extends EventEmitter { options ); + let promise = dialog.showSaveDialog(this.browserWindow, options); if (typeof callback === 'function') { - // Async - dialog.showSaveDialog(this.browserWindow, options, callback); - } else { - // Sync - return dialog.showSaveDialog(this.browserWindow, options); + promise = promise.then(({ filePath, bookmark }) => { + callback(filePath, bookmark); + }); } + return promise; } toggleDevTools() { diff --git a/src/main-process/context-menu.js b/src/main-process/context-menu.js index b63830574..28af6cf35 100644 --- a/src/main-process/context-menu.js +++ b/src/main-process/context-menu.js @@ -16,7 +16,6 @@ module.exports = class ContextMenu { if (item.command) { if (!item.commandDetail) item.commandDetail = {}; item.commandDetail.contextCommand = true; - item.commandDetail.atomWindow = this.atomWindow; item.click = () => { global.atomApplication.sendCommandToWindow( item.command, diff --git a/src/main-process/main.js b/src/main-process/main.js index 4ccd361bd..28b6f3f26 100644 --- a/src/main-process/main.js +++ b/src/main-process/main.js @@ -12,14 +12,10 @@ const CSON = require('season'); const yargs = require('yargs'); const { app } = require('electron'); -const version = `Atom : ${app.getVersion()} -Electron: ${process.versions.electron} -Chrome : ${process.versions.chrome} -Node : ${process.versions.node}`; - const args = yargs(process.argv) - .alias('v', 'version') - .version(version) + // Don't handle --help or --version here; they will be handled later. + .help(false) + .version(false) .alias('d', 'dev') .alias('t', 'test') .alias('r', 'resource-path').argv; diff --git a/src/main-process/parse-command-line.js b/src/main-process/parse-command-line.js index d00464d43..e152ee7e8 100644 --- a/src/main-process/parse-command-line.js +++ b/src/main-process/parse-command-line.js @@ -5,7 +5,12 @@ const yargs = require('yargs'); const { app } = require('electron'); module.exports = function parseCommandLine(processArgs) { - const options = yargs(processArgs).wrap(yargs.terminalWidth()); + // macOS Gatekeeper adds a flag ("-psn_0_[six or seven digits here]") when it intercepts Atom launches. + // (This happens for fresh downloads, new installs, or first launches after upgrading). + // We don't need this flag, and yargs interprets it as many short flags. So, we filter it out. + const filteredArgs = processArgs.filter(arg => !arg.startsWith('-psn_')); + + const options = yargs(filteredArgs).wrap(yargs.terminalWidth()); const version = app.getVersion(); options.usage( dedent`Atom Editor v${version} @@ -52,10 +57,7 @@ module.exports = function parseCommandLine(processArgs) { .alias('f', 'foreground') .boolean('f') .describe('f', 'Keep the main process in the foreground.'); - options - .alias('h', 'help') - .boolean('h') - .describe('h', 'Print this usage message.'); + options.help('help', 'Print this usage message.').alias('h', 'help'); options .alias('l', 'log-file') .string('l') @@ -131,7 +133,16 @@ module.exports = function parseCommandLine(processArgs) { 'Enable low-level logging messages from Electron.' ); options.boolean('uri-handler'); + options + .version( + dedent`Atom : ${version} + Electron: ${process.versions.electron} + Chrome : ${process.versions.chrome} + Node : ${process.versions.node}` + ) + .alias('v', 'version'); + // NB: if --help or --version are given, this also displays the relevant message and exits let args = options.argv; // If --uri-handler is set, then we parse NOTHING else @@ -143,11 +154,6 @@ module.exports = function parseCommandLine(processArgs) { }; } - if (args.help) { - process.stdout.write(options.help()); - process.exit(0); - } - const addToLastWindow = args['add']; const safeMode = args['safe']; const benchmark = args['benchmark']; @@ -187,6 +193,11 @@ module.exports = function parseCommandLine(processArgs) { let devMode = args['dev']; for (const path of args._) { + if (typeof path !== 'string') { + // Sometimes non-strings (such as numbers or boolean true) get into args._ + // In the next block, .startsWith() only works on strings. So, skip non-string arguments. + continue; + } if (path.startsWith('atom://')) { urlsToOpen.push(path); } else { diff --git a/src/main-process/start.js b/src/main-process/start.js index 9f0d58161..122c332f6 100644 --- a/src/main-process/start.js +++ b/src/main-process/start.js @@ -37,12 +37,18 @@ module.exports = function start(resourcePath, devResourcePath, startTime) { } }); - const previousConsoleLog = console.log; - console.log = nslog; + // TodoElectronIssue this should be set to true before Electron 12 - https://github.com/electron/electron/issues/18397 + app.allowRendererProcessReuse = false; app.commandLine.appendSwitch('enable-experimental-web-platform-features'); const args = parseCommandLine(process.argv.slice(1)); + + // This must happen after parseCommandLine() because yargs uses console.log + // to display the usage message. + const previousConsoleLog = console.log; + console.log = nslog; + args.resourcePath = normalizeDriveLetterName(resourcePath); args.devResourcePath = normalizeDriveLetterName(devResourcePath); diff --git a/src/menu-helpers.js b/src/menu-helpers.js index c9d87a625..d096f3f1c 100644 --- a/src/menu-helpers.js +++ b/src/menu-helpers.js @@ -36,6 +36,7 @@ function merge(menu, item, itemSpecificity = Infinity) { } function unmerge(menu, item) { + item = cloneMenuItem(item); const matchingItemIndex = findMatchingItemIndex(menu, item); if (matchingItemIndex === -1) { return; @@ -53,16 +54,13 @@ function unmerge(menu, item) { } } -function findMatchingItemIndex(menu, { type, label, submenu }) { +function findMatchingItemIndex(menu, { type, id, submenu }) { if (type === 'separator') { return -1; } for (let index = 0; index < menu.length; index++) { const item = menu[index]; - if ( - normalizeLabel(item.label) === normalizeLabel(label) && - (item.submenu != null) === (submenu != null) - ) { + if (item.id === id && (item.submenu != null) === (submenu != null)) { return index; } } @@ -81,6 +79,7 @@ function cloneMenuItem(item) { item, 'type', 'label', + 'id', 'enabled', 'visible', 'command', @@ -93,6 +92,9 @@ function cloneMenuItem(item) { 'beforeGroupContaining', 'afterGroupContaining' ); + if (item.id === null || item.id === undefined) { + item.id = normalizeLabel(item.label); + } if (item.submenu != null) { item.submenu = item.submenu.map(submenuItem => cloneMenuItem(submenuItem)); } diff --git a/src/menu-manager.coffee b/src/menu-manager.coffee index aef708029..b6b4720a3 100644 --- a/src/menu-manager.coffee +++ b/src/menu-manager.coffee @@ -78,7 +78,7 @@ class MenuManager # atom.menu.add [ # { # label: 'Hello' - # submenu : [{label: 'World!', command: 'hello:world'}] + # submenu : [{label: 'World!', id: 'World!', command: 'hello:world'}] # } # ] # ``` @@ -89,6 +89,7 @@ class MenuManager # * `command` An optional {String} command to trigger when the item is # clicked. # + # * `id` (internal) A {String} containing the menu item's id. # Returns a {Disposable} on which `.dispose()` can be called to remove the # added menu items. add: (items) -> @@ -201,7 +202,7 @@ class MenuManager [] sortPackagesMenu: -> - packagesMenu = _.find @template, ({label}) -> MenuHelpers.normalizeLabel(label) is 'Packages' + packagesMenu = _.find @template, ({id}) -> MenuHelpers.normalizeLabel(id) is 'Packages' return unless packagesMenu?.submenu? packagesMenu.submenu.sort (item1, item2) -> diff --git a/src/module-cache.js b/src/module-cache.js index a63b3bbb3..4caa11521 100644 --- a/src/module-cache.js +++ b/src/module-cache.js @@ -73,7 +73,7 @@ function loadDependencies(modulePath, rootPath, rootMetadata, moduleCache) { const childMetadata = JSON.parse(fs.readFileSync(childMetadataPath)); if (childMetadata && childMetadata.version) { - var mainPath; + let mainPath; try { mainPath = require.resolve(childPath); } catch (error) { @@ -281,25 +281,6 @@ function registerBuiltins(devMode) { if (cache.builtins.atom == null) { cache.builtins.atom = path.join(cache.resourcePath, 'exports', 'atom.js'); } - - const electronAsarRoot = path.join(process.resourcesPath, 'electron.asar'); - - const commonRoot = path.join(electronAsarRoot, 'common', 'api'); - const commonBuiltins = ['clipboard', 'shell']; - for (const builtin of commonBuiltins) { - cache.builtins[builtin] = path.join(commonRoot, `${builtin}.js`); - } - - const rendererRoot = path.join(electronAsarRoot, 'renderer', 'api'); - const rendererBuiltins = [ - 'crash-reporter', - 'ipc-renderer', - 'remote' - // 'screen' Deprecated https://www.electronjs.org/docs/breaking-changes#api-changed-electronscreen-in-the-renderer-process-should-be-accessed-via-remote - ]; - for (const builtin of rendererBuiltins) { - cache.builtins[builtin] = path.join(rendererRoot, `${builtin}.js`); - } } exports.create = function(modulePath) { diff --git a/src/native-compile-cache.js b/src/native-compile-cache.js index 422fbccd9..3f82e108e 100644 --- a/src/native-compile-cache.js +++ b/src/native-compile-cache.js @@ -38,12 +38,11 @@ class NativeCompileCache { } runInThisContext(code, filename) { - // TodoElectronIssue: produceCachedData is deprecated after Node 10.6, so we'll - // will need to update this for Electron v4 to use script.createCachedData(). - const script = new vm.Script(code, { filename, produceCachedData: true }); + const script = new vm.Script(code, filename); + const cachedData = script.createCachedData(); return { result: script.runInThisContext(), - cacheBuffer: script.cachedDataProduced ? script.cachedData : null + cacheBuffer: typeof cachedData !== 'undefined' ? cachedData : null }; } diff --git a/src/notification-manager.js b/src/notification-manager.js index 8ee7ad659..482515304 100644 --- a/src/notification-manager.js +++ b/src/notification-manager.js @@ -147,6 +147,7 @@ module.exports = class NotificationManager { // in the notification header. Defaults to `'flame'`. // * `stack` (optional) A preformatted {String} with stack trace // information describing the location of the error. + // Requires `detail` to be set. // // Returns the {Notification} that was added. addError(message, options) { @@ -177,6 +178,7 @@ module.exports = class NotificationManager { // in the notification header. Defaults to `'bug'`. // * `stack` (optional) A preformatted {String} with stack trace // information describing the location of the error. + // Requires `detail` to be set. // // Returns the {Notification} that was added. addFatalError(message, options) { diff --git a/src/package-manager.js b/src/package-manager.js index 4e1bd5a29..163e3ca9d 100644 --- a/src/package-manager.js +++ b/src/package-manager.js @@ -531,7 +531,7 @@ module.exports = class PackageManager { ) => { for (const packageName of packageNames) { if (!disabledPackageNames.has(packageName)) { - var pack = this.getLoadedPackage(packageName); + const pack = this.getLoadedPackage(packageName); if (pack != null) { action(pack); } diff --git a/src/package.js b/src/package.js index 169d763c2..06f312661 100644 --- a/src/package.js +++ b/src/package.js @@ -1,5 +1,5 @@ const path = require('path'); -const async = require('async'); +const asyncEach = require('async/each'); const CSON = require('season'); const fs = require('fs-plus'); const { Emitter, CompositeDisposable } = require('event-kit'); @@ -726,14 +726,14 @@ module.exports = class Package { this.packageManager.packagesCache[this.name] ) { const { grammarPaths } = this.packageManager.packagesCache[this.name]; - return async.each(grammarPaths, loadGrammar, () => resolve()); + return asyncEach(grammarPaths, loadGrammar, () => resolve()); } else { const grammarsDirPath = path.join(this.path, 'grammars'); fs.exists(grammarsDirPath, grammarsDirExists => { if (!grammarsDirExists) return resolve(); fs.list(grammarsDirPath, ['json', 'cson'], (error, grammarPaths) => { if (error || !grammarPaths) return resolve(); - async.each(grammarPaths, loadGrammar, () => resolve()); + asyncEach(grammarPaths, loadGrammar, () => resolve()); }); }); } @@ -779,7 +779,7 @@ module.exports = class Package { if (!settingsDirExists) return resolve(); fs.list(settingsDirPath, ['json', 'cson'], (error, settingsPaths) => { if (error || !settingsPaths) return resolve(); - async.each(settingsPaths, loadSettingsFile, () => resolve()); + asyncEach(settingsPaths, loadSettingsFile, () => resolve()); }); }); }); @@ -917,6 +917,10 @@ module.exports = class Package { this.getCanDeferMainModuleRequireStorageKey(), 'true' ); + } else { + localStorage.removeItem( + this.getCanDeferMainModuleRequireStorageKey() + ); } return this.mainModule; } @@ -1147,46 +1151,60 @@ module.exports = class Package { // Does the given module path contain native code? isNativeModule(modulePath) { try { - return ( - fs.listSync(path.join(modulePath, 'build', 'Release'), ['.node']) - .length > 0 - ); + return this.getModulePathNodeFiles(modulePath).length > 0; } catch (error) { return false; } } - // Get an array of all the native modules that this package depends on. + // get the list of `.node` files for the given module path + getModulePathNodeFiles(modulePath) { + try { + const modulePathNodeFiles = fs.listSync( + path.join(modulePath, 'build', 'Release'), + ['.node'] + ); + return modulePathNodeFiles; + } catch (error) { + return []; + } + } + + // Get a Map of all the native modules => the `.node` files that this package depends on. // // First try to get this information from // @metadata._atomModuleCache.extensions. If @metadata._atomModuleCache doesn't // exist, recurse through all dependencies. - getNativeModuleDependencyPaths() { - const nativeModulePaths = []; + getNativeModuleDependencyPathsMap() { + const nativeModulePaths = new Map(); if (this.metadata._atomModuleCache) { + const nodeFilePaths = []; const relativeNativeModuleBindingPaths = (this.metadata._atomModuleCache.extensions && this.metadata._atomModuleCache.extensions['.node']) || []; for (let relativeNativeModuleBindingPath of relativeNativeModuleBindingPaths) { - const nativeModulePath = path.join( + const nodeFilePath = path.join( this.path, relativeNativeModuleBindingPath, '..', '..', '..' ); - nativeModulePaths.push(nativeModulePath); + nodeFilePaths.push(nodeFilePath); } + nativeModulePaths.set(this.path, nodeFilePaths); return nativeModulePaths; } - var traversePath = nodeModulesPath => { + const traversePath = nodeModulesPath => { try { for (let modulePath of fs.listSync(nodeModulesPath)) { - if (this.isNativeModule(modulePath)) - nativeModulePaths.push(modulePath); + const modulePathNodeFiles = this.getModulePathNodeFiles(modulePath); + if (modulePathNodeFiles) { + nativeModulePaths.set(modulePath, modulePathNodeFiles); + } traversePath(path.join(modulePath, 'node_modules')); } } catch (error) {} @@ -1197,6 +1215,12 @@ module.exports = class Package { return nativeModulePaths; } + // Get an array of all the native modules that this package depends on. + // See `getNativeModuleDependencyPathsMap` for more information + getNativeModuleDependencyPaths() { + return [...this.getNativeModuleDependencyPathsMap().keys()]; + } + /* Section: Native Module Compatibility */ @@ -1298,8 +1322,7 @@ module.exports = class Package { } // Get the incompatible native modules that this package depends on. - // This recurses through all dependencies and requires all modules that - // contain a `.node` file. + // This recurses through all dependencies and requires all `.node` files. // // This information is cached in local storage on a per package/version basis // to minimize the impact on startup time. @@ -1314,9 +1337,13 @@ module.exports = class Package { } const incompatibleNativeModules = []; - for (let nativeModulePath of this.getNativeModuleDependencyPaths()) { + const nativeModulePaths = this.getNativeModuleDependencyPathsMap(); + for (const [nativeModulePath, nodeFilesPaths] of nativeModulePaths) { try { - require(nativeModulePath); + // require each .node file + for (const nodeFilePath of nodeFilesPaths) { + require(nodeFilePath); + } } catch (error) { let version; try { diff --git a/src/pane-axis-element.coffee b/src/pane-axis-element.coffee deleted file mode 100644 index 86615b2c6..000000000 --- a/src/pane-axis-element.coffee +++ /dev/null @@ -1,71 +0,0 @@ -{CompositeDisposable} = require 'event-kit' -PaneResizeHandleElement = require './pane-resize-handle-element' - -class PaneAxisElement extends HTMLElement - attachedCallback: -> - @subscriptions ?= @subscribeToModel() - @childAdded({child, index}) for child, index in @model.getChildren() - - detachedCallback: -> - @subscriptions.dispose() - @subscriptions = null - @childRemoved({child}) for child in @model.getChildren() - - initialize: (@model, @viewRegistry) -> - @subscriptions ?= @subscribeToModel() - @childAdded({child, index}) for child, index in @model.getChildren() - - switch @model.getOrientation() - when 'horizontal' - @classList.add('horizontal', 'pane-row') - when 'vertical' - @classList.add('vertical', 'pane-column') - this - - subscribeToModel: -> - subscriptions = new CompositeDisposable - subscriptions.add @model.onDidAddChild(@childAdded.bind(this)) - subscriptions.add @model.onDidRemoveChild(@childRemoved.bind(this)) - subscriptions.add @model.onDidReplaceChild(@childReplaced.bind(this)) - subscriptions.add @model.observeFlexScale(@flexScaleChanged.bind(this)) - subscriptions - - isPaneResizeHandleElement: (element) -> - element?.nodeName.toLowerCase() is 'atom-pane-resize-handle' - - childAdded: ({child, index}) -> - view = @viewRegistry.getView(child) - @insertBefore(view, @children[index * 2]) - - prevElement = view.previousSibling - # if previous element is not pane resize element, then insert new resize element - if prevElement? and not @isPaneResizeHandleElement(prevElement) - resizeHandle = document.createElement('atom-pane-resize-handle') - @insertBefore(resizeHandle, view) - - nextElement = view.nextSibling - # if next element isnot resize element, then insert new resize element - if nextElement? and not @isPaneResizeHandleElement(nextElement) - resizeHandle = document.createElement('atom-pane-resize-handle') - @insertBefore(resizeHandle, nextElement) - - childRemoved: ({child}) -> - view = @viewRegistry.getView(child) - siblingView = view.previousSibling - # make sure next sibling view is pane resize view - if siblingView? and @isPaneResizeHandleElement(siblingView) - siblingView.remove() - view.remove() - - childReplaced: ({index, oldChild, newChild}) -> - focusedElement = document.activeElement if @hasFocus() - @childRemoved({child: oldChild, index}) - @childAdded({child: newChild, index}) - focusedElement?.focus() if document.activeElement is document.body - - flexScaleChanged: (flexScale) -> @style.flexGrow = flexScale - - hasFocus: -> - this is document.activeElement or @contains(document.activeElement) - -module.exports = PaneAxisElement = document.registerElement 'atom-pane-axis', prototype: PaneAxisElement.prototype diff --git a/src/pane-axis-element.js b/src/pane-axis-element.js new file mode 100644 index 000000000..1a620f9df --- /dev/null +++ b/src/pane-axis-element.js @@ -0,0 +1,126 @@ +const { CompositeDisposable } = require('event-kit'); +require('./pane-resize-handle-element'); + +class PaneAxisElement extends HTMLElement { + connectedCallback() { + if (this.subscriptions == null) { + this.subscriptions = this.subscribeToModel(); + } + this.model + .getChildren() + .map((child, index) => this.childAdded({ child, index })); + } + + disconnectedCallback() { + this.subscriptions.dispose(); + this.subscriptions = null; + this.model.getChildren().map(child => this.childRemoved({ child })); + } + + initialize(model, viewRegistry) { + this.model = model; + this.viewRegistry = viewRegistry; + if (this.subscriptions == null) { + this.subscriptions = this.subscribeToModel(); + } + const iterable = this.model.getChildren(); + for (let index = 0; index < iterable.length; index++) { + const child = iterable[index]; + this.childAdded({ child, index }); + } + + switch (this.model.getOrientation()) { + case 'horizontal': + this.classList.add('horizontal', 'pane-row'); + break; + case 'vertical': + this.classList.add('vertical', 'pane-column'); + break; + } + return this; + } + + subscribeToModel() { + const subscriptions = new CompositeDisposable(); + subscriptions.add(this.model.onDidAddChild(this.childAdded.bind(this))); + subscriptions.add( + this.model.onDidRemoveChild(this.childRemoved.bind(this)) + ); + subscriptions.add( + this.model.onDidReplaceChild(this.childReplaced.bind(this)) + ); + subscriptions.add( + this.model.observeFlexScale(this.flexScaleChanged.bind(this)) + ); + return subscriptions; + } + + isPaneResizeHandleElement(element) { + return ( + (element != null ? element.nodeName.toLowerCase() : undefined) === + 'atom-pane-resize-handle' + ); + } + + childAdded({ child, index }) { + let resizeHandle; + const view = this.viewRegistry.getView(child); + this.insertBefore(view, this.children[index * 2]); + + const prevElement = view.previousSibling; + // if previous element is not pane resize element, then insert new resize element + if (prevElement != null && !this.isPaneResizeHandleElement(prevElement)) { + resizeHandle = document.createElement('atom-pane-resize-handle'); + this.insertBefore(resizeHandle, view); + } + + const nextElement = view.nextSibling; + // if next element isnot resize element, then insert new resize element + if (nextElement != null && !this.isPaneResizeHandleElement(nextElement)) { + resizeHandle = document.createElement('atom-pane-resize-handle'); + return this.insertBefore(resizeHandle, nextElement); + } + } + + childRemoved({ child }) { + const view = this.viewRegistry.getView(child); + const siblingView = view.previousSibling; + // make sure next sibling view is pane resize view + if (siblingView != null && this.isPaneResizeHandleElement(siblingView)) { + siblingView.remove(); + } + return view.remove(); + } + + childReplaced({ index, oldChild, newChild }) { + let focusedElement; + if (this.hasFocus()) { + focusedElement = document.activeElement; + } + this.childRemoved({ child: oldChild, index }); + this.childAdded({ child: newChild, index }); + if (document.activeElement === document.body) { + return focusedElement != null ? focusedElement.focus() : undefined; + } + } + + flexScaleChanged(flexScale) { + this.style.flexGrow = flexScale; + } + + hasFocus() { + return ( + this === document.activeElement || this.contains(document.activeElement) + ); + } +} + +window.customElements.define('atom-pane-axis', PaneAxisElement); + +function createPaneAxisElement() { + return document.createElement('atom-pane-axis'); +} + +module.exports = { + createPaneAxisElement +}; diff --git a/src/pane-axis.js b/src/pane-axis.js index 8abe6641f..08afa2351 100644 --- a/src/pane-axis.js +++ b/src/pane-axis.js @@ -1,7 +1,7 @@ const { Emitter, CompositeDisposable } = require('event-kit'); const { flatten } = require('underscore-plus'); const Model = require('./model'); -const PaneAxisElement = require('./pane-axis-element'); +const { createPaneAxisElement } = require('./pane-axis-element'); class PaneAxis extends Model { static deserialize(state, { deserializers, views }) { @@ -40,7 +40,10 @@ class PaneAxis extends Model { getElement() { if (!this.element) { - this.element = new PaneAxisElement().initialize(this, this.viewRegistry); + this.element = createPaneAxisElement().initialize( + this, + this.viewRegistry + ); } return this.element; } diff --git a/src/pane-container-element.js b/src/pane-container-element.js index bff5b29c7..f435ceef5 100644 --- a/src/pane-container-element.js +++ b/src/pane-container-element.js @@ -1,9 +1,9 @@ const { CompositeDisposable } = require('event-kit'); class PaneContainerElement extends HTMLElement { - createdCallback() { + constructor() { + super(); this.subscriptions = new CompositeDisposable(); - this.classList.add('panes'); } initialize(model, { views }) { @@ -18,6 +18,10 @@ class PaneContainerElement extends HTMLElement { return this; } + connectedCallback() { + this.classList.add('panes'); + } + rootChanged(root) { const focusedElement = this.hasFocus() ? document.activeElement : null; if (this.firstChild != null) { @@ -39,6 +43,12 @@ class PaneContainerElement extends HTMLElement { } } -module.exports = document.registerElement('atom-pane-container', { - prototype: PaneContainerElement.prototype -}); +window.customElements.define('atom-pane-container', PaneContainerElement); + +function createPaneContainerElement() { + return document.createElement('atom-pane-container'); +} + +module.exports = { + createPaneContainerElement +}; diff --git a/src/pane-container.js b/src/pane-container.js index 4cd76dcda..bc2f2a6f6 100644 --- a/src/pane-container.js +++ b/src/pane-container.js @@ -2,7 +2,7 @@ const { find } = require('underscore-plus'); const { Emitter, CompositeDisposable } = require('event-kit'); const Pane = require('./pane'); const ItemRegistry = require('./item-registry'); -const PaneContainerElement = require('./pane-container-element'); +const { createPaneContainerElement } = require('./pane-container-element'); const SERIALIZATION_VERSION = 1; const STOPPED_CHANGING_ACTIVE_PANE_ITEM_DELAY = 100; @@ -44,7 +44,7 @@ module.exports = class PaneContainer { getElement() { return this.element != null ? this.element - : (this.element = new PaneContainerElement().initialize(this, { + : (this.element = createPaneContainerElement().initialize(this, { views: this.viewRegistry })); } diff --git a/src/pane-element.js b/src/pane-element.js index ac2ef71d1..60b8cf5d0 100644 --- a/src/pane-element.js +++ b/src/pane-element.js @@ -2,15 +2,17 @@ const path = require('path'); const { CompositeDisposable } = require('event-kit'); class PaneElement extends HTMLElement { - createdCallback() { + constructor() { + super(); this.attached = false; this.subscriptions = new CompositeDisposable(); this.inlineDisplayStyles = new WeakMap(); - this.initializeContent(); this.subscribeToDOMEvents(); + this.itemViews = document.createElement('div'); } - attachedCallback() { + connectedCallback() { + this.initializeContent(); this.attached = true; if (this.model.isFocused()) { this.focus(); @@ -24,7 +26,6 @@ class PaneElement extends HTMLElement { initializeContent() { this.setAttribute('class', 'pane'); this.setAttribute('tabindex', -1); - this.itemViews = document.createElement('div'); this.appendChild(this.itemViews); this.itemViews.setAttribute('class', 'item-views'); } @@ -148,6 +149,7 @@ class PaneElement extends HTMLElement { }); } } + if (!this.itemViews.contains(itemView)) { this.itemViews.appendChild(itemView); } @@ -213,6 +215,12 @@ class PaneElement extends HTMLElement { } } -module.exports = document.registerElement('atom-pane', { - prototype: PaneElement.prototype -}); +function createPaneElement() { + return document.createElement('atom-pane'); +} + +window.customElements.define('atom-pane', PaneElement); + +module.exports = { + createPaneElement +}; diff --git a/src/pane-resize-handle-element.coffee b/src/pane-resize-handle-element.coffee deleted file mode 100644 index e7ea5480a..000000000 --- a/src/pane-resize-handle-element.coffee +++ /dev/null @@ -1,80 +0,0 @@ -class PaneResizeHandleElement extends HTMLElement - createdCallback: -> - @resizePane = @resizePane.bind(this) - @resizeStopped = @resizeStopped.bind(this) - @subscribeToDOMEvents() - - subscribeToDOMEvents: -> - @addEventListener 'dblclick', @resizeToFitContent.bind(this) - @addEventListener 'mousedown', @resizeStarted.bind(this) - - attachedCallback: -> - # For some reason Chromium 58 is firing the attached callback after the - # element has been detached, so we ignore the callback when a parent element - # can't be found. - if @parentElement - @isHorizontal = @parentElement.classList.contains("horizontal") - @classList.add if @isHorizontal then 'horizontal' else 'vertical' - - detachedCallback: -> - @resizeStopped() - - resizeToFitContent: -> - # clear flex-grow css style of both pane - @previousSibling?.model.setFlexScale(1) - @nextSibling?.model.setFlexScale(1) - - resizeStarted: (e) -> - e.stopPropagation() - if not @overlay - @overlay = document.createElement('div') - @overlay.classList.add('atom-pane-cursor-overlay') - @overlay.classList.add(if @isHorizontal then 'horizontal' else 'vertical') - @appendChild @overlay - document.addEventListener 'mousemove', @resizePane - document.addEventListener 'mouseup', @resizeStopped - - resizeStopped: -> - document.removeEventListener 'mousemove', @resizePane - document.removeEventListener 'mouseup', @resizeStopped - if @overlay - @removeChild @overlay - @overlay = undefined - - calcRatio: (ratio1, ratio2, total) -> - allRatio = ratio1 + ratio2 - [total * ratio1 / allRatio, total * ratio2 / allRatio] - - setFlexGrow: (prevSize, nextSize) -> - @prevModel = @previousSibling.model - @nextModel = @nextSibling.model - totalScale = @prevModel.getFlexScale() + @nextModel.getFlexScale() - flexGrows = @calcRatio(prevSize, nextSize, totalScale) - @prevModel.setFlexScale flexGrows[0] - @nextModel.setFlexScale flexGrows[1] - - fixInRange: (val, minValue, maxValue) -> - Math.min(Math.max(val, minValue), maxValue) - - resizePane: ({clientX, clientY, which}) -> - return @resizeStopped() unless which is 1 - return @resizeStopped() unless @previousSibling? and @nextSibling? - - if @isHorizontal - totalWidth = @previousSibling.clientWidth + @nextSibling.clientWidth - #get the left and right width after move the resize view - leftWidth = clientX - @previousSibling.getBoundingClientRect().left - leftWidth = @fixInRange(leftWidth, 0, totalWidth) - rightWidth = totalWidth - leftWidth - # set the flex grow by the ratio of left width and right width - # to change pane width - @setFlexGrow(leftWidth, rightWidth) - else - totalHeight = @previousSibling.clientHeight + @nextSibling.clientHeight - topHeight = clientY - @previousSibling.getBoundingClientRect().top - topHeight = @fixInRange(topHeight, 0, totalHeight) - bottomHeight = totalHeight - topHeight - @setFlexGrow(topHeight, bottomHeight) - -module.exports = PaneResizeHandleElement = -document.registerElement 'atom-pane-resize-handle', prototype: PaneResizeHandleElement.prototype diff --git a/src/pane-resize-handle-element.js b/src/pane-resize-handle-element.js new file mode 100644 index 000000000..ede61042f --- /dev/null +++ b/src/pane-resize-handle-element.js @@ -0,0 +1,120 @@ +class PaneResizeHandleElement extends HTMLElement { + constructor() { + super(); + this.resizePane = this.resizePane.bind(this); + this.resizeStopped = this.resizeStopped.bind(this); + this.subscribeToDOMEvents(); + } + + subscribeToDOMEvents() { + this.addEventListener('dblclick', this.resizeToFitContent.bind(this)); + this.addEventListener('mousedown', this.resizeStarted.bind(this)); + } + + connectedCallback() { + // For some reason Chromium 58 is firing the attached callback after the + // element has been detached, so we ignore the callback when a parent element + // can't be found. + if (this.parentElement) { + this.isHorizontal = this.parentElement.classList.contains('horizontal'); + this.classList.add(this.isHorizontal ? 'horizontal' : 'vertical'); + } + } + + disconnectedCallback() { + this.resizeStopped(); + } + + resizeToFitContent() { + // clear flex-grow css style of both pane + if (this.previousSibling != null) { + this.previousSibling.model.setFlexScale(1); + } + return this.nextSibling != null + ? this.nextSibling.model.setFlexScale(1) + : undefined; + } + + resizeStarted(e) { + e.stopPropagation(); + if (!this.overlay) { + this.overlay = document.createElement('div'); + this.overlay.classList.add('atom-pane-cursor-overlay'); + this.overlay.classList.add(this.isHorizontal ? 'horizontal' : 'vertical'); + this.appendChild(this.overlay); + } + document.addEventListener('mousemove', this.resizePane); + document.addEventListener('mouseup', this.resizeStopped); + } + + resizeStopped() { + document.removeEventListener('mousemove', this.resizePane); + document.removeEventListener('mouseup', this.resizeStopped); + if (this.overlay) { + this.removeChild(this.overlay); + this.overlay = undefined; + } + } + + calcRatio(ratio1, ratio2, total) { + const allRatio = ratio1 + ratio2; + return [(total * ratio1) / allRatio, (total * ratio2) / allRatio]; + } + + setFlexGrow(prevSize, nextSize) { + this.prevModel = this.previousSibling.model; + this.nextModel = this.nextSibling.model; + const totalScale = + this.prevModel.getFlexScale() + this.nextModel.getFlexScale(); + const flexGrows = this.calcRatio(prevSize, nextSize, totalScale); + this.prevModel.setFlexScale(flexGrows[0]); + this.nextModel.setFlexScale(flexGrows[1]); + } + + fixInRange(val, minValue, maxValue) { + return Math.min(Math.max(val, minValue), maxValue); + } + + resizePane({ clientX, clientY, which }) { + if (which !== 1) { + return this.resizeStopped(); + } + if (this.previousSibling == null || this.nextSibling == null) { + return this.resizeStopped(); + } + + if (this.isHorizontal) { + const totalWidth = + this.previousSibling.clientWidth + this.nextSibling.clientWidth; + // get the left and right width after move the resize view + let leftWidth = + clientX - this.previousSibling.getBoundingClientRect().left; + leftWidth = this.fixInRange(leftWidth, 0, totalWidth); + const rightWidth = totalWidth - leftWidth; + // set the flex grow by the ratio of left width and right width + // to change pane width + this.setFlexGrow(leftWidth, rightWidth); + } else { + const totalHeight = + this.previousSibling.clientHeight + this.nextSibling.clientHeight; + let topHeight = + clientY - this.previousSibling.getBoundingClientRect().top; + topHeight = this.fixInRange(topHeight, 0, totalHeight); + const bottomHeight = totalHeight - topHeight; + this.setFlexGrow(topHeight, bottomHeight); + } + } +} + +window.customElements.define( + 'atom-pane-resize-handle', + PaneResizeHandleElement +); + +function createPaneResizeHandleElement() { + return document.createElement('atom-pane-resize-handle'); +} + +module.exports = { + createPaneResizeHandleElement +}; diff --git a/src/pane.js b/src/pane.js index 431ab91c4..a55575ae0 100644 --- a/src/pane.js +++ b/src/pane.js @@ -2,7 +2,7 @@ const Grim = require('grim'); const { CompositeDisposable, Emitter } = require('event-kit'); const PaneAxis = require('./pane-axis'); const TextEditor = require('./text-editor'); -const PaneElement = require('./pane-element'); +const { createPaneElement } = require('./pane-element'); let nextInstanceId = 1; @@ -98,7 +98,7 @@ module.exports = class Pane { getElement() { if (!this.element) { - this.element = new PaneElement().initialize(this, { + this.element = createPaneElement().initialize(this, { views: this.viewRegistry, applicationDelegate: this.applicationDelegate }); @@ -814,6 +814,9 @@ module.exports = class Pane { // last item, the pane will be destroyed if the `core.destroyEmptyPanes` config // setting is `true`. // + // This action can be prevented by onWillDestroyPaneItem callbacks in which + // case nothing happens. + // // * `item` Item to destroy // * `force` (optional) {Boolean} Destroy the item without prompting to save // it, even if the item's `isPermanentDockItem` method returns true. @@ -844,7 +847,16 @@ module.exports = class Pane { 'will-destroy-pane-item' ) > 0 ) { - await this.container.willDestroyPaneItem({ item, index, pane: this }); + let preventClosing = false; + await this.container.willDestroyPaneItem({ + item, + index, + pane: this, + prevent: () => { + preventClosing = true; + } + }); + if (preventClosing) return false; } if ( diff --git a/src/panel-container-element.js b/src/panel-container-element.js index 230b957d4..4e7f6024f 100644 --- a/src/panel-container-element.js +++ b/src/panel-container-element.js @@ -4,11 +4,12 @@ const { createFocusTrap } = require('focus-trap'); const { CompositeDisposable } = require('event-kit'); class PanelContainerElement extends HTMLElement { - createdCallback() { + constructor() { + super(); this.subscriptions = new CompositeDisposable(); } - attachedCallback() { + connectedCallback() { if (this.model.dock) { this.model.dock.elementAttached(); } @@ -111,6 +112,12 @@ class PanelContainerElement extends HTMLElement { } } -module.exports = document.registerElement('atom-panel-container', { - prototype: PanelContainerElement.prototype -}); +window.customElements.define('atom-panel-container', PanelContainerElement); + +function createPanelContainerElement() { + return document.createElement('atom-panel-container'); +} + +module.exports = { + createPanelContainerElement +}; diff --git a/src/panel-container.js b/src/panel-container.js index 16e81bbe1..5a003f3f8 100644 --- a/src/panel-container.js +++ b/src/panel-container.js @@ -1,7 +1,7 @@ 'use strict'; const { Emitter, CompositeDisposable } = require('event-kit'); -const PanelContainerElement = require('./panel-container-element'); +const { createPanelContainerElement } = require('./panel-container-element'); module.exports = class PanelContainer { constructor({ location, dock, viewRegistry } = {}) { @@ -24,7 +24,7 @@ module.exports = class PanelContainer { getElement() { if (!this.element) { - this.element = new PanelContainerElement().initialize( + this.element = createPanelContainerElement().initialize( this, this.viewRegistry ); diff --git a/src/path-watcher.js b/src/path-watcher.js index 2fed722c5..11064eaf2 100644 --- a/src/path-watcher.js +++ b/src/path-watcher.js @@ -294,8 +294,14 @@ class NSFWNativeWatcher extends NativeWatcher { if (event.file) { payload.path = path.join(event.directory, event.file); } else { - payload.oldPath = path.join(event.directory, event.oldFile); - payload.path = path.join(event.directory, event.newFile); + payload.oldPath = path.join( + event.directory, + typeof event.oldFile === 'undefined' ? '' : event.oldFile + ); + payload.path = path.join( + event.directory, + typeof event.newFile === 'undefined' ? '' : event.newFile + ); } return payload; diff --git a/src/project.js b/src/project.js index 002408863..d917c6fe8 100644 --- a/src/project.js +++ b/src/project.js @@ -350,7 +350,13 @@ module.exports = class Project extends Model { // Public: Get an {Array} of {String}s containing the paths of the project's // directories. getPaths() { - return this.rootDirectories.map(rootDirectory => rootDirectory.getPath()); + try { + return this.rootDirectories.map(rootDirectory => rootDirectory.getPath()); + } catch (e) { + atom.notifications.addError( + "Please clear Atom's window state with: atom --clear-window-state" + ); + } } // Public: Set the paths of the project's directories. diff --git a/src/protocol-handler-installer.js b/src/protocol-handler-installer.js index 2f3c0740d..6b904fc7a 100644 --- a/src/protocol-handler-installer.js +++ b/src/protocol-handler-installer.js @@ -1,4 +1,4 @@ -const { remote } = require('electron'); +const { ipcRenderer } = require('electron'); const SETTING = 'core.uriHandlerRegistration'; const PROMPT = 'prompt'; @@ -10,26 +10,28 @@ module.exports = class ProtocolHandlerInstaller { return ['win32', 'darwin'].includes(process.platform); } - isDefaultProtocolClient() { - return remote.app.isDefaultProtocolClient('atom', process.execPath, [ - '--uri-handler', - '--' - ]); + async isDefaultProtocolClient() { + return ipcRenderer.invoke('isDefaultProtocolClient', { + protocol: 'atom', + path: process.execPath, + args: ['--uri-handler', '--'] + }); } - setAsDefaultProtocolClient() { + async setAsDefaultProtocolClient() { // This Electron API is only available on Windows and macOS. There might be some // hacks to make it work on Linux; see https://github.com/electron/electron/issues/6440 return ( this.isSupported() && - remote.app.setAsDefaultProtocolClient('atom', process.execPath, [ - '--uri-handler', - '--' - ]) + ipcRenderer.invoke('setAsDefaultProtocolClient', { + protocol: 'atom', + path: process.execPath, + args: ['--uri-handler', '--'] + }) ); } - initialize(config, notifications) { + async initialize(config, notifications) { if (!this.isSupported()) { return; } @@ -37,12 +39,12 @@ module.exports = class ProtocolHandlerInstaller { const behaviorWhenNotProtocolClient = config.get(SETTING); switch (behaviorWhenNotProtocolClient) { case PROMPT: - if (!this.isDefaultProtocolClient()) { + if (await !this.isDefaultProtocolClient()) { this.promptToBecomeProtocolClient(config, notifications); } break; case ALWAYS: - if (!this.isDefaultProtocolClient()) { + if (await !this.isDefaultProtocolClient()) { this.setAsDefaultProtocolClient(); } break; diff --git a/src/reopen-project-menu-manager.js b/src/reopen-project-menu-manager.js index 9dd695b45..d1d553957 100644 --- a/src/reopen-project-menu-manager.js +++ b/src/reopen-project-menu-manager.js @@ -68,7 +68,7 @@ module.exports = class ReopenProjectMenuManager { async applyWindowsJumpListRemovals() { if (process.platform !== 'win32') return; if (this.app === undefined) { - this.app = require('remote').app; + this.app = require('electron').remote.app; } const removed = this.app @@ -89,7 +89,7 @@ module.exports = class ReopenProjectMenuManager { updateWindowsJumpList() { if (process.platform !== 'win32') return; if (this.app === undefined) { - this.app = require('remote').app; + this.app = require('electron').remote.app; } this.app.setJumpList([ @@ -146,9 +146,11 @@ module.exports = class ReopenProjectMenuManager { static createProjectsMenu(projects) { return { label: 'File', + id: 'File', submenu: [ { label: 'Reopen Project', + id: 'Reopen Project', submenu: projects.map((project, index) => ({ label: this.createLabel(project), command: 'application:reopen-project', diff --git a/src/state-store.js b/src/state-store.js index e8e51afff..840ec1831 100644 --- a/src/state-store.js +++ b/src/state-store.js @@ -13,6 +13,13 @@ module.exports = class StateStore { const dbOpenRequest = indexedDB.open(this.databaseName, this.version); dbOpenRequest.onupgradeneeded = event => { let db = event.target.result; + db.onerror = error => { + atom.notifications.addFatalError('Error loading database', { + stack: new Error('Error loading database').stack, + dismissable: true + }); + console.error('Error loading database', error); + }; db.createObjectStore('states'); }; dbOpenRequest.onsuccess = () => { @@ -20,6 +27,10 @@ module.exports = class StateStore { resolve(dbOpenRequest.result); }; dbOpenRequest.onerror = error => { + atom.notifications.addFatalError('Could not connect to indexedDB', { + stack: new Error('Could not connect to indexedDB').stack, + dismissable: true + }); console.error('Could not connect to indexedDB', error); this.connected = false; resolve(null); @@ -43,7 +54,7 @@ module.exports = class StateStore { this.dbPromise.then(db => { if (db == null) return resolve(); - var request = db + const request = db .transaction(['states'], 'readwrite') .objectStore('states') .put({ value: value, storedAt: new Date().toString() }, key); @@ -59,7 +70,7 @@ module.exports = class StateStore { if (!db) return; return new Promise((resolve, reject) => { - var request = db + const request = db .transaction(['states']) .objectStore('states') .get(key); @@ -83,7 +94,7 @@ module.exports = class StateStore { this.dbPromise.then(db => { if (db == null) return resolve(); - var request = db + const request = db .transaction(['states'], 'readwrite') .objectStore('states') .delete(key); @@ -99,7 +110,7 @@ module.exports = class StateStore { if (!db) return; return new Promise((resolve, reject) => { - var request = db + const request = db .transaction(['states'], 'readwrite') .objectStore('states') .clear(); @@ -115,7 +126,7 @@ module.exports = class StateStore { if (!db) return; return new Promise((resolve, reject) => { - var request = db + const request = db .transaction(['states']) .objectStore('states') .count(); diff --git a/src/style-manager.js b/src/style-manager.js index f29393805..fa4d37981 100644 --- a/src/style-manager.js +++ b/src/style-manager.js @@ -4,7 +4,7 @@ const fs = require('fs-plus'); const path = require('path'); const postcss = require('postcss'); const selectorParser = require('postcss-selector-parser'); -const StylesElement = require('./styles-element'); +const { createStylesElement } = require('./styles-element'); const DEPRECATED_SYNTAX_SELECTORS = require('./deprecated-syntax-selectors'); // Extended: A singleton instance of this class available via `atom.styles`, @@ -254,7 +254,7 @@ module.exports = class StyleManager { } buildStylesElement() { - var stylesElement = new StylesElement(); + const stylesElement = createStylesElement(); stylesElement.initialize(this); return stylesElement; } diff --git a/src/styles-element.coffee b/src/styles-element.coffee deleted file mode 100644 index 2c53300c2..000000000 --- a/src/styles-element.coffee +++ /dev/null @@ -1,82 +0,0 @@ -{Emitter, CompositeDisposable} = require 'event-kit' - -class StylesElement extends HTMLElement - subscriptions: null - context: null - - onDidAddStyleElement: (callback) -> - @emitter.on 'did-add-style-element', callback - - onDidRemoveStyleElement: (callback) -> - @emitter.on 'did-remove-style-element', callback - - onDidUpdateStyleElement: (callback) -> - @emitter.on 'did-update-style-element', callback - - createdCallback: -> - @subscriptions = new CompositeDisposable - @emitter = new Emitter - @styleElementClonesByOriginalElement = new WeakMap - - attachedCallback: -> - @context = @getAttribute('context') ? undefined - - detachedCallback: -> - @subscriptions.dispose() - @subscriptions = new CompositeDisposable - - attributeChangedCallback: (attrName, oldVal, newVal) -> - @contextChanged() if attrName is 'context' - - initialize: (@styleManager) -> - throw new Error("Must pass a styleManager parameter when initializing a StylesElement") unless @styleManager? - - @subscriptions.add @styleManager.observeStyleElements(@styleElementAdded.bind(this)) - @subscriptions.add @styleManager.onDidRemoveStyleElement(@styleElementRemoved.bind(this)) - @subscriptions.add @styleManager.onDidUpdateStyleElement(@styleElementUpdated.bind(this)) - - contextChanged: -> - return unless @subscriptions? - - @styleElementRemoved(child) for child in Array::slice.call(@children) - @context = @getAttribute('context') - @styleElementAdded(styleElement) for styleElement in @styleManager.getStyleElements() - return - - styleElementAdded: (styleElement) -> - return unless @styleElementMatchesContext(styleElement) - - styleElementClone = styleElement.cloneNode(true) - styleElementClone.sourcePath = styleElement.sourcePath - styleElementClone.context = styleElement.context - styleElementClone.priority = styleElement.priority - @styleElementClonesByOriginalElement.set(styleElement, styleElementClone) - - priority = styleElement.priority - if priority? - for child in @children - if child.priority > priority - insertBefore = child - break - - @insertBefore(styleElementClone, insertBefore) - @emitter.emit 'did-add-style-element', styleElementClone - - styleElementRemoved: (styleElement) -> - return unless @styleElementMatchesContext(styleElement) - - styleElementClone = @styleElementClonesByOriginalElement.get(styleElement) ? styleElement - styleElementClone.remove() - @emitter.emit 'did-remove-style-element', styleElementClone - - styleElementUpdated: (styleElement) -> - return unless @styleElementMatchesContext(styleElement) - - styleElementClone = @styleElementClonesByOriginalElement.get(styleElement) - styleElementClone.textContent = styleElement.textContent - @emitter.emit 'did-update-style-element', styleElementClone - - styleElementMatchesContext: (styleElement) -> - not @context? or styleElement.context is @context - -module.exports = StylesElement = document.registerElement 'atom-styles', prototype: StylesElement.prototype diff --git a/src/styles-element.js b/src/styles-element.js new file mode 100644 index 000000000..94c287dc0 --- /dev/null +++ b/src/styles-element.js @@ -0,0 +1,151 @@ +const { Emitter, CompositeDisposable } = require('event-kit'); + +class StylesElement extends HTMLElement { + constructor() { + super(); + this.subscriptions = new CompositeDisposable(); + this.emitter = new Emitter(); + this.styleElementClonesByOriginalElement = new WeakMap(); + this.context = null; + } + + onDidAddStyleElement(callback) { + this.emitter.on('did-add-style-element', callback); + } + + onDidRemoveStyleElement(callback) { + this.emitter.on('did-remove-style-element', callback); + } + + onDidUpdateStyleElement(callback) { + this.emitter.on('did-update-style-element', callback); + } + + connectedCallback() { + let left; + this.context = + (left = this.getAttribute('context')) != null ? left : undefined; + } + + disconnectedCallback() { + this.subscriptions.dispose(); + this.subscriptions = new CompositeDisposable(); + } + + static get observedAttributes() { + return ['context']; + } + + attributeChangedCallback(attrName) { + if (attrName === 'context') { + return this.contextChanged(); + } + } + + initialize(styleManager) { + this.styleManager = styleManager; + if (this.styleManager == null) { + throw new Error( + 'Must pass a styleManager parameter when initializing a StylesElement' + ); + } + + this.subscriptions.add( + this.styleManager.observeStyleElements(this.styleElementAdded.bind(this)) + ); + this.subscriptions.add( + this.styleManager.onDidRemoveStyleElement( + this.styleElementRemoved.bind(this) + ) + ); + this.subscriptions.add( + this.styleManager.onDidUpdateStyleElement( + this.styleElementUpdated.bind(this) + ) + ); + } + + contextChanged() { + if (this.subscriptions == null) { + return; + } + + for (let child of Array.from(Array.prototype.slice.call(this.children))) { + this.styleElementRemoved(child); + } + this.context = this.getAttribute('context'); + for (let styleElement of Array.from(this.styleManager.getStyleElements())) { + this.styleElementAdded(styleElement); + } + } + + styleElementAdded(styleElement) { + let insertBefore; + if (!this.styleElementMatchesContext(styleElement)) { + return; + } + + const styleElementClone = styleElement.cloneNode(true); + styleElementClone.sourcePath = styleElement.sourcePath; + styleElementClone.context = styleElement.context; + styleElementClone.priority = styleElement.priority; + this.styleElementClonesByOriginalElement.set( + styleElement, + styleElementClone + ); + + const { priority } = styleElement; + if (priority != null) { + for (let child of this.children) { + if (child.priority > priority) { + insertBefore = child; + break; + } + } + } + + this.insertBefore(styleElementClone, insertBefore); + this.emitter.emit('did-add-style-element', styleElementClone); + } + + styleElementRemoved(styleElement) { + let left; + if (!this.styleElementMatchesContext(styleElement)) { + return; + } + + const styleElementClone = + (left = this.styleElementClonesByOriginalElement.get(styleElement)) != + null + ? left + : styleElement; + styleElementClone.remove(); + this.emitter.emit('did-remove-style-element', styleElementClone); + } + + styleElementUpdated(styleElement) { + if (!this.styleElementMatchesContext(styleElement)) { + return; + } + + const styleElementClone = this.styleElementClonesByOriginalElement.get( + styleElement + ); + styleElementClone.textContent = styleElement.textContent; + this.emitter.emit('did-update-style-element', styleElementClone); + } + + styleElementMatchesContext(styleElement) { + return this.context == null || styleElement.context === this.context; + } +} + +window.customElements.define('atom-styles', StylesElement); + +function createStylesElement() { + return document.createElement('atom-styles'); +} + +module.exports = { + createStylesElement +}; diff --git a/src/task.coffee b/src/task.coffee index 4f41cd02e..fa09c69f1 100644 --- a/src/task.coffee +++ b/src/task.coffee @@ -84,23 +84,17 @@ class Task # Routes messages from the child to the appropriate event. handleEvents: -> - # TodoElectronIssue: removeAllListeners() without arguments does not work on electron v3. - # Remove the argument when migrating to electron v4. - @childProcess.removeAllListeners('message') + @childProcess.removeAllListeners() @childProcess.on 'message', ({event, args}) => @emitter.emit(event, args) if @childProcess? # Catch the errors that happened before task-bootstrap. if @childProcess.stdout? - # TodoElectronIssue: removeAllListeners() without arguments does not work on electron v3. - # Remove the argument when migrating to electron v4. - @childProcess.stdout.removeAllListeners('data') + @childProcess.stdout.removeAllListeners() @childProcess.stdout.on 'data', (data) -> console.log data.toString() if @childProcess.stderr? - # TodoElectronIssue: removeAllListeners() without arguments does not work on electron v3. - # Remove the argument when migrating to electron v4. - @childProcess.stderr.removeAllListeners('data') + @childProcess.stderr.removeAllListeners() @childProcess.stderr.on 'data', (data) -> console.error data.toString() # Public: Starts the task. @@ -153,11 +147,9 @@ class Task terminate: -> return false unless @childProcess? - # TodoElectronIssue: removeAllListeners() without arguments does not work on electron v3. - # Remove the argument when migrating to electron v4. - @childProcess.removeAllListeners('message') - @childProcess.stdout?.removeAllListeners('data') - @childProcess.stderr?.removeAllListeners('data') + @childProcess.removeAllListeners() + @childProcess.stdout?.removeAllListeners() + @childProcess.stderr?.removeAllListeners() @childProcess.kill() @childProcess = null diff --git a/src/text-editor-component.js b/src/text-editor-component.js index 1281fa5a5..b00e16afa 100644 --- a/src/text-editor-component.js +++ b/src/text-editor-component.js @@ -67,7 +67,7 @@ module.exports = class TextEditorComponent { } else { if (!TextEditorElement) TextEditorElement = require('./text-editor-element'); - this.element = new TextEditorElement(); + this.element = TextEditorElement.createTextEditorElement(); } this.element.initialize(this); this.virtualNode = $('atom-text-editor'); @@ -306,7 +306,7 @@ module.exports = class TextEditorComponent { this.remeasureAllBlockDecorations = false; const decorations = this.props.model.getDecorations(); - for (var i = 0; i < decorations.length; i++) { + for (let i = 0; i < decorations.length; i++) { const decoration = decorations[i]; const marker = decoration.getMarker(); if (marker.isValid() && decoration.getProperties().type === 'block') { @@ -1656,15 +1656,6 @@ module.exports = class TextEditorComponent { // Called by TextEditorElement so that focus events can be handled before // the element is attached to the DOM. didFocus() { - // This element can be focused from a parent custom element's - // attachedCallback before *its* attachedCallback is fired. This protects - // against that case. - if (!this.attached) this.didAttach(); - - // The element can be focused before the intersection observer detects that - // it has been shown for the first time. If this element is being focused, - // it is necessarily visible, so we call `didShow` to ensure the hidden - // input is rendered before we try to shift focus to it. if (!this.visible) this.didShow(); if (!this.focused) { @@ -1969,8 +1960,12 @@ module.exports = class TextEditorComponent { // On Linux, pasting happens on middle click. A textInput event with the // contents of the selection clipboard will be dispatched by the browser - // automatically on mouseup. - if (platform === 'linux' && this.isInputEnabled()) + // automatically on mouseup if editor.selectionClipboard is set to true. + if ( + platform === 'linux' && + this.isInputEnabled() && + atom.config.get('editor.selectionClipboard') + ) model.insertText(clipboard.readText('selection')); return; } @@ -2174,7 +2169,7 @@ module.exports = class TextEditorComponent { } autoscrollOnMouseDrag({ clientX, clientY }, verticalOnly = false) { - var { + let { top, bottom, left, @@ -4288,7 +4283,7 @@ class LinesTileComponent { } updateLines(oldProps, newProps) { - var { + const { screenLines, tileStartRow, lineDecorations, @@ -4298,20 +4293,20 @@ class LinesTileComponent { lineComponentsByScreenLineId } = newProps; - var oldScreenLines = oldProps.screenLines; - var newScreenLines = screenLines; - var oldScreenLinesEndIndex = oldScreenLines.length; - var newScreenLinesEndIndex = newScreenLines.length; - var oldScreenLineIndex = 0; - var newScreenLineIndex = 0; - var lineComponentIndex = 0; + const oldScreenLines = oldProps.screenLines; + const newScreenLines = screenLines; + const oldScreenLinesEndIndex = oldScreenLines.length; + const newScreenLinesEndIndex = newScreenLines.length; + let oldScreenLineIndex = 0; + let newScreenLineIndex = 0; + let lineComponentIndex = 0; while ( oldScreenLineIndex < oldScreenLinesEndIndex || newScreenLineIndex < newScreenLinesEndIndex ) { - var oldScreenLine = oldScreenLines[oldScreenLineIndex]; - var newScreenLine = newScreenLines[newScreenLineIndex]; + const oldScreenLine = oldScreenLines[oldScreenLineIndex]; + const newScreenLine = newScreenLines[newScreenLineIndex]; if (oldScreenLineIndex >= oldScreenLinesEndIndex) { var newScreenLineComponent = new LineComponent({ @@ -4334,7 +4329,7 @@ class LinesTileComponent { oldScreenLineIndex++; } else if (oldScreenLine === newScreenLine) { - var lineComponent = this.lineComponents[lineComponentIndex]; + const lineComponent = this.lineComponents[lineComponentIndex]; lineComponent.update({ screenRow: tileStartRow + newScreenLineIndex, lineDecoration: lineDecorations[newScreenLineIndex], @@ -4345,17 +4340,17 @@ class LinesTileComponent { newScreenLineIndex++; lineComponentIndex++; } else { - var oldScreenLineIndexInNewScreenLines = newScreenLines.indexOf( + const oldScreenLineIndexInNewScreenLines = newScreenLines.indexOf( oldScreenLine ); - var newScreenLineIndexInOldScreenLines = oldScreenLines.indexOf( + const newScreenLineIndexInOldScreenLines = oldScreenLines.indexOf( newScreenLine ); if ( newScreenLineIndex < oldScreenLineIndexInNewScreenLines && oldScreenLineIndexInNewScreenLines < newScreenLinesEndIndex ) { - var newScreenLineComponents = []; + const newScreenLineComponents = []; while (newScreenLineIndex < oldScreenLineIndexInNewScreenLines) { // eslint-disable-next-line no-redeclare var newScreenLineComponent = new LineComponent({ @@ -4394,7 +4389,9 @@ class LinesTileComponent { oldScreenLineIndex++; } } else { - var oldScreenLineComponent = this.lineComponents[lineComponentIndex]; + const oldScreenLineComponent = this.lineComponents[ + lineComponentIndex + ]; // eslint-disable-next-line no-redeclare var newScreenLineComponent = new LineComponent({ screenLine: newScreenLines[newScreenLineIndex], @@ -4421,13 +4418,13 @@ class LinesTileComponent { } getFirstElementForScreenLine(oldProps, screenLine) { - var blockDecorations = oldProps.blockDecorations + const blockDecorations = oldProps.blockDecorations ? oldProps.blockDecorations.get(screenLine.id) : null; if (blockDecorations) { - var blockDecorationElementsBeforeOldScreenLine = []; + const blockDecorationElementsBeforeOldScreenLine = []; for (let i = 0; i < blockDecorations.length; i++) { - var decoration = blockDecorations[i]; + const decoration = blockDecorations[i]; if (decoration.position !== 'after') { blockDecorationElementsBeforeOldScreenLine.push( TextEditor.viewForItem(decoration.item) @@ -4440,7 +4437,7 @@ class LinesTileComponent { i < blockDecorationElementsBeforeOldScreenLine.length; i++ ) { - var blockDecorationElement = + const blockDecorationElement = blockDecorationElementsBeforeOldScreenLine[i]; if ( !blockDecorationElementsBeforeOldScreenLine.includes( @@ -4456,19 +4453,19 @@ class LinesTileComponent { } updateBlockDecorations(oldProps, newProps) { - var { blockDecorations, lineComponentsByScreenLineId } = newProps; + const { blockDecorations, lineComponentsByScreenLineId } = newProps; if (oldProps.blockDecorations) { oldProps.blockDecorations.forEach((oldDecorations, screenLineId) => { - var newDecorations = newProps.blockDecorations + const newDecorations = newProps.blockDecorations ? newProps.blockDecorations.get(screenLineId) : null; - for (var i = 0; i < oldDecorations.length; i++) { - var oldDecoration = oldDecorations[i]; + for (let i = 0; i < oldDecorations.length; i++) { + const oldDecoration = oldDecorations[i]; if (newDecorations && newDecorations.includes(oldDecoration)) continue; - var element = TextEditor.viewForItem(oldDecoration.item); + const element = TextEditor.viewForItem(oldDecoration.item); if (element.parentElement !== this.element) continue; element.remove(); @@ -5130,11 +5127,11 @@ class NodePool { } getElement(type, className, style) { - var element; - var elementsByDepth = this.elementsByType[type]; + let element; + const elementsByDepth = this.elementsByType[type]; if (elementsByDepth) { while (elementsByDepth.length > 0) { - var elements = elementsByDepth[elementsByDepth.length - 1]; + const elements = elementsByDepth[elementsByDepth.length - 1]; if (elements && elements.length > 0) { element = elements.pop(); if (elements.length === 0) elementsByDepth.pop(); @@ -5155,7 +5152,7 @@ class NodePool { while (element.firstChild) element.firstChild.remove(); return element; } else { - var newElement = document.createElement(type); + const newElement = document.createElement(type); if (className) newElement.className = className; if (style) Object.assign(newElement.style, style); return newElement; @@ -5164,7 +5161,7 @@ class NodePool { getTextNode(text) { if (this.textNodes.length > 0) { - var node = this.textNodes.pop(); + const node = this.textNodes.pop(); node.textContent = text; return node; } else { @@ -5173,24 +5170,24 @@ class NodePool { } release(node, depth = 0) { - var { nodeName } = node; + const { nodeName } = node; if (nodeName === '#text') { this.textNodes.push(node); } else { - var elementsByDepth = this.elementsByType[nodeName]; + let elementsByDepth = this.elementsByType[nodeName]; if (!elementsByDepth) { elementsByDepth = []; this.elementsByType[nodeName] = elementsByDepth; } - var elements = elementsByDepth[depth]; + let elements = elementsByDepth[depth]; if (!elements) { elements = []; elementsByDepth[depth] = elements; } elements.push(node); - for (var i = 0; i < node.childNodes.length; i++) { + for (let i = 0; i < node.childNodes.length; i++) { this.release(node.childNodes[i], depth + 1); } } diff --git a/src/text-editor-element.js b/src/text-editor-element.js index 419767bd0..0ce67f7e6 100644 --- a/src/text-editor-element.js +++ b/src/text-editor-element.js @@ -29,7 +29,8 @@ class TextEditorElement extends HTMLElement { return this; } - createdCallback() { + constructor() { + super(); this.emitter = new Emitter(); this.initialText = this.textContent; if (this.tabIndex == null) this.tabIndex = -1; @@ -39,16 +40,20 @@ class TextEditorElement extends HTMLElement { this.addEventListener('blur', event => this.getComponent().didBlur(event)); } - attachedCallback() { + connectedCallback() { this.getComponent().didAttach(); this.emitter.emit('did-attach'); } - detachedCallback() { + disconnectedCallback() { this.emitter.emit('did-detach'); this.getComponent().didDetach(); } + static get observedAttributes() { + return ['mini', 'placeholder-text', 'gutter-hidden', 'readonly']; + } + attributeChangedCallback(name, oldValue, newValue) { if (this.component) { switch (name) { @@ -352,8 +357,12 @@ class TextEditorElement extends HTMLElement { getFirstVisibleScreenColumn() { return this.getModel().getFirstVisibleScreenColumn(); } + + static createTextEditorElement() { + return document.createElement('atom-text-editor'); + } } -module.exports = document.registerElement('atom-text-editor', { - prototype: TextEditorElement.prototype -}); +window.customElements.define('atom-text-editor', TextEditorElement); + +module.exports = TextEditorElement; diff --git a/src/text-editor-registry.js b/src/text-editor-registry.js index ba62169a2..b5264fb5d 100644 --- a/src/text-editor-registry.js +++ b/src/text-editor-registry.js @@ -110,11 +110,33 @@ module.exports = class TextEditorRegistry { // // Returns a {Boolean} indicating whether the editor was successfully removed. remove(editor) { - var removed = this.editors.delete(editor); + const removed = this.editors.delete(editor); editor.registered = false; return removed; } + // Gets the currently active text editor. + // + // Returns the currently active text editor, or `null` if there is none. + getActiveTextEditor() { + for (let ed of this.editors) { + // fast path, works as long as there's a shadow DOM inside the text editor + if (ed.getElement() === document.activeElement) { + return ed; + } else { + let editorElement = ed.getElement(); + let current = document.activeElement; + while (current) { + if (current === editorElement) { + return ed; + } + current = current.parentNode; + } + } + } + return null; + } + // Invoke the given callback with all the current and future registered // `TextEditors`. // diff --git a/src/text-editor.js b/src/text-editor.js index 7debe33ce..ed6b0e68f 100644 --- a/src/text-editor.js +++ b/src/text-editor.js @@ -4578,10 +4578,20 @@ module.exports = class TextEditor { ); } - bufferRangeForScopeAtPosition(scopeSelector, position) { + // Extended: Get the range in buffer coordinates of all tokens surrounding the + // given position in buffer coordinates that match the given scope selector. + // + // For example, if you wanted to find the string surrounding the cursor, you + // could call `editor.bufferRangeForScopeAtPosition(".string.quoted", this.getCursorBufferPosition())`. + // + // * `scopeSelector` {String} selector. e.g. `'.source.ruby'` + // * `bufferPosition` A {Point} or {Array} of [row, column] + // + // Returns a {Range}. + bufferRangeForScopeAtPosition(scopeSelector, bufferPosition) { return this.buffer .getLanguageMode() - .bufferRangeForScopeAtPosition(scopeSelector, position); + .bufferRangeForScopeAtPosition(scopeSelector, bufferPosition); } // Extended: Determine if the given row is entirely a comment diff --git a/src/text-mate-language-mode.js b/src/text-mate-language-mode.js index 8f7977e3e..13d5ed13f 100644 --- a/src/text-mate-language-mode.js +++ b/src/text-mate-language-mode.js @@ -70,9 +70,7 @@ class TextMateLanguageMode { getNonWordCharacters(position) { const scope = this.scopeDescriptorForPosition(position); - const rawValue = this.config.getRawValue('editor.nonWordCharacters'); - const scopedValue = this.config.get('editor.nonWordCharacters', { scope }); - return `${scopedValue}${rawValue}`; + return this.config.get('editor.nonWordCharacters', { scope }); } /* @@ -331,7 +329,7 @@ class TextMateLanguageMode { let rowsRemaining = this.chunkSize; while (this.firstInvalidRow() != null && rowsRemaining > 0) { - var endRow, filledRegion; + let endRow, filledRegion; const startRow = this.invalidRows.shift(); const lastRow = this.buffer.getLastRow(); if (startRow > lastRow) continue; diff --git a/src/tooltip.js b/src/tooltip.js index 57d2e35e6..3d59f8036 100644 --- a/src/tooltip.js +++ b/src/tooltip.js @@ -7,9 +7,9 @@ const listen = require('./delegated-listener'); // This tooltip class is derived from Bootstrap 3, but modified to not require // jQuery, which is an expensive dependency we want to eliminate. -var followThroughTimer = null; +let followThroughTimer = null; -var Tooltip = function(element, options, viewRegistry) { +const Tooltip = function(element, options, viewRegistry) { this.options = null; this.enabled = null; this.timeout = null; @@ -66,9 +66,9 @@ Tooltip.prototype.init = function(element, options) { ); } - var triggers = this.options.trigger.split(' '); + const triggers = this.options.trigger.split(' '); - for (var i = triggers.length; i--; ) { + for (let i = triggers.length; i--; ) { var trigger = triggers[i]; if (trigger === 'click') { @@ -91,7 +91,7 @@ Tooltip.prototype.init = function(element, options) { } else if (trigger === 'manual') { this.show(); } else { - var eventIn, eventOut; + let eventIn, eventOut; if (trigger === 'hover') { this.hideOnKeydownOutsideOfTooltip = () => this.hide(); @@ -175,12 +175,12 @@ Tooltip.prototype.getOptions = function(options) { }; Tooltip.prototype.getDelegateOptions = function() { - var options = {}; - var defaults = this.getDefaults(); + const options = {}; + const defaults = this.getDefaults(); if (this._options) { - for (var key of Object.getOwnPropertyNames(this._options)) { - var value = this._options[key]; + for (const key of Object.getOwnPropertyNames(this._options)) { + const value = this._options[key]; if (defaults[key] !== value) options[key] = value; } } @@ -223,7 +223,7 @@ Tooltip.prototype.enter = function(event) { }; Tooltip.prototype.isInStateTrue = function() { - for (var key in this.inState) { + for (const key in this.inState) { if (this.inState[key]) return true; } @@ -272,9 +272,9 @@ Tooltip.prototype.show = function() { ); } - var tip = this.getTooltipElement(); + const tip = this.getTooltipElement(); this.startObservingMutations(); - var tipId = this.getUID('tooltip'); + const tipId = this.getUID('tooltip'); this.setContent(); tip.setAttribute('id', tipId); @@ -282,13 +282,13 @@ Tooltip.prototype.show = function() { if (this.options.animation) tip.classList.add('fade'); - var placement = + let placement = typeof this.options.placement === 'function' ? this.options.placement.call(this, tip, this.element) : this.options.placement; - var autoToken = /\s?auto?\s?/i; - var autoPlace = autoToken.test(placement); + const autoToken = /\s?auto?\s?/i; + const autoPlace = autoToken.test(placement); if (autoPlace) placement = placement.replace(autoToken, '') || 'top'; tip.remove(); @@ -299,13 +299,13 @@ Tooltip.prototype.show = function() { document.body.appendChild(tip); - var pos = this.element.getBoundingClientRect(); - var actualWidth = tip.offsetWidth; - var actualHeight = tip.offsetHeight; + const pos = this.element.getBoundingClientRect(); + const actualWidth = tip.offsetWidth; + const actualHeight = tip.offsetHeight; if (autoPlace) { - var orgPlacement = placement; - var viewportDim = this.viewport.getBoundingClientRect(); + const orgPlacement = placement; + const viewportDim = this.viewport.getBoundingClientRect(); placement = placement === 'bottom' && pos.bottom + actualHeight > viewportDim.bottom @@ -322,7 +322,7 @@ Tooltip.prototype.show = function() { tip.classList.add(placement); } - var calculatedOffset = this.getCalculatedOffset( + const calculatedOffset = this.getCalculatedOffset( placement, pos, actualWidth, @@ -331,7 +331,7 @@ Tooltip.prototype.show = function() { this.applyPlacement(calculatedOffset, placement); - var prevHoverState = this.hoverState; + const prevHoverState = this.hoverState; this.hoverState = null; if (prevHoverState === 'out') this.leave(); @@ -339,15 +339,15 @@ Tooltip.prototype.show = function() { }; Tooltip.prototype.applyPlacement = function(offset, placement) { - var tip = this.getTooltipElement(); + const tip = this.getTooltipElement(); - var width = tip.offsetWidth; - var height = tip.offsetHeight; + const width = tip.offsetWidth; + const height = tip.offsetHeight; // manually read margins because getBoundingClientRect includes difference - var computedStyle = window.getComputedStyle(tip); - var marginTop = parseInt(computedStyle.marginTop, 10); - var marginLeft = parseInt(computedStyle.marginLeft, 10); + const computedStyle = window.getComputedStyle(tip); + const marginTop = parseInt(computedStyle.marginTop, 10); + const marginLeft = parseInt(computedStyle.marginLeft, 10); offset.top += marginTop; offset.left += marginLeft; @@ -358,14 +358,14 @@ Tooltip.prototype.applyPlacement = function(offset, placement) { tip.classList.add('in'); // check to see if placing tip in new offset caused the tip to resize itself - var actualWidth = tip.offsetWidth; - var actualHeight = tip.offsetHeight; + const actualWidth = tip.offsetWidth; + const actualHeight = tip.offsetHeight; if (placement === 'top' && actualHeight !== height) { offset.top = offset.top + height - actualHeight; } - var delta = this.getViewportAdjustedDelta( + const delta = this.getViewportAdjustedDelta( placement, offset, actualWidth, @@ -375,11 +375,11 @@ Tooltip.prototype.applyPlacement = function(offset, placement) { if (delta.left) offset.left += delta.left; else offset.top += delta.top; - var isVertical = /top|bottom/.test(placement); - var arrowDelta = isVertical + const isVertical = /top|bottom/.test(placement); + const arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight; - var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'; + const arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'; tip.style.top = offset.top + 'px'; tip.style.left = offset.left + 'px'; @@ -388,8 +388,8 @@ Tooltip.prototype.applyPlacement = function(offset, placement) { }; Tooltip.prototype.replaceArrow = function(delta, dimension, isVertical) { - var arrow = this.getArrowElement(); - var amount = 50 * (1 - delta / dimension) + '%'; + const arrow = this.getArrowElement(); + const amount = 50 * (1 - delta / dimension) + '%'; if (isVertical) { arrow.style.left = amount; @@ -401,17 +401,17 @@ Tooltip.prototype.replaceArrow = function(delta, dimension, isVertical) { }; Tooltip.prototype.setContent = function() { - var tip = this.getTooltipElement(); + const tip = this.getTooltipElement(); if (this.options.class) { tip.classList.add(this.options.class); } - var inner = tip.querySelector('.tooltip-inner'); + const inner = tip.querySelector('.tooltip-inner'); if (this.options.item) { inner.appendChild(this.viewRegistry.getView(this.options.item)); } else { - var title = this.getTitle(); + const title = this.getTitle(); if (this.options.html) { inner.innerHTML = title; } else { @@ -506,16 +506,16 @@ Tooltip.prototype.getViewportAdjustedDelta = function( actualWidth, actualHeight ) { - var delta = { top: 0, left: 0 }; + const delta = { top: 0, left: 0 }; if (!this.viewport) return delta; - var viewportPadding = + const viewportPadding = (this.options.viewport && this.options.viewport.padding) || 0; - var viewportDimensions = this.viewport.getBoundingClientRect(); + const viewportDimensions = this.viewport.getBoundingClientRect(); if (/right|left/.test(placement)) { - var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll; - var bottomEdgeOffset = + const topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll; + const bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight; if (topEdgeOffset < viewportDimensions.top) { // top overflow @@ -529,8 +529,8 @@ Tooltip.prototype.getViewportAdjustedDelta = function( viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset; } } else { - var leftEdgeOffset = pos.left - viewportPadding; - var rightEdgeOffset = pos.left + viewportPadding + actualWidth; + const leftEdgeOffset = pos.left - viewportPadding; + const rightEdgeOffset = pos.left + viewportPadding + actualWidth; if (leftEdgeOffset < viewportDimensions.left) { // left overflow delta.left = viewportDimensions.left - leftEdgeOffset; @@ -545,7 +545,7 @@ Tooltip.prototype.getViewportAdjustedDelta = function( }; Tooltip.prototype.getTitle = function() { - var title = this.element.getAttribute('data-original-title'); + const title = this.element.getAttribute('data-original-title'); if (title) { return title; } else { @@ -617,7 +617,7 @@ Tooltip.prototype.destroy = function() { }; Tooltip.prototype.getDelegateComponent = function(element) { - var component = tooltipComponentsByElement.get(element); + let component = tooltipComponentsByElement.get(element); if (!component) { component = new Tooltip( element, @@ -630,26 +630,26 @@ Tooltip.prototype.getDelegateComponent = function(element) { }; Tooltip.prototype.recalculatePosition = function() { - var tip = this.getTooltipElement(); + const tip = this.getTooltipElement(); - var placement = + let placement = typeof this.options.placement === 'function' ? this.options.placement.call(this, tip, this.element) : this.options.placement; - var autoToken = /\s?auto?\s?/i; - var autoPlace = autoToken.test(placement); + const autoToken = /\s?auto?\s?/i; + const autoPlace = autoToken.test(placement); if (autoPlace) placement = placement.replace(autoToken, '') || 'top'; tip.classList.add(placement); - var pos = this.element.getBoundingClientRect(); - var actualWidth = tip.offsetWidth; - var actualHeight = tip.offsetHeight; + const pos = this.element.getBoundingClientRect(); + const actualWidth = tip.offsetWidth; + const actualHeight = tip.offsetHeight; if (autoPlace) { - var orgPlacement = placement; - var viewportDim = this.viewport.getBoundingClientRect(); + const orgPlacement = placement; + const viewportDim = this.viewport.getBoundingClientRect(); placement = placement === 'bottom' && pos.bottom + actualHeight > viewportDim.bottom @@ -666,7 +666,7 @@ Tooltip.prototype.recalculatePosition = function() { tip.classList.add(placement); } - var calculatedOffset = this.getCalculatedOffset( + const calculatedOffset = this.getCalculatedOffset( placement, pos, actualWidth, @@ -676,11 +676,11 @@ Tooltip.prototype.recalculatePosition = function() { }; function extend() { - var args = Array.prototype.slice.apply(arguments); - var target = args.shift(); - var source = args.shift(); + const args = Array.prototype.slice.apply(arguments); + const target = args.shift(); + let source = args.shift(); while (source) { - for (var key of Object.getOwnPropertyNames(source)) { + for (const key of Object.getOwnPropertyNames(source)) { target[key] = source[key]; } source = args.shift(); diff --git a/src/tree-indenter.js b/src/tree-indenter.js new file mode 100644 index 000000000..c536edd48 --- /dev/null +++ b/src/tree-indenter.js @@ -0,0 +1,155 @@ +// const log = console.debug // in dev +const log = () => {}; // in production + +module.exports = class TreeIndenter { + constructor(languageMode, scopes = undefined) { + this.languageMode = languageMode; + this.scopes = + scopes || + languageMode.config.get('editor.scopes', { + scope: this.languageMode.rootScopeDescriptor + }); + log('[TreeIndenter] constructor', this.scopes); + } + + /** tree indenter is configured for this language */ + get isConfigured() { + return !!this.scopes; + } + + // Given a position, walk up the syntax tree, to find the highest level + // node that still starts here. This is to identify the column where this + // node (e.g., an HTML closing tag) ends. + _getHighestSyntaxNodeAtPosition(row, column = null) { + if (column == null) { + // Find the first character on the row that is not whitespace + 1 + column = this.languageMode.buffer.lineForRow(row).search(/\S/); + } + + let syntaxNode; + if (column >= 0) { + syntaxNode = this.languageMode.getSyntaxNodeAtPosition({ row, column }); + while ( + syntaxNode && + syntaxNode.parent && + syntaxNode.parent.startPosition.row === syntaxNode.startPosition.row && + syntaxNode.parent.endPosition.row === syntaxNode.startPosition.row && + syntaxNode.parent.startPosition.column === + syntaxNode.startPosition.column + ) { + syntaxNode = syntaxNode.parent; + } + return syntaxNode; + } + } + + /** Walk up the tree. Everytime we meet a scope type, check whether we + are coming from the first (resp. last) child. If so, we are opening + (resp. closing) that scope, i.e., do not count it. Otherwise, add 1. + + This is the core function. + + It might make more sense to reverse the direction of this walk, i.e., + go from root to leaf instead. + */ + _treeWalk(node, lastScope = null) { + if (node == null || node.parent == null) { + return 0; + } else { + let increment = 0; + + const notFirstOrLastSibling = + node.previousSibling != null && node.nextSibling != null; + + const isScope = this.scopes.indent[node.parent.type]; + notFirstOrLastSibling && isScope && increment++; + + const isScope2 = this.scopes.indentExceptFirst[node.parent.type]; + !increment && isScope2 && node.previousSibling != null && increment++; + + const isScope3 = this.scopes.indentExceptFirstOrBlock[node.parent.type]; + !increment && isScope3 && node.previousSibling != null && increment++; + + // apply current row, single line, type-based rules, e.g., 'else' or 'private:' + let typeDent = 0; + this.scopes.types.indent[node.type] && typeDent++; + this.scopes.types.outdent[node.type] && increment && typeDent--; + increment += typeDent; + + // check whether the last (lower) indentation happened due to a scope that + // started on the same row and ends directly before this. + if ( + lastScope && + increment > 0 && + // previous (lower) scope was a two-sided scope, reduce if starts on + // same row and ends right before + // TODO: this currently only works for scopes that have a single-character + // closing delimiter (like statement_blocks, but not HTML, for instance). + ((node.parent.startPosition.row === lastScope.node.startPosition.row && + node.parent.endIndex <= lastScope.node.endIndex + 1) || + // or this is a special scope (like if, while) and it's ends coincide + (isScope3 && + (lastScope.node.endIndex === node.endIndex || + node.parent.endIndex === node.endIndex))) + ) { + log('ignoring repeat', node.parent.type, lastScope); + increment = 0; + } else { + lastScope && + log( + node.parent.startPosition.row, + lastScope.node.startPosition.row, + node.parent.endIndex, + lastScope.node.endIndex, + isScope3, + node.endIndex + ); + } + + log('treewalk', { + node, + notFirstOrLastSibling, + type: node.parent.type, + increment + }); + const newLastScope = + isScope || isScope2 ? { node: node.parent } : lastScope; + return this._treeWalk(node.parent, newLastScope) + increment; + } + } + + suggestedIndentForBufferRow(row, tabLength, options) { + // get current indentation for row + const line = this.languageMode.buffer.lineForRow(row); + const currentIndentation = this.languageMode.indentLevelForLine( + line, + tabLength + ); + + const syntaxNode = this._getHighestSyntaxNodeAtPosition(row); + if (!syntaxNode) { + const previousRow = Math.max(row - 1, 0); + const previousIndentation = this.languageMode.indentLevelForLine( + this.languageMode.indentLevelForLine(previousRow), + tabLength + ); + return previousIndentation; + } + let indentation = this._treeWalk(syntaxNode); + + // Special case for comments + if ( + (syntaxNode.type === 'comment' || syntaxNode.type === 'description') && + syntaxNode.startPosition.row < row && + syntaxNode.endPosition.row > row + ) { + indentation += 1; + } + + if (options && options.preserveLeadingWhitespace) { + indentation -= currentIndentation; + } + + return indentation; + } +}; diff --git a/src/tree-sitter-language-mode.js b/src/tree-sitter-language-mode.js index cf296c250..3ffe4038e 100644 --- a/src/tree-sitter-language-mode.js +++ b/src/tree-sitter-language-mode.js @@ -7,6 +7,7 @@ const Token = require('./token'); const TokenizedLine = require('./tokenized-line'); const TextMateLanguageMode = require('./text-mate-language-mode'); const { matcherForSelector } = require('./selectors'); +const TreeIndenter = require('./tree-indenter'); let nextId = 0; const MAX_RANGE = new Range(Point.ZERO, Point.INFINITY).freeze(); @@ -31,8 +32,7 @@ class TreeSitterLanguageMode { this.grammar = grammar; this.config = config; this.grammarRegistry = grammars; - this.parser = new Parser(); - this.rootLanguageLayer = new LanguageLayer(this, grammar, 0); + this.rootLanguageLayer = new LanguageLayer(null, this, grammar, 0); this.injectionsMarkerLayer = buffer.addMarkerLayer(); if (syncTimeoutMicros != null) { @@ -79,7 +79,6 @@ class TreeSitterLanguageMode { destroy() { this.injectionsMarkerLayer.destroy(); this.rootLanguageLayer = null; - this.parser = null; } getLanguageId() { @@ -145,7 +144,7 @@ class TreeSitterLanguageMode { */ buildHighlightIterator() { - if (!this.rootLanguageLayer) return new NullHighlightIterator(); + if (!this.rootLanguageLayer) return new NullLanguageModeHighlightIterator(); return new HighlightIterator(this); } @@ -196,13 +195,26 @@ class TreeSitterLanguageMode { } suggestedIndentForBufferRow(row, tabLength, options) { - return this._suggestedIndentForLineWithScopeAtBufferRow( - row, - this.buffer.lineForRow(row), - this.rootScopeDescriptor, - tabLength, - options - ); + if (!this.treeIndenter) { + this.treeIndenter = new TreeIndenter(this); + } + + if (this.treeIndenter.isConfigured) { + const indent = this.treeIndenter.suggestedIndentForBufferRow( + row, + tabLength, + options + ); + return indent; + } else { + return this._suggestedIndentForLineWithScopeAtBufferRow( + row, + this.buffer.lineForRow(row), + this.rootScopeDescriptor, + tabLength, + options + ); + } } indentLevelForLine(line, tabLength) { @@ -637,7 +649,8 @@ class TreeSitterLanguageMode { } class LanguageLayer { - constructor(languageMode, grammar, depth) { + constructor(marker, languageMode, grammar, depth) { + this.marker = marker; this.languageMode = languageMode; this.grammar = grammar; this.tree = null; @@ -650,7 +663,7 @@ class LanguageLayer { if (this.tree) { return new LayerHighlightIterator(this, this.tree.walk()); } else { - return new NullHighlightIterator(); + return new NullLayerHighlightIterator(); } } @@ -687,10 +700,12 @@ class LanguageLayer { } destroy() { + this.tree = null; + this.destroyed = true; + this.marker.destroy(); for (const marker of this.languageMode.injectionsMarkerLayer.getMarkers()) { if (marker.parentLanguageLayer === this) { marker.languageLayer.destroy(); - marker.destroy(); } } } @@ -726,8 +741,9 @@ class LanguageLayer { if (nodeRangeSet) { includedRanges = nodeRangeSet.getRanges(this.languageMode.buffer); if (includedRanges.length === 0) { - this.tree = null; - this.destroyed = true; + const range = this.marker.getRange(); + this.destroy(); + this.languageMode.emitRangeUpdate(range); return; } } @@ -883,6 +899,7 @@ class LanguageLayer { injectionRange ); marker.languageLayer = new LanguageLayer( + marker, this.languageMode, grammar, this.depth + 1 @@ -904,9 +921,8 @@ class LanguageLayer { for (const marker of existingInjectionMarkers) { if (!markersToUpdate.has(marker)) { - marker.languageLayer.destroy(); this.languageMode.emitRangeUpdate(marker.getRange()); - marker.destroy(); + marker.languageLayer.destroy(); } } @@ -1333,7 +1349,7 @@ class NodeCursorAdaptor { } } -class NullHighlightIterator { +class NullLanguageModeHighlightIterator { seek() { return []; } @@ -1352,6 +1368,25 @@ class NullHighlightIterator { } } +class NullLayerHighlightIterator { + seek() { + return null; + } + compare() { + return 1; + } + moveToSuccessor() {} + getPosition() { + return Point.INFINITY; + } + getOpenScopeIds() { + return []; + } + getCloseScopeIds() { + return []; + } +} + class NodeRangeSet { constructor(previous, nodes, newlinesBetween, includeChildren) { this.previous = previous; diff --git a/src/typescript.js b/src/typescript.js index f10410ea1..2995224b1 100644 --- a/src/typescript.js +++ b/src/typescript.js @@ -1,17 +1,17 @@ 'use strict'; -var _ = require('underscore-plus'); -var crypto = require('crypto'); -var path = require('path'); +const _ = require('underscore-plus'); +const crypto = require('crypto'); +const path = require('path'); -var defaultOptions = { +const defaultOptions = { target: 1, module: 'commonjs', sourceMap: true }; -var TypeScriptSimple = null; -var typescriptVersionDir = null; +let TypeScriptSimple = null; +let typescriptVersionDir = null; exports.shouldCompile = function() { return true; @@ -19,7 +19,7 @@ exports.shouldCompile = function() { exports.getCachePath = function(sourceCode) { if (typescriptVersionDir == null) { - var version = require('typescript-simple/package.json').version; + const version = require('typescript-simple/package.json').version; typescriptVersionDir = path.join( 'ts', createVersionAndOptionsDigest(version, defaultOptions) @@ -44,7 +44,7 @@ exports.compile = function(sourceCode, filePath) { filePath = 'file:///' + path.resolve(filePath).replace(/\\/g, '/'); } - var options = _.defaults({ filename: filePath }, defaultOptions); + const options = _.defaults({ filename: filePath }, defaultOptions); return new TypeScriptSimple(options, false).compile(sourceCode, filePath); }; diff --git a/src/update-process-env.js b/src/update-process-env.js index cc2e444c2..21ea4552d 100644 --- a/src/update-process-env.js +++ b/src/update-process-env.js @@ -10,6 +10,12 @@ const ENVIRONMENT_VARIABLES_TO_PRESERVE = new Set([ const PLATFORMS_KNOWN_TO_WORK = new Set(['darwin', 'linux']); +// Shell command that returns env var=value lines separated by \0s so that +// newlines are handled properly. Note: need to use %c to inject the \0s +// to work with some non GNU awks. +const ENV_COMMAND = + 'command awk \'BEGIN{for(v in ENVIRON) printf("%s=%s%c", v, ENVIRON[v], 0)}\''; + async function updateProcessEnv(launchEnv) { let envToAssign; if (launchEnv) { @@ -78,7 +84,7 @@ async function getEnvFromShell(env) { setTimeout(() => { cleanup(); }, 5000); - child = childProcess.spawn(env.SHELL, ['-ilc', 'command env'], { + child = childProcess.spawn(env.SHELL, ['-ilc', ENV_COMMAND], { encoding: 'utf8', detached: true, stdio: ['ignore', 'pipe', process.stderr] @@ -109,7 +115,9 @@ async function getEnvFromShell(env) { console.log( 'warning: ' + env.SHELL + - ' -ilc "command env" failed with signal (' + + ' -ilc "' + + ENV_COMMAND + + '" failed with signal (' + error.signal + ')' ); @@ -121,22 +129,13 @@ async function getEnvFromShell(env) { } let result = {}; - let skip = false; - for (let line of stdout.split('\n')) { - // start of shell function definition: skip full definition - if (line.includes('=() {')) { - skip = true; - } - if (!skip && line.includes('=')) { + for (let line of stdout.split('\0')) { + if (line.includes('=')) { let components = line.split('='); let key = components.shift(); let value = components.join('='); result[key] = value; } - // end of shell function definition - if (line === '}') { - skip = false; - } } return result; } diff --git a/src/view-registry.js b/src/view-registry.js index 5f70d7d37..698dbc325 100644 --- a/src/view-registry.js +++ b/src/view-registry.js @@ -259,13 +259,13 @@ module.exports = class ViewRegistry { this.nextUpdatePromise = null; this.resolveNextUpdatePromise = null; - var writer = this.documentWriters.shift(); + let writer = this.documentWriters.shift(); while (writer) { writer(); writer = this.documentWriters.shift(); } - var reader = this.documentReaders.shift(); + let reader = this.documentReaders.shift(); this.documentReadInProgress = true; while (reader) { reader(); diff --git a/src/workspace-element.js b/src/workspace-element.js index 155043e2b..9400ef028 100644 --- a/src/workspace-element.js +++ b/src/workspace-element.js @@ -8,13 +8,13 @@ const scrollbarStyle = require('scrollbar-style'); const _ = require('underscore-plus'); class WorkspaceElement extends HTMLElement { - attachedCallback() { + connectedCallback() { this.focus(); this.htmlElement = document.querySelector('html'); this.htmlElement.addEventListener('mouseleave', this.handleCenterLeave); } - detachedCallback() { + disconnectedCallback() { this.subscriptions.dispose(); this.htmlElement.removeEventListener('mouseleave', this.handleCenterLeave); } @@ -466,10 +466,6 @@ class WorkspaceElement extends HTMLElement { } } -module.exports = document.registerElement('atom-workspace', { - prototype: WorkspaceElement.prototype -}); - function isTab(element) { let el = element; while (el != null) { @@ -478,3 +474,13 @@ function isTab(element) { } return false; } + +window.customElements.define('atom-workspace', WorkspaceElement); + +function createWorkspaceElement() { + return document.createElement('atom-workspace'); +} + +module.exports = { + createWorkspaceElement +}; diff --git a/src/workspace.js b/src/workspace.js index 88b911972..3b040c3b0 100644 --- a/src/workspace.js +++ b/src/workspace.js @@ -15,7 +15,7 @@ const Panel = require('./panel'); const PanelContainer = require('./panel-container'); const Task = require('./task'); const WorkspaceCenter = require('./workspace-center'); -const WorkspaceElement = require('./workspace-element'); +const { createWorkspaceElement } = require('./workspace-element'); const STOPPED_CHANGING_ACTIVE_PANE_ITEM_DELAY = 100; const ALL_LOCATIONS = ['center', 'left', 'right', 'bottom']; @@ -267,7 +267,7 @@ module.exports = class Workspace extends Model { getElement() { if (!this.element) { - this.element = new WorkspaceElement().initialize(this, { + this.element = createWorkspaceElement().initialize(this, { config: this.config, project: this.project, viewRegistry: this.viewRegistry, @@ -1547,12 +1547,12 @@ module.exports = class Workspace extends Model { // Essential: Get the active {Pane}'s active item. // - // Returns an pane item {Object}. + // Returns a pane item {Object}. getActivePaneItem() { return this.getActivePaneContainer().getActivePaneItem(); } - // Essential: Get all text editors in the workspace. + // Essential: Get all text editors in the workspace, if they are pane items. // // Returns an {Array} of {TextEditor}s. getTextEditors() { diff --git a/static/core-ui/text-editor.less b/static/core-ui/text-editor.less index aea0f70bd..8106db9eb 100644 --- a/static/core-ui/text-editor.less +++ b/static/core-ui/text-editor.less @@ -9,7 +9,7 @@ } atom-text-editor { - contain: @contain_but_size; + contain: @contain_except_size; display: flex; cursor: text; font-family: var(--editor-font-family); @@ -17,14 +17,14 @@ atom-text-editor { line-height: var(--editor-line-height); .gutter-container { - contain: @contain_but_size; + contain: @contain_except_size; width: min-content; background-color: inherit; cursor: default; } .gutter { - contain: @contain_but_size; + contain: @contain_except_size; overflow: hidden; z-index: 0; text-align: right; @@ -36,7 +36,7 @@ atom-text-editor { .gutter:hover { .line-number.foldable .icon-right { - contain: @contain_but_layout_size; + contain: @contain_except_layout_size; visibility: visible; &:hover { @@ -47,7 +47,7 @@ atom-text-editor { .gutter, .gutter:hover { .line-number.folded .icon-right { - contain: @contain_but_layout_size; + contain: @contain_except_layout_size; .octicon(chevron-right, 0.8em); visibility: visible; @@ -60,20 +60,20 @@ atom-text-editor { } .line-numbers { - contain: @contain_but_size; + contain: @contain_except_size; width: max-content; background-color: inherit; } .line-number { - contain: @contain_but_size; + contain: @contain_except_size; padding-left: .5em; white-space: nowrap; opacity: 0.6; position: relative; .icon-right { - contain: @contain_but_layout_size; + contain: @contain_except_layout_size; .octicon(chevron-down, 0.8em); display: inline-block; visibility: hidden; @@ -87,20 +87,20 @@ atom-text-editor { } .highlight { - contain: @contain_but_paint; + contain: @contain_except_paint; background: none; padding: 0; } .highlight .region { - contain: @contain_but_paint; + contain: @contain_except_paint; pointer-events: none; z-index: -1; } .line { white-space: pre; - contain: @contain_but_size; + contain: @contain_except_size; &.cursor-line .fold-marker::after { opacity: 1; @@ -120,7 +120,7 @@ atom-text-editor { } .placeholder-text { - contain: @contain_but_size; + contain: @contain_except_size; position: absolute; color: @text-color-subtle; } @@ -132,7 +132,7 @@ atom-text-editor { } .indent-guide { - contain: @contain_but_layout_size; + contain: @contain_except_layout_size; display: inline-block; box-shadow: inset 1px 0; } @@ -161,7 +161,7 @@ atom-text-editor { } atom-text-editor[mini] { - contain: @contain_but_size; + contain: @contain_except_size; font-size: @input-font-size; line-height: @component-line-height; max-height: @component-line-height + 2; // +2 for borders @@ -169,7 +169,7 @@ atom-text-editor[mini] { } atom-overlay { - contain: layout style; + contain: @contain_except_size_paint; position: fixed; display: block; z-index: 4; diff --git a/static/core-ui/utils.less b/static/core-ui/utils.less index 7f9901b6a..d51615021 100644 --- a/static/core-ui/utils.less +++ b/static/core-ui/utils.less @@ -1,10 +1,10 @@ // CSS containment variables. -// The words after `but` explicitly show the excluded/incompatible values. +// The words after `except` explicitly show the excluded/incompatible values. @contain_all: layout size paint style; -@contain_but_layout: size paint style; -@contain_but_size: layout paint style; -@contain_but_paint: layout size style; -@contain_but_layout_size: paint style; -@contain_but_layout_paint: size style; -@contain_but_size_paint: layout style; +@contain_except_layout: size paint style; +@contain_except_size: layout paint style; +@contain_except_paint: layout size style; +@contain_except_layout_size: paint style; +@contain_except_layout_paint: size style; +@contain_except_size_paint: layout style; diff --git a/static/core-ui/workspace-view.less b/static/core-ui/workspace-view.less index 3f6ee5b10..de4a5d60e 100644 --- a/static/core-ui/workspace-view.less +++ b/static/core-ui/workspace-view.less @@ -13,12 +13,12 @@ atom-workspace { font-family: @font-family; atom-workspace-axis { - contain: @contain_but_layout_paint; + contain: @contain_except_layout_paint; position: relative; } atom-workspace-axis.horizontal { - contain: @contain_but_layout_paint; + contain: @contain_except_layout_paint; display: flex; flex: 1; min-width: 0; @@ -26,7 +26,7 @@ atom-workspace { } atom-workspace-axis.vertical { - contain: @contain_but_layout_paint; + contain: @contain_except_layout_paint; display: flex; flex: 1; flex-direction: column; diff --git a/static/index.js b/static/index.js index 75be58393..b68916144 100644 --- a/static/index.js +++ b/static/index.js @@ -145,6 +145,25 @@ ? snapshotResult.customRequire('../src/crash-reporter-start.js') : require('../src/crash-reporter-start'); + useSnapshot + ? snapshotResult.customRequire( + '../node_modules/document-register-element/build/document-register-element.node.js' + ) + : require('document-register-element'); + + const Grim = useSnapshot + ? snapshotResult.customRequire('../node_modules/grim/lib/grim.js') + : require('grim'); + const documentRegisterElement = document.registerElement; + + document.registerElement = (type, options) => { + Grim.deprecate( + 'Use `customElements.define` instead of `document.registerElement` see https://javascript.info/custom-elements' + ); + + return documentRegisterElement(type, options); + }; + const { userSettings, appVersion } = getWindowLoadSettings(); const uploadToServer = userSettings && diff --git a/vendor/jasmine.js b/vendor/jasmine.js index 2cec4bf76..716fbeb7e 100644 --- a/vendor/jasmine.js +++ b/vendor/jasmine.js @@ -1190,16 +1190,6 @@ jasmine.Matchers = function(env, actual, spec, opt_isNot) { this.reportWasCalled_ = false; }; -// todo: @deprecated as of Jasmine 0.11, remove soon [xw] -jasmine.Matchers.pp = function(str) { - throw new Error("jasmine.Matchers.pp() is no longer supported, please use jasmine.pp() instead!"); -}; - -// todo: @deprecated Deprecated as of Jasmine 0.10. Rewrite your custom matchers to return true or false. [xw] -jasmine.Matchers.prototype.report = function(result, failing_message, details) { - throw new Error("As of jasmine 0.11, custom matchers must be implemented differently -- please see jasmine docs"); -}; - jasmine.Matchers.wrapInto_ = function(prototype, matchersClass) { for (var methodName in prototype) { if (methodName == 'report') continue;